Skip to content

Commit ebd297a

Browse files
committed
Merge tag 'net-6.15-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Pull networking fixes from Jakub Kicinski: "Happy May Day. Things have calmed down on our end (knock on wood), no outstanding investigations. Including fixes from Bluetooth and WiFi. Current release - fix to a fix: - igc: fix lock order in igc_ptp_reset Current release - new code bugs: - Revert "wifi: iwlwifi: make no_160 more generic", fixes regression to Killer line of devices reported by a number of people - Revert "wifi: iwlwifi: add support for BE213", initial FW is too buggy - number of fixes for mld, the new Intel WiFi subdriver Previous releases - regressions: - wifi: mac80211: restore monitor for outgoing frames - drv: vmxnet3: fix malformed packet sizing in vmxnet3_process_xdp - eth: bnxt_en: fix timestamping FIFO getting out of sync on reset, delivering stale timestamps - use sock_gen_put() in the TCP fraglist GRO heuristic, don't assume every socket is a full socket Previous releases - always broken: - sched: adapt qdiscs for reentrant enqueue cases, fix list corruptions - xsk: fix race condition in AF_XDP generic RX path, shared UMEM can't be protected by a per-socket lock - eth: mtk-star-emac: fix spinlock recursion issues on rx/tx poll - btusb: avoid NULL pointer dereference in skb_dequeue() - dsa: felix: fix broken taprio gate states after clock jump" * tag 'net-6.15-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (83 commits) net: vertexcom: mse102x: Fix RX error handling net: vertexcom: mse102x: Add range check for CMD_RTS net: vertexcom: mse102x: Fix LEN_MASK net: vertexcom: mse102x: Fix possible stuck of SPI interrupt net: hns3: defer calling ptp_clock_register() net: hns3: fixed debugfs tm_qset size net: hns3: fix an interrupt residual problem net: hns3: store rx VLAN tag offload state for VF octeon_ep: Fix host hang issue during device reboot net: fec: ERR007885 Workaround for conventional TX net: lan743x: Fix memleak issue when GSO enabled ptp: ocp: Fix NULL dereference in Adva board SMA sysfs operations net: use sock_gen_put() when sk_state is TCP_TIME_WAIT bnxt_en: fix module unload sequence bnxt_en: Fix ethtool -d byte order for 32-bit values bnxt_en: Fix out-of-bound memcpy() during ethtool -w bnxt_en: Fix coredump logic to free allocated buffer bnxt_en: delay pci_alloc_irq_vectors() in the AER path bnxt_en: call pci_alloc_irq_vectors() after bnxt_reserve_rings() bnxt_en: Add missing skb_mark_for_recycle() in bnxt_rx_vlan() ...
2 parents 4f79eaa + 1daa05f commit ebd297a

File tree

96 files changed

+1782
-733
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

96 files changed

+1782
-733
lines changed

Documentation/netlink/specs/ethtool.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,10 @@ definitions:
8989
doc: Group of short_detected states
9090
-
9191
name: phy-upstream-type
92-
enum-name:
92+
enum-name: phy-upstream
93+
header: linux/ethtool.h
9394
type: enum
95+
name-prefix: phy-upstream
9496
entries: [ mac, phy ]
9597
-
9698
name: tcp-data-split

drivers/bluetooth/btintel_pcie.c

Lines changed: 31 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -957,8 +957,10 @@ static int btintel_pcie_recv_event(struct hci_dev *hdev, struct sk_buff *skb)
957957
/* This is a debug event that comes from IML and OP image when it
958958
* starts execution. There is no need pass this event to stack.
959959
*/
960-
if (skb->data[2] == 0x97)
960+
if (skb->data[2] == 0x97) {
961+
hci_recv_diag(hdev, skb);
961962
return 0;
963+
}
962964
}
963965

