summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Brownell <david-b@pacbell.net>2002-09-29 08:08:07 -0700
committerLinus Torvalds <torvalds@home.transmeta.com>2002-09-29 08:08:07 -0700
commit2bd1e398b1a9145a2bc25bb74e06f020ea46e3f6 (patch)
tree86738337a60f127f47c204d6d8eb6a205c66b0fe
parented071fdfcbd05349b68f944b7791be21b01a34ee (diff)
[PATCH] Sleeping function called from illegal context...
Fix pci_pool_create() from calling device_create_file() under pools_lock. Found by the new "may_sleep" infrastructure.
-rw-r--r--drivers/pci/pool.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/pci/pool.c b/drivers/pci/pool.c
index da6ac3dc20f7..642e22366653 100644
--- a/drivers/pci/pool.c
+++ b/drivers/pci/pool.c
@@ -139,12 +139,14 @@ pci_pool_create (const char *name, struct pci_dev *pdev,
retval->dev = pdev;
if (pdev) {
+ int do_add;
spin_lock_irqsave (&pools_lock, flags);
+ do_add = list_empty (&pdev->pools);
/* note: not currently insisting "name" be unique */
- if (list_empty (&pdev->pools))
- device_create_file (&pdev->dev, &dev_attr_pools);
list_add (&retval->pools, &pdev->pools);
spin_unlock_irqrestore (&pools_lock, flags);
+ if (do_add)
+ device_create_file (&pdev->dev, &dev_attr_pools);
} else
INIT_LIST_HEAD (&retval->pools);