2015-06-26 09:27:49

by Jörg Otte

[permalink] [raw]
Subject: [4.1.0-07254-gc13c810] Regression: Bluetooth not working.

Bluetooth is inoperable in current Linus tree and the
first bad commit is:

835a6a2f8603237a3e6cded5a6765090ecb06ea5 is the first bad commit
commit 835a6a2f8603237a3e6cded5a6765090ecb06ea5
Author: Alexey Dobriyan <[email protected]>
Date: Wed Jun 10 20:28:33 2015 +0300

Bluetooth: Stop sabotaging list poisoning

list_del() poisons pointers with special values, no need to overwrite them.

Signed-off-by: Alexey Dobriyan <[email protected]>
Signed-off-by: Marcel Holtmann <[email protected]>

My BT adapter is an intel 8087:07da
I reverted that commit and this fixed the problem for me.

Thanks, Jörg


2015-06-26 09:37:49

by Marcel Holtmann

[permalink] [raw]
Subject: Re: [4.1.0-07254-gc13c810] Regression: Bluetooth not working.

Hi Joerg,

> Bluetooth is inoperable in current Linus tree and the
> first bad commit is:
>
> 835a6a2f8603237a3e6cded5a6765090ecb06ea5 is the first bad commit
> commit 835a6a2f8603237a3e6cded5a6765090ecb06ea5
> Author: Alexey Dobriyan <[email protected]>
> Date: Wed Jun 10 20:28:33 2015 +0300
>
> Bluetooth: Stop sabotaging list poisoning
>
> list_del() poisons pointers with special values, no need to overwrite them.
>
> Signed-off-by: Alexey Dobriyan <[email protected]>
> Signed-off-by: Marcel Holtmann <[email protected]>
>
> My BT adapter is an intel 8087:07da
> I reverted that commit and this fixed the problem for me.

today we had a patch from Tedd fixing the list initialization in the HIDP code.

diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c
index 9070dfd6b4ad..f1a117f8cad2 100644
--- a/net/bluetooth/hidp/core.c
+++ b/net/bluetooth/hidp/core.c
@@ -915,6 +915,7 @@ static int hidp_session_new(struct hidp_session **out, const bdaddr_t *bdaddr,
session->conn = l2cap_conn_get(conn);
session->user.probe = hidp_session_probe;
session->user.remove = hidp_session_remove;
+ INIT_LIST_HEAD(&session->user.list);
session->ctrl_sock = ctrl_sock;
session->intr_sock = intr_sock;
skb_queue_head_init(&session->ctrl_transmit);

Could this be fixing it for you as well?

Regards

Marcel

2015-06-26 10:03:58

by Jörg Otte

[permalink] [raw]
Subject: Re: [4.1.0-07254-gc13c810] Regression: Bluetooth not working.

2015-06-26 11:37 GMT+02:00 Marcel Holtmann <[email protected]>:
> Hi Joerg,
>
>> Bluetooth is inoperable in current Linus tree and the
>> first bad commit is:
>>
>> 835a6a2f8603237a3e6cded5a6765090ecb06ea5 is the first bad commit
>> commit 835a6a2f8603237a3e6cded5a6765090ecb06ea5
>> Author: Alexey Dobriyan <[email protected]>
>> Date: Wed Jun 10 20:28:33 2015 +0300
>>
>> Bluetooth: Stop sabotaging list poisoning
>>
>> list_del() poisons pointers with special values, no need to overwrite them.
>>
>> Signed-off-by: Alexey Dobriyan <[email protected]>
>> Signed-off-by: Marcel Holtmann <[email protected]>
>>
>> My BT adapter is an intel 8087:07da
>> I reverted that commit and this fixed the problem for me.
>
> today we had a patch from Tedd fixing the list initialization in the HIDP code.
>
> diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c
> index 9070dfd6b4ad..f1a117f8cad2 100644
> --- a/net/bluetooth/hidp/core.c
> +++ b/net/bluetooth/hidp/core.c
> @@ -915,6 +915,7 @@ static int hidp_session_new(struct hidp_session **out, const bdaddr_t *bdaddr,
> session->conn = l2cap_conn_get(conn);
> session->user.probe = hidp_session_probe;
> session->user.remove = hidp_session_remove;
> + INIT_LIST_HEAD(&session->user.list);
> session->ctrl_sock = ctrl_sock;
> session->intr_sock = intr_sock;
> skb_queue_head_init(&session->ctrl_transmit);
>
> Could this be fixing it for you as well?
>
I will check this when I am at home in the
afternoon.

Thanks, Jörg

2015-06-26 10:27:33

by Alexey Dobriyan

[permalink] [raw]
Subject: Re: [4.1.0-07254-gc13c810] Regression: Bluetooth not working.

On Fri, Jun 26, 2015 at 1:03 PM, Jörg Otte <[email protected]> wrote:
> 2015-06-26 11:37 GMT+02:00 Marcel Holtmann <[email protected]>:

>> --- a/net/bluetooth/hidp/core.c
>> +++ b/net/bluetooth/hidp/core.c
>> @@ -915,6 +915,7 @@ static int hidp_session_new(struct hidp_session **out, const bdaddr_t *bdaddr,
>> session->conn = l2cap_conn_get(conn);
>> session->user.probe = hidp_session_probe;
>> session->user.remove = hidp_session_remove;
>> + INIT_LIST_HEAD(&session->user.list);

Heh, I checked every list.next/prev instance except init bit.
Sorry for the breakage.

Alexey

2015-06-26 14:28:31

by Jörg Otte

[permalink] [raw]
Subject: Re: [4.1.0-07254-gc13c810] Regression: Bluetooth not working.

2015-06-26 12:03 GMT+02:00 Jörg Otte <[email protected]>:
> 2015-06-26 11:37 GMT+02:00 Marcel Holtmann <[email protected]>:
>> Hi Joerg,
>>
>>> Bluetooth is inoperable in current Linus tree and the
>>> first bad commit is:
>>>
>>> 835a6a2f8603237a3e6cded5a6765090ecb06ea5 is the first bad commit
>>> commit 835a6a2f8603237a3e6cded5a6765090ecb06ea5
>>> Author: Alexey Dobriyan <[email protected]>
>>> Date: Wed Jun 10 20:28:33 2015 +0300
>>>
>>> Bluetooth: Stop sabotaging list poisoning
>>>
>>> list_del() poisons pointers with special values, no need to overwrite them.
>>>
>>> Signed-off-by: Alexey Dobriyan <[email protected]>
>>> Signed-off-by: Marcel Holtmann <[email protected]>
>>>
>>> My BT adapter is an intel 8087:07da
>>> I reverted that commit and this fixed the problem for me.
>>
>> today we had a patch from Tedd fixing the list initialization in the HIDP code.
>>
>> diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c
>> index 9070dfd6b4ad..f1a117f8cad2 100644
>> --- a/net/bluetooth/hidp/core.c
>> +++ b/net/bluetooth/hidp/core.c
>> @@ -915,6 +915,7 @@ static int hidp_session_new(struct hidp_session **out, const bdaddr_t *bdaddr,
>> session->conn = l2cap_conn_get(conn);
>> session->user.probe = hidp_session_probe;
>> session->user.remove = hidp_session_remove;
>> + INIT_LIST_HEAD(&session->user.list);
>> session->ctrl_sock = ctrl_sock;
>> session->intr_sock = intr_sock;
>> skb_queue_head_init(&session->ctrl_transmit);
>>
>> Could this be fixing it for you as well?
>>
> I will check this when I am at home in the
> afternoon.
>

The patch works for me too.

Thanks, Jörg

2015-06-28 15:36:11

by Jörg Otte

[permalink] [raw]
Subject: Re: [4.1.0-07254-gc13c810] Regression: Bluetooth not working.

2015-06-26 16:28 GMT+02:00 Jörg Otte <[email protected]>:
> 2015-06-26 12:03 GMT+02:00 Jörg Otte <[email protected]>:
>> 2015-06-26 11:37 GMT+02:00 Marcel Holtmann <[email protected]>:
>>> Hi Joerg,
>>>
>>>> Bluetooth is inoperable in current Linus tree and the
>>>> first bad commit is:
>>>>
>>>> 835a6a2f8603237a3e6cded5a6765090ecb06ea5 is the first bad commit
>>>> commit 835a6a2f8603237a3e6cded5a6765090ecb06ea5
>>>> Author: Alexey Dobriyan <[email protected]>
>>>> Date: Wed Jun 10 20:28:33 2015 +0300
>>>>
>>>> Bluetooth: Stop sabotaging list poisoning
>>>>
>>>> list_del() poisons pointers with special values, no need to overwrite them.
>>>>
>>>> Signed-off-by: Alexey Dobriyan <[email protected]>
>>>> Signed-off-by: Marcel Holtmann <[email protected]>
>>>>
>>>> My BT adapter is an intel 8087:07da
>>>> I reverted that commit and this fixed the problem for me.
>>>
>>> today we had a patch from Tedd fixing the list initialization in the HIDP code.
>>>
>>> diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c
>>> index 9070dfd6b4ad..f1a117f8cad2 100644
>>> --- a/net/bluetooth/hidp/core.c
>>> +++ b/net/bluetooth/hidp/core.c
>>> @@ -915,6 +915,7 @@ static int hidp_session_new(struct hidp_session **out, const bdaddr_t *bdaddr,
>>> session->conn = l2cap_conn_get(conn);
>>> session->user.probe = hidp_session_probe;
>>> session->user.remove = hidp_session_remove;
>>> + INIT_LIST_HEAD(&session->user.list);
>>> session->ctrl_sock = ctrl_sock;
>>> session->intr_sock = intr_sock;
>>> skb_queue_head_init(&session->ctrl_transmit);
>>>
>>> Could this be fixing it for you as well?
>>>
>> I will check this when I am at home in the
>> afternoon.
>>
>
> The patch works for me too.
>
Ok, this was a little bit hasty!
I now see the following additional problems:

- System freeze on resume (occures always).
- System freeze on shutdown (occures sometimes)
- System freeze when BT-mouse is connecting (occures sometimes).

Then I can't do anything except power off.

This happens only if Bluetooth AND BT-mouse is activated.

Thanks, Jörg

2015-06-28 16:09:42

by Alexey Dobriyan

[permalink] [raw]
Subject: Re: [4.1.0-07254-gc13c810] Regression: Bluetooth not working.

On Sun, Jun 28, 2015 at 05:36:04PM +0200, J?rg Otte wrote:
> 2015-06-26 16:28 GMT+02:00 J?rg Otte <[email protected]>:
> > 2015-06-26 12:03 GMT+02:00 J?rg Otte <[email protected]>:
> >> 2015-06-26 11:37 GMT+02:00 Marcel Holtmann <[email protected]>:
> >>> Hi Joerg,
> >>>
> >>>> Bluetooth is inoperable in current Linus tree and the
> >>>> first bad commit is:
> >>>>
> >>>> 835a6a2f8603237a3e6cded5a6765090ecb06ea5 is the first bad commit
> >>>> commit 835a6a2f8603237a3e6cded5a6765090ecb06ea5
> >>>> Author: Alexey Dobriyan <[email protected]>
> >>>> Date: Wed Jun 10 20:28:33 2015 +0300
> >>>>
> >>>> Bluetooth: Stop sabotaging list poisoning
> >>>>
> >>>> list_del() poisons pointers with special values, no need to overwrite them.
> >>>>
> >>>> Signed-off-by: Alexey Dobriyan <[email protected]>
> >>>> Signed-off-by: Marcel Holtmann <[email protected]>
> >>>>
> >>>> My BT adapter is an intel 8087:07da
> >>>> I reverted that commit and this fixed the problem for me.
> >>>
> >>> today we had a patch from Tedd fixing the list initialization in the HIDP code.
> >>>
> >>> diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c
> >>> index 9070dfd6b4ad..f1a117f8cad2 100644
> >>> --- a/net/bluetooth/hidp/core.c
> >>> +++ b/net/bluetooth/hidp/core.c
> >>> @@ -915,6 +915,7 @@ static int hidp_session_new(struct hidp_session **out, const bdaddr_t *bdaddr,
> >>> session->conn = l2cap_conn_get(conn);
> >>> session->user.probe = hidp_session_probe;
> >>> session->user.remove = hidp_session_remove;
> >>> + INIT_LIST_HEAD(&session->user.list);
> >>> session->ctrl_sock = ctrl_sock;
> >>> session->intr_sock = intr_sock;
> >>> skb_queue_head_init(&session->ctrl_transmit);
> >>>
> >>> Could this be fixing it for you as well?
> >>>
> >> I will check this when I am at home in the
> >> afternoon.
> >>
> >
> > The patch works for me too.
> >
> Ok, this was a little bit hasty!
> I now see the following additional problems:
>
> - System freeze on resume (occures always).
> - System freeze on shutdown (occures sometimes)
> - System freeze when BT-mouse is connecting (occures sometimes).
>
> Then I can't do anything except power off.
>
> This happens only if Bluetooth AND BT-mouse is activated.

OK, what happens if you just revert only list_del patch?

2015-06-29 09:00:28

by Jörg Otte

[permalink] [raw]
Subject: Re: [4.1.0-07254-gc13c810] Regression: Bluetooth not working.

2015-06-28 18:09 GMT+02:00 Alexey Dobriyan <[email protected]>:
> On Sun, Jun 28, 2015 at 05:36:04PM +0200, Jörg Otte wrote:
>> 2015-06-26 16:28 GMT+02:00 Jörg Otte <[email protected]>:
>> > 2015-06-26 12:03 GMT+02:00 Jörg Otte <[email protected]>:
>> >> 2015-06-26 11:37 GMT+02:00 Marcel Holtmann <[email protected]>:
>> >>> Hi Joerg,
>> >>>
>> >>>> Bluetooth is inoperable in current Linus tree and the
>> >>>> first bad commit is:
>> >>>>
>> >>>> 835a6a2f8603237a3e6cded5a6765090ecb06ea5 is the first bad commit
>> >>>> commit 835a6a2f8603237a3e6cded5a6765090ecb06ea5
>> >>>> Author: Alexey Dobriyan <[email protected]>
>> >>>> Date: Wed Jun 10 20:28:33 2015 +0300
>> >>>>
>> >>>> Bluetooth: Stop sabotaging list poisoning
>> >>>>
>> >>>> list_del() poisons pointers with special values, no need to overwrite them.
>> >>>>
>> >>>> Signed-off-by: Alexey Dobriyan <[email protected]>
>> >>>> Signed-off-by: Marcel Holtmann <[email protected]>
>> >>>>
>> >>>> My BT adapter is an intel 8087:07da
>> >>>> I reverted that commit and this fixed the problem for me.
>> >>>
>> >>> today we had a patch from Tedd fixing the list initialization in the HIDP code.
>> >>>
>> >>> diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c
>> >>> index 9070dfd6b4ad..f1a117f8cad2 100644
>> >>> --- a/net/bluetooth/hidp/core.c
>> >>> +++ b/net/bluetooth/hidp/core.c
>> >>> @@ -915,6 +915,7 @@ static int hidp_session_new(struct hidp_session **out, const bdaddr_t *bdaddr,
>> >>> session->conn = l2cap_conn_get(conn);
>> >>> session->user.probe = hidp_session_probe;
>> >>> session->user.remove = hidp_session_remove;
>> >>> + INIT_LIST_HEAD(&session->user.list);
>> >>> session->ctrl_sock = ctrl_sock;
>> >>> session->intr_sock = intr_sock;
>> >>> skb_queue_head_init(&session->ctrl_transmit);
>> >>>
>> >>> Could this be fixing it for you as well?
>> >>>
>> >> I will check this when I am at home in the
>> >> afternoon.
>> >>
>> >
>> > The patch works for me too.
>> >
>> Ok, this was a little bit hasty!
>> I now see the following additional problems:
>>
>> - System freeze on resume (occures always).
>> - System freeze on shutdown (occures sometimes)
>> - System freeze when BT-mouse is connecting (occures sometimes).
>>
>> Then I can't do anything except power off.
>>
>> This happens only if Bluetooth AND BT-mouse is activated.
>
> OK, what happens if you just revert only list_del patch?

I have applied this patch:

diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c
index 9070dfd6b4ad..f1a117f8cad2 100644
--- a/net/bluetooth/hidp/core.c
+++ b/net/bluetooth/hidp/core.c
@@ -915,6 +915,7 @@ static int hidp_session_new(struct hidp_session
**out, const bdaddr_t *bdaddr,
session->conn = l2cap_conn_get(conn);
session->user.probe = hidp_session_probe;
session->user.remove = hidp_session_remove;
+ INIT_LIST_HEAD(&session->user.list);
session->ctrl_sock = ctrl_sock;
session->intr_sock = intr_sock;
skb_queue_head_init(&session->ctrl_transmit);

without this patch bluetooth doesn't work at all for me.

Thanks, Jörg

2015-06-29 10:30:54

by Alexey Dobriyan

[permalink] [raw]
Subject: Re: [4.1.0-07254-gc13c810] Regression: Bluetooth not working.

On Mon, Jun 29, 2015 at 12:00 PM, Jörg Otte <[email protected]> wrote:
> 2015-06-28 18:09 GMT+02:00 Alexey Dobriyan <[email protected]>:
>> On Sun, Jun 28, 2015 at 05:36:04PM +0200, Jörg Otte wrote:
>>> 2015-06-26 16:28 GMT+02:00 Jörg Otte <[email protected]>:
>>> > 2015-06-26 12:03 GMT+02:00 Jörg Otte <[email protected]>:
>>> >> 2015-06-26 11:37 GMT+02:00 Marcel Holtmann <[email protected]>:
>>> >>> Hi Joerg,
>>> >>>
>>> >>>> Bluetooth is inoperable in current Linus tree and the
>>> >>>> first bad commit is:
>>> >>>>
>>> >>>> 835a6a2f8603237a3e6cded5a6765090ecb06ea5 is the first bad commit
>>> >>>> commit 835a6a2f8603237a3e6cded5a6765090ecb06ea5
>>> >>>> Author: Alexey Dobriyan <[email protected]>
>>> >>>> Date: Wed Jun 10 20:28:33 2015 +0300
>>> >>>>
>>> >>>> Bluetooth: Stop sabotaging list poisoning
>>> >>>>
>>> >>>> list_del() poisons pointers with special values, no need to overwrite them.
>>> >>>>
>>> >>>> Signed-off-by: Alexey Dobriyan <[email protected]>
>>> >>>> Signed-off-by: Marcel Holtmann <[email protected]>
>>> >>>>
>>> >>>> My BT adapter is an intel 8087:07da
>>> >>>> I reverted that commit and this fixed the problem for me.
>>> >>>
>>> >>> today we had a patch from Tedd fixing the list initialization in the HIDP code.
>>> >>>
>>> >>> diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c
>>> >>> index 9070dfd6b4ad..f1a117f8cad2 100644
>>> >>> --- a/net/bluetooth/hidp/core.c
>>> >>> +++ b/net/bluetooth/hidp/core.c
>>> >>> @@ -915,6 +915,7 @@ static int hidp_session_new(struct hidp_session **out, const bdaddr_t *bdaddr,
>>> >>> session->conn = l2cap_conn_get(conn);
>>> >>> session->user.probe = hidp_session_probe;
>>> >>> session->user.remove = hidp_session_remove;
>>> >>> + INIT_LIST_HEAD(&session->user.list);
>>> >>> session->ctrl_sock = ctrl_sock;
>>> >>> session->intr_sock = intr_sock;
>>> >>> skb_queue_head_init(&session->ctrl_transmit);
>>> >>>
>>> >>> Could this be fixing it for you as well?
>>> >>>
>>> >> I will check this when I am at home in the
>>> >> afternoon.
>>> >>
>>> >
>>> > The patch works for me too.
>>> >
>>> Ok, this was a little bit hasty!
>>> I now see the following additional problems:
>>>
>>> - System freeze on resume (occures always).
>>> - System freeze on shutdown (occures sometimes)
>>> - System freeze when BT-mouse is connecting (occures sometimes).
>>>
>>> Then I can't do anything except power off.
>>>
>>> This happens only if Bluetooth AND BT-mouse is activated.
>>
>> OK, what happens if you just revert only list_del patch?
>
> I have applied this patch:
>
> diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c
> index 9070dfd6b4ad..f1a117f8cad2 100644
> --- a/net/bluetooth/hidp/core.c
> +++ b/net/bluetooth/hidp/core.c
> @@ -915,6 +915,7 @@ static int hidp_session_new(struct hidp_session
> **out, const bdaddr_t *bdaddr,
> session->conn = l2cap_conn_get(conn);
> session->user.probe = hidp_session_probe;
> session->user.remove = hidp_session_remove;
> + INIT_LIST_HEAD(&session->user.list);
> session->ctrl_sock = ctrl_sock;
> session->intr_sock = intr_sock;
> skb_queue_head_init(&session->ctrl_transmit);
>
> without this patch bluetooth doesn't work at all for me.

Sure.

Please drop this patch, and do

git-revert 835a6a2f8603237a3e6cded5a6765090ecb06ea5

Maybe it's some other changes causing hangs.

2015-06-29 14:37:44

by Jörg Otte

[permalink] [raw]
Subject: Re: [4.1.0-07254-gc13c810] Regression: Bluetooth not working.

2015-06-29 12:30 GMT+02:00 Alexey Dobriyan <[email protected]>:
> On Mon, Jun 29, 2015 at 12:00 PM, Jörg Otte <[email protected]> wrote:
>> 2015-06-28 18:09 GMT+02:00 Alexey Dobriyan <[email protected]>:
>>> On Sun, Jun 28, 2015 at 05:36:04PM +0200, Jörg Otte wrote:
>>>> 2015-06-26 16:28 GMT+02:00 Jörg Otte <[email protected]>:
>>>> > 2015-06-26 12:03 GMT+02:00 Jörg Otte <[email protected]>:
>>>> >> 2015-06-26 11:37 GMT+02:00 Marcel Holtmann <[email protected]>:
>>>> >>> Hi Joerg,
>>>> >>>
>>>> >>>> Bluetooth is inoperable in current Linus tree and the
>>>> >>>> first bad commit is:
>>>> >>>>
>>>> >>>> 835a6a2f8603237a3e6cded5a6765090ecb06ea5 is the first bad commit
>>>> >>>> commit 835a6a2f8603237a3e6cded5a6765090ecb06ea5
>>>> >>>> Author: Alexey Dobriyan <[email protected]>
>>>> >>>> Date: Wed Jun 10 20:28:33 2015 +0300
>>>> >>>>
>>>> >>>> Bluetooth: Stop sabotaging list poisoning
>>>> >>>>
>>>> >>>> list_del() poisons pointers with special values, no need to overwrite them.
>>>> >>>>
>>>> >>>> Signed-off-by: Alexey Dobriyan <[email protected]>
>>>> >>>> Signed-off-by: Marcel Holtmann <[email protected]>
>>>> >>>>
>>>> >>>> My BT adapter is an intel 8087:07da
>>>> >>>> I reverted that commit and this fixed the problem for me.
>>>> >>>
>>>> >>> today we had a patch from Tedd fixing the list initialization in the HIDP code.
>>>> >>>
>>>> >>> diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c
>>>> >>> index 9070dfd6b4ad..f1a117f8cad2 100644
>>>> >>> --- a/net/bluetooth/hidp/core.c
>>>> >>> +++ b/net/bluetooth/hidp/core.c
>>>> >>> @@ -915,6 +915,7 @@ static int hidp_session_new(struct hidp_session **out, const bdaddr_t *bdaddr,
>>>> >>> session->conn = l2cap_conn_get(conn);
>>>> >>> session->user.probe = hidp_session_probe;
>>>> >>> session->user.remove = hidp_session_remove;
>>>> >>> + INIT_LIST_HEAD(&session->user.list);
>>>> >>> session->ctrl_sock = ctrl_sock;
>>>> >>> session->intr_sock = intr_sock;
>>>> >>> skb_queue_head_init(&session->ctrl_transmit);
>>>> >>>
>>>> >>> Could this be fixing it for you as well?
>>>> >>>
>>>> >> I will check this when I am at home in the
>>>> >> afternoon.
>>>> >>
>>>> >
>>>> > The patch works for me too.
>>>> >
>>>> Ok, this was a little bit hasty!
>>>> I now see the following additional problems:
>>>>
>>>> - System freeze on resume (occures always).
>>>> - System freeze on shutdown (occures sometimes)
>>>> - System freeze when BT-mouse is connecting (occures sometimes).
>>>>
>>>> Then I can't do anything except power off.
>>>>
>>>> This happens only if Bluetooth AND BT-mouse is activated.
>>>
>>> OK, what happens if you just revert only list_del patch?
>>
>> I have applied this patch:
>>
>> diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c
>> index 9070dfd6b4ad..f1a117f8cad2 100644
>> --- a/net/bluetooth/hidp/core.c
>> +++ b/net/bluetooth/hidp/core.c
>> @@ -915,6 +915,7 @@ static int hidp_session_new(struct hidp_session
>> **out, const bdaddr_t *bdaddr,
>> session->conn = l2cap_conn_get(conn);
>> session->user.probe = hidp_session_probe;
>> session->user.remove = hidp_session_remove;
>> + INIT_LIST_HEAD(&session->user.list);
>> session->ctrl_sock = ctrl_sock;
>> session->intr_sock = intr_sock;
>> skb_queue_head_init(&session->ctrl_transmit);
>>
>> without this patch bluetooth doesn't work at all for me.
>
> Sure.
>
> Please drop this patch, and do
>
> git-revert 835a6a2f8603237a3e6cded5a6765090ecb06ea5
>
> Maybe it's some other changes causing hangs.

Looks good so far. The system freeze on resume is gone.

Thanks, Jörg

2015-06-29 21:13:57

by An, Tedd

[permalink] [raw]
Subject: Re: [4.1.0-07254-gc13c810] Regression: Bluetooth not working.

Hi Jorg

On Mon, 29 Jun 2015 16:37:32 +0200
Jörg Otte <[email protected]> wrote:

> 2015-06-29 12:30 GMT+02:00 Alexey Dobriyan <[email protected]>:
> > On Mon, Jun 29, 2015 at 12:00 PM, Jörg Otte <[email protected]> wrote:
> >> 2015-06-28 18:09 GMT+02:00 Alexey Dobriyan <[email protected]>:
> >>> On Sun, Jun 28, 2015 at 05:36:04PM +0200, Jörg Otte wrote:
> >>>> 2015-06-26 16:28 GMT+02:00 Jörg Otte <[email protected]>:
> >>>> > 2015-06-26 12:03 GMT+02:00 Jörg Otte <[email protected]>:
> >>>> >> 2015-06-26 11:37 GMT+02:00 Marcel Holtmann <[email protected]>:
> >>>> >>> Hi Joerg,
> >>>> >>>
> >>>> >>>> Bluetooth is inoperable in current Linus tree and the
> >>>> >>>> first bad commit is:
> >>>> >>>>
> >>>> >>>> 835a6a2f8603237a3e6cded5a6765090ecb06ea5 is the first bad commit
> >>>> >>>> commit 835a6a2f8603237a3e6cded5a6765090ecb06ea5
> >>>> >>>> Author: Alexey Dobriyan <[email protected]>
> >>>> >>>> Date: Wed Jun 10 20:28:33 2015 +0300
> >>>> >>>>
> >>>> >>>> Bluetooth: Stop sabotaging list poisoning
> >>>> >>>>
> >>>> >>>> list_del() poisons pointers with special values, no need to overwrite them.
> >>>> >>>>
> >>>> >>>> Signed-off-by: Alexey Dobriyan <[email protected]>
> >>>> >>>> Signed-off-by: Marcel Holtmann <[email protected]>
> >>>> >>>>
> >>>> >>>> My BT adapter is an intel 8087:07da
> >>>> >>>> I reverted that commit and this fixed the problem for me.
> >>>> >>>
> >>>> >>> today we had a patch from Tedd fixing the list initialization in the HIDP code.
> >>>> >>>
> >>>> >>> diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c
> >>>> >>> index 9070dfd6b4ad..f1a117f8cad2 100644
> >>>> >>> --- a/net/bluetooth/hidp/core.c
> >>>> >>> +++ b/net/bluetooth/hidp/core.c
> >>>> >>> @@ -915,6 +915,7 @@ static int hidp_session_new(struct hidp_session **out, const bdaddr_t *bdaddr,
> >>>> >>> session->conn = l2cap_conn_get(conn);
> >>>> >>> session->user.probe = hidp_session_probe;
> >>>> >>> session->user.remove = hidp_session_remove;
> >>>> >>> + INIT_LIST_HEAD(&session->user.list);
> >>>> >>> session->ctrl_sock = ctrl_sock;
> >>>> >>> session->intr_sock = intr_sock;
> >>>> >>> skb_queue_head_init(&session->ctrl_transmit);
> >>>> >>>
> >>>> >>> Could this be fixing it for you as well?
> >>>> >>>
> >>>> >> I will check this when I am at home in the
> >>>> >> afternoon.
> >>>> >>
> >>>> >
> >>>> > The patch works for me too.
> >>>> >
> >>>> Ok, this was a little bit hasty!
> >>>> I now see the following additional problems:
> >>>>
> >>>> - System freeze on resume (occures always).
> >>>> - System freeze on shutdown (occures sometimes)
> >>>> - System freeze when BT-mouse is connecting (occures sometimes).
> >>>>
> >>>> Then I can't do anything except power off.
> >>>>
> >>>> This happens only if Bluetooth AND BT-mouse is activated.
> >>>
> >>> OK, what happens if you just revert only list_del patch?
> >>
> >> I have applied this patch:
> >>
> >> diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c
> >> index 9070dfd6b4ad..f1a117f8cad2 100644
> >> --- a/net/bluetooth/hidp/core.c
> >> +++ b/net/bluetooth/hidp/core.c
> >> @@ -915,6 +915,7 @@ static int hidp_session_new(struct hidp_session
> >> **out, const bdaddr_t *bdaddr,
> >> session->conn = l2cap_conn_get(conn);
> >> session->user.probe = hidp_session_probe;
> >> session->user.remove = hidp_session_remove;
> >> + INIT_LIST_HEAD(&session->user.list);
> >> session->ctrl_sock = ctrl_sock;
> >> session->intr_sock = intr_sock;
> >> skb_queue_head_init(&session->ctrl_transmit);
> >>
> >> without this patch bluetooth doesn't work at all for me.
> >
> > Sure.
> >
> > Please drop this patch, and do
> >
> > git-revert 835a6a2f8603237a3e6cded5a6765090ecb06ea5
> >
> > Maybe it's some other changes causing hangs.
>
> Looks good so far. The system freeze on resume is gone.
>
> Thanks, Jörg

Regarding the system hang issue, it looks like the problem is caused by the list_del().
According to the list.h, this macro puts the entry into invalid state and it causes the device hang in the l2cap_core.c

/**
* list_del - deletes entry from list.
* @entry: the element to delete from the list.
* Note: list_empty() on entry does not return true after this, the entry is
* in an undefined state.
*/

So, one way to fix this issue is using the list_del_init() instead.

Can you try this patch to see if it resolve the issue? No need to revert any patch.
I ran a quick test with a different scenarios and it looks good to me so far.

diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
index 51594fb..45fffa4 100644
--- a/net/bluetooth/l2cap_core.c
+++ b/net/bluetooth/l2cap_core.c
@@ -1634,7 +1634,7 @@ void l2cap_unregister_user(struct l2cap_conn *conn, struct l2cap_user *user)
if (list_empty(&user->list))
goto out_unlock;

- list_del(&user->list);
+ list_del_init(&user->list);
user->remove(conn, user);

out_unlock:
@@ -1648,7 +1648,7 @@ static void l2cap_unregister_all_users(struct l2cap_conn *conn)

while (!list_empty(&conn->users)) {
user = list_first_entry(&conn->users, struct l2cap_user, list);
- list_del(&user->list);
+ list_del_init(&user->list);
user->remove(conn, user);
}
}

Regards,
Tedd Ho-Jeong An

2015-06-30 14:58:25

by Jörg Otte

[permalink] [raw]
Subject: Re: [4.1.0-07254-gc13c810] Regression: Bluetooth not working.

2015-06-29 23:13 GMT+02:00 Tedd Ho-Jeong An <[email protected]>:
> Hi Jorg
>
> On Mon, 29 Jun 2015 16:37:32 +0200
> Jörg Otte <[email protected]> wrote:
>
>> 2015-06-29 12:30 GMT+02:00 Alexey Dobriyan <[email protected]>:
>> > On Mon, Jun 29, 2015 at 12:00 PM, Jörg Otte <[email protected]> wrote:
>> >> 2015-06-28 18:09 GMT+02:00 Alexey Dobriyan <[email protected]>:
>> >>> On Sun, Jun 28, 2015 at 05:36:04PM +0200, Jörg Otte wrote:
>> >>>> 2015-06-26 16:28 GMT+02:00 Jörg Otte <[email protected]>:
>> >>>> > 2015-06-26 12:03 GMT+02:00 Jörg Otte <[email protected]>:
>> >>>> >> 2015-06-26 11:37 GMT+02:00 Marcel Holtmann <[email protected]>:
>> >>>> >>> Hi Joerg,
>> >>>> >>>
>> >>>> >>>> Bluetooth is inoperable in current Linus tree and the
>> >>>> >>>> first bad commit is:
>> >>>> >>>>
>> >>>> >>>> 835a6a2f8603237a3e6cded5a6765090ecb06ea5 is the first bad commit
>> >>>> >>>> commit 835a6a2f8603237a3e6cded5a6765090ecb06ea5
>> >>>> >>>> Author: Alexey Dobriyan <[email protected]>
>> >>>> >>>> Date: Wed Jun 10 20:28:33 2015 +0300
>> >>>> >>>>
>> >>>> >>>> Bluetooth: Stop sabotaging list poisoning
>> >>>> >>>>
>> >>>> >>>> list_del() poisons pointers with special values, no need to overwrite them.
>> >>>> >>>>
>> >>>> >>>> Signed-off-by: Alexey Dobriyan <[email protected]>
>> >>>> >>>> Signed-off-by: Marcel Holtmann <[email protected]>
>> >>>> >>>>
>> >>>> >>>> My BT adapter is an intel 8087:07da
>> >>>> >>>> I reverted that commit and this fixed the problem for me.
>> >>>> >>>
>> >>>> >>> today we had a patch from Tedd fixing the list initialization in the HIDP code.
>> >>>> >>>
>> >>>> >>> diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c
>> >>>> >>> index 9070dfd6b4ad..f1a117f8cad2 100644
>> >>>> >>> --- a/net/bluetooth/hidp/core.c
>> >>>> >>> +++ b/net/bluetooth/hidp/core.c
>> >>>> >>> @@ -915,6 +915,7 @@ static int hidp_session_new(struct hidp_session **out, const bdaddr_t *bdaddr,
>> >>>> >>> session->conn = l2cap_conn_get(conn);
>> >>>> >>> session->user.probe = hidp_session_probe;
>> >>>> >>> session->user.remove = hidp_session_remove;
>> >>>> >>> + INIT_LIST_HEAD(&session->user.list);
>> >>>> >>> session->ctrl_sock = ctrl_sock;
>> >>>> >>> session->intr_sock = intr_sock;
>> >>>> >>> skb_queue_head_init(&session->ctrl_transmit);
>> >>>> >>>
>> >>>> >>> Could this be fixing it for you as well?
>> >>>> >>>
>> >>>> >> I will check this when I am at home in the
>> >>>> >> afternoon.
>> >>>> >>
>> >>>> >
>> >>>> > The patch works for me too.
>> >>>> >
>> >>>> Ok, this was a little bit hasty!
>> >>>> I now see the following additional problems:
>> >>>>
>> >>>> - System freeze on resume (occures always).
>> >>>> - System freeze on shutdown (occures sometimes)
>> >>>> - System freeze when BT-mouse is connecting (occures sometimes).
>> >>>>
>> >>>> Then I can't do anything except power off.
>> >>>>
>> >>>> This happens only if Bluetooth AND BT-mouse is activated.
>> >>>
>> >>> OK, what happens if you just revert only list_del patch?
>> >>
>> >> I have applied this patch:
>> >>
>> >> diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c
>> >> index 9070dfd6b4ad..f1a117f8cad2 100644
>> >> --- a/net/bluetooth/hidp/core.c
>> >> +++ b/net/bluetooth/hidp/core.c
>> >> @@ -915,6 +915,7 @@ static int hidp_session_new(struct hidp_session
>> >> **out, const bdaddr_t *bdaddr,
>> >> session->conn = l2cap_conn_get(conn);
>> >> session->user.probe = hidp_session_probe;
>> >> session->user.remove = hidp_session_remove;
>> >> + INIT_LIST_HEAD(&session->user.list);
>> >> session->ctrl_sock = ctrl_sock;
>> >> session->intr_sock = intr_sock;
>> >> skb_queue_head_init(&session->ctrl_transmit);
>> >>
>> >> without this patch bluetooth doesn't work at all for me.
>> >
>> > Sure.
>> >
>> > Please drop this patch, and do
>> >
>> > git-revert 835a6a2f8603237a3e6cded5a6765090ecb06ea5
>> >
>> > Maybe it's some other changes causing hangs.
>>
>> Looks good so far. The system freeze on resume is gone.
>>
>> Thanks, Jörg
>
> Regarding the system hang issue, it looks like the problem is caused by the list_del().
> According to the list.h, this macro puts the entry into invalid state and it causes the device hang in the l2cap_core.c
>
> /**
> * list_del - deletes entry from list.
> * @entry: the element to delete from the list.
> * Note: list_empty() on entry does not return true after this, the entry is
> * in an undefined state.
> */
>
> So, one way to fix this issue is using the list_del_init() instead.
>
> Can you try this patch to see if it resolve the issue? No need to revert any patch.
> I ran a quick test with a different scenarios and it looks good to me so far.
>
> diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
> index 51594fb..45fffa4 100644
> --- a/net/bluetooth/l2cap_core.c
> +++ b/net/bluetooth/l2cap_core.c
> @@ -1634,7 +1634,7 @@ void l2cap_unregister_user(struct l2cap_conn *conn, struct l2cap_user *user)
> if (list_empty(&user->list))
> goto out_unlock;
>
> - list_del(&user->list);
> + list_del_init(&user->list);
> user->remove(conn, user);
>
> out_unlock:
> @@ -1648,7 +1648,7 @@ static void l2cap_unregister_all_users(struct l2cap_conn *conn)
>
> while (!list_empty(&conn->users)) {
> user = list_first_entry(&conn->users, struct l2cap_user, list);
> - list_del(&user->list);
> + list_del_init(&user->list);
> user->remove(conn, user);
> }
> }
>
> Regards,
> Tedd Ho-Jeong An

I now have both patche applied and no revert. Looks good so far.

Thanks, Jörg

2015-06-30 18:47:35

by An, Tedd

[permalink] [raw]
Subject: Re: [4.1.0-07254-gc13c810] Regression: Bluetooth not working.

Hi Jörg

On Tue, 30 Jun 2015 16:58:13 +0200
Jörg Otte <[email protected]> wrote:

> > Regarding the system hang issue, it looks like the problem is caused by the list_del().
> > According to the list.h, this macro puts the entry into invalid state and it causes the device hang in the l2cap_core.c
> >
> > /**
> > * list_del - deletes entry from list.
> > * @entry: the element to delete from the list.
> > * Note: list_empty() on entry does not return true after this, the entry is
> > * in an undefined state.
> > */
> >
> > So, one way to fix this issue is using the list_del_init() instead.
> >
> > Can you try this patch to see if it resolve the issue? No need to revert any patch.
> > I ran a quick test with a different scenarios and it looks good to me so far.
> >
> > diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
> > index 51594fb..45fffa4 100644
> > --- a/net/bluetooth/l2cap_core.c
> > +++ b/net/bluetooth/l2cap_core.c
> > @@ -1634,7 +1634,7 @@ void l2cap_unregister_user(struct l2cap_conn *conn, struct l2cap_user *user)
> > if (list_empty(&user->list))
> > goto out_unlock;
> >
> > - list_del(&user->list);
> > + list_del_init(&user->list);
> > user->remove(conn, user);
> >
> > out_unlock:
> > @@ -1648,7 +1648,7 @@ static void l2cap_unregister_all_users(struct l2cap_conn *conn)
> >
> > while (!list_empty(&conn->users)) {
> > user = list_first_entry(&conn->users, struct l2cap_user, list);
> > - list_del(&user->list);
> > + list_del_init(&user->list);
> > user->remove(conn, user);
> > }
> > }
> >
> > Regards,
> > Tedd Ho-Jeong An
>
> I now have both patche applied and no revert. Looks good so far.
>
> Thanks, Jörg

Thanks for testing the patch. I submitted the patch just in case.
Now, I am tossing the ball to Marcel. :)

Regards,
Tedd