Linux 5.4.108
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.4.108 kernel.
All users of the 5.4 kernel series must upgrade.
The updated 5.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.4.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 | 8 +- arch/arm/kernel/entry-armv.S | 25 ------- arch/arm/vfp/entry.S | 17 ----- arch/arm/vfp/vfphw.S | 5 - arch/arm/vfp/vfpmodule.c | 72 +++++++++++++++++++++-- arch/riscv/Kconfig | 4 - arch/s390/kernel/vtime.c | 2 arch/x86/events/intel/ds.c | 2 arch/x86/include/asm/processor.h | 9 -- arch/x86/include/asm/thread_info.h | 23 +++++++ arch/x86/kernel/apic/apic.c | 5 + arch/x86/kernel/apic/io_apic.c | 10 +++ arch/x86/kernel/signal.c | 24 ------- drivers/base/power/runtime.c | 62 +++++++------------ drivers/counter/stm32-timer-cnt.c | 44 +++++++++----- drivers/firmware/efi/efi.c | 3 drivers/iio/adc/Kconfig | 1 drivers/iio/adc/ad7949.c | 2 drivers/iio/adc/qcom-spmi-vadc.c | 2 drivers/iio/gyro/mpu3050-core.c | 2 drivers/iio/humidity/hid-sensor-humidity.c | 12 ++- drivers/iio/imu/adis16400.c | 3 drivers/iio/light/hid-sensor-prox.c | 13 +++- drivers/iio/temperature/hid-sensor-temperature.c | 14 ++-- drivers/nvme/host/core.c | 36 +++-------- drivers/nvme/host/rdma.c | 7 +- drivers/nvme/host/tcp.c | 14 +++- drivers/nvme/target/core.c | 17 ++++- drivers/pci/hotplug/rpadlpar_sysfs.c | 14 +--- drivers/scsi/lpfc/lpfc_debugfs.c | 4 - drivers/scsi/myrs.c | 2 drivers/usb/gadget/composite.c | 4 - drivers/usb/gadget/configfs.c | 16 +++-- drivers/usb/gadget/usbstring.c | 4 - drivers/usb/storage/transport.c | 7 ++ drivers/usb/storage/unusual_devs.h | 12 +++ drivers/usb/typec/tcpm/tcpm.c | 8 ++ drivers/usb/usbip/vudc_sysfs.c | 2 drivers/vfio/Kconfig | 2 fs/afs/dir.c | 1 fs/afs/file.c | 1 fs/afs/inode.c | 1 fs/afs/internal.h | 1 fs/afs/mntpt.c | 1 fs/afs/xattr.c | 23 ------- fs/btrfs/ctree.c | 2 fs/btrfs/inode.c | 2 fs/cifs/transport.c | 7 +- fs/ext4/inode.c | 8 +- fs/ext4/namei.c | 29 ++++++++- fs/ext4/xattr.c | 2 fs/nfsd/filecache.c | 2 fs/select.c | 10 +-- include/linux/efi.h | 6 + include/linux/thread_info.h | 13 ++++ include/linux/usb_usual.h | 2 include/uapi/linux/usb/ch9.h | 3 kernel/futex.c | 3 kernel/irq/manage.c | 4 + kernel/time/alarmtimer.c | 2 kernel/time/hrtimer.c | 2 kernel/time/posix-cpu-timers.c | 2 net/qrtr/qrtr.c | 2 net/sunrpc/svc.c | 6 + net/sunrpc/svc_xprt.c | 4 - net/sunrpc/xprtrdma/svc_rdma_backchannel.c | 6 - sound/firewire/dice/dice-stream.c | 5 - sound/pci/hda/hda_generic.c | 2 sound/pci/hda/patch_realtek.c | 2 sound/soc/codecs/ak4458.c | 1 sound/soc/codecs/ak5558.c | 1 sound/soc/fsl/fsl_ssi.c | 6 + sound/soc/generic/simple-card-utils.c | 13 ++-- sound/soc/sof/intel/hda-dsp.c | 2 sound/soc/sof/intel/hda.c | 1 75 files changed, 406 insertions(+), 285 deletions(-)
Alan Stern (1):
usb-storage: Add quirk to defeat Kindle's automatic unload
Alexander Shiyan (1):
ASoC: fsl_ssi: Fix TDM slot setup for I2S mode
Ard Biesheuvel (3):
ARM: 9030/1: entry: omit FP emulation for UND exceptions taken in kernel mode
ARM: 9044/1: vfp: use undef hook for VFP support detection
efi: use 32-bit alignment for efi_guid_t literals
Badhri Jagan Sridharan (1):
usb: typec: tcpm: Invoke power_supply_changed for tcpm-source-psy-
Christoph Hellwig (1):
nvme: fix Write Zeroes limitations
Colin Ian King (1):
usbip: Fix incorrect double assignment to udc->ud.tcp_rx
Dan Carpenter (2):
scsi: lpfc: Fix some error codes in debugfs
iio: adis16400: Fix an error code in adis16400_initial_setup()
Daniel Kobras (1):
sunrpc: fix refcount leak for rpc auth modules
David Howells (1):
afs: Stop listxattr() from listing "afs.*" attributes
David Sterba (1):
btrfs: fix slab cache flags for free space tree bitmap
Dinghao Liu (1):
iio: gyro: mpu3050: Fix error handling in mpu3050_trigger_handler
Fabrice Gasnier (1):
counter: stm32-timer-cnt: fix ceiling write max value
Filipe Manana (1):
btrfs: fix race when cloning extent buffer during rewind of an old root
Gerald Schaefer (1):
s390/vtime: fix increased steal time accounting
Greg Kroah-Hartman (1):
Linux 5.4.108
Hui Wang (1):
ALSA: hda: generic: Fix the micmute led init state
Jason Gunthorpe (1):
vfio: IOMMU_API should be selected
Jim Lin (1):
usb: gadget: configfs: Fix KASAN use-after-free
Joe Korty (1):
NFSD: Repair misuse of sv_lock in 5.10.16-rt30.
Johan Hovold (1):
x86/apic/of: Fix CPU devicetree-node lookups
Jonathan Albrieux (1):
iio:adc:qcom-spmi-vadc: add default scale to LR_MUX2_BAT_ID channel
Jonathan Cameron (1):
iio:adc:stm32-adc: Add HAS_IOMEM dependency
Kan Liang (1):
perf/x86/intel: Fix a crash caused by zero PEBS status
Kefeng Wang (1):
riscv: Correct SPARSEMEM configuration
Lv Yunlong (2):
scsi: myrs: Fix a double free in myrs_cleanup() firmware/efi: Fix a use after bug in efi_mem_reserve_persistent
Macpaul Lin (1):
USB: replace hardcode maximum usb string length by definition
Masahiro Yamada (1):
kbuild: Fix <linux/version.h> for empty SUBLEVEL or PATCHLEVEL again
Oleg Nesterov (3):
kernel, fs: Introduce and use set_restart_fn() and arch_set_restart_data()
x86: Move TS_COMPAT back to asm/thread_info.h
x86: Introduce TS_COMPAT_RESTART to fix get_nr_restart_syscall()
Pan Xiuli (1):
ASoC: SOF: intel: fix wrong poll bits in dsp power down
Pavel Skripkin (1):
net/qrtr: fix __netdev_alloc_skb call
Pierre-Louis Bossart (1):
ASoC: SOF: Intel: unregister DMIC device on probe error
Rafael J. Wysocki (1):
Revert "PM: runtime: Update device status before letting suppliers suspend"
Sagi Grimberg (4):
nvme-tcp: fix possible hang when failing to set io queues
nvme-tcp: fix a NULL deref when receiving a 0-length r2t PDU
nvmet: don't check iosqes,iocqes for discovery controllers
nvme-rdma: fix possible hang when failing to set io queues
Sameer Pujar (1):
ASoC: simple-card-utils: Do not handle device clock
Shengjiu Wang (2):
ASoC: ak4458: Add MODULE_DEVICE_TABLE
ASoC: ak5558: Add MODULE_DEVICE_TABLE
Shijie Luo (1):
ext4: fix potential error in ext4_do_update_inode
Takashi Sakamoto (1):
ALSA: dice: fix null pointer dereference when node is disconnected
Thomas Gleixner (2):
x86/ioapic: Ignore IRQ2 again
genirq: Disable interrupts for force threaded handlers
Timo Rothenpieler (1):
svcrdma: disable timeouts on rdma backchannel
Trond Myklebust (1):
nfsd: Don't keep looking up unhashed files in the nfsd file cache
Tyrel Datwyler (1):
PCI: rpadlpar: Fix potential drc_name corruption in store functions
Vincent Whitchurch (1):
cifs: Fix preauth hash corruption
Wilfried Wessner (1):
iio: adc: ad7949: fix wrong ADC result due to incorrect bit mask
William Breathitt Gray (1):
counter: stm32-timer-cnt: Report count function when SLAVE_MODE_DISABLED
Xiaoliang Yu (2):
ALSA: hda/realtek: apply pin quirk for XiaomiNotebook Pro
ALSA: hda/realtek: Apply headset-mic quirks for Xiaomi Redmibook Air
Ye Xiang (3):
iio: hid-sensor-humidity: Fix alignment issue of timestamp channel
iio: hid-sensor-prox: Fix scale not correct issue
iio: hid-sensor-temperature: Fix issues of timestamp channel
zhangyi (F) (2):
ext4: find old entry again if failed to rename whiteout
ext4: do not try to set xattr into ea_inode if value is empty
Greg Kroah-Hartman
maintainerMakefile +5 -3
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 107 +SUBLEVEL = 108 EXTRAVERSION = NAME = Kleptomaniac Octopus
@@ -1177,15 +1177,17 @@ endef define filechk_version.h if [ $(SUBLEVEL) -gt 255 ]; then \ echo \#define LINUX_VERSION_CODE $(shell \ - expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + 255); \ + expr $(VERSION) \* 65536 + $(PATCHLEVEL) \* 256 + 255); \ else \ echo \#define LINUX_VERSION_CODE $(shell \ - expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + $(SUBLEVEL)); \ + expr $(VERSION) \* 65536 + $(PATCHLEVEL) \* 256 + $(SUBLEVEL)); \ fi; \ echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + \ ((c) > 255 ? 255 : (c)))' endef +$(version_h): PATCHLEVEL := $(if $(PATCHLEVEL), $(PATCHLEVEL), 0) +$(version_h): SUBLEVEL := $(if $(SUBLEVEL), $(SUBLEVEL), 0) $(version_h): FORCE $(call filechk,version.h) $(Q)rm -f $(old_version_h)
arch/arm/kernel/entry-armv.S +2 -23
@@ -252,31 +252,10 @@ __und_svc: #else svc_entry #endif - @ - @ call emulation code, which returns using r9 if it has emulated - @ the instruction, or the more conventional lr if we are to treat - @ this as a real undefined instruction - @ - @ r0 - instruction - @ -#ifndef CONFIG_THUMB2_KERNEL - ldr r0, [r4, #-4] -#else - mov r1, #2 - ldrh r0, [r4, #-2] @ Thumb instruction at LR - 2 - cmp r0, #0xe800 @ 32-bit instruction if xx >= 0 - blo __und_svc_fault - ldrh r9, [r4] @ bottom 16 bits - add r4, r4, #2 - str r4, [sp, #S_PC] - orr r0, r9, r0, lsl #16 -#endif - badr r9, __und_svc_finish - mov r2, r4 - bl call_fpe mov r1, #4 @ PC correction to apply -__und_svc_fault: + THUMB( tst r5, #PSR_T_BIT ) @ exception taken in Thumb mode? + THUMB( movne r1, #2 ) @ if so, fix up PC correction mov r0, sp @ struct pt_regs *regs bl __und_fault
arch/arm/vfp/entry.S +0 -17
@@ -37,20 +37,3 @@ ENDPROC(vfp_null_entry) .align 2 .LCvfp: .word vfp_vector - -@ This code is called if the VFP does not exist. It needs to flag the -@ failure to the VFP initialisation code. - - __INIT -ENTRY(vfp_testing_entry) - dec_preempt_count_ti r10, r4 - ldr r0, VFP_arch_address - str r0, [r0] @ set to non-zero value - ret r9 @ we have handled the fault -ENDPROC(vfp_testing_entry) - - .align 2 -VFP_arch_address: - .word VFP_arch - - __FINIT
arch/arm/vfp/vfphw.S +0 -5
@@ -78,11 +78,6 @@ ENTRY(vfp_support_entry) DBGSTR3 "instr %08x pc %08x state %p", r0, r2, r10 - ldr r3, [sp, #S_PSR] @ Neither lazy restore nor FP exceptions - and r3, r3, #MODE_MASK @ are supported in kernel mode - teq r3, #USR_MODE - bne vfp_kmode_exception @ Returns through lr - VFPFMRX r1, FPEXC @ Is the VFP enabled? DBGSTR1 "fpexc %08x", r1 tst r1, #FPEXC_EN
arch/arm/vfp/vfpmodule.c +66 -6
125 lines not on this page · raw message
arch/riscv/Kconfig +2 -2
@@ -58,7 +58,6 @@ config RISCV select EDAC_SUPPORT select ARCH_HAS_GIGANTIC_PAGE select ARCH_WANT_HUGE_PMD_SHARE if 64BIT - select SPARSEMEM_STATIC if 32BIT select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT if MMU select HAVE_ARCH_MMAP_RND_BITS select HAVE_COPY_THREAD_TLS
@@ -102,7 +101,8 @@ config ARCH_FLATMEM_ENABLE config ARCH_SPARSEMEM_ENABLE def_bool y depends on MMU - select SPARSEMEM_VMEMMAP_ENABLE + select SPARSEMEM_STATIC if 32BIT && SPARSMEM + select SPARSEMEM_VMEMMAP_ENABLE if 64BIT config ARCH_SELECT_MEMORY_MODEL def_bool ARCH_SPARSEMEM_ENABLE
arch/s390/kernel/vtime.c +1 -1
@@ -217,7 +217,7 @@ void vtime_flush(struct task_struct *tsk) avg_steal = S390_lowcore.avg_steal_timer /2 ;if ((s64 ) steal >0 ) { S390_lowcore.steal_timer =0 ; -account_steal_time (steal); +account_steal_time (cputime_to_nsecs (steal)); avg_steal += steal; } S390_lowcore.avg_steal_timer = avg_steal;
arch/x86/events/intel/ds.c +1 -1
@@ -1890,7 +1890,7 @@ static void intel_pmu_drain_pebs_nhm(struct pt_regs *iregs)*/ if (!pebs_status && cpuc->pebs_enabled && !(cpuc->pebs_enabled & (cpuc->pebs_enabled-1 ))) - pebs_status = cpuc->pebs_enabled; + pebs_status = p->status = cpuc->pebs_enabled; bit =find_first_bit ((unsigned long *)&pebs_status, x86_pmu.max_pebs_events);
arch/x86/include/asm/processor.h +0 -9
@@ -506,15 +506,6 @@ static inline void arch_thread_struct_whitelist(unsigned long *offset, *size = fpu_kernel_xstate_size; } -/* -* Thread-synchronous status. -* -* This is different from the flags in that nobody else -* ever touches our thread-synchronous status, so we don't -* have to worry about atomic accesses. -*/ -#define TS_COMPAT 0x0002/* 32bit syscall active (64BIT)*/ -/* * Set IOPL bits in EFLAGS from given mask */
arch/x86/include/asm/thread_info.h +22 -1
@@ -221,10 +221,31 @@ static inline int arch_within_stack_frames(const void * const stack,#endif +/* +* Thread-synchronous status. +* +* This is different from the flags in that nobody else +* ever touches our thread-synchronous status, so we don't +* have to worry about atomic accesses. +*/ +#define TS_COMPAT 0x0002/* 32bit syscall active (64BIT)*/ + +#ifndef __ASSEMBLY__#ifdef CONFIG_COMPAT #define TS_I386_REGS_POKED 0x0004/* regs poked by 32-bit ptracer */ +#define TS_COMPAT_RESTART 0x0008 + +#define arch_set_restart_data arch_set_restart_data + +static inline void arch_set_restart_data (struct restart_block *restart) +{ +struct thread_info *ti =current_thread_info (); +if (ti->status &TS_COMPAT ) + ti->status |=TS_COMPAT_RESTART ; +else + ti->status &= ~TS_COMPAT_RESTART ; +}#endif -#ifndef __ASSEMBLY__#ifdef CONFIG_X86_32 #define in_ia32_syscall () true
arch/x86/kernel/apic/apic.c +5 -0
@@ -2354,6 +2354,11 @@ static int cpuid_to_apicid[] = { [0 ... NR_CPUS - 1] = -1, }; +bool arch_match_cpu_phys_id (int cpu,u64 phys_id) +{ +return phys_id == cpuid_to_apicid[cpu]; +} +#ifdef CONFIG_SMP /** * apic_id_is_primary_thread - Check whether APIC ID belongs to a primary thread
arch/x86/kernel/apic/io_apic.c +10 -0
@@ -1046,6 +1046,16 @@ static int mp_map_pin_to_irq(u32 gsi, int idx, int ioapic, int pin,if (idx >=0 &&test_bit (mp_irqs[idx].srcbus, mp_bus_not_pci)) { irq = mp_irqs[idx].srcbusirq; legacy =mp_is_legacy_irq (irq); +/* +* IRQ2 is unusable for historical reasons on systems which +* have a legacy PIC. See the comment vs. IRQ2 further down. +* +* If this gets removed at some point then the related code +* in lapic_assign_system_vectors() needs to be adjusted as +* well. +*/ +if (legacy && irq ==PIC_CASCADE_IR ) +return -EINVAL ; }mutex_lock (&ioapic_mutex);
arch/x86/kernel/signal.c +1 -23
@@ -770,30 +770,8 @@ handle_signal(struct ksignal *ksig, struct pt_regs *regs)static inline unsigned long get_nr_restart_syscall (const struct pt_regs *regs) { -/* -* This function is fundamentally broken as currently -* implemented. -* -* The idea is that we want to trigger a call to the -* restart_block() syscall and that we want in_ia32_syscall(), -* in_x32_syscall(), etc. to match whatever they were in the -* syscall being restarted. We assume that the syscall -* instruction at (regs->ip - 2) matches whatever syscall -* instruction we used to enter in the first place. -* -* The problem is that we can get here when ptrace pokes -* syscall-like values into regs even if we're not in a syscall -* at all. -* -* For now, we maintain historical behavior and guess based on -* stored state. We could do better by saving the actual -* syscall arch in restart_block or (with caveats on x32) by -* checking if regs->ip points to 'int $0x80'. The current -* behavior is incorrect if a tracer has a different bitness -* than the tracee. -*/ #ifdef CONFIG_IA32_EMULATION -if (current_thread_info ()->status & (TS_COMPAT |TS_I386_REGS_POKED )) +if (current_thread_info ()->status &TS_COMPAT_RESTART )return __NR_ia32_restart_syscall;#endif #ifdef CONFIG_X86_X32_ABI
drivers/base/power/runtime.c +25 -37
83 lines not on this page · raw message
drivers/counter/stm32-timer-cnt.c +30 -14
121 lines not on this page · raw message
drivers/firmware/efi/efi.c +2 -1
@@ -1006,7 +1006,7 @@ int __ref efi_mem_reserve_persistent(phys_addr_t addr, u64 size) }/* first try to find a slot in an existing linked list entry */ -for (prsv = efi_memreserve_root->next; prsv; prsv = rsv->next) { +for (prsv = efi_memreserve_root->next; prsv; ) { rsv =memremap (prsv,sizeof (*rsv),MEMREMAP_WB ); index =atomic_fetch_add_unless (&rsv->count,1 , rsv->size);if (index < rsv->size) {
@@ -1016,6 +1016,7 @@ int __ref efi_mem_reserve_persistent(phys_addr_t addr, u64 size)memunmap (rsv);return efi_mem_reserve_iomem (addr, size); } + prsv = rsv->next;memunmap (rsv); }
drivers/iio/adc/Kconfig +1 -0
@@ -784,6 +784,7 @@ config STM32_ADC_CORE depends on ARCH_STM32 || COMPILE_TEST depends on OF depends on REGULATOR + depends on HAS_IOMEM select IIO_BUFFER select MFD_STM32_TIMERS select IIO_STM32_TIMER_TRIGGER
drivers/iio/adc/ad7949.c +1 -1
@@ -91,7 +91,7 @@ static int ad7949_spi_read_channel(struct ad7949_adc_chip *ad7949_adc, int *val,int ret;int i;int bits_per_word = ad7949_adc->resolution; -int mask =GENMASK (ad7949_adc->resolution,0 ); +int mask =GENMASK (ad7949_adc->resolution -1 ,0 );struct spi_message msg;struct spi_transfer tx[] = { {
drivers/iio/adc/qcom-spmi-vadc.c +1 -1
@@ -598,7 +598,7 @@ static const struct vadc_channels vadc_chans[] = { VADC_CHAN_NO_SCALE(P_MUX16_1_3, 1) VADC_CHAN_NO_SCALE(LR_MUX1_BAT_THERM, 0) - VADC_CHAN_NO_SCALE(LR_MUX2_BAT_ID, 0) + VADC_CHAN_VOLT(LR_MUX2_BAT_ID, 0, SCALE_DEFAULT) VADC_CHAN_NO_SCALE(LR_MUX3_XO_THERM, 0) VADC_CHAN_NO_SCALE(LR_MUX4_AMUX_THM1, 0)VADC_CHAN_NO_SCALE (LR_MUX5_AMUX_THM2 ,0 )
drivers/iio/gyro/mpu3050-core.c +2 -0
@@ -550,6 +550,8 @@ static irqreturn_t mpu3050_trigger_handler(int irq, void *p)MPU3050_FIFO_R , &fifo_values[offset], toread); +if (ret) + goto out_trigger_unlock; dev_dbg(mpu3050->dev, "%04x %04x %04x %04x %04x\n",
drivers/iio/humidity/hid-sensor-humidity.c +7 -5
@@ -17,7 +17,10 @@struct hid_humidity_state {struct hid_sensor_common common_attributes;struct hid_sensor_hub_attribute_info humidity_attr; -s32 humidity_data; +struct { +s32 humidity_data; +u64 timestamp__aligned(8) ; + } scan;int scale_pre_decml;int scale_post_decml;int scale_precision;
@@ -127,9 +130,8 @@ static int humidity_proc_event(struct hid_sensor_hub_device *hsdev,struct hid_humidity_state *humid_st =iio_priv (indio_dev);if (atomic_read (&humid_st->common_attributes.data_ready)) -iio_push_to_buffers_with_timestamp (indio_dev, - &humid_st->humidity_data, -iio_get_time_ns (indio_dev)); +iio_push_to_buffers_with_timestamp (indio_dev, &humid_st->scan, +iio_get_time_ns (indio_dev));return 0 ; }
@@ -144,7 +146,7 @@ static int humidity_capture_sample(struct hid_sensor_hub_device *hsdev,switch (usage_id) {case HID_USAGE_SENSOR_ATMOSPHERIC_HUMIDITY : - humid_st->humidity_data = *(s32 *)raw_data; + humid_st->scan.humidity_data = *(s32 *)raw_data;return 0 ;default :
drivers/iio/imu/adis16400.c +1 -2
@@ -464,8 +464,7 @@ static int adis16400_initial_setup(struct iio_dev *indio_dev)if (ret) goto err_ret; - ret =sscanf (indio_dev->name,"adis%u\n" , &device_id); -if (ret !=1 ) { +if (sscanf (indio_dev->name,"adis%u\n" , &device_id) !=1 ) { ret = -EINVAL ; goto err_ret; }
drivers/iio/light/hid-sensor-prox.c +11 -2
@@ -25,6 +25,9 @@ struct prox_state {struct hid_sensor_common common_attributes;struct hid_sensor_hub_attribute_info prox_attr;u32 human_presence; +int scale_pre_decml; +int scale_post_decml; +int scale_precision; };/* Channel definitions */
@@ -95,8 +98,9 @@ static int prox_read_raw(struct iio_dev *indio_dev, ret_type =IIO_VAL_INT ;break ;case IIO_CHAN_INFO_SCALE : - *val = prox_state->prox_attr.units; - ret_type =IIO_VAL_INT ; + *val = prox_state->scale_pre_decml; + *val2 = prox_state->scale_post_decml; + ret_type = prox_state->scale_precision;break ;case IIO_CHAN_INFO_OFFSET : *val = hid_sensor_convert_exponent(
@@ -236,6 +240,11 @@ static int prox_parse_report(struct platform_device *pdev,HID_USAGE_SENSOR_HUMAN_PRESENCE , &st->common_attributes.sensitivity); + st->scale_precision =hid_sensor_format_scale ( + hsdev->usage, + &st->prox_attr, + &st->scale_pre_decml, &st->scale_post_decml); +return ret; }
drivers/iio/temperature/hid-sensor-temperature.c +8 -6
@@ -17,7 +17,10 @@struct temperature_state {struct hid_sensor_common common_attributes;struct hid_sensor_hub_attribute_info temperature_attr; -s32 temperature_data; +struct { +s32 temperature_data; +u64 timestamp__aligned(8) ; + } scan;int scale_pre_decml;int scale_post_decml;int scale_precision;
@@ -34,7 +37,7 @@ static const struct iio_chan_spec temperature_channels[] = { BIT(IIO_CHAN_INFO_SAMP_FREQ) | BIT(IIO_CHAN_INFO_HYSTERESIS), }, - IIO_CHAN_SOFT_TIMESTAMP(3), + IIO_CHAN_SOFT_TIMESTAMP(1), };/* Adjust channel real bits based on report descriptor */
@@ -125,9 +128,8 @@ static int temperature_proc_event(struct hid_sensor_hub_device *hsdev,struct temperature_state *temp_st =iio_priv (indio_dev);if (atomic_read (&temp_st->common_attributes.data_ready)) -iio_push_to_buffers_with_timestamp (indio_dev, - &temp_st->temperature_data, -iio_get_time_ns (indio_dev)); +iio_push_to_buffers_with_timestamp (indio_dev, &temp_st->scan, +iio_get_time_ns (indio_dev));return 0 ; }
@@ -142,7 +144,7 @@ static int temperature_capture_sample(struct hid_sensor_hub_device *hsdev,switch (usage_id) {case HID_USAGE_SENSOR_DATA_ENVIRONMENTAL_TEMPERATURE : - temp_st->temperature_data = *(s32 *)raw_data; + temp_st->scan.temperature_data = *(s32 *)raw_data;return 0 ;default :return -EINVAL ;
drivers/nvme/host/core.c +12 -24
@@ -1743,30 +1743,18 @@ static void nvme_config_discard(struct gendisk *disk, struct nvme_ns *ns)blk_queue_max_write_zeroes_sectors (queue,UINT_MAX ); } -static void nvme_config_write_zeroes (struct gendisk *disk,struct nvme_ns *ns) +/* +* Even though NVMe spec explicitly states that MDTS is not applicable to the +* write-zeroes, we are cautious and limit the size to the controllers +* max_hw_sectors value, which is based on the MDTS field and possibly other +* limiting factors. +*/ +static void nvme_config_write_zeroes (struct request_queue *q, +struct nvme_ctrl *ctrl) { -u64 max_blocks; - -if (!(ns->ctrl->oncs &NVME_CTRL_ONCS_WRITE_ZEROES ) || - (ns->ctrl->quirks &NVME_QUIRK_DISABLE_WRITE_ZEROES )) -return ; -/* -* Even though NVMe spec explicitly states that MDTS is not -* applicable to the write-zeroes:- "The restriction does not apply to -* commands that do not transfer data between the host and the -* controller (e.g., Write Uncorrectable ro Write Zeroes command).". -* In order to be more cautious use controller's max_hw_sectors value -* to configure the maximum sectors for the write-zeroes which is -* configured based on the controller's MDTS field in the -* nvme_init_identify() if available. -*/ -if (ns->ctrl->max_hw_sectors ==UINT_MAX ) - max_blocks = (u64 )USHRT_MAX +1 ; -else - max_blocks = ns->ctrl->max_hw_sectors +1 ; - -blk_queue_max_write_zeroes_sectors (disk->queue, -nvme_lba_to_sect (ns, max_blocks)); +if ((ctrl->oncs &NVME_CTRL_ONCS_WRITE_ZEROES ) && + !(ctrl->quirks &NVME_QUIRK_DISABLE_WRITE_ZEROES )) +blk_queue_max_write_zeroes_sectors (q, ctrl->max_hw_sectors); } static int nvme_report_ns_ids(struct nvme_ctrl *ctrl, unsigned int nsid,
@@ -1853,7 +1841,7 @@ static void nvme_update_disk_info(struct gendisk *disk,set_capacity (disk, capacity);nvme_config_discard (disk, ns); -nvme_config_write_zeroes (disk, ns); +nvme_config_write_zeroes (disk->queue, ns->ctrl);if (id->nsattr & (1 <<0 ))set_disk_ro (disk, true);
drivers/nvme/host/rdma.c +5 -2
@@ -666,8 +666,11 @@ static int nvme_rdma_alloc_io_queues(struct nvme_rdma_ctrl *ctrl)return ret; ctrl->ctrl.queue_count = nr_io_queues +1 ; -if (ctrl->ctrl.queue_count <2 ) -return 0 ; +if (ctrl->ctrl.queue_count <2 ) { +dev_err (ctrl->ctrl.device, +"unable to set any I/O queues\n" ); +return -ENOMEM ; + }dev_info (ctrl->ctrl.device,"creating %d I/O queues.\n" , nr_io_queues);
drivers/nvme/host/tcp.c +12 -2
@@ -512,6 +512,13 @@ static int nvme_tcp_setup_h2c_data_pdu(struct nvme_tcp_request *req, req->pdu_len =le32_to_cpu (pdu->r2t_length); req->pdu_sent =0 ; +if (unlikely (!req->pdu_len)) { +dev_err (queue->ctrl->ctrl.device, +"req %d r2t len is %u, probably a bug...\n" , + rq->tag, req->pdu_len); +return -EPROTO ; + } +if (unlikely (req->data_sent + req->pdu_len > req->data_len)) { dev_err(queue->ctrl->ctrl.device, "req %d r2t len %u exceeded data len %u (%zu sent)\n",
@@ -1643,8 +1650,11 @@ static int nvme_tcp_alloc_io_queues(struct nvme_ctrl *ctrl)return ret; ctrl->queue_count = nr_io_queues +1 ; -if (ctrl->queue_count <2 ) -return 0 ; +if (ctrl->queue_count <2 ) { +dev_err (ctrl->device, +"unable to set any I/O queues\n" ); +return -ENOMEM ; + }dev_info (ctrl->device,"creating %d I/O queues.\n" , nr_io_queues);
drivers/nvme/target/core.c +14 -3
@@ -1031,9 +1031,20 @@ static void nvmet_start_ctrl(struct nvmet_ctrl *ctrl) {lockdep_assert_held (&ctrl->lock); -if (nvmet_cc_iosqes (ctrl->cc) !=NVME_NVM_IOSQES || -nvmet_cc_iocqes (ctrl->cc) !=NVME_NVM_IOCQES || -nvmet_cc_mps (ctrl->cc) !=0 || +/* +* Only I/O controllers should verify iosqes,iocqes. +* Strictly speaking, the spec says a discovery controller +* should verify iosqes,iocqes are zeroed, however that +* would break backwards compatibility, so don't enforce it. +*/ +if (ctrl->subsys->type !=NVME_NQN_DISC && + (nvmet_cc_iosqes (ctrl->cc) !=NVME_NVM_IOSQES || +nvmet_cc_iocqes (ctrl->cc) !=NVME_NVM_IOCQES )) { + ctrl->csts =NVME_CSTS_CFS ; +return ; + } + +if (nvmet_cc_mps (ctrl->cc) !=0 ||nvmet_cc_ams (ctrl->cc) !=0 ||nvmet_cc_css (ctrl->cc) !=0 ) { ctrl->csts =NVME_CSTS_CFS ;
drivers/pci/hotplug/rpadlpar_sysfs.c +6 -8
@@ -34,12 +34,11 @@ static ssize_t add_slot_store(struct kobject *kobj, struct kobj_attribute *attr,if (nbytes >=MAX_DRC_NAME_LEN )return 0 ; -memcpy (drc_name, buf, nbytes); +strscpy (drc_name, buf, nbytes +1 ); end =strchr (drc_name,'\n' ); -if (!end) - end = &drc_name[nbytes]; - *end ='\0' ; +if (end) + *end ='\0' ; rc =dlpar_add_slot (drc_name);if (rc)
@@ -65,12 +64,11 @@ static ssize_t remove_slot_store(struct kobject *kobj,if (nbytes >=MAX_DRC_NAME_LEN )return 0 ; -memcpy (drc_name, buf, nbytes); +strscpy (drc_name, buf, nbytes +1 ); end =strchr (drc_name,'\n' ); -if (!end) - end = &drc_name[nbytes]; - *end ='\0' ; +if (end) + *end ='\0' ; rc =dlpar_remove_slot (drc_name);if (rc)
drivers/scsi/lpfc/lpfc_debugfs.c +2 -2
@@ -2217,7 +2217,7 @@ lpfc_debugfs_dif_err_write(struct file *file, const char __user *buf,memset (dstbuf,0 ,33 ); size = (nbytes <32 ) ? nbytes :32 ;if (copy_from_user (dstbuf, buf, size)) -return 0 ; +return -EFAULT ;if (dent == phba->debug_InjErrLBA) {if ((buf[0 ] =='o' ) && (buf[1 ] =='f' ) && (buf[2 ] =='f' ))
@@ -2225,7 +2225,7 @@ lpfc_debugfs_dif_err_write(struct file *file, const char __user *buf, }if ((tmp ==0 ) && (kstrtoull (dstbuf,0 , &tmp))) -return 0 ; +return -EINVAL ;if (dent == phba->debug_writeGuard) phba->lpfc_injerr_wgrd_cnt = (uint32_t )tmp;
drivers/scsi/myrs.c +1 -1
@@ -2274,12 +2274,12 @@ static void myrs_cleanup(struct myrs_hba *cs)if (cs->mmio_base) { cs->disable_intr (cs);iounmap (cs->mmio_base); + cs->mmio_base =NULL ; }if (cs->irq)free_irq (cs->irq, cs);if (cs->io_addr)release_region (cs->io_addr,0x80 ); -iounmap (cs->mmio_base);pci_set_drvdata (pdev,NULL );pci_disable_device (pdev);scsi_host_put (cs->host);
drivers/usb/gadget/composite.c +2 -2
@@ -1091,7 +1091,7 @@ static void collect_langs(struct usb_gadget_strings **sp, __le16 *buf)while (*sp) { s = *sp; language =cpu_to_le16 (s->language); -for (tmp = buf; *tmp && tmp < &buf[126 ]; tmp++) { +for (tmp = buf; *tmp && tmp < &buf[USB_MAX_STRING_LEN ]; tmp++) {if (*tmp == language) goto repeat; }
@@ -1166,7 +1166,7 @@ static int get_string(struct usb_composite_dev *cdev,collect_langs (sp, s->wData); } -for (len =0 ; len <=126 && s->wData[len]; len++) +for (len =0 ; len <=USB_MAX_STRING_LEN && s->wData[len]; len++)continue ;if (!len)return -EINVAL ;
drivers/usb/gadget/configfs.c +11 -5
@@ -109,21 +109,27 @@ struct gadget_config_name {struct list_head list; }; +#define USB_MAX_STRING_WITH_NULL_LEN (USB_MAX_STRING_LEN+1) +static int usb_string_copy (const char *s,char **s_copy) {int ret;char *str;char *copy = *s_copy; ret =strlen (s); -if (ret >126 ) +if (ret >USB_MAX_STRING_LEN )return -EOVERFLOW ; - str =kstrdup (s,GFP_KERNEL ); -if (!str) -return -ENOMEM ; +if (copy) { + str = copy; + }else { + str =kmalloc (USB_MAX_STRING_WITH_NULL_LEN ,GFP_KERNEL ); +if (!str) +return -ENOMEM ; + } +strcpy (str, s);if (str[ret -1 ] =='\n' ) str[ret -1 ] ='\0' ; -kfree (copy); *s_copy = str;return 0 ; }
drivers/usb/gadget/usbstring.c +2 -2
@@ -55,9 +55,9 @@ usb_gadget_get_string (const struct usb_gadget_strings *table, int id, u8 *buf)return -EINVAL ;/* string descriptors have length, tag, then UTF16-LE text */ - len =min ((size_t )126 ,strlen (s->s)); + len =min ((size_t )USB_MAX_STRING_LEN ,strlen (s->s)); len =utf8s_to_utf16s (s->s, len,UTF16_LITTLE_ENDIAN , - (wchar_t *) &buf[2 ],126 ); + (wchar_t *) &buf[2 ],USB_MAX_STRING_LEN );if (len <0 )return -EINVAL ; buf [0 ] = (len +1 ) *2 ;
drivers/usb/storage/transport.c +7 -0
@@ -651,6 +651,13 @@ void usb_stor_invoke_transport(struct scsi_cmnd *srb, struct us_data *us) need_auto_sense =1 ; } +/* Some devices (Kindle) require another command after SYNC CACHE */ +if ((us->fflags &US_FL_SENSE_AFTER_SYNC ) && + srb->cmnd[0 ] ==SYNCHRONIZE_CACHE ) { +usb_stor_dbg (us,"-- sense after SYNC CACHE\n" ); + need_auto_sense =1 ; + } +/* * If we have a failure, we're going to do a REQUEST_SENSE * automatically. Note that we differentiate between a command
drivers/usb/storage/unusual_devs.h +12 -0
@@ -2211,6 +2211,18 @@ UNUSUAL_DEV( 0x1908, 0x3335, 0x0200, 0x0200, USB_SC_DEVICE, USB_PR_DEVICE, NULL, US_FL_NO_READ_DISC_INFO ), +/* +* Reported by Matthias Schwarzott <[email protected]> +* The Amazon Kindle treats SYNCHRONIZE CACHE as an indication that +* the host may be finished with it, and automatically ejects its +* emulated media unless it receives another command within one second. +*/ +UNUSUAL_DEV (0x1949 ,0x0004 ,0x0000 ,0x9999 , +"Amazon" , +"Kindle" , +USB_SC_DEVICE ,USB_PR_DEVICE ,NULL , + US_FL_SENSE_AFTER_SYNC ), +/* * Reported by Oliver Neukum <[email protected]> * This device morphes spontaneously into another device if the access
drivers/usb/typec/tcpm/tcpm.c +7 -1
@@ -739,6 +739,7 @@ static int tcpm_set_current_limit(struct tcpm_port *port, u32 max_ma, u32 mv) port->supply_voltage = mv; port->current_limit = max_ma; +power_supply_changed (port->psy);if (port->tcpc->set_current_limit) ret = port->tcpc->set_current_limit (port->tcpc, max_ma, mv);
@@ -2138,6 +2139,7 @@ static int tcpm_pd_select_pdo(struct tcpm_port *port, int *sink_pdo, port->pps_data.supported = false; port->usb_type =POWER_SUPPLY_USB_TYPE_PD ; +power_supply_changed (port->psy);/* * Select the source PDO providing the most power which has a
@@ -2162,6 +2164,7 @@ static int tcpm_pd_select_pdo(struct tcpm_port *port, int *sink_pdo, port->pps_data.supported = true; port->usb_type =POWER_SUPPLY_USB_TYPE_PD_PPS ; +power_supply_changed (port->psy); }continue ;default :
@@ -2319,6 +2322,7 @@ static unsigned int tcpm_pd_select_pps_apdo(struct tcpm_port *port) port->pps_data.out_volt)); port->pps_data.op_curr =min (port->pps_data.max_curr, port->pps_data.op_curr); +power_supply_changed (port->psy); }return src_pdo;
@@ -2554,6 +2558,7 @@ static int tcpm_set_charge(struct tcpm_port *port, bool charge)return ret; } port->vbus_charge = charge; +power_supply_changed (port->psy);return 0 ; }
@@ -4665,7 +4670,7 @@ static int tcpm_psy_set_prop(struct power_supply *psy, ret = -EINVAL ;break ; } - +power_supply_changed (port->psy);return ret; }
@@ -4816,6 +4821,7 @@ struct tcpm_port *tcpm_register_port(struct device *dev, struct tcpc_dev *tcpc) err =devm_tcpm_psy_register (port);if (err) goto out_role_sw_put; +power_supply_changed (port->psy); port->typec_port =typec_register_port (port->dev, &port->typec_caps);if (IS_ERR (port->typec_port)) {
drivers/usb/usbip/vudc_sysfs.c +1 -1
@@ -174,7 +174,7 @@ static ssize_t usbip_sockfd_store(struct device *dev, udc->ud.tcp_socket = socket; udc->ud.tcp_rx = tcp_rx; - udc->ud.tcp_rx = tcp_tx; + udc->ud.tcp_tx = tcp_tx; udc->ud.status =SDEV_ST_USED ;spin_unlock_irq (&udc->ud.lock);
drivers/vfio/Kconfig +1 -1
@@ -21,7 +21,7 @@ config VFIO_VIRQFD menuconfig VFIO tristate "VFIO Non-Privileged userspace driver framework" - depends on IOMMU_API + select IOMMU_API select VFIO_IOMMU_TYPE1 if (X86 || S390 || ARM || ARM64) help VFIO provides a framework for secure userspace device drivers.
fs/afs/dir.c +0 -1
@@ -69,7 +69,6 @@ const struct inode_operations afs_dir_inode_operations = { .permission = afs_permission, .getattr = afs_getattr, .setattr = afs_setattr, - .listxattr = afs_listxattr, };const struct address_space_operations afs_dir_aops = {
fs/afs/file.c +0 -1
@@ -42,7 +42,6 @@ const struct inode_operations afs_file_inode_operations = { .getattr = afs_getattr, .setattr = afs_setattr, .permission = afs_permission, - .listxattr = afs_listxattr, };const struct address_space_operations afs_fs_aops = {
fs/afs/inode.c +0 -1
@@ -27,7 +27,6 @@static const struct inode_operations afs_symlink_inode_operations = { .get_link = page_get_link, - .listxattr = afs_listxattr, }; static noinline void dump_vnode(struct afs_vnode *vnode, struct afs_vnode *parent_vnode)
fs/afs/internal.h +0 -1
@@ -1354,7 +1354,6 @@ extern int afs_launder_page(struct page *);* xattr.c */ extern const struct xattr_handler *afs_xattr_handlers[]; -extern ssize_t afs_listxattr (struct dentry *,char *,size_t );/* * yfsclient.c
fs/afs/mntpt.c +0 -1
@@ -32,7 +32,6 @@ const struct inode_operations afs_mntpt_inode_operations = { .lookup = afs_mntpt_lookup, .readlink = page_readlink, .getattr = afs_getattr, - .listxattr = afs_listxattr, };const struct inode_operations afs_autocell_inode_operations = {
fs/afs/xattr.c +0 -23
@@ -11,29 +11,6 @@#include <linux/xattr.h> #include "internal.h" -static const char afs_xattr_list[] = -"afs.acl\0" -"afs.cell\0" -"afs.fid\0" -"afs.volume\0" -"afs.yfs.acl\0" -"afs.yfs.acl_inherited\0" -"afs.yfs.acl_num_cleaned\0" -"afs.yfs.vol_acl" ; - -/* -* Retrieve a list of the supported xattrs. -*/ -ssize_t afs_listxattr (struct dentry *dentry,char *buffer,size_t size) -{ -if (size ==0 ) -return sizeof (afs_xattr_list); -if (size <sizeof (afs_xattr_list)) -return -ERANGE ; -memcpy (buffer, afs_xattr_list,sizeof (afs_xattr_list)); -return sizeof (afs_xattr_list); -} -/* * Get a file's ACL. */
fs/btrfs/ctree.c +2 -0
@@ -1406,7 +1406,9 @@ get_old_root(struct btrfs_root *root, u64 time_seq)"failed to read tree block %llu from get_old_root" , logical); }else { +btrfs_tree_read_lock (old); eb =btrfs_clone_extent_buffer (old); +btrfs_tree_read_unlock (old);free_extent_buffer (old); } }else if (old_root) {
fs/btrfs/inode.c +1 -1
@@ -9628,7 +9628,7 @@ int __init btrfs_init_cachep(void) btrfs_free_space_bitmap_cachep =kmem_cache_create ("btrfs_free_space_bitmap" ,PAGE_SIZE ,PAGE_SIZE , -SLAB_RED_ZONE ,NULL ); +SLAB_MEM_SPREAD ,NULL );if (!btrfs_free_space_bitmap_cachep) goto fail;
fs/cifs/transport.c +6 -1
@@ -1134,9 +1134,12 @@ compound_send_recv(const unsigned int xid, struct cifs_ses *ses,/* * Compounding is never used during session establish. */ -if ((ses->status == CifsNew) || (optype &CIFS_NEG_OP )) +if ((ses->status == CifsNew) || (optype &CIFS_NEG_OP )) { +mutex_lock (&server->srv_mutex);smb311_update_preauth_hash (ses, rqst[0 ].rq_iov, rqst[0 ].rq_nvec); +mutex_unlock (&server->srv_mutex); + }for (i =0 ; i < num_rqst; i++) { rc =wait_for_response (server, midQ[i]);
@@ -1204,7 +1207,9 @@ compound_send_recv(const unsigned int xid, struct cifs_ses *ses, .iov_base = resp_iov[0].iov_base, .iov_len = resp_iov[0].iov_len }; +mutex_lock (&server->srv_mutex);smb311_update_preauth_hash (ses, &iov,1 ); +mutex_unlock (&server->srv_mutex); } out:
fs/ext4/inode.c +4 -4
@@ -5267,7 +5267,7 @@ static int ext4_do_update_inode(handle_t *handle,struct ext4_inode_info *ei =EXT4_I (inode);struct buffer_head *bh = iloc->bh;struct super_block *sb = inode->i_sb; -int err =0 , rc, block; +int err =0 , block;int need_datasync =0 , set_large_file =0 ;uid_t i_uid;gid_t i_gid;
@@ -5379,9 +5379,9 @@ static int ext4_do_update_inode(handle_t *handle, bh->b_data);BUFFER_TRACE (bh,"call ext4_handle_dirty_metadata" ); - rc =ext4_handle_dirty_metadata (handle,NULL , bh); -if (!err) - err = rc; + err =ext4_handle_dirty_metadata (handle,NULL , bh); +if (err) + goto out_brelse;ext4_clear_inode_state (inode,EXT4_STATE_NEW );if (set_large_file) {BUFFER_TRACE (EXT4_SB (sb)->s_sbh,"get write access" );
fs/ext4/namei.c +27 -2
@@ -3547,6 +3547,31 @@ static int ext4_setent(handle_t *handle, struct ext4_renament *ent,return 0 ; } +static void ext4_resetent (handle_t *handle,struct ext4_renament *ent, +unsigned ino,unsigned file_type) +{ +struct ext4_renament old = *ent; +int retval =0 ; + +/* +* old->de could have moved from under us during make indexed dir, +* so the old->de may no longer valid and need to find it again +* before reset old inode info. +*/ + old.bh =ext4_find_entry (old.dir, &old.dentry->d_name, &old.de,NULL ); +if (IS_ERR (old.bh)) + retval =PTR_ERR (old.bh); +if (!old.bh) + retval = -ENOENT ; +if (retval) { +ext4_std_error (old.dir->i_sb, retval); +return ; + } + +ext4_setent (handle, &old, ino, file_type); +brelse (old.bh); +} +static int ext4_find_delete_entry (handle_t *handle,struct inode *dir,const struct qstr *d_name) {
@@ -3843,8 +3868,8 @@ static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry, end_rename:if (whiteout) {if (retval) { -ext4_setent (handle, &old, - old.inode->i_ino, old_file_type); +ext4_resetent (handle, &old, + old.inode->i_ino, old_file_type);drop_nlink (whiteout); }unlock_new_inode (whiteout);
fs/ext4/xattr.c +1 -1
@@ -2415,7 +2415,7 @@ ext4_xattr_set_handle(handle_t *handle, struct inode *inode, int name_index,* external inode if possible. */ if (ext4_has_feature_ea_inode (inode->i_sb) && - !i.in_inode) { + i.value_len && !i.in_inode) { i.in_inode =1 ; goto retry_inode; }
fs/nfsd/filecache.c +2 -0
@@ -751,6 +751,8 @@ nfsd_file_find_locked(struct inode *inode, unsigned int may_flags,continue ;if (!nfsd_match_cred (nf->nf_cred,current_cred ()))continue ; +if (!test_bit (NFSD_FILE_HASHED , &nf->nf_flags)) +continue ;if (nfsd_file_get (nf) !=NULL )return nf; }
fs/select.c +4 -6
@@ -1037,10 +1037,9 @@ static long do_restart_poll(struct restart_block *restart_block) ret =do_sys_poll (ufds, nfds, to); -if (ret == -ERESTARTNOHAND ) { - restart_block->fn = do_restart_poll; - ret = -ERESTART_RESTARTBLOCK ; - } +if (ret == -ERESTARTNOHAND ) + ret =set_restart_fn (restart_block, do_restart_poll); +return ret; }
@@ -1062,7 +1061,6 @@ SYSCALL_DEFINE3(poll, struct pollfd __user *, ufds, unsigned int, nfds,struct restart_block *restart_block; restart_block = ¤t->restart_block; - restart_block->fn = do_restart_poll; restart_block->poll.ufds = ufds; restart_block->poll.nfds = nfds;
@@ -1073,7 +1071,7 @@ SYSCALL_DEFINE3(poll, struct pollfd __user *, ufds, unsigned int, nfds, }else restart_block->poll.has_timeout =0 ; - ret = -ERESTART_RESTARTBLOCK ; + ret =set_restart_fn (restart_block, do_restart_poll); }return ret; }
include/linux/efi.h +4 -2
@@ -63,8 +63,10 @@ typedef void *efi_handle_t;*/ typedef guid_t efi_guid_t __aligned(__alignof__(u32)) ; -#define EFI_GUID (a,b,c,d0,d1,d2,d3,d4,d5,d6,d7) \ - GUID_INIT(a, b, c, d0, d1, d2, d3, d4, d5, d6, d7) +#define EFI_GUID(a, b, c, d...) (efi_guid_t){ { \ + (a) & 0xff, ((a) >> 8) & 0xff, ((a) >> 16) & 0xff, ((a) >> 24) & 0xff, \ + (b) & 0xff, ((b) >> 8) & 0xff, \ + (c) & 0xff, ((c) >> 8) & 0xff, d } }/* * Generic EFI table header
include/linux/thread_info.h +13 -0
@@ -11,6 +11,7 @@#include <linux/types.h> #include <linux/bug.h> #include <linux/restart_block.h> +#include <linux/errno.h> #ifdef CONFIG_THREAD_INFO_IN_TASK /*
@@ -39,6 +40,18 @@ enum {#ifdef __KERNEL__ +#ifndef arch_set_restart_data +#define arch_set_restart_data (restart) do { } while (0) +#endif + +static inline long set_restart_fn (struct restart_block *restart, +long (*fn)(struct restart_block *)) +{ + restart->fn = fn; +arch_set_restart_data (restart); +return -ERESTART_RESTARTBLOCK ; +} +#ifndef THREAD_ALIGN #define THREAD_ALIGN THREAD_SIZE#endif
include/linux/usb_usual.h +2 -0
@@ -86,6 +86,8 @@/* lies about caching, so always sync */ \US_FLAG (NO_SAME ,0x40000000 ) \ /* Cannot handle WRITE_SAME */ \ +US_FLAG (SENSE_AFTER_SYNC ,0x80000000 ) \ + /* Do REQUEST_SENSE after SYNCHRONIZE_CACHE */ \#define US_FLAG (name, value) US_FL_##name = value ,enum {US_DO_ALL_FLAGS };
include/uapi/linux/usb/ch9.h +3 -0
@@ -364,6 +364,9 @@ struct usb_config_descriptor {/*-------------------------------------------------------------------------*/ +/* USB String descriptors can contain at most 126 characters. */ +#define USB_MAX_STRING_LEN 126 +/* USB_DT_STRING: String descriptor */ struct usb_string_descriptor {__u8 bLength;
kernel/futex.c +1 -2
@@ -2865,14 +2865,13 @@ static int futex_wait(u32 __user *uaddr, unsigned int flags, u32 val, goto out; restart = ¤t->restart_block; - restart->fn = futex_wait_restart; restart->futex.uaddr = uaddr; restart->futex.val = val; restart->futex.time = *abs_time; restart->futex.bitset = bitset; restart->futex.flags = flags |FLAGS_HAS_TIMEOUT ; - ret = -ERESTART_RESTARTBLOCK ; + ret =set_restart_fn (restart, futex_wait_restart); out:if (to) {
kernel/irq/manage.c +4 -0
@@ -1026,11 +1026,15 @@ irq_forced_thread_fn(struct irq_desc *desc, struct irqaction *action)irqreturn_t ret;local_bh_disable (); +if (!IS_ENABLED (CONFIG_PREEMPT_RT )) +local_irq_disable (); ret = action->thread_fn (action->irq, action->dev_id);if (ret ==IRQ_HANDLED )atomic_inc (&desc->threads_handled);irq_finalize_oneshot (desc, action); +if (!IS_ENABLED (CONFIG_PREEMPT_RT )) +local_irq_enable ();local_bh_enable ();return ret; }
kernel/time/alarmtimer.c +1 -1
@@ -838,9 +838,9 @@ static int alarm_timer_nsleep(const clockid_t which_clock, int flags,if (flags ==TIMER_ABSTIME )return -ERESTARTNOHAND ; - restart->fn = alarm_timer_nsleep_restart; restart->nanosleep.clockid = type; restart->nanosleep.expires = exp; +set_restart_fn (restart, alarm_timer_nsleep_restart);return ret; }
kernel/time/hrtimer.c +1 -1
@@ -1953,9 +1953,9 @@ long hrtimer_nanosleep(const struct timespec64 *rqtp, } restart = ¤t->restart_block; - restart->fn = hrtimer_nanosleep_restart; restart->nanosleep.clockid = t.timer.base->clockid; restart->nanosleep.expires =hrtimer_get_expires_tv64 (&t.timer); +set_restart_fn (restart, hrtimer_nanosleep_restart); out:destroy_hrtimer_on_stack (&t.timer);return ret;
kernel/time/posix-cpu-timers.c +1 -1
@@ -1335,8 +1335,8 @@ static int posix_cpu_nsleep(const clockid_t which_clock, int flags,if (flags &TIMER_ABSTIME )return -ERESTARTNOHAND ; - restart_block->fn = posix_cpu_nsleep_restart; restart_block->nanosleep.clockid = which_clock; +set_restart_fn (restart_block, posix_cpu_nsleep_restart); }return error; }
net/qrtr/qrtr.c +1 -1
@@ -264,7 +264,7 @@ int qrtr_endpoint_post(struct qrtr_endpoint *ep, const void *data, size_t len)if (len ==0 || len &3 )return -EINVAL ; - skb =netdev_alloc_skb (NULL , len); + skb =__netdev_alloc_skb (NULL , len,GFP_ATOMIC | __GFP_NOWARN);if (!skb)return -ENOMEM ;
net/sunrpc/svc.c +4 -2
@@ -1417,7 +1417,7 @@ svc_process_common(struct svc_rqst *rqstp, struct kvec *argv, struct kvec *resv) sendit:if (svc_authorise (rqstp)) - goto close; + goto close_xprt;return 1 ;/* Caller can now send it */ release_dropit:
@@ -1429,6 +1429,8 @@ svc_process_common(struct svc_rqst *rqstp, struct kvec *argv, struct kvec *resv)return 0 ; close: +svc_authorise (rqstp); +close_xprt:if (rqstp->rq_xprt &&test_bit (XPT_TEMP , &rqstp->rq_xprt->xpt_flags))svc_close_xprt (rqstp->rq_xprt);dprintk ("svc: svc_process close\n" );
@@ -1437,7 +1439,7 @@ svc_process_common(struct svc_rqst *rqstp, struct kvec *argv, struct kvec *resv) err_short_len:svc_printk (rqstp,"short len %zd, dropping request\n" , argv->iov_len); - goto close; + goto close_xprt; err_bad_rpc: serv->sv_stats->rpcbadfmt++;
net/sunrpc/svc_xprt.c +2 -2
@@ -1072,7 +1072,7 @@ static int svc_close_list(struct svc_serv *serv, struct list_head *xprt_list, ststruct svc_xprt *xprt;int ret =0 ; -spin_lock (&serv->sv_lock); +spin_lock_bh (&serv->sv_lock);list_for_each_entry (xprt, xprt_list, xpt_list) {if (xprt->xpt_net != net)continue ;
@@ -1080,7 +1080,7 @@ static int svc_close_list(struct svc_serv *serv, struct list_head *xprt_list, stset_bit (XPT_CLOSE , &xprt->xpt_flags);svc_xprt_enqueue (xprt); } -spin_unlock (&serv->sv_lock); +spin_unlock_bh (&serv->sv_lock);return ret; }
net/sunrpc/xprtrdma/svc_rdma_backchannel.c +3 -3
@@ -285,9 +285,9 @@ xprt_setup_rdma_bc(struct xprt_create *args) xprt->timeout = &xprt_rdma_bc_timeout;xprt_set_bound (xprt);xprt_set_connected (xprt); - xprt->bind_timeout =RPCRDMA_BIND_TO ; - xprt->reestablish_timeout =RPCRDMA_INIT_REEST_TO ; - xprt->idle_timeout =RPCRDMA_IDLE_DISC_TO ; + xprt->bind_timeout =0 ; + xprt->reestablish_timeout =0 ; + xprt->idle_timeout =0 ; xprt->prot =XPRT_TRANSPORT_BC_RDMA ; xprt->ops = &xprt_rdma_bc_procs;
sound/firewire/dice/dice-stream.c +2 -3
@@ -489,11 +489,10 @@ void snd_dice_stream_stop_duplex(struct snd_dice *dice)struct reg_params tx_params, rx_params;if (dice->substreams_counter ==0 ) { -if (get_register_params (dice, &tx_params, &rx_params) >=0 ) { -amdtp_domain_stop (&dice->domain); +if (get_register_params (dice, &tx_params, &rx_params) >=0 )finish_session (dice, &tx_params, &rx_params); - } +amdtp_domain_stop (&dice->domain);release_resources (dice); } }
sound/pci/hda/hda_generic.c +1 -1
@@ -4017,7 +4017,7 @@ int snd_hda_gen_add_micmute_led(struct hda_codec *codec, spec->micmute_led.led_mode =MICMUTE_LED_FOLLOW_MUTE ; spec->micmute_led.capture =0 ; - spec->micmute_led.led_value =0 ; + spec->micmute_led.led_value =-1 ; spec->micmute_led.old_hook = spec->cap_sync_hook; spec->micmute_led.update = hook; spec->cap_sync_hook = update_micmute_led;
sound/pci/hda/patch_realtek.c +2 -0
@@ -8102,7 +8102,9 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {SND_PCI_QUIRK (0x1b35 ,0x1237 ,"CZC L101" ,ALC269_FIXUP_CZC_L101 ),SND_PCI_QUIRK (0x1b7d ,0xa831 ,"Ordissimo EVE2 " ,ALC269VB_FIXUP_ORDISSIMO_EVE2 ),/* Also known as Malata PC-B1303 */ SND_PCI_QUIRK (0x1d72 ,0x1602 ,"RedmiBook" ,ALC255_FIXUP_XIAOMI_HEADSET_MIC ), +SND_PCI_QUIRK (0x1d72 ,0x1701 ,"XiaomiNotebook Pro" ,ALC298_FIXUP_DELL1_MIC_NO_PRESENCE ),SND_PCI_QUIRK (0x1d72 ,0x1901 ,"RedmiBook 14" ,ALC256_FIXUP_ASUS_HEADSET_MIC ), +SND_PCI_QUIRK (0x1d72 ,0x1947 ,"RedmiBook Air" ,ALC255_FIXUP_XIAOMI_HEADSET_MIC ),SND_PCI_QUIRK (0x10ec ,0x118c ,"Medion EE4254 MD62100" ,ALC256_FIXUP_MEDION_HEADSET_NO_PRESENCE ),SND_PCI_QUIRK (0x1c06 ,0x2013 ,"Lemote A1802" ,ALC269_FIXUP_LEMOTE_A1802 ), SND_PCI_QUIRK(0x1c06, 0x2015, "Lemote A190X", ALC269_FIXUP_LEMOTE_A190X),
sound/soc/codecs/ak4458.c +1 -0
@@ -707,6 +707,7 @@ static const struct of_device_id ak4458_of_match[] = { { .compatible = "asahi-kasei,ak4497", .data = &ak4497_drvdata}, { }, }; +MODULE_DEVICE_TABLE (of, ak4458_of_match);static struct i2c_driver ak4458_i2c_driver = { .driver = {
sound/soc/codecs/ak5558.c +1 -0
@@ -389,6 +389,7 @@ static const struct of_device_id ak5558_i2c_dt_ids[] = { { .compatible = "asahi-kasei,ak5558"}, { } }; +MODULE_DEVICE_TABLE (of, ak5558_i2c_dt_ids);static struct i2c_driver ak5558_i2c_driver = { .driver = {
sound/soc/fsl/fsl_ssi.c +4 -2
@@ -873,6 +873,7 @@ static int fsl_ssi_hw_free(struct snd_pcm_substream *substream,static int _fsl_ssi_set_dai_fmt (struct fsl_ssi *ssi,unsigned int fmt) {u32 strcr =0 , scr =0 , stcr, srcr, mask; +unsigned int slots; ssi->dai_fmt = fmt;
@@ -904,10 +905,11 @@ static int _fsl_ssi_set_dai_fmt(struct fsl_ssi *ssi, unsigned int fmt)return -EINVAL ; } + slots = ssi->slots ? :2 ;regmap_update_bits (ssi->regs,REG_SSI_STCCR , - SSI_SxCCR_DC_MASK,SSI_SxCCR_DC (2 )); + SSI_SxCCR_DC_MASK,SSI_SxCCR_DC (slots));regmap_update_bits (ssi->regs,REG_SSI_SRCCR , - SSI_SxCCR_DC_MASK,SSI_SxCCR_DC (2 )); + SSI_SxCCR_DC_MASK,SSI_SxCCR_DC (slots));/* Data on rising edge of bclk, frame low, 1clk before data */ strcr |=SSI_STCR_TFSI |SSI_STCR_TSCKP |SSI_STCR_TEFS ;
sound/soc/generic/simple-card-utils.c +7 -6
@@ -172,15 +172,16 @@ int asoc_simple_parse_clk(struct device *dev,* or device's module clock. */ clk =devm_get_clk_from_child (dev, node,NULL ); -if (IS_ERR (clk)) - clk =devm_get_clk_from_child (dev, dlc->of_node,NULL ); -if (!IS_ERR (clk)) { - simple_dai->clk = clk; simple_dai->sysclk =clk_get_rate (clk); - }else if (!of_property_read_u32 (node,"system-clock-frequency" , - &val)) { + + simple_dai->clk = clk; + }else if (!of_property_read_u32 (node,"system-clock-frequency" , &val)) { simple_dai->sysclk = val; + }else { + clk =devm_get_clk_from_child (dev, dlc->of_node,NULL ); +if (!IS_ERR (clk)) + simple_dai->sysclk =clk_get_rate (clk); }if (of_property_read_bool (node,"system-clock-direction-out" ))
sound/soc/sof/intel/hda-dsp.c +1 -1
@@ -179,7 +179,7 @@ int hda_dsp_core_power_down(struct snd_sof_dev *sdev, unsigned int core_mask)return snd_sof_dsp_read_poll_timeout (sdev,HDA_DSP_BAR ,HDA_DSP_REG_ADSPCS , adspcs, - !(adspcs &HDA_DSP_ADSPCS_SPA_MASK (core_mask)), + !(adspcs &HDA_DSP_ADSPCS_CPA_MASK (core_mask)),HDA_DSP_REG_POLL_INTERVAL_US ,HDA_DSP_PD_TIMEOUT *USEC_PER_MSEC ); }
sound/soc/sof/intel/hda.c +1 -0
@@ -672,6 +672,7 @@ int hda_dsp_probe(struct snd_sof_dev *sdev)/* dsp_unmap: not currently used */ iounmap (sdev->bar[HDA_DSP_BAR ]); hdac_bus_unmap: +platform_device_unregister (hdev->dmic_dev);iounmap (bus->remap_addr); err:return ret;
Samuel Zou
Tested-by Hulk RobotQuoted 4 lines · Greg Kroah-Hartman
I'm announcing the release of the 5.4.108 kernel.
All users of the 5.4 kernel series must upgrade.
Quoted 9 lines
The updated 5.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.gitlinux-5.4.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=summarythanks,
greg k-h
Tested on arm64 and x86 for 5.4.108,
Kernel repo:
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
Branch: linux-5.4.y
Version: 5.4.108
Commit: b90344f7d6000deba0709d75225f30cbf79ec2f0
Compiler: gcc version 7.3.0 (GCC)
arm64:
--------------------------------------------------------------------
Testcase Result Summary:
total: 4720
passed: 4720
failed: 0
timeout: 0
--------------------------------------------------------------------
x86:
--------------------------------------------------------------------
Testcase Result Summary:
total: 4720
passed: 4720
failed: 0
timeout: 0
--------------------------------------------------------------------