mirror of
https://github.com/openwrt/openwrt.git
synced 2025-01-31 08:25:29 +00:00
kernel: bump 6.1 to 6.1.59
Changelog: https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.1.59 Manually rebased: bcm27xx/patches-6.1/950-0124-Add-support-for-all-the-downstream-rpi-sound-card-dr.patch Removed upstreamed: generic/backport-6.1/781-v6.6-02-net-dsa-qca8k-fix-potential-MDIO-bus-conflict-when-a.patch[1] All other patches automatically rebased. 1. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.1.59&id=881050b25b1dda7b0f14d40d1b09bf38cb3b427c Build system: x86/64 Build-tested: x86/64/AMD Cezanne Run-tested: x86/64/AMD Cezanne Signed-off-by: John Audia <therealgraysky@proton.me>
This commit is contained in:
parent
33e72eba5f
commit
bb8fd41f9a
@ -1,2 +1,2 @@
|
||||
LINUX_VERSION-6.1 = .58
|
||||
LINUX_KERNEL_HASH-6.1.58 = ce987ed3d2f640b3a2a62a0a8573d538a36dfd3cc31e2d7a239ce5a16c1c21ad
|
||||
LINUX_VERSION-6.1 = .59
|
||||
LINUX_KERNEL_HASH-6.1.59 = 627f7724c675036639290fb5c39e3fdeb3d566b80b192c45f4a808ab54c8c0a0
|
||||
|
@ -349,7 +349,7 @@ SVN-Revision: 35130
|
||||
list_for_each_entry(p, head, list) {
|
||||
--- a/net/ipv4/tcp_output.c
|
||||
+++ b/net/ipv4/tcp_output.c
|
||||
@@ -610,48 +610,53 @@ static void tcp_options_write(struct tcp
|
||||
@@ -612,48 +612,53 @@ static void tcp_options_write(struct tcp
|
||||
u16 options = opts->options; /* mungable copy */
|
||||
|
||||
if (unlikely(OPTION_MD5 & options)) {
|
||||
@ -426,7 +426,7 @@ SVN-Revision: 35130
|
||||
}
|
||||
|
||||
if (unlikely(opts->num_sack_blocks)) {
|
||||
@@ -659,16 +664,17 @@ static void tcp_options_write(struct tcp
|
||||
@@ -661,16 +666,17 @@ static void tcp_options_write(struct tcp
|
||||
tp->duplicate_sack : tp->selective_acks;
|
||||
int this_sack;
|
||||
|
||||
@ -450,7 +450,7 @@ SVN-Revision: 35130
|
||||
}
|
||||
|
||||
tp->rx_opt.dsack = 0;
|
||||
@@ -681,13 +687,14 @@ static void tcp_options_write(struct tcp
|
||||
@@ -683,13 +689,14 @@ static void tcp_options_write(struct tcp
|
||||
|
||||
if (foc->exp) {
|
||||
len = TCPOLEN_EXP_FASTOPEN_BASE + foc->len;
|
||||
|
@ -10,7 +10,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||||
|
||||
--- a/drivers/gpu/drm/drm_atomic_helper.c
|
||||
+++ b/drivers/gpu/drm/drm_atomic_helper.c
|
||||
@@ -438,6 +438,11 @@ mode_fixup(struct drm_atomic_state *stat
|
||||
@@ -443,6 +443,11 @@ mode_fixup(struct drm_atomic_state *stat
|
||||
new_crtc_state =
|
||||
drm_atomic_get_new_crtc_state(state, new_conn_state->crtc);
|
||||
|
||||
|
@ -59,7 +59,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
|
||||
--- a/drivers/gpu/drm/drm_atomic_helper.c
|
||||
+++ b/drivers/gpu/drm/drm_atomic_helper.c
|
||||
@@ -1617,13 +1617,6 @@ drm_atomic_helper_wait_for_vblanks(struc
|
||||
@@ -1626,13 +1626,6 @@ drm_atomic_helper_wait_for_vblanks(struc
|
||||
int i, ret;
|
||||
unsigned int crtc_mask = 0;
|
||||
|
||||
@ -73,7 +73,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
for_each_oldnew_crtc_in_state(old_state, crtc, old_crtc_state, new_crtc_state, i) {
|
||||
if (!new_crtc_state->active)
|
||||
continue;
|
||||
@@ -2273,12 +2266,6 @@ int drm_atomic_helper_setup_commit(struc
|
||||
@@ -2282,12 +2275,6 @@ int drm_atomic_helper_setup_commit(struc
|
||||
complete_all(&commit->flip_done);
|
||||
continue;
|
||||
}
|
||||
|
@ -1185,7 +1185,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
}
|
||||
--- a/drivers/usb/core/hub.c
|
||||
+++ b/drivers/usb/core/hub.c
|
||||
@@ -5636,7 +5636,7 @@ static void port_event(struct usb_hub *h
|
||||
@@ -5655,7 +5655,7 @@ static void port_event(struct usb_hub *h
|
||||
port_dev->over_current_count++;
|
||||
port_over_current_notify(port_dev);
|
||||
|
||||
|
@ -17615,12 +17615,12 @@ Signed-off-by: Ashish Vara <ashishhvara@gmail.com>
|
||||
* For devices with more than one control interface, we assume the
|
||||
--- a/sound/usb/quirks.c
|
||||
+++ b/sound/usb/quirks.c
|
||||
@@ -2171,6 +2171,8 @@ static const struct usb_audio_quirk_flag
|
||||
@@ -2175,6 +2175,8 @@ static const struct usb_audio_quirk_flag
|
||||
QUIRK_FLAG_FIXED_RATE),
|
||||
DEVICE_FLG(0x0ecb, 0x2069, /* JBL Quantum810 Wireless */
|
||||
QUIRK_FLAG_FIXED_RATE),
|
||||
+ DEVICE_FLG(0x09da, 0x2695, /* A4Tech FHD 1080p webcam */
|
||||
+ QUIRK_FLAG_DISABLE_AUTOSUSPEND | QUIRK_FLAG_GET_SAMPLE_RATE),
|
||||
DEVICE_FLG(0x1bcf, 0x2283, /* NexiGo N930AF FHD Webcam */
|
||||
QUIRK_FLAG_GET_SAMPLE_RATE),
|
||||
|
||||
/* Vendor matches */
|
||||
VENDOR_FLG(0x045e, /* MS Lifecam */
|
||||
|
@ -96,7 +96,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||||
}
|
||||
|
||||
static int goodix_check_cfg_8(struct goodix_ts_data *ts, const u8 *cfg, int len)
|
||||
@@ -1406,6 +1459,11 @@ static void goodix_ts_remove(struct i2c_
|
||||
@@ -1425,6 +1478,11 @@ static void goodix_ts_remove(struct i2c_
|
||||
{
|
||||
struct goodix_ts_data *ts = i2c_get_clientdata(client);
|
||||
|
||||
@ -108,7 +108,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||||
if (ts->load_cfg_from_disk)
|
||||
wait_for_completion(&ts->firmware_loading_complete);
|
||||
}
|
||||
@@ -1421,7 +1479,7 @@ static int __maybe_unused goodix_suspend
|
||||
@@ -1440,7 +1498,7 @@ static int __maybe_unused goodix_suspend
|
||||
|
||||
/* We need gpio pins to suspend/resume */
|
||||
if (ts->irq_pin_access_method == IRQ_PIN_ACCESS_NONE) {
|
||||
@ -117,7 +117,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1465,7 +1523,7 @@ static int __maybe_unused goodix_resume(
|
||||
@@ -1484,7 +1542,7 @@ static int __maybe_unused goodix_resume(
|
||||
int error;
|
||||
|
||||
if (ts->irq_pin_access_method == IRQ_PIN_ACCESS_NONE) {
|
||||
|
@ -28,7 +28,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
--- a/drivers/net/dsa/qca/qca8k-8xxx.c
|
||||
+++ b/drivers/net/dsa/qca/qca8k-8xxx.c
|
||||
@@ -743,9 +743,9 @@ qca8k_mdio_busy_wait(struct mii_bus *bus
|
||||
@@ -754,9 +754,9 @@ qca8k_mdio_busy_wait(struct mii_bus *bus
|
||||
|
||||
qca8k_split_addr(reg, &r1, &r2, &page);
|
||||
|
||||
@ -40,7 +40,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
/* Check if qca8k_read has failed for a different reason
|
||||
* before returnting -ETIMEDOUT
|
||||
@@ -787,7 +787,7 @@ qca8k_mdio_write(struct qca8k_priv *priv
|
||||
@@ -798,7 +798,7 @@ qca8k_mdio_write(struct qca8k_priv *priv
|
||||
|
||||
exit:
|
||||
/* even if the busy_wait timeouts try to clear the MASTER_EN */
|
||||
@ -49,7 +49,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
mutex_unlock(&bus->mdio_lock);
|
||||
|
||||
@@ -817,18 +817,18 @@ qca8k_mdio_read(struct qca8k_priv *priv,
|
||||
@@ -828,18 +828,18 @@ qca8k_mdio_read(struct qca8k_priv *priv,
|
||||
if (ret)
|
||||
goto exit;
|
||||
|
||||
|
@ -168,7 +168,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
};
|
||||
|
||||
static int
|
||||
@@ -2091,8 +2147,6 @@ static SIMPLE_DEV_PM_OPS(qca8k_pm_ops,
|
||||
@@ -2102,8 +2158,6 @@ static SIMPLE_DEV_PM_OPS(qca8k_pm_ops,
|
||||
|
||||
static const struct qca8k_info_ops qca8xxx_ops = {
|
||||
.autocast_mib = qca8k_get_ethtool_stats_eth,
|
||||
|
@ -32,7 +32,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
--- a/drivers/net/dsa/qca/qca8k-8xxx.c
|
||||
+++ b/drivers/net/dsa/qca/qca8k-8xxx.c
|
||||
@@ -1883,9 +1883,8 @@ qca8k_setup(struct dsa_switch *ds)
|
||||
@@ -1894,9 +1894,8 @@ qca8k_setup(struct dsa_switch *ds)
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@ -44,7 +44,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@@ -1991,6 +1990,8 @@ static const struct dsa_switch_ops qca8k
|
||||
@@ -2002,6 +2001,8 @@ static const struct dsa_switch_ops qca8k
|
||||
.port_change_mtu = qca8k_port_change_mtu,
|
||||
.port_max_mtu = qca8k_port_max_mtu,
|
||||
.port_stp_state_set = qca8k_port_stp_state_set,
|
||||
|
@ -26,7 +26,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
--- a/drivers/net/dsa/qca/qca8k-8xxx.c
|
||||
+++ b/drivers/net/dsa/qca/qca8k-8xxx.c
|
||||
@@ -1863,18 +1863,16 @@ qca8k_setup(struct dsa_switch *ds)
|
||||
@@ -1874,18 +1874,16 @@ qca8k_setup(struct dsa_switch *ds)
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
@ -17,7 +17,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
--- a/drivers/net/dsa/qca/qca8k-8xxx.c
|
||||
+++ b/drivers/net/dsa/qca/qca8k-8xxx.c
|
||||
@@ -1773,6 +1773,46 @@ static int qca8k_connect_tag_protocol(st
|
||||
@@ -1784,6 +1784,46 @@ static int qca8k_connect_tag_protocol(st
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -64,7 +64,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
static int
|
||||
qca8k_setup(struct dsa_switch *ds)
|
||||
{
|
||||
@@ -1908,42 +1948,8 @@ qca8k_setup(struct dsa_switch *ds)
|
||||
@@ -1919,42 +1959,8 @@ qca8k_setup(struct dsa_switch *ds)
|
||||
* missing settings to improve switch stability under load condition.
|
||||
* This problem is limited to qca8337 and other qca8k switch are not affected.
|
||||
*/
|
||||
|
@ -17,7 +17,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
--- a/drivers/net/dsa/qca/qca8k-8xxx.c
|
||||
+++ b/drivers/net/dsa/qca/qca8k-8xxx.c
|
||||
@@ -1817,7 +1817,8 @@ static int
|
||||
@@ -1828,7 +1828,8 @@ static int
|
||||
qca8k_setup(struct dsa_switch *ds)
|
||||
{
|
||||
struct qca8k_priv *priv = (struct qca8k_priv *)ds->priv;
|
||||
@ -27,7 +27,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
u32 mask;
|
||||
|
||||
cpu_port = qca8k_find_cpu_port(ds);
|
||||
@@ -1868,27 +1869,27 @@ qca8k_setup(struct dsa_switch *ds)
|
||||
@@ -1879,27 +1880,27 @@ qca8k_setup(struct dsa_switch *ds)
|
||||
dev_warn(priv->dev, "mib init failed");
|
||||
|
||||
/* Initial setup of all ports */
|
||||
@ -70,7 +70,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
}
|
||||
|
||||
/* Forward all unknown frames to CPU port for Linux processing
|
||||
@@ -1910,48 +1911,48 @@ qca8k_setup(struct dsa_switch *ds)
|
||||
@@ -1921,48 +1922,48 @@ qca8k_setup(struct dsa_switch *ds)
|
||||
return ret;
|
||||
|
||||
/* Setup connection between CPU port & user ports
|
||||
|
@ -1,106 +0,0 @@
|
||||
From 526c8ee04bdbd4d8d19a583b1f3b06700229a815 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Marek=20Beh=C3=BAn?= <kabel@kernel.org>
|
||||
Date: Wed, 4 Oct 2023 11:19:04 +0200
|
||||
Subject: [PATCH 2/2] net: dsa: qca8k: fix potential MDIO bus conflict when
|
||||
accessing internal PHYs via management frames
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Besides the QCA8337 switch the Turris 1.x device has on it's MDIO bus
|
||||
also Micron ethernet PHY (dedicated to the WAN port).
|
||||
|
||||
We've been experiencing a strange behavior of the WAN ethernet
|
||||
interface, wherein the WAN PHY started timing out the MDIO accesses, for
|
||||
example when the interface was brought down and then back up.
|
||||
|
||||
Bisecting led to commit 2cd548566384 ("net: dsa: qca8k: add support for
|
||||
phy read/write with mgmt Ethernet"), which added support to access the
|
||||
QCA8337 switch's internal PHYs via management ethernet frames.
|
||||
|
||||
Connecting the MDIO bus pins onto an oscilloscope, I was able to see
|
||||
that the MDIO bus was active whenever a request to read/write an
|
||||
internal PHY register was done via an management ethernet frame.
|
||||
|
||||
My theory is that when the switch core always communicates with the
|
||||
internal PHYs via the MDIO bus, even when externally we request the
|
||||
access via ethernet. This MDIO bus is the same one via which the switch
|
||||
and internal PHYs are accessible to the board, and the board may have
|
||||
other devices connected on this bus. An ASCII illustration may give more
|
||||
insight:
|
||||
|
||||
+---------+
|
||||
+----| |
|
||||
| | WAN PHY |
|
||||
| +--| |
|
||||
| | +---------+
|
||||
| |
|
||||
| | +----------------------------------+
|
||||
| | | QCA8337 |
|
||||
MDC | | | +-------+ |
|
||||
------o-+--|--------o------------o--| | |
|
||||
MDIO | | | | | PHY 1 |-|--to RJ45
|
||||
--------o--|---o----+---------o--+--| | |
|
||||
| | | | | +-------+ |
|
||||
| +-------------+ | o--| | |
|
||||
| | MDIO MDC | | | | PHY 2 |-|--to RJ45
|
||||
eth1 | | | o--+--| | |
|
||||
-----------|-|port0 | | | +-------+ |
|
||||
| | | | o--| | |
|
||||
| | switch core | | | | PHY 3 |-|--to RJ45
|
||||
| +-------------+ o--+--| | |
|
||||
| | | +-------+ |
|
||||
| | o--| ... | |
|
||||
+----------------------------------+
|
||||
|
||||
When we send a request to read an internal PHY register via an ethernet
|
||||
management frame via eth1, the switch core receives the ethernet frame
|
||||
on port 0 and then communicates with the internal PHY via MDIO. At this
|
||||
time, other potential devices, such as the WAN PHY on Turris 1.x, cannot
|
||||
use the MDIO bus, since it may cause a bus conflict.
|
||||
|
||||
Fix this issue by locking the MDIO bus even when we are accessing the
|
||||
PHY registers via ethernet management frames.
|
||||
|
||||
Fixes: 2cd548566384 ("net: dsa: qca8k: add support for phy read/write with mgmt Ethernet")
|
||||
Signed-off-by: Marek Behún <kabel@kernel.org>
|
||||
Reviewed-by: Christian Marangi <ansuelsmth@gmail.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/dsa/qca/qca8k-8xxx.c | 11 +++++++++++
|
||||
1 file changed, 11 insertions(+)
|
||||
|
||||
--- a/drivers/net/dsa/qca/qca8k-8xxx.c
|
||||
+++ b/drivers/net/dsa/qca/qca8k-8xxx.c
|
||||
@@ -665,6 +665,15 @@ qca8k_phy_eth_command(struct qca8k_priv
|
||||
goto err_read_skb;
|
||||
}
|
||||
|
||||
+ /* It seems that accessing the switch's internal PHYs via management
|
||||
+ * packets still uses the MDIO bus within the switch internally, and
|
||||
+ * these accesses can conflict with external MDIO accesses to other
|
||||
+ * devices on the MDIO bus.
|
||||
+ * We therefore need to lock the MDIO bus onto which the switch is
|
||||
+ * connected.
|
||||
+ */
|
||||
+ mutex_lock(&priv->bus->mdio_lock);
|
||||
+
|
||||
/* Actually start the request:
|
||||
* 1. Send mdio master packet
|
||||
* 2. Busy Wait for mdio master command
|
||||
@@ -677,6 +686,7 @@ qca8k_phy_eth_command(struct qca8k_priv
|
||||
mgmt_master = priv->mgmt_master;
|
||||
if (!mgmt_master) {
|
||||
mutex_unlock(&mgmt_eth_data->mutex);
|
||||
+ mutex_unlock(&priv->bus->mdio_lock);
|
||||
ret = -EINVAL;
|
||||
goto err_mgmt_master;
|
||||
}
|
||||
@@ -764,6 +774,7 @@ exit:
|
||||
QCA8K_ETHERNET_TIMEOUT);
|
||||
|
||||
mutex_unlock(&mgmt_eth_data->mutex);
|
||||
+ mutex_unlock(&priv->bus->mdio_lock);
|
||||
|
||||
return ret;
|
||||
|
@ -105,7 +105,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
help
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -3575,6 +3575,11 @@ static int xmit_one(struct sk_buff *skb,
|
||||
@@ -3579,6 +3579,11 @@ static int xmit_one(struct sk_buff *skb,
|
||||
if (dev_nit_active(dev))
|
||||
dev_queue_xmit_nit(skb, dev);
|
||||
|
||||
|
@ -44,7 +44,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -7593,6 +7593,48 @@ static void __netdev_adjacent_dev_unlink
|
||||
@@ -7597,6 +7597,48 @@ static void __netdev_adjacent_dev_unlink
|
||||
&upper_dev->adj_list.lower);
|
||||
}
|
||||
|
||||
@ -93,7 +93,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
static int __netdev_upper_dev_link(struct net_device *dev,
|
||||
struct net_device *upper_dev, bool master,
|
||||
void *upper_priv, void *upper_info,
|
||||
@@ -7644,6 +7686,7 @@ static int __netdev_upper_dev_link(struc
|
||||
@@ -7648,6 +7690,7 @@ static int __netdev_upper_dev_link(struc
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@ -101,7 +101,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
ret = call_netdevice_notifiers_info(NETDEV_CHANGEUPPER,
|
||||
&changeupper_info.info);
|
||||
ret = notifier_to_errno(ret);
|
||||
@@ -7740,6 +7783,7 @@ static void __netdev_upper_dev_unlink(st
|
||||
@@ -7744,6 +7787,7 @@ static void __netdev_upper_dev_unlink(st
|
||||
|
||||
__netdev_adjacent_dev_unlink_neighbour(dev, upper_dev);
|
||||
|
||||
@ -109,7 +109,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
call_netdevice_notifiers_info(NETDEV_CHANGEUPPER,
|
||||
&changeupper_info.info);
|
||||
|
||||
@@ -8792,6 +8836,7 @@ int dev_set_mac_address(struct net_devic
|
||||
@@ -8796,6 +8840,7 @@ int dev_set_mac_address(struct net_devic
|
||||
if (err)
|
||||
return err;
|
||||
dev->addr_assign_type = NET_ADDR_SET;
|
||||
|
@ -30,7 +30,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
#endif
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -4593,7 +4593,7 @@ static int napi_schedule_rps(struct soft
|
||||
@@ -4597,7 +4597,7 @@ static int napi_schedule_rps(struct soft
|
||||
struct softnet_data *mysd = this_cpu_ptr(&softnet_data);
|
||||
|
||||
#ifdef CONFIG_RPS
|
||||
@ -39,7 +39,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
sd->rps_ipi_next = mysd->rps_ipi_list;
|
||||
mysd->rps_ipi_list = sd;
|
||||
|
||||
@@ -5774,6 +5774,8 @@ static DEFINE_PER_CPU(struct work_struct
|
||||
@@ -5778,6 +5778,8 @@ static DEFINE_PER_CPU(struct work_struct
|
||||
/* Network device is going away, flush any packets still pending */
|
||||
static void flush_backlog(struct work_struct *work)
|
||||
{
|
||||
@ -48,7 +48,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
struct sk_buff *skb, *tmp;
|
||||
struct softnet_data *sd;
|
||||
|
||||
@@ -5788,8 +5790,17 @@ static void flush_backlog(struct work_st
|
||||
@@ -5792,8 +5794,17 @@ static void flush_backlog(struct work_st
|
||||
input_queue_head_incr(sd);
|
||||
}
|
||||
}
|
||||
@ -66,7 +66,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
skb_queue_walk_safe(&sd->process_queue, skb, tmp) {
|
||||
if (skb->dev->reg_state == NETREG_UNREGISTERING) {
|
||||
__skb_unlink(skb, &sd->process_queue);
|
||||
@@ -5797,7 +5808,16 @@ static void flush_backlog(struct work_st
|
||||
@@ -5801,7 +5812,16 @@ static void flush_backlog(struct work_st
|
||||
input_queue_head_incr(sd);
|
||||
}
|
||||
}
|
||||
@ -83,7 +83,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
}
|
||||
|
||||
static bool flush_required(int cpu)
|
||||
@@ -5929,6 +5949,7 @@ static int process_backlog(struct napi_s
|
||||
@@ -5933,6 +5953,7 @@ static int process_backlog(struct napi_s
|
||||
}
|
||||
|
||||
rps_lock_irq_disable(sd);
|
||||
@ -91,7 +91,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (skb_queue_empty(&sd->input_pkt_queue)) {
|
||||
/*
|
||||
* Inline a custom version of __napi_complete().
|
||||
@@ -5938,7 +5959,8 @@ static int process_backlog(struct napi_s
|
||||
@@ -5942,7 +5963,8 @@ static int process_backlog(struct napi_s
|
||||
* We can use a plain write instead of clear_bit(),
|
||||
* and we dont need an smp_mb() memory barrier.
|
||||
*/
|
||||
@ -101,7 +101,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
again = false;
|
||||
} else {
|
||||
skb_queue_splice_tail_init(&sd->input_pkt_queue,
|
||||
@@ -6354,6 +6376,55 @@ int dev_set_threaded(struct net_device *
|
||||
@@ -6358,6 +6380,55 @@ int dev_set_threaded(struct net_device *
|
||||
}
|
||||
EXPORT_SYMBOL(dev_set_threaded);
|
||||
|
||||
@ -157,7 +157,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
void netif_napi_add_weight(struct net_device *dev, struct napi_struct *napi,
|
||||
int (*poll)(struct napi_struct *, int), int weight)
|
||||
{
|
||||
@@ -11126,6 +11197,9 @@ static int dev_cpu_dead(unsigned int old
|
||||
@@ -11130,6 +11201,9 @@ static int dev_cpu_dead(unsigned int old
|
||||
raise_softirq_irqoff(NET_TX_SOFTIRQ);
|
||||
local_irq_enable();
|
||||
|
||||
@ -167,7 +167,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
#ifdef CONFIG_RPS
|
||||
remsd = oldsd->rps_ipi_list;
|
||||
oldsd->rps_ipi_list = NULL;
|
||||
@@ -11429,6 +11503,7 @@ static int __init net_dev_init(void)
|
||||
@@ -11433,6 +11507,7 @@ static int __init net_dev_init(void)
|
||||
INIT_CSD(&sd->defer_csd, trigger_rx_softirq, sd);
|
||||
spin_lock_init(&sd->defer_lock);
|
||||
|
||||
|
@ -65,7 +65,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
/**
|
||||
* ata_build_rw_tf - Build ATA taskfile for given read/write request
|
||||
* @qc: Metadata associated with the taskfile to build
|
||||
@@ -4622,6 +4635,9 @@ void __ata_qc_complete(struct ata_queued
|
||||
@@ -4712,6 +4725,9 @@ void __ata_qc_complete(struct ata_queued
|
||||
link->active_tag = ATA_TAG_POISON;
|
||||
ap->nr_active_links--;
|
||||
}
|
||||
@ -75,7 +75,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
|
||||
/* clear exclusive status */
|
||||
if (unlikely(qc->flags & ATA_QCFLAG_CLEAR_EXCL &&
|
||||
@@ -5344,6 +5360,9 @@ struct ata_port *ata_port_alloc(struct a
|
||||
@@ -5434,6 +5450,9 @@ struct ata_port *ata_port_alloc(struct a
|
||||
ap->stats.unhandled_irq = 1;
|
||||
ap->stats.idle_irq = 1;
|
||||
#endif
|
||||
@ -85,7 +85,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
ata_sff_port_init(ap);
|
||||
|
||||
return ap;
|
||||
@@ -5379,6 +5398,12 @@ static void ata_host_release(struct kref
|
||||
@@ -5469,6 +5488,12 @@ static void ata_host_release(struct kref
|
||||
|
||||
kfree(ap->pmp_link);
|
||||
kfree(ap->slave_link);
|
||||
@ -98,7 +98,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
kfree(ap);
|
||||
host->ports[i] = NULL;
|
||||
}
|
||||
@@ -5781,7 +5806,23 @@ int ata_host_register(struct ata_host *h
|
||||
@@ -5871,7 +5896,23 @@ int ata_host_register(struct ata_host *h
|
||||
host->ports[i]->print_id = atomic_inc_return(&ata_print_id);
|
||||
host->ports[i]->local_port_no = i + 1;
|
||||
}
|
||||
@ -134,7 +134,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
|
||||
/*
|
||||
* Define if arch has non-standard setup. This is a _PCI_ standard
|
||||
@@ -861,6 +864,12 @@ struct ata_port {
|
||||
@@ -864,6 +867,12 @@ struct ata_port {
|
||||
#ifdef CONFIG_ATA_ACPI
|
||||
struct ata_acpi_gtm __acpi_init_gtm; /* use ata_acpi_init_gtm() */
|
||||
#endif
|
||||
|
@ -66,7 +66,7 @@ Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
||||
/**
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -6562,7 +6562,7 @@ static int __napi_poll(struct napi_struc
|
||||
@@ -6566,7 +6566,7 @@ static int __napi_poll(struct napi_struc
|
||||
* accidentally calling ->poll() when NAPI is not scheduled.
|
||||
*/
|
||||
work = 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user