463 lines
17 KiB
Diff
463 lines
17 KiB
Diff
From 42d4fe9bfc6f43bb60898e845c6dea14f596ada8 Mon Sep 17 00:00:00 2001
|
||
From: Patrick Yavitz <pyavitz@xxxxx.com>
|
||
Date: Sun, 27 Aug 2023 20:37:22 -0400
|
||
Subject: [PATCH] drivers: net: wireless: realtek: rtw88: upstream wireless
|
||
|
||
wireless-next: 2023-08-25: backport: linux-6.5.y
|
||
|
||
Signed-off-by: Patrick Yavitz <pyavitz@xxxxx.com>
|
||
---
|
||
drivers/net/wireless/realtek/rtw88/fw.c | 2 +-
|
||
drivers/net/wireless/realtek/rtw88/main.c | 13 ++++++------
|
||
drivers/net/wireless/realtek/rtw88/main.h | 9 --------
|
||
drivers/net/wireless/realtek/rtw88/pci.c | 2 +-
|
||
drivers/net/wireless/realtek/rtw88/ps.c | 6 ++----
|
||
drivers/net/wireless/realtek/rtw88/tx.c | 2 --
|
||
drivers/net/wireless/realtek/rtw88/usb.c | 25 +++++------------------
|
||
drivers/net/wireless/realtek/rtw88/usb.h | 7 -------
|
||
drivers/net/wireless/realtek/rtw88/util.c | 7 ++-----
|
||
drivers/net/wireless/realtek/rtw88/util.h | 3 +--
|
||
10 files changed, 18 insertions(+), 58 deletions(-)
|
||
|
||
diff --git a/drivers/net/wireless/realtek/rtw88/fw.c b/drivers/net/wireless/realtek/rtw88/fw.c
|
||
index 567bbedd8ee0..a1b674e3caaa 100644
|
||
--- a/drivers/net/wireless/realtek/rtw88/fw.c
|
||
+++ b/drivers/net/wireless/realtek/rtw88/fw.c
|
||
@@ -140,7 +140,7 @@ struct rtw_beacon_filter_iter_data {
|
||
u8 *payload;
|
||
};
|
||
|
||
-static void rtw_fw_bcn_filter_notify_vif_iter(void *data, u8 *mac,
|
||
+static void rtw_fw_bcn_filter_notify_vif_iter(void *data,
|
||
struct ieee80211_vif *vif)
|
||
{
|
||
struct rtw_beacon_filter_iter_data *iter_data = data;
|
||
diff --git a/drivers/net/wireless/realtek/rtw88/main.c b/drivers/net/wireless/realtek/rtw88/main.c
|
||
index c853e2f2d448..4a33d2e47f33 100644
|
||
--- a/drivers/net/wireless/realtek/rtw88/main.c
|
||
+++ b/drivers/net/wireless/realtek/rtw88/main.c
|
||
@@ -185,8 +185,7 @@ static void rtw_dynamic_csi_rate(struct rtw_dev *rtwdev, struct rtw_vif *rtwvif)
|
||
bf_info->cur_csi_rpt_rate = new_csi_rate_idx;
|
||
}
|
||
|
||
-static void rtw_vif_watch_dog_iter(void *data, u8 *mac,
|
||
- struct ieee80211_vif *vif)
|
||
+static void rtw_vif_watch_dog_iter(void *data, struct ieee80211_vif *vif)
|
||
{
|
||
struct rtw_watch_dog_iter_data *iter_data = data;
|
||
struct rtw_vif *rtwvif = (struct rtw_vif *)vif->drv_priv;
|
||
@@ -1303,7 +1302,6 @@ void rtw_update_sta_info(struct rtw_dev *rtwdev, struct rtw_sta_info *si,
|
||
si->stbc_en = stbc_en;
|
||
si->ldpc_en = ldpc_en;
|
||
si->rf_type = rf_type;
|
||
- si->wireless_set = wireless_set;
|
||
si->sgi_enable = is_support_sgi;
|
||
si->vht_enable = is_vht_enable;
|
||
si->ra_mask = ra_mask;
|
||
@@ -2183,10 +2181,12 @@ void rtw_core_deinit(struct rtw_dev *rtwdev)
|
||
release_firmware(wow_fw->firmware);
|
||
|
||
destroy_workqueue(rtwdev->tx_wq);
|
||
+ timer_delete_sync(&rtwdev->tx_report.purge_timer);
|
||
spin_lock_irqsave(&rtwdev->tx_report.q_lock, flags);
|
||
skb_queue_purge(&rtwdev->tx_report.queue);
|
||
- skb_queue_purge(&rtwdev->coex.queue);
|
||
spin_unlock_irqrestore(&rtwdev->tx_report.q_lock, flags);
|
||
+ skb_queue_purge(&rtwdev->coex.queue);
|
||
+ skb_queue_purge(&rtwdev->c2h_queue);
|
||
|
||
list_for_each_entry_safe(rsvd_pkt, tmp, &rtwdev->rsvd_page_list,
|
||
build_list) {
|
||
@@ -2329,7 +2329,7 @@ struct rtw_iter_port_switch_data {
|
||
struct rtw_vif *rtwvif_ap;
|
||
};
|
||
|
||
-static void rtw_port_switch_iter(void *data, u8 *mac, struct ieee80211_vif *vif)
|
||
+static void rtw_port_switch_iter(void *data, struct ieee80211_vif *vif)
|
||
{
|
||
struct rtw_iter_port_switch_data *iter_data = data;
|
||
struct rtw_dev *rtwdev = iter_data->rtwdev;
|
||
@@ -2381,8 +2381,7 @@ void rtw_core_port_switch(struct rtw_dev *rtwdev, struct ieee80211_vif *vif)
|
||
rtw_iterate_vifs(rtwdev, rtw_port_switch_iter, &iter_data);
|
||
}
|
||
|
||
-static void rtw_check_sta_active_iter(void *data, u8 *mac,
|
||
- struct ieee80211_vif *vif)
|
||
+static void rtw_check_sta_active_iter(void *data, struct ieee80211_vif *vif)
|
||
{
|
||
struct rtw_vif *rtwvif = (struct rtw_vif *)vif->drv_priv;
|
||
bool *active = data;
|
||
diff --git a/drivers/net/wireless/realtek/rtw88/main.h b/drivers/net/wireless/realtek/rtw88/main.h
|
||
index f9dd2ab941c8..c42ef8294d59 100644
|
||
--- a/drivers/net/wireless/realtek/rtw88/main.h
|
||
+++ b/drivers/net/wireless/realtek/rtw88/main.h
|
||
@@ -511,12 +511,6 @@ struct rtw_txpwr_idx {
|
||
struct rtw_5g_txpwr_idx pwr_idx_5g;
|
||
};
|
||
|
||
-struct rtw_timer_list {
|
||
- struct timer_list timer;
|
||
- void (*function)(void *data);
|
||
- void *args;
|
||
-};
|
||
-
|
||
struct rtw_channel_params {
|
||
u8 center_chan;
|
||
u8 primary_chan;
|
||
@@ -734,9 +728,7 @@ struct rtw_ra_report {
|
||
|
||
struct rtw_txq {
|
||
struct list_head list;
|
||
-
|
||
unsigned long flags;
|
||
- unsigned long last_push;
|
||
};
|
||
|
||
#define RTW_BC_MC_MACID 1
|
||
@@ -754,7 +746,6 @@ struct rtw_sta_info {
|
||
u8 rate_id;
|
||
enum rtw_bandwidth bw_mode;
|
||
enum rtw_rf_type rf_type;
|
||
- enum rtw_wireless_set wireless_set;
|
||
u8 stbc_en:2;
|
||
u8 ldpc_en:2;
|
||
bool sgi_enable;
|
||
diff --git a/drivers/net/wireless/realtek/rtw88/pci.c b/drivers/net/wireless/realtek/rtw88/pci.c
|
||
index 44a8fff34cdd..2bfc0e822b8d 100644
|
||
--- a/drivers/net/wireless/realtek/rtw88/pci.c
|
||
+++ b/drivers/net/wireless/realtek/rtw88/pci.c
|
||
@@ -1828,5 +1828,5 @@ void rtw_pci_shutdown(struct pci_dev *pdev)
|
||
EXPORT_SYMBOL(rtw_pci_shutdown);
|
||
|
||
MODULE_AUTHOR("Realtek Corporation");
|
||
-MODULE_DESCRIPTION("Realtek 802.11ac wireless PCI driver");
|
||
+MODULE_DESCRIPTION("Realtek PCI 802.11ac wireless driver");
|
||
MODULE_LICENSE("Dual BSD/GPL");
|
||
diff --git a/drivers/net/wireless/realtek/rtw88/ps.c b/drivers/net/wireless/realtek/rtw88/ps.c
|
||
index 43e80a3a8136..07e8cbd436cd 100644
|
||
--- a/drivers/net/wireless/realtek/rtw88/ps.c
|
||
+++ b/drivers/net/wireless/realtek/rtw88/ps.c
|
||
@@ -37,8 +37,7 @@ int rtw_enter_ips(struct rtw_dev *rtwdev)
|
||
return 0;
|
||
}
|
||
|
||
-static void rtw_restore_port_cfg_iter(void *data, u8 *mac,
|
||
- struct ieee80211_vif *vif)
|
||
+static void rtw_restore_port_cfg_iter(void *data, struct ieee80211_vif *vif)
|
||
{
|
||
struct rtw_dev *rtwdev = data;
|
||
struct rtw_vif *rtwvif = (struct rtw_vif *)vif->drv_priv;
|
||
@@ -320,8 +319,7 @@ static void __rtw_vif_recalc_lps(struct rtw_vif_recalc_lps_iter_data *data,
|
||
data->found_vif = vif;
|
||
}
|
||
|
||
-static void rtw_vif_recalc_lps_iter(void *data, u8 *mac,
|
||
- struct ieee80211_vif *vif)
|
||
+static void rtw_vif_recalc_lps_iter(void *data, struct ieee80211_vif *vif)
|
||
{
|
||
__rtw_vif_recalc_lps(data, vif);
|
||
}
|
||
diff --git a/drivers/net/wireless/realtek/rtw88/tx.c b/drivers/net/wireless/realtek/rtw88/tx.c
|
||
index 2821119dc930..f63900b6621d 100644
|
||
--- a/drivers/net/wireless/realtek/rtw88/tx.c
|
||
+++ b/drivers/net/wireless/realtek/rtw88/tx.c
|
||
@@ -606,8 +606,6 @@ static int rtw_txq_push_skb(struct rtw_dev *rtwdev,
|
||
rtw_err(rtwdev, "failed to write TX skb to HCI\n");
|
||
return ret;
|
||
}
|
||
- rtwtxq->last_push = jiffies;
|
||
-
|
||
return 0;
|
||
}
|
||
|
||
diff --git a/drivers/net/wireless/realtek/rtw88/usb.c b/drivers/net/wireless/realtek/rtw88/usb.c
|
||
index 4a57efdba97b..d879d7e3dc81 100644
|
||
--- a/drivers/net/wireless/realtek/rtw88/usb.c
|
||
+++ b/drivers/net/wireless/realtek/rtw88/usb.c
|
||
@@ -142,7 +142,6 @@ static int rtw_usb_parse(struct rtw_dev *rtwdev,
|
||
struct usb_host_interface *host_interface = &interface->altsetting[0];
|
||
struct usb_interface_descriptor *interface_desc = &host_interface->desc;
|
||
struct usb_endpoint_descriptor *endpoint;
|
||
- struct usb_device *usbd = interface_to_usbdev(interface);
|
||
int num_out_pipes = 0;
|
||
int i;
|
||
u8 num;
|
||
@@ -184,22 +183,6 @@ static int rtw_usb_parse(struct rtw_dev *rtwdev,
|
||
}
|
||
}
|
||
|
||
- switch (usbd->speed) {
|
||
- case USB_SPEED_LOW:
|
||
- case USB_SPEED_FULL:
|
||
- rtwusb->bulkout_size = RTW_USB_FULL_SPEED_BULK_SIZE;
|
||
- break;
|
||
- case USB_SPEED_HIGH:
|
||
- rtwusb->bulkout_size = RTW_USB_HIGH_SPEED_BULK_SIZE;
|
||
- break;
|
||
- case USB_SPEED_SUPER:
|
||
- rtwusb->bulkout_size = RTW_USB_SUPER_SPEED_BULK_SIZE;
|
||
- break;
|
||
- default:
|
||
- rtw_err(rtwdev, "failed to detect usb speed\n");
|
||
- return -EINVAL;
|
||
- }
|
||
-
|
||
rtwdev->hci.bulkout_num = num_out_pipes;
|
||
|
||
if (num_out_pipes < 1 || num_out_pipes > 4) {
|
||
@@ -654,7 +637,6 @@ static int rtw_usb_alloc_rx_bufs(struct rtw_usb *rtwusb)
|
||
for (i = 0; i < RTW_USB_RXCB_NUM; i++) {
|
||
struct rx_usb_ctrl_block *rxcb = &rtwusb->rx_cb[i];
|
||
|
||
- rxcb->n = i;
|
||
rxcb->rtwdev = rtwusb->rtwdev;
|
||
rxcb->rx_urb = usb_alloc_urb(0, GFP_KERNEL);
|
||
if (!rxcb->rx_urb)
|
||
@@ -844,7 +826,7 @@ int rtw_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
||
|
||
ret = rtw_core_init(rtwdev);
|
||
if (ret)
|
||
- goto err_release_hw;
|
||
+ goto err_free_rx_bufs;
|
||
|
||
ret = rtw_usb_intf_init(rtwdev, intf);
|
||
if (ret) {
|
||
@@ -890,6 +872,9 @@ int rtw_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
||
err_deinit_core:
|
||
rtw_core_deinit(rtwdev);
|
||
|
||
+err_free_rx_bufs:
|
||
+ rtw_usb_free_rx_bufs(rtwusb);
|
||
+
|
||
err_release_hw:
|
||
ieee80211_free_hw(hw);
|
||
|
||
@@ -927,5 +912,5 @@ void rtw_usb_disconnect(struct usb_interface *intf)
|
||
EXPORT_SYMBOL(rtw_usb_disconnect);
|
||
|
||
MODULE_AUTHOR("Realtek Corporation");
|
||
-MODULE_DESCRIPTION("Realtek 802.11ac wireless USB driver");
|
||
+MODULE_DESCRIPTION("Realtek USB 802.11ac wireless driver");
|
||
MODULE_LICENSE("Dual BSD/GPL");
|
||
diff --git a/drivers/net/wireless/realtek/rtw88/usb.h b/drivers/net/wireless/realtek/rtw88/usb.h
|
||
index ad1d7955c6a5..86697a5c0103 100644
|
||
--- a/drivers/net/wireless/realtek/rtw88/usb.h
|
||
+++ b/drivers/net/wireless/realtek/rtw88/usb.h
|
||
@@ -18,10 +18,6 @@
|
||
|
||
#define RTW_USB_VENQT_CMD_IDX 0x00
|
||
|
||
-#define RTW_USB_SUPER_SPEED_BULK_SIZE 1024
|
||
-#define RTW_USB_HIGH_SPEED_BULK_SIZE 512
|
||
-#define RTW_USB_FULL_SPEED_BULK_SIZE 64
|
||
-
|
||
#define RTW_USB_TX_SEL_HQ BIT(0)
|
||
#define RTW_USB_TX_SEL_LQ BIT(1)
|
||
#define RTW_USB_TX_SEL_NQ BIT(2)
|
||
@@ -58,7 +54,6 @@ struct rx_usb_ctrl_block {
|
||
struct rtw_dev *rtwdev;
|
||
struct urb *rx_urb;
|
||
struct sk_buff *rx_skb;
|
||
- int n;
|
||
};
|
||
|
||
struct rtw_usb_tx_data {
|
||
@@ -74,12 +69,10 @@ struct rtw_usb {
|
||
__le32 *usb_data;
|
||
unsigned int usb_data_index;
|
||
|
||
- u32 bulkout_size;
|
||
u8 pipe_interrupt;
|
||
u8 pipe_in;
|
||
u8 out_ep[RTW_USB_EP_MAX];
|
||
int qsel_to_ep[TX_DESC_QSEL_MAX];
|
||
- u8 usb_txagg_num;
|
||
|
||
struct workqueue_struct *txwq, *rxwq;
|
||
|
||
diff --git a/drivers/net/wireless/realtek/rtw88/util.c b/drivers/net/wireless/realtek/rtw88/util.c
|
||
index ff3c269fb1a7..e222d3c01a77 100644
|
||
--- a/drivers/net/wireless/realtek/rtw88/util.c
|
||
+++ b/drivers/net/wireless/realtek/rtw88/util.c
|
||
@@ -159,7 +159,6 @@ void rtw_iterate_stas(struct rtw_dev *rtwdev,
|
||
struct rtw_vifs_entry {
|
||
struct list_head list;
|
||
struct ieee80211_vif *vif;
|
||
- u8 mac[ETH_ALEN];
|
||
};
|
||
|
||
struct rtw_iter_vifs_data {
|
||
@@ -177,13 +176,11 @@ static void rtw_collect_vif_iter(void *data, u8 *mac, struct ieee80211_vif *vif)
|
||
return;
|
||
|
||
vifs_entry->vif = vif;
|
||
- ether_addr_copy(vifs_entry->mac, mac);
|
||
list_add_tail(&vifs_entry->list, &iter_stas->list);
|
||
}
|
||
|
||
void rtw_iterate_vifs(struct rtw_dev *rtwdev,
|
||
- void (*iterator)(void *data, u8 *mac,
|
||
- struct ieee80211_vif *vif),
|
||
+ void (*iterator)(void *data, struct ieee80211_vif *vif),
|
||
void *data)
|
||
{
|
||
struct rtw_iter_vifs_data iter_data;
|
||
@@ -204,7 +201,7 @@ void rtw_iterate_vifs(struct rtw_dev *rtwdev,
|
||
list_for_each_entry_safe(vif_entry, tmp, &iter_data.list,
|
||
list) {
|
||
list_del_init(&vif_entry->list);
|
||
- iterator(data, vif_entry->mac, vif_entry->vif);
|
||
+ iterator(data, vif_entry->vif);
|
||
kfree(vif_entry);
|
||
}
|
||
}
|
||
diff --git a/drivers/net/wireless/realtek/rtw88/util.h b/drivers/net/wireless/realtek/rtw88/util.h
|
||
index dc8965525400..f8399128a9a3 100644
|
||
--- a/drivers/net/wireless/realtek/rtw88/util.h
|
||
+++ b/drivers/net/wireless/realtek/rtw88/util.h
|
||
@@ -18,8 +18,7 @@ struct rtw_dev;
|
||
ieee80211_iter_keys_rcu((rtwdev)->hw, vif, iterator, data)
|
||
|
||
void rtw_iterate_vifs(struct rtw_dev *rtwdev,
|
||
- void (*iterator)(void *data, u8 *mac,
|
||
- struct ieee80211_vif *vif),
|
||
+ void (*iterator)(void *data, struct ieee80211_vif *vif),
|
||
void *data);
|
||
void rtw_iterate_stas(struct rtw_dev *rtwdev,
|
||
void (*iterator)(void *data,
|
||
--
|
||
2.39.2
|
||
|
||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||
From: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
|
||
To: linux-wireless@vger.kernel.org
|
||
Date: Wed, 2 Aug 2023 00:27:32 +0000
|
||
Subject: [PATCH] wifi: rtw88: sdio: Honor the host max_req_size in the RX path
|
||
|
||
Lukas reports skb_over_panic errors on his Banana Pi BPI-CM4 which comes
|
||
with an Amlogic A311D (G12B) SoC and a RTL8822CS SDIO wifi/Bluetooth
|
||
combo card. The error he observed is identical to what has been fixed
|
||
in commit e967229ead0e ("wifi: rtw88: sdio: Check the HISR RX_REQUEST
|
||
bit in rtw_sdio_rx_isr()") but that commit didn't fix Lukas' problem.
|
||
|
||
Lukas found that disabling or limiting RX aggregation fix the problem
|
||
for him. In the following discussion a few key topics have been
|
||
discussed which have an impact on this problem:
|
||
- The Amlogic A311D (G12B) SoC has a hardware bug in the SDIO controller
|
||
which prevents DMA transfers. Instead all transfers need to go through
|
||
the controller SRAM which limits transfers to 1536 bytes
|
||
- rtw88 chips don't split incoming (RX) packets, so if a big packet is
|
||
received this is forwarded to the host in it's original form
|
||
- rtw88 chips can do RX aggregation, meaning more multiple incoming
|
||
packets can be pulled by the host from the card with one MMC/SDIO
|
||
transfer. This Depends on settings in the REG_RXDMA_AGG_PG_TH
|
||
register (BIT_RXDMA_AGG_PG_TH limits the number of packets that will
|
||
be aggregated, BIT_DMA_AGG_TO_V1 configures a timeout for aggregation
|
||
and BIT_EN_PRE_CALC makes the chip honor the limits more effectively)
|
||
|
||
Use multiple consecutive reads in rtw_sdio_read_port() to limit the
|
||
number of bytes which are copied by the host from the card in one
|
||
MMC/SDIO transfer. This allows receiving a buffer that's larger than
|
||
the hosts max_req_size (number of bytes which can be transferred in
|
||
one MMC/SDIO transfer). As a result of this the skb_over_panic error
|
||
is gone as the rtw88 driver is now able to receive more than 1536 bytes
|
||
from the card (either because the incoming packet is larger than that
|
||
or because multiple packets have been aggregated).
|
||
|
||
Fixes: 65371a3f14e7 ("wifi: rtw88: sdio: Add HCI implementation for SDIO based chipsets")
|
||
Reported-by: Lukas F. Hartmann <lukas@mntre.com>
|
||
Closes: https://lore.kernel.org/linux-wireless/CAFBinCBaXtebixKbjkWKW_WXc5k=NdGNaGUjVE8NCPNxOhsb2g@mail.gmail.com/
|
||
Suggested-by: Ping-Ke Shih <pkshih@realtek.com>
|
||
Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
|
||
---
|
||
drivers/net/wireless/realtek/rtw88/sdio.c | 24 +++++++++++++++++------
|
||
1 file changed, 18 insertions(+), 6 deletions(-)
|
||
|
||
diff --git a/drivers/net/wireless/realtek/rtw88/sdio.c b/drivers/net/wireless/realtek/rtw88/sdio.c
|
||
index 2c1fb2dabd40..b19262ec5d8c 100644
|
||
--- a/drivers/net/wireless/realtek/rtw88/sdio.c
|
||
+++ b/drivers/net/wireless/realtek/rtw88/sdio.c
|
||
@@ -500,19 +500,31 @@ static u32 rtw_sdio_get_tx_addr(struct rtw_dev *rtwdev, size_t size,
|
||
static int rtw_sdio_read_port(struct rtw_dev *rtwdev, u8 *buf, size_t count)
|
||
{
|
||
struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;
|
||
+ struct mmc_host *host = rtwsdio->sdio_func->card->host;
|
||
bool bus_claim = rtw_sdio_bus_claim_needed(rtwsdio);
|
||
u32 rxaddr = rtwsdio->rx_addr++;
|
||
+ size_t bytes;
|
||
int ret;
|
||
|
||
if (bus_claim)
|
||
sdio_claim_host(rtwsdio->sdio_func);
|
||
|
||
- ret = sdio_memcpy_fromio(rtwsdio->sdio_func, buf,
|
||
- RTW_SDIO_ADDR_RX_RX0FF_GEN(rxaddr), count);
|
||
- if (ret)
|
||
- rtw_warn(rtwdev,
|
||
- "Failed to read %zu byte(s) from SDIO port 0x%08x",
|
||
- count, rxaddr);
|
||
+ while (count > 0) {
|
||
+ bytes = min_t(size_t, host->max_req_size, count);
|
||
+
|
||
+ ret = sdio_memcpy_fromio(rtwsdio->sdio_func, buf,
|
||
+ RTW_SDIO_ADDR_RX_RX0FF_GEN(rxaddr),
|
||
+ bytes);
|
||
+ if (ret) {
|
||
+ rtw_warn(rtwdev,
|
||
+ "Failed to read %zu byte(s) from SDIO port 0x%08x",
|
||
+ bytes, rxaddr);
|
||
+ break;
|
||
+ }
|
||
+
|
||
+ count -= bytes;
|
||
+ buf += bytes;
|
||
+ }
|
||
|
||
if (bus_claim)
|
||
sdio_release_host(rtwsdio->sdio_func);
|
||
--
|
||
2.41.0
|
||
|
||
From 248429fc23232f218d5bd81120eafad70038bd5f Mon Sep 17 00:00:00 2001
|
||
From: Patrick Yavitz <pyavitz@xxxxx.com>
|
||
Date: Wed, 6 Sep 2023 21:42:18 -0400
|
||
Subject: [PATCH] drivers: net: wireless: realtek: rtw88: usb-c
|
||
|
||
Remove duplicate label and correct goto err_release_hw placement.
|
||
|
||
drivers/net/wireless/realtek/rtw88/usb.c: In function ‘rtw_usb_probe’:
|
||
drivers/net/wireless/realtek/rtw88/usb.c:878:1: error: duplicate label ‘err_free_rx_bufs’
|
||
878 | err_free_rx_bufs:
|
||
|
||
Signed-off-by: Patrick Yavitz <pyavitz@xxxxx.com>
|
||
---
|
||
drivers/net/wireless/realtek/rtw88/usb.c | 5 +----
|
||
1 file changed, 1 insertion(+), 4 deletions(-)
|
||
|
||
diff --git a/drivers/net/wireless/realtek/rtw88/usb.c b/drivers/net/wireless/realtek/rtw88/usb.c
|
||
index 7f98668cf084..d879d7e3dc81 100644
|
||
--- a/drivers/net/wireless/realtek/rtw88/usb.c
|
||
+++ b/drivers/net/wireless/realtek/rtw88/usb.c
|
||
@@ -822,7 +822,7 @@ int rtw_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
||
|
||
ret = rtw_usb_alloc_rx_bufs(rtwusb);
|
||
if (ret)
|
||
- goto err_free_rx_bufs;
|
||
+ goto err_release_hw;
|
||
|
||
ret = rtw_core_init(rtwdev);
|
||
if (ret)
|
||
@@ -875,9 +875,6 @@ int rtw_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
||
err_free_rx_bufs:
|
||
rtw_usb_free_rx_bufs(rtwusb);
|
||
|
||
-err_free_rx_bufs:
|
||
- rtw_usb_free_rx_bufs(rtwusb);
|
||
-
|
||
err_release_hw:
|
||
ieee80211_free_hw(hw);
|
||
|
||
--
|
||
2.39.2
|
||
|