Commit 2c68d5ea authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files
Tony Nguyen says:

====================
Intel Wired LAN Driver Updates 2026-01-13 (ice, igc)

For ice:
Jake adds missing initialization calls to u64_stats_init().

Dave stops deletion of VLAN 0 from prune list when device is primary
LAG interface.

Ding Hui adds a missed unit conversion function for proper timeout
value.

For igc:
Kurt Kanzenbach adds a call to re-set default Qbv schedule when number
of channels changes.

Chwee-Lin Choong reworks Tx timestamp detection logic to resolve a race
condition and reverts changes to TSN packet buffer size causing Tx
hangs under heavy load.

* '100GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/net-queue:
  igc: Reduce TSN TX packet buffer from 7KB to 5KB per queue
  igc: fix race condition in TX timestamp read for register 0
  igc: Restore default Qbv schedule when changing channels
  ice: Fix incorrect timeout ice_release_res()
  ice: Avoid detrimental cleanup for bond during interface stop
  ice: initialize ring_stats->syncp
====================

Link: https://patch.msgid.link/20260113220220.1034638-1-anthony.l.nguyen@intel.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents 4f5f148d 8ad1b6c1
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -2251,7 +2251,7 @@ void ice_release_res(struct ice_hw *hw, enum ice_aq_res_ids res)
	/* there are some rare cases when trying to release the resource
	 * results in an admin queue timeout, so handle them correctly
	 */
	timeout = jiffies + 10 * ICE_CTL_Q_SQ_CMD_TIMEOUT;
	timeout = jiffies + 10 * usecs_to_jiffies(ICE_CTL_Q_SQ_CMD_TIMEOUT);
	do {
		status = ice_aq_release_res(hw, res, 0, NULL);
		if (status != -EIO)
+21 −8
Original line number Diff line number Diff line
@@ -398,6 +398,8 @@ static int ice_vsi_alloc_ring_stats(struct ice_vsi *vsi)
			if (!ring_stats)
				goto err_out;

			u64_stats_init(&ring_stats->syncp);

			WRITE_ONCE(tx_ring_stats[i], ring_stats);
		}

@@ -417,6 +419,8 @@ static int ice_vsi_alloc_ring_stats(struct ice_vsi *vsi)
			if (!ring_stats)
				goto err_out;

			u64_stats_init(&ring_stats->syncp);

			WRITE_ONCE(rx_ring_stats[i], ring_stats);
		}

@@ -3805,22 +3809,31 @@ int ice_vsi_add_vlan_zero(struct ice_vsi *vsi)
int ice_vsi_del_vlan_zero(struct ice_vsi *vsi)
{
	struct ice_vsi_vlan_ops *vlan_ops = ice_get_compat_vsi_vlan_ops(vsi);
	struct ice_pf *pf = vsi->back;
	struct ice_vlan vlan;
	int err;

	if (pf->lag && pf->lag->primary) {
		dev_dbg(ice_pf_to_dev(pf), "Interface is primary in aggregate - not deleting prune list\n");
	} else {
		vlan = ICE_VLAN(0, 0, 0);
		err = vlan_ops->del_vlan(vsi, &vlan);
		if (err && err != -EEXIST)
			return err;
	}

	/* in SVM both VLAN 0 filters are identical */
	if (!ice_is_dvm_ena(&vsi->back->hw))
		return 0;

	if (pf->lag && pf->lag->primary) {
		dev_dbg(ice_pf_to_dev(pf), "Interface is primary in aggregate - not deleting QinQ prune list\n");
	} else {
		vlan = ICE_VLAN(ETH_P_8021Q, 0, 0);
		err = vlan_ops->del_vlan(vsi, &vlan);
		if (err && err != -EEXIST)
			return err;
	}

	/* when deleting the last VLAN filter, make sure to disable the VLAN
	 * promisc mode so the filter isn't left by accident
+3 −2
Original line number Diff line number Diff line
@@ -443,9 +443,10 @@
#define IGC_TXPBSIZE_DEFAULT ( \
	IGC_TXPB0SIZE(20) | IGC_TXPB1SIZE(0) | IGC_TXPB2SIZE(0) | \
	IGC_TXPB3SIZE(0) | IGC_OS2BMCPBSIZE(4))
/* TSN value following I225/I226 SW User Manual Section 7.5.4 */
#define IGC_TXPBSIZE_TSN ( \
	IGC_TXPB0SIZE(7) | IGC_TXPB1SIZE(7) | IGC_TXPB2SIZE(7) | \
	IGC_TXPB3SIZE(7) | IGC_OS2BMCPBSIZE(4))
	IGC_TXPB0SIZE(5) | IGC_TXPB1SIZE(5) | IGC_TXPB2SIZE(5) | \
	IGC_TXPB3SIZE(5) | IGC_OS2BMCPBSIZE(4))

#define IGC_DTXMXPKTSZ_TSN	0x19 /* 1600 bytes of max TX DMA packet size */
#define IGC_DTXMXPKTSZ_DEFAULT	0x98 /* 9728-byte Jumbo frames */
+2 −2
Original line number Diff line number Diff line
@@ -1565,8 +1565,8 @@ static int igc_ethtool_set_channels(struct net_device *netdev,
	if (ch->other_count != NON_Q_VECTORS)
		return -EINVAL;

	/* Do not allow channel reconfiguration when mqprio is enabled */
	if (adapter->strict_priority_enable)
	/* Do not allow channel reconfiguration when any TSN qdisc is enabled */
	if (adapter->flags & IGC_FLAG_TSN_ANY_ENABLED)
		return -EINVAL;

	/* Verify the number of channels doesn't exceed hw limits */
+5 −0
Original line number Diff line number Diff line
@@ -7759,6 +7759,11 @@ int igc_reinit_queues(struct igc_adapter *adapter)
	if (netif_running(netdev))
		err = igc_open(netdev);

	if (!err) {
		/* Restore default IEEE 802.1Qbv schedule after queue reinit */
		igc_tsn_clear_schedule(adapter);
	}

	return err;
}

Loading