Linux 5.18.8
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.18.8 kernel.
All users of the 5.18 kernel series must upgrade.
The updated 5.18.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.18.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-vf610 | 2 Documentation/devicetree/bindings/usb/generic-ehci.yaml | 3 Documentation/devicetree/bindings/usb/generic-ohci.yaml | 3 Documentation/vm/hwpoison.rst | 3 MAINTAINERS | 11 Makefile | 4 arch/arm/boot/dts/bcm2711-rpi-400.dts | 6 arch/arm/boot/dts/imx6qdl.dtsi | 2 arch/arm/boot/dts/imx7s.dtsi | 2 arch/arm/kernel/crash_dump.c | 27 -- arch/arm/mach-axxia/platsmp.c | 1 arch/arm/mach-cns3xxx/core.c | 2 arch/arm/mach-exynos/exynos.c | 1 arch/arm64/boot/dts/exynos/exynos7885.dtsi | 12 arch/arm64/boot/dts/ti/k3-am64-main.dtsi | 2 arch/arm64/boot/dts/ti/k3-j721s2-main.dtsi | 2 arch/arm64/kernel/crash_dump.c | 29 -- arch/arm64/kvm/arm.c | 6 arch/ia64/kernel/crash_dump.c | 32 -- arch/mips/kernel/crash_dump.c | 27 -- arch/mips/vr41xx/common/icu.c | 2 arch/parisc/Kconfig | 1 arch/parisc/include/asm/fb.h | 2 arch/parisc/kernel/cache.c | 5 arch/powerpc/kernel/crash_dump.c | 35 -- arch/powerpc/kernel/process.c | 2 arch/powerpc/kernel/rtas.c | 11 arch/powerpc/platforms/microwatt/microwatt.h | 7 arch/powerpc/platforms/microwatt/rng.c | 10 arch/powerpc/platforms/microwatt/setup.c | 8 arch/powerpc/platforms/powernv/powernv.h | 2 arch/powerpc/platforms/powernv/rng.c | 52 ++- arch/powerpc/platforms/powernv/setup.c | 2 arch/powerpc/platforms/pseries/pseries.h | 2 arch/powerpc/platforms/pseries/rng.c | 11 arch/powerpc/platforms/pseries/setup.c | 2 arch/riscv/kernel/crash_dump.c | 26 - arch/s390/kernel/crash_dump.c | 23 + arch/s390/kernel/perf_cpum_cf.c | 22 + arch/sh/kernel/crash_dump.c | 29 -- arch/x86/kernel/crash_dump_32.c | 29 -- arch/x86/kernel/crash_dump_64.c | 41 --- arch/x86/kvm/svm/sev.c | 68 +++-- arch/x86/kvm/svm/svm.c | 11 arch/x86/kvm/svm/svm.h | 2 arch/x86/net/bpf_jit_comp.c | 3 arch/xtensa/kernel/time.c | 1 arch/xtensa/platforms/xtfpga/setup.c | 1 block/blk-core.c | 13 block/blk-mq.c | 11 block/genhd.c | 39 -- drivers/base/memory.c | 2 drivers/base/regmap/regmap-irq.c | 8 drivers/block/xen-blkfront.c | 19 - drivers/char/random.c | 6 drivers/dma-buf/udmabuf.c | 5 drivers/gpio/gpio-vr41xx.c | 2 drivers/gpio/gpio-winbond.c | 7 drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c | 2 drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c | 24 - drivers/gpu/drm/amd/display/dc/dcn20/dcn20_dpp.c | 3 drivers/gpu/drm/amd/display/dc/dcn201/dcn201_dpp.c | 3 drivers/gpu/drm/amd/display/dc/dcn30/dcn30_dpp.c | 3 drivers/gpu/drm/i915/display/intel_dpll_mgr.c | 4 drivers/gpu/drm/msm/adreno/adreno_gpu.c | 3 drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c | 2 drivers/gpu/drm/msm/dp/dp_ctrl.c | 33 +- drivers/gpu/drm/msm/dp/dp_ctrl.h | 2 drivers/gpu/drm/msm/dp/dp_display.c | 16 - drivers/gpu/drm/msm/msm_drv.c | 2 drivers/gpu/drm/msm/msm_drv.h | 1 drivers/gpu/drm/msm/msm_gem_prime.c | 15 + drivers/gpu/drm/msm/msm_gpu.c | 3 drivers/gpu/drm/msm/msm_iommu.c | 2 drivers/gpu/drm/sun4i/sun4i_drv.c | 4 drivers/iio/accel/bma180.c | 3 drivers/iio/accel/kxcjk-1013.c | 4 drivers/iio/accel/mma8452.c | 22 + drivers/iio/accel/mxc4005.c | 4 drivers/iio/adc/adi-axi-adc.c | 3 drivers/iio/adc/aspeed_adc.c | 1 drivers/iio/adc/axp288_adc.c | 8 drivers/iio/adc/rzg2l_adc.c | 8 drivers/iio/adc/stm32-adc-core.c | 9 drivers/iio/adc/stm32-adc.c | 37 +- drivers/iio/adc/ti-ads131e08.c | 10 drivers/iio/adc/xilinx-ams.c | 2 drivers/iio/afe/iio-rescale.c | 2 drivers/iio/chemical/ccs811.c | 4 drivers/iio/gyro/mpu3050-core.c | 1 drivers/iio/humidity/hts221_buffer.c | 5 drivers/iio/imu/inv_icm42600/inv_icm42600.h | 1 drivers/iio/imu/inv_icm42600/inv_icm42600_core.c | 2 drivers/iio/magnetometer/yamaha-yas530.c | 2 drivers/iio/proximity/sx9324.c | 3 drivers/iio/test/Kconfig | 2 drivers/iio/test/Makefile | 2 drivers/iio/trigger/iio-trig-sysfs.c | 1 drivers/iommu/ipmmu-vmsa.c | 2 drivers/md/dm-era-target.c | 8 drivers/md/dm-log.c | 2 drivers/md/dm.c | 4 drivers/memory/mtk-smi.c | 5 drivers/memory/samsung/exynos5422-dmc.c | 29 +- drivers/mmc/host/mtk-sd.c | 20 - drivers/mmc/host/sdhci-pci-o2micro.c | 2 drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c | 2 drivers/net/bonding/bond_main.c | 4 drivers/net/dsa/qca8k.h | 2 drivers/net/ethernet/intel/ice/ice_ethtool.c | 49 +++ drivers/net/ethernet/intel/ice/ice_lib.c | 42 ++- drivers/net/ethernet/intel/ice/ice_tc_lib.c | 5 drivers/net/ethernet/intel/igb/igb_main.c | 19 - drivers/net/phy/aquantia_main.c | 15 + drivers/net/phy/at803x.c | 6 drivers/net/veth.c | 4 drivers/net/virtio_net.c | 25 - drivers/nvme/host/core.c | 14 + drivers/nvme/host/pci.c | 4 drivers/scsi/ibmvscsi/ibmvfc.c | 82 ++++-- drivers/scsi/ibmvscsi/ibmvfc.h | 2 drivers/scsi/scsi_debug.c | 22 + drivers/scsi/scsi_transport_iscsi.c | 7 drivers/scsi/storvsc_drv.c | 27 +- drivers/soc/bcm/brcmstb/pm/pm-arm.c | 1 drivers/usb/chipidea/udc.c | 3 drivers/usb/gadget/function/uvc_video.c | 3 drivers/usb/gadget/legacy/raw_gadget.c | 63 +++- drivers/usb/host/xhci-hub.c | 2 drivers/usb/host/xhci-pci.c | 6 drivers/usb/host/xhci.c | 15 - drivers/usb/host/xhci.h | 2 drivers/usb/serial/option.c | 6 drivers/usb/serial/pl2303.c | 29 +- drivers/usb/typec/tcpm/Kconfig | 1 drivers/video/console/sticore.c | 2 drivers/xen/features.c | 2 drivers/xen/gntdev-common.h | 7 drivers/xen/gntdev.c | 157 ++++++++---- fs/9p/fid.c | 22 - fs/9p/vfs_addr.c | 13 fs/9p/vfs_inode.c | 8 fs/9p/vfs_inode_dotl.c | 3 fs/afs/inode.c | 3 fs/btrfs/disk-io.c | 13 fs/btrfs/file.c | 67 +++-- fs/btrfs/locking.c | 3 fs/btrfs/reflink.c | 15 - fs/btrfs/super.c | 47 +++ fs/cifs/smb2pdu.c | 21 + fs/f2fs/iostat.c | 31 +- fs/f2fs/namei.c | 17 - fs/f2fs/node.c | 4 fs/io_uring.c | 20 + fs/proc/vmcore.c | 54 ++-- include/linux/crash_dump.h | 9 include/linux/mm.h | 1 include/linux/ratelimit_types.h | 12 include/net/inet_sock.h | 5 include/trace/events/libata.h | 1 kernel/dma/direct.c | 5 kernel/trace/rethook.c | 9 kernel/trace/trace_kprobe.c | 11 mm/filemap.c | 2 mm/hwpoison-inject.c | 2 mm/madvise.c | 2 mm/memory-failure.c | 12 mm/readahead.c | 2 mm/slub.c | 2 mm/swap.c | 2 net/core/dev.c | 25 + net/core/filter.c | 34 ++ net/core/net-sysfs.c | 1 net/core/skmsg.c | 5 net/ethtool/eeprom.c | 2 net/ipv4/ip_gre.c | 15 - net/ipv4/ping.c | 10 net/ipv4/tcp_bpf.c | 3 net/ipv6/ip6_gre.c | 15 - net/netfilter/nf_dup_netdev.c | 25 + net/netfilter/nft_meta.c | 13 net/netfilter/nft_numgen.c | 12 net/openvswitch/flow.c | 2 net/sched/sch_netem.c | 4 net/tipc/core.c | 3 net/tls/tls_main.c | 2 net/xdp/xsk.c | 16 - scripts/mod/modpost.c | 2 sound/core/memalloc.c | 23 - sound/hda/hdac_i915.c | 15 - sound/pci/hda/hda_auto_parser.c | 7 sound/pci/hda/hda_local.h | 1 sound/pci/hda/patch_conexant.c | 4 sound/pci/hda/patch_realtek.c | 36 ++ sound/pci/hda/patch_via.c | 4 tools/perf/tests/shell/test_arm_callgraph_fp.sh | 2 tools/perf/tests/topology.c | 2 tools/perf/util/arm-spe.c | 22 - tools/perf/util/build-id.c | 28 ++ tools/testing/selftests/dma/Makefile | 1 tools/testing/selftests/dma/dma_map_benchmark.c | 2 tools/testing/selftests/net/fcnal-test.sh | 61 ++++ tools/testing/selftests/netfilter/nft_concat_range.sh | 2 203 files changed, 1557 insertions(+), 919 deletions(-)
Aashish Sharma (1):
iio:proximity:sx9324: Check ret value of device_property_read_u32_array()
Adrian Hunter (1):
perf build-id: Fix caching files with a wrong build ID
Aidan MacDonald (2):
regmap-irq: Fix a bug in regmap_irq_enable() for type_in_mask chips
regmap-irq: Fix offset/index mismatch in read_sub_irq_data()
Alan Stern (2):
usb: gadget: Fix non-unique driver names in raw-gadget driver
USB: gadget: Fix double-free bug in raw_gadget driver
Alexander Gordeev (2):
s390/crash: add missing iterator advance in copy_oldmem_page() s390/crash: make copy_oldmem_page() return number of bytes copied
Alexander Stein (1):
ARM: dts: imx7: Move hsic_phy power domain to HSIC PHY node
Alistair Popple (1):
filemap: Fix serialization adding transparent huge pages to page cache
Anatolii Gerasymenko (2):
ice: ethtool: advertise 1000M speeds properly
ice: ethtool: Prohibit improper channel config for DCB
Andrew Donnellan (1):
powerpc/rtas: Allow ibm,platform-dump RTAS call with null buffer address
Andy Shevchenko (1):
usb: typec: wcove: Drop wrong dependency to INTEL_SOC_PMIC
Aswath Govindraju (1):
arm64: dts: ti: k3-am64-main: Remove support for HS400 speed mode
Athira Rajeev (1):
perf test topology: Use !strncmp(right platform) to fix guest PPC comparision check
Baruch Siach (1):
iio: adc: vf610: fix conversion mode sysfs node name
Carlo Lobrano (1):
USB: serial: option: add Telit LE910Cx 0x1250 composition
Chevron Li (1):
mmc: sdhci-pci-o2micro: Fix card detect by dealing with debouncing
Christian Marangi (1):
net: dsa: qca8k: reduce mgmt ethernet timeout
Christoph Hellwig (3):
block: disable the elevator int del_gendisk
nvme: move the Samsung X5 quirk entry to the core quirks
io_uring: make apoll_events a __poll_t
Ciara Loftus (1):
xsk: Fix generic transmit when completion queue reservation fails
Claudiu Manoil (1):
phy: aquantia: Fix AN when higher speeds than 1G are not advertised
Daeho Jeong (1):
f2fs: fix iostat related lock protection
Damien Le Moal (1):
scsi: scsi_debug: Fix zone transition to full condition
Dan Carpenter (1):
gpio: winbond: Fix error code in winbond_gpio_get()
Dan Vacura (1):
usb: gadget: uvc: fix list double add in uvcg_video_pump
David Howells (1):
afs: Fix dynamic root getattr
David Sterba (1):
btrfs: add error messages to all unrecognized mount options
David Virag (1):
arm64: dts: exynos: Correct UART clocks on Exynos7885
Demi Marie Obenour (1):
xen/gntdev: Avoid blocking in unmap_grant_pages()
Dexuan Cui (1):
dma-direct: use the correct size for dma_set_encrypted()
Dmitry Rokosov (5):
iio:humidity:hts221: rearrange iio trigger get and register iio:chemical:ccs811: rearrange iio trigger get and register iio:accel:kxcjk-1013: rearrange iio trigger get and register iio:accel:bma180: rearrange iio trigger get and register iio:accel:mxc4005: rearrange iio trigger get and register
Dominique Martinet (3):
9p: fix fid refcount leak in v9fs_vfs_atomic_open_dotl 9p: fix fid refcount leak in v9fs_vfs_get_link 9p: fix EBADF errors in cached mode
Edward Wu (1):
ata: libata: add qc->flags in ata_qc_complete_template tracepoint
Eric Dumazet (2):
net: fix data-race in dev_isalive()
erspan: do not assume transport header is always set
Filipe Manana (2):
btrfs: fix hang during unmount when block group reclaim task is running
btrfs: fix race between reflinking and ordered extent completion
Florian Westphal (3):
netfilter: use get_random_u32 instead of prandom
netfilter: nf_dup_netdev: do not push mac header a second time
netfilter: nf_dup_netdev: add and use recursion counter
Geert Uytterhoeven (2):
dt-bindings: usb: ohci: Increase the number of PHYs
dt-bindings: usb: ehci: Increase the number of PHYs
George Shen (1):
drm/amd/display: Fix typo in override_lane_settings
Gerd Hoffmann (1):
udmabuf: add back sanity check
Greg Kroah-Hartman (1):
Linux 5.18.8
Haibo Chen (2):
iio: mma8452: fix probe fail when device tree compatible is used.
iio: accel: mma8452: ignore the return value of reset operation
Hans de Goede (1):
iio: adc: axp288: Override TS pin bias current for some models
Helge Deller (2):
parisc/stifb: Fix fb_is_primary_device() only available with CONFIG_FB_STI
parisc: Enable ARCH_HAS_STRICT_MODULE_RWX
Hoang Le (1):
tipc: fix use-after-free Read in tipc_named_reinit
Ivan Vecera (1):
ethtool: Fix get module eeprom fallback
Jaegeuk Kim (2):
f2fs: attach inline_data after setting compression
f2fs: do not count ENOENT for error case
Jakub Kicinski (2):
Revert "net/tls: fix tls_sk_proto_close executed repeatedly"
sock: redo the psock vs ULP protection check
Jakub Sitnicki (1):
bpf, x86: Fix tail call count offset calculation on bpf2bpf call
Jann Horn (1):
mm/slub: add missing TID updates on slab deactivation
Jason A. Donenfeld (6):
random: schedule mix_interrupt_randomness() less often
random: quiet urandom warning ratelimit suppression message powerpc/microwatt: wire up rng during setup_arch() powerpc/powernv: wire up rng during setup_arch
random: update comment from copy_to_user() -> copy_to_iter() powerpc/pseries: wire up rng during setup_arch()
Jason Andryuk (1):
xen-blkfront: Handle NULL gendisk
Jay Vosburgh (2):
veth: Add updating of trans_start
bonding: ARP monitor spams NETDEV_NOTIFY_PEERS notifiers
Jean-Baptiste Maneyrol (1):
iio: imu: inv_icm42600: Fix broken icm42600 (chip id 0 value)
Jens Axboe (1):
block: pop cached rq before potentially blocking rq_qos_throttle()
Jialin Zhang (2):
iio: adc: rzg2l_adc: add missing fwnode_handle_put() in rzg2l_adc_parse_properties()
iio: adc: ti-ads131e08: add missing fwnode_handle_put() in ads131e08_alloc_channels()
Jie2x Zhou (1):
selftests: netfilter: correct PKTGEN_SCRIPT_PATHS in nft_concat_range.sh
Joerg Roedel (1):
MAINTAINERS: Add new IOMMU development mailing list
Johan Hovold (1):
USB: serial: pl2303: add support for more HXN (G) types
John David Anglin (1):
parisc: Fix flush_anon_page on PA8800/PA8900
Jon Maxwell (1):
bpf: Fix request_sock leak in sk lookup helpers
Jonathan Marek (1):
drm/msm: use for_each_sgtable_sg to iterate over scatterlist
Josef Bacik (1):
btrfs: fix deadlock with fsync+fiemap+transaction commit
Joshua Ashton (1):
amd/display/dc: Fix COLOR_ENCODING and COLOR_RANGE doing nothing for DCN20+
Julien Grall (1):
x86/xen: Remove undefined behavior in setup_features()
Kai-Heng Feng (1):
igb: Make DMA faster when CPU is active on the PCIe link
Kailang Yang (1):
ALSA: hda/realtek - ALC897 headset MIC no sound
Kuogee Hsieh (2):
drm/msm/dp: check core_initialized before disable interrupts at dp_display_unbind() drm/msm/dp: force link training for display resolution change
Leo Yan (1):
perf arm-spe: Don't set data source if it's not a memory operation
Liam Beguin (1):
iio: test: fix missing MODULE_LICENSE for IIO_RESCALE=m
Liang He (2):
xtensa: xtfpga: Fix refcount leak bug in setup
xtensa: Fix refcount leak bug in time.c
Linus Walleij (2):
iio: magnetometer: yas530: Fix memchr_inv() misuse
iio: afe: rescale: Fix boolean logic bug
Lorenzo Bianconi (1):
igb: fix a use-after-free issue in igb_clean_tx_ring
Lucas Stach (1):
ARM: dts: imx6qdl: correct PU regulator ramp delay
Lv Ruyi (1):
iio: adc: xilinx-ams: fix return error variable
Macpaul Lin (1):
USB: serial: option: add Quectel RM500K module support
Marcelo Tosatti (1):
mm: lru_cache_disable: use synchronize_rcu_expedited
Marcin Szycik (1):
ice: ignore protocol field in GTP offload
Mario Limonciello (1):
drm/amd: Revert "drm/amd/display: keep eDP Vdd on when eDP stream is already enabled"
Masahiro Yamada (2):
modpost: fix section mismatch check for exported init/exit sections
kbuild: link vmlinux only once for CONFIG_TRIM_UNUSED_KSYMS (2nd attempt)
Masami Hiramatsu (Google) (2):
tracing/kprobes: Check whether get_kretprobe() returns NULL in kretprobe_dispatcher()
rethook: Reject getting a rethook if RCU is not watching
Mathias Nyman (1):
xhci: turn off port power in shutdown
Matt Ranostay (1):
arm64: dts: ti: k3-j721s2: Fix overlapping GICD memory region
Matthew Wilcox (Oracle) (2):
filemap: Handle sibling entries in filemap_get_read_batch()
vmcore: convert copy_oldmem_page() to take an iov_iter
Maximilian Luz (1):
drm/msm: Fix double pm_runtime_disable() call
Mengqi Zhang (1):
mmc: mediatek: wait dma stop bit reset to 0
Miaoqian Lin (9):
drm/msm/mdp4: Fix refcount leak in mdp4_modeset_init_intf
iio: adc: aspeed: Fix refcount leak in aspeed_adc_set_trim_data
iio: adc: adi-axi-adc: Fix refcount leak in adi_axi_adc_attach_client
ARM: exynos: Fix refcount leak in exynos_map_pmu
soc: bcm: brcmstb: pm: pm-arm: Fix refcount leak in brcmstb_pm_probe
ARM: Fix refcount leak in axxia_boot_secondary
memory: mtk-smi: add missing put_device() call in mtk_smi_device_link_common
memory: samsung: exynos5422-dmc: Fix refcount leak in of_get_dram_timings
ARM: cns3xxx: Fix refcount leak in cns3xxx_init
Michael Petlan (1):
perf test: Record only user callchains on the "Check Arm64 callgraphs are complete in fp mode" test
Mike Snitzer (1):
dm: do not return early from dm_io_complete if BLK_STS_AGAIN without polling
Mikulas Patocka (1):
dm mirror log: clear log bits up to BITS_PER_LONG boundary
Naveen N. Rao (1):
powerpc: Enable execve syscall exit tracepoint
Nikos Tsironis (1):
dm era: commit metadata in postsuspend after worker stops
Oleksij Rempel (1):
net: phy: at803x: fix NULL pointer dereference on AR9331 PHY
Olivier Moysan (2):
iio: adc: stm32: fix maximum clock rate for stm32mp15x
iio: adc: stm32: fix vrefint wrong calibration value handling
Pavel Begunkov (3):
io_uring: fail links when poll fails
io_uring: fix req->apoll_events
io_uring: fix wrong arm_poll error handling
Peilin Ye (1):
net/sched: sch_netem: Fix arithmetic in netem_dump() for 32-bit platforms
Peter Gonda (1):
KVM: SEV: Init target VMCBs in sev_migrate_from
Qu Wenruo (1):
btrfs: prevent remounting to v1 space cache for subpage mount
Quentin Perret (1):
KVM: arm64: Prevent kmemleak from accessing pKVM memory
Riccardo Paolo Bestetti (2):
ipv4: ping: fix bind address validity check
ipv4: fix bind address validity regression tests
Rob Clark (2):
drm/msm: Ensure mmap offset is initialized drm/msm: Switch ordering of runpm put vs devfreq_idle
Rosemarie O'Riorden (1):
net: openvswitch: fix parsing of nw_proto for IPv6 fragments
Samuel Holland (1):
drm/sun4i: Fix crash during suspend after component bind failure
Sascha Hauer (1):
mtd: rawnand: gpmi: Fix setting busy timeout setting
Saurabh Sengar (1):
scsi: storvsc: Correct reporting of Hyper-V I/O size limits
Sergey Gorenko (1):
scsi: iscsi: Exclude zero from the endpoint ID range
Shyam Prasad N (1):
smb3: use netname when available on secondary channels
Soham Sen (1):
ALSA: hda/realtek: Add mute LED quirk for HP Omen laptop
Stefan Wahren (1):
ARM: dts: bcm2711-rpi-400: Fix GPIO line names
Stephan Gerhold (1):
virtio_net: fix xdp_rxq_info bug after suspend/resume
Steve French (1):
smb3: fix empty netname context on secondary channels
Takashi Iwai (5):
ALSA: memalloc: Drop x86-specific hack for WC allocations
ALSA: hda/via: Fix missing beep setup
ALSA: hda: Fix discovery of i915 graphics PCI device
ALSA: hda/conexant: Fix missing beep setup
ALSA: hda/realtek: Apply fixup for Lenovo Yoga Duet 7 properly
Tanveer Alam (1):
xhci-pci: Allow host runtime PM as default for Intel Raptor Lake xHCI
Thomas Richter (1):
s390/cpumf: Handle events cycles and instructions identical
Tim Crawford (2):
ALSA: hda/realtek: Add quirk for Clevo PD70PNT
ALSA: hda/realtek: Add quirk for Clevo NS50PU
Tyler Hicks (1):
9p: Fix refcounting during full path walks for fid lookups
Tyrel Datwyler (2):
scsi: ibmvfc: Store vhost pointer during subcrq allocation
scsi: ibmvfc: Allocate/free queue resource only during probe/remove
Utkarsh Patel (1):
xhci-pci: Allow host runtime PM as default for Intel Meteor Lake xHCI
Ville Syrjälä (1):
drm/i915: Implement w/a 22010492432 for adl-s
Vincent Whitchurch (1):
iio: trigger: sysfs: fix use-after-free on remove
Wojciech Drewek (1):
ice: Fix switchdev rules book keeping
Xu Yang (1):
usb: chipidea: udc: check request status before setting device address
Yannick Brosseau (2):
iio: adc: stm32: Fix ADCs iteration in irq handler
iio: adc: stm32: Fix IRQs on STM32F4 by removing custom spurious IRQs message
Yonglin Tan (1):
USB: serial: option: add Quectel EM05-G modem
Yoshihiro Shimoda (1):
iommu/ipmmu-vmsa: Fix compatible for rcar-gen4
Yu Liao (1):
selftests dma: fix compile error for dma_map_benchmark
Zheyu Ma (1):
iio: gyro: mpu3050: Fix the error handling in mpu3050_power_up()
Ziyang Xuan (1):
net/tls: fix tls_sk_proto_close executed repeatedly
Zygo Blaxell (1):
btrfs: don't set lock_owner when locking extent buffer for reading
huhai (1):
MIPS: Remove repetitive increase irq_err_count
zhenwei pi (1):
mm/memory-failure: disable unpoison once hw error happens
Greg Kroah-Hartman
maintainerDocumentation/ABI/testing/sysfs-bus-iio-vf610 +1 -1
@@ -1,4 +1,4 @@ -What: /sys/bus/iio/devices/iio:deviceX/conversion_mode +What: /sys/bus/iio/devices/iio:deviceX/in_conversion_mode KernelVersion: 4.2 Contact: [email protected] Description:
Documentation/devicetree/bindings/usb/generic-ehci.yaml +2 -1
@@ -135,7 +135,8 @@ properties: Phandle of a companion. phys: - maxItems: 1 + minItems: 1 + maxItems: 3 phy-names: const: usb
Documentation/devicetree/bindings/usb/generic-ohci.yaml +2 -1
@@ -102,7 +102,8 @@ properties: Overrides the detected port count phys: - maxItems: 1 + minItems: 1 + maxItems: 3 phy-names: const: usb
Documentation/vm/hwpoison.rst +2 -1
@@ -120,7 +120,8 @@ Testing unpoison-pfn Software-unpoison page at PFN echoed into this file. This way a page can be reused again. This only works for Linux - injected failures, not for real memory failures. + injected failures, not for real memory failures. Once any hardware + memory failure happens, this feature is disabled. Note these injection interfaces are not stable and might change between kernel versions
MAINTAINERS +11 -0
@@ -427,6 +427,7 @@ ACPI VIOT DRIVER M: Jean-Philippe Brucker <[email protected]> L: [email protected] L: [email protected] +L: [email protected] S: Maintained F: drivers/acpi/viot.c F: include/linux/acpi_viot.h
@@ -960,6 +961,7 @@ AMD IOMMU (AMD-VI) M: Joerg Roedel <[email protected]> R: Suravee Suthikulpanit <[email protected]> L: [email protected] +L: [email protected] S: Maintained T: git git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git F: drivers/iommu/amd/
@@ -5898,6 +5900,7 @@ M: Christoph Hellwig <[email protected]> M: Marek Szyprowski <[email protected]> R: Robin Murphy <[email protected]> L: [email protected] +L: [email protected] S: Supported W: http://git.infradead.org/users/hch/dma-mapping.git T: git git://git.infradead.org/users/hch/dma-mapping.git
@@ -5910,6 +5913,7 @@ F: kernel/dma/ DMA MAPPING BENCHMARK M: Xiang Chen <[email protected]> L: [email protected] +L: [email protected] F: kernel/dma/map_benchmark.c F: tools/testing/selftests/dma/
@@ -7476,6 +7480,7 @@ F: drivers/gpu/drm/exynos/exynos_dp* EXYNOS SYSMMU (IOMMU) driver M: Marek Szyprowski <[email protected]> L: [email protected] +L: [email protected] S: Maintained F: drivers/iommu/exynos-iommu.c
@@ -9875,6 +9880,7 @@ INTEL IOMMU (VT-d) M: David Woodhouse <[email protected]> M: Lu Baolu <[email protected]> L: [email protected] +L: [email protected] S: Supported T: git git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git F: drivers/iommu/intel/
@@ -10253,6 +10259,7 @@ IOMMU DRIVERS M: Joerg Roedel <[email protected]> M: Will Deacon <[email protected]> L: [email protected] +L: [email protected] S: Maintained T: git git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git F: Documentation/devicetree/bindings/iommu/
@@ -12369,6 +12376,7 @@ F: drivers/i2c/busses/i2c-mt65xx.c MEDIATEK IOMMU DRIVER M: Yong Wu <[email protected]> L: [email protected] +L: [email protected] L: [email protected] (moderated for non-subscribers) S: Supported F: Documentation/devicetree/bindings/iommu/mediatek*
@@ -16354,6 +16362,7 @@ F: drivers/i2c/busses/i2c-qcom-cci.c QUALCOMM IOMMU M: Rob Clark <[email protected]> L: [email protected] +L: [email protected] L: [email protected] S: Maintained F: drivers/iommu/arm/arm-smmu/qcom_iommu.c
@@ -18939,6 +18948,7 @@ F: arch/x86/boot/video* SWIOTLB SUBSYSTEM M: Christoph Hellwig <[email protected]> L: [email protected] +L: [email protected] S: Supported W: http://git.infradead.org/users/hch/dma-mapping.git T: git git://git.infradead.org/users/hch/dma-mapping.git
@@ -21609,6 +21619,7 @@ M: Juergen Gross <[email protected]> M: Stefano Stabellini <[email protected]> L: [email protected] (moderated for non-subscribers) L: [email protected] +L: [email protected] S: Supported F: arch/x86/xen/*swiotlb* F: drivers/xen/*swiotlb*
Makefile +2 -2
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 18 -SUBLEVEL = 7 +SUBLEVEL = 8 EXTRAVERSION = NAME = Superb Owl
@@ -1139,7 +1139,7 @@ KBUILD_MODULES := 1 autoksyms_recursive: descend modules.order $(Q)$(CONFIG_SHELL) $(srctree)/scripts/adjust_autoksyms.sh \ - "$(MAKE) -f $(srctree)/Makefile vmlinux" + "$(MAKE) -f $(srctree)/Makefile autoksyms_recursive" endif autoksyms_h := $(if $(CONFIG_TRIM_UNUSED_KSYMS), include/generated/autoksyms.h)
arch/arm/boot/dts/bcm2711-rpi-400.dts +3 -3
@@ -28,12 +28,12 @@ gpio-poweroff { &expgpio { gpio-line-names = "BT_ON", "WL_ON", - "", + "PWR_LED_OFF", "GLOBAL_RESET", "VDD_SD_IO_SEL", - "CAM_GPIO", + "GLOBAL_SHUTDOWN", "SD_PWR_ON", - "SD_OC_N"; + "SHUTDOWN_REQUEST"; }; &genet_mdio {
arch/arm/boot/dts/imx6qdl.dtsi +1 -1
@@ -762,7 +762,7 @@ reg_pu: regulator-vddpu { regulator-name = "vddpu"; regulator-min-microvolt = <725000>; regulator-max-microvolt = <1450000>; - regulator-enable-ramp-delay = <150>; + regulator-enable-ramp-delay = <380>; anatop-reg-offset = <0x140>; anatop-vol-bit-shift = <9>; anatop-vol-bit-width = <5>;
arch/arm/boot/dts/imx7s.dtsi +1 -1
@@ -120,6 +120,7 @@ usbphynop3: usbphynop3 { compatible = "usb-nop-xceiv"; clocks = <&clks IMX7D_USB_HSIC_ROOT_CLK>; clock-names = "main_clk"; + power-domains = <&pgc_hsic_phy>; #phy-cells = <0>; };
@@ -1153,7 +1154,6 @@ usbh: usb@30b30000 { compatible = "fsl,imx7d-usb", "fsl,imx27-usb"; reg = <0x30b30000 0x200>; interrupts = <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>; - power-domains = <&pgc_hsic_phy>; clocks = <&clks IMX7D_USB_CTRL_CLK>; fsl,usbphy = <&usbphynop3>; fsl,usbmisc = <&usbmisc3 0>;
arch/arm/kernel/crash_dump.c +4 -23
@@ -14,22 +14,10 @@#include <linux/crash_dump.h> #include <linux/uaccess.h> #include <linux/io.h> +#include <linux/uio.h> -/** -* copy_oldmem_page() - copy one page from old kernel memory -* @pfn: page frame number to be copied -* @buf: buffer where the copied page is placed -* @csize: number of bytes to copy -* @offset: offset in bytes into the page -* @userbuf: if set, @buf is int he user address space -* -* This function copies one page from old kernel memory into buffer pointed by -* @buf. If @buf is in userspace, set @userbuf to %1. Returns number of bytes -* copied or negative error in case of failure. -*/ -ssize_t copy_oldmem_page (unsigned long pfn,char *buf, -size_t csize,unsigned long offset, -int userbuf) +ssize_t copy_oldmem_page (struct iov_iter *iter,unsigned long pfn, +size_t csize,unsigned long offset) {void *vaddr;
@@ -40,14 +28,7 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf,if (!vaddr)return -ENOMEM ; -if (userbuf) { -if (copy_to_user (buf, vaddr + offset, csize)) { -iounmap (vaddr); -return -EFAULT ; - } - }else { -memcpy (buf, vaddr + offset, csize); - } + csize =copy_to_iter (vaddr + offset, csize, iter);iounmap (vaddr);return csize;
arch/arm/mach-axxia/platsmp.c +1 -0
@@ -39,6 +39,7 @@ static int axxia_boot_secondary(unsigned int cpu, struct task_struct *idle)return -ENOENT ; syscon =of_iomap (syscon_np,0 ); +of_node_put (syscon_np);if (!syscon)return -ENOMEM ;
arch/arm/mach-cns3xxx/core.c +2 -0
@@ -372,6 +372,7 @@ static void __init cns3xxx_init(void)/* De-Asscer SATA Reset */ cns3xxx_pwr_soft_rst (CNS3XXX_PWR_SOFTWARE_RST (SATA )); } +of_node_put (dn); dn =of_find_compatible_node (NULL ,NULL ,"cavium,cns3420-sdhci" );if (of_device_is_available (dn)) {
@@ -385,6 +386,7 @@ static void __init cns3xxx_init(void)cns3xxx_pwr_clk_en (CNS3XXX_PWR_CLK_EN (SDIO ));cns3xxx_pwr_soft_rst (CNS3XXX_PWR_SOFTWARE_RST (SDIO )); } +of_node_put (dn); pm_power_off = cns3xxx_power_off;
arch/arm/mach-exynos/exynos.c +1 -0
@@ -149,6 +149,7 @@ static void exynos_map_pmu(void) np =of_find_matching_node (NULL , exynos_dt_pmu_match);if (np) pmu_base_addr =of_iomap (np,0 ); +of_node_put (np); }static void __init exynos_init_irq (void )
arch/arm64/boot/dts/exynos/exynos7885.dtsi +6 -6
@@ -280,8 +280,8 @@ serial_0: serial@13800000 { interrupts = <GIC_SPI 246 IRQ_TYPE_LEVEL_HIGH>; pinctrl-names = "default"; pinctrl-0 = <&uart0_bus>; - clocks = <&cmu_peri CLK_GOUT_UART0_EXT_UCLK>, - <&cmu_peri CLK_GOUT_UART0_PCLK>; + clocks = <&cmu_peri CLK_GOUT_UART0_PCLK>, + <&cmu_peri CLK_GOUT_UART0_EXT_UCLK>; clock-names = "uart", "clk_uart_baud0"; samsung,uart-fifosize = <64>; status = "disabled";
@@ -293,8 +293,8 @@ serial_1: serial@13810000 { interrupts = <GIC_SPI 247 IRQ_TYPE_LEVEL_HIGH>; pinctrl-names = "default"; pinctrl-0 = <&uart1_bus>; - clocks = <&cmu_peri CLK_GOUT_UART1_EXT_UCLK>, - <&cmu_peri CLK_GOUT_UART1_PCLK>; + clocks = <&cmu_peri CLK_GOUT_UART1_PCLK>, + <&cmu_peri CLK_GOUT_UART1_EXT_UCLK>; clock-names = "uart", "clk_uart_baud0"; samsung,uart-fifosize = <256>; status = "disabled";
@@ -306,8 +306,8 @@ serial_2: serial@13820000 { interrupts = <GIC_SPI 279 IRQ_TYPE_LEVEL_HIGH>; pinctrl-names = "default"; pinctrl-0 = <&uart2_bus>; - clocks = <&cmu_peri CLK_GOUT_UART2_EXT_UCLK>, - <&cmu_peri CLK_GOUT_UART2_PCLK>; + clocks = <&cmu_peri CLK_GOUT_UART2_PCLK>, + <&cmu_peri CLK_GOUT_UART2_EXT_UCLK>; clock-names = "uart", "clk_uart_baud0"; samsung,uart-fifosize = <256>; status = "disabled";
arch/arm64/boot/dts/ti/k3-am64-main.dtsi +0 -2
@@ -456,13 +456,11 @@ sdhci0: mmc@fa10000 { clock-names = "clk_ahb", "clk_xin"; mmc-ddr-1_8v; mmc-hs200-1_8v; - mmc-hs400-1_8v; ti,trm-icp = <0x2>; ti,otap-del-sel-legacy = <0x0>; ti,otap-del-sel-mmc-hs = <0x0>; ti,otap-del-sel-ddr52 = <0x6>; ti,otap-del-sel-hs200 = <0x7>; - ti,otap-del-sel-hs400 = <0x4>; }; sdhci1: mmc@fa00000 {
arch/arm64/boot/dts/ti/k3-j721s2-main.dtsi +1 -1
@@ -33,7 +33,7 @@ gic500: interrupt-controller@1800000 { ranges; #interrupt-cells = <3>; interrupt-controller; - reg = <0x00 0x01800000 0x00 0x200000>, /* GICD */ + reg = <0x00 0x01800000 0x00 0x100000>, /* GICD */ <0x00 0x01900000 0x00 0x100000>, /* GICR */ <0x00 0x6f000000 0x00 0x2000>, /* GICC */ <0x00 0x6f010000 0x00 0x1000>, /* GICH */
arch/arm64/kernel/crash_dump.c +4 -25
@@ -9,25 +9,11 @@#include <linux/crash_dump.h> #include <linux/errno.h> #include <linux/io.h> -#include <linux/memblock.h> -#include <linux/uaccess.h> +#include <linux/uio.h> #include <asm/memory.h> -/** -* copy_oldmem_page() - copy one page from old kernel memory -* @pfn: page frame number to be copied -* @buf: buffer where the copied page is placed -* @csize: number of bytes to copy -* @offset: offset in bytes into the page -* @userbuf: if set, @buf is in a user address space -* -* This function copies one page from old kernel memory into buffer pointed by -* @buf. If @buf is in userspace, set @userbuf to %1. Returns number of bytes -* copied or negative error in case of failure. -*/ -ssize_t copy_oldmem_page (unsigned long pfn,char *buf, -size_t csize,unsigned long offset, -int userbuf) +ssize_t copy_oldmem_page (struct iov_iter *iter,unsigned long pfn, +size_t csize,unsigned long offset) {void *vaddr;
@@ -38,14 +24,7 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf,if (!vaddr)return -ENOMEM ; -if (userbuf) { -if (copy_to_user ((char __user *)buf, vaddr + offset, csize)) { -memunmap (vaddr); -return -EFAULT ; - } - }else { -memcpy (buf, vaddr + offset, csize); - } + csize =copy_to_iter (vaddr + offset, csize, iter);memunmap (vaddr);
arch/arm64/kvm/arm.c +3 -3
@@ -2011,11 +2011,11 @@ static int finalize_hyp_mode(void)return 0 ;/* -* Exclude HYP BSS from kmemleak so that it doesn't get peeked -* at, which would end badly once the section is inaccessible. -* None of other sections should ever be introspected. +* Exclude HYP sections from kmemleak so that they don't get peeked +* at, which would end badly once inaccessible. */ kmemleak_free_part (__hyp_bss_start, __hyp_bss_end - __hyp_bss_start); +kmemleak_free_part (__va (hyp_mem_base), hyp_mem_size);return pkvm_drop_host_privileges (); }
arch/ia64/kernel/crash_dump.c +4 -28
@@ -10,42 +10,18 @@#include <linux/errno.h> #include <linux/types.h> #include <linux/crash_dump.h> - +#include <linux/uio.h> #include <asm/page.h> -#include <linux/uaccess.h> -/** -* copy_oldmem_page - copy one page from "oldmem" -* @pfn: page frame number to be copied -* @buf: target memory address for the copy; this can be in kernel address -* space or user address space (see @userbuf) -* @csize: number of bytes to copy -* @offset: offset in bytes into the page (based on pfn) to begin the copy -* @userbuf: if set, @buf is in user address space, use copy_to_user(), -* otherwise @buf is in kernel address space, use memcpy(). -* -* Copy a page from "oldmem". For this page, there is no pte mapped -* in the current kernel. We stitch up a pte, similar to kmap_atomic. -* -* Calling copy_to_user() in atomic context is not desirable. Hence first -* copying the data to a pre-allocated kernel page and then copying to user -* space in non-atomic context. -*/ -ssize_t -copy_oldmem_page (unsigned long pfn,char *buf, -size_t csize,unsigned long offset,int userbuf) +ssize_t copy_oldmem_page (struct iov_iter *iter,unsigned long pfn, +size_t csize,unsigned long offset) {void *vaddr;if (!csize)return 0 ; vaddr =__va (pfn<<PAGE_SHIFT ); -if (userbuf) { -if (copy_to_user (buf, (vaddr + offset), csize)) { -return -EFAULT ; - } - }else -memcpy (buf, (vaddr + offset), csize); + csize =copy_to_iter (vaddr + offset, csize, iter);return csize; }
arch/mips/kernel/crash_dump.c +4 -23
@@ -1,22 +1,10 @@// SPDX-License-Identifier: GPL-2.0 #include <linux/highmem.h> #include <linux/crash_dump.h> +#include <linux/uio.h> -/** -* copy_oldmem_page - copy one page from "oldmem" -* @pfn: page frame number to be copied -* @buf: target memory address for the copy; this can be in kernel address -* space or user address space (see @userbuf) -* @csize: number of bytes to copy -* @offset: offset in bytes into the page (based on pfn) to begin the copy -* @userbuf: if set, @buf is in user address space, use copy_to_user(), -* otherwise @buf is in kernel address space, use memcpy(). -* -* Copy a page from "oldmem". For this page, there is no pte mapped -* in the current kernel. -*/ -ssize_t copy_oldmem_page (unsigned long pfn,char *buf, -size_t csize,unsigned long offset,int userbuf) +ssize_t copy_oldmem_page (struct iov_iter *iter,unsigned long pfn, +size_t csize,unsigned long offset) {void *vaddr;
@@ -24,14 +12,7 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf,return 0 ; vaddr =kmap_local_pfn (pfn); - -if (!userbuf) { -memcpy (buf, vaddr + offset, csize); - }else { -if (copy_to_user (buf, vaddr + offset, csize)) - csize = -EFAULT ; - } - + csize =copy_to_iter (vaddr + offset, csize, iter);kunmap_local (vaddr);return csize;
arch/mips/vr41xx/common/icu.c +0 -2
@@ -640,8 +640,6 @@ static int icu_get_irq(unsigned int irq)printk (KERN_ERR "spurious ICU interrupt: %04x,%04x\n" , pend1, pend2); -atomic_inc (&irq_err_count); -return -1 ; }
arch/parisc/Kconfig +1 -0
@@ -10,6 +10,7 @@ config PARISC select ARCH_WANT_FRAME_POINTERS select ARCH_HAS_ELF_RANDOMIZE select ARCH_HAS_STRICT_KERNEL_RWX + select ARCH_HAS_STRICT_MODULE_RWX select ARCH_HAS_UBSAN_SANITIZE_ALL select ARCH_HAS_PTE_SPECIAL select ARCH_NO_SG_CHAIN
arch/parisc/include/asm/fb.h +1 -1
@@ -12,7 +12,7 @@ static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma,pgprot_val (vma->vm_page_prot) |= _PAGE_NO_CACHE; } -#if defined(CONFIG_STI_CONSOLE ) || defined(CONFIG_FB_STI ) +#if defined(CONFIG_FB_STI )int fb_is_primary_device (struct fb_info *info);#else static inline int fb_is_primary_device (struct fb_info *info)
arch/parisc/kernel/cache.c +4 -1
@@ -722,7 +722,10 @@ void flush_anon_page(struct vm_area_struct *vma, struct page *page, unsigned lonreturn ;if (parisc_requires_coherency ()) { -flush_user_cache_page (vma, vmaddr); +if (vma->vm_flags &VM_SHARED ) +flush_data_cache (); +else +flush_user_cache_page (vma, vmaddr);return ; }
arch/powerpc/kernel/crash_dump.c +5 -30
@@ -16,7 +16,7 @@#include <asm/kdump.h> #include <asm/prom.h> #include <asm/firmware.h> -#include <linux/uaccess.h> +#include <linux/uio.h> #include <asm/rtas.h> #include <asm/inst.h>
@@ -68,33 +68,8 @@ void __init setup_kdump_trampoline(void) }#endif /* CONFIG_NONSTATIC_KERNEL */ -static size_t copy_oldmem_vaddr (void *vaddr,char *buf,size_t csize, -unsigned long offset,int userbuf) -{ -if (userbuf) { -if (copy_to_user ((char __user *)buf, (vaddr + offset), csize)) -return -EFAULT ; - }else -memcpy (buf, (vaddr + offset), csize); - -return csize; -} - -/** -* copy_oldmem_page - copy one page from "oldmem" -* @pfn: page frame number to be copied -* @buf: target memory address for the copy; this can be in kernel address -* space or user address space (see @userbuf) -* @csize: number of bytes to copy -* @offset: offset in bytes into the page (based on pfn) to begin the copy -* @userbuf: if set, @buf is in user address space, use copy_to_user(), -* otherwise @buf is in kernel address space, use memcpy(). -* -* Copy a page from "oldmem". For this page, there is no pte mapped -* in the current kernel. We stitch up a pte, similar to kmap_atomic. -*/ -ssize_t copy_oldmem_page (unsigned long pfn,char *buf, -size_t csize,unsigned long offset,int userbuf) +ssize_t copy_oldmem_page (struct iov_iter *iter,unsigned long pfn, +size_t csize,unsigned long offset) {void *vaddr;phys_addr_t paddr;
@@ -107,10 +82,10 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf,if (memblock_is_region_memory (paddr, csize)) { vaddr =__va (paddr); - csize =copy_oldmem_vaddr (vaddr, buf, csize, offset, userbuf); + csize =copy_to_iter (vaddr + offset, csize, iter); }else { vaddr =ioremap_cache (paddr,PAGE_SIZE ); - csize =copy_oldmem_vaddr (vaddr, buf, csize, offset, userbuf); + csize =copy_to_iter (vaddr + offset, csize, iter);iounmap (vaddr); }
arch/powerpc/kernel/process.c +1 -1
@@ -1857,7 +1857,7 @@ void start_thread(struct pt_regs *regs, unsigned long start, unsigned long sp)tm_reclaim_current (0 );#endif -memset (regs->gpr,0 ,sizeof (regs->gpr)); +memset (®s->gpr[1 ],0 ,sizeof (regs->gpr) -sizeof (regs->gpr[0 ])); regs->ctr =0 ; regs->link =0 ; regs->xer =0 ;
arch/powerpc/kernel/rtas.c +10 -1
@@ -1061,7 +1061,7 @@ static struct rtas_filter rtas_filters[] __ro_after_init = { { "get-time-of-day", -1, -1, -1, -1, -1 }, { "ibm,get-vpd", -1, 0, -1, 1, 2 }, { "ibm,lpar-perftools", -1, 2, 3, -1, -1 }, - { "ibm,platform-dump", -1, 4, 5, -1, -1 }, + { "ibm,platform-dump", -1, 4, 5, -1, -1 }, /* Special cased */ { "ibm,read-slot-reset-state", -1, -1, -1, -1, -1 }, { "ibm,scan-log-dump", -1, 0, 1, -1, -1 }, { "ibm,set-dynamic-indicator", -1, 2, -1, -1, -1 },
@@ -1110,6 +1110,15 @@ static bool block_rtas_call(int token, int nargs, size =1 ; end = base + size -1 ; + +/* +* Special case for ibm,platform-dump - NULL buffer +* address is used to indicate end of dump processing +*/ +if (!strcmp (f->name,"ibm,platform-dump" ) && + base ==0 ) +return false; +if (!in_rmo_buf (base, end)) goto err; }
arch/powerpc/platforms/microwatt/microwatt.h new file +7 -0
@@ -0,0 +1,7 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _MICROWATT_H +#define _MICROWATT_H + +void microwatt_rng_init (void ); + +#endif /* _MICROWATT_H */
arch/powerpc/platforms/microwatt/rng.c +3 -7
@@ -11,6 +11,7 @@#include <asm/archrandom.h> #include <asm/cputable.h> #include <asm/machdep.h> +#include "microwatt.h" #define DARN_ERR 0xFFFFFFFFFFFFFFFFul
@@ -29,7 +30,7 @@ static int microwatt_get_random_darn(unsigned long *v)return 1 ; } -static __init int rng_init (void ) +void __init microwatt_rng_init (void ) {unsigned long val;int i;
@@ -37,12 +38,7 @@ static __init int rng_init(void)for (i =0 ; i <10 ; i++) {if (microwatt_get_random_darn (&val)) { ppc_md.get_random_seed = microwatt_get_random_darn; -return 0 ; +return ; } } - -pr_warn ("Unable to use DARN for get_random_seed()\n" ); - -return -EIO ; } -machine_subsys_initcall(, rng_init);
arch/powerpc/platforms/microwatt/setup.c +8 -0
@@ -16,6 +16,8 @@#include <asm/xics.h> #include <asm/udbg.h> +#include "microwatt.h" +static void __init microwatt_init_IRQ (void ) {xics_init ();
@@ -32,10 +34,16 @@ static int __init microwatt_populate(void) }machine_arch_initcall (microwatt, microwatt_populate); +static void __init microwatt_setup_arch (void ) +{ +microwatt_rng_init (); +} +define_machine (microwatt) { .name = "microwatt", .probe = microwatt_probe, .init_IRQ = microwatt_init_IRQ, + .setup_arch = microwatt_setup_arch, .progress = udbg_progress, .calibrate_decr = generic_calibrate_decr, };
arch/powerpc/platforms/powernv/powernv.h +2 -0
@@ -42,4 +42,6 @@ ssize_t memcons_copy(struct memcons *mc, char *to, loff_t pos, size_t count);u32 __init memcons_get_size (struct memcons *mc);struct memcons *__init memcons_init (struct device_node *node,const char *mc_prop_name); +void pnv_rng_init (void ); +#endif /* _POWERNV_H */
arch/powerpc/platforms/powernv/rng.c +36 -16
90 lines not on this page · raw message
arch/powerpc/platforms/powernv/setup.c +2 -0
@@ -203,6 +203,8 @@ static void __init pnv_setup_arch(void)pnv_check_guarded_cores ();/* XXX PMCS */ + +pnv_rng_init (); }static void __init pnv_init (void )
arch/powerpc/platforms/pseries/pseries.h +2 -0
@@ -121,4 +121,6 @@ void pseries_lpar_read_hblkrm_characteristics(void);static inline void pseries_lpar_read_hblkrm_characteristics (void ) { }#endif +void pseries_rng_init (void ); +#endif /* _PSERIES_PSERIES_H */
arch/powerpc/platforms/pseries/rng.c +3 -8
@@ -10,6 +10,7 @@#include <asm/archrandom.h> #include <asm/machdep.h> #include <asm/plpar_wrappers.h> +#include "pseries.h" static int pseries_get_random_long (unsigned long *v)
@@ -24,19 +25,13 @@ static int pseries_get_random_long(unsigned long *v)return 0 ; } -static __init int rng_init (void ) +void __init pseries_rng_init (void ) {struct device_node *dn; dn =of_find_compatible_node (NULL ,NULL ,"ibm,random" );if (!dn) -return -ENODEV ; - -pr_info ("Registering arch random hook.\n" ); - +return ; ppc_md.get_random_seed = pseries_get_random_long; -of_node_put (dn); -return 0 ; } -machine_subsys_initcall (pseries, rng_init);
arch/powerpc/platforms/pseries/setup.c +2 -0
@@ -852,6 +852,8 @@ static void __init pSeries_setup_arch(void)if (swiotlb_force ==SWIOTLB_FORCE ) ppc_swiotlb_enable =1 ; + +pseries_rng_init (); }static void pseries_panic (char *str)
arch/riscv/kernel/crash_dump.c +4 -22
@@ -7,22 +7,10 @@#include <linux/crash_dump.h> #include <linux/io.h> +#include <linux/uio.h> -/** -* copy_oldmem_page() - copy one page from old kernel memory -* @pfn: page frame number to be copied -* @buf: buffer where the copied page is placed -* @csize: number of bytes to copy -* @offset: offset in bytes into the page -* @userbuf: if set, @buf is in a user address space -* -* This function copies one page from old kernel memory into buffer pointed by -* @buf. If @buf is in userspace, set @userbuf to %1. Returns number of bytes -* copied or negative error in case of failure. -*/ -ssize_t copy_oldmem_page (unsigned long pfn,char *buf, -size_t csize,unsigned long offset, -int userbuf) +ssize_t copy_oldmem_page (struct iov_iter *iter,unsigned long pfn, +size_t csize,unsigned long offset) {void *vaddr;
@@ -33,13 +21,7 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf,if (!vaddr)return -ENOMEM ; -if (userbuf) { -if (copy_to_user ((char __user *)buf, vaddr + offset, csize)) { -memunmap (vaddr); -return -EFAULT ; - } - }else -memcpy (buf, vaddr + offset, csize); + csize =copy_to_iter (vaddr + offset, csize, iter);memunmap (vaddr);return csize;
arch/s390/kernel/crash_dump.c +17 -6
@@ -15,6 +15,7 @@#include <linux/slab.h> #include <linux/memblock.h> #include <linux/elf.h> +#include <linux/uio.h> #include <asm/asm-offsets.h> #include <asm/os_info.h> #include <asm/elf.h>
@@ -212,20 +213,30 @@ static int copy_oldmem_user(void __user *dst, unsigned long src, size_t count)/* * Copy one page from "oldmem" */ -ssize_t copy_oldmem_page (unsigned long pfn,char *buf,size_t csize, -unsigned long offset,int userbuf) +ssize_t copy_oldmem_page (struct iov_iter *iter,unsigned long pfn,size_t csize, +unsigned long offset) {unsigned long src;int rc; +if (!(iter_is_iovec (iter) ||iov_iter_is_kvec (iter))) +return -EINVAL ; +/* Multi-segment iterators are not supported */ +if (iter->nr_segs >1 ) +return -EINVAL ;if (!csize)return 0 ; src =pfn_to_phys (pfn) + offset; -if (userbuf) - rc =copy_oldmem_user ((void __force __user *) buf, src, csize); + +/* XXX: pass the iov_iter down to a common function */ +if (iter_is_iovec (iter)) + rc =copy_oldmem_user (iter->iov->iov_base, src, csize);else - rc =copy_oldmem_kernel ((void *) buf, src, csize); -return rc; + rc =copy_oldmem_kernel (iter->kvec->iov_base, src, csize); +if (rc <0 ) +return rc; +iov_iter_advance (iter, csize); +return csize; }/*
arch/s390/kernel/perf_cpum_cf.c +21 -1
@@ -516,6 +516,26 @@ static int __hw_perf_event_init(struct perf_event *event, unsigned int type)return err; } +/* Events CPU_CYLCES and INSTRUCTIONS can be submitted with two different +* attribute::type values: +* - PERF_TYPE_HARDWARE: +* - pmu->type: +* Handle both type of invocations identical. They address the same hardware. +* The result is different when event modifiers exclude_kernel and/or +* exclude_user are also set. +*/ +static int cpumf_pmu_event_type (struct perf_event *event) +{ +u64 ev = event->attr.config; + +if (cpumf_generic_events_basic[PERF_COUNT_HW_CPU_CYCLES ] == ev || + cpumf_generic_events_basic[PERF_COUNT_HW_INSTRUCTIONS ] == ev || + cpumf_generic_events_user[PERF_COUNT_HW_CPU_CYCLES ] == ev || + cpumf_generic_events_user[PERF_COUNT_HW_INSTRUCTIONS ] == ev) +return PERF_TYPE_HARDWARE ; +return PERF_TYPE_RAW ; +} +static int cpumf_pmu_event_init (struct perf_event *event) {unsigned int type = event->attr.type;
@@ -525,7 +545,7 @@ static int cpumf_pmu_event_init(struct perf_event *event) err =__hw_perf_event_init (event, type); else if (event->pmu->type == type)/* Registered as unknown PMU */ - err =__hw_perf_event_init (event,PERF_TYPE_RAW ); + err =__hw_perf_event_init (event,cpumf_pmu_event_type (event)); else return -ENOENT;
arch/sh/kernel/crash_dump.c +5 -24
@@ -8,23 +8,11 @@#include <linux/errno.h> #include <linux/crash_dump.h> #include <linux/io.h> +#include <linux/uio.h> #include <linux/uaccess.h> -/** -* copy_oldmem_page - copy one page from "oldmem" -* @pfn: page frame number to be copied -* @buf: target memory address for the copy; this can be in kernel address -* space or user address space (see @userbuf) -* @csize: number of bytes to copy -* @offset: offset in bytes into the page (based on pfn) to begin the copy -* @userbuf: if set, @buf is in user address space, use copy_to_user(), -* otherwise @buf is in kernel address space, use memcpy(). -* -* Copy a page from "oldmem". For this page, there is no pte mapped -* in the current kernel. We stitch up a pte, similar to kmap_atomic. -*/ -ssize_t copy_oldmem_page (unsigned long pfn,char *buf, -size_t csize,unsigned long offset,int userbuf) +ssize_t copy_oldmem_page (struct iov_iter *iter,unsigned long pfn, +size_t csize,unsigned long offset) {void __iomem *vaddr;
@@ -32,15 +20,8 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf,return 0 ; vaddr =ioremap (pfn <<PAGE_SHIFT ,PAGE_SIZE ); - -if (userbuf) { -if (copy_to_user ((void __user *)buf, (vaddr + offset), csize)) { -iounmap (vaddr); -return -EFAULT ; - } - }else -memcpy (buf, (vaddr + offset), csize); - + csize =copy_to_iter (vaddr + offset, csize, iter);iounmap (vaddr); +return csize; }
arch/x86/kernel/crash_dump_32.c +4 -25
@@ -10,8 +10,7 @@#include <linux/errno.h> #include <linux/highmem.h> #include <linux/crash_dump.h> - -#include <linux/uaccess.h> +#include <linux/uio.h> static inline bool is_crashed_pfn_valid (unsigned long pfn) {
@@ -29,21 +28,8 @@ static inline bool is_crashed_pfn_valid(unsigned long pfn)#endif } -/** -* copy_oldmem_page - copy one page from "oldmem" -* @pfn: page frame number to be copied -* @buf: target memory address for the copy; this can be in kernel address -* space or user address space (see @userbuf) -* @csize: number of bytes to copy -* @offset: offset in bytes into the page (based on pfn) to begin the copy -* @userbuf: if set, @buf is in user address space, use copy_to_user(), -* otherwise @buf is in kernel address space, use memcpy(). -* -* Copy a page from "oldmem". For this page, there might be no pte mapped -* in the current kernel. -*/ -ssize_t copy_oldmem_page (unsigned long pfn,char *buf,size_t csize, -unsigned long offset,int userbuf) +ssize_t copy_oldmem_page (struct iov_iter *iter,unsigned long pfn,size_t csize, +unsigned long offset) {void *vaddr;
@@ -54,14 +40,7 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf, size_t csize,return -EFAULT ; vaddr =kmap_local_pfn (pfn); - -if (!userbuf) { -memcpy (buf, vaddr + offset, csize); - }else { -if (copy_to_user (buf, vaddr + offset, csize)) - csize = -EFAULT ; - } - + csize =copy_to_iter (vaddr + offset, csize, iter);kunmap_local (vaddr);return csize;
arch/x86/kernel/crash_dump_64.c +11 -30
69 lines not on this page · raw message
arch/x86/kvm/svm/sev.c +45 -23
122 lines not on this page · raw message
arch/x86/kvm/svm/svm.c +2 -9
@@ -1125,15 +1125,8 @@ static void init_vmcb(struct kvm_vcpu *vcpu) svm->vmcb->control.int_ctl |=V_GIF_ENABLE_MASK ; } -if (sev_guest (vcpu->kvm)) { - svm->vmcb->control.nested_ctl |=SVM_NESTED_CTL_SEV_ENABLE ; -clr_exception_intercept (svm,UD_VECTOR ); - -if (sev_es_guest (vcpu->kvm)) { -/* Perform SEV-ES specific VMCB updates */ -sev_es_init_vmcb (svm); - } - } +if (sev_guest (vcpu->kvm)) +sev_init_vmcb (svm);svm_hv_init_vmcb (svm->vmcb);init_vmcb_after_set_cpuid (vcpu);
arch/x86/kvm/svm/svm.h +1 -1
@@ -616,10 +616,10 @@ void __init sev_set_cpu_caps(void);void __init sev_hardware_setup (void );void sev_hardware_unsetup (void );int sev_cpu_init (struct svm_cpu_data *sd); +void sev_init_vmcb (struct vcpu_svm *svm);void sev_free_vcpu (struct kvm_vcpu *vcpu);int sev_handle_vmgexit (struct kvm_vcpu *vcpu);int sev_es_string_io (struct vcpu_svm *svm,int size,unsigned int port,int in); -void sev_es_init_vmcb (struct vcpu_svm *svm);void sev_es_vcpu_reset (struct vcpu_svm *svm);void sev_vcpu_deliver_sipi_vector (struct kvm_vcpu *vcpu,u8 vector);void sev_es_prepare_switch_to_guest (struct vmcb_save_area *hostsa);
arch/x86/net/bpf_jit_comp.c +2 -1
@@ -1415,8 +1415,9 @@ st: if (is_imm8(insn->off))case BPF_JMP |BPF_CALL : func = (u8 *) __bpf_call_base + imm32;if (tail_call_reachable) { +/* mov rax, qword ptr [rbp - rounded_stack_depth - 8] */ EMIT3_off32 (0x48 ,0x8B ,0x85 , - -(bpf_prog->aux->stack_depth +8 )); + -round_up (bpf_prog->aux->stack_depth,8 ) -8 );if (!imm32 ||emit_call (&prog, func, image + addrs[i -1 ] +7 ))return -EINVAL ; }else {
arch/xtensa/kernel/time.c +1 -0
@@ -154,6 +154,7 @@ static void __init calibrate_ccount(void) cpu =of_find_compatible_node (NULL ,NULL ,"cdns,xtensa-cpu" );if (cpu) { clk =of_clk_get (cpu,0 ); +of_node_put (cpu);if (!IS_ERR (clk)) { ccount_freq =clk_get_rate (clk);return ;
arch/xtensa/platforms/xtfpga/setup.c +1 -0
@@ -133,6 +133,7 @@ static int __init machine_setup(void)if ((eth =of_find_compatible_node (eth,NULL ,"opencores,ethoc" )))update_local_mac (eth); +of_node_put (eth);return 0 ; }arch_initcall (machine_setup);
block/blk-core.c +0 -13
@@ -322,19 +322,6 @@ void blk_cleanup_queue(struct request_queue *q)blk_mq_exit_queue (q); } -/* -* In theory, request pool of sched_tags belongs to request queue. -* However, the current implementation requires tag_set for freeing -* requests, so free the pool now. -* -* Queue has become frozen, there can't be any in-queue requests, so -* it is safe to free requests now. -*/ -mutex_lock (&q->sysfs_lock); -if (q->elevator) -blk_mq_sched_free_rqs (q); -mutex_unlock (&q->sysfs_lock); -/* @q is and will stay empty, shutdown and put */ blk_put_queue (q); }
block/blk-mq.c +8 -3
@@ -2777,15 +2777,20 @@ static inline struct request *blk_mq_get_cached_request(struct request_queue *q,return NULL ; } -rq_qos_throttle (q, *bio); -if (blk_mq_get_hctx_type ((*bio)->bi_opf) != rq->mq_hctx->type)return NULL ;if (op_is_flush (rq->cmd_flags) !=op_is_flush ((*bio)->bi_opf))return NULL ; - rq->cmd_flags = (*bio)->bi_opf; +/* +* If any qos ->throttle() end up blocking, we will have flushed the +* plug and hence killed the cached_rq list as well. Pop this entry +* before we throttle. +*/ plug->cached_rq =rq_list_next (rq); +rq_qos_throttle (q, *bio); + + rq->cmd_flags = (*bio)->bi_opf;INIT_LIST_HEAD (&rq->queuelist);return rq; }
block/genhd.c +11 -28
@@ -652,6 +652,17 @@ void del_gendisk(struct gendisk *disk)blk_sync_queue (q);blk_flush_integrity (); +blk_mq_cancel_work_sync (q); + +blk_mq_quiesce_queue (q); +if (q->elevator) { +mutex_lock (&q->sysfs_lock); +elevator_exit (q); +mutex_unlock (&q->sysfs_lock); + } +rq_qos_exit (q); +blk_mq_unquiesce_queue (q); +/* * Allow using passthrough request again after the queue is torn down. */
@@ -1120,31 +1131,6 @@ static const struct attribute_group *disk_attr_groups[] = { NULL }; -static void disk_release_mq (struct request_queue *q) -{ -blk_mq_cancel_work_sync (q); - -/* -* There can't be any non non-passthrough bios in flight here, but -* requests stay around longer, including passthrough ones so we -* still need to freeze the queue here. -*/ -blk_mq_freeze_queue (q); - -/* -* Since the I/O scheduler exit code may access cgroup information, -* perform I/O scheduler exit before disassociating from the block -* cgroup controller. -*/ -if (q->elevator) { -mutex_lock (&q->sysfs_lock); -elevator_exit (q); -mutex_unlock (&q->sysfs_lock); - } -rq_qos_exit (q); -__blk_mq_unfreeze_queue (q, true); -} -/** * disk_release - releases all allocated resources of the gendisk * @dev: the device representing this disk
@@ -1166,9 +1152,6 @@ static void disk_release(struct device *dev)might_sleep ();WARN_ON_ONCE (disk_live (disk)); -if (queue_is_mq (disk->queue)) -disk_release_mq (disk->queue); -blkcg_exit_queue (disk->queue);disk_release_events (disk);
drivers/base/memory.c +1 -1
@@ -558,7 +558,7 @@ static ssize_t hard_offline_page_store(struct device *dev,if (kstrtoull (buf,0 , &pfn) <0 )return -EINVAL ; pfn >>=PAGE_SHIFT ; - ret =memory_failure (pfn,0 ); + ret =memory_failure (pfn,MF_SW_SIMULATED );if (ret == -EOPNOTSUPP ) ret =0 ;return ret ? ret : count;
drivers/base/regmap/regmap-irq.c +5 -3
@@ -252,6 +252,7 @@ static void regmap_irq_enable(struct irq_data *data)struct regmap_irq_chip_data *d =irq_data_get_irq_chip_data (data);struct regmap *map = d->map;const struct regmap_irq *irq_data =irq_to_regmap_irq (d, data->hwirq); +unsigned int reg = irq_data->reg_offset / map->reg_stride;unsigned int mask, type; type = irq_data->type.type_falling_val | irq_data->type.type_rising_val;
@@ -268,14 +269,14 @@ static void regmap_irq_enable(struct irq_data *data)* at the corresponding offset in regmap_irq_set_type(). */ if (d->chip->type_in_mask && type) - mask = d->type_buf[irq_data->reg_offset / map->reg_stride]; + mask = d->type_buf[reg] & irq_data->mask;else mask = irq_data->mask;if (d->chip->clear_on_unmask) d->clear_status = true; - d->mask_buf[irq_data->reg_offset / map->reg_stride] &= ~mask; + d->mask_buf[reg] &= ~mask; }static void regmap_irq_disable (struct irq_data *data)
@@ -386,6 +387,7 @@ static inline int read_sub_irq_data(struct regmap_irq_chip_data *data, subreg = &chip->sub_reg_offsets[b];for (i =0 ; i < subreg->num_regs; i++) {unsigned int offset = subreg->offset[i]; +unsigned int index = offset / map->reg_stride;if (chip->not_fixed_stride) ret = regmap_read(map,
@@ -394,7 +396,7 @@ static inline int read_sub_irq_data(struct regmap_irq_chip_data *data,else ret =regmap_read (map, chip->status_base + offset, - &data->status_buf[offset]); + &data->status_buf[index]);if (ret)break ;
drivers/block/xen-blkfront.c +12 -7
@@ -2137,9 +2137,11 @@ static void blkfront_closing(struct blkfront_info *info)return ;/* No more blkif_request(). */ -blk_mq_stop_hw_queues (info->rq); -blk_mark_disk_dead (info->gd); -set_capacity (info->gd,0 ); +if (info->rq && info->gd) { +blk_mq_stop_hw_queues (info->rq); +blk_mark_disk_dead (info->gd); +set_capacity (info->gd,0 ); + }for_each_rinfo (info, rinfo, i) {/* No more gnttab callback work. */
@@ -2480,16 +2482,19 @@ static int blkfront_remove(struct xenbus_device *xbdev)dev_dbg (&xbdev->dev,"%s removed" , xbdev->nodename); -del_gendisk (info->gd); +if (info->gd) +del_gendisk (info->gd);mutex_lock (&blkfront_mutex);list_del (&info->info_list);mutex_unlock (&blkfront_mutex);blkif_free (info,0 ); -xlbd_release_minors (info->gd->first_minor, info->gd->minors); -blk_cleanup_disk (info->gd); -blk_mq_free_tag_set (&info->tag_set); +if (info->gd) { +xlbd_release_minors (info->gd->first_minor, info->gd->minors); +blk_cleanup_disk (info->gd); +blk_mq_free_tag_set (&info->tag_set); + }kfree (info);return 0 ;
drivers/char/random.c +3 -3
@@ -87,7 +87,7 @@ static RAW_NOTIFIER_HEAD(random_ready_chain);/* Control how we warn userspace. */ static struct ratelimit_state urandom_warning = -RATELIMIT_STATE_INIT ("warn_urandom_randomness" ,HZ ,3 ); +RATELIMIT_STATE_INIT_FLAGS ("urandom_warning" ,HZ ,3 ,RATELIMIT_MSG_ON_RELEASE );static int ratelimit_disable__read_mostly =IS_ENABLED (CONFIG_WARN_ALL_UNSEEDED_RANDOM );module_param_named (ratelimit_disable, ratelimit_disable, int,0644 );
@@ -451,7 +451,7 @@ static ssize_t get_random_bytes_user(struct iov_iter *iter)/* * Immediately overwrite the ChaCha key at index 4 with random -* bytes, in case userspace causes copy_to_user() below to sleep +* bytes, in case userspace causes copy_to_iter() below to sleep * forever, so that we still retain forward secrecy in that case. */ crng_make_state (chacha_state, (u8 *)&chacha_state[4 ],CHACHA_KEY_SIZE );
@@ -1038,7 +1038,7 @@ void add_interrupt_randomness(int irq)if (new_count &MIX_INFLIGHT )return ; -if (new_count <64 && !time_is_before_jiffies (fast_pool->last +HZ )) +if (new_count <1024 && !time_is_before_jiffies (fast_pool->last +HZ ))return ;if (unlikely (!fast_pool->mix.func))
drivers/dma-buf/udmabuf.c +4 -1
@@ -32,8 +32,11 @@ static vm_fault_t udmabuf_vm_fault(struct vm_fault *vmf) {struct vm_area_struct *vma = vmf->vma;struct udmabuf *ubuf = vma->vm_private_data; +pgoff_t pgoff = vmf->pgoff; - vmf->page = ubuf->pages[vmf->pgoff]; +if (pgoff >= ubuf->pagecount) +return VM_FAULT_SIGBUS ; + vmf->page = ubuf->pages[pgoff];get_page (vmf->page);return 0 ; }
drivers/gpio/gpio-vr41xx.c +0 -2
@@ -217,8 +217,6 @@ static int giu_get_irq(unsigned int irq)printk (KERN_ERR "spurious GIU interrupt: %04x(%04x),%04x(%04x)\n" , maskl, pendl, maskh, pendh); -atomic_inc (&irq_err_count); -return -EINVAL ; }
drivers/gpio/gpio-winbond.c +4 -3
@@ -385,12 +385,13 @@ static int winbond_gpio_get(struct gpio_chip *gc, unsigned int offset)unsigned long *base =gpiochip_get_data (gc);const struct winbond_gpio_info *info;bool val; +int ret;winbond_gpio_get_info (&offset, &info); - val =winbond_sio_enter (*base); -if (val) -return val; + ret =winbond_sio_enter (*base); +if (ret) +return ret;winbond_sio_select_logical (*base, info->dev);
drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c +1 -1
@@ -944,7 +944,7 @@ static void override_lane_settings(const struct link_training_settings *lt_settireturn ; -for (lane =1 ; lane <LANE_COUNT_DP_MAX ; lane++) { +for (lane =0 ; lane <LANE_COUNT_DP_MAX ; lane++) {if (lt_settings->voltage_swing) lane_settings[lane].VOLTAGE_SWING = *lt_settings->voltage_swing;if (lt_settings->pre_emphasis)
drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c +2 -22
@@ -1771,29 +1771,9 @@ void dce110_enable_accelerated_mode(struct dc *dc, struct dc_state *context)break ; } } - -/* -* TO-DO: So far the code logic below only addresses single eDP case. -* For dual eDP case, there are a few things that need to be -* implemented first: -* -* 1. Change the fastboot logic above, so eDP link[0 or 1]'s -* stream[0 or 1] will all be checked. -* -* 2. Change keep_edp_vdd_on to an array, and maintain keep_edp_vdd_on -* for each eDP. -* -* Once above 2 things are completed, we can then change the logic below -* correspondingly, so dual eDP case will be fully covered. -*/ - -// We are trying to enable eDP, don't power down VDD if eDP stream is existing -if ((edp_stream_num ==1 && edp_streams[0 ] !=NULL ) || can_apply_edp_fast_boot) { +// We are trying to enable eDP, don't power down VDD +if (can_apply_edp_fast_boot) keep_edp_vdd_on = true; -DC_LOG_EVENT_LINK_TRAINING ("Keep eDP Vdd on\n" ); - }else { -DC_LOG_EVENT_LINK_TRAINING ("No eDP stream enabled, turn eDP Vdd off\n" ); - } }// Check seamless boot support
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_dpp.c +3 -0
@@ -212,6 +212,9 @@ static void dpp2_cnv_setup (break ; } +/* Set default color space based on format if none is given. */ + color_space = input_color_space ? input_color_space : color_space; +if (is_2bit ==1 && alpha_2bit_lut !=NULL ) {REG_UPDATE (ALPHA_2BIT_LUT ,ALPHA_2BIT_LUT0 , alpha_2bit_lut->lut0);REG_UPDATE (ALPHA_2BIT_LUT ,ALPHA_2BIT_LUT1 , alpha_2bit_lut->lut1);
drivers/gpu/drm/amd/display/dc/dcn201/dcn201_dpp.c +3 -0
@@ -153,6 +153,9 @@ static void dpp201_cnv_setup(break ; } +/* Set default color space based on format if none is given. */ + color_space = input_color_space ? input_color_space : color_space; +if (is_2bit ==1 && alpha_2bit_lut !=NULL ) {REG_UPDATE (ALPHA_2BIT_LUT ,ALPHA_2BIT_LUT0 , alpha_2bit_lut->lut0);REG_UPDATE (ALPHA_2BIT_LUT ,ALPHA_2BIT_LUT1 , alpha_2bit_lut->lut1);
drivers/gpu/drm/amd/display/dc/dcn30/dcn30_dpp.c +3 -0
@@ -294,6 +294,9 @@ static void dpp3_cnv_setup (break ; } +/* Set default color space based on format if none is given. */ + color_space = input_color_space ? input_color_space : color_space; +if (is_2bit ==1 && alpha_2bit_lut !=NULL ) {REG_UPDATE (ALPHA_2BIT_LUT ,ALPHA_2BIT_LUT0 , alpha_2bit_lut->lut0);REG_UPDATE (ALPHA_2BIT_LUT ,ALPHA_2BIT_LUT1 , alpha_2bit_lut->lut1);
drivers/gpu/drm/i915/display/intel_dpll_mgr.c +2 -2
@@ -2437,7 +2437,7 @@ static void icl_wrpll_params_populate(struct skl_wrpll_params *params, }/* -* Display WA #22010492432: ehl, tgl, adl-p +* Display WA #22010492432: ehl, tgl, adl-s, adl-p * Program half of the nominal DCO divider fraction value. */ static bool
@@ -2445,7 +2445,7 @@ ehl_combo_pll_div_frac_wa_needed(struct drm_i915_private *i915) {return ((IS_PLATFORM (i915,INTEL_ELKHARTLAKE ) &&IS_JSL_EHL_DISPLAY_STEP (i915,STEP_B0 ,STEP_FOREVER )) || -IS_TIGERLAKE (i915) ||IS_ALDERLAKE_P (i915)) && +IS_TIGERLAKE (i915) ||IS_ALDERLAKE_S (i915) ||IS_ALDERLAKE_P (i915)) && i915->dpll.ref_clks.nssc ==38400 ; }
drivers/gpu/drm/msm/adreno/adreno_gpu.c +2 -1
@@ -1002,7 +1002,8 @@ void adreno_gpu_cleanup(struct adreno_gpu *adreno_gpu)for (i =0 ; i <ARRAY_SIZE (adreno_gpu->info->fw); i++)release_firmware (adreno_gpu->fw[i]); -pm_runtime_disable (&priv->gpu_pdev->dev); +if (pm_runtime_enabled (&priv->gpu_pdev->dev)) +pm_runtime_disable (&priv->gpu_pdev->dev);msm_gpu_cleanup (&adreno_gpu->base); }
drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c +2 -0
@@ -217,6 +217,7 @@ static int mdp4_modeset_init_intf(struct mdp4_kms *mdp4_kms, encoder =mdp4_lcdc_encoder_init (dev, panel_node);if (IS_ERR (encoder)) {DRM_DEV_ERROR (dev->dev,"failed to construct LCDC encoder\n" ); +of_node_put (panel_node);return PTR_ERR (encoder); }
@@ -226,6 +227,7 @@ static int mdp4_modeset_init_intf(struct mdp4_kms *mdp4_kms, connector =mdp4_lvds_connector_init (dev, panel_node, encoder);if (IS_ERR (connector)) {DRM_DEV_ERROR (dev->dev,"failed to initialize LVDS connector\n" ); +of_node_put (panel_node);return PTR_ERR (connector); }
drivers/gpu/drm/msm/dp/dp_ctrl.c +25 -8
@@ -1523,6 +1523,8 @@ static int dp_ctrl_link_maintenance(struct dp_ctrl_private *ctrl)return ret; } +static int dp_ctrl_on_stream_phy_test_report (struct dp_ctrl *dp_ctrl); +static int dp_ctrl_process_phy_test_request (struct dp_ctrl_private *ctrl) {int ret =0 ;
@@ -1545,7 +1547,7 @@ static int dp_ctrl_process_phy_test_request(struct dp_ctrl_private *ctrl) ret =dp_ctrl_on_link (&ctrl->dp_ctrl);if (!ret) - ret =dp_ctrl_on_stream (&ctrl->dp_ctrl); + ret =dp_ctrl_on_stream_phy_test_report (&ctrl->dp_ctrl);else DRM_ERROR ("failed to enable DP link controller\n" );
@@ -1800,7 +1802,27 @@ static int dp_ctrl_link_retrain(struct dp_ctrl_private *ctrl)return dp_ctrl_setup_main_link (ctrl, &training_step); } -int dp_ctrl_on_stream (struct dp_ctrl *dp_ctrl) +static int dp_ctrl_on_stream_phy_test_report (struct dp_ctrl *dp_ctrl) +{ +int ret; +struct dp_ctrl_private *ctrl; + + ctrl = container_of(dp_ctrl, struct dp_ctrl_private, dp_ctrl); + + ctrl->dp_ctrl.pixel_rate = ctrl->panel->dp_mode.drm_mode.clock; + + ret =dp_ctrl_enable_stream_clocks (ctrl); +if (ret) { +DRM_ERROR ("Failed to start pixel clocks. ret=%d\n" , ret); +return ret; + } + +dp_ctrl_send_phy_test_pattern (ctrl); + +return 0 ; +} + +int dp_ctrl_on_stream (struct dp_ctrl *dp_ctrl,bool force_link_train) {int ret =0 ;bool mainlink_ready = false;
@@ -1831,12 +1853,7 @@ int dp_ctrl_on_stream(struct dp_ctrl *dp_ctrl) goto end; } -if (ctrl->link->sink_request &DP_TEST_LINK_PHY_TEST_PATTERN ) { -dp_ctrl_send_phy_test_pattern (ctrl); -return 0 ; - } - -if (!dp_ctrl_channel_eq_ok (ctrl)) +if (force_link_train || !dp_ctrl_channel_eq_ok (ctrl))dp_ctrl_link_retrain (ctrl);/* stop txing train pattern to end link training */
drivers/gpu/drm/msm/dp/dp_ctrl.h +1 -1
@@ -20,7 +20,7 @@ struct dp_ctrl { };int dp_ctrl_on_link (struct dp_ctrl *dp_ctrl); -int dp_ctrl_on_stream (struct dp_ctrl *dp_ctrl); +int dp_ctrl_on_stream (struct dp_ctrl *dp_ctrl,bool force_link_train);int dp_ctrl_off_link_stream (struct dp_ctrl *dp_ctrl);int dp_ctrl_off (struct dp_ctrl *dp_ctrl);void dp_ctrl_push_idle (struct dp_ctrl *dp_ctrl);
drivers/gpu/drm/msm/dp/dp_display.c +8 -8
@@ -308,7 +308,8 @@ static void dp_display_unbind(struct device *dev, struct device *master,struct msm_drm_private *priv =dev_get_drvdata (master);/* disable all HPD interrupts */ -dp_catalog_hpd_config_intr (dp->catalog,DP_DP_HPD_INT_MASK , false); +if (dp->core_initialized) +dp_catalog_hpd_config_intr (dp->catalog,DP_DP_HPD_INT_MASK , false);kthread_stop (dp->ev_tsk);
@@ -902,7 +903,7 @@ static int dp_display_enable(struct dp_display_private *dp, u32 data)return 0 ; } - rc =dp_ctrl_on_stream (dp->ctrl); + rc =dp_ctrl_on_stream (dp->ctrl, data);if (!rc) dp_display->power_on = true;
@@ -1589,6 +1590,7 @@ int msm_dp_display_enable(struct msm_dp *dp, struct drm_encoder *encoder)int rc =0 ;struct dp_display_private *dp_display;u32 state; +bool force_link_train = false; dp_display = container_of(dp, struct dp_display_private, dp_display);if (!dp_display->dp_mode.drm_mode.clock) {
@@ -1617,10 +1619,12 @@ int msm_dp_display_enable(struct msm_dp *dp, struct drm_encoder *encoder) state = dp_display->hpd_state; -if (state ==ST_DISPLAY_OFF ) +if (state ==ST_DISPLAY_OFF ) {dp_display_host_phy_init (dp_display); + force_link_train = true; + } -dp_display_enable (dp_display,0 ); +dp_display_enable (dp_display, force_link_train); rc =dp_display_post_enable (dp);if (rc) {
@@ -1629,10 +1633,6 @@ int msm_dp_display_enable(struct msm_dp *dp, struct drm_encoder *encoder)dp_display_unprepare (dp); } -/* manual kick off plug event to train link */ -if (state ==ST_DISPLAY_OFF ) -dp_add_event (dp_display,EV_IRQ_HPD_INT ,0 ,0 ); -/* completed connection */ dp_display->hpd_state =ST_CONNECTED ;
drivers/gpu/drm/msm/msm_drv.c +1 -1
@@ -967,7 +967,7 @@ static const struct drm_driver msm_driver = { .prime_handle_to_fd = drm_gem_prime_handle_to_fd, .prime_fd_to_handle = drm_gem_prime_fd_to_handle, .gem_prime_import_sg_table = msm_gem_prime_import_sg_table, - .gem_prime_mmap = drm_gem_prime_mmap, + .gem_prime_mmap = msm_gem_prime_mmap,#ifdef CONFIG_DEBUG_FS .debugfs_init = msm_debugfs_init,#endif
drivers/gpu/drm/msm/msm_drv.h +1 -0
@@ -288,6 +288,7 @@ unsigned long msm_gem_shrinker_shrink(struct drm_device *dev, unsigned long nr_tvoid msm_gem_shrinker_init (struct drm_device *dev);void msm_gem_shrinker_cleanup (struct drm_device *dev); +int msm_gem_prime_mmap (struct drm_gem_object *obj,struct vm_area_struct *vma);struct sg_table *msm_gem_prime_get_sg_table (struct drm_gem_object *obj);int msm_gem_prime_vmap (struct drm_gem_object *obj,struct iosys_map *map);void msm_gem_prime_vunmap (struct drm_gem_object *obj,struct iosys_map *map);
drivers/gpu/drm/msm/msm_gem_prime.c +15 -0
@@ -11,6 +11,21 @@#include "msm_drv.h" #include "msm_gem.h" +int msm_gem_prime_mmap (struct drm_gem_object *obj,struct vm_area_struct *vma) +{ +int ret; + +/* Ensure the mmap offset is initialized. We lazily initialize it, +* so if it has not been first mmap'd directly as a GEM object, the +* mmap offset will not be already initialized. +*/ + ret =drm_gem_create_mmap_offset (obj); +if (ret) +return ret; + +return drm_gem_prime_mmap (obj, vma); +} +struct sg_table *msm_gem_prime_get_sg_table (struct drm_gem_object *obj) {struct msm_gem_object *msm_obj =to_msm_bo (obj);
drivers/gpu/drm/msm/msm_gpu.c +2 -1
@@ -664,7 +664,6 @@ static void retire_submit(struct msm_gpu *gpu, struct msm_ringbuffer *ring,msm_submit_retire (submit);pm_runtime_mark_last_busy (&gpu->pdev->dev); -pm_runtime_put_autosuspend (&gpu->pdev->dev);spin_lock_irqsave (&ring->submit_lock, flags);list_del (&submit->node);
@@ -678,6 +677,8 @@ static void retire_submit(struct msm_gpu *gpu, struct msm_ringbuffer *ring,msm_devfreq_idle (gpu);mutex_unlock (&gpu->active_lock); +pm_runtime_put_autosuspend (&gpu->pdev->dev); +msm_gem_submit_put (submit); }
drivers/gpu/drm/msm/msm_iommu.c +1 -1
@@ -58,7 +58,7 @@ static int msm_iommu_pagetable_map(struct msm_mmu *mmu, u64 iova,u64 addr = iova;unsigned int i; -for_each_sg (sgt->sgl, sg, sgt->nents, i) { +for_each_sgtable_sg (sgt, sg, i) {size_t size = sg->length;phys_addr_t phys =sg_phys (sg);
drivers/gpu/drm/sun4i/sun4i_drv.c +3 -1
@@ -73,7 +73,6 @@ static int sun4i_drv_bind(struct device *dev) goto free_drm; } -dev_set_drvdata (dev, drm); drm->dev_private = drv;INIT_LIST_HEAD (&drv->frontend_list);INIT_LIST_HEAD (&drv->engine_list);
@@ -114,6 +113,8 @@ static int sun4i_drv_bind(struct device *dev)drm_fbdev_generic_setup (drm,32 ); +dev_set_drvdata (dev, drm); +return 0 ; finish_poll:
@@ -130,6 +131,7 @@ static void sun4i_drv_unbind(struct device *dev) {struct drm_device *drm =dev_get_drvdata (dev); +dev_set_drvdata (dev,NULL );drm_dev_unregister (drm);drm_kms_helper_poll_fini (drm);drm_atomic_helper_shutdown (drm);
drivers/iio/accel/bma180.c +2 -1
@@ -1006,11 +1006,12 @@ static int bma180_probe(struct i2c_client *client, data->trig->ops = &bma180_trigger_ops;iio_trigger_set_drvdata (data->trig, indio_dev); - indio_dev->trig =iio_trigger_get (data->trig); ret =iio_trigger_register (data->trig);if (ret) goto err_trigger_free; + + indio_dev->trig =iio_trigger_get (data->trig); } ret = iio_triggered_buffer_setup(indio_dev, NULL,
drivers/iio/accel/kxcjk-1013.c +2 -2
@@ -1554,12 +1554,12 @@ static int kxcjk1013_probe(struct i2c_client *client, data->dready_trig->ops = &kxcjk1013_trigger_ops;iio_trigger_set_drvdata (data->dready_trig, indio_dev); - indio_dev->trig = data->dready_trig; -iio_trigger_get (indio_dev->trig); ret =iio_trigger_register (data->dready_trig);if (ret) goto err_poweroff; + indio_dev->trig =iio_trigger_get (data->dready_trig); + data->motion_trig->ops = &kxcjk1013_trigger_ops;iio_trigger_set_drvdata (data->motion_trig, indio_dev); ret =iio_trigger_register (data->motion_trig);
drivers/iio/accel/mma8452.c +14 -8
@@ -1510,10 +1510,14 @@ static int mma8452_reset(struct i2c_client *client)int i;int ret; - ret =i2c_smbus_write_byte_data (client,MMA8452_CTRL_REG2 , +/* +* Find on fxls8471, after config reset bit, it reset immediately, +* and will not give ACK, so here do not check the return value. +* The following code will read the reset register, and check whether +* this reset works. +*/ +i2c_smbus_write_byte_data (client,MMA8452_CTRL_REG2 ,MMA8452_CTRL_REG2_RST ); -if (ret <0 ) -return ret;for (i =0 ; i <10 ; i++) {usleep_range (100 ,200 );
@@ -1556,11 +1560,13 @@ static int mma8452_probe(struct i2c_client *client,mutex_init (&data->lock); data->chip_info =device_get_match_data (&client->dev); -if (!data->chip_info && id) { - data->chip_info = &mma_chip_info_table[id->driver_data]; - }else { -dev_err (&client->dev,"unknown device model\n" ); -return -ENODEV ; +if (!data->chip_info) { +if (id) { + data->chip_info = &mma_chip_info_table[id->driver_data]; + }else { +dev_err (&client->dev,"unknown device model\n" ); +return -ENODEV ; + } } ret =iio_read_mount_matrix (&client->dev, &data->orientation);
drivers/iio/accel/mxc4005.c +2 -2
@@ -456,8 +456,6 @@ static int mxc4005_probe(struct i2c_client *client, data->dready_trig->ops = &mxc4005_trigger_ops;iio_trigger_set_drvdata (data->dready_trig, indio_dev); - indio_dev->trig = data->dready_trig; -iio_trigger_get (indio_dev->trig); ret =devm_iio_trigger_register (&client->dev, data->dready_trig);if (ret) {
@@ -465,6 +463,8 @@ static int mxc4005_probe(struct i2c_client *client, "failed to register trigger\n");return ret; } + + indio_dev->trig =iio_trigger_get (data->dready_trig); }return devm_iio_device_register (&client->dev, indio_dev);
drivers/iio/adc/adi-axi-adc.c +3 -0
@@ -322,16 +322,19 @@ static struct adi_axi_adc_client *adi_axi_adc_attach_client(struct device *dev)if (!try_module_get (cl->dev->driver->owner)) {mutex_unlock (®istered_clients_lock); +of_node_put (cln);return ERR_PTR (-ENODEV ); }get_device (cl->dev); cl->info = info;mutex_unlock (®istered_clients_lock); +of_node_put (cln);return cl; }mutex_unlock (®istered_clients_lock); +of_node_put (cln);return ERR_PTR (-EPROBE_DEFER ); }
drivers/iio/adc/aspeed_adc.c +1 -0
@@ -186,6 +186,7 @@ static int aspeed_adc_set_trim_data(struct iio_dev *indio_dev)return -EOPNOTSUPP ; } scu =syscon_node_to_regmap (syscon); +of_node_put (syscon);if (IS_ERR (scu)) {dev_warn (data->dev,"Failed to get syscon regmap\n" );return -EOPNOTSUPP ;
drivers/iio/adc/axp288_adc.c +8 -0
@@ -196,6 +196,14 @@ static const struct dmi_system_id axp288_adc_ts_bias_override[] = { }, .driver_data = (void *)(uintptr_t)AXP288_ADC_TS_BIAS_80UA, }, + { + /* Nuvision Solo 10 Draw */ + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TMAX"), + DMI_MATCH(DMI_PRODUCT_NAME, "TM101W610L"), + }, + .driver_data = (void *)(uintptr_t)AXP288_ADC_TS_BIAS_80UA, + }, {} };
drivers/iio/adc/rzg2l_adc.c +6 -2
@@ -334,11 +334,15 @@ static int rzg2l_adc_parse_properties(struct platform_device *pdev, struct rzg2l i =0 ;device_for_each_child_node (&pdev->dev, fwnode) { ret =fwnode_property_read_u32 (fwnode,"reg" , &channel); -if (ret) +if (ret) { +fwnode_handle_put (fwnode);return ret; + } -if (channel >=RZG2L_ADC_MAX_CHANNELS ) +if (channel >=RZG2L_ADC_MAX_CHANNELS ) { +fwnode_handle_put (fwnode);return -EINVAL ; + } chan_array[i].type =IIO_VOLTAGE ; chan_array[i].indexed =1 ;
drivers/iio/adc/stm32-adc-core.c +7 -2
@@ -64,6 +64,7 @@ struct stm32_adc_priv;* @max_clk_rate_hz: maximum analog clock rate (Hz, from datasheet) * @has_syscfg: SYSCFG capability flags * @num_irqs: number of interrupt lines +* @num_adcs: maximum number of ADC instances in the common registers */ struct stm32_adc_priv_cfg {const struct stm32_adc_common_regs *regs;
@@ -71,6 +72,7 @@ struct stm32_adc_priv_cfg {u32 max_clk_rate_hz;unsigned int has_syscfg;unsigned int num_irqs; +unsigned int num_adcs; };/**
@@ -352,7 +354,7 @@ static void stm32_adc_irq_handler(struct irq_desc *desc)* before invoking the interrupt handler (e.g. call ISR only for * IRQ-enabled ADCs). */ -for (i =0 ; i < priv->cfg->num_irqs; i++) { +for (i =0 ; i < priv->cfg->num_adcs; i++) {if ((status & priv->cfg->regs->eoc_msk[i] &&stm32_adc_eoc_enabled (priv, i)) || (status & priv->cfg->regs->ovr_msk[i]))
@@ -792,6 +794,7 @@ static const struct stm32_adc_priv_cfg stm32f4_adc_priv_cfg = { .clk_sel = stm32f4_adc_clk_sel, .max_clk_rate_hz = 36000000, .num_irqs = 1, + .num_adcs = 3, };static const struct stm32_adc_priv_cfg stm32h7_adc_priv_cfg = {
@@ -800,14 +803,16 @@ static const struct stm32_adc_priv_cfg stm32h7_adc_priv_cfg = { .max_clk_rate_hz = 36000000, .has_syscfg = HAS_VBOOSTER, .num_irqs = 1, + .num_adcs = 2, };static const struct stm32_adc_priv_cfg stm32mp1_adc_priv_cfg = { .regs = &stm32h7_adc_common_regs, .clk_sel = stm32h7_adc_clk_sel, - .max_clk_rate_hz =40000000 , + .max_clk_rate_hz =36000000 , .has_syscfg =HAS_VBOOSTER |HAS_ANASWVDD , .num_irqs =2 , + .num_adcs =2 , };static const struct of_device_id stm32_adc_of_match[] = {
drivers/iio/adc/stm32-adc.c +17 -20
@@ -1365,7 +1365,7 @@ static int stm32_adc_read_raw(struct iio_dev *indio_dev,else ret = -EINVAL ; -if (mask ==IIO_CHAN_INFO_PROCESSED && adc->vrefint.vrefint_cal) +if (mask ==IIO_CHAN_INFO_PROCESSED ) *val =STM32_ADC_VREFINT_VOLTAGE * adc->vrefint.vrefint_cal / *val;iio_device_release_direct_mode (indio_dev);
@@ -1407,7 +1407,6 @@ static irqreturn_t stm32_adc_threaded_isr(int irq, void *data)struct stm32_adc *adc =iio_priv (indio_dev);const struct stm32_adc_regspec *regs = adc->cfg->regs;u32 status =stm32_adc_readl (adc, regs->isr_eoc.reg); -u32 mask =stm32_adc_readl (adc, regs->ier_eoc.reg);/* Check ovr status right now, as ovr mask should be already disabled */ if (status & regs->isr_ovr.mask) {
@@ -1422,11 +1421,6 @@ static irqreturn_t stm32_adc_threaded_isr(int irq, void *data)return IRQ_HANDLED ; } -if (!(status & mask)) -dev_err_ratelimited (&indio_dev->dev, -"Unexpected IRQ: IER=0x%08x, ISR=0x%08x\n" , - mask, status); -return IRQ_NONE ; }
@@ -1436,10 +1430,6 @@ static irqreturn_t stm32_adc_isr(int irq, void *data)struct stm32_adc *adc =iio_priv (indio_dev);const struct stm32_adc_regspec *regs = adc->cfg->regs;u32 status =stm32_adc_readl (adc, regs->isr_eoc.reg); -u32 mask =stm32_adc_readl (adc, regs->ier_eoc.reg); - -if (!(status & mask)) -return IRQ_WAKE_THREAD ;if (status & regs->isr_ovr.mask) {/*
@@ -1979,10 +1969,10 @@ static int stm32_adc_populate_int_ch(struct iio_dev *indio_dev, const char *ch_nfor (i =0 ; i <STM32_ADC_INT_CH_NB ; i++) {if (!strncmp (stm32_adc_ic[i].name, ch_name,STM32_ADC_CH_SZ )) { - adc->int_ch[i] = chan; - -if (stm32_adc_ic[i].idx !=STM32_ADC_INT_CH_VREFINT ) -continue ; +if (stm32_adc_ic[i].idx !=STM32_ADC_INT_CH_VREFINT ) { + adc->int_ch[i] = chan; +break ; + }/* Get calibration data for vrefint channel */ ret =nvmem_cell_read_u16 (&indio_dev->dev,"vrefint" , &vrefint);
@@ -1990,10 +1980,15 @@ static int stm32_adc_populate_int_ch(struct iio_dev *indio_dev, const char *ch_nreturn dev_err_probe (indio_dev->dev.parent, ret,"nvmem access error\n" ); } -if (ret == -ENOENT ) -dev_dbg (&indio_dev->dev,"vrefint calibration not found\n" ); -else - adc->vrefint.vrefint_cal = vrefint; +if (ret == -ENOENT ) { +dev_dbg (&indio_dev->dev,"vrefint calibration not found. Skip vrefint channel\n" ); +return ret; + }else if (!vrefint) { +dev_dbg (&indio_dev->dev,"Null vrefint calibration value. Skip vrefint channel\n" ); +return -ENOENT ; + } + adc->int_ch[i] = chan; + adc->vrefint.vrefint_cal = vrefint; } }
@@ -2030,7 +2025,9 @@ static int stm32_adc_generic_chan_init(struct iio_dev *indio_dev, }strncpy (adc->chan_name[val], name,STM32_ADC_CH_SZ ); ret =stm32_adc_populate_int_ch (indio_dev, name, val); -if (ret) +if (ret == -ENOENT ) +continue ; +else if (ret) goto err; }else if (ret != -EINVAL ) {dev_err (&indio_dev->dev,"Invalid label %d\n" , ret);
drivers/iio/adc/ti-ads131e08.c +7 -3
@@ -739,7 +739,7 @@ static int ads131e08_alloc_channels(struct iio_dev *indio_dev)device_for_each_child_node (dev, node) { ret =fwnode_property_read_u32 (node,"reg" , &channel);if (ret) -return ret; + goto err_child_out; ret =fwnode_property_read_u32 (node,"ti,gain" , &tmp);if (ret) {
@@ -747,7 +747,7 @@ static int ads131e08_alloc_channels(struct iio_dev *indio_dev) }else { ret =ads131e08_pga_gain_to_field_value (st, tmp);if (ret <0 ) -return ret; + goto err_child_out; channel_config[i].pga_gain = tmp; }
@@ -758,7 +758,7 @@ static int ads131e08_alloc_channels(struct iio_dev *indio_dev) }else { ret =ads131e08_validate_channel_mux (st, tmp);if (ret) -return ret; + goto err_child_out; channel_config[i].mux = tmp; }
@@ -784,6 +784,10 @@ static int ads131e08_alloc_channels(struct iio_dev *indio_dev) st->channel_config = channel_config;return 0 ; + +err_child_out: +fwnode_handle_put (node); +return ret; }static void ads131e08_regulator_disable (void *data)
drivers/iio/adc/xilinx-ams.c +1 -1
@@ -1409,7 +1409,7 @@ static int ams_probe(struct platform_device *pdev) irq =platform_get_irq (pdev,0 );if (irq <0 ) -return ret; +return irq; ret =devm_request_irq (&pdev->dev, irq, &ams_irq,0 ,"ams-irq" , indio_dev);
drivers/iio/afe/iio-rescale.c +1 -1
@@ -278,7 +278,7 @@ static int rescale_configure_channel(struct device *dev, chan->ext_info = rescale->ext_info; chan->type = rescale->cfg->type; -if (iio_channel_has_info (schan,IIO_CHAN_INFO_RAW ) || +if (iio_channel_has_info (schan,IIO_CHAN_INFO_RAW ) &&iio_channel_has_info (schan,IIO_CHAN_INFO_SCALE )) {dev_info (dev,"using raw+scale source channel\n" ); }else if (iio_channel_has_info (schan,IIO_CHAN_INFO_PROCESSED )) {
drivers/iio/chemical/ccs811.c +2 -2
@@ -499,11 +499,11 @@ static int ccs811_probe(struct i2c_client *client, data->drdy_trig->ops = &ccs811_trigger_ops;iio_trigger_set_drvdata (data->drdy_trig, indio_dev); - indio_dev->trig = data->drdy_trig; -iio_trigger_get (indio_dev->trig); ret =iio_trigger_register (data->drdy_trig);if (ret) goto err_poweroff; + + indio_dev->trig =iio_trigger_get (data->drdy_trig); } ret = iio_triggered_buffer_setup(indio_dev, NULL,
drivers/iio/gyro/mpu3050-core.c +1 -0
@@ -874,6 +874,7 @@ static int mpu3050_power_up(struct mpu3050 *mpu3050) ret =regmap_update_bits (mpu3050->map,MPU3050_PWR_MGM ,MPU3050_PWR_MGM_SLEEP ,0 );if (ret) { +regulator_bulk_disable (ARRAY_SIZE (mpu3050->regs), mpu3050->regs);dev_err (mpu3050->dev,"error setting power mode\n" );return ret; }
drivers/iio/humidity/hts221_buffer.c +4 -1
@@ -135,9 +135,12 @@ int hts221_allocate_trigger(struct iio_dev *iio_dev)iio_trigger_set_drvdata (hw->trig, iio_dev); hw->trig->ops = &hts221_trigger_ops; + + err =devm_iio_trigger_register (hw->dev, hw->trig); + iio_dev->trig =iio_trigger_get (hw->trig); -return devm_iio_trigger_register (hw->dev, hw->trig); +return err; }static int hts221_buffer_preenable (struct iio_dev *iio_dev)
drivers/iio/imu/inv_icm42600/inv_icm42600.h +1 -0
@@ -17,6 +17,7 @@#include "inv_icm42600_buffer.h" enum inv_icm42600_chip { +INV_CHIP_INVALID ,INV_CHIP_ICM42600 ,INV_CHIP_ICM42602 ,INV_CHIP_ICM42605 ,
drivers/iio/imu/inv_icm42600/inv_icm42600_core.c +1 -1
@@ -565,7 +565,7 @@ int inv_icm42600_core_probe(struct regmap *regmap, int chip, int irq,bool open_drain;int ret; -if (chip <0 || chip >=INV_CHIP_NB ) { +if (chip <=INV_CHIP_INVALID || chip >=INV_CHIP_NB ) {dev_err (dev,"invalid chip = %d\n" , chip);return -ENODEV ; }
drivers/iio/magnetometer/yamaha-yas530.c +1 -1
@@ -639,7 +639,7 @@ static int yas532_get_calibration_data(struct yas5xx *yas5xx)dev_dbg (yas5xx->dev,"calibration data: %*ph\n" ,14 , data);/* Sanity check, is this all zeroes? */ -if (memchr_inv (data,0x00 ,13 )) { +if (memchr_inv (data,0x00 ,13 ) ==NULL ) {if (!(data[13 ] &BIT (7 )))dev_warn (yas5xx->dev,"calibration is blank!\n" ); }
drivers/iio/proximity/sx9324.c +3 -0
@@ -885,6 +885,9 @@ sx9324_get_default_reg(struct device *dev, int idx,break ; ret =device_property_read_u32_array (dev, prop, pin_defs,ARRAY_SIZE (pin_defs)); +if (ret) +break ; +for (pin =0 ; pin <SX9324_NUM_PINS ; pin++) raw |= (pin_defs[pin] << (2 * pin)) &SX9324_REG_AFE_PH0_PIN_MASK (pin);
drivers/iio/test/Kconfig +1 -1
@@ -6,7 +6,7 @@ # Keep in alphabetical order config IIO_RESCALE_KUNIT_TEST bool "Test IIO rescale conversion functions" - depends on KUNIT=y && !IIO_RESCALE + depends on KUNIT=y && IIO_RESCALE=y default KUNIT_ALL_TESTS help If you want to run tests on the iio-rescale code say Y here.
drivers/iio/test/Makefile +1 -1
@@ -4,6 +4,6 @@ # # Keep in alphabetical order -obj-$(CONFIG_IIO_RESCALE_KUNIT_TEST) += iio-test-rescale.o ../afe/iio-rescale.o +obj-$(CONFIG_IIO_RESCALE_KUNIT_TEST) += iio-test-rescale.o obj-$(CONFIG_IIO_TEST_FORMAT) += iio-test-format.o CFLAGS_iio-test-format.o += $(DISABLE_STRUCTLEAK_PLUGIN)
drivers/iio/trigger/iio-trig-sysfs.c +1 -0
@@ -191,6 +191,7 @@ static int iio_sysfs_trigger_remove(int id) }iio_trigger_unregister (t->trig); +irq_work_sync (&t->work);iio_trigger_free (t->trig);list_del (&t->l);
drivers/iommu/ipmmu-vmsa.c +1 -1
@@ -987,7 +987,7 @@ static const struct of_device_id ipmmu_of_ids[] = { .compatible = "renesas,ipmmu-r8a779a0", .data = &ipmmu_features_rcar_gen4, }, { - .compatible = "renesas,rcar-gen4-ipmmu", + .compatible = "renesas,rcar-gen4-ipmmu-vmsa", .data = &ipmmu_features_rcar_gen4, }, {/* Terminator */
drivers/md/dm-era-target.c +7 -1
@@ -1400,7 +1400,7 @@ static void start_worker(struct era *era)static void stop_worker (struct era *era) {atomic_set (&era->suspended,1 ); -flush_workqueue (era->wq); +drain_workqueue (era->wq); }/*----------------------------------------------------------------
@@ -1570,6 +1570,12 @@ static void era_postsuspend(struct dm_target *ti) }stop_worker (era); + + r =metadata_commit (era->md); +if (r) { +DMERR ("%s: metadata_commit failed" , __func__); +/* FIXME: fail mode */ + } }static int era_preresume (struct dm_target *ti)
drivers/md/dm-log.c +1 -1
@@ -615,7 +615,7 @@ static int disk_resume(struct dm_dirty_log *log)log_clear_bit (lc, lc->clean_bits, i);/* clear any old bits -- device has shrunk */ -for (i = lc->region_count; i % (sizeof (*lc->clean_bits) <<BYTE_SHIFT ); i++) +for (i = lc->region_count; i %BITS_PER_LONG ; i++)log_clear_bit (lc, lc->clean_bits, i);/* copy clean across to sync */
drivers/md/dm.c +3 -1
@@ -899,9 +899,11 @@ static void dm_io_complete(struct dm_io *io)if (io_error ==BLK_STS_AGAIN ) {/* io_uring doesn't handle BLK_STS_AGAIN (yet) */ queue_io (md, bio); +return ; } } -return ; +if (io_error ==BLK_STS_DM_REQUEUE ) +return ; }if (bio_is_flush_with_data (bio)) {
drivers/memory/mtk-smi.c +4 -1
@@ -404,13 +404,16 @@ static int mtk_smi_device_link_common(struct device *dev, struct device **com_deof_node_put (smi_com_node);if (smi_com_pdev) {/* smi common is the supplier, Make sure it is ready before */ -if (!platform_get_drvdata (smi_com_pdev)) +if (!platform_get_drvdata (smi_com_pdev)) { +put_device (&smi_com_pdev->dev);return -EPROBE_DEFER ; + } smi_com_dev = &smi_com_pdev->dev; link =device_link_add (dev, smi_com_dev,DL_FLAG_PM_RUNTIME |DL_FLAG_STATELESS );if (!link) {dev_err (dev,"Unable to link smi-common dev\n" ); +put_device (&smi_com_pdev->dev);return -ENODEV ; } *com_dev = smi_com_dev;
drivers/memory/samsung/exynos5422-dmc.c +18 -11
@@ -1187,33 +1187,39 @@ static int of_get_dram_timings(struct exynos5_dmc *dmc) dmc->timing_row =devm_kmalloc_array (dmc->dev,TIMING_COUNT ,sizeof (u32),GFP_KERNEL ); -if (!dmc->timing_row) -return -ENOMEM ; +if (!dmc->timing_row) { + ret = -ENOMEM ; + goto put_node; + } dmc->timing_data =devm_kmalloc_array (dmc->dev,TIMING_COUNT ,sizeof (u32),GFP_KERNEL ); -if (!dmc->timing_data) -return -ENOMEM ; +if (!dmc->timing_data) { + ret = -ENOMEM ; + goto put_node; + } dmc->timing_power =devm_kmalloc_array (dmc->dev,TIMING_COUNT ,sizeof (u32),GFP_KERNEL ); -if (!dmc->timing_power) -return -ENOMEM ; +if (!dmc->timing_power) { + ret = -ENOMEM ; + goto put_node; + } dmc->timings =of_lpddr3_get_ddr_timings (np_ddr, dmc->dev,DDR_TYPE_LPDDR3 , &dmc->timings_arr_size);if (!dmc->timings) { -of_node_put (np_ddr);dev_warn (dmc->dev,"could not get timings from DT\n" ); -return -EINVAL ; + ret = -EINVAL ; + goto put_node; } dmc->min_tck =of_lpddr3_get_min_tck (np_ddr, dmc->dev);if (!dmc->min_tck) { -of_node_put (np_ddr);dev_warn (dmc->dev,"could not get tck from DT\n" ); -return -EINVAL ; + ret = -EINVAL ; + goto put_node; }/* Sorted array of OPPs with frequency ascending */
@@ -1227,13 +1233,14 @@ static int of_get_dram_timings(struct exynos5_dmc *dmc) clk_period_ps); } -of_node_put (np_ddr);/* Take the highest frequency's timings as 'bypass' */ dmc->bypass_timing_row = dmc->timing_row[idx -1 ]; dmc->bypass_timing_data = dmc->timing_data[idx -1 ]; dmc->bypass_timing_power = dmc->timing_power[idx -1 ]; +put_node: +of_node_put (np_ddr);return ret; }
drivers/mmc/host/mtk-sd.c +12 -8
@@ -1356,7 +1356,7 @@ static void msdc_data_xfer_next(struct msdc_host *host, struct mmc_request *mrq)msdc_request_done (host, mrq); } -static bool msdc_data_xfer_done (struct msdc_host *host,u32 events, +static void msdc_data_xfer_done (struct msdc_host *host,u32 events,struct mmc_request *mrq,struct mmc_data *data) {struct mmc_command *stop;
@@ -1376,7 +1376,7 @@ static bool msdc_data_xfer_done(struct msdc_host *host, u32 events,spin_unlock_irqrestore (&host->lock, flags);if (done) -return true; +return ; stop = data->stop;if (check_data || (stop && stop->error)) {
@@ -1385,12 +1385,15 @@ static bool msdc_data_xfer_done(struct msdc_host *host, u32 events,sdr_set_field (host->base +MSDC_DMA_CTRL ,MSDC_DMA_CTRL_STOP ,1 ); + ret =readl_poll_timeout_atomic (host->base +MSDC_DMA_CTRL , val, + !(val &MSDC_DMA_CTRL_STOP ),1 ,20000 ); +if (ret) +dev_dbg (host->dev,"DMA stop timed out\n" ); + ret =readl_poll_timeout_atomic (host->base +MSDC_DMA_CFG , val, !(val &MSDC_DMA_CFG_STS ),1 ,20000 ); -if (ret) { -dev_dbg (host->dev,"DMA stop timed out\n" ); -return false; - } +if (ret) +dev_dbg (host->dev,"DMA inactive timed out\n" );sdr_clr_bits (host->base +MSDC_INTEN , data_ints_mask);dev_dbg (host->dev,"DMA stop\n" );
@@ -1415,9 +1418,7 @@ static bool msdc_data_xfer_done(struct msdc_host *host, u32 events, }msdc_data_xfer_next (host, mrq); - done = true; } -return done; }static void msdc_set_buswidth (struct msdc_host *host,u32 width)
@@ -2416,6 +2417,9 @@ static void msdc_cqe_disable(struct mmc_host *mmc, bool recovery)if (recovery) {sdr_set_field (host->base +MSDC_DMA_CTRL ,MSDC_DMA_CTRL_STOP ,1 ); +if (WARN_ON (readl_poll_timeout (host->base +MSDC_DMA_CTRL , val, + !(val &MSDC_DMA_CTRL_STOP ),1 ,3000 ))) +return ;if (WARN_ON (readl_poll_timeout (host->base +MSDC_DMA_CFG , val, !(val &MSDC_DMA_CFG_STS ),1 ,3000 )))return ;
drivers/mmc/host/sdhci-pci-o2micro.c +2 -0
@@ -152,6 +152,8 @@ static int sdhci_o2_get_cd(struct mmc_host *mmc)if (!(sdhci_readw (host,O2_PLL_DLL_WDT_CONTROL1 ) &O2_PLL_LOCK_STATUS ))sdhci_o2_enable_internal_clock (host); +else +sdhci_o2_wait_card_detect_stable (host);return !!(sdhci_readl (host,SDHCI_PRESENT_STATE ) &SDHCI_CARD_PRESENT ); }
drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c +1 -1
@@ -695,7 +695,7 @@ static int gpmi_nfc_compute_timings(struct gpmi_nand_data *this, hw->timing0 =BF_GPMI_TIMING0_ADDRESS_SETUP (addr_setup_cycles) |BF_GPMI_TIMING0_DATA_HOLD (data_hold_cycles) |BF_GPMI_TIMING0_DATA_SETUP (data_setup_cycles); - hw->timing1 =BF_GPMI_TIMING1_BUSY_TIMEOUT (busy_timeout_cycles *4096 ); + hw->timing1 =BF_GPMI_TIMING1_BUSY_TIMEOUT (DIV_ROUND_UP (busy_timeout_cycles,4096 ));/* * Derive NFC ideal delay from {3}:
drivers/net/bonding/bond_main.c +3 -1
@@ -3684,9 +3684,11 @@ static void bond_activebackup_arp_mon(struct bonding *bond)if (!rtnl_trylock ())return ; -if (should_notify_peers) +if (should_notify_peers) { + bond->send_peer_notif--;call_netdevice_notifiers (NETDEV_NOTIFY_PEERS , bond->dev); + }if (should_notify_rtnl) {bond_slave_state_notify (bond);bond_slave_link_notify (bond);
drivers/net/dsa/qca8k.h +1 -1
@@ -15,7 +15,7 @@#define QCA8K_ETHERNET_MDIO_PRIORITY 7#define QCA8K_ETHERNET_PHY_PRIORITY 6 -#define QCA8K_ETHERNET_TIMEOUT 100 +#define QCA8K_ETHERNET_TIMEOUT 5#define QCA8K_NUM_PORTS 7#define QCA8K_NUM_CPU_PORTS 2
drivers/net/ethernet/intel/ice/ice_ethtool.c +48 -1
67 lines not on this page · raw message
drivers/net/ethernet/intel/ice/ice_lib.c +37 -5
93 lines not on this page · raw message
drivers/net/ethernet/intel/ice/ice_tc_lib.c +4 -1
@@ -524,6 +524,7 @@ ice_eswitch_add_tc_fltr(struct ice_vsi *vsi, struct ice_tc_flower_fltr *fltr)*/ fltr->rid = rule_added.rid; fltr->rule_id = rule_added.rule_id; + fltr->dest_id = rule_added.vsi_handle; exit:kfree (list);
@@ -994,7 +995,9 @@ ice_parse_cls_flower(struct net_device *filter_dev, struct ice_vsi *vsi, n_proto_key =ntohs (match.key->n_proto); n_proto_mask =ntohs (match.mask->n_proto); -if (n_proto_key ==ETH_P_ALL || n_proto_key ==0 ) { +if (n_proto_key ==ETH_P_ALL || n_proto_key ==0 || + fltr->tunnel_type ==TNL_GTPU || + fltr->tunnel_type ==TNL_GTPC ) { n_proto_key =0 ; n_proto_mask =0 ; }else {
drivers/net/ethernet/intel/igb/igb_main.c +10 -9
@@ -4819,8 +4819,11 @@ static void igb_clean_tx_ring(struct igb_ring *tx_ring)while (i != tx_ring->next_to_use) {union e1000_adv_tx_desc *eop_desc, *tx_desc; -/* Free all the Tx ring sk_buffs */ -dev_kfree_skb_any (tx_buffer->skb); +/* Free all the Tx ring sk_buffs or xdp frames */ +if (tx_buffer->type ==IGB_TYPE_SKB ) +dev_kfree_skb_any (tx_buffer->skb); +else +xdp_return_frame (tx_buffer->xdpf);/* unmap skb header data */ dma_unmap_single(tx_ring->dev,
@@ -9898,11 +9901,10 @@ static void igb_init_dmac(struct igb_adapter *adapter, u32 pba)struct e1000_hw *hw = &adapter->hw;u32 dmac_thr;u16 hwm; +u32 reg;if (hw->mac.type > e1000_82580) {if (adapter->flags &IGB_FLAG_DMAC ) { -u32 reg; -/* force threshold to 0. */ wr32 (E1000_DMCTXTH ,0 );
@@ -9935,7 +9937,6 @@ static void igb_init_dmac(struct igb_adapter *adapter, u32 pba)/* Disable BMC-to-OS Watchdog Enable */ if (hw->mac.type != e1000_i354) reg &= ~E1000_DMACR_DC_BMC2OSW_EN ; -wr32 (E1000_DMACR , reg);/* no lower threshold to disable
@@ -9952,12 +9953,12 @@ static void igb_init_dmac(struct igb_adapter *adapter, u32 pba)*/ wr32 (E1000_DMCTXTH , (IGB_MIN_TXPBSIZE - (IGB_TX_BUF_4096 + adapter->max_frame_size)) >>6 ); + } -/* make low power state decision controlled -* by DMA coal -*/ +if (hw->mac.type >= e1000_i210 || + (adapter->flags &IGB_FLAG_DMAC )) { reg =rd32 (E1000_PCIEMISC ); - reg &= ~E1000_PCIEMISC_LX_DECISION ; + reg |=E1000_PCIEMISC_LX_DECISION ;wr32 (E1000_PCIEMISC , reg); }/* endif adapter->dmac is not disabled */ }else if (hw->mac.type == e1000_82580) {
drivers/net/phy/aquantia_main.c +14 -1
@@ -34,6 +34,8 @@#define MDIO_AN_VEND_PROV 0xc400#define MDIO_AN_VEND_PROV_1000BASET_FULL BIT(15)#define MDIO_AN_VEND_PROV_1000BASET_HALF BIT(14) +#define MDIO_AN_VEND_PROV_5000BASET_FULL BIT(11) +#define MDIO_AN_VEND_PROV_2500BASET_FULL BIT(10)#define MDIO_AN_VEND_PROV_DOWNSHIFT_EN BIT(4)#define MDIO_AN_VEND_PROV_DOWNSHIFT_MASK GENMASK(3, 0)#define MDIO_AN_VEND_PROV_DOWNSHIFT_DFLT 4
@@ -231,9 +233,20 @@ static int aqr_config_aneg(struct phy_device *phydev) phydev->advertising)) reg |=MDIO_AN_VEND_PROV_1000BASET_HALF ; +/* Handle the case when the 2.5G and 5G speeds are not advertised */ +if (linkmode_test_bit (ETHTOOL_LINK_MODE_2500baseT_Full_BIT, + phydev->advertising)) + reg |=MDIO_AN_VEND_PROV_2500BASET_FULL ; + +if (linkmode_test_bit (ETHTOOL_LINK_MODE_5000baseT_Full_BIT, + phydev->advertising)) + reg |=MDIO_AN_VEND_PROV_5000BASET_FULL ; + ret =phy_modify_mmd_changed (phydev,MDIO_MMD_AN ,MDIO_AN_VEND_PROV ,MDIO_AN_VEND_PROV_1000BASET_HALF | -MDIO_AN_VEND_PROV_1000BASET_FULL , reg); +MDIO_AN_VEND_PROV_1000BASET_FULL | +MDIO_AN_VEND_PROV_2500BASET_FULL | +MDIO_AN_VEND_PROV_5000BASET_FULL , reg);if (ret <0 )return ret;if (ret >0 )
drivers/net/phy/at803x.c +6 -0
@@ -2072,6 +2072,8 @@ static struct phy_driver at803x_driver[] = {/* ATHEROS AR9331 */ PHY_ID_MATCH_EXACT (ATH9331_PHY_ID ), .name = "Qualcomm Atheros AR9331 built-in PHY", + .probe = at803x_probe, + .remove = at803x_remove, .suspend = at803x_suspend, .resume = at803x_resume, .flags = PHY_POLL_CABLE_TEST,
@@ -2087,6 +2089,8 @@ static struct phy_driver at803x_driver[] = {/* Qualcomm Atheros QCA9561 */ PHY_ID_MATCH_EXACT (QCA9561_PHY_ID ), .name = "Qualcomm Atheros QCA9561 built-in PHY", + .probe = at803x_probe, + .remove = at803x_remove, .suspend = at803x_suspend, .resume = at803x_resume, .flags = PHY_POLL_CABLE_TEST,
@@ -2151,6 +2155,8 @@ static struct phy_driver at803x_driver[] = {PHY_ID_MATCH_EXACT (QCA8081_PHY_ID ), .name = "Qualcomm QCA8081", .flags = PHY_POLL_CABLE_TEST, + .probe = at803x_probe, + .remove = at803x_remove, .config_intr = at803x_config_intr, .handle_interrupt = at803x_handle_interrupt, .get_tunable = at803x_get_tunable,
drivers/net/veth.c +4 -0
@@ -312,6 +312,7 @@ static bool veth_skb_is_eligible_for_gro(const struct net_device *dev,static netdev_tx_t veth_xmit (struct sk_buff *skb,struct net_device *dev) {struct veth_priv *rcv_priv, *priv =netdev_priv (dev); +struct netdev_queue *queue =NULL ;struct veth_rq *rq =NULL ;struct net_device *rcv;int length = skb->len;
@@ -329,6 +330,7 @@ static netdev_tx_t veth_xmit(struct sk_buff *skb, struct net_device *dev) rxq =skb_get_queue_mapping (skb);if (rxq < rcv->real_num_rx_queues) { rq = &rcv_priv->rq[rxq]; + queue =netdev_get_tx_queue (dev, rxq);/* The napi pointer is available when an XDP program is * attached or when GRO is enabled
@@ -340,6 +342,8 @@ static netdev_tx_t veth_xmit(struct sk_buff *skb, struct net_device *dev)skb_tx_timestamp (skb);if (likely (veth_forward_skb (rcv, skb, rq, use_napi) ==NET_RX_SUCCESS )) { +if (queue) +txq_trans_cond_update (queue);if (!use_napi)dev_lstats_add (dev, length); }else {
drivers/net/virtio_net.c +6 -19
@@ -2768,7 +2768,6 @@ static const struct ethtool_ops virtnet_ethtool_ops = {static void virtnet_freeze_down (struct virtio_device *vdev) {struct virtnet_info *vi = vdev->priv; -int i;/* Make sure no work handler is accessing the device */ flush_work (&vi->config_work);
@@ -2776,14 +2775,8 @@ static void virtnet_freeze_down(struct virtio_device *vdev)netif_tx_lock_bh (vi->dev);netif_device_detach (vi->dev);netif_tx_unlock_bh (vi->dev); -cancel_delayed_work_sync (&vi->refill); - -if (netif_running (vi->dev)) { -for (i =0 ; i < vi->max_queue_pairs; i++) { -napi_disable (&vi->rq[i].napi); -virtnet_napi_tx_disable (&vi->sq[i].napi); - } - } +if (netif_running (vi->dev)) +virtnet_close (vi->dev); }static int init_vqs (struct virtnet_info *vi);
@@ -2791,7 +2784,7 @@ static int init_vqs(struct virtnet_info *vi);static int virtnet_restore_up (struct virtio_device *vdev) {struct virtnet_info *vi = vdev->priv; -int err, i; +int err; err =init_vqs (vi);if (err)
@@ -2800,15 +2793,9 @@ static int virtnet_restore_up(struct virtio_device *vdev)virtio_device_ready (vdev);if (netif_running (vi->dev)) { -for (i =0 ; i < vi->curr_queue_pairs; i++) -if (!try_fill_recv (vi, &vi->rq[i],GFP_KERNEL )) -schedule_delayed_work (&vi->refill,0 ); - -for (i =0 ; i < vi->max_queue_pairs; i++) { -virtnet_napi_enable (vi->rq[i].vq, &vi->rq[i].napi); -virtnet_napi_tx_enable (vi, vi->sq[i].vq, - &vi->sq[i].napi); - } + err =virtnet_open (vi->dev); +if (err) +return err; }netif_tx_lock_bh (vi->dev);
drivers/nvme/host/core.c +14 -0
@@ -2487,6 +2487,20 @@ static const struct nvme_core_quirk_entry core_quirks[] = { .vid = 0x1e0f, .mn = "KCD6XVUL6T40", .quirks = NVME_QUIRK_NO_APST, + }, + { +/* +* The external Samsung X5 SSD fails initialization without a +* delay before checking if it is ready and has a whole set of +* other problems. To make this even more interesting, it +* shares the PCI ID with internal Samsung 970 Evo Plus that +* does not need or want these quirks. +*/ + .vid = 0x144d, + .mn = "Samsung Portable SSD X5", + .quirks = NVME_QUIRK_DELAY_BEFORE_CHK_RDY | + NVME_QUIRK_NO_DEEPEST_PS | + NVME_QUIRK_IGNORE_DEV_SUBNQN, } };
drivers/nvme/host/pci.c +0 -4
@@ -3475,10 +3475,6 @@ static const struct pci_device_id nvme_id_table[] = { NVME_QUIRK_128_BYTES_SQES | NVME_QUIRK_SHARED_TAGS | NVME_QUIRK_SKIP_CID_GEN }, - { PCI_DEVICE(0x144d, 0xa808), /* Samsung X5 */ - .driver_data =NVME_QUIRK_DELAY_BEFORE_CHK_RDY | -NVME_QUIRK_NO_DEEPEST_PS | - NVME_QUIRK_IGNORE_DEV_SUBNQN, }, { PCI_DEVICE_CLASS(PCI_CLASS_STORAGE_EXPRESS, 0xffffff) }, { 0, } };
drivers/scsi/ibmvscsi/ibmvfc.c +64 -18
171 lines not on this page · raw message
drivers/scsi/ibmvscsi/ibmvfc.h +1 -1
@@ -789,6 +789,7 @@ struct ibmvfc_queue {spinlock_t _lock;spinlock_t *q_lock; +struct ibmvfc_host *vhost;struct ibmvfc_event_pool evt_pool;struct list_head sent;struct list_head free;
@@ -797,7 +798,6 @@ struct ibmvfc_queue {union ibmvfc_iu cancel_rsp;/* Sub-CRQ fields */ -struct ibmvfc_host *vhost;unsigned long cookie;unsigned long vios_cookie;unsigned long hw_irq;
drivers/scsi/scsi_debug.c +20 -2
@@ -2788,6 +2788,24 @@ static void zbc_open_zone(struct sdebug_dev_info *devip, } } +static inline void zbc_set_zone_full (struct sdebug_dev_info *devip, +struct sdeb_zone_state *zsp) +{ +switch (zsp->z_cond) { +case ZC2_IMPLICIT_OPEN : + devip->nr_imp_open--; +break ; +case ZC3_EXPLICIT_OPEN : + devip->nr_exp_open--; +break ; +default : +WARN_ONCE (true,"Invalid zone %llu condition %x\n" , + zsp->z_start, zsp->z_cond); +break ; + } + zsp->z_cond =ZC5_FULL ; +} +static void zbc_inc_wp (struct sdebug_dev_info *devip,unsigned long long lba,unsigned int num) {
@@ -2800,7 +2818,7 @@ static void zbc_inc_wp(struct sdebug_dev_info *devip,if (zsp->z_type ==ZBC_ZONE_TYPE_SWR ) { zsp->z_wp += num;if (zsp->z_wp >= zend) - zsp->z_cond =ZC5_FULL ; +zbc_set_zone_full (devip, zsp);return ; }
@@ -2819,7 +2837,7 @@ static void zbc_inc_wp(struct sdebug_dev_info *devip, n = num; }if (zsp->z_wp >= zend) - zsp->z_cond =ZC5_FULL ; +zbc_set_zone_full (devip, zsp); num -= n; lba += n;
drivers/scsi/scsi_transport_iscsi.c +6 -1
@@ -212,7 +212,12 @@ iscsi_create_endpoint(int dd_size)return NULL ;mutex_lock (&iscsi_ep_idr_mutex); - id =idr_alloc (&iscsi_ep_idr, ep,0 ,-1 ,GFP_NOIO ); + +/* +* First endpoint id should be 1 to comply with user space +* applications (iscsid). +*/ + id =idr_alloc (&iscsi_ep_idr, ep,1 ,-1 ,GFP_NOIO );if (id <0 ) {mutex_unlock (&iscsi_ep_idr_mutex); printk(KERN_ERR "Could not allocate endpoint ID. Error %d.\n",
drivers/scsi/storvsc_drv.c +22 -5
@@ -1916,7 +1916,7 @@ static struct scsi_host_template scsi_driver = { .cmd_per_lun = 2048, .this_id = -1,/* Ensure there are no gaps in presented sgls */ - .virt_boundary_mask = PAGE_SIZE-1, + .virt_boundary_mask = HV_HYP_PAGE_SIZE - 1, .no_write_same = 1, .track_queue_depth = 1, .change_queue_depth = storvsc_change_queue_depth,
@@ -1970,6 +1970,7 @@ static int storvsc_probe(struct hv_device *device,int max_targets;int max_channels;int max_sub_channels =0 ; +u32 max_xfer_bytes;/* * Based on the windows host we are running on,
@@ -2059,12 +2060,28 @@ static int storvsc_probe(struct hv_device *device, }/* max cmd length */ host->max_cmd_len =STORVSC_MAX_CMD_LEN ; -/* -* set the table size based on the info we got -* from the host. +* Any reasonable Hyper-V configuration should provide +* max_transfer_bytes value aligning to HV_HYP_PAGE_SIZE, +* protecting it from any weird value. +*/ + max_xfer_bytes =round_down (stor_device->max_transfer_bytes,HV_HYP_PAGE_SIZE ); +/* max_hw_sectors_kb */ + host->max_sectors = max_xfer_bytes >>9 ;
Lines of this file are not shown. View the raw message.
drivers/usb/gadget/function/uvc_video.c +3 -0
Lines of this file are not shown. View the raw message.
drivers/usb/gadget/legacy/raw_gadget.c +47 -16
63 lines not on this page · raw message
drivers/xen/gntdev.c +106 -51
157 lines not on this page · raw message
fs/btrfs/file.c +52 -15
67 lines not on this page · raw message
fs/btrfs/super.c +40 -7
47 lines not on this page · raw message
fs/proc/vmcore.c +34 -20
54 lines not on this page · raw message
tools/perf/tests/shell/test_arm_callgraph_fp.sh +1 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/dma/dma_map_benchmark.c +1 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/fcnal-test.sh +56 -5
61 lines not on this page · raw message
tools/testing/selftests/netfilter/nft_concat_range.sh +1 -1
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.