2011-12-20 12:57:26

by Gustavo Padovan

[permalink] [raw]
Subject: [PATCH 1/3] Bluetooth: Nove l2cap_{set,clear}_timer to l2cap.h

From: "Gustavo F. Padovan" <[email protected]>

It is the only place where it is used.

Signed-off-by: Gustavo F. Padovan <[email protected]>
---
include/net/bluetooth/l2cap.h | 15 +++++++++++++++
net/bluetooth/l2cap_core.c | 14 --------------
2 files changed, 15 insertions(+), 14 deletions(-)

diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h
index c0d168a..e199c2f 100644
--- a/include/net/bluetooth/l2cap.h
+++ b/include/net/bluetooth/l2cap.h
@@ -595,6 +595,21 @@ enum {
FLAG_EFS_ENABLE,
};

+static inline void l2cap_set_timer(struct l2cap_chan *chan,
+ struct delayed_work *work, long timeout)
+{
+ BT_DBG("chan %p state %d timeout %ld", chan, chan->state, timeout);
+
+ cancel_delayed_work_sync(work);
+
+ schedule_delayed_work(work, timeout);
+}
+
+static inline void l2cap_clear_timer(struct delayed_work *work)
+{
+ cancel_delayed_work_sync(work);
+}
+
#define __set_chan_timer(c, t) l2cap_set_timer(c, &c->chan_timer, (t))
#define __clear_chan_timer(c) l2cap_clear_timer(&c->chan_timer)
#define __set_retrans_timer(c) l2cap_set_timer(c, &c->retrans_timer, \
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
index ffa2f6b..5978d69 100644
--- a/net/bluetooth/l2cap_core.c
+++ b/net/bluetooth/l2cap_core.c
@@ -228,20 +228,6 @@ static u16 l2cap_alloc_cid(struct l2cap_conn *conn)
return 0;
}

