Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1da9ab73 authored by Serge E. Hallyn's avatar Serge E. Hallyn Committed by Dominik Brodowski
Browse files

[PATCH] pcmcia: convert pcmcia_cs to kthread



Convert pcmcia_cs to use kthread instead of the deprecated
kernel_thread.

Signed-off-by: default avatarSerge E. Hallyn <serue@us.ibm.com>
Signed-off-by: default avatarDominik Brodowski <linux@dominikbrodowski.net>
parent 66005216
Loading
Loading
Loading
Loading
+13 −11
Original line number Diff line number Diff line
@@ -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>

@@ -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)
@@ -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) {
		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;
@@ -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);

@@ -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);
@@ -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);
@@ -674,7 +676,7 @@ static int pccardd(void *__skt)
			continue;
		}

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

		schedule();
@@ -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;
}

/*