Linux 5.19.15
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.19.15 kernel.
All users of the 5.19 kernel series must upgrade.
The updated 5.19.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.19.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/devicetree/bindings/dma/moxa,moxart-dma.txt | 4 Documentation/process/code-of-conduct-interpretation.rst | 2 Makefile | 6 arch/arm/boot/dts/moxart-uc7112lx.dts | 2 arch/arm/boot/dts/moxart.dtsi | 4 arch/arm64/boot/dts/rockchip/rk3568-bpi-r2-pro.dts | 2 arch/s390/kvm/gaccess.c | 16 arch/sparc/include/asm/smp_32.h | 15 arch/sparc/kernel/leon_smp.c | 12 arch/sparc/kernel/sun4d_smp.c | 12 arch/sparc/kernel/sun4m_smp.c | 10 arch/sparc/mm/srmmu.c | 29 - arch/um/Makefile | 8 arch/x86/events/intel/core.c | 40 + arch/x86/events/intel/ds.c | 9 arch/x86/events/perf_event.h | 2 arch/x86/um/shared/sysdep/syscalls_32.h | 5 arch/x86/um/tls_32.c | 6 arch/x86/um/vdso/Makefile | 2 drivers/clk/ti/clk-44xx.c | 210 +++++----- drivers/clk/ti/clk-54xx.c | 160 +++---- drivers/clk/ti/clkctrl.c | 4 drivers/dma/xilinx/xilinx_dma.c | 21 - drivers/firmware/arm_scmi/clock.c | 6 drivers/firmware/arm_scmi/scmi_pm_domain.c | 20 drivers/firmware/arm_scmi/sensors.c | 25 + drivers/gpio/gpio-ftgpio010.c | 22 - drivers/gpio/gpiolib-acpi.c | 38 + drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c | 3 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 12 drivers/gpu/drm/amd/display/dc/clk_mgr/dcn315/dcn315_clk_mgr.c | 22 - drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c | 16 drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c | 6 drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c | 1 drivers/i2c/busses/i2c-davinci.c | 3 drivers/mmc/core/sd.c | 3 drivers/net/ethernet/aquantia/atlantic/aq_main.c | 3 drivers/net/ethernet/marvell/prestera/prestera_pci.c | 1 drivers/net/ethernet/mediatek/mtk_ppe.c | 2 drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c | 4 drivers/rpmsg/qcom_glink_native.c | 2 drivers/rpmsg/qcom_smd.c | 4 drivers/scsi/qedf/qedf_main.c | 5 drivers/usb/mon/mon_bin.c | 5 drivers/usb/serial/ftdi_sio.c | 3 fs/coredump.c | 38 + fs/inode.c | 7 fs/internal.h | 3 fs/read_write.c | 22 - include/linux/scmi_protocol.h | 4 include/net/ieee802154_netdev.h | 37 + include/net/xsk_buff_pool.h | 2 kernel/bpf/helpers.c | 28 - kernel/bpf/syscall.c | 2 net/bluetooth/hci_core.c | 15 net/bluetooth/hci_event.c | 6 net/ieee802154/socket.c | 42 +- net/xdp/xsk.c | 4 net/xdp/xsk_buff_pool.c | 5 scripts/Makefile.extrawarn | 1 security/Kconfig.hardening | 14 sound/pci/hda/patch_hdmi.c | 1 62 files changed, 645 insertions(+), 373 deletions(-)
Al Viro (1):
don't use __kernel_write() on kmap_local_page()
Bart Van Assche (1):
sparc: Unbreak the build
Brian Norris (1):
mmc: core: Terminate infinite loop in SD-UHS voltage switch
ChanWoo Lee (1):
mmc: core: Replace with already defined values for readability
Cristian Marussi (3):
firmware: arm_scmi: Improve checks in the info_get operations
firmware: arm_scmi: Harden accesses to the sensor domains
firmware: arm_scmi: Add SCMI PM driver remove routine
Cruise Hung (1):
drm/amd/display: Fix DP MST timeslot issue when fallback happened
Daniel Golle (1):
net: ethernet: mtk_eth_soc: fix state in __mtk_foe_entry_clear
David Gow (1):
arch: um: Mark the stack non-executable to fix a binutils warning
Dmytro Laktyushkin (1):
drm/amd/display: increase dcn315 pstate change latency
Dongliang Mu (1):
fs: fix UAF/GPF bug in nilfs_mdt_destroy
Frank Wunderlich (1):
arm64: dts: rockchip: fix upper usb port on BPI-R2-Pro
Greg Kroah-Hartman (1):
Linux 5.19.15
Haimin Zhang (1):
net/ieee802154: fix uninit value bug in dgram_sendmsg
Hugo Hu (1):
drm/amd/display: update gamut remap if plane has changed
Jalal Mostafa (1):
xsk: Inherit need_wakeup flag for shared sockets
Janis Schoetterl-Glausch (1):
KVM: s390: Pass initialized arg even if unused
Jaroslav Kysela (1):
ALSA: hda/hdmi: Fix the converter reuse for the silent stream
Jason A. Donenfeld (1):
wifi: iwlwifi: don't spam logs with NSS>2 messages
Jianglei Nie (1):
net: atlantic: fix potential memory leak in aq_ndev_close()
Johan Hovold (1):
USB: serial: ftdi_sio: fix 300 bps rate for SIO
Jules Irenge (1):
bpf: Fix resetting logic for unreferenced kptrs
Kan Liang (1):
perf/x86/intel: Fix unchecked MSR access error for Alder Lake N
Kees Cook (1):
hardening: Remove Clang's enable flag for -ftrivial-auto-var-init=zero
Krzysztof Kozlowski (1):
rpmsg: qcom: glink: replace strncpy() with strscpy_pad()
Kumar Kartikeya Dwivedi (1):
bpf: Gate dynptr API behind CAP_BPF
Leo Li (1):
drm/amd/display: Fix double cursor on non-video RGB MPO
Letu Ren (1):
scsi: qedf: Fix a UAF bug in __qedf_probe()
Linus Walleij (1):
gpio: ftgpio010: Make irqchip immutable
Lukas Straub (2):
um: Cleanup syscall_handler_t cast in syscalls_32.h
um: Cleanup compiler warning in arch/x86/um/tls_32.c
Mario Limonciello (2):
gpiolib: acpi: Add support to ignore programming an interrupt
gpiolib: acpi: Add a quirk for Asus UM325UAZ
Michael Strauss (1):
drm/amd/display: Assume an LTTPR is always present on fixed_vs links
Oleksandr Mazur (1):
net: marvell: prestera: add support for for Aldrin2
Sami Tolvanen (1):
Makefile.extrawarn: Move -Wcast-function-type-strict to W=1
Sasha Levin (1):
Revert "clk: ti: Stop using legacy clkctrl names for omap4 and 5"
Sergei Antonov (1):
ARM: dts: fix Moxa SDIO 'compatible', remove 'sdhci' misnomer
Shuah Khan (1):
docs: update mediator information in CoC docs
Swati Agarwal (3):
dmaengine: xilinx_dma: Fix devm_platform_ioremap_resource error handling
dmaengine: xilinx_dma: cleanup for fetching xlnx,num-fstores property
dmaengine: xilinx_dma: Report error in case of dma_set_mask_and_coherent API failure
Tadeusz Struk (1):
usb: mon: make mmapped memory read only
Tetsuo Handa (1):
Bluetooth: use hdev->workqueue when queuing hdev->{cmd,ncmd}_timer worksYifan Zhang (1):
drm/amdgpu/mes: zero the sdma_hqd_mask of 2nd SDMA engine for SDMA 6.0.1
Zhang Qilong (1):
i2c: davinci: fix PM disable depth imbalance in davinci_i2c_probe
zhikzhai (1):
drm/amd/display: skip audio setup when audio stream is enabled
Greg Kroah-Hartman
maintainerDocumentation/devicetree/bindings/dma/moxa,moxart-dma.txt +2 -2
@@ -34,8 +34,8 @@ Example: Use specific request line passing from dma For example, MMC request line is 5 - sdhci: sdhci@98e00000 { - compatible = "moxa,moxart-sdhci"; + mmc: mmc@98e00000 { + compatible = "moxa,moxart-mmc"; reg = <0x98e00000 0x5C>; interrupts = <5 0>; clocks = <&clk_apb>;
Documentation/process/code-of-conduct-interpretation.rst +1 -1
@@ -51,7 +51,7 @@ the Technical Advisory Board (TAB) or other maintainers if you're uncertain how to handle situations that come up. It will not be considered a violation report unless you want it to be. If you are uncertain about approaching the TAB or any other maintainers, please -reach out to our conflict mediator, Mishi Choudhary <[email protected]>. +reach out to our conflict mediator, Joanna Lee <[email protected]>. In the end, "be kind to each other" is really what the end goal is for everybody. We know everyone is human and we all fail at times, but the
Makefile +3 -3
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 19 -SUBLEVEL = 14 +SUBLEVEL = 15 EXTRAVERSION = NAME = Superb Owl
@@ -830,8 +830,8 @@ endif # Initialize all stack variables with a zero value. ifdef CONFIG_INIT_STACK_ALL_ZERO KBUILD_CFLAGS += -ftrivial-auto-var-init=zero -ifdef CONFIG_CC_IS_CLANG -# https://bugs.llvm.org/show_bug.cgi?id=45497 +ifdef CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO_ENABLER +# https://github.com/llvm/llvm-project/issues/44842 KBUILD_CFLAGS += -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang endif endif
arch/arm/boot/dts/moxart-uc7112lx.dts +1 -1
@@ -79,7 +79,7 @@ &clk_pll { clocks = <&ref12>; }; -&sdhci { +&mmc { status = "okay"; };
arch/arm/boot/dts/moxart.dtsi +2 -2
@@ -93,8 +93,8 @@ watchdog: watchdog@98500000 { clock-names = "PCLK"; }; - sdhci: sdhci@98e00000 { - compatible = "moxa,moxart-sdhci"; + mmc: mmc@98e00000 { + compatible = "moxa,moxart-mmc"; reg = <0x98e00000 0x5C>; interrupts = <5 IRQ_TYPE_LEVEL_HIGH>; clocks = <&clk_apb>;
arch/arm64/boot/dts/rockchip/rk3568-bpi-r2-pro.dts +1 -1
@@ -558,7 +558,7 @@ &usb_host0_ohci { }; &usb_host0_xhci { - extcon = <&usb2phy0>; + dr_mode = "host"; status = "okay"; };
arch/s390/kvm/gaccess.c +13 -3
@@ -489,6 +489,8 @@ enum prot_type {PROT_TYPE_ALC =2 ,PROT_TYPE_DAT =3 ,PROT_TYPE_IEP =4 , +/* Dummy value for passing an initialized value when code != PGM_PROTECTION */ + PROT_NONE, }; static int trans_exc_ending(struct kvm_vcpu *vcpu, int code, unsigned long gva, u8 ar,
@@ -504,6 +506,10 @@ static int trans_exc_ending(struct kvm_vcpu *vcpu, int code, unsigned long gva,switch (code) {case PGM_PROTECTION :switch (prot) { +case PROT_NONE : +/* We should never get here, acts like termination */ +WARN_ON_ONCE (1 ); +break ;case PROT_TYPE_IEP : tec->b61 =1 ; fallthrough;
@@ -968,8 +974,10 @@ static int guest_range_to_gpas(struct kvm_vcpu *vcpu, unsigned long ga, u8 ar,return rc; }else { gpa =kvm_s390_real_to_abs (vcpu, ga); -if (kvm_is_error_gpa (vcpu->kvm, gpa)) +if (kvm_is_error_gpa (vcpu->kvm, gpa)) { rc =PGM_ADDRESSING ; + prot =PROT_NONE ; + } }if (rc)return trans_exc (vcpu, rc, ga, ar, mode, prot);
@@ -1112,8 +1120,6 @@ int access_guest_with_key(struct kvm_vcpu *vcpu, unsigned long ga, u8 ar,if (rc ==PGM_PROTECTION && try_storage_prot_override) rc =access_guest_page_with_key (vcpu->kvm, mode, gpas[idx], data, fragment_len,PAGE_SPO_ACC ); -if (rc ==PGM_PROTECTION ) - prot =PROT_TYPE_KEYC ;if (rc)break ; len -= fragment_len;
@@ -1123,6 +1129,10 @@ int access_guest_with_key(struct kvm_vcpu *vcpu, unsigned long ga, u8 ar,if (rc >0 ) {bool terminate = (mode ==GACC_STORE ) && (idx >0 ); +if (rc ==PGM_PROTECTION ) + prot =PROT_TYPE_KEYC ; +else + prot =PROT_NONE ; rc =trans_exc_ending (vcpu, rc, ga, ar, mode, prot, terminate); } out_unlock:
arch/sparc/include/asm/smp_32.h +6 -9
@@ -33,9 +33,6 @@ extern volatile unsigned long cpu_callin_map[NR_CPUS];extern cpumask_t smp_commenced_mask;extern struct linux_prom_registers smp_penguin_ctable; -typedef void (*smpfunc_t )(unsigned long ,unsigned long ,unsigned long , -unsigned long ,unsigned long ); -void cpu_panic (void );/*
@@ -57,7 +54,7 @@ void smp_bogo(struct seq_file *);void smp_info (struct seq_file *);struct sparc32_ipi_ops { -void (*cross_call)(smpfunc_t func,cpumask_t mask,unsigned long arg1, +void (*cross_call)(void *func,cpumask_t mask,unsigned long arg1,unsigned long arg2,unsigned long arg3,unsigned long arg4);void (*resched)(int cpu);
@@ -66,28 +63,28 @@ struct sparc32_ipi_ops { };extern const struct sparc32_ipi_ops *sparc32_ipi_ops; -static inline void xc0 (smpfunc_t func) +static inline void xc0 (void *func) { sparc32_ipi_ops->cross_call (func, *cpu_online_mask,0 ,0 ,0 ,0 ); } -static inline void xc1 (smpfunc_t func,unsigned long arg1) +static inline void xc1 (void *func,unsigned long arg1) { sparc32_ipi_ops->cross_call (func, *cpu_online_mask, arg1,0 ,0 ,0 ); } -static inline void xc2 (smpfunc_t func,unsigned long arg1,unsigned long arg2) +static inline void xc2 (void *func,unsigned long arg1,unsigned long arg2) { sparc32_ipi_ops->cross_call (func, *cpu_online_mask, arg1, arg2,0 ,0 ); } -static inline void xc3 (smpfunc_t func,unsigned long arg1,unsigned long arg2, +static inline void xc3 (void *func,unsigned long arg1,unsigned long arg2,unsigned long arg3) { sparc32_ipi_ops->cross_call (func, *cpu_online_mask, arg1, arg2, arg3,0 ); } -static inline void xc4 (smpfunc_t func,unsigned long arg1,unsigned long arg2, +static inline void xc4 (void *func,unsigned long arg1,unsigned long arg2,unsigned long arg3,unsigned long arg4) { sparc32_ipi_ops->cross_call(func, *cpu_online_mask,
arch/sparc/kernel/leon_smp.c +7 -5
@@ -359,7 +359,7 @@ void leonsmp_ipi_interrupt(void) } static struct smp_funcall { - smpfunc_t func; + void *func; unsigned long arg1; unsigned long arg2; unsigned long arg3;
@@ -372,7 +372,7 @@ static struct smp_funcall {static DEFINE_SPINLOCK (cross_call_lock);/* Cross calls must be serialized, at least currently. */ -static void leon_cross_call (smpfunc_t func,cpumask_t mask,unsigned long arg1, +static void leon_cross_call (void *func,cpumask_t mask,unsigned long arg1,unsigned long arg2,unsigned long arg3,unsigned long arg4) {
@@ -384,7 +384,7 @@ static void leon_cross_call(smpfunc_t func, cpumask_t mask, unsigned long arg1, {/* If you make changes here, make sure gcc generates proper code... */ - register smpfunc_t f asm("i0") = func; + register void *f asm("i0") = func; register unsigned long a1 asm("i1") = arg1; register unsigned long a2 asm("i2") = arg2; register unsigned long a3 asm("i3") = arg3;
@@ -444,11 +444,13 @@ static void leon_cross_call(smpfunc_t func, cpumask_t mask, unsigned long arg1,/* Running cross calls. */ void leon_cross_call_irq (void ) { +void (*func)(unsigned long ,unsigned long ,unsigned long ,unsigned long , +unsigned long ) = ccall_info.func;int i =smp_processor_id (); ccall_info.processors_in[i] =1 ; - ccall_info.func (ccall_info.arg1, ccall_info.arg2, ccall_info.arg3, - ccall_info.arg4, ccall_info.arg5); +func (ccall_info.arg1, ccall_info.arg2, ccall_info.arg3, ccall_info.arg4, + ccall_info.arg5); ccall_info.processors_out[i] =1 ; }
arch/sparc/kernel/sun4d_smp.c +7 -5
@@ -268,7 +268,7 @@ static void sun4d_ipi_resched(int cpu) } static struct smp_funcall { - smpfunc_t func; + void *func; unsigned long arg1; unsigned long arg2; unsigned long arg3;
@@ -281,7 +281,7 @@ static struct smp_funcall {static DEFINE_SPINLOCK (cross_call_lock);/* Cross calls must be serialized, at least currently. */ -static void sun4d_cross_call (smpfunc_t func,cpumask_t mask,unsigned long arg1, +static void sun4d_cross_call (void *func,cpumask_t mask,unsigned long arg1,unsigned long arg2,unsigned long arg3,unsigned long arg4) {
@@ -296,7 +296,7 @@ static void sun4d_cross_call(smpfunc_t func, cpumask_t mask, unsigned long arg1,* If you make changes here, make sure * gcc generates proper code... */ - register smpfunc_t f asm("i0") = func; + register void *f asm("i0") = func; register unsigned long a1 asm("i1") = arg1; register unsigned long a2 asm("i2") = arg2; register unsigned long a3 asm("i3") = arg3;
@@ -353,11 +353,13 @@ static void sun4d_cross_call(smpfunc_t func, cpumask_t mask, unsigned long arg1,/* Running cross calls. */ void smp4d_cross_call_irq (void ) { +void (*func)(unsigned long ,unsigned long ,unsigned long ,unsigned long , +unsigned long ) = ccall_info.func;int i =hard_smp_processor_id (); ccall_info.processors_in[i] =1 ; - ccall_info.func (ccall_info.arg1, ccall_info.arg2, ccall_info.arg3, - ccall_info.arg4, ccall_info.arg5); +func (ccall_info.arg1, ccall_info.arg2, ccall_info.arg3, ccall_info.arg4, + ccall_info.arg5); ccall_info.processors_out[i] =1 ; }
arch/sparc/kernel/sun4m_smp.c +6 -4
@@ -157,7 +157,7 @@ static void sun4m_ipi_mask_one(int cpu) } static struct smp_funcall { - smpfunc_t func; + void *func; unsigned long arg1; unsigned long arg2; unsigned long arg3;
@@ -170,7 +170,7 @@ static struct smp_funcall {static DEFINE_SPINLOCK (cross_call_lock);/* Cross calls must be serialized, at least currently. */ -static void sun4m_cross_call (smpfunc_t func,cpumask_t mask,unsigned long arg1, +static void sun4m_cross_call (void *func,cpumask_t mask,unsigned long arg1,unsigned long arg2,unsigned long arg3,unsigned long arg4) {
@@ -230,11 +230,13 @@ static void sun4m_cross_call(smpfunc_t func, cpumask_t mask, unsigned long arg1,/* Running cross calls. */ void smp4m_cross_call_irq (void ) { +void (*func)(unsigned long ,unsigned long ,unsigned long ,unsigned long , +unsigned long ) = ccall_info.func;int i =smp_processor_id (); ccall_info.processors_in[i] =1 ; - ccall_info.func (ccall_info.arg1, ccall_info.arg2, ccall_info.arg3, - ccall_info.arg4, ccall_info.arg5); +func (ccall_info.arg1, ccall_info.arg2, ccall_info.arg3, ccall_info.arg4, + ccall_info.arg5); ccall_info.processors_out[i] =1 ; }
arch/sparc/mm/srmmu.c +13 -16
@@ -1636,19 +1636,19 @@ static void __init get_srmmu_type(void)/* Local cross-calls. */ static void smp_flush_page_for_dma (unsigned long page) { -xc1 ((smpfunc_t ) local_ops->page_for_dma, page); +xc1 (local_ops->page_for_dma, page); local_ops->page_for_dma (page); }static void smp_flush_cache_all (void ) { -xc0 ((smpfunc_t ) local_ops->cache_all); +xc0 (local_ops->cache_all); local_ops->cache_all (); }static void smp_flush_tlb_all (void ) { -xc0 ((smpfunc_t ) local_ops->tlb_all); +xc0 (local_ops->tlb_all); local_ops->tlb_all (); }
@@ -1659,7 +1659,7 @@ static void smp_flush_cache_mm(struct mm_struct *mm)cpumask_copy (&cpu_mask,mm_cpumask (mm));cpumask_clear_cpu (smp_processor_id (), &cpu_mask);if (!cpumask_empty (&cpu_mask)) -xc1 ((smpfunc_t ) local_ops->cache_mm, (unsigned long ) mm); +xc1 (local_ops->cache_mm, (unsigned long )mm); local_ops->cache_mm (mm); } }
@@ -1671,7 +1671,7 @@ static void smp_flush_tlb_mm(struct mm_struct *mm)cpumask_copy (&cpu_mask,mm_cpumask (mm));cpumask_clear_cpu (smp_processor_id (), &cpu_mask);if (!cpumask_empty (&cpu_mask)) { -xc1 ((smpfunc_t ) local_ops->tlb_mm, (unsigned long ) mm); +xc1 (local_ops->tlb_mm, (unsigned long )mm);if (atomic_read (&mm->mm_users) ==1 && current->active_mm == mm)cpumask_copy (mm_cpumask (mm),cpumask_of (smp_processor_id ()));
@@ -1691,8 +1691,8 @@ static void smp_flush_cache_range(struct vm_area_struct *vma,cpumask_copy (&cpu_mask,mm_cpumask (mm));cpumask_clear_cpu (smp_processor_id (), &cpu_mask);if (!cpumask_empty (&cpu_mask)) -xc3 ((smpfunc_t ) local_ops->cache_range, - (unsigned long ) vma, start, end); +xc3 (local_ops->cache_range, (unsigned long )vma, start, + end); local_ops->cache_range (vma, start, end); } }
@@ -1708,8 +1708,8 @@ static void smp_flush_tlb_range(struct vm_area_struct *vma,cpumask_copy (&cpu_mask,mm_cpumask (mm));cpumask_clear_cpu (smp_processor_id (), &cpu_mask);if (!cpumask_empty (&cpu_mask)) -xc3 ((smpfunc_t ) local_ops->tlb_range, - (unsigned long ) vma, start, end); +xc3 (local_ops->tlb_range, (unsigned long )vma, start, + end); local_ops->tlb_range (vma, start, end); } }
@@ -1723,8 +1723,7 @@ static void smp_flush_cache_page(struct vm_area_struct *vma, unsigned long page)cpumask_copy (&cpu_mask,mm_cpumask (mm));cpumask_clear_cpu (smp_processor_id (), &cpu_mask);if (!cpumask_empty (&cpu_mask)) -xc2 ((smpfunc_t ) local_ops->cache_page, - (unsigned long ) vma, page); +xc2 (local_ops->cache_page, (unsigned long )vma, page); local_ops->cache_page (vma, page); } }
@@ -1738,8 +1737,7 @@ static void smp_flush_tlb_page(struct vm_area_struct *vma, unsigned long page)cpumask_copy (&cpu_mask,mm_cpumask (mm));cpumask_clear_cpu (smp_processor_id (), &cpu_mask);if (!cpumask_empty (&cpu_mask)) -xc2 ((smpfunc_t ) local_ops->tlb_page, - (unsigned long ) vma, page); +xc2 (local_ops->tlb_page, (unsigned long )vma, page); local_ops->tlb_page (vma, page); } }
@@ -1753,7 +1751,7 @@ static void smp_flush_page_to_ram(unsigned long page)* XXX This experiment failed, research further... -DaveM */ #if 1 -xc1 ((smpfunc_t ) local_ops->page_to_ram, page); +xc1 (local_ops->page_to_ram, page);#endif local_ops->page_to_ram (page); }
@@ -1764,8 +1762,7 @@ static void smp_flush_sig_insns(struct mm_struct *mm, unsigned long insn_addr)cpumask_copy (&cpu_mask,mm_cpumask (mm));cpumask_clear_cpu (smp_processor_id (), &cpu_mask);if (!cpumask_empty (&cpu_mask)) -xc2 ((smpfunc_t ) local_ops->sig_insns, - (unsigned long ) mm, insn_addr); +xc2 (local_ops->sig_insns, (unsigned long )mm, insn_addr); local_ops->sig_insns (mm, insn_addr); }
arch/um/Makefile +8 -0
@@ -132,10 +132,18 @@ export LDS_ELF_FORMAT := $(ELF_FORMAT) # The wrappers will select whether using "malloc" or the kernel allocator. LINK_WRAPS = -Wl,--wrap,malloc -Wl,--wrap,free -Wl,--wrap,calloc +# Avoid binutils 2.39+ warnings by marking the stack non-executable and +# ignorning warnings for the kallsyms sections. +LDFLAGS_EXECSTACK = -z noexecstack +ifeq ($(CONFIG_LD_IS_BFD),y) +LDFLAGS_EXECSTACK += $(call ld-option,--no-warn-rwx-segments) +endif + LD_FLAGS_CMDLINE = $(foreach opt,$(KBUILD_LDFLAGS),-Wl,$(opt)) # Used by link-vmlinux.sh which has special support for um link export CFLAGS_vmlinux := $(LINK-y) $(LINK_WRAPS) $(LD_FLAGS_CMDLINE) +export LDFLAGS_vmlinux := $(LDFLAGS_EXECSTACK) # When cleaning we don't include .config, so we don't include # TT or skas makefiles and don't clean skas_ptregs.h.
arch/x86/events/intel/core.c +39 -1
@@ -2101,6 +2101,15 @@ static struct extra_reg intel_tnt_extra_regs[] __read_mostly = {EVENT_EXTRA_END }; +EVENT_ATTR_STR (mem-loads, mem_ld_grt,"event=0xd0,umask=0x5,ldlat=3" ); +EVENT_ATTR_STR (mem-stores, mem_st_grt,"event=0xd0,umask=0x6" ); + +static struct attribute *grt_mem_attrs[] = { +EVENT_PTR (mem_ld_grt), +EVENT_PTR (mem_st_grt), +NULL +}; +static struct extra_reg intel_grt_extra_regs[]__read_mostly = {/* must define OFFCORE_RSP_X first, see intel_fixup_er() */ INTEL_UEVENT_EXTRA_REG (0x01b7 ,MSR_OFFCORE_RSP_0 ,0x3fffffffffull ,RSP_0 ),
@@ -5874,6 +5883,36 @@ __init int intel_pmu_init(void) name ="Tremont" ;break ; +case INTEL_FAM6_ALDERLAKE_N : + x86_pmu.mid_ack = true; +memcpy (hw_cache_event_ids, glp_hw_cache_event_ids, +sizeof (hw_cache_event_ids)); +memcpy (hw_cache_extra_regs, tnt_hw_cache_extra_regs, +sizeof (hw_cache_extra_regs)); + hw_cache_event_ids[C (ITLB )][C (OP_READ )][C (RESULT_ACCESS )] =-1 ; + + x86_pmu.event_constraints = intel_slm_event_constraints; + x86_pmu.pebs_constraints = intel_grt_pebs_event_constraints; + x86_pmu.extra_regs = intel_grt_extra_regs; + + x86_pmu.pebs_aliases =NULL ; + x86_pmu.pebs_prec_dist = true; + x86_pmu.pebs_block = true; + x86_pmu.lbr_pt_coexist = true; + x86_pmu.flags |=PMU_FL_HAS_RSP_1 ; + x86_pmu.flags |=PMU_FL_INSTR_LATENCY ; + +intel_pmu_pebs_data_source_grt (); + x86_pmu.pebs_latency_data = adl_latency_data_small; + x86_pmu.get_event_constraints = tnt_get_event_constraints; + x86_pmu.limit_period = spr_limit_period; + td_attr = tnt_events_attrs; + mem_attr = grt_mem_attrs; + extra_attr = nhm_format_attr; +pr_cont ("Gracemont events, " ); + name ="gracemont" ; +break ; +case INTEL_FAM6_WESTMERE :case INTEL_FAM6_WESTMERE_EP :case INTEL_FAM6_WESTMERE_EX :
@@ -6216,7 +6255,6 @@ __init int intel_pmu_init(void)case INTEL_FAM6_ALDERLAKE :case INTEL_FAM6_ALDERLAKE_L : -case INTEL_FAM6_ALDERLAKE_N :case INTEL_FAM6_RAPTORLAKE :case INTEL_FAM6_RAPTORLAKE_P :/*
arch/x86/events/intel/ds.c +7 -2
@@ -110,13 +110,18 @@ void __init intel_pmu_pebs_data_source_skl(bool pmem)__intel_pmu_pebs_data_source_skl (pmem, pebs_data_source); } -static void __init intel_pmu_pebs_data_source_grt (u64 *data_source) +static void __init __intel_pmu_pebs_data_source_grt (u64 *data_source) { data_source[0x05 ] =OP_LH |P (LVL ,L3 ) |LEVEL (L3 ) |P (SNOOP ,HIT ); data_source[0x06 ] =OP_LH |P (LVL ,L3 ) |LEVEL (L3 ) |P (SNOOP ,HITM ); data_source[0x08 ] =OP_LH |P (LVL ,L3 ) |LEVEL (L3 ) |P (SNOOPX ,FWD ); } +void __init intel_pmu_pebs_data_source_grt (void ) +{ +__intel_pmu_pebs_data_source_grt (pebs_data_source); +} +void __init intel_pmu_pebs_data_source_adl (void ) {u64 *data_source;
@@ -127,7 +132,7 @@ void __init intel_pmu_pebs_data_source_adl(void) data_source = x86_pmu.hybrid_pmu[X86_HYBRID_PMU_ATOM_IDX ].pebs_data_source;memcpy (data_source, pebs_data_source,sizeof (pebs_data_source)); -intel_pmu_pebs_data_source_grt (data_source); +__intel_pmu_pebs_data_source_grt (data_source); }static u64 precise_store_data (u64 status)
arch/x86/events/perf_event.h +2 -0
@@ -1513,6 +1513,8 @@ void intel_pmu_pebs_data_source_skl(bool pmem);void intel_pmu_pebs_data_source_adl (void ); +void intel_pmu_pebs_data_source_grt (void ); +int intel_pmu_setup_lbr_filter (struct perf_event *event);void intel_pt_interrupt (void );
arch/x86/um/shared/sysdep/syscalls_32.h +2 -3
@@ -6,10 +6,9 @@#include <asm/unistd.h> #include <sysdep/ptrace.h> -typedef long syscall_handler_t (struct pt_regs ); +typedef long syscall_handler_t (struct syscall_args );extern syscall_handler_t *sys_call_table[];#define EXECUTE_SYSCALL (syscall, regs) \ - ((long (*)(struct syscall_args)) \ - (*sys_call_table[syscall]))(SYSCALL_ARGS(®s->regs)) + ((*sys_call_table[syscall]))(SYSCALL_ARGS(®s->regs))
arch/x86/um/tls_32.c +0 -6
@@ -65,9 +65,6 @@ static int get_free_idx(struct task_struct* task)struct thread_struct *t = &task->thread;int idx; -if (!t->arch.tls_array) -return GDT_ENTRY_TLS_MIN ; -for (idx =0 ; idx <GDT_ENTRY_TLS_ENTRIES ; idx++)if (!t->arch.tls_array[idx].present)return idx +GDT_ENTRY_TLS_MIN ;
@@ -240,9 +237,6 @@ static int get_tls_entry(struct task_struct *task, struct user_desc *info, {struct thread_struct *t = &task->thread; -if (!t->arch.tls_array) - goto clear; -if (idx <GDT_ENTRY_TLS_MIN || idx >GDT_ENTRY_TLS_MAX )return -EINVAL ;
arch/x86/um/vdso/Makefile +1 -1
@@ -62,7 +62,7 @@ quiet_cmd_vdso = VDSO $@ -Wl,-T,$(filter %.lds,$^) $(filter %.o,$^) && \ sh $(srctree)/$(src)/checkundef.sh '$(NM)' '$@' -VDSO_LDFLAGS = -fPIC -shared -Wl,--hash-style=sysv +VDSO_LDFLAGS = -fPIC -shared -Wl,--hash-style=sysv -z noexecstack GCOV_PROFILE := n #
drivers/clk/ti/clk-44xx.c +105 -105
339 lines not on this page · raw message
drivers/clk/ti/clk-54xx.c +80 -80
249 lines not on this page · raw message
drivers/clk/ti/clkctrl.c +4 -0
@@ -528,6 +528,10 @@ static void __init _ti_omap4_clkctrl_setup(struct device_node *node)char *c;u16 soc_mask =0 ; +if (!(ti_clk_get_features ()->flags &TI_CLK_CLKCTRL_COMPAT ) && +of_node_name_eq (node,"clk" )) + ti_clk_features.flags |=TI_CLK_CLKCTRL_COMPAT ; + addrp =of_get_address (node,0 ,NULL ,NULL ); addr = (u32 )of_translate_address (node, addrp);
drivers/dma/xilinx/xilinx_dma.c +13 -8
@@ -3160,9 +3160,10 @@ static int xilinx_dma_probe(struct platform_device *pdev)/* Request and map I/O memory */ xdev->regs =devm_platform_ioremap_resource (pdev,0 ); -if (IS_ERR (xdev->regs)) -return PTR_ERR (xdev->regs); - +if (IS_ERR (xdev->regs)) { + err =PTR_ERR (xdev->regs); + goto disable_clks; + }/* Retrieve the DMA engine properties from the device tree */ xdev->max_buffer_len =GENMASK (XILINX_DMA_MAX_TRANS_LEN_MAX -1 ,0 ); xdev->s2mm_chan_id = xdev->dma_config->max_channels /2 ;
@@ -3190,7 +3191,7 @@ static int xilinx_dma_probe(struct platform_device *pdev)if (err <0 ) {dev_err (xdev->dev,"missing xlnx,num-fstores property\n" ); -return err; + goto disable_clks; } err = of_property_read_u32(node, "xlnx,flush-fsync",
@@ -3210,7 +3211,11 @@ static int xilinx_dma_probe(struct platform_device *pdev) xdev->ext_addr = false;/* Set the dma mask bits */ -dma_set_mask_and_coherent (xdev->dev,DMA_BIT_MASK (addr_width)); + err =dma_set_mask_and_coherent (xdev->dev,DMA_BIT_MASK (addr_width)); +if (err <0 ) { +dev_err (xdev->dev,"DMA mask error %d\n" , err); + goto disable_clks; + }/* Initialize the DMA engine */ xdev->common.dev = &pdev->dev;
@@ -3259,7 +3264,7 @@ static int xilinx_dma_probe(struct platform_device *pdev)for_each_child_of_node (node, child) { err =xilinx_dma_child_probe (xdev, child);if (err <0 ) - goto disable_clks; + goto error; }if (xdev->dma_config->dmatype ==XDMA_TYPE_VDMA ) {
@@ -3294,12 +3299,12 @@ static int xilinx_dma_probe(struct platform_device *pdev)return 0 ; -disable_clks: -xdma_disable_allclks (xdev); error:for (i =0 ; i < xdev->dma_config->max_channels; i++)if (xdev->chan[i])xilinx_dma_chan_remove (xdev->chan[i]); +disable_clks: +xdma_disable_allclks (xdev);return err; }
drivers/firmware/arm_scmi/clock.c +5 -1
@@ -450,9 +450,13 @@ static int scmi_clock_count_get(const struct scmi_protocol_handle *ph)static const struct scmi_clock_info *scmi_clock_info_get (const struct scmi_protocol_handle *ph,u32 clk_id) { +struct scmi_clock_info *clk;struct clock_info *ci = ph->get_priv (ph); -struct scmi_clock_info *clk = ci->clk + clk_id; +if (clk_id >= ci->num_clocks) +return NULL ; + + clk = ci->clk + clk_id;if (!clk->name[0 ])return NULL ;
drivers/firmware/arm_scmi/scmi_pm_domain.c +20 -0
@@ -112,9 +112,28 @@ static int scmi_pm_domain_probe(struct scmi_device *sdev) scmi_pd_data->domains = domains; scmi_pd_data->num_domains = num_domains; +dev_set_drvdata (dev, scmi_pd_data); +return of_genpd_add_provider_onecell (np, scmi_pd_data); } +static void scmi_pm_domain_remove (struct scmi_device *sdev) +{ +int i; +struct genpd_onecell_data *scmi_pd_data; +struct device *dev = &sdev->dev; +struct device_node *np = dev->of_node; + +of_genpd_del_provider (np); + + scmi_pd_data =dev_get_drvdata (dev); +for (i =0 ; i < scmi_pd_data->num_domains; i++) { +if (!scmi_pd_data->domains[i]) +continue ; +pm_genpd_remove (scmi_pd_data->domains[i]); + } +} +static const struct scmi_device_id scmi_id_table[] = { {SCMI_PROTOCOL_POWER ,"genpd" }, { },
@@ -124,6 +143,7 @@ MODULE_DEVICE_TABLE(scmi, scmi_id_table);static struct scmi_driver scmi_power_domain_driver = { .name ="scmi-power-domain" , .probe = scmi_pm_domain_probe, + .remove = scmi_pm_domain_remove, .id_table = scmi_id_table, };module_scmi_driver (scmi_power_domain_driver);
drivers/firmware/arm_scmi/sensors.c +21 -4
@@ -762,6 +762,10 @@ static int scmi_sensor_config_get(const struct scmi_protocol_handle *ph, {int ret;struct scmi_xfer *t; +struct sensors_info *si = ph->get_priv (ph); + +if (sensor_id >= si->num_sensors) +return -EINVAL ; ret = ph->xops->xfer_get_init (ph,SENSOR_CONFIG_GET ,sizeof (__le32),sizeof (__le32), &t);
@@ -771,7 +775,6 @@ static int scmi_sensor_config_get(const struct scmi_protocol_handle *ph,put_unaligned_le32 (sensor_id, t->tx.buf); ret = ph->xops->do_xfer (ph, t);if (!ret) { -struct sensors_info *si = ph->get_priv (ph);struct scmi_sensor_info *s = si->sensors + sensor_id; *sensor_config =get_unaligned_le64 (t->rx.buf);
@@ -788,6 +791,10 @@ static int scmi_sensor_config_set(const struct scmi_protocol_handle *ph,int ret;struct scmi_xfer *t;struct scmi_msg_sensor_config_set *msg; +struct sensors_info *si = ph->get_priv (ph); + +if (sensor_id >= si->num_sensors) +return -EINVAL ; ret = ph->xops->xfer_get_init (ph,SENSOR_CONFIG_SET ,sizeof (*msg),0 , &t);
@@ -800,7 +807,6 @@ static int scmi_sensor_config_set(const struct scmi_protocol_handle *ph, ret = ph->xops->do_xfer (ph, t);if (!ret) { -struct sensors_info *si = ph->get_priv (ph);struct scmi_sensor_info *s = si->sensors + sensor_id; s->sensor_config = sensor_config;
@@ -831,8 +837,11 @@ static int scmi_sensor_reading_get(const struct scmi_protocol_handle *ph,int ret;struct scmi_xfer *t;struct scmi_msg_sensor_reading_get *sensor; +struct scmi_sensor_info *s;struct sensors_info *si = ph->get_priv (ph); -struct scmi_sensor_info *s = si->sensors + sensor_id; + +if (sensor_id >= si->num_sensors) +return -EINVAL ; ret = ph->xops->xfer_get_init (ph,SENSOR_READING_GET ,sizeof (*sensor),0 , &t);
@@ -841,6 +850,7 @@ static int scmi_sensor_reading_get(const struct scmi_protocol_handle *ph, sensor = t->tx.buf; sensor->id =cpu_to_le32 (sensor_id); + s = si->sensors + sensor_id;if (s->async) { sensor->flags =cpu_to_le32 (SENSOR_READ_ASYNC ); ret = ph->xops->do_xfer_with_response (ph, t);
@@ -895,9 +905,13 @@ scmi_sensor_reading_get_timestamped(const struct scmi_protocol_handle *ph,int ret;struct scmi_xfer *t;struct scmi_msg_sensor_reading_get *sensor; +struct scmi_sensor_info *s;struct sensors_info *si = ph->get_priv (ph); -struct scmi_sensor_info *s = si->sensors + sensor_id; +if (sensor_id >= si->num_sensors) +return -EINVAL ; + + s = si->sensors + sensor_id;if (!count || !readings || (!s->num_axis && count >1 ) || (s->num_axis && count > s->num_axis))return -EINVAL ;
@@ -948,6 +962,9 @@ scmi_sensor_info_get(const struct scmi_protocol_handle *ph, u32 sensor_id) {struct sensors_info *si = ph->get_priv (ph); +if (sensor_id >= si->num_sensors) +return NULL ; +return si->sensors + sensor_id; }
drivers/gpio/gpio-ftgpio010.c +13 -9
@@ -41,14 +41,12 @@* struct ftgpio_gpio - Gemini GPIO state container * @dev: containing device for this instance * @gc: gpiochip for this instance -* @irq: irqchip for this instance * @base: remapped I/O-memory base * @clk: silicon clock */ struct ftgpio_gpio {struct device *dev;struct gpio_chip gc; -struct irq_chip irq;void __iomem *base;struct clk *clk; };
@@ -70,6 +68,7 @@ static void ftgpio_gpio_mask_irq(struct irq_data *d) val =readl (g->base +GPIO_INT_EN ); val &= ~BIT (irqd_to_hwirq (d));writel (val, g->base +GPIO_INT_EN ); +gpiochip_disable_irq (gc,irqd_to_hwirq (d)); }static void ftgpio_gpio_unmask_irq (struct irq_data *d)
@@ -78,6 +77,7 @@ static void ftgpio_gpio_unmask_irq(struct irq_data *d)struct ftgpio_gpio *g =gpiochip_get_data (gc);u32 val; +gpiochip_enable_irq (gc,irqd_to_hwirq (d)); val =readl (g->base +GPIO_INT_EN ); val |=BIT (irqd_to_hwirq (d));writel (val, g->base +GPIO_INT_EN );
@@ -221,6 +221,16 @@ static int ftgpio_gpio_set_config(struct gpio_chip *gc, unsigned int offset,return 0 ; } +static const struct irq_chip ftgpio_irq_chip = { + .name ="FTGPIO010" , + .irq_ack = ftgpio_gpio_ack_irq, + .irq_mask = ftgpio_gpio_mask_irq, + .irq_unmask = ftgpio_gpio_unmask_irq, + .irq_set_type = ftgpio_gpio_set_irq_type, + .flags =IRQCHIP_IMMUTABLE , +GPIOCHIP_IRQ_RESOURCE_HELPERS , +}; +static int ftgpio_gpio_probe (struct platform_device *pdev) {struct device *dev = &pdev->dev;
@@ -277,14 +287,8 @@ static int ftgpio_gpio_probe(struct platform_device *pdev)if (!IS_ERR (g->clk)) g->gc.set_config = ftgpio_gpio_set_config; - g->irq.name ="FTGPIO010" ; - g->irq.irq_ack = ftgpio_gpio_ack_irq; - g->irq.irq_mask = ftgpio_gpio_mask_irq; - g->irq.irq_unmask = ftgpio_gpio_unmask_irq; - g->irq.irq_set_type = ftgpio_gpio_set_irq_type; - girq = &g->gc.irq; - girq->chip = &g->irq; +gpio_irq_chip_set_chip (girq, &ftgpio_irq_chip); girq->parent_handler = ftgpio_gpio_irq_handler; girq->num_parents =1 ; girq->parents = devm_kcalloc(dev, 1, sizeof(*girq->parents),
drivers/gpio/gpiolib-acpi.c +34 -4
@@ -32,9 +32,16 @@ MODULE_PARM_DESC(ignore_wake,"controller@pin combos on which to ignore the ACPI wake flag " "ignore_wake=controller@pin[,controller@pin[,...]]"); +static char *ignore_interrupt; +module_param (ignore_interrupt, charp,0444 ); +MODULE_PARM_DESC (ignore_interrupt, +"controller@pin combos on which to ignore interrupt " +"ignore_interrupt=controller@pin[,controller@pin[,...]]" ); +struct acpi_gpiolib_dmi_quirk {bool no_edge_events_on_boot;char *ignore_wake; +char *ignore_interrupt; };/**
@@ -317,14 +324,15 @@ static struct gpio_desc *acpi_request_own_gpiod(struct gpio_chip *chip,return desc; } -static bool acpi_gpio_in_ignore_list (const char *controller_in,unsigned int pin_in) +static bool acpi_gpio_in_ignore_list (const char *ignore_list,const char *controller_in, +unsigned int pin_in) {const char *controller, *pin_str;unsigned int pin;char *endp;int len; - controller = ignore_wake; + controller = ignore_list;while (controller) { pin_str =strchr (controller,'@' );if (!pin_str)
@@ -348,7 +356,7 @@ static bool acpi_gpio_in_ignore_list(const char *controller_in, unsigned int pinreturn false; err: -pr_err_once ("Error: Invalid value for gpiolib_acpi.ignore_wake: %s\n" , ignore_wake); +pr_err_once ("Error: Invalid value for gpiolib_acpi.ignore_...: %s\n" , ignore_list);return false; }
@@ -360,7 +368,7 @@ static bool acpi_gpio_irq_is_wake(struct device *parent,if (agpio->wake_capable !=ACPI_WAKE_CAPABLE )return false; -if (acpi_gpio_in_ignore_list (dev_name (parent), pin)) { +if (acpi_gpio_in_ignore_list (ignore_wake,dev_name (parent), pin)) {dev_info (parent,"Ignoring wakeup on pin %u\n" , pin);return false; }
@@ -427,6 +435,11 @@ static acpi_status acpi_gpiochip_alloc_event(struct acpi_resource *ares, goto fail_unlock_irq; } +if (acpi_gpio_in_ignore_list (ignore_interrupt,dev_name (chip->parent), pin)) { +dev_info (chip->parent,"Ignoring interrupt on pin %u\n" , pin); +return AE_OK ; + } + event =kzalloc (sizeof (*event),GFP_KERNEL );if (!event) goto fail_unlock_irq;
@@ -1560,6 +1573,20 @@ static const struct dmi_system_id gpiolib_acpi_quirks[] __initconst = { .ignore_wake = "INT33FF:01@0", }, }, + { + /* + * Interrupt storm caused from edge triggered floating pin + * Found in BIOS UX325UAZ.300 + * https://bugzilla.kernel.org/show_bug.cgi?id=216208 + */ + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), + DMI_MATCH(DMI_PRODUCT_NAME, "ZenBook UX325UAZ_UM325UAZ"), + }, + .driver_data = &(struct acpi_gpiolib_dmi_quirk) { + .ignore_interrupt = "AMDI0030:00@18", + }, + }, {} /* Terminating entry */ };
@@ -1582,6 +1609,9 @@ static int __init acpi_gpio_setup_params(void)if (ignore_wake ==NULL && quirk && quirk->ignore_wake) ignore_wake = quirk->ignore_wake; +if (ignore_interrupt ==NULL && quirk && quirk->ignore_interrupt) + ignore_interrupt = quirk->ignore_interrupt; +return 0 ; }
drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c +3 -0
@@ -169,6 +169,9 @@ int amdgpu_mes_init(struct amdgpu_device *adev)for (i =0 ; i <AMDGPU_MES_MAX_SDMA_PIPES ; i++) {if (adev->ip_versions[SDMA0_HWIP ][0 ] <IP_VERSION (6 ,0 ,0 )) adev->mes.sdma_hqd_mask[i] = i ?0 :0x3fc ; +/* zero sdma_hqd_mask for non-existent engine */ +else if (adev->sdma.num_instances ==1 ) + adev->mes.sdma_hqd_mask[i] = i ?0 :0xfc ;else adev->mes.sdma_hqd_mask[i] =0xfc ; }
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +10 -2
@@ -5629,7 +5629,7 @@ fill_dc_plane_info_and_addr(struct amdgpu_device *adev, plane_info->visible = true; plane_info->stereo_format =PLANE_STEREO_FORMAT_NONE ; - plane_info->layer_index =0 ; + plane_info->layer_index = plane_state->normalized_zpos; ret =fill_plane_color_attributes (plane_state, plane_info->format, &plane_info->color_space);
@@ -5697,7 +5697,7 @@ static int fill_dc_plane_attributes(struct amdgpu_device *adev, dc_plane_state->global_alpha = plane_info.global_alpha; dc_plane_state->global_alpha_value = plane_info.global_alpha_value; dc_plane_state->dcc = plane_info.dcc; - dc_plane_state->layer_index = plane_info.layer_index;// Always returns 0 + dc_plane_state->layer_index = plane_info.layer_index; dc_plane_state->flip_int_enabled = true;/*
@@ -11147,6 +11147,14 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev, } } +/* +* DC consults the zpos (layer_index in DC terminology) to determine the +* hw plane on which to enable the hw cursor (see +* `dcn10_can_pipe_disable_cursor`). By now, all modified planes are in +* atomic state, so call drm helper to normalize zpos. +*/ +drm_atomic_normalize_zpos (dev, state); +/* Remove exiting planes if they are modified */ for_each_oldnew_plane_in_state_reverse (state, plane, old_plane_state, new_plane_state, i) { ret = dm_update_plane_state(dc, state, plane,
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn315/dcn315_clk_mgr.c +14 -8
@@ -46,6 +46,9 @@#define TO_CLK_MGR_DCN315 (clk_mgr)\ container_of(clk_mgr, struct clk_mgr_dcn315, base) +#define UNSUPPORTED_DCFCLK 10000000 +#define MIN_DPP_DISP_CLK 100000 +static int dcn315_get_active_display_cnt_wa (struct dc *dc,struct dc_state *context)
@@ -146,6 +149,9 @@ static void dcn315_update_clocks(struct clk_mgr *clk_mgr_base, } } +/* Lock pstate by requesting unsupported dcfclk if change is unsupported */ +if (!new_clocks->p_state_change_support) + new_clocks->dcfclk_khz =UNSUPPORTED_DCFCLK ;if (should_set_clock (safe_to_lower, new_clocks->dcfclk_khz, clk_mgr_base->clks.dcfclk_khz)) { clk_mgr_base->clks.dcfclk_khz = new_clocks->dcfclk_khz;dcn315_smu_set_hard_min_dcfclk (clk_mgr, clk_mgr_base->clks.dcfclk_khz);
@@ -159,10 +165,10 @@ static void dcn315_update_clocks(struct clk_mgr *clk_mgr_base,// workaround: Limit dppclk to 100Mhz to avoid lower eDP panel switch to plus 4K monitor underflow. if (!IS_DIAG_DC (dc->ctx->dce_environment)) { -if (new_clocks->dppclk_khz <100000 ) - new_clocks->dppclk_khz =100000 ; -if (new_clocks->dispclk_khz <100000 ) - new_clocks->dispclk_khz =100000 ; +if (new_clocks->dppclk_khz <MIN_DPP_DISP_CLK ) + new_clocks->dppclk_khz =MIN_DPP_DISP_CLK ; +if (new_clocks->dispclk_khz <MIN_DPP_DISP_CLK ) + new_clocks->dispclk_khz =MIN_DPP_DISP_CLK ; }if (should_set_clock (safe_to_lower, new_clocks->dppclk_khz, clk_mgr->base.clks.dppclk_khz)) {
@@ -272,7 +278,7 @@ static struct wm_table ddr5_wm_table = { { .wm_inst = WM_A, .wm_type = WM_TYPE_PSTATE_CHG, - .pstate_latency_us = 64.0, + .pstate_latency_us = 129.0, .sr_exit_time_us = 11.5, .sr_enter_plus_exit_time_us = 14.5, .valid = true,
@@ -280,7 +286,7 @@ static struct wm_table ddr5_wm_table = { { .wm_inst = WM_B, .wm_type = WM_TYPE_PSTATE_CHG, - .pstate_latency_us = 64.0, + .pstate_latency_us = 129.0, .sr_exit_time_us = 11.5, .sr_enter_plus_exit_time_us = 14.5, .valid = true,
@@ -288,7 +294,7 @@ static struct wm_table ddr5_wm_table = { { .wm_inst = WM_C, .wm_type = WM_TYPE_PSTATE_CHG, - .pstate_latency_us = 64.0, + .pstate_latency_us = 129.0, .sr_exit_time_us = 11.5, .sr_enter_plus_exit_time_us = 14.5, .valid = true,
@@ -296,7 +302,7 @@ static struct wm_table ddr5_wm_table = { { .wm_inst = WM_D, .wm_type = WM_TYPE_PSTATE_CHG, - .pstate_latency_us = 64.0, + .pstate_latency_us = 129.0, .sr_exit_time_us = 11.5, .sr_enter_plus_exit_time_us = 14.5, .valid = true,
drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c +15 -1
@@ -2857,8 +2857,14 @@ bool perform_link_training_with_retries( skip_video_pattern);/* Transmit idle pattern once training successful. */ -if (status ==LINK_TRAINING_SUCCESS && !is_link_bw_low) +if (status ==LINK_TRAINING_SUCCESS && !is_link_bw_low) {dp_set_hw_test_pattern (link, &pipe_ctx->link_res,DP_TEST_PATTERN_VIDEO_MODE ,NULL ,0 ); +/* Update verified link settings to current one +* Because DPIA LT might fallback to lower link setting. +*/ + link->verified_link_cap.link_rate = link->cur_link_settings.link_rate; + link->verified_link_cap.lane_count = link->cur_link_settings.lane_count; + } }else { status = dc_link_dp_perform_link_training(link, &pipe_ctx->link_res,
@@ -5211,6 +5217,14 @@ bool dp_retrieve_lttpr_cap(struct dc_link *link) lttpr_dpcd_data[DP_PHY_REPEATER_128B132B_RATES -DP_LT_TUNABLE_PHY_REPEATER_FIELD_DATA_STRUCTURE_REV ]; +/* If this chip cap is set, at least one retimer must exist in the chain +* Override count to 1 if we receive a known bad count (0 or an invalid value) */ +if (link->chip_caps &EXT_DISPLAY_PATH_CAPS__DP_FIXED_VS_EN && + (dp_convert_to_count (link->dpcd_caps.lttpr_caps.phy_repeater_cnt) ==0 )) { +ASSERT (0 ); + link->dpcd_caps.lttpr_caps.phy_repeater_cnt =0x80 ; + } +/* Attempt to train in LTTPR transparent mode if repeater count exceeds 8. */ is_lttpr_present = (link->dpcd_caps.lttpr_caps.max_lane_count > 0 && link->dpcd_caps.lttpr_caps.max_lane_count <= 4 &&
drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c +4 -2
@@ -2165,7 +2165,8 @@ static void dce110_setup_audio_dto(continue ;if (pipe_ctx->stream->signal !=SIGNAL_TYPE_HDMI_TYPE_A )continue ; -if (pipe_ctx->stream_res.audio !=NULL ) { +if (pipe_ctx->stream_res.audio !=NULL && + pipe_ctx->stream_res.audio->enabled == false) {struct audio_output audio_output;build_audio_output (context, pipe_ctx, &audio_output);
@@ -2207,7 +2208,8 @@ static void dce110_setup_audio_dto(if (!dc_is_dp_signal (pipe_ctx->stream->signal))continue ; -if (pipe_ctx->stream_res.audio !=NULL ) { +if (pipe_ctx->stream_res.audio !=NULL && + pipe_ctx->stream_res.audio->enabled == false) {struct audio_output audio_output;build_audio_output (context, pipe_ctx, &audio_output);
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c +1 -0
@@ -1520,6 +1520,7 @@ static void dcn20_update_dchubp_dpp(/* Any updates are handled in dc interface, just need * to apply existing for plane enable / opp change */ if (pipe_ctx->update_flags.bits.enable || pipe_ctx->update_flags.bits.opp_changed + || pipe_ctx->update_flags.bits.plane_changed || pipe_ctx->stream->update_flags.bits.gamut_remap || pipe_ctx->stream->update_flags.bits.out_csc) {/* dpp/cm gamut remap*/
drivers/i2c/busses/i2c-davinci.c +2 -1
@@ -823,7 +823,7 @@ static int davinci_i2c_probe(struct platform_device *pdev) r =pm_runtime_resume_and_get (dev->dev);if (r <0 ) {dev_err (dev->dev,"failed to runtime_get device: %d\n" , r); -return r; + goto err_pm; }i2c_davinci_init (dev);
@@ -882,6 +882,7 @@ static int davinci_i2c_probe(struct platform_device *pdev) err_unuse_clocks:pm_runtime_dont_use_autosuspend (dev->dev);pm_runtime_put_sync (dev->dev); +err_pm:pm_runtime_disable (dev->dev);return r;
drivers/mmc/core/sd.c +2 -1
@@ -870,7 +870,8 @@ int mmc_sd_get_cid(struct mmc_host *host, u32 ocr, u32 *cid, u32 *rocr)* the CCS bit is set as well. We deliberately deviate from the spec in * regards to this, which allows UHS-I to be supported for SDSC cards. */ -if (!mmc_host_is_spi (host) && rocr && (*rocr &0x01000000 )) { +if (!mmc_host_is_spi (host) && (ocr &SD_OCR_S18R ) && + rocr && (*rocr &SD_ROCR_S18A )) { err =mmc_set_uhs_voltage (host, pocr);if (err == -EAGAIN ) { retries--;
drivers/net/ethernet/aquantia/atlantic/aq_main.c +0 -3
@@ -94,11 +94,8 @@ static int aq_ndev_close(struct net_device *ndev)int err =0 ; err =aq_nic_stop (aq_nic); -if (err <0 ) - goto err_exit;aq_nic_deinit (aq_nic, true); -err_exit:return err; }
drivers/net/ethernet/marvell/prestera/prestera_pci.c +1 -0
@@ -872,6 +872,7 @@ static void prestera_pci_remove(struct pci_dev *pdev)static const struct pci_device_id prestera_pci_devices[] = { {PCI_DEVICE (PCI_VENDOR_ID_MARVELL ,0xC804 ) }, {PCI_DEVICE (PCI_VENDOR_ID_MARVELL ,0xC80C ) }, + {PCI_DEVICE (PCI_VENDOR_ID_MARVELL ,0xCC1E ) }, { } };MODULE_DEVICE_TABLE (pci, prestera_pci_devices);
drivers/net/ethernet/mediatek/mtk_ppe.c +1 -1
@@ -412,7 +412,7 @@ __mtk_foe_entry_clear(struct mtk_ppe *ppe, struct mtk_flow_entry *entry)if (entry->hash !=0xffff ) { ppe->foe_table[entry->hash].ib1 &= ~MTK_FOE_IB1_STATE ; ppe->foe_table[entry->hash].ib1 |=FIELD_PREP (MTK_FOE_IB1_STATE , -MTK_FOE_STATE_UNBIND ); +MTK_FOE_STATE_INVALID );dma_wmb (); } entry->hash =0xffff ;
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c +2 -2
@@ -1833,8 +1833,8 @@ static void iwl_mvm_parse_ppe(struct iwl_mvm *mvm,* If nss < MAX: we can set zeros in other streams */ if (nss >MAX_HE_SUPP_NSS ) { -IWL_INFO (mvm,"Got NSS = %d - trimming to %d\n" , nss, -MAX_HE_SUPP_NSS ); +IWL_DEBUG_INFO (mvm,"Got NSS = %d - trimming to %d\n" , nss, +MAX_HE_SUPP_NSS ); nss =MAX_HE_SUPP_NSS ; }
drivers/rpmsg/qcom_glink_native.c +1 -1
@@ -1546,7 +1546,7 @@ static void qcom_glink_rx_close(struct qcom_glink *glink, unsigned int rcid)cancel_work_sync (&channel->intent_work);if (channel->rpdev) { -strncpy (chinfo.name, channel->name,sizeof (chinfo.name)); +strscpy_pad (chinfo.name, channel->name,sizeof (chinfo.name)); chinfo.src =RPMSG_ADDR_ANY ; chinfo.dst =RPMSG_ADDR_ANY ;
drivers/rpmsg/qcom_smd.c +2 -2
@@ -1089,7 +1089,7 @@ static int qcom_smd_create_device(struct qcom_smd_channel *channel)/* Assign public information to the rpmsg_device */ rpdev = &qsdev->rpdev; -strncpy (rpdev->id.name, channel->name,RPMSG_NAME_SIZE ); +strscpy_pad (rpdev->id.name, channel->name,RPMSG_NAME_SIZE ); rpdev->src =RPMSG_ADDR_ANY ; rpdev->dst =RPMSG_ADDR_ANY ;
@@ -1323,7 +1323,7 @@ static void qcom_channel_state_worker(struct work_struct *work)spin_unlock_irqrestore (&edge->channels_lock, flags); -strncpy (chinfo.name, channel->name,sizeof (chinfo.name)); +strscpy_pad (chinfo.name, channel->name,sizeof (chinfo.name)); chinfo.src =RPMSG_ADDR_ANY ; chinfo.dst =RPMSG_ADDR_ANY ;rpmsg_unregister_device (&edge->dev, &chinfo);
drivers/scsi/qedf/qedf_main.c +0 -5
@@ -3686,11 +3686,6 @@ static int __qedf_probe(struct pci_dev *pdev, int mode) err1:scsi_host_put (lport->host); err0: -if (qedf) { -QEDF_INFO (&qedf->dbg_ctx,QEDF_LOG_DISC ,"Probe done.\n" ); - -clear_bit (QEDF_PROBING , &qedf->flags); - }return rc; }
drivers/usb/mon/mon_bin.c +5 -0
@@ -1268,6 +1268,11 @@ static int mon_bin_mmap(struct file *filp, struct vm_area_struct *vma) {/* don't do anything here: "fault" will set up page table entries */ vma->vm_ops = &mon_bin_vm_ops; + +if (vma->vm_flags &VM_WRITE ) +return -EPERM ; + + vma->vm_flags &= ~VM_MAYWRITE ; vma->vm_flags |=VM_DONTEXPAND |VM_DONTDUMP ; vma->vm_private_data = filp->private_data;mon_bin_vma_open (vma);
drivers/usb/serial/ftdi_sio.c +1 -2
@@ -1319,8 +1319,7 @@ static u32 get_ftdi_divisor(struct tty_struct *tty,case 38400 : div_value = ftdi_sio_b38400;break ;case 57600 : div_value = ftdi_sio_b57600;break ;case 115200 : div_value = ftdi_sio_b115200;break ; - }/* baud */ -if (div_value ==0 ) { +default :dev_dbg (dev,"%s - Baudrate (%d) requested is not supported\n" , __func__, baud); div_value = ftdi_sio_b9600;
fs/coredump.c +33 -5
@@ -832,6 +832,38 @@ static int __dump_skip(struct coredump_params *cprm, size_t nr) } } +static int dump_emit_page (struct coredump_params *cprm,struct page *page) +{ +struct bio_vec bvec = { + .bv_page = page, + .bv_offset =0 , + .bv_len =PAGE_SIZE , + }; +struct iov_iter iter; +struct file *file = cprm->file; +loff_t pos = file->f_pos; +ssize_t n; + +if (cprm->to_skip) { +if (!__dump_skip (cprm, cprm->to_skip)) +return 0 ; + cprm->to_skip =0 ; + } +if (cprm->written +PAGE_SIZE > cprm->limit) +return 0 ; +if (dump_interrupted ()) +return 0 ; +iov_iter_bvec (&iter,WRITE , &bvec,1 ,PAGE_SIZE ); + n =__kernel_write_iter (cprm->file, &iter, &pos); +if (n !=PAGE_SIZE ) +return 0 ; + file->f_pos = pos; + cprm->written +=PAGE_SIZE ; + cprm->pos +=PAGE_SIZE ; + +return 1 ; +} +int dump_emit (struct coredump_params *cprm,const void *addr,int nr) {if (cprm->to_skip) {
@@ -863,7 +895,6 @@ int dump_user_range(struct coredump_params *cprm, unsigned long start,for (addr = start; addr < start + len; addr +=PAGE_SIZE ) {struct page *page; -int stop;/* * To avoid having to allocate page tables for virtual address
@@ -874,10 +905,7 @@ int dump_user_range(struct coredump_params *cprm, unsigned long start,*/ page =get_dump_page (addr);if (page) { -void *kaddr =kmap_local_page (page); - - stop = !dump_emit (cprm, kaddr,PAGE_SIZE ); -kunmap_local (kaddr); +int stop = !dump_emit_page (cprm, page);put_page (page);if (stop)return 0 ;
fs/inode.c +3 -4
@@ -192,8 +192,6 @@ int inode_init_always(struct super_block *sb, struct inode *inode) inode->i_wb_frn_history =0 ;#endif -if (security_inode_alloc (inode)) - goto out;spin_lock_init (&inode->i_lock);lockdep_set_class (&inode->i_lock, &sb->s_type->i_lock_key);
@@ -228,11 +226,12 @@ int inode_init_always(struct super_block *sb, struct inode *inode) inode->i_fsnotify_mask =0 ;#endif inode->i_flctx =NULL ; + +if (unlikely (security_inode_alloc (inode))) +return -ENOMEM ;this_cpu_inc (nr_inodes);return 0 ; -out: -return -ENOMEM ; }EXPORT_SYMBOL (inode_init_always);
fs/internal.h +3 -0
@@ -16,6 +16,7 @@ struct shrink_control;struct fs_context ;struct user_namespace ;struct pipe_inode_info ; +struct iov_iter ;/* * block/bdev.c
@@ -221,3 +222,5 @@ ssize_t do_getxattr(struct user_namespace *mnt_userns,int setxattr_copy (const char __user *name,struct xattr_ctx *ctx);int do_setxattr (struct user_namespace *mnt_userns,struct dentry *dentry,struct xattr_ctx *ctx); + +ssize_t __kernel_write_iter (struct file *file,struct iov_iter *from,loff_t *pos);
fs/read_write.c +14 -8
@@ -509,14 +509,9 @@ static ssize_t new_sync_write(struct file *filp, const char __user *buf, size_t }/* caller is responsible for file_start_write/file_end_write */ -ssize_t __kernel_write (struct file *file,const void *buf,size_t count,loff_t *pos) +ssize_t __kernel_write_iter (struct file *file,struct iov_iter *from,loff_t *pos) { -struct kvec iov = { - .iov_base = (void *)buf, - .iov_len =min_t (size_t, count,MAX_RW_COUNT ), - };struct kiocb kiocb; -struct iov_iter iter;ssize_t ret;if (WARN_ON_ONCE (!(file->f_mode &FMODE_WRITE )))
@@ -532,8 +527,7 @@ ssize_t __kernel_write(struct file *file, const void *buf, size_t count, loff_tinit_sync_kiocb (&kiocb, file); kiocb.ki_pos = pos ? *pos :0 ; -iov_iter_kvec (&iter,WRITE , &iov,1 , iov.iov_len); - ret = file->f_op->write_iter (&kiocb, &iter); + ret = file->f_op->write_iter (&kiocb, from);if (ret >0 ) {if (pos) *pos = kiocb.ki_pos;
@@ -543,6 +537,18 @@ ssize_t __kernel_write(struct file *file, const void *buf, size_t count, loff_tinc_syscw (current);return ret; } + +/* caller is responsible for file_start_write/file_end_write */ +ssize_t __kernel_write (struct file *file,const void *buf,size_t count,loff_t *pos) +{ +struct kvec iov = { + .iov_base = (void *)buf, + .iov_len =min_t (size_t, count,MAX_RW_COUNT ), + }; +struct iov_iter iter; +iov_iter_kvec (&iter,WRITE , &iov,1 , iov.iov_len); +return __kernel_write_iter (file, &iter, pos); +}/* * This "EXPORT_SYMBOL_GPL()" is more of a "EXPORT_SYMBOL_DONTUSE()", * but autofs is one of the few internal kernel users that actually
include/linux/scmi_protocol.h +2 -2
@@ -78,7 +78,7 @@ struct scmi_protocol_handle;struct scmi_clk_proto_ops {int (*count_get)(const struct scmi_protocol_handle *ph); -const struct scmi_clock_info *(*info_get) +const struct scmi_clock_info __must_check *(*info_get) (const struct scmi_protocol_handle *ph,u32 clk_id);int (*rate_get)(const struct scmi_protocol_handle *ph,u32 clk_id,u64 *rate);
@@ -460,7 +460,7 @@ enum scmi_sensor_class {*/ struct scmi_sensor_proto_ops {int (*count_get)(const struct scmi_protocol_handle *ph); -const struct scmi_sensor_info *(*info_get) +const struct scmi_sensor_info __must_check *(*info_get) (const struct scmi_protocol_handle *ph,u32 sensor_id);int (*trip_point_config)(const struct scmi_protocol_handle *ph,u32 sensor_id,u8 trip_id,u64 trip_value);
include/net/ieee802154_netdev.h +37 -0
@@ -15,6 +15,22 @@#ifndef IEEE802154_NETDEVICE_H #define IEEE802154_NETDEVICE_H +#define IEEE802154_REQUIRED_SIZE (struct_type, member) \ + (offsetof(typeof(struct_type), member) + \ + sizeof(((typeof(struct_type) *)(NULL))->member)) + +#define IEEE802154_ADDR_OFFSET \ + offsetof(typeof(struct sockaddr_ieee802154), addr) + +#define IEEE802154_MIN_NAMELEN (IEEE802154_ADDR_OFFSET + \ + IEEE802154_REQUIRED_SIZE(struct ieee802154_addr_sa, addr_type)) + +#define IEEE802154_NAMELEN_SHORT (IEEE802154_ADDR_OFFSET + \ + IEEE802154_REQUIRED_SIZE(struct ieee802154_addr_sa, short_addr)) + +#define IEEE802154_NAMELEN_LONG (IEEE802154_ADDR_OFFSET + \ + IEEE802154_REQUIRED_SIZE(struct ieee802154_addr_sa, hwaddr)) +#include <net/af_ieee802154.h> #include <linux/netdevice.h> #include <linux/skbuff.h>
@@ -165,6 +181,27 @@ static inline void ieee802154_devaddr_to_raw(void *raw, __le64 addr)memcpy (raw, &temp,IEEE802154_ADDR_LEN ); } +static inline int +ieee802154_sockaddr_check_size (struct sockaddr_ieee802154 *daddr,int len) +{ +struct ieee802154_addr_sa *sa; + + sa = &daddr->addr; +if (len <IEEE802154_MIN_NAMELEN ) +return -EINVAL ; +switch (sa->addr_type) { +case IEEE802154_ADDR_SHORT : +if (len <IEEE802154_NAMELEN_SHORT ) +return -EINVAL ; +break ; +case IEEE802154_ADDR_LONG : +if (len <IEEE802154_NAMELEN_LONG ) +return -EINVAL ; +break ; + } +return 0 ; +} +static inline void ieee802154_addr_from_sa (struct ieee802154_addr *a,const struct ieee802154_addr_sa *sa) {
include/net/xsk_buff_pool.h +1 -1
@@ -95,7 +95,7 @@ struct xsk_buff_pool *xp_create_and_assign_umem(struct xdp_sock *xs, struct xdp_umem *umem);int xp_assign_dev (struct xsk_buff_pool *pool,struct net_device *dev,u16 queue_id,u16 flags); -int xp_assign_dev_shared (struct xsk_buff_pool *pool,struct xdp_umem *umem, +int xp_assign_dev_shared (struct xsk_buff_pool *pool,struct xdp_sock *umem_xs,struct net_device *dev,u16 queue_id);int xp_alloc_tx_descs (struct xsk_buff_pool *pool,struct xdp_sock *xs);void xp_destroy (struct xsk_buff_pool *pool);
kernel/bpf/helpers.c +14 -14
@@ -1627,26 +1627,12 @@ bpf_base_func_proto(enum bpf_func_id func_id)return &bpf_ringbuf_discard_proto;case BPF_FUNC_ringbuf_query:return &bpf_ringbuf_query_proto; -case BPF_FUNC_ringbuf_reserve_dynptr: -return &bpf_ringbuf_reserve_dynptr_proto; -case BPF_FUNC_ringbuf_submit_dynptr: -return &bpf_ringbuf_submit_dynptr_proto; -case BPF_FUNC_ringbuf_discard_dynptr: -return &bpf_ringbuf_discard_dynptr_proto;case BPF_FUNC_for_each_map_elem:return &bpf_for_each_map_elem_proto;case BPF_FUNC_loop:return &bpf_loop_proto;case BPF_FUNC_strncmp:return &bpf_strncmp_proto; -case BPF_FUNC_dynptr_from_mem: -return &bpf_dynptr_from_mem_proto; -case BPF_FUNC_dynptr_read: -return &bpf_dynptr_read_proto; -case BPF_FUNC_dynptr_write: -return &bpf_dynptr_write_proto; -case BPF_FUNC_dynptr_data: -return &bpf_dynptr_data_proto;default :break ; }
@@ -1675,6 +1661,20 @@ bpf_base_func_proto(enum bpf_func_id func_id)return &bpf_timer_cancel_proto;case BPF_FUNC_kptr_xchg:return &bpf_kptr_xchg_proto; +case BPF_FUNC_ringbuf_reserve_dynptr: +return &bpf_ringbuf_reserve_dynptr_proto; +case BPF_FUNC_ringbuf_submit_dynptr: +return &bpf_ringbuf_submit_dynptr_proto; +case BPF_FUNC_ringbuf_discard_dynptr: +return &bpf_ringbuf_discard_dynptr_proto; +case BPF_FUNC_dynptr_from_mem: +return &bpf_dynptr_from_mem_proto; +case BPF_FUNC_dynptr_read: +return &bpf_dynptr_read_proto; +case BPF_FUNC_dynptr_write: +return &bpf_dynptr_write_proto; +case BPF_FUNC_dynptr_data: +return &bpf_dynptr_data_proto;default :break ; }
kernel/bpf/syscall.c +1 -1
@@ -578,7 +578,7 @@ void bpf_map_free_kptrs(struct bpf_map *map, void *map_value)if (off_desc->type ==BPF_KPTR_UNREF ) {u64 *p = (u64 *)btf_id_ptr; -WRITE_ONCE (p,0 ); +WRITE_ONCE (*p,0 );continue ; } old_ptr =xchg (btf_id_ptr,0 );
net/bluetooth/hci_core.c +13 -2
@@ -596,6 +596,15 @@ static int hci_dev_do_reset(struct hci_dev *hdev)/* Cancel these to avoid queueing non-chained pending work */ hci_dev_set_flag (hdev,HCI_CMD_DRAIN_WORKQUEUE ); +/* Wait for +* +* if (!hci_dev_test_flag(hdev, HCI_CMD_DRAIN_WORKQUEUE)) +* queue_delayed_work(&hdev->{cmd,ncmd}_timer) +* +* inside RCU section to see the flag or complete scheduling. +*/ +synchronize_rcu (); +/* Explicitly cancel works in case scheduled after setting the flag. */ cancel_delayed_work (&hdev->cmd_timer);cancel_delayed_work (&hdev->ncmd_timer);
@@ -3871,12 +3880,14 @@ static void hci_cmd_work(struct work_struct *work)if (res <0 )__hci_cmd_sync_cancel (hdev, -res); +rcu_read_lock ();if (test_bit (HCI_RESET , &hdev->flags) ||hci_dev_test_flag (hdev,HCI_CMD_DRAIN_WORKQUEUE ))cancel_delayed_work (&hdev->cmd_timer);else -schedule_delayed_work (&hdev->cmd_timer, -HCI_CMD_TIMEOUT ); +queue_delayed_work (hdev->workqueue, &hdev->cmd_timer, +HCI_CMD_TIMEOUT ); +rcu_read_unlock (); }else {skb_queue_head (&hdev->cmd_q, skb);queue_work (hdev->workqueue, &hdev->cmd_work);
net/bluetooth/hci_event.c +4 -2
@@ -3763,16 +3763,18 @@ static inline void handle_cmd_cnt_and_timer(struct hci_dev *hdev, u8 ncmd) {cancel_delayed_work (&hdev->cmd_timer); +rcu_read_lock ();if (!test_bit (HCI_RESET , &hdev->flags)) {if (ncmd) {cancel_delayed_work (&hdev->ncmd_timer);atomic_set (&hdev->cmd_cnt,1 ); }else {if (!hci_dev_test_flag (hdev,HCI_CMD_DRAIN_WORKQUEUE )) -schedule_delayed_work (&hdev->ncmd_timer, -HCI_NCMD_TIMEOUT ); +queue_delayed_work (hdev->workqueue, &hdev->ncmd_timer, +HCI_NCMD_TIMEOUT ); } } +rcu_read_unlock (); }#define HCI_CC_VL (_op, _func, _min, _max) \
net/ieee802154/socket.c +23 -19
78 lines not on this page · raw message
net/xdp/xsk.c +2 -2
@@ -951,8 +951,8 @@ static int xsk_bind(struct socket *sock, struct sockaddr *addr, int addr_len) goto out_unlock; } - err =xp_assign_dev_shared (xs->pool, umem_xs->umem, - dev, qid); + err =xp_assign_dev_shared (xs->pool, umem_xs, dev, + qid);if (err) {xp_destroy (xs->pool); xs->pool =NULL ;
net/xdp/xsk_buff_pool.c +3 -2
@@ -212,17 +212,18 @@ int xp_assign_dev(struct xsk_buff_pool *pool,return err; } -int xp_assign_dev_shared (struct xsk_buff_pool *pool,struct xdp_umem *umem, +int xp_assign_dev_shared (struct xsk_buff_pool *pool,struct xdp_sock *umem_xs,struct net_device *dev,u16 queue_id) {u16 flags; +struct xdp_umem *umem = umem_xs->umem;/* One fill and completion ring required for each queue id. */ if (!pool->fq || !pool->cq)return -EINVAL ; flags = umem->zc ?XDP_ZEROCOPY :XDP_COPY ; -if (pool->uses_need_wakeup) +if (umem_xs->pool->uses_need_wakeup) flags |=XDP_USE_NEED_WAKEUP ;return xp_assign_dev (pool, dev, queue_id, flags);
scripts/Makefile.extrawarn +1 -0
@@ -53,6 +53,7 @@ KBUILD_CFLAGS += -Wno-format-zero-length KBUILD_CFLAGS += $(call cc-disable-warning, pointer-to-enum-cast) KBUILD_CFLAGS += -Wno-tautological-constant-out-of-range-compare KBUILD_CFLAGS += $(call cc-disable-warning, unaligned-access) +KBUILD_CFLAGS += $(call cc-disable-warning, cast-function-type-strict) endif endif
security/Kconfig.hardening +10 -4
@@ -22,11 +22,17 @@ menu "Memory initialization" config CC_HAS_AUTO_VAR_INIT_PATTERN def_bool $(cc-option,-ftrivial-auto-var-init=pattern) -config CC_HAS_AUTO_VAR_INIT_ZERO - # GCC ignores the -enable flag, so we can test for the feature with - # a single invocation using the flag, but drop it as appropriate in - # the Makefile, depending on the presence of Clang. +config CC_HAS_AUTO_VAR_INIT_ZERO_BARE + def_bool $(cc-option,-ftrivial-auto-var-init=zero) + +config CC_HAS_AUTO_VAR_INIT_ZERO_ENABLER + # Clang 16 and later warn about using the -enable flag, but it + # is required before then. def_bool $(cc-option,-ftrivial-auto-var-init=zero -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang) + depends on !CC_HAS_AUTO_VAR_INIT_ZERO_BARE + +config CC_HAS_AUTO_VAR_INIT_ZERO + def_bool CC_HAS_AUTO_VAR_INIT_ZERO_BARE || CC_HAS_AUTO_VAR_INIT_ZERO_ENABLER choice prompt "Initialize kernel stack variables at function entry"
sound/pci/hda/patch_hdmi.c +1 -0
@@ -1278,6 +1278,7 @@ static int hdmi_pcm_open(struct hda_pcm_stream *hinfo,set_bit (pcm_idx, &spec->pcm_in_use); per_pin =get_pin (spec, pin_idx); per_pin->cvt_nid = per_cvt->cvt_nid; + per_pin->silent_stream = false; hinfo->nid = per_cvt->cvt_nid;/* flip stripe flag for the assigned stream if supported */