mirror of
https://github.com/torvalds/linux.git
synced 2026-05-05 15:02:40 -04:00
Merge tag 'net-6.1-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Pull networking fixes from Jakub Kicinski:
"Including fixes from netfilter, and wifi.
Current release - regressions:
- Revert "net/sched: taprio: make qdisc_leaf() see the
per-netdev-queue pfifo child qdiscs", it may cause crashes when the
qdisc is reconfigured
- inet: ping: fix splat due to packet allocation refactoring in inet
- tcp: clean up kernel listener's reqsk in inet_twsk_purge(), fix UAF
due to races when per-netns hash table is used
Current release - new code bugs:
- eth: adin1110: check in netdev_event that netdev belongs to driver
- fixes for PTR_ERR() vs NULL bugs in driver code, from Dan and co.
Previous releases - regressions:
- ipv4: handle attempt to delete multipath route when fib_info
contains an nh reference, avoid oob access
- wifi: fix handful of bugs in the new Multi-BSSID code
- wifi: mt76: fix rate reporting / throughput regression on mt7915
and newer, fix checksum offload
- wifi: iwlwifi: mvm: fix double list_add at
iwl_mvm_mac_wake_tx_queue (other cases)
- wifi: mac80211: do not drop packets smaller than the LLC-SNAP
header on fast-rx
Previous releases - always broken:
- ieee802154: don't warn zero-sized raw_sendmsg()
- ipv6: ping: fix wrong checksum for large frames
- mctp: prevent double key removal and unref
- tcp/udp: fix memory leaks and races around IPV6_ADDRFORM
- hv_netvsc: fix race between VF offering and VF association message
Misc:
- remove -Warray-bounds silencing in the drivers, compilers fixed"
* tag 'net-6.1-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (73 commits)
sunhme: fix an IS_ERR() vs NULL check in probe
net: marvell: prestera: fix a couple NULL vs IS_ERR() checks
kcm: avoid potential race in kcm_tx_work
tcp: Clean up kernel listener's reqsk in inet_twsk_purge()
net: phy: micrel: Fixes FIELD_GET assertion
openvswitch: add nf_ct_is_confirmed check before assigning the helper
tcp: Fix data races around icsk->icsk_af_ops.
ipv6: Fix data races around sk->sk_prot.
tcp/udp: Call inet6_destroy_sock() in IPv6 sk->sk_destruct().
udp: Call inet6_destroy_sock() in setsockopt(IPV6_ADDRFORM).
tcp/udp: Fix memory leak in ipv6_renew_options().
mctp: prevent double key removal and unref
selftests: netfilter: Fix nft_fib.sh for all.rp_filter=1
netfilter: rpfilter/fib: Populate flowic_l3mdev field
selftests: netfilter: Test reverse path filtering
net/mlx5: Make ASO poll CQ usable in atomic context
tcp: cdg: allow tcp_cdg_release() to be called multiple times
inet: ping: fix recent breakage
ipv6: ping: fix wrong checksum for large frames
net: ethernet: ti: am65-cpsw: set correct devlink flavour for unused ports
...
This commit is contained in:
@@ -1169,6 +1169,11 @@ static int adin1110_port_bridge_leave(struct adin1110_port_priv *port_priv,
|
||||
return ret;
|
||||
}
|
||||
|
||||
static bool adin1110_port_dev_check(const struct net_device *dev)
|
||||
{
|
||||
return dev->netdev_ops == &adin1110_netdev_ops;
|
||||
}
|
||||
|
||||
static int adin1110_netdevice_event(struct notifier_block *unused,
|
||||
unsigned long event, void *ptr)
|
||||
{
|
||||
@@ -1177,6 +1182,9 @@ static int adin1110_netdevice_event(struct notifier_block *unused,
|
||||
struct netdev_notifier_changeupper_info *info = ptr;
|
||||
int ret = 0;
|
||||
|
||||
if (!adin1110_port_dev_check(dev))
|
||||
return NOTIFY_DONE;
|
||||
|
||||
switch (event) {
|
||||
case NETDEV_CHANGEUPPER:
|
||||
if (netif_is_bridge_master(info->upper_dev)) {
|
||||
@@ -1202,11 +1210,6 @@ static void adin1110_disconnect_phy(void *data)
|
||||
phy_disconnect(data);
|
||||
}
|
||||
|
||||
static bool adin1110_port_dev_check(const struct net_device *dev)
|
||||
{
|
||||
return dev->netdev_ops == &adin1110_netdev_ops;
|
||||
}
|
||||
|
||||
static int adin1110_port_set_forwarding_state(struct adin1110_port_priv *port_priv)
|
||||
{
|
||||
struct adin1110_priv *priv = port_priv->priv;
|
||||
|
||||
@@ -17,8 +17,3 @@ obj-$(CONFIG_BGMAC_BCMA) += bgmac-bcma.o bgmac-bcma-mdio.o
|
||||
obj-$(CONFIG_BGMAC_PLATFORM) += bgmac-platform.o
|
||||
obj-$(CONFIG_SYSTEMPORT) += bcmsysport.o
|
||||
obj-$(CONFIG_BNXT) += bnxt/
|
||||
|
||||
# FIXME: temporarily silence -Warray-bounds on non W=1+ builds
|
||||
ifndef KBUILD_EXTRA_WARN
|
||||
CFLAGS_tg3.o += -Wno-array-bounds
|
||||
endif
|
||||
|
||||
@@ -484,7 +484,7 @@ struct bcm_rsb {
|
||||
|
||||
/* Number of Receive hardware descriptor words */
|
||||
#define SP_NUM_HW_RX_DESC_WORDS 1024
|
||||
#define SP_LT_NUM_HW_RX_DESC_WORDS 256
|
||||
#define SP_LT_NUM_HW_RX_DESC_WORDS 512
|
||||
|
||||
/* Internal linked-list RAM size */
|
||||
#define SP_NUM_TX_DESC 1536
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
#include <linux/math64.h>
|
||||
#include <linux/refcount.h>
|
||||
#include <net/pkt_cls.h>
|
||||
#include <net/pkt_sched.h>
|
||||
#include <net/tc_act/tc_gate.h>
|
||||
|
||||
static u16 enetc_get_max_gcl_len(struct enetc_hw *hw)
|
||||
|
||||
@@ -1182,8 +1182,10 @@ static int mcs_register_interrupts(struct mcs *mcs)
|
||||
mcs_reg_write(mcs, MCSX_PAB_TX_SLAVE_PAB_INT_ENB, 0xff);
|
||||
|
||||
mcs->tx_sa_active = alloc_mem(mcs, mcs->hw->sc_entries);
|
||||
if (!mcs->tx_sa_active)
|
||||
if (!mcs->tx_sa_active) {
|
||||
ret = -ENOMEM;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
return ret;
|
||||
exit:
|
||||
|
||||
@@ -133,7 +133,7 @@ static int cn10k_mcs_alloc_rsrc(struct otx2_nic *pfvf, enum mcs_direction dir,
|
||||
default:
|
||||
ret = -EINVAL;
|
||||
goto fail;
|
||||
};
|
||||
}
|
||||
|
||||
mutex_unlock(&mbox->lock);
|
||||
|
||||
@@ -284,7 +284,7 @@ static int cn10k_mcs_write_sc_cam(struct otx2_nic *pfvf,
|
||||
|
||||
sc_req = otx2_mbox_alloc_msg_mcs_rx_sc_cam_write(mbox);
|
||||
if (!sc_req) {
|
||||
return -ENOMEM;
|
||||
ret = -ENOMEM;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
@@ -594,7 +594,7 @@ static int cn10k_mcs_ena_dis_flowid(struct otx2_nic *pfvf, u16 hw_flow_id,
|
||||
|
||||
req = otx2_mbox_alloc_msg_mcs_flowid_ena_entry(mbox);
|
||||
if (!req) {
|
||||
return -ENOMEM;
|
||||
ret = -ENOMEM;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
@@ -1653,6 +1653,7 @@ int cn10k_mcs_init(struct otx2_nic *pfvf)
|
||||
return 0;
|
||||
fail:
|
||||
dev_err(pfvf->dev, "Cannot notify PN wrapped event\n");
|
||||
mutex_unlock(&mbox->lock);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -2810,7 +2810,7 @@ static int otx2_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
err = register_netdev(netdev);
|
||||
if (err) {
|
||||
dev_err(dev, "Failed to register netdevice\n");
|
||||
goto err_del_mcam_entries;
|
||||
goto err_mcs_free;
|
||||
}
|
||||
|
||||
err = otx2_wq_init(pf);
|
||||
@@ -2849,6 +2849,8 @@ err_mcam_flow_del:
|
||||
otx2_mcam_flow_del(pf);
|
||||
err_unreg_netdev:
|
||||
unregister_netdev(netdev);
|
||||
err_mcs_free:
|
||||
cn10k_mcs_free(pf);
|
||||
err_del_mcam_entries:
|
||||
otx2_mcam_flow_del(pf);
|
||||
err_ptp_destroy:
|
||||
|
||||
@@ -96,6 +96,8 @@ int prestera_mall_replace(struct prestera_flow_block *block,
|
||||
|
||||
list_for_each_entry(binding, &block->binding_list, list) {
|
||||
err = prestera_span_rule_add(binding, port, block->ingress);
|
||||
if (err == -EEXIST)
|
||||
return err;
|
||||
if (err)
|
||||
goto rollback;
|
||||
}
|
||||
|
||||
@@ -498,8 +498,8 @@ prestera_nexthop_group_get(struct prestera_switch *sw,
|
||||
refcount_inc(&nh_grp->refcount);
|
||||
} else {
|
||||
nh_grp = __prestera_nexthop_group_create(sw, key);
|
||||
if (IS_ERR(nh_grp))
|
||||
return ERR_CAST(nh_grp);
|
||||
if (!nh_grp)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
refcount_set(&nh_grp->refcount, 1);
|
||||
}
|
||||
@@ -651,7 +651,7 @@ prestera_fib_node_create(struct prestera_switch *sw,
|
||||
case PRESTERA_FIB_TYPE_UC_NH:
|
||||
fib_node->info.nh_grp = prestera_nexthop_group_get(sw,
|
||||
nh_grp_key);
|
||||
if (!fib_node->info.nh_grp)
|
||||
if (IS_ERR(fib_node->info.nh_grp))
|
||||
goto err_nh_grp_get;
|
||||
|
||||
grp_id = fib_node->info.nh_grp->grp_id;
|
||||
|
||||
@@ -107,7 +107,7 @@ static int prestera_span_put(struct prestera_switch *sw, u8 span_id)
|
||||
|
||||
entry = prestera_span_entry_find_by_id(sw->span, span_id);
|
||||
if (!entry)
|
||||
return false;
|
||||
return -ENOENT;
|
||||
|
||||
if (!refcount_dec_and_test(&entry->ref_count))
|
||||
return 0;
|
||||
@@ -151,6 +151,9 @@ int prestera_span_rule_del(struct prestera_flow_block_binding *binding,
|
||||
{
|
||||
int err;
|
||||
|
||||
if (binding->span_id == PRESTERA_SPAN_INVALID_ID)
|
||||
return -ENOENT;
|
||||
|
||||
err = prestera_hw_span_unbind(binding->port, ingress);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
@@ -11,8 +11,3 @@ mtk_eth-$(CONFIG_NET_MEDIATEK_SOC_WED) += mtk_wed_debugfs.o
|
||||
endif
|
||||
obj-$(CONFIG_NET_MEDIATEK_SOC_WED) += mtk_wed_ops.o
|
||||
obj-$(CONFIG_NET_MEDIATEK_STAR_EMAC) += mtk_star_emac.o
|
||||
|
||||
# FIXME: temporarily silence -Warray-bounds on non W=1+ builds
|
||||
ifndef KBUILD_EXTRA_WARN
|
||||
CFLAGS_mtk_ppe.o += -Wno-array-bounds
|
||||
endif
|
||||
|
||||
@@ -115,6 +115,7 @@ mlx5e_tc_meter_modify(struct mlx5_core_dev *mdev,
|
||||
struct mlx5e_flow_meters *flow_meters;
|
||||
u8 cir_man, cir_exp, cbs_man, cbs_exp;
|
||||
struct mlx5_aso_wqe *aso_wqe;
|
||||
unsigned long expires;
|
||||
struct mlx5_aso *aso;
|
||||
u64 rate, burst;
|
||||
u8 ds_cnt;
|
||||
@@ -187,7 +188,12 @@ mlx5e_tc_meter_modify(struct mlx5_core_dev *mdev,
|
||||
mlx5_aso_post_wqe(aso, true, &aso_wqe->ctrl);
|
||||
|
||||
/* With newer FW, the wait for the first ASO WQE is more than 2us, put the wait 10ms. */
|
||||
err = mlx5_aso_poll_cq(aso, true, 10);
|
||||
expires = jiffies + msecs_to_jiffies(10);
|
||||
do {
|
||||
err = mlx5_aso_poll_cq(aso, true);
|
||||
if (err)
|
||||
usleep_range(2, 10);
|
||||
} while (err && time_is_after_jiffies(expires));
|
||||
mutex_unlock(&flow_meters->aso_lock);
|
||||
|
||||
return err;
|
||||
|
||||
@@ -1405,7 +1405,7 @@ static int macsec_aso_set_arm_event(struct mlx5_core_dev *mdev, struct mlx5e_mac
|
||||
MLX5_ACCESS_ASO_OPC_MOD_MACSEC);
|
||||
macsec_aso_build_ctrl(aso, &aso_wqe->aso_ctrl, in);
|
||||
mlx5_aso_post_wqe(maso, false, &aso_wqe->ctrl);
|
||||
err = mlx5_aso_poll_cq(maso, false, 10);
|
||||
err = mlx5_aso_poll_cq(maso, false);
|
||||
mutex_unlock(&aso->aso_lock);
|
||||
|
||||
return err;
|
||||
@@ -1430,7 +1430,7 @@ static int macsec_aso_query(struct mlx5_core_dev *mdev, struct mlx5e_macsec *mac
|
||||
macsec_aso_build_wqe_ctrl_seg(aso, &aso_wqe->aso_ctrl, NULL);
|
||||
|
||||
mlx5_aso_post_wqe(maso, false, &aso_wqe->ctrl);
|
||||
err = mlx5_aso_poll_cq(maso, false, 10);
|
||||
err = mlx5_aso_poll_cq(maso, false);
|
||||
if (err)
|
||||
goto err_out;
|
||||
|
||||
|
||||
@@ -381,20 +381,12 @@ void mlx5_aso_post_wqe(struct mlx5_aso *aso, bool with_data,
|
||||
WRITE_ONCE(doorbell_cseg, NULL);
|
||||
}
|
||||
|
||||
int mlx5_aso_poll_cq(struct mlx5_aso *aso, bool with_data, u32 interval_ms)
|
||||
int mlx5_aso_poll_cq(struct mlx5_aso *aso, bool with_data)
|
||||
{
|
||||
struct mlx5_aso_cq *cq = &aso->cq;
|
||||
struct mlx5_cqe64 *cqe;
|
||||
unsigned long expires;
|
||||
|
||||
cqe = mlx5_cqwq_get_cqe(&cq->wq);
|
||||
|
||||
expires = jiffies + msecs_to_jiffies(interval_ms);
|
||||
while (!cqe && time_is_after_jiffies(expires)) {
|
||||
usleep_range(2, 10);
|
||||
cqe = mlx5_cqwq_get_cqe(&cq->wq);
|
||||
}
|
||||
|
||||
if (!cqe)
|
||||
return -ETIMEDOUT;
|
||||
|
||||
|
||||
@@ -83,7 +83,7 @@ void mlx5_aso_build_wqe(struct mlx5_aso *aso, u8 ds_cnt,
|
||||
u32 obj_id, u32 opc_mode);
|
||||
void mlx5_aso_post_wqe(struct mlx5_aso *aso, bool with_data,
|
||||
struct mlx5_wqe_ctrl_seg *doorbell_cseg);
|
||||
int mlx5_aso_poll_cq(struct mlx5_aso *aso, bool with_data, u32 interval_ms);
|
||||
int mlx5_aso_poll_cq(struct mlx5_aso *aso, bool with_data);
|
||||
|
||||
struct mlx5_aso *mlx5_aso_create(struct mlx5_core_dev *mdev, u32 pdn);
|
||||
void mlx5_aso_destroy(struct mlx5_aso *aso);
|
||||
|
||||
@@ -373,10 +373,10 @@ nfp_flower_calculate_key_layers(struct nfp_app *app,
|
||||
if (ipv6_tun) {
|
||||
key_layer_two |= NFP_FLOWER_LAYER2_TUN_IPV6;
|
||||
key_size +=
|
||||
sizeof(struct nfp_flower_ipv6_udp_tun);
|
||||
sizeof(struct nfp_flower_ipv6_gre_tun);
|
||||
} else {
|
||||
key_size +=
|
||||
sizeof(struct nfp_flower_ipv4_udp_tun);
|
||||
sizeof(struct nfp_flower_ipv4_gre_tun);
|
||||
}
|
||||
|
||||
if (enc_op.key) {
|
||||
|
||||
@@ -2896,8 +2896,8 @@ static int happy_meal_pci_probe(struct pci_dev *pdev,
|
||||
|
||||
hpreg_res = devm_request_region(&pdev->dev, pci_resource_start(pdev, 0),
|
||||
pci_resource_len(pdev, 0), DRV_NAME);
|
||||
if (IS_ERR(hpreg_res)) {
|
||||
err = PTR_ERR(hpreg_res);
|
||||
if (!hpreg_res) {
|
||||
err = -EBUSY;
|
||||
dev_err(&pdev->dev, "Cannot obtain PCI resources, aborting.\n");
|
||||
goto err_out_clear_quattro;
|
||||
}
|
||||
|
||||
@@ -2476,7 +2476,10 @@ static int am65_cpsw_nuss_register_devlink(struct am65_cpsw_common *common)
|
||||
port = am65_common_get_port(common, i);
|
||||
dl_port = &port->devlink_port;
|
||||
|
||||
attrs.flavour = DEVLINK_PORT_FLAVOUR_PHYSICAL;
|
||||
if (port->ndev)
|
||||
attrs.flavour = DEVLINK_PORT_FLAVOUR_PHYSICAL;
|
||||
else
|
||||
attrs.flavour = DEVLINK_PORT_FLAVOUR_UNUSED;
|
||||
attrs.phys.port_number = port->port_id;
|
||||
attrs.switch_id.id_len = sizeof(resource_size_t);
|
||||
memcpy(attrs.switch_id.id, common->switch_id, attrs.switch_id.id_len);
|
||||
|
||||
Reference in New Issue
Block a user