forked from Ivasoft/openwrt
kernel: add support for kernel 5.4
The following patches were removed because they are integrated in the upstream kernel 5.4: * backport-5.4/047-v4.21-mtd-keep-original-flags-for-every-struct-mtd_info.patch * backport-5.4/048-v4.21-mtd-improve-calculating-partition-boundaries-when-ch.patch * backport-5.4/080-v5.1-0001-bcma-keep-a-direct-pointer-to-the-struct-device.patch * backport-5.4/080-v5.1-0002-bcma-use-dev_-printing-functions.patch * backport-5.4/095-Allow-class-e-address-assignment-via-ifconfig-ioctl.patch * backport-5.4/101-arm-cns3xxx-use-actual-size-reads-for-PCIe.patch * backport-5.4/200-v5.2-usb-dwc2-Set-lpm-mode-parameters-depend-on-HW-configuration.patch * backport-5.4/210-arm64-sve-Disentangle-uapi-asm-ptrace.h-from-uapi-as.patch * backport-5.4/380-v5.3-net-sched-Introduce-act_ctinfo-action.patch * backport-5.4/450-v5.0-mtd-spinand-winbond-Add-support-for-W25N01GV.patch * backport-5.4/451-v5.0-mtd-spinand-Add-initial-support-for-Toshiba-TC58CVG2.patch * backport-5.4/452-v5.0-mtd-spinand-add-support-for-GigaDevice-GD5FxGQ4xA.patch * backport-5.4/455-v5.1-mtd-spinand-Add-support-for-all-Toshiba-Memory-produ.patch * backport-5.4/456-v5.1-mtd-spinand-Add-support-for-GigaDevice-GD5F1GQ4UExxG.patch * backport-5.4/460-v5.0-mtd-spi-nor-Add-support-for-mx25u12835f.patch * backport-5.4/460-v5.3-mtd-spinand-Define-macros-for-page-read-ops-with-thr.patch * backport-5.4/461-v5.3-mtd-spinand-Add-support-for-two-byte-device-IDs.patch * backport-5.4/462-v5.3-mtd-spinand-Add-support-for-GigaDevice-GD5F1GQ4UFxxG.patch * backport-5.4/463-v5.3-mtd-spinand-Add-initial-support-for-Paragon-PN26G0xA.patch * backport-5.4/700-v5.1-net-phylink-only-call-mac_config-during-resolve-when.patch * backport-5.4/701-v5.2-net-phylink-ensure-inband-AN-works-correctly.patch * backport-5.4/702-v4.20-net-ethernet-Add-helper-for-MACs-which-support-asym-.patch * backport-5.4/703-v4.20-net-ethernet-Add-helper-for-set_pauseparam-for-Asym-.patch * backport-5.4/704-v4.20-net-phy-Stop-with-excessive-soft-reset.patch * backport-5.4/705-v5.1-net-phy-provide-full-set-of-accessor-functions-to-MM.patch * backport-5.4/706-v5.1-net-phy-add-register-modifying-helpers-returning-1-o.patch * backport-5.4/707-v5.1-net-phy-add-genphy_c45_check_and_restart_aneg.patch * backport-5.4/708-v5.3-net-phylink-remove-netdev-from-phylink-mii-ioctl-emu.patch * backport-5.4/709-v5.3-net-phylink-support-for-link-gpio-interrupt.patch * backport-5.4/710-v5.3-net-phy-allow-Clause-45-access-via-mii-ioctl.patch * backport-5.4/711-v5.3-net-sfp-add-mandatory-attach-detach-methods-for-sfp-.patch * backport-5.4/712-v5.3-net-sfp-remove-sfp-bus-use-of-netdevs.patch * backport-5.4/713-v5.2-net-phylink-avoid-reducing-support-mask.patch * backport-5.4/714-v5.3-net-sfp-Stop-SFP-polling-and-interrupt-handling-duri.patch * backport-5.4/715-v5.3-net-phylink-don-t-start-and-stop-SGMII-PHYs-in-SFP-m.patch * backport-5.4/740-v5.5-net-phy-avoid-matching-all-ones-clause-45-PHY-IDs.patch * backport-5.4/741-v5.5-net-phylink-fix-link-mode-modification-in-PHY-mode.patch * pending-5.4/103-MIPS-perf-ath79-Fix-perfcount-IRQ-assignment.patch * pending-5.4/131-spi-use-gpio_set_value_cansleep-for-setting-chipsele.patch * pending-5.4/132-spi-spi-gpio-fix-crash-when-num-chipselects-is-0.patch * pending-5.4/220-optimize_inlining.patch * pending-5.4/341-MIPS-mm-remove-no-op-dma_map_ops-where-possible.patch * pending-5.4/475-mtd-spi-nor-Add-Winbond-w25q128jv-support.patch * pending-5.4/477-mtd-add-spi-nor-add-mx25u3235f.patch * pending-5.4/479-mtd-spi-nor-add-eon-en25qh64.patch Some bigger changes were done to this feature and we did not port this patch yet: * hack-5.4/207-disable-modorder.patch This depends on BOOTMEM which was removed from the kernel, this needs some bigger changes: * hack-5.4/930-crashlog.patch A different version of the FPU disable patch was merged upstream, OpenWrt needs some adaptations. * pending-5.4/304-mips_disable_fpu.patch - no crashlog support yet as a required file got deleted upstream - Removed patch below, which is now seen as a recursive dependency [1] - Removed patch below due to build error [2] - fix still required to avoid identical function def [3] - Fixes included from Blocktrron - Fixes included from Chunkeey - Fix included from nbd regarding "dst leak in Flow Offload" [1] target/linux/generic/hack-5.4/260-crypto_test_dependencies.patch [2] target/linux/generic/hack-5.4/207-disable-modorder.patch [3] target/linux/generic/pending-5.4/613-netfilter_optional_tcp_window_check.patch Signed-off-by: Koen Vandeputte <koen.vandeputte@ncentric.com> Signed-off-by: David Bauer <mail@david-bauer.net> Signed-off-by: Christian Lamparter <chunkeey@gmail.com> Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com> Signed-off-by: Robert Marko <robimarko@gmail.com> Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit is contained in:
@@ -14,7 +14,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/include/linux/module.h
|
||||
+++ b/include/linux/module.h
|
||||
@@ -160,6 +160,7 @@ extern void cleanup_module(void);
|
||||
@@ -157,6 +157,7 @@ extern void cleanup_module(void);
|
||||
|
||||
/* Generic info of form tag = "info" */
|
||||
#define MODULE_INFO(tag, info) __MODULE_INFO(tag, tag, info)
|
||||
@@ -22,7 +22,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
/* For userspace: you can also call me... */
|
||||
#define MODULE_ALIAS(_alias) MODULE_INFO(alias, _alias)
|
||||
@@ -203,12 +204,12 @@ extern void cleanup_module(void);
|
||||
@@ -216,12 +217,12 @@ extern void cleanup_module(void);
|
||||
* Author(s), use "Name <email>" or just "Name", for multiple
|
||||
* authors use multiple MODULE_AUTHOR() statements/lines.
|
||||
*/
|
||||
@@ -38,7 +38,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
/* Creates an alias so file2alias.c can find device table. */
|
||||
#define MODULE_DEVICE_TABLE(type, name) \
|
||||
extern typeof(name) __mod_##type##__##name##_device_table \
|
||||
@@ -235,7 +236,9 @@ extern typeof(name) __mod_##type##__##na
|
||||
@@ -248,7 +249,9 @@ extern typeof(name) __mod_##type##__##na
|
||||
*/
|
||||
|
||||
#if defined(MODULE) || !defined(CONFIG_SYSFS)
|
||||
@@ -48,19 +48,19 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
+#define MODULE_VERSION(_version) __MODULE_INFO_DISABLED(version)
|
||||
#else
|
||||
#define MODULE_VERSION(_version) \
|
||||
static struct module_version_attribute ___modver_attr = { \
|
||||
@@ -257,7 +260,7 @@ extern typeof(name) __mod_##type##__##na
|
||||
MODULE_INFO(version, _version); \
|
||||
@@ -271,7 +274,7 @@ extern typeof(name) __mod_##type##__##na
|
||||
/* Optional firmware file (or files) needed by the module
|
||||
* format is simply firmware file name. Multiple firmware
|
||||
* files require multiple MODULE_FIRMWARE() specifiers */
|
||||
-#define MODULE_FIRMWARE(_firmware) MODULE_INFO(firmware, _firmware)
|
||||
+#define MODULE_FIRMWARE(_firmware) MODULE_INFO_STRIP(firmware, _firmware)
|
||||
|
||||
struct notifier_block;
|
||||
#define MODULE_IMPORT_NS(ns) MODULE_INFO(import_ns, #ns)
|
||||
|
||||
--- a/include/linux/moduleparam.h
|
||||
+++ b/include/linux/moduleparam.h
|
||||
@@ -17,6 +17,16 @@
|
||||
@@ -20,10 +20,24 @@
|
||||
/* Chosen so that structs with an unsigned long line up. */
|
||||
#define MAX_PARAM_PREFIX_LEN (64 - sizeof(unsigned long))
|
||||
|
||||
@@ -74,20 +74,18 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
+#define __MODULE_INFO_STRIP(tag, name, info) __MODULE_INFO(tag, name, info)
|
||||
+#endif
|
||||
+
|
||||
#ifdef MODULE
|
||||
+#ifdef MODULE
|
||||
#define __MODULE_INFO(tag, name, info) \
|
||||
static const char __UNIQUE_ID(name)[] \
|
||||
@@ -24,8 +34,7 @@ static const char __UNIQUE_ID(name)[]
|
||||
= __stringify(tag) "=" info
|
||||
#else /* !MODULE */
|
||||
/* This struct is here for syntactic coherency, it is not used */
|
||||
-#define __MODULE_INFO(tag, name, info) \
|
||||
- struct __UNIQUE_ID(name) {}
|
||||
__used __attribute__((section(".modinfo"), unused, aligned(1))) \
|
||||
= __MODULE_INFO_PREFIX __stringify(tag) "=" info
|
||||
+#else
|
||||
+#define __MODULE_INFO(tag, name, info) __MODULE_INFO_DISABLED(name)
|
||||
#endif
|
||||
+#endif
|
||||
|
||||
#define __MODULE_PARM_TYPE(name, _type) \
|
||||
__MODULE_INFO(parmtype, name##type, #name ":" _type)
|
||||
@@ -33,7 +42,7 @@ static const char __UNIQUE_ID(name)[]
|
||||
@@ -31,7 +45,7 @@ static const char __UNIQUE_ID(name)[]
|
||||
/* One for each parameter, describing how to use it. Some files do
|
||||
multiple of these per line, so can't just use MODULE_INFO. */
|
||||
#define MODULE_PARM_DESC(_parm, desc) \
|
||||
@@ -98,7 +96,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/init/Kconfig
|
||||
+++ b/init/Kconfig
|
||||
@@ -1997,6 +1997,13 @@ config TRIM_UNUSED_KSYMS
|
||||
@@ -2233,6 +2233,13 @@ config TRIM_UNUSED_KSYMS
|
||||
|
||||
If unsure, or if you need to build out-of-tree modules, say N.
|
||||
|
||||
@@ -114,7 +112,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
config MODULES_TREE_LOOKUP
|
||||
--- a/kernel/module.c
|
||||
+++ b/kernel/module.c
|
||||
@@ -3029,9 +3029,11 @@ static int setup_load_info(struct load_i
|
||||
@@ -3107,9 +3107,11 @@ static int setup_load_info(struct load_i
|
||||
|
||||
static int check_modinfo(struct module *mod, struct load_info *info, int flags)
|
||||
{
|
||||
@@ -127,7 +125,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (flags & MODULE_INIT_IGNORE_VERMAGIC)
|
||||
modmagic = NULL;
|
||||
|
||||
@@ -3052,6 +3054,7 @@ static int check_modinfo(struct module *
|
||||
@@ -3130,6 +3132,7 @@ static int check_modinfo(struct module *
|
||||
mod->name);
|
||||
add_taint_module(mod, TAINT_OOT_MODULE, LOCKDEP_STILL_OK);
|
||||
}
|
||||
@@ -137,7 +135,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/scripts/mod/modpost.c
|
||||
+++ b/scripts/mod/modpost.c
|
||||
@@ -1983,7 +1983,9 @@ static void read_symbols(const char *mod
|
||||
@@ -2051,7 +2051,9 @@ static void read_symbols(const char *mod
|
||||
symname = remove_dot(info.strtab + sym->st_name);
|
||||
|
||||
handle_modversions(mod, &info, sym, symname);
|
||||
@@ -145,9 +143,9 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
handle_moddevtable(mod, &info, sym, symname);
|
||||
+#endif
|
||||
}
|
||||
if (!is_vmlinux(modname) || vmlinux_section_warnings)
|
||||
check_sec_ref(mod, modname, &info);
|
||||
@@ -2146,8 +2148,10 @@ static void add_header(struct buffer *b,
|
||||
|
||||
/* Apply symbol namespaces from __kstrtabns_<symbol> entries. */
|
||||
@@ -2265,8 +2267,10 @@ static void add_header(struct buffer *b,
|
||||
buf_printf(b, "\n");
|
||||
buf_printf(b, "BUILD_SALT;\n");
|
||||
buf_printf(b, "\n");
|
||||
@@ -157,8 +155,8 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
+#endif
|
||||
buf_printf(b, "\n");
|
||||
buf_printf(b, "__visible struct module __this_module\n");
|
||||
buf_printf(b, "__attribute__((section(\".gnu.linkonce.this_module\"))) = {\n");
|
||||
@@ -2164,8 +2168,10 @@ static void add_header(struct buffer *b,
|
||||
buf_printf(b, "__section(.gnu.linkonce.this_module) = {\n");
|
||||
@@ -2283,8 +2287,10 @@ static void add_header(struct buffer *b,
|
||||
|
||||
static void add_intree_flag(struct buffer *b, int is_intree)
|
||||
{
|
||||
@@ -169,7 +167,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
}
|
||||
|
||||
/* Cannot check for assembler */
|
||||
@@ -2178,8 +2184,10 @@ static void add_retpoline(struct buffer
|
||||
@@ -2297,8 +2303,10 @@ static void add_retpoline(struct buffer
|
||||
|
||||
static void add_staging_flag(struct buffer *b, const char *name)
|
||||
{
|
||||
@@ -180,7 +178,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2278,11 +2286,13 @@ static void add_depends(struct buffer *b
|
||||
@@ -2382,11 +2390,13 @@ static void add_depends(struct buffer *b
|
||||
|
||||
static void add_srcversion(struct buffer *b, struct module *mod)
|
||||
{
|
||||
@@ -194,10 +192,10 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
}
|
||||
|
||||
static void write_if_changed(struct buffer *b, const char *fname)
|
||||
@@ -2519,7 +2529,9 @@ int main(int argc, char **argv)
|
||||
@@ -2656,7 +2666,9 @@ int main(int argc, char **argv)
|
||||
add_staging_flag(&buf, mod->name);
|
||||
err |= add_versions(&buf, mod);
|
||||
add_depends(&buf, mod, modules);
|
||||
add_depends(&buf, mod);
|
||||
+#ifndef CONFIG_MODULE_STRIPPED
|
||||
add_moddevtable(&buf, mod);
|
||||
+#endif
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
From c9ef4ab0f54356ee9f91d9676ea0ec123840ddc7 Mon Sep 17 00:00:00 2001
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Fri, 7 Jul 2017 16:57:33 +0200
|
||||
Subject: kernel: do not build modules.order
|
||||
|
||||
It is not needed for anything on the system and skipping this saves some
|
||||
build time, especially in cases where there is nothing to do.
|
||||
|
||||
lede-commit: afc1675833a7bf5df094f59f7250369520646d04
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
Makefile | 2 --
|
||||
scripts/Makefile.build | 2 +-
|
||||
2 files changed, 1 insertion(+), 3 deletions(-)
|
||||
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -1232,7 +1232,6 @@ all: modules
|
||||
|
||||
PHONY += modules
|
||||
modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) modules.builtin
|
||||
- $(Q)$(AWK) '!x[$$0]++' $(vmlinux-dirs:%=$(objtree)/%/modules.order) > $(objtree)/modules.order
|
||||
@$(kecho) ' Building modules, stage 2.';
|
||||
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
|
||||
|
||||
@@ -1261,7 +1260,6 @@ _modinst_:
|
||||
rm -f $(MODLIB)/build ; \
|
||||
ln -s $(CURDIR) $(MODLIB)/build ; \
|
||||
fi
|
||||
- @cp -f $(objtree)/modules.order $(MODLIB)/
|
||||
@cp -f $(objtree)/modules.builtin $(MODLIB)/
|
||||
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modinst
|
||||
|
||||
--- a/scripts/Makefile.build
|
||||
+++ b/scripts/Makefile.build
|
||||
@@ -78,7 +78,7 @@ modorder-target := $(obj)/modules.order
|
||||
# We keep a list of all modules in $(MODVERDIR)
|
||||
|
||||
__build: $(if $(KBUILD_BUILTIN),$(builtin-target) $(lib-target) $(extra-y)) \
|
||||
- $(if $(KBUILD_MODULES),$(obj-m) $(modorder-target)) \
|
||||
+ $(if $(KBUILD_MODULES),$(obj-m)) \
|
||||
$(subdir-ym) $(always)
|
||||
@:
|
||||
|
||||
@@ -13,7 +13,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/include/uapi/linux/spi/spidev.h
|
||||
+++ b/include/uapi/linux/spi/spidev.h
|
||||
@@ -113,7 +113,7 @@ struct spi_ioc_transfer {
|
||||
@@ -117,7 +117,7 @@ struct spi_ioc_transfer {
|
||||
|
||||
/* not all platforms use <asm-generic/ioctl.h> or _IOC_TYPECHECK() ... */
|
||||
#define SPI_MSGSIZE(N) \
|
||||
|
||||
@@ -19,45 +19,19 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||
include/asm-generic/vmlinux.lds.h | 63 ++++++++++++++++++++-------------------
|
||||
7 files changed, 55 insertions(+), 51 deletions(-)
|
||||
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -294,6 +294,11 @@ else
|
||||
scripts/Kbuild.include: ;
|
||||
include scripts/Kbuild.include
|
||||
|
||||
+ifdef CONFIG_LD_DEAD_CODE_DATA_ELIMINATION
|
||||
+KBUILD_CFLAGS_KERNEL += -ffunction-sections -fdata-sections
|
||||
+LDFLAGS_vmlinux += --gc-sections
|
||||
+endif
|
||||
+
|
||||
# Read KERNELRELEASE from include/config/kernel.release (if it exists)
|
||||
KERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null)
|
||||
KERNELVERSION = $(VERSION)$(if $(PATCHLEVEL),.$(PATCHLEVEL)$(if $(SUBLEVEL),.$(SUBLEVEL)))$(EXTRAVERSION)
|
||||
@@ -782,11 +787,6 @@ ifdef CONFIG_DEBUG_SECTION_MISMATCH
|
||||
KBUILD_CFLAGS += $(call cc-option, -fno-inline-functions-called-once)
|
||||
endif
|
||||
|
||||
-ifdef CONFIG_LD_DEAD_CODE_DATA_ELIMINATION
|
||||
-KBUILD_CFLAGS_KERNEL += -ffunction-sections -fdata-sections
|
||||
-LDFLAGS_vmlinux += --gc-sections
|
||||
-endif
|
||||
-
|
||||
# arch Makefile may override CC so keep this after arch Makefile is included
|
||||
NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
|
||||
|
||||
--- a/arch/arm/Kconfig
|
||||
+++ b/arch/arm/Kconfig
|
||||
@@ -98,6 +98,7 @@ config ARM
|
||||
@@ -111,6 +111,7 @@ config ARM
|
||||
select HAVE_UID16
|
||||
select HAVE_VIRT_CPU_ACCOUNTING_GEN
|
||||
select IRQ_FORCED_THREADING
|
||||
+ select HAVE_LD_DEAD_CODE_DATA_ELIMINATION
|
||||
select MODULES_USE_ELF_REL
|
||||
select NEED_DMA_MAP_STATE
|
||||
select NO_BOOTMEM
|
||||
select OF_EARLY_FLATTREE if OF
|
||||
--- a/arch/arm/boot/compressed/Makefile
|
||||
+++ b/arch/arm/boot/compressed/Makefile
|
||||
@@ -106,6 +106,7 @@ ifeq ($(CONFIG_FUNCTION_TRACER),y)
|
||||
@@ -107,6 +107,7 @@ ifeq ($(CONFIG_FUNCTION_TRACER),y)
|
||||
ORIG_CFLAGS := $(KBUILD_CFLAGS)
|
||||
KBUILD_CFLAGS = $(subst -pg, , $(ORIG_CFLAGS))
|
||||
endif
|
||||
@@ -160,33 +134,3 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||
} \
|
||||
. = __stubs_start + SIZEOF(.stubs); \
|
||||
__stubs_end = .; \
|
||||
--- a/arch/mips/Kconfig
|
||||
+++ b/arch/mips/Kconfig
|
||||
@@ -43,6 +43,7 @@ config MIPS
|
||||
select HAVE_ARCH_TRANSPARENT_HUGEPAGE if CPU_SUPPORTS_HUGEPAGES && 64BIT
|
||||
select HAVE_CBPF_JIT if (!64BIT && !CPU_MICROMIPS)
|
||||
select HAVE_EBPF_JIT if (64BIT && !CPU_MICROMIPS)
|
||||
+ select HAVE_LD_DEAD_CODE_DATA_ELIMINATION
|
||||
select HAVE_CONTEXT_TRACKING
|
||||
select HAVE_COPY_THREAD_TLS
|
||||
select HAVE_C_RECORDMCOUNT
|
||||
--- a/arch/mips/kernel/vmlinux.lds.S
|
||||
+++ b/arch/mips/kernel/vmlinux.lds.S
|
||||
@@ -72,7 +72,7 @@ SECTIONS
|
||||
/* Exception table for data bus errors */
|
||||
__dbe_table : {
|
||||
__start___dbe_table = .;
|
||||
- *(__dbe_table)
|
||||
+ KEEP(*(__dbe_table))
|
||||
__stop___dbe_table = .;
|
||||
}
|
||||
|
||||
@@ -123,7 +123,7 @@ SECTIONS
|
||||
. = ALIGN(4);
|
||||
.mips.machines.init : AT(ADDR(.mips.machines.init) - LOAD_OFFSET) {
|
||||
__mips_machines_start = .;
|
||||
- *(.mips.machines.init)
|
||||
+ KEEP(*(.mips.machines.init))
|
||||
__mips_machines_end = .;
|
||||
}
|
||||
|
||||
|
||||
@@ -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 @@
|
||||
@@ -405,14 +415,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 @@
|
||||
@@ -474,7 +484,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 @@
|
||||
@@ -865,6 +875,8 @@
|
||||
EXIT_TEXT \
|
||||
EXIT_DATA \
|
||||
EXIT_CALL \
|
||||
@@ -64,12 +64,12 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
+ SYMTAB_DISCARD_GPL \
|
||||
*(.discard) \
|
||||
*(.discard.*) \
|
||||
}
|
||||
*(.modinfo) \
|
||||
--- a/include/linux/export.h
|
||||
+++ b/include/linux/export.h
|
||||
@@ -74,12 +74,19 @@ struct kernel_symbol {
|
||||
};
|
||||
#endif
|
||||
@@ -98,18 +98,26 @@ struct kernel_symbol {
|
||||
|
||||
#else
|
||||
|
||||
+#ifdef MODULE
|
||||
+#define __EXPORT_SUFFIX(sym)
|
||||
@@ -77,20 +77,28 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
+#define __EXPORT_SUFFIX(sym) "+" #sym
|
||||
+#endif
|
||||
+
|
||||
/* For every exported symbol, place a struct in the __ksymtab section */
|
||||
#define ___EXPORT_SYMBOL(sym, sec) \
|
||||
#define ___export_symbol_common(sym, sec) \
|
||||
extern typeof(sym) sym; \
|
||||
__CRC_SYMBOL(sym, sec) \
|
||||
__CRC_SYMBOL(sym, sec); \
|
||||
static const char __kstrtab_##sym[] \
|
||||
- __attribute__((section("__ksymtab_strings"), used, aligned(1))) \
|
||||
+ __attribute__((section("__ksymtab_strings" \
|
||||
+ __EXPORT_SUFFIX(sym)), used, aligned(1))) \
|
||||
= #sym; \
|
||||
__KSYMTAB_ENTRY(sym, sec)
|
||||
= #sym \
|
||||
|
||||
/* For every exported symbol, place a struct in the __ksymtab section */
|
||||
#define ___EXPORT_SYMBOL_NS(sym, sec, ns) \
|
||||
___export_symbol_common(sym, sec); \
|
||||
static const char __kstrtabns_##sym[] \
|
||||
- __attribute__((section("__ksymtab_strings"), used, aligned(1))) \
|
||||
+ __attribute__((section("__ksymtab_strings" \
|
||||
+ __EXPORT_SUFFIX(sym)), used, aligned(1))) \
|
||||
= #ns; \
|
||||
__KSYMTAB_ENTRY_NS(sym, sec)
|
||||
|
||||
--- a/scripts/Makefile.build
|
||||
+++ b/scripts/Makefile.build
|
||||
@@ -408,7 +408,7 @@ targets += $(extra-y) $(MAKECMDGOALS) $(
|
||||
@@ -362,7 +362,7 @@ targets += $(extra-y) $(MAKECMDGOALS) $(
|
||||
# Linker scripts preprocessor (.lds.S -> .lds)
|
||||
# ---------------------------------------------------------------------------
|
||||
quiet_cmd_cpp_lds_S = LDS $@
|
||||
|
||||
@@ -23,15 +23,15 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
||||
{ {0x02, 0x21}, "lz4", unlz4 },
|
||||
--- a/scripts/Makefile.lib
|
||||
+++ b/scripts/Makefile.lib
|
||||
@@ -325,7 +325,7 @@ cmd_bzip2 = (cat $(filter-out FORCE,$^)
|
||||
@@ -342,7 +342,7 @@ quiet_cmd_bzip2 = BZIP2 $@
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
quiet_cmd_lzma = LZMA $@
|
||||
cmd_lzma = (cat $(filter-out FORCE,$^) | \
|
||||
- lzma -9 && $(call size_append, $(filter-out FORCE,$^))) > $@ || \
|
||||
+ lzma e -d20 -lc1 -lp2 -pb2 -eos -si -so && $(call size_append, $(filter-out FORCE,$^))) > $@ || \
|
||||
(rm -f $@ ; false)
|
||||
- cmd_lzma = { cat $(real-prereqs) | lzma -9; $(size_append); } > $@
|
||||
+ cmd_lzma = { cat $(real-prereqs) | lzma e -d20 -lc1 -lp2 -pb2 -eos -si -so; $(size_append); } > $@
|
||||
|
||||
quiet_cmd_lzo = LZO $@
|
||||
cmd_lzo = { cat $(real-prereqs) | lzop -9; $(size_append); } > $@
|
||||
--- a/usr/gen_initramfs_list.sh
|
||||
+++ b/usr/gen_initramfs_list.sh
|
||||
@@ -229,7 +229,7 @@ cpio_list=
|
||||
|
||||
@@ -9,7 +9,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/netfilter/Kconfig
|
||||
+++ b/net/netfilter/Kconfig
|
||||
@@ -241,7 +241,6 @@ config NF_CONNTRACK_FTP
|
||||
@@ -240,7 +240,6 @@ config NF_CONNTRACK_FTP
|
||||
|
||||
config NF_CONNTRACK_H323
|
||||
tristate "H.323 protocol support"
|
||||
@@ -17,7 +17,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
depends on NETFILTER_ADVANCED
|
||||
help
|
||||
H.323 is a VoIP signalling protocol from ITU-T. As one of the most
|
||||
@@ -1077,7 +1076,6 @@ config NETFILTER_XT_TARGET_SECMARK
|
||||
@@ -1100,7 +1099,6 @@ config NETFILTER_XT_TARGET_SECMARK
|
||||
|
||||
config NETFILTER_XT_TARGET_TCPMSS
|
||||
tristate '"TCPMSS" target support'
|
||||
|
||||
@@ -43,8 +43,8 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
||||
select CRYPTO_BLKCIPHER2
|
||||
select CRYPTO_ALGAPI
|
||||
|
||||
@@ -64,7 +64,7 @@ config CRYPTO_BLKCIPHER2
|
||||
select CRYPTO_WORKQUEUE
|
||||
@@ -63,7 +63,7 @@ config CRYPTO_BLKCIPHER2
|
||||
select CRYPTO_RNG2
|
||||
|
||||
config CRYPTO_HASH
|
||||
- tristate
|
||||
@@ -52,7 +52,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
||||
select CRYPTO_HASH2
|
||||
select CRYPTO_ALGAPI
|
||||
|
||||
@@ -73,7 +73,7 @@ config CRYPTO_HASH2
|
||||
@@ -72,7 +72,7 @@ config CRYPTO_HASH2
|
||||
select CRYPTO_ALGAPI2
|
||||
|
||||
config CRYPTO_RNG
|
||||
@@ -73,7 +73,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
||||
bool
|
||||
--- a/drivers/ssb/Kconfig
|
||||
+++ b/drivers/ssb/Kconfig
|
||||
@@ -28,6 +28,7 @@ config SSB_SPROM
|
||||
@@ -29,6 +29,7 @@ config SSB_SPROM
|
||||
config SSB_BLOCKIO
|
||||
bool
|
||||
depends on SSB
|
||||
@@ -81,7 +81,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
||||
|
||||
config SSB_PCIHOST_POSSIBLE
|
||||
bool
|
||||
@@ -48,7 +49,7 @@ config SSB_PCIHOST
|
||||
@@ -49,7 +50,7 @@ config SSB_PCIHOST
|
||||
config SSB_B43_PCI_BRIDGE
|
||||
bool
|
||||
depends on SSB_PCIHOST
|
||||
@@ -92,7 +92,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
||||
bool
|
||||
--- a/lib/Kconfig
|
||||
+++ b/lib/Kconfig
|
||||
@@ -377,16 +377,16 @@ config BCH_CONST_T
|
||||
@@ -402,16 +402,16 @@ config BCH_CONST_T
|
||||
# Textsearch support is select'ed if needed
|
||||
#
|
||||
config TEXTSEARCH
|
||||
@@ -115,7 +115,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
||||
bool
|
||||
--- a/net/netfilter/Kconfig
|
||||
+++ b/net/netfilter/Kconfig
|
||||
@@ -10,7 +10,7 @@ config NETFILTER_INGRESS
|
||||
@@ -11,7 +11,7 @@ config NETFILTER_INGRESS
|
||||
infrastructure.
|
||||
|
||||
config NETFILTER_NETLINK
|
||||
@@ -126,14 +126,15 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
||||
bool
|
||||
--- a/net/wireless/Kconfig
|
||||
+++ b/net/wireless/Kconfig
|
||||
@@ -1,5 +1,5 @@
|
||||
@@ -1,6 +1,6 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
config WIRELESS_EXT
|
||||
- bool
|
||||
+ bool "Wireless extensions"
|
||||
|
||||
config WEXT_CORE
|
||||
def_bool y
|
||||
@@ -11,10 +11,10 @@ config WEXT_PROC
|
||||
@@ -12,10 +12,10 @@ config WEXT_PROC
|
||||
depends on WEXT_CORE
|
||||
|
||||
config WEXT_SPY
|
||||
@@ -146,7 +147,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
||||
|
||||
config CFG80211
|
||||
tristate "cfg80211 - wireless configuration API"
|
||||
@@ -202,7 +202,7 @@ config CFG80211_WEXT_EXPORT
|
||||
@@ -203,7 +203,7 @@ config CFG80211_WEXT_EXPORT
|
||||
endif # CFG80211
|
||||
|
||||
config LIB80211
|
||||
@@ -155,29 +156,29 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
||||
default n
|
||||
help
|
||||
This options enables a library of common routines used
|
||||
@@ -211,13 +211,16 @@ config LIB80211
|
||||
@@ -212,16 +212,16 @@ config LIB80211
|
||||
Drivers should select this themselves if needed.
|
||||
|
||||
config LIB80211_CRYPT_WEP
|
||||
- tristate
|
||||
+ tristate "LIB80211_CRYPT_WEP"
|
||||
+ select LIB80211
|
||||
select CRYPTO_LIB_ARC4
|
||||
|
||||
config LIB80211_CRYPT_CCMP
|
||||
- tristate
|
||||
+ tristate "LIB80211_CRYPT_CCMP"
|
||||
+ select LIB80211
|
||||
select CRYPTO_AES
|
||||
select CRYPTO_CCM
|
||||
|
||||
config LIB80211_CRYPT_TKIP
|
||||
- tristate
|
||||
+ tristate "LIB80211_CRYPT_TKIP"
|
||||
+ select LIB80211
|
||||
select CRYPTO_LIB_ARC4
|
||||
|
||||
config LIB80211_DEBUG
|
||||
bool "lib80211 debugging messages"
|
||||
--- a/sound/core/Kconfig
|
||||
+++ b/sound/core/Kconfig
|
||||
@@ -16,7 +16,7 @@ config SND_DMAENGINE_PCM
|
||||
@@ -17,7 +17,7 @@ config SND_DMAENGINE_PCM
|
||||
tristate
|
||||
|
||||
config SND_HWDEP
|
||||
@@ -186,7 +187,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
||||
|
||||
config SND_SEQ_DEVICE
|
||||
tristate
|
||||
@@ -26,7 +26,7 @@ config SND_RAWMIDI
|
||||
@@ -27,7 +27,7 @@ config SND_RAWMIDI
|
||||
select SND_SEQ_DEVICE if SND_SEQUENCER != n
|
||||
|
||||
config SND_COMPRESS_OFFLOAD
|
||||
|
||||
@@ -18,14 +18,14 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
# subsystems should select the appropriate symbols.
|
||||
|
||||
config REGMAP
|
||||
- default y if (REGMAP_I2C || REGMAP_SPI || REGMAP_SPMI || REGMAP_W1 || REGMAP_AC97 || REGMAP_MMIO || REGMAP_IRQ)
|
||||
- default y if (REGMAP_I2C || REGMAP_SPI || REGMAP_SPMI || REGMAP_W1 || REGMAP_AC97 || REGMAP_MMIO || REGMAP_IRQ || REGMAP_SCCB || REGMAP_I3C)
|
||||
select IRQ_DOMAIN if REGMAP_IRQ
|
||||
- bool
|
||||
+ tristate
|
||||
|
||||
config REGCACHE_COMPRESSED
|
||||
select LZO_COMPRESS
|
||||
@@ -18,6 +17,7 @@ config REGMAP_AC97
|
||||
@@ -18,38 +17,49 @@ config REGMAP_AC97
|
||||
|
||||
config REGMAP_I2C
|
||||
tristate
|
||||
@@ -33,7 +33,9 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
depends on I2C
|
||||
|
||||
config REGMAP_SLIMBUS
|
||||
@@ -26,20 +26,26 @@ config REGMAP_SLIMBUS
|
||||
tristate
|
||||
+ select REGMAP
|
||||
depends on SLIMBUS
|
||||
|
||||
config REGMAP_SPI
|
||||
tristate
|
||||
@@ -42,13 +44,13 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
depends on SPI
|
||||
|
||||
config REGMAP_SPMI
|
||||
+ select REGMAP
|
||||
tristate
|
||||
+ select REGMAP
|
||||
depends on SPMI
|
||||
|
||||
config REGMAP_W1
|
||||
+ select REGMAP
|
||||
tristate
|
||||
+ select REGMAP
|
||||
depends on W1
|
||||
|
||||
config REGMAP_MMIO
|
||||
@@ -56,10 +58,23 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
+ select REGMAP
|
||||
|
||||
config REGMAP_IRQ
|
||||
+ select REGMAP
|
||||
bool
|
||||
+ select REGMAP
|
||||
|
||||
config REGMAP_SOUNDWIRE
|
||||
tristate
|
||||
+ select REGMAP
|
||||
depends on SOUNDWIRE
|
||||
|
||||
config REGMAP_SCCB
|
||||
tristate
|
||||
+ select REGMAP
|
||||
depends on I2C
|
||||
|
||||
config REGMAP_I3C
|
||||
tristate
|
||||
+ select REGMAP
|
||||
depends on I3C
|
||||
--- a/drivers/base/regmap/Makefile
|
||||
+++ b/drivers/base/regmap/Makefile
|
||||
@@ -2,10 +2,14 @@
|
||||
@@ -83,7 +98,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
obj-$(CONFIG_REGMAP_SLIMBUS) += regmap-slimbus.o
|
||||
--- a/drivers/base/regmap/regmap.c
|
||||
+++ b/drivers/base/regmap/regmap.c
|
||||
@@ -13,6 +13,7 @@
|
||||
@@ -9,6 +9,7 @@
|
||||
#include <linux/device.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/export.h>
|
||||
@@ -91,7 +106,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/of.h>
|
||||
@@ -3039,3 +3040,5 @@ static int __init regmap_initcall(void)
|
||||
@@ -3124,3 +3125,5 @@ static int __init regmap_initcall(void)
|
||||
return 0;
|
||||
}
|
||||
postcore_initcall(regmap_initcall);
|
||||
@@ -99,7 +114,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
+MODULE_LICENSE("GPL");
|
||||
--- a/include/linux/regmap.h
|
||||
+++ b/include/linux/regmap.h
|
||||
@@ -187,7 +187,7 @@ struct reg_sequence {
|
||||
@@ -185,7 +185,7 @@ struct reg_sequence {
|
||||
pollret ?: ((cond) ? 0 : -ETIMEDOUT); \
|
||||
})
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/crypto/Kconfig
|
||||
+++ b/crypto/Kconfig
|
||||
@@ -144,13 +144,13 @@ config CRYPTO_MANAGER
|
||||
@@ -120,13 +120,13 @@ config CRYPTO_MANAGER
|
||||
cbc(aes).
|
||||
|
||||
config CRYPTO_MANAGER2
|
||||
@@ -35,17 +35,27 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
config CRYPTO_USER
|
||||
tristate "Userspace cryptographic algorithm configuration"
|
||||
@@ -163,7 +163,6 @@ config CRYPTO_USER
|
||||
@@ -136,8 +136,6 @@ config CRYPTO_USER
|
||||
Userspace configuration for cryptographic instantiations such as
|
||||
cbc(aes).
|
||||
|
||||
-if CRYPTO_MANAGER2
|
||||
-
|
||||
config CRYPTO_MANAGER_DISABLE_TESTS
|
||||
bool "Disable run-time self tests"
|
||||
default y
|
||||
- depends on CRYPTO_MANAGER2
|
||||
help
|
||||
@@ -145,6 +143,8 @@ config CRYPTO_MANAGER_DISABLE_TESTS
|
||||
Disable run-time self tests that normally take place at
|
||||
algorithm registration.
|
||||
|
||||
+if CRYPTO_MANAGER2
|
||||
+
|
||||
config CRYPTO_MANAGER_EXTRA_TESTS
|
||||
bool "Enable extra run-time crypto self tests"
|
||||
depends on DEBUG_KERNEL && !CRYPTO_MANAGER_DISABLE_TESTS
|
||||
--- a/crypto/algboss.c
|
||||
+++ b/crypto/algboss.c
|
||||
@@ -247,8 +247,12 @@ static int cryptomgr_schedule_test(struc
|
||||
@@ -242,8 +242,12 @@ static int cryptomgr_schedule_test(struc
|
||||
type = alg->cra_flags;
|
||||
|
||||
/* Do not test internal algorithms. */
|
||||
|
||||
15
target/linux/generic/hack-5.4/260-lib-arc4-unhide.patch
Normal file
15
target/linux/generic/hack-5.4/260-lib-arc4-unhide.patch
Normal file
@@ -0,0 +1,15 @@
|
||||
This makes it possible to select CONFIG_CRYPTO_LIB_ARC4 directly. We
|
||||
need this to be able to compile this into the kernel and make use of it
|
||||
from backports.
|
||||
|
||||
--- a/crypto/Kconfig
|
||||
+++ b/crypto/Kconfig
|
||||
@@ -1151,7 +1151,7 @@ config CRYPTO_ANUBIS
|
||||
<http://www.larc.usp.br/~pbarreto/AnubisPage.html>
|
||||
|
||||
config CRYPTO_LIB_ARC4
|
||||
- tristate
|
||||
+ tristate "ARC4 cipher library"
|
||||
|
||||
config CRYPTO_ARC4
|
||||
tristate "ARC4 cipher algorithm"
|
||||
@@ -37,7 +37,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
||||
ifneq ($(CONFIG_DCB),)
|
||||
--- a/net/rfkill/Kconfig
|
||||
+++ b/net/rfkill/Kconfig
|
||||
@@ -1,7 +1,11 @@
|
||||
@@ -2,7 +2,11 @@
|
||||
#
|
||||
# RF switch subsystem configuration
|
||||
#
|
||||
@@ -50,7 +50,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
||||
tristate "RF switch subsystem support"
|
||||
help
|
||||
Say Y here if you want to have control over RF switches
|
||||
@@ -13,19 +17,19 @@ menuconfig RFKILL
|
||||
@@ -14,19 +18,19 @@ menuconfig RFKILL
|
||||
# LED trigger support
|
||||
config RFKILL_LEDS
|
||||
bool
|
||||
@@ -75,7 +75,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
||||
help
|
||||
--- a/net/rfkill/Makefile
|
||||
+++ b/net/rfkill/Makefile
|
||||
@@ -4,5 +4,5 @@
|
||||
@@ -5,5 +5,5 @@
|
||||
|
||||
rfkill-y += core.o
|
||||
rfkill-$(CONFIG_RFKILL_INPUT) += input.o
|
||||
|
||||
@@ -14,7 +14,8 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||
|
||||
--- a/drivers/nvmem/Kconfig
|
||||
+++ b/drivers/nvmem/Kconfig
|
||||
@@ -1,5 +1,5 @@
|
||||
@@ -1,6 +1,6 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
menuconfig NVMEM
|
||||
- bool "NVMEM Support"
|
||||
+ tristate "NVMEM Support"
|
||||
@@ -23,7 +24,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||
|
||||
--- a/drivers/of/Kconfig
|
||||
+++ b/drivers/of/Kconfig
|
||||
@@ -71,6 +71,7 @@ config OF_IRQ
|
||||
@@ -72,6 +72,7 @@ config OF_IRQ
|
||||
|
||||
config OF_NET
|
||||
depends on NETDEVICES
|
||||
|
||||
@@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
--- a/arch/mips/include/asm/r4kcache.h
|
||||
+++ b/arch/mips/include/asm/r4kcache.h
|
||||
@@ -683,16 +683,48 @@ static inline void prot##extra##blast_##
|
||||
@@ -617,14 +617,46 @@ static inline void prot##extra##blast_##
|
||||
unsigned long end) \
|
||||
{ \
|
||||
unsigned long lsize = cpu_##desc##_line_size(); \
|
||||
@@ -26,8 +26,6 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
+ unsigned long aend = (end + lsize - 1) & ~(lsize - 1); \
|
||||
+ int lines = (aend - addr) / lsize; \
|
||||
\
|
||||
__##pfx##flush_prologue \
|
||||
\
|
||||
- while (1) { \
|
||||
+ while (lines >= 8) { \
|
||||
+ prot##cache_op(hitop, addr); \
|
||||
@@ -62,5 +60,5 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
- break; \
|
||||
- addr += lsize; \
|
||||
} \
|
||||
\
|
||||
__##pfx##flush_epilogue \
|
||||
}
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||
|
||||
--- a/arch/mips/Kconfig
|
||||
+++ b/arch/mips/Kconfig
|
||||
@@ -1144,6 +1144,10 @@ config SYNC_R4K
|
||||
@@ -1156,6 +1156,10 @@ config SYNC_R4K
|
||||
config MIPS_MACHINE
|
||||
def_bool n
|
||||
|
||||
@@ -25,7 +25,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||
+++ b/arch/mips/kernel/head.S
|
||||
@@ -79,6 +79,12 @@ FEXPORT(__kernel_entry)
|
||||
j kernel_entry
|
||||
#endif
|
||||
#endif /* CONFIG_BOOT_RAW */
|
||||
|
||||
+#ifdef CONFIG_IMAGE_CMDLINE_HACK
|
||||
+ .ascii "CMDLINE:"
|
||||
|
||||
@@ -16,7 +16,7 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
|
||||
|
||||
--- a/arch/powerpc/Makefile
|
||||
+++ b/arch/powerpc/Makefile
|
||||
@@ -60,20 +60,6 @@ machine-$(CONFIG_PPC64) += 64
|
||||
@@ -61,20 +61,6 @@ machine-$(CONFIG_PPC64) += 64
|
||||
machine-$(CONFIG_CPU_LITTLE_ENDIAN) += le
|
||||
UTS_MACHINE := $(subst $(space),,$(machine-y))
|
||||
|
||||
@@ -24,7 +24,7 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
|
||||
-ifdef CONFIG_PPC32
|
||||
-KBUILD_LDFLAGS_MODULE += arch/powerpc/lib/crtsavres.o
|
||||
-else
|
||||
-KBUILD_LDFLAGS_MODULE += -T $(srctree)/arch/powerpc/kernel/module.lds
|
||||
-KBUILD_LDS_MODULE += $(srctree)/arch/powerpc/kernel/module.lds
|
||||
-ifeq ($(call ld-ifversion, -ge, 225000000, y),y)
|
||||
-# Have the linker provide sfpr if possible.
|
||||
-# There is a corresponding test in arch/powerpc/lib/Makefile
|
||||
|
||||
@@ -18,7 +18,7 @@ Reviewed-by: Bart Van Assche <bvanassche@acm.org>
|
||||
|
||||
--- a/drivers/block/loop.c
|
||||
+++ b/drivers/block/loop.c
|
||||
@@ -460,7 +460,7 @@ static void lo_complete_rq(struct reques
|
||||
@@ -461,7 +461,7 @@ static void lo_complete_rq(struct reques
|
||||
if (!cmd->use_aio || cmd->ret < 0 || cmd->ret == blk_rq_bytes(rq) ||
|
||||
req_op(rq) != REQ_OP_READ) {
|
||||
if (cmd->ret < 0)
|
||||
@@ -27,7 +27,7 @@ Reviewed-by: Bart Van Assche <bvanassche@acm.org>
|
||||
goto end_io;
|
||||
}
|
||||
|
||||
@@ -1904,7 +1904,10 @@ static void loop_handle_cmd(struct loop_
|
||||
@@ -1950,7 +1950,10 @@ static void loop_handle_cmd(struct loop_
|
||||
failed:
|
||||
/* complete non-aio request */
|
||||
if (!cmd->use_aio || ret) {
|
||||
|
||||
@@ -28,7 +28,7 @@ Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
|
||||
|
||||
--- a/drivers/block/loop.c
|
||||
+++ b/drivers/block/loop.c
|
||||
@@ -426,11 +426,12 @@ static int lo_fallocate(struct loop_devi
|
||||
@@ -427,11 +427,12 @@ static int lo_fallocate(struct loop_devi
|
||||
* information.
|
||||
*/
|
||||
struct file *file = lo->lo_backing_file;
|
||||
@@ -42,7 +42,7 @@ Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
|
||||
ret = -EOPNOTSUPP;
|
||||
goto out;
|
||||
}
|
||||
@@ -863,6 +864,21 @@ static void loop_config_discard(struct l
|
||||
@@ -862,6 +863,21 @@ static void loop_config_discard(struct l
|
||||
struct file *file = lo->lo_backing_file;
|
||||
struct inode *inode = file->f_mapping->host;
|
||||
struct request_queue *q = lo->lo_queue;
|
||||
@@ -64,7 +64,7 @@ Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
|
||||
|
||||
/*
|
||||
* We use punch hole to reclaim the free space used by the
|
||||
@@ -870,22 +886,24 @@ static void loop_config_discard(struct l
|
||||
@@ -869,22 +885,24 @@ static void loop_config_discard(struct l
|
||||
* encryption is enabled, because it may give an attacker
|
||||
* useful information.
|
||||
*/
|
||||
|
||||
@@ -12,7 +12,7 @@ Signed-off-by: Etienne Champetier <champetier.etienne@gmail.com>
|
||||
|
||||
--- a/net/bridge/br_input.c
|
||||
+++ b/net/bridge/br_input.c
|
||||
@@ -108,10 +108,14 @@ int br_handle_frame_finish(struct net *n
|
||||
@@ -103,10 +103,14 @@ int br_handle_frame_finish(struct net *n
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ Signed-off-by: Etienne Champetier <champetier.etienne@gmail.com>
|
||||
if (IS_ENABLED(CONFIG_INET) &&
|
||||
--- a/net/bridge/br_private.h
|
||||
+++ b/net/bridge/br_private.h
|
||||
@@ -337,6 +337,8 @@ struct net_bridge {
|
||||
@@ -345,6 +345,8 @@ struct net_bridge {
|
||||
u16 group_fwd_mask;
|
||||
u16 group_fwd_mask_required;
|
||||
|
||||
@@ -41,7 +41,7 @@ Signed-off-by: Etienne Champetier <champetier.etienne@gmail.com>
|
||||
bridge_id bridge_id;
|
||||
--- a/net/bridge/br_sysfs_br.c
|
||||
+++ b/net/bridge/br_sysfs_br.c
|
||||
@@ -170,6 +170,30 @@ static ssize_t group_fwd_mask_store(stru
|
||||
@@ -166,6 +166,30 @@ static ssize_t group_fwd_mask_store(stru
|
||||
}
|
||||
static DEVICE_ATTR_RW(group_fwd_mask);
|
||||
|
||||
@@ -72,7 +72,7 @@ Signed-off-by: Etienne Champetier <champetier.etienne@gmail.com>
|
||||
static ssize_t priority_show(struct device *d, struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
@@ -810,6 +834,7 @@ static struct attribute *bridge_attrs[]
|
||||
@@ -851,6 +875,7 @@ static struct attribute *bridge_attrs[]
|
||||
&dev_attr_ageing_time.attr,
|
||||
&dev_attr_stp_state.attr,
|
||||
&dev_attr_group_fwd_mask.attr,
|
||||
|
||||
@@ -109,7 +109,7 @@ Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
|
||||
__u8 invert;
|
||||
--- a/net/netfilter/xt_connmark.c
|
||||
+++ b/net/netfilter/xt_connmark.c
|
||||
@@ -36,12 +36,13 @@ MODULE_ALIAS("ipt_connmark");
|
||||
@@ -24,12 +24,13 @@ MODULE_ALIAS("ipt_connmark");
|
||||
MODULE_ALIAS("ip6t_connmark");
|
||||
|
||||
static unsigned int
|
||||
@@ -124,7 +124,7 @@ Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
|
||||
|
||||
ct = nf_ct_get(skb, &ctinfo);
|
||||
if (ct == NULL)
|
||||
@@ -49,12 +50,24 @@ connmark_tg_shift(struct sk_buff *skb, c
|
||||
@@ -37,12 +38,24 @@ connmark_tg_shift(struct sk_buff *skb, c
|
||||
|
||||
switch (info->mode) {
|
||||
case XT_CONNMARK_SET:
|
||||
@@ -154,7 +154,7 @@ Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
|
||||
if (ct->mark != newmark) {
|
||||
ct->mark = newmark;
|
||||
nf_conntrack_event_cache(IPCT_MARK, ct);
|
||||
@@ -93,20 +106,36 @@ static unsigned int
|
||||
@@ -81,20 +94,36 @@ static unsigned int
|
||||
connmark_tg(struct sk_buff *skb, const struct xt_action_param *par)
|
||||
{
|
||||
const struct xt_connmark_tginfo1 *info = par->targinfo;
|
||||
@@ -193,7 +193,7 @@ Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
|
||||
|
||||
return connmark_tg_shift(skb, info);
|
||||
}
|
||||
@@ -177,6 +206,16 @@ static struct xt_target connmark_tg_reg[
|
||||
@@ -165,6 +194,16 @@ static struct xt_target connmark_tg_reg[
|
||||
.targetsize = sizeof(struct xt_connmark_tginfo2),
|
||||
.destroy = connmark_tg_destroy,
|
||||
.me = THIS_MODULE,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/include/net/netfilter/nf_flow_table.h
|
||||
+++ b/include/net/netfilter/nf_flow_table.h
|
||||
@@ -163,6 +163,8 @@ struct nf_flow_table_hw {
|
||||
@@ -158,6 +158,8 @@ struct nf_flow_table_hw {
|
||||
int nf_flow_table_hw_register(const struct nf_flow_table_hw *offload);
|
||||
void nf_flow_table_hw_unregister(const struct nf_flow_table_hw *offload);
|
||||
|
||||
@@ -11,15 +11,15 @@
|
||||
#define MODULE_ALIAS_NF_FLOWTABLE(family) \
|
||||
--- a/net/netfilter/nf_flow_table_core.c
|
||||
+++ b/net/netfilter/nf_flow_table_core.c
|
||||
@@ -11,6 +11,7 @@
|
||||
#include <net/netfilter/nf_conntrack.h>
|
||||
@@ -13,6 +13,7 @@
|
||||
#include <net/netfilter/nf_conntrack_core.h>
|
||||
#include <net/netfilter/nf_conntrack_l4proto.h>
|
||||
#include <net/netfilter/nf_conntrack_tuple.h>
|
||||
+#include <net/netfilter/nf_conntrack_acct.h>
|
||||
|
||||
struct flow_offload_entry {
|
||||
struct flow_offload flow;
|
||||
@@ -149,6 +150,22 @@ void flow_offload_free(struct flow_offlo
|
||||
@@ -164,6 +165,22 @@ void flow_offload_free(struct flow_offlo
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(flow_offload_free);
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
const struct flow_offload_tuple *tuple = data;
|
||||
--- a/net/netfilter/nf_flow_table_ip.c
|
||||
+++ b/net/netfilter/nf_flow_table_ip.c
|
||||
@@ -11,6 +11,7 @@
|
||||
@@ -12,6 +12,7 @@
|
||||
#include <net/ip6_route.h>
|
||||
#include <net/neighbour.h>
|
||||
#include <net/netfilter/nf_flow_table.h>
|
||||
@@ -52,7 +52,7 @@
|
||||
/* For layer 4 checksum field offset. */
|
||||
#include <linux/tcp.h>
|
||||
#include <linux/udp.h>
|
||||
@@ -267,6 +268,7 @@ nf_flow_offload_ip_hook(void *priv, stru
|
||||
@@ -295,6 +296,7 @@ nf_flow_offload_ip_hook(void *priv, stru
|
||||
skb->dev = outdev;
|
||||
nexthop = rt_nexthop(rt, flow->tuplehash[!dir].tuple.src_v4.s_addr);
|
||||
skb_dst_set_noref(skb, &rt->dst);
|
||||
@@ -60,7 +60,7 @@
|
||||
neigh_xmit(NEIGH_ARP_TABLE, outdev, &nexthop, skb);
|
||||
|
||||
return NF_STOLEN;
|
||||
@@ -487,6 +489,7 @@ nf_flow_offload_ipv6_hook(void *priv, st
|
||||
@@ -524,6 +526,7 @@ nf_flow_offload_ipv6_hook(void *priv, st
|
||||
skb->dev = outdev;
|
||||
nexthop = rt6_nexthop(rt, &flow->tuplehash[!dir].tuple.src_v6);
|
||||
skb_dst_set_noref(skb, &rt->dst);
|
||||
|
||||
@@ -8,7 +8,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/ipv4/netfilter/Kconfig
|
||||
+++ b/net/ipv4/netfilter/Kconfig
|
||||
@@ -63,8 +63,6 @@ config NF_TABLES_ARP
|
||||
@@ -56,8 +56,6 @@ config NF_TABLES_ARP
|
||||
help
|
||||
This option enables the ARP support for nf_tables.
|
||||
|
||||
@@ -17,7 +17,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
config NF_FLOW_TABLE_IPV4
|
||||
tristate "Netfilter flow table IPv4 module"
|
||||
depends on NF_FLOW_TABLE
|
||||
@@ -73,6 +71,8 @@ config NF_FLOW_TABLE_IPV4
|
||||
@@ -66,6 +64,8 @@ config NF_FLOW_TABLE_IPV4
|
||||
|
||||
To compile it as a module, choose M here.
|
||||
|
||||
@@ -28,7 +28,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
depends on !NF_CONNTRACK || NF_CONNTRACK
|
||||
--- a/net/ipv6/netfilter/Kconfig
|
||||
+++ b/net/ipv6/netfilter/Kconfig
|
||||
@@ -80,7 +80,6 @@ config NFT_FIB_IPV6
|
||||
@@ -45,7 +45,6 @@ config NFT_FIB_IPV6
|
||||
multicast or blackhole.
|
||||
|
||||
endif # NF_TABLES_IPV6
|
||||
@@ -36,7 +36,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
config NF_FLOW_TABLE_IPV6
|
||||
tristate "Netfilter flow table IPv6 module"
|
||||
@@ -90,6 +89,8 @@ config NF_FLOW_TABLE_IPV6
|
||||
@@ -55,6 +54,8 @@ config NF_FLOW_TABLE_IPV6
|
||||
|
||||
To compile it as a module, choose M here.
|
||||
|
||||
@@ -47,7 +47,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
depends on !NF_CONNTRACK || NF_CONNTRACK
|
||||
--- a/net/netfilter/Kconfig
|
||||
+++ b/net/netfilter/Kconfig
|
||||
@@ -693,8 +693,6 @@ config NFT_FIB_NETDEV
|
||||
@@ -702,8 +702,6 @@ config NFT_FIB_NETDEV
|
||||
|
||||
endif # NF_TABLES_NETDEV
|
||||
|
||||
@@ -56,7 +56,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
config NF_FLOW_TABLE_INET
|
||||
tristate "Netfilter flow table mixed IPv4/IPv6 module"
|
||||
depends on NF_FLOW_TABLE
|
||||
@@ -703,11 +701,12 @@ config NF_FLOW_TABLE_INET
|
||||
@@ -712,11 +710,12 @@ config NF_FLOW_TABLE_INET
|
||||
|
||||
To compile it as a module, choose M here.
|
||||
|
||||
@@ -70,7 +70,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
help
|
||||
This option adds the flow table core infrastructure.
|
||||
|
||||
@@ -996,6 +995,15 @@ config NETFILTER_XT_TARGET_NOTRACK
|
||||
@@ -1005,6 +1004,15 @@ config NETFILTER_XT_TARGET_NOTRACK
|
||||
depends on NETFILTER_ADVANCED
|
||||
select NETFILTER_XT_TARGET_CT
|
||||
|
||||
@@ -98,7 +98,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
obj-$(CONFIG_NETFILTER_XT_TARGET_LED) += xt_LED.o
|
||||
--- /dev/null
|
||||
+++ b/net/netfilter/xt_FLOWOFFLOAD.c
|
||||
@@ -0,0 +1,422 @@
|
||||
@@ -0,0 +1,427 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2018 Felix Fietkau <nbd@nbd.name>
|
||||
+ *
|
||||
@@ -143,6 +143,10 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
+ return NF_ACCEPT;
|
||||
+}
|
||||
+
|
||||
+int nf_flow_table_iterate(struct nf_flowtable *flow_table,
|
||||
+ void (*iter)(struct flow_offload *flow, void *data),
|
||||
+ void *data);
|
||||
+
|
||||
+static int
|
||||
+xt_flowoffload_create_hook(struct net_device *dev)
|
||||
+{
|
||||
@@ -240,11 +244,12 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
+ struct flow_offload_tuple *tuple = &flow->tuplehash[0].tuple;
|
||||
+ struct xt_flowoffload_hook *hook;
|
||||
+ bool *found = data;
|
||||
+ struct rtable *rt = (struct rtable *)tuple->dst_cache;
|
||||
+
|
||||
+ spin_lock_bh(&hooks_lock);
|
||||
+ hlist_for_each_entry(hook, &hooks, list) {
|
||||
+ if (hook->ops.dev->ifindex != tuple->iifidx &&
|
||||
+ hook->ops.dev->ifindex != tuple->oifidx)
|
||||
+ hook->ops.dev->ifindex != rt->dst.dev->ifindex)
|
||||
+ continue;
|
||||
+
|
||||
+ hook->used = true;
|
||||
@@ -483,7 +488,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
+ kfree(hook);
|
||||
+ }
|
||||
+
|
||||
+ nf_flow_table_cleanup(dev_net(dev), dev);
|
||||
+ nf_flow_table_cleanup(dev);
|
||||
+
|
||||
+ return NOTIFY_DONE;
|
||||
+}
|
||||
@@ -523,7 +528,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
+module_exit(xt_flowoffload_tg_exit);
|
||||
--- a/net/netfilter/nf_flow_table_core.c
|
||||
+++ b/net/netfilter/nf_flow_table_core.c
|
||||
@@ -6,7 +6,6 @@
|
||||
@@ -7,7 +7,6 @@
|
||||
#include <linux/netdevice.h>
|
||||
#include <net/ip.h>
|
||||
#include <net/ip6_route.h>
|
||||
@@ -531,6 +536,24 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
#include <net/netfilter/nf_flow_table.h>
|
||||
#include <net/netfilter/nf_conntrack.h>
|
||||
#include <net/netfilter/nf_conntrack_core.h>
|
||||
@@ -338,8 +337,7 @@ flow_offload_lookup(struct nf_flowtable
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(flow_offload_lookup);
|
||||
|
||||
-static int
|
||||
-nf_flow_table_iterate(struct nf_flowtable *flow_table,
|
||||
+int nf_flow_table_iterate(struct nf_flowtable *flow_table,
|
||||
void (*iter)(struct flow_offload *flow, void *data),
|
||||
void *data)
|
||||
{
|
||||
@@ -372,6 +370,7 @@ nf_flow_table_iterate(struct nf_flowtabl
|
||||
|
||||
return err;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(nf_flow_table_iterate);
|
||||
|
||||
static void nf_flow_offload_gc_step(struct flow_offload *flow, void *data)
|
||||
{
|
||||
--- /dev/null
|
||||
+++ b/include/uapi/linux/netfilter/xt_FLOWOFFLOAD.h
|
||||
@@ -0,0 +1,17 @@
|
||||
@@ -551,3 +574,16 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
+};
|
||||
+
|
||||
+#endif /* _XT_FLOWOFFLOAD_H */
|
||||
--- a/include/net/netfilter/nf_flow_table.h
|
||||
+++ b/include/net/netfilter/nf_flow_table.h
|
||||
@@ -128,6 +128,10 @@ static inline void flow_offload_dead(str
|
||||
flow->flags |= FLOW_OFFLOAD_DYING;
|
||||
}
|
||||
|
||||
+int nf_flow_table_iterate(struct nf_flowtable *flow_table,
|
||||
+ void (*iter)(struct flow_offload *flow, void *data),
|
||||
+ void *data);
|
||||
+
|
||||
int nf_flow_snat_port(const struct flow_offload *flow,
|
||||
struct sk_buff *skb, unsigned int thoff,
|
||||
u8 protocol, enum flow_offload_tuple_dir dir);
|
||||
|
||||
@@ -11,7 +11,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
||||
|
||||
--- a/include/linux/netdevice.h
|
||||
+++ b/include/linux/netdevice.h
|
||||
@@ -140,8 +140,8 @@ static inline bool dev_xmit_complete(int
|
||||
@@ -136,8 +136,8 @@ static inline bool dev_xmit_complete(int
|
||||
|
||||
#if defined(CONFIG_HYPERV_NET)
|
||||
# define LL_MAX_HEADER 128
|
||||
|
||||
@@ -13,7 +13,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/sched/sch_fq_codel.c
|
||||
+++ b/net/sched/sch_fq_codel.c
|
||||
@@ -474,7 +474,11 @@ static int fq_codel_init(struct Qdisc *s
|
||||
@@ -462,7 +462,11 @@ static int fq_codel_init(struct Qdisc *s
|
||||
|
||||
sch->limit = 10*1024;
|
||||
q->flows_cnt = 1024;
|
||||
|
||||
@@ -14,7 +14,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/include/net/sch_generic.h
|
||||
+++ b/include/net/sch_generic.h
|
||||
@@ -487,12 +487,13 @@ extern struct Qdisc_ops noop_qdisc_ops;
|
||||
@@ -569,12 +569,13 @@ extern struct Qdisc_ops noop_qdisc_ops;
|
||||
extern struct Qdisc_ops pfifo_fast_ops;
|
||||
extern struct Qdisc_ops mq_qdisc_ops;
|
||||
extern struct Qdisc_ops noqueue_qdisc_ops;
|
||||
@@ -31,7 +31,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
struct Qdisc_class_common {
|
||||
--- a/net/sched/Kconfig
|
||||
+++ b/net/sched/Kconfig
|
||||
@@ -3,8 +3,9 @@
|
||||
@@ -4,8 +4,9 @@
|
||||
#
|
||||
|
||||
menuconfig NET_SCHED
|
||||
@@ -44,7 +44,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
device, it has to decide which ones to send first, which ones to
|
||||
--- a/net/sched/sch_api.c
|
||||
+++ b/net/sched/sch_api.c
|
||||
@@ -2162,7 +2162,7 @@ static int __init pktsched_init(void)
|
||||
@@ -2271,7 +2271,7 @@ static int __init pktsched_init(void)
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -55,7 +55,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
register_qdisc(&pfifo_head_drop_qdisc_ops);
|
||||
--- a/net/sched/sch_fq_codel.c
|
||||
+++ b/net/sched/sch_fq_codel.c
|
||||
@@ -714,7 +714,7 @@ static const struct Qdisc_class_ops fq_c
|
||||
@@ -702,7 +702,7 @@ static const struct Qdisc_class_ops fq_c
|
||||
.walk = fq_codel_walk,
|
||||
};
|
||||
|
||||
@@ -64,7 +64,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
.cl_ops = &fq_codel_class_ops,
|
||||
.id = "fq_codel",
|
||||
.priv_size = sizeof(struct fq_codel_sched_data),
|
||||
@@ -729,6 +729,7 @@ static struct Qdisc_ops fq_codel_qdisc_o
|
||||
@@ -717,6 +717,7 @@ static struct Qdisc_ops fq_codel_qdisc_o
|
||||
.dump_stats = fq_codel_dump_stats,
|
||||
.owner = THIS_MODULE,
|
||||
};
|
||||
@@ -74,7 +74,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
{
|
||||
--- a/net/sched/sch_generic.c
|
||||
+++ b/net/sched/sch_generic.c
|
||||
@@ -35,7 +35,7 @@
|
||||
@@ -32,7 +32,7 @@
|
||||
#include <net/xfrm.h>
|
||||
|
||||
/* Qdisc to use by default */
|
||||
@@ -83,7 +83,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
EXPORT_SYMBOL(default_qdisc_ops);
|
||||
|
||||
/* Main transmission queue. */
|
||||
@@ -1025,7 +1025,7 @@ static void attach_one_default_qdisc(str
|
||||
@@ -1034,12 +1034,12 @@ static void attach_one_default_qdisc(str
|
||||
void *_unused)
|
||||
{
|
||||
struct Qdisc *qdisc;
|
||||
@@ -92,3 +92,9 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
if (dev->priv_flags & IFF_NO_QUEUE)
|
||||
ops = &noqueue_qdisc_ops;
|
||||
else if(dev->type == ARPHRD_CAN)
|
||||
- ops = &pfifo_fast_ops;
|
||||
+ ops = &fq_codel_qdisc_ops;
|
||||
|
||||
qdisc = qdisc_create_dflt(dev_queue, ops, TC_H_ROOT, NULL);
|
||||
if (!qdisc) {
|
||||
|
||||
@@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/sched/sch_generic.c
|
||||
+++ b/net/sched/sch_generic.c
|
||||
@@ -612,207 +612,6 @@ struct Qdisc_ops noqueue_qdisc_ops __rea
|
||||
@@ -594,211 +594,6 @@ struct Qdisc_ops noqueue_qdisc_ops __rea
|
||||
.owner = THIS_MODULE,
|
||||
};
|
||||
|
||||
@@ -49,14 +49,14 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
-
|
||||
- err = skb_array_produce(q, skb);
|
||||
-
|
||||
- if (unlikely(err))
|
||||
- return qdisc_drop_cpu(skb, qdisc, to_free);
|
||||
- if (unlikely(err)) {
|
||||
- if (qdisc_is_percpu_stats(qdisc))
|
||||
- return qdisc_drop_cpu(skb, qdisc, to_free);
|
||||
- else
|
||||
- return qdisc_drop(skb, qdisc, to_free);
|
||||
- }
|
||||
-
|
||||
- qdisc_qstats_atomic_qlen_inc(qdisc);
|
||||
- /* Note: skb can not be used after skb_array_produce(),
|
||||
- * so we better not use qdisc_qstats_cpu_backlog_inc()
|
||||
- */
|
||||
- this_cpu_add(qdisc->cpu_qstats->backlog, pkt_len);
|
||||
- qdisc_update_stats_at_enqueue(qdisc, pkt_len);
|
||||
- return NET_XMIT_SUCCESS;
|
||||
-}
|
||||
-
|
||||
@@ -75,9 +75,9 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
- skb = __skb_array_consume(q);
|
||||
- }
|
||||
- if (likely(skb)) {
|
||||
- qdisc_qstats_cpu_backlog_dec(qdisc, skb);
|
||||
- qdisc_bstats_cpu_update(qdisc, skb);
|
||||
- qdisc_qstats_atomic_qlen_dec(qdisc);
|
||||
- qdisc_update_stats_at_dequeue(qdisc, skb);
|
||||
- } else {
|
||||
- WRITE_ONCE(qdisc->empty, true);
|
||||
- }
|
||||
-
|
||||
- return skb;
|
||||
@@ -117,10 +117,14 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
- kfree_skb(skb);
|
||||
- }
|
||||
-
|
||||
- for_each_possible_cpu(i) {
|
||||
- struct gnet_stats_queue *q = per_cpu_ptr(qdisc->cpu_qstats, i);
|
||||
- if (qdisc_is_percpu_stats(qdisc)) {
|
||||
- for_each_possible_cpu(i) {
|
||||
- struct gnet_stats_queue *q;
|
||||
-
|
||||
- q->backlog = 0;
|
||||
- q = per_cpu_ptr(qdisc->cpu_qstats, i);
|
||||
- q->backlog = 0;
|
||||
- q->qlen = 0;
|
||||
- }
|
||||
- }
|
||||
-}
|
||||
-
|
||||
@@ -215,6 +219,6 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
-};
|
||||
-EXPORT_SYMBOL(pfifo_fast_ops);
|
||||
-
|
||||
static struct lock_class_key qdisc_tx_busylock;
|
||||
static struct lock_class_key qdisc_running_key;
|
||||
|
||||
struct Qdisc *qdisc_alloc(struct netdev_queue *dev_queue,
|
||||
const struct Qdisc_ops *ops,
|
||||
struct netlink_ext_ack *extack)
|
||||
|
||||
@@ -12,7 +12,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/drivers/net/phy/Kconfig
|
||||
+++ b/drivers/net/phy/Kconfig
|
||||
@@ -209,6 +209,89 @@ config LED_TRIGGER_PHY
|
||||
@@ -249,6 +249,89 @@ config LED_TRIGGER_PHY
|
||||
for any speed known to the PHY.
|
||||
|
||||
|
||||
@@ -123,9 +123,9 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
+obj-$(CONFIG_RTL8367_PHY) += rtl8367.o
|
||||
+obj-$(CONFIG_RTL8367B_PHY) += rtl8367b.o
|
||||
+
|
||||
obj-$(CONFIG_MDIO_ASPEED) += mdio-aspeed.o
|
||||
obj-$(CONFIG_MDIO_BCM_IPROC) += mdio-bcm-iproc.o
|
||||
obj-$(CONFIG_MDIO_BCM_UNIMAC) += mdio-bcm-unimac.o
|
||||
obj-$(CONFIG_MDIO_BITBANG) += mdio-bitbang.o
|
||||
--- a/include/linux/platform_data/b53.h
|
||||
+++ b/include/linux/platform_data/b53.h
|
||||
@@ -29,6 +29,9 @@ struct b53_platform_data {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/include/linux/phy.h
|
||||
+++ b/include/linux/phy.h
|
||||
@@ -555,6 +555,12 @@ struct phy_driver {
|
||||
@@ -522,6 +522,12 @@ struct phy_driver {
|
||||
/* Determines the negotiated speed and duplex */
|
||||
int (*read_status)(struct phy_device *phydev);
|
||||
|
||||
@@ -15,9 +15,9 @@
|
||||
|
||||
--- a/drivers/net/phy/phy_device.c
|
||||
+++ b/drivers/net/phy/phy_device.c
|
||||
@@ -1577,6 +1577,9 @@ int genphy_update_link(struct phy_device
|
||||
{
|
||||
int status;
|
||||
@@ -1822,6 +1822,9 @@ int genphy_update_link(struct phy_device
|
||||
if (bmcr & BMCR_ANRESTART)
|
||||
goto done;
|
||||
|
||||
+ if (phydev->drv && phydev->drv->update_link)
|
||||
+ return phydev->drv->update_link(phydev);
|
||||
|
||||
@@ -15,7 +15,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/include/linux/netdevice.h
|
||||
+++ b/include/linux/netdevice.h
|
||||
@@ -1514,6 +1514,7 @@ enum netdev_priv_flags {
|
||||
@@ -1544,6 +1544,7 @@ enum netdev_priv_flags {
|
||||
IFF_FAILOVER_SLAVE = 1<<28,
|
||||
IFF_L3MDEV_RX_HANDLER = 1<<29,
|
||||
IFF_LIVE_RENAME_OK = 1<<30,
|
||||
@@ -23,7 +23,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
};
|
||||
|
||||
#define IFF_802_1Q_VLAN IFF_802_1Q_VLAN
|
||||
@@ -1546,6 +1547,7 @@ enum netdev_priv_flags {
|
||||
@@ -1576,6 +1577,7 @@ enum netdev_priv_flags {
|
||||
#define IFF_FAILOVER_SLAVE IFF_FAILOVER_SLAVE
|
||||
#define IFF_L3MDEV_RX_HANDLER IFF_L3MDEV_RX_HANDLER
|
||||
#define IFF_LIVE_RENAME_OK IFF_LIVE_RENAME_OK
|
||||
@@ -31,7 +31,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
/**
|
||||
* struct net_device - The DEVICE structure.
|
||||
@@ -1846,6 +1848,11 @@ struct net_device {
|
||||
@@ -1877,6 +1879,11 @@ struct net_device {
|
||||
const struct tlsdev_ops *tlsdev_ops;
|
||||
#endif
|
||||
|
||||
@@ -43,7 +43,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
const struct header_ops *header_ops;
|
||||
|
||||
unsigned int flags;
|
||||
@@ -1928,6 +1935,10 @@ struct net_device {
|
||||
@@ -1959,6 +1966,10 @@ struct net_device {
|
||||
struct mpls_dev __rcu *mpls_ptr;
|
||||
#endif
|
||||
|
||||
@@ -56,7 +56,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
*/
|
||||
--- a/include/linux/skbuff.h
|
||||
+++ b/include/linux/skbuff.h
|
||||
@@ -2547,6 +2547,10 @@ static inline int pskb_trim(struct sk_bu
|
||||
@@ -2665,6 +2665,10 @@ static inline int pskb_trim(struct sk_bu
|
||||
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
|
||||
* @skb: buffer to alter
|
||||
@@ -2678,16 +2682,6 @@ static inline struct sk_buff *dev_alloc_
|
||||
@@ -2796,16 +2800,6 @@ static inline struct sk_buff *dev_alloc_
|
||||
}
|
||||
|
||||
|
||||
@@ -86,7 +86,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
{
|
||||
--- a/net/Kconfig
|
||||
+++ b/net/Kconfig
|
||||
@@ -25,6 +25,12 @@ menuconfig NET
|
||||
@@ -26,6 +26,12 @@ menuconfig NET
|
||||
|
||||
if NET
|
||||
|
||||
@@ -101,8 +101,8 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
help
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -3253,10 +3253,20 @@ static int xmit_one(struct sk_buff *skb,
|
||||
if (!list_empty(&ptype_all) || !list_empty(&dev->ptype_all))
|
||||
@@ -3194,10 +3194,20 @@ static int xmit_one(struct sk_buff *skb,
|
||||
if (dev_nit_active(dev))
|
||||
dev_queue_xmit_nit(skb, dev);
|
||||
|
||||
- len = skb->len;
|
||||
@@ -128,15 +128,15 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
}
|
||||
--- a/net/core/skbuff.c
|
||||
+++ b/net/core/skbuff.c
|
||||
@@ -63,6 +63,7 @@
|
||||
#include <linux/errqueue.h>
|
||||
@@ -60,6 +60,7 @@
|
||||
#include <linux/prefetch.h>
|
||||
#include <linux/if_vlan.h>
|
||||
#include <linux/mpls.h>
|
||||
+#include <linux/if.h>
|
||||
|
||||
#include <net/protocol.h>
|
||||
#include <net/dst.h>
|
||||
@@ -503,6 +504,22 @@ skb_fail:
|
||||
@@ -540,6 +541,22 @@ skb_fail:
|
||||
}
|
||||
EXPORT_SYMBOL(__napi_alloc_skb);
|
||||
|
||||
@@ -161,7 +161,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
{
|
||||
--- a/net/ethernet/eth.c
|
||||
+++ b/net/ethernet/eth.c
|
||||
@@ -172,6 +172,12 @@ __be16 eth_type_trans(struct sk_buff *sk
|
||||
@@ -171,6 +171,12 @@ __be16 eth_type_trans(struct sk_buff *sk
|
||||
const struct ethhdr *eth;
|
||||
|
||||
skb->dev = dev;
|
||||
|
||||
@@ -32,7 +32,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||
#include <linux/bcm47xx_nvram.h>
|
||||
#include <linux/phy.h>
|
||||
#include <linux/phy_fixed.h>
|
||||
@@ -1409,6 +1410,17 @@ static const struct ethtool_ops bgmac_et
|
||||
@@ -1407,6 +1408,17 @@ static const struct ethtool_ops bgmac_et
|
||||
.set_link_ksettings = phy_ethtool_set_link_ksettings,
|
||||
};
|
||||
|
||||
@@ -50,7 +50,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||
/**************************************************
|
||||
* MII
|
||||
**************************************************/
|
||||
@@ -1540,6 +1552,14 @@ int bgmac_enet_probe(struct bgmac *bgmac
|
||||
@@ -1538,6 +1550,14 @@ int bgmac_enet_probe(struct bgmac *bgmac
|
||||
net_dev->hw_features = net_dev->features;
|
||||
net_dev->vlan_features = net_dev->features;
|
||||
|
||||
@@ -65,7 +65,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||
err = register_netdev(bgmac->net_dev);
|
||||
if (err) {
|
||||
dev_err(bgmac->dev, "Cannot register net device\n");
|
||||
@@ -1562,6 +1582,10 @@ EXPORT_SYMBOL_GPL(bgmac_enet_probe);
|
||||
@@ -1560,6 +1580,10 @@ EXPORT_SYMBOL_GPL(bgmac_enet_probe);
|
||||
|
||||
void bgmac_enet_remove(struct bgmac *bgmac)
|
||||
{
|
||||
|
||||
@@ -16,7 +16,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/Kconfig
|
||||
+++ b/net/Kconfig
|
||||
@@ -98,6 +98,9 @@ source "net/netlabel/Kconfig"
|
||||
@@ -100,6 +100,9 @@ source "net/netlabel/Kconfig"
|
||||
|
||||
endif # if INET
|
||||
|
||||
@@ -34,7 +34,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
neighbour.o rtnetlink.o utils.o link_watch.o filter.o \
|
||||
- sock_diag.o dev_ioctl.o tso.o sock_reuseport.o \
|
||||
+ dev_ioctl.o tso.o sock_reuseport.o \
|
||||
fib_notifier.o xdp.o
|
||||
fib_notifier.o xdp.o flow_offload.o
|
||||
|
||||
+obj-$(CONFIG_SOCK_DIAG) += sock_diag.o
|
||||
obj-y += net-sysfs.o
|
||||
@@ -42,7 +42,15 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
obj-$(CONFIG_PROC_FS) += net-procfs.o
|
||||
--- a/net/core/sock.c
|
||||
+++ b/net/core/sock.c
|
||||
@@ -490,6 +490,18 @@ discard_and_relse:
|
||||
@@ -140,6 +140,7 @@
|
||||
|
||||
static DEFINE_MUTEX(proto_list_mutex);
|
||||
static LIST_HEAD(proto_list);
|
||||
+static atomic64_t cookie_gen;
|
||||
|
||||
static void sock_inuse_add(struct net *net, int val);
|
||||
|
||||
@@ -539,6 +540,18 @@ discard_and_relse:
|
||||
}
|
||||
EXPORT_SYMBOL(__sk_receive_skb);
|
||||
|
||||
@@ -53,7 +61,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
+
|
||||
+ if (res)
|
||||
+ return res;
|
||||
+ res = atomic64_inc_return(&sock_net(sk)->cookie_gen);
|
||||
+ res = atomic64_inc_return(&cookie_gen);
|
||||
+ atomic64_cmpxchg(&sk->sk_cookie, 0, res);
|
||||
+ }
|
||||
+}
|
||||
@@ -61,7 +69,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
struct dst_entry *__sk_dst_check(struct sock *sk, u32 cookie)
|
||||
{
|
||||
struct dst_entry *dst = __sk_dst_get(sk);
|
||||
@@ -1603,9 +1615,11 @@ static void __sk_free(struct sock *sk)
|
||||
@@ -1746,9 +1759,11 @@ static void __sk_free(struct sock *sk)
|
||||
if (likely(sk->sk_net_refcnt))
|
||||
sock_inuse_add(sock_net(sk), -1);
|
||||
|
||||
@@ -75,10 +83,12 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/core/sock_diag.c
|
||||
+++ b/net/core/sock_diag.c
|
||||
@@ -20,18 +20,6 @@ static int (*inet_rcv_compat)(struct sk_
|
||||
@@ -19,19 +19,6 @@ static const struct sock_diag_handler *s
|
||||
static int (*inet_rcv_compat)(struct sk_buff *skb, struct nlmsghdr *nlh);
|
||||
static DEFINE_MUTEX(sock_diag_table_mutex);
|
||||
static struct workqueue_struct *broadcast_wq;
|
||||
|
||||
-static atomic64_t cookie_gen;
|
||||
-
|
||||
-u64 sock_gen_cookie(struct sock *sk)
|
||||
-{
|
||||
- while (1) {
|
||||
@@ -86,17 +96,16 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
-
|
||||
- if (res)
|
||||
- return res;
|
||||
- res = atomic64_inc_return(&sock_net(sk)->cookie_gen);
|
||||
- res = atomic64_inc_return(&cookie_gen);
|
||||
- atomic64_cmpxchg(&sk->sk_cookie, 0, res);
|
||||
- }
|
||||
-}
|
||||
-
|
||||
|
||||
int sock_diag_check_cookie(struct sock *sk, const __u32 *cookie)
|
||||
{
|
||||
u64 res;
|
||||
--- a/net/ipv4/Kconfig
|
||||
+++ b/net/ipv4/Kconfig
|
||||
@@ -425,6 +425,7 @@ config INET_XFRM_MODE_BEET
|
||||
@@ -399,6 +399,7 @@ config INET_TUNNEL
|
||||
|
||||
config INET_DIAG
|
||||
tristate "INET: socket monitoring interface"
|
||||
@@ -106,7 +115,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
Support for INET (TCP, DCCP, etc) socket monitoring interface used by
|
||||
--- a/net/netlink/Kconfig
|
||||
+++ b/net/netlink/Kconfig
|
||||
@@ -4,6 +4,7 @@
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
config NETLINK_DIAG
|
||||
tristate "NETLINK: socket monitoring interface"
|
||||
@@ -116,7 +125,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
Support for NETLINK socket monitoring interface used by the ss tool.
|
||||
--- a/net/packet/Kconfig
|
||||
+++ b/net/packet/Kconfig
|
||||
@@ -18,6 +18,7 @@ config PACKET
|
||||
@@ -19,6 +19,7 @@ config PACKET
|
||||
config PACKET_DIAG
|
||||
tristate "Packet: sockets monitoring interface"
|
||||
depends on PACKET
|
||||
@@ -126,7 +135,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
Support for PF_PACKET sockets monitoring interface used by the ss tool.
|
||||
--- a/net/unix/Kconfig
|
||||
+++ b/net/unix/Kconfig
|
||||
@@ -22,6 +22,7 @@ config UNIX
|
||||
@@ -28,6 +28,7 @@ config UNIX_SCM
|
||||
config UNIX_DIAG
|
||||
tristate "UNIX: socket monitoring interface"
|
||||
depends on UNIX
|
||||
|
||||
@@ -29,7 +29,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/fs/locks.c
|
||||
+++ b/fs/locks.c
|
||||
@@ -2786,6 +2786,8 @@ static const struct seq_operations locks
|
||||
@@ -2961,6 +2961,8 @@ static const struct seq_operations locks
|
||||
|
||||
static int __init proc_locks_init(void)
|
||||
{
|
||||
@@ -40,18 +40,21 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
return 0;
|
||||
--- a/fs/proc/Kconfig
|
||||
+++ b/fs/proc/Kconfig
|
||||
@@ -97,3 +97,8 @@ config PROC_CHILDREN
|
||||
|
||||
@@ -100,6 +100,11 @@ config PROC_CHILDREN
|
||||
Say Y if you are running any user-space software which takes benefit from
|
||||
this interface. For example, rkt is such a piece of software.
|
||||
+
|
||||
|
||||
+config PROC_STRIPPED
|
||||
+ default n
|
||||
+ depends on EXPERT
|
||||
+ bool "Strip non-essential /proc functionality to reduce code size"
|
||||
+
|
||||
config PROC_PID_ARCH_STATUS
|
||||
def_bool n
|
||||
depends on PROC_FS
|
||||
--- a/fs/proc/consoles.c
|
||||
+++ b/fs/proc/consoles.c
|
||||
@@ -93,6 +93,9 @@ static const struct seq_operations conso
|
||||
@@ -92,6 +92,9 @@ static const struct seq_operations conso
|
||||
|
||||
static int __init proc_consoles_init(void)
|
||||
{
|
||||
@@ -97,7 +100,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
proc_mkdir("tty/ldisc", NULL); /* Preserved: it's userspace visible */
|
||||
--- a/include/net/snmp.h
|
||||
+++ b/include/net/snmp.h
|
||||
@@ -123,6 +123,21 @@ struct linux_xfrm_mib {
|
||||
@@ -118,6 +118,21 @@ struct linux_xfrm_mib {
|
||||
#define DECLARE_SNMP_STAT(type, name) \
|
||||
extern __typeof__(type) __percpu *name
|
||||
|
||||
@@ -119,7 +122,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
#define __SNMP_INC_STATS(mib, field) \
|
||||
__this_cpu_inc(mib->mibs[field])
|
||||
|
||||
@@ -153,8 +168,9 @@ struct linux_xfrm_mib {
|
||||
@@ -148,8 +163,9 @@ struct linux_xfrm_mib {
|
||||
__this_cpu_add(ptr[basefield##OCTETS], addend); \
|
||||
} while (0)
|
||||
|
||||
@@ -132,7 +135,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
do { \
|
||||
--- a/ipc/msg.c
|
||||
+++ b/ipc/msg.c
|
||||
@@ -1292,6 +1292,9 @@ void __init msg_init(void)
|
||||
@@ -1317,6 +1317,9 @@ void __init msg_init(void)
|
||||
{
|
||||
msg_init_ns(&init_ipc_ns);
|
||||
|
||||
@@ -189,7 +192,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
}
|
||||
--- a/kernel/irq/proc.c
|
||||
+++ b/kernel/irq/proc.c
|
||||
@@ -333,6 +333,9 @@ void register_irq_proc(unsigned int irq,
|
||||
@@ -319,6 +319,9 @@ void register_irq_proc(unsigned int irq,
|
||||
void __maybe_unused *irqp = (void *)(unsigned long) irq;
|
||||
char name [MAX_NAMELEN];
|
||||
|
||||
@@ -199,7 +202,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (!root_irq_dir || (desc->irq_data.chip == &no_irq_chip))
|
||||
return;
|
||||
|
||||
@@ -386,6 +389,9 @@ void unregister_irq_proc(unsigned int ir
|
||||
@@ -372,6 +375,9 @@ void unregister_irq_proc(unsigned int ir
|
||||
{
|
||||
char name [MAX_NAMELEN];
|
||||
|
||||
@@ -209,7 +212,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (!root_irq_dir || !desc->dir)
|
||||
return;
|
||||
#ifdef CONFIG_SMP
|
||||
@@ -424,6 +430,9 @@ void init_irq_proc(void)
|
||||
@@ -410,6 +416,9 @@ void init_irq_proc(void)
|
||||
unsigned int irq;
|
||||
struct irq_desc *desc;
|
||||
|
||||
@@ -221,7 +224,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (!root_irq_dir)
|
||||
--- a/kernel/time/timer_list.c
|
||||
+++ b/kernel/time/timer_list.c
|
||||
@@ -375,6 +375,8 @@ static int __init init_timer_list_procfs
|
||||
@@ -370,6 +370,8 @@ static int __init init_timer_list_procfs
|
||||
{
|
||||
struct proc_dir_entry *pe;
|
||||
|
||||
@@ -232,7 +235,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (!pe)
|
||||
--- a/mm/vmalloc.c
|
||||
+++ b/mm/vmalloc.c
|
||||
@@ -2749,6 +2749,8 @@ static const struct seq_operations vmall
|
||||
@@ -3549,6 +3549,8 @@ static const struct seq_operations vmall
|
||||
|
||||
static int __init proc_vmalloc_init(void)
|
||||
{
|
||||
@@ -243,7 +246,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
&vmalloc_op,
|
||||
--- a/mm/vmstat.c
|
||||
+++ b/mm/vmstat.c
|
||||
@@ -1972,10 +1972,12 @@ void __init init_mm_internals(void)
|
||||
@@ -1988,10 +1988,12 @@ void __init init_mm_internals(void)
|
||||
start_shepherd_timer();
|
||||
#endif
|
||||
#ifdef CONFIG_PROC_FS
|
||||
@@ -261,7 +264,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/8021q/vlanproc.c
|
||||
+++ b/net/8021q/vlanproc.c
|
||||
@@ -96,6 +96,9 @@ void vlan_proc_cleanup(struct net *net)
|
||||
@@ -93,6 +93,9 @@ void vlan_proc_cleanup(struct net *net)
|
||||
{
|
||||
struct vlan_net *vn = net_generic(net, vlan_net_id);
|
||||
|
||||
@@ -271,7 +274,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (vn->proc_vlan_conf)
|
||||
remove_proc_entry(name_conf, vn->proc_vlan_dir);
|
||||
|
||||
@@ -115,6 +118,9 @@ int __net_init vlan_proc_init(struct net
|
||||
@@ -112,6 +115,9 @@ int __net_init vlan_proc_init(struct net
|
||||
{
|
||||
struct vlan_net *vn = net_generic(net, vlan_net_id);
|
||||
|
||||
@@ -327,7 +330,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/core/sock.c
|
||||
+++ b/net/core/sock.c
|
||||
@@ -3486,6 +3486,8 @@ static __net_initdata struct pernet_oper
|
||||
@@ -3603,6 +3603,8 @@ static __net_initdata struct pernet_oper
|
||||
|
||||
static int __init proto_init(void)
|
||||
{
|
||||
@@ -338,7 +341,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/ipv4/fib_trie.c
|
||||
+++ b/net/ipv4/fib_trie.c
|
||||
@@ -2717,11 +2717,13 @@ static const struct seq_operations fib_r
|
||||
@@ -2844,11 +2844,13 @@ static const struct seq_operations fib_r
|
||||
|
||||
int __net_init fib_proc_init(struct net *net)
|
||||
{
|
||||
@@ -354,7 +357,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
fib_triestat_seq_show, NULL))
|
||||
goto out2;
|
||||
|
||||
@@ -2732,17 +2734,21 @@ int __net_init fib_proc_init(struct net
|
||||
@@ -2859,17 +2861,21 @@ int __net_init fib_proc_init(struct net
|
||||
return 0;
|
||||
|
||||
out3:
|
||||
@@ -382,7 +385,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/ipv4/proc.c
|
||||
+++ b/net/ipv4/proc.c
|
||||
@@ -524,5 +524,8 @@ static __net_initdata struct pernet_oper
|
||||
@@ -522,5 +522,8 @@ static __net_initdata struct pernet_oper
|
||||
|
||||
int __init ip_misc_proc_init(void)
|
||||
{
|
||||
@@ -393,7 +396,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
}
|
||||
--- a/net/ipv4/route.c
|
||||
+++ b/net/ipv4/route.c
|
||||
@@ -411,6 +411,9 @@ static struct pernet_operations ip_rt_pr
|
||||
@@ -408,6 +408,9 @@ static struct pernet_operations ip_rt_pr
|
||||
|
||||
static int __init ip_rt_proc_init(void)
|
||||
{
|
||||
|
||||
@@ -13,48 +13,48 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/drivers/base/Kconfig
|
||||
+++ b/drivers/base/Kconfig
|
||||
@@ -172,7 +172,7 @@ config SOC_BUS
|
||||
@@ -179,7 +179,7 @@ config SOC_BUS
|
||||
source "drivers/base/regmap/Kconfig"
|
||||
|
||||
config DMA_SHARED_BUFFER
|
||||
- bool
|
||||
+ tristate
|
||||
default n
|
||||
select ANON_INODES
|
||||
select IRQ_WORK
|
||||
help
|
||||
--- a/drivers/dma-buf/Makefile
|
||||
+++ b/drivers/dma-buf/Makefile
|
||||
@@ -1,3 +1,7 @@
|
||||
-obj-y := dma-buf.o dma-fence.o dma-fence-array.o reservation.o seqno-fence.o
|
||||
@@ -1,9 +1,13 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
-obj-y := dma-buf.o dma-fence.o dma-fence-array.o dma-fence-chain.o \
|
||||
- dma-resv.o seqno-fence.o
|
||||
-obj-$(CONFIG_SYNC_FILE) += sync_file.o
|
||||
-obj-$(CONFIG_SW_SYNC) += sw_sync.o sync_debug.o
|
||||
-obj-$(CONFIG_UDMABUF) += udmabuf.o
|
||||
+obj-$(CONFIG_DMA_SHARED_BUFFER) := dma-shared-buffer.o
|
||||
+
|
||||
+dma-buf-objs-y := dma-buf.o dma-fence.o dma-fence-array.o reservation.o seqno-fence.o
|
||||
+dma-buf-objs-$(CONFIG_SYNC_FILE) += sync_file.o
|
||||
+dma-buf-objs-y := dma-buf.o dma-fence.o dma-fence-array.o dma-fence-chain.o \
|
||||
+ dma-resv.o seqno-fence.o
|
||||
+dma-buf-objs-$(CONFIG_SYNC_FILE) += sync_file.o
|
||||
+dma-buf-objs-$(CONFIG_SW_SYNC) += sw_sync.o sync_debug.o
|
||||
+dma-buf-objs-$(CONFIG_UDMABUF) += udmabuf.o
|
||||
+
|
||||
+dma-shared-buffer-objs := $(dma-buf-objs-y)
|
||||
|
||||
dmabuf_selftests-y := \
|
||||
selftest.o \
|
||||
--- a/drivers/dma-buf/dma-buf.c
|
||||
+++ b/drivers/dma-buf/dma-buf.c
|
||||
@@ -34,6 +34,7 @@
|
||||
#include <linux/poll.h>
|
||||
#include <linux/reservation.h>
|
||||
#include <linux/mm.h>
|
||||
+#include <linux/module.h>
|
||||
|
||||
#include <uapi/linux/dma-buf.h>
|
||||
|
||||
@@ -1159,4 +1160,5 @@ static void __exit dma_buf_deinit(void)
|
||||
{
|
||||
@@ -1297,4 +1297,5 @@ static void __exit dma_buf_deinit(void)
|
||||
dma_buf_uninit_debugfs();
|
||||
kern_unmount(dma_buf_mnt);
|
||||
}
|
||||
-__exitcall(dma_buf_deinit);
|
||||
+module_exit(dma_buf_deinit);
|
||||
+MODULE_LICENSE("GPL");
|
||||
--- a/kernel/sched/core.c
|
||||
+++ b/kernel/sched/core.c
|
||||
@@ -2129,6 +2129,7 @@ int wake_up_state(struct task_struct *p,
|
||||
@@ -2673,6 +2673,7 @@ int wake_up_state(struct task_struct *p,
|
||||
{
|
||||
return try_to_wake_up(p, state, 0);
|
||||
}
|
||||
@@ -62,3 +62,13 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
/*
|
||||
* Perform scheduler related setup for a newly forked process p.
|
||||
--- a/fs/d_path.c
|
||||
+++ b/fs/d_path.c
|
||||
@@ -307,6 +307,7 @@ char *dynamic_dname(struct dentry *dentr
|
||||
buffer += buflen - sz;
|
||||
return memcpy(buffer, temp, sz);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(dynamic_dname);
|
||||
|
||||
char *simple_dname(struct dentry *dentry, char *buffer, int buflen)
|
||||
{
|
||||
|
||||
@@ -20,7 +20,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
#ifdef CONFIG_UEVENT_HELPER
|
||||
/* path to the userspace helper executed on an event */
|
||||
extern char uevent_helper[];
|
||||
@@ -244,4 +246,7 @@ int kobject_synth_uevent(struct kobject
|
||||
@@ -245,4 +247,7 @@ int kobject_synth_uevent(struct kobject
|
||||
__printf(2, 3)
|
||||
int add_uevent_var(struct kobj_uevent_env *env, const char *format, ...);
|
||||
|
||||
@@ -30,7 +30,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
#endif /* _KOBJECT_H_ */
|
||||
--- a/lib/kobject_uevent.c
|
||||
+++ b/lib/kobject_uevent.c
|
||||
@@ -688,6 +688,43 @@ int add_uevent_var(struct kobj_uevent_en
|
||||
@@ -690,6 +690,43 @@ int add_uevent_var(struct kobj_uevent_en
|
||||
EXPORT_SYMBOL_GPL(add_uevent_var);
|
||||
|
||||
#if defined(CONFIG_NET)
|
||||
|
||||
@@ -1,338 +0,0 @@
|
||||
From 6b1ab74a9917012d0c559edc4ed299d9228ac89f Mon Sep 17 00:00:00 2001
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Sat, 8 Jul 2017 08:26:47 +0200
|
||||
Subject: kernel: add the new 'crashlog' feature
|
||||
|
||||
this tries to store kernel oops/panic logs in a fixed location in RAM to
|
||||
recover them available to user space using debugfs
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
include/linux/crashlog.h | 17 ++++
|
||||
init/Kconfig | 4 +
|
||||
kernel/Makefile | 1 +
|
||||
kernel/crashlog.c | 213 +++++++++++++++++++++++++++++++++++++++++++++++
|
||||
kernel/module.c | 3 +
|
||||
mm/bootmem.c | 2 +
|
||||
mm/memblock.c | 5 ++
|
||||
7 files changed, 245 insertions(+)
|
||||
create mode 100644 include/linux/crashlog.h
|
||||
create mode 100644 kernel/crashlog.c
|
||||
|
||||
--- /dev/null
|
||||
+++ b/include/linux/crashlog.h
|
||||
@@ -0,0 +1,17 @@
|
||||
+#ifndef __CRASHLOG_H
|
||||
+#define __CRASHLOG_H
|
||||
+
|
||||
+#ifdef CONFIG_CRASHLOG
|
||||
+void crashlog_init_bootmem(struct bootmem_data *bdata);
|
||||
+void crashlog_init_memblock(phys_addr_t addr, phys_addr_t size);
|
||||
+#else
|
||||
+static inline void crashlog_init_bootmem(struct bootmem_data *bdata)
|
||||
+{
|
||||
+}
|
||||
+
|
||||
+static inline void crashlog_init_memblock(phys_addr_t addr, phys_addr_t size)
|
||||
+{
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+#endif
|
||||
--- a/init/Kconfig
|
||||
+++ b/init/Kconfig
|
||||
@@ -1049,6 +1049,10 @@ config RELAY
|
||||
|
||||
If unsure, say N.
|
||||
|
||||
+config CRASHLOG
|
||||
+ bool "Crash logging"
|
||||
+ depends on (!NO_BOOTMEM || HAVE_MEMBLOCK)
|
||||
+
|
||||
config BLK_DEV_INITRD
|
||||
bool "Initial RAM filesystem and RAM disk (initramfs/initrd) support"
|
||||
help
|
||||
--- a/kernel/Makefile
|
||||
+++ b/kernel/Makefile
|
||||
@@ -114,6 +114,7 @@ obj-$(CONFIG_TORTURE_TEST) += torture.o
|
||||
obj-$(CONFIG_HAS_IOMEM) += iomem.o
|
||||
obj-$(CONFIG_ZONE_DEVICE) += memremap.o
|
||||
obj-$(CONFIG_RSEQ) += rseq.o
|
||||
+obj-$(CONFIG_CRASHLOG) += crashlog.o
|
||||
|
||||
$(obj)/configs.o: $(obj)/config_data.h
|
||||
|
||||
--- /dev/null
|
||||
+++ b/kernel/crashlog.c
|
||||
@@ -0,0 +1,213 @@
|
||||
+/*
|
||||
+ * Crash information logger
|
||||
+ * Copyright (C) 2010 Felix Fietkau <nbd@nbd.name>
|
||||
+ *
|
||||
+ * Based on ramoops.c
|
||||
+ * Copyright (C) 2010 Marco Stornelli <marco.stornelli@gmail.com>
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or
|
||||
+ * modify it under the terms of the GNU General Public License
|
||||
+ * version 2 as published by the Free Software Foundation.
|
||||
+ *
|
||||
+ * This program is distributed in the hope that it will be useful, but
|
||||
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ * General Public License for more details.
|
||||
+ *
|
||||
+ * You should have received a copy of the GNU General Public License
|
||||
+ * along with this program; if not, write to the Free Software
|
||||
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
||||
+ * 02110-1301 USA
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/bootmem.h>
|
||||
+#include <linux/memblock.h>
|
||||
+#include <linux/debugfs.h>
|
||||
+#include <linux/crashlog.h>
|
||||
+#include <linux/kmsg_dump.h>
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/pfn.h>
|
||||
+#include <linux/vmalloc.h>
|
||||
+#include <asm/io.h>
|
||||
+
|
||||
+#define CRASHLOG_PAGES 4
|
||||
+#define CRASHLOG_SIZE (CRASHLOG_PAGES * PAGE_SIZE)
|
||||
+#define CRASHLOG_MAGIC 0xa1eedead
|
||||
+
|
||||
+/*
|
||||
+ * Start the log at 1M before the end of RAM, as some boot loaders like
|
||||
+ * to use the end of the RAM for stack usage and other things
|
||||
+ * If this fails, fall back to using the last part.
|
||||
+ */
|
||||
+#define CRASHLOG_OFFSET (1024 * 1024)
|
||||
+
|
||||
+struct crashlog_data {
|
||||
+ u32 magic;
|
||||
+ u32 len;
|
||||
+ u8 data[];
|
||||
+};
|
||||
+
|
||||
+static struct debugfs_blob_wrapper crashlog_blob;
|
||||
+static unsigned long crashlog_addr = 0;
|
||||
+static struct crashlog_data *crashlog_buf;
|
||||
+static struct kmsg_dumper dump;
|
||||
+static bool first = true;
|
||||
+
|
||||
+extern struct list_head *crashlog_modules;
|
||||
+
|
||||
+static bool crashlog_set_addr(phys_addr_t addr, phys_addr_t size)
|
||||
+{
|
||||
+ /* Limit to lower 64 MB to avoid highmem */
|
||||
+ phys_addr_t limit = 64 * 1024 * 1024;
|
||||
+
|
||||
+ if (crashlog_addr)
|
||||
+ return false;
|
||||
+
|
||||
+ if (addr > limit)
|
||||
+ return false;
|
||||
+
|
||||
+ if (addr + size > limit)
|
||||
+ size = limit - addr;
|
||||
+
|
||||
+ crashlog_addr = addr;
|
||||
+
|
||||
+ if (addr + size > CRASHLOG_OFFSET)
|
||||
+ crashlog_addr += size - CRASHLOG_OFFSET;
|
||||
+
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
+#ifndef CONFIG_NO_BOOTMEM
|
||||
+void __init crashlog_init_bootmem(bootmem_data_t *bdata)
|
||||
+{
|
||||
+ phys_addr_t start, end;
|
||||
+
|
||||
+ start = PFN_PHYS(bdata->node_low_pfn);
|
||||
+ end = PFN_PHYS(bdata->node_min_pfn);
|
||||
+ if (!crashlog_set_addr(start, end - start))
|
||||
+ return;
|
||||
+
|
||||
+ if (reserve_bootmem(crashlog_addr, CRASHLOG_SIZE, BOOTMEM_EXCLUSIVE) < 0) {
|
||||
+ printk("Crashlog failed to allocate RAM at address 0x%lx\n",
|
||||
+ crashlog_addr);
|
||||
+ crashlog_addr = 0;
|
||||
+ }
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+#ifdef CONFIG_HAVE_MEMBLOCK
|
||||
+void __init_memblock crashlog_init_memblock(phys_addr_t addr, phys_addr_t size)
|
||||
+{
|
||||
+ if (!crashlog_set_addr(addr, size))
|
||||
+ return;
|
||||
+
|
||||
+ if (memblock_reserve(crashlog_addr, CRASHLOG_SIZE)) {
|
||||
+ printk("Crashlog failed to allocate RAM at address 0x%lx\n",
|
||||
+ crashlog_addr);
|
||||
+ crashlog_addr = 0;
|
||||
+ }
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+static void __init crashlog_copy(void)
|
||||
+{
|
||||
+ if (crashlog_buf->magic != CRASHLOG_MAGIC)
|
||||
+ return;
|
||||
+
|
||||
+ if (!crashlog_buf->len || crashlog_buf->len >
|
||||
+ CRASHLOG_SIZE - sizeof(*crashlog_buf))
|
||||
+ return;
|
||||
+
|
||||
+ crashlog_blob.size = crashlog_buf->len;
|
||||
+ crashlog_blob.data = kmemdup(crashlog_buf->data,
|
||||
+ crashlog_buf->len, GFP_KERNEL);
|
||||
+
|
||||
+ debugfs_create_blob("crashlog", 0700, NULL, &crashlog_blob);
|
||||
+}
|
||||
+
|
||||
+static int get_maxlen(void)
|
||||
+{
|
||||
+ return CRASHLOG_SIZE - sizeof(*crashlog_buf) - crashlog_buf->len;
|
||||
+}
|
||||
+
|
||||
+static void crashlog_printf(const char *fmt, ...)
|
||||
+{
|
||||
+ va_list args;
|
||||
+ int len = get_maxlen();
|
||||
+
|
||||
+ if (!len)
|
||||
+ return;
|
||||
+
|
||||
+ va_start(args, fmt);
|
||||
+ crashlog_buf->len += vscnprintf(
|
||||
+ &crashlog_buf->data[crashlog_buf->len],
|
||||
+ len, fmt, args);
|
||||
+ va_end(args);
|
||||
+}
|
||||
+
|
||||
+static void crashlog_do_dump(struct kmsg_dumper *dumper,
|
||||
+ enum kmsg_dump_reason reason)
|
||||
+{
|
||||
+ struct timeval tv;
|
||||
+ struct module *m;
|
||||
+ char *buf;
|
||||
+ size_t len;
|
||||
+
|
||||
+ if (!first)
|
||||
+ crashlog_printf("\n===================================\n");
|
||||
+
|
||||
+ do_gettimeofday(&tv);
|
||||
+ crashlog_printf("Time: %lu.%lu\n",
|
||||
+ (long)tv.tv_sec, (long)tv.tv_usec);
|
||||
+
|
||||
+ if (first) {
|
||||
+ crashlog_printf("Modules:");
|
||||
+ list_for_each_entry(m, crashlog_modules, list) {
|
||||
+ crashlog_printf("\t%s@%p+%x", m->name,
|
||||
+ m->core_layout.base, m->core_layout.size,
|
||||
+ m->init_layout.base, m->init_layout.size);
|
||||
+ }
|
||||
+ crashlog_printf("\n");
|
||||
+ first = false;
|
||||
+ }
|
||||
+
|
||||
+ buf = (char *)&crashlog_buf->data[crashlog_buf->len];
|
||||
+
|
||||
+ kmsg_dump_get_buffer(dumper, true, buf, get_maxlen(), &len);
|
||||
+
|
||||
+ crashlog_buf->len += len;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+int __init crashlog_init_fs(void)
|
||||
+{
|
||||
+ struct page *pages[CRASHLOG_PAGES];
|
||||
+ pgprot_t prot;
|
||||
+ int i;
|
||||
+
|
||||
+ if (!crashlog_addr) {
|
||||
+ printk("No memory allocated for crashlog\n");
|
||||
+ return -ENOMEM;
|
||||
+ }
|
||||
+
|
||||
+ printk("Crashlog allocated RAM at address 0x%lx\n", (unsigned long) crashlog_addr);
|
||||
+ for (i = 0; i < CRASHLOG_PAGES; i++)
|
||||
+ pages[i] = pfn_to_page((crashlog_addr >> PAGE_SHIFT) + i);
|
||||
+
|
||||
+ prot = pgprot_writecombine(PAGE_KERNEL);
|
||||
+ crashlog_buf = vmap(pages, CRASHLOG_PAGES, VM_MAP, prot);
|
||||
+
|
||||
+ crashlog_copy();
|
||||
+
|
||||
+ crashlog_buf->magic = CRASHLOG_MAGIC;
|
||||
+ crashlog_buf->len = 0;
|
||||
+
|
||||
+ dump.max_reason = KMSG_DUMP_OOPS;
|
||||
+ dump.dump = crashlog_do_dump;
|
||||
+ kmsg_dump_register(&dump);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+module_init(crashlog_init_fs);
|
||||
--- a/kernel/module.c
|
||||
+++ b/kernel/module.c
|
||||
@@ -251,6 +251,9 @@ static void mod_update_bounds(struct mod
|
||||
#ifdef CONFIG_KGDB_KDB
|
||||
struct list_head *kdb_modules = &modules; /* kdb needs the list of modules */
|
||||
#endif /* CONFIG_KGDB_KDB */
|
||||
+#ifdef CONFIG_CRASHLOG
|
||||
+struct list_head *crashlog_modules = &modules;
|
||||
+#endif
|
||||
|
||||
static void module_assert_mutex(void)
|
||||
{
|
||||
--- a/mm/bootmem.c
|
||||
+++ b/mm/bootmem.c
|
||||
@@ -15,6 +15,7 @@
|
||||
#include <linux/export.h>
|
||||
#include <linux/kmemleak.h>
|
||||
#include <linux/range.h>
|
||||
+#include <linux/crashlog.h>
|
||||
#include <linux/bug.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/bootmem.h>
|
||||
@@ -215,6 +216,7 @@ static unsigned long __init free_all_boo
|
||||
if (!bdata->node_bootmem_map)
|
||||
return 0;
|
||||
|
||||
+ crashlog_init_bootmem(bdata);
|
||||
map = bdata->node_bootmem_map;
|
||||
start = bdata->node_min_pfn;
|
||||
end = bdata->node_low_pfn;
|
||||
--- a/mm/memblock.c
|
||||
+++ b/mm/memblock.c
|
||||
@@ -21,6 +21,7 @@
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/memblock.h>
|
||||
#include <linux/bootmem.h>
|
||||
+#include <linux/crashlog.h>
|
||||
|
||||
#include <asm/sections.h>
|
||||
#include <linux/io.h>
|
||||
@@ -547,6 +548,8 @@ static void __init_memblock memblock_ins
|
||||
memblock_set_region_node(rgn, nid);
|
||||
type->cnt++;
|
||||
type->total_size += size;
|
||||
+ if (type == &memblock.memory)
|
||||
+ crashlog_init_memblock(base, size);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -586,6 +589,8 @@ int __init_memblock memblock_add_range(s
|
||||
type->regions[0].flags = flags;
|
||||
memblock_set_region_node(&type->regions[0], nid);
|
||||
type->total_size = size;
|
||||
+ if (type == &memblock.memory)
|
||||
+ crashlog_init_memblock(base, size);
|
||||
return 0;
|
||||
}
|
||||
repeat:
|
||||
Reference in New Issue
Block a user