diff options
-rw-r--r-- | arch/x86/pci/xen.c | 4 | ||||
-rw-r--r-- | drivers/xen/events.c | 5 | ||||
-rw-r--r-- | include/xen/events.h | 3 |
3 files changed, 10 insertions, 2 deletions
diff --git a/arch/x86/pci/xen.c b/arch/x86/pci/xen.c index 7415aa927913..56ab74989cf1 100644 --- a/arch/x86/pci/xen.c +++ b/arch/x86/pci/xen.c | |||
@@ -64,6 +64,10 @@ static int xen_register_pirq(u32 gsi, int gsi_override, int triggering, | |||
64 | int shareable = 0; | 64 | int shareable = 0; |
65 | char *name; | 65 | char *name; |
66 | 66 | ||
67 | irq = xen_irq_from_gsi(gsi); | ||
68 | if (irq > 0) | ||
69 | return irq; | ||
70 | |||
67 | if (set_pirq) | 71 | if (set_pirq) |
68 | pirq = gsi; | 72 | pirq = gsi; |
69 | 73 | ||
diff --git a/drivers/xen/events.c b/drivers/xen/events.c index 4b33acd8ed4e..faae2f910ad2 100644 --- a/drivers/xen/events.c +++ b/drivers/xen/events.c | |||
@@ -611,7 +611,7 @@ static void disable_pirq(struct irq_data *data) | |||
611 | disable_dynirq(data); | 611 | disable_dynirq(data); |
612 | } | 612 | } |
613 | 613 | ||
614 | static int find_irq_by_gsi(unsigned gsi) | 614 | int xen_irq_from_gsi(unsigned gsi) |
615 | { | 615 | { |
616 | struct irq_info *info; | 616 | struct irq_info *info; |
617 | 617 | ||
@@ -625,6 +625,7 @@ static int find_irq_by_gsi(unsigned gsi) | |||
625 | 625 | ||
626 | return -1; | 626 | return -1; |
627 | } | 627 | } |
628 | EXPORT_SYMBOL_GPL(xen_irq_from_gsi); | ||
628 | 629 | ||
629 | /* | 630 | /* |
630 | * Do not make any assumptions regarding the relationship between the | 631 | * Do not make any assumptions regarding the relationship between the |
@@ -644,7 +645,7 @@ int xen_bind_pirq_gsi_to_irq(unsigned gsi, | |||
644 | 645 | ||
645 | mutex_lock(&irq_mapping_update_lock); | 646 | mutex_lock(&irq_mapping_update_lock); |
646 | 647 | ||
647 | irq = find_irq_by_gsi(gsi); | 648 | irq = xen_irq_from_gsi(gsi); |
648 | if (irq != -1) { | 649 | if (irq != -1) { |
649 | printk(KERN_INFO "xen_map_pirq_gsi: returning irq %d for gsi %u\n", | 650 | printk(KERN_INFO "xen_map_pirq_gsi: returning irq %d for gsi %u\n", |
650 | irq, gsi); | 651 | irq, gsi); |
diff --git a/include/xen/events.h b/include/xen/events.h index 0f773708e02c..04399b28e821 100644 --- a/include/xen/events.h +++ b/include/xen/events.h | |||
@@ -103,6 +103,9 @@ int xen_irq_from_pirq(unsigned pirq); | |||
103 | /* Return the pirq allocated to the irq. */ | 103 | /* Return the pirq allocated to the irq. */ |
104 | int xen_pirq_from_irq(unsigned irq); | 104 | int xen_pirq_from_irq(unsigned irq); |
105 | 105 | ||
106 | /* Return the irq allocated to the gsi */ | ||
107 | int xen_irq_from_gsi(unsigned gsi); | ||
108 | |||
106 | /* Determine whether to ignore this IRQ if it is passed to a guest. */ | 109 | /* Determine whether to ignore this IRQ if it is passed to a guest. */ |
107 | int xen_test_irq_shared(int irq); | 110 | int xen_test_irq_shared(int irq); |
108 | 111 | ||