Linux 4.19.21
Greg KH
maintainerI'm announcing the release of the 4.19.21 kernel.
All users of the 4.19 kernel series must upgrade.
The updated 4.19.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.19.y
and can be browsed at the normal kernel.org git web browser:
http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/arm/boot/dts/aspeed-bmc-arm-centriq2400-rep.dts | 2 arch/arm/boot/dts/aspeed-bmc-intel-s2600wf.dts | 2 arch/arm/boot/dts/aspeed-bmc-opp-lanyang.dts | 3 arch/arm/boot/dts/aspeed-bmc-portwell-neptune.dts | 2 arch/arm/boot/dts/gemini-dlink-dir-685.dts | 16 - arch/arm/boot/dts/imx51-zii-rdu1.dts | 17 + arch/arm/boot/dts/mmp2.dtsi | 9 arch/arm/boot/dts/omap4-sdp.dts | 1 arch/arm/kernel/smp.c | 15 + arch/arm/mach-omap2/omap_hwmod.c | 6 arch/arm/mach-pxa/cm-x300.c | 2 arch/arm/mach-pxa/littleton.c | 2 arch/arm/mach-pxa/zeus.c | 2 arch/arm64/include/asm/io.h | 32 ++ arch/arm64/include/uapi/asm/ptrace.h | 2 arch/arm64/kernel/entry-ftrace.S | 1 arch/mips/boot/dts/img/boston.dts | 6 arch/mips/include/asm/mach-jz4740/jz4740_mmc.h | 2 arch/mips/include/uapi/asm/inst.h | 2 arch/mips/jz4740/board-qi_lb60.c | 12 - arch/mips/ralink/Kconfig | 1 arch/nds32/mm/Makefile | 6 arch/powerpc/include/asm/fadump.h | 2 arch/powerpc/include/asm/uaccess.h | 2 arch/powerpc/kernel/fadump.c | 10 arch/powerpc/kernel/vmlinux.lds.S | 4 arch/powerpc/kvm/powerpc.c | 5 arch/powerpc/mm/fault.c | 4 arch/powerpc/perf/isa207-common.c | 7 arch/powerpc/platforms/powernv/pci-ioda-tce.c | 2 arch/powerpc/platforms/pseries/dlpar.c | 2 arch/powerpc/platforms/pseries/hotplug-memory.c | 7 arch/s390/include/uapi/asm/zcrypt.h | 4 arch/sh/boards/mach-kfr2r09/setup.c | 1 arch/um/include/asm/pgtable.h | 9 arch/x86/events/intel/core.c | 10 arch/x86/events/intel/uncore_snbep.c | 4 arch/x86/include/asm/fpu/internal.h | 3 arch/x86/kernel/cpu/bugs.c | 2 arch/x86/kernel/cpu/mcheck/mce.c | 1 arch/x86/kvm/svm.c | 7 arch/x86/kvm/vmx.c | 4 arch/x86/kvm/x86.c | 7 arch/x86/pci/broadcom_bus.c | 4 arch/xtensa/boot/dts/xtfpga.dtsi | 2 crypto/Kconfig | 3 crypto/aes_ti.c | 18 + drivers/acpi/apei/ghes.c | 2 drivers/acpi/spcr.c | 11 + drivers/ata/sata_rcar.c | 4 drivers/base/bus.c | 12 - drivers/base/cacheinfo.c | 6 drivers/base/core.c | 8 drivers/base/dd.c | 6 drivers/base/devres.c | 10 drivers/block/drbd/drbd_nl.c | 15 - drivers/block/drbd/drbd_receiver.c | 13 - drivers/block/sunvdc.c | 5 drivers/block/swim3.c | 6 drivers/block/zram/zram_drv.c | 38 +-- drivers/block/zram/zram_drv.h | 2 drivers/bluetooth/hci_bcm.c | 4 drivers/cdrom/gdrom.c | 1 drivers/clk/imgtec/clk-boston.c | 11 - drivers/clk/imx/clk-imx6sl.c | 6 drivers/clk/meson/meson8b.c | 16 + drivers/clk/sunxi-ng/ccu-sun8i-a33.c | 6 drivers/cpuidle/cpuidle-big_little.c | 7 drivers/crypto/ux500/cryp/cryp_core.c | 4 drivers/crypto/ux500/hash/hash_core.c | 2 drivers/dma/bcm2835-dma.c | 70 ++---- drivers/dma/imx-dma.c | 8 drivers/dma/xilinx/zynqmp_dma.c | 2 drivers/firmware/efi/vars.c | 99 +++++++-- drivers/fpga/altera-cvp.c | 15 + drivers/gpio/gpio-mt7621.c | 10 drivers/gpio/gpiolib.c | 25 +- drivers/gpu/drm/amd/display/dc/core/dc_link.c | 23 +- drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c | 3 drivers/gpu/drm/amd/display/dc/core/dc_resource.c | 2 drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c | 11 - drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c | 12 + drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.c | 17 + drivers/gpu/drm/drm_atomic_helper.c | 8 drivers/gpu/drm/drm_bufs.c | 3 drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c | 2 drivers/gpu/drm/msm/dsi/pll/dsi_pll_10nm.c | 8 drivers/gpu/drm/rockchip/cdn-dp-reg.c | 2 drivers/gpu/drm/sun4i/sun8i_tcon_top.c | 7 drivers/gpu/drm/v3d/v3d_bo.c | 1 drivers/gpu/drm/vc4/vc4_plane.c | 12 - drivers/gpu/drm/vgem/vgem_drv.c | 16 - drivers/gpu/ipu-v3/ipu-image-convert.c | 10 drivers/hid/hid-debug.c | 120 ++++------- drivers/hid/hid-lenovo.c | 10 drivers/hwmon/lm80.c | 26 +- drivers/i2c/busses/i2c-axxia.c | 32 +- drivers/i2c/busses/i2c-sh_mobile.c | 2 drivers/iio/accel/kxcjk-1013.c | 1 drivers/iio/adc/meson_saradc.c | 14 - drivers/infiniband/hw/hfi1/rc.c | 2 drivers/infiniband/hw/hfi1/ruc.c | 7 drivers/infiniband/hw/qib/qib_ruc.c | 7 drivers/iommu/amd_iommu.c | 9 drivers/iommu/arm-smmu-v3.c | 14 + drivers/iommu/arm-smmu.c | 3 drivers/irqchip/irq-gic-v3-its.c | 32 ++ drivers/isdn/hisax/hfc_pci.c | 2 drivers/lightnvm/pblk-core.c | 13 - drivers/lightnvm/pblk-write.c | 8 drivers/md/raid10.c | 4 drivers/media/i2c/Kconfig | 2 drivers/media/i2c/ad9389b.c | 2 drivers/media/i2c/adv7511.c | 2 drivers/media/i2c/adv7604.c | 4 drivers/media/i2c/adv7842.c | 4 drivers/media/i2c/tc358743.c | 2 drivers/media/i2c/ths8200.c | 2 drivers/media/i2c/video-i2c.c | 11 - drivers/media/platform/coda/coda-bit.c | 19 - drivers/media/platform/coda/coda-common.c | 15 - drivers/media/platform/coda/coda.h | 6 drivers/media/platform/coda/coda_regs.h | 2 drivers/media/platform/davinci/vpbe.c | 7 drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_pm.c | 10 drivers/media/rc/rc-main.c | 2 drivers/memstick/core/memstick.c | 3 drivers/mmc/host/bcm2835.c | 12 + drivers/mmc/host/jz4740_mmc.c | 20 - drivers/mmc/host/meson-mx-sdio.c | 6 drivers/mmc/host/sdhci-of-esdhc.c | 16 + drivers/mmc/host/sdhci-omap.c | 16 + drivers/mmc/host/sdhci-xenon-phy.c | 10 drivers/mmc/host/sdhci-xenon.c | 10 drivers/net/dsa/mv88e6xxx/global1_atu.c | 21 + drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.c | 2 drivers/net/ethernet/broadcom/bcmsysport.c | 25 -- drivers/net/ethernet/broadcom/bcmsysport.h | 2 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 19 + drivers/net/ethernet/cisco/enic/enic_main.c | 3 drivers/net/ethernet/freescale/fman/fman_memac.c | 2 drivers/net/ethernet/freescale/fman/fman_tgec.c | 2 drivers/net/ethernet/hisilicon/hns3/hns3_enet.c | 16 - drivers/net/ethernet/intel/i40e/i40e.h | 1 drivers/net/ethernet/intel/i40e/i40e_main.c | 8 drivers/net/ethernet/intel/ice/ice_main.c | 16 + drivers/net/ethernet/intel/igb/igb_main.c | 8 drivers/net/ethernet/marvell/skge.c | 6 drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 2 drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | 14 + drivers/net/ethernet/mellanox/mlx5/core/en_tx.c | 6 drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c | 4 drivers/net/ethernet/mellanox/mlx5/core/main.c | 14 - drivers/net/ethernet/mellanox/mlxsw/spectrum.c | 23 ++ drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c | 5 drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c | 27 -- drivers/net/ethernet/sun/niu.c | 10 drivers/net/phy/dp83640.c | 13 - drivers/net/phy/marvell.c | 12 - drivers/net/usb/smsc95xx.c | 1 drivers/net/virtio_net.c | 20 + drivers/net/wireless/ath/ath10k/core.c | 1 drivers/net/wireless/ath/ath9k/ath9k.h | 2 drivers/net/wireless/ath/ath9k/dynack.c | 35 ++- drivers/net/wireless/ath/ath9k/dynack.h | 6 drivers/net/wireless/ath/ath9k/xmit.c | 5 drivers/net/wireless/ath/wil6210/main.c | 11 - drivers/net/wireless/ath/wil6210/txrx.c | 2 drivers/net/wireless/intel/iwlwifi/fw/api/mac.h | 2 drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c | 8 drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c | 4 drivers/net/wireless/mediatek/mt76/mt76x2_dfs.c | 8 drivers/net/wireless/st/cw1200/scan.c | 13 - drivers/opp/core.c | 11 - drivers/pci/controller/dwc/pci-imx6.c | 10 drivers/pci/switch/switchtec.c | 3 drivers/perf/arm_spe_pmu.c | 5 drivers/phy/allwinner/phy-sun4i-usb.c | 7 drivers/pinctrl/bcm/pinctrl-bcm2835.c | 16 - drivers/pinctrl/meson/pinctrl-meson8.c | 3 drivers/pinctrl/meson/pinctrl-meson8b.c | 13 - drivers/pinctrl/pinctrl-sx150x.c | 11 - drivers/platform/chrome/cros_ec_proto.c | 18 + drivers/platform/x86/mlx-platform.c | 12 - drivers/ptp/ptp_chardev.c | 5 drivers/ptp/ptp_clock.c | 5 drivers/s390/crypto/zcrypt_error.h | 2 drivers/scsi/aic94xx/aic94xx_init.c | 8 drivers/scsi/cxlflash/main.c | 2 drivers/scsi/hisi_sas/hisi_sas_v3_hw.c | 2 drivers/scsi/lpfc/lpfc_els.c | 52 ++-- drivers/scsi/lpfc/lpfc_nportdisc.c | 5 drivers/scsi/mpt3sas/mpt3sas_scsih.c | 2 drivers/scsi/mpt3sas/mpt3sas_transport.c | 7 drivers/scsi/smartpqi/smartpqi_init.c | 6 drivers/scsi/smartpqi/smartpqi_sis.c | 2 drivers/soc/bcm/brcmstb/common.c | 6 drivers/soc/tegra/common.c | 6 drivers/staging/erofs/internal.h | 2 drivers/staging/fsl-dpaa2/rtc/rtc.c | 5 drivers/staging/iio/adc/ad7280a.c | 17 + drivers/staging/iio/adc/ad7780.c | 6 drivers/staging/iio/resolver/ad2s90.c | 7 drivers/staging/pi433/pi433_if.c | 4 drivers/staging/speakup/spk_ttyio.c | 6 drivers/tee/optee/supp.c | 13 - drivers/thermal/broadcom/bcm2835_thermal.c | 11 + drivers/thermal/thermal-generic-adc.c | 12 - drivers/thermal/thermal_core.c | 12 - drivers/thermal/thermal_hwmon.h | 4 drivers/thermal/thermal_sysfs.c | 11 - drivers/tty/serial/8250/8250_pci.c | 9 drivers/tty/serial/fsl_lpuart.c | 4 drivers/tty/serial/samsung.c | 3 drivers/tty/serial/serial_core.c | 6 drivers/tty/serial/sh-sci.c | 32 ++ drivers/usb/core/hub.c | 10 drivers/usb/dwc2/params.c | 10 drivers/usb/dwc3/gadget.c | 16 - drivers/usb/dwc3/trace.h | 2 drivers/usb/gadget/udc/net2272.c | 2 drivers/usb/mtu3/mtu3_core.c | 4 drivers/usb/mtu3/mtu3_gadget_ep0.c | 8 drivers/usb/musb/musb_dsps.c | 21 + drivers/usb/musb/musb_gadget.c | 13 - drivers/usb/musb/musbhsdma.c | 21 + drivers/usb/phy/phy-am335x.c | 5 drivers/usb/renesas_usbhs/common.c | 4 drivers/video/fbdev/clps711x-fb.c | 5 drivers/video/fbdev/core/fbcon.c | 2 drivers/video/fbdev/core/fbmem.c | 8 drivers/virt/vboxguest/vboxguest_core.c | 2 drivers/watchdog/renesas_wdt.c | 9 fs/binfmt_script.c | 10 fs/btrfs/btrfs_inode.h | 1 fs/btrfs/ctree.h | 2 fs/btrfs/extent_io.c | 17 + fs/btrfs/inode.c | 11 - fs/btrfs/ioctl.c | 2 fs/btrfs/volumes.c | 29 ++ fs/cifs/readdir.c | 9 fs/dlm/ast.c | 10 fs/eventpoll.c | 2 fs/f2fs/acl.c | 14 - fs/f2fs/data.c | 12 - fs/f2fs/f2fs.h | 11 - fs/f2fs/file.c | 3 fs/f2fs/shrinker.c | 2 fs/f2fs/super.c | 27 +- fs/fuse/dev.c | 4 fs/fuse/file.c | 2 fs/nfs/super.c | 3 fs/nfsd/nfsctl.c | 2 fs/ocfs2/Makefile | 2 fs/ocfs2/buffer_head_io.c | 2 fs/ocfs2/dlm/Makefile | 2 fs/ocfs2/dlmfs/Makefile | 2 fs/udf/inode.c | 6 fs/xfs/libxfs/xfs_attr_leaf.c | 11 - fs/xfs/libxfs/xfs_bmap.c | 5 fs/xfs/libxfs/xfs_btree.c | 2 fs/xfs/xfs_aops.c | 2 fs/xfs/xfs_bmap_util.c | 10 fs/xfs/xfs_buf_item.c | 28 +- fs/xfs/xfs_ioctl.c | 2 fs/xfs/xfs_qm_bhv.c | 2 fs/xfs/xfs_reflink.c | 1 fs/xfs/xfs_stats.c | 2 include/linux/cpu.h | 2 include/linux/genl_magic_struct.h | 5 include/linux/gpio/consumer.h | 6 include/linux/hid-debug.h | 9 include/linux/kvm_host.h | 3 include/linux/mlx5/driver.h | 2 include/sound/compress_driver.h | 6 kernel/cgroup/cgroup.c | 2 kernel/cpu.c | 33 --- kernel/debug/debug_core.c | 4 kernel/debug/kdb/kdb_bt.c | 11 - kernel/debug/kdb/kdb_debugger.c | 7 kernel/events/ring_buffer.c | 3 kernel/futex.c | 28 +- kernel/hung_task.c | 20 - kernel/irq/affinity.c | 5 kernel/kcov.c | 2 kernel/locking/rtmutex.c | 37 ++- kernel/module.c | 6 kernel/sched/fair.c | 1 kernel/smp.c | 2 kernel/sysctl.c | 2 kernel/time/timekeeping.c | 4 lib/seq_buf.c | 6 lib/test_rhashtable.c | 23 +- mm/page_alloc.c | 37 ++- mm/percpu-km.c | 5 net/dccp/ccid.h | 4 net/dsa/master.c | 4 net/dsa/slave.c | 17 - net/ipv6/xfrm6_tunnel.c | 3 net/mac80211/rx.c | 5 net/rds/bind.c | 6 net/rxrpc/recvmsg.c | 3 net/sctp/socket.c | 4 net/sctp/stream.c | 20 + net/tipc/node.c | 6 samples/livepatch/livepatch-shadow-fix1.c | 5 samples/livepatch/livepatch-shadow-mod.c | 4 scripts/decode_stacktrace.sh | 2 scripts/gdb/linux/proc.py | 2 scripts/mod/modpost.c | 50 ++-- security/smack/smack_lsm.c | 12 - sound/pci/hda/hda_bind.c | 3 sound/pci/hda/hda_codec.h | 1 sound/pci/hda/hda_intel.c | 2 sound/pci/hda/patch_realtek.c | 62 +++-- sound/soc/fsl/Kconfig | 2 sound/soc/intel/atom/sst/sst_loader.c | 8 sound/usb/quirks.c | 1 tools/build/Makefile.feature | 4 tools/build/feature/Makefile | 10 tools/hv/hv_kvp_daemon.c | 15 + tools/lib/bpf/bpf.c | 11 - tools/perf/Makefile.config | 44 ++-- tools/perf/arch/x86/util/kvm-stat.c | 2 tools/perf/tests/attr.py | 2 tools/perf/tests/evsel-tp-sched.c | 2 tools/perf/util/dso.c | 2 tools/perf/util/header.c | 6 tools/perf/util/probe-file.c | 2 tools/perf/util/python.c | 3 tools/perf/util/s390-cpumsf.c | 2 tools/power/x86/intel_pstate_tracer/intel_pstate_tracer.py | 4 tools/testing/selftests/bpf/test_progs.c | 8 virt/kvm/arm/mmio.c | 11 - virt/kvm/kvm_main.c | 6 336 files changed, 2080 insertions(+), 1026 deletions(-)
Abhinav Kumar (1):
drm/msm/dsi: fix dsi clock names in DSI 10nm PLL driver
Adamski, Krzysztof (Nokia - PL/Wroclaw) (1):
i2c-axxia: check for error conditions first
Aditya Pakki (1):
HID: lenovo: Add checks to fix of_led_classdev_register
Adrian Hunter (4):
mmc: sdhci-of-esdhc: Fix timeout checks
mmc: sdhci-omap: Fix timeout checks
mmc: sdhci-xenon: Fix timeout checks
perf test: Fix perf_event_attr test failure
Akinobu Mita (1):
media: video-i2c: avoid accessing released memory area when removing driver
Alan Brady (1):
i40e: prevent overlapping tx_timeout recover
Alex Deucher (1):
drm/amdgpu/powerplay: fix clock stretcher limits on polaris (v2)
Alexander Duyck (1):
driver core: Move async_synchronize_full call
Alexei Avshalom Lazar (1):
wil6210: fix reset flow for Talyn-mb
Alexey Brodkin (1):
devres: Align data[] to ARCH_KMALLOC_MINALIGN
Alexey Kardashevskiy (1):
powerpc/powernv/ioda: Allocate indirect TCE levels of cached userspace addresses on demand
Alexey Khoroshilov (3):
media: mtk-vcodec: Release device nodes in mtk_vcodec_init_enc_pm()
media: DaVinci-VPBE: fix error handling in vpbe_initialize()
video: clps711x-fb: release disp device node in probe()
Anand Jain (1):
btrfs: harden agaist duplicate fsid on scanned devices
Anatolij Gustschin (1):
fpga: altera-cvp: fix 'bad IO access' on x86_64
Anders Roxell (1):
kernel/kcov.c: mark write_comp_data() as notrace
Andreas Puhm (1):
fpga: altera-cvp: Fix registration for CvP incapable devices
Andrew Lunn (1):
net: dsa: mv88e6xxx: Fix counting of ATU violations
Andrey Smirnov (1):
ARM: dts: imx51-zii-rdu1: Do not specify "power-gpio" for hpa1
Andy Duan (1):
serial: fsl_lpuart: clear parity enable bit when disable parity
Andy Shevchenko (3):
ACPI: SPCR: Consider baud rate 0 as preconfigured state
usb: dwc3: trace: add missing break statement to make compiler happy
serial: 8250_pci: Make PCI class test non fatal
Anson Huang (1):
clk: imx6sl: ensure MMDC CH0 handshake is bypassed
Anton Ivanov (1):
um: Avoid marking pages with "changed protection"
Anurag Kumar Vulisha (1):
usb: dwc3: Correct the logic for checking TRB full in __dwc3_prepare_one_trb()
Arend van Spriel (1):
firmware/efi: Add NULL pointer checks in efivars API functions
Arnaldo Carvalho de Melo (5):
perf dso: Fix unchecked usage of strncpy()
perf header: Fix unchecked usage of strncpy()
perf probe: Fix unchecked usage of strncpy()
perf header: Fix up argument to ctime()
perf tools: Cast off_t to s64 to avoid warning on bionic libc
Arnd Bergmann (4):
ASoC: Intel: mrfld: fix uninitialized variable access
vbox: fix link error with 'gcc -Og'
media: i2c: TDA1997x: select CONFIG_HDMI
ARM: pxa: avoid section mismatch warning
Bart Van Assche (2):
timekeeping: Use proper seqcount initializer
lib/test_rhashtable: Make test_insert_dup() allocate its hash table dynamically
Ben Dooks (1):
usbnet: smsc95xx: fix rx packet alignment
Beomho Seo (1):
tty: serial: samsung: Properly set flags in autoCTS mode
Bin Liu (3):
usb: musb: dsps: fix otg state machine
usb: musb: dsps: fix runtime pm for peripheral mode
usb: phy: am335x: fix race condition in _probe
Bjorn Andersson (1):
thermal: generic-adc: Fix adc to temp interpolation
Bob Peterson (1):
dlm: Don't swamp the CPU with callbacks queued during recovery
Boris Brezillon (1):
drm/vc4: ->x_scaling[1] should never be set to VC4_SCALING_NONE
Brian Foster (2):
xfs: fix shared extent data corruption due to missing cow reservation
xfs: eof trim writeback mapping as soon as it is cached
Brian Norris (2):
ath10k: assign 'n_cipher_suites' for WCN3990 platform/chrome: don't report EC_MKBP_EVENT_SENSOR_FIFO as wakeup
Carlos Maiolino (1):
xfs: Fix xqmstats offsets in /proc/fs/xfs/xqmstat
Charles Keepax (1):
ALSA: compress: Fix stop handling on compressed capture streams
Chen-Yu Tsai (2):
clk: sunxi-ng: a33: Set CLK_SET_RATE_PARENT for all audio module clocks
Bluetooth: hci_bcm: Handle deferred probing for the clock supply
Cheng Lin (1):
proc/sysctl: fix return error for proc_doulongvec_minmax()
Chris Brandt (1):
serial: sh-sci: Do not free irqs that have already been freed
Chris Perl (1):
NFS: nfs_compare_mount_options always compare auth flavors.
Christoph Hellwig (1):
xfs: cancel COW blocks before swapext
Christophe JAILLET (1):
xfs: Fix error code in 'xfs_ioc_getbmap()'
Christophe Leroy (2):
powerpc/uaccess: fix warning/error with access_ok() powerpc/mm: Fix reporting of kernel execute faults on the 8xx
Chunfeng Yun (1):
usb: mtu3: fix the issue about SetFeature(U1/U2_Enable)
Colin Ian King (1):
x86/PCI: Fix Broadcom CNB20LE unintended sign extension (redux)
Cong Wang (1):
net/mlx5e: Force CHECKSUM_UNNECESSARY for short ethernet frames
Damian Kos (1):
drm/rockchip: fix for mailbox read size
Dan Carpenter (2):
net: dsa: Fix NULL checking in dsa_slave_set_eee()
skge: potential memory corruption in skge_get_regs()
Darrick J. Wong (1):
xfs: fix PAGE_MASK usage in xfs_free_file_space
Dave Carroll (1):
scsi: smartpqi: correct volume status
Dave Chinner (3):
xfs: fix overflow in xfs_attr3_leaf_verify
xfs: fix transient reference count error in xfs_buf_resubmit_failed_buffers
xfs: delalloc -> unwritten COW fork allocation can go wrong
Dave Martin (1):
arm64/sve: ptrace: Fix SVE_PT_REGS_OFFSET definition
Davidlohr Bueso (1):
fs/epoll: drop ovflist branch prediction
Deepak Sharma (1):
drm/vgem: Fix vgem_init to get drm device available.
Dennis Zhou (1):
percpu: convert spin_lock_irq to spin_lock_irqsave.
Dexuan Cui (1):
Tools: hv: kvp: Fix a warning of buffer overflow with gcc 8.0.1
Doug Smythies (1):
tools/power/x86/intel_pstate_tracer: Fix non root execution for post processing a trace file
Douglas Anderson (1):
kdb: Don't back trace on a cpu that didn't round up
Du Changbin (1):
scripts/gdb: fix lx-version string output
Eduardo Valentin (1):
thermal: hwmon: inline helpers when CONFIG_THERMAL_HWMON is not set
Eric Anholt (1):
drm/v3d: Fix prime imports of buffers from other drivers.
Eric Biggers (1):
crypto: aes_ti - disable interrupts while accessing S-box
Eric Dumazet (3):
dccp: fool proof ccid_hc_[rt]x_parse_options()
rds: fix refcount bug in rds_sock_addref
rxrpc: bad unlock balance in rxrpc_recvmsg
Eric Sandeen (1):
xfs: fix inverted return from xfs_btree_sblock_verify_crc
Eric Yang (1):
drm/amd/display: fix YCbCr420 blank color
Ethan Lien (1):
btrfs: use tagged writepage to mitigate livelock of snapshot
Fabio Estevam (1):
ASoC: fsl: Fix SND_SOC_EUKREA_TLV320 build error on i.MX8M
Fabrizio Castro (2):
usb: renesas_usbhs: add support for RZ/G2E
i2c: sh_mobile: Add support for r8a774c0 (RZ/G2E)
Finn Thain (1):
block/swim3: Fix -EBUSY error when re-opening device after unmount
Florian Fainelli (1):
net: systemport: Fix WoL with password after deep sleep
Frank Rowand (1):
powerpc/pseries: add of_node_put() in dlpar_detach_node()
Gao Xiang (1):
staging: erofs: fix the definition of DBG_BUGON
Geert Uytterhoeven (2):
serial: sh-sci: Fix locking in sci_submit_rx()
serial: sh-sci: Resume PIO in sci_rx_interrupt() on DMA failure
Govindarajulu Varadarajan (1):
enic: fix checksum validation for IPv6
Greg Kroah-Hartman (3):
sctp: walk the list of asoc safely
serial: fix race between flush_to_ldisc and tty_open Linux 4.19.21
Guoqing Jiang (1):
md: fix raid10 hang issue caused by barrier
Gustavo A. R. Silva (3):
drm/bufs: Fix Spectre v1 vulnerability
usb: gadget: udc: net2272: Fix bitwise and boolean operations perf tests evsel-tp-sched: Fix bitwise operator
Hans Holmberg (1):
lightnvm: pblk: fix resubmission of overwritten write err lbas
Hans Verkuil (1):
media: adv*/tc358743/ths8200: fill in min width/height/pixelclock
Hans de Goede (1):
iio: accel: kxcjk1013: Add KIOX010A ACPI Hardware-ID
Harald Freudenberger (1):
s390/zcrypt: improve special ap message cmd handling
Hoang Le (1):
tipc: fix node keep alive interval calculation
Hua Su (1):
lightnvm: pblk: add lock protection to list operations
Huacai Chen (1):
cacheinfo: Keep the old value if of_property_read_u32 fails
Huazhong Tan (1):
net: hns3: fix incomplete uninitialization of IRQ in the hns3_nic_uninit_vector_data()
Icenowy Zheng (1):
phy: sun4i-usb: add support for missing USB PHY index
Ido Schimmel (1):
mlxsw: spectrum: Properly cleanup LAG uppers when removing port from LAG
Ioana Ciornei (1):
dpaa2-ptp: defer probe when portal allocation failed
J. Bruce Fields (1):
nfsd4: fix crash on writing v4_end_grace before nfsd startup
James Bottomley (1):
scsi: aic94xx: fix module loading
James Smart (2):
scsi: lpfc: Correct LCB RJT handling
scsi: lpfc: Fix LOGO/PLOGI handling when triggerd by ABTS Timeout event
Jan Kara (1):
udf: Fix BUG on corrupted inode
Jann Horn (2):
fuse: call pipe_buf_release() under pipe lock
kvm: fix kvm_ioctl_create_device() reference counting (CVE-2019-6974)
Jeremy Soller (1):
ALSA: hda/realtek - Headset microphone support for System76 darp5
Jernej Skrabec (1):
drm/sun4i: Initialize registers in tcon-top driver
Jia-Ju Bai (2):
cw1200: Fix concurrency use-after-free bugs in cw1200_hw_scan()
isdn: hisax: hfc_pci: Fix a possible concurrency use-after-free bug in HFCPCI_l1hw()
Jian Shen (1):
net: hns3: add max vector number check for pf
Jim Mattson (1):
kvm: Change offset in kvm_write_guest_offset_cached to unsigned
Jiong Wang (1):
mips: bpf: fix encoding bug for mm_srlv32_op
Jiri Olsa (1):
perf python: Do not force closing original perf descriptor in evlist.get_pollfd()
Joey Zhang (1):
switchtec: Fix SWITCHTEC_IOCTL_EVENT_IDX_ALL flags overwrite
Johan Hovold (1):
staging: speakup: fix tty-operation NULL derefs
Johannes Berg (1):
mac80211: fix radiotap vendor presence bitmap handling
Josh Poimboeuf (1):
cpu/hotplug: Fix "SMT disabled by BIOS" detection for KVM
Junxiao Bi (1):
ocfs2: don't clear bh uptodate for block read
Kai-Heng Feng (2):
memstick: Prevent memstick host from getting runtime suspended during card detection
igb: Fix an issue that PME is not enabled during runtime suspend
Kaike Wan (1):
IB/hfi1: Unreserve a reserved request when it is completed
Kailang Yang (1):
ALSA: hda/realtek - Fix lose hp_pins for disable auto mute
Kan Liang (1):
perf/x86/intel/uncore: Add Node ID mask
Kangjie Lu (3):
hwmon: (lm80) fix a missing check of the status of SMBus read
hwmon: (lm80) fix a missing check of bus read in lm80 probe
niu: fix missing checks of niu_pci_eeprom_read
Konstantin Khorenko (1):
i40e: define proper net_device::neigh_priv_len
Larry Chen (1):
ocfs2: improve ocfs2 Makefile
Lars Ellenberg (2):
drbd: disconnect, if the wrong UUIDs are attached on a connected peer
drbd: skip spurious timeout (ping-timeo) when failing promote
Lenny Szubowicz (1):
ACPI/APEI: Clear GHES block_status before panic()
Leonid Iziumtsev (1):
dmaengine: imx-dma: fix wrong callback invoke
Linus Walleij (2):
ARM: dts: Fix up the D-Link DIR-685 MTD partition info
mmc: jz4740: Get CD/WP GPIOs from descriptors
Lior David (1):
wil6210: fix memory leak in wil_find_tx_bcast_2
Liu, Chuansheng (1):
kernel/hung_task.c: force console verbose before panic
Long Li (1):
genirq/affinity: Spread IRQs to all available NUMA nodes
Lorenzo Bianconi (4):
ath9k: dynack: use authentication messages for 'late' ack
mt76x0: dfs: fix IBI_R11 configuration on non-radar channels
ath9k: dynack: make ewma estimation faster
ath9k: dynack: check da->enabled first in sampling routines
Lubomir Rintel (1):
ARM: dts: mmp2: fix TWSI2
Luca Ceresoli (1):
media: imx274: select REGMAP_I2C
Lukas Wunner (3):
pinctrl: bcm2835: Use raw spinlock for RT compatibility
dmaengine: bcm2835: Fix interrupt race on RT
dmaengine: bcm2835: Fix abort of transactions
Madhavan Srinivasan (1):
powerpc/perf: Fix thresholding counter data for unknown type
Mahesh Rajashekhara (2):
scsi: smartpqi: correct host serial num for ssa
scsi: smartpqi: increase fw status register read timeout
Mahesh Salgaonkar (1):
powerpc/fadump: Do not allow hot-remove memory from fadump reserved area.
Marc Zyngier (3):
scripts/decode_stacktrace: only strip base path when a prefix of the path
net: dsa: Fix lockdep false positive splat irqchip/gic-v3-its: Plug allocation race for devices sharing a DevID
Marek Szyprowski (1):
usb: dwc2: Disable power down feature on Samsung SoCs
Mark Rutland (3):
arm64: ftrace: don't adjust the LR value
arm64: KVM: Skip MMIO insn after emulation perf/core: Don't WARN() for impossible ring-buffer sizes
Martin Blumenstingl (6):
clk: meson: meson8b: do not use cpu_div3 for cpu_scale_out_sel
clk: meson: meson8b: fix the width of the cpu_scale_div clock
clk: meson: meson8b: mark the CPU clock as CLK_IS_CRITICAL
iio: adc: meson-saradc: fix internal clock names
pinctrl: meson: meson8: fix the GPIO function for the GPIOAO pins
pinctrl: meson: meson8b: fix the GPIO function for the GPIOAO pins
Matheus Tavares (1):
staging:iio:ad2s90: Make probe handle spi_setup failure
Mathias Nyman (1):
usb: hub: delay hub autosuspend if USB3 port is still link training
Mathieu Malaterre (1):
powerpc/32: Add .data..Lubsan_data*/.data..Lubsan_type* sections explicitly
Matthias Brugger (1):
thermal: bcm2835: enable hwmon explicitly
Max Filippov (1):
xtensa: xtfpga.dtsi: fix dtc warnings about SPI
Michael Chan (1):
bnxt_en: Disable MSIX before re-reserving NQs/CMPL rings.
Michael Ellerman (1):
seq_buf: Make seq_buf_puts() null-terminate the buffer
Michael Straube (1):
staging: pi433: fix potential null dereference
Michal Suchanek (1):
mmc: bcm2835: reset host on timeout
Mike Marciniszyn (1):
IB/hfi1: Add limit test for RC/UC send via loopback
Miklos Szeredi (2):
fuse: decrement NR_WRITEBACK_TEMP on the right page
fuse: handle zero sized retrieve correctly
Minchan Kim (1):
zram: fix lockdep warning of free block handling
Miroslav Lichvar (2):
ptp: check gettime64 return code in PTP_SYS_OFFSET ioctl
mlx5: update timecounter at least twice per counter overflow
Muchun Song (1):
gpiolib: Fix possible use after free on label
Murton Liu (1):
drm/amd/display: fix gamma not being applied correctly
Naftali Goldstein (2):
iwlwifi: fw: do not set sgi bits for HE connection
iwlwifi: mvm: fix setting HE ppe FW config
Nathan Chancellor (5):
ARM: OMAP2+: hwmod: Fix some section annotations
dmaengine: xilinx_dma: Remove __aligned attribute on zynqmp_dma_desc_ll
drbd: Avoid Clang warning about pointless switch statment
crypto: ux500 - Use proper enum in cryp_set_dma_transfer
crypto: ux500 - Use proper enum in hash_set_dma_transfer
Nicholas Mc Guire (7):
iio: adc: meson-saradc: check for devm_kasprintf failure
perf: arm_spe: handle devm_kasprintf() failure
gpio: mt7621: report failure of devm_kasprintf()
gpio: mt7621: pass mediatek_gpio_bank_probe() failure up the stack
pinctrl: sx150x: handle failure case of devm_kstrdup
mmc: meson-mx-sdio: check devm_kasprintf for failure
livepatch: check kzalloc return values
Nickhu (1):
nds32: Fix gcc 8.0 compiler option incompatible.
Nir Dotan (1):
mlxsw: spectrum_acl: Limit priority value
Noralf Trønnes (1):
fbdev: fbcon: Fix unregister crash when more than one framebuffer
Oleg Nesterov (1):
exec: load_script: don't blindly truncate shebang string
Ondrej Mosnacek (1):
cgroup: fix parsing empty mount option string
Paolo Bonzini (1):
KVM: x86: work around leak of uninitialized stack contents (CVE-2019-7222)
Paul Burton (1):
MIPS: Boston: Disable EG20T prefetch
Paul Elder (1):
usb: gadget: musb: fix short isoc packets with inventra dma
Paul Hsieh (1):
drm/amd/display: Add retry to read ddc_clock pin
Peter Rajnoha (1):
kobject: return error code if writing /sys/.../uevent fails
Peter Rosin (1):
fbdev: fbmem: behave better with small rotated displays and many CPUs
Peter Shier (1):
KVM: nVMX: unconditionally cancel preemption timer in free_nested (CVE-2019-7221)
Peter Zijlstra (1):
perf/x86/intel: Delay memory deallocation until x86_pmu_dead_cpu()
Phil Elwell (1):
mmc: bcm2835: Recover from MMC_SEND_EXT_CSD
Philipp Zabel (1):
media: coda: fix H.264 deblocking filter controls
Pu Wen (1):
perf tools: Add Hygon Dhyana support
Raed Salem (1):
net/mlx5e: FPGA, fix Innova IPsec TX offload data path performance
Randy Dunlap (1):
arch/sh/boards/mach-kfr2r09/setup.c: fix struct mtd_oob_ops build warning
Renato Lui Geh (1):
staging: iio: ad7780: update voltage on read
Richard Zhu (1):
PCI: imx: Enable MSI from downstream components
Rob Herring (1):
ARM: dts: aspeed: add missing memory unit-address
Roland Kammerer (1):
drbd: narrow rcu_read_lock in drbd_sync_handshake
Ronnie Sahlberg (1):
cifs: check ntwrk_buf_start for NULL before dereferencing it
Rundong Ge (1):
net: dsa: slave: Don't propagate flag changes on down slave interfaces
Russell King (1):
Revert "net: phy: marvell: avoid pause mode on SGMII-to-Copper for 88e151x"
Russell King - ARM Linux (1):
ARM: dts: Fix OMAP4430 SDP Ethernet startup
Saeed Mahameed (1):
net/mlx5: EQ, Use the right place to store/read IRQ affinity hint
Sahitya Tummala (2):
f2fs: fix use-after-free issue when accessing sbi->stat_info
f2fs: fix sbi->extent_list corruption issueSami Tolvanen (1):
modpost: validate symbol names also in find_elf_symbol
Scott Wood (1):
fsl/fman: Use GFP_ATOMIC in {memac,tgec}_add_hash_mac_address()
Sean Paul (2):
drm: Clear state->acquire_ctx before leaving drm_atomic_helper_commit_duplicated_state() drm/msm: dpu: Only check flush register against pending flushes
Sean Young (1):
media: rc: ensure close() is called on rc_unregister_device
Sebastian Andrzej Siewior (2):
x86/fpu: Add might_fault() to user_insn()
net: dp83640: expire old TX-skb
Sergei Shtylyov (1):
sata_rcar: fix deferred probing
Sheng Yong (1):
f2fs: fix race between write_checkpoint and write_begin
Simon Horman (1):
i2c: sh_mobile: add support for r8a77990 (R-Car E3)
Slawomir Stepien (1):
staging: iio: adc: ad7280a: handle error from __ad7280_read32()
Stanislav Fomichev (3):
bpf: libbpf: retry map creation without the name
selftests/bpf: use __bpf_constant_htons in test_prog.c
perf build: Don't unconditionally link the libbfd feature test to -liberty and -lz
Stefan Roese (1):
MIPS: ralink: Select CONFIG_CPU_MIPSR2_IRQ_VI on MT7620/8
Steve Longerbeam (1):
gpu: ipu-v3: image-convert: Prevent race between run and unprepare
Suganath Prabu (1):
scsi: mpt3sas: Call sas_remove_host before removing the target devices
Suraj Jitindar Singh (1):
KVM: PPC: Book3S: Only report KVM_CAP_SPAPR_TCE_VFIO on powernv machines
Takashi Iwai (2):
ALSA: hda - Serialize codec registrations
ALSA: hda/realtek - Use a common helper for hp pin reference
Tejas Joglekar (2):
usb: dwc3: gadget: Disable CSP for stream OUT ep
usb: dwc3: gadget: Handle 0 xfer length for OUT EP
Tetsuo Handa (1):
kernel/hung_task.c: break RCU locks based on jiffies
Thara Gopinath (1):
thermal: Fix locking in cooling device sysfs update cur_state
Thomas Gleixner (1):
futex: Handle early deadlock return correctly
Tiezhu Yang (1):
f2fs: fix wrong return value of f2fs_acl_create
Tony Luck (1):
x86/MCE: Initialize mce.bank in the case of a fatal error in mce_no_way_out()
Toshiaki Makita (1):
virtio_net: Account for tx bytes and packets on sending xdp_frames
Udo Eberhardt (1):
ALSA: usb-audio: Add support for new T+A USB DAC
Vadim Pasternak (1):
platform/x86: mlx-platform: Fix tachometer registers
Vaibhav Jain (1):
scsi: cxlflash: Prevent deadlock when adapter probe fails
Viresh Kumar (1):
OPP: Use opp_table->regulators to verify no regulator case
Vitaly Kuznetsov (1):
KVM: x86: svm: report MSR_IA32_MCG_EXT_CTL as unsupported
Vivek Gautam (1):
iommu/arm-smmu: Add support for qcom,smmu-v2 variant
Vladis Dronov (1):
HID: debug: fix the ring buffer implementation
Waiman Long (1):
mm/page_alloc.c: don't call kasan_free_pages() at deferred mem init
Wei Wang (1):
Thermal: do not clear passive state during system sleep
Wenjing Liu (1):
drm/amd/display: validate extended dongle caps
Wenwen Wang (1):
gdrom: fix a memory leak bug
Will Deacon (3):
arm64: io: Ensure calls to delay routines are ordered against prior readX()
arm64: io: Ensure value passed to __iormb() is held in a 64-bit register iommu/arm-smmu-v3: Use explicit mb() when moving cons pointer
Wolfram Sang (1):
watchdog: renesas_wdt: don't set divider while watchdog is running
Xiang Chen (1):
scsi: hisi_sas: change the time of SAS SSP connection
Xin Long (1):
sctp: check and update stream->out_curr when allocating stream_out
Yangtao Li (3):
soc/tegra: Don't leak device tree node reference
soc: bcm: brcmstb: Don't leak device tree node reference
cpuidle: big.LITTLE: fix refcount leak
Ye Yin (1):
fs/xfs: fix f_ffree value for statfs when project quota is set
Yi Wang (1):
clk: boston: fix possible memory leak in clk_boston_setup()
Yogesh Mohan Marimuthu (1):
drm/amd/display: calculate stream->phy_pix_clk before clock mapping
Young Xiao (2):
sunvdc: Do not spin in an infinite loop when vio_ldc_send() returns EAGAIN
ice: Do not enable NAPI on q_vectors that have no rings
Yu Zhao (1):
iommu/amd: Fix amd_iommu=force_isolation
YueHaibing (3):
ptp: Fix pass zero to ERR_PTR() in ptp_clock_register
net: aquantia: return 'err' if set MPI_DEINIT state fails
xfrm6_tunnel: Fix spi check in __xfrm6_tunnel_alloc_spi
Yufen Wang (1):
ARM: 8808/1: kexec:offline panic_smp_self_stop CPU
Yunlei He (1):
f2fs: move dir data flush to write checkpoint process
Zhen Lei (1):
iommu/arm-smmu-v3: Avoid memory corruption from Hisilicon MSI payloads
Zhizhou Zhang (1):
tee: optee: avoid possible double list_del()
Zoran Markovic (1):
smack: fix access permissions for keyring
Greg KH
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 4 PATCHLEVEL = 19 -SUBLEVEL = 20 +SUBLEVEL = 21 EXTRAVERSION = NAME = "People's Front"
arch/arm/boot/dts/aspeed-bmc-arm-centriq2400-rep.dts +1 -1
@@ -13,7 +13,7 @@ bootargs = "console=ttyS4,115200 earlyprintk"; }; - memory { + memory@80000000 { reg = <0x80000000 0x40000000>; };
arch/arm/boot/dts/aspeed-bmc-intel-s2600wf.dts +1 -1
@@ -13,7 +13,7 @@ bootargs = "earlyprintk"; }; - memory { + memory@80000000 { reg = <0x80000000 0x20000000>; };
arch/arm/boot/dts/aspeed-bmc-opp-lanyang.dts +1 -2
@@ -14,7 +14,7 @@ bootargs = "console=ttyS4,115200 earlyprintk"; }; - memory { + memory@80000000 { reg = <0x80000000 0x40000000>; };
@@ -322,4 +322,3 @@ &adc { status = "okay"; }; -
arch/arm/boot/dts/aspeed-bmc-portwell-neptune.dts +1 -1
@@ -17,7 +17,7 @@ bootargs = "console=ttyS4,115200 earlyprintk"; }; - memory { + memory@80000000 { reg = <0x80000000 0x20000000>; };
arch/arm/boot/dts/gemini-dlink-dir-685.dts +6 -10
@@ -274,20 +274,16 @@ read-only; }; /* - * Between the boot loader and the rootfs is the kernel - * in a custom Storlink format flashed from the boot - * menu. The rootfs is in squashfs format. + * This firmware image contains the kernel catenated + * with the squashfs root filesystem. For some reason + * this is called "upgrade" on the vendor system. */ - partition@1800c0 { - label = "rootfs"; - reg = <0x001800c0 0x01dbff40>; - read-only; - }; - partition@1f40000 { + partition@40000 { label = "upgrade"; - reg = <0x01f40000 0x00040000>; + reg = <0x00040000 0x01f40000>; read-only; }; + /* RGDB, Residental Gateway Database? */ partition@1f80000 { label = "rgdb"; reg = <0x01f80000 0x00040000>;
arch/arm/boot/dts/imx51-zii-rdu1.dts +13 -4
@@ -477,6 +477,15 @@ }; &gpio1 { + gpio-line-names = "", "", "", "", + "", "", "", "", + "", "hp-amp-shutdown-b", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", "", + "", "", "", ""; + unused-sd3-wp-gpio { /* * See pinctrl_esdhc1 below for more details on this
@@ -501,9 +510,6 @@ hpa1: amp@60 { compatible = "ti,tpa6130a2"; reg = <0x60>; - pinctrl-names = "default"; - pinctrl-0 = <&pinctrl_ampgpio>; - power-gpio = <&gpio1 9 GPIO_ACTIVE_HIGH>; Vdd-supply = <®_3p3v>; };
@@ -677,7 +683,10 @@ }; &iomuxc { - pinctrl_ampgpio: ampgpiogrp { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_hog>; + + pinctrl_hog: hoggrp { fsl,pins = < MX51_PAD_GPIO1_9__GPIO1_9 0x5e >;
arch/arm/boot/dts/mmp2.dtsi +6 -3
@@ -220,12 +220,15 @@ status = "disabled"; }; - twsi2: i2c@d4025000 { + twsi2: i2c@d4031000 { compatible = "mrvl,mmp-twsi"; - reg = <0xd4025000 0x1000>; - interrupts = <58>; + reg = <0xd4031000 0x1000>; + interrupt-parent = <&intcmux17>; + interrupts = <0>; clocks = <&soc_clocks MMP2_CLK_TWSI1>; resets = <&soc_clocks MMP2_CLK_TWSI1>; + #address-cells = <1>; + #size-cells = <0>; status = "disabled"; };
arch/arm/boot/dts/omap4-sdp.dts +1 -0
@@ -33,6 +33,7 @@ gpio = <&gpio2 16 GPIO_ACTIVE_HIGH>; /* gpio line 48 */ enable-active-high; regulator-boot-on; + startup-delay-us = <25000>; }; vbat: fixedregulator-vbat {
arch/arm/kernel/smp.c +15 -0
@@ -693,6 +693,21 @@ void smp_send_stop(void)pr_warn ("SMP: failed to stop secondary CPUs\n" ); } +/* In case panic() and panic() called at the same time on CPU1 and CPU2, +* and CPU 1 calls panic_smp_self_stop() before crash_smp_send_stop() +* CPU1 can't receive the ipi irqs from CPU2, CPU1 will be always online, +* kdump fails. So split out the panic_smp_self_stop() and add +* set_cpu_online(smp_processor_id(), false). +*/ +void panic_smp_self_stop (void ) +{ +pr_debug ("CPU %u will stop doing anything useful since another CPU has paniced\n" , +smp_processor_id ()); +set_cpu_online (smp_processor_id (), false); +while (1 ) +cpu_relax (); +} +/* * not supported here */
arch/arm/mach-omap2/omap_hwmod.c +3 -3
@@ -2397,7 +2397,7 @@ static int __init _init(struct omap_hwmod *oh, void *data)* a stub; implementing this properly requires iclk autoidle usecounting in * the clock code. No return value. */ -static void __init _setup_iclk_autoidle (struct omap_hwmod *oh) +static void _setup_iclk_autoidle (struct omap_hwmod *oh) {struct omap_hwmod_ocp_if *os;
@@ -2428,7 +2428,7 @@ static void __init _setup_iclk_autoidle(struct omap_hwmod *oh)* reset. Returns 0 upon success or a negative error code upon * failure. */ -static int __init _setup_reset (struct omap_hwmod *oh) +static int _setup_reset (struct omap_hwmod *oh) {int r;
@@ -2489,7 +2489,7 @@ static int __init _setup_reset(struct omap_hwmod *oh)* * No return value. */ -static void __init _setup_postsetup (struct omap_hwmod *oh) +static void _setup_postsetup (struct omap_hwmod *oh) {u8 postsetup_state;
arch/arm/mach-pxa/cm-x300.c +1 -1
@@ -558,7 +558,7 @@ static struct pxa3xx_u2d_platform_data cm_x300_u2d_platform_data = { .exit = cm_x300_u2d_exit, }; -static void cm_x300_init_u2d (void ) +static void __init cm_x300_init_u2d (void ) {pxa3xx_set_u2d_info (&cm_x300_u2d_platform_data); }
arch/arm/mach-pxa/littleton.c +1 -1
@@ -184,7 +184,7 @@ static struct pxafb_mach_info littleton_lcd_info = { .lcd_conn = LCD_COLOR_TFT_16BPP, }; -static void littleton_init_lcd (void ) +static void __init littleton_init_lcd (void ) {pxa_set_fb_info (NULL , &littleton_lcd_info); }
arch/arm/mach-pxa/zeus.c +1 -1
@@ -559,7 +559,7 @@ static struct pxaohci_platform_data zeus_ohci_platform_data = { .flags = ENABLE_PORT_ALL | POWER_SENSE_LOW, }; -static void zeus_register_ohci (void ) +static void __init zeus_register_ohci (void ) {/* Port 2 is shared between host and client interface. */ UP2OCR =UP2OCR_HXOE |UP2OCR_HXS |UP2OCR_DMPDE |UP2OCR_DPPDE ;
arch/arm64/include/asm/io.h +24 -8
@@ -106,7 +106,23 @@ static inline u64 __raw_readq(const volatile void __iomem *addr) }/* IO barriers */ -#define __iormb () rmb() +#define __iormb (v) \ +({ \ + unsigned long tmp; \ + \ + rmb(); \ + \ +/* \ +* Create a dummy control dependency from the IO read to any \ +* later instructions. This ensures that a subsequent call to \ +* udelay() will be ordered due to the ISB in get_cycles(). \ +*/ \ + asmvolatile ("eor %0, %1, %1\n" \ +"cbnz %0, ." \ + :"=r" (tmp) :"r" ((unsigned long )(v)) \ + :"memory" ); \ +}) +#define __iowmb () wmb()#define mmiowb () do { } while (0)
@@ -131,10 +147,10 @@ static inline u64 __raw_readq(const volatile void __iomem *addr)* following Normal memory access. Writes are ordered relative to any prior * Normal memory access. */ -#define readb (c) ({ u8 __v = readb_relaxed(c); __iormb(); __v; }) -#define readw (c) ({ u16 __v = readw_relaxed(c); __iormb(); __v; }) -#define readl (c) ({ u32 __v = readl_relaxed(c); __iormb(); __v; }) -#define readq (c) ({ u64 __v = readq_relaxed(c); __iormb(); __v; }) +#define readb (c) ({ u8 __v = readb_relaxed(c); __iormb(__v); __v; }) +#define readw (c) ({ u16 __v = readw_relaxed(c); __iormb(__v); __v; }) +#define readl (c) ({ u32 __v = readl_relaxed(c); __iormb(__v); __v; }) +#define readq (c) ({ u64 __v = readq_relaxed(c); __iormb(__v); __v; })#define writeb (v,c) ({ __iowmb(); writeb_relaxed((v),(c)); })#define writew (v,c) ({ __iowmb(); writew_relaxed((v),(c)); })
@@ -185,9 +201,9 @@ extern void __iomem *ioremap_cache(phys_addr_t phys_addr, size_t size);/* * io{read,write}{16,32,64}be() macros */ -#define ioread16be (p) ({ __u16 __v = be16_to_cpu((__force __be16)__raw_readw(p)); __iormb(); __v; }) -#define ioread32be (p) ({ __u32 __v = be32_to_cpu((__force __be32)__raw_readl(p)); __iormb(); __v; }) -#define ioread64be (p) ({ __u64 __v = be64_to_cpu((__force __be64)__raw_readq(p)); __iormb(); __v; }) +#define ioread16be (p) ({ __u16 __v = be16_to_cpu((__force __be16)__raw_readw(p)); __iormb(__v); __v; }) +#define ioread32be (p) ({ __u32 __v = be32_to_cpu((__force __be32)__raw_readl(p)); __iormb(__v); __v; }) +#define ioread64be (p) ({ __u64 __v = be64_to_cpu((__force __be64)__raw_readq(p)); __iormb(__v); __v; })#define iowrite16be (v,p) ({ __iowmb(); __raw_writew((__force __u16)cpu_to_be16(v), p); })#define iowrite32be (v,p) ({ __iowmb(); __raw_writel((__force __u32)cpu_to_be32(v), p); })
arch/arm64/include/uapi/asm/ptrace.h +1 -1
@@ -130,7 +130,7 @@ struct user_sve_header {/* Offset from the start of struct user_sve_header to the register data */ #define SVE_PT_REGS_OFFSET \ - ((sizeof(struct sve_context) + (SVE_VQ_BYTES - 1)) \ + ((sizeof(struct user_sve_header) + (SVE_VQ_BYTES - 1)) \ / SVE_VQ_BYTES * SVE_VQ_BYTES)/*
arch/arm64/kernel/entry-ftrace.S +0 -1
@@ -79,7 +79,6 @@ .macro mcount_get_lr reg ldr \reg, [x29] ldr \reg, [\reg, #8] - mcount_adjust_addr \reg, \reg .endm .macro mcount_get_lr_addr reg
arch/mips/boot/dts/img/boston.dts +6 -0
@@ -141,6 +141,12 @@ #size-cells = <2>; #interrupt-cells = <1>; + eg20t_phub@2,0,0 { + compatible = "pci8086,8801"; + reg = <0x00020000 0 0 0 0>; + intel,eg20t-prefetch = <0>; + }; + eg20t_mac@2,0,1 { compatible = "pci8086,8802"; reg = <0x00020100 0 0 0 0>;
arch/mips/include/asm/mach-jz4740/jz4740_mmc.h +0 -2
@@ -4,8 +4,6 @@struct jz4740_mmc_platform_data {int gpio_power; -int gpio_card_detect; -int gpio_read_only;unsigned card_detect_active_low:1 ;unsigned read_only_active_low:1 ;unsigned power_active_low:1 ;
arch/mips/include/uapi/asm/inst.h +1 -1
@@ -369,8 +369,8 @@ enum mm_32a_minor_op { mm_ext_op =0x02c , mm_pool32axf_op =0x03c , mm_srl32_op =0x040 , + mm_srlv32_op =0x050 , mm_sra_op =0x080 , - mm_srlv32_op =0x090 , mm_rotr_op =0x0c0 , mm_lwxs_op =0x118 , mm_addu32_op = 0x150,
arch/mips/jz4740/board-qi_lb60.c +9 -3
@@ -43,7 +43,6 @@#include "clock.h" /* GPIOs */ -#define QI_LB60_GPIO_SD_CD JZ_GPIO_PORTD(0)#define QI_LB60_GPIO_SD_VCC_EN_N JZ_GPIO_PORTD(2)#define QI_LB60_GPIO_KEYOUT (x) (JZ_GPIO_PORTC(10) + (x))
@@ -386,12 +385,18 @@ static struct platform_device qi_lb60_gpio_keys = { };static struct jz4740_mmc_platform_data qi_lb60_mmc_pdata = { - .gpio_card_detect =QI_LB60_GPIO_SD_CD , - .gpio_read_only =-1 , .gpio_power =QI_LB60_GPIO_SD_VCC_EN_N , .power_active_low =1 , }; +static struct gpiod_lookup_table qi_lb60_mmc_gpio_table = { + .dev_id ="jz4740-mmc.0" , + .table = { +GPIO_LOOKUP ("GPIOD" ,0 ,"cd" ,GPIO_ACTIVE_HIGH ), + { }, + }, +}; +/* beeper */ static struct pwm_lookup qi_lb60_pwm_lookup[] = { PWM_LOOKUP("jz4740-pwm", 4, "pwm-beeper", NULL, 0,
@@ -500,6 +505,7 @@ static int __init qi_lb60_init_platform_devices(void)gpiod_add_lookup_table (&qi_lb60_audio_gpio_table);gpiod_add_lookup_table (&qi_lb60_nand_gpio_table);gpiod_add_lookup_table (&qi_lb60_spigpio_gpio_table); +gpiod_add_lookup_table (&qi_lb60_mmc_gpio_table);spi_register_board_info (qi_lb60_spi_board_info,ARRAY_SIZE (qi_lb60_spi_board_info));
arch/mips/ralink/Kconfig +1 -0
@@ -38,6 +38,7 @@ choice config SOC_MT7620 bool "MT7620/8" + select CPU_MIPSR2_IRQ_VI select HW_HAS_PCI config SOC_MT7621
arch/nds32/mm/Makefile +5 -1
@@ -4,4 +4,8 @@ obj-y := extable.o tlb.o \ obj-$(CONFIG_ALIGNMENT_TRAP) += alignment.o obj-$(CONFIG_HIGHMEM) += highmem.o -CFLAGS_proc-n13.o += -fomit-frame-pointer + +ifdef CONFIG_FUNCTION_TRACER +CFLAGS_REMOVE_proc.o = $(CC_FLAGS_FTRACE) +endif +CFLAGS_proc.o += -fomit-frame-pointer
arch/powerpc/include/asm/fadump.h +1 -1
@@ -200,7 +200,7 @@ struct fad_crash_memory_ranges {unsigned long long size; }; -extern int is_fadump_boot_memory_area (u64 addr,ulong size); +extern int is_fadump_memory_area (u64 addr,ulong size);extern int early_init_dt_scan_fw_dump (unsigned long node,const char *uname,int depth,void *data);extern int fadump_reserve_mem (void );
arch/powerpc/include/asm/uaccess.h +1 -1
@@ -63,7 +63,7 @@ static inline int __access_ok(unsigned long addr, unsigned long size,#endif #define access_ok (type, addr, size) \ - (__chk_user_ptr(addr), \ + (__chk_user_ptr(addr), (void)(type), \ __access_ok((__force unsigned long)(addr), (size), get_fs()))/*
arch/powerpc/kernel/fadump.c +8 -2
@@ -118,13 +118,19 @@ int __init early_init_dt_scan_fw_dump(unsigned long node,/* * If fadump is registered, check if the memory provided -* falls within boot memory area. +* falls within boot memory area and reserved memory area. */ -int is_fadump_boot_memory_area (u64 addr,ulong size) +int is_fadump_memory_area (u64 addr,ulong size) { +u64 d_start = fw_dump.reserve_dump_area_start; +u64 d_end = d_start + fw_dump.reserve_dump_area_size; +if (!fw_dump.dump_registered)return 0 ; +if (((addr + size) > d_start) && (addr <= d_end)) +return 1 ; +return (addr + size) >RMA_START && addr <= fw_dump.boot_memory_size; }
arch/powerpc/kernel/vmlinux.lds.S +4 -0
@@ -296,6 +296,10 @@ SECTIONS #ifdef CONFIG_PPC32 .data : AT(ADDR(.data) - LOAD_OFFSET) { DATA_DATA +#ifdef CONFIG_UBSAN + *(.data..Lubsan_data*) + *(.data..Lubsan_type*) +#endif *(.data.rel*) *(SDATA_MAIN) *(.sdata2)
arch/powerpc/kvm/powerpc.c +4 -1
@@ -543,8 +543,11 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)#ifdef CONFIG_PPC_BOOK3S_64 case KVM_CAP_SPAPR_TCE :case KVM_CAP_SPAPR_TCE_64 : -/* fallthrough */ + r =1 ; +break ;case KVM_CAP_SPAPR_TCE_VFIO : + r = !!cpu_has_feature (CPU_FTR_HVMODE ); +break ;case KVM_CAP_PPC_RTAS :case KVM_CAP_PPC_FIXUP_HCALL :case KVM_CAP_PPC_ENABLE_HCALL :
arch/powerpc/mm/fault.c +3 -1
@@ -221,7 +221,9 @@ static int mm_fault_error(struct pt_regs *regs, unsigned long addr,static bool bad_kernel_fault (bool is_exec,unsigned long error_code,unsigned long address) { -if (is_exec && (error_code & (DSISR_NOEXEC_OR_G |DSISR_KEYFAULT ))) { +/* NX faults set DSISR_PROTFAULT on the 8xx, DSISR_NOEXEC_OR_G on others */ +if (is_exec && (error_code & (DSISR_NOEXEC_OR_G |DSISR_KEYFAULT | +DSISR_PROTFAULT ))) { printk_ratelimited(KERN_CRIT "kernel tried to execute" " exec-protected page (%lx) -" "exploit attempt? (uid: %d)\n",
arch/powerpc/perf/isa207-common.c +6 -1
@@ -226,8 +226,13 @@ void isa207_get_mem_weight(u64 *weight)u64 mmcra =mfspr (SPRN_MMCRA );u64 exp =MMCRA_THR_CTR_EXP (mmcra);u64 mantissa =MMCRA_THR_CTR_MANT (mmcra); +u64 sier =mfspr (SPRN_SIER ); +u64 val = (sier &ISA207_SIER_TYPE_MASK ) >>ISA207_SIER_TYPE_SHIFT ; - *weight = mantissa << (2 * exp); +if (val ==0 || val ==7 ) + *weight =0 ; +else + *weight = mantissa << (2 * exp); }int isa207_get_constraint (u64 event,unsigned long *maskp,unsigned long *valp)
arch/powerpc/platforms/powernv/pci-ioda-tce.c +1 -1
@@ -299,7 +299,7 @@ long pnv_pci_ioda2_table_alloc_pages(int nid, __u64 bus_offset,if (alloc_userspace_copy) { offset =0 ; uas =pnv_pci_ioda2_table_do_alloc_pages (nid, level_shift, - levels, tce_table_size, &offset, + tmplevels, tce_table_size, &offset, &total_allocated_uas);if (!uas) goto free_tces_exit;
arch/powerpc/platforms/pseries/dlpar.c +2 -0
@@ -272,6 +272,8 @@ int dlpar_detach_node(struct device_node *dn)if (rc)return rc; +of_node_put (dn); +return 0 ; }
arch/powerpc/platforms/pseries/hotplug-memory.c +5 -2
@@ -389,8 +389,11 @@ static bool lmb_is_removable(struct drmem_lmb *lmb) phys_addr = lmb->base_addr;#ifdef CONFIG_FA_DUMP -/* Don't hot-remove memory that falls in fadump boot memory area */ -if (is_fadump_boot_memory_area (phys_addr, block_sz)) +/* +* Don't hot-remove memory that falls in fadump boot memory area +* and memory that is reserved for capturing old kernel memory. +*/ +if (is_fadump_memory_area (phys_addr, block_sz))return false;#endif
arch/s390/include/uapi/asm/zcrypt.h +2 -2
@@ -147,8 +147,8 @@ struct ica_xcRB {* @cprb_len: CPRB header length [0x0020] * @cprb_ver_id: CPRB version id. [0x04] * @pad_000: Alignment pad bytes -* @flags: Admin cmd [0x80] or functional cmd [0x00] -* @func_id: Function id / subtype [0x5434] +* @flags: Admin bit [0x80], Special bit [0x20] +* @func_id: Function id / subtype [0x5434] "T4" * @source_id: Source id [originator id] * @target_id: Target id [usage/ctrl domain id] * @ret_code: Return code
arch/sh/boards/mach-kfr2r09/setup.c +0 -1
@@ -25,7 +25,6 @@#include <linux/memblock.h> #include <linux/mfd/tmio.h> #include <linux/mmc/host.h> -#include <linux/mtd/onenand.h> #include <linux/mtd/physmap.h> #include <linux/platform_data/lv5207lp.h> #include <linux/platform_device.h>
arch/um/include/asm/pgtable.h +8 -1
@@ -197,12 +197,17 @@ static inline pte_t pte_mkold(pte_t pte)static inline pte_t pte_wrprotect (pte_t pte) { -pte_clear_bits (pte, _PAGE_RW); +if (likely (pte_get_bits (pte, _PAGE_RW))) +pte_clear_bits (pte, _PAGE_RW); +else +return pte;return (pte_mknewprot (pte)); }static inline pte_t pte_mkread (pte_t pte) { +if (unlikely (pte_get_bits (pte, _PAGE_USER))) +return pte;pte_set_bits (pte, _PAGE_USER);return (pte_mknewprot (pte)); }
@@ -221,6 +226,8 @@ static inline pte_t pte_mkyoung(pte_t pte)static inline pte_t pte_mkwrite (pte_t pte) { +if (unlikely (pte_get_bits (pte, _PAGE_RW))) +return pte;pte_set_bits (pte, _PAGE_RW);return (pte_mknewprot (pte)); }
arch/x86/events/intel/core.c +8 -2
@@ -3439,6 +3439,11 @@ static void free_excl_cntrs(int cpu) }static void intel_pmu_cpu_dying (int cpu) +{ +fini_debug_store_on_cpu (cpu); +} + +static void intel_pmu_cpu_dead (int cpu) {struct cpu_hw_events *cpuc = &per_cpu (cpu_hw_events, cpu);struct intel_shared_regs *pc;
@@ -3451,8 +3456,6 @@ static void intel_pmu_cpu_dying(int cpu) }free_excl_cntrs (cpu); - -fini_debug_store_on_cpu (cpu); } static void intel_pmu_sched_task(struct perf_event_context *ctx,
@@ -3541,6 +3544,7 @@ static __initconst const struct x86_pmu core_pmu = { .cpu_prepare = intel_pmu_cpu_prepare, .cpu_starting = intel_pmu_cpu_starting, .cpu_dying = intel_pmu_cpu_dying, + .cpu_dead = intel_pmu_cpu_dead, };static struct attribute *intel_pmu_attrs[];
@@ -3581,6 +3585,8 @@ static __initconst const struct x86_pmu intel_pmu = { .cpu_prepare = intel_pmu_cpu_prepare, .cpu_starting = intel_pmu_cpu_starting, .cpu_dying = intel_pmu_cpu_dying, + .cpu_dead = intel_pmu_cpu_dead, + .guest_get_msrs = intel_guest_get_msrs, .sched_task = intel_pmu_sched_task, };
arch/x86/events/intel/uncore_snbep.c +3 -1
@@ -1222,6 +1222,8 @@ static struct pci_driver snbep_uncore_pci_driver = { .id_table = snbep_uncore_pci_ids, }; +#define NODE_ID_MASK 0x7 +/* * build pci bus to socket mapping */
@@ -1243,7 +1245,7 @@ static int snbep_pci2phy_map_init(int devid, int nodeid_loc, int idmap_loc, bool err =pci_read_config_dword (ubox_dev, nodeid_loc, &config);if (err)break ; - nodeid = config; + nodeid = config &NODE_ID_MASK ;/* get the Node ID mapping */ err =pci_read_config_dword (ubox_dev, idmap_loc, &config);if (err)
arch/x86/include/asm/fpu/internal.h +3 -0
@@ -106,6 +106,9 @@ extern void fpstate_sanitize_xstate(struct fpu *fpu); #define user_insn(insn, output, input...) \ ({ \ int err; \ + \ + might_fault(); \ + \ asm volatile(ASM_STAC "\n" \ "1:" #insn "\n\t" \ "2: " ASM_CLAC "\n" \
arch/x86/kernel/cpu/bugs.c +1 -1
@@ -69,7 +69,7 @@ void __init check_bugs(void)* identify_boot_cpu() initialized SMT support information, let the * core code know. */ -cpu_smt_check_topology_early (); +cpu_smt_check_topology ();if (!IS_ENABLED (CONFIG_SMP )) {pr_info ("CPU: " );
arch/x86/kernel/cpu/mcheck/mce.c +1 -0
@@ -783,6 +783,7 @@ static int mce_no_way_out(struct mce *m, char **msg, unsigned long *validp,quirk_no_way_out (i, m, regs);if (mce_severity (m, mca_cfg.tolerant, &tmp, true) >=MCE_PANIC_SEVERITY ) { + m->bank = i;mce_read_aux (m, i); *msg = tmp;return 1 ;
arch/x86/kvm/svm.c +7 -0
@@ -5837,6 +5837,13 @@ static bool svm_cpu_has_accelerated_tpr(void)static bool svm_has_emulated_msr (int index) { +switch (index) { +case MSR_IA32_MCG_EXT_CTL : +return false; +default : +break ; + } +return true; }
arch/x86/kvm/vmx.c +3 -1
@@ -27,6 +27,7 @@#include <linux/mm.h> #include <linux/highmem.h> #include <linux/sched.h> +#include <linux/sched/smt.h> #include <linux/moduleparam.h> #include <linux/mod_devicetable.h> #include <linux/trace_events.h>
@@ -8469,6 +8470,7 @@ static void free_nested(struct vcpu_vmx *vmx)if (!vmx->nested.vmxon && !vmx->nested.smm.vmxon)return ; +hrtimer_cancel (&vmx->nested.preemption_timer); vmx->nested.vmxon = false; vmx->nested.smm.vmxon = false;free_vpid (vmx->nested.vpid02);
@@ -11128,7 +11130,7 @@ static int vmx_vm_init(struct kvm *kvm)* Warn upon starting the first VM in a potentially * insecure environment. */ -if (cpu_smt_control ==CPU_SMT_ENABLED ) +if (sched_smt_active ())pr_warn_once (L1TF_MSG_SMT );if (l1tf_vmx_mitigation ==VMENTER_L1D_FLUSH_NEVER )pr_warn_once (L1TF_MSG_L1D );
arch/x86/kvm/x86.c +7 -0
@@ -4904,6 +4904,13 @@ int kvm_read_guest_virt(struct kvm_vcpu *vcpu, {u32 access = (kvm_x86_ops->get_cpl (vcpu) ==3 ) ?PFERR_USER_MASK :0 ; +/* +* FIXME: this should call handle_emulation_failure if X86EMUL_IO_NEEDED +* is returned, but our callers are not ready for that and they blindly +* call kvm_inject_page_fault. Ensure that they at least do not leak +* uninitialized kernel stack memory into cr2 and error code. +*/ +memset (exception,0 ,sizeof (*exception));return kvm_read_guest_virt_helper (addr, val, bytes, vcpu, access, exception); }
arch/x86/pci/broadcom_bus.c +2 -2
@@ -50,8 +50,8 @@ static void __init cnb20le_res(u8 bus, u8 slot, u8 func) word1 =read_pci_config_16 (bus, slot, func,0xc0 ); word2 =read_pci_config_16 (bus, slot, func,0xc2 );if (word1 != word2) { - res.start = (word1 <<16 ) |0x0000 ; - res.end = (word2 <<16 ) |0xffff ; + res.start = ((resource_size_t ) word1 <<16 ) |0x0000 ; + res.end = ((resource_size_t ) word2 <<16 ) |0xffff ; res.flags =IORESOURCE_MEM ;update_res (info, res.start, res.end, res.flags,0 ); }
arch/xtensa/boot/dts/xtfpga.dtsi +1 -1
@@ -103,7 +103,7 @@ }; }; - spi0: spi-master@0d0a0000 { + spi0: spi@0d0a0000 { compatible = "cdns,xtfpga-spi"; #address-cells = <1>; #size-cells = <0>;
crypto/Kconfig +2 -1
@@ -1056,7 +1056,8 @@ config CRYPTO_AES_TI 8 for decryption), this implementation only uses just two S-boxes of 256 bytes each, and attempts to eliminate data dependent latencies by prefetching the entire table into the cache at the start of each - block. + block. Interrupts are also disabled to avoid races where cachelines + are evicted when the CPU is interrupted to do something else. config CRYPTO_AES_586 tristate "AES cipher algorithms (i586)"
crypto/aes_ti.c +18 -0
@@ -269,6 +269,7 @@ static void aesti_encrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)const u32 *rkp = ctx->key_enc +4 ;int rounds =6 + ctx->key_length /4 ;u32 st0[4 ], st1[4 ]; +unsigned long flags;int round; st0[0 ] = ctx->key_enc[0 ] ^get_unaligned_le32 (in);
@@ -276,6 +277,12 @@ static void aesti_encrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in) st0[2 ] = ctx->key_enc[2 ] ^get_unaligned_le32 (in +8 ); st0[3 ] = ctx->key_enc[3 ] ^get_unaligned_le32 (in +12 ); +/* +* Temporarily disable interrupts to avoid races where cachelines are +* evicted when the CPU is interrupted to do something else. +*/ +local_irq_save (flags); + st0[0 ] ^= __aesti_sbox[0 ] ^ __aesti_sbox[128 ]; st0[1 ] ^= __aesti_sbox[32 ] ^ __aesti_sbox[160 ]; st0[2 ] ^= __aesti_sbox[64 ] ^ __aesti_sbox[192 ];
@@ -300,6 +307,8 @@ static void aesti_encrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)put_unaligned_le32 (subshift (st1,1 ) ^ rkp[5 ], out +4 );put_unaligned_le32 (subshift (st1,2 ) ^ rkp[6 ], out +8 );put_unaligned_le32 (subshift (st1,3 ) ^ rkp[7 ], out +12 ); + +local_irq_restore (flags); }static void aesti_decrypt (struct crypto_tfm *tfm,u8 *out,const u8 *in)
@@ -308,6 +317,7 @@ static void aesti_decrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)const u32 *rkp = ctx->key_dec +4 ;int rounds =6 + ctx->key_length /4 ;u32 st0[4 ], st1[4 ]; +unsigned long flags;int round; st0[0 ] = ctx->key_dec[0 ] ^get_unaligned_le32 (in);
@@ -315,6 +325,12 @@ static void aesti_decrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in) st0[2 ] = ctx->key_dec[2 ] ^get_unaligned_le32 (in +8 ); st0[3 ] = ctx->key_dec[3 ] ^get_unaligned_le32 (in +12 ); +/* +* Temporarily disable interrupts to avoid races where cachelines are +* evicted when the CPU is interrupted to do something else. +*/ +local_irq_save (flags); + st0[0 ] ^= __aesti_inv_sbox[0 ] ^ __aesti_inv_sbox[128 ]; st0[1 ] ^= __aesti_inv_sbox[32 ] ^ __aesti_inv_sbox[160 ]; st0[2 ] ^= __aesti_inv_sbox[64 ] ^ __aesti_inv_sbox[192 ];
@@ -339,6 +355,8 @@ static void aesti_decrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)put_unaligned_le32 (inv_subshift (st1,1 ) ^ rkp[5 ], out +4 );put_unaligned_le32 (inv_subshift (st1,2 ) ^ rkp[6 ], out +8 );put_unaligned_le32 (inv_subshift (st1,3 ) ^ rkp[7 ], out +12 ); + +local_irq_restore (flags); }static struct crypto_alg aes_alg = {
drivers/acpi/apei/ghes.c +2 -0
@@ -691,6 +691,8 @@ static void __ghes_panic(struct ghes *ghes) {__ghes_print_estatus (KERN_EMERG , ghes->generic, ghes->estatus); +ghes_clear_estatus (ghes); +/* reboot to log the error! */ if (!panic_timeout) panic_timeout = ghes_panic_timeout;
drivers/acpi/spcr.c +11 -0
@@ -148,6 +148,13 @@ int __init acpi_parse_spcr(bool enable_earlycon, bool enable_console) }switch (table->baud_rate) { +case 0 : +/* +* SPCR 1.04 defines 0 as a preconfigured state of UART. +* Assume firmware or bootloader configures console correctly. +*/ + baud_rate =0 ; +break ;case 3 : baud_rate =9600 ;break ;
@@ -196,6 +203,10 @@ int __init acpi_parse_spcr(bool enable_earlycon, bool enable_console)* UART so don't attempt to change to the baud rate state * in the table because driver cannot calculate the dividers */ + baud_rate =0 ; + } + +if (!baud_rate) {snprintf (opts,sizeof (opts),"%s,%s,0x%llx" , uart, iotype, table->serial_port.address); }else {
drivers/ata/sata_rcar.c +3 -1
@@ -895,7 +895,9 @@ static int sata_rcar_probe(struct platform_device *pdev)int ret =0 ; irq =platform_get_irq (pdev,0 ); -if (irq <=0 ) +if (irq <0 ) +return irq; +if (!irq)return -EINVAL ; priv =devm_kzalloc (dev,sizeof (struct sata_rcar_priv ),GFP_KERNEL );
drivers/base/bus.c +8 -4
@@ -614,8 +614,10 @@ static void remove_probe_files(struct bus_type *bus)static ssize_t uevent_store (struct device_driver *drv,const char *buf,size_t count) { -kobject_synth_uevent (&drv->p->kobj, buf, count); -return count; +int rc; + + rc =kobject_synth_uevent (&drv->p->kobj, buf, count); +return rc ? rc : count; }static DRIVER_ATTR_WO (uevent);
@@ -831,8 +833,10 @@ static void klist_devices_put(struct klist_node *n)static ssize_t bus_uevent_store (struct bus_type *bus,const char *buf,size_t count) { -kobject_synth_uevent (&bus->p->subsys.kobj, buf, count); -return count; +int rc; + + rc =kobject_synth_uevent (&bus->p->subsys.kobj, buf, count); +return rc ? rc : count; } static BUS_ATTR(uevent, S_IWUSR, NULL, bus_uevent_store);
drivers/base/cacheinfo.c +2 -4
@@ -79,8 +79,7 @@ static void cache_size(struct cacheinfo *this_leaf, struct device_node *np) ct_idx =get_cacheinfo_idx (this_leaf->type); propname = cache_type_info[ct_idx].size_prop; -if (of_property_read_u32 (np, propname, &this_leaf->size)) - this_leaf->size =0 ; +of_property_read_u32 (np, propname, &this_leaf->size); }/* not cache_line_size() because that's a macro in include/linux/cache.h */
@@ -114,8 +113,7 @@ static void cache_nr_sets(struct cacheinfo *this_leaf, struct device_node *np) ct_idx =get_cacheinfo_idx (this_leaf->type); propname = cache_type_info[ct_idx].nr_sets_prop; -if (of_property_read_u32 (np, propname, &this_leaf->number_of_sets)) - this_leaf->number_of_sets =0 ; +of_property_read_u32 (np, propname, &this_leaf->number_of_sets); }static void cache_associativity (struct cacheinfo *this_leaf)
drivers/base/core.c +7 -1
@@ -1067,8 +1067,14 @@ static ssize_t uevent_show(struct device *dev, struct device_attribute *attr,static ssize_t uevent_store (struct device *dev,struct device_attribute *attr,const char *buf,size_t count) { -if (kobject_synth_uevent (&dev->kobj, buf, count)) +int rc; + + rc =kobject_synth_uevent (&dev->kobj, buf, count); + +if (rc) {dev_err (dev,"uevent: failed to send synthetic uevent\n" ); +return rc; + }return count; }
drivers/base/dd.c +3 -3
@@ -926,9 +926,6 @@ static void __device_release_driver(struct device *dev, struct device *parent) drv = dev->driver;if (drv) { -if (driver_allows_async_probing (drv)) -async_synchronize_full (); -while (device_links_busy (dev)) {device_unlock (dev);if (parent && dev->bus->need_parent_lock)
@@ -1034,6 +1031,9 @@ void driver_detach(struct device_driver *drv)struct device_private *dev_prv;struct device *dev; +if (driver_allows_async_probing (drv)) +async_synchronize_full (); +for (;;) {spin_lock (&drv->p->klist_devices.k_lock);if (list_empty (&drv->p->klist_devices.k_list)) {
drivers/base/devres.c +8 -2
@@ -24,8 +24,14 @@ struct devres_node {struct devres {struct devres_node node; -/* -- 3 pointers */ -unsigned long long data[];/* guarantee ull alignment */ +/* +* Some archs want to perform DMA into kmalloc caches +* and need a guaranteed alignment larger than +* the alignment of a 64-bit integer. +* Thus we use ARCH_KMALLOC_MINALIGN here and get exactly the same +* buffer alignment as if it was allocated by plain kmalloc(). +*/ +u8 __aligned(ARCH_KMALLOC_MINALIGN) data[]; };struct devres_group {
drivers/block/drbd/drbd_nl.c +8 -7
@@ -668,14 +668,15 @@ drbd_set_role(struct drbd_device *const device, enum drbd_role new_role, int forif (rv ==SS_TWO_PRIMARIES ) {/* Maybe the peer is detected as dead very soon... retry at most once more in this case. */ -int timeo; -rcu_read_lock (); - nc =rcu_dereference (connection->net_conf); - timeo = nc ? (nc->ping_timeo +1 ) *HZ /10 :1 ; -rcu_read_unlock (); -schedule_timeout_interruptible (timeo); -if (try < max_tries) +if (try < max_tries) { +int timeo; try = max_tries -1 ; +rcu_read_lock (); + nc =rcu_dereference (connection->net_conf); + timeo = nc ? (nc->ping_timeo +1 ) *HZ /10 :1 ; +rcu_read_unlock (); +schedule_timeout_interruptible (timeo); + }continue ; }if (rv <SS_SUCCESS ) {
drivers/block/drbd/drbd_receiver.c +7 -6
@@ -3364,7 +3364,7 @@ static enum drbd_conns drbd_sync_handshake(struct drbd_peer_device *peer_device,enum drbd_conns rv =C_MASK ;enum drbd_disk_state mydisk;struct net_conf *nc; -int hg, rule_nr, rr_conflict, tentative; +int hg, rule_nr, rr_conflict, tentative, always_asbp; mydisk = device->state.disk;if (mydisk ==D_NEGOTIATING )
@@ -3415,8 +3415,12 @@ static enum drbd_conns drbd_sync_handshake(struct drbd_peer_device *peer_device,rcu_read_lock (); nc =rcu_dereference (peer_device->connection->net_conf); + always_asbp = nc->always_asbp; + rr_conflict = nc->rr_conflict; + tentative = nc->tentative; +rcu_read_unlock (); -if (hg ==100 || (hg ==-100 && nc->always_asbp)) { +if (hg ==100 || (hg ==-100 && always_asbp)) {int pcount = (device->state.role ==R_PRIMARY ) + (peer_role ==R_PRIMARY );int forced = (hg ==-100 );
@@ -3455,9 +3459,6 @@ static enum drbd_conns drbd_sync_handshake(struct drbd_peer_device *peer_device,"Sync from %s node\n" , (hg < 0) ? "peer" : "this"); } - rr_conflict = nc->rr_conflict; - tentative = nc->tentative; -rcu_read_unlock ();if (hg ==-100 ) {/* FIXME this log message is not correct if we end up here
@@ -4141,7 +4142,7 @@ static int receive_uuids(struct drbd_connection *connection, struct packet_infokfree (device->p_uuid); device->p_uuid = p_uuid; -if (device->state.conn <C_CONNECTED && +if ((device->state.conn <C_CONNECTED || device->state.pdsk ==D_DISKLESS ) && device->state.disk <D_INCONSISTENT && device->state.role ==R_PRIMARY && (device->ed_uuid & ~((u64 )1 )) != (p_uuid[UI_CURRENT ] & ~((u64 )1 ))) {
drivers/block/sunvdc.c +5 -0
@@ -45,6 +45,8 @@ MODULE_VERSION(DRV_MODULE_VERSION);#define WAITING_FOR_GEN_CMD 0x04#define WAITING_FOR_ANY -1 +#define VDC_MAX_RETRIES 10 +static struct workqueue_struct *sunvdc_wq;struct vdc_req_entry {
@@ -431,6 +433,7 @@ static int __vdc_tx_trigger(struct vdc_port *port) .end_idx = dr->prod, };int err, delay; +int retries =0 ; hdr.seq = dr->snd_nxt; delay =1 ;
@@ -443,6 +446,8 @@ static int __vdc_tx_trigger(struct vdc_port *port)udelay (delay);if ((delay <<=1 ) >128 ) delay =128 ; +if (retries++ >VDC_MAX_RETRIES ) +break ; }while (err == -EAGAIN );if (err == -ENOTCONN )
drivers/block/swim3.c +5 -1
@@ -1026,7 +1026,11 @@ static void floppy_release(struct gendisk *disk, fmode_t mode)struct swim3 __iomem *sw = fs->swim3;mutex_lock (&swim3_mutex); -if (fs->ref_count >0 && --fs->ref_count ==0 ) { +if (fs->ref_count >0 ) + --fs->ref_count; +else if (fs->ref_count ==-1 ) + fs->ref_count =0 ; +if (fs->ref_count ==0 ) {swim3_action (fs,MOTOR_OFF );out_8 (&sw->control_bic,0xff );swim3_select (fs,RELAX );
drivers/block/zram/zram_drv.c +21 -17
@@ -53,6 +53,11 @@ static size_t huge_class_size;static void zram_free_page (struct zram *zram,size_t index); +static int zram_slot_trylock (struct zram *zram,u32 index) +{ +return bit_spin_trylock (ZRAM_LOCK , &zram->table[index].value); +} +static void zram_slot_lock (struct zram *zram,u32 index) {bit_spin_lock (ZRAM_LOCK , &zram->table[index].value);
@@ -401,7 +406,6 @@ static ssize_t backing_dev_store(struct device *dev, goto out;reset_bdev (zram); -spin_lock_init (&zram->bitmap_lock); zram->old_block_size = old_block_size; zram->bdev = bdev;
@@ -445,29 +449,24 @@ static ssize_t backing_dev_store(struct device *dev,static unsigned long get_entry_bdev (struct zram *zram) { -unsigned long entry; - -spin_lock (&zram->bitmap_lock); +unsigned long blk_idx =1 ; +retry:/* skip 0 bit to confuse zram.handle = 0 */ - entry =find_next_zero_bit (zram->bitmap, zram->nr_pages,1 ); -if (entry == zram->nr_pages) { -spin_unlock (&zram->bitmap_lock); + blk_idx =find_next_zero_bit (zram->bitmap, zram->nr_pages, blk_idx); +if (blk_idx == zram->nr_pages)return 0 ; - } -set_bit (entry, zram->bitmap); -spin_unlock (&zram->bitmap_lock); +if (test_and_set_bit (blk_idx, zram->bitmap)) + goto retry; -return entry; +return blk_idx; }static void put_entry_bdev (struct zram *zram,unsigned long entry) {int was_set; -spin_lock (&zram->bitmap_lock); was_set =test_and_clear_bit (entry, zram->bitmap); -spin_unlock (&zram->bitmap_lock);WARN_ON_ONCE (!was_set); }
@@ -888,9 +887,10 @@ static ssize_t debug_stat_show(struct device *dev,down_read (&zram->init_lock); ret =scnprintf (buf,PAGE_SIZE , -"version: %d\n%8llu\n" , +"version: %d\n%8llu %8llu\n" , version, - (u64 )atomic64_read (&zram->stats.writestall)); + (u64 )atomic64_read (&zram->stats.writestall), + (u64 )atomic64_read (&zram->stats.miss_free));up_read (&zram->init_lock);return ret;
@@ -1402,10 +1402,14 @@ static void zram_slot_free_notify(struct block_device *bdev, zram = bdev->bd_disk->private_data; -zram_slot_lock (zram, index); +atomic64_inc (&zram->stats.notify_free); +if (!zram_slot_trylock (zram, index)) { +atomic64_inc (&zram->stats.miss_free); +return ; + } +zram_free_page (zram, index);zram_slot_unlock (zram, index); -atomic64_inc (&zram->stats.notify_free); } static int zram_rw_page(struct block_device *bdev, sector_t sector,
drivers/block/zram/zram_drv.h +1 -1
@@ -79,6 +79,7 @@ struct zram_stats {atomic64_t pages_stored;/* no. of pages currently stored */ atomic_long_t max_used_pages;/* no. of maximum pages stored */ atomic64_t writestall;/* no. of write slow paths */ +atomic64_t miss_free;/* no. of missed free */ };struct zram {
@@ -110,7 +111,6 @@ struct zram {unsigned int old_block_size;unsigned long *bitmap;unsigned long nr_pages; -spinlock_t bitmap_lock;#endif #ifdef CONFIG_ZRAM_MEMORY_TRACKING struct dentry *debugfs_dir;
drivers/bluetooth/hci_bcm.c +4 -0
@@ -907,6 +907,10 @@ static int bcm_get_resources(struct bcm_device *dev) dev->clk =devm_clk_get (dev->dev,NULL ); +/* Handle deferred probing */ +if (dev->clk ==ERR_PTR (-EPROBE_DEFER )) +return PTR_ERR (dev->clk); + dev->device_wakeup =devm_gpiod_get_optional (dev->dev,"device-wakeup" ,GPIOD_OUT_LOW );if (IS_ERR (dev->device_wakeup))
drivers/cdrom/gdrom.c +1 -0
@@ -889,6 +889,7 @@ static void __exit exit_gdrom(void)platform_device_unregister (pd);platform_driver_unregister (&gdrom_driver);kfree (gd.toc); +kfree (gd.cd_info); }module_init (init_gdrom);
drivers/clk/imgtec/clk-boston.c +8 -3
@@ -73,27 +73,32 @@ static void __init clk_boston_setup(struct device_node *np) hw =clk_hw_register_fixed_rate (NULL ,"input" ,NULL ,0 , in_freq);if (IS_ERR (hw)) {pr_err ("failed to register input clock: %ld\n" ,PTR_ERR (hw)); -return ; + goto error; } onecell->hws[BOSTON_CLK_INPUT ] = hw; hw =clk_hw_register_fixed_rate (NULL ,"sys" ,"input" ,0 , sys_freq);if (IS_ERR (hw)) {pr_err ("failed to register sys clock: %ld\n" ,PTR_ERR (hw)); -return ; + goto error; } onecell->hws[BOSTON_CLK_SYS ] = hw; hw =clk_hw_register_fixed_rate (NULL ,"cpu" ,"input" ,0 , cpu_freq);if (IS_ERR (hw)) {pr_err ("failed to register cpu clock: %ld\n" ,PTR_ERR (hw)); -return ; + goto error; } onecell->hws[BOSTON_CLK_CPU ] = hw; err =of_clk_add_hw_provider (np, of_clk_hw_onecell_get, onecell);if (err)pr_err ("failed to add DT provider: %d\n" , err); + +return ; + +error: +kfree (onecell); }/*
drivers/clk/imx/clk-imx6sl.c +6 -0
@@ -17,6 +17,8 @@#include "clk.h" +#define CCDR 0x4 +#define BM_CCM_CCDR_MMDC_CH0_MASK (1 << 17)#define CCSR 0xc#define BM_CCSR_PLL1_SW_CLK_SEL (1 << 2)#define CACRR 0x10
@@ -409,6 +411,10 @@ static void __init imx6sl_clocks_init(struct device_node *ccm_node) clks[IMX6SL_CLK_USDHC3 ] =imx_clk_gate2 ("usdhc3" ,"usdhc3_podf" , base +0x80 ,6 ); clks[IMX6SL_CLK_USDHC4 ] =imx_clk_gate2 ("usdhc4" ,"usdhc4_podf" , base +0x80 ,8 ); +/* Ensure the MMDC CH0 handshake is bypassed */ +writel_relaxed (readl_relaxed (base +CCDR ) | +BM_CCM_CCDR_MMDC_CH0_MASK , base +CCDR ); +imx_check_clocks (clks,ARRAY_SIZE (clks)); clk_data.clks = clks;
drivers/clk/meson/meson8b.c +12 -4
@@ -583,7 +583,7 @@ static struct clk_regmap meson8b_cpu_scale_div = { .data = &(struct clk_regmap_div_data){ .offset =HHI_SYS_CPU_CLK_CNTL1 , .shift =20 , - .width =9 , + .width =10 , .table = cpu_scale_table, .flags =CLK_DIVIDER_ALLOW_ZERO , },
@@ -596,20 +596,27 @@ static struct clk_regmap meson8b_cpu_scale_div = { }, }; +static u32 mux_table_cpu_scale_out_sel[] = {0 ,1 ,3 };static struct clk_regmap meson8b_cpu_scale_out_sel = { .data = &(struct clk_regmap_mux_data ){ .offset =HHI_SYS_CPU_CLK_CNTL0 , .mask =0x3 , .shift =2 , + .table = mux_table_cpu_scale_out_sel, }, .hw.init = &(struct clk_init_data ){ .name ="cpu_scale_out_sel" , .ops = &clk_regmap_mux_ro_ops, +/* +* NOTE: We are skipping the parent with value 0x2 (which is +* "cpu_div3") because it results in a duty cycle of 33% which +* makes the system unstable and can result in a lockup of the +* whole system. +*/ .parent_names = (const char *[]) {"cpu_in_sel" ,"cpu_div2" , -"cpu_div3" ,"cpu_scale_div" }, - .num_parents =4 , + .num_parents =3 , .flags =CLK_SET_RATE_PARENT , }, };
@@ -627,7 +634,8 @@ static struct clk_regmap meson8b_cpu_clk = { "cpu_scale_out_sel" }, .num_parents = 2, .flags = (CLK_SET_RATE_PARENT | - CLK_SET_RATE_NO_REPARENT), +CLK_SET_RATE_NO_REPARENT | + CLK_IS_CRITICAL), }, };
drivers/clk/sunxi-ng/ccu-sun8i-a33.c +3 -3
@@ -366,10 +366,10 @@ static SUNXI_CCU_MP_WITH_MUX_GATE(spi1_clk, "spi1", mod0_default_parents, 0x0a4,static const char *const i2s_parents[] = {"pll-audio-8x" ,"pll-audio-4x" ,"pll-audio-2x" ,"pll-audio" }; static SUNXI_CCU_MUX_WITH_GATE(i2s0_clk, "i2s0", i2s_parents, - 0x0b0, 16, 2, BIT(31), 0); + 0x0b0, 16, 2, BIT(31), CLK_SET_RATE_PARENT); static SUNXI_CCU_MUX_WITH_GATE(i2s1_clk, "i2s1", i2s_parents, - 0x0b4, 16, 2, BIT(31), 0); + 0x0b4, 16, 2, BIT(31), CLK_SET_RATE_PARENT);/* TODO: the parent for most of the USB clocks is not known */ static SUNXI_CCU_GATE(usb_phy0_clk, "usb-phy0", "osc24M",
@@ -446,7 +446,7 @@ static SUNXI_CCU_M_WITH_GATE(ve_clk, "ve", "pll-ve", static SUNXI_CCU_GATE(ac_dig_clk, "ac-dig", "pll-audio", 0x140, BIT(31), CLK_SET_RATE_PARENT); static SUNXI_CCU_GATE(ac_dig_4x_clk, "ac-dig-4x", "pll-audio-4x", - 0x140, BIT(30), 0); + 0x140, BIT(30), CLK_SET_RATE_PARENT); static SUNXI_CCU_GATE(avs_clk, "avs", "osc24M", 0x144, BIT(31), 0);
drivers/cpuidle/cpuidle-big_little.c +6 -1
@@ -167,6 +167,7 @@ static int __init bl_idle_init(void) {int ret;struct device_node *root =of_find_node_by_path ("/" ); +const struct of_device_id *match_id;if (!root)return -ENODEV ;
@@ -174,7 +175,11 @@ static int __init bl_idle_init(void)/* * Initialize the driver just for a compliant set of machines */ -if (!of_match_node (compatible_machine_match, root)) + match_id =of_match_node (compatible_machine_match, root); + +of_node_put (root); + +if (!match_id)return -ENODEV ;if (!mcpm_is_available ())
drivers/crypto/ux500/cryp/cryp_core.c +2 -2
@@ -556,7 +556,7 @@ static int cryp_set_dma_transfer(struct cryp_ctx *ctx, desc =dmaengine_prep_slave_sg (channel, ctx->device->dma.sg_src, ctx->device->dma.sg_src_len, - direction,DMA_CTRL_ACK ); +DMA_MEM_TO_DEV ,DMA_CTRL_ACK );break ;case DMA_FROM_DEVICE :
@@ -580,7 +580,7 @@ static int cryp_set_dma_transfer(struct cryp_ctx *ctx, desc =dmaengine_prep_slave_sg (channel, ctx->device->dma.sg_dst, ctx->device->dma.sg_dst_len, - direction, +DMA_DEV_TO_MEM ,DMA_CTRL_ACK |DMA_PREP_INTERRUPT );
drivers/crypto/ux500/hash/hash_core.c +1 -1
@@ -166,7 +166,7 @@ static int hash_set_dma_transfer(struct hash_ctx *ctx, struct scatterlist *sg, __func__); desc =dmaengine_prep_slave_sg (channel, ctx->device->dma.sg, ctx->device->dma.sg_len, - direction,DMA_CTRL_ACK |DMA_PREP_INTERRUPT ); +DMA_MEM_TO_DEV ,DMA_CTRL_ACK |DMA_PREP_INTERRUPT );if (!desc) {dev_err (ctx->device->dev,"%s: dmaengine_prep_slave_sg() failed!\n" , __func__);
drivers/dma/bcm2835-dma.c +25 -45
116 lines not on this page · raw message
drivers/dma/imx-dma.c +4 -4
@@ -617,7 +617,7 @@ static void imxdma_tasklet(unsigned long data) {struct imxdma_channel *imxdmac = (void *)data;struct imxdma_engine *imxdma = imxdmac->imxdma; -struct imxdma_desc *desc; +struct imxdma_desc *desc, *next_desc;unsigned long flags;spin_lock_irqsave (&imxdma->lock, flags);
@@ -647,10 +647,10 @@ static void imxdma_tasklet(unsigned long data)list_move_tail (imxdmac->ld_active.next, &imxdmac->ld_free);if (!list_empty (&imxdmac->ld_queue)) { - desc = list_first_entry(&imxdmac->ld_queue, struct imxdma_desc, - node); + next_desc =list_first_entry (&imxdmac->ld_queue, + struct imxdma_desc, node);list_move_tail (imxdmac->ld_queue.next, &imxdmac->ld_active); -if (imxdma_xfer_desc (desc) <0 ) +if (imxdma_xfer_desc (next_desc) <0 )dev_warn (imxdma->dev,"%s: channel: %d couldn't xfer desc\n" , __func__, imxdmac->channel); }
drivers/dma/xilinx/zynqmp_dma.c +1 -1
@@ -163,7 +163,7 @@ struct zynqmp_dma_desc_ll {u32 ctrl;u64 nxtdscraddr;u64 rsvd; -};__aligned(64) +};/** * struct zynqmp_dma_desc_sw - Per Transaction structure
drivers/firmware/efi/vars.c +78 -21
227 lines not on this page · raw message
drivers/fpga/altera-cvp.c +13 -2
@@ -403,6 +403,7 @@ static int altera_cvp_probe(struct pci_dev *pdev,struct altera_cvp_conf *conf;struct fpga_manager *mgr;u16 cmd, val; +u32 regval;int ret;/*
@@ -416,6 +417,14 @@ static int altera_cvp_probe(struct pci_dev *pdev,return -ENODEV ; } +pci_read_config_dword (pdev,VSE_CVP_STATUS , ®val); +if (!(regval &VSE_CVP_STATUS_CVP_EN )) { +dev_err (&pdev->dev, +"CVP is disabled for this device: CVP_STATUS Reg 0x%x\n" , + regval); +return -ENODEV ; + } + conf =devm_kzalloc (&pdev->dev,sizeof (*conf),GFP_KERNEL );if (!conf)return -ENOMEM ;
@@ -471,7 +480,8 @@ static int altera_cvp_probe(struct pci_dev *pdev,return 0 ; err_unmap: -pci_iounmap (pdev, conf->map); +if (conf->map) +pci_iounmap (pdev, conf->map);pci_release_region (pdev,CVP_BAR ); err_disable: cmd &= ~PCI_COMMAND_MEMORY ;
@@ -486,7 +496,8 @@ static void altera_cvp_remove(struct pci_dev *pdev)u16 cmd;fpga_mgr_unregister (mgr); -pci_iounmap (pdev, conf->map); +if (conf->map) +pci_iounmap (pdev, conf->map);pci_release_region (pdev,CVP_BAR );pci_read_config_word (pdev,PCI_COMMAND , &cmd); cmd &= ~PCI_COMMAND_MEMORY ;
drivers/gpio/gpio-mt7621.c +8 -2
@@ -244,6 +244,8 @@ mediatek_gpio_bank_probe(struct device *dev, rg->chip.of_xlate = mediatek_gpio_xlate; rg->chip.label =devm_kasprintf (dev,GFP_KERNEL ,"%s-bank%d" ,dev_name (dev), bank); +if (!rg->chip.label) +return -ENOMEM ; ret =devm_gpiochip_add_data (dev, &rg->chip, mtk);if (ret <0 ) {
@@ -295,6 +297,7 @@ mediatek_gpio_probe(struct platform_device *pdev)struct device_node *np = dev->of_node;struct mtk *mtk;int i; +int ret; mtk =devm_kzalloc (dev,sizeof (*mtk),GFP_KERNEL );if (!mtk)
@@ -309,8 +312,11 @@ mediatek_gpio_probe(struct platform_device *pdev)platform_set_drvdata (pdev, mtk); mediatek_gpio_irq_chip.name =dev_name (dev); -for (i =0 ; i <MTK_BANK_CNT ; i++) -mediatek_gpio_bank_probe (dev, np, i); +for (i =0 ; i <MTK_BANK_CNT ; i++) { + ret =mediatek_gpio_bank_probe (dev, np, i); +if (ret) +return ret; + }return 0 ; }
drivers/gpio/gpiolib.c +21 -4
@@ -2279,6 +2279,12 @@ static int gpiod_request_commit(struct gpio_desc *desc, const char *label)unsigned long flags;unsigned offset; +if (label) { + label =kstrdup_const (label,GFP_KERNEL ); +if (!label) +return -ENOMEM ; + } +spin_lock_irqsave (&gpio_lock, flags);/* NOTE: gpio_request() can be called in early boot,
@@ -2289,6 +2295,7 @@ static int gpiod_request_commit(struct gpio_desc *desc, const char *label)desc_set_label (desc, label ? :"?" ); status =0 ; }else { +kfree_const (label); status = -EBUSY ; goto done; }
@@ -2305,6 +2312,7 @@ static int gpiod_request_commit(struct gpio_desc *desc, const char *label)if (status <0 ) {desc_set_label (desc,NULL ); +kfree_const (label);clear_bit (FLAG_REQUESTED , &desc->flags); goto done; }
@@ -2400,6 +2408,7 @@ static bool gpiod_free_commit(struct gpio_desc *desc) chip->free (chip,gpio_chip_hwgpio (desc));spin_lock_irqsave (&gpio_lock, flags); } +kfree_const (desc->label);desc_set_label (desc,NULL );clear_bit (FLAG_ACTIVE_LOW , &desc->flags);clear_bit (FLAG_REQUESTED , &desc->flags);
@@ -3221,11 +3230,19 @@ EXPORT_SYMBOL_GPL(gpiod_cansleep);* @desc: gpio to set the consumer name on * @name: the new consumer name */ -void gpiod_set_consumer_name (struct gpio_desc *desc,const char *name) +int gpiod_set_consumer_name (struct gpio_desc *desc,const char *name) { -VALIDATE_DESC_VOID (desc); -/* Just overwrite whatever the previous name was */ - desc->label = name; +VALIDATE_DESC (desc); +if (name) { + name =kstrdup_const (name,GFP_KERNEL ); +if (!name) +return -ENOMEM ; + } + +kfree_const (desc->label); +desc_set_label (desc, name); + +return 0 ; }EXPORT_SYMBOL_GPL (gpiod_set_consumer_name);
drivers/gpu/drm/amd/display/dc/core/dc_link.c +17 -6
@@ -324,7 +324,7 @@ bool dc_link_is_dp_sink_present(struct dc_link *link) {enum gpio_result gpio_result;uint32_t clock_pin =0 ; - +uint8_t retry =0 ;struct ddc *ddc; enum connector_id connector_id =
@@ -353,11 +353,22 @@ bool dc_link_is_dp_sink_present(struct dc_link *link)return present; } -/* Read GPIO: DP sink is present if both clock and data pins are zero */ -/* [anaumov] in DAL2, there was no check for GPIO failure */ - - gpio_result =dal_gpio_get_value (ddc->pin_clock, &clock_pin); -ASSERT (gpio_result ==GPIO_RESULT_OK ); +/* +* Read GPIO: DP sink is present if both clock and data pins are zero +* +* [W/A] plug-unplug DP cable, sometimes customer board has +* one short pulse on clk_pin(1V, < 1ms). DP will be config to HDMI/DVI +* then monitor can't br light up. Add retry 3 times +* But in real passive dongle, it need additional 3ms to detect +*/ +do { + gpio_result =dal_gpio_get_value (ddc->pin_clock, &clock_pin); +ASSERT (gpio_result ==GPIO_RESULT_OK ); +if (clock_pin) +udelay (1000 ); +else +break ; + }while (retry++ <3 ); present = (gpio_result ==GPIO_RESULT_OK ) && !clock_pin;
drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c +2 -1
@@ -2240,7 +2240,8 @@ static void get_active_converter_info(translate_dpcd_max_bpc ( hdmi_color_caps.bits.MAX_BITS_PER_COLOR_COMPONENT); - link->dpcd_caps.dongle_caps.extendedCapValid = true; +if (link->dpcd_caps.dongle_caps.dp_hdmi_max_pixel_clk !=0 ) + link->dpcd_caps.dongle_caps.extendedCapValid = true; }break ;
drivers/gpu/drm/amd/display/dc/core/dc_resource.c +2 -0
@@ -1917,6 +1917,8 @@ enum dc_status resource_map_pool_resources(} */ +calculate_phy_pix_clks (stream); +/* acquire new resources */ pipe_idx =acquire_first_free_pipe (&context->res_ctx, pool, stream);
drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c +10 -1
@@ -1268,10 +1268,19 @@ static void program_scaler(const struct dc *dc, pipe_ctx->plane_res.scl_data.lb_params.depth, &pipe_ctx->stream->bit_depth_params); -if (pipe_ctx->stream_res.tg->funcs->set_overscan_blank_color) +if (pipe_ctx->stream_res.tg->funcs->set_overscan_blank_color) { +/* +* The way 420 is packed, 2 channels carry Y component, 1 channel +* alternate between Cb and Cr, so both channels need the pixel +* value for Y +*/ +if (pipe_ctx->stream->timing.pixel_encoding ==PIXEL_ENCODING_YCBCR420 ) + color.color_r_cr = color.color_g_y; + pipe_ctx->stream_res.tg->funcs->set_overscan_blank_color ( pipe_ctx->stream_res.tg, &color); + } pipe_ctx->plane_res.xfm->funcs->transform_set_scaler (pipe_ctx->plane_res.xfm, &pipe_ctx->plane_res.scl_data);
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c +11 -1
@@ -1190,7 +1190,8 @@ static bool dcn10_set_input_transfer_func(struct pipe_ctx *pipe_ctx, tf = plane_state->in_transfer_func;if (plane_state->gamma_correction && - !plane_state->gamma_correction->is_identity + !dpp_base->ctx->dc->debug.always_use_regamma + && !plane_state->gamma_correction->is_identity &&dce_use_lut (plane_state->format)) dpp_base->funcs->dpp_program_input_lut (dpp_base, plane_state->gamma_correction);
@@ -2120,6 +2121,15 @@ static void dcn10_blank_pixel_data( color_space = stream->output_color_space;color_space_to_black_color (dc, color_space, &black_color); +/* +* The way 420 is packed, 2 channels carry Y component, 1 channel +* alternate between Cb and Cr, so both channels need the pixel +* value for Y +*/ +if (stream->timing.pixel_encoding ==PIXEL_ENCODING_YCBCR420 ) + black_color.color_r_cr = black_color.color_g_y; + +if (stream_res->tg->funcs->set_blank_color) stream_res->tg->funcs->set_blank_color( stream_res->tg,
drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.c +15 -2
@@ -1528,8 +1528,21 @@ static int polaris10_populate_clock_stretcher_data_table(struct pp_hwmgr *hwmgr) efuse = efuse >>24 ;if (hwmgr->chip_id ==CHIP_POLARIS10 ) { - min =1000 ; - max =2300 ; +if (hwmgr->is_kicker) { + min =1200 ; + max =2500 ; + }else { + min =1000 ; + max =2300 ; + } + }else if (hwmgr->chip_id ==CHIP_POLARIS11 ) { +if (hwmgr->is_kicker) { + min =900 ; + max =2100 ; + }else { + min =1100 ; + max =2100 ; + } }else { min =1100 ; max =2100 ;
drivers/gpu/drm/drm_atomic_helper.c +6 -2
@@ -3192,7 +3192,7 @@ EXPORT_SYMBOL(drm_atomic_helper_suspend);int drm_atomic_helper_commit_duplicated_state (struct drm_atomic_state *state,struct drm_modeset_acquire_ctx *ctx) { -int i; +int i, ret;struct drm_plane *plane;struct drm_plane_state *new_plane_state;struct drm_connector *connector;
@@ -3211,7 +3211,11 @@ int drm_atomic_helper_commit_duplicated_state(struct drm_atomic_state *state,for_each_new_connector_in_state (state, connector, new_conn_state, i) state->connectors[i].old_state = connector->state; -return drm_atomic_commit (state); + ret =drm_atomic_commit (state); + + state->acquire_ctx =NULL ; + +return ret; }EXPORT_SYMBOL (drm_atomic_helper_commit_duplicated_state);
drivers/gpu/drm/drm_bufs.c +3 -0
@@ -36,6 +36,8 @@#include <drm/drmP.h> #include "drm_legacy.h" +#include <linux/nospec.h> +static struct drm_map_list *drm_find_matching_map (struct drm_device *dev,struct drm_local_map *map) {
@@ -1417,6 +1419,7 @@ int drm_legacy_freebufs(struct drm_device *dev, void *data, idx, dma->buf_count - 1);return -EINVAL ; } + idx =array_index_nospec (idx, dma->buf_count); buf = dma->buflist[idx];if (buf->file_priv != file_priv) { DRM_ERROR("Process %d freeing buffer not owned\n",
drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c +1 -1
@@ -331,7 +331,7 @@ static void dpu_encoder_phys_vid_vblank_irq(void *arg, int irq_idx)if (hw_ctl && hw_ctl->ops.get_flush_register) flush_register = hw_ctl->ops.get_flush_register (hw_ctl); -if (flush_register ==0 ) +if (!(flush_register & hw_ctl->ops.get_pending_flush (hw_ctl))) new_cnt =atomic_add_unless (&phys_enc->pending_kickoff_cnt,-1 ,0 );spin_unlock_irqrestore (phys_enc->enc_spinlock, lock_flags);
drivers/gpu/drm/msm/dsi/pll/dsi_pll_10nm.c +4 -4
@@ -17,7 +17,7 @@* | | * | | * +---------+ | +----------+ | +----+ -* dsi0vco_clk ---| out_div |--o--| divl_3_0 |--o--| /8 |-- dsi0pllbyte +* dsi0vco_clk ---| out_div |--o--| divl_3_0 |--o--| /8 |-- dsi0_phy_pll_out_byteclk * +---------+ | +----------+ | +----+ * | | * | | dsi0_pll_by_2_bit_clk
@@ -25,7 +25,7 @@* | | +----+ | |\ dsi0_pclk_mux * | |--| /2 |--o--| \ | * | | +----+ | \ | +---------+ -* | --------------| |--o--| div_7_4 |-- dsi0pll +* | --------------| |--o--| div_7_4 |-- dsi0_phy_pll_out_dsiclk * |------------------------------| / +---------+ * | +-----+ | / * -----------| /4? |--o----------|/
@@ -690,7 +690,7 @@ static int pll_10nm_register(struct dsi_pll_10nm *pll_10nm) hws[num++] = hw; -snprintf (clk_name,32 ,"dsi%dpllbyte" , pll_10nm->id); +snprintf (clk_name,32 ,"dsi%d_phy_pll_out_byteclk" , pll_10nm->id);snprintf (parent,32 ,"dsi%d_pll_bit_clk" , pll_10nm->id);/* DSI Byte clock = VCO_CLK / OUT_DIV / BIT_DIV / 8 */
@@ -739,7 +739,7 @@ static int pll_10nm_register(struct dsi_pll_10nm *pll_10nm) hws[num++] = hw; -snprintf (clk_name,32 ,"dsi%dpll" , pll_10nm->id); +snprintf (clk_name,32 ,"dsi%d_phy_pll_out_dsiclk" , pll_10nm->id);snprintf (parent,32 ,"dsi%d_pclk_mux" , pll_10nm->id);/* PIX CLK DIV : DIV_CTRL_7_4*/
drivers/gpu/drm/rockchip/cdn-dp-reg.c +1 -1
@@ -147,7 +147,7 @@ static int cdn_dp_mailbox_validate_receive(struct cdn_dp_device *dp, }static int cdn_dp_mailbox_read_receive (struct cdn_dp_device *dp, -u8 *buff,u8 buff_size) +u8 *buff,u16 buff_size) {u32 i;int ret;
drivers/gpu/drm/sun4i/sun8i_tcon_top.c +7 -0
@@ -168,6 +168,13 @@ static int sun8i_tcon_top_bind(struct device *dev, struct device *master, goto err_assert_reset; } +/* +* At least on H6, some registers have some bits set by default +* which may cause issues. Clear them here. +*/ +writel (0 , regs +TCON_TOP_PORT_SEL_REG ); +writel (0 , regs +TCON_TOP_GATE_SRC_REG ); +/* * TCON TOP has two muxes, which select parent clock for each TCON TV * channel clock. Parent could be either TCON TV or TVE clock. For now
drivers/gpu/drm/v3d/v3d_bo.c +1 -0
@@ -293,6 +293,7 @@ v3d_prime_import_sg_table(struct drm_device *dev, bo->resv = attach->dmabuf->resv; bo->sgt = sgt; + obj->import_attach = attach;v3d_bo_get_pages (bo);v3d_mmu_insert_ptes (bo);
drivers/gpu/drm/vc4/vc4_plane.c +7 -5
@@ -315,12 +315,14 @@ static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state)vc4_get_scaling_mode (vc4_state->src_h[1 ], vc4_state->crtc_h); -/* YUV conversion requires that horizontal scaling be enabled, -* even on a plane that's otherwise 1:1. Looks like only PPF -* works in that case, so let's pick that one. +/* YUV conversion requires that horizontal scaling be enabled +* on the UV plane even if vc4_get_scaling_mode() returned +* VC4_SCALING_NONE (which can happen when the down-scaling +* ratio is 0.5). Let's force it to VC4_SCALING_PPF in this +* case. */ -if (vc4_state->is_unity) - vc4_state->x_scaling[0 ] =VC4_SCALING_PPF ; +if (vc4_state->x_scaling[1 ] ==VC4_SCALING_NONE ) + vc4_state->x_scaling[1 ] =VC4_SCALING_PPF ; }else { vc4_state->is_yuv = false; vc4_state->x_scaling[1 ] =VC4_SCALING_NONE ;
drivers/gpu/drm/vgem/vgem_drv.c +8 -8
@@ -471,31 +471,31 @@ static int __init vgem_init(void)if (!vgem_device)return -ENOMEM ; - ret =drm_dev_init (&vgem_device->drm, &vgem_driver,NULL ); -if (ret) - goto out_free; - vgem_device->platform =platform_device_register_simple ("vgem" ,-1 ,NULL ,0 );if (IS_ERR (vgem_device->platform)) { ret =PTR_ERR (vgem_device->platform); - goto out_fini; + goto out_free; }dma_coerce_mask_and_coherent (&vgem_device->platform->dev,DMA_BIT_MASK (64 )); + ret =drm_dev_init (&vgem_device->drm, &vgem_driver, + &vgem_device->platform->dev); +if (ret) + goto out_unregister;/* Final step: expose the device/driver to userspace */ ret =drm_dev_register (&vgem_device->drm,0 );if (ret) - goto out_unregister; + goto out_fini;return 0 ; -out_unregister: -platform_device_unregister (vgem_device->platform); out_fini:drm_dev_fini (&vgem_device->drm); +out_unregister: +platform_device_unregister (vgem_device->platform); out_free:kfree (vgem_device);return ret;
drivers/gpu/ipu-v3/ipu-image-convert.c +7 -3
@@ -1524,7 +1524,7 @@ int ipu_image_convert_queue(struct ipu_image_convert_run *run)EXPORT_SYMBOL_GPL (ipu_image_convert_queue);/* Abort any active or pending conversions for this context */ -void ipu_image_convert_abort (struct ipu_image_convert_ctx *ctx) +static void __ipu_image_convert_abort (struct ipu_image_convert_ctx *ctx) {struct ipu_image_convert_chan *chan = ctx->chan;struct ipu_image_convert_priv *priv = chan->priv;
@@ -1551,7 +1551,7 @@ void ipu_image_convert_abort(struct ipu_image_convert_ctx *ctx) need_abort = (run_count || active_run); - ctx->aborting = need_abort; + ctx->aborting = true;spin_unlock_irqrestore (&chan->irqlock, flags);
@@ -1572,7 +1572,11 @@ void ipu_image_convert_abort(struct ipu_image_convert_ctx *ctx)dev_warn (priv->ipu->dev,"%s: timeout\n" , __func__);force_abort (ctx); } +} +void ipu_image_convert_abort (struct ipu_image_convert_ctx *ctx) +{ +__ipu_image_convert_abort (ctx); ctx->aborting = false; }EXPORT_SYMBOL_GPL (ipu_image_convert_abort);
@@ -1586,7 +1590,7 @@ void ipu_image_convert_unprepare(struct ipu_image_convert_ctx *ctx)bool put_res;/* make sure no runs are hanging around */ -ipu_image_convert_abort (ctx); +__ipu_image_convert_abort (ctx);dev_dbg (priv->ipu->dev,"%s: task %u: removing ctx %p\n" , __func__, chan->ic_task, ctx);
drivers/hid/hid-debug.c +47 -73
181 lines not on this page · raw message
drivers/hid/hid-lenovo.c +8 -2
@@ -743,7 +743,9 @@ static int lenovo_probe_tpkbd(struct hid_device *hdev) data_pointer->led_mute.brightness_get = lenovo_led_brightness_get_tpkbd; data_pointer->led_mute.brightness_set = lenovo_led_brightness_set_tpkbd; data_pointer->led_mute.dev = dev; -led_classdev_register (dev, &data_pointer->led_mute); + ret =led_classdev_register (dev, &data_pointer->led_mute); +if (ret <0 ) + goto err; data_pointer->led_micmute.name = name_micmute; data_pointer->led_micmute.brightness_get =
@@ -751,7 +753,11 @@ static int lenovo_probe_tpkbd(struct hid_device *hdev) data_pointer->led_micmute.brightness_set = lenovo_led_brightness_set_tpkbd; data_pointer->led_micmute.dev = dev; -led_classdev_register (dev, &data_pointer->led_micmute); + ret =led_classdev_register (dev, &data_pointer->led_micmute); +if (ret <0 ) { +led_classdev_unregister (&data_pointer->led_mute); + goto err; + }lenovo_features_set_tpkbd (hdev);
drivers/hwmon/lm80.c +19 -7
@@ -360,9 +360,11 @@ static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr,struct i2c_client *client = data->client;unsigned long min, val;u8 reg; -int err =kstrtoul (buf,10 , &val); -if (err <0 ) -return err; +int rv; + + rv =kstrtoul (buf,10 , &val); +if (rv <0 ) +return rv;/* Save fan_min */ mutex_lock (&data->update_lock);
@@ -390,8 +392,11 @@ static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr,return -EINVAL ; } - reg = (lm80_read_value (client,LM80_REG_FANDIV ) & - ~(3 << (2 * (nr +1 )))) | (data->fan_div[nr] << (2 * (nr +1 ))); + rv =lm80_read_value (client,LM80_REG_FANDIV ); +if (rv <0 ) +return rv; + reg = (rv & ~(3 << (2 * (nr +1 )))) + | (data->fan_div[nr] << (2 * (nr +1 )));lm80_write_value (client,LM80_REG_FANDIV , reg);/* Restore fan_min */
@@ -623,6 +628,7 @@ static int lm80_probe(struct i2c_client *client,struct device *dev = &client->dev;struct device *hwmon_dev;struct lm80_data *data; +int rv; data =devm_kzalloc (dev,sizeof (struct lm80_data ),GFP_KERNEL );if (!data)
@@ -635,8 +641,14 @@ static int lm80_probe(struct i2c_client *client,lm80_init_client (client);/* A few vars need to be filled upon startup */ - data->fan[f_min][0 ] =lm80_read_value (client,LM80_REG_FAN_MIN (1 )); - data->fan[f_min][1 ] =lm80_read_value (client,LM80_REG_FAN_MIN (2 )); + rv =lm80_read_value (client,LM80_REG_FAN_MIN (1 )); +if (rv <0 ) +return rv; + data->fan[f_min][0 ] = rv; + rv =lm80_read_value (client,LM80_REG_FAN_MIN (2 )); +if (rv <0 ) +return rv; + data->fan[f_min][1 ] = rv; hwmon_dev =devm_hwmon_device_register_with_groups (dev, client->name, data, lm80_groups);
drivers/i2c/busses/i2c-axxia.c +16 -16
@@ -296,22 +296,7 @@ static irqreturn_t axxia_i2c_isr(int irq, void *_dev)i2c_int_disable (idev,MST_STATUS_TFL ); } -if (status &MST_STATUS_SCC ) { -/* Stop completed */ -i2c_int_disable (idev, ~MST_STATUS_TSS ); -complete (&idev->msg_complete); - }else if (status &MST_STATUS_SNS ) { -/* Transfer done */ -i2c_int_disable (idev, ~MST_STATUS_TSS ); -if (i2c_m_rd (idev->msg) && idev->msg_xfrd < idev->msg->len) -axxia_i2c_empty_rx_fifo (idev); -complete (&idev->msg_complete); - }else if (status &MST_STATUS_TSS ) { -/* Transfer timeout */ - idev->msg_err = -ETIMEDOUT ; -i2c_int_disable (idev, ~MST_STATUS_TSS ); -complete (&idev->msg_complete); - }else if (unlikely (status &MST_STATUS_ERR )) { +if (unlikely (status &MST_STATUS_ERR )) {/* Transfer error */ i2c_int_disable (idev, ~0 );if (status &MST_STATUS_AL )
@@ -328,6 +313,21 @@ static irqreturn_t axxia_i2c_isr(int irq, void *_dev)readl (idev->base +MST_TX_BYTES_XFRD ), readl(idev->base + MST_TX_XFER));complete (&idev->msg_complete); + }else if (status &MST_STATUS_SCC ) { +/* Stop completed */ +i2c_int_disable (idev, ~MST_STATUS_TSS ); +complete (&idev->msg_complete); + }else if (status &MST_STATUS_SNS ) { +/* Transfer done */ +i2c_int_disable (idev, ~MST_STATUS_TSS ); +if (i2c_m_rd (idev->msg) && idev->msg_xfrd < idev->msg->len) +axxia_i2c_empty_rx_fifo (idev); +complete (&idev->msg_complete); + }else if (status &MST_STATUS_TSS ) { +/* Transfer timeout */ + idev->msg_err = -ETIMEDOUT ; +i2c_int_disable (idev, ~MST_STATUS_TSS ); +complete (&idev->msg_complete); } out:
drivers/i2c/busses/i2c-sh_mobile.c +2 -0
@@ -800,6 +800,7 @@ static const struct sh_mobile_dt_config r8a7740_dt_config = {static const struct of_device_id sh_mobile_i2c_dt_ids[] = { { .compatible ="renesas,iic-r8a73a4" , .data = &fast_clock_dt_config }, { .compatible ="renesas,iic-r8a7740" , .data = &r8a7740_dt_config }, + { .compatible ="renesas,iic-r8a774c0" , .data = &fast_clock_dt_config }, { .compatible ="renesas,iic-r8a7790" , .data = &v2_freq_calc_dt_config }, { .compatible ="renesas,iic-r8a7791" , .data = &fast_clock_dt_config }, { .compatible ="renesas,iic-r8a7792" , .data = &fast_clock_dt_config },
@@ -808,6 +809,7 @@ static const struct of_device_id sh_mobile_i2c_dt_ids[] = { { .compatible = "renesas,rcar-gen2-iic", .data = &fast_clock_dt_config }, { .compatible = "renesas,iic-r8a7795", .data = &fast_clock_dt_config }, { .compatible = "renesas,rcar-gen3-iic", .data = &fast_clock_dt_config }, + { .compatible = "renesas,iic-r8a77990", .data = &fast_clock_dt_config }, { .compatible = "renesas,iic-sh73a0", .data = &fast_clock_dt_config }, { .compatible = "renesas,rmobile-iic", .data = &default_dt_config }, {},
drivers/iio/accel/kxcjk-1013.c +1 -0
@@ -1490,6 +1490,7 @@ static const struct acpi_device_id kx_acpi_match[] = { {"KXCJ1008", KXCJ91008}, {"KXCJ9000", KXCJ91008}, {"KIOX000A", KXCJ91008}, + {"KIOX010A", KXCJ91008}, /* KXCJ91008 inside the display of a 2-in-1 */ {"KXTJ1009", KXTJ21009}, {"SMO8500", KXCJ91008}, { },
drivers/iio/adc/meson_saradc.c +10 -4
@@ -587,8 +587,11 @@ static int meson_sar_adc_clk_init(struct iio_dev *indio_dev,struct clk_init_data init;const char *clk_parents[1 ]; - init.name =devm_kasprintf (&indio_dev->dev,GFP_KERNEL ,"%pOF#adc_div" , - indio_dev->dev.of_node); + init.name =devm_kasprintf (&indio_dev->dev,GFP_KERNEL ,"%s#adc_div" , +dev_name (indio_dev->dev.parent)); +if (!init.name) +return -ENOMEM ; + init.flags =0 ; init.ops = &clk_divider_ops; clk_parents[0 ] =__clk_get_name (priv->clkin);
@@ -606,8 +609,11 @@ static int meson_sar_adc_clk_init(struct iio_dev *indio_dev,if (WARN_ON (IS_ERR (priv->adc_div_clk)))return PTR_ERR (priv->adc_div_clk); - init.name =devm_kasprintf (&indio_dev->dev,GFP_KERNEL ,"%pOF#adc_en" , - indio_dev->dev.of_node); + init.name =devm_kasprintf (&indio_dev->dev,GFP_KERNEL ,"%s#adc_en" , +dev_name (indio_dev->dev.parent)); +if (!init.name) +return -ENOMEM ; + init.flags =CLK_SET_RATE_PARENT ; init.ops = &clk_gate_ops; clk_parents[0 ] =__clk_get_name (priv->adc_div_clk);
drivers/infiniband/hw/hfi1/rc.c +2 -0
@@ -1157,6 +1157,7 @@ void hfi1_rc_send_complete(struct rvt_qp *qp, struct hfi1_opa_header *opah)if (cmp_psn (wqe->lpsn, qp->s_sending_psn) >=0 &&cmp_psn (qp->s_sending_psn, qp->s_sending_hpsn) <=0 )break ; +rvt_qp_wqe_unreserve (qp, wqe); s_last = qp->s_last;trace_hfi1_qp_send_completion (qp, wqe, s_last);if (++s_last >= qp->s_size)
@@ -1209,6 +1210,7 @@ static struct rvt_swqe *do_rc_completion(struct rvt_qp *qp,u32 s_last;rvt_put_swqe (wqe); +rvt_qp_wqe_unreserve (qp, wqe); s_last = qp->s_last;trace_hfi1_qp_send_completion (qp, wqe, s_last);if (++s_last >= qp->s_size)
drivers/infiniband/hw/hfi1/ruc.c +6 -1
@@ -278,6 +278,8 @@ static void ruc_loopback(struct rvt_qp *sqp) goto op_err;if (!ret) goto rnr_nak; +if (wqe->length > qp->r_len) + goto inv_err;break ;case IB_WR_RDMA_WRITE_WITH_IMM :
@@ -445,7 +447,10 @@ static void ruc_loopback(struct rvt_qp *sqp) goto err; inv_err: - send_status =IB_WC_REM_INV_REQ_ERR ; + send_status = + sqp->ibqp.qp_type ==IB_QPT_RC ? +IB_WC_REM_INV_REQ_ERR : +IB_WC_SUCCESS ; wc.status =IB_WC_LOC_QP_OP_ERR ; goto err;
drivers/infiniband/hw/qib/qib_ruc.c +6 -1
@@ -274,6 +274,8 @@ static void qib_ruc_loopback(struct rvt_qp *sqp) goto op_err;if (!ret) goto rnr_nak; +if (wqe->length > qp->r_len) + goto inv_err;break ;case IB_WR_RDMA_WRITE_WITH_IMM :
@@ -434,7 +436,10 @@ static void qib_ruc_loopback(struct rvt_qp *sqp) goto err; inv_err: - send_status =IB_WC_REM_INV_REQ_ERR ; + send_status = + sqp->ibqp.qp_type ==IB_QPT_RC ? +IB_WC_REM_INV_REQ_ERR : +IB_WC_SUCCESS ; wc.status =IB_WC_LOC_QP_OP_ERR ; goto err;
drivers/iommu/amd_iommu.c +8 -1
@@ -438,7 +438,14 @@ static int iommu_init_device(struct device *dev) dev_data->alias =get_alias (dev); -if (dev_is_pci (dev) &&pci_iommuv2_capable (to_pci_dev (dev))) { +/* +* By default we use passthrough mode for IOMMUv2 capable device. +* But if amd_iommu=force_isolation is set (e.g. to debug DMA to +* invalid address), we ignore the capability for the device so +* it'll be forced to go into translation mode. +*/ +if ((iommu_pass_through || !amd_iommu_force_isolation) && +dev_is_pci (dev) &&pci_iommuv2_capable (to_pci_dev (dev))) {struct amd_iommu *iommu; iommu = amd_iommu_rlookup_table[dev_data->devid];
drivers/iommu/arm-smmu-v3.c +12 -2
@@ -586,7 +586,11 @@ struct arm_smmu_device {struct arm_smmu_strtab_cfg strtab_cfg; -u32 sync_count; +/* Hi16xx adds an extra 32 bits of goodness to its MSI payload */ +union { +u32 sync_count; +u64 padding; + };/* IOMMU core code handle */ struct iommu_device iommu;
@@ -684,7 +688,13 @@ static void queue_inc_cons(struct arm_smmu_queue *q)u32 cons = (Q_WRP (q, q->cons) |Q_IDX (q, q->cons)) +1 ; q->cons =Q_OVF (q, q->cons) |Q_WRP (q, cons) |Q_IDX (q, cons); -writel (q->cons, q->cons_reg); + +/* +* Ensure that all CPU accesses (reads and writes) to the queue +* are complete before we update the cons pointer. +*/ +mb (); +writel_relaxed (q->cons, q->cons_reg); }static int queue_sync_prod (struct arm_smmu_queue *q)
drivers/iommu/arm-smmu.c +3 -0
@@ -118,6 +118,7 @@ enum arm_smmu_implementation {GENERIC_SMMU ,ARM_MMU500 ,CAVIUM_SMMUV2 , + QCOM_SMMUV2, }; struct arm_smmu_s2cr {
@@ -1912,6 +1913,7 @@ ARM_SMMU_MATCH_DATA(smmu_generic_v2, ARM_SMMU_V2, GENERIC_SMMU);ARM_SMMU_MATCH_DATA (arm_mmu401,ARM_SMMU_V1_64K ,GENERIC_SMMU );ARM_SMMU_MATCH_DATA (arm_mmu500,ARM_SMMU_V2 ,ARM_MMU500 );ARM_SMMU_MATCH_DATA (cavium_smmuv2,ARM_SMMU_V2 ,CAVIUM_SMMUV2 ); +ARM_SMMU_MATCH_DATA (qcom_smmuv2,ARM_SMMU_V2 ,QCOM_SMMUV2 );static const struct of_device_id arm_smmu_of_match[] = { { .compatible ="arm,smmu-v1" , .data = &smmu_generic_v1 },
@@ -1920,6 +1922,7 @@ static const struct of_device_id arm_smmu_of_match[] = { { .compatible = "arm,mmu-401", .data = &arm_mmu401 }, { .compatible = "arm,mmu-500", .data = &arm_mmu500 }, { .compatible = "cavium,smmu-v2", .data = &cavium_smmuv2 }, + { .compatible = "qcom,smmu-v2", .data = &qcom_smmuv2 }, { }, };MODULE_DEVICE_TABLE (of, arm_smmu_of_match);
drivers/irqchip/irq-gic-v3-its.c +27 -5
@@ -93,9 +93,14 @@ struct its_device;* The ITS structure - contains most of the infrastructure, with the * top-level MSI domain, the command queue, the collections, and the * list of devices writing to it. +* +* dev_alloc_lock has to be taken for device allocations, while the +* spinlock must be taken to parse data structures such as the device +* list. */ struct its_node {raw_spinlock_t lock; +struct mutex dev_alloc_lock;struct list_head entry;void __iomem *base;phys_addr_t phys_base;
@@ -152,6 +157,7 @@ struct its_device {void *itt;u32 nr_ites;u32 device_id; +bool shared; }; static struct {
@@ -2290,6 +2296,7 @@ static int its_msi_prepare(struct irq_domain *domain, struct device *dev,struct its_device *its_dev;struct msi_domain_info *msi_info;u32 dev_id; +int err =0 ;/* * We ignore "dev" entierely, and rely on the dev_id that has
@@ -2312,6 +2319,7 @@ static int its_msi_prepare(struct irq_domain *domain, struct device *dev,return -EINVAL ; } +mutex_lock (&its->dev_alloc_lock); its_dev =its_find_device (its, dev_id);if (its_dev) {/*
@@ -2319,18 +2327,22 @@ static int its_msi_prepare(struct irq_domain *domain, struct device *dev,* another alias (PCI bridge of some sort). No need to * create the device. */ + its_dev->shared = true;pr_debug ("Reusing ITT for devID %x\n" , dev_id); goto out; } its_dev =its_create_device (its, dev_id, nvec, true); -if (!its_dev) -return -ENOMEM ; +if (!its_dev) { + err = -ENOMEM ; + goto out; + }pr_debug ("ITT %d entries, %d bits\n" , nvec,ilog2 (nvec)); out: +mutex_unlock (&its->dev_alloc_lock); info->scratchpad[0 ].ptr = its_dev; -return 0 ; +return err; }static struct msi_domain_ops its_msi_domain_ops = {
@@ -2434,6 +2446,7 @@ static void its_irq_domain_free(struct irq_domain *domain, unsigned int virq, {struct irq_data *d =irq_domain_get_irq_data (domain, virq);struct its_device *its_dev =irq_data_get_irq_chip_data (d); +struct its_node *its = its_dev->its;int i;for (i =0 ; i < nr_irqs; i++) {
@@ -2448,8 +2461,14 @@ static void its_irq_domain_free(struct irq_domain *domain, unsigned int virq,irq_domain_reset_irq_data (data); } -/* If all interrupts have been freed, start mopping the floor */ -if (bitmap_empty (its_dev->event_map.lpi_map, +mutex_lock (&its->dev_alloc_lock); + +/* +* If all interrupts have been freed, start mopping the +* floor. This is conditionned on the device not being shared. +*/ +if (!its_dev->shared && +bitmap_empty (its_dev->event_map.lpi_map, its_dev->event_map.nr_lpis)) { its_lpi_free(its_dev->event_map.lpi_map, its_dev->event_map.lpi_base,
@@ -2461,6 +2480,8 @@ static void its_irq_domain_free(struct irq_domain *domain, unsigned int virq,its_free_device (its_dev); } +mutex_unlock (&its->dev_alloc_lock); +irq_domain_free_irqs_parent (domain, virq, nr_irqs); }
@@ -3385,6 +3406,7 @@ static int __init its_probe_one(struct resource *res, }raw_spin_lock_init (&its->lock); +mutex_init (&its->dev_alloc_lock);INIT_LIST_HEAD (&its->entry);INIT_LIST_HEAD (&its->its_device_list); typer =gic_read_typer (its_base +GITS_TYPER );
drivers/isdn/hisax/hfc_pci.c +2 -0
@@ -1170,11 +1170,13 @@ HFCPCI_l1hw(struct PStack *st, int pr, void *arg)if (cs->debug &L1_DEB_LAPD )debugl1 (cs,"-> PH_REQUEST_PULL" );#endif +spin_lock_irqsave (&cs->lock, flags);if (!cs->tx_skb) {test_and_clear_bit (FLG_L1_PULL_REQ , &st->l1.Flags); st->l1.l1l2 (st,PH_PULL |CONFIRM ,NULL ); }else test_and_set_bit (FLG_L1_PULL_REQ , &st->l1.Flags); +spin_unlock_irqrestore (&cs->lock, flags);break ;case (HW_RESET |REQUEST ):spin_lock_irqsave (&cs->lock, flags);
drivers/lightnvm/pblk-core.c +10 -3
@@ -1252,15 +1252,22 @@ int pblk_line_recov_alloc(struct pblk *pblk, struct pblk_line *line) ret =pblk_line_alloc_bitmaps (pblk, line);if (ret) -return ret; + goto fail;if (!pblk_line_init_bb (pblk, line,0 )) { -list_add (&line->list, &l_mg->free_list); -return -EINTR ; + ret = -EINTR ; + goto fail; }pblk_rl_free_lines_dec (&pblk->rl, line, true);return 0 ; + +fail: +spin_lock (&l_mg->free_lock); +list_add (&line->list, &l_mg->free_list); +spin_unlock (&l_mg->free_lock); + +return ret; }void pblk_line_recov_close (struct pblk *pblk,struct pblk_line *line)
drivers/lightnvm/pblk-write.c +5 -3
@@ -158,9 +158,11 @@ static void pblk_prepare_resubmit(struct pblk *pblk, unsigned int sentry, w_ctx = &entry->w_ctx;/* Check if the lba has been overwritten */ - ppa_l2p =pblk_trans_map_get (pblk, w_ctx->lba); -if (!pblk_ppa_comp (ppa_l2p, entry->cacheline)) - w_ctx->lba =ADDR_EMPTY ; +if (w_ctx->lba !=ADDR_EMPTY ) { + ppa_l2p =pblk_trans_map_get (pblk, w_ctx->lba); +if (!pblk_ppa_comp (ppa_l2p, entry->cacheline)) + w_ctx->lba =ADDR_EMPTY ; + }/* Mark up the entry as submittable again */ flags =READ_ONCE (w_ctx->flags);
drivers/md/raid10.c +4 -0
@@ -1208,7 +1208,9 @@ static void raid10_read_request(struct mddev *mddev, struct bio *bio,struct bio *split =bio_split (bio, max_sectors, gfp, &conf->bio_split);bio_chain (split, bio); +allow_barrier (conf);generic_make_request (bio); +wait_barrier (conf); bio = split; r10_bio->master_bio = bio; r10_bio->sectors = max_sectors;
@@ -1513,7 +1515,9 @@ static void raid10_write_request(struct mddev *mddev, struct bio *bio,struct bio *split =bio_split (bio, r10_bio->sectors,GFP_NOIO , &conf->bio_split);bio_chain (split, bio); +allow_barrier (conf);generic_make_request (bio); +wait_barrier (conf); bio = split; r10_bio->master_bio = bio; }
drivers/media/i2c/Kconfig +2 -0
@@ -61,6 +61,7 @@ config VIDEO_TDA1997X depends on VIDEO_V4L2 && I2C && VIDEO_V4L2_SUBDEV_API depends on SND_SOC select SND_PCM + select HDMI ---help--- V4L2 subdevice driver for the NXP TDA1997x HDMI receivers.
@@ -610,6 +611,7 @@ config VIDEO_IMX274 tristate "Sony IMX274 sensor support" depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API depends on MEDIA_CAMERA_SUPPORT + select REGMAP_I2C ---help--- This is a V4L2 sensor driver for the Sony IMX274 CMOS image sensor.
drivers/media/i2c/ad9389b.c +1 -1
@@ -578,7 +578,7 @@ static const struct v4l2_dv_timings_cap ad9389b_timings_cap = { .type = V4L2_DV_BT_656_1120, /* keep this initialization for compatibility with GCC < 4.4.6 */ .reserved = { 0 }, - V4L2_INIT_BT_TIMINGS(0, 1920, 0, 1200, 25000000, 170000000, + V4L2_INIT_BT_TIMINGS(640, 1920, 350, 1200, 25000000, 170000000, V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT, V4L2_DV_BT_CAP_PROGRESSIVE | V4L2_DV_BT_CAP_REDUCED_BLANKING |
drivers/media/i2c/adv7511.c +1 -1
@@ -130,7 +130,7 @@ static const struct v4l2_dv_timings_cap adv7511_timings_cap = { .type = V4L2_DV_BT_656_1120, /* keep this initialization for compatibility with GCC < 4.4.6 */ .reserved = { 0 }, - V4L2_INIT_BT_TIMINGS(0, ADV7511_MAX_WIDTH, 0, ADV7511_MAX_HEIGHT, + V4L2_INIT_BT_TIMINGS(640, ADV7511_MAX_WIDTH, 350, ADV7511_MAX_HEIGHT, ADV7511_MIN_PIXELCLOCK, ADV7511_MAX_PIXELCLOCK, V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT,
drivers/media/i2c/adv7604.c +2 -2
@@ -766,7 +766,7 @@ static const struct v4l2_dv_timings_cap adv7604_timings_cap_analog = { .type = V4L2_DV_BT_656_1120, /* keep this initialization for compatibility with GCC < 4.4.6 */ .reserved = { 0 }, - V4L2_INIT_BT_TIMINGS(0, 1920, 0, 1200, 25000000, 170000000, + V4L2_INIT_BT_TIMINGS(640, 1920, 350, 1200, 25000000, 170000000, V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT, V4L2_DV_BT_CAP_PROGRESSIVE | V4L2_DV_BT_CAP_REDUCED_BLANKING |
@@ -777,7 +777,7 @@ static const struct v4l2_dv_timings_cap adv76xx_timings_cap_digital = { .type = V4L2_DV_BT_656_1120, /* keep this initialization for compatibility with GCC < 4.4.6 */ .reserved = { 0 }, - V4L2_INIT_BT_TIMINGS(0, 1920, 0, 1200, 25000000, 225000000, + V4L2_INIT_BT_TIMINGS(640, 1920, 350, 1200, 25000000, 225000000, V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT, V4L2_DV_BT_CAP_PROGRESSIVE | V4L2_DV_BT_CAP_REDUCED_BLANKING |
drivers/media/i2c/adv7842.c +2 -2
@@ -663,7 +663,7 @@ static const struct v4l2_dv_timings_cap adv7842_timings_cap_analog = { .type = V4L2_DV_BT_656_1120, /* keep this initialization for compatibility with GCC < 4.4.6 */ .reserved = { 0 }, - V4L2_INIT_BT_TIMINGS(0, 1920, 0, 1200, 25000000, 170000000, + V4L2_INIT_BT_TIMINGS(640, 1920, 350, 1200, 25000000, 170000000, V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT, V4L2_DV_BT_CAP_PROGRESSIVE | V4L2_DV_BT_CAP_REDUCED_BLANKING |
@@ -674,7 +674,7 @@ static const struct v4l2_dv_timings_cap adv7842_timings_cap_digital = { .type = V4L2_DV_BT_656_1120, /* keep this initialization for compatibility with GCC < 4.4.6 */ .reserved = { 0 }, - V4L2_INIT_BT_TIMINGS(0, 1920, 0, 1200, 25000000, 225000000, + V4L2_INIT_BT_TIMINGS(640, 1920, 350, 1200, 25000000, 225000000, V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT, V4L2_DV_BT_CAP_PROGRESSIVE | V4L2_DV_BT_CAP_REDUCED_BLANKING |
drivers/media/i2c/tc358743.c +1 -1
@@ -59,7 +59,7 @@ static const struct v4l2_dv_timings_cap tc358743_timings_cap = {/* keep this initialization for compatibility with GCC < 4.4.6 */ .reserved = { 0 },/* Pixel clock from REF_01 p. 20. Min/max height/width are unknown */ - V4L2_INIT_BT_TIMINGS(1, 10000, 1, 10000, 0, 165000000, + V4L2_INIT_BT_TIMINGS(640, 1920, 350, 1200, 13000000, 165000000, V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT, V4L2_DV_BT_CAP_PROGRESSIVE |
drivers/media/i2c/ths8200.c +1 -1
@@ -49,7 +49,7 @@ static const struct v4l2_dv_timings_cap ths8200_timings_cap = { .type = V4L2_DV_BT_656_1120, /* keep this initialization for compatibility with GCC < 4.4.6 */ .reserved = { 0 }, -V4L2_INIT_BT_TIMINGS (0 ,1920 ,0 ,1080 ,25000000 ,148500000 , +V4L2_INIT_BT_TIMINGS (640 ,1920 ,350 ,1080 ,25000000 ,148500000 , V4L2_DV_BT_STD_CEA861, V4L2_DV_BT_CAP_PROGRESSIVE) };
drivers/media/i2c/video-i2c.c +6 -5
@@ -510,7 +510,12 @@ static const struct v4l2_ioctl_ops video_i2c_ioctl_ops = {static void video_i2c_release (struct video_device *vdev) { -kfree (video_get_drvdata (vdev)); +struct video_i2c_data *data =video_get_drvdata (vdev); + +v4l2_device_unregister (&data->v4l2_dev); +mutex_destroy (&data->lock); +mutex_destroy (&data->queue_lock); +kfree (data); } static int video_i2c_probe(struct i2c_client *client,
@@ -608,10 +613,6 @@ static int video_i2c_remove(struct i2c_client *client)struct video_i2c_data *data =i2c_get_clientdata (client);video_unregister_device (&data->vdev); -v4l2_device_unregister (&data->v4l2_dev); - -mutex_destroy (&data->lock); -mutex_destroy (&data->queue_lock);return 0 ; }
drivers/media/platform/coda/coda-bit.c +9 -10
@@ -991,16 +991,15 @@ static int coda_start_encoding(struct coda_ctx *ctx)else coda_write (dev,CODA_STD_H264 ,CODA_CMD_ENC_SEQ_COD_STD ); -if (ctx->params.h264_deblk_enabled) { - value = ((ctx->params.h264_deblk_alpha & -CODA_264PARAM_DEBLKFILTEROFFSETALPHA_MASK ) << -CODA_264PARAM_DEBLKFILTEROFFSETALPHA_OFFSET ) | - ((ctx->params.h264_deblk_beta & -CODA_264PARAM_DEBLKFILTEROFFSETBETA_MASK ) << -CODA_264PARAM_DEBLKFILTEROFFSETBETA_OFFSET ); - }else { - value =1 <<CODA_264PARAM_DISABLEDEBLK_OFFSET ; - } + value = ((ctx->params.h264_disable_deblocking_filter_idc & +CODA_264PARAM_DISABLEDEBLK_MASK ) << +CODA_264PARAM_DISABLEDEBLK_OFFSET ) | + ((ctx->params.h264_slice_alpha_c0_offset_div2 & +CODA_264PARAM_DEBLKFILTEROFFSETALPHA_MASK ) << +CODA_264PARAM_DEBLKFILTEROFFSETALPHA_OFFSET ) | + ((ctx->params.h264_slice_beta_offset_div2 & +CODA_264PARAM_DEBLKFILTEROFFSETBETA_MASK ) << +CODA_264PARAM_DEBLKFILTEROFFSETBETA_OFFSET );coda_write (dev, value,CODA_CMD_ENC_SEQ_264_PARA );break ;case V4L2_PIX_FMT_JPEG :
drivers/media/platform/coda/coda-common.c +7 -8
@@ -1793,14 +1793,13 @@ static int coda_s_ctrl(struct v4l2_ctrl *ctrl) ctx->params.h264_max_qp = ctrl->val;break ;case V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA : - ctx->params.h264_deblk_alpha = ctrl->val; + ctx->params.h264_slice_alpha_c0_offset_div2 = ctrl->val;break ;case V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA : - ctx->params.h264_deblk_beta = ctrl->val; + ctx->params.h264_slice_beta_offset_div2 = ctrl->val;break ;case V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE : - ctx->params.h264_deblk_enabled = (ctrl->val == -V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_ENABLED ); + ctx->params.h264_disable_deblocking_filter_idc = ctrl->val;break ;case V4L2_CID_MPEG_VIDEO_H264_PROFILE :/* TODO: switch between baseline and constrained baseline */
@@ -1882,13 +1881,13 @@ static void coda_encode_ctrls(struct coda_ctx *ctx)v4l2_ctrl_new_std (&ctx->ctrls, &coda_ctrl_ops,V4L2_CID_MPEG_VIDEO_H264_MAX_QP ,0 ,51 ,1 ,51 );v4l2_ctrl_new_std (&ctx->ctrls, &coda_ctrl_ops, -V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA ,0 ,15 ,1 ,0 ); +V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA ,-6 ,6 ,1 ,0 );v4l2_ctrl_new_std (&ctx->ctrls, &coda_ctrl_ops, -V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA ,0 ,15 ,1 ,0 ); +V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA ,-6 ,6 ,1 ,0 );v4l2_ctrl_new_std_menu (&ctx->ctrls, &coda_ctrl_ops,V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE , -V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_DISABLED ,0x0 , -V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_ENABLED ); +V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_DISABLED_AT_SLICE_BOUNDARY , +0x0 ,V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_ENABLED ); v4l2_ctrl_new_std_menu(&ctx->ctrls, &coda_ctrl_ops, V4L2_CID_MPEG_VIDEO_H264_PROFILE, V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE, 0x0,
drivers/media/platform/coda/coda.h +3 -3
@@ -115,9 +115,9 @@ struct coda_params {u8 h264_inter_qp;u8 h264_min_qp;u8 h264_max_qp; -u8 h264_deblk_enabled; -u8 h264_deblk_alpha; -u8 h264_deblk_beta; +u8 h264_disable_deblocking_filter_idc; +s8 h264_slice_alpha_c0_offset_div2; +s8 h264_slice_beta_offset_div2;u8 h264_profile_idc;u8 h264_level_idc;u8 mpeg4_intra_qp;
drivers/media/platform/coda/coda_regs.h +1 -1
@@ -292,7 +292,7 @@#define CODA_264PARAM_DEBLKFILTEROFFSETALPHA_OFFSET 8#define CODA_264PARAM_DEBLKFILTEROFFSETALPHA_MASK 0x0f#define CODA_264PARAM_DISABLEDEBLK_OFFSET 6 -#define CODA_264PARAM_DISABLEDEBLK_MASK 0x01 +#define CODA_264PARAM_DISABLEDEBLK_MASK 0x03#define CODA_264PARAM_CONSTRAINEDINTRAPREDFLAG_OFFSET 5#define CODA_264PARAM_CONSTRAINEDINTRAPREDFLAG_MASK 0x01#define CODA_264PARAM_CHROMAQPOFFSET_OFFSET 0
drivers/media/platform/davinci/vpbe.c +5 -2
@@ -740,7 +740,7 @@ static int vpbe_initialize(struct device *dev, struct vpbe_device *vpbe_dev)if (ret) {v4l2_err (&vpbe_dev->v4l2_dev,"Failed to set default output %s" , def_output); -return ret; + goto fail_kfree_amp; }printk (KERN_NOTICE "Setting default mode to %s\n" , def_mode);
@@ -748,12 +748,15 @@ static int vpbe_initialize(struct device *dev, struct vpbe_device *vpbe_dev)if (ret) {v4l2_err (&vpbe_dev->v4l2_dev,"Failed to set default mode %s" , def_mode); -return ret; + goto fail_kfree_amp; } vpbe_dev->initialized =1 ;/* TBD handling of bootargs for default output and mode */ return 0 ; +fail_kfree_amp: +mutex_lock (&vpbe_dev->lock); +kfree (vpbe_dev->amp); fail_kfree_encoders:kfree (vpbe_dev->encoders); fail_dev_unregister:
drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_pm.c +6 -4
@@ -41,25 +41,27 @@ int mtk_vcodec_init_enc_pm(struct mtk_vcodec_dev *mtkdev) node =of_parse_phandle (dev->of_node,"mediatek,larb" ,0 );if (!node) {mtk_v4l2_err ("no mediatek,larb found" ); -return -1 ; +return -ENODEV ; } pdev =of_find_device_by_node (node); +of_node_put (node);if (!pdev) {mtk_v4l2_err ("no mediatek,larb device found" ); -return -1 ; +return -ENODEV ; } pm->larbvenc = &pdev->dev; node =of_parse_phandle (dev->of_node,"mediatek,larb" ,1 );if (!node) {mtk_v4l2_err ("no mediatek,larb found" ); -return -1 ; +return -ENODEV ; } pdev =of_find_device_by_node (node); +of_node_put (node);if (!pdev) {mtk_v4l2_err ("no mediatek,larb device found" ); -return -1 ; +return -ENODEV ; } pm->larbvenclt = &pdev->dev;
drivers/media/rc/rc-main.c +2 -0
@@ -1956,6 +1956,8 @@ void rc_unregister_device(struct rc_dev *dev)rc_free_rx_device (dev);mutex_lock (&dev->lock); +if (dev->users && dev->close) + dev->close (dev); dev->registered = false;mutex_unlock (&dev->lock);
drivers/memstick/core/memstick.c +3 -0
@@ -18,6 +18,7 @@#include <linux/delay.h> #include <linux/slab.h> #include <linux/module.h> +#include <linux/pm_runtime.h> #define DRIVER_NAME "memstick"
@@ -436,6 +437,7 @@ static void memstick_check(struct work_struct *work)struct memstick_dev *card;dev_dbg (&host->dev,"memstick_check started\n" ); +pm_runtime_get_noresume (host->dev.parent);mutex_lock (&host->lock);if (!host->card) {if (memstick_power_on (host))
@@ -479,6 +481,7 @@ static void memstick_check(struct work_struct *work) host->set_param (host,MEMSTICK_POWER ,MEMSTICK_POWER_OFF );mutex_unlock (&host->lock); +pm_runtime_put (host->dev.parent);dev_dbg (&host->dev,"memstick_check finished\n" ); }
drivers/mmc/host/bcm2835.c +12 -0
@@ -286,6 +286,7 @@ static void bcm2835_reset(struct mmc_host *mmc)if (host->dma_chan)dmaengine_terminate_sync (host->dma_chan); + host->dma_chan =NULL ;bcm2835_reset_internal (host); }
@@ -772,6 +773,8 @@ static void bcm2835_finish_command(struct bcm2835_host *host)if (!(sdhsts &SDHSTS_CRC7_ERROR ) || (host->cmd->opcode !=MMC_SEND_OP_COND )) { +u32 edm, fsm; +if (sdhsts &SDHSTS_CMD_TIME_OUT ) { host->cmd->error = -ETIMEDOUT ; }else {
@@ -780,6 +783,13 @@ static void bcm2835_finish_command(struct bcm2835_host *host)bcm2835_dumpregs (host); host->cmd->error = -EILSEQ ; } + edm =readl (host->ioaddr +SDEDM ); + fsm = edm &SDEDM_FSM_MASK ; +if (fsm ==SDEDM_FSM_READWAIT || + fsm ==SDEDM_FSM_WRITESTART1 ) +/* Kick the FSM out of its wait */ +writel (edm |SDEDM_FORCE_DATA_MODE , + host->ioaddr +SDEDM );bcm2835_finish_request (host);return ; }
@@ -837,6 +847,8 @@ static void bcm2835_timeout(struct work_struct *work)dev_err (dev,"timeout waiting for hardware interrupt.\n" );bcm2835_dumpregs (host); +bcm2835_reset (host->mmc); +if (host->data) { host->data->error = -ETIMEDOUT ;bcm2835_finish_data (host);
drivers/mmc/host/jz4740_mmc.c +10 -10
@@ -983,17 +983,17 @@ static int jz4740_mmc_request_gpios(struct mmc_host *mmc,if (!pdata->read_only_active_low) mmc->caps2 |=MMC_CAP2_RO_ACTIVE_HIGH ; -if (gpio_is_valid (pdata->gpio_card_detect)) { - ret =mmc_gpio_request_cd (mmc, pdata->gpio_card_detect,0 ); -if (ret) -return ret; - } +/* +* Get optional card detect and write protect GPIOs, +* only back out on probe deferral. +*/ + ret =mmc_gpiod_request_cd (mmc,"cd" ,0 , false,0 ,NULL ); +if (ret == -EPROBE_DEFER ) +return ret; -if (gpio_is_valid (pdata->gpio_read_only)) { - ret =mmc_gpio_request_ro (mmc, pdata->gpio_read_only); -if (ret) -return ret; - } + ret =mmc_gpiod_request_ro (mmc,"wp" ,0 , false,0 ,NULL ); +if (ret == -EPROBE_DEFER ) +return ret;return jz4740_mmc_request_gpio (&pdev->dev, pdata->gpio_power,"MMC read only" , true, pdata->power_active_low);
drivers/mmc/host/meson-mx-sdio.c +6 -0
@@ -596,6 +596,9 @@ static int meson_mx_mmc_register_clks(struct meson_mx_mmc_host *host) init.name =devm_kasprintf (host->controller_dev,GFP_KERNEL ,"%s#fixed_factor" ,dev_name (host->controller_dev)); +if (!init.name) +return -ENOMEM ; + init.ops = &clk_fixed_factor_ops; init.flags =0 ; init.parent_names = &clk_fixed_factor_parent;
@@ -612,6 +615,9 @@ static int meson_mx_mmc_register_clks(struct meson_mx_mmc_host *host) clk_div_parent =__clk_get_name (host->fixed_factor_clk); init.name =devm_kasprintf (host->controller_dev,GFP_KERNEL ,"%s#div" ,dev_name (host->controller_dev)); +if (!init.name) +return -ENOMEM ; + init.ops = &clk_divider_ops; init.flags =CLK_SET_RATE_PARENT ; init.parent_names = &clk_div_parent;
drivers/mmc/host/sdhci-of-esdhc.c +12 -4
@@ -526,8 +526,12 @@ static void esdhc_clock_enable(struct sdhci_host *host, bool enable)/* Wait max 20 ms */ timeout =ktime_add_ms (ktime_get (),20 ); val =ESDHC_CLOCK_STABLE ; -while (!(sdhci_readl (host,ESDHC_PRSSTAT ) & val)) { -if (ktime_after (ktime_get (), timeout)) { +while (1 ) { +bool timedout =ktime_after (ktime_get (), timeout); + +if (sdhci_readl (host,ESDHC_PRSSTAT ) & val) +break ; +if (timedout) {pr_err ("%s: Internal clock never stabilised.\n" ,mmc_hostname (host->mmc));break ;
@@ -591,8 +595,12 @@ static void esdhc_of_set_clock(struct sdhci_host *host, unsigned int clock)/* Wait max 20 ms */
Lines of this file are not shown. View the raw message.
drivers/net/dsa/mv88e6xxx/global1_atu.c +12 -9
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.c +2 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/broadcom/bcmsysport.c +10 -15
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/broadcom/bcmsysport.h +2 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/broadcom/bnxt/bnxt.c +11 -8
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/cisco/enic/enic_main.c +2 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/freescale/fman/fman_memac.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/freescale/fman/fman_tgec.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/hisilicon/hns3/hns3_enet.c +10 -6
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/i40e/i40e_main.c +8 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/ice/ice_main.c +12 -4
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/igb/igb_main.c +5 -3
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en_main.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en_rx.c +14 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en_tx.c +6 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c +2 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/main.c +8 -6
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlxsw/spectrum.c +23 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c +3 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c +1 -26
Lines of this file are not shown. View the raw message.
drivers/net/wireless/ath/ath9k/dynack.c +25 -10
Lines of this file are not shown. View the raw message.
drivers/net/wireless/ath/ath9k/dynack.h +4 -2
Lines of this file are not shown. View the raw message.
drivers/net/wireless/ath/wil6210/main.c +7 -4
Lines of this file are not shown. View the raw message.
drivers/net/wireless/ath/wil6210/txrx.c +2 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/intel/iwlwifi/fw/api/mac.h +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c +7 -1
Lines of this file are not shown. View the raw message.
drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c +4 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/mediatek/mt76/mt76x2_dfs.c +6 -2
Lines of this file are not shown. View the raw message.
drivers/pinctrl/meson/pinctrl-meson8b.c +8 -5
Lines of this file are not shown. View the raw message.
drivers/platform/chrome/cros_ec_proto.c +15 -3
Lines of this file are not shown. View the raw message.
drivers/scsi/lpfc/lpfc_els.c +24 -28
52 lines not on this page · raw message
drivers/scsi/mpt3sas/mpt3sas_transport.c +5 -2
Lines of this file are not shown. View the raw message.
drivers/thermal/broadcom/bcm2835_thermal.c +11 -0
Lines of this file are not shown. View the raw message.
drivers/virt/vboxguest/vboxguest_core.c +1 -1
Lines of this file are not shown. View the raw message.
samples/livepatch/livepatch-shadow-fix1.c +5 -0
Lines of this file are not shown. View the raw message.
samples/livepatch/livepatch-shadow-mod.c +4 -0
Lines of this file are not shown. View the raw message.
scripts/mod/modpost.c +26 -24
50 lines not on this page · raw message
sound/pci/hda/patch_realtek.c +35 -27
62 lines not on this page · raw message
tools/perf/Makefile.config +23 -21
44 lines not on this page · raw message
tools/power/x86/intel_pstate_tracer/intel_pstate_tracer.py +2 -2
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/test_progs.c +4 -4
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.