mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-19 05:38:00 +00:00
kernel: Update kernel 4.19 to version 4.19.138
Compile and run tested on lantiq/xrx200 Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit is contained in:
parent
fce0f1501b
commit
fdac05b741
@ -7,11 +7,11 @@ ifdef CONFIG_TESTING_KERNEL
|
||||
endif
|
||||
|
||||
LINUX_VERSION-4.14 = .187
|
||||
LINUX_VERSION-4.19 = .131
|
||||
LINUX_VERSION-4.19 = .138
|
||||
LINUX_VERSION-5.4 = .52
|
||||
|
||||
LINUX_KERNEL_HASH-4.14.187 = 5b223475eaeea196aa7e127d3f253bca5c35d8afdc72ca75230ce1ecdd1454bd
|
||||
LINUX_KERNEL_HASH-4.19.131 = 19dfb9f6cc4ba30104b65dcce7d78240a4ae188cb366747d5f8eae35e98964ba
|
||||
LINUX_KERNEL_HASH-4.19.138 = d15c27d05f6c527269b75b30cc72972748e55720e7e00ad8abbaa4fe3b1d5e02
|
||||
LINUX_KERNEL_HASH-5.4.52 = 037efa531120b1c20ff55e78cd3e17288b1804b3a57dc31de760837b3bea5d3a
|
||||
|
||||
remove_uri_prefix=$(subst git://,,$(subst http://,,$(subst https://,,$(1))))
|
||||
|
@ -44,7 +44,7 @@ Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
|
||||
|
||||
#include "xhci.h"
|
||||
#include "xhci-trace.h"
|
||||
@@ -265,6 +267,458 @@ static void xhci_pme_acpi_rtd3_enable(st
|
||||
@@ -268,6 +270,458 @@ static void xhci_pme_acpi_rtd3_enable(st
|
||||
static void xhci_pme_acpi_rtd3_enable(struct pci_dev *dev) { }
|
||||
#endif /* CONFIG_ACPI */
|
||||
|
||||
@ -503,7 +503,7 @@ Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
|
||||
/* called during probe() after chip reset completes */
|
||||
static int xhci_pci_setup(struct usb_hcd *hcd)
|
||||
{
|
||||
@@ -306,6 +760,22 @@ static int xhci_pci_probe(struct pci_dev
|
||||
@@ -309,6 +763,22 @@ static int xhci_pci_probe(struct pci_dev
|
||||
struct hc_driver *driver;
|
||||
struct usb_hcd *hcd;
|
||||
|
||||
@ -526,7 +526,7 @@ Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
|
||||
driver = (struct hc_driver *)id->driver_data;
|
||||
|
||||
/* Prevent runtime suspending between USB-2 and USB-3 initialization */
|
||||
@@ -364,6 +834,16 @@ static void xhci_pci_remove(struct pci_d
|
||||
@@ -367,6 +837,16 @@ static void xhci_pci_remove(struct pci_d
|
||||
{
|
||||
struct xhci_hcd *xhci;
|
||||
|
||||
|
@ -578,7 +578,7 @@
|
||||
#include <net/if_inet6.h>
|
||||
--- a/include/net/inet_ecn.h
|
||||
+++ b/include/net/inet_ecn.h
|
||||
@@ -125,9 +125,9 @@ static inline int IP6_ECN_set_ce(struct
|
||||
@@ -126,9 +126,9 @@ static inline int IP6_ECN_set_ce(struct
|
||||
if (INET_ECN_is_not_ect(ipv6_get_dsfield(iph)))
|
||||
return 0;
|
||||
|
||||
@ -728,7 +728,7 @@
|
||||
EXPORT_SYMBOL(xfrm_parse_spi);
|
||||
--- a/net/ipv4/tcp_input.c
|
||||
+++ b/net/ipv4/tcp_input.c
|
||||
@@ -3906,14 +3906,16 @@ static bool tcp_parse_aligned_timestamp(
|
||||
@@ -3907,14 +3907,16 @@ static bool tcp_parse_aligned_timestamp(
|
||||
{
|
||||
const __be32 *ptr = (const __be32 *)(th + 1);
|
||||
|
||||
|
@ -67,7 +67,7 @@ Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
|
||||
+ bool rev = !skb->_nfct, upd = false;
|
||||
+ __be32 ip;
|
||||
|
||||
if (tc_skb_protocol(skb) != htons(ETH_P_IP))
|
||||
if (skb_protocol(skb, true) != htons(ETH_P_IP))
|
||||
- return;
|
||||
+ return false;
|
||||
|
||||
|
@ -51,7 +51,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||
.link_down = phylink_sfp_link_down,
|
||||
--- a/drivers/net/phy/sfp-bus.c
|
||||
+++ b/drivers/net/phy/sfp-bus.c
|
||||
@@ -350,7 +350,7 @@ static int sfp_register_bus(struct sfp_b
|
||||
@@ -425,7 +425,7 @@ static int sfp_register_bus(struct sfp_b
|
||||
bus->socket_ops->attach(bus->sfp);
|
||||
if (bus->started)
|
||||
bus->socket_ops->start(bus->sfp);
|
||||
@ -60,7 +60,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||
bus->registered = true;
|
||||
return 0;
|
||||
}
|
||||
@@ -359,8 +359,8 @@ static void sfp_unregister_bus(struct sf
|
||||
@@ -434,8 +434,8 @@ static void sfp_unregister_bus(struct sf
|
||||
{
|
||||
const struct sfp_upstream_ops *ops = bus->upstream_ops;
|
||||
|
||||
|
@ -30,7 +30,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||
|
||||
--- a/drivers/net/phy/sfp-bus.c
|
||||
+++ b/drivers/net/phy/sfp-bus.c
|
||||
@@ -23,7 +23,6 @@ struct sfp_bus {
|
||||
@@ -30,7 +30,6 @@ struct sfp_bus {
|
||||
|
||||
const struct sfp_upstream_ops *upstream_ops;
|
||||
void *upstream;
|
||||
@ -38,7 +38,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||
struct phy_device *phydev;
|
||||
|
||||
bool registered;
|
||||
@@ -442,13 +441,11 @@ static void sfp_upstream_clear(struct sf
|
||||
@@ -517,13 +516,11 @@ static void sfp_upstream_clear(struct sf
|
||||
{
|
||||
bus->upstream_ops = NULL;
|
||||
bus->upstream = NULL;
|
||||
@ -52,7 +52,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||
* @upstream: the upstream private data
|
||||
* @ops: the upstream's &struct sfp_upstream_ops
|
||||
*
|
||||
@@ -459,7 +456,7 @@ static void sfp_upstream_clear(struct sf
|
||||
@@ -534,7 +531,7 @@ static void sfp_upstream_clear(struct sf
|
||||
* On error, returns %NULL.
|
||||
*/
|
||||
struct sfp_bus *sfp_register_upstream(struct fwnode_handle *fwnode,
|
||||
@ -61,7 +61,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||
const struct sfp_upstream_ops *ops)
|
||||
{
|
||||
struct sfp_bus *bus = sfp_bus_get(fwnode);
|
||||
@@ -469,7 +466,6 @@ struct sfp_bus *sfp_register_upstream(st
|
||||
@@ -544,7 +541,6 @@ struct sfp_bus *sfp_register_upstream(st
|
||||
rtnl_lock();
|
||||
bus->upstream_ops = ops;
|
||||
bus->upstream = upstream;
|
||||
@ -69,7 +69,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||
|
||||
if (bus->sfp) {
|
||||
ret = sfp_register_bus(bus);
|
||||
@@ -591,7 +587,7 @@ struct sfp_bus *sfp_register_socket(stru
|
||||
@@ -670,7 +666,7 @@ struct sfp_bus *sfp_register_socket(stru
|
||||
bus->sfp = sfp;
|
||||
bus->socket_ops = ops;
|
||||
|
||||
@ -78,7 +78,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||
ret = sfp_register_bus(bus);
|
||||
if (ret)
|
||||
sfp_socket_clear(bus);
|
||||
@@ -611,7 +607,7 @@ EXPORT_SYMBOL_GPL(sfp_register_socket);
|
||||
@@ -690,7 +686,7 @@ EXPORT_SYMBOL_GPL(sfp_register_socket);
|
||||
void sfp_unregister_socket(struct sfp_bus *bus)
|
||||
{
|
||||
rtnl_lock();
|
||||
|
@ -59,7 +59,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||
#include <linux/rtnetlink.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
@@ -444,45 +445,63 @@ static void sfp_upstream_clear(struct sf
|
||||
@@ -519,45 +520,63 @@ static void sfp_upstream_clear(struct sf
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -53,7 +53,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||
|
||||
--- a/drivers/net/phy/sfp-bus.c
|
||||
+++ b/drivers/net/phy/sfp-bus.c
|
||||
@@ -328,10 +328,19 @@ static void sfp_bus_release(struct kref
|
||||
@@ -403,10 +403,19 @@ static void sfp_bus_release(struct kref
|
||||
kfree(bus);
|
||||
}
|
||||
|
||||
@ -75,7 +75,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||
|
||||
static int sfp_register_bus(struct sfp_bus *bus)
|
||||
{
|
||||
@@ -347,11 +356,11 @@ static int sfp_register_bus(struct sfp_b
|
||||
@@ -422,11 +431,11 @@ static int sfp_register_bus(struct sfp_b
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
@ -88,7 +88,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -445,13 +454,12 @@ static void sfp_upstream_clear(struct sf
|
||||
@@ -520,13 +529,12 @@ static void sfp_upstream_clear(struct sf
|
||||
}
|
||||
|
||||
/**
|
||||
@ -106,7 +106,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||
*
|
||||
* Returns: on success, a pointer to the sfp_bus structure,
|
||||
* %NULL if no SFP is specified,
|
||||
@@ -461,9 +469,7 @@ static void sfp_upstream_clear(struct sf
|
||||
@@ -536,9 +544,7 @@ static void sfp_upstream_clear(struct sf
|
||||
* %-ENOMEM if we failed to allocate the bus.
|
||||
* an error from the upstream's connect_phy() method.
|
||||
*/
|
||||
@ -117,7 +117,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||
{
|
||||
struct fwnode_reference_args ref;
|
||||
struct sfp_bus *bus;
|
||||
@@ -481,7 +487,39 @@ struct sfp_bus *sfp_register_upstream_no
|
||||
@@ -556,7 +562,39 @@ struct sfp_bus *sfp_register_upstream_no
|
||||
if (!bus)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
@ -157,7 +157,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||
bus->upstream_ops = ops;
|
||||
bus->upstream = upstream;
|
||||
|
||||
@@ -494,33 +532,33 @@ struct sfp_bus *sfp_register_upstream_no
|
||||
@@ -569,33 +607,33 @@ struct sfp_bus *sfp_register_upstream_no
|
||||
}
|
||||
rtnl_unlock();
|
||||
|
||||
|
@ -16,7 +16,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||
|
||||
--- a/drivers/net/phy/sfp-bus.c
|
||||
+++ b/drivers/net/phy/sfp-bus.c
|
||||
@@ -330,7 +330,7 @@ static void sfp_bus_release(struct kref
|
||||
@@ -405,7 +405,7 @@ static void sfp_bus_release(struct kref
|
||||
|
||||
/**
|
||||
* sfp_bus_put() - put a reference on the &struct sfp_bus
|
||||
|
@ -1,111 +0,0 @@
|
||||
From 8df5dd55cef48c0769379e04dbc085a899b106d4 Mon Sep 17 00:00:00 2001
|
||||
From: Russell King <rmk+kernel@armlinux.org.uk>
|
||||
Date: Fri, 8 Mar 2019 14:02:25 +0000
|
||||
Subject: [PATCH 640/660] net: sfp: add support for module quirks
|
||||
|
||||
Add support for applying module quirks to the list of supported
|
||||
ethtool link modes.
|
||||
|
||||
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||
---
|
||||
drivers/net/phy/sfp-bus.c | 54 +++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 54 insertions(+)
|
||||
|
||||
--- a/drivers/net/phy/sfp-bus.c
|
||||
+++ b/drivers/net/phy/sfp-bus.c
|
||||
@@ -9,6 +9,12 @@
|
||||
|
||||
#include "sfp.h"
|
||||
|
||||
+struct sfp_quirk {
|
||||
+ const char *vendor;
|
||||
+ const char *part;
|
||||
+ void (*modes)(const struct sfp_eeprom_id *id, unsigned long *modes);
|
||||
+};
|
||||
+
|
||||
/**
|
||||
* struct sfp_bus - internal representation of a sfp bus
|
||||
*/
|
||||
@@ -21,6 +27,7 @@ struct sfp_bus {
|
||||
const struct sfp_socket_ops *socket_ops;
|
||||
struct device *sfp_dev;
|
||||
struct sfp *sfp;
|
||||
+ const struct sfp_quirk *sfp_quirk;
|
||||
|
||||
const struct sfp_upstream_ops *upstream_ops;
|
||||
void *upstream;
|
||||
@@ -30,6 +37,46 @@ struct sfp_bus {
|
||||
bool started;
|
||||
};
|
||||
|
||||
+static const struct sfp_quirk sfp_quirks[] = {
|
||||
+};
|
||||
+
|
||||
+static size_t sfp_strlen(const char *str, size_t maxlen)
|
||||
+{
|
||||
+ size_t size, i;
|
||||
+
|
||||
+ /* Trailing characters should be filled with space chars */
|
||||
+ for (i = 0, size = 0; i < maxlen; i++)
|
||||
+ if (str[i] != ' ')
|
||||
+ size = i + 1;
|
||||
+
|
||||
+ return size;
|
||||
+}
|
||||
+
|
||||
+static bool sfp_match(const char *qs, const char *str, size_t len)
|
||||
+{
|
||||
+ if (!qs)
|
||||
+ return true;
|
||||
+ if (strlen(qs) != len)
|
||||
+ return false;
|
||||
+ return !strncmp(qs, str, len);
|
||||
+}
|
||||
+
|
||||
+static const struct sfp_quirk *sfp_lookup_quirk(const struct sfp_eeprom_id *id)
|
||||
+{
|
||||
+ const struct sfp_quirk *q;
|
||||
+ unsigned int i;
|
||||
+ size_t vs, ps;
|
||||
+
|
||||
+ vs = sfp_strlen(id->base.vendor_name, ARRAY_SIZE(id->base.vendor_name));
|
||||
+ ps = sfp_strlen(id->base.vendor_pn, ARRAY_SIZE(id->base.vendor_pn));
|
||||
+
|
||||
+ for (i = 0, q = sfp_quirks; i < ARRAY_SIZE(sfp_quirks); i++, q++)
|
||||
+ if (sfp_match(q->vendor, id->base.vendor_name, vs) &&
|
||||
+ sfp_match(q->part, id->base.vendor_pn, ps))
|
||||
+ return q;
|
||||
+
|
||||
+ return NULL;
|
||||
+}
|
||||
/**
|
||||
* sfp_parse_port() - Parse the EEPROM base ID, setting the port type
|
||||
* @bus: a pointer to the &struct sfp_bus structure for the sfp module
|
||||
@@ -233,6 +280,9 @@ void sfp_parse_support(struct sfp_bus *b
|
||||
phylink_set(modes, 1000baseX_Full);
|
||||
}
|
||||
|
||||
+ if (bus->sfp_quirk)
|
||||
+ bus->sfp_quirk->modes(id, modes);
|
||||
+
|
||||
bitmap_or(support, support, modes, __ETHTOOL_LINK_MODE_MASK_NBITS);
|
||||
|
||||
phylink_set(support, Autoneg);
|
||||
@@ -609,6 +659,8 @@ int sfp_module_insert(struct sfp_bus *bu
|
||||
const struct sfp_upstream_ops *ops = sfp_get_upstream_ops(bus);
|
||||
int ret = 0;
|
||||
|
||||
+ bus->sfp_quirk = sfp_lookup_quirk(id);
|
||||
+
|
||||
if (ops && ops->module_insert)
|
||||
ret = ops->module_insert(bus->upstream, id);
|
||||
|
||||
@@ -622,6 +674,8 @@ void sfp_module_remove(struct sfp_bus *b
|
||||
|
||||
if (ops && ops->module_remove)
|
||||
ops->module_remove(bus->upstream);
|
||||
+
|
||||
+ bus->sfp_quirk = NULL;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(sfp_module_remove);
|
||||
|
@ -1,52 +0,0 @@
|
||||
From ecaa542cfed078dbc356dadff0bad4b6a8e704a0 Mon Sep 17 00:00:00 2001
|
||||
From: Russell King <rmk+kernel@armlinux.org.uk>
|
||||
Date: Fri, 17 May 2019 10:14:45 +0100
|
||||
Subject: [PATCH 641/660] net: sfp: add some quirks for GPON modules
|
||||
|
||||
Marc Micalizzi reports that Huawei MA5671A and Alcatel/Lucent G-010S-P
|
||||
modules are capable of 2500base-X, but incorrectly report their
|
||||
capabilities in the EEPROM. It seems rather common that GPON modules
|
||||
mis-report.
|
||||
|
||||
Let's fix these modules by adding some quirks.
|
||||
|
||||
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||
---
|
||||
drivers/net/phy/sfp-bus.c | 25 +++++++++++++++++++++++++
|
||||
1 file changed, 25 insertions(+)
|
||||
|
||||
--- a/drivers/net/phy/sfp-bus.c
|
||||
+++ b/drivers/net/phy/sfp-bus.c
|
||||
@@ -37,7 +37,32 @@ struct sfp_bus {
|
||||
bool started;
|
||||
};
|
||||
|
||||
+static void sfp_quirk_2500basex(const struct sfp_eeprom_id *id,
|
||||
+ unsigned long *modes)
|
||||
+{
|
||||
+ phylink_set(modes, 2500baseX_Full);
|
||||
+}
|
||||
+
|
||||
static const struct sfp_quirk sfp_quirks[] = {
|
||||
+ {
|
||||
+ // Alcatel Lucent G-010S-P can operate at 2500base-X, but
|
||||
+ // incorrectly report 2500MBd NRZ in their EEPROM
|
||||
+ .vendor = "ALCATELLUCENT",
|
||||
+ .part = "G010SP",
|
||||
+ .modes = sfp_quirk_2500basex,
|
||||
+ }, {
|
||||
+ // Alcatel Lucent G-010S-A can operate at 2500base-X, but
|
||||
+ // report 3.2GBd NRZ in their EEPROM
|
||||
+ .vendor = "ALCATELLUCENT",
|
||||
+ .part = "3FE46541AA",
|
||||
+ .modes = sfp_quirk_2500basex,
|
||||
+ }, {
|
||||
+ // Huawei MA5671A can operate at 2500base-X, but report 1.2GBd
|
||||
+ // NRZ in their EEPROM
|
||||
+ .vendor = "HUAWEI",
|
||||
+ .part = "MA5671A",
|
||||
+ .modes = sfp_quirk_2500basex,
|
||||
+ },
|
||||
};
|
||||
|
||||
static size_t sfp_strlen(const char *str, size_t maxlen)
|
@ -114,7 +114,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
config MODULES_TREE_LOOKUP
|
||||
--- a/kernel/module.c
|
||||
+++ b/kernel/module.c
|
||||
@@ -3028,9 +3028,11 @@ static int setup_load_info(struct load_i
|
||||
@@ -3030,9 +3030,11 @@ static int setup_load_info(struct load_i
|
||||
|
||||
static int check_modinfo(struct module *mod, struct load_info *info, int flags)
|
||||
{
|
||||
@ -127,7 +127,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (flags & MODULE_INIT_IGNORE_VERMAGIC)
|
||||
modmagic = NULL;
|
||||
|
||||
@@ -3051,6 +3053,7 @@ static int check_modinfo(struct module *
|
||||
@@ -3053,6 +3055,7 @@ static int check_modinfo(struct module *
|
||||
mod->name);
|
||||
add_taint_module(mod, TAINT_OOT_MODULE, LOCKDEP_STILL_OK);
|
||||
}
|
||||
|
@ -30,7 +30,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
/* Align . to a 8 byte boundary equals to maximum function alignment. */
|
||||
#define ALIGN_FUNCTION() . = ALIGN(8)
|
||||
|
||||
@@ -372,14 +382,14 @@
|
||||
@@ -373,14 +383,14 @@
|
||||
/* Kernel symbol table: Normal symbols */ \
|
||||
__ksymtab : AT(ADDR(__ksymtab) - LOAD_OFFSET) { \
|
||||
__start___ksymtab = .; \
|
||||
@ -47,7 +47,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
__stop___ksymtab_gpl = .; \
|
||||
} \
|
||||
\
|
||||
@@ -441,7 +451,7 @@
|
||||
@@ -442,7 +452,7 @@
|
||||
\
|
||||
/* Kernel symbol table: strings */ \
|
||||
__ksymtab_strings : AT(ADDR(__ksymtab_strings) - LOAD_OFFSET) { \
|
||||
@ -56,7 +56,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
} \
|
||||
\
|
||||
/* __*init sections */ \
|
||||
@@ -841,6 +851,8 @@
|
||||
@@ -844,6 +854,8 @@
|
||||
EXIT_TEXT \
|
||||
EXIT_DATA \
|
||||
EXIT_CALL \
|
||||
|
@ -91,7 +91,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/of.h>
|
||||
@@ -3040,3 +3041,5 @@ static int __init regmap_initcall(void)
|
||||
@@ -3032,3 +3033,5 @@ static int __init regmap_initcall(void)
|
||||
return 0;
|
||||
}
|
||||
postcore_initcall(regmap_initcall);
|
||||
|
@ -98,7 +98,7 @@ Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
|
||||
bool rev = !skb->_nfct, upd = false;
|
||||
__be32 ip;
|
||||
|
||||
- if (tc_skb_protocol(skb) != htons(ETH_P_IP))
|
||||
- if (skb_protocol(skb, true) != htons(ETH_P_IP))
|
||||
+ if (cake_skb_proto(skb) != htons(ETH_P_IP))
|
||||
return false;
|
||||
|
||||
@ -107,7 +107,7 @@ Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
|
||||
u16 *buf, buf_;
|
||||
u8 dscp;
|
||||
|
||||
- switch (tc_skb_protocol(skb)) {
|
||||
- switch (skb_protocol(skb, true)) {
|
||||
+ switch (cake_skb_proto(skb)) {
|
||||
case htons(ETH_P_IP):
|
||||
buf = skb_header_pointer(skb, offset, sizeof(buf_), &buf_);
|
||||
|
@ -1,61 +0,0 @@
|
||||
From db4603e30effd74d4adb6bcdf73072b2c06fafcd Mon Sep 17 00:00:00 2001
|
||||
From: Hauke Mehrtens <hauke@hauke-m.de>
|
||||
Date: Fri, 3 Jul 2020 00:07:15 +0200
|
||||
Subject: [PATCH] MIPS: Add missing EHB in mtc0 -> mfc0 sequence for DSPen
|
||||
|
||||
This resolves the hazard between the mtc0 in the change_c0_status() and
|
||||
the mfc0 in configure_exception_vector(). Without resolving this hazard
|
||||
configure_exception_vector() could read an old value and would restore
|
||||
this old value again. This would revert the changes change_c0_status()
|
||||
did. I checked this by printing out the read_c0_status() at the end of
|
||||
per_cpu_trap_init() and the ST0_MX is not set without this patch.
|
||||
|
||||
The hazard is documented in the MIPS Architecture Reference Manual Vol.
|
||||
III: MIPS32/microMIPS32 Privileged Resource Architecture (MD00088), rev
|
||||
6.03 table 8.1 which includes:
|
||||
|
||||
Producer | Consumer | Hazard
|
||||
----------|----------|----------------------------
|
||||
mtc0 | mfc0 | any coprocessor 0 register
|
||||
|
||||
I saw this hazard on an Atheros AR9344 rev 2 SoC with a MIPS 74Kc CPU.
|
||||
There the change_c0_status() function would activate the DSPen by
|
||||
setting ST0_MX in the c0_status register. This was reverted and then the
|
||||
system got a DSP exception when the DSP registers were saved in
|
||||
save_dsp() in the first process switch. The crash looks like this:
|
||||
|
||||
[ 0.089999] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
|
||||
[ 0.097796] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
|
||||
[ 0.107070] Kernel panic - not syncing: Unexpected DSP exception
|
||||
[ 0.113470] Rebooting in 1 seconds..
|
||||
|
||||
We saw this problem in OpenWrt only on the MIPS 74Kc based Atheros SoCs,
|
||||
not on the 24Kc based SoCs. We only saw it with kernel 5.4 not with
|
||||
kernel 4.19, in addition we had to use GCC 8.4 or 9.X, with GCC 8.3 it
|
||||
did not happen.
|
||||
|
||||
In the kernel I bisected this problem to commit 9012d011660e ("compiler:
|
||||
allow all arches to enable CONFIG_OPTIMIZE_INLINING"), but when this was
|
||||
reverted it also happened after commit 172dcd935c34b ("MIPS: Always
|
||||
allocate exception vector for MIPSr2+").
|
||||
|
||||
Commit 0b24cae4d535 ("MIPS: Add missing EHB in mtc0 -> mfc0 sequence.")
|
||||
does similar changes to a different file. I am not sure if there are
|
||||
more places affected by this problem.
|
||||
|
||||
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||
Cc: <stable@vger.kernel.org>
|
||||
---
|
||||
arch/mips/kernel/traps.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
--- a/arch/mips/kernel/traps.c
|
||||
+++ b/arch/mips/kernel/traps.c
|
||||
@@ -2096,6 +2096,7 @@ static void configure_status(void)
|
||||
|
||||
change_c0_status(ST0_CU|ST0_MX|ST0_RE|ST0_FR|ST0_BEV|ST0_TS|ST0_KX|ST0_SX|ST0_UX,
|
||||
status_set);
|
||||
+ back_to_back_c0_hazard();
|
||||
}
|
||||
|
||||
unsigned int hwrena;
|
@ -33,7 +33,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||
/*
|
||||
* The Mellanox Tavor device gives false positive parity errors. Mark this
|
||||
* device with a broken_parity_status to allow PCI scanning code to "skip"
|
||||
@@ -3213,6 +3214,8 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_I
|
||||
@@ -3226,6 +3227,8 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_I
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65f9, quirk_intel_mc_errata);
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65fa, quirk_intel_mc_errata);
|
||||
|
||||
@ -42,7 +42,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||
/*
|
||||
* Ivytown NTB BAR sizes are misreported by the hardware due to an erratum.
|
||||
* To work around this, query the size it should be configured to by the
|
||||
@@ -3238,6 +3241,8 @@ static void quirk_intel_ntb(struct pci_d
|
||||
@@ -3251,6 +3254,8 @@ static void quirk_intel_ntb(struct pci_d
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x0e08, quirk_intel_ntb);
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x0e0d, quirk_intel_ntb);
|
||||
|
||||
@ -51,7 +51,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||
/*
|
||||
* Some BIOS implementations leave the Intel GPU interrupts enabled, even
|
||||
* though no one is handling them (e.g., if the i915 driver is never
|
||||
@@ -3276,6 +3281,8 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_IN
|
||||
@@ -3289,6 +3294,8 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_IN
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x010a, disable_igfx_irq);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0152, disable_igfx_irq);
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
--- a/arch/arm/mach-mvebu/Kconfig
|
||||
+++ b/arch/arm/mach-mvebu/Kconfig
|
||||
@@ -68,6 +68,7 @@
|
||||
@@ -68,6 +68,7 @@ config MACH_ARMADA_38X
|
||||
select HAVE_SMP
|
||||
select MACH_MVEBU_V7
|
||||
select PINCTRL_ARMADA_38X
|
||||
|
Loading…
Reference in New Issue
Block a user