mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 09:36:22 +02:00
Merge branch 'intel-wired-lan-driver-updates-2026-07-17-ice-idpf-iavf'
Tony Nguyen says: ==================== Intel Wired LAN Driver Updates 2026-07-17 (ice, idpf) [part] For ice: Vincent Chen fixes issue preventing VF creation when switchdev is not enabled in the configuration. Marcin corrects iteration value for profile association that was truncating profiles. Karol bypasses, unnecessary, waiting on sideband queue PTP writes which can cause failures with phc_ctl program. Sergey adds READ_ONCE() to access of PHC time to prevent torn read on 32-bit systems. Paul adds a check for uninitialized PTP state before attempting to rebuild it and restricts check of TxTime to be for PF VSI only. Alex adds bounds check on PTYPE to prevent possible out-of-bounds write. For idpf: Emil defers setting of adapter max_vports value to prevent inadvertent use if interim allocation errors are encountered. ==================== Link: https://patch.msgid.link/20260717185340.3595286-1-anthony.l.nguyen@intel.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
7fd55911fd
|
|
@ -767,6 +767,9 @@ static inline bool ice_is_txtime_ena(const struct ice_tx_ring *ring)
|
|||
struct ice_vsi *vsi = ring->vsi;
|
||||
struct ice_pf *pf = vsi->back;
|
||||
|
||||
if (vsi->type != ICE_VSI_PF)
|
||||
return false;
|
||||
|
||||
return test_bit(ring->q_index, pf->txtime_txqs);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -512,9 +512,6 @@ int ice_eswitch_attach_vf(struct ice_pf *pf, struct ice_vf *vf)
|
|||
struct ice_repr *repr;
|
||||
int err;
|
||||
|
||||
if (!ice_is_eswitch_mode_switchdev(pf))
|
||||
return 0;
|
||||
|
||||
repr = ice_repr_create_vf(vf);
|
||||
if (IS_ERR(repr))
|
||||
return PTR_ERR(repr);
|
||||
|
|
|
|||
|
|
@ -2623,7 +2623,7 @@ int ice_init_lag(struct ice_pf *pf)
|
|||
goto free_lport_res;
|
||||
|
||||
/* associate recipes to profiles */
|
||||
for (n = 0; n < ICE_PROFID_IPV6_GTPU_IPV6_TCP_INNER; n++) {
|
||||
for (n = 0; n < ICE_MAX_NUM_PROFILES; n++) {
|
||||
err = ice_aq_get_recipe_to_profile(&pf->hw, n,
|
||||
&recipe_bits, NULL);
|
||||
if (err)
|
||||
|
|
|
|||
|
|
@ -2368,6 +2368,9 @@ int ice_parser_profile_init(struct ice_parser_result *rslt,
|
|||
u16 proto_off = 0;
|
||||
u16 off;
|
||||
|
||||
if (rslt->ptype >= ICE_FLOW_PTYPE_MAX)
|
||||
return -EINVAL;
|
||||
|
||||
memset(prof, 0, sizeof(*prof));
|
||||
set_bit(rslt->ptype, prof->ptypes);
|
||||
if (blk == ICE_BLK_SW) {
|
||||
|
|
|
|||
|
|
@ -346,7 +346,7 @@ static u64 ice_ptp_extend_40b_ts(struct ice_pf *pf, u64 in_tstamp)
|
|||
return 0;
|
||||
}
|
||||
|
||||
return ice_ptp_extend_32b_ts(pf->ptp.cached_phc_time,
|
||||
return ice_ptp_extend_32b_ts(READ_ONCE(pf->ptp.cached_phc_time),
|
||||
(in_tstamp >> 8) & mask);
|
||||
}
|
||||
|
||||
|
|
@ -3037,6 +3037,11 @@ void ice_ptp_rebuild(struct ice_pf *pf, enum ice_reset_req reset_type)
|
|||
struct ice_ptp *ptp = &pf->ptp;
|
||||
int err;
|
||||
|
||||
if (ptp->state == ICE_PTP_UNINIT) {
|
||||
dev_dbg(ice_pf_to_dev(pf), "PTP was not initialized, skipping rebuild\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (ptp->state == ICE_PTP_READY) {
|
||||
ice_ptp_prepare_for_reset(pf, reset_type);
|
||||
} else if (ptp->state != ICE_PTP_RESETTING) {
|
||||
|
|
|
|||
|
|
@ -484,12 +484,14 @@ static int ice_start_vfs(struct ice_pf *pf)
|
|||
goto teardown;
|
||||
}
|
||||
|
||||
retval = ice_eswitch_attach_vf(pf, vf);
|
||||
if (retval) {
|
||||
dev_err(ice_pf_to_dev(pf), "Failed to attach VF %d to eswitch, error %d",
|
||||
vf->vf_id, retval);
|
||||
ice_vf_vsi_release(vf);
|
||||
goto teardown;
|
||||
if (ice_is_eswitch_mode_switchdev(pf)) {
|
||||
retval = ice_eswitch_attach_vf(pf, vf);
|
||||
if (retval) {
|
||||
dev_err(ice_pf_to_dev(pf), "Failed to attach VF %d to eswitch, error %d",
|
||||
vf->vf_id, retval);
|
||||
ice_vf_vsi_release(vf);
|
||||
goto teardown;
|
||||
}
|
||||
}
|
||||
|
||||
set_bit(ICE_VF_STATE_INIT, vf->vf_states);
|
||||
|
|
|
|||
|
|
@ -1654,7 +1654,7 @@ int ice_tx_csum(struct ice_tx_buf *first, struct ice_tx_offload_params *off)
|
|||
ret = ipv6_skip_exthdr(skb, exthdr - skb->data,
|
||||
&l4_proto, &frag_off);
|
||||
if (ret < 0)
|
||||
return -1;
|
||||
goto checksum_sw_fb;
|
||||
}
|
||||
|
||||
/* define outer transport */
|
||||
|
|
@ -1673,11 +1673,7 @@ int ice_tx_csum(struct ice_tx_buf *first, struct ice_tx_offload_params *off)
|
|||
l4.hdr = skb_inner_network_header(skb);
|
||||
break;
|
||||
default:
|
||||
if (first->tx_flags & ICE_TX_FLAGS_TSO)
|
||||
return -1;
|
||||
|
||||
skb_checksum_help(skb);
|
||||
return 0;
|
||||
goto checksum_sw_fb;
|
||||
}
|
||||
|
||||
/* compute outer L3 header size */
|
||||
|
|
@ -1736,7 +1732,7 @@ int ice_tx_csum(struct ice_tx_buf *first, struct ice_tx_offload_params *off)
|
|||
ipv6_skip_exthdr(skb, exthdr - skb->data, &l4_proto,
|
||||
&frag_off);
|
||||
} else {
|
||||
return -1;
|
||||
goto checksum_sw_fb;
|
||||
}
|
||||
|
||||
/* compute inner L3 header size */
|
||||
|
|
@ -1789,15 +1785,17 @@ int ice_tx_csum(struct ice_tx_buf *first, struct ice_tx_offload_params *off)
|
|||
break;
|
||||
|
||||
default:
|
||||
if (first->tx_flags & ICE_TX_FLAGS_TSO)
|
||||
return -1;
|
||||
skb_checksum_help(skb);
|
||||
return 0;
|
||||
goto checksum_sw_fb;
|
||||
}
|
||||
|
||||
off->td_cmd |= cmd;
|
||||
off->td_offset |= offset;
|
||||
return 1;
|
||||
|
||||
checksum_sw_fb:
|
||||
if (first->tx_flags & ICE_TX_FLAGS_TSO)
|
||||
return -1;
|
||||
return skb_checksum_help(skb);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -812,7 +812,8 @@ void ice_reset_all_vfs(struct ice_pf *pf)
|
|||
}
|
||||
ice_vf_post_vsi_rebuild(vf);
|
||||
|
||||
ice_eswitch_attach_vf(pf, vf);
|
||||
if (ice_is_eswitch_mode_switchdev(pf))
|
||||
ice_eswitch_attach_vf(pf, vf);
|
||||
|
||||
mutex_unlock(&vf->cfg_lock);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3555,7 +3555,6 @@ int idpf_vc_core_init(struct idpf_adapter *adapter)
|
|||
|
||||
pci_sriov_set_totalvfs(adapter->pdev, idpf_get_max_vfs(adapter));
|
||||
num_max_vports = idpf_get_max_vports(adapter);
|
||||
adapter->max_vports = num_max_vports;
|
||||
adapter->vports = kzalloc_objs(*adapter->vports, num_max_vports);
|
||||
if (!adapter->vports)
|
||||
return -ENOMEM;
|
||||
|
|
@ -3576,6 +3575,12 @@ int idpf_vc_core_init(struct idpf_adapter *adapter)
|
|||
goto err_netdev_alloc;
|
||||
}
|
||||
|
||||
/* Set max_vports only after vports, netdevs and vport_config buffers
|
||||
* are allocated to make sure max_vport bound loops don't end up
|
||||
* crashing, following allocation errors on init.
|
||||
*/
|
||||
adapter->max_vports = num_max_vports;
|
||||
|
||||
/* Start the mailbox task before requesting vectors. This will ensure
|
||||
* vector information response from mailbox is handled
|
||||
*/
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user