Skip to content

Commit

Permalink
[PATCH] pcmcia: convert pcmcia_cs to kthread
Browse files Browse the repository at this point in the history
Convert pcmcia_cs to use kthread instead of the deprecated
kernel_thread.

Signed-off-by: Serge E. Hallyn <serue@us.ibm.com>
Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
  • Loading branch information
Serge E. Hallyn authored and Dominik Brodowski committed Jun 30, 2006
1 parent 6600521 commit 1da9ab7
Showing 1 changed file with 13 additions and 11 deletions.
24 changes: 13 additions & 11 deletions drivers/pcmcia/cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
#include <linux/pm.h>
#include <linux/pci.h>
#include <linux/device.h>
#include <linux/kthread.h>
#include <asm/system.h>
#include <asm/irq.h>

Expand Down Expand Up @@ -176,6 +177,7 @@ static int pccardd(void *__skt);
*/
int pcmcia_register_socket(struct pcmcia_socket *socket)
{
struct task_struct *tsk;
int ret;

if (!socket || !socket->ops || !socket->dev.dev || !socket->resource_ops)
Expand Down Expand Up @@ -239,15 +241,18 @@ int pcmcia_register_socket(struct pcmcia_socket *socket)
mutex_init(&socket->skt_mutex);
spin_lock_init(&socket->thread_lock);

ret = kernel_thread(pccardd, socket, CLONE_KERNEL);
if (ret < 0)
tsk = kthread_run(pccardd, socket, "pccardd");
if (IS_ERR(tsk)) {
ret = PTR_ERR(tsk);
goto err;
}

wait_for_completion(&socket->thread_done);
if(!socket->thread) {
if (!socket->thread) {
printk(KERN_WARNING "PCMCIA: warning: socket thread for socket %p did not start\n", socket);
return -EIO;
}

pcmcia_parse_events(socket, SS_DETECT);

return 0;
Expand All @@ -272,10 +277,8 @@ void pcmcia_unregister_socket(struct pcmcia_socket *socket)
cs_dbg(socket, 0, "pcmcia_unregister_socket(0x%p)\n", socket->ops);

if (socket->thread) {
init_completion(&socket->thread_done);
socket->thread = NULL;
wake_up(&socket->thread_wait);
wait_for_completion(&socket->thread_done);
kthread_stop(socket->thread);
}
release_cis_mem(socket);

Expand Down Expand Up @@ -630,8 +633,6 @@ static int pccardd(void *__skt)
DECLARE_WAITQUEUE(wait, current);
int ret;

daemonize("pccardd");

skt->thread = current;
skt->socket = dead_socket;
skt->ops->init(skt);
Expand All @@ -643,7 +644,8 @@ static int pccardd(void *__skt)
printk(KERN_WARNING "PCMCIA: unable to register socket 0x%p\n",
skt);
skt->thread = NULL;
complete_and_exit(&skt->thread_done, 0);
complete(&skt->thread_done);
return 0;
}

add_wait_queue(&skt->thread_wait, &wait);
Expand Down Expand Up @@ -674,7 +676,7 @@ static int pccardd(void *__skt)
continue;
}

if (!skt->thread)
if (kthread_should_stop())
break;

schedule();
Expand All @@ -688,7 +690,7 @@ static int pccardd(void *__skt)
/* remove from the device core */
class_device_unregister(&skt->dev);

complete_and_exit(&skt->thread_done, 0);
return 0;
}

/*
Expand Down

0 comments on commit 1da9ab7

Please sign in to comment.