Merge 5.10.10 into android12-5.10
Changes in 5.10.10 Revert "kconfig: remove 'kvmconfig' and 'xenconfig' shorthands" bpf: Fix selftest compilation on clang 11 x86/hyperv: Initialize clockevents after LAPIC is initialized drm/amdgpu/display: drop DCN support for aarch64 bpf: Fix signed_{sub,add32}_overflows type handling X.509: Fix crash caused by NULL pointer nfsd4: readdirplus shouldn't return parent of export bpf: Don't leak memory in bpf getsockopt when optlen == 0 bpf: Support PTR_TO_MEM{,_OR_NULL} register spilling bpf: Fix helper bpf_map_peek_elem_proto pointing to wrong callback net: ipa: modem: add missing SET_NETDEV_DEV() for proper sysfs links net: fix use-after-free when UDP GRO with shared fraglist udp: Prevent reuseport_select_sock from reading uninitialized socks netxen_nic: fix MSI/MSI-x interrupts net: ipv6: Validate GSO SKB before finish IPv6 processing tipc: fix NULL deref in tipc_link_xmit() mlxsw: core: Add validation of transceiver temperature thresholds mlxsw: core: Increase critical threshold for ASIC thermal zone net: mvpp2: Remove Pause and Asym_Pause support rndis_host: set proper input size for OID_GEN_PHYSICAL_MEDIUM request esp: avoid unneeded kmap_atomic call net: dcb: Validate netlink message in DCB handler net: dcb: Accept RTM_GETDCB messages carrying set-like DCB commands rxrpc: Call state should be read with READ_ONCE() under some circumstances i40e: fix potential NULL pointer dereferencing net: stmmac: Fixed mtu channged by cache aligned net: sit: unregister_netdevice on newlink's error path net: stmmac: fix taprio schedule configuration net: stmmac: fix taprio configuration when base_time is in the past net: avoid 32 x truesize under-estimation for tiny skbs dt-bindings: net: renesas,etheravb: RZ/G2H needs tx-internal-delay-ps net: phy: smsc: fix clk error handling net: dsa: clear devlink port type before unregistering slave netdevs rxrpc: Fix handling of an unsupported token type in rxrpc_read() net: stmmac: use __napi_schedule() for PREEMPT_RT can: mcp251xfd: mcp251xfd_handle_rxif_one(): fix wrong NULL pointer check drm/panel: otm8009a: allow using non-continuous dsi clock mac80211: do not drop tx nulldata packets on encrypted links mac80211: check if atf has been disabled in __ieee80211_schedule_txq net: dsa: unbind all switches from tree when DSA master unbinds cxgb4/chtls: Fix tid stuck due to wrong update of qid spi: fsl: Fix driver breakage when SPI_CS_HIGH is not set in spi->mode spi: cadence: cache reference clock rate during probe Linux 5.10.10 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Change-Id: I6528a325f8f0105e55906930796038affe6a86f6
This commit is contained in:
@@ -163,6 +163,7 @@ allOf:
|
|||||||
enum:
|
enum:
|
||||||
- renesas,etheravb-r8a774a1
|
- renesas,etheravb-r8a774a1
|
||||||
- renesas,etheravb-r8a774b1
|
- renesas,etheravb-r8a774b1
|
||||||
|
- renesas,etheravb-r8a774e1
|
||||||
- renesas,etheravb-r8a7795
|
- renesas,etheravb-r8a7795
|
||||||
- renesas,etheravb-r8a7796
|
- renesas,etheravb-r8a7796
|
||||||
- renesas,etheravb-r8a77961
|
- renesas,etheravb-r8a77961
|
||||||
|
2
Makefile
2
Makefile
@@ -1,7 +1,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
VERSION = 5
|
VERSION = 5
|
||||||
PATCHLEVEL = 10
|
PATCHLEVEL = 10
|
||||||
SUBLEVEL = 9
|
SUBLEVEL = 10
|
||||||
EXTRAVERSION =
|
EXTRAVERSION =
|
||||||
NAME = Kleptomaniac Octopus
|
NAME = Kleptomaniac Octopus
|
||||||
|
|
||||||
|
@@ -312,6 +312,25 @@ static struct syscore_ops hv_syscore_ops = {
|
|||||||
.resume = hv_resume,
|
.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
|
* This function is to be invoked early in the boot sequence after the
|
||||||
* hypervisor has been detected.
|
* hypervisor has been detected.
|
||||||
@@ -390,10 +409,14 @@ void __init hyperv_init(void)
|
|||||||
wrmsrl(HV_X64_MSR_HYPERCALL, hypercall_msr.as_uint64);
|
wrmsrl(HV_X64_MSR_HYPERCALL, hypercall_msr.as_uint64);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Ignore any errors in setting up stimer clockevents
|
* hyperv_init() is called before LAPIC is initialized: see
|
||||||
* as we can run with the LAPIC timer as a fallback.
|
* 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();
|
hv_apic_init();
|
||||||
|
|
||||||
|
@@ -356,7 +356,8 @@ int public_key_verify_signature(const struct public_key *pkey,
|
|||||||
if (ret)
|
if (ret)
|
||||||
goto error_free_key;
|
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);
|
ret = cert_sig_digest_update(sig, tfm);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto error_free_key;
|
goto error_free_key;
|
||||||
|
@@ -6,7 +6,7 @@ config DRM_AMD_DC
|
|||||||
bool "AMD DC - Enable new display engine"
|
bool "AMD DC - Enable new display engine"
|
||||||
default y
|
default y
|
||||||
select SND_HDA_COMPONENT if SND_HDA_CORE
|
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
|
help
|
||||||
Choose this option if you want to use the new display engine
|
Choose this option if you want to use the new display engine
|
||||||
support for AMDGPU. This adds required support for Vega and
|
support for AMDGPU. This adds required support for Vega and
|
||||||
|
@@ -33,10 +33,6 @@ ifdef CONFIG_PPC64
|
|||||||
calcs_ccflags := -mhard-float -maltivec
|
calcs_ccflags := -mhard-float -maltivec
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifdef CONFIG_ARM64
|
|
||||||
calcs_rcflags := -mgeneral-regs-only
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef CONFIG_CC_IS_GCC
|
ifdef CONFIG_CC_IS_GCC
|
||||||
ifeq ($(call cc-ifversion, -lt, 0701, y), y)
|
ifeq ($(call cc-ifversion, -lt, 0701, y), y)
|
||||||
IS_OLD_GCC = 1
|
IS_OLD_GCC = 1
|
||||||
@@ -57,9 +53,6 @@ endif
|
|||||||
CFLAGS_$(AMDDALPATH)/dc/calcs/dcn_calcs.o := $(calcs_ccflags)
|
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_auto.o := $(calcs_ccflags)
|
||||||
CFLAGS_$(AMDDALPATH)/dc/calcs/dcn_calc_math.o := $(calcs_ccflags) -Wno-tautological-compare
|
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
|
BW_CALCS = dce_calcs.o bw_fixed.o custom_float.o
|
||||||
|
|
||||||
|
@@ -104,13 +104,6 @@ ifdef CONFIG_PPC64
|
|||||||
CFLAGS_$(AMDDALPATH)/dc/clk_mgr/dcn21/rn_clk_mgr.o := $(call cc-option,-mno-gnu-attribute)
|
CFLAGS_$(AMDDALPATH)/dc/clk_mgr/dcn21/rn_clk_mgr.o := $(call cc-option,-mno-gnu-attribute)
|
||||||
endif
|
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_DAL_CLK_MGR_DCN21 = $(addprefix $(AMDDALPATH)/dc/clk_mgr/dcn21/,$(CLK_MGR_DCN21))
|
||||||
|
|
||||||
AMD_DISPLAY_FILES += $(AMD_DAL_CLK_MGR_DCN21)
|
AMD_DISPLAY_FILES += $(AMD_DAL_CLK_MGR_DCN21)
|
||||||
|
@@ -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))
|
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)
|
AMD_DISPLAY_FILES += $(AMD_DAL_DCN10)
|
||||||
|
@@ -1339,47 +1339,6 @@ static uint32_t read_pipe_fuses(struct dc_context *ctx)
|
|||||||
return value;
|
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(
|
static bool dcn10_resource_construct(
|
||||||
uint8_t num_virtual_links,
|
uint8_t num_virtual_links,
|
||||||
struct dc *dc,
|
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_ip, &dcn10_ip_defaults, sizeof(dcn10_ip_defaults));
|
||||||
memcpy(dc->dcn_soc, &dcn10_soc_defaults, sizeof(dcn10_soc_defaults));
|
memcpy(dc->dcn_soc, &dcn10_soc_defaults, sizeof(dcn10_soc_defaults));
|
||||||
|
|
||||||
#if defined(CONFIG_ARM64)
|
if (dc->ctx->dce_version == DCN_VERSION_1_01) {
|
||||||
/* Aarch64 does not support -msoft-float/-mfloat-abi=soft */
|
struct dcn_soc_bounding_box *dcn_soc = dc->dcn_soc;
|
||||||
DC_FP_START();
|
struct dcn_ip_params *dcn_ip = dc->dcn_ip;
|
||||||
dcn10_resource_construct_fp(dc);
|
struct display_mode_lib *dml = &dc->dml;
|
||||||
DC_FP_END();
|
|
||||||
#else
|
dml->ip.max_num_dpp = 3;
|
||||||
/* Other architectures we build for build this with soft-float */
|
/* TODO how to handle 23.84? */
|
||||||
dcn10_resource_construct_fp(dc);
|
dcn_soc->dram_clock_change_latency = 23;
|
||||||
#endif
|
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);
|
pool->base.pp_smu = dcn10_pp_smu_create(ctx);
|
||||||
|
|
||||||
|
@@ -17,10 +17,6 @@ ifdef CONFIG_PPC64
|
|||||||
CFLAGS_$(AMDDALPATH)/dc/dcn20/dcn20_resource.o := -mhard-float -maltivec
|
CFLAGS_$(AMDDALPATH)/dc/dcn20/dcn20_resource.o := -mhard-float -maltivec
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifdef CONFIG_ARM64
|
|
||||||
CFLAGS_REMOVE_$(AMDDALPATH)/dc/dcn20/dcn20_resource.o := -mgeneral-regs-only
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef CONFIG_CC_IS_GCC
|
ifdef CONFIG_CC_IS_GCC
|
||||||
ifeq ($(call cc-ifversion, -lt, 0701, y), y)
|
ifeq ($(call cc-ifversion, -lt, 0701, y), y)
|
||||||
IS_OLD_GCC = 1
|
IS_OLD_GCC = 1
|
||||||
|
@@ -13,10 +13,6 @@ ifdef CONFIG_PPC64
|
|||||||
CFLAGS_$(AMDDALPATH)/dc/dcn21/dcn21_resource.o := -mhard-float -maltivec
|
CFLAGS_$(AMDDALPATH)/dc/dcn21/dcn21_resource.o := -mhard-float -maltivec
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifdef CONFIG_ARM64
|
|
||||||
CFLAGS_REMOVE_$(AMDDALPATH)/dc/dcn21/dcn21_resource.o := -mgeneral-regs-only
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef CONFIG_CC_IS_GCC
|
ifdef CONFIG_CC_IS_GCC
|
||||||
ifeq ($(call cc-ifversion, -lt, 0701, y), y)
|
ifeq ($(call cc-ifversion, -lt, 0701, y), y)
|
||||||
IS_OLD_GCC = 1
|
IS_OLD_GCC = 1
|
||||||
|
@@ -33,10 +33,6 @@ ifdef CONFIG_PPC64
|
|||||||
dml_ccflags := -mhard-float -maltivec
|
dml_ccflags := -mhard-float -maltivec
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifdef CONFIG_ARM64
|
|
||||||
dml_rcflags := -mgeneral-regs-only
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef CONFIG_CC_IS_GCC
|
ifdef CONFIG_CC_IS_GCC
|
||||||
ifeq ($(call cc-ifversion, -lt, 0701, y), y)
|
ifeq ($(call cc-ifversion, -lt, 0701, y), y)
|
||||||
IS_OLD_GCC = 1
|
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/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_mode_vba_21.o := $(dml_ccflags)
|
||||||
CFLAGS_$(AMDDALPATH)/dc/dml/dcn21/display_rq_dlg_calc_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
|
endif
|
||||||
ifdef CONFIG_DRM_AMD_DC_DCN3_0
|
ifdef CONFIG_DRM_AMD_DC_DCN3_0
|
||||||
CFLAGS_$(AMDDALPATH)/dc/dml/dcn30/display_mode_vba_30.o := $(dml_ccflags) -Wframe-larger-than=2048
|
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
|
endif
|
||||||
CFLAGS_$(AMDDALPATH)/dc/dml/dml1_display_rq_dlg_calc.o := $(dml_ccflags)
|
CFLAGS_$(AMDDALPATH)/dc/dml/dml1_display_rq_dlg_calc.o := $(dml_ccflags)
|
||||||
CFLAGS_$(AMDDALPATH)/dc/dml/display_rq_dlg_helpers.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 \
|
DML = display_mode_lib.o display_rq_dlg_helpers.o dml1_display_rq_dlg_calc.o \
|
||||||
|
|
||||||
|
@@ -10,10 +10,6 @@ ifdef CONFIG_PPC64
|
|||||||
dsc_ccflags := -mhard-float -maltivec
|
dsc_ccflags := -mhard-float -maltivec
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifdef CONFIG_ARM64
|
|
||||||
dsc_rcflags := -mgeneral-regs-only
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef CONFIG_CC_IS_GCC
|
ifdef CONFIG_CC_IS_GCC
|
||||||
ifeq ($(call cc-ifversion, -lt, 0701, y), y)
|
ifeq ($(call cc-ifversion, -lt, 0701, y), y)
|
||||||
IS_OLD_GCC = 1
|
IS_OLD_GCC = 1
|
||||||
@@ -32,7 +28,6 @@ endif
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
CFLAGS_$(AMDDALPATH)/dc/dsc/rc_calc.o := $(dsc_ccflags)
|
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
|
DSC = dc_dsc.o rc_calc.o rc_calc_dpi.o
|
||||||
|
|
||||||
|
@@ -55,10 +55,6 @@
|
|||||||
#include <asm/fpu/api.h>
|
#include <asm/fpu/api.h>
|
||||||
#define DC_FP_START() kernel_fpu_begin()
|
#define DC_FP_START() kernel_fpu_begin()
|
||||||
#define DC_FP_END() kernel_fpu_end()
|
#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)
|
#elif defined(CONFIG_PPC64)
|
||||||
#include <asm/switch_to.h>
|
#include <asm/switch_to.h>
|
||||||
#include <asm/cputable.h>
|
#include <asm/cputable.h>
|
||||||
|
@@ -452,7 +452,7 @@ static int otm8009a_probe(struct mipi_dsi_device *dsi)
|
|||||||
dsi->lanes = 2;
|
dsi->lanes = 2;
|
||||||
dsi->format = MIPI_DSI_FMT_RGB888;
|
dsi->format = MIPI_DSI_FMT_RGB888;
|
||||||
dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
|
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_panel_init(&ctx->panel, dev, &otm8009a_drm_funcs,
|
||||||
DRM_MODE_CONNECTOR_DSI);
|
DRM_MODE_CONNECTOR_DSI);
|
||||||
|
@@ -1432,7 +1432,7 @@ mcp251xfd_handle_rxif_one(struct mcp251xfd_priv *priv,
|
|||||||
else
|
else
|
||||||
skb = alloc_can_skb(priv->ndev, (struct can_frame **)&cfd);
|
skb = alloc_can_skb(priv->ndev, (struct can_frame **)&cfd);
|
||||||
|
|
||||||
if (!cfd) {
|
if (!skb) {
|
||||||
stats->rx_dropped++;
|
stats->rx_dropped++;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@@ -40,6 +40,13 @@
|
|||||||
#define TCB_L2T_IX_M 0xfffULL
|
#define TCB_L2T_IX_M 0xfffULL
|
||||||
#define TCB_L2T_IX_V(x) ((x) << TCB_L2T_IX_S)
|
#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_W 0
|
||||||
#define TCB_SMAC_SEL_S 24
|
#define TCB_SMAC_SEL_S 24
|
||||||
#define TCB_SMAC_SEL_M 0xffULL
|
#define TCB_SMAC_SEL_M 0xffULL
|
||||||
|
@@ -573,7 +573,11 @@ int send_tx_flowc_wr(struct sock *sk, int compl,
|
|||||||
void chtls_tcp_push(struct sock *sk, int flags);
|
void chtls_tcp_push(struct sock *sk, int flags);
|
||||||
int chtls_push_frames(struct chtls_sock *csk, int comp);
|
int chtls_push_frames(struct chtls_sock *csk, int comp);
|
||||||
int chtls_set_tcb_tflag(struct sock *sk, unsigned int bit_pos, int val);
|
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);
|
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);
|
void skb_entail(struct sock *sk, struct sk_buff *skb, int flags);
|
||||||
unsigned int keyid_to_addr(int start_addr, int keyid);
|
unsigned int keyid_to_addr(int start_addr, int keyid);
|
||||||
void free_tls_keyid(struct sock *sk);
|
void free_tls_keyid(struct sock *sk);
|
||||||
|
@@ -32,6 +32,7 @@
|
|||||||
#include "chtls.h"
|
#include "chtls.h"
|
||||||
#include "chtls_cm.h"
|
#include "chtls_cm.h"
|
||||||
#include "clip_tbl.h"
|
#include "clip_tbl.h"
|
||||||
|
#include "t4_tcb.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* State transitions and actions for close. Note that if we are in SYN_SENT
|
* 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)
|
if (sk->sk_state != TCP_SYN_RECV)
|
||||||
chtls_send_abort(sk, mode, skb);
|
chtls_send_abort(sk, mode, skb);
|
||||||
else
|
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;
|
return;
|
||||||
out:
|
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 &&
|
else if (tcp_sk(sk)->linger2 < 0 &&
|
||||||
!csk_flag_nochk(csk, CSK_ABORT_SHUTDOWN))
|
!csk_flag_nochk(csk, CSK_ABORT_SHUTDOWN))
|
||||||
chtls_abort_conn(sk, skb);
|
chtls_abort_conn(sk, skb);
|
||||||
|
else if (csk_flag_nochk(csk, CSK_TX_DATA_SENT))
|
||||||
|
chtls_set_quiesce_ctrl(sk, 0);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
pr_info("close_con_rpl in bad state %d\n", sk->sk_state);
|
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;
|
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] = {
|
chtls_handler_func chtls_handlers[NUM_CPL_CMDS] = {
|
||||||
[CPL_PASS_OPEN_RPL] = chtls_pass_open_rpl,
|
[CPL_PASS_OPEN_RPL] = chtls_pass_open_rpl,
|
||||||
[CPL_CLOSE_LISTSRV_RPL] = chtls_close_listsrv_rpl,
|
[CPL_CLOSE_LISTSRV_RPL] = chtls_close_listsrv_rpl,
|
||||||
@@ -2304,4 +2331,5 @@ chtls_handler_func chtls_handlers[NUM_CPL_CMDS] = {
|
|||||||
[CPL_ABORT_REQ_RSS] = chtls_conn_cpl,
|
[CPL_ABORT_REQ_RSS] = chtls_conn_cpl,
|
||||||
[CPL_ABORT_RPL_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,
|
||||||
};
|
};
|
||||||
|
@@ -88,6 +88,24 @@ static int chtls_set_tcb_field(struct sock *sk, u16 word, u64 mask, u64 val)
|
|||||||
return ret < 0 ? ret : 0;
|
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.
|
* 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));
|
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 */
|
/* TLS Key bitmap processing */
|
||||||
int chtls_init_kmap(struct chtls_dev *cdev, struct cxgb4_lld_info *lldi)
|
int chtls_init_kmap(struct chtls_dev *cdev, struct cxgb4_lld_info *lldi)
|
||||||
{
|
{
|
||||||
|
@@ -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).
|
* SBP is *not* set in PRT_SBPVSI (default not set).
|
||||||
*/
|
*/
|
||||||
skb = i40e_construct_skb_zc(rx_ring, *bi);
|
skb = i40e_construct_skb_zc(rx_ring, *bi);
|
||||||
*bi = NULL;
|
|
||||||
if (!skb) {
|
if (!skb) {
|
||||||
rx_ring->rx_stats.alloc_buff_failed++;
|
rx_ring->rx_stats.alloc_buff_failed++;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*bi = NULL;
|
||||||
cleaned_count++;
|
cleaned_count++;
|
||||||
i40e_inc_ntc(rx_ring);
|
i40e_inc_ntc(rx_ring);
|
||||||
|
|
||||||
|
@@ -5874,8 +5874,6 @@ static void mvpp2_phylink_validate(struct phylink_config *config,
|
|||||||
|
|
||||||
phylink_set(mask, Autoneg);
|
phylink_set(mask, Autoneg);
|
||||||
phylink_set_port_modes(mask);
|
phylink_set_port_modes(mask);
|
||||||
phylink_set(mask, Pause);
|
|
||||||
phylink_set(mask, Asym_Pause);
|
|
||||||
|
|
||||||
switch (state->interface) {
|
switch (state->interface) {
|
||||||
case PHY_INTERFACE_MODE_10GBASER:
|
case PHY_INTERFACE_MODE_10GBASER:
|
||||||
|
@@ -19,7 +19,7 @@
|
|||||||
#define MLXSW_THERMAL_ASIC_TEMP_NORM 75000 /* 75C */
|
#define MLXSW_THERMAL_ASIC_TEMP_NORM 75000 /* 75C */
|
||||||
#define MLXSW_THERMAL_ASIC_TEMP_HIGH 85000 /* 85C */
|
#define MLXSW_THERMAL_ASIC_TEMP_HIGH 85000 /* 85C */
|
||||||
#define MLXSW_THERMAL_ASIC_TEMP_HOT 105000 /* 105C */
|
#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_HYSTERESIS_TEMP 5000 /* 5C */
|
||||||
#define MLXSW_THERMAL_MODULE_TEMP_SHIFT (MLXSW_THERMAL_HYSTERESIS_TEMP * 2)
|
#define MLXSW_THERMAL_MODULE_TEMP_SHIFT (MLXSW_THERMAL_HYSTERESIS_TEMP * 2)
|
||||||
#define MLXSW_THERMAL_ZONE_MAX_NAME 16
|
#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)
|
if (err)
|
||||||
return 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
|
/* According to the system thermal requirements, the thermal zones are
|
||||||
* defined with four trip points. The critical and emergency
|
* defined with four trip points. The critical and emergency
|
||||||
* temperature thresholds, provided by QSFP module are set as "active"
|
* 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_NORM].temp = crit_temp;
|
||||||
tz->trips[MLXSW_THERMAL_TEMP_TRIP_HIGH].temp = crit_temp;
|
tz->trips[MLXSW_THERMAL_TEMP_TRIP_HIGH].temp = crit_temp;
|
||||||
tz->trips[MLXSW_THERMAL_TEMP_TRIP_HOT].temp = emerg_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;
|
MLXSW_THERMAL_MODULE_TEMP_SHIFT;
|
||||||
else
|
|
||||||
tz->trips[MLXSW_THERMAL_TEMP_TRIP_CRIT].temp = emerg_temp;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@@ -564,11 +564,6 @@ static const struct net_device_ops netxen_netdev_ops = {
|
|||||||
.ndo_set_features = netxen_set_features,
|
.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,
|
static inline void netxen_set_interrupt_mode(struct netxen_adapter *adapter,
|
||||||
u32 mode)
|
u32 mode)
|
||||||
{
|
{
|
||||||
@@ -664,7 +659,7 @@ static int netxen_setup_intr(struct netxen_adapter *adapter)
|
|||||||
netxen_initialize_interrupt_registers(adapter);
|
netxen_initialize_interrupt_registers(adapter);
|
||||||
netxen_set_msix_bit(pdev, 0);
|
netxen_set_msix_bit(pdev, 0);
|
||||||
|
|
||||||
if (netxen_function_zero(pdev)) {
|
if (adapter->portnum == 0) {
|
||||||
if (!netxen_setup_msi_interrupts(adapter, num_msix))
|
if (!netxen_setup_msi_interrupts(adapter, num_msix))
|
||||||
netxen_set_interrupt_mode(adapter, NETXEN_MSI_MODE);
|
netxen_set_interrupt_mode(adapter, NETXEN_MSI_MODE);
|
||||||
else
|
else
|
||||||
|
@@ -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,
|
int dwmac5_est_configure(void __iomem *ioaddr, struct stmmac_est *cfg,
|
||||||
unsigned int ptp_rate)
|
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;
|
int i, ret = 0x0;
|
||||||
u64 total_ctr;
|
u32 ctrl;
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
ret |= dwmac5_est_write(ioaddr, BTR_LOW, cfg->btr[0], false);
|
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, BTR_HIGH, cfg->btr[1], false);
|
||||||
ret |= dwmac5_est_write(ioaddr, TER, cfg->ter, 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, 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)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
total_offset = 0;
|
|
||||||
for (i = 0; i < cfg->gcl_size; i++) {
|
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)
|
if (ret)
|
||||||
return 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 = readl(ioaddr + MTL_EST_CONTROL);
|
||||||
ctrl &= ~PTOV;
|
ctrl &= ~PTOV;
|
||||||
ctrl |= ((1000000000 / ptp_rate) * 6) << PTOV_SHIFT;
|
ctrl |= ((1000000000 / ptp_rate) * 6) << PTOV_SHIFT;
|
||||||
|
@@ -2158,7 +2158,7 @@ static int stmmac_napi_check(struct stmmac_priv *priv, u32 chan)
|
|||||||
spin_lock_irqsave(&ch->lock, flags);
|
spin_lock_irqsave(&ch->lock, flags);
|
||||||
stmmac_disable_dma_irq(priv, priv->ioaddr, chan, 1, 0);
|
stmmac_disable_dma_irq(priv, priv->ioaddr, chan, 1, 0);
|
||||||
spin_unlock_irqrestore(&ch->lock, flags);
|
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);
|
spin_lock_irqsave(&ch->lock, flags);
|
||||||
stmmac_disable_dma_irq(priv, priv->ioaddr, chan, 0, 1);
|
stmmac_disable_dma_irq(priv, priv->ioaddr, chan, 0, 1);
|
||||||
spin_unlock_irqrestore(&ch->lock, flags);
|
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);
|
struct stmmac_priv *priv = netdev_priv(dev);
|
||||||
int txfifosz = priv->plat->tx_fifo_size;
|
int txfifosz = priv->plat->tx_fifo_size;
|
||||||
|
const int mtu = new_mtu;
|
||||||
|
|
||||||
if (txfifosz == 0)
|
if (txfifosz == 0)
|
||||||
txfifosz = priv->dma_cap.tx_fifo_size;
|
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))
|
if ((txfifosz < new_mtu) || (new_mtu > BUF_SIZE_16KiB))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
dev->mtu = new_mtu;
|
dev->mtu = mtu;
|
||||||
|
|
||||||
netdev_update_features(dev);
|
netdev_update_features(dev);
|
||||||
|
|
||||||
|
@@ -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;
|
u32 size, wid = priv->dma_cap.estwid, dep = priv->dma_cap.estdep;
|
||||||
struct plat_stmmacenet_data *plat = priv->plat;
|
struct plat_stmmacenet_data *plat = priv->plat;
|
||||||
struct timespec64 time;
|
struct timespec64 time, current_time;
|
||||||
|
ktime_t current_time_ns;
|
||||||
bool fpe = false;
|
bool fpe = false;
|
||||||
int i, ret = 0;
|
int i, ret = 0;
|
||||||
u64 ctr;
|
u64 ctr;
|
||||||
@@ -700,7 +701,22 @@ static int tc_setup_taprio(struct stmmac_priv *priv,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Adjust for real system time */
|
/* Adjust for real system time */
|
||||||
|
priv->ptp_clock_ops.gettime64(&priv->ptp_clock_ops, ¤t_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);
|
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[0] = (u32)time.tv_nsec;
|
||||||
priv->plat->est->btr[1] = (u32)time.tv_sec;
|
priv->plat->est->btr[1] = (u32)time.tv_sec;
|
||||||
|
|
||||||
|
@@ -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_TX]->netdev = netdev;
|
||||||
ipa->name_map[IPA_ENDPOINT_AP_MODEM_RX]->netdev = netdev;
|
ipa->name_map[IPA_ENDPOINT_AP_MODEM_RX]->netdev = netdev;
|
||||||
|
|
||||||
|
SET_NETDEV_DEV(netdev, &ipa->pdev->dev);
|
||||||
priv = netdev_priv(netdev);
|
priv = netdev_priv(netdev);
|
||||||
priv->ipa = ipa;
|
priv->ipa = ipa;
|
||||||
|
|
||||||
|
@@ -284,7 +284,8 @@ static int smsc_phy_probe(struct phy_device *phydev)
|
|||||||
/* Make clk optional to keep DTB backward compatibility. */
|
/* Make clk optional to keep DTB backward compatibility. */
|
||||||
priv->refclk = clk_get_optional(dev, NULL);
|
priv->refclk = clk_get_optional(dev, NULL);
|
||||||
if (IS_ERR(priv->refclk))
|
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);
|
ret = clk_prepare_enable(priv->refclk);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
@@ -387,7 +387,7 @@ generic_rndis_bind(struct usbnet *dev, struct usb_interface *intf, int flags)
|
|||||||
reply_len = sizeof *phym;
|
reply_len = sizeof *phym;
|
||||||
retval = rndis_query(dev, intf, u.buf,
|
retval = rndis_query(dev, intf, u.buf,
|
||||||
RNDIS_OID_GEN_PHYSICAL_MEDIUM,
|
RNDIS_OID_GEN_PHYSICAL_MEDIUM,
|
||||||
0, (void **) &phym, &reply_len);
|
reply_len, (void **)&phym, &reply_len);
|
||||||
if (retval != 0 || !phym) {
|
if (retval != 0 || !phym) {
|
||||||
/* OID is optional so don't fail here. */
|
/* OID is optional so don't fail here. */
|
||||||
phym_unspec = cpu_to_le32(RNDIS_PHYSICAL_MEDIUM_UNSPECIFIED);
|
phym_unspec = cpu_to_le32(RNDIS_PHYSICAL_MEDIUM_UNSPECIFIED);
|
||||||
|
@@ -115,6 +115,7 @@ struct cdns_spi {
|
|||||||
void __iomem *regs;
|
void __iomem *regs;
|
||||||
struct clk *ref_clk;
|
struct clk *ref_clk;
|
||||||
struct clk *pclk;
|
struct clk *pclk;
|
||||||
|
unsigned int clk_rate;
|
||||||
u32 speed_hz;
|
u32 speed_hz;
|
||||||
const u8 *txbuf;
|
const u8 *txbuf;
|
||||||
u8 *rxbuf;
|
u8 *rxbuf;
|
||||||
@@ -250,7 +251,7 @@ static void cdns_spi_config_clock_freq(struct spi_device *spi,
|
|||||||
u32 ctrl_reg, baud_rate_val;
|
u32 ctrl_reg, baud_rate_val;
|
||||||
unsigned long frequency;
|
unsigned long frequency;
|
||||||
|
|
||||||
frequency = clk_get_rate(xspi->ref_clk);
|
frequency = xspi->clk_rate;
|
||||||
|
|
||||||
ctrl_reg = cdns_spi_read(xspi, CDNS_SPI_CR);
|
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->auto_runtime_pm = true;
|
||||||
master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH;
|
master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH;
|
||||||
|
|
||||||
|
xspi->clk_rate = clk_get_rate(xspi->ref_clk);
|
||||||
/* Set to default valid value */
|
/* 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;
|
xspi->speed_hz = master->max_speed_hz;
|
||||||
|
|
||||||
master->bits_per_word_mask = SPI_BPW_MASK(8);
|
master->bits_per_word_mask = SPI_BPW_MASK(8);
|
||||||
|
@@ -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 mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(spi->master);
|
||||||
struct fsl_spi_platform_data *pdata;
|
struct fsl_spi_platform_data *pdata;
|
||||||
bool pol = spi->mode & SPI_CS_HIGH;
|
|
||||||
struct spi_mpc8xxx_cs *cs = spi->controller_state;
|
struct spi_mpc8xxx_cs *cs = spi->controller_state;
|
||||||
|
|
||||||
pdata = spi->dev.parent->parent->platform_data;
|
pdata = spi->dev.parent->parent->platform_data;
|
||||||
|
|
||||||
if (value == BITBANG_CS_INACTIVE) {
|
if (value == BITBANG_CS_INACTIVE) {
|
||||||
if (pdata->cs_control)
|
if (pdata->cs_control)
|
||||||
pdata->cs_control(spi, !pol);
|
pdata->cs_control(spi, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (value == BITBANG_CS_ACTIVE) {
|
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);
|
fsl_spi_change_mode(spi);
|
||||||
|
|
||||||
if (pdata->cs_control)
|
if (pdata->cs_control)
|
||||||
pdata->cs_control(spi, pol);
|
pdata->cs_control(spi, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -863,9 +863,14 @@ compose_entry_fh(struct nfsd3_readdirres *cd, struct svc_fh *fhp,
|
|||||||
if (isdotent(name, namlen)) {
|
if (isdotent(name, namlen)) {
|
||||||
if (namlen == 2) {
|
if (namlen == 2) {
|
||||||
dchild = dget_parent(dparent);
|
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)
|
if (dchild == dparent)
|
||||||
goto out;
|
goto out;
|
||||||
|
if (dparent == exp->ex_path.dentry)
|
||||||
|
goto out;
|
||||||
} else
|
} else
|
||||||
dchild = dget(dparent);
|
dchild = dget(dparent);
|
||||||
} else
|
} else
|
||||||
|
@@ -1391,11 +1391,12 @@ int __cgroup_bpf_run_filter_setsockopt(struct sock *sk, int *level,
|
|||||||
if (ctx.optlen != 0) {
|
if (ctx.optlen != 0) {
|
||||||
*optlen = ctx.optlen;
|
*optlen = ctx.optlen;
|
||||||
*kernel_optval = ctx.optval;
|
*kernel_optval = ctx.optval;
|
||||||
|
/* export and don't free sockopt buf */
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
out:
|
||||||
if (ret)
|
|
||||||
sockopt_free_buf(&ctx);
|
sockopt_free_buf(&ctx);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@@ -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 = {
|
const struct bpf_func_proto bpf_map_peek_elem_proto = {
|
||||||
.func = bpf_map_pop_elem,
|
.func = bpf_map_peek_elem,
|
||||||
.gpl_only = false,
|
.gpl_only = false,
|
||||||
.ret_type = RET_INTEGER,
|
.ret_type = RET_INTEGER,
|
||||||
.arg1_type = ARG_CONST_MAP_PTR,
|
.arg1_type = ARG_CONST_MAP_PTR,
|
||||||
|
@@ -2214,6 +2214,8 @@ static bool is_spillable_regtype(enum bpf_reg_type type)
|
|||||||
case PTR_TO_RDWR_BUF:
|
case PTR_TO_RDWR_BUF:
|
||||||
case PTR_TO_RDWR_BUF_OR_NULL:
|
case PTR_TO_RDWR_BUF_OR_NULL:
|
||||||
case PTR_TO_PERCPU_BTF_ID:
|
case PTR_TO_PERCPU_BTF_ID:
|
||||||
|
case PTR_TO_MEM:
|
||||||
|
case PTR_TO_MEM_OR_NULL:
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
@@ -5255,7 +5257,7 @@ static bool signed_add_overflows(s64 a, s64 b)
|
|||||||
return res < a;
|
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 */
|
/* Do the add in u32, where overflow is well-defined */
|
||||||
s32 res = (s32)((u32)a + (u32)b);
|
s32 res = (s32)((u32)a + (u32)b);
|
||||||
@@ -5265,7 +5267,7 @@ static bool signed_add32_overflows(s64 a, s64 b)
|
|||||||
return res < a;
|
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 */
|
/* Do the sub in u64, where overflow is well-defined */
|
||||||
s64 res = (s64)((u64)a - (u64)b);
|
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)
|
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);
|
s32 res = (s32)((u32)a - (u32)b);
|
||||||
|
|
||||||
if (b < 0)
|
if (b < 0)
|
||||||
|
@@ -496,13 +496,17 @@ EXPORT_SYMBOL(__netdev_alloc_skb);
|
|||||||
struct sk_buff *__napi_alloc_skb(struct napi_struct *napi, unsigned int len,
|
struct sk_buff *__napi_alloc_skb(struct napi_struct *napi, unsigned int len,
|
||||||
gfp_t gfp_mask)
|
gfp_t gfp_mask)
|
||||||
{
|
{
|
||||||
struct napi_alloc_cache *nc = this_cpu_ptr(&napi_alloc_cache);
|
struct napi_alloc_cache *nc;
|
||||||
struct sk_buff *skb;
|
struct sk_buff *skb;
|
||||||
void *data;
|
void *data;
|
||||||
|
|
||||||
len += NET_SKB_PAD + NET_IP_ALIGN;
|
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))) {
|
(gfp_mask & (__GFP_DIRECT_RECLAIM | GFP_DMA))) {
|
||||||
skb = __alloc_skb(len, gfp_mask, SKB_ALLOC_RX, NUMA_NO_NODE);
|
skb = __alloc_skb(len, gfp_mask, SKB_ALLOC_RX, NUMA_NO_NODE);
|
||||||
if (!skb)
|
if (!skb)
|
||||||
@@ -510,6 +514,7 @@ struct sk_buff *__napi_alloc_skb(struct napi_struct *napi, unsigned int len,
|
|||||||
goto skb_success;
|
goto skb_success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nc = this_cpu_ptr(&napi_alloc_cache);
|
||||||
len += SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
|
len += SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
|
||||||
len = SKB_DATA_ALIGN(len);
|
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_truesize = 0;
|
||||||
unsigned int delta_len = 0;
|
unsigned int delta_len = 0;
|
||||||
struct sk_buff *tail = NULL;
|
struct sk_buff *tail = NULL;
|
||||||
struct sk_buff *nskb;
|
struct sk_buff *nskb, *tmp;
|
||||||
|
int err;
|
||||||
|
|
||||||
skb_push(skb, -skb_network_offset(skb) + offset);
|
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;
|
nskb = list_skb;
|
||||||
list_skb = list_skb->next;
|
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)
|
if (!tail)
|
||||||
skb->next = nskb;
|
skb->next = nskb;
|
||||||
else
|
else
|
||||||
tail->next = nskb;
|
tail->next = nskb;
|
||||||
|
|
||||||
|
if (unlikely(err)) {
|
||||||
|
nskb->next = list_skb;
|
||||||
|
goto err_linearize;
|
||||||
|
}
|
||||||
|
|
||||||
tail = nskb;
|
tail = nskb;
|
||||||
|
|
||||||
delta_len += nskb->len;
|
delta_len += nskb->len;
|
||||||
|
@@ -293,7 +293,7 @@ select_by_hash:
|
|||||||
i = j = reciprocal_scale(hash, socks);
|
i = j = reciprocal_scale(hash, socks);
|
||||||
while (reuse->socks[i]->sk_state == TCP_ESTABLISHED) {
|
while (reuse->socks[i]->sk_state == TCP_ESTABLISHED) {
|
||||||
i++;
|
i++;
|
||||||
if (i >= reuse->num_socks)
|
if (i >= socks)
|
||||||
i = 0;
|
i = 0;
|
||||||
if (i == j)
|
if (i == j)
|
||||||
goto out;
|
goto out;
|
||||||
|
@@ -1765,6 +1765,8 @@ static int dcb_doit(struct sk_buff *skb, struct nlmsghdr *nlh,
|
|||||||
fn = &reply_funcs[dcb->cmd];
|
fn = &reply_funcs[dcb->cmd];
|
||||||
if (!fn->cb)
|
if (!fn->cb)
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
|
if (fn->type == RTM_SETDCB && !netlink_capable(skb, CAP_NET_ADMIN))
|
||||||
|
return -EPERM;
|
||||||
|
|
||||||
if (!tb[DCB_ATTR_IFNAME])
|
if (!tb[DCB_ATTR_IFNAME])
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@@ -353,9 +353,13 @@ static int dsa_port_devlink_setup(struct dsa_port *dp)
|
|||||||
|
|
||||||
static void dsa_port_teardown(struct dsa_port *dp)
|
static void dsa_port_teardown(struct dsa_port *dp)
|
||||||
{
|
{
|
||||||
|
struct devlink_port *dlp = &dp->devlink_port;
|
||||||
|
|
||||||
if (!dp->setup)
|
if (!dp->setup)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
devlink_port_type_clear(dlp);
|
||||||
|
|
||||||
switch (dp->type) {
|
switch (dp->type) {
|
||||||
case DSA_PORT_TYPE_UNUSED:
|
case DSA_PORT_TYPE_UNUSED:
|
||||||
break;
|
break;
|
||||||
|
@@ -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)
|
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;
|
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();
|
rtnl_lock();
|
||||||
ret = dev_set_mtu(dev, ETH_DATA_LEN + cpu_dp->tag_ops->overhead);
|
ret = dev_set_mtu(dev, ETH_DATA_LEN + cpu_dp->tag_ops->overhead);
|
||||||
rtnl_unlock();
|
rtnl_unlock();
|
||||||
|
@@ -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)
|
int esp_output_head(struct xfrm_state *x, struct sk_buff *skb, struct esp_info *esp)
|
||||||
{
|
{
|
||||||
u8 *tail;
|
u8 *tail;
|
||||||
u8 *vaddr;
|
|
||||||
int nfrags;
|
int nfrags;
|
||||||
int esph_offset;
|
int esph_offset;
|
||||||
struct page *page;
|
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;
|
page = pfrag->page;
|
||||||
get_page(page);
|
get_page(page);
|
||||||
|
|
||||||
vaddr = kmap_atomic(page);
|
tail = page_address(page) + pfrag->offset;
|
||||||
|
|
||||||
tail = vaddr + pfrag->offset;
|
|
||||||
|
|
||||||
esp_output_fill_trailer(tail, esp->tfclen, esp->plen, esp->proto);
|
esp_output_fill_trailer(tail, esp->tfclen, esp->plen, esp->proto);
|
||||||
|
|
||||||
kunmap_atomic(vaddr);
|
|
||||||
|
|
||||||
nfrags = skb_shinfo(skb)->nr_frags;
|
nfrags = skb_shinfo(skb)->nr_frags;
|
||||||
|
|
||||||
__skb_fill_page_desc(skb, nfrags, page, pfrag->offset,
|
__skb_fill_page_desc(skb, nfrags, page, pfrag->offset,
|
||||||
|
@@ -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)
|
int esp6_output_head(struct xfrm_state *x, struct sk_buff *skb, struct esp_info *esp)
|
||||||
{
|
{
|
||||||
u8 *tail;
|
u8 *tail;
|
||||||
u8 *vaddr;
|
|
||||||
int nfrags;
|
int nfrags;
|
||||||
int esph_offset;
|
int esph_offset;
|
||||||
struct page *page;
|
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;
|
page = pfrag->page;
|
||||||
get_page(page);
|
get_page(page);
|
||||||
|
|
||||||
vaddr = kmap_atomic(page);
|
tail = page_address(page) + pfrag->offset;
|
||||||
|
|
||||||
tail = vaddr + pfrag->offset;
|
|
||||||
|
|
||||||
esp_output_fill_trailer(tail, esp->tfclen, esp->plen, esp->proto);
|
esp_output_fill_trailer(tail, esp->tfclen, esp->plen, esp->proto);
|
||||||
|
|
||||||
kunmap_atomic(vaddr);
|
|
||||||
|
|
||||||
nfrags = skb_shinfo(skb)->nr_frags;
|
nfrags = skb_shinfo(skb)->nr_frags;
|
||||||
|
|
||||||
__skb_fill_page_desc(skb, nfrags, page, pfrag->offset,
|
__skb_fill_page_desc(skb, nfrags, page, pfrag->offset,
|
||||||
|
@@ -125,8 +125,43 @@ static int ip6_finish_output2(struct net *net, struct sock *sk, struct sk_buff *
|
|||||||
return -EINVAL;
|
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)
|
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)
|
#if defined(CONFIG_NETFILTER) && defined(CONFIG_XFRM)
|
||||||
/* Policy lookup after SNAT yielded a new policy */
|
/* Policy lookup after SNAT yielded a new policy */
|
||||||
if (skb_dst(skb)->xfrm) {
|
if (skb_dst(skb)->xfrm) {
|
||||||
@@ -135,7 +170,11 @@ static int __ip6_finish_output(struct net *net, struct sock *sk, struct sk_buff
|
|||||||
}
|
}
|
||||||
#endif
|
#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)) ||
|
dst_allfrag(skb_dst(skb)) ||
|
||||||
(IP6CB(skb)->frag_max_size && skb->len > IP6CB(skb)->frag_max_size))
|
(IP6CB(skb)->frag_max_size && skb->len > IP6CB(skb)->frag_max_size))
|
||||||
return ip6_fragment(net, sk, skb, ip6_finish_output2);
|
return ip6_fragment(net, sk, skb, ip6_finish_output2);
|
||||||
|
@@ -1645,8 +1645,11 @@ static int ipip6_newlink(struct net *src_net, struct net_device *dev,
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_IPV6_SIT_6RD
|
#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);
|
err = ipip6_tunnel_update_6rd(nt, &ip6rd);
|
||||||
|
if (err < 0)
|
||||||
|
unregister_netdevice_queue(dev, NULL);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
|
@@ -662,7 +662,7 @@ ieee80211_tx_h_select_key(struct ieee80211_tx_data *tx)
|
|||||||
if (!skip_hw && tx->key &&
|
if (!skip_hw && tx->key &&
|
||||||
tx->key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE)
|
tx->key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE)
|
||||||
info->control.hw_key = &tx->key->conf;
|
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)) {
|
test_sta_flag(tx->sta, WLAN_STA_USES_ENCRYPTION)) {
|
||||||
return TX_DROP;
|
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
|
* get immediately moved to the back of the list on the next
|
||||||
* call to ieee80211_next_txq().
|
* call to ieee80211_next_txq().
|
||||||
*/
|
*/
|
||||||
if (txqi->txq.sta &&
|
if (txqi->txq.sta && local->airtime_flags &&
|
||||||
wiphy_ext_feature_isset(local->hw.wiphy,
|
wiphy_ext_feature_isset(local->hw.wiphy,
|
||||||
NL80211_EXT_FEATURE_AIRTIME_FAIRNESS))
|
NL80211_EXT_FEATURE_AIRTIME_FAIRNESS))
|
||||||
list_add(&txqi->schedule_order,
|
list_add(&txqi->schedule_order,
|
||||||
|
@@ -430,7 +430,7 @@ static void rxrpc_input_data(struct rxrpc_call *call, struct sk_buff *skb)
|
|||||||
return;
|
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 timo = READ_ONCE(call->next_req_timo);
|
||||||
unsigned long now, expect_req_by;
|
unsigned long now, expect_req_by;
|
||||||
|
|
||||||
|
@@ -1109,7 +1109,7 @@ static long rxrpc_read(const struct key *key,
|
|||||||
default: /* we have a ticket we can't encode */
|
default: /* we have a ticket we can't encode */
|
||||||
pr_err("Unsupported key token type (%u)\n",
|
pr_err("Unsupported key token type (%u)\n",
|
||||||
token->security_index);
|
token->security_index);
|
||||||
continue;
|
return -ENOPKG;
|
||||||
}
|
}
|
||||||
|
|
||||||
_debug("token[%u]: toksize=%u", ntoks, toksize);
|
_debug("token[%u]: toksize=%u", ntoks, toksize);
|
||||||
@@ -1224,7 +1224,9 @@ static long rxrpc_read(const struct key *key,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
pr_err("Unsupported key token type (%u)\n",
|
||||||
|
token->security_index);
|
||||||
|
return -ENOPKG;
|
||||||
}
|
}
|
||||||
|
|
||||||
ASSERTCMP((unsigned long)xdr - (unsigned long)oldxdr, ==,
|
ASSERTCMP((unsigned long)xdr - (unsigned long)oldxdr, ==,
|
||||||
|
@@ -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,
|
int tipc_link_xmit(struct tipc_link *l, struct sk_buff_head *list,
|
||||||
struct sk_buff_head *xmitq)
|
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 *backlogq = &l->backlogq;
|
||||||
struct sk_buff_head *transmq = &l->transmq;
|
struct sk_buff_head *transmq = &l->transmq;
|
||||||
struct sk_buff *skb, *_skb;
|
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 ack = l->rcv_nxt - 1;
|
||||||
u16 seqno = l->snd_nxt;
|
u16 seqno = l->snd_nxt;
|
||||||
int pkt_cnt = skb_queue_len(list);
|
int pkt_cnt = skb_queue_len(list);
|
||||||
int imp = msg_importance(hdr);
|
|
||||||
unsigned int mss = tipc_link_mss(l);
|
unsigned int mss = tipc_link_mss(l);
|
||||||
unsigned int cwin = l->window;
|
unsigned int cwin = l->window;
|
||||||
unsigned int mtu = l->mtu;
|
unsigned int mtu = l->mtu;
|
||||||
|
struct tipc_msg *hdr;
|
||||||
bool new_bundle;
|
bool new_bundle;
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
int imp;
|
||||||
|
|
||||||
|
if (pkt_cnt <= 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
hdr = buf_msg(skb_peek(list));
|
||||||
if (unlikely(msg_size(hdr) > mtu)) {
|
if (unlikely(msg_size(hdr) > mtu)) {
|
||||||
pr_warn("Too large msg, purging xmit list %d %d %d %d %d!\n",
|
pr_warn("Too large msg, purging xmit list %d %d %d %d %d!\n",
|
||||||
skb_queue_len(list), msg_user(hdr),
|
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;
|
return -EMSGSIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
imp = msg_importance(hdr);
|
||||||
/* Allow oversubscription of one data msg per source at congestion */
|
/* Allow oversubscription of one data msg per source at congestion */
|
||||||
if (unlikely(l->backlog[imp].len >= l->backlog[imp].limit)) {
|
if (unlikely(l->backlog[imp].len >= l->backlog[imp].limit)) {
|
||||||
if (imp == TIPC_SYSTEM_IMPORTANCE) {
|
if (imp == TIPC_SYSTEM_IMPORTANCE) {
|
||||||
|
@@ -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)$(CONFIG_SHELL) $(srctree)/scripts/kconfig/merge_config.sh -m .config $(configfiles)
|
||||||
$(Q)$(MAKE) -f $(srctree)/Makefile olddefconfig
|
$(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
|
PHONY += tinyconfig
|
||||||
tinyconfig:
|
tinyconfig:
|
||||||
$(Q)$(MAKE) -f $(srctree)/Makefile allnoconfig tiny.config
|
$(Q)$(MAKE) -f $(srctree)/Makefile allnoconfig tiny.config
|
||||||
|
@@ -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);
|
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);
|
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) {
|
if (ENABLE_CGROUP_V1_RESOLVER && CONFIG_CGROUP_PIDS) {
|
||||||
int cgrp_id = bpf_core_enum_value(enum cgroup_subsys_id___local,
|
int cgrp_id = bpf_core_enum_value(enum cgroup_subsys_id___local,
|
||||||
pids_cgrp_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_root_inode = get_inode_from_kernfs(root_kernfs);
|
||||||
cgroup_data->cgroup_proc_inode = get_inode_from_kernfs(proc_kernfs);
|
cgroup_data->cgroup_proc_inode = get_inode_from_kernfs(proc_kernfs);
|
||||||
|
Reference in New Issue
Block a user