Linux 5.4.220
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.4.220 kernel.
All users of the 5.4 kernel series must upgrade.
The updated 5.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.4.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/ABI/testing/sysfs-bus-iio | 2 Makefile | 2 arch/arm/Kconfig | 1 arch/arm/boot/dts/armada-385-turris-omnia.dts | 4 arch/arm/boot/dts/exynos4412-midas.dtsi | 2 arch/arm/boot/dts/exynos4412-origen.dts | 2 arch/arm/boot/dts/imx6dl.dtsi | 3 arch/arm/boot/dts/imx6q.dtsi | 3 arch/arm/boot/dts/imx6qp.dtsi | 6 arch/arm/boot/dts/imx6sl.dtsi | 3 arch/arm/boot/dts/imx6sll.dtsi | 3 arch/arm/boot/dts/imx6sx.dtsi | 6 arch/arm/boot/dts/imx7d-sdb.dts | 7 arch/arm/boot/dts/kirkwood-lsxl.dtsi | 16 arch/arm/mm/mmu.c | 4 arch/mips/bcm47xx/prom.c | 4 arch/powerpc/Makefile | 2 arch/powerpc/boot/Makefile | 1 arch/powerpc/boot/dts/fsl/e500v1_power_isa.dtsi | 51 ++ arch/powerpc/boot/dts/fsl/mpc8540ads.dts | 2 arch/powerpc/boot/dts/fsl/mpc8541cds.dts | 2 arch/powerpc/boot/dts/fsl/mpc8555cds.dts | 2 arch/powerpc/boot/dts/fsl/mpc8560ads.dts | 2 arch/powerpc/kernel/pci_dn.c | 1 arch/powerpc/math-emu/math_efp.c | 1 arch/powerpc/platforms/powernv/opal.c | 1 arch/powerpc/sysdev/fsl_msi.c | 2 arch/riscv/Makefile | 2 arch/riscv/include/asm/io.h | 16 arch/riscv/kernel/sys_riscv.c | 3 arch/sh/include/asm/sections.h | 2 arch/sh/kernel/machvec.c | 10 arch/um/kernel/um_arch.c | 2 arch/x86/include/asm/hyperv-tlfs.h | 4 arch/x86/include/asm/microcode.h | 1 arch/x86/kernel/cpu/microcode/amd.c | 3 arch/x86/kernel/cpu/resctrl/pseudo_lock.c | 12 arch/x86/kvm/emulate.c | 2 arch/x86/kvm/vmx/nested.c | 30 + arch/x86/kvm/vmx/vmx.c | 12 crypto/akcipher.c | 8 drivers/acpi/acpi_video.c | 16 drivers/ata/libahci_platform.c | 14 drivers/block/nbd.c | 6 drivers/clk/bcm/clk-bcm2835.c | 8 drivers/clk/berlin/bg2.c | 5 drivers/clk/berlin/bg2q.c | 6 drivers/clk/clk-ast2600.c | 2 drivers/clk/clk-oxnas.c | 6 drivers/clk/mediatek/clk-mt8183-mfgcfg.c | 6 drivers/clk/meson/meson-aoclk.c | 5 drivers/clk/meson/meson-eeclk.c | 5 drivers/clk/meson/meson8b.c | 5 drivers/clk/tegra/clk-tegra114.c | 1 drivers/clk/tegra/clk-tegra20.c | 1 drivers/clk/tegra/clk-tegra210.c | 1 drivers/clk/ti/clk-dra7-atl.c | 9 drivers/clk/zynqmp/clkc.c | 7 drivers/clk/zynqmp/pll.c | 31 - drivers/crypto/cavium/cpt/cptpf_main.c | 6 drivers/crypto/ccp/ccp-dmaengine.c | 6 drivers/dma/ioat/dma.c | 6 drivers/firmware/efi/libstub/fdt.c | 8 drivers/firmware/google/gsmi.c | 9 drivers/fsi/fsi-core.c | 3 drivers/gpu/drm/Kconfig | 1 drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c | 7 drivers/gpu/drm/amd/display/dc/calcs/bw_fixed.c | 6 drivers/gpu/drm/bridge/adv7511/adv7511.h | 5 drivers/gpu/drm/bridge/adv7511/adv7511_cec.c | 4 drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c | 4 drivers/gpu/drm/drm_ioctl.c | 8 drivers/gpu/drm/drm_mipi_dsi.c | 1 drivers/gpu/drm/drm_panel_orientation_quirks.c | 6 drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 12 drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c | 29 - drivers/gpu/drm/nouveau/nouveau_bo.c | 4 drivers/gpu/drm/nouveau/nouveau_prime.c | 1 drivers/gpu/drm/omapdrm/dss/dss.c | 3 drivers/gpu/drm/vc4/vc4_vec.c | 4 drivers/hid/hid-multitouch.c | 8 drivers/hid/hid-roccat.c | 4 drivers/hsi/controllers/omap_ssi_core.c | 1 drivers/hsi/controllers/omap_ssi_port.c | 8 drivers/iio/adc/at91-sama5d2_adc.c | 14 drivers/iio/dac/ad5593r.c | 46 +- drivers/iio/inkern.c | 6 drivers/iio/pressure/dps310.c | 262 +++++++++------ drivers/infiniband/sw/rxe/rxe_qp.c | 10 drivers/infiniband/sw/siw/siw_qp_rx.c | 27 - drivers/iommu/omap-iommu-debug.c | 6 drivers/isdn/mISDN/l1oip.h | 1 drivers/isdn/mISDN/l1oip_core.c | 13 drivers/mailbox/bcm-flexrm-mailbox.c | 8 drivers/md/bcache/writeback.c | 73 ++-- drivers/md/raid0.c | 4 drivers/md/raid5.c | 14 drivers/media/pci/cx88/cx88-vbi.c | 9 drivers/media/pci/cx88/cx88-video.c | 43 +- drivers/media/platform/exynos4-is/fimc-is.c | 1 drivers/media/platform/xilinx/xilinx-vipp.c | 9 drivers/memory/of_memory.c | 1 drivers/memory/pl353-smc.c | 1 drivers/mfd/fsl-imx25-tsadc.c | 34 + drivers/mfd/intel_soc_pmic_core.c | 1 drivers/mfd/lp8788-irq.c | 3 drivers/mfd/lp8788.c | 12 drivers/mfd/sm501.c | 7 drivers/misc/ocxl/file.c | 2 drivers/mmc/host/au1xmmc.c | 3 drivers/mmc/host/sdhci-msm.c | 1 drivers/mmc/host/sdhci-sprd.c | 2 drivers/mmc/host/wmt-sdmmc.c | 5 drivers/mtd/devices/docg3.c | 7 drivers/mtd/nand/raw/atmel/nand-controller.c | 1 drivers/mtd/nand/raw/meson_nand.c | 4 drivers/net/can/usb/kvaser_usb/kvaser_usb.h | 2 drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c | 3 drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c | 2 drivers/net/can/usb/kvaser_usb/kvaser_usb_leaf.c | 79 ++++ drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | 1 drivers/net/ethernet/freescale/fs_enet/mac-fec.c | 2 drivers/net/ethernet/marvell/mvpp2/mvpp2.h | 1 drivers/net/ethernet/marvell/mvpp2/mvpp2_debugfs.c | 10 drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c | 13 drivers/net/usb/r8152.c | 4 drivers/net/wireless/ath/ath10k/mac.c | 54 +-- drivers/net/wireless/ath/ath9k/htc_hst.c | 43 +- drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c | 3 drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c | 12 drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 34 + drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c | 21 - drivers/nvme/host/core.c | 3 drivers/nvme/target/tcp.c | 11 drivers/pci/setup-res.c | 11 drivers/phy/qualcomm/phy-qcom-usb-hsic.c | 6 drivers/platform/chrome/chromeos_laptop.c | 24 - drivers/platform/chrome/cros_ec_chardev.c | 3 drivers/platform/x86/msi-laptop.c | 14 drivers/power/supply/adp5061.c | 6 drivers/powercap/intel_rapl_common.c | 3 drivers/regulator/qcom_rpm-regulator.c | 24 - drivers/scsi/3w-9xxx.c | 2 drivers/scsi/libsas/sas_expander.c | 2 drivers/soc/qcom/smem_state.c | 3 drivers/soc/qcom/smsm.c | 20 - drivers/spi/spi-omap-100k.c | 1 drivers/spi/spi-qup.c | 21 - drivers/spi/spi-s3c64xx.c | 9 drivers/spmi/spmi-pmic-arb.c | 13 drivers/staging/media/sunxi/cedrus/cedrus.c | 4 drivers/staging/rtl8723bs/core/rtw_cmd.c | 16 drivers/staging/vt6655/device_main.c | 8 drivers/thermal/intel/intel_powerclamp.c | 4 drivers/tty/serial/8250/8250_port.c | 7 drivers/tty/serial/fsl_lpuart.c | 2 drivers/tty/serial/jsm/jsm_driver.c | 3 drivers/tty/serial/xilinx_uartps.c | 2 drivers/usb/core/quirks.c | 4 drivers/usb/gadget/function/f_printer.c | 12 drivers/usb/host/xhci-mem.c | 7 drivers/usb/host/xhci.c | 3 drivers/usb/misc/idmouse.c | 8 drivers/usb/musb/musb_gadget.c | 3 drivers/usb/storage/unusual_devs.h | 6 drivers/vhost/vsock.c | 2 drivers/video/fbdev/smscufx.c | 14 drivers/video/fbdev/stifb.c | 2 fs/btrfs/qgroup.c | 15 fs/btrfs/scrub.c | 36 ++ fs/cifs/file.c | 9 fs/cifs/smb2pdu.c | 4 fs/dlm/ast.c | 6 fs/dlm/lock.c | 16 fs/ext4/file.c | 6 fs/ext4/inode.c | 7 fs/ext4/resize.c | 2 fs/ext4/super.c | 3 fs/f2fs/checkpoint.c | 10 fs/f2fs/extent_cache.c | 3 fs/f2fs/f2fs.h | 4 fs/f2fs/gc.c | 10 fs/f2fs/recovery.c | 23 + fs/f2fs/super.c | 4 fs/io_uring.c | 1 fs/jbd2/commit.c | 2 fs/jbd2/transaction.c | 6 fs/nfsd/nfs4recover.c | 4 fs/nfsd/nfs4xdr.c | 2 fs/nilfs2/inode.c | 18 - fs/quota/quota_tree.c | 38 ++ fs/userfaultfd.c | 4 include/linux/ata.h | 39 +- include/linux/dynamic_debug.h | 2 include/linux/iova.h | 2 include/linux/once.h | 28 + include/linux/skbuff.h | 2 include/linux/tcp.h | 2 include/net/ieee802154_netdev.h | 12 include/net/sock.h | 2 include/net/tcp.h | 5 kernel/bpf/btf.c | 2 kernel/bpf/syscall.c | 2 kernel/cgroup/cpuset.c | 18 - kernel/gcov/gcc_4_7.c | 18 - kernel/livepatch/transition.c | 18 - kernel/trace/ftrace.c | 8 kernel/trace/ring_buffer.c | 48 ++ kernel/trace/trace.c | 22 + lib/dynamic_debug.c | 11 lib/once.c | 30 + net/bluetooth/hci_sysfs.c | 3 net/bluetooth/l2cap_core.c | 17 net/can/bcm.c | 7 net/core/stream.c | 3 net/ieee802154/socket.c | 4 net/ipv4/af_inet.c | 2 net/ipv4/inet_hashtables.c | 4 net/ipv4/netfilter/nft_fib_ipv4.c | 3 net/ipv4/tcp.c | 19 - net/ipv4/tcp_input.c | 2 net/ipv4/tcp_ipv4.c | 11 net/ipv4/tcp_output.c | 19 - net/ipv4/udp.c | 6 net/ipv6/netfilter/nft_fib_ipv6.c | 6 net/ipv6/tcp_ipv6.c | 11 net/ipv6/udp.c | 4 net/mac80211/cfg.c | 3 net/openvswitch/datapath.c | 18 - net/rds/tcp.c | 2 net/sctp/auth.c | 18 - net/unix/garbage.c | 20 + net/vmw_vsock/virtio_transport_common.c | 2 net/xfrm/xfrm_ipcomp.c | 1 scripts/Kbuild.include | 23 + scripts/selinux/install_policy.sh | 2 sound/core/pcm_dmaengine.c | 8 sound/core/rawmidi.c | 2 sound/core/sound_oss.c | 13 sound/pci/hda/hda_beep.c | 15 sound/pci/hda/hda_beep.h | 1 sound/pci/hda/patch_hdmi.c | 6 sound/pci/hda/patch_realtek.c | 11 sound/pci/hda/patch_sigmatel.c | 25 - sound/soc/codecs/wcd9335.c | 2 sound/soc/codecs/wm5102.c | 6 sound/soc/codecs/wm5110.c | 6 sound/soc/codecs/wm8997.c | 6 sound/soc/fsl/eukrea-tlv320.c | 8 sound/soc/sh/rcar/ctu.c | 6 sound/soc/sh/rcar/dvc.c | 6 sound/soc/sh/rcar/mix.c | 6 sound/soc/sh/rcar/src.c | 5 sound/soc/sh/rcar/ssi.c | 4 sound/usb/endpoint.c | 6 tools/bpf/bpftool/btf_dumper.c | 2 tools/bpf/bpftool/main.c | 10 tools/perf/util/intel-pt.c | 9 258 files changed, 1846 insertions(+), 758 deletions(-)
Adrian Hunter (1):
perf intel-pt: Fix segfault in intel_pt_print_info() with uClibc
Albert Briscoe (1):
usb: gadget: function: fix dangling pnp_string in f_printer.c
Alexander Aring (4):
fs: dlm: fix race between test_bit() and queue_work()
fs: dlm: handle -EBUSY first in lock arg validation
net: ieee802154: return -EINVAL for unknown addr type Revert "net/ieee802154: reject zero-sized raw_sendmsg()"
Alexander Coffin (1):
wifi: brcmfmac: fix use-after-free bug in brcmf_netdev_start_xmit()
Alexander Stein (6):
ARM: dts: imx6q: add missing properties for sram
ARM: dts: imx6dl: add missing properties for sram
ARM: dts: imx6qp: add missing properties for sram
ARM: dts: imx6sl: add missing properties for sram
ARM: dts: imx6sll: add missing properties for sram
ARM: dts: imx6sx: add missing properties for sram
Alvin Šipraga (1):
drm: bridge: adv7511: fix CEC power down control register offset
Andreas Pape (1):
ALSA: dmaengine: increment buffer pointer atomically
Andrew Bresticker (1):
riscv: Allow PROT_WRITE-only mmap()
Andrew Gaul (1):
r8152: Rate limit overflow messages
Andrew Perepechko (1):
jbd2: wake up journal waiters in FIFO order, not LIFO
Andri Yngvason (1):
HID: multitouch: Add memory barriers
Anna Schumaker (1):
NFSD: Return nfserr_serverfault if splice_ok but buf->pages have data
Anssi Hannula (4):
can: kvaser_usb: Fix use of uninitialized completion
can: kvaser_usb_leaf: Fix overread with an invalid command
can: kvaser_usb_leaf: Fix TX queue out of sync after restart
can: kvaser_usb_leaf: Fix CAN state after restart
Ard Biesheuvel (1):
efi: libstub: drop pointless get_memory_map() call
Arvid Norlander (1):
ACPI: video: Add Toshiba Satellite/Portege Z830 quirk
Baokun Li (1):
ext4: fix null-ptr-deref in ext4_write_info
Bernard Metzler (1):
RDMA/siw: Always consume all skbuf data in sk_data_ready() upcall.
Bitterblue Smith (2):
wifi: rtl8xxxu: Fix skb misuse in TX queue selection
wifi: rtl8xxxu: gen2: Fix mistake in path B IQ calibration
Callum Osmotherly (1):
ALSA: hda/realtek: remove ALC289_FIXUP_DUAL_SPK for Dell 5530
Chao Qin (1):
powercap: intel_rapl: fix UBSAN shift-out-of-bounds issue
Chao Yu (2):
f2fs: fix to do sanity check on destination blkaddr during recovery
f2fs: fix to do sanity check on summary info
Chen-Yu Tsai (1):
clk: mediatek: mt8183: mfgcfg: Propagate rate changes to parent
Christophe JAILLET (7):
nfsd: Fix a memory leak in an error handling path
mmc: au1xmmc: Fix an error handling path in au1xmmc_probe()
mmc: wmt-sdmmc: Fix an error handling path in wmt_mci_probe()
mfd: intel_soc_pmic: Fix an error handling path in intel_soc_pmic_i2c_probe()
mfd: fsl-imx25: Fix an error handling path in mx25_tsadc_setup_irq()
mfd: lp8788: Fix an error handling path in lp8788_probe()
mfd: lp8788: Fix an error handling path in lp8788_irq_init() and lp8788_irq_init()
Claudiu Beznea (3):
iio: adc: at91-sama5d2_adc: fix AT91_SAMA5D2_MR_TRACKTIM_MAX
iio: adc: at91-sama5d2_adc: check return status for pressure and touch
iio: adc: at91-sama5d2_adc: lock around oversampling and sample freq
Coly Li (1):
bcache: fix set_at_max_writeback_rate() for multiple attached devices
Dan Carpenter (7):
wifi: rtl8xxxu: tighten bounds checking in rtl8xxxu_read_efuse() platform/chrome: fix memory corruption in ioctl
mtd: rawnand: meson: fix bit map use in meson_nfc_ecc_correct()
drivers: serial: jsm: fix some leaks in probe
mfd: fsl-imx25: Fix check for platform_get_irq() errors iommu/omap: Fix buffer overflow in debugfs
crypto: cavium - prevent integer overflow loading firmware
Daniel Golle (5):
wifi: rt2x00: don't run Rt5592 IQ calibration on MT7620
wifi: rt2x00: set correct TX_SW_CFG1 MAC register for MT7620
wifi: rt2x00: set VGC gain for both chains of MT7620
wifi: rt2x00: set SoC wmac clock register
wifi: rt2x00: correctly set BBP register 86 for MT7620
Dave Jiang (1):
dmaengine: ioat: stop mod_timer from resurrecting deleted timer in __cleanup()
David Collins (1):
spmi: pmic-arb: correct duplicate APID to PPID mapping logic
David Gow (1):
drm/amd/display: fix overflow on MIN_I64 definition
Dmitry Baryshkov (1):
drm/msm/dpu: index dpu_kms->hw_vbif using vbif_idx
Dmitry Osipenko (1):
media: cedrus: Set the platform driver data earlier
Dmitry Torokhov (2):
ARM: dts: exynos: correct s5k6a3 reset polarity on Midas family
ARM: dts: exynos: fix polarity of VBUS GPIO of Origen
Dongliang Mu (2):
phy: qualcomm: call clk_disable_unprepare in the error handling
usb: idmouse: fix an uninit-value in idmouse_open
Duoming Zhou (2):
mISDN: fix use-after-free bugs in l1oip timer handlers
scsi: libsas: Fix use-after-free bug in smp_execute_task_sg()
Eddie James (2):
iio: pressure: dps310: Refactor startup procedure
iio: pressure: dps310: Reset chip after timeout
Eric Dumazet (3):
once: add DO_ONCE_SLOW() for sleepable contexts
tcp: annotate data-race around tcp_md5sig_pool_populated
inet: fully convert sk->sk_rx_dst to RCU rules
Fangrui Song (1):
riscv: Pass -mno-relax only on lld < 15.0.0
Filipe Manana (1):
btrfs: fix race between quota enable and quota rescan ioctl
Geert Uytterhoeven (1):
ARM: Drop CMDLINE_* dependency on ATAGS
Greg Kroah-Hartman (2):
selinux: use "grep -E" instead of "egrep"
Linux 5.4.220
Guilherme G. Piccoli (1):
firmware: google: Test spinlock on panic path to avoid lockups
Haibo Chen (1):
ARM: dts: imx7d-sdb: config the max pressure for tsc2046
Hangyu Hua (1):
misc: ocxl: fix possible refcount leak in afu_ioctl()
Hans de Goede (3):
platform/x86: msi-laptop: Fix old-ec check for backlight registering platform/x86: msi-laptop: Fix resource cleanup
platform/x86: msi-laptop: Change DMI match / alias strings to fix module autoloading
Hari Chandrakanthan (1):
wifi: mac80211: allow bw change during channel switch in mesh
Helge Deller (1):
parisc: fbdev/stifb: Align graphics memory size to 4MB
Huacai Chen (1):
UM: cpuinfo: Fix a warning for CONFIG_CPUMASK_OFFSTACK
Hyunwoo Kim (2):
fbdev: smscufx: Fix use-after-free in ufx_ops_open()
HID: roccat: Fix use-after-free in roccat_read()
Ian Nam (1):
clk: zynqmp: Fix stack-out-of-bounds in strncpy`
Ignat Korchagin (1):
crypto: akcipher - default implementation for setting a private key
Jack Wang (2):
HSI: omap_ssi_port: Fix dma_map_sg error check
mailbox: bcm-ferxrm-mailbox: Fix error check for dma_map_sg
Jaegeuk Kim (1):
f2fs: increase the limit for reserve_root
Jan Kara (1):
ext4: avoid crash when inline data creation follows DIO write
Javier Martinez Canillas (2):
drm: Use size_t type for len variable in drm_copy_field()
drm: Prevent drm_copy_field() to attempt copying a NULL pointer
Jean-Francois Le Fillatre (1):
usb: add quirks for Lenovo OneLink+ Dock
Jerry Lee 李修賢 (1):
ext4: continue to expand file system when the target size doesn't reach
Jianglei Nie (4):
drm/nouveau: fix a use-after-free in nouveau_gem_prime_import_sg_table()
bnx2x: fix potential memory leak in bnx2x_tpa_stop() drm/nouveau/nouveau_bo: fix potential memory leak in nouveau_bo_alloc()
usb: host: xhci: Fix potential memory leak in xhci_alloc_stream_info()
Jiasheng Jiang (3):
ASoC: rsnd: Add check for rsnd_mod_power_on
fsi: core: Check error number after calling ida_simple_get
mfd: sm501: Add check for platform_driver_register()
Jim Cromie (2):
dyndbg: fix module.dyndbg handling
dyndbg: let query-modname override actual module name
Jinke Han (1):
ext4: place buffer head allocation before handle start
Joel Stanley (1):
clk: ast2600: BCLK comes from EPLL
Jonathan Cameron (1):
iio: ABI: Fix wrong format of differential capacitance channel ABI.
Junichi Uekawa (1):
vhost/vsock: Use kvmalloc/kvfree for larger packets.
Kees Cook (3):
sh: machvec: Use char[] for section boundaries x86/microcode/AMD: Track patch allocation size explicitly
MIPS: BCM47XX: Cast memcmp() of function to (void *)
Keith Busch (1):
nvme: copy firmware_rev on each init
Khalid Masum (1):
xfrm: Update ipcomp_scratches with NULL when freed
Koba Ko (1):
crypto: ccp - Release dma channels before dmaengine unrgister
Kohei Tarumizu (1):
x86/resctrl: Fix to restore to original value when re-enabling hardware prefetch register
Krzysztof Kozlowski (1):
ASoC: wcd9335: fix order of Slimbus unprepare/disable
Lalith Rajendran (1):
ext4: make ext4_lazyinit_thread freezable
Lam Thai (1):
bpftool: Fix a wrong type cast in btf_dumper_int
Lee Jones (1):
bpf: Ensure correct locking around vulnerable function find_vpid()
Letu Ren (1):
scsi: 3w-9xxx: Avoid disabling device if failing to enable it
Liang He (12):
drm/omap: dss: Fix refcount leak bugs
ASoC: eureka-tlv320: Hold reference returned from of_find_xxx API
memory: pl353-smc: Fix refcount leak bug in pl353_smc_probe()
memory: of: Fix refcount leak bug in of_get_ddr_timings()
soc: qcom: smsm: Fix refcount leak bugs in qcom_smsm_probe()
soc: qcom: smem_state: Add refcounting for the 'state->of_node'
clk: meson: Hold reference returned by of_get_parent()
clk: oxnas: Hold reference returned by of_get_parent()
clk: berlin: Add of_node_put() for of_get_parent()
media: exynos4-is: fimc-is: Add of_node_put() when breaking out of loop powerpc/sysdev/fsl_msi: Add missing of_node_put() powerpc/pci_dn: Add missing of_node_put()
Linus Walleij (1):
regulator: qcom_rpm: Fix circular deferral regression
Liu Jian (1):
net: If sock is dead don't access sock's sk_wq in sk_stream_wait_memory
Logan Gunthorpe (2):
md/raid5: Ensure stripe_fill happens on non-read IO with journal md/raid5: Wait for MD_SB_CHANGE_PENDING in raid5d
Lorenz Bauer (1):
bpf: btf: fix truncated last_member_type_id in btf_struct_resolve
Luiz Augusto von Dentz (2):
Bluetooth: hci_sysfs: Fix attempting to call device_add multiple times
Bluetooth: L2CAP: Fix user-after-free
Luke D. Jones (2):
ALSA: hda/realtek: Correct pin configs for ASUS G533Z
ALSA: hda/realtek: Add quirk for ASUS GV601R laptop
Maciej W. Rozycki (2):
RISC-V: Make port I/O string accessors actually work
PCI: Sanitise firmware BAR assignments behind a PCI-PCI bridge
Marek Behún (1):
ARM: dts: turris-omnia: Fix mpp26 pin name and comment
Mario Limonciello (1):
xhci: Don't show warning for reinit on known broken suspend
Martin Liska (1):
gcov: support GCC 12.1 and newer compilers
Masahiro Yamada (1):
kbuild: remove the target in signal traps when interrupted
Mateusz Kwiatkowski (1):
drm/vc4: vec: Fix timings for VEC modes
Maxime Ripard (2):
drm/mipi-dsi: Detach devices when removing the host
clk: bcm2835: Make peripheral PLLC critical
Maya Matuszczyk (1):
drm: panel-orientation-quirks: Add quirk for Anbernic Win600
Miaoqian Lin (6):
clk: tegra: Fix refcount leak in tegra210_clock_init
clk: tegra: Fix refcount leak in tegra114_clock_init
clk: tegra20: Fix refcount leak in tegra20_clock_init
HSI: omap_ssi: Fix refcount leak in ssi_probe
media: xilinx: vipp: Fix refcount leak in xvip_graph_dma_init
clk: ti: dra7-atl: Fix reference leak in of_dra7_atl_clk_probe
Michael Hennerich (1):
iio: dac: ad5593r: Fix i2c read protocol requirements
Michael Walle (2):
ARM: dts: kirkwood: lsxl: fix serial line
ARM: dts: kirkwood: lsxl: remove first ethernet port
Michal Luczaj (1):
KVM: x86/emulator: Fix handing of POP SS to correctly set interruptibility
Mike Pattrick (2):
openvswitch: Fix double reporting of drops in dropwatch
openvswitch: Fix overreporting of drops in dropwatch
Nam Cao (2):
staging: vt6655: fix some erroneous memory clean-up loops
staging: vt6655: fix potential memory leak
Nathan Chancellor (1):
powerpc/math_emu/efp: Include module.h
Neal Cardwell (1):
tcp: fix tcp_cwnd_validate() to not forget is_cwnd_limited
Nicholas Piggin (1):
powerpc/64s: Fix GENERIC_CPU build flags for PPC970 / G5
Niklas Cassel (4):
ata: fix ata_id_sense_reporting_enabled() and ata_id_has_sense_reporting()
ata: fix ata_id_has_devslp()
ata: fix ata_id_has_ncq_autosense()
ata: fix ata_id_has_dipm()
Nuno Sá (1):
iio: inkern: only release the device node when done with it
Ondrej Mosnacek (1):
userfaultfd: open userfaultfds with O_RDONLY
Pali Rohár (3):
powerpc/boot: Explicitly disable usage of SPE instructions
serial: 8250: Fix restoring termios speed after suspend
powerpc: Fix SPE Power ISA properties for e500v1 platforms
Pavel Begunkov (1):
io_uring/af_unix: defer registered files gc to io_uring release
Phil Sutter (1):
netfilter: nft_fib: Fix for rpath check with VRF devices
Qu Wenruo (1):
btrfs: scrub: try to fix super block errors
Quanyang Wang (1):
clk: zynqmp: pll: rectify rate rounding in zynqmp_pll_round_rate
Quentin Monnet (1):
bpftool: Clear errno after libcap's checks
Rafael J. Wysocki (1):
thermal: intel_powerclamp: Use first online CPU as control_cpu
Randy Dunlap (1):
drm: fix drm_mipi_dbi build errors
Richard Acayan (1):
mmc: sdhci-msm: add compatible string check for sdm670
Rik van Riel (1):
livepatch: fix race between fork and KLP transition
Robin Guo (1):
usb: musb: Fix musb_gadget.c rxstate overflow bug
Robin Murphy (1):
iommu/iova: Fix module config properly
Ronnie Sahlberg (1):
cifs: destage dirty pages before re-reading them for cache=none
Russell King (Oracle) (1):
net: mvpp2: fix mvpp2 debugfs leak
Rustam Subkhankulov (1):
platform/chrome: fix double-free in chromeos_laptop_prepare()
Ryusuke Konishi (1):
nilfs2: fix use-after-free bug of struct nilfs_root
Saranya Gopal (1):
ALSA: hda/realtek: Add Intel Reference SSID to support headset keys
Saurabh Sengar (1):
md: Replace snprintf with scnprintf
Sean Christopherson (2):
KVM: nVMX: Unconditionally purge queued/injected events on nested "exit"
KVM: VMX: Drop bits 31:16 when shoving exception error code into VMCS
Serge Semin (1):
ata: libahci_platform: Sanity check the DT child nodes number
Sherry Sun (1):
tty: serial: fsl_lpuart: disable dma rx/tx use flags in lpuart_dma_shutdown
Shigeru Yoshida (1):
nbd: Fix hung when signal interrupts nbd_start_device_ioctl()
Shubhrajyoti Datta (1):
tty: xilinx_uartps: Fix the ignore_status
Srinivas Pandruvada (1):
thermal: intel_powerclamp: Use get_cpu() instead of smp_processor_id() to avoid crash
Stefan Wahren (1):
clk: bcm2835: fix bcm2835_clock_rate_from_divisor declaration
Steven Rostedt (Google) (4):
ring-buffer: Allow splice to read previous partially read pages
ring-buffer: Have the shortest_full queue be the shortest not longest
ring-buffer: Check pending waiters when doing wake ups as well
ring-buffer: Fix race between reset page and reading page
Takashi Iwai (6):
ALSA: oss: Fix potential deadlock at unregistration
ALSA: rawmidi: Drop register_mutex in snd_rawmidi_free()
ALSA: usb-audio: Fix potential memory leaks
ALSA: usb-audio: Fix NULL dererence at error path
ALSA: hda: beep: Simplify keep-power-at-enable behavior
ALSA: hda/hdmi: Don't skip notification handling during PM operation
Tetsuo Handa (5):
net: rds: don't hold sock lock when cancelling work from rds_tcp_reset_callbacks() net/ieee802154: reject zero-sized raw_sendmsg()
wifi: ath9k: avoid uninit memory read in ath9k_htc_rx_msg()
Bluetooth: L2CAP: initialize delayed works at l2cap_chan_create() net/ieee802154: don't warn zero-sized raw_sendmsg()
Tudor Ambarus (1):
mtd: rawnand: atmel: Unmap streaming DMA mappings
Varun Prakash (1):
nvmet-tcp: add bounds check on Transfer Tag
Vincent Whitchurch (1):
spi: s3c64xx: Fix large transfers with DMA
Vitaly Kuznetsov (1):
x86/hyperv: Fix 'struct hv_enlightened_vmcs' definition
Waiman Long (2):
tracing: Disable interrupt or preemption before acquiring arch_spinlock_t cgroup/cpuset: Enable update_tasks_cpumask() on top_cpuset
Wang Kefeng (1):
ARM: 9247/1: mm: set readonly for MT_MEMORY_RO with ARM_LPAE
Wei Yongjun (1):
power: supply: adp5061: fix out-of-bounds read in adp5061_get_chg_type()
Wen Gong (1):
wifi: ath10k: add peer map clean up for peer delete in ath10k_sta_state()
Wenchao Chen (1):
mmc: sdhci-sprd: Fix minimum clock limit
William Dean (1):
mtd: devices: docg3: check the return value of devm_ioremap() in the probe
Wright Feng (1):
wifi: brcmfmac: fix invalid address access when enabling SCAN log level
Xiaoke Wang (1):
staging: rtl8723bs: fix a potential memory leak in rtw_init_cmd_priv()
Xin Long (1):
sctp: handle the error returned from sctp_auth_asoc_init_active_key
Xu Qiang (2):
spi: qup: add missing clk_disable_unprepare on error in spi_qup_resume()
spi: qup: add missing clk_disable_unprepare on error in spi_qup_pm_resume_runtime()
Zhang Qilong (5):
spi/omap100k:Fix PM disable depth imbalance in omap1_spi100k_probe
ASoC: wm8997: Fix PM disable depth imbalance in wm8997_probe
ASoC: wm5110: Fix PM disable depth imbalance in wm5110_probe
ASoC: wm5102: Fix PM disable depth imbalance in wm5102_probe
f2fs: fix race condition on setting FI_NO_EXTENT flag
Zhang Xiaoxu (1):
cifs: Fix the error length of VALIDATE_NEGOTIATE_INFO message
Zheng Yejian (1):
ftrace: Properly unset FTRACE_HASH_FL_MOD
Zheng Yongjun (2):
net: fs_enet: Fix wrong check in do_pd_setup powerpc/powernv: add missing of_node_put() in opal_export_attrs()
Zheyu Ma (2):
drm/bridge: megachips: Fix a null pointer dereference bug
media: cx88: Fix a null-ptr-deref bug in buffer_prepare()
Zhihao Cheng (1):
quota: Check next/prev free block number after reading from quota file
Zhu Yanjun (2):
RDMA/rxe: Fix "kernel NULL pointer dereference" error RDMA/rxe: Fix the error caused by qp->sk
Ziyang Xuan (1):
can: bcm: check the result of can_send() in bcm_can_tx()
hongao (1):
drm/amdgpu: fix initial connector audio value
sunghwan jung (1):
Revert "usb: storage: Add quirk for Samsung Fit flash"
Greg Kroah-Hartman
maintainerDocumentation/ABI/testing/sysfs-bus-iio +1 -1
@@ -138,7 +138,7 @@ Description: Raw capacitance measurement from channel Y. Units after application of scale and offset are nanofarads. -What: /sys/.../iio:deviceX/in_capacitanceY-in_capacitanceZ_raw +What: /sys/.../iio:deviceX/in_capacitanceY-capacitanceZ_raw KernelVersion: 3.2 Contact: [email protected] Description:
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 219 +SUBLEVEL = 220 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/arm/Kconfig +0 -1
@@ -1837,7 +1837,6 @@ config CMDLINE choice prompt "Kernel command line type" if CMDLINE != "" default CMDLINE_FROM_BOOTLOADER - depends on ATAGS config CMDLINE_FROM_BOOTLOADER bool "Use bootloader kernel arguments if available"
arch/arm/boot/dts/armada-385-turris-omnia.dts +2 -2
@@ -307,7 +307,7 @@ marvell,function = "spi0"; }; - spi0cs1_pins: spi0cs1-pins { + spi0cs2_pins: spi0cs2-pins { marvell,pins = "mpp26"; marvell,function = "spi0"; };
@@ -342,7 +342,7 @@ }; }; - /* MISO, MOSI, SCLK and CS1 are routed to pin header CN11 */ + /* MISO, MOSI, SCLK and CS2 are routed to pin header CN11 */ }; &uart0 {
arch/arm/boot/dts/exynos4412-midas.dtsi +1 -1
@@ -534,7 +534,7 @@ clocks = <&camera 1>; clock-names = "extclk"; samsung,camclk-out = <1>; - gpios = <&gpm1 6 GPIO_ACTIVE_HIGH>; + gpios = <&gpm1 6 GPIO_ACTIVE_LOW>; port { is_s5k6a3_ep: endpoint {
arch/arm/boot/dts/exynos4412-origen.dts +1 -1
@@ -86,7 +86,7 @@ }; &ehci { - samsung,vbus-gpio = <&gpx3 5 1>; + samsung,vbus-gpio = <&gpx3 5 GPIO_ACTIVE_HIGH>; status = "okay"; phys = <&exynos_usbphy 2>, <&exynos_usbphy 3>; phy-names = "hsic0", "hsic1";
arch/arm/boot/dts/imx6dl.dtsi +3 -0
@@ -81,6 +81,9 @@ ocram: sram@900000 { compatible = "mmio-sram"; reg = <0x00900000 0x20000>; + ranges = <0 0x00900000 0x20000>; + #address-cells = <1>; + #size-cells = <1>; clocks = <&clks IMX6QDL_CLK_OCRAM>; };
arch/arm/boot/dts/imx6q.dtsi +3 -0
@@ -158,6 +158,9 @@ ocram: sram@900000 { compatible = "mmio-sram"; reg = <0x00900000 0x40000>; + ranges = <0 0x00900000 0x40000>; + #address-cells = <1>; + #size-cells = <1>; clocks = <&clks IMX6QDL_CLK_OCRAM>; };
arch/arm/boot/dts/imx6qp.dtsi +6 -0
@@ -9,12 +9,18 @@ ocram2: sram@940000 { compatible = "mmio-sram"; reg = <0x00940000 0x20000>; + ranges = <0 0x00940000 0x20000>; + #address-cells = <1>; + #size-cells = <1>; clocks = <&clks IMX6QDL_CLK_OCRAM>; }; ocram3: sram@960000 { compatible = "mmio-sram"; reg = <0x00960000 0x20000>; + ranges = <0 0x00960000 0x20000>; + #address-cells = <1>; + #size-cells = <1>; clocks = <&clks IMX6QDL_CLK_OCRAM>; };
arch/arm/boot/dts/imx6sl.dtsi +3 -0
@@ -121,6 +121,9 @@ ocram: sram@900000 { compatible = "mmio-sram"; reg = <0x00900000 0x20000>; + ranges = <0 0x00900000 0x20000>; + #address-cells = <1>; + #size-cells = <1>; clocks = <&clks IMX6SL_CLK_OCRAM>; };
arch/arm/boot/dts/imx6sll.dtsi +3 -0
@@ -123,6 +123,9 @@ ocram: sram@900000 { compatible = "mmio-sram"; reg = <0x00900000 0x20000>; + ranges = <0 0x00900000 0x20000>; + #address-cells = <1>; + #size-cells = <1>; }; intc: interrupt-controller@a01000 {
arch/arm/boot/dts/imx6sx.dtsi +6 -0
@@ -163,12 +163,18 @@ ocram_s: sram@8f8000 { compatible = "mmio-sram"; reg = <0x008f8000 0x4000>; + ranges = <0 0x008f8000 0x4000>; + #address-cells = <1>; + #size-cells = <1>; clocks = <&clks IMX6SX_CLK_OCRAM_S>; }; ocram: sram@900000 { compatible = "mmio-sram"; reg = <0x00900000 0x20000>; + ranges = <0 0x00900000 0x20000>; + #address-cells = <1>; + #size-cells = <1>; clocks = <&clks IMX6SX_CLK_OCRAM>; };
arch/arm/boot/dts/imx7d-sdb.dts +1 -6
@@ -177,12 +177,7 @@ interrupt-parent = <&gpio2>; interrupts = <29 0>; pendown-gpio = <&gpio2 29 GPIO_ACTIVE_HIGH>; - ti,x-min = /bits/ 16 <0>; - ti,x-max = /bits/ 16 <0>; - ti,y-min = /bits/ 16 <0>; - ti,y-max = /bits/ 16 <0>; - ti,pressure-max = /bits/ 16 <0>; - ti,x-plate-ohms = /bits/ 16 <400>; + touchscreen-max-pressure = <255>; wakeup-source; }; };
arch/arm/boot/dts/kirkwood-lsxl.dtsi +5 -11
@@ -10,6 +10,11 @@ ocp@f1000000 { pinctrl: pin-controller@10000 { + /* Non-default UART pins */ + pmx_uart0: pmx-uart0 { + marvell,pins = "mpp4", "mpp5"; + }; + pmx_power_hdd: pmx-power-hdd { marvell,pins = "mpp10"; marvell,function = "gpo";
@@ -213,22 +218,11 @@ &mdio { status = "okay"; - ethphy0: ethernet-phy@0 { - reg = <0>; - }; - ethphy1: ethernet-phy@8 { reg = <8>; }; }; -ð0 { - status = "okay"; - ethernet0-port@0 { - phy-handle = <ðphy0>; - }; -}; - ð1 { status = "okay"; ethernet1-port@0 {
arch/arm/mm/mmu.c +4 -0
@@ -320,7 +320,11 @@ static struct mem_type mem_types[] __ro_after_init = { .prot_pte = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY | L_PTE_XN | L_PTE_RDONLY, .prot_l1 =PMD_TYPE_TABLE , +#ifdef CONFIG_ARM_LPAE + .prot_sect = PMD_TYPE_SECT | L_PMD_SECT_RDONLY | PMD_SECT_AP2, +#else .prot_sect = PMD_TYPE_SECT, +#endif .domain = DOMAIN_KERNEL, }, [MT_ROM] = {
arch/mips/bcm47xx/prom.c +2 -2
@@ -85,7 +85,7 @@ static __init void prom_init_mem(void)pr_debug ("Assume 128MB RAM\n" );break ; } -if (!memcmp (prom_init, prom_init + mem,32 )) +if (!memcmp ((void *)prom_init, (void *)prom_init + mem,32 ))break ; } lowmem = mem;
@@ -162,7 +162,7 @@ void __init bcm47xx_prom_highmem_init(void) off =EXTVBASE +__pa (off);for (extmem =128 <<20 ; extmem <512 <<20 ; extmem <<=1 ) { -if (!memcmp (prom_init, (void *)(off + extmem),16 )) +if (!memcmp ((void *)prom_init, (void *)(off + extmem),16 ))break ; } extmem -= lowmem;
arch/powerpc/Makefile +1 -1
@@ -155,7 +155,7 @@ CFLAGS-$(CONFIG_GENERIC_CPU) += -mcpu=power8 CFLAGS-$(CONFIG_GENERIC_CPU) += $(call cc-option,-mtune=power9,-mtune=power8) else CFLAGS-$(CONFIG_GENERIC_CPU) += $(call cc-option,-mtune=power7,$(call cc-option,-mtune=power5)) -CFLAGS-$(CONFIG_GENERIC_CPU) += $(call cc-option,-mcpu=power5,-mcpu=power4) +CFLAGS-$(CONFIG_GENERIC_CPU) += -mcpu=power4 endif else ifdef CONFIG_PPC_BOOK3E_64 CFLAGS-$(CONFIG_GENERIC_CPU) += -mcpu=powerpc64
arch/powerpc/boot/Makefile +1 -0
@@ -30,6 +30,7 @@ endif BOOTCFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \ -fno-strict-aliasing -O2 -msoft-float -mno-altivec -mno-vsx \ + $(call cc-option,-mno-spe) $(call cc-option,-mspe=no) \ -pipe -fomit-frame-pointer -fno-builtin -fPIC -nostdinc \ $(LINUXINCLUDE)
arch/powerpc/boot/dts/fsl/e500v1_power_isa.dtsi new file +51 -0
51 lines not on this page · raw message
arch/powerpc/boot/dts/fsl/mpc8540ads.dts +1 -1
@@ -7,7 +7,7 @@ /dts-v1/; -/include/ "e500v2_power_isa.dtsi" +/include/ "e500v1_power_isa.dtsi" / { model = "MPC8540ADS";
arch/powerpc/boot/dts/fsl/mpc8541cds.dts +1 -1
@@ -7,7 +7,7 @@ /dts-v1/; -/include/ "e500v2_power_isa.dtsi" +/include/ "e500v1_power_isa.dtsi" / { model = "MPC8541CDS";
arch/powerpc/boot/dts/fsl/mpc8555cds.dts +1 -1
@@ -7,7 +7,7 @@ /dts-v1/; -/include/ "e500v2_power_isa.dtsi" +/include/ "e500v1_power_isa.dtsi" / { model = "MPC8555CDS";
arch/powerpc/boot/dts/fsl/mpc8560ads.dts +1 -1
@@ -7,7 +7,7 @@ /dts-v1/; -/include/ "e500v2_power_isa.dtsi" +/include/ "e500v1_power_isa.dtsi" / { model = "MPC8560ADS";
arch/powerpc/kernel/pci_dn.c +1 -0
@@ -325,6 +325,7 @@ struct pci_dn *pci_add_device_node_info(struct pci_controller *hose,INIT_LIST_HEAD (&pdn->list); parent =of_get_parent (dn); pdn->parent = parent ?PCI_DN (parent) :NULL ; +of_node_put (parent);if (pdn->parent)list_add_tail (&pdn->list, &pdn->parent->child_list);
arch/powerpc/math-emu/math_efp.c +1 -0
@@ -17,6 +17,7 @@#include <linux/types.h> #include <linux/prctl.h> +#include <linux/module.h> #include <linux/uaccess.h> #include <asm/reg.h>
arch/powerpc/platforms/powernv/opal.c +1 -0
@@ -776,6 +776,7 @@ static void opal_export_attrs(void) kobj =kobject_create_and_add ("exports" , opal_kobj);if (!kobj) {pr_warn ("kobject_create_and_add() of exports failed\n" ); +of_node_put (np);return ; }
arch/powerpc/sysdev/fsl_msi.c +2 -0
@@ -211,8 +211,10 @@ static int fsl_setup_msi_irqs(struct pci_dev *pdev, int nvec, int type)dev_err (&pdev->dev,"node %pOF has an invalid fsl,msi phandle %u\n" , hose->dn, np->phandle); +of_node_put (np);return -EINVAL ; } +of_node_put (np); }for_each_pci_msi_entry (entry, pdev) {
arch/riscv/Makefile +2 -0
@@ -35,6 +35,7 @@ else endif ifeq ($(CONFIG_LD_IS_LLD),y) +ifeq ($(shell test $(CONFIG_LLD_VERSION) -lt 150000; echo $$?),0) KBUILD_CFLAGS += -mno-relax KBUILD_AFLAGS += -mno-relax ifneq ($(LLVM_IAS),1)
@@ -42,6 +43,7 @@ ifneq ($(LLVM_IAS),1) KBUILD_AFLAGS += -Wa,-mno-relax endif endif +endif # ISA string setting riscv-march-$(CONFIG_ARCH_RV32I) := rv32ima
arch/riscv/include/asm/io.h +8 -8
@@ -252,9 +252,9 @@ __io_reads_ins(reads, u32, l, __io_br(), __io_ar(addr)) __io_reads_ins(ins, u8, b, __io_pbr(), __io_par(addr)) __io_reads_ins(ins, u16, w, __io_pbr(), __io_par(addr)) __io_reads_ins(ins, u32, l, __io_pbr(), __io_par(addr)) -#define insb (addr, buffer, count) __insb((void __iomem *)(long)addr, buffer, count) -#define insw (addr, buffer, count) __insw((void __iomem *)(long)addr, buffer, count) -#define insl (addr, buffer, count) __insl((void __iomem *)(long)addr, buffer, count) +#define insb (addr, buffer, count) __insb(PCI_IOBASE + (addr), buffer, count) +#define insw (addr, buffer, count) __insw(PCI_IOBASE + (addr), buffer, count) +#define insl (addr, buffer, count) __insl(PCI_IOBASE + (addr), buffer, count) __io_writes_outs(writes, u8, b, __io_bw(), __io_aw())__io_writes_outs (writes, u16, w,__io_bw (),__io_aw ())
@@ -266,22 +266,22 @@ __io_writes_outs(writes, u32, l, __io_bw(), __io_aw()) __io_writes_outs(outs, u8, b, __io_pbw(), __io_paw()) __io_writes_outs(outs, u16, w, __io_pbw(), __io_paw()) __io_writes_outs(outs, u32, l, __io_pbw(), __io_paw()) -#define outsb (addr, buffer, count) __outsb((void __iomem *)(long)addr, buffer, count) -#define outsw (addr, buffer, count) __outsw((void __iomem *)(long)addr, buffer, count) -#define outsl (addr, buffer, count) __outsl((void __iomem *)(long)addr, buffer, count) +#define outsb (addr, buffer, count) __outsb(PCI_IOBASE + (addr), buffer, count) +#define outsw (addr, buffer, count) __outsw(PCI_IOBASE + (addr), buffer, count) +#define outsl (addr, buffer, count) __outsl(PCI_IOBASE + (addr), buffer, count)#ifdef CONFIG_64BIT __io_reads_ins(reads, u64, q, __io_br(), __io_ar(addr))#define readsq (addr, buffer, count) __readsq(addr, buffer, count) __io_reads_ins(ins, u64, q, __io_pbr(), __io_par(addr)) -#define insq (addr, buffer, count) __insq((void __iomem *)addr, buffer, count) +#define insq (addr, buffer, count) __insq(PCI_IOBASE + (addr), buffer, count) __io_writes_outs(writes, u64, q, __io_bw(), __io_aw())#define writesq (addr, buffer, count) __writesq(addr, buffer, count) __io_writes_outs(outs, u64, q, __io_pbr(), __io_paw()) -#define outsq (addr, buffer, count) __outsq((void __iomem *)addr, buffer, count) +#define outsq (addr, buffer, count) __outsq(PCI_IOBASE + (addr), buffer, count)#endif #include <asm-generic/io.h>
arch/riscv/kernel/sys_riscv.c +0 -3
@@ -18,9 +18,6 @@ static long riscv_sys_mmap(unsigned long addr, unsigned long len,if (unlikely (offset & (~PAGE_MASK >> page_shift_offset)))return -EINVAL ; -if (unlikely ((prot &PROT_WRITE ) && !(prot &PROT_READ ))) -return -EINVAL ; -return ksys_mmap_pgoff (addr, len, prot, flags, fd, offset >> (PAGE_SHIFT - page_shift_offset)); }
arch/sh/include/asm/sections.h +1 -1
@@ -4,7 +4,7 @@#include <asm-generic/sections.h> -extern long __machvec_start, __machvec_end; +extern char __machvec_start[], __machvec_end[];extern char __uncached_start, __uncached_end;extern char __start_eh_frame[], __stop_eh_frame[];
arch/sh/kernel/machvec.c +5 -5
@@ -19,8 +19,8 @@#define MV_NAME_SIZE 32#define for_each_mv (mv) \ - for ((mv) = (struct sh_machine_vector *)&__machvec_start; \ - (mv) && (unsigned long)(mv) < (unsigned long)&__machvec_end; \ + for ((mv) = (struct sh_machine_vector *)__machvec_start; \ + (mv) && (unsigned long)(mv) < (unsigned long)__machvec_end; \ (mv)++)static struct sh_machine_vector *__init get_mv_byname (const char *name)
@@ -86,8 +86,8 @@ void __init sh_mv_setup(void)if (!machvec_selected) {unsigned long machvec_size; - machvec_size = ((unsigned long )&__machvec_end - - (unsigned long )&__machvec_start); + machvec_size = ((unsigned long )__machvec_end - + (unsigned long )__machvec_start);/* * Sanity check for machvec section alignment. Ensure
@@ -101,7 +101,7 @@ void __init sh_mv_setup(void)* vector (usually the only one) from .machvec.init. */ if (machvec_size >=sizeof (struct sh_machine_vector )) - sh_mv = *(struct sh_machine_vector *)&__machvec_start; + sh_mv = *(struct sh_machine_vector *)__machvec_start; }printk (KERN_NOTICE "Booting machvec: %s\n" ,get_system_type ());
arch/um/kernel/um_arch.c +1 -1
@@ -77,7 +77,7 @@ static int show_cpuinfo(struct seq_file *m, void *v)static void *c_start (struct seq_file *m,loff_t *pos) { -return *pos <NR_CPUS ? cpu_data + *pos :NULL ; +return *pos < nr_cpu_ids ? cpu_data + *pos :NULL ; }static void *c_next (struct seq_file *m,void *v,loff_t *pos)
arch/x86/include/asm/hyperv-tlfs.h +2 -2
@@ -721,7 +721,7 @@ struct hv_enlightened_vmcs {u64 guest_rip;u32 hv_clean_fields; -u32 hv_padding_32; +u32 padding32_1;u32 hv_synthetic_controls;struct {u32 nested_flush_hypercall:1 ;
@@ -729,7 +729,7 @@ struct hv_enlightened_vmcs { u32 reserved:30; }__packed hv_enlightenments_control;u32 hv_vp_id; - +u32 padding32_2;u64 hv_vm_id;u64 partition_assist_page;u64 padding64_4[4 ];
arch/x86/include/asm/microcode.h +1 -0
@@ -9,6 +9,7 @@struct ucode_patch {struct list_head plist;void *data;/* Intel uses only this one */ +unsigned int size;u32 patch_id;u16 equiv_cpu; };
arch/x86/kernel/cpu/microcode/amd.c +2 -1
@@ -783,6 +783,7 @@ static int verify_and_add_patch(u8 family, u8 *fw, unsigned int leftover,kfree (patch);return -EINVAL ; } + patch->size = *patch_size; mc_hdr = (struct microcode_header_amd *)(fw +SECTION_HDR_SIZE ); proc_id = mc_hdr->processor_rev_id;
@@ -864,7 +865,7 @@ load_microcode_amd(bool save, u8 family, const u8 *data, size_t size)return ret;memset (amd_ucode_patch,0 ,PATCH_MAX_SIZE ); -memcpy (amd_ucode_patch, p->data,min_t (u32,ksize (p->data),PATCH_MAX_SIZE )); +memcpy (amd_ucode_patch, p->data,min_t (u32, p->size,PATCH_MAX_SIZE ));return ret; }
arch/x86/kernel/cpu/resctrl/pseudo_lock.c +9 -3
@@ -416,6 +416,7 @@ static int pseudo_lock_fn(void *_rdtgrp)struct pseudo_lock_region *plr = rdtgrp->plr;u32 rmid_p, closid_p;unsigned long i; +u64 saved_msr;#ifdef CONFIG_KASAN /* * The registers used for local register variables are also used
@@ -459,6 +460,7 @@ static int pseudo_lock_fn(void *_rdtgrp)* the buffer and evict pseudo-locked memory read earlier from the * cache. */ + saved_msr =__rdmsr (MSR_MISC_FEATURE_CONTROL );__wrmsr (MSR_MISC_FEATURE_CONTROL , prefetch_disable_bits,0x0 ); closid_p =this_cpu_read (pqr_state.cur_closid); rmid_p =this_cpu_read (pqr_state.cur_rmid);
@@ -510,7 +512,7 @@ static int pseudo_lock_fn(void *_rdtgrp)__wrmsr (IA32_PQR_ASSOC , rmid_p, closid_p);/* Re-enable the hardware prefetcher(s) */ -wrmsr (MSR_MISC_FEATURE_CONTROL ,0x0 ,0x0 ); +wrmsrl (MSR_MISC_FEATURE_CONTROL , saved_msr);local_irq_enable (); plr->thread_done =1 ;
@@ -867,6 +869,7 @@ bool rdtgroup_pseudo_locked_in_hierarchy(struct rdt_domain *d)static int measure_cycles_lat_fn (void *_plr) {struct pseudo_lock_region *plr = _plr; +u32 saved_low, saved_high;unsigned long i;u64 start, end;void *mem_r;
@@ -875,6 +878,7 @@ static int measure_cycles_lat_fn(void *_plr)/* * Disable hardware prefetchers. */ +rdmsr (MSR_MISC_FEATURE_CONTROL , saved_low, saved_high);wrmsr (MSR_MISC_FEATURE_CONTROL , prefetch_disable_bits,0x0 ); mem_r =READ_ONCE (plr->kmem);/*
@@ -891,7 +895,7 @@ static int measure_cycles_lat_fn(void *_plr) end =rdtsc_ordered ();trace_pseudo_lock_mem_latency ((u32)(end - start)); } -wrmsr (MSR_MISC_FEATURE_CONTROL ,0x0 ,0x0 ); +wrmsr (MSR_MISC_FEATURE_CONTROL , saved_low, saved_high);local_irq_enable (); plr->thread_done =1 ;wake_up_interruptible (&plr->lock_thread_wq);
@@ -936,6 +940,7 @@ static int measure_residency_fn(struct perf_event_attr *miss_attr,u64 hits_before =0 , hits_after =0 , miss_before =0 , miss_after =0 ;struct perf_event *miss_event, *hit_event;int hit_pmcnum, miss_pmcnum; +u32 saved_low, saved_high;unsigned int line_size;unsigned int size;unsigned long i;
@@ -969,6 +974,7 @@ static int measure_residency_fn(struct perf_event_attr *miss_attr,/* * Disable hardware prefetchers. */ +rdmsr (MSR_MISC_FEATURE_CONTROL , saved_low, saved_high);wrmsr (MSR_MISC_FEATURE_CONTROL , prefetch_disable_bits,0x0 );/* Initialize rest of local variables */
@@ -1027,7 +1033,7 @@ static int measure_residency_fn(struct perf_event_attr *miss_attr,*/ rmb ();/* Re-enable hardware prefetchers */ -wrmsr (MSR_MISC_FEATURE_CONTROL ,0x0 ,0x0 ); +wrmsr (MSR_MISC_FEATURE_CONTROL , saved_low, saved_high);local_irq_enable (); out_hit:perf_event_release_kernel (hit_event);
arch/x86/kvm/emulate.c +1 -1
@@ -2020,7 +2020,7 @@ static int em_pop_sreg(struct x86_emulate_ctxt *ctxt)if (rc !=X86EMUL_CONTINUE )return rc; -if (ctxt->modrm_reg ==VCPU_SREG_SS ) +if (seg ==VCPU_SREG_SS ) ctxt->interruptibility =KVM_X86_SHADOW_INT_MOV_SS ;if (ctxt->op_bytes >2 )rsp_increment (ctxt, ctxt->op_bytes -2 );
arch/x86/kvm/vmx/nested.c +21 -9
@@ -3427,7 +3427,16 @@ static void nested_vmx_inject_exception_vmexit(struct kvm_vcpu *vcpu,u32 intr_info = nr |INTR_INFO_VALID_MASK ;if (vcpu->arch.exception.has_error_code) { - vmcs12->vm_exit_intr_error_code = vcpu->arch.exception.error_code; +/* +* Intel CPUs do not generate error codes with bits 31:16 set, +* and more importantly VMX disallows setting bits 31:16 in the +* injected error code for VM-Entry. Drop the bits to mimic +* hardware and avoid inducing failure on nested VM-Entry if L1 +* chooses to inject the exception back to L2. AMD CPUs _do_ +* generate "full" 32-bit error codes, so KVM allows userspace +* to inject exception error codes with bits 31:16 set. +*/ + vmcs12->vm_exit_intr_error_code = (u16 )vcpu->arch.exception.error_code; intr_info |=INTR_INFO_DELIVER_CODE_MASK ; }
@@ -3762,14 +3771,6 @@ static void prepare_vmcs12(struct kvm_vcpu *vcpu, struct vmcs12 *vmcs12,nested_vmx_abort (vcpu,VMX_ABORT_SAVE_GUEST_MSR_FAIL ); } - -/* -* Drop what we picked up for L2 via vmx_complete_interrupts. It is -* preserved above and would only end up incorrectly in L1. -*/ - vcpu->arch.nmi_injected = false; -kvm_clear_exception_queue (vcpu); -kvm_clear_interrupt_queue (vcpu); }/*
@@ -4104,6 +4105,17 @@ void nested_vmx_vmexit(struct kvm_vcpu *vcpu, u32 exit_reason,WARN_ON_ONCE (nested_early_check); } +/* +* Drop events/exceptions that were queued for re-injection to L2 +* (picked up via vmx_complete_interrupts()), as well as exceptions +* that were pending for L2. Note, this must NOT be hoisted above +* prepare_vmcs12(), events/exceptions queued for re-injection need to +* be captured in vmcs12 (see vmcs12_save_pending_event()). +*/ + vcpu->arch.nmi_injected = false; +kvm_clear_exception_queue (vcpu); +kvm_clear_interrupt_queue (vcpu); +vmx_switch_vmcs (vcpu, &vmx->vmcs01);/* Update any VMCS fields that might have changed while L2 ran */
arch/x86/kvm/vmx/vmx.c +11 -1
@@ -1676,7 +1676,17 @@ static void vmx_queue_exception(struct kvm_vcpu *vcpu)kvm_deliver_exception_payload (vcpu);if (has_error_code) { -vmcs_write32 (VM_ENTRY_EXCEPTION_ERROR_CODE , error_code); +/* +* Despite the error code being architecturally defined as 32 +* bits, and the VMCS field being 32 bits, Intel CPUs and thus +* VMX don't actually supporting setting bits 31:16. Hardware +* will (should) never provide a bogus error code, but AMD CPUs +* do generate error codes with bits 31:16 set, and so KVM's +* ABI lets userspace shove in arbitrary 32-bit values. Drop +* the upper bits to avoid VM-Fail, losing information that +* does't really exist is preferable to killing the VM. +*/ +vmcs_write32 (VM_ENTRY_EXCEPTION_ERROR_CODE , (u16 )error_code); intr_info |=INTR_INFO_DELIVER_CODE_MASK ; }
crypto/akcipher.c +8 -0
@@ -119,6 +119,12 @@ static int akcipher_default_op(struct akcipher_request *req)return -ENOSYS ; } +static int akcipher_default_set_key (struct crypto_akcipher *tfm, +const void *key,unsigned int keylen) +{ +return -ENOSYS ; +} +int crypto_register_akcipher (struct akcipher_alg *alg) {struct crypto_alg *base = &alg->base;
@@ -131,6 +137,8 @@ int crypto_register_akcipher(struct akcipher_alg *alg) alg->encrypt = akcipher_default_op;if (!alg->decrypt) alg->decrypt = akcipher_default_op; +if (!alg->set_priv_key) + alg->set_priv_key = akcipher_default_set_key;akcipher_prepare_alg (alg);return crypto_register_alg (base);
drivers/acpi/acpi_video.c +16 -0
@@ -498,6 +498,22 @@ static const struct dmi_system_id video_dmi_table[] = { DMI_MATCH(DMI_PRODUCT_NAME, "SATELLITE R830"), }, }, + { + .callback = video_disable_backlight_sysfs_if, + .ident = "Toshiba Satellite Z830", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "SATELLITE Z830"), + }, + }, + { + .callback = video_disable_backlight_sysfs_if, + .ident = "Toshiba Portege Z830", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "PORTEGE Z830"), + }, + }, /* * Some machine's _DOD IDs don't have bit 31(Device ID Scheme) set * but the IDs actually follow the Device ID Scheme.
drivers/ata/libahci_platform.c +12 -2
@@ -451,14 +451,24 @@ struct ahci_host_priv *ahci_platform_get_resources(struct platform_device *pdev, } } - hpriv->nports = child_nodes =of_get_child_count (dev->of_node); +/* +* Too many sub-nodes most likely means having something wrong with +* the firmware. +*/ + child_nodes =of_get_child_count (dev->of_node); +if (child_nodes >AHCI_MAX_PORTS ) { + rc = -EINVAL ; + goto err_out; + }/* * If no sub-node was found, we still need to set nports to * one in order to be able to use the * ahci_platform_[en|dis]able_[phys|regulators] functions. */ -if (!child_nodes) +if (child_nodes) + hpriv->nports = child_nodes; +else hpriv->nports =1 ; hpriv->phys =devm_kcalloc (dev, hpriv->nports,sizeof (*hpriv->phys),GFP_KERNEL );
drivers/block/nbd.c +4 -2
@@ -1327,10 +1327,12 @@ static int nbd_start_device_ioctl(struct nbd_device *nbd, struct block_device *bmutex_unlock (&nbd->config_lock); ret =wait_event_interruptible (config->recv_wq,atomic_read (&config->recv_threads) ==0 ); -if (ret) +if (ret) {sock_shutdown (nbd); -flush_workqueue (nbd->recv_workq); +nbd_clear_que (nbd); + } +flush_workqueue (nbd->recv_workq);mutex_lock (&nbd->config_lock);nbd_bdev_reset (bdev);/* user requested, ignore socket errors */
drivers/clk/bcm/clk-bcm2835.c +4 -4
@@ -967,9 +967,9 @@ static u32 bcm2835_clock_choose_div(struct clk_hw *hw,return div; } -static long bcm2835_clock_rate_from_divisor (struct bcm2835_clock *clock, -unsigned long parent_rate, -u32 div) +static unsigned long bcm2835_clock_rate_from_divisor (struct bcm2835_clock *clock, +unsigned long parent_rate, +u32 div) {const struct bcm2835_clock_data *data = clock->data;u64 temp;
@@ -1756,7 +1756,7 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { .load_mask = CM_PLLC_LOADPER, .hold_mask = CM_PLLC_HOLDPER, .fixed_divider = 1, - .flags = CLK_SET_RATE_PARENT), + .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),/* * PLLD is the display PLL, used to drive DSI display panels.
drivers/clk/berlin/bg2.c +4 -1
@@ -500,12 +500,15 @@ static void __init berlin2_clock_setup(struct device_node *np)int n, ret; clk_data =kzalloc (struct_size (clk_data, hws,MAX_CLKS ),GFP_KERNEL ); -if (!clk_data) +if (!clk_data) { +of_node_put (parent_np);return ; + } clk_data->num =MAX_CLKS ; hws = clk_data->hws; gbase =of_iomap (parent_np,0 ); +of_node_put (parent_np);if (!gbase)return ;
drivers/clk/berlin/bg2q.c +5 -1
@@ -286,19 +286,23 @@ static void __init berlin2q_clock_setup(struct device_node *np)int n, ret; clk_data =kzalloc (struct_size (clk_data, hws,MAX_CLKS ),GFP_KERNEL ); -if (!clk_data) +if (!clk_data) { +of_node_put (parent_np);return ; + } clk_data->num =MAX_CLKS ; hws = clk_data->hws; gbase =of_iomap (parent_np,0 );if (!gbase) { +of_node_put (parent_np);pr_err ("%pOF: Unable to map global base\n" , np);return ; }/* BG2Q CPU PLL is not part of global registers */ cpupll_base =of_iomap (parent_np,1 ); +of_node_put (parent_np);if (!cpupll_base) {pr_err ("%pOF: Unable to map cpupll base\n" , np);iounmap (gbase);
drivers/clk/clk-ast2600.c +1 -1
@@ -579,7 +579,7 @@ static int aspeed_g6_clk_probe(struct platform_device *pdev)regmap_write (map,0x308 ,0x12000 );/* 3x3 = 9 */ /* P-Bus (BCLK) clock divider */ - hw =clk_hw_register_divider_table (dev,"bclk" ,"hpll" ,0 , + hw =clk_hw_register_divider_table (dev,"bclk" ,"epll" ,0 , scu_g6_base +ASPEED_G6_CLK_SELECTION1 ,20 ,3 ,0 , ast2600_div_table, &aspeed_g6_clk_lock);
drivers/clk/clk-oxnas.c +4 -2
@@ -207,7 +207,7 @@ static const struct of_device_id oxnas_stdclk_dt_ids[] = {static int oxnas_stdclk_probe (struct platform_device *pdev) { -struct device_node *np = pdev->dev.of_node; +struct device_node *np = pdev->dev.of_node, *parent_np;const struct oxnas_stdclk_data *data;const struct of_device_id *id;struct regmap *regmap;
@@ -219,7 +219,9 @@ static int oxnas_stdclk_probe(struct platform_device *pdev)return -ENODEV ; data = id->data; - regmap =syscon_node_to_regmap (of_get_parent (np)); + parent_np =of_get_parent (np); + regmap =syscon_node_to_regmap (parent_np); +of_node_put (parent_np);if (IS_ERR (regmap)) {dev_err (&pdev->dev,"failed to have parent regmap\n" );return PTR_ERR (regmap);
drivers/clk/mediatek/clk-mt8183-mfgcfg.c +3 -3
@@ -18,9 +18,9 @@ static const struct mtk_gate_regs mfg_cg_regs = { .sta_ofs = 0x0, }; -#define GATE_MFG (_id, _name, _parent, _shift) \ - GATE_MTK(_id, _name, _parent, &mfg_cg_regs, _shift, \ - &mtk_clk_gate_ops_setclr) +#define GATE_MFG (_id, _name, _parent, _shift) \ + GATE_MTK_FLAGS(_id, _name, _parent, &mfg_cg_regs, _shift, \ + &mtk_clk_gate_ops_setclr, CLK_SET_RATE_PARENT)static const struct mtk_gate mfg_clks[] = {GATE_MFG (CLK_MFG_BG3D ,"mfg_bg3d" ,"mfg_sel" ,0 )
drivers/clk/meson/meson-aoclk.c +4 -1
@@ -36,6 +36,7 @@ int meson_aoclkc_probe(struct platform_device *pdev)struct meson_aoclk_reset_controller *rstc;struct meson_aoclk_data *data;struct device *dev = &pdev->dev; +struct device_node *np;struct regmap *regmap;int ret, clkid;
@@ -47,7 +48,9 @@ int meson_aoclkc_probe(struct platform_device *pdev)if (!rstc)return -ENOMEM ; - regmap =syscon_node_to_regmap (of_get_parent (dev->of_node)); + np =of_get_parent (dev->of_node); + regmap =syscon_node_to_regmap (np); +of_node_put (np);if (IS_ERR (regmap)) {dev_err (dev,"failed to get regmap\n" );return PTR_ERR (regmap);
drivers/clk/meson/meson-eeclk.c +4 -1
@@ -17,6 +17,7 @@ int meson_eeclkc_probe(struct platform_device *pdev) {const struct meson_eeclkc_data *data;struct device *dev = &pdev->dev; +struct device_node *np;struct regmap *map;int ret, i;
@@ -25,7 +26,9 @@ int meson_eeclkc_probe(struct platform_device *pdev)return -EINVAL ;/* Get the hhi system controller node */ - map =syscon_node_to_regmap (of_get_parent (dev->of_node)); + np =of_get_parent (dev->of_node); + map =syscon_node_to_regmap (np); +of_node_put (np);if (IS_ERR (map)) {dev_err (dev,"failed to get HHI regmap\n" );
drivers/clk/meson/meson8b.c +4 -1
@@ -3684,13 +3684,16 @@ static void __init meson8b_clkc_init_common(struct device_node *np, struct clk_hw_onecell_data *clk_hw_onecell_data) {struct meson8b_clk_reset *rstc; +struct device_node *parent_np;const char *notifier_clk_name;struct clk *notifier_clk;void __iomem *clk_base;struct regmap *map;int i, ret; - map =syscon_node_to_regmap (of_get_parent (np)); + parent_np =of_get_parent (np); + map =syscon_node_to_regmap (parent_np); +of_node_put (parent_np);if (IS_ERR (map)) {pr_info ("failed to get HHI regmap - Trying obsolete regs\n" );
drivers/clk/tegra/clk-tegra114.c +1 -0
@@ -1337,6 +1337,7 @@ static void __init tegra114_clock_init(struct device_node *np) } pmc_base =of_iomap (node,0 ); +of_node_put (node);if (!pmc_base) {pr_err ("Can't map pmc registers\n" );WARN_ON (1 );
drivers/clk/tegra/clk-tegra20.c +1 -0
@@ -1151,6 +1151,7 @@ static void __init tegra20_clock_init(struct device_node *np) } pmc_base =of_iomap (node,0 ); +of_node_put (node);if (!pmc_base) {pr_err ("Can't map pmc registers\n" );BUG ();
drivers/clk/tegra/clk-tegra210.c +1 -0
@@ -3523,6 +3523,7 @@ static void __init tegra210_clock_init(struct device_node *np) } pmc_base =of_iomap (node,0 ); +of_node_put (node);if (!pmc_base) {pr_err ("Can't map pmc registers\n" );WARN_ON (1 );
drivers/clk/ti/clk-dra7-atl.c +6 -3
@@ -252,14 +252,16 @@ static int of_dra7_atl_clk_probe(struct platform_device *pdev)if (rc) {pr_err ("%s: failed to lookup atl clock %d\n" , __func__, i); -return -EINVAL ; + ret = -EINVAL ; + goto pm_put; } clk =of_clk_get_from_provider (&clkspec);if (IS_ERR (clk)) {pr_err ("%s: failed to get atl clock %d from provider\n" , __func__, i); -return PTR_ERR (clk); + ret =PTR_ERR (clk); + goto pm_put; } cdesc =to_atl_desc (__clk_get_hw (clk));
@@ -292,8 +294,9 @@ static int of_dra7_atl_clk_probe(struct platform_device *pdev)if (cdesc->enabled)atl_clk_enable (__clk_get_hw (clk)); } -pm_runtime_put_sync (cinfo->dev); +pm_put: +pm_runtime_put_sync (cinfo->dev);return ret; }
drivers/clk/zynqmp/clkc.c +7 -0
@@ -679,6 +679,13 @@ static void zynqmp_get_clock_info(void)FIELD_PREP (CLK_ATTR_NODE_INDEX , i);zynqmp_pm_clock_get_name (clock[i].clk_id, &name); + +/* +* Terminate with NULL character in case name provided by firmware +* is longer and truncated due to size limit. +*/ + name.name[sizeof (name.name) -1 ] ='\0' ; +if (!strcmp (name.name,RESERVED_CLK_NAME ))continue ;strncpy (clock[i].clk_name, name.name,MAX_NAME_LEN );
drivers/clk/zynqmp/pll.c +15 -16
@@ -98,26 +98,25 @@ static long zynqmp_pll_round_rate(struct clk_hw *hw, unsigned long rate, unsigned long *prate) {u32 fbdiv; -long rate_div, f; +u32 mult, div; -/* Enable the fractional mode if needed */ - rate_div = (rate *FRAC_DIV ) / *prate; - f = rate_div %FRAC_DIV ; -if (f) { -if (rate >PS_PLL_VCO_MAX ) { - fbdiv = rate /PS_PLL_VCO_MAX ; - rate = rate / (fbdiv +1 ); - } -if (rate <PS_PLL_VCO_MIN ) { - fbdiv =DIV_ROUND_UP (PS_PLL_VCO_MIN , rate); - rate = rate * fbdiv; - } -return rate; +/* Let rate fall inside the range PS_PLL_VCO_MIN ~ PS_PLL_VCO_MAX */ +if (rate >PS_PLL_VCO_MAX ) { + div =DIV_ROUND_UP (rate,PS_PLL_VCO_MAX ); + rate = rate / div; + } +if (rate <PS_PLL_VCO_MIN ) { + mult =DIV_ROUND_UP (PS_PLL_VCO_MIN , rate); + rate = rate * mult; } fbdiv =DIV_ROUND_CLOSEST (rate, *prate); - fbdiv =clamp_t (u32, fbdiv,PLL_FBDIV_MIN ,PLL_FBDIV_MAX ); -return *prate * fbdiv; +if (fbdiv <PLL_FBDIV_MIN || fbdiv >PLL_FBDIV_MAX ) { + fbdiv =clamp_t (u32, fbdiv,PLL_FBDIV_MIN ,PLL_FBDIV_MAX ); + rate = *prate * fbdiv; + } + +return rate; }/**
drivers/crypto/cavium/cpt/cptpf_main.c +4 -2
@@ -254,6 +254,7 @@ static int cpt_ucode_load_fw(struct cpt_device *cpt, const u8 *fw, bool is_ae)const struct firmware *fw_entry;struct device *dev = &cpt->pdev->dev;struct ucode_header *ucode; +unsigned int code_length;struct microcode *mcode;int j, ret =0 ;
@@ -264,11 +265,12 @@ static int cpt_ucode_load_fw(struct cpt_device *cpt, const u8 *fw, bool is_ae) ucode = (struct ucode_header *)fw_entry->data; mcode = &cpt->mcode[cpt->next_mc_idx];memcpy (mcode->version, (u8 *)fw_entry->data,CPT_UCODE_VERSION_SZ ); - mcode->code_size =ntohl (ucode->code_length) *2 ; -if (!mcode->code_size) { + code_length =ntohl (ucode->code_length); +if (code_length ==0 || code_length >=INT_MAX /2 ) { ret = -EINVAL ; goto fw_release; } + mcode->code_size = code_length *2 ; mcode->is_ae = is_ae; mcode->core_mask =0ULL ;
drivers/crypto/ccp/ccp-dmaengine.c +5 -1
@@ -642,6 +642,10 @@ static void ccp_dma_release(struct ccp_device *ccp)for (i =0 ; i < ccp->cmd_q_count; i++) { chan = ccp->ccp_dma_chan + i; dma_chan = &chan->dma_chan; + +if (dma_chan->client_count) +dma_release_channel (dma_chan); +tasklet_kill (&chan->cleanup_tasklet);list_del_rcu (&dma_chan->device_node); }
@@ -767,8 +771,8 @@ void ccp_dmaengine_unregister(struct ccp_device *ccp)if (!dmaengine)return ; -dma_async_device_unregister (dma_dev);ccp_dma_release (ccp); +dma_async_device_unregister (dma_dev);kmem_cache_destroy (ccp->dma_desc_cache);kmem_cache_destroy (ccp->dma_cmd_cache);
drivers/dma/ioat/dma.c +3 -3
@@ -653,7 +653,7 @@ static void __cleanup(struct ioatdma_chan *ioat_chan, dma_addr_t phys_complete)if (active - i ==0 ) {dev_dbg (to_dev (ioat_chan),"%s: cancel completion timeout\n" , __func__); -mod_timer (&ioat_chan->timer, jiffies +IDLE_TIMEOUT ); +mod_timer_pending (&ioat_chan->timer, jiffies +IDLE_TIMEOUT ); }/* microsecond delay by sysfs variable per pending descriptor */
@@ -679,7 +679,7 @@ static void ioat_cleanup(struct ioatdma_chan *ioat_chan)if (chanerr & (IOAT_CHANERR_HANDLE_MASK |IOAT_CHANERR_RECOVER_MASK )) { -mod_timer (&ioat_chan->timer, jiffies +IDLE_TIMEOUT ); +mod_timer_pending (&ioat_chan->timer, jiffies +IDLE_TIMEOUT );ioat_eh (ioat_chan); } }
@@ -876,7 +876,7 @@ static void check_active(struct ioatdma_chan *ioat_chan) }if (test_and_clear_bit (IOAT_CHAN_ACTIVE , &ioat_chan->state)) -mod_timer (&ioat_chan->timer, jiffies +IDLE_TIMEOUT ); +mod_timer_pending (&ioat_chan->timer, jiffies +IDLE_TIMEOUT ); }void ioat_timer_event (struct timer_list *t)
drivers/firmware/efi/libstub/fdt.c +0 -8
@@ -291,14 +291,6 @@ efi_status_t allocate_new_fdt_and_exit_boot(efi_system_table_t *sys_table, goto fail; } -/* -* Now that we have done our final memory allocation (and free) -* we can get the memory map key needed for exit_boot_services(). -*/ - status =efi_get_memory_map (sys_table, &map); -if (status !=EFI_SUCCESS ) - goto fail_free_new_fdt; - status =update_fdt (sys_table, (void *)fdt_addr, fdt_size, (void *)*new_fdt_addr,MAX_FDT_SIZE , cmdline_ptr, initrd_addr, initrd_size);
drivers/firmware/google/gsmi.c +9 -0
@@ -679,6 +679,15 @@ static struct notifier_block gsmi_die_notifier = {static int gsmi_panic_callback (struct notifier_block *nb,unsigned long reason,void *arg) { + +/* +* Panic callbacks are executed with all other CPUs stopped, +* so we must not attempt to spin waiting for gsmi_dev.lock +* to be released. +*/ +if (spin_is_locked (&gsmi_dev.lock)) +return NOTIFY_DONE ; +gsmi_shutdown_reason (GSMI_SHUTDOWN_PANIC );return NOTIFY_DONE ; }
drivers/fsi/fsi-core.c +3 -0
@@ -1271,6 +1271,9 @@ int fsi_master_register(struct fsi_master *master)mutex_init (&master->scan_lock); master->idx =ida_simple_get (&master_ida,0 ,INT_MAX ,GFP_KERNEL ); +if (master->idx <0 ) +return master->idx; +dev_set_name (&master->dev,"fsi%d" , master->idx); rc =device_register (&master->dev);
drivers/gpu/drm/Kconfig +1 -0
@@ -27,6 +27,7 @@ menuconfig DRM config DRM_MIPI_DBI tristate depends on DRM + select DRM_KMS_HELPER config DRM_MIPI_DSI bool
drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c +6 -1
@@ -1646,10 +1646,12 @@ amdgpu_connector_add(struct amdgpu_device *adev, adev->mode_info.dither_property, AMDGPU_FMT_DITHER_DISABLE); -if (amdgpu_audio !=0 ) +if (amdgpu_audio !=0 ) {drm_object_attach_property (&amdgpu_connector->base.base, adev->mode_info.audio_property,AMDGPU_AUDIO_AUTO ); + amdgpu_connector->audio =AMDGPU_AUDIO_AUTO ; + } subpixel_order = SubPixelHorizontalRGB; connector->interlace_allowed = true;
@@ -1771,6 +1773,7 @@ amdgpu_connector_add(struct amdgpu_device *adev,drm_object_attach_property (&amdgpu_connector->base.base, adev->mode_info.audio_property,AMDGPU_AUDIO_AUTO ); + amdgpu_connector->audio =AMDGPU_AUDIO_AUTO ; } drm_object_attach_property(&amdgpu_connector->base.base, adev->mode_info.dither_property,
@@ -1824,6 +1827,7 @@ amdgpu_connector_add(struct amdgpu_device *adev,drm_object_attach_property (&amdgpu_connector->base.base, adev->mode_info.audio_property,AMDGPU_AUDIO_AUTO ); + amdgpu_connector->audio =AMDGPU_AUDIO_AUTO ; } drm_object_attach_property(&amdgpu_connector->base.base, adev->mode_info.dither_property,
@@ -1874,6 +1878,7 @@ amdgpu_connector_add(struct amdgpu_device *adev,drm_object_attach_property (&amdgpu_connector->base.base, adev->mode_info.audio_property,AMDGPU_AUDIO_AUTO ); + amdgpu_connector->audio =AMDGPU_AUDIO_AUTO ; } drm_object_attach_property(&amdgpu_connector->base.base, adev->mode_info.dither_property,
drivers/gpu/drm/amd/display/dc/calcs/bw_fixed.c +3 -3
@@ -26,12 +26,12 @@#include "bw_fixed.h" -#define MIN_I64 \ - (int64_t)(-(1LL << 63)) -#define MAX_I64 \ (int64_t)((1ULL << 63) - 1) +#define MIN_I64 \ + (-MAX_I64 - 1) +#define FRACTIONAL_PART_MASK \ ((1ULL << BW_FIXED_BITS_PER_FRACTIONAL_PART) - 1)
drivers/gpu/drm/bridge/adv7511/adv7511.h +1 -4
@@ -384,10 +384,7 @@ void adv7511_cec_irq_process(struct adv7511 *adv7511, unsigned int irq1);#else static inline int adv7511_cec_init (struct device *dev,struct adv7511 *adv7511) { -unsigned int offset = adv7511->type ==ADV7533 ? -ADV7533_REG_CEC_OFFSET :0 ; - -regmap_write (adv7511->regmap,ADV7511_REG_CEC_CTRL + offset, +regmap_write (adv7511->regmap,ADV7511_REG_CEC_CTRL ,ADV7511_CEC_CTRL_POWER_DOWN );return 0 ; }
drivers/gpu/drm/bridge/adv7511/adv7511_cec.c +2 -2
@@ -316,7 +316,7 @@ int adv7511_cec_init(struct device *dev, struct adv7511 *adv7511) goto err_cec_alloc; } -regmap_write (adv7511->regmap,ADV7511_REG_CEC_CTRL + offset,0 ); +regmap_write (adv7511->regmap,ADV7511_REG_CEC_CTRL ,0 );/* cec soft reset */ regmap_write (adv7511->regmap_cec,ADV7511_REG_CEC_SOFT_RESET + offset,0x01 );
@@ -343,7 +343,7 @@ int adv7511_cec_init(struct device *dev, struct adv7511 *adv7511)dev_info (dev,"Initializing CEC failed with error %d, disabling CEC\n" , ret); err_cec_parse_dt: -regmap_write (adv7511->regmap,ADV7511_REG_CEC_CTRL + offset, +regmap_write (adv7511->regmap,ADV7511_REG_CEC_CTRL ,ADV7511_CEC_CTRL_POWER_DOWN );return ret == -EPROBE_DEFER ? ret :0 ; }
drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c +3 -1
@@ -279,7 +279,9 @@ static void ge_b850v3_lvds_remove(void)* This check is to avoid both the drivers * removing the bridge in their remove() function */ -if (!ge_b850v3_lvds_ptr) +if (!ge_b850v3_lvds_ptr || + !ge_b850v3_lvds_ptr->stdp2690_i2c || + !ge_b850v3_lvds_ptr->stdp4028_i2c) goto out;drm_bridge_remove (&ge_b850v3_lvds_ptr->bridge);
drivers/gpu/drm/drm_ioctl.c +7 -1
@@ -473,7 +473,13 @@ EXPORT_SYMBOL(drm_invalid_op);*/ static int drm_copy_field (char __user *buf,size_t *buf_len,const char *value) { -int len; +size_t len; + +/* don't attempt to copy a NULL pointer */ +if (WARN_ONCE (!value,"BUG: the value to copy was not set!" )) { + *buf_len =0 ; +return 0 ; + }/* don't overflow userbuf */ len =strlen (value);
drivers/gpu/drm/drm_mipi_dsi.c +1 -0
@@ -300,6 +300,7 @@ static int mipi_dsi_remove_device_fn(struct device *dev, void *priv) {struct mipi_dsi_device *dsi =to_mipi_dsi_device (dev); +mipi_dsi_detach (dsi);mipi_dsi_device_unregister (dsi);return 0 ;
drivers/gpu/drm/drm_panel_orientation_quirks.c +6 -0
@@ -128,6 +128,12 @@ static const struct dmi_system_id orientation_data[] = { DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "One S1003"), }, .driver_data = (void *)&lcd800x1280_rightside_up, + }, { /* Anbernic Win600 */ + .matches = { +DMI_EXACT_MATCH (DMI_BOARD_VENDOR ,"Anbernic" ), + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Win600"), + }, + .driver_data = (void *)&lcd720x1280_rightside_up, }, { /* Asus T100HA */ .matches = { DMI_EXACT_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c +5 -7
@@ -596,12 +596,10 @@ static void _dpu_kms_hw_destroy(struct dpu_kms *dpu_kms)_dpu_kms_mmu_destroy (dpu_kms);if (dpu_kms->catalog) { -for (i =0 ; i < dpu_kms->catalog->vbif_count; i++) { -u32 vbif_idx = dpu_kms->catalog->vbif[i].id; - -if ((vbif_idx <VBIF_MAX ) && dpu_kms->hw_vbif[vbif_idx]) { -dpu_hw_vbif_destroy (dpu_kms->hw_vbif[vbif_idx]); - dpu_kms->hw_vbif[vbif_idx] =NULL ; +for (i =0 ; i <ARRAY_SIZE (dpu_kms->hw_vbif); i++) { +if (dpu_kms->hw_vbif[i]) { +dpu_hw_vbif_destroy (dpu_kms->hw_vbif[i]); + dpu_kms->hw_vbif[i] =NULL ; } } }
@@ -899,7 +897,7 @@ static int dpu_kms_hw_init(struct msm_kms *kms)for (i =0 ; i < dpu_kms->catalog->vbif_count; i++) {u32 vbif_idx = dpu_kms->catalog->vbif[i].id; - dpu_kms->hw_vbif[i] =dpu_hw_vbif_init (vbif_idx, + dpu_kms->hw_vbif[vbif_idx] =dpu_hw_vbif_init (vbif_idx, dpu_kms->vbif[vbif_idx], dpu_kms->catalog);if (IS_ERR_OR_NULL (dpu_kms->hw_vbif[vbif_idx])) { rc =PTR_ERR (dpu_kms->hw_vbif[vbif_idx]);
drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c +13 -16
@@ -11,6 +11,14 @@#include "dpu_hw_vbif.h" #include "dpu_trace.h" +static struct dpu_hw_vbif *dpu_get_vbif (struct dpu_kms *dpu_kms,enum dpu_vbif vbif_idx) +{ +if (vbif_idx <ARRAY_SIZE (dpu_kms->hw_vbif)) +return dpu_kms->hw_vbif[vbif_idx]; + +return NULL ; +} +/** * _dpu_vbif_wait_for_xin_halt - wait for the xin to halt * @vbif: Pointer to hardware vbif driver
@@ -148,11 +156,11 @@ static u32 _dpu_vbif_get_ot_limit(struct dpu_hw_vbif *vbif,void dpu_vbif_set_ot_limit (struct dpu_kms *dpu_kms,struct dpu_vbif_set_ot_params *params) { -struct dpu_hw_vbif *vbif =NULL ; +struct dpu_hw_vbif *vbif;struct dpu_hw_mdp *mdp;bool forced_on = false;u32 ot_lim; -int ret, i; +int ret;if (!dpu_kms) {DPU_ERROR ("invalid arguments\n" );
@@ -160,12 +168,7 @@ void dpu_vbif_set_ot_limit(struct dpu_kms *dpu_kms, } mdp = dpu_kms->hw_mdp; -for (i =0 ; i <ARRAY_SIZE (dpu_kms->hw_vbif); i++) { -if (dpu_kms->hw_vbif[i] && - dpu_kms->hw_vbif[i]->idx == params->vbif_idx) - vbif = dpu_kms->hw_vbif[i]; - } - + vbif =dpu_get_vbif (dpu_kms, params->vbif_idx);if (!vbif || !mdp) {DPU_DEBUG ("invalid arguments vbif %d mdp %d\n" , vbif !=0 , mdp !=0 );
@@ -208,7 +211,7 @@ void dpu_vbif_set_ot_limit(struct dpu_kms *dpu_kms,void dpu_vbif_set_qos_remap (struct dpu_kms *dpu_kms,struct dpu_vbif_set_qos_params *params) { -struct dpu_hw_vbif *vbif =NULL ; +struct dpu_hw_vbif *vbif;struct dpu_hw_mdp *mdp;bool forced_on = false;const struct dpu_vbif_qos_tbl *qos_tbl;
@@ -220,13 +223,7 @@ void dpu_vbif_set_qos_remap(struct dpu_kms *dpu_kms, } mdp = dpu_kms->hw_mdp; -for (i =0 ; i <ARRAY_SIZE (dpu_kms->hw_vbif); i++) { -if (dpu_kms->hw_vbif[i] && - dpu_kms->hw_vbif[i]->idx == params->vbif_idx) { - vbif = dpu_kms->hw_vbif[i]; -break ; - } - } + vbif =dpu_get_vbif (dpu_kms, params->vbif_idx);if (!vbif || !vbif->cap) {DPU_ERROR ("invalid vbif %d\n" , params->vbif_idx);
drivers/gpu/drm/nouveau/nouveau_bo.c +3 -1
@@ -276,8 +276,10 @@ nouveau_bo_alloc(struct nouveau_cli *cli, u64 *size, int *align, u32 flags,break ; } -if (WARN_ON (pi <0 )) +if (WARN_ON (pi <0 )) { +kfree (nvbo);return ERR_PTR (-EINVAL ); + }/* Disable compression if suitable settings couldn't be found. */ if (nvbo->comp && !vmm->page[pi].comp) {
drivers/gpu/drm/nouveau/nouveau_prime.c +0 -1
@@ -90,7 +90,6 @@ struct drm_gem_object *nouveau_gem_prime_import_sg_table(struct drm_device *dev, ret =nouveau_bo_init (nvbo, size, align, flags, sg, robj);if (ret) { -nouveau_bo_ref (NULL , &nvbo); obj =ERR_PTR (ret); goto unlock; }
drivers/gpu/drm/omapdrm/dss/dss.c +3 -0
@@ -1173,6 +1173,7 @@ static void __dss_uninit_ports(struct dss_device *dss, unsigned int num_ports)default :break ; } +of_node_put (port); } }
@@ -1205,11 +1206,13 @@ static int dss_init_ports(struct dss_device *dss)default :break ; } +of_node_put (port); }return 0 ; error: +of_node_put (port);__dss_uninit_ports (dss, i);return r; }
drivers/gpu/drm/vc4/vc4_vec.c +2 -2
@@ -256,7 +256,7 @@ static void vc4_vec_ntsc_j_mode_set(struct vc4_vec *vec)static const struct drm_display_mode ntsc_mode = {DRM_MODE ("720x480" ,DRM_MODE_TYPE_DRIVER ,13500 ,720 ,720 +14 ,720 +14 +64 ,720 +14 +64 +60 ,0 , -480 ,480 +3 ,480 +3 +3 ,480 +3 +3 +16 ,0 , +480 ,480 +7 ,480 +7 +6 ,525 ,0 ,DRM_MODE_FLAG_INTERLACE ) };
@@ -278,7 +278,7 @@ static void vc4_vec_pal_m_mode_set(struct vc4_vec *vec)static const struct drm_display_mode pal_mode = {DRM_MODE ("720x576" ,DRM_MODE_TYPE_DRIVER ,13500 ,720 ,720 +20 ,720 +20 +64 ,720 +20 +64 +60 ,0 , -576 ,576 +2 ,576 +2 +3 ,576 +2 +3 +20 ,0 , +576 ,576 +4 ,576 +4 +6 ,625 ,0 ,DRM_MODE_FLAG_INTERLACE ) };
drivers/hid/hid-multitouch.c +4 -4
@@ -1162,7 +1162,7 @@ static void mt_touch_report(struct hid_device *hid,int contact_count =-1 ;/* sticky fingers release in progress, abort */ -if (test_and_set_bit (MT_IO_FLAGS_RUNNING , &td->mt_io_flags)) +if (test_and_set_bit_lock (MT_IO_FLAGS_RUNNING , &td->mt_io_flags))return ; scantime = *app->scantime;
@@ -1243,7 +1243,7 @@ static void mt_touch_report(struct hid_device *hid,del_timer (&td->release_timer); } -clear_bit (MT_IO_FLAGS_RUNNING , &td->mt_io_flags); +clear_bit_unlock (MT_IO_FLAGS_RUNNING , &td->mt_io_flags); } static int mt_touch_input_configured(struct hid_device *hdev,
@@ -1680,11 +1680,11 @@ static void mt_expired_timeout(struct timer_list *t)* An input report came in just before we release the sticky fingers, * it will take care of the sticky fingers. */ -if (test_and_set_bit (MT_IO_FLAGS_RUNNING , &td->mt_io_flags)) +if (test_and_set_bit_lock (MT_IO_FLAGS_RUNNING , &td->mt_io_flags))return ;if (test_bit (MT_IO_FLAGS_PENDING_SLOTS , &td->mt_io_flags))mt_release_contacts (hdev); -clear_bit (MT_IO_FLAGS_RUNNING , &td->mt_io_flags); +clear_bit_unlock (MT_IO_FLAGS_RUNNING , &td->mt_io_flags); }static int mt_probe (struct hid_device *hdev,const struct hid_device_id *id)
drivers/hid/hid-roccat.c +4 -0
@@ -257,6 +257,8 @@ int roccat_report_event(int minor, u8 const *data)if (!new_value)return -ENOMEM ; +mutex_lock (&device->cbuf_lock); + report = &device->cbuf[device->cbuf_end];/* passing NULL is safe */
@@ -276,6 +278,8 @@ int roccat_report_event(int minor, u8 const *data) reader->cbuf_start = (reader->cbuf_start +1 ) %ROCCAT_CBUF_SIZE ; } +mutex_unlock (&device->cbuf_lock); +wake_up_interruptible (&device->wait);return 0 ; }
drivers/hsi/controllers/omap_ssi_core.c +1 -0
@@ -524,6 +524,7 @@ static int ssi_probe(struct platform_device *pd)if (!childpdev) { err = -ENODEV ;dev_err (&pd->dev,"failed to create ssi controller port\n" ); +of_node_put (child); goto out3; } }
drivers/hsi/controllers/omap_ssi_port.c +4 -4
@@ -230,10 +230,10 @@ static int ssi_start_dma(struct hsi_msg *msg, int lch)if (msg->ttype ==HSI_MSG_READ ) { err =dma_map_sg (&ssi->device, msg->sgt.sgl, msg->sgt.nents,DMA_FROM_DEVICE ); -if (err <0 ) { +if (!err) {dev_dbg (&ssi->device,"DMA map SG failed !\n" );pm_runtime_put_autosuspend (omap_port->pdev); -return err; +return -EIO ; } csdp = SSI_DST_BURST_4x32_BIT |SSI_DST_MEMORY_PORT | SSI_SRC_SINGLE_ACCESS0 | SSI_SRC_PERIPHERAL_PORT |
@@ -247,10 +247,10 @@ static int ssi_start_dma(struct hsi_msg *msg, int lch) }else { err =dma_map_sg (&ssi->device, msg->sgt.sgl, msg->sgt.nents,DMA_TO_DEVICE ); -if (err <0 ) { +if (!err) {dev_dbg (&ssi->device,"DMA map SG failed !\n" );pm_runtime_put_autosuspend (omap_port->pdev); -return err; +return -EIO ; } csdp = SSI_SRC_BURST_4x32_BIT |SSI_SRC_MEMORY_PORT | SSI_DST_SINGLE_ACCESS0 | SSI_DST_PERIPHERAL_PORT |
drivers/iio/adc/at91-sama5d2_adc.c +11 -3
@@ -73,7 +73,7 @@#define AT91_SAMA5D2_MR_ANACH BIT(23)/* Tracking Time */ #define AT91_SAMA5D2_MR_TRACKTIM (v) ((v) << 24) -#define AT91_SAMA5D2_MR_TRACKTIM_MAX 0xff +#define AT91_SAMA5D2_MR_TRACKTIM_MAX 0xf/* Transfer Time */ #define AT91_SAMA5D2_MR_TRANSFER (v) ((v) << 28)#define AT91_SAMA5D2_MR_TRANSFER_MAX 0x3
@@ -1321,10 +1321,12 @@ static int at91_adc_read_info_raw(struct iio_dev *indio_dev, ret =at91_adc_read_position (st, chan->channel, &tmp_val); *val = tmp_val; +if (ret >0 ) + ret =at91_adc_adjust_val_osr (st, val);mutex_unlock (&st->lock);iio_device_release_direct_mode (indio_dev); -return at91_adc_adjust_val_osr (st, val); +return ret; }if (chan->type ==IIO_PRESSURE ) { ret =iio_device_claim_direct_mode (indio_dev);
@@ -1335,10 +1337,12 @@ static int at91_adc_read_info_raw(struct iio_dev *indio_dev, ret =at91_adc_read_pressure (st, chan->channel, &tmp_val); *val = tmp_val; +if (ret >0 ) + ret =at91_adc_adjust_val_osr (st, val);mutex_unlock (&st->lock);iio_device_release_direct_mode (indio_dev); -return at91_adc_adjust_val_osr (st, val); +return ret; }/* in this case we have a voltage channel */
@@ -1429,16 +1433,20 @@ static int at91_adc_write_raw(struct iio_dev *indio_dev,/* if no change, optimize out */ if (val == st->oversampling_ratio)return 0 ; +mutex_lock (&st->lock); st->oversampling_ratio = val;/* update ratio */ at91_adc_config_emr (st); +mutex_unlock (&st->lock);return 0 ;case IIO_CHAN_INFO_SAMP_FREQ :if (val < st->soc_info.min_sample_rate || val > st->soc_info.max_sample_rate)return -EINVAL ; +mutex_lock (&st->lock);at91_adc_setup_samp_freq (indio_dev, val); +mutex_unlock (&st->lock);return 0 ;default :return -EINVAL ;
drivers/iio/dac/ad5593r.c +27 -19
77 lines not on this page · raw message
drivers/iio/inkern.c +4 -2
@@ -136,9 +136,10 @@ static int __of_iio_channel_get(struct iio_channel *channel, idev =bus_find_device (&iio_bus_type,NULL , iiospec.np, iio_dev_node_match); -of_node_put (iiospec.np); -if (idev ==NULL ) +if (idev ==NULL ) { +of_node_put (iiospec.np);return -EPROBE_DEFER ; + } indio_dev =dev_to_iio_dev (idev); channel->indio_dev = indio_dev;
@@ -146,6 +147,7 @@ static int __of_iio_channel_get(struct iio_channel *channel, index = indio_dev->info->of_xlate (indio_dev, &iiospec); else index =__of_iio_simple_xlate (indio_dev, &iiospec); +of_node_put (iiospec.np);if (index <0 ) goto err_put; channel->channel = &indio_dev->channels[index];
drivers/iio/pressure/dps310.c +163 -99
325 lines not on this page · raw message
drivers/infiniband/sw/rxe/rxe_qp.c +7 -3
@@ -805,7 +805,9 @@ void rxe_qp_destroy(struct rxe_qp *qp)rxe_cleanup_task (&qp->comp.task);/* flush out any receive wr's or pending requests */ -__rxe_do_task (&qp->req.task); +if (qp->req.task.func) +__rxe_do_task (&qp->req.task); +if (qp->sq.queue) {__rxe_do_task (&qp->comp.task);__rxe_do_task (&qp->req.task);
@@ -845,8 +847,10 @@ static void rxe_qp_do_cleanup(struct work_struct *work)free_rd_atomic_resources (qp); -kernel_sock_shutdown (qp->sk,SHUT_RDWR ); -sock_release (qp->sk); +if (qp->sk) { +kernel_sock_shutdown (qp->sk,SHUT_RDWR ); +sock_release (qp->sk); + } }/* called when the last reference to the qp is dropped */
drivers/infiniband/sw/siw/siw_qp_rx.c +15 -12
@@ -961,27 +961,28 @@ int siw_proc_terminate(struct siw_qp *qp)static int siw_get_trailer (struct siw_qp *qp,struct siw_rx_stream *srx) {struct sk_buff *skb = srx->skb; +int avail =min (srx->skb_new, srx->fpdu_part_rem);u8 *tbuf = (u8 *)&srx->trailer.crc - srx->pad;__wsum crc_in, crc_own =0 ;siw_dbg_qp (qp,"expected %d, available %d, pad %u\n" , srx->fpdu_part_rem, srx->skb_new, srx->pad); -if (srx->skb_new < srx->fpdu_part_rem) -return -EAGAIN ; - -skb_copy_bits (skb, srx->skb_offset, tbuf, srx->fpdu_part_rem); +skb_copy_bits (skb, srx->skb_offset, tbuf, avail); -if (srx->mpa_crc_hd && srx->pad) -crypto_shash_update (srx->mpa_crc_hd, tbuf, srx->pad); + srx->skb_new -= avail; + srx->skb_offset += avail; + srx->skb_copied += avail; + srx->fpdu_part_rem -= avail; - srx->skb_new -= srx->fpdu_part_rem; - srx->skb_offset += srx->fpdu_part_rem; - srx->skb_copied += srx->fpdu_part_rem; +if (srx->fpdu_part_rem) +return -EAGAIN ;if (!srx->mpa_crc_hd)return 0 ; +if (srx->pad) +crypto_shash_update (srx->mpa_crc_hd, tbuf, srx->pad);/* * CRC32 is computed, transmitted and received directly in NBO, * so there's never a reason to convert byte order.
@@ -1083,10 +1084,9 @@ static int siw_get_hdr(struct siw_rx_stream *srx)* completely received. */ if (iwarp_pktinfo[opcode].hdr_len >sizeof (struct iwarp_ctrl_tagged )) { - bytes = iwarp_pktinfo[opcode].hdr_len -MIN_DDP_HDR ; +int hdrlen = iwarp_pktinfo[opcode].hdr_len; -if (srx->skb_new < bytes) -return -EAGAIN ; + bytes =min_t (int, hdrlen -MIN_DDP_HDR , srx->skb_new);skb_copy_bits (skb, srx->skb_offset, (char *)c_hdr + srx->fpdu_part_rcvd, bytes);
@@ -1096,6 +1096,9 @@ static int siw_get_hdr(struct siw_rx_stream *srx) srx->skb_new -= bytes; srx->skb_offset += bytes; srx->skb_copied += bytes; + +if (srx->fpdu_part_rcvd < hdrlen) +return -EAGAIN ; }/*
drivers/iommu/omap-iommu-debug.c +3 -3
@@ -32,12 +32,12 @@ static inline bool is_omap_iommu_detached(struct omap_iommu *obj)ssize_t bytes; \const char *str ="%20s: %08x\n" ; \const int maxcol =32 ; \ - bytes =snprintf (p, maxcol, str,__stringify (name), \ +if (len < maxcol) \ + goto out; \ + bytes =scnprintf (p, maxcol, str,__stringify (name), \ iommu_read_reg(obj, MMU_##name)); \ p += bytes; \ len -= bytes; \ -if (len < maxcol) \ - goto out; \ }while (0 ) static ssize_t
drivers/isdn/mISDN/l1oip.h +1 -0
@@ -59,6 +59,7 @@ struct l1oip {int bundle;/* bundle channels in one frm */ int codec;/* codec to use for transmis. */ int limit;/* limit number of bchannels */ +bool shutdown;/* if card is released */ /* timer */ struct timer_list keep_tl;
drivers/isdn/mISDN/l1oip_core.c +7 -6
@@ -275,7 +275,7 @@ l1oip_socket_send(struct l1oip *hc, u8 localcodec, u8 channel, u32 chanmask, p = frame;/* restart timer */ -if (time_before (hc->keep_tl.expires, jiffies +5 *HZ )) +if (time_before (hc->keep_tl.expires, jiffies +5 *HZ ) && !hc->shutdown)mod_timer (&hc->keep_tl, jiffies +L1OIP_KEEPALIVE *HZ );else hc->keep_tl.expires = jiffies +L1OIP_KEEPALIVE *HZ ;
@@ -601,7 +601,9 @@ l1oip_socket_parse(struct l1oip *hc, struct sockaddr_in *sin, u8 *buf, int len) goto multiframe;/* restart timer */ -if (time_before (hc->timeout_tl.expires, jiffies +5 *HZ ) || !hc->timeout_on) { +if ((time_before (hc->timeout_tl.expires, jiffies +5 *HZ ) || + !hc->timeout_on) && + !hc->shutdown) { hc->timeout_on =1 ;mod_timer (&hc->timeout_tl, jiffies +L1OIP_TIMEOUT *HZ ); }else /* only adjust timer */
@@ -1232,11 +1234,10 @@ release_card(struct l1oip *hc) {int ch; -if (timer_pending (&hc->keep_tl)) -del_timer (&hc->keep_tl); + hc->shutdown = true; -if (timer_pending (&hc->timeout_tl)) -del_timer (&hc->timeout_tl); +del_timer_sync (&hc->keep_tl); +del_timer_sync (&hc->timeout_tl);cancel_work_sync (&hc->workq);
drivers/mailbox/bcm-flexrm-mailbox.c +4 -4
@@ -632,15 +632,15 @@ static int flexrm_spu_dma_map(struct device *dev, struct brcm_message *msg) rc =dma_map_sg (dev, msg->spu.src,sg_nents (msg->spu.src),DMA_TO_DEVICE ); -if (rc <0 ) -return rc; +if (!rc) +return -EIO ; rc =dma_map_sg (dev, msg->spu.dst,sg_nents (msg->spu.dst),DMA_FROM_DEVICE ); -if (rc <0 ) { +if (!rc) {dma_unmap_sg (dev, msg->spu.src,sg_nents (msg->spu.src),DMA_TO_DEVICE ); -return rc; +return -EIO ; }return 0 ;
drivers/md/bcache/writeback.c +52 -21
92 lines not on this page · raw message
drivers/md/raid0.c +2 -2
@@ -63,8 +63,8 @@ static void dump_zones(struct mddev *mddev)int len =0 ;for (k =0 ; k < conf->strip_zone[j].nb_dev; k++) - len +=snprintf (line+len,200 -len,"%s%s" , k?"/" :"" , -bdevname (conf->devlist[j*raid_disks + len +=scnprintf (line+len,200 -len,"%s%s" , k?"/" :"" , +bdevname (conf->devlist[j*raid_disks + k]->bdev, b));pr_debug ("md: zone%d=[%s]\n" , j, line);
drivers/md/raid5.c +13 -1
@@ -36,6 +36,7 @@*/ #include <linux/blkdev.h> +#include <linux/delay.h> #include <linux/kthread.h> #include <linux/raid/pq.h> #include <linux/async_tx.h>
@@ -3728,7 +3729,7 @@ static void handle_stripe_fill(struct stripe_head *sh,* back cache (prexor with orig_page, and then xor with * page) in the read path */ -if (s->injournal && s->failed) { +if (s->to_read && s->injournal && s->failed) {if (test_bit (STRIPE_R5C_CACHING , &sh->state))r5c_make_stripe_write_out (sh); goto out;
@@ -6334,7 +6335,18 @@ static void raid5d(struct md_thread *thread)spin_unlock_irq (&conf->device_lock);md_check_recovery (mddev);spin_lock_irq (&conf->device_lock); + +/* +* Waiting on MD_SB_CHANGE_PENDING below may deadlock +* seeing md_check_recovery() is needed to clear +* the flag when using mdmon. +*/ +continue ; } + +wait_event_lock_irq (mddev->sb_wait, + !test_bit (MD_SB_CHANGE_PENDING , &mddev->sb_flags), + conf->device_lock); }pr_debug ("%d stripes handled\n" , handled);
drivers/media/pci/cx88/cx88-vbi.c +4 -5
@@ -144,11 +144,10 @@ static int buffer_prepare(struct vb2_buffer *vb)return -EINVAL ;vb2_set_plane_payload (vb,0 , size); -cx88_risc_buffer (dev->pci, &buf->risc, sgt->sgl, -0 ,VBI_LINE_LENGTH * lines, -VBI_LINE_LENGTH ,0 , - lines); -return 0 ; +return cx88_risc_buffer (dev->pci, &buf->risc, sgt->sgl, +0 ,VBI_LINE_LENGTH * lines, +VBI_LINE_LENGTH ,0 , + lines); }static void buffer_finish (struct vb2_buffer *vb)
drivers/media/pci/cx88/cx88-video.c +22 -21
70 lines not on this page · raw message
drivers/media/platform/exynos4-is/fimc-is.c +1 -0
@@ -214,6 +214,7 @@ static int fimc_is_register_subdevs(struct fimc_is *is)if (ret <0 || index >=FIMC_IS_SENSORS_NUM ) {of_node_put (child); +of_node_put (i2c_bus);return ret; } index++;
drivers/media/platform/xilinx/xilinx-vipp.c +5 -4
@@ -472,7 +472,7 @@ static int xvip_graph_dma_init(struct xvip_composite_device *xdev) {struct device_node *ports;struct device_node *port; -int ret; +int ret =0 ; ports =of_get_child_by_name (xdev->dev->of_node,"ports" );if (ports ==NULL ) {
@@ -482,13 +482,14 @@ static int xvip_graph_dma_init(struct xvip_composite_device *xdev)for_each_child_of_node (ports, port) { ret =xvip_graph_dma_init_one (xdev, port); -if (ret <0 ) { +if (ret) {of_node_put (port); -return ret; +break ; } } -return 0 ; +of_node_put (ports); +return ret; }static void xvip_graph_cleanup (struct xvip_composite_device *xdev)
drivers/memory/of_memory.c +1 -0
@@ -132,6 +132,7 @@ const struct lpddr2_timings *of_get_ddr_timings(struct device_node *np_ddr,for_each_child_of_node (np_ddr, np_tim) {if (of_device_is_compatible (np_tim, tim_compat)) {if (of_do_get_timings (np_tim, &timings[i])) { +of_node_put (np_tim);devm_kfree (dev, timings); goto default_timings; }
drivers/memory/pl353-smc.c +1 -0
@@ -416,6 +416,7 @@ static int pl353_smc_probe(struct amba_device *adev, const struct amba_id *id)if (init)init (adev, child);of_platform_device_create (child,NULL , &adev->dev); +of_node_put (child);return 0 ;
drivers/mfd/fsl-imx25-tsadc.c +25 -9
@@ -69,7 +69,7 @@ static int mx25_tsadc_setup_irq(struct platform_device *pdev,int irq; irq =platform_get_irq (pdev,0 ); -if (irq <=0 ) +if (irq <0 )return irq; tsadc->domain = irq_domain_add_simple(np, 2, 0, &mx25_tsadc_domain_ops,
@@ -84,6 +84,19 @@ static int mx25_tsadc_setup_irq(struct platform_device *pdev,return 0 ; } +static int mx25_tsadc_unset_irq (struct platform_device *pdev) +{ +struct mx25_tsadc *tsadc =platform_get_drvdata (pdev); +int irq =platform_get_irq (pdev,0 ); + +if (irq >=0 ) { +irq_set_chained_handler_and_data (irq,NULL ,NULL ); +irq_domain_remove (tsadc->domain); + } + +return 0 ; +} +static void mx25_tsadc_setup_clk (struct platform_device *pdev,struct mx25_tsadc *tsadc) {
@@ -171,18 +184,21 @@ static int mx25_tsadc_probe(struct platform_device *pdev)platform_set_drvdata (pdev, tsadc); -return devm_of_platform_populate (dev); + ret =devm_of_platform_populate (dev); +if (ret) + goto err_irq; + +return 0 ; + +err_irq: +mx25_tsadc_unset_irq (pdev); + +return ret; }static int mx25_tsadc_remove (struct platform_device *pdev) { -struct mx25_tsadc *tsadc =platform_get_drvdata (pdev); -int irq =platform_get_irq (pdev,0 ); - -if (irq) { -irq_set_chained_handler_and_data (irq,NULL ,NULL ); -irq_domain_remove (tsadc->domain); - } +mx25_tsadc_unset_irq (pdev);return 0 ; }
drivers/mfd/intel_soc_pmic_core.c +1 -0
@@ -111,6 +111,7 @@ static int intel_soc_pmic_i2c_probe(struct i2c_client *i2c,return 0 ; err_del_irq_chip: +pwm_remove_table (crc_pwm_lookup,ARRAY_SIZE (crc_pwm_lookup));regmap_del_irq_chip (pmic->irq, pmic->irq_chip_data);return ret; }
drivers/mfd/lp8788-irq.c +3 -0
@@ -175,6 +175,7 @@ int lp8788_irq_init(struct lp8788 *lp, int irq)IRQF_TRIGGER_FALLING |IRQF_ONESHOT , "lp8788-irq", irqd);if (ret) { +irq_domain_remove (lp->irqdm);dev_err (lp->dev,"failed to create a thread for IRQ_N\n" );return ret; }
@@ -188,4 +189,6 @@ void lp8788_irq_exit(struct lp8788 *lp) {if (lp->irq)free_irq (lp->irq, lp->irqdm); +if (lp->irqdm) +irq_domain_remove (lp->irqdm); }
drivers/mfd/lp8788.c +10 -2
@@ -195,8 +195,16 @@ static int lp8788_probe(struct i2c_client *cl, const struct i2c_device_id *id)if (ret)return ret; -return mfd_add_devices (lp->dev,-1 , lp8788_devs, -ARRAY_SIZE (lp8788_devs),NULL ,0 ,NULL ); + ret =mfd_add_devices (lp->dev,-1 , lp8788_devs, +ARRAY_SIZE (lp8788_devs),NULL ,0 ,NULL ); +if (ret) + goto err_exit_irq; + +return 0 ; + +err_exit_irq: +lp8788_irq_exit (lp); +return ret; }static int lp8788_remove (struct i2c_client *cl)
drivers/mfd/sm501.c +6 -1
@@ -1733,7 +1733,12 @@ static struct platform_driver sm501_plat_driver = {static int __init sm501_base_init (void ) { -platform_driver_register (&sm501_plat_driver); +int ret; + + ret =platform_driver_register (&sm501_plat_driver); +if (ret <0 ) +return ret; +return pci_register_driver (&sm501_pci_driver); }
drivers/misc/ocxl/file.c +2 -0
@@ -259,6 +259,8 @@ static long afu_ioctl(struct file *file, unsigned int cmd,if (IS_ERR (ev_ctx))return PTR_ERR (ev_ctx); rc =ocxl_irq_set_handler (ctx, irq_id, irq_handler, irq_free, ev_ctx); +if (rc) +eventfd_ctx_put (ev_ctx);break ;case OCXL_IOCTL_GET_METADATA :
drivers/mmc/host/au1xmmc.c +2 -1
@@ -1116,8 +1116,9 @@ static int au1xmmc_probe(struct platform_device *pdev)if (host->platdata && host->platdata->cd_setup && !(mmc->caps &MMC_CAP_NEEDS_POLL )) host->platdata->cd_setup (mmc,0 ); -out_clk: +clk_disable_unprepare (host->clk); +out_clk:clk_put (host->clk); out_irq:free_irq (host->irq, host);
drivers/mmc/host/sdhci-msm.c +1 -0
@@ -1755,6 +1755,7 @@ static const struct sdhci_msm_variant_info sdm845_sdhci_var = {static const struct of_device_id sdhci_msm_dt_match[] = { {.compatible ="qcom,sdhci-msm-v4" , .data = &sdhci_msm_mci_var}, {.compatible ="qcom,sdhci-msm-v5" , .data = &sdhci_msm_v5_var}, + {.compatible ="qcom,sdm670-sdhci" , .data = &sdm845_sdhci_var}, {.compatible ="qcom,sdm845-sdhci" , .data = &sdm845_sdhci_var}, {}, };
drivers/mmc/host/sdhci-sprd.c +1 -1
@@ -295,7 +295,7 @@ static unsigned int sdhci_sprd_get_max_clock(struct sdhci_host *host)static unsigned int sdhci_sprd_get_min_clock (struct sdhci_host *host) { -return 400000 ; +return 100000 ; } static void sdhci_sprd_set_uhs_signaling(struct sdhci_host *host,
drivers/mmc/host/wmt-sdmmc.c +4 -1
@@ -849,7 +849,7 @@ static int wmt_mci_probe(struct platform_device *pdev)if (IS_ERR (priv->clk_sdmmc)) {dev_err (&pdev->dev,"Error getting clock\n" ); ret =PTR_ERR (priv->clk_sdmmc); - goto fail5; + goto fail5_and_a_half; } ret =clk_prepare_enable (priv->clk_sdmmc);
@@ -866,6 +866,9 @@ static int wmt_mci_probe(struct platform_device *pdev)return 0 ; fail6:clk_put (priv->clk_sdmmc); +fail5_and_a_half: +dma_free_coherent (&pdev->dev, mmc->max_blk_count *16 , + priv->dma_desc_buffer, priv->dma_desc_device_addr); fail5:free_irq (dma_irq, priv); fail4:
drivers/mtd/devices/docg3.c +6 -1
@@ -1975,9 +1975,14 @@ static int __init docg3_probe(struct platform_device *pdev)dev_err (dev,"No I/O memory resource defined\n" );return ret; } - base =devm_ioremap (dev, ress->start,DOC_IOSPACE_SIZE ); ret = -ENOMEM ; + base =devm_ioremap (dev, ress->start,DOC_IOSPACE_SIZE ); +if (!base) { +dev_err (dev,"devm_ioremap dev failed\n" ); +return ret; + } + cascade =devm_kcalloc (dev,DOC_MAX_NBFLOORS ,sizeof (*cascade),GFP_KERNEL );if (!cascade)
drivers/mtd/nand/raw/atmel/nand-controller.c +1 -0
@@ -402,6 +402,7 @@ static int atmel_nand_dma_transfer(struct atmel_nand_controller *nc,dma_async_issue_pending (nc->dmac);wait_for_completion (&finished); +dma_unmap_single (nc->dev, buf_dma, len, dir);return 0 ;
drivers/mtd/nand/raw/meson_nand.c +2 -2
@@ -454,7 +454,7 @@ static int meson_nfc_ecc_correct(struct nand_chip *nand, u32 *bitflips,if (ECC_ERR_CNT (*info) !=ECC_UNCORRECTABLE ) { mtd->ecc_stats.corrected +=ECC_ERR_CNT (*info); *bitflips =max_t (u32, *bitflips,ECC_ERR_CNT (*info)); - *correct_bitmap |=1 >> i; + *correct_bitmap |=BIT_ULL (i);continue ; } if ((nand->options & NAND_NEED_SCRAMBLING) &&
@@ -800,7 +800,7 @@ static int meson_nfc_read_page_hwecc(struct nand_chip *nand, u8 *buf,u8 *data = buf + i * ecc->size;u8 *oob = nand->oob_poi + i * (ecc->bytes +2 ); -if (correct_bitmap & (1 << i)) +if (correct_bitmap &BIT_ULL (i))continue ; ret = nand_check_erased_ecc_chunk(data, ecc->size, oob, ecc->bytes + 2,
drivers/net/can/usb/kvaser_usb/kvaser_usb.h +2 -0
@@ -178,6 +178,8 @@ struct kvaser_usb_dev_cfg {extern const struct kvaser_usb_dev_ops kvaser_usb_hydra_dev_ops;extern const struct kvaser_usb_dev_ops kvaser_usb_leaf_dev_ops; +void kvaser_usb_unlink_tx_urbs (struct kvaser_usb_net_priv *priv); +int kvaser_usb_recv_cmd (const struct kvaser_usb *dev,void *cmd,int len,int *actual_len);
drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c +2 -1
@@ -453,7 +453,7 @@ static void kvaser_usb_reset_tx_urb_contexts(struct kvaser_usb_net_priv *priv)/* This method might sleep. Do not call it in the atomic context * of URB completions. */ -static void kvaser_usb_unlink_tx_urbs (struct kvaser_usb_net_priv *priv) +void kvaser_usb_unlink_tx_urbs (struct kvaser_usb_net_priv *priv) {usb_kill_anchored_urbs (&priv->tx_submitted);kvaser_usb_reset_tx_urb_contexts (priv);
@@ -690,6 +690,7 @@ static int kvaser_usb_init_one(struct kvaser_usb *dev, int channel)init_usb_anchor (&priv->tx_submitted);init_completion (&priv->start_comp);init_completion (&priv->stop_comp); +init_completion (&priv->flush_comp); priv->can.ctrlmode_supported =0 ; priv->dev = dev;
drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c +1 -1
@@ -1886,7 +1886,7 @@ static int kvaser_usb_hydra_flush_queue(struct kvaser_usb_net_priv *priv) {int err; -init_completion (&priv->flush_comp); +reinit_completion (&priv->flush_comp); err =kvaser_usb_hydra_send_simple_cmd (priv->dev,CMD_FLUSH_QUEUE , priv->channel);
drivers/net/can/usb/kvaser_usb/kvaser_usb_leaf.c +79 -0
112 lines not on this page · raw message
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c +1 -0
@@ -787,6 +787,7 @@ static void bnx2x_tpa_stop(struct bnx2x *bp, struct bnx2x_fastpath *fp,BNX2X_ERR ("skb_put is about to fail... pad %d len %d rx_buf_size %d\n" , pad, len, fp->rx_buf_size);bnx2x_panic (); +bnx2x_frag_free (fp, new_data); return; }#endif
drivers/net/ethernet/freescale/fs_enet/mac-fec.c +1 -1
@@ -98,7 +98,7 @@ static int do_pd_setup(struct fs_enet_private *fep)return -EINVAL ; fep->fec.fecp =of_iomap (ofdev->dev.of_node,0 ); -if (!fep->fcc.fccp) +if (!fep->fec.fecp)return -EINVAL ;return 0 ;
drivers/net/ethernet/marvell/mvpp2/mvpp2.h +1 -0
@@ -1202,5 +1202,6 @@ u32 mvpp2_read(struct mvpp2 *priv, u32 offset);void mvpp2_dbgfs_init (struct mvpp2 *priv,const char *name);void mvpp2_dbgfs_cleanup (struct mvpp2 *priv); +void mvpp2_dbgfs_exit (void );#endif
drivers/net/ethernet/marvell/mvpp2/mvpp2_debugfs.c +8 -2
@@ -691,6 +691,13 @@ static int mvpp2_dbgfs_port_init(struct dentry *parent,return 0 ; } +static struct dentry *mvpp2_root; + +void mvpp2_dbgfs_exit (void ) +{ +debugfs_remove (mvpp2_root); +} +void mvpp2_dbgfs_cleanup (struct mvpp2 *priv) {debugfs_remove_recursive (priv->dbgfs_dir);
@@ -700,10 +707,9 @@ void mvpp2_dbgfs_cleanup(struct mvpp2 *priv)void mvpp2_dbgfs_init (struct mvpp2 *priv,const char *name) { -struct dentry *mvpp2_dir, *mvpp2_root; +struct dentry *mvpp2_dir;int ret, i; - mvpp2_root =debugfs_lookup (MVPP2_DRIVER_NAME ,NULL );if (!mvpp2_root) mvpp2_root =debugfs_create_dir (MVPP2_DRIVER_NAME ,NULL );
drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c +12 -1
@@ -6004,7 +6004,18 @@ static struct platform_driver mvpp2_driver = { }, }; -module_platform_driver (mvpp2_driver); +static int __init mvpp2_driver_init (void ) +{ +return platform_driver_register (&mvpp2_driver); +} +module_init (mvpp2_driver_init); + +static void __exit mvpp2_driver_exit(void) +{ +platform_driver_unregister (&mvpp2_driver); +mvpp2_dbgfs_exit (); +} +module_exit (mvpp2_driver_exit);MODULE_DESCRIPTION ("Marvell PPv2 Ethernet Driver - www.marvell.com" );MODULE_AUTHOR ("Marcin Wojtas <[email protected]>" );
drivers/net/usb/r8152.c +3 -1
@@ -1479,7 +1479,9 @@ static void intr_callback(struct urb *urb) "Stop submitting intr, status %d\n", status);return ;case -EOVERFLOW : -netif_info (tp, intr, tp->netdev,"intr status -EOVERFLOW\n" ); +if (net_ratelimit ()) +netif_info (tp, intr, tp->netdev, +"intr status -EOVERFLOW\n" ); goto resubmit;/* -EPIPE: should clear the halt */ default :
drivers/net/wireless/ath/ath10k/mac.c +29 -25
75 lines not on this page · raw message
drivers/net/wireless/ath/ath9k/htc_hst.c +28 -15
98 lines not on this page · raw message
drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c +2 -1
@@ -290,6 +290,7 @@ static netdev_tx_t brcmf_netdev_start_xmit(struct sk_buff *skb,struct brcmf_pub *drvr = ifp->drvr;struct ethhdr *eh;int head_delta; +unsigned int tx_bytes = skb->len;brcmf_dbg (DATA ,"Enter, bsscfgidx=%d\n" , ifp->bsscfgidx);
@@ -361,7 +362,7 @@ static netdev_tx_t brcmf_netdev_start_xmit(struct sk_buff *skb, ndev->stats.tx_dropped++; }else { ndev->stats.tx_packets++; - ndev->stats.tx_bytes += skb->len; + ndev->stats.tx_bytes += tx_bytes; }/* Return ok: we always eat the packet */
drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c +6 -6
@@ -154,12 +154,12 @@ static int brcmf_pno_set_random(struct brcmf_if *ifp, struct brcmf_pno_info *pi)struct brcmf_pno_macaddr_le pfn_mac;u8 *mac_addr =NULL ;u8 *mac_mask =NULL ; -int err, i; +int err, i, ri; -for (i =0 ; i < pi->n_reqs; i++) -if (pi->reqs[i]->flags &NL80211_SCAN_FLAG_RANDOM_ADDR ) { - mac_addr = pi->reqs[i]->mac_addr; - mac_mask = pi->reqs[i]->mac_addr_mask; +for (ri =0 ; ri < pi->n_reqs; ri++) +if (pi->reqs[ri]->flags &NL80211_SCAN_FLAG_RANDOM_ADDR ) { + mac_addr = pi->reqs[ri]->mac_addr; + mac_mask = pi->reqs[ri]->mac_addr_mask;break ; }
@@ -181,7 +181,7 @@ static int brcmf_pno_set_random(struct brcmf_if *ifp, struct brcmf_pno_info *pi) pfn_mac.mac[0 ] |=0x02 ;brcmf_dbg (SCAN ,"enabling random mac: reqid=%llu mac=%pM\n" , - pi->reqs[i]->reqid, pfn_mac.mac); + pi->reqs[ri]->reqid, pfn_mac.mac); err =brcmf_fil_iovar_data_set (ifp,"pfn_macaddr" , &pfn_mac,sizeof (pfn_mac));if (err)
drivers/net/wireless/ralink/rt2x00/rt2800lib.c +30 -4
@@ -4154,7 +4154,10 @@ static void rt2800_config_channel(struct rt2x00_dev *rt2x00dev,rt2800_bbp_write (rt2x00dev,62 ,0x37 - rt2x00dev->lna_gain);rt2800_bbp_write (rt2x00dev,63 ,0x37 - rt2x00dev->lna_gain);rt2800_bbp_write (rt2x00dev,64 ,0x37 - rt2x00dev->lna_gain); -rt2800_bbp_write (rt2x00dev,86 ,0 ); +if (rt2x00_rt (rt2x00dev,RT6352 )) +rt2800_bbp_write (rt2x00dev,86 ,0x38 ); +else +rt2800_bbp_write (rt2x00dev,86 ,0 ); }if (rf->channel <=14 ) {
@@ -4355,7 +4358,8 @@ static void rt2800_config_channel(struct rt2x00_dev *rt2x00dev, reg = (rf->channel <=14 ?0x1c :0x24 ) +2 *rt2x00dev->lna_gain;rt2800_bbp_write_with_rx_chain (rt2x00dev,66 , reg); -rt2800_iq_calibrate (rt2x00dev, rf->channel); +if (rt2x00_rt (rt2x00dev,RT5592 )) +rt2800_iq_calibrate (rt2x00dev, rf->channel); } bbp =rt2800_bbp_read (rt2x00dev,4 );
@@ -5628,7 +5632,8 @@ static inline void rt2800_set_vgc(struct rt2x00_dev *rt2x00dev,if (qual->vgc_level != vgc_level) {if (rt2x00_rt (rt2x00dev,RT3572 ) ||rt2x00_rt (rt2x00dev,RT3593 ) || -rt2x00_rt (rt2x00dev,RT3883 )) { +rt2x00_rt (rt2x00dev,RT3883 ) || +rt2x00_rt (rt2x00dev,RT6352 )) {rt2800_bbp_write_with_rx_chain (rt2x00dev,66 , vgc_level); }else if (rt2x00_rt (rt2x00dev,RT5592 )) {
@@ -5851,7 +5856,7 @@ static int rt2800_init_registers(struct rt2x00_dev *rt2x00dev)rt2800_register_write (rt2x00dev,TX_SW_CFG0 ,0x00000404 ); }else if (rt2x00_rt (rt2x00dev,RT6352 )) {rt2800_register_write (rt2x00dev,TX_SW_CFG0 ,0x00000401 ); -rt2800_register_write (rt2x00dev,TX_SW_CFG1 ,0x000C0000 ); +rt2800_register_write (rt2x00dev,TX_SW_CFG1 ,0x000C0001 );rt2800_register_write (rt2x00dev,TX_SW_CFG2 ,0x00000000 );rt2800_register_write (rt2x00dev,TX_ALC_VGA3 ,0x00000000 );rt2800_register_write (rt2x00dev,TX0_BB_GAIN_ATTEN ,0x0 );
@@ -6113,6 +6118,27 @@ static int rt2800_init_registers(struct rt2x00_dev *rt2x00dev) reg =rt2800_register_read (rt2x00dev,US_CYC_CNT );rt2x00_set_field32 (®,US_CYC_CNT_CLOCK_CYCLE ,125 );rt2800_register_write (rt2x00dev,US_CYC_CNT , reg); + }else if (rt2x00_is_soc (rt2x00dev)) { +struct clk *clk =clk_get_sys ("bus" ,NULL ); +int rate; + +if (IS_ERR (clk)) { + clk =clk_get_sys ("cpu" ,NULL ); + +if (IS_ERR (clk)) { + rate =125 ; + }else { + rate =clk_get_rate (clk) /3000000 ; +clk_put (clk); + } + }else { + rate =clk_get_rate (clk) /1000000 ; +clk_put (clk); + } + + reg =rt2800_register_read (rt2x00dev,US_CYC_CNT ); +rt2x00_set_field32 (®,US_CYC_CNT_CLOCK_CYCLE , rate); +rt2800_register_write (rt2x00dev,US_CYC_CNT , reg); } reg =rt2800_register_read (rt2x00dev,HT_FBK_CFG0 );
drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c +11 -10
@@ -1875,13 +1875,6 @@ static int rtl8xxxu_read_efuse(struct rtl8xxxu_priv *priv)/* We have 8 bits to indicate validity */ map_addr = offset *8 ; -if (map_addr >=EFUSE_MAP_LEN ) { -dev_warn (dev,"%s: Illegal map_addr (%04x), " -"efuse corrupt!\n" , - __func__, map_addr); - ret = -EINVAL ; - goto exit; - }for (i =0 ; i <EFUSE_MAX_WORD_UNIT ; i++) {/* Check word enable condition in the section */ if (word_mask &BIT (i)) {
@@ -1892,6 +1885,13 @@ static int rtl8xxxu_read_efuse(struct rtl8xxxu_priv *priv) ret =rtl8xxxu_read_efuse8 (priv, efuse_addr++, &val8);if (ret) goto exit; +if (map_addr >=EFUSE_MAP_LEN -1 ) { +dev_warn (dev,"%s: Illegal map_addr (%04x), " +"efuse corrupt!\n" , + __func__, map_addr); + ret = -EINVAL ; + goto exit; + } priv->efuse_wifi.raw[map_addr++] = val8; ret =rtl8xxxu_read_efuse8 (priv, efuse_addr++, &val8);
Lines of this file are not shown. View the raw message.
drivers/phy/qualcomm/phy-qcom-usb-hsic.c +4 -2
Lines of this file are not shown. View the raw message.
drivers/platform/chrome/chromeos_laptop.c +13 -11
Lines of this file are not shown. View the raw message.
drivers/platform/chrome/cros_ec_chardev.c +3 -0
Lines of this file are not shown. View the raw message.
drivers/regulator/qcom_rpm-regulator.c +12 -12
Lines of this file are not shown. View the raw message.
drivers/staging/media/sunxi/cedrus/cedrus.c +2 -2
Lines of this file are not shown. View the raw message.
drivers/staging/rtl8723bs/core/rtw_cmd.c +6 -10
Lines of this file are not shown. View the raw message.
drivers/thermal/intel/intel_powerclamp.c +1 -3
Lines of this file are not shown. View the raw message.
drivers/usb/gadget/function/f_printer.c +6 -6
Lines of this file are not shown. View the raw message.
kernel/trace/ring_buffer.c +45 -3
48 lines not on this page · raw message
net/vmw_vsock/virtio_transport_common.c +1 -1
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.