[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [Patch] linux: avoid kmalloc while disabling interrupts
Hi, We should avoid using kmalloc while interrupts is disabled. kmalloc may sleep. Signed-off-by: Akio Takebe <takebe_akio@xxxxxxxxxxxxxx> Best Regards, Akio Takebe diff -r e86f9e05144a drivers/xen/pciback/controller.c --- a/drivers/xen/pciback/controller.c Mon Sep 08 14:02:13 2008 +0100 +++ b/drivers/xen/pciback/controller.c Tue Sep 09 16:28:20 2008 +0900 @@ -101,15 +101,15 @@ unsigned long flags; int ret = 0, found = 0; + /* Look to see if we already have a domain:bus for this controller */ spin_lock_irqsave(&dev_data->lock, flags); - - /* Look to see if we already have a domain:bus for this controller */ list_for_each_entry(cntrl_entry, &dev_data->list, list) { if (cntrl_entry->controller == dev_controller) { found = 1; break; } } + spin_unlock_irqrestore(&dev_data->lock, flags); if (!found) { cntrl_entry = kmalloc(sizeof(*cntrl_entry), GFP_ATOMIC); @@ -128,9 +128,10 @@ dev_data->next_bus = 0; } + spin_lock_irqsave(&dev_data->lock, flags); INIT_LIST_HEAD(&cntrl_entry->dev_list); - list_add_tail(&cntrl_entry->list, &dev_data->list); + spin_unlock_irqrestore(&dev_data->lock, flags); } if (PCI_SLOT(cntrl_entry->next_devfn) > PCI_MAX_SLOTS) { @@ -149,24 +150,24 @@ dev_entry = kmalloc(sizeof(*dev_entry), GFP_ATOMIC); if (!dev_entry) { + spin_lock_irqsave(&dev_data->lock, flags); if (list_empty(&cntrl_entry->dev_list)) { list_del(&cntrl_entry->list); kfree(cntrl_entry); } ret = -ENOMEM; + spin_unlock_irqrestore(&dev_data->lock, flags); goto out; } dev_entry->dev = dev; dev_entry->devfn = cntrl_entry->next_devfn; + spin_lock_irqsave(&dev_data->lock, flags); list_add_tail(&dev_entry->list, &cntrl_entry->dev_list); - cntrl_entry->next_devfn += PCI_DEVFN(1, 0); - + spin_unlock_irqrestore(&dev_data->lock, flags); out: - spin_unlock_irqrestore(&dev_data->lock, flags); - /* TODO: Publish virtual domain:bus:slot.func here. */ return ret; _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |