Linux 5.12.6
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.12.6 kernel.
All users of the 5.12 kernel series must upgrade.
The updated 5.12.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.12.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
------------
Makefile | 2 arch/arm/kernel/asm-offsets.c | 3 arch/arm/kernel/smccc-call.S | 11 + arch/arm/kernel/suspend.c | 19 ++ 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/bus/mhi/core/boot.c | 51 +++--- drivers/bus/mhi/core/internal.h | 1 drivers/bus/mhi/core/pm.c | 2 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/misc/kgdbts.c | 26 +-- 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/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/f2fs/segment.c | 5 fs/nfs/inode.c | 7 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 net/sunrpc/xprtrdma/svc_rdma_sendto.c | 8 - scripts/recordmcount.pl | 2 sound/pci/hda/hda_generic.c | 16 +- 57 files changed, 499 insertions(+), 227 deletions(-)
Arnd Bergmann (5):
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
PCI: thunder: Fix compile testing
Bhaumik Bhatt (1):
bus: mhi: core: Download AMSS image from appropriate function
Bodo Stroesser (1):
scsi: target: tcmu: Return from tcmu_handle_completions() if cmd_id not found
Chuck Lever (1):
svcrdma: Don't leak send_ctxt on Send errors
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 (4):
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()
Greg Kroah-Hartman (1):
Linux 5.12.6
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
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 (2):
NFS: Fix fscache invalidation in nfs_set_cache_invalid()
NFS: NFS_INO_REVAL_PAGECACHE should mark the change attribute invalid
Yannick Vignon (1):
net: stmmac: Do not enable RX FIFO overflow interrupts
Yi Chen (1):
f2fs: fix to avoid NULL pointer dereference
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
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 12 -SUBLEVEL = 5 +SUBLEVEL = 6 EXTRAVERSION = NAME = Frozen Wasteland
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/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
@@ -252,7 +252,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;
@@ -265,7 +265,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/bus/mhi/core/boot.c +24 -27
75 lines not on this page · raw message
drivers/bus/mhi/core/internal.h +1 -0
@@ -619,6 +619,7 @@ int mhi_pm_m3_transition(struct mhi_controller *mhi_cntrl);int __mhi_device_get_sync (struct mhi_controller *mhi_cntrl);int mhi_send_cmd (struct mhi_controller *mhi_cntrl,struct mhi_chan *mhi_chan,enum mhi_cmd_type cmd); +int mhi_download_amss_image (struct mhi_controller *mhi_cntrl);static inline bool mhi_is_active (struct mhi_controller *mhi_cntrl) { return (mhi_cntrl->dev_state >= MHI_STATE_M0 &&
drivers/bus/mhi/core/pm.c +2 -0
@@ -759,6 +759,8 @@ void mhi_pm_st_worker(struct work_struct *work)* either SBL or AMSS states */ mhi_create_devices (mhi_cntrl); +if (mhi_cntrl->fbc_download) +mhi_download_amss_image (mhi_cntrl);break ;case DEV_ST_TRANSITION_MISSION_MODE :mhi_pm_mission_mode_transition (mhi_cntrl);
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
@@ -1438,6 +1438,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
@@ -1127,7 +1127,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)) {
@@ -1147,6 +1146,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
@@ -4488,7 +4488,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/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/sge.c +9 -7
@@ -2563,12 +2563,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 ; }
@@ -2604,17 +2604,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
@@ -4168,7 +4168,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 */
@@ -4179,17 +4178,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/wireless/cisco/airo.c +65 -52
129 lines not on this page · raw message
drivers/nvme/target/admin-cmd.c +3 -3
@@ -307,7 +307,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 );
@@ -659,7 +659,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 );
@@ -977,7 +977,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
@@ -1645,7 +1645,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 ))
@@ -324,9 +325,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 ;
@@ -334,9 +335,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
@@ -624,6 +624,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 int pci_rebar_get_current_size (struct pci_dev *pdev,int bar);
drivers/platform/chrome/cros_ec_typec.c +5 -0
@@ -483,6 +483,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
@@ -11807,13 +11807,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 || 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
@@ -1377,7 +1377,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;
@@ -1420,7 +1420,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
@@ -1684,6 +1684,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)))
@@ -1701,12 +1702,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; }
@@ -1718,13 +1724,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
@@ -1867,6 +1867,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; }
@@ -1863,6 +1867,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/f2fs/segment.c +4 -1
@@ -186,7 +186,10 @@ void f2fs_register_inmem_page(struct inode *inode, struct page *page) {struct inmem_pages *new; -f2fs_set_page_private (page,ATOMIC_WRITTEN_PAGE ); +if (PagePrivate (page)) +set_page_private (page, (unsigned long )ATOMIC_WRITTEN_PAGE ); +else +f2fs_set_page_private (page,ATOMIC_WRITTEN_PAGE ); new =f2fs_kmem_cache_alloc (inmem_entry_slab,GFP_NOFS );
fs/nfs/inode.c +4 -3
@@ -219,15 +219,16 @@ 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 (!nfs_has_xattr_cache (nfsi)) flags &= ~NFS_INO_INVALID_XATTR ; +if (flags &NFS_INO_INVALID_DATA ) +nfs_fscache_invalidate (inode);if (inode->i_mapping->nrpages ==0 ) flags &= ~(NFS_INO_INVALID_DATA |NFS_INO_DATA_INVAL_DEFER ); nfsi->cache_validity |= flags; -if (flags &NFS_INO_INVALID_DATA ) -nfs_fscache_invalidate (inode); }EXPORT_SYMBOL_GPL (nfs_set_cache_invalid);
lib/stackdepot.c +3 -3
@@ -71,7 +71,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) {
@@ -305,7 +305,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) {
@@ -329,7 +329,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
@@ -103,8 +103,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
@@ -520,6 +520,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
@@ -266,7 +266,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 ;
@@ -1882,6 +1881,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:
@@ -1925,7 +1925,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
@@ -965,7 +965,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); }
net/sunrpc/xprtrdma/svc_rdma_sendto.c +4 -4
@@ -958,7 +958,7 @@ int svc_rdma_sendto(struct svc_rqst *rqstp) p =xdr_reserve_space (&sctxt->sc_stream, rpcrdma_fixed_maxsz *sizeof (*p));if (!p) - goto err0; + goto err1; ret =svc_rdma_send_reply_chunk (rdma, rctxt, &rqstp->rq_res);if (ret <0 )
@@ -970,11 +970,11 @@ int svc_rdma_sendto(struct svc_rqst *rqstp) *p =pcl_is_empty (&rctxt->rc_reply_pcl) ? rdma_msg : rdma_nomsg;if (svc_rdma_encode_read_list (sctxt) <0 ) - goto err0; + goto err1;if (svc_rdma_encode_write_list (rctxt, sctxt) <0 ) - goto err0; + goto err1;if (svc_rdma_encode_reply_chunk (rctxt, sctxt, ret) <0 ) - goto err0; + goto err1; ret =svc_rdma_send_reply_msg (rdma, sctxt, rctxt, rqstp);if (ret <0 )
scripts/recordmcount.pl +1 -1
@@ -392,7 +392,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") {
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)