Commit f4d7cd4a authored by Szymon Janc's avatar Szymon Janc Committed by Gustavo F. Padovan

Bluetooth: Use kthread API in bnep

kernel_thread() is a low-level implementation detail and
EXPORT_SYMBOL(kernel_thread) is scheduled for removal.
Use the <linux/kthread.h> API instead.
Signed-off-by: default avatarSzymon Janc <szymon.janc@tieto.com>
Signed-off-by: default avatarGustavo F. Padovan <padovan@profusion.mobi>
parent aabf6f89
...@@ -155,7 +155,7 @@ struct bnep_session { ...@@ -155,7 +155,7 @@ struct bnep_session {
unsigned int role; unsigned int role;
unsigned long state; unsigned long state;
unsigned long flags; unsigned long flags;
atomic_t killed; struct task_struct *task;
struct ethhdr eh; struct ethhdr eh;
struct msghdr msg; struct msghdr msg;
......
...@@ -36,6 +36,7 @@ ...@@ -36,6 +36,7 @@
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/net.h> #include <linux/net.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/kthread.h>
#include <net/sock.h> #include <net/sock.h>
#include <linux/socket.h> #include <linux/socket.h>
...@@ -479,12 +480,11 @@ static int bnep_session(void *arg) ...@@ -479,12 +480,11 @@ static int bnep_session(void *arg)
BT_DBG(""); BT_DBG("");
daemonize("kbnepd %s", dev->name);
set_user_nice(current, -15); set_user_nice(current, -15);
init_waitqueue_entry(&wait, current); init_waitqueue_entry(&wait, current);
add_wait_queue(sk_sleep(sk), &wait); add_wait_queue(sk_sleep(sk), &wait);
while (!atomic_read(&s->killed)) { while (!kthread_should_stop()) {
set_current_state(TASK_INTERRUPTIBLE); set_current_state(TASK_INTERRUPTIBLE);
/* RX */ /* RX */
...@@ -611,11 +611,12 @@ int bnep_add_connection(struct bnep_connadd_req *req, struct socket *sock) ...@@ -611,11 +611,12 @@ int bnep_add_connection(struct bnep_connadd_req *req, struct socket *sock)
__bnep_link_session(s); __bnep_link_session(s);
err = kernel_thread(bnep_session, s, CLONE_KERNEL); s->task = kthread_run(bnep_session, s, "kbnepd %s", dev->name);
if (err < 0) { if (IS_ERR(s->task)) {
/* Session thread start failed, gotta cleanup. */ /* Session thread start failed, gotta cleanup. */
unregister_netdev(dev); unregister_netdev(dev);
__bnep_unlink_session(s); __bnep_unlink_session(s);
err = PTR_ERR(s->task);
goto failed; goto failed;
} }
...@@ -639,15 +640,9 @@ int bnep_del_connection(struct bnep_conndel_req *req) ...@@ -639,15 +640,9 @@ int bnep_del_connection(struct bnep_conndel_req *req)
down_read(&bnep_session_sem); down_read(&bnep_session_sem);
s = __bnep_get_session(req->dst); s = __bnep_get_session(req->dst);
if (s) { if (s)
/* Wakeup user-space which is polling for socket errors. kthread_stop(s->task);
* This is temporary hack until we have shutdown in L2CAP */ else
s->sock->sk->sk_err = EUNATCH;
/* Kill session thread */
atomic_inc(&s->killed);
wake_up_interruptible(sk_sleep(s->sock->sk));
} else
err = -ENOENT; err = -ENOENT;
up_read(&bnep_session_sem); up_read(&bnep_session_sem);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment