Linux 5.10.39
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.39 kernel.
All users of the 5.10 kernel series must upgrade.
The updated 5.10.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.10.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/sphinx/parse-headers.pl | 2 Documentation/target/tcm_mod_builder.py | 2 Documentation/trace/postprocess/decode_msr.py | 2 Documentation/trace/postprocess/trace-pagealloc-postprocess.pl | 2 Documentation/trace/postprocess/trace-vmscan-postprocess.pl | 2 Makefile | 2 arch/arm/kernel/asm-offsets.c | 3 arch/arm/kernel/smccc-call.S | 11 arch/arm/kernel/suspend.c | 19 + arch/ia64/scripts/unwcheck.py | 2 arch/riscv/include/asm/ftrace.h | 14 + arch/riscv/kernel/mcount.S | 10 arch/riscv/kernel/vdso/Makefile | 12 - arch/um/Kconfig.debug | 1 arch/um/kernel/Makefile | 1 arch/um/kernel/dyn.lds.S | 6 arch/um/kernel/gmon_syms.c | 16 - arch/um/kernel/uml.lds.S | 6 arch/x86/lib/msr-smp.c | 4 drivers/dma/dw-edma/dw-edma-core.c | 11 drivers/gpio/gpiolib-acpi.c | 14 + drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 51 ++++ drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c | 5 drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c | 4 drivers/gpu/drm/i915/display/intel_dp.c | 13 + drivers/input/touchscreen/elants_i2c.c | 44 +++ drivers/input/touchscreen/silead.c | 44 +++ drivers/isdn/capi/kcapi.c | 4 drivers/misc/kgdbts.c | 26 +- drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c | 2 drivers/net/ethernet/chelsio/cxgb4/sge.c | 16 - drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c | 7 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 14 - drivers/net/virtio_net.c | 10 drivers/net/wireless/cisco/airo.c | 117 +++++----- drivers/nvme/target/admin-cmd.c | 6 drivers/pci/controller/dwc/pcie-tegra194.c | 2 drivers/pci/controller/pci-thunder-ecam.c | 2 drivers/pci/controller/pci-thunder-pem.c | 13 - drivers/pci/hotplug/acpiphp_glue.c | 1 drivers/pci/pci.h | 6 drivers/platform/chrome/cros_ec_typec.c | 5 drivers/scsi/lpfc/lpfc_sli.c | 11 drivers/target/target_core_user.c | 4 drivers/usb/host/sl811-hcd.c | 9 fs/block_dev.c | 20 + fs/ceph/caps.c | 1 fs/ceph/export.c | 8 fs/ceph/inode.c | 13 - fs/ceph/mds_client.c | 7 fs/ceph/super.h | 24 ++ fs/nfs/inode.c | 3 include/linux/virtio_net.h | 14 - lib/stackdepot.c | 6 net/bridge/br_netlink.c | 5 net/hsr/hsr_forward.c | 4 net/ipv6/ip6_gre.c | 7 net/ipv6/ip6_tunnel.c | 3 net/ipv6/ip6_vti.c | 1 net/ipv6/sit.c | 5 scripts/bloat-o-meter | 2 scripts/config | 2 scripts/diffconfig | 2 scripts/get_abi.pl | 2 scripts/recordmcount.pl | 2 scripts/show_delta | 2 scripts/sphinx-pre-install | 2 scripts/split-man.pl | 2 scripts/tracing/draw_functrace.py | 2 sound/pci/hda/hda_generic.c | 16 - tools/perf/python/tracepoint.py | 2 tools/perf/python/twatch.py | 2 tools/power/x86/intel_pstate_tracer/intel_pstate_tracer.py | 2 tools/testing/ktest/compare-ktest-sample.pl | 2 tools/testing/kunit/kunit.py | 2 tools/testing/kunit/kunit_tool_test.py | 2 tools/testing/selftests/bpf/test_offload.py | 2 tools/testing/selftests/drivers/net/mlxsw/sharedbuffer_configuration.py | 2 tools/testing/selftests/kselftest/prefix.pl | 2 tools/testing/selftests/net/devlink_port_split.py | 2 tools/testing/selftests/tc-testing/tdc_batch.py | 2 tools/testing/selftests/tc-testing/tdc_multibatch.py | 2 82 files changed, 507 insertions(+), 230 deletions(-)
Andy Shevchenko (1):
scripts: switch explicitly to Python 3
Arnd Bergmann (6):
x86/msr: Fix wr/rdmsr_safe_regs_on_cpu() prototypes
airo: work around stack usage warning
kgdb: fix gcc-11 warning on indentation
usb: sl811-hcd: improve misleading indentation
isdn: capi: fix mismatched prototypes
PCI: thunder: Fix compile testing
Bodo Stroesser (1):
scsi: target: tcmu: Return from tcmu_handle_completions() if cmd_id not found
Darren Powell (1):
amdgpu/pm: Prevent force of DCEFCLK on NAVI10 and SIENNA_CICHLID
Dinghao Liu (1):
PCI: tegra: Fix runtime PM imbalance in pex_ep_event_pex_rst_deassert()
Eric Dumazet (5):
virtio_net: Do not pull payload in skb->head
ip6_gre: proper dev_{hold|put} in ndo_[un]init methods
sit: proper dev_{hold|put} in ndo_[un]init methods
ip6_tunnel: sit: proper dev_{hold|put} in ndo_[un]init methods
ipv6: remove extra dev_hold() for fallback tunnels
Feilong Lin (1):
ACPI / hotplug / PCI: Fix reference count leak in enable_slot()
Finn Behrens (1):
tweewide: Fix most Shebang lines
Greg Kroah-Hartman (1):
Linux 5.10.39
Gustavo Pimentel (1):
dmaengine: dw-edma: Fix crash on loading/unloading driver
Hans de Goede (3):
Input: elants_i2c - do not bind to i2c-hid compatible ACPI instantiated devices
Input: silead - add workaround for x86 BIOS-es which bring the chip up in a stuck state
gpiolib: acpi: Add quirk to ignore EC wakeups on Dell Venue 10 Pro 5055
Hui Wang (1):
ALSA: hda: generic: change the DAC ctl name for LO+SPK or LO+HP
James Smart (1):
scsi: lpfc: Fix illegal memory access on Abort IOCBs
Jeff Layton (3):
ceph: fix fscache invalidation
ceph: don't clobber i_snap_caps on non-I_NEW inode
ceph: don't allow access to MDS-private inodes
Johannes Berg (2):
um: Mark all kernel symbols as local
um: Disable CONFIG_GCOV with MODULES
Kaixu Xia (1):
cxgb4: Fix the -Wmisleading-indentation warning
Keith Busch (1):
nvmet: remove unsupported command noise
Linus Torvalds (1):
drm/i915/display: fix compiler warning about array overrun
Manivannan Sadhasivam (1):
ARM: 9075/1: kernel: Fix interrupted SMC calls
Nathan Chancellor (3):
riscv: Use $(LD) instead of $(CC) to link vDSO scripts/recordmcount.pl: Fix RISC-V regex for clang
riscv: Workaround mcount name prior to clang-13
Phillip Potter (1):
net: hsr: check skb can contain struct hsr_ethhdr in fill_frame_info
Prashant Malani (1):
platform/chrome: cros_ec_typec: Add DP mode check
Rodrigo Siqueira (1):
drm/amd/display: Fix two cursor duplication when using overlay
Trond Myklebust (1):
NFS: NFS_INO_REVAL_PAGECACHE should mark the change attribute invalid
Yannick Vignon (1):
net: stmmac: Do not enable RX FIFO overflow interrupts
Zhang Zhengming (1):
bridge: Fix possible races between assigning rx_handler_data and setting IFF_BRIDGE_PORT bit
Zqiang (1):
lib: stackdepot: turn depot_lock spinlock to raw_spinlock
louis.wang (1):
ARM: 9066/1: ftrace: pause/unpause function graph tracer in cpu_suspend()
yangerkun (1):
block: reexpand iov_iter after read/write
Íñigo Huguet (1):
net:CXGB4: fix leak if sk_buff is not used
Greg Kroah-Hartman
maintainerDocumentation/sphinx/parse-headers.pl +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/env perl use strict; use Text::Tabs; use Getopt::Long;
Documentation/target/tcm_mod_builder.py +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python # The TCM v4 multi-protocol fabric module generation script for drivers/target/$NEW_MOD # # Copyright (c) 2010 Rising Tide Systems
Documentation/trace/postprocess/decode_msr.py +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python # add symbolic names to read_msr / write_msr in trace # decode_msr msr-index.h < trace import sys
Documentation/trace/postprocess/trace-pagealloc-postprocess.pl +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/env perl # This is a POC (proof of concept or piece of crap, take your pick) for reading the # text representation of trace output related to page allocation. It makes an attempt # to extract some high-level information on what is going on. The accuracy of the parser
Documentation/trace/postprocess/trace-vmscan-postprocess.pl +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/env perl # This is a POC for reading the text representation of trace output related to # page reclaim. It makes an attempt to extract some high-level information on # what is going on. The accuracy of the parser may vary
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 38 +SUBLEVEL = 39 EXTRAVERSION = NAME = Dare mighty things
arch/arm/kernel/asm-offsets.c +3 -0
@@ -24,6 +24,7 @@#include <asm/vdso_datapage.h> #include <asm/hardware/cache-l2x0.h> #include <linux/kbuild.h> +#include <linux/arm-smccc.h> #include "signal.h" /*
@@ -148,6 +149,8 @@ int main(void)DEFINE (SLEEP_SAVE_SP_PHYS , offsetof(struct sleep_save_sp , save_ptr_stash_phys));DEFINE (SLEEP_SAVE_SP_VIRT , offsetof(struct sleep_save_sp , save_ptr_stash));#endif +DEFINE (ARM_SMCCC_QUIRK_ID_OFFS , offsetof(struct arm_smccc_quirk , id)); +DEFINE (ARM_SMCCC_QUIRK_STATE_OFFS , offsetof(struct arm_smccc_quirk , state));BLANK ();DEFINE (DMA_BIDIRECTIONAL ,DMA_BIDIRECTIONAL );DEFINE (DMA_TO_DEVICE ,DMA_TO_DEVICE );
arch/arm/kernel/smccc-call.S +10 -1
@@ -3,7 +3,9 @@ * Copyright (c) 2015, Linaro Limited */ #include <linux/linkage.h> +#include <linux/arm-smccc.h> +#include <asm/asm-offsets.h> #include <asm/opcodes-sec.h> #include <asm/opcodes-virt.h> #include <asm/unwind.h>
@@ -27,7 +29,14 @@ UNWIND( .fnstart) UNWIND( .save {r4-r7}) ldm r12, {r4-r7} \instr - pop {r4-r7} + ldr r4, [sp, #36] + cmp r4, #0 + beq 1f // No quirk structure + ldr r5, [r4, #ARM_SMCCC_QUIRK_ID_OFFS] + cmp r5, #ARM_SMCCC_QUIRK_QCOM_A6 + bne 1f // No quirk present + str r6, [r4, #ARM_SMCCC_QUIRK_STATE_OFFS] +1: pop {r4-r7} ldr r12, [sp, #(4 * 4)] stm r12, {r0-r3} bx lr
arch/arm/kernel/suspend.c +18 -1
@@ -1,4 +1,5 @@// SPDX-License-Identifier: GPL-2.0 +#include <linux/ftrace.h> #include <linux/init.h> #include <linux/slab.h> #include <linux/mm_types.h>
@@ -25,6 +26,13 @@ int cpu_suspend(unsigned long arg, int (*fn)(unsigned long))if (!idmap_pgd)return -EINVAL ; +/* +* Function graph tracer state gets incosistent when the kernel +* calls functions that never return (aka suspend finishers) hence +* disable graph tracing during their execution. +*/ +pause_graph_tracing (); +/* * Provide a temporary page table with an identity mapping for * the MMU-enable code, required for resuming. On successful
@@ -32,6 +40,9 @@ int cpu_suspend(unsigned long arg, int (*fn)(unsigned long))* back to the correct page tables. */ ret =__cpu_suspend (arg, fn, __mpidr); + +unpause_graph_tracing (); +if (ret ==0 ) {cpu_switch_mm (mm->pgd, mm);local_flush_bp_all ();
@@ -45,7 +56,13 @@ int cpu_suspend(unsigned long arg, int (*fn)(unsigned long))int cpu_suspend (unsigned long arg,int (*fn)(unsigned long )) {u32 __mpidr =cpu_logical_map (smp_processor_id ()); -return __cpu_suspend (arg, fn, __mpidr); +int ret; + +pause_graph_tracing (); + ret =__cpu_suspend (arg, fn, __mpidr); +unpause_graph_tracing (); + +return ret; }#define idmap_pgd NULL#endif
arch/ia64/scripts/unwcheck.py +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python # SPDX-License-Identifier: GPL-2.0 # # Usage: unwcheck.py FILE
arch/riscv/include/asm/ftrace.h +12 -2
@@ -13,9 +13,19 @@#endif #define HAVE_FUNCTION_GRAPH_RET_ADDR_PTR +/* +* Clang prior to 13 had "mcount" instead of "_mcount": +* https://reviews.llvm.org/D98881 +*/ +#if defined(CONFIG_CC_IS_GCC ) ||CONFIG_CLANG_VERSION >=130000 +#define MCOUNT_NAME _mcount +#else +#define MCOUNT_NAME mcount +#endif +#define ARCH_SUPPORTS_FTRACE_OPS 1#ifndef __ASSEMBLY__ -void _mcount (void ); +void MCOUNT_NAME (void );static inline unsigned long ftrace_call_adjust (unsigned long addr) {return addr;
@@ -36,7 +46,7 @@ struct dyn_arch_ftrace {* both auipc and jalr at the same time. */ -#define MCOUNT_ADDR ((unsigned long)_mcount) +#define MCOUNT_ADDR ((unsigned long)MCOUNT_NAME)#define JALR_SIGN_MASK (0x00000800)#define JALR_OFFSET_MASK (0x00000fff)#define AUIPC_OFFSET_MASK (0xfffff000)
arch/riscv/kernel/mcount.S +5 -5
@@ -47,8 +47,8 @@ ENTRY(ftrace_stub) #ifdef CONFIG_DYNAMIC_FTRACE - .global _mcount - .set _mcount, ftrace_stub + .global MCOUNT_NAME + .set MCOUNT_NAME, ftrace_stub #endif ret ENDPROC(ftrace_stub)
@@ -78,7 +78,7 @@ ENDPROC(return_to_handler) #endif #ifndef CONFIG_DYNAMIC_FTRACE -ENTRY(_mcount) +ENTRY(MCOUNT_NAME) la t4, ftrace_stub #ifdef CONFIG_FUNCTION_GRAPH_TRACER la t0, ftrace_graph_return
@@ -124,6 +124,6 @@ do_trace: jalr t5 RESTORE_ABI_STATE ret -ENDPROC(_mcount) +ENDPROC(MCOUNT_NAME) #endif -EXPORT_SYMBOL(_mcount) +EXPORT_SYMBOL(MCOUNT_NAME)
arch/riscv/kernel/vdso/Makefile +4 -8
@@ -41,11 +41,10 @@ KASAN_SANITIZE := n $(obj)/vdso.o: $(obj)/vdso.so # link rule for the .so file, .lds has to be first -SYSCFLAGS_vdso.so.dbg = $(c_flags) $(obj)/vdso.so.dbg: $(src)/vdso.lds $(obj-vdso) FORCE $(call if_changed,vdsold) -SYSCFLAGS_vdso.so.dbg = -shared -s -Wl,-soname=linux-vdso.so.1 \ - -Wl,--build-id=sha1 -Wl,--hash-style=both +LDFLAGS_vdso.so.dbg = -shared -s -soname=linux-vdso.so.1 \ + --build-id=sha1 --hash-style=both --eh-frame-hdr # We also create a special relocatable object that should mirror the symbol # table and layout of the linked DSO. With ld --just-symbols we can then
@@ -60,13 +59,10 @@ $(obj)/%.so: $(obj)/%.so.dbg FORCE # actual build commands # The DSO images are built using a special linker script -# Add -lgcc so rv32 gets static muldi3 and lshrdi3 definitions. # Make sure only to export the intended __vdso_xxx symbol offsets. quiet_cmd_vdsold = VDSOLD $@ - cmd_vdsold = $(CC) $(KBUILD_CFLAGS) $(call cc-option, -no-pie) -nostdlib -nostartfiles $(SYSCFLAGS_$(@F)) \ - -Wl,-T,$(filter-out FORCE,$^) -o [email protected] && \ - $(CROSS_COMPILE)objcopy \ - $(patsubst %, -G __vdso_%, $(vdso-syms)) [email protected] $@ && \ + cmd_vdsold = $(LD) $(ld_flags) -T $(filter-out FORCE,$^) -o [email protected] && \ + $(OBJCOPY) $(patsubst %, -G __vdso_%, $(vdso-syms)) [email protected] $@ && \ rm [email protected] # Extracts symbol offsets from the VDSO, converting them into an assembly file
arch/um/Kconfig.debug +1 -0
@@ -17,6 +17,7 @@ config GCOV bool "Enable gcov support" depends on DEBUG_INFO depends on !KCOV + depends on !MODULES help This option allows developers to retrieve coverage data from a UML session.
arch/um/kernel/Makefile +0 -1
@@ -21,7 +21,6 @@ obj-y = config.o exec.o exitcode.o irq.o ksyms.o mem.o \ obj-$(CONFIG_BLK_DEV_INITRD) += initrd.o obj-$(CONFIG_GPROF) += gprof_syms.o -obj-$(CONFIG_GCOV) += gmon_syms.o obj-$(CONFIG_EARLY_PRINTK) += early_printk.o obj-$(CONFIG_STACKTRACE) += stacktrace.o
arch/um/kernel/dyn.lds.S +6 -0
@@ -6,6 +6,12 @@ OUTPUT_ARCH(ELF_ARCH) ENTRY(_start) jiffies = jiffies_64; +VERSION { + { + local: *; + }; +} + SECTIONS { PROVIDE (__executable_start = START);
arch/um/kernel/gmon_syms.c deleted +0 -16
@@ -1,16 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/* -* Copyright (C) 2001 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com) -*/ - -#include <linux/module.h> - -extern void __bb_init_func (void *) __attribute__((weak)); -EXPORT_SYMBOL (__bb_init_func); - -extern void __gcov_init (void *) __attribute__((weak)); -EXPORT_SYMBOL (__gcov_init); -extern void __gcov_merge_add (void *,unsigned int ) __attribute__((weak)); -EXPORT_SYMBOL (__gcov_merge_add); -extern void __gcov_exit (void ) __attribute__((weak)); -EXPORT_SYMBOL (__gcov_exit);
arch/um/kernel/uml.lds.S +6 -0
@@ -7,6 +7,12 @@ OUTPUT_ARCH(ELF_ARCH) ENTRY(_start) jiffies = jiffies_64; +VERSION { + { + local: *; + }; +} + SECTIONS { /* This must contain the right address - not quite the default ELF one.*/
arch/x86/lib/msr-smp.c +2 -2
@@ -253,7 +253,7 @@ static void __wrmsr_safe_regs_on_cpu(void *info) rv->err =wrmsr_safe_regs (rv->regs); } -int rdmsr_safe_regs_on_cpu (unsigned int cpu,u32 *regs) +int rdmsr_safe_regs_on_cpu (unsigned int cpu,u32 regs[8 ]) {int err;struct msr_regs_info rv;
@@ -266,7 +266,7 @@ int rdmsr_safe_regs_on_cpu(unsigned int cpu, u32 *regs) }EXPORT_SYMBOL (rdmsr_safe_regs_on_cpu); -int wrmsr_safe_regs_on_cpu (unsigned int cpu,u32 *regs) +int wrmsr_safe_regs_on_cpu (unsigned int cpu,u32 regs[8 ]) {int err;struct msr_regs_info rv;
drivers/dma/dw-edma/dw-edma-core.c +5 -6
@@ -937,22 +937,21 @@ int dw_edma_remove(struct dw_edma_chip *chip)/* Power management */ pm_runtime_disable (dev); +/* Deregister eDMA device */ +dma_async_device_unregister (&dw->wr_edma);list_for_each_entry_safe (chan, _chan, &dw->wr_edma.channels, vc.chan.device_node) { -list_del (&chan->vc.chan.device_node);tasklet_kill (&chan->vc.task); +list_del (&chan->vc.chan.device_node); } +dma_async_device_unregister (&dw->rd_edma);list_for_each_entry_safe (chan, _chan, &dw->rd_edma.channels, vc.chan.device_node) { -list_del (&chan->vc.chan.device_node);tasklet_kill (&chan->vc.task); +list_del (&chan->vc.chan.device_node); } -/* Deregister eDMA device */ -dma_async_device_unregister (&dw->wr_edma); -dma_async_device_unregister (&dw->rd_edma); -/* Turn debugfs off */ dw_edma_v0_core_debugfs_off ();
drivers/gpio/gpiolib-acpi.c +14 -0
@@ -1407,6 +1407,20 @@ static const struct dmi_system_id gpiolib_acpi_quirks[] __initconst = { .no_edge_events_on_boot = true, }, }, + { +/* +* The Dell Venue 10 Pro 5055, with Bay Trail SoC + TI PMIC uses an +* external embedded-controller connected via I2C + an ACPI GPIO +* event handler on INT33FFC:02 pin 12, causing spurious wakeups. +*/ + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"Dell Inc." ), + DMI_MATCH(DMI_PRODUCT_NAME, "Venue 10 Pro 5055"), + }, + .driver_data = &(struct acpi_gpiolib_dmi_quirk ) { + .ignore_wake ="INT33FC:02@12" , + }, + }, {/* * HP X2 10 models with Cherry Trail SoC + TI PMIC use an
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +51 -0
63 lines not on this page · raw message
drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c +4 -1
@@ -1110,7 +1110,6 @@ static int navi10_force_clk_levels(struct smu_context *smu,case SMU_SOCCLK :case SMU_MCLK :case SMU_UCLK : -case SMU_DCEFCLK :case SMU_FCLK :/* There is only 2 levels for fine grained DPM */ if (navi10_is_support_fine_grained_dpm (smu, clk_type)) {
@@ -1130,6 +1129,10 @@ static int navi10_force_clk_levels(struct smu_context *smu,if (ret)return size;break ; +case SMU_DCEFCLK : +dev_info (smu->adev->dev,"Setting DCEFCLK min/max dpm level is not supported!\n" ); +break ; +default :break ; }
drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c +3 -1
@@ -1018,7 +1018,6 @@ static int sienna_cichlid_force_clk_levels(struct smu_context *smu,case SMU_SOCCLK :case SMU_MCLK :case SMU_UCLK : -case SMU_DCEFCLK :case SMU_FCLK :/* There is only 2 levels for fine grained DPM */ if (sienna_cichlid_is_support_fine_grained_dpm (smu, clk_type)) {
@@ -1038,6 +1037,9 @@ static int sienna_cichlid_force_clk_levels(struct smu_context *smu,if (ret) goto forec_level_out;break ; +case SMU_DCEFCLK : +dev_info (smu->adev->dev,"Setting DCEFCLK min/max dpm level is not supported!\n" ); +break ;default :break ; }
drivers/gpu/drm/i915/display/intel_dp.c +12 -1
@@ -5655,7 +5655,18 @@ intel_dp_check_mst_status(struct intel_dp *intel_dp)drm_WARN_ON_ONCE (&i915->drm, intel_dp->active_mst_links <0 );for (;;) { -u8 esi[DP_DPRX_ESI_LEN ] = {}; +/* +* The +2 is because DP_DPRX_ESI_LEN is 14, but we then +* pass in "esi+10" to drm_dp_channel_eq_ok(), which +* takes a 6-byte array. So we actually need 16 bytes +* here. +* +* Somebody who knows what the limits actually are +* should check this, but for now this is at least +* harmless and avoids a valid compiler warning about +* using more of the array than we have allocated. +*/ +u8 esi[DP_DPRX_ESI_LEN +2 ] = {};bool handled;int retry;
drivers/input/touchscreen/elants_i2c.c +42 -2
63 lines not on this page · raw message
drivers/input/touchscreen/silead.c +40 -4
68 lines not on this page · raw message
drivers/isdn/capi/kcapi.c +2 -2
@@ -721,7 +721,7 @@ u16 capi20_put_message(struct capi20_appl *ap, struct sk_buff *skb)* Return value: CAPI result code */ -u16 capi20_get_manufacturer (u32 contr,u8 *buf) +u16 capi20_get_manufacturer (u32 contr,u8 buf[CAPI_MANUFACTURER_LEN ]) {struct capi_ctr *ctr;u16 ret;
@@ -787,7 +787,7 @@ u16 capi20_get_version(u32 contr, struct capi_version *verp)* Return value: CAPI result code */ -u16 capi20_get_serial (u32 contr,u8 *serial) +u16 capi20_get_serial (u32 contr,u8 serial[CAPI_SERIAL_LEN ]) {struct capi_ctr *ctr;u16 ret;
drivers/misc/kgdbts.c +13 -13
@@ -95,19 +95,19 @@#include <asm/sections.h> -#define v1printk(a...) do { \ - if (verbose) \ - printk(KERN_INFO a); \ - } while (0) -#define v2printk(a...) do { \ - if (verbose > 1) \ - printk(KERN_INFO a); \ - touch_nmi_watchdog(); \ - } while (0) -#define eprintk(a...) do { \ - printk(KERN_ERR a); \ - WARN_ON(1); \ - } while (0) +#define v1printk(a...) do { \ + if (verbose) \ + printk(KERN_INFO a); \ +} while (0) +#define v2printk(a...) do { \ + if (verbose > 1) \ + printk(KERN_INFO a); \ + touch_nmi_watchdog(); \ +} while (0) +#define eprintk(a...) do { \ + printk(KERN_ERR a); \ + WARN_ON(1); \ +} while (0)#define MAX_CONFIG_LEN 40static struct kgdb_io kgdbts_io_ops;
drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c +1 -1
@@ -2671,7 +2671,7 @@ do { \seq_printf (seq,"%-12s" , s); \for (i =0 ; i < n; ++i) \seq_printf (seq," %16" fmt_spec, v); \ -seq_putc (seq,'\n' ); \ +seq_putc (seq,'\n' ); \ } while (0)#define S (s, v) S3("s", s, v)#define T3 (fmt_spec, s, v) S3(fmt_spec, s, tx[i].v)
drivers/net/ethernet/chelsio/cxgb4/sge.c +9 -7
@@ -2559,12 +2559,12 @@ int cxgb4_ethofld_send_flowc(struct net_device *dev, u32 eotid, u32 tc)spin_lock_bh (&eosw_txq->lock);if (tc !=FW_SCHED_CLS_NONE ) {if (eosw_txq->state !=CXGB4_EO_STATE_CLOSED ) - goto out_unlock; + goto out_free_skb; next_state =CXGB4_EO_STATE_FLOWC_OPEN_SEND ; }else {if (eosw_txq->state !=CXGB4_EO_STATE_ACTIVE ) - goto out_unlock; + goto out_free_skb; next_state =CXGB4_EO_STATE_FLOWC_CLOSE_SEND ; }
@@ -2600,17 +2600,19 @@ int cxgb4_ethofld_send_flowc(struct net_device *dev, u32 eotid, u32 tc)eosw_txq_flush_pending_skbs (eosw_txq); ret =eosw_txq_enqueue (eosw_txq, skb); -if (ret) { -dev_consume_skb_any (skb); - goto out_unlock; - } +if (ret) + goto out_free_skb; eosw_txq->state = next_state; eosw_txq->flowc_idx = eosw_txq->pidx;eosw_txq_advance (eosw_txq,1 );ethofld_xmit (dev, eosw_txq); -out_unlock: +spin_unlock_bh (&eosw_txq->lock); +return 0 ; + +out_free_skb: +dev_consume_skb_any (skb);spin_unlock_bh (&eosw_txq->lock);return ret; }
drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c +1 -6
@@ -222,7 +222,7 @@ static void dwmac4_dma_rx_chan_op_mode(void __iomem *ioaddr, int mode, u32 channel, int fifosz, u8 qmode) { unsigned int rqs = fifosz / 256 - 1; -u32 mtl_rx_op, mtl_rx_int; +u32 mtl_rx_op; mtl_rx_op =readl (ioaddr +MTL_CHAN_RX_OP_MODE (channel));
@@ -283,11 +283,6 @@ static void dwmac4_dma_rx_chan_op_mode(void __iomem *ioaddr, int mode, }writel (mtl_rx_op, ioaddr +MTL_CHAN_RX_OP_MODE (channel)); - -/* Enable MTL RX overflow */ - mtl_rx_int =readl (ioaddr +MTL_CHAN_INT_CTRL (channel)); -writel (mtl_rx_int |MTL_RX_OVERFLOW_INT_EN , - ioaddr +MTL_CHAN_INT_CTRL (channel)); } static void dwmac4_dma_tx_chan_op_mode(void __iomem *ioaddr, int mode,
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +2 -12
@@ -4138,7 +4138,6 @@ static irqreturn_t stmmac_interrupt(int irq, void *dev_id)/* To handle GMAC own interrupts */ if ((priv->plat->has_gmac) || xmac) {int status =stmmac_host_irq_status (priv, priv->hw, &priv->xstats); -int mtl_status;if (unlikely (status)) {/* For LPI we need to save the tx status */
@@ -4149,17 +4148,8 @@ static irqreturn_t stmmac_interrupt(int irq, void *dev_id) }for (queue =0 ; queue < queues_count; queue++) { -struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue]; - - mtl_status =stmmac_host_mtl_irq_status (priv, priv->hw, - queue); -if (mtl_status != -EINVAL ) - status |= mtl_status; - -if (status &CORE_IRQ_MTL_RX_OVERFLOW ) -stmmac_set_rx_tail_ptr (priv, priv->ioaddr, - rx_q->rx_tail_addr, - queue); + status =stmmac_host_mtl_irq_status (priv, priv->hw, + queue); }/* PCS link status */
drivers/net/virtio_net.c +7 -3
@@ -406,9 +406,13 @@ static struct sk_buff *page_to_skb(struct virtnet_info *vi, offset += hdr_padded_len; p += hdr_padded_len; - copy = len; -if (copy >skb_tailroom (skb)) - copy =skb_tailroom (skb); +/* Copy all frame if it fits skb->head, otherwise +* we let virtio_net_hdr_to_skb() and GRO pull headers as needed. +*/ +if (len <=skb_tailroom (skb)) + copy = len; +else + copy =ETH_HLEN + metasize;skb_put_data (skb, p, copy);if (metasize) {
drivers/net/wireless/cisco/airo.c +65 -52
129 lines not on this page · raw message
drivers/nvme/target/admin-cmd.c +3 -3
@@ -313,7 +313,7 @@ static void nvmet_execute_get_log_page(struct nvmet_req *req)case NVME_LOG_ANA :return nvmet_execute_get_log_page_ana (req); } -pr_err ("unhandled lid %d on qid %d\n" , +pr_debug ("unhandled lid %d on qid %d\n" , req->cmd->get_log_page.lid, req->sq->qid); req->error_loc = offsetof(struct nvme_get_log_page_command , lid);nvmet_req_complete (req,NVME_SC_INVALID_FIELD |NVME_SC_DNR );
@@ -657,7 +657,7 @@ static void nvmet_execute_identify(struct nvmet_req *req)return nvmet_execute_identify_desclist (req); } -pr_err ("unhandled identify cns %d on qid %d\n" , +pr_debug ("unhandled identify cns %d on qid %d\n" , req->cmd->identify.cns, req->sq->qid); req->error_loc = offsetof(struct nvme_identify , cns);nvmet_req_complete (req,NVME_SC_INVALID_FIELD |NVME_SC_DNR );
@@ -972,7 +972,7 @@ u16 nvmet_parse_admin_cmd(struct nvmet_req *req)return 0 ; } -pr_err ("unhandled cmd %d on qid %d\n" , cmd->common.opcode, +pr_debug ("unhandled cmd %d on qid %d\n" , cmd->common.opcode, req->sq->qid); req->error_loc = offsetof(struct nvme_common_command , opcode);return NVME_SC_INVALID_OPCODE |NVME_SC_DNR ;
drivers/pci/controller/dwc/pcie-tegra194.c +1 -1
@@ -1660,7 +1660,7 @@ static void pex_ep_event_pex_rst_deassert(struct tegra_pcie_dw *pcie)if (pcie->ep_state ==EP_STATE_ENABLED )return ; - ret =pm_runtime_get_sync (dev); + ret =pm_runtime_resume_and_get (dev);if (ret <0 ) {dev_err (dev,"Failed to get runtime sync for PCIe dev: %d\n" , ret);
drivers/pci/controller/pci-thunder-ecam.c +1 -1
@@ -116,7 +116,7 @@ static int thunder_ecam_p2_config_read(struct pci_bus *bus, unsigned int devfn,* the config space access window. Since we are working with * the high-order 32 bits, shift everything down by 32 bits. */ - node_bits = (cfg->res.start >>32 ) & (1 <<12 ); + node_bits =upper_32_bits (cfg->res.start) & (1 <<12 ); v |= node_bits;set_val (v, where, size, val);
drivers/pci/controller/pci-thunder-pem.c +7 -6
@@ -12,6 +12,7 @@#include <linux/pci-acpi.h> #include <linux/pci-ecam.h> #include <linux/platform_device.h> +#include <linux/io-64-nonatomic-lo-hi.h> #include "../pci.h" #if defined(CONFIG_PCI_HOST_THUNDER_PEM ) || (defined(CONFIG_ACPI ) && defined(CONFIG_PCI_QUIRKS ))
@@ -315,9 +316,9 @@ static int thunder_pem_init(struct device *dev, struct pci_config_window *cfg,* structure here for the BAR. */ bar4_start = res_pem->start +0xf00000 ; - pem_pci->ea_entry[0 ] = (u32 )bar4_start |2 ; - pem_pci->ea_entry[1 ] = (u32)(res_pem->end - bar4_start) & ~3u ; - pem_pci->ea_entry[2 ] = (u32)(bar4_start >>32 ); + pem_pci->ea_entry[0 ] =lower_32_bits (bar4_start) |2 ; + pem_pci->ea_entry[1 ] =lower_32_bits (res_pem->end - bar4_start) & ~3u ; + pem_pci->ea_entry[2 ] =upper_32_bits (bar4_start); cfg->priv = pem_pci;return 0 ;
@@ -325,9 +326,9 @@ static int thunder_pem_init(struct device *dev, struct pci_config_window *cfg,#if defined(CONFIG_ACPI ) && defined(CONFIG_PCI_QUIRKS ) -#define PEM_RES_BASE 0x87e0c0000000UL -#define PEM_NODE_MASK GENMASK(45, 44) -#define PEM_INDX_MASK GENMASK(26, 24) +#define PEM_RES_BASE 0x87e0c0000000ULL +#define PEM_NODE_MASK GENMASK_ULL(45, 44) +#define PEM_INDX_MASK GENMASK_ULL(26, 24)#define PEM_MIN_DOM_IN_NODE 4#define PEM_MAX_DOM_IN_NODE 10
drivers/pci/hotplug/acpiphp_glue.c +1 -0
@@ -533,6 +533,7 @@ static void enable_slot(struct acpiphp_slot *slot, bool bridge) slot->flags &= ~SLOT_ENABLED ;continue ; } +pci_dev_put (dev); } }
drivers/pci/pci.h +6 -0
@@ -606,6 +606,12 @@ static inline int pci_dev_specific_reset(struct pci_dev *dev, int probe)#if defined(CONFIG_PCI_QUIRKS ) && defined(CONFIG_ARM64 )int acpi_get_rc_resources (struct device *dev,const char *hid,u16 segment,struct resource *res); +#else +static inline int acpi_get_rc_resources (struct device *dev,const char *hid, +u16 segment,struct resource *res) +{ +return -ENODEV ; +}#endif u32 pci_rebar_get_possible_sizes (struct pci_dev *pdev,int bar);
drivers/platform/chrome/cros_ec_typec.c +5 -0
@@ -475,6 +475,11 @@ static int cros_typec_enable_dp(struct cros_typec_data *typec,return -ENOTSUPP ; } +if (!pd_ctrl->dp_mode) { +dev_err (typec->dev,"No valid DP mode provided.\n" ); +return -EINVAL ; + } +/* Status VDO. */ dp_data.status =DP_STATUS_ENABLED ;if (port->mux_flags &USB_PD_MUX_HPD_IRQ )
drivers/scsi/lpfc/lpfc_sli.c +9 -2
@@ -11590,13 +11590,20 @@ lpfc_sli_validate_fcp_iocb(struct lpfc_iocbq *iocbq, struct lpfc_vport *vport, lpfc_ctx_cmd ctx_cmd) {struct lpfc_io_buf *lpfc_cmd; +IOCB_t *icmd =NULL ;int rc =1 ;if (iocbq->vport != vport)return rc; -if (!(iocbq->iocb_flag &LPFC_IO_FCP ) || - !(iocbq->iocb_flag &LPFC_IO_ON_TXCMPLQ )) +if (!(iocbq->iocb_flag &LPFC_IO_FCP ) || + !(iocbq->iocb_flag &LPFC_IO_ON_TXCMPLQ ) || + iocbq->iocb_flag &LPFC_DRIVER_ABORTED ) +return rc; + + icmd = &iocbq->iocb; +if (icmd->ulpCommand ==CMD_ABORT_XRI_CN || + icmd->ulpCommand ==CMD_CLOSE_XRI_CN )return rc; lpfc_cmd = container_of(iocbq, struct lpfc_io_buf, cur_iocbq);
drivers/target/target_core_user.c +2 -2
@@ -1391,7 +1391,7 @@ static int tcmu_run_tmr_queue(struct tcmu_dev *udev)return 1 ; } -static unsigned int tcmu_handle_completions (struct tcmu_dev *udev) +static bool tcmu_handle_completions (struct tcmu_dev *udev) {struct tcmu_mailbox *mb;struct tcmu_cmd *cmd;
@@ -1434,7 +1434,7 @@ static unsigned int tcmu_handle_completions(struct tcmu_dev *udev)pr_err ("cmd_id %u not found, ring is broken\n" , entry->hdr.cmd_id);set_bit (TCMU_DEV_BIT_BROKEN , &udev->flags); -break ; +return false; }tcmu_handle_completion (cmd, entry);
drivers/usb/host/sl811-hcd.c +4 -5
@@ -1287,11 +1287,10 @@ sl811h_hub_control( goto error;put_unaligned_le32 (sl811->port1, buf); -#ifndef VERBOSE - if (*(u16*)(buf+2)) /* only if wPortChange is interesting */ -#endif -dev_dbg (hcd->self.controller,"GetPortStatus %08x\n" , - sl811->port1); +if (__is_defined (VERBOSE ) || + *(u16 *)(buf+2 ))/* only if wPortChange is interesting */ +dev_dbg (hcd->self.controller,"GetPortStatus %08x\n" , + sl811->port1);break ;case SetPortFeature:if (wIndex !=1 || wLength !=0 )
fs/block_dev.c +17 -3
@@ -1903,6 +1903,7 @@ ssize_t blkdev_write_iter(struct kiocb *iocb, struct iov_iter *from)struct inode *bd_inode =bdev_file_inode (file);loff_t size =i_size_read (bd_inode);struct blk_plug plug; +size_t shorted =0 ;ssize_t ret;if (bdev_read_only (I_BDEV (bd_inode)))
@@ -1920,12 +1921,17 @@ ssize_t blkdev_write_iter(struct kiocb *iocb, struct iov_iter *from)if ((iocb->ki_flags & (IOCB_NOWAIT |IOCB_DIRECT )) ==IOCB_NOWAIT )return -EOPNOTSUPP ; -iov_iter_truncate (from, size - iocb->ki_pos); + size -= iocb->ki_pos; +if (iov_iter_count (from) > size) { + shorted =iov_iter_count (from) - size; +iov_iter_truncate (from, size); + }blk_start_plug (&plug); ret =__generic_file_write_iter (iocb, from);if (ret >0 ) ret =generic_write_sync (iocb, ret); +iov_iter_reexpand (from,iov_iter_count (from) + shorted);blk_finish_plug (&plug);return ret; }
@@ -1937,13 +1943,21 @@ ssize_t blkdev_read_iter(struct kiocb *iocb, struct iov_iter *to)struct inode *bd_inode =bdev_file_inode (file);loff_t size =i_size_read (bd_inode);loff_t pos = iocb->ki_pos; +size_t shorted =0 ; +ssize_t ret;if (pos >= size)return 0 ; size -= pos; -iov_iter_truncate (to, size); -return generic_file_read_iter (iocb, to); +if (iov_iter_count (to) > size) { + shorted =iov_iter_count (to) - size; +iov_iter_truncate (to, size); + } + + ret =generic_file_read_iter (iocb, to); +iov_iter_reexpand (to,iov_iter_count (to) + shorted); +return ret; }EXPORT_SYMBOL_GPL (blkdev_read_iter);
fs/ceph/caps.c +1 -0
@@ -1866,6 +1866,7 @@ static int try_nonblocking_invalidate(struct inode *inode)u32 invalidating_gen = ci->i_rdcache_gen;spin_unlock (&ci->i_ceph_lock); +ceph_fscache_invalidate (inode);invalidate_mapping_pages (&inode->i_data,0 ,-1 );spin_lock (&ci->i_ceph_lock);
fs/ceph/export.c +8 -0
@@ -129,6 +129,10 @@ static struct inode *__lookup_inode(struct super_block *sb, u64 ino) vino.ino = ino; vino.snap =CEPH_NOSNAP ; + +if (ceph_vino_is_reserved (vino)) +return ERR_PTR (-ESTALE ); + inode =ceph_find_inode (sb, vino);if (!inode) {struct ceph_mds_request *req;
@@ -214,6 +218,10 @@ static struct dentry *__snapfh_to_dentry(struct super_block *sb, vino.ino = sfh->ino; vino.snap = sfh->snapid; } + +if (ceph_vino_is_reserved (vino)) +return ERR_PTR (-ESTALE ); + inode =ceph_find_inode (sb, vino);if (inode)return d_obtain_alias (inode);
fs/ceph/inode.c +9 -4
@@ -56,6 +56,9 @@ struct inode *ceph_get_inode(struct super_block *sb, struct ceph_vino vino) {struct inode *inode; +if (ceph_vino_is_reserved (vino)) +return ERR_PTR (-EREMOTEIO ); + inode =iget5_locked (sb, (unsigned long )vino.ino, ceph_ino_compare, ceph_set_ino_cb, &vino);if (!inode)
@@ -87,14 +90,15 @@ struct inode *ceph_get_snapdir(struct inode *parent) inode->i_mtime = parent->i_mtime; inode->i_ctime = parent->i_ctime; inode->i_atime = parent->i_atime; - inode->i_op = &ceph_snapdir_iops; - inode->i_fop = &ceph_snapdir_fops; - ci->i_snap_caps =CEPH_CAP_PIN ;/* so we can open */ ci->i_rbytes =0 ; ci->i_btime =ceph_inode (parent)->i_btime; -if (inode->i_state &I_NEW ) +if (inode->i_state &I_NEW ) { + inode->i_op = &ceph_snapdir_iops; + inode->i_fop = &ceph_snapdir_fops; + ci->i_snap_caps =CEPH_CAP_PIN ;/* so we can open */ unlock_new_inode (inode); + }return inode; }
@@ -1912,6 +1916,7 @@ static void ceph_do_invalidate_pages(struct inode *inode) orig_gen = ci->i_rdcache_gen;spin_unlock (&ci->i_ceph_lock); +ceph_fscache_invalidate (inode);if (invalidate_inode_pages2 (inode->i_mapping) <0 ) {pr_err ("invalidate_pages %p fails\n" , inode); }
fs/ceph/mds_client.c +7 -0
@@ -433,6 +433,13 @@ static int ceph_parse_deleg_inos(void **p, void *end,ceph_decode_64_safe (p, end, start, bad);ceph_decode_64_safe (p, end, len, bad); + +/* Don't accept a delegation of system inodes */ +if (start <CEPH_INO_SYSTEM_BASE ) { +pr_warn_ratelimited ("ceph: ignoring reserved inode range delegation (start=0x%llx len=0x%llx)\n" , + start, len); +continue ; + }while (len--) { int err = xa_insert(&s->s_delegated_inos, ino = start++, DELEGATED_INO_AVAILABLE,
fs/ceph/super.h +24 -0
@@ -529,10 +529,34 @@ static inline int ceph_ino_compare(struct inode *inode, void *data) ci->i_vino.snap == pvino->snap; } +/* +* The MDS reserves a set of inodes for its own usage. These should never +* be accessible by clients, and so the MDS has no reason to ever hand these +* out. The range is CEPH_MDS_INO_MDSDIR_OFFSET..CEPH_INO_SYSTEM_BASE. +* +* These come from src/mds/mdstypes.h in the ceph sources. +*/ +#define CEPH_MAX_MDS 0x100 +#define CEPH_NUM_STRAY 10 +#define CEPH_MDS_INO_MDSDIR_OFFSET (1 * CEPH_MAX_MDS) +#define CEPH_INO_SYSTEM_BASE ((6*CEPH_MAX_MDS) + (CEPH_MAX_MDS * CEPH_NUM_STRAY)) + +static inline bool ceph_vino_is_reserved (const struct ceph_vino vino) +{ +if (vino.ino <CEPH_INO_SYSTEM_BASE && + vino.ino >=CEPH_MDS_INO_MDSDIR_OFFSET ) { +WARN_RATELIMIT (1 ,"Attempt to access reserved inode number 0x%llx" , vino.ino); +return true; + } +return false; +}static inline struct inode *ceph_find_inode (struct super_block *sb,struct ceph_vino vino) { +if (ceph_vino_is_reserved (vino)) +return NULL ; +/* * NB: The hashval will be run through the fs/inode.c hash function * anyway, so there is no need to squash the inode number down to
fs/nfs/inode.c +2 -1
@@ -207,7 +207,8 @@ static void nfs_set_cache_invalid(struct inode *inode, unsigned long flags) | NFS_INO_INVALID_SIZE |NFS_INO_REVAL_PAGECACHE | NFS_INO_INVALID_XATTR); - } + }else if (flags &NFS_INO_REVAL_PAGECACHE ) + flags |=NFS_INO_INVALID_CHANGE |NFS_INO_INVALID_SIZE ;if (inode->i_mapping->nrpages ==0 ) flags &= ~(NFS_INO_INVALID_DATA |NFS_INO_DATA_INVAL_DEFER );
include/linux/virtio_net.h +9 -5
@@ -65,14 +65,18 @@ static inline int virtio_net_hdr_to_skb(struct sk_buff *skb,skb_reset_mac_header (skb);if (hdr->flags &VIRTIO_NET_HDR_F_NEEDS_CSUM ) { -u16 start =__virtio16_to_cpu (little_endian, hdr->csum_start); -u16 off =__virtio16_to_cpu (little_endian, hdr->csum_offset); +u32 start =__virtio16_to_cpu (little_endian, hdr->csum_start); +u32 off =__virtio16_to_cpu (little_endian, hdr->csum_offset); +u32 needed = start +max_t (u32, thlen, off +sizeof (__sum16)); + +if (!pskb_may_pull (skb, needed)) +return -EINVAL ;if (!skb_partial_csum_set (skb, start, off))return -EINVAL ; p_off =skb_transport_offset (skb) + thlen; -if (p_off >skb_headlen (skb)) +if (!pskb_may_pull (skb, p_off))return -EINVAL ; }else {/* gso packets without NEEDS_CSUM do not set transport_offset.
@@ -102,14 +106,14 @@ static inline int virtio_net_hdr_to_skb(struct sk_buff *skb, } p_off = keys.control.thoff + thlen; -if (p_off >skb_headlen (skb) || +if (!pskb_may_pull (skb, p_off) || keys.basic.ip_proto != ip_proto)return -EINVAL ;skb_set_transport_header (skb, keys.control.thoff); }else if (gso_type) { p_off = thlen; -if (p_off >skb_headlen (skb)) +if (!pskb_may_pull (skb, p_off))return -EINVAL ; } }
lib/stackdepot.c +3 -3
@@ -70,7 +70,7 @@ static void *stack_slabs[STACK_ALLOC_MAX_SLABS];static int depot_index;static int next_slab_inited;static size_t depot_offset; -static DEFINE_SPINLOCK (depot_lock); +static DEFINE_RAW_SPINLOCK (depot_lock);static bool init_stack_slab (void **prealloc) {
@@ -281,7 +281,7 @@ depot_stack_handle_t stack_depot_save(unsigned long *entries, prealloc =page_address (page); } -spin_lock_irqsave (&depot_lock, flags); +raw_spin_lock_irqsave (&depot_lock, flags); found =find_stack (*bucket, entries, nr_entries, hash);if (!found) {
@@ -305,7 +305,7 @@ depot_stack_handle_t stack_depot_save(unsigned long *entries,WARN_ON (!init_stack_slab (&prealloc)); } -spin_unlock_irqrestore (&depot_lock, flags); +raw_spin_unlock_irqrestore (&depot_lock, flags); exit:if (prealloc) {/* Nobody used this memory, ok to free it. */
net/bridge/br_netlink.c +3 -2
@@ -99,8 +99,9 @@ static size_t br_get_link_af_size_filtered(const struct net_device *dev,rcu_read_lock ();if (netif_is_bridge_port (dev)) { - p =br_port_get_rcu (dev); - vg =nbp_vlan_group_rcu (p); + p =br_port_get_check_rcu (dev); +if (p) + vg =nbp_vlan_group_rcu (p); }else if (dev->priv_flags &IFF_EBRIDGE ) { br =netdev_priv (dev); vg =br_vlan_group_rcu (br);
net/hsr/hsr_forward.c +4 -0
@@ -493,6 +493,10 @@ static int fill_frame_info(struct hsr_frame_info *frame,struct ethhdr *ethhdr;__be16 proto; +/* Check if skb contains hsr_ethhdr */ +if (skb->mac_len <sizeof (struct hsr_ethhdr )) +return -EINVAL ; +memset (frame,0 ,sizeof (*frame)); frame->is_supervision =is_supervision_frame (port->hsr, skb); frame->node_src = hsr_get_node(port, &hsr->node_db, skb,
net/ipv6/ip6_gre.c +2 -5
@@ -387,7 +387,6 @@ static struct ip6_tnl *ip6gre_tunnel_locate(struct net *net,if (!(nt->parms.o_flags &TUNNEL_SEQ )) dev->features |=NETIF_F_LLTX ; -dev_hold (dev);ip6gre_tunnel_link (ign, nt);return nt;
@@ -1496,6 +1495,7 @@ static int ip6gre_tunnel_init_common(struct net_device *dev) }ip6gre_tnl_init_features (dev); +dev_hold (dev);return 0 ; cleanup_dst_cache_init:
@@ -1538,8 +1538,6 @@ static void ip6gre_fb_tunnel_init(struct net_device *dev)strcpy (tunnel->parms.name, dev->name); tunnel->hlen =sizeof (struct ipv6hdr ) +4 ; - -dev_hold (dev); }static struct inet6_protocol ip6gre_protocol__read_mostly = {
@@ -1889,6 +1887,7 @@ static int ip6erspan_tap_init(struct net_device *dev) dev->priv_flags |=IFF_LIVE_ADDR_CHANGE ;ip6erspan_tnl_link_config (tunnel,1 ); +dev_hold (dev);return 0 ; cleanup_dst_cache_init:
@@ -1988,8 +1987,6 @@ static int ip6gre_newlink_common(struct net *src_net, struct net_device *dev,if (tb[IFLA_MTU ])ip6_tnl_change_mtu (dev,nla_get_u32 (tb[IFLA_MTU ])); -dev_hold (dev); - out:return err; }
net/ipv6/ip6_tunnel.c +1 -2
@@ -293,7 +293,6 @@ static int ip6_tnl_create2(struct net_device *dev)strcpy (t->parms.name, dev->name); -dev_hold (dev);ip6_tnl_link (ip6n, t);return 0 ;
@@ -1913,6 +1912,7 @@ ip6_tnl_dev_init_gen(struct net_device *dev) dev->min_mtu =ETH_MIN_MTU ; dev->max_mtu =IP6_MAX_MTU - dev->hard_header_len; +dev_hold (dev);return 0 ; destroy_dst:
@@ -1956,7 +1956,6 @@ static int __net_init ip6_fb_tnl_dev_init(struct net_device *dev)struct ip6_tnl_net *ip6n =net_generic (net, ip6_tnl_net_id); t->parms.proto =IPPROTO_IPV6 ; -dev_hold (dev);rcu_assign_pointer (ip6n->tnls_wc[0 ], t);return 0 ;
net/ipv6/ip6_vti.c +0 -1
@@ -962,7 +962,6 @@ static int __net_init vti6_fb_tnl_dev_init(struct net_device *dev)struct vti6_net *ip6n =net_generic (net, vti6_net_id); t->parms.proto =IPPROTO_IPV6 ; -dev_hold (dev);rcu_assign_pointer (ip6n->tnls_wc[0 ], t);return 0 ;
net/ipv6/sit.c +1 -4
@@ -218,8 +218,6 @@ static int ipip6_tunnel_create(struct net_device *dev)ipip6_tunnel_clone_6rd (dev, sitn); -dev_hold (dev); -ipip6_tunnel_link (sitn, t);return 0 ;
@@ -1456,7 +1454,7 @@ static int ipip6_tunnel_init(struct net_device *dev) dev->tstats =NULL ;return err; } - +dev_hold (dev);return 0 ; }
@@ -1472,7 +1470,6 @@ static void __net_init ipip6_fb_tunnel_init(struct net_device *dev) iph->ihl =5 ; iph->ttl =64 ; -dev_hold (dev);rcu_assign_pointer (sitn->tunnels_wc[0 ], tunnel); }
scripts/bloat-o-meter +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 # # Copyright 2004 Matt Mackall <[email protected]> #
scripts/config +1 -1
@@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # SPDX-License-Identifier: GPL-2.0 # Manipulate options in a .config file from the command line
scripts/diffconfig +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 # SPDX-License-Identifier: GPL-2.0 # # diffconfig - a tool to compare .config files.
scripts/get_abi.pl +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/env perl # SPDX-License-Identifier: GPL-2.0 use strict;
scripts/recordmcount.pl +1 -1
@@ -395,7 +395,7 @@ if ($arch eq "x86_64") { $mcount_regex = "^\\s*([0-9a-fA-F]+):.*\\s_mcount\$"; } elsif ($arch eq "riscv") { $function_regex = "^([0-9a-fA-F]+)\\s+<([^.0-9][0-9a-zA-Z_\\.]+)>:"; - $mcount_regex = "^\\s*([0-9a-fA-F]+):\\sR_RISCV_CALL\\s_mcount\$"; + $mcount_regex = "^\\s*([0-9a-fA-F]+):\\sR_RISCV_CALL(_PLT)?\\s_?mcount\$"; $type = ".quad"; $alignment = 2; } elsif ($arch eq "nds32") {
scripts/show_delta +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python # SPDX-License-Identifier: GPL-2.0-only # # show_deltas: Read list of printk messages instrumented with
scripts/sphinx-pre-install +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/env perl # SPDX-License-Identifier: GPL-2.0-or-later use strict;
scripts/split-man.pl +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/env perl # SPDX-License-Identifier: GPL-2.0 # # Author: Mauro Carvalho Chehab <[email protected]>
scripts/tracing/draw_functrace.py +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python # SPDX-License-Identifier: GPL-2.0-only """
sound/pci/hda/hda_generic.c +11 -5
@@ -1202,11 +1202,17 @@ static const char *get_line_out_pfx(struct hda_codec *codec, int ch, *index = ch;return "Headphone" ;case AUTO_PIN_LINE_OUT : -/* This deals with the case where we have two DACs and -* one LO, one HP and one Speaker */ -if (!ch && cfg->speaker_outs && cfg->hp_outs) { -bool hp_lo_shared = !path_has_mixer (codec, spec->hp_paths[0 ], ctl_type); -bool spk_lo_shared = !path_has_mixer (codec, spec->speaker_paths[0 ], ctl_type); +/* This deals with the case where one HP or one Speaker or +* one HP + one Speaker need to share the DAC with LO +*/ +if (!ch) { +bool hp_lo_shared = false, spk_lo_shared = false; + +if (cfg->speaker_outs) + spk_lo_shared = !path_has_mixer (codec, + spec->speaker_paths[0 ], ctl_type); +if (cfg->hp_outs) + hp_lo_shared = !path_has_mixer (codec, spec->hp_paths[0 ], ctl_type);if (hp_lo_shared && spk_lo_shared)return spec->vmaster_mute.hook ?"PCM" :"Master" ;if (hp_lo_shared)
tools/perf/python/tracepoint.py +1 -1
@@ -1,4 +1,4 @@ -#! /usr/bin/python +#! /usr/bin/env python # SPDX-License-Identifier: GPL-2.0 # -*- python -*- # -*- coding: utf-8 -*-
tools/perf/python/twatch.py +1 -1
@@ -1,4 +1,4 @@ -#! /usr/bin/python +#! /usr/bin/env python # SPDX-License-Identifier: GPL-2.0-only # -*- python -*- # -*- coding: utf-8 -*-
tools/power/x86/intel_pstate_tracer/intel_pstate_tracer.py +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python # SPDX-License-Identifier: GPL-2.0-only # -*- coding: utf-8 -*- #
tools/testing/ktest/compare-ktest-sample.pl +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/env perl # SPDX-License-Identifier: GPL-2.0 open (IN,"ktest.pl");
tools/testing/kunit/kunit.py +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/python3 +#!/usr/bin/env python3 # SPDX-License-Identifier: GPL-2.0 # # A thin wrapper on top of the KUnit Kernel
tools/testing/kunit/kunit_tool_test.py +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/python3 +#!/usr/bin/env python3 # SPDX-License-Identifier: GPL-2.0 # # A collection of tests for tools/testing/kunit/kunit.py
tools/testing/selftests/bpf/test_offload.py +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/python3 +#!/usr/bin/env python3 # Copyright (C) 2017 Netronome Systems, Inc. # Copyright (c) 2019 Mellanox Technologies. All rights reserved
tools/testing/selftests/drivers/net/mlxsw/sharedbuffer_configuration.py +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python # SPDX-License-Identifier: GPL-2.0 import subprocess
tools/testing/selftests/kselftest/prefix.pl +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/env perl # SPDX-License-Identifier: GPL-2.0 # Prefix all lines with "# ", unbuffered. Command being piped in may need # to have unbuffering forced with "stdbuf -i0 -o0 -e0 $cmd".
tools/testing/selftests/net/devlink_port_split.py +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/python3 +#!/usr/bin/env python3 # SPDX-License-Identifier: GPL-2.0 from subprocess import PIPE, Popen
tools/testing/selftests/tc-testing/tdc_batch.py +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/python3 +#!/usr/bin/env python3 """ tdc_batch.py - a script to generate TC batch file
tools/testing/selftests/tc-testing/tdc_multibatch.py +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/python3 +#!/usr/bin/env python3 # SPDX-License-Identifier: GPL-2.0 """ tdc_multibatch.py - a thin wrapper over tdc_batch.py to generate multiple batch