Linux 5.15.89
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.15.89 kernel.
All users of the 5.15 kernel series must upgrade.
The updated 5.15.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.15.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/devicetree/bindings/display/msm/dsi-controller-main.yaml | 4 Documentation/devicetree/bindings/display/msm/dsi-phy-10nm.yaml | 1 Documentation/devicetree/bindings/display/msm/dsi-phy-14nm.yaml | 1 Documentation/devicetree/bindings/display/msm/dsi-phy-28nm.yaml | 4 Documentation/sphinx/load_config.py | 6 Documentation/virt/kvm/api.rst | 60 Makefile | 2 arch/arm64/include/asm/atomic_ll_sc.h | 114 arch/arm64/include/asm/atomic_lse.h | 16 arch/arm64/include/asm/kvm_emulate.h | 22 arch/arm64/kvm/hyp/nvhe/Makefile | 4 arch/powerpc/include/asm/imc-pmu.h | 2 arch/powerpc/perf/imc-pmu.c | 136 - arch/s390/include/asm/cpu_mf.h | 31 arch/s390/include/asm/percpu.h | 2 arch/s390/kernel/machine_kexec_file.c | 5 arch/s390/kernel/perf_cpum_sf.c | 101 arch/x86/boot/bioscall.S | 4 arch/x86/kernel/cpu/resctrl/rdtgroup.c | 12 arch/x86/kvm/cpuid.c | 32 block/blk-merge.c | 4 block/blk-mq.c | 2 drivers/block/drbd/drbd_req.c | 2 drivers/block/pktcdvd.c | 2 drivers/block/ps3vram.c | 2 drivers/block/rsxx/dev.c | 2 drivers/bus/mhi/core/pm.c | 3 drivers/edac/edac_device.c | 17 drivers/edac/edac_module.h | 2 drivers/firmware/efi/efi.c | 9 drivers/gpu/drm/i915/gt/intel_reset.c | 34 drivers/gpu/drm/msm/adreno/adreno_gpu.h | 10 drivers/gpu/drm/msm/dp/dp_aux.c | 4 drivers/gpu/drm/virtio/virtgpu_ioctl.c | 19 drivers/iommu/iova.c | 4 drivers/iommu/mtk_iommu_v1.c | 4 drivers/md/md.c | 2 drivers/net/ethernet/intel/igc/igc_defines.h | 2 drivers/net/ethernet/intel/igc/igc_ptp.c | 10 drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c | 14 drivers/net/ethernet/marvell/octeontx2/af/cgx.c | 4 drivers/net/ethernet/marvell/octeontx2/af/cgx.h | 1 drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_vxlan.c | 2 drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 43 drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c | 2 drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.c | 5 drivers/nfc/pn533/usb.c | 44 drivers/nvme/host/multipath.c | 2 drivers/pinctrl/pinctrl-amd.c | 10 drivers/platform/surface/aggregator/controller.c | 4 drivers/platform/surface/aggregator/ssh_request_layer.c | 14 drivers/platform/x86/dell/dell-wmi-privacy.c | 41 drivers/platform/x86/ideapad-laptop.c | 6 drivers/platform/x86/sony-laptop.c | 21 drivers/regulator/da9211-regulator.c | 11 drivers/s390/block/dcssblk.c | 2 drivers/scsi/mpi3mr/Makefile | 2 drivers/scsi/mpt3sas/mpt3sas_base.c | 18 drivers/scsi/ufs/ufshcd.c | 38 drivers/tty/hvc/hvc_xen.c | 46 fs/cifs/link.c | 1 include/linux/tpm_eventlog.h | 4 io_uring/io-wq.c | 6 io_uring/io_uring.c | 18 kernel/sched/core.c | 37 mm/memblock.c | 8 net/ipv6/raw.c | 4 net/netfilter/ipset/ip_set_bitmap_ip.c | 4 net/netfilter/nft_payload.c | 2 net/sched/act_mpls.c | 8 net/tipc/node.c | 12 sound/core/control_led.c | 5 sound/pci/hda/patch_realtek.c | 53 sound/soc/codecs/wm8904.c | 7 sound/soc/qcom/lpass-cpu.c | 5 sound/usb/pcm.c | 11 tools/include/nolibc/arch-aarch64.h | 199 + tools/include/nolibc/arch-arm.h | 204 + tools/include/nolibc/arch-i386.h | 196 + tools/include/nolibc/arch-mips.h | 217 + tools/include/nolibc/arch-riscv.h | 204 + tools/include/nolibc/arch-x86_64.h | 215 + tools/include/nolibc/arch.h | 32 tools/include/nolibc/nolibc.h | 1331 ---------- tools/include/nolibc/std.h | 49 tools/include/nolibc/types.h | 133 tools/perf/builtin-trace.c | 2 tools/perf/util/auxtrace.c | 2 tools/perf/util/bpf_counter.h | 6 tools/testing/selftests/kvm/rseq_test.c | 2 tools/testing/selftests/net/af_unix/test_unix_oob.c | 2 91 files changed, 2268 insertions(+), 1734 deletions(-)
Aaron Thompson (1):
mm: Always release pages to the buddy allocator in memblock_free_late().
Adrian Hunter (1):
perf auxtrace: Fix address filter duplicate symbol selection
Alexander Egorenkov (1):
s390/kexec: fix ipl report address for kdump
Ammar Faizi (3):
tools/nolibc: x86: Remove r8, r9 and r10 from the clobber list tools/nolibc: x86-64: Use mov $60,%eax instead of mov $60,%rax tools/nolibc: Remove .global _start from the entry point code
Angela Czubak (1):
octeontx2-af: Fix LMAC config in cgx_lmac_rx_tx_enable
Ard Biesheuvel (1):
efi: tpm: Avoid READ_ONCE() for accessing the event log
Bart Van Assche (1):
scsi: ufs: Stop using the clock scaling lock in the error handler
Brian Norris (1):
ASoC: qcom: lpass-cpu: Fix fallback SD line index handling
Bryan O'Donoghue (4):
dt-bindings: msm: dsi-controller-main: Fix operating-points-v2 constraint
dt-bindings: msm: dsi-controller-main: Fix power-domain constraint
dt-bindings: msm: dsi-controller-main: Fix description of core clock
dt-bindings: msm: dsi-phy-28nm: Add missing qcom, dsi-phy-regulator-ldo-mode
Chris Wilson (1):
drm/i915/gt: Reset twice
Christophe JAILLET (1):
iommu/mediatek-v1: Fix an error handling path in mtk_iommu_v1_probe()
Christopher S Hall (1):
igc: Fix PPS delta between two synchronized end-points
Denis Nikitin (1):
KVM: arm64: nvhe: Fix build with profile optimization
Eliav Farber (1):
EDAC/device: Fix period calculation in edac_device_reset_delay_period()
Emanuele Ghidoli (1):
ASoC: wm8904: fix wrong outputs volume after power reactivation
Ferry Toth (2):
usb: ulpi: defer ulpi_register on ulpi_read_id timeout Revert "usb: ulpi: defer ulpi_register on ulpi_read_id timeout"
Gavin Li (1):
net/mlx5e: Don't support encap rules with gbp option
Gavrilov Ilia (1):
netfilter: ipset: Fix overflow before widen in the bitmap_ip_create() function.
Greg Kroah-Hartman (1):
Linux 5.15.89
Hans de Goede (4):
platform/x86: dell-privacy: Only register SW_CAMERA_LENS_COVER if present platform/x86: dell-privacy: Fix SW_CAMERA_LENS_COVER reporting platform/x86: ideapad-laptop: Add Legion 5 15ARH05 DMI id to set_fn_lock_led_list[] platform/x86: sony-laptop: Don't turn off 0x153 keyboard backlight during probe
Heiko Carstens (2):
s390/cpum_sf: add READ_ONCE() semantics to compare and swap loops s390/percpu: add READ_ONCE() to arch_this_cpu_to_op_simple()
Herbert Xu (1):
ipv6: raw: Deduct extension header length in rawv6_push_pending_frames
Ian Rogers (1):
perf build: Properly guard libbpf includes
Ido Schimmel (1):
net/sched: act_mpls: Fix warning during failed attribute validation
Jaroslav Kysela (1):
ALSA: control-led: use strscpy in set_led_id()
Jens Axboe (3):
io_uring/io-wq: free worker if task_work creation is canceled io_uring/io-wq: only free worker if it was allocated for creation
block: handle bio_split_to_limits() NULL return
Jinrong Liang (1):
selftests: kvm: Fix a compile error in selftests/kvm/rseq_test.c
Johan Hovold (1):
efi: fix NULL-deref in init error path
Jonathan Corbet (1):
docs: Fix the docs build with Sphinx 6.0
Kajol Jain (1):
powerpc/imc-pmu: Fix use of mutex in IRQs disabled section
Konrad Dybcio (3):
drm/msm/adreno: Make adreno quirks not overwrite each other
dt-bindings: msm/dsi: Don't require vdds-supply on 10nm PHY
dt-bindings: msm/dsi: Don't require vcca-supply on 14nm PHY
Kuogee Hsieh (1):
drm/msm/dp: do not complete dp_aux_cmd_fifo_tx() if irq is not for aux transfer
Luka Guzenko (1):
ALSA: hda/realtek: Enable mute/micmute LEDs on HP Spectre x360 13-aw0xxx
Marc Zyngier (1):
KVM: arm64: Fix S1PTW handling on RO memslots
Mario Limonciello (1):
pinctrl: amd: Add dynamic debugging for active GPIOs
Mark Rutland (3):
arm64: atomics: format whitespace consistently
arm64: atomics: remove LL/SC trampolines
arm64: cmpxchg_double*: hazard against entire exchange variable
Maximilian Luz (2):
platform/surface: aggregator: Ignore command messages not intended for us platform/surface: aggregator: Add missing call to ssam_request_sync_free()
Minsuk Kang (1):
nfc: pn533: Wait for out_urb's completion in pn533_usb_send_frame()
Mirsad Goran Todorovac (1):
af_unix: selftest: Fix the size of the parameter to connect()
Noor Azura Ahmad Tarmizi (1):
net: stmmac: add aux timestamps fifo clearance wait
Pablo Neira Ayuso (1):
netfilter: nft_payload: incorrect arithmetics when fetching VLAN header bits
Paolo Bonzini (2):
Documentation: KVM: add API issues section
KVM: x86: Do not return host topology information from KVM_GET_SUPPORTED_CPUID
Pavel Begunkov (1):
io_uring: lock overflowing for IOPOLL
Peter Newman (1):
x86/resctrl: Fix task CLOSID/RMID update race
Peter Wang (1):
scsi: ufs: core: WLUN suspend SSU/enter hibern8 fail recovery
Peter Zijlstra (1):
x86/boot: Avoid using Intel mnemonics in AT&T syntax asm
Qiang Yu (1):
bus: mhi: host: Fix race between channel preparation and M0 event
Rahul Rameshbabu (1):
net/mlx5: Fix ptp max frequency adjustment range
Ricardo Ribalda (1):
regulator: da9211: Use irq handler when ready
Rob Clark (1):
drm/virtio: Fix GEM handle creation UAF
Roger Pau Monne (1):
hvc/xen: lock console list traversal
Roi Dayan (1):
net/mlx5e: Set action fwd flag when parsing tc action goto
Shin'ichiro Kawasaki (1):
scsi: mpi3mr: Refer CONFIG_SCSI_MPI3MR in Makefile
Sreekanth Reddy (1):
scsi: mpt3sas: Remove scsi_dma_map() error messages
Takashi Iwai (2):
ALSA: usb-audio: Make sure to stop endpoints before closing EPs
ALSA: usb-audio: Relax hw constraints for implicit fb sync
Tung Nguyen (1):
tipc: fix unexpected link reset due to discovery messages
Volker Lendecke (1):
cifs: Fix uninitialized memory read for smb311 posix symlink create
Waiman Long (1):
sched/core: Fix use-after-free bug in dup_user_cpus_ptr()
Willy Tarreau (7):
tools/nolibc: use pselect6 on RISCV
tools/nolibc/std: move the standard type definitions to std.h tools/nolibc/types: split syscall-specific definitions into their own files tools/nolibc/arch: split arch-specific code into individual files tools/nolibc/arch: mark the _start symbol as weak tools/nolibc: restore mips branch ordering in the _start block tools/nolibc: fix the O_* fcntl/open macro definitions for riscv
Yang Yingliang (1):
ixgbe: fix pci device refcount leak
Yuchi Yang (1):
ALSA: hda/realtek - Turn on power early
Yunfei Wang (1):
iommu/iova: Fix alloc iova overflows issue
Greg Kroah-Hartman
maintainerDocumentation/devicetree/bindings/display/msm/dsi-controller-main.yaml +1 -3
@@ -31,7 +31,7 @@ properties: - description: Display byte clock - description: Display byte interface clock - description: Display pixel clock - - description: Display escape clock + - description: Display core clock - description: Display AHB clock - description: Display AXI clock
@@ -135,8 +135,6 @@ required: - phy-names - assigned-clocks - assigned-clock-parents - - power-domains - - operating-points-v2 - ports additionalProperties: false
Documentation/devicetree/bindings/display/msm/dsi-phy-10nm.yaml +0 -1
@@ -39,7 +39,6 @@ required: - compatible - reg - reg-names - - vdds-supply unevaluatedProperties: false
Documentation/devicetree/bindings/display/msm/dsi-phy-14nm.yaml +0 -1
@@ -37,7 +37,6 @@ required: - compatible - reg - reg-names - - vcca-supply unevaluatedProperties: false
Documentation/devicetree/bindings/display/msm/dsi-phy-28nm.yaml +4 -0
@@ -34,6 +34,10 @@ properties: vddio-supply: description: Phandle to vdd-io regulator device node. + qcom,dsi-phy-regulator-ldo-mode: + type: boolean + description: Indicates if the LDO mode PHY regulator is wanted. + required: - compatible - reg
Documentation/sphinx/load_config.py +4 -2
@@ -3,7 +3,7 @@ import os import sys -from sphinx.util.pycompat import execfile_ +from sphinx.util.osutil import fs_encoding # ------------------------------------------------------------------------------ def loadConfig(namespace):
@@ -48,7 +48,9 @@ def loadConfig(namespace): sys.stdout.write("load additional sphinx-config: %s\n" % config_file) config = namespace.copy() config['__file__'] = config_file - execfile_(config_file, config) + with open(config_file, 'rb') as f: + code = compile(f.read(), fs_encoding, 'exec') + exec(code, config) del config['__file__'] namespace.update(config) else:
Documentation/virt/kvm/api.rst +60 -0
63 lines not on this page · raw message
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 15 -SUBLEVEL = 88 +SUBLEVEL = 89 EXTRAVERSION = NAME = Trick or Treat
arch/arm64/include/asm/atomic_ll_sc.h +46 -68
191 lines not on this page · raw message
arch/arm64/include/asm/atomic_lse.h +8 -8
@@ -11,11 +11,11 @@#define __ASM_ATOMIC_LSE_H#define ATOMIC_OP (op, asm_op) \ -static inline void __lse_atomic_##op(int i, atomic_t *v) \ +static inline void __lse_atomic_##op(int i, atomic_t *v) \ { \ asm volatile( \ __LSE_PREAMBLE \ -" " #asm_op " %w[i], %[v]\n" \ + " " #asm_op " %w[i], %[v]\n" \ : [i] "+r" (i), [v] "+Q" (v->counter) \ : "r" (v)); \ }
@@ -32,7 +32,7 @@ static inline int __lse_atomic_fetch_##op##name(int i, atomic_t *v) \ { \ asm volatile( \ __LSE_PREAMBLE \ -" " #asm_op #mb " %w[i], %w[i], %[v]" \ + " " #asm_op #mb " %w[i], %w[i], %[v]" \ : [i] "+r" (i), [v] "+Q" (v->counter) \ : "r" (v) \ : cl); \
@@ -130,7 +130,7 @@ static inline int __lse_atomic_sub_return##name(int i, atomic_t *v) \" add %w[i], %w[i], %w[tmp]" \ : [i] "+&r" (i), [v] "+Q" (v->counter), [tmp] "=&r" (tmp) \: " r" (v) \ -: cl); \ +: cl); \ \ return i; \ }
@@ -168,7 +168,7 @@ static inline void __lse_atomic64_##op(s64 i, atomic64_t *v) \ { \ asmvolatile ( \ __LSE_PREAMBLE \ -" " #asm_op " %[i], %[v]\n" \ + " " #asm_op " %[i], %[v]\n" \ : [i]"+r" (i), [v]"+Q" (v->counter) \ :"r" (v)); \ }
@@ -185,7 +185,7 @@ static inline long __lse_atomic64_fetch_##op##name(s64 i, atomic64_t *v)\ { \ asm volatile( \ __LSE_PREAMBLE \ -" " #asm_op #mb " %[i], %[i], %[v]" \ + " " #asm_op #mb " %[i], %[i], %[v]" \ : [i] "+r" (i), [v] "+Q" (v->counter) \ : "r" (v) \ : cl); \
@@ -272,7 +272,7 @@ static inline void __lse_atomic64_sub(s64 i, atomic64_t *v) } #define ATOMIC64_OP_SUB_RETURN(name, mb, cl...) \ -static inline long __lse_atomic64_sub_return##name(s64 i, atomic64_t *v) \ +static inline long __lse_atomic64_sub_return##name(s64 i, atomic64_t *v)\ { \ unsigned long tmp; \ \
@@ -403,7 +403,7 @@ __lse__cmpxchg_double##name(unsigned long old1, \" eor %[old2], %[old2], %[oldval2]\n" \" orr %[old1], %[old1], %[old2]" \ : [old1] "+&r" (x0), [old2] "+&r" (x1), \ -[v] " +Q " (*(unsigned long *)ptr) \ +[v] " +Q " (*(__uint128_t *)ptr) \ : [new1] " r" (x2), [new2] " r" (x3), [ptr] " r" (x4), \ [oldval1] " r" (oldval1), [oldval2] " r" (oldval2) \ : cl); \
arch/arm64/include/asm/kvm_emulate.h +20 -2
@@ -366,8 +366,26 @@ static __always_inline int kvm_vcpu_sys_get_rt(struct kvm_vcpu *vcpu)static inline bool kvm_is_write_fault (struct kvm_vcpu *vcpu) { -if (kvm_vcpu_abt_iss1tw (vcpu)) -return true; +if (kvm_vcpu_abt_iss1tw (vcpu)) { +/* +* Only a permission fault on a S1PTW should be +* considered as a write. Otherwise, page tables baked +* in a read-only memslot will result in an exception +* being delivered in the guest. +* +* The drawback is that we end-up faulting twice if the +* guest is using any of HW AF/DB: a translation fault +* to map the page containing the PT (read only at +* first), then a permission fault to allow the flags +* to be set. +*/ +switch (kvm_vcpu_trap_get_fault_type (vcpu)) { +case ESR_ELx_FSC_PERM: +return true; +default : +return false; + } + }if (kvm_vcpu_trap_is_iabt (vcpu))return false;
arch/arm64/kvm/hyp/nvhe/Makefile +4 -0
@@ -83,6 +83,10 @@ quiet_cmd_hypcopy = HYPCOPY $@ # Remove ftrace, Shadow Call Stack, and CFI CFLAGS. # This is equivalent to the 'notrace', '__noscs', and '__nocfi' annotations. KBUILD_CFLAGS := $(filter-out $(CC_FLAGS_FTRACE) $(CC_FLAGS_SCS) $(CC_FLAGS_CFI), $(KBUILD_CFLAGS)) +# Starting from 13.0.0 llvm emits SHT_REL section '.llvm.call-graph-profile' +# when profile optimization is applied. gen-hyprel does not support SHT_REL and +# causes a build failure. Remove profile optimization flags. +KBUILD_CFLAGS := $(filter-out -fprofile-sample-use=% -fprofile-use=%, $(KBUILD_CFLAGS)) # KVM nVHE code is run at a different exception code with a different map, so # compiler instrumentation that inserts callbacks or checks into the code may
arch/powerpc/include/asm/imc-pmu.h +1 -1
@@ -137,7 +137,7 @@ struct imc_pmu {* are inited. */ struct imc_pmu_ref { -struct mutex lock; +spinlock_t lock;unsigned int id;int refc; };
arch/powerpc/perf/imc-pmu.c +66 -70
474 lines not on this page · raw message
arch/s390/include/asm/cpu_mf.h +15 -16
@@ -128,19 +128,21 @@ struct hws_combined_entry {struct hws_diag_entry diag;/* Diagnostic-sampling data entry */ } __packed; -struct hws_trailer_entry { -union { -struct { -unsigned int f:1 ;/* 0 - Block Full Indicator */ -unsigned int a:1 ;/* 1 - Alert request control */ -unsigned int t:1 ;/* 2 - Timestamp format */ - unsigned int :29; /* 3 - 31: Reserved */ -unsigned int bsdes:16 ;/* 32-47: size of basic SDE */ -unsigned int dsdes:16 ;/* 48-63: size of diagnostic SDE */ - }; -unsigned long long flags;/* 0 - 63: All indicators */ +union hws_trailer_header { +struct { +unsigned int f:1 ;/* 0 - Block Full Indicator */ +unsigned int a:1 ;/* 1 - Alert request control */ +unsigned int t:1 ;/* 2 - Timestamp format */ + unsigned int :29; /* 3 - 31: Reserved */ +unsigned int bsdes:16 ;/* 32-47: size of basic SDE */ +unsigned int dsdes:16 ;/* 48-63: size of diagnostic SDE */ +unsigned long long overflow;/* 64 - Overflow Count */ }; -unsigned long long overflow;/* 64 - sample Overflow count */ +__uint128_t val; +}; + +struct hws_trailer_entry { +union hws_trailer_header header;/* 0 - 15 Flags + Overflow Count */ unsigned char timestamp[16 ];/* 16 - 31 timestamp */ unsigned long long reserved1;/* 32 -Reserved */ unsigned long long reserved2;/* */
@@ -287,14 +289,11 @@ static inline unsigned long sample_rate_to_freq(struct hws_qsi_info_block *qsi,return USEC_PER_SEC * qsi->cpu_speed / rate; } -#define SDB_TE_ALERT_REQ_MASK 0x4000000000000000UL -#define SDB_TE_BUFFER_FULL_MASK 0x8000000000000000UL -/* Return TOD timestamp contained in an trailer entry */ static inline unsigned long long trailer_timestamp (struct hws_trailer_entry *te) {/* TOD in STCKE format */ -if (te->t) +if (te->header.t)return *((unsigned long long *) &te->timestamp[1 ]);/* TOD in STCK format */
arch/s390/include/asm/percpu.h +1 -1
@@ -31,7 +31,7 @@pcp_op_T__ *ptr__; \preempt_disable_notrace (); \ ptr__ =raw_cpu_ptr (&(pcp)); \ - prev__ = *ptr__; \ + prev__ =READ_ONCE (*ptr__); \ do { \ old__ = prev__; \ new__ = old__ op (val); \
arch/s390/kernel/machine_kexec_file.c +3 -2
@@ -185,8 +185,6 @@ static int kexec_file_add_ipl_report(struct kimage *image, data->memsz =ALIGN (data->memsz,PAGE_SIZE ); buf.mem = data->memsz; -if (image->type ==KEXEC_TYPE_CRASH ) - buf.mem += crashk_res.start; ptr = (void *)ipl_cert_list_addr; end = ptr + ipl_cert_list_size;
@@ -223,6 +221,9 @@ static int kexec_file_add_ipl_report(struct kimage *image, data->kernel_buf + offsetof(struct lowcore , ipl_parmblock_ptr); *lc_ipl_parmblock_ptr = (__u32 )buf.mem; +if (image->type ==KEXEC_TYPE_CRASH ) + buf.mem += crashk_res.start; + ret =kexec_add_buffer (&buf); out:return ret;
arch/s390/kernel/perf_cpum_sf.c +62 -39
222 lines not on this page · raw message
arch/x86/boot/bioscall.S +2 -2
@@ -32,7 +32,7 @@ intcall: movw %dx, %si movw %sp, %di movw $11, %cx - rep; movsd + rep; movsl /* Pop full state from the stack */ popal
@@ -67,7 +67,7 @@ intcall: jz 4f movw %sp, %si movw $11, %cx - rep; movsd + rep; movsl 4: addw $44, %sp /* Restore state and return */
arch/x86/kernel/cpu/resctrl/rdtgroup.c +11 -1
@@ -580,8 +580,10 @@ static int __rdtgroup_move_task(struct task_struct *tsk,/* * Ensure the task's closid and rmid are written before determining if * the task is current that will decide if it will be interrupted. +* This pairs with the full barrier between the rq->curr update and +* resctrl_sched_in() during context switch. */ -barrier (); +smp_mb ();/* * By now, the task's closid and rmid are set. If the task is current
@@ -2363,6 +2365,14 @@ static void rdt_move_group_tasks(struct rdtgroup *from, struct rdtgroup *to,WRITE_ONCE (t->closid, to->closid);WRITE_ONCE (t->rmid, to->mon.rmid); +/* +* Order the closid/rmid stores above before the loads +* in task_curr(). This pairs with the full barrier +* between the rq->curr update and resctrl_sched_in() +* during context switch. +*/ +smp_mb (); +/* * If the task is on a CPU, set the CPU in the mask. * The detection is inaccurate as tasks might move or
arch/x86/kvm/cpuid.c +16 -16
@@ -567,16 +567,22 @@ struct kvm_cpuid_array {int nent; }; +static struct kvm_cpuid_entry2 *get_next_cpuid (struct kvm_cpuid_array *array) +{ +if (array->nent >= array->maxnent) +return NULL ; + +return &array->entries[array->nent++]; +} +static struct kvm_cpuid_entry2 *do_host_cpuid (struct kvm_cpuid_array *array,u32 function,u32 index) { -struct kvm_cpuid_entry2 *entry; +struct kvm_cpuid_entry2 *entry =get_next_cpuid (array); -if (array->nent >= array->maxnent) +if (!entry)return NULL ; - entry = &array->entries[array->nent++]; - entry->function = function; entry->index = index; entry->flags =0 ;
@@ -755,22 +761,13 @@ static inline int __do_cpuid_func(struct kvm_cpuid_array *array, u32 function) entry->edx = edx.full;break ; } -/* -* Per Intel's SDM, the 0x1f is a superset of 0xb, -* thus they can be handled by common code. -*/ case 0x1f :case 0xb :/* -* Populate entries until the level type (ECX[15:8]) of the -* previous entry is zero. Note, CPUID EAX.{0x1f,0xb}.0 is -* the starting entry, filled by the primary do_host_cpuid(). +* No topology; a valid topology is indicated by the presence +* of subleaf 1. */ -for (i =1 ; entry->ecx &0xff00 ; ++i) { - entry =do_host_cpuid (array, function, i); -if (!entry) - goto out; - } + entry->eax = entry->ebx = entry->ecx =0 ;break ;case 0xd : entry->eax &= supported_xcr0;
@@ -962,6 +959,9 @@ static inline int __do_cpuid_func(struct kvm_cpuid_array *array, u32 function) entry->ebx = entry->ecx = entry->edx =0 ;break ;case 0x8000001e : +/* Do not return host topology information. */ + entry->eax = entry->ebx = entry->ecx =0 ; + entry->edx =0 ;/* reserved */ break ;case 0x8000001F :if (!kvm_cpu_cap_has (X86_FEATURE_SEV )) {
block/blk-merge.c +3 -1
@@ -348,11 +348,13 @@ void __blk_queue_split(struct bio **bio, unsigned int *nr_segs)break ; } split =blk_bio_segment_split (q, *bio, &q->bio_split, nr_segs); +if (IS_ERR (split)) + *bio = split =NULL ;break ; }if (split) { -/* there isn't chance to merge the splitted bio */ +/* there isn't chance to merge the split bio */ split->bi_opf |=REQ_NOMERGE ;bio_chain (split, *bio);
block/blk-mq.c +2 -0
@@ -2193,6 +2193,8 @@ blk_qc_t blk_mq_submit_bio(struct bio *bio)blk_queue_bounce (q, &bio);__blk_queue_split (&bio, &nr_segs); +if (!bio) + goto queue_exit;if (!bio_integrity_prep (bio)) goto queue_exit;
drivers/block/drbd/drbd_req.c +2 -0
@@ -1602,6 +1602,8 @@ blk_qc_t drbd_submit_bio(struct bio *bio)struct drbd_device *device = bio->bi_bdev->bd_disk->private_data;blk_queue_split (&bio); +if (!bio) +return BLK_QC_T_NONE ;/* * what we "blindly" assume:
drivers/block/pktcdvd.c +2 -0
@@ -2407,6 +2407,8 @@ static blk_qc_t pkt_submit_bio(struct bio *bio)struct bio *split;blk_queue_split (&bio); +if (!bio) +return BLK_QC_T_NONE ; pd = bio->bi_bdev->bd_disk->queue->queuedata;if (!pd) {
drivers/block/ps3vram.c +2 -0
@@ -587,6 +587,8 @@ static blk_qc_t ps3vram_submit_bio(struct bio *bio)dev_dbg (&dev->core,"%s\n" , __func__);blk_queue_split (&bio); +if (!bio) +return BLK_QC_T_NONE ;spin_lock_irq (&priv->lock); busy = !bio_list_empty (&priv->list);
drivers/block/rsxx/dev.c +2 -0
@@ -127,6 +127,8 @@ static blk_qc_t rsxx_submit_bio(struct bio *bio)blk_status_t st =BLK_STS_IOERR ;blk_queue_split (&bio); +if (!bio) +return BLK_QC_T_NONE ;might_sleep ();
drivers/bus/mhi/core/pm.c +2 -1
@@ -297,7 +297,8 @@ int mhi_pm_m0_transition(struct mhi_controller *mhi_cntrl)read_lock_irq (&mhi_chan->lock);/* Only ring DB if ring is not empty */ -if (tre_ring->base && tre_ring->wp != tre_ring->rp) +if (tre_ring->base && tre_ring->wp != tre_ring->rp && + mhi_chan->ch_state ==MHI_CH_STATE_ENABLED )mhi_ring_chan_db (mhi_cntrl, mhi_chan);read_unlock_irq (&mhi_chan->lock); }
drivers/edac/edac_device.c +8 -9
@@ -424,17 +424,16 @@ static void edac_device_workq_teardown(struct edac_device_ctl_info *edac_dev)* Then restart the workq on the new delay */ void edac_device_reset_delay_period (struct edac_device_ctl_info *edac_dev, -unsigned long value) +unsigned long msec) { -unsigned long jiffs =msecs_to_jiffies (value); - -if (value ==1000 ) - jiffs =round_jiffies_relative (value); - - edac_dev->poll_msec = value; - edac_dev->delay = jiffs; + edac_dev->poll_msec = msec; + edac_dev->delay =msecs_to_jiffies (msec); -edac_mod_work (&edac_dev->work, jiffs); +/* See comment in edac_device_workq_setup() above */ +if (edac_dev->poll_msec ==1000 ) +edac_mod_work (&edac_dev->work,round_jiffies_relative (edac_dev->delay)); +else +edac_mod_work (&edac_dev->work, edac_dev->delay); }int edac_device_alloc_index (void )
drivers/edac/edac_module.h +1 -1
@@ -56,7 +56,7 @@ bool edac_stop_work(struct delayed_work *work);bool edac_mod_work (struct delayed_work *work,unsigned long delay);extern void edac_device_reset_delay_period (struct edac_device_ctl_info - *edac_dev,unsigned long value); + *edac_dev,unsigned long msec);extern void edac_mc_reset_delay_period (unsigned long value);extern void *edac_align_ptr (void **p,unsigned size,int n_elems);
drivers/firmware/efi/efi.c +6 -3
@@ -385,8 +385,8 @@ static int __init efisubsys_init(void) efi_kobj =kobject_create_and_add ("efi" , firmware_kobj);if (!efi_kobj) {pr_err ("efi: Firmware registration failed.\n" ); -destroy_workqueue (efi_rts_wq); -return -ENOMEM ; + error = -ENOMEM ; + goto err_destroy_wq; } if (efi_rt_services_supported(EFI_RT_SUPPORTED_GET_VARIABLE |
@@ -429,7 +429,10 @@ static int __init efisubsys_init(void)generic_ops_unregister (); err_put:kobject_put (efi_kobj); -destroy_workqueue (efi_rts_wq); +err_destroy_wq: +if (efi_rts_wq) +destroy_workqueue (efi_rts_wq); +return error; }
drivers/gpu/drm/i915/gt/intel_reset.c +28 -6
@@ -271,6 +271,7 @@ static int ilk_do_reset(struct intel_gt *gt, intel_engine_mask_t engine_mask,static int gen6_hw_domain_reset (struct intel_gt *gt,u32 hw_domain_mask) {struct intel_uncore *uncore = gt->uncore; +int loops =2 ;int err;/*
@@ -278,18 +279,39 @@ static int gen6_hw_domain_reset(struct intel_gt *gt, u32 hw_domain_mask)* for fifo space for the write or forcewake the chip for * the read */ -intel_uncore_write_fw (uncore,GEN6_GDRST , hw_domain_mask); +do { +intel_uncore_write_fw (uncore,GEN6_GDRST , hw_domain_mask); -/* Wait for the device to ack the reset requests */ - err =__intel_wait_for_register_fw (uncore, -GEN6_GDRST , hw_domain_mask,0 , -500 ,0 , -NULL ); +/* +* Wait for the device to ack the reset requests. +* +* On some platforms, e.g. Jasperlake, we see that the +* engine register state is not cleared until shortly after +* GDRST reports completion, causing a failure as we try +* to immediately resume while the internal state is still +* in flux. If we immediately repeat the reset, the second +* reset appears to serialise with the first, and since +* it is a no-op, the registers should retain their reset +* value. However, there is still a concern that upon +* leaving the second reset, the internal engine state +* is still in flux and not ready for resuming. +*/ + err =__intel_wait_for_register_fw (uncore,GEN6_GDRST , + hw_domain_mask,0 , +2000 ,0 , +NULL ); + }while (err ==0 && --loops);if (err)GT_TRACE (gt,"Wait for 0x%08x engines reset failed\n" , hw_domain_mask); +/* +* As we have observed that the engine state is still volatile +* after GDRST is acked, impose a small delay to let everything settle. +*/ +udelay (50 ); +return err; }
drivers/gpu/drm/msm/adreno/adreno_gpu.h +4 -6
@@ -29,11 +29,9 @@ enum { ADRENO_FW_MAX, }; -enum adreno_quirks { -ADRENO_QUIRK_TWO_PASS_USE_WFI =1 , -ADRENO_QUIRK_FAULT_DETECT_MASK =2 , -ADRENO_QUIRK_LMLOADKILL_DISABLE =3 , -}; +#define ADRENO_QUIRK_TWO_PASS_USE_WFI BIT(0) +#define ADRENO_QUIRK_FAULT_DETECT_MASK BIT(1) +#define ADRENO_QUIRK_LMLOADKILL_DISABLE BIT(2)struct adreno_rev {uint8_t core;
@@ -65,7 +63,7 @@ struct adreno_info {const char *name;const char *fw[ADRENO_FW_MAX ];uint32_t gmem; -enum adreno_quirks quirks; +u64 quirks;struct msm_gpu *(*init)(struct drm_device *dev);const char *zapfw;u32 inactive_period;
drivers/gpu/drm/msm/dp/dp_aux.c +4 -0
@@ -406,6 +406,10 @@ void dp_aux_isr(struct drm_dp_aux *dp_aux) isr =dp_catalog_aux_get_irq (aux->catalog); +/* no interrupts pending, return immediately */ +if (!isr) +return ; +if (!aux->cmd_busy)return ;
drivers/gpu/drm/virtio/virtgpu_ioctl.c +17 -2
@@ -292,10 +292,18 @@ static int virtio_gpu_resource_create_ioctl(struct drm_device *dev, void *data,drm_gem_object_release (obj);return ret; } -drm_gem_object_put (obj); rc->res_handle = qobj->hw_res_handle;/* similiar to a VM address */ rc->bo_handle = handle; + +/* +* The handle owns the reference now. But we must drop our +* remaining reference *after* we no longer need to dereference +* the obj. Otherwise userspace could guess the handle and +* race closing it from another thread. +*/ +drm_gem_object_put (obj); +return 0 ; }
@@ -656,11 +664,18 @@ static int virtio_gpu_resource_create_blob_ioctl(struct drm_device *dev,drm_gem_object_release (obj);return ret; } -drm_gem_object_put (obj); rc_blob->res_handle = bo->hw_res_handle; rc_blob->bo_handle = handle; +/* +* The handle owns the reference now. But we must drop our +* remaining reference *after* we no longer need to dereference +* the obj. Otherwise userspace could guess the handle and +* race closing it from another thread. +*/ +drm_gem_object_put (obj); +return 0 ; }
drivers/iommu/iova.c +2 -2
@@ -252,7 +252,7 @@ static int __alloc_and_insert_iova_range(struct iova_domain *iovad, curr =__get_cached_rbnode (iovad, limit_pfn); curr_iova =to_iova (curr); - retry_pfn = curr_iova->pfn_hi +1 ; + retry_pfn = curr_iova->pfn_hi; retry: do {
@@ -266,7 +266,7 @@ static int __alloc_and_insert_iova_range(struct iova_domain *iovad,if (high_pfn < size || new_pfn < low_pfn) {if (low_pfn == iovad->start_pfn && retry_pfn < limit_pfn) { high_pfn = limit_pfn; - low_pfn = retry_pfn; + low_pfn = retry_pfn +1 ; curr =iova_find_limit (iovad, limit_pfn); curr_iova =to_iova (curr); goto retry;
drivers/iommu/mtk_iommu_v1.c +3 -1
@@ -655,7 +655,7 @@ static int mtk_iommu_probe(struct platform_device *pdev) ret =iommu_device_sysfs_add (&data->iommu, &pdev->dev,NULL ,dev_name (&pdev->dev));if (ret) -return ret; + goto out_clk_unprepare; ret =iommu_device_register (&data->iommu, &mtk_iommu_ops, dev);if (ret)
@@ -678,6 +678,8 @@ static int mtk_iommu_probe(struct platform_device *pdev)iommu_device_unregister (&data->iommu); out_sysfs_remove:iommu_device_sysfs_remove (&data->iommu); +out_clk_unprepare: +clk_disable_unprepare (data->bclk);return ret; }
drivers/md/md.c +2 -0
@@ -458,6 +458,8 @@ static blk_qc_t md_submit_bio(struct bio *bio) }blk_queue_split (&bio); +if (!bio) +return BLK_QC_T_NONE ;if (mddev->ro ==1 &&unlikely (rw ==WRITE )) {if (bio_sectors (bio) !=0 )
drivers/net/ethernet/intel/igc/igc_defines.h +2 -0
@@ -469,7 +469,9 @@#define IGC_TSAUXC_EN_TT0 BIT(0)/* Enable target time 0. */ #define IGC_TSAUXC_EN_TT1 BIT(1)/* Enable target time 1. */ #define IGC_TSAUXC_EN_CLK0 BIT(2)/* Enable Configurable Frequency Clock 0. */ +#define IGC_TSAUXC_ST0 BIT(4)/* Start Clock 0 Toggle on Target Time 0. */ #define IGC_TSAUXC_EN_CLK1 BIT(5)/* Enable Configurable Frequency Clock 1. */ +#define IGC_TSAUXC_ST1 BIT(7)/* Start Clock 1 Toggle on Target Time 1. */ #define IGC_TSAUXC_EN_TS0 BIT(8)/* Enable hardware timestamp 0. */ #define IGC_TSAUXC_AUTT0 BIT(9)/* Auxiliary Timestamp Taken. */ #define IGC_TSAUXC_EN_TS1 BIT(10)/* Enable hardware timestamp 0. */
drivers/net/ethernet/intel/igc/igc_ptp.c +6 -4
@@ -323,7 +323,7 @@ static int igc_ptp_feature_enable_i225(struct ptp_clock_info *ptp, ts =ns_to_timespec64 (ns);if (rq->perout.index ==1 ) {if (use_freq) { - tsauxc_mask =IGC_TSAUXC_EN_CLK1 ; + tsauxc_mask =IGC_TSAUXC_EN_CLK1 |IGC_TSAUXC_ST1 ; tsim_mask =0 ; }else { tsauxc_mask =IGC_TSAUXC_EN_TT1 ;
@@ -334,7 +334,7 @@ static int igc_ptp_feature_enable_i225(struct ptp_clock_info *ptp, freqout =IGC_FREQOUT1 ; }else {if (use_freq) { - tsauxc_mask =IGC_TSAUXC_EN_CLK0 ; + tsauxc_mask =IGC_TSAUXC_EN_CLK0 |IGC_TSAUXC_ST0 ; tsim_mask =0 ; }else { tsauxc_mask =IGC_TSAUXC_EN_TT0 ;
@@ -348,10 +348,12 @@ static int igc_ptp_feature_enable_i225(struct ptp_clock_info *ptp, tsauxc =rd32 (IGC_TSAUXC ); tsim =rd32 (IGC_TSIM );if (rq->perout.index ==1 ) { - tsauxc &= ~(IGC_TSAUXC_EN_TT1 |IGC_TSAUXC_EN_CLK1 ); + tsauxc &= ~(IGC_TSAUXC_EN_TT1 |IGC_TSAUXC_EN_CLK1 | +IGC_TSAUXC_ST1 ); tsim &= ~IGC_TSICR_TT1 ; }else { - tsauxc &= ~(IGC_TSAUXC_EN_TT0 |IGC_TSAUXC_EN_CLK0 ); + tsauxc &= ~(IGC_TSAUXC_EN_TT0 |IGC_TSAUXC_EN_CLK0 | +IGC_TSAUXC_ST0 ); tsim &= ~IGC_TSICR_TT0 ; }if (on) {
drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c +9 -5
@@ -855,9 +855,11 @@ static struct pci_dev *ixgbe_get_first_secondary_devfn(unsigned int devfn) rp_pdev =pci_get_domain_bus_and_slot (0 ,0 , devfn);if (rp_pdev && rp_pdev->subordinate) { bus = rp_pdev->subordinate->number; +pci_dev_put (rp_pdev);return pci_get_domain_bus_and_slot (0 , bus,0 ); } +pci_dev_put (rp_pdev);return NULL ; }
@@ -874,6 +876,7 @@ static bool ixgbe_x550em_a_has_mii(struct ixgbe_hw *hw)struct ixgbe_adapter *adapter = hw->back;struct pci_dev *pdev = adapter->pdev;struct pci_dev *func0_pdev; +bool has_mii = false;/* For the C3000 family of SoCs (x550em_a) the internal ixgbe devices * are always downstream of root ports @ 0000:00:16.0 & 0000:00:17.0
@@ -884,15 +887,16 @@ static bool ixgbe_x550em_a_has_mii(struct ixgbe_hw *hw) func0_pdev =ixgbe_get_first_secondary_devfn (PCI_DEVFN (0x16 ,0 ));if (func0_pdev) {if (func0_pdev == pdev) -return true; -else -return false; + has_mii = true; + goto out; } func0_pdev =ixgbe_get_first_secondary_devfn (PCI_DEVFN (0x17 ,0 ));if (func0_pdev == pdev) -return true; + has_mii = true; -return false; +out: +pci_dev_put (func0_pdev); +return has_mii; }/**
drivers/net/ethernet/marvell/octeontx2/af/cgx.c +2 -2
@@ -695,9 +695,9 @@ int cgx_lmac_rx_tx_enable(void *cgxd, int lmac_id, bool enable) cfg =cgx_read (cgx, lmac_id,CGXX_CMRX_CFG );if (enable) - cfg |=CMR_EN |DATA_PKT_RX_EN |DATA_PKT_TX_EN ; + cfg |=DATA_PKT_RX_EN |DATA_PKT_TX_EN ;else - cfg &= ~(CMR_EN |DATA_PKT_RX_EN |DATA_PKT_TX_EN ); + cfg &= ~(DATA_PKT_RX_EN |DATA_PKT_TX_EN );cgx_write (cgx, lmac_id,CGXX_CMRX_CFG , cfg);return 0 ; }
drivers/net/ethernet/marvell/octeontx2/af/cgx.h +0 -1
@@ -30,7 +30,6 @@#define CMR_P2X_SEL_SHIFT 59ULL#define CMR_P2X_SEL_NIX0 1ULL#define CMR_P2X_SEL_NIX1 2ULL -#define CMR_EN BIT_ULL(55)#define DATA_PKT_TX_EN BIT_ULL(53)#define DATA_PKT_RX_EN BIT_ULL(54)#define CGX_LMAC_TYPE_SHIFT 40
drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_vxlan.c +2 -0
@@ -88,6 +88,8 @@ static int mlx5e_gen_ip_tunnel_header_vxlan(char buf[],struct udphdr *udp = (struct udphdr *)(buf);struct vxlanhdr *vxh; +if (tun_key->tun_flags &TUNNEL_VXLAN_OPT ) +return -EOPNOTSUPP ; vxh = (struct vxlanhdr *)((char *)udp +sizeof (struct udphdr )); *ip_proto =IPPROTO_UDP ;
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c +18 -25
68 lines not on this page · raw message
drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c +1 -1
@@ -599,7 +599,7 @@ static int mlx5_ptp_verify(struct ptp_clock_info *ptp, unsigned int pin,static const struct ptp_clock_info mlx5_ptp_clock_info = { .owner =THIS_MODULE , .name ="mlx5_ptp" , - .max_adj =100000000 , + .max_adj =50000000 , .n_alarm =0 , .n_ext_ts =0 , .n_per_out =0 ,
drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.c +4 -1
@@ -229,7 +229,10 @@ static int stmmac_enable(struct ptp_clock_info *ptp, }writel (acr_value, ptpaddr +PTP_ACR );mutex_unlock (&priv->aux_ts_lock); - ret =0 ; +/* wait for auxts fifo clear to finish */ + ret =readl_poll_timeout (ptpaddr +PTP_ACR , acr_value, + !(acr_value &PTP_ACR_ATSFC ), +10 ,10000 );break ;default :
drivers/nfc/pn533/usb.c +41 -3
78 lines not on this page · raw message
drivers/nvme/host/multipath.c +2 -0
@@ -329,6 +329,8 @@ static blk_qc_t nvme_ns_head_submit_bio(struct bio *bio)* pool from the original queue to allocate the bvecs from. */ blk_queue_split (&bio); +if (!bio) +return BLK_QC_T_NONE ; srcu_idx =srcu_read_lock (&head->srcu); ns =nvme_find_path (head);
drivers/pinctrl/pinctrl-amd.c +6 -4
@@ -627,13 +627,15 @@ static bool do_amd_gpio_irq_handler(int irq, void *dev_id)/* Each status bit covers four pins */ for (i =0 ; i <4 ; i++) { regval =readl (regs + i); -/* caused wake on resume context for shared IRQ */ -if (irq <0 && (regval &BIT (WAKE_STS_OFF ))) { + +if (regval &PIN_IRQ_PENDING )dev_dbg (&gpio_dev->pdev->dev, -"Waking due to GPIO %d: 0x%x" , +"GPIO %d is active: 0x%x" , irqnr + i, regval); + +/* caused wake on resume context for shared IRQ */ +if (irq <0 && (regval &BIT (WAKE_STS_OFF )))return true; - }if (!(regval &PIN_IRQ_PENDING ) || !(regval &BIT (INTERRUPT_MASK_OFF )))
drivers/platform/surface/aggregator/controller.c +3 -1
@@ -1700,8 +1700,10 @@ int ssam_request_sync(struct ssam_controller *ctrl,return status; status =ssam_request_sync_init (rqst, spec->flags); -if (status) +if (status) { +ssam_request_sync_free (rqst);return status; + }ssam_request_sync_set_resp (rqst, rsp);
drivers/platform/surface/aggregator/ssh_request_layer.c +14 -0
@@ -916,6 +916,20 @@ static void ssh_rtl_rx_command(struct ssh_ptl *p, const struct ssam_span *data)if (sshp_parse_command (dev, data, &command, &command_data))return ; +/* +* Check if the message was intended for us. If not, drop it. +* +* Note: We will need to change this to handle debug messages. On newer +* generation devices, these seem to be sent to tid_out=0x03. We as +* host can still receive them as they can be forwarded via an override +* option on SAM, but doing so does not change tid_out=0x00. +*/ +if (command->tid_out !=0x00 ) { +rtl_warn (rtl,"rtl: dropping message not intended for us (tid = %#04x)\n" , + command->tid_out); +return ; + } +if (ssh_rqid_is_event (get_unaligned_le16 (&command->rqid)))ssh_rtl_rx_event (rtl, command, &command_data);else
drivers/platform/x86/dell/dell-wmi-privacy.c +31 -10
82 lines not on this page · raw message
drivers/platform/x86/ideapad-laptop.c +6 -0
@@ -1493,6 +1493,12 @@ static const struct dmi_system_id set_fn_lock_led_list[] = { DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Legion R7000P2020H"), } }, + { + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), + DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Legion 5 15ARH05"), + } + }, {} };
drivers/platform/x86/sony-laptop.c +14 -7
@@ -1892,14 +1892,21 @@ static int sony_nc_kbd_backlight_setup(struct platform_device *pd,break ; } - ret =sony_call_snc_handle (handle, probe_base, &result); -if (ret) -return ret; +/* +* Only probe if there is a separate probe_base, otherwise the probe call +* is equivalent to __sony_nc_kbd_backlight_mode_set(0), resulting in +* the keyboard backlight being turned off. +*/ +if (probe_base) { + ret =sony_call_snc_handle (handle, probe_base, &result); +if (ret) +return ret; -if ((handle ==0x0137 && !(result &0x02 )) || - !(result &0x01 )) { -dprintk ("no backlight keyboard found\n" ); -return 0 ; +if ((handle ==0x0137 && !(result &0x02 )) || + !(result &0x01 )) { +dprintk ("no backlight keyboard found\n" ); +return 0 ; + } } kbdbl_ctl =kzalloc (sizeof (*kbdbl_ctl),GFP_KERNEL );
drivers/regulator/da9211-regulator.c +6 -5
@@ -498,6 +498,12 @@ static int da9211_i2c_probe(struct i2c_client *i2c) chip->chip_irq = i2c->irq; + ret =da9211_regulator_init (chip); +if (ret <0 ) { +dev_err (chip->dev,"Failed to initialize regulator: %d\n" , ret); +return ret; + } +if (chip->chip_irq !=0 ) { ret = devm_request_threaded_irq(chip->dev, chip->chip_irq, NULL, da9211_irq_handler,
@@ -512,11 +518,6 @@ static int da9211_i2c_probe(struct i2c_client *i2c)dev_warn (chip->dev,"No IRQ configured\n" ); } - ret =da9211_regulator_init (chip); - -if (ret <0 ) -dev_err (chip->dev,"Failed to initialize regulator: %d\n" , ret); -return ret; }
drivers/s390/block/dcssblk.c +2 -0
@@ -866,6 +866,8 @@ dcssblk_submit_bio(struct bio *bio)unsigned long bytes_done;blk_queue_split (&bio); +if (!bio) +return BLK_QC_T_NONE ; bytes_done =0 ; dev_info = bio->bi_bdev->bd_disk->private_data;
drivers/scsi/mpi3mr/Makefile +1 -1
@@ -1,4 +1,4 @@ # mpi3mr makefile -obj-m += mpi3mr.o +obj-$(CONFIG_SCSI_MPI3MR) += mpi3mr.o mpi3mr-y += mpi3mr_os.o \ mpi3mr_fw.o \
drivers/scsi/mpt3sas/mpt3sas_base.c +3 -15
@@ -2594,12 +2594,8 @@ _base_check_pcie_native_sgl(struct MPT3SAS_ADAPTER *ioc,/* Get the SG list pointer and info. */ sges_left =scsi_dma_map (scmd); -if (sges_left <0 ) { -sdev_printk (KERN_ERR , scmd->device, -"scsi_dma_map failed: request for %d bytes!\n" , -scsi_bufflen (scmd)); +if (sges_left <0 )return 1 ; - }/* Check if we need to build a native SG list. */ if (!base_is_prp_possible(ioc, pcie_device,
@@ -2706,12 +2702,8 @@ _base_build_sg_scmd(struct MPT3SAS_ADAPTER *ioc, sg_scmd =scsi_sglist (scmd); sges_left =scsi_dma_map (scmd); -if (sges_left <0 ) { -sdev_printk (KERN_ERR , scmd->device, -"scsi_dma_map failed: request for %d bytes!\n" , -scsi_bufflen (scmd)); +if (sges_left <0 )return -ENOMEM ; - } sg_local = &mpi_request->SGL; sges_in_segment = ioc->max_sges_in_main_message;
@@ -2854,12 +2846,8 @@ _base_build_sg_scmd_ieee(struct MPT3SAS_ADAPTER *ioc, sg_scmd =scsi_sglist (scmd); sges_left =scsi_dma_map (scmd); -if (sges_left <0 ) { -sdev_printk (KERN_ERR , scmd->device, -"scsi_dma_map failed: request for %d bytes!\n" , -scsi_bufflen (scmd)); +if (sges_left <0 )return -ENOMEM ; - } sg_local = &mpi_request->SGL; sges_in_segment = (ioc->request_sz -
drivers/scsi/ufs/ufshcd.c +36 -2
@@ -2700,6 +2700,12 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd)if (!down_read_trylock (&hba->clk_scaling_lock))return SCSI_MLQUEUE_HOST_BUSY ; +/* +* Allows the UFS error handler to wait for prior ufshcd_queuecommand() +* calls. +*/ +rcu_read_lock (); +switch (hba->ufshcd_state) {case UFSHCD_STATE_OPERATIONAL :case UFSHCD_STATE_EH_SCHEDULED_NON_FATAL :
@@ -2766,7 +2772,10 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd) }ufshcd_send_command (hba, tag); + out: +rcu_read_unlock (); +up_read (&hba->clk_scaling_lock);if (ufs_trigger_eh ()) {
@@ -5900,6 +5909,14 @@ static inline void ufshcd_schedule_eh_work(struct ufs_hba *hba) } } +static void ufshcd_force_error_recovery (struct ufs_hba *hba) +{ +spin_lock_irq (hba->host->host_lock); + hba->force_reset = true; +ufshcd_schedule_eh_work (hba); +spin_unlock_irq (hba->host->host_lock); +} +static void ufshcd_clk_scaling_allow (struct ufs_hba *hba,bool allow) {down_write (&hba->clk_scaling_lock);
@@ -5952,8 +5969,7 @@ static void ufshcd_err_handling_prepare(struct ufs_hba *hba) }ufshcd_scsi_block_requests (hba);/* Drain ufshcd_queuecommand() */ -down_write (&hba->clk_scaling_lock); -up_write (&hba->clk_scaling_lock); +synchronize_rcu ();cancel_work_sync (&hba->eeh_work); }
@@ -8767,6 +8783,15 @@ static int __ufshcd_wl_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)if (!hba->dev_info.b_rpm_dev_flush_capable) { ret =ufshcd_set_dev_pwr_mode (hba, req_dev_pwr_mode); +if (ret && pm_op !=UFS_SHUTDOWN_PM ) { +/* +* If return err in suspend flow, IO will hang. +* Trigger error handler and break suspend for +* error recovery. +*/ +ufshcd_force_error_recovery (hba); + ret = -EBUSY ; + }if (ret) goto enable_scaling; }
@@ -8778,6 +8803,15 @@ static int __ufshcd_wl_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)*/ check_for_bkops = !ufshcd_is_ufs_dev_deepsleep (hba); ret =ufshcd_link_state_transition (hba, req_link_state, check_for_bkops); +if (ret && pm_op !=UFS_SHUTDOWN_PM ) { +/* +* If return err in suspend flow, IO will hang. +* Trigger error handler and break suspend for +* error recovery. +*/ +ufshcd_force_error_recovery (hba); + ret = -EBUSY ; + }if (ret) goto set_dev_active;
drivers/tty/hvc/hvc_xen.c +29 -17
127 lines not on this page · raw message
fs/cifs/link.c +1 -0
@@ -459,6 +459,7 @@ smb3_create_mf_symlink(unsigned int xid, struct cifs_tcon *tcon, oparms.disposition =FILE_CREATE ; oparms.fid = &fid; oparms.reconnect = false; + oparms.mode =0644 ; rc =SMB2_open (xid, &oparms, utf16_path, &oplock,NULL ,NULL ,NULL ,NULL );
include/linux/tpm_eventlog.h +2 -2
@@ -198,8 +198,8 @@ static __always_inline int __calc_tpm2_event_size(struct tcg_pcr_event2_head *ev* The loop below will unmap these fields if the log is larger than * one page, so save them here for reference: */ - count =READ_ONCE (event->count); - event_type =READ_ONCE (event->event_type); + count = event->count; + event_type = event->event_type;/* Verify that it's the log header */ if (event_header->pcr_idx != 0 ||
io_uring/io-wq.c +6 -0
@@ -1217,6 +1217,12 @@ static void io_wq_cancel_tw_create(struct io_wq *wq) worker = container_of(cb, struct io_worker, create_work);io_worker_cancel_cb (worker); +/* +* Only the worker continuation helper has worker allocated and +* hence needs freeing. +*/ +if (cb->func == create_worker_cont) +kfree (worker); } }
io_uring/io_uring.c +16 -2
@@ -2477,12 +2477,26 @@ static void io_iopoll_complete(struct io_ring_ctx *ctx, unsigned int *nr_events,io_init_req_batch (&rb);while (!list_empty (done)) { +struct io_uring_cqe *cqe; +unsigned cflags; + req = list_first_entry(done, struct io_kiocb, inflight_entry);list_del (&req->inflight_entry); - -io_fill_cqe_req (req, req->result,io_put_rw_kbuf (req)); + cflags =io_put_rw_kbuf (req); (*nr_events)++; + cqe =io_get_cqe (ctx); +if (cqe) { +WRITE_ONCE (cqe->user_data, req->user_data); +WRITE_ONCE (cqe->res, req->result); +WRITE_ONCE (cqe->flags, cflags); + }else { +spin_lock (&ctx->completion_lock); +io_cqring_event_overflow (ctx, req->user_data, + req->result, cflags); +spin_unlock (&ctx->completion_lock); + } +if (req_ref_put_and_test (req))io_req_free_batch (&rb, req, &ctx->submit_state); }
kernel/sched/core.c +33 -4
@@ -2501,14 +2501,43 @@ void do_set_cpus_allowed(struct task_struct *p, const struct cpumask *new_mask)int dup_user_cpus_ptr (struct task_struct *dst,struct task_struct *src,int node) { -if (!src->user_cpus_ptr) +cpumask_t *user_mask; +unsigned long flags; + +/* +* Always clear dst->user_cpus_ptr first as their user_cpus_ptr's +* may differ by now due to racing. +*/ + dst->user_cpus_ptr =NULL ; + +/* +* This check is racy and losing the race is a valid situation. +* It is not worth the extra overhead of taking the pi_lock on +* every fork/clone. +*/ +if (data_race (!src->user_cpus_ptr))return 0 ; - dst->user_cpus_ptr =kmalloc_node (cpumask_size (),GFP_KERNEL , node); -if (!dst->user_cpus_ptr) + user_mask =kmalloc_node (cpumask_size (),GFP_KERNEL , node); +if (!user_mask)return -ENOMEM ; -cpumask_copy (dst->user_cpus_ptr, src->user_cpus_ptr); +/* +* Use pi_lock to protect content of user_cpus_ptr +* +* Though unlikely, user_cpus_ptr can be reset to NULL by a concurrent +* do_set_cpus_allowed(). +*/ +raw_spin_lock_irqsave (&src->pi_lock, flags); +if (src->user_cpus_ptr) { +swap (dst->user_cpus_ptr, user_mask); +cpumask_copy (dst->user_cpus_ptr, src->user_cpus_ptr); + } +raw_spin_unlock_irqrestore (&src->pi_lock, flags); + +if (unlikely (user_mask)) +kfree (user_mask); +return 0 ; }
mm/memblock.c +7 -1
@@ -1615,7 +1615,13 @@ void __init __memblock_free_late(phys_addr_t base, phys_addr_t size) end =PFN_DOWN (base + size);for (; cursor < end; cursor++) { -memblock_free_pages (pfn_to_page (cursor), cursor,0 ); +/* +* Reserved pages are always initialized by the end of +* memblock_free_all() (by memmap_init() and, if deferred +* initialization is enabled, memmap_init_reserved_pages()), so +* these pages can be released directly to the buddy allocator. +*/ +__free_pages_core (pfn_to_page (cursor),0 );totalram_pages_inc (); } }
net/ipv6/raw.c +4 -0
@@ -539,6 +539,7 @@ static int rawv6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,static int rawv6_push_pending_frames (struct sock *sk,struct flowi6 *fl6,struct raw6_sock *rp) { +struct ipv6_txoptions *opt;struct sk_buff *skb;int err =0 ;int offset;
@@ -556,6 +557,9 @@ static int rawv6_push_pending_frames(struct sock *sk, struct flowi6 *fl6, offset = rp->offset; total_len =inet_sk (sk)->cork.base.length; + opt =inet6_sk (sk)->cork.opt; + total_len -= opt ? opt->opt_flen :0 ; +if (offset >= total_len -1 ) { err = -EINVAL ;ip6_flush_pending_frames (sk);
net/netfilter/ipset/ip_set_bitmap_ip.c +2 -2
@@ -308,8 +308,8 @@ bitmap_ip_create(struct net *net, struct ip_set *set, struct nlattr *tb[],return -IPSET_ERR_BITMAP_RANGE ;pr_debug ("mask_bits %u, netmask %u\n" , mask_bits, netmask); - hosts =2 << (32 - netmask -1 ); - elements =2 << (netmask - mask_bits -1 ); + hosts =2U << (32 - netmask -1 ); + elements =2UL << (netmask - mask_bits -1 ); }if (elements >IPSET_BITMAP_MAX_RANGE +1 )return -IPSET_ERR_BITMAP_RANGE_SIZE ;
net/netfilter/nft_payload.c +1 -1
@@ -63,7 +63,7 @@ nft_payload_copy_vlan(u32 *d, const struct sk_buff *skb, u8 offset, u8 len)return false;if (offset + len >VLAN_ETH_HLEN + vlan_hlen) - ethlen -= offset + len -VLAN_ETH_HLEN + vlan_hlen; + ethlen -= offset + len -VLAN_ETH_HLEN - vlan_hlen;memcpy (dst_u8, vlanh + offset - vlan_hlen, ethlen);
net/sched/act_mpls.c +7 -1
@@ -133,6 +133,11 @@ static int valid_label(const struct nlattr *attr, {const u32 *label =nla_data (attr); +if (nla_len (attr) !=sizeof (*label)) { +NL_SET_ERR_MSG_MOD (extack,"Invalid MPLS label length" ); +return -EINVAL ; + } +if (*label & ~MPLS_LABEL_MASK || *label ==MPLS_LABEL_IMPLNULL ) {NL_SET_ERR_MSG_MOD (extack,"MPLS label out of range" );return -EINVAL ;
@@ -144,7 +149,8 @@ static int valid_label(const struct nlattr *attr,static const struct nla_policy mpls_policy[TCA_MPLS_MAX +1 ] = { [TCA_MPLS_PARMS ] =NLA_POLICY_EXACT_LEN (sizeof (struct tc_mpls )), [TCA_MPLS_PROTO ] = { .type =NLA_U16 }, - [TCA_MPLS_LABEL ] =NLA_POLICY_VALIDATE_FN (NLA_U32 , valid_label), + [TCA_MPLS_LABEL ] =NLA_POLICY_VALIDATE_FN (NLA_BINARY , + valid_label), [TCA_MPLS_TC ] =NLA_POLICY_RANGE (NLA_U8 ,0 ,7 ), [TCA_MPLS_TTL ] =NLA_POLICY_MIN (NLA_U8 ,1 ), [TCA_MPLS_BOS ] =NLA_POLICY_RANGE (NLA_U8 ,0 ,1 ),
net/tipc/node.c +8 -4
@@ -1179,8 +1179,9 @@ void tipc_node_check_dest(struct net *net, u32 addr,bool addr_match = false;bool sign_match = false;bool link_up = false; +bool link_is_reset = false;bool accept_addr = false; -bool reset = true; +bool reset = false;char *if_name;unsigned long intv;u16 session;
@@ -1200,14 +1201,14 @@ void tipc_node_check_dest(struct net *net, u32 addr,/* Prepare to validate requesting node's signature and media address */ l = le->link; link_up = l &&tipc_link_is_up (l); + link_is_reset = l &&tipc_link_is_reset (l); addr_match = l && !memcmp (&le->maddr, maddr,sizeof (*maddr)); sign_match = (signature == n->signature);/* These three flags give us eight permutations: */ if (sign_match && addr_match && link_up) { -/* All is fine. Do nothing. */ - reset = false; +/* All is fine. Ignore requests. */ /* Peer node is not a container/local namespace */ if (!n->peer_hash_mix) n->peer_hash_mix = hash_mixes;
@@ -1232,6 +1233,7 @@ void tipc_node_check_dest(struct net *net, u32 addr,*/ accept_addr = true; *respond = true; + reset = true; }else if (!sign_match && addr_match && link_up) {/* Peer node rebooted. Two possibilities: * - Delayed re-discovery; this link endpoint has already
@@ -1263,6 +1265,7 @@ void tipc_node_check_dest(struct net *net, u32 addr, n->signature = signature; accept_addr = true; *respond = true; + reset = true; }if (!accept_addr)
@@ -1291,6 +1294,7 @@ void tipc_node_check_dest(struct net *net, u32 addr,tipc_link_fsm_evt (l,LINK_RESET_EVT );if (n->state ==NODE_FAILINGOVER )tipc_link_fsm_evt (l,LINK_FAILOVER_BEGIN_EVT ); + link_is_reset =tipc_link_is_reset (l); le->link = l; n->link_cnt++;tipc_node_calculate_timer (n, l);
@@ -1303,7 +1307,7 @@ void tipc_node_check_dest(struct net *net, u32 addr,memcpy (&le->maddr, maddr,sizeof (*maddr)); exit:tipc_node_write_unlock (n); -if (reset && l && !tipc_link_is_reset (l)) +if (reset && !link_is_reset)tipc_node_link_down (n, b->identity, false);tipc_node_put (n); }
sound/core/control_led.c +2 -3
@@ -530,12 +530,11 @@ static ssize_t set_led_id(struct snd_ctl_led_card *led_card, const char *buf, si bool attach) {char buf2[256 ], *s, *os; -size_t len =max (sizeof (s) -1 , count);struct snd_ctl_elem_id id;int err; -strncpy (buf2, buf, len); - buf2[len] ='\0' ; +if (strscpy (buf2, buf,sizeof (buf2)) <0 ) +return -E2BIG ;memset (&id,0 ,sizeof (id)); id.iface =SNDRV_CTL_ELEM_IFACE_MIXER ; s = buf2;
sound/pci/hda/patch_realtek.c +39 -14
107 lines not on this page · raw message
sound/soc/codecs/wm8904.c +7 -0
@@ -697,6 +697,7 @@ static int out_pga_event(struct snd_soc_dapm_widget *w,int dcs_mask;int dcs_l, dcs_r;int dcs_l_reg, dcs_r_reg; +int an_out_reg;int timeout;int pwr_reg;
@@ -712,6 +713,7 @@ static int out_pga_event(struct snd_soc_dapm_widget *w, dcs_mask =WM8904_DCS_ENA_CHAN_0 |WM8904_DCS_ENA_CHAN_1 ; dcs_r_reg =WM8904_DC_SERVO_8 ; dcs_l_reg =WM8904_DC_SERVO_9 ; + an_out_reg =WM8904_ANALOGUE_OUT1_LEFT ; dcs_l =0 ; dcs_r =1 ;break ;
@@ -720,6 +722,7 @@ static int out_pga_event(struct snd_soc_dapm_widget *w, dcs_mask =WM8904_DCS_ENA_CHAN_2 |WM8904_DCS_ENA_CHAN_3 ; dcs_r_reg =WM8904_DC_SERVO_6 ; dcs_l_reg =WM8904_DC_SERVO_7 ; + an_out_reg =WM8904_ANALOGUE_OUT2_LEFT ; dcs_l =2 ; dcs_r =3 ;break ;
@@ -792,6 +795,10 @@ static int out_pga_event(struct snd_soc_dapm_widget *w,snd_soc_component_update_bits (component, reg,WM8904_HPL_ENA_OUTP |WM8904_HPR_ENA_OUTP ,WM8904_HPL_ENA_OUTP |WM8904_HPR_ENA_OUTP ); + +/* Update volume, requires PGA to be powered */ + val =snd_soc_component_read (component, an_out_reg); +snd_soc_component_write (component, an_out_reg, val);break ;case SND_SOC_DAPM_POST_PMU :
sound/soc/qcom/lpass-cpu.c +3 -2
@@ -851,10 +851,11 @@ static void of_lpass_cpu_parse_dai_data(struct device *dev, struct lpass_data *data) {struct device_node *node; -int ret, id; +int ret, i, id;/* Allow all channels by default for backwards compatibility */ -for (id =0 ; id < data->variant->num_dai; id++) { +for (i =0 ; i < data->variant->num_dai; i++) { + id = data->variant->dai_driver[i].id; data->mi2s_playback_sd_mode[id] =LPAIF_I2SCTL_MODE_8CH ; data->mi2s_capture_sd_mode[id] =LPAIF_I2SCTL_MODE_8CH ; }
sound/usb/pcm.c +9 -2
@@ -525,6 +525,8 @@ static int snd_usb_hw_params(struct snd_pcm_substream *substream,if (snd_usb_endpoint_compatible (chip, subs->data_endpoint, fmt, hw_params)) goto unlock; +if (stop_endpoints (subs, false)) +sync_pending_stops (subs);close_endpoints (chip, subs); }
@@ -907,8 +909,13 @@ get_sync_ep_from_substream(struct snd_usb_substream *subs)continue ;/* for the implicit fb, check the sync ep as well */ ep =snd_usb_get_endpoint (chip, fp->sync_ep); -if (ep && ep->cur_audiofmt) -return ep; +if (ep && ep->cur_audiofmt) { +/* ditto, if the sync (data) ep is used by others, +* this stream is restricted by the sync ep +*/ +if (ep != subs->sync_endpoint || ep->opened >1 ) +return ep; + } }return NULL ; }
tools/include/nolibc/arch-aarch64.h new file +199 -0
199 lines not on this page · raw message
tools/include/nolibc/arch-arm.h new file +204 -0
84 lines not on this page · raw message
tools/include/nolibc/arch-i386.h new file +196 -0
196 lines not on this page · raw message
tools/include/nolibc/arch-mips.h new file +217 -0
217 lines not on this page · raw message
tools/include/nolibc/arch-riscv.h new file +204 -0
204 lines not on this page · raw message
tools/include/nolibc/arch-x86_64.h new file +215 -0
215 lines not on this page · raw message
tools/include/nolibc/nolibc.h +8 -1323
1,331 lines not on this page · raw message
tools/include/nolibc/std.h new file +49 -0
49 lines not on this page · raw message
tools/include/nolibc/types.h new file +133 -0
133 lines not on this page · raw message
tools/testing/selftests/kvm/rseq_test.c +1 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/af_unix/test_unix_oob.c +1 -1
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.