mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
Merge tag 'net-6.17-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Pull networking fixes from Paolo Abeni:
"Including fixes from CAN, netfilter and wireless.
We have an IPv6 routing regression with the relevant fix still a WiP.
This includes a last-minute revert to avoid more problems.
Current release - new code bugs:
- wifi: nl80211: completely disable per-link stats for now
Previous releases - regressions:
- dev_ioctl: take ops lock in hwtstamp lower paths
- netfilter:
- fix spurious set lookup failures
- fix lockdep splat due to missing annotation
- genetlink: fix genl_bind() invoking bind() after -EPERM
- phy: transfer phy_config_inband() locking responsibility to phylink
- can: xilinx_can: fix use-after-free of transmitted SKB
- hsr: fix lock warnings
- eth:
- igb: fix NULL pointer dereference in ethtool loopback test
- i40e: fix Jumbo Frame support after iPXE boot
- macsec: sync features on RTM_NEWLINK
Previous releases - always broken:
- tunnels: reset the GSO metadata before reusing the skb
- mptcp: make sync_socket_options propagate SOCK_KEEPOPEN
- can: j1939: implement NETDEV_UNREGISTER notification hanidler
- wifi: ath12k: fix WMI TLV header misalignment"
* tag 'net-6.17-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (47 commits)
Revert "net: usb: asix: ax88772: drop phylink use in PM to avoid MDIO runtime PM wakeups"
hsr: hold rcu and dev lock for hsr_get_port_ndev
hsr: use hsr_for_each_port_rtnl in hsr_port_get_hsr
hsr: use rtnl lock when iterating over ports
wifi: nl80211: completely disable per-link stats for now
net: usb: asix: ax88772: drop phylink use in PM to avoid MDIO runtime PM wakeups
net: ethtool: fix wrong type used in struct kernel_ethtool_ts_info
MAINTAINERS: add Phil as netfilter reviewer
netfilter: nf_tables: restart set lookup on base_seq change
netfilter: nf_tables: make nft_set_do_lookup available unconditionally
netfilter: nf_tables: place base_seq in struct net
netfilter: nft_set_rbtree: continue traversal if element is inactive
netfilter: nft_set_pipapo: don't check genbit from packetpath lookups
netfilter: nft_set_bitmap: fix lockdep splat due to missing annotation
can: rcar_can: rcar_can_resume(): fix s2ram with PSCI
can: xilinx_can: xcan_write_frame(): fix use-after-free of transmitted SKB
can: j1939: j1939_local_ecu_get(): undo increment when j1939_local_ecu_get() fails
can: j1939: j1939_sk_bind(): call j1939_priv_put() immediately when j1939_local_ecu_get() failed
can: j1939: implement NETDEV_UNREGISTER notification handler
selftests: can: enable CONFIG_CAN_VCAN as a module
...
This commit is contained in:
commit
db87bd2ad1
58 files changed
+542
-227
No files matched your search
@@ -256,7 +256,7 @@ attribute-sets:
|
||||
type: u32
|
||||
-
|
||||
name: if-idx
|
||||
type: u32
|
||||
type: s32
|
||||
-
|
||||
name: reset-reason
|
||||
type: u32
|
||||
|
||||
@@ -742,7 +742,7 @@ The broadcast manager sends responses to user space in the same form:
|
||||
struct timeval ival1, ival2; /* count and subsequent interval */
|
||||
canid_t can_id; /* unique can_id for task */
|
||||
__u32 nframes; /* number of can_frames following */
|
||||
struct can_frame frames[0];
|
||||
struct can_frame frames[];
|
||||
};
|
||||
|
||||
The aligned payload 'frames' uses the same basic CAN frame structure defined
|
||||
|
||||
@@ -60,10 +60,10 @@ address announcements. Typically, it is the client side that initiates subflows,
|
||||
and the server side that announces additional addresses via the ``ADD_ADDR`` and
|
||||
``REMOVE_ADDR`` options.
|
||||
|
||||
Path managers are controlled by the ``net.mptcp.pm_type`` sysctl knob -- see
|
||||
mptcp-sysctl.rst. There are two types: the in-kernel one (type ``0``) where the
|
||||
same rules are applied for all the connections (see: ``ip mptcp``) ; and the
|
||||
userspace one (type ``1``), controlled by a userspace daemon (i.e. `mptcpd
|
||||
Path managers are controlled by the ``net.mptcp.path_manager`` sysctl knob --
|
||||
see mptcp-sysctl.rst. There are two types: the in-kernel one (``kernel``) where
|
||||
the same rules are applied for all the connections (see: ``ip mptcp``) ; and the
|
||||
userspace one (``userspace``), controlled by a userspace daemon (i.e. `mptcpd
|
||||
<https://mptcpd.mptcp.dev/>`_) where different rules can be applied for each
|
||||
connection. The path managers can be controlled via a Netlink API; see
|
||||
netlink_spec/mptcp_pm.rst.
|
||||
|
||||
@@ -17479,6 +17479,7 @@ NETFILTER
|
||||
M: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||
M: Jozsef Kadlecsik <kadlec@netfilter.org>
|
||||
M: Florian Westphal <fw@strlen.de>
|
||||
R: Phil Sutter <phil@nwl.cc>
|
||||
L: netfilter-devel@vger.kernel.org
|
||||
L: coreteam@netfilter.org
|
||||
S: Maintained
|
||||
|
||||
@@ -861,7 +861,6 @@ static int rcar_can_resume(struct device *dev)
|
||||
{
|
||||
struct net_device *ndev = dev_get_drvdata(dev);
|
||||
struct rcar_can_priv *priv = netdev_priv(ndev);
|
||||
u16 ctlr;
|
||||
int err;
|
||||
|
||||
if (!netif_running(ndev))
|
||||
@@ -873,12 +872,7 @@ static int rcar_can_resume(struct device *dev)
|
||||
return err;
|
||||
}
|
||||
|
||||
ctlr = readw(&priv->regs->ctlr);
|
||||
ctlr &= ~RCAR_CAN_CTLR_SLPM;
|
||||
writew(ctlr, &priv->regs->ctlr);
|
||||
ctlr &= ~RCAR_CAN_CTLR_CANM;
|
||||
writew(ctlr, &priv->regs->ctlr);
|
||||
priv->can.state = CAN_STATE_ERROR_ACTIVE;
|
||||
rcar_can_start(ndev);
|
||||
|
||||
netif_device_attach(ndev);
|
||||
netif_start_queue(ndev);
|
||||
|
||||
@@ -690,14 +690,6 @@ static void xcan_write_frame(struct net_device *ndev, struct sk_buff *skb,
|
||||
dlc |= XCAN_DLCR_EDL_MASK;
|
||||
}
|
||||
|
||||
if (!(priv->devtype.flags & XCAN_FLAG_TX_MAILBOXES) &&
|
||||
(priv->devtype.flags & XCAN_FLAG_TXFEMP))
|
||||
can_put_echo_skb(skb, ndev, priv->tx_head % priv->tx_max, 0);
|
||||
else
|
||||
can_put_echo_skb(skb, ndev, 0, 0);
|
||||
|
||||
priv->tx_head++;
|
||||
|
||||
priv->write_reg(priv, XCAN_FRAME_ID_OFFSET(frame_offset), id);
|
||||
/* If the CAN frame is RTR frame this write triggers transmission
|
||||
* (not on CAN FD)
|
||||
@@ -730,6 +722,14 @@ static void xcan_write_frame(struct net_device *ndev, struct sk_buff *skb,
|
||||
data[1]);
|
||||
}
|
||||
}
|
||||
|
||||
if (!(priv->devtype.flags & XCAN_FLAG_TX_MAILBOXES) &&
|
||||
(priv->devtype.flags & XCAN_FLAG_TXFEMP))
|
||||
can_put_echo_skb(skb, ndev, priv->tx_head % priv->tx_max, 0);
|
||||
else
|
||||
can_put_echo_skb(skb, ndev, 0, 0);
|
||||
|
||||
priv->tx_head++;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1273,9 +1273,15 @@ static int b53_setup(struct dsa_switch *ds)
|
||||
*/
|
||||
ds->untag_vlan_aware_bridge_pvid = true;
|
||||
|
||||
/* Ageing time is set in seconds */
|
||||
ds->ageing_time_min = 1 * 1000;
|
||||
ds->ageing_time_max = AGE_TIME_MAX * 1000;
|
||||
if (dev->chip_id == BCM53101_DEVICE_ID) {
|
||||
/* BCM53101 uses 0.5 second increments */
|
||||
ds->ageing_time_min = 1 * 500;
|
||||
ds->ageing_time_max = AGE_TIME_MAX * 500;
|
||||
} else {
|
||||
/* Everything else uses 1 second increments */
|
||||
ds->ageing_time_min = 1 * 1000;
|
||||
ds->ageing_time_max = AGE_TIME_MAX * 1000;
|
||||
}
|
||||
|
||||
ret = b53_reset_switch(dev);
|
||||
if (ret) {
|
||||
@@ -2559,7 +2565,10 @@ int b53_set_ageing_time(struct dsa_switch *ds, unsigned int msecs)
|
||||
else
|
||||
reg = B53_AGING_TIME_CONTROL;
|
||||
|
||||
atc = DIV_ROUND_CLOSEST(msecs, 1000);
|
||||
if (dev->chip_id == BCM53101_DEVICE_ID)
|
||||
atc = DIV_ROUND_CLOSEST(msecs, 500);
|
||||
else
|
||||
atc = DIV_ROUND_CLOSEST(msecs, 1000);
|
||||
|
||||
if (!is5325(dev) && !is5365(dev))
|
||||
atc |= AGE_CHANGE;
|
||||
|
||||
@@ -2363,7 +2363,8 @@ static void fec_enet_phy_reset_after_clk_enable(struct net_device *ndev)
|
||||
*/
|
||||
phy_dev = of_phy_find_device(fep->phy_node);
|
||||
phy_reset_after_clk_enable(phy_dev);
|
||||
put_device(&phy_dev->mdio.dev);
|
||||
if (phy_dev)
|
||||
put_device(&phy_dev->mdio.dev);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1561,6 +1561,7 @@ I40E_CHECK_CMD_LENGTH(i40e_aq_set_phy_config);
|
||||
struct i40e_aq_set_mac_config {
|
||||
__le16 max_frame_size;
|
||||
u8 params;
|
||||
#define I40E_AQ_SET_MAC_CONFIG_CRC_EN BIT(2)
|
||||
u8 tx_timer_priority; /* bitmap */
|
||||
__le16 tx_timer_value;
|
||||
__le16 fc_refresh_threshold;
|
||||
|
||||
@@ -1189,6 +1189,40 @@ int i40e_set_fc(struct i40e_hw *hw, u8 *aq_failures,
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* i40e_aq_set_mac_config - Configure MAC settings
|
||||
* @hw: pointer to the hw struct
|
||||
* @max_frame_size: Maximum Frame Size to be supported by the port
|
||||
* @cmd_details: pointer to command details structure or NULL
|
||||
*
|
||||
* Set MAC configuration (0x0603). Note that max_frame_size must be greater
|
||||
* than zero.
|
||||
*
|
||||
* Return: 0 on success, or a negative error code on failure.
|
||||
*/
|
||||
int i40e_aq_set_mac_config(struct i40e_hw *hw, u16 max_frame_size,
|
||||
struct i40e_asq_cmd_details *cmd_details)
|
||||
{
|
||||
struct i40e_aq_set_mac_config *cmd;
|
||||
struct libie_aq_desc desc;
|
||||
|
||||
cmd = libie_aq_raw(&desc);
|
||||
|
||||
if (max_frame_size == 0)
|
||||
return -EINVAL;
|
||||
|
||||
i40e_fill_default_direct_cmd_desc(&desc, i40e_aqc_opc_set_mac_config);
|
||||
|
||||
cmd->max_frame_size = cpu_to_le16(max_frame_size);
|
||||
cmd->params = I40E_AQ_SET_MAC_CONFIG_CRC_EN;
|
||||
|
||||
#define I40E_AQ_SET_MAC_CONFIG_FC_DEFAULT_THRESHOLD 0x7FFF
|
||||
cmd->fc_refresh_threshold =
|
||||
cpu_to_le16(I40E_AQ_SET_MAC_CONFIG_FC_DEFAULT_THRESHOLD);
|
||||
|
||||
return i40e_asq_send_command(hw, &desc, NULL, 0, cmd_details);
|
||||
}
|
||||
|
||||
/**
|
||||
* i40e_aq_clear_pxe_mode
|
||||
* @hw: pointer to the hw struct
|
||||
|
||||
@@ -4156,7 +4156,7 @@ free_queue_irqs:
|
||||
irq_num = pf->msix_entries[base + vector].vector;
|
||||
irq_set_affinity_notifier(irq_num, NULL);
|
||||
irq_update_affinity_hint(irq_num, NULL);
|
||||
free_irq(irq_num, &vsi->q_vectors[vector]);
|
||||
free_irq(irq_num, vsi->q_vectors[vector]);
|
||||
}
|
||||
return err;
|
||||
}
|
||||
@@ -16045,13 +16045,17 @@ static int i40e_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
dev_dbg(&pf->pdev->dev, "get supported phy types ret = %pe last_status = %s\n",
|
||||
ERR_PTR(err), libie_aq_str(pf->hw.aq.asq_last_status));
|
||||
|
||||
/* make sure the MFS hasn't been set lower than the default */
|
||||
#define MAX_FRAME_SIZE_DEFAULT 0x2600
|
||||
val = FIELD_GET(I40E_PRTGL_SAH_MFS_MASK,
|
||||
rd32(&pf->hw, I40E_PRTGL_SAH));
|
||||
if (val < MAX_FRAME_SIZE_DEFAULT)
|
||||
dev_warn(&pdev->dev, "MFS for port %x (%d) has been set below the default (%d)\n",
|
||||
pf->hw.port, val, MAX_FRAME_SIZE_DEFAULT);
|
||||
|
||||
err = i40e_aq_set_mac_config(hw, MAX_FRAME_SIZE_DEFAULT, NULL);
|
||||
if (err)
|
||||
dev_warn(&pdev->dev, "set mac config ret = %pe last_status = %s\n",
|
||||
ERR_PTR(err), libie_aq_str(pf->hw.aq.asq_last_status));
|
||||
|
||||
/* Make sure the MFS is set to the expected value */
|
||||
val = rd32(hw, I40E_PRTGL_SAH);
|
||||
FIELD_MODIFY(I40E_PRTGL_SAH_MFS_MASK, &val, MAX_FRAME_SIZE_DEFAULT);
|
||||
wr32(hw, I40E_PRTGL_SAH, val);
|
||||
|
||||
/* Add a filter to drop all Flow control frames from any VSI from being
|
||||
* transmitted. By doing so we stop a malicious VF from sending out
|
||||
|
||||
@@ -98,6 +98,8 @@ int i40e_aq_set_mac_loopback(struct i40e_hw *hw,
|
||||
struct i40e_asq_cmd_details *cmd_details);
|
||||
int i40e_aq_set_phy_int_mask(struct i40e_hw *hw, u16 mask,
|
||||
struct i40e_asq_cmd_details *cmd_details);
|
||||
int i40e_aq_set_mac_config(struct i40e_hw *hw, u16 max_frame_size,
|
||||
struct i40e_asq_cmd_details *cmd_details);
|
||||
int i40e_aq_clear_pxe_mode(struct i40e_hw *hw,
|
||||
struct i40e_asq_cmd_details *cmd_details);
|
||||
int i40e_aq_set_link_restart_an(struct i40e_hw *hw,
|
||||
|
||||
@@ -2081,11 +2081,8 @@ static void igb_diag_test(struct net_device *netdev,
|
||||
} else {
|
||||
dev_info(&adapter->pdev->dev, "online testing starting\n");
|
||||
|
||||
/* PHY is powered down when interface is down */
|
||||
if (if_running && igb_link_test(adapter, &data[TEST_LINK]))
|
||||
if (igb_link_test(adapter, &data[TEST_LINK]))
|
||||
eth_test->flags |= ETH_TEST_FL_FAILED;
|
||||
else
|
||||
data[TEST_LINK] = 0;
|
||||
|
||||
/* Online tests aren't run; pass by default */
|
||||
data[TEST_REG] = 0;
|
||||
|
||||
@@ -4453,8 +4453,7 @@ int igb_setup_rx_resources(struct igb_ring *rx_ring)
|
||||
if (xdp_rxq_info_is_reg(&rx_ring->xdp_rxq))
|
||||
xdp_rxq_info_unreg(&rx_ring->xdp_rxq);
|
||||
res = xdp_rxq_info_reg(&rx_ring->xdp_rxq, rx_ring->netdev,
|
||||
rx_ring->queue_index,
|
||||
rx_ring->q_vector->napi.napi_id);
|
||||
rx_ring->queue_index, 0);
|
||||
if (res < 0) {
|
||||
dev_err(dev, "Failed to register xdp_rxq index %u\n",
|
||||
rx_ring->queue_index);
|
||||
|
||||
@@ -654,7 +654,7 @@ static void icssg_prueth_hsr_fdb_add_del(struct prueth_emac *emac,
|
||||
|
||||
static int icssg_prueth_hsr_add_mcast(struct net_device *ndev, const u8 *addr)
|
||||
{
|
||||
struct net_device *real_dev;
|
||||
struct net_device *real_dev, *port_dev;
|
||||
struct prueth_emac *emac;
|
||||
u8 vlan_id, i;
|
||||
|
||||
@@ -663,11 +663,15 @@ static int icssg_prueth_hsr_add_mcast(struct net_device *ndev, const u8 *addr)
|
||||
|
||||
if (is_hsr_master(real_dev)) {
|
||||
for (i = HSR_PT_SLAVE_A; i < HSR_PT_INTERLINK; i++) {
|
||||
emac = netdev_priv(hsr_get_port_ndev(real_dev, i));
|
||||
if (!emac)
|
||||
port_dev = hsr_get_port_ndev(real_dev, i);
|
||||
emac = netdev_priv(port_dev);
|
||||
if (!emac) {
|
||||
dev_put(port_dev);
|
||||
return -EINVAL;
|
||||
}
|
||||
icssg_prueth_hsr_fdb_add_del(emac, addr, vlan_id,
|
||||
true);
|
||||
dev_put(port_dev);
|
||||
}
|
||||
} else {
|
||||
emac = netdev_priv(real_dev);
|
||||
@@ -679,7 +683,7 @@ static int icssg_prueth_hsr_add_mcast(struct net_device *ndev, const u8 *addr)
|
||||
|
||||
static int icssg_prueth_hsr_del_mcast(struct net_device *ndev, const u8 *addr)
|
||||
{
|
||||
struct net_device *real_dev;
|
||||
struct net_device *real_dev, *port_dev;
|
||||
struct prueth_emac *emac;
|
||||
u8 vlan_id, i;
|
||||
|
||||
@@ -688,11 +692,15 @@ static int icssg_prueth_hsr_del_mcast(struct net_device *ndev, const u8 *addr)
|
||||
|
||||
if (is_hsr_master(real_dev)) {
|
||||
for (i = HSR_PT_SLAVE_A; i < HSR_PT_INTERLINK; i++) {
|
||||
emac = netdev_priv(hsr_get_port_ndev(real_dev, i));
|
||||
if (!emac)
|
||||
port_dev = hsr_get_port_ndev(real_dev, i);
|
||||
emac = netdev_priv(port_dev);
|
||||
if (!emac) {
|
||||
dev_put(port_dev);
|
||||
return -EINVAL;
|
||||
}
|
||||
icssg_prueth_hsr_fdb_add_del(emac, addr, vlan_id,
|
||||
false);
|
||||
dev_put(port_dev);
|
||||
}
|
||||
} else {
|
||||
emac = netdev_priv(real_dev);
|
||||
|
||||
@@ -2078,10 +2078,6 @@ static void wx_setup_mrqc(struct wx *wx)
|
||||
{
|
||||
u32 rss_field = 0;
|
||||
|
||||
/* VT, and RSS do not coexist at the same time */
|
||||
if (test_bit(WX_FLAG_VMDQ_ENABLED, wx->flags))
|
||||
return;
|
||||
|
||||
/* Disable indicating checksum in descriptor, enables RSS hash */
|
||||
wr32m(wx, WX_PSR_CTL, WX_PSR_CTL_PCSD, WX_PSR_CTL_PCSD);
|
||||
|
||||
|
||||
@@ -4286,6 +4286,7 @@ static int macsec_newlink(struct net_device *dev,
|
||||
if (err < 0)
|
||||
goto del_dev;
|
||||
|
||||
netdev_update_features(dev);
|
||||
netif_stacked_transfer_operstate(real_dev, dev);
|
||||
linkwatch_fire_event(dev);
|
||||
|
||||
|
||||
@@ -361,7 +361,7 @@ config NXP_TJA11XX_PHY
|
||||
tristate "NXP TJA11xx PHYs support"
|
||||
depends on HWMON
|
||||
help
|
||||
Currently supports the NXP TJA1100 and TJA1101 PHY.
|
||||
Currently supports the NXP TJA1100, TJA1101 and TJA1102 PHYs.
|
||||
|
||||
config NCN26000_PHY
|
||||
tristate "Onsemi 10BASE-T1S Ethernet PHY"
|
||||
|
||||
@@ -1065,23 +1065,19 @@ EXPORT_SYMBOL_GPL(phy_inband_caps);
|
||||
*/
|
||||
int phy_config_inband(struct phy_device *phydev, unsigned int modes)
|
||||
{
|
||||
int err;
|
||||
lockdep_assert_held(&phydev->lock);
|
||||
|
||||
if (!!(modes & LINK_INBAND_DISABLE) +
|
||||
!!(modes & LINK_INBAND_ENABLE) +
|
||||
!!(modes & LINK_INBAND_BYPASS) != 1)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&phydev->lock);
|
||||
if (!phydev->drv)
|
||||
err = -EIO;
|
||||
return -EIO;
|
||||
else if (!phydev->drv->config_inband)
|
||||
err = -EOPNOTSUPP;
|
||||
else
|
||||
err = phydev->drv->config_inband(phydev, modes);
|
||||
mutex_unlock(&phydev->lock);
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
return err;
|
||||
return phydev->drv->config_inband(phydev, modes);
|
||||
}
|
||||
EXPORT_SYMBOL(phy_config_inband);
|
||||
|
||||
|
||||
@@ -287,8 +287,7 @@ static bool phy_uses_state_machine(struct phy_device *phydev)
|
||||
if (phydev->phy_link_change == phy_link_change)
|
||||
return phydev->attached_dev && phydev->adjust_link;
|
||||
|
||||
/* phydev->phy_link_change is implicitly phylink_phy_change() */
|
||||
return true;
|
||||
return !!phydev->phy_link_change;
|
||||
}
|
||||
|
||||
static bool mdio_bus_phy_may_suspend(struct phy_device *phydev)
|
||||
@@ -1864,6 +1863,8 @@ void phy_detach(struct phy_device *phydev)
|
||||
phydev->attached_dev = NULL;
|
||||
phy_link_topo_del_phy(dev, phydev);
|
||||
}
|
||||
|
||||
phydev->phy_link_change = NULL;
|
||||
phydev->phylink = NULL;
|
||||
|
||||
if (!phydev->is_on_sfp_module)
|
||||
|
||||
Loaded 20 of 58 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user