-static void l2cap_set_timer(struct l2cap_chan *chan, struct delayed_work *work, long timeout)
-{
- BT_DBG("chan %p state %d timeout %ld", chan, chan->state, timeout);
-
- cancel_delayed_work_sync(work);
-
- schedule_delayed_work(work, timeout);
-}
-
-static void l2cap_clear_timer(struct delayed_work *work)
-{
- cancel_delayed_work_sync(work);
-}
-
static char *state_to_string(int state)
{
switch(state) {
--
1.7.6.4



2011-12-20 19:10:08

by Gustavo Padovan

[permalink] [raw]
Subject: Re: [PATCH 1/3] Bluetooth: Nove l2cap_{set,clear}_timer to l2cap.h

Hi Anderson,

* Anderson Lizardo <[email protected]> [2011-12-20 09:09:23 -0400]:

> Hi Padovan,
>
> On Tue, Dec 20, 2011 at 8:57 AM, Gustavo F. Padovan
> <[email protected]> wrote:
> > From: "Gustavo F. Padovan" <[email protected]>
> >
> > It is the only place where it is used.
>
> I don't understand. If l2cap.h is the only place where it is used, how
> it used to work/compile before? I can only imagine that the macros
> using l2cap_{set,clear}_timer are in l2cap_core.c , in which case
> they should be moved to l2cap_core.c , not the other way around?

It worked because only macros were using them. Also l2cap.h keeps a lot of
helpers functions to be used only in l2cap_core.c. So to me this seems the
right move.

Gustavo

2011-12-20 16:51:42

by Marcel Holtmann

[permalink] [raw]
Subject: Re: [PATCH 3/3] Bluetooth: Rename info_work to info_timer

Hi Gustavo,

> It makes more sense this way, since info_timer is a timer using delayed
> work API.
>
> Signed-off-by: Gustavo F. Padovan <[email protected]>
> ---
> include/net/bluetooth/l2cap.h | 2 +-
> net/bluetooth/l2cap_core.c | 14 +++++++-------
> 2 files changed, 8 insertions(+), 8 deletions(-)

Acked-by: Marcel Holtmann <[email protected]>

Regards

Marcel



2011-12-20 16:51:17

by Marcel Holtmann

[permalink] [raw]
Subject: Re: [PATCH 2/3] Bluetooth: convert security timer to delayed_work

Hi Gustavo,

> This one also needs to run in process context
>
> Signed-off-by: Gustavo F. Padovan <[email protected]>
> ---
> include/net/bluetooth/l2cap.h | 2 +-
> net/bluetooth/l2cap_core.c | 12 ++++++------
> net/bluetooth/smp.c | 7 ++++---
> 3 files changed, 11 insertions(+), 10 deletions(-)

Acked-by: Marcel Holtmann <[email protected]>

Regards

Marcel



2011-12-20 16:50:45

by Marcel Holtmann

[permalink] [raw]
Subject: Re: [PATCH 1/3] Bluetooth: Nove l2cap_{set,clear}_timer to l2cap.h

Hi Gustavo,

it is Move and not Nove ;)

> From: "Gustavo F. Padovan" <[email protected]>
>
> It is the only place where it is used.
>
> Signed-off-by: Gustavo F. Padovan <[email protected]>
> ---
> include/net/bluetooth/l2cap.h | 15 +++++++++++++++
> net/bluetooth/l2cap_core.c | 14 --------------
> 2 files changed, 15 insertions(+), 14 deletions(-)

Acked-by: Marcel Holtmann <[email protected]>

Regards

Marcel



2011-12-20 13:09:23

by Anderson Lizardo

[permalink] [raw]
Subject: Re: [PATCH 1/3] Bluetooth: Nove l2cap_{set,clear}_timer to l2cap.h

Hi Padovan,

On Tue, Dec 20, 2011 at 8:57 AM, Gustavo F. Padovan
<[email protected]> wrote:
> From: "Gustavo F. Padovan" <[email protected]>
>
> It is the only place where it is used.

I don't understand. If l2cap.h is the only place where it is used, how
it used to work/compile before? I can only imagine that the macros
using l2cap_{set,clear}_timer are in l2cap_core.c , in which case
they should be moved to l2cap_core.c , not the other way around?

Regards,
--
Anderson Lizardo
Instituto Nokia de Tecnologia - INdT
Manaus - Brazil

2011-12-20 12:57:28

by Gustavo Padovan

[permalink] [raw]
Subject: [PATCH 3/3] Bluetooth: Rename info_work to info_timer

From: "Gustavo F. Padovan" <[email protected]>

It makes more sense this way, since info_timer is a timer using delayed
work API.

Signed-off-by: Gustavo F. Padovan <[email protected]>
---
include/net/bluetooth/l2cap.h | 2 +-
net/bluetooth/l2cap_core.c | 14 +++++++-------
2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h
index fc481d1..f141fbe 100644
--- a/include/net/bluetooth/l2cap.h
+++ b/include/net/bluetooth/l2cap.h
@@ -522,7 +522,7 @@ struct l2cap_conn {
__u8 info_state;
__u8 info_ident;

- struct delayed_work info_work;
+ struct delayed_work info_timer;

spinlock_t lock;

diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
index d006455..a898285 100644
--- a/net/bluetooth/l2cap_core.c
+++ b/net/bluetooth/l2cap_core.c
@@ -699,7 +699,7 @@ static void l2cap_do_start(struct l2cap_chan *chan)
conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_SENT;
conn->info_ident = l2cap_get_ident(conn);

- schedule_delayed_work(&conn->info_work,
+ schedule_delayed_work(&conn->info_timer,
msecs_to_jiffies(L2CAP_INFO_TIMEOUT));

l2cap_send_cmd(conn, conn->info_ident,
@@ -996,7 +996,7 @@ static void l2cap_conn_unreliable(struct l2cap_conn *conn, int err)
static void l2cap_info_timeout(struct work_struct *work)
{
struct l2cap_conn *conn = container_of(work, struct l2cap_conn,
- info_work.work);
+ info_timer.work);

conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
conn->info_ident = 0;
@@ -1029,7 +1029,7 @@ static void l2cap_conn_del(struct hci_conn *hcon, int err)
hci_chan_del(conn->hchan);

if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT)
- cancel_delayed_work_sync(&conn->info_work);
+ cancel_delayed_work_sync(&conn->info_timer);

if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND, &hcon->pend)) {
cancel_delayed_work_sync(&conn->security_timer);
@@ -1089,7 +1089,7 @@ static struct l2cap_conn *l2cap_conn_add(struct hci_conn *hcon, u8 status)
if (hcon->type == LE_LINK)
INIT_DELAYED_WORK(&conn->security_timer, security_timeout);
else
- INIT_DELAYED_WORK(&conn->info_work, l2cap_info_timeout);
+ INIT_DELAYED_WORK(&conn->info_timer, l2cap_info_timeout);

conn->disc_reason = HCI_ERROR_REMOTE_USER_TERM;

@@ -2583,7 +2583,7 @@ static inline int l2cap_command_rej(struct l2cap_conn *conn, struct l2cap_cmd_hd

if ((conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) &&
cmd->ident == conn->info_ident) {
- cancel_delayed_work_sync(&conn->info_work);
+ cancel_delayed_work_sync(&conn->info_timer);

conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
conn->info_ident = 0;
@@ -2704,7 +2704,7 @@ sendresp:
conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_SENT;
conn->info_ident = l2cap_get_ident(conn);

- schedule_delayed_work(&conn->info_work,
+ schedule_delayed_work(&conn->info_timer,
msecs_to_jiffies(L2CAP_INFO_TIMEOUT));

l2cap_send_cmd(conn, conn->info_ident,
@@ -3129,7 +3129,7 @@ static inline int l2cap_information_rsp(struct l2cap_conn *conn, struct l2cap_cm
conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE)
return 0;

- cancel_delayed_work_sync(&conn->info_work);
+ cancel_delayed_work_sync(&conn->info_timer);

if (result != L2CAP_IR_SUCCESS) {
conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
--
1.7.6.4


2011-12-20 12:57:27

by Gustavo Padovan

[permalink] [raw]
Subject: [PATCH 2/3] Bluetooth: convert security timer to delayed_work

From: "Gustavo F. Padovan" <[email protected]>

This one also needs to run in process context

Signed-off-by: Gustavo F. Padovan <[email protected]>
---
include/net/bluetooth/l2cap.h | 2 +-
net/bluetooth/l2cap_core.c | 12 ++++++------
net/bluetooth/smp.c | 7 ++++---
3 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h
index e199c2f..fc481d1 100644
--- a/include/net/bluetooth/l2cap.h
+++ b/include/net/bluetooth/l2cap.h
@@ -532,7 +532,7 @@ struct l2cap_conn {

__u8 disc_reason;

- struct timer_list security_timer;
+ struct delayed_work security_timer;
struct smp_chan *smp_chan;

struct list_head chan_l;
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
index 5978d69..d006455 100644
--- a/net/bluetooth/l2cap_core.c
+++ b/net/bluetooth/l2cap_core.c
@@ -1032,7 +1032,7 @@ static void l2cap_conn_del(struct hci_conn *hcon, int err)
cancel_delayed_work_sync(&conn->info_work);

if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND, &hcon->pend)) {
- del_timer(&conn->security_timer);
+ cancel_delayed_work_sync(&conn->security_timer);
smp_chan_destroy(conn);
}

@@ -1040,9 +1040,10 @@ static void l2cap_conn_del(struct hci_conn *hcon, int err)
kfree(conn);
}

-static void security_timeout(unsigned long arg)
+static void security_timeout(struct work_struct *work)
{
- struct l2cap_conn *conn = (void *) arg;
+ struct l2cap_conn *conn = container_of(work, struct l2cap_conn,
+ security_timer.work);

l2cap_conn_del(conn->hcon, ETIMEDOUT);
}
@@ -1086,8 +1087,7 @@ static struct l2cap_conn *l2cap_conn_add(struct hci_conn *hcon, u8 status)
INIT_LIST_HEAD(&conn->chan_l);

if (hcon->type == LE_LINK)
- setup_timer(&conn->security_timer, security_timeout,
- (unsigned long) conn);
+ INIT_DELAYED_WORK(&conn->security_timer, security_timeout);
else
INIT_DELAYED_WORK(&conn->info_work, l2cap_info_timeout);

@@ -4519,7 +4519,7 @@ static int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)

if (hcon->type == LE_LINK) {
smp_distribute_keys(conn, 0);
- del_timer(&conn->security_timer);
+ cancel_delayed_work_sync(&conn->security_timer);
}

rcu_read_lock();
diff --git a/net/bluetooth/smp.c b/net/bluetooth/smp.c
index 0b96737..0ee2905 100644
--- a/net/bluetooth/smp.c
+++ b/net/bluetooth/smp.c
@@ -184,7 +184,8 @@ static void smp_send_cmd(struct l2cap_conn *conn, u8 code, u16 len, void *data)
skb->priority = HCI_PRIO_MAX;
hci_send_acl(conn->hchan, skb, 0);

- mod_timer(&conn->security_timer, jiffies +
+ cancel_delayed_work_sync(&conn->security_timer);
+ schedule_delayed_work(&conn->security_timer,
msecs_to_jiffies(SMP_TIMEOUT));
}

@@ -240,7 +241,7 @@ static void smp_failure(struct l2cap_conn *conn, u8 reason, u8 send)

clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->hcon->pend);
mgmt_auth_failed(conn->hcon->hdev, conn->dst, reason);
- del_timer(&conn->security_timer);
+ cancel_delayed_work_sync(&conn->security_timer);
smp_chan_destroy(conn);
}

@@ -800,7 +801,7 @@ int smp_distribute_keys(struct l2cap_conn *conn, __u8 force)

if (conn->hcon->out || force) {
clear_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->pend);
- del_timer(&conn->security_timer);
+ cancel_delayed_work_sync(&conn->security_timer);
smp_chan_destroy(conn);
}

--
1.7.6.4