mirror of https://github.com/hak5/openwrt.git
kernel: bump 4.19 to 4.19.16
Refresh patches. Remove upstreamed patches: - backport/096-mips-math-emu-Write-protect-delay-slot-emulation-pages.patch - backport/096-v4.20-netfilter-ipv6-Preserve-link-scope-traffic-original-.patch - backport/424-v4.20-net-dsa-fix-88e6060-roaming.patch - hack/100-mtd-rawnand-qcom-fix-memory-corruption-that-causes-p.patch - pending/510-f2fs-fix-sanity_check_raw_super-on-big-endian-machines.patch Update patch that no longer applies: - backport/343-netfilter-nft_flow_offload-handle-netdevice-events-f.patch Compile-tested: mesongx Runtime-tested: mesongx Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>openwrt-19.07
parent
76cc766521
commit
a37098a2d0
|
@ -5,12 +5,12 @@ LINUX_RELEASE?=1
|
||||||
LINUX_VERSION-3.18 = .132
|
LINUX_VERSION-3.18 = .132
|
||||||
LINUX_VERSION-4.9 = .150
|
LINUX_VERSION-4.9 = .150
|
||||||
LINUX_VERSION-4.14 = .93
|
LINUX_VERSION-4.14 = .93
|
||||||
LINUX_VERSION-4.19 = .9
|
LINUX_VERSION-4.19 = .16
|
||||||
|
|
||||||
LINUX_KERNEL_HASH-3.18.132 = c187bd0322372bd34c862cbb06a1996a63524ccb401466362b57ede45901a879
|
LINUX_KERNEL_HASH-3.18.132 = c187bd0322372bd34c862cbb06a1996a63524ccb401466362b57ede45901a879
|
||||||
LINUX_KERNEL_HASH-4.9.150 = 94cc177ba2b433e4e30fefef38de33248ba1e2499ebda905096a8822097117e4
|
LINUX_KERNEL_HASH-4.9.150 = 94cc177ba2b433e4e30fefef38de33248ba1e2499ebda905096a8822097117e4
|
||||||
LINUX_KERNEL_HASH-4.14.93 = bb125fb204f7089782e179126121dd0f0aad9f02b7517ce3744982254c221bad
|
LINUX_KERNEL_HASH-4.14.93 = bb125fb204f7089782e179126121dd0f0aad9f02b7517ce3744982254c221bad
|
||||||
LINUX_KERNEL_HASH-4.19.9 = fc116cc6829c73944215d3b3ac0fc368dde9e8235b456744afffde001269dbf2
|
LINUX_KERNEL_HASH-4.19.16 = d8a088381fe3e7e5484c060dabcdda4b053ef7114f91cfd56db003a89bb11bdf
|
||||||
|
|
||||||
remove_uri_prefix=$(subst git://,,$(subst http://,,$(subst https://,,$(1))))
|
remove_uri_prefix=$(subst git://,,$(subst http://,,$(subst https://,,$(1))))
|
||||||
sanitize_uri=$(call qstrip,$(subst @,_,$(subst :,_,$(subst .,_,$(subst -,_,$(subst /,_,$(1)))))))
|
sanitize_uri=$(call qstrip,$(subst @,_,$(subst :,_,$(subst .,_,$(subst -,_,$(subst /,_,$(1)))))))
|
||||||
|
|
|
@ -55,11 +55,9 @@ Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
|
||||||
Signed-off-by: Vinod Koul <vkoul@kernel.org>
|
Signed-off-by: Vinod Koul <vkoul@kernel.org>
|
||||||
---
|
---
|
||||||
|
|
||||||
diff --git a/drivers/dma/dw/core.c b/drivers/dma/dw/core.c
|
|
||||||
index d0c3e50b39fb..2c5ca1961256 100644
|
|
||||||
--- a/drivers/dma/dw/core.c
|
--- a/drivers/dma/dw/core.c
|
||||||
+++ b/drivers/dma/dw/core.c
|
+++ b/drivers/dma/dw/core.c
|
||||||
@@ -160,12 +160,14 @@ static void dwc_initialize_chan_idma32(struct dw_dma_chan *dwc)
|
@@ -160,12 +160,14 @@ static void dwc_initialize_chan_idma32(s
|
||||||
|
|
||||||
static void dwc_initialize_chan_dw(struct dw_dma_chan *dwc)
|
static void dwc_initialize_chan_dw(struct dw_dma_chan *dwc)
|
||||||
{
|
{
|
||||||
|
@ -74,11 +72,9 @@ index d0c3e50b39fb..2c5ca1961256 100644
|
||||||
|
|
||||||
/* Set polarity of handshake interface */
|
/* Set polarity of handshake interface */
|
||||||
cfglo |= hs_polarity ? DWC_CFGL_HS_DST_POL | DWC_CFGL_HS_SRC_POL : 0;
|
cfglo |= hs_polarity ? DWC_CFGL_HS_DST_POL | DWC_CFGL_HS_SRC_POL : 0;
|
||||||
diff --git a/drivers/dma/dw/platform.c b/drivers/dma/dw/platform.c
|
|
||||||
index f01b2c173fa6..31ff8113c3de 100644
|
|
||||||
--- a/drivers/dma/dw/platform.c
|
--- a/drivers/dma/dw/platform.c
|
||||||
+++ b/drivers/dma/dw/platform.c
|
+++ b/drivers/dma/dw/platform.c
|
||||||
@@ -162,6 +162,12 @@ dw_dma_parse_dt(struct platform_device *pdev)
|
@@ -162,6 +162,12 @@ dw_dma_parse_dt(struct platform_device *
|
||||||
pdata->multi_block[tmp] = 1;
|
pdata->multi_block[tmp] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,8 +87,6 @@ index f01b2c173fa6..31ff8113c3de 100644
|
||||||
return pdata;
|
return pdata;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
diff --git a/drivers/dma/dw/regs.h b/drivers/dma/dw/regs.h
|
|
||||||
index 09e7dfdbb790..646c9c960c07 100644
|
|
||||||
--- a/drivers/dma/dw/regs.h
|
--- a/drivers/dma/dw/regs.h
|
||||||
+++ b/drivers/dma/dw/regs.h
|
+++ b/drivers/dma/dw/regs.h
|
||||||
@@ -200,6 +200,10 @@ enum dw_dma_msize {
|
@@ -200,6 +200,10 @@ enum dw_dma_msize {
|
||||||
|
@ -106,11 +100,9 @@ index 09e7dfdbb790..646c9c960c07 100644
|
||||||
#define DWC_CFGH_DS_UPD_EN (1 << 5)
|
#define DWC_CFGH_DS_UPD_EN (1 << 5)
|
||||||
#define DWC_CFGH_SS_UPD_EN (1 << 6)
|
#define DWC_CFGH_SS_UPD_EN (1 << 6)
|
||||||
#define DWC_CFGH_SRC_PER(x) ((x) << 7)
|
#define DWC_CFGH_SRC_PER(x) ((x) << 7)
|
||||||
diff --git a/include/linux/platform_data/dma-dw.h b/include/linux/platform_data/dma-dw.h
|
|
||||||
index 896cb71a382c..1a1d58ebffbf 100644
|
|
||||||
--- a/include/linux/platform_data/dma-dw.h
|
--- a/include/linux/platform_data/dma-dw.h
|
||||||
+++ b/include/linux/platform_data/dma-dw.h
|
+++ b/include/linux/platform_data/dma-dw.h
|
||||||
@@ -49,6 +49,7 @@ struct dw_dma_slave {
|
@@ -49,6 +49,7 @@ struct dw_dma_slave {
|
||||||
* @data_width: Maximum data width supported by hardware per AHB master
|
* @data_width: Maximum data width supported by hardware per AHB master
|
||||||
* (in bytes, power of 2)
|
* (in bytes, power of 2)
|
||||||
* @multi_block: Multi block transfers supported by hardware per channel.
|
* @multi_block: Multi block transfers supported by hardware per channel.
|
||||||
|
@ -118,7 +110,7 @@ index 896cb71a382c..1a1d58ebffbf 100644
|
||||||
*/
|
*/
|
||||||
struct dw_dma_platform_data {
|
struct dw_dma_platform_data {
|
||||||
unsigned int nr_channels;
|
unsigned int nr_channels;
|
||||||
@@ -65,6 +66,11 @@ struct dw_dma_platform_data {
|
@@ -65,6 +66,11 @@ struct dw_dma_platform_data {
|
||||||
unsigned char nr_masters;
|
unsigned char nr_masters;
|
||||||
unsigned char data_width[DW_DMA_MAX_NR_MASTERS];
|
unsigned char data_width[DW_DMA_MAX_NR_MASTERS];
|
||||||
unsigned char multi_block[DW_DMA_MAX_NR_CHANNELS];
|
unsigned char multi_block[DW_DMA_MAX_NR_CHANNELS];
|
||||||
|
@ -130,9 +122,6 @@ index 896cb71a382c..1a1d58ebffbf 100644
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* _PLATFORM_DATA_DMA_DW_H */
|
#endif /* _PLATFORM_DATA_DMA_DW_H */
|
||||||
diff --git a/include/dt-bindings/dma/dw-dmac.h b/include/dt-bindings/dma/dw-dmac.h
|
|
||||||
new file mode 100644
|
|
||||||
index 000000000000..d1ca705c95b3
|
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/include/dt-bindings/dma/dw-dmac.h
|
+++ b/include/dt-bindings/dma/dw-dmac.h
|
||||||
@@ -0,0 +1,14 @@
|
@@ -0,0 +1,14 @@
|
||||||
|
@ -150,6 +139,3 @@ index 000000000000..d1ca705c95b3
|
||||||
+#define DW_DMAC_HPROT3_CACHEABLE (1 << 2) /* DMA is cacheable */
|
+#define DW_DMAC_HPROT3_CACHEABLE (1 << 2) /* DMA is cacheable */
|
||||||
+
|
+
|
||||||
+#endif /* __DT_BINDINGS_DMA_DW_DMAC_H__ */
|
+#endif /* __DT_BINDINGS_DMA_DW_DMAC_H__ */
|
||||||
--
|
|
||||||
cgit 1.2-0.3.lf.el7
|
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/arch/powerpc/platforms/44x/Kconfig
|
--- a/arch/powerpc/platforms/44x/Kconfig
|
||||||
+++ b/arch/powerpc/platforms/44x/Kconfig
|
+++ b/arch/powerpc/platforms/44x/Kconfig
|
||||||
@@ -144,6 +144,17 @@ config CANYONLANDS
|
@@ -131,6 +131,17 @@ config CANYONLANDS
|
||||||
help
|
help
|
||||||
This option enables support for the AMCC PPC460EX evaluation board.
|
This option enables support for the AMCC PPC460EX evaluation board.
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
obj-$(CONFIG_WARP) += warp.o
|
obj-$(CONFIG_WARP) += warp.o
|
||||||
--- a/arch/powerpc/platforms/44x/Kconfig
|
--- a/arch/powerpc/platforms/44x/Kconfig
|
||||||
+++ b/arch/powerpc/platforms/44x/Kconfig
|
+++ b/arch/powerpc/platforms/44x/Kconfig
|
||||||
@@ -273,6 +273,19 @@ config ICON
|
@@ -260,6 +260,19 @@ config ICON
|
||||||
help
|
help
|
||||||
This option enables support for the AMCC PPC440SPe evaluation board.
|
This option enables support for the AMCC PPC440SPe evaluation board.
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,7 @@ Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
|
||||||
|
|
||||||
#include "xhci.h"
|
#include "xhci.h"
|
||||||
#include "xhci-trace.h"
|
#include "xhci-trace.h"
|
||||||
@@ -248,6 +250,458 @@ static void xhci_pme_acpi_rtd3_enable(st
|
@@ -261,6 +263,458 @@ static void xhci_pme_acpi_rtd3_enable(st
|
||||||
static void xhci_pme_acpi_rtd3_enable(struct pci_dev *dev) { }
|
static void xhci_pme_acpi_rtd3_enable(struct pci_dev *dev) { }
|
||||||
#endif /* CONFIG_ACPI */
|
#endif /* CONFIG_ACPI */
|
||||||
|
|
||||||
|
@ -503,7 +503,7 @@ Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
|
||||||
/* called during probe() after chip reset completes */
|
/* called during probe() after chip reset completes */
|
||||||
static int xhci_pci_setup(struct usb_hcd *hcd)
|
static int xhci_pci_setup(struct usb_hcd *hcd)
|
||||||
{
|
{
|
||||||
@@ -286,6 +740,22 @@ static int xhci_pci_probe(struct pci_dev
|
@@ -299,6 +753,22 @@ static int xhci_pci_probe(struct pci_dev
|
||||||
struct hc_driver *driver;
|
struct hc_driver *driver;
|
||||||
struct usb_hcd *hcd;
|
struct usb_hcd *hcd;
|
||||||
|
|
||||||
|
@ -526,7 +526,7 @@ Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
|
||||||
driver = (struct hc_driver *)id->driver_data;
|
driver = (struct hc_driver *)id->driver_data;
|
||||||
|
|
||||||
/* Prevent runtime suspending between USB-2 and USB-3 initialization */
|
/* Prevent runtime suspending between USB-2 and USB-3 initialization */
|
||||||
@@ -347,6 +817,16 @@ static void xhci_pci_remove(struct pci_d
|
@@ -360,6 +830,16 @@ static void xhci_pci_remove(struct pci_d
|
||||||
{
|
{
|
||||||
struct xhci_hcd *xhci;
|
struct xhci_hcd *xhci;
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@ produce a noisy warning.
|
||||||
|
|
||||||
--- a/drivers/usb/host/xhci-pci.c
|
--- a/drivers/usb/host/xhci-pci.c
|
||||||
+++ b/drivers/usb/host/xhci-pci.c
|
+++ b/drivers/usb/host/xhci-pci.c
|
||||||
@@ -206,6 +206,7 @@ static void xhci_pci_quirks(struct devic
|
@@ -214,6 +214,7 @@ static void xhci_pci_quirks(struct devic
|
||||||
pdev->device == 0x0015) {
|
pdev->device == 0x0015) {
|
||||||
xhci->quirks |= XHCI_RESET_ON_RESUME;
|
xhci->quirks |= XHCI_RESET_ON_RESUME;
|
||||||
xhci->quirks |= XHCI_ZERO_64B_REGS;
|
xhci->quirks |= XHCI_ZERO_64B_REGS;
|
||||||
|
@ -43,11 +43,11 @@ produce a noisy warning.
|
||||||
hcd->msi_enabled = 1;
|
hcd->msi_enabled = 1;
|
||||||
--- a/drivers/usb/host/xhci.h
|
--- a/drivers/usb/host/xhci.h
|
||||||
+++ b/drivers/usb/host/xhci.h
|
+++ b/drivers/usb/host/xhci.h
|
||||||
@@ -1857,6 +1857,7 @@ struct xhci_hcd {
|
@@ -1859,6 +1859,7 @@ struct xhci_hcd {
|
||||||
/* support xHCI 0.96 spec USB2 software LPM */
|
/* support xHCI 0.96 spec USB2 software LPM */
|
||||||
unsigned sw_lpm_support:1;
|
unsigned sw_lpm_support:1;
|
||||||
/* support xHCI 1.0 spec USB2 hardware LPM */
|
/* support xHCI 1.0 spec USB2 hardware LPM */
|
||||||
+#define XHCI_FORCE_MSI (1 << 24)
|
+#define XHCI_FORCE_MSI (1 << 24)
|
||||||
unsigned hw_lpm_support:1;
|
unsigned hw_lpm_support:1;
|
||||||
/* cached usb2 extened protocol capabilites */
|
/* Broken Suspend flag for SNPS Suspend resume issue */
|
||||||
u32 *ext_caps;
|
unsigned broken_suspend:1;
|
||||||
|
|
|
@ -13,7 +13,7 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
|
||||||
|
|
||||||
--- a/drivers/mtd/spi-nor/spi-nor.c
|
--- a/drivers/mtd/spi-nor/spi-nor.c
|
||||||
+++ b/drivers/mtd/spi-nor/spi-nor.c
|
+++ b/drivers/mtd/spi-nor/spi-nor.c
|
||||||
@@ -1294,6 +1294,18 @@ static const struct flash_info *spi_nor_
|
@@ -1295,6 +1295,18 @@ static const struct flash_info *spi_nor_
|
||||||
}
|
}
|
||||||
dev_err(nor->dev, "unrecognized JEDEC id bytes: %02x, %02x, %02x\n",
|
dev_err(nor->dev, "unrecognized JEDEC id bytes: %02x, %02x, %02x\n",
|
||||||
id[0], id[1], id[2]);
|
id[0], id[1], id[2]);
|
||||||
|
|
|
@ -21,7 +21,7 @@ Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||||
clocks {
|
clocks {
|
||||||
--- a/drivers/bcma/main.c
|
--- a/drivers/bcma/main.c
|
||||||
+++ b/drivers/bcma/main.c
|
+++ b/drivers/bcma/main.c
|
||||||
@@ -348,14 +348,6 @@ static int bcma_register_devices(struct
|
@@ -330,14 +330,6 @@ static int bcma_register_devices(struct
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||||
#ifdef CONFIG_BCMA_NFLASH
|
#ifdef CONFIG_BCMA_NFLASH
|
||||||
if (bus->drv_cc.nflash.present) {
|
if (bus->drv_cc.nflash.present) {
|
||||||
err = platform_device_register(&bcma_nflash_dev);
|
err = platform_device_register(&bcma_nflash_dev);
|
||||||
@@ -436,6 +428,14 @@ int bcma_bus_register(struct bcma_bus *b
|
@@ -415,6 +407,14 @@ int bcma_bus_register(struct bcma_bus *b
|
||||||
bcma_register_core(bus, core);
|
bcma_register_core(bus, core);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/arch/mips/include/asm/r4kcache.h
|
--- a/arch/mips/include/asm/r4kcache.h
|
||||||
+++ b/arch/mips/include/asm/r4kcache.h
|
+++ b/arch/mips/include/asm/r4kcache.h
|
||||||
@@ -25,6 +25,38 @@
|
@@ -26,6 +26,38 @@
|
||||||
extern void (*r4k_blast_dcache)(void);
|
extern void (*r4k_blast_dcache)(void);
|
||||||
extern void (*r4k_blast_icache)(void);
|
extern void (*r4k_blast_icache)(void);
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@
|
||||||
/*
|
/*
|
||||||
* This macro return a properly sign-extended address suitable as base address
|
* This macro return a properly sign-extended address suitable as base address
|
||||||
* for indexed cache operations. Two issues here:
|
* for indexed cache operations. Two issues here:
|
||||||
@@ -98,6 +130,7 @@ static inline void flush_icache_line_ind
|
@@ -99,6 +131,7 @@ static inline void flush_icache_line_ind
|
||||||
static inline void flush_dcache_line_indexed(unsigned long addr)
|
static inline void flush_dcache_line_indexed(unsigned long addr)
|
||||||
{
|
{
|
||||||
__dflush_prologue
|
__dflush_prologue
|
||||||
|
@ -47,7 +47,7 @@
|
||||||
cache_op(Index_Writeback_Inv_D, addr);
|
cache_op(Index_Writeback_Inv_D, addr);
|
||||||
__dflush_epilogue
|
__dflush_epilogue
|
||||||
}
|
}
|
||||||
@@ -125,6 +158,7 @@ static inline void flush_icache_line(uns
|
@@ -126,6 +159,7 @@ static inline void flush_icache_line(uns
|
||||||
static inline void flush_dcache_line(unsigned long addr)
|
static inline void flush_dcache_line(unsigned long addr)
|
||||||
{
|
{
|
||||||
__dflush_prologue
|
__dflush_prologue
|
||||||
|
@ -55,7 +55,7 @@
|
||||||
cache_op(Hit_Writeback_Inv_D, addr);
|
cache_op(Hit_Writeback_Inv_D, addr);
|
||||||
__dflush_epilogue
|
__dflush_epilogue
|
||||||
}
|
}
|
||||||
@@ -132,6 +166,7 @@ static inline void flush_dcache_line(uns
|
@@ -133,6 +167,7 @@ static inline void flush_dcache_line(uns
|
||||||
static inline void invalidate_dcache_line(unsigned long addr)
|
static inline void invalidate_dcache_line(unsigned long addr)
|
||||||
{
|
{
|
||||||
__dflush_prologue
|
__dflush_prologue
|
||||||
|
@ -63,7 +63,7 @@
|
||||||
cache_op(Hit_Invalidate_D, addr);
|
cache_op(Hit_Invalidate_D, addr);
|
||||||
__dflush_epilogue
|
__dflush_epilogue
|
||||||
}
|
}
|
||||||
@@ -205,6 +240,7 @@ static inline int protected_flush_icache
|
@@ -206,6 +241,7 @@ static inline int protected_flush_icache
|
||||||
#ifdef CONFIG_EVA
|
#ifdef CONFIG_EVA
|
||||||
return protected_cachee_op(Hit_Invalidate_I, addr);
|
return protected_cachee_op(Hit_Invalidate_I, addr);
|
||||||
#else
|
#else
|
||||||
|
@ -71,7 +71,7 @@
|
||||||
return protected_cache_op(Hit_Invalidate_I, addr);
|
return protected_cache_op(Hit_Invalidate_I, addr);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -218,6 +254,7 @@ static inline int protected_flush_icache
|
@@ -219,6 +255,7 @@ static inline int protected_flush_icache
|
||||||
*/
|
*/
|
||||||
static inline int protected_writeback_dcache_line(unsigned long addr)
|
static inline int protected_writeback_dcache_line(unsigned long addr)
|
||||||
{
|
{
|
||||||
|
@ -79,7 +79,7 @@
|
||||||
#ifdef CONFIG_EVA
|
#ifdef CONFIG_EVA
|
||||||
return protected_cachee_op(Hit_Writeback_Inv_D, addr);
|
return protected_cachee_op(Hit_Writeback_Inv_D, addr);
|
||||||
#else
|
#else
|
||||||
@@ -575,8 +612,51 @@ static inline void invalidate_tcache_pag
|
@@ -576,8 +613,51 @@ static inline void invalidate_tcache_pag
|
||||||
: "r" (base), \
|
: "r" (base), \
|
||||||
"i" (op));
|
"i" (op));
|
||||||
|
|
||||||
|
@ -132,7 +132,7 @@
|
||||||
static inline void extra##blast_##pfx##cache##lsize(void) \
|
static inline void extra##blast_##pfx##cache##lsize(void) \
|
||||||
{ \
|
{ \
|
||||||
unsigned long start = INDEX_BASE; \
|
unsigned long start = INDEX_BASE; \
|
||||||
@@ -588,6 +668,7 @@ static inline void extra##blast_##pfx##c
|
@@ -589,6 +669,7 @@ static inline void extra##blast_##pfx##c
|
||||||
\
|
\
|
||||||
__##pfx##flush_prologue \
|
__##pfx##flush_prologue \
|
||||||
\
|
\
|
||||||
|
@ -140,7 +140,7 @@
|
||||||
for (ws = 0; ws < ws_end; ws += ws_inc) \
|
for (ws = 0; ws < ws_end; ws += ws_inc) \
|
||||||
for (addr = start; addr < end; addr += lsize * 32) \
|
for (addr = start; addr < end; addr += lsize * 32) \
|
||||||
cache##lsize##_unroll32(addr|ws, indexop); \
|
cache##lsize##_unroll32(addr|ws, indexop); \
|
||||||
@@ -602,6 +683,7 @@ static inline void extra##blast_##pfx##c
|
@@ -603,6 +684,7 @@ static inline void extra##blast_##pfx##c
|
||||||
\
|
\
|
||||||
__##pfx##flush_prologue \
|
__##pfx##flush_prologue \
|
||||||
\
|
\
|
||||||
|
@ -148,7 +148,7 @@
|
||||||
do { \
|
do { \
|
||||||
cache##lsize##_unroll32(start, hitop); \
|
cache##lsize##_unroll32(start, hitop); \
|
||||||
start += lsize * 32; \
|
start += lsize * 32; \
|
||||||
@@ -620,6 +702,8 @@ static inline void extra##blast_##pfx##c
|
@@ -621,6 +703,8 @@ static inline void extra##blast_##pfx##c
|
||||||
current_cpu_data.desc.waybit; \
|
current_cpu_data.desc.waybit; \
|
||||||
unsigned long ws, addr; \
|
unsigned long ws, addr; \
|
||||||
\
|
\
|
||||||
|
@ -157,7 +157,7 @@
|
||||||
__##pfx##flush_prologue \
|
__##pfx##flush_prologue \
|
||||||
\
|
\
|
||||||
for (ws = 0; ws < ws_end; ws += ws_inc) \
|
for (ws = 0; ws < ws_end; ws += ws_inc) \
|
||||||
@@ -629,26 +713,26 @@ static inline void extra##blast_##pfx##c
|
@@ -630,26 +714,26 @@ static inline void extra##blast_##pfx##c
|
||||||
__##pfx##flush_epilogue \
|
__##pfx##flush_epilogue \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -204,7 +204,7 @@
|
||||||
|
|
||||||
#define __BUILD_BLAST_USER_CACHE(pfx, desc, indexop, hitop, lsize) \
|
#define __BUILD_BLAST_USER_CACHE(pfx, desc, indexop, hitop, lsize) \
|
||||||
static inline void blast_##pfx##cache##lsize##_user_page(unsigned long page) \
|
static inline void blast_##pfx##cache##lsize##_user_page(unsigned long page) \
|
||||||
@@ -677,53 +761,23 @@ __BUILD_BLAST_USER_CACHE(d, dcache, Inde
|
@@ -678,53 +762,23 @@ __BUILD_BLAST_USER_CACHE(d, dcache, Inde
|
||||||
__BUILD_BLAST_USER_CACHE(i, icache, Index_Invalidate_I, Hit_Invalidate_I, 64)
|
__BUILD_BLAST_USER_CACHE(i, icache, Index_Invalidate_I, Hit_Invalidate_I, 64)
|
||||||
|
|
||||||
/* build blast_xxx_range, protected_blast_xxx_range */
|
/* build blast_xxx_range, protected_blast_xxx_range */
|
||||||
|
@ -266,7 +266,7 @@
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
__##pfx##flush_epilogue \
|
__##pfx##flush_epilogue \
|
||||||
@@ -731,8 +785,8 @@ static inline void prot##extra##blast_##
|
@@ -732,8 +786,8 @@ static inline void prot##extra##blast_##
|
||||||
|
|
||||||
#ifndef CONFIG_EVA
|
#ifndef CONFIG_EVA
|
||||||
|
|
||||||
|
@ -277,7 +277,7 @@
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
@@ -769,14 +823,14 @@ __BUILD_PROT_BLAST_CACHE_RANGE(d, dcache
|
@@ -770,15 +824,15 @@ __BUILD_PROT_BLAST_CACHE_RANGE(d, dcache
|
||||||
__BUILD_PROT_BLAST_CACHE_RANGE(i, icache, Hit_Invalidate_I)
|
__BUILD_PROT_BLAST_CACHE_RANGE(i, icache, Hit_Invalidate_I)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -298,7 +298,8 @@
|
||||||
+__BUILD_BLAST_CACHE_RANGE(inv_d, dcache, Hit_Invalidate_D, , , , BCM4710_DUMMY_RREG();)
|
+__BUILD_BLAST_CACHE_RANGE(inv_d, dcache, Hit_Invalidate_D, , , , BCM4710_DUMMY_RREG();)
|
||||||
+__BUILD_BLAST_CACHE_RANGE(inv_s, scache, Hit_Invalidate_SD, , , , )
|
+__BUILD_BLAST_CACHE_RANGE(inv_s, scache, Hit_Invalidate_SD, , , , )
|
||||||
|
|
||||||
#endif /* _ASM_R4KCACHE_H */
|
/* Currently, this is very specific to Loongson-3 */
|
||||||
|
#define __BUILD_BLAST_CACHE_NODE(pfx, desc, indexop, hitop, lsize) \
|
||||||
--- a/arch/mips/include/asm/stackframe.h
|
--- a/arch/mips/include/asm/stackframe.h
|
||||||
+++ b/arch/mips/include/asm/stackframe.h
|
+++ b/arch/mips/include/asm/stackframe.h
|
||||||
@@ -428,6 +428,10 @@
|
@@ -428,6 +428,10 @@
|
||||||
|
@ -396,7 +397,7 @@
|
||||||
if (dc_lsize == 0)
|
if (dc_lsize == 0)
|
||||||
r4k_blast_dcache = (void *)cache_noop;
|
r4k_blast_dcache = (void *)cache_noop;
|
||||||
else if (dc_lsize == 16)
|
else if (dc_lsize == 16)
|
||||||
@@ -957,6 +969,8 @@ static void local_r4k_flush_cache_sigtra
|
@@ -986,6 +998,8 @@ static void local_r4k_flush_cache_sigtra
|
||||||
}
|
}
|
||||||
|
|
||||||
R4600_HIT_CACHEOP_WAR_IMPL;
|
R4600_HIT_CACHEOP_WAR_IMPL;
|
||||||
|
@ -405,7 +406,7 @@
|
||||||
if (!cpu_has_ic_fills_f_dc) {
|
if (!cpu_has_ic_fills_f_dc) {
|
||||||
if (dc_lsize)
|
if (dc_lsize)
|
||||||
vaddr ? flush_dcache_line(addr & ~(dc_lsize - 1))
|
vaddr ? flush_dcache_line(addr & ~(dc_lsize - 1))
|
||||||
@@ -1859,6 +1873,17 @@ static void coherency_setup(void)
|
@@ -1888,6 +1902,17 @@ static void coherency_setup(void)
|
||||||
* silly idea of putting something else there ...
|
* silly idea of putting something else there ...
|
||||||
*/
|
*/
|
||||||
switch (current_cpu_type()) {
|
switch (current_cpu_type()) {
|
||||||
|
@ -423,7 +424,7 @@
|
||||||
case CPU_R4000PC:
|
case CPU_R4000PC:
|
||||||
case CPU_R4000SC:
|
case CPU_R4000SC:
|
||||||
case CPU_R4000MC:
|
case CPU_R4000MC:
|
||||||
@@ -1905,6 +1930,15 @@ void r4k_cache_init(void)
|
@@ -1934,6 +1959,15 @@ void r4k_cache_init(void)
|
||||||
extern void build_copy_page(void);
|
extern void build_copy_page(void);
|
||||||
struct cpuinfo_mips *c = ¤t_cpu_data;
|
struct cpuinfo_mips *c = ¤t_cpu_data;
|
||||||
|
|
||||||
|
@ -439,7 +440,7 @@
|
||||||
probe_pcache();
|
probe_pcache();
|
||||||
probe_vcache();
|
probe_vcache();
|
||||||
setup_scache();
|
setup_scache();
|
||||||
@@ -1982,7 +2016,15 @@ void r4k_cache_init(void)
|
@@ -2012,7 +2046,15 @@ void r4k_cache_init(void)
|
||||||
*/
|
*/
|
||||||
local_r4k___flush_cache_all(NULL);
|
local_r4k___flush_cache_all(NULL);
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@ This fixes OpenWrt ticket #1485: https://dev.openwrt.org/ticket/1485
|
||||||
#endif /* __ASM_MACH_BCM47XX_CPU_FEATURE_OVERRIDES_H */
|
#endif /* __ASM_MACH_BCM47XX_CPU_FEATURE_OVERRIDES_H */
|
||||||
--- a/arch/mips/mm/c-r4k.c
|
--- a/arch/mips/mm/c-r4k.c
|
||||||
+++ b/arch/mips/mm/c-r4k.c
|
+++ b/arch/mips/mm/c-r4k.c
|
||||||
@@ -672,7 +672,7 @@ static inline void local_r4k_flush_cache
|
@@ -694,7 +694,7 @@ static inline void local_r4k_flush_cache
|
||||||
map_coherent = (cpu_has_dc_aliases &&
|
map_coherent = (cpu_has_dc_aliases &&
|
||||||
page_mapcount(page) &&
|
page_mapcount(page) &&
|
||||||
!Page_dcache_dirty(page));
|
!Page_dcache_dirty(page));
|
||||||
|
@ -38,7 +38,7 @@ This fixes OpenWrt ticket #1485: https://dev.openwrt.org/ticket/1485
|
||||||
vaddr = kmap_coherent(page, addr);
|
vaddr = kmap_coherent(page, addr);
|
||||||
else
|
else
|
||||||
vaddr = kmap_atomic(page);
|
vaddr = kmap_atomic(page);
|
||||||
@@ -697,7 +697,7 @@ static inline void local_r4k_flush_cache
|
@@ -719,7 +719,7 @@ static inline void local_r4k_flush_cache
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vaddr) {
|
if (vaddr) {
|
||||||
|
|
|
@ -1,119 +0,0 @@
|
||||||
From adcc81f148d733b7e8e641300c5590a2cdc13bf3 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Paul Burton <paul.burton@mips.com>
|
|
||||||
Date: Thu, 20 Dec 2018 17:45:43 +0000
|
|
||||||
Subject: MIPS: math-emu: Write-protect delay slot emulation pages
|
|
||||||
|
|
||||||
Mapping the delay slot emulation page as both writeable & executable
|
|
||||||
presents a security risk, in that if an exploit can write to & jump into
|
|
||||||
the page then it can be used as an easy way to execute arbitrary code.
|
|
||||||
|
|
||||||
Prevent this by mapping the page read-only for userland, and using
|
|
||||||
access_process_vm() with the FOLL_FORCE flag to write to it from
|
|
||||||
mips_dsemul().
|
|
||||||
|
|
||||||
This will likely be less efficient due to copy_to_user_page() performing
|
|
||||||
cache maintenance on a whole page, rather than a single line as in the
|
|
||||||
previous use of flush_cache_sigtramp(). However this delay slot
|
|
||||||
emulation code ought not to be running in any performance critical paths
|
|
||||||
anyway so this isn't really a problem, and we can probably do better in
|
|
||||||
copy_to_user_page() anyway in future.
|
|
||||||
|
|
||||||
A major advantage of this approach is that the fix is small & simple to
|
|
||||||
backport to stable kernels.
|
|
||||||
|
|
||||||
Reported-by: Andy Lutomirski <luto@kernel.org>
|
|
||||||
Signed-off-by: Paul Burton <paul.burton@mips.com>
|
|
||||||
Fixes: 432c6bacbd0c ("MIPS: Use per-mm page to execute branch delay slot instructions")
|
|
||||||
Cc: stable@vger.kernel.org # v4.8+
|
|
||||||
Cc: linux-mips@vger.kernel.org
|
|
||||||
Cc: linux-kernel@vger.kernel.org
|
|
||||||
Cc: Rich Felker <dalias@libc.org>
|
|
||||||
Cc: David Daney <david.daney@cavium.com>
|
|
||||||
---
|
|
||||||
arch/mips/kernel/vdso.c | 4 ++--
|
|
||||||
arch/mips/math-emu/dsemul.c | 38 ++++++++++++++++++++------------------
|
|
||||||
2 files changed, 22 insertions(+), 20 deletions(-)
|
|
||||||
|
|
||||||
--- a/arch/mips/kernel/vdso.c
|
|
||||||
+++ b/arch/mips/kernel/vdso.c
|
|
||||||
@@ -126,8 +126,8 @@ int arch_setup_additional_pages(struct l
|
|
||||||
|
|
||||||
/* Map delay slot emulation page */
|
|
||||||
base = mmap_region(NULL, STACK_TOP, PAGE_SIZE,
|
|
||||||
- VM_READ|VM_WRITE|VM_EXEC|
|
|
||||||
- VM_MAYREAD|VM_MAYWRITE|VM_MAYEXEC,
|
|
||||||
+ VM_READ | VM_EXEC |
|
|
||||||
+ VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC,
|
|
||||||
0, NULL);
|
|
||||||
if (IS_ERR_VALUE(base)) {
|
|
||||||
ret = base;
|
|
||||||
--- a/arch/mips/math-emu/dsemul.c
|
|
||||||
+++ b/arch/mips/math-emu/dsemul.c
|
|
||||||
@@ -214,8 +214,9 @@ int mips_dsemul(struct pt_regs *regs, mi
|
|
||||||
{
|
|
||||||
int isa16 = get_isa16_mode(regs->cp0_epc);
|
|
||||||
mips_instruction break_math;
|
|
||||||
- struct emuframe __user *fr;
|
|
||||||
- int err, fr_idx;
|
|
||||||
+ unsigned long fr_uaddr;
|
|
||||||
+ struct emuframe fr;
|
|
||||||
+ int fr_idx, ret;
|
|
||||||
|
|
||||||
/* NOP is easy */
|
|
||||||
if (ir == 0)
|
|
||||||
@@ -250,27 +251,31 @@ int mips_dsemul(struct pt_regs *regs, mi
|
|
||||||
fr_idx = alloc_emuframe();
|
|
||||||
if (fr_idx == BD_EMUFRAME_NONE)
|
|
||||||
return SIGBUS;
|
|
||||||
- fr = &dsemul_page()[fr_idx];
|
|
||||||
|
|
||||||
/* Retrieve the appropriately encoded break instruction */
|
|
||||||
break_math = BREAK_MATH(isa16);
|
|
||||||
|
|
||||||
/* Write the instructions to the frame */
|
|
||||||
if (isa16) {
|
|
||||||
- err = __put_user(ir >> 16,
|
|
||||||
- (u16 __user *)(&fr->emul));
|
|
||||||
- err |= __put_user(ir & 0xffff,
|
|
||||||
- (u16 __user *)((long)(&fr->emul) + 2));
|
|
||||||
- err |= __put_user(break_math >> 16,
|
|
||||||
- (u16 __user *)(&fr->badinst));
|
|
||||||
- err |= __put_user(break_math & 0xffff,
|
|
||||||
- (u16 __user *)((long)(&fr->badinst) + 2));
|
|
||||||
+ union mips_instruction _emul = {
|
|
||||||
+ .halfword = { ir >> 16, ir }
|
|
||||||
+ };
|
|
||||||
+ union mips_instruction _badinst = {
|
|
||||||
+ .halfword = { break_math >> 16, break_math }
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+ fr.emul = _emul.word;
|
|
||||||
+ fr.badinst = _badinst.word;
|
|
||||||
} else {
|
|
||||||
- err = __put_user(ir, &fr->emul);
|
|
||||||
- err |= __put_user(break_math, &fr->badinst);
|
|
||||||
+ fr.emul = ir;
|
|
||||||
+ fr.badinst = break_math;
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (unlikely(err)) {
|
|
||||||
+ /* Write the frame to user memory */
|
|
||||||
+ fr_uaddr = (unsigned long)&dsemul_page()[fr_idx];
|
|
||||||
+ ret = access_process_vm(current, fr_uaddr, &fr, sizeof(fr),
|
|
||||||
+ FOLL_FORCE | FOLL_WRITE);
|
|
||||||
+ if (unlikely(ret != sizeof(fr))) {
|
|
||||||
MIPS_FPU_EMU_INC_STATS(errors);
|
|
||||||
free_emuframe(fr_idx, current->mm);
|
|
||||||
return SIGBUS;
|
|
||||||
@@ -282,10 +287,7 @@ int mips_dsemul(struct pt_regs *regs, mi
|
|
||||||
atomic_set(¤t->thread.bd_emu_frame, fr_idx);
|
|
||||||
|
|
||||||
/* Change user register context to execute the frame */
|
|
||||||
- regs->cp0_epc = (unsigned long)&fr->emul | isa16;
|
|
||||||
-
|
|
||||||
- /* Ensure the icache observes our newly written frame */
|
|
||||||
- flush_cache_sigtramp((unsigned long)&fr->emul);
|
|
||||||
+ regs->cp0_epc = fr_uaddr | isa16;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
|
@ -1,32 +0,0 @@
|
||||||
From 508b09046c0f21678652fb66fd1e9959d55591d2 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Alin Nastac <alin.nastac@gmail.com>
|
|
||||||
Date: Wed, 21 Nov 2018 14:00:30 +0100
|
|
||||||
Subject: [PATCH] netfilter: ipv6: Preserve link scope traffic original oif
|
|
||||||
|
|
||||||
When ip6_route_me_harder is invoked, it resets outgoing interface of:
|
|
||||||
- link-local scoped packets sent by neighbor discovery
|
|
||||||
- multicast packets sent by MLD host
|
|
||||||
- multicast packets send by MLD proxy daemon that sets outgoing
|
|
||||||
interface through IPV6_PKTINFO ipi6_ifindex
|
|
||||||
|
|
||||||
Link-local and multicast packets must keep their original oif after
|
|
||||||
ip6_route_me_harder is called.
|
|
||||||
|
|
||||||
Signed-off-by: Alin Nastac <alin.nastac@gmail.com>
|
|
||||||
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
|
||||||
---
|
|
||||||
net/ipv6/netfilter.c | 3 ++-
|
|
||||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
--- a/net/ipv6/netfilter.c
|
|
||||||
+++ b/net/ipv6/netfilter.c
|
|
||||||
@@ -24,7 +24,8 @@ int ip6_route_me_harder(struct net *net,
|
|
||||||
unsigned int hh_len;
|
|
||||||
struct dst_entry *dst;
|
|
||||||
struct flowi6 fl6 = {
|
|
||||||
- .flowi6_oif = sk ? sk->sk_bound_dev_if : 0,
|
|
||||||
+ .flowi6_oif = sk && sk->sk_bound_dev_if ? sk->sk_bound_dev_if :
|
|
||||||
+ rt6_need_strict(&iph->daddr) ? skb_dst(skb)->dev->ifindex : 0,
|
|
||||||
.flowi6_mark = skb->mark,
|
|
||||||
.flowi6_uid = sock_net_uid(net, sk),
|
|
||||||
.daddr = iph->daddr,
|
|
|
@ -61,11 +61,9 @@ CC: stable@vger.kernel.org # v4.0+
|
||||||
arch/arm/mach-cns3xxx/pcie.c | 2 +-
|
arch/arm/mach-cns3xxx/pcie.c | 2 +-
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/arch/arm/mach-cns3xxx/pcie.c b/arch/arm/mach-cns3xxx/pcie.c
|
|
||||||
index 318394ed5c7a..5e11ad3164e0 100644
|
|
||||||
--- a/arch/arm/mach-cns3xxx/pcie.c
|
--- a/arch/arm/mach-cns3xxx/pcie.c
|
||||||
+++ b/arch/arm/mach-cns3xxx/pcie.c
|
+++ b/arch/arm/mach-cns3xxx/pcie.c
|
||||||
@@ -83,7 +83,7 @@ static void __iomem *cns3xxx_pci_map_bus(struct pci_bus *bus,
|
@@ -83,7 +83,7 @@ static void __iomem *cns3xxx_pci_map_bus
|
||||||
} else /* remote PCI bus */
|
} else /* remote PCI bus */
|
||||||
base = cnspci->cfg1_regs + ((busno & 0xf) << 20);
|
base = cnspci->cfg1_regs + ((busno & 0xf) << 20);
|
||||||
|
|
||||||
|
@ -74,6 +72,3 @@ index 318394ed5c7a..5e11ad3164e0 100644
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cns3xxx_pci_read_config(struct pci_bus *bus, unsigned int devfn,
|
static int cns3xxx_pci_read_config(struct pci_bus *bus, unsigned int devfn,
|
||||||
--
|
|
||||||
2.17.1
|
|
||||||
|
|
||||||
|
|
|
@ -48,7 +48,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||||
MODULE_AUTHOR("Pablo Neira Ayuso <pablo@netfilter.org>");
|
MODULE_AUTHOR("Pablo Neira Ayuso <pablo@netfilter.org>");
|
||||||
--- a/net/netfilter/nft_flow_offload.c
|
--- a/net/netfilter/nft_flow_offload.c
|
||||||
+++ b/net/netfilter/nft_flow_offload.c
|
+++ b/net/netfilter/nft_flow_offload.c
|
||||||
@@ -193,44 +193,14 @@ static struct nft_expr_type nft_flow_off
|
@@ -193,47 +193,14 @@ static struct nft_expr_type nft_flow_off
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -73,7 +73,9 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||||
{
|
{
|
||||||
- int err;
|
- int err;
|
||||||
-
|
-
|
||||||
- register_netdevice_notifier(&flow_offload_netdev_notifier);
|
- err = register_netdevice_notifier(&flow_offload_netdev_notifier);
|
||||||
|
- if (err)
|
||||||
|
- goto err;
|
||||||
-
|
-
|
||||||
- err = nft_register_expr(&nft_flow_offload_type);
|
- err = nft_register_expr(&nft_flow_offload_type);
|
||||||
- if (err < 0)
|
- if (err < 0)
|
||||||
|
@ -83,6 +85,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||||
-
|
-
|
||||||
-register_expr:
|
-register_expr:
|
||||||
- unregister_netdevice_notifier(&flow_offload_netdev_notifier);
|
- unregister_netdevice_notifier(&flow_offload_netdev_notifier);
|
||||||
|
-err:
|
||||||
- return err;
|
- return err;
|
||||||
+ return nft_register_expr(&nft_flow_offload_type);
|
+ return nft_register_expr(&nft_flow_offload_type);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,44 +0,0 @@
|
||||||
From a74515604a7b171f2702bdcbd1e231225fb456d0 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Anderson Luiz Alves <alacn1@gmail.com>
|
|
||||||
Date: Fri, 30 Nov 2018 21:58:36 -0200
|
|
||||||
Subject: [PATCH] mv88e6060: disable hardware level MAC learning
|
|
||||||
|
|
||||||
Disable hardware level MAC learning because it breaks station roaming.
|
|
||||||
When enabled it drops all frames that arrive from a MAC address
|
|
||||||
that is on a different port at learning table.
|
|
||||||
|
|
||||||
Signed-off-by: Anderson Luiz Alves <alacn1@gmail.com>
|
|
||||||
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
|
|
||||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
||||||
---
|
|
||||||
drivers/net/dsa/mv88e6060.c | 10 +++-------
|
|
||||||
1 file changed, 3 insertions(+), 7 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/net/dsa/mv88e6060.c
|
|
||||||
+++ b/drivers/net/dsa/mv88e6060.c
|
|
||||||
@@ -116,8 +116,7 @@ static int mv88e6060_switch_reset(struct
|
|
||||||
/* Reset the switch. */
|
|
||||||
REG_WRITE(REG_GLOBAL, GLOBAL_ATU_CONTROL,
|
|
||||||
GLOBAL_ATU_CONTROL_SWRESET |
|
|
||||||
- GLOBAL_ATU_CONTROL_ATUSIZE_1024 |
|
|
||||||
- GLOBAL_ATU_CONTROL_ATE_AGE_5MIN);
|
|
||||||
+ GLOBAL_ATU_CONTROL_LEARNDIS);
|
|
||||||
|
|
||||||
/* Wait up to one second for reset to complete. */
|
|
||||||
timeout = jiffies + 1 * HZ;
|
|
||||||
@@ -142,13 +141,10 @@ static int mv88e6060_setup_global(struct
|
|
||||||
*/
|
|
||||||
REG_WRITE(REG_GLOBAL, GLOBAL_CONTROL, GLOBAL_CONTROL_MAX_FRAME_1536);
|
|
||||||
|
|
||||||
- /* Enable automatic address learning, set the address
|
|
||||||
- * database size to 1024 entries, and set the default aging
|
|
||||||
- * time to 5 minutes.
|
|
||||||
+ /* Disable automatic address learning.
|
|
||||||
*/
|
|
||||||
REG_WRITE(REG_GLOBAL, GLOBAL_ATU_CONTROL,
|
|
||||||
- GLOBAL_ATU_CONTROL_ATUSIZE_1024 |
|
|
||||||
- GLOBAL_ATU_CONTROL_ATE_AGE_5MIN);
|
|
||||||
+ GLOBAL_ATU_CONTROL_LEARNDIS);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
|
@ -36,7 +36,7 @@ Signed-off-by: Richard Weinberger <richard@nod.at>
|
||||||
|
|
||||||
--- a/fs/ubifs/replay.c
|
--- a/fs/ubifs/replay.c
|
||||||
+++ b/fs/ubifs/replay.c
|
+++ b/fs/ubifs/replay.c
|
||||||
@@ -210,6 +210,38 @@ static int trun_remove_range(struct ubif
|
@@ -242,6 +242,38 @@ static bool inode_still_linked(struct ub
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -75,15 +75,15 @@ Signed-off-by: Richard Weinberger <richard@nod.at>
|
||||||
* apply_replay_entry - apply a replay entry to the TNC.
|
* apply_replay_entry - apply a replay entry to the TNC.
|
||||||
* @c: UBIFS file-system description object
|
* @c: UBIFS file-system description object
|
||||||
* @r: replay entry to apply
|
* @r: replay entry to apply
|
||||||
@@ -236,6 +268,11 @@ static int apply_replay_entry(struct ubi
|
@@ -270,6 +302,11 @@ static int apply_replay_entry(struct ubi
|
||||||
{
|
|
||||||
ino_t inum = key_inum(c, &r->key);
|
|
||||||
|
|
||||||
+ if (inode_still_linked(c, r)) {
|
if (inode_still_linked(c, r)) {
|
||||||
+ err = 0;
|
err = 0;
|
||||||
+ break;
|
+ break;
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
err = ubifs_tnc_remove_ino(c, inum);
|
+ if (inode_still_linked(c, r)) {
|
||||||
break;
|
+ err = 0;
|
||||||
}
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,83 +0,0 @@
|
||||||
From c942c462411e4757aafba73bf13b5e5c7a4b62ca Mon Sep 17 00:00:00 2001
|
|
||||||
From: Christian Lamparter <chunkeey@gmail.com>
|
|
||||||
Date: Sun, 23 Dec 2018 00:38:55 +0100
|
|
||||||
Subject: [PATCH] mtd: rawnand: qcom: fix memory corruption that causes panic
|
|
||||||
|
|
||||||
This patch fixes a memory corruption that occured in the
|
|
||||||
qcom-nandc driver since it was converted to nand_scan().
|
|
||||||
|
|
||||||
On boot, an affected device will panic from a NPE at a weird place:
|
|
||||||
| Unable to handle kernel NULL pointer dereference at virtual address 00000000
|
|
||||||
| pgd = (ptrval)
|
|
||||||
| [00000000] *pgd=00000000
|
|
||||||
| Internal error: Oops: 80000005 [#1] SMP ARM
|
|
||||||
| CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.19.9 #0
|
|
||||||
| Hardware name: Generic DT based system
|
|
||||||
| PC is at (null)
|
|
||||||
| LR is at nand_block_isbad+0x90/0xa4
|
|
||||||
| pc : [<00000000>] lr : [<c0592240>] psr: 80000013
|
|
||||||
| sp : cf839d40 ip : 00000000 fp : cfae9e20
|
|
||||||
| r10: cf815810 r9 : 00000000 r8 : 00000000
|
|
||||||
| r7 : 00000000 r6 : 00000000 r5 : 00000001 r4 : cf815810
|
|
||||||
| r3 : 00000000 r2 : cfae9810 r1 : ffffffff r0 : cf815810
|
|
||||||
| Flags: Nzcv IRQs on FIQs on Mode SVC_32 ISA ARM Segment none
|
|
||||||
| Control: 10c5387d Table: 8020406a DAC: 00000051
|
|
||||||
| Process swapper/0 (pid: 1, stack limit = 0x(ptrval))
|
|
||||||
| [<c0592240>] (nand_block_isbad) from [<c0580a94>] (allocate_partition+0x7a0/0x7dc)
|
|
||||||
| [<c0580a94>] (allocate_partition) from [<c05811e4>] (add_mtd_partitions+0x58/0x10c)
|
|
||||||
| [<c05811e4>] (add_mtd_partitions) from [<c0581164>] (parse_mtd_partitions+0x310/0x338)
|
|
||||||
| [<c0581164>] (parse_mtd_partitions) from [<c057def4>] (mtd_device_parse_register+0x60/0x15c)
|
|
||||||
| [<c057def4>] (mtd_device_parse_register) from [<c059d274>] (qcom_nandc_probe+0x770/0x8f4)
|
|
||||||
| [<c059d274>] (qcom_nandc_probe) from [<c0567f00>] (platform_drv_probe+0x34/0x70)
|
|
||||||
|
|
||||||
The problem is that the nand_scan()'s qcom_nand_attach_chip callback
|
|
||||||
is updating the nandc->max_cwperpage from 1 to 4. This causes the
|
|
||||||
sg_init_table of clear_bam_transaction() in the driver's
|
|
||||||
qcom_nandc_block_bad() to memset much more than what was initially
|
|
||||||
allocated by alloc_bam_transaction().
|
|
||||||
|
|
||||||
Hence, this patch restores the old behavior by performing the
|
|
||||||
alloc_bam_transaction() after the chip was identified.
|
|
||||||
|
|
||||||
Fixes: 6a3cec64f18c ("mtd: rawnand: qcom: convert driver to nand_scan()")
|
|
||||||
Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
|
|
||||||
---
|
|
||||||
drivers/mtd/nand/raw/qcom_nandc.c | 20 ++++++++++----------
|
|
||||||
1 file changed, 10 insertions(+), 10 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/mtd/nand/raw/qcom_nandc.c
|
|
||||||
+++ b/drivers/mtd/nand/raw/qcom_nandc.c
|
|
||||||
@@ -2839,6 +2839,16 @@ static int qcom_nand_host_init_and_regis
|
|
||||||
if (ret)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
+ if (nandc->props->is_bam) {
|
|
||||||
+ free_bam_transaction(nandc);
|
|
||||||
+ nandc->bam_txn = alloc_bam_transaction(nandc);
|
|
||||||
+ if (!nandc->bam_txn) {
|
|
||||||
+ dev_err(nandc->dev,
|
|
||||||
+ "failed to allocate bam transaction\n");
|
|
||||||
+ return -ENOMEM;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
ret = mtd_device_register(mtd, NULL, 0);
|
|
||||||
if (ret)
|
|
||||||
nand_cleanup(chip);
|
|
||||||
@@ -2853,16 +2863,6 @@ static int qcom_probe_nand_devices(struc
|
|
||||||
struct qcom_nand_host *host;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
- if (nandc->props->is_bam) {
|
|
||||||
- free_bam_transaction(nandc);
|
|
||||||
- nandc->bam_txn = alloc_bam_transaction(nandc);
|
|
||||||
- if (!nandc->bam_txn) {
|
|
||||||
- dev_err(nandc->dev,
|
|
||||||
- "failed to allocate bam transaction\n");
|
|
||||||
- return -ENOMEM;
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
for_each_available_child_of_node(dn, child) {
|
|
||||||
host = devm_kzalloc(dev, sizeof(*host), GFP_KERNEL);
|
|
||||||
if (!host) {
|
|
|
@ -27,11 +27,9 @@ Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
|
||||||
drivers/leds/led-triggers.c | 19 ++++++++++---------
|
drivers/leds/led-triggers.c | 19 ++++++++++---------
|
||||||
1 file changed, 10 insertions(+), 9 deletions(-)
|
1 file changed, 10 insertions(+), 9 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/leds/led-triggers.c b/drivers/leds/led-triggers.c
|
|
||||||
index 17d73db1456e..08e7c724a9dc 100644
|
|
||||||
--- a/drivers/leds/led-triggers.c
|
--- a/drivers/leds/led-triggers.c
|
||||||
+++ b/drivers/leds/led-triggers.c
|
+++ b/drivers/leds/led-triggers.c
|
||||||
@@ -134,6 +134,12 @@ int led_trigger_set(struct led_classdev *led_cdev, struct led_trigger *trig)
|
@@ -134,6 +134,12 @@ int led_trigger_set(struct led_classdev
|
||||||
led_set_brightness(led_cdev, LED_OFF);
|
led_set_brightness(led_cdev, LED_OFF);
|
||||||
}
|
}
|
||||||
if (trig) {
|
if (trig) {
|
||||||
|
@ -44,7 +42,7 @@ index 17d73db1456e..08e7c724a9dc 100644
|
||||||
write_lock_irqsave(&trig->leddev_list_lock, flags);
|
write_lock_irqsave(&trig->leddev_list_lock, flags);
|
||||||
list_add_tail(&led_cdev->trig_list, &trig->led_cdevs);
|
list_add_tail(&led_cdev->trig_list, &trig->led_cdevs);
|
||||||
write_unlock_irqrestore(&trig->leddev_list_lock, flags);
|
write_unlock_irqrestore(&trig->leddev_list_lock, flags);
|
||||||
@@ -146,12 +152,6 @@ int led_trigger_set(struct led_classdev *led_cdev, struct led_trigger *trig)
|
@@ -146,12 +152,6 @@ int led_trigger_set(struct led_classdev
|
||||||
|
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err_activate;
|
goto err_activate;
|
||||||
|
@ -57,7 +55,7 @@ index 17d73db1456e..08e7c724a9dc 100644
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event) {
|
if (event) {
|
||||||
@@ -165,17 +165,18 @@ int led_trigger_set(struct led_classdev *led_cdev, struct led_trigger *trig)
|
@@ -165,17 +165,18 @@ int led_trigger_set(struct led_classdev
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -79,6 +77,3 @@ index 17d73db1456e..08e7c724a9dc 100644
|
||||||
led_set_brightness(led_cdev, LED_OFF);
|
led_set_brightness(led_cdev, LED_OFF);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
--
|
|
||||||
2.20.1
|
|
||||||
|
|
||||||
|
|
|
@ -98,7 +98,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
|
|
||||||
--- a/init/Kconfig
|
--- a/init/Kconfig
|
||||||
+++ b/init/Kconfig
|
+++ b/init/Kconfig
|
||||||
@@ -1988,6 +1988,13 @@ config TRIM_UNUSED_KSYMS
|
@@ -1993,6 +1993,13 @@ config TRIM_UNUSED_KSYMS
|
||||||
|
|
||||||
If unsure, or if you need to build out-of-tree modules, say N.
|
If unsure, or if you need to build out-of-tree modules, say N.
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
|
|
||||||
--- a/Makefile
|
--- a/Makefile
|
||||||
+++ b/Makefile
|
+++ b/Makefile
|
||||||
@@ -1224,7 +1224,6 @@ all: modules
|
@@ -1227,7 +1227,6 @@ all: modules
|
||||||
|
|
||||||
PHONY += modules
|
PHONY += modules
|
||||||
modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) modules.builtin
|
modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) modules.builtin
|
||||||
|
@ -23,7 +23,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
@$(kecho) ' Building modules, stage 2.';
|
@$(kecho) ' Building modules, stage 2.';
|
||||||
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
|
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
|
||||||
|
|
||||||
@@ -1253,7 +1252,6 @@ _modinst_:
|
@@ -1256,7 +1255,6 @@ _modinst_:
|
||||||
rm -f $(MODLIB)/build ; \
|
rm -f $(MODLIB)/build ; \
|
||||||
ln -s $(CURDIR) $(MODLIB)/build ; \
|
ln -s $(CURDIR) $(MODLIB)/build ; \
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
---
|
---
|
||||||
--- a/arch/mips/include/asm/r4kcache.h
|
--- a/arch/mips/include/asm/r4kcache.h
|
||||||
+++ b/arch/mips/include/asm/r4kcache.h
|
+++ b/arch/mips/include/asm/r4kcache.h
|
||||||
@@ -682,16 +682,48 @@ static inline void prot##extra##blast_##
|
@@ -683,16 +683,48 @@ static inline void prot##extra##blast_##
|
||||||
unsigned long end) \
|
unsigned long end) \
|
||||||
{ \
|
{ \
|
||||||
unsigned long lsize = cpu_##desc##_line_size(); \
|
unsigned long lsize = cpu_##desc##_line_size(); \
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
|
|
||||||
--- a/drivers/net/phy/phy_device.c
|
--- a/drivers/net/phy/phy_device.c
|
||||||
+++ b/drivers/net/phy/phy_device.c
|
+++ b/drivers/net/phy/phy_device.c
|
||||||
@@ -1509,6 +1509,9 @@ int genphy_update_link(struct phy_device
|
@@ -1506,6 +1506,9 @@ int genphy_update_link(struct phy_device
|
||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
|
|
|
@ -56,7 +56,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
*/
|
*/
|
||||||
--- a/include/linux/skbuff.h
|
--- a/include/linux/skbuff.h
|
||||||
+++ b/include/linux/skbuff.h
|
+++ b/include/linux/skbuff.h
|
||||||
@@ -2516,6 +2516,10 @@ static inline int pskb_trim(struct sk_bu
|
@@ -2527,6 +2527,10 @@ static inline int pskb_trim(struct sk_bu
|
||||||
return (len < skb->len) ? __pskb_trim(skb, len) : 0;
|
return (len < skb->len) ? __pskb_trim(skb, len) : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
/**
|
/**
|
||||||
* pskb_trim_unique - remove end from a paged unique (not cloned) buffer
|
* pskb_trim_unique - remove end from a paged unique (not cloned) buffer
|
||||||
* @skb: buffer to alter
|
* @skb: buffer to alter
|
||||||
@@ -2646,16 +2650,6 @@ static inline struct sk_buff *dev_alloc_
|
@@ -2657,16 +2661,6 @@ static inline struct sk_buff *dev_alloc_
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -101,7 +101,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
help
|
help
|
||||||
--- a/net/core/dev.c
|
--- a/net/core/dev.c
|
||||||
+++ b/net/core/dev.c
|
+++ b/net/core/dev.c
|
||||||
@@ -3233,10 +3233,20 @@ static int xmit_one(struct sk_buff *skb,
|
@@ -3238,10 +3238,20 @@ static int xmit_one(struct sk_buff *skb,
|
||||||
if (!list_empty(&ptype_all) || !list_empty(&dev->ptype_all))
|
if (!list_empty(&ptype_all) || !list_empty(&dev->ptype_all))
|
||||||
dev_queue_xmit_nit(skb, dev);
|
dev_queue_xmit_nit(skb, dev);
|
||||||
|
|
||||||
|
|
|
@ -327,7 +327,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
|
|
||||||
--- a/net/core/sock.c
|
--- a/net/core/sock.c
|
||||||
+++ b/net/core/sock.c
|
+++ b/net/core/sock.c
|
||||||
@@ -3477,6 +3477,8 @@ static __net_initdata struct pernet_oper
|
@@ -3482,6 +3482,8 @@ static __net_initdata struct pernet_oper
|
||||||
|
|
||||||
static int __init proto_init(void)
|
static int __init proto_init(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -54,7 +54,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
+MODULE_LICENSE("GPL");
|
+MODULE_LICENSE("GPL");
|
||||||
--- a/kernel/sched/core.c
|
--- a/kernel/sched/core.c
|
||||||
+++ b/kernel/sched/core.c
|
+++ b/kernel/sched/core.c
|
||||||
@@ -2128,6 +2128,7 @@ int wake_up_state(struct task_struct *p,
|
@@ -2127,6 +2127,7 @@ int wake_up_state(struct task_struct *p,
|
||||||
{
|
{
|
||||||
return try_to_wake_up(p, state, 0);
|
return try_to_wake_up(p, state, 0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,7 +41,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
+#endif
|
+#endif
|
||||||
--- a/init/Kconfig
|
--- a/init/Kconfig
|
||||||
+++ b/init/Kconfig
|
+++ b/init/Kconfig
|
||||||
@@ -1041,6 +1041,10 @@ config RELAY
|
@@ -1046,6 +1046,10 @@ config RELAY
|
||||||
|
|
||||||
If unsure, say N.
|
If unsure, say N.
|
||||||
|
|
||||||
|
|
|
@ -71,7 +71,7 @@ Signed-off-by: Tobias Wolf <dev-NTEO@vplace.de>
|
||||||
|
|
||||||
--- a/mm/page_alloc.c
|
--- a/mm/page_alloc.c
|
||||||
+++ b/mm/page_alloc.c
|
+++ b/mm/page_alloc.c
|
||||||
@@ -6370,7 +6370,7 @@ static void __ref alloc_node_mem_map(str
|
@@ -6384,7 +6384,7 @@ static void __ref alloc_node_mem_map(str
|
||||||
mem_map = NODE_DATA(0)->node_mem_map;
|
mem_map = NODE_DATA(0)->node_mem_map;
|
||||||
#if defined(CONFIG_HAVE_MEMBLOCK_NODE_MAP) || defined(CONFIG_FLATMEM)
|
#if defined(CONFIG_HAVE_MEMBLOCK_NODE_MAP) || defined(CONFIG_FLATMEM)
|
||||||
if (page_to_pfn(mem_map) != pgdat->node_start_pfn)
|
if (page_to_pfn(mem_map) != pgdat->node_start_pfn)
|
||||||
|
|
|
@ -13,7 +13,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
|
|
||||||
--- a/init/Kconfig
|
--- a/init/Kconfig
|
||||||
+++ b/init/Kconfig
|
+++ b/init/Kconfig
|
||||||
@@ -1140,6 +1140,17 @@ config SYSCTL_ARCH_UNALIGN_ALLOW
|
@@ -1145,6 +1145,17 @@ config SYSCTL_ARCH_UNALIGN_ALLOW
|
||||||
the unaligned access emulation.
|
the unaligned access emulation.
|
||||||
see arch/parisc/kernel/unaligned.c for reference
|
see arch/parisc/kernel/unaligned.c for reference
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
+
|
+
|
||||||
config SPI_ATMEL_QUADSPI
|
config SPI_ATMEL_QUADSPI
|
||||||
tristate "Atmel Quad SPI Controller"
|
tristate "Atmel Quad SPI Controller"
|
||||||
depends on ARCH_AT91 || (ARM && COMPILE_TEST)
|
depends on ARCH_AT91 || (ARM && COMPILE_TEST && !ARCH_EBSA110)
|
||||||
--- a/drivers/mtd/spi-nor/spi-nor.c
|
--- a/drivers/mtd/spi-nor/spi-nor.c
|
||||||
+++ b/drivers/mtd/spi-nor/spi-nor.c
|
+++ b/drivers/mtd/spi-nor/spi-nor.c
|
||||||
@@ -2647,10 +2647,12 @@ static int spi_nor_select_erase(struct s
|
@@ -2647,10 +2647,12 @@ static int spi_nor_select_erase(struct s
|
||||||
|
|
|
@ -1,49 +0,0 @@
|
||||||
From: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
|
|
||||||
Subject: [PATCH v2 1/1] f2fs: fix validation of the block count in
|
|
||||||
sanity_check_raw_super
|
|
||||||
Date: Sat, 22 Dec 2018 11:22:26 +0100
|
|
||||||
Message-Id: <20181222102226.10050-2-martin.blumenstingl@googlemail.com>
|
|
||||||
|
|
||||||
Treat "block_count" from struct f2fs_super_block as 64-bit little endian
|
|
||||||
value in sanity_check_raw_super() because struct f2fs_super_block
|
|
||||||
declares "block_count" as "__le64".
|
|
||||||
|
|
||||||
This fixes a bug where the superblock validation fails on big endian
|
|
||||||
devices with the following error:
|
|
||||||
F2FS-fs (sda1): Wrong segment_count / block_count (61439 > 0)
|
|
||||||
F2FS-fs (sda1): Can't find valid F2FS filesystem in 1th superblock
|
|
||||||
F2FS-fs (sda1): Wrong segment_count / block_count (61439 > 0)
|
|
||||||
F2FS-fs (sda1): Can't find valid F2FS filesystem in 2th superblock
|
|
||||||
As result of this the partition cannot be mounted.
|
|
||||||
|
|
||||||
With this patch applied the superblock validation works fine and the
|
|
||||||
partition can be mounted again:
|
|
||||||
F2FS-fs (sda1): Mounted with checkpoint version = 7c84
|
|
||||||
|
|
||||||
My little endian x86-64 hardware was able to mount the partition without
|
|
||||||
this fix.
|
|
||||||
To confirm that mounting f2fs filesystems works on big endian machines
|
|
||||||
again I tested this on a 32-bit MIPS big endian (lantiq) device.
|
|
||||||
|
|
||||||
Fixes: 0cfe75c5b01199 ("f2fs: enhance sanity_check_raw_super() to avoid potential overflows")
|
|
||||||
Cc: stable@vger.kernel.org
|
|
||||||
Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
|
|
||||||
Reviewed-by: Chao Yu <yuchao0@huawei.com>
|
|
||||||
---
|
|
||||||
|
|
||||||
--- a/fs/f2fs/super.c
|
|
||||||
+++ b/fs/f2fs/super.c
|
|
||||||
@@ -2267,10 +2267,10 @@ static int sanity_check_raw_super(struct
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (segment_count > (le32_to_cpu(raw_super->block_count) >> 9)) {
|
|
||||||
+ if (segment_count > (le64_to_cpu(raw_super->block_count) >> 9)) {
|
|
||||||
f2fs_msg(sb, KERN_INFO,
|
|
||||||
- "Wrong segment_count / block_count (%u > %u)",
|
|
||||||
- segment_count, le32_to_cpu(raw_super->block_count));
|
|
||||||
+ "Wrong segment_count / block_count (%u > %llu)",
|
|
||||||
+ segment_count, le64_to_cpu(raw_super->block_count));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
|
@ -87,7 +87,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
if (!net_eq(dev_net(dev), sock_net(sk)))
|
if (!net_eq(dev_net(dev), sock_net(sk)))
|
||||||
goto drop;
|
goto drop;
|
||||||
|
|
||||||
@@ -3228,6 +3230,7 @@ static int packet_create(struct net *net
|
@@ -3232,6 +3234,7 @@ static int packet_create(struct net *net
|
||||||
mutex_init(&po->pg_vec_lock);
|
mutex_init(&po->pg_vec_lock);
|
||||||
po->rollover = NULL;
|
po->rollover = NULL;
|
||||||
po->prot_hook.func = packet_rcv;
|
po->prot_hook.func = packet_rcv;
|
||||||
|
@ -95,7 +95,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
|
|
||||||
if (sock->type == SOCK_PACKET)
|
if (sock->type == SOCK_PACKET)
|
||||||
po->prot_hook.func = packet_rcv_spkt;
|
po->prot_hook.func = packet_rcv_spkt;
|
||||||
@@ -3839,6 +3842,16 @@ packet_setsockopt(struct socket *sock, i
|
@@ -3843,6 +3846,16 @@ packet_setsockopt(struct socket *sock, i
|
||||||
po->xmit = val ? packet_direct_xmit : dev_queue_xmit;
|
po->xmit = val ? packet_direct_xmit : dev_queue_xmit;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -112,7 +112,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
default:
|
default:
|
||||||
return -ENOPROTOOPT;
|
return -ENOPROTOOPT;
|
||||||
}
|
}
|
||||||
@@ -3891,6 +3904,13 @@ static int packet_getsockopt(struct sock
|
@@ -3895,6 +3908,13 @@ static int packet_getsockopt(struct sock
|
||||||
case PACKET_VNET_HDR:
|
case PACKET_VNET_HDR:
|
||||||
val = po->has_vnet_hdr;
|
val = po->has_vnet_hdr;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -506,7 +506,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||||
+MODULE_ALIAS("nf-flow-table-hw");
|
+MODULE_ALIAS("nf-flow-table-hw");
|
||||||
--- a/net/netfilter/nf_tables_api.c
|
--- a/net/netfilter/nf_tables_api.c
|
||||||
+++ b/net/netfilter/nf_tables_api.c
|
+++ b/net/netfilter/nf_tables_api.c
|
||||||
@@ -5396,6 +5396,13 @@ static int nf_tables_flowtable_parse_hoo
|
@@ -5394,6 +5394,13 @@ static int nf_tables_flowtable_parse_hoo
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
@ -520,7 +520,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||||
ops = kcalloc(n, sizeof(struct nf_hook_ops), GFP_KERNEL);
|
ops = kcalloc(n, sizeof(struct nf_hook_ops), GFP_KERNEL);
|
||||||
if (!ops)
|
if (!ops)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
@@ -5527,10 +5534,19 @@ static int nf_tables_newflowtable(struct
|
@@ -5525,10 +5532,19 @@ static int nf_tables_newflowtable(struct
|
||||||
}
|
}
|
||||||
|
|
||||||
flowtable->data.type = type;
|
flowtable->data.type = type;
|
||||||
|
@ -540,7 +540,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||||
err = nf_tables_flowtable_parse_hook(&ctx, nla[NFTA_FLOWTABLE_HOOK],
|
err = nf_tables_flowtable_parse_hook(&ctx, nla[NFTA_FLOWTABLE_HOOK],
|
||||||
flowtable);
|
flowtable);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
@@ -5656,7 +5672,8 @@ static int nf_tables_fill_flowtable_info
|
@@ -5654,7 +5670,8 @@ static int nf_tables_fill_flowtable_info
|
||||||
nla_put_string(skb, NFTA_FLOWTABLE_NAME, flowtable->name) ||
|
nla_put_string(skb, NFTA_FLOWTABLE_NAME, flowtable->name) ||
|
||||||
nla_put_be32(skb, NFTA_FLOWTABLE_USE, htonl(flowtable->use)) ||
|
nla_put_be32(skb, NFTA_FLOWTABLE_USE, htonl(flowtable->use)) ||
|
||||||
nla_put_be64(skb, NFTA_FLOWTABLE_HANDLE, cpu_to_be64(flowtable->handle),
|
nla_put_be64(skb, NFTA_FLOWTABLE_HANDLE, cpu_to_be64(flowtable->handle),
|
||||||
|
|
|
@ -9,7 +9,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
|
|
||||||
--- a/include/linux/skbuff.h
|
--- a/include/linux/skbuff.h
|
||||||
+++ b/include/linux/skbuff.h
|
+++ b/include/linux/skbuff.h
|
||||||
@@ -2480,7 +2480,7 @@ static inline int pskb_network_may_pull(
|
@@ -2491,7 +2491,7 @@ static inline int pskb_network_may_pull(
|
||||||
* NET_IP_ALIGN(2) + ethernet_header(14) + IP_header(20/40) + ports(8)
|
* NET_IP_ALIGN(2) + ethernet_header(14) + IP_header(20/40) + ports(8)
|
||||||
*/
|
*/
|
||||||
#ifndef NET_SKB_PAD
|
#ifndef NET_SKB_PAD
|
||||||
|
|
|
@ -292,7 +292,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
|
||||||
__skb_tunnel_rx(skb, tunnel->dev, tunnel->net);
|
__skb_tunnel_rx(skb, tunnel->dev, tunnel->net);
|
||||||
|
|
||||||
err = dscp_ecn_decapsulate(tunnel, ipv6h, skb);
|
err = dscp_ecn_decapsulate(tunnel, ipv6h, skb);
|
||||||
@@ -955,6 +1094,7 @@ static void init_tel_txopt(struct ipv6_t
|
@@ -956,6 +1095,7 @@ static void init_tel_txopt(struct ipv6_t
|
||||||
opt->ops.opt_nflen = 8;
|
opt->ops.opt_nflen = 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -300,7 +300,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
|
||||||
/**
|
/**
|
||||||
* ip6_tnl_addr_conflict - compare packet addresses to tunnel's own
|
* ip6_tnl_addr_conflict - compare packet addresses to tunnel's own
|
||||||
* @t: the outgoing tunnel device
|
* @t: the outgoing tunnel device
|
||||||
@@ -1312,6 +1452,7 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, str
|
@@ -1309,6 +1449,7 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, str
|
||||||
{
|
{
|
||||||
struct ip6_tnl *t = netdev_priv(dev);
|
struct ip6_tnl *t = netdev_priv(dev);
|
||||||
struct ipv6hdr *ipv6h;
|
struct ipv6hdr *ipv6h;
|
||||||
|
@ -308,7 +308,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
|
||||||
int encap_limit = -1;
|
int encap_limit = -1;
|
||||||
__u16 offset;
|
__u16 offset;
|
||||||
struct flowi6 fl6;
|
struct flowi6 fl6;
|
||||||
@@ -1379,6 +1520,18 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, str
|
@@ -1373,6 +1514,18 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, str
|
||||||
|
|
||||||
fl6.flowi6_uid = sock_net_uid(dev_net(dev), NULL);
|
fl6.flowi6_uid = sock_net_uid(dev_net(dev), NULL);
|
||||||
|
|
||||||
|
@ -327,7 +327,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
|
||||||
if (iptunnel_handle_offloads(skb, SKB_GSO_IPXIP6))
|
if (iptunnel_handle_offloads(skb, SKB_GSO_IPXIP6))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
@@ -1507,6 +1660,14 @@ ip6_tnl_change(struct ip6_tnl *t, const
|
@@ -1504,6 +1657,14 @@ ip6_tnl_change(struct ip6_tnl *t, const
|
||||||
t->parms.link = p->link;
|
t->parms.link = p->link;
|
||||||
t->parms.proto = p->proto;
|
t->parms.proto = p->proto;
|
||||||
t->parms.fwmark = p->fwmark;
|
t->parms.fwmark = p->fwmark;
|
||||||
|
@ -342,7 +342,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
|
||||||
dst_cache_reset(&t->dst_cache);
|
dst_cache_reset(&t->dst_cache);
|
||||||
ip6_tnl_link_config(t);
|
ip6_tnl_link_config(t);
|
||||||
return 0;
|
return 0;
|
||||||
@@ -1545,6 +1706,7 @@ ip6_tnl_parm_from_user(struct __ip6_tnl_
|
@@ -1542,6 +1703,7 @@ ip6_tnl_parm_from_user(struct __ip6_tnl_
|
||||||
p->flowinfo = u->flowinfo;
|
p->flowinfo = u->flowinfo;
|
||||||
p->link = u->link;
|
p->link = u->link;
|
||||||
p->proto = u->proto;
|
p->proto = u->proto;
|
||||||
|
@ -350,7 +350,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
|
||||||
memcpy(p->name, u->name, sizeof(u->name));
|
memcpy(p->name, u->name, sizeof(u->name));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1931,6 +2093,15 @@ static int ip6_tnl_validate(struct nlatt
|
@@ -1928,6 +2090,15 @@ static int ip6_tnl_validate(struct nlatt
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -366,7 +366,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
|
||||||
static void ip6_tnl_netlink_parms(struct nlattr *data[],
|
static void ip6_tnl_netlink_parms(struct nlattr *data[],
|
||||||
struct __ip6_tnl_parm *parms)
|
struct __ip6_tnl_parm *parms)
|
||||||
{
|
{
|
||||||
@@ -1968,6 +2139,46 @@ static void ip6_tnl_netlink_parms(struct
|
@@ -1965,6 +2136,46 @@ static void ip6_tnl_netlink_parms(struct
|
||||||
|
|
||||||
if (data[IFLA_IPTUN_FWMARK])
|
if (data[IFLA_IPTUN_FWMARK])
|
||||||
parms->fwmark = nla_get_u32(data[IFLA_IPTUN_FWMARK]);
|
parms->fwmark = nla_get_u32(data[IFLA_IPTUN_FWMARK]);
|
||||||
|
@ -413,7 +413,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool ip6_tnl_netlink_encap_parms(struct nlattr *data[],
|
static bool ip6_tnl_netlink_encap_parms(struct nlattr *data[],
|
||||||
@@ -2083,6 +2294,12 @@ static void ip6_tnl_dellink(struct net_d
|
@@ -2080,6 +2291,12 @@ static void ip6_tnl_dellink(struct net_d
|
||||||
|
|
||||||
static size_t ip6_tnl_get_size(const struct net_device *dev)
|
static size_t ip6_tnl_get_size(const struct net_device *dev)
|
||||||
{
|
{
|
||||||
|
@ -426,7 +426,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
|
||||||
return
|
return
|
||||||
/* IFLA_IPTUN_LINK */
|
/* IFLA_IPTUN_LINK */
|
||||||
nla_total_size(4) +
|
nla_total_size(4) +
|
||||||
@@ -2112,6 +2329,24 @@ static size_t ip6_tnl_get_size(const str
|
@@ -2109,6 +2326,24 @@ static size_t ip6_tnl_get_size(const str
|
||||||
nla_total_size(0) +
|
nla_total_size(0) +
|
||||||
/* IFLA_IPTUN_FWMARK */
|
/* IFLA_IPTUN_FWMARK */
|
||||||
nla_total_size(4) +
|
nla_total_size(4) +
|
||||||
|
@ -451,7 +451,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
|
||||||
0;
|
0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2119,6 +2354,9 @@ static int ip6_tnl_fill_info(struct sk_b
|
@@ -2116,6 +2351,9 @@ static int ip6_tnl_fill_info(struct sk_b
|
||||||
{
|
{
|
||||||
struct ip6_tnl *tunnel = netdev_priv(dev);
|
struct ip6_tnl *tunnel = netdev_priv(dev);
|
||||||
struct __ip6_tnl_parm *parm = &tunnel->parms;
|
struct __ip6_tnl_parm *parm = &tunnel->parms;
|
||||||
|
@ -461,7 +461,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
|
||||||
|
|
||||||
if (nla_put_u32(skb, IFLA_IPTUN_LINK, parm->link) ||
|
if (nla_put_u32(skb, IFLA_IPTUN_LINK, parm->link) ||
|
||||||
nla_put_in6_addr(skb, IFLA_IPTUN_LOCAL, &parm->laddr) ||
|
nla_put_in6_addr(skb, IFLA_IPTUN_LOCAL, &parm->laddr) ||
|
||||||
@@ -2128,9 +2366,27 @@ static int ip6_tnl_fill_info(struct sk_b
|
@@ -2125,9 +2363,27 @@ static int ip6_tnl_fill_info(struct sk_b
|
||||||
nla_put_be32(skb, IFLA_IPTUN_FLOWINFO, parm->flowinfo) ||
|
nla_put_be32(skb, IFLA_IPTUN_FLOWINFO, parm->flowinfo) ||
|
||||||
nla_put_u32(skb, IFLA_IPTUN_FLAGS, parm->flags) ||
|
nla_put_u32(skb, IFLA_IPTUN_FLAGS, parm->flags) ||
|
||||||
nla_put_u8(skb, IFLA_IPTUN_PROTO, parm->proto) ||
|
nla_put_u8(skb, IFLA_IPTUN_PROTO, parm->proto) ||
|
||||||
|
@ -490,7 +490,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
|
||||||
if (nla_put_u16(skb, IFLA_IPTUN_ENCAP_TYPE, tunnel->encap.type) ||
|
if (nla_put_u16(skb, IFLA_IPTUN_ENCAP_TYPE, tunnel->encap.type) ||
|
||||||
nla_put_be16(skb, IFLA_IPTUN_ENCAP_SPORT, tunnel->encap.sport) ||
|
nla_put_be16(skb, IFLA_IPTUN_ENCAP_SPORT, tunnel->encap.sport) ||
|
||||||
nla_put_be16(skb, IFLA_IPTUN_ENCAP_DPORT, tunnel->encap.dport) ||
|
nla_put_be16(skb, IFLA_IPTUN_ENCAP_DPORT, tunnel->encap.dport) ||
|
||||||
@@ -2170,6 +2426,7 @@ static const struct nla_policy ip6_tnl_p
|
@@ -2167,6 +2423,7 @@ static const struct nla_policy ip6_tnl_p
|
||||||
[IFLA_IPTUN_ENCAP_DPORT] = { .type = NLA_U16 },
|
[IFLA_IPTUN_ENCAP_DPORT] = { .type = NLA_U16 },
|
||||||
[IFLA_IPTUN_COLLECT_METADATA] = { .type = NLA_FLAG },
|
[IFLA_IPTUN_COLLECT_METADATA] = { .type = NLA_FLAG },
|
||||||
[IFLA_IPTUN_FWMARK] = { .type = NLA_U32 },
|
[IFLA_IPTUN_FWMARK] = { .type = NLA_U32 },
|
||||||
|
|
|
@ -76,7 +76,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||||
static inline const char *rtn_type(char *buf, size_t len, unsigned int t)
|
static inline const char *rtn_type(char *buf, size_t len, unsigned int t)
|
||||||
--- a/net/ipv4/ipmr.c
|
--- a/net/ipv4/ipmr.c
|
||||||
+++ b/net/ipv4/ipmr.c
|
+++ b/net/ipv4/ipmr.c
|
||||||
@@ -177,6 +177,7 @@ static int ipmr_rule_action(struct fib_r
|
@@ -179,6 +179,7 @@ static int ipmr_rule_action(struct fib_r
|
||||||
case FR_ACT_UNREACHABLE:
|
case FR_ACT_UNREACHABLE:
|
||||||
return -ENETUNREACH;
|
return -ENETUNREACH;
|
||||||
case FR_ACT_PROHIBIT:
|
case FR_ACT_PROHIBIT:
|
||||||
|
@ -99,7 +99,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||||
tb_id = fib_rule_get_table(rule, arg);
|
tb_id = fib_rule_get_table(rule, arg);
|
||||||
--- a/net/ipv6/ip6mr.c
|
--- a/net/ipv6/ip6mr.c
|
||||||
+++ b/net/ipv6/ip6mr.c
|
+++ b/net/ipv6/ip6mr.c
|
||||||
@@ -159,6 +159,8 @@ static int ip6mr_rule_action(struct fib_
|
@@ -162,6 +162,8 @@ static int ip6mr_rule_action(struct fib_
|
||||||
return -ENETUNREACH;
|
return -ENETUNREACH;
|
||||||
case FR_ACT_PROHIBIT:
|
case FR_ACT_PROHIBIT:
|
||||||
return -EACCES;
|
return -EACCES;
|
||||||
|
@ -119,7 +119,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||||
static void ip6_link_failure(struct sk_buff *skb);
|
static void ip6_link_failure(struct sk_buff *skb);
|
||||||
static void ip6_rt_update_pmtu(struct dst_entry *dst, struct sock *sk,
|
static void ip6_rt_update_pmtu(struct dst_entry *dst, struct sock *sk,
|
||||||
struct sk_buff *skb, u32 mtu);
|
struct sk_buff *skb, u32 mtu);
|
||||||
@@ -324,6 +326,18 @@ static const struct rt6_info ip6_prohibi
|
@@ -326,6 +328,18 @@ static const struct rt6_info ip6_prohibi
|
||||||
.rt6i_flags = (RTF_REJECT | RTF_NONEXTHOP),
|
.rt6i_flags = (RTF_REJECT | RTF_NONEXTHOP),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -138,7 +138,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||||
static const struct rt6_info ip6_blk_hole_entry_template = {
|
static const struct rt6_info ip6_blk_hole_entry_template = {
|
||||||
.dst = {
|
.dst = {
|
||||||
.__refcnt = ATOMIC_INIT(1),
|
.__refcnt = ATOMIC_INIT(1),
|
||||||
@@ -901,6 +915,7 @@ static const int fib6_prop[RTN_MAX + 1]
|
@@ -903,6 +917,7 @@ static const int fib6_prop[RTN_MAX + 1]
|
||||||
[RTN_BLACKHOLE] = -EINVAL,
|
[RTN_BLACKHOLE] = -EINVAL,
|
||||||
[RTN_UNREACHABLE] = -EHOSTUNREACH,
|
[RTN_UNREACHABLE] = -EHOSTUNREACH,
|
||||||
[RTN_PROHIBIT] = -EACCES,
|
[RTN_PROHIBIT] = -EACCES,
|
||||||
|
@ -146,7 +146,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||||
[RTN_THROW] = -EAGAIN,
|
[RTN_THROW] = -EAGAIN,
|
||||||
[RTN_NAT] = -EINVAL,
|
[RTN_NAT] = -EINVAL,
|
||||||
[RTN_XRESOLVE] = -EINVAL,
|
[RTN_XRESOLVE] = -EINVAL,
|
||||||
@@ -938,6 +953,10 @@ static void ip6_rt_init_dst_reject(struc
|
@@ -940,6 +955,10 @@ static void ip6_rt_init_dst_reject(struc
|
||||||
rt->dst.output = ip6_pkt_prohibit_out;
|
rt->dst.output = ip6_pkt_prohibit_out;
|
||||||
rt->dst.input = ip6_pkt_prohibit;
|
rt->dst.input = ip6_pkt_prohibit;
|
||||||
break;
|
break;
|
||||||
|
@ -157,7 +157,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||||
case RTN_THROW:
|
case RTN_THROW:
|
||||||
case RTN_UNREACHABLE:
|
case RTN_UNREACHABLE:
|
||||||
default:
|
default:
|
||||||
@@ -3745,6 +3764,17 @@ static int ip6_pkt_prohibit_out(struct n
|
@@ -3747,6 +3766,17 @@ static int ip6_pkt_prohibit_out(struct n
|
||||||
return ip6_pkt_drop(skb, ICMPV6_ADM_PROHIBITED, IPSTATS_MIB_OUTNOROUTES);
|
return ip6_pkt_drop(skb, ICMPV6_ADM_PROHIBITED, IPSTATS_MIB_OUTNOROUTES);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -175,7 +175,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||||
/*
|
/*
|
||||||
* Allocate a dst for local (unicast / anycast) address.
|
* Allocate a dst for local (unicast / anycast) address.
|
||||||
*/
|
*/
|
||||||
@@ -4192,7 +4222,8 @@ static int rtm_to_fib6_config(struct sk_
|
@@ -4194,7 +4224,8 @@ static int rtm_to_fib6_config(struct sk_
|
||||||
if (rtm->rtm_type == RTN_UNREACHABLE ||
|
if (rtm->rtm_type == RTN_UNREACHABLE ||
|
||||||
rtm->rtm_type == RTN_BLACKHOLE ||
|
rtm->rtm_type == RTN_BLACKHOLE ||
|
||||||
rtm->rtm_type == RTN_PROHIBIT ||
|
rtm->rtm_type == RTN_PROHIBIT ||
|
||||||
|
@ -185,7 +185,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||||
cfg->fc_flags |= RTF_REJECT;
|
cfg->fc_flags |= RTF_REJECT;
|
||||||
|
|
||||||
if (rtm->rtm_type == RTN_LOCAL)
|
if (rtm->rtm_type == RTN_LOCAL)
|
||||||
@@ -5031,6 +5062,8 @@ static int ip6_route_dev_notify(struct n
|
@@ -5033,6 +5064,8 @@ static int ip6_route_dev_notify(struct n
|
||||||
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
||||||
net->ipv6.ip6_prohibit_entry->dst.dev = dev;
|
net->ipv6.ip6_prohibit_entry->dst.dev = dev;
|
||||||
net->ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(dev);
|
net->ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(dev);
|
||||||
|
@ -194,7 +194,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||||
net->ipv6.ip6_blk_hole_entry->dst.dev = dev;
|
net->ipv6.ip6_blk_hole_entry->dst.dev = dev;
|
||||||
net->ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(dev);
|
net->ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(dev);
|
||||||
#endif
|
#endif
|
||||||
@@ -5042,6 +5075,7 @@ static int ip6_route_dev_notify(struct n
|
@@ -5044,6 +5077,7 @@ static int ip6_route_dev_notify(struct n
|
||||||
in6_dev_put_clear(&net->ipv6.ip6_null_entry->rt6i_idev);
|
in6_dev_put_clear(&net->ipv6.ip6_null_entry->rt6i_idev);
|
||||||
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
||||||
in6_dev_put_clear(&net->ipv6.ip6_prohibit_entry->rt6i_idev);
|
in6_dev_put_clear(&net->ipv6.ip6_prohibit_entry->rt6i_idev);
|
||||||
|
@ -202,7 +202,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||||
in6_dev_put_clear(&net->ipv6.ip6_blk_hole_entry->rt6i_idev);
|
in6_dev_put_clear(&net->ipv6.ip6_blk_hole_entry->rt6i_idev);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -5236,6 +5270,15 @@ static int __net_init ip6_route_net_init
|
@@ -5238,6 +5272,15 @@ static int __net_init ip6_route_net_init
|
||||||
net->ipv6.ip6_blk_hole_entry->dst.ops = &net->ipv6.ip6_dst_ops;
|
net->ipv6.ip6_blk_hole_entry->dst.ops = &net->ipv6.ip6_dst_ops;
|
||||||
dst_init_metrics(&net->ipv6.ip6_blk_hole_entry->dst,
|
dst_init_metrics(&net->ipv6.ip6_blk_hole_entry->dst,
|
||||||
ip6_template_metrics, true);
|
ip6_template_metrics, true);
|
||||||
|
@ -218,7 +218,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
net->ipv6.sysctl.flush_delay = 0;
|
net->ipv6.sysctl.flush_delay = 0;
|
||||||
@@ -5254,6 +5297,8 @@ out:
|
@@ -5256,6 +5299,8 @@ out:
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
||||||
|
@ -227,7 +227,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||||
out_ip6_prohibit_entry:
|
out_ip6_prohibit_entry:
|
||||||
kfree(net->ipv6.ip6_prohibit_entry);
|
kfree(net->ipv6.ip6_prohibit_entry);
|
||||||
out_ip6_null_entry:
|
out_ip6_null_entry:
|
||||||
@@ -5274,6 +5319,7 @@ static void __net_exit ip6_route_net_exi
|
@@ -5276,6 +5321,7 @@ static void __net_exit ip6_route_net_exi
|
||||||
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
||||||
kfree(net->ipv6.ip6_prohibit_entry);
|
kfree(net->ipv6.ip6_prohibit_entry);
|
||||||
kfree(net->ipv6.ip6_blk_hole_entry);
|
kfree(net->ipv6.ip6_blk_hole_entry);
|
||||||
|
@ -235,7 +235,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||||
#endif
|
#endif
|
||||||
dst_entries_destroy(&net->ipv6.ip6_dst_ops);
|
dst_entries_destroy(&net->ipv6.ip6_dst_ops);
|
||||||
}
|
}
|
||||||
@@ -5350,6 +5396,9 @@ void __init ip6_route_init_special_entri
|
@@ -5352,6 +5398,9 @@ void __init ip6_route_init_special_entri
|
||||||
init_net.ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
|
init_net.ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
|
||||||
init_net.ipv6.ip6_blk_hole_entry->dst.dev = init_net.loopback_dev;
|
init_net.ipv6.ip6_blk_hole_entry->dst.dev = init_net.loopback_dev;
|
||||||
init_net.ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
|
init_net.ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
|
||||||
|
|
|
@ -32,7 +32,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
__u16 tc_index; /* traffic control index */
|
__u16 tc_index; /* traffic control index */
|
||||||
--- a/net/core/dev.c
|
--- a/net/core/dev.c
|
||||||
+++ b/net/core/dev.c
|
+++ b/net/core/dev.c
|
||||||
@@ -5447,6 +5447,9 @@ static enum gro_result dev_gro_receive(s
|
@@ -5452,6 +5452,9 @@ static enum gro_result dev_gro_receive(s
|
||||||
int same_flow;
|
int same_flow;
|
||||||
int grow;
|
int grow;
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
if (netif_elide_gro(skb->dev))
|
if (netif_elide_gro(skb->dev))
|
||||||
goto normal;
|
goto normal;
|
||||||
|
|
||||||
@@ -6941,6 +6944,48 @@ static void __netdev_adjacent_dev_unlink
|
@@ -6946,6 +6949,48 @@ static void __netdev_adjacent_dev_unlink
|
||||||
&upper_dev->adj_list.lower);
|
&upper_dev->adj_list.lower);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,7 +91,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
static int __netdev_upper_dev_link(struct net_device *dev,
|
static int __netdev_upper_dev_link(struct net_device *dev,
|
||||||
struct net_device *upper_dev, bool master,
|
struct net_device *upper_dev, bool master,
|
||||||
void *upper_priv, void *upper_info,
|
void *upper_priv, void *upper_info,
|
||||||
@@ -6988,6 +7033,7 @@ static int __netdev_upper_dev_link(struc
|
@@ -6993,6 +7038,7 @@ static int __netdev_upper_dev_link(struc
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
@ -99,7 +99,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
ret = call_netdevice_notifiers_info(NETDEV_CHANGEUPPER,
|
ret = call_netdevice_notifiers_info(NETDEV_CHANGEUPPER,
|
||||||
&changeupper_info.info);
|
&changeupper_info.info);
|
||||||
ret = notifier_to_errno(ret);
|
ret = notifier_to_errno(ret);
|
||||||
@@ -7074,6 +7120,7 @@ void netdev_upper_dev_unlink(struct net_
|
@@ -7079,6 +7125,7 @@ void netdev_upper_dev_unlink(struct net_
|
||||||
|
|
||||||
__netdev_adjacent_dev_unlink_neighbour(dev, upper_dev);
|
__netdev_adjacent_dev_unlink_neighbour(dev, upper_dev);
|
||||||
|
|
||||||
|
@ -107,7 +107,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
call_netdevice_notifiers_info(NETDEV_CHANGEUPPER,
|
call_netdevice_notifiers_info(NETDEV_CHANGEUPPER,
|
||||||
&changeupper_info.info);
|
&changeupper_info.info);
|
||||||
}
|
}
|
||||||
@@ -7697,6 +7744,7 @@ int dev_set_mac_address(struct net_devic
|
@@ -7702,6 +7749,7 @@ int dev_set_mac_address(struct net_devic
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
dev->addr_assign_type = NET_ADDR_SET;
|
dev->addr_assign_type = NET_ADDR_SET;
|
||||||
|
|
|
@ -11,7 +11,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
|
|
||||||
--- a/drivers/net/phy/phy_device.c
|
--- a/drivers/net/phy/phy_device.c
|
||||||
+++ b/drivers/net/phy/phy_device.c
|
+++ b/drivers/net/phy/phy_device.c
|
||||||
@@ -1133,6 +1133,9 @@ void phy_detach(struct phy_device *phyde
|
@@ -1130,6 +1130,9 @@ void phy_detach(struct phy_device *phyde
|
||||||
struct module *ndev_owner = dev->dev.parent->driver->owner;
|
struct module *ndev_owner = dev->dev.parent->driver->owner;
|
||||||
struct mii_bus *bus;
|
struct mii_bus *bus;
|
||||||
|
|
||||||
|
|
|
@ -65,7 +65,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||||
/**
|
/**
|
||||||
* ata_build_rw_tf - Build ATA taskfile for given read/write request
|
* ata_build_rw_tf - Build ATA taskfile for given read/write request
|
||||||
* @tf: Target ATA taskfile
|
* @tf: Target ATA taskfile
|
||||||
@@ -5129,6 +5142,9 @@ struct ata_queued_cmd *ata_qc_new_init(s
|
@@ -5130,6 +5143,9 @@ struct ata_queued_cmd *ata_qc_new_init(s
|
||||||
if (tag < 0)
|
if (tag < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -75,7 +75,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||||
|
|
||||||
qc = __ata_qc_from_tag(ap, tag);
|
qc = __ata_qc_from_tag(ap, tag);
|
||||||
qc->tag = qc->hw_tag = tag;
|
qc->tag = qc->hw_tag = tag;
|
||||||
@@ -6039,6 +6055,9 @@ struct ata_port *ata_port_alloc(struct a
|
@@ -6040,6 +6056,9 @@ struct ata_port *ata_port_alloc(struct a
|
||||||
ap->stats.unhandled_irq = 1;
|
ap->stats.unhandled_irq = 1;
|
||||||
ap->stats.idle_irq = 1;
|
ap->stats.idle_irq = 1;
|
||||||
#endif
|
#endif
|
||||||
|
@ -85,7 +85,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||||
ata_sff_port_init(ap);
|
ata_sff_port_init(ap);
|
||||||
|
|
||||||
return ap;
|
return ap;
|
||||||
@@ -6074,6 +6093,12 @@ static void ata_host_release(struct kref
|
@@ -6075,6 +6094,12 @@ static void ata_host_release(struct kref
|
||||||
|
|
||||||
kfree(ap->pmp_link);
|
kfree(ap->pmp_link);
|
||||||
kfree(ap->slave_link);
|
kfree(ap->slave_link);
|
||||||
|
@ -98,7 +98,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||||
kfree(ap);
|
kfree(ap);
|
||||||
host->ports[i] = NULL;
|
host->ports[i] = NULL;
|
||||||
}
|
}
|
||||||
@@ -6537,7 +6562,23 @@ int ata_host_register(struct ata_host *h
|
@@ -6538,7 +6563,23 @@ int ata_host_register(struct ata_host *h
|
||||||
host->ports[i]->print_id = atomic_inc_return(&ata_print_id);
|
host->ports[i]->print_id = atomic_inc_return(&ata_print_id);
|
||||||
host->ports[i]->local_port_no = i + 1;
|
host->ports[i]->local_port_no = i + 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
||||||
|
|
||||||
--- a/init/Kconfig
|
--- a/init/Kconfig
|
||||||
+++ b/init/Kconfig
|
+++ b/init/Kconfig
|
||||||
@@ -1522,6 +1522,15 @@ config EMBEDDED
|
@@ -1527,6 +1527,15 @@ config EMBEDDED
|
||||||
an embedded system so certain expert options are available
|
an embedded system so certain expert options are available
|
||||||
for configuration.
|
for configuration.
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/drivers/mtd/spi-nor/spi-nor.c
|
--- a/drivers/mtd/spi-nor/spi-nor.c
|
||||||
+++ b/drivers/mtd/spi-nor/spi-nor.c
|
+++ b/drivers/mtd/spi-nor/spi-nor.c
|
||||||
@@ -1091,6 +1091,7 @@ static const struct flash_info spi_nor_i
|
@@ -1092,6 +1092,7 @@ static const struct flash_info spi_nor_i
|
||||||
{ "mx25l12805d", INFO(0xc22018, 0, 64 * 1024, 256, 0) },
|
{ "mx25l12805d", INFO(0xc22018, 0, 64 * 1024, 256, 0) },
|
||||||
{ "mx25l12855e", INFO(0xc22618, 0, 64 * 1024, 256, 0) },
|
{ "mx25l12855e", INFO(0xc22618, 0, 64 * 1024, 256, 0) },
|
||||||
{ "mx25l25635e", INFO(0xc22019, 0, 64 * 1024, 512, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
|
{ "mx25l25635e", INFO(0xc22019, 0, 64 * 1024, 512, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
|
||||||
|
@ -8,7 +8,7 @@
|
||||||
{ "mx25u25635f", INFO(0xc22539, 0, 64 * 1024, 512, SECT_4K | SPI_NOR_4B_OPCODES) },
|
{ "mx25u25635f", INFO(0xc22539, 0, 64 * 1024, 512, SECT_4K | SPI_NOR_4B_OPCODES) },
|
||||||
{ "mx25l25655e", INFO(0xc22619, 0, 64 * 1024, 512, 0) },
|
{ "mx25l25655e", INFO(0xc22619, 0, 64 * 1024, 512, 0) },
|
||||||
{ "mx66l51235l", INFO(0xc2201a, 0, 64 * 1024, 1024, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
|
{ "mx66l51235l", INFO(0xc2201a, 0, 64 * 1024, 1024, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
|
||||||
@@ -1273,11 +1274,12 @@ static const struct flash_info spi_nor_i
|
@@ -1274,11 +1275,12 @@ static const struct flash_info spi_nor_i
|
||||||
{ },
|
{ },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@
|
||||||
|
|
||||||
tmp = nor->read_reg(nor, SPINOR_OP_RDID, id, SPI_NOR_MAX_ID_LEN);
|
tmp = nor->read_reg(nor, SPINOR_OP_RDID, id, SPI_NOR_MAX_ID_LEN);
|
||||||
if (tmp < 0) {
|
if (tmp < 0) {
|
||||||
@@ -1288,10 +1290,16 @@ static const struct flash_info *spi_nor_
|
@@ -1289,10 +1291,16 @@ static const struct flash_info *spi_nor_
|
||||||
for (tmp = 0; tmp < ARRAY_SIZE(spi_nor_ids) - 1; tmp++) {
|
for (tmp = 0; tmp < ARRAY_SIZE(spi_nor_ids) - 1; tmp++) {
|
||||||
info = &spi_nor_ids[tmp];
|
info = &spi_nor_ids[tmp];
|
||||||
if (info->id_len) {
|
if (info->id_len) {
|
||||||
|
@ -42,7 +42,7 @@
|
||||||
dev_err(nor->dev, "unrecognized JEDEC id bytes: %02x, %02x, %02x\n",
|
dev_err(nor->dev, "unrecognized JEDEC id bytes: %02x, %02x, %02x\n",
|
||||||
id[0], id[1], id[2]);
|
id[0], id[1], id[2]);
|
||||||
return ERR_PTR(-ENODEV);
|
return ERR_PTR(-ENODEV);
|
||||||
@@ -2825,7 +2833,7 @@ int spi_nor_scan(struct spi_nor *nor, co
|
@@ -2826,7 +2834,7 @@ int spi_nor_scan(struct spi_nor *nor, co
|
||||||
info = spi_nor_match_id(name);
|
info = spi_nor_match_id(name);
|
||||||
/* Try to auto-detect if chip name wasn't specified or not found */
|
/* Try to auto-detect if chip name wasn't specified or not found */
|
||||||
if (!info)
|
if (!info)
|
||||||
|
@ -51,7 +51,7 @@
|
||||||
if (IS_ERR_OR_NULL(info))
|
if (IS_ERR_OR_NULL(info))
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
|
|
||||||
@@ -2836,7 +2844,7 @@ int spi_nor_scan(struct spi_nor *nor, co
|
@@ -2837,7 +2845,7 @@ int spi_nor_scan(struct spi_nor *nor, co
|
||||||
if (name && info->id_len) {
|
if (name && info->id_len) {
|
||||||
const struct flash_info *jinfo;
|
const struct flash_info *jinfo;
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
|
|
||||||
--- a/arch/powerpc/boot/Makefile
|
--- a/arch/powerpc/boot/Makefile
|
||||||
+++ b/arch/powerpc/boot/Makefile
|
+++ b/arch/powerpc/boot/Makefile
|
||||||
@@ -159,6 +159,7 @@ src-plat-$(CONFIG_PPC_PSERIES) += pserie
|
@@ -164,6 +164,7 @@ src-plat-$(CONFIG_PPC_PSERIES) += pserie
|
||||||
src-plat-$(CONFIG_PPC_POWERNV) += pseries-head.S
|
src-plat-$(CONFIG_PPC_POWERNV) += pseries-head.S
|
||||||
src-plat-$(CONFIG_PPC_IBM_CELL_BLADE) += pseries-head.S
|
src-plat-$(CONFIG_PPC_IBM_CELL_BLADE) += pseries-head.S
|
||||||
src-plat-$(CONFIG_MVME7100) += motload-head.S mvme7100.c
|
src-plat-$(CONFIG_MVME7100) += motload-head.S mvme7100.c
|
||||||
|
@ -25,7 +25,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
|
|
||||||
src-wlib := $(sort $(src-wlib-y))
|
src-wlib := $(sort $(src-wlib-y))
|
||||||
src-plat := $(sort $(src-plat-y))
|
src-plat := $(sort $(src-plat-y))
|
||||||
@@ -338,7 +338,7 @@ image-$(CONFIG_TQM8555) += cuImage.tqm
|
@@ -343,7 +344,7 @@ image-$(CONFIG_TQM8555) += cuImage.tqm
|
||||||
image-$(CONFIG_TQM8560) += cuImage.tqm8560
|
image-$(CONFIG_TQM8560) += cuImage.tqm8560
|
||||||
image-$(CONFIG_SBC8548) += cuImage.sbc8548
|
image-$(CONFIG_SBC8548) += cuImage.sbc8548
|
||||||
image-$(CONFIG_KSI8560) += cuImage.ksi8560
|
image-$(CONFIG_KSI8560) += cuImage.ksi8560
|
||||||
|
@ -49,9 +49,9 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
;;
|
;;
|
||||||
--- a/arch/powerpc/platforms/85xx/Kconfig
|
--- a/arch/powerpc/platforms/85xx/Kconfig
|
||||||
+++ b/arch/powerpc/platforms/85xx/Kconfig
|
+++ b/arch/powerpc/platforms/85xx/Kconfig
|
||||||
@@ -170,6 +181,18 @@ config STX_GP3
|
@@ -170,6 +170,18 @@ config STX_GP3
|
||||||
select CPM2
|
select CPM2
|
||||||
select DEFAULT_UIMAGE
|
select DEFAULT_UIMAGE
|
||||||
|
|
||||||
+config TL_WDR4900_V1
|
+config TL_WDR4900_V1
|
||||||
+ bool "TP-Link TL-WDR4900 v1"
|
+ bool "TP-Link TL-WDR4900 v1"
|
||||||
|
@ -66,8 +66,8 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
+ Freescale P1014 SoC.
|
+ Freescale P1014 SoC.
|
||||||
+
|
+
|
||||||
config TQM8540
|
config TQM8540
|
||||||
bool "TQ Components TQM8540"
|
bool "TQ Components TQM8540"
|
||||||
help
|
help
|
||||||
--- a/arch/powerpc/platforms/85xx/Makefile
|
--- a/arch/powerpc/platforms/85xx/Makefile
|
||||||
+++ b/arch/powerpc/platforms/85xx/Makefile
|
+++ b/arch/powerpc/platforms/85xx/Makefile
|
||||||
@@ -26,6 +26,7 @@ obj-$(CONFIG_CORENET_GENERIC) += coren
|
@@ -26,6 +26,7 @@ obj-$(CONFIG_CORENET_GENERIC) += coren
|
||||||
|
|
Loading…
Reference in New Issue