Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Evergreen:11.1:kernel-2.6.32
xen
19302-passthrough-pt-irq-time-out.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 19302-passthrough-pt-irq-time-out.patch of Package xen
# HG changeset patch # User Keir Fraser <keir.fraser@citrix.com> # Date 1236765834 0 # Node ID b5d074255c38a6171c831f20dc392428905f33be # Parent d035b66b5b4db5afd42b1ac0bb4ec6bce0c4ece3 passthrough: pt_irq_time_out() should act on all machine_irq Signed-off-by: Simon Horman <horms@verge.net.au> Index: xen-3.3.1-testing/xen/drivers/passthrough/io.c =================================================================== --- xen-3.3.1-testing.orig/xen/drivers/passthrough/io.c +++ xen-3.3.1-testing/xen/drivers/passthrough/io.c @@ -29,6 +29,9 @@ static void pt_irq_time_out(void *data) struct hvm_irq_dpci *dpci = NULL; struct dev_intx_gsi_link *digl; uint32_t device, intx; + DECLARE_BITMAP(machine_gsi_map, NR_IRQS); + + bitmap_zero(machine_gsi_map, NR_IRQS); spin_lock(&irq_map->dom->event_lock); @@ -38,16 +41,31 @@ static void pt_irq_time_out(void *data) { guest_gsi = digl->gsi; machine_gsi = dpci->girq[guest_gsi].machine_gsi; + set_bit(machine_gsi, machine_gsi_map); device = digl->device; intx = digl->intx; hvm_pci_intx_deassert(irq_map->dom, device, intx); } - clear_bit(machine_gsi, dpci->dirq_mask); - vector = domain_irq_to_vector(irq_map->dom, machine_gsi); - dpci->mirq[machine_gsi].pending = 0; + for ( machine_gsi = find_first_bit(machine_gsi_map, NR_IRQS); + machine_gsi < NR_IRQS; + machine_gsi = find_next_bit(machine_gsi_map, NR_IRQS, + machine_gsi + 1) ) + { + clear_bit(machine_gsi, dpci->dirq_mask); + vector = domain_irq_to_vector(irq_map->dom, machine_gsi); + dpci->mirq[machine_gsi].pending = 0; + } + spin_unlock(&irq_map->dom->event_lock); - pirq_guest_eoi(irq_map->dom, machine_gsi); + + for ( machine_gsi = find_first_bit(machine_gsi_map, NR_IRQS); + machine_gsi < NR_IRQS; + machine_gsi = find_next_bit(machine_gsi_map, NR_IRQS, + machine_gsi + 1) ) + { + pirq_guest_eoi(irq_map->dom, machine_gsi); + } } int pt_irq_create_bind_vtd(
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor