Linux 6.12.21
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.12.21 kernel.
All users of the 6.12 kernel series must upgrade.
The updated 6.12.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.12.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/net/can/renesas,rcar-canfd.yaml | 2 Makefile | 2 arch/arm/boot/dts/broadcom/bcm2711-rpi.dtsi | 5 arch/arm/boot/dts/broadcom/bcm2711.dtsi | 12 arch/arm/boot/dts/broadcom/bcm4709-asus-rt-ac3200.dts | 8 arch/arm/boot/dts/broadcom/bcm47094-asus-rt-ac5300.dts | 8 arch/arm/boot/dts/nxp/imx/imx6qdl-apalis.dtsi | 10 arch/arm/mach-davinci/Kconfig | 1 arch/arm/mach-omap1/Kconfig | 1 arch/arm/mach-shmobile/headsmp.S | 1 arch/arm64/boot/dts/broadcom/bcm2712.dtsi | 2 arch/arm64/boot/dts/freescale/imx8mm-verdin-dahlia.dtsi | 6 arch/arm64/boot/dts/freescale/imx8mp-tqma8mpql.dtsi | 16 - arch/arm64/boot/dts/freescale/imx8mp-verdin-dahlia.dtsi | 6 arch/arm64/boot/dts/rockchip/px30-ringneck-haikou.dts | 12 arch/arm64/boot/dts/rockchip/rk3399-nanopi-r4s.dts | 2 arch/arm64/boot/dts/rockchip/rk3566-lubancat-1.dts | 1 arch/arm64/boot/dts/rockchip/rk3588-jaguar.dts | 1 arch/arm64/boot/dts/rockchip/rk3588-tiger.dtsi | 1 arch/arm64/include/asm/kvm_host.h | 25 - arch/arm64/kernel/fpsimd.c | 25 - arch/arm64/kvm/arm.c | 9 arch/arm64/kvm/fpsimd.c | 100 ------ arch/arm64/kvm/hyp/entry.S | 5 arch/arm64/kvm/hyp/include/hyp/switch.h | 133 ++++++-- arch/arm64/kvm/hyp/nvhe/hyp-main.c | 11 arch/arm64/kvm/hyp/nvhe/pkvm.c | 29 - arch/arm64/kvm/hyp/nvhe/switch.c | 134 ++++---- arch/arm64/kvm/hyp/vhe/switch.c | 21 - arch/riscv/boot/dts/starfive/jh7110-pinfunc.h | 2 drivers/accel/qaic/qaic_data.c | 9 drivers/ata/libata-core.c | 14 drivers/dpll/dpll_core.c | 2 drivers/firmware/efi/libstub/randomalloc.c | 4 drivers/firmware/imx/imx-scu.c | 1 drivers/firmware/qcom/qcom_qseecom_uefisecapp.c | 18 - drivers/firmware/qcom/qcom_scm.c | 4 drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c | 2 drivers/gpu/drm/amd/amdgpu/gmc_v12_0.c | 22 - drivers/gpu/drm/amd/amdgpu/nv.c | 20 - drivers/gpu/drm/amd/amdgpu/soc15.c | 21 - drivers/gpu/drm/amd/amdgpu/vi.c | 43 +- drivers/gpu/drm/amd/amdkfd/kfd_queue.c | 12 drivers/gpu/drm/amd/amdkfd/kfd_svm.c | 8 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 2 drivers/gpu/drm/amd/display/dc/dce/dmub_hw_lock_mgr.c | 11 drivers/gpu/drm/amd/pm/amdgpu_pm.c | 2 drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c | 94 +++--- drivers/gpu/drm/radeon/radeon_vce.c | 2 drivers/gpu/drm/scheduler/sched_entity.c | 11 drivers/gpu/drm/v3d/v3d_sched.c | 9 drivers/gpu/drm/xe/xe_bo.h | 2 drivers/gpu/drm/xe/xe_dma_buf.c | 2 drivers/gpu/host1x/dev.c | 6 drivers/i2c/busses/i2c-omap.c | 26 - drivers/infiniband/hw/bnxt_re/qplib_fp.c | 2 drivers/infiniband/hw/bnxt_re/qplib_rcfw.h | 3 drivers/infiniband/hw/hns/hns_roce_alloc.c | 4 drivers/infiniband/hw/hns/hns_roce_cq.c | 1 drivers/infiniband/hw/hns/hns_roce_hem.c | 16 + drivers/infiniband/hw/hns/hns_roce_main.c | 2 drivers/infiniband/hw/hns/hns_roce_qp.c | 20 - drivers/infiniband/hw/mlx5/ah.c | 14 drivers/infiniband/sw/rxe/rxe.c | 25 - drivers/mmc/host/atmel-mci.c | 4 drivers/mmc/host/sdhci-brcmstb.c | 10 drivers/net/can/flexcan/flexcan-core.c | 18 + drivers/net/can/rcar/rcar_canfd.c | 28 - drivers/net/can/usb/ucan.c | 43 +- drivers/net/ethernet/microsoft/mana/gdma_main.c | 14 drivers/net/ethernet/ti/am65-cpsw-nuss.c | 32 +- drivers/net/ethernet/ti/icssg/icssg_prueth.c | 1 drivers/net/ethernet/ti/icssg/icssg_prueth.h | 2 drivers/net/ethernet/ti/icssg/icssg_stats.c | 4 drivers/net/phy/phy_link_topology.c | 2 drivers/pmdomain/amlogic/meson-secure-pwrc.c | 2 drivers/regulator/core.c | 12 drivers/regulator/dummy.c | 2 drivers/soc/imx/soc-imx8m.c | 149 ++++------ drivers/soc/qcom/pdr_interface.c | 8 fs/libfs.c | 2 fs/netfs/write_collect.c | 3 fs/proc/generic.c | 10 fs/proc/inode.c | 6 fs/proc/internal.h | 14 fs/smb/server/smbacl.c | 5 include/linux/key.h | 1 include/linux/libata.h | 2 include/linux/proc_fs.h | 7 include/net/bluetooth/hci.h | 2 include/net/mana/gdma.h | 11 io_uring/net.c | 5 kernel/dma/direct.c | 28 + kernel/sched/core.c | 21 - kernel/trace/trace_fprobe.c | 30 -- mm/filemap.c | 13 mm/huge_memory.c | 2 mm/memcontrol.c | 9 mm/migrate.c | 10 mm/page_alloc.c | 14 net/atm/lec.c | 3 net/batman-adv/bat_iv_ogm.c | 3 net/batman-adv/bat_v_ogm.c | 3 net/bluetooth/6lowpan.c | 7 net/core/lwtunnel.c | 65 +++- net/core/neighbour.c | 1 net/devlink/core.c | 2 net/ipv6/addrconf.c | 15 - net/ipv6/ioam6_iptunnel.c | 8 net/ipv6/route.c | 5 net/ipv6/tcpv6_offload.c | 21 + net/mptcp/options.c | 6 net/xdp/xsk_buff_pool.c | 2 net/xfrm/xfrm_output.c | 43 ++ security/keys/gc.c | 4 security/keys/key.c | 2 tools/lib/subcmd/parse-options.c | 2 tools/testing/selftests/mm/run_vmtests.sh | 4 118 files changed, 935 insertions(+), 812 deletions(-)
Alex Deucher (1):
drm/amdgpu/pm: wire up hwmon fan speed for smu 14.0.2
Alexander Stein (1):
arm64: dts: freescale: tqma8mpql: Fix vqmmc-supply
Alexandre Cassen (1):
xfrm: fix tunnel mode TX datapath in packet offload mode
Andreas Kemnade (1):
i2c: omap: fix IRQ storms
Ard Biesheuvel (1):
efi/libstub: Avoid physical address 0x0 when doing random allocation
Arkadiusz Bokowy (1):
Bluetooth: hci_event: Fix connection regression between LE and non-LE adapters
Arnd Bergmann (1):
ARM: OMAP1: select CONFIG_GENERIC_IRQ_CHIP
Arthur Mongodin (1):
mptcp: Fix data stream corruption in the address announcement
Baochen Qiang (1):
dma-mapping: fix missing clear bdr in check_ram_in_range_map()
Biju Das (2):
dt-bindings: can: renesas,rcar-canfd: Fix typo in pattern properties for R-Car V4M
can: rcar_canfd: Fix page entries in the AFL list
Chester A. Unal (2):
ARM: dts: BCM5301X: Fix switch port labels of ASUS RT-AC5300
ARM: dts: BCM5301X: Fix switch port labels of ASUS RT-AC3200
Christian Eggers (2):
regulator: dummy: force synchronous probing
regulator: check that dummy regulator has been probed before using it
Cosmin Ratiu (1):
xfrm_output: Force software GSO only in tunnel mode
Dan Carpenter (4):
firmware: qcom: scm: Fix error code in probe()
Bluetooth: Fix error code in chan_alloc_skb_cb()
net: atm: fix use after free in lec_send() accel/qaic: Fix integer overflow in qaic_validate_req()
David Belanger (1):
drm/amdgpu: Restore uncached behaviour on GFX12
David Howells (1):
keys: Fix UAF in key_put()
David Lechner (1):
ARM: davinci: da850: fix selecting ARCH_DAVINCI_DA8XX
David Rosca (3):
drm/amdgpu: Remove JPEG from vega and carrizo video caps drm/amdgpu: Fix MPEG2, MPEG4 and VC1 video caps max size drm/amdgpu: Fix JPEG video caps max size for navi1x and raven
Dietmar Eggemann (1):
Revert "sched/core: Reduce cost of sched_move_task when config autogroup"
E Shattow (1):
riscv: dts: starfive: Fix a typo in StarFive JH7110 pin function definitions
Eder Zulian (1):
libsubcmd: Silence compiler warning
Felix Fietkau (1):
net: ipv6: fix TCP GSO segmentation with NAT
Fuad Tabba (1):
KVM: arm64: Calculate cptr_el2 traps on activating traps
Gavrilov Ilia (1):
xsk: fix an integer overflow in xp_create_and_assign_umem()
Geert Uytterhoeven (1):
ARM: shmobile: smp: Enforce shmobile_smp_* alignment
Greg Kroah-Hartman (1):
Linux 6.12.21
Gu Bowen (1):
mmc: atmel-mci: Add missing clk_disable_unprepare()
Guillaume Nault (1):
Revert "gre: Fix IPv6 link-local address generation."
Haibo Chen (2):
can: flexcan: only change CAN state when link up in system PM
can: flexcan: disable transceiver during system PM
Haiyang Zhang (1):
net: mana: Support holes in device list reply msg
Harish Kasiviswanathan (1):
drm/amd/pm: add unique_id for gfx12
Heiko Stuebner (2):
arm64: dts: rockchip: remove supports-cqe from rk3588 jaguar
arm64: dts: rockchip: remove supports-cqe from rk3588 tiger
Jason Gunthorpe (1):
gpu: host1x: Do not assume that a NULL domain means no DMA IOMMU
Jeffrey Hugo (1):
accel/qaic: Fix possible data corruption in BOs > 2G
Jens Axboe (1):
io_uring/net: don't clear REQ_F_NEED_CLEANUP unconditionally
Joe Hattori (1):
firmware: imx-scu: fix OF node leak in .probe()
Johan Hovold (1):
firmware: qcom: uefisecapp: fix efivars registration race
Junxian Huang (6):
RDMA/hns: Fix soft lockup during bt pages loop
RDMA/hns: Fix unmatched condition in error path of alloc_user_qp_db() RDMA/hns: Fix invalid sq params not being blocked
RDMA/hns: Fix a missing rollback in error path of hns_roce_create_qp_common() RDMA/hns: Fix missing xa_destroy()
RDMA/hns: Fix wrong value of max_sge_rd
Justin Iurman (2):
net: lwtunnel: fix recursion loops
net: ipv6: ioam6: fix lwtunnel_output() loop
Justin Klaassen (1):
arm64: dts: rockchip: fix u2phy1_host status for NanoPi R4S
Kamal Dasu (1):
mmc: sdhci-brcmstb: add cqhci suspend/resume to PM ops
Kashyap Desai (1):
RDMA/bnxt_re: Add missing paranthesis in map_qp_id_to_tbl_indx
Kirill A. Shutemov (1):
mm/page_alloc: fix memory accept before watermarks gets initialized
Kuniyuki Iwashima (2):
ipv6: Fix memleak of nhc_pcpu_rth_output in fib_check_nh_v6_gw().
ipv6: Set errno after ip_fib_metrics_init() in ip6_route_info_create().
Lin Ma (1):
net/neighbor: add missing policy for NDTPA_QUEUE_LENBYTES
MD Danish Anwar (1):
net: ti: icssg-prueth: Add lock to stats
Marek Vasut (2):
soc: imx8m: Remove global soc_uid
soc: imx8m: Use devm_* to simplify probe failure handling
Mario Limonciello (1):
drm/amd/display: Use HW lock mgr for PSR1 when only one eDP
Mark Rutland (7):
KVM: arm64: Unconditionally save+flush host FPSIMD/SVE/SME state
KVM: arm64: Remove host FPSIMD saving for non-protected KVM
KVM: arm64: Remove VHE host restore of CPACR_EL1.ZEN
KVM: arm64: Remove VHE host restore of CPACR_EL1.SMEN
KVM: arm64: Refactor exit handlers
KVM: arm64: Mark some header functions as inline
KVM: arm64: Eagerly switch ZCR_EL{1,2}
Masami Hiramatsu (Google) (2):
tracing: tprobe-events: Fix to clean up tprobe correctly when module unload
tracing: tprobe-events: Fix leakage of module refcount
Max Kellermann (1):
netfs: Call invalidate_cache only if implemented
Maíra Canal (1):
drm/v3d: Don't run jobs that have errors flagged in its fence
Michal Swiatkowski (3):
devlink: fix xa_alloc_cyclic() error handling
dpll: fix xa_alloc_cyclic() error handling
phy: fix xa_alloc_cyclic() error handling
Namjae Jeon (1):
ksmbd: fix incorrect validation for num_aces field of smb_acl
Nikita Zhandarovich (1):
drm/radeon: fix uninitialized size issue in radeon_vce_cs_parse()
Niklas Cassel (1):
ata: libata-core: Add ATA_QUIRK_NO_LPM_ON_ATI for certain Samsung SSDs
Pavel Begunkov (1):
io_uring/net: fix sendzc double notif flush
Peng Fan (1):
soc: imx8m: Unregister cpufreq and soc dev in cleanup path
Phil Elwell (3):
ARM: dts: bcm2711: PL011 UARTs are actually r1p5
arm64: dts: bcm2712: PL011 UARTs are actually r1p5
ARM: dts: bcm2711: Don't mark timer regs unconfigured
Philip Yang (1):
drm/amdkfd: Fix user queue validation on Gfx7/8
Qasim Ijaz (1):
RDMA/mlx5: Handle errors returned from mlx5r_ib_rate()
Quentin Schulz (2):
arm64: dts: rockchip: fix pinmux of UART0 for PX30 Ringneck on Haikou
arm64: dts: rockchip: fix pinmux of UART5 for PX30 Ringneck on Haikou
Rafael Aquini (1):
selftests/mm: run_vmtests.sh: fix half_ufd_size_MB calculation
Raphael S. Carvalho (1):
mm: fix error handling in __filemap_get_folio() with FGP_NOWAIT
Saranya R (1):
soc: qcom: pdr: Fix the potential deadlock
Saravanan Vajravel (1):
RDMA/bnxt_re: Avoid clearing VLAN_ID mask in modify qp path
Shakeel Butt (1):
memcg: drain obj stock on cpu hotplug teardown
Stefan Eichenberger (3):
arm64: dts: freescale: imx8mp-verdin-dahlia: add Microphone Jack to sound card
arm64: dts: freescale: imx8mm-verdin-dahlia: add Microphone Jack to sound card
ARM: dts: imx6qdl-apalis: Fix poweroff on Apalis iMX6
Stefan Wahren (1):
ARM: dts: bcm2711: Fix xHCI power-domain
Sven Eckelmann (1):
batman-adv: Ignore own maximum aggregation size during RX
Tomasz Pakuła (1):
drm/amdgpu/pm: Handle SCLK offset correctly in overdrive for smu 14.0.2
Tomasz Rusinowicz (1):
drm/xe: Fix exporting xe buffers multiple times
Vignesh Raghavendra (1):
net: ethernet: ti: am65-cpsw: Fix NAPI registration sequence
Vincent Mailhol (1):
can: ucan: fix out of bound read in strscpy() source
Wentao Liang (1):
drm/amdgpu/gfx12: correct cleanup of 'me' field with gfx_v12_0_me_fini()
Xianwei Zhao (1):
pmdomain: amlogic: fix T7 ISP secpower
Yao Zi (1):
arm64: dts: rockchip: Remove undocumented sdmmc property from lubancat-1
Ye Bin (1):
proc: fix UAF in proc_get_inode()
Yilin Chen (1):
drm/amd/display: Fix message for support_edp0_on_dp1
Yongjian Sun (1):
libfs: Fix duplicate directory entry in offset_dir_lookup
Zhu Yanjun (1):
RDMA/rxe: Fix the failure of ibv_query_device() and ibv_query_device_ex() tests
Zi Yan (2):
mm/migrate: fix shmem xarray update during migration mm/huge_memory: drop beyond-EOF folios with the right number of refs
qianyi liu (1):
drm/sched: Fix fence reference count leak
Greg Kroah-Hartman
maintainerDocumentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml +1 -1
@@ -170,7 +170,7 @@ allOf: const: renesas,r8a779h0-canfd then: patternProperties: - "^channel[5-7]$": false + "^channel[4-7]$": false else: if: not:
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 12 -SUBLEVEL = 20 +SUBLEVEL = 21 EXTRAVERSION = NAME = Baby Opossum Posse
arch/arm/boot/dts/broadcom/bcm2711-rpi.dtsi +0 -5
@@ -1,7 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 #include "bcm2835-rpi.dtsi" -#include <dt-bindings/power/raspberrypi-power.h> #include <dt-bindings/reset/raspberrypi,firmware-reset.h> / {
@@ -101,7 +100,3 @@ &v3d { &vchiq { interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>; }; - -&xhci { - power-domains = <&power RPI_POWER_DOMAIN_USB>; -};
arch/arm/boot/dts/broadcom/bcm2711.dtsi +6 -6
@@ -134,7 +134,7 @@ uart2: serial@7e201400 { clocks = <&clocks BCM2835_CLOCK_UART>, <&clocks BCM2835_CLOCK_VPU>; clock-names = "uartclk", "apb_pclk"; - arm,primecell-periphid = <0x00241011>; + arm,primecell-periphid = <0x00341011>; status = "disabled"; };
@@ -145,7 +145,7 @@ uart3: serial@7e201600 { clocks = <&clocks BCM2835_CLOCK_UART>, <&clocks BCM2835_CLOCK_VPU>; clock-names = "uartclk", "apb_pclk"; - arm,primecell-periphid = <0x00241011>; + arm,primecell-periphid = <0x00341011>; status = "disabled"; };
@@ -156,7 +156,7 @@ uart4: serial@7e201800 { clocks = <&clocks BCM2835_CLOCK_UART>, <&clocks BCM2835_CLOCK_VPU>; clock-names = "uartclk", "apb_pclk"; - arm,primecell-periphid = <0x00241011>; + arm,primecell-periphid = <0x00341011>; status = "disabled"; };
@@ -167,7 +167,7 @@ uart5: serial@7e201a00 { clocks = <&clocks BCM2835_CLOCK_UART>, <&clocks BCM2835_CLOCK_VPU>; clock-names = "uartclk", "apb_pclk"; - arm,primecell-periphid = <0x00241011>; + arm,primecell-periphid = <0x00341011>; status = "disabled"; };
@@ -451,8 +451,6 @@ IRQ_TYPE_LEVEL_LOW)>, IRQ_TYPE_LEVEL_LOW)>, <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>; - /* This only applies to the ARMv7 stub */ - arm,cpu-registers-not-fw-configured; }; cpus: cpus {
@@ -610,6 +608,7 @@ xhci: usb@7e9c0000 { #address-cells = <1>; #size-cells = <0>; interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>; + power-domains = <&pm BCM2835_POWER_DOMAIN_USB>; /* DWC2 and this IP block share the same USB PHY, * enabling both at the same time results in lockups. * So keep this node disabled and let the bootloader
@@ -1177,6 +1176,7 @@ &txp { }; &uart0 { + arm,primecell-periphid = <0x00341011>; interrupts = <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>; };
arch/arm/boot/dts/broadcom/bcm4709-asus-rt-ac3200.dts +4 -4
@@ -124,19 +124,19 @@ port@0 { }; port@1 { - label = "lan1"; + label = "lan4"; }; port@2 { - label = "lan2"; + label = "lan3"; }; port@3 { - label = "lan3"; + label = "lan2"; }; port@4 { - label = "lan4"; + label = "lan1"; }; }; };
arch/arm/boot/dts/broadcom/bcm47094-asus-rt-ac5300.dts +4 -4
@@ -126,11 +126,11 @@ &srab { ports { port@0 { - label = "lan4"; + label = "wan"; }; port@1 { - label = "lan3"; + label = "lan1"; }; port@2 {
@@ -138,11 +138,11 @@ port@2 { }; port@3 { - label = "lan1"; + label = "lan3"; }; port@4 { - label = "wan"; + label = "lan4"; }; }; };
arch/arm/boot/dts/nxp/imx/imx6qdl-apalis.dtsi +5 -5
@@ -108,6 +108,11 @@ lvds_panel_in: endpoint { }; }; + poweroff { + compatible = "regulator-poweroff"; + cpu-supply = <&vgen2_reg>; + }; + reg_module_3v3: regulator-module-3v3 { compatible = "regulator-fixed"; regulator-always-on;
@@ -236,10 +241,6 @@ &can2 { status = "disabled"; }; -&clks { - fsl,pmic-stby-poweroff; -}; - /* Apalis SPI1 */ &ecspi1 { cs-gpios = <&gpio5 25 GPIO_ACTIVE_LOW>;
@@ -527,7 +528,6 @@ &i2c2 { pmic: pmic@8 { compatible = "fsl,pfuze100"; - fsl,pmic-stby-poweroff; reg = <0x08>; regulators {
arch/arm/mach-davinci/Kconfig +1 -0
@@ -27,6 +27,7 @@ config ARCH_DAVINCI_DA830 config ARCH_DAVINCI_DA850 bool "DA850/OMAP-L138/AM18x based system" + select ARCH_DAVINCI_DA8XX select DAVINCI_CP_INTC config ARCH_DAVINCI_DA8XX
arch/arm/mach-omap1/Kconfig +1 -0
@@ -8,6 +8,7 @@ menuconfig ARCH_OMAP1 select ARCH_OMAP select CLKSRC_MMIO select FORCE_PCI if PCCARD + select GENERIC_IRQ_CHIP select GPIOLIB help Support for older TI OMAP1 (omap7xx, omap15xx or omap16xx)
arch/arm/mach-shmobile/headsmp.S +1 -0
@@ -136,6 +136,7 @@ ENDPROC(shmobile_smp_sleep) .long shmobile_smp_arg - 1b .bss + .align 2 .globl shmobile_smp_mpidr shmobile_smp_mpidr: .space NR_CPUS * 4
arch/arm64/boot/dts/broadcom/bcm2712.dtsi +1 -1
@@ -232,7 +232,7 @@ uart10: serial@7d001000 { interrupts = <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>; clocks = <&clk_uart>, <&clk_vpu>; clock-names = "uartclk", "apb_pclk"; - arm,primecell-periphid = <0x00241011>; + arm,primecell-periphid = <0x00341011>; status = "disabled"; };
arch/arm64/boot/dts/freescale/imx8mm-verdin-dahlia.dtsi +3 -3
@@ -16,10 +16,10 @@ sound_card: sound-card { "Headphone Jack", "HPOUTR", "IN2L", "Line In Jack", "IN2R", "Line In Jack", - "Headphone Jack", "MICBIAS", - "IN1L", "Headphone Jack"; + "Microphone Jack", "MICBIAS", + "IN1L", "Microphone Jack"; simple-audio-card,widgets = - "Microphone", "Headphone Jack", + "Microphone", "Microphone Jack", "Headphone", "Headphone Jack", "Line", "Line In Jack";
arch/arm64/boot/dts/freescale/imx8mp-tqma8mpql.dtsi +4 -12
@@ -1,7 +1,8 @@ // SPDX-License-Identifier: GPL-2.0-or-later OR MIT /* - * Copyright 2021-2022 TQ-Systems GmbH - * Author: Alexander Stein <[email protected]> + * Copyright 2021-2025 TQ-Systems GmbH <[email protected]>, + * D-82229 Seefeld, Germany. + * Author: Alexander Stein */ #include "imx8mp.dtsi"
@@ -23,15 +24,6 @@ reg_vcc3v3: regulator-vcc3v3 { regulator-max-microvolt = <3300000>; regulator-always-on; }; - - /* e-MMC IO, needed for HS modes */ - reg_vcc1v8: regulator-vcc1v8 { - compatible = "regulator-fixed"; - regulator-name = "VCC1V8"; - regulator-min-microvolt = <1800000>; - regulator-max-microvolt = <1800000>; - regulator-always-on; - }; }; &A53_0 {
@@ -197,7 +189,7 @@ &usdhc3 { no-sd; no-sdio; vmmc-supply = <®_vcc3v3>; - vqmmc-supply = <®_vcc1v8>; + vqmmc-supply = <&buck5_reg>; status = "okay"; };
arch/arm64/boot/dts/freescale/imx8mp-verdin-dahlia.dtsi +3 -3
@@ -28,10 +28,10 @@ sound { "Headphone Jack", "HPOUTR", "IN2L", "Line In Jack", "IN2R", "Line In Jack", - "Headphone Jack", "MICBIAS", - "IN1L", "Headphone Jack"; + "Microphone Jack", "MICBIAS", + "IN1L", "Microphone Jack"; simple-audio-card,widgets = - "Microphone", "Headphone Jack", + "Microphone", "Microphone Jack", "Headphone", "Headphone Jack", "Line", "Line In Jack";
arch/arm64/boot/dts/rockchip/px30-ringneck-haikou.dts +12 -0
@@ -194,6 +194,13 @@ sd_card_led_pin: sd-card-led-pin { <3 RK_PB3 RK_FUNC_GPIO &pcfg_pull_none>; }; }; + + uart { + uart5_rts_pin: uart5-rts-pin { + rockchip,pins = + <0 RK_PB5 RK_FUNC_GPIO &pcfg_pull_none>; + }; + }; }; &pwm0 {
@@ -222,10 +229,15 @@ &u2phy_otg { }; &uart0 { + pinctrl-names = "default"; + pinctrl-0 = <&uart0_xfer>; status = "okay"; }; &uart5 { + /* Add pinmux for rts-gpios (uart5_rts_pin) */ + pinctrl-names = "default"; + pinctrl-0 = <&uart5_xfer &uart5_rts_pin>; rts-gpios = <&gpio0 RK_PB5 GPIO_ACTIVE_HIGH>; status = "okay"; };
arch/arm64/boot/dts/rockchip/rk3399-nanopi-r4s.dts +1 -1
@@ -117,7 +117,7 @@ &u2phy0_host { }; &u2phy1_host { - status = "disabled"; + phy-supply = <&vdd_5v>; }; &uart0 {
arch/arm64/boot/dts/rockchip/rk3566-lubancat-1.dts +0 -1
@@ -512,7 +512,6 @@ &sdhci { &sdmmc0 { max-frequency = <150000000>; - supports-sd; bus-width = <4>; cap-mmc-highspeed; cap-sd-highspeed;
arch/arm64/boot/dts/rockchip/rk3588-jaguar.dts +0 -1
@@ -455,7 +455,6 @@ &sdhci { non-removable; pinctrl-names = "default"; pinctrl-0 = <&emmc_bus8 &emmc_cmd &emmc_clk &emmc_data_strobe>; - supports-cqe; vmmc-supply = <&vcc_3v3_s3>; vqmmc-supply = <&vcc_1v8_s3>; status = "okay";
arch/arm64/boot/dts/rockchip/rk3588-tiger.dtsi +0 -1
@@ -367,7 +367,6 @@ &sdhci { non-removable; pinctrl-names = "default"; pinctrl-0 = <&emmc_bus8 &emmc_cmd &emmc_clk &emmc_data_strobe>; - supports-cqe; vmmc-supply = <&vcc_3v3_s3>; vqmmc-supply = <&vcc_1v8_s3>; status = "okay";
arch/arm64/include/asm/kvm_host.h +5 -20
@@ -602,23 +602,13 @@ struct kvm_host_data {struct kvm_cpu_context host_ctxt;/* -* All pointers in this union are hyp VA. +* Hyp VA. * sve_state is only used in pKVM and if system_supports_sve(). */ -union { -struct user_fpsimd_state *fpsimd_state; -struct cpu_sve_state *sve_state; - }; - -union { -/* HYP VA pointer to the host storage for FPMR */ -u64 *fpmr_ptr; -/* -* Used by pKVM only, as it needs to provide storage -* for the host -*/ -u64 fpmr; - }; +struct cpu_sve_state *sve_state; + +/* Used by pKVM only. */ +u64 fpmr;/* Ownership of the FP regs */ enum {
@@ -697,7 +687,6 @@ struct kvm_vcpu_arch {u64 hcr_el2;u64 hcrx_el2;u64 mdcr_el2; -u64 cptr_el2;/* Exception Information */ struct kvm_vcpu_fault_info fault;
@@ -902,10 +891,6 @@ struct kvm_vcpu_arch {/* Save TRBE context if active */ #define DEBUG_STATE_SAVE_TRBE __vcpu_single_flag(iflags, BIT(6)) -/* SVE enabled for host EL0 */ -#define HOST_SVE_ENABLED __vcpu_single_flag(sflags, BIT(0)) -/* SME enabled for EL0 */ -#define HOST_SME_ENABLED __vcpu_single_flag(sflags, BIT(1))/* Physical CPU not in supported_cpus */ #define ON_UNSUPPORTED_CPU __vcpu_single_flag(sflags, BIT(2))/* WFIT instruction trapped */
arch/arm64/kernel/fpsimd.c +0 -25
@@ -1694,31 +1694,6 @@ void fpsimd_signal_preserve_current_state(void)sve_to_fpsimd (current); } -/* -* Called by KVM when entering the guest. -*/ -void fpsimd_kvm_prepare (void ) -{ -if (!system_supports_sve ()) -return ; - -/* -* KVM does not save host SVE state since we can only enter -* the guest from a syscall so the ABI means that only the -* non-saved SVE state needs to be saved. If we have left -* SVE enabled for performance reasons then update the task -* state to be FPSIMD only. -*/ -get_cpu_fpsimd_context (); - -if (test_and_clear_thread_flag (TIF_SVE )) { -sve_to_fpsimd (current); - current->thread.fp_type =FP_STATE_FPSIMD ; - } - -put_cpu_fpsimd_context (); -} -/* * Associate current's FPSIMD context with this cpu * The caller must have ownership of the cpu FPSIMD context before calling
arch/arm64/kvm/arm.c +0 -9
@@ -1577,7 +1577,6 @@ static int kvm_arch_vcpu_ioctl_vcpu_init(struct kvm_vcpu *vcpu, }vcpu_reset_hcr (vcpu); - vcpu->arch.cptr_el2 =kvm_get_reset_cptr_el2 (vcpu);/* * Handle the "start in power-off" case.
@@ -2477,14 +2476,6 @@ static void finalize_init_hyp_mode(void)per_cpu_ptr_nvhe_sym (kvm_host_data, cpu)->sve_state =kern_hyp_va (sve_state); } - }else { -for_each_possible_cpu (cpu) { -struct user_fpsimd_state *fpsimd_state; - - fpsimd_state = &per_cpu_ptr_nvhe_sym (kvm_host_data, cpu)->host_ctxt.fp_regs; -per_cpu_ptr_nvhe_sym (kvm_host_data, cpu)->fpsimd_state = -kern_hyp_va (fpsimd_state); - } } }
arch/arm64/kvm/fpsimd.c +8 -92
121 lines not on this page · raw message
arch/arm64/kvm/hyp/entry.S +5 -0
@@ -44,6 +44,11 @@ alternative_if ARM64_HAS_RAS_EXTN alternative_else_nop_endif mrs x1, isr_el1 cbz x1, 1f + + // Ensure that __guest_enter() always provides a context + // synchronization event so that callers don't need ISBs for anything + // that would usually be synchonized by the ERET. + isb mov x0, #ARM_EXCEPTION_IRQ ret
arch/arm64/kvm/hyp/include/hyp/switch.h +97 -36
208 lines not on this page · raw message
arch/arm64/kvm/hyp/nvhe/hyp-main.c +4 -7
@@ -5,6 +5,7 @@*/ #include <hyp/adjust_pc.h> +#include <hyp/switch.h> #include <asm/pgtable-types.h> #include <asm/kvm_asm.h>
@@ -83,7 +84,7 @@ static void fpsimd_sve_sync(struct kvm_vcpu *vcpu)if (system_supports_sve ())__hyp_sve_restore_host ();else -__fpsimd_restore_state (*host_data_ptr (fpsimd_state)); +__fpsimd_restore_state (host_data_ptr (host_ctxt.fp_regs));if (has_fpmr)write_sysreg_s (*host_data_ptr (fpmr),SYS_FPMR );
@@ -177,7 +178,9 @@ static void handle___kvm_vcpu_run(struct kvm_cpu_context *host_ctxt)pkvm_put_hyp_vcpu (hyp_vcpu); }else {/* The host is fully trusted, run its vCPU directly. */ +fpsimd_lazy_switch_to_guest (host_vcpu); ret =__kvm_vcpu_run (host_vcpu); +fpsimd_lazy_switch_to_host (host_vcpu); } out:
@@ -486,12 +489,6 @@ void handle_trap(struct kvm_cpu_context *host_ctxt)case ESR_ELx_EC_SMC64:handle_host_smc (host_ctxt);break ; -case ESR_ELx_EC_SVE: -cpacr_clear_set (0 , CPACR_ELx_ZEN); -isb (); -sve_cond_update_zcr_vq (sve_vq_from_vl (kvm_host_sve_max_vl) -1 , -SYS_ZCR_EL2 ); -break ;case ESR_ELx_EC_IABT_LOW:case ESR_ELx_EC_DABT_LOW:handle_host_mem_abort (host_ctxt);
arch/arm64/kvm/hyp/nvhe/pkvm.c +0 -29
@@ -28,8 +28,6 @@ static void pvm_init_traps_aa64pfr0(struct kvm_vcpu *vcpu)const u64 feature_ids =pvm_read_id_reg (vcpu,SYS_ID_AA64PFR0_EL1 );u64 hcr_set =HCR_RW ;u64 hcr_clear =0 ; -u64 cptr_set =0 ; -u64 cptr_clear =0 ;/* Protected KVM does not support AArch32 guests. */ BUILD_BUG_ON(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_EL0),
@@ -59,21 +57,10 @@ static void pvm_init_traps_aa64pfr0(struct kvm_vcpu *vcpu)/* Trap AMU */ if (!FIELD_GET (ARM64_FEATURE_MASK (ID_AA64PFR0_EL1_AMU ), feature_ids)) { hcr_clear |=HCR_AMVOFFEN ; - cptr_set |=CPTR_EL2_TAM ; - } - -/* Trap SVE */ -if (!FIELD_GET (ARM64_FEATURE_MASK (ID_AA64PFR0_EL1_SVE ), feature_ids)) { -if (has_hvhe ()) - cptr_clear |= CPACR_ELx_ZEN; -else - cptr_set |=CPTR_EL2_TZ ; } vcpu->arch.hcr_el2 |= hcr_set; vcpu->arch.hcr_el2 &= ~hcr_clear; - vcpu->arch.cptr_el2 |= cptr_set; - vcpu->arch.cptr_el2 &= ~cptr_clear; }/*
@@ -103,7 +90,6 @@ static void pvm_init_traps_aa64dfr0(struct kvm_vcpu *vcpu)const u64 feature_ids =pvm_read_id_reg (vcpu,SYS_ID_AA64DFR0_EL1 );u64 mdcr_set =0 ;u64 mdcr_clear =0 ; -u64 cptr_set =0 ;/* Trap/constrain PMU */ if (!FIELD_GET (ARM64_FEATURE_MASK (ID_AA64DFR0_EL1_PMUVer), feature_ids)) {
@@ -130,21 +116,12 @@ static void pvm_init_traps_aa64dfr0(struct kvm_vcpu *vcpu)if (!FIELD_GET (ARM64_FEATURE_MASK (ID_AA64DFR0_EL1_TraceFilt), feature_ids)) mdcr_set |=MDCR_EL2_TTRF ; -/* Trap Trace */ -if (!FIELD_GET (ARM64_FEATURE_MASK (ID_AA64DFR0_EL1_TraceVer), feature_ids)) { -if (has_hvhe ()) - cptr_set |=CPACR_EL1_TTA ; -else - cptr_set |=CPTR_EL2_TTA ; - } -/* Trap External Trace */ if (!FIELD_GET (ARM64_FEATURE_MASK (ID_AA64DFR0_EL1_ExtTrcBuff), feature_ids)) mdcr_clear |=MDCR_EL2_E2TB_MASK <<MDCR_EL2_E2TB_SHIFT ; vcpu->arch.mdcr_el2 |= mdcr_set; vcpu->arch.mdcr_el2 &= ~mdcr_clear; - vcpu->arch.cptr_el2 |= cptr_set; }/*
@@ -195,10 +172,6 @@ static void pvm_init_trap_regs(struct kvm_vcpu *vcpu)/* Clear res0 and set res1 bits to trap potential new features. */ vcpu->arch.hcr_el2 &= ~(HCR_RES0 ); vcpu->arch.mdcr_el2 &= ~(MDCR_EL2_RES0 ); -if (!has_hvhe ()) { - vcpu->arch.cptr_el2 |=CPTR_NVHE_EL2_RES1 ; - vcpu->arch.cptr_el2 &= ~(CPTR_NVHE_EL2_RES0 ); - } }/*
@@ -579,8 +552,6 @@ int __pkvm_init_vcpu(pkvm_handle_t handle, struct kvm_vcpu *host_vcpu,return ret; } - hyp_vcpu->vcpu.arch.cptr_el2 =kvm_get_reset_cptr_el2 (&hyp_vcpu->vcpu); -return 0 ; }
arch/arm64/kvm/hyp/nvhe/switch.c +74 -60
173 lines not on this page · raw message
arch/arm64/kvm/hyp/vhe/switch.c +8 -13
@@ -309,14 +309,6 @@ static bool kvm_hyp_handle_eret(struct kvm_vcpu *vcpu, u64 *exit_code)return true; } -static void kvm_hyp_save_fpsimd_host (struct kvm_vcpu *vcpu) -{ -__fpsimd_save_state (*host_data_ptr (fpsimd_state)); - -if (kvm_has_fpmr (vcpu->kvm)) - **host_data_ptr (fpmr_ptr) =read_sysreg_s (SYS_FPMR ); -} -static bool kvm_hyp_handle_tlbi_el2 (struct kvm_vcpu *vcpu,u64 *exit_code) {int ret = -EINVAL ;
@@ -431,13 +423,10 @@ static const exit_handler_fn hyp_exit_handlers[] = { [ESR_ELx_EC_MOPS] = kvm_hyp_handle_mops, }; -static const exit_handler_fn *kvm_get_exit_handler_array (struct kvm_vcpu *vcpu) +static inline bool fixup_guest_exit (struct kvm_vcpu *vcpu,u64 *exit_code) { -return hyp_exit_handlers; -} +synchronize_vcpu_pstate (vcpu, exit_code); -static void early_exit_filter (struct kvm_vcpu *vcpu,u64 *exit_code) -{/* * If we were in HYP context on entry, adjust the PSTATE view * so that the usual helpers work correctly.
@@ -457,6 +446,8 @@ static void early_exit_filter(struct kvm_vcpu *vcpu, u64 *exit_code) *vcpu_cpsr (vcpu) &= ~(PSR_MODE_MASK |PSR_MODE32_BIT ); *vcpu_cpsr (vcpu) |= mode; } + +return __fixup_guest_exit (vcpu, exit_code, hyp_exit_handlers); }/* Switch to the guest for VHE systems running in EL2 */
@@ -471,6 +462,8 @@ static int __kvm_vcpu_run_vhe(struct kvm_vcpu *vcpu)sysreg_save_host_state_vhe (host_ctxt); +fpsimd_lazy_switch_to_guest (vcpu); +/* * Note that ARM erratum 1165522 requires us to configure both stage 1 * and stage 2 translation for the guest context before we clear
@@ -495,6 +488,8 @@ static int __kvm_vcpu_run_vhe(struct kvm_vcpu *vcpu)__deactivate_traps (vcpu); +fpsimd_lazy_switch_to_host (vcpu); +sysreg_restore_host_state_vhe (host_ctxt);if (guest_owns_fp_regs ())
arch/riscv/boot/dts/starfive/jh7110-pinfunc.h +1 -1
@@ -89,7 +89,7 @@#define GPOUT_SYS_SDIO1_DATA1 59#define GPOUT_SYS_SDIO1_DATA2 60#define GPOUT_SYS_SDIO1_DATA3 61 -#define GPOUT_SYS_SDIO1_DATA4 63 +#define GPOUT_SYS_SDIO1_DATA4 62#define GPOUT_SYS_SDIO1_DATA5 63#define GPOUT_SYS_SDIO1_DATA6 64#define GPOUT_SYS_SDIO1_DATA7 65
drivers/accel/qaic/qaic_data.c +7 -2
@@ -172,9 +172,10 @@ static void free_slice(struct kref *kref)static int clone_range_of_sgt_for_slice (struct qaic_device *qdev,struct sg_table **sgt_out,struct sg_table *sgt_in,u64 size,u64 offset) { -int total_len, len, nents, offf =0 , offl =0 ;struct scatterlist *sg, *sgn, *sgf, *sgl; +unsigned int len, nents, offf, offl;struct sg_table *sgt; +size_t total_len;int ret, j;/* find out number of relevant nents needed for this mem */
@@ -182,6 +183,8 @@ static int clone_range_of_sgt_for_slice(struct qaic_device *qdev, struct sg_tabl sgf =NULL ; sgl =NULL ; nents =0 ; + offf =0 ; + offl =0 ; size = size ? size :PAGE_SIZE ;for_each_sgtable_dma_sg (sgt_in, sg, j) {
@@ -554,6 +557,7 @@ static bool invalid_sem(struct qaic_sem *sem)static int qaic_validate_req (struct qaic_device *qdev,struct qaic_attach_slice_entry *slice_ent,u32 count,u64 total_size) { +u64 total;int i;for (i =0 ; i < count; i++) {
@@ -563,7 +567,8 @@ static int qaic_validate_req(struct qaic_device *qdev, struct qaic_attach_slice_ invalid_sem(&slice_ent[i].sem2) || invalid_sem(&slice_ent[i].sem3)) return -EINVAL; -if (slice_ent[i].offset + slice_ent[i].size > total_size) +if (check_add_overflow (slice_ent[i].offset, slice_ent[i].size, &total) || + total > total_size)return -EINVAL ; }
drivers/ata/libata-core.c +11 -3
@@ -2845,6 +2845,10 @@ int ata_dev_configure(struct ata_device *dev) (id[ATA_ID_SATA_CAPABILITY] & 0xe) == 0x2) dev->quirks |= ATA_QUIRK_NOLPM; +if (dev->quirks &ATA_QUIRK_NO_LPM_ON_ATI && +ata_dev_check_adapter (dev,PCI_VENDOR_ID_ATI )) + dev->quirks |=ATA_QUIRK_NOLPM ; +if (ap->flags &ATA_FLAG_NO_LPM ) dev->quirks |=ATA_QUIRK_NOLPM ;
@@ -3897,6 +3901,7 @@ static const char * const ata_quirk_names[] = { [__ATA_QUIRK_MAX_SEC_1024] = "maxsec1024", [__ATA_QUIRK_MAX_TRIM_128M] = "maxtrim128m", [__ATA_QUIRK_NO_NCQ_ON_ATI] = "noncqonati", + [__ATA_QUIRK_NO_LPM_ON_ATI] = "nolpmonati", [__ATA_QUIRK_NO_ID_DEV_LOG] = "noiddevlog", [__ATA_QUIRK_NO_LOG_DIR] = "nologdir", [__ATA_QUIRK_NO_FUA] = "nofua",
@@ -4142,13 +4147,16 @@ static const struct ata_dev_quirks_entry __ata_dev_quirks[] = { ATA_QUIRK_ZERO_AFTER_TRIM }, {"Samsung SSD 860*" ,NULL ,ATA_QUIRK_NO_NCQ_TRIM |ATA_QUIRK_ZERO_AFTER_TRIM | - ATA_QUIRK_NO_NCQ_ON_ATI }, +ATA_QUIRK_NO_NCQ_ON_ATI | + ATA_QUIRK_NO_LPM_ON_ATI }, { "Samsung SSD 870*", NULL, ATA_QUIRK_NO_NCQ_TRIM |ATA_QUIRK_ZERO_AFTER_TRIM | - ATA_QUIRK_NO_NCQ_ON_ATI }, +ATA_QUIRK_NO_NCQ_ON_ATI | + ATA_QUIRK_NO_LPM_ON_ATI }, { "SAMSUNG*MZ7LH*", NULL, ATA_QUIRK_NO_NCQ_TRIM |ATA_QUIRK_ZERO_AFTER_TRIM | - ATA_QUIRK_NO_NCQ_ON_ATI, }, +ATA_QUIRK_NO_NCQ_ON_ATI | + ATA_QUIRK_NO_LPM_ON_ATI }, { "FCCT*M500*", NULL, ATA_QUIRK_NO_NCQ_TRIM | ATA_QUIRK_ZERO_AFTER_TRIM },
drivers/dpll/dpll_core.c +1 -1
@@ -505,7 +505,7 @@ dpll_pin_alloc(u64 clock_id, u32 pin_idx, struct module *module,xa_init_flags (&pin->parent_refs,XA_FLAGS_ALLOC ); ret =xa_alloc_cyclic (&dpll_pin_xa, &pin->id, pin, xa_limit_32b, &dpll_pin_xa_id,GFP_KERNEL ); -if (ret) +if (ret <0 ) goto err_xa_alloc;return pin; err_xa_alloc:
drivers/firmware/efi/libstub/randomalloc.c +4 -0
@@ -75,6 +75,10 @@ efi_status_t efi_random_alloc(unsigned long size,if (align <EFI_ALLOC_ALIGN ) align =EFI_ALLOC_ALIGN ; +/* Avoid address 0x0, as it can be mistaken for NULL */ +if (alloc_min ==0 ) + alloc_min = align; + size =round_up (size,EFI_ALLOC_ALIGN );/* count the suitable slots in each memory map entry */
drivers/firmware/imx/imx-scu.c +1 -0
@@ -280,6 +280,7 @@ static int imx_scu_probe(struct platform_device *pdev)return ret; sc_ipc->fast_ipc =of_device_is_compatible (args.np,"fsl,imx8-mu-scu" ); +of_node_put (args.np); num_channel = sc_ipc->fast_ipc ?2 :SCU_MU_CHAN_NUM ;for (i =0 ; i < num_channel; i++) {
drivers/firmware/qcom/qcom_qseecom_uefisecapp.c +9 -9
@@ -814,15 +814,6 @@ static int qcom_uefisecapp_probe(struct auxiliary_device *aux_dev, qcuefi->client = container_of(aux_dev, struct qseecom_client, aux_dev); -auxiliary_set_drvdata (aux_dev, qcuefi); - status =qcuefi_set_reference (qcuefi); -if (status) -return status; - - status =efivars_register (&qcuefi->efivars, &qcom_efivar_ops); -if (status) -qcuefi_set_reference (NULL ); -memset (&pool_config,0 ,sizeof (pool_config)); pool_config.initial_size =SZ_4K ; pool_config.policy =QCOM_TZMEM_POLICY_MULTIPLIER ;
@@ -833,6 +824,15 @@ static int qcom_uefisecapp_probe(struct auxiliary_device *aux_dev,if (IS_ERR (qcuefi->mempool))return PTR_ERR (qcuefi->mempool); +auxiliary_set_drvdata (aux_dev, qcuefi); + status =qcuefi_set_reference (qcuefi); +if (status) +return status; + + status =efivars_register (&qcuefi->efivars, &qcom_efivar_ops); +if (status) +qcuefi_set_reference (NULL ); +return status; }
drivers/firmware/qcom/qcom_scm.c +2 -2
@@ -2054,8 +2054,8 @@ static int qcom_scm_probe(struct platform_device *pdev) __scm->mempool =devm_qcom_tzmem_pool_new (__scm->dev, &pool_config);if (IS_ERR (__scm->mempool)) { -dev_err_probe (__scm->dev,PTR_ERR (__scm->mempool), -"Failed to create the SCM memory pool\n" ); + ret =dev_err_probe (__scm->dev,PTR_ERR (__scm->mempool), +"Failed to create the SCM memory pool\n" ); goto err; }
drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c +1 -1
@@ -2395,7 +2395,7 @@ static int gfx_v12_0_cp_gfx_load_me_microcode_rs64(struct amdgpu_device *adev) (void **)&adev->gfx.me.me_fw_data_ptr);if (r) {dev_err (adev->dev,"(%d) failed to create me data bo\n" , r); -gfx_v12_0_pfp_fini (adev); +gfx_v12_0_me_fini (adev);return r; }
drivers/gpu/drm/amd/amdgpu/gmc_v12_0.c +2 -20
@@ -498,9 +498,6 @@ static void gmc_v12_0_get_vm_pte(struct amdgpu_device *adev, uint64_t *flags) {struct amdgpu_bo *bo = mapping->bo_va->base.bo; -struct amdgpu_device *bo_adev; -bool coherent, is_system; - *flags &= ~AMDGPU_PTE_EXECUTABLE ; *flags |= mapping->flags &AMDGPU_PTE_EXECUTABLE ;
@@ -516,26 +513,11 @@ static void gmc_v12_0_get_vm_pte(struct amdgpu_device *adev, *flags &= ~AMDGPU_PTE_VALID ; } -if (!bo) -return ; - -if (bo->flags & (AMDGPU_GEM_CREATE_COHERENT | -AMDGPU_GEM_CREATE_UNCACHED )) - *flags =AMDGPU_PTE_MTYPE_GFX12 (*flags,MTYPE_UC ); - - bo_adev =amdgpu_ttm_adev (bo->tbo.bdev); - coherent = bo->flags &AMDGPU_GEM_CREATE_COHERENT ; - is_system = bo->tbo.resource && - (bo->tbo.resource->mem_type ==TTM_PL_TT || - bo->tbo.resource->mem_type ==AMDGPU_PL_PREEMPT ); -if (bo && bo->flags &AMDGPU_GEM_CREATE_GFX12_DCC ) *flags |=AMDGPU_PTE_DCC ; -/* WA for HW bug */ -if (is_system || ((bo_adev != adev) && coherent)) - *flags =AMDGPU_PTE_MTYPE_GFX12 (*flags,MTYPE_NC ); - +if (bo && bo->flags &AMDGPU_GEM_CREATE_UNCACHED ) + *flags =AMDGPU_PTE_MTYPE_GFX12 (*flags,MTYPE_UC ); }static unsigned gmc_v12_0_get_vbios_fb_size (struct amdgpu_device *adev)
drivers/gpu/drm/amd/amdgpu/nv.c +10 -10
@@ -78,12 +78,12 @@ static const struct amdgpu_video_codecs nv_video_codecs_encode = {/* Navi1x */ static const struct amdgpu_video_codec_info nv_video_codecs_decode_array[] = { - {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG2 ,4096 ,4096 ,3 )}, - {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4 ,4096 ,4096 ,5 )}, + {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG2 ,1920 ,1088 ,3 )}, + {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4 ,1920 ,1088 ,5 )}, {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC ,4096 ,4096 ,52 )}, - {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VC1 ,4096 ,4096 ,4 )}, + {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VC1 ,1920 ,1088 ,4 )}, {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC ,8192 ,4352 ,186 )}, - {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_JPEG ,4096 ,4096 ,0 )}, + {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_JPEG ,8192 ,8192 ,0 )}, {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VP9 ,8192 ,4352 ,0 )}, };
@@ -104,10 +104,10 @@ static const struct amdgpu_video_codecs sc_video_codecs_encode = { };static const struct amdgpu_video_codec_info sc_video_codecs_decode_array_vcn0[] = { - {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG2 ,4096 ,4096 ,3 )}, - {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4 ,4096 ,4096 ,5 )}, + {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG2 ,1920 ,1088 ,3 )}, + {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4 ,1920 ,1088 ,5 )}, {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC ,4096 ,4096 ,52 )}, - {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VC1 ,4096 ,4096 ,4 )}, + {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VC1 ,1920 ,1088 ,4 )}, {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC ,8192 ,4352 ,186 )}, {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_JPEG ,16384 ,16384 ,0 )}, {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VP9 ,8192 ,4352 ,0 )},
@@ -115,10 +115,10 @@ static const struct amdgpu_video_codec_info sc_video_codecs_decode_array_vcn0[] };static const struct amdgpu_video_codec_info sc_video_codecs_decode_array_vcn1[] = { - {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG2 ,4096 ,4096 ,3 )}, - {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4 ,4096 ,4096 ,5 )}, + {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG2 ,1920 ,1088 ,3 )}, + {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4 ,1920 ,1088 ,5 )}, {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC ,4096 ,4096 ,52 )}, - {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VC1 ,4096 ,4096 ,4 )}, + {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VC1 ,1920 ,1088 ,4 )}, {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC ,8192 ,4352 ,186 )}, {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_JPEG ,16384 ,16384 ,0 )}, {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VP9 ,8192 ,4352 ,0 )},
drivers/gpu/drm/amd/amdgpu/soc15.c +10 -11
@@ -103,12 +103,11 @@ static const struct amdgpu_video_codecs vega_video_codecs_encode =/* Vega */ static const struct amdgpu_video_codec_info vega_video_codecs_decode_array[] = { - {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG2 ,4096 ,4096 ,3 )}, - {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4 ,4096 ,4096 ,5 )}, + {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG2 ,1920 ,1088 ,3 )}, + {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4 ,1920 ,1088 ,5 )}, {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC ,4096 ,4096 ,52 )}, - {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VC1 ,4096 ,4096 ,4 )}, + {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VC1 ,1920 ,1088 ,4 )}, {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC ,4096 ,4096 ,186 )}, - {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_JPEG ,4096 ,4096 ,0 )}, }; static const struct amdgpu_video_codecs vega_video_codecs_decode =
@@ -120,12 +119,12 @@ static const struct amdgpu_video_codecs vega_video_codecs_decode =/* Raven */ static const struct amdgpu_video_codec_info rv_video_codecs_decode_array[] = { - {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG2 ,4096 ,4096 ,3 )}, - {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4 ,4096 ,4096 ,5 )}, + {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG2 ,1920 ,1088 ,3 )}, + {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4 ,1920 ,1088 ,5 )}, {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC ,4096 ,4096 ,52 )}, - {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VC1 ,4096 ,4096 ,4 )}, + {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VC1 ,1920 ,1088 ,4 )}, {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC ,4096 ,4096 ,186 )}, - {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_JPEG ,4096 ,4096 ,0 )}, + {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_JPEG ,8192 ,8192 ,0 )}, {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VP9 ,4096 ,4096 ,0 )}, };
@@ -138,10 +137,10 @@ static const struct amdgpu_video_codecs rv_video_codecs_decode =/* Renoir, Arcturus */ static const struct amdgpu_video_codec_info rn_video_codecs_decode_array[] = { - {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG2 ,4096 ,4096 ,3 )}, - {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4 ,4096 ,4096 ,5 )}, + {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG2 ,1920 ,1088 ,3 )}, + {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4 ,1920 ,1088 ,5 )}, {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC ,4096 ,4096 ,52 )}, - {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VC1 ,4096 ,4096 ,4 )}, + {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VC1 ,1920 ,1088 ,4 )}, {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC ,8192 ,4352 ,186 )}, {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_JPEG ,16384 ,16384 ,0 )}, {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VP9 ,8192 ,4352 ,0 )},
drivers/gpu/drm/amd/amdgpu/vi.c +18 -25
81 lines not on this page · raw message
drivers/gpu/drm/amd/amdkfd/kfd_queue.c +11 -1
@@ -233,6 +233,7 @@ void kfd_queue_buffer_put(struct amdgpu_bo **bo)int kfd_queue_acquire_buffers (struct kfd_process_device *pdd,struct queue_properties *properties) {struct kfd_topology_device *topo_dev; +u64 expected_queue_size;struct amdgpu_vm *vm;u32 total_cwsr_size;int err;
@@ -241,6 +242,15 @@ int kfd_queue_acquire_buffers(struct kfd_process_device *pdd, struct queue_propeif (!topo_dev)return -EINVAL ; +/* AQL queues on GFX7 and GFX8 appear twice their actual size */ +if (properties->type ==KFD_QUEUE_TYPE_COMPUTE && + properties->format ==KFD_QUEUE_FORMAT_AQL && + topo_dev->node_props.gfx_target_version >=70000 && + topo_dev->node_props.gfx_target_version <90000 ) + expected_queue_size = properties->queue_size /2 ; +else + expected_queue_size = properties->queue_size; + vm =drm_priv_to_vm (pdd->drm_priv); err =amdgpu_bo_reserve (vm->root.bo, false);if (err)
@@ -255,7 +265,7 @@ int kfd_queue_acquire_buffers(struct kfd_process_device *pdd, struct queue_prope goto out_err_unreserve; err =kfd_queue_buffer_get (vm, (void *)properties->queue_address, - &properties->ring_bo, properties->queue_size); + &properties->ring_bo, expected_queue_size);if (err) goto out_err_unreserve;
drivers/gpu/drm/amd/amdkfd/kfd_svm.c +1 -7
@@ -1276,13 +1276,7 @@ svm_range_get_pte_flags(struct kfd_node *node,break ;case IP_VERSION (12 ,0 ,0 ):case IP_VERSION (12 ,0 ,1 ): -if (domain ==SVM_RANGE_VRAM_DOMAIN ) { -if (bo_node != node) - mapping_flags |=AMDGPU_VM_MTYPE_NC ; - }else { - mapping_flags |= coherent ? -AMDGPU_VM_MTYPE_UC :AMDGPU_VM_MTYPE_NC ; - } + mapping_flags |=AMDGPU_VM_MTYPE_NC ;break ;default : mapping_flags |= coherent ?
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +1 -1
@@ -1720,7 +1720,7 @@ static void retrieve_dmi_info(struct amdgpu_display_manager *dm, struct dc_init_ }if (quirk_entries.support_edp0_on_dp1) { init_data->flags.support_edp0_on_dp1 = true; -drm_info (dev,"aux_hpd_discon_quirk attached\n" ); +drm_info (dev,"support_edp0_on_dp1 attached\n" ); } }
drivers/gpu/drm/amd/display/dc/dce/dmub_hw_lock_mgr.c +11 -0
@@ -69,5 +69,16 @@ bool should_use_dmub_lock(struct dc_link *link)if (link->replay_settings.replay_feature_enabled)return true; +/* only use HW lock for PSR1 on single eDP */ +if (link->psr_settings.psr_version ==DC_PSR_VERSION_1 ) { +struct dc_link *edp_links[MAX_NUM_EDP ]; +int edp_num; + +dc_get_edp_links (link->dc, edp_links, &edp_num); + +if (edp_num ==1 ) +return true; + } +return false; }
drivers/gpu/drm/amd/pm/amdgpu_pm.c +2 -0
@@ -2493,6 +2493,8 @@ static int default_attr_update(struct amdgpu_device *adev, struct amdgpu_device_case IP_VERSION (11 ,0 ,1 ):case IP_VERSION (11 ,0 ,2 ):case IP_VERSION (11 ,0 ,3 ): +case IP_VERSION (12 ,0 ,0 ): +case IP_VERSION (12 ,0 ,1 ): *states =ATTR_STATE_SUPPORTED ;break ;default :
drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c +53 -41
130 lines not on this page · raw message
drivers/gpu/drm/radeon/radeon_vce.c +1 -1
@@ -557,7 +557,7 @@ int radeon_vce_cs_parse(struct radeon_cs_parser *p) {int session_idx =-1 ;bool destroyed = false, created = false, allocated = false; -uint32_t tmp, handle =0 ; +uint32_t tmp =0 , handle =0 ;uint32_t *size = &tmp;int i, r =0 ;
drivers/gpu/drm/scheduler/sched_entity.c +9 -2
@@ -259,9 +259,16 @@ static void drm_sched_entity_kill(struct drm_sched_entity *entity)struct drm_sched_fence *s_fence = job->s_fence;dma_fence_get (&s_fence->finished); -if (!prev ||dma_fence_add_callback (prev, &job->finish_cb, - drm_sched_entity_kill_jobs_cb)) +if (!prev || +dma_fence_add_callback (prev, &job->finish_cb, + drm_sched_entity_kill_jobs_cb)) { +/* +* Adding callback above failed. +* dma_fence_put() checks for NULL. +*/ +dma_fence_put (prev);drm_sched_entity_kill_jobs_cb (NULL , &job->finish_cb); + } prev = &s_fence->finished; }
drivers/gpu/drm/v3d/v3d_sched.c +8 -1
@@ -319,11 +319,15 @@ v3d_tfu_job_run(struct drm_sched_job *sched_job)struct drm_device *dev = &v3d->drm;struct dma_fence *fence; +if (unlikely (job->base.base.s_fence->finished.error)) +return NULL ; + + v3d->tfu_job = job; + fence =v3d_fence_create (v3d,V3D_TFU );if (IS_ERR (fence))return NULL ; - v3d->tfu_job = job;if (job->base.irq_fence)dma_fence_put (job->base.irq_fence); job->base.irq_fence =dma_fence_get (fence);
@@ -361,6 +365,9 @@ v3d_csd_job_run(struct drm_sched_job *sched_job)struct dma_fence *fence;int i, csd_cfg0_reg; +if (unlikely (job->base.base.s_fence->finished.error)) +return NULL ; + v3d->csd_job = job;v3d_invalidate_caches (v3d);
drivers/gpu/drm/xe/xe_bo.h +0 -2
@@ -314,7 +314,6 @@ static inline unsigned int xe_sg_segment_size(struct device *dev)#define i915_gem_object_flush_if_display (obj) ((void)(obj)) -#if IS_ENABLED (CONFIG_DRM_XE_KUNIT_TEST )/** * xe_bo_is_mem_type - Whether the bo currently resides in the given * TTM memory type
@@ -329,4 +328,3 @@ static inline bool xe_bo_is_mem_type(struct xe_bo *bo, u32 mem_type) return bo->ttm.resource->mem_type == mem_type; }#endif -#endif
drivers/gpu/drm/xe/xe_dma_buf.c +1 -1
@@ -58,7 +58,7 @@ static int xe_dma_buf_pin(struct dma_buf_attachment *attach)* 1) Avoid pinning in a placement not accessible to some importers. * 2) Pinning in VRAM requires PIN accounting which is a to-do. */ -if (xe_bo_is_pinned (bo) && bo->ttm.resource->placement !=XE_PL_TT ) { +if (xe_bo_is_pinned (bo) && !xe_bo_is_mem_type (bo,XE_PL_TT )) {drm_dbg (&xe->drm,"Can't migrate pinned bo for dma-buf pin.\n" );return -EINVAL ; }
drivers/gpu/host1x/dev.c +6 -0
@@ -367,6 +367,10 @@ static bool host1x_wants_iommu(struct host1x *host1x)return true; } +/* +* Returns ERR_PTR on failure, NULL if the translation is IDENTITY, otherwise a +* valid paging domain. +*/ static struct iommu_domain *host1x_iommu_attach (struct host1x *host) {struct iommu_domain *domain =iommu_get_domain_for_dev (host->dev);
@@ -391,6 +395,8 @@ static struct iommu_domain *host1x_iommu_attach(struct host1x *host)* Similarly, if host1x is already attached to an IOMMU (via the DMA * API), don't try to attach again. */ +if (domain && domain->type ==IOMMU_DOMAIN_IDENTITY ) + domain =NULL ;if (!host1x_wants_iommu (host) || domain)return domain;
drivers/i2c/busses/i2c-omap.c +7 -19
@@ -1048,23 +1048,6 @@ static int omap_i2c_transmit_data(struct omap_i2c_dev *omap, u8 num_bytes,return 0 ; } -static irqreturn_t -omap_i2c_isr (int irq,void *dev_id) -{ -struct omap_i2c_dev *omap = dev_id; -irqreturn_t ret =IRQ_HANDLED ; -u16 mask; -u16 stat; - - stat =omap_i2c_read_reg (omap,OMAP_I2C_STAT_REG ); - mask =omap_i2c_read_reg (omap,OMAP_I2C_IE_REG ) & ~OMAP_I2C_STAT_NACK ; - -if (stat & mask) - ret =IRQ_WAKE_THREAD ; - -return ret; -} -static int omap_i2c_xfer_data (struct omap_i2c_dev *omap) {u16 bits;
@@ -1095,8 +1078,13 @@ static int omap_i2c_xfer_data(struct omap_i2c_dev *omap) }if (stat &OMAP_I2C_STAT_NACK ) { - err |=OMAP_I2C_STAT_NACK ; + omap->cmd_err |=OMAP_I2C_STAT_NACK ;omap_i2c_ack_stat (omap,OMAP_I2C_STAT_NACK ); + +if (!(stat & ~OMAP_I2C_STAT_NACK )) { + err = -EAGAIN ; +break ; + } }if (stat &OMAP_I2C_STAT_AL ) {
@@ -1472,7 +1460,7 @@ omap_i2c_probe(struct platform_device *pdev) IRQF_NO_SUSPEND, pdev->name, omap); else r =devm_request_threaded_irq (&pdev->dev, omap->irq, - omap_i2c_isr, omap_i2c_isr_thread, +NULL , omap_i2c_isr_thread,IRQF_NO_SUSPEND |IRQF_ONESHOT , pdev->name, omap);
drivers/infiniband/hw/bnxt_re/qplib_fp.c +0 -2
@@ -1216,8 +1216,6 @@ static void __modify_flags_from_init_state(struct bnxt_qplib_qp *qp) qp->path_mtu =CMDQ_MODIFY_QP_PATH_MTU_MTU_2048 ; } - qp->modify_flags &= - ~CMDQ_MODIFY_QP_MODIFY_MASK_VLAN_ID ;/* Bono FW require the max_dest_rd_atomic to be >= 1 */ if (qp->max_dest_rd_atomic <1 ) qp->max_dest_rd_atomic =1 ;
drivers/infiniband/hw/bnxt_re/qplib_rcfw.h +2 -1
@@ -283,9 +283,10 @@ int bnxt_qplib_deinit_rcfw(struct bnxt_qplib_rcfw *rcfw);int bnxt_qplib_init_rcfw (struct bnxt_qplib_rcfw *rcfw,struct bnxt_qplib_ctx *ctx,int is_virtfn);void bnxt_qplib_mark_qp_error (void *qp_handle); +static inline u32 map_qp_id_to_tbl_indx (u32 qid,struct bnxt_qplib_rcfw *rcfw) {/* Last index of the qp_tbl is for QP1 ie. qp_tbl_size - 1*/ -return (qid ==1 ) ? rcfw->qp_tbl_size -1 : qid % rcfw->qp_tbl_size -2 ; +return (qid ==1 ) ? rcfw->qp_tbl_size -1 : (qid % (rcfw->qp_tbl_size -2 )); }#endif /* __BNXT_QPLIB_RCFW_H__ */
drivers/infiniband/hw/hns/hns_roce_alloc.c +3 -1
@@ -175,8 +175,10 @@ void hns_roce_cleanup_bitmap(struct hns_roce_dev *hr_dev)if (hr_dev->caps.flags &HNS_ROCE_CAP_FLAG_XRC )ida_destroy (&hr_dev->xrcd_ida.ida); -if (hr_dev->caps.flags &HNS_ROCE_CAP_FLAG_SRQ ) +if (hr_dev->caps.flags &HNS_ROCE_CAP_FLAG_SRQ ) {ida_destroy (&hr_dev->srq_table.srq_ida.ida); +xa_destroy (&hr_dev->srq_table.xa); + }hns_roce_cleanup_qp_table (hr_dev);hns_roce_cleanup_cq_table (hr_dev);ida_destroy (&hr_dev->mr_table.mtpt_ida.ida);
drivers/infiniband/hw/hns/hns_roce_cq.c +1 -0
@@ -537,5 +537,6 @@ void hns_roce_cleanup_cq_table(struct hns_roce_dev *hr_dev)for (i =0 ; i <HNS_ROCE_CQ_BANK_NUM ; i++)ida_destroy (&hr_dev->cq_table.bank[i].ida); +xa_destroy (&hr_dev->cq_table.array);mutex_destroy (&hr_dev->cq_table.bank_mutex); }
drivers/infiniband/hw/hns/hns_roce_hem.c +15 -1
@@ -1361,6 +1361,11 @@ static int hem_list_alloc_root_bt(struct hns_roce_dev *hr_dev,return ret; } +/* This is the bottom bt pages number of a 100G MR on 4K OS, assuming +* the bt page size is not expanded by cal_best_bt_pg_sz() +*/ +#define RESCHED_LOOP_CNT_THRESHOLD_ON_4K 12800 +/* construct the base address table and link them by address hop config */ int hns_roce_hem_list_request(struct hns_roce_dev *hr_dev, struct hns_roce_hem_list *hem_list,
@@ -1369,6 +1374,7 @@ int hns_roce_hem_list_request(struct hns_roce_dev *hr_dev, {const struct hns_roce_buf_region *r;int ofs, end; +int loop;int unit;int ret;int i;
@@ -1386,7 +1392,10 @@ int hns_roce_hem_list_request(struct hns_roce_dev *hr_dev,continue ; end = r->offset + r->count; -for (ofs = r->offset; ofs < end; ofs += unit) { +for (ofs = r->offset, loop =1 ; ofs < end; ofs += unit, loop++) { +if (!(loop %RESCHED_LOOP_CNT_THRESHOLD_ON_4K )) +cond_resched (); + ret =hem_list_alloc_mid_bt (hr_dev, r, unit, ofs, hem_list->mid_bt[i], &hem_list->btm_bt);
@@ -1443,9 +1452,14 @@ void *hns_roce_hem_list_find_mtt(struct hns_roce_dev *hr_dev,struct list_head *head = &hem_list->btm_bt;struct hns_roce_hem_item *hem, *temp_hem;void *cpu_base =NULL ; +int loop =1 ;int nr =0 ;list_for_each_entry_safe (hem, temp_hem, head, sibling) { +if (!(loop %RESCHED_LOOP_CNT_THRESHOLD_ON_4K )) +cond_resched (); + loop++; +if (hem_list_page_is_in_range (hem, offset)) { nr = offset - hem->start; cpu_base = hem->addr + nr *BA_BYTE_LEN ;
drivers/infiniband/hw/hns/hns_roce_main.c +1 -1
@@ -183,7 +183,7 @@ static int hns_roce_query_device(struct ib_device *ib_dev,IB_DEVICE_RC_RNR_NAK_GEN ; props->max_send_sge = hr_dev->caps.max_sq_sg; props->max_recv_sge = hr_dev->caps.max_rq_sg; - props->max_sge_rd =1 ; + props->max_sge_rd = hr_dev->caps.max_sq_sg; props->max_cq = hr_dev->caps.num_cqs; props->max_cqe = hr_dev->caps.max_cqes; props->max_mr = hr_dev->caps.num_mtpts;
drivers/infiniband/hw/hns/hns_roce_qp.c +11 -9
@@ -868,12 +868,14 @@ static int alloc_user_qp_db(struct hns_roce_dev *hr_dev,struct hns_roce_ib_create_qp *ucmd, struct hns_roce_ib_create_qp_resp *resp) { + bool has_sdb = user_qp_has_sdb(hr_dev, init_attr, udata, resp, ucmd);struct hns_roce_ucontext *uctx =rdma_udata_to_drv_context (udata, struct hns_roce_ucontext, ibucontext); +bool has_rdb =user_qp_has_rdb (hr_dev, init_attr, udata, resp);struct ib_device *ibdev = &hr_dev->ib_dev;int ret; -if (user_qp_has_sdb (hr_dev, init_attr, udata, resp, ucmd)) { +if (has_sdb) { ret =hns_roce_db_map_user (uctx, ucmd->sdb_addr, &hr_qp->sdb);if (ret) { ibdev_err(ibdev,
@@ -884,7 +886,7 @@ static int alloc_user_qp_db(struct hns_roce_dev *hr_dev, hr_qp->en_flags |=HNS_ROCE_QP_CAP_SQ_RECORD_DB ; } -if (user_qp_has_rdb (hr_dev, init_attr, udata, resp)) { +if (has_rdb) { ret =hns_roce_db_map_user (uctx, ucmd->db_addr, &hr_qp->rdb);if (ret) { ibdev_err(ibdev,
@@ -898,7 +900,7 @@ static int alloc_user_qp_db(struct hns_roce_dev *hr_dev,return 0 ; err_sdb: -if (hr_qp->en_flags &HNS_ROCE_QP_CAP_SQ_RECORD_DB ) +if (has_sdb)hns_roce_db_unmap_user (uctx, &hr_qp->sdb); err_out:return ret;
@@ -1119,24 +1121,23 @@ static int set_qp_param(struct hns_roce_dev *hr_dev, struct hns_roce_qp *hr_qp, ibucontext); hr_qp->config = uctx->config; ret =set_user_sq_size (hr_dev, &init_attr->cap, hr_qp, ucmd); -if (ret) +if (ret) {ibdev_err (ibdev,"failed to set user SQ size, ret = %d.\n" , ret); +return ret; + } ret =set_congest_param (hr_dev, hr_qp, ucmd); -if (ret) -return ret; }else {if (hr_dev->pci_dev->revision >=PCI_REVISION_ID_HIP09 ) hr_qp->config =HNS_ROCE_EXSGE_FLAGS ; +default_congest_type (hr_dev, hr_qp); ret =set_kernel_sq_size (hr_dev, &init_attr->cap, hr_qp);if (ret)ibdev_err (ibdev,"failed to set kernel SQ size, ret = %d.\n" , ret); - -default_congest_type (hr_dev, hr_qp); }return ret;
@@ -1219,7 +1220,7 @@ static int hns_roce_create_qp_common(struct hns_roce_dev *hr_dev, min(udata->outlen, sizeof(resp)));if (ret) {ibdev_err (ibdev,"copy qp resp failed!\n" ); - goto err_store; + goto err_flow_ctrl; } }
@@ -1602,6 +1603,7 @@ void hns_roce_cleanup_qp_table(struct hns_roce_dev *hr_dev)for (i =0 ; i <HNS_ROCE_QP_BANK_NUM ; i++)ida_destroy (&hr_dev->qp_table.bank[i].ida);xa_destroy (&hr_dev->qp_table.dip_xa); +xa_destroy (&hr_dev->qp_table_xa);mutex_destroy (&hr_dev->qp_table.bank_mutex);mutex_destroy (&hr_dev->qp_table.scc_mutex); }
drivers/infiniband/hw/mlx5/ah.c +9 -5
@@ -50,11 +50,12 @@ static __be16 mlx5_ah_get_udp_sport(const struct mlx5_ib_dev *dev,return sport; } -static void create_ib_ah (struct mlx5_ib_dev *dev,struct mlx5_ib_ah *ah, +static int create_ib_ah (struct mlx5_ib_dev *dev,struct mlx5_ib_ah *ah,struct rdma_ah_init_attr *init_attr) {struct rdma_ah_attr *ah_attr = init_attr->ah_attr;enum ib_gid_type gid_type; +int rate_val;if (rdma_ah_get_ah_flags (ah_attr) &IB_AH_GRH ) {const struct ib_global_route *grh =rdma_ah_read_grh (ah_attr);
@@ -67,8 +68,10 @@ static void create_ib_ah(struct mlx5_ib_dev *dev, struct mlx5_ib_ah *ah, ah->av.tclass = grh->traffic_class; } - ah->av.stat_rate_sl = - (mlx5r_ib_rate (dev,rdma_ah_get_static_rate (ah_attr)) <<4 ); + rate_val =mlx5r_ib_rate (dev,rdma_ah_get_static_rate (ah_attr)); +if (rate_val <0 ) +return rate_val; + ah->av.stat_rate_sl = rate_val <<4 ;if (ah_attr->type ==RDMA_AH_ATTR_TYPE_ROCE ) {if (init_attr->xmit_slave)
@@ -89,6 +92,8 @@ static void create_ib_ah(struct mlx5_ib_dev *dev, struct mlx5_ib_ah *ah, ah->av.fl_mlid =rdma_ah_get_path_bits (ah_attr) &0x7f ; ah->av.stat_rate_sl |= (rdma_ah_get_sl (ah_attr) &0xf ); } + +return 0 ; } int mlx5_ib_create_ah(struct ib_ah *ibah, struct rdma_ah_init_attr *init_attr,
@@ -121,8 +126,7 @@ int mlx5_ib_create_ah(struct ib_ah *ibah, struct rdma_ah_init_attr *init_attr,return err; } -create_ib_ah (dev, ah, init_attr); -return 0 ; +return create_ib_ah (dev, ah, init_attr); }int mlx5_ib_query_ah (struct ib_ah *ibah,struct rdma_ah_attr *ah_attr)
drivers/infiniband/sw/rxe/rxe.c +6 -19
@@ -38,10 +38,8 @@ void rxe_dealloc(struct ib_device *ib_dev) }/* initialize rxe device parameters */ -static void rxe_init_device_param (struct rxe_dev *rxe) +static void rxe_init_device_param (struct rxe_dev *rxe,struct net_device *ndev) { -struct net_device *ndev; - rxe->max_inline_data =RXE_MAX_INLINE_DATA ; rxe->attr.vendor_id =RXE_VENDOR_ID ;
@@ -74,15 +72,9 @@ static void rxe_init_device_param(struct rxe_dev *rxe) rxe->attr.max_pkeys =RXE_MAX_PKEYS ; rxe->attr.local_ca_ack_delay =RXE_LOCAL_CA_ACK_DELAY ; - ndev =rxe_ib_device_get_netdev (&rxe->ib_dev); -if (!ndev) -return ; -addrconf_addr_eui48 ((unsigned char *)&rxe->attr.sys_image_guid, ndev->dev_addr); -dev_put (ndev); - rxe->max_ucontext =RXE_MAX_UCONTEXT ; }
@@ -115,18 +107,13 @@ static void rxe_init_port_param(struct rxe_port *port)/* initialize port state, note IB convention that HCA ports are always * numbered from 1 */ -static void rxe_init_ports (struct rxe_dev *rxe) +static void rxe_init_ports (struct rxe_dev *rxe,struct net_device *ndev) {struct rxe_port *port = &rxe->port; -struct net_device *ndev;rxe_init_port_param (port); - ndev =rxe_ib_device_get_netdev (&rxe->ib_dev); -if (!ndev) -return ;addrconf_addr_eui48 ((unsigned char *)&port->port_guid, ndev->dev_addr); -dev_put (ndev);spin_lock_init (&port->port_lock); }
@@ -144,12 +131,12 @@ static void rxe_init_pools(struct rxe_dev *rxe) }/* initialize rxe device state */ -static void rxe_init (struct rxe_dev *rxe) +static void rxe_init (struct rxe_dev *rxe,struct net_device *ndev) {/* init default device parameters */ -rxe_init_device_param (rxe); +rxe_init_device_param (rxe, ndev); -rxe_init_ports (rxe); +rxe_init_ports (rxe, ndev);rxe_init_pools (rxe);/* init pending mmap list */
@@ -184,7 +171,7 @@ void rxe_set_mtu(struct rxe_dev *rxe, unsigned int ndev_mtu)int rxe_add (struct rxe_dev *rxe,unsigned int mtu,const char *ibdev_name,struct net_device *ndev) { -rxe_init (rxe); +rxe_init (rxe, ndev);rxe_set_mtu (rxe, mtu);return rxe_register_device (rxe, ibdev_name, ndev);
drivers/mmc/host/atmel-mci.c +3 -1
@@ -2499,8 +2499,10 @@ static int atmci_probe(struct platform_device *pdev)/* Get MCI capabilities and set operations according to it */ atmci_get_cap (host); ret =atmci_configure_dma (host); -if (ret == -EPROBE_DEFER ) +if (ret == -EPROBE_DEFER ) { +clk_disable_unprepare (host->mck); goto err_dma_probe_defer; + }if (ret ==0 ) { host->prepare_data = &atmci_prepare_data_dma; host->submit_data = &atmci_submit_data_dma;
drivers/mmc/host/sdhci-brcmstb.c +10 -0
@@ -503,8 +503,15 @@ static int sdhci_brcmstb_suspend(struct device *dev)struct sdhci_host *host =dev_get_drvdata (dev);struct sdhci_pltfm_host *pltfm_host =sdhci_priv (host);struct sdhci_brcmstb_priv *priv =sdhci_pltfm_priv (pltfm_host); +int ret;clk_disable_unprepare (priv->base_clk); +if (host->mmc->caps2 &MMC_CAP2_CQE ) { + ret =cqhci_suspend (host->mmc); +if (ret) +return ret; + } +return sdhci_pltfm_suspend (dev); }
@@ -529,6 +536,9 @@ static int sdhci_brcmstb_resume(struct device *dev) ret = clk_set_rate(priv->base_clk, priv->base_freq_hz); } +if (host->mmc->caps2 &MMC_CAP2_CQE ) + ret =cqhci_resume (host->mmc); +return ret; }#endif
drivers/net/can/flexcan/flexcan-core.c +15 -3
@@ -2260,14 +2260,19 @@ static int __maybe_unused flexcan_suspend(struct device *device)flexcan_chip_interrupts_disable (dev); + err =flexcan_transceiver_disable (priv); +if (err) +return err; + err =pinctrl_pm_select_sleep_state (device);if (err)return err; }netif_stop_queue (dev);netif_device_detach (dev); + + priv->can.state =CAN_STATE_SLEEPING ; } - priv->can.state =CAN_STATE_SLEEPING ;return 0 ; }
@@ -2278,7 +2283,6 @@ static int __maybe_unused flexcan_resume(struct device *device)struct flexcan_priv *priv =netdev_priv (dev);int err; - priv->can.state =CAN_STATE_ERROR_ACTIVE ;if (netif_running (dev)) {netif_device_attach (dev);netif_start_queue (dev);
@@ -2292,12 +2296,20 @@ static int __maybe_unused flexcan_resume(struct device *device)if (err)return err; - err =flexcan_chip_start (dev); + err =flexcan_transceiver_enable (priv);if (err)return err; + err =flexcan_chip_start (dev); +if (err) { +flexcan_transceiver_disable (priv); +return err; + } +flexcan_chip_interrupts_enable (dev); } + + priv->can.state =CAN_STATE_ERROR_ACTIVE ; }return 0 ;
drivers/net/can/rcar/rcar_canfd.c +11 -17
@@ -787,22 +787,14 @@ static void rcar_canfd_configure_controller(struct rcar_canfd_global *gpriv) }static void rcar_canfd_configure_afl_rules (struct rcar_canfd_global *gpriv, -u32 ch) +u32 ch,u32 rule_entry) { -u32 cfg; -int offset, start, page, num_rules =RCANFD_CHANNEL_NUMRULES ; +int offset, page, num_rules =RCANFD_CHANNEL_NUMRULES ; +u32 rule_entry_index = rule_entry %16 ;u32 ridx = ch +RCANFD_RFFIFO_IDX ; -if (ch ==0 ) { - start =0 ;/* Channel 0 always starts from 0th rule */ - }else { -/* Get number of Channel 0 rules and adjust */ - cfg =rcar_canfd_read (gpriv->base,RCANFD_GAFLCFG (ch)); - start =RCANFD_GAFLCFG_GETRNC (gpriv,0 , cfg); - } -/* Enable write access to entry */ - page =RCANFD_GAFL_PAGENUM (start); + page =RCANFD_GAFL_PAGENUM (rule_entry);rcar_canfd_set_bit (gpriv->base,RCANFD_GAFLECTR , (RCANFD_GAFLECTR_AFLPN (gpriv, page) |RCANFD_GAFLECTR_AFLDAE ));
@@ -818,13 +810,13 @@ static void rcar_canfd_configure_afl_rules(struct rcar_canfd_global *gpriv, offset =RCANFD_C_GAFL_OFFSET ;/* Accept all IDs */ -rcar_canfd_write (gpriv->base,RCANFD_GAFLID (offset, start),0 ); +rcar_canfd_write (gpriv->base,RCANFD_GAFLID (offset, rule_entry_index),0 );/* IDE or RTR is not considered for matching */ -rcar_canfd_write (gpriv->base,RCANFD_GAFLM (offset, start),0 ); +rcar_canfd_write (gpriv->base,RCANFD_GAFLM (offset, rule_entry_index),0 );/* Any data length accepted */ -rcar_canfd_write (gpriv->base,RCANFD_GAFLP0 (offset, start),0 ); +rcar_canfd_write (gpriv->base,RCANFD_GAFLP0 (offset, rule_entry_index),0 );/* Place the msg in corresponding Rx FIFO entry */ -rcar_canfd_set_bit (gpriv->base,RCANFD_GAFLP1 (offset, start), +rcar_canfd_set_bit (gpriv->base,RCANFD_GAFLP1 (offset, rule_entry_index),RCANFD_GAFLP1_GAFLFDP (ridx));/* Disable write access to page */
@@ -1851,6 +1843,7 @@ static int rcar_canfd_probe(struct platform_device *pdev)unsigned long channels_mask =0 ;int err, ch_irq, g_irq;int g_err_irq, g_recc_irq; +u32 rule_entry =0 ;bool fdmode = true;/* CAN FD only mode - default */ char name[9 ] ="channelX" ;int i;
@@ -2023,7 +2016,8 @@ static int rcar_canfd_probe(struct platform_device *pdev)rcar_canfd_configure_tx (gpriv, ch);/* Configure receive rules */ -rcar_canfd_configure_afl_rules (gpriv, ch); +rcar_canfd_configure_afl_rules (gpriv, ch, rule_entry); + rule_entry +=RCANFD_CHANNEL_NUMRULES ; }/* Configure common interrupts */
drivers/net/can/usb/ucan.c +18 -25
74 lines not on this page · raw message
drivers/net/ethernet/microsoft/mana/gdma_main.c +10 -4
@@ -131,9 +131,10 @@ static int mana_gd_detect_devices(struct pci_dev *pdev)struct gdma_list_devices_resp resp = {};struct gdma_general_req req = {};struct gdma_dev_id dev; -u32 i, max_num_devs; +int found_dev =0 ;u16 dev_type;int err; +u32 i;mana_gd_init_req_hdr (&req.hdr,GDMA_LIST_DEVICES ,sizeof (req),sizeof (resp));
@@ -145,12 +146,17 @@ static int mana_gd_detect_devices(struct pci_dev *pdev)return err ? err : -EPROTO ; } - max_num_devs =min_t (u32,MAX_NUM_GDMA_DEVICES , resp.num_of_devs); - -for (i =0 ; i < max_num_devs; i++) { +for (i =0 ; i <GDMA_DEV_LIST_SIZE && + found_dev < resp.num_of_devs; i++) { dev = resp.devs[i]; dev_type = dev.type; +/* Skip empty devices */ +if (dev.as_uint32 ==0 ) +continue ; + + found_dev++; +/* HWC is already detected in mana_hwc_create_channel(). */ if (dev_type ==GDMA_DEVICE_HWC )continue ;
drivers/net/ethernet/ti/am65-cpsw-nuss.c +18 -14
@@ -2225,14 +2225,18 @@ static void am65_cpsw_nuss_remove_tx_chns(struct am65_cpsw_common *common)static int am65_cpsw_nuss_ndev_add_tx_napi (struct am65_cpsw_common *common) {struct device *dev = common->dev; +struct am65_cpsw_tx_chn *tx_chn;int i, ret =0 ;for (i =0 ; i < common->tx_ch_num; i++) { -struct am65_cpsw_tx_chn *tx_chn = &common->tx_chns[i]; + tx_chn = &common->tx_chns[i];hrtimer_init (&tx_chn->tx_hrtimer,CLOCK_MONOTONIC ,HRTIMER_MODE_REL_PINNED ); tx_chn->tx_hrtimer.function = &am65_cpsw_nuss_tx_timer_callback; +netif_napi_add_tx (common->dma_ndev, &tx_chn->napi_tx, + am65_cpsw_nuss_tx_poll); + ret = devm_request_irq(dev, tx_chn->irq, am65_cpsw_nuss_tx_irq, IRQF_TRIGGER_HIGH,
@@ -2242,19 +2246,16 @@ static int am65_cpsw_nuss_ndev_add_tx_napi(struct am65_cpsw_common *common) tx_chn->id, tx_chn->irq, ret); goto err; } - -netif_napi_add_tx (common->dma_ndev, &tx_chn->napi_tx, - am65_cpsw_nuss_tx_poll); }return 0 ; err: -for (--i ; i >=0 ; i--) { -struct am65_cpsw_tx_chn *tx_chn = &common->tx_chns[i]; - -netif_napi_del (&tx_chn->napi_tx); +netif_napi_del (&tx_chn->napi_tx); +for (--i; i >=0 ; i--) { + tx_chn = &common->tx_chns[i];devm_free_irq (dev, tx_chn->irq, tx_chn); +netif_napi_del (&tx_chn->napi_tx); }return ret;
@@ -2488,6 +2489,9 @@ static int am65_cpsw_nuss_init_rx_chns(struct am65_cpsw_common *common) HRTIMER_MODE_REL_PINNED); flow->rx_hrtimer.function = &am65_cpsw_nuss_rx_timer_callback; +netif_napi_add (common->dma_ndev, &flow->napi_rx, + am65_cpsw_nuss_rx_poll); + ret = devm_request_irq(dev, flow->irq, am65_cpsw_nuss_rx_irq, IRQF_TRIGGER_HIGH,
@@ -2496,11 +2500,8 @@ static int am65_cpsw_nuss_init_rx_chns(struct am65_cpsw_common *common)dev_err (dev,"failure requesting rx %d irq %u, %d\n" , i, flow->irq, ret); flow->irq = -EINVAL ; - goto err_flow; + goto err_request_irq; } - -netif_napi_add (common->dma_ndev, &flow->napi_rx, - am65_cpsw_nuss_rx_poll); }/* setup classifier to route priorities to flows */
@@ -2508,11 +2509,14 @@ static int am65_cpsw_nuss_init_rx_chns(struct am65_cpsw_common *common)return 0 ; +err_request_irq: +netif_napi_del (&flow->napi_rx); + err_flow: -for (--i; i >=0 ; i--) { +for (--i; i >=0 ; i--) { flow = &rx_chn->flows[i]; -netif_napi_del (&flow->napi_rx);devm_free_irq (dev, flow->irq, flow); +netif_napi_del (&flow->napi_rx); } err:
drivers/net/ethernet/ti/icssg/icssg_prueth.c +1 -0
@@ -1555,6 +1555,7 @@ static int prueth_probe(struct platform_device *pdev) }spin_lock_init (&prueth->vtbl_lock); +spin_lock_init (&prueth->stats_lock);/* setup netdev interfaces */ if (eth0_node) { ret =prueth_netdev_init (prueth, eth0_node);
drivers/net/ethernet/ti/icssg/icssg_prueth.h +2 -0
@@ -297,6 +297,8 @@ struct prueth {int default_vlan;/** @vtbl_lock: Lock for vtbl in shared memory */ spinlock_t vtbl_lock; +/** @stats_lock: Lock for reading icssg stats */ +spinlock_t stats_lock; };struct emac_tx_ts_response {
drivers/net/ethernet/ti/icssg/icssg_stats.c +4 -0
@@ -26,6 +26,8 @@ void emac_update_hardware_stats(struct prueth_emac *emac)u32 val, reg;int i; +spin_lock (&prueth->stats_lock); +for (i =0 ; i <ARRAY_SIZE (icssg_all_miig_stats); i++) { regmap_read(prueth->miig_rt, base + icssg_all_miig_stats[i].offset,
@@ -51,6 +53,8 @@ void emac_update_hardware_stats(struct prueth_emac *emac) emac->pa_stats[i] += val; } } + +spin_unlock (&prueth->stats_lock); }void icssg_stats_work_handler (struct work_struct *work)
drivers/net/phy/phy_link_topology.c +1 -1
@@ -73,7 +73,7 @@ int phy_link_topo_add_phy(struct net_device *dev, xa_limit_32b, &topo->next_phy_index, GFP_KERNEL); -if (ret) +if (ret <0 ) goto err;return 0 ;
drivers/pmdomain/amlogic/meson-secure-pwrc.c +1 -1
@@ -221,7 +221,7 @@ static const struct meson_secure_pwrc_domain_desc t7_pwrc_domains[] = {SEC_PD (T7_VI_CLK2 ,0 ),/* ETH is for ethernet online wakeup, and should be always on */ SEC_PD (T7_ETH ,GENPD_FLAG_ALWAYS_ON ), -SEC_PD (T7_ISP ,0 ), +TOP_PD (T7_ISP ,0 ,PWRC_T7_MIPI_ISP_ID ),SEC_PD (T7_MIPI_ISP ,0 ),TOP_PD (T7_GDC ,0 ,PWRC_T7_NIC3_ID ), TOP_PD(T7_DEWARP, 0, PWRC_T7_NIC3_ID),
drivers/regulator/core.c +11 -1
@@ -2024,6 +2024,10 @@ static int regulator_resolve_supply(struct regulator_dev *rdev)if (have_full_constraints ()) { r = dummy_regulator_rdev; +if (!r) { + ret = -EPROBE_DEFER ; + goto out; + }get_device (&r->dev); }else { dev_err(dev, "Failed to resolve %s-supply for %s\n",
@@ -2041,6 +2045,10 @@ static int regulator_resolve_supply(struct regulator_dev *rdev) goto out; } r = dummy_regulator_rdev; +if (!r) { + ret = -EPROBE_DEFER ; + goto out; + }get_device (&r->dev); }
@@ -2166,8 +2174,10 @@ struct regulator *_regulator_get_common(struct regulator_dev *rdev, struct devic* enabled, even if it isn't hooked up, and just * provide a dummy. */ -dev_warn (dev,"supply %s not found, using dummy regulator\n" , id); rdev = dummy_regulator_rdev; +if (!rdev) +return ERR_PTR (-EPROBE_DEFER ); +dev_warn (dev,"supply %s not found, using dummy regulator\n" , id);get_device (&rdev->dev);break ;
drivers/regulator/dummy.c +1 -1
@@ -60,7 +60,7 @@ static struct platform_driver dummy_regulator_driver = { .probe = dummy_regulator_probe, .driver = { .name = "reg-dummy", - .probe_type = PROBE_PREFER_ASYNCHRONOUS, + .probe_type = PROBE_FORCE_SYNCHRONOUS, }, };
drivers/soc/imx/soc-imx8m.c +68 -81
273 lines not on this page · raw message
drivers/soc/qcom/pdr_interface.c +1 -7
@@ -75,7 +75,6 @@ static int pdr_locator_new_server(struct qmi_handle *qmi, { struct pdr_handle *pdr = container_of(qmi, struct pdr_handle, locator_hdl); -struct pdr_service *pds;mutex_lock (&pdr->lock);/* Create a local client port for QMI communication */
@@ -87,12 +86,7 @@ static int pdr_locator_new_server(struct qmi_handle *qmi,mutex_unlock (&pdr->lock);/* Service pending lookup requests */ -mutex_lock (&pdr->list_lock); -list_for_each_entry (pds, &pdr->lookups, node) { -if (pds->need_locator_lookup) -schedule_work (&pdr->locator_work); - } -mutex_unlock (&pdr->list_lock); +schedule_work (&pdr->locator_work);return 0 ; }
fs/libfs.c +1 -1
@@ -492,7 +492,7 @@ offset_dir_lookup(struct dentry *parent, loff_t offset) found =find_positive_dentry (parent,NULL , false); else {rcu_read_lock (); - child =mas_find (&mas,DIR_OFFSET_MAX ); + child =mas_find_rev (&mas,DIR_OFFSET_MIN ); found =find_positive_dentry (parent, child, false);rcu_read_unlock (); }
fs/netfs/write_collect.c +2 -1
@@ -576,7 +576,8 @@ void netfs_write_collection_worker(struct work_struct *work)trace_netfs_rreq (wreq, netfs_rreq_trace_write_done);if (wreq->io_streams[1 ].active && - wreq->io_streams[1 ].failed) { + wreq->io_streams[1 ].failed && + ictx->ops->invalidate_cache) {/* Cache write failure doesn't prevent writeback completion * unless we're in disconnected mode. */
fs/proc/generic.c +9 -1
@@ -557,10 +557,16 @@ struct proc_dir_entry *proc_create_reg(const char *name, umode_t mode,return p; } -static inline void pde_set_flags (struct proc_dir_entry *pde) +static void pde_set_flags (struct proc_dir_entry *pde) {if (pde->proc_ops->proc_flags &PROC_ENTRY_PERMANENT ) pde->flags |=PROC_ENTRY_PERMANENT ; +if (pde->proc_ops->proc_read_iter) + pde->flags |= PROC_ENTRY_proc_read_iter; +#ifdef CONFIG_COMPAT +if (pde->proc_ops->proc_compat_ioctl) + pde->flags |= PROC_ENTRY_proc_compat_ioctl; +#endif } struct proc_dir_entry *proc_create_data(const char *name, umode_t mode,
@@ -624,6 +630,7 @@ struct proc_dir_entry *proc_create_seq_private(const char *name, umode_t mode, p->proc_ops = &proc_seq_ops; p->seq_ops = ops; p->state_size = state_size; +pde_set_flags (p);return proc_register (parent, p); }EXPORT_SYMBOL (proc_create_seq_private);
@@ -654,6 +661,7 @@ struct proc_dir_entry *proc_create_single_data(const char *name, umode_t mode,return NULL ; p->proc_ops = &proc_single_ops; p->single_show = show; +pde_set_flags (p);return proc_register (parent, p); }EXPORT_SYMBOL (proc_create_single_data);
fs/proc/inode.c +3 -3
@@ -656,13 +656,13 @@ struct inode *proc_get_inode(struct super_block *sb, struct proc_dir_entry *de)if (S_ISREG (inode->i_mode)) { inode->i_op = de->proc_iops; -if (de->proc_ops->proc_read_iter) +if (pde_has_proc_read_iter (de)) inode->i_fop = &proc_iter_file_ops;else inode->i_fop = &proc_reg_file_ops;#ifdef CONFIG_COMPAT -if (de->proc_ops->proc_compat_ioctl) { -if (de->proc_ops->proc_read_iter) +if (pde_has_proc_compat_ioctl (de)) { +if (pde_has_proc_read_iter (de)) inode->i_fop = &proc_iter_file_ops_compat;else inode->i_fop = &proc_reg_file_ops_compat;
fs/proc/internal.h +14 -0
@@ -85,6 +85,20 @@ static inline void pde_make_permanent(struct proc_dir_entry *pde) pde->flags |=PROC_ENTRY_PERMANENT ; } +static inline bool pde_has_proc_read_iter (const struct proc_dir_entry *pde) +{ +return pde->flags & PROC_ENTRY_proc_read_iter; +} + +static inline bool pde_has_proc_compat_ioctl (const struct proc_dir_entry *pde) +{ +#ifdef CONFIG_COMPAT +return pde->flags & PROC_ENTRY_proc_compat_ioctl; +#else +return false; +#endif +} +extern struct kmem_cache *proc_dir_entry_cache;void pde_free (struct proc_dir_entry *pde);
fs/smb/server/smbacl.c +4 -1
@@ -398,7 +398,9 @@ static void parse_dacl(struct mnt_idmap *idmap,if (num_aces <=0 )return ; -if (num_aces >ULONG_MAX /sizeof (struct smb_ace *)) +if (num_aces > (le16_to_cpu (pdacl->size) -sizeof (struct smb_acl )) / + (offsetof(struct smb_ace , sid) + + offsetof(struct smb_sid , sub_auth) +sizeof (__le16)))return ; ret =init_acl_state (&acl_state, num_aces);
@@ -432,6 +434,7 @@ static void parse_dacl(struct mnt_idmap *idmap, offsetof(struct smb_sid , sub_auth); if (end_of_acl - acl_base < acl_size || + ppace[i]->sid.num_subauth == 0 || ppace[i]->sid.num_subauth > SID_MAX_SUB_AUTHORITIES || (end_of_acl - acl_base < acl_size + sizeof(__le32) * ppace[i]->sid.num_subauth) ||
include/linux/key.h +1 -0
@@ -236,6 +236,7 @@ struct key {#define KEY_FLAG_ROOT_CAN_INVAL 7/* set if key can be invalidated by root without permission */ #define KEY_FLAG_KEEP 8/* set if key should not be removed */ #define KEY_FLAG_UID_KEYRING 9/* set if key is a user or user session keyring */ +#define KEY_FLAG_FINAL_PUT 10/* set if final put has happened on key */ /* the key type and key description string * - the desc is used to match a key against search criteria
include/linux/libata.h +2 -0
@@ -88,6 +88,7 @@ enum ata_quirks { __ATA_QUIRK_MAX_SEC_1024,/* Limit max sects to 1024 */ __ATA_QUIRK_MAX_TRIM_128M,/* Limit max trim size to 128M */ __ATA_QUIRK_NO_NCQ_ON_ATI,/* Disable NCQ on ATI chipset */ + __ATA_QUIRK_NO_LPM_ON_ATI,/* Disable LPM on ATI chipset */ __ATA_QUIRK_NO_ID_DEV_LOG,/* Identify device log missing */ __ATA_QUIRK_NO_LOG_DIR,/* Do not read log directory */ __ATA_QUIRK_NO_FUA, /* Do not use FUA */
@@ -434,6 +435,7 @@ enum {ATA_QUIRK_MAX_SEC_1024 = (1U << __ATA_QUIRK_MAX_SEC_1024),ATA_QUIRK_MAX_TRIM_128M = (1U << __ATA_QUIRK_MAX_TRIM_128M),ATA_QUIRK_NO_NCQ_ON_ATI = (1U << __ATA_QUIRK_NO_NCQ_ON_ATI), +ATA_QUIRK_NO_LPM_ON_ATI = (1U << __ATA_QUIRK_NO_LPM_ON_ATI),ATA_QUIRK_NO_ID_DEV_LOG = (1U << __ATA_QUIRK_NO_ID_DEV_LOG),ATA_QUIRK_NO_LOG_DIR = (1U << __ATA_QUIRK_NO_LOG_DIR), ATA_QUIRK_NO_FUA = (1U << __ATA_QUIRK_NO_FUA),
include/linux/proc_fs.h +5 -2
@@ -20,10 +20,13 @@ enum {* If in doubt, ignore this flag. */ #ifdef MODULE - PROC_ENTRY_PERMANENT = 0U, + PROC_ENTRY_PERMANENT = 0U, #else - PROC_ENTRY_PERMANENT = 1U << 0, + PROC_ENTRY_PERMANENT = 1U << 0, #endif + + PROC_ENTRY_proc_read_iter = 1U << 1, + PROC_ENTRY_proc_compat_ioctl = 1U << 2, }; struct proc_ops {
include/net/bluetooth/hci.h +1 -1
@@ -683,7 +683,7 @@ enum {#define HCI_ERROR_REMOTE_POWER_OFF 0x15#define HCI_ERROR_LOCAL_HOST_TERM 0x16#define HCI_ERROR_PAIRING_NOT_ALLOWED 0x18 -#define HCI_ERROR_UNSUPPORTED_REMOTE_FEATURE 0x1e +#define HCI_ERROR_UNSUPPORTED_REMOTE_FEATURE 0x1a#define HCI_ERROR_INVALID_LL_PARAMS 0x1e#define HCI_ERROR_UNSPECIFIED 0x1f#define HCI_ERROR_ADVERTISING_TIMEOUT 0x3c
include/net/mana/gdma.h +7 -4
@@ -406,8 +406,6 @@ struct gdma_context {struct gdma_dev mana_ib; }; -#define MAX_NUM_GDMA_DEVICES 4 -static inline bool mana_gd_is_mana (struct gdma_dev *gd) {return gd->dev_id.type ==GDMA_DEVICE_MANA ;
@@ -554,11 +552,15 @@ enum {#define GDMA_DRV_CAP_FLAG_1_HWC_TIMEOUT_RECONFIG BIT(3)#define GDMA_DRV_CAP_FLAG_1_VARIABLE_INDIRECTION_TABLE_SUPPORT BIT(5) +/* Driver can handle holes (zeros) in the device list */ +#define GDMA_DRV_CAP_FLAG_1_DEV_LIST_HOLES_SUP BIT(11) +#define GDMA_DRV_CAP_FLAGS1 \ (GDMA_DRV_CAP_FLAG_1_EQ_SHARING_MULTI_VPORT | \ GDMA_DRV_CAP_FLAG_1_NAPI_WKDONE_FIX | \ GDMA_DRV_CAP_FLAG_1_HWC_TIMEOUT_RECONFIG | \ - GDMA_DRV_CAP_FLAG_1_VARIABLE_INDIRECTION_TABLE_SUPPORT) + GDMA_DRV_CAP_FLAG_1_VARIABLE_INDIRECTION_TABLE_SUPPORT | \ + GDMA_DRV_CAP_FLAG_1_DEV_LIST_HOLES_SUP)#define GDMA_DRV_CAP_FLAGS2 0
@@ -619,11 +621,12 @@ struct gdma_query_max_resources_resp { };/* HW DATA */ /* GDMA_LIST_DEVICES */ +#define GDMA_DEV_LIST_SIZE 64struct gdma_list_devices_resp {struct gdma_resp_hdr hdr;u32 num_of_devs;u32 reserved; -struct gdma_dev_id devs[64 ]; +struct gdma_dev_id devs[GDMA_DEV_LIST_SIZE ]; };/* HW DATA */ /* GDMA_REGISTER_DEVICE */
io_uring/net.c +3 -2
@@ -152,7 +152,7 @@ static void io_netmsg_recycle(struct io_kiocb *req, unsigned int issue_flags)if (iov)kasan_mempool_poison_object (iov); req->async_data =NULL ; - req->flags &= ~REQ_F_ASYNC_DATA ; + req->flags &= ~(REQ_F_ASYNC_DATA |REQ_F_NEED_CLEANUP ); } }
@@ -447,7 +447,6 @@ int io_sendmsg_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)static void io_req_msg_cleanup (struct io_kiocb *req,unsigned int issue_flags) { - req->flags &= ~REQ_F_NEED_CLEANUP ;io_netmsg_recycle (req, issue_flags); }
@@ -1428,6 +1427,7 @@ int io_send_zc(struct io_kiocb *req, unsigned int issue_flags)*/ if (!(issue_flags &IO_URING_F_UNLOCKED )) {io_notif_flush (zc->notif); + zc->notif =NULL ;io_req_msg_cleanup (req,0 ); }io_req_set_res (req, ret,IORING_CQE_F_MORE );
@@ -1488,6 +1488,7 @@ int io_sendmsg_zc(struct io_kiocb *req, unsigned int issue_flags)*/ if (!(issue_flags &IO_URING_F_UNLOCKED )) {io_notif_flush (sr->notif); + sr->notif =NULL ;io_req_msg_cleanup (req,0 ); }io_req_set_res (req, ret,IORING_CQE_F_MORE );
kernel/dma/direct.c +18 -10
@@ -584,6 +584,22 @@ int dma_direct_supported(struct device *dev, u64 mask)return mask >=phys_to_dma_unencrypted (dev, min_mask); } +static const struct bus_dma_region *dma_find_range (struct device *dev, +unsigned long start_pfn) +{ +const struct bus_dma_region *m; + +for (m = dev->dma_range_map;PFN_DOWN (m->size); m++) { +unsigned long cpu_start_pfn =PFN_DOWN (m->cpu_start); + +if (start_pfn >= cpu_start_pfn && + start_pfn - cpu_start_pfn <PFN_DOWN (m->size)) +return m; + } + +return NULL ; +} +/* * To check whether all ram resource ranges are covered by dma range map * Returns 0 when further check is needed
@@ -593,20 +609,12 @@ static int check_ram_in_range_map(unsigned long start_pfn, unsigned long nr_pages, void *data) { unsigned long end_pfn = start_pfn + nr_pages; -const struct bus_dma_region *bdr =NULL ; -const struct bus_dma_region *m;struct device *dev = data;while (start_pfn < end_pfn) { -for (m = dev->dma_range_map;PFN_DOWN (m->size); m++) { -unsigned long cpu_start_pfn =PFN_DOWN (m->cpu_start); +const struct bus_dma_region *bdr; -if (start_pfn >= cpu_start_pfn && - start_pfn - cpu_start_pfn <PFN_DOWN (m->size)) { - bdr = m; -break ;
Lines of this file are not shown. View the raw message.
net/core/lwtunnel.c +53 -12
65 lines not on this page · raw message
net/xfrm/xfrm_output.c +42 -1
43 lines not on this page · raw message
tools/testing/selftests/mm/run_vmtests.sh +3 -1
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.