diff mbox series

[4.19] mt76x0: fix remove_interface

Message ID 1535970381-5526-1-git-send-email-sgruszka@redhat.com (mailing list archive)
State Accepted
Commit 3341ba9f0f2637a51738ef5de5114e13a1cd3eca
Delegated to: Kalle Valo
Headers show
Series [4.19] mt76x0: fix remove_interface | expand

Commit Message

Stanislaw Gruszka Sept. 3, 2018, 10:26 a.m. UTC
We wrongly use wcid_mask instead of vif_mask

Fixes: 95e444098a7b ("mt76x0: main file")
Reported-and-tested-by: Sid Hayn <sidhayn@gmail.com>
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
---
 drivers/net/wireless/mediatek/mt76/mt76x0/main.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

Comments

Kalle Valo Sept. 3, 2018, 12:48 p.m. UTC | #1
Stanislaw Gruszka <sgruszka@redhat.com> writes:

> We wrongly use wcid_mask instead of vif_mask
>
> Fixes: 95e444098a7b ("mt76x0: main file")
> Reported-and-tested-by: Sid Hayn <sidhayn@gmail.com>
> Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>

For bug fixes please always try to describe the bug and symptoms. I can
add it this time. From the other thread I saw that 'ifconfig up' failed
like this:

SIOCSIFFLAGS: No space left on device

But in what cases did that happen? (I assume not always)
Sid Hayn Sept. 3, 2018, 3:30 p.m. UTC | #2
Best I can say is that it seemed to happen after a failed connection.
It would connect and disconnect a few times and work fine, but if it
failed to connect for any reason (mostly mismatched settings between
AP and wpa_supplicant.conf) then the bug would occur. So,
wpa_supplicant would up the interface, try to connect, fail, down the
interface and exit, then the next loop of my script (with a different
conf file) would start and wpa_supplicant would be unable to up the
interface.

Hope that made any sense, because it didn't to me :-)

-Zero
On Mon, Sep 3, 2018 at 12:48 PM Kalle Valo <kvalo@codeaurora.org> wrote:
>
> Stanislaw Gruszka <sgruszka@redhat.com> writes:
>
> > We wrongly use wcid_mask instead of vif_mask
> >
> > Fixes: 95e444098a7b ("mt76x0: main file")
> > Reported-and-tested-by: Sid Hayn <sidhayn@gmail.com>
> > Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
>
> For bug fixes please always try to describe the bug and symptoms. I can
> add it this time. From the other thread I saw that 'ifconfig up' failed
> like this:
>
> SIOCSIFFLAGS: No space left on device
>
> But in what cases did that happen? (I assume not always)
>
> --
> Kalle Valo
Stanislaw Gruszka Sept. 4, 2018, 10:23 a.m. UTC | #3
On Mon, Sep 03, 2018 at 09:36:37AM -0400, Sid Hayn wrote:
> Best I can say is that it seemed to happen after a failed connection.  It
> would connect and disconnect a few times and work fine, but if it failed to
> connect for any reason (mostly mismatched settings between AP and
> wpa_supplicant.conf) then the bug would occur. So, wpa_supplicant would up
> the interface, try to connect, fail, down the interface and exit, then the
> next loop of my script (with a different conf file) would start and
> wpa_supplicant would be unable to up the interface.
<snip>
> > For bug fixes please always try to describe the bug and symptoms. I can
> > add it this time. From the other thread I saw that 'ifconfig up' failed
> > like this:
> >
> > SIOCSIFFLAGS: No space left on device
> >
> > But in what cases did that happen? (I assume not always)

Problem will happen when we remove interface more than 8 times.
I'm not sure at how this can be triggerd execpt by doing:

iw dev <devname> interface add <name> type <type>
iw dev <name> del

but looks somehow this is triggerd by Sid scripts
by just by using wpa_supplicant and ifconfig. 

Regards
Stanislaw
Sid Hayn Sept. 4, 2018, 2:16 p.m. UTC | #4
confirmed, I didn't intentionally remove the interface, but I do see
something about the interface being removed in wpa_supplicant output.

