Linux 5.8.13
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.8.13 kernel.
All users of the 5.8 kernel series must upgrade.
The updated 5.8.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.8.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/include/asm/kvm_emulate.h | 12 + arch/arm64/kvm/hyp/switch.c | 2 arch/arm64/kvm/mmio.c | 2 arch/arm64/kvm/mmu.c | 2 arch/ia64/mm/init.c | 6 arch/mips/include/asm/cpu-type.h | 1 arch/mips/loongson2ef/Platform | 4 arch/mips/loongson64/cop2-ex.c | 24 -- arch/riscv/boot/dts/kendryte/k210.dtsi | 6 arch/riscv/include/asm/ftrace.h | 7 arch/riscv/kernel/ftrace.c | 19 ++ arch/s390/include/asm/pgtable.h | 42 +++-- arch/s390/kernel/setup.c | 6 arch/x86/entry/common.c | 2 arch/x86/entry/entry_64.S | 2 arch/x86/include/asm/idtentry.h | 2 arch/x86/include/asm/irq_stack.h | 70 +++++++- arch/x86/kernel/apic/io_apic.c | 1 arch/x86/kernel/irq.c | 2 arch/x86/kernel/irq_64.c | 2 arch/x86/kvm/svm/svm.c | 8 arch/x86/kvm/x86.c | 3 arch/x86/lib/usercopy_64.c | 2 drivers/atm/eni.c | 2 drivers/base/node.c | 85 ++++++---- drivers/base/regmap/internal.h | 2 drivers/base/regmap/regcache.c | 2 drivers/base/regmap/regmap.c | 33 ++-- drivers/clk/versatile/clk-impd1.c | 4 drivers/clocksource/h8300_timer8.c | 2 drivers/clocksource/timer-ti-dm-systimer.c | 44 ++--- drivers/devfreq/tegra30-devfreq.c | 4 drivers/dma-buf/dma-buf.c | 2 drivers/edac/ghes_edac.c | 4 drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 2 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 32 +-- drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c | 4 drivers/gpu/drm/amd/display/modules/hdcp/hdcp_log.h | 2 drivers/gpu/drm/amd/display/modules/hdcp/hdcp_psp.c | 2 drivers/gpu/drm/sun4i/sun8i_csc.h | 2 drivers/gpu/drm/vc4/vc4_hdmi.c | 1 drivers/i2c/busses/i2c-aspeed.c | 2 drivers/i2c/busses/i2c-mt65xx.c | 2 drivers/i2c/i2c-core-base.c | 2 drivers/infiniband/core/device.c | 6 drivers/md/dm.c | 23 -- drivers/media/cec/core/cec-adap.c | 2 drivers/net/ethernet/intel/igc/igc.h | 20 -- drivers/net/ethernet/intel/igc/igc_ptp.c | 19 ++ drivers/net/ethernet/mellanox/mlx5/core/en/port.c | 7 drivers/net/ethernet/qlogic/qed/qed_dev.c | 11 + drivers/net/ethernet/qlogic/qed/qed_l2.c | 3 drivers/net/ethernet/qlogic/qed/qed_main.c | 2 drivers/net/ethernet/qlogic/qed/qed_sriov.c | 1 drivers/net/ethernet/qlogic/qede/qede_filter.c | 3 drivers/net/ethernet/qlogic/qede/qede_main.c | 11 - drivers/net/hyperv/netvsc_drv.c | 11 - drivers/net/ieee802154/adf7242.c | 4 drivers/net/ieee802154/ca8210.c | 1 drivers/net/wireless/marvell/mwifiex/fw.h | 2 drivers/net/wireless/marvell/mwifiex/sta_cmdresp.c | 4 drivers/net/wireless/mediatek/mt76/mt7615/mcu.c | 3 drivers/nvme/host/Kconfig | 1 drivers/regulator/axp20x-regulator.c | 7 drivers/s390/block/dasd_fba.c | 9 - drivers/s390/crypto/zcrypt_api.c | 3 drivers/scsi/lpfc/lpfc_hbadisc.c | 76 ++++++--- drivers/spi/spi-bcm-qspi.c | 2 drivers/spi/spi-fsl-dspi.c | 6 fs/btrfs/disk-io.c | 11 - fs/btrfs/sysfs.c | 16 + fs/io_uring.c | 8 include/linux/kprobes.h | 5 include/linux/mm.h | 2 include/linux/mmzone.h | 11 - include/linux/node.h | 11 - include/linux/pgtable.h | 10 + include/linux/qed/qed_if.h | 1 init/main.c | 2 kernel/bpf/inode.c | 4 kernel/kprobes.c | 27 +++ kernel/trace/trace_events_hist.c | 1 kernel/trace/trace_preemptirq.c | 4 lib/bootconfig.c | 38 ++-- lib/string.c | 24 ++ mm/gup.c | 18 +- mm/madvise.c | 2 mm/memory_hotplug.c | 5 mm/page_alloc.c | 10 - mm/swapfile.c | 2 net/batman-adv/bridge_loop_avoidance.c | 145 ++++++++++++++---- net/batman-adv/bridge_loop_avoidance.h | 4 net/batman-adv/multicast.c | 46 ++++- net/batman-adv/multicast.h | 15 + net/batman-adv/routing.c | 4 net/batman-adv/soft-interface.c | 11 - net/core/filter.c | 4 net/mac80211/mlme.c | 3 net/mac80211/util.c | 7 net/mac802154/tx.c | 8 net/netfilter/nf_conntrack_netlink.c | 22 -- net/netfilter/nf_conntrack_proto.c | 2 net/netfilter/nft_meta.c | 4 net/sunrpc/svcsock.c | 2 net/wireless/Kconfig | 1 net/wireless/util.c | 2 net/xdp/xdp_umem.c | 17 -- security/device_cgroup.c | 3 sound/pci/asihpi/hpioctl.c | 4 sound/pci/hda/patch_realtek.c | 13 + sound/soc/codecs/pcm3168a.c | 7 sound/soc/codecs/wm8994.c | 10 + sound/soc/codecs/wm_hubs.c | 3 sound/soc/codecs/wm_hubs.h | 1 sound/soc/intel/boards/bytcr_rt5640.c | 10 + sound/usb/quirks.c | 7 tools/lib/bpf/Makefile | 2 tools/lib/bpf/libbpf.c | 2 tools/objtool/check.c | 2 120 files changed, 865 insertions(+), 409 deletions(-)
Amol Grover (1):
device_cgroup: Fix RCU list debugging warning
Anand Jain (1):
btrfs: fix put of uninitialized kobject after seed device delete
Bhawanpreet Lakha (2):
drm/amd/display: Don't use DRM_ERROR() for DTM add topology drm/amd/display: Don't log hdcp module warnings in dmesg
Björn Töpel (1):
xsk: Fix number of pinned pages/umem size discrepancy
Borislav Petkov (1):
EDAC/ghes: Check whether the driver is on the safe list correctly
Charan Teja Reddy (1):
dmabuf: fix NULL pointer dereference in dma_buf_release()
Christian Borntraeger (1):
s390/zcrypt: Fix ZCRYPT_PERDEV_REQCNT ioctl
Chuck Lever (1):
SUNRPC: Fix svc_flush_dcache()
Damien Le Moal (1):
riscv: Fix Kendryte K210 device tree
Dan Carpenter (1):
PM / devfreq: tegra30: Disable clock on error in probe
Daniel Borkmann (1):
bpf: Fix clobbering of r2 in bpf_gen_ld_abs
Dennis Li (1):
drm/amdkfd: fix a memory leak issue
Dexuan Cui (1):
hv_netvsc: Switch the data path at the right time during hibernation
Dmitry Baryshkov (2):
regmap: fix page selection for noinc reads
regmap: fix page selection for noinc writes
Dmitry Bogdanov (3):
net: qed: Disable aRFS for NPAR and 100G
net: qede: Disable aRFS for NPAR and 100G
net: qed: RDMA personality shouldn't fail VF load
Eddie James (1):
i2c: aspeed: Mask IRQ status to relevant bits
Eelco Chaudron (1):
netfilter: conntrack: nf_conncount_init is failing with IPv6 disabled
Eric Dumazet (1):
mac802154: tx: fix use-after-free
Felix Fietkau (1):
mt76: mt7615: use v1 MCU API on MT7615 to fix issues with adding/removing stations
Gao Xiang (1):
mm, THP, swap: fix allocating cluster for swapfile by mistake
Greg Kroah-Hartman (1):
Linux 5.8.13
Hans Verkuil (1):
media: cec-adap.c: don't use flush_scheduled_work()
Hans de Goede (2):
ASoC: Intel: bytcr_rt5640: Add quirk for MPMAN Converter9 2-in-1
i2c: core: Call i2c_acpi_install_space_handler() before i2c_acpi_register_devices()
Huacai Chen (1):
MIPS: Loongson-3: Fix fp register access if MSA enabled
Hui Wang (1):
ALSA: hda/realtek - Couldn't detect Mic if booting with headset plugged
Icenowy Zheng (1):
regulator: axp20x: fix LDO2/4 description
Ilya Leoshkevich (1):
s390/init: add missing __init annotations
James Smart (1):
scsi: lpfc: Fix initial FLOGI failure due to BBSCN not supported
Jan Höppner (1):
s390/dasd: Fix zero write for FBA devices
Jason Gunthorpe (1):
RDMA/core: Fix ordering of CQ pool destruction
Jens Axboe (2):
io_uring: fix openat/openat2 unified prep handling
io_uring: ensure open/openat2 name is cleaned on cancelation
Jiaxun Yang (1):
MIPS: Loongson2ef: Disable Loongson MMI instructions
Jing Xiangfeng (1):
atm: eni: fix the missed pci_disable_device() for eni_init_one()
Joakim Tjernlund (1):
ALSA: usb-audio: Add delay quirk for H570e USB headsets
Johannes Berg (1):
cfg80211: fix 6 GHz channel conversion
Johannes Thumshirn (1):
btrfs: fix overflow when copying corrupt csums for a message
John Crispin (1):
mac80211: fix 80 MHz association to 160/80+80 AP on 6 GHz
Josh Poimboeuf (1):
objtool: Fix noreturn detection for ignored functions
Jun Lei (1):
drm/amd/display: update nv1x stutter latencies
Kai-Heng Feng (1):
ALSA: hda/realtek: Enable front panel headset LED on Lenovo ThinkStation P520
Kuninori Morimoto (1):
ASoC: pcm3168a: ignore 0 Hz settings
Laurent Dufour (2):
mm: replace memmap_context by meminit_context
mm: don't rely on system state to detect hot-plug operations
Linus Lüssing (5):
batman-adv: bla: fix type misuse for backbone_gw hash indexing
batman-adv: mcast/TT: fix wrongly dropped or rerouted packets
batman-adv: mcast: fix duplicate mcast packets in BLA backbone from LAN
batman-adv: mcast: fix duplicate mcast packets in BLA backbone from mesh
batman-adv: mcast: fix duplicate mcast packets from BLA backbone to mesh
Liu Jian (1):
ieee802154: fix one possible memleak in ca8210_dev_com_init
Marc Zyngier (1):
KVM: arm64: Assume write fault on S1PTW permission fault on instruction fetch
Marek Szyprowski (1):
drm/vc4/vc4_hdmi: fill ASoC card owner
Martin Cerveny (1):
drm/sun4i: sun8i-csc: Secondary CSC register correction
Martin Willi (1):
netfilter: ctnetlink: fix mark based dump filtering regression
Masami Hiramatsu (4):
lib/bootconfig: Fix a bug of breaking existing tree nodes lib/bootconfig: Fix to remove tailing spaces after value
kprobes: Fix to check probe enabled before disarm_kprobe_ftrace()
kprobes: tracing/kprobes: Fix to kill kprobes on initmem after boot
Maximilian Luz (1):
mwifiex: Increase AES key storage size to 256 bits
Michel Dänzer (1):
drm/amdgpu/dc: Require primary plane to be enabled whenever the CRTC is
Mike Snitzer (1):
dm: fix bio splitting and its bio completion order for regular IO
Mikulas Patocka (1):
arch/x86/lib/usercopy_64.c: fix __copy_user_flushcache() cache writeback
Minchan Kim (1):
mm: validate pmd after splitting
Necip Fazil Yildiran (2):
nvme-tcp: fix kconfig dependency warning when !CRYPTO
lib80211: fix unmet direct dependendices config warning when !CRYPTO
Nick Desaulniers (1):
lib/string.c: implement stpcpy
Pablo Neira Ayuso (1):
netfilter: nft_meta: use socket user_ns to retrieve skuid and skgid
Palmer Dabbelt (1):
RISC-V: Take text_mutex in ftrace_init_nop()
Qii Wang (1):
i2c: mediatek: Send i2c master code at more than 1MHz
Ray Jui (1):
spi: bcm-qspi: Fix probe regression on iProc platforms
Saeed Mahameed (1):
net/mlx5e: mlx5e_fec_in_caps() returns a boolean
Sean Christopherson (1):
KVM: x86: Reset MMU context if guest toggles CR4.SMAP or CR4.PKE
Sumera Priyadarsini (1):
clk: versatile: Add of_node_put() before return statement
Sven Eckelmann (1):
batman-adv: Add missing include for in_interrupt()
Sven Schnelle (1):
lockdep: fix order in trace_hardirqs_off_caller()
Sylwester Nawrocki (2):
ASoC: wm8994: Skip setting of the WM8994_MICBIAS register for WM1811
ASoC: wm8994: Ensure the device is resumed in wm89xx_mic_detect functions
Thomas Gleixner (2):
x86/irq: Make run_on_irqstack_cond() typesafe x86/ioapic: Unbreak check_timer()
Tianjia Zhang (1):
clocksource/drivers/h8300_timer8: Fix wrong return value in h8300_8timer_init()
Tom Lendacky (1):
KVM: SVM: Add a dedicated INVD intercept routine
Tom Rix (3):
ieee802154/adf7242: check status of adf7242_read_reg
ALSA: asihpi: fix iounmap in error handler
tracing: fix double free
Tony Ambardar (2):
libbpf: Fix build failure from uninitialized variable warning tools/libbpf: Avoid counting local symbols in ABI check
Tony Lindgren (1):
clocksource/drivers/timer-ti-dm: Do reset before enable
Vasily Gorbik (1):
mm/gup: fix gup_fast with dynamic page table folding
Vinicius Costa Gomes (2):
igc: Fix wrong timestamp latency numbers
igc: Fix not considering the TX delay for timestamps
Vladimir Oltean (1):
spi: spi-fsl-dspi: use XSPI mode instead of DMA for DPAA2 SoCs
Wei Li (1):
MIPS: Add the missing 'CPU_1074K' into __get_cpu_type()
Wen Gong (1):
mac80211: do not disable HE if HT is missing on 2.4 GHz
Will McVicker (1):
netfilter: ctnetlink: add a range check for l3/l4 protonum
Yonghong Song (1):
bpf: Fix a rcu warning for bpffs map pretty-print
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 8 -SUBLEVEL = 12 +SUBLEVEL = 13 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/arm64/include/asm/kvm_emulate.h +10 -2
@@ -319,7 +319,7 @@ static __always_inline int kvm_vcpu_dabt_get_rd(const struct kvm_vcpu *vcpu)return (kvm_vcpu_get_hsr (vcpu) & ESR_ELx_SRT_MASK) >> ESR_ELx_SRT_SHIFT; } -static __always_inline bool kvm_vcpu_dabt_iss1tw(const struct kvm_vcpu *vcpu) +static __always_inline bool kvm_vcpu_abt_iss1tw(const struct kvm_vcpu *vcpu) {return !!(kvm_vcpu_get_hsr (vcpu) & ESR_ELx_S1PTW); }
@@ -327,7 +327,7 @@ static __always_inline bool kvm_vcpu_dabt_iss1tw(const struct kvm_vcpu *vcpu) static __always_inline bool kvm_vcpu_dabt_iswrite(const struct kvm_vcpu *vcpu) {return !!(kvm_vcpu_get_hsr (vcpu) & ESR_ELx_WNR) || -kvm_vcpu_dabt_iss1tw (vcpu);/* AF/DBM update */ +kvm_vcpu_abt_iss1tw (vcpu);/* AF/DBM update */ }static inline bool kvm_vcpu_dabt_is_cm (const struct kvm_vcpu *vcpu)
@@ -356,6 +356,11 @@ static inline bool kvm_vcpu_trap_is_iabt(const struct kvm_vcpu *vcpu)return kvm_vcpu_trap_get_class (vcpu) == ESR_ELx_EC_IABT_LOW; } +static inline bool kvm_vcpu_trap_is_exec_fault (const struct kvm_vcpu *vcpu) +{ +return kvm_vcpu_trap_is_iabt (vcpu) && !kvm_vcpu_abt_iss1tw (vcpu); +} + static __always_inline u8 kvm_vcpu_trap_get_fault(const struct kvm_vcpu *vcpu) {return kvm_vcpu_get_hsr (vcpu) & ESR_ELx_FSC;
@@ -393,6 +398,9 @@ 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_trap_is_iabt (vcpu))return false;
arch/arm64/kvm/hyp/switch.c +1 -1
@@ -599,7 +599,7 @@ static bool __hyp_text fixup_guest_exit(struct kvm_vcpu *vcpu, u64 *exit_code)kvm_vcpu_trap_get_fault_type (vcpu) ==FSC_FAULT &&kvm_vcpu_dabt_isvalid (vcpu) && !kvm_vcpu_dabt_isextabt (vcpu) && - !kvm_vcpu_dabt_iss1tw (vcpu); + !kvm_vcpu_abt_iss1tw (vcpu);if (valid) {int ret =__vgic_v2_perform_cpuif_access (vcpu);
arch/arm64/kvm/mmio.c +1 -1
@@ -146,7 +146,7 @@ int io_mem_abort(struct kvm_vcpu *vcpu, struct kvm_run *run, }/* Page table accesses IO mem: tell guest to fix its TTBR */ -if (kvm_vcpu_dabt_iss1tw (vcpu)) { +if (kvm_vcpu_abt_iss1tw (vcpu)) {kvm_inject_dabt (vcpu,kvm_vcpu_get_hfar (vcpu));return 1 ; }
arch/arm64/kvm/mmu.c +1 -1
@@ -1845,7 +1845,7 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,unsigned long vma_pagesize, flags =0 ; write_fault =kvm_is_write_fault (vcpu); - exec_fault =kvm_vcpu_trap_is_iabt (vcpu); + exec_fault =kvm_vcpu_trap_is_exec_fault (vcpu);VM_BUG_ON (write_fault && exec_fault);if (fault_status ==FSC_PERM && !write_fault && !exec_fault) {
arch/ia64/mm/init.c +3 -3
@@ -538,7 +538,7 @@ virtual_memmap_init(u64 start, u64 end, void *arg)if (map_start < map_end)memmap_init_zone ((unsigned long )(map_end - map_start), args->nid, args->zone,page_to_pfn (map_start), -MEMMAP_EARLY ,NULL ); +MEMINIT_EARLY ,NULL );return 0 ; }
@@ -547,8 +547,8 @@ memmap_init (unsigned long size, int nid, unsigned long zone, unsigned long start_pfn) {if (!vmem_map) { -memmap_init_zone (size, nid, zone, start_pfn,MEMMAP_EARLY , -NULL ); +memmap_init_zone (size, nid, zone, start_pfn, +MEMINIT_EARLY ,NULL ); }else {struct page *start;struct memmap_init_callback_data args;
arch/mips/include/asm/cpu-type.h +1 -0
@@ -47,6 +47,7 @@ static inline int __pure __get_cpu_type(const int cpu_type)case CPU_34K :case CPU_1004K :case CPU_74K : +case CPU_1074K :case CPU_M14KC :case CPU_M14KEC :case CPU_INTERAPTIV :
arch/mips/loongson2ef/Platform +4 -0
@@ -22,6 +22,10 @@ ifdef CONFIG_CPU_LOONGSON2F_WORKAROUNDS endif endif +# Some -march= flags enable MMI instructions, and GCC complains about that +# support being enabled alongside -msoft-float. Thus explicitly disable MMI. +cflags-y += $(call cc-option,-mno-loongson-mmi) + # # Loongson Machines' Support #
arch/mips/loongson64/cop2-ex.c +8 -16
@@ -95,10 +95,8 @@ static int loongson_cu2_call(struct notifier_block *nfb, unsigned long action,if (res) goto fault; -set_fpr64 (current->thread.fpu.fpr, - insn.loongson3_lswc2_format.rt, value); -set_fpr64 (current->thread.fpu.fpr, - insn.loongson3_lswc2_format.rq, value_next); +set_fpr64 (¤t->thread.fpu.fpr[insn.loongson3_lswc2_format.rt],0 , value); +set_fpr64 (¤t->thread.fpu.fpr[insn.loongson3_lswc2_format.rq],0 , value_next);compute_return_epc (regs);own_fpu (1 ); }
@@ -130,15 +128,13 @@ static int loongson_cu2_call(struct notifier_block *nfb, unsigned long action, goto sigbus;lose_fpu (1 ); - value_next =get_fpr64 (current->thread.fpu.fpr, - insn.loongson3_lswc2_format.rq); + value_next =get_fpr64 (¤t->thread.fpu.fpr[insn.loongson3_lswc2_format.rq],0 );StoreDW (addr +8 , value_next, res);if (res) goto fault; - value =get_fpr64 (current->thread.fpu.fpr, - insn.loongson3_lswc2_format.rt); + value =get_fpr64 (¤t->thread.fpu.fpr[insn.loongson3_lswc2_format.rt],0 );StoreDW (addr, value, res);if (res)
@@ -204,8 +200,7 @@ static int loongson_cu2_call(struct notifier_block *nfb, unsigned long action,if (res) goto fault; -set_fpr64 (current->thread.fpu.fpr, - insn.loongson3_lsdc2_format.rt, value); +set_fpr64 (¤t->thread.fpu.fpr[insn.loongson3_lsdc2_format.rt],0 , value);compute_return_epc (regs);own_fpu (1 );
@@ -221,8 +216,7 @@ static int loongson_cu2_call(struct notifier_block *nfb, unsigned long action,if (res) goto fault; -set_fpr64 (current->thread.fpu.fpr, - insn.loongson3_lsdc2_format.rt, value); +set_fpr64 (¤t->thread.fpu.fpr[insn.loongson3_lsdc2_format.rt],0 , value);compute_return_epc (regs);own_fpu (1 );break ;
@@ -286,8 +280,7 @@ static int loongson_cu2_call(struct notifier_block *nfb, unsigned long action, goto sigbus;lose_fpu (1 ); - value =get_fpr64 (current->thread.fpu.fpr, - insn.loongson3_lsdc2_format.rt); + value =get_fpr64 (¤t->thread.fpu.fpr[insn.loongson3_lsdc2_format.rt],0 );StoreW (addr, value, res);if (res)
@@ -305,8 +298,7 @@ static int loongson_cu2_call(struct notifier_block *nfb, unsigned long action, goto sigbus;lose_fpu (1 ); - value =get_fpr64 (current->thread.fpu.fpr, - insn.loongson3_lsdc2_format.rt); + value =get_fpr64 (¤t->thread.fpu.fpr[insn.loongson3_lsdc2_format.rt],0 );StoreDW (addr, value, res);if (res)
arch/riscv/boot/dts/kendryte/k210.dtsi +4 -2
@@ -95,10 +95,12 @@ sysctl: sysctl@50440000 { #clock-cells = <1>; }; - clint0: interrupt-controller@2000000 { + clint0: clint@2000000 { + #interrupt-cells = <1>; compatible = "riscv,clint0"; reg = <0x2000000 0xC000>; - interrupts-extended = <&cpu0_intc 3>, <&cpu1_intc 3>; + interrupts-extended = <&cpu0_intc 3 &cpu0_intc 7 + &cpu1_intc 3 &cpu1_intc 7>; clocks = <&sysctl K210_CLK_ACLK>; };
arch/riscv/include/asm/ftrace.h +7 -0
@@ -66,6 +66,13 @@ do { \* Let auipc+jalr be the basic *mcount unit*, so we make it 8 bytes here. */ #define MCOUNT_INSN_SIZE 8 + +#ifndef __ASSEMBLY__ +struct dyn_ftrace ; +int ftrace_init_nop (struct module *mod,struct dyn_ftrace *rec); +#define ftrace_init_nop ftrace_init_nop +#endif +#endif #endif /* _ASM_RISCV_FTRACE_H */
arch/riscv/kernel/ftrace.c +19 -0
@@ -97,6 +97,25 @@ int ftrace_make_nop(struct module *mod, struct dyn_ftrace *rec,return __ftrace_modify_call (rec->ip, addr, false); } + +/* +* This is called early on, and isn't wrapped by +* ftrace_arch_code_modify_{prepare,post_process}() and therefor doesn't hold +* text_mutex, which triggers a lockdep failure. SMP isn't running so we could +* just directly poke the text, but it's simpler to just take the lock +* ourselves. +*/ +int ftrace_init_nop (struct module *mod,struct dyn_ftrace *rec) +{ +int out; + +ftrace_arch_code_modify_prepare (); + out =ftrace_make_nop (mod, rec,MCOUNT_ADDR ); +ftrace_arch_code_modify_post_process (); + +return out; +} +int ftrace_update_ftrace_func (ftrace_func_t func) { int ret = __ftrace_modify_call((unsigned long)&ftrace_call,
arch/s390/include/asm/pgtable.h +30 -12
56 lines not on this page · raw message
arch/s390/kernel/setup.c +3 -3
@@ -619,7 +619,7 @@ static struct notifier_block kdump_mem_nb = {/* * Make sure that the area behind memory_end is protected */ -static void reserve_memory_end (void ) +static void __init reserve_memory_end (void ) {if (memory_end_set)memblock_reserve (memory_end,ULONG_MAX );
@@ -628,7 +628,7 @@ static void reserve_memory_end(void)/* * Make sure that oldmem, where the dump is stored, is protected */ -static void reserve_oldmem (void ) +static void __init reserve_oldmem (void ) {#ifdef CONFIG_CRASH_DUMP if (OLDMEM_BASE )
@@ -640,7 +640,7 @@ static void reserve_oldmem(void)/* * Make sure that oldmem, where the dump is stored, is protected */ -static void remove_oldmem (void ) +static void __init remove_oldmem (void ) {#ifdef CONFIG_CRASH_DUMP if (OLDMEM_BASE )
arch/x86/entry/common.c +1 -1
@@ -814,7 +814,7 @@ __visible noinstr void xen_pv_evtchn_do_upcall(struct pt_regs *regs) old_regs =set_irq_regs (regs);instrumentation_begin (); -run_on_irqstack_cond (__xen_pv_evtchn_do_upcall,NULL , regs); +run_on_irqstack_cond (__xen_pv_evtchn_do_upcall, regs);instrumentation_begin ();set_irq_regs (old_regs);
arch/x86/entry/entry_64.S +2 -0
@@ -687,6 +687,8 @@ SYM_CODE_END(.Lbad_gs) * rdx: Function argument (can be NULL if none) */ SYM_FUNC_START(asm_call_on_stack) +SYM_INNER_LABEL(asm_call_sysvec_on_stack, SYM_L_GLOBAL) +SYM_INNER_LABEL(asm_call_irq_on_stack, SYM_L_GLOBAL) /* * Save the frame pointer unconditionally. This allows the ORC * unwinder to handle the stack switch.
arch/x86/include/asm/idtentry.h +1 -1
@@ -246,7 +246,7 @@ __visible noinstr void func(struct pt_regs *regs) \instrumentation_begin (); \irq_enter_rcu (); \kvm_set_cpu_l1tf_flush_l1d (); \ - run_on_irqstack_cond(__##func, regs, regs); \ + run_sysvec_on_irqstack_cond(__##func, regs); \ irq_exit_rcu(); \ instrumentation_end(); \ idtentry_exit_cond_rcu(regs, rcu_exit); \
arch/x86/include/asm/irq_stack.h +62 -8
105 lines not on this page · raw message
arch/x86/kernel/apic/io_apic.c +1 -0
@@ -2243,6 +2243,7 @@ static inline void __init check_timer(void) legacy_pic->init (0 ); legacy_pic->make_irq (0 );apic_write (APIC_LVT0 ,APIC_DM_EXTINT ); + legacy_pic->unmask (0 );unlock_ExtINT_logic ();
arch/x86/kernel/irq.c +1 -1
@@ -227,7 +227,7 @@ static __always_inline void handle_irq(struct irq_desc *desc, struct pt_regs *regs) {if (IS_ENABLED (CONFIG_X86_64 )) -run_on_irqstack_cond (desc->handle_irq, desc, regs); +run_irq_on_irqstack_cond (desc->handle_irq, desc, regs);else __handle_irq (desc, regs); }
arch/x86/kernel/irq_64.c +1 -1
@@ -74,5 +74,5 @@ int irq_init_percpu_irqstack(unsigned int cpu)void do_softirq_own_stack (void ) { -run_on_irqstack_cond (__do_softirq,NULL ,NULL ); +run_on_irqstack_cond (__do_softirq,NULL ); }
arch/x86/kvm/svm/svm.c +7 -1
@@ -2169,6 +2169,12 @@ static int iret_interception(struct vcpu_svm *svm)return 1 ; } +static int invd_interception (struct vcpu_svm *svm) +{ +/* Treat an INVD instruction as a NOP and just skip it. */ +return kvm_skip_emulated_instruction (&svm->vcpu); +} +static int invlpg_interception (struct vcpu_svm *svm) {if (!static_cpu_has (X86_FEATURE_DECODEASSISTS ))
@@ -2758,7 +2764,7 @@ static int (*const svm_exit_handlers[])(struct vcpu_svm *svm) = { [SVM_EXIT_RDPMC] = rdpmc_interception, [SVM_EXIT_CPUID] = cpuid_interception, [SVM_EXIT_IRET] = iret_interception, - [SVM_EXIT_INVD] = emulate_on_interception, + [SVM_EXIT_INVD] = invd_interception, [SVM_EXIT_PAUSE] = pause_interception, [SVM_EXIT_HLT] = halt_interception, [SVM_EXIT_INVLPG] = invlpg_interception,
arch/x86/kvm/x86.c +2 -1
@@ -968,6 +968,7 @@ int kvm_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4)unsigned long old_cr4 =kvm_read_cr4 (vcpu);unsigned long pdptr_bits =X86_CR4_PGE |X86_CR4_PSE |X86_CR4_PAE |X86_CR4_SMEP ; +unsigned long mmu_role_bits = pdptr_bits |X86_CR4_SMAP |X86_CR4_PKE ;if (kvm_valid_cr4 (vcpu, cr4))return 1 ;
@@ -995,7 +996,7 @@ int kvm_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4)if (kvm_x86_ops.set_cr4 (vcpu, cr4))return 1 ; -if (((cr4 ^ old_cr4) & pdptr_bits) || +if (((cr4 ^ old_cr4) & mmu_role_bits) || (!(cr4 &X86_CR4_PCIDE ) && (old_cr4 &X86_CR4_PCIDE )))kvm_mmu_reset_context (vcpu);
arch/x86/lib/usercopy_64.c +1 -1
@@ -120,7 +120,7 @@ long __copy_user_flushcache(void *dst, const void __user *src, unsigned size)*/ if (size <8 ) {if (!IS_ALIGNED (dest,4 ) || size !=4 ) -clean_cache_range (dst,1 ); +clean_cache_range (dst, size); }else {if (!IS_ALIGNED (dest,8 )) { dest =ALIGN (dest, boot_cpu_data.x86_clflush_size);
drivers/atm/eni.c +1 -1
@@ -2239,7 +2239,7 @@ static int eni_init_one(struct pci_dev *pci_dev, rc =dma_set_mask_and_coherent (&pci_dev->dev,DMA_BIT_MASK (32 ));if (rc <0 ) - goto out; + goto err_disable; rc = -ENOMEM ; eni_dev =kmalloc (sizeof (struct eni_dev ),GFP_KERNEL );
drivers/base/node.c +55 -30
118 lines not on this page · raw message
drivers/base/regmap/internal.h +1 -1
@@ -259,7 +259,7 @@ bool regcache_set_val(struct regmap *map, void *base, unsigned int idx,int regcache_lookup_reg (struct regmap *map,unsigned int reg);int _regmap_raw_write (struct regmap *map,unsigned int reg, -const void *val,size_t val_len); +const void *val,size_t val_len,bool noinc);void regmap_async_complete_cb (struct regmap_async *async,int ret);
drivers/base/regmap/regcache.c +1 -1
@@ -717,7 +717,7 @@ static int regcache_sync_block_raw_flush(struct regmap *map, const void **data, map->cache_bypass = true; - ret =_regmap_raw_write (map, base, *data, count * val_bytes); + ret =_regmap_raw_write (map, base, *data, count * val_bytes, false);if (ret)dev_err (map->dev,"Unable to sync registers %#x-%#x. %d\n" , base, cur - map->reg_stride, ret);
drivers/base/regmap/regmap.c +17 -16
@@ -1469,7 +1469,7 @@ static void regmap_set_work_buf_flag_mask(struct regmap *map, int max_bytes, }static int _regmap_raw_write_impl (struct regmap *map,unsigned int reg, -const void *val,size_t val_len) +const void *val,size_t val_len,bool noinc) {struct regmap_range_node *range;unsigned long flags;
@@ -1528,7 +1528,7 @@ static int _regmap_raw_write_impl(struct regmap *map, unsigned int reg, win_residue, val_len / map->format.val_bytes); ret =_regmap_raw_write_impl (map, reg, val, win_residue * - map->format.val_bytes); + map->format.val_bytes, noinc);if (ret !=0 )return ret;
@@ -1542,7 +1542,7 @@ static int _regmap_raw_write_impl(struct regmap *map, unsigned int reg, win_residue = range->window_len - win_offset; } - ret =_regmap_select_page (map, ®, range, val_num); + ret =_regmap_select_page (map, ®, range, noinc ?1 : val_num);if (ret !=0 )return ret; }
@@ -1750,7 +1750,8 @@ static int _regmap_bus_raw_write(void *context, unsigned int reg, map->work_buf + map->format.reg_bytes + map->format.pad_bytes, - map->format.val_bytes); + map->format.val_bytes, + false); }static inline void *_regmap_map_get_context (struct regmap *map)
@@ -1844,7 +1845,7 @@ int regmap_write_async(struct regmap *map, unsigned int reg, unsigned int val)EXPORT_SYMBOL_GPL (regmap_write_async);int _regmap_raw_write (struct regmap *map,unsigned int reg, -const void *val,size_t val_len) +const void *val,size_t val_len,bool noinc) {size_t val_bytes = map->format.val_bytes;size_t val_count = val_len / val_bytes;
@@ -1865,7 +1866,7 @@ int _regmap_raw_write(struct regmap *map, unsigned int reg,/* Write as many bytes as possible with chunk_size */ for (i =0 ; i < chunk_count; i++) { - ret =_regmap_raw_write_impl (map, reg, val, chunk_bytes); + ret =_regmap_raw_write_impl (map, reg, val, chunk_bytes, noinc);if (ret)return ret;
@@ -1876,7 +1877,7 @@ int _regmap_raw_write(struct regmap *map, unsigned int reg,/* Write remaining bytes */ if (val_len) - ret =_regmap_raw_write_impl (map, reg, val, val_len); + ret =_regmap_raw_write_impl (map, reg, val, val_len, noinc);return ret; }
@@ -1909,7 +1910,7 @@ int regmap_raw_write(struct regmap *map, unsigned int reg, map->lock (map->lock_arg); - ret =_regmap_raw_write (map, reg, val, val_len); + ret =_regmap_raw_write (map, reg, val, val_len, false); map->unlock (map->lock_arg);
@@ -1967,7 +1968,7 @@ int regmap_noinc_write(struct regmap *map, unsigned int reg, write_len = map->max_raw_write; else write_len = val_len; - ret =_regmap_raw_write (map, reg, val, write_len); + ret =_regmap_raw_write (map, reg, val, write_len, true);if (ret) goto out_unlock; val = ((u8 *)val) + write_len;
@@ -2444,7 +2445,7 @@ int regmap_raw_write_async(struct regmap *map, unsigned int reg, map->async = true; - ret =_regmap_raw_write (map, reg, val, val_len); + ret =_regmap_raw_write (map, reg, val, val_len, false); map->async = false;
@@ -2455,7 +2456,7 @@ int regmap_raw_write_async(struct regmap *map, unsigned int reg,EXPORT_SYMBOL_GPL (regmap_raw_write_async);static int _regmap_raw_read (struct regmap *map,unsigned int reg,void *val, -unsigned int val_len) +unsigned int val_len,bool noinc) {struct regmap_range_node *range;int ret;
@@ -2468,7 +2469,7 @@ static int _regmap_raw_read(struct regmap *map, unsigned int reg, void *val, range =_regmap_range_lookup (map, reg);if (range) { ret =_regmap_select_page (map, ®, range, - val_len / map->format.val_bytes); + noinc ?1 : val_len / map->format.val_bytes);if (ret !=0 )return ret; }
@@ -2506,7 +2507,7 @@ static int _regmap_bus_read(void *context, unsigned int reg,if (!map->format.parse_val)return -EINVAL ; - ret =_regmap_raw_read (map, reg, work_val, map->format.val_bytes); + ret =_regmap_raw_read (map, reg, work_val, map->format.val_bytes, false);if (ret ==0 ) *val = map->format.parse_val (work_val);
@@ -2622,7 +2623,7 @@ int regmap_raw_read(struct regmap *map, unsigned int reg, void *val,/* Read bytes that fit into whole chunks */ for (i =0 ; i < chunk_count; i++) { - ret =_regmap_raw_read (map, reg, val, chunk_bytes); + ret =_regmap_raw_read (map, reg, val, chunk_bytes, false);if (ret !=0 ) goto out;
@@ -2633,7 +2634,7 @@ int regmap_raw_read(struct regmap *map, unsigned int reg, void *val,/* Read remaining bytes */ if (val_len) { - ret =_regmap_raw_read (map, reg, val, val_len); + ret =_regmap_raw_read (map, reg, val, val_len, false);if (ret !=0 ) goto out; }
@@ -2708,7 +2709,7 @@ int regmap_noinc_read(struct regmap *map, unsigned int reg, read_len = map->max_raw_read; else read_len = val_len; - ret =_regmap_raw_read (map, reg, val, read_len); + ret =_regmap_raw_read (map, reg, val, read_len, true);if (ret) goto out_unlock; val = ((u8 *)val) + read_len;
drivers/clk/versatile/clk-impd1.c +3 -1
@@ -109,8 +109,10 @@ static int integrator_impd1_clk_probe(struct platform_device *pdev)for_each_available_child_of_node (np, child) { ret =integrator_impd1_clk_spawn (dev, np, child); -if (ret) +if (ret) { +of_node_put (child);break ; + } }return ret;
drivers/clocksource/h8300_timer8.c +1 -1
@@ -169,7 +169,7 @@ static int __init h8300_8timer_init(struct device_node *node)return PTR_ERR (clk); } - ret =ENXIO ; + ret = -ENXIO ; base =of_iomap (node,0 );if (!base) {pr_err ("failed to map registers for clockevent\n" );
drivers/clocksource/timer-ti-dm-systimer.c +23 -21
75 lines not on this page · raw message
drivers/devfreq/tegra30-devfreq.c +3 -1
@@ -836,7 +836,8 @@ static int tegra_devfreq_probe(struct platform_device *pdev) rate =clk_round_rate (tegra->emc_clock,ULONG_MAX );if (rate <0 ) {dev_err (&pdev->dev,"Failed to round clock rate: %ld\n" , rate); -return rate; + err = rate; + goto disable_clk; } tegra->max_freq = rate /KHZ ;
@@ -897,6 +898,7 @@ static int tegra_devfreq_probe(struct platform_device *pdev)dev_pm_opp_remove_all_dynamic (&pdev->dev);reset_control_reset (tegra->reset); +disable_clk:clk_disable_unprepare (tegra->clock);return err;
drivers/dma-buf/dma-buf.c +2 -0
@@ -59,6 +59,8 @@ static void dma_buf_release(struct dentry *dentry)struct dma_buf *dmabuf; dmabuf = dentry->d_fsdata; +if (unlikely (!dmabuf)) +return ;BUG_ON (dmabuf->vmapping_counter);
drivers/edac/ghes_edac.c +4 -0
@@ -469,6 +469,7 @@ int ghes_edac_register(struct ghes *ghes, struct device *dev)if (!force_load && idx <0 )return -ENODEV ; }else { + force_load = true; idx =0 ; }
@@ -566,6 +567,9 @@ void ghes_edac_unregister(struct ghes *ghes)struct mem_ctl_info *mci;unsigned long flags; +if (!force_load) +return ; +mutex_lock (&ghes_reg_mutex);if (!refcount_dec_and_test (&ghes_refcount))
drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c +2 -0
@@ -1177,6 +1177,8 @@ static int stop_cpsch(struct device_queue_manager *dqm) dqm->sched_running = false;dqm_unlock (dqm); +pm_release_ib (&dqm->packets); +kfd_gtt_sa_free (dqm->dev, dqm->fence_mem);pm_uninit (&dqm->packets, hanging);
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +10 -22
@@ -5257,19 +5257,6 @@ static void dm_crtc_helper_disable(struct drm_crtc *crtc) { } -static bool does_crtc_have_active_cursor (struct drm_crtc_state *new_crtc_state) -{ -struct drm_device *dev = new_crtc_state->crtc->dev; -struct drm_plane *plane; - -drm_for_each_plane_mask (plane, dev, new_crtc_state->plane_mask) { -if (plane->type ==DRM_PLANE_TYPE_CURSOR ) -return true; - } - -return false; -} -static int count_crtc_active_planes (struct drm_crtc_state *new_crtc_state) {struct drm_atomic_state *state = new_crtc_state->state;
@@ -5349,19 +5336,20 @@ static int dm_crtc_helper_atomic_check(struct drm_crtc *crtc,return ret; } -/* In some use cases, like reset, no stream is attached */ -if (!dm_crtc_state->stream) -return 0 ; -/* -* We want at least one hardware plane enabled to use -* the stream with a cursor enabled. +* We require the primary plane to be enabled whenever the CRTC is, otherwise +* drm_mode_cursor_universal may end up trying to enable the cursor plane while all other +* planes are disabled, which is not supported by the hardware. And there is legacy +* userspace which stops using the HW cursor altogether in response to the resulting EINVAL. */ -if (state->enable && state->active && -does_crtc_have_active_cursor (state) && - dm_crtc_state->active_planes ==0 ) +if (state->enable && + !(state->plane_mask &drm_plane_mask (crtc->primary)))return -EINVAL ; +/* In some use cases, like reset, no stream is attached */ +if (!dm_crtc_state->stream) +return 0 ; +if (dc_validate_stream (dc, dm_crtc_state->stream) ==DC_OK )return 0 ;
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c +2 -2
@@ -409,8 +409,8 @@ struct _vcs_dpi_soc_bounding_box_st dcn2_0_nv14_soc = { }, }, .num_states = 5, - .sr_exit_time_us = 8.6, - .sr_enter_plus_exit_time_us = 10.9, + .sr_exit_time_us = 11.6, + .sr_enter_plus_exit_time_us = 13.9, .urgent_latency_us = 4.0, .urgent_latency_pixel_data_only_us = 4.0, .urgent_latency_pixel_mixed_with_vm_data_us = 4.0,
drivers/gpu/drm/amd/display/modules/hdcp/hdcp_log.h +1 -1
@@ -27,7 +27,7 @@#define MOD_HDCP_LOG_H_ #ifdef CONFIG_DRM_AMD_DC_HDCP -#define HDCP_LOG_ERR (hdcp, ...) DRM_WARN(__VA_ARGS__) +#define HDCP_LOG_ERR (hdcp, ...) DRM_DEBUG_KMS(__VA_ARGS__)#define HDCP_LOG_VER (hdcp, ...) DRM_DEBUG_KMS(__VA_ARGS__)#define HDCP_LOG_FSM (hdcp, ...) DRM_DEBUG_KMS(__VA_ARGS__)#define HDCP_LOG_TOP (hdcp, ...) pr_debug("[HDCP_TOP]:"__VA_ARGS__)
drivers/gpu/drm/amd/display/modules/hdcp/hdcp_psp.c +1 -1
@@ -88,7 +88,7 @@ enum mod_hdcp_status mod_hdcp_add_display_to_topology(struct mod_hdcp *hdcp,enum mod_hdcp_status status =MOD_HDCP_STATUS_SUCCESS ;if (!psp->dtm_context.dtm_initialized) { -DRM_ERROR ("Failed to add display topology, DTM TA is not initialized." ); +DRM_INFO ("Failed to add display topology, DTM TA is not initialized." ); display->state =MOD_HDCP_DISPLAY_INACTIVE ;return MOD_HDCP_STATUS_FAILURE ; }
drivers/gpu/drm/sun4i/sun8i_csc.h +1 -1
@@ -12,7 +12,7 @@ struct sun8i_mixer;/* VI channel CSC units offsets */ #define CCSC00_OFFSET 0xAA050 -#define CCSC01_OFFSET 0xFA000 +#define CCSC01_OFFSET 0xFA050#define CCSC10_OFFSET 0xA0000#define CCSC11_OFFSET 0xF0000
drivers/gpu/drm/vc4/vc4_hdmi.c +1 -0
@@ -1117,6 +1117,7 @@ static int vc4_hdmi_audio_init(struct vc4_hdmi *hdmi) card->num_links =1 ; card->name ="vc4-hdmi" ; card->dev = dev; + card->owner =THIS_MODULE ;/* * Be careful, snd_soc_register_card() calls dev_set_drvdata() and
drivers/i2c/busses/i2c-aspeed.c +2 -0
@@ -69,6 +69,7 @@* These share bit definitions, so use the same values for the enable & * status bits. */ +#define ASPEED_I2CD_INTR_RECV_MASK 0xf000ffff#define ASPEED_I2CD_INTR_SDA_DL_TIMEOUT BIT(14)#define ASPEED_I2CD_INTR_BUS_RECOVER_DONE BIT(13)#define ASPEED_I2CD_INTR_SLAVE_MATCH BIT(7)
@@ -604,6 +605,7 @@ static irqreturn_t aspeed_i2c_bus_irq(int irq, void *dev_id)writel (irq_received & ~ASPEED_I2CD_INTR_RX_DONE , bus->base +ASPEED_I2C_INTR_STS_REG );readl (bus->base +ASPEED_I2C_INTR_STS_REG ); + irq_received &=ASPEED_I2CD_INTR_RECV_MASK ; irq_remaining = irq_received;#if IS_ENABLED (CONFIG_I2C_SLAVE )
drivers/i2c/busses/i2c-mt65xx.c +1 -1
@@ -736,7 +736,7 @@ static int mtk_i2c_set_speed(struct mtk_i2c *i2c, unsigned int parent_clk)for (clk_div =1 ; clk_div <= max_clk_div; clk_div++) { clk_src = parent_clk / clk_div; -if (target_speed >I2C_MAX_FAST_MODE_FREQ ) { +if (target_speed >I2C_MAX_FAST_MODE_PLUS_FREQ ) {/* Set master code speed register */ ret = mtk_i2c_calculate_speed(i2c, clk_src, I2C_MAX_FAST_MODE_FREQ,
drivers/i2c/i2c-core-base.c +1 -1
@@ -1336,8 +1336,8 @@ static int i2c_register_adapter(struct i2c_adapter *adap)/* create pre-declared device nodes */ of_i2c_register_devices (adap); -i2c_acpi_register_devices (adap);i2c_acpi_install_space_handler (adap); +i2c_acpi_register_devices (adap);if (adap->nr < __i2c_first_dynamic_bus_num)i2c_scan_static_board_info (adap);
drivers/infiniband/core/device.c +4 -2
@@ -1282,6 +1282,8 @@ static void disable_device(struct ib_device *device)remove_client_context (device, cid); } +ib_cq_pool_destroy (device); +/* Pairs with refcount_set in enable_device */ ib_device_put (device);wait_for_completion (&device->unreg_completion);
@@ -1325,6 +1327,8 @@ static int enable_device_and_get(struct ib_device *device) goto out; } +ib_cq_pool_init (device); +down_read (&clients_rwsem); xa_for_each_marked (&clients, index, client, CLIENT_REGISTERED) { ret =add_client_context (device, client);
@@ -1397,7 +1401,6 @@ int ib_register_device(struct ib_device *device, const char *name) goto dev_cleanup; } -ib_cq_pool_init (device); ret =enable_device_and_get (device);dev_set_uevent_suppress (&device->dev, false);/* Mark for userspace that device is ready */
@@ -1452,7 +1455,6 @@ static void __ib_unregister_device(struct ib_device *ib_dev) goto out;disable_device (ib_dev); -ib_cq_pool_destroy (ib_dev);/* Expedite removing unregistered pointers from the hash table */ free_netdevs (ib_dev);
drivers/md/dm.c +2 -21
@@ -1728,23 +1728,6 @@ static blk_qc_t __process_bio(struct mapped_device *md, struct dm_table *map,return ret; } -static void dm_queue_split (struct mapped_device *md,struct dm_target *ti,struct bio **bio) -{ -unsigned len, sector_count; - - sector_count =bio_sectors (*bio); - len =min_t (sector_t,max_io_len ((*bio)->bi_iter.bi_sector, ti), sector_count); - -if (sector_count > len) { -struct bio *split =bio_split (*bio, len,GFP_NOIO , &md->queue->bio_split); - -bio_chain (split, *bio); -trace_block_split (md->queue, split, (*bio)->bi_iter.bi_sector); -generic_make_request (*bio); - *bio = split; - } -} -static blk_qc_t dm_process_bio (struct mapped_device *md,struct dm_table *map,struct bio *bio) {
@@ -1772,14 +1755,12 @@ static blk_qc_t dm_process_bio(struct mapped_device *md,if (current->bio_list) {if (is_abnormal_io (bio))blk_queue_split (md->queue, &bio); -else -dm_queue_split (md, ti, &bio); +/* regular IO is split by __split_and_process_bio */ }if (dm_get_md_type (md) ==DM_TYPE_NVME_BIO_BASED )return __process_bio (md, map, bio, ti); -else -return __split_and_process_bio (md, map, bio); +return __split_and_process_bio (md, map, bio); }static blk_qc_t dm_make_request (struct request_queue *q,struct bio *bio)
drivers/media/cec/core/cec-adap.c +1 -1
@@ -1199,7 +1199,7 @@ void cec_received_msg_ts(struct cec_adapter *adap,/* Cancel the pending timeout work */ if (!cancel_delayed_work (&data->work)) {mutex_unlock (&adap->lock); -flush_scheduled_work (); +cancel_delayed_work_sync (&data->work);mutex_lock (&adap->lock); }/*
drivers/net/ethernet/intel/igc/igc.h +8 -12
@@ -298,18 +298,14 @@ extern char igc_driver_version[];#define IGC_RX_HDR_LEN IGC_RXBUFFER_256/* Transmit and receive latency (for PTP timestamps) */ -/* FIXME: These values were estimated using the ones that i225 has as -* basis, they seem to provide good numbers with ptp4l/phc2sys, but we -* need to confirm them. -*/ -#define IGC_I225_TX_LATENCY_10 9542 -#define IGC_I225_TX_LATENCY_100 1024 -#define IGC_I225_TX_LATENCY_1000 178 -#define IGC_I225_TX_LATENCY_2500 64 -#define IGC_I225_RX_LATENCY_10 20662 -#define IGC_I225_RX_LATENCY_100 2213 -#define IGC_I225_RX_LATENCY_1000 448 -#define IGC_I225_RX_LATENCY_2500 160 +#define IGC_I225_TX_LATENCY_10 240 +#define IGC_I225_TX_LATENCY_100 58 +#define IGC_I225_TX_LATENCY_1000 80 +#define IGC_I225_TX_LATENCY_2500 1325 +#define IGC_I225_RX_LATENCY_10 6450 +#define IGC_I225_RX_LATENCY_100 185 +#define IGC_I225_RX_LATENCY_1000 300 +#define IGC_I225_RX_LATENCY_2500 1485/* RX and TX descriptor control thresholds. * PTHRESH - MAC will consider prefetch if it has fewer than this number of
drivers/net/ethernet/intel/igc/igc_ptp.c +19 -0
@@ -471,12 +471,31 @@ static void igc_ptp_tx_hwtstamp(struct igc_adapter *adapter)struct sk_buff *skb = adapter->ptp_tx_skb;struct skb_shared_hwtstamps shhwtstamps;struct igc_hw *hw = &adapter->hw; +int adjust =0 ;u64 regval; regval =rd32 (IGC_TXSTMPL ); regval |= (u64 )rd32 (IGC_TXSTMPH ) <<32 ;igc_ptp_systim_to_hwtstamp (adapter, &shhwtstamps, regval); +switch (adapter->link_speed) { +case SPEED_10 : + adjust =IGC_I225_TX_LATENCY_10 ; +break ; +case SPEED_100 : + adjust =IGC_I225_TX_LATENCY_100 ; +break ; +case SPEED_1000 : + adjust =IGC_I225_TX_LATENCY_1000 ; +break ; +case SPEED_2500 : + adjust =IGC_I225_TX_LATENCY_2500 ; +break ; + } + + shhwtstamps.hwtstamp = +ktime_add_ns (shhwtstamps.hwtstamp, adjust); +/* Clear the lock early before calling skb_tstamp_tx so that * applications are not woken up before the lock bit is clear. We use * a copy of the skb pointer to ensure other threads can't change it
drivers/net/ethernet/mellanox/mlx5/core/en/port.c +2 -5
@@ -487,11 +487,8 @@ bool mlx5e_fec_in_caps(struct mlx5_core_dev *dev, int fec_policy)int err;int i; -if (!MLX5_CAP_GEN (dev, pcam_reg)) -return -EOPNOTSUPP ; - -if (!MLX5_CAP_PCAM_REG (dev, pplm)) -return -EOPNOTSUPP ; +if (!MLX5_CAP_GEN (dev, pcam_reg) || !MLX5_CAP_PCAM_REG (dev, pplm)) +return false;MLX5_SET (pplm_reg, in, local_port,1 ); err =mlx5_core_access_reg (dev, in, sz, out, sz,MLX5_REG_PPLM ,0 ,0 );
drivers/net/ethernet/qlogic/qed/qed_dev.c +10 -1
@@ -4191,7 +4191,8 @@ static int qed_hw_get_nvm_info(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt) cdev->mf_bits =BIT (QED_MF_LLH_MAC_CLSS ) |BIT (QED_MF_LLH_PROTO_CLSS ) |BIT (QED_MF_LL2_NON_UNICAST ) | -BIT (QED_MF_INTER_PF_SWITCH ); +BIT (QED_MF_INTER_PF_SWITCH ) | +BIT (QED_MF_DISABLE_ARFS );break ;case NVM_CFG1_GLOB_MF_MODE_DEFAULT : cdev->mf_bits = BIT(QED_MF_LLH_MAC_CLSS) |
@@ -4204,6 +4205,14 @@ static int qed_hw_get_nvm_info(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)DP_INFO (p_hwfn,"Multi function mode is 0x%lx\n" , cdev->mf_bits); + +/* In CMT the PF is unknown when the GFS block processes the +* packet. Therefore cannot use searcher as it has a per PF +* database, and thus ARFS must be disabled. +* +*/ +if (QED_IS_CMT (cdev)) + cdev->mf_bits |=BIT (QED_MF_DISABLE_ARFS ); } DP_INFO(p_hwfn, "Multi function mode is 0x%lx\n",
drivers/net/ethernet/qlogic/qed/qed_l2.c +3 -0
@@ -2001,6 +2001,9 @@ void qed_arfs_mode_configure(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt, struct qed_arfs_config_params *p_cfg_params) { + if (test_bit(QED_MF_DISABLE_ARFS, &p_hwfn->cdev->mf_bits)) + return; +if (p_cfg_params->mode !=QED_FILTER_CONFIG_MODE_DISABLE ) { qed_gft_config(p_hwfn, p_ptt, p_hwfn->rel_pf_id, p_cfg_params->tcp,
drivers/net/ethernet/qlogic/qed/qed_main.c +2 -0
@@ -289,6 +289,8 @@ int qed_fill_dev_info(struct qed_dev *cdev, dev_info->fw_eng =FW_ENGINEERING_VERSION ; dev_info->b_inter_pf_switch =test_bit (QED_MF_INTER_PF_SWITCH , &cdev->mf_bits); +if (!test_bit (QED_MF_DISABLE_ARFS , &cdev->mf_bits)) + dev_info->b_arfs_capable = true; dev_info->tx_switching = true;if (hw_info->b_wol_support ==QED_WOL_SUPPORT_PME )
drivers/net/ethernet/qlogic/qed/qed_sriov.c +1 -0
@@ -97,6 +97,7 @@ static int qed_sp_vf_start(struct qed_hwfn *p_hwfn, struct qed_vf_info *p_vf) p_ramrod->personality =PERSONALITY_ETH ;break ;case QED_PCI_ETH_ROCE : +case QED_PCI_ETH_IWARP : p_ramrod->personality =PERSONALITY_RDMA_AND_ETH ;break ;default :
drivers/net/ethernet/qlogic/qede/qede_filter.c +3 -0
@@ -336,6 +336,9 @@ int qede_alloc_arfs(struct qede_dev *edev) {int i; +if (!edev->dev_info.common.b_arfs_capable) +return -EINVAL ; + edev->arfs =vzalloc (sizeof (*edev->arfs));if (!edev->arfs)return -ENOMEM ;
drivers/net/ethernet/qlogic/qede/qede_main.c +5 -6
@@ -827,7 +827,7 @@ static void qede_init_ndev(struct qede_dev *edev)NETIF_F_IP_CSUM |NETIF_F_IPV6_CSUM |NETIF_F_TSO |NETIF_F_TSO6 |NETIF_F_HW_TC ; -if (!IS_VF (edev) && edev->dev_info.common.num_hwfns ==1 ) +if (edev->dev_info.common.b_arfs_capable) hw_features |=NETIF_F_NTUPLE ; if (edev->dev_info.common.vxlan_enable ||
@@ -2278,7 +2278,7 @@ static void qede_unload(struct qede_dev *edev, enum qede_unload_mode mode,qede_vlan_mark_nonconfigured (edev); edev->ops->fastpath_stop (edev->cdev); -if (!IS_VF (edev) && edev->dev_info.common.num_hwfns ==1 ) { +if (edev->dev_info.common.b_arfs_capable) {qede_poll_for_freeing_arfs_filters (edev);qede_free_arfs (edev); }
@@ -2345,10 +2345,9 @@ static int qede_load(struct qede_dev *edev, enum qede_load_mode mode,if (rc) goto err2; -if (!IS_VF (edev) && edev->dev_info.common.num_hwfns ==1 ) { - rc =qede_alloc_arfs (edev); -if (rc) -DP_NOTICE (edev,"aRFS memory allocation failed\n" ); +if (qede_alloc_arfs (edev)) { + edev->ndev->features &= ~NETIF_F_NTUPLE ; + edev->dev_info.common.b_arfs_capable = false; }qede_napi_add_enable (edev);
drivers/net/hyperv/netvsc_drv.c +1 -10
@@ -2576,7 +2576,6 @@ static int netvsc_resume(struct hv_device *dev)struct net_device *net =hv_get_drvdata (dev);struct net_device_context *net_device_ctx;struct netvsc_device_info *device_info; -struct net_device *vf_netdev;int ret;rtnl_lock ();
@@ -2589,15 +2588,6 @@ static int netvsc_resume(struct hv_device *dev)netvsc_devinfo_put (device_info); net_device_ctx->saved_netvsc_dev_info =NULL ; -/* A NIC driver (e.g. mlx5) may keep the VF network interface across -* hibernation, but here the data path is implicitly switched to the -* netvsc NIC since the vmbus channel is closed and re-opened, so -* netvsc_vf_changed() must be used to switch the data path to the VF. -*/ - vf_netdev =rtnl_dereference (net_device_ctx->vf_netdev); -if (vf_netdev &&netvsc_vf_changed (vf_netdev) !=NOTIFY_OK ) - ret = -EINVAL ; -rtnl_unlock ();return ret;
@@ -2658,6 +2648,7 @@ static int netvsc_netdev_event(struct notifier_block *this,return netvsc_unregister_vf (event_dev);case NETDEV_UP :case NETDEV_DOWN : +case NETDEV_CHANGE :return netvsc_vf_changed (event_dev);default :return NOTIFY_DONE ;
drivers/net/ieee802154/adf7242.c +3 -1
@@ -882,7 +882,9 @@ static int adf7242_rx(struct adf7242_local *lp)int ret;u8 lqi, len_u8, *data; -adf7242_read_reg (lp,0 , &len_u8); + ret =adf7242_read_reg (lp,0 , &len_u8); +if (ret) +return ret; len = len_u8;
drivers/net/ieee802154/ca8210.c +1 -0
@@ -2925,6 +2925,7 @@ static int ca8210_dev_com_init(struct ca8210_priv *priv) );if (!priv->irq_workqueue) {dev_crit (&priv->spi->dev,"alloc of irq_workqueue failed!\n" ); +destroy_workqueue (priv->mlme_workqueue);return -ENOMEM ; }
drivers/net/wireless/marvell/mwifiex/fw.h +1 -1
@@ -954,7 +954,7 @@ struct mwifiex_tkip_param {struct mwifiex_aes_param {u8 pn[WPA_PN_SIZE ];__le16 key_len; -u8 key[WLAN_KEY_LEN_CCMP ]; +u8 key[WLAN_KEY_LEN_CCMP_256 ]; } __packed;struct mwifiex_wapi_param {
drivers/net/wireless/marvell/mwifiex/sta_cmdresp.c +2 -2
@@ -619,7 +619,7 @@ static int mwifiex_ret_802_11_key_material_v2(struct mwifiex_private *priv, key_v2 = &resp->params.key_material_v2; len =le16_to_cpu (key_v2->key_param_set.key_params.aes.key_len); -if (len >WLAN_KEY_LEN_CCMP ) +if (len >sizeof (key_v2->key_param_set.key_params.aes.key))return -EINVAL ;if (le16_to_cpu (key_v2->action) == HostCmd_ACT_GEN_SET) {
@@ -635,7 +635,7 @@ static int mwifiex_ret_802_11_key_material_v2(struct mwifiex_private *priv,return 0 ;memset (priv->aes_key_v2.key_param_set.key_params.aes.key,0 , -WLAN_KEY_LEN_CCMP ); +sizeof (key_v2->key_param_set.key_params.aes.key)); priv->aes_key_v2.key_param_set.key_params.aes.key_len =cpu_to_le16 (len); memcpy(priv->aes_key_v2.key_param_set.key_params.aes.key,
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +2 -1
@@ -2014,7 +2014,8 @@ static int mt7615_load_n9(struct mt7615_dev *dev, const char *name)sizeof (dev->mt76.hw->wiphy->fw_version), "%.10s-%.15s", hdr->fw_ver, hdr->build_date); -if (!strncmp (hdr->fw_ver,"2.0" ,sizeof (hdr->fw_ver))) { +if (!is_mt7615 (&dev->mt76) && + !strncmp (hdr->fw_ver,"2.0" ,sizeof (hdr->fw_ver))) { dev->fw_ver =MT7615_FIRMWARE_V2 ; dev->mcu_ops = &sta_update_ops; }else {
drivers/nvme/host/Kconfig +1 -0
@@ -73,6 +73,7 @@ config NVME_TCP depends on INET depends on BLK_DEV_NVME select NVME_FABRICS + select CRYPTO select CRYPTO_CRC32C help This provides support for the NVMe over Fabrics protocol using
drivers/regulator/axp20x-regulator.c +4 -3
@@ -42,8 +42,9 @@#define AXP20X_DCDC2_V_OUT_MASK GENMASK(5, 0)#define AXP20X_DCDC3_V_OUT_MASK GENMASK(7, 0) -#define AXP20X_LDO24_V_OUT_MASK GENMASK(7, 4) +#define AXP20X_LDO2_V_OUT_MASK GENMASK(7, 4)#define AXP20X_LDO3_V_OUT_MASK GENMASK(6, 0) +#define AXP20X_LDO4_V_OUT_MASK GENMASK(3, 0)#define AXP20X_LDO5_V_OUT_MASK GENMASK(7, 4)#define AXP20X_PWR_OUT_EXTEN_MASK BIT_MASK(0)
@@ -542,14 +543,14 @@ static const struct regulator_desc axp20x_regulators[] = { AXP20X_PWR_OUT_CTRL, AXP20X_PWR_OUT_DCDC3_MASK),AXP_DESC_FIXED (AXP20X ,LDO1 ,"ldo1" ,"acin" ,1300 ),AXP_DESC (AXP20X ,LDO2 ,"ldo2" ,"ldo24in" ,1800 ,3300 ,100 , -AXP20X_LDO24_V_OUT ,AXP20X_LDO24_V_OUT_MASK , +AXP20X_LDO24_V_OUT ,AXP20X_LDO2_V_OUT_MASK ,AXP20X_PWR_OUT_CTRL ,AXP20X_PWR_OUT_LDO2_MASK ),AXP_DESC (AXP20X ,LDO3 ,"ldo3" ,"ldo3in" ,700 ,3500 ,25 ,AXP20X_LDO3_V_OUT ,AXP20X_LDO3_V_OUT_MASK ,AXP20X_PWR_OUT_CTRL ,AXP20X_PWR_OUT_LDO3_MASK ),AXP_DESC_RANGES (AXP20X ,LDO4 ,"ldo4" ,"ldo24in" , axp20x_ldo4_ranges,AXP20X_LDO4_V_OUT_NUM_VOLTAGES , -AXP20X_LDO24_V_OUT ,AXP20X_LDO24_V_OUT_MASK , +AXP20X_LDO24_V_OUT ,AXP20X_LDO4_V_OUT_MASK ,AXP20X_PWR_OUT_CTRL ,AXP20X_PWR_OUT_LDO4_MASK ), AXP_DESC_IO(AXP20X, LDO5, "ldo5", "ldo5in", 1800, 3300, 100, AXP20X_LDO5_V_OUT, AXP20X_LDO5_V_OUT_MASK,
drivers/s390/block/dasd_fba.c +8 -1
@@ -40,6 +40,7 @@MODULE_LICENSE ("GPL" );static struct dasd_discipline dasd_fba_discipline; +static void *dasd_fba_zero_page;struct dasd_fba_private {struct dasd_fba_characteristics rdc_data;
@@ -270,7 +271,7 @@ static void ccw_write_zero(struct ccw1 *ccw, int count) ccw->cmd_code =DASD_FBA_CCW_WRITE ; ccw->flags |=CCW_FLAG_SLI ; ccw->count = count; - ccw->cda = (__u32 ) (addr_t )page_to_phys (ZERO_PAGE (0 )); + ccw->cda = (__u32 ) (addr_t ) dasd_fba_zero_page; }/*
@@ -830,6 +831,11 @@ dasd_fba_init(void)int ret;ASCEBC (dasd_fba_discipline.ebcname,4 ); + + dasd_fba_zero_page = (void *)get_zeroed_page (GFP_KERNEL |GFP_DMA ); +if (!dasd_fba_zero_page) +return -ENOMEM ; + ret =ccw_driver_register (&dasd_fba_driver);if (!ret)wait_for_device_probe ();
@@ -841,6 +847,7 @@ static void __exitdasd_fba_cleanup (void) {ccw_driver_unregister (&dasd_fba_driver); +free_page ((unsigned long )dasd_fba_zero_page); }module_init (dasd_fba_init);
drivers/s390/crypto/zcrypt_api.c +2 -1
@@ -1429,7 +1429,8 @@ static long zcrypt_unlocked_ioctl(struct file *filp, unsigned int cmd,if (!reqcnt)return -ENOMEM ;zcrypt_perdev_reqcnt (reqcnt,AP_DEVICES ); -if (copy_to_user ((int __user *) arg, reqcnt,sizeof (reqcnt))) +if (copy_to_user ((int __user *) arg, reqcnt, +sizeof (u32) *AP_DEVICES )) rc = -EFAULT ;kfree (reqcnt);return rc;
drivers/scsi/lpfc/lpfc_hbadisc.c +52 -24
125 lines not on this page · raw message
drivers/spi/spi-bcm-qspi.c +1 -1
@@ -1295,7 +1295,7 @@ static const struct of_device_id bcm_qspi_of_match[] = { }, { .compatible = "brcm,spi-bcm-qspi", - .data = &bcm_qspi_rev_data, + .data = &bcm_qspi_no_rev_data, }, { .compatible = "brcm,spi-bcm7216-qspi",
drivers/spi/spi-fsl-dspi.c +3 -3
@@ -174,17 +174,17 @@ static const struct fsl_dspi_devtype_data devtype_data[] = { .fifo_size = 16, }, [LS2080A] = { - .trans_mode = DSPI_DMA_MODE, + .trans_mode = DSPI_XSPI_MODE, .max_clock_factor = 8, .fifo_size = 4, }, [LS2085A] = { - .trans_mode = DSPI_DMA_MODE, + .trans_mode = DSPI_XSPI_MODE, .max_clock_factor = 8, .fifo_size = 4, }, [LX2160A] = { - .trans_mode = DSPI_DMA_MODE, + .trans_mode = DSPI_XSPI_MODE, .max_clock_factor = 8, .fifo_size = 4, },
fs/btrfs/disk-io.c +5 -6
@@ -636,16 +636,15 @@ static int btree_readpage_end_io_hook(struct btrfs_io_bio *io_bio,csum_tree_block (eb, result);if (memcmp_extent_buffer (eb, result,0 , csum_size)) { -u32 val; -u32 found =0 ; - -memcpy (&found, result, csum_size); +u8 val[BTRFS_CSUM_SIZE ] = {0 };read_extent_buffer (eb, &val,0 , csum_size);btrfs_warn_rl (fs_info, -"%s checksum verify failed on %llu wanted %x found %x level %d" , +"%s checksum verify failed on %llu wanted " CSUM_FMT " found " CSUM_FMT " level %d" , fs_info->sb->s_id, eb->start, - val, found,btrfs_header_level (eb)); +CSUM_FMT_VALUE (csum_size, val), +CSUM_FMT_VALUE (csum_size, result), +btrfs_header_level (eb)); ret = -EUCLEAN ; goto err; }
fs/btrfs/sysfs.c +10 -6
@@ -1165,10 +1165,12 @@ int btrfs_sysfs_remove_devices_dir(struct btrfs_fs_devices *fs_devices, disk_kobj->name); } -kobject_del (&one_device->devid_kobj); -kobject_put (&one_device->devid_kobj); +if (one_device->devid_kobj.state_initialized) { +kobject_del (&one_device->devid_kobj); +kobject_put (&one_device->devid_kobj); -wait_for_completion (&one_device->kobj_unregister); +wait_for_completion (&one_device->kobj_unregister); + }return 0 ; }
@@ -1181,10 +1183,12 @@ int btrfs_sysfs_remove_devices_dir(struct btrfs_fs_devices *fs_devices,sysfs_remove_link (fs_devices->devices_kobj, disk_kobj->name); } -kobject_del (&one_device->devid_kobj); -kobject_put (&one_device->devid_kobj); +if (one_device->devid_kobj.state_initialized) { +kobject_del (&one_device->devid_kobj); +kobject_put (&one_device->devid_kobj); -wait_for_completion (&one_device->kobj_unregister); +wait_for_completion (&one_device->kobj_unregister); + } }return 0 ;
fs/io_uring.c +6 -2
@@ -3056,8 +3056,6 @@ static int __io_openat_prep(struct io_kiocb *req, const struct io_uring_sqe *sqeconst char __user *fname;int ret; -if (unlikely (req->ctx->flags & (IORING_SETUP_IOPOLL |IORING_SETUP_SQPOLL ))) -return -EINVAL ;if (unlikely (sqe->ioprio || sqe->buf_index))return -EINVAL ;if (unlikely (req->flags &REQ_F_FIXED_FILE ))
@@ -3084,6 +3082,8 @@ static int io_openat_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe) {u64 flags, mode; +if (unlikely (req->ctx->flags & (IORING_SETUP_IOPOLL |IORING_SETUP_SQPOLL ))) +return -EINVAL ;if (req->flags &REQ_F_NEED_CLEANUP )return 0 ; mode =READ_ONCE (sqe->len);
@@ -3098,6 +3098,8 @@ static int io_openat2_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)size_t len;int ret; +if (unlikely (req->ctx->flags & (IORING_SETUP_IOPOLL |IORING_SETUP_SQPOLL ))) +return -EINVAL ;if (req->flags &REQ_F_NEED_CLEANUP )return 0 ; how =u64_to_user_ptr (READ_ONCE (sqe->addr2));
@@ -5252,6 +5254,8 @@ static void io_cleanup_req(struct io_kiocb *req)break ;case IORING_OP_OPENAT :case IORING_OP_OPENAT2 : +if (req->open.filename) +putname (req->open.filename);break ;case IORING_OP_SPLICE :case IORING_OP_TEE :
include/linux/kprobes.h +5 -0
@@ -369,6 +369,8 @@ void unregister_kretprobes(struct kretprobe **rps, int num);void kprobe_flush_task (struct task_struct *tk);void recycle_rp_inst (struct kretprobe_instance *ri,struct hlist_head *head); +void kprobe_free_init_mem (void ); +int disable_kprobe (struct kprobe *kp);int enable_kprobe (struct kprobe *kp);
@@ -426,6 +428,9 @@ static inline void unregister_kretprobes(struct kretprobe **rps, int num)static inline void kprobe_flush_task (struct task_struct *tk) { } +static inline void kprobe_free_init_mem (void ) +{ +}static inline int disable_kprobe (struct kprobe *kp) {return -ENOSYS ;
include/linux/mm.h +1 -1
@@ -2445,7 +2445,7 @@ extern int __meminit __early_pfn_to_nid(unsigned long pfn,extern void set_dma_reserve (unsigned long new_dma_reserve);extern void memmap_init_zone (unsigned long ,int ,unsigned long ,unsigned long , -enum memmap_context ,struct vmem_altmap *); +enum meminit_context ,struct vmem_altmap *);extern void setup_per_zone_wmarks (void );extern int __meminit init_per_zone_wmark_min (void );extern void mem_init (void );
include/linux/mmzone.h +8 -3
@@ -799,10 +799,15 @@ bool zone_watermark_ok(struct zone *z, unsigned int order, unsigned int alloc_flags);bool zone_watermark_ok_safe (struct zone *z,unsigned int order,unsigned long mark,int highest_zoneidx); -enum memmap_context { -MEMMAP_EARLY , -MEMMAP_HOTPLUG , +/* +* Memory initialization context, use to differentiate memory added by +* the platform statically or via memory hotplug interface. +*/ +enum meminit_context { +MEMINIT_EARLY , +MEMINIT_HOTPLUG , }; +extern void init_currently_empty_zone (struct zone *zone,unsigned long start_pfn,unsigned long size);
include/linux/node.h +7 -4
@@ -99,11 +99,13 @@ extern struct node *node_devices[];typedef void (*node_registration_func_t )(struct node *);#if defined(CONFIG_MEMORY_HOTPLUG_SPARSE ) && defined(CONFIG_NUMA ) -extern int link_mem_sections (int nid,unsigned long start_pfn, -unsigned long end_pfn); +int link_mem_sections (int nid,unsigned long start_pfn, +unsigned long end_pfn, +enum meminit_context context);#else static inline int link_mem_sections (int nid,unsigned long start_pfn, -unsigned long end_pfn) +unsigned long end_pfn, +enum meminit_context context) {return 0 ; }
@@ -128,7 +130,8 @@ static inline int register_one_node(int nid)if (error)return error;/* link memory sections under this node */ - error =link_mem_sections (nid, start_pfn, end_pfn); + error =link_mem_sections (nid, start_pfn, end_pfn, +MEMINIT_EARLY ); }return error;
include/linux/pgtable.h +10 -0
@@ -1424,6 +1424,16 @@ typedef unsigned int pgtbl_mod_mask;#define mm_pmd_folded (mm) __is_defined(__PAGETABLE_PMD_FOLDED)#endif +#ifndef p4d_offset_lockless +#define p4d_offset_lockless (pgdp, pgd, address) p4d_offset(&(pgd), address) +#endif +#ifndef pud_offset_lockless +#define pud_offset_lockless (p4dp, p4d, address) pud_offset(&(p4d), address) +#endif +#ifndef pmd_offset_lockless +#define pmd_offset_lockless (pudp, pud, address) pmd_offset(&(pud), address) +#endif +/* * p?d_leaf() - true if this entry is a final mapping to a physical address. * This differs from p?d_huge() by the fact that they are always available (if
include/linux/qed/qed_if.h +1 -0
@@ -648,6 +648,7 @@ struct qed_dev_info {#define QED_MFW_VERSION_3_OFFSET 24u32 flash_size; +bool b_arfs_capable;bool b_inter_pf_switch;bool tx_switching;bool rdma_supported;
init/main.c +2 -0
@@ -33,6 +33,7 @@#include <linux/nmi.h> #include <linux/percpu.h> #include <linux/kmod.h> +#include <linux/kprobes.h> #include <linux/vmalloc.h> #include <linux/kernel_stat.h> #include <linux/start_kernel.h>
@@ -1401,6 +1402,7 @@ static int __ref kernel_init(void *unused)kernel_init_freeable ();/* need to finish all async __init code before freeing the memory */ async_synchronize_full (); +kprobe_free_init_mem ();ftrace_free_init_mem ();free_initmem ();mark_readonly ();
kernel/bpf/inode.c +3 -1
@@ -226,10 +226,12 @@ static void *map_seq_next(struct seq_file *m, void *v, loff_t *pos)else prev_key = key; +rcu_read_lock ();if (map->ops->map_get_next_key (map, prev_key, key)) {map_iter (m)->done = true; -return NULL ; + key =NULL ; } +rcu_read_unlock ();return key; }
kernel/kprobes.c +25 -2
@@ -2130,9 +2130,10 @@ static void kill_kprobe(struct kprobe *p)/* * The module is going away. We should disarm the kprobe which -* is using ftrace. +* is using ftrace, because ftrace framework is still available at +* MODULE_STATE_GOING notification. */ -if (kprobe_ftrace (p)) +if (kprobe_ftrace (p) && !kprobe_disabled (p) && !kprobes_all_disarmed)disarm_kprobe_ftrace (p); }
@@ -2405,6 +2406,28 @@ static struct notifier_block kprobe_module_nb = {extern unsigned long __start_kprobe_blacklist[];extern unsigned long __stop_kprobe_blacklist[]; +void kprobe_free_init_mem (void ) +{ +void *start = (void *)(&__init_begin); +void *end = (void *)(&__init_end); +struct hlist_head *head; +struct kprobe *p; +int i; + +mutex_lock (&kprobe_mutex); + +/* Kill all kprobes on initmem */ +for (i =0 ; i <KPROBE_TABLE_SIZE ; i++) { + head = &kprobe_table[i]; +hlist_for_each_entry (p, head, hlist) { +if (start <= (void *)p->addr && (void *)p->addr < end) +kill_kprobe (p); + } + } + +mutex_unlock (&kprobe_mutex); +} +static int __init init_kprobes (void ) {int i, err =0 ;
kernel/trace/trace_events_hist.c +0 -1
@@ -3865,7 +3865,6 @@ static int parse_var_defs(struct hist_trigger_data *hist_data) s =kstrdup (field_str,GFP_KERNEL );if (!s) { -kfree (hist_data->attrs->var_defs.name[n_vars]); ret = -ENOMEM ; goto free; }
kernel/trace/trace_preemptirq.c +2 -2
@@ -102,14 +102,14 @@ NOKPROBE_SYMBOL(trace_hardirqs_on_caller); __visible void trace_hardirqs_off_caller(unsigned long caller_addr) { +lockdep_hardirqs_off (CALLER_ADDR0 ); +if (!this_cpu_read (tracing_irq_cpu)) {this_cpu_write (tracing_irq_cpu,1 );tracer_hardirqs_off (CALLER_ADDR0 , caller_addr);if (!in_nmi ())trace_irq_disable_rcuidle (CALLER_ADDR0 , caller_addr); } - -lockdep_hardirqs_off (CALLER_ADDR0 ); }EXPORT_SYMBOL (trace_hardirqs_off_caller);NOKPROBE_SYMBOL (trace_hardirqs_off_caller);
lib/bootconfig.c +24 -14
@@ -31,6 +31,8 @@ static size_t xbc_data_size __initdata;static struct xbc_node *last_parent__initdata ;static const char *xbc_err_msg__initdata ;static int xbc_err_pos__initdata ; +static int open_brace[XBC_DEPTH_MAX ]__initdata ; +static int brace_index__initdata ;static int __init xbc_parse_error (const char *msg,const char *p) {
@@ -423,27 +425,27 @@ static char *skip_spaces_until_newline(char *p)return p; } -static int __init __xbc_open_brace (void ) +static int __init __xbc_open_brace (char *p) { -/* Mark the last key as open brace */ - last_parent->next =XBC_NODE_MAX ; +/* Push the last key as open brace */ + open_brace[brace_index++] =xbc_node_index (last_parent); +if (brace_index >=XBC_DEPTH_MAX ) +return xbc_parse_error ("Exceed max depth of braces" , p);return 0 ; }static int __init __xbc_close_brace (char *p) { -struct xbc_node *node; - -if (!last_parent || last_parent->next !=XBC_NODE_MAX ) + brace_index--; +if (!last_parent || brace_index <0 || + (open_brace[brace_index] !=xbc_node_index (last_parent)))return xbc_parse_error ("Unexpected closing brace" , p); - node = last_parent; - node->next =0 ; -do { - node =xbc_node_get_parent (node); - }while (node && node->next !=XBC_NODE_MAX ); - last_parent = node; +if (brace_index ==0 ) + last_parent =NULL ; +else + last_parent = &xbc_nodes[open_brace[brace_index -1 ]];return 0 ; }
@@ -484,8 +486,8 @@ static int __init __xbc_parse_value(char **__v, char **__n)break ; }if (strchr (",;\n#}" , c)) { - v =strim (v); *p++ ='\0' ; + v =strim (v);break ; } }
@@ -651,7 +653,7 @@ static int __init xbc_open_brace(char **k, char *n)return ret; *k = n; -return __xbc_open_brace (); +return __xbc_open_brace (n -1 ); }static int __init xbc_close_brace (char **k,char *n)
@@ -671,6 +673,13 @@ static int __init xbc_verify_tree(void)int i, depth, len, wlen;struct xbc_node *n, *m; +/* Brace closing */ +if (brace_index) { + n = &xbc_nodes[open_brace[brace_index]]; +return xbc_parse_error ("Brace is not closed" , +xbc_node_get_data (n)); + } +/* Empty tree */ if (xbc_node_num ==0 ) {xbc_parse_error ("Empty config" , xbc_data);
@@ -735,6 +744,7 @@ void __init xbc_destroy_all(void) xbc_node_num =0 ;memblock_free (__pa (xbc_nodes),sizeof (struct xbc_node ) *XBC_NODE_MAX ); xbc_nodes =NULL ; + brace_index =0 ; }/**
lib/string.c +24 -0
@@ -272,6 +272,30 @@ ssize_t strscpy_pad(char *dest, const char *src, size_t count) }EXPORT_SYMBOL (strscpy_pad); +/** +* stpcpy - copy a string from src to dest returning a pointer to the new end +* of dest, including src's %NUL-terminator. May overrun dest. +* @dest: pointer to end of string being copied into. Must be large enough +* to receive copy. +* @src: pointer to the beginning of string being copied from. Must not overlap +* dest. +* +* stpcpy differs from strcpy in a key way: the return value is a pointer +* to the new %NUL-terminating character in @dest. (For strcpy, the return +* value is a pointer to the start of @dest). This interface is considered +* unsafe as it doesn't perform bounds checking of the inputs. As such it's +* not recommended for usage. Instead, its definition is provided in case +* the compiler lowers other libcalls to stpcpy. +*/ +char *stpcpy (char *__restrict__ dest,const char *__restrict__ src); +char *stpcpy (char *__restrict__ dest,const char *__restrict__ src) +{ +while ((*dest++ = *src++) !='\0' ) +/* nothing */ ; +return --dest; +} +EXPORT_SYMBOL (stpcpy); +#ifndef __HAVE_ARCH_STRCAT/** * strcat - Append one %NUL-terminated string to another
mm/gup.c +9 -9
@@ -2574,13 +2574,13 @@ static int gup_huge_pgd(pgd_t orig, pgd_t *pgdp, unsigned long addr,return 1 ; } -static int gup_pmd_range (pud_t pud,unsigned long addr,unsigned long end, +static int gup_pmd_range (pud_t *pudp,pud_t pud,unsigned long addr,unsigned long end,unsigned int flags,struct page **pages,int *nr) {unsigned long next;pmd_t *pmdp; - pmdp =pmd_offset (&pud, addr); + pmdp =pmd_offset_lockless (pudp, pud, addr); do { pmd_t pmd = READ_ONCE(*pmdp);
@@ -2617,13 +2617,13 @@ static int gup_pmd_range(pud_t pud, unsigned long addr, unsigned long end,return 1 ; } -static int gup_pud_range (p4d_t p4d,unsigned long addr,unsigned long end, +static int gup_pud_range (p4d_t *p4dp,p4d_t p4d,unsigned long addr,unsigned long end,unsigned int flags,struct page **pages,int *nr) {unsigned long next;pud_t *pudp; - pudp =pud_offset (&p4d, addr); + pudp =pud_offset_lockless (p4dp, p4d, addr); do { pud_t pud = READ_ONCE(*pudp);
@@ -2638,20 +2638,20 @@ static int gup_pud_range(p4d_t p4d, unsigned long addr, unsigned long end,if (!gup_huge_pd (__hugepd (pud_val (pud)), addr,PUD_SHIFT , next, flags, pages, nr))return 0 ; - }else if (!gup_pmd_range (pud, addr, next, flags, pages, nr)) + }else if (!gup_pmd_range (pudp, pud, addr, next, flags, pages, nr))return 0 ; }while (pudp++, addr = next, addr != end);return 1 ; } -static int gup_p4d_range (pgd_t pgd,unsigned long addr,unsigned long end, +static int gup_p4d_range (pgd_t *pgdp,pgd_t pgd,unsigned long addr,unsigned long end,unsigned int flags,struct page **pages,int *nr) {unsigned long next;p4d_t *p4dp; - p4dp =p4d_offset (&pgd, addr); + p4dp =p4d_offset_lockless (pgdp, pgd, addr); do { p4d_t p4d = READ_ONCE(*p4dp);
@@ -2663,7 +2663,7 @@ static int gup_p4d_range(pgd_t pgd, unsigned long addr, unsigned long end,if (!gup_huge_pd (__hugepd (p4d_val (p4d)), addr,P4D_SHIFT , next, flags, pages, nr))return 0 ; - }else if (!gup_pud_range (p4d, addr, next, flags, pages, nr)) + }else if (!gup_pud_range (p4dp, p4d, addr, next, flags, pages, nr))return 0 ; }while (p4dp++, addr = next, addr != end);
@@ -2691,7 +2691,7 @@ static void gup_pgd_range(unsigned long addr, unsigned long end,if (!gup_huge_pd (__hugepd (pgd_val (pgd)), addr,PGDIR_SHIFT , next, flags, pages, nr))return ; - }else if (!gup_p4d_range (pgd, addr, next, flags, pages, nr)) + }else if (!gup_p4d_range (pgdp, pgd, addr, next, flags, pages, nr))return ; }while (pgdp++, addr = next, addr != end); }
mm/madvise.c +1 -1
@@ -381,9 +381,9 @@ static int madvise_cold_or_pageout_pte_range(pmd_t *pmd, return 0; } +regular_page:if (pmd_trans_unstable (pmd))return 0 ; -regular_page:#endif tlb_change_page_size (tlb,PAGE_SIZE ); orig_pte = pte =pte_offset_map_lock (vma->vm_mm, pmd, addr, &ptl);
mm/memory_hotplug.c +3 -2
@@ -719,7 +719,7 @@ void __ref move_pfn_range_to_zone(struct zone *zone, unsigned long start_pfn,* are reserved so nobody should be touching them so we should be safe */ memmap_init_zone (nr_pages, nid,zone_idx (zone), start_pfn, -MEMMAP_HOTPLUG , altmap); +MEMINIT_HOTPLUG , altmap);set_zone_contiguous (zone); }
@@ -1065,7 +1065,8 @@ int __ref add_memory_resource(int nid, struct resource *res) }/* link memory sections under this node.*/ - ret =link_mem_sections (nid,PFN_DOWN (start),PFN_UP (start + size -1 )); + ret =link_mem_sections (nid,PFN_DOWN (start),PFN_UP (start + size -1 ), +MEMINIT_HOTPLUG );BUG_ON (ret);/* create new memmap entry */
mm/page_alloc.c +5 -5
@@ -5952,7 +5952,7 @@ overlap_memmap_init(unsigned long zone, unsigned long *pfn)* done. Non-atomic initialization, single-pass. */ void __meminit memmap_init_zone (unsigned long size,int nid,unsigned long zone, -unsigned long start_pfn,enum memmap_context context, +unsigned long start_pfn,enum meminit_context context,struct vmem_altmap *altmap) {unsigned long pfn, end_pfn = start_pfn + size;
@@ -5984,7 +5984,7 @@ void __meminit memmap_init_zone(unsigned long size, int nid, unsigned long zone,* There can be holes in boot-time mem_map[]s handed to this * function. They do not exist on hotplugged memory. */ -if (context ==MEMMAP_EARLY ) { +if (context ==MEMINIT_EARLY ) {if (overlap_memmap_init (zone, &pfn))continue ;if (defer_init (nid, pfn, end_pfn))
@@ -5993,7 +5993,7 @@ void __meminit memmap_init_zone(unsigned long size, int nid, unsigned long zone, page =pfn_to_page (pfn);__init_single_page (page, pfn, zone, nid); -if (context ==MEMMAP_HOTPLUG ) +if (context ==MEMINIT_HOTPLUG )__SetPageReserved (page);/*
@@ -6076,7 +6076,7 @@ void __ref memmap_init_zone_device(struct zone *zone,* check here not to call set_pageblock_migratetype() against * pfn out of zone. * -* Please note that MEMMAP_HOTPLUG path doesn't clear memmap +* Please note that MEMINIT_HOTPLUG path doesn't clear memmap * because this is done early in section_activate() */ if (!(pfn & (pageblock_nr_pages -1 ))) {
@@ -6114,7 +6114,7 @@ void __meminit __weak memmap_init(unsigned long size, int nid,if (end_pfn > start_pfn) { size = end_pfn - start_pfn;memmap_init_zone (size, nid, zone, start_pfn, -MEMMAP_EARLY ,NULL ); +MEMINIT_EARLY ,NULL ); } } }
mm/swapfile.c +1 -1
@@ -1074,7 +1074,7 @@ int get_swap_pages(int n_goal, swp_entry_t swp_entries[], int entry_size) goto nextsi; }if (size ==SWAPFILE_CLUSTER ) { -if (!(si->flags &SWP_FS )) +if (si->flags &SWP_BLKDEV ) n_ret =swap_alloc_cluster (si, swp_entries); }else n_ret = scan_swap_map_slots(si, SWAP_HAS_CACHE,
net/batman-adv/bridge_loop_avoidance.c +117 -28
223 lines not on this page · raw message
net/batman-adv/bridge_loop_avoidance.h +2 -2
@@ -35,7 +35,7 @@ static inline bool batadv_bla_is_loopdetect_mac(const uint8_t *mac)#ifdef CONFIG_BATMAN_ADV_BLA bool batadv_bla_rx (struct batadv_priv *bat_priv,struct sk_buff *skb, -unsigned short vid,bool is_bcast); +unsigned short vid,int packet_type);bool batadv_bla_tx (struct batadv_priv *bat_priv,struct sk_buff *skb,unsigned short vid); bool batadv_bla_is_backbone_gw(struct sk_buff *skb,
@@ -66,7 +66,7 @@ bool batadv_bla_check_claim(struct batadv_priv *bat_priv, u8 *addr,static inline bool batadv_bla_rx (struct batadv_priv *bat_priv,struct sk_buff *skb,unsigned short vid, -bool is_bcast) +int packet_type) {return false; }
net/batman-adv/multicast.c +36 -10
88 lines not on this page · raw message
net/batman-adv/multicast.h +15 -0
@@ -46,6 +46,11 @@ enum batadv_forw_mode batadv_mcast_forw_mode(struct batadv_priv *bat_priv, struct sk_buff *skb, struct batadv_orig_node **mcast_single_orig); +int batadv_mcast_forw_send_orig (struct batadv_priv *bat_priv, +struct sk_buff *skb, +unsigned short vid, +struct batadv_orig_node *orig_node); +int batadv_mcast_forw_send (struct batadv_priv *bat_priv,struct sk_buff *skb,unsigned short vid);
@@ -71,6 +76,16 @@ batadv_mcast_forw_mode(struct batadv_priv *bat_priv, struct sk_buff *skb,return BATADV_FORW_ALL ; } +static inline int +batadv_mcast_forw_send_orig (struct batadv_priv *bat_priv, +struct sk_buff *skb, +unsigned short vid, +struct batadv_orig_node *orig_node) +{ +kfree_skb (skb); +return NET_XMIT_DROP ; +} +static inline int batadv_mcast_forw_send (struct batadv_priv *bat_priv,struct sk_buff *skb,unsigned short vid)
net/batman-adv/routing.c +4 -0
@@ -826,6 +826,10 @@ static bool batadv_check_unicast_ttvn(struct batadv_priv *bat_priv, vid =batadv_get_vid (skb, hdr_len); ethhdr = (struct ethhdr *)(skb->data + hdr_len); +/* do not reroute multicast frames in a unicast header */ +if (is_multicast_ether_addr (ethhdr->h_dest)) +return true; +/* check if the destination client was served by this node and it is now * roaming. In this case, it means that the node has got a ROAM_ADV * message and that it knows the new destination in the mesh to re-route
net/batman-adv/soft-interface.c +5 -6
@@ -364,9 +364,8 @@ static netdev_tx_t batadv_interface_tx(struct sk_buff *skb, goto dropped; ret =batadv_send_skb_via_gw (bat_priv, skb, vid); }else if (mcast_single_orig) { - ret =batadv_send_skb_unicast (bat_priv, skb, -BATADV_UNICAST ,0 , - mcast_single_orig, vid); + ret =batadv_mcast_forw_send_orig (bat_priv, skb, vid, + mcast_single_orig); }else if (forw_mode ==BATADV_FORW_SOME ) { ret =batadv_mcast_forw_send (bat_priv, skb, vid); }else {
@@ -425,10 +424,10 @@ void batadv_interface_rx(struct net_device *soft_iface,struct vlan_ethhdr *vhdr;struct ethhdr *ethhdr;unsigned short vid; -bool is_bcast; +int packet_type; batadv_bcast_packet = (struct batadv_bcast_packet *)skb->data; - is_bcast = (batadv_bcast_packet->packet_type ==BATADV_BCAST ); + packet_type = batadv_bcast_packet->packet_type;skb_pull_rcsum (skb, hdr_size);skb_reset_mac_header (skb);
@@ -471,7 +470,7 @@ void batadv_interface_rx(struct net_device *soft_iface,/* Let the bridge loop avoidance check the packet. If will * not handle it, we can safely push it up. */ -if (batadv_bla_rx (bat_priv, skb, vid, is_bcast)) +if (batadv_bla_rx (bat_priv, skb, vid, packet_type)) goto out;if (orig_node)
net/core/filter.c +2 -2
@@ -6998,8 +6998,6 @@ static int bpf_gen_ld_abs(const struct bpf_insn *orig,bool indirect =BPF_MODE (orig->code) ==BPF_IND ;struct bpf_insn *insn = insn_buf; -/* We're guaranteed here that CTX is in R6. */ - *insn++ =BPF_MOV64_REG (BPF_REG_1 ,BPF_REG_CTX );if (!indirect) { *insn++ =BPF_MOV64_IMM (BPF_REG_2 , orig->imm); }else {
@@ -7007,6 +7005,8 @@ static int bpf_gen_ld_abs(const struct bpf_insn *orig,if (orig->imm) *insn++ =BPF_ALU64_IMM (BPF_ADD ,BPF_REG_2 , orig->imm); } +/* We're guaranteed here that CTX is in R6. */ + *insn++ =BPF_MOV64_REG (BPF_REG_1 ,BPF_REG_CTX );switch (BPF_SIZE (orig->code)) {case BPF_B :
net/mac80211/mlme.c +2 -1
@@ -4853,6 +4853,7 @@ static int ieee80211_prep_channel(struct ieee80211_sub_if_data *sdata,struct ieee80211_supported_band *sband;struct cfg80211_chan_def chandef;bool is_6ghz = cbss->channel->band ==NL80211_BAND_6GHZ ; +bool is_5ghz = cbss->channel->band ==NL80211_BAND_5GHZ ;struct ieee80211_bss *bss = (void *)cbss->priv;int ret;u32 i;
@@ -4871,7 +4872,7 @@ static int ieee80211_prep_channel(struct ieee80211_sub_if_data *sdata, ifmgd->flags |=IEEE80211_STA_DISABLE_HE ; } -if (!sband->vht_cap.vht_supported && !is_6ghz) { +if (!sband->vht_cap.vht_supported && is_5ghz) { ifmgd->flags |=IEEE80211_STA_DISABLE_VHT ; ifmgd->flags |=IEEE80211_STA_DISABLE_HE ; }
net/mac80211/util.c +4 -3
@@ -3354,9 +3354,10 @@ bool ieee80211_chandef_he_6ghz_oper(struct ieee80211_sub_if_data *sdata, he_chandef.center_freq1 =ieee80211_channel_to_frequency (he_6ghz_oper->ccfs0,NL80211_BAND_6GHZ ); - he_chandef.center_freq2 = -ieee80211_channel_to_frequency (he_6ghz_oper->ccfs1, -NL80211_BAND_6GHZ ); +if (support_80_80 || support_160) + he_chandef.center_freq2 = +ieee80211_channel_to_frequency (he_6ghz_oper->ccfs1, +NL80211_BAND_6GHZ ); }if (!cfg80211_chandef_valid (&he_chandef)) {
net/mac802154/tx.c +5 -3
@@ -34,11 +34,11 @@ void ieee802154_xmit_worker(struct work_struct *work)if (res) goto err_tx; -ieee802154_xmit_complete (&local->hw, skb, false); - dev->stats.tx_packets++; dev->stats.tx_bytes += skb->len; +ieee802154_xmit_complete (&local->hw, skb, false); +return ; err_tx:
@@ -78,6 +78,8 @@ ieee802154_tx(struct ieee802154_local *local, struct sk_buff *skb)/* async is priority, otherwise sync is fallback */ if (local->ops->xmit_async) { +unsigned int len = skb->len; + ret =drv_xmit_async (local, skb);if (ret) {ieee802154_wake_queue (&local->hw);
@@ -85,7 +87,7 @@ ieee802154_tx(struct ieee802154_local *local, struct sk_buff *skb) } dev->stats.tx_packets++; - dev->stats.tx_bytes += skb->len; + dev->stats.tx_bytes += len; }else { local->tx_skb = skb;queue_work (local->workqueue, &local->tx_work);
net/netfilter/nf_conntrack_netlink.c +5 -17
@@ -851,7 +851,6 @@ static int ctnetlink_done(struct netlink_callback *cb) }struct ctnetlink_filter { -u_int32_t cta_flags;u8 family;u_int32_t orig_flags;
@@ -906,10 +905,6 @@ static int ctnetlink_parse_tuple_filter(const struct nlattr * const cda[],struct nf_conntrack_zone *zone, u_int32_t flags); -/* applied on filters */ -#define CTA_FILTER_F_CTA_MARK (1 << 0) -#define CTA_FILTER_F_CTA_MARK_MASK (1 << 1) -static struct ctnetlink_filter *ctnetlink_alloc_filter (const struct nlattr *const cda[],u8 family) {
@@ -930,14 +925,10 @@ ctnetlink_alloc_filter(const struct nlattr * const cda[], u8 family)#ifdef CONFIG_NF_CONNTRACK_MARK if (cda[CTA_MARK ]) { filter->mark.val =ntohl (nla_get_be32 (cda[CTA_MARK ])); - filter->cta_flags |=CTA_FILTER_FLAG (CTA_MARK ); - -if (cda[CTA_MARK_MASK ]) { +if (cda[CTA_MARK_MASK ]) filter->mark.mask =ntohl (nla_get_be32 (cda[CTA_MARK_MASK ])); - filter->cta_flags |=CTA_FILTER_FLAG (CTA_MARK_MASK ); - }else { +else filter->mark.mask =0xffffffff ; - } }else if (cda[CTA_MARK_MASK ]) { err = -EINVAL ; goto err_filter;
@@ -1117,11 +1108,7 @@ static int ctnetlink_filter_match(struct nf_conn *ct, void *data) }#ifdef CONFIG_NF_CONNTRACK_MARK -if ((filter->cta_flags &CTA_FILTER_FLAG (CTA_MARK_MASK )) && - (ct->mark & filter->mark.mask) != filter->mark.val) - goto ignore_entry; -else if ((filter->cta_flags &CTA_FILTER_FLAG (CTA_MARK )) && - ct->mark != filter->mark.val) +if ((ct->mark & filter->mark.mask) != filter->mark.val) goto ignore_entry;#endif
@@ -1404,7 +1391,8 @@ ctnetlink_parse_tuple_filter(const struct nlattr * const cda[],if (err <0 )return err; - +if (l3num !=NFPROTO_IPV4 && l3num !=NFPROTO_IPV6 ) +return -EOPNOTSUPP ; tuple->src.l3num = l3num; if (flags & CTA_FILTER_FLAG(CTA_IP_DST) ||
net/netfilter/nf_conntrack_proto.c +2 -0
@@ -565,6 +565,7 @@ static int nf_ct_netns_inet_get(struct net *net)int err; err =nf_ct_netns_do_get (net,NFPROTO_IPV4 ); +#if IS_ENABLED (CONFIG_IPV6 )if (err <0 ) goto err1; err =nf_ct_netns_do_get (net,NFPROTO_IPV6 );
@@ -575,6 +576,7 @@ static int nf_ct_netns_inet_get(struct net *net) err2:nf_ct_netns_put (net,NFPROTO_IPV4 ); err1: +#endif return err; }
net/netfilter/nft_meta.c +2 -2
@@ -147,11 +147,11 @@ nft_meta_get_eval_skugid(enum nft_meta_keys key,switch (key) {case NFT_META_SKUID : - *dest =from_kuid_munged (&init_user_ns, + *dest =from_kuid_munged (sock_net (sk)->user_ns, sock->file->f_cred->fsuid);break ;case NFT_META_SKGID : - *dest =from_kgid_munged (&init_user_ns, + *dest =from_kgid_munged (sock_net (sk)->user_ns, sock->file->f_cred->fsgid);break ;default :
net/sunrpc/svcsock.c +1 -1
@@ -228,7 +228,7 @@ static int svc_one_sock_name(struct svc_sock *svsk, char *buf, int remaining)static void svc_flush_bvec (const struct bio_vec *bvec,size_t size,size_t seek) {struct bvec_iter bi = { - .bi_size = size, + .bi_size = size + seek, };struct bio_vec bv;
net/wireless/Kconfig +1 -0
@@ -217,6 +217,7 @@ config LIB80211_CRYPT_WEP config LIB80211_CRYPT_CCMP tristate + select CRYPTO select CRYPTO_AES select CRYPTO_CCM
net/wireless/util.c +1 -1
@@ -95,7 +95,7 @@ u32 ieee80211_channel_to_freq_khz(int chan, enum nl80211_band band)/* see 802.11ax D6.1 27.3.23.2 */ if (chan ==2 )return MHZ_TO_KHZ (5935 ); -if (chan <=253 ) +if (chan <=233 )return MHZ_TO_KHZ (5950 + chan *5 );break ;case NL80211_BAND_60GHZ :
net/xdp/xdp_umem.c +8 -9
@@ -303,10 +303,10 @@ static int xdp_umem_account_pages(struct xdp_umem *umem)static int xdp_umem_reg (struct xdp_umem *umem,struct xdp_umem_reg *mr) { +u32 npgs_rem, chunk_size = mr->chunk_size, headroom = mr->headroom;bool unaligned_chunks = mr->flags &XDP_UMEM_UNALIGNED_CHUNK_FLAG ; -u32 chunk_size = mr->chunk_size, headroom = mr->headroom;u64 npgs, addr = mr->addr, size = mr->len; -unsigned int chunks, chunks_per_page; +unsigned int chunks, chunks_rem;int err;if (chunk_size <XDP_UMEM_MIN_CHUNK_SIZE || chunk_size >PAGE_SIZE ) {
@@ -336,19 +336,18 @@ static int xdp_umem_reg(struct xdp_umem *umem, struct xdp_umem_reg *mr)if ((addr + size) < addr)return -EINVAL ; - npgs = size >>PAGE_SHIFT ; + npgs =div_u64_rem (size,PAGE_SIZE , &npgs_rem); +if (npgs_rem) + npgs++;if (npgs >U32_MAX )return -EINVAL ; - chunks = (unsigned int )div_u64 (size, chunk_size); + chunks = (unsigned int )div_u64_rem (size, chunk_size, &chunks_rem);if (chunks ==0 )return -EINVAL ; -if (!unaligned_chunks) { - chunks_per_page =PAGE_SIZE / chunk_size; -if (chunks < chunks_per_page || chunks % chunks_per_page) -return -EINVAL ; - } +if (!unaligned_chunks && chunks_rem) +return -EINVAL ;if (headroom >= chunk_size -XDP_PACKET_HEADROOM )return -EINVAL ;
security/device_cgroup.c +2 -1
@@ -354,7 +354,8 @@ static bool match_exception_partial(struct list_head *exceptions, short type, {struct dev_exception_item *ex; -list_for_each_entry_rcu (ex, exceptions, list) { +list_for_each_entry_rcu (ex, exceptions, list, +lockdep_is_held (&devcgroup_mutex)) {if ((type &DEVCG_DEV_BLOCK ) && !(ex->type &DEVCG_DEV_BLOCK ))continue ;if ((type &DEVCG_DEV_CHAR ) && !(ex->type &DEVCG_DEV_CHAR ))
sound/pci/asihpi/hpioctl.c +2 -2
@@ -343,7 +343,7 @@ int asihpi_adapter_probe(struct pci_dev *pci_dev,struct hpi_message hm;struct hpi_response hr;struct hpi_adapter adapter; -struct hpi_pci pci; +struct hpi_pci pci = {0 };memset (&adapter,0 ,sizeof (adapter));
@@ -499,7 +499,7 @@ int asihpi_adapter_probe(struct pci_dev *pci_dev,return 0 ; err: -for (idx =0 ; idx <HPI_MAX_ADAPTER_MEM_SPACES ; idx++) { +while (--idx >=0 ) {if (pci.ap_mem_base[idx]) {iounmap (pci.ap_mem_base[idx]); pci.ap_mem_base[idx] =NULL ;
sound/pci/hda/patch_realtek.c +12 -1
@@ -3419,7 +3419,11 @@ static void alc256_shutup(struct hda_codec *codec)/* 3k pull low control for Headset jack. */ /* NOTE: call this before clearing the pin, otherwise codec stalls */ -alc_update_coef_idx (codec,0x46 ,0 ,3 <<12 ); +/* If disable 3k pulldown control for alc257, the Mic detection will not work correctly +* when booting with headset plugged. So skip setting it for the codec alc257 +*/ +if (codec->core.vendor_id !=0x10ec0257 ) +alc_update_coef_idx (codec,0x46 ,0 ,3 <<12 );if (!spec->no_shutup_pins) snd_hda_codec_write(codec, hp_pin, 0,
@@ -6062,6 +6066,7 @@ static void alc_fixup_thinkpad_acpi(struct hda_codec *codec,#include "hp_x360_helper.c" enum { +ALC269_FIXUP_GPIO2 ,ALC269_FIXUP_SONY_VAIO ,ALC275_FIXUP_SONY_VAIO_GPIO2 ,ALC269_FIXUP_DELL_M101Z ,
@@ -6243,6 +6248,10 @@ enum { };static const struct hda_fixup alc269_fixups[] = { + [ALC269_FIXUP_GPIO2 ] = { + .type =HDA_FIXUP_FUNC , + .v.func = alc_fixup_gpio2, + }, [ALC269_FIXUP_SONY_VAIO ] = { .type =HDA_FIXUP_PINCTLS , .v.pins = (const struct hda_pintbl []) {
@@ -7062,6 +7071,8 @@ static const struct hda_fixup alc269_fixups[] = { [ALC233_FIXUP_LENOVO_MULTI_CODECS] = { .type = HDA_FIXUP_FUNC, .v.func = alc233_alc662_fixup_lenovo_dual_codecs, + .chained = true, + .chain_id =ALC269_FIXUP_GPIO2 }, [ALC233_FIXUP_ACER_HEADSET_MIC] = { .type = HDA_FIXUP_VERBS,
sound/soc/codecs/pcm3168a.c +7 -0
@@ -306,6 +306,13 @@ static int pcm3168a_set_dai_sysclk(struct snd_soc_dai *dai,struct pcm3168a_priv *pcm3168a =snd_soc_component_get_drvdata (dai->component);int ret; +/* +* Some sound card sets 0 Hz as reset, +* but it is impossible to set. Ignore it here +*/ +if (freq ==0 ) +return 0 ; +if (freq >PCM3168A_MAX_SYSCLK )return -EINVAL ;
sound/soc/codecs/wm8994.c +10 -0
@@ -3491,6 +3491,8 @@ int wm8994_mic_detect(struct snd_soc_component *component, struct snd_soc_jack *return -EINVAL ; } +pm_runtime_get_sync (component->dev); +switch (micbias) {case 1 : micdet = &wm8994->micdet[0 ];
@@ -3538,6 +3540,8 @@ int wm8994_mic_detect(struct snd_soc_component *component, struct snd_soc_jack *snd_soc_dapm_sync (dapm); +pm_runtime_put (component->dev); +return 0 ; }EXPORT_SYMBOL_GPL (wm8994_mic_detect);
@@ -3905,6 +3909,8 @@ int wm8958_mic_detect(struct snd_soc_component *component, struct snd_soc_jack *return -EINVAL ; } +pm_runtime_get_sync (component->dev); +if (jack) {snd_soc_dapm_force_enable_pin (dapm,"CLK_SYS" );snd_soc_dapm_sync (dapm);
@@ -3973,6 +3979,8 @@ int wm8958_mic_detect(struct snd_soc_component *component, struct snd_soc_jack *snd_soc_dapm_sync (dapm); } +pm_runtime_put (component->dev); +return 0 ; }EXPORT_SYMBOL_GPL (wm8958_mic_detect);
@@ -4166,11 +4174,13 @@ static int wm8994_component_probe(struct snd_soc_component *component) wm8994->hubs.dcs_readback_mode =2 ;break ; } + wm8994->hubs.micd_scthr = true;break ;case WM8958 : wm8994->hubs.dcs_readback_mode =1 ; wm8994->hubs.hp_startup_mode =1 ; + wm8994->hubs.micd_scthr = true;switch (control->revision) {case 0 :
sound/soc/codecs/wm_hubs.c +3 -0
@@ -1223,6 +1223,9 @@ int wm_hubs_handle_analogue_pdata(struct snd_soc_component *component,snd_soc_component_update_bits (component,WM8993_ADDITIONAL_CONTROL ,WM8993_LINEOUT2_FB ,WM8993_LINEOUT2_FB ); +if (!hubs->micd_scthr) +return 0 ; + snd_soc_component_update_bits(component, WM8993_MICBIAS, WM8993_JD_SCTHR_MASK | WM8993_JD_THR_MASK | WM8993_MICB1_LVL | WM8993_MICB2_LVL,
sound/soc/codecs/wm_hubs.h +1 -0
@@ -27,6 +27,7 @@ struct wm_hubs_data {int hp_startup_mode;int series_startup;int no_series_update; +bool micd_scthr;bool no_cache_dac_hp_direct;struct list_head dcs_cache;
sound/soc/intel/boards/bytcr_rt5640.c +10 -0
@@ -591,6 +591,16 @@ static const struct dmi_system_id byt_rt5640_quirk_table[] = {BYT_RT5640_SSP0_AIF1 | BYT_RT5640_MCLK_EN), }, + { /* MPMAN Converter 9, similar hw as the I.T.Works TW891 2-in-1 */ + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"MPMAN" ), + DMI_MATCH(DMI_PRODUCT_NAME, "Converter9"), + }, + .driver_data = (void *)(BYTCR_INPUT_DEFAULTS | +BYT_RT5640_MONO_SPEAKER | +BYT_RT5640_SSP0_AIF1 | + BYT_RT5640_MCLK_EN), + }, {/* MPMAN MPWIN895CL */ .matches = {
sound/usb/quirks.c +4 -3
@@ -1668,12 +1668,13 @@ void snd_usb_ctl_msg_quirk(struct usb_device *dev, unsigned int pipe, && (requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS)msleep (20 ); -/* Zoom R16/24, Logitech H650e, Jabra 550a, Kingston HyperX needs a tiny -* delay here, otherwise requests like get/set frequency return as -* failed despite actually succeeding. +/* Zoom R16/24, Logitech H650e/H570e, Jabra 550a, Kingston HyperX +* needs a tiny delay here, otherwise requests like get/set +* frequency return as failed despite actually succeeding. */ if ((chip->usb_id ==USB_ID (0x1686 ,0x00dd ) || chip->usb_id ==USB_ID (0x046d ,0x0a46 ) || + chip->usb_id ==USB_ID (0x046d ,0x0a56 ) || chip->usb_id ==USB_ID (0x0b0e ,0x0349 ) || chip->usb_id ==USB_ID (0x0951 ,0x16ad )) && (requesttype &USB_TYPE_MASK ) ==USB_TYPE_CLASS )
tools/lib/bpf/Makefile +2 -0
@@ -152,6 +152,7 @@ GLOBAL_SYM_COUNT = $(shell readelf -s --wide $(BPF_IN_SHARED) | \ awk '/GLOBAL/ && /DEFAULT/ && !/UND/ {print $$NF}' | \ sort -u | wc -l) VERSIONED_SYM_COUNT = $(shell readelf --dyn-syms --wide $(OUTPUT)libbpf.so | \ + awk '/GLOBAL/ && /DEFAULT/ && !/UND/ {print $$NF}' | \ grep -Eo '[^ ]+@LIBBPF_' | cut -d@ -f1 | sort -u | wc -l) CMD_TARGETS = $(LIB_TARGET) $(PC_FILE)
@@ -219,6 +220,7 @@ check_abi: $(OUTPUT)libbpf.so awk '/GLOBAL/ && /DEFAULT/ && !/UND/ {print $$NF}'| \ sort -u > $(OUTPUT)libbpf_global_syms.tmp; \ readelf --dyn-syms --wide $(OUTPUT)libbpf.so | \ + awk '/GLOBAL/ && /DEFAULT/ && !/UND/ {print $$NF}'| \ grep -Eo '[^ ]+@LIBBPF_' | cut -d@ -f1 | \ sort -u > $(OUTPUT)libbpf_versioned_syms.tmp; \ diff -u $(OUTPUT)libbpf_global_syms.tmp \
tools/lib/bpf/libbpf.c +1 -1
@@ -5030,8 +5030,8 @@ static int bpf_object__collect_map_relos(struct bpf_object *obj,int i, j, nrels, new_sz;const struct btf_var_secinfo *vi =NULL ;const struct btf_type *sec, *var, *def; +struct bpf_map *map =NULL , *targ_map;const struct btf_member *member; -struct bpf_map *map, *targ_map;const char *name, *mname;Elf_Data *symbols;unsigned int moff;
tools/objtool/check.c +1 -1
@@ -619,7 +619,7 @@ static int add_jump_destinations(struct objtool_file *file)if (!is_static_jump (insn))continue ; -if (insn->ignore || insn->offset ==FAKE_JUMP_OFFSET ) +if (insn->offset ==FAKE_JUMP_OFFSET )continue ; rela = find_rela_by_dest_range(file->elf, insn->sec,