Linux 6.18.59
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.18.59 kernel.
All users of the 6.18 kernel series must upgrade.
The updated 6.18.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.18.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/netlink/specs/conntrack.yaml | 21 Makefile | 2 arch/arm/boot/dts/ti/omap/dra7xx-clocks.dtsi | 2 arch/nios2/include/asm/checksum.h | 2 arch/s390/pci/pci_sysfs.c | 3 arch/x86/hyperv/hv_init.c | 3 arch/x86/kernel/kvm.c | 32 arch/x86/kvm/mmu.h | 16 arch/x86/kvm/mmu/mmu.c | 1 arch/x86/kvm/mmu/paging_tmpl.h | 2 arch/x86/kvm/svm/svm.c | 10 arch/x86/kvm/vmx/nested.c | 4 block/bsg-lib.c | 13 drivers/accel/rocket/rocket_device.c | 2 drivers/accel/rocket/rocket_device.h | 1 drivers/accel/rocket/rocket_drv.c | 7 drivers/base/regmap/internal.h | 1 drivers/base/regmap/regcache-maple.c | 9 drivers/base/regmap/regcache.c | 18 drivers/gpio/gpio-mxc.c | 36 drivers/gpio/gpio-nct6694.c | 2 drivers/gpio/gpiolib.c | 9 drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 6 drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c | 21 drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 11 drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | 25 drivers/gpu/drm/amd/amdgpu/vce_v3_0.c | 2 drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c | 55 drivers/gpu/drm/drm_exec.c | 73 - drivers/gpu/drm/i915/display/intel_cx0_phy.c | 12 drivers/gpu/drm/i915/display/intel_dmc.c | 76 + drivers/gpu/drm/i915/display/intel_dmc_regs.h | 12 drivers/gpu/drm/panthor/panthor_hw.c | 2 drivers/gpu/drm/ttm/ttm_bo.c | 2 drivers/gpu/drm/vc4/vc4_hdmi.c | 20 drivers/gpu/drm/xe/xe_bo.c | 6 drivers/gpu/drm/xe/xe_exec.c | 7 drivers/gpu/drm/xe/xe_oa.c | 7 drivers/gpu/drm/xe/xe_vm.c | 31 drivers/gpu/drm/xe/xe_vm.h | 2 drivers/hv/channel_mgmt.c | 12 drivers/hv/connection.c | 1 drivers/hv/vmbus_drv.c | 1 drivers/i2c/busses/i2c-qcom-cci.c | 4 drivers/i2c/busses/i2c-qcom-geni.c | 37 drivers/i2c/busses/i2c-viai2c-wmt.c | 2 drivers/md/dm-cache-target.c | 59 drivers/md/dm-crypt.c | 3 drivers/md/dm-ebs-target.c | 3 drivers/md/dm-integrity.c | 6 drivers/net/ethernet/broadcom/genet/bcmgenet.c | 10 drivers/net/ethernet/intel/Kconfig | 1 drivers/net/ethernet/intel/ice/ice.h | 3 drivers/net/ethernet/intel/ice/ice_base.c | 128 - drivers/net/ethernet/intel/ice/ice_ethtool.c | 26 drivers/net/ethernet/intel/ice/ice_lib.c | 16 drivers/net/ethernet/intel/ice/ice_main.c | 21 drivers/net/ethernet/intel/ice/ice_txrx.c | 647 +--------- drivers/net/ethernet/intel/ice/ice_txrx.h | 125 - drivers/net/ethernet/intel/ice/ice_txrx_lib.c | 65 - drivers/net/ethernet/intel/ice/ice_txrx_lib.h | 9 drivers/net/ethernet/intel/ice/ice_xsk.c | 146 -- drivers/net/ethernet/intel/ice/ice_xsk.h | 6 drivers/net/ethernet/intel/ice/virt/queues.c | 6 drivers/net/ethernet/mellanox/mlx5/core/steering/hws/fs_hws.c | 5 drivers/net/wireless/intersil/p54/fwio.c | 42 drivers/pci/pci.c | 15 drivers/pinctrl/pinctrl-amd.c | 9 drivers/pinctrl/qcom/pinctrl-ipq5018.c | 10 drivers/pinctrl/qcom/pinctrl-qcs8300.c | 1 drivers/pinctrl/sunxi/pinctrl-sunxi-dt.c | 1 drivers/power/supply/ds2780_battery.c | 2 drivers/power/supply/generic-adc-battery.c | 9 drivers/power/supply/power_supply_core.c | 26 drivers/s390/net/ctcm_mpc.c | 3 drivers/scsi/libiscsi.c | 14 drivers/scsi/libsas/sas_expander.c | 14 drivers/scsi/mpi3mr/mpi3mr_app.c | 2 drivers/scsi/scsi_transport_fc.c | 6 drivers/scsi/scsi_transport_iscsi.c | 2 drivers/scsi/scsi_transport_sas.c | 6 drivers/scsi/st.c | 18 drivers/scsi/xen-scsifront.c | 1 drivers/soc/tegra/fuse/tegra-apbmisc.c | 2 drivers/spi/spi-tegra114.c | 7 drivers/target/iscsi/iscsi_target_configfs.c | 26 drivers/ufs/core/ufs_bsg.c | 2 fs/afs/internal.h | 2 fs/afs/super.c | 2 fs/autofs/waitq.c | 25 fs/ext4/ext4.h | 2 fs/ext4/extents_status.c | 7 fs/ext4/extents_status.h | 1 fs/ext4/super.c | 13 fs/namei.c | 3 fs/notify/mark.c | 11 fs/ntfs3/ntfs_fs.h | 1 fs/ntfs3/super.c | 66 - fs/ocfs2/dlm/dlmcommon.h | 2 fs/ocfs2/dlm/dlmdebug.c | 5 fs/ocfs2/dlm/dlmrecovery.c | 2 fs/pipe.c | 6 fs/smb/client/cifsfs.c | 10 fs/smb/client/cifssmb.c | 13 fs/smb/client/connect.c | 21 fs/smb/client/file.c | 38 fs/smb/client/smb2ops.c | 35 fs/smb/server/smb2pdu.c | 5 fs/tracefs/event_inode.c | 10 fs/unicode/utf8-core.c | 21 fs/xfs/libxfs/xfs_rtgroup.h | 6 fs/xfs/libxfs/xfs_sb.c | 37 fs/xfs/xfs_aops.c | 3 fs/xfs/xfs_fsmap.c | 2 fs/xfs/xfs_ioctl.c | 2 fs/xfs/xfs_iomap.c | 3 fs/xfs/xfs_iops.c | 2 include/drm/drm_exec.h | 15 include/linux/bsg-lib.h | 3 include/linux/cgroup-defs.h | 5 include/linux/fsnotify_backend.h | 1 include/linux/futex.h | 18 include/linux/ipv6.h | 22 include/linux/maple_tree.h | 4 include/linux/mm_types.h | 3 include/linux/power_supply.h | 16 include/linux/sched/user.h | 8 include/linux/unicode.h | 1 include/net/af_vsock.h | 3 include/net/ipv6.h | 2 include/net/netfilter/nf_tables_ipv6.h | 4 include/net/rose.h | 12 io_uring/cancel.c | 269 ++++ io_uring/cancel.h | 8 io_uring/io_uring.c | 288 ---- io_uring/io_uring.h | 13 io_uring/sqpoll.c | 1 kernel/cgroup/cgroup.c | 6 kernel/events/core.c | 33 kernel/exit.c | 2 kernel/futex/core.c | 75 - kernel/kexec_handover.c | 2 kernel/pid_namespace.c | 2 kernel/printk/printk.c | 2 kernel/sched/ext.c | 13 kernel/sched/ext_idle.c | 50 kernel/sched/ext_internal.h | 5 kernel/trace/ring_buffer.c | 13 kernel/trace/trace.c | 13 kernel/trace/trace_events_filter.c | 9 kernel/trace/trace_events_hist.c | 19 kernel/trace/trace_probe.c | 3 kernel/watch_queue.c | 11 kernel/workqueue.c | 36 lib/crypto/arm64/poly1305-armv8.pl | 2 lib/crypto/poly1305.c | 2 net/ax25/ax25_std_in.c | 36 net/bridge/br_multicast.c | 13 net/bridge/br_netfilter_ipv6.c | 2 net/bridge/netfilter/nf_conntrack_bridge.c | 4 net/core/page_pool.c | 3 net/core/sock.c | 3 net/ipv4/fib_semantics.c | 2 net/ipv4/tcp.c | 18 net/ipv4/tcp_cong.c | 4 net/ipv4/tcp_dctcp.c | 4 net/ipv4/tcp_minisocks.c | 2 net/ipv4/tcp_output.c | 2 net/ipv4/udp.c | 11 net/ipv6/calipso.c | 6 net/ipv6/ip6_input.c | 2 net/ipv6/ip6_offload.c | 7 net/ipv6/output_core.c | 7 net/iucv/af_iucv.c | 42 net/mac802154/ieee802154_i.h | 7 net/mac802154/main.c | 1 net/mac802154/scan.c | 51 net/netfilter/ipvs/ip_vs_xmit.c | 2 net/netfilter/nf_conntrack_ovs.c | 2 net/netfilter/nf_log_syslog.c | 2 net/netfilter/nft_byteorder.c | 51 net/netlink/af_netlink.c | 10 net/rds/rdma_transport.c | 38 net/sched/act_api.c | 11 net/sched/cls_flower.c | 5 net/sched/sch_cake.c | 2 net/sctp/inqueue.c | 6 net/sctp/socket.c | 33 net/tipc/node.c | 2 net/vmw_vsock/af_vsock.c | 49 net/vmw_vsock/virtio_transport_common.c | 9 net/vmw_vsock/vmci_transport.c | 40 samples/pidfd/Makefile | 2 sound/pci/ctxfi/ctatc.c | 16 sound/pci/ctxfi/ctdaio.c | 5 sound/pci/ctxfi/ctdaio.h | 2 sound/soc/amd/yc/pci-acp6x.c | 38 sound/soc/codecs/cs42l52.c | 2 sound/soc/codecs/cs42l56.c | 2 sound/soc/codecs/max98371.c | 2 sound/soc/codecs/nau8822.c | 4 sound/soc/codecs/pcm3168a.c | 2 sound/soc/codecs/wm8978.c | 4 sound/soc/intel/avs/pcm.c | 2 sound/soc/sof/ipc4-topology.c | 16 sound/soc/stm/stm32_spdifrx.c | 2 tools/bootconfig/main.c | 3 tools/gpio/Makefile | 6 tools/power/x86/turbostat/turbostat.c | 24 209 files changed, 2201 insertions(+), 1896 deletions(-)
Abel Vesa (1):
i2c: qcom-geni: Restore the source-clock selection policy
Adriel Santos (1):
pinctrl: qcom: ipq5018: replace gcc_plltest with pwm2 on gpio12
Aleksandr Khromov (3):
ksmbd: fill in FileSysIdentifier in FS_POSIX_INFORMATION
ksmbd: initialize FileSystemControlFlags in FS_CONTROL_INFORMATION
ksmbd: zero the FS_OBJECT_ID_INFORMATION buffer before filling it in
Alexander Gruhlke (1):
PCI: Don't treat ~0 as ready in pci_dev_wait() with RRS SV
Alexander Lobakin (1):
ice: fix broken Rx on VFs
Alexander Stein (1):
gpio: mxc: use BIT() macro
Alexandre Cassen (2):
net/mlx5: HWS, release L2 to L3 tunnel reformats to their own pool net/mlx5: HWS, fix flow meter offset within its bulk
Alexey Charkov (1):
power: supply: core: prevent unregistering a power supply while a callback runs
Alice Mikityanska (1):
net/ipv6: Introduce payload_len helpers
Allison Henderson (1):
net/rds: don't let the rdma_cm destroy an id RDS still owns on route failure
Amirmohammad Eftekhar (1):
KVM: nVMX: Reset MMU back to the root MMU if loading L2 state fails for !VM-Entry
Amit Machhiwal (1):
tracing: Do not initialize tracefs work if tracing is disabled
Andy Shevchenko (1):
regcache: Add ->populate() callback to separate from ->init()
Antoine Huret (1):
perf: Update cgroup time when rotating multiplexed events
Aohan Mei (2):
net: rds: fix uninitialized trans dereference in CM event handler net/sched: cls_flower: validate mask pointer after nla_next()
Aswin Karuvally (1):
s390/ctcm: Prevent XID null dereference
Avi Weiss (1):
ASoC: stm32: spdifrx: fix synchronization state check
Aviv Vaknin (1):
pid_namespace: make zap_pid_ns_processes() freezable
Baokun Li (1):
fs/ntfs3: fix ntfs_mount_options leak in ntfs_fill_super()
Ben Cressey (2):
dm-crypt: fix a tiny race condition in crypt_dec_pending
dm-integrity: fix infinite loop on discard with large tag size
Benjamin Marzinski (1):
dm cache: fix issue with background work locking
Bernard Pidoux (2):
ax25: bound REJ-driven fast retransmits with the existing N2 counter
rose: purge rose_neigh->queue on final teardown
Bobby Eshleman (1):
virtio: set skb owner of virtio_transport_reset_no_sock() reply
Bommu Krishnaiah (1):
drm/xe/oa: Zero OA buffer at allocation
Breno Leitao (1):
workqueue: release pwq pools by pool type
Bryam Vargas (1):
net/iucv: fix the recvmsg window update
Carlos Jones Jr (1):
spi: tegra114: assert CS GPIO for every transfer in a message
Carlos Maiolino (1):
xfs: fix capability check in xfs
Cen Zhang (1):
ocfs2/dlm: Protect the recovery list during debugfs reads
Cen Zhang (Microsoft Security FORGE Labs) (3):
tcp: fix use-after-free in do_tcp_getsockopt(TCP_CONGESTION)
tcp: fix use-after-free in do_tcp_getsockopt(TCP_CC_INFO) io_uring/cancel: don't spin on local work the task can't run
Cen Zhang (Microsoft) (1):
watch_queue: Fix note pool publication race in watch_queue_set_size()
Charles Vosburgh (1):
sctp: validate chunk length in the inqueue parser
Chen Cheng (1):
dm-integrity: require stable writes for internal hash modes
Chengfeng Ye (1):
tipc: protect node reset trace dump with node lock
Christian Brauner (6):
afs: free the super info after a grace period
unicode: free the map after a grace period
eventfs: Free the eventfs_inode after an rcu grace period too
namei: test for a negative dentry the way traverse_mounts() does
ext4: free the sbi after a grace period
ntfs3: free the sbi after a grace period
Christian König (1):
drm/exec: don't immediately add prelocked obj to array of locked objs
Christoph Hellwig (1):
xfs: fix zoned write iomap flags assignments
Daehyeon Ko (3):
sctp: revalidate output stream after association connect wait vsock/virtio: validate packet source for connected sockets vsock/vmci: validate packet source for connected sockets
Dave Stevenson (1):
drm/vc4: hdmi: Move packet RAM enable to PM runtime
David Carlier (2):
ring-buffer: Do not show buffer_meta for CPUs without a buffer
tracing: Take trace_types_lock when dropping the buffer_meta reference
David Oberhollenzer (1):
ARM: dts: ti/omap: dra7: fix PCIe PHY clock divider definition
David Rosca (1):
drm/amdgpu: Fix VCE 3 ring align_mask
Dibin Moolakadan Subrahmanian (2):
drm/i915/dmc: Add sanity check for DMC load address drm/i915/dmc: Harden DMC firmware payload parsing
Dmitry Kandybka (1):
tracing: Fix ignored return value of resize_buffer_duplicate_size()
Dnyaneshwar Bhadane (1):
drm/i915/cx0_phy: Fix ARL-S host bridge detection
Donggeun Yoo (2):
ring-buffer: Fix the sub-buffer array base in rb_meta_subbuf_idx()
tracing: Fix the shift out of bounds in the log2 histogram modifier
EJ Campbell (1):
x86/kvm: Don't consume async #PF flags on a kernel #PF in NMI context
Eric Biggers (1):
lib/crypto: poly1305: Use memzero_explicit() in poly1305_final()
Erik Faye-Lund (1):
drm/panthor: fix immortalis condition
Etienne Perot (1):
cgroup: fix spurious SIGKILL of CLONE_INTO_CGROUP children
Federico Parola (1):
kho: free phys_bits bitmaps using free_page() in __kho_abort()
Florian Schauer (1):
page_pool: keep frag_offset aligned for odd-sized requests
Florian Westphal (1):
netfilter: nft_byteorder: remove multi-register support
Francesco Lavra (1):
regcache: Do not overwrite error code when finalizing cache after error
Frank Sorenson (3):
cifs: don't update i_size in cifs_do_truncate without a cached handle
smb: client: fix heap overflow in cifs_do_set_acl()
cifs: add revalidation on FSCTL failure in smb2_duplicate_extents()
Genjian Zhang (1):
dm-ebs: fix incorrect device offset check in ebs_ctr()
Gilberto Conde (1):
pinctrl: qcom: ipq5018: add missing pwm3 function on gpio13
Greg Kroah-Hartman (1):
Linux 6.18.59
Guangshuo Li (1):
accel/rocket: clear rdev on device init failure
Harin Lee (2):
ALSA: ctxfi: Rename SPDIFI1 to SPDIFI_BAY
ALSA: ctxfi: Use correct DAIO type for da_desc
Haris Okanovic (1):
perf: Fix perf_pmu_migrate_context() leaving events behind
Heyang Tan (1):
wifi: p54: validate firmware record lengths
Hui Su (1):
sched_ext: idle: Respect task affinity in restricted CPU selection
Huiwen He (1):
smb/client: refresh allocation size after duplicate extents
HyeongJun An (6):
ASoC: cs42l56: Put the Limiter Cushion control on the limiter register
ASoC: cs42l52: Fix the NG Type Switch bit
ASoC: pcm3168a: Fix the DAC zero flag polarity bit
ASoC: max98371: Fix the Speaker DHT Min Volume bits
ASoC: wm8978: Fix the 128x oversampling switch bits
ASoC: nau8822: Fix the 128x oversampling switch bits
Hyunwoo Kim (1):
KVM: x86/mmu: Preserve nested TDP shadow page tables if they are used as roots
Ido Schimmel (1):
ipv4: udp: Create exceptions before socket matching
Igor Paunovic (1):
accel/rocket: search every core slot when a core is removed
Ilya Maximets (2):
netlink: specs: fix the conntrack filter type
netlink: specs: add missing mask attributes for conntrack dump
Jann Horn (1):
futex: Fix mm reuse handling for FUT_OFF_MMSHARED
Jens Axboe (3):
io_uring/cancel: move request/task cancelation logic into cancel.c io_uring/cancel: move __io_uring_cancel() into cancel.c io_uring/cancel: move cancelation code from io_uring.c to cancel.c
Jesse Zhang (4):
drm/amdgpu: don't drop the runtime PM reference twice in amdgpu_gpr drm/amdgpu: report the BO alignment in bytes in GEM_LIST_HANDLES drm/amdgpu: keep the eviction fence until the last handle is closed drm/amdgpu: free the userptr ranges when a CS fails after parser_bos
Jinhui Guo (1):
soc/tegra: fuse: Add missing newline to APBMISC error message
Joas Antonio dos Santos (1):
calipso: keep BIG TCP payload_len in calipso_skbuff_setattr()
John Ogness (1):
printk: Postpone kthread startup
Jun Yang (1):
net: bridge: mcast: don't truncate the port group walk on teardown
Jérémy Jean (2):
lib/crypto: arm64: Fix lost Poly1305 carry when resuming NEON state net/sched: fix use-after-free in __tcf_action_put()
Kaiwen Shi (1):
mac802154: fix data race and NULL deref on local->assoc_dev
Karl Mehltretter (1):
power: supply: Fix maintenance charge table kernel-doc
Keith Busch (1):
nios2: fix __wsum type degradation in csum_fold()
Kenneth Feng (1):
drm/amd/pm: add zero fan stop temperature support on smu 14.0.2
Kent Gibson (1):
gpiolib: fix memory leak in gpiod_set_array_value_complex() on error paths
Konrad Dybcio (1):
pinctrl: qcom: qcs8300: Fix intr_target_width
Krystian Kaniewski (1):
ring-buffer: Fix false warning in ring_buffer_map_get_reader()
Kyle Zeng (4):
netlink: reset skb headers before unicast and multicast filtering
pipe: preserve existing fasync readers on writer setup failure
netlink: avoid hashing the network namespace pointer
fsnotify: prevent mark additions during connector teardown
Laurence Oberman (2):
scsi: st: Save the visited block for the partition the drive is in
scsi: st: Fix use-after-free race between st_remove() and st_open()
Lee Jones (1):
tracing/histograms: Reject non-stacktrace fields for synthetic stacktrace fields
Len Brown (4):
tools/power turbostat: Fix fd_perf leak on reset tools/power turbostat: Fix CWF PMT off-by-one tools/power turbostat: Fix PMT error path fd handling tools/power turbostat: Fix add_counter issue if > 24 counters.
Linfeng Sun (1):
scsi: target: iscsi: Fix race in discovery auth updates
Loic Poulain (1):
i2c: qcom-cci: Fix HALT_ACK reset request being dropped
Lorenzo Stoakes (ARM) (1):
perf: Track the perf mlock gift separately
Mario Limonciello (2):
ASoC: amd: yc: disable MSI on resume
pinctrl: amd: Clear S4 wake bits when firmware has _AEI
Martin Kaiser (1):
tracing: probes: error if BTF is required but unavailable
Michael Kelley (2):
x86/hyperv: Avoid using per-cpu output page in hv_apicid_to_vp_index()
Drivers: hv: Don't reset VMBus connection state on error/exit paths
Michael Reeves (1):
regmap: Drop map lock during cache init and exit
Michal Kubiak (3):
ice: remove legacy Rx and construct SKB
ice: drop page splitting and recycling
ice: switch to Page Pool
Michal Luczaj (1):
vsock: treat TCP_CLOSING as once-established
Michal Schmidt (1):
ice: fix crash in ethtool offline loopback test
Ming Yu (1):
gpio: nct6694: Mark the GPIO controller as sleeping
Ming-Hung Tsai (1):
dm cache: fix demotion stats in passthrough mode
Nicolai Buchwitz (1):
net: bcmgenet: unshare the skb before writing the control block
Niklas Schnelle (1):
s390/pci: Fix leak of uninitialized kernel data in SCLP report
Niranjana Vishwanathapura (1):
drm/xe: skip eviction of a BO with no resource
Norbert Szetei (1):
net: psp: do not inherit the Rx association on clone
Pablo Mazzini (1):
pinctrl: sunxi: dt: do not accumulate npins across probe attempts
Paolo Bonzini (1):
KVM: x86/mmu: Cope with the SS bit being set in #NPF exit codes
Paulo Alcantara (3):
smb: client: fix multiuser mount with krb5
smb: client: fix data corruption with concurrent writes and O_TRUNC
smb: client: drain outstanding I/O before truncating on O_TRUNC open
Peng Fan (4):
gpio: mxc: fix race between chained IRQ handler install and probe completion
gpio: mxc: fix both_edges bit operations
gpio: mxc: fix wakeup_pads bit operations
gpio: mxc: fix race between gpiochip registration and IRQ domain setup
Peter Ujfalusi (1):
ASoC: SOF: ipc4-topology: Fix shift-out-of-bounds for aggregated ALH capture
Sasha Levin (3):
samples: pidfd: fix userprogs typo
bootconfig: give the footer size static_assert a message
tools: gpio: fix building from the top level with O=
Sergey Tiraspolsky (1):
ASoC: Intel: avs: Reset the stream unless it is already prepared
Stanley Jhu (1):
scsi: bsg: Pass reply_len to bsg_setup_queue() to fit UFS ARPMB replies
Sung Byeongchan (1):
autofs: ignore notification errors from a replaced pipe
Svyatoslav Ryhel (1):
power: supply: generic-adc-battery: Fix temperature IIO channel conversion
Taeyang Lee (2):
tracing: Check operator stack capacity before pushing
tracing: Keep the predicate limit separate from program capacity
Takashi Iwai (1):
ALSA: ctxfi: Don't enumerate SPDIF1 at DAIO initialization
Tejun Heo (2):
workqueue: Annotate cb_lock nesting when draining a dead BH pool
sched_ext: Fix stall when a task enqueued with SCX_ENQ_LAST lands back on its CPU's local DSQ
Tengda Wu (1):
tracing: Fix hist trigger timestamps for buffered events
Thomas Hellström (1):
drm/xe: Bump LRU for external objects on exec and rebind
Timur Kristóf (1):
drm/amdgpu/sdma3: Work around POLL_REGMEM / FENCE hang
Vadim Nikitushkin (1):
drm/ttm: fix swapped-out resources never leaving their bulk_move range
Waiman Long (1):
Drivers: hv: Avoid infinite retry loop in init_vp_index()
Wentao Liang (1):
i2c: viai2c-wmt: Fix clock leak in wmt_i2c_probe()
Xingui Yang (1):
scsi: libsas: Fix SMP IO deadlock during HA resume
Xueqin Luo (1):
power: supply: ds2780: Fix ds2780_get_capacity() returning raw value
YangWen (2):
ntfs3: fix use-after-free of sbi->options in cmp_fnames
ntfs3: fix double free of sbi->options->nls and clarify ownership of fc->fs_privateYao Kai (1):
workqueue: Fix unbound pool lifetime for pending pwqs
Yehyeong Lee (4):
scsi: xen/scsifront: Check for a NULL shadow entry on a backend response
scsi: libiscsi: Reject a negative task index from parse_pdu_itt
scsi: libiscsi: Validate the ITT reflected in a Reject PDU
scsi: libiscsi: Validate the task named by a management response
Yosry Ahmed (1):
KVM: SVM: Stop toggling virtual VMSAVE/VMLOAD on intercept recalc
Yun Zhou (1):
xfs: don't hold buffer locks across sync transaction commit in xfs_sync_sb_buf
Zihan Xi (1):
ipv4: avoid divide by zero in fib_rebalance
Zqiang (1):
workqueue: Use raise_softirq() to trigger softirq in irq_work handler
Greg Kroah-Hartman
maintainerDocumentation/netlink/specs/conntrack.yaml +18 -3
@@ -360,6 +360,17 @@ attribute-sets: name: tsoff type: u32 byte-order: big-endian + - + name: filter-attrs + attributes: + - + name: orig-flags + type: u32 + doc: bitmask of tuple fields to filter on, original direction + - + name: reply-flags + type: u32 + doc: bitmask of tuple fields to filter on, reply direction - name: conntrack-attrs attributes:
@@ -466,7 +477,7 @@ attribute-sets: - name: filter type: nest - nested-attributes: tuple-attrs + nested-attributes: filter-attrs - name: status-mask type: u32
@@ -591,10 +602,14 @@ operations: request: value: 0x101 attributes: - - mark - - filter + - tuple-orig + - tuple-reply - status + - mark - zone + - mark-mask + - filter + - status-mask reply: value: 0x100 attributes:
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 18 -SUBLEVEL = 58 +SUBLEVEL = 59 EXTRAVERSION = NAME = Baby Opossum Posse
arch/arm/boot/dts/ti/omap/dra7xx-clocks.dtsi +1 -1
@@ -1376,8 +1376,8 @@ optfclk_pciephy_div: clock-optfclk-pciephy-div-8@4a00821c { clocks = <&apll_pcie_ck>; #clock-cells = <0>; reg = <0x021c>; + ti,dividers = <2>, <1>; ti,bit-shift = <8>; - ti,max-div = <2>; }; apll_pcie_clkvcoldo: clock-apll-pcie-clkvcoldo {
arch/nios2/include/asm/checksum.h +1 -1
@@ -27,7 +27,7 @@ static inline __sum16 csum_fold(__wsum sum) "add %0, %0, r8\n" "nor %0, %0, %0\n" : "=r" (sum) - : "r" (sum << 16), "0" (sum) + : "r" ((__force u32)sum << 16), "0" (sum) : "r8");return (__force __sum16 ) sum; }
arch/s390/pci/pci_sysfs.c +3 -0
@@ -154,6 +154,9 @@ static ssize_t report_error_write(struct file *filp, struct kobject *kobj,if (off || (count <sizeof (*report)))return -EINVAL ; +if (count < (report->length +sizeof (*report))) +return -EINVAL ; + ret =sclp_pci_report (report, zdev->fh, zdev->fid);return ret ? ret : count;
arch/x86/hyperv/hv_init.c +2 -1
@@ -713,7 +713,8 @@ int hv_apicid_to_vp_index(u32 apic_id) input->partition_id =HV_PARTITION_ID_SELF ; input->apic_ids[0 ] = apic_id; - output = *this_cpu_ptr (hyperv_pcpu_output_arg); +/* Treat input as having 2 APIC IDs so output is 64-bit aligned */ + output = (void *)input +struct_size (input, apic_ids,2 ); control =HV_HYPERCALL_REP_COMP_1 |HVCALL_GET_VP_INDEX_FROM_APIC_ID ; status =hv_do_hypercall (control, input, output);
arch/x86/kernel/kvm.c +29 -3
@@ -255,11 +255,39 @@ noinstr u32 kvm_read_and_reset_apf_flags(void) }EXPORT_SYMBOL_GPL (kvm_read_and_reset_apf_flags); +static __always_inline bool kvm_apf_reason_pending(void) +{ +return __this_cpu_read (async_pf_enabled) && +__this_cpu_read (apf_reason.flags); +} + noinstr bool __kvm_handle_async_pf(struct pt_regs *regs, u32 token) { -u32 flags =kvm_read_and_reset_apf_flags ();irqentry_state_t state; +u32 flags; + +if (!kvm_apf_reason_pending ()) +return false; + +/* +* The guest does not enable KVM_ASYNC_PF_SEND_ALWAYS, so the host +* delivers async #PF only to user mode (or as a #PF VM-exit, which KVM +* reads itself). A #PF from kernel mode can still arrive between that +* delivery and the read of the reason flags, inside an NMI that +* interrupted it, for instance perf reading user memory for a call +* chain. Such a fault is not async, so leave the async PF flags +* untouched for the outer handler. Outside NMI context, on the other +* hand, async PF flags on a kernel-mode fault mean the host is broken. +*/ +if (!user_mode (regs)) { +if (likely (in_nmi ())) +return false; + state =irqentry_enter (regs); +instrumentation_begin (); +panic ("Host injected async #PF in kernel mode\n" ); + } + flags =kvm_read_and_reset_apf_flags ();if (!flags)return false;
@@ -275,8 +303,6 @@ noinstr bool __kvm_handle_async_pf(struct pt_regs *regs, u32 token)panic ("Host injected async #PF in interrupt disabled region\n" );if (flags &KVM_PV_REASON_PAGE_NOT_PRESENT ) { -if (unlikely (!(user_mode (regs)))) -panic ("Host injected async #PF in kernel mode\n" );/* Page is swapped out by the host. */ kvm_async_pf_task_wait_schedule (token); }else {
arch/x86/kvm/mmu.h +12 -4
@@ -186,8 +186,18 @@ static inline u8 permission_fault(struct kvm_vcpu *vcpu, struct kvm_mmu *mmu, unsigned pte_access, unsigned pte_pkey, u64 access) { - /* strip nested paging fault error codes */ - unsigned int pfec = access; +/* +* Of the error codes that do not contribute to the index in +* mmu->permissions, PK and SS are not supported by shadow paging +* and also not provided to EPT violations, but SS *is* included +* in the NPT exit code. RSVD faults are handled elsewhere. +*/ +unsigned int pfec = access & ~PFERR_SS_MASK ; +if (WARN_ON_ONCE (pfec & ~(PFERR_PRESENT_MASK |PFERR_WRITE_MASK | +PFERR_USER_MASK |PFERR_FETCH_MASK ))) + pfec &= (PFERR_PRESENT_MASK |PFERR_WRITE_MASK | +PFERR_USER_MASK |PFERR_FETCH_MASK ); +unsigned long rflags =kvm_x86_call (get_rflags)(vcpu);/*
@@ -211,8 +221,6 @@ static inline u8 permission_fault(struct kvm_vcpu *vcpu, struct kvm_mmu *mmu,kvm_mmu_refresh_passthrough_bits (vcpu, mmu); fault = (mmu->permissions[index] >> pte_access) &1 ; - -WARN_ON_ONCE (pfec & (PFERR_PK_MASK |PFERR_SS_MASK |PFERR_RSVD_MASK ));if (unlikely (mmu->pkru_mask)) {u32 pkru_bits, offset;
arch/x86/kvm/mmu/mmu.c +1 -0
@@ -2630,6 +2630,7 @@ static int mmu_page_zap_pte(struct kvm *kvm, struct kvm_mmu_page *sp,*/ if (tdp_enabled && invalid_list && child->role.guest_mode && + !child->root_count && !atomic_long_read (&child->parent_ptes.val))return kvm_mmu_prepare_zap_page (kvm, child, invalid_list);
arch/x86/kvm/mmu/paging_tmpl.h +1 -1
@@ -474,7 +474,7 @@ static int FNAME(walk_addr_generic)(struct guest_walker *walker,return 1 ; error: - errcode |= write_fault | user_fault; + errcode |= write_fault | user_fault | (access &PFERR_SS_MASK );if (fetch_fault && (is_efer_nx (mmu) ||is_cr4_smep (mmu))) errcode |=PFERR_FETCH_MASK ;
arch/x86/kvm/svm/svm.c +8 -2
@@ -981,10 +981,14 @@ static void svm_recalc_instruction_intercepts(struct kvm_vcpu *vcpu)svm_set_intercept (svm,INTERCEPT_RDTSCP ); } +/* +* No need to toggle VIRTUAL_VMLOAD_VMSAVE_ENABLE_MASK here, it is +* always set if vls is enabled. If the intercepts are set, the bit is +* meaningless anyway. +*/ if (guest_cpuid_is_intel_compatible (vcpu)) {svm_set_intercept (svm,INTERCEPT_VMLOAD );svm_set_intercept (svm,INTERCEPT_VMSAVE ); - svm->vmcb->control.virt_ext &= ~VIRTUAL_VMLOAD_VMSAVE_ENABLE_MASK ; }else {/* * If hardware supports Virtual VMLOAD VMSAVE then enable it
@@ -993,7 +997,6 @@ static void svm_recalc_instruction_intercepts(struct kvm_vcpu *vcpu)if (vls) {svm_clr_intercept (svm,INTERCEPT_VMLOAD );svm_clr_intercept (svm,INTERCEPT_VMSAVE ); - svm->vmcb->control.virt_ext |=VIRTUAL_VMLOAD_VMSAVE_ENABLE_MASK ; } } }
@@ -1137,6 +1140,9 @@ static void init_vmcb(struct kvm_vcpu *vcpu, bool init_event) svm->vmcb->control.int_ctl |=V_GIF_ENABLE_MASK ; } +if (vls) + svm->vmcb->control.virt_ext |=VIRTUAL_VMLOAD_VMSAVE_ENABLE_MASK ; +if (vcpu->kvm->arch.bus_lock_detection_enabled)svm_set_intercept (svm,INTERCEPT_BUSLOCK );
arch/x86/kvm/vmx/nested.c +3 -1
@@ -3821,8 +3821,10 @@ enum nvmx_vmentry_status nested_vmx_enter_non_root_mode(struct kvm_vcpu *vcpu, vmentry_fail_vmexit:vmx_switch_vmcs (vcpu, &vmx->vmcs01); -if (!from_vmentry) +if (!from_vmentry) { +nested_ept_uninit_mmu_context (vcpu);return NVMX_VMENTRY_VMEXIT ; + }nested_put_vmcs12_pages (vcpu);
block/bsg-lib.c +10 -3
@@ -23,11 +23,14 @@ struct bsg_set {struct bsg_device *bd;bsg_job_fn *job_fn;bsg_timeout_fn *timeout_fn; +unsigned int reply_len; };static int bsg_transport_sg_io_fn (struct request_queue *q,struct sg_io_v4 *hdr,bool open_for_write,unsigned int timeout) { +struct bsg_set *bset = + container_of(q->tag_set, struct bsg_set, tag_set);struct bsg_job *job;struct request *rq;struct bio *bio;
@@ -50,7 +53,7 @@ static int bsg_transport_sg_io_fn(struct request_queue *q, struct sg_io_v4 *hdr, reply = job->reply;memset (job,0 ,sizeof (*job)); job->reply = reply; - job->reply_len =SCSI_SENSE_BUFFERSIZE ; + job->reply_len = bset->reply_len; job->dd_data = job +1 ; job->request_len = hdr->request_len;
@@ -301,9 +304,10 @@ static blk_status_t bsg_queue_rq(struct blk_mq_hw_ctx *hctx,static int bsg_init_rq (struct blk_mq_tag_set *set,struct request *req,unsigned int hctx_idx,unsigned int numa_node) { + struct bsg_set *bset = container_of(set, struct bsg_set, tag_set);struct bsg_job *job =blk_mq_rq_to_pdu (req); - job->reply =kzalloc (SCSI_SENSE_BUFFERSIZE ,GFP_KERNEL ); + job->reply =kzalloc (bset->reply_len,GFP_KERNEL );if (!job->reply)return -ENOMEM ;return 0 ;
@@ -358,10 +362,12 @@ static const struct blk_mq_ops bsg_mq_ops = {* @job_fn: bsg job handler * @timeout: timeout handler function pointer * @dd_job_size: size of LLD data needed for each job +* @reply_len: size of the reply buffer needed for each job */ struct request_queue *bsg_setup_queue (struct device *dev,const char *name,struct queue_limits *lim,bsg_job_fn *job_fn, -bsg_timeout_fn *timeout,int dd_job_size) +bsg_timeout_fn *timeout,int dd_job_size, +unsigned int reply_len) {struct bsg_set *bset;struct blk_mq_tag_set *set;
@@ -374,6 +380,7 @@ struct request_queue *bsg_setup_queue(struct device *dev, const char *name, bset->job_fn = job_fn; bset->timeout_fn = timeout; + bset->reply_len = reply_len; set = &bset->tag_set; set->ops = &bsg_mq_ops;
drivers/accel/rocket/rocket_device.c +2 -0
@@ -31,6 +31,8 @@ struct rocket_device *rocket_device_init(struct platform_device *pdev,if (of_device_is_available (core_node)) num_cores++; + rdev->max_cores = num_cores; + rdev->cores =devm_kcalloc (dev, num_cores,sizeof (*rdev->cores),GFP_KERNEL );if (!rdev->cores)return ERR_PTR (-ENOMEM );
drivers/accel/rocket/rocket_device.h +1 -0
@@ -19,6 +19,7 @@ struct rocket_device {struct rocket_core *cores;unsigned int num_cores; +unsigned int max_cores; }; struct rocket_device *rocket_device_init(struct platform_device *pdev,
drivers/accel/rocket/rocket_drv.c +5 -2
@@ -165,8 +165,11 @@ static int rocket_probe(struct platform_device *pdev)/* First core probing, initialize DRM device. */ rdev =rocket_device_init (drm_dev, &rocket_drm_driver);if (IS_ERR (rdev)) { +int err =PTR_ERR (rdev); +dev_err (&pdev->dev,"failed to initialize rocket device\n" ); -return PTR_ERR (rdev); + rdev =NULL ; +return err; } }
@@ -222,7 +225,7 @@ static int find_core_for_dev(struct device *dev) {struct rocket_device *rdev =dev_get_drvdata (dev); -for (unsigned int core =0 ; core < rdev->num_cores; core++) { +for (unsigned int core =0 ; core < rdev->max_cores; core++) {if (dev == rdev->cores[core].dev)return core; }
drivers/base/regmap/internal.h +1 -0
@@ -186,6 +186,7 @@ struct regcache_ops {enum regcache_type type;int (*init)(struct regmap *map);int (*exit)(struct regmap *map); +int (*populate)(struct regmap *map);#ifdef CONFIG_DEBUG_FS void (*debugfs_init)(struct regmap *map);#endif
drivers/base/regmap/regcache-maple.c +7 -2
@@ -295,16 +295,21 @@ static int regcache_maple_exit(struct regmap *map)struct maple_tree *mt = map->cache;MA_STATE (mas, mt,0 ,UINT_MAX );unsigned int *entry; +unsigned long flags;/* if we've already been called then just return */ if (!mt)return 0 ; -mas_lock (&mas); +/* +* Register access may take the Maple lock from hard IRQ context, so +* preserve its IRQ-safe lockdep state during teardown. +*/ +mas_lock_irqsave (&mas, flags);mas_for_each (&mas, entry,UINT_MAX )kfree (entry);__mt_destroy (mt); -mas_unlock (&mas); +mas_unlock_irqrestore (&mas, flags);kfree (mt); map->cache =NULL ;
drivers/base/regmap/regcache.c +14 -4
@@ -215,14 +215,26 @@ int regcache_init(struct regmap *map, const struct regmap_config *config)if (map->cache_ops->init) {dev_dbg (map->dev,"Initializing %s cache\n" , map->cache_ops->name); - map->lock (map->lock_arg); ret = map->cache_ops->init (map); - map->unlock (map->lock_arg);if (ret) goto err_free; } + +if (map->num_reg_defaults && map->cache_ops->populate) { +dev_dbg (map->dev,"Populating %s cache\n" , map->cache_ops->name); + map->lock (map->lock_arg); + ret = map->cache_ops->populate (map); + map->unlock (map->lock_arg); +if (ret) + goto err_exit; + }return 0 ; +err_exit: +if (map->cache_ops->exit) { +dev_dbg (map->dev,"Destroying %s cache\n" , map->cache_ops->name); + map->cache_ops->exit (map); + } err_free:kfree (map->reg_defaults);if (map->cache_free)
@@ -245,9 +257,7 @@ void regcache_exit(struct regmap *map)if (map->cache_ops->exit) {dev_dbg (map->dev,"Destroying %s cache\n" , map->cache_ops->name); - map->lock (map->lock_arg); map->cache_ops->exit (map); - map->unlock (map->lock_arg); } }
drivers/gpio/gpio-mxc.c +22 -14
@@ -7,6 +7,7 @@// Authors: Daniel Mack, Juergen Beisert. // Copyright (C) 2004-2010 Freescale Semiconductor, Inc. All Rights Reserved. +#include <linux/bitops.h> #include <linux/cleanup.h> #include <linux/clk.h> #include <linux/err.h>
@@ -68,11 +69,11 @@ struct mxc_gpio_port {struct irq_domain *domain;struct gpio_generic_chip gen_gc;struct device *dev; -u32 both_edges; +unsigned long both_edges;struct mxc_gpio_reg_saved gpio_saved_reg;bool power_off; -u32 wakeup_pads;bool is_pad_wakeup; +unsigned long wakeup_pads;u32 pad_type[32 ];const struct mxc_gpio_hwdata *hwdata; };
@@ -168,7 +169,7 @@ static int gpio_set_irq_type(struct irq_data *d, u32 type)int edge;void __iomem *reg = port->base; - port->both_edges &= ~(1 << gpio_idx); +clear_bit (gpio_idx, &port->both_edges);switch (type) {case IRQ_TYPE_EDGE_RISING : edge =GPIO_INT_RISE_EDGE ;
@@ -188,7 +189,7 @@ static int gpio_set_irq_type(struct irq_data *d, u32 type) edge =GPIO_INT_HIGH_LEV ;pr_debug ("mxc: set GPIO %d to high trigger\n" , gpio_idx); } - port->both_edges |=1 << gpio_idx; +set_bit (gpio_idx, &port->both_edges); }break ;case IRQ_TYPE_LEVEL_LOW :
@@ -259,7 +260,7 @@ static void mxc_gpio_irq_handler(struct mxc_gpio_port *port, u32 irq_stat)while (irq_stat !=0 ) {int irqoffset =fls (irq_stat) -1 ; -if (port->both_edges & (1 << irqoffset)) +if (test_bit (irqoffset, &port->both_edges))mxc_flip_edge (port, irqoffset);generic_handle_domain_irq (port->domain, irqoffset);
@@ -330,16 +331,18 @@ static int gpio_set_wake_irq(struct irq_data *d, u32 enable) ret =enable_irq_wake (port->irq_high); else ret =enable_irq_wake (port->irq); - port->wakeup_pads |= (1 << gpio_idx); }else {if (port->irq_high && (gpio_idx >=16 )) ret =disable_irq_wake (port->irq_high);else ret =disable_irq_wake (port->irq); - port->wakeup_pads &= ~(1 << gpio_idx); } +if (ret) +return ret; -return ret; +assign_bit (gpio_idx, &port->wakeup_pads, enable); + +return 0 ; }static int mxc_gpio_init_gc (struct mxc_gpio_port *port,int irq_base)
@@ -474,8 +477,6 @@ static int mxc_gpio_probe(struct platform_device *pdev) }else port->mx_irq_handler = mx3_gpio_irq_handler; -mxc_update_irq_chained_handler (port, true); - config.dev = &pdev->dev; config.sz =4 ; config.dat = port->base +GPIO_PSR ;
@@ -499,10 +500,6 @@ static int mxc_gpio_probe(struct platform_device *pdev)else /* silence boot time warning */ port->gen_gc.gc.base =-1 ; - err =devm_gpiochip_add_data (&pdev->dev, &port->gen_gc.gc, port); -if (err) - goto out_bgio; - irq_base =devm_irq_alloc_descs (&pdev->dev,-1 ,0 ,32 ,numa_node_id ());if (irq_base <0 ) { err = irq_base;
@@ -523,8 +520,19 @@ static int mxc_gpio_probe(struct platform_device *pdev)if (err <0 ) goto out_irqdomain_remove; +/* +* Register the GPIO chip last: devm_gpiochip_add_data() makes the +* chip visible to consumers immediately, so the IRQ domain and +* generic irq chip must be ready before any to_irq() call. +*/ + err =devm_gpiochip_add_data (&pdev->dev, &port->gen_gc.gc, port); +if (err) + goto out_irqdomain_remove; +list_add_tail (&port->node, &mxc_gpio_ports); +mxc_update_irq_chained_handler (port, true); +platform_set_drvdata (pdev, port);pm_runtime_put_autosuspend (&pdev->dev);
drivers/gpio/gpio-nct6694.c +1 -1
@@ -444,7 +444,7 @@ static int nct6694_gpio_probe(struct platform_device *pdev) data->gpio.set_config = nct6694_set_config; data->gpio.init_valid_mask = nct6694_init_valid_mask; data->gpio.base =-1 ; - data->gpio.can_sleep = false; + data->gpio.can_sleep = true; data->gpio.owner =THIS_MODULE ; data->gpio.ngpio =NCT6694_NR_GPIO ;
drivers/gpio/gpiolib.c +5 -4
@@ -3798,16 +3798,17 @@ int gpiod_set_array_value_complex(bool raw, bool can_sleep, }while ((i < array_size) &&gpio_device_chip_cmp (desc_array[i]->gdev, guard.gc));/* push collected bits to outputs */ -if (count !=0 ) { + ret =0 ; +if (count !=0 ) ret =gpiochip_set_multiple (guard.gc, mask, bits); -if (ret) -return ret; - }if (mask != fastpath_mask)bitmap_free (mask);if (bits != fastpath_bits)bitmap_free (bits); + +if (ret) +return ret; }return 0 ; }
drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +6 -0
@@ -1448,6 +1448,7 @@ static void amdgpu_cs_parser_fini(struct amdgpu_cs_parser *parser)int amdgpu_cs_ioctl (struct drm_device *dev,void *data,struct drm_file *filp) {struct amdgpu_device *adev =drm_to_adev (dev); +struct amdgpu_bo_list_entry *e;struct amdgpu_cs_parser parser;int r;
@@ -1502,6 +1503,11 @@ int amdgpu_cs_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)return 0 ; error_backoff: +/* amdgpu_cs_submit() only drops the ranges once it got that far. */ +amdgpu_bo_list_for_each_userptr_entry (e, parser.bo_list) { +amdgpu_ttm_tt_get_user_pages_done (e->bo->tbo.ttm, e->range); + e->range =NULL ; + }mutex_unlock (&parser.bo_list->bo_list_mutex); error_fini:
drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c +3 -18
@@ -1164,7 +1164,6 @@ static ssize_t amdgpu_debugfs_gpr_read(struct file *f, char __user *buf, {struct amdgpu_device *adev = f->f_inode->i_private;int r; -ssize_t result =0 ;uint32_t offset, se, sh, cu, wave, simd, thread, bank, *data;if (size >4096 || size &3 || *pos &3 )
@@ -1209,25 +1208,11 @@ static ssize_t amdgpu_debugfs_gpr_read(struct file *f, char __user *buf,pm_runtime_mark_last_busy (adev_to_drm (adev)->dev);pm_runtime_put_autosuspend (adev_to_drm (adev)->dev); +amdgpu_virt_disable_access_debugfs (adev); -while (size) { -uint32_t value; - - value = data[result >>2 ]; - r =put_user (value, (uint32_t *)buf); -if (r) { -amdgpu_virt_disable_access_debugfs (adev); - goto err; - } - - result +=4 ; - buf +=4 ; - size -=4 ; - } - + r =copy_to_user (buf, data, size) ? -EFAULT : size;kfree (data); -amdgpu_virt_disable_access_debugfs (adev); -return result; +return r; err:pm_runtime_put_autosuspend (adev_to_drm (adev)->dev);
drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c +7 -4
@@ -325,11 +325,14 @@ static void amdgpu_gem_object_close(struct drm_gem_object *obj, goto out_unlock; } + bo_va =amdgpu_vm_bo_find (vm, bo); +/* the fence is attached once per bo_va, so keep it for other handles */ +if (bo_va && --bo_va->ref_count) + goto out_unlock; +if (!amdgpu_vm_is_bo_always_valid (vm, bo))amdgpu_eviction_fence_detach (&fpriv->evf_mgr, bo); - - bo_va =amdgpu_vm_bo_find (vm, bo); -if (!bo_va || --bo_va->ref_count) +if (!bo_va) goto out_unlock;amdgpu_vm_bo_del (adev, bo_va);
@@ -1217,7 +1220,7 @@ int amdgpu_gem_list_handles_ioctl(struct drm_device *dev, void *data, bo_entry->alloc_flags = bo->flags &AMDGPU_GEM_CREATE_SETTABLE_MASK ; bo_entry->preferred_domains = bo->preferred_domains; bo_entry->gem_handle = id; - bo_entry->alignment = bo->tbo.page_alignment; + bo_entry->alignment = (u64 )bo->tbo.page_alignment <<PAGE_SHIFT ;if (bo->tbo.base.import_attach) bo_entry->flags |=AMDGPU_GEM_LIST_HANDLES_FLAG_IS_IMPORT ;
drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c +21 -4
@@ -457,6 +457,9 @@ static void sdma_v3_0_ring_emit_hdp_flush(struct amdgpu_ring *ring)else ref_and_mask =REG_SET_FIELD (ref_and_mask,GPU_HDP_FLUSH_DONE ,SDMA1 ,1 ); +/* Hang workaround */ +amdgpu_ring_write (ring,SDMA_PKT_NOP_HEADER_OP (SDMA_OP_NOP )); +amdgpu_ring_write (ring,SDMA_PKT_HEADER_OP (SDMA_OP_POLL_REGMEM ) |SDMA_PKT_POLL_REGMEM_HEADER_HDP_FLUSH (1 ) |SDMA_PKT_POLL_REGMEM_HEADER_FUNC (3 ));/* == */
@@ -484,6 +487,10 @@ static void sdma_v3_0_ring_emit_fence(struct amdgpu_ring *ring, u64 addr, u64 se unsigned flags) {bool write64bit = flags &AMDGPU_FENCE_FLAG_64BIT ; + +/* Hang workaround */ +amdgpu_ring_write (ring,SDMA_PKT_NOP_HEADER_OP (SDMA_OP_NOP )); +/* write the fence */ amdgpu_ring_write (ring,SDMA_PKT_HEADER_OP (SDMA_OP_FENCE ));amdgpu_ring_write (ring,lower_32_bits (addr));
@@ -492,7 +499,11 @@ static void sdma_v3_0_ring_emit_fence(struct amdgpu_ring *ring, u64 addr, u64 se/* optionally write high bits as well */ if (write64bit) { +/* Hang workaround */ +amdgpu_ring_write (ring,SDMA_PKT_NOP_HEADER_OP (SDMA_OP_NOP )); + addr +=4 ; +amdgpu_ring_write (ring,SDMA_PKT_HEADER_OP (SDMA_OP_FENCE ));amdgpu_ring_write (ring,lower_32_bits (addr));amdgpu_ring_write (ring,upper_32_bits (addr));
@@ -1033,6 +1044,9 @@ static void sdma_v3_0_ring_emit_pipeline_sync(struct amdgpu_ring *ring)uint32_t seq = ring->fence_drv.sync_seq;uint64_t addr = ring->fence_drv.gpu_addr; +/* Hang workaround */ +amdgpu_ring_write (ring,SDMA_PKT_NOP_HEADER_OP (SDMA_OP_NOP )); +/* wait for idle */ amdgpu_ring_write(ring, SDMA_PKT_HEADER_OP(SDMA_OP_POLL_REGMEM) | SDMA_PKT_POLL_REGMEM_HEADER_HDP_FLUSH(0) |
@@ -1061,6 +1075,9 @@ static void sdma_v3_0_ring_emit_vm_flush(struct amdgpu_ring *ring, {amdgpu_gmc_emit_flush_gpu_tlb (ring, vmid, pd_addr); +/* Hang workaround */ +amdgpu_ring_write (ring,SDMA_PKT_NOP_HEADER_OP (SDMA_OP_NOP )); +/* wait for flush */ amdgpu_ring_write(ring, SDMA_PKT_HEADER_OP(SDMA_OP_POLL_REGMEM) | SDMA_PKT_POLL_REGMEM_HEADER_HDP_FLUSH(0) |
@@ -1563,11 +1580,11 @@ static const struct amdgpu_ring_funcs sdma_v3_0_ring_funcs = { .get_wptr = sdma_v3_0_ring_get_wptr, .set_wptr = sdma_v3_0_ring_set_wptr, .emit_frame_size = -6 +/* sdma_v3_0_ring_emit_hdp_flush */ +6 +1 +/* sdma_v3_0_ring_emit_hdp_flush */ 3 +/* hdp invalidate */ -6 +/* sdma_v3_0_ring_emit_pipeline_sync */ -VI_FLUSH_GPU_TLB_NUM_WREG *3 +6 +/* sdma_v3_0_ring_emit_vm_flush */ - 10 + 10 + 10, /* sdma_v3_0_ring_emit_fence x3 for user fence, vm fence */ +6 +1 +/* sdma_v3_0_ring_emit_pipeline_sync */ +VI_FLUSH_GPU_TLB_NUM_WREG *3 +6 +1 +/* sdma_v3_0_ring_emit_vm_flush */ + (10 + 1) * 3, /* sdma_v3_0_ring_emit_fence x3 for user fence, vm fence */ .emit_ib_size = 7 + 6, /* sdma_v3_0_ring_emit_ib */ .emit_ib = sdma_v3_0_ring_emit_ib, .emit_fence = sdma_v3_0_ring_emit_fence,
drivers/gpu/drm/amd/amdgpu/vce_v3_0.c +1 -1
@@ -955,7 +955,7 @@ static const struct amdgpu_ring_funcs vce_v3_0_ring_phys_funcs = {static const struct amdgpu_ring_funcs vce_v3_0_ring_vm_funcs = { .type =AMDGPU_RING_TYPE_VCE , - .align_mask =0xf , + .align_mask =0x1f , .nop =VCE_CMD_NO_OP , .support_64bit_ptrs = false, .no_user_fence = true,
drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c +54 -1
97 lines not on this page · raw message
drivers/gpu/drm/drm_exec.c +43 -30
114 lines not on this page · raw message
drivers/gpu/drm/i915/display/intel_cx0_phy.c +7 -5
@@ -2202,12 +2202,14 @@ static void intel_c10pll_dump_hw_state(struct intel_display *display,static bool is_arrowlake_s_by_host_bridge (void ) {struct pci_dev *pdev =NULL ; -u16 host_bridge_pci_dev_id; - -while ((pdev =pci_get_class (PCI_CLASS_BRIDGE_HOST <<8 , pdev))) - host_bridge_pci_dev_id = pdev->device; +while ((pdev =pci_get_class (PCI_CLASS_BRIDGE_HOST <<8 , pdev))) { +if (IS_ARROWLAKE_S_BY_HOST_BRIDGE_ID (pdev->device)) { +pci_dev_put (pdev); +return true; + } + } -return pdev &&IS_ARROWLAKE_S_BY_HOST_BRIDGE_ID (host_bridge_pci_dev_id); +return false; }static u16 intel_c20_hdmi_tmds_tx_cgf_1 (struct intel_crtc_state *crtc_state)
drivers/gpu/drm/i915/display/intel_dmc.c +71 -5
109 lines not on this page · raw message
drivers/gpu/drm/i915/display/intel_dmc_regs.h +12 -0
@@ -521,6 +521,18 @@ enum pipedmc_event_id {#define TGL_PIPE_MMIO_END (dmc_id) _PICK_EVEN(((dmc_id) - 1), _TGL_PIPEA_MMIO_END,\ _TGL_PIPEB_MMIO_END) +/* For DMC header version v3*/ +#define DMC_MAIN_PROGRAM_BASE_START 0x80000 +#define DMC_MAIN_PROGRAM_BASE_END 0x86fff +#define DMC_PIPEA_PROGRAM_BASE_START 0x90000 +#define DMC_PIPEA_PROGRAM_BASE_END 0x96fff +#define DMC_PIPEB_PROGRAM_BASE_START 0x98000 +#define DMC_PIPEB_PROGRAM_BASE_END 0x9efff +#define DMC_PIPEC_PROGRAM_BASE_START 0x52000 +#define DMC_PIPEC_PROGRAM_BASE_END 0x53fff +#define DMC_PIPED_PROGRAM_BASE_START 0x59000 +#define DMC_PIPED_PROGRAM_BASE_END 0x5afff +#define SKL_DMC_DC3_DC5_COUNT _MMIO(0x80030)#define SKL_DMC_DC5_DC6_COUNT _MMIO(0x8002C)#define BXT_DMC_DC3_DC5_COUNT _MMIO(0x80038)
drivers/gpu/drm/panthor/panthor_hw.c +1 -1
@@ -27,7 +27,7 @@ static char *get_gpu_model_name(struct panthor_device *ptdev)case GPU_PROD_ID_MAKE (10 ,7 ):return "Mali-G610" ;case GPU_PROD_ID_MAKE (11 ,2 ): -if (shader_core_count >10 && ray_intersection) +if (shader_core_count >=10 && ray_intersection)return "Mali-G715-Immortalis" ;else if (shader_core_count >=7 )return "Mali-G715" ;
drivers/gpu/drm/ttm/ttm_bo.c +1 -1
@@ -1176,7 +1176,7 @@ ttm_bo_swapout_cb(struct ttm_lru_walk *walk, struct ttm_buffer_object *bo)if (ttm_tt_is_populated (tt)) { ret =ttm_tt_swapout (bdev, tt, swapout_walk->gfp_flags); -if (!ret) { +if (ret >0 ) {spin_lock (&bdev->lru_lock);ttm_resource_del_bulk_move_unevictable (bo->resource, bo);ttm_resource_move_to_lru_tail (bo->resource);
drivers/gpu/drm/vc4/vc4_hdmi.c +11 -9
@@ -816,7 +816,7 @@ static void vc4_hdmi_encoder_post_crtc_disable(struct drm_encoder *encoder,spin_lock_irqsave (&vc4_hdmi->hw_lock, flags); -HDMI_WRITE (HDMI_RAM_PACKET_CONFIG ,0 ); +HDMI_WRITE (HDMI_RAM_PACKET_CONFIG ,VC4_HDMI_RAM_PACKET_ENABLE );HDMI_WRITE (HDMI_VID_CTL ,HDMI_READ (HDMI_VID_CTL ) |VC4_HD_VID_CTL_CLRRGB );
@@ -1588,9 +1588,6 @@ static void vc4_hdmi_encoder_post_crtc_enable(struct drm_encoder *encoder,WARN_ONCE (ret,"Timeout waiting for " "VC4_HDMI_SCHEDULER_CONTROL_HDMI_ACTIVE\n" ); }else { -HDMI_WRITE (HDMI_RAM_PACKET_CONFIG , -HDMI_READ (HDMI_RAM_PACKET_CONFIG ) & - ~(VC4_HDMI_RAM_PACKET_ENABLE ));HDMI_WRITE (HDMI_SCHEDULER_CONTROL ,HDMI_READ (HDMI_SCHEDULER_CONTROL ) & ~VC4_HDMI_SCHEDULER_CONTROL_MODE_HDMI );
@@ -1609,9 +1606,6 @@ static void vc4_hdmi_encoder_post_crtc_enable(struct drm_encoder *encoder,WARN_ON (!(HDMI_READ (HDMI_SCHEDULER_CONTROL ) &VC4_HDMI_SCHEDULER_CONTROL_HDMI_ACTIVE )); -HDMI_WRITE (HDMI_RAM_PACKET_CONFIG , -VC4_HDMI_RAM_PACKET_ENABLE ); -spin_unlock_irqrestore (&vc4_hdmi->hw_lock, flags); vc4_hdmi->packet_ram_enabled = true;
@@ -3072,6 +3066,11 @@ static int vc5_hdmi_init_resources(struct drm_device *drm,static int vc4_hdmi_runtime_suspend (struct device *dev) {struct vc4_hdmi *vc4_hdmi =dev_get_drvdata (dev); +unsigned long flags; + +spin_lock_irqsave (&vc4_hdmi->hw_lock, flags); +HDMI_WRITE (HDMI_RAM_PACKET_CONFIG ,0 ); +spin_unlock_irqrestore (&vc4_hdmi->hw_lock, flags);clk_disable_unprepare (vc4_hdmi->audio_clock);clk_disable_unprepare (vc4_hdmi->hsm_clock);
@@ -3082,9 +3081,8 @@ static int vc4_hdmi_runtime_suspend(struct device *dev)static int vc4_hdmi_runtime_resume (struct device *dev) {struct vc4_hdmi *vc4_hdmi =dev_get_drvdata (dev); -unsigned long __maybe_unused flags; +unsigned long rate, flags;u32 __maybe_unused value; -unsigned long rate;int ret; ret =clk_prepare_enable (vc4_hdmi->hsm_clock);
@@ -3130,6 +3128,10 @@ static int vc4_hdmi_runtime_resume(struct device *dev) }#endif +spin_lock_irqsave (&vc4_hdmi->hw_lock, flags); +HDMI_WRITE (HDMI_RAM_PACKET_CONFIG ,VC4_HDMI_RAM_PACKET_ENABLE ); +spin_unlock_irqrestore (&vc4_hdmi->hw_lock, flags); +return 0 ; err_disable_clk:
drivers/gpu/drm/xe/xe_bo.c +6 -0
@@ -313,6 +313,12 @@ static void xe_evict_flags(struct ttm_buffer_object *tbo,return ; } +/* No resource: nothing is placed/mapped, so there is nothing to evict. */ +if (!tbo->resource) { + placement->num_placement =0 ; +return ; + } + bo =ttm_to_xe_bo (tbo);if (bo->flags &XE_BO_FLAG_CPU_ADDR_MIRROR ) { *placement = sys_placement;
drivers/gpu/drm/xe/xe_exec.c +2 -5
@@ -346,11 +346,8 @@ int xe_exec_ioctl(struct drm_device *dev, void *data, struct drm_file *file)xe_sched_job_push (job);xe_vm_reactivate_rebind (vm); -if (!err && !xe_vm_in_lr_mode (vm)) { -spin_lock (&xe->ttm.lru_lock); -ttm_lru_bulk_move_tail (&vm->lru_bulk_move); -spin_unlock (&xe->ttm.lru_lock); - } +if (!err && !xe_vm_in_lr_mode (vm)) +xe_vm_bump_lru (vm, exec);if (mode ==EXEC_MODE_LR )xe_hw_engine_group_resume_faulting_lr_jobs (group);
drivers/gpu/drm/xe/xe_oa.c +7 -0
@@ -893,6 +893,13 @@ static int xe_oa_alloc_oa_buffer(struct xe_oa_stream *stream, size_t size)if (IS_ERR (bo))return PTR_ERR (bo); +/* +* ttm_bo_type_kernel BOs are not zeroed on allocation, so the buffer can +* hold stale data from previously freed pages. Since the OA buffer is +* mmap'able by userspace, clear it here to avoid leaking kernel memory. +*/ +xe_map_memset (stream->oa->xe, &bo->vmap,0 ,0 ,xe_bo_size (bo)); + stream->oa_buffer.bo = bo;/* mmap implementation requires OA buffer to be in system memory */ xe_assert (stream->oa->xe, bo->vmap.is_iomem ==0 );
drivers/gpu/drm/xe/xe_vm.c +28 -3
@@ -376,6 +376,33 @@ int xe_vm_validate_rebind(struct xe_vm *vm, struct drm_exec *exec,return 0 ; } +/** +* xe_vm_bump_lru() - Bump the LRU position of BOs used by a submission +* @vm: The vm for which we are bumping LRUs. +* @exec: The struct drm_exec with the locked GEM objects. +* +* Move the VM's private BOs, and all external objects locked by @exec, +* to the LRU tail. Private BOs are moved in bulk using @vm's +* &xe_vm.lru_bulk_move. External objects, which may be shared with other +* VMs, are not part of that bulk move and are bumped individually. +*/ +void xe_vm_bump_lru (struct xe_vm *vm,struct drm_exec *exec) +{ +spinlock_t *lru_lock = &vm->xe->ttm.lru_lock; +struct drm_gem_object *obj; + +spin_lock (lru_lock); +ttm_lru_bulk_move_tail (&vm->lru_bulk_move); +drm_exec_for_each_locked_object (exec, obj) { +if (!drm_gpuvm_is_extobj (&vm->gpuvm, obj)) +continue ; + +ttm_bo_move_to_lru_tail (&gem_to_xe_bo (obj)->ttm); +cond_resched_lock (lru_lock); + } +spin_unlock (lru_lock); +} +static int xe_preempt_work_begin (struct drm_exec *exec,struct xe_vm *vm,bool *done) {
@@ -524,9 +551,7 @@ static void preempt_rebind_work_func(struct work_struct *w)#undef retry_required -spin_lock (&vm->xe->ttm.lru_lock); -ttm_lru_bulk_move_tail (&vm->lru_bulk_move); -spin_unlock (&vm->xe->ttm.lru_lock); +xe_vm_bump_lru (vm, &exec);/* Point of no return. */ arm_preempt_fences (vm, &preempt_fences);
drivers/gpu/drm/xe/xe_vm.h +2 -0
@@ -265,6 +265,8 @@ int xe_vm_lock_vma(struct drm_exec *exec, struct xe_vma *vma);int xe_vm_validate_rebind (struct xe_vm *vm,struct drm_exec *exec,unsigned int num_fences); +void xe_vm_bump_lru (struct xe_vm *vm,struct drm_exec *exec); +struct dma_fence *xe_vm_bind_kernel_bo (struct xe_vm *vm,struct xe_bo *bo,struct xe_exec_queue *q,u64 addr,enum xe_cache_level cache_lvl);
drivers/hv/channel_mgmt.c +9 -3
@@ -744,13 +744,14 @@ static void init_vp_index(struct vmbus_channel *channel)u32 i, ncpu =num_online_cpus ();cpumask_var_t available_mask;struct cpumask *allocated_mask; +const struct cpumask *node_mask;const struct cpumask *hk_mask =housekeeping_cpumask (HK_TYPE_MANAGED_IRQ );u32 target_cpu;int numa_node;if (!perf_chn || !alloc_cpumask_var (&available_mask,GFP_KERNEL ) || -cpumask_empty (hk_mask)) { + !cpumask_intersects (hk_mask, cpu_online_mask)) {/* * If the channel is not a performance critical * channel, bind it to VMBUS_CONNECT_CPU.
@@ -772,14 +773,19 @@ static void init_vp_index(struct vmbus_channel *channel) next_numa_node_id =0 ;continue ; } -if (cpumask_empty (cpumask_of_node (numa_node))) +/* +* Try next NUMA node if current NUMA node has no CPU +* or doesn't contain any housekeeping CPU. +*/ + node_mask =cpumask_of_node (numa_node); +if (!cpumask_intersects (node_mask, hk_mask))continue ;break ; } allocated_mask = &hv_context.hv_numa_map[numa_node]; retry: -cpumask_xor (available_mask, allocated_mask,cpumask_of_node (numa_node)); +cpumask_xor (available_mask, allocated_mask, node_mask);cpumask_and (available_mask, available_mask, hk_mask);if (cpumask_empty (available_mask)) {
drivers/hv/connection.c +0 -1
@@ -340,7 +340,6 @@ int vmbus_connect(void) cleanup:pr_err ("Unable to connect to host\n" ); - vmbus_connection.conn_state =DISCONNECTED ;vmbus_disconnect ();kfree (msginfo);
drivers/hv/vmbus_drv.c +0 -1
@@ -3018,7 +3018,6 @@ static void __exit vmbus_exit(void)hv_remove_kexec_handler ();hv_remove_crash_handler (); - vmbus_connection.conn_state =DISCONNECTED ;hv_stimer_global_cleanup ();vmbus_disconnect ();if (vmbus_irq ==-1 ) {
drivers/i2c/busses/i2c-qcom-cci.c +2 -2
@@ -167,12 +167,12 @@ static irqreturn_t cci_isr(int irq, void *dev) }if (unlikely (val &CCI_IRQ_STATUS_0_I2C_M0_Q0Q1_HALT_ACK )) { - reset =CCI_RESET_CMD_M0_MASK ; + reset |=CCI_RESET_CMD_M0_MASK ; ret =IRQ_HANDLED ; }if (unlikely (val &CCI_IRQ_STATUS_0_I2C_M1_Q0Q1_HALT_ACK )) { - reset =CCI_RESET_CMD_M1_MASK ; + reset |=CCI_RESET_CMD_M1_MASK ; ret =IRQ_HANDLED ; }
drivers/i2c/busses/i2c-qcom-geni.c +20 -17
@@ -169,28 +169,31 @@ static const struct geni_i2c_clk_fld geni_i2c_clk_map_32mhz[] = {static int geni_i2c_clk_map_idx (struct geni_i2c_dev *gi2c) {const struct geni_i2c_clk_fld *itr; -unsigned long res_freq; +unsigned long req_freq, res_freq; +int ret;/* -* Frequency counter tables are calibrated for a specific source -* clock frequency and are not valid for any multiple of it -* (e.g. 64 MHz, 128 MHz). -* Use exact=true and verify res_freq matches req_freq literally -* to reject harmonics: a 64 MHz clock that divides evenly to -* 32 MHz would pass exact matching but produce double the intended -* I2C frequency with these counter values. +* Use 32 MHz only if already selected, otherwise use 19.2 MHz. +* Preferring 32 MHz merely because DFS supports it breaks I2C +* transfers on X1E80100 CRD. */ -if (!geni_se_clk_freq_match (&gi2c->se,GENI_SE_CLK_32MHZ , - &gi2c->clk_idx, &res_freq, true) && - res_freq ==GENI_SE_CLK_32MHZ ) { +if (clk_get_rate (gi2c->se.clk) ==GENI_SE_CLK_32MHZ ) { + req_freq =GENI_SE_CLK_32MHZ ; itr = geni_i2c_clk_map_32mhz; - }else if (!geni_se_clk_freq_match (&gi2c->se,GENI_SE_CLK_19P2MHZ , - &gi2c->clk_idx, &res_freq, true) && - res_freq ==GENI_SE_CLK_19P2MHZ ) { - itr = geni_i2c_clk_map_19p2mhz; }else { -dev_err (gi2c->se.dev, -"Unsupported SE source clock: must be exactly 32 MHz or 19.2 MHz\n" ); + req_freq =GENI_SE_CLK_19P2MHZ ; + itr = geni_i2c_clk_map_19p2mhz; + } + + ret =geni_se_clk_freq_match (&gi2c->se, req_freq, &gi2c->clk_idx, + &res_freq, true); +if (ret) +return dev_err_probe (gi2c->se.dev, ret, +"Failed to find SE source clock %lu Hz\n" , + req_freq); +if (res_freq != req_freq) { +dev_err (gi2c->se.dev,"Unsupported SE source clock %lu Hz\n" , + res_freq);return -EINVAL ; }
drivers/i2c/busses/i2c-viai2c-wmt.c +1 -1
@@ -117,7 +117,7 @@ static int wmt_i2c_probe(struct platform_device *pdev)return dev_err_probe (&pdev->dev, err,"failed to request irq %i\n" , i2c->irq); - i2c->clk =of_clk_get (np,0 ); + i2c->clk =devm_clk_get (&pdev->dev,NULL );if (IS_ERR (i2c->clk))return dev_err_probe (&pdev->dev,PTR_ERR (i2c->clk),"unable to request clock\n" );
drivers/md/dm-cache-target.c +31 -28
129 lines not on this page · raw message
drivers/md/dm-crypt.c +1 -2
@@ -1820,7 +1820,6 @@ static void crypt_dec_pending(struct dm_crypt_io *io) {struct crypt_config *cc = io->cc;struct bio *base_bio = io->base_bio; -blk_status_t error = io->error;if (!atomic_dec_and_test (&io->io_pending))return ;
@@ -1842,7 +1841,7 @@ static void crypt_dec_pending(struct dm_crypt_io *io)else kfree (io->integrity_metadata); - base_bio->bi_status = error; + base_bio->bi_status = io->error;bio_endio (base_bio); }
drivers/md/dm-ebs-target.c +1 -2
@@ -265,8 +265,7 @@ static int ebs_ctr(struct dm_target *ti, unsigned int argc, char **argv) r = -EINVAL ;if (sscanf (argv[1 ],"%llu%c" , &tmp, &dummy) !=1 || - tmp != (sector_t )tmp || - (sector_t )tmp >= ti->len) { + tmp != (sector_t )tmp) { ti->error ="Invalid device offset sector" ; goto bad; }
drivers/md/dm-integrity.c +5 -1
@@ -1979,7 +1979,7 @@ static void integrity_metadata(struct work_struct *w)if (unlikely (dio->op ==REQ_OP_DISCARD )) {unsigned int bi_size = dio->bio_details.bi_iter.bi_size; -unsigned int max_size =likely (checksums != checksums_onstack) ?PAGE_SIZE :HASH_MAX_DIGESTSIZE ; +unsigned int max_size =likely (checksums != checksums_onstack) ?PAGE_SIZE :sizeof (checksums_onstack);unsigned int max_blocks = (max_size - extra_space) / ic->tag_size;sector_t sector = dio->range.logical_sector;
@@ -4179,6 +4179,10 @@ static void dm_integrity_io_hints(struct dm_target *ti, struct queue_limits *lim limits->discard_granularity = ic->sectors_per_block <<SECTOR_SHIFT ; } +if (ic->internal_hash && + (ic->mode =='D' || ic->mode =='B' || ic->mode =='I' )) + limits->features |=BLK_FEAT_STABLE_WRITES ; +if (!ic->internal_hash) {struct blk_integrity *bi = &limits->integrity;
drivers/net/ethernet/broadcom/genet/bcmgenet.c +10 -0
@@ -2149,6 +2149,16 @@ static netdev_tx_t bcmgenet_xmit(struct sk_buff *skb, struct net_device *dev) goto out; } +/* We store Tx state in the control block, so the skb must not be +* shared, but ether_setup() leaves IFF_TX_SKB_SHARING set. +*/ + skb =skb_share_check (skb,GFP_ATOMIC ); +if (!skb) { +BCMGENET_STATS64_INC ((&ring->stats64), dropped); + ret =NETDEV_TX_OK ; + goto out; + } +/* Retain how many bytes will be sent on the wire, without TSB inserted * by transmit checksum offload */
drivers/net/ethernet/intel/Kconfig +1 -0
@@ -296,6 +296,7 @@ config ICE depends on GNSS || GNSS = n select AUXILIARY_BUS select DIMLIB + select LIBETH_XDP select LIBIE select LIBIE_ADMINQ select LIBIE_FWLOG if DEBUG_FS
drivers/net/ethernet/intel/ice/ice.h +2 -1
@@ -374,6 +374,8 @@ struct ice_vsi {spinlock_t arfs_lock;/* protects aRFS hash table and filter state */ atomic_t *arfs_last_fltr_id; +u16 max_frame; +struct ice_aqc_vsi_props info;/* VSI properties */ struct ice_vsi_vlan_info vlan_info;/* vlan config to be restored */
@@ -509,7 +511,6 @@ enum ice_pf_flags {ICE_FLAG_MOD_POWER_UNSUPPORTED ,ICE_FLAG_PHY_FW_LOAD_FAILED ,ICE_FLAG_ETHTOOL_CTXT ,/* set when ethtool holds RTNL lock */ -ICE_FLAG_LEGACY_RX ,ICE_FLAG_VF_TRUE_PROMISC_ENA ,ICE_FLAG_MDD_AUTO_RESET_VF , ICE_FLAG_VF_VLAN_PRUNING,
drivers/net/ethernet/intel/ice/ice_base.c +47 -81
226 lines not on this page · raw message
drivers/net/ethernet/intel/ice/ice_ethtool.c +13 -13
@@ -10,6 +10,7 @@#include "ice_lib.h" #include "ice_dcb_lib.h" #include <net/dcbnl.h> +#include <net/libeth/rx.h> struct ice_stats {char stat_string[ETH_GSTRING_LEN ];
@@ -340,7 +341,6 @@ static const struct ice_priv_flag ice_gstrings_priv_flags[] = { ICE_FLAG_VF_TRUE_PROMISC_ENA),ICE_PRIV_FLAG ("mdd-auto-reset-vf" ,ICE_FLAG_MDD_AUTO_RESET_VF ), ICE_PRIV_FLAG("vf-vlan-pruning", ICE_FLAG_VF_VLAN_PRUNING), - ICE_PRIV_FLAG("legacy-rx", ICE_FLAG_LEGACY_RX), };#define ICE_PRIV_FLAG_ARRAY_SIZE ARRAY_SIZE(ice_gstrings_priv_flags)
@@ -1223,8 +1223,9 @@ static int ice_diag_send(struct ice_tx_ring *tx_ring, u8 *data, u16 size)*/ static int ice_lbtest_receive_frames (struct ice_rx_ring *rx_ring) { -struct ice_rx_buf *rx_buf; +struct libeth_fqe *rx_buf;int valid_frames, i; +struct page *page;u8 *received_buf; valid_frames =0 ;
@@ -1239,8 +1240,10 @@ static int ice_lbtest_receive_frames(struct ice_rx_ring *rx_ring) cpu_to_le16(BIT(ICE_RX_FLEX_DESC_STATUS0_EOF_S))))) continue; - rx_buf = &rx_ring->rx_buf[i]; - received_buf =page_address (rx_buf->page) + rx_buf->page_offset; + rx_buf = &rx_ring->rx_fqes[i]; + page =__netmem_to_page (rx_buf->netmem); + received_buf =page_address (page) + rx_buf->offset + + page->pp->p.offset;if (ice_lbtest_check_frame (received_buf)) valid_frames++;
@@ -1278,6 +1281,10 @@ static u64 ice_loopback_test(struct net_device *netdev) test_vsi->netdev = netdev; tx_ring = test_vsi->tx_rings[0 ]; rx_ring = test_vsi->rx_rings[0 ]; +/* Dummy q_vector and napi. Fill the minimum required for +* ice_rxq_pp_create(). +*/ + rx_ring->q_vector->napi.dev = netdev;if (ice_lbtest_prepare_rings (test_vsi)) { ret =2 ;
@@ -1848,10 +1855,6 @@ static int ice_set_priv_flags(struct net_device *netdev, u32 flags)ice_nway_reset (netdev); } } -if (test_bit (ICE_FLAG_LEGACY_RX , change_flags)) { -/* down and up VSI so that changes of Rx cfg are reflected. */ -ice_down_up (vsi); - }/* don't allow modification of this flag when a single VF is in * promiscuous mode because it's not supported */
@@ -3309,7 +3312,8 @@ ice_set_ringparam(struct net_device *netdev, struct ethtool_ringparam *ring, rx_rings[i].count = new_rx_cnt; rx_rings[i].cached_phctime = pf->ptp.cached_phc_time; rx_rings[i].desc =NULL ; - rx_rings[i].rx_buf =NULL ; + rx_rings[i].xdp_buf =NULL ; +/* this is to allow wr32 to have something to write to * during early allocation of Rx buffers */
@@ -3318,10 +3322,6 @@ ice_set_ringparam(struct net_device *netdev, struct ethtool_ringparam *ring, err =ice_setup_rx_ring (&rx_rings[i]);if (err) goto rx_unwind; - -/* allocate Rx buffers */ - err =ice_alloc_rx_bufs (&rx_rings[i], -ICE_RX_DESC_UNUSED (&rx_rings[i])); rx_unwind:if (err) {while (i) {
drivers/net/ethernet/intel/ice/ice_lib.c +10 -6
@@ -107,10 +107,6 @@ static int ice_vsi_alloc_arrays(struct ice_vsi *vsi)if (!vsi->rxq_map) goto err_rxq_map; -/* There is no need to allocate q_vectors for a loopback VSI. */ -if (vsi->type ==ICE_VSI_LB ) -return 0 ; -/* allocate memory for q_vector pointers */ vsi->q_vectors =devm_kcalloc (dev, vsi->num_q_vectors,sizeof (*vsi->q_vectors),GFP_KERNEL );
@@ -239,6 +235,8 @@ static void ice_vsi_set_num_qs(struct ice_vsi *vsi)case ICE_VSI_LB : vsi->alloc_txq =1 ; vsi->alloc_rxq =1 ; +/* A dummy q_vector, no actual IRQ. */ + vsi->num_q_vectors =1 ;break ;default :dev_warn (ice_pf_to_dev (pf),"Unknown VSI type %d\n" , vsi_type);
@@ -1431,7 +1429,6 @@ static int ice_vsi_alloc_rings(struct ice_vsi *vsi) ring->reg_idx = vsi->rxq_map[i]; ring->vsi = vsi; ring->netdev = vsi->netdev; - ring->dev = dev; ring->count = vsi->num_rx_desc; ring->cached_phctime = pf->ptp.cached_phc_time;
@@ -2425,14 +2422,21 @@ static int ice_vsi_cfg_def(struct ice_vsi *vsi) }break ;case ICE_VSI_LB : - ret =ice_vsi_alloc_rings (vsi); + ret =ice_vsi_alloc_q_vectors (vsi);if (ret) goto unroll_vsi_init; + ret =ice_vsi_alloc_rings (vsi); +if (ret) + goto unroll_alloc_q_vector; + ret =ice_vsi_alloc_ring_stats (vsi);if (ret) goto unroll_vector_base; +/* Simply map the dummy q_vector to the only rx_ring */ + vsi->rx_rings[0 ]->q_vector = vsi->q_vectors[0 ]; +break ;default :/* clean up the resources and exit */
drivers/net/ethernet/intel/ice/ice_main.c +3 -18
@@ -37,6 +37,8 @@ static const char ice_copyright[] = "Copyright (c) 2018, Intel Corporation.";#define ICE_DDP_PKG_FILE ICE_DDP_PKG_PATH "ice.pkg"MODULE_DESCRIPTION (DRV_SUMMARY ); +MODULE_IMPORT_NS ("LIBETH" ); +MODULE_IMPORT_NS ("LIBETH_XDP" );MODULE_IMPORT_NS ("LIBIE" );MODULE_IMPORT_NS ("LIBIE_ADMINQ" );MODULE_IMPORT_NS ("LIBIE_FWLOG" );
@@ -2957,10 +2959,7 @@ int ice_vsi_determine_xdp_res(struct ice_vsi *vsi)*/ static int ice_max_xdp_frame_size (struct ice_vsi *vsi) { -if (test_bit (ICE_FLAG_LEGACY_RX , vsi->back->flags)) -return ICE_RXBUF_1664 ; -else -return ICE_RXBUF_3072 ; +return ICE_RXBUF_3072 ; }/**
@@ -3018,19 +3017,11 @@ ice_xdp_setup_prog(struct ice_vsi *vsi, struct bpf_prog *prog, } }xdp_features_set_redirect_target (vsi->netdev, true); -/* reallocate Rx queues that are used for zero-copy */ - xdp_ring_err =ice_realloc_zc_buf (vsi, true); -if (xdp_ring_err) -NL_SET_ERR_MSG_MOD (extack,"Setting up XDP Rx resources failed" ); }else if (ice_is_xdp_ena_vsi (vsi) && !prog) {xdp_features_clear_redirect_target (vsi->netdev); xdp_ring_err =ice_destroy_xdp_rings (vsi,ICE_XDP_CFG_FULL );if (xdp_ring_err)NL_SET_ERR_MSG_MOD (extack,"Freeing XDP Tx resources failed" ); -/* reallocate Rx queues that were used for zero-copy */ - xdp_ring_err =ice_realloc_zc_buf (vsi, false); -if (xdp_ring_err) -NL_SET_ERR_MSG_MOD (extack,"Freeing XDP Rx resources failed" ); } resume_if:
@@ -7879,12 +7870,6 @@ int ice_change_mtu(struct net_device *netdev, int new_mtu) frame_size - ICE_ETH_PKT_HDR_PAD);return -EINVAL ; } - }else if (test_bit (ICE_FLAG_LEGACY_RX , pf->flags)) { -if (new_mtu +ICE_ETH_PKT_HDR_PAD >ICE_MAX_FRAME_LEGACY_RX ) { -netdev_err (netdev,"Too big MTU for legacy-rx; Max is %d\n" , -ICE_MAX_FRAME_LEGACY_RX -ICE_ETH_PKT_HDR_PAD ); -return -EINVAL ; - } }/* if a reset is in progress, wait for some time for it to complete */
drivers/net/ethernet/intel/ice/ice_txrx.c +78 -569
869 lines not on this page · raw message
drivers/net/ethernet/intel/ice/ice_txrx.h +9 -116
207 lines not on this page · raw message
drivers/net/ethernet/intel/ice/ice_txrx_lib.c +41 -24
26 lines not on this page · raw message
drivers/net/ethernet/intel/ice/ice_txrx_lib.h +0 -9
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/ice/ice_xsk.c +21 -125
146 lines not on this page · raw message
drivers/net/ethernet/intel/ice/ice_xsk.h +3 -3
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/ice/virt/queues.c +4 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/steering/hws/fs_hws.c +3 -2
Lines of this file are not shown. View the raw message.
drivers/net/wireless/intersil/p54/fwio.c +37 -5
42 lines not on this page · raw message
drivers/pinctrl/sunxi/pinctrl-sunxi-dt.c +1 -0
Lines of this file are not shown. View the raw message.
drivers/power/supply/generic-adc-battery.c +7 -2
Lines of this file are not shown. View the raw message.
drivers/power/supply/power_supply_core.c +25 -1
Lines of this file are not shown. View the raw message.
drivers/target/iscsi/iscsi_target_configfs.c +19 -7
Lines of this file are not shown. View the raw message.
fs/ntfs3/super.c +51 -15
66 lines not on this page · raw message
io_uring/cancel.c +269 -0
269 lines not on this page · raw message
io_uring/io_uring.c +4 -284
288 lines not on this page · raw message
kernel/futex/core.c +42 -33
75 lines not on this page · raw message
kernel/sched/ext_idle.c +39 -11
50 lines not on this page · raw message
net/bridge/netfilter/nf_conntrack_bridge.c +2 -2
Lines of this file are not shown. View the raw message.
net/iucv/af_iucv.c +25 -17
42 lines not on this page · raw message
net/mac802154/scan.c +38 -13
51 lines not on this page · raw message
net/netfilter/nft_byteorder.c +20 -31
51 lines not on this page · raw message
net/vmw_vsock/af_vsock.c +40 -9
49 lines not on this page · raw message
net/vmw_vsock/virtio_transport_common.c +8 -1
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.