mirror of
https://github.com/Dasharo/linux.git
synced 2026-03-06 15:25:10 -08:00
Merge tag 'net-6.2-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Pull networking fixes from Paolo Abeni:
"Including fixes from rxrpc.
The rxrpc changes are noticeable large: to address a recent regression
has been necessary completing the threaded refactor.
Current release - regressions:
- rxrpc:
- only disconnect calls in the I/O thread
- move client call connection to the I/O thread
- fix incoming call setup race
- eth: mlx5:
- restore pkt rate policing support
- fix memory leak on updating vport counters
Previous releases - regressions:
- gro: take care of DODGY packets
- ipv6: deduct extension header length in rawv6_push_pending_frames
- tipc: fix unexpected link reset due to discovery messages
Previous releases - always broken:
- sched: disallow noqueue for qdisc classes
- eth: ice: fix potential memory leak in ice_gnss_tty_write()
- eth: ixgbe: fix pci device refcount leak
- eth: mlx5:
- fix command stats access after free
- fix macsec possible null dereference when updating MAC security
entity (SecY)"
* tag 'net-6.2-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (64 commits)
r8152: add vendor/device ID pair for Microsoft Devkit
net: stmmac: add aux timestamps fifo clearance wait
bnxt: make sure we return pages to the pool
net: hns3: fix wrong use of rss size during VF rss config
ipv6: raw: Deduct extension header length in rawv6_push_pending_frames
net: lan966x: check for ptp to be enabled in lan966x_ptp_deinit()
net: sched: disallow noqueue for qdisc classes
iavf/iavf_main: actually log ->src mask when talking about it
igc: Fix PPS delta between two synchronized end-points
ixgbe: fix pci device refcount leak
octeontx2-pf: Fix resource leakage in VF driver unbind
selftests/net: l2_tos_ttl_inherit.sh: Ensure environment cleanup on failure.
selftests/net: l2_tos_ttl_inherit.sh: Run tests in their own netns.
selftests/net: l2_tos_ttl_inherit.sh: Set IPv6 addresses with "nodad".
net/mlx5e: Fix macsec possible null dereference when updating MAC security entity (SecY)
net/mlx5e: Fix macsec ssci attribute handling in offload path
net/mlx5: E-switch, Coverity: overlapping copy
net/mlx5e: Don't support encap rules with gbp option
net/mlx5: Fix ptp max frequency adjustment range
net/mlx5e: Fix memory leak on updating vport counters
...
This commit is contained in:
@@ -880,8 +880,8 @@ The kernel interface functions are as follows:
|
||||
|
||||
notify_end_rx can be NULL or it can be used to specify a function to be
|
||||
called when the call changes state to end the Tx phase. This function is
|
||||
called with the call-state spinlock held to prevent any reply or final ACK
|
||||
from being delivered first.
|
||||
called with a spinlock held to prevent the last DATA packet from being
|
||||
transmitted until the function returns.
|
||||
|
||||
(#) Receive data from a call::
|
||||
|
||||
|
||||
@@ -993,7 +993,7 @@ static struct sk_buff *bnxt_rx_multi_page_skb(struct bnxt *bp,
|
||||
DMA_ATTR_WEAK_ORDERING);
|
||||
skb = build_skb(page_address(page), PAGE_SIZE);
|
||||
if (!skb) {
|
||||
__free_page(page);
|
||||
page_pool_recycle_direct(rxr->page_pool, page);
|
||||
return NULL;
|
||||
}
|
||||
skb_mark_for_recycle(skb);
|
||||
@@ -1031,7 +1031,7 @@ static struct sk_buff *bnxt_rx_page_skb(struct bnxt *bp,
|
||||
|
||||
skb = napi_alloc_skb(&rxr->bnapi->napi, payload);
|
||||
if (!skb) {
|
||||
__free_page(page);
|
||||
page_pool_recycle_direct(rxr->page_pool, page);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
@@ -3130,7 +3130,7 @@ static int hclgevf_set_channels(struct hnae3_handle *handle, u32 new_tqps_num,
|
||||
|
||||
hclgevf_update_rss_size(handle, new_tqps_num);
|
||||
|
||||
hclge_comm_get_rss_tc_info(cur_rss_size, hdev->hw_tc_map,
|
||||
hclge_comm_get_rss_tc_info(kinfo->rss_size, hdev->hw_tc_map,
|
||||
tc_offset, tc_valid, tc_size);
|
||||
ret = hclge_comm_set_rss_tc_mode(&hdev->hw.hw, tc_offset,
|
||||
tc_valid, tc_size);
|
||||
|
||||
@@ -3850,7 +3850,7 @@ static int iavf_parse_cls_flower(struct iavf_adapter *adapter,
|
||||
field_flags |= IAVF_CLOUD_FIELD_IIP;
|
||||
} else {
|
||||
dev_err(&adapter->pdev->dev, "Bad ip src mask 0x%08x\n",
|
||||
be32_to_cpu(match.mask->dst));
|
||||
be32_to_cpu(match.mask->src));
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -363,6 +363,7 @@ ice_gnss_tty_write(struct tty_struct *tty, const unsigned char *buf, int count)
|
||||
/* Send the data out to a hardware port */
|
||||
write_buf = kzalloc(sizeof(*write_buf), GFP_KERNEL);
|
||||
if (!write_buf) {
|
||||
kfree(cmd_buf);
|
||||
err = -ENOMEM;
|
||||
goto exit;
|
||||
}
|
||||
@@ -460,6 +461,9 @@ static struct tty_driver *ice_gnss_create_tty_driver(struct ice_pf *pf)
|
||||
for (i = 0; i < ICE_GNSS_TTY_MINOR_DEVICES; i++) {
|
||||
pf->gnss_tty_port[i] = kzalloc(sizeof(*pf->gnss_tty_port[i]),
|
||||
GFP_KERNEL);
|
||||
if (!pf->gnss_tty_port[i])
|
||||
goto err_out;
|
||||
|
||||
pf->gnss_serial[i] = NULL;
|
||||
|
||||
tty_port_init(pf->gnss_tty_port[i]);
|
||||
@@ -469,21 +473,23 @@ static struct tty_driver *ice_gnss_create_tty_driver(struct ice_pf *pf)
|
||||
err = tty_register_driver(tty_driver);
|
||||
if (err) {
|
||||
dev_err(dev, "Failed to register TTY driver err=%d\n", err);
|
||||
|
||||
for (i = 0; i < ICE_GNSS_TTY_MINOR_DEVICES; i++) {
|
||||
tty_port_destroy(pf->gnss_tty_port[i]);
|
||||
kfree(pf->gnss_tty_port[i]);
|
||||
}
|
||||
kfree(ttydrv_name);
|
||||
tty_driver_kref_put(pf->ice_gnss_tty_driver);
|
||||
|
||||
return NULL;
|
||||
goto err_out;
|
||||
}
|
||||
|
||||
for (i = 0; i < ICE_GNSS_TTY_MINOR_DEVICES; i++)
|
||||
dev_info(dev, "%s%d registered\n", ttydrv_name, i);
|
||||
|
||||
return tty_driver;
|
||||
|
||||
err_out:
|
||||
while (i--) {
|
||||
tty_port_destroy(pf->gnss_tty_port[i]);
|
||||
kfree(pf->gnss_tty_port[i]);
|
||||
}
|
||||
kfree(ttydrv_name);
|
||||
tty_driver_kref_put(pf->ice_gnss_tty_driver);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -475,7 +475,9 @@
|
||||
#define IGC_TSAUXC_EN_TT0 BIT(0) /* Enable target time 0. */
|
||||
#define IGC_TSAUXC_EN_TT1 BIT(1) /* Enable target time 1. */
|
||||
#define IGC_TSAUXC_EN_CLK0 BIT(2) /* Enable Configurable Frequency Clock 0. */
|
||||
#define IGC_TSAUXC_ST0 BIT(4) /* Start Clock 0 Toggle on Target Time 0. */
|
||||
#define IGC_TSAUXC_EN_CLK1 BIT(5) /* Enable Configurable Frequency Clock 1. */
|
||||
#define IGC_TSAUXC_ST1 BIT(7) /* Start Clock 1 Toggle on Target Time 1. */
|
||||
#define IGC_TSAUXC_EN_TS0 BIT(8) /* Enable hardware timestamp 0. */
|
||||
#define IGC_TSAUXC_AUTT0 BIT(9) /* Auxiliary Timestamp Taken. */
|
||||
#define IGC_TSAUXC_EN_TS1 BIT(10) /* Enable hardware timestamp 0. */
|
||||
|
||||
@@ -322,7 +322,7 @@ static int igc_ptp_feature_enable_i225(struct ptp_clock_info *ptp,
|
||||
ts = ns_to_timespec64(ns);
|
||||
if (rq->perout.index == 1) {
|
||||
if (use_freq) {
|
||||
tsauxc_mask = IGC_TSAUXC_EN_CLK1;
|
||||
tsauxc_mask = IGC_TSAUXC_EN_CLK1 | IGC_TSAUXC_ST1;
|
||||
tsim_mask = 0;
|
||||
} else {
|
||||
tsauxc_mask = IGC_TSAUXC_EN_TT1;
|
||||
@@ -333,7 +333,7 @@ static int igc_ptp_feature_enable_i225(struct ptp_clock_info *ptp,
|
||||
freqout = IGC_FREQOUT1;
|
||||
} else {
|
||||
if (use_freq) {
|
||||
tsauxc_mask = IGC_TSAUXC_EN_CLK0;
|
||||
tsauxc_mask = IGC_TSAUXC_EN_CLK0 | IGC_TSAUXC_ST0;
|
||||
tsim_mask = 0;
|
||||
} else {
|
||||
tsauxc_mask = IGC_TSAUXC_EN_TT0;
|
||||
@@ -347,10 +347,12 @@ static int igc_ptp_feature_enable_i225(struct ptp_clock_info *ptp,
|
||||
tsauxc = rd32(IGC_TSAUXC);
|
||||
tsim = rd32(IGC_TSIM);
|
||||
if (rq->perout.index == 1) {
|
||||
tsauxc &= ~(IGC_TSAUXC_EN_TT1 | IGC_TSAUXC_EN_CLK1);
|
||||
tsauxc &= ~(IGC_TSAUXC_EN_TT1 | IGC_TSAUXC_EN_CLK1 |
|
||||
IGC_TSAUXC_ST1);
|
||||
tsim &= ~IGC_TSICR_TT1;
|
||||
} else {
|
||||
tsauxc &= ~(IGC_TSAUXC_EN_TT0 | IGC_TSAUXC_EN_CLK0);
|
||||
tsauxc &= ~(IGC_TSAUXC_EN_TT0 | IGC_TSAUXC_EN_CLK0 |
|
||||
IGC_TSAUXC_ST0);
|
||||
tsim &= ~IGC_TSICR_TT0;
|
||||
}
|
||||
if (on) {
|
||||
|
||||
@@ -855,9 +855,11 @@ static struct pci_dev *ixgbe_get_first_secondary_devfn(unsigned int devfn)
|
||||
rp_pdev = pci_get_domain_bus_and_slot(0, 0, devfn);
|
||||
if (rp_pdev && rp_pdev->subordinate) {
|
||||
bus = rp_pdev->subordinate->number;
|
||||
pci_dev_put(rp_pdev);
|
||||
return pci_get_domain_bus_and_slot(0, bus, 0);
|
||||
}
|
||||
|
||||
pci_dev_put(rp_pdev);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -874,6 +876,7 @@ static bool ixgbe_x550em_a_has_mii(struct ixgbe_hw *hw)
|
||||
struct ixgbe_adapter *adapter = hw->back;
|
||||
struct pci_dev *pdev = adapter->pdev;
|
||||
struct pci_dev *func0_pdev;
|
||||
bool has_mii = false;
|
||||
|
||||
/* For the C3000 family of SoCs (x550em_a) the internal ixgbe devices
|
||||
* are always downstream of root ports @ 0000:00:16.0 & 0000:00:17.0
|
||||
@@ -884,15 +887,16 @@ static bool ixgbe_x550em_a_has_mii(struct ixgbe_hw *hw)
|
||||
func0_pdev = ixgbe_get_first_secondary_devfn(PCI_DEVFN(0x16, 0));
|
||||
if (func0_pdev) {
|
||||
if (func0_pdev == pdev)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
has_mii = true;
|
||||
goto out;
|
||||
}
|
||||
func0_pdev = ixgbe_get_first_secondary_devfn(PCI_DEVFN(0x17, 0));
|
||||
if (func0_pdev == pdev)
|
||||
return true;
|
||||
has_mii = true;
|
||||
|
||||
return false;
|
||||
out:
|
||||
pci_dev_put(func0_pdev);
|
||||
return has_mii;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -774,9 +774,9 @@ int cgx_lmac_rx_tx_enable(void *cgxd, int lmac_id, bool enable)
|
||||
|
||||
cfg = cgx_read(cgx, lmac_id, CGXX_CMRX_CFG);
|
||||
if (enable)
|
||||
cfg |= CMR_EN | DATA_PKT_RX_EN | DATA_PKT_TX_EN;
|
||||
cfg |= DATA_PKT_RX_EN | DATA_PKT_TX_EN;
|
||||
else
|
||||
cfg &= ~(CMR_EN | DATA_PKT_RX_EN | DATA_PKT_TX_EN);
|
||||
cfg &= ~(DATA_PKT_RX_EN | DATA_PKT_TX_EN);
|
||||
cgx_write(cgx, lmac_id, CGXX_CMRX_CFG, cfg);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -26,7 +26,6 @@
|
||||
#define CMR_P2X_SEL_SHIFT 59ULL
|
||||
#define CMR_P2X_SEL_NIX0 1ULL
|
||||
#define CMR_P2X_SEL_NIX1 2ULL
|
||||
#define CMR_EN BIT_ULL(55)
|
||||
#define DATA_PKT_TX_EN BIT_ULL(53)
|
||||
#define DATA_PKT_RX_EN BIT_ULL(54)
|
||||
#define CGX_LMAC_TYPE_SHIFT 40
|
||||
|
||||
@@ -758,6 +758,8 @@ static void otx2vf_remove(struct pci_dev *pdev)
|
||||
if (vf->otx2_wq)
|
||||
destroy_workqueue(vf->otx2_wq);
|
||||
otx2_ptp_destroy(vf);
|
||||
otx2_mcam_flow_del(vf);
|
||||
otx2_shutdown_tc(vf);
|
||||
otx2vf_disable_mbox_intr(vf);
|
||||
otx2_detach_resources(&vf->mbox);
|
||||
if (test_bit(CN10K_LMTST, &vf->hw.cap_flag))
|
||||
|
||||
@@ -2176,15 +2176,9 @@ int mlx5_cmd_init(struct mlx5_core_dev *dev)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
cmd->stats = kvcalloc(MLX5_CMD_OP_MAX, sizeof(*cmd->stats), GFP_KERNEL);
|
||||
if (!cmd->stats)
|
||||
return -ENOMEM;
|
||||
|
||||
cmd->pool = dma_pool_create("mlx5_cmd", mlx5_core_dma_dev(dev), size, align, 0);
|
||||
if (!cmd->pool) {
|
||||
err = -ENOMEM;
|
||||
goto dma_pool_err;
|
||||
}
|
||||
if (!cmd->pool)
|
||||
return -ENOMEM;
|
||||
|
||||
err = alloc_cmd_page(dev, cmd);
|
||||
if (err)
|
||||
@@ -2268,8 +2262,6 @@ err_free_page:
|
||||
|
||||
err_free_pool:
|
||||
dma_pool_destroy(cmd->pool);
|
||||
dma_pool_err:
|
||||
kvfree(cmd->stats);
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -2282,7 +2274,6 @@ void mlx5_cmd_cleanup(struct mlx5_core_dev *dev)
|
||||
destroy_msg_cache(dev);
|
||||
free_cmd_page(dev, cmd);
|
||||
dma_pool_destroy(cmd->pool);
|
||||
kvfree(cmd->stats);
|
||||
}
|
||||
|
||||
void mlx5_cmd_set_state(struct mlx5_core_dev *dev,
|
||||
|
||||
@@ -34,12 +34,6 @@ static int police_act_validate(const struct flow_action_entry *act,
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
if (act->police.rate_pkt_ps) {
|
||||
NL_SET_ERR_MSG_MOD(extack,
|
||||
"QoS offload not support packets per second");
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -127,6 +127,7 @@ mlx5e_post_meter_add_rule(struct mlx5e_priv *priv,
|
||||
attr->counter = act_counter;
|
||||
|
||||
attr->flags |= MLX5_ATTR_FLAG_NO_IN_PORT;
|
||||
attr->inner_match_level = MLX5_MATCH_NONE;
|
||||
attr->outer_match_level = MLX5_MATCH_NONE;
|
||||
attr->chain = 0;
|
||||
attr->prio = 0;
|
||||
|
||||
@@ -88,6 +88,8 @@ static int mlx5e_gen_ip_tunnel_header_vxlan(char buf[],
|
||||
struct udphdr *udp = (struct udphdr *)(buf);
|
||||
struct vxlanhdr *vxh;
|
||||
|
||||
if (tun_key->tun_flags & TUNNEL_VXLAN_OPT)
|
||||
return -EOPNOTSUPP;
|
||||
vxh = (struct vxlanhdr *)((char *)udp + sizeof(struct udphdr));
|
||||
*ip_proto = IPPROTO_UDP;
|
||||
|
||||
|
||||
@@ -62,6 +62,7 @@ struct mlx5e_macsec_sa {
|
||||
u32 enc_key_id;
|
||||
u32 next_pn;
|
||||
sci_t sci;
|
||||
ssci_t ssci;
|
||||
salt_t salt;
|
||||
|
||||
struct rhash_head hash;
|
||||
@@ -358,7 +359,6 @@ static int mlx5e_macsec_init_sa(struct macsec_context *ctx,
|
||||
struct mlx5_core_dev *mdev = priv->mdev;
|
||||
struct mlx5_macsec_obj_attrs obj_attrs;
|
||||
union mlx5e_macsec_rule *macsec_rule;
|
||||
struct macsec_key *key;
|
||||
int err;
|
||||
|
||||
obj_attrs.next_pn = sa->next_pn;
|
||||
@@ -368,13 +368,9 @@ static int mlx5e_macsec_init_sa(struct macsec_context *ctx,
|
||||
obj_attrs.aso_pdn = macsec->aso.pdn;
|
||||
obj_attrs.epn_state = sa->epn_state;
|
||||
|
||||
key = (is_tx) ? &ctx->sa.tx_sa->key : &ctx->sa.rx_sa->key;
|
||||
|
||||
if (sa->epn_state.epn_enabled) {
|
||||
obj_attrs.ssci = (is_tx) ? cpu_to_be32((__force u32)ctx->sa.tx_sa->ssci) :
|
||||
cpu_to_be32((__force u32)ctx->sa.rx_sa->ssci);
|
||||
|
||||
memcpy(&obj_attrs.salt, &key->salt, sizeof(key->salt));
|
||||
obj_attrs.ssci = cpu_to_be32((__force u32)sa->ssci);
|
||||
memcpy(&obj_attrs.salt, &sa->salt, sizeof(sa->salt));
|
||||
}
|
||||
|
||||
obj_attrs.replay_window = ctx->secy->replay_window;
|
||||
@@ -499,10 +495,11 @@ mlx5e_macsec_get_macsec_device_context(const struct mlx5e_macsec *macsec,
|
||||
}
|
||||
|
||||
static void update_macsec_epn(struct mlx5e_macsec_sa *sa, const struct macsec_key *key,
|
||||
const pn_t *next_pn_halves)
|
||||
const pn_t *next_pn_halves, ssci_t ssci)
|
||||
{
|
||||
struct mlx5e_macsec_epn_state *epn_state = &sa->epn_state;
|
||||
|
||||
sa->ssci = ssci;
|
||||
sa->salt = key->salt;
|
||||
epn_state->epn_enabled = 1;
|
||||
epn_state->epn_msb = next_pn_halves->upper;
|
||||
@@ -550,7 +547,8 @@ static int mlx5e_macsec_add_txsa(struct macsec_context *ctx)
|
||||
tx_sa->assoc_num = assoc_num;
|
||||
|
||||
if (secy->xpn)
|
||||
update_macsec_epn(tx_sa, &ctx_tx_sa->key, &ctx_tx_sa->next_pn_halves);
|
||||
update_macsec_epn(tx_sa, &ctx_tx_sa->key, &ctx_tx_sa->next_pn_halves,
|
||||
ctx_tx_sa->ssci);
|
||||
|
||||
err = mlx5_create_encryption_key(mdev, ctx->sa.key, secy->key_len,
|
||||
MLX5_ACCEL_OBJ_MACSEC_KEY,
|
||||
@@ -945,7 +943,8 @@ static int mlx5e_macsec_add_rxsa(struct macsec_context *ctx)
|
||||
rx_sa->fs_id = rx_sc->sc_xarray_element->fs_id;
|
||||
|
||||
if (ctx->secy->xpn)
|
||||
update_macsec_epn(rx_sa, &ctx_rx_sa->key, &ctx_rx_sa->next_pn_halves);
|
||||
update_macsec_epn(rx_sa, &ctx_rx_sa->key, &ctx_rx_sa->next_pn_halves,
|
||||
ctx_rx_sa->ssci);
|
||||
|
||||
err = mlx5_create_encryption_key(mdev, ctx->sa.key, ctx->secy->key_len,
|
||||
MLX5_ACCEL_OBJ_MACSEC_KEY,
|
||||
|
||||
@@ -4084,6 +4084,9 @@ static netdev_features_t mlx5e_fix_features(struct net_device *netdev,
|
||||
struct mlx5e_vlan_table *vlan;
|
||||
struct mlx5e_params *params;
|
||||
|
||||
if (!netif_device_present(netdev))
|
||||
return features;
|
||||
|
||||
vlan = mlx5e_fs_get_vlan(priv->fs);
|
||||
mutex_lock(&priv->state_lock);
|
||||
params = &priv->channels.params;
|
||||
|
||||
@@ -191,7 +191,7 @@ static MLX5E_DECLARE_STATS_GRP_OP_UPDATE_STATS(vport_rep)
|
||||
if (err) {
|
||||
netdev_warn(priv->netdev, "vport %d error %d reading stats\n",
|
||||
rep->vport, err);
|
||||
return;
|
||||
goto out;
|
||||
}
|
||||
|
||||
#define MLX5_GET_CTR(p, x) \
|
||||
@@ -241,6 +241,7 @@ static MLX5E_DECLARE_STATS_GRP_OP_UPDATE_STATS(vport_rep)
|
||||
rep_stats->tx_vport_rdma_multicast_bytes =
|
||||
MLX5_GET_CTR(out, received_ib_multicast.octets);
|
||||
|
||||
out:
|
||||
kvfree(out);
|
||||
}
|
||||
|
||||
|
||||
@@ -2419,7 +2419,7 @@ static inline void mlx5i_complete_rx_cqe(struct mlx5e_rq *rq,
|
||||
|
||||
priv = mlx5i_epriv(netdev);
|
||||
tstamp = &priv->tstamp;
|
||||
stats = rq->stats;
|
||||
stats = &priv->channel_stats[rq->ix]->rq;
|
||||
|
||||
flags_rqpn = be32_to_cpu(cqe->flags_rqpn);
|
||||
g = (flags_rqpn >> 28) & 3;
|
||||
|
||||
@@ -1301,7 +1301,6 @@ mlx5e_tc_add_nic_flow(struct mlx5e_priv *priv,
|
||||
|
||||
if (attr->action & MLX5_FLOW_CONTEXT_ACTION_MOD_HDR) {
|
||||
err = mlx5e_attach_mod_hdr(priv, flow, parse_attr);
|
||||
mlx5e_mod_hdr_dealloc(&parse_attr->mod_hdr_acts);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
@@ -1359,8 +1358,10 @@ static void mlx5e_tc_del_nic_flow(struct mlx5e_priv *priv,
|
||||
}
|
||||
mutex_unlock(&tc->t_lock);
|
||||
|
||||
if (attr->action & MLX5_FLOW_CONTEXT_ACTION_MOD_HDR)
|
||||
if (attr->action & MLX5_FLOW_CONTEXT_ACTION_MOD_HDR) {
|
||||
mlx5e_mod_hdr_dealloc(&attr->parse_attr->mod_hdr_acts);
|
||||
mlx5e_detach_mod_hdr(priv, flow);
|
||||
}
|
||||
|
||||
if (attr->action & MLX5_FLOW_CONTEXT_ACTION_COUNT)
|
||||
mlx5_fc_destroy(priv->mdev, attr->counter);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user