2008-04-12 15:48:59

by Carlos Corbacho

[permalink] [raw]
Subject: [PATCH] rfkill: Fix device type check when toggling states

rfkill_switch_all() is supposed to only switch all the interfaces of a
given type, but does not actually do this; instead, it just switches
everything currently in the same state.

Add the necessary type check in.

(This fixes a bug I've been seeing while developing an rfkill laptop
driver, with both bluetooth and wireless simultaneously changing state
after only pressing either KEY_WLAN or KEY_BLUETOOTH).

Signed-off-by: Carlos Corbacho <[email protected]>
---

net/rfkill/rfkill.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)


diff --git a/net/rfkill/rfkill.c b/net/rfkill/rfkill.c
index 140a0a8..4e10a95 100644
--- a/net/rfkill/rfkill.c
+++ b/net/rfkill/rfkill.c
@@ -92,7 +92,7 @@ void rfkill_switch_all(enum rfkill_type type, enum rfkill_state state)
rfkill_states[type] = state;

list_for_each_entry(rfkill, &rfkill_list, node) {
- if (!rfkill->user_claim)
+ if ((!rfkill->user_claim) && (rfkill->type == type))
rfkill_toggle_radio(rfkill, state);
}




2008-04-14 21:00:45

by Ivo Van Doorn

[permalink] [raw]
Subject: Re: [PATCH] rfkill: Fix device type check when toggling states

On Saturday 12 April 2008, Carlos Corbacho wrote:
> rfkill_switch_all() is supposed to only switch all the interfaces of a
> given type, but does not actually do this; instead, it just switches
> everything currently in the same state.
>
> Add the necessary type check in.
>
> (This fixes a bug I've been seeing while developing an rfkill laptop
> driver, with both bluetooth and wireless simultaneously changing state
> after only pressing either KEY_WLAN or KEY_BLUETOOTH).
>
> Signed-off-by: Carlos Corbacho <[email protected]>

Good catch.
John, could you push this to 2.6.25 as well? Thanks.

Signed-off-by: Ivo van Doorn <[email protected]>

> ---
>
> net/rfkill/rfkill.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
>
> diff --git a/net/rfkill/rfkill.c b/net/rfkill/rfkill.c
> index 140a0a8..4e10a95 100644
> --- a/net/rfkill/rfkill.c
> +++ b/net/rfkill/rfkill.c
> @@ -92,7 +92,7 @@ void rfkill_switch_all(enum rfkill_type type, enum rfkill_state state)
> rfkill_states[type] = state;
>
> list_for_each_entry(rfkill, &rfkill_list, node) {
> - if (!rfkill->user_claim)
> + if ((!rfkill->user_claim) && (rfkill->type == type))
> rfkill_toggle_radio(rfkill, state);
> }
>
>
>