Linux 6.6.92
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.6.92 kernel.
All users of the 6.6 kernel series must upgrade.
The updated 6.6.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.6.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/arm64/net/bpf_jit_comp.c | 12 arch/loongarch/Makefile | 2 arch/loongarch/include/asm/ptrace.h | 2 arch/loongarch/include/asm/uprobes.h | 1 arch/loongarch/kernel/kfpu.c | 22 arch/loongarch/kernel/time.c | 2 arch/loongarch/kernel/uprobes.c | 11 arch/loongarch/power/hibernate.c | 3 arch/x86/kernel/alternative.c | 17 arch/x86/kvm/smm.c | 1 arch/x86/kvm/svm/svm.c | 19 block/bio.c | 2 drivers/acpi/pptt.c | 11 drivers/bluetooth/btnxpuart.c | 6 drivers/char/tpm/tpm_tis_core.h | 2 drivers/dma-buf/dma-resv.c | 5 drivers/dma/dmatest.c | 6 drivers/dma/idxd/init.c | 159 ++++-- drivers/dma/ti/k3-udma.c | 10 drivers/firmware/arm_scmi/Kconfig | 14 drivers/firmware/arm_scmi/common.h | 35 + drivers/firmware/arm_scmi/driver.c | 89 +++ drivers/firmware/arm_scmi/mailbox.c | 3 drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 51 ++ drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 11 drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 29 + drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h | 3 drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c | 2 drivers/gpu/drm/amd/amdgpu/mxgpu_nv.c | 2 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 3 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c | 16 drivers/hid/hid-thrustmaster.c | 1 drivers/hid/hid-uclogic-core.c | 7 drivers/hv/channel.c | 65 -- drivers/iio/adc/ad7266.c | 2 drivers/iio/adc/ad7768-1.c | 2 drivers/iio/chemical/sps30.c | 2 drivers/infiniband/sw/rxe/rxe_cq.c | 5 drivers/net/dsa/sja1105/sja1105_main.c | 6 drivers/net/ethernet/cadence/macb_main.c | 19 drivers/net/ethernet/engleder/tsnep_hw.h | 2 drivers/net/ethernet/engleder/tsnep_main.c | 131 ++++- drivers/net/ethernet/marvell/octeontx2/af/cgx.c | 5 drivers/net/ethernet/marvell/octeontx2/nic/cn10k_macsec.c | 3 drivers/net/ethernet/mediatek/mtk_eth_soc.c | 2 drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 4 drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c | 3 drivers/net/ethernet/qlogic/qede/qede_main.c | 2 drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c | 7 drivers/net/hyperv/hyperv_net.h | 13 drivers/net/hyperv/netvsc.c | 57 ++ drivers/net/hyperv/netvsc_drv.c | 62 -- drivers/net/hyperv/rndis_filter.c | 24 - drivers/net/wireless/mediatek/mt76/dma.c | 1 drivers/nvme/host/pci.c | 4 drivers/phy/renesas/phy-rcar-gen3-usb2.c | 40 - drivers/phy/tegra/xusb-tegra186.c | 46 +- drivers/phy/tegra/xusb.c | 8 drivers/platform/x86/amd/pmc/pmc-quirks.c | 7 drivers/platform/x86/asus-wmi.c | 3 drivers/regulator/max20086-regulator.c | 7 drivers/scsi/sd_zbc.c | 6 drivers/scsi/storvsc_drv.c | 1 drivers/spi/spi-loopback-test.c | 2 drivers/spi/spi-tegra114.c | 6 drivers/usb/gadget/function/f_midi2.c | 2 drivers/usb/typec/ucsi/displayport.c | 19 drivers/usb/typec/ucsi/ucsi.c | 34 + drivers/usb/typec/ucsi/ucsi.h | 2 fs/binfmt_elf.c | 273 ++++++------ fs/btrfs/extent-tree.c | 25 - fs/nfs/nfs4proc.c | 9 fs/nfs/pnfs.c | 9 fs/smb/client/smb2pdu.c | 2 fs/udf/truncate.c | 2 fs/xattr.c | 24 + include/linux/bio.h | 1 include/linux/hyperv.h | 7 include/linux/tpm.h | 2 include/net/sch_generic.h | 15 include/sound/ump_msg.h | 4 kernel/cgroup/cpuset.c | 6 kernel/trace/trace_dynevent.c | 16 kernel/trace/trace_dynevent.h | 1 kernel/trace/trace_events_trigger.c | 2 kernel/trace/trace_functions.c | 6 kernel/trace/trace_kprobe.c | 2 kernel/trace/trace_probe.c | 9 kernel/trace/trace_uprobe.c | 2 mm/memblock.c | 9 mm/memory_hotplug.c | 6 mm/migrate.c | 16 mm/page_alloc.c | 27 - net/bluetooth/mgmt.c | 9 net/mac80211/main.c | 6 net/mctp/device.c | 65 +- net/mctp/route.c | 4 net/sched/sch_codel.c | 2 net/sched/sch_fq.c | 2 net/sched/sch_fq_codel.c | 2 net/sched/sch_fq_pie.c | 2 net/sched/sch_hhf.c | 2 net/sched/sch_pie.c | 2 net/sctp/sysctl.c | 4 net/tls/tls_strp.c | 3 samples/ftrace/sample-trace-array.c | 2 sound/core/seq/seq_clientmgr.c | 52 +- sound/core/seq/seq_ump_convert.c | 18 sound/core/seq/seq_ump_convert.h | 1 sound/pci/es1968.c | 6 sound/sh/Kconfig | 2 sound/usb/quirks.c | 4 tools/net/ynl/ethtool.py | 29 + tools/testing/selftests/exec/Makefile | 19 tools/testing/selftests/exec/load_address.c | 83 ++- tools/testing/selftests/mm/compaction_test.c | 19 118 files changed, 1290 insertions(+), 689 deletions(-)
Aaron Kling (1):
spi: tegra114: Use value to check for invalid delays
Abdun Nihaal (1):
qlcnic: fix memory leak in qlcnic_sriov_channel_cfg_cmd()
Alex Deucher (2):
Revert "drm/amd: Stop evicting resources on APUs in suspend" drm/amdgpu: fix pm notifier handling
Andrei Kuchynski (1):
usb: typec: ucsi: displayport: Fix deadlock
Andrew Jeffery (1):
net: mctp: Ensure keys maintain only one ref to corresponding dev
Bo-Cun Chen (1):
net: ethernet: mtk_eth_soc: fix typo for declaration MT7988 ESW capability
Carolina Jubran (1):
net/mlx5e: Disable MACsec offload for uplink representor profile
Christian Heusel (1):
ALSA: usb-audio: Add sample rate quirk for Audioengine D1
Claudiu Beznea (2):
phy: renesas: rcar-gen3-usb2: Fix role detection on unbind/bind
phy: renesas: rcar-gen3-usb2: Set timing registers only once
Cong Wang (1):
net_sched: Flush gso_skb list too during ->change()
Cosmin Tanislav (1):
regulator: max20086: fix invalid memory access
Cristian Marussi (3):
firmware: arm_scmi: Add helper to trace bad messages
firmware: arm_scmi: Add message dump traces for bad and unexpected replies
firmware: arm_scmi: Fix timeout checks on polling path
Dan Carpenter (1):
phy: tegra: xusb: remove a stray unlock
David Lechner (1):
iio: chemical: sps30: use aligned_s64 for timestamp
Eric Dumazet (2):
mctp: no longer rely on net->dev_index_head[]
sctp: add mutual exclusion in proc_sctp_do_udp_port()
Eric W. Biederman (1):
binfmt_elf: Support segments with 0 filesz and misaligned starts
Fedor Pchelkin (1):
wifi: mt76: disable napi on driver removal
Feng Tang (1):
selftests/mm: compaction_test: support platform with huge mount of memory
Filipe Manana (1):
btrfs: don't BUG_ON() when 0 reference count at btrfs_lookup_extent_info()
Geert Uytterhoeven (2):
spi: loopback-test: Do not split 1024-byte hexdumps
ALSA: sh: SND_AICA should depend on SH_DMA_API
Gerhard Engleder (2):
tsnep: Inline small fragments within TX descriptor
tsnep: fix timestamping with a stacked DSA driver
Greg Kroah-Hartman (1):
Linux 6.6.92
Hangbin Liu (1):
tools/net/ynl: ethtool: fix crash when Hardware Clock info is missing
Hans de Goede (1):
platform/x86: asus-wmi: Fix wlan_ctrl_by_user detection
Hariprasad Kelam (1):
octeontx2-af: Fix CGX Receive counters
Henry Martin (1):
HID: uclogic: Add NULL check in uclogic_input_configured()
Huacai Chen (3):
LoongArch: Save and restore CSR.CNTC for hibernation
LoongArch: Fix MAX_REG_OFFSET calculation
LoongArch: Explicitly specify code model in Makefile
Hyejeong Choi (1):
dma-buf: insert memory barrier before updating num_fences
Ido Schimmel (1):
mlxsw: spectrum_router: Fix use-after-free when deleting GRE net devices
Jan Kara (1):
udf: Make sure i_lenExtents is uptodate on inode eviction
Jeremy Linton (1):
ACPI: PPTT: Fix processor subtable walk
Jethro Donaldson (1):
smb: client: fix memory leak during error handling for POSIX mkdir
Jonathan Cameron (2):
iio: adc: ad7266: Fix potential timestamp alignment issue.
iio: adc: ad7768-1: Fix insufficient alignment of timestamp.
Kees Cook (8):
binfmt_elf: elf_bss no longer used by load_elf_binary()
binfmt_elf: Leave a gap between .bss and brk
selftests/exec: Build both static and non-static load_address tests
binfmt_elf: Calculate total_size earlier
binfmt_elf: Honor PT_LOAD alignment for static PIE
binfmt_elf: Move brk for static PIE even if ASLR disabled
nvme-pci: make nvme_pci_npages_prp() __always_inline
wifi: mac80211: Set n_channels after allocating struct cfg80211_scan_request
Keith Busch (1):
nvme-pci: acquire cq_poll_lock in nvme_poll_irqdisable
Kirill A. Shutemov (1):
mm/page_alloc: fix race condition in unaccepted memory handling
Li Lingfeng (1):
nfs: handle failure of nfs_get_lock_context in unlock path
Luiz Augusto von Dentz (1):
Bluetooth: MGMT: Fix MGMT_OP_ADD_DEVICE invalid device flags
Luke Parkin (2):
firmware: arm_scmi: Add support for debug metrics at the interface
firmware: arm_scmi: Track basic SCMI communication debug metrics
Ma Jun (1):
drm/amdgpu: Fix the runtime resume failure issue
Ma Ke (1):
phy: Fix error handling in tegra_xusb_port_init
Ma Wupeng (1):
hwpoison, memory_hotplug: lock folio before unmap hwpoisoned folio
Mario Limonciello (2):
drm/amd: Stop evicting resources on APUs in suspend drm/amd: Add Suspend/Hibernate notification callback support
Masami Hiramatsu (Google) (1):
tracing: probes: Fix a possible race in trace_probe_log APIs
Mathieu Othacehe (1):
net: cadence: macb: Fix a possible deadlock in macb_halt_tx.
Matt Johnston (1):
net: mctp: Don't access ifa_index when missing
Michael Kelley (5):
hv_netvsc: Use vmbus_sendpacket_mpb_desc() to send VMBus messages
hv_netvsc: Preserve contiguous PFN grouping in the page buffer array
hv_netvsc: Remove rmsg_pgcnt
Drivers: hv: Allow vmbus_sendpacket_mpb_desc() to create multiple ranges
Drivers: hv: vmbus: Remove vmbus_sendpacket_pagebuffer()
Michal Suchanek (1):
tpm: tis: Double the timeout B to 4s
Mikhail Lobanov (1):
KVM: SVM: Forcibly leave SMM mode on SHUTDOWN interception
Muhammad Usama Anjum (1):
selftests/exec: load_address: conform test to TAP format output
Nathan Chancellor (1):
net: qede: Initialize qede_ll_ops with designated initializer
Nathan Lynch (1):
dmaengine: Revert "dmaengine: dmatest: Fix dmatest waiting less when interrupted"
Neeraj Sanjay Kale (1):
Bluetooth: btnxpuart: Fix kernel panic during FW release
Nicolas Chauvet (1):
ALSA: usb-audio: Add sample rate quirk for Microdia JP001 USB Camera
Pawan Gupta (1):
x86/its: Fix build error for its_static_thunk()
Pengtao He (1):
net/tls: fix kernel panic when alloc_page failed
Peter Collingbourne (1):
bpf, arm64: Fix address emission with tag-based KASAN enabled
Peter Gonda (1):
KVM: SVM: Update SEV-ES shutdown intercepts with more metadata
Puranjay Mohan (1):
bpf, arm64: Fix trampoline for BPF_TRAMP_F_CALL_ORIG
Qasim Ijaz (1):
HID: thrustmaster: fix memory leak in thrustmaster_interrupts()
Rahul Rameshbabu (1):
tools: ynl: ethtool.py: Output timestamping statistics from tsinfo-get operation
Ronald Wahl (1):
dmaengine: ti: k3-udma: Add missing locking
Runhua He (1):
platform/x86/amd/pmc: Declare quirk_spurious_8042 for MECHREVO Wujie 14XA (GX4HRXL)
Shuai Xue (9):
dmaengine: idxd: fix memory leak in error handling path of idxd_setup_wqs
dmaengine: idxd: fix memory leak in error handling path of idxd_setup_engines
dmaengine: idxd: fix memory leak in error handling path of idxd_setup_groups
dmaengine: idxd: Add missing cleanup for early error out in idxd_setup_internals
dmaengine: idxd: Add missing cleanups in cleanup internals
dmaengine: idxd: Add missing idxd cleanup to fix memory leak in remove call
dmaengine: idxd: fix memory leak in error handling path of idxd_alloc
dmaengine: idxd: fix memory leak in error handling path of idxd_pci_probe
dmaengine: idxd: Refactor remove call with idxd_cleanup() helper
Stephen Smalley (1):
fs/xattr.c: fix simple_xattr_list to always include security.* xattrs
Steve Siwinski (1):
scsi: sd_zbc: block: Respect bio vector limits for REPORT ZONES buffer
Steven Rostedt (1):
tracing: samples: Initialize trace_array_printk() with the correct function
Subbaraya Sundeep (1):
octeontx2-pf: macsec: Fix incorrect max transmit size in TX secy
Takashi Iwai (2):
ALSA: seq: Fix delivery of UMP events to group ports
ALSA: ump: Fix a typo of snd_ump_stream_msg_device_info
Tianyang Zhang (1):
LoongArch: Prevent cond_resched() occurring within kernel-fpu
Tiezhu Yang (2):
LoongArch: uprobes: Remove user_{en,dis}able_single_step()
LoongArch: uprobes: Remove redundant code about resume_era
Tom Lendacky (1):
memblock: Accept allocated memory before use in memblock_double_array()
Trond Myklebust (1):
NFSv4/pnfs: Reset the layout state after a layoutreturn
Vladimir Oltean (1):
net: dsa: sja1105: discard incoming frames in BR_STATE_LISTENING
Waiman Long (1):
cgroup/cpuset: Extend kthread_is_per_cpu() check to all PF_NO_SETAFFINITY tasks
Wayne Chang (1):
phy: tegra: xusb: Use a bitmask for UTMI pad power state tracking
Wayne Lin (2):
drm/amd/display: Correct the reply value when AUX write incomplete drm/amd/display: Avoid flooding unnecessary info messages
Wentao Liang (1):
ALSA: es1968: Add error handling for snd_pcm_hw_constraint_pow2()
Yemike Abhilash Chandra (1):
dmaengine: ti: k3-udma: Use cap_mask directly from dma_device structure instead of a local copy
Zhigang Luo (1):
drm/amdgpu: trigger flr_work if reading pf2vf data failed
Zhu Yanjun (1):
RDMA/rxe: Fix slab-use-after-free Read in rxe_queue_cleanup bug
Zi Yan (1):
mm/migrate: correct nr_failed in migrate_pages_sync()
pengdonglin (2):
ftrace: Fix preemption accounting for stacktrace trigger command
ftrace: Fix preemption accounting for stacktrace filter command
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 6 -SUBLEVEL = 91 +SUBLEVEL = 92 EXTRAVERSION = NAME = Pinguïn Aangedreven
arch/arm64/net/bpf_jit_comp.c +10 -2
@@ -2001,7 +2001,11 @@ static int prepare_trampoline(struct jit_ctx *ctx, struct bpf_tramp_image *im,emit (A64_STR64I (A64_R (20 ),A64_SP , regs_off +8 ), ctx);if (flags &BPF_TRAMP_F_CALL_ORIG ) { -emit_addr_mov_i64 (A64_R (0 ), (const u64 )im, ctx); +/* for the first pass, assume the worst case */ +if (!ctx->image) + ctx->idx +=4 ; +else +emit_a64_mov_i64 (A64_R (0 ), (const u64 )im, ctx);emit_call ((const u64 )__bpf_tramp_enter, ctx); }
@@ -2045,7 +2049,11 @@ static int prepare_trampoline(struct jit_ctx *ctx, struct bpf_tramp_image *im,if (flags &BPF_TRAMP_F_CALL_ORIG ) { im->ip_epilogue = ctx->image + ctx->idx; -emit_addr_mov_i64 (A64_R (0 ), (const u64 )im, ctx); +/* for the first pass, assume the worst case */ +if (!ctx->image) + ctx->idx +=4 ; +else +emit_a64_mov_i64 (A64_R (0 ), (const u64 )im, ctx);emit_call ((const u64 )__bpf_tramp_exit, ctx); }
arch/loongarch/Makefile +1 -1
@@ -43,7 +43,7 @@ endif ifdef CONFIG_64BIT ld-emul = $(64bit-emul) -cflags-y += -mabi=lp64s +cflags-y += -mabi=lp64s -mcmodel=normal endif cflags-y += -pipe -msoft-float
arch/loongarch/include/asm/ptrace.h +1 -1
@@ -55,7 +55,7 @@ static inline void instruction_pointer_set(struct pt_regs *regs, unsigned long v/* Query offset/name of register from its name/offset */ extern int regs_query_register_offset (const char *name); -#define MAX_REG_OFFSET (offsetof(struct pt_regs, __last)) +#define MAX_REG_OFFSET (offsetof(struct pt_regs, __last) - sizeof(unsigned long))/** * regs_get_register() - get register value from its offset
arch/loongarch/include/asm/uprobes.h +0 -1
@@ -15,7 +15,6 @@ typedef u32 uprobe_opcode_t;#define UPROBE_XOLBP_INSN larch_insn_gen_break(BRK_UPROBE_XOLBP)struct arch_uprobe { -unsigned long resume_era;u32 insn[2 ];u32 ixol[2 ];bool simulate;
arch/loongarch/kernel/kfpu.c +20 -2
@@ -18,11 +18,28 @@ static unsigned int euen_mask = CSR_EUEN_FPEN; static DEFINE_PER_CPU(bool, in_kernel_fpu); static DEFINE_PER_CPU(unsigned int, euen_current); +static inline void fpregs_lock (void ) +{ +if (IS_ENABLED (CONFIG_PREEMPT_RT )) +preempt_disable (); +else +local_bh_disable (); +} + +static inline void fpregs_unlock (void ) +{ +if (IS_ENABLED (CONFIG_PREEMPT_RT )) +preempt_enable (); +else +local_bh_enable (); +} +void kernel_fpu_begin (void ) {unsigned int *euen_curr; -preempt_disable (); +if (!irqs_disabled ()) +fpregs_lock ();WARN_ON (this_cpu_read (in_kernel_fpu));
@@ -73,7 +90,8 @@ void kernel_fpu_end(void)this_cpu_write (in_kernel_fpu, false); -preempt_enable (); +if (!irqs_disabled ()) +fpregs_unlock (); }EXPORT_SYMBOL_GPL (kernel_fpu_end);
arch/loongarch/kernel/time.c +1 -1
@@ -110,7 +110,7 @@ static unsigned long __init get_loops_per_jiffy(void)return lpj; } -static long init_offset __nosavedata; +static long init_offset;void save_counter (void ) {
arch/loongarch/kernel/uprobes.c +1 -10
@@ -42,7 +42,6 @@ int arch_uprobe_pre_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) utask->autask.saved_trap_nr = current->thread.trap_nr; current->thread.trap_nr =UPROBE_TRAP_NR ;instruction_pointer_set (regs, utask->xol_vaddr); -user_enable_single_step (current);return 0 ; }
@@ -53,13 +52,7 @@ int arch_uprobe_post_xol(struct arch_uprobe *auprobe, struct pt_regs *regs)WARN_ON_ONCE (current->thread.trap_nr !=UPROBE_TRAP_NR ); current->thread.trap_nr = utask->autask.saved_trap_nr; - -if (auprobe->simulate) -instruction_pointer_set (regs, auprobe->resume_era); -else -instruction_pointer_set (regs, utask->vaddr +LOONGARCH_INSN_SIZE ); - -user_disable_single_step (current); +instruction_pointer_set (regs, utask->vaddr +LOONGARCH_INSN_SIZE );return 0 ; }
@@ -70,7 +63,6 @@ void arch_uprobe_abort_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) current->thread.trap_nr = utask->autask.saved_trap_nr;instruction_pointer_set (regs, utask->vaddr); -user_disable_single_step (current); }bool arch_uprobe_xol_was_trapped (struct task_struct *t)
@@ -90,7 +82,6 @@ bool arch_uprobe_skip_sstep(struct arch_uprobe *auprobe, struct pt_regs *regs) insn.word = auprobe->insn[0 ];arch_simulate_insn (insn, regs); - auprobe->resume_era = regs->csr_era;return true; }
arch/loongarch/power/hibernate.c +3 -0
@@ -2,6 +2,7 @@#include <asm/fpu.h> #include <asm/loongson.h> #include <asm/sections.h> +#include <asm/time.h> #include <asm/tlbflush.h> #include <linux/suspend.h>
@@ -14,6 +15,7 @@ struct pt_regs saved_regs;void save_processor_state (void ) { +save_counter (); saved_crmd =csr_read32 (LOONGARCH_CSR_CRMD ); saved_prmd =csr_read32 (LOONGARCH_CSR_PRMD ); saved_euen =csr_read32 (LOONGARCH_CSR_EUEN );
@@ -26,6 +28,7 @@ void save_processor_state(void)void restore_processor_state (void ) { +sync_counter ();csr_write32 (saved_crmd,LOONGARCH_CSR_CRMD );csr_write32 (saved_prmd,LOONGARCH_CSR_PRMD );csr_write32 (saved_euen,LOONGARCH_CSR_EUEN );
arch/x86/kernel/alternative.c +9 -8
@@ -730,7 +730,15 @@ static bool cpu_wants_indirect_its_thunk_at(unsigned long addr, int reg)/* Lower-half of the cacheline? */ return !(addr & 0x20); } -#endif + +u8 *its_static_thunk (int reg) +{ +u8 *thunk = __x86_indirect_its_thunk_array[reg]; + +return thunk; +} + +#endif /* CONFIG_MITIGATION_ITS */ /* * Rewrite the compiler generated retpoline thunk calls.
@@ -1449,13 +1457,6 @@ static void __apply_fineibt(s32 *start_retpoline, s32 *end_retpoline,static void poison_cfi (void *addr) { }#endif -u8 *its_static_thunk (int reg) -{ -u8 *thunk = __x86_indirect_its_thunk_array[reg]; - -return thunk; -} -#endif void apply_fineibt(s32 *start_retpoline, s32 *end_retpoline,
arch/x86/kvm/smm.c +1 -0
@@ -131,6 +131,7 @@ void kvm_smm_changed(struct kvm_vcpu *vcpu, bool entering_smm)kvm_mmu_reset_context (vcpu); } +EXPORT_SYMBOL_GPL (kvm_smm_changed);void process_smi (struct kvm_vcpu *vcpu) {
arch/x86/kvm/svm/svm.c +11 -8
@@ -2211,12 +2211,6 @@ static int shutdown_interception(struct kvm_vcpu *vcpu)struct kvm_run *kvm_run = vcpu->run;struct vcpu_svm *svm =to_svm (vcpu); -/* -* The VM save area has already been encrypted so it -* cannot be reinitialized - just terminate. -*/ -if (sev_es_guest (vcpu->kvm)) -return -EINVAL ;/* * VMCB is undefined after a SHUTDOWN intercept. INIT the vCPU to put
@@ -2225,9 +2219,18 @@ static int shutdown_interception(struct kvm_vcpu *vcpu)* userspace. At a platform view, INIT is acceptable behavior as * there exist bare metal platforms that automatically INIT the CPU * in response to shutdown. +* +* The VM save area for SEV-ES guests has already been encrypted so it +* cannot be reinitialized, i.e. synthesizing INIT is futile. */ -clear_page (svm->vmcb); -kvm_vcpu_reset (vcpu, true); +if (!sev_es_guest (vcpu->kvm)) { +clear_page (svm->vmcb); +#ifdef CONFIG_KVM_SMM +if (is_smm (vcpu)) +kvm_smm_changed (vcpu, false); +#endif +kvm_vcpu_reset (vcpu, true); + } kvm_run->exit_reason =KVM_EXIT_SHUTDOWN ;return 0 ;
block/bio.c +1 -1
@@ -600,7 +600,7 @@ struct bio *bio_kmalloc(unsigned short nr_vecs, gfp_t gfp_mask) {struct bio *bio; -if (nr_vecs >UIO_MAXIOV ) +if (nr_vecs >BIO_MAX_INLINE_VECS )return NULL ;return kmalloc (struct_size (bio, bi_inline_vecs, nr_vecs), gfp_mask); }
drivers/acpi/pptt.c +8 -3
@@ -231,16 +231,18 @@ static int acpi_pptt_leaf_node(struct acpi_table_header *table_hdr, sizeof(struct acpi_table_pptt)); proc_sz =sizeof (struct acpi_pptt_processor ); -while ((unsigned long )entry + proc_sz < table_end) { +/* ignore subtable types that are smaller than a processor node */ +while ((unsigned long )entry + proc_sz <= table_end) { cpu_node = (struct acpi_pptt_processor *)entry; +if (entry->type ==ACPI_PPTT_TYPE_PROCESSOR && cpu_node->parent == node_entry)return 0 ;if (entry->length ==0 )return 0 ; + entry = ACPI_ADD_PTR(struct acpi_subtable_header, entry, entry->length); - }return 1 ; }
@@ -273,15 +275,18 @@ static struct acpi_pptt_processor *acpi_find_processor_node(struct acpi_table_he proc_sz =sizeof (struct acpi_pptt_processor );/* find the processor structure associated with this cpuid */ -while ((unsigned long )entry + proc_sz < table_end) { +while ((unsigned long )entry + proc_sz <= table_end) { cpu_node = (struct acpi_pptt_processor *)entry;if (entry->length ==0 ) {pr_warn ("Invalid zero length subtable\n" );break ; } +/* entry->length may not equal proc_sz, revalidate the processor structure length */ if (entry->type ==ACPI_PPTT_TYPE_PROCESSOR && acpi_cpu_id == cpu_node->acpi_processor_id && + (unsigned long )entry + entry->length <= table_end && + entry->length == proc_sz + cpu_node->number_of_priv_resources *sizeof (u32) &&acpi_pptt_leaf_node (table_hdr, cpu_node)) {return (struct acpi_pptt_processor *)entry; }
drivers/bluetooth/btnxpuart.c +4 -2
@@ -601,8 +601,10 @@ static int nxp_download_firmware(struct hci_dev *hdev) &nxpdev->tx_state), msecs_to_jiffies(60000)); -release_firmware (nxpdev->fw); -memset (nxpdev->fw_name,0 ,sizeof (nxpdev->fw_name)); +if (nxpdev->fw &&strlen (nxpdev->fw_name)) { +release_firmware (nxpdev->fw); +memset (nxpdev->fw_name,0 ,sizeof (nxpdev->fw_name)); + }if (err ==0 ) { bt_dev_err(hdev, "FW Download Timeout. offset: %d",
drivers/char/tpm/tpm_tis_core.h +1 -1
@@ -54,7 +54,7 @@ enum tis_int_flags {enum tis_defaults {TIS_MEM_LEN =0x5000 ,TIS_SHORT_TIMEOUT =750 ,/* ms */ -TIS_LONG_TIMEOUT =2000 ,/* 2 sec */ +TIS_LONG_TIMEOUT =4000 ,/* 4 secs */ TIS_TIMEOUT_MIN_ATML =14700 ,/* usecs */ TIS_TIMEOUT_MAX_ATML =15000 ,/* usecs */ };
drivers/dma-buf/dma-resv.c +3 -2
@@ -313,8 +313,9 @@ void dma_resv_add_fence(struct dma_resv *obj, struct dma_fence *fence, count++;dma_resv_list_set (fobj, i, fence, usage); -/* pointer update must be visible before we extend the num_fences */ -smp_store_mb (fobj->num_fences, count); +/* fence update must be visible before we extend the num_fences */ +smp_wmb (); + fobj->num_fences = count; }EXPORT_SYMBOL (dma_resv_add_fence);
drivers/dma/dmatest.c +3 -3
@@ -827,9 +827,9 @@ static int dmatest_func(void *data) }else {dma_async_issue_pending (chan); -wait_event_timeout (thread->done_wait, - done->done, -msecs_to_jiffies (params->timeout)); +wait_event_freezable_timeout (thread->done_wait, + done->done, +msecs_to_jiffies (params->timeout)); status =dma_async_is_tx_complete (chan, cookie,NULL ,NULL );
drivers/dma/idxd/init.c +113 -46
299 lines not on this page · raw message
drivers/dma/ti/k3-udma.c +8 -2
@@ -1091,8 +1091,11 @@ static void udma_check_tx_completion(struct work_struct *work)u32 residue_diff;ktime_t time_diff;unsigned long delay; +unsigned long flags;while (1 ) { +spin_lock_irqsave (&uc->vc.lock, flags); +if (uc->desc) {/* Get previous residue and time stamp */ residue_diff = uc->tx_drain.residue;
@@ -1127,6 +1130,8 @@ static void udma_check_tx_completion(struct work_struct *work)break ; } +spin_unlock_irqrestore (&uc->vc.lock, flags); +usleep_range (ktime_to_us (delay),ktime_to_us (delay) +10 );continue ;
@@ -1143,6 +1148,8 @@ static void udma_check_tx_completion(struct work_struct *work)break ; } + +spin_unlock_irqrestore (&uc->vc.lock, flags); }static irqreturn_t udma_ring_irq_handler (int irq,void *data)
@@ -4214,7 +4221,6 @@ static struct dma_chan *udma_of_xlate(struct of_phandle_args *dma_spec, struct of_dma *ofdma) {struct udma_dev *ud = ofdma->of_dma_data; -dma_cap_mask_t mask = ud->ddev.cap_mask;struct udma_filter_param filter_param;struct dma_chan *chan;
@@ -4246,7 +4252,7 @@ static struct dma_chan *udma_of_xlate(struct of_phandle_args *dma_spec, } } - chan =__dma_request_channel (&mask, udma_dma_filter_fn, &filter_param, + chan =__dma_request_channel (&ud->ddev.cap_mask, udma_dma_filter_fn, &filter_param, ofdma->of_node);if (!chan) {dev_err (ud->dev,"get channel fail in %s.\n" , __func__);
drivers/firmware/arm_scmi/Kconfig +14 -0
@@ -55,6 +55,20 @@ config ARM_SCMI_RAW_MODE_SUPPORT_COEX operate normally, thing which could make an SCMI test suite using the SCMI Raw mode support unreliable. If unsure, say N. +config ARM_SCMI_DEBUG_COUNTERS + bool "Enable SCMI communication debug metrics tracking" + select ARM_SCMI_NEED_DEBUGFS + depends on DEBUG_FS + default n + help + Enables tracking of some key communication metrics for debug + purposes. It may track metrics like how many messages were sent + or received, were there any failures, what kind of failures, ..etc. + + Enable this option to create a new debugfs directory which contains + such useful debug counters. This can be helpful for debugging and + SCMI monitoring. + config ARM_SCMI_HAVE_TRANSPORT bool help
drivers/firmware/arm_scmi/common.h +35 -0
@@ -303,6 +303,41 @@ extern const struct scmi_desc scmi_optee_desc;void scmi_rx_callback (struct scmi_chan_info *cinfo,u32 msg_hdr,void *priv); +enum debug_counters { +SENT_OK , +SENT_FAIL , +SENT_FAIL_POLLING_UNSUPPORTED , +SENT_FAIL_CHANNEL_NOT_FOUND , +RESPONSE_OK , +NOTIFICATION_OK , +DELAYED_RESPONSE_OK , +XFERS_RESPONSE_TIMEOUT , +XFERS_RESPONSE_POLLED_TIMEOUT , +RESPONSE_POLLED_OK , +ERR_MSG_UNEXPECTED , +ERR_MSG_INVALID , +ERR_MSG_NOMEM , +ERR_PROTOCOL , +SCMI_DEBUG_COUNTERS_LAST +}; + +static inline void scmi_inc_count (atomic_t *arr,int stat) +{ +if (IS_ENABLED (CONFIG_ARM_SCMI_DEBUG_COUNTERS )) +atomic_inc (&arr[stat]); +} + +enum scmi_bad_msg { +MSG_UNEXPECTED =-1 , +MSG_INVALID =-2 , +MSG_UNKNOWN =-3 , +MSG_NOMEM =-4 , +MSG_MBOX_SPURIOUS =-5 , +}; + +void scmi_bad_message_trace (struct scmi_chan_info *cinfo,u32 msg_hdr, +enum scmi_bad_msg err); +/* shmem related declarations */ struct scmi_shared_mem ;
drivers/firmware/arm_scmi/driver.c +79 -10
222 lines not on this page · raw message
drivers/firmware/arm_scmi/mailbox.c +3 -0
@@ -58,6 +58,9 @@ static void rx_callback(struct mbox_client *cl, void *m)*/ if (cl->knows_txdone && !shmem_channel_free (smbox->shmem)) {dev_warn (smbox->cinfo->dev,"Ignoring spurious A2P IRQ !\n" ); +scmi_bad_message_trace (smbox->cinfo, +shmem_read_header (smbox->shmem), +MSG_MBOX_SPURIOUS );return ; }
drivers/gpu/drm/amd/amdgpu/amdgpu.h +1 -0
@@ -788,6 +788,7 @@ struct amdgpu_device {bool need_swiotlb;bool accel_working;struct notifier_block acpi_nb; +struct notifier_block pm_nb;struct amdgpu_i2c_chan *i2c_bus[AMDGPU_MAX_I2C_BUS ];struct debugfs_blob_wrapper debugfs_vbios_blob;struct debugfs_blob_wrapper debugfs_discovery_blob;
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +46 -5
87 lines not on this page · raw message
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +1 -10
@@ -2463,7 +2463,6 @@ static int amdgpu_pmops_freeze(struct device *dev)struct amdgpu_device *adev =drm_to_adev (drm_dev);int r; - adev->in_s4 = true; r =amdgpu_device_suspend (drm_dev, true);if (r)return r;
@@ -2476,13 +2475,8 @@ static int amdgpu_pmops_freeze(struct device *dev)static int amdgpu_pmops_thaw (struct device *dev) {struct drm_device *drm_dev =dev_get_drvdata (dev); -struct amdgpu_device *adev =drm_to_adev (drm_dev); -int r; - - r =amdgpu_device_resume (drm_dev, true); - adev->in_s4 = false; -return r; +return amdgpu_device_resume (drm_dev, true); }static int amdgpu_pmops_poweroff (struct device *dev)
@@ -2495,9 +2489,6 @@ static int amdgpu_pmops_poweroff(struct device *dev)static int amdgpu_pmops_restore (struct device *dev) {struct drm_device *drm_dev =dev_get_drvdata (dev); -struct amdgpu_device *adev =drm_to_adev (drm_dev); - - adev->in_s4 = false;return amdgpu_device_resume (drm_dev, true); }
drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c +24 -5
@@ -32,6 +32,7 @@#include "amdgpu.h" #include "amdgpu_ras.h" +#include "amdgpu_reset.h" #include "vi.h" #include "soc15.h" #include "nv.h"
@@ -468,7 +469,7 @@ static int amdgpu_virt_read_pf2vf_data(struct amdgpu_device *adev)return -EINVAL ;if (pf2vf_info->size >1024 ) { -DRM_ERROR ("invalid pf2vf message size\n" ); +dev_err (adev->dev,"invalid pf2vf message size: 0x%x\n" , pf2vf_info->size);return -EINVAL ; }
@@ -479,7 +480,9 @@ static int amdgpu_virt_read_pf2vf_data(struct amdgpu_device *adev) adev->virt.fw_reserve.p_pf2vf, pf2vf_info->size, adev->virt.fw_reserve.checksum_key, checksum);if (checksum != checkval) { -DRM_ERROR ("invalid pf2vf message\n" ); +dev_err (adev->dev, +"invalid pf2vf message: header checksum=0x%x calculated checksum=0x%x\n" , + checksum, checkval);return -EINVAL ; }
@@ -493,7 +496,9 @@ static int amdgpu_virt_read_pf2vf_data(struct amdgpu_device *adev) adev->virt.fw_reserve.p_pf2vf, pf2vf_info->size, 0, checksum);if (checksum != checkval) { -DRM_ERROR ("invalid pf2vf message\n" ); +dev_err (adev->dev, +"invalid pf2vf message: header checksum=0x%x calculated checksum=0x%x\n" , + checksum, checkval);return -EINVAL ; }
@@ -529,7 +534,7 @@ static int amdgpu_virt_read_pf2vf_data(struct amdgpu_device *adev) ((struct amd_sriov_msg_pf2vf_info *)pf2vf_info)->uuid;break ;default : -DRM_ERROR ("invalid pf2vf version\n" ); +dev_err (adev->dev,"invalid pf2vf version: 0x%x\n" , pf2vf_info->version);return -EINVAL ; }
@@ -628,8 +633,21 @@ static void amdgpu_virt_update_vf2pf_work_item(struct work_struct *work)int ret; ret =amdgpu_virt_read_pf2vf_data (adev); -if (ret) +if (ret) { + adev->virt.vf2pf_update_retry_cnt++; +if ((adev->virt.vf2pf_update_retry_cnt >=AMDGPU_VF2PF_UPDATE_MAX_RETRY_LIMIT ) && +amdgpu_sriov_runtime (adev) && !amdgpu_in_reset (adev)) { +if (amdgpu_reset_domain_schedule (adev->reset_domain, + &adev->virt.flr_work)) +return ; +else +dev_err (adev->dev,"Failed to queue work! at %s" , __func__); + } + goto out; + } + + adev->virt.vf2pf_update_retry_cnt =0 ;amdgpu_virt_write_vf2pf_data (adev); out:
@@ -650,6 +668,7 @@ void amdgpu_virt_init_data_exchange(struct amdgpu_device *adev) adev->virt.fw_reserve.p_pf2vf =NULL ; adev->virt.fw_reserve.p_vf2pf =NULL ; adev->virt.vf2pf_update_interval_ms =0 ; + adev->virt.vf2pf_update_retry_cnt =0 ;if (adev->mman.fw_vram_usage_va && adev->mman.drv_vram_usage_va) {DRM_WARN ("Currently fw_vram and drv_vram should not have values at the same time!" );
drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h +3 -0
@@ -51,6 +51,8 @@/* tonga/fiji use this offset */ #define mmBIF_IOV_FUNC_IDENTIFIER 0x1503 +#define AMDGPU_VF2PF_UPDATE_MAX_RETRY_LIMIT 30 +enum amdgpu_sriov_vf_mode {SRIOV_VF_MODE_BARE_METAL =0 ,SRIOV_VF_MODE_ONE_VF ,
@@ -253,6 +255,7 @@ struct amdgpu_virt {/* vf2pf message */ struct delayed_work vf2pf_work;uint32_t vf2pf_update_interval_ms; +int vf2pf_update_retry_cnt;/* multimedia bandwidth config */ bool is_mm_bw_enabled;
drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c +2 -0
@@ -276,6 +276,8 @@ static void xgpu_ai_mailbox_flr_work(struct work_struct *work) timeout -=10 ; }while (timeout >1 ); +dev_warn (adev->dev,"waiting IDH_FLR_NOTIFICATION_CMPL timeout\n" ); + flr_done:atomic_set (&adev->reset_domain->in_gpu_reset,0 );up_write (&adev->reset_domain->sem);
drivers/gpu/drm/amd/amdgpu/mxgpu_nv.c +2 -0
@@ -298,6 +298,8 @@ static void xgpu_nv_mailbox_flr_work(struct work_struct *work) timeout -=10 ; }while (timeout >1 ); +dev_warn (adev->dev,"waiting IDH_FLR_NOTIFICATION_CMPL timeout\n" ); + flr_done:atomic_set (&adev->reset_domain->in_gpu_reset,0 );up_write (&adev->reset_domain->sem);
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +2 -1
@@ -11069,7 +11069,8 @@ int amdgpu_dm_process_dmub_aux_transfer_sync(/* The reply is stored in the top nibble of the command. */ payload->reply[0 ] = (adev->dm.dmub_notify->aux_reply.command >>4 ) &0xF ; -if (!payload->write && p_notify->aux_reply.length) +/*write req may receive a byte indicating partially written number as well*/ +if (p_notify->aux_reply.length)memcpy (payload->data, p_notify->aux_reply.data, p_notify->aux_reply.length);
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c +11 -5
@@ -59,6 +59,7 @@ static ssize_t dm_dp_aux_transfer(struct drm_dp_aux *aux,enum aux_return_code_type operation_result;struct amdgpu_device *adev;struct ddc_service *ddc; +uint8_t copy[16 ];if (WARN_ON (msg->size >16 ))return -E2BIG ;
@@ -74,6 +75,11 @@ static ssize_t dm_dp_aux_transfer(struct drm_dp_aux *aux, (msg->request &DP_AUX_I2C_WRITE_STATUS_UPDATE ) !=0 ; payload.defer_delay =0 ; +if (payload.write) { +memcpy (copy, msg->buffer, msg->size); + payload.data = copy; + } + result =dc_link_aux_transfer_raw (TO_DM_AUX (aux)->ddc_service, &payload, &operation_result);
@@ -97,9 +103,9 @@ static ssize_t dm_dp_aux_transfer(struct drm_dp_aux *aux,*/ if (payload.write && result >=0 ) {if (result) { -/*one byte indicating partially written bytes. Force 0 to retry*/ -drm_info (adev_to_drm (adev),"amdgpu: AUX partially written\n" ); - result =0 ; +/*one byte indicating partially written bytes*/ +drm_dbg_dp (adev_to_drm (adev),"amdgpu: AUX partially written\n" ); + result = payload.data[0 ]; }else if (!payload.reply[0 ])/*I2C_ACK|AUX_ACK*/ result = msg->size;
@@ -124,11 +130,11 @@ static ssize_t dm_dp_aux_transfer(struct drm_dp_aux *aux,break ; } -drm_info (adev_to_drm (adev),"amdgpu: DP AUX transfer fail:%d\n" , operation_result); +drm_dbg_dp (adev_to_drm (adev),"amdgpu: DP AUX transfer fail:%d\n" , operation_result); }if (payload.reply[0 ]) -drm_info (adev_to_drm (adev),"amdgpu: AUX reply command not ACK: 0x%02x." , +drm_dbg_dp (adev_to_drm (adev),"amdgpu: AUX reply command not ACK: 0x%02x." , payload.reply[0 ]);return result;
drivers/hid/hid-thrustmaster.c +1 -0
@@ -174,6 +174,7 @@ static void thrustmaster_interrupts(struct hid_device *hdev)u8 ep_addr[2 ] = {b_ep,0 };if (!usb_check_int_endpoints (usbif, ep_addr)) { +kfree (send_buf);hid_err (hdev,"Unexpected non-int endpoint\n" );return ; }
drivers/hid/hid-uclogic-core.c +4 -3
@@ -142,11 +142,12 @@ static int uclogic_input_configured(struct hid_device *hdev, suffix ="System Control" ;break ; } - } - -if (suffix) + }else { hi->input->name =devm_kasprintf (&hdev->dev,GFP_KERNEL ,"%s %s" , hdev->name, suffix); +if (!hi->input->name) +return -ENOMEM ; + }return 0 ; }
drivers/hv/channel.c +3 -62
78 lines not on this page · raw message
drivers/iio/adc/ad7266.c +1 -1
@@ -44,7 +44,7 @@ struct ad7266_state {*/ struct {__be16 sample[2 ]; -s64 timestamp; +aligned_s64 timestamp; } data__aligned(IIO_DMA_MINALIGN) ; };
drivers/iio/adc/ad7768-1.c +1 -1
@@ -169,7 +169,7 @@ struct ad7768_state {union {struct {__be32 chan; -s64 timestamp; +aligned_s64 timestamp; } scan;__be32 d32;u8 d8[2 ];
drivers/iio/chemical/sps30.c +1 -1
@@ -108,7 +108,7 @@ static irqreturn_t sps30_trigger_handler(int irq, void *p)int ret;struct {s32 data[4 ];/* PM1, PM2P5, PM4, PM10 */ -s64 ts; +aligned_s64 ts; } scan;mutex_lock (&state->lock);
drivers/infiniband/sw/rxe/rxe_cq.c +1 -4
@@ -56,11 +56,8 @@ int rxe_cq_from_init(struct rxe_dev *rxe, struct rxe_cq *cq, int cqe, err =do_mmap_info (rxe, uresp ? &uresp->mi :NULL , udata, cq->queue->buf, cq->queue->buf_size, &cq->queue->ip); -if (err) { -vfree (cq->queue->buf); -kfree (cq->queue); +if (err)return err; - } cq->is_user = uresp;
drivers/net/dsa/sja1105/sja1105_main.c +1 -5
@@ -2076,6 +2076,7 @@ static void sja1105_bridge_stp_state_set(struct dsa_switch *ds, int port,switch (state) {case BR_STATE_DISABLED :case BR_STATE_BLOCKING : +case BR_STATE_LISTENING :/* From UM10944 description of DRPDTAG (why put this there?): * "Management traffic flows to the port regardless of the state * of the INGRESS flag". So BPDUs are still be allowed to pass.
@@ -2085,11 +2086,6 @@ static void sja1105_bridge_stp_state_set(struct dsa_switch *ds, int port, mac[port].egress = false; mac[port].dyn_learn = false;break ; -case BR_STATE_LISTENING : - mac[port].ingress = true; - mac[port].egress = false; - mac[port].dyn_learn = false; -break ;case BR_STATE_LEARNING : mac[port].ingress = true; mac[port].egress = false;
drivers/net/ethernet/cadence/macb_main.c +6 -13
@@ -1016,22 +1016,15 @@ static void macb_update_stats(struct macb *bp)static int macb_halt_tx (struct macb *bp) { -unsigned long halt_time, timeout; -u32 status; +u32 status;macb_writel (bp,NCR ,macb_readl (bp,NCR ) |MACB_BIT (THALT )); - timeout = jiffies +usecs_to_jiffies (MACB_HALT_TIMEOUT ); -do { - halt_time = jiffies; - status =macb_readl (bp,TSR ); -if (!(status &MACB_BIT (TGO ))) -return 0 ; - -udelay (250 ); - }while (time_before (halt_time, timeout)); - -return -ETIMEDOUT ; +/* Poll TSR until TGO is cleared or timeout. */ +return read_poll_timeout_atomic (macb_readl, status, + !(status &MACB_BIT (TGO )), +250 ,MACB_HALT_TIMEOUT , false, + bp,TSR ); }static void macb_tx_unmap (struct macb *bp,struct macb_tx_skb *tx_skb,int budget)
drivers/net/ethernet/engleder/tsnep_hw.h +2 -0
@@ -181,6 +181,8 @@ struct tsnep_gcl_operation {#define TSNEP_DESC_SIZE 256#define TSNEP_DESC_SIZE_DATA_AFTER 2048#define TSNEP_DESC_OFFSET 128 +#define TSNEP_DESC_SIZE_DATA_AFTER_INLINE (64 - sizeof(struct tsnep_tx_desc) + \ + sizeof_field(struct tsnep_tx_desc, tx))#define TSNEP_DESC_OWNER_COUNTER_MASK 0xC0000000#define TSNEP_DESC_OWNER_COUNTER_SHIFT 30#define TSNEP_DESC_LENGTH_MASK 0x00003FFF
drivers/net/ethernet/engleder/tsnep_main.c +95 -36
215 lines not on this page · raw message
drivers/net/ethernet/marvell/octeontx2/af/cgx.c +5 -0
@@ -707,6 +707,11 @@ int cgx_get_rx_stats(void *cgxd, int lmac_id, int idx, u64 *rx_stat)if (!is_lmac_valid (cgx, lmac_id))return -ENODEV ; + +/* pass lmac as 0 for CGX_CMR_RX_STAT9-12 */ +if (idx >=CGX_RX_STAT_GLOBAL_INDEX ) + lmac_id =0 ; + *rx_stat =cgx_read (cgx, lmac_id,CGXX_CMRX_RX_STAT0 + (idx *8 ));return 0 ; }
drivers/net/ethernet/marvell/octeontx2/nic/cn10k_macsec.c +2 -1
@@ -533,7 +533,8 @@ static int cn10k_mcs_write_tx_secy(struct otx2_nic *pfvf,if (sw_tx_sc->encrypt) sectag_tci |= (MCS_TCI_E |MCS_TCI_C ); - policy =FIELD_PREP (MCS_TX_SECY_PLCY_MTU , secy->netdev->mtu); + policy =FIELD_PREP (MCS_TX_SECY_PLCY_MTU , + pfvf->netdev->mtu +OTX2_ETH_HLEN );/* Write SecTag excluding AN bits(1..0) */ policy |=FIELD_PREP (MCS_TX_SECY_PLCY_ST_TCI , sectag_tci >>2 ); policy |=FIELD_PREP (MCS_TX_SECY_PLCY_ST_OFFSET , tag_offset);
drivers/net/ethernet/mediatek/mtk_eth_soc.c +1 -1
@@ -4628,7 +4628,7 @@ static int mtk_add_mac(struct mtk_eth *eth, struct device_node *np) }if (mtk_is_netsys_v3_or_greater (mac->hw) && -MTK_HAS_CAPS (mac->hw->soc->caps,MTK_ESW_BIT ) && +MTK_HAS_CAPS (mac->hw->soc->caps,MTK_ESW ) && id ==MTK_GMAC1_ID ) { mac->phylink_config.mac_capabilities =MAC_ASYM_PAUSE | MAC_SYM_PAUSE |
drivers/net/ethernet/mellanox/mlx5/core/en_main.c +4 -0
@@ -4136,6 +4136,10 @@ static netdev_features_t mlx5e_fix_uplink_rep_features(struct net_device *netdevif (netdev->features &NETIF_F_HW_VLAN_CTAG_FILTER )netdev_warn (netdev,"Disabling HW_VLAN CTAG FILTERING, not supported in switchdev mode\n" ); + features &= ~NETIF_F_HW_MACSEC ; +if (netdev->features &NETIF_F_HW_MACSEC ) +netdev_warn (netdev,"Disabling HW MACsec offload, not supported in switchdev mode\n" ); +return features; }
drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c +3 -0
@@ -3013,6 +3013,9 @@ static int mlxsw_sp_neigh_rif_made_sync(struct mlxsw_sp *mlxsw_sp, .rif = rif, }; +if (!mlxsw_sp_dev_lower_is_port (mlxsw_sp_rif_dev (rif))) +return 0 ; +neigh_for_each (&arp_tbl, mlxsw_sp_neigh_rif_made_sync_each, &rms);if (rms.err) goto err_arp;
drivers/net/ethernet/qlogic/qede/qede_main.c +1 -1
@@ -203,7 +203,7 @@ static struct pci_driver qede_pci_driver = { };static struct qed_eth_cb_ops qede_ll_ops = { - { + .common = { #ifdef CONFIG_RFS_ACCEL .arfs_filter_op = qede_arfs_filter_op, #endif
drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c +5 -2
@@ -1484,8 +1484,11 @@ static int qlcnic_sriov_channel_cfg_cmd(struct qlcnic_adapter *adapter, u8 cmd_o } cmd_op = (cmd.rsp.arg[0 ] &0xff ); -if (cmd.rsp.arg[0 ] >>25 ==2 ) -return 2 ; +if (cmd.rsp.arg[0 ] >>25 ==2 ) { + ret =2 ; + goto out; + } +if (cmd_op ==QLCNIC_BC_CMD_CHANNEL_INIT )set_bit (QLC_BC_VF_STATE , &vf->state);else
drivers/net/hyperv/hyperv_net.h +12 -1
@@ -158,7 +158,6 @@ struct hv_netvsc_packet {u8 cp_partial;/* partial copy into send buffer */ u8 rmsg_size;/* RNDIS header and PPI size */ -u8 rmsg_pgcnt;/* page count of RNDIS header and PPI */ u8 page_buf_cnt;u16 q_idx;
@@ -893,6 +892,18 @@ struct nvsp_message { sizeof(struct nvsp_message))#define NETVSC_MIN_IN_MSG_SIZE sizeof(struct vmpacket_descriptor) +/* Maximum # of contiguous data ranges that can make up a trasmitted packet. +* Typically it's the max SKB fragments plus 2 for the rndis packet and the +* linear portion of the SKB. But if MAX_SKB_FRAGS is large, the value may +* need to be limited to MAX_PAGE_BUFFER_COUNT, which is the max # of entries +* in a GPA direct packet sent to netvsp over VMBus. +*/ +#if MAX_SKB_FRAGS +2 <MAX_PAGE_BUFFER_COUNT +#define MAX_DATA_RANGES (MAX_SKB_FRAGS + 2) +#else +#define MAX_DATA_RANGES MAX_PAGE_BUFFER_COUNT +#endif +/* Estimated requestor size: * out_ring_size/min_out_msg_size + in_ring_size/min_in_msg_size */
drivers/net/hyperv/netvsc.c +48 -9
88 lines not on this page · raw message
drivers/net/hyperv/netvsc_drv.c +14 -48
92 lines not on this page · raw message
drivers/net/hyperv/rndis_filter.c +5 -19
@@ -226,8 +226,7 @@ static int rndis_filter_send_request(struct rndis_device *dev, struct rndis_request *req) {struct hv_netvsc_packet *packet; -struct hv_page_buffer page_buf[2 ]; -struct hv_page_buffer *pb = page_buf; +struct hv_page_buffer pb;int ret;/* Setup the packet to send it */
@@ -236,27 +235,14 @@ static int rndis_filter_send_request(struct rndis_device *dev, packet->total_data_buflen = req->request_msg.msg_len; packet->page_buf_cnt =1 ; - pb[0 ].pfn =virt_to_phys (&req->request_msg) >> -HV_HYP_PAGE_SHIFT ; - pb[0 ].len = req->request_msg.msg_len; - pb[0 ].offset =offset_in_hvpage (&req->request_msg); - -/* Add one page_buf when request_msg crossing page boundary */ -if (pb[0 ].offset + pb[0 ].len >HV_HYP_PAGE_SIZE ) { - packet->page_buf_cnt++; - pb[0 ].len =HV_HYP_PAGE_SIZE - - pb[0 ].offset; - pb[1 ].pfn =virt_to_phys ((void *)&req->request_msg - + pb[0 ].len) >>HV_HYP_PAGE_SHIFT ; - pb[1 ].offset =0 ; - pb[1 ].len = req->request_msg.msg_len - - pb[0 ].len; - } + pb.pfn =virt_to_phys (&req->request_msg) >>HV_HYP_PAGE_SHIFT ; + pb.len = req->request_msg.msg_len; + pb.offset =offset_in_hvpage (&req->request_msg);trace_rndis_send (dev->ndev,0 , &req->request_msg);rcu_read_lock_bh (); - ret =netvsc_send (dev->ndev, packet,NULL , pb,NULL , false); + ret =netvsc_send (dev->ndev, packet,NULL , &pb,NULL , false);rcu_read_unlock_bh ();return ret;
drivers/net/wireless/mediatek/mt76/dma.c +1 -0
@@ -957,6 +957,7 @@ void mt76_dma_cleanup(struct mt76_dev *dev)int i;mt76_worker_disable (&dev->tx_worker); +napi_disable (&dev->tx_napi);netif_napi_del (&dev->tx_napi);for (i =0 ; i <ARRAY_SIZE (dev->phys); i++) {
drivers/nvme/host/pci.c +3 -1
@@ -386,7 +386,7 @@ static bool nvme_dbbuf_update_and_check_event(u16 value, __le32 *dbbuf_db,* as it only leads to a small amount of wasted memory for the lifetime of * the I/O. */ -static int nvme_pci_npages_prp (void ) +static __always_inline int nvme_pci_npages_prp(void) {unsigned max_bytes = (NVME_MAX_KB_SZ *1024 ) +NVME_CTRL_PAGE_SIZE ;unsigned nprps =DIV_ROUND_UP (max_bytes,NVME_CTRL_PAGE_SIZE );
@@ -1107,7 +1107,9 @@ static void nvme_poll_irqdisable(struct nvme_queue *nvmeq)WARN_ON_ONCE (test_bit (NVMEQ_POLLED , &nvmeq->flags));disable_irq (pci_irq_vector (pdev, nvmeq->cq_vector)); +spin_lock (&nvmeq->cq_poll_lock);nvme_poll_cq (nvmeq,NULL ); +spin_unlock (&nvmeq->cq_poll_lock);enable_irq (pci_irq_vector (pdev, nvmeq->cq_vector)); }
drivers/phy/renesas/phy-rcar-gen3-usb2.c +19 -21
@@ -101,7 +101,6 @@ struct rcar_gen3_phy {struct rcar_gen3_chan *ch;u32 int_enable_bits;bool initialized; -bool otg_initialized;bool powered; };
@@ -309,16 +308,15 @@ static bool rcar_gen3_is_any_rphy_initialized(struct rcar_gen3_chan *ch)return false; } -static bool rcar_gen3_needs_init_otg (struct rcar_gen3_chan *ch) +static bool rcar_gen3_is_any_otg_rphy_initialized (struct rcar_gen3_chan *ch) { -int i; - -for (i =0 ; i <NUM_OF_PHYS ; i++) { -if (ch->rphys[i].otg_initialized) -return false; +for (enum rcar_gen3_phy_index i =PHY_INDEX_BOTH_HC ; i <=PHY_INDEX_EHCI ; + i++) { +if (ch->rphys[i].initialized) +return true; } -return true; +return false; }static bool rcar_gen3_are_all_rphys_power_off (struct rcar_gen3_chan *ch)
@@ -340,7 +338,7 @@ static ssize_t role_store(struct device *dev, struct device_attribute *attr,bool is_b_device;enum phy_mode cur_mode, new_mode; -if (!ch->is_otg_channel || !rcar_gen3_is_any_rphy_initialized (ch)) +if (!ch->is_otg_channel || !rcar_gen3_is_any_otg_rphy_initialized (ch))return -EIO ;if (sysfs_streq (buf,"host" ))
@@ -378,7 +376,7 @@ static ssize_t role_show(struct device *dev, struct device_attribute *attr, {struct rcar_gen3_chan *ch =dev_get_drvdata (dev); -if (!ch->is_otg_channel || !rcar_gen3_is_any_rphy_initialized (ch)) +if (!ch->is_otg_channel || !rcar_gen3_is_any_otg_rphy_initialized (ch))return -EIO ; return sprintf(buf, "%s\n", rcar_gen3_is_host(ch) ? "host" :
@@ -391,6 +389,9 @@ static void rcar_gen3_init_otg(struct rcar_gen3_chan *ch)void __iomem *usb2_base = ch->base;u32 val; +if (!ch->is_otg_channel ||rcar_gen3_is_any_otg_rphy_initialized (ch)) +return ; +/* Should not use functions of read-modify-write a register */ val =readl (usb2_base +USB2_LINECTRL1 ); val = (val & ~USB2_LINECTRL1_DP_RPD) | USB2_LINECTRL1_DPRPD_EN |
@@ -451,16 +452,16 @@ static int rcar_gen3_phy_usb2_init(struct phy *p) val =readl (usb2_base +USB2_INT_ENABLE ); val |=USB2_INT_ENABLE_UCOM_INTEN | rphy->int_enable_bits;writel (val, usb2_base +USB2_INT_ENABLE ); -writel (USB2_SPD_RSM_TIMSET_INIT , usb2_base +USB2_SPD_RSM_TIMSET ); -writel (USB2_OC_TIMSET_INIT , usb2_base +USB2_OC_TIMSET ); - -/* Initialize otg part */ -if (channel->is_otg_channel) { -if (rcar_gen3_needs_init_otg (channel)) -rcar_gen3_init_otg (channel); - rphy->otg_initialized = true; + +if (!rcar_gen3_is_any_rphy_initialized (channel)) { +writel (USB2_SPD_RSM_TIMSET_INIT , usb2_base +USB2_SPD_RSM_TIMSET ); +writel (USB2_OC_TIMSET_INIT , usb2_base +USB2_OC_TIMSET ); } +/* Initialize otg part (only if we initialize a PHY with IRQs). */ +if (rphy->int_enable_bits) +rcar_gen3_init_otg (channel); + rphy->initialized = true;return 0 ;
@@ -475,9 +476,6 @@ static int rcar_gen3_phy_usb2_exit(struct phy *p) rphy->initialized = false; -if (channel->is_otg_channel) - rphy->otg_initialized = false; - val =readl (usb2_base +USB2_INT_ENABLE ); val &= ~rphy->int_enable_bits;if (!rcar_gen3_is_any_rphy_initialized (channel))
drivers/phy/tegra/xusb-tegra186.c +27 -19
124 lines not on this page · raw message
drivers/phy/tegra/xusb.c +4 -4
@@ -548,16 +548,16 @@ static int tegra_xusb_port_init(struct tegra_xusb_port *port, err =dev_set_name (&port->dev,"%s-%u" , name, index);if (err <0 ) - goto unregister; + goto put_device; err =device_add (&port->dev);if (err <0 ) - goto unregister; + goto put_device;return 0 ; -unregister: -device_unregister (&port->dev); +put_device: +put_device (&port->dev);return err; }
drivers/platform/x86/amd/pmc/pmc-quirks.c +7 -0
@@ -217,6 +217,13 @@ static const struct dmi_system_id fwbug_list[] = { DMI_MATCH(DMI_BIOS_VERSION, "03.05"), } }, + { + .ident = "MECHREVO Wujie 14X (GX4HRXL)", + .driver_data = &quirk_spurious_8042, + .matches = { + DMI_MATCH(DMI_BOARD_NAME, "WUJIE14-GX4HRXL"), + } + }, {} };
drivers/platform/x86/asus-wmi.c +2 -1
@@ -4404,7 +4404,8 @@ static int asus_wmi_add(struct platform_device *pdev) goto fail_leds;asus_wmi_get_devstate (asus,ASUS_WMI_DEVID_WLAN , &result); -if (result & (ASUS_WMI_DSTS_PRESENCE_BIT |ASUS_WMI_DSTS_USER_BIT )) +if ((result & (ASUS_WMI_DSTS_PRESENCE_BIT |ASUS_WMI_DSTS_USER_BIT )) == + (ASUS_WMI_DSTS_PRESENCE_BIT |ASUS_WMI_DSTS_USER_BIT )) asus->driver->wlan_ctrl_by_user =1 ;if (!(asus->driver->wlan_ctrl_by_user &&ashs_present ())) {
drivers/regulator/max20086-regulator.c +6 -1
@@ -132,7 +132,7 @@ static int max20086_regulators_register(struct max20086 *chip)static int max20086_parse_regulators_dt (struct max20086 *chip,bool *boot_on) { -struct of_regulator_match matches[MAX20086_MAX_REGULATORS ] = { }; +struct of_regulator_match *matches;struct device_node *node;unsigned int i;int ret;
@@ -143,6 +143,11 @@ static int max20086_parse_regulators_dt(struct max20086 *chip, bool *boot_on)return -ENODEV ; } + matches =devm_kcalloc (chip->dev, chip->info->num_outputs, +sizeof (*matches),GFP_KERNEL ); +if (!matches) +return -ENOMEM ; +for (i =0 ; i < chip->info->num_outputs; ++i) matches[i].name = max20086_output_names[i];
drivers/scsi/sd_zbc.c +5 -1
@@ -202,6 +202,7 @@ static void *sd_zbc_alloc_report_buffer(struct scsi_disk *sdkp, unsigned int nr_zones, size_t *buflen) { struct request_queue *q = sdkp->disk->queue; +unsigned int max_segments;size_t bufsize;void *buf;
@@ -213,12 +214,15 @@ static void *sd_zbc_alloc_report_buffer(struct scsi_disk *sdkp,* Furthermore, since the report zone command cannot be split, make * sure that the allocated buffer can always be mapped by limiting the * number of pages allocated to the HBA max segments limit. +* Since max segments can be larger than the max inline bio vectors, +* further limit the allocated buffer to BIO_MAX_INLINE_VECS. */ nr_zones =min (nr_zones, sdkp->zone_info.nr_zones); bufsize =roundup ((nr_zones +1 ) *64 ,SECTOR_SIZE ); bufsize =min_t (size_t, bufsize,queue_max_hw_sectors (q) <<SECTOR_SHIFT ); - bufsize =min_t (size_t, bufsize,queue_max_segments (q) <<PAGE_SHIFT ); + max_segments =min (BIO_MAX_INLINE_VECS ,queue_max_segments (q)); + bufsize =min_t (size_t, bufsize, max_segments <<PAGE_SHIFT );while (bufsize >=SECTOR_SIZE ) { buf =kvzalloc (bufsize,GFP_KERNEL | __GFP_NORETRY);
drivers/scsi/storvsc_drv.c +1 -0
@@ -1819,6 +1819,7 @@ static int storvsc_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *scmnd)return SCSI_MLQUEUE_DEVICE_BUSY ; } + payload->rangecount =1 ; payload->range.len = length; payload->range.offset = offset_in_hvpg;
drivers/spi/spi-loopback-test.c +1 -1
@@ -421,7 +421,7 @@ MODULE_LICENSE("GPL");static void spi_test_print_hex_dump (char *pre,const void *ptr,size_t len) {/* limit the hex_dump */ -if (len <1024 ) { +if (len <=1024 ) {print_hex_dump (KERN_INFO , pre,DUMP_PREFIX_OFFSET ,16 ,1 , ptr, len,0 );
drivers/spi/spi-tegra114.c +3 -3
@@ -728,9 +728,9 @@ static int tegra_spi_set_hw_cs_timing(struct spi_device *spi)u32 inactive_cycles;u8 cs_state; -if ((setup->unit && setup->unit !=SPI_DELAY_UNIT_SCK ) || - (hold->unit && hold->unit !=SPI_DELAY_UNIT_SCK ) || - (inactive->unit && inactive->unit !=SPI_DELAY_UNIT_SCK )) { +if ((setup->value && setup->unit !=SPI_DELAY_UNIT_SCK ) || + (hold->value && hold->unit !=SPI_DELAY_UNIT_SCK ) || + (inactive->value && inactive->unit !=SPI_DELAY_UNIT_SCK )) {dev_err (&spi->dev,"Invalid delay unit %d, should be SPI_DELAY_UNIT_SCK\n" ,SPI_DELAY_UNIT_SCK );
drivers/usb/gadget/function/f_midi2.c +1 -1
@@ -475,7 +475,7 @@ static void reply_ump_stream_ep_info(struct f_midi2_ep *ep)/* reply a UMP EP device info */ static void reply_ump_stream_ep_device (struct f_midi2_ep *ep) { -struct snd_ump_stream_msg_devince_info rep = { +struct snd_ump_stream_msg_device_info rep = { .type =UMP_MSG_TYPE_STREAM , .status =UMP_STREAM_MSG_STATUS_DEVICE_INFO , .manufacture_id = ep->info.manufacturer,
drivers/usb/typec/ucsi/displayport.c +11 -8
@@ -54,7 +54,8 @@ static int ucsi_displayport_enter(struct typec_altmode *alt, u32 *vdo)u8 cur =0 ;int ret; -mutex_lock (&dp->con->lock); +if (!ucsi_con_mutex_lock (dp->con)) +return -ENOTCONN ;if (!dp->override && dp->initialized) {const struct typec_altmode *p =typec_altmode_get_partner (alt);
@@ -100,7 +101,7 @@ static int ucsi_displayport_enter(struct typec_altmode *alt, u32 *vdo)schedule_work (&dp->work); ret =0 ; err_unlock: -mutex_unlock (&dp->con->lock); +ucsi_con_mutex_unlock (dp->con);return ret; }
@@ -112,7 +113,8 @@ static int ucsi_displayport_exit(struct typec_altmode *alt)u64 command;int ret =0 ; -mutex_lock (&dp->con->lock); +if (!ucsi_con_mutex_lock (dp->con)) +return -ENOTCONN ;if (!dp->override) {const struct typec_altmode *p =typec_altmode_get_partner (alt);
@@ -144,7 +146,7 @@ static int ucsi_displayport_exit(struct typec_altmode *alt)schedule_work (&dp->work); out_unlock: -mutex_unlock (&dp->con->lock); +ucsi_con_mutex_unlock (dp->con);return ret; }
@@ -202,20 +204,21 @@ static int ucsi_displayport_vdm(struct typec_altmode *alt,int cmd =PD_VDO_CMD (header);int svdm_version; -mutex_lock (&dp->con->lock); +if (!ucsi_con_mutex_lock (dp->con)) +return -ENOTCONN ;if (!dp->override && dp->initialized) {const struct typec_altmode *p =typec_altmode_get_partner (alt);dev_warn (&p->dev,"firmware doesn't support alternate mode overriding\n" ); -mutex_unlock (&dp->con->lock); +ucsi_con_mutex_unlock (dp->con);return -EOPNOTSUPP ; } svdm_version =typec_altmode_get_svdm_version (alt);if (svdm_version <0 ) { -mutex_unlock (&dp->con->lock); +ucsi_con_mutex_unlock (dp->con);return svdm_version; }
@@ -259,7 +262,7 @@ static int ucsi_displayport_vdm(struct typec_altmode *alt,break ; } -mutex_unlock (&dp->con->lock); +ucsi_con_mutex_unlock (dp->con);return 0 ; }
drivers/usb/typec/ucsi/ucsi.c +34 -0
@@ -1559,6 +1559,40 @@ void ucsi_set_drvdata(struct ucsi *ucsi, void *data) }EXPORT_SYMBOL_GPL (ucsi_set_drvdata); +/** +* ucsi_con_mutex_lock - Acquire the connector mutex +* @con: The connector interface to lock +* +* Returns true on success, false if the connector is disconnected +*/ +bool ucsi_con_mutex_lock (struct ucsi_connector *con) +{ +bool mutex_locked = false; +bool connected = true; + +while (connected && !mutex_locked) { + mutex_locked =mutex_trylock (&con->lock) !=0 ; + connected = con->status.flags &UCSI_CONSTAT_CONNECTED ; +if (connected && !mutex_locked) +msleep (20 ); + } + + connected = connected && con->partner; +if (!connected && mutex_locked) +mutex_unlock (&con->lock); + +return connected; +} + +/** +* ucsi_con_mutex_unlock - Release the connector mutex +* @con: The connector interface to unlock +*/ +void ucsi_con_mutex_unlock (struct ucsi_connector *con) +{ +mutex_unlock (&con->lock); +} +/** * ucsi_create - Allocate UCSI instance * @dev: Device interface to the PPM (Platform Policy Manager)
drivers/usb/typec/ucsi/ucsi.h +2 -0
@@ -79,6 +79,8 @@ int ucsi_register(struct ucsi *ucsi);void ucsi_unregister (struct ucsi *ucsi);void *ucsi_get_drvdata (struct ucsi *ucsi);void ucsi_set_drvdata (struct ucsi *ucsi,void *data); +bool ucsi_con_mutex_lock (struct ucsi_connector *con); +void ucsi_con_mutex_unlock (struct ucsi_connector *con);void ucsi_connector_change (struct ucsi *ucsi,u8 num);
fs/binfmt_elf.c +157 -116
367 lines not on this page · raw message
fs/btrfs/extent-tree.c +20 -5
@@ -164,6 +164,14 @@ int btrfs_lookup_extent_info(struct btrfs_trans_handle *trans, ei =btrfs_item_ptr (leaf, path->slots[0 ], struct btrfs_extent_item); num_refs =btrfs_extent_refs (leaf, ei); +if (unlikely (num_refs ==0 )) { + ret = -EUCLEAN ; +btrfs_err (fs_info, +"unexpected zero reference count for extent item (%llu %u %llu)" , + key.objectid, key.type, key.offset); +btrfs_abort_transaction (trans, ret); + goto out_free; + } extent_flags =btrfs_extent_flags (leaf, ei); }else { ret = -EUCLEAN ;
@@ -177,8 +185,6 @@ int btrfs_lookup_extent_info(struct btrfs_trans_handle *trans, goto out_free; } - -BUG_ON (num_refs ==0 ); }else { num_refs =0 ; extent_flags =0 ;
@@ -208,10 +214,19 @@ int btrfs_lookup_extent_info(struct btrfs_trans_handle *trans, goto search_again; }spin_lock (&head->lock); -if (head->extent_op && head->extent_op->update_flags) +if (head->extent_op && head->extent_op->update_flags) { extent_flags |= head->extent_op->flags_to_set; -else -BUG_ON (num_refs ==0 ); + }else if (unlikely (num_refs ==0 )) { +spin_unlock (&head->lock); +mutex_unlock (&head->mutex); +spin_unlock (&delayed_refs->lock); + ret = -EUCLEAN ; +btrfs_err (fs_info, +"unexpected zero reference count for extent %llu (%s)" , + bytenr, metadata ?"metadata" :"data" ); +btrfs_abort_transaction (trans, ret); + goto out_free; + } num_refs += head->ref_mod;spin_unlock (&head->lock);
fs/nfs/nfs4proc.c +8 -1
@@ -6880,10 +6880,18 @@ static struct nfs4_unlockdata *nfs4_alloc_unlockdata(struct file_lock *fl,struct nfs4_unlockdata *p;struct nfs4_state *state = lsp->ls_state;struct inode *inode = state->inode; +struct nfs_lock_context *l_ctx; p =kzalloc (sizeof (*p),GFP_KERNEL );if (p ==NULL )return NULL ; + l_ctx =nfs_get_lock_context (ctx); +if (!IS_ERR (l_ctx)) { + p->l_ctx = l_ctx; + }else { +kfree (p); +return NULL ; + } p->arg.fh =NFS_FH (inode); p->arg.fl = &p->fl; p->arg.seqid = seqid;
@@ -6891,7 +6899,6 @@ static struct nfs4_unlockdata *nfs4_alloc_unlockdata(struct file_lock *fl, p->lsp = lsp;/* Ensure we don't close file until we're done freeing locks! */ p->ctx =get_nfs_open_context (ctx); - p->l_ctx =nfs_get_lock_context (ctx);locks_init_lock (&p->fl);locks_copy_lock (&p->fl, fl); p->server =NFS_SERVER (inode);
fs/nfs/pnfs.c +9 -0
@@ -732,6 +732,14 @@ pnfs_mark_matching_lsegs_invalid(struct pnfs_layout_hdr *lo,return remaining; } +static void pnfs_reset_return_info (struct pnfs_layout_hdr *lo) +{ +struct pnfs_layout_segment *lseg; + +list_for_each_entry (lseg, &lo->plh_return_segs, pls_list) +pnfs_set_plh_return_info (lo, lseg->pls_range.iomode,0 ); +} + static void pnfs_free_returned_lsegs(struct pnfs_layout_hdr *lo, struct list_head *free_me,
@@ -1180,6 +1188,7 @@ void pnfs_layoutreturn_free_lsegs(struct pnfs_layout_hdr *lo,pnfs_mark_matching_lsegs_invalid (lo, &freeme, range, seq);pnfs_free_returned_lsegs (lo, &freeme, range, seq);pnfs_set_layout_stateid (lo, stateid,NULL , true); +pnfs_reset_return_info (lo); }else pnfs_mark_layout_stateid_invalid (lo, &freeme); out_unlock:
fs/smb/client/smb2pdu.c +1 -1
@@ -2979,7 +2979,7 @@ int smb311_posix_mkdir(const unsigned int xid, struct inode *inode,/* Eventually save off posix specific response info and timestaps */ err_free_rsp_buf: -free_rsp_buf (resp_buftype, rsp); +free_rsp_buf (resp_buftype, rsp_iov.iov_base);kfree (pc_buf); err_free_req:cifs_small_buf_release (req);
fs/udf/truncate.c +1 -1
@@ -115,7 +115,7 @@ void udf_truncate_tail_extent(struct inode *inode) }/* This inode entry is in-memory only and thus we don't have to mark * the inode dirty */ -if (ret ==0 ) +if (ret >=0 ) iinfo->i_lenExtents = inode->i_size;brelse (epos.bh); }
fs/xattr.c +24 -0
@@ -1291,6 +1291,15 @@ static bool xattr_is_trusted(const char *name)return !strncmp (name,XATTR_TRUSTED_PREFIX ,XATTR_TRUSTED_PREFIX_LEN ); } +static bool xattr_is_maclabel (const char *name) +{ +const char *suffix = name +XATTR_SECURITY_PREFIX_LEN ; + +return !strncmp (name,XATTR_SECURITY_PREFIX , +XATTR_SECURITY_PREFIX_LEN ) && +security_ismaclabel (suffix); +} +/** * simple_xattr_list - list all xattr objects * @inode: inode from which to get the xattrs
@@ -1323,6 +1332,17 @@ ssize_t simple_xattr_list(struct inode *inode, struct simple_xattrs *xattrs,if (err)return err; + err =security_inode_listsecurity (inode, buffer, remaining_size); +if (err <0 ) +return err; + +if (buffer) { +if (remaining_size < err) +return -ERANGE ; + buffer += err; + } + remaining_size -= err; +read_lock (&xattrs->lock);for (rbp =rb_first (&xattrs->rb_root); rbp; rbp =rb_next (rbp)) { xattr = rb_entry(rbp, struct simple_xattr, rb_node);
@@ -1331,6 +1351,10 @@ ssize_t simple_xattr_list(struct inode *inode, struct simple_xattrs *xattrs,if (!trusted &&xattr_is_trusted (xattr->name))continue ; +/* skip MAC labels; these are provided by LSM above */ +if (xattr_is_maclabel (xattr->name)) +continue ; + err =xattr_list_one (&buffer, &remaining_size, xattr->name);if (err)break ;
include/linux/bio.h +1 -0
@@ -11,6 +11,7 @@#include <linux/uio.h> #define BIO_MAX_VECS 256U +#define BIO_MAX_INLINE_VECS UIO_MAXIOVstruct queue_limits ;
include/linux/hyperv.h +0 -7
@@ -1224,13 +1224,6 @@ extern int vmbus_sendpacket(struct vmbus_channel *channel,enum vmbus_packet_type type, u32 flags); -extern int vmbus_sendpacket_pagebuffer (struct vmbus_channel *channel, -struct hv_page_buffer pagebuffers[], -u32 pagecount, -void *buffer, -u32 bufferlen, -u64 requestid); - extern int vmbus_sendpacket_mpb_desc(struct vmbus_channel *channel, struct vmbus_packet_mpb_array *mpb, u32 desc_size,
include/linux/tpm.h +1 -1
@@ -181,7 +181,7 @@ enum tpm2_const {enum tpm2_timeouts {TPM2_TIMEOUT_A =750 , -TPM2_TIMEOUT_B =2000 , +TPM2_TIMEOUT_B =4000 ,TPM2_TIMEOUT_C =200 ,TPM2_TIMEOUT_D =30 ,TPM2_DURATION_SHORT =20 ,
include/net/sch_generic.h +15 -0
@@ -1029,6 +1029,21 @@ static inline struct sk_buff *__qdisc_dequeue_head(struct qdisc_skb_head *qh)return skb; } +static inline struct sk_buff *qdisc_dequeue_internal (struct Qdisc *sch,bool direct) +{ +struct sk_buff *skb; + + skb =__skb_dequeue (&sch->gso_skb); +if (skb) { + sch->q.qlen--; +return skb; + } +if (direct) +return __qdisc_dequeue_head (&sch->q); +else +return sch->dequeue (sch); +} +static inline struct sk_buff *qdisc_dequeue_head (struct Qdisc *sch) {struct sk_buff *skb =__qdisc_dequeue_head (&sch->q);
include/sound/ump_msg.h +2 -2
@@ -604,7 +604,7 @@ struct snd_ump_stream_msg_ep_info { } __packed;/* UMP Stream Message: Device Info Notification (128bit) */ -struct snd_ump_stream_msg_devince_info { +struct snd_ump_stream_msg_device_info {#ifdef __BIG_ENDIAN_BITFIELD/* 0 */ u32 type:4 ;
@@ -754,7 +754,7 @@ struct snd_ump_stream_msg_fb_name {union snd_ump_stream_msg {struct snd_ump_stream_msg_ep_discovery ep_discovery;struct snd_ump_stream_msg_ep_info ep_info; -struct snd_ump_stream_msg_devince_info device_info; +struct snd_ump_stream_msg_device_info device_info;struct snd_ump_stream_msg_stream_cfg stream_cfg;struct snd_ump_stream_msg_fb_discovery fb_discovery;struct snd_ump_stream_msg_fb_info fb_info;
kernel/cgroup/cpuset.c +4 -2
@@ -1229,9 +1229,11 @@ static void update_tasks_cpumask(struct cpuset *cs, struct cpumask *new_cpus)if (top_cs) {/* -* Percpu kthreads in top_cpuset are ignored +* PF_NO_SETAFFINITY tasks are ignored. +* All per cpu kthreads should have PF_NO_SETAFFINITY +* flag set, see kthread_set_per_cpu().
Lines of this file are not shown. View the raw message.
net/mctp/device.c +30 -35
65 lines not on this page · raw message
sound/core/seq/seq_clientmgr.c +33 -19
52 lines not on this page · raw message
tools/testing/selftests/exec/load_address.c +60 -23
83 lines not on this page · raw message
tools/testing/selftests/mm/compaction_test.c +14 -5
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.