generic: 6.6: manually refresh hack patches
Refresh hack patches for kernel 6.6. Signed-off-by: Weijie Gao <hackpascal@gmail.com>
This commit is contained in:
parent
5b6bca812d
commit
d9bc5c93de
19 changed files with 247 additions and 286 deletions
|
@ -102,7 +102,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
endif # MODULES
|
endif # MODULES
|
||||||
--- a/kernel/module/main.c
|
--- a/kernel/module/main.c
|
||||||
+++ b/kernel/module/main.c
|
+++ b/kernel/module/main.c
|
||||||
@@ -988,6 +988,7 @@ size_t modinfo_attrs_count = ARRAY_SIZE(
|
@@ -997,6 +997,7 @@ size_t modinfo_attrs_count = ARRAY_SIZE(
|
||||||
|
|
||||||
static const char vermagic[] = VERMAGIC_STRING;
|
static const char vermagic[] = VERMAGIC_STRING;
|
||||||
|
|
||||||
|
@ -110,15 +110,15 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
int try_to_force_load(struct module *mod, const char *reason)
|
int try_to_force_load(struct module *mod, const char *reason)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_MODULE_FORCE_LOAD
|
#ifdef CONFIG_MODULE_FORCE_LOAD
|
||||||
@@ -999,6 +1000,7 @@ int try_to_force_load(struct module *mod
|
@@ -1008,6 +1009,7 @@ int try_to_force_load(struct module *mod
|
||||||
return -ENOEXEC;
|
return -ENOEXEC;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
+#endif
|
+#endif
|
||||||
|
|
||||||
static char *get_modinfo(const struct load_info *info, const char *tag);
|
/* Parse tag=value strings from .modinfo section */
|
||||||
static char *get_next_modinfo(const struct load_info *info, const char *tag,
|
char *module_next_tag_pair(char *string, unsigned long *secsize)
|
||||||
@@ -1958,9 +1960,11 @@ static int setup_load_info(struct load_i
|
@@ -2075,9 +2077,11 @@ static void module_augment_kernel_taints
|
||||||
|
|
||||||
static int check_modinfo(struct module *mod, struct load_info *info, int flags)
|
static int check_modinfo(struct module *mod, struct load_info *info, int flags)
|
||||||
{
|
{
|
||||||
|
@ -131,14 +131,14 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
if (flags & MODULE_INIT_IGNORE_VERMAGIC)
|
if (flags & MODULE_INIT_IGNORE_VERMAGIC)
|
||||||
modmagic = NULL;
|
modmagic = NULL;
|
||||||
|
|
||||||
@@ -1981,6 +1985,7 @@ static int check_modinfo(struct module *
|
@@ -2091,6 +2095,7 @@ static int check_modinfo(struct module *
|
||||||
mod->name);
|
info->name, modmagic, vermagic);
|
||||||
add_taint_module(mod, TAINT_OOT_MODULE, LOCKDEP_STILL_OK);
|
return -ENOEXEC;
|
||||||
}
|
}
|
||||||
+#endif
|
+#endif
|
||||||
|
|
||||||
check_modinfo_retpoline(mod, info);
|
err = check_modinfo_livepatch(mod, info);
|
||||||
|
if (err)
|
||||||
--- a/scripts/mod/modpost.c
|
--- a/scripts/mod/modpost.c
|
||||||
+++ b/scripts/mod/modpost.c
|
+++ b/scripts/mod/modpost.c
|
||||||
@@ -1785,7 +1785,9 @@ static void read_symbols(const char *mod
|
@@ -1785,7 +1785,9 @@ static void read_symbols(const char *mod
|
||||||
|
@ -150,8 +150,8 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
+#endif
|
+#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
for (sym = info.symtab_start; sym < info.symtab_stop; sym++) {
|
check_sec_ref(mod, &info);
|
||||||
@@ -1948,8 +1950,10 @@ static void add_header(struct buffer *b,
|
@@ -1944,8 +1946,10 @@ static void add_header(struct buffer *b,
|
||||||
buf_printf(b, "BUILD_SALT;\n");
|
buf_printf(b, "BUILD_SALT;\n");
|
||||||
buf_printf(b, "BUILD_LTO_INFO;\n");
|
buf_printf(b, "BUILD_LTO_INFO;\n");
|
||||||
buf_printf(b, "\n");
|
buf_printf(b, "\n");
|
||||||
|
|
|
@ -11,12 +11,12 @@ Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
|
||||||
--- a/scripts/mod/file2alias.c
|
--- a/scripts/mod/file2alias.c
|
||||||
+++ b/scripts/mod/file2alias.c
|
+++ b/scripts/mod/file2alias.c
|
||||||
@@ -38,6 +38,9 @@ typedef struct {
|
@@ -38,6 +38,9 @@ typedef struct {
|
||||||
__u8 b[16];
|
typedef uint16_t __u16;
|
||||||
} guid_t;
|
typedef unsigned char __u8;
|
||||||
|
|
||||||
+#ifdef __APPLE__
|
+#ifdef __APPLE__
|
||||||
+#define uuid_t compat_uuid_t
|
+#define uuid_t compat_uuid_t
|
||||||
+#endif
|
+#endif
|
||||||
/* backwards compatibility, don't use in new code */
|
/* UUID types for backward compatibility, don't use in new code */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
__u8 b[16];
|
__u8 b[16];
|
||||||
|
|
|
@ -74,8 +74,8 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
struct page;
|
struct page;
|
||||||
struct kmem_cache;
|
struct kmem_cache;
|
||||||
@@ -51,7 +55,9 @@ typedef __s8 s8;
|
@@ -51,7 +55,9 @@ typedef __s8 s8;
|
||||||
#define __force
|
|
||||||
#define __user
|
#define __user
|
||||||
|
#endif
|
||||||
#define __must_check
|
#define __must_check
|
||||||
+#ifndef __cold
|
+#ifndef __cold
|
||||||
#define __cold
|
#define __cold
|
||||||
|
@ -108,7 +108,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
--- a/tools/arch/x86/include/asm/orc_types.h
|
--- a/tools/arch/x86/include/asm/orc_types.h
|
||||||
+++ b/tools/arch/x86/include/asm/orc_types.h
|
+++ b/tools/arch/x86/include/asm/orc_types.h
|
||||||
@@ -40,7 +40,6 @@
|
@@ -40,7 +40,6 @@
|
||||||
#define ORC_REG_MAX 15
|
#define ORC_TYPE_REGS_PARTIAL 4
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
-#include <asm/byteorder.h>
|
-#include <asm/byteorder.h>
|
||||||
|
@ -123,13 +123,13 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
+#if __BYTE_ORDER == __LITTLE_ENDIAN
|
+#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||||
unsigned sp_reg:4;
|
unsigned sp_reg:4;
|
||||||
unsigned bp_reg:4;
|
unsigned bp_reg:4;
|
||||||
unsigned type:2;
|
unsigned type:3;
|
||||||
unsigned end:1;
|
unsigned signal:1;
|
||||||
-#elif defined(__BIG_ENDIAN_BITFIELD)
|
-#elif defined(__BIG_ENDIAN_BITFIELD)
|
||||||
+#elif __BYTE_ORDER == __BIG_ENDIAN
|
+#elif __BYTE_ORDER == __BIG_ENDIAN
|
||||||
unsigned bp_reg:4;
|
unsigned bp_reg:4;
|
||||||
unsigned sp_reg:4;
|
unsigned sp_reg:4;
|
||||||
unsigned unused:5;
|
unsigned unused:4;
|
||||||
--- a/tools/arch/x86/lib/insn.c
|
--- a/tools/arch/x86/lib/insn.c
|
||||||
+++ b/tools/arch/x86/lib/insn.c
|
+++ b/tools/arch/x86/lib/insn.c
|
||||||
@@ -15,7 +15,11 @@
|
@@ -15,7 +15,11 @@
|
||||||
|
@ -199,15 +199,15 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
unsigned long __rb_parent_color;
|
unsigned long __rb_parent_color;
|
||||||
--- a/tools/objtool/Makefile
|
--- a/tools/objtool/Makefile
|
||||||
+++ b/tools/objtool/Makefile
|
+++ b/tools/objtool/Makefile
|
||||||
@@ -4,7 +4,7 @@ include ../scripts/Makefile.arch
|
@@ -40,7 +40,7 @@ include ../scripts/Makefile.arch
|
||||||
|
OBJTOOL_CFLAGS += $(if $(elfshdr),,-DLIBELF_USE_DEPRECATED)
|
||||||
|
|
||||||
# always use the host compiler
|
# Always want host compilation.
|
||||||
AR = $(HOSTAR)
|
-HOST_OVERRIDES := CC="$(HOSTCC)" LD="$(HOSTLD)" AR="$(HOSTAR)"
|
||||||
-CC = $(HOSTCC)
|
+HOST_OVERRIDES := CC="$(HOSTCC) $(HOST_EXTRACFLAGS)" LD="$(HOSTLD)" AR="$(HOSTAR)"
|
||||||
+CC = $(HOSTCC) $(HOST_EXTRACFLAGS)
|
|
||||||
LD = $(HOSTLD)
|
|
||||||
|
|
||||||
ifeq ($(srctree),)
|
AWK = awk
|
||||||
|
MKDIR = mkdir
|
||||||
@@ -43,6 +43,7 @@ BUILD_ORC := n
|
@@ -43,6 +43,7 @@ BUILD_ORC := n
|
||||||
|
|
||||||
ifeq ($(SRCARCH),x86)
|
ifeq ($(SRCARCH),x86)
|
||||||
|
@ -252,8 +252,8 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
}
|
}
|
||||||
+#endif
|
+#endif
|
||||||
|
|
||||||
#define NEGATIVE_RELOC ((void *)-1L)
|
static struct reloc *insn_reloc(struct objtool_file *file, struct instruction *insn)
|
||||||
|
{
|
||||||
--- a/tools/objtool/include/objtool/objtool.h
|
--- a/tools/objtool/include/objtool/objtool.h
|
||||||
+++ b/tools/objtool/include/objtool/objtool.h
|
+++ b/tools/objtool/include/objtool/objtool.h
|
||||||
@@ -12,7 +12,9 @@
|
@@ -12,7 +12,9 @@
|
||||||
|
@ -268,10 +268,10 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
bool clean;
|
bool clean;
|
||||||
--- a/tools/objtool/orc_dump.c
|
--- a/tools/objtool/orc_dump.c
|
||||||
+++ b/tools/objtool/orc_dump.c
|
+++ b/tools/objtool/orc_dump.c
|
||||||
@@ -5,10 +5,10 @@
|
@@ -4,10 +4,10 @@
|
||||||
|
*/
|
||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <linux/objtool.h>
|
|
||||||
-#include <asm/orc_types.h>
|
-#include <asm/orc_types.h>
|
||||||
#include <objtool/objtool.h>
|
#include <objtool/objtool.h>
|
||||||
#include <objtool/warn.h>
|
#include <objtool/warn.h>
|
||||||
|
@ -285,7 +285,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
@@ -7,11 +7,11 @@
|
@@ -7,11 +7,11 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include <linux/objtool.h>
|
#include <linux/objtool_types.h>
|
||||||
-#include <asm/orc_types.h>
|
-#include <asm/orc_types.h>
|
||||||
|
|
||||||
#include <objtool/check.h>
|
#include <objtool/check.h>
|
||||||
|
|
|
@ -13,7 +13,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
--- a/arch/arm/Kconfig
|
--- a/arch/arm/Kconfig
|
||||||
+++ b/arch/arm/Kconfig
|
+++ b/arch/arm/Kconfig
|
||||||
@@ -124,6 +124,7 @@ config ARM
|
@@ -124,6 +124,7 @@ config ARM
|
||||||
select HAVE_VIRT_CPU_ACCOUNTING_GEN
|
select HOTPLUG_CORE_SYNC_DEAD if HOTPLUG_CPU
|
||||||
select IRQ_FORCED_THREADING
|
select IRQ_FORCED_THREADING
|
||||||
select LOCK_MM_AND_FIND_VMA
|
select LOCK_MM_AND_FIND_VMA
|
||||||
+ select HAVE_LD_DEAD_CODE_DATA_ELIMINATION
|
+ select HAVE_LD_DEAD_CODE_DATA_ELIMINATION
|
||||||
|
|
|
@ -27,8 +27,8 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
+#define SYMTAB_DISCARD_GPL
|
+#define SYMTAB_DISCARD_GPL
|
||||||
+#endif
|
+#endif
|
||||||
+
|
+
|
||||||
/* Align . to a 8 byte boundary equals to maximum function alignment. */
|
/* Align . function alignment. */
|
||||||
#define ALIGN_FUNCTION() . = ALIGN(8)
|
#define ALIGN_FUNCTION() . = ALIGN(CONFIG_FUNCTION_ALIGNMENT)
|
||||||
|
|
||||||
@@ -511,14 +521,14 @@
|
@@ -511,14 +521,14 @@
|
||||||
/* Kernel symbol table: Normal symbols */ \
|
/* Kernel symbol table: Normal symbols */ \
|
||||||
|
@ -64,12 +64,12 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
+ SYMTAB_DISCARD_GPL \
|
+ SYMTAB_DISCARD_GPL \
|
||||||
*(.discard) \
|
*(.discard) \
|
||||||
*(.discard.*) \
|
*(.discard.*) \
|
||||||
*(.modinfo) \
|
*(.export_symbol) \
|
||||||
--- a/include/linux/export.h
|
--- a/include/linux/export-internal.h
|
||||||
+++ b/include/linux/export.h
|
+++ b/include/linux/export-internal.h
|
||||||
@@ -72,6 +72,12 @@ struct kernel_symbol {
|
@@ -23,6 +23,12 @@
|
||||||
|
#define __KSYM_REF(sym) ".long " #sym
|
||||||
#else
|
#endif
|
||||||
|
|
||||||
+#ifdef MODULE
|
+#ifdef MODULE
|
||||||
+#define __EXPORT_SUFFIX(sym)
|
+#define __EXPORT_SUFFIX(sym)
|
||||||
|
@ -80,39 +80,15 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
/*
|
/*
|
||||||
* For every exported symbol, do the following:
|
* For every exported symbol, do the following:
|
||||||
*
|
*
|
||||||
@@ -87,7 +93,7 @@ struct kernel_symbol {
|
@@ -35,7 +41,7 @@
|
||||||
extern typeof(sym) sym; \
|
* former apparently works on all arches according to the binutils source.
|
||||||
extern const char __kstrtab_##sym[]; \
|
*/
|
||||||
extern const char __kstrtabns_##sym[]; \
|
#define __KSYMTAB(name, sym, sec, ns) \
|
||||||
- asm(" .section \"__ksymtab_strings\",\"aMS\",%progbits,1 \n" \
|
- asm(" .section \"__ksymtab_strings\",\"aMS\",%progbits,1" "\n" \
|
||||||
+ asm(" .section \"__ksymtab_strings" __EXPORT_SUFFIX(sym) "\",\"aMS\",%progbits,1 \n" \
|
+ asm(" .section \"__ksymtab_strings" __EXPORT_SUFFIX(sym) "\",\"aMS\",%progbits,1" "\n" \
|
||||||
"__kstrtab_" #sym ": \n" \
|
"__kstrtab_" #name ":" "\n" \
|
||||||
" .asciz \"" #sym "\" \n" \
|
" .asciz \"" #name "\"" "\n" \
|
||||||
"__kstrtabns_" #sym ": \n" \
|
"__kstrtabns_" #name ":" "\n" \
|
||||||
--- a/include/asm-generic/export.h
|
|
||||||
+++ b/include/asm-generic/export.h
|
|
||||||
@@ -31,6 +31,12 @@
|
|
||||||
#endif
|
|
||||||
.endm
|
|
||||||
|
|
||||||
+#ifdef MODULE
|
|
||||||
+#define __EXPORT_SUFFIX(name)
|
|
||||||
+#else
|
|
||||||
+#define __EXPORT_SUFFIX(name) + #name
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
/*
|
|
||||||
* note on .section use: we specify progbits since usage of the "M" (SHF_MERGE)
|
|
||||||
* section flag requires it. Use '%progbits' instead of '@progbits' since the
|
|
||||||
@@ -44,7 +50,7 @@
|
|
||||||
__ksymtab_\name:
|
|
||||||
__put \val, __kstrtab_\name
|
|
||||||
.previous
|
|
||||||
- .section __ksymtab_strings,"aMS",%progbits,1
|
|
||||||
+ .section __ksymtab_strings __EXPORT_SUFFIX(name),"aMS",%progbits,1
|
|
||||||
__kstrtab_\name:
|
|
||||||
.asciz "\name"
|
|
||||||
.previous
|
|
||||||
--- a/scripts/Makefile.build
|
--- a/scripts/Makefile.build
|
||||||
+++ b/scripts/Makefile.build
|
+++ b/scripts/Makefile.build
|
||||||
@@ -388,7 +388,7 @@ targets += $(real-dtb-y) $(lib-y) $(alwa
|
@@ -388,7 +388,7 @@ targets += $(real-dtb-y) $(lib-y) $(alwa
|
||||||
|
|
|
@ -35,7 +35,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
||||||
select CRYPTO_ALGAPI
|
select CRYPTO_ALGAPI
|
||||||
|
|
||||||
@@ -75,7 +75,7 @@ config CRYPTO_AEAD2
|
@@ -75,7 +75,7 @@ config CRYPTO_AEAD2
|
||||||
select CRYPTO_RNG2
|
select CRYPTO_ALGAPI2
|
||||||
|
|
||||||
config CRYPTO_SKCIPHER
|
config CRYPTO_SKCIPHER
|
||||||
- tristate
|
- tristate
|
||||||
|
@ -44,7 +44,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
||||||
select CRYPTO_ALGAPI
|
select CRYPTO_ALGAPI
|
||||||
|
|
||||||
@@ -85,7 +85,7 @@ config CRYPTO_SKCIPHER2
|
@@ -85,7 +85,7 @@ config CRYPTO_SKCIPHER2
|
||||||
select CRYPTO_RNG2
|
select CRYPTO_ALGAPI2
|
||||||
|
|
||||||
config CRYPTO_HASH
|
config CRYPTO_HASH
|
||||||
- tristate
|
- tristate
|
||||||
|
@ -136,7 +136,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
||||||
config SND_SEQ_DEVICE
|
config SND_SEQ_DEVICE
|
||||||
tristate
|
tristate
|
||||||
@@ -27,7 +27,7 @@ config SND_RAWMIDI
|
@@ -27,7 +27,7 @@ config SND_RAWMIDI
|
||||||
select SND_SEQ_DEVICE if SND_SEQUENCER != n
|
The device contains 16 substreams corresponding to UMP groups.
|
||||||
|
|
||||||
config SND_COMPRESS_OFFLOAD
|
config SND_COMPRESS_OFFLOAD
|
||||||
- tristate
|
- tristate
|
||||||
|
|
|
@ -14,20 +14,27 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
|
|
||||||
--- a/drivers/base/regmap/Kconfig
|
--- a/drivers/base/regmap/Kconfig
|
||||||
+++ b/drivers/base/regmap/Kconfig
|
+++ b/drivers/base/regmap/Kconfig
|
||||||
@@ -4,10 +4,9 @@
|
@@ -4,8 +4,7 @@
|
||||||
# subsystems should select the appropriate symbols.
|
# subsystems should select the appropriate symbols.
|
||||||
|
|
||||||
config REGMAP
|
config REGMAP
|
||||||
- default y if (REGMAP_I2C || REGMAP_SPI || REGMAP_SPMI || REGMAP_W1 || REGMAP_AC97 || REGMAP_MMIO || REGMAP_IRQ || REGMAP_SOUNDWIRE || REGMAP_SOUNDWIRE_MBQ || REGMAP_SCCB || REGMAP_I3C || REGMAP_SPI_AVMM || REGMAP_MDIO)
|
- bool
|
||||||
|
- default y if (REGMAP_I2C || REGMAP_SPI || REGMAP_SPMI || REGMAP_W1 || REGMAP_AC97 || REGMAP_MMIO || REGMAP_IRQ || REGMAP_SOUNDWIRE || REGMAP_SOUNDWIRE_MBQ || REGMAP_SCCB || REGMAP_I3C || REGMAP_SPI_AVMM || REGMAP_MDIO || REGMAP_FSI)
|
||||||
|
+ tristate
|
||||||
select IRQ_DOMAIN if REGMAP_IRQ
|
select IRQ_DOMAIN if REGMAP_IRQ
|
||||||
select MDIO_BUS if REGMAP_MDIO
|
select MDIO_BUS if REGMAP_MDIO
|
||||||
- bool
|
help
|
||||||
+ tristate
|
@@ -19,7 +18,7 @@ config REGMAP
|
||||||
|
|
||||||
config REGCACHE_COMPRESSED
|
config REGMAP_KUNIT
|
||||||
select LZO_COMPRESS
|
tristate "KUnit tests for regmap"
|
||||||
@@ -15,53 +14,67 @@ config REGCACHE_COMPRESSED
|
- depends on KUNIT && REGMAP
|
||||||
bool
|
+ depends on KUNIT
|
||||||
|
default KUNIT_ALL_TESTS
|
||||||
|
select REGMAP_RAM
|
||||||
|
|
||||||
|
@@ -34,60 +33,76 @@ config REGMAP_BUILD
|
||||||
|
normally enabled.
|
||||||
|
|
||||||
config REGMAP_AC97
|
config REGMAP_AC97
|
||||||
+ select REGMAP
|
+ select REGMAP
|
||||||
|
@ -70,6 +77,10 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
+ select REGMAP
|
+ select REGMAP
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
config REGMAP_RAM
|
||||||
|
+ select REGMAP
|
||||||
|
tristate
|
||||||
|
|
||||||
config REGMAP_SOUNDWIRE
|
config REGMAP_SOUNDWIRE
|
||||||
+ select REGMAP
|
+ select REGMAP
|
||||||
tristate
|
tristate
|
||||||
|
@ -94,27 +105,28 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
+ select REGMAP
|
+ select REGMAP
|
||||||
tristate
|
tristate
|
||||||
depends on SPI
|
depends on SPI
|
||||||
|
|
||||||
|
config REGMAP_FSI
|
||||||
|
+ select REGMAP
|
||||||
|
tristate
|
||||||
|
depends on FSI
|
||||||
--- a/drivers/base/regmap/Makefile
|
--- a/drivers/base/regmap/Makefile
|
||||||
+++ b/drivers/base/regmap/Makefile
|
+++ b/drivers/base/regmap/Makefile
|
||||||
@@ -2,10 +2,14 @@
|
@@ -2,9 +2,11 @@
|
||||||
# For include/trace/define_trace.h to include trace.h
|
# For include/trace/define_trace.h to include trace.h
|
||||||
CFLAGS_regmap.o := -I$(src)
|
CFLAGS_regmap.o := -I$(src)
|
||||||
|
|
||||||
-obj-$(CONFIG_REGMAP) += regmap.o regcache.o
|
-obj-$(CONFIG_REGMAP) += regmap.o regcache.o
|
||||||
-obj-$(CONFIG_REGMAP) += regcache-rbtree.o regcache-flat.o
|
-obj-$(CONFIG_REGMAP) += regcache-rbtree.o regcache-flat.o regcache-maple.o
|
||||||
-obj-$(CONFIG_REGCACHE_COMPRESSED) += regcache-lzo.o
|
|
||||||
-obj-$(CONFIG_DEBUG_FS) += regmap-debugfs.o
|
-obj-$(CONFIG_DEBUG_FS) += regmap-debugfs.o
|
||||||
+regmap-core-objs = regmap.o regcache.o regcache-rbtree.o regcache-flat.o
|
+regmap-core-objs = regmap.o regcache.o regcache-rbtree.o regcache-flat.o regcache-maple.o
|
||||||
+ifdef CONFIG_DEBUG_FS
|
+ifdef CONFIG_DEBUG_FS
|
||||||
+regmap-core-objs += regmap-debugfs.o
|
+regmap-core-objs += regmap-debugfs.o
|
||||||
+endif
|
+endif
|
||||||
+ifdef CONFIG_REGCACHE_COMPRESSED
|
|
||||||
+regmap-core-objs += regcache-lzo.o
|
|
||||||
+endif
|
|
||||||
+obj-$(CONFIG_REGMAP) += regmap-core.o
|
+obj-$(CONFIG_REGMAP) += regmap-core.o
|
||||||
|
obj-$(CONFIG_REGMAP_KUNIT) += regmap-kunit.o
|
||||||
obj-$(CONFIG_REGMAP_AC97) += regmap-ac97.o
|
obj-$(CONFIG_REGMAP_AC97) += regmap-ac97.o
|
||||||
obj-$(CONFIG_REGMAP_I2C) += regmap-i2c.o
|
obj-$(CONFIG_REGMAP_I2C) += regmap-i2c.o
|
||||||
obj-$(CONFIG_REGMAP_SLIMBUS) += regmap-slimbus.o
|
|
||||||
--- a/drivers/base/regmap/regmap.c
|
--- a/drivers/base/regmap/regmap.c
|
||||||
+++ b/drivers/base/regmap/regmap.c
|
+++ b/drivers/base/regmap/regmap.c
|
||||||
@@ -9,6 +9,7 @@
|
@@ -9,6 +9,7 @@
|
||||||
|
|
|
@ -14,39 +14,41 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
|
|
||||||
--- a/crypto/Kconfig
|
--- a/crypto/Kconfig
|
||||||
+++ b/crypto/Kconfig
|
+++ b/crypto/Kconfig
|
||||||
@@ -142,13 +142,13 @@ config CRYPTO_MANAGER
|
@@ -148,15 +148,15 @@ config CRYPTO_MANAGER
|
||||||
cbc(aes).
|
cbc(aes).
|
||||||
|
|
||||||
config CRYPTO_MANAGER2
|
config CRYPTO_MANAGER2
|
||||||
- def_tristate CRYPTO_MANAGER || (CRYPTO_MANAGER!=n && CRYPTO_ALGAPI=y)
|
- def_tristate CRYPTO_MANAGER || (CRYPTO_MANAGER!=n && CRYPTO_ALGAPI=y)
|
||||||
- select CRYPTO_AEAD2
|
|
||||||
- select CRYPTO_HASH2
|
|
||||||
- select CRYPTO_SKCIPHER2
|
|
||||||
- select CRYPTO_AKCIPHER2
|
|
||||||
- select CRYPTO_KPP2
|
|
||||||
- select CRYPTO_ACOMP2
|
- select CRYPTO_ACOMP2
|
||||||
|
- select CRYPTO_AEAD2
|
||||||
|
- select CRYPTO_AKCIPHER2
|
||||||
|
- select CRYPTO_SIG2
|
||||||
|
- select CRYPTO_HASH2
|
||||||
|
- select CRYPTO_KPP2
|
||||||
|
- select CRYPTO_RNG2
|
||||||
|
- select CRYPTO_SKCIPHER2
|
||||||
+ def_tristate CRYPTO_MANAGER || (CRYPTO_MANAGER!=n && CRYPTO_ALGAPI=y && !CRYPTO_MANAGER_DISABLE_TESTS)
|
+ def_tristate CRYPTO_MANAGER || (CRYPTO_MANAGER!=n && CRYPTO_ALGAPI=y && !CRYPTO_MANAGER_DISABLE_TESTS)
|
||||||
+ select CRYPTO_AEAD2 if !CRYPTO_MANAGER_DISABLE_TESTS
|
|
||||||
+ select CRYPTO_HASH2 if !CRYPTO_MANAGER_DISABLE_TESTS
|
|
||||||
+ select CRYPTO_SKCIPHER2 if !CRYPTO_MANAGER_DISABLE_TESTS
|
|
||||||
+ select CRYPTO_AKCIPHER2 if !CRYPTO_MANAGER_DISABLE_TESTS
|
|
||||||
+ select CRYPTO_KPP2 if !CRYPTO_MANAGER_DISABLE_TESTS
|
|
||||||
+ select CRYPTO_ACOMP2 if !CRYPTO_MANAGER_DISABLE_TESTS
|
+ select CRYPTO_ACOMP2 if !CRYPTO_MANAGER_DISABLE_TESTS
|
||||||
|
+ select CRYPTO_AEAD2 if !CRYPTO_MANAGER_DISABLE_TESTS
|
||||||
|
+ select CRYPTO_AKCIPHER2 if !CRYPTO_MANAGER_DISABLE_TESTS
|
||||||
|
+ select CRYPTO_SIG2 if !CRYPTO_MANAGER_DISABLE_TESTS
|
||||||
|
+ select CRYPTO_HASH2 if !CRYPTO_MANAGER_DISABLE_TESTS
|
||||||
|
+ select CRYPTO_KPP2 if !CRYPTO_MANAGER_DISABLE_TESTS
|
||||||
|
+ select CRYPTO_RNG2 if !CRYPTO_MANAGER_DISABLE_TESTS
|
||||||
|
+ select CRYPTO_SKCIPHER2 if !CRYPTO_MANAGER_DISABLE_TESTS
|
||||||
|
|
||||||
config CRYPTO_USER
|
config CRYPTO_USER
|
||||||
tristate "Userspace cryptographic algorithm configuration"
|
tristate "Userspace cryptographic algorithm configuration"
|
||||||
--- a/crypto/algboss.c
|
--- a/crypto/algboss.c
|
||||||
+++ b/crypto/algboss.c
|
+++ b/crypto/algboss.c
|
||||||
@@ -211,8 +211,12 @@ static int cryptomgr_schedule_test(struc
|
@@ -204,6 +204,10 @@ static int cryptomgr_schedule_test(struc
|
||||||
type = alg->cra_flags;
|
memcpy(param->alg, alg->cra_name, sizeof(param->alg));
|
||||||
|
param->type = alg->cra_flags;
|
||||||
|
|
||||||
/* Do not test internal algorithms. */
|
|
||||||
+#ifdef CONFIG_CRYPTO_MANAGER_DISABLE_TESTS
|
+#ifdef CONFIG_CRYPTO_MANAGER_DISABLE_TESTS
|
||||||
+ type |= CRYPTO_ALG_TESTED;
|
+ param->type |= CRYPTO_ALG_TESTED;
|
||||||
+#else
|
|
||||||
if (type & CRYPTO_ALG_INTERNAL)
|
|
||||||
type |= CRYPTO_ALG_TESTED;
|
|
||||||
+#endif
|
+#endif
|
||||||
|
+
|
||||||
param->type = type;
|
thread = kthread_run(cryptomgr_test, param, "cryptomgr_test");
|
||||||
|
if (IS_ERR(thread))
|
||||||
|
goto err_free_param;
|
||||||
|
|
|
@ -14,11 +14,11 @@ from backports.
|
||||||
--- a/lib/crypto/Kconfig
|
--- a/lib/crypto/Kconfig
|
||||||
+++ b/lib/crypto/Kconfig
|
+++ b/lib/crypto/Kconfig
|
||||||
@@ -9,7 +9,7 @@ config CRYPTO_LIB_AES
|
@@ -9,7 +9,7 @@ config CRYPTO_LIB_AES
|
||||||
tristate
|
select CRYPTO_LIB_UTILS
|
||||||
|
|
||||||
config CRYPTO_LIB_ARC4
|
config CRYPTO_LIB_ARC4
|
||||||
- tristate
|
- tristate
|
||||||
+ tristate "ARC4 cipher library"
|
+ tristate "ARC4 cipher library"
|
||||||
|
|
||||||
config CRYPTO_ARCH_HAVE_LIB_BLAKE2S
|
config CRYPTO_LIB_GF128MUL
|
||||||
bool
|
tristate
|
||||||
|
|
|
@ -16,8 +16,8 @@ Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||||
|
|
||||||
mutex_unlock(&mtd_table_mutex);
|
mutex_unlock(&mtd_table_mutex);
|
||||||
|
|
||||||
- if (of_find_property(mtd_get_of_node(mtd), "linux,rootfs", NULL)) {
|
- if (of_property_read_bool(mtd_get_of_node(mtd), "linux,rootfs")) {
|
||||||
+ if (of_find_property(mtd_get_of_node(mtd), "linux,rootfs", NULL) ||
|
+ if (of_property_read_bool(mtd_get_of_node(mtd), "linux,rootfs") ||
|
||||||
+ (IS_ENABLED(CONFIG_MTD_ROOTFS_ROOT_DEV) && !strcmp(mtd->name, "rootfs") && ROOT_DEV == 0)) {
|
+ (IS_ENABLED(CONFIG_MTD_ROOTFS_ROOT_DEV) && !strcmp(mtd->name, "rootfs") && ROOT_DEV == 0)) {
|
||||||
if (IS_BUILTIN(CONFIG_MTD)) {
|
if (IS_BUILTIN(CONFIG_MTD)) {
|
||||||
pr_info("mtd: setting mtd%d (%s) as root device\n", mtd->index, mtd->name);
|
pr_info("mtd: setting mtd%d (%s) as root device\n", mtd->index, mtd->name);
|
||||||
|
|
|
@ -19,11 +19,11 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
|
|
||||||
--- a/include/linux/netdevice.h
|
--- a/include/linux/netdevice.h
|
||||||
+++ b/include/linux/netdevice.h
|
+++ b/include/linux/netdevice.h
|
||||||
@@ -1730,6 +1730,7 @@ enum netdev_priv_flags {
|
@@ -1707,6 +1707,7 @@ enum netdev_priv_flags {
|
||||||
/* was IFF_LIVE_RENAME_OK */
|
|
||||||
IFF_TX_SKB_NO_LINEAR = BIT_ULL(31),
|
IFF_TX_SKB_NO_LINEAR = BIT_ULL(31),
|
||||||
IFF_CHANGE_PROTO_DOWN = BIT_ULL(32),
|
IFF_CHANGE_PROTO_DOWN = BIT_ULL(32),
|
||||||
+ IFF_NO_IP_ALIGN = BIT_ULL(33),
|
IFF_SEE_ALL_HWTSTAMP_REQUESTS = BIT_ULL(33),
|
||||||
|
+ IFF_NO_IP_ALIGN = BIT_ULL(34),
|
||||||
};
|
};
|
||||||
|
|
||||||
#define IFF_802_1Q_VLAN IFF_802_1Q_VLAN
|
#define IFF_802_1Q_VLAN IFF_802_1Q_VLAN
|
||||||
|
|
|
@ -15,16 +15,7 @@ Signed-off-by: Alex Marginean <alexandru.marginean@nxp.com>
|
||||||
|
|
||||||
--- a/drivers/net/phy/aquantia/aquantia_main.c
|
--- a/drivers/net/phy/aquantia/aquantia_main.c
|
||||||
+++ b/drivers/net/phy/aquantia/aquantia_main.c
|
+++ b/drivers/net/phy/aquantia/aquantia_main.c
|
||||||
@@ -27,6 +27,8 @@
|
@@ -101,6 +101,29 @@
|
||||||
#define PHY_ID_AQR113 0x31c31c40
|
|
||||||
#define PHY_ID_AQR113C 0x31c31c12
|
|
||||||
#define PHY_ID_AQR813 0x31c31cb2
|
|
||||||
+#define PHY_ID_AQR112 0x03a1b662
|
|
||||||
+#define PHY_ID_AQR412 0x03a1b712
|
|
||||||
|
|
||||||
#define MDIO_PHYXS_VEND_IF_STATUS 0xe812
|
|
||||||
#define MDIO_PHYXS_VEND_IF_STATUS_TYPE_MASK GENMASK(7, 3)
|
|
||||||
@@ -99,6 +101,29 @@
|
|
||||||
#define AQR107_OP_IN_PROG_SLEEP 1000
|
#define AQR107_OP_IN_PROG_SLEEP 1000
|
||||||
#define AQR107_OP_IN_PROG_TIMEOUT 100000
|
#define AQR107_OP_IN_PROG_TIMEOUT 100000
|
||||||
|
|
||||||
|
@ -54,7 +45,7 @@ Signed-off-by: Alex Marginean <alexandru.marginean@nxp.com>
|
||||||
struct aqr107_hw_stat {
|
struct aqr107_hw_stat {
|
||||||
const char *name;
|
const char *name;
|
||||||
int reg;
|
int reg;
|
||||||
@@ -230,6 +255,51 @@ static int aqr_config_aneg(struct phy_de
|
@@ -232,6 +255,51 @@ static int aqr_config_aneg(struct phy_de
|
||||||
return genphy_c45_check_and_restart_aneg(phydev, changed);
|
return genphy_c45_check_and_restart_aneg(phydev, changed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -106,43 +97,21 @@ Signed-off-by: Alex Marginean <alexandru.marginean@nxp.com>
|
||||||
static int aqr_config_intr(struct phy_device *phydev)
|
static int aqr_config_intr(struct phy_device *phydev)
|
||||||
{
|
{
|
||||||
bool en = phydev->interrupts == PHY_INTERRUPT_ENABLED;
|
bool en = phydev->interrupts == PHY_INTERRUPT_ENABLED;
|
||||||
@@ -860,6 +930,30 @@ static struct phy_driver aqr_driver[] =
|
@@ -809,7 +877,7 @@ static struct phy_driver aqr_driver[] =
|
||||||
.get_stats = aqr107_get_stats,
|
PHY_ID_MATCH_MODEL(PHY_ID_AQR112),
|
||||||
.link_change_notify = aqr107_link_change_notify,
|
.name = "Aquantia AQR112",
|
||||||
},
|
.probe = aqr107_probe,
|
||||||
+{
|
- .config_aneg = aqr_config_aneg,
|
||||||
+ PHY_ID_MATCH_MODEL(PHY_ID_AQR112),
|
+ .config_aneg = aqr_config_aneg_set_prot,
|
||||||
+ .name = "Aquantia AQR112",
|
.config_intr = aqr_config_intr,
|
||||||
+ .probe = aqr107_probe,
|
.handle_interrupt = aqr_handle_interrupt,
|
||||||
+ .config_aneg = aqr_config_aneg_set_prot,
|
.get_tunable = aqr107_get_tunable,
|
||||||
+ .config_intr = aqr_config_intr,
|
@@ -827,7 +895,7 @@ static struct phy_driver aqr_driver[] =
|
||||||
+ .handle_interrupt = aqr_handle_interrupt,
|
PHY_ID_MATCH_MODEL(PHY_ID_AQR412),
|
||||||
+ .read_status = aqr107_read_status,
|
.name = "Aquantia AQR412",
|
||||||
+ .get_sset_count = aqr107_get_sset_count,
|
.probe = aqr107_probe,
|
||||||
+ .get_strings = aqr107_get_strings,
|
- .config_aneg = aqr_config_aneg,
|
||||||
+ .get_stats = aqr107_get_stats,
|
+ .config_aneg = aqr_config_aneg_set_prot,
|
||||||
+},
|
.config_intr = aqr_config_intr,
|
||||||
+{
|
.handle_interrupt = aqr_handle_interrupt,
|
||||||
+ PHY_ID_MATCH_MODEL(PHY_ID_AQR412),
|
.get_tunable = aqr107_get_tunable,
|
||||||
+ .name = "Aquantia AQR412",
|
|
||||||
+ .probe = aqr107_probe,
|
|
||||||
+ .config_aneg = aqr_config_aneg_set_prot,
|
|
||||||
+ .config_intr = aqr_config_intr,
|
|
||||||
+ .handle_interrupt = aqr_handle_interrupt,
|
|
||||||
+ .read_status = aqr107_read_status,
|
|
||||||
+ .get_sset_count = aqr107_get_sset_count,
|
|
||||||
+ .get_strings = aqr107_get_strings,
|
|
||||||
+ .get_stats = aqr107_get_stats,
|
|
||||||
+},
|
|
||||||
};
|
|
||||||
|
|
||||||
module_phy_driver(aqr_driver);
|
|
||||||
@@ -877,6 +971,8 @@ static struct mdio_device_id __maybe_unu
|
|
||||||
{ PHY_ID_MATCH_MODEL(PHY_ID_AQR113) },
|
|
||||||
{ PHY_ID_MATCH_MODEL(PHY_ID_AQR113C) },
|
|
||||||
{ PHY_ID_MATCH_MODEL(PHY_ID_AQR813) },
|
|
||||||
+ { PHY_ID_MATCH_MODEL(PHY_ID_AQR112) },
|
|
||||||
+ { PHY_ID_MATCH_MODEL(PHY_ID_AQR412) },
|
|
||||||
{ }
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
|
@ -13,17 +13,17 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||||
--- a/drivers/net/phy/aquantia/aquantia_main.c
|
--- a/drivers/net/phy/aquantia/aquantia_main.c
|
||||||
+++ b/drivers/net/phy/aquantia/aquantia_main.c
|
+++ b/drivers/net/phy/aquantia/aquantia_main.c
|
||||||
@@ -29,6 +29,8 @@
|
@@ -29,6 +29,8 @@
|
||||||
|
#define PHY_ID_AQR113 0x31c31c40
|
||||||
|
#define PHY_ID_AQR113C 0x31c31c12
|
||||||
#define PHY_ID_AQR813 0x31c31cb2
|
#define PHY_ID_AQR813 0x31c31cb2
|
||||||
#define PHY_ID_AQR112 0x03a1b662
|
|
||||||
#define PHY_ID_AQR412 0x03a1b712
|
|
||||||
+#define PHY_ID_AQR112C 0x03a1b790
|
+#define PHY_ID_AQR112C 0x03a1b790
|
||||||
+#define PHY_ID_AQR112R 0x31c31d12
|
+#define PHY_ID_AQR112R 0x31c31d12
|
||||||
|
|
||||||
#define MDIO_PHYXS_VEND_IF_STATUS 0xe812
|
#define MDIO_PHYXS_VEND_IF_STATUS 0xe812
|
||||||
#define MDIO_PHYXS_VEND_IF_STATUS_TYPE_MASK GENMASK(7, 3)
|
#define MDIO_PHYXS_VEND_IF_STATUS_TYPE_MASK GENMASK(7, 3)
|
||||||
@@ -960,6 +962,30 @@ static struct phy_driver aqr_driver[] =
|
@@ -898,6 +900,30 @@ static struct phy_driver aqr_driver[] =
|
||||||
.get_strings = aqr107_get_strings,
|
|
||||||
.get_stats = aqr107_get_stats,
|
.get_stats = aqr107_get_stats,
|
||||||
|
.link_change_notify = aqr107_link_change_notify,
|
||||||
},
|
},
|
||||||
+{
|
+{
|
||||||
+ PHY_ID_MATCH_MODEL(PHY_ID_AQR112C),
|
+ PHY_ID_MATCH_MODEL(PHY_ID_AQR112C),
|
||||||
|
@ -52,10 +52,10 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||||
};
|
};
|
||||||
|
|
||||||
module_phy_driver(aqr_driver);
|
module_phy_driver(aqr_driver);
|
||||||
@@ -979,6 +1005,8 @@ static struct mdio_device_id __maybe_unu
|
@@ -917,6 +943,8 @@ static struct mdio_device_id __maybe_unu
|
||||||
|
{ PHY_ID_MATCH_MODEL(PHY_ID_AQR113) },
|
||||||
|
{ PHY_ID_MATCH_MODEL(PHY_ID_AQR113C) },
|
||||||
{ PHY_ID_MATCH_MODEL(PHY_ID_AQR813) },
|
{ PHY_ID_MATCH_MODEL(PHY_ID_AQR813) },
|
||||||
{ PHY_ID_MATCH_MODEL(PHY_ID_AQR112) },
|
|
||||||
{ PHY_ID_MATCH_MODEL(PHY_ID_AQR412) },
|
|
||||||
+ { PHY_ID_MATCH_MODEL(PHY_ID_AQR112C) },
|
+ { PHY_ID_MATCH_MODEL(PHY_ID_AQR112C) },
|
||||||
+ { PHY_ID_MATCH_MODEL(PHY_ID_AQR112R) },
|
+ { PHY_ID_MATCH_MODEL(PHY_ID_AQR112R) },
|
||||||
{ }
|
{ }
|
||||||
|
|
|
@ -13,7 +13,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||||
|
|
||||||
--- a/drivers/net/pcs/pcs-mtk-lynxi.c
|
--- a/drivers/net/pcs/pcs-mtk-lynxi.c
|
||||||
+++ b/drivers/net/pcs/pcs-mtk-lynxi.c
|
+++ b/drivers/net/pcs/pcs-mtk-lynxi.c
|
||||||
@@ -114,14 +114,23 @@ static void mtk_pcs_lynxi_get_state(stru
|
@@ -92,14 +92,23 @@ static void mtk_pcs_lynxi_get_state(struct
|
||||||
struct phylink_link_state *state)
|
struct phylink_link_state *state)
|
||||||
{
|
{
|
||||||
struct mtk_pcs_lynxi *mpcs = pcs_to_mtk_pcs_lynxi(pcs);
|
struct mtk_pcs_lynxi *mpcs = pcs_to_mtk_pcs_lynxi(pcs);
|
||||||
|
@ -30,24 +30,35 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||||
+ state->an_complete = !!(bmsr & BMSR_ANEGCOMPLETE);
|
+ state->an_complete = !!(bmsr & BMSR_ANEGCOMPLETE);
|
||||||
+ state->speed = SPEED_2500;
|
+ state->speed = SPEED_2500;
|
||||||
+ state->duplex = DUPLEX_FULL;
|
+ state->duplex = DUPLEX_FULL;
|
||||||
|
+
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
|
||||||
- phylink_mii_c22_pcs_decode_state(state, FIELD_GET(SGMII_BMSR, bm),
|
- phylink_mii_c22_pcs_decode_state(state, FIELD_GET(SGMII_BMSR, bm),
|
||||||
- FIELD_GET(SGMII_LPA, adv));
|
- FIELD_GET(SGMII_LPA, adv));
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ regmap_read(mpcs->regmap, SGMSYS_PCS_ADVERTISE, &adv);
|
+ regmap_read(mpcs->regmap, SGMSYS_PCS_ADVERTISE, &adv);
|
||||||
+ phylink_mii_c22_pcs_decode_state(state, bmsr, FIELD_GET(SGMII_LPA, adv));
|
+ phylink_mii_c22_pcs_decode_state(state, bmsr, FIELD_GET(SGMII_LPA, adv));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mtk_sgmii_reset(struct mtk_pcs_lynxi *mpcs)
|
static void mtk_sgmii_reset(struct mtk_pcs_lynxi *mpcs)
|
||||||
@@ -163,7 +172,8 @@ static int mtk_pcs_lynxi_config(struct p
|
@@ -109,7 +118,7 @@ static int mtk_pcs_lynxi_config(struct p
|
||||||
if (neg_mode & PHYLINK_PCS_NEG_INBAND)
|
{
|
||||||
sgm_mode |= SGMII_REMOTE_FAULT_DIS;
|
struct mtk_pcs_lynxi *mpcs = pcs_to_mtk_pcs_lynxi(pcs);
|
||||||
|
bool mode_changed = false, changed;
|
||||||
|
- unsigned int rgc3, sgm_mode, bmcr;
|
||||||
|
+ unsigned int rgc3, sgm_mode, bmcr = 0;
|
||||||
|
int advertise, link_timer;
|
||||||
|
|
||||||
- if (neg_mode == PHYLINK_PCS_NEG_INBAND_ENABLED) {
|
advertise = phylink_mii_c22_pcs_encode_advertisement(interface,
|
||||||
+ if (neg_mode == PHYLINK_PCS_NEG_INBAND_ENABLED &&
|
@@ -132,9 +141,8 @@ static int mtk_pcs_lynxi_config(struct p
|
||||||
+ interface != PHY_INTERFACE_MODE_2500BASEX) {
|
if (neg_mode == PHYLINK_PCS_NEG_INBAND_ENABLED) {
|
||||||
if (interface == PHY_INTERFACE_MODE_SGMII)
|
if (interface == PHY_INTERFACE_MODE_SGMII)
|
||||||
sgm_mode |= SGMII_SPEED_DUPLEX_AN;
|
sgm_mode |= SGMII_SPEED_DUPLEX_AN;
|
||||||
bmcr = BMCR_ANENABLE;
|
- bmcr = BMCR_ANENABLE;
|
||||||
|
- } else {
|
||||||
|
- bmcr = 0;
|
||||||
|
+ if (interface != PHY_INTERFACE_MODE_2500BASEX)
|
||||||
|
+ bmcr = BMCR_ANENABLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mpcs->interface != interface) {
|
||||||
|
|
|
@ -36,7 +36,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
||||||
+
|
+
|
||||||
+ if (ret)
|
+ if (ret)
|
||||||
+ return ret;
|
+ return ret;
|
||||||
+
|
+
|
||||||
+ ocp_write_word(tp, MCU_TYPE_PLA, PLA_LEDSEL, led_data);
|
+ ocp_write_word(tp, MCU_TYPE_PLA, PLA_LEDSEL, led_data);
|
||||||
+
|
+
|
||||||
+ return 0;
|
+ return 0;
|
||||||
|
|
|
@ -30,7 +30,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
||||||
+#include <linux/of.h>
|
+#include <linux/of.h>
|
||||||
#include <linux/phy.h>
|
#include <linux/phy.h>
|
||||||
#include <linux/polynomial.h>
|
#include <linux/polynomial.h>
|
||||||
#include <linux/netdevice.h>
|
#include <linux/property.h>
|
||||||
@@ -33,6 +34,7 @@
|
@@ -33,6 +34,7 @@
|
||||||
#define PHY_MIISTAT 0x18 /* MII state */
|
#define PHY_MIISTAT 0x18 /* MII state */
|
||||||
#define PHY_IMASK 0x19 /* interrupt mask */
|
#define PHY_IMASK 0x19 /* interrupt mask */
|
||||||
|
@ -52,9 +52,9 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
||||||
+/* LED */
|
+/* LED */
|
||||||
+#define VSPEC1_LED(x) (0x1 + x)
|
+#define VSPEC1_LED(x) (0x1 + x)
|
||||||
+
|
+
|
||||||
/* SGMII */
|
#define PHY_PMA_MGBT_POLARITY 0x82
|
||||||
#define VSPEC1_SGMII_CTRL 0x08
|
#define PHY_MDI_MDI_X_MASK GENMASK(1, 0)
|
||||||
#define VSPEC1_SGMII_CTRL_ANEN BIT(12) /* Aneg enable */
|
#define PHY_MDI_MDI_X_NORMAL 0x3
|
||||||
@@ -241,6 +248,35 @@ out:
|
@@ -241,6 +248,35 @@ out:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -102,4 +102,4 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
||||||
+ return gpy_led_write(phydev);
|
+ return gpy_led_write(phydev);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool gpy_has_broken_mdint(struct phy_device *phydev)
|
static int gpy_probe(struct phy_device *phydev)
|
||||||
|
|
|
@ -27,8 +27,8 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||||
--- a/drivers/net/phy/sfp.c
|
--- a/drivers/net/phy/sfp.c
|
||||||
+++ b/drivers/net/phy/sfp.c
|
+++ b/drivers/net/phy/sfp.c
|
||||||
@@ -409,6 +409,9 @@ static const struct sfp_quirk sfp_quirks
|
@@ -409,6 +409,9 @@ static const struct sfp_quirk sfp_quirks
|
||||||
SFP_QUIRK("HUAWEI", "MA5671A", sfp_quirk_2500basex,
|
// FS 2.5G Base-T
|
||||||
sfp_fixup_ignore_tx_fault),
|
SFP_QUIRK_M("FS", "SFP-2.5G-T", sfp_quirk_oem_2_5g),
|
||||||
|
|
||||||
+ // OEM SFP-GE-T is 1000Base-T module
|
+ // OEM SFP-GE-T is 1000Base-T module
|
||||||
+ SFP_QUIRK_F("OEM", "SFP-GE-T", sfp_fixup_ignore_tx_fault),
|
+ SFP_QUIRK_F("OEM", "SFP-GE-T", sfp_fixup_ignore_tx_fault),
|
||||||
|
|
|
@ -6,18 +6,18 @@ Subject: [PATCH 30/36] GPIO: add named gpio exports
|
||||||
Signed-off-by: John Crispin <blogic@openwrt.org>
|
Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||||
--- a/drivers/gpio/gpiolib-of.c
|
--- a/drivers/gpio/gpiolib-of.c
|
||||||
+++ b/drivers/gpio/gpiolib-of.c
|
+++ b/drivers/gpio/gpiolib-of.c
|
||||||
@@ -19,6 +19,8 @@
|
@@ -21,6 +21,8 @@
|
||||||
#include <linux/pinctrl/pinctrl.h>
|
|
||||||
#include <linux/slab.h>
|
#include <linux/gpio/consumer.h>
|
||||||
#include <linux/gpio/machine.h>
|
#include <linux/gpio/machine.h>
|
||||||
+#include <linux/init.h>
|
+#include <linux/init.h>
|
||||||
+#include <linux/platform_device.h>
|
+#include <linux/platform_device.h>
|
||||||
|
|
||||||
#include "gpiolib.h"
|
#include "gpiolib.h"
|
||||||
#include "gpiolib-of.h"
|
#include "gpiolib-of.h"
|
||||||
@@ -1030,3 +1032,100 @@ void of_gpio_dev_init(struct gpio_chip *
|
@@ -1111,3 +1113,74 @@ void of_gpiochip_remove(struct gpio_chip
|
||||||
else
|
{
|
||||||
gc->of_node = gdev->dev.of_node;
|
of_node_put(dev_of_node(&chip->gpiodev->dev));
|
||||||
}
|
}
|
||||||
+
|
+
|
||||||
+#ifdef CONFIG_GPIO_SYSFS
|
+#ifdef CONFIG_GPIO_SYSFS
|
||||||
|
@ -44,57 +44,31 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||||
+ of_property_read_string(cnp, "gpio-export,name", &name);
|
+ of_property_read_string(cnp, "gpio-export,name", &name);
|
||||||
+
|
+
|
||||||
+ if (!name)
|
+ if (!name)
|
||||||
+ max_gpio = of_gpio_count(cnp);
|
+ max_gpio = of_gpio_named_count(cnp, "gpios");
|
||||||
+
|
+
|
||||||
+ for (i = 0; i < max_gpio; i++) {
|
+ for (i = 0; i < max_gpio; i++) {
|
||||||
+ struct gpio_desc *desc;
|
+ struct gpio_desc *desc;
|
||||||
+ unsigned flags = 0;
|
+ unsigned flags = 0;
|
||||||
+ enum of_gpio_flags of_flags;
|
+ enum of_gpio_flags of_flags;
|
||||||
+
|
+
|
||||||
+ gpio = of_get_gpio_flags(cnp, i, &of_flags);
|
+ desc = of_get_named_gpiod_flags(cnp, "gpios", i, &of_flags);
|
||||||
+ if (!gpio_is_valid(gpio))
|
+ if (IS_ERR(desc))
|
||||||
+ return gpio;
|
+ return PTR_ERR(desc);
|
||||||
|
+ gpio = desc_to_gpio(desc);
|
||||||
+
|
+
|
||||||
+ if (of_flags & OF_GPIO_ACTIVE_LOW)
|
+ if (of_flags & OF_GPIO_ACTIVE_LOW)
|
||||||
+ flags |= GPIOF_ACTIVE_LOW;
|
+ flags |= GPIOF_ACTIVE_LOW;
|
||||||
+
|
+
|
||||||
+ if (!of_property_read_u32(cnp, "gpio-export,output", &val)) {
|
+ if (!of_property_read_u32(cnp, "gpio-export,output", &val))
|
||||||
+ if (of_flags & OF_GPIO_SINGLE_ENDED) {
|
+ flags |= val ? GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW;
|
||||||
+ /*
|
+ else
|
||||||
+ * As gpiod_direction_output_raw() is used, we
|
|
||||||
+ * need to emulate open drain or open source here.
|
|
||||||
+ */
|
|
||||||
+ if (of_flags & OF_GPIO_OPEN_DRAIN) {
|
|
||||||
+ flags |= GPIOF_OPEN_DRAIN;
|
|
||||||
+ flags |= val ? GPIOF_IN : GPIOF_OUT_INIT_LOW;
|
|
||||||
+ } else {
|
|
||||||
+ flags |= GPIOF_OPEN_SOURCE;
|
|
||||||
+ flags |= val ? GPIOF_OUT_INIT_HIGH : GPIOF_IN;
|
|
||||||
+ }
|
|
||||||
+ } else {
|
|
||||||
+ flags |= val ? GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW;
|
|
||||||
+ }
|
|
||||||
+ } else {
|
|
||||||
+ flags |= GPIOF_IN;
|
+ flags |= GPIOF_IN;
|
||||||
+ }
|
|
||||||
+
|
+
|
||||||
+ if (devm_gpio_request_one(&pdev->dev, gpio, flags, name ? name : of_node_full_name(np)))
|
+ if (devm_gpio_request_one(&pdev->dev, gpio, flags, name ? name : of_node_full_name(np)))
|
||||||
+ continue;
|
+ continue;
|
||||||
+
|
+
|
||||||
+ /*
|
|
||||||
+ * When emulating open-source or open-drain functionalities by not
|
|
||||||
+ * actively driving the line (setting mode to input) we still need to
|
|
||||||
+ * set the IS_OUT flag or otherwise we won't be able to set the line
|
|
||||||
+ * value anymore.
|
|
||||||
+ */
|
|
||||||
+ if ((flags & GPIOF_IN) &&
|
|
||||||
+ ((flags & GPIOF_OPEN_DRAIN) || (flags & GPIOF_OPEN_SOURCE))) {
|
|
||||||
+ desc = gpio_to_desc(gpio);
|
|
||||||
+ set_bit(FLAG_IS_OUT, &desc->flags);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ dmc = of_property_read_bool(cnp, "gpio-export,direction_may_change");
|
+ dmc = of_property_read_bool(cnp, "gpio-export,direction_may_change");
|
||||||
+ gpio_export_with_name(gpio, dmc, name);
|
+ gpio_export_with_name(gpio_to_desc(gpio), dmc, name);
|
||||||
+ nb++;
|
+ nb++;
|
||||||
+ }
|
+ }
|
||||||
+ }
|
+ }
|
||||||
|
@ -116,36 +90,24 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||||
+module_platform_driver(gpio_export_driver);
|
+module_platform_driver(gpio_export_driver);
|
||||||
+
|
+
|
||||||
+#endif
|
+#endif
|
||||||
--- a/include/asm-generic/gpio.h
|
|
||||||
+++ b/include/asm-generic/gpio.h
|
|
||||||
@@ -125,6 +125,12 @@ static inline int gpio_export(unsigned g
|
|
||||||
return gpiod_export(gpio_to_desc(gpio), direction_may_change);
|
|
||||||
}
|
|
||||||
|
|
||||||
+int __gpiod_export(struct gpio_desc *desc, bool direction_may_change, const char *name);
|
|
||||||
+static inline int gpio_export_with_name(unsigned gpio, bool direction_may_change, const char *name)
|
|
||||||
+{
|
|
||||||
+ return __gpiod_export(gpio_to_desc(gpio), direction_may_change, name);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static inline int gpio_export_link(struct device *dev, const char *name,
|
|
||||||
unsigned gpio)
|
|
||||||
{
|
|
||||||
--- a/include/linux/gpio/consumer.h
|
--- a/include/linux/gpio/consumer.h
|
||||||
+++ b/include/linux/gpio/consumer.h
|
+++ b/include/linux/gpio/consumer.h
|
||||||
@@ -715,6 +715,7 @@ static inline struct gpio_desc *acpi_get
|
@@ -644,7 +644,10 @@ static inline struct gpio_desc *acpi_get
|
||||||
|
|
||||||
#if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_GPIO_SYSFS)
|
#if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_GPIO_SYSFS)
|
||||||
|
|
||||||
+int _gpiod_export(struct gpio_desc *desc, bool direction_may_change, const char *name);
|
+int __gpiod_export(struct gpio_desc *desc, bool direction_may_change, const char *name);
|
||||||
int gpiod_export(struct gpio_desc *desc, bool direction_may_change);
|
int gpiod_export(struct gpio_desc *desc, bool direction_may_change);
|
||||||
|
+int gpio_export_with_name(struct gpio_desc *desc, bool direction_may_change,
|
||||||
|
+ const char *name);
|
||||||
int gpiod_export_link(struct device *dev, const char *name,
|
int gpiod_export_link(struct device *dev, const char *name,
|
||||||
struct gpio_desc *desc);
|
struct gpio_desc *desc);
|
||||||
@@ -722,6 +723,13 @@ void gpiod_unexport(struct gpio_desc *de
|
void gpiod_unexport(struct gpio_desc *desc);
|
||||||
|
@@ -653,12 +656,26 @@ void gpiod_unexport(struct gpio_desc *de
|
||||||
|
|
||||||
#else /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */
|
#include <asm/errno.h>
|
||||||
|
|
||||||
+static inline int _gpiod_export(struct gpio_desc *desc,
|
+static inline int __gpiod_export(struct gpio_desc *desc,
|
||||||
+ bool direction_may_change,
|
+ bool direction_may_change,
|
||||||
+ const char *name)
|
+ const char *name)
|
||||||
+{
|
+{
|
||||||
|
@ -154,10 +116,23 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||||
+
|
+
|
||||||
static inline int gpiod_export(struct gpio_desc *desc,
|
static inline int gpiod_export(struct gpio_desc *desc,
|
||||||
bool direction_may_change)
|
bool direction_may_change)
|
||||||
|
{
|
||||||
|
return -ENOSYS;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static inline int gpio_export_with_name(struct gpio_desc *desc,
|
||||||
|
+ bool direction_may_change,
|
||||||
|
+ const char *name)
|
||||||
|
+{
|
||||||
|
+ return -ENOSYS;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static inline int gpiod_export_link(struct device *dev, const char *name,
|
||||||
|
struct gpio_desc *desc)
|
||||||
{
|
{
|
||||||
--- a/drivers/gpio/gpiolib-sysfs.c
|
--- a/drivers/gpio/gpiolib-sysfs.c
|
||||||
+++ b/drivers/gpio/gpiolib-sysfs.c
|
+++ b/drivers/gpio/gpiolib-sysfs.c
|
||||||
@@ -547,7 +547,7 @@ static struct class gpio_class = {
|
@@ -557,7 +557,7 @@ static struct class gpio_class = {
|
||||||
*
|
*
|
||||||
* Returns zero on success, else an error.
|
* Returns zero on success, else an error.
|
||||||
*/
|
*/
|
||||||
|
@ -166,7 +141,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||||
{
|
{
|
||||||
struct gpio_chip *chip;
|
struct gpio_chip *chip;
|
||||||
struct gpio_device *gdev;
|
struct gpio_device *gdev;
|
||||||
@@ -609,6 +609,8 @@ int gpiod_export(struct gpio_desc *desc,
|
@@ -619,6 +619,8 @@ int gpiod_export(struct gpio_desc *desc,
|
||||||
offset = gpio_chip_hwgpio(desc);
|
offset = gpio_chip_hwgpio(desc);
|
||||||
if (chip->names && chip->names[offset])
|
if (chip->names && chip->names[offset])
|
||||||
ioname = chip->names[offset];
|
ioname = chip->names[offset];
|
||||||
|
@ -175,7 +150,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||||
|
|
||||||
dev = device_create_with_groups(&gpio_class, &gdev->dev,
|
dev = device_create_with_groups(&gpio_class, &gdev->dev,
|
||||||
MKDEV(0, 0), data, gpio_groups,
|
MKDEV(0, 0), data, gpio_groups,
|
||||||
@@ -630,6 +632,12 @@ err_unlock:
|
@@ -640,8 +642,21 @@ int gpiod_export(struct gpio_desc *desc,
|
||||||
gpiod_dbg(desc, "%s: status %d\n", __func__, status);
|
gpiod_dbg(desc, "%s: status %d\n", __func__, status);
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
@ -187,4 +162,13 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||||
+}
|
+}
|
||||||
EXPORT_SYMBOL_GPL(gpiod_export);
|
EXPORT_SYMBOL_GPL(gpiod_export);
|
||||||
|
|
||||||
|
+int gpio_export_with_name(struct gpio_desc *desc, bool direction_may_change,
|
||||||
|
+ const char *name)
|
||||||
|
+{
|
||||||
|
+ return __gpiod_export(desc, direction_may_change, name);
|
||||||
|
+}
|
||||||
|
+EXPORT_SYMBOL_GPL(gpio_export_with_name);
|
||||||
|
+
|
||||||
static int match_export(struct device *dev, const void *desc)
|
static int match_export(struct device *dev, const void *desc)
|
||||||
|
{
|
||||||
|
struct gpiod_data *data = dev_get_drvdata(dev);
|
||||||
|
|
|
@ -28,13 +28,14 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
help
|
help
|
||||||
--- a/net/core/Makefile
|
--- a/net/core/Makefile
|
||||||
+++ b/net/core/Makefile
|
+++ b/net/core/Makefile
|
||||||
@@ -11,11 +11,12 @@ obj-$(CONFIG_SYSCTL) += sysctl_net_core.
|
@@ -11,12 +11,13 @@ obj-$(CONFIG_SYSCTL) += sysctl_net_core.
|
||||||
|
|
||||||
obj-y += dev.o dev_addr_lists.o dst.o netevent.o \
|
obj-y += dev.o dev_addr_lists.o dst.o netevent.o \
|
||||||
neighbour.o rtnetlink.o utils.o link_watch.o filter.o \
|
neighbour.o rtnetlink.o utils.o link_watch.o filter.o \
|
||||||
- sock_diag.o dev_ioctl.o tso.o sock_reuseport.o \
|
- sock_diag.o dev_ioctl.o tso.o sock_reuseport.o \
|
||||||
+ dev_ioctl.o tso.o sock_reuseport.o \
|
+ dev_ioctl.o tso.o sock_reuseport.o \
|
||||||
fib_notifier.o xdp.o flow_offload.o gro.o
|
fib_notifier.o xdp.o flow_offload.o gro.o \
|
||||||
|
netdev-genl.o netdev-genl-gen.o gso.o
|
||||||
|
|
||||||
obj-$(CONFIG_NETDEV_ADDR_LIST_TEST) += dev_addr_lists_test.o
|
obj-$(CONFIG_NETDEV_ADDR_LIST_TEST) += dev_addr_lists_test.o
|
||||||
|
|
||||||
|
@ -44,15 +45,15 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
obj-$(CONFIG_PROC_FS) += net-procfs.o
|
obj-$(CONFIG_PROC_FS) += net-procfs.o
|
||||||
--- a/net/core/sock.c
|
--- a/net/core/sock.c
|
||||||
+++ b/net/core/sock.c
|
+++ b/net/core/sock.c
|
||||||
@@ -115,6 +115,7 @@
|
@@ -117,6 +117,7 @@
|
||||||
#include <linux/memcontrol.h>
|
#include <linux/mroute.h>
|
||||||
#include <linux/prefetch.h>
|
#include <linux/mroute6.h>
|
||||||
#include <linux/compat.h>
|
#include <linux/icmpv6.h>
|
||||||
+#include <linux/cookie.h>
|
+#include <linux/cookie.h>
|
||||||
|
|
||||||
#include <linux/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
|
|
||||||
@@ -146,6 +147,7 @@
|
@@ -149,6 +150,7 @@
|
||||||
|
|
||||||
static DEFINE_MUTEX(proto_list_mutex);
|
static DEFINE_MUTEX(proto_list_mutex);
|
||||||
static LIST_HEAD(proto_list);
|
static LIST_HEAD(proto_list);
|
||||||
|
@ -60,26 +61,29 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
|
|
||||||
static void sock_def_write_space_wfree(struct sock *sk);
|
static void sock_def_write_space_wfree(struct sock *sk);
|
||||||
static void sock_def_write_space(struct sock *sk);
|
static void sock_def_write_space(struct sock *sk);
|
||||||
@@ -585,6 +587,18 @@ discard_and_relse:
|
@@ -588,6 +590,21 @@ int __sk_receive_skb(struct sock *sk, str
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(__sk_receive_skb);
|
EXPORT_SYMBOL(__sk_receive_skb);
|
||||||
|
|
||||||
+u64 __sock_gen_cookie(struct sock *sk)
|
+u64 __sock_gen_cookie(struct sock *sk)
|
||||||
+{
|
+{
|
||||||
+ while (1) {
|
+ u64 res = atomic64_read(&sk->sk_cookie);
|
||||||
+ u64 res = atomic64_read(&sk->sk_cookie);
|
|
||||||
+
|
+
|
||||||
+ if (res)
|
+ if (!res) {
|
||||||
+ return res;
|
+ u64 new = gen_cookie_next(&sock_cookie);
|
||||||
+ res = gen_cookie_next(&sock_cookie);
|
+
|
||||||
+ atomic64_cmpxchg(&sk->sk_cookie, 0, res);
|
+ atomic64_cmpxchg(&sk->sk_cookie, res, new);
|
||||||
|
+
|
||||||
|
+ /* Another thread might have changed sk_cookie before us. */
|
||||||
|
+ res = atomic64_read(&sk->sk_cookie);
|
||||||
+ }
|
+ }
|
||||||
|
+ return res;
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
INDIRECT_CALLABLE_DECLARE(struct dst_entry *ip6_dst_check(struct dst_entry *,
|
INDIRECT_CALLABLE_DECLARE(struct dst_entry *ip6_dst_check(struct dst_entry *,
|
||||||
u32));
|
u32));
|
||||||
INDIRECT_CALLABLE_DECLARE(struct dst_entry *ipv4_dst_check(struct dst_entry *,
|
INDIRECT_CALLABLE_DECLARE(struct dst_entry *ipv4_dst_check(struct dst_entry *,
|
||||||
@@ -2188,9 +2202,11 @@ static void __sk_free(struct sock *sk)
|
@@ -2238,9 +2255,11 @@ static void __sk_free(struct sock *sk)
|
||||||
if (likely(sk->sk_net_refcnt))
|
if (likely(sk->sk_net_refcnt))
|
||||||
sock_inuse_add(sock_net(sk), -1);
|
sock_inuse_add(sock_net(sk), -1);
|
||||||
|
|
||||||
|
@ -101,7 +105,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
#include <linux/inet_diag.h>
|
#include <linux/inet_diag.h>
|
||||||
#include <linux/sock_diag.h>
|
#include <linux/sock_diag.h>
|
||||||
|
|
||||||
@@ -21,20 +20,6 @@ static int (*inet_rcv_compat)(struct sk_
|
@@ -21,23 +20,6 @@ static int (*inet_rcv_compat)(struct sk_
|
||||||
static DEFINE_MUTEX(sock_diag_table_mutex);
|
static DEFINE_MUTEX(sock_diag_table_mutex);
|
||||||
static struct workqueue_struct *broadcast_wq;
|
static struct workqueue_struct *broadcast_wq;
|
||||||
|
|
||||||
|
@ -109,14 +113,17 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
-
|
-
|
||||||
-u64 __sock_gen_cookie(struct sock *sk)
|
-u64 __sock_gen_cookie(struct sock *sk)
|
||||||
-{
|
-{
|
||||||
- while (1) {
|
- u64 res = atomic64_read(&sk->sk_cookie);
|
||||||
- u64 res = atomic64_read(&sk->sk_cookie);
|
|
||||||
-
|
-
|
||||||
- if (res)
|
- if (!res) {
|
||||||
- return res;
|
- u64 new = gen_cookie_next(&sock_cookie);
|
||||||
- res = gen_cookie_next(&sock_cookie);
|
-
|
||||||
- atomic64_cmpxchg(&sk->sk_cookie, 0, res);
|
- atomic64_cmpxchg(&sk->sk_cookie, res, new);
|
||||||
|
-
|
||||||
|
- /* Another thread might have changed sk_cookie before us. */
|
||||||
|
- res = atomic64_read(&sk->sk_cookie);
|
||||||
- }
|
- }
|
||||||
|
- return res;
|
||||||
-}
|
-}
|
||||||
-
|
-
|
||||||
int sock_diag_check_cookie(struct sock *sk, const __u32 *cookie)
|
int sock_diag_check_cookie(struct sock *sk, const __u32 *cookie)
|
||||||
|
|
Loading…
Reference in a new issue