Linux 5.17.4
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.17.4 kernel.
All users of the 5.17 kernel series must upgrade.
The updated 5.17.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.17.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/devicetree/bindings/memory-controllers/synopsys,ddrc-ecc.yaml | 6 Documentation/devicetree/bindings/net/snps,dwmac.yaml | 6 Makefile | 2 arch/arm/mach-davinci/board-da850-evm.c | 4 arch/arm/mach-ep93xx/clock.c | 4 arch/arm64/include/asm/kvm_emulate.h | 27 + arch/arm64/include/asm/kvm_host.h | 25 + arch/arm64/kernel/alternative.c | 6 arch/arm64/kernel/cpuidle.c | 6 arch/arm64/kvm/arm.c | 7 arch/arm64/kvm/mmio.c | 3 arch/arm64/kvm/pmu-emul.c | 2 arch/arm64/kvm/reset.c | 65 ++- arch/powerpc/include/asm/static_call.h | 1 arch/powerpc/kvm/book3s_hv.c | 41 +- arch/riscv/kvm/vcpu.c | 2 arch/riscv/kvm/vcpu_fp.c | 1 arch/x86/include/asm/kvm_host.h | 5 arch/x86/include/asm/msr-index.h | 4 arch/x86/include/asm/static_call.h | 2 arch/x86/kernel/cpu/common.c | 2 arch/x86/kernel/cpu/cpu.h | 5 arch/x86/kernel/cpu/intel.c | 7 arch/x86/kernel/cpu/tsx.c | 104 +++++- arch/x86/kvm/mmu/mmu.c | 20 - arch/x86/kvm/x86.c | 20 + arch/x86/net/bpf_jit_comp.c | 1 block/bio.c | 2 drivers/acpi/processor_idle.c | 15 drivers/ata/libata-core.c | 3 drivers/base/dd.c | 1 drivers/block/drbd/drbd_main.c | 1 drivers/block/null_blk/main.c | 2 drivers/firmware/arm_scmi/clock.c | 3 drivers/firmware/arm_scmi/driver.c | 3 drivers/gpio/gpio-sim.c | 4 drivers/gpio/gpiolib-acpi.c | 4 drivers/gpu/drm/amd/amdgpu/ObjectID.h | 1 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 4 drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 20 - drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 2 drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c | 2 drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c | 5 drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c | 2 drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 4 drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c | 3 drivers/gpu/drm/amd/amdkfd/kfd_device.c | 11 drivers/gpu/drm/amd/amdkfd/kfd_events.c | 2 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 3 drivers/gpu/drm/amd/display/dc/core/dc_resource.c | 4 drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubbub.c | 1 drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c | 29 + drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c | 14 drivers/gpu/drm/amd/display/dc/dcn30/dcn30_hubbub.c | 1 drivers/gpu/drm/amd/display/dc/dcn30/dcn30_hwseq.c | 5 drivers/gpu/drm/amd/display/dc/dcn301/dcn301_hubbub.c | 1 drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hubbub.c | 62 +++ drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hwseq.c | 5 drivers/gpu/drm/amd/display/dc/dcn31/dcn31_resource.c | 2 drivers/gpu/drm/amd/display/dc/dsc/dc_dsc.c | 4 drivers/gpu/drm/amd/display/dc/inc/hw/dchubbub.h | 2 drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c | 5 drivers/gpu/drm/i915/gem/i915_gem_mman.c | 2 drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 2 drivers/gpu/drm/msm/dp/dp_display.c | 6 drivers/gpu/drm/msm/dp/dp_panel.c | 20 - drivers/gpu/drm/msm/dp/dp_panel.h | 1 drivers/gpu/drm/msm/dsi/dsi_manager.c | 2 drivers/gpu/drm/msm/msm_gem.c | 1 drivers/gpu/ipu-v3/ipu-di.c | 5 drivers/hv/hv_balloon.c | 36 ++ drivers/hv/hv_common.c | 11 drivers/hv/ring_buffer.c | 11 drivers/hv/vmbus_drv.c | 49 ++ drivers/i2c/busses/i2c-pasemi-core.c | 6 drivers/i2c/i2c-dev.c | 15 drivers/md/dm-integrity.c | 7 drivers/md/dm-ps-historical-service-time.c | 11 drivers/media/platform/rockchip/rga/rga.c | 2 drivers/media/tuners/si2157.c | 22 - drivers/memory/atmel-ebi.c | 23 + drivers/memory/renesas-rpc-if.c | 10 drivers/net/dsa/ocelot/felix.c | 23 + drivers/net/dsa/ocelot/felix_vsc9959.c | 2 drivers/net/dsa/realtek/Kconfig | 1 drivers/net/dsa/realtek/realtek-smi-core.c | 48 ++ drivers/net/dsa/realtek/realtek-smi-core.h | 2 drivers/net/dsa/realtek/rtl8365mb.c | 54 +-- drivers/net/ethernet/broadcom/genet/bcmgenet.c | 4 drivers/net/ethernet/faraday/ftgmac100.c | 10 drivers/net/ethernet/intel/iavf/iavf_main.c | 7 drivers/net/ethernet/intel/ice/ice_arfs.c | 9 drivers/net/ethernet/intel/ice/ice_lib.c | 5 drivers/net/ethernet/intel/ice/ice_main.c | 18 - drivers/net/ethernet/mellanox/mlxsw/i2c.c | 1 drivers/net/ethernet/micrel/Kconfig | 1 drivers/net/ethernet/microchip/lan966x/lan966x_mac.c | 6 drivers/net/ethernet/microchip/lan966x/lan966x_switchdev.c | 3 drivers/net/ethernet/myricom/myri10ge/myri10ge.c | 6 drivers/net/ethernet/stmicro/stmmac/altr_tse_pcs.c | 8 drivers/net/ethernet/stmicro/stmmac/altr_tse_pcs.h | 4 drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c | 13 drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 13 drivers/net/macvlan.c | 8 drivers/net/mdio/fwnode_mdio.c | 5 drivers/net/slip/slip.c | 2 drivers/net/tun.c | 2 drivers/net/usb/aqc111.c | 9 drivers/net/veth.c | 2 drivers/net/wireless/ath/ath11k/mac.c | 22 - drivers/net/wireless/ath/ath9k/main.c | 2 drivers/net/wireless/ath/ath9k/xmit.c | 33 + drivers/pci/controller/pci-hyperv.c | 9 drivers/perf/fsl_imx8_ddr_perf.c | 2 drivers/regulator/wm8994-regulator.c | 42 ++ drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c | 2 drivers/scsi/lpfc/lpfc.h | 7 drivers/scsi/lpfc/lpfc_crtn.h | 3 drivers/scsi/lpfc/lpfc_hbadisc.c | 120 +++++-- drivers/scsi/lpfc/lpfc_init.c | 88 +++-- drivers/scsi/lpfc/lpfc_nvme.c | 27 + drivers/scsi/lpfc/lpfc_sli.c | 65 ++- drivers/scsi/megaraid/megaraid_sas.h | 3 drivers/scsi/megaraid/megaraid_sas_base.c | 7 drivers/scsi/mpt3sas/mpt3sas_config.c | 9 drivers/scsi/mvsas/mv_init.c | 1 drivers/scsi/pm8001/pm80xx_hwi.c | 33 + drivers/scsi/scsi_transport_iscsi.c | 168 ++++++---- drivers/spi/spi-cadence-quadspi.c | 46 -- drivers/target/target_core_user.c | 3 drivers/vfio/pci/vfio_pci_core.c | 124 ++++--- fs/binfmt_elf.c | 4 fs/btrfs/block-group.c | 40 +- fs/btrfs/block-group.h | 4 fs/btrfs/compression.c | 8 fs/btrfs/disk-io.c | 5 fs/btrfs/extent-tree.c | 2 fs/btrfs/extent_io.c | 5 fs/btrfs/file.c | 13 fs/btrfs/inode.c | 7 fs/btrfs/volumes.c | 2 fs/cachefiles/namei.c | 33 + fs/cachefiles/xattr.c | 2 fs/cifs/cifsfs.c | 28 - fs/cifs/link.c | 3 fs/io-wq.h | 1 fs/io_uring.c | 66 ++- fs/nfsd/filecache.c | 18 - include/asm-generic/mshyperv.h | 1 include/asm-generic/tlb.h | 10 include/linux/kfence.h | 24 + include/linux/static_call.h | 20 + include/linux/sunrpc/svc.h | 1 include/linux/vfio_pci_core.h | 2 include/net/flow_dissector.h | 2 include/scsi/scsi_transport_iscsi.h | 2 include/sound/core.h | 1 include/sound/memalloc.h | 5 include/trace/events/sunrpc.h | 7 include/uapi/linux/io_uring.h | 1 include/uapi/linux/stddef.h | 4 kernel/cpu.c | 36 +- kernel/dma/direct.h | 3 kernel/irq/affinity.c | 5 kernel/smp.c | 2 kernel/time/tick-sched.c | 2 kernel/time/timer.c | 11 mm/hugetlb.c | 17 - mm/kfence/core.c | 21 - mm/kfence/kfence.h | 21 + mm/kfence/report.c | 47 ++ mm/kmemleak.c | 8 mm/page_alloc.c | 2 mm/page_io.c | 54 --- mm/secretmem.c | 17 + mm/slab.c | 2 mm/slab.h | 2 mm/slab_common.c | 9 mm/slob.c | 2 mm/slub.c | 2 net/ax25/af_ax25.c | 5 net/core/flow_dissector.c | 1 net/dsa/dsa2.c | 23 - net/ipv6/ip6_output.c | 2 net/mac80211/debugfs_sta.c | 2 net/netfilter/nf_tables_api.c | 2 net/netfilter/nft_socket.c | 7 net/nfc/nci/core.c | 4 net/sched/cls_api.c | 2 net/sched/cls_flower.c | 18 - net/sched/sch_taprio.c | 3 net/sctp/sm_statefuns.c | 6 net/sctp/socket.c | 2 net/smc/smc_clc.c | 6 net/smc/smc_pnet.c | 5 net/sunrpc/svc_xprt.c | 3 net/sunrpc/xprtrdma/svc_rdma_recvfrom.c | 2 net/wireless/nl80211.c | 3 net/wireless/scan.c | 2 scripts/gcc-plugins/latent_entropy_plugin.c | 44 +- sound/core/init.c | 28 + sound/core/memalloc.c | 111 ++++++ sound/core/pcm_misc.c | 2 sound/drivers/mtpav.c | 4 sound/isa/galaxy/galaxy.c | 7 sound/isa/sc6000.c | 7 sound/pci/ad1889.c | 10 sound/pci/ali5451/ali5451.c | 10 sound/pci/als300.c | 8 sound/pci/als4000.c | 10 sound/pci/atiixp.c | 10 sound/pci/atiixp_modem.c | 10 sound/pci/au88x0/au88x0.c | 8 sound/pci/aw2/aw2-alsa.c | 8 sound/pci/azt3328.c | 8 sound/pci/bt87x.c | 10 sound/pci/ca0106/ca0106_main.c | 10 sound/pci/cmipci.c | 8 sound/pci/cs4281.c | 10 sound/pci/cs5535audio/cs5535audio.c | 10 sound/pci/echoaudio/echoaudio.c | 9 sound/pci/emu10k1/emu10k1x.c | 10 sound/pci/ens1370.c | 10 sound/pci/es1938.c | 10 sound/pci/es1968.c | 10 sound/pci/fm801.c | 10 sound/pci/hda/patch_realtek.c | 2 sound/pci/ice1712/ice1724.c | 10 sound/pci/intel8x0.c | 10 sound/pci/intel8x0m.c | 10 sound/pci/korg1212/korg1212.c | 8 sound/pci/lola/lola.c | 10 sound/pci/lx6464es/lx6464es.c | 8 sound/pci/maestro3.c | 8 sound/pci/nm256/nm256.c | 2 sound/pci/oxygen/oxygen_lib.c | 12 sound/pci/riptide/riptide.c | 8 sound/pci/rme32.c | 8 sound/pci/rme96.c | 10 sound/pci/rme9652/hdsp.c | 8 sound/pci/rme9652/hdspm.c | 8 sound/pci/rme9652/rme9652.c | 8 sound/pci/sis7019.c | 14 sound/pci/sonicvibes.c | 10 sound/pci/via82xx.c | 10 sound/pci/via82xx_modem.c | 10 sound/usb/pcm.c | 16 sound/x86/intel_hdmi_audio.c | 7 tools/arch/x86/include/asm/msr-index.h | 4 tools/perf/util/parse-events.c | 5 tools/testing/selftests/kvm/include/riscv/processor.h | 4 tools/testing/selftests/kvm/lib/riscv/processor.c | 2 tools/testing/selftests/mqueue/mq_perf_tests.c | 25 + 253 files changed, 2315 insertions(+), 930 deletions(-)
Adrian Hunter (1):
perf tools: Fix misleading add event PMU debug message
Ajish Koshy (2):
scsi: pm80xx: Mask and unmask upper interrupt vectors 32-63
scsi: pm80xx: Enable upper inbound, outbound queuesAlex Deucher (1):
drm/amdgpu/gmc: use PCI BARs for APUs in passthrough
Alexander Lobakin (1):
ice: arfs: fix use-after-free when freeing @rx_cpu_rmap
Alexander Sverdlin (1):
ep93xx: clock: Fix UAF in ep93xx_clk_register_gate()
Alexey Galakhov (1):
scsi: mvsas: Add PCI ID of RocketRaid 2640
Alvin Šipraga (3):
net: dsa: realtek: allow subdrivers to externally lock regmap
net: dsa: realtek: rtl8365mb: serialize indirect PHY register access
net: dsa: realtek: make interface drivers depend on OF
Andrea Parri (Microsoft) (1):
Drivers: hv: vmbus: Deactivate sysctl_record_panic_msg by default in isolated guests
Andrew Morton (2):
revert "fs/binfmt_elf: fix PT_LOAD p_align values for loaders" revert "fs/binfmt_elf: use PT_LOAD p_align values for static PIE"
Andy Chiu (1):
net: axienet: setup mdio unconditionally
Andy Shevchenko (1):
i2c: dev: check return value when calling dev_set_name()
Anilkumar Kolli (1):
Revert "ath11k: mesh: add support for 256 bitmap in blockack frames in 11ax"
Anna-Maria Behnsen (1):
timers: Fix warning condition in __run_timers()
Antoine Tenart (2):
netfilter: nf_tables: nft_parse_register can return a negative value
tun: annotate access to queue->trans_start
Anup Patel (3):
RISC-V: KVM: Don't clear hgatp CSR in kvm_arch_vcpu_put()
KVM: selftests: riscv: Set PTE A and D bits in VS-stage page table
KVM: selftests: riscv: Fix alignment of the guest_hang() function
Athira Rajeev (1):
testing/selftests/mqueue: Fix mq_perf_tests to free the allocated cpu set
Aurabindo Pillai (1):
drm/amd: Add USBC connector ID
Axel Rasmussen (1):
mm/secretmem: fix panic when growing a memfd_secret
Bartosz Golaszewski (1):
gpio: sim: fix setting and getting multiple lines
Ben Greear (1):
mac80211: fix ht_capa printout in debugfs
Benedikt Spranger (1):
net/sched: taprio: Check if socket flags are valid
Boqun Feng (1):
Drivers: hv: balloon: Disable balloon and hot-add accordingly
Borislav Petkov (1):
perf/imx_ddr: Fix undefined behavior due to shift overflowing the constant
Chandrakanth patil (1):
scsi: megaraid_sas: Target with invalid LUN ID is deleted during scan
Chao Gao (1):
dma-direct: avoid redundant memory sync for swiotlb
Charlene Liu (1):
drm/amd/display: fix audio format not updated after edid updated
Chiawen Huang (1):
drm/amd/display: FEC check in timing validation
Chris Park (1):
drm/amd/display: Correct Slice reset calculation
Christian Lamparter (1):
ata: libata-core: Disable READ LOG DMA EXT for Samsung 840 EVOs
Christoph Böhmwalder (1):
drbd: set QUEUE_FLAG_STABLE_WRITES
Christophe Leroy (1):
static_call: Properly initialise DEFINE_STATIC_CALL_RET0()
Chuck Lever (2):
SUNRPC: Fix the svc_deferred_event trace class
SUNRPC: Fix NFSD's request deferral on RDMA transports
Cristian Marussi (2):
firmware: arm_scmi: Remove clear channel call on the TX channel
firmware: arm_scmi: Fix sorting of retrieved clock rates
Darrick J. Wong (1):
btrfs: fix fallocate to use file_modified to update permissions consistently
Dave Wysochanski (1):
cachefiles: Fix KASAN slab-out-of-bounds in cachefiles_set_volume_xattr
Dennis Zhou (1):
btrfs: fix btrfs_submit_compressed_write cgroup attribution
Dinh Nguyen (1):
net: ethernet: stmmac: fix altr_tse_pcs function when using a fixed-link
Dongjin Yang (1):
dt-bindings: net: snps: remove duplicate name
Duoming Zhou (2):
drivers: net: slip: fix NPD bug in sl_tx_timeout()
ax25: Fix UAF bugs in ax25 timers
Dylan Hung (1):
net: ftgmac100: access hardware register after clock ready
Dylan Yudaken (3):
io_uring: move io_uring_rsrc_update2 validation
io_uring: verify that resv2 is 0 in io_uring_rsrc_update2
io_uring: verify pad field is 0 in io_get_ext_arg
Fabio M. De Francesco (1):
ALSA: pcm: Test for "silence" field in struct "pcm_format_data"
Filipe Manana (1):
btrfs: remove no longer used counter when reading data page
Florian Westphal (1):
netfilter: nft_socket: make cgroup match work in input too
Greg Kroah-Hartman (1):
Linux 5.17.4
Guchun Chen (1):
drm/amdgpu: conduct a proper cleanup of PDB bo
Guillaume Nault (1):
veth: Ensure eth header is in skb's linear part
Harshit Mogalapalli (1):
cifs: potential buffer overflow in handling symlinks
Heiko Stuebner (1):
RISC-V: KVM: include missing hwcap.h into vcpu_fp
Horatiu Vultur (2):
net: lan966x: Fix when a port's upper is changed.
net: lan966x: Stop processing the MAC entry is port is wrong.
James Smart (3):
scsi: lpfc: Improve PCI EEH Error and Recovery Handling
scsi: lpfc: Fix unload hang after back to back PCI EEH faults
scsi: lpfc: Fix queue failures when recovering from PCI parity error
Jason A. Donenfeld (1):
gcc-plugins: latent_entropy: use /dev/urandom
Jason Gunthorpe (1):
vfio/pci: Fix vf_token mechanism when device-specific VF drivers are used
Jeffle Xu (1):
cachefiles: unmark inode in use in error path
Jens Axboe (3):
io_uring: flag the fact that linked file assignment is sane
io_uring: stop using io_wq_work as an fd placeholder
io_uring: abort file assignment prior to assigning creds
Jeremy Linton (1):
net: bcmgenet: Revert "Use stronger register read/writes to assure ordering"
Jia-Ju Bai (1):
btrfs: fix root ref counts in error handling in btrfs_get_root_ref
Joey Gouly (1):
arm64: alternatives: mark patch_alternative() as noinstr
Johan Hovold (1):
memory: renesas-rpc-if: fix platform-device leak in error path
Johannes Berg (1):
nl80211: correctly check NL80211_ATTR_REG_ALPHA2 size
Jonathan Bakker (1):
regulator: wm8994: Add an off-on delay for WM8994 variant
Josef Bacik (1):
btrfs: do not warn for free space inode in cow_file_range
Juergen Gross (1):
mm, page_alloc: fix build_zonerefs_node()
Kai-Heng Feng (1):
drm/amdgpu: Ensure HDA function is suspended before ASIC reset
Karsten Graul (2):
net/smc: use memcpy instead of snprintf to avoid out of bounds read net/smc: Fix NULL pointer dereference in smc_pnet_find_ib()
Khazhismel Kumykov (1):
dm mpath: only use ktime_get_ns() in historical selector
Kuogee Hsieh (1):
drm/msm/dp: add fail safe mode outside of event_mutex context
Kyle Copperfield (1):
media: rockchip/rga: do proper error checking in probe
Leo (Hanghong) Ma (1):
drm/amd/display: Update VTEM Infopacket definition
Leo Ruan (1):
gpu: ipu-v3: Fix dev_dbg frequency output
Lin Ma (1):
nfc: nci: add flush_workqueue to prevent uaf
Linus Torvalds (1):
gpiolib: acpi: use correct format characters
Marc Zyngier (1):
KVM: arm64: Generalise VM features into a set of flags
Marcelo Ricardo Leitner (1):
net/sched: fix initialization order when updating chain 0 head
Marcin Kozlowski (1):
net: usb: aqc111: Fix out-of-bounds accesses in RX fixup
Marco Elver (1):
mm, kfence: support kmem_dump_obj() for KFENCE objects
Mario Limonciello (2):
cpuidle: PSCI: Move the has_lpi check to the beginning of the function
ACPI: processor idle: Check for architectural support for LPI
Martin Leung (1):
drm/amd/display: Revert FEC check in validation
Martin Povišer (1):
i2c: pasemi: Wait for write xfers to finish
Martin Willi (1):
macvlan: Fix leaking skb in source mode with nodst option
Mateusz Palczewski (1):
Revert "iavf: Fix deadlock occurrence during resetting VF interface"
Matt Roper (1):
drm/i915: Sunset igpu legacy mmap support based on GRAPHICS_VER_FULL
Matthias Schiffer (1):
spi: cadence-quadspi: fix protocol setup for non-1-1-X operations
Melissa Wen (1):
drm/amd/display: don't ignore alpha property on pre-multiplied mode
Miaoqian Lin (1):
memory: atmel-ebi: Fix missing of_node_put in atmel_ebi_probe
Michael Kelley (3):
Drivers: hv: vmbus: Propagate VMbus coherence to each VMbus device
PCI: hv: Propagate coherence from VMbus device to PCI device
Drivers: hv: vmbus: Prevent load re-ordering when reading ring buffer
Michael Walle (1):
net: dsa: felix: suppress -EPROBE_DEFER errors
Mike Christie (5):
scsi: iscsi: Move iscsi_ep_disconnect()
scsi: iscsi: Fix offload conn cleanup when iscsid restarts
scsi: iscsi: Fix endpoint reuse regression
scsi: iscsi: Fix conn cleanup and stop race during iscsid restart
scsi: iscsi: Fix unbound endpoint error handling
Mike Kravetz (1):
hugetlb: do not demote poisoned hugetlb pages
Mikulas Patocka (1):
dm integrity: fix memory corruption when tag_size is less than digest size
Minchan Kim (1):
mm: fix unexpected zeroed page mapping with zram swap
Ming Lei (2):
block: fix offset/size check in bio_trim()
block: null_blk: end timed out poll request
Nadav Amit (1):
smp: Fix offline cpu check in flush_smp_call_function_queue()
Naohiro Aota (4):
btrfs: release correct delalloc amount in direct IO write path
btrfs: return allocated block group from do_chunk_alloc()
btrfs: zoned: activate block group only for extent allocation
btrfs: mark resumed async balance as writing
Nathan Chancellor (2):
btrfs: remove unused variable in btrfs_{start,write}_dirty_block_groups()
ARM: davinci: da850-evm: Avoid NULL pointer dereference
Nicholas Kazlauskas (2):
drm/amd/display: Add pstate verification and recovery for DCN31 drm/amd/display: Fix p-state allow debug index on dcn31
Nicholas Piggin (1):
KVM: PPC: Book3S HV P9: Fix "lost kick" race
Nicolas Dichtel (1):
ipv6: fix panic when forwarding a pkt with no in6 dev
Patrick Wang (1):
mm: kmemleak: take a full lowmem check in kmemleak_*_phys()
Paul Gortmaker (1):
tick/nohz: Use WARN_ON_ONCE() to prevent console saturation
Pavel Begunkov (6):
io_uring: fix assign file locking issue
io_uring: zero tag on rsrc removal
io_uring: use nospec annotation for more indexes
io_uring: use right issue_flags for splice/tee
io_uring: fix poll file assign deadlock
io_uring: fix poll error reporting
Pawan Gupta (2):
x86/tsx: Use MSR_TSX_CTRL to clear CPUID bits x86/tsx: Disable TSX development mode at boot
Peter Zijlstra (1):
x86,bpf: Avoid IBT objtool warning
Petr Malat (1):
sctp: Initialize daddr on peeled off socket
Piotr Chmura (1):
media: si2157: unknown chip version Si2147-A30 ROM 0x50
QintaoShen (1):
drm/amdkfd: Check for potential null return of kmalloc_array()
Rameshkumar Sundaram (1):
cfg80211: hold bss_lock while updating nontrans_list
Randy Dunlap (1):
net: micrel: fix KS8851_MLL Kconfig
Rei Yamamoto (1):
genirq/affinity: Consider that CPUs on nodes can be unbalanced
Reiji Watanabe (1):
KVM: arm64: mixed-width check should be skipped for uninitialized vCPUs
Rob Clark (2):
drm/msm: Add missing put_task_struct() in debugfs path drm/msm: Fix range size vs end confusion
Roman Li (2):
drm/amd/display: Enable power gating before init_pipes drm/amd/display: Fix allocate_mst_payload assert on resume
Ronnie Sahlberg (1):
cifs: verify that tcon is valid before dereference in cifs_kill_sb
Sean Christopherson (1):
KVM: x86/mmu: Resolve nx_huge_pages when kvm.ko is loaded
Sherry Sun (1):
dt-bindings: memory: snps,ddrc-3.80a compatible also need interrupts
Shyam Prasad N (1):
cifs: release cached dentries only if mount is complete
Sreekanth Reddy (1):
scsi: mpt3sas: Fail reset operation if config request timed out
Stephen Boyd (1):
drm/msm/dsi: Use connector directly in msm_dsi_manager_connector_init()
Steve Capper (1):
tlb: hugetlb: Add more sizes to tlb_remove_huge_tlb_entry
Steven Price (1):
cpu/hotplug: Remove the 'cpu' member of cpuhp_cpu_state
Tadeusz Struk (1):
uapi/linux/stddef.h: Add include guards
Takashi Iwai (45):
ALSA: core: Add snd_card_free_on_error() helper
ALSA: sis7019: Fix the missing error handling
ALSA: ali5451: Fix the missing snd_card_free() call at probe error
ALSA: als300: Fix the missing snd_card_free() call at probe error
ALSA: als4000: Fix the missing snd_card_free() call at probe error
ALSA: atiixp: Fix the missing snd_card_free() call at probe error
ALSA: au88x0: Fix the missing snd_card_free() call at probe error
ALSA: aw2: Fix the missing snd_card_free() call at probe error
ALSA: azt3328: Fix the missing snd_card_free() call at probe error
ALSA: bt87x: Fix the missing snd_card_free() call at probe error
ALSA: ca0106: Fix the missing snd_card_free() call at probe error
ALSA: cmipci: Fix the missing snd_card_free() call at probe error
ALSA: cs4281: Fix the missing snd_card_free() call at probe error
ALSA: cs5535audio: Fix the missing snd_card_free() call at probe error
ALSA: echoaudio: Fix the missing snd_card_free() call at probe error
ALSA: emu10k1x: Fix the missing snd_card_free() call at probe error
ALSA: ens137x: Fix the missing snd_card_free() call at probe error
ALSA: es1938: Fix the missing snd_card_free() call at probe error
ALSA: es1968: Fix the missing snd_card_free() call at probe error
ALSA: fm801: Fix the missing snd_card_free() call at probe error
ALSA: galaxy: Fix the missing snd_card_free() call at probe error
ALSA: hdsp: Fix the missing snd_card_free() call at probe error
ALSA: hdspm: Fix the missing snd_card_free() call at probe error
ALSA: ice1724: Fix the missing snd_card_free() call at probe error
ALSA: intel8x0: Fix the missing snd_card_free() call at probe error
ALSA: intel_hdmi: Fix the missing snd_card_free() call at probe error
ALSA: korg1212: Fix the missing snd_card_free() call at probe error
ALSA: lola: Fix the missing snd_card_free() call at probe error
ALSA: lx6464es: Fix the missing snd_card_free() call at probe error
ALSA: maestro3: Fix the missing snd_card_free() call at probe error
ALSA: oxygen: Fix the missing snd_card_free() call at probe error
ALSA: riptide: Fix the missing snd_card_free() call at probe error
ALSA: rme32: Fix the missing snd_card_free() call at probe error
ALSA: rme9652: Fix the missing snd_card_free() call at probe error
ALSA: rme96: Fix the missing snd_card_free() call at probe error
ALSA: sc6000: Fix the missing snd_card_free() call at probe error
ALSA: sonicvibes: Fix the missing snd_card_free() call at probe error
ALSA: via82xx: Fix the missing snd_card_free() call at probe error
ALSA: usb-audio: Cap upper limits of buffer/period bytes for implicit fb
ALSA: memalloc: Add fallback SG-buffer allocations for x86
ALSA: nm256: Don't call card private_free at probe error path
ALSA: ad1889: Fix the missing snd_card_free() call at probe error
ALSA: mtpav: Don't call card private_free at probe error path
ALSA: usb-audio: Increase max buffer size
ALSA: usb-audio: Limit max buffer and period sizes per time
Tao Jin (1):
ALSA: hda/realtek: add quirk for Lenovo Thinkpad X12 speakers
Tianci Yin (1):
drm/amdgpu/vcn: improve vcn dpg stop procedure
Tim Crawford (1):
ALSA: hda/realtek: Add quirk for Clevo PD50PNT
Toke Høiland-Jørgensen (2):
ath9k: Properly clear TX status area before reporting to mac80211
ath9k: Fix usage of driver-private space in tx_info
Tomasz Moń (1):
drm/amdgpu: Enable gfxoff quirk on MacBook Pro
Trond Myklebust (1):
nfsd: Fix a write performance regression
Tushar Patel (1):
drm/amdkfd: Fix Incorrect VMIDs passed to HWS
Tyrel Datwyler (1):
scsi: ibmvscsis: Increase INITIAL_SRP_LIMIT to 1024
Vadim Pasternak (1):
mlxsw: i2c: Fix initialization error flow
Vlad Buslov (1):
net/sched: flower: fix parsing of ethertype following VLAN header
Vladimir Oltean (3):
net: mdio: don't defer probe forever if PHY IRQ provider is missing
net: dsa: felix: fix tagging protocol changes with multiple CPU ports Revert "net: dsa: setup master before ports"
Xiaoguang Wang (1):
scsi: target: tcmu: Fix possible page UAF
Xiaomeng Tong (1):
myri10ge: fix an incorrect free for skb in myri10ge_sw_tso
Xin Long (1):
sctp: use the correct skb for security_sctp_assoc_request
Greg Kroah-Hartman
maintainerDocumentation/devicetree/bindings/memory-controllers/synopsys,ddrc-ecc.yaml +4 -2
@@ -24,9 +24,9 @@ description: | properties: compatible: enum: + - snps,ddrc-3.80a - xlnx,zynq-ddrc-a05 - xlnx,zynqmp-ddrc-2.40a - - snps,ddrc-3.80a interrupts: maxItems: 1
@@ -43,7 +43,9 @@ allOf: properties: compatible: contains: - const: xlnx,zynqmp-ddrc-2.40a + enum: + - snps,ddrc-3.80a + - xlnx,zynqmp-ddrc-2.40a then: required: - interrupts
Documentation/devicetree/bindings/net/snps,dwmac.yaml +2 -4
@@ -53,20 +53,18 @@ properties: - allwinner,sun8i-r40-gmac - allwinner,sun8i-v3s-emac - allwinner,sun50i-a64-emac - - loongson,ls2k-dwmac - - loongson,ls7a-dwmac - amlogic,meson6-dwmac - amlogic,meson8b-dwmac - amlogic,meson8m2-dwmac - amlogic,meson-gxbb-dwmac - amlogic,meson-axg-dwmac - - loongson,ls2k-dwmac - - loongson,ls7a-dwmac - ingenic,jz4775-mac - ingenic,x1000-mac - ingenic,x1600-mac - ingenic,x1830-mac - ingenic,x2000-mac + - loongson,ls2k-dwmac + - loongson,ls7a-dwmac - rockchip,px30-gmac - rockchip,rk3128-gmac - rockchip,rk3228-gmac
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 17 -SUBLEVEL = 3 +SUBLEVEL = 4 EXTRAVERSION = NAME = Superb Owl
arch/arm/mach-davinci/board-da850-evm.c +3 -1
@@ -1101,11 +1101,13 @@ static int __init da850_evm_config_emac(void)int ret;u32 val;struct davinci_soc_info *soc_info = &davinci_soc_info; -u8 rmii_en = soc_info->emac_pdata->rmii_en; +u8 rmii_en;if (!machine_is_davinci_da850_evm ())return 0 ; + rmii_en = soc_info->emac_pdata->rmii_en; + cfg_chip3_base =DA8XX_SYSCFG0_VIRT (DA8XX_CFGCHIP3_REG ); val =__raw_readl (cfg_chip3_base);
arch/arm/mach-ep93xx/clock.c +3 -1
@@ -148,8 +148,10 @@ static struct clk_hw *ep93xx_clk_register_gate(const char *name, psc->lock = &clk_lock; clk =clk_register (NULL , &psc->hw); -if (IS_ERR (clk)) +if (IS_ERR (clk)) {kfree (psc); +return ERR_CAST (clk); + }return &psc->hw; }
arch/arm64/include/asm/kvm_emulate.h +19 -8
@@ -43,10 +43,22 @@ void kvm_inject_pabt(struct kvm_vcpu *vcpu, unsigned long addr);void kvm_vcpu_wfi (struct kvm_vcpu *vcpu); +#if defined(__KVM_VHE_HYPERVISOR__) || defined(__KVM_NVHE_HYPERVISOR__) static __always_inline bool vcpu_el1_is_32bit(struct kvm_vcpu *vcpu) {return !(vcpu->arch.hcr_el2 &HCR_RW ); } +#else +static __always_inline bool vcpu_el1_is_32bit(struct kvm_vcpu *vcpu) +{ +struct kvm *kvm = vcpu->kvm; + +WARN_ON_ONCE (!test_bit (KVM_ARCH_FLAG_REG_WIDTH_CONFIGURED , + &kvm->arch.flags)); + +return test_bit (KVM_ARCH_FLAG_EL1_32BIT , &kvm->arch.flags); +} +#endif static inline void vcpu_reset_hcr (struct kvm_vcpu *vcpu) {
@@ -72,15 +84,14 @@ static inline void vcpu_reset_hcr(struct kvm_vcpu *vcpu) vcpu->arch.hcr_el2 |=HCR_TVM ; } -if (test_bit (KVM_ARM_VCPU_EL1_32BIT , vcpu->arch.features)) +if (vcpu_el1_is_32bit (vcpu)) vcpu->arch.hcr_el2 &= ~HCR_RW ; - -/* -* TID3: trap feature register accesses that we virtualise. -* For now this is conditional, since no AArch32 feature regs -* are currently virtualised. -*/ -if (!vcpu_el1_is_32bit (vcpu)) +else +/* +* TID3: trap feature register accesses that we virtualise. +* For now this is conditional, since no AArch32 feature regs +* are currently virtualised. +*/ vcpu->arch.hcr_el2 |=HCR_TID3 ; if (cpus_have_const_cap(ARM64_MISMATCHED_CACHE_TYPE) ||
arch/arm64/include/asm/kvm_host.h +19 -6
@@ -122,7 +122,22 @@ struct kvm_arch {* should) opt in to this feature if KVM_CAP_ARM_NISV_TO_USER is * supported. */ -bool return_nisv_io_abort_to_user; +#define KVM_ARCH_FLAG_RETURN_NISV_IO_ABORT_TO_USER 0 +/* Memory Tagging Extension enabled for the guest */ +#define KVM_ARCH_FLAG_MTE_ENABLED 1 +/* At least one vCPU has ran in the VM */ +#define KVM_ARCH_FLAG_HAS_RAN_ONCE 2 +/* +* The following two bits are used to indicate the guest's EL1 +* register width configuration. A value of KVM_ARCH_FLAG_EL1_32BIT +* bit is valid only when KVM_ARCH_FLAG_REG_WIDTH_CONFIGURED is set. +* Otherwise, the guest's EL1 register width has not yet been +* determined yet. +*/ +#define KVM_ARCH_FLAG_REG_WIDTH_CONFIGURED 3 +#define KVM_ARCH_FLAG_EL1_32BIT 4 + +unsigned long flags;/* * VM-wide PMU filter, implemented as a bitmap and big enough for
@@ -133,10 +148,6 @@ struct kvm_arch {u8 pfr0_csv2;u8 pfr0_csv3; - -/* Memory Tagging Extension enabled for the guest */ -bool mte_enabled; -bool ran_once; };struct kvm_vcpu_fault_info {
@@ -792,7 +803,9 @@ bool kvm_arm_vcpu_is_finalized(struct kvm_vcpu *vcpu);#define kvm_arm_vcpu_sve_finalized (vcpu) \ ((vcpu)->arch.flags & KVM_ARM64_VCPU_SVE_FINALIZED) -#define kvm_has_mte (kvm) (system_supports_mte() && (kvm)->arch.mte_enabled) +#define kvm_has_mte (kvm) \ + (system_supports_mte() && \ + test_bit(KVM_ARCH_FLAG_MTE_ENABLED, &(kvm)->arch.flags))#define kvm_vcpu_has_pmu (vcpu) \ (test_bit(KVM_ARM_VCPU_PMU_V3, (vcpu)->arch.features))
arch/arm64/kernel/alternative.c +3 -3
@@ -42,7 +42,7 @@ bool alternative_is_applied(u16 cpufeature)/* * Check if the target PC is within an alternative block. */ -static bool branch_insn_requires_update (struct alt_instr *alt,unsigned long pc) +static __always_inline bool branch_insn_requires_update(struct alt_instr *alt, unsigned long pc) {unsigned long replptr = (unsigned long )ALT_REPL_PTR (alt);return !(pc >= replptr && pc <= (replptr + alt->alt_len));
@@ -50,7 +50,7 @@ static bool branch_insn_requires_update(struct alt_instr *alt, unsigned long pc)#define align_down (x, a) ((unsigned long)(x) & ~(((unsigned long)(a)) - 1)) -static u32 get_alt_insn (struct alt_instr *alt,__le32 *insnptr,__le32 *altinsnptr) +static __always_inline u32 get_alt_insn(struct alt_instr *alt, __le32 *insnptr, __le32 *altinsnptr) {u32 insn;
@@ -95,7 +95,7 @@ static u32 get_alt_insn(struct alt_instr *alt, __le32 *insnptr, __le32 *altinsnpreturn insn; } -static void patch_alternative (struct alt_instr *alt, +static noinstr void patch_alternative(struct alt_instr *alt,__le32 *origptr,__le32 *updptr,int nr_inst) {__le32 *replptr;
arch/arm64/kernel/cpuidle.c +3 -3
@@ -54,6 +54,9 @@ static int psci_acpi_cpu_init_idle(unsigned int cpu)struct acpi_lpi_state *lpi;struct acpi_processor *pr =per_cpu (processors, cpu); +if (unlikely (!pr || !pr->flags.has_lpi)) +return -EINVAL ; +/* * If the PSCI cpu_suspend function hook has not been initialized * idle states must not be enabled, so bail out
@@ -61,9 +64,6 @@ static int psci_acpi_cpu_init_idle(unsigned int cpu)if (!psci_ops.cpu_suspend)return -EOPNOTSUPP ; -if (unlikely (!pr || !pr->flags.has_lpi)) -return -EINVAL ; - count = pr->power.count -1 ;if (count <=0 )return -ENODEV ;
arch/arm64/kvm/arm.c +4 -3
@@ -89,7 +89,8 @@ int kvm_vm_ioctl_enable_cap(struct kvm *kvm,switch (cap->cap) {case KVM_CAP_ARM_NISV_TO_USER : r =0 ; - kvm->arch.return_nisv_io_abort_to_user = true; +set_bit (KVM_ARCH_FLAG_RETURN_NISV_IO_ABORT_TO_USER , + &kvm->arch.flags);break ;case KVM_CAP_ARM_MTE :mutex_lock (&kvm->lock);
@@ -97,7 +98,7 @@ int kvm_vm_ioctl_enable_cap(struct kvm *kvm, r = -EINVAL ; }else { r =0 ; - kvm->arch.mte_enabled = true; +set_bit (KVM_ARCH_FLAG_MTE_ENABLED , &kvm->arch.flags); }mutex_unlock (&kvm->lock);break ;
@@ -635,7 +636,7 @@ int kvm_arch_vcpu_run_pid_change(struct kvm_vcpu *vcpu)kvm_call_hyp_nvhe (__pkvm_vcpu_init_traps, vcpu);mutex_lock (&kvm->lock); - kvm->arch.ran_once = true; +set_bit (KVM_ARCH_FLAG_HAS_RAN_ONCE , &kvm->arch.flags);mutex_unlock (&kvm->lock);return ret;
arch/arm64/kvm/mmio.c +2 -1
@@ -135,7 +135,8 @@ int io_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa)* volunteered to do so, and bail out otherwise. */ if (!kvm_vcpu_dabt_isvalid (vcpu)) { -if (vcpu->kvm->arch.return_nisv_io_abort_to_user) { +if (test_bit (KVM_ARCH_FLAG_RETURN_NISV_IO_ABORT_TO_USER , + &vcpu->kvm->arch.flags)) { run->exit_reason =KVM_EXIT_ARM_NISV ; run->arm_nisv.esr_iss =kvm_vcpu_dabt_iss_nisv_sanitized (vcpu); run->arm_nisv.fault_ipa = fault_ipa;
arch/arm64/kvm/pmu-emul.c +1 -1
@@ -982,7 +982,7 @@ int kvm_arm_pmu_v3_set_attr(struct kvm_vcpu *vcpu, struct kvm_device_attr *attr)mutex_lock (&kvm->lock); -if (kvm->arch.ran_once) { +if (test_bit (KVM_ARCH_FLAG_HAS_RAN_ONCE , &kvm->arch.flags)) {mutex_unlock (&kvm->lock);return -EBUSY ; }
arch/arm64/kvm/reset.c +45 -20
96 lines not on this page · raw message
arch/powerpc/include/asm/static_call.h +1 -0
@@ -24,5 +24,6 @@#define ARCH_DEFINE_STATIC_CALL_TRAMP (name, func) __PPC_SCT(name, "b " #func)#define ARCH_DEFINE_STATIC_CALL_NULL_TRAMP (name) __PPC_SCT(name, "blr") +#define ARCH_DEFINE_STATIC_CALL_RET0_TRAMP (name) __PPC_SCT(name, "b .+20")#endif /* _ASM_POWERPC_STATIC_CALL_H */
arch/powerpc/kvm/book3s_hv.c +33 -8
77 lines not on this page · raw message
arch/riscv/kvm/vcpu.c +0 -2
@@ -653,8 +653,6 @@ void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu) vcpu->arch.isa);kvm_riscv_vcpu_host_fp_restore (&vcpu->arch.host_context); -csr_write (CSR_HGATP ,0 ); - csr->vsstatus =csr_read (CSR_VSSTATUS ); csr->vsie =csr_read (CSR_VSIE ); csr->vstvec =csr_read (CSR_VSTVEC );
arch/riscv/kvm/vcpu_fp.c +1 -0
@@ -11,6 +11,7 @@#include <linux/err.h> #include <linux/kvm_host.h> #include <linux/uaccess.h> +#include <asm/hwcap.h> #ifdef CONFIG_FPU void kvm_riscv_vcpu_fp_reset (struct kvm_vcpu *vcpu)
arch/x86/include/asm/kvm_host.h +3 -2
@@ -1574,8 +1574,9 @@ static inline int kvm_arch_flush_remote_tlb(struct kvm *kvm)#define kvm_arch_pmi_in_guest (vcpu) \ ((vcpu) && (vcpu)->arch.handling_intr_from_guest) -int kvm_mmu_module_init (void ); -void kvm_mmu_module_exit (void ); +void kvm_mmu_x86_module_init (void ); +int kvm_mmu_vendor_module_init (void ); +void kvm_mmu_vendor_module_exit (void );void kvm_mmu_destroy (struct kvm_vcpu *vcpu);int kvm_mmu_create (struct kvm_vcpu *vcpu);
arch/x86/include/asm/msr-index.h +2 -2
@@ -128,9 +128,9 @@#define TSX_CTRL_RTM_DISABLE BIT(0)/* Disable RTM feature */ #define TSX_CTRL_CPUID_CLEAR BIT(1)/* Disable TSX enumeration */ -/* SRBDS support */ #define MSR_IA32_MCU_OPT_CTRL 0x00000123 -#define RNGDS_MITG_DIS BIT(0) +#define RNGDS_MITG_DIS BIT(0)/* SRBDS support */ +#define RTM_ALLOW BIT(1)/* TSX development mode */ #define MSR_IA32_SYSENTER_CS 0x00000174#define MSR_IA32_SYSENTER_ESP 0x00000175
arch/x86/include/asm/static_call.h +2 -0
@@ -38,6 +38,8 @@#define ARCH_DEFINE_STATIC_CALL_NULL_TRAMP (name) \ __ARCH_DEFINE_STATIC_CALL_TRAMP(name, "ret; int3; nop; nop; nop") +#define ARCH_DEFINE_STATIC_CALL_RET0_TRAMP (name) \ + ARCH_DEFINE_STATIC_CALL_TRAMP(name, __static_call_return0)#define ARCH_ADD_TRAMP_KEY (name) \ asm(".pushsection .static_call_tramp_key, \"a\" \n" \
arch/x86/kernel/cpu/common.c +2 -0
@@ -1719,6 +1719,8 @@ void identify_secondary_cpu(struct cpuinfo_x86 *c)validate_apic_and_package_id (c);x86_spec_ctrl_setup_ap ();update_srbds_msr (); + +tsx_ap_init (); }static __init int setup_noclflush (char *arg)
arch/x86/kernel/cpu/cpu.h +2 -3
@@ -55,11 +55,10 @@ enum tsx_ctrl_states {extern __ro_after_init enum tsx_ctrl_states tsx_ctrl_state;extern void __init tsx_init (void ); -extern void tsx_enable (void ); -extern void tsx_disable (void ); -extern void tsx_clear_cpuid (void ); +void tsx_ap_init (void );#else static inline void tsx_init (void ) { } +static inline void tsx_ap_init (void ) { }#endif /* CONFIG_CPU_SUP_INTEL */ extern void get_cpu_cap (struct cpuinfo_x86 *c);
arch/x86/kernel/cpu/intel.c +0 -7
@@ -717,13 +717,6 @@ static void init_intel(struct cpuinfo_x86 *c)init_intel_misc_features (c); -if (tsx_ctrl_state ==TSX_CTRL_ENABLE ) -tsx_enable (); -else if (tsx_ctrl_state ==TSX_CTRL_DISABLE ) -tsx_disable (); -else if (tsx_ctrl_state ==TSX_CTRL_RTM_ALWAYS_ABORT ) -tsx_clear_cpuid (); -split_lock_init ();bus_lock_init ();
arch/x86/kernel/cpu/tsx.c +94 -10
145 lines not on this page · raw message
arch/x86/kvm/mmu/mmu.c +16 -4
@@ -6144,12 +6144,24 @@ static int set_nx_huge_pages(const char *val, const struct kernel_param *kp)return 0 ; } -int kvm_mmu_module_init (void ) +/* +* nx_huge_pages needs to be resolved to true/false when kvm.ko is loaded, as +* its default value of -1 is technically undefined behavior for a boolean. +*/ +void kvm_mmu_x86_module_init (void ) { -int ret = -ENOMEM ; -if (nx_huge_pages ==-1 )__set_nx_huge_pages (get_nx_auto_mode ()); +} + +/* +* The bulk of the MMU initialization is deferred until the vendor module is +* loaded as many of the masks/values may be modified by VMX or SVM, i.e. need +* to be reset when a potentially different vendor module is loaded. +*/ +int kvm_mmu_vendor_module_init (void ) +{ +int ret = -ENOMEM ;/* * MMU roles use union aliasing which is, generally speaking, an
@@ -6197,7 +6209,7 @@ void kvm_mmu_destroy(struct kvm_vcpu *vcpu)mmu_free_memory_caches (vcpu); } -void kvm_mmu_module_exit (void ) +void kvm_mmu_vendor_module_exit (void ) {mmu_destroy_caches ();percpu_counter_destroy (&kvm_total_used_mmu_pages);
arch/x86/kvm/x86.c +18 -2
@@ -8846,7 +8846,7 @@ int kvm_arch_init(void *opaque) } kvm_nr_uret_msrs =0 ; - r =kvm_mmu_module_init (); + r =kvm_mmu_vendor_module_init ();if (r) goto out_free_percpu;
@@ -8894,7 +8894,7 @@ void kvm_arch_exit(void)cancel_work_sync (&pvclock_gtod_work);#endif kvm_x86_ops.hardware_enable =NULL ; -kvm_mmu_module_exit (); +kvm_mmu_vendor_module_exit ();free_percpu (user_return_msrs);kmem_cache_destroy (x86_emulator_cache);#ifdef CONFIG_KVM_XEN
@@ -12887,3 +12887,19 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_vmgexit_enter);EXPORT_TRACEPOINT_SYMBOL_GPL (kvm_vmgexit_exit);EXPORT_TRACEPOINT_SYMBOL_GPL (kvm_vmgexit_msr_protocol_enter);EXPORT_TRACEPOINT_SYMBOL_GPL (kvm_vmgexit_msr_protocol_exit); + +static int __init kvm_x86_init (void ) +{ +kvm_mmu_x86_module_init (); +return 0 ; +} +module_init (kvm_x86_init); + +static void __exit kvm_x86_exit(void) +{ +/* +* If module_init() is implemented, module_exit() must also be +* implemented to allow module unload. +*/ +} +module_exit (kvm_x86_exit);
arch/x86/net/bpf_jit_comp.c +1 -0
@@ -398,6 +398,7 @@ static void emit_indirect_jump(u8 **pprog, int reg, u8 *ip)EMIT_LFENCE (); EMIT2(0xFF, 0xE0 + reg); }else if (cpu_feature_enabled (X86_FEATURE_RETPOLINE )) { +OPTIMIZER_HIDE_VAR (reg);emit_jump (&prog, &__x86_indirect_thunk_array[reg], ip); } else#endif
block/bio.c +1 -1
@@ -1570,7 +1570,7 @@ EXPORT_SYMBOL(bio_split);void bio_trim (struct bio *bio,sector_t offset,sector_t size) {if (WARN_ON_ONCE (offset >BIO_MAX_SECTORS || size >BIO_MAX_SECTORS || - offset + size > bio->bi_iter.bi_size)) + offset + size >bio_sectors (bio)))return ; size <<=9 ;
drivers/acpi/processor_idle.c +10 -5
@@ -1079,6 +1079,11 @@ static int flatten_lpi_states(struct acpi_processor *pr,return 0 ; } +int __weak acpi_processor_ffh_lpi_probe (unsigned int cpu) +{ +return -EOPNOTSUPP ; +} +static int acpi_processor_get_lpi_info (struct acpi_processor *pr) {int ret, i;
@@ -1087,6 +1092,11 @@ static int acpi_processor_get_lpi_info(struct acpi_processor *pr)struct acpi_device *d =NULL ;struct acpi_lpi_states_array info[2 ], *tmp, *prev, *curr; +/* make sure our architecture has support */ + ret =acpi_processor_ffh_lpi_probe (pr->id); +if (ret == -EOPNOTSUPP ) +return ret; +if (!osc_pc_lpi_support_confirmed)return -EOPNOTSUPP ;
@@ -1138,11 +1148,6 @@ static int acpi_processor_get_lpi_info(struct acpi_processor *pr)return 0 ; } -int __weak acpi_processor_ffh_lpi_probe (unsigned int cpu) -{ -return -ENODEV ; -} -int __weak acpi_processor_ffh_lpi_enter (struct acpi_lpi_state *lpi) {return -ENODEV ;
drivers/ata/libata-core.c +3 -0
@@ -4014,6 +4014,9 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = { ATA_HORKAGE_ZERO_AFTER_TRIM, }, {"Crucial_CT*MX100*" ,"MU01" ,ATA_HORKAGE_NO_NCQ_TRIM | ATA_HORKAGE_ZERO_AFTER_TRIM, }, + { "Samsung SSD 840 EVO*", NULL, ATA_HORKAGE_NO_NCQ_TRIM | +ATA_HORKAGE_NO_DMA_LOG | + ATA_HORKAGE_ZERO_AFTER_TRIM, }, { "Samsung SSD 840*", NULL, ATA_HORKAGE_NO_NCQ_TRIM | ATA_HORKAGE_ZERO_AFTER_TRIM, }, { "Samsung SSD 850*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
drivers/base/dd.c +1 -0
@@ -296,6 +296,7 @@ int driver_deferred_probe_check_state(struct device *dev)return -EPROBE_DEFER ; } +EXPORT_SYMBOL_GPL (driver_deferred_probe_check_state);static void deferred_probe_timeout_work_func (struct work_struct *work) {
drivers/block/drbd/drbd_main.c +1 -0
@@ -2739,6 +2739,7 @@ enum drbd_ret_code drbd_create_device(struct drbd_config_context *adm_ctx, unsigsprintf (disk->disk_name,"drbd%d" , minor); disk->private_data = device; +blk_queue_flag_set (QUEUE_FLAG_STABLE_WRITES , disk->queue);blk_queue_write_cache (disk->queue, true, true);/* Setting the max_hw_sectors to an odd value of 8kibyte here This triggers a max_bio_size message upon first attach or connect */
drivers/block/null_blk/main.c +1 -1
@@ -1606,7 +1606,7 @@ static enum blk_eh_timer_return null_timeout_rq(struct request *rq, bool res)* Only fake timeouts need to execute blk_mq_complete_request() here. */ cmd->error =BLK_STS_TIMEOUT ; -if (cmd->fake_timeout) +if (cmd->fake_timeout || hctx->type ==HCTX_TYPE_POLL )blk_mq_complete_request (rq);return BLK_EH_DONE ; }
drivers/firmware/arm_scmi/clock.c +2 -1
@@ -204,7 +204,8 @@ scmi_clock_describe_rates_get(const struct scmi_protocol_handle *ph, u32 clk_id,if (rate_discrete && rate) { clk->list.num_rates = tot_rate_cnt; -sort (rate, tot_rate_cnt,sizeof (*rate), rate_cmp_func,NULL ); +sort (clk->list.rates, tot_rate_cnt,sizeof (*rate), + rate_cmp_func,NULL ); } clk->rate_discrete = rate_discrete;
drivers/firmware/arm_scmi/driver.c +2 -1
@@ -652,7 +652,8 @@ static void scmi_handle_response(struct scmi_chan_info *cinfo, xfer =scmi_xfer_command_acquire (cinfo, msg_hdr);if (IS_ERR (xfer)) { -scmi_clear_channel (info, cinfo); +if (MSG_XTRACT_TYPE (msg_hdr) ==MSG_TYPE_DELAYED_RESP ) +scmi_clear_channel (info, cinfo);return ; }
drivers/gpio/gpio-sim.c +2 -2
@@ -134,7 +134,7 @@ static int gpio_sim_get_multiple(struct gpio_chip *gc,struct gpio_sim_chip *chip =gpiochip_get_data (gc);mutex_lock (&chip->lock); -bitmap_copy (bits, chip->value_map, gc->ngpio); +bitmap_replace (bits, bits, chip->value_map, mask, gc->ngpio);mutex_unlock (&chip->lock);return 0 ;
@@ -146,7 +146,7 @@ static void gpio_sim_set_multiple(struct gpio_chip *gc,struct gpio_sim_chip *chip =gpiochip_get_data (gc);mutex_lock (&chip->lock); -bitmap_copy (chip->value_map, bits, gc->ngpio); +bitmap_replace (chip->value_map, chip->value_map, bits, mask, gc->ngpio);mutex_unlock (&chip->lock); }
drivers/gpio/gpiolib-acpi.c +2 -2
@@ -387,8 +387,8 @@ static acpi_status acpi_gpiochip_alloc_event(struct acpi_resource *ares, pin = agpio->pin_table[0 ];if (pin <=255 ) { -char ev_name[5 ]; -sprintf (ev_name,"_%c%02hhX" , +char ev_name[8 ]; +sprintf (ev_name,"_%c%02X" , agpio->triggering ==ACPI_EDGE_SENSITIVE ?'E' :'L' , pin);if (ACPI_SUCCESS (acpi_get_handle (handle, ev_name, &evt_handle)))
drivers/gpu/drm/amd/amdgpu/ObjectID.h +1 -0
@@ -119,6 +119,7 @@#define CONNECTOR_OBJECT_ID_eDP 0x14#define CONNECTOR_OBJECT_ID_MXM 0x15#define CONNECTOR_OBJECT_ID_LVDS_eDP 0x16 +#define CONNECTOR_OBJECT_ID_USBC 0x17/* deleted */
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +2 -2
@@ -5678,7 +5678,7 @@ void amdgpu_device_flush_hdp(struct amdgpu_device *adev, struct amdgpu_ring *ring) {#ifdef CONFIG_X86_64 -if (adev->flags &AMD_IS_APU ) +if ((adev->flags &AMD_IS_APU ) && !amdgpu_passthrough (adev))return ;#endif if (adev->gmc.xgmi.connected_to_cpu)
@@ -5694,7 +5694,7 @@ void amdgpu_device_invalidate_hdp(struct amdgpu_device *adev, struct amdgpu_ring *ring) {#ifdef CONFIG_X86_64 -if (adev->flags &AMD_IS_APU ) +if ((adev->flags &AMD_IS_APU ) && !amdgpu_passthrough (adev))return ;#endif if (adev->gmc.xgmi.connected_to_cpu)
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +13 -7
@@ -686,7 +686,7 @@ MODULE_PARM_DESC(sched_policy,* Maximum number of processes that HWS can schedule concurrently. The maximum is the * number of VMIDs assigned to the HWS, which is also the default. */ -int hws_max_conc_proc =8 ; +int hws_max_conc_proc =-1 ;module_param (hws_max_conc_proc, int,0444 );MODULE_PARM_DESC (hws_max_conc_proc,"Max # processes HWS can execute concurrently when sched_policy=0 (0 = no concurrency, #VMIDs for KFD = Maximum(default))" );
@@ -2276,18 +2276,23 @@ static int amdgpu_pmops_suspend(struct device *dev) {struct drm_device *drm_dev =dev_get_drvdata (dev);struct amdgpu_device *adev =drm_to_adev (drm_dev); -int r;if (amdgpu_acpi_is_s0ix_active (adev)) adev->in_s0ix = true;else adev->in_s3 = true; - r =amdgpu_device_suspend (drm_dev, true); -if (r) -return r; +return amdgpu_device_suspend (drm_dev, true); +} + +static int amdgpu_pmops_suspend_noirq (struct device *dev) +{ +struct drm_device *drm_dev =dev_get_drvdata (dev); +struct amdgpu_device *adev =drm_to_adev (drm_dev); +if (!adev->in_s0ix) - r =amdgpu_asic_reset (adev); -return r; +return amdgpu_asic_reset (adev); + +return 0 ; }static int amdgpu_pmops_resume (struct device *dev)
@@ -2528,6 +2533,7 @@ static const struct dev_pm_ops amdgpu_pm_ops = { .prepare = amdgpu_pmops_prepare, .complete = amdgpu_pmops_complete, .suspend = amdgpu_pmops_suspend, + .suspend_noirq = amdgpu_pmops_suspend_noirq, .resume = amdgpu_pmops_resume, .freeze = amdgpu_pmops_freeze, .thaw = amdgpu_pmops_thaw,
drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c +2 -0
@@ -1334,6 +1334,8 @@ static const struct amdgpu_gfxoff_quirk amdgpu_gfxoff_quirk_list[] = { { 0x1002, 0x15dd, 0x103c, 0x83e7, 0xd3 },/* GFXOFF is unstable on C6 parts with a VBIOS 113-RAVEN-114 */ { 0x1002, 0x15dd, 0x1002, 0x15dd, 0xc6 }, +/* Apple MacBook Pro (15-inch, 2019) Radeon Pro Vega 20 4 GB */ + { 0x1002, 0x69af, 0x106b, 0x019a, 0xc0 }, { 0, 0, 0, 0, 0 }, };
drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c +1 -1
@@ -788,7 +788,7 @@ static int gmc_v10_0_mc_init(struct amdgpu_device *adev) adev->gmc.aper_size =pci_resource_len (adev->pdev,0 );#ifdef CONFIG_X86_64 -if (adev->flags &AMD_IS_APU ) { +if ((adev->flags &AMD_IS_APU ) && !amdgpu_passthrough (adev)) { adev->gmc.aper_base = adev->gfxhub.funcs->get_mc_fb_offset (adev); adev->gmc.aper_size = adev->gmc.real_vram_size; }
drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c +3 -2
@@ -381,8 +381,9 @@ static int gmc_v7_0_mc_init(struct amdgpu_device *adev) adev->gmc.aper_size =pci_resource_len (adev->pdev,0 );#ifdef CONFIG_X86_64 -if (adev->flags &AMD_IS_APU && - adev->gmc.real_vram_size > adev->gmc.aper_size) { +if ((adev->flags &AMD_IS_APU ) && + adev->gmc.real_vram_size > adev->gmc.aper_size && + !amdgpu_passthrough (adev)) { adev->gmc.aper_base = ((u64 )RREG32 (mmMC_VM_FB_OFFSET)) <<22 ; adev->gmc.aper_size = adev->gmc.real_vram_size; }
drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c +1 -1
@@ -581,7 +581,7 @@ static int gmc_v8_0_mc_init(struct amdgpu_device *adev) adev->gmc.aper_size =pci_resource_len (adev->pdev,0 );#ifdef CONFIG_X86_64 -if (adev->flags &AMD_IS_APU ) { +if ((adev->flags &AMD_IS_APU ) && !amdgpu_passthrough (adev)) { adev->gmc.aper_base = ((u64 )RREG32 (mmMC_VM_FB_OFFSET)) <<22 ; adev->gmc.aper_size = adev->gmc.real_vram_size; }
drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c +2 -2
@@ -1420,7 +1420,7 @@ static int gmc_v9_0_mc_init(struct amdgpu_device *adev)*/ /* check whether both host-gpu and gpu-gpu xgmi links exist */ -if ((adev->flags &AMD_IS_APU ) || +if (((adev->flags &AMD_IS_APU ) && !amdgpu_passthrough (adev)) || (adev->gmc.xgmi.supported && adev->gmc.xgmi.connected_to_cpu)) { adev->gmc.aper_base =
@@ -1684,7 +1684,7 @@ static int gmc_v9_0_sw_fini(void *handle)amdgpu_gem_force_release (adev);amdgpu_vm_manager_fini (adev);amdgpu_gart_table_vram_free (adev); -amdgpu_bo_unref (&adev->gmc.pdb0_bo); +amdgpu_bo_free_kernel (&adev->gmc.pdb0_bo,NULL , &adev->gmc.ptr_pdb0);amdgpu_bo_fini (adev);return 0 ;
drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c +3 -0
@@ -1474,8 +1474,11 @@ static int vcn_v3_0_start_sriov(struct amdgpu_device *adev)static int vcn_v3_0_stop_dpg_mode (struct amdgpu_device *adev,int inst_idx) { +struct dpg_pause_state state = {.fw_based =VCN_DPG_STATE__UNPAUSE };uint32_t tmp; +vcn_v3_0_pause_dpg_mode (adev,0 , &state); +/* Wait for power status to be 1 */ SOC15_WAIT_ON_RREG (VCN , inst_idx, mmUVD_POWER_STATUS,1 ,UVD_POWER_STATUS__UVD_POWER_STATUS_MASK );
drivers/gpu/drm/amd/amdkfd/kfd_device.c +3 -8
@@ -480,15 +480,10 @@ bool kgd2kfd_device_init(struct kfd_dev *kfd, }/* Verify module parameters regarding mapped process number*/ -if ((hws_max_conc_proc <0 ) - || (hws_max_conc_proc > kfd->vm_info.vmid_num_kfd)) { -dev_err (kfd_device, -"hws_max_conc_proc %d must be between 0 and %d, use %d instead\n" , - hws_max_conc_proc, kfd->vm_info.vmid_num_kfd, - kfd->vm_info.vmid_num_kfd); +if (hws_max_conc_proc >=0 ) + kfd->max_proc_per_quantum =min ((u32 )hws_max_conc_proc, kfd->vm_info.vmid_num_kfd); +else kfd->max_proc_per_quantum = kfd->vm_info.vmid_num_kfd; - }else - kfd->max_proc_per_quantum = hws_max_conc_proc;/* calculate max size of mqds needed for queues */ size = max_num_of_queues_per_device *
drivers/gpu/drm/amd/amdkfd/kfd_events.c +2 -0
@@ -531,6 +531,8 @@ static struct kfd_event_waiter *alloc_event_waiters(uint32_t num_events) event_waiters =kmalloc_array (num_events,sizeof (struct kfd_event_waiter ),GFP_KERNEL ); +if (!event_waiters) +return NULL ;for (i =0 ; (event_waiters) && (i < num_events) ; i++) {init_wait (&event_waiters[i].wait);
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +2 -1
@@ -2693,7 +2693,8 @@ static int dm_resume(void *handle)* this is the case when traversing through already created * MST connectors, should be skipped */ -if (aconnector->mst_port) +if (aconnector->dc_link && + aconnector->dc_link->type == dc_connection_mst_branch)continue ;mutex_lock (&aconnector->hpd_lock);
drivers/gpu/drm/amd/display/dc/core/dc_resource.c +2 -2
@@ -1667,8 +1667,8 @@ bool dc_is_stream_unchanged(if (old_stream->ignore_msa_timing_param != stream->ignore_msa_timing_param)return false; -// Only Have Audio left to check whether it is same or not. This is a corner case for Tiled sinks -if (old_stream->audio_info.mode_count != stream->audio_info.mode_count) +/*compare audio info*/ +if (memcmp (&old_stream->audio_info, &stream->audio_info,sizeof (stream->audio_info)) !=0 )return false;return true;
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubbub.c +1 -0
@@ -940,6 +940,7 @@ static const struct hubbub_funcs hubbub1_funcs = { .program_watermarks = hubbub1_program_watermarks, .is_allow_self_refresh_enabled = hubbub1_is_allow_self_refresh_enabled, .allow_self_refresh_control = hubbub1_allow_self_refresh_control, + .verify_allow_pstate_change_high = hubbub1_verify_allow_pstate_change_high, }; void hubbub1_construct(struct hubbub *hubbub,
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c +19 -10
@@ -1112,9 +1112,13 @@ static bool dcn10_hw_wa_force_recovery(struct dc *dc)void dcn10_verify_allow_pstate_change_high (struct dc *dc) { +struct hubbub *hubbub = dc->res_pool->hubbub;static bool should_log_hw_state;/* prevent hw state log by default */ -if (!hubbub1_verify_allow_pstate_change_high (dc->res_pool->hubbub)) { +if (!hubbub->funcs->verify_allow_pstate_change_high) +return ; + +if (!hubbub->funcs->verify_allow_pstate_change_high (hubbub)) {int i =0 ;if (should_log_hw_state)
@@ -1123,8 +1127,8 @@ void dcn10_verify_allow_pstate_change_high(struct dc *dc)TRACE_DC_PIPE_STATE (pipe_ctx, i,MAX_PIPES );BREAK_TO_DEBUGGER ();if (dcn10_hw_wa_force_recovery (dc)) { -/*check again*/ -if (!hubbub1_verify_allow_pstate_change_high (dc->res_pool->hubbub)) +/*check again*/ +if (!hubbub->funcs->verify_allow_pstate_change_high (hubbub))BREAK_TO_DEBUGGER (); } }
@@ -1497,6 +1501,9 @@ void dcn10_init_hw(struct dc *dc)if (dc->config.power_down_display_on_boot)dc_link_blank_all_dp_displays (dc); +if (hws->funcs.enable_power_gating_plane) + hws->funcs.enable_power_gating_plane (dc->hwseq, true); +/* If taking control over from VBIOS, we may want to optimize our first * mode set, so we need to skip powering down pipes until we know which * pipes we want to use.
@@ -1549,8 +1556,6 @@ void dcn10_init_hw(struct dc *dc)REG_UPDATE (DCFCLK_CNTL ,DCFCLK_GATE_DIS ,0 ); } -if (hws->funcs.enable_power_gating_plane) - hws->funcs.enable_power_gating_plane (dc->hwseq, true);if (dc->clk_mgr->funcs->notify_wm_ranges) dc->clk_mgr->funcs->notify_wm_ranges (dc->clk_mgr);
@@ -2515,14 +2520,18 @@ void dcn10_update_mpcc(struct dc *dc, struct pipe_ctx *pipe_ctx)struct mpc *mpc = dc->res_pool->mpc;struct mpc_tree *mpc_tree_params = &(pipe_ctx->stream_res.opp->mpc_tree_params); -if (per_pixel_alpha) - blnd_cfg.alpha_mode =MPCC_ALPHA_BLEND_MODE_PER_PIXEL_ALPHA ; -else - blnd_cfg.alpha_mode =MPCC_ALPHA_BLEND_MODE_GLOBAL_ALPHA ; - blnd_cfg.overlap_only = false; blnd_cfg.global_gain =0xff ; +if (per_pixel_alpha && pipe_ctx->plane_state->global_alpha) { + blnd_cfg.alpha_mode =MPCC_ALPHA_BLEND_MODE_PER_PIXEL_ALPHA_COMBINED_GLOBAL_GAIN ; + blnd_cfg.global_gain = pipe_ctx->plane_state->global_alpha_value; + }else if (per_pixel_alpha) { + blnd_cfg.alpha_mode =MPCC_ALPHA_BLEND_MODE_PER_PIXEL_ALPHA ; + }else { + blnd_cfg.alpha_mode =MPCC_ALPHA_BLEND_MODE_GLOBAL_ALPHA ; + } +if (pipe_ctx->plane_state->global_alpha) blnd_cfg.global_alpha = pipe_ctx->plane_state->global_alpha_value;else
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c +9 -5
@@ -2313,14 +2313,18 @@ void dcn20_update_mpcc(struct dc *dc, struct pipe_ctx *pipe_ctx)struct mpc *mpc = dc->res_pool->mpc;struct mpc_tree *mpc_tree_params = &(pipe_ctx->stream_res.opp->mpc_tree_params); -if (per_pixel_alpha) - blnd_cfg.alpha_mode =MPCC_ALPHA_BLEND_MODE_PER_PIXEL_ALPHA ; -else - blnd_cfg.alpha_mode =MPCC_ALPHA_BLEND_MODE_GLOBAL_ALPHA ; - blnd_cfg.overlap_only = false; blnd_cfg.global_gain =0xff ; +if (per_pixel_alpha && pipe_ctx->plane_state->global_alpha) { + blnd_cfg.alpha_mode =MPCC_ALPHA_BLEND_MODE_PER_PIXEL_ALPHA_COMBINED_GLOBAL_GAIN ; + blnd_cfg.global_gain = pipe_ctx->plane_state->global_alpha_value; + }else if (per_pixel_alpha) { + blnd_cfg.alpha_mode =MPCC_ALPHA_BLEND_MODE_PER_PIXEL_ALPHA ; + }else { + blnd_cfg.alpha_mode =MPCC_ALPHA_BLEND_MODE_GLOBAL_ALPHA ; + } +if (pipe_ctx->plane_state->global_alpha) blnd_cfg.global_alpha = pipe_ctx->plane_state->global_alpha_value;else
drivers/gpu/drm/amd/display/dc/dcn30/dcn30_hubbub.c +1 -0
@@ -448,6 +448,7 @@ static const struct hubbub_funcs hubbub30_funcs = { .program_watermarks = hubbub3_program_watermarks, .allow_self_refresh_control = hubbub1_allow_self_refresh_control, .is_allow_self_refresh_enabled = hubbub1_is_allow_self_refresh_enabled, + .verify_allow_pstate_change_high = hubbub1_verify_allow_pstate_change_high, .force_wm_propagate_to_pipes = hubbub3_force_wm_propagate_to_pipes, .force_pstate_change_control = hubbub3_force_pstate_change_control, .init_watermarks = hubbub3_init_watermarks,
drivers/gpu/drm/amd/display/dc/dcn30/dcn30_hwseq.c +3 -2
@@ -548,6 +548,9 @@ void dcn30_init_hw(struct dc *dc)if (dc->config.power_down_display_on_boot)dc_link_blank_all_dp_displays (dc); +if (hws->funcs.enable_power_gating_plane) + hws->funcs.enable_power_gating_plane (dc->hwseq, true); +/* If taking control over from VBIOS, we may want to optimize our first * mode set, so we need to skip powering down pipes until we know which * pipes we want to use.
@@ -625,8 +628,6 @@ void dcn30_init_hw(struct dc *dc)REG_UPDATE (DCFCLK_CNTL ,DCFCLK_GATE_DIS ,0 ); } -if (hws->funcs.enable_power_gating_plane) - hws->funcs.enable_power_gating_plane (dc->hwseq, true);if (!dcb->funcs->is_accelerated_mode (dcb) && dc->res_pool->hubbub->funcs->init_watermarks) dc->res_pool->hubbub->funcs->init_watermarks (dc->res_pool->hubbub);
drivers/gpu/drm/amd/display/dc/dcn301/dcn301_hubbub.c +1 -0
@@ -60,6 +60,7 @@ static const struct hubbub_funcs hubbub301_funcs = { .program_watermarks = hubbub3_program_watermarks, .allow_self_refresh_control = hubbub1_allow_self_refresh_control, .is_allow_self_refresh_enabled = hubbub1_is_allow_self_refresh_enabled, + .verify_allow_pstate_change_high = hubbub1_verify_allow_pstate_change_high, .force_wm_propagate_to_pipes = hubbub3_force_wm_propagate_to_pipes, .force_pstate_change_control = hubbub3_force_pstate_change_control, .hubbub_read_state = hubbub2_read_state,
drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hubbub.c +62 -0
79 lines not on this page · raw message
drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hwseq.c +3 -2
@@ -200,6 +200,9 @@ void dcn31_init_hw(struct dc *dc)if (dc->config.power_down_display_on_boot)dc_link_blank_all_dp_displays (dc); +if (hws->funcs.enable_power_gating_plane) + hws->funcs.enable_power_gating_plane (dc->hwseq, true); +/* If taking control over from VBIOS, we may want to optimize our first * mode set, so we need to skip powering down pipes until we know which * pipes we want to use.
@@ -249,8 +252,6 @@ void dcn31_init_hw(struct dc *dc)REG_UPDATE (DCFCLK_CNTL ,DCFCLK_GATE_DIS ,0 ); } -if (hws->funcs.enable_power_gating_plane) - hws->funcs.enable_power_gating_plane (dc->hwseq, true);if (!dcb->funcs->is_accelerated_mode (dcb) && dc->res_pool->hubbub->funcs->init_watermarks) dc->res_pool->hubbub->funcs->init_watermarks (dc->res_pool->hubbub);
drivers/gpu/drm/amd/display/dc/dcn31/dcn31_resource.c +1 -1
@@ -1011,7 +1011,7 @@ static const struct dc_debug_options debug_defaults_drv = { .max_downscale_src_width = 4096,/*upto true 4K*/ .disable_pplib_wm_range = false, .scl_reset_length10 = true, - .sanity_checks = false, + .sanity_checks = true, .underflow_assert_delay_us = 0xFFFFFFFF, .dwb_fi_phase = -1, // -1 = disable, .dmub_command_table = true,
drivers/gpu/drm/amd/display/dc/dsc/dc_dsc.c +2 -2
@@ -864,11 +864,11 @@ static bool setup_dsc_config( min_slices_h =inc_num_slices (dsc_common_caps.slice_caps, min_slices_h); } + is_dsc_possible = (min_slices_h <= max_slices_h); +if (pic_width % min_slices_h !=0 ) min_slices_h =0 ;// DSC TODO: Maybe try increasing the number of slices first? - is_dsc_possible = (min_slices_h <= max_slices_h); -if (min_slices_h ==0 && max_slices_h ==0 ) is_dsc_possible = false;
drivers/gpu/drm/amd/display/dc/inc/hw/dchubbub.h +2 -0
@@ -154,6 +154,8 @@ struct hubbub_funcs {bool (*is_allow_self_refresh_enabled)(struct hubbub *hubbub);void (*allow_self_refresh_control)(struct hubbub *hubbub,bool allow); +bool (*verify_allow_pstate_change_high)(struct hubbub *hubbub); +void (*apply_DEDCN21_147_wa)(struct hubbub *hubbub);void (*force_wm_propagate_to_pipes)(struct hubbub *hubbub);
drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c +3 -2
@@ -100,7 +100,8 @@ enum vsc_packet_revision {//PB7 = MD0 #define MASK_VTEM_MD0__VRR_EN 0x01#define MASK_VTEM_MD0__M_CONST 0x02 -#define MASK_VTEM_MD0__RESERVED2 0x0C +#define MASK_VTEM_MD0__QMS_EN 0x04 +#define MASK_VTEM_MD0__RESERVED2 0x08#define MASK_VTEM_MD0__FVA_FACTOR_M1 0xF0//MD1
@@ -109,7 +110,7 @@ enum vsc_packet_revision {//MD2 #define MASK_VTEM_MD2__BASE_REFRESH_RATE_98 0x03#define MASK_VTEM_MD2__RB 0x04 -#define MASK_VTEM_MD2__RESERVED3 0xF8 +#define MASK_VTEM_MD2__NEXT_TFR 0xF8//MD3 #define MASK_VTEM_MD3__BASE_REFRESH_RATE_07 0xFF
drivers/gpu/drm/i915/gem/i915_gem_mman.c +1 -1
@@ -67,7 +67,7 @@ i915_gem_mmap_ioctl(struct drm_device *dev, void *data,* mmap ioctl is disallowed for all discrete platforms, * and for all platforms with GRAPHICS_VER > 12. */ -if (IS_DGFX (i915) ||GRAPHICS_VER (i915) >12 ) +if (IS_DGFX (i915) ||GRAPHICS_VER_FULL (i915) >IP_VER (12 ,0 ))return -EOPNOTSUPP ;if (args->flags & ~(I915_MMAP_WC ))
drivers/gpu/drm/msm/adreno/a6xx_gpu.c +1 -1
@@ -1714,7 +1714,7 @@ a6xx_create_private_address_space(struct msm_gpu *gpu)return ERR_CAST (mmu);return msm_gem_address_space_create (mmu, -"gpu" ,0x100000000ULL ,0x1ffffffffULL ); +"gpu" ,0x100000000ULL ,SZ_4G ); }static uint32_t a6xx_get_rptr (struct msm_gpu *gpu,struct msm_ringbuffer *ring)
drivers/gpu/drm/msm/dp/dp_display.c +6 -0
@@ -551,6 +551,12 @@ static int dp_hpd_plug_handle(struct dp_display_private *dp, u32 data)mutex_unlock (&dp->event_mutex); +/* +* add fail safe mode outside event_mutex scope +* to avoid potiential circular lock with drm thread +*/ +dp_panel_add_fail_safe_mode (dp->dp_display.connector); +/* uevent will complete connection part */ return 0 ; };
drivers/gpu/drm/msm/dp/dp_panel.c +10 -10
@@ -151,6 +151,15 @@ static int dp_panel_update_modes(struct drm_connector *connector,return rc; } +void dp_panel_add_fail_safe_mode (struct drm_connector *connector) +{ +/* fail safe edid */ +mutex_lock (&connector->dev->mode_config.mutex); +if (drm_add_modes_noedid (connector,640 ,480 )) +drm_set_preferred_mode (connector,640 ,480 ); +mutex_unlock (&connector->dev->mode_config.mutex); +} +int dp_panel_read_sink_caps (struct dp_panel *dp_panel,struct drm_connector *connector) {
@@ -207,16 +216,7 @@ int dp_panel_read_sink_caps(struct dp_panel *dp_panel, goto end; } -/* fail safe edid */ -mutex_lock (&connector->dev->mode_config.mutex); -if (drm_add_modes_noedid (connector,640 ,480 )) -drm_set_preferred_mode (connector,640 ,480 ); -mutex_unlock (&connector->dev->mode_config.mutex); - }else { -/* always add fail-safe mode as backup mode */ -mutex_lock (&connector->dev->mode_config.mutex); -drm_add_modes_noedid (connector,640 ,480 ); -mutex_unlock (&connector->dev->mode_config.mutex); +dp_panel_add_fail_safe_mode (connector); }if (panel->aux_cfg_update_done) {
drivers/gpu/drm/msm/dp/dp_panel.h +1 -0
@@ -59,6 +59,7 @@ int dp_panel_init_panel_info(struct dp_panel *dp_panel);int dp_panel_deinit (struct dp_panel *dp_panel);int dp_panel_timing_cfg (struct dp_panel *dp_panel);void dp_panel_dump_regs (struct dp_panel *dp_panel); +void dp_panel_add_fail_safe_mode (struct drm_connector *connector);int dp_panel_read_sink_caps (struct dp_panel *dp_panel,struct drm_connector *connector); u32 dp_panel_get_mode_bpp(struct dp_panel *dp_panel, u32 mode_max_bpp,
drivers/gpu/drm/msm/dsi/dsi_manager.c +1 -1
@@ -641,7 +641,7 @@ struct drm_connector *msm_dsi_manager_connector_init(u8 id)return connector; fail: - connector->funcs->destroy (msm_dsi->connector); + connector->funcs->destroy (connector);return ERR_PTR (ret); }
drivers/gpu/drm/msm/msm_gem.c +1 -0
@@ -926,6 +926,7 @@ void msm_gem_describe(struct drm_gem_object *obj, struct seq_file *m,get_pid_task (aspace->pid,PIDTYPE_PID );if (task) { comm =kstrdup (task->comm,GFP_KERNEL ); +put_task_struct (task); }else { comm =NULL ; }
drivers/gpu/ipu-v3/ipu-di.c +3 -2
@@ -447,8 +447,9 @@ static void ipu_di_config_clock(struct ipu_di *di, error = rate / (sig->mode.pixelclock /1000 ); -dev_dbg (di->ipu->dev," IPU clock can give %lu with divider %u, error %d.%u%%\n" , - rate, div, (signed )(error -1000 ) /10 , error %10 ); +dev_dbg (di->ipu->dev," IPU clock can give %lu with divider %u, error %c%d.%d%%\n" , + rate, div, error <1000 ?'-' :'+' , +abs (error -1000 ) /10 ,abs (error -1000 ) %10 );/* Allow a 1% error */ if (error <1010 && error >=990 ) {
drivers/hv/hv_balloon.c +34 -2
@@ -1653,6 +1653,38 @@ static void disable_page_reporting(void) } } +static int ballooning_enabled (void ) +{ +/* +* Disable ballooning if the page size is not 4k (HV_HYP_PAGE_SIZE), +* since currently it's unclear to us whether an unballoon request can +* make sure all page ranges are guest page size aligned. +*/ +if (PAGE_SIZE !=HV_HYP_PAGE_SIZE ) { +pr_info ("Ballooning disabled because page size is not 4096 bytes\n" ); +return 0 ; + } + +return 1 ; +} + +static int hot_add_enabled (void ) +{ +/* +* Disable hot add on ARM64, because we currently rely on +* memory_add_physaddr_to_nid() to get a node id of a hot add range, +* however ARM64's memory_add_physaddr_to_nid() always return 0 and +* DM_MEM_HOT_ADD_REQUEST doesn't have the NUMA node information for +* add_memory(). +*/ +if (IS_ENABLED (CONFIG_ARM64 )) { +pr_info ("Memory hot add disabled on ARM64\n" ); +return 0 ; + } + +return 1 ; +} +static int balloon_connect_vsp (struct hv_device *dev) {struct dm_version_request version_req;
@@ -1724,8 +1756,8 @@ static int balloon_connect_vsp(struct hv_device *dev)* currently still requires the bits to be set, so we have to add code * to fail the host's hot-add and balloon up/down requests, if any. */ - cap_msg.caps.cap_bits.balloon =1 ; - cap_msg.caps.cap_bits.hot_add =1 ; + cap_msg.caps.cap_bits.balloon =ballooning_enabled (); + cap_msg.caps.cap_bits.hot_add =hot_add_enabled ();/* * Specify our alignment requirements as it relates
drivers/hv/hv_common.c +11 -0
@@ -20,6 +20,7 @@#include <linux/panic_notifier.h> #include <linux/ptrace.h> #include <linux/slab.h> +#include <linux/dma-map-ops.h> #include <asm/hyperv-tlfs.h> #include <asm/mshyperv.h>
@@ -216,6 +217,16 @@ bool hv_query_ext_cap(u64 cap_query) }EXPORT_SYMBOL_GPL (hv_query_ext_cap); +void hv_setup_dma_ops (struct device *dev,bool coherent) +{ +/* +* Hyper-V does not offer a vIOMMU in the guest +* VM, so pass 0/NULL for the IOMMU settings +*/ +arch_setup_dma_ops (dev,0 ,0 ,NULL , coherent); +} +EXPORT_SYMBOL_GPL (hv_setup_dma_ops); +bool hv_is_hibernation_supported (void ) {return !hv_root_partition &&acpi_sleep_state_supported (ACPI_STATE_S4 );
drivers/hv/ring_buffer.c +10 -1
@@ -439,7 +439,16 @@ int hv_ringbuffer_read(struct vmbus_channel *channel,static u32 hv_pkt_iter_avail (const struct hv_ring_buffer_info *rbi) {u32 priv_read_loc = rbi->priv_read_index; -u32 write_loc =READ_ONCE (rbi->ring_buffer->write_index); +u32 write_loc; + +/* +* The Hyper-V host writes the packet data, then uses +* store_release() to update the write_index. Use load_acquire() +* here to prevent loads of the packet data from being re-ordered +* before the read of the write_index and potentially getting +* stale data. +*/ + write_loc =virt_load_acquire (&rbi->ring_buffer->write_index);if (write_loc >= priv_read_loc)return write_loc - priv_read_loc;
drivers/hv/vmbus_drv.c +43 -6
91 lines not on this page · raw message
drivers/i2c/busses/i2c-pasemi-core.c +6 -0
@@ -137,6 +137,12 @@ static int pasemi_i2c_xfer_msg(struct i2c_adapter *adapter,TXFIFO_WR (smbus, msg->buf[msg->len-1 ] | (stop ?MTXFIFO_STOP :0 )); + +if (stop) { + err =pasemi_smb_waitready (smbus); +if (err) + goto reset_out; + } }return 0 ;
drivers/i2c/i2c-dev.c +10 -5
@@ -668,16 +668,21 @@ static int i2cdev_attach_adapter(struct device *dev, void *dummy) i2c_dev->dev.class = i2c_dev_class; i2c_dev->dev.parent = &adap->dev; i2c_dev->dev.release = i2cdev_dev_release; -dev_set_name (&i2c_dev->dev,"i2c-%d" , adap->nr); + + res =dev_set_name (&i2c_dev->dev,"i2c-%d" , adap->nr); +if (res) + goto err_put_i2c_dev; res =cdev_device_add (&i2c_dev->cdev, &i2c_dev->dev); -if (res) { -put_i2c_dev (i2c_dev, false); -return res; - } +if (res) + goto err_put_i2c_dev;pr_debug ("adapter [%s] registered as minor %d\n" , adap->name, adap->nr);return 0 ; + +err_put_i2c_dev: +put_i2c_dev (i2c_dev, false); +return res; }static int i2cdev_detach_adapter (struct device *dev,void *dummy)
drivers/md/dm-integrity.c +5 -2
@@ -4400,6 +4400,7 @@ static int dm_integrity_ctr(struct dm_target *ti, unsigned argc, char **argv) }if (ic->internal_hash) { +size_t recalc_tags_size; ic->recalc_wq =alloc_workqueue ("dm-integrity-recalc" ,WQ_MEM_RECLAIM ,1 );if (!ic->recalc_wq ) { ti->error ="Cannot allocate workqueue" ;
@@ -4413,8 +4414,10 @@ static int dm_integrity_ctr(struct dm_target *ti, unsigned argc, char **argv) r = -ENOMEM ; goto bad; } - ic->recalc_tags =kvmalloc_array (RECALC_SECTORS >> ic->sb->log2_sectors_per_block, - ic->tag_size,GFP_KERNEL ); + recalc_tags_size = (RECALC_SECTORS >> ic->sb->log2_sectors_per_block) * ic->tag_size; +if (crypto_shash_digestsize (ic->internal_hash) > ic->tag_size) + recalc_tags_size +=crypto_shash_digestsize (ic->internal_hash) - ic->tag_size; + ic->recalc_tags =kvmalloc (recalc_tags_size,GFP_KERNEL );if (!ic->recalc_tags) { ti->error ="Cannot allocate tags for recalculating" ; r = -ENOMEM ;
drivers/md/dm-ps-historical-service-time.c +5 -6
@@ -27,7 +27,6 @@#include <linux/blkdev.h> #include <linux/slab.h> #include <linux/module.h> -#include <linux/sched/clock.h> #define DM_MSG_PREFIX "multipath historical-service-time"
@@ -433,7 +432,7 @@ static struct dm_path *hst_select_path(struct path_selector *ps, {struct selector *s = ps->context;struct path_info *pi =NULL , *best =NULL ; -u64 time_now =sched_clock (); +u64 time_now =ktime_get_ns ();struct dm_path *ret =NULL ;unsigned long flags;
@@ -474,7 +473,7 @@ static int hst_start_io(struct path_selector *ps, struct dm_path *path,static u64 path_service_time (struct path_info *pi,u64 start_time) { -u64 sched_now =ktime_get_ns (); +u64 now =ktime_get_ns ();/* if a previous disk request has finished after this IO was * sent to the hardware, pretend the submission happened
@@ -483,11 +482,11 @@ static u64 path_service_time(struct path_info *pi, u64 start_time)if (time_after64 (pi->last_finish, start_time)) start_time = pi->last_finish; - pi->last_finish = sched_now; -if (time_before64 (sched_now, start_time)) + pi->last_finish = now; +if (time_before64 (now, start_time))return 0 ; -return sched_now - start_time; +return now - start_time; } static int hst_end_io(struct path_selector *ps, struct dm_path *path,
drivers/media/platform/rockchip/rga/rga.c +1 -1
@@ -892,7 +892,7 @@ static int rga_probe(struct platform_device *pdev) } rga->dst_mmu_pages = (unsigned int *)__get_free_pages (GFP_KERNEL | __GFP_ZERO,3 ); -if (rga->dst_mmu_pages) { +if (!rga->dst_mmu_pages) { ret = -ENOMEM ; goto free_src_pages; }
drivers/media/tuners/si2157.c +11 -11
@@ -77,16 +77,16 @@ static int si2157_cmd_execute(struct i2c_client *client, struct si2157_cmd *cmd) }static const struct si2157_tuner_info si2157_tuners[] = { - {SI2141 , false,0x60 ,SI2141_60_FIRMWARE ,SI2141_A10_FIRMWARE }, - {SI2141 , false,0x61 ,SI2141_61_FIRMWARE ,SI2141_A10_FIRMWARE }, - {SI2146 , false,0x11 ,SI2146_11_FIRMWARE ,NULL }, - {SI2147 , false,0x50 ,SI2147_50_FIRMWARE ,NULL }, - {SI2148 , true,0x32 ,SI2148_32_FIRMWARE ,SI2158_A20_FIRMWARE }, - {SI2148 , true,0x33 ,SI2148_33_FIRMWARE ,SI2158_A20_FIRMWARE }, - {SI2157 , false,0x50 ,SI2157_50_FIRMWARE ,SI2157_A30_FIRMWARE }, - {SI2158 , false,0x50 ,SI2158_50_FIRMWARE ,SI2158_A20_FIRMWARE }, - {SI2158 , false,0x51 ,SI2158_51_FIRMWARE ,SI2158_A20_FIRMWARE }, - {SI2177 , false,0x50 ,SI2177_50_FIRMWARE ,SI2157_A30_FIRMWARE }, + {SI2141 ,0x60 , false,SI2141_60_FIRMWARE ,SI2141_A10_FIRMWARE }, + {SI2141 ,0x61 , false,SI2141_61_FIRMWARE ,SI2141_A10_FIRMWARE }, + {SI2146 ,0x11 , false,SI2146_11_FIRMWARE ,NULL }, + {SI2147 ,0x50 , false,SI2147_50_FIRMWARE ,NULL }, + {SI2148 ,0x32 , true,SI2148_32_FIRMWARE ,SI2158_A20_FIRMWARE }, + {SI2148 ,0x33 , true,SI2148_33_FIRMWARE ,SI2158_A20_FIRMWARE }, + {SI2157 ,0x50 , false,SI2157_50_FIRMWARE ,SI2157_A30_FIRMWARE }, + {SI2158 ,0x50 , false,SI2158_50_FIRMWARE ,SI2158_A20_FIRMWARE }, + {SI2158 ,0x51 , false,SI2158_51_FIRMWARE ,SI2158_A20_FIRMWARE }, + {SI2177 ,0x50 , false,SI2177_50_FIRMWARE ,SI2157_A30_FIRMWARE }, }; static int si2157_load_firmware(struct dvb_frontend *fe,
@@ -178,7 +178,7 @@ static int si2157_find_and_load_firmware(struct dvb_frontend *fe) } } -if (!fw_name && !fw_alt_name) { +if (required && !fw_name && !fw_alt_name) {dev_err (&client->dev,"unknown chip version Si21%d-%c%c%c ROM 0x%02x\n" , part_id, cmd.args[1 ], cmd.args[3 ], cmd.args[4 ], rom_id);
drivers/memory/atmel-ebi.c +17 -6
@@ -544,20 +544,27 @@ static int atmel_ebi_probe(struct platform_device *pdev) smc_np =of_parse_phandle (dev->of_node,"atmel,smc" ,0 ); ebi->smc.regmap =syscon_node_to_regmap (smc_np); -if (IS_ERR (ebi->smc.regmap)) -return PTR_ERR (ebi->smc.regmap); +if (IS_ERR (ebi->smc.regmap)) { + ret =PTR_ERR (ebi->smc.regmap); + goto put_node; + } ebi->smc.layout =atmel_hsmc_get_reg_layout (smc_np); -if (IS_ERR (ebi->smc.layout)) -return PTR_ERR (ebi->smc.layout); +if (IS_ERR (ebi->smc.layout)) { + ret =PTR_ERR (ebi->smc.layout); + goto put_node; + } ebi->smc.clk =of_clk_get (smc_np,0 );if (IS_ERR (ebi->smc.clk)) { -if (PTR_ERR (ebi->smc.clk) != -ENOENT ) -return PTR_ERR (ebi->smc.clk); +if (PTR_ERR (ebi->smc.clk) != -ENOENT ) { + ret =PTR_ERR (ebi->smc.clk); + goto put_node; + } ebi->smc.clk =NULL ; } +of_node_put (smc_np); ret =clk_prepare_enable (ebi->smc.clk);if (ret)return ret;
@@ -608,6 +615,10 @@ static int atmel_ebi_probe(struct platform_device *pdev) }return of_platform_populate (np,NULL ,NULL , dev); + +put_node: +of_node_put (smc_np); +return ret; }static __maybe_unused int atmel_ebi_resume (struct device *dev)
drivers/memory/renesas-rpc-if.c +9 -1
@@ -651,6 +651,7 @@ static int rpcif_probe(struct platform_device *pdev)struct platform_device *vdev;struct device_node *flash;const char *name; +int ret; flash =of_get_next_child (pdev->dev.of_node,NULL );if (!flash) {
@@ -674,7 +675,14 @@ static int rpcif_probe(struct platform_device *pdev)return -ENOMEM ; vdev->dev.parent = &pdev->dev;platform_set_drvdata (pdev, vdev); -return platform_device_add (vdev); + + ret =platform_device_add (vdev); +if (ret) { +platform_device_put (vdev); +return ret; + } + +return 0 ; }static int rpcif_remove (struct platform_device *pdev)
drivers/net/dsa/ocelot/felix.c +23 -0
@@ -599,6 +599,8 @@ static int felix_change_tag_protocol(struct dsa_switch *ds, int cpu,struct ocelot *ocelot = ds->priv;struct felix *felix =ocelot_to_felix (ocelot);enum dsa_tag_protocol old_proto = felix->tag_proto; +bool cpu_port_active = false; +struct dsa_port *dp;int err; if (proto != DSA_TAG_PROTO_SEVILLE &&
@@ -606,6 +608,27 @@ static int felix_change_tag_protocol(struct dsa_switch *ds, int cpu, proto != DSA_TAG_PROTO_OCELOT_8021Q)return -EPROTONOSUPPORT ; +/* We don't support multiple CPU ports, yet the DT blob may have +* multiple CPU ports defined. The first CPU port is the active one, +* the others are inactive. In this case, DSA will call +* ->change_tag_protocol() multiple times, once per CPU port. +* Since we implement the tagging protocol change towards "ocelot" or +* "seville" as effectively initializing the NPI port, what we are +* doing is effectively changing who the NPI port is to the last @cpu +* argument passed, which is an unused DSA CPU port and not the one +* that should actively pass traffic. +* Suppress DSA's calls on CPU ports that are inactive. +*/ +dsa_switch_for_each_user_port (dp, ds) { +if (dp->cpu_dp->index == cpu) { + cpu_port_active = true; +break ; + } + } + +if (!cpu_port_active) +return 0 ; +felix_del_tag_protocol (ds, cpu, old_proto); err =felix_set_tag_protocol (ds, cpu, proto);
drivers/net/dsa/ocelot/felix_vsc9959.c +1 -1
@@ -2328,7 +2328,7 @@ static int felix_pci_probe(struct pci_dev *pdev, err =dsa_register_switch (ds);if (err) { -dev_err (&pdev->dev,"Failed to register DSA switch: %d\n" , err); +dev_err_probe (&pdev->dev, err,"Failed to register DSA switch\n" ); goto err_register_ds; }
drivers/net/dsa/realtek/Kconfig +1 -0
@@ -14,6 +14,7 @@ menuconfig NET_DSA_REALTEK config NET_DSA_REALTEK_SMI tristate "Realtek SMI connected switch driver" depends on NET_DSA_REALTEK + depends on OF default y help Select to enable support for registering switches connected
drivers/net/dsa/realtek/realtek-smi-core.c +45 -3
78 lines not on this page · raw message
drivers/net/dsa/realtek/realtek-smi-core.h +2 -0
@@ -49,6 +49,8 @@ struct realtek_smi {struct gpio_desc *mdc;struct gpio_desc *mdio;struct regmap *map; +struct regmap *map_nolock; +struct mutex map_lock;struct mii_bus *slave_mii_bus;unsigned int clk_delay;
drivers/net/dsa/realtek/rtl8365mb.c +33 -21
123 lines not on this page · raw message
drivers/net/ethernet/broadcom/genet/bcmgenet.c +2 -2
@@ -76,7 +76,7 @@ static inline void bcmgenet_writel(u32 value, void __iomem *offset)if (IS_ENABLED (CONFIG_MIPS ) &&IS_ENABLED (CONFIG_CPU_BIG_ENDIAN ))__raw_writel (value, offset);else -writel (value, offset); +writel_relaxed (value, offset); }static inline u32 bcmgenet_readl (void __iomem *offset)
@@ -84,7 +84,7 @@ static inline u32 bcmgenet_readl(void __iomem *offset)if (IS_ENABLED (CONFIG_MIPS ) &&IS_ENABLED (CONFIG_CPU_BIG_ENDIAN ))return __raw_readl (offset);else -return readl (offset); +return readl_relaxed (offset); } static inline void dmadesc_set_length_status(struct bcmgenet_priv *priv,
drivers/net/ethernet/faraday/ftgmac100.c +5 -5
@@ -1835,11 +1835,6 @@ static int ftgmac100_probe(struct platform_device *pdev) priv->rxdes0_edorr_mask =BIT (30 ); priv->txdes0_edotr_mask =BIT (30 ); priv->is_aspeed = true; -/* Disable ast2600 problematic HW arbitration */ -if (of_device_is_compatible (np,"aspeed,ast2600-mac" )) { -iowrite32 (FTGMAC100_TM_DEFAULT , - priv->base +FTGMAC100_OFFSET_TM ); - } }else { priv->rxdes0_edorr_mask =BIT (15 ); priv->txdes0_edotr_mask =BIT (15 );
@@ -1911,6 +1906,11 @@ static int ftgmac100_probe(struct platform_device *pdev) err =ftgmac100_setup_clk (priv);if (err) goto err_phy_connect; + +/* Disable ast2600 problematic HW arbitration */ +if (of_device_is_compatible (np,"aspeed,ast2600-mac" )) +iowrite32 (FTGMAC100_TM_DEFAULT , + priv->base +FTGMAC100_OFFSET_TM ); }/* Default ring sizes */
drivers/net/ethernet/intel/iavf/iavf_main.c +2 -5
@@ -2817,7 +2817,6 @@ static void iavf_reset_task(struct work_struct *work) running = adapter->state == __IAVF_RUNNING;if (running) { - netdev->flags &= ~IFF_UP ;netif_carrier_off (netdev);netif_tx_stop_all_queues (netdev); adapter->link_up = false;
@@ -2934,7 +2933,7 @@ static void iavf_reset_task(struct work_struct *work)* to __IAVF_RUNNING */ iavf_up_complete (adapter); - netdev->flags |=IFF_UP ; +iavf_irq_enable (adapter, true); }else {iavf_change_state (adapter, __IAVF_DOWN);
@@ -2950,10 +2949,8 @@ static void iavf_reset_task(struct work_struct *work) reset_err:mutex_unlock (&adapter->client_lock);mutex_unlock (&adapter->crit_lock); -if (running) { +if (running)iavf_change_state (adapter, __IAVF_RUNNING); - netdev->flags |=IFF_UP ; - }dev_err (&adapter->pdev->dev,"failed to allocate resources during reinit\n" );iavf_close (netdev); }
drivers/net/ethernet/intel/ice/ice_arfs.c +2 -7
@@ -577,7 +577,7 @@ void ice_free_cpu_rx_rmap(struct ice_vsi *vsi) {struct net_device *netdev; -if (!vsi || vsi->type !=ICE_VSI_PF || !vsi->arfs_fltr_list) +if (!vsi || vsi->type !=ICE_VSI_PF )return ; netdev = vsi->netdev;
@@ -599,7 +599,7 @@ int ice_set_cpu_rx_rmap(struct ice_vsi *vsi)int base_idx, i;if (!vsi || vsi->type !=ICE_VSI_PF ) -return -EINVAL ; +return 0 ; pf = vsi->back; netdev = vsi->netdev;
@@ -636,7 +636,6 @@ void ice_remove_arfs(struct ice_pf *pf)if (!pf_vsi)return ; -ice_free_cpu_rx_rmap (pf_vsi);ice_clear_arfs (pf_vsi); }
@@ -653,9 +652,5 @@ void ice_rebuild_arfs(struct ice_pf *pf)return ;ice_remove_arfs (pf); -if (ice_set_cpu_rx_rmap (pf_vsi)) { -dev_err (ice_pf_to_dev (pf),"Failed to rebuild aRFS\n" ); -return ; - }ice_init_arfs (pf_vsi); }
drivers/net/ethernet/intel/ice/ice_lib.c +4 -1
@@ -2869,6 +2869,8 @@ void ice_vsi_free_irq(struct ice_vsi *vsi)return ; vsi->irqs_ready = false; +ice_free_cpu_rx_rmap (vsi); +ice_for_each_q_vector (vsi, i) {u16 vector = i + base;int irq_num;
@@ -2882,7 +2884,8 @@ void ice_vsi_free_irq(struct ice_vsi *vsi)continue ;/* clear the affinity notifier in the IRQ descriptor */ -irq_set_affinity_notifier (irq_num,NULL ); +if (!IS_ENABLED (CONFIG_RFS_ACCEL )) +irq_set_affinity_notifier (irq_num,NULL );/* clear the affinity_mask in the IRQ descriptor */ irq_set_affinity_hint (irq_num,NULL );
drivers/net/ethernet/intel/ice/ice_main.c +8 -10
@@ -2494,6 +2494,13 @@ static int ice_vsi_req_irq_msix(struct ice_vsi *vsi, char *basename)irq_set_affinity_hint (irq_num, &q_vector->affinity_mask); } + err =ice_set_cpu_rx_rmap (vsi); +if (err) { +netdev_err (vsi->netdev,"Failed to setup CPU RMAP on VSI %u: %pe\n" , + vsi->vsi_num,ERR_PTR (err)); + goto free_q_irqs; + } + vsi->irqs_ready = true;return 0 ;
@@ -3605,20 +3612,12 @@ static int ice_setup_pf_sw(struct ice_pf *pf)*/ ice_napi_add (vsi); - status =ice_set_cpu_rx_rmap (vsi); -if (status) { -dev_err (dev,"Failed to set CPU Rx map VSI %d error %d\n" , - vsi->vsi_num, status); - goto unroll_napi_add; - } status =ice_init_mac_fltr (pf);if (status) - goto free_cpu_rx_map; + goto unroll_napi_add;return 0 ; -free_cpu_rx_map: -ice_free_cpu_rx_rmap (vsi); unroll_napi_add:ice_tc_indir_block_unregister (vsi); unroll_cfg_netdev:
@@ -5076,7 +5075,6 @@ static int __maybe_unused ice_suspend(struct device *dev)continue ;ice_vsi_free_q_vectors (pf->vsi[v]); } -ice_free_cpu_rx_rmap (ice_get_main_vsi (pf));ice_clear_interrupt_scheme (pf);pci_save_state (pdev);
drivers/net/ethernet/mellanox/mlxsw/i2c.c +1 -0
@@ -650,6 +650,7 @@ static int mlxsw_i2c_probe(struct i2c_client *client,return 0 ; errout: +mutex_destroy (&mlxsw_i2c->cmd.lock);i2c_set_clientdata (client,NULL );return err;
drivers/net/ethernet/micrel/Kconfig +1 -0
@@ -39,6 +39,7 @@ config KS8851 config KS8851_MLL tristate "Micrel KS8851 MLL" depends on HAS_IOMEM + depends on PTP_1588_CLOCK_OPTIONAL select MII select CRC32 select EEPROM_93CX6
drivers/net/ethernet/microchip/lan966x/lan966x_mac.c +4 -2
@@ -346,7 +346,8 @@ static void lan966x_mac_irq_process(struct lan966x *lan966x, u32 row,lan966x_mac_process_raw_entry (&raw_entries[column], mac, &vid, &dest_idx); -WARN_ON (dest_idx > lan966x->num_phys_ports); +if (WARN_ON (dest_idx > lan966x->num_phys_ports)) +continue ;/* If the entry in SW is found, then there is nothing * to do
@@ -392,7 +393,8 @@ static void lan966x_mac_irq_process(struct lan966x *lan966x, u32 row,lan966x_mac_process_raw_entry (&raw_entries[column], mac, &vid, &dest_idx); -WARN_ON (dest_idx > lan966x->num_phys_ports); +if (WARN_ON (dest_idx > lan966x->num_phys_ports)) +continue ; mac_entry =lan966x_mac_alloc_entry (mac, vid, dest_idx);if (!mac_entry)
drivers/net/ethernet/microchip/lan966x/lan966x_switchdev.c +1 -2
@@ -261,8 +261,7 @@ static int lan966x_port_prechangeupper(struct net_device *dev,if (netif_is_bridge_master (info->upper_dev) && !info->linking)switchdev_bridge_port_unoffload (port->dev, port, - &lan966x_switchdev_nb, - &lan966x_switchdev_blocking_nb); +NULL ,NULL );return NOTIFY_DONE ; }
drivers/net/ethernet/myricom/myri10ge/myri10ge.c +2 -4
@@ -2903,11 +2903,9 @@ static netdev_tx_t myri10ge_sw_tso(struct sk_buff *skb, status =myri10ge_xmit (curr, dev);if (status !=0 ) {dev_kfree_skb_any (curr); -if (segs !=NULL ) { - curr = segs; - segs = next; + skb_list_walk_safe(next, curr, next) { curr->next =NULL ; -dev_kfree_skb_any (segs); +dev_kfree_skb_any (curr); } goto drop; }
drivers/net/ethernet/stmicro/stmmac/altr_tse_pcs.c +0 -8
@@ -57,10 +57,6 @@#define TSE_PCS_USE_SGMII_ENA BIT(0)#define TSE_PCS_IF_USE_SGMII 0x03 -#define SGMII_ADAPTER_CTRL_REG 0x00 -#define SGMII_ADAPTER_DISABLE 0x0001 -#define SGMII_ADAPTER_ENABLE 0x0000 -#define AUTONEGO_LINK_TIMER 20static int tse_pcs_reset (void __iomem *base,struct tse_pcs *pcs)
@@ -202,12 +198,8 @@ void tse_pcs_fix_mac_speed(struct tse_pcs *pcs, struct phy_device *phy_dev, unsigned int speed) {void __iomem *tse_pcs_base = pcs->tse_pcs_base; -void __iomem *sgmii_adapter_base = pcs->sgmii_adapter_base;u32 val; -writew (SGMII_ADAPTER_ENABLE , - sgmii_adapter_base +SGMII_ADAPTER_CTRL_REG ); - pcs->autoneg = phy_dev->autoneg;if (phy_dev->autoneg ==AUTONEG_ENABLE ) {
drivers/net/ethernet/stmicro/stmmac/altr_tse_pcs.h +4 -0
@@ -10,6 +10,10 @@#include <linux/phy.h> #include <linux/timer.h> +#define SGMII_ADAPTER_CTRL_REG 0x00 +#define SGMII_ADAPTER_ENABLE 0x0000 +#define SGMII_ADAPTER_DISABLE 0x0001 +struct tse_pcs {struct device *dev;void __iomem *tse_pcs_base;
drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c +5 -8
@@ -18,9 +18,6 @@#include "altr_tse_pcs.h" -#define SGMII_ADAPTER_CTRL_REG 0x00 -#define SGMII_ADAPTER_DISABLE 0x0001 -#define SYSMGR_EMACGRP_CTRL_PHYSEL_ENUM_GMII_MII 0x0#define SYSMGR_EMACGRP_CTRL_PHYSEL_ENUM_RGMII 0x1#define SYSMGR_EMACGRP_CTRL_PHYSEL_ENUM_RMII 0x2
@@ -62,16 +59,14 @@ static void socfpga_dwmac_fix_mac_speed(void *priv, unsigned int speed) {struct socfpga_dwmac *dwmac = (struct socfpga_dwmac *)priv;void __iomem *splitter_base = dwmac->splitter_base; -void __iomem *tse_pcs_base = dwmac->pcs.tse_pcs_base;void __iomem *sgmii_adapter_base = dwmac->pcs.sgmii_adapter_base;struct device *dev = dwmac->dev;struct net_device *ndev =dev_get_drvdata (dev);struct phy_device *phy_dev = ndev->phydev;u32 val; -if ((tse_pcs_base) && (sgmii_adapter_base)) -writew (SGMII_ADAPTER_DISABLE , - sgmii_adapter_base +SGMII_ADAPTER_CTRL_REG ); +writew (SGMII_ADAPTER_DISABLE , + sgmii_adapter_base +SGMII_ADAPTER_CTRL_REG );if (splitter_base) { val =readl (splitter_base +EMAC_SPLITTER_CTRL_REG );
@@ -93,7 +88,9 @@ static void socfpga_dwmac_fix_mac_speed(void *priv, unsigned int speed)writel (val, splitter_base +EMAC_SPLITTER_CTRL_REG ); } -if (tse_pcs_base && sgmii_adapter_base) +writew (SGMII_ADAPTER_ENABLE , + sgmii_adapter_base +SGMII_ADAPTER_CTRL_REG ); +if (phy_dev)tse_pcs_fix_mac_speed (&dwmac->pcs, phy_dev, speed); }
drivers/net/ethernet/xilinx/xilinx_axienet_main.c +6 -7
@@ -2072,15 +2072,14 @@ static int axienet_probe(struct platform_device *pdev)if (ret) goto cleanup_clk; - lp->phy_node =of_parse_phandle (pdev->dev.of_node,"phy-handle" ,0 ); -if (lp->phy_node) { - ret =axienet_mdio_setup (lp); -if (ret) -dev_warn (&pdev->dev, -"error registering MDIO bus: %d\n" , ret); - } + ret =axienet_mdio_setup (lp); +if (ret) +dev_warn (&pdev->dev, +"error registering MDIO bus: %d\n" , ret); +if (lp->phy_mode ==PHY_INTERFACE_MODE_SGMII || lp->phy_mode ==PHY_INTERFACE_MODE_1000BASEX ) { + lp->phy_node =of_parse_phandle (pdev->dev.of_node,"phy-handle" ,0 );if (!lp->phy_node) {dev_err (&pdev->dev,"phy-handle required for 1000BaseX/SGMII\n" ); ret = -EINVAL ;
drivers/net/macvlan.c +6 -2
@@ -460,8 +460,10 @@ static rx_handler_result_t macvlan_handle_frame(struct sk_buff **pskb)return RX_HANDLER_CONSUMED ; *pskb = skb; eth =eth_hdr (skb); -if (macvlan_forward_source (skb, port, eth->h_source)) +if (macvlan_forward_source (skb, port, eth->h_source)) { +kfree_skb (skb);return RX_HANDLER_CONSUMED ; + } src =macvlan_hash_lookup (port, eth->h_source);if (src && src->mode !=MACVLAN_MODE_VEPA && src->mode !=MACVLAN_MODE_BRIDGE ) {
@@ -480,8 +482,10 @@ static rx_handler_result_t macvlan_handle_frame(struct sk_buff **pskb)return RX_HANDLER_PASS ; } -if (macvlan_forward_source (skb, port, eth->h_source)) +if (macvlan_forward_source (skb, port, eth->h_source)) { +kfree_skb (skb);return RX_HANDLER_CONSUMED ; + }if (macvlan_passthru (port)) vlan =list_first_or_null_rcu (&port->vlans, struct macvlan_dev, list);
drivers/net/mdio/fwnode_mdio.c +5 -0
@@ -43,6 +43,11 @@ int fwnode_mdiobus_phy_device_register(struct mii_bus *mdio,int rc; rc =fwnode_irq_get (child,0 ); +/* Don't wait forever if the IRQ provider doesn't become available, +* just fall back to poll mode +*/ +if (rc == -EPROBE_DEFER ) + rc =driver_deferred_probe_check_state (&phy->mdio.dev);if (rc == -EPROBE_DEFER )return rc;
drivers/net/slip/slip.c +1 -1
@@ -469,7 +469,7 @@ static void sl_tx_timeout(struct net_device *dev, unsigned int txqueue)spin_lock (&sl->lock);if (netif_queue_stopped (dev)) { -if (!netif_running (dev)) +if (!netif_running (dev) || !sl->tty) goto out;/* May be we must check transmitter timeout here ?
drivers/net/tun.c +1 -1
@@ -1106,7 +1106,7 @@ static netdev_tx_t tun_net_xmit(struct sk_buff *skb, struct net_device *dev)/* NETIF_F_LLTX requires to do our own update of trans_start */ queue =netdev_get_tx_queue (dev, txq); - queue->trans_start = jiffies; +txq_trans_cond_update (queue);/* Notify and wake up reader process */ if (tfile->flags &TUN_FASYNC )
drivers/net/usb/aqc111.c +7 -2
@@ -1102,10 +1102,15 @@ static int aqc111_rx_fixup(struct usbnet *dev, struct sk_buff *skb)if (start_of_descs != desc_offset) goto err; -/* self check desc_offset from header*/ -if (desc_offset >= skb_len) +/* self check desc_offset from header and make sure that the +* bounds of the metadata array are inside the SKB +*/ +if (pkt_count *2 + desc_offset >= skb_len) goto err; +/* Packets must not overlap the metadata array */ +skb_trim (skb, desc_offset); +if (pkt_count ==0 ) goto err;
drivers/net/veth.c +1 -1
@@ -320,7 +320,7 @@ static netdev_tx_t veth_xmit(struct sk_buff *skb, struct net_device *dev)rcu_read_lock (); rcv =rcu_dereference (priv->peer); -if (unlikely (!rcv)) { +if (unlikely (!rcv) || !pskb_may_pull (skb,ETH_HLEN )) {kfree_skb (skb); goto drop; }
drivers/net/wireless/ath/ath11k/mac.c +14 -8
@@ -3131,6 +3131,20 @@ static void ath11k_mac_op_bss_info_changed(struct ieee80211_hw *hw, arvif->do_not_send_tmpl = true; else arvif->do_not_send_tmpl = false; + +if (vif->bss_conf.he_support) { + ret =ath11k_wmi_vdev_set_param_cmd (ar, arvif->vdev_id, +WMI_VDEV_PARAM_BA_MODE , +WMI_BA_MODE_BUFFER_SIZE_256 ); +if (ret) +ath11k_warn (ar->ab, +"failed to set BA BUFFER SIZE 256 for vdev: %d\n" , + arvif->vdev_id); +else +ath11k_dbg (ar->ab,ATH11K_DBG_MAC , +"Set BA BUFFER SIZE 256 for VDEV: %d\n" , + arvif->vdev_id); + } }if (changed & (BSS_CHANGED_BEACON_INFO |BSS_CHANGED_BEACON )) {
@@ -3166,14 +3180,6 @@ static void ath11k_mac_op_bss_info_changed(struct ieee80211_hw *hw,if (arvif->is_up && vif->bss_conf.he_support && vif->bss_conf.he_oper.params) { - ret =ath11k_wmi_vdev_set_param_cmd (ar, arvif->vdev_id, -WMI_VDEV_PARAM_BA_MODE , -WMI_BA_MODE_BUFFER_SIZE_256 ); -if (ret) -ath11k_warn (ar->ab, -"failed to set BA BUFFER SIZE 256 for vdev: %d\n" , - arvif->vdev_id); - param_id =WMI_VDEV_PARAM_HEOPS_0_31 ; param_value = vif->bss_conf.he_oper.params; ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
drivers/net/wireless/ath/ath9k/main.c +1 -1
@@ -839,7 +839,7 @@ static bool ath9k_txq_list_has_key(struct list_head *txq_list, u32 keyix)continue ; txinfo =IEEE80211_SKB_CB (bf->bf_mpdu); - fi = (struct ath_frame_info *)&txinfo->rate_driver_data[0 ]; + fi = (struct ath_frame_info *)&txinfo->status.status_driver_data[0 ];if (fi->keyix == keyix)return true; }
drivers/net/wireless/ath/ath9k/xmit.c +21 -12
@@ -141,8 +141,8 @@ static struct ath_frame_info *get_frame_info(struct sk_buff *skb) {struct ieee80211_tx_info *tx_info =IEEE80211_SKB_CB (skb);BUILD_BUG_ON (sizeof (struct ath_frame_info ) > -sizeof (tx_info->rate_driver_data)); -return (struct ath_frame_info *) &tx_info->rate_driver_data[0 ]; +sizeof (tx_info->status.status_driver_data)); +return (struct ath_frame_info *) &tx_info->status.status_driver_data[0 ]; }static void ath_send_bar (struct ath_atx_tid *tid,u16 seqno)
@@ -2542,6 +2542,16 @@ static void ath_tx_complete_buf(struct ath_softc *sc, struct ath_buf *bf,spin_unlock_irqrestore (&sc->tx.txbuflock, flags); } +static void ath_clear_tx_status (struct ieee80211_tx_info *tx_info) +{ +void *ptr = &tx_info->status; + +memset (ptr +sizeof (tx_info->status.rates),0 , +sizeof (tx_info->status) - +sizeof (tx_info->status.rates) - +sizeof (tx_info->status.status_driver_data)); +} +static void ath_tx_rc_status (struct ath_softc *sc,struct ath_buf *bf,struct ath_tx_status *ts,int nframes,int nbad,int txok)
@@ -2553,6 +2563,8 @@ static void ath_tx_rc_status(struct ath_softc *sc, struct ath_buf *bf,struct ath_hw *ah = sc->sc_ah;u8 i, tx_rateindex; +ath_clear_tx_status (tx_info); +if (txok) tx_info->status.ack_signal = ts->ts_rssi;
@@ -2567,6 +2579,13 @@ static void ath_tx_rc_status(struct ath_softc *sc, struct ath_buf *bf, tx_info->status.ampdu_len = nframes; tx_info->status.ampdu_ack_len = nframes - nbad; + tx_info->status.rates[tx_rateindex].count = ts->ts_longretry +1 ; + +for (i = tx_rateindex +1 ; i < hw->max_rates; i++) { + tx_info->status.rates[i].count =0 ; + tx_info->status.rates[i].idx =-1 ; + } +if ((ts->ts_status &ATH9K_TXERR_FILT ) ==0 && (tx_info->flags &IEEE80211_TX_CTL_NO_ACK ) ==0 ) {/*
@@ -2588,16 +2607,6 @@ static void ath_tx_rc_status(struct ath_softc *sc, struct ath_buf *bf, tx_info->status.rates[tx_rateindex].count = hw->max_rate_tries; } - -for (i = tx_rateindex +1 ; i < hw->max_rates; i++) { - tx_info->status.rates[i].count =0 ; - tx_info->status.rates[i].idx =-1 ; - } - - tx_info->status.rates[tx_rateindex].count = ts->ts_longretry +1 ; - -/* we report airtime in ath_tx_count_airtime(), don't report twice */ - tx_info->status.tx_time =0 ; }static void ath_tx_processq (struct ath_softc *sc,struct ath_txq *txq)
drivers/pci/controller/pci-hyperv.c +9 -0
@@ -3404,6 +3404,15 @@ static int hv_pci_probe(struct hv_device *hdev, hbus->bridge->domain_nr = dom;#ifdef CONFIG_X86 hbus->sysdata.domain = dom; +#elif defined(CONFIG_ARM64 ) +/* +* Set the PCI bus parent to be the corresponding VMbus +* device. Then the VMbus device will be assigned as the +* ACPI companion in pcibios_root_bridge_prepare() and +* pci_dma_configure() will propagate device coherence +* information to devices created on the bus. +*/ + hbus->sysdata.parent = hdev->device.parent;#endif hbus->hdev = hdev;
drivers/perf/fsl_imx8_ddr_perf.c +1 -1
@@ -29,7 +29,7 @@#define CNTL_OVER_MASK 0xFFFFFFFE#define CNTL_CSV_SHIFT 24 -#define CNTL_CSV_MASK (0xFF << CNTL_CSV_SHIFT) +#define CNTL_CSV_MASK (0xFFU << CNTL_CSV_SHIFT)#define EVENT_CYCLES_ID 0#define EVENT_CYCLES_COUNTER 0
drivers/regulator/wm8994-regulator.c +39 -3
54 lines not on this page · raw message
drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c +1 -1
@@ -36,7 +36,7 @@#define IBMVSCSIS_VERSION "v0.2" -#define INITIAL_SRP_LIMIT 800 +#define INITIAL_SRP_LIMIT 1024#define DEFAULT_MAX_SECTORS 256#define MAX_TXU 1024 * 1024
drivers/scsi/lpfc/lpfc.h +5 -2
@@ -897,6 +897,11 @@ enum lpfc_irq_chann_mode { NHT_MODE, }; +enum lpfc_hba_bit_flags { +FABRIC_COMANDS_BLOCKED , +HBA_PCI_ERR , +}; +struct lpfc_hba {/* SCSI interface function jump table entries */ struct lpfc_io_buf * (*lpfc_get_scsi_buf)
@@ -1025,7 +1030,6 @@ struct lpfc_hba {* Firmware supports Forced Link Speed * capability */ -#define HBA_PCI_ERR 0x80000/* The PCI slot is offline */ #define HBA_FLOGI_ISSUED 0x100000/* FLOGI was issued */ #define HBA_SHORT_CMF 0x200000/* shorter CMF timer routine */ #define HBA_CGN_DAY_WRAP 0x400000/* HBA Congestion info day wraps */
@@ -1335,7 +1339,6 @@ struct lpfc_hba {atomic_t fabric_iocb_count;struct timer_list fabric_block_timer;unsigned long bit_flags; -#define FABRIC_COMANDS_BLOCKED 0atomic_t num_rsrc_err;atomic_t num_cmd_success;unsigned long last_rsrc_error_time;
drivers/scsi/lpfc/lpfc_crtn.h +3 -0
@@ -652,3 +652,6 @@ struct lpfc_vmid *lpfc_get_vmid_from_hashtable(struct lpfc_vport *vport, uint32_t hash, uint8_t *buf);void lpfc_vmid_vport_cleanup (struct lpfc_vport *vport);int lpfc_issue_els_qfpa (struct lpfc_vport *vport); + +void lpfc_sli_rpi_release (struct lpfc_vport *vport, +struct lpfc_nodelist *ndlp);
drivers/scsi/lpfc/lpfc_hbadisc.c +97 -23
251 lines not on this page · raw message
drivers/scsi/lpfc/lpfc_init.c +63 -25
141 lines not on this page · raw message
drivers/scsi/lpfc/lpfc_sli.c +45 -20
65 lines not on this page · raw message
drivers/scsi/megaraid/megaraid_sas_base.c +7 -0
Lines of this file are not shown. View the raw message.
drivers/scsi/scsi_transport_iscsi.c +105 -63
168 lines not on this page · raw message
drivers/spi/spi-cadence-quadspi.c +12 -34
46 lines not on this page · raw message
drivers/vfio/pci/vfio_pci_core.c +74 -50
124 lines not on this page · raw message
fs/io_uring.c +39 -27
66 lines not on this page · raw message
mm/kfence/report.c +47 -0
47 lines not on this page · raw message
mm/page_io.c +0 -54
54 lines not on this page · raw message
net/sunrpc/xprtrdma/svc_rdma_recvfrom.c +1 -1
Lines of this file are not shown. View the raw message.
scripts/gcc-plugins/latent_entropy_plugin.c +27 -17
44 lines not on this page · raw message
sound/core/memalloc.c +110 -1
111 lines not on this page · raw message
tools/testing/selftests/kvm/include/riscv/processor.h +3 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/kvm/lib/riscv/processor.c +1 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/mqueue/mq_perf_tests.c +17 -8
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.