From: Rahul Rameshbabu <sergeantsagara@protonmail.com> To: "Kalle Valo" <kvalo@kernel.org>, "Larry Finger" <Larry.Finger@lwfinger.net>, "Michael Büsch" <m@bues.ch>, "Julian Calaby" <julian.calaby@gmail.com> Cc: linux-wireless@vger.kernel.org, b43-dev@lists.infradead.org, linux-kernel@vger.kernel.org, Rahul Rameshbabu <sergeantsagara@protonmail.com> Subject: [PATCH wireless v2 2/4] wifi: b43: Stop/wake correct queue in PIO Tx path when QoS is disabled Date: Sun, 31 Dec 2023 05:03:45 +0000 [thread overview] Message-ID: <20231231050300.122806-3-sergeantsagara@protonmail.com> (raw) In-Reply-To: <20231231050300.122806-1-sergeantsagara@protonmail.com> When QoS is disabled, the queue priority value will not map to the correct ieee80211 queue since there is only one queue. Stop/wake queue 0 when QoS is disabled to prevent trying to stop/wake a non-existent queue and failing to stop/wake the actual queue instantiated. Fixes: 5100d5ac81b9 ("b43: Add PIO support for PCMCIA devices") Signed-off-by: Rahul Rameshbabu <sergeantsagara@protonmail.com> --- Notes: Changes: v1->v2: - Refactored logic with helpers (suggested by Larry Finger <Larry.Finger@lwfinger.net>) Issue Details: When PIO support was first introduced to the b43 driver in commit 5100d5ac81b9 ("b43: Add PIO support for PCMCIA devices"), four queues were allocated for different QoS priorities for video, voice, best effort, and background. This was modelled after commit e6f5b934fba8 ("b43: Add QOS support"), which has the following issue. The core networking stack maps these priorities in the skb, and these mappings are noted in the ring's queue_prio member. When disabling QoS in the driver, the skb will still contain the mapping for the core stack while only one queue is actually considered active (the best effort queue). In the situation that QoS is disabled, b43 needs to pass 0 to ieee80211 queue functions since the number of queues is set to 1 in the struct ieee80211_hw queues member. drivers/net/wireless/broadcom/b43/pio.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/net/wireless/broadcom/b43/pio.c b/drivers/net/wireless/broadcom/b43/pio.c index 0cf70fdb60a6..e41f2f5b4c26 100644 --- a/drivers/net/wireless/broadcom/b43/pio.c +++ b/drivers/net/wireless/broadcom/b43/pio.c @@ -525,7 +525,7 @@ int b43_pio_tx(struct b43_wldev *dev, struct sk_buff *skb) if (total_len > (q->buffer_size - q->buffer_used)) { /* Not enough memory on the queue. */ err = -EBUSY; - ieee80211_stop_queue(dev->wl->hw, skb_get_queue_mapping(skb)); + b43_stop_queue(dev, skb_get_queue_mapping(skb)); q->stopped = true; goto out; } @@ -552,7 +552,7 @@ int b43_pio_tx(struct b43_wldev *dev, struct sk_buff *skb) if (((q->buffer_size - q->buffer_used) < roundup(2 + 2 + 6, 4)) || (q->free_packet_slots == 0)) { /* The queue is full. */ - ieee80211_stop_queue(dev->wl->hw, skb_get_queue_mapping(skb)); + b43_stop_queue(dev, skb_get_queue_mapping(skb)); q->stopped = true; } @@ -587,7 +587,7 @@ void b43_pio_handle_txstatus(struct b43_wldev *dev, list_add(&pack->list, &q->packets_list); if (q->stopped) { - ieee80211_wake_queue(dev->wl->hw, q->queue_prio); + b43_wake_queue(dev, q->queue_prio); q->stopped = false; } } -- 2.42.0
WARNING: multiple messages have this Message-ID (diff)
From: Rahul Rameshbabu <sergeantsagara@protonmail.com> To: "Kalle Valo" <kvalo@kernel.org>, "Larry Finger" <Larry.Finger@lwfinger.net>, "Michael Büsch" <m@bues.ch>, "Julian Calaby" <julian.calaby@gmail.com> Cc: linux-wireless@vger.kernel.org, b43-dev@lists.infradead.org, linux-kernel@vger.kernel.org, Rahul Rameshbabu <sergeantsagara@protonmail.com> Subject: [PATCH wireless v2 2/4] wifi: b43: Stop/wake correct queue in PIO Tx path when QoS is disabled Date: Sun, 31 Dec 2023 05:03:45 +0000 [thread overview] Message-ID: <20231231050300.122806-3-sergeantsagara@protonmail.com> (raw) In-Reply-To: <20231231050300.122806-1-sergeantsagara@protonmail.com> When QoS is disabled, the queue priority value will not map to the correct ieee80211 queue since there is only one queue. Stop/wake queue 0 when QoS is disabled to prevent trying to stop/wake a non-existent queue and failing to stop/wake the actual queue instantiated. Fixes: 5100d5ac81b9 ("b43: Add PIO support for PCMCIA devices") Signed-off-by: Rahul Rameshbabu <sergeantsagara@protonmail.com> --- Notes: Changes: v1->v2: - Refactored logic with helpers (suggested by Larry Finger <Larry.Finger@lwfinger.net>) Issue Details: When PIO support was first introduced to the b43 driver in commit 5100d5ac81b9 ("b43: Add PIO support for PCMCIA devices"), four queues were allocated for different QoS priorities for video, voice, best effort, and background. This was modelled after commit e6f5b934fba8 ("b43: Add QOS support"), which has the following issue. The core networking stack maps these priorities in the skb, and these mappings are noted in the ring's queue_prio member. When disabling QoS in the driver, the skb will still contain the mapping for the core stack while only one queue is actually considered active (the best effort queue). In the situation that QoS is disabled, b43 needs to pass 0 to ieee80211 queue functions since the number of queues is set to 1 in the struct ieee80211_hw queues member. drivers/net/wireless/broadcom/b43/pio.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/net/wireless/broadcom/b43/pio.c b/drivers/net/wireless/broadcom/b43/pio.c index 0cf70fdb60a6..e41f2f5b4c26 100644 --- a/drivers/net/wireless/broadcom/b43/pio.c +++ b/drivers/net/wireless/broadcom/b43/pio.c @@ -525,7 +525,7 @@ int b43_pio_tx(struct b43_wldev *dev, struct sk_buff *skb) if (total_len > (q->buffer_size - q->buffer_used)) { /* Not enough memory on the queue. */ err = -EBUSY; - ieee80211_stop_queue(dev->wl->hw, skb_get_queue_mapping(skb)); + b43_stop_queue(dev, skb_get_queue_mapping(skb)); q->stopped = true; goto out; } @@ -552,7 +552,7 @@ int b43_pio_tx(struct b43_wldev *dev, struct sk_buff *skb) if (((q->buffer_size - q->buffer_used) < roundup(2 + 2 + 6, 4)) || (q->free_packet_slots == 0)) { /* The queue is full. */ - ieee80211_stop_queue(dev->wl->hw, skb_get_queue_mapping(skb)); + b43_stop_queue(dev, skb_get_queue_mapping(skb)); q->stopped = true; } @@ -587,7 +587,7 @@ void b43_pio_handle_txstatus(struct b43_wldev *dev, list_add(&pack->list, &q->packets_list); if (q->stopped) { - ieee80211_wake_queue(dev->wl->hw, q->queue_prio); + b43_wake_queue(dev, q->queue_prio); q->stopped = false; } } -- 2.42.0 _______________________________________________ b43-dev mailing list b43-dev@lists.infradead.org http://lists.infradead.org/mailman/listinfo/b43-dev
next prev parent reply other threads:[~2023-12-31 5:03 UTC|newest] Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-12-31 5:03 [PATCH wireless v2 0/4] wifi: b43: Various QoS-related fixes Rahul Rameshbabu 2023-12-31 5:03 ` Rahul Rameshbabu 2023-12-31 5:03 ` [PATCH wireless v2 1/4] wifi: b43: Stop/wake correct queue in DMA Tx path when QoS is disabled Rahul Rameshbabu 2023-12-31 5:03 ` Rahul Rameshbabu 2024-01-01 8:01 ` Julian Calaby 2024-01-01 8:01 ` Julian Calaby 2024-01-10 14:56 ` Kalle Valo 2024-01-10 14:56 ` Kalle Valo 2023-12-31 5:03 ` Rahul Rameshbabu [this message] 2023-12-31 5:03 ` [PATCH wireless v2 2/4] wifi: b43: Stop/wake correct queue in PIO " Rahul Rameshbabu 2024-01-01 8:02 ` Julian Calaby 2024-01-01 8:02 ` Julian Calaby 2023-12-31 5:03 ` [PATCH wireless v2 3/4] wifi: b43: Stop correct queue in DMA worker " Rahul Rameshbabu 2023-12-31 5:03 ` Rahul Rameshbabu 2024-01-01 8:03 ` Julian Calaby 2024-01-01 8:03 ` Julian Calaby 2023-12-31 5:03 ` [PATCH wireless v2 4/4] wifi: b43: Disable QoS for bcm4331 Rahul Rameshbabu 2023-12-31 5:03 ` Rahul Rameshbabu 2024-01-01 8:05 ` Julian Calaby 2024-01-01 8:05 ` Julian Calaby 2023-12-31 9:26 ` [PATCH wireless v2 0/4] wifi: b43: Various QoS-related fixes Michael Büsch 2023-12-31 9:26 ` Michael Büsch
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20231231050300.122806-3-sergeantsagara@protonmail.com \ --to=sergeantsagara@protonmail.com \ --cc=Larry.Finger@lwfinger.net \ --cc=b43-dev@lists.infradead.org \ --cc=julian.calaby@gmail.com \ --cc=kvalo@kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-wireless@vger.kernel.org \ --cc=m@bues.ch \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.