lguest: fix for CONFIG_SPARSE_IRQ=y
Impact: remove lots of lguest boot WARN_ON() when CONFIG_SPARSE_IRQ=y We now need to call irq_to_desc_alloc_cpu() before set_irq_chip_and_handler_name(), but we can't do that from init_IRQ (no kmalloc available). So do it as we use interrupts instead. Also means we only alloc for irqs we use, which was the intent of CONFIG_SPARSE_IRQ anyway. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Cc: Ingo Molnar <mingo@redhat.com>
This commit is contained in:
parent
cbd88c8e6f
commit
6db6a5f3ae
2 changed files with 15 additions and 7 deletions
|
@ -212,6 +212,9 @@ static void lg_notify(struct virtqueue *vq)
|
|||
hcall(LHCALL_NOTIFY, lvq->config.pfn << PAGE_SHIFT, 0, 0);
|
||||
}
|
||||
|
||||
/* An extern declaration inside a C file is bad form. Don't do it. */
|
||||
extern void lguest_setup_irq(unsigned int irq);
|
||||
|
||||
/* This routine finds the first virtqueue described in the configuration of
|
||||
* this device and sets it up.
|
||||
*
|
||||
|
@ -266,6 +269,9 @@ static struct virtqueue *lg_find_vq(struct virtio_device *vdev,
|
|||
goto unmap;
|
||||
}
|
||||
|
||||
/* Make sure the interrupt is allocated. */
|
||||
lguest_setup_irq(lvq->config.irq);
|
||||
|
||||
/* Tell the interrupt for this virtqueue to go to the virtio_ring
|
||||
* interrupt handler. */
|
||||
/* FIXME: We used to have a flag for the Host to tell us we could use
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue