You've already forked linux-rockchip
mirror of
https://github.com/armbian/linux-rockchip.git
synced 2026-01-06 11:08:10 -08:00
Merge tag 'net-6.1-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Pull networking fixes from Paolo Abeni:
"Including fixes from bpf.
Current release - regressions:
- tls: fix memory leak in tls_enc_skb() and tls_sw_fallback_init()
Previous releases - regressions:
- bridge: fix memory leaks when changing VLAN protocol
- dsa: make dsa_master_ioctl() see through port_hwtstamp_get() shims
- dsa: don't leak tagger-owned storage on switch driver unbind
- eth: mlxsw: avoid warnings when not offloaded FDB entry with IPv6
is removed
- eth: stmmac: ensure tx function is not running in
stmmac_xdp_release()
- eth: hns3: fix return value check bug of rx copybreak
Previous releases - always broken:
- kcm: close race conditions on sk_receive_queue
- bpf: fix alignment problem in bpf_prog_test_run_skb()
- bpf: fix writing offset in case of fault in
strncpy_from_kernel_nofault
- eth: macvlan: use built-in RCU list checking
- eth: marvell: add sleep time after enabling the loopback bit
- eth: octeon_ep: fix potential memory leak in octep_device_setup()
Misc:
- tcp: configurable source port perturb table size
- bpf: Convert BPF_DISPATCHER to use static_call() (not ftrace)"
* tag 'net-6.1-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (51 commits)
net: use struct_group to copy ip/ipv6 header addresses
net: usb: smsc95xx: fix external PHY reset
net: usb: qmi_wwan: add Telit 0x103a composition
netdevsim: Fix memory leak of nsim_dev->fa_cookie
tcp: configurable source port perturb table size
l2tp: Serialize access to sk_user_data with sk_callback_lock
net: thunderbolt: Fix error handling in tbnet_init()
net: microchip: sparx5: Fix potential null-ptr-deref in sparx_stats_init() and sparx5_start()
net: lan966x: Fix potential null-ptr-deref in lan966x_stats_init()
net: dsa: don't leak tagger-owned storage on switch driver unbind
net/x25: Fix skb leak in x25_lapb_receive_frame()
net: ag71xx: call phylink_disconnect_phy if ag71xx_hw_enable() fail in ag71xx_open()
bridge: switchdev: Fix memory leaks when changing VLAN protocol
net: hns3: fix setting incorrect phy link ksettings for firmware in resetting process
net: hns3: fix return value check bug of rx copybreak
net: hns3: fix incorrect hw rss hash type of rx packet
net: phy: marvell: add sleep time after enabling the loopback bit
net: ena: Fix error handling in ena_init()
kcm: close race conditions on sk_receive_queue
net: ionic: Fix error handling in ionic_init_module()
...
This commit is contained in:
@@ -11,7 +11,6 @@
|
||||
#include <linux/bpf.h>
|
||||
#include <linux/memory.h>
|
||||
#include <linux/sort.h>
|
||||
#include <linux/init.h>
|
||||
#include <asm/extable.h>
|
||||
#include <asm/set_memory.h>
|
||||
#include <asm/nospec-branch.h>
|
||||
@@ -389,18 +388,6 @@ out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
int __init bpf_arch_init_dispatcher_early(void *ip)
|
||||
{
|
||||
const u8 *nop_insn = x86_nops[5];
|
||||
|
||||
if (is_endbr(*(u32 *)ip))
|
||||
ip += ENDBR_INSN_SIZE;
|
||||
|
||||
if (memcmp(ip, nop_insn, X86_PATCH_SIZE))
|
||||
text_poke_early(ip, nop_insn, X86_PATCH_SIZE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int bpf_arch_text_poke(void *ip, enum bpf_text_poke_type t,
|
||||
void *old_addr, void *new_addr)
|
||||
{
|
||||
|
||||
@@ -222,7 +222,7 @@ mISDN_register_device(struct mISDNdevice *dev,
|
||||
|
||||
err = get_free_devid();
|
||||
if (err < 0)
|
||||
goto error1;
|
||||
return err;
|
||||
dev->id = err;
|
||||
|
||||
device_initialize(&dev->dev);
|
||||
|
||||
@@ -77,6 +77,7 @@ int mISDN_dsp_element_register(struct mISDN_dsp_element *elem)
|
||||
if (!entry)
|
||||
return -ENOMEM;
|
||||
|
||||
INIT_LIST_HEAD(&entry->list);
|
||||
entry->elem = elem;
|
||||
|
||||
entry->dev.class = elements_class;
|
||||
@@ -107,7 +108,7 @@ err2:
|
||||
device_unregister(&entry->dev);
|
||||
return ret;
|
||||
err1:
|
||||
kfree(entry);
|
||||
put_device(&entry->dev);
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(mISDN_dsp_element_register);
|
||||
|
||||
@@ -4543,13 +4543,19 @@ static struct pci_driver ena_pci_driver = {
|
||||
|
||||
static int __init ena_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ena_wq = create_singlethread_workqueue(DRV_MODULE_NAME);
|
||||
if (!ena_wq) {
|
||||
pr_err("Failed to create workqueue\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
return pci_register_driver(&ena_pci_driver);
|
||||
ret = pci_register_driver(&ena_pci_driver);
|
||||
if (ret)
|
||||
destroy_workqueue(ena_wq);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void __exit ena_cleanup(void)
|
||||
|
||||
@@ -1427,7 +1427,7 @@ static int ag71xx_open(struct net_device *ndev)
|
||||
if (ret) {
|
||||
netif_err(ag, link, ndev, "phylink_of_phy_connect filed with err: %i\n",
|
||||
ret);
|
||||
goto err;
|
||||
return ret;
|
||||
}
|
||||
|
||||
max_frame_len = ag71xx_max_frame_len(ndev->mtu);
|
||||
@@ -1448,6 +1448,7 @@ static int ag71xx_open(struct net_device *ndev)
|
||||
|
||||
err:
|
||||
ag71xx_rings_cleanup(ag);
|
||||
phylink_disconnect_phy(ag->phylink);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -1568,7 +1568,6 @@ void bgmac_enet_remove(struct bgmac *bgmac)
|
||||
phy_disconnect(bgmac->net_dev->phydev);
|
||||
netif_napi_del(&bgmac->napi);
|
||||
bgmac_dma_free(bgmac);
|
||||
free_netdev(bgmac->net_dev);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(bgmac_enet_remove);
|
||||
|
||||
|
||||
@@ -14037,8 +14037,16 @@ static struct pci_driver bnxt_pci_driver = {
|
||||
|
||||
static int __init bnxt_init(void)
|
||||
{
|
||||
int err;
|
||||
|
||||
bnxt_debug_init();
|
||||
return pci_register_driver(&bnxt_pci_driver);
|
||||
err = pci_register_driver(&bnxt_pci_driver);
|
||||
if (err) {
|
||||
bnxt_debug_exit();
|
||||
return err;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void __exit bnxt_exit(void)
|
||||
|
||||
@@ -1794,13 +1794,10 @@ static int liquidio_open(struct net_device *netdev)
|
||||
|
||||
ifstate_set(lio, LIO_IFSTATE_RUNNING);
|
||||
|
||||
if (OCTEON_CN23XX_PF(oct)) {
|
||||
if (!oct->msix_on)
|
||||
if (setup_tx_poll_fn(netdev))
|
||||
return -1;
|
||||
} else {
|
||||
if (setup_tx_poll_fn(netdev))
|
||||
return -1;
|
||||
if (!OCTEON_CN23XX_PF(oct) || (OCTEON_CN23XX_PF(oct) && !oct->msix_on)) {
|
||||
ret = setup_tx_poll_fn(netdev);
|
||||
if (ret)
|
||||
goto err_poll;
|
||||
}
|
||||
|
||||
netif_tx_start_all_queues(netdev);
|
||||
@@ -1813,7 +1810,7 @@ static int liquidio_open(struct net_device *netdev)
|
||||
/* tell Octeon to start forwarding packets to host */
|
||||
ret = send_rx_ctrl_cmd(lio, 1);
|
||||
if (ret)
|
||||
return ret;
|
||||
goto err_rx_ctrl;
|
||||
|
||||
/* start periodical statistics fetch */
|
||||
INIT_DELAYED_WORK(&lio->stats_wk.work, lio_fetch_stats);
|
||||
@@ -1824,6 +1821,27 @@ static int liquidio_open(struct net_device *netdev)
|
||||
dev_info(&oct->pci_dev->dev, "%s interface is opened\n",
|
||||
netdev->name);
|
||||
|
||||
return 0;
|
||||
|
||||
err_rx_ctrl:
|
||||
if (!OCTEON_CN23XX_PF(oct) || (OCTEON_CN23XX_PF(oct) && !oct->msix_on))
|
||||
cleanup_tx_poll_fn(netdev);
|
||||
err_poll:
|
||||
if (lio->ptp_clock) {
|
||||
ptp_clock_unregister(lio->ptp_clock);
|
||||
lio->ptp_clock = NULL;
|
||||
}
|
||||
|
||||
if (oct->props[lio->ifidx].napi_enabled == 1) {
|
||||
list_for_each_entry_safe(napi, n, &netdev->napi_list, dev_list)
|
||||
napi_disable(napi);
|
||||
|
||||
oct->props[lio->ifidx].napi_enabled = 0;
|
||||
|
||||
if (OCTEON_CN23XX_PF(oct))
|
||||
oct->droq[0]->ops.poll_mode = 0;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -819,7 +819,6 @@ struct hnae3_knic_private_info {
|
||||
const struct hnae3_dcb_ops *dcb_ops;
|
||||
|
||||
u16 int_rl_setting;
|
||||
enum pkt_hash_types rss_type;
|
||||
void __iomem *io_base;
|
||||
};
|
||||
|
||||
|
||||
@@ -191,23 +191,6 @@ u32 hclge_comm_get_rss_key_size(struct hnae3_handle *handle)
|
||||
return HCLGE_COMM_RSS_KEY_SIZE;
|
||||
}
|
||||
|
||||
void hclge_comm_get_rss_type(struct hnae3_handle *nic,
|
||||
struct hclge_comm_rss_tuple_cfg *rss_tuple_sets)
|
||||
{
|
||||
if (rss_tuple_sets->ipv4_tcp_en ||
|
||||
rss_tuple_sets->ipv4_udp_en ||
|
||||
rss_tuple_sets->ipv4_sctp_en ||
|
||||
rss_tuple_sets->ipv6_tcp_en ||
|
||||
rss_tuple_sets->ipv6_udp_en ||
|
||||
rss_tuple_sets->ipv6_sctp_en)
|
||||
nic->kinfo.rss_type = PKT_HASH_TYPE_L4;
|
||||
else if (rss_tuple_sets->ipv4_fragment_en ||
|
||||
rss_tuple_sets->ipv6_fragment_en)
|
||||
nic->kinfo.rss_type = PKT_HASH_TYPE_L3;
|
||||
else
|
||||
nic->kinfo.rss_type = PKT_HASH_TYPE_NONE;
|
||||
}
|
||||
|
||||
int hclge_comm_parse_rss_hfunc(struct hclge_comm_rss_cfg *rss_cfg,
|
||||
const u8 hfunc, u8 *hash_algo)
|
||||
{
|
||||
@@ -344,9 +327,6 @@ int hclge_comm_set_rss_input_tuple(struct hnae3_handle *nic,
|
||||
req->ipv6_sctp_en = rss_cfg->rss_tuple_sets.ipv6_sctp_en;
|
||||
req->ipv6_fragment_en = rss_cfg->rss_tuple_sets.ipv6_fragment_en;
|
||||
|
||||
if (is_pf)
|
||||
hclge_comm_get_rss_type(nic, &rss_cfg->rss_tuple_sets);
|
||||
|
||||
ret = hclge_comm_cmd_send(hw, &desc, 1);
|
||||
if (ret)
|
||||
dev_err(&hw->cmq.csq.pdev->dev,
|
||||
|
||||
@@ -95,8 +95,6 @@ struct hclge_comm_rss_tc_mode_cmd {
|
||||
};
|
||||
|
||||
u32 hclge_comm_get_rss_key_size(struct hnae3_handle *handle);
|
||||
void hclge_comm_get_rss_type(struct hnae3_handle *nic,
|
||||
struct hclge_comm_rss_tuple_cfg *rss_tuple_sets);
|
||||
void hclge_comm_rss_indir_init_cfg(struct hnae3_ae_dev *ae_dev,
|
||||
struct hclge_comm_rss_cfg *rss_cfg);
|
||||
int hclge_comm_get_rss_tuple(struct hclge_comm_rss_cfg *rss_cfg, int flow_type,
|
||||
|
||||
@@ -105,26 +105,28 @@ static const struct pci_device_id hns3_pci_tbl[] = {
|
||||
};
|
||||
MODULE_DEVICE_TABLE(pci, hns3_pci_tbl);
|
||||
|
||||
#define HNS3_RX_PTYPE_ENTRY(ptype, l, s, t) \
|
||||
#define HNS3_RX_PTYPE_ENTRY(ptype, l, s, t, h) \
|
||||
{ ptype, \
|
||||
l, \
|
||||
CHECKSUM_##s, \
|
||||
HNS3_L3_TYPE_##t, \
|
||||
1 }
|
||||
1, \
|
||||
h}
|
||||
|
||||
#define HNS3_RX_PTYPE_UNUSED_ENTRY(ptype) \
|
||||
{ ptype, 0, CHECKSUM_NONE, HNS3_L3_TYPE_PARSE_FAIL, 0 }
|
||||
{ ptype, 0, CHECKSUM_NONE, HNS3_L3_TYPE_PARSE_FAIL, 0, \
|
||||
PKT_HASH_TYPE_NONE }
|
||||
|
||||
static const struct hns3_rx_ptype hns3_rx_ptype_tbl[] = {
|
||||
HNS3_RX_PTYPE_UNUSED_ENTRY(0),
|
||||
HNS3_RX_PTYPE_ENTRY(1, 0, COMPLETE, ARP),
|
||||
HNS3_RX_PTYPE_ENTRY(2, 0, COMPLETE, RARP),
|
||||
HNS3_RX_PTYPE_ENTRY(3, 0, COMPLETE, LLDP),
|
||||
HNS3_RX_PTYPE_ENTRY(4, 0, COMPLETE, PARSE_FAIL),
|
||||
HNS3_RX_PTYPE_ENTRY(5, 0, COMPLETE, PARSE_FAIL),
|
||||
HNS3_RX_PTYPE_ENTRY(6, 0, COMPLETE, PARSE_FAIL),
|
||||
HNS3_RX_PTYPE_ENTRY(7, 0, COMPLETE, CNM),
|
||||
HNS3_RX_PTYPE_ENTRY(8, 0, NONE, PARSE_FAIL),
|
||||
HNS3_RX_PTYPE_ENTRY(1, 0, COMPLETE, ARP, PKT_HASH_TYPE_NONE),
|
||||
HNS3_RX_PTYPE_ENTRY(2, 0, COMPLETE, RARP, PKT_HASH_TYPE_NONE),
|
||||
HNS3_RX_PTYPE_ENTRY(3, 0, COMPLETE, LLDP, PKT_HASH_TYPE_NONE),
|
||||
HNS3_RX_PTYPE_ENTRY(4, 0, COMPLETE, PARSE_FAIL, PKT_HASH_TYPE_NONE),
|
||||
HNS3_RX_PTYPE_ENTRY(5, 0, COMPLETE, PARSE_FAIL, PKT_HASH_TYPE_NONE),
|
||||
HNS3_RX_PTYPE_ENTRY(6, 0, COMPLETE, PARSE_FAIL, PKT_HASH_TYPE_NONE),
|
||||
HNS3_RX_PTYPE_ENTRY(7, 0, COMPLETE, CNM, PKT_HASH_TYPE_NONE),
|
||||
HNS3_RX_PTYPE_ENTRY(8, 0, NONE, PARSE_FAIL, PKT_HASH_TYPE_NONE),
|
||||
HNS3_RX_PTYPE_UNUSED_ENTRY(9),
|
||||
HNS3_RX_PTYPE_UNUSED_ENTRY(10),
|
||||
HNS3_RX_PTYPE_UNUSED_ENTRY(11),
|
||||
@@ -132,36 +134,36 @@ static const struct hns3_rx_ptype hns3_rx_ptype_tbl[] = {
|
||||
HNS3_RX_PTYPE_UNUSED_ENTRY(13),
|
||||
HNS3_RX_PTYPE_UNUSED_ENTRY(14),
|
||||
HNS3_RX_PTYPE_UNUSED_ENTRY(15),
|
||||
HNS3_RX_PTYPE_ENTRY(16, 0, COMPLETE, PARSE_FAIL),
|
||||
HNS3_RX_PTYPE_ENTRY(17, 0, COMPLETE, IPV4),
|
||||
HNS3_RX_PTYPE_ENTRY(18, 0, COMPLETE, IPV4),
|
||||
HNS3_RX_PTYPE_ENTRY(19, 0, UNNECESSARY, IPV4),
|
||||
HNS3_RX_PTYPE_ENTRY(20, 0, UNNECESSARY, IPV4),
|
||||
HNS3_RX_PTYPE_ENTRY(21, 0, NONE, IPV4),
|
||||
HNS3_RX_PTYPE_ENTRY(22, 0, UNNECESSARY, IPV4),
|
||||
HNS3_RX_PTYPE_ENTRY(23, 0, NONE, IPV4),
|
||||
HNS3_RX_PTYPE_ENTRY(24, 0, NONE, IPV4),
|
||||
HNS3_RX_PTYPE_ENTRY(25, 0, UNNECESSARY, IPV4),
|
||||
HNS3_RX_PTYPE_ENTRY(16, 0, COMPLETE, PARSE_FAIL, PKT_HASH_TYPE_NONE),
|
||||
HNS3_RX_PTYPE_ENTRY(17, 0, COMPLETE, IPV4, PKT_HASH_TYPE_NONE),
|
||||
HNS3_RX_PTYPE_ENTRY(18, 0, COMPLETE, IPV4, PKT_HASH_TYPE_NONE),
|
||||
HNS3_RX_PTYPE_ENTRY(19, 0, UNNECESSARY, IPV4, PKT_HASH_TYPE_L4),
|
||||
HNS3_RX_PTYPE_ENTRY(20, 0, UNNECESSARY, IPV4, PKT_HASH_TYPE_L4),
|
||||
HNS3_RX_PTYPE_ENTRY(21, 0, NONE, IPV4, PKT_HASH_TYPE_NONE),
|
||||
HNS3_RX_PTYPE_ENTRY(22, 0, UNNECESSARY, IPV4, PKT_HASH_TYPE_L4),
|
||||
HNS3_RX_PTYPE_ENTRY(23, 0, NONE, IPV4, PKT_HASH_TYPE_L3),
|
||||
HNS3_RX_PTYPE_ENTRY(24, 0, NONE, IPV4, PKT_HASH_TYPE_L3),
|
||||
HNS3_RX_PTYPE_ENTRY(25, 0, UNNECESSARY, IPV4, PKT_HASH_TYPE_L4),
|
||||
HNS3_RX_PTYPE_UNUSED_ENTRY(26),
|
||||
HNS3_RX_PTYPE_UNUSED_ENTRY(27),
|
||||
HNS3_RX_PTYPE_UNUSED_ENTRY(28),
|
||||
HNS3_RX_PTYPE_ENTRY(29, 0, COMPLETE, PARSE_FAIL),
|
||||
HNS3_RX_PTYPE_ENTRY(30, 0, COMPLETE, PARSE_FAIL),
|
||||
HNS3_RX_PTYPE_ENTRY(31, 0, COMPLETE, IPV4),
|
||||
HNS3_RX_PTYPE_ENTRY(32, 0, COMPLETE, IPV4),
|
||||
HNS3_RX_PTYPE_ENTRY(33, 1, UNNECESSARY, IPV4),
|
||||
HNS3_RX_PTYPE_ENTRY(34, 1, UNNECESSARY, IPV4),
|
||||
HNS3_RX_PTYPE_ENTRY(35, 1, UNNECESSARY, IPV4),
|
||||
HNS3_RX_PTYPE_ENTRY(36, 0, COMPLETE, IPV4),
|
||||
HNS3_RX_PTYPE_ENTRY(37, 0, COMPLETE, IPV4),
|
||||
HNS3_RX_PTYPE_ENTRY(29, 0, COMPLETE, PARSE_FAIL, PKT_HASH_TYPE_NONE),
|
||||
HNS3_RX_PTYPE_ENTRY(30, 0, COMPLETE, PARSE_FAIL, PKT_HASH_TYPE_NONE),
|
||||
HNS3_RX_PTYPE_ENTRY(31, 0, COMPLETE, IPV4, PKT_HASH_TYPE_L3),
|
||||
HNS3_RX_PTYPE_ENTRY(32, 0, COMPLETE, IPV4, PKT_HASH_TYPE_L3),
|
||||
HNS3_RX_PTYPE_ENTRY(33, 1, UNNECESSARY, IPV4, PKT_HASH_TYPE_L4),
|
||||
HNS3_RX_PTYPE_ENTRY(34, 1, UNNECESSARY, IPV4, PKT_HASH_TYPE_L4),
|
||||
HNS3_RX_PTYPE_ENTRY(35, 1, UNNECESSARY, IPV4, PKT_HASH_TYPE_L4),
|
||||
HNS3_RX_PTYPE_ENTRY(36, 0, COMPLETE, IPV4, PKT_HASH_TYPE_L3),
|
||||
HNS3_RX_PTYPE_ENTRY(37, 0, COMPLETE, IPV4, PKT_HASH_TYPE_L3),
|
||||
HNS3_RX_PTYPE_UNUSED_ENTRY(38),
|
||||
HNS3_RX_PTYPE_ENTRY(39, 0, COMPLETE, IPV6),
|
||||
HNS3_RX_PTYPE_ENTRY(40, 0, COMPLETE, IPV6),
|
||||
HNS3_RX_PTYPE_ENTRY(41, 1, UNNECESSARY, IPV6),
|
||||
HNS3_RX_PTYPE_ENTRY(42, 1, UNNECESSARY, IPV6),
|
||||
HNS3_RX_PTYPE_ENTRY(43, 1, UNNECESSARY, IPV6),
|
||||
HNS3_RX_PTYPE_ENTRY(44, 0, COMPLETE, IPV6),
|
||||
HNS3_RX_PTYPE_ENTRY(45, 0, COMPLETE, IPV6),
|
||||
HNS3_RX_PTYPE_ENTRY(39, 0, COMPLETE, IPV6, PKT_HASH_TYPE_L3),
|
||||
HNS3_RX_PTYPE_ENTRY(40, 0, COMPLETE, IPV6, PKT_HASH_TYPE_L3),
|
||||
HNS3_RX_PTYPE_ENTRY(41, 1, UNNECESSARY, IPV6, PKT_HASH_TYPE_L4),
|
||||
HNS3_RX_PTYPE_ENTRY(42, 1, UNNECESSARY, IPV6, PKT_HASH_TYPE_L4),
|
||||
HNS3_RX_PTYPE_ENTRY(43, 1, UNNECESSARY, IPV6, PKT_HASH_TYPE_L4),
|
||||
HNS3_RX_PTYPE_ENTRY(44, 0, COMPLETE, IPV6, PKT_HASH_TYPE_L3),
|
||||
HNS3_RX_PTYPE_ENTRY(45, 0, COMPLETE, IPV6, PKT_HASH_TYPE_L3),
|
||||
HNS3_RX_PTYPE_UNUSED_ENTRY(46),
|
||||
HNS3_RX_PTYPE_UNUSED_ENTRY(47),
|
||||
HNS3_RX_PTYPE_UNUSED_ENTRY(48),
|
||||
@@ -227,35 +229,35 @@ static const struct hns3_rx_ptype hns3_rx_ptype_tbl[] = {
|
||||
HNS3_RX_PTYPE_UNUSED_ENTRY(108),
|
||||
HNS3_RX_PTYPE_UNUSED_ENTRY(109),
|
||||
HNS3_RX_PTYPE_UNUSED_ENTRY(110),
|
||||
HNS3_RX_PTYPE_ENTRY(111, 0, COMPLETE, IPV6),
|
||||
HNS3_RX_PTYPE_ENTRY(112, 0, COMPLETE, IPV6),
|
||||
HNS3_RX_PTYPE_ENTRY(113, 0, UNNECESSARY, IPV6),
|
||||
HNS3_RX_PTYPE_ENTRY(114, 0, UNNECESSARY, IPV6),
|
||||
HNS3_RX_PTYPE_ENTRY(115, 0, NONE, IPV6),
|
||||
HNS3_RX_PTYPE_ENTRY(116, 0, UNNECESSARY, IPV6),
|
||||
HNS3_RX_PTYPE_ENTRY(117, 0, NONE, IPV6),
|
||||
HNS3_RX_PTYPE_ENTRY(118, 0, NONE, IPV6),
|
||||
HNS3_RX_PTYPE_ENTRY(119, 0, UNNECESSARY, IPV6),
|
||||
HNS3_RX_PTYPE_ENTRY(111, 0, COMPLETE, IPV6, PKT_HASH_TYPE_L3),
|
||||
HNS3_RX_PTYPE_ENTRY(112, 0, COMPLETE, IPV6, PKT_HASH_TYPE_L3),
|
||||
HNS3_RX_PTYPE_ENTRY(113, 0, UNNECESSARY, IPV6, PKT_HASH_TYPE_L4),
|
||||
HNS3_RX_PTYPE_ENTRY(114, 0, UNNECESSARY, IPV6, PKT_HASH_TYPE_L4),
|
||||
HNS3_RX_PTYPE_ENTRY(115, 0, NONE, IPV6, PKT_HASH_TYPE_L3),
|
||||
HNS3_RX_PTYPE_ENTRY(116, 0, UNNECESSARY, IPV6, PKT_HASH_TYPE_L4),
|
||||
HNS3_RX_PTYPE_ENTRY(117, 0, NONE, IPV6, PKT_HASH_TYPE_L3),
|
||||
HNS3_RX_PTYPE_ENTRY(118, 0, NONE, IPV6, PKT_HASH_TYPE_L3),
|
||||
HNS3_RX_PTYPE_ENTRY(119, 0, UNNECESSARY, IPV6, PKT_HASH_TYPE_L4),
|
||||
HNS3_RX_PTYPE_UNUSED_ENTRY(120),
|
||||
HNS3_RX_PTYPE_UNUSED_ENTRY(121),
|
||||
HNS3_RX_PTYPE_UNUSED_ENTRY(122),
|
||||
HNS3_RX_PTYPE_ENTRY(123, 0, COMPLETE, PARSE_FAIL),
|
||||
HNS3_RX_PTYPE_ENTRY(124, 0, COMPLETE, PARSE_FAIL),
|
||||
HNS3_RX_PTYPE_ENTRY(125, 0, COMPLETE, IPV4),
|
||||
HNS3_RX_PTYPE_ENTRY(126, 0, COMPLETE, IPV4),
|
||||
HNS3_RX_PTYPE_ENTRY(127, 1, UNNECESSARY, IPV4),
|
||||
HNS3_RX_PTYPE_ENTRY(128, 1, UNNECESSARY, IPV4),
|
||||
HNS3_RX_PTYPE_ENTRY(129, 1, UNNECESSARY, IPV4),
|
||||
HNS3_RX_PTYPE_ENTRY(130, 0, COMPLETE, IPV4),
|
||||
HNS3_RX_PTYPE_ENTRY(131, 0, COMPLETE, IPV4),
|
||||
HNS3_RX_PTYPE_ENTRY(123, 0, COMPLETE, PARSE_FAIL, PKT_HASH_TYPE_NONE),
|
||||
HNS3_RX_PTYPE_ENTRY(124, 0, COMPLETE, PARSE_FAIL, PKT_HASH_TYPE_NONE),
|
||||
HNS3_RX_PTYPE_ENTRY(125, 0, COMPLETE, IPV4, PKT_HASH_TYPE_L3),
|
||||
HNS3_RX_PTYPE_ENTRY(126, 0, COMPLETE, IPV4, PKT_HASH_TYPE_L3),
|
||||
HNS3_RX_PTYPE_ENTRY(127, 1, UNNECESSARY, IPV4, PKT_HASH_TYPE_L4),
|
||||
HNS3_RX_PTYPE_ENTRY(128, 1, UNNECESSARY, IPV4, PKT_HASH_TYPE_L4),
|
||||
HNS3_RX_PTYPE_ENTRY(129, 1, UNNECESSARY, IPV4, PKT_HASH_TYPE_L4),
|
||||
HNS3_RX_PTYPE_ENTRY(130, 0, COMPLETE, IPV4, PKT_HASH_TYPE_L3),
|
||||
HNS3_RX_PTYPE_ENTRY(131, 0, COMPLETE, IPV4, PKT_HASH_TYPE_L3),
|
||||
HNS3_RX_PTYPE_UNUSED_ENTRY(132),
|
||||
HNS3_RX_PTYPE_ENTRY(133, 0, COMPLETE, IPV6),
|
||||
HNS3_RX_PTYPE_ENTRY(134, 0, COMPLETE, IPV6),
|
||||
HNS3_RX_PTYPE_ENTRY(135, 1, UNNECESSARY, IPV6),
|
||||
HNS3_RX_PTYPE_ENTRY(136, 1, UNNECESSARY, IPV6),
|
||||
HNS3_RX_PTYPE_ENTRY(137, 1, UNNECESSARY, IPV6),
|
||||
HNS3_RX_PTYPE_ENTRY(138, 0, COMPLETE, IPV6),
|
||||
HNS3_RX_PTYPE_ENTRY(139, 0, COMPLETE, IPV6),
|
||||
HNS3_RX_PTYPE_ENTRY(133, 0, COMPLETE, IPV6, PKT_HASH_TYPE_L3),
|
||||
HNS3_RX_PTYPE_ENTRY(134, 0, COMPLETE, IPV6, PKT_HASH_TYPE_L3),
|
||||
HNS3_RX_PTYPE_ENTRY(135, 1, UNNECESSARY, IPV6, PKT_HASH_TYPE_L4),
|
||||
HNS3_RX_PTYPE_ENTRY(136, 1, UNNECESSARY, IPV6, PKT_HASH_TYPE_L4),
|
||||
HNS3_RX_PTYPE_ENTRY(137, 1, UNNECESSARY, IPV6, PKT_HASH_TYPE_L4),
|
||||
HNS3_RX_PTYPE_ENTRY(138, 0, COMPLETE, IPV6, PKT_HASH_TYPE_L3),
|
||||
HNS3_RX_PTYPE_ENTRY(139, 0, COMPLETE, IPV6, PKT_HASH_TYPE_L3),
|
||||
HNS3_RX_PTYPE_UNUSED_ENTRY(140),
|
||||
HNS3_RX_PTYPE_UNUSED_ENTRY(141),
|
||||
HNS3_RX_PTYPE_UNUSED_ENTRY(142),
|
||||
@@ -3776,8 +3778,8 @@ static void hns3_nic_reuse_page(struct sk_buff *skb, int i,
|
||||
desc_cb->reuse_flag = 1;
|
||||
} else if (frag_size <= ring->rx_copybreak) {
|
||||
ret = hns3_handle_rx_copybreak(skb, i, ring, pull_len, desc_cb);
|
||||
if (ret)
|
||||
goto out;
|
||||
if (!ret)
|
||||
return;
|
||||
}
|
||||
|
||||
out:
|
||||
@@ -4171,15 +4173,35 @@ static int hns3_set_gro_and_checksum(struct hns3_enet_ring *ring,
|
||||
}
|
||||
|
||||
static void hns3_set_rx_skb_rss_type(struct hns3_enet_ring *ring,
|
||||
struct sk_buff *skb, u32 rss_hash)
|
||||
struct sk_buff *skb, u32 rss_hash,
|
||||
u32 l234info, u32 ol_info)
|
||||
{
|
||||
struct hnae3_handle *handle = ring->tqp->handle;
|
||||
enum pkt_hash_types rss_type;
|
||||
enum pkt_hash_types rss_type = PKT_HASH_TYPE_NONE;
|
||||
struct net_device *netdev = ring_to_netdev(ring);
|
||||
struct hns3_nic_priv *priv = netdev_priv(netdev);
|
||||
|
||||
if (rss_hash)
|
||||
rss_type = handle->kinfo.rss_type;
|
||||
else
|
||||
rss_type = PKT_HASH_TYPE_NONE;
|
||||
if (test_bit(HNS3_NIC_STATE_RXD_ADV_LAYOUT_ENABLE, &priv->state)) {
|
||||
u32 ptype = hnae3_get_field(ol_info, HNS3_RXD_PTYPE_M,
|
||||
HNS3_RXD_PTYPE_S);
|
||||
|
||||
rss_type = hns3_rx_ptype_tbl[ptype].hash_type;
|
||||
} else {
|
||||
int l3_type = hnae3_get_field(l234info, HNS3_RXD_L3ID_M,
|
||||
HNS3_RXD_L3ID_S);
|
||||
int l4_type = hnae3_get_field(l234info, HNS3_RXD_L4ID_M,
|
||||
HNS3_RXD_L4ID_S);
|
||||
|
||||
if (l3_type == HNS3_L3_TYPE_IPV4 ||
|
||||
l3_type == HNS3_L3_TYPE_IPV6) {
|
||||
if (l4_type == HNS3_L4_TYPE_UDP ||
|
||||
l4_type == HNS3_L4_TYPE_TCP ||
|
||||
l4_type == HNS3_L4_TYPE_SCTP)
|
||||
rss_type = PKT_HASH_TYPE_L4;
|
||||
else if (l4_type == HNS3_L4_TYPE_IGMP ||
|
||||
l4_type == HNS3_L4_TYPE_ICMP)
|
||||
rss_type = PKT_HASH_TYPE_L3;
|
||||
}
|
||||
}
|
||||
|
||||
skb_set_hash(skb, rss_hash, rss_type);
|
||||
}
|
||||
@@ -4282,7 +4304,8 @@ static int hns3_handle_bdinfo(struct hns3_enet_ring *ring, struct sk_buff *skb)
|
||||
|
||||
ring->tqp_vector->rx_group.total_bytes += len;
|
||||
|
||||
hns3_set_rx_skb_rss_type(ring, skb, le32_to_cpu(desc->rx.rss_hash));
|
||||
hns3_set_rx_skb_rss_type(ring, skb, le32_to_cpu(desc->rx.rss_hash),
|
||||
l234info, ol_info);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -404,6 +404,7 @@ struct hns3_rx_ptype {
|
||||
u32 ip_summed : 2;
|
||||
u32 l3_type : 4;
|
||||
u32 valid : 1;
|
||||
u32 hash_type: 3;
|
||||
};
|
||||
|
||||
struct ring_stats {
|
||||
|
||||
@@ -3443,6 +3443,7 @@ static int hclge_update_tp_port_info(struct hclge_dev *hdev)
|
||||
hdev->hw.mac.autoneg = cmd.base.autoneg;
|
||||
hdev->hw.mac.speed = cmd.base.speed;
|
||||
hdev->hw.mac.duplex = cmd.base.duplex;
|
||||
linkmode_copy(hdev->hw.mac.advertising, cmd.link_modes.advertising);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -4859,7 +4860,6 @@ static int hclge_set_rss_tuple(struct hnae3_handle *handle,
|
||||
return ret;
|
||||
}
|
||||
|
||||
hclge_comm_get_rss_type(&vport->nic, &hdev->rss_cfg.rss_tuple_sets);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -11587,9 +11587,12 @@ static int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev)
|
||||
if (ret)
|
||||
goto err_msi_irq_uninit;
|
||||
|
||||
if (hdev->hw.mac.media_type == HNAE3_MEDIA_TYPE_COPPER &&
|
||||
!hnae3_dev_phy_imp_supported(hdev)) {
|
||||
ret = hclge_mac_mdio_config(hdev);
|
||||
if (hdev->hw.mac.media_type == HNAE3_MEDIA_TYPE_COPPER) {
|
||||
if (hnae3_dev_phy_imp_supported(hdev))
|
||||
ret = hclge_update_tp_port_info(hdev);
|
||||
else
|
||||
ret = hclge_mac_mdio_config(hdev);
|
||||
|
||||
if (ret)
|
||||
goto err_msi_irq_uninit;
|
||||
}
|
||||
|
||||
@@ -1474,8 +1474,15 @@ static struct pci_driver hinic_driver = {
|
||||
|
||||
static int __init hinic_module_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
hinic_dbg_register_debugfs(HINIC_DRV_NAME);
|
||||
return pci_register_driver(&hinic_driver);
|
||||
|
||||
ret = pci_register_driver(&hinic_driver);
|
||||
if (ret)
|
||||
hinic_dbg_unregister_debugfs();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void __exit hinic_module_exit(void)
|
||||
|
||||
@@ -521,14 +521,12 @@ static int octep_open(struct net_device *netdev)
|
||||
octep_oq_dbell_init(oct);
|
||||
|
||||
ret = octep_get_link_status(oct);
|
||||
if (ret)
|
||||
if (ret > 0)
|
||||
octep_link_up(netdev);
|
||||
|
||||
return 0;
|
||||
|
||||
set_queues_err:
|
||||
octep_napi_disable(oct);
|
||||
octep_napi_delete(oct);
|
||||
octep_clean_irqs(oct);
|
||||
setup_irq_err:
|
||||
octep_free_oqs(oct);
|
||||
@@ -958,7 +956,7 @@ int octep_device_setup(struct octep_device *oct)
|
||||
ret = octep_ctrl_mbox_init(ctrl_mbox);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Failed to initialize control mbox\n");
|
||||
return -1;
|
||||
goto unsupported_dev;
|
||||
}
|
||||
oct->ctrl_mbox_ifstats_offset = OCTEP_CTRL_MBOX_SZ(ctrl_mbox->h2fq.elem_sz,
|
||||
ctrl_mbox->h2fq.elem_cnt,
|
||||
@@ -968,6 +966,10 @@ int octep_device_setup(struct octep_device *oct)
|
||||
return 0;
|
||||
|
||||
unsupported_dev:
|
||||
for (i = 0; i < OCTEP_MMIO_REGIONS; i++)
|
||||
iounmap(oct->mmio[i].hw_addr);
|
||||
|
||||
kfree(oct->conf);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -1070,7 +1072,11 @@ static int octep_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
netdev->max_mtu = OCTEP_MAX_MTU;
|
||||
netdev->mtu = OCTEP_DEFAULT_MTU;
|
||||
|
||||
octep_get_mac_addr(octep_dev, octep_dev->mac_addr);
|
||||
err = octep_get_mac_addr(octep_dev, octep_dev->mac_addr);
|
||||
if (err) {
|
||||
dev_err(&pdev->dev, "Failed to get mac address\n");
|
||||
goto register_dev_err;
|
||||
}
|
||||
eth_hw_addr_set(netdev, octep_dev->mac_addr);
|
||||
|
||||
err = register_netdev(netdev);
|
||||
|
||||
@@ -3470,6 +3470,8 @@ mlxsw_sp_switchdev_vxlan_fdb_del(struct mlxsw_sp *mlxsw_sp,
|
||||
u16 vid;
|
||||
|
||||
vxlan_fdb_info = &switchdev_work->vxlan_fdb_info;
|
||||
if (!vxlan_fdb_info->offloaded)
|
||||
return;
|
||||
|
||||
bridge_device = mlxsw_sp_bridge_device_find(mlxsw_sp->bridge, br_dev);
|
||||
if (!bridge_device)
|
||||
|
||||
@@ -716,6 +716,9 @@ int lan966x_stats_init(struct lan966x *lan966x)
|
||||
snprintf(queue_name, sizeof(queue_name), "%s-stats",
|
||||
dev_name(lan966x->dev));
|
||||
lan966x->stats_queue = create_singlethread_workqueue(queue_name);
|
||||
if (!lan966x->stats_queue)
|
||||
return -ENOMEM;
|
||||
|
||||
INIT_DELAYED_WORK(&lan966x->stats_work, lan966x_check_stats_work);
|
||||
queue_delayed_work(lan966x->stats_queue, &lan966x->stats_work,
|
||||
LAN966X_STATS_CHECK_DELAY);
|
||||
|
||||
@@ -1253,6 +1253,9 @@ int sparx_stats_init(struct sparx5 *sparx5)
|
||||
snprintf(queue_name, sizeof(queue_name), "%s-stats",
|
||||
dev_name(sparx5->dev));
|
||||
sparx5->stats_queue = create_singlethread_workqueue(queue_name);
|
||||
if (!sparx5->stats_queue)
|
||||
return -ENOMEM;
|
||||
|
||||
INIT_DELAYED_WORK(&sparx5->stats_work, sparx5_check_stats_work);
|
||||
queue_delayed_work(sparx5->stats_queue, &sparx5->stats_work,
|
||||
SPX5_STATS_CHECK_DELAY);
|
||||
|
||||
@@ -659,6 +659,9 @@ static int sparx5_start(struct sparx5 *sparx5)
|
||||
snprintf(queue_name, sizeof(queue_name), "%s-mact",
|
||||
dev_name(sparx5->dev));
|
||||
sparx5->mact_queue = create_singlethread_workqueue(queue_name);
|
||||
if (!sparx5->mact_queue)
|
||||
return -ENOMEM;
|
||||
|
||||
INIT_DELAYED_WORK(&sparx5->mact_work, sparx5_mact_pull_work);
|
||||
queue_delayed_work(sparx5->mact_queue, &sparx5->mact_work,
|
||||
SPX5_MACT_PULL_DELAY);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user