diff options
author | Stefano Stabellini <stefano.stabellini@eu.citrix.com> | 2010-07-01 17:10:39 +0100 |
---|---|---|
committer | Stefano Stabellini <stefano.stabellini@eu.citrix.com> | 2010-10-22 21:25:43 +0100 |
commit | 809f9267bbaba7765cdb86a47f2e6e4bf4951b69 (patch) | |
tree | 5ed0ad8e7f5f535d94927498feefba15c9770e91 /drivers/xen/events.c | |
parent | 3942b740e5183caad47a4a3fcb37a4509ce7af83 (diff) | |
download | lwn-809f9267bbaba7765cdb86a47f2e6e4bf4951b69.tar.gz lwn-809f9267bbaba7765cdb86a47f2e6e4bf4951b69.zip |
xen: map MSIs into pirqs
Map MSIs into pirqs, writing 0 in the MSI vector data field and the pirq
number in the MSI destination id field.
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Diffstat (limited to 'drivers/xen/events.c')
-rw-r--r-- | drivers/xen/events.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/drivers/xen/events.c b/drivers/xen/events.c index 32269bcbd88c..efa683ee8840 100644 --- a/drivers/xen/events.c +++ b/drivers/xen/events.c @@ -656,6 +656,28 @@ out: return irq; } +void xen_allocate_pirq_msi(char *name, int *irq, int *pirq) +{ + spin_lock(&irq_mapping_update_lock); + + *irq = find_unbound_irq(); + if (*irq == -1) + goto out; + + *pirq = find_unbound_pirq(); + if (*pirq == -1) + goto out; + + set_irq_chip_and_handler_name(*irq, &xen_pirq_chip, + handle_level_irq, name); + + irq_info[*irq] = mk_pirq_info(0, *pirq, 0, 0); + pirq_to_irq[*pirq] = *irq; + +out: + spin_unlock(&irq_mapping_update_lock); +} + int xen_destroy_irq(int irq) { struct irq_desc *desc; |