Linux 5.15.54
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.15.54 kernel.
All users of the 5.15 kernel series must upgrade.
The updated 5.15.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.15.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/allwinner,sun50i-a64-dma.yaml | 2 Documentation/devicetree/bindings/soc/qcom/qcom,smd-rpm.yaml | 3 MAINTAINERS | 3 Makefile | 17 arch/arm/boot/dts/at91-sam9x60ek.dts | 3 arch/arm/boot/dts/at91-sama5d2_icp.dts | 6 arch/arm/boot/dts/stm32mp151.dtsi | 4 arch/arm/configs/mxs_defconfig | 1 arch/arm/include/asm/arch_gicv3.h | 7 arch/arm/mach-at91/pm.c | 10 arch/arm/mach-meson/platsmp.c | 2 arch/arm64/boot/dts/freescale/imx8mp-evk.dts | 54 - arch/arm64/boot/dts/freescale/imx8mp-phyboard-pollux-rdk.dts | 48 - arch/arm64/boot/dts/qcom/msm8992-bullhead-rev-101.dts | 2 arch/arm64/boot/dts/qcom/msm8992-xiaomi-libra.dts | 2 arch/arm64/boot/dts/qcom/msm8994.dtsi | 4 arch/arm64/boot/dts/qcom/sdm845.dtsi | 2 arch/arm64/include/asm/arch_gicv3.h | 6 arch/arm64/net/bpf_jit_comp.c | 5 arch/powerpc/boot/crt0.S | 31 - arch/powerpc/crypto/md5-asm.S | 10 arch/powerpc/crypto/sha1-powerpc-asm.S | 6 arch/powerpc/include/asm/ppc_asm.h | 43 - arch/powerpc/kernel/entry_32.S | 23 arch/powerpc/kernel/exceptions-64e.S | 14 arch/powerpc/kernel/exceptions-64s.S | 6 arch/powerpc/kernel/head_32.h | 3 arch/powerpc/kernel/head_booke.h | 3 arch/powerpc/kernel/interrupt_64.S | 34 - arch/powerpc/kernel/optprobes_head.S | 4 arch/powerpc/kernel/tm.S | 38 - arch/powerpc/kernel/trace/ftrace_64_mprofile.S | 15 arch/powerpc/kvm/book3s_hv_rmhandlers.S | 5 arch/powerpc/kvm/book3s_hv_uvmem.c | 2 arch/powerpc/lib/test_emulate_step_exec_instr.S | 8 arch/powerpc/platforms/powernv/rng.c | 16 arch/riscv/configs/defconfig | 8 arch/riscv/configs/rv32_defconfig | 1 arch/riscv/mm/init.c | 1 arch/s390/boot/compressed/decompressor.h | 1 arch/s390/boot/startup.c | 8 arch/s390/kernel/entry.h | 1 arch/s390/kernel/setup.c | 31 - arch/s390/kernel/vmlinux.lds.S | 1 arch/s390/kvm/kvm-s390.c | 19 arch/s390/kvm/kvm-s390.h | 4 arch/s390/kvm/priv.c | 15 arch/x86/kernel/cpu/mce/core.c | 8 arch/x86/kvm/mmu/page_track.c | 4 arch/x86/kvm/mmu/tdp_mmu.c | 9 arch/x86/kvm/x86.c | 4 block/bio.c | 11 block/blk-iolatency.c | 2 block/blk-rq-qos.h | 23 drivers/base/core.c | 3 drivers/base/memory.c | 2 drivers/base/power/runtime.c | 20 drivers/block/Kconfig | 1 drivers/block/drbd/drbd_main.c | 8 drivers/block/virtio_blk.c | 158 +++-- drivers/bluetooth/btmtksdio.c | 3 drivers/bus/mhi/core/init.c | 9 drivers/bus/mhi/core/internal.h | 2 drivers/clk/renesas/r9a07g044-cpg.c | 4 drivers/cxl/core/bus.c | 4 drivers/dma-buf/dma-buf.c | 19 drivers/dma/at_xdmac.c | 5 drivers/dma/idxd/device.c | 5 drivers/dma/imx-sdma.c | 2 drivers/dma/lgm/lgm-dma.c | 3 drivers/dma/pl330.c | 2 drivers/dma/qcom/bam_dma.c | 39 - drivers/dma/ti/dma-crossbar.c | 5 drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 25 drivers/gpu/drm/amd/amdgpu/cik.c | 2 drivers/gpu/drm/amd/amdgpu/nv.c | 2 drivers/gpu/drm/amd/amdgpu/si.c | 2 drivers/gpu/drm/amd/amdgpu/soc15.c | 2 drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c | 2 drivers/gpu/drm/amd/amdgpu/vi.c | 17 drivers/gpu/drm/amd/display/dc/dcn30/dcn30_resource.c | 2 drivers/gpu/drm/amd/display/dc/dcn30/dcn30_resource.h | 7 drivers/gpu/drm/amd/display/dc/dcn31/dcn31_resource.c | 65 ++ drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c | 2 drivers/gpu/drm/i915/gem/i915_gem_context.c | 7 drivers/gpu/drm/i915/gem/i915_gem_object.c | 6 drivers/gpu/drm/i915/gt/intel_context_types.h | 8 drivers/gpu/drm/i915/gt/intel_engine_cs.c | 4 drivers/gpu/drm/i915/gt/intel_engine_pm.c | 23 drivers/gpu/drm/i915/gt/intel_engine_pm.h | 2 drivers/gpu/drm/i915/gt/intel_engine_types.h | 7 drivers/gpu/drm/i915/gt/intel_execlists_submission.c | 2 drivers/gpu/drm/i915/gt/intel_ring_submission.c | 5 drivers/gpu/drm/i915/gt/mock_engine.c | 2 drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c | 12 drivers/gpu/drm/mediatek/mtk_disp_drv.h | 16 drivers/gpu/drm/mediatek/mtk_disp_ovl.c | 22 drivers/gpu/drm/mediatek/mtk_disp_rdma.c | 20 drivers/gpu/drm/mediatek/mtk_drm_crtc.c | 133 +++- drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c | 4 drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h | 29 drivers/i2c/busses/i2c-cadence.c | 1 drivers/i2c/busses/i2c-piix4.c | 16 drivers/iio/accel/mma8452.c | 4 drivers/input/misc/cpcap-pwrbutton.c | 6 drivers/input/touchscreen/goodix.c | 150 ++-- drivers/input/touchscreen/goodix.h | 75 ++ drivers/iommu/intel/dmar.c | 2 drivers/irqchip/irq-gic-v3.c | 42 + drivers/media/platform/davinci/vpif.c | 97 ++- drivers/media/platform/omap3isp/ispstat.c | 5 drivers/media/rc/ir_toy.c | 2 drivers/memory/renesas-rpc-if.c | 48 + drivers/misc/cardreader/rtsx_usb.c | 27 drivers/mtd/spi-nor/core.c | 3 drivers/net/can/grcan.c | 1 drivers/net/can/m_can/m_can.c | 8 drivers/net/can/spi/mcp251xfd/mcp251xfd-regmap.c | 22 drivers/net/can/usb/gs_usb.c | 23 drivers/net/can/usb/kvaser_usb/kvaser_usb.h | 25 drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c | 286 +++++---- drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c | 4 drivers/net/can/usb/kvaser_usb/kvaser_usb_leaf.c | 119 ++- drivers/net/dsa/qca8k.c | 23 drivers/net/ethernet/ibm/ibmvnic.c | 147 ++++ drivers/net/ethernet/ibm/ibmvnic.h | 1 drivers/net/ethernet/intel/i40e/i40e.h | 16 drivers/net/ethernet/intel/i40e/i40e_main.c | 73 ++ drivers/net/ethernet/intel/i40e/i40e_register.h | 13 drivers/net/ethernet/intel/i40e/i40e_type.h | 1 drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 4 drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 88 +- drivers/net/ethernet/qlogic/qed/qed_l2.c | 23 drivers/net/ethernet/qlogic/qede/qede_filter.c | 47 - drivers/net/ethernet/realtek/r8169_main.c | 10 drivers/net/usb/usbnet.c | 17 drivers/net/wireless/ath/ath11k/core.c | 5 drivers/net/wireless/ath/ath11k/hw.h | 1 drivers/net/wireless/ath/ath11k/pci.c | 12 drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c | 3 drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h | 2 drivers/net/wireless/mediatek/mt76/mt7921/debugfs.c | 31 - drivers/net/wireless/mediatek/mt76/mt7921/mac.c | 28 drivers/net/wireless/mediatek/mt76/mt7921/main.c | 33 - drivers/net/wireless/mediatek/mt76/mt7921/mcu.c | 47 - drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h | 11 drivers/pci/hotplug/pciehp.h | 2 drivers/pci/hotplug/pciehp_core.c | 2 drivers/pci/hotplug/pciehp_hpc.c | 26 drivers/pci/pcie/portdrv.h | 3 drivers/pci/pcie/portdrv_core.c | 20 drivers/pci/pcie/portdrv_pci.c | 3 drivers/pinctrl/sunxi/pinctrl-sun8i-a83t.c | 10 drivers/pinctrl/sunxi/pinctrl-sunxi.c | 2 drivers/platform/x86/wmi.c | 39 - drivers/scsi/qla2xxx/qla_def.h | 5 drivers/scsi/qla2xxx/qla_edif.c | 39 - drivers/scsi/qla2xxx/qla_edif.h | 1 drivers/scsi/qla2xxx/qla_init.c | 2 drivers/scsi/qla2xxx/qla_nvme.c | 27 drivers/scsi/qla2xxx/qla_os.c | 102 +-- drivers/soc/atmel/soc.c | 12 drivers/tty/n_gsm.c | 263 +++++++- drivers/vdpa/mlx5/net/mlx5_vnet.c | 7 drivers/video/fbdev/core/fbcon.c | 33 + drivers/video/fbdev/core/fbmem.c | 16 fs/btrfs/block-group.c | 152 +++- fs/btrfs/block-group.h | 2 fs/btrfs/ctree.c | 17 fs/btrfs/ctree.h | 8 fs/btrfs/delayed-ref.h | 5 fs/btrfs/dev-replace.c | 16 fs/btrfs/disk-io.c | 1 fs/btrfs/extent-tree.c | 28 fs/btrfs/extent_io.c | 8 fs/btrfs/file.c | 13 fs/btrfs/free-space-tree.c | 4 fs/btrfs/inode.c | 3 fs/btrfs/ioctl.c | 96 +-- fs/btrfs/qgroup.c | 3 fs/btrfs/relocation.c | 25 fs/btrfs/scrub.c | 6 fs/btrfs/tree-log.c | 2 fs/btrfs/volumes.c | 310 ++++++---- fs/btrfs/volumes.h | 28 fs/btrfs/zoned.c | 2 fs/btrfs/zoned.h | 17 fs/gfs2/file.c | 1 fs/io_uring.c | 10 fs/nfsd/nfs3proc.c | 6 fs/nfsd/vfs.c | 64 +- fs/nfsd/vfs.h | 4 fs/seq_file.c | 32 + fs/xfs/xfs_inode.c | 1 include/linux/blk_types.h | 3 include/linux/bpf.h | 6 include/linux/compiler-gcc.h | 8 include/linux/compiler_attributes.h | 10 include/linux/compiler_types.h | 12 include/linux/fbcon.h | 4 include/linux/hugetlb.h | 6 include/linux/list.h | 10 include/linux/memregion.h | 2 include/linux/mm.h | 8 include/linux/pm_runtime.h | 5 include/linux/qed/qed_eth_if.h | 21 include/linux/rtsx_usb.h | 2 include/linux/seq_file.h | 4 include/linux/stddef.h | 61 + include/linux/vmalloc.h | 5 include/net/netfilter/nf_tables.h | 10 include/net/netfilter/nf_tables_ipv4.h | 7 include/net/netfilter/nf_tables_ipv6.h | 6 include/uapi/linux/netfilter/nf_tables.h | 2 include/uapi/linux/omap3isp.h | 21 include/uapi/linux/stddef.h | 41 + include/video/of_display_timing.h | 2 kernel/bpf/core.c | 7 kernel/bpf/verifier.c | 150 +--- kernel/module.c | 79 +- lib/idr.c | 3 mm/filemap.c | 12 mm/hugetlb.c | 10 mm/hwpoison-inject.c | 3 mm/madvise.c | 2 mm/memory-failure.c | 205 ++++-- mm/slub.c | 2 mm/util.c | 50 + net/batman-adv/bridge_loop_avoidance.c | 2 net/bluetooth/hci_event.c | 12 net/can/bcm.c | 18 net/netfilter/nf_tables_api.c | 9 net/netfilter/nf_tables_core.c | 2 net/netfilter/nf_tables_trace.c | 4 net/netfilter/nft_exthdr.c | 2 net/netfilter/nft_meta.c | 2 net/netfilter/nft_payload.c | 63 +- net/netfilter/nft_set_pipapo.c | 48 + net/rose/rose_route.c | 4 net/rxrpc/ar-internal.h | 2 net/rxrpc/call_accept.c | 6 net/rxrpc/call_object.c | 18 net/rxrpc/net_ns.c | 2 net/rxrpc/proc.c | 10 net/xdp/xsk_buff_pool.c | 1 scripts/checkpatch.pl | 3 scripts/kernel-doc | 9 sound/pci/cs46xx/cs46xx.c | 22 sound/pci/hda/patch_realtek.c | 1 sound/soc/codecs/rt5682-i2c.c | 36 - sound/soc/codecs/rt5682.c | 125 +--- sound/soc/codecs/rt5682.h | 4 sound/soc/codecs/rt700.c | 16 sound/soc/codecs/rt711-sdca.c | 27 sound/soc/codecs/rt711.c | 25 sound/usb/mixer_maps.c | 16 sound/usb/quirks.c | 4 tools/testing/selftests/bpf/prog_tests/timer_crash.c | 32 - tools/testing/selftests/bpf/progs/timer_crash.c | 54 - tools/testing/selftests/net/forwarding/lib.sh | 6 tools/testing/selftests/net/udpgro.sh | 2 tools/testing/selftests/net/udpgro_bench.sh | 2 tools/testing/selftests/net/udpgro_fwd.sh | 2 tools/testing/selftests/net/veth.sh | 6 virt/kvm/kvm_main.c | 14 266 files changed, 3771 insertions(+), 2017 deletions(-)
Alexander Egorenkov (1):
s390/setup: preserve memory at OLDMEM_BASE and OLDMEM_SIZE
Alexander Gordeev (2):
s390/boot: allocate amode31 section in decompressor s390/setup: use physical pointers for memblock_reserve()
Alexey Dobriyan (1):
module: fix [e_shstrndx].sh_size=0 OOB access
Amelie Delaunay (1):
ARM: dts: stm32: use usbphyc ck_usbo_48m as USBH OHCI clock on stm32mp151
Andreas Gruenbacher (1):
gfs2: Fix gfs2_file_buffered_write endless loop workaround
Andrei Lalaev (1):
pinctrl: sunxi: sunxi_pconf_set: use correct offset
Andrew Gabbasov (1):
memory: renesas-rpc-if: Avoid unaligned bus access for HyperFlash
AngeloGioacchino Del Regno (2):
serial: 8250_mtk: Make sure to select the right FEATURE_SEL Revert "serial: 8250_mtk: Make sure to select the right FEATURE_SEL"
Arun Easi (2):
scsi: qla2xxx: Fix crash during module load unload test
scsi: qla2xxx: Fix loss of NVMe namespaces after driver reload test
Barnabás Pőcze (1):
platform/x86: wmi: introduce helper to convert driver to WMI driver
Bryan O'Donoghue (1):
dt-bindings: soc: qcom: smd-rpm: Fix missing MSM8936 compatible
CHANDAN VURDIGERE NATARAJ (1):
drm/amd/display: Fix by adding FPU protection for dcn30_internal_validate_bw
Caleb Connolly (1):
dmaengine: qcom: bam_dma: fix runtime PM underflow
Charles Keepax (2):
ASoC: rt711: Add endianness flag in snd_soc_component_driver
ASoC: rt711-sdca: Add endianness flag in snd_soc_component_driver
Christian Marangi (1):
net: dsa: qca8k: reset cpu port on MTU change
Christophe JAILLET (1):
dmaengine: lgm: Fix an error handling path in intel_ldma_probe()
Christophe Leroy (1):
powerpc/32: Don't use lmw/stmw for saving/restoring non volatile regs
Chuck Lever (2):
NFSD: De-duplicate net_generic(nf->nf_net, nfsd_net_id)
NFSD: COMMIT operations must not return NFS?ERR_INVAL
Chun-Kuang Hu (4):
drm/mediatek: Use mailbox rx_callback instead of cmdq_task_cb drm/mediatek: Remove the pointer of struct cmdq_client drm/mediatek: Detect CMDQ execution timeout drm/mediatek: Add cmdq_handle in mtk_crtc
Claudio Imbrenda (1):
KVM: s390x: fix SCK locking
Claudiu Beznea (3):
ARM: at91: pm: use proper compatible for sama5d2's rtc
ARM: at91: pm: use proper compatibles for sam9x60's rtc and rtt
ARM: at91: pm: use proper compatibles for sama7g5's rtc and rtt
Dan Carpenter (1):
btrfs: fix error pointer dereference in btrfs_ioctl_rm_dev_v2()
Dan Williams (2):
cxl/port: Hold port reference until decoder release
memregion: Fix memregion_free() fallback definition
Daniel Borkmann (2):
bpf: Fix incorrect verifier simulation around jmp32's jeq/jne
bpf: Fix insufficient bounds propagation from adjust_scalar_min_max_vals
Daniel Starke (5):
tty: n_gsm: fix frame reception handling
tty: n_gsm: fix missing update of modem controls after DLCI open
tty: n_gsm: fix invalid use of MSC in advanced option
tty: n_gsm: fix sometimes uninitialized warning in gsm_dlci_modem_output()
tty: n_gsm: fix invalid gsmtty_write_room() result
Dave Jiang (1):
dmaengine: idxd: force wq context cleanup on device disable path
David Howells (1):
rxrpc: Fix locking issue
Derek Fang (2):
ASoC: rt5682: Avoid the unexpected IRQ event during going to suspend
ASoC: rt5682: Re-detect the combo jack after resuming
Dmitry Baryshkov (1):
arm64: dts: qcom: sdm845: use dispcc AHB clock for mdss node
Dmitry Osipenko (1):
dmaengine: pl330: Fix lockdep warning about non-static key
Dongliang Mu (1):
btrfs: don't access possibly stale fs_info data in device_list_add
Duoming Zhou (1):
net: rose: fix UAF bug caused by rose_t0timer_expiry
Eli Cohen (1):
vdpa/mlx5: Avoid processing works if workqueue was destroyed
Eric Sandeen (1):
xfs: remove incorrect ASSERT in xfs_rename
Eugen Hristev (2):
ARM: dts: at91: sam9x60ek: fix eeprom compatible and size
ARM: dts: at91: sama5d2_icp: fix eeprom compatibles
Fabio Estevam (1):
ARM: mxs_defconfig: Enable the framebuffer
Fabrice Gasnier (1):
ARM: dts: stm32: add missing usbh clock and fix clk order on stm32mp15
Filipe Manana (3):
btrfs: fix invalid delayed ref after subvolume creation failure
btrfs: fix warning when freeing leaf after subvolume creation failure
btrfs: fix deadlock between chunk allocation and chunk btree modifications
Florian Westphal (1):
netfilter: nft_payload: don't allow th access for fragments
Greg Kroah-Hartman (1):
Linux 5.15.54
Guiling Deng (1):
fbdev: fbmem: Fix logo center image dx issue
Haibo Chen (1):
iio: accel: mma8452: use the correct logic to get mma8452_data
Hangbin Liu (1):
selftests/net: fix section name when using xdp_dummy.o
Hans de Goede (6):
Input: goodix - change goodix_i2c_write() len parameter type to int
Input: goodix - add a goodix.h header file
Input: goodix - refactor reset handling
Input: goodix - try not to touch the reset-pin on x86/ACPI devices platform/x86: wmi: Replace read_takes_no_args with a flags field platform/x86: wmi: Fix driver->notify() vs ->probe() race
Heiner Kallweit (1):
r8169: fix accessing unset transport header
Heinrich Schuchardt (1):
riscv: defconfig: enable DRM_NOUVEAU
Helge Deller (3):
fbmem: Check virtual screen sizes in fb_set_var()
fbcon: Disallow setting font bigger than screen size
fbcon: Prevent that screen size is smaller than font size
Hou Tao (1):
bpf, arm64: Use emit_addr_mov_i64() for BPF_PSEUDO_FUNC
Hsin-Yi Wang (1):
video: of_display_timing.h: include errno.h
Hui Wang (2):
serial: sc16is7xx: Clear RS485 bits in the shutdown Revert "serial: sc16is7xx: Clear RS485 bits in the shutdown"
Ivan Malov (1):
xsk: Clear page contiguity bit when unmapping pool
Jack Yu (1):
ASoC: rt5682: move clk related code to rt5682_i2c_probe
Jann Horn (1):
mm/slub: add missing TID updates on slab deactivation
Jason A. Donenfeld (1):
powerpc/powernv: delay rng platform device creation until later in boot
Jean Delvare (1):
i2c: piix4: Fix a memory leak in the EFCH MMIO support
Jens Axboe (2):
io_uring: ensure that fsnotify is always called
block: only mark bio as tracked if it really is tracked
Jimmy Assarsson (3):
can: kvaser_usb: replace run-time checks with struct kvaser_usb_driver_info
can: kvaser_usb: kvaser_usb_leaf: fix CAN clock frequency regression
can: kvaser_usb: kvaser_usb_leaf: fix bittiming limits
Johan Hovold (1):
media: davinci: vpif: fix use-after-free on driver unbind
Johannes Schickel (1):
ALSA: usb-audio: add mapping for MSI MPG X570S Carbon Max Wifi.
Johannes Thumshirn (1):
btrfs: zoned: encapsulate inode locking for zoned relocation
Josef Bacik (3):
btrfs: handle device lookup with btrfs_dev_lookup_args
btrfs: add a btrfs_get_dev_args_from_path helper
btrfs: use btrfs_get_dev_args_from_path in dev removal ioctls
Kees Cook (5):
stddef: Introduce struct_group() helper macro
media: omap3isp: Use struct_group() for memcpy() region Compiler Attributes: add __alloc_size() for better bounds checking
bus: mhi: core: Use correctly sized arguments for bit field
stddef: Introduce DECLARE_FLEX_ARRAY() helper
Konrad Dybcio (1):
arm64: dts: qcom: msm8994: Fix CPU6/7 reg values
Lad Prabhakar (1):
clk: renesas: r9a07g044: Update multiplier and divider values for PLL2/3
Liang He (1):
can: grcan: grcan_probe(): remove extra of_node_get()
Linus Torvalds (1):
ida: don't use BUG_ON() for debugging
Liu Shixin (1):
mm/filemap: fix UAF in find_lock_entries
Lorenzo Bianconi (4):
mt76: mt7921: get rid of mt7921_mac_set_beacon_filter
mt76: mt7921: introduce mt7921_mcu_set_beacon_filter utility routine
mt76: mt7921: fix a possible race enabling/disabling runtime-pm
mt76: mt7921: do not always disable fw runtime-pm
Luis Chamberlain (1):
drbd: add error handling support for add_disk()
Lukas Wunner (2):
PCI/portdrv: Rename pm_iter() to pcie_port_device_iter()
PCI: pciehp: Ignore Link Down/Up caused by error-induced Hot Reset
Lukasz Cieplicki (1):
i40e: Fix dropped jumbo frames statistics
Manish Rangankar (1):
scsi: qla2xxx: Move heartbeat handling from DPC thread to workqueue
Marc Kleine-Budde (2):
can: m_can: m_can_chip_config(): actually enable internal timestamping
can: m_can: m_can_{read_fifo,echo_tx_event}(): shift timestamp to full 32 bits
Mario Limonciello (1):
drm/amd: Refactor amdgpu_aspm to be evaluated per device
Mark Rutland (2):
irqchip/gic-v3: Ensure pseudo-NMIs have an ISB between ack and handling irqchip/gic-v3: Refactor ISB + EOIR at ack time
Martin KaFai Lau (1):
bpf: Stop caching subprog index in the bpf_pseudo_func insn
Matthew Brost (1):
drm/i915: Disable bonding on gen12+ platforms
Maurizio Avogadro (1):
ALSA: usb-audio: add mapping for MSI MAG X570S Torpedo MAX.
Max Gurtovoy (1):
virtio-blk: avoid preallocating big SGL for data
Miaohe Lin (1):
mm/memory-failure.c: fix race with changing page compound again
Miaoqian Lin (3):
ARM: meson: Fix refcount leak in meson_smp_prepare_cpus
dmaengine: ti: Fix refcount leak in ti_dra7_xbar_route_allocate
dmaengine: ti: Add missing put_device in ti_dra7_xbar_route_allocate
Michael Strauss (1):
drm/amd/display: Set min dcfclk if pipe count is 0
Michael Walle (1):
dmaengine: at_xdma: handle errors of at_xdmac_alloc_desc() correctly
Michel Dänzer (1):
dma-buf/poll: Get a file reference for outstanding fence callbacks
Mihai Sain (1):
ARM: at91: fix soc detection for SAM9X60 SiPs
Naohiro Aota (1):
btrfs: zoned: use dedicated lock for data relocation
Naoya Horiguchi (3):
mm/hwpoison: mf_mutex for soft offline and unpoison
mm/hwpoison: fix race between hugetlb free/demotion and memory_failure_hugetlb() Revert "mm/memory-failure.c: fix race with changing page compound again"
Nicholas Piggin (2):
powerpc: flexible GPR range save/restore macros powerpc/tm: Fix more userspace r13 corruption
Niels Dossche (1):
Bluetooth: protect le accept and resolv lists with hdev->lock
Nikolay Borisov (2):
btrfs: rename btrfs_alloc_chunk to btrfs_create_chunk
btrfs: add additional parameters to btrfs_init_tree_ref/btrfs_init_data_ref
Norbert Zulinski (1):
i40e: Fix VF's MAC Address change on VM
Oliver Hartkopp (1):
can: bcm: use call_rcu() instead of costly synchronize_rcu()
Oliver Neukum (1):
usbnet: fix memory leak in error case
Oliver Upton (1):
KVM: Don't create VM debugfs files outside of the VM directory
Pablo Neira Ayuso (4):
netfilter: nft_set_pipapo: release elements in clone from abort path
netfilter: nf_tables: stricter validation of element data
netfilter: nf_tables: convert pktinfo->tprot_set to flags field
netfilter: nft_payload: support for inner header matching / mangling
Palmer Dabbelt (2):
RISC-V: defconfigs: Set CONFIG_FB=y, for FB console riscv/mm: Add XIP_FIXUP for riscv_pfn_base
Paolo Bonzini (2):
mm: vmalloc: introduce array allocation functions
KVM: use __vcalloc for very large allocations
Paul Davey (1):
bus: mhi: Fix pm_state conversion to string
Pavel Begunkov (2):
block: use bdev_get_queue() in bio.c
io_uring: avoid io-wq -EAGAIN looping for !IOPOLL
Peng Fan (9):
arm64: dts: imx8mp-evk: correct mmc pad settings
arm64: dts: imx8mp-evk: correct gpio-led pad settings
arm64: dts: imx8mp-evk: correct vbus pad settings
arm64: dts: imx8mp-evk: correct eqos pad settings
arm64: dts: imx8mp-evk: correct I2C1 pad settings
arm64: dts: imx8mp-evk: correct I2C3 pad settings
arm64: dts: imx8mp-phyboard-pollux-rdk: correct uart pad settings
arm64: dts: imx8mp-phyboard-pollux-rdk: correct eqos pad settings
arm64: dts: imx8mp-phyboard-pollux-rdk: correct i2c2 & mmc settings
Peter Robinson (1):
dmaengine: imx-sdma: Allow imx8m for imx7 FW revs
Peter Ujfalusi (1):
ASoC: rt5682: Fix deadlock on resume
Pierre-Louis Bossart (1):
ASoC: codecs: rt700/rt711/rt711-sdca: resume bus/codec in .set_jack_detect
Po-Hsu Lin (1):
Revert "selftests/bpf: Add test for bpf_timer overwriting crash"
Qu Wenruo (1):
btrfs: remove device item and update super block in the same transaction
Quinn Tran (2):
scsi: qla2xxx: Fix laggy FC remote port session recovery
scsi: qla2xxx: edif: Replace list_for_each_safe with list_for_each_entry_safe
Rafael J. Wysocki (1):
PM: runtime: Redefine pm_runtime_release_supplier()
Rex-BC Chen (1):
drm/mediatek: Add vblank register/unregister callback functions
Rhett Aultman (1):
can: gs_usb: gs_usb_open/close(): fix memory leak
Richard Gong (1):
drm/amdgpu: vi: disable ASPM on Intel Alder Lake based systems
Rick Lindsley (1):
ibmvnic: Properly dispose of all skbs during a failover.
Roi Dayan (4):
net/mlx5e: Check action fwd/drop flag exists also for nic flows net/mlx5e: Split actions_match_supported() into a sub function net/mlx5e: TC, Reject rules with drop and modify hdr action net/mlx5e: TC, Reject rules with forward and drop actions
Samuel Holland (2):
pinctrl: sunxi: a83t: Fix NAND function name for some pins
dt-bindings: dma: allwinner,sun50i-a64-dma: Fix min/max typo
Satish Nagireddy (1):
i2c: cadence: Unregister the clk notifier in error path
Sean Christopherson (3):
KVM: x86/mmu: Use yield-safe TDP MMU root iter in MMU notifier unmapping
KVM: x86/mmu: Use common TDP MMU zap helper for MMU notifier unmap hook
KVM: Initialize debugfs_dentry when a VM is created to avoid NULL deref
Sean Wang (2):
mt76: mt76_connac: fix MCU_CE_CMD_SET_ROC definition error
Bluetooth: btmtksdio: fix use-after-free at btmtksdio_recv_event
Sean Young (1):
media: ir_toy: prevent device from hanging during transmit
Sebastian Andrzej Siewior (1):
batman-adv: Use netif_rx().
Seevalamuthu Mariappan (1):
ath11k: add hw_param for wakeup_mhi
Shai Malin (1):
qed: Improve the stack space of filter_config()
Sherry Sun (1):
arm64: dts: imx8mp-evk: correct the uart2 pinctl value
Shuah Khan (4):
module: change to print useful messages from elf_validity_check()
misc: rtsx_usb: fix use of dma mapped buffer for usb bulk transfer
misc: rtsx_usb: use separate command and response buffers
misc: rtsx_usb: set return value in rsp_buf alloc err path
Stephan Gerhold (1):
arm64: dts: qcom: msm8992-*: Fix vdd_lvs1_2-supply typo
Sukadev Bhattiprolu (3):
ibmvnic: init init_done_rc earlier
ibmvnic: clear fop when retrying probe
ibmvnic: Allow queueing resets during probe
Tadeusz Struk (1):
uapi/linux/stddef.h: Add include guards
Takashi Iwai (2):
ALSA: usb-audio: Workarounds for Behringer UMC 204/404 HD
ALSA: cs46xx: Fix missing snd_card_free() call at probe error
Tang Bin (1):
Input: cpcap-pwrbutton - handle errors from platform_get_irq()
Tejun Heo (1):
block: fix rq-qos breakage from skipping rq_qos_done_bio()
Thomas Hellström (2):
drm/i915/gt: Register the migrate contexts with their engines drm/i915: Fix a race between vma / object destruction and unbinding
Thomas Kopp (2):
can: mcp251xfd: mcp251xfd_regmap_crc_read(): improve workaround handling for mcp2517fd
can: mcp251xfd: mcp251xfd_regmap_crc_read(): update workaround broken CRC on TBC register
Tim Crawford (1):
ALSA: hda/realtek: Add quirk for Clevo L140PU
Tom Rix (1):
btrfs: fix use of uninitialized variable at rm device ioctl
Tudor Ambarus (1):
mtd: spi-nor: Skip erase logic when SPI_NOR_NO_ERASE is set
Ville Syrjälä (1):
drm/i915: Replace the unconditional clflush with drm_clflush_virt_range()
Vladimir Lypak (1):
dt-bindings: soc: qcom: smd-rpm: Add compatible for MSM8953 SoC
Vladimir Oltean (3):
selftests: forwarding: fix flood_unicast_test when h2 supports IFF_UNICAST_FLT
selftests: forwarding: fix learning_test when h1 supports IFF_UNICAST_FLT
selftests: forwarding: fix error message in learning_test
Wu Bo (1):
drbd: Fix double free problem in drbd_create_device
Xiaomeng Tong (2):
drbd: fix an invalid memory access caused by incorrect use of list iterator
ASoC: rt5682: fix an incorrect NULL check on list iterator
Ye Guojin (1):
virtio-blk: modify the value type of num in virtio_queue_rq()
Yian Chen (1):
iommu/vt-d: Fix PCI bus rescan device hot add
Zhenguo Zhao (2):
tty: n_gsm: Modify CR,PF bit when config requester
tty: n_gsm: Save dlci address open status when config requester
[email protected] (1):
tty: n_gsm: fix encoding of command/response bit
luofei (1):
mm/hwpoison: avoid the impact of hwpoison_filter() return value on mce handler
tiancyin (1):
drm/amd/vcn: fix an error msg on vcn 3.0
Greg Kroah-Hartman
maintainerDocumentation/devicetree/bindings/dma/allwinner,sun50i-a64-dma.yaml +1 -1
@@ -64,7 +64,7 @@ if: then: properties: clocks: - maxItems: 2 + minItems: 2 required: - clock-names
Documentation/devicetree/bindings/soc/qcom/qcom,smd-rpm.yaml +3 -0
@@ -34,6 +34,8 @@ properties: - qcom,rpm-ipq6018 - qcom,rpm-msm8226 - qcom,rpm-msm8916 + - qcom,rpm-msm8936 + - qcom,rpm-msm8953 - qcom,rpm-msm8974 - qcom,rpm-msm8976 - qcom,rpm-msm8996
@@ -57,6 +59,7 @@ if: - qcom,rpm-apq8084 - qcom,rpm-msm8916 - qcom,rpm-msm8974 + - qcom,rpm-msm8953 then: required: - qcom,smd-channels
MAINTAINERS +2 -1
@@ -7952,9 +7952,10 @@ F: drivers/media/usb/go7007/ GOODIX TOUCHSCREEN M: Bastien Nocera <[email protected]> +M: Hans de Goede <[email protected]> L: [email protected] S: Maintained -F: drivers/input/touchscreen/goodix.c +F: drivers/input/touchscreen/goodix* GOOGLE ETHERNET DRIVERS M: Jeroen de Borst <[email protected]>
Makefile +16 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 15 -SUBLEVEL = 53 +SUBLEVEL = 54 EXTRAVERSION = NAME = Trick or Treat
@@ -1011,6 +1011,21 @@ ifdef CONFIG_CC_IS_GCC KBUILD_CFLAGS += -Wno-maybe-uninitialized endif +ifdef CONFIG_CC_IS_GCC +# The allocators already balk at large sizes, so silence the compiler +# warnings for bounds checks involving those possible values. While +# -Wno-alloc-size-larger-than would normally be used here, earlier versions +# of gcc (<9.1) weirdly don't handle the option correctly when _other_ +# warnings are produced (?!). Using -Walloc-size-larger-than=SIZE_MAX +# doesn't work (as it is documented to), silently resolving to "0" prior to +# version 9.1 (and producing an error more recently). Numeric values larger +# than PTRDIFF_MAX also don't work prior to version 9.1, which are silently +# ignored, continuing to default to PTRDIFF_MAX. So, left with no other +# choice, we must perform a versioned check to disable this warning. +# https://lore.kernel.org/lkml/[email protected] +KBUILD_CFLAGS += $(call cc-ifversion, -ge, 0901, -Wno-alloc-size-larger-than) +endif + # disable invalid "can't wrap" optimizations for signed / pointers KBUILD_CFLAGS += -fno-strict-overflow
arch/arm/boot/dts/at91-sam9x60ek.dts +1 -2
@@ -233,10 +233,9 @@ i2c0: i2c@600 { status = "okay"; eeprom@53 { - compatible = "atmel,24c32"; + compatible = "atmel,24c02"; reg = <0x53>; pagesize = <16>; - size = <128>; status = "okay"; }; };
arch/arm/boot/dts/at91-sama5d2_icp.dts +3 -3
@@ -323,21 +323,21 @@ &i2c1 { status = "okay"; eeprom@50 { - compatible = "atmel,24c32"; + compatible = "atmel,24c02"; reg = <0x50>; pagesize = <16>; status = "okay"; }; eeprom@52 { - compatible = "atmel,24c32"; + compatible = "atmel,24c02"; reg = <0x52>; pagesize = <16>; status = "disabled"; }; eeprom@53 { - compatible = "atmel,24c32"; + compatible = "atmel,24c02"; reg = <0x53>; pagesize = <16>; status = "disabled";
arch/arm/boot/dts/stm32mp151.dtsi +2 -2
@@ -1452,7 +1452,7 @@ stmmac_axi_config_0: stmmac-axi-config { usbh_ohci: usb@5800c000 { compatible = "generic-ohci"; reg = <0x5800c000 0x1000>; - clocks = <&rcc USBH>; + clocks = <&usbphyc>, <&rcc USBH>; resets = <&rcc USBH_R>; interrupts = <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>; status = "disabled";
@@ -1461,7 +1461,7 @@ usbh_ohci: usb@5800c000 { usbh_ehci: usb@5800d000 { compatible = "generic-ehci"; reg = <0x5800d000 0x1000>; - clocks = <&rcc USBH>; + clocks = <&usbphyc>, <&rcc USBH>; resets = <&rcc USBH_R>; interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>; companion = <&usbh_ohci>;
arch/arm/configs/mxs_defconfig +1 -0
@@ -93,6 +93,7 @@ CONFIG_REGULATOR_FIXED_VOLTAGE=y CONFIG_DRM=y CONFIG_DRM_PANEL_SEIKO_43WVF1G=y CONFIG_DRM_MXSFB=y +CONFIG_FB=y CONFIG_FB_MODE_HELPERS=y CONFIG_LCD_CLASS_DEVICE=y CONFIG_BACKLIGHT_CLASS_DEVICE=y
arch/arm/include/asm/arch_gicv3.h +1 -6
@@ -48,6 +48,7 @@ static inline u32 read_ ## a64(void) \return read_sysreg (a32); \ } \ +CPUIF_MAP(ICC_EOIR1, ICC_EOIR1_EL1) CPUIF_MAP(ICC_PMR, ICC_PMR_EL1) CPUIF_MAP(ICC_AP0R0, ICC_AP0R0_EL1)CPUIF_MAP (ICC_AP0R1 ,ICC_AP0R1_EL1 )
@@ -63,12 +64,6 @@ CPUIF_MAP(ICC_AP1R3, ICC_AP1R3_EL1)/* Low-level accessors */ -static inline void gic_write_eoir (u32 irq) -{ -write_sysreg (irq,ICC_EOIR1 ); -isb (); -} -static inline void gic_write_dir (u32 val) {write_sysreg (val,ICC_DIR );
arch/arm/mach-at91/pm.c +5 -5
@@ -146,7 +146,7 @@ static const struct wakeup_source_info ws_info[] = {static const struct of_device_id sama5d2_ws_ids[] = { { .compatible ="atmel,sama5d2-gem" , .data = &ws_info[0 ] }, - { .compatible ="atmel,at91rm9200-rtc" , .data = &ws_info[1 ] }, + { .compatible ="atmel,sama5d2-rtc" , .data = &ws_info[1 ] }, { .compatible ="atmel,sama5d3-udc" , .data = &ws_info[2 ] }, { .compatible ="atmel,at91rm9200-ohci" , .data = &ws_info[2 ] }, { .compatible ="usb-ohci" , .data = &ws_info[2 ] },
@@ -157,24 +157,24 @@ static const struct of_device_id sama5d2_ws_ids[] = { };static const struct of_device_id sam9x60_ws_ids[] = { - { .compatible ="atmel,at91sam9x5-rtc" , .data = &ws_info[1 ] }, + { .compatible ="microchip,sam9x60-rtc" , .data = &ws_info[1 ] }, { .compatible ="atmel,at91rm9200-ohci" , .data = &ws_info[2 ] }, { .compatible ="usb-ohci" , .data = &ws_info[2 ] }, { .compatible ="atmel,at91sam9g45-ehci" , .data = &ws_info[2 ] }, { .compatible ="usb-ehci" , .data = &ws_info[2 ] }, - { .compatible ="atmel,at91sam9260-rtt" , .data = &ws_info[4 ] }, + { .compatible ="microchip,sam9x60-rtt" , .data = &ws_info[4 ] }, { .compatible ="cdns,sam9x60-macb" , .data = &ws_info[5 ] }, {/* sentinel */ } };static const struct of_device_id sama7g5_ws_ids[] = { - { .compatible ="atmel,at91sam9x5-rtc" , .data = &ws_info[1 ] }, + { .compatible ="microchip,sama7g5-rtc" , .data = &ws_info[1 ] }, { .compatible ="microchip,sama7g5-ohci" , .data = &ws_info[2 ] }, { .compatible ="usb-ohci" , .data = &ws_info[2 ] }, { .compatible ="atmel,at91sam9g45-ehci" , .data = &ws_info[2 ] }, { .compatible ="usb-ehci" , .data = &ws_info[2 ] }, { .compatible ="microchip,sama7g5-sdhci" , .data = &ws_info[3 ] }, - { .compatible ="atmel,at91sam9260-rtt" , .data = &ws_info[4 ] }, + { .compatible ="microchip,sama7g5-rtt" , .data = &ws_info[4 ] }, {/* sentinel */ } };
arch/arm/mach-meson/platsmp.c +2 -0
@@ -71,6 +71,7 @@ static void __init meson_smp_prepare_cpus(const char *scu_compatible, } sram_base =of_iomap (node,0 ); +of_node_put (node);if (!sram_base) {pr_err ("Couldn't map SRAM registers\n" );return ;
@@ -91,6 +92,7 @@ static void __init meson_smp_prepare_cpus(const char *scu_compatible, } scu_base =of_iomap (node,0 ); +of_node_put (node);if (!scu_base) {pr_err ("Couldn't map SCU registers\n" );return ;
arch/arm64/boot/dts/freescale/imx8mp-evk.dts +27 -27
110 lines not on this page · raw message
arch/arm64/boot/dts/freescale/imx8mp-phyboard-pollux-rdk.dts +24 -24
93 lines not on this page · raw message
arch/arm64/boot/dts/qcom/msm8992-bullhead-rev-101.dts +1 -1
@@ -74,7 +74,7 @@ pm8994_regulators: pm8994-regulators { vdd_l17_29-supply = <&vph_pwr>; vdd_l20_21-supply = <&vph_pwr>; vdd_l25-supply = <&pm8994_s5>; - vdd_lvs1_2 = <&pm8994_s4>; + vdd_lvs1_2-supply = <&pm8994_s4>; /* S1, S2, S6 and S12 are managed by RPMPD */
arch/arm64/boot/dts/qcom/msm8992-xiaomi-libra.dts +1 -1
@@ -142,7 +142,7 @@ pm8994-regulators { vdd_l17_29-supply = <&vph_pwr>; vdd_l20_21-supply = <&vph_pwr>; vdd_l25-supply = <&pm8994_s5>; - vdd_lvs1_2 = <&pm8994_s4>; + vdd_lvs1_2-supply = <&pm8994_s4>; /* S1, S2, S6 and S12 are managed by RPMPD */
arch/arm64/boot/dts/qcom/msm8994.dtsi +2 -2
@@ -93,7 +93,7 @@ CPU5: cpu@101 { CPU6: cpu@102 { device_type = "cpu"; compatible = "arm,cortex-a57"; - reg = <0x0 0x101>; + reg = <0x0 0x102>; enable-method = "psci"; next-level-cache = <&L2_1>; };
@@ -101,7 +101,7 @@ CPU6: cpu@102 { CPU7: cpu@103 { device_type = "cpu"; compatible = "arm,cortex-a57"; - reg = <0x0 0x101>; + reg = <0x0 0x103>; enable-method = "psci"; next-level-cache = <&L2_1>; };
arch/arm64/boot/dts/qcom/sdm845.dtsi +1 -1
@@ -4147,7 +4147,7 @@ mdss: mdss@ae00000 { power-domains = <&dispcc MDSS_GDSC>; - clocks = <&gcc GCC_DISP_AHB_CLK>, + clocks = <&dispcc DISP_CC_MDSS_AHB_CLK>, <&dispcc DISP_CC_MDSS_MDP_CLK>; clock-names = "iface", "core";
arch/arm64/include/asm/arch_gicv3.h +0 -6
@@ -26,12 +26,6 @@* sets the GP register's most significant bits to 0 with an explicit cast. */ -static inline void gic_write_eoir (u32 irq) -{ -write_sysreg_s (irq,SYS_ICC_EOIR1_EL1 ); -isb (); -} - static __always_inline void gic_write_dir(u32 irq) {write_sysreg_s (irq,SYS_ICC_DIR_EL1 );
arch/arm64/net/bpf_jit_comp.c +4 -1
@@ -788,7 +788,10 @@ static int build_insn(const struct bpf_insn *insn, struct jit_ctx *ctx,u64 imm64; imm64 = (u64 )insn1.imm <<32 | (u32 )imm; -emit_a64_mov_i64 (dst, imm64, ctx); +if (bpf_pseudo_func (insn)) +emit_addr_mov_i64 (dst, imm64, ctx); +else +emit_a64_mov_i64 (dst, imm64, ctx);return 1 ; }
arch/powerpc/boot/crt0.S +15 -16
@@ -226,16 +226,19 @@ p_base: mflr r10 /* r10 now points to runtime addr of p_base */ #ifdef __powerpc64__ #define PROM_FRAME_SIZE 512 -#define SAVE_GPR(n, base) std n,8*(n)(base) -#define REST_GPR(n, base) ld n,8*(n)(base) -#define SAVE_2GPRS(n, base) SAVE_GPR(n, base); SAVE_GPR(n+1, base) -#define SAVE_4GPRS(n, base) SAVE_2GPRS(n, base); SAVE_2GPRS(n+2, base) -#define SAVE_8GPRS(n, base) SAVE_4GPRS(n, base); SAVE_4GPRS(n+4, base) -#define SAVE_10GPRS(n, base) SAVE_8GPRS(n, base); SAVE_2GPRS(n+8, base) -#define REST_2GPRS(n, base) REST_GPR(n, base); REST_GPR(n+1, base) -#define REST_4GPRS(n, base) REST_2GPRS(n, base); REST_2GPRS(n+2, base) -#define REST_8GPRS(n, base) REST_4GPRS(n, base); REST_4GPRS(n+4, base) -#define REST_10GPRS(n, base) REST_8GPRS(n, base); REST_2GPRS(n+8, base) + +.macro OP_REGS op, width, start, end, base, offset + .Lreg=\start + .rept (\end - \start + 1) + \op .Lreg,\offset+\width*.Lreg(\base) + .Lreg=.Lreg+1 + .endr +.endm + +#define SAVE_GPRS(start, end, base) OP_REGS std, 8, start, end, base, 0 +#define REST_GPRS(start, end, base) OP_REGS ld, 8, start, end, base, 0 +#define SAVE_GPR(n, base) SAVE_GPRS(n, n, base) +#define REST_GPR(n, base) REST_GPRS(n, n, base) /* prom handles the jump into and return from firmware. The prom args pointer is loaded in r3. */
@@ -246,9 +249,7 @@ prom: stdu r1,-PROM_FRAME_SIZE(r1) /* Save SP and create stack space */ SAVE_GPR(2, r1) - SAVE_GPR(13, r1) - SAVE_8GPRS(14, r1) - SAVE_10GPRS(22, r1) + SAVE_GPRS(13, 31, r1) mfcr r10 std r10,8*32(r1) mfmsr r10
@@ -283,9 +284,7 @@ prom: /* Restore other registers */ REST_GPR(2, r1) - REST_GPR(13, r1) - REST_8GPRS(14, r1) - REST_10GPRS(22, r1) + REST_GPRS(13, 31, r1) ld r10,8*32(r1) mtcr r10
arch/powerpc/crypto/md5-asm.S +3 -7
@@ -38,15 +38,11 @@ #define INITIALIZE \ PPC_STLU r1,-INT_FRAME_SIZE(r1); \ - SAVE_8GPRS(14, r1); /* push registers onto stack */ \ - SAVE_4GPRS(22, r1); \ - SAVE_GPR(26, r1) + SAVE_GPRS(14, 26, r1) /* push registers onto stack */ #define FINALIZE \ - REST_8GPRS(14, r1); /* pop registers from stack */ \ - REST_4GPRS(22, r1); \ - REST_GPR(26, r1); \ - addi r1,r1,INT_FRAME_SIZE; + REST_GPRS(14, 26, r1); /* pop registers from stack */ \ + addi r1,r1,INT_FRAME_SIZE #ifdef __BIG_ENDIAN__ #define LOAD_DATA(reg, off) \
arch/powerpc/crypto/sha1-powerpc-asm.S +2 -4
@@ -125,8 +125,7 @@ _GLOBAL(powerpc_sha_transform) PPC_STLU r1,-INT_FRAME_SIZE(r1) - SAVE_8GPRS(14, r1) - SAVE_10GPRS(22, r1) + SAVE_GPRS(14, 31, r1) /* Load up A - E */ lwz RA(0),0(r3) /* A */
@@ -184,7 +183,6 @@ _GLOBAL(powerpc_sha_transform) stw RD(0),12(r3) stw RE(0),16(r3) - REST_8GPRS(14, r1) - REST_10GPRS(22, r1) + REST_GPRS(14, 31, r1) addi r1,r1,INT_FRAME_SIZE blr
arch/powerpc/include/asm/ppc_asm.h +27 -16
57 lines not on this page · raw message
arch/powerpc/kernel/entry_32.S +9 -14
@@ -90,8 +90,7 @@ transfer_to_syscall: stw r12,8(r1) stw r2,_TRAP(r1) SAVE_GPR(0, r1) - SAVE_4GPRS(3, r1) - SAVE_2GPRS(7, r1) + SAVE_GPRS(3, 8, r1) addi r2,r10,-THREAD SAVE_NVGPRS(r1)
@@ -139,7 +138,7 @@ syscall_exit_finish: mtxer r5 lwz r0,GPR0(r1) lwz r3,GPR3(r1) - REST_8GPRS(4,r1) + REST_GPRS(4, 11, r1) lwz r12,GPR12(r1) b 1b
@@ -232,9 +231,9 @@ fast_exception_return: beq 3f /* if not, we've got problems */ #endif -2: REST_4GPRS(3, r11) +2: REST_GPRS(3, 6, r11) lwz r10,_CCR(r11) - REST_2GPRS(1, r11) + REST_GPRS(1, 2, r11) mtcr r10 lwz r10,_LINK(r11) mtlr r10
@@ -298,16 +297,14 @@ ALT_FTR_SECTION_END_IFCLR(CPU_FTR_STCX_CHECKS_ADDRESS) * the reliable stack unwinder later on. Clear it. */ stw r0,8(r1) - REST_4GPRS(7, r1) - REST_2GPRS(11, r1) + REST_GPRS(7, 12, r1) mtcr r3 mtlr r4 mtctr r5 mtspr SPRN_XER,r6 - REST_4GPRS(2, r1) - REST_GPR(6, r1) + REST_GPRS(2, 6, r1) REST_GPR(0, r1) REST_GPR(1, r1) rfi
@@ -341,8 +338,7 @@ ALT_FTR_SECTION_END_IFCLR(CPU_FTR_STCX_CHECKS_ADDRESS) lwz r6,_CCR(r1) li r0,0 - REST_4GPRS(7, r1) - REST_2GPRS(11, r1) + REST_GPRS(7, 12, r1) mtlr r3 mtctr r4
@@ -354,7 +350,7 @@ ALT_FTR_SECTION_END_IFCLR(CPU_FTR_STCX_CHECKS_ADDRESS) */ stw r0,8(r1) - REST_4GPRS(2, r1) + REST_GPRS(2, 5, r1) bne- cr1,1f /* emulate stack store */ mtcr r6
@@ -430,8 +426,7 @@ _ASM_NOKPROBE_SYMBOL(interrupt_return) bne interrupt_return; \ lwz r0,GPR0(r1); \ lwz r2,GPR2(r1); \ - REST_4GPRS(3, r1); \ - REST_2GPRS(7, r1); \ + REST_GPRS(3, 8, r1); \ lwz r10,_XER(r1); \ lwz r11,_CTR(r1); \ mtspr SPRN_XER,r10; \
arch/powerpc/kernel/exceptions-64e.S +4 -10
@@ -198,8 +198,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_EMB_HV) stdcx. r0,0,r1 /* to clear the reservation */ - REST_4GPRS(2, r1) - REST_4GPRS(6, r1) + REST_GPRS(2, 9, r1) ld r10,_CTR(r1) ld r11,_XER(r1)
@@ -375,9 +374,7 @@ ret_from_mc_except: exc_##n##_common: \ std r0,GPR0(r1); /* save r0 in stackframe */ \ std r2,GPR2(r1); /* save r2 in stackframe */ \ - SAVE_4GPRS(3, r1); /* save r3 - r6 in stackframe */ \ - SAVE_2GPRS(7, r1); /* save r7, r8 in stackframe */ \ - std r9,GPR9(r1); /* save r9 in stackframe */ \ + SAVE_GPRS(3, 9, r1); /* save r3 - r9 in stackframe */ \ std r10,_NIP(r1); /* save SRR0 to stackframe */ \ std r11,_MSR(r1); /* save SRR1 to stackframe */ \ beq 2f; /* if from kernel mode */ \
@@ -1061,9 +1058,7 @@ bad_stack_book3e: std r11,_ESR(r1) std r0,GPR0(r1); /* save r0 in stackframe */ \ std r2,GPR2(r1); /* save r2 in stackframe */ \ - SAVE_4GPRS(3, r1); /* save r3 - r6 in stackframe */ \ - SAVE_2GPRS(7, r1); /* save r7, r8 in stackframe */ \ - std r9,GPR9(r1); /* save r9 in stackframe */ \ + SAVE_GPRS(3, 9, r1); /* save r3 - r9 in stackframe */ \ ld r3,PACA_EXGEN+EX_R10(r13);/* get back r10 */ \ ld r4,PACA_EXGEN+EX_R11(r13);/* get back r11 */ \ mfspr r5,SPRN_SPRG_GEN_SCRATCH;/* get back r13 XXX can be wrong */ \
@@ -1077,8 +1072,7 @@ bad_stack_book3e: std r10,_LINK(r1) std r11,_CTR(r1) std r12,_XER(r1) - SAVE_10GPRS(14,r1) - SAVE_8GPRS(24,r1) + SAVE_GPRS(14, 31, r1) lhz r12,PACA_TRAP_SAVE(r13) std r12,_TRAP(r1) addi r11,r1,INT_FRAME_SIZE
arch/powerpc/kernel/exceptions-64s.S +2 -4
@@ -574,8 +574,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_CFAR) ld r10,IAREA+EX_CTR(r13) std r10,_CTR(r1) std r2,GPR2(r1) /* save r2 in stackframe */ - SAVE_4GPRS(3, r1) /* save r3 - r6 in stackframe */ - SAVE_2GPRS(7, r1) /* save r7, r8 in stackframe */ + SAVE_GPRS(3, 8, r1) /* save r3 - r8 in stackframe */ mflr r9 /* Get LR, later save to stack */ ld r2,PACATOC(r13) /* get kernel TOC into r2 */ std r9,_LINK(r1)
@@ -693,8 +692,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_CFAR) mtlr r9 ld r9,_CCR(r1) mtcr r9 - REST_8GPRS(2, r1) - REST_4GPRS(10, r1) + REST_GPRS(2, 13, r1) REST_GPR(0, r1) /* restore original r1. */ ld r1,GPR1(r1)
arch/powerpc/kernel/head_32.h +1 -2
@@ -115,8 +115,7 @@ _ASM_NOKPROBE_SYMBOL(\name\()_virt) stw r10,8(r1) li r10, \trapno stw r10,_TRAP(r1) - SAVE_4GPRS(3, r1) - SAVE_2GPRS(7, r1) + SAVE_GPRS(3, 8, r1) SAVE_NVGPRS(r1) stw r2,GPR2(r1) stw r12,_NIP(r1)
arch/powerpc/kernel/head_booke.h +1 -2
@@ -87,8 +87,7 @@ END_BTB_FLUSH_SECTION stw r10, 8(r1) li r10, \trapno stw r10,_TRAP(r1) - SAVE_4GPRS(3, r1) - SAVE_2GPRS(7, r1) + SAVE_GPRS(3, 8, r1) SAVE_NVGPRS(r1) stw r2,GPR2(r1) stw r12,_NIP(r1)
arch/powerpc/kernel/interrupt_64.S +13 -21
@@ -166,10 +166,9 @@ END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR) * The value of AMR only matters while we're in the kernel. */ mtcr r2 - ld r2,GPR2(r1) - ld r3,GPR3(r1) - ld r13,GPR13(r1) - ld r1,GPR1(r1) + REST_GPRS(2, 3, r1) + REST_GPR(13, r1) + REST_GPR(1, r1) RFSCV_TO_USER b . /* prevent speculative execution */
@@ -187,9 +186,8 @@ END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR) mtctr r3 mtlr r4 mtspr SPRN_XER,r5 - REST_10GPRS(2, r1) - REST_2GPRS(12, r1) - ld r1,GPR1(r1) + REST_GPRS(2, 13, r1) + REST_GPR(1, r1) RFI_TO_USER .Lsyscall_vectored_\name\()_rst_end:
@@ -378,10 +376,9 @@ END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR) * The value of AMR only matters while we're in the kernel. */ mtcr r2 - ld r2,GPR2(r1) - ld r3,GPR3(r1) - ld r13,GPR13(r1) - ld r1,GPR1(r1) + REST_GPRS(2, 3, r1) + REST_GPR(13, r1) + REST_GPR(1, r1) RFI_TO_USER b . /* prevent speculative execution */
@@ -392,8 +389,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR) mtctr r3 mtspr SPRN_XER,r4 ld r0,GPR0(r1) - REST_8GPRS(4, r1) - ld r12,GPR12(r1) + REST_GPRS(4, 12, r1) b .Lsyscall_restore_regs_cont .Lsyscall_rst_end:
@@ -522,17 +518,14 @@ ALT_FTR_SECTION_END_IFCLR(CPU_FTR_STCX_CHECKS_ADDRESS) ld r6,_XER(r1) li r0,0 - REST_4GPRS(7, r1) - REST_2GPRS(11, r1) - REST_GPR(13, r1) + REST_GPRS(7, 13, r1) mtcr r3 mtlr r4 mtctr r5 mtspr SPRN_XER,r6 - REST_4GPRS(2, r1) - REST_GPR(6, r1) + REST_GPRS(2, 6, r1) REST_GPR(0, r1) REST_GPR(1, r1) .ifc \srr,srr
@@ -629,8 +622,7 @@ ALT_FTR_SECTION_END_IFCLR(CPU_FTR_STCX_CHECKS_ADDRESS) ld r6,_CCR(r1) li r0,0 - REST_4GPRS(7, r1) - REST_2GPRS(11, r1) + REST_GPRS(7, 12, r1) mtlr r3 mtctr r4
@@ -642,7 +634,7 @@ ALT_FTR_SECTION_END_IFCLR(CPU_FTR_STCX_CHECKS_ADDRESS) */ std r0,STACK_FRAME_OVERHEAD-16(r1) - REST_4GPRS(2, r1) + REST_GPRS(2, 5, r1) bne- cr1,1f /* emulate stack store */ mtcr r6
arch/powerpc/kernel/optprobes_head.S +2 -2
@@ -10,8 +10,8 @@ #include <asm/asm-offsets.h> #ifdef CONFIG_PPC64 -#define SAVE_30GPRS(base) SAVE_10GPRS(2,base); SAVE_10GPRS(12,base); SAVE_10GPRS(22,base) -#define REST_30GPRS(base) REST_10GPRS(2,base); REST_10GPRS(12,base); REST_10GPRS(22,base) +#define SAVE_30GPRS(base) SAVE_GPRS(2, 31, base) +#define REST_30GPRS(base) REST_GPRS(2, 31, base) #define TEMPLATE_FOR_IMM_LOAD_INSNS nop; nop; nop; nop; nop #else #define SAVE_30GPRS(base) stmw r2, GPR2(base)
arch/powerpc/kernel/tm.S +19 -19
@@ -226,11 +226,8 @@ _GLOBAL(tm_reclaim) /* Sync the userland GPRs 2-12, 14-31 to thread->regs: */ SAVE_GPR(0, r7) /* user r0 */ - SAVE_GPR(2, r7) /* user r2 */ - SAVE_4GPRS(3, r7) /* user r3-r6 */ - SAVE_GPR(8, r7) /* user r8 */ - SAVE_GPR(9, r7) /* user r9 */ - SAVE_GPR(10, r7) /* user r10 */ + SAVE_GPRS(2, 6, r7) /* user r2-r6 */ + SAVE_GPRS(8, 10, r7) /* user r8-r10 */ ld r3, GPR1(r1) /* user r1 */ ld r4, GPR7(r1) /* user r7 */ ld r5, GPR11(r1) /* user r11 */
@@ -445,12 +442,9 @@ restore_gprs: ld r6, THREAD_TM_PPR(r3) REST_GPR(0, r7) /* GPR0 */ - REST_2GPRS(2, r7) /* GPR2-3 */ - REST_GPR(4, r7) /* GPR4 */ - REST_4GPRS(8, r7) /* GPR8-11 */ - REST_2GPRS(12, r7) /* GPR12-13 */ - - REST_NVGPRS(r7) /* GPR14-31 */ + REST_GPRS(2, 4, r7) /* GPR2-4 */ + REST_GPRS(8, 12, r7) /* GPR8-12 */ + REST_GPRS(14, 31, r7) /* GPR14-31 */ /* Load up PPR and DSCR here so we don't run with user values for long */ mtspr SPRN_DSCR, r5
@@ -486,18 +480,24 @@ restore_gprs: REST_GPR(6, r7) /* - * Store r1 and r5 on the stack so that we can access them after we - * clear MSR RI. + * Store user r1 and r5 and r13 on the stack (in the unused save + * areas / compiler reserved areas), so that we can access them after + * we clear MSR RI. */ REST_GPR(5, r7) std r5, -8(r1) - ld r5, GPR1(r7) + ld r5, GPR13(r7) std r5, -16(r1) + ld r5, GPR1(r7) + std r5, -24(r1) REST_GPR(7, r7) - /* Clear MSR RI since we are about to use SCRATCH0. EE is already off */ + /* Stash the stack pointer away for use after recheckpoint */ + std r1, PACAR1(r13) + + /* Clear MSR RI since we are about to clobber r13. EE is already off */ li r5, 0 mtmsrd r5, 1
@@ -508,9 +508,9 @@ restore_gprs: * until we turn MSR RI back on. */ - SET_SCRATCH0(r1) ld r5, -8(r1) - ld r1, -16(r1) + ld r13, -16(r1) + ld r1, -24(r1) /* Commit register state as checkpointed state: */ TRECHKPT
@@ -526,9 +526,9 @@ restore_gprs: */ GET_PACA(r13) - GET_SCRATCH0(r1) + ld r1, PACAR1(r13) - /* R1 is restored, so we are recoverable again. EE is still off */ + /* R13, R1 is restored, so we are recoverable again. EE is still off */ li r4, MSR_RI mtmsrd r4, 1
arch/powerpc/kernel/trace/ftrace_64_mprofile.S +6 -9
@@ -41,15 +41,14 @@ _GLOBAL(ftrace_regs_caller) /* Save all gprs to pt_regs */ SAVE_GPR(0, r1) - SAVE_10GPRS(2, r1) + SAVE_GPRS(2, 11, r1) /* Ok to continue? */ lbz r3, PACA_FTRACE_ENABLED(r13) cmpdi r3, 0 beq ftrace_no_trace - SAVE_10GPRS(12, r1) - SAVE_10GPRS(22, r1) + SAVE_GPRS(12, 31, r1) /* Save previous stack pointer (r1) */ addi r8, r1, SWITCH_FRAME_SIZE
@@ -108,10 +107,8 @@ ftrace_regs_call: #endif /* Restore gprs */ - REST_GPR(0,r1) - REST_10GPRS(2,r1) - REST_10GPRS(12,r1) - REST_10GPRS(22,r1) + REST_GPR(0, r1) + REST_GPRS(2, 31, r1) /* Restore possibly modified LR */ ld r0, _LINK(r1)
@@ -157,7 +154,7 @@ _GLOBAL(ftrace_caller) stdu r1, -SWITCH_FRAME_SIZE(r1) /* Save all gprs to pt_regs */ - SAVE_8GPRS(3, r1) + SAVE_GPRS(3, 10, r1) lbz r3, PACA_FTRACE_ENABLED(r13) cmpdi r3, 0
@@ -194,7 +191,7 @@ ftrace_call: mtctr r3 /* Restore gprs */ - REST_8GPRS(3,r1) + REST_GPRS(3, 10, r1) /* Restore callee's TOC */ ld r2, 24(r1)
arch/powerpc/kvm/book3s_hv_rmhandlers.S +2 -3
@@ -2711,8 +2711,7 @@ kvmppc_bad_host_intr: std r0, GPR0(r1) std r9, GPR1(r1) std r2, GPR2(r1) - SAVE_4GPRS(3, r1) - SAVE_2GPRS(7, r1) + SAVE_GPRS(3, 8, r1) srdi r0, r12, 32 clrldi r12, r12, 32 std r0, _CCR(r1)
@@ -2735,7 +2734,7 @@ kvmppc_bad_host_intr: ld r9, HSTATE_SCRATCH2(r13) ld r12, HSTATE_SCRATCH0(r13) GET_SCRATCH0(r0) - SAVE_4GPRS(9, r1) + SAVE_GPRS(9, 12, r1) std r0, GPR13(r1) SAVE_NVGPRS(r1) ld r5, HSTATE_CFAR(r13)
arch/powerpc/kvm/book3s_hv_uvmem.c +1 -1
@@ -251,7 +251,7 @@ int kvmppc_uvmem_slot_init(struct kvm *kvm, const struct kvm_memory_slot *slot) p =kzalloc (sizeof (*p),GFP_KERNEL );if (!p)return -ENOMEM ; - p->pfns =vzalloc (array_size (slot->npages,sizeof (*p->pfns))); + p->pfns =vcalloc (slot->npages,sizeof (*p->pfns));if (!p->pfns) {kfree (p);return -ENOMEM ;
arch/powerpc/lib/test_emulate_step_exec_instr.S +3 -5
@@ -37,7 +37,7 @@ _GLOBAL(exec_instr) * The stack pointer (GPR1) and the thread pointer (GPR13) are not * saved as these should not be modified anyway. */ - SAVE_2GPRS(2, r1) + SAVE_GPRS(2, 3, r1) SAVE_NVGPRS(r1) /*
@@ -75,8 +75,7 @@ _GLOBAL(exec_instr) /* Load GPRs from pt_regs */ REST_GPR(0, r31) - REST_10GPRS(2, r31) - REST_GPR(12, r31) + REST_GPRS(2, 12, r31) REST_NVGPRS(r31) /* Placeholder for the test instruction */
@@ -99,8 +98,7 @@ _GLOBAL(exec_instr) subi r3, r3, GPR0 SAVE_GPR(0, r3) SAVE_GPR(2, r3) - SAVE_8GPRS(4, r3) - SAVE_GPR(12, r3) + SAVE_GPRS(4, 12, r3) SAVE_NVGPRS(r3) /* Save resulting LR to pt_regs */
arch/powerpc/platforms/powernv/rng.c +10 -6
@@ -176,12 +176,8 @@ static int __init pnv_get_random_long_early(unsigned long *v) NULL) != pnv_get_random_long_early)return 0 ; -for_each_compatible_node (dn,NULL ,"ibm,power-rng" ) { -if (rng_create (dn)) -continue ; -/* Create devices for hwrng driver */ -of_platform_device_create (dn,NULL ,NULL ); - } +for_each_compatible_node (dn,NULL ,"ibm,power-rng" ) +rng_create (dn);if (!ppc_md.get_random_seed)return 0 ;
@@ -205,10 +201,18 @@ void __init pnv_rng_init(void)static int __init pnv_rng_late_init (void ) { +struct device_node *dn;unsigned long v; +/* In case it wasn't called during init for some other reason. */ if (ppc_md.get_random_seed == pnv_get_random_long_early)pnv_get_random_long_early (&v); + +if (ppc_md.get_random_seed == powernv_get_random_long) { +for_each_compatible_node (dn,NULL ,"ibm,power-rng" ) +of_platform_device_create (dn,NULL ,NULL ); + } +return 0 ; }machine_subsys_initcall (powernv, pnv_rng_late_init);
arch/riscv/configs/defconfig +5 -3
@@ -72,9 +72,11 @@ CONFIG_GPIOLIB=y CONFIG_GPIO_SIFIVE=y # CONFIG_PTP_1588_CLOCK is not set CONFIG_POWER_RESET=y -CONFIG_DRM=y -CONFIG_DRM_RADEON=y -CONFIG_DRM_VIRTIO_GPU=y +CONFIG_DRM=m +CONFIG_DRM_RADEON=m +CONFIG_DRM_NOUVEAU=m +CONFIG_DRM_VIRTIO_GPU=m +CONFIG_FB=y CONFIG_FRAMEBUFFER_CONSOLE=y CONFIG_USB=y CONFIG_USB_XHCI_HCD=y
arch/riscv/configs/rv32_defconfig +1 -0
@@ -71,6 +71,7 @@ CONFIG_POWER_RESET=y CONFIG_DRM=y CONFIG_DRM_RADEON=y CONFIG_DRM_VIRTIO_GPU=y +CONFIG_FB=y CONFIG_FRAMEBUFFER_CONSOLE=y CONFIG_USB=y CONFIG_USB_XHCI_HCD=y
arch/riscv/mm/init.c +1 -0
@@ -265,6 +265,7 @@ pgd_t early_pg_dir[PTRS_PER_PGD] __initdata __aligned(PAGE_SIZE);static pmd_t __maybe_unused early_dtb_pmd[PTRS_PER_PMD ]__initdata __aligned(PAGE_SIZE) ;#ifdef CONFIG_XIP_KERNEL +#define riscv_pfn_base (*(unsigned long *)XIP_FIXUP(&riscv_pfn_base))#define trampoline_pg_dir ((pgd_t *)XIP_FIXUP(trampoline_pg_dir))#define fixmap_pte ((pte_t *)XIP_FIXUP(fixmap_pte))#define early_pg_dir ((pgd_t *)XIP_FIXUP(early_pg_dir))
arch/s390/boot/compressed/decompressor.h +1 -0
@@ -24,6 +24,7 @@ struct vmlinux_info {unsigned long dynsym_start;unsigned long rela_dyn_start;unsigned long rela_dyn_end; +unsigned long amode31_size; };/* Symbols defined by linker scripts */
arch/s390/boot/startup.c +8 -0
@@ -15,6 +15,7 @@#include "uv.h" unsigned long __bootdata_preserved (__kaslr_offset ); +unsigned long __bootdata (__amode31_base );unsigned long __bootdata_preserved (VMALLOC_START );unsigned long __bootdata_preserved (VMALLOC_END );struct page *__bootdata_preserved (vmemmap );
@@ -233,6 +234,12 @@ static void offset_vmlinux_info(unsigned long offset) vmlinux.dynsym_start += offset; } +static unsigned long reserve_amode31 (unsigned long safe_addr) +{ + __amode31_base =PAGE_ALIGN (safe_addr); +return safe_addr + vmlinux.amode31_size; +} +void startup_kernel (void ) {unsigned long random_lma;
@@ -247,6 +254,7 @@ void startup_kernel(void)setup_lpp ();store_ipl_parmblock (); safe_addr =mem_safe_offset (); + safe_addr =reserve_amode31 (safe_addr); safe_addr =read_ipl_report (safe_addr);uv_query_info ();rescue_initrd (safe_addr);
arch/s390/kernel/entry.h +1 -0
@@ -70,5 +70,6 @@ extern struct exception_table_entry _stop_amode31_ex_table[];#define __amode31_data __section(".amode31.data")#define __amode31_ref __section(".amode31.refs")extern long _start_amode31_refs[], _end_amode31_refs[]; +extern unsigned long __amode31_base;#endif /* _ENTRY_H */
arch/s390/kernel/setup.c +13 -18
@@ -95,10 +95,10 @@ EXPORT_SYMBOL(console_irq);* relocated above 2 GB, because it has to use 31 bit addresses. * Such code and data is part of the .amode31 section. */ -unsigned long __amode31_ref __samode31 =__pa (&_samode31); -unsigned long __amode31_ref __eamode31 =__pa (&_eamode31); -unsigned long __amode31_ref __stext_amode31 =__pa (&_stext_amode31); -unsigned long __amode31_ref __etext_amode31 =__pa (&_etext_amode31); +unsigned long __amode31_ref __samode31 = (unsigned long )&_samode31; +unsigned long __amode31_ref __eamode31 = (unsigned long )&_eamode31; +unsigned long __amode31_ref __stext_amode31 = (unsigned long )&_stext_amode31; +unsigned long __amode31_ref __etext_amode31 = (unsigned long )&_etext_amode31; struct exception_table_entry __amode31_ref *__start_amode31_ex_table = _start_amode31_ex_table; struct exception_table_entry __amode31_ref *__stop_amode31_ex_table = _stop_amode31_ex_table;
@@ -149,6 +149,7 @@ struct mem_detect_info __bootdata(mem_detect);struct initrd_data __bootdata (initrd_data );unsigned long __bootdata_preserved (__kaslr_offset ); +unsigned long __bootdata (__amode31_base );unsigned int __bootdata_preserved (zlib_dfltcc_support );EXPORT_SYMBOL (zlib_dfltcc_support);u64 __bootdata_preserved (stfle_fac_list [16 ]);
@@ -796,12 +797,12 @@ static void __init check_initrd(void)*/ static void __init reserve_kernel (void ) { -unsigned long start_pfn =PFN_UP (__pa (_end)); -memblock_reserve (0 ,STARTUP_NORMAL_OFFSET ); -memblock_reserve ((unsigned long )sclp_early_sccb,EXT_SCCB_READ_SCP ); -memblock_reserve ((unsigned long )_stext,PFN_PHYS (start_pfn) - - (unsigned long )_stext); +memblock_reserve (OLDMEM_BASE ,sizeof (unsigned long )); +memblock_reserve (OLDMEM_SIZE ,sizeof (unsigned long )); +memblock_reserve (__amode31_base, __eamode31 - __samode31); +memblock_reserve (__pa (sclp_early_sccb),EXT_SCCB_READ_SCP ); +memblock_reserve (__pa (_stext), _end - _stext); }static void __init setup_memory (void )
@@ -820,20 +821,14 @@ static void __init setup_memory(void)static void __init relocate_amode31_section (void ) { -unsigned long amode31_addr, amode31_size; -long amode31_offset; +unsigned long amode31_size = __eamode31 - __samode31; +long amode31_offset = __amode31_base - __samode31;long *ptr; -/* Allocate a new AMODE31 capable memory region */ - amode31_size = __eamode31 - __samode31;pr_info ("Relocating AMODE31 section of size 0x%08lx\n" , amode31_size); - amode31_addr = (unsigned long )memblock_alloc_low (amode31_size,PAGE_SIZE ); -if (!amode31_addr) -panic ("Failed to allocate memory for AMODE31 section\n" ); - amode31_offset = amode31_addr - __samode31;/* Move original AMODE31 section to the new one */ -memmove ((void *)amode31_addr, (void *)__samode31, amode31_size); +memmove ((void *)__amode31_base, (void *)__samode31, amode31_size);/* Zero out the old AMODE31 section to catch invalid accesses within it */ memset ((void *)__samode31,0 , amode31_size);
arch/s390/kernel/vmlinux.lds.S +1 -0
@@ -212,6 +212,7 @@ SECTIONS QUAD(__dynsym_start) /* dynsym_start */ QUAD(__rela_dyn_start) /* rela_dyn_start */ QUAD(__rela_dyn_end) /* rela_dyn_end */ + QUAD(_eamode31 - _samode31) /* amode31_size */ } :NONE /* Debugging sections. */
arch/s390/kvm/kvm-s390.c +16 -3
@@ -3913,14 +3913,12 @@ static int kvm_s390_handle_requests(struct kvm_vcpu *vcpu)return 0 ; } -void kvm_s390_set_tod_clock (struct kvm *kvm, -const struct kvm_s390_vm_tod_clock *gtod) +static void __kvm_s390_set_tod_clock (struct kvm *kvm,const struct kvm_s390_vm_tod_clock *gtod) {struct kvm_vcpu *vcpu;union tod_clock clk;int i; -mutex_lock (&kvm->lock);preempt_disable ();store_tod_clock_ext (&clk);
@@ -3941,7 +3939,22 @@ void kvm_s390_set_tod_clock(struct kvm *kvm,kvm_s390_vcpu_unblock_all (kvm);preempt_enable (); +} + +void kvm_s390_set_tod_clock (struct kvm *kvm,const struct kvm_s390_vm_tod_clock *gtod) +{ +mutex_lock (&kvm->lock); +__kvm_s390_set_tod_clock (kvm, gtod); +mutex_unlock (&kvm->lock); +} + +int kvm_s390_try_set_tod_clock (struct kvm *kvm,const struct kvm_s390_vm_tod_clock *gtod) +{ +if (!mutex_trylock (&kvm->lock)) +return 0 ; +__kvm_s390_set_tod_clock (kvm, gtod);mutex_unlock (&kvm->lock); +return 1 ; }/**
arch/s390/kvm/kvm-s390.h +2 -2
@@ -326,8 +326,8 @@ int kvm_s390_handle_sigp(struct kvm_vcpu *vcpu);int kvm_s390_handle_sigp_pei (struct kvm_vcpu *vcpu);/* implemented in kvm-s390.c */ -void kvm_s390_set_tod_clock (struct kvm *kvm, -const struct kvm_s390_vm_tod_clock *gtod); +void kvm_s390_set_tod_clock (struct kvm *kvm,const struct kvm_s390_vm_tod_clock *gtod); +int kvm_s390_try_set_tod_clock (struct kvm *kvm,const struct kvm_s390_vm_tod_clock *gtod);long kvm_arch_fault_in_page (struct kvm_vcpu *vcpu,gpa_t gpa,int writable);int kvm_s390_store_status_unloaded (struct kvm_vcpu *vcpu,unsigned long addr);int kvm_s390_vcpu_store_status (struct kvm_vcpu *vcpu,unsigned long addr);
arch/s390/kvm/priv.c +14 -1
@@ -102,7 +102,20 @@ static int handle_set_clock(struct kvm_vcpu *vcpu)return kvm_s390_inject_prog_cond (vcpu, rc);VCPU_EVENT (vcpu,3 ,"SCK: setting guest TOD to 0x%llx" , gtod.tod); -kvm_s390_set_tod_clock (vcpu->kvm, >od); +/* +* To set the TOD clock the kvm lock must be taken, but the vcpu lock +* is already held in handle_set_clock. The usual lock order is the +* opposite. As SCK is deprecated and should not be used in several +* cases, for example when the multiple epoch facility or TOD clock +* steering facility is installed (see Principles of Operation), a +* slow path can be used. If the lock can not be taken via try_lock, +* the instruction will be retried via -EAGAIN at a later point in +* time. +*/ +if (!kvm_s390_try_set_tod_clock (vcpu->kvm, >od)) { +kvm_s390_retry_instr (vcpu); +return -EAGAIN ; + }kvm_s390_set_psw_cc (vcpu,0 );return 0 ;
arch/x86/kernel/cpu/mce/core.c +5 -3
@@ -1297,10 +1297,12 @@ static void kill_me_maybe(struct callback_head *cb)/* * -EHWPOISON from memory_failure() means that it already sent SIGBUS -* to the current process with the proper error info, so no need to -* send SIGBUS here again. +* to the current process with the proper error info, +* -EOPNOTSUPP means hwpoison_filter() filtered the error event, +* +* In both cases, no further processing is required. */ -if (ret == -EHWPOISON ) +if (ret == -EHWPOISON || ret == -EOPNOTSUPP )return ;if (p->mce_vaddr != (void __user *)-1l ) {
arch/x86/kvm/mmu/page_track.c +2 -2
@@ -36,8 +36,8 @@ int kvm_page_track_create_memslot(struct kvm_memory_slot *slot,for (i =0 ; i <KVM_PAGE_TRACK_MAX ; i++) { slot->arch.gfn_track[i] = -kvcalloc (npages,sizeof (*slot->arch.gfn_track[i]), -GFP_KERNEL_ACCOUNT ); +__vcalloc (npages,sizeof (*slot->arch.gfn_track[i]), +GFP_KERNEL_ACCOUNT );if (!slot->arch.gfn_track[i]) goto track_free; }
arch/x86/kvm/mmu/tdp_mmu.c +2 -7
@@ -1098,13 +1098,8 @@ int kvm_tdp_mmu_map(struct kvm_vcpu *vcpu, gpa_t gpa, u32 error_code,bool kvm_tdp_mmu_unmap_gfn_range (struct kvm *kvm,struct kvm_gfn_range *range,bool flush) { -struct kvm_mmu_page *root; - -for_each_tdp_mmu_root (kvm, root, range->slot->as_id) - flush =zap_gfn_range (kvm, root, range->start, range->end, - range->may_block, flush, false); - -return flush; +return __kvm_tdp_mmu_zap_gfn_range (kvm, range->slot->as_id, range->start, + range->end, range->may_block, flush); } typedef bool (*tdp_handler_t)(struct kvm *kvm, struct tdp_iter *iter,
arch/x86/kvm/x86.c +2 -2
@@ -11552,7 +11552,7 @@ static int memslot_rmap_alloc(struct kvm_memory_slot *slot,if (slot->arch.rmap[i])continue ; - slot->arch.rmap[i] =kvcalloc (lpages, sz,GFP_KERNEL_ACCOUNT ); + slot->arch.rmap[i] =__vcalloc (lpages, sz,GFP_KERNEL_ACCOUNT );if (!slot->arch.rmap[i]) {memslot_rmap_free (slot);return -ENOMEM ;
@@ -11633,7 +11633,7 @@ static int kvm_alloc_memslot_metadata(struct kvm *kvm, lpages =__kvm_mmu_slot_lpages (slot, npages, level); - linfo =kvcalloc (lpages,sizeof (*linfo),GFP_KERNEL_ACCOUNT ); + linfo =__vcalloc (lpages,sizeof (*linfo),GFP_KERNEL_ACCOUNT );if (!linfo) goto out_free;
block/bio.c +5 -6
@@ -910,7 +910,7 @@ EXPORT_SYMBOL(bio_add_pc_page);int bio_add_zone_append_page (struct bio *bio,struct page *page,unsigned int len,unsigned int offset) { -struct request_queue *q = bio->bi_bdev->bd_disk->queue; +struct request_queue *q =bdev_get_queue (bio->bi_bdev);bool same_page = false;if (WARN_ON_ONCE (bio_op (bio) !=REQ_OP_ZONE_APPEND ))
@@ -1054,7 +1054,7 @@ static int bio_iov_bvec_set(struct bio *bio, struct iov_iter *iter)static int bio_iov_bvec_set_append (struct bio *bio,struct iov_iter *iter) { -struct request_queue *q = bio->bi_bdev->bd_disk->queue; +struct request_queue *q =bdev_get_queue (bio->bi_bdev);struct iov_iter i = *iter;iov_iter_truncate (&i,queue_max_zone_append_sectors (q) <<9 );
@@ -1132,7 +1132,7 @@ static int __bio_iov_append_get_pages(struct bio *bio, struct iov_iter *iter) {unsigned short nr_pages = bio->bi_max_vecs - bio->bi_vcnt;unsigned short entries_left = bio->bi_max_vecs - bio->bi_vcnt; -struct request_queue *q = bio->bi_bdev->bd_disk->queue; +struct request_queue *q =bdev_get_queue (bio->bi_bdev);unsigned int max_append_sectors =queue_max_zone_append_sectors (q);struct bio_vec *bv = bio->bi_io_vec + bio->bi_vcnt;struct page **pages = (struct page **)bv;
@@ -1470,11 +1470,10 @@ void bio_endio(struct bio *bio)if (!bio_integrity_endio (bio))return ; -if (bio->bi_bdev &&bio_flagged (bio,BIO_TRACKED )) -rq_qos_done_bio (bio->bi_bdev->bd_disk->queue, bio); +rq_qos_done_bio (bio);if (bio->bi_bdev &&bio_flagged (bio,BIO_TRACE_COMPLETION )) { -trace_block_bio_complete (bio->bi_bdev->bd_disk->queue, bio); +trace_block_bio_complete (bdev_get_queue (bio->bi_bdev), bio);bio_clear_flag (bio,BIO_TRACE_COMPLETION ); }
block/blk-iolatency.c +1 -1
@@ -601,7 +601,7 @@ static void blkcg_iolatency_done_bio(struct rq_qos *rqos, struct bio *bio)int inflight =0 ; blkg = bio->bi_blkg; -if (!blkg || !bio_flagged (bio,BIO_TRACKED )) +if (!blkg || !bio_flagged (bio,BIO_QOS_THROTTLED ))return ; iolat =blkg_to_lat (bio->bi_blkg);
block/blk-rq-qos.h +13 -10
@@ -177,21 +177,22 @@ static inline void rq_qos_requeue(struct request_queue *q, struct request *rq)__rq_qos_requeue (q->rq_qos, rq); } -static inline void rq_qos_done_bio (struct request_queue *q,struct bio *bio) +static inline void rq_qos_done_bio (struct bio *bio) { -if (q->rq_qos) -__rq_qos_done_bio (q->rq_qos, bio); +if (bio->bi_bdev && (bio_flagged (bio,BIO_QOS_THROTTLED ) || +bio_flagged (bio,BIO_QOS_MERGED ))) { +struct request_queue *q =bdev_get_queue (bio->bi_bdev); +if (q->rq_qos) +__rq_qos_done_bio (q->rq_qos, bio); + } }static inline void rq_qos_throttle (struct request_queue *q,struct bio *bio) { -/* -* BIO_TRACKED lets controllers know that a bio went through the -* normal rq_qos path. -*/ -bio_set_flag (bio,BIO_TRACKED ); -if (q->rq_qos) +if (q->rq_qos) { +bio_set_flag (bio,BIO_QOS_THROTTLED );__rq_qos_throttle (q->rq_qos, bio); + } } static inline void rq_qos_track(struct request_queue *q, struct request *rq,
@@ -204,8 +205,10 @@ static inline void rq_qos_track(struct request_queue *q, struct request *rq,static inline void rq_qos_merge (struct request_queue *q,struct request *rq,struct bio *bio) { -if (q->rq_qos) +if (q->rq_qos) { +bio_set_flag (bio,BIO_QOS_MERGED );__rq_qos_merge (q->rq_qos, rq, bio); + } }static inline void rq_qos_queue_depth_changed (struct request_queue *q)
drivers/base/core.c +2 -1
@@ -485,7 +485,8 @@ static void device_link_release_fn(struct work_struct *work)/* Ensure that all references to the link object have been dropped. */ device_link_synchronize_removal (); -pm_runtime_release_supplier (link, true); +pm_runtime_release_supplier (link); +pm_request_idle (link->supplier);put_device (link->consumer);put_device (link->supplier);
drivers/base/memory.c +2 -0
@@ -555,6 +555,8 @@ static ssize_t hard_offline_page_store(struct device *dev,return -EINVAL ; pfn >>=PAGE_SHIFT ; ret =memory_failure (pfn,0 ); +if (ret == -EOPNOTSUPP ) + ret =0 ;return ret ? ret : count; }
drivers/base/power/runtime.c +9 -11
@@ -308,13 +308,10 @@ static int rpm_get_suppliers(struct device *dev)/** * pm_runtime_release_supplier - Drop references to device link's supplier. * @link: Target device link. -* @check_idle: Whether or not to check if the supplier device is idle. * -* Drop all runtime PM references associated with @link to its supplier device -* and if @check_idle is set, check if that device is idle (and so it can be -* suspended). +* Drop all runtime PM references associated with @link to its supplier device. */ -void pm_runtime_release_supplier (struct device_link *link,bool check_idle) +void pm_runtime_release_supplier (struct device_link *link) {struct device *supplier = link->supplier;
@@ -327,9 +324,6 @@ void pm_runtime_release_supplier(struct device_link *link, bool check_idle)while (refcount_dec_not_one (&link->rpm_active) &&atomic_read (&supplier->power.usage_count) >0 )pm_runtime_put_noidle (supplier); - -if (check_idle) -pm_request_idle (supplier); }static void __rpm_put_suppliers (struct device *dev,bool try_to_suspend)
@@ -337,8 +331,11 @@ static void __rpm_put_suppliers(struct device *dev, bool try_to_suspend)struct device_link *link;list_for_each_entry_rcu (link, &dev->links.suppliers, c_node, -device_links_read_lock_held ()) -pm_runtime_release_supplier (link, try_to_suspend); +device_links_read_lock_held ()) { +pm_runtime_release_supplier (link); +if (try_to_suspend) +pm_request_idle (link->supplier); + } }static void rpm_put_suppliers (struct device *dev)
@@ -1791,7 +1788,8 @@ void pm_runtime_drop_link(struct device_link *link)return ;pm_runtime_drop_link_count (link->consumer); -pm_runtime_release_supplier (link, true); +pm_runtime_release_supplier (link); +pm_request_idle (link->supplier); }static bool pm_runtime_need_not_resume (struct device *dev)
drivers/block/Kconfig +1 -0
@@ -410,6 +410,7 @@ config XEN_BLKDEV_BACKEND config VIRTIO_BLK tristate "Virtio block driver" depends on VIRTIO + select SG_POOL help This is the virtual block driver for virtio. It can be used with QEMU based VMMs (like KVM or Xen). Say Y or M.
drivers/block/drbd/drbd_main.c +4 -4
@@ -2795,10 +2795,12 @@ enum drbd_ret_code drbd_create_device(struct drbd_config_context *adm_ctx, unsigif (init_submitter (device)) { err =ERR_NOMEM ; - goto out_idr_remove_vol; + goto out_idr_remove_from_resource; } -add_disk (disk); + err =add_disk (disk); +if (err) + goto out_idr_remove_from_resource;/* inherit the connection state */ device->state.conn =first_connection (resource)->cstate;
@@ -2812,8 +2814,6 @@ enum drbd_ret_code drbd_create_device(struct drbd_config_context *adm_ctx, unsigdrbd_debugfs_device_add (device);return NO_ERROR ; -out_idr_remove_vol: -idr_remove (&connection->peer_devices, vnr); out_idr_remove_from_resource:for_each_connection (connection, resource) { peer_device =idr_remove (&connection->peer_devices, vnr);
drivers/block/virtio_blk.c +101 -57
222 lines not on this page · raw message
drivers/bluetooth/btmtksdio.c +2 -1
@@ -331,6 +331,7 @@ static int btmtksdio_recv_event(struct hci_dev *hdev, struct sk_buff *skb) {struct btmtksdio_dev *bdev =hci_get_drvdata (hdev);struct hci_event_hdr *hdr = (void *)skb->data; +u8 evt = hdr->evt;int err;/* Fix up the vendor event id with 0xff for vendor specific instead
@@ -355,7 +356,7 @@ static int btmtksdio_recv_event(struct hci_dev *hdev, struct sk_buff *skb)if (err <0 ) goto err_free_skb; -if (hdr->evt ==HCI_EV_VENDOR ) { +if (evt ==HCI_EV_VENDOR ) {if (test_and_clear_bit (BTMTKSDIO_TX_WAIT_VND_EVT , &bdev->tx_state)) {/* Barrier to sync with other CPUs */
drivers/bus/mhi/core/init.c +6 -3
@@ -77,11 +77,14 @@ static const char * const mhi_pm_state_str[] = { [MHI_PM_STATE_LD_ERR_FATAL_DETECT] = "Linkdown or Error Fatal Detect", }; -const char *to_mhi_pm_state_str (enum mhi_pm_state state) +const char *to_mhi_pm_state_str (u32 state) { -int index =find_last_bit ((unsigned long *)&state,32 ); +int index; -if (index >=ARRAY_SIZE (mhi_pm_state_str)) +if (state) + index =__fls (state); + +if (!state || index >=ARRAY_SIZE (mhi_pm_state_str))return "Invalid State" ;return mhi_pm_state_str[index];
drivers/bus/mhi/core/internal.h +1 -1
@@ -622,7 +622,7 @@ void mhi_free_bhie_table(struct mhi_controller *mhi_cntrl,enum mhi_pm_state __must_check mhi_tryset_pm_state (struct mhi_controller *mhi_cntrl,enum mhi_pm_state state); -const char *to_mhi_pm_state_str (enum mhi_pm_state state); +const char *to_mhi_pm_state_str (u32 state);int mhi_queue_state_transition (struct mhi_controller *mhi_cntrl,enum dev_st_transition state);void mhi_pm_st_worker (struct work_struct *work);
drivers/clk/renesas/r9a07g044-cpg.c +2 -2
@@ -61,8 +61,8 @@ static const struct cpg_core_clk r9a07g044_core_clks[] __initconst = {DEF_FIXED (".osc" ,R9A07G044_OSCCLK ,CLK_EXTAL ,1 ,1 ),DEF_FIXED (".osc_div1000" ,CLK_OSC_DIV1000 ,CLK_EXTAL ,1 ,1000 ),DEF_SAMPLL (".pll1" ,CLK_PLL1 ,CLK_EXTAL ,PLL146_CONF (0 )), -DEF_FIXED (".pll2" ,CLK_PLL2 ,CLK_EXTAL ,133 ,2 ), -DEF_FIXED (".pll3" ,CLK_PLL3 ,CLK_EXTAL ,133 ,2 ), +DEF_FIXED (".pll2" ,CLK_PLL2 ,CLK_EXTAL ,200 ,3 ), +DEF_FIXED (".pll3" ,CLK_PLL3 ,CLK_EXTAL ,200 ,3 ),DEF_FIXED (".pll2_div2" ,CLK_PLL2_DIV2 ,CLK_PLL2 ,1 ,2 ), DEF_FIXED(".pll2_div16", CLK_PLL2_DIV16, CLK_PLL2, 1, 16),
drivers/cxl/core/bus.c +4 -0
@@ -182,6 +182,7 @@ static void cxl_decoder_release(struct device *dev)ida_free (&port->decoder_ida, cxld->id);kfree (cxld); +put_device (&port->dev); }static const struct device_type cxl_decoder_switch_type = {
@@ -481,6 +482,9 @@ cxl_decoder_alloc(struct cxl_port *port, int nr_targets, resource_size_t base,if (rc <0 ) goto err; +/* need parent to stick around to release the id */ +get_device (&port->dev); + *cxld = (struct cxl_decoder ) { .id = rc, .range = {
drivers/dma-buf/dma-buf.c +13 -6
@@ -67,12 +67,9 @@ static void dma_buf_release(struct dentry *dentry)BUG_ON (dmabuf->vmapping_counter);/* -* Any fences that a dma-buf poll can wait on should be signaled -* before releasing dma-buf. This is the responsibility of each -* driver that uses the reservation objects. -* -* If you hit this BUG() it means someone dropped their ref to the -* dma-buf while still having pending operation to the buffer. +* If you hit this BUG() it could mean: +* * There's a file reference imbalance in dma_buf_poll / dma_buf_poll_cb or somewhere else +* * dmabuf->cb_in/out.active are non-0 despite no pending fence callback */ BUG_ON (dmabuf->cb_in.active || dmabuf->cb_out.active);
@@ -200,6 +197,7 @@ static loff_t dma_buf_llseek(struct file *file, loff_t offset, int whence)static void dma_buf_poll_cb (struct dma_fence *fence,struct dma_fence_cb *cb) {struct dma_buf_poll_cb_t *dcb = (struct dma_buf_poll_cb_t *)cb; + struct dma_buf *dmabuf = container_of(dcb->poll, struct dma_buf, poll);unsigned long flags;spin_lock_irqsave (&dcb->poll->lock, flags);
@@ -207,6 +205,8 @@ static void dma_buf_poll_cb(struct dma_fence *fence, struct dma_fence_cb *cb) dcb->active =0 ;spin_unlock_irqrestore (&dcb->poll->lock, flags);dma_fence_put (fence); +/* Paired with get_file in dma_buf_poll */ +fput (dmabuf->file); } static bool dma_buf_poll_shared(struct dma_resv *resv,
@@ -282,8 +282,12 @@ static __poll_t dma_buf_poll(struct file *file, poll_table *poll)spin_unlock_irq (&dmabuf->poll.lock);if (events &EPOLLOUT ) { +/* Paired with fput in dma_buf_poll_cb */ +get_file (dmabuf->file); +if (!dma_buf_poll_shared (resv, dcb) && !dma_buf_poll_excl (resv, dcb)) +/* No callback queued, wake up any other waiters */ dma_buf_poll_cb (NULL , &dcb->cb);else
@@ -303,6 +307,9 @@ static __poll_t dma_buf_poll(struct file *file, poll_table *poll)spin_unlock_irq (&dmabuf->poll.lock);if (events &EPOLLIN ) { +/* Paired with fput in dma_buf_poll_cb */ +get_file (dmabuf->file); +if (!dma_buf_poll_excl (resv, dcb))/* No callback queued, wake up any other waiters */ dma_buf_poll_cb (NULL , &dcb->cb);
drivers/dma/at_xdmac.c +5 -0
@@ -1898,6 +1898,11 @@ static int at_xdmac_alloc_chan_resources(struct dma_chan *chan)for (i =0 ; i < init_nr_desc_per_channel; i++) { desc =at_xdmac_alloc_desc (chan,GFP_KERNEL );if (!desc) { +if (i ==0 ) { +dev_warn (chan2dev (chan), +"can't allocate any descriptors\n" ); +return -EIO ; + }dev_warn (chan2dev (chan),"only %d descriptors have been allocated\n" , i);break ;
drivers/dma/idxd/device.c +1 -4
@@ -720,10 +720,7 @@ static void idxd_device_wqs_clear_state(struct idxd_device *idxd)for (i =0 ; i < idxd->max_wqs; i++) {struct idxd_wq *wq = idxd->wqs[i]; -if (wq->state ==IDXD_WQ_ENABLED ) { -idxd_wq_disable_cleanup (wq); - wq->state =IDXD_WQ_DISABLED ; - } +idxd_wq_disable_cleanup (wq);idxd_wq_device_reset_cleanup (wq); } }
drivers/dma/imx-sdma.c +1 -1
@@ -2264,7 +2264,7 @@ MODULE_DESCRIPTION("i.MX SDMA driver");#if IS_ENABLED (CONFIG_SOC_IMX6Q )MODULE_FIRMWARE ("imx/sdma/sdma-imx6q.bin" );#endif -#if IS_ENABLED (CONFIG_SOC_IMX7D ) +#if IS_ENABLED (CONFIG_SOC_IMX7D ) ||IS_ENABLED (CONFIG_SOC_IMX8M )MODULE_FIRMWARE ("imx/sdma/sdma-imx7d.bin" );#endif MODULE_LICENSE ("GPL" );
drivers/dma/lgm/lgm-dma.c +2 -1
@@ -1593,11 +1593,12 @@ static int intel_ldma_probe(struct platform_device *pdev) d->core_clk =devm_clk_get_optional (dev,NULL );if (IS_ERR (d->core_clk))return PTR_ERR (d->core_clk); -clk_prepare_enable (d->core_clk); d->rst =devm_reset_control_get_optional (dev,NULL );if (IS_ERR (d->rst))return PTR_ERR (d->rst); + +clk_prepare_enable (d->core_clk);reset_control_deassert (d->rst); ret =devm_add_action_or_reset (dev, ldma_clk_disable, d);
drivers/dma/pl330.c +1 -1
@@ -2589,7 +2589,7 @@ static struct dma_pl330_desc *pl330_get_desc(struct dma_pl330_chan *pch)/* If the DMAC pool is empty, alloc new */ if (!desc) { -DEFINE_SPINLOCK (lock); +static DEFINE_SPINLOCK (lock);LIST_HEAD (pool);if (!add_desc (&pool, &lock,GFP_ATOMIC ,1 ))
drivers/dma/qcom/bam_dma.c +11 -28
@@ -515,14 +515,6 @@ static int bam_alloc_chan(struct dma_chan *chan)return 0 ; } -static int bam_pm_runtime_get_sync (struct device *dev) -{ -if (pm_runtime_enabled (dev)) -return pm_runtime_get_sync (dev); - -return 0 ; -} -/** * bam_free_chan - Frees dma resources associated with specific channel * @chan: specified channel
@@ -538,7 +530,7 @@ static void bam_free_chan(struct dma_chan *chan)unsigned long flags;int ret; - ret =bam_pm_runtime_get_sync (bdev->dev); + ret =pm_runtime_get_sync (bdev->dev);if (ret <0 )return ;
@@ -734,7 +726,7 @@ static int bam_pause(struct dma_chan *chan)unsigned long flag;int ret; - ret =bam_pm_runtime_get_sync (bdev->dev); + ret =pm_runtime_get_sync (bdev->dev);if (ret <0 )return ret;
@@ -760,7 +752,7 @@ static int bam_resume(struct dma_chan *chan)unsigned long flag;int ret; - ret =bam_pm_runtime_get_sync (bdev->dev); + ret =pm_runtime_get_sync (bdev->dev);if (ret <0 )return ret;
@@ -869,7 +861,7 @@ static irqreturn_t bam_dma_irq(int irq, void *data)if (srcs &P_IRQ )tasklet_schedule (&bdev->task); - ret =bam_pm_runtime_get_sync (bdev->dev); + ret =pm_runtime_get_sync (bdev->dev);if (ret <0 )return IRQ_NONE ;
@@ -987,7 +979,7 @@ static void bam_start_dma(struct bam_chan *bchan)if (!vd)return ; - ret =bam_pm_runtime_get_sync (bdev->dev); + ret =pm_runtime_get_sync (bdev->dev);if (ret <0 )return ;
@@ -1350,11 +1342,6 @@ static int bam_dma_probe(struct platform_device *pdev)if (ret) goto err_unregister_dma; -if (!bdev->bamclk) { -pm_runtime_disable (&pdev->dev); -return 0 ; - } -pm_runtime_irq_safe (&pdev->dev);pm_runtime_set_autosuspend_delay (&pdev->dev,BAM_DMA_AUTOSUSPEND_DELAY );pm_runtime_use_autosuspend (&pdev->dev);
@@ -1438,10 +1425,8 @@ static int __maybe_unused bam_dma_suspend(struct device *dev) {struct bam_device *bdev =dev_get_drvdata (dev); -if (bdev->bamclk) { -pm_runtime_force_suspend (dev); -clk_unprepare (bdev->bamclk); - } +pm_runtime_force_suspend (dev); +clk_unprepare (bdev->bamclk);return 0 ; }
@@ -1451,13 +1436,11 @@ static int __maybe_unused bam_dma_resume(struct device *dev)struct bam_device *bdev =dev_get_drvdata (dev);int ret; -if (bdev->bamclk) { - ret =clk_prepare (bdev->bamclk); -if (ret) -return ret; + ret =clk_prepare (bdev->bamclk); +if (ret) +return ret; -pm_runtime_force_resume (dev); - } +pm_runtime_force_resume (dev);return 0 ; }
drivers/dma/ti/dma-crossbar.c +5 -0
@@ -245,6 +245,7 @@ static void *ti_dra7_xbar_route_allocate(struct of_phandle_args *dma_spec,if (dma_spec->args[0 ] >= xbar->xbar_requests) {dev_err (&pdev->dev,"Invalid XBAR request number: %d\n" , dma_spec->args[0 ]); +put_device (&pdev->dev);return ERR_PTR (-EINVAL ); }
@@ -252,12 +253,14 @@ static void *ti_dra7_xbar_route_allocate(struct of_phandle_args *dma_spec, dma_spec->np =of_parse_phandle (ofdma->of_node,"dma-masters" ,0 );if (!dma_spec->np) {dev_err (&pdev->dev,"Can't get DMA master\n" ); +put_device (&pdev->dev);return ERR_PTR (-EINVAL ); } map =kzalloc (sizeof (*map),GFP_KERNEL );if (!map) {of_node_put (dma_spec->np); +put_device (&pdev->dev);return ERR_PTR (-ENOMEM ); }
@@ -268,6 +271,8 @@ static void *ti_dra7_xbar_route_allocate(struct of_phandle_args *dma_spec,mutex_unlock (&xbar->mutex);dev_err (&pdev->dev,"Run out of free DMA requests\n" );kfree (map); +of_node_put (dma_spec->np); +put_device (&pdev->dev);return ERR_PTR (-ENOMEM ); }set_bit (map->xbar_out, xbar->dma_inuse);
drivers/gpu/drm/amd/amdgpu/amdgpu.h +1 -0
@@ -1285,6 +1285,7 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev,void amdgpu_device_pci_config_reset (struct amdgpu_device *adev);int amdgpu_device_pci_reset (struct amdgpu_device *adev);bool amdgpu_device_need_post (struct amdgpu_device *adev); +bool amdgpu_device_should_use_aspm (struct amdgpu_device *adev);void amdgpu_cs_report_moved_bytes (struct amdgpu_device *adev,u64 num_bytes,u64 num_vis_bytes);
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +25 -0
@@ -1309,6 +1309,31 @@ bool amdgpu_device_need_post(struct amdgpu_device *adev)return true; } +/** +* amdgpu_device_should_use_aspm - check if the device should program ASPM +* +* @adev: amdgpu_device pointer +* +* Confirm whether the module parameter and pcie bridge agree that ASPM should +* be set for this device. +* +* Returns true if it should be used or false if not. +*/ +bool amdgpu_device_should_use_aspm (struct amdgpu_device *adev) +{ +switch (amdgpu_aspm) { +case -1 : +break ; +case 0 : +return false; +case 1 : +return true; +default : +return false; + } +return pcie_aspm_enabled (adev->pdev); +} +/* if we get transitioned to only one device, take VGA back */ /** * amdgpu_device_vga_set_decode - enable/disable vga decode
drivers/gpu/drm/amd/amdgpu/cik.c +1 -1
@@ -1719,7 +1719,7 @@ static void cik_program_aspm(struct amdgpu_device *adev)bool disable_l0s = false, disable_l1 = false, disable_plloff_in_l1 = false;bool disable_clkreq = false; -if (amdgpu_aspm ==0 ) +if (!amdgpu_device_should_use_aspm (adev))return ;if (pci_is_root_bus (adev->pdev->bus))
drivers/gpu/drm/amd/amdgpu/nv.c +1 -1
@@ -584,7 +584,7 @@ static void nv_pcie_gen3_enable(struct amdgpu_device *adev)static void nv_program_aspm (struct amdgpu_device *adev) { -if (!amdgpu_aspm) +if (!amdgpu_device_should_use_aspm (adev))return ; if (!(adev->flags & AMD_IS_APU) &&
drivers/gpu/drm/amd/amdgpu/si.c +1 -1
@@ -2453,7 +2453,7 @@ static void si_program_aspm(struct amdgpu_device *adev)bool disable_l0s = false, disable_l1 = false, disable_plloff_in_l1 = false;bool disable_clkreq = false; -if (amdgpu_aspm ==0 ) +if (!amdgpu_device_should_use_aspm (adev))return ;if (adev->flags &AMD_IS_APU )
drivers/gpu/drm/amd/amdgpu/soc15.c +1 -1
@@ -689,7 +689,7 @@ static void soc15_pcie_gen3_enable(struct amdgpu_device *adev)static void soc15_program_aspm (struct amdgpu_device *adev) { -if (!amdgpu_aspm) +if (!amdgpu_device_should_use_aspm (adev))return ; if (!(adev->flags & AMD_IS_APU) &&
drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c +1 -1
@@ -1511,7 +1511,7 @@ static int vcn_v3_0_stop_dpg_mode(struct amdgpu_device *adev, int inst_idx)struct dpg_pause_state state = {.fw_based =VCN_DPG_STATE__UNPAUSE };uint32_t tmp; -vcn_v3_0_pause_dpg_mode (adev,0 , &state); +vcn_v3_0_pause_dpg_mode (adev, inst_idx, &state);/* Wait for power status to be 1 */ SOC15_WAIT_ON_RREG(VCN, inst_idx, mmUVD_POWER_STATUS, 1,
drivers/gpu/drm/amd/amdgpu/vi.c +16 -1
@@ -81,6 +81,10 @@#include "mxgpu_vi.h" #include "amdgpu_dm.h" +#if IS_ENABLED (CONFIG_X86 ) +#include <asm/intel-family.h> +#endif +#define ixPCIE_LC_L1_PM_SUBSTATE 0x100100C6#define PCIE_LC_L1_PM_SUBSTATE__LC_L1_SUBSTATES_OVERRIDE_EN_MASK 0x00000001L#define PCIE_LC_L1_PM_SUBSTATE__LC_PCI_PM_L1_2_OVERRIDE_MASK 0x00000002L
@@ -1134,13 +1138,24 @@ static void vi_enable_aspm(struct amdgpu_device *adev)WREG32_PCIE (ixPCIE_LC_CNTL, data); } +static bool aspm_support_quirk_check (void ) +{ +#if IS_ENABLED (CONFIG_X86 ) +struct cpuinfo_x86 *c = &cpu_data (0 ); + +return !(c->x86 ==6 && c->x86_model ==INTEL_FAM6_ALDERLAKE ); +#else +return true; +#endif +} +static void vi_program_aspm (struct amdgpu_device *adev) {u32 data, data1, orig;bool bL1SS = false;bool bClkReqSupport = true; -if (!amdgpu_aspm) +if (!amdgpu_device_should_use_aspm (adev) || !aspm_support_quirk_check ())return ; if (adev->flags & AMD_IS_APU ||
drivers/gpu/drm/amd/display/dc/dcn30/dcn30_resource.c +1 -1
@@ -1856,7 +1856,7 @@ static struct pipe_ctx *dcn30_find_split_pipe(return pipe; } -static noinline bool dcn30_internal_validate_bw( +noinline bool dcn30_internal_validate_bw( struct dc *dc, struct dc_state *context, display_e2e_pipe_params_st *pipes,
drivers/gpu/drm/amd/display/dc/dcn30/dcn30_resource.h +7 -0
@@ -55,6 +55,13 @@ unsigned int dcn30_calc_max_scaled_time(bool dcn30_validate_bandwidth (struct dc *dc,struct dc_state *context,bool fast_validate); +bool dcn30_internal_validate_bw ( +struct dc *dc, +struct dc_state *context, +display_e2e_pipe_params_st *pipes, +int *pipe_cnt_out, +int *vlevel_out, +bool fast_validate); void dcn30_calculate_wm_and_dlg( struct dc *dc, struct dc_state *context, display_e2e_pipe_params_st *pipes,
drivers/gpu/drm/amd/display/dc/dcn31/dcn31_resource.c +64 -1
83 lines not on this page · raw message
drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c +1 -1
@@ -338,7 +338,7 @@ sienna_cichlid_get_allowed_feature_mask(struct smu_context *smu,if (smu->dc_controlled_by_gpio) *(uint64_t *)feature_mask |=FEATURE_MASK (FEATURE_ACDC_BIT ); -if (amdgpu_aspm) +if (amdgpu_device_should_use_aspm (adev)) *(uint64_t *)feature_mask |=FEATURE_MASK (FEATURE_DS_LCLK_BIT );return 0 ;
drivers/gpu/drm/i915/gem/i915_gem_context.c +7 -0
@@ -442,6 +442,13 @@ set_proto_ctx_engines_bond(struct i915_user_extension __user *base, void *data)u16 idx, num_bonds;int err, n; +if (GRAPHICS_VER (i915) >=12 && !IS_TIGERLAKE (i915) && + !IS_ROCKETLAKE (i915) && !IS_ALDERLAKE_S (i915)) { +drm_dbg (&i915->drm, +"Bonding on gen12+ aside from TGL, RKL, and ADL_S not supported\n" ); +return -ENODEV ; + } +if (get_user (idx, &ext->virtual_index))return -EFAULT ;
drivers/gpu/drm/i915/gem/i915_gem_object.c +6 -0
@@ -224,6 +224,12 @@ void __i915_gem_free_object(struct drm_i915_gem_object *obj)GEM_BUG_ON (vma->obj != obj);spin_unlock (&obj->vma.lock); +/* Verify that the vma is unbound under the vm mutex. */ +mutex_lock (&vma->vm->mutex); +atomic_and (~I915_VMA_PIN_MASK , &vma->flags); +__i915_vma_unbind (vma); +mutex_unlock (&vma->vm->mutex); +__i915_vma_put (vma);spin_lock (&obj->vma.lock);
drivers/gpu/drm/i915/gt/intel_context_types.h +8 -0
@@ -152,6 +152,14 @@ struct intel_context {/** sseu: Control eu/slice partitioning */ struct intel_sseu sseu; +/** +* pinned_contexts_link: List link for the engine's pinned contexts. +* This is only used if this is a perma-pinned kernel context and +* the list is assumed to only be manipulated during driver load +* or unload time so no mutex protection currently. +*/ +struct list_head pinned_contexts_link; +u8 wa_bb_page;/* if set, page num reserved for context workarounds */ struct {
drivers/gpu/drm/i915/gt/intel_engine_cs.c +4 -0
@@ -320,6 +320,7 @@ static int intel_engine_setup(struct intel_gt *gt, enum intel_engine_id id)BUILD_BUG_ON (BITS_PER_TYPE (engine->mask) <I915_NUM_ENGINES ); +INIT_LIST_HEAD (&engine->pinned_contexts_list); engine->id = id; engine->legacy_idx =INVALID_ENGINE ; engine->mask =BIT (id);
@@ -875,6 +876,8 @@ intel_engine_create_pinned_context(struct intel_engine_cs *engine,return ERR_PTR (err); } +list_add_tail (&ce->pinned_contexts_link, &engine->pinned_contexts_list); +/* * Give our perma-pinned kernel timelines a separate lockdep class, * so that we can use them from within the normal user timelines
@@ -897,6 +900,7 @@ void intel_engine_destroy_pinned_context(struct intel_context *ce)list_del (&ce->timeline->engine_link);mutex_unlock (&hwsp->vm->mutex); +list_del (&ce->pinned_contexts_link);intel_context_unpin (ce);intel_context_put (ce); }
drivers/gpu/drm/i915/gt/intel_engine_pm.c +23 -0
@@ -298,6 +298,29 @@ void intel_engine_init__pm(struct intel_engine_cs *engine)intel_engine_init_heartbeat (engine); } +/** +* intel_engine_reset_pinned_contexts - Reset the pinned contexts of +* an engine. +* @engine: The engine whose pinned contexts we want to reset. +* +* Typically the pinned context LMEM images lose or get their content +* corrupted on suspend. This function resets their images. +*/ +void intel_engine_reset_pinned_contexts (struct intel_engine_cs *engine) +{ +struct intel_context *ce; + +list_for_each_entry (ce, &engine->pinned_contexts_list, + pinned_contexts_link) { +/* kernel context gets reset at __engine_unpark() */ +if (ce == engine->kernel_context) +continue ; + +dbg_poison_ce (ce); + ce->ops->reset (ce); + } +} +#if IS_ENABLED (CONFIG_DRM_I915_SELFTEST )#include "selftest_engine_pm.c" #endif
drivers/gpu/drm/i915/gt/intel_engine_pm.h +2 -0
@@ -69,4 +69,6 @@ intel_engine_create_kernel_request(struct intel_engine_cs *engine)void intel_engine_init__pm (struct intel_engine_cs *engine); +void intel_engine_reset_pinned_contexts (struct intel_engine_cs *engine); +#endif /* INTEL_ENGINE_PM_H */
drivers/gpu/drm/i915/gt/intel_engine_types.h +7 -0
@@ -304,6 +304,13 @@ struct intel_engine_cs {struct intel_context *kernel_context;/* pinned */ +/** +* pinned_contexts_list: List of pinned contexts. This list is only +* assumed to be manipulated during driver load- or unload time and +* does therefore not have any additional protection. +*/ +struct list_head pinned_contexts_list; +intel_engine_mask_t saturated;/* submitting semaphores too late? */ struct {
drivers/gpu/drm/i915/gt/intel_execlists_submission.c +2 -0
@@ -2787,6 +2787,8 @@ static void execlists_sanitize(struct intel_engine_cs *engine)/* And scrub the dirty cachelines for the HWSP */ clflush_cache_range (engine->status_page.addr,PAGE_SIZE ); + +intel_engine_reset_pinned_contexts (engine); }static void enable_error_interrupt (struct intel_engine_cs *engine)
drivers/gpu/drm/i915/gt/intel_ring_submission.c +4 -1
@@ -17,6 +17,7 @@#include "intel_ring.h" #include "shmem_utils.h" #include "intel_engine_heartbeat.h" +#include "intel_engine_pm.h" /* Rough estimate of the typical request size, performing a flush, * set-context and then emitting the batch.
@@ -291,7 +292,9 @@ static void xcs_sanitize(struct intel_engine_cs *engine)sanitize_hwsp (engine);/* And scrub the dirty cachelines for the HWSP */ -clflush_cache_range (engine->status_page.addr,PAGE_SIZE ); +drm_clflush_virt_range (engine->status_page.addr,PAGE_SIZE ); + +intel_engine_reset_pinned_contexts (engine); }static void reset_prepare (struct intel_engine_cs *engine)
drivers/gpu/drm/i915/gt/mock_engine.c +2 -0
@@ -376,6 +376,8 @@ int mock_engine_init(struct intel_engine_cs *engine) {struct intel_context *ce; +INIT_LIST_HEAD (&engine->pinned_contexts_list); + engine->sched_engine =i915_sched_engine_create (ENGINE_MOCK );if (!engine->sched_engine)return -ENOMEM ;
drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c +9 -3
@@ -2347,6 +2347,8 @@ static void guc_sanitize(struct intel_engine_cs *engine)/* And scrub the dirty cachelines for the HWSP */ clflush_cache_range (engine->status_page.addr,PAGE_SIZE ); + +intel_engine_reset_pinned_contexts (engine); }static void setup_hwsp (struct intel_engine_cs *engine)
@@ -2422,9 +2424,13 @@ static inline void guc_init_lrc_mapping(struct intel_guc *guc)* and even it did this code would be run again. */ -for_each_engine (engine, gt, id) -if (engine->kernel_context) -guc_kernel_context_pin (guc, engine->kernel_context); +for_each_engine (engine, gt, id) { +struct intel_context *ce; + +list_for_each_entry (ce, &engine->pinned_contexts_list, + pinned_contexts_link) +guc_kernel_context_pin (guc, ce); + } }static void guc_release (struct intel_engine_cs *engine)
drivers/gpu/drm/mediatek/mtk_disp_drv.h +10 -6
@@ -76,9 +76,11 @@ void mtk_ovl_layer_off(struct device *dev, unsigned int idx,void mtk_ovl_start (struct device *dev);void mtk_ovl_stop (struct device *dev);unsigned int mtk_ovl_supported_rotations (struct device *dev); -void mtk_ovl_enable_vblank (struct device *dev, -void (*vblank_cb)(void *), -void *vblank_cb_data); +void mtk_ovl_register_vblank_cb (struct device *dev, +void (*vblank_cb)(void *), +void *vblank_cb_data); +void mtk_ovl_unregister_vblank_cb (struct device *dev); +void mtk_ovl_enable_vblank (struct device *dev);void mtk_ovl_disable_vblank (struct device *dev);void mtk_rdma_bypass_shadow (struct device *dev);
@@ -93,9 +95,11 @@ void mtk_rdma_layer_config(struct device *dev, unsigned int idx, struct cmdq_pkt *cmdq_pkt);void mtk_rdma_start (struct device *dev);void mtk_rdma_stop (struct device *dev); -void mtk_rdma_enable_vblank (struct device *dev, -void (*vblank_cb)(void *), -void *vblank_cb_data); +void mtk_rdma_register_vblank_cb (struct device *dev, +void (*vblank_cb)(void *), +void *vblank_cb_data); +void mtk_rdma_unregister_vblank_cb (struct device *dev); +void mtk_rdma_enable_vblank (struct device *dev);void mtk_rdma_disable_vblank (struct device *dev);#endif
drivers/gpu/drm/mediatek/mtk_disp_ovl.c +17 -5
@@ -96,14 +96,28 @@ static irqreturn_t mtk_disp_ovl_irq_handler(int irq, void *dev_id)return IRQ_HANDLED ; } -void mtk_ovl_enable_vblank (struct device *dev, -void (*vblank_cb)(void *), -void *vblank_cb_data) +void mtk_ovl_register_vblank_cb (struct device *dev, +void (*vblank_cb)(void *), +void *vblank_cb_data) {struct mtk_disp_ovl *ovl =dev_get_drvdata (dev); ovl->vblank_cb = vblank_cb; ovl->vblank_cb_data = vblank_cb_data; +} + +void mtk_ovl_unregister_vblank_cb (struct device *dev) +{ +struct mtk_disp_ovl *ovl =dev_get_drvdata (dev); + + ovl->vblank_cb =NULL ; + ovl->vblank_cb_data =NULL ; +} + +void mtk_ovl_enable_vblank (struct device *dev) +{ +struct mtk_disp_ovl *ovl =dev_get_drvdata (dev); +writel (0x0 , ovl->regs +DISP_REG_OVL_INTSTA );writel_relaxed (OVL_FME_CPL_INT , ovl->regs +DISP_REG_OVL_INTEN ); }
@@ -112,8 +126,6 @@ void mtk_ovl_disable_vblank(struct device *dev) {struct mtk_disp_ovl *ovl =dev_get_drvdata (dev); - ovl->vblank_cb =NULL ; - ovl->vblank_cb_data =NULL ;writel_relaxed (0x0 , ovl->regs +DISP_REG_OVL_INTEN ); }
drivers/gpu/drm/mediatek/mtk_disp_rdma.c +14 -6
@@ -94,24 +94,32 @@ static void rdma_update_bits(struct device *dev, unsigned int reg,writel (tmp, rdma->regs + reg); } -void mtk_rdma_enable_vblank (struct device *dev, -void (*vblank_cb)(void *), -void *vblank_cb_data) +void mtk_rdma_register_vblank_cb (struct device *dev, +void (*vblank_cb)(void *), +void *vblank_cb_data) {struct mtk_disp_rdma *rdma =dev_get_drvdata (dev); rdma->vblank_cb = vblank_cb; rdma->vblank_cb_data = vblank_cb_data; -rdma_update_bits (dev,DISP_REG_RDMA_INT_ENABLE ,RDMA_FRAME_END_INT , -RDMA_FRAME_END_INT ); } -void mtk_rdma_disable_vblank (struct device *dev) +void mtk_rdma_unregister_vblank_cb (struct device *dev) {struct mtk_disp_rdma *rdma =dev_get_drvdata (dev); rdma->vblank_cb =NULL ; rdma->vblank_cb_data =NULL ; +} + +void mtk_rdma_enable_vblank (struct device *dev) +{ +rdma_update_bits (dev,DISP_REG_RDMA_INT_ENABLE ,RDMA_FRAME_END_INT , +RDMA_FRAME_END_INT ); +} + +void mtk_rdma_disable_vblank (struct device *dev) +{rdma_update_bits (dev,DISP_REG_RDMA_INT_ENABLE ,RDMA_FRAME_END_INT ,0 ); }
drivers/gpu/drm/mediatek/mtk_drm_crtc.c +113 -20
217 lines not on this page · raw message
drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c +4 -0
@@ -276,6 +276,8 @@ static const struct mtk_ddp_comp_funcs ddp_ovl = { .config = mtk_ovl_config, .start = mtk_ovl_start, .stop = mtk_ovl_stop, + .register_vblank_cb = mtk_ovl_register_vblank_cb, + .unregister_vblank_cb = mtk_ovl_unregister_vblank_cb, .enable_vblank = mtk_ovl_enable_vblank, .disable_vblank = mtk_ovl_disable_vblank, .supported_rotations = mtk_ovl_supported_rotations,
@@ -292,6 +294,8 @@ static const struct mtk_ddp_comp_funcs ddp_rdma = { .config = mtk_rdma_config, .start = mtk_rdma_start, .stop = mtk_rdma_stop, + .register_vblank_cb = mtk_rdma_register_vblank_cb, + .unregister_vblank_cb = mtk_rdma_unregister_vblank_cb, .enable_vblank = mtk_rdma_enable_vblank, .disable_vblank = mtk_rdma_disable_vblank, .layer_nr = mtk_rdma_layer_nr,
drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h +22 -7
@@ -47,9 +47,11 @@ struct mtk_ddp_comp_funcs { unsigned int bpc, struct cmdq_pkt *cmdq_pkt);void (*start)(struct device *dev);void (*stop)(struct device *dev); -void (*enable_vblank)(struct device *dev, -void (*vblank_cb)(void *), -void *vblank_cb_data); +void (*register_vblank_cb)(struct device *dev, +void (*vblank_cb)(void *), +void *vblank_cb_data); +void (*unregister_vblank_cb)(struct device *dev); +void (*enable_vblank)(struct device *dev);void (*disable_vblank)(struct device *dev);unsigned int (*supported_rotations)(struct device *dev);unsigned int (*layer_nr)(struct device *dev);
@@ -110,12 +112,25 @@ static inline void mtk_ddp_comp_stop(struct mtk_ddp_comp *comp) comp->funcs->stop (comp->dev); } -static inline void mtk_ddp_comp_enable_vblank (struct mtk_ddp_comp *comp, -void (*vblank_cb)(void *), -void *vblank_cb_data) +static inline void mtk_ddp_comp_register_vblank_cb (struct mtk_ddp_comp *comp, +void (*vblank_cb)(void *), +void *vblank_cb_data) +{ +if (comp->funcs && comp->funcs->register_vblank_cb) + comp->funcs->register_vblank_cb (comp->dev, vblank_cb, + vblank_cb_data); +} + +static inline void mtk_ddp_comp_unregister_vblank_cb (struct mtk_ddp_comp *comp) +{ +if (comp->funcs && comp->funcs->unregister_vblank_cb) + comp->funcs->unregister_vblank_cb (comp->dev); +} + +static inline void mtk_ddp_comp_enable_vblank (struct mtk_ddp_comp *comp) {if (comp->funcs && comp->funcs->enable_vblank) - comp->funcs->enable_vblank (comp->dev, vblank_cb, vblank_cb_data); + comp->funcs->enable_vblank (comp->dev); }static inline void mtk_ddp_comp_disable_vblank (struct mtk_ddp_comp *comp)
drivers/i2c/busses/i2c-cadence.c +1 -0
@@ -1338,6 +1338,7 @@ static int cdns_i2c_probe(struct platform_device *pdev)return 0 ; err_clk_dis: +clk_notifier_unregister (id->clk, &id->clk_rate_change_nb);clk_disable_unprepare (id->clk);pm_runtime_disable (&pdev->dev);pm_runtime_set_suspended (&pdev->dev);
drivers/i2c/busses/i2c-piix4.c +7 -9
@@ -161,7 +161,6 @@ static const char *piix4_aux_port_name_sb800 = " port 1";struct sb800_mmio_cfg {void __iomem *addr; -struct resource *res;bool use_mmio; };
@@ -179,13 +178,11 @@ static int piix4_sb800_region_request(struct device *dev, struct sb800_mmio_cfg *mmio_cfg) {if (mmio_cfg->use_mmio) { -struct resource *res;void __iomem *addr; - res =request_mem_region_muxed (SB800_PIIX4_FCH_PM_ADDR , -SB800_PIIX4_FCH_PM_SIZE , -"sb800_piix4_smb" ); -if (!res) { +if (!request_mem_region_muxed (SB800_PIIX4_FCH_PM_ADDR , +SB800_PIIX4_FCH_PM_SIZE , +"sb800_piix4_smb" )) {dev_err (dev,"SMBus base address memory region 0x%x already in use.\n" ,SB800_PIIX4_FCH_PM_ADDR );
@@ -195,12 +192,12 @@ static int piix4_sb800_region_request(struct device *dev, addr =ioremap (SB800_PIIX4_FCH_PM_ADDR ,SB800_PIIX4_FCH_PM_SIZE );if (!addr) { -release_resource (res); +release_mem_region (SB800_PIIX4_FCH_PM_ADDR , +SB800_PIIX4_FCH_PM_SIZE );dev_err (dev,"SMBus base address mapping failed.\n" );return -ENOMEM ; } - mmio_cfg->res = res; mmio_cfg->addr = addr;return 0 ;
@@ -222,7 +219,8 @@ static void piix4_sb800_region_release(struct device *dev, {if (mmio_cfg->use_mmio) {iounmap (mmio_cfg->addr); -release_resource (mmio_cfg->res); +release_mem_region (SB800_PIIX4_FCH_PM_ADDR , +SB800_PIIX4_FCH_PM_SIZE );return ; }
drivers/iio/accel/mma8452.c +2 -2
@@ -380,8 +380,8 @@ static ssize_t mma8452_show_scale_avail(struct device *dev,struct device_attribute *attr, char *buf) { - struct mma8452_data *data = iio_priv(i2c_get_clientdata( -to_i2c_client (dev))); + struct iio_dev *indio_dev = dev_to_iio_dev(dev); +struct mma8452_data *data =iio_priv (indio_dev);return mma8452_show_int_plus_micros (buf, data->chip_info->mma_scales,ARRAY_SIZE (data->chip_info->mma_scales));
drivers/input/misc/cpcap-pwrbutton.c +5 -1
@@ -54,9 +54,13 @@ static irqreturn_t powerbutton_irq(int irq, void *_button)static int cpcap_power_button_probe (struct platform_device *pdev) {struct cpcap_power_button *button; -int irq =platform_get_irq (pdev,0 ); +int irq;int err; + irq =platform_get_irq (pdev,0 ); +if (irq <0 ) +return irq; + button =devm_kmalloc (&pdev->dev,sizeof (*button),GFP_KERNEL );if (!button)return -ENOMEM ;
drivers/input/touchscreen/goodix.c +62 -88
159 lines not on this page · raw message
drivers/input/touchscreen/goodix.h new file +75 -0
75 lines not on this page · raw message
drivers/irqchip/irq-gic-v3.c +34 -8
42 lines not on this page · raw message
drivers/media/platform/davinci/vpif.c +71 -26
97 lines not on this page · raw message
drivers/media/platform/omap3isp/ispstat.c +3 -2
Lines of this file are not shown. View the raw message.
drivers/memory/renesas-rpc-if.c +46 -2
48 lines not on this page · raw message
drivers/net/can/spi/mcp251xfd/mcp251xfd-regmap.c +11 -11
Lines of this file are not shown. View the raw message.
drivers/net/can/usb/kvaser_usb/kvaser_usb.h +15 -10
Lines of this file are not shown. View the raw message.
drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c +159 -127
286 lines not on this page · raw message
drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c +2 -2
Lines of this file are not shown. View the raw message.
drivers/net/can/usb/kvaser_usb/kvaser_usb_leaf.c +68 -51
119 lines not on this page · raw message
drivers/net/ethernet/ibm/ibmvnic.c +132 -15
147 lines not on this page · raw message
drivers/net/ethernet/intel/i40e/i40e.h +16 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/i40e/i40e_main.c +73 -0
73 lines not on this page · raw message
drivers/net/ethernet/intel/i40e/i40e_register.h +13 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/i40e/i40e_type.h +1 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c +4 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c +56 -32
88 lines not on this page · raw message
drivers/net/ethernet/qlogic/qed/qed_l2.c +3 -20
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/qlogic/qede/qede_filter.c +19 -28
47 lines not on this page · raw message
drivers/net/ethernet/realtek/r8169_main.c +4 -6
Lines of this file are not shown. View the raw message.
drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c +0 -3
Lines of this file are not shown. View the raw message.
drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/wireless/mediatek/mt76/mt7921/debugfs.c +22 -9
Lines of this file are not shown. View the raw message.
drivers/net/wireless/mediatek/mt76/mt7921/mac.c +0 -28
Lines of this file are not shown. View the raw message.
drivers/net/wireless/mediatek/mt76/mt7921/main.c +2 -31
Lines of this file are not shown. View the raw message.
drivers/net/wireless/mediatek/mt76/mt7921/mcu.c +26 -21
47 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h +3 -8
Lines of this file are not shown. View the raw message.
drivers/pinctrl/sunxi/pinctrl-sun8i-a83t.c +5 -5
Lines of this file are not shown. View the raw message.
drivers/scsi/qla2xxx/qla_os.c +56 -46
102 lines not on this page · raw message
drivers/tty/n_gsm.c +219 -44
263 lines not on this page · raw message
fs/btrfs/block-group.c +94 -58
152 lines not on this page · raw message
fs/btrfs/ioctl.c +55 -41
96 lines not on this page · raw message
fs/btrfs/volumes.c +187 -123
310 lines not on this page · raw message
fs/nfsd/vfs.c +41 -23
64 lines not on this page · raw message
include/linux/stddef.h +61 -0
61 lines not on this page · raw message
include/uapi/linux/netfilter/nf_tables.h +2 -0
Lines of this file are not shown. View the raw message.
include/uapi/linux/stddef.h +41 -0
41 lines not on this page · raw message
kernel/bpf/verifier.c +61 -89
150 lines not on this page · raw message
kernel/module.c +58 -21
79 lines not on this page · raw message
mm/memory-failure.c +127 -78
205 lines not on this page · raw message
mm/util.c +50 -0
50 lines not on this page · raw message
net/netfilter/nft_payload.c +58 -5
63 lines not on this page · raw message
net/netfilter/nft_set_pipapo.c +33 -15
48 lines not on this page · raw message
sound/soc/codecs/rt5682.c +58 -67
125 lines not on this page · raw message
tools/testing/selftests/bpf/prog_tests/timer_crash.c deleted +0 -32
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/progs/timer_crash.c deleted +0 -54
54 lines not on this page · raw message
tools/testing/selftests/net/forwarding/lib.sh +5 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/udpgro_bench.sh +1 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/udpgro_fwd.sh +1 -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.