]> git.karo-electronics.de Git - karo-tx-linux.git/blob - drivers/xen/events/events_base.c
xen: add support for MSI message groups
[karo-tx-linux.git] / drivers / xen / events / events_base.c
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/module.h>
30 #include <linux/string.h>
31 #include <linux/bootmem.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/idle.h>
41 #include <asm/io_apic.h>
42 #include <asm/xen/page.h>
43 #include <asm/xen/pci.h>
44 #endif
45 #include <asm/sync_bitops.h>
46 #include <asm/xen/hypercall.h>
47 #include <asm/xen/hypervisor.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[EVTCHN_ROW(evtchn)][EVTCHN_COL(evtchn)] = 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 < 0 || 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_to_desc(irq)->irq_data.affinity, cpumask_of(cpu));
340 #endif
341
342         xen_evtchn_port_bind_to_cpu(info, cpu);
343
344         info->cpu = cpu;
345 }
346
347 static void xen_evtchn_mask_all(void)
348 {
349         unsigned int evtchn;
350
351         for (evtchn = 0; evtchn < xen_evtchn_nr_channels(); evtchn++)
352                 mask_evtchn(evtchn);
353 }
354
355 /**
356  * notify_remote_via_irq - send event to remote end of event channel via irq
357  * @irq: irq of event channel to send event to
358  *
359  * Unlike notify_remote_via_evtchn(), this is safe to use across
360  * save/restore. Notifications on a broken connection are silently
361  * dropped.
362  */
363 void notify_remote_via_irq(int irq)
364 {
365         int evtchn = evtchn_from_irq(irq);
366
367         if (VALID_EVTCHN(evtchn))
368                 notify_remote_via_evtchn(evtchn);
369 }
370 EXPORT_SYMBOL_GPL(notify_remote_via_irq);
371
372 static void xen_irq_init(unsigned irq)
373 {
374         struct irq_info *info;
375 #ifdef CONFIG_SMP
376         struct irq_desc *desc = irq_to_desc(irq);
377
378         /* By default all event channels notify CPU#0. */
379         cpumask_copy(desc->irq_data.affinity, cpumask_of(0));
380 #endif
381
382         info = kzalloc(sizeof(*info), GFP_KERNEL);
383         if (info == NULL)
384                 panic("Unable to allocate metadata for IRQ%d\n", irq);
385
386         info->type = IRQT_UNBOUND;
387         info->refcnt = -1;
388
389         irq_set_handler_data(irq, info);
390
391         list_add_tail(&info->list, &xen_irq_list_head);
392 }
393
394 static int __must_check xen_allocate_irqs_dynamic(int nvec)
395 {
396         int first = 0;
397         int i, irq;
398
399 #ifdef CONFIG_X86_IO_APIC
400         /*
401          * For an HVM guest or domain 0 which see "real" (emulated or
402          * actual respectively) GSIs we allocate dynamic IRQs
403          * e.g. those corresponding to event channels or MSIs
404          * etc. from the range above those "real" GSIs to avoid
405          * collisions.
406          */
407         if (xen_initial_domain() || xen_hvm_domain())
408                 first = get_nr_irqs_gsi();
409 #endif
410
411         irq = irq_alloc_descs_from(first, nvec, -1);
412
413         if (irq >= 0) {
414                 for (i = 0; i < nvec; i++)
415                         xen_irq_init(irq + i);
416         }
417
418         return irq;
419 }
420
421 static inline int __must_check xen_allocate_irq_dynamic(void)
422 {
423
424         return xen_allocate_irqs_dynamic(1);
425 }
426
427 static int __must_check xen_allocate_irq_gsi(unsigned gsi)
428 {
429         int irq;
430
431         /*
432          * A PV guest has no concept of a GSI (since it has no ACPI
433          * nor access to/knowledge of the physical APICs). Therefore
434          * all IRQs are dynamically allocated from the entire IRQ
435          * space.
436          */
437         if (xen_pv_domain() && !xen_initial_domain())
438                 return xen_allocate_irq_dynamic();
439
440         /* Legacy IRQ descriptors are already allocated by the arch. */
441         if (gsi < NR_IRQS_LEGACY)
442                 irq = gsi;
443         else
444                 irq = irq_alloc_desc_at(gsi, -1);
445
446         xen_irq_init(irq);
447
448         return irq;
449 }
450
451 static void xen_free_irq(unsigned irq)
452 {
453         struct irq_info *info = irq_get_handler_data(irq);
454
455         if (WARN_ON(!info))
456                 return;
457
458         list_del(&info->list);
459
460         irq_set_handler_data(irq, NULL);
461
462         WARN_ON(info->refcnt > 0);
463
464         kfree(info);
465
466         /* Legacy IRQ descriptors are managed by the arch. */
467         if (irq < NR_IRQS_LEGACY)
468                 return;
469
470         irq_free_desc(irq);
471 }
472
473 static void xen_evtchn_close(unsigned int port)
474 {
475         struct evtchn_close close;
476
477         close.port = port;
478         if (HYPERVISOR_event_channel_op(EVTCHNOP_close, &close) != 0)
479                 BUG();
480 }
481
482 static void pirq_query_unmask(int irq)
483 {
484         struct physdev_irq_status_query irq_status;
485         struct irq_info *info = info_for_irq(irq);
486
487         BUG_ON(info->type != IRQT_PIRQ);
488
489         irq_status.irq = pirq_from_irq(irq);
490         if (HYPERVISOR_physdev_op(PHYSDEVOP_irq_status_query, &irq_status))
491                 irq_status.flags = 0;
492
493         info->u.pirq.flags &= ~PIRQ_NEEDS_EOI;
494         if (irq_status.flags & XENIRQSTAT_needs_eoi)
495                 info->u.pirq.flags |= PIRQ_NEEDS_EOI;
496 }
497
498 static bool probing_irq(int irq)
499 {
500         struct irq_desc *desc = irq_to_desc(irq);
501
502         return desc && desc->action == NULL;
503 }
504
505 static void eoi_pirq(struct irq_data *data)
506 {
507         int evtchn = evtchn_from_irq(data->irq);
508         struct physdev_eoi eoi = { .irq = pirq_from_irq(data->irq) };
509         int rc = 0;
510
511         irq_move_irq(data);
512
513         if (VALID_EVTCHN(evtchn))
514                 clear_evtchn(evtchn);
515
516         if (pirq_needs_eoi(data->irq)) {
517                 rc = HYPERVISOR_physdev_op(PHYSDEVOP_eoi, &eoi);
518                 WARN_ON(rc);
519         }
520 }
521
522 static void mask_ack_pirq(struct irq_data *data)
523 {
524         disable_dynirq(data);
525         eoi_pirq(data);
526 }
527
528 static unsigned int __startup_pirq(unsigned int irq)
529 {
530         struct evtchn_bind_pirq bind_pirq;
531         struct irq_info *info = info_for_irq(irq);
532         int evtchn = evtchn_from_irq(irq);
533         int rc;
534
535         BUG_ON(info->type != IRQT_PIRQ);
536
537         if (VALID_EVTCHN(evtchn))
538                 goto out;
539
540         bind_pirq.pirq = pirq_from_irq(irq);
541         /* NB. We are happy to share unless we are probing. */
542         bind_pirq.flags = info->u.pirq.flags & PIRQ_SHAREABLE ?
543                                         BIND_PIRQ__WILL_SHARE : 0;
544         rc = HYPERVISOR_event_channel_op(EVTCHNOP_bind_pirq, &bind_pirq);
545         if (rc != 0) {
546                 if (!probing_irq(irq))
547                         pr_info("Failed to obtain physical IRQ %d\n", irq);
548                 return 0;
549         }
550         evtchn = bind_pirq.port;
551
552         pirq_query_unmask(irq);
553
554         rc = set_evtchn_to_irq(evtchn, irq);
555         if (rc != 0) {
556                 pr_err("irq%d: Failed to set port to irq mapping (%d)\n",
557                        irq, rc);
558                 xen_evtchn_close(evtchn);
559                 return 0;
560         }
561         bind_evtchn_to_cpu(evtchn, 0);
562         info->evtchn = evtchn;
563
564 out:
565         unmask_evtchn(evtchn);
566         eoi_pirq(irq_get_irq_data(irq));
567
568         return 0;
569 }
570
571 static unsigned int startup_pirq(struct irq_data *data)
572 {
573         return __startup_pirq(data->irq);
574 }
575
576 static void shutdown_pirq(struct irq_data *data)
577 {
578         unsigned int irq = data->irq;
579         struct irq_info *info = info_for_irq(irq);
580         unsigned evtchn = evtchn_from_irq(irq);
581
582         BUG_ON(info->type != IRQT_PIRQ);
583
584         if (!VALID_EVTCHN(evtchn))
585                 return;
586
587         mask_evtchn(evtchn);
588         xen_evtchn_close(evtchn);
589         xen_irq_info_cleanup(info);
590 }
591
592 static void enable_pirq(struct irq_data *data)
593 {
594         startup_pirq(data);
595 }
596
597 static void disable_pirq(struct irq_data *data)
598 {
599         disable_dynirq(data);
600 }
601
602 int xen_irq_from_gsi(unsigned gsi)
603 {
604         struct irq_info *info;
605
606         list_for_each_entry(info, &xen_irq_list_head, list) {
607                 if (info->type != IRQT_PIRQ)
608                         continue;
609
610                 if (info->u.pirq.gsi == gsi)
611                         return info->irq;
612         }
613
614         return -1;
615 }
616 EXPORT_SYMBOL_GPL(xen_irq_from_gsi);
617
618 static void __unbind_from_irq(unsigned int irq)
619 {
620         int evtchn = evtchn_from_irq(irq);
621         struct irq_info *info = irq_get_handler_data(irq);
622
623         if (info->refcnt > 0) {
624                 info->refcnt--;
625                 if (info->refcnt != 0)
626                         return;
627         }
628
629         if (VALID_EVTCHN(evtchn)) {
630                 unsigned int cpu = cpu_from_irq(irq);
631
632                 xen_evtchn_close(evtchn);
633
634                 switch (type_from_irq(irq)) {
635                 case IRQT_VIRQ:
636                         per_cpu(virq_to_irq, cpu)[virq_from_irq(irq)] = -1;
637                         break;
638                 case IRQT_IPI:
639                         per_cpu(ipi_to_irq, cpu)[ipi_from_irq(irq)] = -1;
640                         break;
641                 default:
642                         break;
643                 }
644
645                 xen_irq_info_cleanup(info);
646         }
647
648         BUG_ON(info_for_irq(irq)->type == IRQT_UNBOUND);
649
650         xen_free_irq(irq);
651 }
652
653 /*
654  * Do not make any assumptions regarding the relationship between the
655  * IRQ number returned here and the Xen pirq argument.
656  *
657  * Note: We don't assign an event channel until the irq actually started
658  * up.  Return an existing irq if we've already got one for the gsi.
659  *
660  * Shareable implies level triggered, not shareable implies edge
661  * triggered here.
662  */
663 int xen_bind_pirq_gsi_to_irq(unsigned gsi,
664                              unsigned pirq, int shareable, char *name)
665 {
666         int irq = -1;
667         struct physdev_irq irq_op;
668         int ret;
669
670         mutex_lock(&irq_mapping_update_lock);
671
672         irq = xen_irq_from_gsi(gsi);
673         if (irq != -1) {
674                 pr_info("%s: returning irq %d for gsi %u\n",
675                         __func__, irq, gsi);
676                 goto out;
677         }
678
679         irq = xen_allocate_irq_gsi(gsi);
680         if (irq < 0)
681                 goto out;
682
683         irq_op.irq = irq;
684         irq_op.vector = 0;
685
686         /* Only the privileged domain can do this. For non-priv, the pcifront
687          * driver provides a PCI bus that does the call to do exactly
688          * this in the priv domain. */
689         if (xen_initial_domain() &&
690             HYPERVISOR_physdev_op(PHYSDEVOP_alloc_irq_vector, &irq_op)) {
691                 xen_free_irq(irq);
692                 irq = -ENOSPC;
693                 goto out;
694         }
695
696         ret = xen_irq_info_pirq_setup(irq, 0, pirq, gsi, DOMID_SELF,
697                                shareable ? PIRQ_SHAREABLE : 0);
698         if (ret < 0) {
699                 __unbind_from_irq(irq);
700                 irq = ret;
701                 goto out;
702         }
703
704         pirq_query_unmask(irq);
705         /* We try to use the handler with the appropriate semantic for the
706          * type of interrupt: if the interrupt is an edge triggered
707          * interrupt we use handle_edge_irq.
708          *
709          * On the other hand if the interrupt is level triggered we use
710          * handle_fasteoi_irq like the native code does for this kind of
711          * interrupts.
712          *
713          * Depending on the Xen version, pirq_needs_eoi might return true
714          * not only for level triggered interrupts but for edge triggered
715          * interrupts too. In any case Xen always honors the eoi mechanism,
716          * not injecting any more pirqs of the same kind if the first one
717          * hasn't received an eoi yet. Therefore using the fasteoi handler
718          * is the right choice either way.
719          */
720         if (shareable)
721                 irq_set_chip_and_handler_name(irq, &xen_pirq_chip,
722                                 handle_fasteoi_irq, name);
723         else
724                 irq_set_chip_and_handler_name(irq, &xen_pirq_chip,
725                                 handle_edge_irq, name);
726
727 out:
728         mutex_unlock(&irq_mapping_update_lock);
729
730         return irq;
731 }
732
733 #ifdef CONFIG_PCI_MSI
734 int xen_allocate_pirq_msi(struct pci_dev *dev, struct msi_desc *msidesc)
735 {
736         int rc;
737         struct physdev_get_free_pirq op_get_free_pirq;
738
739         op_get_free_pirq.type = MAP_PIRQ_TYPE_MSI;
740         rc = HYPERVISOR_physdev_op(PHYSDEVOP_get_free_pirq, &op_get_free_pirq);
741
742         WARN_ONCE(rc == -ENOSYS,
743                   "hypervisor does not support the PHYSDEVOP_get_free_pirq interface\n");
744
745         return rc ? -1 : op_get_free_pirq.pirq;
746 }
747
748 int xen_bind_pirq_msi_to_irq(struct pci_dev *dev, struct msi_desc *msidesc,
749                              int pirq, int nvec, const char *name, domid_t domid)
750 {
751         int i, irq, ret;
752
753         mutex_lock(&irq_mapping_update_lock);
754
755         irq = xen_allocate_irqs_dynamic(nvec);
756         if (irq < 0)
757                 goto out;
758
759         for (i = 0; i < nvec; i++) {
760                 irq_set_chip_and_handler_name(irq + i, &xen_pirq_chip, handle_edge_irq, name);
761
762                 ret = xen_irq_info_pirq_setup(irq + i, 0, pirq + i, 0, domid,
763                                               i == 0 ? 0 : PIRQ_MSI_GROUP);
764                 if (ret < 0)
765                         goto error_irq;
766         }
767
768         ret = irq_set_msi_desc(irq, msidesc);
769         if (ret < 0)
770                 goto error_irq;
771 out:
772         mutex_unlock(&irq_mapping_update_lock);
773         return irq;
774 error_irq:
775         for (; i >= 0; i--)
776                 __unbind_from_irq(irq + i);
777         mutex_unlock(&irq_mapping_update_lock);
778         return ret;
779 }
780 #endif
781
782 int xen_destroy_irq(int irq)
783 {
784         struct irq_desc *desc;
785         struct physdev_unmap_pirq unmap_irq;
786         struct irq_info *info = info_for_irq(irq);
787         int rc = -ENOENT;
788
789         mutex_lock(&irq_mapping_update_lock);
790
791         desc = irq_to_desc(irq);
792         if (!desc)
793                 goto out;
794
795         /*
796          * If trying to remove a vector in a MSI group different
797          * than the first one skip the PIRQ unmap unless this vector
798          * is the first one in the group.
799          */
800         if (xen_initial_domain() && !(info->u.pirq.flags & PIRQ_MSI_GROUP)) {
801                 unmap_irq.pirq = info->u.pirq.pirq;
802                 unmap_irq.domid = info->u.pirq.domid;
803                 rc = HYPERVISOR_physdev_op(PHYSDEVOP_unmap_pirq, &unmap_irq);
804                 /* If another domain quits without making the pci_disable_msix
805                  * call, the Xen hypervisor takes care of freeing the PIRQs
806                  * (free_domain_pirqs).
807                  */
808                 if ((rc == -ESRCH && info->u.pirq.domid != DOMID_SELF))
809                         pr_info("domain %d does not have %d anymore\n",
810                                 info->u.pirq.domid, info->u.pirq.pirq);
811                 else if (rc) {
812                         pr_warn("unmap irq failed %d\n", rc);
813                         goto out;
814                 }
815         }
816
817         xen_free_irq(irq);
818
819 out:
820         mutex_unlock(&irq_mapping_update_lock);
821         return rc;
822 }
823
824 int xen_irq_from_pirq(unsigned pirq)
825 {
826         int irq;
827
828         struct irq_info *info;
829
830         mutex_lock(&irq_mapping_update_lock);
831
832         list_for_each_entry(info, &xen_irq_list_head, list) {
833                 if (info->type != IRQT_PIRQ)
834                         continue;
835                 irq = info->irq;
836                 if (info->u.pirq.pirq == pirq)
837                         goto out;
838         }
839         irq = -1;
840 out:
841         mutex_unlock(&irq_mapping_update_lock);
842
843         return irq;
844 }
845
846
847 int xen_pirq_from_irq(unsigned irq)
848 {
849         return pirq_from_irq(irq);
850 }
851 EXPORT_SYMBOL_GPL(xen_pirq_from_irq);
852
853 int bind_evtchn_to_irq(unsigned int evtchn)
854 {
855         int irq;
856         int ret;
857
858         if (evtchn >= xen_evtchn_max_channels())
859                 return -ENOMEM;
860
861         mutex_lock(&irq_mapping_update_lock);
862
863         irq = get_evtchn_to_irq(evtchn);
864
865         if (irq == -1) {
866                 irq = xen_allocate_irq_dynamic();
867                 if (irq < 0)
868                         goto out;
869
870                 irq_set_chip_and_handler_name(irq, &xen_dynamic_chip,
871                                               handle_edge_irq, "event");
872
873                 ret = xen_irq_info_evtchn_setup(irq, evtchn);
874                 if (ret < 0) {
875                         __unbind_from_irq(irq);
876                         irq = ret;
877                         goto out;
878                 }
879                 /* New interdomain events are bound to VCPU 0. */
880                 bind_evtchn_to_cpu(evtchn, 0);
881         } else {
882                 struct irq_info *info = info_for_irq(irq);
883                 WARN_ON(info == NULL || info->type != IRQT_EVTCHN);
884         }
885
886 out:
887         mutex_unlock(&irq_mapping_update_lock);
888
889         return irq;
890 }
891 EXPORT_SYMBOL_GPL(bind_evtchn_to_irq);
892
893 static int bind_ipi_to_irq(unsigned int ipi, unsigned int cpu)
894 {
895         struct evtchn_bind_ipi bind_ipi;
896         int evtchn, irq;
897         int ret;
898
899         mutex_lock(&irq_mapping_update_lock);
900
901         irq = per_cpu(ipi_to_irq, cpu)[ipi];
902
903         if (irq == -1) {
904                 irq = xen_allocate_irq_dynamic();
905                 if (irq < 0)
906                         goto out;
907
908                 irq_set_chip_and_handler_name(irq, &xen_percpu_chip,
909                                               handle_percpu_irq, "ipi");
910
911                 bind_ipi.vcpu = cpu;
912                 if (HYPERVISOR_event_channel_op(EVTCHNOP_bind_ipi,
913                                                 &bind_ipi) != 0)
914                         BUG();
915                 evtchn = bind_ipi.port;
916
917                 ret = xen_irq_info_ipi_setup(cpu, irq, evtchn, ipi);
918                 if (ret < 0) {
919                         __unbind_from_irq(irq);
920                         irq = ret;
921                         goto out;
922                 }
923                 bind_evtchn_to_cpu(evtchn, cpu);
924         } else {
925                 struct irq_info *info = info_for_irq(irq);
926                 WARN_ON(info == NULL || info->type != IRQT_IPI);
927         }
928
929  out:
930         mutex_unlock(&irq_mapping_update_lock);
931         return irq;
932 }
933
934 static int bind_interdomain_evtchn_to_irq(unsigned int remote_domain,
935                                           unsigned int remote_port)
936 {
937         struct evtchn_bind_interdomain bind_interdomain;
938         int err;
939
940         bind_interdomain.remote_dom  = remote_domain;
941         bind_interdomain.remote_port = remote_port;
942
943         err = HYPERVISOR_event_channel_op(EVTCHNOP_bind_interdomain,
944                                           &bind_interdomain);
945
946         return err ? : bind_evtchn_to_irq(bind_interdomain.local_port);
947 }
948
949 static int find_virq(unsigned int virq, unsigned int cpu)
950 {
951         struct evtchn_status status;
952         int port, rc = -ENOENT;
953
954         memset(&status, 0, sizeof(status));
955         for (port = 0; port < xen_evtchn_max_channels(); port++) {
956                 status.dom = DOMID_SELF;
957                 status.port = port;
958                 rc = HYPERVISOR_event_channel_op(EVTCHNOP_status, &status);
959                 if (rc < 0)
960                         continue;
961                 if (status.status != EVTCHNSTAT_virq)
962                         continue;
963                 if (status.u.virq == virq && status.vcpu == cpu) {
964                         rc = port;
965                         break;
966                 }
967         }
968         return rc;
969 }
970
971 /**
972  * xen_evtchn_nr_channels - number of usable event channel ports
973  *
974  * This may be less than the maximum supported by the current
975  * hypervisor ABI. Use xen_evtchn_max_channels() for the maximum
976  * supported.
977  */
978 unsigned xen_evtchn_nr_channels(void)
979 {
980         return evtchn_ops->nr_channels();
981 }
982 EXPORT_SYMBOL_GPL(xen_evtchn_nr_channels);
983
984 int bind_virq_to_irq(unsigned int virq, unsigned int cpu)
985 {
986         struct evtchn_bind_virq bind_virq;
987         int evtchn, irq, ret;
988
989         mutex_lock(&irq_mapping_update_lock);
990
991         irq = per_cpu(virq_to_irq, cpu)[virq];
992
993         if (irq == -1) {
994                 irq = xen_allocate_irq_dynamic();
995                 if (irq < 0)
996                         goto out;
997
998                 irq_set_chip_and_handler_name(irq, &xen_percpu_chip,
999                                               handle_percpu_irq, "virq");
1000
1001                 bind_virq.virq = virq;
1002                 bind_virq.vcpu = cpu;
1003                 ret = HYPERVISOR_event_channel_op(EVTCHNOP_bind_virq,
1004                                                 &bind_virq);
1005                 if (ret == 0)
1006                         evtchn = bind_virq.port;
1007                 else {
1008                         if (ret == -EEXIST)
1009                                 ret = find_virq(virq, cpu);
1010                         BUG_ON(ret < 0);
1011                         evtchn = ret;
1012                 }
1013
1014                 ret = xen_irq_info_virq_setup(cpu, irq, evtchn, virq);
1015                 if (ret < 0) {
1016                         __unbind_from_irq(irq);
1017                         irq = ret;
1018                         goto out;
1019                 }
1020
1021                 bind_evtchn_to_cpu(evtchn, cpu);
1022         } else {
1023                 struct irq_info *info = info_for_irq(irq);
1024                 WARN_ON(info == NULL || info->type != IRQT_VIRQ);
1025         }
1026
1027 out:
1028         mutex_unlock(&irq_mapping_update_lock);
1029
1030         return irq;
1031 }
1032
1033 static void unbind_from_irq(unsigned int irq)
1034 {
1035         mutex_lock(&irq_mapping_update_lock);
1036         __unbind_from_irq(irq);
1037         mutex_unlock(&irq_mapping_update_lock);
1038 }
1039
1040 int bind_evtchn_to_irqhandler(unsigned int evtchn,
1041                               irq_handler_t handler,
1042                               unsigned long irqflags,
1043                               const char *devname, void *dev_id)
1044 {
1045         int irq, retval;
1046
1047         irq = bind_evtchn_to_irq(evtchn);
1048         if (irq < 0)
1049                 return irq;
1050         retval = request_irq(irq, handler, irqflags, devname, dev_id);
1051         if (retval != 0) {
1052                 unbind_from_irq(irq);
1053                 return retval;
1054         }
1055
1056         return irq;
1057 }
1058 EXPORT_SYMBOL_GPL(bind_evtchn_to_irqhandler);
1059
1060 int bind_interdomain_evtchn_to_irqhandler(unsigned int remote_domain,
1061                                           unsigned int remote_port,
1062                                           irq_handler_t handler,
1063                                           unsigned long irqflags,
1064                                           const char *devname,
1065                                           void *dev_id)
1066 {
1067         int irq, retval;
1068
1069         irq = bind_interdomain_evtchn_to_irq(remote_domain, remote_port);
1070         if (irq < 0)
1071                 return irq;
1072
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_interdomain_evtchn_to_irqhandler);
1082
1083 int bind_virq_to_irqhandler(unsigned int virq, unsigned int cpu,
1084                             irq_handler_t handler,
1085                             unsigned long irqflags, const char *devname, void *dev_id)
1086 {
1087         int irq, retval;
1088
1089         irq = bind_virq_to_irq(virq, cpu);
1090         if (irq < 0)
1091                 return irq;
1092         retval = request_irq(irq, handler, irqflags, devname, dev_id);
1093         if (retval != 0) {
1094                 unbind_from_irq(irq);
1095                 return retval;
1096         }
1097
1098         return irq;
1099 }
1100 EXPORT_SYMBOL_GPL(bind_virq_to_irqhandler);
1101
1102 int bind_ipi_to_irqhandler(enum ipi_vector ipi,
1103                            unsigned int cpu,
1104                            irq_handler_t handler,
1105                            unsigned long irqflags,
1106                            const char *devname,
1107                            void *dev_id)
1108 {
1109         int irq, retval;
1110
1111         irq = bind_ipi_to_irq(ipi, cpu);
1112         if (irq < 0)
1113                 return irq;
1114
1115         irqflags |= IRQF_NO_SUSPEND | IRQF_FORCE_RESUME | IRQF_EARLY_RESUME;
1116         retval = request_irq(irq, handler, irqflags, devname, dev_id);
1117         if (retval != 0) {
1118                 unbind_from_irq(irq);
1119                 return retval;
1120         }
1121
1122         return irq;
1123 }
1124
1125 void unbind_from_irqhandler(unsigned int irq, void *dev_id)
1126 {
1127         struct irq_info *info = irq_get_handler_data(irq);
1128
1129         if (WARN_ON(!info))
1130                 return;
1131         free_irq(irq, dev_id);
1132         unbind_from_irq(irq);
1133 }
1134 EXPORT_SYMBOL_GPL(unbind_from_irqhandler);
1135
1136 /**
1137  * xen_set_irq_priority() - set an event channel priority.
1138  * @irq:irq bound to an event channel.
1139  * @priority: priority between XEN_IRQ_PRIORITY_MAX and XEN_IRQ_PRIORITY_MIN.
1140  */
1141 int xen_set_irq_priority(unsigned irq, unsigned priority)
1142 {
1143         struct evtchn_set_priority set_priority;
1144
1145         set_priority.port = evtchn_from_irq(irq);
1146         set_priority.priority = priority;
1147
1148         return HYPERVISOR_event_channel_op(EVTCHNOP_set_priority,
1149                                            &set_priority);
1150 }
1151 EXPORT_SYMBOL_GPL(xen_set_irq_priority);
1152
1153 int evtchn_make_refcounted(unsigned int evtchn)
1154 {
1155         int irq = get_evtchn_to_irq(evtchn);
1156         struct irq_info *info;
1157
1158         if (irq == -1)
1159                 return -ENOENT;
1160
1161         info = irq_get_handler_data(irq);
1162
1163         if (!info)
1164                 return -ENOENT;
1165
1166         WARN_ON(info->refcnt != -1);
1167
1168         info->refcnt = 1;
1169
1170         return 0;
1171 }
1172 EXPORT_SYMBOL_GPL(evtchn_make_refcounted);
1173
1174 int evtchn_get(unsigned int evtchn)
1175 {
1176         int irq;
1177         struct irq_info *info;
1178         int err = -ENOENT;
1179
1180         if (evtchn >= xen_evtchn_max_channels())
1181                 return -EINVAL;
1182
1183         mutex_lock(&irq_mapping_update_lock);
1184
1185         irq = get_evtchn_to_irq(evtchn);
1186         if (irq == -1)
1187                 goto done;
1188
1189         info = irq_get_handler_data(irq);
1190
1191         if (!info)
1192                 goto done;
1193
1194         err = -EINVAL;
1195         if (info->refcnt <= 0)
1196                 goto done;
1197
1198         info->refcnt++;
1199         err = 0;
1200  done:
1201         mutex_unlock(&irq_mapping_update_lock);
1202
1203         return err;
1204 }
1205 EXPORT_SYMBOL_GPL(evtchn_get);
1206
1207 void evtchn_put(unsigned int evtchn)
1208 {
1209         int irq = get_evtchn_to_irq(evtchn);
1210         if (WARN_ON(irq == -1))
1211                 return;
1212         unbind_from_irq(irq);
1213 }
1214 EXPORT_SYMBOL_GPL(evtchn_put);
1215
1216 void xen_send_IPI_one(unsigned int cpu, enum ipi_vector vector)
1217 {
1218         int irq;
1219
1220 #ifdef CONFIG_X86
1221         if (unlikely(vector == XEN_NMI_VECTOR)) {
1222                 int rc =  HYPERVISOR_vcpu_op(VCPUOP_send_nmi, cpu, NULL);
1223                 if (rc < 0)
1224                         printk(KERN_WARNING "Sending nmi to CPU%d failed (rc:%d)\n", cpu, rc);
1225                 return;
1226         }
1227 #endif
1228         irq = per_cpu(ipi_to_irq, cpu)[vector];
1229         BUG_ON(irq < 0);
1230         notify_remote_via_irq(irq);
1231 }
1232
1233 static DEFINE_PER_CPU(unsigned, xed_nesting_count);
1234
1235 static void __xen_evtchn_do_upcall(void)
1236 {
1237         struct vcpu_info *vcpu_info = __this_cpu_read(xen_vcpu);
1238         int cpu = get_cpu();
1239         unsigned count;
1240
1241         do {
1242                 vcpu_info->evtchn_upcall_pending = 0;
1243
1244                 if (__this_cpu_inc_return(xed_nesting_count) - 1)
1245                         goto out;
1246
1247                 xen_evtchn_handle_events(cpu);
1248
1249                 BUG_ON(!irqs_disabled());
1250
1251                 count = __this_cpu_read(xed_nesting_count);
1252                 __this_cpu_write(xed_nesting_count, 0);
1253         } while (count != 1 || vcpu_info->evtchn_upcall_pending);
1254
1255 out:
1256
1257         put_cpu();
1258 }
1259
1260 void xen_evtchn_do_upcall(struct pt_regs *regs)
1261 {
1262         struct pt_regs *old_regs = set_irq_regs(regs);
1263
1264         irq_enter();
1265 #ifdef CONFIG_X86
1266         exit_idle();
1267 #endif
1268
1269         __xen_evtchn_do_upcall();
1270
1271         irq_exit();
1272         set_irq_regs(old_regs);
1273 }
1274
1275 void xen_hvm_evtchn_do_upcall(void)
1276 {
1277         __xen_evtchn_do_upcall();
1278 }
1279 EXPORT_SYMBOL_GPL(xen_hvm_evtchn_do_upcall);
1280
1281 /* Rebind a new event channel to an existing irq. */
1282 void rebind_evtchn_irq(int evtchn, int irq)
1283 {
1284         struct irq_info *info = info_for_irq(irq);
1285
1286         if (WARN_ON(!info))
1287                 return;
1288
1289         /* Make sure the irq is masked, since the new event channel
1290            will also be masked. */
1291         disable_irq(irq);
1292
1293         mutex_lock(&irq_mapping_update_lock);
1294
1295         /* After resume the irq<->evtchn mappings are all cleared out */
1296         BUG_ON(get_evtchn_to_irq(evtchn) != -1);
1297         /* Expect irq to have been bound before,
1298            so there should be a proper type */
1299         BUG_ON(info->type == IRQT_UNBOUND);
1300
1301         (void)xen_irq_info_evtchn_setup(irq, evtchn);
1302
1303         mutex_unlock(&irq_mapping_update_lock);
1304
1305         /* new event channels are always bound to cpu 0 */
1306         irq_set_affinity(irq, cpumask_of(0));
1307
1308         /* Unmask the event channel. */
1309         enable_irq(irq);
1310 }
1311
1312 /* Rebind an evtchn so that it gets delivered to a specific cpu */
1313 static int rebind_irq_to_cpu(unsigned irq, unsigned tcpu)
1314 {
1315         struct evtchn_bind_vcpu bind_vcpu;
1316         int evtchn = evtchn_from_irq(irq);
1317         int masked;
1318
1319         if (!VALID_EVTCHN(evtchn))
1320                 return -1;
1321
1322         /*
1323          * Events delivered via platform PCI interrupts are always
1324          * routed to vcpu 0 and hence cannot be rebound.
1325          */
1326         if (xen_hvm_domain() && !xen_have_vector_callback)
1327                 return -1;
1328
1329         /* Send future instances of this interrupt to other vcpu. */
1330         bind_vcpu.port = evtchn;
1331         bind_vcpu.vcpu = tcpu;
1332
1333         /*
1334          * Mask the event while changing the VCPU binding to prevent
1335          * it being delivered on an unexpected VCPU.
1336          */
1337         masked = test_and_set_mask(evtchn);
1338
1339         /*
1340          * If this fails, it usually just indicates that we're dealing with a
1341          * virq or IPI channel, which don't actually need to be rebound. Ignore
1342          * it, but don't do the xenlinux-level rebind in that case.
1343          */
1344         if (HYPERVISOR_event_channel_op(EVTCHNOP_bind_vcpu, &bind_vcpu) >= 0)
1345                 bind_evtchn_to_cpu(evtchn, tcpu);
1346
1347         if (!masked)
1348                 unmask_evtchn(evtchn);
1349
1350         return 0;
1351 }
1352
1353 static int set_affinity_irq(struct irq_data *data, const struct cpumask *dest,
1354                             bool force)
1355 {
1356         unsigned tcpu = cpumask_first(dest);
1357
1358         return rebind_irq_to_cpu(data->irq, tcpu);
1359 }
1360
1361 static void enable_dynirq(struct irq_data *data)
1362 {
1363         int evtchn = evtchn_from_irq(data->irq);
1364
1365         if (VALID_EVTCHN(evtchn))
1366                 unmask_evtchn(evtchn);
1367 }
1368
1369 static void disable_dynirq(struct irq_data *data)
1370 {
1371         int evtchn = evtchn_from_irq(data->irq);
1372
1373         if (VALID_EVTCHN(evtchn))
1374                 mask_evtchn(evtchn);
1375 }
1376
1377 static void ack_dynirq(struct irq_data *data)
1378 {
1379         int evtchn = evtchn_from_irq(data->irq);
1380
1381         irq_move_irq(data);
1382
1383         if (VALID_EVTCHN(evtchn))
1384                 clear_evtchn(evtchn);
1385 }
1386
1387 static void mask_ack_dynirq(struct irq_data *data)
1388 {
1389         disable_dynirq(data);
1390         ack_dynirq(data);
1391 }
1392
1393 static int retrigger_dynirq(struct irq_data *data)
1394 {
1395         unsigned int evtchn = evtchn_from_irq(data->irq);
1396         int masked;
1397
1398         if (!VALID_EVTCHN(evtchn))
1399                 return 0;
1400
1401         masked = test_and_set_mask(evtchn);
1402         set_evtchn(evtchn);
1403         if (!masked)
1404                 unmask_evtchn(evtchn);
1405
1406         return 1;
1407 }
1408
1409 static void restore_pirqs(void)
1410 {
1411         int pirq, rc, irq, gsi;
1412         struct physdev_map_pirq map_irq;
1413         struct irq_info *info;
1414
1415         list_for_each_entry(info, &xen_irq_list_head, list) {
1416                 if (info->type != IRQT_PIRQ)
1417                         continue;
1418
1419                 pirq = info->u.pirq.pirq;
1420                 gsi = info->u.pirq.gsi;
1421                 irq = info->irq;
1422
1423                 /* save/restore of PT devices doesn't work, so at this point the
1424                  * only devices present are GSI based emulated devices */
1425                 if (!gsi)
1426                         continue;
1427
1428                 map_irq.domid = DOMID_SELF;
1429                 map_irq.type = MAP_PIRQ_TYPE_GSI;
1430                 map_irq.index = gsi;
1431                 map_irq.pirq = pirq;
1432
1433                 rc = HYPERVISOR_physdev_op(PHYSDEVOP_map_pirq, &map_irq);
1434                 if (rc) {
1435                         pr_warn("xen map irq failed gsi=%d irq=%d pirq=%d rc=%d\n",
1436                                 gsi, irq, pirq, rc);
1437                         xen_free_irq(irq);
1438                         continue;
1439                 }
1440
1441                 printk(KERN_DEBUG "xen: --> irq=%d, pirq=%d\n", irq, map_irq.pirq);
1442
1443                 __startup_pirq(irq);
1444         }
1445 }
1446
1447 static void restore_cpu_virqs(unsigned int cpu)
1448 {
1449         struct evtchn_bind_virq bind_virq;
1450         int virq, irq, evtchn;
1451
1452         for (virq = 0; virq < NR_VIRQS; virq++) {
1453                 if ((irq = per_cpu(virq_to_irq, cpu)[virq]) == -1)
1454                         continue;
1455
1456                 BUG_ON(virq_from_irq(irq) != virq);
1457
1458                 /* Get a new binding from Xen. */
1459                 bind_virq.virq = virq;
1460                 bind_virq.vcpu = cpu;
1461                 if (HYPERVISOR_event_channel_op(EVTCHNOP_bind_virq,
1462                                                 &bind_virq) != 0)
1463                         BUG();
1464                 evtchn = bind_virq.port;
1465
1466                 /* Record the new mapping. */
1467                 (void)xen_irq_info_virq_setup(cpu, irq, evtchn, virq);
1468                 bind_evtchn_to_cpu(evtchn, cpu);
1469         }
1470 }
1471
1472 static void restore_cpu_ipis(unsigned int cpu)
1473 {
1474         struct evtchn_bind_ipi bind_ipi;
1475         int ipi, irq, evtchn;
1476
1477         for (ipi = 0; ipi < XEN_NR_IPIS; ipi++) {
1478                 if ((irq = per_cpu(ipi_to_irq, cpu)[ipi]) == -1)
1479                         continue;
1480
1481                 BUG_ON(ipi_from_irq(irq) != ipi);
1482
1483                 /* Get a new binding from Xen. */
1484                 bind_ipi.vcpu = cpu;
1485                 if (HYPERVISOR_event_channel_op(EVTCHNOP_bind_ipi,
1486                                                 &bind_ipi) != 0)
1487                         BUG();
1488                 evtchn = bind_ipi.port;
1489
1490                 /* Record the new mapping. */
1491                 (void)xen_irq_info_ipi_setup(cpu, irq, evtchn, ipi);
1492                 bind_evtchn_to_cpu(evtchn, cpu);
1493         }
1494 }
1495
1496 /* Clear an irq's pending state, in preparation for polling on it */
1497 void xen_clear_irq_pending(int irq)
1498 {
1499         int evtchn = evtchn_from_irq(irq);
1500
1501         if (VALID_EVTCHN(evtchn))
1502                 clear_evtchn(evtchn);
1503 }
1504 EXPORT_SYMBOL(xen_clear_irq_pending);
1505 void xen_set_irq_pending(int irq)
1506 {
1507         int evtchn = evtchn_from_irq(irq);
1508
1509         if (VALID_EVTCHN(evtchn))
1510                 set_evtchn(evtchn);
1511 }
1512
1513 bool xen_test_irq_pending(int irq)
1514 {
1515         int evtchn = evtchn_from_irq(irq);
1516         bool ret = false;
1517
1518         if (VALID_EVTCHN(evtchn))
1519                 ret = test_evtchn(evtchn);
1520
1521         return ret;
1522 }
1523
1524 /* Poll waiting for an irq to become pending with timeout.  In the usual case,
1525  * the irq will be disabled so it won't deliver an interrupt. */
1526 void xen_poll_irq_timeout(int irq, u64 timeout)
1527 {
1528         evtchn_port_t evtchn = evtchn_from_irq(irq);
1529
1530         if (VALID_EVTCHN(evtchn)) {
1531                 struct sched_poll poll;
1532
1533                 poll.nr_ports = 1;
1534                 poll.timeout = timeout;
1535                 set_xen_guest_handle(poll.ports, &evtchn);
1536
1537                 if (HYPERVISOR_sched_op(SCHEDOP_poll, &poll) != 0)
1538                         BUG();
1539         }
1540 }
1541 EXPORT_SYMBOL(xen_poll_irq_timeout);
1542 /* Poll waiting for an irq to become pending.  In the usual case, the
1543  * irq will be disabled so it won't deliver an interrupt. */
1544 void xen_poll_irq(int irq)
1545 {
1546         xen_poll_irq_timeout(irq, 0 /* no timeout */);
1547 }
1548
1549 /* Check whether the IRQ line is shared with other guests. */
1550 int xen_test_irq_shared(int irq)
1551 {
1552         struct irq_info *info = info_for_irq(irq);
1553         struct physdev_irq_status_query irq_status;
1554
1555         if (WARN_ON(!info))
1556                 return -ENOENT;
1557
1558         irq_status.irq = info->u.pirq.pirq;
1559
1560         if (HYPERVISOR_physdev_op(PHYSDEVOP_irq_status_query, &irq_status))
1561                 return 0;
1562         return !(irq_status.flags & XENIRQSTAT_shared);
1563 }
1564 EXPORT_SYMBOL_GPL(xen_test_irq_shared);
1565
1566 void xen_irq_resume(void)
1567 {
1568         unsigned int cpu;
1569         struct irq_info *info;
1570
1571         /* New event-channel space is not 'live' yet. */
1572         xen_evtchn_mask_all();
1573         xen_evtchn_resume();
1574
1575         /* No IRQ <-> event-channel mappings. */
1576         list_for_each_entry(info, &xen_irq_list_head, list)
1577                 info->evtchn = 0; /* zap event-channel binding */
1578
1579         clear_evtchn_to_irq_all();
1580
1581         for_each_possible_cpu(cpu) {
1582                 restore_cpu_virqs(cpu);
1583                 restore_cpu_ipis(cpu);
1584         }
1585
1586         restore_pirqs();
1587 }
1588
1589 static struct irq_chip xen_dynamic_chip __read_mostly = {
1590         .name                   = "xen-dyn",
1591
1592         .irq_disable            = disable_dynirq,
1593         .irq_mask               = disable_dynirq,
1594         .irq_unmask             = enable_dynirq,
1595
1596         .irq_ack                = ack_dynirq,
1597         .irq_mask_ack           = mask_ack_dynirq,
1598
1599         .irq_set_affinity       = set_affinity_irq,
1600         .irq_retrigger          = retrigger_dynirq,
1601 };
1602
1603 static struct irq_chip xen_pirq_chip __read_mostly = {
1604         .name                   = "xen-pirq",
1605
1606         .irq_startup            = startup_pirq,
1607         .irq_shutdown           = shutdown_pirq,
1608         .irq_enable             = enable_pirq,
1609         .irq_disable            = disable_pirq,
1610
1611         .irq_mask               = disable_dynirq,
1612         .irq_unmask             = enable_dynirq,
1613
1614         .irq_ack                = eoi_pirq,
1615         .irq_eoi                = eoi_pirq,
1616         .irq_mask_ack           = mask_ack_pirq,
1617
1618         .irq_set_affinity       = set_affinity_irq,
1619
1620         .irq_retrigger          = retrigger_dynirq,
1621 };
1622
1623 static struct irq_chip xen_percpu_chip __read_mostly = {
1624         .name                   = "xen-percpu",
1625
1626         .irq_disable            = disable_dynirq,
1627         .irq_mask               = disable_dynirq,
1628         .irq_unmask             = enable_dynirq,
1629
1630         .irq_ack                = ack_dynirq,
1631 };
1632
1633 int xen_set_callback_via(uint64_t via)
1634 {
1635         struct xen_hvm_param a;
1636         a.domid = DOMID_SELF;
1637         a.index = HVM_PARAM_CALLBACK_IRQ;
1638         a.value = via;
1639         return HYPERVISOR_hvm_op(HVMOP_set_param, &a);
1640 }
1641 EXPORT_SYMBOL_GPL(xen_set_callback_via);
1642
1643 #ifdef CONFIG_XEN_PVHVM
1644 /* Vector callbacks are better than PCI interrupts to receive event
1645  * channel notifications because we can receive vector callbacks on any
1646  * vcpu and we don't need PCI support or APIC interactions. */
1647 void xen_callback_vector(void)
1648 {
1649         int rc;
1650         uint64_t callback_via;
1651         if (xen_have_vector_callback) {
1652                 callback_via = HVM_CALLBACK_VECTOR(HYPERVISOR_CALLBACK_VECTOR);
1653                 rc = xen_set_callback_via(callback_via);
1654                 if (rc) {
1655                         pr_err("Request for Xen HVM callback vector failed\n");
1656                         xen_have_vector_callback = 0;
1657                         return;
1658                 }
1659                 pr_info("Xen HVM callback vector for event delivery is enabled\n");
1660                 /* in the restore case the vector has already been allocated */
1661                 if (!test_bit(HYPERVISOR_CALLBACK_VECTOR, used_vectors))
1662                         alloc_intr_gate(HYPERVISOR_CALLBACK_VECTOR,
1663                                         xen_hvm_callback_vector);
1664         }
1665 }
1666 #else
1667 void xen_callback_vector(void) {}
1668 #endif
1669
1670 #undef MODULE_PARAM_PREFIX
1671 #define MODULE_PARAM_PREFIX "xen."
1672
1673 static bool fifo_events = true;
1674 module_param(fifo_events, bool, 0);
1675
1676 void __init xen_init_IRQ(void)
1677 {
1678         int ret = -EINVAL;
1679
1680         if (fifo_events)
1681                 ret = xen_evtchn_fifo_init();
1682         if (ret < 0)
1683                 xen_evtchn_2l_init();
1684
1685         evtchn_to_irq = kcalloc(EVTCHN_ROW(xen_evtchn_max_channels()),
1686                                 sizeof(*evtchn_to_irq), GFP_KERNEL);
1687         BUG_ON(!evtchn_to_irq);
1688
1689         /* No event channels are 'live' right now. */
1690         xen_evtchn_mask_all();
1691
1692         pirq_needs_eoi = pirq_needs_eoi_flag;
1693
1694 #ifdef CONFIG_X86
1695         if (xen_pv_domain()) {
1696                 irq_ctx_init(smp_processor_id());
1697                 if (xen_initial_domain())
1698                         pci_xen_initial_domain();
1699         }
1700         if (xen_feature(XENFEAT_hvm_callback_vector))
1701                 xen_callback_vector();
1702
1703         if (xen_hvm_domain()) {
1704                 native_init_IRQ();
1705                 /* pci_xen_hvm_init must be called after native_init_IRQ so that
1706                  * __acpi_register_gsi can point at the right function */
1707                 pci_xen_hvm_init();
1708         } else {
1709                 int rc;
1710                 struct physdev_pirq_eoi_gmfn eoi_gmfn;
1711
1712                 pirq_eoi_map = (void *)__get_free_page(GFP_KERNEL|__GFP_ZERO);
1713                 eoi_gmfn.gmfn = virt_to_mfn(pirq_eoi_map);
1714                 rc = HYPERVISOR_physdev_op(PHYSDEVOP_pirq_eoi_gmfn_v2, &eoi_gmfn);
1715                 /* TODO: No PVH support for PIRQ EOI */
1716                 if (rc != 0) {
1717                         free_page((unsigned long) pirq_eoi_map);
1718                         pirq_eoi_map = NULL;
1719                 } else
1720                         pirq_needs_eoi = pirq_check_eoi_map;
1721         }
1722 #endif
1723 }