Bluetooth: Use kthread API in cmtp
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 <szymon.janc@tieto.com> Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
This commit is contained in:
parent
f4d7cd4a4c
commit
fada4ac339
@ -35,6 +35,7 @@
|
|||||||
#include <linux/ioctl.h>
|
#include <linux/ioctl.h>
|
||||||
#include <linux/file.h>
|
#include <linux/file.h>
|
||||||
#include <linux/wait.h>
|
#include <linux/wait.h>
|
||||||
|
#include <linux/kthread.h>
|
||||||
#include <net/sock.h>
|
#include <net/sock.h>
|
||||||
|
|
||||||
#include <linux/isdn/capilli.h>
|
#include <linux/isdn/capilli.h>
|
||||||
@ -143,7 +144,7 @@ static void cmtp_send_capimsg(struct cmtp_session *session, struct sk_buff *skb)
|
|||||||
|
|
||||||
skb_queue_tail(&session->transmit, 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,
|
static void cmtp_send_interopmsg(struct cmtp_session *session,
|
||||||
@ -386,8 +387,7 @@ static void cmtp_reset_ctr(struct capi_ctr *ctrl)
|
|||||||
|
|
||||||
capi_ctr_down(ctrl);
|
capi_ctr_down(ctrl);
|
||||||
|
|
||||||
atomic_inc(&session->terminate);
|
kthread_stop(session->task);
|
||||||
cmtp_schedule(session);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cmtp_register_appl(struct capi_ctr *ctrl, __u16 appl, capi_register_params *rp)
|
static void cmtp_register_appl(struct capi_ctr *ctrl, __u16 appl, capi_register_params *rp)
|
||||||
|
@ -81,7 +81,7 @@ struct cmtp_session {
|
|||||||
|
|
||||||
char name[BTNAMSIZ];
|
char name[BTNAMSIZ];
|
||||||
|
|
||||||
atomic_t terminate;
|
struct task_struct *task;
|
||||||
|
|
||||||
wait_queue_head_t wait;
|
wait_queue_head_t wait;
|
||||||
|
|
||||||
@ -121,13 +121,6 @@ void cmtp_detach_device(struct cmtp_session *session);
|
|||||||
|
|
||||||
void cmtp_recv_capimsg(struct cmtp_session *session, struct sk_buff *skb);
|
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 */
|
/* CMTP init defines */
|
||||||
int cmtp_init_sockets(void);
|
int cmtp_init_sockets(void);
|
||||||
void cmtp_cleanup_sockets(void);
|
void cmtp_cleanup_sockets(void);
|
||||||
|
@ -35,6 +35,7 @@
|
|||||||
#include <linux/ioctl.h>
|
#include <linux/ioctl.h>
|
||||||
#include <linux/file.h>
|
#include <linux/file.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
|
#include <linux/kthread.h>
|
||||||
#include <net/sock.h>
|
#include <net/sock.h>
|
||||||
|
|
||||||
#include <linux/isdn/capilli.h>
|
#include <linux/isdn/capilli.h>
|
||||||
@ -287,12 +288,11 @@ static int cmtp_session(void *arg)
|
|||||||
|
|
||||||
BT_DBG("session %p", session);
|
BT_DBG("session %p", session);
|
||||||
|
|
||||||
daemonize("kcmtpd_ctr_%d", session->num);
|
|
||||||
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(&session->terminate)) {
|
while (!kthread_should_stop()) {
|
||||||
set_current_state(TASK_INTERRUPTIBLE);
|
set_current_state(TASK_INTERRUPTIBLE);
|
||||||
|
|
||||||
if (sk->sk_state != BT_CONNECTED)
|
if (sk->sk_state != BT_CONNECTED)
|
||||||
@ -370,9 +370,12 @@ int cmtp_add_connection(struct cmtp_connadd_req *req, struct socket *sock)
|
|||||||
|
|
||||||
__cmtp_link_session(session);
|
__cmtp_link_session(session);
|
||||||
|
|
||||||
err = kernel_thread(cmtp_session, session, CLONE_KERNEL);
|
session->task = kthread_run(cmtp_session, session, "kcmtpd_ctr_%d",
|
||||||
if (err < 0)
|
session->num);
|
||||||
|
if (IS_ERR(session->task)) {
|
||||||
|
err = PTR_ERR(session->task);
|
||||||
goto unlink;
|
goto unlink;
|
||||||
|
}
|
||||||
|
|
||||||
if (!(session->flags & (1 << CMTP_LOOPBACK))) {
|
if (!(session->flags & (1 << CMTP_LOOPBACK))) {
|
||||||
err = cmtp_attach_device(session);
|
err = cmtp_attach_device(session);
|
||||||
@ -409,9 +412,8 @@ int cmtp_del_connection(struct cmtp_conndel_req *req)
|
|||||||
/* Flush the transmit queue */
|
/* Flush the transmit queue */
|
||||||
skb_queue_purge(&session->transmit);
|
skb_queue_purge(&session->transmit);
|
||||||
|
|
||||||
/* Kill session thread */
|
/* Stop session thread */
|
||||||
atomic_inc(&session->terminate);
|
kthread_stop(session->task);
|
||||||
cmtp_schedule(session);
|
|
||||||
} else
|
} else
|
||||||
err = -ENOENT;
|
err = -ENOENT;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user