mirror of
https://github.com/armbian/linux-cix.git
synced 2026-01-06 12:30:45 -08:00
Merge tag 'net-5.18-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Pull networking fixes from Paolo Abeni:
"Including fixes from wireless and netfilter.
Current release - regressions:
- smc: fix af_ops of child socket pointing to released memory
- wifi: ath9k: fix usage of driver-private space in tx_info
Previous releases - regressions:
- ipv6: fix panic when forwarding a pkt with no in6 dev
- sctp: use the correct skb for security_sctp_assoc_request
- smc: fix NULL pointer dereference in smc_pnet_find_ib()
- sched: fix initialization order when updating chain 0 head
- phy: don't defer probe forever if PHY IRQ provider is missing
- dsa: revert "net: dsa: setup master before ports"
- dsa: felix: fix tagging protocol changes with multiple CPU ports
- eth: ice:
- fix use-after-free when freeing @rx_cpu_rmap
- revert "iavf: fix deadlock occurrence during resetting VF
interface"
- eth: lan966x: stop processing the MAC entry is port is wrong
Previous releases - always broken:
- sched:
- flower: fix parsing of ethertype following VLAN header
- taprio: check if socket flags are valid
- nfc: add flush_workqueue to prevent uaf
- veth: ensure eth header is in skb's linear part
- eth: stmmac: fix altr_tse_pcs function when using a fixed-link
- eth: macb: restart tx only if queue pointer is lagging
- eth: macvlan: fix leaking skb in source mode with nodst option"
* tag 'net-5.18-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (52 commits)
net: bcmgenet: Revert "Use stronger register read/writes to assure ordering"
rtnetlink: Fix handling of disabled L3 stats in RTM_GETSTATS replies
net: dsa: felix: fix tagging protocol changes with multiple CPU ports
tun: annotate access to queue->trans_start
nfc: nci: add flush_workqueue to prevent uaf
net: dsa: realtek: don't parse compatible string for RTL8366S
net: dsa: realtek: fix Kconfig to assure consistent driver linkage
net: ftgmac100: access hardware register after clock ready
Revert "net: dsa: setup master before ports"
macvlan: Fix leaking skb in source mode with nodst option
netfilter: nf_tables: nft_parse_register can return a negative value
net: lan966x: Stop processing the MAC entry is port is wrong.
net: lan966x: Fix when a port's upper is changed.
net: lan966x: Fix IGMP snooping when frames have vlan tag
net: lan966x: Update lan966x_ptp_get_nominal_value
sctp: Initialize daddr on peeled off socket
net/smc: Fix af_ops of child socket pointing to released memory
net/smc: Fix NULL pointer dereference in smc_pnet_find_ib()
net/smc: use memcpy instead of snprintf to avoid out of bounds read
net: macb: Restart tx only if queue pointer is lagging
...
This commit is contained in:
@@ -13,9 +13,6 @@ description: |
|
||||
This describes the devicetree bindings for AVE ethernet controller
|
||||
implemented on Socionext UniPhier SoCs.
|
||||
|
||||
allOf:
|
||||
- $ref: ethernet-controller.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
@@ -44,25 +41,13 @@ properties:
|
||||
minItems: 1
|
||||
maxItems: 4
|
||||
|
||||
clock-names:
|
||||
oneOf:
|
||||
- items: # for Pro4
|
||||
- const: gio
|
||||
- const: ether
|
||||
- const: ether-gb
|
||||
- const: ether-phy
|
||||
- const: ether # for others
|
||||
clock-names: true
|
||||
|
||||
resets:
|
||||
minItems: 1
|
||||
maxItems: 2
|
||||
|
||||
reset-names:
|
||||
oneOf:
|
||||
- items: # for Pro4
|
||||
- const: gio
|
||||
- const: ether
|
||||
- const: ether # for others
|
||||
reset-names: true
|
||||
|
||||
socionext,syscon-phy-mode:
|
||||
$ref: /schemas/types.yaml#/definitions/phandle-array
|
||||
@@ -78,6 +63,42 @@ properties:
|
||||
$ref: mdio.yaml#
|
||||
unevaluatedProperties: false
|
||||
|
||||
allOf:
|
||||
- $ref: ethernet-controller.yaml#
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
const: socionext,uniphier-pro4-ave4
|
||||
then:
|
||||
properties:
|
||||
clocks:
|
||||
minItems: 4
|
||||
maxItems: 4
|
||||
clock-names:
|
||||
items:
|
||||
- const: gio
|
||||
- const: ether
|
||||
- const: ether-gb
|
||||
- const: ether-phy
|
||||
resets:
|
||||
minItems: 2
|
||||
maxItems: 2
|
||||
reset-names:
|
||||
items:
|
||||
- const: gio
|
||||
- const: ether
|
||||
else:
|
||||
properties:
|
||||
clocks:
|
||||
maxItems: 1
|
||||
clock-names:
|
||||
const: ether
|
||||
resets:
|
||||
maxItems: 1
|
||||
reset-names:
|
||||
const: ether
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
@@ -90,7 +111,7 @@ required:
|
||||
- reset-names
|
||||
- mdio
|
||||
|
||||
additionalProperties: false
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
|
||||
@@ -894,7 +894,7 @@ xmit_hash_policy
|
||||
Uses XOR of hardware MAC addresses and packet type ID
|
||||
field to generate the hash. The formula is
|
||||
|
||||
hash = source MAC XOR destination MAC XOR packet type ID
|
||||
hash = source MAC[5] XOR destination MAC[5] XOR packet type ID
|
||||
slave number = hash modulo slave count
|
||||
|
||||
This algorithm will place all traffic to a particular
|
||||
@@ -910,7 +910,7 @@ xmit_hash_policy
|
||||
Uses XOR of hardware MAC addresses and IP addresses to
|
||||
generate the hash. The formula is
|
||||
|
||||
hash = source MAC XOR destination MAC XOR packet type ID
|
||||
hash = source MAC[5] XOR destination MAC[5] XOR packet type ID
|
||||
hash = hash XOR source IP XOR destination IP
|
||||
hash = hash XOR (hash RSHIFT 16)
|
||||
hash = hash XOR (hash RSHIFT 8)
|
||||
|
||||
@@ -201,6 +201,7 @@ F: include/net/ieee80211_radiotap.h
|
||||
F: include/net/iw_handler.h
|
||||
F: include/net/wext.h
|
||||
F: include/uapi/linux/nl80211.h
|
||||
F: include/uapi/linux/wireless.h
|
||||
F: net/wireless/
|
||||
|
||||
8169 10/100/1000 GIGABIT ETHERNET DRIVER
|
||||
@@ -12402,7 +12403,7 @@ F: drivers/mmc/host/mtk-sd.c
|
||||
|
||||
MEDIATEK MT76 WIRELESS LAN DRIVER
|
||||
M: Felix Fietkau <nbd@nbd.name>
|
||||
M: Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
|
||||
M: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
M: Ryder Lee <ryder.lee@mediatek.com>
|
||||
R: Shayne Chen <shayne.chen@mediatek.com>
|
||||
R: Sean Wang <sean.wang@mediatek.com>
|
||||
@@ -21227,10 +21228,8 @@ S: Maintained
|
||||
F: drivers/hid/hid-wiimote*
|
||||
|
||||
WILOCITY WIL6210 WIRELESS DRIVER
|
||||
M: Maya Erez <merez@codeaurora.org>
|
||||
L: linux-wireless@vger.kernel.org
|
||||
L: wil6210@qti.qualcomm.com
|
||||
S: Supported
|
||||
S: Orphan
|
||||
W: https://wireless.wiki.kernel.org/en/users/Drivers/wil6210
|
||||
F: drivers/net/wireless/ath/wil6210/
|
||||
|
||||
|
||||
@@ -296,6 +296,7 @@ int driver_deferred_probe_check_state(struct device *dev)
|
||||
|
||||
return -EPROBE_DEFER;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(driver_deferred_probe_check_state);
|
||||
|
||||
static void deferred_probe_timeout_work_func(struct work_struct *work)
|
||||
{
|
||||
|
||||
@@ -670,6 +670,8 @@ static int felix_change_tag_protocol(struct dsa_switch *ds, int cpu,
|
||||
struct ocelot *ocelot = ds->priv;
|
||||
struct felix *felix = ocelot_to_felix(ocelot);
|
||||
enum dsa_tag_protocol old_proto = felix->tag_proto;
|
||||
bool cpu_port_active = false;
|
||||
struct dsa_port *dp;
|
||||
int err;
|
||||
|
||||
if (proto != DSA_TAG_PROTO_SEVILLE &&
|
||||
@@ -677,6 +679,27 @@ static int felix_change_tag_protocol(struct dsa_switch *ds, int cpu,
|
||||
proto != DSA_TAG_PROTO_OCELOT_8021Q)
|
||||
return -EPROTONOSUPPORT;
|
||||
|
||||
/* We don't support multiple CPU ports, yet the DT blob may have
|
||||
* multiple CPU ports defined. The first CPU port is the active one,
|
||||
* the others are inactive. In this case, DSA will call
|
||||
* ->change_tag_protocol() multiple times, once per CPU port.
|
||||
* Since we implement the tagging protocol change towards "ocelot" or
|
||||
* "seville" as effectively initializing the NPI port, what we are
|
||||
* doing is effectively changing who the NPI port is to the last @cpu
|
||||
* argument passed, which is an unused DSA CPU port and not the one
|
||||
* that should actively pass traffic.
|
||||
* Suppress DSA's calls on CPU ports that are inactive.
|
||||
*/
|
||||
dsa_switch_for_each_user_port(dp, ds) {
|
||||
if (dp->cpu_dp->index == cpu) {
|
||||
cpu_port_active = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!cpu_port_active)
|
||||
return 0;
|
||||
|
||||
felix_del_tag_protocol(ds, cpu, old_proto);
|
||||
|
||||
err = felix_set_tag_protocol(ds, cpu, proto);
|
||||
|
||||
@@ -2316,7 +2316,7 @@ static int felix_pci_probe(struct pci_dev *pdev,
|
||||
|
||||
err = dsa_register_switch(ds);
|
||||
if (err) {
|
||||
dev_err(&pdev->dev, "Failed to register DSA switch: %d\n", err);
|
||||
dev_err_probe(&pdev->dev, err, "Failed to register DSA switch\n");
|
||||
goto err_register_ds;
|
||||
}
|
||||
|
||||
|
||||
@@ -9,34 +9,46 @@ menuconfig NET_DSA_REALTEK
|
||||
help
|
||||
Select to enable support for Realtek Ethernet switch chips.
|
||||
|
||||
Note that at least one interface driver must be enabled for the
|
||||
subdrivers to be loaded. Moreover, an interface driver cannot achieve
|
||||
anything without at least one subdriver enabled.
|
||||
|
||||
if NET_DSA_REALTEK
|
||||
|
||||
config NET_DSA_REALTEK_MDIO
|
||||
tristate "Realtek MDIO connected switch driver"
|
||||
depends on NET_DSA_REALTEK
|
||||
tristate "Realtek MDIO interface driver"
|
||||
depends on OF
|
||||
depends on NET_DSA_REALTEK_RTL8365MB || NET_DSA_REALTEK_RTL8366RB
|
||||
depends on NET_DSA_REALTEK_RTL8365MB || !NET_DSA_REALTEK_RTL8365MB
|
||||
depends on NET_DSA_REALTEK_RTL8366RB || !NET_DSA_REALTEK_RTL8366RB
|
||||
help
|
||||
Select to enable support for registering switches configured
|
||||
through MDIO.
|
||||
|
||||
config NET_DSA_REALTEK_SMI
|
||||
tristate "Realtek SMI connected switch driver"
|
||||
depends on NET_DSA_REALTEK
|
||||
tristate "Realtek SMI interface driver"
|
||||
depends on OF
|
||||
depends on NET_DSA_REALTEK_RTL8365MB || NET_DSA_REALTEK_RTL8366RB
|
||||
depends on NET_DSA_REALTEK_RTL8365MB || !NET_DSA_REALTEK_RTL8365MB
|
||||
depends on NET_DSA_REALTEK_RTL8366RB || !NET_DSA_REALTEK_RTL8366RB
|
||||
help
|
||||
Select to enable support for registering switches connected
|
||||
through SMI.
|
||||
|
||||
config NET_DSA_REALTEK_RTL8365MB
|
||||
tristate "Realtek RTL8365MB switch subdriver"
|
||||
depends on NET_DSA_REALTEK
|
||||
depends on NET_DSA_REALTEK_SMI || NET_DSA_REALTEK_MDIO
|
||||
imply NET_DSA_REALTEK_SMI
|
||||
imply NET_DSA_REALTEK_MDIO
|
||||
select NET_DSA_TAG_RTL8_4
|
||||
help
|
||||
Select to enable support for Realtek RTL8365MB-VC and RTL8367S.
|
||||
|
||||
config NET_DSA_REALTEK_RTL8366RB
|
||||
tristate "Realtek RTL8366RB switch subdriver"
|
||||
depends on NET_DSA_REALTEK
|
||||
depends on NET_DSA_REALTEK_SMI || NET_DSA_REALTEK_MDIO
|
||||
imply NET_DSA_REALTEK_SMI
|
||||
imply NET_DSA_REALTEK_MDIO
|
||||
select NET_DSA_TAG_RTL4_A
|
||||
help
|
||||
Select to enable support for Realtek RTL8366RB
|
||||
Select to enable support for Realtek RTL8366RB.
|
||||
|
||||
endif
|
||||
|
||||
@@ -546,11 +546,6 @@ static const struct of_device_id realtek_smi_of_match[] = {
|
||||
.data = &rtl8366rb_variant,
|
||||
},
|
||||
#endif
|
||||
{
|
||||
/* FIXME: add support for RTL8366S and more */
|
||||
.compatible = "realtek,rtl8366s",
|
||||
.data = NULL,
|
||||
},
|
||||
#if IS_ENABLED(CONFIG_NET_DSA_REALTEK_RTL8365MB)
|
||||
{
|
||||
.compatible = "realtek,rtl8365mb",
|
||||
|
||||
@@ -486,8 +486,8 @@ int aq_nic_start(struct aq_nic_s *self)
|
||||
if (err < 0)
|
||||
goto err_exit;
|
||||
|
||||
for (i = 0U, aq_vec = self->aq_vec[0];
|
||||
self->aq_vecs > i; ++i, aq_vec = self->aq_vec[i]) {
|
||||
for (i = 0U; self->aq_vecs > i; ++i) {
|
||||
aq_vec = self->aq_vec[i];
|
||||
err = aq_vec_start(aq_vec);
|
||||
if (err < 0)
|
||||
goto err_exit;
|
||||
@@ -517,8 +517,8 @@ int aq_nic_start(struct aq_nic_s *self)
|
||||
mod_timer(&self->polling_timer, jiffies +
|
||||
AQ_CFG_POLLING_TIMER_INTERVAL);
|
||||
} else {
|
||||
for (i = 0U, aq_vec = self->aq_vec[0];
|
||||
self->aq_vecs > i; ++i, aq_vec = self->aq_vec[i]) {
|
||||
for (i = 0U; self->aq_vecs > i; ++i) {
|
||||
aq_vec = self->aq_vec[i];
|
||||
err = aq_pci_func_alloc_irq(self, i, self->ndev->name,
|
||||
aq_vec_isr, aq_vec,
|
||||
aq_vec_get_affinity_mask(aq_vec));
|
||||
|
||||
@@ -43,8 +43,8 @@ static int aq_vec_poll(struct napi_struct *napi, int budget)
|
||||
if (!self) {
|
||||
err = -EINVAL;
|
||||
} else {
|
||||
for (i = 0U, ring = self->ring[0];
|
||||
self->tx_rings > i; ++i, ring = self->ring[i]) {
|
||||
for (i = 0U; self->tx_rings > i; ++i) {
|
||||
ring = self->ring[i];
|
||||
u64_stats_update_begin(&ring[AQ_VEC_RX_ID].stats.rx.syncp);
|
||||
ring[AQ_VEC_RX_ID].stats.rx.polls++;
|
||||
u64_stats_update_end(&ring[AQ_VEC_RX_ID].stats.rx.syncp);
|
||||
@@ -182,8 +182,8 @@ int aq_vec_init(struct aq_vec_s *self, const struct aq_hw_ops *aq_hw_ops,
|
||||
self->aq_hw_ops = aq_hw_ops;
|
||||
self->aq_hw = aq_hw;
|
||||
|
||||
for (i = 0U, ring = self->ring[0];
|
||||
self->tx_rings > i; ++i, ring = self->ring[i]) {
|
||||
for (i = 0U; self->tx_rings > i; ++i) {
|
||||
ring = self->ring[i];
|
||||
err = aq_ring_init(&ring[AQ_VEC_TX_ID], ATL_RING_TX);
|
||||
if (err < 0)
|
||||
goto err_exit;
|
||||
@@ -224,8 +224,8 @@ int aq_vec_start(struct aq_vec_s *self)
|
||||
unsigned int i = 0U;
|
||||
int err = 0;
|
||||
|
||||
for (i = 0U, ring = self->ring[0];
|
||||
self->tx_rings > i; ++i, ring = self->ring[i]) {
|
||||
for (i = 0U; self->tx_rings > i; ++i) {
|
||||
ring = self->ring[i];
|
||||
err = self->aq_hw_ops->hw_ring_tx_start(self->aq_hw,
|
||||
&ring[AQ_VEC_TX_ID]);
|
||||
if (err < 0)
|
||||
@@ -248,8 +248,8 @@ void aq_vec_stop(struct aq_vec_s *self)
|
||||
struct aq_ring_s *ring = NULL;
|
||||
unsigned int i = 0U;
|
||||
|
||||
for (i = 0U, ring = self->ring[0];
|
||||
self->tx_rings > i; ++i, ring = self->ring[i]) {
|
||||
for (i = 0U; self->tx_rings > i; ++i) {
|
||||
ring = self->ring[i];
|
||||
self->aq_hw_ops->hw_ring_tx_stop(self->aq_hw,
|
||||
&ring[AQ_VEC_TX_ID]);
|
||||
|
||||
@@ -268,8 +268,8 @@ void aq_vec_deinit(struct aq_vec_s *self)
|
||||
if (!self)
|
||||
goto err_exit;
|
||||
|
||||
for (i = 0U, ring = self->ring[0];
|
||||
self->tx_rings > i; ++i, ring = self->ring[i]) {
|
||||
for (i = 0U; self->tx_rings > i; ++i) {
|
||||
ring = self->ring[i];
|
||||
aq_ring_tx_clean(&ring[AQ_VEC_TX_ID]);
|
||||
aq_ring_rx_deinit(&ring[AQ_VEC_RX_ID]);
|
||||
}
|
||||
@@ -297,8 +297,8 @@ void aq_vec_ring_free(struct aq_vec_s *self)
|
||||
if (!self)
|
||||
goto err_exit;
|
||||
|
||||
for (i = 0U, ring = self->ring[0];
|
||||
self->tx_rings > i; ++i, ring = self->ring[i]) {
|
||||
for (i = 0U; self->tx_rings > i; ++i) {
|
||||
ring = self->ring[i];
|
||||
aq_ring_free(&ring[AQ_VEC_TX_ID]);
|
||||
if (i < self->rx_rings)
|
||||
aq_ring_free(&ring[AQ_VEC_RX_ID]);
|
||||
|
||||
@@ -76,7 +76,7 @@ static inline void bcmgenet_writel(u32 value, void __iomem *offset)
|
||||
if (IS_ENABLED(CONFIG_MIPS) && IS_ENABLED(CONFIG_CPU_BIG_ENDIAN))
|
||||
__raw_writel(value, offset);
|
||||
else
|
||||
writel(value, offset);
|
||||
writel_relaxed(value, offset);
|
||||
}
|
||||
|
||||
static inline u32 bcmgenet_readl(void __iomem *offset)
|
||||
@@ -84,7 +84,7 @@ static inline u32 bcmgenet_readl(void __iomem *offset)
|
||||
if (IS_ENABLED(CONFIG_MIPS) && IS_ENABLED(CONFIG_CPU_BIG_ENDIAN))
|
||||
return __raw_readl(offset);
|
||||
else
|
||||
return readl(offset);
|
||||
return readl_relaxed(offset);
|
||||
}
|
||||
|
||||
static inline void dmadesc_set_length_status(struct bcmgenet_priv *priv,
|
||||
|
||||
@@ -1658,6 +1658,7 @@ static void macb_tx_restart(struct macb_queue *queue)
|
||||
unsigned int head = queue->tx_head;
|
||||
unsigned int tail = queue->tx_tail;
|
||||
struct macb *bp = queue->bp;
|
||||
unsigned int head_idx, tbqp;
|
||||
|
||||
if (bp->caps & MACB_CAPS_ISR_CLEAR_ON_WRITE)
|
||||
queue_writel(queue, ISR, MACB_BIT(TXUBR));
|
||||
@@ -1665,6 +1666,13 @@ static void macb_tx_restart(struct macb_queue *queue)
|
||||
if (head == tail)
|
||||
return;
|
||||
|
||||
tbqp = queue_readl(queue, TBQP) / macb_dma_desc_get_size(bp);
|
||||
tbqp = macb_adj_dma_desc_idx(bp, macb_tx_ring_wrap(bp, tbqp));
|
||||
head_idx = macb_adj_dma_desc_idx(bp, macb_tx_ring_wrap(bp, head));
|
||||
|
||||
if (tbqp == head_idx)
|
||||
return;
|
||||
|
||||
macb_writel(bp, NCR, macb_readl(bp, NCR) | MACB_BIT(TSTART));
|
||||
}
|
||||
|
||||
|
||||
@@ -1835,11 +1835,6 @@ static int ftgmac100_probe(struct platform_device *pdev)
|
||||
priv->rxdes0_edorr_mask = BIT(30);
|
||||
priv->txdes0_edotr_mask = BIT(30);
|
||||
priv->is_aspeed = true;
|
||||
/* Disable ast2600 problematic HW arbitration */
|
||||
if (of_device_is_compatible(np, "aspeed,ast2600-mac")) {
|
||||
iowrite32(FTGMAC100_TM_DEFAULT,
|
||||
priv->base + FTGMAC100_OFFSET_TM);
|
||||
}
|
||||
} else {
|
||||
priv->rxdes0_edorr_mask = BIT(15);
|
||||
priv->txdes0_edotr_mask = BIT(15);
|
||||
@@ -1911,6 +1906,11 @@ static int ftgmac100_probe(struct platform_device *pdev)
|
||||
err = ftgmac100_setup_clk(priv);
|
||||
if (err)
|
||||
goto err_phy_connect;
|
||||
|
||||
/* Disable ast2600 problematic HW arbitration */
|
||||
if (of_device_is_compatible(np, "aspeed,ast2600-mac"))
|
||||
iowrite32(FTGMAC100_TM_DEFAULT,
|
||||
priv->base + FTGMAC100_OFFSET_TM);
|
||||
}
|
||||
|
||||
/* Default ring sizes */
|
||||
|
||||
@@ -489,11 +489,15 @@ static int dpaa_get_ts_info(struct net_device *net_dev,
|
||||
info->phc_index = -1;
|
||||
|
||||
fman_node = of_get_parent(mac_node);
|
||||
if (fman_node)
|
||||
if (fman_node) {
|
||||
ptp_node = of_parse_phandle(fman_node, "ptimer-handle", 0);
|
||||
of_node_put(fman_node);
|
||||
}
|
||||
|
||||
if (ptp_node)
|
||||
if (ptp_node) {
|
||||
ptp_dev = of_find_device_by_node(ptp_node);
|
||||
of_node_put(ptp_node);
|
||||
}
|
||||
|
||||
if (ptp_dev)
|
||||
ptp = platform_get_drvdata(ptp_dev);
|
||||
|
||||
@@ -2871,7 +2871,6 @@ continue_reset:
|
||||
running = adapter->state == __IAVF_RUNNING;
|
||||
|
||||
if (running) {
|
||||
netdev->flags &= ~IFF_UP;
|
||||
netif_carrier_off(netdev);
|
||||
netif_tx_stop_all_queues(netdev);
|
||||
adapter->link_up = false;
|
||||
@@ -2988,7 +2987,7 @@ continue_reset:
|
||||
* to __IAVF_RUNNING
|
||||
*/
|
||||
iavf_up_complete(adapter);
|
||||
netdev->flags |= IFF_UP;
|
||||
|
||||
iavf_irq_enable(adapter, true);
|
||||
} else {
|
||||
iavf_change_state(adapter, __IAVF_DOWN);
|
||||
@@ -3004,10 +3003,8 @@ continue_reset:
|
||||
reset_err:
|
||||
mutex_unlock(&adapter->client_lock);
|
||||
mutex_unlock(&adapter->crit_lock);
|
||||
if (running) {
|
||||
if (running)
|
||||
iavf_change_state(adapter, __IAVF_RUNNING);
|
||||
netdev->flags |= IFF_UP;
|
||||
}
|
||||
dev_err(&adapter->pdev->dev, "failed to allocate resources during reinit\n");
|
||||
iavf_close(netdev);
|
||||
}
|
||||
|
||||
@@ -577,7 +577,7 @@ void ice_free_cpu_rx_rmap(struct ice_vsi *vsi)
|
||||
{
|
||||
struct net_device *netdev;
|
||||
|
||||
if (!vsi || vsi->type != ICE_VSI_PF || !vsi->arfs_fltr_list)
|
||||
if (!vsi || vsi->type != ICE_VSI_PF)
|
||||
return;
|
||||
|
||||
netdev = vsi->netdev;
|
||||
@@ -599,7 +599,7 @@ int ice_set_cpu_rx_rmap(struct ice_vsi *vsi)
|
||||
int base_idx, i;
|
||||
|
||||
if (!vsi || vsi->type != ICE_VSI_PF)
|
||||
return -EINVAL;
|
||||
return 0;
|
||||
|
||||
pf = vsi->back;
|
||||
netdev = vsi->netdev;
|
||||
@@ -636,7 +636,6 @@ void ice_remove_arfs(struct ice_pf *pf)
|
||||
if (!pf_vsi)
|
||||
return;
|
||||
|
||||
ice_free_cpu_rx_rmap(pf_vsi);
|
||||
ice_clear_arfs(pf_vsi);
|
||||
}
|
||||
|
||||
@@ -653,9 +652,5 @@ void ice_rebuild_arfs(struct ice_pf *pf)
|
||||
return;
|
||||
|
||||
ice_remove_arfs(pf);
|
||||
if (ice_set_cpu_rx_rmap(pf_vsi)) {
|
||||
dev_err(ice_pf_to_dev(pf), "Failed to rebuild aRFS\n");
|
||||
return;
|
||||
}
|
||||
ice_init_arfs(pf_vsi);
|
||||
}
|
||||
|
||||
@@ -2689,6 +2689,8 @@ void ice_vsi_free_irq(struct ice_vsi *vsi)
|
||||
return;
|
||||
|
||||
vsi->irqs_ready = false;
|
||||
ice_free_cpu_rx_rmap(vsi);
|
||||
|
||||
ice_for_each_q_vector(vsi, i) {
|
||||
u16 vector = i + base;
|
||||
int irq_num;
|
||||
@@ -2702,7 +2704,8 @@ void ice_vsi_free_irq(struct ice_vsi *vsi)
|
||||
continue;
|
||||
|
||||
/* clear the affinity notifier in the IRQ descriptor */
|
||||
irq_set_affinity_notifier(irq_num, NULL);
|
||||
if (!IS_ENABLED(CONFIG_RFS_ACCEL))
|
||||
irq_set_affinity_notifier(irq_num, NULL);
|
||||
|
||||
/* clear the affinity_mask in the IRQ descriptor */
|
||||
irq_set_affinity_hint(irq_num, NULL);
|
||||
|
||||
@@ -2510,6 +2510,13 @@ static int ice_vsi_req_irq_msix(struct ice_vsi *vsi, char *basename)
|
||||
irq_set_affinity_hint(irq_num, &q_vector->affinity_mask);
|
||||
}
|
||||
|
||||
err = ice_set_cpu_rx_rmap(vsi);
|
||||
if (err) {
|
||||
netdev_err(vsi->netdev, "Failed to setup CPU RMAP on VSI %u: %pe\n",
|
||||
vsi->vsi_num, ERR_PTR(err));
|
||||
goto free_q_irqs;
|
||||
}
|
||||
|
||||
vsi->irqs_ready = true;
|
||||
return 0;
|
||||
|
||||
@@ -3692,20 +3699,12 @@ static int ice_setup_pf_sw(struct ice_pf *pf)
|
||||
*/
|
||||
ice_napi_add(vsi);
|
||||
|
||||
status = ice_set_cpu_rx_rmap(vsi);
|
||||
if (status) {
|
||||
dev_err(dev, "Failed to set CPU Rx map VSI %d error %d\n",
|
||||
vsi->vsi_num, status);
|
||||
goto unroll_napi_add;
|
||||
}
|
||||
status = ice_init_mac_fltr(pf);
|
||||
if (status)
|
||||
goto free_cpu_rx_map;
|
||||
goto unroll_napi_add;
|
||||
|
||||
return 0;
|
||||
|
||||
free_cpu_rx_map:
|
||||
ice_free_cpu_rx_rmap(vsi);
|
||||
unroll_napi_add:
|
||||
ice_tc_indir_block_unregister(vsi);
|
||||
unroll_cfg_netdev:
|
||||
@@ -5167,7 +5166,6 @@ static int __maybe_unused ice_suspend(struct device *dev)
|
||||
continue;
|
||||
ice_vsi_free_q_vectors(pf->vsi[v]);
|
||||
}
|
||||
ice_free_cpu_rx_rmap(ice_get_main_vsi(pf));
|
||||
ice_clear_interrupt_scheme(pf);
|
||||
|
||||
pci_save_state(pdev);
|
||||
|
||||
@@ -650,6 +650,7 @@ static int mlxsw_i2c_probe(struct i2c_client *client,
|
||||
return 0;
|
||||
|
||||
errout:
|
||||
mutex_destroy(&mlxsw_i2c->cmd.lock);
|
||||
i2c_set_clientdata(client, NULL);
|
||||
|
||||
return err;
|
||||
|
||||
@@ -346,7 +346,8 @@ static void lan966x_mac_irq_process(struct lan966x *lan966x, u32 row,
|
||||
|
||||
lan966x_mac_process_raw_entry(&raw_entries[column],
|
||||
mac, &vid, &dest_idx);
|
||||
WARN_ON(dest_idx > lan966x->num_phys_ports);
|
||||
if (WARN_ON(dest_idx > lan966x->num_phys_ports))
|
||||
continue;
|
||||
|
||||
/* If the entry in SW is found, then there is nothing
|
||||
* to do
|
||||
@@ -392,7 +393,8 @@ static void lan966x_mac_irq_process(struct lan966x *lan966x, u32 row,
|
||||
|
||||
lan966x_mac_process_raw_entry(&raw_entries[column],
|
||||
mac, &vid, &dest_idx);
|
||||
WARN_ON(dest_idx > lan966x->num_phys_ports);
|
||||
if (WARN_ON(dest_idx > lan966x->num_phys_ports))
|
||||
continue;
|
||||
|
||||
mac_entry = lan966x_mac_alloc_entry(mac, vid, dest_idx);
|
||||
if (!mac_entry)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user