kernel: make the kernel 3.18 patches apply and boot on arm.
authorHauke Mehrtens <hauke@openwrt.org>
Mon, 27 Oct 2014 22:55:39 +0000 (22:55 +0000)
committerHauke Mehrtens <hauke@openwrt.org>
Mon, 27 Oct 2014 22:55:39 +0000 (22:55 +0000)
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@43095 3c298f89-4303-0410-b956-a3cf2f4a3e73

38 files changed:
target/linux/generic/patches-3.18/102-ehci_hcd_ignore_oc.patch
target/linux/generic/patches-3.18/203-kallsyms_uncompressed.patch
target/linux/generic/patches-3.18/220-gc_sections.patch
target/linux/generic/patches-3.18/221-module_exports.patch
target/linux/generic/patches-3.18/259-regmap_dynamic.patch
target/linux/generic/patches-3.18/302-mips_no_branch_likely.patch
target/linux/generic/patches-3.18/304-mips_disable_fpu.patch
target/linux/generic/patches-3.18/305-mips_module_reloc.patch
target/linux/generic/patches-3.18/440-block2mtd_init.patch
target/linux/generic/patches-3.18/441-block2mtd_probe.patch
target/linux/generic/patches-3.18/550-ubifs-symlink-xattr-support.patch
target/linux/generic/patches-3.18/552-ubifs-respect-silent-mount-flag.patch [deleted file]
target/linux/generic/patches-3.18/621-sched_act_connmark.patch
target/linux/generic/patches-3.18/642-bridge_port_isolate.patch
target/linux/generic/patches-3.18/644-bridge_optimize_netfilter_hooks.patch
target/linux/generic/patches-3.18/645-bridge_multicast_to_unicast.patch
target/linux/generic/patches-3.18/666-Add-support-for-MAP-E-FMRs-mesh-mode.patch
target/linux/generic/patches-3.18/670-ipv6-allow-rejecting-with-source-address-failed-policy.patch
target/linux/generic/patches-3.18/702-phy_add_aneg_done_function.patch
target/linux/generic/patches-3.18/703-phy-add-detach-callback-to-struct-phy_driver.patch
target/linux/generic/patches-3.18/710-phy-add-mdio_register_board_info.patch
target/linux/generic/patches-3.18/720-phy_adm6996.patch
target/linux/generic/patches-3.18/721-phy_packets.patch
target/linux/generic/patches-3.18/722-phy_mvswitch.patch
target/linux/generic/patches-3.18/723-phy_ip175c.patch
target/linux/generic/patches-3.18/724-phy_ar8216.patch
target/linux/generic/patches-3.18/725-phy_rtl8306.patch
target/linux/generic/patches-3.18/726-phy_rtl8366.patch
target/linux/generic/patches-3.18/727-phy-rtl8367.patch
target/linux/generic/patches-3.18/728-phy-micrel.patch
target/linux/generic/patches-3.18/729-phy-rtl8367b.patch
target/linux/generic/patches-3.18/729-phy-tantos.patch
target/linux/generic/patches-3.18/730-phy_b53.patch
target/linux/generic/patches-3.18/890-8250_optional_sysrq.patch
target/linux/generic/patches-3.18/901-debloat_sock_diag.patch
target/linux/generic/patches-3.18/903-debloat_direct_io.patch
target/linux/generic/patches-3.18/941-ocf_20120127.patch
target/linux/generic/patches-3.18/950-vm_exports.patch

index de087d5..f498d4e 100644 (file)
@@ -51,14 +51,15 @@ Signed-off-by: Florian Fainelli <florian@openwrt.org>
                        /*
 --- a/drivers/usb/host/ehci-platform.c
 +++ b/drivers/usb/host/ehci-platform.c
-@@ -57,6 +57,7 @@ static int ehci_platform_reset(struct us
+@@ -226,6 +226,8 @@ static int ehci_platform_probe(struct pl
+               ehci->big_endian_desc = 1;
+       if (pdata->big_endian_mmio)
+               ehci->big_endian_mmio = 1;
++      if (pdata->ignore_oc)
++              ehci->ignore_oc = 1;
  
-       hcd->has_tt = pdata->has_tt;
-       ehci->has_synopsys_hc_bug = pdata->has_synopsys_hc_bug;
-+      ehci->ignore_oc = pdata->ignore_oc;
-       if (pdata->pre_setup) {
-               retval = pdata->pre_setup(hcd);
+ #ifndef CONFIG_USB_EHCI_BIG_ENDIAN_MMIO
+       if (ehci->big_endian_mmio) {
 --- a/drivers/usb/host/ehci.h
 +++ b/drivers/usb/host/ehci.h
 @@ -226,6 +226,7 @@ struct ehci_hcd {                  /* one per controlle
index 53229f0..b9d8220 100644 (file)
@@ -1,13 +1,13 @@
 --- a/scripts/kallsyms.c
 +++ b/scripts/kallsyms.c
-@@ -59,6 +59,7 @@ static struct sym_entry *table;
+@@ -58,6 +58,7 @@ static struct addr_range percpu_range =
+ static struct sym_entry *table;
  static unsigned int table_size, table_cnt;
  static int all_symbols = 0;
- static int absolute_percpu = 0;
 +static int uncompressed = 0;
+ static int absolute_percpu = 0;
  static char symbol_prefix_char = '\0';
  static unsigned long long kernel_start_addr = 0;
 @@ -392,6 +393,9 @@ static void write_src(void)
  
        free(markers);
index c105c40..86727f1 100644 (file)
@@ -50,7 +50,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
  
 --- a/include/asm-generic/vmlinux.lds.h
 +++ b/include/asm-generic/vmlinux.lds.h
-@@ -87,7 +87,7 @@
+@@ -89,7 +89,7 @@
  #ifdef CONFIG_FTRACE_MCOUNT_RECORD
  #define MCOUNT_REC()  . = ALIGN(8);                           \
                        VMLINUX_SYMBOL(__start_mcount_loc) = .; \
@@ -59,7 +59,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
                        VMLINUX_SYMBOL(__stop_mcount_loc) = .;
  #else
  #define MCOUNT_REC()
-@@ -95,7 +95,7 @@
+@@ -97,7 +97,7 @@
  
  #ifdef CONFIG_TRACE_BRANCH_PROFILING
  #define LIKELY_PROFILE()      VMLINUX_SYMBOL(__start_annotated_branch_profile) = .; \
@@ -68,7 +68,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
                                VMLINUX_SYMBOL(__stop_annotated_branch_profile) = .;
  #else
  #define LIKELY_PROFILE()
-@@ -103,7 +103,7 @@
+@@ -105,7 +105,7 @@
  
  #ifdef CONFIG_PROFILE_ALL_BRANCHES
  #define BRANCH_PROFILE()      VMLINUX_SYMBOL(__start_branch_profile) = .;   \
@@ -77,7 +77,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
                                VMLINUX_SYMBOL(__stop_branch_profile) = .;
  #else
  #define BRANCH_PROFILE()
-@@ -112,7 +112,7 @@
+@@ -123,7 +123,7 @@
  #ifdef CONFIG_EVENT_TRACING
  #define FTRACE_EVENTS()       . = ALIGN(8);                                   \
                        VMLINUX_SYMBOL(__start_ftrace_events) = .;      \
@@ -86,7 +86,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
                        VMLINUX_SYMBOL(__stop_ftrace_events) = .;
  #else
  #define FTRACE_EVENTS()
-@@ -120,7 +120,7 @@
+@@ -131,7 +131,7 @@
  
  #ifdef CONFIG_TRACING
  #define TRACE_PRINTKS() VMLINUX_SYMBOL(__start___trace_bprintk_fmt) = .;      \
@@ -95,7 +95,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
                         VMLINUX_SYMBOL(__stop___trace_bprintk_fmt) = .;
  #define TRACEPOINT_STR() VMLINUX_SYMBOL(__start___tracepoint_str) = .;        \
                         *(__tracepoint_str) /* Trace_printk fmt' pointer */ \
-@@ -133,7 +133,7 @@
+@@ -144,7 +144,7 @@
  #ifdef CONFIG_FTRACE_SYSCALLS
  #define TRACE_SYSCALLS() . = ALIGN(8);                                        \
                         VMLINUX_SYMBOL(__start_syscalls_metadata) = .; \
@@ -104,40 +104,18 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
                         VMLINUX_SYMBOL(__stop_syscalls_metadata) = .;
  #else
  #define TRACE_SYSCALLS()
-@@ -142,8 +142,8 @@
- #ifdef CONFIG_CLKSRC_OF
- #define CLKSRC_OF_TABLES() . = ALIGN(8);                              \
-                          VMLINUX_SYMBOL(__clksrc_of_table) = .;       \
--                         *(__clksrc_of_table)                         \
--                         *(__clksrc_of_table_end)
-+                         KEEP(*(__clksrc_of_table))                   \
-+                         KEEP(*(__clksrc_of_table_end))
- #else
- #define CLKSRC_OF_TABLES()
- #endif
-@@ -152,8 +152,8 @@
- #define IRQCHIP_OF_MATCH_TABLE()                                      \
+@@ -158,8 +158,8 @@
+ #define _OF_TABLE_1(name)                                             \
        . = ALIGN(8);                                                   \
