diff options
| -rw-r--r-- | drivers/pcmcia/ds.c | 18 |
1 files changed, 2 insertions, 16 deletions
diff --git a/drivers/pcmcia/ds.c b/drivers/pcmcia/ds.c index 0e12d85dd723..7ef7adee5e4f 100644 --- a/drivers/pcmcia/ds.c +++ b/drivers/pcmcia/ds.c | |||
| @@ -477,15 +477,6 @@ static int pcmcia_device_query(struct pcmcia_device *p_dev) | |||
| 477 | } | 477 | } |
| 478 | 478 | ||
| 479 | 479 | ||
| 480 | /* device_add_lock is needed to avoid double registration by cardmgr and kernel. | ||
| 481 | * Serializes pcmcia_device_add; will most likely be removed in future. | ||
| 482 | * | ||
| 483 | * While it has the caveat that adding new PCMCIA devices inside(!) device_register() | ||
| 484 | * won't work, this doesn't matter much at the moment: the driver core doesn't | ||
| 485 | * support it either. | ||
| 486 | */ | ||
| 487 | static DEFINE_MUTEX(device_add_lock); | ||
| 488 | |||
| 489 | struct pcmcia_device *pcmcia_device_add(struct pcmcia_socket *s, unsigned int function) | 480 | struct pcmcia_device *pcmcia_device_add(struct pcmcia_socket *s, unsigned int function) |
| 490 | { | 481 | { |
| 491 | struct pcmcia_device *p_dev, *tmp_dev; | 482 | struct pcmcia_device *p_dev, *tmp_dev; |
| @@ -495,8 +486,6 @@ struct pcmcia_device *pcmcia_device_add(struct pcmcia_socket *s, unsigned int fu | |||
| 495 | if (!s) | 486 | if (!s) |
| 496 | return NULL; | 487 | return NULL; |
| 497 | 488 | ||
| 498 | mutex_lock(&device_add_lock); | ||
| 499 | |||
| 500 | pr_debug("adding device to %d, function %d\n", s->sock, function); | 489 | pr_debug("adding device to %d, function %d\n", s->sock, function); |
| 501 | 490 | ||
| 502 | p_dev = kzalloc(sizeof(struct pcmcia_device), GFP_KERNEL); | 491 | p_dev = kzalloc(sizeof(struct pcmcia_device), GFP_KERNEL); |
| @@ -536,8 +525,8 @@ struct pcmcia_device *pcmcia_device_add(struct pcmcia_socket *s, unsigned int fu | |||
| 536 | 525 | ||
| 537 | /* | 526 | /* |
| 538 | * p_dev->function_config must be the same for all card functions. | 527 | * p_dev->function_config must be the same for all card functions. |
| 539 | * Note that this is serialized by the device_add_lock, so that | 528 | * Note that this is serialized by ops_mutex, so that only one |
| 540 | * only one such struct will be created. | 529 | * such struct will be created. |
| 541 | */ | 530 | */ |
| 542 | list_for_each_entry(tmp_dev, &s->devices_list, socket_device_list) | 531 | list_for_each_entry(tmp_dev, &s->devices_list, socket_device_list) |
| 543 | if (p_dev->func == tmp_dev->func) { | 532 | if (p_dev->func == tmp_dev->func) { |
| @@ -575,8 +564,6 @@ struct pcmcia_device *pcmcia_device_add(struct pcmcia_socket *s, unsigned int fu | |||
| 575 | if (device_register(&p_dev->dev)) | 564 | if (device_register(&p_dev->dev)) |
| 576 | goto err_unreg; | 565 | goto err_unreg; |
| 577 | 566 | ||
| 578 | mutex_unlock(&device_add_lock); | ||
| 579 | |||
| 580 | return p_dev; | 567 | return p_dev; |
| 581 | 568 | ||
| 582 | err_unreg: | 569 | err_unreg: |
| @@ -594,7 +581,6 @@ struct pcmcia_device *pcmcia_device_add(struct pcmcia_socket *s, unsigned int fu | |||
| 594 | kfree(p_dev->devname); | 581 | kfree(p_dev->devname); |
| 595 | kfree(p_dev); | 582 | kfree(p_dev); |
| 596 | err_put: | 583 | err_put: |
| 597 | mutex_unlock(&device_add_lock); | ||
| 598 | pcmcia_put_socket(s); | 584 | pcmcia_put_socket(s); |
| 599 | 585 | ||
| 600 | return NULL; | 586 | return NULL; |
