diff options
| author | David Brownell <david-b@pacbell.net> | 2002-09-29 08:08:07 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@home.transmeta.com> | 2002-09-29 08:08:07 -0700 |
| commit | 2bd1e398b1a9145a2bc25bb74e06f020ea46e3f6 (patch) | |
| tree | 86738337a60f127f47c204d6d8eb6a205c66b0fe | |
| parent | ed071fdfcbd05349b68f944b7791be21b01a34ee (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.c | 6 |
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); |
