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