mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
Merge tag 'net-7.0-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Pull networking fixes from Paolo Abeni:
"Including fixes from IPsec, Bluetooth and netfilter
Current release - regressions:
- wifi: fix dev_alloc_name() return value check
- rds: fix recursive lock in rds_tcp_conn_slots_available
Current release - new code bugs:
- vsock: lock down child_ns_mode as write-once
Previous releases - regressions:
- core:
- do not pass flow_id to set_rps_cpu()
- consume xmit errors of GSO frames
- netconsole: avoid OOB reads, msg is not nul-terminated
- netfilter: h323: fix OOB read in decode_choice()
- tcp: re-enable acceptance of FIN packets when RWIN is 0
- udplite: fix null-ptr-deref in __udp_enqueue_schedule_skb().
- wifi: brcmfmac: fix potential kernel oops when probe fails
- phy: register phy led_triggers during probe to avoid AB-BA deadlock
- eth:
- bnxt_en: fix deleting of Ntuple filters
- wan: farsync: fix use-after-free bugs caused by unfinished tasklets
- xscale: check for PTP support properly
Previous releases - always broken:
- tcp: fix potential race in tcp_v6_syn_recv_sock()
- kcm: fix zero-frag skb in frag_list on partial sendmsg error
- xfrm:
- fix race condition in espintcp_close()
- always flush state and policy upon NETDEV_UNREGISTER event
- bluetooth:
- purge error queues in socket destructors
- fix response to L2CAP_ECRED_CONN_REQ
- eth:
- mlx5:
- fix circular locking dependency in dump
- fix "scheduling while atomic" in IPsec MAC address query
- gve: fix incorrect buffer cleanup for QPL
- team: avoid NETDEV_CHANGEMTU event when unregistering slave
- usb: validate USB endpoints"
* tag 'net-7.0-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (72 commits)
netfilter: nf_conntrack_h323: fix OOB read in decode_choice()
dpaa2-switch: validate num_ifs to prevent out-of-bounds write
net: consume xmit errors of GSO frames
vsock: document write-once behavior of the child_ns_mode sysctl
vsock: lock down child_ns_mode as write-once
selftests/vsock: change tests to respect write-once child ns mode
net/mlx5e: Fix "scheduling while atomic" in IPsec MAC address query
net/mlx5: Fix missing devlink lock in SRIOV enable error path
net/mlx5: E-switch, Clear legacy flag when moving to switchdev
net/mlx5: LAG, disable MPESW in lag_disable_change()
net/mlx5: DR, Fix circular locking dependency in dump
selftests: team: Add a reference count leak test
team: avoid NETDEV_CHANGEMTU event when unregistering slave
net: mana: Fix double destroy_workqueue on service rescan PCI path
MAINTAINERS: Update maintainer entry for QUALCOMM ETHQOS ETHERNET DRIVER
dpll: zl3073x: Remove redundant cleanup in devm_dpll_init()
selftests/net: packetdrill: Verify acceptance of FIN packets when RWIN is 0
tcp: re-enable acceptance of FIN packets when RWIN is 0
vsock: Use container_of() to get net namespace in sysctl handlers
net: usb: kaweth: validate USB endpoints
...
This commit is contained in:
@@ -594,6 +594,9 @@ Values:
|
||||
their sockets will only be able to connect within their own
|
||||
namespace.
|
||||
|
||||
The first write to ``child_ns_mode`` locks its value. Subsequent writes of the
|
||||
same value succeed, but writing a different value returns ``-EBUSY``.
|
||||
|
||||
Changing ``child_ns_mode`` only affects namespaces created after the change;
|
||||
it does not modify the current namespace or any existing children.
|
||||
|
||||
|
||||
+4
-6
@@ -1292,7 +1292,6 @@ F: include/trace/events/amdxdna.h
|
||||
F: include/uapi/drm/amdxdna_accel.h
|
||||
|
||||
AMD XGBE DRIVER
|
||||
M: "Shyam Sundar S K" <Shyam-sundar.S-k@amd.com>
|
||||
M: Raju Rangoju <Raju.Rangoju@amd.com>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
@@ -6219,14 +6218,13 @@ S: Supported
|
||||
F: drivers/scsi/snic/
|
||||
|
||||
CISCO VIC ETHERNET NIC DRIVER
|
||||
M: Christian Benvenuti <benve@cisco.com>
|
||||
M: Satish Kharat <satishkh@cisco.com>
|
||||
S: Maintained
|
||||
F: drivers/net/ethernet/cisco/enic/
|
||||
|
||||
CISCO VIC LOW LATENCY NIC DRIVER
|
||||
M: Christian Benvenuti <benve@cisco.com>
|
||||
M: Nelson Escobar <neescoba@cisco.com>
|
||||
M: Satish Kharat <satishkh@cisco.com>
|
||||
S: Supported
|
||||
F: drivers/infiniband/hw/usnic/
|
||||
|
||||
@@ -14412,9 +14410,9 @@ LANTIQ PEF2256 DRIVER
|
||||
M: Herve Codina <herve.codina@bootlin.com>
|
||||
S: Maintained
|
||||
F: Documentation/devicetree/bindings/net/lantiq,pef2256.yaml
|
||||
F: drivers/net/wan/framer/pef2256/
|
||||
F: drivers/net/wan/framer/
|
||||
F: drivers/pinctrl/pinctrl-pef2256.c
|
||||
F: include/linux/framer/pef2256.h
|
||||
F: include/linux/framer/
|
||||
|
||||
LASI 53c700 driver for PARISC
|
||||
M: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
|
||||
@@ -21695,7 +21693,7 @@ S: Maintained
|
||||
F: drivers/net/ethernet/qualcomm/emac/
|
||||
|
||||
QUALCOMM ETHQOS ETHERNET DRIVER
|
||||
M: Vinod Koul <vkoul@kernel.org>
|
||||
M: Mohd Ayaan Anwar <mohd.anwar@oss.qualcomm.com>
|
||||
L: netdev@vger.kernel.org
|
||||
L: linux-arm-msm@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
+14
-10
@@ -2046,19 +2046,23 @@ retry:
|
||||
}
|
||||
|
||||
out:
|
||||
if (ret && retries < MAX_INIT_RETRIES) {
|
||||
bt_dev_warn(hdev, "Retry BT power ON:%d", retries);
|
||||
if (ret) {
|
||||
qca_power_shutdown(hu);
|
||||
if (hu->serdev) {
|
||||
serdev_device_close(hu->serdev);
|
||||
ret = serdev_device_open(hu->serdev);
|
||||
if (ret) {
|
||||
bt_dev_err(hdev, "failed to open port");
|
||||
return ret;
|
||||
|
||||
if (retries < MAX_INIT_RETRIES) {
|
||||
bt_dev_warn(hdev, "Retry BT power ON:%d", retries);
|
||||
if (hu->serdev) {
|
||||
serdev_device_close(hu->serdev);
|
||||
ret = serdev_device_open(hu->serdev);
|
||||
if (ret) {
|
||||
bt_dev_err(hdev, "failed to open port");
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
retries++;
|
||||
goto retry;
|
||||
}
|
||||
retries++;
|
||||
goto retry;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Setup bdaddr */
|
||||
|
||||
@@ -981,11 +981,7 @@ zl3073x_devm_dpll_init(struct zl3073x_dev *zldev, u8 num_dplls)
|
||||
}
|
||||
|
||||
/* Add devres action to release DPLL related resources */
|
||||
rc = devm_add_action_or_reset(zldev->dev, zl3073x_dev_dpll_fini, zldev);
|
||||
if (rc)
|
||||
goto error;
|
||||
|
||||
return 0;
|
||||
return devm_add_action_or_reset(zldev->dev, zl3073x_dev_dpll_fini, zldev);
|
||||
|
||||
error:
|
||||
zl3073x_dev_dpll_fini(zldev);
|
||||
@@ -1026,6 +1022,7 @@ int zl3073x_dev_probe(struct zl3073x_dev *zldev,
|
||||
"Unknown or non-match chip ID: 0x%0x\n",
|
||||
id);
|
||||
}
|
||||
zldev->chip_id = id;
|
||||
|
||||
/* Read revision, firmware version and custom config version */
|
||||
rc = zl3073x_read_u16(zldev, ZL_REG_REVISION, &revision);
|
||||
|
||||
@@ -35,6 +35,7 @@ struct zl3073x_dpll;
|
||||
* @dev: pointer to device
|
||||
* @regmap: regmap to access device registers
|
||||
* @multiop_lock: to serialize multiple register operations
|
||||
* @chip_id: chip ID read from hardware
|
||||
* @ref: array of input references' invariants
|
||||
* @out: array of outs' invariants
|
||||
* @synth: array of synths' invariants
|
||||
@@ -48,6 +49,7 @@ struct zl3073x_dev {
|
||||
struct device *dev;
|
||||
struct regmap *regmap;
|
||||
struct mutex multiop_lock;
|
||||
u16 chip_id;
|
||||
|
||||
/* Invariants */
|
||||
struct zl3073x_ref ref[ZL3073X_NUM_REFS];
|
||||
@@ -144,6 +146,32 @@ int zl3073x_write_hwreg_seq(struct zl3073x_dev *zldev,
|
||||
|
||||
int zl3073x_ref_phase_offsets_update(struct zl3073x_dev *zldev, int channel);
|
||||
|
||||
/**
|
||||
* zl3073x_dev_is_ref_phase_comp_32bit - check ref phase comp register size
|
||||
* @zldev: pointer to zl3073x device
|
||||
*
|
||||
* Some chip IDs have a 32-bit wide ref_phase_offset_comp register instead
|
||||
* of the default 48-bit.
|
||||
*
|
||||
* Return: true if the register is 32-bit, false if 48-bit
|
||||
*/
|
||||
static inline bool
|
||||
zl3073x_dev_is_ref_phase_comp_32bit(struct zl3073x_dev *zldev)
|
||||
{
|
||||
switch (zldev->chip_id) {
|
||||
case 0x0E30:
|
||||
case 0x0E93:
|
||||
case 0x0E94:
|
||||
case 0x0E95:
|
||||
case 0x0E96:
|
||||
case 0x0E97:
|
||||
case 0x1F60:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
static inline bool
|
||||
zl3073x_is_n_pin(u8 id)
|
||||
{
|
||||
|
||||
@@ -475,8 +475,11 @@ zl3073x_dpll_input_pin_phase_adjust_get(const struct dpll_pin *dpll_pin,
|
||||
ref_id = zl3073x_input_pin_ref_get(pin->id);
|
||||
ref = zl3073x_ref_state_get(zldev, ref_id);
|
||||
|
||||
/* Perform sign extension for 48bit signed value */
|
||||
phase_comp = sign_extend64(ref->phase_comp, 47);
|
||||
/* Perform sign extension based on register width */
|
||||
if (zl3073x_dev_is_ref_phase_comp_32bit(zldev))
|
||||
phase_comp = sign_extend64(ref->phase_comp, 31);
|
||||
else
|
||||
phase_comp = sign_extend64(ref->phase_comp, 47);
|
||||
|
||||
/* Reverse two's complement negation applied during set and convert
|
||||
* to 32bit signed int
|
||||
|
||||
@@ -121,8 +121,16 @@ int zl3073x_ref_state_fetch(struct zl3073x_dev *zldev, u8 index)
|
||||
return rc;
|
||||
|
||||
/* Read phase compensation register */
|
||||
rc = zl3073x_read_u48(zldev, ZL_REG_REF_PHASE_OFFSET_COMP,
|
||||
&ref->phase_comp);
|
||||
if (zl3073x_dev_is_ref_phase_comp_32bit(zldev)) {
|
||||
u32 val;
|
||||
|
||||
rc = zl3073x_read_u32(zldev, ZL_REG_REF_PHASE_OFFSET_COMP_32,
|
||||
&val);
|
||||
ref->phase_comp = val;
|
||||
} else {
|
||||
rc = zl3073x_read_u48(zldev, ZL_REG_REF_PHASE_OFFSET_COMP,
|
||||
&ref->phase_comp);
|
||||
}
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
@@ -179,9 +187,16 @@ int zl3073x_ref_state_set(struct zl3073x_dev *zldev, u8 index,
|
||||
if (!rc && dref->sync_ctrl != ref->sync_ctrl)
|
||||
rc = zl3073x_write_u8(zldev, ZL_REG_REF_SYNC_CTRL,
|
||||
ref->sync_ctrl);
|
||||
if (!rc && dref->phase_comp != ref->phase_comp)
|
||||
rc = zl3073x_write_u48(zldev, ZL_REG_REF_PHASE_OFFSET_COMP,
|
||||
ref->phase_comp);
|
||||
if (!rc && dref->phase_comp != ref->phase_comp) {
|
||||
if (zl3073x_dev_is_ref_phase_comp_32bit(zldev))
|
||||
rc = zl3073x_write_u32(zldev,
|
||||
ZL_REG_REF_PHASE_OFFSET_COMP_32,
|
||||
ref->phase_comp);
|
||||
else
|
||||
rc = zl3073x_write_u48(zldev,
|
||||
ZL_REG_REF_PHASE_OFFSET_COMP,
|
||||
ref->phase_comp);
|
||||
}
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
|
||||
@@ -194,6 +194,7 @@
|
||||
#define ZL_REF_CONFIG_DIFF_EN BIT(2)
|
||||
|
||||
#define ZL_REG_REF_PHASE_OFFSET_COMP ZL_REG(10, 0x28, 6)
|
||||
#define ZL_REG_REF_PHASE_OFFSET_COMP_32 ZL_REG(10, 0x28, 4)
|
||||
|
||||
#define ZL_REG_REF_SYNC_CTRL ZL_REG(10, 0x2e, 1)
|
||||
#define ZL_REF_SYNC_CTRL_MODE GENMASK(2, 0)
|
||||
|
||||
@@ -2278,6 +2278,12 @@ int sja1105_static_config_reload(struct sja1105_private *priv,
|
||||
* change it through the dynamic interface later.
|
||||
*/
|
||||
dsa_switch_for_each_available_port(dp, ds) {
|
||||
/* May be called during unbind when we unoffload a VLAN-aware
|
||||
* bridge from port 1 while port 0 was already torn down
|
||||
*/
|
||||
if (!dp->pl)
|
||||
continue;
|
||||
|
||||
phylink_replay_link_begin(dp->pl);
|
||||
mac[dp->index].speed = priv->info->port_speed[SJA1105_SPEED_AUTO];
|
||||
}
|
||||
@@ -2334,7 +2340,8 @@ int sja1105_static_config_reload(struct sja1105_private *priv,
|
||||
}
|
||||
|
||||
dsa_switch_for_each_available_port(dp, ds)
|
||||
phylink_replay_link_end(dp->pl);
|
||||
if (dp->pl)
|
||||
phylink_replay_link_end(dp->pl);
|
||||
|
||||
rc = sja1105_reload_cbs(priv);
|
||||
if (rc < 0)
|
||||
|
||||
@@ -6232,6 +6232,9 @@ int bnxt_hwrm_cfa_ntuple_filter_free(struct bnxt *bp,
|
||||
int rc;
|
||||
|
||||
set_bit(BNXT_FLTR_FW_DELETED, &fltr->base.state);
|
||||
if (!test_bit(BNXT_STATE_OPEN, &bp->state))
|
||||
return 0;
|
||||
|
||||
rc = hwrm_req_init(bp, req, HWRM_CFA_NTUPLE_FILTER_FREE);
|
||||
if (rc)
|
||||
return rc;
|
||||
@@ -10879,12 +10882,10 @@ void bnxt_del_one_rss_ctx(struct bnxt *bp, struct bnxt_rss_ctx *rss_ctx,
|
||||
struct bnxt_ntuple_filter *ntp_fltr;
|
||||
int i;
|
||||
|
||||
if (netif_running(bp->dev)) {
|
||||
bnxt_hwrm_vnic_free_one(bp, &rss_ctx->vnic);
|
||||
for (i = 0; i < BNXT_MAX_CTX_PER_VNIC; i++) {
|
||||
if (vnic->fw_rss_cos_lb_ctx[i] != INVALID_HW_RING_ID)
|
||||
bnxt_hwrm_vnic_ctx_free_one(bp, vnic, i);
|
||||
}
|
||||
bnxt_hwrm_vnic_free_one(bp, &rss_ctx->vnic);
|
||||
for (i = 0; i < BNXT_MAX_CTX_PER_VNIC; i++) {
|
||||
if (vnic->fw_rss_cos_lb_ctx[i] != INVALID_HW_RING_ID)
|
||||
bnxt_hwrm_vnic_ctx_free_one(bp, vnic, i);
|
||||
}
|
||||
if (!all)
|
||||
return;
|
||||
|
||||
@@ -3034,6 +3034,13 @@ static int dpaa2_switch_init(struct fsl_mc_device *sw_dev)
|
||||
goto err_close;
|
||||
}
|
||||
|
||||
if (ethsw->sw_attr.num_ifs >= DPSW_MAX_IF) {
|
||||
dev_err(dev, "DPSW num_ifs %u exceeds max %u\n",
|
||||
ethsw->sw_attr.num_ifs, DPSW_MAX_IF);
|
||||
err = -EINVAL;
|
||||
goto err_close;
|
||||
}
|
||||
|
||||
err = dpsw_get_api_version(ethsw->mc_io, 0,
|
||||
ðsw->major,
|
||||
ðsw->minor);
|
||||
|
||||
@@ -167,6 +167,25 @@ gve_free_pending_packet(struct gve_tx_ring *tx,
|
||||
}
|
||||
}
|
||||
|
||||
static void gve_unmap_packet(struct device *dev,
|
||||
struct gve_tx_pending_packet_dqo *pkt)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!pkt->num_bufs)
|
||||
return;
|
||||
|
||||
/* SKB linear portion is guaranteed to be mapped */
|
||||
dma_unmap_single(dev, dma_unmap_addr(pkt, dma[0]),
|
||||
dma_unmap_len(pkt, len[0]), DMA_TO_DEVICE);
|
||||
for (i = 1; i < pkt->num_bufs; i++) {
|
||||
netmem_dma_unmap_page_attrs(dev, dma_unmap_addr(pkt, dma[i]),
|
||||
dma_unmap_len(pkt, len[i]),
|
||||
DMA_TO_DEVICE, 0);
|
||||
}
|
||||
pkt->num_bufs = 0;
|
||||
}
|
||||
|
||||
/* gve_tx_free_desc - Cleans up all pending tx requests and buffers.
|
||||
*/
|
||||
static void gve_tx_clean_pending_packets(struct gve_tx_ring *tx)
|
||||
@@ -176,21 +195,12 @@ static void gve_tx_clean_pending_packets(struct gve_tx_ring *tx)
|
||||
for (i = 0; i < tx->dqo.num_pending_packets; i++) {
|
||||
struct gve_tx_pending_packet_dqo *cur_state =
|
||||
&tx->dqo.pending_packets[i];
|
||||
int j;
|
||||
|
||||
for (j = 0; j < cur_state->num_bufs; j++) {
|
||||
if (j == 0) {
|
||||
dma_unmap_single(tx->dev,
|
||||
dma_unmap_addr(cur_state, dma[j]),
|
||||
dma_unmap_len(cur_state, len[j]),
|
||||
DMA_TO_DEVICE);
|
||||
} else {
|
||||
dma_unmap_page(tx->dev,
|
||||
dma_unmap_addr(cur_state, dma[j]),
|
||||
dma_unmap_len(cur_state, len[j]),
|
||||
DMA_TO_DEVICE);
|
||||
}
|
||||
}
|
||||
if (tx->dqo.qpl)
|
||||
gve_free_tx_qpl_bufs(tx, cur_state);
|
||||
else
|
||||
gve_unmap_packet(tx->dev, cur_state);
|
||||
|
||||
if (cur_state->skb) {
|
||||
dev_consume_skb_any(cur_state->skb);
|
||||
cur_state->skb = NULL;
|
||||
@@ -1154,22 +1164,6 @@ static void remove_from_list(struct gve_tx_ring *tx,
|
||||
}
|
||||
}
|
||||
|
||||
static void gve_unmap_packet(struct device *dev,
|
||||
struct gve_tx_pending_packet_dqo *pkt)
|
||||
{
|
||||
int i;
|
||||
|
||||
/* SKB linear portion is guaranteed to be mapped */
|
||||
dma_unmap_single(dev, dma_unmap_addr(pkt, dma[0]),
|
||||
dma_unmap_len(pkt, len[0]), DMA_TO_DEVICE);
|
||||
for (i = 1; i < pkt->num_bufs; i++) {
|
||||
netmem_dma_unmap_page_attrs(dev, dma_unmap_addr(pkt, dma[i]),
|
||||
dma_unmap_len(pkt, len[i]),
|
||||
DMA_TO_DEVICE, 0);
|
||||
}
|
||||
pkt->num_bufs = 0;
|
||||
}
|
||||
|
||||
/* Completion types and expected behavior:
|
||||
* No Miss compl + Packet compl = Packet completed normally.
|
||||
* Miss compl + Re-inject compl = Packet completed normally.
|
||||
|
||||
@@ -259,7 +259,6 @@ static void mlx5e_ipsec_init_limits(struct mlx5e_ipsec_sa_entry *sa_entry,
|
||||
static void mlx5e_ipsec_init_macs(struct mlx5e_ipsec_sa_entry *sa_entry,
|
||||
struct mlx5_accel_esp_xfrm_attrs *attrs)
|
||||
{
|
||||
struct mlx5_core_dev *mdev = mlx5e_ipsec_sa2dev(sa_entry);
|
||||
struct mlx5e_ipsec_addr *addrs = &attrs->addrs;
|
||||
struct net_device *netdev = sa_entry->dev;
|
||||
struct xfrm_state *x = sa_entry->x;
|
||||
@@ -276,7 +275,7 @@ static void mlx5e_ipsec_init_macs(struct mlx5e_ipsec_sa_entry *sa_entry,
|
||||
attrs->type != XFRM_DEV_OFFLOAD_PACKET)
|
||||
return;
|
||||
|
||||
mlx5_query_mac_address(mdev, addr);
|
||||
ether_addr_copy(addr, netdev->dev_addr);
|
||||
switch (attrs->dir) {
|
||||
case XFRM_DEV_OFFLOAD_IN:
|
||||
src = attrs->dmac;
|
||||
|
||||
@@ -4068,6 +4068,8 @@ int mlx5_devlink_eswitch_mode_set(struct devlink *devlink, u16 mode,
|
||||
|
||||
if (mlx5_mode == MLX5_ESWITCH_LEGACY)
|
||||
esw->dev->priv.flags |= MLX5_PRIV_FLAGS_SWITCH_LEGACY;
|
||||
if (mlx5_mode == MLX5_ESWITCH_OFFLOADS)
|
||||
esw->dev->priv.flags &= ~MLX5_PRIV_FLAGS_SWITCH_LEGACY;
|
||||
mlx5_eswitch_disable_locked(esw);
|
||||
if (mlx5_mode == MLX5_ESWITCH_OFFLOADS) {
|
||||
if (mlx5_devlink_trap_get_num_active(esw->dev)) {
|
||||
|
||||
@@ -1869,8 +1869,12 @@ void mlx5_lag_disable_change(struct mlx5_core_dev *dev)
|
||||
mutex_lock(&ldev->lock);
|
||||
|
||||
ldev->mode_changes_in_progress++;
|
||||
if (__mlx5_lag_is_active(ldev))
|
||||
mlx5_disable_lag(ldev);
|
||||
if (__mlx5_lag_is_active(ldev)) {
|
||||
if (ldev->mode == MLX5_LAG_MODE_MPESW)
|
||||
mlx5_lag_disable_mpesw(ldev);
|
||||
else
|
||||
mlx5_disable_lag(ldev);
|
||||
}
|
||||
|
||||
mutex_unlock(&ldev->lock);
|
||||
mlx5_devcom_comp_unlock(dev->priv.hca_devcom_comp);
|
||||
|
||||
@@ -65,7 +65,7 @@ err_metadata:
|
||||
return err;
|
||||
}
|
||||
|
||||
static int enable_mpesw(struct mlx5_lag *ldev)
|
||||
static int mlx5_lag_enable_mpesw(struct mlx5_lag *ldev)
|
||||
{
|
||||
struct mlx5_core_dev *dev0;
|
||||
int err;
|
||||
@@ -126,7 +126,7 @@ err_add_devices:
|
||||
return err;
|
||||
}
|
||||
|
||||
static void disable_mpesw(struct mlx5_lag *ldev)
|
||||
void mlx5_lag_disable_mpesw(struct mlx5_lag *ldev)
|
||||
{
|
||||
if (ldev->mode == MLX5_LAG_MODE_MPESW) {
|
||||
mlx5_mpesw_metadata_cleanup(ldev);
|
||||
@@ -152,9 +152,9 @@ static void mlx5_mpesw_work(struct work_struct *work)
|
||||
}
|
||||
|
||||
if (mpesww->op == MLX5_MPESW_OP_ENABLE)
|
||||
mpesww->result = enable_mpesw(ldev);
|
||||
mpesww->result = mlx5_lag_enable_mpesw(ldev);
|
||||
else if (mpesww->op == MLX5_MPESW_OP_DISABLE)
|
||||
disable_mpesw(ldev);
|
||||
mlx5_lag_disable_mpesw(ldev);
|
||||
unlock:
|
||||
mutex_unlock(&ldev->lock);
|
||||
mlx5_devcom_comp_unlock(devcom);
|
||||
|
||||
@@ -31,6 +31,11 @@ int mlx5_lag_mpesw_do_mirred(struct mlx5_core_dev *mdev,
|
||||
bool mlx5_lag_is_mpesw(struct mlx5_core_dev *dev);
|
||||
void mlx5_lag_mpesw_disable(struct mlx5_core_dev *dev);
|
||||
int mlx5_lag_mpesw_enable(struct mlx5_core_dev *dev);
|
||||
#ifdef CONFIG_MLX5_ESWITCH
|
||||
void mlx5_lag_disable_mpesw(struct mlx5_lag *ldev);
|
||||
#else
|
||||
static inline void mlx5_lag_disable_mpesw(struct mlx5_lag *ldev) {}
|
||||
#endif /* CONFIG_MLX5_ESWITCH */
|
||||
|
||||
#ifdef CONFIG_MLX5_ESWITCH
|
||||
void mlx5_mpesw_speed_update_work(struct work_struct *work);
|
||||
|
||||
@@ -193,7 +193,9 @@ static int mlx5_sriov_enable(struct pci_dev *pdev, int num_vfs)
|
||||
err = pci_enable_sriov(pdev, num_vfs);
|
||||
if (err) {
|
||||
mlx5_core_warn(dev, "pci_enable_sriov failed : %d\n", err);
|
||||
devl_lock(devlink);
|
||||
mlx5_device_disable_sriov(dev, num_vfs, true, true);
|
||||
devl_unlock(devlink);
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -1051,8 +1051,8 @@ static int dr_dump_domain_all(struct seq_file *file, struct mlx5dr_domain *dmn)
|
||||
struct mlx5dr_table *tbl;
|
||||
int ret;
|
||||
|
||||
mutex_lock(&dmn->dump_info.dbg_mutex);
|
||||
mlx5dr_domain_lock(dmn);
|
||||
mutex_lock(&dmn->dump_info.dbg_mutex);
|
||||
|
||||
ret = dr_dump_domain(file, dmn);
|
||||
if (ret < 0)
|
||||
@@ -1065,8 +1065,8 @@ static int dr_dump_domain_all(struct seq_file *file, struct mlx5dr_domain *dmn)
|
||||
}
|
||||
|
||||
unlock_mutex:
|
||||
mlx5dr_domain_unlock(dmn);
|
||||
mutex_unlock(&dmn->dump_info.dbg_mutex);
|
||||
mlx5dr_domain_unlock(dmn);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -1946,7 +1946,10 @@ static void mana_gd_cleanup(struct pci_dev *pdev)
|
||||
|
||||
mana_gd_remove_irqs(pdev);
|
||||
|
||||
destroy_workqueue(gc->service_wq);
|
||||
if (gc->service_wq) {
|
||||
destroy_workqueue(gc->service_wq);
|
||||
gc->service_wq = NULL;
|
||||
}
|
||||
dev_dbg(&pdev->dev, "mana gdma cleanup successful\n");
|
||||
}
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user