-       VMLINUX_SYMBOL(__irqchip_begin) = .;                            \
--      *(__irqchip_of_table)                                           \
--      *(__irqchip_of_end)
-+      KEEP(*(__irqchip_of_table))                                     \
-+      KEEP(*(__irqchip_of_end))
- #else
- #define IRQCHIP_OF_MATCH_TABLE()
- #endif
-@@ -161,8 +161,8 @@
- #ifdef CONFIG_COMMON_CLK
- #define CLK_OF_TABLES() . = ALIGN(8);                         \
-                       VMLINUX_SYMBOL(__clk_of_table) = .;     \
--                      *(__clk_of_table)                       \
--                      *(__clk_of_table_end)
-+                      KEEP(*(__clk_of_table))                 \
-+                      KEEP(*(__clk_of_table_end))
- #else
- #define CLK_OF_TABLES()
- #endif
-@@ -170,7 +170,7 @@
+       VMLINUX_SYMBOL(__##name##_of_table) = .;                        \
+-      *(__##name##_of_table)                                          \
+-      *(__##name##_of_table_end)
++      KEEP(*(__##name##_of_table))                                    \
++      KEEP(*(__##name##_of_table_end))
+ #define CLKSRC_OF_TABLES()    OF_TABLE(CONFIG_CLKSRC_OF, clksrc)
+ #define IRQCHIP_OF_MATCH_TABLE() OF_TABLE(CONFIG_IRQCHIP, irqchip)
+@@ -171,7 +171,7 @@
  #define KERNEL_DTB()                                                  \
        STRUCT_ALIGN();                                                 \
        VMLINUX_SYMBOL(__dtb_start) = .;                                \
@@ -146,7 +124,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
        VMLINUX_SYMBOL(__dtb_end) = .;
  
  /* .data section */
-@@ -186,16 +186,17 @@
+@@ -187,16 +187,17 @@
        /* implement dynamic printk debug */                            \
        . = ALIGN(8);                                                   \
        VMLINUX_SYMBOL(__start___jump_table) = .;                       \
@@ -167,7 +145,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
  
  /*
   * Data section helpers
-@@ -249,32 +250,32 @@
+@@ -250,35 +251,35 @@
        /* PCI quirks */                                                \
        .pci_fixup        : AT(ADDR(.pci_fixup) - LOAD_OFFSET) {        \
                VMLINUX_SYMBOL(__start_pci_fixups_early) = .;           \
@@ -198,6 +176,10 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
 -              *(.pci_fixup_suspend)                                   \
 +              KEEP(*(.pci_fixup_suspend))                             \
                VMLINUX_SYMBOL(__end_pci_fixups_suspend) = .;           \
+               VMLINUX_SYMBOL(__start_pci_fixups_suspend_late) = .;    \
+-              *(.pci_fixup_suspend_late)                              \
++              KEEP(*(.pci_fixup_suspend_late))                        \
+               VMLINUX_SYMBOL(__end_pci_fixups_suspend_late) = .;      \
        }                                                               \
                                                                        \
        /* Built-in firmware blobs */                                   \
@@ -208,7 +190,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
                VMLINUX_SYMBOL(__end_builtin_fw) = .;                   \
        }                                                               \
                                                                        \
-@@ -283,49 +284,49 @@
+@@ -287,49 +288,49 @@
        /* Kernel symbol table: Normal symbols */                       \
        __ksymtab         : AT(ADDR(__ksymtab) - LOAD_OFFSET) {         \
                VMLINUX_SYMBOL(__start___ksymtab) = .;                  \
@@ -265,7 +247,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
                VMLINUX_SYMBOL(__stop___kcrctab_gpl) = .;               \
        }                                                               \
                                                                        \
-@@ -339,14 +340,14 @@
+@@ -343,14 +344,14 @@
        /* Kernel symbol table: GPL-only unused symbols */              \
        __kcrctab_unused_gpl : AT(ADDR(__kcrctab_unused_gpl) - LOAD_OFFSET) { \
                VMLINUX_SYMBOL(__start___kcrctab_unused_gpl) = .;       \
@@ -282,7 +264,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
                VMLINUX_SYMBOL(__stop___kcrctab_gpl_future) = .;        \
        }                                                               \
                                                                        \
-@@ -365,14 +366,14 @@
+@@ -369,14 +370,14 @@
        /* Built-in module parameters. */                               \
        __param : AT(ADDR(__param) - LOAD_OFFSET) {                     \
                VMLINUX_SYMBOL(__start___param) = .;                    \
@@ -299,7 +281,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
                VMLINUX_SYMBOL(__stop___modver) = .;                    \
                . = ALIGN((align));                                     \
                VMLINUX_SYMBOL(__end_rodata) = .;                       \
-@@ -428,7 +429,7 @@
+@@ -432,7 +433,7 @@
  #define ENTRY_TEXT                                                    \
                ALIGN_FUNCTION();                                       \
                VMLINUX_SYMBOL(__entry_text_start) = .;                 \
@@ -308,7 +290,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
                VMLINUX_SYMBOL(__entry_text_end) = .;
  
  #ifdef CONFIG_FUNCTION_GRAPH_TRACER
-@@ -456,7 +457,7 @@
+@@ -460,7 +461,7 @@
        . = ALIGN(align);                                               \
        __ex_table : AT(ADDR(__ex_table) - LOAD_OFFSET) {               \
                VMLINUX_SYMBOL(__start___ex_table) = .;                 \
@@ -317,7 +299,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
                VMLINUX_SYMBOL(__stop___ex_table) = .;                  \
        }
  
-@@ -472,8 +473,8 @@
+@@ -476,8 +477,8 @@
  #ifdef CONFIG_CONSTRUCTORS
  #define KERNEL_CTORS()        . = ALIGN(8);                      \
                        VMLINUX_SYMBOL(__ctors_start) = .; \
@@ -328,7 +310,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
                        VMLINUX_SYMBOL(__ctors_end) = .;
  #else
  #define KERNEL_CTORS()
-@@ -517,7 +518,7 @@
+@@ -525,7 +526,7 @@
  #define SBSS(sbss_align)                                              \
        . = ALIGN(sbss_align);                                          \
        .sbss : AT(ADDR(.sbss) - LOAD_OFFSET) {                         \
@@ -337,7 +319,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
                *(.scommon)                                             \
        }
  
-@@ -535,7 +536,7 @@
+@@ -543,7 +544,7 @@
                BSS_FIRST_SECTIONS                                      \
                *(.bss..page_aligned)                                   \
                *(.dynbss)                                              \
@@ -346,7 +328,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
                *(COMMON)                                               \
        }
  
-@@ -596,7 +597,7 @@
+@@ -604,7 +605,7 @@
        . = ALIGN(4);                                                   \
        .tracedata : AT(ADDR(.tracedata) - LOAD_OFFSET) {               \
                VMLINUX_SYMBOL(__tracedata_start) = .;                  \
@@ -355,7 +337,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
                VMLINUX_SYMBOL(__tracedata_end) = .;                    \
        }
  #else
-@@ -613,17 +614,17 @@
+@@ -621,17 +622,17 @@
  #define INIT_SETUP(initsetup_align)                                   \
                . = ALIGN(initsetup_align);                             \
                VMLINUX_SYMBOL(__setup_start) = .;                      \
@@ -377,7 +359,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
                INIT_CALLS_LEVEL(0)                                     \
                INIT_CALLS_LEVEL(1)                                     \
                INIT_CALLS_LEVEL(2)                                     \
-@@ -637,21 +638,21 @@
+@@ -645,21 +646,21 @@
  
  #define CON_INITCALL                                                  \
                VMLINUX_SYMBOL(__con_initcall_start) = .;               \
@@ -521,7 +503,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
        .init.data : {
 --- a/arch/arm/boot/compressed/Makefile
 +++ b/arch/arm/boot/compressed/Makefile
-@@ -120,6 +120,7 @@ ifeq ($(CONFIG_FUNCTION_TRACER),y)
+@@ -122,6 +122,7 @@ ifeq ($(CONFIG_FUNCTION_TRACER),y)
  ORIG_CFLAGS := $(KBUILD_CFLAGS)
  KBUILD_CFLAGS = $(subst -pg, , $(ORIG_CFLAGS))
  endif
index b538003..f2cad7a 100644 (file)
@@ -1,6 +1,6 @@
 --- a/include/asm-generic/vmlinux.lds.h
 +++ b/include/asm-generic/vmlinux.lds.h
-@@ -52,6 +52,16 @@
+@@ -54,6 +54,16 @@
  #define LOAD_OFFSET 0
  #endif
  
@@ -17,7 +17,7 @@
  #include <linux/export.h>
  
  /* Align . to a 8 byte boundary equals to maximum function alignment. */
-@@ -284,14 +294,14 @@
+@@ -288,14 +298,14 @@
        /* Kernel symbol table: Normal symbols */                       \
        __ksymtab         : AT(ADDR(__ksymtab) - LOAD_OFFSET) {         \
                VMLINUX_SYMBOL(__start___ksymtab) = .;                  \
@@ -34,7 +34,7 @@
                VMLINUX_SYMBOL(__stop___ksymtab_gpl) = .;               \
        }                                                               \
                                                                        \
-@@ -353,7 +363,7 @@
+@@ -357,7 +367,7 @@
                                                                        \
        /* Kernel symbol table: strings */                              \
          __ksymtab_strings : AT(ADDR(__ksymtab_strings) - LOAD_OFFSET) {       \
@@ -43,7 +43,7 @@
        }                                                               \
                                                                        \
        /* __*init sections */                                          \
-@@ -671,6 +681,8 @@
+@@ -679,6 +689,8 @@
        EXIT_TEXT                                                       \
        EXIT_DATA                                                       \
        EXIT_CALL                                                       \
@@ -54,7 +54,7 @@
        }
 --- a/scripts/Makefile.build
 +++ b/scripts/Makefile.build
-@@ -349,7 +349,7 @@ targets += $(extra-y) $(MAKECMDGOALS) $(
+@@ -298,7 +298,7 @@ targets += $(extra-y) $(MAKECMDGOALS) $(
  # Linker scripts preprocessor (.lds.S -> .lds)
  # ---------------------------------------------------------------------------
  quiet_cmd_cpp_lds_S = LDS     $@
index e7f5bce..55e639c 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/base/regmap/Kconfig
 +++ b/drivers/base/regmap/Kconfig
-@@ -3,23 +3,28 @@
+@@ -3,26 +3,31 @@
  # subsystems should select the appropriate symbols.
  
  config REGMAP
  
  config REGMAP_I2C
 -      tristate
-+      select REGMAP
 +      tristate "Regmap I2C
++      select REGMAP
+       depends on I2C
  
  config REGMAP_SPI
 -      tristate
++      tristate "Regmap SPI"
 +      select REGMAP
 +      depends on SPI_MASTER
-+      tristate "Regmap SPI"
+       depends on SPI
  
  config REGMAP_SPMI
 +      select REGMAP
        tristate
+       depends on SPMI
  
  config REGMAP_MMIO
 +      select REGMAP
@@ -67,8 +70,8 @@
 +#include <linux/module.h>
  #include <linux/mutex.h>
  #include <linux/err.h>
- #include <linux/rbtree.h>
-@@ -2247,3 +2248,5 @@ static int __init regmap_initcall(void)
+ #include <linux/of.h>
+@@ -2635,3 +2636,5 @@ static int __init regmap_initcall(void)
        return 0;
  }
  postcore_initcall(regmap_initcall);
index 1da9540..19adcb8 100644 (file)
@@ -7,5 +7,5 @@
 -cflags-y                      += -G 0 -mno-abicalls -fno-pic -pipe
 +cflags-y                      += -G 0 -mno-abicalls -fno-pic -pipe -mno-branch-likely
  cflags-y                      += -msoft-float
- LDFLAGS_vmlinux                       += -G 0 -static -n -nostdlib
+ LDFLAGS_vmlinux                       += -G 0 -static -n -nostdlib --gc-sections --sort-section=name
  KBUILD_AFLAGS_MODULE          += -mlong-calls
index 4536ce6..c710bfc 100644 (file)
-MIPS: allow disabling the kernel FPU emulator
-
-This patch allows turning off the in-kernel Algorithmics
-FPU emulator support, which allows one to save a couple of
-precious blocks on an embedded system.
-
-Signed-off-by: Florian Fainelli <florian@openwrt.org>
---
+From:   Manuel Lauss <manuel.lauss@gmail.com>\r
+Subject: [RFC PATCH v4 2/2] MIPS: make FPU emulator optional\r
+Date:   Mon,  7 Apr 2014 12:57:04 +0200\r
+Message-Id: <1396868224-252888-2-git-send-email-manuel.lauss@gmail.com>\r
+\r
+This small patch makes the MIPS FPU emulator optional. The kernel\r
+kills float-users on systems without a hardware FPU by sending a SIGILL.\r
+\r
+Disabling the emulator shrinks vmlinux by about 54kBytes (32bit,\r
+optimizing for size).\r
+\r
+Signed-off-by: Manuel Lauss <manuel.lauss@gmail.com>\r
+---\r
+v4: rediffed because of patch 1/2, should now work with micromips as well\r
+v3: updated patch description with size savings.\r
+v2: incorporated changes suggested by Jonas Gorski\r
+    force the fpu emulator on for micromips: relocating the parts\r
+    of the mmips code in the emulator to other areas would be a\r
+    much larger change; I went the cheap route instead with this.\r
+\r
+ arch/mips/Kbuild                     |  2 +-\r
+ arch/mips/Kconfig                    | 14 ++++++++++++++\r
+ arch/mips/include/asm/fpu.h          |  5 +++--\r
+ arch/mips/include/asm/fpu_emulator.h | 15 +++++++++++++++\r
+ 4 files changed, 33 insertions(+), 3 deletions(-)\r
+\r
 --- a/arch/mips/Kconfig
 +++ b/arch/mips/Kconfig
-@@ -934,6 +934,17 @@ config I8259
- config MIPS_BONITO64
-       bool
+@@ -2484,6 +2484,20 @@ config MIPS_O32_FP64_SUPPORT
+         If unsure, say N.
  
-+config MIPS_FPU_EMU
-+      bool "Enable FPU emulation"
++config MIPS_FPU_EMULATOR
++      bool "MIPS FPU Emulator"
 +      default y
 +      help
-+         This option allows building a kernel with or without the Algorithmics
-+         FPU emulator enabled. Turning off this option results in a kernel which
-+         does not catch floating operations exceptions. Make sure that your toolchain
-+         is configured to enable software floating point emulation in that case.
++        This option lets you disable the built-in MIPS FPU (Coprocessor 1)
++        emulator, which handles floating-point instructions on processors
++        without a hardware FPU.  It is generally a good idea to keep the
++        emulator built-in, unless you are perfectly sure you have a
++        complete soft-float environment.  With the emulator disabled, all
++        users of float operations will be killed with an illegal instr-
++        uction exception.
 +
-+         If unsure say Y here.
++        Say Y, please.
 +
- config MIPS_MSC
+ config USE_OF
        bool
+       select OF
+--- a/arch/mips/Makefile
++++ b/arch/mips/Makefile
+@@ -266,7 +266,7 @@ OBJCOPYFLAGS               += --remove-section=.regin
+ head-y := arch/mips/kernel/head.o
  
---- a/arch/mips/math-emu/Makefile
-+++ b/arch/mips/math-emu/Makefile
-@@ -2,10 +2,12 @@
- # Makefile for the Linux/MIPS kernel FPU emulation.
- #
--obj-y := cp1emu.o ieee754m.o ieee754d.o ieee754dp.o ieee754sp.o ieee754.o \
-+obj-y := kernel_linkage.o
-+
-+obj-$(CONFIG_MIPS_FPU_EMU)    += ieee754m.o ieee754d.o ieee754dp.o ieee754sp.o ieee754.o \
-          ieee754xcpt.o dp_frexp.o dp_modf.o dp_div.o dp_mul.o dp_sub.o \
-          dp_add.o dp_fsp.o dp_cmp.o dp_logb.o dp_scalb.o dp_simple.o \
-          dp_tint.o dp_fint.o dp_tlong.o dp_flong.o sp_frexp.o sp_modf.o \
-          sp_div.o sp_mul.o sp_sub.o sp_add.o sp_fdp.o sp_cmp.o sp_logb.o \
-          sp_scalb.o sp_simple.o sp_tint.o sp_fint.o sp_tlong.o sp_flong.o \
--         dp_sqrt.o sp_sqrt.o kernel_linkage.o dsemul.o
-+         dp_sqrt.o sp_sqrt.o dsemul.o cp1emu.o
---- a/arch/mips/math-emu/kernel_linkage.c
-+++ b/arch/mips/math-emu/kernel_linkage.c
-@@ -29,6 +29,7 @@
+ libs-y                        += arch/mips/lib/
+-libs-y                        += arch/mips/math-emu/
++libs-$(CONFIG_MIPS_FPU_EMULATOR)      += arch/mips/math-emu/
  
- #define SIGNALLING_NAN 0x7ff800007ff80000LL
+ # See arch/mips/Kbuild for content of core part of the kernel
+ core-y += arch/mips/
+--- a/arch/mips/include/asm/fpu.h
++++ b/arch/mips/include/asm/fpu.h
+@@ -168,8 +168,10 @@ static inline int init_fpu(void)
+               ret = __own_fpu();
+               if (!ret)
+                       _init_fpu();
+-      } else
++      } else if (IS_ENABLED(CONFIG_MIPS_FPU_EMULATOR))
+               fpu_emulator_init_fpu();
++      else
++              ret = SIGILL;
  
-+#ifdef CONFIG_MIPS_FPU_EMU
- void fpu_emulator_init_fpu(void)
- {
-       static int first = 1;
-@@ -115,3 +116,36 @@ int fpu_emulator_restore_context32(struc
-       return err;
+       return ret;
  }
- #endif
-+
-+#else
-+
-+void fpu_emulator_init_fpu(void)
-+{
-+      printk(KERN_INFO "FPU emulator disabled, make sure your toolchain"
-+              "was compiled with software floating point support (soft-float)\n");
-+      return;
-+}
-+
-+int fpu_emulator_save_context(struct sigcontext __user *sc)
-+{
-+      return 0;
-+}
-+
-+int fpu_emulator_restore_context(struct sigcontext __user *sc)
-+{
-+      return 0;
-+}
-+
-+#ifdef CONFIG_64BIT
-+int fpu_emulator_save_context32(struct sigcontext32 __user *sc)
-+{
-+      return 0;
-+}
-+
-+int fpu_emulator_restore_context32(struct sigcontext32 __user *sc)
-+{
-+      return 0;
-+}
-+#endif /* CONFIG_64BIT */
-+
-+#endif /* CONFIG_MIPS_FPU_EMU */
 --- a/arch/mips/include/asm/fpu_emulator.h
 +++ b/arch/mips/include/asm/fpu_emulator.h
-@@ -27,6 +27,8 @@
- #include <asm/inst.h>
+@@ -30,6 +30,7 @@
  #include <asm/local.h>
+ #include <asm/processor.h>
  
-+#ifdef CONFIG_MIPS_FPU_EMU
-+
++#ifdef CONFIG_MIPS_FPU_EMULATOR
  #ifdef CONFIG_DEBUG_FS
  
  struct mips_fpu_emulator_stats {
-@@ -60,6 +62,38 @@ extern int fpu_emulator_cop1Handler(stru
- int process_fpemu_return(int sig, void __user *fault_addr);
- int mm_isBranchInstr(struct pt_regs *regs, struct mm_decoded_insn dec_insn,
-                    unsigned long *contpc);
-+#else
-+static inline int mips_dsemul(struct pt_regs *regs, mips_instruction ir,
-+                            unsigned long cpc)
-+{
-+      return 0;
-+}
-+
+@@ -65,6 +66,20 @@ extern int do_dsemulret(struct pt_regs *
+ extern int fpu_emulator_cop1Handler(struct pt_regs *xcp,
+                                   struct mips_fpu_struct *ctx, int has_fpu,
+                                   void *__user *fault_addr);
++#else /* no CONFIG_MIPS_FPU_EMULATOR */
 +static inline int do_dsemulret(struct pt_regs *xcp)
 +{
-+      return 0;
++      return 0;       /* 0 means error, should never get here anyway */
 +}
 +
 +static inline int fpu_emulator_cop1Handler(struct pt_regs *xcp,
-+                                         struct mips_fpu_struct *ctx,
-+                                         int has_fpu,
-+                                         void *__user *fault_addr)
-+{
-+      return 0;
-+}
-+
-+static inline int process_fpemu_return(int sig, void __user *fault_addr)
++                              struct mips_fpu_struct *ctx, int has_fpu,
++                              void *__user *fault_addr)
 +{
-+      return -EINVAL;
++      return SIGILL;  /* we don't speak MIPS FPU */
 +}
++#endif        /* CONFIG_MIPS_FPU_EMULATOR */
 +
-+static inline int mm_isBranchInstr(struct pt_regs *regs,
-+                                 struct mm_decoded_insn dec_insn,
-+                                 unsigned long *contpc)
-+{
-+      return 0;
-+}
-+#endif /* CONFIG_MIPS_FPU_EMU */
- /*
-  * Instruction inserted following the badinst to further tag the sequence
---- a/arch/mips/kernel/traps.c
-+++ b/arch/mips/kernel/traps.c
-@@ -701,6 +701,7 @@ asmlinkage void do_ov(struct pt_regs *re
-       exception_exit(prev_state);
- }
-+#ifdef CONFIG_MIPS_FPU_EMU
- int process_fpemu_return(int sig, void __user *fault_addr)
- {
-       if (sig == SIGSEGV || sig == SIGBUS) {
-@@ -724,6 +725,7 @@ int process_fpemu_return(int sig, void _
-               return 0;
-       }
- }
-+#endif /* CONFIG_MIPS_FPU_EMU */
- /*
-  * XXX Delayed fp exceptions when doing a lazy ctx switch XXX
+ int process_fpemu_return(int sig, void __user *fault_addr);
+ int mm_isBranchInstr(struct pt_regs *regs, struct mm_decoded_insn dec_insn,
+                    unsigned long *contpc);
index 8818675..2e92916 100644 (file)
@@ -3,7 +3,7 @@
 @@ -90,8 +90,13 @@ all-$(CONFIG_SYS_SUPPORTS_ZBOOT)+= vmlin
  cflags-y                      += -G 0 -mno-abicalls -fno-pic -pipe -mno-branch-likely
  cflags-y                      += -msoft-float
- LDFLAGS_vmlinux                       += -G 0 -static -n -nostdlib
+ LDFLAGS_vmlinux                       += -G 0 -static -n -nostdlib --gc-sections --sort-section=name
 +ifdef CONFIG_64BIT
  KBUILD_AFLAGS_MODULE          += -mlong-calls
  KBUILD_CFLAGS_MODULE          += -mlong-calls
@@ -12,8 +12,8 @@
 +KBUILD_CFLAGS_MODULE          += -mno-long-calls
 +endif
  
- cflags-y += -ffreestanding
+ ifndef CONFIG_FUNCTION_TRACER
+ KBUILD_CFLAGS_KERNEL          += -ffunction-sections -fdata-sections
 --- a/arch/mips/include/asm/module.h
 +++ b/arch/mips/include/asm/module.h
 @@ -11,6 +11,11 @@ struct mod_arch_specific {
index a581998..5ab6026 100644 (file)
@@ -8,10 +8,10 @@
  #include <linux/mutex.h>
  #include <linux/mount.h>
  #include <linux/slab.h>
-@@ -210,11 +211,12 @@ static void block2mtd_free_device(struct
+@@ -209,11 +210,12 @@ static void block2mtd_free_device(struct
+ }
  
  
- /* FIXME: ensure that mtd->size % erase_size == 0 */
 -static struct block2mtd_dev *add_device(char *devname, int erase_size)
 +static struct block2mtd_dev *add_device(char *devname, int erase_size, const char *mtdname)
  {
@@ -22,7 +22,7 @@
        char *name;
  
        if (!devname)
-@@ -253,13 +255,16 @@ static struct block2mtd_dev *add_device(
+@@ -257,13 +259,16 @@ static struct block2mtd_dev *add_device(
  
        /* Setup the MTD structure */
        /* make the name contain the block device in */
@@ -31,7 +31,7 @@
 +              mtdname = devname;
 +      name = kmalloc(strlen(mtdname) + 1, GFP_KERNEL);
        if (!name)
-               goto devinit_err;
+               goto err_destroy_mutex;
  
 +      strcpy(name, mtdname);
        dev->mtd.name = name;
@@ -41,7 +41,7 @@
        dev->mtd.erasesize = erase_size;
        dev->mtd.writesize = 1;
        dev->mtd.writebufsize = PAGE_SIZE;
-@@ -272,15 +277,18 @@ static struct block2mtd_dev *add_device(
+@@ -276,15 +281,18 @@ static struct block2mtd_dev *add_device(
        dev->mtd.priv = dev;
        dev->mtd.owner = THIS_MODULE;
  
@@ -52,7 +52,7 @@
 +      part->size = dev->mtd.size;
 +      if (mtd_device_register(&dev->mtd, part, 1)) {
                /* Device didn't get added, so free the entry */
-               goto devinit_err;
+               goto err_destroy_mutex;
        }
        list_add(&dev->list, &blkmtd_device_list);
        pr_info("mtd%d: [%s] erase_size = %dKiB [%d]\n",
@@ -62,8 +62,8 @@
 +              mtdname, dev->mtd.erasesize >> 10, dev->mtd.erasesize);
        return dev;
  
devinit_err:
-@@ -347,9 +355,9 @@ static char block2mtd_paramline[80 + 12]
err_destroy_mutex:
+@@ -353,9 +361,9 @@ static char block2mtd_paramline[80 + 12]
  
  static int block2mtd_setup2(const char *val)
  {
@@ -75,7 +75,7 @@
        char *name;
        size_t erase_size = PAGE_SIZE;
        int i, ret;
-@@ -362,7 +370,7 @@ static int block2mtd_setup2(const char *
+@@ -368,7 +376,7 @@ static int block2mtd_setup2(const char *
        strcpy(str, val);
        kill_final_newline(str);
  
@@ -84,7 +84,7 @@
                token[i] = strsep(&str, ",");
  
        if (str) {
-@@ -388,8 +396,10 @@ static int block2mtd_setup2(const char *
+@@ -394,8 +402,10 @@ static int block2mtd_setup2(const char *
                        return 0;
                }
        }
@@ -96,7 +96,7 @@
  
        return 0;
  }
-@@ -423,7 +433,7 @@ static int block2mtd_setup(const char *v
+@@ -429,7 +439,7 @@ static int block2mtd_setup(const char *v
  
  
  module_param_call(block2mtd, block2mtd_setup, NULL, NULL, 0200);
index 3ab9d1a..6836a48 100644 (file)
@@ -8,10 +8,10 @@
  #include <linux/fs.h>
  #include <linux/blkdev.h>
  #include <linux/bio.h>
-@@ -211,13 +212,14 @@ static void block2mtd_free_device(struct
+@@ -210,13 +211,16 @@ static void block2mtd_free_device(struct
+ }
  
  
- /* FIXME: ensure that mtd->size % erase_size == 0 */
 -static struct block2mtd_dev *add_device(char *devname, int erase_size, const char *mtdname)
 +static struct block2mtd_dev *add_device(char *devname, int erase_size, const char *mtdname, int timeout)
  {
        struct block2mtd_dev *dev;
        struct mtd_partition *part;
        char *name;
++#ifndef MODULE
 +      int i;
++#endif
  
        if (!devname)
                return NULL;
-@@ -228,15 +230,20 @@ static struct block2mtd_dev *add_device(
+@@ -227,15 +231,20 @@ static struct block2mtd_dev *add_device(
  
        /* Get a handle on the device */
        bdev = blkdev_get_by_path(devname, mode, dev);
@@ -52,7 +54,7 @@
        }
  #endif
  
-@@ -355,11 +362,12 @@ static char block2mtd_paramline[80 + 12]
+@@ -361,11 +370,12 @@ static char block2mtd_paramline[80 + 12]
  
  static int block2mtd_setup2(const char *val)
  {
@@ -67,7 +69,7 @@
        int i, ret;
  
        if (strnlen(val, sizeof(buf)) >= sizeof(buf)) {
-@@ -370,7 +378,7 @@ static int block2mtd_setup2(const char *
+@@ -376,7 +386,7 @@ static int block2mtd_setup2(const char *
        strcpy(str, val);
        kill_final_newline(str);
  
@@ -76,7 +78,7 @@
                token[i] = strsep(&str, ",");
  
        if (str) {
-@@ -399,7 +407,10 @@ static int block2mtd_setup2(const char *
+@@ -405,7 +415,10 @@ static int block2mtd_setup2(const char *
        if (token[2] && (strlen(token[2]) + 1 > 80))
                pr_err("mtd device name too long\n");
  
@@ -88,7 +90,7 @@
  
        return 0;
  }
-@@ -433,7 +444,7 @@ static int block2mtd_setup(const char *v
+@@ -439,7 +452,7 @@ static int block2mtd_setup(const char *v
  
  
  module_param_call(block2mtd, block2mtd_setup, NULL, NULL, 0200);
@@ -97,7 +99,7 @@
  
  static int __init block2mtd_init(void)
  {
-@@ -467,7 +478,7 @@ static void block2mtd_exit(void)
+@@ -474,7 +487,7 @@ static void block2mtd_exit(void)
  }
  
  
index 0235340..d3f2ccc 100644 (file)
@@ -1,6 +1,6 @@
 --- a/fs/ubifs/file.c
 +++ b/fs/ubifs/file.c
-@@ -1576,6 +1576,10 @@ const struct inode_operations ubifs_syml
+@@ -1573,6 +1573,10 @@ const struct inode_operations ubifs_syml
        .follow_link = ubifs_follow_link,
        .setattr     = ubifs_setattr,
        .getattr     = ubifs_getattr,
  const struct file_operations ubifs_file_operations = {
 --- a/fs/ubifs/journal.c
 +++ b/fs/ubifs/journal.c
-@@ -553,7 +553,8 @@ int ubifs_jnl_update(struct ubifs_info *
-       dbg_jnl("ino %lu, dent '%.*s', data len %d in dir ino %lu",
-               inode->i_ino, nm->len, nm->name, ui->data_len, dir->i_ino);
--      ubifs_assert(dir_ui->data_len == 0);
-+      if (!xent)
-+              ubifs_assert(dir_ui->data_len == 0);
-       ubifs_assert(mutex_is_locked(&dir_ui->ui_mutex));
-       dlen = UBIFS_DENT_NODE_SZ + nm->len + 1;
-@@ -573,6 +574,13 @@ int ubifs_jnl_update(struct ubifs_info *
+@@ -572,6 +572,13 @@ int ubifs_jnl_update(struct ubifs_info *
        aligned_dlen = ALIGN(dlen, 8);
        aligned_ilen = ALIGN(ilen, 8);
        len = aligned_dlen + aligned_ilen + UBIFS_INO_NODE_SZ;
 +      if (xent) {
 +              /*
-+               * Make sure to account for dir_ui->data_len in
++               * Make sure to account for host_ui->data_len in
 +               * length calculation in case there is extended attribute.
 +               */
-+              len += dir_ui->data_len;
++              len += host_ui->data_len;
 +      }
        dent = kmalloc(len, GFP_NOFS);
        if (!dent)
                return -ENOMEM;
-@@ -649,7 +657,8 @@ int ubifs_jnl_update(struct ubifs_info *
+@@ -648,7 +655,8 @@ int ubifs_jnl_update(struct ubifs_info *
  
        ino_key_init(c, &ino_key, dir->i_ino);
        ino_offs += aligned_ilen;
 -      err = ubifs_tnc_add(c, &ino_key, lnum, ino_offs, UBIFS_INO_NODE_SZ);
 +      err = ubifs_tnc_add(c, &ino_key, lnum, ino_offs,
-+                          UBIFS_INO_NODE_SZ + dir_ui->data_len);
++                          UBIFS_INO_NODE_SZ + host_ui->data_len);
        if (err)
                goto out_ro;
  
diff --git a/target/linux/generic/patches-3.18/552-ubifs-respect-silent-mount-flag.patch b/target/linux/generic/patches-3.18/552-ubifs-respect-silent-mount-flag.patch
deleted file mode 100644 (file)
index 2e43d25..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-From 90bea5a3f0bf680b87b90516f3c231997f4b8f3b Mon Sep 17 00:00:00 2001
-From: Daniel Golle <daniel@makrotopia.org>
-Date: Mon, 2 Jun 2014 15:51:10 +0200
-X-Git-Url: http://git.infradead.org/linux-ubifs.git/commitdiff_plain/90bea5a3f0bf680b87b90516f3c231997f4b8f3b
-X-Git-Url: https://git.kernel.org/cgit/linux/kernel/git/next/linux-next.git/commit/?id=90bea5a3f0bf680b87b90516f3c231997f4b8f3b
-Subject: UBIFS: respect MS_SILENT mount flag
-
-When attempting to mount a non-ubifs formatted volume, lots of error
-messages (including a stack dump) are thrown to the kernel log even if
-the MS_SILENT mount flag is set.
-Fix this by introducing adding an additional state-variable in
-struct ubifs_info and suppress error messages in ubifs_read_node if
-MS_SILENT is set.
-
-Signed-off-by: Daniel Golle <daniel@makrotopia.org>
-Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
----
- fs/ubifs/io.c    | 18 ++++++++++--------
- fs/ubifs/super.c |  5 +++++
- fs/ubifs/ubifs.h | 11 +++++++++++
- 3 files changed, 26 insertions(+), 8 deletions(-)
-
----
-
---- a/fs/ubifs/io.c
-+++ b/fs/ubifs/io.c
-@@ -988,30 +988,32 @@ int ubifs_read_node(const struct ubifs_i
-               return err;
-       if (type != ch->node_type) {
--              ubifs_err("bad node type (%d but expected %d)",
--                        ch->node_type, type);
-+              ubifs_errc(c, "bad node type (%d but expected %d)",
-+                         ch->node_type, type);
-               goto out;
-       }
-       err = ubifs_check_node(c, buf, lnum, offs, 0, 0);
-       if (err) {
--              ubifs_err("expected node type %d", type);
-+              ubifs_errc(c, "expected node type %d", type);
-               return err;
-       }
-       l = le32_to_cpu(ch->len);
-       if (l != len) {
--              ubifs_err("bad node length %d, expected %d", l, len);
-+              ubifs_errc(c, "bad node length %d, expected %d", l, len);
-               goto out;
-       }
-       return 0;
- out:
--      ubifs_err("bad node at LEB %d:%d, LEB mapping status %d", lnum, offs,
--                ubi_is_mapped(c->ubi, lnum));
--      ubifs_dump_node(c, buf);
--      dump_stack();
-+      ubifs_errc(c, "bad node at LEB %d:%d, LEB mapping status %d", lnum,
-+                 offs, ubi_is_mapped(c->ubi, lnum));
-+      if (!c->probing) {
-+              ubifs_dump_node(c, buf);
-+              dump_stack();
-+      }
-       return -EINVAL;
- }
---- a/fs/ubifs/super.c
-+++ b/fs/ubifs/super.c
-@@ -1149,6 +1149,9 @@ static int mount_ubifs(struct ubifs_info
-       size_t sz;
-       c->ro_mount = !!(c->vfs_sb->s_flags & MS_RDONLY);
-+      /* Suppress error messages while probing if MS_SILENT is set */
-+      c->probing = !!(c->vfs_sb->s_flags & MS_SILENT);
-+
-       err = init_constants_early(c);
-       if (err)
-               return err;
-@@ -1214,6 +1217,8 @@ static int mount_ubifs(struct ubifs_info
-       if (err)
-               goto out_free;
-+      c->probing = 0;
-+
-       /*
-        * Make sure the compressor which is set as default in the superblock
-        * or overridden by mount options is actually compiled in.
---- a/fs/ubifs/ubifs.h
-+++ b/fs/ubifs/ubifs.h
-@@ -51,6 +51,15 @@
- #define ubifs_warn(fmt, ...)                                        \
-       pr_warn("UBIFS warning (pid %d): %s: " fmt "\n",            \
-               current->pid, __func__, ##__VA_ARGS__)
-+/*
-+ * A variant of 'ubifs_err()' which takes the UBIFS file-sytem description
-+ * object as an argument.
-+ */
-+#define ubifs_errc(c, fmt, ...)                                     \
-+      do {                                                        \
-+              if (!(c)->probing)                                  \
-+                      ubifs_err(fmt, ##__VA_ARGS__);              \
-+      } while (0)
- /* UBIFS file system VFS magic number */
- #define UBIFS_SUPER_MAGIC 0x24051905
-@@ -1209,6 +1218,7 @@ struct ubifs_debug_info;
-  * @need_recovery: %1 if the file-system needs recovery
-  * @replaying: %1 during journal replay
-  * @mounting: %1 while mounting
-+ * @probing: %1 while attempting to mount if MS_SILENT mount flag is set
-  * @remounting_rw: %1 while re-mounting from R/O mode to R/W mode
-  * @replay_list: temporary list used during journal replay
-  * @replay_buds: list of buds to replay
-@@ -1441,6 +1451,7 @@ struct ubifs_info {
-       unsigned int replaying:1;
-       unsigned int mounting:1;
-       unsigned int remounting_rw:1;
-+      unsigned int probing:1;
-       struct list_head replay_list;
-       struct list_head replay_buds;
-       unsigned long long cs_sqnum;
index d8ca666..9459749 100644 (file)
@@ -1,6 +1,6 @@
 --- /dev/null
 +++ b/net/sched/act_connmark.c
-@@ -0,0 +1,144 @@
+@@ -0,0 +1,126 @@
 +/*
 + * Copyright (c) 2011 Felix Fietkau <nbd@openwrt.org>
 + *
@@ -37,8 +37,6 @@
 +
 +#define CONNMARK_TAB_MASK     3
 +
-+static struct tcf_hashinfo connmark_hash_info;
-+
 +static int tcf_connmark(struct sk_buff *skb, const struct tc_action *a,
 +                     struct tcf_result *res)
 +{
 +                           struct nlattr *est, struct tc_action *a,
 +                           int ovr, int bind)
 +{
-+      struct tcf_common *pc;
 +      int ret = 0;
 +
-+      pc = tcf_hash_check(0, a, bind);
-+      if (!pc) {
-+              pc = tcf_hash_create(0, est, a, sizeof(*pc), bind);
-+              if (IS_ERR(pc))
-+                  return PTR_ERR(pc);
++      if (!tcf_hash_check(0, a, bind)) {
++              ret = tcf_hash_create(0, est, a, sizeof(struct tcf_common), bind);
++              if (ret)
++                  return ret;
 +
-+              tcf_hash_insert(pc, &connmark_hash_info);
++              tcf_hash_insert(a);
 +              ret = ACT_P_CREATED;
 +      } else {
 +              if (!ovr) {
-+                      tcf_hash_release(pc, bind, &connmark_hash_info);
++                      tcf_hash_release(a, bind);
 +                      return -EEXIST;
 +              }
 +      }
 +      return ret;
 +}
 +
-+static inline int tcf_connmark_cleanup(struct tc_action *a, int bind)
-+{
-+      if (a->priv)
-+              return tcf_hash_release(a->priv, bind, &connmark_hash_info);
-+      return 0;
-+}
-+
 +static inline int tcf_connmark_dump(struct sk_buff *skb, struct tc_action *a,
 +                              int bind, int ref)
 +{
 +
 +static struct tc_action_ops act_connmark_ops = {
 +      .kind           =       "connmark",
-+      .hinfo          =       &connmark_hash_info,
 +      .type           =       TCA_ACT_CONNMARK,
 +      .owner          =       THIS_MODULE,
 +      .act            =       tcf_connmark,
 +      .dump           =       tcf_connmark_dump,
-+      .cleanup        =       tcf_connmark_cleanup,
 +      .init           =       tcf_connmark_init,
 +};
 +
 +
 +static int __init connmark_init_module(void)
 +{
-+      int ret;
-+
-+      ret = tcf_hashinfo_init(&connmark_hash_info, CONNMARK_TAB_MASK);
-+      if (ret)
-+              return ret;
 +
-+      return tcf_register_action(&act_connmark_ops);
++      return tcf_register_action(&act_connmark_ops, CONNMARK_TAB_MASK);
 +}
 +
 +static void __exit connmark_cleanup_module(void)
index f387435..a927827 100644 (file)
@@ -1,16 +1,16 @@
 --- a/net/bridge/br_private.h
 +++ b/net/bridge/br_private.h
-@@ -174,6 +174,7 @@ struct net_bridge_port
- #define BR_ADMIN_COST         0x00000010
- #define BR_LEARNING           0x00000020
+@@ -172,6 +172,7 @@ struct net_bridge_port
  #define BR_FLOOD              0x00000040
-+#define BR_ISOLATE_MODE       0x00000080
+ #define BR_AUTO_MASK (BR_FLOOD | BR_LEARNING)
+ #define BR_PROMISC            0x00000080
++#define BR_ISOLATE_MODE               0x00000100
  
  #ifdef CONFIG_BRIDGE_IGMP_SNOOPING
-       struct bridge_mcast_query       ip4_query;
+       struct bridge_mcast_own_query   ip4_own_query;
 --- a/net/bridge/br_sysfs_if.c
 +++ b/net/bridge/br_sysfs_if.c
-@@ -161,6 +161,22 @@ BRPORT_ATTR_FLAG(root_block, BR_ROOT_BLO
+@@ -171,6 +171,22 @@ BRPORT_ATTR_FLAG(root_block, BR_ROOT_BLO
  BRPORT_ATTR_FLAG(learning, BR_LEARNING);
  BRPORT_ATTR_FLAG(unicast_flood, BR_FLOOD);
  
@@ -33,7 +33,7 @@
  #ifdef CONFIG_BRIDGE_IGMP_SNOOPING
  static ssize_t show_multicast_router(struct net_bridge_port *p, char *buf)
  {
-@@ -203,6 +219,7 @@ static const struct brport_attribute *br
+@@ -213,6 +229,7 @@ static const struct brport_attribute *br
        &brport_attr_multicast_router,
        &brport_attr_multicast_fast_leave,
  #endif
@@ -56,7 +56,7 @@
                skb = NULL;
 --- a/net/bridge/br_forward.c
 +++ b/net/bridge/br_forward.c
-@@ -119,7 +119,7 @@ void br_deliver(const struct net_bridge_
+@@ -116,7 +116,7 @@ void br_deliver(const struct net_bridge_
  /* called with rcu_read_lock */
  void br_forward(const struct net_bridge_port *to, struct sk_buff *skb, struct sk_buff *skb0)
  {
@@ -65,7 +65,7 @@
                if (skb0)
                        deliver_clone(to, skb, __br_forward);
                else
-@@ -175,7 +175,7 @@ static void br_flood(struct net_bridge *
+@@ -172,7 +172,7 @@ static void br_flood(struct net_bridge *
                     struct sk_buff *skb0,
                     void (*__packet_hook)(const struct net_bridge_port *p,
                                           struct sk_buff *skb),
@@ -74,7 +74,7 @@
  {
        struct net_bridge_port *p;
        struct net_bridge_port *prev;
-@@ -183,6 +183,8 @@ static void br_flood(struct net_bridge *
+@@ -180,6 +180,8 @@ static void br_flood(struct net_bridge *
        prev = NULL;
  
        list_for_each_entry_rcu(p, &br->port_list, list) {
@@ -83,7 +83,7 @@
                /* Do not flood unicast traffic to ports that turn it off */
                if (unicast && !(p->flags & BR_FLOOD))
                        continue;
-@@ -209,14 +211,14 @@ out:
+@@ -206,14 +208,14 @@ out:
  /* called with rcu_read_lock */
  void br_flood_deliver(struct net_bridge *br, struct sk_buff *skb, bool unicast)
  {
index 9b223fb..bbfcaa4 100644 (file)
@@ -1,6 +1,6 @@
 --- a/net/bridge/br_forward.c
 +++ b/net/bridge/br_forward.c
-@@ -57,7 +57,7 @@ int br_dev_queue_push_xmit(struct sk_buf
+@@ -53,7 +53,7 @@ EXPORT_SYMBOL_GPL(br_dev_queue_push_xmit
  
  int br_forward_finish(struct sk_buff *skb)
  {
@@ -9,7 +9,7 @@
                       br_dev_queue_push_xmit);
  
  }
-@@ -80,7 +80,7 @@ static void __br_deliver(const struct ne
+@@ -77,7 +77,7 @@ static void __br_deliver(const struct ne
                return;
        }
  
@@ -18,7 +18,7 @@
                br_forward_finish);
  }
  
-@@ -101,7 +101,7 @@ static void __br_forward(const struct ne
+@@ -98,7 +98,7 @@ static void __br_forward(const struct ne
        skb->dev = to->dev;
        skb_forward_csum(skb);
  
@@ -38,7 +38,7 @@
                       netif_receive_skb);
  }
  
-@@ -214,7 +214,7 @@ rx_handler_result_t br_handle_frame(stru
+@@ -219,7 +219,7 @@ rx_handler_result_t br_handle_frame(stru
                }
  
                /* Deliver packet to local host only */
@@ -47,7 +47,7 @@
                            NULL, br_handle_local_finish)) {
                        return RX_HANDLER_CONSUMED; /* consumed by filter */
                } else {
-@@ -229,7 +229,7 @@ forward:
+@@ -234,7 +234,7 @@ forward:
                if (ether_addr_equal(p->br->dev->dev_addr, dest))
                        skb->pkt_type = PACKET_HOST;
  
@@ -56,7 +56,7 @@
                        br_handle_local_finish))
                        break;
  
-@@ -251,7 +251,7 @@ forward:
+@@ -256,7 +256,7 @@ forward:
                if (ether_addr_equal(p->br->dev->dev_addr, dest))
                        skb->pkt_type = PACKET_HOST;
  
        default:
 --- a/net/bridge/br_multicast.c
 +++ b/net/bridge/br_multicast.c
-@@ -802,7 +802,7 @@ static void __br_multicast_send_query(st
+@@ -815,7 +815,7 @@ static void __br_multicast_send_query(st
        if (port) {
                __skb_push(skb, sizeof(struct ethhdr));
                skb->dev = port->dev;
 -              NF_HOOK(NFPROTO_BRIDGE, NF_BR_LOCAL_OUT, skb, NULL, skb->dev,
 +              BR_HOOK(NFPROTO_BRIDGE, NF_BR_LOCAL_OUT, skb, NULL, skb->dev,
                        dev_queue_xmit);
-       } else
-               netif_rx(skb);
+       } else {
+               br_multicast_select_own_querier(br, ip, skb);
 --- a/net/bridge/br_netfilter.c
 +++ b/net/bridge/br_netfilter.c
 @@ -73,6 +73,15 @@ static int brnf_pass_vlan_indev __read_m
        if (vlan_tx_tag_present(skb))
 --- a/net/bridge/br_private.h
 +++ b/net/bridge/br_private.h
-@@ -724,15 +724,29 @@ static inline u16 br_get_pvid(const stru
+@@ -769,15 +769,29 @@ static inline int br_vlan_enabled(struct
  
  /* br_netfilter.c */
- #ifdef CONFIG_BRIDGE_NETFILTER
+ #if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
 +extern int brnf_call_ebtables;
- int br_netfilter_init(void);
- void br_netfilter_fini(void);
+ int br_nf_core_init(void);
+ void br_nf_core_fini(void);
  void br_netfilter_rtable_init(struct net_bridge *);
 +bool br_netfilter_run_hooks(void);
  #else
- #define br_netfilter_init()   (0)
- #define br_netfilter_fini()   do { } while (0)
+ static inline int br_nf_core_init(void) { return 0; }
+ static inline void br_nf_core_fini(void) {}
  #define br_netfilter_rtable_init(x)
 +#define br_netfilter_run_hooks()      false
  #endif
 +
  /* br_stp.c */
  void br_log_state(const struct net_bridge_port *p);
struct net_bridge_port *br_get_port(struct net_bridge *br, u16 port_no);
void br_set_state(struct net_bridge_port *p, unsigned int state);
 --- a/net/bridge/br_stp_bpdu.c
 +++ b/net/bridge/br_stp_bpdu.c
 @@ -54,7 +54,7 @@ static void br_send_bpdu(struct net_brid
  
 --- a/net/bridge/netfilter/ebtables.c
 +++ b/net/bridge/netfilter/ebtables.c
-@@ -2405,11 +2405,13 @@ static int __init ebtables_init(void)
+@@ -2414,11 +2414,13 @@ static int __init ebtables_init(void)
        }
  
        printk(KERN_INFO "Ebtables v2.0 registered\n");
index a9612f0..97a7f7f 100644 (file)
@@ -1,6 +1,6 @@
 --- a/net/bridge/br_multicast.c
 +++ b/net/bridge/br_multicast.c
-@@ -634,7 +634,8 @@ struct net_bridge_port_group *br_multica
+@@ -635,7 +635,8 @@ struct net_bridge_port_group *br_multica
                        struct net_bridge_port *port,
                        struct br_ip *group,
                        struct net_bridge_port_group __rcu *next,
@@ -10,7 +10,7 @@
  {
        struct net_bridge_port_group *p;
  
-@@ -649,12 +650,33 @@ struct net_bridge_port_group *br_multica
+@@ -650,12 +651,33 @@ struct net_bridge_port_group *br_multica
        hlist_add_head(&p->mglist, &port->mglist);
        setup_timer(&p->timer, br_multicast_port_group_expired,
                    (unsigned long)p);
@@ -45,7 +45,7 @@
  {
        struct net_bridge_mdb_entry *mp;
        struct net_bridge_port_group *p;
-@@ -681,13 +703,13 @@ static int br_multicast_add_group(struct
+@@ -682,13 +704,13 @@ static int br_multicast_add_group(struct
        for (pp = &mp->ports;
             (p = mlock_dereference(*pp, br)) != NULL;
             pp = &p->next) {
@@ -61,7 +61,7 @@
        if (unlikely(!p))
                goto err;
        rcu_assign_pointer(*pp, p);
-@@ -706,7 +728,7 @@ err:
+@@ -707,7 +729,7 @@ err:
  static int br_ip4_multicast_add_group(struct net_bridge *br,
                                      struct net_bridge_port *port,
                                      __be32 group,
@@ -70,7 +70,7 @@
  {
        struct br_ip br_group;
  
-@@ -717,14 +739,14 @@ static int br_ip4_multicast_add_group(st
+@@ -718,14 +740,14 @@ static int br_ip4_multicast_add_group(st
        br_group.proto = htons(ETH_P_IP);
        br_group.vid = vid;
  
@@ -87,7 +87,7 @@
  {
        struct br_ip br_group;
  
-@@ -735,7 +757,7 @@ static int br_ip6_multicast_add_group(st
+@@ -736,7 +758,7 @@ static int br_ip6_multicast_add_group(st
        br_group.proto = htons(ETH_P_IPV6);
        br_group.vid = vid;
  
@@ -96,7 +96,7 @@
  }
  #endif
  
-@@ -950,6 +972,7 @@ static int br_ip4_multicast_igmp3_report
+@@ -966,6 +988,7 @@ static int br_ip4_multicast_igmp3_report
                                         struct sk_buff *skb,
                                         u16 vid)
  {
        struct igmpv3_report *ih;
        struct igmpv3_grec *grec;
        int i;
-@@ -993,7 +1016,7 @@ static int br_ip4_multicast_igmp3_report
+@@ -1009,7 +1032,7 @@ static int br_ip4_multicast_igmp3_report
                        continue;
                }
  
                if (err)
                        break;
        }
-@@ -1007,6 +1030,7 @@ static int br_ip6_multicast_mld2_report(
+@@ -1023,6 +1046,7 @@ static int br_ip6_multicast_mld2_report(
                                        struct sk_buff *skb,
                                        u16 vid)
  {
        struct icmp6hdr *icmp6h;
        struct mld2_grec *grec;
        int i;
-@@ -1055,7 +1079,7 @@ static int br_ip6_multicast_mld2_report(
+@@ -1071,7 +1095,7 @@ static int br_ip6_multicast_mld2_report(
                }
  
                err = br_ip6_multicast_add_group(br, port, &grec->grec_mca,
                if (!err)
                        break;
        }
-@@ -1319,7 +1343,8 @@ static void br_multicast_leave_group(str
-                                    struct net_bridge_port *port,
-                                    struct br_ip *group,
-                                    struct bridge_mcast_querier *querier,
--                                   struct bridge_mcast_query *query)
-+                                   struct bridge_mcast_query *query,
-+                                   const unsigned char *src)
+@@ -1408,7 +1432,8 @@ br_multicast_leave_group(struct net_brid
+                        struct net_bridge_port *port,
+                        struct br_ip *group,
+                        struct bridge_mcast_other_query *other_query,
+-                       struct bridge_mcast_own_query *own_query)
++                       struct bridge_mcast_own_query *own_query,
++                       const unsigned char *src)
  {
        struct net_bridge_mdb_htable *mdb;
        struct net_bridge_mdb_entry *mp;
-@@ -1369,7 +1394,7 @@ static void br_multicast_leave_group(str
+@@ -1458,7 +1483,7 @@ br_multicast_leave_group(struct net_brid
                for (pp = &mp->ports;
                     (p = mlock_dereference(*pp, br)) != NULL;
                     pp = &p->next) {
                                continue;
  
                        rcu_assign_pointer(*pp, p->next);
-@@ -1403,7 +1428,7 @@ static void br_multicast_leave_group(str
+@@ -1492,7 +1517,7 @@ br_multicast_leave_group(struct net_brid
        for (p = mlock_dereference(mp->ports, br);
             p != NULL;
             p = mlock_dereference(p->next, br)) {
                        continue;
  
                if (!hlist_unhashed(&p->mglist) &&
-@@ -1421,8 +1446,8 @@ out:
+@@ -1510,8 +1535,8 @@ out:
  
  static void br_ip4_multicast_leave_group(struct net_bridge *br,
                                         struct net_bridge_port *port,
 +                                       const unsigned char *src)
  {
        struct br_ip br_group;
-       struct bridge_mcast_query *query = port ? &port->ip4_query :
-@@ -1435,14 +1460,15 @@ static void br_ip4_multicast_leave_group
-       br_group.proto = htons(ETH_P_IP);
+       struct bridge_mcast_own_query *own_query;
+@@ -1526,14 +1551,14 @@ static void br_ip4_multicast_leave_group
        br_group.vid = vid;
  
--      br_multicast_leave_group(br, port, &br_group, &br->ip4_querier, query);
-+      br_multicast_leave_group(br, port, &br_group, &br->ip4_querier, query,
-+                               src);
+       br_multicast_leave_group(br, port, &br_group, &br->ip4_other_query,
+-                               own_query);
++                               own_query, src);
  }
  
  #if IS_ENABLED(CONFIG_IPV6)
 +                                       __u16 vid, const unsigned char *src)
  {
        struct br_ip br_group;
-       struct bridge_mcast_query *query = port ? &port->ip6_query :
-@@ -1456,7 +1482,8 @@ static void br_ip6_multicast_leave_group
-       br_group.proto = htons(ETH_P_IPV6);
+       struct bridge_mcast_own_query *own_query;
+@@ -1548,7 +1573,7 @@ static void br_ip6_multicast_leave_group
        br_group.vid = vid;
  
--      br_multicast_leave_group(br, port, &br_group, &br->ip6_querier, query);
-+      br_multicast_leave_group(br, port, &br_group, &br->ip6_querier, query,
-+                               src);
+       br_multicast_leave_group(br, port, &br_group, &br->ip6_other_query,
+-                               own_query);
++                               own_query, src);
  }
  #endif
  
-@@ -1465,6 +1492,7 @@ static int br_multicast_ipv4_rcv(struct
+@@ -1557,6 +1582,7 @@ static int br_multicast_ipv4_rcv(struct
                                 struct sk_buff *skb,
                                 u16 vid)
  {
        struct sk_buff *skb2 = skb;
        const struct iphdr *iph;
        struct igmphdr *ih;
-@@ -1538,7 +1566,7 @@ static int br_multicast_ipv4_rcv(struct
+@@ -1630,7 +1656,7 @@ static int br_multicast_ipv4_rcv(struct
        case IGMP_HOST_MEMBERSHIP_REPORT:
        case IGMPV2_HOST_MEMBERSHIP_REPORT:
                BR_INPUT_SKB_CB(skb)->mrouters_only = 1;
                break;
        case IGMPV3_HOST_MEMBERSHIP_REPORT:
                err = br_ip4_multicast_igmp3_report(br, port, skb2, vid);
-@@ -1547,7 +1575,7 @@ static int br_multicast_ipv4_rcv(struct
+@@ -1639,7 +1665,7 @@ static int br_multicast_ipv4_rcv(struct
                err = br_ip4_multicast_query(br, port, skb2, vid);
                break;
        case IGMP_HOST_LEAVE_MESSAGE:
                break;
        }
  
-@@ -1565,6 +1593,7 @@ static int br_multicast_ipv6_rcv(struct
+@@ -1657,6 +1683,7 @@ static int br_multicast_ipv6_rcv(struct
                                 struct sk_buff *skb,
                                 u16 vid)
  {
        struct sk_buff *skb2;
        const struct ipv6hdr *ip6h;
        u8 icmp6_type;
-@@ -1674,7 +1703,8 @@ static int br_multicast_ipv6_rcv(struct
+@@ -1766,7 +1793,8 @@ static int br_multicast_ipv6_rcv(struct
                }
                mld = (struct mld_msg *)skb_transport_header(skb2);
                BR_INPUT_SKB_CB(skb)->mrouters_only = 1;
                break;
            }
        case ICMPV6_MLD2_REPORT:
-@@ -1691,7 +1721,7 @@ static int br_multicast_ipv6_rcv(struct
+@@ -1783,7 +1811,7 @@ static int br_multicast_ipv6_rcv(struct
                        goto out;
                }
                mld = (struct mld_msg *)skb_transport_header(skb2);
  
 --- a/net/bridge/br_private.h
 +++ b/net/bridge/br_private.h
-@@ -116,6 +116,9 @@ struct net_bridge_port_group {
+@@ -112,6 +112,9 @@ struct net_bridge_port_group {
        struct timer_list               timer;
        struct br_ip                    addr;
        unsigned char                   state;
  };
  
  struct net_bridge_mdb_entry
-@@ -175,6 +178,7 @@ struct net_bridge_port
- #define BR_LEARNING           0x00000020
- #define BR_FLOOD              0x00000040
- #define BR_ISOLATE_MODE       0x00000080
-+#define BR_MULTICAST_TO_UCAST 0x00000100
+@@ -173,6 +176,7 @@ struct net_bridge_port
+ #define BR_AUTO_MASK (BR_FLOOD | BR_LEARNING)
+ #define BR_PROMISC            0x00000080
+ #define BR_ISOLATE_MODE               0x00000100
++#define BR_MULTICAST_TO_UCAST 0x00000200
  
  #ifdef CONFIG_BRIDGE_IGMP_SNOOPING
-       struct bridge_mcast_query       ip4_query;
-@@ -468,7 +472,8 @@ void br_multicast_free_pg(struct rcu_hea
+       struct bridge_mcast_own_query   ip4_own_query;
+@@ -485,7 +489,8 @@ void br_multicast_free_pg(struct rcu_hea
  struct net_bridge_port_group *
  br_multicast_new_port_group(struct net_bridge_port *port, struct br_ip *group,
                            struct net_bridge_port_group __rcu *next,
        rcu_assign_pointer(*pp, p);
 --- a/net/bridge/br_forward.c
 +++ b/net/bridge/br_forward.c
-@@ -170,6 +170,29 @@ out:
+@@ -167,6 +167,29 @@ out:
        return p;
  }
  
  /* called under bridge lock */
  static void br_flood(struct net_bridge *br, struct sk_buff *skb,
                     struct sk_buff *skb0,
-@@ -234,6 +257,7 @@ static void br_multicast_flood(struct ne
+@@ -231,6 +254,7 @@ static void br_multicast_flood(struct ne
        struct net_bridge_port *prev = NULL;
        struct net_bridge_port_group *p;
        struct hlist_node *rp;
  
        rp = rcu_dereference(hlist_first_rcu(&br->router_list));
        p = mdst ? rcu_dereference(mdst->ports) : NULL;
-@@ -244,10 +268,19 @@ static void br_multicast_flood(struct ne
+@@ -241,10 +265,19 @@ static void br_multicast_flood(struct ne
                rport = rp ? hlist_entry(rp, struct net_bridge_port, rlist) :
                             NULL;
  
  
 --- a/net/bridge/br_sysfs_if.c
 +++ b/net/bridge/br_sysfs_if.c
-@@ -192,6 +192,7 @@ static BRPORT_ATTR(multicast_router, S_I
+@@ -202,6 +202,7 @@ static BRPORT_ATTR(multicast_router, S_I
                   store_multicast_router);
  
  BRPORT_ATTR_FLAG(multicast_fast_leave, BR_MULTICAST_FAST_LEAVE);
  #endif
  
  static const struct brport_attribute *brport_attrs[] = {
-@@ -218,6 +219,7 @@ static const struct brport_attribute *br
+@@ -228,6 +229,7 @@ static const struct brport_attribute *br
  #ifdef CONFIG_BRIDGE_IGMP_SNOOPING
        &brport_attr_multicast_router,
        &brport_attr_multicast_fast_leave,
index 70e96ce..7e4e1e1 100644 (file)
@@ -43,6 +43,32 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
  
        __be16                  i_flags;
        __be16                  o_flags;
+--- a/include/uapi/linux/if_tunnel.h
++++ b/include/uapi/linux/if_tunnel.h
+@@ -57,10 +57,23 @@ enum {
+       IFLA_IPTUN_ENCAP_FLAGS,
+       IFLA_IPTUN_ENCAP_SPORT,
+       IFLA_IPTUN_ENCAP_DPORT,
++      IFLA_IPTUN_FMRS,
+       __IFLA_IPTUN_MAX,
+ };
+ #define IFLA_IPTUN_MAX        (__IFLA_IPTUN_MAX - 1)
++enum {
++      IFLA_IPTUN_FMR_UNSPEC,
++      IFLA_IPTUN_FMR_IP6_PREFIX,
++      IFLA_IPTUN_FMR_IP4_PREFIX,
++      IFLA_IPTUN_FMR_IP6_PREFIX_LEN,
++      IFLA_IPTUN_FMR_IP4_PREFIX_LEN,
++      IFLA_IPTUN_FMR_EA_LEN,
++      IFLA_IPTUN_FMR_OFFSET,
++      __IFLA_IPTUN_FMR_MAX,
++};
++#define IFLA_IPTUN_FMR_MAX (__IFLA_IPTUN_FMR_MAX - 1)
++
+ enum tunnel_encap_types {
+       TUNNEL_ENCAP_NONE,
+       TUNNEL_ENCAP_FOU,
 --- a/net/ipv6/ip6_tunnel.c
 +++ b/net/ipv6/ip6_tunnel.c
 @@ -16,6 +16,8 @@
index 2cc90ea..d76375e 100644 (file)
@@ -112,7 +112,16 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
                return -EINVAL;
 --- a/net/ipv6/route.c
 +++ b/net/ipv6/route.c
-@@ -283,6 +283,21 @@ static const struct rt6_info ip6_prohibi
+@@ -87,6 +87,8 @@ static int           ip6_pkt_discard(struct sk_bu
+ static int            ip6_pkt_discard_out(struct sock *sk, struct sk_buff *skb);
+ static int            ip6_pkt_prohibit(struct sk_buff *skb);
+ static int            ip6_pkt_prohibit_out(struct sock *sk, struct sk_buff *skb);
++static int            ip6_pkt_policy_failed(struct sk_buff *skb);
++static int            ip6_pkt_policy_failed_out(struct sock *sk, 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,
+                                          struct sk_buff *skb, u32 mtu);
+@@ -283,6 +285,21 @@ static const struct rt6_info ip6_prohibi
        .rt6i_ref       = ATOMIC_INIT(1),
  };
  
@@ -134,7 +143,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
  static const struct rt6_info ip6_blk_hole_entry_template = {
        .dst = {
                .__refcnt       = ATOMIC_INIT(1),
-@@ -1581,6 +1596,11 @@ int ip6_route_add(struct fib6_config *cf
+@@ -1581,6 +1598,11 @@ int ip6_route_add(struct fib6_config *cf
                        rt->dst.output = ip6_pkt_prohibit_out;
                        rt->dst.input = ip6_pkt_prohibit;
                        break;
@@ -146,7 +155,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
                case RTN_THROW:
                default:
                        rt->dst.error = (cfg->fc_type == RTN_THROW) ? -EAGAIN
-@@ -2142,6 +2162,17 @@ static int ip6_pkt_prohibit_out(struct s
+@@ -2142,6 +2164,17 @@ static int ip6_pkt_prohibit_out(struct s
        return ip6_pkt_drop(skb, ICMPV6_ADM_PROHIBITED, IPSTATS_MIB_OUTNOROUTES);
  }
  
@@ -155,7 +164,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
 +      return ip6_pkt_drop(skb, ICMPV6_POLICY_FAIL, IPSTATS_MIB_INNOROUTES);
 +}
 +
-+static int ip6_pkt_policy_failed_out(struct sk_buff *skb)
++static int ip6_pkt_policy_failed_out(struct sock *sk, struct sk_buff *skb)
 +{
 +      skb->dev = skb_dst(skb)->dev;
 +      return ip6_pkt_drop(skb, ICMPV6_POLICY_FAIL, IPSTATS_MIB_OUTNOROUTES);
@@ -164,7 +173,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
  /*
   *    Allocate a dst for local (unicast / anycast) address.
   */
-@@ -2365,7 +2396,8 @@ static int rtm_to_fib6_config(struct sk_
+@@ -2365,7 +2398,8 @@ static int rtm_to_fib6_config(struct sk_
        if (rtm->rtm_type == RTN_UNREACHABLE ||
            rtm->rtm_type == RTN_BLACKHOLE ||
            rtm->rtm_type == RTN_PROHIBIT ||
@@ -174,7 +183,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
                cfg->fc_flags |= RTF_REJECT;
  
        if (rtm->rtm_type == RTN_LOCAL)
-@@ -2567,6 +2599,9 @@ static int rt6_fill_node(struct net *net
+@@ -2567,6 +2601,9 @@ static int rt6_fill_node(struct net *net
                case -EACCES:
                        rtm->rtm_type = RTN_PROHIBIT;
                        break;
@@ -184,7 +193,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
                case -EAGAIN:
                        rtm->rtm_type = RTN_THROW;
                        break;
-@@ -2820,6 +2855,8 @@ static int ip6_route_dev_notify(struct n
+@@ -2820,6 +2857,8 @@ static int ip6_route_dev_notify(struct n
  #ifdef CONFIG_IPV6_MULTIPLE_TABLES
                net->ipv6.ip6_prohibit_entry->dst.dev = dev;
                net->ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(dev);
@@ -193,7 +202,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
                net->ipv6.ip6_blk_hole_entry->dst.dev = dev;
                net->ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(dev);
  #endif
-@@ -3036,6 +3073,17 @@ static int __net_init ip6_route_net_init
+@@ -3036,6 +3075,17 @@ static int __net_init ip6_route_net_init
        net->ipv6.ip6_blk_hole_entry->dst.ops = &net->ipv6.ip6_dst_ops;
        dst_init_metrics(&net->ipv6.ip6_blk_hole_entry->dst,
                         ip6_template_metrics, true);
@@ -211,7 +220,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
  #endif
  
        net->ipv6.sysctl.flush_delay = 0;
-@@ -3054,6 +3102,8 @@ out:
+@@ -3054,6 +3104,8 @@ out:
        return ret;
  
  #ifdef CONFIG_IPV6_MULTIPLE_TABLES
@@ -220,7 +229,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
  out_ip6_prohibit_entry:
        kfree(net->ipv6.ip6_prohibit_entry);
  out_ip6_null_entry:
-@@ -3071,6 +3121,7 @@ static void __net_exit ip6_route_net_exi
+@@ -3071,6 +3123,7 @@ static void __net_exit ip6_route_net_exi
  #ifdef CONFIG_IPV6_MULTIPLE_TABLES
        kfree(net->ipv6.ip6_prohibit_entry);
        kfree(net->ipv6.ip6_blk_hole_entry);
@@ -228,7 +237,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
  #endif
        dst_entries_destroy(&net->ipv6.ip6_dst_ops);
  }
-@@ -3167,6 +3218,9 @@ int __init ip6_route_init(void)
+@@ -3167,6 +3220,9 @@ int __init ip6_route_init(void)
        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->rt6i_idev = in6_dev_get(init_net.loopback_dev);
index d634647..42bddfe 100644 (file)
@@ -1,12 +1,6 @@
 --- a/include/linux/phy.h
 +++ b/include/linux/phy.h
-@@ -417,9 +417,18 @@ struct phy_driver {
-        */
-       int (*config_aneg)(struct phy_device *phydev);
-+      /* Determine if autonegotiation is done */
-+      int (*aneg_done)(struct phy_device *phydev);
-+
+@@ -484,6 +484,12 @@ struct phy_driver {
        /* Determines the negotiated speed and duplex */
        int (*read_status)(struct phy_device *phydev);
  
@@ -21,7 +15,7 @@
  
 --- a/drivers/net/phy/phy_device.c
 +++ b/drivers/net/phy/phy_device.c
-@@ -881,6 +881,9 @@ int genphy_update_link(struct phy_device
+@@ -914,6 +914,9 @@ int genphy_update_link(struct phy_device
  {
        int status;
  
        /* Do a fake read */
        status = phy_read(phydev, MII_BMSR);
        if (status < 0)
---- a/drivers/net/phy/phy.c
-+++ b/drivers/net/phy/phy.c
-@@ -99,7 +99,12 @@ static int phy_config_interrupt(struct p
-  */
- static inline int phy_aneg_done(struct phy_device *phydev)
- {
--      int retval = phy_read(phydev, MII_BMSR);
-+      int retval;
-+
-+      if (phydev->drv->aneg_done)
-+              return phydev->drv->aneg_done(phydev);
-+
-+      retval = phy_read(phydev, MII_BMSR);
-       return (retval < 0) ? retval : (retval & BMSR_ANEGCOMPLETE);
- }
index f4750bd..061e40f 100644 (file)
@@ -1,18 +1,18 @@
 --- a/drivers/net/phy/phy_device.c
 +++ b/drivers/net/phy/phy_device.c
-@@ -662,6 +662,9 @@ EXPORT_SYMBOL(phy_attach);
- void phy_detach(struct phy_device *phydev)
+@@ -674,6 +674,9 @@ void phy_detach(struct phy_device *phyde
  {
        int i;
 +      if (phydev->drv && phydev->drv->detach)
 +              phydev->drv->detach(phydev);
 +
-       phydev->attached_dev->phydev = NULL;
-       phydev->attached_dev = NULL;
-       phy_suspend(phydev);
+       if (phydev->bus->dev.driver)
+               module_put(phydev->bus->dev.driver->owner);
 --- a/include/linux/phy.h
 +++ b/include/linux/phy.h
-@@ -441,6 +441,12 @@ struct phy_driver {
+@@ -502,6 +502,12 @@ struct phy_driver {
         */
        int (*did_interrupt)(struct phy_device *phydev);
  
index 91ae126..cc3cb24 100644 (file)
@@ -9,7 +9,7 @@
  /**
   * mdiobus_alloc_size - allocate a mii_bus structure
   * @size: extra amount of memory to allocate for private storage.
-@@ -224,15 +226,33 @@ void mdiobus_free(struct mii_bus *bus)
+@@ -335,9 +337,21 @@ void mdiobus_free(struct mii_bus *bus)
  }
  EXPORT_SYMBOL(mdiobus_free);
  
@@ -31,8 +31,9 @@
        int err;
  
        phydev = get_phy_device(bus, addr, false);
-       if (IS_ERR(phydev) || phydev == NULL)
-               return phydev;
+@@ -350,6 +364,12 @@ struct phy_device *mdiobus_scan(struct m
+        */
+       of_mdiobus_link_phydev(bus, phydev);
  
 +      mutex_lock(&__mdio_board_lock);
 +      list_for_each_entry(be, &__mdio_board_list, list)
@@ -45,7 +46,7 @@
                phy_device_free(phydev);
 --- a/include/linux/phy.h
 +++ b/include/linux/phy.h
-@@ -667,4 +667,22 @@ int __init mdio_bus_init(void);
+@@ -785,4 +785,22 @@ int __init mdio_bus_init(void);
  void mdio_bus_exit(void);
  
  extern struct bus_type mdio_bus_type;
index e0bdab7..b0b8db4 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/phy/Kconfig
 +++ b/drivers/net/phy/Kconfig
-@@ -128,6 +128,13 @@ config MICREL_PHY
+@@ -132,6 +132,13 @@ config MICREL_PHY
        ---help---
          Supports the KSZ9021, VSC8201, KS8001 PHYs.
  
@@ -16,7 +16,7 @@
        depends on PHYLIB=y
 --- a/drivers/net/phy/Makefile
 +++ b/drivers/net/phy/Makefile
-@@ -16,6 +16,7 @@ obj-$(CONFIG_BCM63XX_PHY)    += bcm63xx.o
+@@ -18,6 +18,7 @@ obj-$(CONFIG_BCM63XX_PHY)    += bcm63xx.o
  obj-$(CONFIG_BCM7XXX_PHY)     += bcm7xxx.o
  obj-$(CONFIG_BCM87XX_PHY)     += bcm87xx.o
  obj-$(CONFIG_ICPLUS_PHY)      += icplus.o
index d90462e..3aa019f 100644 (file)
@@ -1,40 +1,16 @@
 --- a/include/linux/netdevice.h
 +++ b/include/linux/netdevice.h
-@@ -1245,6 +1245,11 @@ struct net_device {
-       const struct ethtool_ops *ethtool_ops;
-       const struct forwarding_accel_ops *fwd_ops;
+@@ -1216,6 +1216,7 @@ enum netdev_priv_flags {
+       IFF_LIVE_ADDR_CHANGE            = 1<<20,
+       IFF_MACVLAN                     = 1<<21,
+       IFF_XMIT_DST_RELEASE_PERM       = 1<<22,
++      IFF_NO_IP_ALIGN                 = 1<<23,
+ };
  
-+#ifdef CONFIG_ETHERNET_PACKET_MANGLE
-+      void (*eth_mangle_rx)(struct net_device *dev, struct sk_buff *skb);
-+      struct sk_buff *(*eth_mangle_tx)(struct net_device *dev, struct sk_buff *skb);
-+#endif
-+
-       /* Hardware header description */
-       const struct header_ops *header_ops;
-@@ -1313,6 +1318,9 @@ struct net_device {
-       void                    *ax25_ptr;      /* AX.25 specific data */
-       struct wireless_dev     *ieee80211_ptr; /* IEEE 802.11 specific data,
-                                                  assign before registering */
-+#ifdef CONFIG_ETHERNET_PACKET_MANGLE
-+      void                    *phy_ptr; /* PHY device specific data */
-+#endif
- /*
-  * Cache lines mostly used on receive path (including eth_type_trans())
---- a/include/uapi/linux/if.h
-+++ b/include/uapi/linux/if.h
-@@ -84,6 +84,7 @@
- #define IFF_LIVE_ADDR_CHANGE 0x100000 /* device supports hardware address
-                                        * change when it's running */
- #define IFF_MACVLAN 0x200000          /* Macvlan device */
-+#define IFF_NO_IP_ALIGN       0x400000        /* do not ip-align allocated rx pkts */
- #define IF_GET_IFACE  0x0001          /* for querying only */
+ #define IFF_802_1Q_VLAN                       IFF_802_1Q_VLAN
 --- a/include/linux/skbuff.h
 +++ b/include/linux/skbuff.h
-@@ -1858,6 +1858,10 @@ static inline int pskb_trim(struct sk_bu
+@@ -2044,6 +2044,10 @@ static inline int pskb_trim(struct sk_bu
        return (len < skb->len) ? __pskb_trim(skb, len) : 0;
  }
  
@@ -45,7 +21,7 @@
  /**
   *    pskb_trim_unique - remove end from a paged unique (not cloned) buffer
   *    @skb: buffer to alter
-@@ -1984,16 +1988,6 @@ static inline struct sk_buff *dev_alloc_
+@@ -2170,16 +2174,6 @@ static inline struct sk_buff *dev_alloc_
  }
  
  
@@ -64,7 +40,7 @@
  {
 --- a/net/Kconfig
 +++ b/net/Kconfig
-@@ -24,6 +24,12 @@ menuconfig NET
+@@ -25,6 +25,12 @@ menuconfig NET
  
  if NET
  
        help
 --- a/net/core/dev.c
 +++ b/net/core/dev.c
-@@ -2614,10 +2614,20 @@ int dev_hard_start_xmit(struct sk_buff *
-               if (!list_empty(&ptype_all))
-                       dev_queue_xmit_nit(skb, dev);
+@@ -2607,10 +2607,20 @@ static int xmit_one(struct sk_buff *skb,
+       if (!list_empty(&ptype_all))
+               dev_queue_xmit_nit(skb, dev);
  
--              skb_len = skb->len;
--              trace_net_dev_start_xmit(skb, dev);
--              rc = ops->ndo_start_xmit(skb, dev);
--              trace_net_dev_xmit(skb, rc, dev, skb_len);
+-      len = skb->len;
+-      trace_net_dev_start_xmit(skb, dev);
+-      rc = netdev_start_xmit(skb, dev, txq, more);
+-      trace_net_dev_xmit(skb, rc, dev, len);
 +#ifdef CONFIG_ETHERNET_PACKET_MANGLE
-+              if (!dev->eth_mangle_tx ||
-+                  (skb = dev->eth_mangle_tx(dev, skb)) != NULL)
++      if (!dev->eth_mangle_tx ||
++          (skb = dev->eth_mangle_tx(dev, skb)) != NULL)
 +#else
-+              if (1)
++      if (1)
 +#endif
-+              {
-+                      skb_len = skb->len;
-+                      trace_net_dev_start_xmit(skb, dev);
-+                      rc = ops->ndo_start_xmit(skb, dev);
-+                      trace_net_dev_xmit(skb, rc, dev, skb_len);
-+              } else {
-+                      rc = NETDEV_TX_OK;
-+              }
-               if (rc == NETDEV_TX_OK)
-                       txq_trans_update(txq);
-               return rc;
++      {
++              len = skb->len;
++              trace_net_dev_start_xmit(skb, dev);
++              rc = netdev_start_xmit(skb, dev, txq, more);
++              trace_net_dev_xmit(skb, rc, dev, len);
++      } else {
++              rc = NETDEV_TX_OK;
++      }
+       return rc;
+ }
 --- a/net/core/skbuff.c
 +++ b/net/core/skbuff.c
-@@ -62,6 +62,7 @@
- #include <linux/scatterlist.h>
+@@ -63,6 +63,7 @@
  #include <linux/errqueue.h>
  #include <linux/prefetch.h>
+ #include <linux/if_vlan.h>
 +#include <linux/if.h>
  
  #include <net/protocol.h>
  #include <net/dst.h>
-@@ -439,6 +440,22 @@ struct sk_buff *__netdev_alloc_skb(struc
+@@ -451,6 +452,22 @@ struct sk_buff *__netdev_alloc_skb(struc
  }
  EXPORT_SYMBOL(__netdev_alloc_skb);
  
  {
 --- a/net/ethernet/eth.c
 +++ b/net/ethernet/eth.c
-@@ -161,6 +161,12 @@ __be16 eth_type_trans(struct sk_buff *sk
+@@ -188,6 +188,12 @@ __be16 eth_type_trans(struct sk_buff *sk
        const struct ethhdr *eth;
  
        skb->dev = dev;
index 67e56de..f577a9f 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/phy/Kconfig
 +++ b/drivers/net/phy/Kconfig
-@@ -135,6 +135,10 @@ config ADM6996_PHY
+@@ -139,6 +139,10 @@ config ADM6996_PHY
          Currently supports the ADM6996FC and ADM6996M switches.
          Support for FC is very limited.
  
@@ -13,7 +13,7 @@
        depends on PHYLIB=y
 --- a/drivers/net/phy/Makefile
 +++ b/drivers/net/phy/Makefile
-@@ -17,6 +17,7 @@ obj-$(CONFIG_BCM7XXX_PHY)    += bcm7xxx.o
+@@ -19,6 +19,7 @@ obj-$(CONFIG_BCM7XXX_PHY)    += bcm7xxx.o
  obj-$(CONFIG_BCM87XX_PHY)     += bcm87xx.o
  obj-$(CONFIG_ICPLUS_PHY)      += icplus.o
  obj-$(CONFIG_ADM6996_PHY)     += adm6996.o
index 077d061..c7c4f99 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/phy/Kconfig
 +++ b/drivers/net/phy/Kconfig
-@@ -139,6 +139,10 @@ config MVSWITCH_PHY
+@@ -143,6 +143,10 @@ config MVSWITCH_PHY
        tristate "Driver for Marvell 88E6060 switches"
        select ETHERNET_PACKET_MANGLE
  
@@ -13,7 +13,7 @@
        depends on PHYLIB=y
 --- a/drivers/net/phy/Makefile
 +++ b/drivers/net/phy/Makefile
-@@ -18,6 +18,7 @@ obj-$(CONFIG_BCM87XX_PHY)    += bcm87xx.o
+@@ -20,6 +20,7 @@ obj-$(CONFIG_BCM87XX_PHY)    += bcm87xx.o
  obj-$(CONFIG_ICPLUS_PHY)      += icplus.o
  obj-$(CONFIG_ADM6996_PHY)     += adm6996.o
  obj-$(CONFIG_MVSWITCH_PHY)    += mvswitch.o
index 301f2c8..869081e 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/phy/Kconfig
 +++ b/drivers/net/phy/Kconfig
-@@ -143,6 +143,11 @@ config IP17XX_PHY
+@@ -147,6 +147,11 @@ config IP17XX_PHY
        tristate "Driver for IC+ IP17xx switches"
        select SWCONFIG
  
@@ -14,7 +14,7 @@
        depends on PHYLIB=y
 --- a/drivers/net/phy/Makefile
 +++ b/drivers/net/phy/Makefile
-@@ -20,6 +20,7 @@ obj-$(CONFIG_ADM6996_PHY)    += adm6996.o
+@@ -22,6 +22,7 @@ obj-$(CONFIG_ADM6996_PHY)    += adm6996.o
  obj-$(CONFIG_MVSWITCH_PHY)    += mvswitch.o
  obj-$(CONFIG_IP17XX_PHY)      += ip17xx.o
  obj-$(CONFIG_REALTEK_PHY)     += realtek.o
index 5f69f12..6629700 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/phy/Kconfig
 +++ b/drivers/net/phy/Kconfig
-@@ -148,6 +148,10 @@ config AR8216_PHY
+@@ -152,6 +152,10 @@ config AR8216_PHY
        select ETHERNET_PACKET_MANGLE
        select SWCONFIG
  
@@ -13,7 +13,7 @@
        depends on PHYLIB=y
 --- a/drivers/net/phy/Makefile
 +++ b/drivers/net/phy/Makefile
-@@ -21,6 +21,7 @@ obj-$(CONFIG_MVSWITCH_PHY)   += mvswitch.o
+@@ -23,6 +23,7 @@ obj-$(CONFIG_MVSWITCH_PHY)   += mvswitch.o
  obj-$(CONFIG_IP17XX_PHY)      += ip17xx.o
  obj-$(CONFIG_REALTEK_PHY)     += realtek.o
  obj-$(CONFIG_AR8216_PHY)      += ar8216.o
index 6635f2d..833bb22 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/phy/Kconfig
 +++ b/drivers/net/phy/Kconfig
-@@ -246,6 +246,30 @@ config MDIO_BCM_UNIMAC
+@@ -250,6 +250,30 @@ config MDIO_BCM_UNIMAC
          controllers as well as some Broadcom Ethernet switches such as the
          Starfighter 2 switches.
  
@@ -33,7 +33,7 @@
  config MICREL_KS8995MA
 --- a/drivers/net/phy/Makefile
 +++ b/drivers/net/phy/Makefile
-@@ -22,6 +22,9 @@ obj-$(CONFIG_IP17XX_PHY)     += ip17xx.o
+@@ -24,6 +24,9 @@ obj-$(CONFIG_IP17XX_PHY)     += ip17xx.o
  obj-$(CONFIG_REALTEK_PHY)     += realtek.o
  obj-$(CONFIG_AR8216_PHY)      += ar8216.o
  obj-$(CONFIG_RTL8306_PHY)     += rtl8306.o
index c1b654a..8481b58 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/phy/Kconfig
 +++ b/drivers/net/phy/Kconfig
-@@ -268,6 +268,10 @@ config RTL8366RB_PHY
+@@ -272,6 +272,10 @@ config RTL8366RB_PHY
        tristate "Driver for the Realtek RTL8366RB switch"
        select SWCONFIG
  
@@ -13,7 +13,7 @@
  endif # PHYLIB
 --- a/drivers/net/phy/Makefile
 +++ b/drivers/net/phy/Makefile
-@@ -25,6 +25,7 @@ obj-$(CONFIG_RTL8306_PHY)    += rtl8306.o
+@@ -27,6 +27,7 @@ obj-$(CONFIG_RTL8306_PHY)    += rtl8306.o
  obj-$(CONFIG_RTL8366_SMI)     += rtl8366_smi.o
  obj-$(CONFIG_RTL8366S_PHY)    += rtl8366s.o
  obj-$(CONFIG_RTL8366RB_PHY)   += rtl8366rb.o
index 55e1689..95199a4 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/phy/Kconfig
 +++ b/drivers/net/phy/Kconfig
-@@ -152,6 +152,11 @@ config RTL8306_PHY
+@@ -156,6 +156,11 @@ config RTL8306_PHY
        tristate "Driver for Realtek RTL8306S switches"
        select SWCONFIG
  
@@ -14,7 +14,7 @@
        depends on PHYLIB=y
 --- a/drivers/net/phy/Makefile
 +++ b/drivers/net/phy/Makefile
-@@ -27,6 +27,7 @@ obj-$(CONFIG_RTL8366S_PHY)   += rtl8366s.o
+@@ -29,6 +29,7 @@ obj-$(CONFIG_RTL8366S_PHY)   += rtl8366s.o
  obj-$(CONFIG_RTL8366RB_PHY)   += rtl8366rb.o
  obj-$(CONFIG_RTL8367_PHY)     += rtl8367.o
  obj-$(CONFIG_LSI_ET1011C_PHY) += et1011c.o
index f2ee302..cc4f794 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/phy/Kconfig
 +++ b/drivers/net/phy/Kconfig
-@@ -277,6 +277,10 @@ config RTL8367_PHY
+@@ -281,6 +281,10 @@ config RTL8367_PHY
        tristate "Driver for the Realtek RTL8367R/M switches"
        select SWCONFIG
  
@@ -13,7 +13,7 @@
  endif # PHYLIB
 --- a/drivers/net/phy/Makefile
 +++ b/drivers/net/phy/Makefile
-@@ -26,6 +26,7 @@ obj-$(CONFIG_RTL8366_SMI)    += rtl8366_smi
+@@ -28,6 +28,7 @@ obj-$(CONFIG_RTL8366_SMI)    += rtl8366_smi
  obj-$(CONFIG_RTL8366S_PHY)    += rtl8366s.o
  obj-$(CONFIG_RTL8366RB_PHY)   += rtl8366rb.o
  obj-$(CONFIG_RTL8367_PHY)     += rtl8367.o
index 4fab9b8..6262ef9 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/phy/Kconfig
 +++ b/drivers/net/phy/Kconfig
-@@ -288,3 +288,8 @@ endif # PHYLIB
+@@ -292,3 +292,8 @@ endif # PHYLIB
  config MICREL_KS8995MA
        tristate "Micrel KS8995MA 5-ports 10/100 managed Ethernet switch"
        depends on SPI
@@ -11,7 +11,7 @@
 +      select ETHERNET_PACKET_MANGLE
 --- a/drivers/net/phy/Makefile
 +++ b/drivers/net/phy/Makefile
-@@ -29,6 +29,7 @@ obj-$(CONFIG_RTL8367_PHY)    += rtl8367.o
+@@ -31,6 +31,7 @@ obj-$(CONFIG_RTL8367_PHY)    += rtl8367.o
  obj-$(CONFIG_RTL8367B_PHY)    += rtl8367b.o
  obj-$(CONFIG_LSI_ET1011C_PHY) += et1011c.o
  obj-$(CONFIG_MICREL_PHY)      += micrel.o
index 86fccd3..5e13797 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/phy/Kconfig
 +++ b/drivers/net/phy/Kconfig
-@@ -283,6 +283,8 @@ config RTL8367B_PHY
+@@ -287,6 +287,8 @@ config RTL8367B_PHY
  
  endif # RTL8366_SMI
  
@@ -11,7 +11,7 @@
  config MICREL_KS8995MA
 --- a/drivers/net/phy/Makefile
 +++ b/drivers/net/phy/Makefile
-@@ -30,6 +30,7 @@ obj-$(CONFIG_RTL8367B_PHY)   += rtl8367b.o
+@@ -32,6 +32,7 @@ obj-$(CONFIG_RTL8367B_PHY)   += rtl8367b.o
  obj-$(CONFIG_LSI_ET1011C_PHY) += et1011c.o
  obj-$(CONFIG_MICREL_PHY)      += micrel.o
  obj-$(CONFIG_PSB6970_PHY)     += psb6970.o
index 8e8c7ab..8815e4c 100644 (file)
@@ -11,7 +11,7 @@
  
 --- a/drivers/tty/serial/8250/Kconfig
 +++ b/drivers/tty/serial/8250/Kconfig
-@@ -90,6 +90,10 @@ config SERIAL_8250_CONSOLE
+@@ -91,6 +91,10 @@ config SERIAL_8250_CONSOLE
  
          If unsure, say N.
  
@@ -19,6 +19,6 @@
 +      bool "Magic sysrq support on 8250/16550 devices"
 +      depends on SERIAL_8250_CONSOLE
 +
- config FIX_EARLYCON_MEM
-       bool
-       depends on X86
+ config SERIAL_8250_GSC
+       tristate
+       depends on SERIAL_8250 && GSC
index af41da7..d172d1b 100644 (file)
@@ -1,6 +1,6 @@
 --- a/net/Kconfig
 +++ b/net/Kconfig
-@@ -83,6 +83,9 @@ source "net/netlabel/Kconfig"
+@@ -89,6 +89,9 @@ source "net/netlabel/Kconfig"
  
  endif # if INET
  
index f28c85e..4bceec9 100644 (file)
@@ -42,8 +42,8 @@
 +{
 +}
 +static inline ssize_t __blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode,
-+      struct block_device *bdev, const struct iovec *iov, loff_t offset,
-+      unsigned long nr_segs, get_block_t get_block, dio_iodone_t end_io,
++      struct block_device *bdev, struct iov_iter *iter, loff_t offset,
++      get_block_t get_block, dio_iodone_t end_io,
 +      dio_submit_t submit_io, int flags)
 +{
 +      return -EOPNOTSUPP;
index e67cb04..cc512f8 100644 (file)
@@ -40,7 +40,7 @@
 + */
 +void random_input_words(__u32 *buf, size_t wordcount, int ent_count)
 +{
-+      mix_pool_bytes(&input_pool, buf, wordcount*4, NULL);
++      mix_pool_bytes(&input_pool, buf, wordcount*4);
 +
 +      credit_entropy_bits(&input_pool, ent_count);
 +
@@ -50,7 +50,7 @@
 +       * Wake up waiting processes if we have enough
 +       * entropy.
 +       */
-+      if (input_pool.entropy_count >= random_read_wakeup_thresh)
++      if (input_pool.entropy_count >= random_read_wakeup_bits)
 +              wake_up_interruptible(&random_read_wait);
 +}
 +EXPORT_SYMBOL(random_input_words);
 +      int count;
 +
 +      wait_event_interruptible(random_write_wait, 
-+                       input_pool.entropy_count < random_write_wakeup_thresh);
++                       input_pool.entropy_count < random_write_wakeup_bits);
 +
-+      count = random_write_wakeup_thresh - input_pool.entropy_count;
++      count = random_write_wakeup_bits - input_pool.entropy_count;
 +
 +        /* likely we got woken up due to a signal */
-+      if (count <= 0) count = random_read_wakeup_thresh
++      if (count <= 0) count = random_read_wakeup_bits
 +
 +      pr_notice("requesting %d bits from input_wait()er %d<%d\n",
 +                count,
-+                input_pool.entropy_count, random_write_wakeup_thresh);
++                input_pool.entropy_count, random_write_wakeup_bits);
 +
 +      return count;
 +}
index 0b99a33..d8dc186 100644 (file)
   * zap_page_range_single - remove user pages in a given range
 --- a/mm/vmalloc.c
 +++ b/mm/vmalloc.c
-@@ -1231,6 +1231,7 @@ int map_kernel_range_noflush(unsigned lo
- {
-       return vmap_page_range_noflush(addr, addr + size, prot, pages);
- }
-+EXPORT_SYMBOL_GPL(unmap_kernel_range);
- /**
-  * unmap_kernel_range_noflush - unmap kernel VM area
-@@ -1372,6 +1373,7 @@ struct vm_struct *get_vm_area(unsigned l
+@@ -1372,6 +1372,7 @@ struct vm_struct *get_vm_area(unsigned l
                                  NUMA_NO_NODE, GFP_KERNEL,
                                  __builtin_return_address(0));
  }