Linux 5.8.10
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.8.10 kernel.
All users of the 5.8 kernel series must upgrade.
The updated 5.8.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.8.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/sound/designs/timestamping.rst | 2 Makefile | 6 arch/arc/boot/dts/hsdk.dts | 6 arch/arc/kernel/troubleshoot.c | 77 -- arch/arc/plat-eznps/include/plat/ctop.h | 1 arch/arm/boot/dts/bcm-hr2.dtsi | 2 arch/arm/boot/dts/bcm-nsp.dtsi | 2 arch/arm/boot/dts/bcm5301x.dtsi | 2 arch/arm/boot/dts/imx6sx-pinfunc.h | 2 arch/arm/boot/dts/imx7d-zii-rmu2.dts | 2 arch/arm/boot/dts/imx7ulp.dtsi | 8 arch/arm/boot/dts/logicpd-som-lv-baseboard.dtsi | 29 arch/arm/boot/dts/logicpd-torpedo-baseboard.dtsi | 2 arch/arm/boot/dts/ls1021a.dtsi | 2 arch/arm/boot/dts/omap5.dtsi | 20 arch/arm/boot/dts/socfpga_arria10.dtsi | 2 arch/arm/boot/dts/vfxxx.dtsi | 2 arch/arm/mach-omap2/omap-iommu.c | 2 arch/arm64/boot/dts/broadcom/northstar2/ns2.dtsi | 2 arch/arm64/boot/dts/freescale/Makefile | 1 arch/arm64/boot/dts/freescale/imx8mp.dtsi | 2 arch/arm64/boot/dts/freescale/imx8mq.dtsi | 2 arch/arm64/kernel/module-plts.c | 3 arch/arm64/kvm/mmu.c | 8 arch/mips/include/asm/mach-loongson64/cpu-feature-overrides.h | 2 arch/powerpc/configs/pasemi_defconfig | 1 arch/powerpc/configs/ppc6xx_defconfig | 1 arch/x86/configs/i386_defconfig | 1 arch/x86/configs/x86_64_defconfig | 1 arch/x86/kvm/mmu/mmu.c | 2 arch/x86/kvm/vmx/nested.c | 2 arch/x86/kvm/vmx/vmx.c | 1 arch/x86/kvm/x86.c | 2 block/bio.c | 4 block/partitions/core.c | 2 drivers/atm/firestream.c | 1 drivers/block/rbd.c | 12 drivers/cpufreq/intel_pstate.c | 14 drivers/dma/acpi-dma.c | 4 drivers/dma/dma-jz4780.c | 38 - drivers/firmware/efi/embedded-firmware.c | 10 drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c | 3 drivers/gpu/drm/msm/adreno/a2xx_gpu.c | 5 drivers/gpu/drm/msm/adreno/a3xx_gpu.c | 10 drivers/gpu/drm/msm/adreno/a4xx_gpu.c | 10 drivers/gpu/drm/msm/adreno/a5xx_gpu.c | 14 drivers/gpu/drm/msm/adreno/a5xx_gpu.h | 1 drivers/gpu/drm/msm/adreno/a5xx_preempt.c | 25 drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 7 drivers/gpu/drm/msm/adreno/adreno_gpu.c | 27 drivers/gpu/drm/msm/msm_ringbuffer.c | 3 drivers/gpu/drm/sun4i/sun4i_backend.c | 4 drivers/gpu/drm/sun4i/sun4i_tcon.c | 8 drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c | 4 drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 2 drivers/gpu/drm/tve200/tve200_display.c | 22 drivers/gpu/drm/virtio/virtgpu_display.c | 11 drivers/gpu/drm/virtio/virtgpu_drv.h | 1 drivers/gpu/drm/virtio/virtgpu_plane.c | 4 drivers/hid/hid-elan.c | 2 drivers/hid/hid-ids.h | 3 drivers/hid/hid-microsoft.c | 2 drivers/hid/hid-quirks.c | 2 drivers/i2c/busses/i2c-npcm7xx.c | 8 drivers/iio/accel/bmc150-accel-core.c | 15 drivers/iio/accel/kxsd9.c | 16 drivers/iio/accel/mma7455_core.c | 16 drivers/iio/accel/mma8452.c | 11 drivers/iio/adc/ina2xx-adc.c | 11 drivers/iio/adc/max1118.c | 10 drivers/iio/adc/mcp3422.c | 16 drivers/iio/adc/ti-adc081c.c | 11 drivers/iio/adc/ti-adc084s021.c | 10 drivers/iio/adc/ti-ads1015.c | 10 drivers/iio/chemical/ccs811.c | 13 drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c | 5 drivers/iio/light/ltr501.c | 15 drivers/iio/light/max44000.c | 12 drivers/iio/magnetometer/ak8975.c | 16 drivers/iio/proximity/mb1232.c | 17 drivers/infiniband/core/cq.c | 4 drivers/infiniband/core/verbs.c | 2 drivers/infiniband/hw/bnxt_re/ib_verbs.c | 43 - drivers/infiniband/hw/bnxt_re/main.c | 3 drivers/infiniband/hw/bnxt_re/qplib_fp.c | 26 drivers/infiniband/hw/bnxt_re/qplib_rcfw.c | 10 drivers/infiniband/hw/bnxt_re/qplib_rcfw.h | 5 drivers/infiniband/hw/mlx4/main.c | 3 drivers/infiniband/sw/rxe/rxe.c | 7 drivers/infiniband/sw/rxe/rxe.h | 2 drivers/infiniband/sw/rxe/rxe_mr.c | 1 drivers/infiniband/sw/rxe/rxe_sysfs.c | 5 drivers/infiniband/sw/rxe/rxe_verbs.c | 2 drivers/infiniband/ulp/isert/ib_isert.c | 93 +- drivers/infiniband/ulp/isert/ib_isert.h | 41 - drivers/infiniband/ulp/rtrs/rtrs-srv-sysfs.c | 16 drivers/infiniband/ulp/rtrs/rtrs-srv.c | 9 drivers/interconnect/qcom/bcm-voter.c | 27 drivers/iommu/amd/iommu.c | 7 drivers/iommu/amd/iommu_v2.c | 7 drivers/media/rc/gpio-ir-tx.c | 16 drivers/misc/eeprom/at24.c | 11 drivers/mmc/core/sdio_ops.c | 39 - drivers/mmc/host/sdhci-acpi.c | 31 drivers/mmc/host/sdhci-msm.c | 18 drivers/mmc/host/sdhci-of-esdhc.c | 10 drivers/net/ethernet/hisilicon/hns3/hns3_enet.c | 6 drivers/net/wan/hdlc.c | 2 drivers/net/wan/hdlc_cisco.c | 1 drivers/net/wan/lapbether.c | 3 drivers/nfc/st95hf/core.c | 2 drivers/nvme/host/core.c | 8 drivers/nvme/host/fabrics.c | 13 drivers/nvme/host/nvme.h | 3 drivers/nvme/host/pci.c | 4 drivers/nvme/host/rdma.c | 68 +- drivers/nvme/host/tcp.c | 80 +- drivers/nvme/target/tcp.c | 10 drivers/phy/qualcomm/phy-qcom-qmp.c | 16 drivers/phy/qualcomm/phy-qcom-qmp.h | 2 drivers/regulator/core.c | 155 ++-- drivers/scsi/libsas/sas_ata.c | 5 drivers/scsi/lpfc/lpfc_init.c | 1 drivers/scsi/megaraid/megaraid_sas_fusion.c | 2 drivers/scsi/mpt3sas/mpt3sas_base.c | 2 drivers/scsi/qedf/qedf_main.c | 2 drivers/scsi/qla2xxx/qla_def.h | 2 drivers/scsi/qla2xxx/qla_init.c | 6 drivers/soundwire/stream.c | 8 drivers/spi/spi-stm32.c | 8 drivers/staging/greybus/audio_topology.c | 29 drivers/staging/wlan-ng/hfa384x_usb.c | 5 drivers/staging/wlan-ng/prism2usb.c | 19 drivers/target/iscsi/iscsi_target.c | 17 drivers/target/iscsi/iscsi_target_login.c | 6 drivers/target/iscsi/iscsi_target_login.h | 3 drivers/target/iscsi/iscsi_target_nego.c | 3 drivers/thunderbolt/switch.c | 1 drivers/thunderbolt/tb.h | 2 drivers/usb/core/message.c | 91 +- drivers/usb/core/sysfs.c | 5 drivers/usb/dwc3/dwc3-meson-g12a.c | 15 drivers/usb/serial/ftdi_sio.c | 1 drivers/usb/serial/ftdi_sio_ids.h | 1 drivers/usb/serial/option.c | 22 drivers/usb/typec/mux/intel_pmc_mux.c | 14 drivers/usb/typec/ucsi/ucsi_acpi.c | 4 drivers/video/console/Kconfig | 46 - drivers/video/console/vgacon.c | 221 ------ drivers/video/fbdev/core/bitblit.c | 11 drivers/video/fbdev/core/fbcon.c | 334 ---------- drivers/video/fbdev/core/fbcon.h | 2 drivers/video/fbdev/core/fbcon_ccw.c | 11 drivers/video/fbdev/core/fbcon_cw.c | 11 drivers/video/fbdev/core/fbcon_ud.c | 11 drivers/video/fbdev/core/tileblit.c | 2 drivers/video/fbdev/vga16fb.c | 2 fs/btrfs/disk-io.c | 2 fs/btrfs/extent-tree.c | 19 fs/btrfs/ioctl.c | 3 fs/btrfs/print-tree.c | 12 fs/btrfs/transaction.c | 1 fs/btrfs/volumes.c | 10 fs/debugfs/file.c | 4 fs/xfs/libxfs/xfs_attr_leaf.c | 4 fs/xfs/libxfs/xfs_ialloc.c | 4 fs/xfs/libxfs/xfs_trans_space.h | 2 include/linux/efi_embedded_fw.h | 6 include/linux/netfilter/nf_conntrack_sctp.h | 2 include/soc/nps/common.h | 6 kernel/gcov/gcc_4_7.c | 4 kernel/padata.c | 5 kernel/seccomp.c | 13 lib/kobject.c | 6 lib/test_firmware.c | 9 net/mac80211/sta_info.h | 4 net/mac80211/status.c | 31 net/netfilter/nf_conntrack_proto_sctp.c | 39 + net/netfilter/nft_set_rbtree.c | 34 - net/wireless/chan.c | 15 net/wireless/util.c | 8 sound/hda/hdac_device.c | 2 sound/hda/intel-dsp-config.c | 10 sound/pci/hda/hda_tegra.c | 7 sound/pci/hda/patch_hdmi.c | 6 sound/x86/Kconfig | 2 tools/testing/selftests/timers/Makefile | 1 tools/testing/selftests/timers/settings | 1 virt/kvm/kvm_main.c | 21 189 files changed, 1293 insertions(+), 1403 deletions(-)
Adam Ford (3):
ARM: dts: logicpd-torpedo-baseboard: Fix broken audio
ARM: dts: logicpd-som-lv-baseboard: Fix broken audio
ARM: dts: logicpd-som-lv-baseboard: Fix missing video
Adrian Hunter (1):
mmc: sdio: Use mmc_pre_req() / mmc_post_req()
Aleksander Morgado (1):
USB: serial: option: add support for SIM7070/SIM7080/SIM7090 modules
Alexandru Elisei (1):
KVM: arm64: Update page shift if stage 2 block mapping not supported
Amar Singhal (1):
cfg80211: Adjust 6 GHz frequency to channel conversion
Amjad Ouled-Ameur (1):
Revert "usb: dwc3: meson-g12a: fix shared reset control use"
Andy Shevchenko (1):
kobject: Restore old behaviour of kobject_del(NULL)
Angelo Compagnucci (2):
iio: adc: mcp3422: fix locking scope
iio: adc: mcp3422: fix locking on error path
Anson Huang (1):
ARM: dts: imx7ulp: Correct gpio ranges
Bjørn Mork (1):
USB: serial: option: support dynamic Quectel USB compositions
Brian Foster (1):
xfs: fix off-by-one in inode alloc block reservation calculation
Chenyi Qiang (1):
KVM: nVMX: Fix the update value of nested load IA32_PERF_GLOBAL_CTRL control
Chris Healy (2):
ARM: dts: imx7d-zii-rmu2: fix rgmii phy-mode for ksz9031 phy
ARM: dts: vfxxx: Add syscon compatible with OCOTP
Chris Packham (1):
mmc: sdhci-of-esdhc: Don't walk device-tree on every interrupt
Christoph Hellwig (1):
block: restore a specific error code in bdev_del_partition
Dan Carpenter (1):
spi: stm32: fix pm_runtime_get_sync() error checking
Daniel Jordan (1):
padata: fix possible padata_works_lock deadlock
Darrick J. Wong (1):
xfs: initialize the shortform attr header padding entry
David Shah (1):
ARM: dts: omap5: Fix DSI base address and clocks
Dinghao Liu (4):
RDMA/rxe: Fix memleak in rxe_mem_init_user
NFC: st95hf: Fix memleak in st95hf_in_send_cmd
firestream: Fix memleak in fs_open
HID: elan: Fix memleak in elan_input_configured
Dinh Nguyen (1):
ARM: dts: socfpga: fix register entry for timer3 on Arria10
Dmitry Osipenko (1):
regulator: core: Fix slab-out-of-bounds in regulator_unlock_recursive()
Douglas Anderson (1):
mmc: sdhci-msm: Add retries when all tuning phases are found valid
Evgeniy Didin (1):
ARC: [plat-hsdk]: Switch ethernet phy-mode to rgmii-id
Felix Fietkau (1):
mac80211: reduce packet loss event false positives
Filipe Manana (2):
btrfs: fix NULL pointer dereference after failure to create snapshot
btrfs: fix wrong address when faulting in pages in the search ioctl
Florian Fainelli (4):
ARM: dts: bcm: HR2: Fixed QSPI compatible string
ARM: dts: NSP: Fixed QSPI compatible string
ARM: dts: BCM5301X: Fixed QSPI compatible string
arm64: dts: ns2: Fixed QSPI compatible string
Florian Westphal (1):
netfilter: conntrack: allow sctp hearbeat after connection re-use
Francisco Jerez (1):
cpufreq: intel_pstate: Fix intel_pstate_get_hwp_max() for turbo disabled
Fugang Duan (1):
ARM: dts: imx6sx: fix the pad QSPI1B_SCLK mux mode for uart3
Gerd Hoffmann (1):
drm/virtio: fix unblank
Greg Kroah-Hartman (1):
Linux 5.8.10
Gwendal Grignou (1):
iio: cros_ec: Set Gyroscope default frequency to 25Hz
Hanjun Guo (1):
dmaengine: acpi: Put the CSRT table after using it
Heikki Krogerus (1):
usb: typec: ucsi: acpi: Check the _DEP dependencies
Hou Pu (1):
scsi: target: iscsi: Fix hang in iscsit_access_np() when getting tpg->np_login_sem
Ilya Dryomov (1):
rbd: require global CAP_SYS_ADMIN for mapping and unmapping
James Smart (2):
scsi: lpfc: Fix setting IRQ affinity with an empty CPU mask
nvme: Revert: Fix controller creation races with teardown flow
Jernej Skrabec (1):
drm/sun4i: Fix DE2 YVU handling
Jessica Yu (1):
arm64/module: set trampoline section flags regardless of CONFIG_DYNAMIC_FTRACE
Jiaxun Yang (1):
MIPS: Loongson64: Do not override watch and ejtag feature
Jing Xiangfeng (1):
ARM: OMAP2+: Fix an IS_ERR() vs NULL check in _get_pwrdm()
Joerg Roedel (2):
iommu/amd: Do not force direct mapping when SME is active iommu/amd: Do not use IOMMUv2 functionality when SME is active
Jonathan Cameron (13):
iio:light:ltr501 Fix timestamp alignment issue. iio:proximity:mb1232: Fix timestamp alignment and prevent data leak. iio:accel:bmc150-accel: Fix timestamp alignment and prevent data leak. iio:adc:ti-adc084s021 Fix alignment and data leak issues. iio:adc:ina2xx Fix timestamp alignment issue. iio:adc:max1118 Fix alignment of timestamp and data leak issues iio:adc:ti-adc081c Fix alignment and data leak issues iio:magnetometer:ak8975 Fix alignment and data leak issues. iio:light:max44000 Fix timestamp alignment and prevent data leak. iio:chemical:ccs811: Fix timestamp alignment and prevent data leak.
iio: accel: kxsd9: Fix alignment of local buffer. iio:accel:mma7455: Fix timestamp alignment and prevent data leak. iio:accel:mma8452: Fix timestamp alignment and prevent data leak.
Jordan Crouse (3):
drm/msm: Split the a5xx preemption record drm/msm: Disable preemption on all 5xx targets drm/msm: Disable the RPTR shadow
Josef Bacik (2):
btrfs: fix lockdep splat in add_missing_dev
btrfs: free data reloc tree on failed mount
Josh Poimboeuf (1):
Revert "kbuild: use -flive-patching when CONFIG_LIVEPATCH is enabled"
Kamal Heib (3):
RDMA/rxe: Drop pointless checks in rxe_init_ports RDMA/rxe: Fix panic when calling kmem_cache_create() RDMA/core: Fix reported speed and width
Kees Cook (1):
test_firmware: Test platform fw loading on non-EFI systems
Krzysztof Kozlowski (1):
arm64: dts: imx8mq: Fix TMU interrupt property
Lai Jiangshan (1):
kvm x86/mmu: use KVM_REQ_MMU_SYNC to sync when needed
Leon Romanovsky (1):
gcov: Disable gcov build with GCC 10
Linus Torvalds (3):
fbcon: remove soft scrollback code
fbcon: remove now unusued 'softback_lines' cursor() argument
vgacon: remove software scrollback support
Linus Walleij (1):
drm/tve200: Stabilize enable/disable
Luo Jiaxing (1):
scsi: libsas: Set data_dir as DMA_NONE if libata marks qc as NODATA
Madhuparna Bhowmik (1):
drivers/dma/dma-jz4780: Fix race condition between probe and irq handler
Madhusudanarao Amara (1):
usb: typec: intel_pmc_mux: Un-register the USB role switch
Marc Zyngier (1):
KVM: arm64: Do not try to map PUDs when they are folded into PMD
Marek Vasut (1):
spi: stm32: Rate-limit the 'Communication suspended' message
Mark Bloch (1):
RDMA/mlx4: Read pkey table length instead of hardcoded value
Mathias Nyman (1):
usb: Fix out of sync data toggle if a configured device is reconfigured
Matthias Schiffer (1):
ARM: dts: ls1021a: fix QuadSPI-memory reg range
Maxim Kochetkov (1):
iio: adc: ti-ads1015: fix conversion when CONFIG_PM is not set
Maxime Ripard (2):
drm/sun4i: backend: Support alpha property on lowest plane drm/sun4i: backend: Disable alpha on the lowest plane on the A20
Md Haris Iqbal (2):
RDMA/rtrs-srv: Replace device_register with device_initialize and device_add RDMA/rtrs-srv: Set .release function for rtrs srv device during device init
Michał Mirosław (6):
regulator: push allocation in regulator_ena_gpio_request() out of lock
regulator: remove superfluous lock in regulator_resolve_coupling()
regulator: push allocation in regulator_init_coupling() outside of lock
regulator: push allocations in create_regulator() outside of lock
regulator: push allocation in set_consumer_device_supply() out of lock
regulator: plug of_node leak in regulator_register()'s error path
Mike Tipton (1):
interconnect: qcom: Fix small BW votes being truncated to zero
Mohan Kumar (2):
ALSA: hda: Fix 2 channel swapping for Tegra
ALSA: hda/tegra: Program WAKEEN register for Tegra
Naresh Kumar PBS (2):
RDMA/bnxt_re: Static NQ depth allocation RDMA/bnxt_re: Fix driver crash on unaligned PSN entry address
Nicholas Miell (1):
HID: microsoft: Add rumble support for the 8bitdo SN30 Pro+ controller
Nikunj A. Dadhania (1):
thunderbolt: Disable ports that are not implemented
Nirenjan Krishnan (1):
HID: quirks: Set INCREMENT_USAGE_ON_DUPLICATE for all Saitek X52 devices
Ondrej Jirman (1):
drm/sun4i: Fix dsi dcs long write function
Patrick Riphagen (1):
USB: serial: ftdi_sio: add IDs for Xsens Mti USB converter
Peter Oberparleiter (1):
gcov: add support for GCC 10.1
Pierre-Louis Bossart (1):
ALSA: hda: use consistent HDAudio spelling in comments/docs
Po-Hsu Lin (1):
selftests/timers: Turn off timeout setting
Qu Wenruo (1):
btrfs: require only sector size alignment for parent eb bytenr
Rafael J. Wysocki (1):
cpufreq: intel_pstate: Refuse to turn off with HWP enabled
Rander Wang (2):
ALSA: hda: hdmi - add Rocketlake support
ALSA: hda: fix a runtime pm issue in SOF when integrated GPU is disabled
Raul E Rangel (1):
mmc: sdhci-acpi: Clear amd_sdhci_host on reset
René Rebe (1):
scsi: qla2xxx: Fix regression on sparc64
Ritesh Harjani (1):
block: Set same_page to false in __bio_try_merge_page if ret is false
Rob Clark (1):
drm/msm/gpu: make ringbuffer readonly
Rob Herring (1):
arm64: dts: imx: Add missing imx8mm-beacon-kit.dtb to build
Robin Gong (1):
arm64: dts: imx8mp: correct sdma1 clk setting
Rustam Kovhaev (2):
staging: wlan-ng: fix out of bounds read in prism2sta_probe_usb()
KVM: fix memory leak in kvm_io_bus_unregister_dev()
Sagi Grimberg (10):
nvme-fabrics: allow to queue requests for live queues IB/isert: Fix unaligned immediate-data handling
nvme-fabrics: don't check state NVME_CTRL_NEW for request acceptance
nvme: have nvme_wait_freeze_timeout return if it timed out
nvme-tcp: serialize controller teardown sequences
nvme-tcp: fix timeout handler
nvme-tcp: fix reset hang if controller died in the middle of a reset
nvme-rdma: serialize controller teardown sequences
nvme-rdma: fix timeout handler
nvme-rdma: fix reset hang if controller died in the middle of a reset
Sandeep Raghuraman (1):
drm/amdgpu: Fix bug in reporting voltage for CIK
Sean Young (1):
media: gpio-ir-tx: spinlock is not needed to disable interrupts
Selvin Xavier (3):
RDMA/bnxt_re: Do not report transparent vlan from QP1 RDMA/bnxt_re: Fix the qp table indexing
RDMA/bnxt_re: Remove the qp from list only if the qp destroy succeeds
Shay Bar (1):
wireless: fix wrong 160/80+80 MHz setting
Sivaprakash Murugesan (1):
phy: qcom-qmp: Use correct values for ipq8074 PCIe Gen2 PHY init
Stefano Brivio (1):
netfilter: nft_set_rbtree: Detect partial overlap with start endpoint match
Tali Perry (1):
i2c: npcm7xx: Fix timeout calculation
Tetsuo Handa (1):
video: fbdev: fix OOB read in vga_8planes_imageblit()
Tom Rix (1):
soundwire: fix double free of dangling pointer
Tomas Henzl (2):
scsi: megaraid_sas: Don't call disable_irq from process IRQ poll
scsi: mpt3sas: Don't call disable_irq from IRQ poll handler
Tong Zhang (1):
nvme-pci: cancel nvme device request before disabling
Tycho Andersen (1):
seccomp: don't leak memory when filter install races
Utkarsh Patel (2):
usb: typec: intel_pmc_mux: Do not configure Altmode HPD High
usb: typec: intel_pmc_mux: Do not configure SBU and HSL Orientation in Alternate modes
Vadym Kochan (1):
misc: eeprom: at24: register nvmem only after eeprom is ready to use
Vaibhav Agarwal (1):
staging: greybus: audio: fix uninitialized value issue
Varun Prakash (1):
scsi: target: iscsi: Fix data digest calculation
Vineet Gupta (3):
ARC: HSDK: wireup perf irq
ARC: show_regs: fix r12 printing and simplify irqchip/eznps: Fix build error for !ARC700 builds
Vitaly Kuznetsov (1):
KVM: x86: always allow writing '0' to MSR_KVM_ASYNC_PF_EN
Vladis Dronov (1):
debugfs: Fix module state check condition
Wanpeng Li (1):
KVM: VMX: Don't freeze guest when event delivery causes an APIC-access exit
Xi Wang (1):
RDMA/core: Fix unsafe linked list traversal after failing to allocate CQ
Xie He (4):
drivers/net/wan/lapbether: Added needed_tailroom drivers/net/wan/lapbether: Set network_header before transmitting drivers/net/wan/hdlc_cisco: Add hard_header_len drivers/net/wan/hdlc: Change the default of hard_header_len to 0
Ye Bin (1):
scsi: qedf: Fix null ptr reference in qedf_stag_change_work
Yi Li (1):
net: hns3: Fix for geneve tx checksum bug
Yi Zhang (1):
RDMA/rxe: Fix the parent sysfs read when the interface has 15 chars
Yu Kuai (1):
drm/sun4i: add missing put_device() call in sun8i_r40_tcon_tv_set_mux()
Zeng Tao (1):
usb: core: fix slab-out-of-bounds Read in read_descriptors
Ziye Yang (1):
nvmet-tcp: Fix NULL dereference when a connect data comes in h2cdata pdu
Greg Kroah-Hartman
maintainerDocumentation/sound/designs/timestamping.rst +1 -1
@@ -143,7 +143,7 @@ timestamp shows when the information is put together by the driver before returning from the ``STATUS`` and ``STATUS_EXT`` ioctl. in most cases this driver_timestamp will be identical to the regular system tstamp. -Examples of typestamping with HDaudio: +Examples of timestamping with HDAudio: 1. DMA timestamp, no compensation for DMA+analog delay ::
Makefile +1 -5
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 8 -SUBLEVEL = 9 +SUBLEVEL = 10 EXTRAVERSION = NAME = Kleptomaniac Octopus
@@ -876,10 +876,6 @@ KBUILD_CFLAGS_KERNEL += -ffunction-sections -fdata-sections LDFLAGS_vmlinux += --gc-sections endif -ifdef CONFIG_LIVEPATCH -KBUILD_CFLAGS += $(call cc-option, -flive-patching=inline-clone) -endif - ifdef CONFIG_SHADOW_CALL_STACK CC_FLAGS_SCS := -fsanitize=shadow-call-stack KBUILD_CFLAGS += $(CC_FLAGS_SCS)
arch/arc/boot/dts/hsdk.dts +4 -2
@@ -88,6 +88,8 @@ idu_intc: idu-interrupt-controller { arcpct: pct { compatible = "snps,archs-pct"; + interrupt-parent = <&cpu_intc>; + interrupts = <20>; }; /* TIMER0 with interrupt for clockevent */
@@ -208,7 +210,7 @@ gmac: ethernet@8000 { reg = <0x8000 0x2000>; interrupts = <10>; interrupt-names = "macirq"; - phy-mode = "rgmii"; + phy-mode = "rgmii-id"; snps,pbl = <32>; snps,multicast-filter-bins = <256>; clocks = <&gmacclk>;
@@ -226,7 +228,7 @@ mdio { #address-cells = <1>; #size-cells = <0>; compatible = "snps,dwmac-mdio"; - phy0: ethernet-phy@0 { + phy0: ethernet-phy@0 { /* Micrel KSZ9031 */ reg = <0>; }; };
arch/arc/kernel/troubleshoot.c +30 -47
106 lines not on this page · raw message
arch/arc/plat-eznps/include/plat/ctop.h +0 -1
@@ -33,7 +33,6 @@#define CTOP_AUX_DPC (CTOP_AUX_BASE + 0x02C)#define CTOP_AUX_LPC (CTOP_AUX_BASE + 0x030)#define CTOP_AUX_EFLAGS (CTOP_AUX_BASE + 0x080) -#define CTOP_AUX_IACK (CTOP_AUX_BASE + 0x088)#define CTOP_AUX_GPA1 (CTOP_AUX_BASE + 0x08C)#define CTOP_AUX_UDMC (CTOP_AUX_BASE + 0x300)
arch/arm/boot/dts/bcm-hr2.dtsi +1 -1
@@ -217,7 +217,7 @@ rng: rng@33000 { }; qspi: spi@27200 { - compatible = "brcm,spi-bcm-qspi", "brcm,spi-nsp-qspi"; + compatible = "brcm,spi-nsp-qspi", "brcm,spi-bcm-qspi"; reg = <0x027200 0x184>, <0x027000 0x124>, <0x11c408 0x004>,
arch/arm/boot/dts/bcm-nsp.dtsi +1 -1
@@ -284,7 +284,7 @@ nand: nand@26000 { }; qspi: spi@27200 { - compatible = "brcm,spi-bcm-qspi", "brcm,spi-nsp-qspi"; + compatible = "brcm,spi-nsp-qspi", "brcm,spi-bcm-qspi"; reg = <0x027200 0x184>, <0x027000 0x124>, <0x11c408 0x004>,
arch/arm/boot/dts/bcm5301x.dtsi +1 -1
@@ -488,7 +488,7 @@ nand: nand@18028000 { }; spi@18029200 { - compatible = "brcm,spi-bcm-qspi", "brcm,spi-nsp-qspi"; + compatible = "brcm,spi-nsp-qspi", "brcm,spi-bcm-qspi"; reg = <0x18029200 0x184>, <0x18029000 0x124>, <0x1811b408 0x004>,
arch/arm/boot/dts/imx6sx-pinfunc.h +1 -1
@@ -1026,7 +1026,7 @@#define MX6SX_PAD_QSPI1B_DQS__SIM_M_HADDR_15 0x01B0 0x04F8 0x0000 0x7 0x0#define MX6SX_PAD_QSPI1B_SCLK__QSPI1_B_SCLK 0x01B4 0x04FC 0x0000 0x0 0x0#define MX6SX_PAD_QSPI1B_SCLK__UART3_DCE_RX 0x01B4 0x04FC 0x0840 0x1 0x4 -#define MX6SX_PAD_QSPI1B_SCLK__UART3_DTE_TX 0x01B4 0x04FC 0x0000 0x0 0x0 +#define MX6SX_PAD_QSPI1B_SCLK__UART3_DTE_TX 0x01B4 0x04FC 0x0000 0x1 0x0#define MX6SX_PAD_QSPI1B_SCLK__ECSPI3_SCLK 0x01B4 0x04FC 0x0730 0x2 0x1#define MX6SX_PAD_QSPI1B_SCLK__ESAI_RX_HF_CLK 0x01B4 0x04FC 0x0780 0x3 0x2#define MX6SX_PAD_QSPI1B_SCLK__CSI1_DATA_16 0x01B4 0x04FC 0x06DC 0x4 0x1
arch/arm/boot/dts/imx7d-zii-rmu2.dts +1 -1
@@ -58,7 +58,7 @@ &fec1 { <&clks IMX7D_ENET1_TIME_ROOT_CLK>; assigned-clock-parents = <&clks IMX7D_PLL_ENET_MAIN_100M_CLK>; assigned-clock-rates = <0>, <100000000>; - phy-mode = "rgmii"; + phy-mode = "rgmii-id"; phy-handle = <&fec1_phy>; status = "okay";
arch/arm/boot/dts/imx7ulp.dtsi +4 -4
@@ -394,7 +394,7 @@ gpio_ptc: gpio@40ae0000 { clocks = <&pcc2 IMX7ULP_CLK_RGPIO2P1>, <&pcc3 IMX7ULP_CLK_PCTLC>; clock-names = "gpio", "port"; - gpio-ranges = <&iomuxc1 0 0 32>; + gpio-ranges = <&iomuxc1 0 0 20>; }; gpio_ptd: gpio@40af0000 {
@@ -408,7 +408,7 @@ gpio_ptd: gpio@40af0000 { clocks = <&pcc2 IMX7ULP_CLK_RGPIO2P1>, <&pcc3 IMX7ULP_CLK_PCTLD>; clock-names = "gpio", "port"; - gpio-ranges = <&iomuxc1 0 32 32>; + gpio-ranges = <&iomuxc1 0 32 12>; }; gpio_pte: gpio@40b00000 {
@@ -422,7 +422,7 @@ gpio_pte: gpio@40b00000 { clocks = <&pcc2 IMX7ULP_CLK_RGPIO2P1>, <&pcc3 IMX7ULP_CLK_PCTLE>; clock-names = "gpio", "port"; - gpio-ranges = <&iomuxc1 0 64 32>; + gpio-ranges = <&iomuxc1 0 64 16>; }; gpio_ptf: gpio@40b10000 {
@@ -436,7 +436,7 @@ gpio_ptf: gpio@40b10000 { clocks = <&pcc2 IMX7ULP_CLK_RGPIO2P1>, <&pcc3 IMX7ULP_CLK_PCTLF>; clock-names = "gpio", "port"; - gpio-ranges = <&iomuxc1 0 96 32>; + gpio-ranges = <&iomuxc1 0 96 20>; }; };
arch/arm/boot/dts/logicpd-som-lv-baseboard.dtsi +7 -22
@@ -51,6 +51,8 @@ &vaux4 { &mcbsp2 { status = "okay"; + pinctrl-names = "default"; + pinctrl-0 = <&mcbsp2_pins>; }; &charger {
@@ -102,35 +104,18 @@ video_reg: video_reg { regulator-max-microvolt = <3300000>; }; - lcd0: display@0 { - compatible = "panel-dpi"; - label = "28"; - status = "okay"; - /* default-on; */ + lcd0: display { + /* This isn't the exact LCD, but the timings meet spec */ + compatible = "logicpd,type28"; pinctrl-names = "default"; pinctrl-0 = <&lcd_enable_pin>; - enable-gpios = <&gpio5 27 GPIO_ACTIVE_HIGH>; /* gpio155, lcd INI */ + backlight = <&bl>; + enable-gpios = <&gpio5 27 GPIO_ACTIVE_HIGH>; port { lcd_in: endpoint { remote-endpoint = <&dpi_out>; }; }; - - panel-timing { - clock-frequency = <9000000>; - hactive = <480>; - vactive = <272>; - hfront-porch = <3>; - hback-porch = <2>; - hsync-len = <42>; - vback-porch = <3>; - vfront-porch = <2>; - vsync-len = <11>; - hsync-active = <1>; - vsync-active = <1>; - de-active = <1>; - pixelclk-active = <0>; - }; }; bl: backlight {
arch/arm/boot/dts/logicpd-torpedo-baseboard.dtsi +2 -0
@@ -81,6 +81,8 @@ &vaux4 { }; &mcbsp2 { + pinctrl-names = "default"; + pinctrl-0 = <&mcbsp2_pins>; status = "okay"; };
arch/arm/boot/dts/ls1021a.dtsi +1 -1
@@ -181,7 +181,7 @@ qspi: spi@1550000 { #address-cells = <1>; #size-cells = <0>; reg = <0x0 0x1550000 0x0 0x10000>, - <0x0 0x40000000 0x0 0x40000000>; + <0x0 0x40000000 0x0 0x20000000>; reg-names = "QuadSPI", "QuadSPI-memory"; interrupts = <GIC_SPI 131 IRQ_TYPE_LEVEL_HIGH>; clock-names = "qspi_en", "qspi";
arch/arm/boot/dts/omap5.dtsi +11 -9
@@ -463,11 +463,11 @@ rfbi: encoder@0 { }; }; - target-module@5000 { + target-module@4000 { compatible = "ti,sysc-omap2", "ti,sysc"; - reg = <0x5000 0x4>, - <0x5010 0x4>, - <0x5014 0x4>; + reg = <0x4000 0x4>, + <0x4010 0x4>, + <0x4014 0x4>; reg-names = "rev", "sysc", "syss"; ti,sysc-sidle = <SYSC_IDLE_FORCE>, <SYSC_IDLE_NO>,
@@ -479,7 +479,7 @@ SYSC_OMAP2_SOFTRESET | ti,syss-mask = <1>; #address-cells = <1>; #size-cells = <1>; - ranges = <0 0x5000 0x1000>; + ranges = <0 0x4000 0x1000>; dsi1: encoder@0 { compatible = "ti,omap5-dsi";
@@ -489,8 +489,9 @@ dsi1: encoder@0 { reg-names = "proto", "phy", "pll"; interrupts = <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>; status = "disabled"; - clocks = <&dss_clkctrl OMAP5_DSS_CORE_CLKCTRL 8>; - clock-names = "fck"; + clocks = <&dss_clkctrl OMAP5_DSS_CORE_CLKCTRL 8>, + <&dss_clkctrl OMAP5_DSS_CORE_CLKCTRL 10>; + clock-names = "fck", "sys_clk"; }; };
@@ -520,8 +521,9 @@ dsi2: encoder@0 { reg-names = "proto", "phy", "pll"; interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>; status = "disabled"; - clocks = <&dss_clkctrl OMAP5_DSS_CORE_CLKCTRL 8>; - clock-names = "fck"; + clocks = <&dss_clkctrl OMAP5_DSS_CORE_CLKCTRL 8>, + <&dss_clkctrl OMAP5_DSS_CORE_CLKCTRL 10>; + clock-names = "fck", "sys_clk"; }; };
arch/arm/boot/dts/socfpga_arria10.dtsi +1 -1
@@ -819,7 +819,7 @@ timer2: timer2@ffd00000 { timer3: timer3@ffd00100 { compatible = "snps,dw-apb-timer"; interrupts = <0 118 IRQ_TYPE_LEVEL_HIGH>; - reg = <0xffd01000 0x100>; + reg = <0xffd00100 0x100>; clocks = <&l4_sys_free_clk>; clock-names = "timer"; resets = <&rst L4SYSTIMER1_RESET>;
arch/arm/boot/dts/vfxxx.dtsi +1 -1
@@ -495,7 +495,7 @@ edma1: dma-controller@40098000 { }; ocotp: ocotp@400a5000 { - compatible = "fsl,vf610-ocotp"; + compatible = "fsl,vf610-ocotp", "syscon"; reg = <0x400a5000 0x1000>; clocks = <&clks VF610_CLK_OCOTP>; };
arch/arm/mach-omap2/omap-iommu.c +1 -1
@@ -74,7 +74,7 @@ static struct powerdomain *_get_pwrdm(struct device *dev)return pwrdm; clk =of_clk_get (dev->of_node->parent,0 ); -if (!clk) { +if (IS_ERR (clk)) {dev_err (dev,"no fck found\n" );return NULL ; }
arch/arm64/boot/dts/broadcom/northstar2/ns2.dtsi +1 -1
@@ -745,7 +745,7 @@ nand: nand@66460000 { }; qspi: spi@66470200 { - compatible = "brcm,spi-bcm-qspi", "brcm,spi-ns2-qspi"; + compatible = "brcm,spi-ns2-qspi", "brcm,spi-bcm-qspi"; reg = <0x66470200 0x184>, <0x66470000 0x124>, <0x67017408 0x004>,
arch/arm64/boot/dts/freescale/Makefile +1 -0
@@ -28,6 +28,7 @@ dtb-$(CONFIG_ARCH_LAYERSCAPE) += fsl-lx2160a-honeycomb.dtb dtb-$(CONFIG_ARCH_LAYERSCAPE) += fsl-lx2160a-qds.dtb dtb-$(CONFIG_ARCH_LAYERSCAPE) += fsl-lx2160a-rdb.dtb +dtb-$(CONFIG_ARCH_MXC) += imx8mm-beacon-kit.dtb dtb-$(CONFIG_ARCH_MXC) += imx8mm-evk.dtb dtb-$(CONFIG_ARCH_MXC) += imx8mn-evk.dtb dtb-$(CONFIG_ARCH_MXC) += imx8mn-ddr4-evk.dtb
arch/arm64/boot/dts/freescale/imx8mp.dtsi +1 -1
@@ -688,7 +688,7 @@ sdma1: dma-controller@30bd0000 { reg = <0x30bd0000 0x10000>; interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>; clocks = <&clk IMX8MP_CLK_SDMA1_ROOT>, - <&clk IMX8MP_CLK_SDMA1_ROOT>; + <&clk IMX8MP_CLK_AHB>; clock-names = "ipg", "ahb"; #dma-cells = <3>; fsl,sdma-ram-script-name = "imx/sdma/sdma-imx7d.bin";
arch/arm64/boot/dts/freescale/imx8mq.dtsi +1 -1
@@ -420,7 +420,7 @@ gpio5: gpio@30240000 { tmu: tmu@30260000 { compatible = "fsl,imx8mq-tmu"; reg = <0x30260000 0x10000>; - interrupt = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>; clocks = <&clk IMX8MQ_CLK_TMU_ROOT>; little-endian; fsl,tmu-range = <0xb0000 0xa0026 0x80048 0x70061>;
arch/arm64/kernel/module-plts.c +1 -2
@@ -271,8 +271,7 @@ int module_frob_arch_sections(Elf_Ehdr *ehdr, Elf_Shdr *sechdrs, mod->arch.core.plt_shndx = i; else if (!strcmp(secstrings + sechdrs[i].sh_name, ".init.plt")) mod->arch.init.plt_shndx = i; - else if (IS_ENABLED(CONFIG_DYNAMIC_FTRACE) && - !strcmp(secstrings + sechdrs[i].sh_name, + else if (!strcmp(secstrings + sechdrs[i].sh_name, ".text.ftrace_trampoline")) tramp = sechdrs + i; else if (sechdrs[i].sh_type == SHT_SYMTAB)
arch/arm64/kvm/mmu.c +7 -1
@@ -1873,6 +1873,7 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, !fault_supports_stage2_huge_mapping(memslot, hva, vma_pagesize)) { force_pte = true; vma_pagesize =PAGE_SIZE ; + vma_shift =PAGE_SHIFT ; }/*
@@ -1967,7 +1968,12 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, (fault_status ==FSC_PERM &&stage2_is_exec (kvm, fault_ipa, vma_pagesize)); -if (vma_pagesize ==PUD_SIZE ) { +/* +* If PUD_SIZE == PMD_SIZE, there is no real PUD level, and +* all we have is a 2-level page table. Trying to map a PUD in +* this case would be fatally wrong. +*/ +if (PUD_SIZE !=PMD_SIZE && vma_pagesize ==PUD_SIZE ) {pud_t new_pud =kvm_pfn_pud (pfn, mem_type); new_pud =kvm_pud_mkhuge (new_pud);
arch/mips/include/asm/mach-loongson64/cpu-feature-overrides.h +0 -2
@@ -26,7 +26,6 @@#define cpu_has_counter 1#define cpu_has_dc_aliases (PAGE_SIZE < 0x4000)#define cpu_has_divec 0 -#define cpu_has_ejtag 0#define cpu_has_inclusive_pcaches 1#define cpu_has_llsc 1#define cpu_has_mcheck 0
@@ -42,7 +41,6 @@#define cpu_has_veic 0#define cpu_has_vint 0#define cpu_has_vtag_icache 0 -#define cpu_has_watch 1#define cpu_has_wsbh 1#define cpu_has_ic_fills_f_dc 1#define cpu_hwrena_impl_bits 0xc0000000
arch/powerpc/configs/pasemi_defconfig +0 -1
@@ -109,7 +109,6 @@ CONFIG_FB_NVIDIA=y CONFIG_FB_NVIDIA_I2C=y CONFIG_FB_RADEON=y # CONFIG_LCD_CLASS_DEVICE is not set -CONFIG_VGACON_SOFT_SCROLLBACK=y CONFIG_LOGO=y CONFIG_SOUND=y CONFIG_SND=y
arch/powerpc/configs/ppc6xx_defconfig +0 -1
@@ -772,7 +772,6 @@ CONFIG_FB_TRIDENT=m CONFIG_FB_SM501=m CONFIG_FB_IBM_GXT4500=y CONFIG_LCD_PLATFORM=m -CONFIG_VGACON_SOFT_SCROLLBACK=y CONFIG_FRAMEBUFFER_CONSOLE=y CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y CONFIG_LOGO=y
arch/x86/configs/i386_defconfig +0 -1
@@ -202,7 +202,6 @@ CONFIG_FB_MODE_HELPERS=y CONFIG_FB_TILEBLITTING=y CONFIG_FB_EFI=y # CONFIG_LCD_CLASS_DEVICE is not set -CONFIG_VGACON_SOFT_SCROLLBACK=y CONFIG_LOGO=y # CONFIG_LOGO_LINUX_MONO is not set # CONFIG_LOGO_LINUX_VGA16 is not set
arch/x86/configs/x86_64_defconfig +0 -1
@@ -197,7 +197,6 @@ CONFIG_FB_MODE_HELPERS=y CONFIG_FB_TILEBLITTING=y CONFIG_FB_EFI=y # CONFIG_LCD_CLASS_DEVICE is not set -CONFIG_VGACON_SOFT_SCROLLBACK=y CONFIG_LOGO=y # CONFIG_LOGO_LINUX_MONO is not set # CONFIG_LOGO_LINUX_VGA16 is not set
arch/x86/kvm/mmu/mmu.c +1 -1
@@ -2521,7 +2521,7 @@ static struct kvm_mmu_page *kvm_mmu_get_page(struct kvm_vcpu *vcpu, }if (sp->unsync_children) -kvm_make_request (KVM_REQ_TLB_FLUSH_CURRENT , vcpu); +kvm_make_request (KVM_REQ_MMU_SYNC , vcpu);__clear_sp_write_flooding_count (sp);trace_kvm_mmu_get_page (sp, false);
arch/x86/kvm/vmx/nested.c +1 -1
@@ -4620,7 +4620,7 @@ void nested_vmx_pmu_entry_exit_ctls_update(struct kvm_vcpu *vcpu) vmx->nested.msrs.entry_ctls_high &= ~VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL ; vmx->nested.msrs.exit_ctls_high &= - ~VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL ; + ~VM_EXIT_LOAD_IA32_PERF_GLOBAL_CTRL ; } }
arch/x86/kvm/vmx/vmx.c +1 -0
@@ -6028,6 +6028,7 @@ static int vmx_handle_exit(struct kvm_vcpu *vcpu, fastpath_t exit_fastpath) (exit_reason !=EXIT_REASON_EXCEPTION_NMI && exit_reason !=EXIT_REASON_EPT_VIOLATION && exit_reason !=EXIT_REASON_PML_FULL && + exit_reason !=EXIT_REASON_APIC_ACCESS && exit_reason != EXIT_REASON_TASK_SWITCH)) { vcpu->run->exit_reason = KVM_EXIT_INTERNAL_ERROR; vcpu->run->internal.suberror =KVM_INTERNAL_ERROR_DELIVERY_EV ;
arch/x86/kvm/x86.c +1 -1
@@ -2696,7 +2696,7 @@ static int kvm_pv_enable_async_pf(struct kvm_vcpu *vcpu, u64 data)return 1 ;if (!lapic_in_kernel (vcpu)) -return 1 ; +return data ?1 :0 ; vcpu->arch.apf.msr_en_val = data;
block/bio.c +3 -1
@@ -877,8 +877,10 @@ bool __bio_try_merge_page(struct bio *bio, struct page *page,struct bio_vec *bv = &bio->bi_io_vec[bio->bi_vcnt -1 ];if (page_is_mergeable (bv, page, len, off, same_page)) { -if (bio->bi_iter.bi_size >UINT_MAX - len) +if (bio->bi_iter.bi_size >UINT_MAX - len) { + *same_page = false;return false; + } bv->bv_len += len; bio->bi_iter.bi_size += len;return true;
block/partitions/core.c +1 -1
@@ -529,7 +529,7 @@ int bdev_del_partition(struct block_device *bdev, int partno) bdevp =bdget_disk (bdev->bd_disk, partno);if (!bdevp) -return -ENOMEM ; +return -ENXIO ;mutex_lock (&bdevp->bd_mutex);mutex_lock_nested (&bdev->bd_mutex,1 );
drivers/atm/firestream.c +1 -0
@@ -998,6 +998,7 @@ static int fs_open(struct atm_vcc *atm_vcc) error =make_rate (pcr, r, &tmc0,NULL );if (error) {kfree (tc); +kfree (vcc);return error; } }
drivers/block/rbd.c +12 -0
@@ -5120,6 +5120,9 @@ static ssize_t rbd_config_info_show(struct device *dev, {struct rbd_device *rbd_dev =dev_to_rbd_dev (dev); +if (!capable (CAP_SYS_ADMIN )) +return -EPERM ; +return sprintf (buf,"%s\n" , rbd_dev->config_info); }
@@ -5231,6 +5234,9 @@ static ssize_t rbd_image_refresh(struct device *dev,struct rbd_device *rbd_dev =dev_to_rbd_dev (dev);int ret; +if (!capable (CAP_SYS_ADMIN )) +return -EPERM ; + ret =rbd_dev_refresh (rbd_dev);if (ret)return ret;
@@ -7059,6 +7065,9 @@ static ssize_t do_rbd_add(struct bus_type *bus,struct rbd_client *rbdc;int rc; +if (!capable (CAP_SYS_ADMIN )) +return -EPERM ; +if (!try_module_get (THIS_MODULE ))return -ENODEV ;
@@ -7209,6 +7218,9 @@ static ssize_t do_rbd_remove(struct bus_type *bus,bool force = false;int ret; +if (!capable (CAP_SYS_ADMIN )) +return -EPERM ; + dev_id =-1 ; opt_buf[0 ] ='\0' ;sscanf (buf,"%d %5s" , &dev_id, opt_buf);
drivers/cpufreq/intel_pstate.c +10 -4
@@ -762,7 +762,7 @@ static void intel_pstate_get_hwp_max(unsigned int cpu, int *phy_max,rdmsrl_on_cpu (cpu,MSR_HWP_CAPABILITIES , &cap);WRITE_ONCE (all_cpu_data[cpu]->hwp_cap_cached, cap); -if (global.no_turbo) +if (global.no_turbo || global.turbo_disabled) *current_max =HWP_GUARANTEED_PERF (cap);else *current_max =HWP_HIGHEST_PERF (cap);
@@ -2534,9 +2534,15 @@ static int intel_pstate_update_status(const char *buf, size_t size) {int ret; -if (size ==3 && !strncmp (buf,"off" , size)) -return intel_pstate_driver ? -intel_pstate_unregister_driver () : -EINVAL ; +if (size ==3 && !strncmp (buf,"off" , size)) { +if (!intel_pstate_driver) +return -EINVAL ; + +if (hwp_active) +return -EBUSY ; + +return intel_pstate_unregister_driver (); + }if (size ==6 && !strncmp (buf,"active" , size)) {if (intel_pstate_driver) {
drivers/dma/acpi-dma.c +3 -1
@@ -135,11 +135,13 @@ static void acpi_dma_parse_csrt(struct acpi_device *adev, struct acpi_dma *adma)if (ret <0 ) {dev_warn (&adev->dev,"error in parsing resource group\n" ); -return ; +break ; } grp = (struct acpi_csrt_group *)((void *)grp + grp->length); } + +acpi_put_table ((struct acpi_table_header *)csrt); }/**
drivers/dma/dma-jz4780.c +19 -19
@@ -879,24 +879,11 @@ static int jz4780_dma_probe(struct platform_device *pdev)return -EINVAL ; } - ret =platform_get_irq (pdev,0 ); -if (ret <0 ) -return ret; - - jzdma->irq = ret; - - ret =request_irq (jzdma->irq, jz4780_dma_irq_handler,0 ,dev_name (dev), - jzdma); -if (ret) { -dev_err (dev,"failed to request IRQ %u!\n" , jzdma->irq); -return ret; - } - jzdma->clk =devm_clk_get (dev,NULL );if (IS_ERR (jzdma->clk)) {dev_err (dev,"failed to get clock\n" ); ret =PTR_ERR (jzdma->clk); - goto err_free_irq; +return ret; }clk_prepare_enable (jzdma->clk);
@@ -949,10 +936,23 @@ static int jz4780_dma_probe(struct platform_device *pdev) jzchan->vchan.desc_free = jz4780_dma_desc_free; } + ret =platform_get_irq (pdev,0 ); +if (ret <0 ) + goto err_disable_clk; + + jzdma->irq = ret; + + ret =request_irq (jzdma->irq, jz4780_dma_irq_handler,0 ,dev_name (dev), + jzdma); +if (ret) { +dev_err (dev,"failed to request IRQ %u!\n" , jzdma->irq); + goto err_disable_clk; + } + ret =dmaenginem_async_device_register (dd);if (ret) {dev_err (dev,"failed to register device\n" ); - goto err_disable_clk; + goto err_free_irq; }/* Register with OF DMA helpers. */
@@ -960,17 +960,17 @@ static int jz4780_dma_probe(struct platform_device *pdev) jzdma);if (ret) {dev_err (dev,"failed to register OF DMA controller\n" ); - goto err_disable_clk; + goto err_free_irq; }dev_info (dev,"JZ4780 DMA controller initialised\n" );return 0 ; -err_disable_clk: -clk_disable_unprepare (jzdma->clk); - err_free_irq:free_irq (jzdma->irq, jzdma); + +err_disable_clk: +clk_disable_unprepare (jzdma->clk);return ret; }
drivers/firmware/efi/embedded-firmware.c +5 -5
@@ -16,9 +16,9 @@/* Exported for use by lib/test_firmware.c only */ LIST_HEAD (efi_embedded_fw_list); -EXPORT_SYMBOL_GPL (efi_embedded_fw_list); - -static bool checked_for_fw; +EXPORT_SYMBOL_NS_GPL (efi_embedded_fw_list,TEST_FIRMWARE ); +bool efi_embedded_fw_checked; +EXPORT_SYMBOL_NS_GPL (efi_embedded_fw_checked,TEST_FIRMWARE );static const struct dmi_system_id *const embedded_fw_table[] = { #ifdef CONFIG_TOUCHSCREEN_DMI
@@ -119,14 +119,14 @@ void __init efi_check_for_embedded_firmwares(void) } } - checked_for_fw = true; + efi_embedded_fw_checked = true; }int efi_get_embedded_fw (const char *name,const u8 **data,size_t *size) {struct efi_embedded_fw *iter, *fw =NULL ; -if (!checked_for_fw) { +if (!efi_embedded_fw_checked) {pr_warn ("Warning %s called while we did not check for embedded fw\n" , __func__);return -ENOENT ;
drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c +2 -1
@@ -3587,7 +3587,8 @@ static int smu7_read_sensor(struct pp_hwmgr *hwmgr, int idx,case AMDGPU_PP_SENSOR_GPU_POWER :return smu7_get_gpu_power (hwmgr, (uint32_t *)value);case AMDGPU_PP_SENSOR_VDDGFX : -if ((data->vr_config &0xff ) ==0x2 ) +if ((data->vr_config &VRCONF_VDDGFX_MASK ) == + (VR_SVI2_PLANE_2 <<VRCONF_VDDGFX_SHIFT )) val_vid =PHM_READ_INDIRECT_FIELD (hwmgr->device,CGS_IND_REG__SMC ,PWR_SVI2_STATUS ,PLANE2_VID );else
drivers/gpu/drm/msm/adreno/a2xx_gpu.c +5 -0
@@ -164,6 +164,11 @@ static int a2xx_hw_init(struct msm_gpu *gpu)if (ret)return ret; +gpu_write (gpu,REG_AXXX_CP_RB_CNTL , +MSM_GPU_RB_CNTL_DEFAULT |AXXX_CP_RB_CNTL_NO_UPDATE ); + +gpu_write (gpu,REG_AXXX_CP_RB_BASE ,lower_32_bits (gpu->rb[0 ]->iova)); +/* NOTE: PM4/micro-engine firmware registers look to be the same * for a2xx and a3xx.. we could possibly push that part down to * adreno_gpu base class. Or push both PM4 and PFP but
drivers/gpu/drm/msm/adreno/a3xx_gpu.c +10 -0
@@ -211,6 +211,16 @@ static int a3xx_hw_init(struct msm_gpu *gpu)if (ret)return ret; +/* +* Use the default ringbuffer size and block size but disable the RPTR +* shadow +*/ +gpu_write (gpu,REG_AXXX_CP_RB_CNTL , +MSM_GPU_RB_CNTL_DEFAULT |AXXX_CP_RB_CNTL_NO_UPDATE ); + +/* Set the ringbuffer address */ +gpu_write (gpu,REG_AXXX_CP_RB_BASE ,lower_32_bits (gpu->rb[0 ]->iova)); +/* setup access protection: */ gpu_write (gpu,REG_A3XX_CP_PROTECT_CTRL ,0x00000007 );
drivers/gpu/drm/msm/adreno/a4xx_gpu.c +10 -0
@@ -267,6 +267,16 @@ static int a4xx_hw_init(struct msm_gpu *gpu)if (ret)return ret; +/* +* Use the default ringbuffer size and block size but disable the RPTR +* shadow +*/ +gpu_write (gpu,REG_A4XX_CP_RB_CNTL , +MSM_GPU_RB_CNTL_DEFAULT |AXXX_CP_RB_CNTL_NO_UPDATE ); + +/* Set the ringbuffer address */ +gpu_write (gpu,REG_A4XX_CP_RB_BASE ,lower_32_bits (gpu->rb[0 ]->iova)); +/* Load PM4: */ ptr = (uint32_t *)(adreno_gpu->fw[ADRENO_FW_PM4 ]->data); len = adreno_gpu->fw[ADRENO_FW_PM4 ]->size /4 ;
drivers/gpu/drm/msm/adreno/a5xx_gpu.c +11 -3
@@ -702,8 +702,6 @@ static int a5xx_hw_init(struct msm_gpu *gpu)if (ret)return ret; -a5xx_preempt_hw_init (gpu); -if (!adreno_is_a510 (adreno_gpu))a5xx_gpmu_ucode_init (gpu);
@@ -711,6 +709,15 @@ static int a5xx_hw_init(struct msm_gpu *gpu)if (ret)return ret; +/* Set the ringbuffer address */ +gpu_write64 (gpu,REG_A5XX_CP_RB_BASE ,REG_A5XX_CP_RB_BASE_HI , + gpu->rb[0 ]->iova); + +gpu_write (gpu,REG_A5XX_CP_RB_CNTL , +MSM_GPU_RB_CNTL_DEFAULT |AXXX_CP_RB_CNTL_NO_UPDATE ); + +a5xx_preempt_hw_init (gpu); +/* Disable the interrupts through the initial bringup stage */ gpu_write (gpu,REG_A5XX_RBBM_INT_0_MASK ,A5XX_INT_MASK );
@@ -1510,7 +1517,8 @@ struct msm_gpu *a5xx_gpu_init(struct drm_device *dev)check_speed_bin (&pdev->dev); - ret =adreno_gpu_init (dev, pdev, adreno_gpu, &funcs,4 ); +/* Restricting nr_rings to 1 to temporarily disable preemption */ + ret =adreno_gpu_init (dev, pdev, adreno_gpu, &funcs,1 );if (ret) {a5xx_destroy (&(a5xx_gpu->base.base));return ERR_PTR (ret);
drivers/gpu/drm/msm/adreno/a5xx_gpu.h +1 -0
@@ -31,6 +31,7 @@ struct a5xx_gpu {struct msm_ringbuffer *next_ring;struct drm_gem_object *preempt_bo[MSM_GPU_MAX_RINGS ]; +struct drm_gem_object *preempt_counters_bo[MSM_GPU_MAX_RINGS ];struct a5xx_preempt_record *preempt[MSM_GPU_MAX_RINGS ];uint64_t preempt_iova[MSM_GPU_MAX_RINGS ];
drivers/gpu/drm/msm/adreno/a5xx_preempt.c +20 -5
@@ -226,19 +226,31 @@ static int preempt_init_ring(struct a5xx_gpu *a5xx_gpu,struct adreno_gpu *adreno_gpu = &a5xx_gpu->base;struct msm_gpu *gpu = &adreno_gpu->base;struct a5xx_preempt_record *ptr; -struct drm_gem_object *bo =NULL ; -u64 iova =0 ; +void *counters; +struct drm_gem_object *bo =NULL , *counters_bo =NULL ; +u64 iova =0 , counters_iova =0 ; ptr =msm_gem_kernel_new (gpu->dev,A5XX_PREEMPT_RECORD_SIZE +A5XX_PREEMPT_COUNTER_SIZE , -MSM_BO_UNCACHED , gpu->aspace, &bo, &iova); +MSM_BO_UNCACHED |MSM_BO_MAP_PRIV , gpu->aspace, &bo, &iova);if (IS_ERR (ptr))return PTR_ERR (ptr); +/* The buffer to store counters needs to be unprivileged */ + counters =msm_gem_kernel_new (gpu->dev, +A5XX_PREEMPT_COUNTER_SIZE , +MSM_BO_UNCACHED , gpu->aspace, &counters_bo, &counters_iova); +if (IS_ERR (counters)) { +msm_gem_kernel_put (bo, gpu->aspace, true); +return PTR_ERR (counters); + } +msm_gem_object_set_name (bo,"preempt" ); +msm_gem_object_set_name (counters_bo,"preempt_counters" ); a5xx_gpu->preempt_bo[ring->id] = bo; + a5xx_gpu->preempt_counters_bo[ring->id] = counters_bo; a5xx_gpu->preempt_iova[ring->id] = iova; a5xx_gpu->preempt[ring->id] = ptr;
@@ -249,7 +261,7 @@ static int preempt_init_ring(struct a5xx_gpu *a5xx_gpu, ptr->data =0 ; ptr->cntl =MSM_GPU_RB_CNTL_DEFAULT ; ptr->rptr_addr =rbmemptr (ring, rptr); - ptr->counter = iova +A5XX_PREEMPT_RECORD_SIZE ; + ptr->counter = counters_iova;return 0 ; }
@@ -260,8 +272,11 @@ void a5xx_preempt_fini(struct msm_gpu *gpu)struct a5xx_gpu *a5xx_gpu =to_a5xx_gpu (adreno_gpu);int i; -for (i =0 ; i < gpu->nr_rings; i++) +for (i =0 ; i < gpu->nr_rings; i++) {msm_gem_kernel_put (a5xx_gpu->preempt_bo[i], gpu->aspace, true); +msm_gem_kernel_put (a5xx_gpu->preempt_counters_bo[i], + gpu->aspace, true); + } }void a5xx_preempt_init (struct msm_gpu *gpu)
drivers/gpu/drm/msm/adreno/a6xx_gpu.c +7 -0
@@ -557,6 +557,13 @@ static int a6xx_hw_init(struct msm_gpu *gpu)if (ret) goto out; +/* Set the ringbuffer address */ +gpu_write64 (gpu,REG_A6XX_CP_RB_BASE ,REG_A6XX_CP_RB_BASE_HI , + gpu->rb[0 ]->iova); + +gpu_write (gpu,REG_A6XX_CP_RB_CNTL , +MSM_GPU_RB_CNTL_DEFAULT |AXXX_CP_RB_CNTL_NO_UPDATE ); +/* Always come up on rb 0 */ a6xx_gpu->cur_ring = gpu->rb[0 ];
drivers/gpu/drm/msm/adreno/adreno_gpu.c +2 -25
@@ -400,26 +400,6 @@ int adreno_hw_init(struct msm_gpu *gpu) ring->memptrs->rptr =0 ; } -/* -* Setup REG_CP_RB_CNTL. The same value is used across targets (with -* the excpetion of A430 that disables the RPTR shadow) - the cacluation -* for the ringbuffer size and block size is moved to msm_gpu.h for the -* pre-processor to deal with and the A430 variant is ORed in here -*/ -adreno_gpu_write (adreno_gpu,REG_ADRENO_CP_RB_CNTL , -MSM_GPU_RB_CNTL_DEFAULT | - (adreno_is_a430 (adreno_gpu) ?AXXX_CP_RB_CNTL_NO_UPDATE :0 )); - -/* Setup ringbuffer address - use ringbuffer[0] for GPU init */ -adreno_gpu_write64 (adreno_gpu,REG_ADRENO_CP_RB_BASE , -REG_ADRENO_CP_RB_BASE_HI , gpu->rb[0 ]->iova); - -if (!adreno_is_a430 (adreno_gpu)) { -adreno_gpu_write64 (adreno_gpu,REG_ADRENO_CP_RB_RPTR_ADDR , -REG_ADRENO_CP_RB_RPTR_ADDR_HI , -rbmemptr (gpu->rb[0 ], rptr)); - } -return 0 ; }
@@ -427,11 +407,8 @@ int adreno_hw_init(struct msm_gpu *gpu)static uint32_t get_rptr (struct adreno_gpu *adreno_gpu,struct msm_ringbuffer *ring) { -if (adreno_is_a430 (adreno_gpu)) -return ring->memptrs->rptr =adreno_gpu_read ( - adreno_gpu,REG_ADRENO_CP_RB_RPTR ); -else -return ring->memptrs->rptr; +return ring->memptrs->rptr =adreno_gpu_read ( + adreno_gpu,REG_ADRENO_CP_RB_RPTR ); }struct msm_ringbuffer *adreno_active_ring (struct msm_gpu *gpu)
drivers/gpu/drm/msm/msm_ringbuffer.c +2 -1
@@ -27,7 +27,8 @@ struct msm_ringbuffer *msm_ringbuffer_new(struct msm_gpu *gpu, int id, ring->id = id; ring->start =msm_gem_kernel_new (gpu->dev,MSM_GPU_RINGBUFFER_SZ , -MSM_BO_WC , gpu->aspace, &ring->bo, &ring->iova); +MSM_BO_WC |MSM_BO_GPU_READONLY , gpu->aspace, &ring->bo, + &ring->iova);if (IS_ERR (ring->start)) { ret =PTR_ERR (ring->start);
drivers/gpu/drm/sun4i/sun4i_backend.c +1 -3
@@ -589,8 +589,7 @@ static int sun4i_backend_atomic_check(struct sunxi_engine *engine,/* We can't have an alpha plane at the lowest position */ if (!backend->quirks->supports_lowest_plane_alpha && - (plane_states[0 ]->fb->format->has_alpha || - (plane_states[0 ]->alpha !=DRM_BLEND_ALPHA_OPAQUE ))) + (plane_states[0 ]->alpha !=DRM_BLEND_ALPHA_OPAQUE ))return -EINVAL ;for (i =1 ; i < num_planes; i++) {
@@ -995,7 +994,6 @@ static const struct sun4i_backend_quirks sun6i_backend_quirks = {static const struct sun4i_backend_quirks sun7i_backend_quirks = { .needs_output_muxing = true, - .supports_lowest_plane_alpha = true, };static const struct sun4i_backend_quirks sun8i_a33_backend_quirks = {
drivers/gpu/drm/sun4i/sun4i_tcon.c +6 -2
@@ -1433,14 +1433,18 @@ static int sun8i_r40_tcon_tv_set_mux(struct sun4i_tcon *tcon,if (IS_ENABLED (CONFIG_DRM_SUN8I_TCON_TOP ) && encoder->encoder_type ==DRM_MODE_ENCODER_TMDS ) { ret =sun8i_tcon_top_set_hdmi_src (&pdev->dev, id); -if (ret) +if (ret) { +put_device (&pdev->dev);return ret; + } }if (IS_ENABLED (CONFIG_DRM_SUN8I_TCON_TOP )) { ret =sun8i_tcon_top_de_config (&pdev->dev, tcon->id, id); -if (ret) +if (ret) { +put_device (&pdev->dev);return ret; + } }return 0 ;
drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c +2 -2
@@ -889,7 +889,7 @@ static int sun6i_dsi_dcs_write_long(struct sun6i_dsi *dsi,regmap_write (dsi->regs,SUN6I_DSI_CMD_TX_REG (0 ),sun6i_dsi_dcs_build_pkt_hdr (dsi, msg)); - bounce =kzalloc (msg->tx_len +sizeof (crc),GFP_KERNEL ); + bounce =kzalloc (ALIGN (msg->tx_len +sizeof (crc),4 ),GFP_KERNEL );if (!bounce)return -ENOMEM ;
@@ -900,7 +900,7 @@ static int sun6i_dsi_dcs_write_long(struct sun6i_dsi *dsi,memcpy ((u8 *)bounce + msg->tx_len, &crc,sizeof (crc)); len +=sizeof (crc); -regmap_bulk_write (dsi->regs,SUN6I_DSI_CMD_TX_REG (1 ), bounce, len); +regmap_bulk_write (dsi->regs,SUN6I_DSI_CMD_TX_REG (1 ), bounce,DIV_ROUND_UP (len,4 ));regmap_write (dsi->regs,SUN6I_DSI_CMD_CTL_REG , len +4 -1 );kfree (bounce);
drivers/gpu/drm/sun4i/sun8i_vi_layer.c +1 -1
@@ -211,7 +211,7 @@ static int sun8i_vi_layer_update_coord(struct sun8i_mixer *mixer, int channel,return 0 ; } -static bool sun8i_vi_layer_get_csc_mode (const struct drm_format_info *format) +static u32 sun8i_vi_layer_get_csc_mode (const struct drm_format_info *format) {if (!format->is_yuv)return SUN8I_CSC_MODE_OFF ;
drivers/gpu/drm/tve200/tve200_display.c +21 -1
@@ -14,6 +14,7 @@#include <linux/version.h> #include <linux/dma-buf.h> #include <linux/of_graph.h> +#include <linux/delay.h> #include <drm/drm_fb_cma_helper.h> #include <drm/drm_fourcc.h>
@@ -130,9 +131,25 @@ static void tve200_display_enable(struct drm_simple_display_pipe *pipe,struct drm_connector *connector = priv->connector;u32 format = fb->format->format;u32 ctrl1 =0 ; +int retries;clk_prepare_enable (priv->clk); +/* Reset the TVE200 and wait for it to come back online */ +writel (TVE200_CTRL_4_RESET , priv->regs +TVE200_CTRL_4 ); +for (retries =0 ; retries <5 ; retries++) { +usleep_range (30000 ,50000 ); +if (readl (priv->regs +TVE200_CTRL_4 ) &TVE200_CTRL_4_RESET ) +continue ; +else +break ; + } +if (retries ==5 && +readl (priv->regs +TVE200_CTRL_4 ) &TVE200_CTRL_4_RESET ) { +dev_err (drm->dev,"can't get hardware out of reset\n" ); +return ; + } +/* Function 1 */ ctrl1 |=TVE200_CTRL_CSMODE ;/* Interlace mode for CCIR656: parameterize? */
@@ -230,8 +247,9 @@ static void tve200_display_disable(struct drm_simple_display_pipe *pipe)drm_crtc_vblank_off (crtc); -/* Disable and Power Down */ +/* Disable put into reset and Power Down */ writel (0 , priv->regs +TVE200_CTRL ); +writel (TVE200_CTRL_4_RESET , priv->regs +TVE200_CTRL_4 );clk_disable_unprepare (priv->clk); }
@@ -279,6 +297,8 @@ static int tve200_display_enable_vblank(struct drm_simple_display_pipe *pipe)struct drm_device *drm = crtc->dev;struct tve200_drm_dev_private *priv = drm->dev_private; +/* Clear any IRQs and enable */ +writel (0xFF , priv->regs +TVE200_INT_CLR );writel (TVE200_INT_V_STATUS , priv->regs +TVE200_INT_EN );return 0 ; }
drivers/gpu/drm/virtio/virtgpu_display.c +11 -0
@@ -123,6 +123,17 @@ static int virtio_gpu_crtc_atomic_check(struct drm_crtc *crtc,static void virtio_gpu_crtc_atomic_flush (struct drm_crtc *crtc,struct drm_crtc_state *old_state) { +struct virtio_gpu_output *output =drm_crtc_to_virtio_gpu_output (crtc); + +/* +* virtio-gpu can't do modeset and plane update operations +* independent from each other. So the actual modeset happens +* in the plane update callback, and here we just check +* whenever we must force the modeset. +*/ +if (drm_atomic_crtc_needs_modeset (crtc->state)) { + output->needs_modeset = true; + } }static const struct drm_crtc_helper_funcs virtio_gpu_crtc_helper_funcs = {
drivers/gpu/drm/virtio/virtgpu_drv.h +1 -0
@@ -138,6 +138,7 @@ struct virtio_gpu_output {int cur_x;int cur_y;bool enabled; +bool needs_modeset; };#define drm_crtc_to_virtio_gpu_output (x) \ container_of(x, struct virtio_gpu_output, crtc)
drivers/gpu/drm/virtio/virtgpu_plane.c +3 -1
@@ -163,7 +163,9 @@ static void virtio_gpu_primary_plane_update(struct drm_plane *plane, plane->state->src_w != old_state->src_w || plane->state->src_h != old_state->src_h || plane->state->src_x != old_state->src_x || - plane->state->src_y != old_state->src_y) { + plane->state->src_y != old_state->src_y || + output->needs_modeset) { + output->needs_modeset = false; DRM_DEBUG("handle 0x%x, crtc %dx%d+%d+%d, src %dx%d+%d+%d\n", bo->hw_res_handle, plane->state->crtc_w, plane->state->crtc_h,
drivers/hid/hid-elan.c +2 -0
@@ -188,6 +188,7 @@ static int elan_input_configured(struct hid_device *hdev, struct hid_input *hi) ret =input_mt_init_slots (input,ELAN_MAX_FINGERS ,INPUT_MT_POINTER );if (ret) {hid_err (hdev,"Failed to init elan MT slots: %d\n" , ret); +input_free_device (input);return ret; }
@@ -198,6 +199,7 @@ static int elan_input_configured(struct hid_device *hdev, struct hid_input *hi)if (ret) {hid_err (hdev,"Failed to register elan input device: %d\n" , ret); +input_mt_destroy_slots (input);input_free_device (input);return ret; }
drivers/hid/hid-ids.h +3 -0
@@ -849,6 +849,7 @@#define USB_DEVICE_ID_MS_POWER_COVER 0x07da#define USB_DEVICE_ID_MS_XBOX_ONE_S_CONTROLLER 0x02fd#define USB_DEVICE_ID_MS_PIXART_MOUSE 0x00cb +#define USB_DEVICE_ID_8BITDO_SN30_PRO_PLUS 0x02e0#define USB_VENDOR_ID_MOJO 0x8282#define USB_DEVICE_ID_RETRO_ADAPTER 0x3201
@@ -1014,6 +1015,8 @@#define USB_DEVICE_ID_SAITEK_RAT9 0x0cfa#define USB_DEVICE_ID_SAITEK_MMO7 0x0cd0#define USB_DEVICE_ID_SAITEK_X52 0x075c +#define USB_DEVICE_ID_SAITEK_X52_2 0x0255 +#define USB_DEVICE_ID_SAITEK_X52_PRO 0x0762#define USB_VENDOR_ID_SAMSUNG 0x0419#define USB_DEVICE_ID_SAMSUNG_IR_REMOTE 0x0001
drivers/hid/hid-microsoft.c +2 -0
@@ -451,6 +451,8 @@ static const struct hid_device_id ms_devices[] = { .driver_data = MS_SURFACE_DIAL }, { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_XBOX_ONE_S_CONTROLLER), .driver_data = MS_QUIRK_FF }, + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_8BITDO_SN30_PRO_PLUS), + .driver_data = MS_QUIRK_FF }, { } };MODULE_DEVICE_TABLE (hid, ms_devices);
drivers/hid/hid-quirks.c +2 -0
@@ -150,6 +150,8 @@ static const struct hid_device_id hid_quirks[] = { { HID_USB_DEVICE(USB_VENDOR_ID_RETROUSB, USB_DEVICE_ID_RETROUSB_SNES_RETROPORT), HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE }, { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_RUMBLEPAD), HID_QUIRK_BADPAD }, { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_X52), HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE }, + { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_X52_2), HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE }, + { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_X52_PRO), HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE }, { HID_USB_DEVICE(USB_VENDOR_ID_SEMICO, USB_DEVICE_ID_SEMICO_USB_KEYKOARD2), HID_QUIRK_NO_INIT_REPORTS }, { HID_USB_DEVICE(USB_VENDOR_ID_SEMICO, USB_DEVICE_ID_SEMICO_USB_KEYKOARD), HID_QUIRK_NO_INIT_REPORTS }, { HID_USB_DEVICE(USB_VENDOR_ID_SENNHEISER, USB_DEVICE_ID_SENNHEISER_BTD500USB), HID_QUIRK_NOGET },
drivers/i2c/busses/i2c-npcm7xx.c +6 -2
@@ -2093,8 +2093,12 @@ static int npcm_i2c_master_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, } } -/* Adaptive TimeOut: astimated time in usec + 100% margin */ - timeout_usec = (2 *10000 / bus->bus_freq) * (2 + nread + nwrite); +/* +* Adaptive TimeOut: estimated time in usec + 100% margin: +* 2: double the timeout for clock stretching case +* 9: bits per transaction (including the ack/nack) +*/ + timeout_usec = (2 *9 *USEC_PER_SEC / bus->bus_freq) * (2 + nread + nwrite); timeout =max (msecs_to_jiffies (35 ),usecs_to_jiffies (timeout_usec));if (nwrite >=32 *1024 || nread >=32 *1024 ) {dev_err (bus->dev,"i2c%d buffer too big\n" , bus->num);
drivers/iio/accel/bmc150-accel-core.c +12 -3
@@ -189,6 +189,14 @@ struct bmc150_accel_data {struct mutex mutex;u8 fifo_mode, watermark;s16 buffer[8 ]; +/* +* Ensure there is sufficient space and correct alignment for +* the timestamp if enabled +*/ +struct { +__le16 channels[3 ]; +s64 ts__aligned(8) ; + } scan;u8 bw_bits;u32 slope_dur;u32 slope_thres;
@@ -922,15 +930,16 @@ static int __bmc150_accel_fifo_flush(struct iio_dev *indio_dev,* now. */ for (i =0 ; i < count; i++) { -u16 sample[8 ];int j, bit; j =0 ;for_each_set_bit (bit, indio_dev->active_scan_mask, indio_dev->masklength) -memcpy (&sample[j++], &buffer[i *3 + bit],2 ); +memcpy (&data->scan.channels[j++], &buffer[i *3 + bit], +sizeof (data->scan.channels[0 ])); -iio_push_to_buffers_with_timestamp (indio_dev, sample, tstamp); +iio_push_to_buffers_with_timestamp (indio_dev, &data->scan, + tstamp); tstamp += sample_period; }
drivers/iio/accel/kxsd9.c +11 -5
@@ -209,14 +209,20 @@ static irqreturn_t kxsd9_trigger_handler(int irq, void *p)const struct iio_poll_func *pf = p;struct iio_dev *indio_dev = pf->indio_dev;struct kxsd9_state *st =iio_priv (indio_dev); +/* +* Ensure correct positioning and alignment of timestamp. +* No need to zero initialize as all elements written. +*/ +struct { +__be16 chan[4 ]; +s64 ts__aligned(8) ; + } hw_values;int ret; -/* 4 * 16bit values AND timestamp */ -__be16 hw_values[8 ]; ret =regmap_bulk_read (st->map,KXSD9_REG_X , - &hw_values, -8 ); + hw_values.chan, +sizeof (hw_values.chan));if (ret) {dev_err (st->dev,"error reading data\n" );
@@ -224,7 +230,7 @@ static irqreturn_t kxsd9_trigger_handler(int irq, void *p) }iio_push_to_buffers_with_timestamp (indio_dev, - hw_values, + &hw_values,iio_get_time_ns (indio_dev));iio_trigger_notify_done (indio_dev->trig);
drivers/iio/accel/mma7455_core.c +12 -4
@@ -52,6 +52,14 @@struct mma7455_data {struct regmap *regmap; +/* +* Used to reorganize data. Will ensure correct alignment of +* the timestamp if present +*/ +struct { +__le16 channels[3 ]; +s64 ts__aligned(8) ; + } scan; };static int mma7455_drdy (struct mma7455_data *mma7455)
@@ -82,19 +90,19 @@ static irqreturn_t mma7455_trigger_handler(int irq, void *p)struct iio_poll_func *pf = p;struct iio_dev *indio_dev = pf->indio_dev;struct mma7455_data *mma7455 =iio_priv (indio_dev); -u8 buf[16 ];/* 3 x 16-bit channels + padding + ts */ int ret; ret =mma7455_drdy (mma7455);if (ret) goto done; - ret =regmap_bulk_read (mma7455->regmap,MMA7455_REG_XOUTL , buf, -sizeof (__le16) *3 ); + ret =regmap_bulk_read (mma7455->regmap,MMA7455_REG_XOUTL , + mma7455->scan.channels, +sizeof (mma7455->scan.channels));if (ret) goto done; -iio_push_to_buffers_with_timestamp (indio_dev, buf, +iio_push_to_buffers_with_timestamp (indio_dev, &mma7455->scan,iio_get_time_ns (indio_dev)); done:
drivers/iio/accel/mma8452.c +8 -3
@@ -110,6 +110,12 @@ struct mma8452_data {int sleep_val;struct regulator *vdd_reg;struct regulator *vddio_reg; + +/* Ensure correct alignment of time stamp when present */ +struct { +__be16 channels[3 ]; +s64 ts__aligned(8) ; + } buffer; };/**
@@ -1091,14 +1097,13 @@ static irqreturn_t mma8452_trigger_handler(int irq, void *p)struct iio_poll_func *pf = p;struct iio_dev *indio_dev = pf->indio_dev;struct mma8452_data *data =iio_priv (indio_dev); -u8 buffer[16 ];/* 3 16-bit channels + padding + ts */ int ret; - ret =mma8452_read (data, (__be16 *)buffer); + ret =mma8452_read (data, data->buffer.channels);if (ret <0 ) goto done; -iio_push_to_buffers_with_timestamp (indio_dev, buffer, +iio_push_to_buffers_with_timestamp (indio_dev, &data->buffer,iio_get_time_ns (indio_dev)); done:
drivers/iio/adc/ina2xx-adc.c +7 -4
@@ -146,6 +146,11 @@ struct ina2xx_chip_info {int range_vbus;/* Bus voltage maximum in V */ int pga_gain_vshunt;/* Shunt voltage PGA gain */ bool allow_async_readout; +/* data buffer needs space for channel data and timestamp */ +struct { +u16 chan[4 ]; +u64 ts__aligned(8) ; + } scan; };static const struct ina2xx_config ina2xx_config[] = {
@@ -738,8 +743,6 @@ static int ina2xx_conversion_ready(struct iio_dev *indio_dev)static int ina2xx_work_buffer (struct iio_dev *indio_dev) {struct ina2xx_chip_info *chip =iio_priv (indio_dev); -/* data buffer needs space for channel data and timestap */ -unsigned short data[4 +sizeof (s64)/sizeof (short )];int bit, ret, i =0 ;s64 time;
@@ -758,10 +761,10 @@ static int ina2xx_work_buffer(struct iio_dev *indio_dev)if (ret <0 )return ret; - data[i++] = val; + chip->scan.chan[i++] = val; } -iio_push_to_buffers_with_timestamp (indio_dev, data, time); +iio_push_to_buffers_with_timestamp (indio_dev, &chip->scan, time);return 0 ; };
drivers/iio/adc/max1118.c +7 -3
@@ -35,6 +35,11 @@ struct max1118 {struct spi_device *spi;struct mutex lock;struct regulator *reg; +/* Ensure natural alignment of buffer elements */ +struct { +u8 channels[2 ]; +s64 ts__aligned(8) ; + } scan;u8 data____cacheline_aligned ; };
@@ -165,7 +170,6 @@ static irqreturn_t max1118_trigger_handler(int irq, void *p)struct iio_poll_func *pf = p;struct iio_dev *indio_dev = pf->indio_dev;struct max1118 *adc =iio_priv (indio_dev); -u8 data[16 ] = { };/* 2x 8-bit ADC data + padding + 8 bytes timestamp */ int scan_index;int i =0 ;
@@ -183,10 +187,10 @@ static irqreturn_t max1118_trigger_handler(int irq, void *p) goto out; } - data[i] = ret; + adc->scan.channels[i] = ret; i++; } -iio_push_to_buffers_with_timestamp (indio_dev, data, +iio_push_to_buffers_with_timestamp (indio_dev, &adc->scan,iio_get_time_ns (indio_dev)); out:mutex_unlock (&adc->lock);
drivers/iio/adc/mcp3422.c +10 -6
@@ -96,16 +96,12 @@ static int mcp3422_update_config(struct mcp3422 *adc, u8 newconfig) {int ret; -mutex_lock (&adc->lock); - ret =i2c_master_send (adc->i2c, &newconfig,1 );if (ret >0 ) { adc->config = newconfig; ret =0 ; } -mutex_unlock (&adc->lock); -return ret; }
@@ -138,6 +134,8 @@ static int mcp3422_read_channel(struct mcp3422 *adc,u8 config;u8 req_channel = channel->channel; +mutex_lock (&adc->lock); +if (req_channel !=MCP3422_CHANNEL (adc->config)) { config = adc->config; config &= ~MCP3422_CHANNEL_MASK ;
@@ -145,12 +143,18 @@ static int mcp3422_read_channel(struct mcp3422 *adc, config &= ~MCP3422_PGA_MASK ; config |=MCP3422_PGA_VALUE (adc->pga[req_channel]); ret =mcp3422_update_config (adc, config); -if (ret <0 ) +if (ret <0 ) { +mutex_unlock (&adc->lock);return ret; + }msleep (mcp3422_read_times[MCP3422_SAMPLE_RATE (adc->config)]); } -return mcp3422_read (adc, value, &config); + ret =mcp3422_read (adc, value, &config); + +mutex_unlock (&adc->lock); + +return ret; } static int mcp3422_read_raw(struct iio_dev *iio,
drivers/iio/adc/ti-adc081c.c +8 -3
@@ -33,6 +33,12 @@ struct adc081c {/* 8, 10 or 12 */ int bits; + +/* Ensure natural alignment of buffer elements */ +struct { +u16 channel; +s64 ts__aligned(8) ; + } scan; };#define REG_CONV_RES 0x00
@@ -128,14 +134,13 @@ static irqreturn_t adc081c_trigger_handler(int irq, void *p)struct iio_poll_func *pf = p;struct iio_dev *indio_dev = pf->indio_dev;struct adc081c *data =iio_priv (indio_dev); -u16 buf[8 ];/* 2 bytes data + 6 bytes padding + 8 bytes timestamp */ int ret; ret =i2c_smbus_read_word_swapped (data->i2c,REG_CONV_RES );if (ret <0 ) goto out; - buf[0 ] = ret; -iio_push_to_buffers_with_timestamp (indio_dev, buf, + data->scan.channel = ret; +iio_push_to_buffers_with_timestamp (indio_dev, &data->scan,iio_get_time_ns (indio_dev)); out:iio_trigger_notify_done (indio_dev->trig);
drivers/iio/adc/ti-adc084s021.c +7 -3
@@ -25,6 +25,11 @@ struct adc084s021 {struct spi_transfer spi_trans;struct regulator *reg;struct mutex lock; +/* Buffer used to align data */ +struct { +__be16 channels[4 ]; +s64 ts__aligned(8) ; + } scan;/* * DMA (thus cache coherency maintenance) requires the * transfer buffers to live in their own cache line.
@@ -140,14 +145,13 @@ static irqreturn_t adc084s021_buffer_trigger_handler(int irq, void *pollfunc)struct iio_poll_func *pf = pollfunc;struct iio_dev *indio_dev = pf->indio_dev;struct adc084s021 *adc =iio_priv (indio_dev); -__be16 data[8 ] = {0 };/* 4 * 16-bit words of data + 8 bytes timestamp */ mutex_lock (&adc->lock); -if (adc084s021_adc_conversion (adc, &data) <0 ) +if (adc084s021_adc_conversion (adc, adc->scan.channels) <0 )dev_err (&adc->spi->dev,"Failed to read data\n" ); -iio_push_to_buffers_with_timestamp (indio_dev, data, +iio_push_to_buffers_with_timestamp (indio_dev, &adc->scan,iio_get_time_ns (indio_dev));mutex_unlock (&adc->lock);iio_trigger_notify_done (indio_dev->trig);
drivers/iio/adc/ti-ads1015.c +10 -0
@@ -316,6 +316,7 @@ static const struct iio_chan_spec ads1115_channels[] = { IIO_CHAN_SOFT_TIMESTAMP(ADS1015_TIMESTAMP), }; +#ifdef CONFIG_PM static int ads1015_set_power_state (struct ads1015_data *data,bool on) {int ret;
@@ -333,6 +334,15 @@ static int ads1015_set_power_state(struct ads1015_data *data, bool on) return ret < 0 ? ret : 0; } +#else /* !CONFIG_PM */ + +static int ads1015_set_power_state (struct ads1015_data *data,bool on) +{ +return 0 ; +} + +#endif /* !CONFIG_PM */ +static int ads1015_get_adc_result (struct ads1015_data *data,int chan,int *val) {
drivers/iio/chemical/ccs811.c +9 -4
@@ -78,6 +78,11 @@ struct ccs811_data {struct iio_trigger *drdy_trig;struct gpio_desc *wakeup_gpio;bool drdy_trig_on; +/* Ensures correct alignment of timestamp if present */ +struct { +s16 channels[2 ]; +s64 ts__aligned(8) ; + } scan; };static const struct iio_chan_spec ccs811_channels[] = {
@@ -327,17 +332,17 @@ static irqreturn_t ccs811_trigger_handler(int irq, void *p)struct iio_dev *indio_dev = pf->indio_dev;struct ccs811_data *data =iio_priv (indio_dev);struct i2c_client *client = data->client; -s16 buf[8 ];/* s16 eCO2 + s16 TVOC + padding + 8 byte timestamp */ int ret; - ret =i2c_smbus_read_i2c_block_data (client,CCS811_ALG_RESULT_DATA ,4 , - (u8 *)&buf); + ret =i2c_smbus_read_i2c_block_data (client,CCS811_ALG_RESULT_DATA , +sizeof (data->scan.channels), + (u8 *)data->scan.channels);if (ret !=4 ) {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:
drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c +4 -1
@@ -72,10 +72,13 @@ static void get_default_min_max_freq(enum motionsensor_type type,switch (type) {case MOTIONSENSE_TYPE_ACCEL : -case MOTIONSENSE_TYPE_GYRO : *min_freq =12500 ; *max_freq =100000 ;break ; +case MOTIONSENSE_TYPE_GYRO : + *min_freq =25000 ; + *max_freq =100000 ; +break ;case MOTIONSENSE_TYPE_MAG : *min_freq =5000 ; *max_freq =25000 ;
drivers/iio/light/ltr501.c +9 -6
@@ -1243,13 +1243,16 @@ static irqreturn_t ltr501_trigger_handler(int irq, void *p)struct iio_poll_func *pf = p;struct iio_dev *indio_dev = pf->indio_dev;struct ltr501_data *data =iio_priv (indio_dev); -u16 buf[8 ]; +struct { +u16 channels[3 ]; +s64 ts__aligned(8) ; + } scan;__le16 als_buf[2 ];u8 mask =0 ;int j =0 ;int ret, psdata; -memset (buf,0 ,sizeof (buf)); +memset (&scan,0 ,sizeof (scan));/* figure out which data needs to be ready */ if (test_bit(0, indio_dev->active_scan_mask) ||
@@ -1268,9 +1271,9 @@ static irqreturn_t ltr501_trigger_handler(int irq, void *p)if (ret <0 )return ret;if (test_bit (0 , indio_dev->active_scan_mask)) - buf[j++] =le16_to_cpu (als_buf[1 ]); + scan.channels[j++] =le16_to_cpu (als_buf[1 ]);if (test_bit (1 , indio_dev->active_scan_mask)) - buf[j++] =le16_to_cpu (als_buf[0 ]); + scan.channels[j++] =le16_to_cpu (als_buf[0 ]); }if (mask <R501_STATUS_PS_RDY ) {
@@ -1278,10 +1281,10 @@ static irqreturn_t ltr501_trigger_handler(int irq, void *p) &psdata, 2);if (ret <0 ) goto done; - buf[j++] = psdata <R501_PS_DATA_MASK ; + scan.channels[j++] = psdata <R501_PS_DATA_MASK ; } -iio_push_to_buffers_with_timestamp (indio_dev, buf, +iio_push_to_buffers_with_timestamp (indio_dev, &scan,iio_get_time_ns (indio_dev)); done:
drivers/iio/light/max44000.c +8 -4
@@ -75,6 +75,11 @@struct max44000_data {struct mutex lock;struct regmap *regmap; +/* Ensure naturally aligned timestamp */ +struct { +u16 channels[2 ]; +s64 ts__aligned(8) ; + } scan; };/* Default scale is set to the minimum of 0.03125 or 1 / (1 << 5) lux */
@@ -488,7 +493,6 @@ static irqreturn_t max44000_trigger_handler(int irq, void *p)struct iio_poll_func *pf = p;struct iio_dev *indio_dev = pf->indio_dev;struct max44000_data *data =iio_priv (indio_dev); -u16 buf[8 ];/* 2x u16 + padding + 8 bytes timestamp */ int index =0 ;unsigned int regval;int ret;
@@ -498,17 +502,17 @@ static irqreturn_t max44000_trigger_handler(int irq, void *p) ret =max44000_read_alsval (data);if (ret <0 ) goto out_unlock; - buf[index++] = ret; + data->scan.channels[index++] = ret; }if (test_bit (MAX44000_SCAN_INDEX_PRX , indio_dev->active_scan_mask)) { ret =regmap_read (data->regmap,MAX44000_REG_PRX_DATA , ®val);if (ret <0 ) goto out_unlock; - buf[index] = regval; + data->scan.channels[index] = regval; }mutex_unlock (&data->lock); -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));iio_trigger_notify_done (indio_dev->trig);return IRQ_HANDLED ;
drivers/iio/magnetometer/ak8975.c +11 -5
@@ -365,6 +365,12 @@ struct ak8975_data {struct iio_mount_matrix orientation;struct regulator *vdd;struct regulator *vid; + +/* Ensure natural alignment of timestamp */ +struct { +s16 channels[3 ]; +s64 ts__aligned(8) ; + } scan; };/* Enable attached power regulator if any. */
@@ -787,7 +793,6 @@ static void ak8975_fill_buffer(struct iio_dev *indio_dev)const struct i2c_client *client = data->client;const struct ak_def *def = data->def;int ret; -s16 buff[8 ];/* 3 x 16 bits axis values + 1 aligned 64 bits timestamp */ __le16 fval[3 ];mutex_lock (&data->lock);
@@ -810,12 +815,13 @@ static void ak8975_fill_buffer(struct iio_dev *indio_dev)mutex_unlock (&data->lock);/* Clamp to valid range. */ - buff[0 ] =clamp_t (s16,le16_to_cpu (fval[0 ]), -def->range, def->range); - buff[1 ] =clamp_t (s16,le16_to_cpu (fval[1 ]), -def->range, def->range); - buff[2 ] =clamp_t (s16,le16_to_cpu (fval[2 ]), -def->range, def->range); + data->scan.channels[0 ] =clamp_t (s16,le16_to_cpu (fval[0 ]), -def->range, def->range); + data->scan.channels[1 ] =clamp_t (s16,le16_to_cpu (fval[1 ]), -def->range, def->range); + data->scan.channels[2 ] =clamp_t (s16,le16_to_cpu (fval[2 ]), -def->range, def->range); -iio_push_to_buffers_with_timestamp (indio_dev, buff, +iio_push_to_buffers_with_timestamp (indio_dev, &data->scan,iio_get_time_ns (indio_dev)); +return ; unlock:
drivers/iio/proximity/mb1232.c +9 -8
@@ -40,6 +40,11 @@ struct mb1232_data {*/ struct completion ranging;int irqnr; +/* Ensure correct alignment of data to push to IIO buffer */ +struct { +s16 distance; +s64 ts__aligned(8) ; + } scan; };static irqreturn_t mb1232_handle_irq (int irq,void *dev_id)
@@ -113,17 +118,13 @@ static irqreturn_t mb1232_trigger_handler(int irq, void *p)struct iio_poll_func *pf = p;struct iio_dev *indio_dev = pf->indio_dev;struct mb1232_data *data =iio_priv (indio_dev); -/* -* triggered buffer -* 16-bit channel + 48-bit padding + 64-bit timestamp -*/ -s16 buffer[8 ] = {0 }; - buffer[0 ] =mb1232_read_distance (data); -if (buffer[0 ] <0 ) + data->scan.distance =mb1232_read_distance (data); +if (data->scan.distance <0 ) goto err; -iio_push_to_buffers_with_timestamp (indio_dev, buffer, pf->timestamp); +iio_push_to_buffers_with_timestamp (indio_dev, &data->scan, + pf->timestamp); err:iio_trigger_notify_done (indio_dev->trig);
drivers/infiniband/core/cq.c +2 -2
@@ -379,7 +379,7 @@ static int ib_alloc_cqs(struct ib_device *dev, unsigned int nr_cqes, {LIST_HEAD (tmp_list);unsigned int nr_cqs, i; -struct ib_cq *cq; +struct ib_cq *cq, *n;int ret;if (poll_ctx >IB_POLL_LAST_POOL_TYPE ) {
@@ -412,7 +412,7 @@ static int ib_alloc_cqs(struct ib_device *dev, unsigned int nr_cqes,return 0 ; out_free_cqs: -list_for_each_entry (cq, &tmp_list, pool_entry) { +list_for_each_entry_safe (cq, n, &tmp_list, pool_entry) { cq->shared = false;ib_free_cq (cq); }
drivers/infiniband/core/verbs.c +1 -1
@@ -1803,7 +1803,7 @@ int ib_get_eth_speed(struct ib_device *dev, u8 port_num, u8 *speed, u8 *width)dev_put (netdev); -if (!rc) { +if (!rc && lksettings.base.speed != (u32 )SPEED_UNKNOWN ) { netdev_speed = lksettings.base.speed; }else { netdev_speed =SPEED_1000 ;
drivers/infiniband/hw/bnxt_re/ib_verbs.c +29 -14
79 lines not on this page · raw message
drivers/infiniband/hw/bnxt_re/main.c +1 -2
@@ -1027,8 +1027,7 @@ static int bnxt_re_alloc_res(struct bnxt_re_dev *rdev)struct bnxt_qplib_nq *nq; nq = &rdev->nq[i]; - nq->hwq.max_elements = (qplib_ctx->cq_count + - qplib_ctx->srqc_count +2 ); + nq->hwq.max_elements =BNXT_QPLIB_NQE_MAX_CNT ; rc =bnxt_qplib_alloc_nq (&rdev->qplib_res, &rdev->nq[i]);if (rc) { ibdev_err(&rdev->ibdev, "Alloc Failed NQ%d rc:%#x",
drivers/infiniband/hw/bnxt_re/qplib_fp.c +16 -10
@@ -796,6 +796,7 @@ int bnxt_qplib_create_qp1(struct bnxt_qplib_res *res, struct bnxt_qplib_qp *qp)u16 cmd_flags =0 ;u32 qp_flags =0 ;u8 pg_sz_lvl; +u32 tbl_indx;int rc;RCFW_CMD_PREP (req,CREATE_QP1 , cmd_flags);
@@ -891,8 +892,9 @@ int bnxt_qplib_create_qp1(struct bnxt_qplib_res *res, struct bnxt_qplib_qp *qp) rq->dbinfo.xid = qp->id; rq->dbinfo.db = qp->dpi->dbr; } - rcfw->qp_tbl[qp->id].qp_id = qp->id; - rcfw->qp_tbl[qp->id].qp_handle = (void *)qp; + tbl_indx =map_qp_id_to_tbl_indx (qp->id, rcfw); + rcfw->qp_tbl[tbl_indx].qp_id = qp->id; + rcfw->qp_tbl[tbl_indx].qp_handle = (void *)qp;return 0 ;
@@ -920,10 +922,10 @@ static void bnxt_qplib_init_psn_ptr(struct bnxt_qplib_qp *qp, int size) sq = &qp->sq; hwq = &sq->hwq; +/* First psn entry */ fpsne = (u64 )bnxt_qplib_get_qe (hwq, hwq->max_elements, &psn_pg);if (!IS_ALIGNED (fpsne,PAGE_SIZE )) - indx_pad =ALIGN (fpsne,PAGE_SIZE ) / size; - + indx_pad = (fpsne & ~PAGE_MASK ) / size; page = (u64 *)psn_pg;for (indx =0 ; indx < hwq->max_elements; indx++) { pg_num = (indx + indx_pad) / (PAGE_SIZE / size);
@@ -950,6 +952,7 @@ int bnxt_qplib_create_qp(struct bnxt_qplib_res *res, struct bnxt_qplib_qp *qp)u32 qp_flags =0 ;u8 pg_sz_lvl;u16 max_rsge; +u32 tbl_indx;RCFW_CMD_PREP (req,CREATE_QP , cmd_flags);
@@ -1118,8 +1121,9 @@ int bnxt_qplib_create_qp(struct bnxt_qplib_res *res, struct bnxt_qplib_qp *qp) rq->dbinfo.xid = qp->id; rq->dbinfo.db = qp->dpi->dbr; } - rcfw->qp_tbl[qp->id].qp_id = qp->id; - rcfw->qp_tbl[qp->id].qp_handle = (void *)qp; + tbl_indx =map_qp_id_to_tbl_indx (qp->id, rcfw); + rcfw->qp_tbl[tbl_indx].qp_id = qp->id; + rcfw->qp_tbl[tbl_indx].qp_handle = (void *)qp;return 0 ;
@@ -1467,10 +1471,12 @@ int bnxt_qplib_destroy_qp(struct bnxt_qplib_res *res,struct cmdq_destroy_qp req;struct creq_destroy_qp_resp resp;u16 cmd_flags =0 ; +u32 tbl_indx;int rc; - rcfw->qp_tbl[qp->id].qp_id =BNXT_QPLIB_QP_ID_INVALID ; - rcfw->qp_tbl[qp->id].qp_handle =NULL ; + tbl_indx =map_qp_id_to_tbl_indx (qp->id, rcfw); + rcfw->qp_tbl[tbl_indx].qp_id =BNXT_QPLIB_QP_ID_INVALID ; + rcfw->qp_tbl[tbl_indx].qp_handle =NULL ;RCFW_CMD_PREP (req,DESTROY_QP , cmd_flags);
@@ -1478,8 +1484,8 @@ int bnxt_qplib_destroy_qp(struct bnxt_qplib_res *res, rc =bnxt_qplib_rcfw_send_message (rcfw, (void *)&req, (void *)&resp,NULL ,0 );if (rc) { - rcfw->qp_tbl[qp->id].qp_id = qp->id; - rcfw->qp_tbl[qp->id].qp_handle = qp; + rcfw->qp_tbl[tbl_indx].qp_id = qp->id; + rcfw->qp_tbl[tbl_indx].qp_handle = qp;return rc; }
drivers/infiniband/hw/bnxt_re/qplib_rcfw.c +6 -4
@@ -307,14 +307,15 @@ static int bnxt_qplib_process_qp_event(struct bnxt_qplib_rcfw *rcfw,__le16 mcookie;u16 cookie;int rc =0 ; -u32 qp_id; +u32 qp_id, tbl_indx; pdev = rcfw->pdev;switch (qp_event->event) {case CREQ_QP_EVENT_EVENT_QP_ERROR_NOTIFICATION : err_event = (struct creq_qp_error_notification *)qp_event; qp_id =le32_to_cpu (err_event->xid); - qp = rcfw->qp_tbl[qp_id].qp_handle; + tbl_indx =map_qp_id_to_tbl_indx (qp_id, rcfw); + qp = rcfw->qp_tbl[tbl_indx].qp_handle;dev_dbg (&pdev->dev,"Received QP error notification\n" ); dev_dbg(&pdev->dev, "qpid 0x%x, req_err=0x%x, resp_err=0x%x\n",
@@ -615,8 +616,9 @@ int bnxt_qplib_alloc_rcfw_channel(struct bnxt_qplib_res *res, cmdq->bmap_size = bmap_size; - rcfw->qp_tbl_size = qp_tbl_sz; - rcfw->qp_tbl =kcalloc (qp_tbl_sz,sizeof (struct bnxt_qplib_qp_node ), +/* Allocate one extra to hold the QP1 entries */ + rcfw->qp_tbl_size = qp_tbl_sz +1 ; + rcfw->qp_tbl =kcalloc (rcfw->qp_tbl_size,sizeof (struct bnxt_qplib_qp_node ),GFP_KERNEL );if (!rcfw->qp_tbl) goto fail;
drivers/infiniband/hw/bnxt_re/qplib_rcfw.h +5 -0
@@ -216,4 +216,9 @@ int bnxt_qplib_deinit_rcfw(struct bnxt_qplib_rcfw *rcfw);int bnxt_qplib_init_rcfw (struct bnxt_qplib_rcfw *rcfw,struct bnxt_qplib_ctx *ctx,int is_virtfn);void bnxt_qplib_mark_qp_error (void *qp_handle); +static inline u32 map_qp_id_to_tbl_indx (u32 qid,struct bnxt_qplib_rcfw *rcfw) +{ +/* Last index of the qp_tbl is for QP1 ie. qp_tbl_size - 1*/ +return (qid ==1 ) ? rcfw->qp_tbl_size -1 : qid % rcfw->qp_tbl_size -2 ; +}#endif /* __BNXT_QPLIB_RCFW_H__ */
drivers/infiniband/hw/mlx4/main.c +2 -1
@@ -784,7 +784,8 @@ static int eth_link_query_port(struct ib_device *ibdev, u8 port, props->ip_gids = true; props->gid_tbl_len = mdev->dev->caps.gid_table_len[port]; props->max_msg_sz = mdev->dev->caps.max_msg_sz; - props->pkey_tbl_len =1 ; +if (mdev->dev->caps.pkey_table_len[port]) + props->pkey_tbl_len =1 ; props->max_mtu =IB_MTU_4096 ; props->max_vl_num =2 ; props->state =IB_PORT_DOWN ;
drivers/infiniband/sw/rxe/rxe.c +4 -3
@@ -48,6 +48,8 @@ static void rxe_cleanup_ports(struct rxe_dev *rxe) } +bool rxe_initialized; +/* free resources for a rxe device all objects created for this device must * have been destroyed */
@@ -147,9 +149,6 @@ static int rxe_init_ports(struct rxe_dev *rxe)rxe_init_port_param (port); -if (!port->attr.pkey_tbl_len || !port->attr.gid_tbl_len) -return -EINVAL ; - port->pkey_tbl =kcalloc (port->attr.pkey_tbl_len,sizeof (*port->pkey_tbl),GFP_KERNEL );
@@ -348,6 +347,7 @@ static int __init rxe_module_init(void)return err;rdma_link_register (&rxe_link_ops); + rxe_initialized = true;pr_info ("loaded\n" );return 0 ; }
@@ -359,6 +359,7 @@ static void __exit rxe_module_exit(void)rxe_net_exit ();rxe_cache_exit (); + rxe_initialized = false;pr_info ("unloaded\n" ); }
drivers/infiniband/sw/rxe/rxe.h +2 -0
@@ -67,6 +67,8 @@#define RXE_ROCE_V2_SPORT (0xc000) +extern bool rxe_initialized; +static inline u32 rxe_crc32 (struct rxe_dev *rxe,u32 crc,void *next,size_t len) {
drivers/infiniband/sw/rxe/rxe_mr.c +1 -0
@@ -207,6 +207,7 @@ int rxe_mem_init_user(struct rxe_pd *pd, u64 start, vaddr =page_address (sg_page_iter_page (&sg_iter));if (!vaddr) {pr_warn ("null vaddr\n" ); +ib_umem_release (umem); err = -ENOMEM ; goto err1; }
drivers/infiniband/sw/rxe/rxe_sysfs.c +5 -0
@@ -61,6 +61,11 @@ static int rxe_param_set_add(const char *val, const struct kernel_param *kp)struct net_device *ndev;struct rxe_dev *exists; +if (!rxe_initialized) { +pr_err ("Module parameters are not supported, use rdma link add or rxe_cfg\n" ); +return -EAGAIN ; + } + len =sanitize_arg (val, intf,sizeof (intf));if (!len) {pr_err ("add: invalid interface name\n" );
drivers/infiniband/sw/rxe/rxe_verbs.c +1 -1
@@ -1083,7 +1083,7 @@ static ssize_t parent_show(struct device *device,struct rxe_dev *rxe = rdma_device_to_drv_device(device, struct rxe_dev, ib_dev); -return snprintf (buf,16 ,"%s\n" ,rxe_parent_name (rxe,1 )); +return scnprintf (buf,PAGE_SIZE ,"%s\n" ,rxe_parent_name (rxe,1 )); }static DEVICE_ATTR_RO (parent);
drivers/infiniband/ulp/isert/ib_isert.c +47 -46
248 lines not on this page · raw message
drivers/infiniband/ulp/isert/ib_isert.h +31 -10
70 lines not on this page · raw message
drivers/infiniband/ulp/rtrs/rtrs-srv-sysfs.c +4 -12
@@ -152,13 +152,6 @@ static struct attribute_group rtrs_srv_stats_attr_group = { .attrs = rtrs_srv_stats_attrs, }; -static void rtrs_srv_dev_release (struct device *dev) -{ - struct rtrs_srv *srv = container_of(dev, struct rtrs_srv, dev); - -kfree (srv); -} -static int rtrs_srv_create_once_sysfs_root_folders (struct rtrs_srv_sess *sess) {struct rtrs_srv *srv = sess->srv;
@@ -172,7 +165,6 @@ static int rtrs_srv_create_once_sysfs_root_folders(struct rtrs_srv_sess *sess) goto unlock; } srv->dev.class = rtrs_dev_class; - srv->dev.release = rtrs_srv_dev_release; err =dev_set_name (&srv->dev,"%s" , sess->s.sessname);if (err) goto unlock;
@@ -182,16 +174,16 @@ static int rtrs_srv_create_once_sysfs_root_folders(struct rtrs_srv_sess *sess)* sysfs files are created */ dev_set_uevent_suppress (&srv->dev, true); - err =device_register (&srv->dev); + err =device_add (&srv->dev);if (err) { -pr_err ("device_register(): %d\n" , err); +pr_err ("device_add(): %d\n" , err); goto put; } srv->kobj_paths =kobject_create_and_add ("paths" , &srv->dev.kobj);if (!srv->kobj_paths) { err = -ENOMEM ;pr_err ("kobject_create_and_add(): %d\n" , err); -device_unregister (&srv->dev); +device_del (&srv->dev); goto unlock; }dev_set_uevent_suppress (&srv->dev, false);
@@ -216,7 +208,7 @@ rtrs_srv_destroy_once_sysfs_root_folders(struct rtrs_srv_sess *sess)kobject_del (srv->kobj_paths);kobject_put (srv->kobj_paths);mutex_unlock (&srv->paths_mutex); -device_unregister (&srv->dev); +device_del (&srv->dev); }else {mutex_unlock (&srv->paths_mutex); }
drivers/infiniband/ulp/rtrs/rtrs-srv.c +9 -0
@@ -1319,6 +1319,13 @@ static int rtrs_srv_get_next_cq_vector(struct rtrs_srv_sess *sess)return sess->cur_cq_vector; } +static void rtrs_srv_dev_release (struct device *dev) +{ + struct rtrs_srv *srv = container_of(dev, struct rtrs_srv, dev); + +kfree (srv); +} +static struct rtrs_srv *__alloc_srv (struct rtrs_srv_ctx *ctx,const uuid_t *paths_uuid) {
@@ -1336,6 +1343,8 @@ static struct rtrs_srv *__alloc_srv(struct rtrs_srv_ctx *ctx,uuid_copy (&srv->paths_uuid, paths_uuid); srv->queue_depth = sess_queue_depth; srv->ctx = ctx; +device_initialize (&srv->dev); + srv->dev.release = rtrs_srv_dev_release; srv->chunks =kcalloc (srv->queue_depth,sizeof (*srv->chunks),GFP_KERNEL );
drivers/interconnect/qcom/bcm-voter.c +19 -8
@@ -52,8 +52,20 @@ static int cmp_vcd(void *priv, struct list_head *a, struct list_head *b)return 1 ; } +static u64 bcm_div (u64 num,u32 base) +{ +/* Ensure that small votes aren't lost. */ +if (num && num < base) +return 1 ; + +do_div (num, base); + +return num; +} +static void bcm_aggregate (struct qcom_icc_bcm *bcm) { +struct qcom_icc_node *node;size_t i, bucket;u64 agg_avg[QCOM_ICC_NUM_BUCKETS ] = {0 };u64 agg_peak[QCOM_ICC_NUM_BUCKETS ] = {0 };
@@ -61,22 +73,21 @@ static void bcm_aggregate(struct qcom_icc_bcm *bcm)for (bucket =0 ; bucket <QCOM_ICC_NUM_BUCKETS ; bucket++) {for (i =0 ; i < bcm->num_nodes; i++) { - temp = bcm->nodes[i]->sum_avg[bucket] * bcm->aux_data.width; -do_div (temp, bcm->nodes[i]->buswidth * bcm->nodes[i]->channels); + node = bcm->nodes[i]; + temp =bcm_div (node->sum_avg[bucket] * bcm->aux_data.width, + node->buswidth * node->channels); agg_avg[bucket] =max (agg_avg[bucket], temp); - temp = bcm->nodes[i]->max_peak[bucket] * bcm->aux_data.width; -do_div (temp, bcm->nodes[i]->buswidth); + temp =bcm_div (node->max_peak[bucket] * bcm->aux_data.width, + node->buswidth); agg_peak[bucket] =max (agg_peak[bucket], temp); } temp = agg_avg[bucket] *1000ULL ; -do_div (temp, bcm->aux_data.unit); - bcm->vote_x[bucket] = temp; + bcm->vote_x[bucket] =bcm_div (temp, bcm->aux_data.unit); temp = agg_peak[bucket] *1000ULL ; -do_div (temp, bcm->aux_data.unit); - bcm->vote_y[bucket] = temp; + bcm->vote_y[bucket] =bcm_div (temp, bcm->aux_data.unit); } if (bcm->keepalive && bcm->vote_x[QCOM_ICC_BUCKET_AMC] == 0 &&
drivers/iommu/amd/iommu.c +6 -1
@@ -2650,7 +2650,12 @@ static int amd_iommu_def_domain_type(struct device *dev)if (!dev_data)return 0 ; -if (dev_data->iommu_v2) +/* +* Do not identity map IOMMUv2 capable devices when memory encryption is +* active, because some of those devices (AMD GPUs) don't have the +* encryption bit in their DMA-mask and require remapping. +*/ +if (!mem_encrypt_active () && dev_data->iommu_v2)return IOMMU_DOMAIN_IDENTITY ;return 0 ;
drivers/iommu/amd/iommu_v2.c +7 -0
@@ -737,6 +737,13 @@ int amd_iommu_init_device(struct pci_dev *pdev, int pasids)might_sleep (); +/* +* When memory encryption is active the device is likely not in a +* direct-mapped domain. Forbid using IOMMUv2 functionality for now. +*/ +if (mem_encrypt_active ()) +return -ENODEV ; +if (!amd_iommu_v2_supported ())return -ENODEV ;
drivers/media/rc/gpio-ir-tx.c +5 -11
@@ -19,8 +19,6 @@ struct gpio_ir {struct gpio_desc *gpio;unsigned int carrier;unsigned int duty_cycle; -/* we need a spinlock to hold the cpu while transmitting */ -spinlock_t lock; };static const struct of_device_id gpio_ir_tx_of_match[] = {
@@ -53,12 +51,11 @@ static int gpio_ir_tx_set_carrier(struct rc_dev *dev, u32 carrier)static void gpio_ir_tx_unmodulated (struct gpio_ir *gpio_ir,uint *txbuf,uint count) { -unsigned long flags;ktime_t edge;s32 delta;int i; -spin_lock_irqsave (&gpio_ir->lock, flags); +local_irq_disable (); edge =ktime_get ();
@@ -72,14 +69,11 @@ static void gpio_ir_tx_unmodulated(struct gpio_ir *gpio_ir, uint *txbuf, }gpiod_set_value (gpio_ir->gpio,0 ); - -spin_unlock_irqrestore (&gpio_ir->lock, flags); }static void gpio_ir_tx_modulated (struct gpio_ir *gpio_ir,uint *txbuf,uint count) { -unsigned long flags;ktime_t edge;/* * delta should never exceed 0.5 seconds (IR_MAX_DURATION) and on
@@ -95,7 +89,7 @@ static void gpio_ir_tx_modulated(struct gpio_ir *gpio_ir, uint *txbuf, space =DIV_ROUND_CLOSEST ((100 - gpio_ir->duty_cycle) * (NSEC_PER_SEC /100 ), gpio_ir->carrier); -spin_lock_irqsave (&gpio_ir->lock, flags); +local_irq_disable (); edge =ktime_get ();
@@ -128,19 +122,20 @@ static void gpio_ir_tx_modulated(struct gpio_ir *gpio_ir, uint *txbuf, edge = last; } } - -spin_unlock_irqrestore (&gpio_ir->lock, flags); }static int gpio_ir_tx (struct rc_dev *dev,unsigned int *txbuf,unsigned int count) {struct gpio_ir *gpio_ir = dev->priv; +unsigned long flags; +local_irq_save (flags);if (gpio_ir->carrier)gpio_ir_tx_modulated (gpio_ir, txbuf, count);else gpio_ir_tx_unmodulated (gpio_ir, txbuf, count); +local_irq_restore (flags);return count; }
@@ -176,7 +171,6 @@ static int gpio_ir_tx_probe(struct platform_device *pdev) gpio_ir->carrier =38000 ; gpio_ir->duty_cycle =50 ; -spin_lock_init (&gpio_ir->lock); rc =devm_rc_register_device (&pdev->dev, rcdev);if (rc <0 )
drivers/misc/eeprom/at24.c +7 -4
@@ -692,10 +692,6 @@ static int at24_probe(struct i2c_client *client) nvmem_config.word_size =1 ; nvmem_config.size = byte_len; - at24->nvmem =devm_nvmem_register (dev, &nvmem_config); -if (IS_ERR (at24->nvmem)) -return PTR_ERR (at24->nvmem); -i2c_set_clientdata (client, at24); err =regulator_enable (at24->vcc_reg);
@@ -708,6 +704,13 @@ static int at24_probe(struct i2c_client *client)pm_runtime_set_active (dev);pm_runtime_enable (dev); + at24->nvmem =devm_nvmem_register (dev, &nvmem_config); +if (IS_ERR (at24->nvmem)) { +pm_runtime_disable (dev); +regulator_disable (at24->vcc_reg); +return PTR_ERR (at24->nvmem); + } +/* * Perform a one-byte test read to verify that the * chip is functional.
drivers/mmc/core/sdio_ops.c +22 -17
@@ -121,6 +121,7 @@ int mmc_io_rw_extended(struct mmc_card *card, int write, unsigned fn,struct sg_table sgtable;unsigned int nents, left_size, i;unsigned int seg_size = card->host->max_seg_size; +int err;WARN_ON (blksz ==0 );
@@ -170,28 +171,32 @@ int mmc_io_rw_extended(struct mmc_card *card, int write, unsigned fn,mmc_set_data_timeout (&data, card); -mmc_wait_for_req (card->host, &mrq); +mmc_pre_req (card->host, &mrq); -if (nents >1 ) -sg_free_table (&sgtable); +mmc_wait_for_req (card->host, &mrq);if (cmd.error) -return cmd.error; -if (data.error) -return data.error; - -if (mmc_host_is_spi (card->host)) { + err = cmd.error; +else if (data.error) + err = data.error; +else if (mmc_host_is_spi (card->host))/* host driver already reported errors */ - }else { -if (cmd.resp[0 ] &R5_ERROR ) -return -EIO ; -if (cmd.resp[0 ] &R5_FUNCTION_NUMBER ) -return -EINVAL ; -if (cmd.resp[0 ] &R5_OUT_OF_RANGE ) -return -ERANGE ; - } + err =0 ; +else if (cmd.resp[0 ] &R5_ERROR ) + err = -EIO ; +else if (cmd.resp[0 ] &R5_FUNCTION_NUMBER ) + err = -EINVAL ; +else if (cmd.resp[0 ] &R5_OUT_OF_RANGE ) + err = -ERANGE ; +else + err =0 ; -return 0 ; +mmc_post_req (card->host, &mrq, err); + +if (nents >1 ) +sg_free_table (&sgtable); + +return err; }int sdio_reset (struct mmc_host *host)
drivers/mmc/host/sdhci-acpi.c +24 -7
@@ -550,12 +550,18 @@ static int amd_select_drive_strength(struct mmc_card *card,return MMC_SET_DRIVER_TYPE_A ; } -static void sdhci_acpi_amd_hs400_dll (struct sdhci_host *host) +static void sdhci_acpi_amd_hs400_dll (struct sdhci_host *host,bool enable) { +struct sdhci_acpi_host *acpi_host =sdhci_priv (host); +struct amd_sdhci_host *amd_host =sdhci_acpi_priv (acpi_host); +/* AMD Platform requires dll setting */ sdhci_writel (host,0x40003210 ,SDHCI_AMD_RESET_DLL_REGISTER );usleep_range (10 ,20 ); -sdhci_writel (host,0x40033210 ,SDHCI_AMD_RESET_DLL_REGISTER ); +if (enable) +sdhci_writel (host,0x40033210 ,SDHCI_AMD_RESET_DLL_REGISTER ); + + amd_host->dll_enabled = enable; }/*
@@ -595,10 +601,8 @@ static void amd_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)/* DLL is only required for HS400 */ if (host->timing ==MMC_TIMING_MMC_HS400 && - !amd_host->dll_enabled) { -sdhci_acpi_amd_hs400_dll (host); - amd_host->dll_enabled = true; - } + !amd_host->dll_enabled) +sdhci_acpi_amd_hs400_dll (host, true); } }
@@ -619,10 +623,23 @@ static int amd_sdhci_execute_tuning(struct mmc_host *mmc, u32 opcode)return err; } +static void amd_sdhci_reset (struct sdhci_host *host,u8 mask) +{ +struct sdhci_acpi_host *acpi_host =sdhci_priv (host); +struct amd_sdhci_host *amd_host =sdhci_acpi_priv (acpi_host); + +if (mask &SDHCI_RESET_ALL ) { + amd_host->tuned_clock = false; +sdhci_acpi_amd_hs400_dll (host, false); + } + +sdhci_reset (host, mask); +} +static const struct sdhci_ops sdhci_acpi_ops_amd = { .set_clock = sdhci_set_clock, .set_bus_width = sdhci_set_bus_width, - .reset = sdhci_reset, + .reset = amd_sdhci_reset, .set_uhs_signaling = sdhci_set_uhs_signaling, };
drivers/mmc/host/sdhci-msm.c +17 -1
@@ -1158,7 +1158,7 @@ static void sdhci_msm_set_cdr(struct sdhci_host *host, bool enable)static int sdhci_msm_execute_tuning (struct mmc_host *mmc,u32 opcode) {struct sdhci_host *host =mmc_priv (mmc); -int tuning_seq_cnt =3 ; +int tuning_seq_cnt =10 ;u8 phase, tuned_phases[16 ], tuned_phase_cnt =0 ;int rc;struct mmc_ios ios = host->mmc->ios;
@@ -1214,6 +1214,22 @@ static int sdhci_msm_execute_tuning(struct mmc_host *mmc, u32 opcode) }while (++phase <ARRAY_SIZE (tuned_phases));if (tuned_phase_cnt) { +if (tuned_phase_cnt ==ARRAY_SIZE (tuned_phases)) { +/* +* All phases valid is _almost_ as bad as no phases +* valid. Probably all phases are not really reliable +* but we didn't detect where the unreliable place is. +* That means we'll essentially be guessing and hoping +* we get a good phase. Better to try a few times. +*/ +dev_dbg (mmc_dev (mmc),"%s: All phases valid; try again\n" , +mmc_hostname (mmc)); +if (--tuning_seq_cnt) { + tuned_phase_cnt =0 ; + goto retry; + } + } + rc =msm_find_most_appropriate_phase (host, tuned_phases, tuned_phase_cnt);if (rc <0 )
drivers/mmc/host/sdhci-of-esdhc.c +7 -3
@@ -81,6 +81,7 @@ struct sdhci_esdhc {bool quirk_tuning_erratum_type2;bool quirk_ignore_data_inhibit;bool quirk_delay_before_data_reset; +bool quirk_trans_complete_erratum;bool in_sw_tuning;unsigned int peripheral_clock;const struct esdhc_clk_fixup *clk_fixup;
@@ -1177,10 +1178,11 @@ static void esdhc_set_uhs_signaling(struct sdhci_host *host,static u32 esdhc_irq (struct sdhci_host *host,u32 intmask) { +struct sdhci_pltfm_host *pltfm_host =sdhci_priv (host); +struct sdhci_esdhc *esdhc =sdhci_pltfm_priv (pltfm_host);u32 command; -if (of_find_compatible_node (NULL ,NULL , -"fsl,p2020-esdhc" )) { +if (esdhc->quirk_trans_complete_erratum) { command =SDHCI_GET_CMD (sdhci_readw (host,SDHCI_COMMAND )); if (command == MMC_WRITE_MULTIPLE_BLOCK &&
@@ -1334,8 +1336,10 @@ static void esdhc_init(struct platform_device *pdev, struct sdhci_host *host) esdhc->clk_fixup = match->data; np = pdev->dev.of_node; -if (of_device_is_compatible (np,"fsl,p2020-esdhc" )) +if (of_device_is_compatible (np,"fsl,p2020-esdhc" )) { esdhc->quirk_delay_before_data_reset = true; + esdhc->quirk_trans_complete_erratum = true; + } clk =of_clk_get (np,0 );if (!IS_ERR (clk)) {
drivers/net/ethernet/hisilicon/hns3/hns3_enet.c +4 -2
@@ -20,6 +20,7 @@#include <net/pkt_cls.h> #include <net/tcp.h> #include <net/vxlan.h> +#include <net/geneve.h> #include "hnae3.h" #include "hns3_enet.h"
@@ -780,7 +781,7 @@ static int hns3_get_l4_protocol(struct sk_buff *skb, u8 *ol4_proto,* and it is udp packet, which has a dest port as the IANA assigned. * the hardware is expected to do the checksum offload, but the * hardware will not do the checksum offload when udp dest port is -* 4789. +* 4789 or 6081. */ static bool hns3_tunnel_csum_bug (struct sk_buff *skb) {
@@ -789,7 +790,8 @@ static bool hns3_tunnel_csum_bug(struct sk_buff *skb) l4.hdr =skb_transport_header (skb);if (!(!skb->encapsulation && - l4.udp->dest ==htons (IANA_VXLAN_UDP_PORT ))) + (l4.udp->dest ==htons (IANA_VXLAN_UDP_PORT ) || + l4.udp->dest ==htons (GENEVE_UDP_PORT ))))return false;skb_checksum_help (skb);
drivers/net/wan/hdlc.c +1 -1
@@ -229,7 +229,7 @@ static void hdlc_setup_dev(struct net_device *dev) dev->min_mtu =68 ; dev->max_mtu =HDLC_MAX_MTU ; dev->type =ARPHRD_RAWHDLC ; - dev->hard_header_len =16 ; + dev->hard_header_len =0 ; dev->needed_headroom =0 ; dev->addr_len =0 ; dev->header_ops = &hdlc_null_ops;
drivers/net/wan/hdlc_cisco.c +1 -0
@@ -370,6 +370,7 @@ static int cisco_ioctl(struct net_device *dev, struct ifreq *ifr)memcpy (&state (hdlc)->settings, &new_settings, size);spin_lock_init (&state (hdlc)->lock); dev->header_ops = &cisco_header_ops; + dev->hard_header_len =sizeof (struct hdlc_header ); dev->type =ARPHRD_CISCO ;call_netdevice_notifiers (NETDEV_POST_TYPE_CHANGE , dev);netif_dormant_on (dev);
drivers/net/wan/lapbether.c +3 -0
@@ -210,6 +210,8 @@ static void lapbeth_data_transmit(struct net_device *ndev, struct sk_buff *skb) skb->dev = dev = lapbeth->ethdev; +skb_reset_network_header (skb); +dev_hard_header (skb, dev,ETH_P_DEC , bcast_addr,NULL ,0 );dev_queue_xmit (skb);
@@ -340,6 +342,7 @@ static int lapbeth_new_device(struct net_device *dev)*/ ndev->needed_headroom =-1 +3 +2 + dev->hard_header_len + dev->needed_headroom; + ndev->needed_tailroom = dev->needed_tailroom; lapbeth =netdev_priv (ndev); lapbeth->axdev = ndev;
drivers/nfc/st95hf/core.c +1 -1
@@ -966,7 +966,7 @@ static int st95hf_in_send_cmd(struct nfc_digital_dev *ddev, rc =down_killable (&stcontext->exchange_lock);if (rc) {WARN (1 ,"Semaphore is not found up in st95hf_in_send_cmd\n" ); -return rc; + goto free_skb_resp; } rc = st95hf_spi_send(&stcontext->spicontext, skb->data,
drivers/nvme/host/core.c +2 -6
@@ -3324,10 +3324,6 @@ static ssize_t nvme_sysfs_delete(struct device *dev, {struct nvme_ctrl *ctrl =dev_get_drvdata (dev); -/* Can't delete non-created controllers */ -if (!ctrl->created) -return -EBUSY ; -if (device_remove_file_self (dev, attr))nvme_delete_ctrl_sync (ctrl);return count;
@@ -4129,7 +4125,6 @@ void nvme_start_ctrl(struct nvme_ctrl *ctrl)nvme_queue_scan (ctrl);nvme_start_queues (ctrl); } - ctrl->created = true; }EXPORT_SYMBOL_GPL (nvme_start_ctrl);
@@ -4287,7 +4282,7 @@ void nvme_unfreeze(struct nvme_ctrl *ctrl) }EXPORT_SYMBOL_GPL (nvme_unfreeze); -void nvme_wait_freeze_timeout (struct nvme_ctrl *ctrl,long timeout) +int nvme_wait_freeze_timeout (struct nvme_ctrl *ctrl,long timeout) {struct nvme_ns *ns;
@@ -4298,6 +4293,7 @@ void nvme_wait_freeze_timeout(struct nvme_ctrl *ctrl, long timeout)break ; }up_read (&ctrl->namespaces_rwsem); +return timeout; }EXPORT_SYMBOL_GPL (nvme_wait_freeze_timeout);
drivers/nvme/host/fabrics.c +8 -5
@@ -565,10 +565,14 @@ bool __nvmf_check_ready(struct nvme_ctrl *ctrl, struct request *rq,struct nvme_request *req =nvme_req (rq);/* -* If we are in some state of setup or teardown only allow -* internally generated commands. +* currently we have a problem sending passthru commands +* on the admin_q if the controller is not LIVE because we can't +* make sure that they are going out after the admin connect, +* controller enable and/or other commands in the initialization +* sequence. until the controller will be LIVE, fail with +* BLK_STS_RESOURCE so that they will be rescheduled. */ -if (!blk_rq_is_passthrough (rq) || (req->flags &NVME_REQ_USERCMD )) +if (rq->q == ctrl->admin_q && (req->flags &NVME_REQ_USERCMD ))return false;/*
@@ -576,9 +580,8 @@ bool __nvmf_check_ready(struct nvme_ctrl *ctrl, struct request *rq,* which is require to set the queue live in the appropinquate states. */ switch (ctrl->state) { -case NVME_CTRL_NEW :case NVME_CTRL_CONNECTING : -if (nvme_is_fabrics (req->cmd) && +if (blk_rq_is_passthrough (rq) &&nvme_is_fabrics (req->cmd) && req->cmd->fabrics.fctype == nvme_fabrics_type_connect)return true;break ;
drivers/nvme/host/nvme.h +1 -2
@@ -271,7 +271,6 @@ struct nvme_ctrl {struct nvme_command ka_cmd;struct work_struct fw_act_work;unsigned long events; -bool created;#ifdef CONFIG_NVME_MULTIPATH /* asymmetric namespace access: */
@@ -538,7 +537,7 @@ void nvme_kill_queues(struct nvme_ctrl *ctrl);void nvme_sync_queues (struct nvme_ctrl *ctrl);void nvme_unfreeze (struct nvme_ctrl *ctrl);void nvme_wait_freeze (struct nvme_ctrl *ctrl); -void nvme_wait_freeze_timeout (struct nvme_ctrl *ctrl,long timeout); +int nvme_wait_freeze_timeout (struct nvme_ctrl *ctrl,long timeout);void nvme_start_freeze (struct nvme_ctrl *ctrl);#define NVME_QID_ANY -1
drivers/nvme/host/pci.c +2 -2
@@ -1250,8 +1250,8 @@ static enum blk_eh_timer_return nvme_timeout(struct request *req, bool reserved)dev_warn_ratelimited (dev->ctrl.device,"I/O %d QID %d timeout, disable controller\n" , req->tag, nvmeq->qid); -nvme_dev_disable (dev, true);nvme_req (req)->flags |=NVME_REQ_CANCELLED ; +nvme_dev_disable (dev, true);return BLK_EH_DONE ;case NVME_CTRL_RESETTING :return BLK_EH_RESET_TIMER ;
@@ -1268,10 +1268,10 @@ static enum blk_eh_timer_return nvme_timeout(struct request *req, bool reserved)dev_warn (dev->ctrl.device,"I/O %d QID %d timeout, reset controller\n" , req->tag, nvmeq->qid); +nvme_req (req)->flags |=NVME_REQ_CANCELLED ;nvme_dev_disable (dev, false);nvme_reset_ctrl (&dev->ctrl); -nvme_req (req)->flags |=NVME_REQ_CANCELLED ;return BLK_EH_DONE ; }
drivers/nvme/host/rdma.c +51 -17
140 lines not on this page · raw message
drivers/nvme/host/tcp.c +57 -23
65 lines not on this page · raw message
drivers/regulator/core.c +84 -71
155 lines not on this page · raw message
drivers/scsi/megaraid/megaraid_sas_fusion.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/staging/greybus/audio_topology.c +15 -14
Lines of this file are not shown. View the raw message.
drivers/target/iscsi/iscsi_target_login.c +3 -3
Lines of this file are not shown. View the raw message.
drivers/target/iscsi/iscsi_target_login.h +1 -2
Lines of this file are not shown. View the raw message.
drivers/target/iscsi/iscsi_target_nego.c +1 -2
Lines of this file are not shown. View the raw message.
drivers/usb/core/message.c +42 -49
91 lines not on this page · raw message
drivers/video/console/Kconfig +0 -46
46 lines not on this page · raw message
drivers/video/console/vgacon.c +1 -220
221 lines not on this page · raw message
drivers/video/fbdev/core/fbcon.c +4 -330
334 lines not on this page · raw message
include/linux/netfilter/nf_conntrack_sctp.h +2 -0
Lines of this file are not shown. View the raw message.
net/netfilter/nf_conntrack_proto_sctp.c +35 -4
Lines of this file are not shown. View the raw message.
tools/testing/selftests/timers/Makefile +1 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/timers/settings new file +1 -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.