Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

PNP: Convert pnp_lock into a mutex

pnp_lock is a spinlock, but it is only acquired from process context,
so it may be a mutex just fine.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

+29 -27
+1 -1
drivers/pnp/base.h
··· 3 3 * Bjorn Helgaas <bjorn.helgaas@hp.com> 4 4 */ 5 5 6 - extern spinlock_t pnp_lock; 6 + extern struct mutex pnp_lock; 7 7 extern const struct attribute_group *pnp_dev_groups[]; 8 8 void *pnp_alloc(long size); 9 9
+13 -12
drivers/pnp/card.c
··· 5 5 */ 6 6 7 7 #include <linux/module.h> 8 + #include <linux/mutex.h> 8 9 #include <linux/ctype.h> 9 10 #include <linux/slab.h> 10 11 #include <linux/pnp.h> ··· 245 244 } 246 245 247 246 pnp_interface_attach_card(card); 248 - spin_lock(&pnp_lock); 247 + mutex_lock(&pnp_lock); 249 248 list_add_tail(&card->global_list, &pnp_cards); 250 249 list_add_tail(&card->protocol_list, &card->protocol->cards); 251 - spin_unlock(&pnp_lock); 250 + mutex_unlock(&pnp_lock); 252 251 253 252 /* we wait until now to add devices in order to ensure the drivers 254 253 * will be able to use all of the related devices on the card ··· 277 276 struct list_head *pos, *temp; 278 277 279 278 device_unregister(&card->dev); 280 - spin_lock(&pnp_lock); 279 + mutex_lock(&pnp_lock); 281 280 list_del(&card->global_list); 282 281 list_del(&card->protocol_list); 283 - spin_unlock(&pnp_lock); 282 + mutex_unlock(&pnp_lock); 284 283 list_for_each_safe(pos, temp, &card->devices) { 285 284 struct pnp_dev *dev = card_to_pnp_dev(pos); 286 285 pnp_remove_card_device(dev); ··· 298 297 dev->card_link = NULL; 299 298 dev_set_name(&dev->dev, "%02x:%02x.%02x", 300 299 dev->protocol->number, card->number, dev->number); 301 - spin_lock(&pnp_lock); 300 + mutex_lock(&pnp_lock); 302 301 dev->card = card; 303 302 list_add_tail(&dev->card_list, &card->devices); 304 - spin_unlock(&pnp_lock); 303 + mutex_unlock(&pnp_lock); 305 304 return 0; 306 305 } 307 306 ··· 311 310 */ 312 311 void pnp_remove_card_device(struct pnp_dev *dev) 313 312 { 314 - spin_lock(&pnp_lock); 313 + mutex_lock(&pnp_lock); 315 314 dev->card = NULL; 316 315 list_del(&dev->card_list); 317 - spin_unlock(&pnp_lock); 316 + mutex_unlock(&pnp_lock); 318 317 __pnp_remove_device(dev); 319 318 } 320 319 ··· 427 426 if (error < 0) 428 427 return error; 429 428 430 - spin_lock(&pnp_lock); 429 + mutex_lock(&pnp_lock); 431 430 list_add_tail(&drv->global_list, &pnp_card_drivers); 432 - spin_unlock(&pnp_lock); 431 + mutex_unlock(&pnp_lock); 433 432 434 433 list_for_each_safe(pos, temp, &pnp_cards) { 435 434 struct pnp_card *card = ··· 445 444 */ 446 445 void pnp_unregister_card_driver(struct pnp_card_driver *drv) 447 446 { 448 - spin_lock(&pnp_lock); 447 + mutex_lock(&pnp_lock); 449 448 list_del(&drv->global_list); 450 - spin_unlock(&pnp_lock); 449 + mutex_unlock(&pnp_lock); 451 450 pnp_unregister_driver(&drv->link); 452 451 } 453 452
+10 -9
drivers/pnp/core.c
··· 9 9 #include <linux/list.h> 10 10 #include <linux/device.h> 11 11 #include <linux/module.h> 12 + #include <linux/mutex.h> 12 13 #include <linux/init.h> 13 14 #include <linux/string.h> 14 15 #include <linux/slab.h> ··· 20 19 21 20 static LIST_HEAD(pnp_protocols); 22 21 LIST_HEAD(pnp_global); 23 - DEFINE_SPINLOCK(pnp_lock); 22 + DEFINE_MUTEX(pnp_lock); 24 23 25 24 /* 26 25 * ACPI or PNPBIOS should tell us about all platform devices, so we can ··· 56 55 INIT_LIST_HEAD(&protocol->devices); 57 56 INIT_LIST_HEAD(&protocol->cards); 58 57 nodenum = 0; 59 - spin_lock(&pnp_lock); 58 + mutex_lock(&pnp_lock); 60 59 61 60 /* assign the lowest unused number */ 62 61 list_for_each(pos, &pnp_protocols) { ··· 68 67 } 69 68 70 69 list_add_tail(&protocol->protocol_list, &pnp_protocols); 71 - spin_unlock(&pnp_lock); 70 + mutex_unlock(&pnp_lock); 72 71 73 72 protocol->number = nodenum; 74 73 dev_set_name(&protocol->dev, "pnp%d", nodenum); ··· 81 80 */ 82 81 void pnp_unregister_protocol(struct pnp_protocol *protocol) 83 82 { 84 - spin_lock(&pnp_lock); 83 + mutex_lock(&pnp_lock); 85 84 list_del(&protocol->protocol_list); 86 - spin_unlock(&pnp_lock); 85 + mutex_unlock(&pnp_lock); 87 86 device_unregister(&protocol->dev); 88 87 } 89 88 ··· 162 161 { 163 162 pnp_fixup_device(dev); 164 163 dev->status = PNP_READY; 165 - spin_lock(&pnp_lock); 164 + mutex_lock(&pnp_lock); 166 165 list_add_tail(&dev->global_list, &pnp_global); 167 166 list_add_tail(&dev->protocol_list, &dev->protocol->devices); 168 - spin_unlock(&pnp_lock); 167 + mutex_unlock(&pnp_lock); 169 168 if (dev->protocol->can_wakeup) 170 169 device_set_wakeup_capable(&dev->dev, 171 170 dev->protocol->can_wakeup(dev)); ··· 204 203 205 204 void __pnp_remove_device(struct pnp_dev *dev) 206 205 { 207 - spin_lock(&pnp_lock); 206 + mutex_lock(&pnp_lock); 208 207 list_del(&dev->global_list); 209 208 list_del(&dev->protocol_list); 210 - spin_unlock(&pnp_lock); 209 + mutex_unlock(&pnp_lock); 211 210 device_unregister(&dev->dev); 212 211 } 213 212
+5 -5
drivers/pnp/driver.c
··· 58 58 59 59 int pnp_device_attach(struct pnp_dev *pnp_dev) 60 60 { 61 - spin_lock(&pnp_lock); 61 + mutex_lock(&pnp_lock); 62 62 if (pnp_dev->status != PNP_READY) { 63 - spin_unlock(&pnp_lock); 63 + mutex_unlock(&pnp_lock); 64 64 return -EBUSY; 65 65 } 66 66 pnp_dev->status = PNP_ATTACHED; 67 - spin_unlock(&pnp_lock); 67 + mutex_unlock(&pnp_lock); 68 68 return 0; 69 69 } 70 70 71 71 void pnp_device_detach(struct pnp_dev *pnp_dev) 72 72 { 73 - spin_lock(&pnp_lock); 73 + mutex_lock(&pnp_lock); 74 74 if (pnp_dev->status == PNP_ATTACHED) 75 75 pnp_dev->status = PNP_READY; 76 - spin_unlock(&pnp_lock); 76 + mutex_unlock(&pnp_lock); 77 77 pnp_disable_dev(pnp_dev); 78 78 } 79 79