X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=drivers%2Fpcmcia%2Fcs.c;h=d1207393fc3e4029a8b5f6402f82c185d517ff39;hb=9c1be0c4712fe760d8969427ef91107e9c062d91;hp=56230dbd347aee88f9d6eb9fc1a32ec9642d7799;hpb=5889ba0a6a1174ac38d7045824a2d2ed8e93d756;p=linux-2.6 diff --git a/drivers/pcmcia/cs.c b/drivers/pcmcia/cs.c index 56230dbd34..d1207393fc 100644 --- a/drivers/pcmcia/cs.c +++ b/drivers/pcmcia/cs.c @@ -32,11 +32,9 @@ #include #include -#define IN_CARD_SERVICES #include #include #include -#include #include #include #include @@ -238,7 +236,6 @@ int pcmcia_register_socket(struct pcmcia_socket *socket) init_completion(&socket->socket_released); init_completion(&socket->thread_done); - init_waitqueue_head(&socket->thread_wait); mutex_init(&socket->skt_mutex); spin_lock_init(&socket->thread_lock); @@ -278,10 +275,9 @@ void pcmcia_unregister_socket(struct pcmcia_socket *socket) cs_dbg(socket, 0, "pcmcia_unregister_socket(0x%p)\n", socket->ops); - if (socket->thread) { - wake_up(&socket->thread_wait); + if (socket->thread) kthread_stop(socket->thread); - } + release_cis_mem(socket); /* remove from our own list */ @@ -635,7 +631,6 @@ static void socket_detect_change(struct pcmcia_socket *skt) static int pccardd(void *__skt) { struct pcmcia_socket *skt = __skt; - DECLARE_WAITQUEUE(wait, current); int ret; skt->thread = current; @@ -652,8 +647,10 @@ static int pccardd(void *__skt) complete(&skt->thread_done); return 0; } + ret = pccard_sysfs_add_socket(&skt->dev); + if (ret) + dev_warn(&skt->dev, "err %d adding socket attributes\n", ret); - add_wait_queue(&skt->thread_wait, &wait); complete(&skt->thread_done); set_freezable(); @@ -691,9 +688,8 @@ static int pccardd(void *__skt) /* make sure we are running before we exit */ set_current_state(TASK_RUNNING); - remove_wait_queue(&skt->thread_wait, &wait); - /* remove from the device core */ + pccard_sysfs_remove_socket(&skt->dev); device_unregister(&skt->dev); return 0; @@ -712,7 +708,7 @@ void pcmcia_parse_events(struct pcmcia_socket *s, u_int events) s->thread_events |= events; spin_unlock_irqrestore(&s->thread_lock, flags); - wake_up(&s->thread_wait); + wake_up_process(s->thread); } } /* pcmcia_parse_events */ EXPORT_SYMBOL(pcmcia_parse_events); @@ -940,20 +936,13 @@ EXPORT_SYMBOL(pcmcia_socket_class); static int __init init_pcmcia_cs(void) { - int ret; - init_completion(&pcmcia_unload); - ret = class_register(&pcmcia_socket_class); - if (ret) - return (ret); - return class_interface_register(&pccard_sysfs_interface); + return class_register(&pcmcia_socket_class); } static void __exit exit_pcmcia_cs(void) { - class_interface_unregister(&pccard_sysfs_interface); class_unregister(&pcmcia_socket_class); - wait_for_completion(&pcmcia_unload); }