964966
return hci_recv_frame(hdev, skb);
@@ -974,7 +976,6 @@ static int btintel_pcie_recv_frame(struct btintel_pcie_data *data,
974976
u8 pkt_type;
975977
u16 plen;
976978
u32 pcie_pkt_type;
977-
struct sk_buff *new_skb;
978979
void *pdata;
979980
struct hci_dev *hdev = data->hdev;
980981

@@ -1051,24 +1052,20 @@ static int btintel_pcie_recv_frame(struct btintel_pcie_data *data,
10511052

10521053
bt_dev_dbg(hdev, "pkt_type: 0x%2.2x len: %u", pkt_type, plen);
10531054

1054-
new_skb = bt_skb_alloc(plen, GFP_ATOMIC);
1055-
if (!new_skb) {
1056-
bt_dev_err(hdev, "Failed to allocate memory for skb of len: %u",
1057-
skb->len);
1058-
ret = -ENOMEM;
1059-
goto exit_error;
1060-
}
1061-
1062-
hci_skb_pkt_type(new_skb) = pkt_type;
1063-
skb_put_data(new_skb, skb->data, plen);
1055+
hci_skb_pkt_type(skb) = pkt_type;
10641056
hdev->stat.byte_rx += plen;
1057+
skb_trim(skb, plen);
10651058

10661059
if (pcie_pkt_type == BTINTEL_PCIE_HCI_EVT_PKT)
1067-
ret = btintel_pcie_recv_event(hdev, new_skb);
1060+
ret = btintel_pcie_recv_event(hdev, skb);
10681061
else
1069-
ret = hci_recv_frame(hdev, new_skb);
1062+
ret = hci_recv_frame(hdev, skb);
1063+
skb = NULL; /* skb is freed in the callee */
10701064

10711065
exit_error:
1066+
if (skb)
1067+
kfree_skb(skb);
1068+
10721069
if (ret)
10731070
hdev->stat.err_rx++;
10741071

@@ -1202,8 +1199,6 @@ static void btintel_pcie_rx_work(struct work_struct *work)
12021199
struct btintel_pcie_data *data = container_of(work,
12031200
struct btintel_pcie_data, rx_work);
12041201
struct sk_buff *skb;
1205-
int err;
1206-
struct hci_dev *hdev = data->hdev;
12071202

12081203
if (test_bit(BTINTEL_PCIE_HWEXP_INPROGRESS, &data->flags)) {
12091204
/* Unlike usb products, controller will not send hardware
@@ -1224,11 +1219,7 @@ static void btintel_pcie_rx_work(struct work_struct *work)
12241219

12251220
/* Process the sk_buf in queue and send to the HCI layer */
12261221
while ((skb = skb_dequeue(&data->rx_skb_q))) {
1227-
err = btintel_pcie_recv_frame(data, skb);
1228-
if (err)
1229-
bt_dev_err(hdev, "Failed to send received frame: %d",
1230-
err);
1231-
kfree_skb(skb);
1222+
btintel_pcie_recv_frame(data, skb);
12321223
}
12331224
}
12341225

@@ -1281,10 +1272,8 @@ static void btintel_pcie_msix_rx_handle(struct btintel_pcie_data *data)
12811272
bt_dev_dbg(hdev, "RXQ: cr_hia: %u cr_tia: %u", cr_hia, cr_tia);
12821273

12831274
/* Check CR_TIA and CR_HIA for change */
1284-
if (cr_tia == cr_hia) {
1285-
bt_dev_warn(hdev, "RXQ: no new CD found");
1275+
if (cr_tia == cr_hia)
12861276
return;
1287-
}
12881277

12891278
rxq = &data->rxq;
12901279

@@ -1320,6 +1309,16 @@ static irqreturn_t btintel_pcie_msix_isr(int irq, void *data)
13201309
return IRQ_WAKE_THREAD;
13211310
}
13221311

1312+
static inline bool btintel_pcie_is_rxq_empty(struct btintel_pcie_data *data)
1313+
{
1314+
return data->ia.cr_hia[BTINTEL_PCIE_RXQ_NUM] == data->ia.cr_tia[BTINTEL_PCIE_RXQ_NUM];
1315+
}
1316+
1317+
static inline bool btintel_pcie_is_txackq_empty(struct btintel_pcie_data *data)
1318+
{
1319+
return data->ia.cr_tia[BTINTEL_PCIE_TXQ_NUM] == data->ia.cr_hia[BTINTEL_PCIE_TXQ_NUM];
1320+
}
1321+
13231322
static irqreturn_t btintel_pcie_irq_msix_handler(int irq, void *dev_id)
13241323
{
13251324
struct msix_entry *entry = dev_id;
@@ -1351,12 +1350,18 @@ static irqreturn_t btintel_pcie_irq_msix_handler(int irq, void *dev_id)
13511350
btintel_pcie_msix_gp0_handler(data);
13521351

13531352
/* For TX */
1354-
if (intr_fh & BTINTEL_PCIE_MSIX_FH_INT_CAUSES_0)
1353+
if (intr_fh & BTINTEL_PCIE_MSIX_FH_INT_CAUSES_0) {
13551354
btintel_pcie_msix_tx_handle(data);
1355+
if (!btintel_pcie_is_rxq_empty(data))
1356+
btintel_pcie_msix_rx_handle(data);
1357+
}
13561358

13571359
/* For RX */
1358-
if (intr_fh & BTINTEL_PCIE_MSIX_FH_INT_CAUSES_1)
1360+
if (intr_fh & BTINTEL_PCIE_MSIX_FH_INT_CAUSES_1) {
13591361
btintel_pcie_msix_rx_handle(data);
1362+
if (!btintel_pcie_is_txackq_empty(data))
1363+
btintel_pcie_msix_tx_handle(data);
1364+
}
13601365

13611366
/*
13621367
* Before sending the interrupt the HW disables it to prevent a nested

drivers/bluetooth/btmtksdio.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -723,6 +723,10 @@ static int btmtksdio_close(struct hci_dev *hdev)
723723
{
724724
struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
725725

726+
/* Skip btmtksdio_close if BTMTKSDIO_FUNC_ENABLED isn't set */
727+
if (!test_bit(BTMTKSDIO_FUNC_ENABLED, &bdev->tx_state))
728+
return 0;
729+
726730
sdio_claim_host(bdev->func);
727731

728732
/* Disable interrupt */
@@ -1443,11 +1447,15 @@ static void btmtksdio_remove(struct sdio_func *func)
14431447
if (!bdev)
14441448
return;
14451449

1450+
hdev = bdev->hdev;
1451+
1452+
/* Make sure to call btmtksdio_close before removing sdio card */
1453+
if (test_bit(BTMTKSDIO_FUNC_ENABLED, &bdev->tx_state))
1454+
btmtksdio_close(hdev);
1455+
14461456
/* Be consistent the state in btmtksdio_probe */
14471457
pm_runtime_get_noresume(bdev->dev);
14481458

1449-
hdev = bdev->hdev;
1450-
14511459
sdio_set_drvdata(func, NULL);
14521460
hci_unregister_dev(hdev);
14531461
hci_free_dev(hdev);

drivers/bluetooth/btusb.c

Lines changed: 73 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -3010,22 +3010,16 @@ static void btusb_coredump_qca(struct hci_dev *hdev)
30103010
bt_dev_err(hdev, "%s: triggle crash failed (%d)", __func__, err);
30113011
}
30123012

3013-
/*
3014-
* ==0: not a dump pkt.
3015-
* < 0: fails to handle a dump pkt
3016-
* > 0: otherwise.
3017-
*/
3013+
/* Return: 0 on success, negative errno on failure. */
30183014
static int handle_dump_pkt_qca(struct hci_dev *hdev, struct sk_buff *skb)
30193015
{
3020-
int ret = 1;
3016+
int ret = 0;
30213017
u8 pkt_type;
30223018
u8 *sk_ptr;
30233019
unsigned int sk_len;
30243020
u16 seqno;
30253021
u32 dump_size;
30263022

3027-
struct hci_event_hdr *event_hdr;
3028-
struct hci_acl_hdr *acl_hdr;
30293023
struct qca_dump_hdr *dump_hdr;
30303024
struct btusb_data *btdata = hci_get_drvdata(hdev);
30313025
struct usb_device *udev = btdata->udev;
@@ -3035,30 +3029,14 @@ static int handle_dump_pkt_qca(struct hci_dev *hdev, struct sk_buff *skb)
30353029
sk_len = skb->len;
30363030

30373031
if (pkt_type == HCI_ACLDATA_PKT) {
3038-
acl_hdr = hci_acl_hdr(skb);
3039-
if (le16_to_cpu(acl_hdr->handle) != QCA_MEMDUMP_ACL_HANDLE)
3040-
return 0;
30413032
sk_ptr += HCI_ACL_HDR_SIZE;
30423033
sk_len -= HCI_ACL_HDR_SIZE;
3043-
event_hdr = (struct hci_event_hdr *)sk_ptr;
3044-
} else {
3045-
event_hdr = hci_event_hdr(skb);
30463034
}
30473035

3048-
if ((event_hdr->evt != HCI_VENDOR_PKT)
3049-
|| (event_hdr->plen != (sk_len - HCI_EVENT_HDR_SIZE)))
3050-
return 0;
3051-
30523036
sk_ptr += HCI_EVENT_HDR_SIZE;
30533037
sk_len -= HCI_EVENT_HDR_SIZE;
30543038

30553039
dump_hdr = (struct qca_dump_hdr *)sk_ptr;
3056-
if ((sk_len < offsetof(struct qca_dump_hdr, data))
3057-
|| (dump_hdr->vse_class != QCA_MEMDUMP_VSE_CLASS)
3058-
|| (dump_hdr->msg_type != QCA_MEMDUMP_MSG_TYPE))
3059-
return 0;
3060-
3061-
/*it is dump pkt now*/
30623040
seqno = le16_to_cpu(dump_hdr->seqno);
30633041
if (seqno == 0) {
30643042
set_bit(BTUSB_HW_SSR_ACTIVE, &btdata->flags);
@@ -3132,17 +3110,84 @@ static int handle_dump_pkt_qca(struct hci_dev *hdev, struct sk_buff *skb)
31323110
return ret;
31333111
}
31343112

3113+
/* Return: true if the ACL packet is a dump packet, false otherwise. */
3114+
static bool acl_pkt_is_dump_qca(struct hci_dev *hdev, struct sk_buff *skb)
3115+
{
3116+
u8 *sk_ptr;
3117+
unsigned int sk_len;
3118+
3119+
struct hci_event_hdr *event_hdr;
3120+
struct hci_acl_hdr *acl_hdr;
3121+
struct qca_dump_hdr *dump_hdr;
3122+
3123+
sk_ptr = skb->data;
3124+
sk_len = skb->len;
3125+
3126+
acl_hdr = hci_acl_hdr(skb);
3127+
if (le16_to_cpu(acl_hdr->handle) != QCA_MEMDUMP_ACL_HANDLE)
3128+
return false;
3129+
3130+
sk_ptr += HCI_ACL_HDR_SIZE;
3131+
sk_len -= HCI_ACL_HDR_SIZE;
3132+
event_hdr = (struct hci_event_hdr *)sk_ptr;
3133+
3134+
if ((event_hdr->evt != HCI_VENDOR_PKT) ||
3135+
(event_hdr->plen != (sk_len - HCI_EVENT_HDR_SIZE)))
3136+
return false;
3137+
3138+
sk_ptr += HCI_EVENT_HDR_SIZE;
3139+
sk_len -= HCI_EVENT_HDR_SIZE;
3140+
3141+
dump_hdr = (struct qca_dump_hdr *)sk_ptr;
3142+
if ((sk_len < offsetof(struct qca_dump_hdr, data)) ||
3143+
(dump_hdr->vse_class != QCA_MEMDUMP_VSE_CLASS) ||
3144+
(dump_hdr->msg_type != QCA_MEMDUMP_MSG_TYPE))
3145+
return false;
3146+
3147+
return true;
3148+
}
3149+
3150+
/* Return: true if the event packet is a dump packet, false otherwise. */
3151+
static bool evt_pkt_is_dump_qca(struct hci_dev *hdev, struct sk_buff *skb)
3152+
{
3153+
u8 *sk_ptr;
3154+
unsigned int sk_len;
3155+
3156+
struct hci_event_hdr *event_hdr;
3157+
struct qca_dump_hdr *dump_hdr;
3158+
3159+
sk_ptr = skb->data;
3160+
sk_len = skb->len;
3161+
3162+
event_hdr = hci_event_hdr(skb);
3163+
3164+
if ((event_hdr->evt != HCI_VENDOR_PKT)
3165+
|| (event_hdr->plen != (sk_len - HCI_EVENT_HDR_SIZE)))
3166+
return false;
3167+
3168+
sk_ptr += HCI_EVENT_HDR_SIZE;
3169+
sk_len -= HCI_EVENT_HDR_SIZE;
3170+
3171+
dump_hdr = (struct qca_dump_hdr *)sk_ptr;
3172+
if ((sk_len < offsetof(struct qca_dump_hdr, data)) ||
3173+
(dump_hdr->vse_class != QCA_MEMDUMP_VSE_CLASS) ||
3174+
(dump_hdr->msg_type != QCA_MEMDUMP_MSG_TYPE))
3175+
return false;
3176+
3177+
return true;
3178+
}
3179+
31353180
static int btusb_recv_acl_qca(struct hci_dev *hdev, struct sk_buff *skb)
31363181
{
3137-
if (handle_dump_pkt_qca(hdev, skb))
3138-
return 0;
3182+
if (acl_pkt_is_dump_qca(hdev, skb))
3183+
return handle_dump_pkt_qca(hdev, skb);
31393184
return hci_recv_frame(hdev, skb);
31403185
}
31413186

31423187
static int btusb_recv_evt_qca(struct hci_dev *hdev, struct sk_buff *skb)
31433188
{
3144-
if (handle_dump_pkt_qca(hdev, skb))
3145-
return 0;
3189+
if (evt_pkt_is_dump_qca(hdev, skb))
3190+
return handle_dump_pkt_qca(hdev, skb);
31463191
return hci_recv_frame(hdev, skb);
31473192
}
31483193

drivers/net/dsa/ocelot/felix_vsc9959.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1543,7 +1543,7 @@ static void vsc9959_tas_clock_adjust(struct ocelot *ocelot)
15431543
struct tc_taprio_qopt_offload *taprio;
15441544
struct ocelot_port *ocelot_port;
15451545
struct timespec64 base_ts;
1546-
int port;
1546+
int i, port;
15471547
u32 val;
15481548

15491549
mutex_lock(&ocelot->fwd_domain_lock);
@@ -1575,6 +1575,9 @@ static void vsc9959_tas_clock_adjust(struct ocelot *ocelot)
15751575
QSYS_PARAM_CFG_REG_3_BASE_TIME_SEC_MSB_M,
15761576
QSYS_PARAM_CFG_REG_3);
15771577

1578+
for (i = 0; i < taprio->num_entries; i++)
1579+
vsc9959_tas_gcl_set(ocelot, i, &taprio->entries[i]);
1580+
15781581
ocelot_rmw(ocelot, QSYS_TAS_PARAM_CFG_CTRL_CONFIG_CHANGE,
15791582
QSYS_TAS_PARAM_CFG_CTRL_CONFIG_CHANGE,
15801583
QSYS_TAS_PARAM_CFG_CTRL);

drivers/net/ethernet/amd/pds_core/auxbus.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,6 @@ void pdsc_auxbus_dev_del(struct pdsc *cf, struct pdsc *pf,
186186
pds_client_unregister(pf, padev->client_id);
187187
auxiliary_device_delete(&padev->aux_dev);
188188
auxiliary_device_uninit(&padev->aux_dev);
189-
padev->client_id = 0;
190189
*pd_ptr = NULL;
191190

192191
mutex_unlock(&pf->config_lock);

drivers/net/ethernet/amd/xgbe/xgbe-desc.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -373,8 +373,13 @@ static int xgbe_map_rx_buffer(struct xgbe_prv_data *pdata,
373373
}
374374

375375
/* Set up the header page info */
376-
xgbe_set_buffer_data(&rdata->rx.hdr, &ring->rx_hdr_pa,
377-
XGBE_SKB_ALLOC_SIZE);
376+
if (pdata->netdev->features & NETIF_F_RXCSUM) {
377+
xgbe_set_buffer_data(&rdata->rx.hdr, &ring->rx_hdr_pa,
378+
XGBE_SKB_ALLOC_SIZE);
379+
} else {
380+
xgbe_set_buffer_data(&rdata->rx.hdr, &ring->rx_hdr_pa,
381+
pdata->rx_buf_size);
382+
}
378383

379384
/* Set up the buffer page info */
380385
xgbe_set_buffer_data(&rdata->rx.buf, &ring->rx_buf_pa,

drivers/net/ethernet/amd/xgbe/xgbe-dev.c

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,18 @@ static void xgbe_config_sph_mode(struct xgbe_prv_data *pdata)
320320
XGMAC_IOWRITE_BITS(pdata, MAC_RCR, HDSMS, XGBE_SPH_HDSMS_SIZE);
321321
}
322322

323+
static void xgbe_disable_sph_mode(struct xgbe_prv_data *pdata)
324+
{
325+
unsigned int i;
326+
327+
for (i = 0; i < pdata->channel_count; i++) {
328+
if (!pdata->channel[i]->rx_ring)
329+
break;
330+
331+
XGMAC_DMA_IOWRITE_BITS(pdata->channel[i], DMA_CH_CR, SPH, 0);
332+
}
333+
}
334+
323335
static int xgbe_write_rss_reg(struct xgbe_prv_data *pdata, unsigned int type,
324336
unsigned int index, unsigned int val)
325337
{
@@ -3545,8 +3557,12 @@ static int xgbe_init(struct xgbe_prv_data *pdata)
35453557
xgbe_config_tx_coalesce(pdata);
35463558
xgbe_config_rx_buffer_size(pdata);
35473559
xgbe_config_tso_mode(pdata);
3548-
xgbe_config_sph_mode(pdata);
3549-
xgbe_config_rss(pdata);
3560+
3561+
if (pdata->netdev->features & NETIF_F_RXCSUM) {
3562+
xgbe_config_sph_mode(pdata);
3563+
xgbe_config_rss(pdata);
3564+
}
3565+
35503566
desc_if->wrapper_tx_desc_init(pdata);
35513567
desc_if->wrapper_rx_desc_init(pdata);
35523568
xgbe_enable_dma_interrupts(pdata);
@@ -3702,5 +3718,9 @@ void xgbe_init_function_ptrs_dev(struct xgbe_hw_if *hw_if)
37023718
hw_if->disable_vxlan = xgbe_disable_vxlan;
37033719
hw_if->set_vxlan_id = xgbe_set_vxlan_id;
37043720

3721+
/* For Split Header*/
3722+
hw_if->enable_sph = xgbe_config_sph_mode;
3723+
hw_if->disable_sph = xgbe_disable_sph_mode;
3724+
37053725
DBGPR("<--xgbe_init_function_ptrs\n");
37063726
}

0 commit comments

Comments
 (0)