Thanks,
Zero
On Tue, Sep 4, 2018 at 10:23 AM Stanislaw Gruszka <sgruszka@redhat.com> wrote:
>
> On Mon, Sep 03, 2018 at 09:36:37AM -0400, Sid Hayn wrote:
> > Best I can say is that it seemed to happen after a failed connection.  It
> > would connect and disconnect a few times and work fine, but if it failed to
> > connect for any reason (mostly mismatched settings between AP and
> > wpa_supplicant.conf) then the bug would occur. So, wpa_supplicant would up
> > the interface, try to connect, fail, down the interface and exit, then the
> > next loop of my script (with a different conf file) would start and
> > wpa_supplicant would be unable to up the interface.
> <snip>
> > > For bug fixes please always try to describe the bug and symptoms. I can
> > > add it this time. From the other thread I saw that 'ifconfig up' failed
> > > like this:
> > >
> > > SIOCSIFFLAGS: No space left on device
> > >
> > > But in what cases did that happen? (I assume not always)
>
> Problem will happen when we remove interface more than 8 times.
> I'm not sure at how this can be triggerd execpt by doing:
>
> iw dev <devname> interface add <name> type <type>
> iw dev <name> del
>
> but looks somehow this is triggerd by Sid scripts
> by just by using wpa_supplicant and ifconfig.
>
> Regards
> Stanislaw
Kalle Valo Sept. 11, 2018, 2:31 p.m. UTC | #5
Stanislaw Gruszka <sgruszka@redhat.com> writes:

> On Mon, Sep 03, 2018 at 09:36:37AM -0400, Sid Hayn wrote:
>> Best I can say is that it seemed to happen after a failed connection.  It
>> would connect and disconnect a few times and work fine, but if it failed to
>> connect for any reason (mostly mismatched settings between AP and
>> wpa_supplicant.conf) then the bug would occur. So, wpa_supplicant would up
>> the interface, try to connect, fail, down the interface and exit, then the
>> next loop of my script (with a different conf file) would start and
>> wpa_supplicant would be unable to up the interface.
> <snip>
>> > For bug fixes please always try to describe the bug and symptoms. I can
>> > add it this time. From the other thread I saw that 'ifconfig up' failed
>> > like this:
>> >
>> > SIOCSIFFLAGS: No space left on device
>> >
>> > But in what cases did that happen? (I assume not always)
>
> Problem will happen when we remove interface more than 8 times.
> I'm not sure at how this can be triggerd execpt by doing:
>
> iw dev <devname> interface add <name> type <type>
> iw dev <name> del
>
> but looks somehow this is triggerd by Sid scripts
> by just by using wpa_supplicant and ifconfig. 

Good, thanks. So I'll use this as the commit message:

"We wrongly use wcid_mask instead of vif_mask. This creates problems
when the interface is removed more than 8 times, for example with iw:

iw dev <devname> interface add <name> type <type>
iw dev <name> del

This caused 'ifconfig up' to fail with error:

SIOCSIFFLAGS: No space left on device"

Does that look good?
Kalle Valo Sept. 17, 2018, 2:11 p.m. UTC | #6
Stanislaw Gruszka <sgruszka@redhat.com> wrote:

> We wrongly use wcid_mask instead of vif_mask. This creates problems
> when the interface is removed more than 8 times, for example with iw:
> 
> iw dev <devname> interface add <name> type <type>
> iw dev <name> del
> 
> This caused 'ifconfig up' to fail with error:
> 
> SIOCSIFFLAGS: No space left on device
> 
> Fixes: 95e444098a7b ("mt76x0: main file")
> Reported-and-tested-by: Sid Hayn <sidhayn@gmail.com>
> Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>

Patch applied to wireless-drivers.git, thanks.

3341ba9f0f26 mt76x0: fix remove_interface
diff mbox series

Patch

diff --git a/drivers/net/wireless/mediatek/mt76/mt76x0/main.c b/drivers/net/wireless/mediatek/mt76/mt76x0/main.c
index cf6ffb1ba4a2..22bc9d368728 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x0/main.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x0/main.c
@@ -77,9 +77,8 @@  static void mt76x0_remove_interface(struct ieee80211_hw *hw,
 {
 	struct mt76x0_dev *dev = hw->priv;
 	struct mt76_vif *mvif = (struct mt76_vif *) vif->drv_priv;
-	unsigned int wcid = mvif->group_wcid.idx;
 
-	dev->wcid_mask[wcid / BITS_PER_LONG] &= ~BIT(wcid % BITS_PER_LONG);
+	dev->vif_mask &= ~BIT(mvif->idx);
 }
 
 static int mt76x0_config(struct ieee80211_hw *hw, u32 changed)