Linux 6.1.14
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.1.14 kernel.
All users of the 6.1 kernel series must upgrade.
The updated 6.1.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.1.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/admin-guide/perf/hisi-pcie-pmu.rst | 22 - MAINTAINERS | 2 Makefile | 2 arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-2.dtsi | 44 +++ arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-3.dtsi | 44 +++ arch/powerpc/boot/dts/fsl/t2081si-post.dtsi | 20 + arch/powerpc/kernel/vmlinux.lds.S | 6 arch/powerpc/mm/book3s64/radix_pgtable.c | 13 + arch/s390/kernel/vmlinux.lds.S | 2 arch/sh/kernel/vmlinux.lds.S | 1 arch/x86/include/asm/text-patching.h | 31 ++ arch/x86/kernel/alternative.c | 59 +++- arch/x86/kernel/kprobes/core.c | 38 -- arch/x86/kernel/static_call.c | 49 +++ arch/x86/kvm/svm/svm.c | 10 arch/x86/kvm/vmx/nested.c | 11 arch/x86/kvm/vmx/vmx.c | 6 arch/x86/kvm/x86.c | 4 arch/x86/kvm/xen.c | 30 ++ drivers/bluetooth/btusb.c | 84 ++++++ drivers/clk/x86/Kconfig | 5 drivers/clk/x86/clk-cgu-pll.c | 23 - drivers/clk/x86/clk-cgu.c | 106 ++------ drivers/clk/x86/clk-cgu.h | 46 +-- drivers/clk/x86/clk-lgm.c | 18 - drivers/gpu/drm/drm_edid.c | 3 drivers/gpu/drm/etnaviv/etnaviv_mmu.c | 4 drivers/gpu/drm/i915/i915_pci.c | 1 drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c | 33 +- drivers/net/ethernet/netronome/nfp/nfp_main.h | 1 drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c | 195 +++++++++++++++ drivers/net/ethernet/netronome/nfp/nfp_port.h | 12 drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c | 17 + drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.h | 56 ++++ drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp_eth.c | 26 ++ drivers/net/wireless/ath/ath11k/qmi.c | 6 drivers/net/wireless/marvell/mwifiex/sdio.c | 1 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c | 8 drivers/platform/x86/amd/pmf/Kconfig | 1 drivers/platform/x86/nvidia-wmi-ec-backlight.c | 6 drivers/scsi/hisi_sas/hisi_sas_main.c | 8 drivers/scsi/libsas/sas_ata.c | 25 + drivers/scsi/libsas/sas_expander.c | 4 drivers/scsi/libsas/sas_internal.h | 2 drivers/spi/spi-mt65xx.c | 10 fs/ext4/sysfs.c | 7 include/asm-generic/vmlinux.lds.h | 5 include/linux/nospec.h | 4 include/linux/psi_types.h | 1 include/linux/random.h | 6 include/scsi/sas_ata.h | 6 kernel/bpf/core.c | 3 kernel/sched/psi.c | 62 ++++ lib/usercopy.c | 7 scripts/head-object-list.txt | 2 security/Kconfig.hardening | 3 tools/testing/selftests/kvm/x86_64/xen_shinfo_test.c | 5 57 files changed, 962 insertions(+), 244 deletions(-)
Ankit Nautiyal (1):
drm/edid: Fix minimum bpc supported with DSC1.2 for HDMI sink
Bitterblue Smith (1):
wifi: rtl8xxxu: gen2: Turn on the rate control
Dave Hansen (1):
uaccess: Add speculation barrier to copy_from_user()
Eric Biggers (1):
randstruct: disable Clang 15 support
Greg Kroah-Hartman (1):
Linux 6.1.14
Hans de Goede (1):
platform/x86: nvidia-wmi-ec-backlight: Add force module parameter
Jason A. Donenfeld (1):
random: always mix cycle counter in add_latent_entropy()
Jie Zhan (2):
scsi: libsas: Add smp_ata_check_ready_type()
scsi: hisi_sas: Fix SATA devices missing issue during I_T nexus reset
Jim Mattson (1):
KVM: VMX: Execute IBPB on emulated VM-exit when guest has IBRS
Jisheng Zhang (1):
riscv: remove special treatment for the link order of head.o
Kees Cook (1):
ext4: Fix function prototype mismatch for ext4_feat_ktype
Linus Torvalds (1):
bpf: add missing header file include
Lucas De Marchi (1):
drm/i915: Remove __maybe_unused from mtl_info
Lucas Stach (1):
drm/etnaviv: don't truncate physical page address
Lukas Wunner (1):
wifi: mwifiex: Add missing compatible string for SD8787
Marc Kleine-Budde (1):
can: kvaser_usb: hydra: help gcc-13 to figure out cmd_len
Masahiro Yamada (3):
arm64: remove special treatment for the link order of head.o
arch: fix broken BuildID for arm64 and riscv
s390: define RUNTIME_DISCARD_EXIT to fix link error with GNU ld < 2.36
Michael Ellerman (3):
powerpc/64s/radix: Fix RWX mapping with relocated kernel powerpc/vmlinux.lds: Define RUNTIME_DISCARD_EXIT powerpc/vmlinux.lds: Don't discard .rela* for relocatable builds
Paolo Bonzini (2):
KVM: x86: fix deadlock for KVM_XEN_EVTCHN_RESET
selftests: kvm: move declaration at the beginning of main()
Paul Moore (1):
audit: update the mailing list in MAINTAINERS
Peter Zijlstra (3):
x86/alternatives: Introduce int3_emulate_jcc() x86/alternatives: Teach text_poke_bp() to patch Jcc.d32 instructions x86/static_call: Add support for Jcc tail-calls
Rahul Tanwar (5):
clk: mxl: Switch from direct readl/writel based IO to regmap based IO
clk: mxl: Remove redundant spinlocks
clk: mxl: Add option to override gate clks
clk: mxl: Fix a clk entry by adding relevant flags
clk: mxl: syscon_node_to_regmap() returns error pointers
Ricardo Ribalda (2):
spi: mediatek: Enable irq when pdata is ready
spi: mediatek: Enable irq before the spi registration
Sean Anderson (2):
powerpc: dts: t208x: Mark MAC1 and MAC2 as 10G
powerpc: dts: t208x: Disable 10G on MAC1 and MAC2
Sean Christopherson (2):
KVM: x86: Fail emulation during EMULTYPE_SKIP on any exception
KVM: SVM: Skip WRMSR fastpath on VM-Exit if next RIP isn't valid
Shengyu Qu (1):
Bluetooth: btusb: Add more device IDs for WCN6855
Shyam Sundar S K (1):
platform/x86/amd/pmf: Add depends on CONFIG_POWER_SUPPLY
Suren Baghdasaryan (1):
sched/psi: Stop relying on timer_pending() for poll_work rescheduling
Tom Saeger (1):
sh: define RUNTIME_DISCARD_EXIT
Wen Gong (1):
wifi: ath11k: fix warning in dma_free_coherent() of memory chunks while recovery
Yicong Yang (1):
docs: perf: Fix PMU instance name of hisi-pcie-pmu
Yu Xiao (2):
nfp: ethtool: support reporting link modes
nfp: ethtool: fix the bug of setting unsupported port speed
Greg Kroah-Hartman
maintainerDocumentation/admin-guide/perf/hisi-pcie-pmu.rst +11 -11
@@ -15,10 +15,10 @@ HiSilicon PCIe PMU driver The PCIe PMU driver registers a perf PMU with the name of its sicl-id and PCIe Core id.:: - /sys/bus/event_source/hisi_pcie<sicl>_<core> + /sys/bus/event_source/hisi_pcie<sicl>_core<core> PMU driver provides description of available events and filter options in sysfs, -see /sys/bus/event_source/devices/hisi_pcie<sicl>_<core>. +see /sys/bus/event_source/devices/hisi_pcie<sicl>_core<core>. The "format" directory describes all formats of the config (events) and config1 (filter options) fields of the perf_event_attr structure. The "events" directory
@@ -33,13 +33,13 @@ monitored by PMU. Example usage of perf:: $# perf list - hisi_pcie0_0/rx_mwr_latency/ [kernel PMU event] - hisi_pcie0_0/rx_mwr_cnt/ [kernel PMU event] + hisi_pcie0_core0/rx_mwr_latency/ [kernel PMU event] + hisi_pcie0_core0/rx_mwr_cnt/ [kernel PMU event] ------------------------------------------ - $# perf stat -e hisi_pcie0_0/rx_mwr_latency/ - $# perf stat -e hisi_pcie0_0/rx_mwr_cnt/ - $# perf stat -g -e hisi_pcie0_0/rx_mwr_latency/ -e hisi_pcie0_0/rx_mwr_cnt/ + $# perf stat -e hisi_pcie0_core0/rx_mwr_latency/ + $# perf stat -e hisi_pcie0_core0/rx_mwr_cnt/ + $# perf stat -g -e hisi_pcie0_core0/rx_mwr_latency/ -e hisi_pcie0_core0/rx_mwr_cnt/ The current driver does not support sampling. So "perf record" is unsupported. Also attach to a task is unsupported for PCIe PMU.
@@ -64,7 +64,7 @@ bit8 is set, port=0x100; if these two Root Ports are both monitored, port=0x101. Example usage of perf:: - $# perf stat -e hisi_pcie0_0/rx_mwr_latency,port=0x1/ sleep 5 + $# perf stat -e hisi_pcie0_core0/rx_mwr_latency,port=0x1/ sleep 5 -bdf
@@ -76,7 +76,7 @@ For example, "bdf=0x3900" means BDF of target Endpoint is 0000:39:00.0. Example usage of perf:: - $# perf stat -e hisi_pcie0_0/rx_mrd_flux,bdf=0x3900/ sleep 5 + $# perf stat -e hisi_pcie0_core0/rx_mrd_flux,bdf=0x3900/ sleep 5 2. Trigger filter Event statistics start when the first time TLP length is greater/smaller
@@ -90,7 +90,7 @@ means start when TLP length < condition. Example usage of perf:: - $# perf stat -e hisi_pcie0_0/rx_mrd_flux,trig_len=0x4,trig_mode=1/ sleep 5 + $# perf stat -e hisi_pcie0_core0/rx_mrd_flux,trig_len=0x4,trig_mode=1/ sleep 5 3. Threshold filter Counter counts when TLP length within the specified range. You can set the
@@ -103,4 +103,4 @@ when TLP length < threshold. Example usage of perf:: - $# perf stat -e hisi_pcie0_0/rx_mrd_flux,thr_len=0x4,thr_mode=1/ sleep 5 + $# perf stat -e hisi_pcie0_core0/rx_mrd_flux,thr_len=0x4,thr_mode=1/ sleep 5
MAINTAINERS +1 -1
@@ -3444,7 +3444,7 @@ F: drivers/net/ieee802154/atusb.h AUDIT SUBSYSTEM M: Paul Moore <[email protected]> M: Eric Paris <[email protected]> -L: [email protected] (moderated for non-subscribers) +L: [email protected] S: Supported W: https://github.com/linux-audit T: git git://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/audit.git
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 1 -SUBLEVEL = 13 +SUBLEVEL = 14 EXTRAVERSION = NAME = Hurr durr I'ma ninja sloth
arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-2.dtsi new file +44 -0
44 lines not on this page · raw message
arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-3.dtsi new file +44 -0
44 lines not on this page · raw message
arch/powerpc/boot/dts/fsl/t2081si-post.dtsi +18 -2
@@ -609,8 +609,8 @@ usb1: usb@211000 { /include/ "qoriq-bman1.dtsi" /include/ "qoriq-fman3-0.dtsi" -/include/ "qoriq-fman3-0-1g-0.dtsi" -/include/ "qoriq-fman3-0-1g-1.dtsi" +/include/ "qoriq-fman3-0-10g-2.dtsi" +/include/ "qoriq-fman3-0-10g-3.dtsi" /include/ "qoriq-fman3-0-1g-2.dtsi" /include/ "qoriq-fman3-0-1g-3.dtsi" /include/ "qoriq-fman3-0-1g-4.dtsi"
@@ -659,3 +659,19 @@ L2_1: l2-cache-controller@c20000 { interrupts = <16 2 1 9>; }; }; + +&fman0_rx_0x08 { + /delete-property/ fsl,fman-10g-port; +}; + +&fman0_tx_0x28 { + /delete-property/ fsl,fman-10g-port; +}; + +&fman0_rx_0x09 { + /delete-property/ fsl,fman-10g-port; +}; + +&fman0_tx_0x29 { + /delete-property/ fsl,fman-10g-port; +};
arch/powerpc/kernel/vmlinux.lds.S +5 -1
@@ -8,6 +8,7 @@ #define BSS_FIRST_SECTIONS *(.bss.prominit) #define EMITS_PT_NOTE #define RO_EXCEPTION_TABLE_ALIGN 0 +#define RUNTIME_DISCARD_EXIT #define SOFT_MASK_TABLE(align) \ . = ALIGN(align); \
@@ -410,9 +411,12 @@ SECTIONS DISCARDS /DISCARD/ : { *(*.EMB.apuinfo) - *(.glink .iplt .plt .rela* .comment) + *(.glink .iplt .plt .comment) *(.gnu.version*) *(.gnu.attributes) *(.eh_frame) +#ifndef CONFIG_RELOCATABLE + *(.rela*) +#endif } }
arch/powerpc/mm/book3s64/radix_pgtable.c +13 -0
@@ -234,6 +234,14 @@ void radix__mark_rodata_ro(void) end = (unsigned long )__end_rodata;radix__change_memory_range (start, end, _PAGE_WRITE); + +for (start =PAGE_OFFSET ; start < (unsigned long )_stext; start +=PAGE_SIZE ) { + end = start +PAGE_SIZE ; +if (overlaps_interrupt_vector_text (start, end)) +radix__change_memory_range (start, end, _PAGE_WRITE); +else +break ; + } }void radix__mark_initmem_nx (void )
@@ -268,6 +276,11 @@ static unsigned long next_boundary(unsigned long addr, unsigned long end)// Relocatable kernel running at non-zero real address if (stext_phys !=0 ) { +// The end of interrupts code at zero is a rodata boundary +unsigned long end_intr =__pa_symbol (__end_interrupts) - stext_phys; +if (addr < end_intr) +return end_intr; +// Start of relocated kernel text is a rodata boundary if (addr < stext_phys)return stext_phys;
arch/s390/kernel/vmlinux.lds.S +2 -0
@@ -17,6 +17,8 @@ /* Handle ro_after_init data on our own. */ #define RO_AFTER_INIT_DATA +#define RUNTIME_DISCARD_EXIT + #define EMITS_PT_NOTE #include <asm-generic/vmlinux.lds.h>
arch/sh/kernel/vmlinux.lds.S +1 -0
@@ -4,6 +4,7 @@ * Written by Niibe Yutaka and Paul Mundt */ OUTPUT_ARCH(sh) +#define RUNTIME_DISCARD_EXIT #include <asm/thread_info.h> #include <asm/cache.h> #include <asm/vmlinux.lds.h>
arch/x86/include/asm/text-patching.h +31 -0
@@ -183,6 +183,37 @@ void int3_emulate_ret(struct pt_regs *regs)unsigned long ip =int3_emulate_pop (regs);int3_emulate_jmp (regs, ip); } + +static __always_inline +void int3_emulate_jcc(struct pt_regs *regs, u8 cc, unsigned long ip, unsigned long disp) +{ +static const unsigned long jcc_mask[6 ] = { + [0 ] =X86_EFLAGS_OF , + [1 ] =X86_EFLAGS_CF , + [2 ] =X86_EFLAGS_ZF , + [3 ] =X86_EFLAGS_CF |X86_EFLAGS_ZF , + [4 ] =X86_EFLAGS_SF , + [5 ] =X86_EFLAGS_PF , + }; + +bool invert = cc &1 ; +bool match; + +if (cc <0xc ) { + match = regs->flags & jcc_mask[cc >>1 ]; + }else { + match = ((regs->flags &X86_EFLAGS_SF ) >>X86_EFLAGS_SF_BIT ) ^ + ((regs->flags &X86_EFLAGS_OF ) >>X86_EFLAGS_OF_BIT ); +if (cc >=0xe ) + match = match || (regs->flags &X86_EFLAGS_ZF ); + } + +if ((match && !invert) || (!match && invert)) + ip += disp; + +int3_emulate_jmp (regs, ip); +} +#endif /* !CONFIG_UML_X86 */ #endif /* _ASM_X86_TEXT_PATCHING_H */
arch/x86/kernel/alternative.c +48 -11
136 lines not on this page · raw message
arch/x86/kernel/kprobes/core.c +8 -30
@@ -471,50 +471,26 @@ static void kprobe_emulate_call(struct kprobe *p, struct pt_regs *regs) }NOKPROBE_SYMBOL (kprobe_emulate_call); -static nokprobe_inline -void __kprobe_emulate_jmp(struct kprobe *p, struct pt_regs *regs, bool cond) +static void kprobe_emulate_jmp (struct kprobe *p,struct pt_regs *regs) {unsigned long ip = regs->ip -INT3_INSN_SIZE + p->ainsn.size; -if (cond) - ip += p->ainsn.rel32; + ip += p->ainsn.rel32;int3_emulate_jmp (regs, ip); } - -static void kprobe_emulate_jmp (struct kprobe *p,struct pt_regs *regs) -{ -__kprobe_emulate_jmp (p, regs, true); -}NOKPROBE_SYMBOL (kprobe_emulate_jmp); -static const unsigned long jcc_mask[6 ] = { - [0 ] =X86_EFLAGS_OF , - [1 ] =X86_EFLAGS_CF , - [2 ] =X86_EFLAGS_ZF , - [3 ] =X86_EFLAGS_CF |X86_EFLAGS_ZF , - [4 ] =X86_EFLAGS_SF , - [5 ] =X86_EFLAGS_PF , -}; -static void kprobe_emulate_jcc (struct kprobe *p,struct pt_regs *regs) { -bool invert = p->ainsn.jcc.type &1 ; -bool match; +unsigned long ip = regs->ip -INT3_INSN_SIZE + p->ainsn.size; -if (p->ainsn.jcc.type <0xc ) { - match = regs->flags & jcc_mask[p->ainsn.jcc.type >>1 ]; - }else { - match = ((regs->flags &X86_EFLAGS_SF ) >>X86_EFLAGS_SF_BIT ) ^ - ((regs->flags &X86_EFLAGS_OF ) >>X86_EFLAGS_OF_BIT ); -if (p->ainsn.jcc.type >=0xe ) - match = match || (regs->flags &X86_EFLAGS_ZF ); - } -__kprobe_emulate_jmp (p, regs, (match && !invert) || (!match && invert)); +int3_emulate_jcc (regs, p->ainsn.jcc.type, ip, p->ainsn.rel32); }NOKPROBE_SYMBOL (kprobe_emulate_jcc);static void kprobe_emulate_loop (struct kprobe *p,struct pt_regs *regs) { +unsigned long ip = regs->ip -INT3_INSN_SIZE + p->ainsn.size;bool match;if (p->ainsn.loop.type !=3 ) {/* LOOP* */
@@ -542,7 +518,9 @@ static void kprobe_emulate_loop(struct kprobe *p, struct pt_regs *regs)else if (p->ainsn.loop.type ==1 )/* LOOPE */ match = match && (regs->flags &X86_EFLAGS_ZF ); -__kprobe_emulate_jmp (p, regs, match); +if (match) + ip += p->ainsn.rel32; +int3_emulate_jmp (regs, ip); }NOKPROBE_SYMBOL (kprobe_emulate_loop);
arch/x86/kernel/static_call.c +46 -3
86 lines not on this page · raw message
arch/x86/kvm/svm/svm.c +8 -2
@@ -3889,8 +3889,14 @@ static int svm_vcpu_pre_run(struct kvm_vcpu *vcpu)static fastpath_t svm_exit_handlers_fastpath (struct kvm_vcpu *vcpu) { -if (to_svm (vcpu)->vmcb->control.exit_code ==SVM_EXIT_MSR && -to_svm (vcpu)->vmcb->control.exit_info_1) +struct vmcb_control_area *control = &to_svm (vcpu)->vmcb->control; + +/* +* Note, the next RIP must be provided as SRCU isn't held, i.e. KVM +* can't read guest memory (dereference memslots) to decode the WRMSR. +*/ +if (control->exit_code ==SVM_EXIT_MSR && control->exit_info_1 && + nrips && control->next_rip)return handle_fastpath_set_msr_irqoff (vcpu);return EXIT_FASTPATH_NONE ;
arch/x86/kvm/vmx/nested.c +11 -0
@@ -4767,6 +4767,17 @@ void nested_vmx_vmexit(struct kvm_vcpu *vcpu, u32 vm_exit_reason,vmx_switch_vmcs (vcpu, &vmx->vmcs01); +/* +* If IBRS is advertised to the vCPU, KVM must flush the indirect +* branch predictors when transitioning from L2 to L1, as L1 expects +* hardware (KVM in this case) to provide separate predictor modes. +* Bare metal isolates VMX root (host) from VMX non-root (guest), but +* doesn't isolate different VMCSs, i.e. in this case, doesn't provide +* separate modes for L2 vs L1. +*/ +if (guest_cpuid_has (vcpu,X86_FEATURE_SPEC_CTRL )) +indirect_branch_prediction_barrier (); +/* Update any VMCS fields that might have changed while L2 ran */ vmcs_write32 (VM_EXIT_MSR_LOAD_COUNT , vmx->msr_autoload.host.nr);vmcs_write32 (VM_ENTRY_MSR_LOAD_COUNT , vmx->msr_autoload.guest.nr);
arch/x86/kvm/vmx/vmx.c +4 -2
@@ -1348,8 +1348,10 @@ void vmx_vcpu_load_vmcs(struct kvm_vcpu *vcpu, int cpu,/* * No indirect branch prediction barrier needed when switching -* the active VMCS within a guest, e.g. on nested VM-Enter. -* The L1 VMM can protect itself with retpolines, IBPB or IBRS. +* the active VMCS within a vCPU, unless IBRS is advertised to +* the vCPU. To minimize the number of IBPBs executed, KVM +* performs IBPB on nested VM-Exit (a single nested transition +* may switch the active VMCS multiple times). */ if (!buddy ||WARN_ON_ONCE (buddy->vmcs != prev))indirect_branch_prediction_barrier ();
arch/x86/kvm/x86.c +3 -1
@@ -8860,7 +8860,9 @@ int x86_emulate_instruction(struct kvm_vcpu *vcpu, gpa_t cr2_or_gpa, write_fault_to_spt, emulation_type))return 1 ; -if (ctxt->have_exception) { + +if (ctxt->have_exception && + !(emulation_type &EMULTYPE_SKIP )) {/* * #UD should result in just EMULATION_FAILED, and trap-like * exception should not be encountered during decode.
arch/x86/kvm/xen.c +27 -3
@@ -1757,18 +1757,42 @@ static int kvm_xen_eventfd_deassign(struct kvm *kvm, u32 port)static int kvm_xen_eventfd_reset (struct kvm *kvm) { -struct evtchnfd *evtchnfd; +struct evtchnfd *evtchnfd, **all_evtchnfds;int i; +int n =0 ;mutex_lock (&kvm->lock); + +/* +* Because synchronize_srcu() cannot be called inside the +* critical section, first collect all the evtchnfd objects +* in an array as they are removed from evtchn_ports. +*/ +idr_for_each_entry (&kvm->arch.xen.evtchn_ports, evtchnfd, i) + n++; + + all_evtchnfds =kmalloc_array (n,sizeof (struct evtchnfd *),GFP_KERNEL ); +if (!all_evtchnfds) { +mutex_unlock (&kvm->lock); +return -ENOMEM ; + } + + n =0 ;idr_for_each_entry (&kvm->arch.xen.evtchn_ports, evtchnfd, i) { + all_evtchnfds[n++] = evtchnfd;idr_remove (&kvm->arch.xen.evtchn_ports, evtchnfd->send_port); -synchronize_srcu (&kvm->srcu); + } +mutex_unlock (&kvm->lock); + +synchronize_srcu (&kvm->srcu); + +while (n--) { + evtchnfd = all_evtchnfds[n];if (!evtchnfd->deliver.port.port)eventfd_ctx_put (evtchnfd->deliver.eventfd.ctx);kfree (evtchnfd); } -mutex_unlock (&kvm->lock); +kfree (all_evtchnfds);return 0 ; }
drivers/bluetooth/btusb.c +84 -0
90 lines not on this page · raw message
drivers/clk/x86/Kconfig +3 -2
@@ -1,8 +1,9 @@ # SPDX-License-Identifier: GPL-2.0-only config CLK_LGM_CGU depends on OF && HAS_IOMEM && (X86 || COMPILE_TEST) + select MFD_SYSCON select OF_EARLY_FLATTREE bool "Clock driver for Lightning Mountain(LGM) platform" help - Clock Generation Unit(CGU) driver for Intel Lightning Mountain(LGM) - network processor SoC. + Clock Generation Unit(CGU) driver for MaxLinear's x86 based + Lightning Mountain(LGM) network processor SoC.
drivers/clk/x86/clk-cgu-pll.c +6 -17
@@ -1,8 +1,9 @@// SPDX-License-Identifier: GPL-2.0 /* +* Copyright (C) 2020-2022 MaxLinear, Inc. * Copyright (C) 2020 Intel Corporation. -* Zhu YiXin <[email protected]> -* Rahul Tanwar <[email protected]> +* Zhu Yixin <[email protected]> +* Rahul Tanwar <[email protected]> */ #include <linux/clk-provider.h>
@@ -40,13 +41,10 @@ static unsigned long lgm_pll_recalc_rate(struct clk_hw *hw, unsigned long prate) {struct lgm_clk_pll *pll =to_lgm_clk_pll (hw);unsigned int div, mult, frac; -unsigned long flags; -spin_lock_irqsave (&pll->lock, flags); mult =lgm_get_clk_val (pll->membase,PLL_REF_DIV (pll->reg),0 ,12 ); div =lgm_get_clk_val (pll->membase,PLL_REF_DIV (pll->reg),18 ,6 ); frac =lgm_get_clk_val (pll->membase, pll->reg,2 ,24 ); -spin_unlock_irqrestore (&pll->lock, flags);if (pll->type ==TYPE_LJPLL ) div *=4 ;
@@ -57,12 +55,9 @@ static unsigned long lgm_pll_recalc_rate(struct clk_hw *hw, unsigned long prate)static int lgm_pll_is_enabled (struct clk_hw *hw) {struct lgm_clk_pll *pll =to_lgm_clk_pll (hw); -unsigned long flags;unsigned int ret; -spin_lock_irqsave (&pll->lock, flags); ret =lgm_get_clk_val (pll->membase, pll->reg,0 ,1 ); -spin_unlock_irqrestore (&pll->lock, flags);return ret; }
@@ -70,15 +65,13 @@ static int lgm_pll_is_enabled(struct clk_hw *hw)static int lgm_pll_enable (struct clk_hw *hw) {struct lgm_clk_pll *pll =to_lgm_clk_pll (hw); -unsigned long flags;u32 val;int ret; -spin_lock_irqsave (&pll->lock, flags);lgm_set_clk_val (pll->membase, pll->reg,0 ,1 ,1 ); - ret =readl_poll_timeout_atomic (pll->membase + pll->reg, - val, (val &0x1 ),1 ,100 ); -spin_unlock_irqrestore (&pll->lock, flags); + ret =regmap_read_poll_timeout_atomic (pll->membase, pll->reg, + val, (val &0x1 ),1 ,100 ); +return ret; }
@@ -86,11 +79,8 @@ static int lgm_pll_enable(struct clk_hw *hw)static void lgm_pll_disable (struct clk_hw *hw) {struct lgm_clk_pll *pll =to_lgm_clk_pll (hw); -unsigned long flags; -spin_lock_irqsave (&pll->lock, flags);lgm_set_clk_val (pll->membase, pll->reg,0 ,1 ,0 ); -spin_unlock_irqrestore (&pll->lock, flags); }static const struct clk_ops lgm_pll_ops = {
@@ -121,7 +111,6 @@ lgm_clk_register_pll(struct lgm_clk_provider *ctx,return ERR_PTR (-ENOMEM ); pll->membase = ctx->membase; - pll->lock = ctx->lock; pll->reg = list->reg; pll->flags = list->flags; pll->type = list->type;
drivers/clk/x86/clk-cgu.c +30 -76
358 lines not on this page · raw message
drivers/clk/x86/clk-cgu.h +23 -23
136 lines not on this page · raw message
drivers/clk/x86/clk-lgm.c +11 -7
@@ -1,10 +1,12 @@// SPDX-License-Identifier: GPL-2.0 /* +* Copyright (C) 2020-2022 MaxLinear, Inc. * Copyright (C) 2020 Intel Corporation. -* Zhu YiXin <[email protected]> -* Rahul Tanwar <[email protected]> +* Zhu Yixin <[email protected]> +* Rahul Tanwar <[email protected]> */ #include <linux/clk-provider.h> +#include <linux/mfd/syscon.h> #include <linux/of.h> #include <linux/platform_device.h> #include <dt-bindings/clock/intel,lgm-clk.h>
@@ -253,8 +255,8 @@ static const struct lgm_clk_branch lgm_branch_clks[] = {LGM_FIXED (LGM_CLK_SLIC ,"slic" ,NULL ,0 ,CGU_IF_CLK1 ,8 ,2 ,CLOCK_FLAG_VAL_INIT ,8192000 ,2 ),LGM_FIXED (LGM_CLK_DOCSIS ,"v_docsis" ,NULL ,0 ,0 ,0 ,0 ,0 ,16000000 ,0 ), -LGM_DIV (LGM_CLK_DCL ,"dcl" ,"v_ifclk" ,0 ,CGU_PCMCR , -25 ,3 ,0 ,0 ,0 ,0 , dcl_div), +LGM_DIV (LGM_CLK_DCL ,"dcl" ,"v_ifclk" ,CLK_SET_RATE_PARENT ,CGU_PCMCR , +25 ,3 ,0 ,0 ,DIV_CLK_NO_MASK ,0 , dcl_div),LGM_MUX (LGM_CLK_PCM ,"pcm" , pcm_p,0 ,CGU_C55_PCMCR ,0 ,1 ,CLK_MUX_ROUND_CLOSEST ,0 ), LGM_FIXED_FACTOR(LGM_CLK_DDR_PHY, "ddr_phy", "ddr",
@@ -433,13 +435,15 @@ static int lgm_cgu_probe(struct platform_device *pdev) ctx->clk_data.num =CLK_NR_CLKS ; - ctx->membase =devm_platform_ioremap_resource (pdev,0 ); -if (IS_ERR (ctx->membase)) + ctx->membase =syscon_node_to_regmap (np); +if (IS_ERR (ctx->membase)) { +dev_err (dev,"Failed to get clk CGU iomem\n" );return PTR_ERR (ctx->membase); + } + ctx->np = np; ctx->dev = dev; -spin_lock_init (&ctx->lock); ret =lgm_clk_register_plls (ctx, lgm_pll_clks,ARRAY_SIZE (lgm_pll_clks));
drivers/gpu/drm/drm_edid.c +2 -1
@@ -5827,7 +5827,8 @@ static void drm_parse_hdmi_forum_scds(struct drm_connector *connector,else if (hf_scds[11 ] &DRM_EDID_DSC_10BPC ) hdmi_dsc->bpc_supported =10 ;else - hdmi_dsc->bpc_supported =0 ; +/* Supports min 8 BPC if DSC 1.2 is supported*/ + hdmi_dsc->bpc_supported =8 ; dsc_max_frl_rate = (hf_scds[12 ] &DRM_EDID_DSC_MAX_FRL_RATE_MASK ) >>4 ; drm_get_max_frl_rate(dsc_max_frl_rate, &hdmi_dsc->max_lanes,
drivers/gpu/drm/etnaviv/etnaviv_mmu.c +2 -2
@@ -80,10 +80,10 @@ static int etnaviv_iommu_map(struct etnaviv_iommu_context *context, u32 iova,return -EINVAL ;for_each_sgtable_dma_sg (sgt, sg, i) { -u32 pa =sg_dma_address (sg) - sg->offset; +phys_addr_t pa =sg_dma_address (sg) - sg->offset;size_t bytes =sg_dma_len (sg) + sg->offset; -VERB ("map[%d]: %08x %08x(%zx)" , i, iova, pa, bytes); +VERB ("map[%d]: %08x %pap(%zx)" , i, iova, &pa, bytes); ret =etnaviv_context_map (context, da, pa, bytes, prot);if (ret)
drivers/gpu/drm/i915/i915_pci.c +0 -1
@@ -1130,7 +1130,6 @@ static const struct intel_gt_definition xelpmp_extra_gt[] = { {} }; -__maybe_unused static const struct intel_device_info mtl_info = {XE_HP_FEATURES ,XE_LPDP_FEATURES ,
drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c +24 -9
@@ -545,6 +545,7 @@ static int kvaser_usb_hydra_send_simple_cmd(struct kvaser_usb *dev, u8 cmd_no, int channel) {struct kvaser_cmd *cmd; +size_t cmd_len;int err; cmd =kzalloc (sizeof (*cmd),GFP_KERNEL );
@@ -552,6 +553,7 @@ static int kvaser_usb_hydra_send_simple_cmd(struct kvaser_usb *dev,return -ENOMEM ; cmd->header.cmd_no = cmd_no; + cmd_len =kvaser_usb_hydra_cmd_size (cmd);if (channel <0 ) {kvaser_usb_hydra_set_cmd_dest_he (cmd,KVASER_USB_HYDRA_HE_ADDRESS_ILLEGAL );
@@ -568,7 +570,7 @@ static int kvaser_usb_hydra_send_simple_cmd(struct kvaser_usb *dev,kvaser_usb_hydra_set_cmd_transid (cmd,kvaser_usb_hydra_get_next_transid (dev)); - err =kvaser_usb_send_cmd (dev, cmd,kvaser_usb_hydra_cmd_size (cmd)); + err =kvaser_usb_send_cmd (dev, cmd, cmd_len);if (err) goto end;
@@ -584,6 +586,7 @@ kvaser_usb_hydra_send_simple_cmd_async(struct kvaser_usb_net_priv *priv, {struct kvaser_cmd *cmd;struct kvaser_usb *dev = priv->dev; +size_t cmd_len;int err; cmd =kzalloc (sizeof (*cmd),GFP_ATOMIC );
@@ -591,14 +594,14 @@ kvaser_usb_hydra_send_simple_cmd_async(struct kvaser_usb_net_priv *priv,return -ENOMEM ; cmd->header.cmd_no = cmd_no; + cmd_len =kvaser_usb_hydra_cmd_size (cmd);kvaser_usb_hydra_set_cmd_dest_he (cmd, dev->card_data.hydra.channel_to_he[priv->channel]);kvaser_usb_hydra_set_cmd_transid (cmd,kvaser_usb_hydra_get_next_transid (dev)); - err =kvaser_usb_send_cmd_async (priv, cmd, -kvaser_usb_hydra_cmd_size (cmd)); + err =kvaser_usb_send_cmd_async (priv, cmd, cmd_len);if (err)kfree (cmd);
@@ -742,6 +745,7 @@ static int kvaser_usb_hydra_get_single_capability(struct kvaser_usb *dev, {struct kvaser_usb_dev_card_data *card_data = &dev->card_data;struct kvaser_cmd *cmd; +size_t cmd_len;u32 value =0 ;u32 mask =0 ;u16 cap_cmd_res;
@@ -753,13 +757,14 @@ static int kvaser_usb_hydra_get_single_capability(struct kvaser_usb *dev,return -ENOMEM ; cmd->header.cmd_no =CMD_GET_CAPABILITIES_REQ ; + cmd_len =kvaser_usb_hydra_cmd_size (cmd); cmd->cap_req.cap_cmd =cpu_to_le16 (cap_cmd_req);kvaser_usb_hydra_set_cmd_dest_he (cmd, card_data->hydra.sysdbg_he);kvaser_usb_hydra_set_cmd_transid (cmd,kvaser_usb_hydra_get_next_transid (dev)); - err =kvaser_usb_send_cmd (dev, cmd,kvaser_usb_hydra_cmd_size (cmd)); + err =kvaser_usb_send_cmd (dev, cmd, cmd_len);if (err) goto end;
@@ -1578,6 +1583,7 @@ static int kvaser_usb_hydra_get_busparams(struct kvaser_usb_net_priv *priv,struct kvaser_usb *dev = priv->dev;struct kvaser_usb_net_hydra_priv *hydra = priv->sub_priv;struct kvaser_cmd *cmd; +size_t cmd_len;int err;if (!hydra)
@@ -1588,6 +1594,7 @@ static int kvaser_usb_hydra_get_busparams(struct kvaser_usb_net_priv *priv,return -ENOMEM ; cmd->header.cmd_no =CMD_GET_BUSPARAMS_REQ ; + cmd_len =kvaser_usb_hydra_cmd_size (cmd);kvaser_usb_hydra_set_cmd_dest_he (cmd, dev->card_data.hydra.channel_to_he[priv->channel]); kvaser_usb_hydra_set_cmd_transid
@@ -1597,7 +1604,7 @@ static int kvaser_usb_hydra_get_busparams(struct kvaser_usb_net_priv *priv,reinit_completion (&priv->get_busparams_comp); - err =kvaser_usb_send_cmd (dev, cmd,kvaser_usb_hydra_cmd_size (cmd)); + err =kvaser_usb_send_cmd (dev, cmd, cmd_len);if (err)return err;
@@ -1624,6 +1631,7 @@ static int kvaser_usb_hydra_set_bittiming(const struct net_device *netdev,struct kvaser_cmd *cmd;struct kvaser_usb_net_priv *priv =netdev_priv (netdev);struct kvaser_usb *dev = priv->dev; +size_t cmd_len;int err; cmd =kzalloc (sizeof (*cmd),GFP_KERNEL );
@@ -1631,6 +1639,7 @@ static int kvaser_usb_hydra_set_bittiming(const struct net_device *netdev,return -ENOMEM ; cmd->header.cmd_no =CMD_SET_BUSPARAMS_REQ ; + cmd_len =kvaser_usb_hydra_cmd_size (cmd);memcpy (&cmd->set_busparams_req.busparams_nominal, busparams,sizeof (cmd->set_busparams_req.busparams_nominal));
@@ -1639,7 +1648,7 @@ static int kvaser_usb_hydra_set_bittiming(const struct net_device *netdev,kvaser_usb_hydra_set_cmd_transid (cmd,kvaser_usb_hydra_get_next_transid (dev)); - err =kvaser_usb_send_cmd (dev, cmd,kvaser_usb_hydra_cmd_size (cmd)); + err =kvaser_usb_send_cmd (dev, cmd, cmd_len);kfree (cmd);
@@ -1652,6 +1661,7 @@ static int kvaser_usb_hydra_set_data_bittiming(const struct net_device *netdev,struct kvaser_cmd *cmd;struct kvaser_usb_net_priv *priv =netdev_priv (netdev);struct kvaser_usb *dev = priv->dev; +size_t cmd_len;int err; cmd =kzalloc (sizeof (*cmd),GFP_KERNEL );
@@ -1659,6 +1669,7 @@ static int kvaser_usb_hydra_set_data_bittiming(const struct net_device *netdev,return -ENOMEM ; cmd->header.cmd_no =CMD_SET_BUSPARAMS_FD_REQ ; + cmd_len =kvaser_usb_hydra_cmd_size (cmd);memcpy (&cmd->set_busparams_req.busparams_data, busparams,sizeof (cmd->set_busparams_req.busparams_data));
@@ -1676,7 +1687,7 @@ static int kvaser_usb_hydra_set_data_bittiming(const struct net_device *netdev,kvaser_usb_hydra_set_cmd_transid (cmd,kvaser_usb_hydra_get_next_transid (dev)); - err =kvaser_usb_send_cmd (dev, cmd,kvaser_usb_hydra_cmd_size (cmd)); + err =kvaser_usb_send_cmd (dev, cmd, cmd_len);kfree (cmd);
@@ -1804,6 +1815,7 @@ static int kvaser_usb_hydra_get_software_info(struct kvaser_usb *dev)static int kvaser_usb_hydra_get_software_details (struct kvaser_usb *dev) {struct kvaser_cmd *cmd; +size_t cmd_len;int err;u32 flags;struct kvaser_usb_dev_card_data *card_data = &dev->card_data;
@@ -1813,6 +1825,7 @@ static int kvaser_usb_hydra_get_software_details(struct kvaser_usb *dev)return -ENOMEM ; cmd->header.cmd_no =CMD_GET_SOFTWARE_DETAILS_REQ ; + cmd_len =kvaser_usb_hydra_cmd_size (cmd); cmd->sw_detail_req.use_ext_cmd =1 ;kvaser_usb_hydra_set_cmd_dest_he (cmd,KVASER_USB_HYDRA_HE_ADDRESS_ILLEGAL );
@@ -1820,7 +1833,7 @@ static int kvaser_usb_hydra_get_software_details(struct kvaser_usb *dev)kvaser_usb_hydra_set_cmd_transid (cmd,kvaser_usb_hydra_get_next_transid (dev)); - err =kvaser_usb_send_cmd (dev, cmd,kvaser_usb_hydra_cmd_size (cmd)); + err =kvaser_usb_send_cmd (dev, cmd, cmd_len);if (err) goto end;
@@ -1938,6 +1951,7 @@ static int kvaser_usb_hydra_set_opt_mode(const struct kvaser_usb_net_priv *priv) {struct kvaser_usb *dev = priv->dev;struct kvaser_cmd *cmd; +size_t cmd_len;int err; if ((priv->can.ctrlmode &
@@ -1953,6 +1967,7 @@ static int kvaser_usb_hydra_set_opt_mode(const struct kvaser_usb_net_priv *priv)return -ENOMEM ; cmd->header.cmd_no =CMD_SET_DRIVERMODE_REQ ; + cmd_len =kvaser_usb_hydra_cmd_size (cmd);kvaser_usb_hydra_set_cmd_dest_he (cmd, dev->card_data.hydra.channel_to_he[priv->channel]); kvaser_usb_hydra_set_cmd_transid
@@ -1962,7 +1977,7 @@ static int kvaser_usb_hydra_set_opt_mode(const struct kvaser_usb_net_priv *priv)else cmd->set_ctrlmode.mode =KVASER_USB_HYDRA_CTRLMODE_NORMAL ; - err =kvaser_usb_send_cmd (dev, cmd,kvaser_usb_hydra_cmd_size (cmd)); + err =kvaser_usb_send_cmd (dev, cmd, cmd_len);kfree (cmd);return err;
drivers/net/ethernet/netronome/nfp/nfp_main.h +1 -0
@@ -28,6 +28,7 @@ struct nfp_hwinfo;struct nfp_mip ;struct nfp_net ;struct nfp_nsp_identify ; +struct nfp_eth_media_buf ;struct nfp_port ;struct nfp_rtsym ;struct nfp_rtsym_table ;
drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c +195 -0
219 lines not on this page · raw message
drivers/net/ethernet/netronome/nfp/nfp_port.h +12 -0
@@ -38,6 +38,16 @@ enum nfp_port_flags { NFP_PORT_CHANGED = 0, }; +enum { +NFP_SPEED_1G , +NFP_SPEED_10G , +NFP_SPEED_25G , +NFP_SPEED_40G , +NFP_SPEED_50G , +NFP_SPEED_100G , +NFP_SUP_SPEED_NUMBER +}; +/** * struct nfp_port - structure representing NFP port * @netdev: backpointer to associated netdev
@@ -52,6 +62,7 @@ enum nfp_port_flags {* @eth_forced: for %NFP_PORT_PHYS_PORT port is forced UP or DOWN, don't change * @eth_port: for %NFP_PORT_PHYS_PORT translated ETH Table port entry * @eth_stats: for %NFP_PORT_PHYS_PORT MAC stats if available +* @speed_bitmap: for %NFP_PORT_PHYS_PORT supported speed bitmap * @pf_id: for %NFP_PORT_PF_PORT, %NFP_PORT_VF_PORT ID of the PCI PF (0-3) * @vf_id: for %NFP_PORT_VF_PORT ID of the PCI VF within @pf_id * @pf_split: for %NFP_PORT_PF_PORT %true if PCI PF has more than one vNIC
@@ -78,6 +89,7 @@ struct nfp_port {bool eth_forced;struct nfp_eth_table_port *eth_port;u8 __iomem *eth_stats; +DECLARE_BITMAP (speed_bitmap,NFP_SUP_SPEED_NUMBER ); };/* NFP_PORT_PF_PORT, NFP_PORT_VF_PORT */ struct {
drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c +17 -0
@@ -100,6 +100,7 @@ enum nfp_nsp_cmd {SPCODE_FW_LOADED =19 ,/* Is application firmware loaded */ SPCODE_VERSIONS =21 ,/* Report FW versions */ SPCODE_READ_SFF_EEPROM =22 ,/* Read module EEPROM */ + SPCODE_READ_MEDIA = 23, /* Get either the supported or advertised media for a port */ }; struct nfp_nsp_dma_buf {
@@ -1100,4 +1101,20 @@ int nfp_nsp_read_module_eeprom(struct nfp_nsp *state, int eth_index,kfree (buf);return ret; +}; + +int nfp_nsp_read_media (struct nfp_nsp *state,void *buf,unsigned int size) +{ +struct nfp_nsp_command_buf_arg media = { + { + .code =SPCODE_READ_MEDIA , + .option = size, + }, + .in_buf = buf, + .in_size = size, + .out_buf = buf, + .out_size = size, + }; + +return nfp_nsp_command_buf (state, &media); }
drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.h +56 -0
74 lines not on this page · raw message
drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp_eth.c +26 -0
@@ -647,3 +647,29 @@ int __nfp_eth_set_split(struct nfp_nsp *nsp, unsigned int lanes)return NFP_ETH_SET_BIT_CONFIG (nsp,NSP_ETH_RAW_PORT ,NSP_ETH_PORT_LANES , lanes,NSP_ETH_CTRL_SET_LANES ); } + +int nfp_eth_read_media (struct nfp_cpp *cpp,struct nfp_eth_media_buf *ethm) +{ +struct nfp_nsp *nsp; +int ret; + + nsp =nfp_nsp_open (cpp); +if (IS_ERR (nsp)) { +nfp_err (cpp,"Failed to access the NSP: %pe\n" , nsp); +return PTR_ERR (nsp); + } + +if (!nfp_nsp_has_read_media (nsp)) { +nfp_warn (cpp,"Reading media link modes not supported. Please update flash\n" ); + ret = -EOPNOTSUPP ; + goto exit_close_nsp; + } + + ret =nfp_nsp_read_media (nsp, ethm,sizeof (*ethm)); +if (ret) +nfp_err (cpp,"Reading media link modes failed: %pe\n" ,ERR_PTR (ret)); + +exit_close_nsp: +nfp_nsp_close (nsp); +return ret; +}
drivers/net/wireless/ath/ath11k/qmi.c +3 -3
@@ -1964,7 +1964,7 @@ static void ath11k_qmi_free_target_mem_chunk(struct ath11k_base *ab)continue ;dma_free_coherent (ab->dev, - ab->qmi.target_mem[i].size, + ab->qmi.target_mem[i].prev_size, ab->qmi.target_mem[i].vaddr, ab->qmi.target_mem[i].paddr); ab->qmi.target_mem[i].vaddr =NULL ;
@@ -1985,12 +1985,12 @@ static int ath11k_qmi_alloc_target_mem_chunk(struct ath11k_base *ab)* in such case, no need to allocate memory for FW again. */ if (chunk->vaddr) { -if (chunk->prev_type == chunk->type || +if (chunk->prev_type == chunk->type && chunk->prev_size == chunk->size)continue ;/* cannot reuse the existing chunk */ -dma_free_coherent (ab->dev, chunk->size, +dma_free_coherent (ab->dev, chunk->prev_size, chunk->vaddr, chunk->paddr); chunk->vaddr =NULL ; }
drivers/net/wireless/marvell/mwifiex/sdio.c +1 -0
@@ -480,6 +480,7 @@ static struct memory_type_mapping mem_type_mapping_tbl[] = { };static const struct of_device_id mwifiex_sdio_of_match_table[] = { + { .compatible ="marvell,sd8787" }, { .compatible ="marvell,sd8897" }, { .compatible ="marvell,sd8997" }, { }
drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c +2 -6
@@ -4389,12 +4389,9 @@ void rtl8xxxu_gen1_report_connect(struct rtl8xxxu_priv *priv,void rtl8xxxu_gen2_report_connect (struct rtl8xxxu_priv *priv,u8 macid,bool connect) { -#ifdef RTL8XXXU_GEN2_REPORT_CONNECT /* -* Barry Day reports this causes issues with 8192eu and 8723bu -* devices reconnecting. The reason for this is unclear, but -* until it is better understood, leave the code in place but -* disabled, so it is not lost. +* The firmware turns on the rate control when it knows it's +* connected to a network. */ struct h2c_cmd h2c;
@@ -4407,7 +4404,6 @@ void rtl8xxxu_gen2_report_connect(struct rtl8xxxu_priv *priv, h2c.media_status_rpt.parm &= ~BIT (0 );rtl8xxxu_gen2_h2c_cmd (priv, &h2c,sizeof (h2c.media_status_rpt)); -#endif }void rtl8xxxu_gen1_init_aggregation (struct rtl8xxxu_priv *priv)
drivers/platform/x86/amd/pmf/Kconfig +1 -0
@@ -6,6 +6,7 @@ config AMD_PMF tristate "AMD Platform Management Framework" depends on ACPI && PCI + depends on POWER_SUPPLY select ACPI_PLATFORM_PROFILE help This driver provides support for the AMD Platform Management Framework.
drivers/platform/x86/nvidia-wmi-ec-backlight.c +5 -1
@@ -12,6 +12,10 @@#include <linux/wmi.h> #include <acpi/video.h> +static bool force; +module_param (force, bool,0444 ); +MODULE_PARM_DESC (force,"Force loading (disable acpi_backlight=xxx checks" ); +/** * wmi_brightness_notify() - helper function for calling WMI-wrapped ACPI method * @w: Pointer to the struct wmi_device identified by %WMI_BRIGHTNESS_GUID
@@ -91,7 +95,7 @@ static int nvidia_wmi_ec_backlight_probe(struct wmi_device *wdev, const void *ctint ret;/* drivers/acpi/video_detect.c also checks that SOURCE == EC */ -if (acpi_video_get_backlight_type () != acpi_backlight_nvidia_wmi_ec) +if (!force &&acpi_video_get_backlight_type () != acpi_backlight_nvidia_wmi_ec)return -ENODEV ;/*
drivers/scsi/hisi_sas/hisi_sas_main.c +5 -3
@@ -1708,13 +1708,15 @@ static int hisi_sas_debug_I_T_nexus_reset(struct domain_device *device)return rc; } +/* Remote phy */ if (rc)return rc; -/* Remote phy */ if (dev_is_sata (device)) { - rc =sas_ata_wait_after_reset (device, -HISI_SAS_WAIT_PHYUP_TIMEOUT ); +struct ata_link *link = &device->sata_dev.ap->link; + + rc =ata_wait_after_reset (link,HISI_SAS_WAIT_PHYUP_TIMEOUT , + smp_ata_check_ready_type); }else {msleep (2000 ); }
drivers/scsi/libsas/sas_ata.c +25 -0
@@ -287,6 +287,31 @@ static int sas_ata_clear_pending(struct domain_device *dev, struct ex_phy *phy)return 1 ; } +int smp_ata_check_ready_type (struct ata_link *link) +{ +struct domain_device *dev = link->ap->private_data; +struct sas_phy *phy =sas_get_local_phy (dev); +struct domain_device *ex_dev = dev->parent; +enum sas_device_type type =SAS_PHY_UNUSED ; +u8 sas_addr[SAS_ADDR_SIZE ]; +int res; + + res =sas_get_phy_attached_dev (ex_dev, phy->number, sas_addr, &type); +sas_put_local_phy (phy); +if (res) +return res; + +switch (type) { +case SAS_SATA_PENDING : +return 0 ; +case SAS_END_DEVICE : +return 1 ; +default : +return -ENODEV ; + } +} +EXPORT_SYMBOL_GPL (smp_ata_check_ready_type); +static int smp_ata_check_ready (struct ata_link *link) {int res;
drivers/scsi/libsas/sas_expander.c +2 -2
@@ -1693,8 +1693,8 @@ static int sas_get_phy_change_count(struct domain_device *dev,return res; } -static int sas_get_phy_attached_dev (struct domain_device *dev,int phy_id, -u8 *sas_addr,enum sas_device_type *type) +int sas_get_phy_attached_dev (struct domain_device *dev,int phy_id, +u8 *sas_addr,enum sas_device_type *type) {int res;struct smp_disc_resp *disc_resp;
drivers/scsi/libsas/sas_internal.h +2 -0
@@ -84,6 +84,8 @@ struct domain_device *sas_ex_to_ata(struct domain_device *ex_dev, int phy_id);int sas_ex_phy_discover (struct domain_device *dev,int single);int sas_get_report_phy_sata (struct domain_device *dev,int phy_id,struct smp_rps_resp *rps_resp); +int sas_get_phy_attached_dev (struct domain_device *dev,int phy_id, +u8 *sas_addr,enum sas_device_type *type);int sas_try_ata_reset (struct asd_sas_phy *phy);void sas_hae_reset (struct work_struct *work);
drivers/spi/spi-mt65xx.c +5 -5
@@ -1192,11 +1192,6 @@ static int mtk_spi_probe(struct platform_device *pdev)else dma_set_max_seg_size (dev,SZ_256K ); - ret =devm_request_irq (dev, irq, mtk_spi_interrupt, -IRQF_TRIGGER_NONE ,dev_name (dev), master); -if (ret) -return dev_err_probe (dev, ret,"failed to register irq\n" ); - mdata->parent_clk =devm_clk_get (dev,"parent-clk" );if (IS_ERR (mdata->parent_clk)) return dev_err_probe(dev, PTR_ERR(mdata->parent_clk),
@@ -1258,6 +1253,11 @@ static int mtk_spi_probe(struct platform_device *pdev)dev_notice (dev,"SPI dma_set_mask(%d) failed, ret:%d\n" , addr_bits, ret); + ret =devm_request_irq (dev, irq, mtk_spi_interrupt, +IRQF_TRIGGER_NONE ,dev_name (dev), master); +if (ret) +return dev_err_probe (dev, ret,"failed to register irq\n" ); +pm_runtime_enable (dev); ret =devm_spi_register_master (dev, master);
fs/ext4/sysfs.c +6 -1
@@ -491,6 +491,11 @@ static void ext4_sb_release(struct kobject *kobj)complete (&sbi->s_kobj_unregister); } +static void ext4_feat_release (struct kobject *kobj) +{ +kfree (kobj); +} +static const struct sysfs_ops ext4_attr_ops = { .show = ext4_attr_show, .store = ext4_attr_store,
@@ -505,7 +510,7 @@ static struct kobj_type ext4_sb_ktype = {static struct kobj_type ext4_feat_ktype = { .default_groups = ext4_feat_groups, .sysfs_ops = &ext4_attr_ops, - .release = (void (*)(struct kobject *))kfree, + .release = ext4_feat_release, };void ext4_notify_error_sysfs (struct ext4_sb_info *sbi)
include/asm-generic/vmlinux.lds.h +5 -0
@@ -929,7 +929,12 @@#define PRINTK_INDEX #endif +/* +* Discard .note.GNU-stack, which is emitted as PROGBITS by the compiler. +* Otherwise, the type of .notes section would become PROGBITS instead of NOTES. +*/ #define NOTES \ + /DISCARD/ : { *(.note.GNU-stack) } \ .notes : AT(ADDR(.notes) - LOAD_OFFSET) { \ __start_notes = .; \ KEEP(*(.note.*)) \
include/linux/nospec.h +4 -0
@@ -11,6 +11,10 @@struct task_struct ; +#ifndef barrier_nospec +# define barrier_nospec () do { } while (0) +#endif +/** * array_index_mask_nospec() - generate a ~0 mask when index < size, 0 otherwise * @index: array element index
include/linux/psi_types.h +1 -0
@@ -177,6 +177,7 @@ struct psi_group {struct timer_list poll_timer;wait_queue_head_t poll_wait;atomic_t poll_wakeup; +atomic_t poll_scheduled;/* Protects data used by the monitor */ struct mutex trigger_lock;
include/linux/random.h +3 -3
@@ -19,14 +19,14 @@ void add_input_randomness(unsigned int type, unsigned int code, void add_interrupt_randomness(int irq) __latent_entropy;void add_hwgenerator_randomness (const void *buf,size_t len,size_t entropy); -#if defined(LATENT_ENTROPY_PLUGIN ) && !defined(__CHECKER__)static inline void add_latent_entropy (void ) { +#if defined(LATENT_ENTROPY_PLUGIN ) && !defined(__CHECKER__)add_device_randomness ((const void *)&latent_entropy,sizeof (latent_entropy)); -}#else -static inline void add_latent_entropy (void ) { } +add_device_randomness (NULL ,0 );#endif +}#if IS_ENABLED (CONFIG_VMGENID )void add_vmfork_randomness (const void *unique_vm_id,size_t len);
include/scsi/sas_ata.h +6 -0
@@ -35,6 +35,7 @@ void sas_ata_end_eh(struct ata_port *ap);int sas_execute_ata_cmd (struct domain_device *device,u8 *fis,int force_phy_id);int sas_ata_wait_after_reset (struct domain_device *dev,unsigned long deadline); +int smp_ata_check_ready_type (struct ata_link *link);#else
@@ -98,6 +99,11 @@ static inline int sas_ata_wait_after_reset(struct domain_device *dev, {return -ETIMEDOUT ; } + +static inline int smp_ata_check_ready_type (struct ata_link *link) +{ +return 0 ; +}#endif #endif /* _SAS_ATA_H_ */
kernel/bpf/core.c +1 -2
@@ -34,6 +34,7 @@#include <linux/log2.h> #include <linux/bpf_verifier.h> #include <linux/nodemask.h> +#include <linux/nospec.h> #include <asm/barrier.h> #include <asm/unaligned.h>
@@ -1908,9 +1909,7 @@ static u64 ___bpf_prog_run(u64 *regs, const struct bpf_insn *insn)* reuse preexisting logic from Spectre v1 mitigation that * happens to produce the required code on x86 for v4 as well. */ -#ifdef CONFIG_X86 barrier_nospec (); -#endif CONT ;#define LDST (SIZEOP ,SIZE ) \ STX_MEM_##SIZEOP: \
kernel/sched/psi.c +52 -10
121 lines not on this page · raw message
lib/usercopy.c +7 -0
@@ -3,6 +3,7 @@#include <linux/fault-inject-usercopy.h> #include <linux/instrumented.h> #include <linux/uaccess.h> +#include <linux/nospec.h> /* out-of-line parts */
@@ -12,6 +13,12 @@ unsigned long _copy_from_user(void *to, const void __user *from, unsigned long nunsigned long res = n;might_fault ();if (!should_fail_usercopy () &&likely (access_ok (from, n))) { +/* +* Ensure that bad access_ok() speculation will not +* lead to nasty side effects *after* the copy is +* finished: +*/ +barrier_nospec ();instrument_copy_from_user_before (to, from, n); res =raw_copy_from_user (to, from, n);instrument_copy_from_user_after (to, from, n, res);
scripts/head-object-list.txt +0 -2
@@ -15,7 +15,6 @@ arch/alpha/kernel/head.o arch/arc/kernel/head.o arch/arm/kernel/head-nommu.o arch/arm/kernel/head.o -arch/arm64/kernel/head.o arch/csky/kernel/head.o arch/hexagon/kernel/head.o arch/ia64/kernel/head.o
@@ -39,7 +38,6 @@ arch/powerpc/kernel/entry_64.o arch/powerpc/kernel/fpu.o arch/powerpc/kernel/vector.o arch/powerpc/kernel/prom_init.o -arch/riscv/kernel/head.o arch/s390/kernel/head64.o arch/sh/kernel/head_32.o arch/sparc/kernel/head_32.o
security/Kconfig.hardening +3 -0
@@ -281,6 +281,9 @@ endmenu config CC_HAS_RANDSTRUCT def_bool $(cc-option,-frandomize-layout-seed-file=/dev/null) + # Randstruct was first added in Clang 15, but it isn't safe to use until + # Clang 16 due to https://github.com/llvm/llvm-project/issues/60349 + depends on !CC_IS_CLANG || CLANG_VERSION >= 160000 choice prompt "Randomize layout of sensitive kernel structures"
tools/testing/selftests/kvm/x86_64/xen_shinfo_test.c +5 -0
@@ -428,6 +428,7 @@ static void *juggle_shinfo_state(void *arg)int main (int argc,char *argv[]) {struct timespec min_ts, max_ts, vm_ts; +struct kvm_xen_hvm_attr evt_reset;struct kvm_vm *vm;pthread_t thread;bool verbose;
@@ -942,6 +943,10 @@ int main(int argc, char *argv[]) } done: + evt_reset.type =KVM_XEN_ATTR_TYPE_EVTCHN ; + evt_reset.u.evtchn.flags =KVM_XEN_EVTCHN_RESET ; +vm_ioctl (vm,KVM_XEN_HVM_SET_ATTR , &evt_reset); +alarm (0 );clock_gettime (CLOCK_REALTIME , &max_ts);