mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
Merge tag 'net-6.17-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Pull networking fixes from Jakub Kicinski:
"Including fixes from wireless. No known regressions at this point.
Current release - fix to a fix:
- eth: Revert "net/mlx5e: Update and set Xon/Xoff upon port speed set"
- wifi: iwlwifi: pcie: fix byte count table for 7000/8000 devices
- net: clear sk->sk_ino in sk_set_socket(sk, NULL), fix CRIU
Previous releases - regressions:
- bonding: set random address only when slaves already exist
- rxrpc: fix untrusted unsigned subtract
- eth:
- ice: fix Rx page leak on multi-buffer frames
- mlx5: don't return mlx5_link_info table when speed is unknown
Previous releases - always broken:
- tls: make sure to abort the stream if headers are bogus
- tcp: fix null-deref when using TCP-AO with TCP_REPAIR
- dpll: fix skipping last entry in clock quality level reporting
- eth: qed: don't collect too many protection override GRC elements,
fix memory corruption"
* tag 'net-6.17-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (51 commits)
octeontx2-pf: Fix use-after-free bugs in otx2_sync_tstamp()
cnic: Fix use-after-free bugs in cnic_delete_task
devlink rate: Remove unnecessary 'static' from a couple places
MAINTAINERS: update sundance entry
net: liquidio: fix overflow in octeon_init_instr_queue()
net: clear sk->sk_ino in sk_set_socket(sk, NULL)
Revert "net/mlx5e: Update and set Xon/Xoff upon port speed set"
selftests: tls: test skb copy under mem pressure and OOB
tls: make sure to abort the stream if headers are bogus
selftest: packetdrill: Add tcp_fastopen_server_reset-after-disconnect.pkt.
tcp: Clear tcp_sk(sk)->fastopen_rsk in tcp_disconnect().
octeon_ep: fix VF MAC address lifecycle handling
selftests: bonding: add vlan over bond testing
bonding: don't set oif to bond dev when getting NS target destination
net: rfkill: gpio: Fix crash due to dereferencering uninitialized pointer
net/mlx5e: Add a miss level for ipsec crypto offload
net/mlx5e: Harden uplink netdev access against device unbind
MAINTAINERS: make the DPLL entry cover drivers
doc/netlink: Fix typos in operation attributes
igc: don't fail igc_probe() on LED setup error
...
This commit is contained in:
@@ -575,8 +575,8 @@ operations:
|
||||
- nat-dst
|
||||
- timeout
|
||||
- mark
|
||||
- counter-orig
|
||||
- counter-reply
|
||||
- counters-orig
|
||||
- counters-reply
|
||||
- use
|
||||
- id
|
||||
- nat-dst
|
||||
@@ -591,7 +591,6 @@ operations:
|
||||
request:
|
||||
value: 0x101
|
||||
attributes:
|
||||
- nfgen-family
|
||||
- mark
|
||||
- filter
|
||||
- status
|
||||
@@ -608,8 +607,8 @@ operations:
|
||||
- nat-dst
|
||||
- timeout
|
||||
- mark
|
||||
- counter-orig
|
||||
- counter-reply
|
||||
- counters-orig
|
||||
- counters-reply
|
||||
- use
|
||||
- id
|
||||
- nat-dst
|
||||
|
||||
@@ -28,13 +28,13 @@ definitions:
|
||||
traffic-patterns it can take a long time until the
|
||||
MPTCP_EVENT_ESTABLISHED is sent.
|
||||
Attributes: token, family, saddr4 | saddr6, daddr4 | daddr6, sport,
|
||||
dport, server-side.
|
||||
dport, server-side, [flags].
|
||||
-
|
||||
name: established
|
||||
doc: >-
|
||||
A MPTCP connection is established (can start new subflows).
|
||||
Attributes: token, family, saddr4 | saddr6, daddr4 | daddr6, sport,
|
||||
dport, server-side.
|
||||
dport, server-side, [flags].
|
||||
-
|
||||
name: closed
|
||||
doc: >-
|
||||
|
||||
+2
-2
@@ -7430,7 +7430,7 @@ S: Supported
|
||||
F: Documentation/devicetree/bindings/dpll/dpll-device.yaml
|
||||
F: Documentation/devicetree/bindings/dpll/dpll-pin.yaml
|
||||
F: Documentation/driver-api/dpll.rst
|
||||
F: drivers/dpll/*
|
||||
F: drivers/dpll/
|
||||
F: include/linux/dpll.h
|
||||
F: include/uapi/linux/dpll.h
|
||||
|
||||
@@ -24259,7 +24259,7 @@ F: Documentation/devicetree/bindings/input/allwinner,sun4i-a10-lradc-keys.yaml
|
||||
F: drivers/input/keyboard/sun4i-lradc-keys.c
|
||||
|
||||
SUNDANCE NETWORK DRIVER
|
||||
M: Denis Kirjanov <dkirjanov@suse.de>
|
||||
M: Denis Kirjanov <kirjanov@gmail.com>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/ethernet/dlink/sundance.c
|
||||
|
||||
@@ -211,8 +211,8 @@ static int
|
||||
dpll_msg_add_clock_quality_level(struct sk_buff *msg, struct dpll_device *dpll,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
DECLARE_BITMAP(qls, DPLL_CLOCK_QUALITY_LEVEL_MAX + 1) = { 0 };
|
||||
const struct dpll_device_ops *ops = dpll_device_ops(dpll);
|
||||
DECLARE_BITMAP(qls, DPLL_CLOCK_QUALITY_LEVEL_MAX) = { 0 };
|
||||
enum dpll_clock_quality_level ql;
|
||||
int ret;
|
||||
|
||||
@@ -221,7 +221,7 @@ dpll_msg_add_clock_quality_level(struct sk_buff *msg, struct dpll_device *dpll,
|
||||
ret = ops->clock_quality_level_get(dpll, dpll_priv(dpll), qls, extack);
|
||||
if (ret)
|
||||
return ret;
|
||||
for_each_set_bit(ql, qls, DPLL_CLOCK_QUALITY_LEVEL_MAX)
|
||||
for_each_set_bit(ql, qls, DPLL_CLOCK_QUALITY_LEVEL_MAX + 1)
|
||||
if (nla_put_u32(msg, DPLL_A_CLOCK_QUALITY_LEVEL, ql))
|
||||
return -EMSGSIZE;
|
||||
|
||||
|
||||
@@ -2132,6 +2132,7 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev,
|
||||
memcpy(ss.__data, bond_dev->dev_addr, bond_dev->addr_len);
|
||||
} else if (bond->params.fail_over_mac == BOND_FOM_FOLLOW &&
|
||||
BOND_MODE(bond) == BOND_MODE_ACTIVEBACKUP &&
|
||||
bond_has_slaves(bond) &&
|
||||
memcmp(slave_dev->dev_addr, bond_dev->dev_addr, bond_dev->addr_len) == 0) {
|
||||
/* Set slave to random address to avoid duplicate mac
|
||||
* address in later fail over.
|
||||
@@ -3355,7 +3356,6 @@ static void bond_ns_send_all(struct bonding *bond, struct slave *slave)
|
||||
/* Find out through which dev should the packet go */
|
||||
memset(&fl6, 0, sizeof(struct flowi6));
|
||||
fl6.daddr = targets[i];
|
||||
fl6.flowi6_oif = bond->dev->ifindex;
|
||||
|
||||
dst = ip6_route_output(dev_net(bond->dev), NULL, &fl6);
|
||||
if (dst->error) {
|
||||
|
||||
@@ -4230,8 +4230,7 @@ static void cnic_cm_stop_bnx2x_hw(struct cnic_dev *dev)
|
||||
|
||||
cnic_bnx2x_delete_wait(dev, 0);
|
||||
|
||||
cancel_delayed_work(&cp->delete_task);
|
||||
flush_workqueue(cnic_wq);
|
||||
cancel_delayed_work_sync(&cp->delete_task);
|
||||
|
||||
if (atomic_read(&cp->iscsi_conn) != 0)
|
||||
netdev_warn(dev->netdev, "%d iSCSI connections not destroyed\n",
|
||||
|
||||
@@ -126,7 +126,7 @@ int octeon_init_instr_queue(struct octeon_device *oct,
|
||||
oct->io_qmask.iq |= BIT_ULL(iq_no);
|
||||
|
||||
/* Set the 32B/64B mode for each input queue */
|
||||
oct->io_qmask.iq64B |= ((conf->instr_type == 64) << iq_no);
|
||||
oct->io_qmask.iq64B |= ((u64)(conf->instr_type == 64) << iq_no);
|
||||
iq->iqcmd_64B = (conf->instr_type == 64);
|
||||
|
||||
oct->fn_list.setup_iq_regs(oct, iq_no);
|
||||
|
||||
@@ -2736,7 +2736,7 @@ static int dpaa2_switch_setup_dpbp(struct ethsw_core *ethsw)
|
||||
dev_err(dev, "dpsw_ctrl_if_set_pools() failed\n");
|
||||
goto err_get_attr;
|
||||
}
|
||||
ethsw->bpid = dpbp_attrs.id;
|
||||
ethsw->bpid = dpbp_attrs.bpid;
|
||||
|
||||
return 0;
|
||||
|
||||
|
||||
@@ -948,9 +948,6 @@ static bool i40e_clean_tx_irq(struct i40e_vsi *vsi,
|
||||
if (!eop_desc)
|
||||
break;
|
||||
|
||||
/* prevent any other reads prior to eop_desc */
|
||||
smp_rmb();
|
||||
|
||||
i40e_trace(clean_tx_irq, tx_ring, tx_desc, tx_buf);
|
||||
/* we have caught up to head, no work left to do */
|
||||
if (tx_head == tx_desc)
|
||||
|
||||
@@ -894,10 +894,6 @@ ice_add_xdp_frag(struct ice_rx_ring *rx_ring, struct xdp_buff *xdp,
|
||||
__skb_fill_page_desc_noacc(sinfo, sinfo->nr_frags++, rx_buf->page,
|
||||
rx_buf->page_offset, size);
|
||||
sinfo->xdp_frags_size += size;
|
||||
/* remember frag count before XDP prog execution; bpf_xdp_adjust_tail()
|
||||
* can pop off frags but driver has to handle it on its own
|
||||
*/
|
||||
rx_ring->nr_frags = sinfo->nr_frags;
|
||||
|
||||
if (page_is_pfmemalloc(rx_buf->page))
|
||||
xdp_buff_set_frag_pfmemalloc(xdp);
|
||||
@@ -968,20 +964,20 @@ ice_get_rx_buf(struct ice_rx_ring *rx_ring, const unsigned int size,
|
||||
/**
|
||||
* ice_get_pgcnts - grab page_count() for gathered fragments
|
||||
* @rx_ring: Rx descriptor ring to store the page counts on
|
||||
* @ntc: the next to clean element (not included in this frame!)
|
||||
*
|
||||
* This function is intended to be called right before running XDP
|
||||
* program so that the page recycling mechanism will be able to take
|
||||
* a correct decision regarding underlying pages; this is done in such
|
||||
* way as XDP program can change the refcount of page
|
||||
*/
|
||||
static void ice_get_pgcnts(struct ice_rx_ring *rx_ring)
|
||||
static void ice_get_pgcnts(struct ice_rx_ring *rx_ring, unsigned int ntc)
|
||||
{
|
||||
u32 nr_frags = rx_ring->nr_frags + 1;
|
||||
u32 idx = rx_ring->first_desc;
|
||||
struct ice_rx_buf *rx_buf;
|
||||
u32 cnt = rx_ring->count;
|
||||
|
||||
for (int i = 0; i < nr_frags; i++) {
|
||||
while (idx != ntc) {
|
||||
rx_buf = &rx_ring->rx_buf[idx];
|
||||
rx_buf->pgcnt = page_count(rx_buf->page);
|
||||
|
||||
@@ -1154,62 +1150,51 @@ ice_put_rx_buf(struct ice_rx_ring *rx_ring, struct ice_rx_buf *rx_buf)
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_put_rx_mbuf - ice_put_rx_buf() caller, for all frame frags
|
||||
* ice_put_rx_mbuf - ice_put_rx_buf() caller, for all buffers in frame
|
||||
* @rx_ring: Rx ring with all the auxiliary data
|
||||
* @xdp: XDP buffer carrying linear + frags part
|
||||
* @xdp_xmit: XDP_TX/XDP_REDIRECT verdict storage
|
||||
* @ntc: a current next_to_clean value to be stored at rx_ring
|
||||
* @ntc: the next to clean element (not included in this frame!)
|
||||
* @verdict: return code from XDP program execution
|
||||
*
|
||||
* Walk through gathered fragments and satisfy internal page
|
||||
* recycle mechanism; we take here an action related to verdict
|
||||
* returned by XDP program;
|
||||
* Called after XDP program is completed, or on error with verdict set to
|
||||
* ICE_XDP_CONSUMED.
|
||||
*
|
||||
* Walk through buffers from first_desc to the end of the frame, releasing
|
||||
* buffers and satisfying internal page recycle mechanism. The action depends
|
||||
* on verdict from XDP program.
|
||||
*/
|
||||
static void ice_put_rx_mbuf(struct ice_rx_ring *rx_ring, struct xdp_buff *xdp,
|
||||
u32 *xdp_xmit, u32 ntc, u32 verdict)
|
||||
u32 ntc, u32 verdict)
|
||||
{
|
||||
u32 nr_frags = rx_ring->nr_frags + 1;
|
||||
u32 idx = rx_ring->first_desc;
|
||||
u32 cnt = rx_ring->count;
|
||||
u32 post_xdp_frags = 1;
|
||||
struct ice_rx_buf *buf;
|
||||
int i;
|
||||
u32 xdp_frags = 0;
|
||||
int i = 0;
|
||||
|
||||
if (unlikely(xdp_buff_has_frags(xdp)))
|
||||
post_xdp_frags += xdp_get_shared_info_from_buff(xdp)->nr_frags;
|
||||
xdp_frags = xdp_get_shared_info_from_buff(xdp)->nr_frags;
|
||||
|
||||
for (i = 0; i < post_xdp_frags; i++) {
|
||||
while (idx != ntc) {
|
||||
buf = &rx_ring->rx_buf[idx];
|
||||
if (++idx == cnt)
|
||||
idx = 0;
|
||||
|
||||
if (verdict & (ICE_XDP_TX | ICE_XDP_REDIR)) {
|
||||
/* An XDP program could release fragments from the end of the
|
||||
* buffer. For these, we need to keep the pagecnt_bias as-is.
|
||||
* To do this, only adjust pagecnt_bias for fragments up to
|
||||
* the total remaining after the XDP program has run.
|
||||
*/
|
||||
if (verdict != ICE_XDP_CONSUMED)
|
||||
ice_rx_buf_adjust_pg_offset(buf, xdp->frame_sz);
|
||||
*xdp_xmit |= verdict;
|
||||
} else if (verdict & ICE_XDP_CONSUMED) {
|
||||
else if (i++ <= xdp_frags)
|
||||
buf->pagecnt_bias++;
|
||||
} else if (verdict == ICE_XDP_PASS) {
|
||||
ice_rx_buf_adjust_pg_offset(buf, xdp->frame_sz);
|
||||
}
|
||||
|
||||
ice_put_rx_buf(rx_ring, buf);
|
||||
|
||||
if (++idx == cnt)
|
||||
idx = 0;
|
||||
}
|
||||
/* handle buffers that represented frags released by XDP prog;
|
||||
* for these we keep pagecnt_bias as-is; refcount from struct page
|
||||
* has been decremented within XDP prog and we do not have to increase
|
||||
* the biased refcnt
|
||||
*/
|
||||
for (; i < nr_frags; i++) {
|
||||
buf = &rx_ring->rx_buf[idx];
|
||||
ice_put_rx_buf(rx_ring, buf);
|
||||
if (++idx == cnt)
|
||||
idx = 0;
|
||||
}
|
||||
|
||||
xdp->data = NULL;
|
||||
rx_ring->first_desc = ntc;
|
||||
rx_ring->nr_frags = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1317,6 +1302,10 @@ static int ice_clean_rx_irq(struct ice_rx_ring *rx_ring, int budget)
|
||||
/* retrieve a buffer from the ring */
|
||||
rx_buf = ice_get_rx_buf(rx_ring, size, ntc);
|
||||
|
||||
/* Increment ntc before calls to ice_put_rx_mbuf() */
|
||||
if (++ntc == cnt)
|
||||
ntc = 0;
|
||||
|
||||
if (!xdp->data) {
|
||||
void *hard_start;
|
||||
|
||||
@@ -1325,24 +1314,23 @@ static int ice_clean_rx_irq(struct ice_rx_ring *rx_ring, int budget)
|
||||
xdp_prepare_buff(xdp, hard_start, offset, size, !!offset);
|
||||
xdp_buff_clear_frags_flag(xdp);
|
||||
} else if (ice_add_xdp_frag(rx_ring, xdp, rx_buf, size)) {
|
||||
ice_put_rx_mbuf(rx_ring, xdp, NULL, ntc, ICE_XDP_CONSUMED);
|
||||
ice_put_rx_mbuf(rx_ring, xdp, ntc, ICE_XDP_CONSUMED);
|
||||
break;
|
||||
}
|
||||
if (++ntc == cnt)
|
||||
ntc = 0;
|
||||
|
||||
/* skip if it is NOP desc */
|
||||
if (ice_is_non_eop(rx_ring, rx_desc))
|
||||
continue;
|
||||
|
||||
ice_get_pgcnts(rx_ring);
|
||||
ice_get_pgcnts(rx_ring, ntc);
|
||||
xdp_verdict = ice_run_xdp(rx_ring, xdp, xdp_prog, xdp_ring, rx_desc);
|
||||
if (xdp_verdict == ICE_XDP_PASS)
|
||||
goto construct_skb;
|
||||
total_rx_bytes += xdp_get_buff_len(xdp);
|
||||
total_rx_pkts++;
|
||||
|
||||
ice_put_rx_mbuf(rx_ring, xdp, &xdp_xmit, ntc, xdp_verdict);
|
||||
ice_put_rx_mbuf(rx_ring, xdp, ntc, xdp_verdict);
|
||||
xdp_xmit |= xdp_verdict & (ICE_XDP_TX | ICE_XDP_REDIR);
|
||||
|
||||
continue;
|
||||
construct_skb:
|
||||
@@ -1355,7 +1343,7 @@ construct_skb:
|
||||
rx_ring->ring_stats->rx_stats.alloc_buf_failed++;
|
||||
xdp_verdict = ICE_XDP_CONSUMED;
|
||||
}
|
||||
ice_put_rx_mbuf(rx_ring, xdp, &xdp_xmit, ntc, xdp_verdict);
|
||||
ice_put_rx_mbuf(rx_ring, xdp, ntc, xdp_verdict);
|
||||
|
||||
if (!skb)
|
||||
break;
|
||||
|
||||
@@ -358,7 +358,6 @@ struct ice_rx_ring {
|
||||
struct ice_tx_ring *xdp_ring;
|
||||
struct ice_rx_ring *next; /* pointer to next ring in q_vector */
|
||||
struct xsk_buff_pool *xsk_pool;
|
||||
u32 nr_frags;
|
||||
u16 max_frame;
|
||||
u16 rx_buf_len;
|
||||
dma_addr_t dma; /* physical address of ring */
|
||||
|
||||
@@ -345,6 +345,7 @@ struct igc_adapter {
|
||||
/* LEDs */
|
||||
struct mutex led_mutex;
|
||||
struct igc_led_classdev *leds;
|
||||
bool leds_available;
|
||||
};
|
||||
|
||||
void igc_up(struct igc_adapter *adapter);
|
||||
|
||||
@@ -7335,8 +7335,14 @@ static int igc_probe(struct pci_dev *pdev,
|
||||
|
||||
if (IS_ENABLED(CONFIG_IGC_LEDS)) {
|
||||
err = igc_led_setup(adapter);
|
||||
if (err)
|
||||
goto err_register;
|
||||
if (err) {
|
||||
netdev_warn_once(netdev,
|
||||
"LED init failed (%d); continuing without LED support\n",
|
||||
err);
|
||||
adapter->leds_available = false;
|
||||
} else {
|
||||
adapter->leds_available = true;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -7392,7 +7398,7 @@ static void igc_remove(struct pci_dev *pdev)
|
||||
cancel_work_sync(&adapter->watchdog_task);
|
||||
hrtimer_cancel(&adapter->hrtimer);
|
||||
|
||||
if (IS_ENABLED(CONFIG_IGC_LEDS))
|
||||
if (IS_ENABLED(CONFIG_IGC_LEDS) && adapter->leds_available)
|
||||
igc_led_free(adapter);
|
||||
|
||||
/* Release control of h/w to f/w. If f/w is AMT enabled, this
|
||||
|
||||
@@ -6973,6 +6973,13 @@ static int ixgbe_sw_init(struct ixgbe_adapter *adapter,
|
||||
break;
|
||||
}
|
||||
|
||||
/* Make sure the SWFW semaphore is in a valid state */
|
||||
if (hw->mac.ops.init_swfw_sync)
|
||||
hw->mac.ops.init_swfw_sync(hw);
|
||||
|
||||
if (hw->mac.type == ixgbe_mac_e610)
|
||||
mutex_init(&hw->aci.lock);
|
||||
|
||||
#ifdef IXGBE_FCOE
|
||||
/* FCoE support exists, always init the FCoE lock */
|
||||
spin_lock_init(&adapter->fcoe.lock);
|
||||
@@ -11643,10 +11650,6 @@ static int ixgbe_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
if (err)
|
||||
goto err_sw_init;
|
||||
|
||||
/* Make sure the SWFW semaphore is in a valid state */
|
||||
if (hw->mac.ops.init_swfw_sync)
|
||||
hw->mac.ops.init_swfw_sync(hw);
|
||||
|
||||
if (ixgbe_check_fw_error(adapter))
|
||||
return ixgbe_recovery_probe(adapter);
|
||||
|
||||
@@ -11850,8 +11853,6 @@ skip_sriov:
|
||||
ether_addr_copy(hw->mac.addr, hw->mac.perm_addr);
|
||||
ixgbe_mac_set_default_filter(adapter);
|
||||
|
||||
if (hw->mac.type == ixgbe_mac_e610)
|
||||
mutex_init(&hw->aci.lock);
|
||||
timer_setup(&adapter->service_timer, ixgbe_service_timer, 0);
|
||||
|
||||
if (ixgbe_removed(hw->hw_addr)) {
|
||||
@@ -12007,9 +12008,9 @@ err_register:
|
||||
devl_unlock(adapter->devlink);
|
||||
ixgbe_release_hw_control(adapter);
|
||||
ixgbe_clear_interrupt_scheme(adapter);
|
||||
err_sw_init:
|
||||
if (hw->mac.type == ixgbe_mac_e610)
|
||||
mutex_destroy(&adapter->hw.aci.lock);
|
||||
err_sw_init:
|
||||
ixgbe_disable_sriov(adapter);
|
||||
adapter->flags2 &= ~IXGBE_FLAG2_SEARCH_FOR_SFP;
|
||||
iounmap(adapter->io_addr);
|
||||
@@ -12060,10 +12061,8 @@ static void ixgbe_remove(struct pci_dev *pdev)
|
||||
set_bit(__IXGBE_REMOVING, &adapter->state);
|
||||
cancel_work_sync(&adapter->service_task);
|
||||
|
||||
if (adapter->hw.mac.type == ixgbe_mac_e610) {
|
||||
if (adapter->hw.mac.type == ixgbe_mac_e610)
|
||||
ixgbe_disable_link_status_events(adapter);
|
||||
mutex_destroy(&adapter->hw.aci.lock);
|
||||
}
|
||||
|
||||
if (adapter->mii_bus)
|
||||
mdiobus_unregister(adapter->mii_bus);
|
||||
@@ -12123,6 +12122,9 @@ static void ixgbe_remove(struct pci_dev *pdev)
|
||||
disable_dev = !test_and_set_bit(__IXGBE_DISABLED, &adapter->state);
|
||||
free_netdev(netdev);
|
||||
|
||||
if (adapter->hw.mac.type == ixgbe_mac_e610)
|
||||
mutex_destroy(&adapter->hw.aci.lock);
|
||||
|
||||
if (disable_dev)
|
||||
pci_disable_device(pdev);
|
||||
}
|
||||
|
||||
@@ -1124,11 +1124,24 @@ static int octep_set_features(struct net_device *dev, netdev_features_t features
|
||||
return err;
|
||||
}
|
||||
|
||||
static bool octep_is_vf_valid(struct octep_device *oct, int vf)
|
||||
{
|
||||
if (vf >= CFG_GET_ACTIVE_VFS(oct->conf)) {
|
||||
netdev_err(oct->netdev, "Invalid VF ID %d\n", vf);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static int octep_get_vf_config(struct net_device *dev, int vf,
|
||||
struct ifla_vf_info *ivi)
|
||||
{
|
||||
struct octep_device *oct = netdev_priv(dev);
|
||||
|
||||
if (!octep_is_vf_valid(oct, vf))
|
||||
return -EINVAL;
|
||||
|
||||
ivi->vf = vf;
|
||||
ether_addr_copy(ivi->mac, oct->vf_info[vf].mac_addr);
|
||||
ivi->spoofchk = true;
|
||||
@@ -1143,6 +1156,9 @@ static int octep_set_vf_mac(struct net_device *dev, int vf, u8 *mac)
|
||||
struct octep_device *oct = netdev_priv(dev);
|
||||
int err;
|
||||
|
||||
if (!octep_is_vf_valid(oct, vf))
|
||||
return -EINVAL;
|
||||
|
||||
if (!is_valid_ether_addr(mac)) {
|
||||
dev_err(&oct->pdev->dev, "Invalid MAC Address %pM\n", mac);
|
||||
return -EADDRNOTAVAIL;
|
||||
|
||||
@@ -196,6 +196,7 @@ static void octep_pfvf_get_mac_addr(struct octep_device *oct, u32 vf_id,
|
||||
vf_id);
|
||||
return;
|
||||
}
|
||||
ether_addr_copy(oct->vf_info[vf_id].mac_addr, rsp->s_set_mac.mac_addr);
|
||||
rsp->s_set_mac.type = OCTEP_PFVF_MBOX_TYPE_RSP_ACK;
|
||||
}
|
||||
|
||||
@@ -205,6 +206,8 @@ static void octep_pfvf_dev_remove(struct octep_device *oct, u32 vf_id,
|
||||
{
|
||||
int err;
|
||||
|
||||
/* Reset VF-specific information maintained by the PF */
|
||||
memset(&oct->vf_info[vf_id], 0, sizeof(struct octep_pfvf_info));
|
||||
err = octep_ctrl_net_dev_remove(oct, vf_id);
|
||||
if (err) {
|
||||
rsp->s.type = OCTEP_PFVF_MBOX_TYPE_RSP_NACK;
|
||||
|
||||
@@ -491,7 +491,7 @@ void otx2_ptp_destroy(struct otx2_nic *pfvf)
|
||||
if (!ptp)
|
||||
return;
|
||||
|
||||
cancel_delayed_work(&pfvf->ptp->synctstamp_work);
|
||||
cancel_delayed_work_sync(&pfvf->ptp->synctstamp_work);
|
||||
|
||||
ptp_clock_unregister(ptp->ptp_clock);
|
||||
kfree(ptp);
|
||||
|
||||
@@ -92,6 +92,7 @@ enum {
|
||||
MLX5E_ACCEL_FS_ESP_FT_LEVEL = MLX5E_INNER_TTC_FT_LEVEL + 1,
|
||||
MLX5E_ACCEL_FS_ESP_FT_ERR_LEVEL,
|
||||
MLX5E_ACCEL_FS_POL_FT_LEVEL,
|
||||
MLX5E_ACCEL_FS_POL_MISS_FT_LEVEL,
|
||||
MLX5E_ACCEL_FS_ESP_FT_ROCE_LEVEL,
|
||||
#endif
|
||||
};
|
||||
|
||||
@@ -185,6 +185,7 @@ struct mlx5e_ipsec_rx_create_attr {
|
||||
u32 family;
|
||||
int prio;
|
||||
int pol_level;
|
||||
int pol_miss_level;
|
||||
int sa_level;
|
||||
int status_level;
|
||||
enum mlx5_flow_namespace_type chains_ns;
|
||||
|
||||
@@ -747,6 +747,7 @@ static void ipsec_rx_create_attr_set(struct mlx5e_ipsec *ipsec,
|
||||
attr->family = family;
|
||||
attr->prio = MLX5E_NIC_PRIO;
|
||||
attr->pol_level = MLX5E_ACCEL_FS_POL_FT_LEVEL;
|
||||
attr->pol_miss_level = MLX5E_ACCEL_FS_POL_MISS_FT_LEVEL;
|
||||
attr->sa_level = MLX5E_ACCEL_FS_ESP_FT_LEVEL;
|
||||
attr->status_level = MLX5E_ACCEL_FS_ESP_FT_ERR_LEVEL;
|
||||
attr->chains_ns = MLX5_FLOW_NAMESPACE_KERNEL;
|
||||
@@ -833,7 +834,7 @@ static int ipsec_rx_chains_create_miss(struct mlx5e_ipsec *ipsec,
|
||||
|
||||
ft_attr.max_fte = 1;
|
||||
ft_attr.autogroup.max_num_groups = 1;
|
||||
ft_attr.level = attr->pol_level;
|
||||
ft_attr.level = attr->pol_miss_level;
|
||||
ft_attr.prio = attr->prio;
|
||||
|
||||
ft = mlx5_create_auto_grouped_flow_table(attr->ns, &ft_attr);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user