Skip to content

Commit

Permalink
Bluetooth: Use kthread API in cmtp
Browse files Browse the repository at this point in the history
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: Szymon Janc <[email protected]>
Signed-off-by: Gustavo F. Padovan <[email protected]>
  • Loading branch information
Szymon Janc authored and Gustavo F. Padovan committed Apr 5, 2011
1 parent f4d7cd4 commit fada4ac
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 18 deletions.
6 changes: 3 additions & 3 deletions net/bluetooth/cmtp/capi.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
#include <linux/ioctl.h>
#include <linux/file.h>
#include <linux/wait.h>
#include <linux/kthread.h>
#include <net/sock.h>

#include <linux/isdn/capilli.h>
Expand Down Expand Up @@ -143,7 +144,7 @@ static void cmtp_send_capimsg(struct cmtp_session *session, struct sk_buff *skb)

skb_queue_tail(&session->transmit, skb);

cmtp_schedule(session);
wake_up_interruptible(sk_sleep(session->sock->sk));
}

static void cmtp_send_interopmsg(struct cmtp_session *session,
Expand Down Expand Up @@ -386,8 +387,7 @@ static void cmtp_reset_ctr(struct capi_ctr *ctrl)

capi_ctr_down(ctrl);

atomic_inc(&session->terminate);
cmtp_schedule(session);
kthread_stop(session->task);
}

static void cmtp_register_appl(struct capi_ctr *ctrl, __u16 appl, capi_register_params *rp)
Expand Down
9 changes: 1 addition & 8 deletions net/bluetooth/cmtp/cmtp.h
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ struct cmtp_session {

char name[BTNAMSIZ];

atomic_t terminate;
struct task_struct *task;

wait_queue_head_t wait;

Expand Down Expand Up @@ -121,13 +121,6 @@ void cmtp_detach_device(struct cmtp_session *session);

void cmtp_recv_capimsg(struct cmtp_session *session, struct sk_buff *skb);

static inline void cmtp_schedule(struct cmtp_session *session)
{
struct sock *sk = session->sock->sk;

wake_up_interruptible(sk_sleep(sk));
}

/* CMTP init defines */
int cmtp_init_sockets(void);
void cmtp_cleanup_sockets(void);
Expand Down
16 changes: 9 additions & 7 deletions net/bluetooth/cmtp/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
#include <linux/ioctl.h>
#include <linux/file.h>
#include <linux/init.h>
#include <linux/kthread.h>
#include <net/sock.h>

#include <linux/isdn/capilli.h>
Expand Down Expand Up @@ -287,12 +288,11 @@ static int cmtp_session(void *arg)

BT_DBG("session %p", session);

daemonize("kcmtpd_ctr_%d", session->num);
set_user_nice(current, -15);

init_waitqueue_entry(&wait, current);
add_wait_queue(sk_sleep(sk), &wait);
while (!atomic_read(&session->terminate)) {
while (!kthread_should_stop()) {
set_current_state(TASK_INTERRUPTIBLE);

if (sk->sk_state != BT_CONNECTED)
Expand Down Expand Up @@ -370,9 +370,12 @@ int cmtp_add_connection(struct cmtp_connadd_req *req, struct socket *sock)

__cmtp_link_session(session);

err = kernel_thread(cmtp_session, session, CLONE_KERNEL);
if (err < 0)
session->task = kthread_run(cmtp_session, session, "kcmtpd_ctr_%d",
session->num);
if (IS_ERR(session->task)) {
err = PTR_ERR(session->task);
goto unlink;
}

if (!(session->flags & (1 << CMTP_LOOPBACK))) {
err = cmtp_attach_device(session);
Expand Down Expand Up @@ -409,9 +412,8 @@ int cmtp_del_connection(struct cmtp_conndel_req *req)
/* Flush the transmit queue */
skb_queue_purge(&session->transmit);

/* Kill session thread */
atomic_inc(&session->terminate);
cmtp_schedule(session);
/* Stop session thread */
kthread_stop(session->task);
} else
err = -ENOENT;

Expand Down

0 comments on commit fada4ac

Please sign in to comment.