commit:     39c60e26cf9b140173075799b67ca1bbce88f1a9
Author:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
AuthorDate: Sat Jan 23 16:38:32 2021 +0000
Commit:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
CommitDate: Sat Jan 23 16:38:32 2021 +0000
URL:        https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=39c60e26

Linux patch 5.10.10

Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org>

 0000_README              |    4 +
 1009_linux-5.10.10.patch | 1406 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 1410 insertions(+)

diff --git a/0000_README b/0000_README
index e4c8bac..4ad6d69 100644
--- a/0000_README
+++ b/0000_README
@@ -79,6 +79,10 @@ Patch:  1008_linux-5.10.9.patch
 From:   http://www.kernel.org
 Desc:   Linux 5.10.9
 
+Patch:  1009_linux-5.10.10.patch
+From:   http://www.kernel.org
+Desc:   Linux 5.10.10
+
 Patch:  1500_XATTR_USER_PREFIX.patch
 From:   https://bugs.gentoo.org/show_bug.cgi?id=470644
 Desc:   Support for namespace user.pax.* on tmpfs.

diff --git a/1009_linux-5.10.10.patch b/1009_linux-5.10.10.patch
new file mode 100644
index 0000000..70f7173
--- /dev/null
+++ b/1009_linux-5.10.10.patch
@@ -0,0 +1,1406 @@
+diff --git a/Documentation/devicetree/bindings/net/renesas,etheravb.yaml 
b/Documentation/devicetree/bindings/net/renesas,etheravb.yaml
+index 244befb6402aa..de9dd574a2f95 100644
+--- a/Documentation/devicetree/bindings/net/renesas,etheravb.yaml
++++ b/Documentation/devicetree/bindings/net/renesas,etheravb.yaml
+@@ -163,6 +163,7 @@ allOf:
+             enum:
+               - renesas,etheravb-r8a774a1
+               - renesas,etheravb-r8a774b1
++              - renesas,etheravb-r8a774e1
+               - renesas,etheravb-r8a7795
+               - renesas,etheravb-r8a7796
+               - renesas,etheravb-r8a77961
+diff --git a/Makefile b/Makefile
+index 1572ebd192a93..7d86ad6ad36cc 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,7 +1,7 @@
+ # SPDX-License-Identifier: GPL-2.0
+ VERSION = 5
+ PATCHLEVEL = 10
+-SUBLEVEL = 9
++SUBLEVEL = 10
+ EXTRAVERSION =
+ NAME = Kleptomaniac Octopus
+ 
+diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c
+index e04d90af4c27c..6fb8cb7b9bcc6 100644
+--- a/arch/x86/hyperv/hv_init.c
++++ b/arch/x86/hyperv/hv_init.c
+@@ -312,6 +312,25 @@ static struct syscore_ops hv_syscore_ops = {
+       .resume         = hv_resume,
+ };
+ 
++static void (* __initdata old_setup_percpu_clockev)(void);
++
++static void __init hv_stimer_setup_percpu_clockev(void)
++{
++      /*
++       * Ignore any errors in setting up stimer clockevents
++       * as we can run with the LAPIC timer as a fallback.
++       */
++      (void)hv_stimer_alloc();
++
++      /*
++       * Still register the LAPIC timer, because the direct-mode STIMER is
++       * not supported by old versions of Hyper-V. This also allows users
++       * to switch to LAPIC timer via /sys, if they want to.
++       */
++      if (old_setup_percpu_clockev)
++              old_setup_percpu_clockev();
++}
++
+ /*
+  * This function is to be invoked early in the boot sequence after the
+  * hypervisor has been detected.
+@@ -390,10 +409,14 @@ void __init hyperv_init(void)
+       wrmsrl(HV_X64_MSR_HYPERCALL, hypercall_msr.as_uint64);
+ 
+       /*
+-       * Ignore any errors in setting up stimer clockevents
+-       * as we can run with the LAPIC timer as a fallback.
++       * hyperv_init() is called before LAPIC is initialized: see
++       * apic_intr_mode_init() -> x86_platform.apic_post_init() and
++       * apic_bsp_setup() -> setup_local_APIC(). The direct-mode STIMER
++       * depends on LAPIC, so hv_stimer_alloc() should be called from
++       * x86_init.timers.setup_percpu_clockev.
+        */
+-      (void)hv_stimer_alloc();
++      old_setup_percpu_clockev = x86_init.timers.setup_percpu_clockev;
++      x86_init.timers.setup_percpu_clockev = hv_stimer_setup_percpu_clockev;
+ 
+       hv_apic_init();
+ 
+diff --git a/crypto/asymmetric_keys/public_key.c 
b/crypto/asymmetric_keys/public_key.c
+index 8892908ad58ce..788a4ba1e2e74 100644
+--- a/crypto/asymmetric_keys/public_key.c
++++ b/crypto/asymmetric_keys/public_key.c
+@@ -356,7 +356,8 @@ int public_key_verify_signature(const struct public_key 
*pkey,
+       if (ret)
+               goto error_free_key;
+ 
+-      if (strcmp(sig->pkey_algo, "sm2") == 0 && sig->data_size) {
++      if (sig->pkey_algo && strcmp(sig->pkey_algo, "sm2") == 0 &&
++          sig->data_size) {
+               ret = cert_sig_digest_update(sig, tfm);
+               if (ret)
+                       goto error_free_key;
+diff --git a/drivers/gpu/drm/amd/display/Kconfig 
b/drivers/gpu/drm/amd/display/Kconfig
+index 60dfdd432aba0..3c410d236c491 100644
+--- a/drivers/gpu/drm/amd/display/Kconfig
++++ b/drivers/gpu/drm/amd/display/Kconfig
+@@ -6,7 +6,7 @@ config DRM_AMD_DC
+       bool "AMD DC - Enable new display engine"
+       default y
+       select SND_HDA_COMPONENT if SND_HDA_CORE
+-      select DRM_AMD_DC_DCN if (X86 || PPC64 || (ARM64 && KERNEL_MODE_NEON)) 
&& !(KCOV_INSTRUMENT_ALL && KCOV_ENABLE_COMPARISONS)
++      select DRM_AMD_DC_DCN if (X86 || PPC64) && !(KCOV_INSTRUMENT_ALL && 
KCOV_ENABLE_COMPARISONS)
+       help
+         Choose this option if you want to use the new display engine
+         support for AMDGPU. This adds required support for Vega and
+diff --git a/drivers/gpu/drm/amd/display/dc/calcs/Makefile 
b/drivers/gpu/drm/amd/display/dc/calcs/Makefile
+index 64f515d744103..4674aca8f2069 100644
+--- a/drivers/gpu/drm/amd/display/dc/calcs/Makefile
++++ b/drivers/gpu/drm/amd/display/dc/calcs/Makefile
+@@ -33,10 +33,6 @@ ifdef CONFIG_PPC64
+ calcs_ccflags := -mhard-float -maltivec
+ endif
+ 
+-ifdef CONFIG_ARM64
+-calcs_rcflags := -mgeneral-regs-only
+-endif
+-
+ ifdef CONFIG_CC_IS_GCC
+ ifeq ($(call cc-ifversion, -lt, 0701, y), y)
+ IS_OLD_GCC = 1
+@@ -57,9 +53,6 @@ endif
+ CFLAGS_$(AMDDALPATH)/dc/calcs/dcn_calcs.o := $(calcs_ccflags)
+ CFLAGS_$(AMDDALPATH)/dc/calcs/dcn_calc_auto.o := $(calcs_ccflags)
+ CFLAGS_$(AMDDALPATH)/dc/calcs/dcn_calc_math.o := $(calcs_ccflags) 
-Wno-tautological-compare
+-CFLAGS_REMOVE_$(AMDDALPATH)/dc/calcs/dcn_calcs.o := $(calcs_rcflags)
+-CFLAGS_REMOVE_$(AMDDALPATH)/dc/calcs/dcn_calc_auto.o := $(calcs_rcflags)
+-CFLAGS_REMOVE_$(AMDDALPATH)/dc/calcs/dcn_calc_math.o := $(calcs_rcflags)
+ 
+ BW_CALCS = dce_calcs.o bw_fixed.o custom_float.o
+ 
+diff --git a/drivers/gpu/drm/amd/display/dc/clk_mgr/Makefile 
b/drivers/gpu/drm/amd/display/dc/clk_mgr/Makefile
+index 1a495759a0343..52b1ce775a1e8 100644
+--- a/drivers/gpu/drm/amd/display/dc/clk_mgr/Makefile
++++ b/drivers/gpu/drm/amd/display/dc/clk_mgr/Makefile
+@@ -104,13 +104,6 @@ ifdef CONFIG_PPC64
+ CFLAGS_$(AMDDALPATH)/dc/clk_mgr/dcn21/rn_clk_mgr.o := $(call 
cc-option,-mno-gnu-attribute)
+ endif
+ 
+-# prevent build errors:
+-# ...: '-mgeneral-regs-only' is incompatible with the use of floating-point 
types
+-# this file is unused on arm64, just like on ppc64
+-ifdef CONFIG_ARM64
+-CFLAGS_REMOVE_$(AMDDALPATH)/dc/clk_mgr/dcn21/rn_clk_mgr.o := 
-mgeneral-regs-only
+-endif
+-
+ AMD_DAL_CLK_MGR_DCN21 = $(addprefix 
$(AMDDALPATH)/dc/clk_mgr/dcn21/,$(CLK_MGR_DCN21))
+ 
+ AMD_DISPLAY_FILES += $(AMD_DAL_CLK_MGR_DCN21)
+diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/Makefile 
b/drivers/gpu/drm/amd/display/dc/dcn10/Makefile
+index 733e6e6e43bd6..62ad1a11bff9c 100644
+--- a/drivers/gpu/drm/amd/display/dc/dcn10/Makefile
++++ b/drivers/gpu/drm/amd/display/dc/dcn10/Makefile
+@@ -31,11 +31,4 @@ DCN10 = dcn10_init.o dcn10_resource.o dcn10_ipp.o 
dcn10_hw_sequencer.o \
+ 
+ AMD_DAL_DCN10 = $(addprefix $(AMDDALPATH)/dc/dcn10/,$(DCN10))
+ 
+-# fix:
+-# ...: '-mgeneral-regs-only' is incompatible with the use of floating-point 
types
+-# aarch64 does not support soft-float, so use hard-float and handle this in 
code
+-ifdef CONFIG_ARM64
+-CFLAGS_REMOVE_$(AMDDALPATH)/dc/dcn10/dcn10_resource.o := -mgeneral-regs-only
+-endif
+-
+ AMD_DISPLAY_FILES += $(AMD_DAL_DCN10)
+diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c 
b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c
+index a78712caf1244..462d3d981ea5e 100644
+--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c
++++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c
+@@ -1339,47 +1339,6 @@ static uint32_t read_pipe_fuses(struct dc_context *ctx)
+       return value;
+ }
+ 
+-/*
+- * Some architectures don't support soft-float (e.g. aarch64), on those
+- * this function has to be called with hardfloat enabled, make sure not
+- * to inline it so whatever fp stuff is done stays inside
+- */
+-static noinline void dcn10_resource_construct_fp(
+-      struct dc *dc)
+-{
+-      if (dc->ctx->dce_version == DCN_VERSION_1_01) {
+-              struct dcn_soc_bounding_box *dcn_soc = dc->dcn_soc;
+-              struct dcn_ip_params *dcn_ip = dc->dcn_ip;
+-              struct display_mode_lib *dml = &dc->dml;
+-
+-              dml->ip.max_num_dpp = 3;
+-              /* TODO how to handle 23.84? */
+-              dcn_soc->dram_clock_change_latency = 23;
+-              dcn_ip->max_num_dpp = 3;
+-      }
+-      if (ASICREV_IS_RV1_F0(dc->ctx->asic_id.hw_internal_rev)) {
+-              dc->dcn_soc->urgent_latency = 3;
+-              dc->debug.disable_dmcu = true;
+-              dc->dcn_soc->fabric_and_dram_bandwidth_vmax0p9 = 41.60f;
+-      }
+-
+-
+-      dc->dcn_soc->number_of_channels = dc->ctx->asic_id.vram_width / 
ddr4_dram_width;
+-      ASSERT(dc->dcn_soc->number_of_channels < 3);
+-      if (dc->dcn_soc->number_of_channels == 0)/*old sbios bug*/
+-              dc->dcn_soc->number_of_channels = 2;
+-
+-      if (dc->dcn_soc->number_of_channels == 1) {
+-              dc->dcn_soc->fabric_and_dram_bandwidth_vmax0p9 = 19.2f;
+-              dc->dcn_soc->fabric_and_dram_bandwidth_vnom0p8 = 17.066f;
+-              dc->dcn_soc->fabric_and_dram_bandwidth_vmid0p72 = 14.933f;
+-              dc->dcn_soc->fabric_and_dram_bandwidth_vmin0p65 = 12.8f;
+-              if (ASICREV_IS_RV1_F0(dc->ctx->asic_id.hw_internal_rev)) {
+-                      dc->dcn_soc->fabric_and_dram_bandwidth_vmax0p9 = 20.80f;
+-              }
+-      }
+-}
+-
+ static bool dcn10_resource_construct(
+       uint8_t num_virtual_links,
+       struct dc *dc,
+@@ -1531,15 +1490,37 @@ static bool dcn10_resource_construct(
+       memcpy(dc->dcn_ip, &dcn10_ip_defaults, sizeof(dcn10_ip_defaults));
+       memcpy(dc->dcn_soc, &dcn10_soc_defaults, sizeof(dcn10_soc_defaults));
+ 
+-#if defined(CONFIG_ARM64)
+-      /* Aarch64 does not support -msoft-float/-mfloat-abi=soft */
+-      DC_FP_START();
+-      dcn10_resource_construct_fp(dc);
+-      DC_FP_END();
+-#else
+-      /* Other architectures we build for build this with soft-float */
+-      dcn10_resource_construct_fp(dc);
+-#endif
++      if (dc->ctx->dce_version == DCN_VERSION_1_01) {
++              struct dcn_soc_bounding_box *dcn_soc = dc->dcn_soc;
++              struct dcn_ip_params *dcn_ip = dc->dcn_ip;
++              struct display_mode_lib *dml = &dc->dml;
++
++              dml->ip.max_num_dpp = 3;
++              /* TODO how to handle 23.84? */
++              dcn_soc->dram_clock_change_latency = 23;
++              dcn_ip->max_num_dpp = 3;
++      }
++      if (ASICREV_IS_RV1_F0(dc->ctx->asic_id.hw_internal_rev)) {
++              dc->dcn_soc->urgent_latency = 3;
++              dc->debug.disable_dmcu = true;
++              dc->dcn_soc->fabric_and_dram_bandwidth_vmax0p9 = 41.60f;
++      }
++
++
++      dc->dcn_soc->number_of_channels = dc->ctx->asic_id.vram_width / 
ddr4_dram_width;
++      ASSERT(dc->dcn_soc->number_of_channels < 3);
++      if (dc->dcn_soc->number_of_channels == 0)/*old sbios bug*/
++              dc->dcn_soc->number_of_channels = 2;
++
++      if (dc->dcn_soc->number_of_channels == 1) {
++              dc->dcn_soc->fabric_and_dram_bandwidth_vmax0p9 = 19.2f;
++              dc->dcn_soc->fabric_and_dram_bandwidth_vnom0p8 = 17.066f;
++              dc->dcn_soc->fabric_and_dram_bandwidth_vmid0p72 = 14.933f;
++              dc->dcn_soc->fabric_and_dram_bandwidth_vmin0p65 = 12.8f;
++              if (ASICREV_IS_RV1_F0(dc->ctx->asic_id.hw_internal_rev)) {
++                      dc->dcn_soc->fabric_and_dram_bandwidth_vmax0p9 = 20.80f;
++              }
++      }
+ 
+       pool->base.pp_smu = dcn10_pp_smu_create(ctx);
+ 
+diff --git a/drivers/gpu/drm/amd/display/dc/dcn20/Makefile 
b/drivers/gpu/drm/amd/display/dc/dcn20/Makefile
+index 624cb1341ef14..5fcaf78334ff9 100644
+--- a/drivers/gpu/drm/amd/display/dc/dcn20/Makefile
++++ b/drivers/gpu/drm/amd/display/dc/dcn20/Makefile
+@@ -17,10 +17,6 @@ ifdef CONFIG_PPC64
+ CFLAGS_$(AMDDALPATH)/dc/dcn20/dcn20_resource.o := -mhard-float -maltivec
+ endif
+ 
+-ifdef CONFIG_ARM64
+-CFLAGS_REMOVE_$(AMDDALPATH)/dc/dcn20/dcn20_resource.o := -mgeneral-regs-only
+-endif
+-
+ ifdef CONFIG_CC_IS_GCC
+ ifeq ($(call cc-ifversion, -lt, 0701, y), y)
+ IS_OLD_GCC = 1
+diff --git a/drivers/gpu/drm/amd/display/dc/dcn21/Makefile 
b/drivers/gpu/drm/amd/display/dc/dcn21/Makefile
+index 51a2f3d4c194b..07684d3e375ab 100644
+--- a/drivers/gpu/drm/amd/display/dc/dcn21/Makefile
++++ b/drivers/gpu/drm/amd/display/dc/dcn21/Makefile
+@@ -13,10 +13,6 @@ ifdef CONFIG_PPC64
+ CFLAGS_$(AMDDALPATH)/dc/dcn21/dcn21_resource.o := -mhard-float -maltivec
+ endif
+ 
+-ifdef CONFIG_ARM64
+-CFLAGS_REMOVE_$(AMDDALPATH)/dc/dcn21/dcn21_resource.o := -mgeneral-regs-only
+-endif
+-
+ ifdef CONFIG_CC_IS_GCC
+ ifeq ($(call cc-ifversion, -lt, 0701, y), y)
+ IS_OLD_GCC = 1
+diff --git a/drivers/gpu/drm/amd/display/dc/dml/Makefile 
b/drivers/gpu/drm/amd/display/dc/dml/Makefile
+index dbc7e2abe3795..417331438c306 100644
+--- a/drivers/gpu/drm/amd/display/dc/dml/Makefile
++++ b/drivers/gpu/drm/amd/display/dc/dml/Makefile
+@@ -33,10 +33,6 @@ ifdef CONFIG_PPC64
+ dml_ccflags := -mhard-float -maltivec
+ endif
+ 
+-ifdef CONFIG_ARM64
+-dml_rcflags := -mgeneral-regs-only
+-endif
+-
+ ifdef CONFIG_CC_IS_GCC
+ ifeq ($(call cc-ifversion, -lt, 0701, y), y)
+ IS_OLD_GCC = 1
+@@ -64,13 +60,6 @@ CFLAGS_$(AMDDALPATH)/dc/dml/dcn20/display_mode_vba_20v2.o 
:= $(dml_ccflags)
+ CFLAGS_$(AMDDALPATH)/dc/dml/dcn20/display_rq_dlg_calc_20v2.o := $(dml_ccflags)
+ CFLAGS_$(AMDDALPATH)/dc/dml/dcn21/display_mode_vba_21.o := $(dml_ccflags)
+ CFLAGS_$(AMDDALPATH)/dc/dml/dcn21/display_rq_dlg_calc_21.o := $(dml_ccflags)
+-CFLAGS_REMOVE_$(AMDDALPATH)/dc/dml/display_mode_vba.o := $(dml_rcflags)
+-CFLAGS_REMOVE_$(AMDDALPATH)/dc/dml/dcn20/display_mode_vba_20.o := 
$(dml_rcflags)
+-CFLAGS_REMOVE_$(AMDDALPATH)/dc/dml/dcn20/display_rq_dlg_calc_20.o := 
$(dml_rcflags)
+-CFLAGS_REMOVE_$(AMDDALPATH)/dc/dml/dcn20/display_mode_vba_20v2.o := 
$(dml_rcflags)
+-CFLAGS_REMOVE_$(AMDDALPATH)/dc/dml/dcn20/display_rq_dlg_calc_20v2.o := 
$(dml_rcflags)
+-CFLAGS_REMOVE_$(AMDDALPATH)/dc/dml/dcn21/display_mode_vba_21.o := 
$(dml_rcflags)
+-CFLAGS_REMOVE_$(AMDDALPATH)/dc/dml/dcn21/display_rq_dlg_calc_21.o := 
$(dml_rcflags)
+ endif
+ ifdef CONFIG_DRM_AMD_DC_DCN3_0
+ CFLAGS_$(AMDDALPATH)/dc/dml/dcn30/display_mode_vba_30.o := $(dml_ccflags) 
-Wframe-larger-than=2048
+@@ -78,8 +67,6 @@ CFLAGS_$(AMDDALPATH)/dc/dml/dcn30/display_rq_dlg_calc_30.o 
:= $(dml_ccflags)
+ endif
+ CFLAGS_$(AMDDALPATH)/dc/dml/dml1_display_rq_dlg_calc.o := $(dml_ccflags)
+ CFLAGS_$(AMDDALPATH)/dc/dml/display_rq_dlg_helpers.o := $(dml_ccflags)
+-CFLAGS_REMOVE_$(AMDDALPATH)/dc/dml/dml1_display_rq_dlg_calc.o := 
$(dml_rcflags)
+-CFLAGS_REMOVE_$(AMDDALPATH)/dc/dml/display_rq_dlg_helpers.o := $(dml_rcflags)
+ 
+ DML = display_mode_lib.o display_rq_dlg_helpers.o dml1_display_rq_dlg_calc.o \
+ 
+diff --git a/drivers/gpu/drm/amd/display/dc/dsc/Makefile 
b/drivers/gpu/drm/amd/display/dc/dsc/Makefile
+index f2624a1156e5c..ea29cf95d470b 100644
+--- a/drivers/gpu/drm/amd/display/dc/dsc/Makefile
++++ b/drivers/gpu/drm/amd/display/dc/dsc/Makefile
+@@ -10,10 +10,6 @@ ifdef CONFIG_PPC64
+ dsc_ccflags := -mhard-float -maltivec
+ endif
+ 
+-ifdef CONFIG_ARM64
+-dsc_rcflags := -mgeneral-regs-only
+-endif
+-
+ ifdef CONFIG_CC_IS_GCC
+ ifeq ($(call cc-ifversion, -lt, 0701, y), y)
+ IS_OLD_GCC = 1
+@@ -32,7 +28,6 @@ endif
+ endif
+ 
+ CFLAGS_$(AMDDALPATH)/dc/dsc/rc_calc.o := $(dsc_ccflags)
+-CFLAGS_REMOVE_$(AMDDALPATH)/dc/dsc/rc_calc.o := $(dsc_rcflags)
+ 
+ DSC = dc_dsc.o rc_calc.o rc_calc_dpi.o
+ 
+diff --git a/drivers/gpu/drm/amd/display/dc/os_types.h 
b/drivers/gpu/drm/amd/display/dc/os_types.h
+index 95cb56929e79e..126c2f3a4dd3b 100644
+--- a/drivers/gpu/drm/amd/display/dc/os_types.h
++++ b/drivers/gpu/drm/amd/display/dc/os_types.h
+@@ -55,10 +55,6 @@
+ #include <asm/fpu/api.h>
+ #define DC_FP_START() kernel_fpu_begin()
+ #define DC_FP_END() kernel_fpu_end()
+-#elif defined(CONFIG_ARM64)
+-#include <asm/neon.h>
+-#define DC_FP_START() kernel_neon_begin()
+-#define DC_FP_END() kernel_neon_end()
+ #elif defined(CONFIG_PPC64)
+ #include <asm/switch_to.h>
+ #include <asm/cputable.h>
+diff --git a/drivers/gpu/drm/panel/panel-orisetech-otm8009a.c 
b/drivers/gpu/drm/panel/panel-orisetech-otm8009a.c
+index b6e377aa1131b..6ac1accade803 100644
+--- a/drivers/gpu/drm/panel/panel-orisetech-otm8009a.c
++++ b/drivers/gpu/drm/panel/panel-orisetech-otm8009a.c
+@@ -452,7 +452,7 @@ static int otm8009a_probe(struct mipi_dsi_device *dsi)
+       dsi->lanes = 2;
+       dsi->format = MIPI_DSI_FMT_RGB888;
+       dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
+-                        MIPI_DSI_MODE_LPM;
++                        MIPI_DSI_MODE_LPM | MIPI_DSI_CLOCK_NON_CONTINUOUS;
+ 
+       drm_panel_init(&ctx->panel, dev, &otm8009a_drm_funcs,
+                      DRM_MODE_CONNECTOR_DSI);
+diff --git a/drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c 
b/drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c
+index 8a39be076e143..59de6b3b5f026 100644
+--- a/drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c
++++ b/drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c
+@@ -1432,7 +1432,7 @@ mcp251xfd_handle_rxif_one(struct mcp251xfd_priv *priv,
+       else
+               skb = alloc_can_skb(priv->ndev, (struct can_frame **)&cfd);
+ 
+-      if (!cfd) {
++      if (!skb) {
+               stats->rx_dropped++;
+               return 0;
+       }
+diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4_tcb.h 
b/drivers/net/ethernet/chelsio/cxgb4/t4_tcb.h
+index 92473dda55d9f..22a0220123ade 100644
+--- a/drivers/net/ethernet/chelsio/cxgb4/t4_tcb.h
++++ b/drivers/net/ethernet/chelsio/cxgb4/t4_tcb.h
+@@ -40,6 +40,13 @@
+ #define TCB_L2T_IX_M          0xfffULL
+ #define TCB_L2T_IX_V(x)               ((x) << TCB_L2T_IX_S)
+ 
++#define TCB_T_FLAGS_W           1
++#define TCB_T_FLAGS_S           0
++#define TCB_T_FLAGS_M           0xffffffffffffffffULL
++#define TCB_T_FLAGS_V(x)        ((__u64)(x) << TCB_T_FLAGS_S)
++
++#define TCB_FIELD_COOKIE_TFLAG        1
++
+ #define TCB_SMAC_SEL_W                0
+ #define TCB_SMAC_SEL_S                24
+ #define TCB_SMAC_SEL_M                0xffULL
+diff --git a/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls.h 
b/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls.h
+index 2d3dfdd2a7163..a7c72fd2f024b 100644
+--- a/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls.h
++++ b/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls.h
+@@ -573,7 +573,11 @@ int send_tx_flowc_wr(struct sock *sk, int compl,
+ void chtls_tcp_push(struct sock *sk, int flags);
+ int chtls_push_frames(struct chtls_sock *csk, int comp);
+ int chtls_set_tcb_tflag(struct sock *sk, unsigned int bit_pos, int val);
++void chtls_set_tcb_field_rpl_skb(struct sock *sk, u16 word,
++                               u64 mask, u64 val, u8 cookie,
++                               int through_l2t);
+ int chtls_setkey(struct chtls_sock *csk, u32 keylen, u32 mode, int 
cipher_type);
++void chtls_set_quiesce_ctrl(struct sock *sk, int val);
+ void skb_entail(struct sock *sk, struct sk_buff *skb, int flags);
+ unsigned int keyid_to_addr(int start_addr, int keyid);
+ void free_tls_keyid(struct sock *sk);
+diff --git a/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_cm.c 
b/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_cm.c
+index 07a956098e11f..5beec901713fb 100644
+--- a/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_cm.c
++++ b/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_cm.c
+@@ -32,6 +32,7 @@
+ #include "chtls.h"
+ #include "chtls_cm.h"
+ #include "clip_tbl.h"
++#include "t4_tcb.h"
+ 
+ /*
+  * State transitions and actions for close.  Note that if we are in SYN_SENT
+@@ -267,7 +268,9 @@ static void chtls_send_reset(struct sock *sk, int mode, 
struct sk_buff *skb)
+       if (sk->sk_state != TCP_SYN_RECV)
+               chtls_send_abort(sk, mode, skb);
+       else
+-              goto out;
++              chtls_set_tcb_field_rpl_skb(sk, TCB_T_FLAGS_W,
++                                          TCB_T_FLAGS_V(TCB_T_FLAGS_M), 0,
++                                          TCB_FIELD_COOKIE_TFLAG, 1);
+ 
+       return;
+ out:
+@@ -1948,6 +1951,8 @@ static void chtls_close_con_rpl(struct sock *sk, struct 
sk_buff *skb)
+               else if (tcp_sk(sk)->linger2 < 0 &&
+                        !csk_flag_nochk(csk, CSK_ABORT_SHUTDOWN))
+                       chtls_abort_conn(sk, skb);
++              else if (csk_flag_nochk(csk, CSK_TX_DATA_SENT))
++                      chtls_set_quiesce_ctrl(sk, 0);
+               break;
+       default:
+               pr_info("close_con_rpl in bad state %d\n", sk->sk_state);
+@@ -2291,6 +2296,28 @@ static int chtls_wr_ack(struct chtls_dev *cdev, struct 
sk_buff *skb)
+       return 0;
+ }
+ 
++static int chtls_set_tcb_rpl(struct chtls_dev *cdev, struct sk_buff *skb)
++{
++      struct cpl_set_tcb_rpl *rpl = cplhdr(skb) + RSS_HDR;
++      unsigned int hwtid = GET_TID(rpl);
++      struct sock *sk;
++
++      sk = lookup_tid(cdev->tids, hwtid);
++
++      /* return EINVAL if socket doesn't exist */
++      if (!sk)
++              return -EINVAL;
++
++      /* Reusing the skb as size of cpl_set_tcb_field structure
++       * is greater than cpl_abort_req
++       */
++      if (TCB_COOKIE_G(rpl->cookie) == TCB_FIELD_COOKIE_TFLAG)
++              chtls_send_abort(sk, CPL_ABORT_SEND_RST, NULL);
++
++      kfree_skb(skb);
++      return 0;
++}
++
+ chtls_handler_func chtls_handlers[NUM_CPL_CMDS] = {
+       [CPL_PASS_OPEN_RPL]     = chtls_pass_open_rpl,
+       [CPL_CLOSE_LISTSRV_RPL] = chtls_close_listsrv_rpl,
+@@ -2303,5 +2330,6 @@ chtls_handler_func chtls_handlers[NUM_CPL_CMDS] = {
+       [CPL_CLOSE_CON_RPL]     = chtls_conn_cpl,
+       [CPL_ABORT_REQ_RSS]     = chtls_conn_cpl,
+       [CPL_ABORT_RPL_RSS]     = chtls_conn_cpl,
+-      [CPL_FW4_ACK]           = chtls_wr_ack,
++      [CPL_FW4_ACK]           = chtls_wr_ack,
++      [CPL_SET_TCB_RPL]       = chtls_set_tcb_rpl,
+ };
+diff --git a/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_hw.c 
b/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_hw.c
+index a4fb463af22ac..1e67140b0f801 100644
+--- a/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_hw.c
++++ b/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_hw.c
+@@ -88,6 +88,24 @@ static int chtls_set_tcb_field(struct sock *sk, u16 word, 
u64 mask, u64 val)
+       return ret < 0 ? ret : 0;
+ }
+ 
++void chtls_set_tcb_field_rpl_skb(struct sock *sk, u16 word,
++                               u64 mask, u64 val, u8 cookie,
++                               int through_l2t)
++{
++      struct sk_buff *skb;
++      unsigned int wrlen;
++
++      wrlen = sizeof(struct cpl_set_tcb_field) + sizeof(struct ulptx_idata);
++      wrlen = roundup(wrlen, 16);
++
++      skb = alloc_skb(wrlen, GFP_KERNEL | __GFP_NOFAIL);
++      if (!skb)
++              return;
++
++      __set_tcb_field(sk, skb, word, mask, val, cookie, 0);
++      send_or_defer(sk, tcp_sk(sk), skb, through_l2t);
++}
++
+ /*
+  * Set one of the t_flags bits in the TCB.
+  */
+@@ -113,6 +131,29 @@ static int chtls_set_tcb_quiesce(struct sock *sk, int val)
+                                  TF_RX_QUIESCE_V(val));
+ }
+ 
++void chtls_set_quiesce_ctrl(struct sock *sk, int val)
++{
++      struct chtls_sock *csk;
++      struct sk_buff *skb;
++      unsigned int wrlen;
++      int ret;
++
++      wrlen = sizeof(struct cpl_set_tcb_field) + sizeof(struct ulptx_idata);
++      wrlen = roundup(wrlen, 16);
++
++      skb = alloc_skb(wrlen, GFP_ATOMIC);
++      if (!skb)
++              return;
++
++      csk = rcu_dereference_sk_user_data(sk);
++
++      __set_tcb_field(sk, skb, 1, TF_RX_QUIESCE_V(1), 0, 0, 1);
++      set_wr_txq(skb, CPL_PRIORITY_CONTROL, csk->port_id);
++      ret = cxgb4_ofld_send(csk->egress_dev, skb);
++      if (ret < 0)
++              kfree_skb(skb);
++}
++
+ /* TLS Key bitmap processing */
+ int chtls_init_kmap(struct chtls_dev *cdev, struct cxgb4_lld_info *lldi)
+ {
+diff --git a/drivers/net/ethernet/intel/i40e/i40e_xsk.c 
b/drivers/net/ethernet/intel/i40e/i40e_xsk.c
+index e402c62eb3137..8557807b41717 100644
+--- a/drivers/net/ethernet/intel/i40e/i40e_xsk.c
++++ b/drivers/net/ethernet/intel/i40e/i40e_xsk.c
+@@ -348,12 +348,12 @@ int i40e_clean_rx_irq_zc(struct i40e_ring *rx_ring, int 
budget)
+                * SBP is *not* set in PRT_SBPVSI (default not set).
+                */
+               skb = i40e_construct_skb_zc(rx_ring, *bi);
+-              *bi = NULL;
+               if (!skb) {
+                       rx_ring->rx_stats.alloc_buff_failed++;
+                       break;
+               }
+ 
++              *bi = NULL;
+               cleaned_count++;
+               i40e_inc_ntc(rx_ring);
+ 
+diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c 
b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
+index 2dcdec3eacc36..d1f7b51cab620 100644
+--- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
++++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
+@@ -5874,8 +5874,6 @@ static void mvpp2_phylink_validate(struct phylink_config 
*config,
+ 
+       phylink_set(mask, Autoneg);
+       phylink_set_port_modes(mask);
+-      phylink_set(mask, Pause);
+-      phylink_set(mask, Asym_Pause);
+ 
+       switch (state->interface) {
+       case PHY_INTERFACE_MODE_10GBASER:
+diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c 
b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c
+index 8fa286ccdd6bb..bf85ce9835d7f 100644
+--- a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c
++++ b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c
+@@ -19,7 +19,7 @@
+ #define MLXSW_THERMAL_ASIC_TEMP_NORM  75000   /* 75C */
+ #define MLXSW_THERMAL_ASIC_TEMP_HIGH  85000   /* 85C */
+ #define MLXSW_THERMAL_ASIC_TEMP_HOT   105000  /* 105C */
+-#define MLXSW_THERMAL_ASIC_TEMP_CRIT  110000  /* 110C */
++#define MLXSW_THERMAL_ASIC_TEMP_CRIT  140000  /* 140C */
+ #define MLXSW_THERMAL_HYSTERESIS_TEMP 5000    /* 5C */
+ #define MLXSW_THERMAL_MODULE_TEMP_SHIFT       (MLXSW_THERMAL_HYSTERESIS_TEMP 
* 2)
+ #define MLXSW_THERMAL_ZONE_MAX_NAME   16
+@@ -176,6 +176,12 @@ mlxsw_thermal_module_trips_update(struct device *dev, 
struct mlxsw_core *core,
+       if (err)
+               return err;
+ 
++      if (crit_temp > emerg_temp) {
++              dev_warn(dev, "%s : Critical threshold %d is above emergency 
threshold %d\n",
++                       tz->tzdev->type, crit_temp, emerg_temp);
++              return 0;
++      }
++
+       /* According to the system thermal requirements, the thermal zones are
+        * defined with four trip points. The critical and emergency
+        * temperature thresholds, provided by QSFP module are set as "active"
+@@ -190,11 +196,8 @@ mlxsw_thermal_module_trips_update(struct device *dev, 
struct mlxsw_core *core,
+               tz->trips[MLXSW_THERMAL_TEMP_TRIP_NORM].temp = crit_temp;
+       tz->trips[MLXSW_THERMAL_TEMP_TRIP_HIGH].temp = crit_temp;
+       tz->trips[MLXSW_THERMAL_TEMP_TRIP_HOT].temp = emerg_temp;
+-      if (emerg_temp > crit_temp)
+-              tz->trips[MLXSW_THERMAL_TEMP_TRIP_CRIT].temp = emerg_temp +
++      tz->trips[MLXSW_THERMAL_TEMP_TRIP_CRIT].temp = emerg_temp +
+                                       MLXSW_THERMAL_MODULE_TEMP_SHIFT;
+-      else
+-              tz->trips[MLXSW_THERMAL_TEMP_TRIP_CRIT].temp = emerg_temp;
+ 
+       return 0;
+ }
+diff --git a/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c 
b/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
+index f21847739ef1f..d258e0ccf9465 100644
+--- a/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
++++ b/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
+@@ -564,11 +564,6 @@ static const struct net_device_ops netxen_netdev_ops = {
+       .ndo_set_features = netxen_set_features,
+ };
+ 
+-static inline bool netxen_function_zero(struct pci_dev *pdev)
+-{
+-      return (PCI_FUNC(pdev->devfn) == 0) ? true : false;
+-}
+-
+ static inline void netxen_set_interrupt_mode(struct netxen_adapter *adapter,
+                                            u32 mode)
+ {
+@@ -664,7 +659,7 @@ static int netxen_setup_intr(struct netxen_adapter 
*adapter)
+       netxen_initialize_interrupt_registers(adapter);
+       netxen_set_msix_bit(pdev, 0);
+ 
+-      if (netxen_function_zero(pdev)) {
++      if (adapter->portnum == 0) {
+               if (!netxen_setup_msi_interrupts(adapter, num_msix))
+                       netxen_set_interrupt_mode(adapter, NETXEN_MSI_MODE);
+               else
+diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac5.c 
b/drivers/net/ethernet/stmicro/stmmac/dwmac5.c
+index 67ba67ed0cb99..de5255b951e14 100644
+--- a/drivers/net/ethernet/stmicro/stmmac/dwmac5.c
++++ b/drivers/net/ethernet/stmicro/stmmac/dwmac5.c
+@@ -572,68 +572,24 @@ static int dwmac5_est_write(void __iomem *ioaddr, u32 
reg, u32 val, bool gcl)
+ int dwmac5_est_configure(void __iomem *ioaddr, struct stmmac_est *cfg,
+                        unsigned int ptp_rate)
+ {
+-      u32 speed, total_offset, offset, ctrl, ctr_low;
+-      u32 extcfg = readl(ioaddr + GMAC_EXT_CONFIG);
+-      u32 mac_cfg = readl(ioaddr + GMAC_CONFIG);
+       int i, ret = 0x0;
+-      u64 total_ctr;
+-
+-      if (extcfg & GMAC_CONFIG_EIPG_EN) {
+-              offset = (extcfg & GMAC_CONFIG_EIPG) >> GMAC_CONFIG_EIPG_SHIFT;
+-              offset = 104 + (offset * 8);
+-      } else {
+-              offset = (mac_cfg & GMAC_CONFIG_IPG) >> GMAC_CONFIG_IPG_SHIFT;
+-              offset = 96 - (offset * 8);
+-      }
+-
+-      speed = mac_cfg & (GMAC_CONFIG_PS | GMAC_CONFIG_FES);
+-      speed = speed >> GMAC_CONFIG_FES_SHIFT;
+-
+-      switch (speed) {
+-      case 0x0:
+-              offset = offset * 1000; /* 1G */
+-              break;
+-      case 0x1:
+-              offset = offset * 400; /* 2.5G */
+-              break;
+-      case 0x2:
+-              offset = offset * 100000; /* 10M */
+-              break;
+-      case 0x3:
+-              offset = offset * 10000; /* 100M */
+-              break;
+-      default:
+-              return -EINVAL;
+-      }
+-
+-      offset = offset / 1000;
++      u32 ctrl;
+ 
+       ret |= dwmac5_est_write(ioaddr, BTR_LOW, cfg->btr[0], false);
+       ret |= dwmac5_est_write(ioaddr, BTR_HIGH, cfg->btr[1], false);
+       ret |= dwmac5_est_write(ioaddr, TER, cfg->ter, false);
+       ret |= dwmac5_est_write(ioaddr, LLR, cfg->gcl_size, false);
++      ret |= dwmac5_est_write(ioaddr, CTR_LOW, cfg->ctr[0], false);
++      ret |= dwmac5_est_write(ioaddr, CTR_HIGH, cfg->ctr[1], false);
+       if (ret)
+               return ret;
+ 
+-      total_offset = 0;
+       for (i = 0; i < cfg->gcl_size; i++) {
+-              ret = dwmac5_est_write(ioaddr, i, cfg->gcl[i] + offset, true);
++              ret = dwmac5_est_write(ioaddr, i, cfg->gcl[i], true);
+               if (ret)
+                       return ret;
+-
+-              total_offset += offset;
+       }
+ 
+-      total_ctr = cfg->ctr[0] + cfg->ctr[1] * 1000000000ULL;
+-      total_ctr += total_offset;
+-
+-      ctr_low = do_div(total_ctr, 1000000000);
+-
+-      ret |= dwmac5_est_write(ioaddr, CTR_LOW, ctr_low, false);
+-      ret |= dwmac5_est_write(ioaddr, CTR_HIGH, total_ctr, false);
+-      if (ret)
+-              return ret;
+-
+       ctrl = readl(ioaddr + MTL_EST_CONTROL);
+       ctrl &= ~PTOV;
+       ctrl |= ((1000000000 / ptp_rate) * 6) << PTOV_SHIFT;
+diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c 
b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+index c33db79cdd0ad..b3d6d8e3f4de9 100644
+--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
++++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+@@ -2158,7 +2158,7 @@ static int stmmac_napi_check(struct stmmac_priv *priv, 
u32 chan)
+                       spin_lock_irqsave(&ch->lock, flags);
+                       stmmac_disable_dma_irq(priv, priv->ioaddr, chan, 1, 0);
+                       spin_unlock_irqrestore(&ch->lock, flags);
+-                      __napi_schedule_irqoff(&ch->rx_napi);
++                      __napi_schedule(&ch->rx_napi);
+               }
+       }
+ 
+@@ -2167,7 +2167,7 @@ static int stmmac_napi_check(struct stmmac_priv *priv, 
u32 chan)
+                       spin_lock_irqsave(&ch->lock, flags);
+                       stmmac_disable_dma_irq(priv, priv->ioaddr, chan, 0, 1);
+                       spin_unlock_irqrestore(&ch->lock, flags);
+-                      __napi_schedule_irqoff(&ch->tx_napi);
++                      __napi_schedule(&ch->tx_napi);
+               }
+       }
+ 
+@@ -3996,6 +3996,7 @@ static int stmmac_change_mtu(struct net_device *dev, int 
new_mtu)
+ {
+       struct stmmac_priv *priv = netdev_priv(dev);
+       int txfifosz = priv->plat->tx_fifo_size;
++      const int mtu = new_mtu;
+ 
+       if (txfifosz == 0)
+               txfifosz = priv->dma_cap.tx_fifo_size;
+@@ -4013,7 +4014,7 @@ static int stmmac_change_mtu(struct net_device *dev, int 
new_mtu)
+       if ((txfifosz < new_mtu) || (new_mtu > BUF_SIZE_16KiB))
+               return -EINVAL;
+ 
+-      dev->mtu = new_mtu;
++      dev->mtu = mtu;
+ 
+       netdev_update_features(dev);
+ 
+diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c 
b/drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c
+index cc27d660a8185..06553d028d746 100644
+--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c
++++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c
+@@ -605,7 +605,8 @@ static int tc_setup_taprio(struct stmmac_priv *priv,
+ {
+       u32 size, wid = priv->dma_cap.estwid, dep = priv->dma_cap.estdep;
+       struct plat_stmmacenet_data *plat = priv->plat;
+-      struct timespec64 time;
++      struct timespec64 time, current_time;
++      ktime_t current_time_ns;
+       bool fpe = false;
+       int i, ret = 0;
+       u64 ctr;
+@@ -700,7 +701,22 @@ static int tc_setup_taprio(struct stmmac_priv *priv,
+       }
+ 
+       /* Adjust for real system time */
+-      time = ktime_to_timespec64(qopt->base_time);
++      priv->ptp_clock_ops.gettime64(&priv->ptp_clock_ops, &current_time);
++      current_time_ns = timespec64_to_ktime(current_time);
++      if (ktime_after(qopt->base_time, current_time_ns)) {
++              time = ktime_to_timespec64(qopt->base_time);
++      } else {
++              ktime_t base_time;
++              s64 n;
++
++              n = div64_s64(ktime_sub_ns(current_time_ns, qopt->base_time),
++                            qopt->cycle_time);
++              base_time = ktime_add_ns(qopt->base_time,
++                                       (n + 1) * qopt->cycle_time);
++
++              time = ktime_to_timespec64(base_time);
++      }
++
+       priv->plat->est->btr[0] = (u32)time.tv_nsec;
+       priv->plat->est->btr[1] = (u32)time.tv_sec;
+ 
+diff --git a/drivers/net/ipa/ipa_modem.c b/drivers/net/ipa/ipa_modem.c
+index e34fe2d77324e..9b08eb8239846 100644
+--- a/drivers/net/ipa/ipa_modem.c
++++ b/drivers/net/ipa/ipa_modem.c
+@@ -216,6 +216,7 @@ int ipa_modem_start(struct ipa *ipa)
+       ipa->name_map[IPA_ENDPOINT_AP_MODEM_TX]->netdev = netdev;
+       ipa->name_map[IPA_ENDPOINT_AP_MODEM_RX]->netdev = netdev;
+ 
++      SET_NETDEV_DEV(netdev, &ipa->pdev->dev);
+       priv = netdev_priv(netdev);
+       priv->ipa = ipa;
+ 
+diff --git a/drivers/net/phy/smsc.c b/drivers/net/phy/smsc.c
+index 0fc39ac5ca88b..10722fed666de 100644
+--- a/drivers/net/phy/smsc.c
++++ b/drivers/net/phy/smsc.c
+@@ -284,7 +284,8 @@ static int smsc_phy_probe(struct phy_device *phydev)
+       /* Make clk optional to keep DTB backward compatibility. */
+       priv->refclk = clk_get_optional(dev, NULL);
+       if (IS_ERR(priv->refclk))
+-              dev_err_probe(dev, PTR_ERR(priv->refclk), "Failed to request 
clock\n");
++              return dev_err_probe(dev, PTR_ERR(priv->refclk),
++                                   "Failed to request clock\n");
+ 
+       ret = clk_prepare_enable(priv->refclk);
+       if (ret)
+diff --git a/drivers/net/usb/rndis_host.c b/drivers/net/usb/rndis_host.c
+index 6fa7a009a24a4..f9b359d4e2939 100644
+--- a/drivers/net/usb/rndis_host.c
++++ b/drivers/net/usb/rndis_host.c
+@@ -387,7 +387,7 @@ generic_rndis_bind(struct usbnet *dev, struct 
usb_interface *intf, int flags)
+       reply_len = sizeof *phym;
+       retval = rndis_query(dev, intf, u.buf,
+                            RNDIS_OID_GEN_PHYSICAL_MEDIUM,
+-                           0, (void **) &phym, &reply_len);
++                           reply_len, (void **)&phym, &reply_len);
+       if (retval != 0 || !phym) {
+               /* OID is optional so don't fail here. */
+               phym_unspec = cpu_to_le32(RNDIS_PHYSICAL_MEDIUM_UNSPECIFIED);
+diff --git a/drivers/spi/spi-cadence.c b/drivers/spi/spi-cadence.c
+index 70467b9d61baa..a3afd1b9ac567 100644
+--- a/drivers/spi/spi-cadence.c
++++ b/drivers/spi/spi-cadence.c
+@@ -115,6 +115,7 @@ struct cdns_spi {
+       void __iomem *regs;
+       struct clk *ref_clk;
+       struct clk *pclk;
++      unsigned int clk_rate;
+       u32 speed_hz;
+       const u8 *txbuf;
+       u8 *rxbuf;
+@@ -250,7 +251,7 @@ static void cdns_spi_config_clock_freq(struct spi_device 
*spi,
+       u32 ctrl_reg, baud_rate_val;
+       unsigned long frequency;
+ 
+-      frequency = clk_get_rate(xspi->ref_clk);
++      frequency = xspi->clk_rate;
+ 
+       ctrl_reg = cdns_spi_read(xspi, CDNS_SPI_CR);
+ 
+@@ -558,8 +559,9 @@ static int cdns_spi_probe(struct platform_device *pdev)
+       master->auto_runtime_pm = true;
+       master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH;
+ 
++      xspi->clk_rate = clk_get_rate(xspi->ref_clk);
+       /* Set to default valid value */
+-      master->max_speed_hz = clk_get_rate(xspi->ref_clk) / 4;
++      master->max_speed_hz = xspi->clk_rate / 4;
+       xspi->speed_hz = master->max_speed_hz;
+ 
+       master->bits_per_word_mask = SPI_BPW_MASK(8);
+diff --git a/drivers/spi/spi-fsl-spi.c b/drivers/spi/spi-fsl-spi.c
+index 9494257e1c33f..6d8e0a05a5355 100644
+--- a/drivers/spi/spi-fsl-spi.c
++++ b/drivers/spi/spi-fsl-spi.c
+@@ -115,14 +115,13 @@ static void fsl_spi_chipselect(struct spi_device *spi, 
int value)
+ {
+       struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(spi->master);
+       struct fsl_spi_platform_data *pdata;
+-      bool pol = spi->mode & SPI_CS_HIGH;
+       struct spi_mpc8xxx_cs   *cs = spi->controller_state;
+ 
+       pdata = spi->dev.parent->parent->platform_data;
+ 
+       if (value == BITBANG_CS_INACTIVE) {
+               if (pdata->cs_control)
+-                      pdata->cs_control(spi, !pol);
++                      pdata->cs_control(spi, false);
+       }
+ 
+       if (value == BITBANG_CS_ACTIVE) {
+@@ -134,7 +133,7 @@ static void fsl_spi_chipselect(struct spi_device *spi, int 
value)
+               fsl_spi_change_mode(spi);
+ 
+               if (pdata->cs_control)
+-                      pdata->cs_control(spi, pol);
++                      pdata->cs_control(spi, true);
+       }
+ }
+ 
+diff --git a/fs/nfsd/nfs3xdr.c b/fs/nfsd/nfs3xdr.c
+index 2277f83da2501..716566da400e1 100644
+--- a/fs/nfsd/nfs3xdr.c
++++ b/fs/nfsd/nfs3xdr.c
+@@ -863,9 +863,14 @@ compose_entry_fh(struct nfsd3_readdirres *cd, struct 
svc_fh *fhp,
+       if (isdotent(name, namlen)) {
+               if (namlen == 2) {
+                       dchild = dget_parent(dparent);
+-                      /* filesystem root - cannot return filehandle for ".." 
*/
++                      /*
++                       * Don't return filehandle for ".." if we're at
++                       * the filesystem or export root:
++                       */
+                       if (dchild == dparent)
+                               goto out;
++                      if (dparent == exp->ex_path.dentry)
++                              goto out;
+               } else
+                       dchild = dget(dparent);
+       } else
+diff --git a/kernel/bpf/cgroup.c b/kernel/bpf/cgroup.c
+index 6ec088a96302f..96555a8a2c545 100644
+--- a/kernel/bpf/cgroup.c
++++ b/kernel/bpf/cgroup.c
+@@ -1391,12 +1391,13 @@ int __cgroup_bpf_run_filter_setsockopt(struct sock 
*sk, int *level,
+               if (ctx.optlen != 0) {
+                       *optlen = ctx.optlen;
+                       *kernel_optval = ctx.optval;
++                      /* export and don't free sockopt buf */
++                      return 0;
+               }
+       }
+ 
+ out:
+-      if (ret)
+-              sockopt_free_buf(&ctx);
++      sockopt_free_buf(&ctx);
+       return ret;
+ }
+ 
+diff --git a/kernel/bpf/helpers.c b/kernel/bpf/helpers.c
+index deda1185237b8..c489430cac78c 100644
+--- a/kernel/bpf/helpers.c
++++ b/kernel/bpf/helpers.c
+@@ -108,7 +108,7 @@ BPF_CALL_2(bpf_map_peek_elem, struct bpf_map *, map, void 
*, value)
+ }
+ 
+ const struct bpf_func_proto bpf_map_peek_elem_proto = {
+-      .func           = bpf_map_pop_elem,
++      .func           = bpf_map_peek_elem,
+       .gpl_only       = false,
+       .ret_type       = RET_INTEGER,
+       .arg1_type      = ARG_CONST_MAP_PTR,
+diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
+index 53fe6ef6d931f..618cb1b451ade 100644
+--- a/kernel/bpf/verifier.c
++++ b/kernel/bpf/verifier.c
+@@ -2214,6 +2214,8 @@ static bool is_spillable_regtype(enum bpf_reg_type type)
+       case PTR_TO_RDWR_BUF:
+       case PTR_TO_RDWR_BUF_OR_NULL:
+       case PTR_TO_PERCPU_BTF_ID:
++      case PTR_TO_MEM:
++      case PTR_TO_MEM_OR_NULL:
+               return true;
+       default:
+               return false;
+@@ -5255,7 +5257,7 @@ static bool signed_add_overflows(s64 a, s64 b)
+       return res < a;
+ }
+ 
+-static bool signed_add32_overflows(s64 a, s64 b)
++static bool signed_add32_overflows(s32 a, s32 b)
+ {
+       /* Do the add in u32, where overflow is well-defined */
+       s32 res = (s32)((u32)a + (u32)b);
+@@ -5265,7 +5267,7 @@ static bool signed_add32_overflows(s64 a, s64 b)
+       return res < a;
+ }
+ 
+-static bool signed_sub_overflows(s32 a, s32 b)
++static bool signed_sub_overflows(s64 a, s64 b)
+ {
+       /* Do the sub in u64, where overflow is well-defined */
+       s64 res = (s64)((u64)a - (u64)b);
+@@ -5277,7 +5279,7 @@ static bool signed_sub_overflows(s32 a, s32 b)
+ 
+ static bool signed_sub32_overflows(s32 a, s32 b)
+ {
+-      /* Do the sub in u64, where overflow is well-defined */
++      /* Do the sub in u32, where overflow is well-defined */
+       s32 res = (s32)((u32)a - (u32)b);
+ 
+       if (b < 0)
+diff --git a/net/core/skbuff.c b/net/core/skbuff.c
+index fbadd93b95ace..f0d6dba37b43d 100644
+--- a/net/core/skbuff.c
++++ b/net/core/skbuff.c
+@@ -496,13 +496,17 @@ EXPORT_SYMBOL(__netdev_alloc_skb);
+ struct sk_buff *__napi_alloc_skb(struct napi_struct *napi, unsigned int len,
+                                gfp_t gfp_mask)
+ {
+-      struct napi_alloc_cache *nc = this_cpu_ptr(&napi_alloc_cache);
++      struct napi_alloc_cache *nc;
+       struct sk_buff *skb;
+       void *data;
+ 
+       len += NET_SKB_PAD + NET_IP_ALIGN;
+ 
+-      if ((len > SKB_WITH_OVERHEAD(PAGE_SIZE)) ||
++      /* If requested length is either too small or too big,
++       * we use kmalloc() for skb->head allocation.
++       */
++      if (len <= SKB_WITH_OVERHEAD(1024) ||
++          len > SKB_WITH_OVERHEAD(PAGE_SIZE) ||
+           (gfp_mask & (__GFP_DIRECT_RECLAIM | GFP_DMA))) {
+               skb = __alloc_skb(len, gfp_mask, SKB_ALLOC_RX, NUMA_NO_NODE);
+               if (!skb)
+@@ -510,6 +514,7 @@ struct sk_buff *__napi_alloc_skb(struct napi_struct *napi, 
unsigned int len,
+               goto skb_success;
+       }
+ 
++      nc = this_cpu_ptr(&napi_alloc_cache);
+       len += SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
+       len = SKB_DATA_ALIGN(len);
+ 
+@@ -3648,7 +3653,8 @@ struct sk_buff *skb_segment_list(struct sk_buff *skb,
+       unsigned int delta_truesize = 0;
+       unsigned int delta_len = 0;
+       struct sk_buff *tail = NULL;
+-      struct sk_buff *nskb;
++      struct sk_buff *nskb, *tmp;
++      int err;
+ 
+       skb_push(skb, -skb_network_offset(skb) + offset);
+ 
+@@ -3658,11 +3664,28 @@ struct sk_buff *skb_segment_list(struct sk_buff *skb,
+               nskb = list_skb;
+               list_skb = list_skb->next;
+ 
++              err = 0;
++              if (skb_shared(nskb)) {
++                      tmp = skb_clone(nskb, GFP_ATOMIC);
++                      if (tmp) {
++                              consume_skb(nskb);
++                              nskb = tmp;
++                              err = skb_unclone(nskb, GFP_ATOMIC);
++                      } else {
++                              err = -ENOMEM;
++                      }
++              }
++
+               if (!tail)
+                       skb->next = nskb;
+               else
+                       tail->next = nskb;
+ 
++              if (unlikely(err)) {
++                      nskb->next = list_skb;
++                      goto err_linearize;
++              }
++
+               tail = nskb;
+ 
+               delta_len += nskb->len;
+diff --git a/net/core/sock_reuseport.c b/net/core/sock_reuseport.c
+index bbdd3c7b6cb5b..b065f0a103ed0 100644
+--- a/net/core/sock_reuseport.c
++++ b/net/core/sock_reuseport.c
+@@ -293,7 +293,7 @@ select_by_hash:
+                       i = j = reciprocal_scale(hash, socks);
+                       while (reuse->socks[i]->sk_state == TCP_ESTABLISHED) {
+                               i++;
+-                              if (i >= reuse->num_socks)
++                              if (i >= socks)
+                                       i = 0;
+                               if (i == j)
+                                       goto out;
+diff --git a/net/dcb/dcbnl.c b/net/dcb/dcbnl.c
+index 16014ad194066..a352ce4f878a3 100644
+--- a/net/dcb/dcbnl.c
++++ b/net/dcb/dcbnl.c
+@@ -1765,6 +1765,8 @@ static int dcb_doit(struct sk_buff *skb, struct nlmsghdr 
*nlh,
+       fn = &reply_funcs[dcb->cmd];
+       if (!fn->cb)
+               return -EOPNOTSUPP;
++      if (fn->type == RTM_SETDCB && !netlink_capable(skb, CAP_NET_ADMIN))
++              return -EPERM;
+ 
+       if (!tb[DCB_ATTR_IFNAME])
+               return -EINVAL;
+diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c
+index 183003e45762a..a47e0f9b20d0a 100644
+--- a/net/dsa/dsa2.c
++++ b/net/dsa/dsa2.c
+@@ -353,9 +353,13 @@ static int dsa_port_devlink_setup(struct dsa_port *dp)
+ 
+ static void dsa_port_teardown(struct dsa_port *dp)
+ {
++      struct devlink_port *dlp = &dp->devlink_port;
++
+       if (!dp->setup)
+               return;
+ 
++      devlink_port_type_clear(dlp);
++
+       switch (dp->type) {
+       case DSA_PORT_TYPE_UNUSED:
+               break;
+diff --git a/net/dsa/master.c b/net/dsa/master.c
+index c91de041a91d8..3a44da35dfeba 100644
+--- a/net/dsa/master.c
++++ b/net/dsa/master.c
+@@ -308,8 +308,18 @@ static struct lock_class_key 
dsa_master_addr_list_lock_key;
+ 
+ int dsa_master_setup(struct net_device *dev, struct dsa_port *cpu_dp)
+ {
++      struct dsa_switch *ds = cpu_dp->ds;
++      struct device_link *consumer_link;
+       int ret;
+ 
++      /* The DSA master must use SET_NETDEV_DEV for this to work. */
++      consumer_link = device_link_add(ds->dev, dev->dev.parent,
++                                      DL_FLAG_AUTOREMOVE_CONSUMER);
++      if (!consumer_link)
++              netdev_err(dev,
++                         "Failed to create a device link to DSA switch %s\n",
++                         dev_name(ds->dev));
++
+       rtnl_lock();
+       ret = dev_set_mtu(dev, ETH_DATA_LEN + cpu_dp->tag_ops->overhead);
+       rtnl_unlock();
+diff --git a/net/ipv4/esp4.c b/net/ipv4/esp4.c
+index 8b07f3a4f2db2..a3271ec3e1627 100644
+--- a/net/ipv4/esp4.c
++++ b/net/ipv4/esp4.c
+@@ -443,7 +443,6 @@ static int esp_output_encap(struct xfrm_state *x, struct 
sk_buff *skb,
+ int esp_output_head(struct xfrm_state *x, struct sk_buff *skb, struct 
esp_info *esp)
+ {
+       u8 *tail;
+-      u8 *vaddr;
+       int nfrags;
+       int esph_offset;
+       struct page *page;
+@@ -485,14 +484,10 @@ int esp_output_head(struct xfrm_state *x, struct sk_buff 
*skb, struct esp_info *
+                       page = pfrag->page;
+                       get_page(page);
+ 
+-                      vaddr = kmap_atomic(page);
+-
+-                      tail = vaddr + pfrag->offset;
++                      tail = page_address(page) + pfrag->offset;
+ 
+                       esp_output_fill_trailer(tail, esp->tfclen, esp->plen, 
esp->proto);
+ 
+-                      kunmap_atomic(vaddr);
+-
+                       nfrags = skb_shinfo(skb)->nr_frags;
+ 
+                       __skb_fill_page_desc(skb, nfrags, page, pfrag->offset,
+diff --git a/net/ipv6/esp6.c b/net/ipv6/esp6.c
+index 52c2f063529fb..2b804fcebcc65 100644
+--- a/net/ipv6/esp6.c
++++ b/net/ipv6/esp6.c
+@@ -478,7 +478,6 @@ static int esp6_output_encap(struct xfrm_state *x, struct 
sk_buff *skb,
+ int esp6_output_head(struct xfrm_state *x, struct sk_buff *skb, struct 
esp_info *esp)
+ {
+       u8 *tail;
+-      u8 *vaddr;
+       int nfrags;
+       int esph_offset;
+       struct page *page;
+@@ -519,14 +518,10 @@ int esp6_output_head(struct xfrm_state *x, struct 
sk_buff *skb, struct esp_info
+                       page = pfrag->page;
+                       get_page(page);
+ 
+-                      vaddr = kmap_atomic(page);
+-
+-                      tail = vaddr + pfrag->offset;
++                      tail = page_address(page) + pfrag->offset;
+ 
+                       esp_output_fill_trailer(tail, esp->tfclen, esp->plen, 
esp->proto);
+ 
+-                      kunmap_atomic(vaddr);
+-
+                       nfrags = skb_shinfo(skb)->nr_frags;
+ 
+                       __skb_fill_page_desc(skb, nfrags, page, pfrag->offset,
+diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
+index 749ad72386b23..077d43af8226b 100644
+--- a/net/ipv6/ip6_output.c
++++ b/net/ipv6/ip6_output.c
+@@ -125,8 +125,43 @@ static int ip6_finish_output2(struct net *net, struct 
sock *sk, struct sk_buff *
+       return -EINVAL;
+ }
+ 
++static int
++ip6_finish_output_gso_slowpath_drop(struct net *net, struct sock *sk,
++                                  struct sk_buff *skb, unsigned int mtu)
++{
++      struct sk_buff *segs, *nskb;
++      netdev_features_t features;
++      int ret = 0;
++
++      /* Please see corresponding comment in ip_finish_output_gso
++       * describing the cases where GSO segment length exceeds the
++       * egress MTU.
++       */
++      features = netif_skb_features(skb);
++      segs = skb_gso_segment(skb, features & ~NETIF_F_GSO_MASK);
++      if (IS_ERR_OR_NULL(segs)) {
++              kfree_skb(skb);
++              return -ENOMEM;
++      }
++
++      consume_skb(skb);
++
++      skb_list_walk_safe(segs, segs, nskb) {
++              int err;
++
++              skb_mark_not_on_list(segs);
++              err = ip6_fragment(net, sk, segs, ip6_finish_output2);
++              if (err && ret == 0)
++                      ret = err;
++      }
++
++      return ret;
++}
++
+ static int __ip6_finish_output(struct net *net, struct sock *sk, struct 
sk_buff *skb)
+ {
++      unsigned int mtu;
++
+ #if defined(CONFIG_NETFILTER) && defined(CONFIG_XFRM)
+       /* Policy lookup after SNAT yielded a new policy */
+       if (skb_dst(skb)->xfrm) {
+@@ -135,7 +170,11 @@ static int __ip6_finish_output(struct net *net, struct 
sock *sk, struct sk_buff
+       }
+ #endif
+ 
+-      if ((skb->len > ip6_skb_dst_mtu(skb) && !skb_is_gso(skb)) ||
++      mtu = ip6_skb_dst_mtu(skb);
++      if (skb_is_gso(skb) && !skb_gso_validate_network_len(skb, mtu))
++              return ip6_finish_output_gso_slowpath_drop(net, sk, skb, mtu);
++
++      if ((skb->len > mtu && !skb_is_gso(skb)) ||
+           dst_allfrag(skb_dst(skb)) ||
+           (IP6CB(skb)->frag_max_size && skb->len > IP6CB(skb)->frag_max_size))
+               return ip6_fragment(net, sk, skb, ip6_finish_output2);
+diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c
+index 5e7983cb61546..ff048cb8d8074 100644
+--- a/net/ipv6/sit.c
++++ b/net/ipv6/sit.c
+@@ -1645,8 +1645,11 @@ static int ipip6_newlink(struct net *src_net, struct 
net_device *dev,
+       }
+ 
+ #ifdef CONFIG_IPV6_SIT_6RD
+-      if (ipip6_netlink_6rd_parms(data, &ip6rd))
++      if (ipip6_netlink_6rd_parms(data, &ip6rd)) {
+               err = ipip6_tunnel_update_6rd(nt, &ip6rd);
++              if (err < 0)
++                      unregister_netdevice_queue(dev, NULL);
++      }
+ #endif
+ 
+       return err;
+diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
+index 56a4d0d20a267..ca1e9de388910 100644
+--- a/net/mac80211/tx.c
++++ b/net/mac80211/tx.c
+@@ -662,7 +662,7 @@ ieee80211_tx_h_select_key(struct ieee80211_tx_data *tx)
+               if (!skip_hw && tx->key &&
+                   tx->key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE)
+                       info->control.hw_key = &tx->key->conf;
+-      } else if (!ieee80211_is_mgmt(hdr->frame_control) && tx->sta &&
++      } else if (ieee80211_is_data_present(hdr->frame_control) && tx->sta &&
+                  test_sta_flag(tx->sta, WLAN_STA_USES_ENCRYPTION)) {
+               return TX_DROP;
+       }
+@@ -3836,7 +3836,7 @@ void __ieee80211_schedule_txq(struct ieee80211_hw *hw,
+                * get immediately moved to the back of the list on the next
+                * call to ieee80211_next_txq().
+                */
+-              if (txqi->txq.sta &&
++              if (txqi->txq.sta && local->airtime_flags &&
+                   wiphy_ext_feature_isset(local->hw.wiphy,
+                                           
NL80211_EXT_FEATURE_AIRTIME_FAIRNESS))
+                       list_add(&txqi->schedule_order,
+diff --git a/net/rxrpc/input.c b/net/rxrpc/input.c
+index 667c44aa5a63c..dc201363f2c48 100644
+--- a/net/rxrpc/input.c
++++ b/net/rxrpc/input.c
+@@ -430,7 +430,7 @@ static void rxrpc_input_data(struct rxrpc_call *call, 
struct sk_buff *skb)
+               return;
+       }
+ 
+-      if (call->state == RXRPC_CALL_SERVER_RECV_REQUEST) {
++      if (state == RXRPC_CALL_SERVER_RECV_REQUEST) {
+               unsigned long timo = READ_ONCE(call->next_req_timo);
+               unsigned long now, expect_req_by;
+ 
+diff --git a/net/rxrpc/key.c b/net/rxrpc/key.c
+index 2e8bd3b97301e..979338a64c0ca 100644
+--- a/net/rxrpc/key.c
++++ b/net/rxrpc/key.c
+@@ -1109,7 +1109,7 @@ static long rxrpc_read(const struct key *key,
+               default: /* we have a ticket we can't encode */
+                       pr_err("Unsupported key token type (%u)\n",
+                              token->security_index);
+-                      continue;
++                      return -ENOPKG;
+               }
+ 
+               _debug("token[%u]: toksize=%u", ntoks, toksize);
+@@ -1224,7 +1224,9 @@ static long rxrpc_read(const struct key *key,
+                       break;
+ 
+               default:
+-                      break;
++                      pr_err("Unsupported key token type (%u)\n",
++                             token->security_index);
++                      return -ENOPKG;
+               }
+ 
+               ASSERTCMP((unsigned long)xdr - (unsigned long)oldxdr, ==,
+diff --git a/net/tipc/link.c b/net/tipc/link.c
+index 06b880da2a8ea..c92e6984933cb 100644
+--- a/net/tipc/link.c
++++ b/net/tipc/link.c
+@@ -996,7 +996,6 @@ void tipc_link_reset(struct tipc_link *l)
+ int tipc_link_xmit(struct tipc_link *l, struct sk_buff_head *list,
+                  struct sk_buff_head *xmitq)
+ {
+-      struct tipc_msg *hdr = buf_msg(skb_peek(list));
+       struct sk_buff_head *backlogq = &l->backlogq;
+       struct sk_buff_head *transmq = &l->transmq;
+       struct sk_buff *skb, *_skb;
+@@ -1004,13 +1003,18 @@ int tipc_link_xmit(struct tipc_link *l, struct 
sk_buff_head *list,
+       u16 ack = l->rcv_nxt - 1;
+       u16 seqno = l->snd_nxt;
+       int pkt_cnt = skb_queue_len(list);
+-      int imp = msg_importance(hdr);
+       unsigned int mss = tipc_link_mss(l);
+       unsigned int cwin = l->window;
+       unsigned int mtu = l->mtu;
++      struct tipc_msg *hdr;
+       bool new_bundle;
+       int rc = 0;
++      int imp;
++
++      if (pkt_cnt <= 0)
++              return 0;
+ 
++      hdr = buf_msg(skb_peek(list));
+       if (unlikely(msg_size(hdr) > mtu)) {
+               pr_warn("Too large msg, purging xmit list %d %d %d %d %d!\n",
+                       skb_queue_len(list), msg_user(hdr),
+@@ -1019,6 +1023,7 @@ int tipc_link_xmit(struct tipc_link *l, struct 
sk_buff_head *list,
+               return -EMSGSIZE;
+       }
+ 
++      imp = msg_importance(hdr);
+       /* Allow oversubscription of one data msg per source at congestion */
+       if (unlikely(l->backlog[imp].len >= l->backlog[imp].limit)) {
+               if (imp == TIPC_SYSTEM_IMPORTANCE) {
+diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
+index 2c40e68853dde..e46df0a2d4f9d 100644
+--- a/scripts/kconfig/Makefile
++++ b/scripts/kconfig/Makefile
+@@ -94,6 +94,16 @@ configfiles=$(wildcard $(srctree)/kernel/configs/$@ 
$(srctree)/arch/$(SRCARCH)/c
+       $(Q)$(CONFIG_SHELL) $(srctree)/scripts/kconfig/merge_config.sh -m 
.config $(configfiles)
+       $(Q)$(MAKE) -f $(srctree)/Makefile olddefconfig
+ 
++PHONY += kvmconfig
++kvmconfig: kvm_guest.config
++      @echo >&2 "WARNING: 'make $@' will be removed after Linux 5.10"
++      @echo >&2 "         Please use 'make $<' instead."
++
++PHONY += xenconfig
++xenconfig: xen.config
++      @echo >&2 "WARNING: 'make $@' will be removed after Linux 5.10"
++      @echo >&2 "         Please use 'make $<' instead."
++
+ PHONY += tinyconfig
+ tinyconfig:
+       $(Q)$(MAKE) -f $(srctree)/Makefile allnoconfig tiny.config
+diff --git a/tools/testing/selftests/bpf/progs/profiler.inc.h 
b/tools/testing/selftests/bpf/progs/profiler.inc.h
+index 30982a7e4d0f7..4896fdf816f73 100644
+--- a/tools/testing/selftests/bpf/progs/profiler.inc.h
++++ b/tools/testing/selftests/bpf/progs/profiler.inc.h
+@@ -256,6 +256,7 @@ static INLINE void* populate_cgroup_info(struct 
cgroup_data_t* cgroup_data,
+               BPF_CORE_READ(task, nsproxy, cgroup_ns, root_cset, dfl_cgrp, 
kn);
+       struct kernfs_node* proc_kernfs = BPF_CORE_READ(task, cgroups, 
dfl_cgrp, kn);
+ 
++#if __has_builtin(__builtin_preserve_enum_value)
+       if (ENABLE_CGROUP_V1_RESOLVER && CONFIG_CGROUP_PIDS) {
+               int cgrp_id = bpf_core_enum_value(enum cgroup_subsys_id___local,
+                                                 pids_cgrp_id___local);
+@@ -275,6 +276,7 @@ static INLINE void* populate_cgroup_info(struct 
cgroup_data_t* cgroup_data,
+                       }
+               }
+       }
++#endif
+ 
+       cgroup_data->cgroup_root_inode = get_inode_from_kernfs(root_kernfs);
+       cgroup_data->cgroup_proc_inode = get_inode_from_kernfs(proc_kernfs);

Reply via email to