Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'net-5.14-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net

Pull networking fixes from Jakub Kicinski:
"Networking fixes, including fixes from can and bpf.

Closing three hw-dependent regressions. Any fixes of note are in the
'old code' category. Nothing blocking release from our perspective.

Current release - regressions:

- stmmac: revert "stmmac: align RX buffers"

- usb: asix: ax88772: move embedded PHY detection as early as
possible

- usb: asix: do not call phy_disconnect() for ax88178

- Revert "net: really fix the build...", from Kalle to fix QCA6390

Current release - new code bugs:

- phy: mediatek: add the missing suspend/resume callbacks

Previous releases - regressions:

- qrtr: fix another OOB Read in qrtr_endpoint_post

- stmmac: dwmac-rk: fix unbalanced pm_runtime_enable warnings

Previous releases - always broken:

- inet: use siphash in exception handling

- ip_gre: add validation for csum_start

- bpf: fix ringbuf helper function compatibility

- rtnetlink: return correct error on changing device netns

- e1000e: do not try to recover the NVM checksum on Tiger Lake"

* tag 'net-5.14-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (43 commits)
Revert "net: really fix the build..."
net: hns3: fix get wrong pfc_en when query PFC configuration
net: hns3: fix GRO configuration error after reset
net: hns3: change the method of getting cmd index in debugfs
net: hns3: fix duplicate node in VLAN list
net: hns3: fix speed unknown issue in bond 4
net: hns3: add waiting time before cmdq memory is released
net: hns3: clear hardware resource when loading driver
net: fix NULL pointer reference in cipso_v4_doi_free
rtnetlink: Return correct error on changing device netns
net: dsa: hellcreek: Adjust schedule look ahead window
net: dsa: hellcreek: Fix incorrect setting of GCL
cxgb4: dont touch blocked freelist bitmap after free
ipv4: use siphash instead of Jenkins in fnhe_hashfun()
ipv6: use siphash in rt6_exception_hash()
can: usb: esd_usb2: esd_usb2_rx_event(): fix the interchange of the CAN RX and TX error counters
net: usb: asix: ax88772: fix boolconv.cocci warnings
net/sched: ets: fix crash when flipping from 'strict' to 'quantum'
qede: Fix memset corruption
net: stmmac: fix kernel panic due to NULL pointer dereference of buf->xdp
...

