1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Xen event channels 4 * 5 * Xen models interrupts with abstract event channels. Because each 6 * domain gets 1024 event channels, but NR_IRQ is not that large, we 7 * must dynamically map irqs<->event channels. The event channels 8 * interface with the rest of the kernel by defining a xen interrupt 9 * chip. When an event is received, it is mapped to an irq and sent 10 * through the normal interrupt processing path. 11 * 12 * There are four kinds of events which can be mapped to an event 13 * channel: 14 * 15 * 1. Inter-domain notifications. This includes all the virtual 16 * device events, since they're driven by front-ends in another domain 17 * (typically dom0). 18 * 2. VIRQs, typically used for timers. These are per-cpu events. 19 * 3. IPIs. 20 * 4. PIRQs - Hardware interrupts. 21 * 22 * Jeremy Fitzhardinge <jeremy@xensource.com>, XenSource Inc, 2007 23 */ 24 25 #define pr_fmt(fmt) "xen:" KBUILD_MODNAME ": " fmt 26 27 #include <linux/linkage.h> 28 #include <linux/interrupt.h> 29 #include <linux/irq.h> 30 #include <linux/moduleparam.h> 31 #include <linux/string.h> 32 #include <linux/memblock.h> 33 #include <linux/slab.h> 34 #include <linux/irqnr.h> 35 #include <linux/pci.h> 36 37 #ifdef CONFIG_X86 38 #include <asm/desc.h> 39 #include <asm/ptrace.h> 40 #include <asm/idtentry.h> 41 #include <asm/irq.h> 42 #include <asm/io_apic.h> 43 #include <asm/i8259.h> 44 #include <asm/xen/pci.h> 45 #endif 46 #include <asm/sync_bitops.h> 47 #include <asm/xen/hypercall.h> 48 #include <asm/xen/hypervisor.h> 49 #include <xen/page.h> 50 51 #include <xen/xen.h> 52 #include <xen/hvm.h> 53 #include <xen/xen-ops.h> 54 #include <xen/events.h> 55 #include <xen/interface/xen.h> 56 #include <xen/interface/event_channel.h> 57 #include <xen/interface/hvm/hvm_op.h> 58 #include <xen/interface/hvm/params.h> 59 #include <xen/interface/physdev.h> 60 #include <xen/interface/sched.h> 61 #include <xen/interface/vcpu.h> 62 #include <asm/hw_irq.h> 63 64 #include "events_internal.h" 65 66 const struct evtchn_ops *evtchn_ops; 67 68 /* 69 * This lock protects updates to the following mapping and reference-count 70 * arrays. The lock does not need to be acquired to read the mapping tables. 71 */ 72 static DEFINE_MUTEX(irq_mapping_update_lock); 73 74 static LIST_HEAD(xen_irq_list_head); 75 76 /* IRQ <-> VIRQ mapping. */ 77 static DEFINE_PER_CPU(int [NR_VIRQS], virq_to_irq) = {[0 ... NR_VIRQS-1] = -1}; 78 79 /* IRQ <-> IPI mapping */ 80 static DEFINE_PER_CPU(int [XEN_NR_IPIS], ipi_to_irq) = {[0 ... XEN_NR_IPIS-1] = -1}; 81 82 int **evtchn_to_irq; 83 #ifdef CONFIG_X86 84 static unsigned long *pirq_eoi_map; 85 #endif 86 static bool (*pirq_needs_eoi)(unsigned irq); 87 88 #define EVTCHN_ROW(e) (e / (PAGE_SIZE/sizeof(**evtchn_to_irq))) 89 #define EVTCHN_COL(e) (e % (PAGE_SIZE/sizeof(**evtchn_to_irq))) 90 #define EVTCHN_PER_ROW (PAGE_SIZE / sizeof(**evtchn_to_irq)) 91 92 /* Xen will never allocate port zero for any purpose. */ 93 #define VALID_EVTCHN(chn) ((chn) != 0) 94 95 static struct irq_info *legacy_info_ptrs[NR_IRQS_LEGACY]; 96 97 static struct irq_chip xen_dynamic_chip; 98 static struct irq_chip xen_percpu_chip; 99 static struct irq_chip xen_pirq_chip; 100 static void enable_dynirq(struct irq_data *data); 101 static void disable_dynirq(struct irq_data *data); 102 103 static void clear_evtchn_to_irq_row(unsigned row) 104 { 105 unsigned col; 106 107 for (col = 0; col < EVTCHN_PER_ROW; col++) 108 evtchn_to_irq[row][col] = -1; 109 } 110 111 static void clear_evtchn_to_irq_all(void) 112 { 113 unsigned row; 114 115 for (row = 0; row < EVTCHN_ROW(xen_evtchn_max_channels()); row++) { 116 if (evtchn_to_irq[row] == NULL) 117 continue; 118 clear_evtchn_to_irq_row(row); 119 } 120 } 121 122 static int set_evtchn_to_irq(evtchn_port_t evtchn, unsigned int irq) 123 { 124 unsigned row; 125 unsigned col; 126 127 if (evtchn >= xen_evtchn_max_channels()) 128 return -EINVAL; 129 130 row = EVTCHN_ROW(evtchn); 131 col = EVTCHN_COL(evtchn); 132 133 if (evtchn_to_irq[row] == NULL) { 134 /* Unallocated irq entries return -1 anyway */ 135 if (irq == -1) 136 return 0; 137 138 evtchn_to_irq[row] = (int *)get_zeroed_page(GFP_KERNEL); 139 if (evtchn_to_irq[row] == NULL) 140 return -ENOMEM; 141 142 clear_evtchn_to_irq_row(row); 143 } 144 145 evtchn_to_irq[row][col] = irq; 146 return 0; 147 } 148 149 int get_evtchn_to_irq(evtchn_port_t evtchn) 150 { 151 if (evtchn >= xen_evtchn_max_channels()) 152 return -1; 153 if (evtchn_to_irq[EVTCHN_ROW(evtchn)] == NULL) 154 return -1; 155 return evtchn_to_irq[EVTCHN_ROW(evtchn)][EVTCHN_COL(evtchn)]; 156 } 157 158 /* Get info for IRQ */ 159 struct irq_info *info_for_irq(unsigned irq) 160 { 161 if (irq < nr_legacy_irqs()) 162 return legacy_info_ptrs[irq]; 163 else 164 return irq_get_chip_data(irq); 165 } 166 167 static void set_info_for_irq(unsigned int irq, struct irq_info *info) 168 { 169 if (irq < nr_legacy_irqs()) 170 legacy_info_ptrs[irq] = info; 171 else 172 irq_set_chip_data(irq, info); 173 } 174 175 /* Constructors for packed IRQ information. */ 176 static int xen_irq_info_common_setup(struct irq_info *info, 177 unsigned irq, 178 enum xen_irq_type type, 179 evtchn_port_t evtchn, 180 unsigned short cpu) 181 { 182 int ret; 183 184 BUG_ON(info->type != IRQT_UNBOUND && info->type != type); 185 186 info->type = type; 187 info->irq = irq; 188 info->evtchn = evtchn; 189 info->cpu = cpu; 190 191 ret = set_evtchn_to_irq(evtchn, irq); 192 if (ret < 0) 193 return ret; 194 195 irq_clear_status_flags(irq, IRQ_NOREQUEST|IRQ_NOAUTOEN); 196 197 return xen_evtchn_port_setup(info); 198 } 199 200 static int xen_irq_info_evtchn_setup(unsigned irq, 201 evtchn_port_t evtchn) 202 { 203 struct irq_info *info = info_for_irq(irq); 204 205 return xen_irq_info_common_setup(info, irq, IRQT_EVTCHN, evtchn, 0); 206 } 207 208 static int xen_irq_info_ipi_setup(unsigned cpu, 209 unsigned irq, 210 evtchn_port_t evtchn, 211 enum ipi_vector ipi) 212 { 213 struct irq_info *info = info_for_irq(irq); 214 215 info->u.ipi = ipi; 216 217 per_cpu(ipi_to_irq, cpu)[ipi] = irq; 218 219 return xen_irq_info_common_setup(info, irq, IRQT_IPI, evtchn, 0); 220 } 221 222 static int xen_irq_info_virq_setup(unsigned cpu, 223 unsigned irq, 224 evtchn_port_t evtchn, 225 unsigned virq) 226 { 227 struct irq_info *info = info_for_irq(irq); 228 229 info->u.virq = virq; 230 231 per_cpu(virq_to_irq, cpu)[virq] = irq; 232 233 return xen_irq_info_common_setup(info, irq, IRQT_VIRQ, evtchn, 0); 234 } 235 236 static int xen_irq_info_pirq_setup(unsigned irq, 237 evtchn_port_t evtchn, 238 unsigned pirq, 239 unsigned gsi, 240 uint16_t domid, 241 unsigned char flags) 242 { 243 struct irq_info *info = info_for_irq(irq); 244 245 info->u.pirq.pirq = pirq; 246 info->u.pirq.gsi = gsi; 247 info->u.pirq.domid = domid; 248 info->u.pirq.flags = flags; 249 250 return xen_irq_info_common_setup(info, irq, IRQT_PIRQ, evtchn, 0); 251 } 252 253 static void xen_irq_info_cleanup(struct irq_info *info) 254 { 255 set_evtchn_to_irq(info->evtchn, -1); 256 info->evtchn = 0; 257 } 258 259 /* 260 * Accessors for packed IRQ information. 261 */ 262 evtchn_port_t evtchn_from_irq(unsigned irq) 263 { 264 if (WARN(irq >= nr_irqs, "Invalid irq %d!\n", irq)) 265 return 0; 266 267 return info_for_irq(irq)->evtchn; 268 } 269 270 unsigned int irq_from_evtchn(evtchn_port_t evtchn) 271 { 272 return get_evtchn_to_irq(evtchn); 273 } 274 EXPORT_SYMBOL_GPL(irq_from_evtchn); 275 276 int irq_from_virq(unsigned int cpu, unsigned int virq) 277 { 278 return per_cpu(virq_to_irq, cpu)[virq]; 279 } 280 281 static enum ipi_vector ipi_from_irq(unsigned irq) 282 { 283 struct irq_info *info = info_for_irq(irq); 284 285 BUG_ON(info == NULL); 286 BUG_ON(info->type != IRQT_IPI); 287 288 return info->u.ipi; 289 } 290 291 static unsigned virq_from_irq(unsigned irq) 292 { 293 struct irq_info *info = info_for_irq(irq); 294 295 BUG_ON(info == NULL); 296 BUG_ON(info->type != IRQT_VIRQ); 297 298 return info->u.virq; 299 } 300 301 static unsigned pirq_from_irq(unsigned irq) 302 { 303 struct irq_info *info = info_for_irq(irq); 304 305 BUG_ON(info == NULL); 306 BUG_ON(info->type != IRQT_PIRQ); 307 308 return info->u.pirq.pirq; 309 } 310 311 static enum xen_irq_type type_from_irq(unsigned irq) 312 { 313 return info_for_irq(irq)->type; 314 } 315 316 unsigned cpu_from_irq(unsigned irq) 317 { 318 return info_for_irq(irq)->cpu; 319 } 320 321 unsigned int cpu_from_evtchn(evtchn_port_t evtchn) 322 { 323 int irq = get_evtchn_to_irq(evtchn); 324 unsigned ret = 0; 325 326 if (irq != -1) 327 ret = cpu_from_irq(irq); 328 329 return ret; 330 } 331 332 #ifdef CONFIG_X86 333 static bool pirq_check_eoi_map(unsigned irq) 334 { 335 return test_bit(pirq_from_irq(irq), pirq_eoi_map); 336 } 337 #endif 338 339 static bool pirq_needs_eoi_flag(unsigned irq) 340 { 341 struct irq_info *info = info_for_irq(irq); 342 BUG_ON(info->type != IRQT_PIRQ); 343 344 return info->u.pirq.flags & PIRQ_NEEDS_EOI; 345 } 346 347 static void bind_evtchn_to_cpu(evtchn_port_t evtchn, unsigned int cpu) 348 { 349 int irq = get_evtchn_to_irq(evtchn); 350 struct irq_info *info = info_for_irq(irq); 351 352 BUG_ON(irq == -1); 353 #ifdef CONFIG_SMP 354 cpumask_copy(irq_get_affinity_mask(irq), cpumask_of(cpu)); 355 #endif 356 xen_evtchn_port_bind_to_cpu(info, cpu); 357 358 info->cpu = cpu; 359 } 360 361 /** 362 * notify_remote_via_irq - send event to remote end of event channel via irq 363 * @irq: irq of event channel to send event to 364 * 365 * Unlike notify_remote_via_evtchn(), this is safe to use across 366 * save/restore. Notifications on a broken connection are silently 367 * dropped. 368 */ 369 void notify_remote_via_irq(int irq) 370 { 371 evtchn_port_t evtchn = evtchn_from_irq(irq); 372 373 if (VALID_EVTCHN(evtchn)) 374 notify_remote_via_evtchn(evtchn); 375 } 376 EXPORT_SYMBOL_GPL(notify_remote_via_irq); 377 378 static void xen_irq_init(unsigned irq) 379 { 380 struct irq_info *info; 381 #ifdef CONFIG_SMP 382 /* By default all event channels notify CPU#0. */ 383 cpumask_copy(irq_get_affinity_mask(irq), cpumask_of(0)); 384 #endif 385 386 info = kzalloc(sizeof(*info), GFP_KERNEL); 387 if (info == NULL) 388 panic("Unable to allocate metadata for IRQ%d\n", irq); 389 390 info->type = IRQT_UNBOUND; 391 info->refcnt = -1; 392 393 set_info_for_irq(irq, info); 394 395 list_add_tail(&info->list, &xen_irq_list_head); 396 } 397 398 static int __must_check xen_allocate_irqs_dynamic(int nvec) 399 { 400 int i, irq = irq_alloc_descs(-1, 0, nvec, -1); 401 402 if (irq >= 0) { 403 for (i = 0; i < nvec; i++) 404 xen_irq_init(irq + i); 405 } 406 407 return irq; 408 } 409 410 static inline int __must_check xen_allocate_irq_dynamic(void) 411 { 412 413 return xen_allocate_irqs_dynamic(1); 414 } 415 416 static int __must_check xen_allocate_irq_gsi(unsigned gsi) 417 { 418 int irq; 419 420 /* 421 * A PV guest has no concept of a GSI (since it has no ACPI 422 * nor access to/knowledge of the physical APICs). Therefore 423 * all IRQs are dynamically allocated from the entire IRQ 424 * space. 425 */ 426 if (xen_pv_domain() && !xen_initial_domain()) 427 return xen_allocate_irq_dynamic(); 428 429 /* Legacy IRQ descriptors are already allocated by the arch. */ 430 if (gsi < nr_legacy_irqs()) 431 irq = gsi; 432 else 433 irq = irq_alloc_desc_at(gsi, -1); 434 435 xen_irq_init(irq); 436 437 return irq; 438 } 439 440 static void xen_free_irq(unsigned irq) 441 { 442 struct irq_info *info = info_for_irq(irq); 443 444 if (WARN_ON(!info)) 445 return; 446 447 list_del(&info->list); 448 449 set_info_for_irq(irq, NULL); 450 451 WARN_ON(info->refcnt > 0); 452 453 kfree(info); 454 455 /* Legacy IRQ descriptors are managed by the arch. */ 456 if (irq < nr_legacy_irqs()) 457 return; 458 459 irq_free_desc(irq); 460 } 461 462 static void xen_evtchn_close(evtchn_port_t port) 463 { 464 struct evtchn_close close; 465 466 close.port = port; 467 if (HYPERVISOR_event_channel_op(EVTCHNOP_close, &close) != 0) 468 BUG(); 469 } 470 471 static void pirq_query_unmask(int irq) 472 { 473 struct physdev_irq_status_query irq_status; 474 struct irq_info *info = info_for_irq(irq); 475 476 BUG_ON(info->type != IRQT_PIRQ); 477 478 irq_status.irq = pirq_from_irq(irq); 479 if (HYPERVISOR_physdev_op(PHYSDEVOP_irq_status_query, &irq_status)) 480 irq_status.flags = 0; 481 482 info->u.pirq.flags &= ~PIRQ_NEEDS_EOI; 483 if (irq_status.flags & XENIRQSTAT_needs_eoi) 484 info->u.pirq.flags |= PIRQ_NEEDS_EOI; 485 } 486 487 static void eoi_pirq(struct irq_data *data) 488 { 489 evtchn_port_t evtchn = evtchn_from_irq(data->irq); 490 struct physdev_eoi eoi = { .irq = pirq_from_irq(data->irq) }; 491 int rc = 0; 492 493 if (!VALID_EVTCHN(evtchn)) 494 return; 495 496 if (unlikely(irqd_is_setaffinity_pending(data)) && 497 likely(!irqd_irq_disabled(data))) { 498 int masked = test_and_set_mask(evtchn); 499 500 clear_evtchn(evtchn); 501 502 irq_move_masked_irq(data); 503 504 if (!masked) 505 unmask_evtchn(evtchn); 506 } else 507 clear_evtchn(evtchn); 508 509 if (pirq_needs_eoi(data->irq)) { 510 rc = HYPERVISOR_physdev_op(PHYSDEVOP_eoi, &eoi); 511 WARN_ON(rc); 512 } 513 } 514 515 static void mask_ack_pirq(struct irq_data *data) 516 { 517 disable_dynirq(data); 518 eoi_pirq(data); 519 } 520 521 static unsigned int __startup_pirq(unsigned int irq) 522 { 523 struct evtchn_bind_pirq bind_pirq; 524 struct irq_info *info = info_for_irq(irq); 525 evtchn_port_t evtchn = evtchn_from_irq(irq); 526 int rc; 527 528 BUG_ON(info->type != IRQT_PIRQ); 529 530 if (VALID_EVTCHN(evtchn)) 531 goto out; 532 533 bind_pirq.pirq = pirq_from_irq(irq); 534 /* NB. We are happy to share unless we are probing. */ 535 bind_pirq.flags = info->u.pirq.flags & PIRQ_SHAREABLE ? 536 BIND_PIRQ__WILL_SHARE : 0; 537 rc = HYPERVISOR_event_channel_op(EVTCHNOP_bind_pirq, &bind_pirq); 538 if (rc != 0) { 539 pr_warn("Failed to obtain physical IRQ %d\n", irq); 540 return 0; 541 } 542 evtchn = bind_pirq.port; 543 544 pirq_query_unmask(irq); 545 546 rc = set_evtchn_to_irq(evtchn, irq); 547 if (rc) 548 goto err; 549 550 info->evtchn = evtchn; 551 bind_evtchn_to_cpu(evtchn, 0); 552 553 rc = xen_evtchn_port_setup(info); 554 if (rc) 555 goto err; 556 557 out: 558 unmask_evtchn(evtchn); 559 eoi_pirq(irq_get_irq_data(irq)); 560 561 return 0; 562 563 err: 564 pr_err("irq%d: Failed to set port to irq mapping (%d)\n", irq, rc); 565 xen_evtchn_close(evtchn); 566 return 0; 567 } 568 569 static unsigned int startup_pirq(struct irq_data *data) 570 { 571 return __startup_pirq(data->irq); 572 } 573 574 static void shutdown_pirq(struct irq_data *data) 575 { 576 unsigned int irq = data->irq; 577 struct irq_info *info = info_for_irq(irq); 578 evtchn_port_t evtchn = evtchn_from_irq(irq); 579 580 BUG_ON(info->type != IRQT_PIRQ); 581 582 if (!VALID_EVTCHN(evtchn)) 583 return; 584 585 mask_evtchn(evtchn); 586 xen_evtchn_close(evtchn); 587 xen_irq_info_cleanup(info); 588 } 589 590 static void enable_pirq(struct irq_data *data) 591 { 592 enable_dynirq(data); 593 } 594 595 static void disable_pirq(struct irq_data *data) 596 { 597 disable_dynirq(data); 598 } 599 600 int xen_irq_from_gsi(unsigned gsi) 601 { 602 struct irq_info *info; 603 604 list_for_each_entry(info, &xen_irq_list_head, list) { 605 if (info->type != IRQT_PIRQ) 606 continue; 607 608 if (info->u.pirq.gsi == gsi) 609 return info->irq; 610 } 611 612 return -1; 613 } 614 EXPORT_SYMBOL_GPL(xen_irq_from_gsi); 615 616 static void __unbind_from_irq(unsigned int irq) 617 { 618 evtchn_port_t evtchn = evtchn_from_irq(irq); 619 struct irq_info *info = info_for_irq(irq); 620 621 if (info->refcnt > 0) { 622 info->refcnt--; 623 if (info->refcnt != 0) 624 return; 625 } 626 627 if (VALID_EVTCHN(evtchn)) { 628 unsigned int cpu = cpu_from_irq(irq); 629 630 xen_evtchn_close(evtchn); 631 632 switch (type_from_irq(irq)) { 633 case IRQT_VIRQ: 634 per_cpu(virq_to_irq, cpu)[virq_from_irq(irq)] = -1; 635 break; 636 case IRQT_IPI: 637 per_cpu(ipi_to_irq, cpu)[ipi_from_irq(irq)] = -1; 638 break; 639 default: 640 break; 641 } 642 643 xen_irq_info_cleanup(info); 644 } 645 646 xen_free_irq(irq); 647 } 648 649 /* 650 * Do not make any assumptions regarding the relationship between the 651 * IRQ number returned here and the Xen pirq argument. 652 * 653 * Note: We don't assign an event channel until the irq actually started 654 * up. Return an existing irq if we've already got one for the gsi. 655 * 656 * Shareable implies level triggered, not shareable implies edge 657 * triggered here. 658 */ 659 int xen_bind_pirq_gsi_to_irq(unsigned gsi, 660 unsigned pirq, int shareable, char *name) 661 { 662 int irq = -1; 663 struct physdev_irq irq_op; 664 int ret; 665 666 mutex_lock(&irq_mapping_update_lock); 667 668 irq = xen_irq_from_gsi(gsi); 669 if (irq != -1) { 670 pr_info("%s: returning irq %d for gsi %u\n", 671 __func__, irq, gsi); 672 goto out; 673 } 674 675 irq = xen_allocate_irq_gsi(gsi); 676 if (irq < 0) 677 goto out; 678 679 irq_op.irq = irq; 680 irq_op.vector = 0; 681 682 /* Only the privileged domain can do this. For non-priv, the pcifront 683 * driver provides a PCI bus that does the call to do exactly 684 * this in the priv domain. */ 685 if (xen_initial_domain() && 686 HYPERVISOR_physdev_op(PHYSDEVOP_alloc_irq_vector, &irq_op)) { 687 xen_free_irq(irq); 688 irq = -ENOSPC; 689 goto out; 690 } 691 692 ret = xen_irq_info_pirq_setup(irq, 0, pirq, gsi, DOMID_SELF, 693 shareable ? PIRQ_SHAREABLE : 0); 694 if (ret < 0) { 695 __unbind_from_irq(irq); 696 irq = ret; 697 goto out; 698 } 699 700 pirq_query_unmask(irq); 701 /* We try to use the handler with the appropriate semantic for the 702 * type of interrupt: if the interrupt is an edge triggered 703 * interrupt we use handle_edge_irq. 704 * 705 * On the other hand if the interrupt is level triggered we use 706 * handle_fasteoi_irq like the native code does for this kind of 707 * interrupts. 708 * 709 * Depending on the Xen version, pirq_needs_eoi might return true 710 * not only for level triggered interrupts but for edge triggered 711 * interrupts too. In any case Xen always honors the eoi mechanism, 712 * not injecting any more pirqs of the same kind if the first one 713 * hasn't received an eoi yet. Therefore using the fasteoi handler 714 * is the right choice either way. 715 */ 716 if (shareable) 717 irq_set_chip_and_handler_name(irq, &xen_pirq_chip, 718 handle_fasteoi_irq, name); 719 else 720 irq_set_chip_and_handler_name(irq, &xen_pirq_chip, 721 handle_edge_irq, name); 722 723 out: 724 mutex_unlock(&irq_mapping_update_lock); 725 726 return irq; 727 } 728 729 #ifdef CONFIG_PCI_MSI 730 int xen_allocate_pirq_msi(struct pci_dev *dev, struct msi_desc *msidesc) 731 { 732 int rc; 733 struct physdev_get_free_pirq op_get_free_pirq; 734 735 op_get_free_pirq.type = MAP_PIRQ_TYPE_MSI; 736 rc = HYPERVISOR_physdev_op(PHYSDEVOP_get_free_pirq, &op_get_free_pirq); 737 738 WARN_ONCE(rc == -ENOSYS, 739 "hypervisor does not support the PHYSDEVOP_get_free_pirq interface\n"); 740 741 return rc ? -1 : op_get_free_pirq.pirq; 742 } 743 744 int xen_bind_pirq_msi_to_irq(struct pci_dev *dev, struct msi_desc *msidesc, 745 int pirq, int nvec, const char *name, domid_t domid) 746 { 747 int i, irq, ret; 748 749 mutex_lock(&irq_mapping_update_lock); 750 751 irq = xen_allocate_irqs_dynamic(nvec); 752 if (irq < 0) 753 goto out; 754 755 for (i = 0; i < nvec; i++) { 756 irq_set_chip_and_handler_name(irq + i, &xen_pirq_chip, handle_edge_irq, name); 757 758 ret = xen_irq_info_pirq_setup(irq + i, 0, pirq + i, 0, domid, 759 i == 0 ? 0 : PIRQ_MSI_GROUP); 760 if (ret < 0) 761 goto error_irq; 762 } 763 764 ret = irq_set_msi_desc(irq, msidesc); 765 if (ret < 0) 766 goto error_irq; 767 out: 768 mutex_unlock(&irq_mapping_update_lock); 769 return irq; 770 error_irq: 771 while (nvec--) 772 __unbind_from_irq(irq + nvec); 773 mutex_unlock(&irq_mapping_update_lock); 774 return ret; 775 } 776 #endif 777 778 int xen_destroy_irq(int irq) 779 { 780 struct physdev_unmap_pirq unmap_irq; 781 struct irq_info *info = info_for_irq(irq); 782 int rc = -ENOENT; 783 784 mutex_lock(&irq_mapping_update_lock); 785 786 /* 787 * If trying to remove a vector in a MSI group different 788 * than the first one skip the PIRQ unmap unless this vector 789 * is the first one in the group. 790 */ 791 if (xen_initial_domain() && !(info->u.pirq.flags & PIRQ_MSI_GROUP)) { 792 unmap_irq.pirq = info->u.pirq.pirq; 793 unmap_irq.domid = info->u.pirq.domid; 794 rc = HYPERVISOR_physdev_op(PHYSDEVOP_unmap_pirq, &unmap_irq); 795 /* If another domain quits without making the pci_disable_msix 796 * call, the Xen hypervisor takes care of freeing the PIRQs 797 * (free_domain_pirqs). 798 */ 799 if ((rc == -ESRCH && info->u.pirq.domid != DOMID_SELF)) 800 pr_info("domain %d does not have %d anymore\n", 801 info->u.pirq.domid, info->u.pirq.pirq); 802 else if (rc) { 803 pr_warn("unmap irq failed %d\n", rc); 804 goto out; 805 } 806 } 807 808 xen_free_irq(irq); 809 810 out: 811 mutex_unlock(&irq_mapping_update_lock); 812 return rc; 813 } 814 815 int xen_irq_from_pirq(unsigned pirq) 816 { 817 int irq; 818 819 struct irq_info *info; 820 821 mutex_lock(&irq_mapping_update_lock); 822 823 list_for_each_entry(info, &xen_irq_list_head, list) { 824 if (info->type != IRQT_PIRQ) 825 continue; 826 irq = info->irq; 827 if (info->u.pirq.pirq == pirq) 828 goto out; 829 } 830 irq = -1; 831 out: 832 mutex_unlock(&irq_mapping_update_lock); 833 834 return irq; 835 } 836 837 838 int xen_pirq_from_irq(unsigned irq) 839 { 840 return pirq_from_irq(irq); 841 } 842 EXPORT_SYMBOL_GPL(xen_pirq_from_irq); 843 844 int bind_evtchn_to_irq(evtchn_port_t evtchn) 845 { 846 int irq; 847 int ret; 848 849 if (evtchn >= xen_evtchn_max_channels()) 850 return -ENOMEM; 851 852 mutex_lock(&irq_mapping_update_lock); 853 854 irq = get_evtchn_to_irq(evtchn); 855 856 if (irq == -1) { 857 irq = xen_allocate_irq_dynamic(); 858 if (irq < 0) 859 goto out; 860 861 irq_set_chip_and_handler_name(irq, &xen_dynamic_chip, 862 handle_edge_irq, "event"); 863 864 ret = xen_irq_info_evtchn_setup(irq, evtchn); 865 if (ret < 0) { 866 __unbind_from_irq(irq); 867 irq = ret; 868 goto out; 869 } 870 /* New interdomain events are bound to VCPU 0. */ 871 bind_evtchn_to_cpu(evtchn, 0); 872 } else { 873 struct irq_info *info = info_for_irq(irq); 874 WARN_ON(info == NULL || info->type != IRQT_EVTCHN); 875 } 876 877 out: 878 mutex_unlock(&irq_mapping_update_lock); 879 880 return irq; 881 } 882 EXPORT_SYMBOL_GPL(bind_evtchn_to_irq); 883 884 static int bind_ipi_to_irq(unsigned int ipi, unsigned int cpu) 885 { 886 struct evtchn_bind_ipi bind_ipi; 887 evtchn_port_t evtchn; 888 int ret, irq; 889 890 mutex_lock(&irq_mapping_update_lock); 891 892 irq = per_cpu(ipi_to_irq, cpu)[ipi]; 893 894 if (irq == -1) { 895 irq = xen_allocate_irq_dynamic(); 896 if (irq < 0) 897 goto out; 898 899 irq_set_chip_and_handler_name(irq, &xen_percpu_chip, 900 handle_percpu_irq, "ipi"); 901 902 bind_ipi.vcpu = xen_vcpu_nr(cpu); 903 if (HYPERVISOR_event_channel_op(EVTCHNOP_bind_ipi, 904 &bind_ipi) != 0) 905 BUG(); 906 evtchn = bind_ipi.port; 907 908 ret = xen_irq_info_ipi_setup(cpu, irq, evtchn, ipi); 909 if (ret < 0) { 910 __unbind_from_irq(irq); 911 irq = ret; 912 goto out; 913 } 914 bind_evtchn_to_cpu(evtchn, cpu); 915 } else { 916 struct irq_info *info = info_for_irq(irq); 917 WARN_ON(info == NULL || info->type != IRQT_IPI); 918 } 919 920 out: 921 mutex_unlock(&irq_mapping_update_lock); 922 return irq; 923 } 924 925 int bind_interdomain_evtchn_to_irq(unsigned int remote_domain, 926 evtchn_port_t remote_port) 927 { 928 struct evtchn_bind_interdomain bind_interdomain; 929 int err; 930 931 bind_interdomain.remote_dom = remote_domain; 932 bind_interdomain.remote_port = remote_port; 933 934 err = HYPERVISOR_event_channel_op(EVTCHNOP_bind_interdomain, 935 &bind_interdomain); 936 937 return err ? : bind_evtchn_to_irq(bind_interdomain.local_port); 938 } 939 EXPORT_SYMBOL_GPL(bind_interdomain_evtchn_to_irq); 940 941 static int find_virq(unsigned int virq, unsigned int cpu, evtchn_port_t *evtchn) 942 { 943 struct evtchn_status status; 944 evtchn_port_t port; 945 int rc = -ENOENT; 946 947 memset(&status, 0, sizeof(status)); 948 for (port = 0; port < xen_evtchn_max_channels(); port++) { 949 status.dom = DOMID_SELF; 950 status.port = port; 951 rc = HYPERVISOR_event_channel_op(EVTCHNOP_status, &status); 952 if (rc < 0) 953 continue; 954 if (status.status != EVTCHNSTAT_virq) 955 continue; 956 if (status.u.virq == virq && status.vcpu == xen_vcpu_nr(cpu)) { 957 *evtchn = port; 958 break; 959 } 960 } 961 return rc; 962 } 963 964 /** 965 * xen_evtchn_nr_channels - number of usable event channel ports 966 * 967 * This may be less than the maximum supported by the current 968 * hypervisor ABI. Use xen_evtchn_max_channels() for the maximum 969 * supported. 970 */ 971 unsigned xen_evtchn_nr_channels(void) 972 { 973 return evtchn_ops->nr_channels(); 974 } 975 EXPORT_SYMBOL_GPL(xen_evtchn_nr_channels); 976 977 int bind_virq_to_irq(unsigned int virq, unsigned int cpu, bool percpu) 978 { 979 struct evtchn_bind_virq bind_virq; 980 evtchn_port_t evtchn = 0; 981 int irq, ret; 982 983 mutex_lock(&irq_mapping_update_lock); 984 985 irq = per_cpu(virq_to_irq, cpu)[virq]; 986 987 if (irq == -1) { 988 irq = xen_allocate_irq_dynamic(); 989 if (irq < 0) 990 goto out; 991 992 if (percpu) 993 irq_set_chip_and_handler_name(irq, &xen_percpu_chip, 994 handle_percpu_irq, "virq"); 995 else 996 irq_set_chip_and_handler_name(irq, &xen_dynamic_chip, 997 handle_edge_irq, "virq"); 998 999 bind_virq.virq = virq; 1000 bind_virq.vcpu = xen_vcpu_nr(cpu); 1001 ret = HYPERVISOR_event_channel_op(EVTCHNOP_bind_virq, 1002 &bind_virq); 1003 if (ret == 0) 1004 evtchn = bind_virq.port; 1005 else { 1006 if (ret == -EEXIST) 1007 ret = find_virq(virq, cpu, &evtchn); 1008 BUG_ON(ret < 0); 1009 } 1010 1011 ret = xen_irq_info_virq_setup(cpu, irq, evtchn, virq); 1012 if (ret < 0) { 1013 __unbind_from_irq(irq); 1014 irq = ret; 1015 goto out; 1016 } 1017 1018 bind_evtchn_to_cpu(evtchn, cpu); 1019 } else { 1020 struct irq_info *info = info_for_irq(irq); 1021 WARN_ON(info == NULL || info->type != IRQT_VIRQ); 1022 } 1023 1024 out: 1025 mutex_unlock(&irq_mapping_update_lock); 1026 1027 return irq; 1028 } 1029 1030 static void unbind_from_irq(unsigned int irq) 1031 { 1032 mutex_lock(&irq_mapping_update_lock); 1033 __unbind_from_irq(irq); 1034 mutex_unlock(&irq_mapping_update_lock); 1035 } 1036 1037 int bind_evtchn_to_irqhandler(evtchn_port_t evtchn, 1038 irq_handler_t handler, 1039 unsigned long irqflags, 1040 const char *devname, void *dev_id) 1041 { 1042 int irq, retval; 1043 1044 irq = bind_evtchn_to_irq(evtchn); 1045 if (irq < 0) 1046 return irq; 1047 retval = request_irq(irq, handler, irqflags, devname, dev_id); 1048 if (retval != 0) { 1049 unbind_from_irq(irq); 1050 return retval; 1051 } 1052 1053 return irq; 1054 } 1055 EXPORT_SYMBOL_GPL(bind_evtchn_to_irqhandler); 1056 1057 int bind_interdomain_evtchn_to_irqhandler(unsigned int remote_domain, 1058 evtchn_port_t remote_port, 1059 irq_handler_t handler, 1060 unsigned long irqflags, 1061 const char *devname, 1062 void *dev_id) 1063 { 1064 int irq, retval; 1065 1066 irq = bind_interdomain_evtchn_to_irq(remote_domain, remote_port); 1067 if (irq < 0) 1068 return irq; 1069 1070 retval = request_irq(irq, handler, irqflags, devname, dev_id); 1071 if (retval != 0) { 1072 unbind_from_irq(irq); 1073 return retval; 1074 } 1075 1076 return irq; 1077 } 1078 EXPORT_SYMBOL_GPL(bind_interdomain_evtchn_to_irqhandler); 1079 1080 int bind_virq_to_irqhandler(unsigned int virq, unsigned int cpu, 1081 irq_handler_t handler, 1082 unsigned long irqflags, const char *devname, void *dev_id) 1083 { 1084 int irq, retval; 1085 1086 irq = bind_virq_to_irq(virq, cpu, irqflags & IRQF_PERCPU); 1087 if (irq < 0) 1088 return irq; 1089 retval = request_irq(irq, handler, irqflags, devname, dev_id); 1090 if (retval != 0) { 1091 unbind_from_irq(irq); 1092 return retval; 1093 } 1094 1095 return irq; 1096 } 1097 EXPORT_SYMBOL_GPL(bind_virq_to_irqhandler); 1098 1099 int bind_ipi_to_irqhandler(enum ipi_vector ipi, 1100 unsigned int cpu, 1101 irq_handler_t handler, 1102 unsigned long irqflags, 1103 const char *devname, 1104 void *dev_id) 1105 { 1106 int irq, retval; 1107 1108 irq = bind_ipi_to_irq(ipi, cpu); 1109 if (irq < 0) 1110 return irq; 1111 1112 irqflags |= IRQF_NO_SUSPEND | IRQF_FORCE_RESUME | IRQF_EARLY_RESUME; 1113 retval = request_irq(irq, handler, irqflags, devname, dev_id); 1114 if (retval != 0) { 1115 unbind_from_irq(irq); 1116 return retval; 1117 } 1118 1119 return irq; 1120 } 1121 1122 void unbind_from_irqhandler(unsigned int irq, void *dev_id) 1123 { 1124 struct irq_info *info = info_for_irq(irq); 1125 1126 if (WARN_ON(!info)) 1127 return; 1128 free_irq(irq, dev_id); 1129 unbind_from_irq(irq); 1130 } 1131 EXPORT_SYMBOL_GPL(unbind_from_irqhandler); 1132 1133 /** 1134 * xen_set_irq_priority() - set an event channel priority. 1135 * @irq:irq bound to an event channel. 1136 * @priority: priority between XEN_IRQ_PRIORITY_MAX and XEN_IRQ_PRIORITY_MIN. 1137 */ 1138 int xen_set_irq_priority(unsigned irq, unsigned priority) 1139 { 1140 struct evtchn_set_priority set_priority; 1141 1142 set_priority.port = evtchn_from_irq(irq); 1143 set_priority.priority = priority; 1144 1145 return HYPERVISOR_event_channel_op(EVTCHNOP_set_priority, 1146 &set_priority); 1147 } 1148 EXPORT_SYMBOL_GPL(xen_set_irq_priority); 1149 1150 int evtchn_make_refcounted(evtchn_port_t evtchn) 1151 { 1152 int irq = get_evtchn_to_irq(evtchn); 1153 struct irq_info *info; 1154 1155 if (irq == -1) 1156 return -ENOENT; 1157 1158 info = info_for_irq(irq); 1159 1160 if (!info) 1161 return -ENOENT; 1162 1163 WARN_ON(info->refcnt != -1); 1164 1165 info->refcnt = 1; 1166 1167 return 0; 1168 } 1169 EXPORT_SYMBOL_GPL(evtchn_make_refcounted); 1170 1171 int evtchn_get(evtchn_port_t evtchn) 1172 { 1173 int irq; 1174 struct irq_info *info; 1175 int err = -ENOENT; 1176 1177 if (evtchn >= xen_evtchn_max_channels()) 1178 return -EINVAL; 1179 1180 mutex_lock(&irq_mapping_update_lock); 1181 1182 irq = get_evtchn_to_irq(evtchn); 1183 if (irq == -1) 1184 goto done; 1185 1186 info = info_for_irq(irq); 1187 1188 if (!info) 1189 goto done; 1190 1191 err = -EINVAL; 1192 if (info->refcnt <= 0) 1193 goto done; 1194 1195 info->refcnt++; 1196 err = 0; 1197 done: 1198 mutex_unlock(&irq_mapping_update_lock); 1199 1200 return err; 1201 } 1202 EXPORT_SYMBOL_GPL(evtchn_get); 1203 1204 void evtchn_put(evtchn_port_t evtchn) 1205 { 1206 int irq = get_evtchn_to_irq(evtchn); 1207 if (WARN_ON(irq == -1)) 1208 return; 1209 unbind_from_irq(irq); 1210 } 1211 EXPORT_SYMBOL_GPL(evtchn_put); 1212 1213 void xen_send_IPI_one(unsigned int cpu, enum ipi_vector vector) 1214 { 1215 int irq; 1216 1217 #ifdef CONFIG_X86 1218 if (unlikely(vector == XEN_NMI_VECTOR)) { 1219 int rc = HYPERVISOR_vcpu_op(VCPUOP_send_nmi, xen_vcpu_nr(cpu), 1220 NULL); 1221 if (rc < 0) 1222 printk(KERN_WARNING "Sending nmi to CPU%d failed (rc:%d)\n", cpu, rc); 1223 return; 1224 } 1225 #endif 1226 irq = per_cpu(ipi_to_irq, cpu)[vector]; 1227 BUG_ON(irq < 0); 1228 notify_remote_via_irq(irq); 1229 } 1230 1231 static void __xen_evtchn_do_upcall(void) 1232 { 1233 struct vcpu_info *vcpu_info = __this_cpu_read(xen_vcpu); 1234 int cpu = smp_processor_id(); 1235 1236 do { 1237 vcpu_info->evtchn_upcall_pending = 0; 1238 1239 xen_evtchn_handle_events(cpu); 1240 1241 BUG_ON(!irqs_disabled()); 1242 1243 virt_rmb(); /* Hypervisor can set upcall pending. */ 1244 1245 } while (vcpu_info->evtchn_upcall_pending); 1246 } 1247 1248 void xen_evtchn_do_upcall(struct pt_regs *regs) 1249 { 1250 struct pt_regs *old_regs = set_irq_regs(regs); 1251 1252 irq_enter(); 1253 1254 __xen_evtchn_do_upcall(); 1255 1256 irq_exit(); 1257 set_irq_regs(old_regs); 1258 } 1259 1260 void xen_hvm_evtchn_do_upcall(void) 1261 { 1262 __xen_evtchn_do_upcall(); 1263 } 1264 EXPORT_SYMBOL_GPL(xen_hvm_evtchn_do_upcall); 1265 1266 /* Rebind a new event channel to an existing irq. */ 1267 void rebind_evtchn_irq(evtchn_port_t evtchn, int irq) 1268 { 1269 struct irq_info *info = info_for_irq(irq); 1270 1271 if (WARN_ON(!info)) 1272 return; 1273 1274 /* Make sure the irq is masked, since the new event channel 1275 will also be masked. */ 1276 disable_irq(irq); 1277 1278 mutex_lock(&irq_mapping_update_lock); 1279 1280 /* After resume the irq<->evtchn mappings are all cleared out */ 1281 BUG_ON(get_evtchn_to_irq(evtchn) != -1); 1282 /* Expect irq to have been bound before, 1283 so there should be a proper type */ 1284 BUG_ON(info->type == IRQT_UNBOUND); 1285 1286 (void)xen_irq_info_evtchn_setup(irq, evtchn); 1287 1288 mutex_unlock(&irq_mapping_update_lock); 1289 1290 bind_evtchn_to_cpu(evtchn, info->cpu); 1291 /* This will be deferred until interrupt is processed */ 1292 irq_set_affinity(irq, cpumask_of(info->cpu)); 1293 1294 /* Unmask the event channel. */ 1295 enable_irq(irq); 1296 } 1297 1298 /* Rebind an evtchn so that it gets delivered to a specific cpu */ 1299 static int xen_rebind_evtchn_to_cpu(evtchn_port_t evtchn, unsigned int tcpu) 1300 { 1301 struct evtchn_bind_vcpu bind_vcpu; 1302 int masked; 1303 1304 if (!VALID_EVTCHN(evtchn)) 1305 return -1; 1306 1307 if (!xen_support_evtchn_rebind()) 1308 return -1; 1309 1310 /* Send future instances of this interrupt to other vcpu. */ 1311 bind_vcpu.port = evtchn; 1312 bind_vcpu.vcpu = xen_vcpu_nr(tcpu); 1313 1314 /* 1315 * Mask the event while changing the VCPU binding to prevent 1316 * it being delivered on an unexpected VCPU. 1317 */ 1318 masked = test_and_set_mask(evtchn); 1319 1320 /* 1321 * If this fails, it usually just indicates that we're dealing with a 1322 * virq or IPI channel, which don't actually need to be rebound. Ignore 1323 * it, but don't do the xenlinux-level rebind in that case. 1324 */ 1325 if (HYPERVISOR_event_channel_op(EVTCHNOP_bind_vcpu, &bind_vcpu) >= 0) 1326 bind_evtchn_to_cpu(evtchn, tcpu); 1327 1328 if (!masked) 1329 unmask_evtchn(evtchn); 1330 1331 return 0; 1332 } 1333 1334 static int set_affinity_irq(struct irq_data *data, const struct cpumask *dest, 1335 bool force) 1336 { 1337 unsigned tcpu = cpumask_first_and(dest, cpu_online_mask); 1338 int ret = xen_rebind_evtchn_to_cpu(evtchn_from_irq(data->irq), tcpu); 1339 1340 if (!ret) 1341 irq_data_update_effective_affinity(data, cpumask_of(tcpu)); 1342 1343 return ret; 1344 } 1345 1346 /* To be called with desc->lock held. */ 1347 int xen_set_affinity_evtchn(struct irq_desc *desc, unsigned int tcpu) 1348 { 1349 struct irq_data *d = irq_desc_get_irq_data(desc); 1350 1351 return set_affinity_irq(d, cpumask_of(tcpu), false); 1352 } 1353 EXPORT_SYMBOL_GPL(xen_set_affinity_evtchn); 1354 1355 static void enable_dynirq(struct irq_data *data) 1356 { 1357 evtchn_port_t evtchn = evtchn_from_irq(data->irq); 1358 1359 if (VALID_EVTCHN(evtchn)) 1360 unmask_evtchn(evtchn); 1361 } 1362 1363 static void disable_dynirq(struct irq_data *data) 1364 { 1365 evtchn_port_t evtchn = evtchn_from_irq(data->irq); 1366 1367 if (VALID_EVTCHN(evtchn)) 1368 mask_evtchn(evtchn); 1369 } 1370 1371 static void ack_dynirq(struct irq_data *data) 1372 { 1373 evtchn_port_t evtchn = evtchn_from_irq(data->irq); 1374 1375 if (!VALID_EVTCHN(evtchn)) 1376 return; 1377 1378 if (unlikely(irqd_is_setaffinity_pending(data)) && 1379 likely(!irqd_irq_disabled(data))) { 1380 int masked = test_and_set_mask(evtchn); 1381 1382 clear_evtchn(evtchn); 1383 1384 irq_move_masked_irq(data); 1385 1386 if (!masked) 1387 unmask_evtchn(evtchn); 1388 } else 1389 clear_evtchn(evtchn); 1390 } 1391 1392 static void mask_ack_dynirq(struct irq_data *data) 1393 { 1394 disable_dynirq(data); 1395 ack_dynirq(data); 1396 } 1397 1398 static int retrigger_dynirq(struct irq_data *data) 1399 { 1400 evtchn_port_t evtchn = evtchn_from_irq(data->irq); 1401 int masked; 1402 1403 if (!VALID_EVTCHN(evtchn)) 1404 return 0; 1405 1406 masked = test_and_set_mask(evtchn); 1407 set_evtchn(evtchn); 1408 if (!masked) 1409 unmask_evtchn(evtchn); 1410 1411 return 1; 1412 } 1413 1414 static void restore_pirqs(void) 1415 { 1416 int pirq, rc, irq, gsi; 1417 struct physdev_map_pirq map_irq; 1418 struct irq_info *info; 1419 1420 list_for_each_entry(info, &xen_irq_list_head, list) { 1421 if (info->type != IRQT_PIRQ) 1422 continue; 1423 1424 pirq = info->u.pirq.pirq; 1425 gsi = info->u.pirq.gsi; 1426 irq = info->irq; 1427 1428 /* save/restore of PT devices doesn't work, so at this point the 1429 * only devices present are GSI based emulated devices */ 1430 if (!gsi) 1431 continue; 1432 1433 map_irq.domid = DOMID_SELF; 1434 map_irq.type = MAP_PIRQ_TYPE_GSI; 1435 map_irq.index = gsi; 1436 map_irq.pirq = pirq; 1437 1438 rc = HYPERVISOR_physdev_op(PHYSDEVOP_map_pirq, &map_irq); 1439 if (rc) { 1440 pr_warn("xen map irq failed gsi=%d irq=%d pirq=%d rc=%d\n", 1441 gsi, irq, pirq, rc); 1442 xen_free_irq(irq); 1443 continue; 1444 } 1445 1446 printk(KERN_DEBUG "xen: --> irq=%d, pirq=%d\n", irq, map_irq.pirq); 1447 1448 __startup_pirq(irq); 1449 } 1450 } 1451 1452 static void restore_cpu_virqs(unsigned int cpu) 1453 { 1454 struct evtchn_bind_virq bind_virq; 1455 evtchn_port_t evtchn; 1456 int virq, irq; 1457 1458 for (virq = 0; virq < NR_VIRQS; virq++) { 1459 if ((irq = per_cpu(virq_to_irq, cpu)[virq]) == -1) 1460 continue; 1461 1462 BUG_ON(virq_from_irq(irq) != virq); 1463 1464 /* Get a new binding from Xen. */ 1465 bind_virq.virq = virq; 1466 bind_virq.vcpu = xen_vcpu_nr(cpu); 1467 if (HYPERVISOR_event_channel_op(EVTCHNOP_bind_virq, 1468 &bind_virq) != 0) 1469 BUG(); 1470 evtchn = bind_virq.port; 1471 1472 /* Record the new mapping. */ 1473 (void)xen_irq_info_virq_setup(cpu, irq, evtchn, virq); 1474 bind_evtchn_to_cpu(evtchn, cpu); 1475 } 1476 } 1477 1478 static void restore_cpu_ipis(unsigned int cpu) 1479 { 1480 struct evtchn_bind_ipi bind_ipi; 1481 evtchn_port_t evtchn; 1482 int ipi, irq; 1483 1484 for (ipi = 0; ipi < XEN_NR_IPIS; ipi++) { 1485 if ((irq = per_cpu(ipi_to_irq, cpu)[ipi]) == -1) 1486 continue; 1487 1488 BUG_ON(ipi_from_irq(irq) != ipi); 1489 1490 /* Get a new binding from Xen. */ 1491 bind_ipi.vcpu = xen_vcpu_nr(cpu); 1492 if (HYPERVISOR_event_channel_op(EVTCHNOP_bind_ipi, 1493 &bind_ipi) != 0) 1494 BUG(); 1495 evtchn = bind_ipi.port; 1496 1497 /* Record the new mapping. */ 1498 (void)xen_irq_info_ipi_setup(cpu, irq, evtchn, ipi); 1499 bind_evtchn_to_cpu(evtchn, cpu); 1500 } 1501 } 1502 1503 /* Clear an irq's pending state, in preparation for polling on it */ 1504 void xen_clear_irq_pending(int irq) 1505 { 1506 evtchn_port_t evtchn = evtchn_from_irq(irq); 1507 1508 if (VALID_EVTCHN(evtchn)) 1509 clear_evtchn(evtchn); 1510 } 1511 EXPORT_SYMBOL(xen_clear_irq_pending); 1512 void xen_set_irq_pending(int irq) 1513 { 1514 evtchn_port_t evtchn = evtchn_from_irq(irq); 1515 1516 if (VALID_EVTCHN(evtchn)) 1517 set_evtchn(evtchn); 1518 } 1519 1520 bool xen_test_irq_pending(int irq) 1521 { 1522 evtchn_port_t evtchn = evtchn_from_irq(irq); 1523 bool ret = false; 1524 1525 if (VALID_EVTCHN(evtchn)) 1526 ret = test_evtchn(evtchn); 1527 1528 return ret; 1529 } 1530 1531 /* Poll waiting for an irq to become pending with timeout. In the usual case, 1532 * the irq will be disabled so it won't deliver an interrupt. */ 1533 void xen_poll_irq_timeout(int irq, u64 timeout) 1534 { 1535 evtchn_port_t evtchn = evtchn_from_irq(irq); 1536 1537 if (VALID_EVTCHN(evtchn)) { 1538 struct sched_poll poll; 1539 1540 poll.nr_ports = 1; 1541 poll.timeout = timeout; 1542 set_xen_guest_handle(poll.ports, &evtchn); 1543 1544 if (HYPERVISOR_sched_op(SCHEDOP_poll, &poll) != 0) 1545 BUG(); 1546 } 1547 } 1548 EXPORT_SYMBOL(xen_poll_irq_timeout); 1549 /* Poll waiting for an irq to become pending. In the usual case, the 1550 * irq will be disabled so it won't deliver an interrupt. */ 1551 void xen_poll_irq(int irq) 1552 { 1553 xen_poll_irq_timeout(irq, 0 /* no timeout */); 1554 } 1555 1556 /* Check whether the IRQ line is shared with other guests. */ 1557 int xen_test_irq_shared(int irq) 1558 { 1559 struct irq_info *info = info_for_irq(irq); 1560 struct physdev_irq_status_query irq_status; 1561 1562 if (WARN_ON(!info)) 1563 return -ENOENT; 1564 1565 irq_status.irq = info->u.pirq.pirq; 1566 1567 if (HYPERVISOR_physdev_op(PHYSDEVOP_irq_status_query, &irq_status)) 1568 return 0; 1569 return !(irq_status.flags & XENIRQSTAT_shared); 1570 } 1571 EXPORT_SYMBOL_GPL(xen_test_irq_shared); 1572 1573 void xen_irq_resume(void) 1574 { 1575 unsigned int cpu; 1576 struct irq_info *info; 1577 1578 /* New event-channel space is not 'live' yet. */ 1579 xen_evtchn_resume(); 1580 1581 /* No IRQ <-> event-channel mappings. */ 1582 list_for_each_entry(info, &xen_irq_list_head, list) 1583 info->evtchn = 0; /* zap event-channel binding */ 1584 1585 clear_evtchn_to_irq_all(); 1586 1587 for_each_possible_cpu(cpu) { 1588 restore_cpu_virqs(cpu); 1589 restore_cpu_ipis(cpu); 1590 } 1591 1592 restore_pirqs(); 1593 } 1594 1595 static struct irq_chip xen_dynamic_chip __read_mostly = { 1596 .name = "xen-dyn", 1597 1598 .irq_disable = disable_dynirq, 1599 .irq_mask = disable_dynirq, 1600 .irq_unmask = enable_dynirq, 1601 1602 .irq_ack = ack_dynirq, 1603 .irq_mask_ack = mask_ack_dynirq, 1604 1605 .irq_set_affinity = set_affinity_irq, 1606 .irq_retrigger = retrigger_dynirq, 1607 }; 1608 1609 static struct irq_chip xen_pirq_chip __read_mostly = { 1610 .name = "xen-pirq", 1611 1612 .irq_startup = startup_pirq, 1613 .irq_shutdown = shutdown_pirq, 1614 .irq_enable = enable_pirq, 1615 .irq_disable = disable_pirq, 1616 1617 .irq_mask = disable_dynirq, 1618 .irq_unmask = enable_dynirq, 1619 1620 .irq_ack = eoi_pirq, 1621 .irq_eoi = eoi_pirq, 1622 .irq_mask_ack = mask_ack_pirq, 1623 1624 .irq_set_affinity = set_affinity_irq, 1625 1626 .irq_retrigger = retrigger_dynirq, 1627 }; 1628 1629 static struct irq_chip xen_percpu_chip __read_mostly = { 1630 .name = "xen-percpu", 1631 1632 .irq_disable = disable_dynirq, 1633 .irq_mask = disable_dynirq, 1634 .irq_unmask = enable_dynirq, 1635 1636 .irq_ack = ack_dynirq, 1637 }; 1638 1639 int xen_set_callback_via(uint64_t via) 1640 { 1641 struct xen_hvm_param a; 1642 a.domid = DOMID_SELF; 1643 a.index = HVM_PARAM_CALLBACK_IRQ; 1644 a.value = via; 1645 return HYPERVISOR_hvm_op(HVMOP_set_param, &a); 1646 } 1647 EXPORT_SYMBOL_GPL(xen_set_callback_via); 1648 1649 #ifdef CONFIG_XEN_PVHVM 1650 /* Vector callbacks are better than PCI interrupts to receive event 1651 * channel notifications because we can receive vector callbacks on any 1652 * vcpu and we don't need PCI support or APIC interactions. */ 1653 void xen_setup_callback_vector(void) 1654 { 1655 uint64_t callback_via; 1656 1657 if (xen_have_vector_callback) { 1658 callback_via = HVM_CALLBACK_VECTOR(HYPERVISOR_CALLBACK_VECTOR); 1659 if (xen_set_callback_via(callback_via)) { 1660 pr_err("Request for Xen HVM callback vector failed\n"); 1661 xen_have_vector_callback = 0; 1662 } 1663 } 1664 } 1665 1666 static __init void xen_alloc_callback_vector(void) 1667 { 1668 if (!xen_have_vector_callback) 1669 return; 1670 1671 pr_info("Xen HVM callback vector for event delivery is enabled\n"); 1672 alloc_intr_gate(HYPERVISOR_CALLBACK_VECTOR, asm_sysvec_xen_hvm_callback); 1673 } 1674 #else 1675 void xen_setup_callback_vector(void) {} 1676 static inline void xen_alloc_callback_vector(void) {} 1677 #endif 1678 1679 #undef MODULE_PARAM_PREFIX 1680 #define MODULE_PARAM_PREFIX "xen." 1681 1682 static bool fifo_events = true; 1683 module_param(fifo_events, bool, 0); 1684 1685 void __init xen_init_IRQ(void) 1686 { 1687 int ret = -EINVAL; 1688 evtchn_port_t evtchn; 1689 1690 if (fifo_events) 1691 ret = xen_evtchn_fifo_init(); 1692 if (ret < 0) 1693 xen_evtchn_2l_init(); 1694 1695 evtchn_to_irq = kcalloc(EVTCHN_ROW(xen_evtchn_max_channels()), 1696 sizeof(*evtchn_to_irq), GFP_KERNEL); 1697 BUG_ON(!evtchn_to_irq); 1698 1699 /* No event channels are 'live' right now. */ 1700 for (evtchn = 0; evtchn < xen_evtchn_nr_channels(); evtchn++) 1701 mask_evtchn(evtchn); 1702 1703 pirq_needs_eoi = pirq_needs_eoi_flag; 1704 1705 #ifdef CONFIG_X86 1706 if (xen_pv_domain()) { 1707 if (xen_initial_domain()) 1708 pci_xen_initial_domain(); 1709 } 1710 if (xen_feature(XENFEAT_hvm_callback_vector)) { 1711 xen_setup_callback_vector(); 1712 xen_alloc_callback_vector(); 1713 } 1714 1715 if (xen_hvm_domain()) { 1716 native_init_IRQ(); 1717 /* pci_xen_hvm_init must be called after native_init_IRQ so that 1718 * __acpi_register_gsi can point at the right function */ 1719 pci_xen_hvm_init(); 1720 } else { 1721 int rc; 1722 struct physdev_pirq_eoi_gmfn eoi_gmfn; 1723 1724 pirq_eoi_map = (void *)__get_free_page(GFP_KERNEL|__GFP_ZERO); 1725 eoi_gmfn.gmfn = virt_to_gfn(pirq_eoi_map); 1726 rc = HYPERVISOR_physdev_op(PHYSDEVOP_pirq_eoi_gmfn_v2, &eoi_gmfn); 1727 if (rc != 0) { 1728 free_page((unsigned long) pirq_eoi_map); 1729 pirq_eoi_map = NULL; 1730 } else 1731 pirq_needs_eoi = pirq_check_eoi_map; 1732 } 1733 #endif 1734 } 1735