Linux 5.7.10
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.7.10 kernel.
All users of the 5.7 kernel series must upgrade.
The updated 5.7.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.7.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/arm64/silicon-errata.rst | 8 Documentation/devicetree/bindings/Makefile | 5 Documentation/devicetree/bindings/bus/socionext,uniphier-system-bus.yaml | 4 Documentation/devicetree/bindings/mailbox/xlnx,zynqmp-ipi-mailbox.txt | 2 Makefile | 2 arch/arm/boot/dts/am437x-l4.dtsi | 14 arch/arm/boot/dts/imx6qdl-gw551x.dtsi | 2 arch/arm/boot/dts/mt7623n-rfb-emmc.dts | 1 arch/arm/boot/dts/socfpga.dtsi | 2 arch/arm/boot/dts/socfpga_arria10.dtsi | 2 arch/arm64/boot/dts/altera/socfpga_stratix10.dtsi | 8 arch/arm64/boot/dts/altera/socfpga_stratix10_socdk.dts | 1 arch/arm64/boot/dts/altera/socfpga_stratix10_socdk_nand.dts | 7 arch/arm64/boot/dts/amlogic/meson-gxl-s805x-libretech-ac.dts | 2 arch/arm64/boot/dts/amlogic/meson-gxl-s805x-p241.dts | 2 arch/arm64/boot/dts/amlogic/meson-gxl-s805x.dtsi | 24 + arch/arm64/boot/dts/amlogic/meson-gxl.dtsi | 5 arch/arm64/boot/dts/intel/socfpga_agilex_socdk.dts | 1 arch/arm64/include/asm/alternative.h | 16 arch/arm64/include/asm/cputype.h | 2 arch/arm64/include/asm/debug-monitors.h | 2 arch/arm64/include/asm/syscall.h | 12 arch/arm64/include/asm/thread_info.h | 1 arch/arm64/kernel/alternative.c | 16 arch/arm64/kernel/cpu_errata.c | 22 - arch/arm64/kernel/cpufeature.c | 2 arch/arm64/kernel/debug-monitors.c | 20 - arch/arm64/kernel/ptrace.c | 29 + arch/arm64/kernel/signal.c | 11 arch/arm64/kernel/syscall.c | 5 arch/arm64/kernel/vmlinux.lds.S | 3 arch/m68k/kernel/setup_no.c | 3 arch/m68k/mm/mcfmmu.c | 2 arch/powerpc/kernel/paca.c | 2 arch/powerpc/mm/book3s64/pkeys.c | 12 arch/riscv/include/asm/thread_info.h | 4 arch/x86/include/asm/fpu/internal.h | 5 arch/x86/include/asm/io_bitmap.h | 16 arch/x86/include/asm/paravirt.h | 5 arch/x86/include/asm/paravirt_types.h | 1 arch/x86/kernel/apic/vector.c | 22 - arch/x86/kernel/fpu/core.c | 6 arch/x86/kernel/fpu/xstate.c | 2 arch/x86/kernel/paravirt.c | 3 arch/x86/kernel/process.c | 18 - arch/x86/xen/enlighten_pv.c | 12 block/blk-mq-debugfs.c | 3 crypto/asymmetric_keys/public_key.c | 1 drivers/acpi/dptf/dptf_power.c | 1 drivers/base/regmap/regmap-debugfs.c | 52 +-- drivers/block/zram/zram_drv.c | 3 drivers/bus/ti-sysc.c | 23 - drivers/char/tpm/tpm_tis_core.c | 2 drivers/char/virtio_console.c | 3 drivers/clk/clk-ast2600.c | 49 ++ drivers/clk/mvebu/Kconfig | 1 drivers/clk/qcom/gcc-msm8998.c | 27 + drivers/clk/qcom/gcc-sc7180.c | 73 ++-- drivers/clk/qcom/gcc-sm8150.c | 148 ++++++++ drivers/counter/104-quad-8.c | 22 + drivers/dma-buf/dma-buf.c | 11 drivers/dma/dmatest.c | 2 drivers/dma/dw/core.c | 12 drivers/dma/fsl-edma-common.h | 2 drivers/dma/fsl-edma.c | 7 drivers/dma/idxd/cdev.c | 19 - drivers/dma/idxd/device.c | 25 + drivers/dma/idxd/idxd.h | 1 drivers/dma/idxd/irq.c | 3 drivers/dma/idxd/sysfs.c | 5 drivers/dma/mcf-edma.c | 7 drivers/dma/sh/usb-dmac.c | 2 drivers/dma/ti/k3-udma.c | 8 drivers/gpio/gpio-pca953x.c | 1 drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c | 26 - drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 14 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 11 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c | 53 +-- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.h | 3 drivers/gpu/drm/amd/display/dc/core/dc_stream.c | 19 - drivers/gpu/drm/amd/powerplay/renoir_ppt.c | 2 drivers/gpu/drm/exynos/exynos_drm_dma.c | 4 drivers/gpu/drm/exynos/exynos_drm_mic.c | 4 drivers/gpu/drm/i915/display/intel_hdmi.c | 10 drivers/gpu/drm/i915/gt/intel_lrc.c | 19 - drivers/gpu/drm/i915/gvt/handlers.c | 4 drivers/gpu/drm/i915/i915_perf.c | 1 drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 4 drivers/gpu/drm/msm/msm_submitqueue.c | 4 drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c | 8 drivers/hid/hid-ids.h | 3 drivers/hid/hid-logitech-hidpp.c | 2 drivers/hid/hid-magicmouse.c | 6 drivers/hid/hid-quirks.c | 2 drivers/hwmon/drivetemp.c | 43 ++ drivers/hwmon/emc2103.c | 2 drivers/hwtracing/coresight/coresight-etm4x.c | 82 +++- drivers/hwtracing/intel_th/core.c | 21 + drivers/hwtracing/intel_th/pci.c | 15 drivers/hwtracing/intel_th/sth.c | 4 drivers/i2c/busses/i2c-eg20t.c | 1 drivers/iio/accel/mma8452.c | 5 drivers/iio/adc/ad7780.c | 2 drivers/iio/health/afe4403.c | 13 drivers/iio/health/afe4404.c | 8 drivers/iio/humidity/hdc100x.c | 10 drivers/iio/humidity/hts221.h | 7 drivers/iio/humidity/hts221_buffer.c | 9 drivers/iio/industrialio-core.c | 2 drivers/iio/magnetometer/ak8974.c | 29 - drivers/iio/pressure/ms5611_core.c | 11 drivers/iio/pressure/zpa2326.c | 4 drivers/infiniband/hw/mlx5/qp.c | 2 drivers/infiniband/sw/rxe/rxe.c | 1 drivers/infiniband/sw/rxe/rxe_param.h | 3 drivers/input/serio/i8042-x86ia64io.h | 7 drivers/input/touchscreen/elants_i2c.c | 1 drivers/input/touchscreen/mms114.c | 17 drivers/iommu/Kconfig | 2 drivers/misc/atmel-ssc.c | 24 - drivers/misc/habanalabs/goya/goya_security.c | 99 +++++ drivers/misc/mei/bus.c | 3 drivers/mtd/nand/raw/brcmnand/brcmnand.c | 24 - drivers/mtd/nand/raw/marvell_nand.c | 27 - drivers/mtd/nand/raw/nand_timings.c | 5 drivers/mtd/nand/raw/oxnas_nand.c | 24 + drivers/mtd/spi-nor/sfdp.c | 4 drivers/mtd/spi-nor/sfdp.h | 6 drivers/mtd/spi-nor/spansion.c | 25 + drivers/mtd/spi-nor/winbond.c | 29 + drivers/net/dsa/microchip/ksz8795.c | 3 drivers/net/dsa/microchip/ksz9477.c | 3 drivers/net/ethernet/marvell/mvneta.c | 24 + drivers/net/ethernet/pensando/ionic/ionic_lif.c | 4 drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c | 5 drivers/net/ipa/gsi.c | 13 drivers/net/ipa/ipa_cmd.c | 15 drivers/net/ipa/ipa_cmd.h | 8 drivers/net/ipa/ipa_endpoint.c | 2 drivers/net/usb/qmi_wwan.c | 1 drivers/nvme/host/core.c | 1 drivers/nvme/host/nvme.h | 13 drivers/opp/of.c | 4 drivers/pci/pci.c | 4 drivers/phy/allwinner/phy-sun4i-usb.c | 5 drivers/phy/rockchip/phy-rockchip-inno-dsidphy.c | 4 drivers/scsi/megaraid/megaraid_sas_fusion.c | 2 drivers/scsi/qla2xxx/qla_def.h | 4 drivers/slimbus/core.c | 1 drivers/soc/qcom/rpmh-rsc.c | 98 +++-- drivers/soc/qcom/rpmh.c | 56 +-- drivers/soc/qcom/socinfo.c | 2 drivers/soundwire/intel.c | 5 drivers/spi/spi-fsl-dspi.c | 15 drivers/spi/spi-sprd-adi.c | 2 drivers/spi/spi-sun6i.c | 14 drivers/staging/comedi/drivers/addi_apci_1500.c | 10 drivers/thermal/imx_thermal.c | 7 drivers/thermal/intel/int340x_thermal/int3403_thermal.c | 2 drivers/thermal/mtk_thermal.c | 6 drivers/thunderbolt/tunnel.c | 12 drivers/tty/serial/cpm_uart/cpm_uart_core.c | 9 drivers/tty/serial/mxs-auart.c | 12 drivers/tty/serial/serial_core.c | 112 ------ drivers/tty/serial/sh-sci.c | 3 drivers/tty/serial/xilinx_uartps.c | 1 drivers/uio/uio_pdrv_genirq.c | 4 drivers/usb/c67x00/c67x00-sched.c | 2 drivers/usb/chipidea/core.c | 24 + drivers/usb/dwc2/platform.c | 3 drivers/usb/gadget/function/f_uac1_legacy.c | 2 drivers/usb/gadget/udc/atmel_usba_udc.c | 2 drivers/usb/serial/ch341.c | 1 drivers/usb/serial/cypress_m8.c | 2 drivers/usb/serial/cypress_m8.h | 3 drivers/usb/serial/iuu_phoenix.c | 8 drivers/usb/serial/option.c | 6 drivers/virt/vboxguest/vboxguest_core.c | 6 drivers/virt/vboxguest/vboxguest_core.h | 15 drivers/virt/vboxguest/vboxguest_linux.c | 3 drivers/virt/vboxguest/vmmdev.h | 2 drivers/xen/xenbus/xenbus_client.c | 171 ++++------ fs/cifs/transport.c | 2 fs/fuse/file.c | 14 fs/fuse/inode.c | 15 fs/gfs2/glops.c | 10 fs/gfs2/incore.h | 1 fs/gfs2/log.c | 15 fs/gfs2/log.h | 4 fs/gfs2/main.c | 1 fs/gfs2/ops_fstype.c | 13 fs/gfs2/recovery.c | 4 fs/gfs2/super.c | 20 - fs/io_uring.c | 10 fs/nfs/nfs4proc.c | 20 + fs/overlayfs/export.c | 2 fs/overlayfs/file.c | 10 fs/overlayfs/super.c | 23 + include/dt-bindings/clock/qcom,gcc-msm8998.h | 1 include/linux/blkdev.h | 1 include/linux/bpf.h | 13 include/linux/cgroup-defs.h | 8 include/linux/cgroup.h | 4 include/linux/dma-buf.h | 1 include/linux/if_vlan.h | 29 + include/linux/input/elan-i2c-ids.h | 7 include/linux/serial_core.h | 102 +++++ include/linux/skmsg.h | 13 include/net/dst.h | 10 include/net/genetlink.h | 10 include/net/inet_ecn.h | 25 - include/net/pkt_sched.h | 11 include/trace/events/rxrpc.h | 2 include/uapi/linux/vboxguest.h | 4 kernel/bpf/syscall.c | 2 kernel/cgroup/cgroup.c | 31 + kernel/irq/manage.c | 37 ++ kernel/sched/core.c | 2 kernel/sched/fair.c | 15 kernel/time/timer.c | 21 - mm/memory.c | 21 - net/bridge/br_multicast.c | 2 net/ceph/osd_client.c | 1 net/core/filter.c | 10 net/core/sock.c | 2 net/core/sock_map.c | 53 ++- net/ethtool/netlink.c | 27 - net/hsr/hsr_device.c | 11 net/ipv4/icmp.c | 4 net/ipv4/ip_output.c | 2 net/ipv4/ping.c | 3 net/ipv4/route.c | 2 net/ipv4/tcp.c | 15 net/ipv4/tcp_cong.c | 2 net/ipv4/tcp_input.c | 2 net/ipv4/tcp_ipv4.c | 15 net/ipv4/tcp_output.c | 8 net/ipv6/icmp.c | 4 net/ipv6/route.c | 7 net/l2tp/l2tp_core.c | 5 net/llc/af_llc.c | 10 net/mptcp/options.c | 6 net/netlink/genetlink.c | 97 ----- net/qrtr/qrtr.c | 4 net/sched/act_connmark.c | 9 net/sched/act_csum.c | 2 net/sched/act_ct.c | 9 net/sched/act_ctinfo.c | 9 net/sched/act_mpls.c | 2 net/sched/act_skbedit.c | 2 net/sched/cls_api.c | 2 net/sched/cls_flow.c | 8 net/sched/cls_flower.c | 2 net/sched/em_ipset.c | 2 net/sched/em_ipt.c | 2 net/sched/em_meta.c | 2 net/sched/sch_atm.c | 8 net/sched/sch_cake.c | 4 net/sched/sch_dsmark.c | 6 net/sched/sch_teql.c | 2 net/sunrpc/xprtrdma/rpc_rdma.c | 4 net/sunrpc/xprtrdma/transport.c | 5 net/sunrpc/xprtrdma/verbs.c | 35 -- security/apparmor/match.c | 5 sound/pci/hda/patch_realtek.c | 27 + sound/usb/line6/capture.c | 2 sound/usb/line6/driver.c | 2 sound/usb/line6/playback.c | 2 sound/usb/midi.c | 17 tools/perf/util/stat.c | 6 tools/testing/selftests/net/fib_nexthops.sh | 13 271 files changed, 2280 insertions(+), 1100 deletions(-)
AceLan Kao (2):
net: usb: qmi_wwan: add support for Quectel EG95 LTE modem
USB: serial: option: add Quectel EG95 LTE modem
Aharon Landau (1):
RDMA/mlx5: Verify that QP is created with RQ or SQ
Alex Deucher (1):
drm/amdgpu/display: create fake mst encoders ahead of time (v4)
Alex Elder (2):
net: ipa: always check for stopped channel
net: ipa: introduce ipa_cmd_tag_process()
Alex Hung (1):
thermal: int3403_thermal: Downgrade error message
Alexander Lobakin (1):
virtio: virtio_console: add missing MODULE_DEVICE_TABLE() for rproc serial
Alexander Shishkin (4):
intel_th: pci: Add Jasper Lake CPU support
intel_th: pci: Add Tiger Lake PCH-H support
intel_th: pci: Add Emmitsburg PCH support
intel_th: Fix a NULL dereference when hub driver is not loaded
Alexander Usyskin (1):
mei: bus: don't clean driver pointer
Amir Goldstein (3):
ovl: fix regression with re-formatted lower squashfs
ovl: relax WARN_ON() when decoding lower directory file handle
ovl: fix unneeded call to ovl_change_flags()
Andreas Schwab (1):
riscv: use 16KB kernel stack on 64-bit
Andy Lutomirski (1):
x86/ioperm: Fix io bitmap invalidation on Xen PV
Andy Shevchenko (4):
i2c: eg20t: Load module automatically if ID matches
dmaengine: dw: Initialize channel before each transfer
serial: core: Initialise spin lock before use in uart_configure_port()
gpio: pca953x: disable regmap locking for automatic address incrementing
Aneesh Kumar K.V (1):
powerpc/book3s64/pkeys: Fix pkey_access_permitted() for execute disable pkey
Angelo Dureghello (1):
m68k: mm: fix node memblock init
Anna Schumaker (1):
NFS: Fix interrupted slots by sending a solo SEQUENCE operation
Anson Huang (1):
thermal/drivers: imx: Fix missing of_node_put() at probe time
Anthony Iliopoulos (1):
nvme: explicitly update mpath disk capacity on revalidation
Ard Biesheuvel (2):
arm64/alternatives: use subsections for replacement sequences arm64/alternatives: don't patch up internal branches
Arjun Roy (1):
mm/memory.c: properly pte_offset_map_lock/unlock in vm_insert_pages()
Armas Spann (1):
ALSA: hda/realtek: enable headset mic of ASUS ROG Zephyrus G14(G401) series with ALC289
Bernard Zhao (1):
drm/msm: fix potential memleak in error branch
Bjorn Helgaas (1):
PCI/PM: Call .bridge_d3() hook only if non-NULL
Bob Peterson (5):
gfs2: eliminate GIF_ORDERED in favor of list_empty
gfs2: freeze should work on read-only mounts
gfs2: read-only mounts should grab the sd_freeze_gl glock
gfs2: When freezing gfs2, use GL_EXACT and not GL_NOCACHE
gfs2: The freeze glock should never be frozen
Carl Huang (1):
net: qrtr: free flow in __qrtr_node_release
Chandrakanth Patil (1):
scsi: megaraid_sas: Remove undefined ENABLE_IRQ_POLL macro
Charan Teja Kalla (1):
dmabuf: use spinlock to access dmabuf->name
Chirantan Ekbote (1):
fuse: Fix parameter for FS_IOC_{GET,SET}FLAGS
Chris Wilson (2):
drm/i915/gt: Ignore irq enabling on the virtual engines drm/i915/gt: Only swap to a random sibling once upon creation
Christoph Paasch (1):
tcp: make sure listeners don't initialize congestion-control state
Christophe JAILLET (1):
iio: adc: ad7780: Fix a resource handling path in 'ad7780_probe()'
Christophe Leroy (1):
tty: serial: cpm_uart: Fix behaviour for non existing GPIOs
Chuck Lever (4):
xprtrdma: Fix double-free in rpcrdma_ep_create()
xprtrdma: Fix recursion into rpcrdma_xprt_disconnect()
xprtrdma: Fix return code from rpcrdma_xprt_connect()
xprtrdma: Fix handling of connect errors
Chuhong Yuan (2):
iio: mma8452: Add missed iio_device_unregister() call in mma8452_probe()
serial: mxs-auart: add missed iounmap() in probe failure and remove
Codrin Ciubotariu (1):
net: dsa: microchip: set the correct number of ports
Colin Ian King (3):
scsi: qla2xxx: make 1-bit bit-fields unsigned int
phy: sun4i-usb: fix dereference of pointer phy0 before it is null checked
xprtrdma: fix incorrect header size calculations
Colin Xu (1):
drm/i915/gvt: Fix two CFL MMIO handling caused by regression.
Cong Wang (4):
net_sched: fix a memory leak in atm_tc_init()
cgroup: fix cgroup_sk_alloc() for sk_clone_lock()
cgroup: Fix sock_cgroup_data on big-endian.
genetlink: get rid of family->attrbuf
Dan Carpenter (2):
xen/xenbus: Fix a double free in xenbus_map_ring_pv()
staging: comedi: verify array index is correct before using it
Dave Jiang (2):
dmaengine: idxd: cleanup workqueue config after disabling
dmaengine: idxd: fix misc interrupt handler thread unmasking
Dave Wang (1):
Input: elan_i2c - add more hardware ID for Lenovo laptops
David Ahern (2):
ipv6: fib6_select_path can not use out path for nexthop objects
ipv6: Fix use of anycast address with loopback
David Howells (1):
rxrpc: Fix trace string
David Pedersen (1):
Input: i8042 - add Lenovo XiaoXin Air 12 to i8042 nomux list
Dinghao Liu (1):
iio: magnetometer: ak8974: Fix runtime PM imbalance on error
Dinh Nguyen (3):
arm64: dts: agilex: add status to qspi dts node
arm64: dts: stratix10: add status to qspi dts node
arm64: dts: stratix10: increase QSPI reg address in nand dts file
Dmitry Torokhov (2):
HID: magicmouse: do not set up autorepeat
Revert "Input: elants_i2c - report resolution information for touch major"
Douglas Anderson (1):
regmap: debugfs: Don't sleep while atomic for fast_io regmaps
Eddie James (1):
clk: AST2600: Add mux for EMMC clock
Enric Balletbo i Serra (1):
Revert "thermal: mediatek: fix register index error"
Eric Dumazet (6):
llc: make sure applications use ARPHRD_ETHER
tcp: fix SO_RCVLOWAT possible hangs under high mem pressure
tcp: md5: add missing memory barriers in tcp_md5_do_add()/tcp_md5_hash_key()
tcp: md5: do not send silly options in SYNCOOKIES
tcp: md5: refine tcp_md5_do_add()/tcp_md5_hash_key() barriers
tcp: md5: allow changing MD5 keys in all socket states
Esben Haabendal (2):
uio_pdrv_genirq: Remove warning when irq is not specified
uio_pdrv_genirq: fix use without device tree and no interrupt
Florian Fainelli (1):
arm64: Add missing sentinel to erratum_1463225
Frederic Weisbecker (2):
timer: Prevent base->clk from moving backward
timer: Fix wheel index calculation on last level
Greg Kroah-Hartman (1):
Linux 5.7.10
Hans de Goede (2):
virt: vbox: Fix VBGL_IOCTL_VMMDEV_REQUEST_BIG and _LOG req numbers to match upstream
virt: vbox: Fix guest capabilities mask check
Hou Tao (1):
blk-mq-debugfs: update blk_queue_flag_name[] accordingly for new flags
Igor Moura (1):
USB: serial: ch341: add new Product ID for CH340
Ilya Dryomov (1):
libceph: don't omit recovery_deletes in target_copy()
James Hilliard (2):
HID: quirks: Ignore Simply Automated UPB PIM
USB: serial: cypress_m8: enable Simply Automated UPB PIM
Jan Kiszka (1):
Revert "tty: xilinx_uartps: Fix missing id assignment to the console"
Jeffrey Hugo (1):
clk: qcom: Add missing msm8998 ufs_unipro_core_clk_src
Jerome Brunet (1):
arm64: dts: meson: add missing gxl rng clock
Jian-Hong Pan (1):
ALSA: hda/realtek: Enable headset mic of Acer TravelMate B311R-31 with ALC256
Jin Yao (1):
perf stat: Zero all the 'ena' and 'run' array slot stats for interval mode
Johan Hovold (3):
USB: serial: iuu_phoenix: fix memory corruption Revert "serial: core: Refactor uart_unlock_and_check_sysrq()"
serial: core: fix sysrq overhead regression
John Johansen (1):
apparmor: ensure that dfa state tables have entries
Jonathan Cameron (6):
iio:magnetometer:ak8974: Fix alignment and data leak issues iio:humidity:hdc100x Fix alignment and data leak issues iio:humidity:hts221 Fix alignment and data leak issues iio:pressure:ms5611 Fix buffer element alignment iio:health:afe4403 Fix timestamp alignment and prevent data leak. iio:health:afe4404 Fix timestamp alignment and prevent data leak.
Josip Pavic (1):
drm/amd/display: handle failed allocation during stream construction
Juergen Gross (2):
xen/xenbus: avoid large structs and arrays on the stack xen/xenbus: let xenbus_map_ring_valloc() return errno values only
Jörgen Storvist (1):
USB: serial: option: add GosunCn GM500 series
Kailang Yang (3):
ALSA: hda/realtek - change to suitable link model for ASUS platform
ALSA: hda/realtek - Enable Speaker for ASUS UX533 and UX534
ALSA: hda/realtek - Enable Speaker for ASUS UX563
Kangmin Park (1):
dt-bindings: mailbox: zynqmp_ipi: fix unit address
Kevin Buettner (1):
copy_xstate_to_kernel: Fix typo which caused GDB regression
Krishna Manikandan (1):
drm/msm/dpu: allow initialization of encoder locks during encoder init
Krzysztof Kozlowski (5):
spi: spi-fsl-dspi: Fix lockup if device is shutdown during SPI transfer
ARM: dts: socfpga: Align L2 cache-controller nodename with dtschema
arm64: dts: spcfpga: Align GIC, NAND and UART nodenames with dtschema
dmaengine: fsl-edma: Fix NULL pointer exception in fsl_edma_tx_handler
dmaengine: mcf-edma: Fix NULL pointer exception in mcf_edma_tx_handler
Lad Prabhakar (1):
serial: sh-sci: Initialize spinlock for uart console
Lingling Xu (1):
spi: sprd: switch the sequence of setting WDG_LOAD_LOW and _HIGH
Linus Lüssing (1):
bridge: mcast: Fix MLD2 Report IPv6 payload length check
Lorenz Bauer (2):
bpf: sockmap: Check value of unused args to BPF_PROG_ATTACH
bpf: sockmap: Require attach_bpf_fd when detaching a program
Lu Baolu (1):
iommu/vt-d: Make Intel SVM code 64-bit only
Maarten Lankhorst (1):
drm/i915: Move cec_notifier to intel_hdmi_connector_unregister, v2.
Maciej S. Szmigiero (2):
HID: logitech-hidpp: avoid repeated "multiplier = " log messages
hwmon: (drivetemp) Avoid SCT usage on Toshiba DT01ACA family drives
Mantas Pucka (1):
mtd: spi-nor: winbond: Fix 4-byte opcode support for w25q256
Marc Kleine-Budde (1):
spi: spi-sun6i: sun6i_spi_transfer_one(): fix setting of clock rate
Marek Szyprowski (1):
drm/exynos: Properly propagate return value in drm_iommu_attach_device()
Martin Varghese (1):
net: Added pointer check for dst->ops->neigh_lookup in dst_neigh_lookup_skb
Masahiro Yamada (2):
dt-bindings: bus: uniphier-system-bus: fix warning in example
dt-bindings: fix error in 'make clean' after 'make dt_binding_check'
Mathieu Desnoyers (1):
sched: Fix unreliable rseq cpu_id for new tasks
Matt Ranostay (1):
iio: core: add missing IIO_MOD_H2/ETHANOL string identifiers
Maulik Shah (3):
soc: qcom: rpmh: Update dirty flag only when data changes
soc: qcom: rpmh: Invalidate SLEEP and WAKE TCSes before flushing new data
soc: qcom: rpmh-rsc: Allow using free WAKE TCS for active request
Miaohe Lin (1):
net: ipv4: Fix wrong type conversion from hint to rt in ip_route_use_hint()
Michal Kubecek (1):
ethtool: fix genlmsg_put() failure handling in ethnl_default_dumpit()
Michał Mirosław (2):
usb: gadget: udc: atmel: fix uninitialized read in debug printk
misc: atmel-ssc: lock with mutex instead of spinlock
Mika Westerberg (1):
thunderbolt: Fix path indices used in USB3 tunnel discovery
Mike Leach (1):
coresight: etmv4: Fix CPU power management setup in probe() function
Mike Rapoport (1):
m68k: nommu: register start of the memory with memblock
Miklos Szeredi (2):
fuse: ignore 'data' argument of mount(..., MS_REMOUNT)
fuse: use ->reconfigure() instead of ->remount_fs()
Minas Harutyunyan (1):
usb: dwc2: Fix shutdown callback in platform
Miquel Raynal (7):
mtd: rawnand: marvell: Fix the condition on a return code
mtd: rawnand: marvell: Use nand_cleanup() when the device is not yet registered
mtd: rawnand: marvell: Fix probe error path
mtd: rawnand: timings: Fix default tR_max and tCCS_min timings
mtd: rawnand: oxnas: Keep track of registered devices
mtd: rawnand: oxnas: Unregister all devices on error
mtd: rawnand: oxnas: Release all devices in the _remove() path
Nathan Chancellor (1):
clk: mvebu: ARMADA_AP_CPU_CLK needs to select ARMADA_AP_CP_HELPER
Navid Emamdoost (2):
drm/exynos: fix ref count leak in mic_pre_enable
iio: pressure: zpa2326: handle pm_runtime_get_sync failure
Neil Armstrong (1):
arm64: dts: meson-gxl-s805x: reduce initial Mali450 core frequency
Nikhil Rao (1):
dmaengine: idxd: fix cdev locking for open and release
Paolo Abeni (1):
mptcp: fix DSS map generation on fin retransmission
Pavel Begunkov (1):
io_uring: fix recvmsg memory leak with buffer selection
Peter Chen (1):
usb: chipidea: core: add wakeup support for extcon
Peter Ujfalusi (4):
dmaengine: ti: k3-udma: Use correct node to read "ti,udma-atype"
dmaengine: ti: k3-udma: Fix delayed_work usage for tx drain workaround
dmaengine: dmatest: stop completed threads when running without set channel
dmaengine: ti: k3-udma: Disable memcopy via MCU NAVSS on am654
Petteri Aimonen (1):
x86/fpu: Reset MXCSR to default in kernel_fpu_begin()
Pierre-Louis Bossart (1):
soundwire: intel: fix memory leak with devm_kasprintf
Raju P.L.S.S.S.N (1):
soc: qcom: rpmh-rsc: Clear active mode configuration for wake TCS
Robin Gong (1):
dmaengine: fsl-edma-common: correct DSIZE_32BYTE
Roland Scheidegger (1):
drm/vmwgfx: fix update of display surface when resolution changes
Ronnie Sahlberg (1):
cifs: prevent truncation from long to int in wait_for_free_credits
Sabrina Dubroca (1):
ipv4: fill fl4_icmp_{type,code} in ping_v4_sendmsg
Sai Prakash Ranjan (3):
arm64: Add MIDR value for KRYO4XX gold CPU cores
arm64: Add KRYO4XX gold CPU cores to erratum list 1463225 and 1418040
arm64: Add KRYO4XX silver CPU cores to erratum list 1530923 and 1024718Saravana Kannan (1):
slimbus: core: Fix mismatch in of_node_get/put
Sascha Hauer (2):
net: ethernet: mvneta: Do not error out in non serdes modes
net: ethernet: mvneta: Add back interface mode validation
Satheesh Rajendran (1):
powerpc/pseries/svm: Fix incorrect check for shared_lppaca_size
Sean Tranchetti (1):
genetlink: remove genl_bind
Sean Wang (1):
arm: dts: mt7623: add phy-mode property for gmac2
Sebastian Parschauer (1):
HID: quirks: Always poll Obins Anne Pro 2 keyboard
Sergei Shtylyov (1):
mtd: spi-nor: spansion: fix writes on S25FS512S
Shannon Nelson (2):
ionic: no link check while resetting queues
ionic: export features for vlans to use
Srinivas Kandagatla (1):
soc: qcom: socinfo: add missing soc_id sysfs entry
Srinivas Pandruvada (1):
ACPI: DPTF: Add battery participant for TigerLake
Stephan Gerhold (1):
Input: mms114 - add extra compatible for mms345l
Syed Nayyar Waris (2):
counter: 104-quad-8: Add lock guards - differential encoder
counter: 104-quad-8: Add lock guards - filter clock prescaler
Taehee Yoo (2):
net: rmnet: do not allow to add multiple bridge interfaces
hsr: fix interface leak in error path of hsr_dev_finalize()
Takashi Iwai (3):
ALSA: line6: Perform sanity check for each URB creation
ALSA: line6: Sync the pending work cancel at disconnection
ALSA: usb-audio: Fix race against the error recovery URB submission
Taniya Das (1):
clk: qcom: gcc: Add support for a new frequency for SC7180
Thomas Gleixner (1):
genirq/affinity: Handle affinity setting on inactive interrupts correctly
Tiezhu Yang (1):
phy: rockchip: Fix return value of inno_dsidphy_probe()
Tim Harvey (1):
ARM: dts: imx6qdl-gw551x: fix audio SSI
Toke Høiland-Jørgensen (2):
sched: consistently handle layer3 header accesses in the presence of VLANs
vlan: consolidate VLAN parsing code and limit max parsing depth
Tom Rix (1):
USB: c67x00: fix use after free in c67x00_giveback_urb
Tomer Tayar (1):
habanalabs: Align protection bits configuration of all TPCs
Tony Lindgren (3):
bus: ti-sysc: Fix wakeirq sleeping function called from invalid context
bus: ti-sysc: Fix sleeping function called from invalid context for RTC quirk
bus: ti-sysc: Do not disable on suspend for no-idle
Umesh Nerlige Ramappa (1):
drm/i915/perf: Use GTT when saving/restoring engine GPR
Vasily Averin (2):
tpm_tis: extra chip->ops check on error path in tpm_tis_core_init
fuse: don't ignore errors from fuse_writepages_fill()
Vincent Guittot (1):
sched/fair: handle case of task_h_load() returning 0
Vinod Koul (2):
clk: qcom: gcc: Add GPU and NPU clocks for SM8150
clk: qcom: gcc: Add missing UFS clocks for SM8150
Vishwas M (1):
hwmon: (emc2103) fix unable to change fan pwm1_enable attribute
Wade Mealing (1):
Revert "zram: convert remaining CLASS_ATTR() to CLASS_ATTR_RO()"
Walter Lozano (1):
opp: Increase parsed_static_opps in _of_add_opp_table_v1()
Wei Yongjun (1):
keys: asymmetric: fix error return code in software_key_query()
Will Deacon (3):
arm64: ptrace: Override SPSR.SS when single-stepping is enabled
arm64: ptrace: Consistently use pseudo-singlestep exceptions
arm64: compat: Ensure upper 32 bits of x0 are zero on syscall return
Willem de Bruijn (1):
ip: Fix SO_MARK in RST, ACK and ICMP packets
Xiaojie Yuan (1):
drm/amdgpu/sdma5: fix wptr overwritten in ->get_wptr()
Xin Long (1):
l2tp: remove skb_dst_set() from l2tp_xmit_skb()
Yoshihiro Shimoda (1):
dmaengine: sh: usb-dmac: set tx_result parameters
Zhang Qiang (1):
usb: gadget: function: fix missing spinlock in f_uac1_legacy
Zhu Yanjun (1):
RDMA/rxe: Set default vendor ID
chen gong (1):
drm/amdgpu/powerplay: Modify SMC message name for setting power profile mode
dillon min (1):
ARM: dts: Fix dcan driver probe failed on am437x platform
hersen wu (1):
drm/amd/display: OLED panel backlight adjust not work with external display connected
youngjun (1):
ovl: inode reference leak in ovl_is_inuse true case.
Álvaro Fernández Rojas (2):
mtd: rawnand: brcmnand: correctly verify erased pages
mtd: rawnand: brcmnand: fix CS0 layout
Greg Kroah-Hartman
maintainerDocumentation/arm64/silicon-errata.rst +8 -0
@@ -147,6 +147,14 @@ stable kernels. +----------------+-----------------+-----------------+-----------------------------+ | Qualcomm Tech. | Falkor v{1,2} | E1041 | QCOM_FALKOR_ERRATUM_1041 | +----------------+-----------------+-----------------+-----------------------------+ +| Qualcomm Tech. | Kryo4xx Gold | N/A | ARM64_ERRATUM_1463225 | ++----------------+-----------------+-----------------+-----------------------------+ +| Qualcomm Tech. | Kryo4xx Gold | N/A | ARM64_ERRATUM_1418040 | ++----------------+-----------------+-----------------+-----------------------------+ +| Qualcomm Tech. | Kryo4xx Silver | N/A | ARM64_ERRATUM_1530923 | ++----------------+-----------------+-----------------+-----------------------------+ +| Qualcomm Tech. | Kryo4xx Silver | N/A | ARM64_ERRATUM_1024718 | ++----------------+-----------------+-----------------+-----------------------------+ +----------------+-----------------+-----------------+-----------------------------+ | Fujitsu | A64FX | E#010001 | FUJITSU_ERRATUM_010001 | +----------------+-----------------+-----------------+-----------------------------+
Documentation/devicetree/bindings/Makefile +5 -0
@@ -45,3 +45,8 @@ $(obj)/processed-schema.yaml: $(DT_SCHEMA_FILES) FORCE $(call if_changed,mk_schema) extra-y += processed-schema.yaml + +# Hack: avoid 'Argument list too long' error for 'make clean'. Remove most of +# build artifacts here before they are processed by scripts/Makefile.clean +clean-files = $(shell find $(obj) \( -name '*.example.dts' -o \ + -name '*.example.dt.yaml' \) -delete 2>/dev/null)
Documentation/devicetree/bindings/bus/socionext,uniphier-system-bus.yaml +2 -2
@@ -80,14 +80,14 @@ examples: ranges = <1 0x00000000 0x42000000 0x02000000>, <5 0x00000000 0x46000000 0x01000000>; - ethernet@1,01f00000 { + ethernet@1,1f00000 { compatible = "smsc,lan9115"; reg = <1 0x01f00000 0x1000>; interrupts = <0 48 4>; phy-mode = "mii"; }; - uart@5,00200000 { + serial@5,200000 { compatible = "ns16550a"; reg = <5 0x00200000 0x20>; interrupts = <0 49 4>;
Documentation/devicetree/bindings/mailbox/xlnx,zynqmp-ipi-mailbox.txt +1 -1
@@ -87,7 +87,7 @@ Example: ranges; /* APU<->RPU0 IPI mailbox controller */ - ipi_mailbox_rpu0: mailbox@ff90400 { + ipi_mailbox_rpu0: mailbox@ff990400 { reg = <0xff990400 0x20>, <0xff990420 0x20>, <0xff990080 0x20>,
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 7 -SUBLEVEL = 9 +SUBLEVEL = 10 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/arm/boot/dts/am437x-l4.dtsi +10 -4
@@ -1544,8 +1544,9 @@ target-module@cc000 { /* 0x481cc000, ap 50 46.0 */ reg = <0xcc020 0x4>; reg-names = "rev"; /* Domains (P, C): per_pwrdm, l4ls_clkdm */ - clocks = <&l4ls_clkctrl AM4_L4LS_D_CAN0_CLKCTRL 0>; - clock-names = "fck"; + clocks = <&l4ls_clkctrl AM4_L4LS_D_CAN0_CLKCTRL 0>, + <&dcan0_fck>; + clock-names = "fck", "osc"; #address-cells = <1>; #size-cells = <1>; ranges = <0x0 0xcc000 0x2000>;
@@ -1553,6 +1554,8 @@ target-module@cc000 { /* 0x481cc000, ap 50 46.0 */ dcan0: can@0 { compatible = "ti,am4372-d_can", "ti,am3352-d_can"; reg = <0x0 0x2000>; + clocks = <&dcan0_fck>; + clock-names = "fck"; syscon-raminit = <&scm_conf 0x644 0>; interrupts = <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>; status = "disabled";
@@ -1564,8 +1567,9 @@ target-module@d0000 { /* 0x481d0000, ap 52 3a.0 */ reg = <0xd0020 0x4>; reg-names = "rev"; /* Domains (P, C): per_pwrdm, l4ls_clkdm */ - clocks = <&l4ls_clkctrl AM4_L4LS_D_CAN1_CLKCTRL 0>; - clock-names = "fck"; + clocks = <&l4ls_clkctrl AM4_L4LS_D_CAN1_CLKCTRL 0>, + <&dcan1_fck>; + clock-names = "fck", "osc"; #address-cells = <1>; #size-cells = <1>; ranges = <0x0 0xd0000 0x2000>;
@@ -1573,6 +1577,8 @@ target-module@d0000 { /* 0x481d0000, ap 52 3a.0 */ dcan1: can@0 { compatible = "ti,am4372-d_can", "ti,am3352-d_can"; reg = <0x0 0x2000>; + clocks = <&dcan1_fck>; + clock-name = "fck"; syscon-raminit = <&scm_conf 0x644 1>; interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>; status = "disabled";
arch/arm/boot/dts/imx6qdl-gw551x.dtsi +1 -1
@@ -110,7 +110,7 @@ sound-digital { simple-audio-card,frame-master = <&sound_codec>; sound_cpu: simple-audio-card,cpu { - sound-dai = <&ssi2>; + sound-dai = <&ssi1>; }; sound_codec: simple-audio-card,codec {
arch/arm/boot/dts/mt7623n-rfb-emmc.dts +1 -0
@@ -138,6 +138,7 @@ fixed-link { mac@1 { compatible = "mediatek,eth-mac"; reg = <1>; + phy-mode = "rgmii"; phy-handle = <&phy5>; };
arch/arm/boot/dts/socfpga.dtsi +1 -1
@@ -710,7 +710,7 @@ ocram-ecc@ffd08144 { }; }; - L2: l2-cache@fffef000 { + L2: cache-controller@fffef000 { compatible = "arm,pl310-cache"; reg = <0xfffef000 0x1000>; interrupts = <0 38 0x04>;
arch/arm/boot/dts/socfpga_arria10.dtsi +1 -1
@@ -636,7 +636,7 @@ sdr: sdr@ffcfb100 { reg = <0xffcfb100 0x80>; }; - L2: l2-cache@fffff000 { + L2: cache-controller@fffff000 { compatible = "arm,pl310-cache"; reg = <0xfffff000 0x1000>; interrupts = <0 18 IRQ_TYPE_LEVEL_HIGH>;
arch/arm64/boot/dts/altera/socfpga_stratix10.dtsi +4 -4
@@ -77,7 +77,7 @@ psci { method = "smc"; }; - intc: intc@fffc1000 { + intc: interrupt-controller@fffc1000 { compatible = "arm,gic-400", "arm,cortex-a15-gic"; #interrupt-cells = <3>; interrupt-controller;
@@ -302,7 +302,7 @@ mmc: dwmmc0@ff808000 { status = "disabled"; }; - nand: nand@ffb90000 { + nand: nand-controller@ffb90000 { #address-cells = <1>; #size-cells = <0>; compatible = "altr,socfpga-denali-nand";
@@ -445,7 +445,7 @@ timer3: timer3@ffd00100 { clock-names = "timer"; }; - uart0: serial0@ffc02000 { + uart0: serial@ffc02000 { compatible = "snps,dw-apb-uart"; reg = <0xffc02000 0x100>; interrupts = <0 108 4>;
@@ -456,7 +456,7 @@ uart0: serial0@ffc02000 { status = "disabled"; }; - uart1: serial1@ffc02100 { + uart1: serial@ffc02100 { compatible = "snps,dw-apb-uart"; reg = <0xffc02100 0x100>; interrupts = <0 109 4>;
arch/arm64/boot/dts/altera/socfpga_stratix10_socdk.dts +1 -0
@@ -155,6 +155,7 @@ rtc@68 { }; &qspi { + status = "okay"; flash@0 { #address-cells = <1>; #size-cells = <1>;
arch/arm64/boot/dts/altera/socfpga_stratix10_socdk_nand.dts +4 -3
@@ -188,6 +188,7 @@ rtc@68 { }; &qspi { + status = "okay"; flash@0 { #address-cells = <1>; #size-cells = <1>;
@@ -211,12 +212,12 @@ partitions { qspi_boot: partition@0 { label = "Boot and fpga data"; - reg = <0x0 0x034B0000>; + reg = <0x0 0x03FE0000>; }; - qspi_rootfs: partition@4000000 { + qspi_rootfs: partition@3FE0000 { label = "Root Filesystem - JFFS2"; - reg = <0x034B0000 0x0EB50000>; + reg = <0x03FE0000 0x0C020000>; }; }; };
arch/arm64/boot/dts/amlogic/meson-gxl-s805x-libretech-ac.dts +1 -1
@@ -9,7 +9,7 @@ #include <dt-bindings/input/input.h> -#include "meson-gxl-s905x.dtsi" +#include "meson-gxl-s805x.dtsi" / { compatible = "libretech,aml-s805x-ac", "amlogic,s805x",
arch/arm64/boot/dts/amlogic/meson-gxl-s805x-p241.dts +1 -1
@@ -9,7 +9,7 @@ #include <dt-bindings/input/input.h> -#include "meson-gxl-s905x.dtsi" +#include "meson-gxl-s805x.dtsi" / { compatible = "amlogic,p241", "amlogic,s805x", "amlogic,meson-gxl";
arch/arm64/boot/dts/amlogic/meson-gxl-s805x.dtsi new file +24 -0
@@ -0,0 +1,24 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) +/* + * Copyright (c) 2020 BayLibre SAS + * Author: Neil Armstrong <[email protected]> + */ + +#include "meson-gxl-s905x.dtsi" + +/ { + compatible = "amlogic,s805x", "amlogic,meson-gxl"; +}; + +/* The S805X Package doesn't seem to handle the 744MHz OPP correctly */ +&mali { + assigned-clocks = <&clkc CLKID_MALI_0_SEL>, + <&clkc CLKID_MALI_0>, + <&clkc CLKID_MALI>; /* Glitch free mux */ + assigned-clock-parents = <&clkc CLKID_FCLK_DIV3>, + <0>, /* Do Nothing */ + <&clkc CLKID_MALI_0>; + assigned-clock-rates = <0>, /* Do Nothing */ + <666666666>, + <0>; /* Do Nothing */ +};
arch/arm64/boot/dts/amlogic/meson-gxl.dtsi +5 -0
@@ -298,6 +298,11 @@ clkc: clock-controller { }; }; +&hwrng { + clocks = <&clkc CLKID_RNG0>; + clock-names = "core"; +}; + &i2c_A { clocks = <&clkc CLKID_I2C>; };
arch/arm64/boot/dts/intel/socfpga_agilex_socdk.dts +1 -0
@@ -98,6 +98,7 @@ &watchdog0 { }; &qspi { + status = "okay"; flash@0 { #address-cells = <1>; #size-cells = <1>;
arch/arm64/include/asm/alternative.h +8 -8
@@ -73,11 +73,11 @@ static inline void apply_alternatives_module(void *start, size_t length) { }".pushsection .altinstructions,\"a\"\n" \ ALTINSTR_ENTRY(feature) \".popsection\n" \ -".pushsection .altinstr_replacement, \"a\"\n" \ +".subsection 1\n" \"663:\n\t" \ newinstr"\n" \"664:\n\t" \ -".popsection\n\t" \ +".previous\n\t" \".org . - (664b-663b) + (662b-661b)\n\t" \".org . - (662b-661b) + (664b-663b)\n" \".endif\n"
@@ -117,9 +117,9 @@ static inline void apply_alternatives_module(void *start, size_t length) { } 662: .pushsection .altinstructions, "a" altinstruction_entry 661b, 663f, \cap, 662b-661b, 664f-663f .popsection - .pushsection .altinstr_replacement,"ax" + .subsection 1 663: \insn2 -664: .popsection +664: .previous .org . - (664b-663b) + (662b-661b) .org . - (662b-661b) + (664b-663b) .endif
@@ -160,7 +160,7 @@ static inline void apply_alternatives_module(void *start, size_t length) { } .pushsection .altinstructions, "a" altinstruction_entry 663f, 661f, \cap, 664f-663f, 662f-661f .popsection - .pushsection .altinstr_replacement, "ax" + .subsection 1 .align 2 /* So GAS knows label 661 is suitably aligned */ 661: .endm
@@ -179,9 +179,9 @@ static inline void apply_alternatives_module(void *start, size_t length) { } .macro alternative_else 662: .if .Lasm_alt_mode==0 - .pushsection .altinstr_replacement,"ax" + .subsection 1 .else - .popsection + .previous .endif 663: .endm
@@ -192,7 +192,7 @@ static inline void apply_alternatives_module(void *start, size_t length) { } .macro alternative_endif 664: .if .Lasm_alt_mode==0 - .popsection + .previous .endif .org . - (664b-663b) + (662b-661b) .org . - (662b-661b) + (664b-663b)
arch/arm64/include/asm/cputype.h +2 -0
@@ -86,6 +86,7 @@#define QCOM_CPU_PART_FALKOR 0xC00#define QCOM_CPU_PART_KRYO 0x200#define QCOM_CPU_PART_KRYO_3XX_SILVER 0x803 +#define QCOM_CPU_PART_KRYO_4XX_GOLD 0x804#define QCOM_CPU_PART_KRYO_4XX_SILVER 0x805#define NVIDIA_CPU_PART_DENVER 0x003
@@ -114,6 +115,7 @@#define MIDR_QCOM_FALKOR MIDR_CPU_MODEL(ARM_CPU_IMP_QCOM, QCOM_CPU_PART_FALKOR)#define MIDR_QCOM_KRYO MIDR_CPU_MODEL(ARM_CPU_IMP_QCOM, QCOM_CPU_PART_KRYO)#define MIDR_QCOM_KRYO_3XX_SILVER MIDR_CPU_MODEL(ARM_CPU_IMP_QCOM, QCOM_CPU_PART_KRYO_3XX_SILVER) +#define MIDR_QCOM_KRYO_4XX_GOLD MIDR_CPU_MODEL(ARM_CPU_IMP_QCOM, QCOM_CPU_PART_KRYO_4XX_GOLD)#define MIDR_QCOM_KRYO_4XX_SILVER MIDR_CPU_MODEL(ARM_CPU_IMP_QCOM, QCOM_CPU_PART_KRYO_4XX_SILVER)#define MIDR_NVIDIA_DENVER MIDR_CPU_MODEL(ARM_CPU_IMP_NVIDIA, NVIDIA_CPU_PART_DENVER)#define MIDR_NVIDIA_CARMEL MIDR_CPU_MODEL(ARM_CPU_IMP_NVIDIA, NVIDIA_CPU_PART_CARMEL)
arch/arm64/include/asm/debug-monitors.h +2 -0
@@ -109,6 +109,8 @@ void disable_debug_monitors(enum dbg_active_el el);void user_rewind_single_step (struct task_struct *task);void user_fastforward_single_step (struct task_struct *task); +void user_regs_reset_single_step (struct user_pt_regs *regs, +struct task_struct *task);void kernel_enable_single_step (struct pt_regs *regs);void kernel_disable_single_step (void );
arch/arm64/include/asm/syscall.h +11 -1
@@ -34,6 +34,10 @@ static inline long syscall_get_error(struct task_struct *task, struct pt_regs *regs) {unsigned long error = regs->regs[0 ]; + +if (is_compat_thread (task_thread_info (task))) + error =sign_extend64 (error,31 ); +return IS_ERR_VALUE (error) ? error :0 ; }
@@ -47,7 +51,13 @@ static inline void syscall_set_return_value(struct task_struct *task,struct pt_regs *regs, int error, long val) { - regs->regs[0] = (long) error ? error : val; + if (error) + val = error; + +if (is_compat_thread (task_thread_info (task))) + val =lower_32_bits (val); + + regs->regs[0 ] = val; }#define SYSCALL_MAX_ARGS 6
arch/arm64/include/asm/thread_info.h +1 -0
@@ -89,6 +89,7 @@ void arch_release_task_struct(struct task_struct *tsk);#define _TIF_SYSCALL_EMU (1 << TIF_SYSCALL_EMU)#define _TIF_UPROBE (1 << TIF_UPROBE)#define _TIF_FSCHECK (1 << TIF_FSCHECK) +#define _TIF_SINGLESTEP (1 << TIF_SINGLESTEP)#define _TIF_32BIT (1 << TIF_32BIT)#define _TIF_SVE (1 << TIF_SVE)
arch/arm64/kernel/alternative.c +2 -14
@@ -43,20 +43,8 @@ bool alternative_is_applied(u16 cpufeature)*/ static bool branch_insn_requires_update (struct alt_instr *alt,unsigned long pc) { -unsigned long replptr; - -if (kernel_text_address (pc)) -return true; - - replptr = (unsigned long )ALT_REPL_PTR (alt); -if (pc >= replptr && pc <= (replptr + alt->alt_len)) -return false; - -/* -* Branching into *another* alternate sequence is doomed, and -* we're not even trying to fix it up. -*/ -BUG (); +unsigned long replptr = (unsigned long )ALT_REPL_PTR (alt); +return !(pc >= replptr && pc <= (replptr + alt->alt_len)); }#define align_down (x, a) ((unsigned long)(x) & ~(((unsigned long)(a)) - 1))
arch/arm64/kernel/cpu_errata.c +16 -6
@@ -472,12 +472,7 @@ static bool has_cortex_a76_erratum_1463225(const struct arm64_cpu_capabilities *entry, int scope) { -u32 midr =read_cpuid_id (); -/* Cortex-A76 r0p0 - r3p1 */ -struct midr_range range =MIDR_RANGE (MIDR_CORTEX_A76 ,0 ,0 ,3 ,1 ); - -WARN_ON (scope !=SCOPE_LOCAL_CPU ||preemptible ()); -return is_midr_in_range (midr, &range) &&is_kernel_in_hyp_mode (); + return is_affected_midr_range_list(entry, scope) && is_kernel_in_hyp_mode(); }#endif
@@ -728,6 +723,8 @@ static const struct midr_range erratum_1418040_list[] = {MIDR_RANGE (MIDR_CORTEX_A76 ,0 ,0 ,3 ,1 ),/* Neoverse-N1 r0p0 to r3p1 */ MIDR_RANGE (MIDR_NEOVERSE_N1 ,0 ,0 ,3 ,1 ), +/* Kryo4xx Gold (rcpe to rfpf) => (r0p0 to r3p1) */ + MIDR_RANGE(MIDR_QCOM_KRYO_4XX_GOLD, 0xc, 0xe, 0xf, 0xf), {}, };#endif
@@ -768,11 +765,23 @@ static const struct midr_range erratum_speculative_at_vhe_list[] = { #ifdef CONFIG_ARM64_ERRATUM_1530923 /* Cortex A55 r0p0 to r2p0 */ MIDR_RANGE(MIDR_CORTEX_A55, 0, 0, 2, 0), + /* Kryo4xx Silver (rdpe => r1p0) */ + MIDR_REV(MIDR_QCOM_KRYO_4XX_SILVER, 0xd, 0xe), #endif {}, }; #endif +#ifdef CONFIG_ARM64_ERRATUM_1463225 +static const struct midr_range erratum_1463225[] = { + /* Cortex-A76 r0p0 - r3p1 */ + MIDR_RANGE(MIDR_CORTEX_A76, 0, 0, 3, 1), + /* Kryo4xx Gold (rcpe to rfpf) => (r0p0 to r3p1) */ + MIDR_RANGE(MIDR_QCOM_KRYO_4XX_GOLD, 0xc, 0xe, 0xf, 0xf), + {}, +}; +#endif + const struct arm64_cpu_capabilities arm64_errata[] = { #ifdef CONFIG_ARM64_WORKAROUND_CLEAN_CACHE {
@@ -912,6 +921,7 @@ const struct arm64_cpu_capabilities arm64_errata[] = { .capability = ARM64_WORKAROUND_1463225, .type = ARM64_CPUCAP_LOCAL_CPU_ERRATUM, .matches = has_cortex_a76_erratum_1463225, + .midr_range_list = erratum_1463225, },#endif #ifdef CONFIG_CAVIUM_TX2_ERRATUM_219
arch/arm64/kernel/cpufeature.c +2 -0
@@ -1177,6 +1177,8 @@ static bool cpu_has_broken_dbm(void)static const struct midr_range cpus[] = { #ifdef CONFIG_ARM64_ERRATUM_1024718MIDR_RANGE (MIDR_CORTEX_A55 ,0 ,0 ,1 ,0 ),// A55 r0p0 -r1p0 +/* Kryo4xx Silver (rdpe => r1p0) */ +MIDR_REV (MIDR_QCOM_KRYO_4XX_SILVER ,0xd ,0xe ), #endif {}, };
arch/arm64/kernel/debug-monitors.c +16 -4
@@ -141,17 +141,20 @@ postcore_initcall(debug_monitors_init);/* * Single step API and exception handling. */ -static void set_regs_spsr_ss (struct pt_regs *regs) +static void set_user_regs_spsr_ss (struct user_pt_regs *regs) { regs->pstate |=DBG_SPSR_SS ; } -NOKPROBE_SYMBOL (set_regs_spsr_ss); +NOKPROBE_SYMBOL (set_user_regs_spsr_ss); -static void clear_regs_spsr_ss (struct pt_regs *regs) +static void clear_user_regs_spsr_ss (struct user_pt_regs *regs) { regs->pstate &= ~DBG_SPSR_SS ; } -NOKPROBE_SYMBOL (clear_regs_spsr_ss); +NOKPROBE_SYMBOL (clear_user_regs_spsr_ss); + +#define set_regs_spsr_ss (r) set_user_regs_spsr_ss(&(r)->user_regs) +#define clear_regs_spsr_ss (r) clear_user_regs_spsr_ss(&(r)->user_regs)static DEFINE_SPINLOCK (debug_hook_lock);static LIST_HEAD (user_step_hook);
@@ -404,6 +407,15 @@ void user_fastforward_single_step(struct task_struct *task)clear_regs_spsr_ss (task_pt_regs (task)); } +void user_regs_reset_single_step (struct user_pt_regs *regs, +struct task_struct *task) +{ +if (test_tsk_thread_flag (task,TIF_SINGLESTEP )) +set_user_regs_spsr_ss (regs); +else +clear_user_regs_spsr_ss (regs); +} +/* Kernel API */ void kernel_enable_single_step (struct pt_regs *regs) {
arch/arm64/kernel/ptrace.c +21 -8
@@ -1819,12 +1819,23 @@ static void tracehook_report_syscall(struct pt_regs *regs, saved_reg = regs->regs[regno]; regs->regs[regno] = dir; -if (dir ==PTRACE_SYSCALL_EXIT ) +if (dir ==PTRACE_SYSCALL_ENTER ) { +if (tracehook_report_syscall_entry (regs)) +forget_syscall (regs); + regs->regs[regno] = saved_reg; + }else if (!test_thread_flag (TIF_SINGLESTEP )) {tracehook_report_syscall_exit (regs,0 ); -else if (tracehook_report_syscall_entry (regs)) -forget_syscall (regs); + regs->regs[regno] = saved_reg; + }else { + regs->regs[regno] = saved_reg; - regs->regs[regno] = saved_reg; +/* +* Signal a pseudo-step exception since we are stepping but +* tracer modifications to the registers may have rewound the +* state machine. +*/ +tracehook_report_syscall_exit (regs,1 ); + } }int syscall_trace_enter (struct pt_regs *regs)
@@ -1852,12 +1863,14 @@ int syscall_trace_enter(struct pt_regs *regs)void syscall_trace_exit (struct pt_regs *regs) { +unsigned long flags =READ_ONCE (current_thread_info ()->flags); +audit_syscall_exit (regs); -if (test_thread_flag (TIF_SYSCALL_TRACEPOINT )) +if (flags & _TIF_SYSCALL_TRACEPOINT)trace_sys_exit (regs,regs_return_value (regs)); -if (test_thread_flag (TIF_SYSCALL_TRACE )) +if (flags & (_TIF_SYSCALL_TRACE | _TIF_SINGLESTEP))tracehook_report_syscall (regs,PTRACE_SYSCALL_EXIT );rseq_syscall (regs);
@@ -1935,8 +1948,8 @@ static int valid_native_regs(struct user_pt_regs *regs)*/ int valid_user_regs (struct user_pt_regs *regs,struct task_struct *task) { -if (!test_tsk_thread_flag (task,TIF_SINGLESTEP )) - regs->pstate &= ~DBG_SPSR_SS ; +/* https://lore.kernel.org/lkml/20191118131525.GA4180@willie-the-truck */ +user_regs_reset_single_step (regs, task);if (is_compat_thread (task_thread_info (task)))return valid_compat_regs (regs);
arch/arm64/kernel/signal.c +2 -9
@@ -784,7 +784,6 @@ static void setup_restart_syscall(struct pt_regs *regs)*/ static void handle_signal (struct ksignal *ksig,struct pt_regs *regs) { -struct task_struct *tsk = current;sigset_t *oldset =sigmask_to_save ();int usig = ksig->sig;int ret;
@@ -808,14 +807,8 @@ static void handle_signal(struct ksignal *ksig, struct pt_regs *regs)*/ ret |= !valid_user_regs (®s->user_regs, current); -/* -* Fast forward the stepping logic so we step into the signal -* handler. -*/ -if (!ret) -user_fastforward_single_step (tsk); - -signal_setup_done (ret, ksig,0 ); +/* Step into the signal handler if we are stepping */ +signal_setup_done (ret, ksig,test_thread_flag (TIF_SINGLESTEP )); }/*
arch/arm64/kernel/syscall.c +4 -1
@@ -50,6 +50,9 @@ static void invoke_syscall(struct pt_regs *regs, unsigned int scno, ret =do_ni_syscall (regs, scno); } +if (is_compat_task ()) + ret =lower_32_bits (ret); + regs->regs[0 ] = ret; }
@@ -121,7 +124,7 @@ static void el0_svc_common(struct pt_regs *regs, int scno, int sc_nr,if (!has_syscall_work (flags) && !IS_ENABLED (CONFIG_DEBUG_RSEQ )) {local_daif_mask (); flags =current_thread_info ()->flags; -if (!has_syscall_work (flags)) { +if (!has_syscall_work (flags) && !(flags & _TIF_SINGLESTEP)) {/* * We're off to userspace, where interrupts are * always enabled after we restore the flags from
arch/arm64/kernel/vmlinux.lds.S +0 -3
@@ -172,9 +172,6 @@ SECTIONS *(.altinstructions) __alt_instructions_end = .; } - .altinstr_replacement : { - *(.altinstr_replacement) - } . = ALIGN(PAGE_SIZE); __inittext_end = .;
arch/m68k/kernel/setup_no.c +2 -1
@@ -139,7 +139,8 @@ void __init setup_arch(char **cmdline_p)pr_debug ("MEMORY -> ROMFS=0x%p-0x%06lx MEM=0x%06lx-0x%06lx\n " , __bss_stop, memory_start, memory_start, memory_end); -memblock_add (memory_start, memory_end - memory_start); +memblock_add (_rambase, memory_end - _rambase); +memblock_reserve (_rambase, memory_start - _rambase);/* Keep a copy of command line */ *cmdline_p = &command_line[0 ];
arch/m68k/mm/mcfmmu.c +1 -1
@@ -178,7 +178,7 @@ void __init cf_bootmem_alloc(void) m68k_memory[0 ].addr = _rambase; m68k_memory[0 ].size = _ramend - _rambase; -memblock_add (m68k_memory[0 ].addr, m68k_memory[0 ].size); +memblock_add_node (m68k_memory[0 ].addr, m68k_memory[0 ].size,0 );/* compute total pages in system */ num_pages =PFN_DOWN (_ramend - _rambase);
arch/powerpc/kernel/paca.c +1 -1
@@ -86,7 +86,7 @@ static void *__init alloc_shared_lppaca(unsigned long size, unsigned long align,* This is very early in boot, so no harm done if the kernel crashes at * this point. */ -BUG_ON (shared_lppaca_size >= shared_lppaca_total_size); +BUG_ON (shared_lppaca_size > shared_lppaca_total_size);return ptr; }
arch/powerpc/mm/book3s64/pkeys.c +7 -5
@@ -357,12 +357,14 @@ static bool pkey_access_permitted(int pkey, bool write, bool execute)return true; pkey_shift =pkeyshift (pkey); -if (execute && !(read_iamr () & (IAMR_EX_BIT << pkey_shift))) -return true; +if (execute) +return !(read_iamr () & (IAMR_EX_BIT << pkey_shift)); + + amr =read_amr (); +if (write) +return !(amr & (AMR_WR_BIT << pkey_shift)); - amr =read_amr ();/* Delay reading amr until absolutely needed */ -return ((!write && !(amr & (AMR_RD_BIT << pkey_shift))) || - (write && !(amr & (AMR_WR_BIT << pkey_shift)))); +return !(amr & (AMR_RD_BIT << pkey_shift)); }bool arch_pte_access_permitted (u64 pte,bool write,bool execute)
arch/riscv/include/asm/thread_info.h +4 -0
@@ -12,7 +12,11 @@#include <linux/const.h> /* thread information allocation */ +#ifdef CONFIG_64BIT +#define THREAD_SIZE_ORDER (2) +#else #define THREAD_SIZE_ORDER (1) +#endif #define THREAD_SIZE (PAGE_SIZE << THREAD_SIZE_ORDER)#ifndef __ASSEMBLY__
arch/x86/include/asm/fpu/internal.h +5 -0
@@ -619,6 +619,11 @@ static inline void switch_fpu_finish(struct fpu *new_fpu)* MXCSR and XCR definitions: */ +static inline void ldmxcsr (u32 mxcsr) +{ + asmvolatile ("ldmxcsr %0" ::"m" (mxcsr)); +} +extern unsigned int mxcsr_feature_mask;#define XCR_XFEATURE_ENABLED_MASK 0x00000000
arch/x86/include/asm/io_bitmap.h +16 -0
@@ -19,12 +19,28 @@ struct task_struct;void io_bitmap_share (struct task_struct *tsk);void io_bitmap_exit (struct task_struct *tsk); +static inline void native_tss_invalidate_io_bitmap (void ) +{ +/* +* Invalidate the I/O bitmap by moving io_bitmap_base outside the +* TSS limit so any subsequent I/O access from user space will +* trigger a #GP. +* +* This is correct even when VMEXIT rewrites the TSS limit +* to 0x67 as the only requirement is that the base points +* outside the limit. +*/ +this_cpu_write (cpu_tss_rw.x86_tss.io_bitmap_base, +IO_BITMAP_OFFSET_INVALID ); +} +void native_tss_update_io_bitmap (void );#ifdef CONFIG_PARAVIRT_XXL #include <asm/paravirt.h> #else #define tss_update_io_bitmap native_tss_update_io_bitmap +#define tss_invalidate_io_bitmap native_tss_invalidate_io_bitmap#endif #else
arch/x86/include/asm/paravirt.h +5 -0
@@ -296,6 +296,11 @@ static inline void write_idt_entry(gate_desc *dt, int entry, const gate_desc *g) }#ifdef CONFIG_X86_IOPL_IOPERM +static inline void tss_invalidate_io_bitmap (void ) +{ +PVOP_VCALL0 (cpu.invalidate_io_bitmap); +} +static inline void tss_update_io_bitmap (void ) {PVOP_VCALL0 (cpu.update_io_bitmap);
arch/x86/include/asm/paravirt_types.h +1 -0
@@ -141,6 +141,7 @@ struct pv_cpu_ops {void (*load_sp0)(unsigned long sp0);#ifdef CONFIG_X86_IOPL_IOPERM +void (*invalidate_io_bitmap)(void );void (*update_io_bitmap)(void );#endif
arch/x86/kernel/apic/vector.c +5 -17
@@ -446,12 +446,10 @@ static int x86_vector_activate(struct irq_domain *dom, struct irq_data *irqd,trace_vector_activate (irqd->irq, apicd->is_managed, apicd->can_reserve, reserve); -/* Nothing to do for fixed assigned vectors */ -if (!apicd->can_reserve && !apicd->is_managed) -return 0 ; -raw_spin_lock_irqsave (&vector_lock, flags); -if (reserve ||irqd_is_managed_and_shutdown (irqd)) +if (!apicd->can_reserve && !apicd->is_managed) +assign_irq_vector_any_locked (irqd); +else if (reserve ||irqd_is_managed_and_shutdown (irqd))vector_assign_managed_shutdown (irqd);else if (apicd->is_managed) ret =activate_managed (irqd);
@@ -775,20 +773,10 @@ void lapic_offline(void)static int apic_set_affinity (struct irq_data *irqd,const struct cpumask *dest,bool force) { -struct apic_chip_data *apicd =apic_chip_data (irqd);int err; -/* -* Core code can call here for inactive interrupts. For inactive -* interrupts which use managed or reservation mode there is no -* point in going through the vector assignment right now as the -* activation will assign a vector which fits the destination -* cpumask. Let the core code store the destination mask and be -* done with it. -*/ -if (!irqd_is_activated (irqd) && - (apicd->is_managed || apicd->can_reserve)) -return IRQ_SET_MASK_OK ; +if (WARN_ON_ONCE (!irqd_is_activated (irqd))) +return -EIO ;raw_spin_lock (&vector_lock);cpumask_and (vector_searchmask, dest, cpu_online_mask);
arch/x86/kernel/fpu/core.c +6 -0
@@ -101,6 +101,12 @@ void kernel_fpu_begin(void)copy_fpregs_to_fpstate (¤t->thread.fpu); }__cpu_invalidate_fpregs_state (); + +if (boot_cpu_has (X86_FEATURE_XMM )) +ldmxcsr (MXCSR_DEFAULT ); + +if (boot_cpu_has (X86_FEATURE_FPU )) + asmvolatile ("fninit" ); }EXPORT_SYMBOL_GPL (kernel_fpu_begin);
arch/x86/kernel/fpu/xstate.c +1 -1
@@ -1022,7 +1022,7 @@ int copy_xstate_to_kernel(void *kbuf, struct xregs_state *xsave, unsigned int ofcopy_part (offsetof(struct fxregs_state , st_space),128 , &xsave->i387.st_space, &kbuf, &offset_start, &count);if (header.xfeatures &XFEATURE_MASK_SSE ) -copy_part (xstate_offsets[XFEATURE_MASK_SSE ],256 , +copy_part (xstate_offsets[XFEATURE_SSE ],256 , &xsave->i387.xmm_space, &kbuf, &offset_start, &count);/* * Fill xsave->i387.sw_reserved value for ptrace frame:
arch/x86/kernel/paravirt.c +2 -1
@@ -343,7 +343,8 @@ struct paravirt_patch_template pv_ops = { .cpu.swapgs = native_swapgs, #ifdef CONFIG_X86_IOPL_IOPERM - .cpu.update_io_bitmap = native_tss_update_io_bitmap, + .cpu.invalidate_io_bitmap = native_tss_invalidate_io_bitmap, + .cpu.update_io_bitmap = native_tss_update_io_bitmap, #endif .cpu.start_context_switch = paravirt_nop,
arch/x86/kernel/process.c +2 -16
@@ -322,20 +322,6 @@ void arch_setup_new_exec(void) }#ifdef CONFIG_X86_IOPL_IOPERM -static inline void tss_invalidate_io_bitmap (struct tss_struct *tss) -{ -/* -* Invalidate the I/O bitmap by moving io_bitmap_base outside the -* TSS limit so any subsequent I/O access from user space will -* trigger a #GP. -* -* This is correct even when VMEXIT rewrites the TSS limit -* to 0x67 as the only requirement is that the base points -* outside the limit. -*/ - tss->x86_tss.io_bitmap_base =IO_BITMAP_OFFSET_INVALID ; -} -static inline void switch_to_bitmap (unsigned long tifp) {/*
@@ -346,7 +332,7 @@ static inline void switch_to_bitmap(unsigned long tifp)* user mode. */ if (tifp & _TIF_IO_BITMAP) -tss_invalidate_io_bitmap (this_cpu_ptr (&cpu_tss_rw)); +tss_invalidate_io_bitmap (); }static void tss_copy_io_bitmap (struct tss_struct *tss,struct io_bitmap *iobm)
@@ -380,7 +366,7 @@ void native_tss_update_io_bitmap(void)u16 *base = &tss->x86_tss.io_bitmap_base;if (!test_thread_flag (TIF_IO_BITMAP )) { -tss_invalidate_io_bitmap (tss); +native_tss_invalidate_io_bitmap ();return ; }
arch/x86/xen/enlighten_pv.c +12 -0
@@ -841,6 +841,17 @@ static void xen_load_sp0(unsigned long sp0) }#ifdef CONFIG_X86_IOPL_IOPERM +static void xen_invalidate_io_bitmap (void ) +{ +struct physdev_set_iobitmap iobitmap = { + .bitmap =0 , + .nr_ports =0 , + }; + +native_tss_invalidate_io_bitmap (); +HYPERVISOR_physdev_op (PHYSDEVOP_set_iobitmap, &iobitmap); +} +static void xen_update_io_bitmap (void ) {struct physdev_set_iobitmap iobitmap;
@@ -1070,6 +1081,7 @@ static const struct pv_cpu_ops xen_cpu_ops __initconst = { .load_sp0 = xen_load_sp0, #ifdef CONFIG_X86_IOPL_IOPERM + .invalidate_io_bitmap = xen_invalidate_io_bitmap, .update_io_bitmap = xen_update_io_bitmap, #endif .io_delay = xen_io_delay,
block/blk-mq-debugfs.c +3 -0
@@ -125,6 +125,9 @@ static const char *const blk_queue_flag_name[] = {QUEUE_FLAG_NAME (REGISTERED ),QUEUE_FLAG_NAME (SCSI_PASSTHROUGH ),QUEUE_FLAG_NAME (QUIESCED ), +QUEUE_FLAG_NAME (PCI_P2PDMA ), +QUEUE_FLAG_NAME (ZONE_RESETALL ), + QUEUE_FLAG_NAME(RQ_ALLOC_TIME), };#undef QUEUE_FLAG_NAME
crypto/asymmetric_keys/public_key.c +1 -0
@@ -119,6 +119,7 @@ static int software_key_query(const struct kernel_pkey_params *params,if (IS_ERR (tfm))return PTR_ERR (tfm); + ret = -ENOMEM ; key =kmalloc (pkey->keylen +sizeof (u32) *2 + pkey->paramlen,GFP_KERNEL );if (!key)
drivers/acpi/dptf/dptf_power.c +1 -0
@@ -99,6 +99,7 @@ static int dptf_power_remove(struct platform_device *pdev)static const struct acpi_device_id int3407_device_ids[] = { {"INT3407" ,0 }, {"INTC1047" ,0 }, + {"INTC1050" ,0 }, {"" ,0 }, };MODULE_DEVICE_TABLE (acpi, int3407_device_ids);
drivers/base/regmap/regmap-debugfs.c +29 -23
93 lines not on this page · raw message
drivers/block/zram/zram_drv.c +2 -1
@@ -2025,7 +2025,8 @@ static ssize_t hot_add_show(struct class *class,return ret;return scnprintf (buf,PAGE_SIZE ,"%d\n" , ret); } -static CLASS_ATTR_RO (hot_add); +static struct class_attribute class_attr_hot_add = +__ATTR (hot_add,0400 , hot_add_show,NULL ); static ssize_t hot_remove_store(struct class *class, struct class_attribute *attr,
drivers/bus/ti-sysc.c +12 -11
@@ -236,15 +236,14 @@ static int sysc_wait_softreset(struct sysc *ddata) syss_done = ddata->cfg.syss_mask;if (syss_offset >=0 ) { - error =readx_poll_timeout (sysc_read_sysstatus, ddata, rstval, - (rstval & ddata->cfg.syss_mask) == - syss_done, -100 ,MAX_MODULE_SOFTRESET_WAIT ); + error =readx_poll_timeout_atomic (sysc_read_sysstatus, ddata, + rstval, (rstval & ddata->cfg.syss_mask) == + syss_done,100 ,MAX_MODULE_SOFTRESET_WAIT ); }else if (ddata->cfg.quirks &SYSC_QUIRK_RESET_STATUS ) { - error =readx_poll_timeout (sysc_read_sysconfig, ddata, rstval, - !(rstval & sysc_mask), -100 ,MAX_MODULE_SOFTRESET_WAIT ); + error =readx_poll_timeout_atomic (sysc_read_sysconfig, ddata, + rstval, !(rstval & sysc_mask), +100 ,MAX_MODULE_SOFTRESET_WAIT ); }return error;
@@ -1279,7 +1278,8 @@ static int __maybe_unused sysc_noirq_suspend(struct device *dev) ddata =dev_get_drvdata (dev); -if (ddata->cfg.quirks &SYSC_QUIRK_LEGACY_IDLE ) +if (ddata->cfg.quirks & + (SYSC_QUIRK_LEGACY_IDLE |SYSC_QUIRK_NO_IDLE ))return 0 ;return pm_runtime_force_suspend (dev);
@@ -1291,7 +1291,8 @@ static int __maybe_unused sysc_noirq_resume(struct device *dev) ddata =dev_get_drvdata (dev); -if (ddata->cfg.quirks &SYSC_QUIRK_LEGACY_IDLE ) +if (ddata->cfg.quirks & + (SYSC_QUIRK_LEGACY_IDLE |SYSC_QUIRK_NO_IDLE ))return 0 ;return pm_runtime_force_resume (dev);
@@ -1728,8 +1729,8 @@ static void sysc_quirk_rtc(struct sysc *ddata, bool lock)local_irq_save (flags);/* RTC_STATUS BUSY bit may stay active for 1/32768 seconds (~30 usec) */ - error =readl_poll_timeout (ddata->module_va +0x44 , val, - !(val &BIT (0 )),100 ,50 ); + error =readl_poll_timeout_atomic (ddata->module_va +0x44 , val, + !(val &BIT (0 )),100 ,50 );if (error)dev_warn (ddata->dev,"rtc busy timeout\n" );/* Now we have ~15 microseconds to read/write various registers */
drivers/char/tpm/tpm_tis_core.c +1 -1
@@ -1085,7 +1085,7 @@ int tpm_tis_core_init(struct device *dev, struct tpm_tis_data *priv, int irq,return 0 ; out_err: -if ((chip->ops !=NULL ) && (chip->ops->clk_enable !=NULL )) +if (chip->ops->clk_enable !=NULL ) chip->ops->clk_enable (chip, false);tpm_tis_remove (chip);
drivers/char/virtio_console.c +2 -1
@@ -2116,6 +2116,7 @@ static struct virtio_device_id id_table[] = { { VIRTIO_ID_CONSOLE, VIRTIO_DEV_ANY_ID }, { 0 }, }; +MODULE_DEVICE_TABLE (virtio, id_table);static unsigned int features[] = { VIRTIO_CONSOLE_F_SIZE,
@@ -2128,6 +2129,7 @@ static struct virtio_device_id rproc_serial_id_table[] = {#endif { 0 }, }; +MODULE_DEVICE_TABLE (virtio, rproc_serial_id_table);static unsigned int rproc_serial_features[] = { };
@@ -2280,6 +2282,5 @@ static void __exit fini(void)module_init (init);module_exit (fini); -MODULE_DEVICE_TABLE (virtio, id_table);MODULE_DESCRIPTION ("Virtio console driver" );MODULE_LICENSE ("GPL" );
drivers/clk/clk-ast2600.c +41 -8
69 lines not on this page · raw message
drivers/clk/mvebu/Kconfig +1 -0
@@ -42,6 +42,7 @@ config ARMADA_AP806_SYSCON config ARMADA_AP_CPU_CLK bool + select ARMADA_AP_CP_HELPER config ARMADA_CP110_SYSCON bool
drivers/clk/qcom/gcc-msm8998.c +27 -0
@@ -1110,6 +1110,27 @@ static struct clk_rcg2 ufs_axi_clk_src = { }, }; +static const struct freq_tbl ftbl_ufs_unipro_core_clk_src[] = { +F (37500000 ,P_GPLL0_OUT_MAIN ,16 ,0 ,0 ), +F (75000000 ,P_GPLL0_OUT_MAIN ,8 ,0 ,0 ), +F (150000000 ,P_GPLL0_OUT_MAIN ,4 ,0 ,0 ), + { } +}; + +static struct clk_rcg2 ufs_unipro_core_clk_src = { + .cmd_rcgr =0x76028 , + .mnd_width =8 , + .hid_width =5 , + .parent_map = gcc_parent_map_0, + .freq_tbl = ftbl_ufs_unipro_core_clk_src, + .clkr.hw.init = &(struct clk_init_data ){ + .name ="ufs_unipro_core_clk_src" , + .parent_names = gcc_parent_names_0, + .num_parents =4 , + .ops = &clk_rcg2_ops, + }, +}; +static const struct freq_tbl ftbl_usb30_master_clk_src[] = {F (19200000 ,P_XO ,1 ,0 ,0 ),F (60000000 ,P_GPLL0_OUT_MAIN ,10 ,0 ,0 ),
@@ -2549,6 +2570,11 @@ static struct clk_branch gcc_ufs_unipro_core_clk = { .enable_mask = BIT(0), .hw.init = &(struct clk_init_data ){ .name ="gcc_ufs_unipro_core_clk" , + .parent_names = (const char *[]){ +"ufs_unipro_core_clk_src" , + }, + .num_parents =1 , + .flags =CLK_SET_RATE_PARENT , .ops = &clk_branch2_ops, }, },
@@ -2904,6 +2930,7 @@ static struct clk_regmap *gcc_msm8998_clocks[] = { [SDCC4_APPS_CLK_SRC] = &sdcc4_apps_clk_src.clkr, [TSIF_REF_CLK_SRC] = &tsif_ref_clk_src.clkr, [UFS_AXI_CLK_SRC] = &ufs_axi_clk_src.clkr, + [UFS_UNIPRO_CORE_CLK_SRC] = &ufs_unipro_core_clk_src.clkr, [USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr, [USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr, [USB3_PHY_AUX_CLK_SRC] = &usb3_phy_aux_clk_src.clkr,
drivers/clk/qcom/gcc-sc7180.c +37 -36
223 lines not on this page · raw message
drivers/clk/qcom/gcc-sm8150.c +148 -0
196 lines not on this page · raw message
drivers/counter/104-quad-8.c +19 -3
@@ -1274,18 +1274,26 @@ static ssize_t quad8_signal_cable_fault_read(struct counter_device *counter,struct counter_signal *signal, void *private, char *buf) { - const struct quad8_iio *const priv = counter->priv; + struct quad8_iio *const priv = counter->priv;const size_t channel_id = signal->id /2 ; -const bool disabled = !(priv->cable_fault_enable &BIT (channel_id)); +bool disabled;unsigned int status;unsigned int fault; -if (disabled) +mutex_lock (&priv->lock); + + disabled = !(priv->cable_fault_enable &BIT (channel_id)); + +if (disabled) { +mutex_unlock (&priv->lock);return -EINVAL ; + }/* Logic 0 = cable fault */ status =inb (priv->base +QUAD8_DIFF_ENCODER_CABLE_STATUS ); +mutex_unlock (&priv->lock); +/* Mask respective channel and invert logic */ fault = !(status &BIT (channel_id));
@@ -1317,6 +1325,8 @@ static ssize_t quad8_signal_cable_fault_enable_write(if (ret)return ret; +mutex_lock (&priv->lock); +if (enable) priv->cable_fault_enable |=BIT (channel_id);else
@@ -1327,6 +1337,8 @@ static ssize_t quad8_signal_cable_fault_enable_write(outb (cable_fault_enable, priv->base +QUAD8_DIFF_ENCODER_CABLE_STATUS ); +mutex_unlock (&priv->lock); +return len; }
@@ -1353,6 +1365,8 @@ static ssize_t quad8_signal_fck_prescaler_write(struct counter_device *counter,if (ret)return ret; +mutex_lock (&priv->lock); + priv->fck_prescaler[channel_id] = prescaler;/* Reset Byte Pointer */
@@ -1363,6 +1377,8 @@ static ssize_t quad8_signal_fck_prescaler_write(struct counter_device *counter,outb (QUAD8_CTR_RLD |QUAD8_RLD_RESET_BP |QUAD8_RLD_PRESET_PSC , base_offset +1 ); +mutex_unlock (&priv->lock); +return len; }
drivers/dma-buf/dma-buf.c +7 -4
@@ -45,10 +45,10 @@ static char *dmabuffs_dname(struct dentry *dentry, char *buffer, int buflen)size_t ret =0 ; dmabuf = dentry->d_fsdata; -dma_resv_lock (dmabuf->resv,NULL ); +spin_lock (&dmabuf->name_lock);if (dmabuf->name) ret =strlcpy (name, dmabuf->name,DMA_BUF_NAME_LEN ); -dma_resv_unlock (dmabuf->resv); +spin_unlock (&dmabuf->name_lock);return dynamic_dname (dentry, buffer, buflen,"/%s:%s" , dentry->d_name.name, ret >0 ? name :"" );
@@ -338,8 +338,10 @@ static long dma_buf_set_name(struct dma_buf *dmabuf, const char __user *buf)kfree (name); goto out_unlock; } +spin_lock (&dmabuf->name_lock);kfree (dmabuf->name); dmabuf->name = name; +spin_unlock (&dmabuf->name_lock); out_unlock:dma_resv_unlock (dmabuf->resv);
@@ -402,10 +404,10 @@ static void dma_buf_show_fdinfo(struct seq_file *m, struct file *file)/* Don't count the temporary reference taken inside procfs seq_show */ seq_printf (m,"count:\t%ld\n" ,file_count (dmabuf->file) -1 );seq_printf (m,"exp_name:\t%s\n" , dmabuf->exp_name); -dma_resv_lock (dmabuf->resv,NULL ); +spin_lock (&dmabuf->name_lock);if (dmabuf->name)seq_printf (m,"name:\t%s\n" , dmabuf->name); -dma_resv_unlock (dmabuf->resv); +spin_unlock (&dmabuf->name_lock); }static const struct file_operations dma_buf_fops = {
@@ -542,6 +544,7 @@ struct dma_buf *dma_buf_export(const struct dma_buf_export_info *exp_info) dmabuf->size = exp_info->size; dmabuf->exp_name = exp_info->exp_name; dmabuf->owner = exp_info->owner; +spin_lock_init (&dmabuf->name_lock);init_waitqueue_head (&dmabuf->poll); dmabuf->cb_excl.poll = dmabuf->cb_shared.poll = &dmabuf->poll; dmabuf->cb_excl.active = dmabuf->cb_shared.active =0 ;
drivers/dma/dmatest.c +2 -0
@@ -1168,6 +1168,8 @@ static int dmatest_run_set(const char *val, const struct kernel_param *kp) }else if (dmatest_run) {if (!is_threaded_test_pending (info)) {pr_info ("No channels configured, continue with any\n" ); +if (!is_threaded_test_run (info)) +stop_threaded_test (info);add_threaded_test (info); }start_threaded_tests (info);
drivers/dma/dw/core.c +0 -12
@@ -118,16 +118,11 @@ static void dwc_initialize(struct dw_dma_chan *dwc) {struct dw_dma *dw =to_dw_dma (dwc->chan.device); -if (test_bit (DW_DMA_IS_INITIALIZED , &dwc->flags)) -return ; - dw->initialize_chan (dwc);/* Enable interrupts */ channel_set_bit (dw,MASK .XFER, dwc->mask);channel_set_bit (dw,MASK .ERROR, dwc->mask); - -set_bit (DW_DMA_IS_INITIALIZED , &dwc->flags); }/*----------------------------------------------------------------------*/
@@ -954,8 +949,6 @@ static void dwc_issue_pending(struct dma_chan *chan)void do_dw_dma_off (struct dw_dma *dw) { -unsigned int i; -dma_writel (dw,CFG ,0 );channel_clear_bit (dw,MASK .XFER, dw->all_chan_mask);
@@ -966,9 +959,6 @@ void do_dw_dma_off(struct dw_dma *dw)while (dma_readl (dw,CFG ) &DW_CFG_DMA_EN )cpu_relax (); - -for (i =0 ; i < dw->dma.chancnt; i++) -clear_bit (DW_DMA_IS_INITIALIZED , &dw->chan[i].flags); }void do_dw_dma_on (struct dw_dma *dw)
@@ -1032,8 +1022,6 @@ static void dwc_free_chan_resources(struct dma_chan *chan)/* Clear custom channel configuration */ memset (&dwc->dws,0 ,sizeof (struct dw_dma_slave )); -clear_bit (DW_DMA_IS_INITIALIZED , &dwc->flags); -/* Disable interrupts */ channel_clear_bit (dw,MASK .XFER, dwc->mask);channel_clear_bit (dw,MASK .BLOCK, dwc->mask);
drivers/dma/fsl-edma-common.h +1 -1
@@ -33,7 +33,7 @@#define EDMA_TCD_ATTR_DSIZE_16BIT BIT(0)#define EDMA_TCD_ATTR_DSIZE_32BIT BIT(1)#define EDMA_TCD_ATTR_DSIZE_64BIT (BIT(0) | BIT(1)) -#define EDMA_TCD_ATTR_DSIZE_32BYTE (BIT(3) | BIT(0)) +#define EDMA_TCD_ATTR_DSIZE_32BYTE (BIT(2) | BIT(0))#define EDMA_TCD_ATTR_SSIZE_8BIT 0#define EDMA_TCD_ATTR_SSIZE_16BIT (EDMA_TCD_ATTR_DSIZE_16BIT << 8)#define EDMA_TCD_ATTR_SSIZE_32BIT (EDMA_TCD_ATTR_DSIZE_32BIT << 8)
drivers/dma/fsl-edma.c +7 -0
@@ -45,6 +45,13 @@ static irqreturn_t fsl_edma_tx_handler(int irq, void *dev_id) fsl_chan = &fsl_edma->chans[ch];spin_lock (&fsl_chan->vchan.lock); + +if (!fsl_chan->edesc) { +/* terminate_all called before */ +spin_unlock (&fsl_chan->vchan.lock); +continue ; + } +if (!fsl_chan->edesc->iscyclic) {list_del (&fsl_chan->edesc->vdesc.node);vchan_cookie_complete (&fsl_chan->edesc->vdesc);
drivers/dma/idxd/cdev.c +16 -3
@@ -74,6 +74,7 @@ static int idxd_cdev_open(struct inode *inode, struct file *filp)struct idxd_device *idxd;struct idxd_wq *wq;struct device *dev; +int rc =0 ; wq =inode_wq (inode); idxd = wq->idxd;
@@ -81,17 +82,27 @@ static int idxd_cdev_open(struct inode *inode, struct file *filp)dev_dbg (dev,"%s called: %d\n" , __func__,idxd_wq_refcount (wq)); -if (idxd_wq_refcount (wq) >0 &&wq_dedicated (wq)) -return -EBUSY ; - ctx =kzalloc (sizeof (*ctx),GFP_KERNEL );if (!ctx)return -ENOMEM ; +mutex_lock (&wq->wq_lock); + +if (idxd_wq_refcount (wq) >0 &&wq_dedicated (wq)) { + rc = -EBUSY ; + goto failed; + } + ctx->wq = wq; filp->private_data = ctx;idxd_wq_get (wq); +mutex_unlock (&wq->wq_lock);return 0 ; + + failed: +mutex_unlock (&wq->wq_lock); +kfree (ctx); +return rc; }static int idxd_cdev_release (struct inode *node,struct file *filep)
@@ -105,7 +116,9 @@ static int idxd_cdev_release(struct inode *node, struct file *filep) filep->private_data =NULL ;kfree (ctx); +mutex_lock (&wq->wq_lock);idxd_wq_put (wq); +mutex_unlock (&wq->wq_lock);return 0 ; }
drivers/dma/idxd/device.c +25 -0
@@ -320,6 +320,31 @@ void idxd_wq_unmap_portal(struct idxd_wq *wq)devm_iounmap (dev, wq->dportal); } +void idxd_wq_disable_cleanup (struct idxd_wq *wq) +{ +struct idxd_device *idxd = wq->idxd; +struct device *dev = &idxd->pdev->dev; +int i, wq_offset; + +lockdep_assert_held (&idxd->dev_lock); +memset (&wq->wqcfg,0 ,sizeof (wq->wqcfg)); + wq->type =IDXD_WQT_NONE ; + wq->size =0 ; + wq->group =NULL ; + wq->threshold =0 ; + wq->priority =0 ; +clear_bit (WQ_FLAG_DEDICATED , &wq->flags); +memset (wq->name,0 ,WQ_NAME_SIZE ); + +for (i =0 ; i <8 ; i++) { + wq_offset = idxd->wqcfg_offset + wq->id *32 + i *sizeof (u32); +iowrite32 (0 , idxd->reg_base + wq_offset); +dev_dbg (dev,"WQ[%d][%d][%#x]: %#x\n" , + wq->id, i, wq_offset, +ioread32 (idxd->reg_base + wq_offset)); + } +} +/* Device control bits */ static inline bool idxd_is_enabled (struct idxd_device *idxd) {
drivers/dma/idxd/idxd.h +1 -0
@@ -290,6 +290,7 @@ int idxd_wq_enable(struct idxd_wq *wq);int idxd_wq_disable (struct idxd_wq *wq);int idxd_wq_map_portal (struct idxd_wq *wq);void idxd_wq_unmap_portal (struct idxd_wq *wq); +void idxd_wq_disable_cleanup (struct idxd_wq *wq);/* submission */ int idxd_submit_desc (struct idxd_wq *wq,struct idxd_desc *desc);
drivers/dma/idxd/irq.c +2 -1
@@ -141,7 +141,7 @@ irqreturn_t idxd_misc_thread(int vec, void *data)iowrite32 (cause, idxd->reg_base +IDXD_INTCAUSE_OFFSET );if (!err) -return IRQ_HANDLED ; + goto out; gensts.bits =ioread32 (idxd->reg_base +IDXD_GENSTATS_OFFSET );if (gensts.state ==IDXD_DEVICE_STATE_HALT ) {
@@ -162,6 +162,7 @@ irqreturn_t idxd_misc_thread(int vec, void *data)spin_unlock_bh (&idxd->dev_lock); } + out:idxd_unmask_msix_vector (idxd, irq_entry->id);return IRQ_HANDLED ; }
drivers/dma/idxd/sysfs.c +5 -0
@@ -315,6 +315,11 @@ static int idxd_config_bus_remove(struct device *dev)idxd_unregister_dma_device (idxd);spin_lock_irqsave (&idxd->dev_lock, flags); rc =idxd_device_disable (idxd); +for (i =0 ; i < idxd->max_wqs; i++) { +struct idxd_wq *wq = &idxd->wqs[i]; + +idxd_wq_disable_cleanup (wq); + }spin_unlock_irqrestore (&idxd->dev_lock, flags);module_put (THIS_MODULE );if (rc <0 )
drivers/dma/mcf-edma.c +7 -0
@@ -35,6 +35,13 @@ static irqreturn_t mcf_edma_tx_handler(int irq, void *dev_id) mcf_chan = &mcf_edma->chans[ch];spin_lock (&mcf_chan->vchan.lock); + +if (!mcf_chan->edesc) { +/* terminate_all called before */ +spin_unlock (&mcf_chan->vchan.lock); +continue ; + } +if (!mcf_chan->edesc->iscyclic) {list_del (&mcf_chan->edesc->vdesc.node);vchan_cookie_complete (&mcf_chan->edesc->vdesc);
drivers/dma/sh/usb-dmac.c +2 -0
@@ -586,6 +586,8 @@ static void usb_dmac_isr_transfer_end(struct usb_dmac_chan *chan) desc->residue =usb_dmac_get_current_residue (chan, desc, desc->sg_index -1 ); desc->done_cookie = desc->vd.tx.cookie; + desc->vd.tx_result.result =DMA_TRANS_NOERROR ; + desc->vd.tx_result.residue = desc->residue;vchan_cookie_complete (&desc->vd);/* Restart the next transfer if this driver has a next desc */
drivers/dma/ti/k3-udma.c +3 -5
@@ -1925,8 +1925,6 @@ static int udma_alloc_chan_resources(struct dma_chan *chan)udma_reset_rings (uc); -INIT_DELAYED_WORK_ONSTACK (&uc->tx_drain.work, - udma_check_tx_completion);return 0 ; err_irq_free:
@@ -3038,7 +3036,6 @@ static void udma_free_chan_resources(struct dma_chan *chan) }cancel_delayed_work_sync (&uc->tx_drain.work); -destroy_delayed_work_on_stack (&uc->tx_drain.work);if (uc->irq_num_ring >0 ) {free_irq (uc->irq_num_ring, uc);
@@ -3189,7 +3186,7 @@ static struct udma_match_data am654_main_data = {static struct udma_match_data am654_mcu_data = { .psil_base =0x6000 , - .enable_memcpy_support = true,/* TEST: DMA domains */ + .enable_memcpy_support = false, .statictr_z_mask =GENMASK (11 ,0 ), .rchan_oes_offset =0x2000 , .tpl_levels =2 ,
@@ -3609,7 +3606,7 @@ static int udma_probe(struct platform_device *pdev)return ret; } - ret =of_property_read_u32 (navss_node,"ti,udma-atype" , &ud->atype); + ret =of_property_read_u32 (dev->of_node,"ti,udma-atype" , &ud->atype);if (!ret && ud->atype >2 ) {dev_err (dev,"Invalid atype: %u\n" , ud->atype);return -EINVAL ;
@@ -3727,6 +3724,7 @@ static int udma_probe(struct platform_device *pdev)tasklet_init (&uc->vc.task, udma_vchan_complete, (unsigned long )&uc->vc);init_completion (&uc->teardown_completed); +INIT_DELAYED_WORK (&uc->tx_drain.work, udma_check_tx_completion); } ret =dma_async_device_register (&ud->ddev);
drivers/gpio/gpio-pca953x.c +1 -0
@@ -399,6 +399,7 @@ static const struct regmap_config pca953x_ai_i2c_regmap = { .writeable_reg = pca953x_writeable_register, .volatile_reg = pca953x_volatile_register, + .disable_locking = true, .cache_type = REGCACHE_RBTREE, .max_register = 0x7f, };
drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c +8 -18
@@ -286,30 +286,20 @@ static uint64_t sdma_v5_0_ring_get_rptr(struct amdgpu_ring *ring)static uint64_t sdma_v5_0_ring_get_wptr (struct amdgpu_ring *ring) {struct amdgpu_device *adev = ring->adev; -u64 *wptr =NULL ; -uint64_t local_wptr =0 ; +u64 wptr;if (ring->use_doorbell) {/* XXX check if swapping is necessary on BE */ - wptr = ((u64 *)&adev->wb.wb[ring->wptr_offs]); -DRM_DEBUG ("wptr/doorbell before shift == 0x%016llx\n" , *wptr); - *wptr = (*wptr) >>2 ; -DRM_DEBUG ("wptr/doorbell after shift == 0x%016llx\n" , *wptr); + wptr =READ_ONCE (*((u64 *)&adev->wb.wb[ring->wptr_offs])); +DRM_DEBUG ("wptr/doorbell before shift == 0x%016llx\n" , wptr); }else { -u32 lowbit, highbit; - - wptr = &local_wptr; - lowbit =RREG32 (sdma_v5_0_get_reg_offset (adev, ring->me, mmSDMA0_GFX_RB_WPTR)) >>2 ; - highbit =RREG32 (sdma_v5_0_get_reg_offset (adev, ring->me, mmSDMA0_GFX_RB_WPTR_HI)) >>2 ; - -DRM_DEBUG ("wptr [%i]high== 0x%08x low==0x%08x\n" , - ring->me, highbit, lowbit); - *wptr = highbit; - *wptr = (*wptr) <<32 ; - *wptr |= lowbit; + wptr =RREG32 (sdma_v5_0_get_reg_offset (adev, ring->me, mmSDMA0_GFX_RB_WPTR_HI)); + wptr = wptr <<32 ; + wptr |=RREG32 (sdma_v5_0_get_reg_offset (adev, ring->me, mmSDMA0_GFX_RB_WPTR)); +DRM_DEBUG ("wptr before shift [%i] wptr == 0x%016llx\n" , ring->me, wptr); } -return *wptr; +return wptr >>2 ; }/**
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +14 -0
@@ -956,6 +956,9 @@ static int amdgpu_dm_init(struct amdgpu_device *adev)/* Update the actual used number of crtc */ adev->mode_info.num_crtc = adev->dm.display_indexes_num; +/* create fake encoders for MST */ +dm_dp_create_fake_mst_encoders (adev); +/* TODO: Add_display_info? */ /* TODO use dynamic cursor width */
@@ -979,6 +982,12 @@ static int amdgpu_dm_init(struct amdgpu_device *adev)static void amdgpu_dm_fini (struct amdgpu_device *adev) { +int i; + +for (i =0 ; i < adev->dm.display_indexes_num; i++) { +drm_encoder_cleanup (&adev->dm.mst_encoders[i].base); + } +amdgpu_dm_audio_fini (adev);amdgpu_dm_destroy_drm_device (&adev->dm);
@@ -1804,6 +1813,7 @@ static void update_connector_ext_caps(struct amdgpu_dm_connector *aconnector)struct amdgpu_display_manager *dm;struct drm_connector *conn_base;struct amdgpu_device *adev; +struct dc_link *link =NULL ;static const u8 pre_computed_values[] = {50 ,51 ,52 ,53 ,55 ,56 ,57 ,58 ,59 ,61 ,62 ,63 ,65 ,66 ,68 ,69 ,71 ,72 ,74 ,75 ,77 ,79 ,81 ,82 ,84 ,86 ,88 ,90 ,92 ,94 ,96 ,98 };
@@ -1811,6 +1821,10 @@ static void update_connector_ext_caps(struct amdgpu_dm_connector *aconnector)if (!aconnector || !aconnector->dc_link)return ; + link = aconnector->dc_link; +if (link->connector_signal !=SIGNAL_TYPE_EDP ) +return ; + conn_base = &aconnector->base; adev = conn_base->dev->dev_private; dm = &adev->dm;
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h +10 -1
@@ -43,6 +43,9 @@*/ #define AMDGPU_DM_MAX_DISPLAY_INDEX 31 + +#define AMDGPU_DM_MAX_CRTC 6 +/* #include "include/amdgpu_dal_power_if.h" #include "amdgpu_dm_irq.h"
@@ -327,6 +330,13 @@ struct amdgpu_display_manager {* available in FW */ const struct gpu_info_soc_bounding_box_v1_0 *soc_bounding_box; + +/** +* @mst_encoders: +* +* fake encoders used for DP MST. +*/ +struct amdgpu_encoder mst_encoders[AMDGPU_DM_MAX_CRTC ]; };struct amdgpu_dm_connector {
@@ -355,7 +365,6 @@ struct amdgpu_dm_connector {struct amdgpu_dm_dp_aux dm_dp_aux;struct drm_dp_mst_port *port;struct amdgpu_dm_connector *mst_port; -struct amdgpu_encoder *mst_encoder;struct drm_dp_aux *dsc_aux;/* TODO see if we can merge with ddc_bus or make a dm_connector */
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c +26 -27
92 lines not on this page · raw message
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.h +3 -0
@@ -35,6 +35,9 @@ void amdgpu_dm_initialize_dp_connector(struct amdgpu_display_manager *dm,struct amdgpu_dm_connector *aconnector, int link_index); +void +dm_dp_create_fake_mst_encoders (struct amdgpu_device *adev); +#if defined(CONFIG_DRM_AMD_DC_DCN )bool compute_mst_dsc_configs_for_state (struct drm_atomic_state *state,struct dc_state *dc_state);
drivers/gpu/drm/amd/display/dc/core/dc_stream.c +16 -3
@@ -56,7 +56,7 @@ void update_stream_signal(struct dc_stream_state *stream, struct dc_sink *sink) } } -static void dc_stream_construct (struct dc_stream_state *stream, +static bool dc_stream_construct (struct dc_stream_state *stream,struct dc_sink *dc_sink_data) {uint32_t i =0 ;
@@ -118,11 +118,17 @@ static void dc_stream_construct(struct dc_stream_state *stream,update_stream_signal (stream, dc_sink_data); stream->out_transfer_func =dc_create_transfer_func (); +if (stream->out_transfer_func ==NULL ) { +dc_sink_release (dc_sink_data); +return false; + } stream->out_transfer_func->type =TF_TYPE_BYPASS ; stream->out_transfer_func->ctx = stream->ctx; stream->stream_id = stream->ctx->dc_stream_id_count; stream->ctx->dc_stream_id_count++; + +return true; }static void dc_stream_destruct (struct dc_stream_state *stream)
@@ -164,13 +170,20 @@ struct dc_stream_state *dc_create_stream_for_sink( stream =kzalloc (sizeof (struct dc_stream_state ),GFP_KERNEL );if (stream ==NULL ) -return NULL ; + goto alloc_fail; -dc_stream_construct (stream, sink); +if (dc_stream_construct (stream, sink) == false) + goto construct_fail;kref_init (&stream->refcount);return stream; + +construct_fail: +kfree (stream); + +alloc_fail: +return NULL ; }struct dc_stream_state *dc_copy_stream (const struct dc_stream_state *stream)
drivers/gpu/drm/amd/powerplay/renoir_ppt.c +1 -1
@@ -687,7 +687,7 @@ static int renoir_set_power_profile_mode(struct smu_context *smu, long *input, ureturn -EINVAL ; } - ret =smu_send_smc_msg_with_param (smu, SMU_MSG_SetWorkloadMask, + ret =smu_send_smc_msg_with_param (smu, SMU_MSG_ActiveProcessNotify,1 << workload_type,NULL );if (ret) {
drivers/gpu/drm/exynos/exynos_drm_dma.c +2 -2
@@ -61,7 +61,7 @@ static int drm_iommu_attach_device(struct drm_device *drm_dev, struct device *subdrv_dev, void **dma_priv) { struct exynos_drm_private *priv = drm_dev->dev_private; -int ret; +int ret =0 ;if (get_dma_ops (priv->dma_dev) !=get_dma_ops (subdrv_dev)) { DRM_DEV_ERROR(subdrv_dev, "Device %s lacks support for IOMMU\n",
@@ -92,7 +92,7 @@ static int drm_iommu_attach_device(struct drm_device *drm_dev,if (ret)clear_dma_max_seg_size (subdrv_dev); -return 0 ; +return ret; }/*
drivers/gpu/drm/exynos/exynos_drm_mic.c +3 -1
@@ -269,8 +269,10 @@ static void mic_pre_enable(struct drm_bridge *bridge) goto unlock; ret =pm_runtime_get_sync (mic->dev); -if (ret <0 ) +if (ret <0 ) { +pm_runtime_put_noidle (mic->dev); goto unlock; + }mic_set_path (mic,1 );
drivers/gpu/drm/i915/display/intel_hdmi.c +2 -8
@@ -2821,19 +2821,13 @@ intel_hdmi_connector_register(struct drm_connector *connector)return ret; } -static void intel_hdmi_destroy (struct drm_connector *connector) +static void intel_hdmi_connector_unregister (struct drm_connector *connector) {struct cec_notifier *n =intel_attached_hdmi (to_intel_connector (connector))->cec_notifier;cec_notifier_conn_unregister (n); -intel_connector_destroy (connector); -} - -static void intel_hdmi_connector_unregister (struct drm_connector *connector) -{intel_hdmi_remove_i2c_symlink (connector); -intel_connector_unregister (connector); }
@@ -2845,7 +2839,7 @@ static const struct drm_connector_funcs intel_hdmi_connector_funcs = { .atomic_set_property = intel_digital_connector_atomic_set_property, .late_register = intel_hdmi_connector_register, .early_unregister = intel_hdmi_connector_unregister, - .destroy = intel_hdmi_destroy, + .destroy = intel_connector_destroy, .atomic_destroy_state = drm_atomic_helper_connector_destroy_state, .atomic_duplicate_state = intel_digital_connector_duplicate_state, };
drivers/gpu/drm/i915/gt/intel_lrc.c +5 -14
@@ -4897,13 +4897,8 @@ static void virtual_engine_initial_hint(struct virtual_engine *ve)* typically be the first we inspect for submission. */ swp =prandom_u32_max (ve->num_siblings); -if (!swp) -return ; - -swap (ve->siblings[swp], ve->siblings[0 ]); -if (!intel_engine_has_relative_mmio (ve->siblings[0 ])) -virtual_update_register_offsets (ve->context.lrc_reg_state, - ve->siblings[0 ]); +if (swp) +swap (ve->siblings[swp], ve->siblings[0 ]); }static int virtual_context_alloc (struct intel_context *ce)
@@ -4916,15 +4911,9 @@ static int virtual_context_alloc(struct intel_context *ce)static int virtual_context_pin (struct intel_context *ce) {struct virtual_engine *ve =container_of (ce,typeof (*ve), context); -int err;/* Note: we must use a real engine class for setting up reg state */ - err =__execlists_context_pin (ce, ve->siblings[0 ]); -if (err) -return err; - -virtual_engine_initial_hint (ve); -return 0 ; +return __execlists_context_pin (ce, ve->siblings[0 ]); }static void virtual_context_enter (struct intel_context *ce)
@@ -5188,6 +5177,7 @@ intel_execlists_create_virtual(struct intel_engine_cs **siblings,intel_engine_init_active (&ve->base,ENGINE_VIRTUAL );intel_engine_init_breadcrumbs (&ve->base);intel_engine_init_execlists (&ve->base); + ve->base.breadcrumbs.irq_armed = true;/* fake HW, used for irq_work */ ve->base.cops = &virtual_context_ops; ve->base.request_alloc = execlists_request_alloc;
@@ -5269,6 +5259,7 @@ intel_execlists_create_virtual(struct intel_engine_cs **siblings, ve->base.flags |=I915_ENGINE_IS_VIRTUAL ; +virtual_engine_initial_hint (ve);return &ve->context; err_put:
drivers/gpu/drm/i915/gvt/handlers.c +2 -2
@@ -3131,8 +3131,8 @@ static int init_skl_mmio_info(struct intel_gvt *gvt)MMIO_DFH (GEN9_WM_CHICKEN3 ,D_SKL_PLUS ,F_MODE_MASK |F_CMD_ACCESS ,NULL ,NULL ); -MMIO_D (GAMT_CHKN_BIT_REG ,D_KBL ); -MMIO_D (GEN9_CTX_PREEMPT_REG ,D_KBL |D_SKL ); +MMIO_D (GAMT_CHKN_BIT_REG ,D_KBL |D_CFL ); +MMIO_D (GEN9_CTX_PREEMPT_REG ,D_SKL_PLUS );return 0 ; }
drivers/gpu/drm/i915/i915_perf.c +1 -0
@@ -1645,6 +1645,7 @@ static u32 *save_restore_register(struct i915_perf_stream *stream, u32 *cs,u32 d; cmd = save ?MI_STORE_REGISTER_MEM :MI_LOAD_REGISTER_MEM ; + cmd |=MI_SRM_LRM_GLOBAL_GTT ;if (INTEL_GEN (stream->perf->i915) >=8 ) cmd++;
drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c +2 -2
@@ -2126,7 +2126,6 @@ int dpu_encoder_setup(struct drm_device *dev, struct drm_encoder *enc, dpu_enc =to_dpu_encoder_virt (enc); -mutex_init (&dpu_enc->enc_lock); ret =dpu_encoder_setup_display (dpu_enc, dpu_kms, disp_info);if (ret) goto fail;
@@ -2141,7 +2140,6 @@ int dpu_encoder_setup(struct drm_device *dev, struct drm_encoder *enc, 0); -mutex_init (&dpu_enc->rc_lock);INIT_DELAYED_WORK (&dpu_enc->delayed_off_work, dpu_encoder_off_work); dpu_enc->idle_timeout =IDLE_TIMEOUT ;
@@ -2186,6 +2184,8 @@ struct drm_encoder *dpu_encoder_init(struct drm_device *dev,spin_lock_init (&dpu_enc->enc_spinlock); dpu_enc->enabled = false; +mutex_init (&dpu_enc->enc_lock); +mutex_init (&dpu_enc->rc_lock);return &dpu_enc->base; }
drivers/gpu/drm/msm/msm_submitqueue.c +3 -1
@@ -71,8 +71,10 @@ int msm_submitqueue_create(struct drm_device *drm, struct msm_file_private *ctx, queue->flags = flags;if (priv->gpu) { -if (prio >= priv->gpu->nr_rings) +if (prio >= priv->gpu->nr_rings) { +kfree (queue);return -EINVAL ; + } queue->prio = prio; }
drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c +4 -4
@@ -1069,10 +1069,6 @@ vmw_stdu_primary_plane_prepare_fb(struct drm_plane *plane,if (new_content_type !=SAME_AS_DISPLAY ) {struct vmw_surface_metadata metadata = {0 }; - metadata.base_size.width = hdisplay; - metadata.base_size.height = vdisplay; - metadata.base_size.depth =1 ; -/* * If content buffer is a buffer object, then we have to * construct surface info
@@ -1104,6 +1100,10 @@ vmw_stdu_primary_plane_prepare_fb(struct drm_plane *plane, metadata = new_vfbs->surface->metadata; } + metadata.base_size.width = hdisplay; + metadata.base_size.height = vdisplay; + metadata.base_size.depth =1 ; +if (vps->surf) {struct drm_vmw_size cur_base_size = vps->surf->metadata.base_size;
drivers/hid/hid-ids.h +3 -0
@@ -624,6 +624,7 @@#define USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A081 0xa081#define USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A0C2 0xa0c2#define USB_DEVICE_ID_HOLTEK_ALT_KEYBOARD_A096 0xa096 +#define USB_DEVICE_ID_HOLTEK_ALT_KEYBOARD_A293 0xa293#define USB_VENDOR_ID_IMATION 0x0718#define USB_DEVICE_ID_DISC_STAKKA 0xd000
@@ -1005,6 +1006,8 @@#define USB_DEVICE_ID_ROCCAT_RYOS_MK_PRO 0x3232#define USB_DEVICE_ID_ROCCAT_SAVU 0x2d5a +#define USB_VENDOR_ID_SAI 0x17dd +#define USB_VENDOR_ID_SAITEK 0x06a3#define USB_DEVICE_ID_SAITEK_RUMBLEPAD 0xff17#define USB_DEVICE_ID_SAITEK_PS1000 0x0621
drivers/hid/hid-logitech-hidpp.c +1 -1
@@ -3146,7 +3146,7 @@ static int hi_res_scroll_enable(struct hidpp_device *hidpp) multiplier =1 ; hidpp->vertical_wheel_counter.wheel_multiplier = multiplier; -hid_info (hidpp->hid_dev,"multiplier = %d\n" , multiplier); +hid_dbg (hidpp->hid_dev,"wheel multiplier = %d\n" , multiplier);return 0 ; }
drivers/hid/hid-magicmouse.c +6 -0
@@ -535,6 +535,12 @@ static int magicmouse_setup_input(struct input_dev *input, struct hid_device *hd__set_bit (MSC_RAW , input->mscbit); } +/* +* hid-input may mark device as using autorepeat, but neither +* the trackpad, nor the mouse actually want it. +*/ +__clear_bit (EV_REP , input->evbit); +return 0 ; }
drivers/hid/hid-quirks.c +2 -0
@@ -88,6 +88,7 @@ static const struct hid_device_id hid_quirks[] = { { HID_USB_DEVICE(USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_FIGHTING), HID_QUIRK_BADPAD | HID_QUIRK_MULTI_INPUT }, { HID_USB_DEVICE(USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_FLYING), HID_QUIRK_BADPAD | HID_QUIRK_MULTI_INPUT }, { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_KEYBOARD_A096), HID_QUIRK_NO_INIT_REPORTS }, + { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_KEYBOARD_A293), HID_QUIRK_ALWAYS_POLL }, { HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_LOGITECH_OEM_USB_OPTICAL_MOUSE_0A4A), HID_QUIRK_ALWAYS_POLL }, { HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_LOGITECH_OEM_USB_OPTICAL_MOUSE_0B4A), HID_QUIRK_ALWAYS_POLL }, { HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE), HID_QUIRK_ALWAYS_POLL },
@@ -832,6 +833,7 @@ static const struct hid_device_id hid_ignore_list[] = { { HID_USB_DEVICE(USB_VENDOR_ID_PETZL, USB_DEVICE_ID_PETZL_HEADLAMP) }, { HID_USB_DEVICE(USB_VENDOR_ID_PHILIPS, USB_DEVICE_ID_PHILIPS_IEEE802154_DONGLE) }, { HID_USB_DEVICE(USB_VENDOR_ID_POWERCOM, USB_DEVICE_ID_POWERCOM_UPS) }, + { HID_USB_DEVICE(USB_VENDOR_ID_SAI, USB_DEVICE_ID_CYPRESS_HIDCOM) }, #if IS_ENABLED(CONFIG_MOUSE_SYNAPTICS_USB) { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_TP) }, { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_INT_TP) },
drivers/hwmon/drivetemp.c +43 -0
55 lines not on this page · raw message
drivers/hwmon/emc2103.c +1 -1
@@ -443,7 +443,7 @@ static ssize_t pwm1_enable_store(struct device *dev, } result =read_u8_from_i2c (client,REG_FAN_CONF1 , &conf_reg); -if (result) { +if (result <0 ) { count = result; goto err; }
drivers/hwtracing/coresight/coresight-etm4x.c +53 -29
108 lines not on this page · raw message
drivers/hwtracing/intel_th/core.c +18 -3
@@ -1021,15 +1021,30 @@ int intel_th_set_output(struct intel_th_device *thdev, {struct intel_th_device *hub =to_intel_th_hub (thdev);struct intel_th_driver *hubdrv =to_intel_th_driver (hub->dev.driver); +int ret;/* In host mode, this is up to the external debugger, do nothing. */ if (hub->host_mode)return 0 ; -if (!hubdrv->set_output) -return -ENOTSUPP ; +/* +* hub is instantiated together with the source device that +* calls here, so guaranteed to be present. +*/ + hubdrv =to_intel_th_driver (hub->dev.driver); +if (!hubdrv || !try_module_get (hubdrv->driver.owner)) +return -EINVAL ; + +if (!hubdrv->set_output) { + ret = -ENOTSUPP ; + goto out; + } + + ret = hubdrv->set_output (hub, master); -return hubdrv->set_output (hub, master); +out: +module_put (hubdrv->driver.owner); +return ret; }EXPORT_SYMBOL_GPL (intel_th_set_output);
drivers/hwtracing/intel_th/pci.c +15 -0
@@ -233,11 +233,21 @@ static const struct pci_device_id intel_th_pci_id_table[] = { PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0xa0a6), .driver_data = (kernel_ulong_t)&intel_th_2x, }, + { +/* Tiger Lake PCH-H */ +PCI_DEVICE (PCI_VENDOR_ID_INTEL ,0x43a6 ), + .driver_data = (kernel_ulong_t)&intel_th_2x, + }, {/* Jasper Lake PCH */ PCI_DEVICE (PCI_VENDOR_ID_INTEL ,0x4da6 ), .driver_data = (kernel_ulong_t)&intel_th_2x, }, + { +/* Jasper Lake CPU */ +PCI_DEVICE (PCI_VENDOR_ID_INTEL ,0x4e29 ), + .driver_data = (kernel_ulong_t)&intel_th_2x, + }, {/* Elkhart Lake CPU */ PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x4529),
@@ -248,6 +258,11 @@ static const struct pci_device_id intel_th_pci_id_table[] = { PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x4b26), .driver_data = (kernel_ulong_t)&intel_th_2x, }, + { +/* Emmitsburg PCH */ + PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x1bcc), + .driver_data = (kernel_ulong_t)&intel_th_2x, + }, { 0 }, };
drivers/hwtracing/intel_th/sth.c +1 -3
@@ -161,9 +161,7 @@ static int sth_stm_link(struct stm_data *stm_data, unsigned int master, { struct sth_device *sth = container_of(stm_data, struct sth_device, stm); -intel_th_set_output (to_intel_th_device (sth->dev), master); - -return 0 ; +return intel_th_set_output (to_intel_th_device (sth->dev), master); }static int intel_th_sw_init (struct sth_device *sth)
drivers/i2c/busses/i2c-eg20t.c +1 -0
@@ -180,6 +180,7 @@ static const struct pci_device_id pch_pcidev_id[] = { { PCI_VDEVICE(ROHM, PCI_DEVICE_ID_ML7831_I2C), 1, }, {0,} }; +MODULE_DEVICE_TABLE (pci, pch_pcidev_id);static irqreturn_t pch_i2c_handler (int irq,void *pData);
drivers/iio/accel/mma8452.c +4 -1
@@ -1685,10 +1685,13 @@ static int mma8452_probe(struct i2c_client *client, ret =mma8452_set_freefall_mode (data, false);if (ret <0 ) - goto buffer_cleanup; + goto unregister_device;return 0 ; +unregister_device: +iio_device_unregister (indio_dev); + buffer_cleanup:iio_triggered_buffer_cleanup (indio_dev);
drivers/iio/adc/ad7780.c +1 -1
@@ -310,7 +310,7 @@ static int ad7780_probe(struct spi_device *spi) ret =ad7780_init_gpios (&spi->dev, st);if (ret) - goto error_cleanup_buffer_and_trigger; +return ret; st->reg =devm_regulator_get (&spi->dev,"avdd" );if (IS_ERR (st->reg))
drivers/iio/health/afe4403.c +8 -5
@@ -63,6 +63,7 @@ static const struct reg_field afe4403_reg_fields[] = {* @regulator: Pointer to the regulator for the IC * @trig: IIO trigger for this device * @irq: ADC_RDY line interrupt number +* @buffer: Used to construct data layout to push into IIO buffer. */ struct afe4403_data {struct device *dev;
@@ -72,6 +73,8 @@ struct afe4403_data {struct regulator *regulator;struct iio_trigger *trig;int irq; +/* Ensure suitable alignment for timestamp */ +s32 buffer[8 ]__aligned(8) ; };enum afe4403_chan_id {
@@ -309,7 +312,6 @@ static irqreturn_t afe4403_trigger_handler(int irq, void *private)struct iio_dev *indio_dev = pf->indio_dev;struct afe4403_data *afe =iio_priv (indio_dev);int ret, bit, i =0 ; -s32 buffer[8 ];u8 tx[4 ] = {AFE440X_CONTROL0 ,0x0 ,0x0 ,AFE440X_CONTROL0_READ };u8 rx[3 ];
@@ -326,9 +328,9 @@ static irqreturn_t afe4403_trigger_handler(int irq, void *private)if (ret) goto err; - buffer[i++] = (rx[0 ] <<16 ) | - (rx[1 ] <<8 ) | - (rx[2 ]); + afe->buffer[i++] = (rx[0 ] <<16 ) | + (rx[1 ] <<8 ) | + (rx[2 ]); }/* Disable reading from the device */
@@ -337,7 +339,8 @@ static irqreturn_t afe4403_trigger_handler(int irq, void *private)if (ret) goto err; -iio_push_to_buffers_with_timestamp (indio_dev, buffer, pf->timestamp); +iio_push_to_buffers_with_timestamp (indio_dev, afe->buffer, + pf->timestamp); err:iio_trigger_notify_done (indio_dev->trig);
drivers/iio/health/afe4404.c +5 -3
@@ -83,6 +83,7 @@ static const struct reg_field afe4404_reg_fields[] = {* @regulator: Pointer to the regulator for the IC * @trig: IIO trigger for this device * @irq: ADC_RDY line interrupt number +* @buffer: Used to construct a scan to push to the iio buffer. */ struct afe4404_data {struct device *dev;
@@ -91,6 +92,7 @@ struct afe4404_data {struct regulator *regulator;struct iio_trigger *trig;int irq; +s32 buffer[10 ]__aligned(8) ; };enum afe4404_chan_id {
@@ -328,17 +330,17 @@ static irqreturn_t afe4404_trigger_handler(int irq, void *private)struct iio_dev *indio_dev = pf->indio_dev;struct afe4404_data *afe =iio_priv (indio_dev);int ret, bit, i =0 ; -s32 buffer[10 ];for_each_set_bit (bit, indio_dev->active_scan_mask, indio_dev->masklength) { ret =regmap_read (afe->regmap, afe4404_channel_values[bit], - &buffer[i++]); + &afe->buffer[i++]);if (ret) goto err; } -iio_push_to_buffers_with_timestamp (indio_dev, buffer, pf->timestamp); +iio_push_to_buffers_with_timestamp (indio_dev, afe->buffer, + pf->timestamp); err:iio_trigger_notify_done (indio_dev->trig);
drivers/iio/humidity/hdc100x.c +7 -3
@@ -38,6 +38,11 @@ struct hdc100x_data {/* integration time of the sensor */ int adc_int_us[2 ]; +/* Ensure natural alignment of timestamp */ +struct { +__be16 channels[2 ]; +s64 ts__aligned(8) ; + } scan; };/* integration time in us */
@@ -322,7 +327,6 @@ static irqreturn_t hdc100x_trigger_handler(int irq, void *p)struct i2c_client *client = data->client;int delay = data->adc_int_us[0 ] + data->adc_int_us[1 ];int ret; -s16 buf[8 ];/* 2x s16 + padding + 8 byte timestamp */ /* dual read starts at temp register */ mutex_lock (&data->lock);
@@ -333,13 +337,13 @@ static irqreturn_t hdc100x_trigger_handler(int irq, void *p) }usleep_range (delay, delay +1000 ); - ret =i2c_master_recv (client, (u8 *)buf,4 ); + ret =i2c_master_recv (client, (u8 *)data->scan.channels,4 );if (ret <0 ) {dev_err (&client->dev,"cannot read sensor data\n" ); goto err; } -iio_push_to_buffers_with_timestamp (indio_dev, buf, +iio_push_to_buffers_with_timestamp (indio_dev, &data->scan,iio_get_time_ns (indio_dev)); err:mutex_unlock (&data->lock);
drivers/iio/humidity/hts221.h +5 -2
@@ -14,8 +14,6 @@#include <linux/iio/iio.h> -#define HTS221_DATA_SIZE 2 -enum hts221_sensor_type {HTS221_SENSOR_H ,HTS221_SENSOR_T ,
@@ -39,6 +37,11 @@ struct hts221_hw {bool enabled;u8 odr; +/* Ensure natural alignment of timestamp */ +struct { +__le16 channels[2 ]; +s64 ts__aligned(8) ; + } scan; };extern const struct dev_pm_ops hts221_pm_ops;
drivers/iio/humidity/hts221_buffer.c +5 -4
@@ -162,7 +162,6 @@ static const struct iio_buffer_setup_ops hts221_buffer_ops = {static irqreturn_t hts221_buffer_handler_thread (int irq,void *p) { -u8 buffer[ALIGN (2 *HTS221_DATA_SIZE ,sizeof (s64)) +sizeof (s64)];struct iio_poll_func *pf = p;struct iio_dev *iio_dev = pf->indio_dev;struct hts221_hw *hw =iio_priv (iio_dev);
@@ -172,18 +171,20 @@ static irqreturn_t hts221_buffer_handler_thread(int irq, void *p)/* humidity data */ ch = &iio_dev->channels[HTS221_SENSOR_H ]; err =regmap_bulk_read (hw->regmap, ch->address, - buffer,HTS221_DATA_SIZE ); + &hw->scan.channels[0 ], +sizeof (hw->scan.channels[0 ]));if (err <0 ) goto out;/* temperature data */ ch = &iio_dev->channels[HTS221_SENSOR_T ]; err =regmap_bulk_read (hw->regmap, ch->address, - buffer +HTS221_DATA_SIZE ,HTS221_DATA_SIZE ); + &hw->scan.channels[1 ], +sizeof (hw->scan.channels[1 ]));if (err <0 ) goto out; -iio_push_to_buffers_with_timestamp (iio_dev, buffer, +iio_push_to_buffers_with_timestamp (iio_dev, &hw->scan,iio_get_time_ns (iio_dev)); out:
drivers/iio/industrialio-core.c +2 -0
@@ -130,6 +130,8 @@ static const char * const iio_modifier_names[] = { [IIO_MOD_PM2P5] = "pm2p5", [IIO_MOD_PM4] = "pm4", [IIO_MOD_PM10] = "pm10", + [IIO_MOD_ETHANOL] = "ethanol", + [IIO_MOD_H2] = "h2", };/* relies on pairs of these shared then separate */
drivers/iio/magnetometer/ak8974.c +17 -12
@@ -185,6 +185,11 @@ struct ak8974 {bool drdy_irq;struct completion drdy_complete;bool drdy_active_low; +/* Ensure timestamp is naturally aligned */ +struct { +__le16 channels[3 ]; +s64 ts__aligned(8) ; + } scan; };static const char ak8974_reg_avdd[] ="avdd" ;
@@ -581,7 +586,6 @@ static void ak8974_fill_buffer(struct iio_dev *indio_dev) {struct ak8974 *ak8974 =iio_priv (indio_dev);int ret; -__le16 hw_values[8 ];/* Three axes + 64bit padding */ pm_runtime_get_sync (&ak8974->i2c->dev);mutex_lock (&ak8974->lock);
@@ -591,13 +595,13 @@ static void ak8974_fill_buffer(struct iio_dev *indio_dev)dev_err (&ak8974->i2c->dev,"error triggering measure\n" ); goto out_unlock; } - ret =ak8974_getresult (ak8974, hw_values); + ret =ak8974_getresult (ak8974, ak8974->scan.channels);if (ret) {dev_err (&ak8974->i2c->dev,"error getting measures\n" ); goto out_unlock; } -iio_push_to_buffers_with_timestamp (indio_dev, hw_values, +iio_push_to_buffers_with_timestamp (indio_dev, &ak8974->scan,iio_get_time_ns (indio_dev)); out_unlock:
@@ -764,19 +768,21 @@ static int ak8974_probe(struct i2c_client *i2c, ak8974->map =devm_regmap_init_i2c (i2c, &ak8974_regmap_config);if (IS_ERR (ak8974->map)) {dev_err (&i2c->dev,"failed to allocate register map\n" ); +pm_runtime_put_noidle (&i2c->dev); +pm_runtime_disable (&i2c->dev);return PTR_ERR (ak8974->map); } ret =ak8974_set_power (ak8974,AK8974_PWR_ON );if (ret) {dev_err (&i2c->dev,"could not power on\n" ); - goto power_off; + goto disable_pm; } ret =ak8974_detect (ak8974);if (ret) {dev_err (&i2c->dev,"neither AK8974 nor AMI30x found\n" ); - goto power_off; + goto disable_pm; } ret =ak8974_selftest (ak8974);
@@ -786,14 +792,9 @@ static int ak8974_probe(struct i2c_client *i2c, ret =ak8974_reset (ak8974);if (ret) {dev_err (&i2c->dev,"AK8974 reset failed\n" ); - goto power_off; + goto disable_pm; } -pm_runtime_set_autosuspend_delay (&i2c->dev, -AK8974_AUTOSUSPEND_DELAY ); -pm_runtime_use_autosuspend (&i2c->dev); -pm_runtime_put (&i2c->dev); - indio_dev->dev.parent = &i2c->dev; indio_dev->channels = ak8974_channels; indio_dev->num_channels =ARRAY_SIZE (ak8974_channels);
@@ -846,6 +847,11 @@ static int ak8974_probe(struct i2c_client *i2c, goto cleanup_buffer; } +pm_runtime_set_autosuspend_delay (&i2c->dev, +AK8974_AUTOSUSPEND_DELAY ); +pm_runtime_use_autosuspend (&i2c->dev); +pm_runtime_put (&i2c->dev); +return 0 ; cleanup_buffer:
@@ -854,7 +860,6 @@ static int ak8974_probe(struct i2c_client *i2c,pm_runtime_put_noidle (&i2c->dev);pm_runtime_disable (&i2c->dev);ak8974_set_power (ak8974,AK8974_PWR_OFF ); -power_off:regulator_bulk_disable (ARRAY_SIZE (ak8974->regs), ak8974->regs);return ret;
drivers/iio/pressure/ms5611_core.c +8 -3
@@ -212,16 +212,21 @@ static irqreturn_t ms5611_trigger_handler(int irq, void *p)struct iio_poll_func *pf = p;struct iio_dev *indio_dev = pf->indio_dev;struct ms5611_state *st =iio_priv (indio_dev); -s32 buf[4 ];/* s32 (pressure) + s32 (temp) + 2 * s32 (timestamp) */ +/* Ensure buffer elements are naturally aligned */ +struct { +s32 channels[2 ]; +s64 ts__aligned(8) ; + } scan;int ret;mutex_lock (&st->lock); - ret =ms5611_read_temp_and_pressure (indio_dev, &buf[1 ], &buf[0 ]); + ret =ms5611_read_temp_and_pressure (indio_dev, &scan.channels[1 ], + &scan.channels[0 ]);mutex_unlock (&st->lock);if (ret <0 ) goto err; -iio_push_to_buffers_with_timestamp (indio_dev, buf, +iio_push_to_buffers_with_timestamp (indio_dev, &scan,iio_get_time_ns (indio_dev)); err:
drivers/iio/pressure/zpa2326.c +3 -1
@@ -664,8 +664,10 @@ static int zpa2326_resume(const struct iio_dev *indio_dev)int err; err =pm_runtime_get_sync (indio_dev->dev.parent); -if (err <0 ) +if (err <0 ) { +pm_runtime_put (indio_dev->dev.parent);return err; + }if (err >0 ) {/*
drivers/infiniband/hw/mlx5/qp.c +2 -0
@@ -1525,6 +1525,8 @@ static int create_raw_packet_qp(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp,u16 uid =to_mpd (pd)->uid;u32 out[MLX5_ST_SZ_DW (create_tir_out)] = {}; +if (!qp->sq.wqe_cnt && !qp->rq.wqe_cnt) +return -EINVAL ;if (qp->sq.wqe_cnt) { err =create_raw_packet_qp_tis (dev, qp, sq, tdn, pd);if (err)
drivers/infiniband/sw/rxe/rxe.c +1 -0
@@ -77,6 +77,7 @@ static void rxe_init_device_param(struct rxe_dev *rxe) { rxe->max_inline_data =RXE_MAX_INLINE_DATA ; + rxe->attr.vendor_id =RXE_VENDOR_ID ; rxe->attr.max_mr_size =RXE_MAX_MR_SIZE ; rxe->attr.page_size_cap =RXE_PAGE_SIZE_CAP ; rxe->attr.max_qp =RXE_MAX_QP ;
drivers/infiniband/sw/rxe/rxe_param.h +3 -0
@@ -127,6 +127,9 @@ enum rxe_device_param {/* Delay before calling arbiter timer */ RXE_NSEC_ARB_TIMER_DELAY =200 , + +/* IBTA v1.4 A3.3.1 VENDOR INFORMATION section */ + RXE_VENDOR_ID = 0XFFFFFF, };/* default/initial rxe port parameters */
drivers/input/serio/i8042-x86ia64io.h +7 -0
@@ -425,6 +425,13 @@ static const struct dmi_system_id __initconst i8042_dmi_nomux_table[] = { DMI_MATCH(DMI_PRODUCT_NAME, "076804U"), }, }, + { +/* Lenovo XiaoXin Air 12 */ + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"LENOVO" ), + DMI_MATCH(DMI_PRODUCT_NAME, "80UN"), + }, + }, { .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
drivers/input/touchscreen/elants_i2c.c +0 -1
@@ -1318,7 +1318,6 @@ static int elants_i2c_probe(struct i2c_client *client, 0, MT_TOOL_PALM, 0, 0);input_abs_set_res (ts->input,ABS_MT_POSITION_X , ts->x_res);input_abs_set_res (ts->input,ABS_MT_POSITION_Y , ts->y_res); -input_abs_set_res (ts->input,ABS_MT_TOUCH_MAJOR ,1 ); error =input_register_device (ts->input);if (error) {
drivers/input/touchscreen/mms114.c +15 -2
@@ -54,6 +54,7 @@enum mms_type {TYPE_MMS114 =114 ,TYPE_MMS152 =152 , +TYPE_MMS345L =345 , };struct mms114_data {
@@ -250,6 +251,15 @@ static int mms114_get_version(struct mms114_data *data)int error;switch (data->type) { +case TYPE_MMS345L : + error =__mms114_read_reg (data,MMS152_FW_REV ,3 , buf); +if (error) +return error;
Lines of this file are not shown. View the raw message.
drivers/misc/habanalabs/goya/goya_security.c +98 -1
99 lines not on this page · raw message
drivers/mtd/nand/raw/brcmnand/brcmnand.c +14 -10
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/pensando/ionic/ionic_lif.c +3 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c +5 -0
Lines of this file are not shown. View the raw message.
drivers/phy/rockchip/phy-rockchip-inno-dsidphy.c +2 -2
Lines of this file are not shown. View the raw message.
drivers/scsi/megaraid/megaraid_sas_fusion.c +0 -2
Lines of this file are not shown. View the raw message.
drivers/soc/qcom/rpmh-rsc.c +64 -34
98 lines not on this page · raw message
drivers/soc/qcom/rpmh.c +27 -29
56 lines not on this page · raw message
drivers/staging/comedi/drivers/addi_apci_1500.c +7 -3
Lines of this file are not shown. View the raw message.
drivers/thermal/intel/int340x_thermal/int3403_thermal.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/tty/serial/cpm_uart/cpm_uart_core.c +8 -1
Lines of this file are not shown. View the raw message.
drivers/tty/serial/serial_core.c +16 -96
112 lines not on this page · raw message
drivers/usb/gadget/function/f_uac1_legacy.c +2 -0
Lines of this file are not shown. View the raw message.
drivers/usb/gadget/udc/atmel_usba_udc.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/virt/vboxguest/vboxguest_core.c +4 -2
Lines of this file are not shown. View the raw message.
drivers/virt/vboxguest/vboxguest_core.h +15 -0
Lines of this file are not shown. View the raw message.
drivers/virt/vboxguest/vboxguest_linux.c +2 -1
Lines of this file are not shown. View the raw message.
drivers/xen/xenbus/xenbus_client.c +82 -89
171 lines not on this page · raw message
include/dt-bindings/clock/qcom,gcc-msm8998.h +1 -0
Lines of this file are not shown. View the raw message.
include/linux/serial_core.h +98 -4
102 lines not on this page · raw message
net/core/sock_map.c +48 -5
53 lines not on this page · raw message
net/netlink/genetlink.c +13 -84
97 lines not on this page · raw message
tools/testing/selftests/net/fib_nexthops.sh +13 -0
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.