+293 -186
+1 -1
drivers/bus/mhi/core/internal.h
··· 682 682 struct image_info *img_info); 683 683 void mhi_fw_load_handler(struct mhi_controller *mhi_cntrl); 684 684 int mhi_prepare_channel(struct mhi_controller *mhi_cntrl, 685 - struct mhi_chan *mhi_chan, unsigned int flags); 685 + struct mhi_chan *mhi_chan); 686 686 int mhi_init_chan_ctxt(struct mhi_controller *mhi_cntrl, 687 687 struct mhi_chan *mhi_chan); 688 688 void mhi_deinit_chan_ctxt(struct mhi_controller *mhi_cntrl,
+3 -6
drivers/bus/mhi/core/main.c
··· 1430 1430 } 1431 1431 1432 1432 int mhi_prepare_channel(struct mhi_controller *mhi_cntrl, 1433 - struct mhi_chan *mhi_chan, unsigned int flags) 1433 + struct mhi_chan *mhi_chan) 1434 1434 { 1435 1435 int ret = 0; 1436 1436 struct device *dev = &mhi_chan->mhi_dev->dev; ··· 1455 1455 if (ret) 1456 1456 goto error_pm_state; 1457 1457 1458 - if (mhi_chan->dir == DMA_FROM_DEVICE) 1459 - mhi_chan->pre_alloc = !!(flags & MHI_CH_INBOUND_ALLOC_BUFS); 1460 - 1461 1458 /* Pre-allocate buffer for xfer ring */ 1462 1459 if (mhi_chan->pre_alloc) { 1463 1460 int nr_el = get_nr_avail_ring_elements(mhi_cntrl, ··· 1610 1613 } 1611 1614 1612 1615 /* Move channel to start state */ 1613 - int mhi_prepare_for_transfer(struct mhi_device *mhi_dev, unsigned int flags) 1616 + int mhi_prepare_for_transfer(struct mhi_device *mhi_dev) 1614 1617 { 1615 1618 int ret, dir; 1616 1619 struct mhi_controller *mhi_cntrl = mhi_dev->mhi_cntrl; ··· 1621 1624 if (!mhi_chan) 1622 1625 continue; 1623 1626 1624 - ret = mhi_prepare_channel(mhi_cntrl, mhi_chan, flags); 1627 + ret = mhi_prepare_channel(mhi_cntrl, mhi_chan); 1625 1628 if (ret) 1626 1629 goto error_open_chan; 1627 1630 }
+2 -2
drivers/net/can/usb/esd_usb2.c
··· 224 224 if (id == ESD_EV_CAN_ERROR_EXT) { 225 225 u8 state = msg->msg.rx.data[0]; 226 226 u8 ecc = msg->msg.rx.data[1]; 227 - u8 txerr = msg->msg.rx.data[2]; 228 - u8 rxerr = msg->msg.rx.data[3]; 227 + u8 rxerr = msg->msg.rx.data[2]; 228 + u8 txerr = msg->msg.rx.data[3]; 229 229 230 230 skb = alloc_can_err_skb(priv->netdev, &cf); 231 231 if (skb == NULL) {
+4 -4
drivers/net/dsa/hirschmann/hellcreek.c
··· 1472 1472 u16 data; 1473 1473 u8 gates; 1474 1474 1475 - cur++; 1476 - next++; 1477 - 1478 1475 if (i == schedule->num_entries) 1479 1476 gates = initial->gate_mask ^ 1480 1477 cur->gate_mask; ··· 1500 1503 (initial->gate_mask << 1501 1504 TR_GCLCMD_INIT_GATE_STATES_SHIFT); 1502 1505 hellcreek_write(hellcreek, data, TR_GCLCMD); 1506 + 1507 + cur++; 1508 + next++; 1503 1509 } 1504 1510 } 1505 1511 ··· 1550 1550 /* Calculate difference to admin base time */ 1551 1551 base_time_ns = ktime_to_ns(hellcreek_port->current_schedule->base_time); 1552 1552 1553 - return base_time_ns - current_ns < (s64)8 * NSEC_PER_SEC; 1553 + return base_time_ns - current_ns < (s64)4 * NSEC_PER_SEC; 1554 1554 } 1555 1555 1556 1556 static void hellcreek_start_schedule(struct hellcreek *hellcreek, int port)
+6 -5
drivers/net/dsa/mv88e6xxx/serdes.c
··· 1277 1277 int err; 1278 1278 1279 1279 /* mv88e6393x family errata 4.6: 1280 - * Cannot clear PwrDn bit on SERDES on port 0 if device is configured 1281 - * CPU_MGD mode or P0_mode is configured for [x]MII. 1282 - * Workaround: Set Port0 SERDES register 4.F002 bit 5=0 and bit 15=1. 1280 + * Cannot clear PwrDn bit on SERDES if device is configured CPU_MGD 1281 + * mode or P0_mode is configured for [x]MII. 1282 + * Workaround: Set SERDES register 4.F002 bit 5=0 and bit 15=1. 1283 1283 * 1284 1284 * It seems that after this workaround the SERDES is automatically 1285 1285 * powered up (the bit is cleared), so power it down. 1286 1286 */ 1287 - if (lane == MV88E6393X_PORT0_LANE) { 1288 - err = mv88e6390_serdes_read(chip, MV88E6393X_PORT0_LANE, 1287 + if (lane == MV88E6393X_PORT0_LANE || lane == MV88E6393X_PORT9_LANE || 1288 + lane == MV88E6393X_PORT10_LANE) { 1289 + err = mv88e6390_serdes_read(chip, lane, 1289 1290 MDIO_MMD_PHYXS, 1290 1291 MV88E6393X_SERDES_POC, &reg); 1291 1292 if (err)
+3 -1
drivers/net/ethernet/apm/xgene-v2/main.c
··· 677 677 ret = register_netdev(ndev); 678 678 if (ret) { 679 679 netdev_err(ndev, "Failed to register netdev\n"); 680 - goto err; 680 + goto err_mdio_remove; 681 681 } 682 682 683 683 return 0; 684 684 685 + err_mdio_remove: 686 + xge_mdio_remove(ndev); 685 687 err: 686 688 free_netdev(ndev); 687 689
+10 -1
drivers/net/ethernet/cadence/macb_ptp.c
··· 275 275 276 276 if (GEM_BFEXT(DMA_RXVALID, desc->addr)) { 277 277 desc_ptp = macb_ptp_desc(bp, desc); 278 + /* Unlikely but check */ 279 + if (!desc_ptp) { 280 + dev_warn_ratelimited(&bp->pdev->dev, 281 + "Timestamp not supported in BD\n"); 282 + return; 283 + } 278 284 gem_hw_timestamp(bp, desc_ptp->ts_1, desc_ptp->ts_2, &ts); 279 285 memset(shhwtstamps, 0, sizeof(struct skb_shared_hwtstamps)); 280 286 shhwtstamps->hwtstamp = ktime_set(ts.tv_sec, ts.tv_nsec); ··· 313 307 if (CIRC_SPACE(head, tail, PTP_TS_BUFFER_SIZE) == 0) 314 308 return -ENOMEM; 315 309 316 - skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS; 317 310 desc_ptp = macb_ptp_desc(queue->bp, desc); 311 + /* Unlikely but check */ 312 + if (!desc_ptp) 313 + return -EINVAL; 314 + skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS; 318 315 tx_timestamp = &queue->tx_timestamps[head]; 319 316 tx_timestamp->skb = skb; 320 317 /* ensure ts_1/ts_2 is loaded after ctrl (TX_USED check) */
+3 -4
drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
··· 5068 5068 ret = -ENOMEM; 5069 5069 goto bye; 5070 5070 } 5071 + bitmap_zero(adap->sge.blocked_fl, adap->sge.egr_sz); 5071 5072 #endif 5072 5073 5073 5074 params[0] = FW_PARAM_PFVF(CLIP_START); ··· 6789 6788 6790 6789 setup_memwin(adapter); 6791 6790 err = adap_init0(adapter, 0); 6792 - #ifdef CONFIG_DEBUG_FS 6793 - bitmap_zero(adapter->sge.blocked_fl, adapter->sge.egr_sz); 6794 - #endif 6795 - setup_memwin_rdma(adapter); 6796 6791 if (err) 6797 6792 goto out_unmap_bar; 6793 + 6794 + setup_memwin_rdma(adapter); 6798 6795 6799 6796 /* configure SGE_STAT_CFG_A to read WC stats */ 6800 6797 if (!is_t4(adapter->params.chip))
+7 -7
drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c
··· 938 938 return 0; 939 939 } 940 940 941 - static int hns3_dbg_get_cmd_index(struct hnae3_handle *handle, 942 - const unsigned char *name, u32 *index) 941 + static int hns3_dbg_get_cmd_index(struct hns3_dbg_data *dbg_data, u32 *index) 943 942 { 944 943 u32 i; 945 944 946 945 for (i = 0; i < ARRAY_SIZE(hns3_dbg_cmd); i++) { 947 - if (!strncmp(name, hns3_dbg_cmd[i].name, 948 - strlen(hns3_dbg_cmd[i].name))) { 946 + if (hns3_dbg_cmd[i].cmd == dbg_data->cmd) { 949 947 *index = i; 950 948 return 0; 951 949 } 952 950 } 953 951 954 - dev_err(&handle->pdev->dev, "unknown command(%s)\n", name); 952 + dev_err(&dbg_data->handle->pdev->dev, "unknown command(%d)\n", 953 + dbg_data->cmd); 955 954 return -EINVAL; 956 955 } 957 956 ··· 1018 1019 u32 index; 1019 1020 int ret; 1020 1021 1021 - ret = hns3_dbg_get_cmd_index(handle, filp->f_path.dentry->d_iname, 1022 - &index); 1022 + ret = hns3_dbg_get_cmd_index(dbg_data, &index); 1023 1023 if (ret) 1024 1024 return ret; 1025 1025 ··· 1088 1090 char name[HNS3_DBG_FILE_NAME_LEN]; 1089 1091 1090 1092 data[i].handle = handle; 1093 + data[i].cmd = hns3_dbg_cmd[cmd].cmd; 1091 1094 data[i].qid = i; 1092 1095 sprintf(name, "%s%u", hns3_dbg_cmd[cmd].name, i); 1093 1096 debugfs_create_file(name, 0400, entry_dir, &data[i], ··· 1109 1110 return -ENOMEM; 1110 1111 1111 1112 data->handle = handle; 1113 + data->cmd = hns3_dbg_cmd[cmd].cmd; 1112 1114 entry_dir = hns3_dbg_dentry[hns3_dbg_cmd[cmd].dentry].dentry; 1113 1115 debugfs_create_file(hns3_dbg_cmd[cmd].name, 0400, entry_dir, 1114 1116 data, &hns3_dbg_fops);
+1
drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.h
··· 22 22 23 23 struct hns3_dbg_data { 24 24 struct hnae3_handle *handle; 25 + enum hnae3_dbg_cmd cmd; 25 26 u16 qid; 26 27 }; 27 28
+5 -1
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.c
··· 573 573 574 574 void hclge_cmd_uninit(struct hclge_dev *hdev) 575 575 { 576 + set_bit(HCLGE_STATE_CMD_DISABLE, &hdev->state); 577 + /* wait to ensure that the firmware completes the possible left 578 + * over commands. 579 + */ 580 + msleep(HCLGE_CMDQ_CLEAR_WAIT_TIME); 576 581 spin_lock_bh(&hdev->hw.cmq.csq.lock); 577 582 spin_lock(&hdev->hw.cmq.crq.lock); 578 - set_bit(HCLGE_STATE_CMD_DISABLE, &hdev->state); 579 583 hclge_cmd_uninit_regs(&hdev->hw); 580 584 spin_unlock(&hdev->hw.cmq.crq.lock); 581 585 spin_unlock_bh(&hdev->hw.cmq.csq.lock);
+4
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h
··· 9 9 #include "hnae3.h" 10 10 11 11 #define HCLGE_CMDQ_TX_TIMEOUT 30000 12 + #define HCLGE_CMDQ_CLEAR_WAIT_TIME 200 12 13 #define HCLGE_DESC_DATA_LEN 6 13 14 14 15 struct hclge_dev; ··· 270 269 271 270 /* Led command */ 272 271 HCLGE_OPC_LED_STATUS_CFG = 0xB000, 272 + 273 + /* clear hardware resource command */ 274 + HCLGE_OPC_CLEAR_HW_RESOURCE = 0x700B, 273 275 274 276 /* NCL config command */ 275 277 HCLGE_OPC_QUERY_NCL_CONFIG = 0x7011,
+2 -11
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_dcb.c
··· 255 255 u64 requests[HNAE3_MAX_TC], indications[HNAE3_MAX_TC]; 256 256 struct hclge_vport *vport = hclge_get_vport(h); 257 257 struct hclge_dev *hdev = vport->back; 258 - u8 i, j, pfc_map, *prio_tc; 259 258 int ret; 259 + u8 i; 260 260 261 261 memset(pfc, 0, sizeof(*pfc)); 262 262 pfc->pfc_cap = hdev->pfc_max; 263 - prio_tc = hdev->tm_info.prio_tc; 264 - pfc_map = hdev->tm_info.hw_pfc_map; 265 - 266 - /* Pfc setting is based on TC */ 267 - for (i = 0; i < hdev->tm_info.num_tc; i++) { 268 - for (j = 0; j < HNAE3_MAX_USER_PRIO; j++) { 269 - if ((prio_tc[j] == i) && (pfc_map & BIT(i))) 270 - pfc->pfc_en |= BIT(j); 271 - } 272 - } 263 + pfc->pfc_en = hdev->tm_info.pfc_en; 273 264 274 265 ret = hclge_pfc_tx_stats_get(hdev, requests); 275 266 if (ret)
+45 -7
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
··· 1550 1550 hdev->tm_info.hw_pfc_map = 0; 1551 1551 hdev->wanted_umv_size = cfg.umv_space; 1552 1552 hdev->tx_spare_buf_size = cfg.tx_spare_buf_size; 1553 + hdev->gro_en = true; 1553 1554 if (cfg.vlan_fliter_cap == HCLGE_VLAN_FLTR_CAN_MDF) 1554 1555 set_bit(HNAE3_DEV_SUPPORT_VLAN_FLTR_MDF_B, ae_dev->caps); 1555 1556 ··· 1619 1618 return hclge_cmd_send(&hdev->hw, &desc, 1); 1620 1619 } 1621 1620 1622 - static int hclge_config_gro(struct hclge_dev *hdev, bool en) 1621 + static int hclge_config_gro(struct hclge_dev *hdev) 1623 1622 { 1624 1623 struct hclge_cfg_gro_status_cmd *req; 1625 1624 struct hclge_desc desc; ··· 1631 1630 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_GRO_GENERIC_CONFIG, false); 1632 1631 req = (struct hclge_cfg_gro_status_cmd *)desc.data; 1633 1632 1634 - req->gro_en = en ? 1 : 0; 1633 + req->gro_en = hdev->gro_en ? 1 : 0; 1635 1634 1636 1635 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 1637 1636 if (ret) ··· 2953 2952 } 2954 2953 2955 2954 if (state != hdev->hw.mac.link) { 2955 + hdev->hw.mac.link = state; 2956 2956 client->ops->link_status_change(handle, state); 2957 2957 hclge_config_mac_tnl_int(hdev, state); 2958 2958 if (rclient && rclient->ops->link_status_change) 2959 2959 rclient->ops->link_status_change(rhandle, state); 2960 2960 2961 - hdev->hw.mac.link = state; 2962 2961 hclge_push_link_status(hdev); 2963 2962 } 2964 2963 ··· 10074 10073 static void hclge_add_vport_vlan_table(struct hclge_vport *vport, u16 vlan_id, 10075 10074 bool writen_to_tbl) 10076 10075 { 10077 - struct hclge_vport_vlan_cfg *vlan; 10076 + struct hclge_vport_vlan_cfg *vlan, *tmp; 10077 + 10078 + list_for_each_entry_safe(vlan, tmp, &vport->vlan_list, node) 10079 + if (vlan->vlan_id == vlan_id) 10080 + return; 10078 10081 10079 10082 vlan = kzalloc(sizeof(*vlan), GFP_KERNEL); 10080 10083 if (!vlan) ··· 11448 11443 } 11449 11444 } 11450 11445 11446 + static int hclge_clear_hw_resource(struct hclge_dev *hdev) 11447 + { 11448 + struct hclge_desc desc; 11449 + int ret; 11450 + 11451 + hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_CLEAR_HW_RESOURCE, false); 11452 + 11453 + ret = hclge_cmd_send(&hdev->hw, &desc, 1); 11454 + /* This new command is only supported by new firmware, it will 11455 + * fail with older firmware. Error value -EOPNOSUPP can only be 11456 + * returned by older firmware running this command, to keep code 11457 + * backward compatible we will override this value and return 11458 + * success. 11459 + */ 11460 + if (ret && ret != -EOPNOTSUPP) { 11461 + dev_err(&hdev->pdev->dev, 11462 + "failed to clear hw resource, ret = %d\n", ret); 11463 + return ret; 11464 + } 11465 + return 0; 11466 + } 11467 + 11451 11468 static void hclge_init_rxd_adv_layout(struct hclge_dev *hdev) 11452 11469 { 11453 11470 if (hnae3_ae_dev_rxd_adv_layout_supported(hdev->ae_dev)) ··· 11516 11489 11517 11490 /* Firmware command initialize */ 11518 11491 ret = hclge_cmd_init(hdev); 11492 + if (ret) 11493 + goto err_cmd_uninit; 11494 + 11495 + ret = hclge_clear_hw_resource(hdev); 11519 11496 if (ret) 11520 11497 goto err_cmd_uninit; 11521 11498 ··· 11587 11556 goto err_mdiobus_unreg; 11588 11557 } 11589 11558 11590 - ret = hclge_config_gro(hdev, true); 11559 + ret = hclge_config_gro(hdev); 11591 11560 if (ret) 11592 11561 goto err_mdiobus_unreg; 11593 11562 ··· 11968 11937 return ret; 11969 11938 } 11970 11939 11971 - ret = hclge_config_gro(hdev, true); 11940 + ret = hclge_config_gro(hdev); 11972 11941 if (ret) 11973 11942 return ret; 11974 11943 ··· 12702 12671 { 12703 12672 struct hclge_vport *vport = hclge_get_vport(handle); 12704 12673 struct hclge_dev *hdev = vport->back; 12674 + bool gro_en_old = hdev->gro_en; 12675 + int ret; 12705 12676 12706 - return hclge_config_gro(hdev, enable); 12677 + hdev->gro_en = enable; 12678 + ret = hclge_config_gro(hdev); 12679 + if (ret) 12680 + hdev->gro_en = gro_en_old; 12681 + 12682 + return ret; 12707 12683 } 12708 12684 12709 12685 static void hclge_sync_promisc_mode(struct hclge_dev *hdev)
+1
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h
··· 927 927 unsigned long fd_bmap[BITS_TO_LONGS(MAX_FD_FILTER_NUM)]; 928 928 enum HCLGE_FD_ACTIVE_RULE_TYPE fd_active_type; 929 929 u8 fd_en; 930 + bool gro_en; 930 931 931 932 u16 wanted_umv_size; 932 933 /* max available unicast mac vlan space */
+6 -1
drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_cmd.c
··· 507 507 508 508 void hclgevf_cmd_uninit(struct hclgevf_dev *hdev) 509 509 { 510 + set_bit(HCLGEVF_STATE_CMD_DISABLE, &hdev->state); 511 + /* wait to ensure that the firmware completes the possible left 512 + * over commands. 513 + */ 514 + msleep(HCLGEVF_CMDQ_CLEAR_WAIT_TIME); 510 515 spin_lock_bh(&hdev->hw.cmq.csq.lock); 511 516 spin_lock(&hdev->hw.cmq.crq.lock); 512 - set_bit(HCLGEVF_STATE_CMD_DISABLE, &hdev->state); 513 517 hclgevf_cmd_uninit_regs(&hdev->hw); 514 518 spin_unlock(&hdev->hw.cmq.crq.lock); 515 519 spin_unlock_bh(&hdev->hw.cmq.csq.lock); 520 + 516 521 hclgevf_free_cmd_desc(&hdev->hw.cmq.csq); 517 522 hclgevf_free_cmd_desc(&hdev->hw.cmq.crq); 518 523 }
+1
drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_cmd.h
··· 8 8 #include "hnae3.h" 9 9 10 10 #define HCLGEVF_CMDQ_TX_TIMEOUT 30000 11 + #define HCLGEVF_CMDQ_CLEAR_WAIT_TIME 200 11 12 #define HCLGEVF_CMDQ_RX_INVLD_B 0 12 13 #define HCLGEVF_CMDQ_RX_OUTVLD_B 1 13 14
+15 -6
drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
··· 506 506 link_state = 507 507 test_bit(HCLGEVF_STATE_DOWN, &hdev->state) ? 0 : link_state; 508 508 if (link_state != hdev->hw.mac.link) { 509 + hdev->hw.mac.link = link_state; 509 510 client->ops->link_status_change(handle, !!link_state); 510 511 if (rclient && rclient->ops->link_status_change) 511 512 rclient->ops->link_status_change(rhandle, !!link_state); 512 - hdev->hw.mac.link = link_state; 513 513 } 514 514 515 515 clear_bit(HCLGEVF_STATE_LINK_UPDATING, &hdev->state); ··· 2487 2487 { 2488 2488 int ret; 2489 2489 2490 + hdev->gro_en = true; 2491 + 2490 2492 ret = hclgevf_get_basic_info(hdev); 2491 2493 if (ret) 2492 2494 return ret; ··· 2551 2549 return 0; 2552 2550 } 2553 2551 2554 - static int hclgevf_config_gro(struct hclgevf_dev *hdev, bool en) 2552 + static int hclgevf_config_gro(struct hclgevf_dev *hdev) 2555 2553 { 2556 2554 struct hclgevf_cfg_gro_status_cmd *req; 2557 2555 struct hclgevf_desc desc; ··· 2564 2562 false); 2565 2563 req = (struct hclgevf_cfg_gro_status_cmd *)desc.data; 2566 2564 2567 - req->gro_en = en ? 1 : 0; 2565 + req->gro_en = hdev->gro_en ? 1 : 0; 2568 2566 2569 2567 ret = hclgevf_cmd_send(&hdev->hw, &desc, 1); 2570 2568 if (ret) ··· 3310 3308 return ret; 3311 3309 } 3312 3310 3313 - ret = hclgevf_config_gro(hdev, true); 3311 + ret = hclgevf_config_gro(hdev); 3314 3312 if (ret) 3315 3313 return ret; 3316 3314 ··· 3391 3389 if (ret) 3392 3390 goto err_config; 3393 3391 3394 - ret = hclgevf_config_gro(hdev, true); 3392 + ret = hclgevf_config_gro(hdev); 3395 3393 if (ret) 3396 3394 goto err_config; 3397 3395 ··· 3640 3638 static int hclgevf_gro_en(struct hnae3_handle *handle, bool enable) 3641 3639 { 3642 3640 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); 3641 + bool gro_en_old = hdev->gro_en; 3642 + int ret; 3643 3643 3644 - return hclgevf_config_gro(hdev, enable); 3644 + hdev->gro_en = enable; 3645 + ret = hclgevf_config_gro(hdev); 3646 + if (ret) 3647 + hdev->gro_en = gro_en_old; 3648 + 3649 + return ret; 3645 3650 } 3646 3651 3647 3652 static void hclgevf_get_media_type(struct hnae3_handle *handle, u8 *media_type,
+2
drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.h
··· 310 310 u16 *vector_status; 311 311 int *vector_irq; 312 312 313 + bool gro_en; 314 + 313 315 unsigned long vlan_del_fail_bmap[BITS_TO_LONGS(VLAN_N_VID)]; 314 316 315 317 struct hclgevf_mac_table_cfg mac_table;
+1 -1
drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_mbx.c
··· 323 323 flag = (u8)msg_q[5]; 324 324 325 325 /* update upper layer with new link link status */ 326 - hclgevf_update_link_status(hdev, link_status); 327 326 hclgevf_update_speed_duplex(hdev, speed, duplex); 327 + hclgevf_update_link_status(hdev, link_status); 328 328 329 329 if (flag & HCLGE_MBX_PUSH_LINK_STATUS_EN) 330 330 set_bit(HCLGEVF_STATE_PF_PUSH_LINK_STATUS,
+24 -8
drivers/net/ethernet/intel/e1000e/ich8lan.c
··· 1006 1006 { 1007 1007 u32 reg = link << (E1000_LTRV_REQ_SHIFT + E1000_LTRV_NOSNOOP_SHIFT) | 1008 1008 link << E1000_LTRV_REQ_SHIFT | E1000_LTRV_SEND; 1009 + u16 max_ltr_enc_d = 0; /* maximum LTR decoded by platform */ 1010 + u16 lat_enc_d = 0; /* latency decoded */ 1009 1011 u16 lat_enc = 0; /* latency encoded */ 1010 1012 1011 1013 if (link) { ··· 1061 1059 E1000_PCI_LTR_CAP_LPT + 2, &max_nosnoop); 1062 1060 max_ltr_enc = max_t(u16, max_snoop, max_nosnoop); 1063 1061 1064 - if (lat_enc > max_ltr_enc) 1062 + lat_enc_d = (lat_enc & E1000_LTRV_VALUE_MASK) * 1063 + (1U << (E1000_LTRV_SCALE_FACTOR * 1064 + ((lat_enc & E1000_LTRV_SCALE_MASK) 1065 + >> E1000_LTRV_SCALE_SHIFT))); 1066 + 1067 + max_ltr_enc_d = (max_ltr_enc & E1000_LTRV_VALUE_MASK) * 1068 + (1U << (E1000_LTRV_SCALE_FACTOR * 1069 + ((max_ltr_enc & E1000_LTRV_SCALE_MASK) 1070 + >> E1000_LTRV_SCALE_SHIFT))); 1071 + 1072 + if (lat_enc_d > max_ltr_enc_d) 1065 1073 lat_enc = max_ltr_enc; 1066 1074 } 1067 1075 ··· 4127 4115 return ret_val; 4128 4116 4129 4117 if (!(data & valid_csum_mask)) { 4130 - data |= valid_csum_mask; 4131 - ret_val = e1000_write_nvm(hw, word, 1, &data); 4132 - if (ret_val) 4133 - return ret_val; 4134 - ret_val = e1000e_update_nvm_checksum(hw); 4135 - if (ret_val) 4136 - return ret_val; 4118 + e_dbg("NVM Checksum Invalid\n"); 4119 + 4120 + if (hw->mac.type < e1000_pch_cnp) { 4121 + data |= valid_csum_mask; 4122 + ret_val = e1000_write_nvm(hw, word, 1, &data); 4123 + if (ret_val) 4124 + return ret_val; 4125 + ret_val = e1000e_update_nvm_checksum(hw); 4126 + if (ret_val) 4127 + return ret_val; 4128 + } 4137 4129 } 4138 4130 4139 4131 return e1000e_validate_nvm_checksum_generic(hw);
+3
drivers/net/ethernet/intel/e1000e/ich8lan.h
··· 274 274 275 275 /* Latency Tolerance Reporting */ 276 276 #define E1000_LTRV 0x000F8 277 + #define E1000_LTRV_VALUE_MASK 0x000003FF 277 278 #define E1000_LTRV_SCALE_MAX 5 278 279 #define E1000_LTRV_SCALE_FACTOR 5 280 + #define E1000_LTRV_SCALE_SHIFT 10 281 + #define E1000_LTRV_SCALE_MASK 0x00001C00 279 282 #define E1000_LTRV_REQ_SHIFT 15 280 283 #define E1000_LTRV_NOSNOOP_SHIFT 16 281 284 #define E1000_LTRV_SEND (1 << 30)
+3 -1
drivers/net/ethernet/intel/ice/ice_devlink.c
··· 42 42 43 43 status = ice_read_pba_string(hw, (u8 *)ctx->buf, sizeof(ctx->buf)); 44 44 if (status) 45 - return -EIO; 45 + /* We failed to locate the PBA, so just skip this entry */ 46 + dev_dbg(ice_pf_to_dev(pf), "Failed to read Product Board Assembly string, status %s\n", 47 + ice_stat_str(status)); 46 48 47 49 return 0; 48 50 }
+21 -15
drivers/net/ethernet/intel/igc/igc_main.c
··· 149 149 struct igc_hw *hw = &adapter->hw; 150 150 u32 ctrl_ext; 151 151 152 + if (!pci_device_is_present(adapter->pdev)) 153 + return; 154 + 152 155 /* Let firmware take over control of h/w */ 153 156 ctrl_ext = rd32(IGC_CTRL_EXT); 154 157 wr32(IGC_CTRL_EXT, ··· 4452 4449 4453 4450 igc_ptp_suspend(adapter); 4454 4451 4455 - /* disable receives in the hardware */ 4456 - rctl = rd32(IGC_RCTL); 4457 - wr32(IGC_RCTL, rctl & ~IGC_RCTL_EN); 4458 - /* flush and sleep below */ 4459 - 4452 + if (pci_device_is_present(adapter->pdev)) { 4453 + /* disable receives in the hardware */ 4454 + rctl = rd32(IGC_RCTL); 4455 + wr32(IGC_RCTL, rctl & ~IGC_RCTL_EN); 4456 + /* flush and sleep below */ 4457 + } 4460 4458 /* set trans_start so we don't get spurious watchdogs during reset */ 4461 4459 netif_trans_update(netdev); 4462 4460 4463 4461 netif_carrier_off(netdev); 4464 4462 netif_tx_stop_all_queues(netdev); 4465 4463 4466 - /* disable transmits in the hardware */ 4467 - tctl = rd32(IGC_TCTL); 4468 - tctl &= ~IGC_TCTL_EN; 4469 - wr32(IGC_TCTL, tctl); 4470 - /* flush both disables and wait for them to finish */ 4471 - wrfl(); 4472 - usleep_range(10000, 20000); 4464 + if (pci_device_is_present(adapter->pdev)) { 4465 + /* disable transmits in the hardware */ 4466 + tctl = rd32(IGC_TCTL); 4467 + tctl &= ~IGC_TCTL_EN; 4468 + wr32(IGC_TCTL, tctl); 4469 + /* flush both disables and wait for them to finish */ 4470 + wrfl(); 4471 + usleep_range(10000, 20000); 4473 4472 4474 - igc_irq_disable(adapter); 4473 + igc_irq_disable(adapter); 4474 + } 4475 4475 4476 4476 adapter->flags &= ~IGC_FLAG_NEED_LINK_UPDATE; 4477 4477 ··· 5495 5489 if (e->command != TC_TAPRIO_CMD_SET_GATES) 5496 5490 return false; 5497 5491 5498 - for (i = 0; i < IGC_MAX_TX_QUEUES; i++) { 5492 + for (i = 0; i < adapter->num_tx_queues; i++) { 5499 5493 if (e->gate_mask & BIT(i)) 5500 5494 queue_uses[i]++; 5501 5495 ··· 5552 5546 5553 5547 end_time += e->interval; 5554 5548 5555 - for (i = 0; i < IGC_MAX_TX_QUEUES; i++) { 5549 + for (i = 0; i < adapter->num_tx_queues; i++) { 5556 5550 struct igc_ring *ring = adapter->tx_ring[i]; 5557 5551 5558 5552 if (!(e->gate_mask & BIT(i)))
+2 -1
drivers/net/ethernet/intel/igc/igc_ptp.c
··· 849 849 adapter->ptp_tx_skb = NULL; 850 850 clear_bit_unlock(__IGC_PTP_TX_IN_PROGRESS, &adapter->state); 851 851 852 - igc_ptp_time_save(adapter); 852 + if (pci_device_is_present(adapter->pdev)) 853 + igc_ptp_time_save(adapter); 853 854 } 854 855 855 856 /**
+1 -1
drivers/net/ethernet/marvell/mvneta.c
··· 105 105 #define MVNETA_VLAN_PRIO_TO_RXQ 0x2440 106 106 #define MVNETA_VLAN_PRIO_RXQ_MAP(prio, rxq) ((rxq) << ((prio) * 3)) 107 107 #define MVNETA_PORT_STATUS 0x2444 108 - #define MVNETA_TX_IN_PRGRS BIT(1) 108 + #define MVNETA_TX_IN_PRGRS BIT(0) 109 109 #define MVNETA_TX_FIFO_EMPTY BIT(8) 110 110 #define MVNETA_RX_MIN_FRAME_SIZE 0x247c 111 111 /* Only exists on Armada XP and Armada 370 */
+6 -1
drivers/net/ethernet/qlogic/qed/qed_main.c
··· 616 616 rc = cnt; 617 617 } 618 618 619 - if (rc > 0) { 619 + /* For VFs, we should return with an error in case we didn't get the 620 + * exact number of msix vectors as we requested. 621 + * Not doing that will lead to a crash when starting queues for 622 + * this VF. 623 + */ 624 + if ((IS_PF(cdev) && rc > 0) || (IS_VF(cdev) && rc == cnt)) { 620 625 /* MSI-x configuration was achieved */ 621 626 int_params->out.int_mode = QED_INT_MODE_MSIX; 622 627 int_params->out.num_vectors = rc;
+1 -1
drivers/net/ethernet/qlogic/qede/qede_main.c
··· 1874 1874 } 1875 1875 1876 1876 edev->int_info.used_cnt = 0; 1877 + edev->int_info.msix_cnt = 0; 1877 1878 } 1878 1879 1879 1880 static int qede_req_msix_irqs(struct qede_dev *edev) ··· 2428 2427 goto out; 2429 2428 err4: 2430 2429 qede_sync_free_irqs(edev); 2431 - memset(&edev->int_info.msix_cnt, 0, sizeof(struct qed_int_info)); 2432 2430 err3: 2433 2431 qede_napi_disable_remove(edev); 2434 2432 err2:
-9
drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
··· 21 21 #include <linux/delay.h> 22 22 #include <linux/mfd/syscon.h> 23 23 #include <linux/regmap.h> 24 - #include <linux/pm_runtime.h> 25 24 26 25 #include "stmmac_platform.h" 27 26 ··· 1528 1529 return ret; 1529 1530 } 1530 1531 1531 - pm_runtime_enable(dev); 1532 - pm_runtime_get_sync(dev); 1533 - 1534 1532 if (bsp_priv->integrated_phy) 1535 1533 rk_gmac_integrated_phy_powerup(bsp_priv); 1536 1534 ··· 1536 1540 1537 1541 static void rk_gmac_powerdown(struct rk_priv_data *gmac) 1538 1542 { 1539 - struct device *dev = &gmac->pdev->dev; 1540 - 1541 1543 if (gmac->integrated_phy) 1542 1544 rk_gmac_integrated_phy_powerdown(gmac); 1543 - 1544 - pm_runtime_put_sync(dev); 1545 - pm_runtime_disable(dev); 1546 1545 1547 1546 phy_power_on(gmac, false); 1548 1547 gmac_clk_enable(gmac, false);
+2 -2
drivers/net/ethernet/stmicro/stmmac/stmmac.h
··· 339 339 static inline unsigned int stmmac_rx_offset(struct stmmac_priv *priv) 340 340 { 341 341 if (stmmac_xdp_is_enabled(priv)) 342 - return XDP_PACKET_HEADROOM + NET_IP_ALIGN; 342 + return XDP_PACKET_HEADROOM; 343 343 344 - return NET_SKB_PAD + NET_IP_ALIGN; 344 + return 0; 345 345 } 346 346 347 347 void stmmac_disable_rx_queue(struct stmmac_priv *priv, u32 queue);
+4 -4
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
··· 4914 4914 4915 4915 prefetch(np); 4916 4916 4917 + /* Ensure a valid XSK buffer before proceed */ 4918 + if (!buf->xdp) 4919 + break; 4920 + 4917 4921 if (priv->extend_desc) 4918 4922 stmmac_rx_extended_status(priv, &priv->dev->stats, 4919 4923 &priv->xstats, ··· 4937 4933 count++; 4938 4934 continue; 4939 4935 } 4940 - 4941 - /* Ensure a valid XSK buffer before proceed */ 4942 - if (!buf->xdp) 4943 - break; 4944 4936 4945 4937 /* XSK pool expects RX frame 1:1 mapped to XSK buffer */ 4946 4938 if (likely(status & rx_not_ls)) {
+7 -5
drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c
··· 884 884 return 0; 885 885 886 886 disable: 887 - mutex_lock(&priv->plat->est->lock); 888 - priv->plat->est->enable = false; 889 - stmmac_est_configure(priv, priv->ioaddr, priv->plat->est, 890 - priv->plat->clk_ptp_rate); 891 - mutex_unlock(&priv->plat->est->lock); 887 + if (priv->plat->est) { 888 + mutex_lock(&priv->plat->est->lock); 889 + priv->plat->est->enable = false; 890 + stmmac_est_configure(priv, priv->ioaddr, priv->plat->est, 891 + priv->plat->clk_ptp_rate); 892 + mutex_unlock(&priv->plat->est->lock); 893 + } 892 894 893 895 priv->plat->fpe_cfg->enable = false; 894 896 stmmac_fpe_configure(priv, priv->ioaddr,
+6 -6
drivers/net/ethernet/stmicro/stmmac/stmmac_xdp.c
··· 34 34 need_update = netif_running(priv->dev) && stmmac_xdp_is_enabled(priv); 35 35 36 36 if (need_update) { 37 - stmmac_disable_rx_queue(priv, queue); 38 - stmmac_disable_tx_queue(priv, queue); 39 37 napi_disable(&ch->rx_napi); 40 38 napi_disable(&ch->tx_napi); 39 + stmmac_disable_rx_queue(priv, queue); 40 + stmmac_disable_tx_queue(priv, queue); 41 41 } 42 42 43 43 set_bit(queue, priv->af_xdp_zc_qps); 44 44 45 45 if (need_update) { 46 - napi_enable(&ch->rxtx_napi); 47 46 stmmac_enable_rx_queue(priv, queue); 48 47 stmmac_enable_tx_queue(priv, queue); 48 + napi_enable(&ch->rxtx_napi); 49 49 50 50 err = stmmac_xsk_wakeup(priv->dev, queue, XDP_WAKEUP_RX); 51 51 if (err) ··· 72 72 need_update = netif_running(priv->dev) && stmmac_xdp_is_enabled(priv); 73 73 74 74 if (need_update) { 75 + napi_disable(&ch->rxtx_napi); 75 76 stmmac_disable_rx_queue(priv, queue); 76 77 stmmac_disable_tx_queue(priv, queue); 77 78 synchronize_rcu(); 78 - napi_disable(&ch->rxtx_napi); 79 79 } 80 80 81 81 xsk_pool_dma_unmap(pool, STMMAC_RX_DMA_ATTR); ··· 83 83 clear_bit(queue, priv->af_xdp_zc_qps); 84 84 85 85 if (need_update) { 86 - napi_enable(&ch->rx_napi); 87 - napi_enable(&ch->tx_napi); 88 86 stmmac_enable_rx_queue(priv, queue); 89 87 stmmac_enable_tx_queue(priv, queue); 88 + napi_enable(&ch->rx_napi); 89 + napi_enable(&ch->tx_napi); 90 90 } 91 91 92 92 return 0;
+1 -1
drivers/net/mhi/net.c
··· 335 335 u64_stats_init(&mhi_netdev->stats.tx_syncp); 336 336 337 337 /* Start MHI channels */ 338 - err = mhi_prepare_for_transfer(mhi_dev, 0); 338 + err = mhi_prepare_for_transfer(mhi_dev); 339 339 if (err) 340 340 goto out_err; 341 341
+4
drivers/net/phy/mediatek-ge.c
··· 81 81 */ 82 82 .config_intr = genphy_no_config_intr, 83 83 .handle_interrupt = genphy_handle_interrupt_no_ack, 84 + .suspend = genphy_suspend, 85 + .resume = genphy_resume, 84 86 .read_page = mtk_gephy_read_page, 85 87 .write_page = mtk_gephy_write_page, 86 88 }, ··· 95 93 */ 96 94 .config_intr = genphy_no_config_intr, 97 95 .handle_interrupt = genphy_handle_interrupt_no_ack, 96 + .suspend = genphy_suspend, 97 + .resume = genphy_resume, 98 98 .read_page = mtk_gephy_read_page, 99 99 .write_page = mtk_gephy_write_page, 100 100 },
+1
drivers/net/usb/asix.h
··· 184 184 struct phy_device *phydev; 185 185 u16 phy_addr; 186 186 char phy_name[20]; 187 + bool embd_phy; 187 188 }; 188 189 189 190 extern const struct driver_info ax88172a_info;
+27 -22
drivers/net/usb/asix_devices.c
··· 354 354 static int ax88772_hw_reset(struct usbnet *dev, int in_pm) 355 355 { 356 356 struct asix_data *data = (struct asix_data *)&dev->data; 357 - int ret, embd_phy; 357 + struct asix_common_private *priv = dev->driver_priv; 358 358 u16 rx_ctl; 359 + int ret; 359 360 360 361 ret = asix_write_gpio(dev, AX_GPIO_RSE | AX_GPIO_GPO_2 | 361 362 AX_GPIO_GPO2EN, 5, in_pm); 362 363 if (ret < 0) 363 364 goto out; 364 365 365 - embd_phy = ((dev->mii.phy_id & 0x1f) == 0x10 ? 1 : 0); 366 - 367 - ret = asix_write_cmd(dev, AX_CMD_SW_PHY_SELECT, embd_phy, 366 + ret = asix_write_cmd(dev, AX_CMD_SW_PHY_SELECT, priv->embd_phy, 368 367 0, 0, NULL, in_pm); 369 368 if (ret < 0) { 370 369 netdev_dbg(dev->net, "Select PHY #1 failed: %d\n", ret); 371 370 goto out; 372 371 } 373 372 374 - if (embd_phy) { 373 + if (priv->embd_phy) { 375 374 ret = asix_sw_reset(dev, AX_SWRESET_IPPD, in_pm); 376 375 if (ret < 0) 377 376 goto out; ··· 448 449 static int ax88772a_hw_reset(struct usbnet *dev, int in_pm) 449 450 { 450 451 struct asix_data *data = (struct asix_data *)&dev->data; 451 - int ret, embd_phy; 452 + struct asix_common_private *priv = dev->driver_priv; 452 453 u16 rx_ctl, phy14h, phy15h, phy16h; 453 454 u8 chipcode = 0; 455 + int ret; 454 456 455 457 ret = asix_write_gpio(dev, AX_GPIO_RSE, 5, in_pm); 456 458 if (ret < 0) 457 459 goto out; 458 460 459 - embd_phy = ((dev->mii.phy_id & 0x1f) == 0x10 ? 1 : 0); 460 - 461 - ret = asix_write_cmd(dev, AX_CMD_SW_PHY_SELECT, embd_phy | 461 + ret = asix_write_cmd(dev, AX_CMD_SW_PHY_SELECT, priv->embd_phy | 462 462 AX_PHYSEL_SSEN, 0, 0, NULL, in_pm); 463 463 if (ret < 0) { 464 464 netdev_dbg(dev->net, "Select PHY #1 failed: %d\n", ret); ··· 681 683 struct asix_common_private *priv = dev->driver_priv; 682 684 int ret; 683 685 684 - ret = asix_read_phy_addr(dev, true); 685 - if (ret < 0) 686 - return ret; 687 - 688 - priv->phy_addr = ret; 689 - 690 686 snprintf(priv->phy_name, sizeof(priv->phy_name), PHY_ID_FMT, 691 687 priv->mdio->id, priv->phy_addr); 692 688 ··· 707 715 struct asix_common_private *priv; 708 716 int ret, i; 709 717 u32 phyid; 718 + 719 + priv = devm_kzalloc(&dev->udev->dev, sizeof(*priv), GFP_KERNEL); 720 + if (!priv) 721 + return -ENOMEM; 722 + 723 + dev->driver_priv = priv; 710 724 711 725 usbnet_get_endpoints(dev, intf); 712 726 ··· 749 751 dev->net->needed_headroom = 4; /* cf asix_tx_fixup() */ 750 752 dev->net->needed_tailroom = 4; /* cf asix_tx_fixup() */ 751 753 754 + ret = asix_read_phy_addr(dev, true); 755 + if (ret < 0) 756 + return ret; 757 + 758 + priv->phy_addr = ret; 759 + priv->embd_phy = ((priv->phy_addr & 0x1f) == 0x10); 760 + 752 761 asix_read_cmd(dev, AX_CMD_STATMNGSTS_REG, 0, 0, 1, &chipcode, 0); 753 762 chipcode &= AX_CHIPCODE_MASK; 754 763 ··· 777 772 jumbo eth frames */ 778 773 dev->rx_urb_size = 2048; 779 774 } 780 - 781 - priv = devm_kzalloc(&dev->udev->dev, sizeof(*priv), GFP_KERNEL); 782 - if (!priv) 783 - return -ENOMEM; 784 - 785 - dev->driver_priv = priv; 786 775 787 776 priv->presvd_phy_bmcr = 0; 788 777 priv->presvd_phy_advertise = 0; ··· 814 815 815 816 phy_disconnect(priv->phydev); 816 817 asix_rx_fixup_common_free(dev->driver_priv); 818 + } 819 + 820 + static void ax88178_unbind(struct usbnet *dev, struct usb_interface *intf) 821 + { 822 + asix_rx_fixup_common_free(dev->driver_priv); 823 + kfree(dev->driver_priv); 817 824 } 818 825 819 826 static const struct ethtool_ops ax88178_ethtool_ops = { ··· 1230 1225 static const struct driver_info ax88178_info = { 1231 1226 .description = "ASIX AX88178 USB 2.0 Ethernet", 1232 1227 .bind = ax88178_bind, 1233 - .unbind = ax88772_unbind, 1228 + .unbind = ax88178_unbind, 1234 1229 .status = asix_status, 1235 1230 .link_reset = ax88178_link_reset, 1236 1231 .reset = ax88178_reset,
+2 -2
drivers/net/usb/pegasus.c
··· 446 446 write_mii_word(pegasus, 0, 0x1b, &auxmode); 447 447 } 448 448 449 - return 0; 449 + return ret; 450 450 fail: 451 451 netif_dbg(pegasus, drv, pegasus->net, "%s failed\n", __func__); 452 452 return ret; ··· 835 835 if (!pegasus->rx_skb) 836 836 goto exit; 837 837 838 - res = set_registers(pegasus, EthID, 6, net->dev_addr); 838 + set_registers(pegasus, EthID, 6, net->dev_addr); 839 839 840 840 usb_fill_bulk_urb(pegasus->rx_urb, pegasus->usb, 841 841 usb_rcvbulkpipe(pegasus->usb, 1),
+1 -1
drivers/net/wwan/mhi_wwan_ctrl.c
··· 110 110 int ret; 111 111 112 112 /* Start mhi device's channel(s) */ 113 - ret = mhi_prepare_for_transfer(mhiwwan->mhi_dev, 0); 113 + ret = mhi_prepare_for_transfer(mhiwwan->mhi_dev); 114 114 if (ret) 115 115 return ret; 116 116
+1 -6
include/linux/mhi.h
··· 719 719 * host and device execution environments match and 720 720 * channels are in a DISABLED state. 721 721 * @mhi_dev: Device associated with the channels 722 - * @flags: MHI channel flags 723 722 */ 724 - int mhi_prepare_for_transfer(struct mhi_device *mhi_dev, 725 - unsigned int flags); 726 - 727 - /* Automatically allocate and queue inbound buffers */ 728 - #define MHI_CH_INBOUND_ALLOC_BUFS BIT(0) 723 + int mhi_prepare_for_transfer(struct mhi_device *mhi_dev); 729 724 730 725 /** 731 726 * mhi_unprepare_from_transfer - Reset UL and DL channels for data transfer.
+2 -2
include/net/ip6_fib.h
··· 267 267 return false; 268 268 } 269 269 270 - /* Function to safely get fn->sernum for passed in rt 270 + /* Function to safely get fn->fn_sernum for passed in rt 271 271 * and store result in passed in cookie. 272 272 * Return true if we can get cookie safely 273 273 * Return false if not ··· 282 282 283 283 if (fn) { 284 284 *cookie = fn->fn_sernum; 285 - /* pairs with smp_wmb() in fib6_update_sernum_upto_root() */ 285 + /* pairs with smp_wmb() in __fib6_update_sernum_upto_root() */ 286 286 smp_rmb(); 287 287 status = true; 288 288 }
+6 -2
kernel/bpf/verifier.c
··· 5150 5150 case BPF_MAP_TYPE_RINGBUF: 5151 5151 if (func_id != BPF_FUNC_ringbuf_output && 5152 5152 func_id != BPF_FUNC_ringbuf_reserve && 5153 - func_id != BPF_FUNC_ringbuf_submit && 5154 - func_id != BPF_FUNC_ringbuf_discard && 5155 5153 func_id != BPF_FUNC_ringbuf_query) 5156 5154 goto error; 5157 5155 break; ··· 5256 5258 case BPF_FUNC_skb_output: 5257 5259 case BPF_FUNC_xdp_output: 5258 5260 if (map->map_type != BPF_MAP_TYPE_PERF_EVENT_ARRAY) 5261 + goto error; 5262 + break; 5263 + case BPF_FUNC_ringbuf_output: 5264 + case BPF_FUNC_ringbuf_reserve: 5265 + case BPF_FUNC_ringbuf_query: 5266 + if (map->map_type != BPF_MAP_TYPE_RINGBUF) 5259 5267 goto error; 5260 5268 break; 5261 5269 case BPF_FUNC_get_stackid:
+2 -1
net/core/rtnetlink.c
··· 2608 2608 return err; 2609 2609 2610 2610 if (tb[IFLA_NET_NS_PID] || tb[IFLA_NET_NS_FD] || tb[IFLA_TARGET_NETNSID]) { 2611 + const char *pat = ifname && ifname[0] ? ifname : NULL; 2611 2612 struct net *net; 2612 2613 int new_ifindex; 2613 2614 ··· 2624 2623 else 2625 2624 new_ifindex = 0; 2626 2625 2627 - err = __dev_change_net_namespace(dev, net, ifname, new_ifindex); 2626 + err = __dev_change_net_namespace(dev, net, pat, new_ifindex); 2628 2627 put_net(net); 2629 2628 if (err) 2630 2629 goto errout;
+10 -8
net/ipv4/cipso_ipv4.c
··· 465 465 if (!doi_def) 466 466 return; 467 467 468 - switch (doi_def->type) { 469 - case CIPSO_V4_MAP_TRANS: 470 - kfree(doi_def->map.std->lvl.cipso); 471 - kfree(doi_def->map.std->lvl.local); 472 - kfree(doi_def->map.std->cat.cipso); 473 - kfree(doi_def->map.std->cat.local); 474 - kfree(doi_def->map.std); 475 - break; 468 + if (doi_def->map.std) { 469 + switch (doi_def->type) { 470 + case CIPSO_V4_MAP_TRANS: 471 + kfree(doi_def->map.std->lvl.cipso); 472 + kfree(doi_def->map.std->lvl.local); 473 + kfree(doi_def->map.std->cat.cipso); 474 + kfree(doi_def->map.std->cat.local); 475 + kfree(doi_def->map.std); 476 + break; 477 + } 476 478 } 477 479 kfree(doi_def); 478 480 }
+2
net/ipv4/ip_gre.c
··· 473 473 474 474 static int gre_handle_offloads(struct sk_buff *skb, bool csum) 475 475 { 476 + if (csum && skb_checksum_start(skb) < skb->data) 477 + return -EINVAL; 476 478 return iptunnel_handle_offloads(skb, csum ? SKB_GSO_GRE_CSUM : SKB_GSO_GRE); 477 479 } 478 480
+6 -6
net/ipv4/route.c
··· 600 600 return oldest; 601 601 } 602 602 603 - static inline u32 fnhe_hashfun(__be32 daddr) 603 + static u32 fnhe_hashfun(__be32 daddr) 604 604 { 605 - static u32 fnhe_hashrnd __read_mostly; 606 - u32 hval; 605 + static siphash_key_t fnhe_hash_key __read_mostly; 606 + u64 hval; 607 607 608 - net_get_random_once(&fnhe_hashrnd, sizeof(fnhe_hashrnd)); 609 - hval = jhash_1word((__force u32)daddr, fnhe_hashrnd); 610 - return hash_32(hval, FNHE_HASH_SHIFT); 608 + net_get_random_once(&fnhe_hash_key, sizeof(fnhe_hash_key)); 609 + hval = siphash_1u32((__force u32)daddr, &fnhe_hash_key); 610 + return hash_64(hval, FNHE_HASH_SHIFT); 611 611 } 612 612 613 613 static void fill_route_from_fnhe(struct rtable *rt, struct fib_nh_exception *fnhe)
+1 -1
net/ipv6/ip6_fib.c
··· 1341 1341 struct fib6_node *fn = rcu_dereference_protected(rt->fib6_node, 1342 1342 lockdep_is_held(&rt->fib6_table->tb6_lock)); 1343 1343 1344 - /* paired with smp_rmb() in rt6_get_cookie_safe() */ 1344 + /* paired with smp_rmb() in fib6_get_cookie_safe() */ 1345 1345 smp_wmb(); 1346 1346 while (fn) { 1347 1347 fn->fn_sernum = sernum;
+2
net/ipv6/ip6_gre.c
··· 629 629 630 630 static int gre_handle_offloads(struct sk_buff *skb, bool csum) 631 631 { 632 + if (csum && skb_checksum_start(skb) < skb->data) 633 + return -EINVAL; 632 634 return iptunnel_handle_offloads(skb, 633 635 csum ? SKB_GSO_GRE_CSUM : SKB_GSO_GRE); 634 636 }
+14 -6
net/ipv6/route.c
··· 41 41 #include <linux/nsproxy.h> 42 42 #include <linux/slab.h> 43 43 #include <linux/jhash.h> 44 + #include <linux/siphash.h> 44 45 #include <net/net_namespace.h> 45 46 #include <net/snmp.h> 46 47 #include <net/ipv6.h> ··· 1485 1484 static u32 rt6_exception_hash(const struct in6_addr *dst, 1486 1485 const struct in6_addr *src) 1487 1486 { 1488 - static u32 seed __read_mostly; 1489 - u32 val; 1487 + static siphash_key_t rt6_exception_key __read_mostly; 1488 + struct { 1489 + struct in6_addr dst; 1490 + struct in6_addr src; 1491 + } __aligned(SIPHASH_ALIGNMENT) combined = { 1492 + .dst = *dst, 1493 + }; 1494 + u64 val; 1490 1495 1491 - net_get_random_once(&seed, sizeof(seed)); 1492 - val = jhash2((const u32 *)dst, sizeof(*dst)/sizeof(u32), seed); 1496 + net_get_random_once(&rt6_exception_key, sizeof(rt6_exception_key)); 1493 1497 1494 1498 #ifdef CONFIG_IPV6_SUBTREES 1495 1499 if (src) 1496 - val = jhash2((const u32 *)src, sizeof(*src)/sizeof(u32), val); 1500 + combined.src = *src; 1497 1501 #endif 1498 - return hash_32(val, FIB6_EXCEPTION_BUCKET_SIZE_SHIFT); 1502 + val = siphash(&combined, sizeof(combined), &rt6_exception_key); 1503 + 1504 + return hash_64(val, FIB6_EXCEPTION_BUCKET_SIZE_SHIFT); 1499 1505 } 1500 1506 1501 1507 /* Helper function to find the cached rt in the hash table
+1 -15
net/qrtr/mhi.c
··· 15 15 struct qrtr_endpoint ep; 16 16 struct mhi_device *mhi_dev; 17 17 struct device *dev; 18 - struct completion ready; 19 18 }; 20 19 21 20 /* From MHI to QRTR */ ··· 50 51 struct qrtr_mhi_dev *qdev = container_of(ep, struct qrtr_mhi_dev, ep); 51 52 int rc; 52 53 53 - rc = wait_for_completion_interruptible(&qdev->ready); 54 - if (rc) 55 - goto free_skb; 56 - 57 54 if (skb->sk) 58 55 sock_hold(skb->sk); 59 56 ··· 79 84 int rc; 80 85 81 86 /* start channels */ 82 - rc = mhi_prepare_for_transfer(mhi_dev, 0); 87 + rc = mhi_prepare_for_transfer(mhi_dev); 83 88 if (rc) 84 89 return rc; 85 90 ··· 96 101 if (rc) 97 102 return rc; 98 103 99 - /* start channels */ 100 - rc = mhi_prepare_for_transfer(mhi_dev, MHI_CH_INBOUND_ALLOC_BUFS); 101 - if (rc) { 102 - qrtr_endpoint_unregister(&qdev->ep); 103 - dev_set_drvdata(&mhi_dev->dev, NULL); 104 - return rc; 105 - } 106 - 107 - complete_all(&qdev->ready); 108 104 dev_dbg(qdev->dev, "Qualcomm MHI QRTR driver probed\n"); 109 105 110 106 return 0;
+1 -1
net/qrtr/qrtr.c
··· 493 493 goto err; 494 494 } 495 495 496 - if (len != ALIGN(size, 4) + hdrlen) 496 + if (!size || len != ALIGN(size, 4) + hdrlen) 497 497 goto err; 498 498 499 499 if (cb->dst_port != QRTR_PORT_CTRL && cb->type != QRTR_TYPE_DATA &&
+7
net/sched/sch_ets.c
··· 660 660 sch_tree_lock(sch); 661 661 662 662 q->nbands = nbands; 663 + for (i = nstrict; i < q->nstrict; i++) { 664 + INIT_LIST_HEAD(&q->classes[i].alist); 665 + if (q->classes[i].qdisc->q.qlen) { 666 + list_add_tail(&q->classes[i].alist, &q->active); 667 + q->classes[i].deficit = quanta[i]; 668 + } 669 + } 663 670 q->nstrict = nstrict; 664 671 memcpy(q->prio2band, priomap, sizeof(priomap)); 665 672