Linux 6.12.6
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.12.6 kernel.
All users of the 6.12 kernel series must upgrade.
The updated 6.12.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.12.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/networking/ip-sysctl.rst | 6 Documentation/power/runtime_pm.rst | 4 Makefile | 2 arch/arm64/kvm/sys_regs.c | 55 + arch/riscv/include/asm/kfence.h | 4 arch/riscv/kernel/setup.c | 2 arch/riscv/mm/init.c | 7 arch/x86/events/intel/ds.c | 2 arch/x86/include/asm/processor.h | 2 arch/x86/include/asm/static_call.h | 15 arch/x86/include/asm/sync_core.h | 6 arch/x86/include/asm/xen/hypercall.h | 36 arch/x86/kernel/callthunks.c | 5 arch/x86/kernel/cpu/common.c | 38 arch/x86/kernel/static_call.c | 9 arch/x86/xen/enlighten.c | 64 + arch/x86/xen/enlighten_hvm.c | 13 arch/x86/xen/enlighten_pv.c | 4 arch/x86/xen/enlighten_pvh.c | 7 arch/x86/xen/xen-asm.S | 50 - arch/x86/xen/xen-head.S | 106 +- arch/x86/xen/xen-ops.h | 9 block/blk-cgroup.c | 6 block/blk-iocost.c | 9 block/blk-mq-sysfs.c | 16 block/blk-mq.c | 127 ++ block/blk-sysfs.c | 4 block/blk-zoned.c | 524 ++++------- drivers/acpi/acpica/evxfregn.c | 2 drivers/acpi/nfit/core.c | 7 drivers/acpi/resource.c | 6 drivers/ata/sata_highbank.c | 1 drivers/bluetooth/btmtk.c | 20 drivers/clk/clk-en7523.c | 5 drivers/crypto/hisilicon/debugfs.c | 4 drivers/gpio/gpio-graniterapids.c | 52 - drivers/gpio/gpio-ljca.c | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 17 drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 13 drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c | 2 drivers/gpu/drm/amd/amdkfd/kfd_crat.c | 24 drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 15 drivers/gpu/drm/amd/amdkfd/kfd_process.c | 23 drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c | 12 drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c | 1 drivers/gpu/drm/drm_panic_qr.rs | 1 drivers/gpu/drm/i915/display/intel_color.c | 30 drivers/gpu/drm/i915/i915_gpu_error.c | 18 drivers/gpu/drm/i915/i915_scheduler.c | 2 drivers/gpu/drm/xe/tests/xe_migrate.c | 4 drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c | 8 drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h | 1 drivers/gpu/drm/xe/xe_pt.c | 3 drivers/gpu/drm/xe/xe_reg_sr.c | 31 drivers/gpu/drm/xe/xe_reg_sr_types.h | 6 drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c | 2 drivers/iommu/intel/cache.c | 34 drivers/iommu/intel/iommu.c | 4 drivers/md/dm-zoned-reclaim.c | 6 drivers/net/bonding/bond_main.c | 10 drivers/net/dsa/microchip/ksz_common.c | 42 drivers/net/dsa/ocelot/felix_vsc9959.c | 17 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 14 drivers/net/ethernet/broadcom/bnxt/bnxt.h | 9 drivers/net/ethernet/chelsio/cxgb4/cxgb4.h | 2 drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c | 2 drivers/net/ethernet/chelsio/cxgb4/t4_hw.c | 5 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_domain.c | 4 drivers/net/ethernet/microchip/sparx5/sparx5_main.c | 11 drivers/net/ethernet/microchip/sparx5/sparx5_port.c | 2 drivers/net/ethernet/microsoft/mana/gdma_main.c | 6 drivers/net/ethernet/mscc/ocelot_ptp.c | 209 ++-- drivers/net/ethernet/qualcomm/qca_spi.c | 26 drivers/net/ethernet/qualcomm/qca_spi.h | 1 drivers/net/ethernet/renesas/rswitch.c | 85 + drivers/net/ethernet/renesas/rswitch.h | 14 drivers/net/team/team_core.c | 11 drivers/net/virtio_net.c | 24 drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c | 2 drivers/net/xen-netfront.c | 5 drivers/ptp/ptp_kvm_x86.c | 6 drivers/regulator/axp20x-regulator.c | 36 drivers/spi/spi-aspeed-smc.c | 10 drivers/spi/spi-rockchip.c | 14 drivers/tty/serial/sh-sci.c | 29 drivers/ufs/core/ufshcd.c | 1 drivers/usb/core/hcd.c | 8 drivers/usb/dwc2/hcd.c | 19 drivers/usb/dwc3/dwc3-imx8mp.c | 30 drivers/usb/dwc3/dwc3-xilinx.c | 5 drivers/usb/gadget/function/f_midi2.c | 6 drivers/usb/gadget/function/u_serial.c | 9 drivers/usb/host/ehci-sh.c | 9 drivers/usb/host/max3421-hcd.c | 16 drivers/usb/misc/onboard_usb_dev.c | 4 drivers/usb/typec/anx7411.c | 66 - drivers/usb/typec/ucsi/ucsi.c | 6 drivers/virtio/virtio_ring.c | 6 fs/smb/client/inode.c | 5 fs/smb/server/auth.c | 2 fs/smb/server/mgmt/user_session.c | 6 fs/smb/server/server.c | 4 fs/smb/server/smb2pdu.c | 27 fs/xfs/libxfs/xfs_btree.c | 33 fs/xfs/libxfs/xfs_btree.h | 2 fs/xfs/libxfs/xfs_ialloc_btree.c | 4 fs/xfs/libxfs/xfs_symlink_remote.c | 4 fs/xfs/scrub/agheader.c | 6 fs/xfs/scrub/agheader_repair.c | 6 fs/xfs/scrub/fscounters.c | 2 fs/xfs/scrub/ialloc.c | 4 fs/xfs/scrub/refcount.c | 2 fs/xfs/scrub/symlink_repair.c | 3 fs/xfs/scrub/trace.h | 2 fs/xfs/xfs_bmap_util.c | 2 fs/xfs/xfs_file.c | 8 fs/xfs/xfs_rtalloc.c | 2 fs/xfs/xfs_trans.c | 19 include/linux/blkdev.h | 5 include/linux/bpf.h | 19 include/linux/compiler.h | 37 include/linux/dsa/ocelot.h | 1 include/linux/netdev_features.h | 7 include/linux/static_call.h | 6 include/linux/virtio.h | 3 include/net/bluetooth/bluetooth.h | 10 include/net/lapb.h | 2 include/net/mac80211.h | 4 include/net/net_namespace.h | 1 include/net/netfilter/nf_tables.h | 4 include/soc/mscc/ocelot.h | 2 kernel/bpf/btf.c | 149 +++ kernel/bpf/verifier.c | 79 - kernel/sched/deadline.c | 2 kernel/static_call_inline.c | 2 kernel/trace/bpf_trace.c | 11 kernel/trace/trace_uprobe.c | 6 mm/slub.c | 21 net/batman-adv/translation-table.c | 58 - net/bluetooth/hci_event.c | 33 net/bluetooth/hci_sock.c | 14 net/bluetooth/iso.c | 69 + net/bluetooth/l2cap_sock.c | 20 net/bluetooth/rfcomm/sock.c | 9 net/bluetooth/sco.c | 40 net/core/net_namespace.c | 20 net/core/sock_map.c | 6 net/dsa/tag_ocelot_8021q.c | 2 net/ipv4/tcp_output.c | 6 net/mac80211/cfg.c | 9 net/mac80211/ieee80211_i.h | 49 - net/mac80211/iface.c | 12 net/mac80211/mlme.c | 2 net/mac80211/util.c | 23 net/netfilter/nf_tables_api.c | 32 net/netfilter/xt_IDLETIMER.c | 52 - net/sched/sch_netem.c | 22 net/tipc/udp_media.c | 7 net/unix/af_unix.c | 1 net/wireless/nl80211.c | 2 net/wireless/sme.c | 1 rust/Makefile | 15 sound/core/control_led.c | 14 sound/pci/hda/patch_realtek.c | 1 sound/soc/amd/yc/acp6x-mach.c | 13 sound/soc/codecs/tas2781-i2c.c | 2 sound/soc/fsl/fsl_spdif.c | 2 sound/soc/fsl/fsl_xcvr.c | 2 sound/soc/intel/boards/sof_sdw.c | 8 sound/usb/quirks.c | 2 tools/lib/perf/evlist.c | 18 tools/objtool/check.c | 9 tools/perf/builtin-ftrace.c | 3 tools/perf/util/build-id.c | 4 tools/perf/util/machine.c | 2 tools/testing/selftests/arm64/abi/syscall-abi-asm.S | 32 tools/testing/selftests/bpf/progs/test_tp_btf_nullable.c | 6 tools/testing/selftests/bpf/progs/verifier_btf_ctx_access.c | 4 tools/testing/selftests/bpf/progs/verifier_d_path.c | 4 tools/testing/selftests/drivers/net/mlxsw/sharedbuffer.sh | 55 - tools/testing/selftests/net/netfilter/rpath.sh | 18 182 files changed, 2197 insertions(+), 1291 deletions(-)
Alan Borzeszkowski (5):
gpio: graniterapids: Fix GPIO Ack functionality
gpio: graniterapids: Fix vGPIO driver crash
gpio: graniterapids: Fix incorrect BAR assignment
gpio: graniterapids: Determine if GPIO pad can be used by driver
gpio: graniterapids: Check if GPIO line can be used for IRQs
Alexandre Ghiti (2):
riscv: Fix wrong usage of __pa() on a fixmap address
riscv: Fix IPIs usage in kfence_protect_page()
Andrew Martin (1):
drm/amdkfd: Dereference null return value
Anumula Murali Mohan Reddy (1):
cxgb4: use port number to set mac addr
Arnaldo Carvalho de Melo (1):
perf machine: Initialize machine->env to address a segfault
Benjamin Lin (1):
wifi: mac80211: fix station NSS capability initialization order
Björn Töpel (1):
riscv: mm: Do not call pmd dtor on vmemmap page table teardown
Charles Keepax (1):
ASoC: Intel: sof_sdw: Add space for a terminator into DAIs array
Chenghai Huang (1):
crypto: hisilicon/debugfs - fix the struct pointer incorrectly offset problem
Christian König (2):
drm/amdgpu: fix UVD contiguous CS mapping problem drm/amdgpu: fix when the cleaner shader is emitted
Christian Loehle (1):
spi: rockchip: Fix PM runtime count on no-op cs
Christian Marangi (1):
clk: en7523: Fix wrong BUS clock for EN7581
Christophe JAILLET (1):
spi: aspeed: Fix an error handling path in aspeed_spi_[read|write]_user()
Claudiu Beznea (1):
serial: sh-sci: Check if TX data was written to device in .tx_empty()
Damien Le Moal (5):
block: Switch to using refcount_t for zone write plugs
block: Use a zone write plug BIO work for REQ_NOWAIT BIOs
dm: Fix dm-zoned-reclaim zone write pointer alignment
block: Prevent potential deadlocks in zone write plug error recovery
block: Ignore REQ_NOWAIT for zone reset and zone finish operations
Dan Carpenter (1):
net/mlx5: DR, prevent potential error pointer dereference
Daniel Borkmann (5):
net, team, bonding: Add netdev_base_features helper
bonding: Fix initial {vlan,mpls}_feature set in bond_compute_features
bonding: Fix feature propagation of NETIF_F_GSO_ENCAP_ALL
team: Fix initial vlan_feature set in __team_compute_features
team: Fix feature propagation of NETIF_F_GSO_ENCAP_ALL
Daniel Machon (2):
net: sparx5: fix FDMA performance issue
net: sparx5: fix the maximum frame length register
Daniele Ceraolo Spurio (1):
drm/xe: Call invalidation_fence_fini for PT inval fences in error state
Danielle Ratson (3):
selftests: mlxsw: sharedbuffer: Remove h1 ingress test case
selftests: mlxsw: sharedbuffer: Remove duplicate test cases
selftests: mlxsw: sharedbuffer: Ensure no extra packets are counted
Daniil Tatianin (1):
ACPICA: events/evxfregn: don't release the ContextMutex that was never acquired
Darrick J. Wong (9):
xfs: set XFS_SICK_INO_SYMLINK_ZAPPED explicitly when zapping a symlink
xfs: update btree keys correctly when _insrec splits an inode root block
xfs: don't drop errno values when we fail to ficlone the entire range
xfs: return a 64-bit block count from xfs_btree_count_blocks
xfs: fix null bno_hint handling in xfs_rtallocate_rtg
xfs: return from xfs_symlink_verify early on V4 filesystems
xfs: fix scrub tracepoints when inode-rooted btrees are involved
xfs: only run precommits once per transaction object
xfs: unlock inodes when erroring out of xfs_trans_alloc_dir
David (Ming Qiang) Wu (1):
amdgpu/uvd: get ring reference from rq scheduler
David Howells (1):
cifs: Fix rmdir failure due to ongoing I/O on deleted file
Emmanuel Grumbach (1):
wifi: mac80211: fix a queue stall in certain cases of CSA
Eric Dumazet (3):
tipc: fix NULL deref in cleanup_bearer()
net: lapb: increase LAPB_HEADER_LEN
net: defer final 'struct net' free in netns dismantle
Eugene Kobyak (1):
drm/i915: Fix NULL pointer dereference in capture_engine
Florian Westphal (1):
netfilter: nf_tables: do not defer rule destruction via call_rcu
Frederik Deweerdt (1):
splice: do not checksum AF_UNIX sockets
Frédéric Danis (1):
Bluetooth: SCO: Add support for 16 bits transparent voice setting
Greg Kroah-Hartman (1):
Linux 6.12.6
Haoyu Li (3):
gpio: ljca: Initialize num before accessing item in ljca_gpio_config
wifi: mac80211: init cnt before accessing elem in ieee80211_copy_mbssid_beacon
wifi: cfg80211: sme: init n_channels before channels[] access
Harish Kasiviswanathan (2):
drm/amdkfd: hard-code cacheline size for gfx11 drm/amdkfd: hard-code MALL cacheline size for gfx11, gfx12
Hridesh MG (1):
ALSA: hda/realtek: Fix headset mic on Acer Nitro 5
Ilpo Järvinen (1):
ACPI: resource: Fix memory resource type union access
Iulia Tanasescu (4):
Bluetooth: iso: Always release hdev at the end of iso_listen_bis
Bluetooth: iso: Fix recursive locking warning
Bluetooth: iso: Fix circular lock in iso_listen_bis
Bluetooth: iso: Fix circular lock in iso_conn_big_sync
Jaakko Salo (1):
ALSA: usb-audio: Add implicit feedback quirk for Yamaha THR5
James Clark (1):
libperf: evlist: Fix --cpu argument on hybrid platform
James Morse (1):
KVM: arm64: Disable MPAM visibility by default and ignore VMM writes
Jann Horn (2):
bpf: Fix UAF via mismatching bpf_prog/attachment RCU flavors
bpf: Fix theoretical prog_array UAF in __uprobe_perf_func()
Jesse Van Gavere (1):
net: dsa: microchip: KSZ9896 register regmap alignment to 32 bit boundaries
[email protected] (1):
drm/amdkfd: pause autosuspend when creating pdd
Jiasheng Jiang (1):
drm/i915: Fix memory leak by correcting cache object name in error handler
Jiri Olsa (1):
bpf,perf: Fix invalid prog_array access in perf_event_detach_bpf_prog
Joe Hattori (3):
ata: sata_highbank: fix OF node reference leak in highbank_initialize_phys()
usb: typec: anx7411: fix fwnode_handle reference leak
usb: typec: anx7411: fix OF node reference leaks in anx7411_typec_switch_probe()
Juergen Gross (9):
xen/netfront: fix crash when removing device
x86: make get_cpu_vendor() accessible from Xen code objtool/x86: allow syscall instruction
x86/static-call: provide a way to do very early static-call updates x86/xen: don't do PV iret hypercall through hypercall page x86/xen: add central hypercall functions
x86/xen: use new hypercall functions instead of hypercall page x86/xen: remove hypercall page
x86/static-call: fix 32-bit build
Juri Lelli (1):
sched/deadline: Fix replenish_dl_new_period dl_server condition
Kan Liang (1):
perf/x86/intel/ds: Unconditionally drain PEBS DS when changing PEBS_DATA_CFG
Kenneth Feng (1):
drm/amd/pm: Set SMU v13.0.7 default workload type
Koichiro Den (3):
virtio_net: correct netdev_tx_reset_queue() invocation point
virtio_ring: add a func argument 'recycle_done' to virtqueue_resize()
virtio_net: ensure netdev_tx_reset_queue is called on tx ring resize
Kuan-Wei Chiu (1):
perf ftrace: Fix undefined behavior in cmp_profile_data()
Kumar Kartikeya Dwivedi (3):
bpf: Revert "bpf: Mark raw_tp arguments with PTR_MAYBE_NULL"
bpf: Check size for BTF-based ctx access of pointer members
bpf: Augment raw_tp arguments with PTR_MAYBE_NULL
Lianqin Hu (1):
usb: gadget: u_serial: Fix the issue that gs_start_io crashed due to accessing null pointer
Lin Ma (1):
wifi: nl80211: fix NL80211_ATTR_MLO_LINK_ID off-by-one
LongPing Wei (1):
block: get wp_offset by bdev_offset_from_zone_start
Lu Baolu (1):
iommu/vt-d: Remove cache tags before disabling ATS
Lucas De Marchi (1):
drm/xe/reg_sr: Remove register pool
Luis Claudio R. Goncalves (1):
iommu/tegra241-cmdqv: do not use smp_processor_id in preemptible context
Luiz Augusto von Dentz (1):
Bluetooth: hci_event: Fix using rcu_read_(un)lock while iterating
Mark Tomlinson (1):
usb: host: max3421-hcd: Correctly abort a USB request.
Martin Ottens (1):
net/sched: netem: account for backlog updates from child qdisc
Maxim Levitsky (2):
net: mana: Fix memory leak in mana_gd_setup_irqs
net: mana: Fix irq_contexts memory leak in mana_gd_setup_irqs
Michael Chan (2):
bnxt_en: Fix GSO type for HW GRO packets on 5750X chips
bnxt_en: Fix aggregation ID mask to prevent oops on 5760X chips
Michal Luczaj (3):
bpf, sockmap: Fix race between element replace and close() bpf, sockmap: Fix update element with same
Bluetooth: Improve setsockopt() handling of malformed user input
Miguel Ojeda (2):
drm/panic: remove spurious empty line to clean warning
rust: kbuild: set bindgen's Rust target version
Ming Lei (1):
blk-mq: move cpuhp callback registering out of q->sysfs_lock
Mirsad Todorovac (1):
drm/xe: fix the ERR_PTR() returned on failure to allocate tiny pt
MoYuanhao (1):
tcp: check space before adding MPTCP SYN options
Namhyung Kim (1):
perf tools: Fix build-id event recording
Namjae Jeon (1):
ksmbd: fix racy issue from session lookup and expire
Nathan Chancellor (1):
blk-iocost: Avoid using clamp() on inuse in __propagate_weights()
Neal Frager (1):
usb: dwc3: xilinx: make sure pipe clock is deselected in usb2 only mode
Nikita Yushchenko (6):
net: renesas: rswitch: fix possible early skb release
net: renesas: rswitch: fix race window between tx start and complete
net: renesas: rswitch: fix leaked pointer on error path
net: renesas: rswitch: avoid use-after-put for a device tree node
net: renesas: rswitch: handle stop vs interrupt race
net: renesas: rswitch: fix initial MPIC register setting
Nilay Shroff (1):
block: Fix potential deadlock while freezing queue and acquiring sysfs_lock
Paul Barker (1):
Documentation: PM: Clarify pm_runtime_resume_and_get() return value
Petr Machata (1):
Documentation: networking: Add a caveat to nexthop_compat_mode sysctl
Phil Sutter (2):
selftests: netfilter: Stabilize rpath.sh
netfilter: IDLETIMER: Fix for possible ABBA deadlock
Philippe Simons (1):
regulator: axp20x: AXP717: set ramp_delay
Radhey Shyam Pandey (1):
usb: misc: onboard_usb_dev: skip suspend/resume sequence for USB5744 SMBus support
Remi Pommarel (3):
batman-adv: Do not send uninitialized TT changes
batman-adv: Remove uninitialized data in full table TT response
batman-adv: Do not let TT changes list grows indefinitely
Robert Hodaszi (1):
net: dsa: tag_ocelot_8021q: fix broken reception
Shakeel Butt (1):
memcg: slub: fix SUnreclaim for post charged objects
Shankar Bandal (2):
gpio: graniterapids: Fix invalid GPI_IS register offset
gpio: graniterapids: Fix invalid RXEVCFG register bitmask
Shenghao Ding (1):
ASoC: tas2781: Fix calibration issue in stress test
Shengjiu Wang (2):
ASoC: fsl_xcvr: change IFACE_PCM to IFACE_MIXER
ASoC: fsl_spdif: change IFACE_PCM to IFACE_MIXER
Stefan Wahren (5):
usb: dwc2: Fix HCD resume
usb: dwc2: hcd: Fix GetPortStatus & SetPortFeature
usb: dwc2: Fix HCD port connection race
qca_spi: Fix clock speed for multiple QCA7000
qca_spi: Make driver probing reliable
Suraj Sonawane (1):
acpi: nfit: vmalloc-out-of-bounds Read in acpi_nfit_ctl
Takashi Iwai (2):
usb: gadget: midi2: Fix interpretation of is_midi1 bits
ALSA: control: Avoid WARN() for symlink errors
Tejun Heo (1):
blk-cgroup: Fix UAF in blkcg_unpin_online()
Thadeu Lima de Souza Cascardo (1):
Bluetooth: btmtk: avoid UAF in btmtk_process_coredump
Thomas Weißschuh (1):
ptp: kvm: x86: Return EOPNOTSUPP instead of ENODEV from kvm_arch_ptp_init()
Venkata Prasad Potturu (1):
ASoC: amd: yc: Fix the wrong return value
Ville Syrjälä (1):
drm/i915/color: Stop using non-posted DSB writes for legacy LUT
Vitalii Mordan (1):
usb: ehci-hcd: fix call balance of clocks handling routines
Vladimir Oltean (6):
net: mscc: ocelot: fix memory leak on ocelot_port_add_txtstamp_skb()
net: mscc: ocelot: improve handling of TX timestamp for unknown skb
net: mscc: ocelot: ocelot->ts_id_lock and ocelot_port->tx_skbs.lock are IRQ-safe
net: mscc: ocelot: be resilient to loss of PTP packets during transmission
net: mscc: ocelot: perform error cleanup in ocelot_hwstamp_set()
net: dsa: felix: fix stuck CPU-injected packets with short taprio windows
Weizhao Ouyang (1):
kselftest/arm64: abi: fix SVCR detection
Xu Yang (2):
usb: core: hcd: only check primary hcd skip_phy_initialization
usb: dwc3: imx8mp: fix software node kernel dump
Yi Liu (1):
iommu/vt-d: Fix qi_batch NULL pointer with nested parent domain
liuderong (1):
scsi: ufs: core: Update compl_time_stamp_local_clock after completing a cqe
Łukasz Bartosik (1):
usb: typec: ucsi: Fix completion notifications
Greg Kroah-Hartman
maintainerDocumentation/networking/ip-sysctl.rst +6 -0
@@ -2170,6 +2170,12 @@ nexthop_compat_mode - BOOLEAN understands the new API, this sysctl can be disabled to achieve full performance benefits of the new API by disabling the nexthop expansion and extraneous notifications. + + Note that as a backward-compatible mode, dumping of modern features + might be incomplete or wrong. For example, resilient groups will not be + shown as such, but rather as just a list of next hops. Also weights that + do not fit into 8 bits will show incorrectly. + Default: true (backward compat mode) fib_notify_on_flag_change - INTEGER
Documentation/power/runtime_pm.rst +3 -1
@@ -347,7 +347,9 @@ drivers/base/power/runtime.c and include/linux/pm_runtime.h: `int pm_runtime_resume_and_get(struct device *dev);` - run pm_runtime_resume(dev) and if successful, increment the device's - usage counter; return the result of pm_runtime_resume + usage counter; returns 0 on success (whether or not the device's + runtime PM status was already 'active') or the error code from + pm_runtime_resume() on failure. `int pm_request_idle(struct device *dev);` - submit a request to execute the subsystem-level idle callback for the
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 12 -SUBLEVEL = 5 +SUBLEVEL = 6 EXTRAVERSION = NAME = Baby Opossum Posse
arch/arm64/kvm/sys_regs.c +52 -3
91 lines not on this page · raw message
arch/riscv/include/asm/kfence.h +3 -1
@@ -22,7 +22,9 @@ static inline bool kfence_protect_page(unsigned long addr, bool protect)else set_pte (pte,__pte (pte_val (ptep_get (pte)) | _PAGE_PRESENT)); -flush_tlb_kernel_range (addr, addr +PAGE_SIZE ); +preempt_disable (); +local_flush_tlb_kernel_range (addr, addr +PAGE_SIZE ); +preempt_enable ();return true; }
arch/riscv/kernel/setup.c +1 -1
@@ -227,7 +227,7 @@ static void __init init_resources(void)static void __init parse_dtb (void ) {/* Early scan of device tree from init memory */ -if (early_init_dt_scan (dtb_early_va,__pa (dtb_early_va))) { +if (early_init_dt_scan (dtb_early_va, dtb_early_pa)) {const char *name =of_flat_dt_get_machine_name ();if (name) {
arch/riscv/mm/init.c +4 -3
@@ -1566,7 +1566,7 @@ static void __meminit free_pte_table(pte_t *pte_start, pmd_t *pmd)pmd_clear (pmd); } -static void __meminit free_pmd_table (pmd_t *pmd_start,pud_t *pud) +static void __meminit free_pmd_table (pmd_t *pmd_start,pud_t *pud,bool is_vmemmap) {struct page *page =pud_page (*pud);struct ptdesc *ptdesc =page_ptdesc (page);
@@ -1579,7 +1579,8 @@ static void __meminit free_pmd_table(pmd_t *pmd_start, pud_t *pud)return ; } -pagetable_pmd_dtor (ptdesc); +if (!is_vmemmap) +pagetable_pmd_dtor (ptdesc);if (PageReserved (page))free_reserved_page (page);else
@@ -1703,7 +1704,7 @@ static void __meminit remove_pud_mapping(pud_t *pud_base, unsigned long addr, unremove_pmd_mapping (pmd_base, addr, next, is_vmemmap, altmap);if (pgtable_l4_enabled) -free_pmd_table (pmd_base, pudp); +free_pmd_table (pmd_base, pudp, is_vmemmap); } }
arch/x86/events/intel/ds.c +1 -1
@@ -1468,7 +1468,7 @@ void intel_pmu_pebs_enable(struct perf_event *event)* hence we need to drain when changing said * size. */ -intel_pmu_drain_large_pebs (cpuc); +intel_pmu_drain_pebs_buffer ();adaptive_pebs_record_size_update ();wrmsrl (MSR_PEBS_DATA_CFG , pebs_data_cfg); cpuc->active_pebs_data_cfg = pebs_data_cfg;
arch/x86/include/asm/processor.h +2 -0
@@ -212,6 +212,8 @@ static inline unsigned long long l1tf_pfn_limit(void)return BIT_ULL (boot_cpu_data.x86_cache_bits -1 -PAGE_SHIFT ); } +void init_cpu_devs (void ); +void get_cpu_vendor (struct cpuinfo_x86 *c);extern void early_cpu_init (void );extern void identify_secondary_cpu (struct cpuinfo_x86 *);extern void print_cpu_info (struct cpuinfo_x86 *);
arch/x86/include/asm/static_call.h +15 -0
@@ -65,4 +65,19 @@extern bool __static_call_fixup (void *tramp,u8 op,void *dest); +extern void __static_call_update_early (void *tramp,void *func); + +#define static_call_update_early (name, _func) \ +({ \ + typeof(&STATIC_CALL_TRAMP(name)) __F = (_func); \ + if (static_call_initialized) { \ + __static_call_update(&STATIC_CALL_KEY(name), \ + STATIC_CALL_TRAMP_ADDR(name), __F);\ + } else { \ + WRITE_ONCE(STATIC_CALL_KEY(name).func, _func); \ + __static_call_update_early(STATIC_CALL_TRAMP_ADDR(name),\ + __F); \ + } \ +}) +#endif /* _ASM_STATIC_CALL_H */
arch/x86/include/asm/sync_core.h +3 -3
@@ -8,7 +8,7 @@#include <asm/special_insns.h> #ifdef CONFIG_X86_32 -static inline void iret_to_self (void ) +static __always_inline void iret_to_self(void) { asmvolatile ( "pushfl\n\t"
@@ -19,7 +19,7 @@ static inline void iret_to_self(void) : ASM_CALL_CONSTRAINT : : "memory"); }#else -static inline void iret_to_self (void ) +static __always_inline void iret_to_self(void) {unsigned int tmp;
@@ -55,7 +55,7 @@ static inline void iret_to_self(void)* Like all of Linux's memory ordering operations, this is a * compiler barrier as well. */ -static inline void sync_core (void ) +static __always_inline void sync_core(void) {/* * The SERIALIZE instruction is the most straightforward way to
arch/x86/include/asm/xen/hypercall.h +22 -14
@@ -39,9 +39,11 @@#include <linux/string.h> #include <linux/types.h> #include <linux/pgtable.h> +#include <linux/instrumentation.h> #include <trace/events/xen.h> +#include <asm/alternative.h> #include <asm/page.h> #include <asm/smap.h> #include <asm/nospec-branch.h>
@@ -86,11 +88,20 @@ struct xen_dm_op_buf;* there aren't more than 5 arguments...) */ -extern struct {char _entry[32 ]; } hypercall_page[]; +void xen_hypercall_func (void ); +DECLARE_STATIC_CALL (xen_hypercall, xen_hypercall_func); -#define __HYPERCALL "call hypercall_page+%c[offset]" -#define __HYPERCALL_ENTRY (x) \ - [offset] "i" (__HYPERVISOR_##x * sizeof(hypercall_page[0])) +#ifdef MODULE +#define __ADDRESSABLE_xen_hypercall +#else +#define __ADDRESSABLE_xen_hypercall __ADDRESSABLE_ASM_STR(__SCK__xen_hypercall) +#endif + +#define __HYPERCALL \ + __ADDRESSABLE_xen_hypercall \ + "call __SCT__xen_hypercall" + +#define __HYPERCALL_ENTRY (x) "a" (x)#ifdef CONFIG_X86_32 #define __HYPERCALL_RETREG "eax"
@@ -148,7 +159,7 @@ extern struct { char _entry[32]; } hypercall_page[];__HYPERCALL_0ARG (); \ asm volatile (__HYPERCALL \ : __HYPERCALL_0PARAM \ - : __HYPERCALL_ENTRY(name) \ + : __HYPERCALL_ENTRY(__HYPERVISOR_ ## name) \ : __HYPERCALL_CLOBBER0); \ (type)__res; \ })
@@ -159,7 +170,7 @@ extern struct { char _entry[32]; } hypercall_page[];__HYPERCALL_1ARG (a1); \ asm volatile (__HYPERCALL \ : __HYPERCALL_1PARAM \ - : __HYPERCALL_ENTRY(name) \ + : __HYPERCALL_ENTRY(__HYPERVISOR_ ## name) \ : __HYPERCALL_CLOBBER1); \ (type)__res; \ })
@@ -170,7 +181,7 @@ extern struct { char _entry[32]; } hypercall_page[];__HYPERCALL_2ARG (a1, a2); \ asm volatile (__HYPERCALL \ : __HYPERCALL_2PARAM \ - : __HYPERCALL_ENTRY(name) \ + : __HYPERCALL_ENTRY(__HYPERVISOR_ ## name) \ : __HYPERCALL_CLOBBER2); \ (type)__res; \ })
@@ -181,7 +192,7 @@ extern struct { char _entry[32]; } hypercall_page[];__HYPERCALL_3ARG (a1, a2, a3); \ asm volatile (__HYPERCALL \ : __HYPERCALL_3PARAM \ - : __HYPERCALL_ENTRY(name) \ + : __HYPERCALL_ENTRY(__HYPERVISOR_ ## name) \ : __HYPERCALL_CLOBBER3); \ (type)__res; \ })
@@ -192,7 +203,7 @@ extern struct { char _entry[32]; } hypercall_page[];__HYPERCALL_4ARG (a1, a2, a3, a4); \ asm volatile (__HYPERCALL \ : __HYPERCALL_4PARAM \ - : __HYPERCALL_ENTRY(name) \ + : __HYPERCALL_ENTRY(__HYPERVISOR_ ## name) \ : __HYPERCALL_CLOBBER4); \ (type)__res; \ })
@@ -206,12 +217,9 @@ xen_single_call(unsigned int call, __HYPERCALL_DECLS;__HYPERCALL_5ARG (a1, a2, a3, a4, a5); -if (call >=PAGE_SIZE /sizeof (hypercall_page[0 ])) -return -EINVAL ; - - asmvolatile (CALL_NOSPEC + asm volatile(__HYPERCALL : __HYPERCALL_5PARAM - : [thunk_target] "a" (&hypercall_page[call]) + : __HYPERCALL_ENTRY(call) : __HYPERCALL_CLOBBER5);return (long )__res;
arch/x86/kernel/callthunks.c +0 -5
@@ -142,11 +142,6 @@ static bool skip_addr(void *dest)if (dest >= (void *)relocate_kernel && dest < (void *)relocate_kernel +KEXEC_CONTROL_CODE_MAX_SIZE )return true; -#endif -#ifdef CONFIG_XEN -if (dest >= (void *)hypercall_page && - dest < (void *)hypercall_page +PAGE_SIZE ) -return true;#endif return false; }
arch/x86/kernel/cpu/common.c +22 -16
@@ -868,7 +868,7 @@ static void cpu_detect_tlb(struct cpuinfo_x86 *c) tlb_lld_4m[ENTRIES], tlb_lld_1g[ENTRIES]); } -static void get_cpu_vendor (struct cpuinfo_x86 *c) +void get_cpu_vendor (struct cpuinfo_x86 *c) {char *v = c->x86_vendor_id;int i;
@@ -1652,15 +1652,11 @@ static void __init early_identify_cpu(struct cpuinfo_x86 *c)detect_nopl (); } -void __init early_cpu_init (void ) +void __init init_cpu_devs (void ) {const struct cpu_dev *const *cdev;int count =0 ; -#ifdef CONFIG_PROCESSOR_SELECT -pr_info ("KERNEL supported cpus:\n" ); -#endif -for (cdev = __x86_cpu_dev_start; cdev < __x86_cpu_dev_end; cdev++) {const struct cpu_dev *cpudev = *cdev;
@@ -1668,20 +1664,30 @@ void __init early_cpu_init(void)break ; cpu_devs[count] = cpudev; count++; + } +} +void __init early_cpu_init (void ) +{#ifdef CONFIG_PROCESSOR_SELECT - { -unsigned int j; - -for (j =0 ; j <2 ; j++) { -if (!cpudev->c_ident[j]) -continue ; -pr_info (" %s %s\n" , cpudev->c_vendor, - cpudev->c_ident[j]); - } - } +unsigned int i, j; + +pr_info ("KERNEL supported cpus:\n" );#endif + +init_cpu_devs (); + +#ifdef CONFIG_PROCESSOR_SELECT +for (i =0 ; i <X86_VENDOR_NUM && cpu_devs[i]; i++) { +for (j =0 ; j <2 ; j++) { +if (!cpu_devs[i]->c_ident[j]) +continue ; +pr_info (" %s %s\n" , cpu_devs[i]->c_vendor, + cpu_devs[i]->c_ident[j]); + } } +#endif +early_identify_cpu (&boot_cpu_data); }
arch/x86/kernel/static_call.c +9 -0
@@ -172,6 +172,15 @@ void arch_static_call_transform(void *site, void *tramp, void *func, bool tail) }EXPORT_SYMBOL_GPL (arch_static_call_transform); +noinstr void __static_call_update_early(void *tramp, void *func) +{ +BUG_ON (system_state !=SYSTEM_BOOTING ); +BUG_ON (!early_boot_irqs_disabled); +BUG_ON (static_call_initialized); +__text_gen_insn (tramp,JMP32_INSN_OPCODE , tramp, func,JMP32_INSN_SIZE ); +sync_core (); +} +#ifdef CONFIG_MITIGATION_RETHUNK /* * This is called by apply_returns() to fix up static call trampolines,
arch/x86/xen/enlighten.c +63 -1
82 lines not on this page · raw message
arch/x86/xen/enlighten_hvm.c +5 -8
@@ -106,15 +106,8 @@ static void __init init_hvm_pv_info(void)/* PVH set up hypercall page in xen_prepare_pvh(). */ if (xen_pvh_domain ()) pv_info.name ="Xen PVH" ; -else { -u64 pfn; -uint32_t msr; - +else pv_info.name ="Xen HVM" ; - msr =cpuid_ebx (base +2 ); - pfn =__pa (hypercall_page); -wrmsr_safe (msr, (u32 )pfn, (u32)(pfn >>32 )); - }xen_setup_features ();
@@ -300,6 +293,10 @@ static uint32_t __init xen_platform_hvm(void)if (xen_pv_domain ())return 0 ; +/* Set correct hypercall function. */ +if (xen_domain) +xen_hypercall_setfunc (); +if (xen_pvh_domain () && nopv) {/* Guest booting via the Xen-PVH boot entry goes here */ pr_info ("\"nopv\" parameter is ignored in PVH guest\n" );
arch/x86/xen/enlighten_pv.c +3 -1
@@ -1341,6 +1341,9 @@ asmlinkage __visible void __init xen_start_kernel(struct start_info *si) xen_domain_type =XEN_PV_DOMAIN ; xen_start_flags = xen_start_info->flags; +/* Interrupts are guaranteed to be off initially. */ + early_boot_irqs_disabled = true; +static_call_update_early (xen_hypercall, xen_hypercall_pv);xen_setup_features ();
@@ -1431,7 +1434,6 @@ asmlinkage __visible void __init xen_start_kernel(struct start_info *si)WARN_ON (xen_cpuhp_setup (xen_cpu_up_prepare_pv, xen_cpu_dead_pv));local_irq_disable (); - early_boot_irqs_disabled = true;xen_raw_console_write ("mapping kernel into physical memory\n" ); xen_setup_kernel_pagetable((pgd_t *)xen_start_info->pt_base,
arch/x86/xen/enlighten_pvh.c +0 -7
@@ -129,17 +129,10 @@ static void __init pvh_arch_setup(void)void __init xen_pvh_init (struct boot_params *boot_params) { -u32 msr; -u64 pfn; - xen_pvh =1 ; xen_domain_type =XEN_HVM_DOMAIN ; xen_start_flags = pvh_start_info.flags; - msr =cpuid_ebx (xen_cpuid_base () +2 ); - pfn =__pa (hypercall_page); -wrmsr_safe (msr, (u32 )pfn, (u32)(pfn >>32 )); - x86_init.oem.arch_setup = pvh_arch_setup; x86_init.oem.banner = xen_banner;
arch/x86/xen/xen-asm.S +41 -9
82 lines not on this page · raw message
arch/x86/xen/xen-head.S +83 -23
133 lines not on this page · raw message
arch/x86/xen/xen-ops.h +9 -0
@@ -326,4 +326,13 @@ static inline void xen_smp_intr_free_pv(unsigned int cpu) {}static inline void xen_smp_count_cpus (void ) { }#endif /* CONFIG_SMP */ +#ifdef CONFIG_XEN_PV +void xen_hypercall_pv (void ); +#endif +void xen_hypercall_hvm (void ); +void xen_hypercall_amd (void ); +void xen_hypercall_intel (void ); +void xen_hypercall_setfunc (void ); +void *__xen_hypercall_setfunc (void ); +#endif /* XEN_OPS_H */
block/blk-cgroup.c +5 -1
@@ -1324,10 +1324,14 @@ void blkcg_unpin_online(struct cgroup_subsys_state *blkcg_css)struct blkcg *blkcg =css_to_blkcg (blkcg_css);do { +struct blkcg *parent; +if (!refcount_dec_and_test (&blkcg->online_pin))break ; + + parent =blkcg_parent (blkcg);blkcg_destroy_blkgs (blkcg); - blkcg =blkcg_parent (blkcg); + blkcg = parent; }while (blkcg); }
block/blk-iocost.c +8 -1
@@ -1098,7 +1098,14 @@ static void __propagate_weights(struct ioc_gq *iocg, u32 active, u32 inuse, inuse =DIV64_U64_ROUND_UP (active * iocg->child_inuse_sum, iocg->child_active_sum); }else { - inuse =clamp_t (u32, inuse,1 , active); +/* +* It may be tempting to turn this into a clamp expression with +* a lower limit of 1 but active may be 0, which cannot be used +* as an upper limit in that situation. This expression allows +* active to clamp inuse unless it is 0, in which case inuse +* becomes 1. +*/ + inuse =min (inuse, active) ?:1 ; } iocg->last_inuse = iocg->inuse;
block/blk-mq-sysfs.c +6 -10
@@ -275,15 +275,13 @@ void blk_mq_sysfs_unregister_hctxs(struct request_queue *q)struct blk_mq_hw_ctx *hctx;unsigned long i; -mutex_lock (&q->sysfs_dir_lock); +lockdep_assert_held (&q->sysfs_dir_lock); +if (!q->mq_sysfs_init_done) - goto unlock; +return ;queue_for_each_hw_ctx (q, hctx, i)blk_mq_unregister_hctx (hctx); - -unlock: -mutex_unlock (&q->sysfs_dir_lock); }int blk_mq_sysfs_register_hctxs (struct request_queue *q)
@@ -292,9 +290,10 @@ int blk_mq_sysfs_register_hctxs(struct request_queue *q)unsigned long i;int ret =0 ; -mutex_lock (&q->sysfs_dir_lock); +lockdep_assert_held (&q->sysfs_dir_lock); +if (!q->mq_sysfs_init_done) - goto unlock; +return ret;queue_for_each_hw_ctx (q, hctx, i) { ret =blk_mq_register_hctx (hctx);
@@ -302,8 +301,5 @@ int blk_mq_sysfs_register_hctxs(struct request_queue *q)break ; } -unlock: -mutex_unlock (&q->sysfs_dir_lock); -return ret; }
block/blk-mq.c +110 -17
227 lines not on this page · raw message
block/blk-sysfs.c +2 -2
@@ -690,11 +690,11 @@ queue_attr_store(struct kobject *kobj, struct attribute *attr,return res; } -blk_mq_freeze_queue (q);mutex_lock (&q->sysfs_lock); +blk_mq_freeze_queue (q); res = entry->store (disk, page, length); -mutex_unlock (&q->sysfs_lock);blk_mq_unfreeze_queue (q); +mutex_unlock (&q->sysfs_lock);return res; }
block/blk-zoned.c +232 -292
813 lines not on this page · raw message
drivers/acpi/acpica/evxfregn.c +0 -2
@@ -232,8 +232,6 @@ acpi_remove_address_space_handler(acpi_handle device,/* Now we can delete the handler object */ -acpi_os_release_mutex (handler_obj->address_space. - context_mutex);acpi_ut_remove_reference (handler_obj); goto unlock_and_exit; }
drivers/acpi/nfit/core.c +6 -1
@@ -454,8 +454,13 @@ int acpi_nfit_ctl(struct nvdimm_bus_descriptor *nd_desc, struct nvdimm *nvdimm,if (cmd_rc) *cmd_rc = -EINVAL ; -if (cmd ==ND_CMD_CALL ) +if (cmd ==ND_CMD_CALL ) { +if (!buf || buf_len <sizeof (*call_pkg)) +return -EINVAL ; + call_pkg = buf; + } + func =cmd_to_func (nfit_mem, cmd, call_pkg, &family);if (func <0 )return func;
drivers/acpi/resource.c +3 -3
@@ -250,6 +250,9 @@ static bool acpi_decode_space(struct resource_win *win,switch (addr->resource_type) {case ACPI_MEMORY_RANGE :acpi_dev_memresource_flags (res, len, wp); + +if (addr->info.mem.caching ==ACPI_PREFETCHABLE_MEMORY ) + res->flags |=IORESOURCE_PREFETCH ;break ;case ACPI_IO_RANGE : acpi_dev_ioresource_flags(res, len, iodec,
@@ -265,9 +268,6 @@ static bool acpi_decode_space(struct resource_win *win,if (addr->producer_consumer ==ACPI_PRODUCER ) res->flags |=IORESOURCE_WINDOW ; -if (addr->info.mem.caching ==ACPI_PREFETCHABLE_MEMORY ) - res->flags |=IORESOURCE_PREFETCH ; -return !(res->flags &IORESOURCE_DISABLED ); }
drivers/ata/sata_highbank.c +1 -0
@@ -348,6 +348,7 @@ static int highbank_initialize_phys(struct device *dev, void __iomem *addr) phy_nodes[phy] = phy_data.np; cphy_base[phy] =of_iomap (phy_nodes[phy],0 );if (cphy_base[phy] ==NULL ) { +of_node_put (phy_data.np);return 0 ; } phy_count +=1 ;
drivers/bluetooth/btmtk.c +12 -8
@@ -395,6 +395,7 @@ int btmtk_process_coredump(struct hci_dev *hdev, struct sk_buff *skb) {struct btmtk_data *data =hci_get_priv (hdev);int err; +bool complete = false;if (!IS_ENABLED (CONFIG_DEV_COREDUMP )) {kfree_skb (skb);
@@ -416,19 +417,22 @@ int btmtk_process_coredump(struct hci_dev *hdev, struct sk_buff *skb) fallthrough;case HCI_DEVCOREDUMP_ACTIVE :default : +/* Mediatek coredump data would be more than MTK_COREDUMP_NUM */ +if (data->cd_info.cnt >=MTK_COREDUMP_NUM && + skb->len >MTK_COREDUMP_END_LEN ) +if (!memcmp ((char *)&skb->data[skb->len -MTK_COREDUMP_END_LEN ], +MTK_COREDUMP_END ,MTK_COREDUMP_END_LEN -1 )) + complete = true; + err =hci_devcd_append (hdev, skb);if (err <0 )break ; data->cd_info.cnt++; -/* Mediatek coredump data would be more than MTK_COREDUMP_NUM */ -if (data->cd_info.cnt >MTK_COREDUMP_NUM && - skb->len >MTK_COREDUMP_END_LEN ) -if (!memcmp ((char *)&skb->data[skb->len -MTK_COREDUMP_END_LEN ], -MTK_COREDUMP_END ,MTK_COREDUMP_END_LEN -1 )) { -bt_dev_info (hdev,"Mediatek coredump end" ); -hci_devcd_complete (hdev); - } +if (complete) { +bt_dev_info (hdev,"Mediatek coredump end" ); +hci_devcd_complete (hdev); + }break ; }
drivers/clk/clk-en7523.c +3 -2
@@ -92,6 +92,7 @@ static const u32 slic_base[] = { 100000000, 3125000 };static const u32 npu_base[] = {333000000 ,400000000 ,500000000 };/* EN7581 */ static const u32 emi7581_base[] = {540000000 ,480000000 ,400000000 ,300000000 }; +static const u32 bus7581_base[] = {600000000 ,540000000 };static const u32 npu7581_base[] = {800000000 ,750000000 ,720000000 ,600000000 };static const u32 crypto_base[] = {540000000 ,480000000 };
@@ -227,8 +228,8 @@ static const struct en_clk_desc en7581_base_clks[] = { .base_reg = REG_BUS_CLK_DIV_SEL, .base_bits = 1, .base_shift = 8, - .base_values = bus_base, - .n_base_values = ARRAY_SIZE(bus_base), + .base_values = bus7581_base, + .n_base_values = ARRAY_SIZE(bus7581_base), .div_bits = 3, .div_shift = 0,
drivers/crypto/hisilicon/debugfs.c +2 -2
@@ -192,7 +192,7 @@ static int qm_sqc_dump(struct hisi_qm *qm, char *s, char *name)down_read (&qm->qps_lock);if (qm->sqc) { -memcpy (&sqc, qm->sqc + qp_id *sizeof (struct qm_sqc ),sizeof (struct qm_sqc )); +memcpy (&sqc, qm->sqc + qp_id,sizeof (struct qm_sqc )); sqc.base_h =cpu_to_le32 (QM_XQC_ADDR_MASK ); sqc.base_l =cpu_to_le32 (QM_XQC_ADDR_MASK );dump_show (qm, &sqc,sizeof (struct qm_sqc ),"SOFT SQC" );
@@ -229,7 +229,7 @@ static int qm_cqc_dump(struct hisi_qm *qm, char *s, char *name)down_read (&qm->qps_lock);if (qm->cqc) { -memcpy (&cqc, qm->cqc + qp_id *sizeof (struct qm_cqc ),sizeof (struct qm_cqc )); +memcpy (&cqc, qm->cqc + qp_id,sizeof (struct qm_cqc )); cqc.base_h =cpu_to_le32 (QM_XQC_ADDR_MASK ); cqc.base_l =cpu_to_le32 (QM_XQC_ADDR_MASK );dump_show (qm, &cqc,sizeof (struct qm_cqc ),"SOFT CQC" );
drivers/gpio/gpio-graniterapids.c +41 -11
138 lines not on this page · raw message
drivers/gpio/gpio-ljca.c +1 -1
@@ -82,9 +82,9 @@ static int ljca_gpio_config(struct ljca_gpio_dev *ljca_gpio, u8 gpio_id,int ret;mutex_lock (&ljca_gpio->trans_lock); + packet->num =1 ; packet->item[0 ].index = gpio_id; packet->item[0 ].value = config | ljca_gpio->connect_mode[gpio_id]; - packet->num =1 ; ret =ljca_transfer (ljca_gpio->ljca,LJCA_GPIO_CONFIG , (u8 *)packet,struct_size (packet, item, packet->num),NULL ,0 );
drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +11 -6
@@ -1801,13 +1801,18 @@ int amdgpu_cs_find_mapping(struct amdgpu_cs_parser *parser,if (dma_resv_locking_ctx ((*bo)->tbo.base.resv) != &parser->exec.ticket)return -EINVAL ; +/* Make sure VRAM is allocated contigiously */ (*bo)->flags |=AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS ; -amdgpu_bo_placement_from_domain (*bo, (*bo)->allowed_domains); -for (i =0 ; i < (*bo)->placement.num_placement; i++) - (*bo)->placements[i].flags |=TTM_PL_FLAG_CONTIGUOUS ; - r =ttm_bo_validate (&(*bo)->tbo, &(*bo)->placement, &ctx); -if (r) -return r; +if ((*bo)->tbo.resource->mem_type ==TTM_PL_VRAM && + !((*bo)->tbo.resource->placement &TTM_PL_FLAG_CONTIGUOUS )) { + +amdgpu_bo_placement_from_domain (*bo, (*bo)->allowed_domains); +for (i =0 ; i < (*bo)->placement.num_placement; i++) + (*bo)->placements[i].flags |=TTM_PL_FLAG_CONTIGUOUS ; + r =ttm_bo_validate (&(*bo)->tbo, &(*bo)->placement, &ctx); +if (r) +return r; + }return amdgpu_ttm_alloc_gart (&(*bo)->tbo); }
drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c +2 -0
@@ -551,6 +551,8 @@ static void amdgpu_uvd_force_into_uvd_segment(struct amdgpu_bo *abo)for (i =0 ; i < abo->placement.num_placement; ++i) { abo->placements[i].fpfn =0 >>PAGE_SHIFT ; abo->placements[i].lpfn = (256 *1024 *1024 ) >>PAGE_SHIFT ; +if (abo->placements[i].mem_type ==TTM_PL_VRAM ) + abo->placements[i].flags |=TTM_PL_FLAG_CONTIGUOUS ; } }
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +7 -6
@@ -674,12 +674,8 @@ int amdgpu_vm_flush(struct amdgpu_ring *ring, struct amdgpu_job *job, pasid_mapping_needed &= adev->gmc.gmc_funcs->emit_pasid_mapping && ring->funcs->emit_wreg; -if (adev->gfx.enable_cleaner_shader && - ring->funcs->emit_cleaner_shader && - job->enforce_isolation) - ring->funcs->emit_cleaner_shader (ring); - -if (!vm_flush_needed && !gds_switch_needed && !need_pipe_sync) +if (!vm_flush_needed && !gds_switch_needed && !need_pipe_sync && + !(job->enforce_isolation && !job->vmid))return 0 ;amdgpu_ring_ib_begin (ring);
@@ -690,6 +686,11 @@ int amdgpu_vm_flush(struct amdgpu_ring *ring, struct amdgpu_job *job,if (need_pipe_sync)amdgpu_ring_emit_pipeline_sync (ring); +if (adev->gfx.enable_cleaner_shader && + ring->funcs->emit_cleaner_shader && + job->enforce_isolation) + ring->funcs->emit_cleaner_shader (ring); +if (vm_flush_needed) {trace_amdgpu_vm_flush (ring, job->vmid, job->vm_pd_addr);amdgpu_ring_emit_vm_flush (ring, job->vmid, job->vm_pd_addr);
drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c +1 -1
@@ -1289,7 +1289,7 @@ static int uvd_v7_0_ring_patch_cs_in_place(struct amdgpu_cs_parser *p,struct amdgpu_job *job, struct amdgpu_ib *ib) { - struct amdgpu_ring *ring = to_amdgpu_ring(job->base.sched); + struct amdgpu_ring *ring = amdgpu_job_ring(job);unsigned i;/* No patching necessary for the first instance */
drivers/gpu/drm/amd/amdkfd/kfd_crat.c +21 -3
@@ -1422,6 +1422,7 @@ int kfd_parse_crat_table(void *crat_image, struct list_head *device_list,static int kfd_fill_gpu_cache_info_from_gfx_config (struct kfd_dev *kdev, +bool cache_line_size_missing,struct kfd_gpu_cache_info *pcache_info) {struct amdgpu_device *adev = kdev->adev;
@@ -1436,6 +1437,8 @@ static int kfd_fill_gpu_cache_info_from_gfx_config(struct kfd_dev *kdev, CRAT_CACHE_FLAGS_SIMD_CACHE); pcache_info[i].num_cu_shared = adev->gfx.config.gc_num_tcp_per_wpg /2 ; pcache_info[i].cache_line_size = adev->gfx.config.gc_tcp_cache_line_size; +if (cache_line_size_missing && !pcache_info[i].cache_line_size) + pcache_info[i].cache_line_size =128 ; i++; }/* Scalar L1 Instruction Cache per SQC */
@@ -1448,6 +1451,8 @@ static int kfd_fill_gpu_cache_info_from_gfx_config(struct kfd_dev *kdev, CRAT_CACHE_FLAGS_SIMD_CACHE); pcache_info[i].num_cu_shared = adev->gfx.config.gc_num_sqc_per_wgp *2 ; pcache_info[i].cache_line_size = adev->gfx.config.gc_instruction_cache_line_size; +if (cache_line_size_missing && !pcache_info[i].cache_line_size) + pcache_info[i].cache_line_size =128 ; i++; }/* Scalar L1 Data Cache per SQC */
@@ -1459,6 +1464,8 @@ static int kfd_fill_gpu_cache_info_from_gfx_config(struct kfd_dev *kdev, CRAT_CACHE_FLAGS_SIMD_CACHE); pcache_info[i].num_cu_shared = adev->gfx.config.gc_num_sqc_per_wgp *2 ; pcache_info[i].cache_line_size = adev->gfx.config.gc_scalar_data_cache_line_size; +if (cache_line_size_missing && !pcache_info[i].cache_line_size) + pcache_info[i].cache_line_size =64 ; i++; }/* GL1 Data Cache per SA */
@@ -1471,7 +1478,8 @@ static int kfd_fill_gpu_cache_info_from_gfx_config(struct kfd_dev *kdev,CRAT_CACHE_FLAGS_DATA_CACHE | CRAT_CACHE_FLAGS_SIMD_CACHE); pcache_info[i].num_cu_shared = adev->gfx.config.max_cu_per_sh; - pcache_info[i].cache_line_size =0 ; +if (cache_line_size_missing) + pcache_info[i].cache_line_size =128 ; i++; }/* L2 Data Cache per GPU (Total Tex Cache) */
@@ -1483,6 +1491,8 @@ static int kfd_fill_gpu_cache_info_from_gfx_config(struct kfd_dev *kdev, CRAT_CACHE_FLAGS_SIMD_CACHE); pcache_info[i].num_cu_shared = adev->gfx.config.max_cu_per_sh; pcache_info[i].cache_line_size = adev->gfx.config.gc_tcc_cache_line_size; +if (cache_line_size_missing && !pcache_info[i].cache_line_size) + pcache_info[i].cache_line_size =128 ; i++; }/* L3 Data Cache per GPU */
@@ -1493,7 +1503,7 @@ static int kfd_fill_gpu_cache_info_from_gfx_config(struct kfd_dev *kdev,CRAT_CACHE_FLAGS_DATA_CACHE | CRAT_CACHE_FLAGS_SIMD_CACHE); pcache_info[i].num_cu_shared = adev->gfx.config.max_cu_per_sh; - pcache_info[i].cache_line_size =0 ; + pcache_info[i].cache_line_size =64 ; i++; }return i;
@@ -1568,6 +1578,7 @@ static int kfd_fill_gpu_cache_info_from_gfx_config_v2(struct kfd_dev *kdev,int kfd_get_gpu_cache_info (struct kfd_node *kdev,struct kfd_gpu_cache_info **pcache_info) {int num_of_cache_types =0 ; +bool cache_line_size_missing = false;switch (kdev->adev->asic_type) {case CHIP_KAVERI :
@@ -1691,10 +1702,17 @@ int kfd_get_gpu_cache_info(struct kfd_node *kdev, struct kfd_gpu_cache_info **pccase IP_VERSION (11 ,5 ,0 ):case IP_VERSION (11 ,5 ,1 ):case IP_VERSION (11 ,5 ,2 ): +/* Cacheline size not available in IP discovery for gc11. +* kfd_fill_gpu_cache_info_from_gfx_config to hard code it +*/ + cache_line_size_missing = true; + fallthrough;case IP_VERSION (12 ,0 ,0 ):case IP_VERSION (12 ,0 ,1 ): num_of_cache_types = -kfd_fill_gpu_cache_info_from_gfx_config (kdev->kfd, *pcache_info); +kfd_fill_gpu_cache_info_from_gfx_config (kdev->kfd, + cache_line_size_missing, + *pcache_info);break ;default : *pcache_info = dummy_cache_info;
drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c +15 -0
@@ -205,6 +205,21 @@ static int add_queue_mes(struct device_queue_manager *dqm, struct queue *q,if (!down_read_trylock (&adev->reset_domain->sem))return -EIO ; +if (!pdd->proc_ctx_cpu_ptr) { + r =amdgpu_amdkfd_alloc_gtt_mem (adev, +AMDGPU_MES_PROC_CTX_SIZE , + &pdd->proc_ctx_bo, + &pdd->proc_ctx_gpu_addr, + &pdd->proc_ctx_cpu_ptr, + false); +if (r) { +dev_err (adev->dev, +"failed to allocate process context bo\n" ); +return r; + } +memset (pdd->proc_ctx_cpu_ptr,0 ,AMDGPU_MES_PROC_CTX_SIZE ); + } +memset (&queue_input,0x0 ,sizeof (struct mes_add_queue_input )); queue_input.process_id = qpd->pqm->process->pasid; queue_input.page_table_base_addr = qpd->page_table_base;
drivers/gpu/drm/amd/amdkfd/kfd_process.c +2 -21
@@ -1076,7 +1076,8 @@ static void kfd_process_destroy_pdds(struct kfd_process *p)kfd_free_process_doorbells (pdd->dev->kfd, pdd); -if (pdd->dev->kfd->shared_resources.enable_mes) +if (pdd->dev->kfd->shared_resources.enable_mes && + pdd->proc_ctx_cpu_ptr)amdgpu_amdkfd_free_gtt_mem (pdd->dev->adev, &pdd->proc_ctx_bo);/*
@@ -1610,7 +1611,6 @@ struct kfd_process_device *kfd_create_process_device_data(struct kfd_node *dev, struct kfd_process *p) {struct kfd_process_device *pdd =NULL ; -int retval =0 ;if (WARN_ON_ONCE (p->n_pdds >=MAX_GPU_INSTANCE ))return NULL ;
@@ -1634,21 +1634,6 @@ struct kfd_process_device *kfd_create_process_device_data(struct kfd_node *dev, pdd->user_gpu_id = dev->id;atomic64_set (&pdd->evict_duration_counter,0 ); -if (dev->kfd->shared_resources.enable_mes) { - retval =amdgpu_amdkfd_alloc_gtt_mem (dev->adev, -AMDGPU_MES_PROC_CTX_SIZE , - &pdd->proc_ctx_bo, - &pdd->proc_ctx_gpu_addr, - &pdd->proc_ctx_cpu_ptr, - false); -if (retval) { -dev_err (dev->adev->dev, -"failed to allocate process context bo\n" ); - goto err_free_pdd; - } -memset (pdd->proc_ctx_cpu_ptr,0 ,AMDGPU_MES_PROC_CTX_SIZE ); - } - p->pdds[p->n_pdds++] = pdd;if (kfd_dbg_is_per_vmid_supported (pdd->dev)) pdd->spi_dbg_override = pdd->dev->kfd2kgd->disable_debug_trap(
@@ -1660,10 +1645,6 @@ struct kfd_process_device *kfd_create_process_device_data(struct kfd_node *dev,idr_init (&pdd->alloc_idr);return pdd; - -err_free_pdd: -kfree (pdd); -return NULL ; }/**
drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c +8 -4
@@ -212,13 +212,17 @@ static void pqm_clean_queue_resource(struct process_queue_manager *pqm,void pqm_uninit (struct process_queue_manager *pqm) {struct process_queue_node *pqn, *next; -struct kfd_process_device *pdd;list_for_each_entry_safe (pqn, next, &pqm->queues, process_queue_list) {if (pqn->q) { - pdd =kfd_get_process_device_data (pqn->q->device, pqm->process); -kfd_queue_unref_bo_vas (pdd, &pqn->q->properties); -kfd_queue_release_buffers (pdd, &pqn->q->properties); +struct kfd_process_device *pdd =kfd_get_process_device_data (pqn->q->device, + pqm->process); +if (pdd) { +kfd_queue_unref_bo_vas (pdd, &pqn->q->properties); +kfd_queue_release_buffers (pdd, &pqn->q->properties); + }else { +WARN_ON (!pdd); + }pqm_clean_queue_resource (pqm, pqn); }
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c +1 -0
@@ -2717,4 +2717,5 @@ void smu_v13_0_7_set_ppt_funcs(struct smu_context *smu) smu->workload_map = smu_v13_0_7_workload_map; smu->smc_driver_if_version =SMU13_0_7_DRIVER_IF_VERSION ;smu_v13_0_set_smu_mailbox_registers (smu); + smu->power_profile_mode =PP_SMC_POWER_PROFILE_BOOTUP_DEFAULT ; }
drivers/gpu/drm/drm_panic_qr.rs +0 -1
@@ -929,7 +929,6 @@ fn draw_all(&mut self, data: impl Iterator<Item = u8>) {/// * `tmp` must be valid for reading and writing for `tmp_size` bytes. /// /// They must remain valid for the duration of the function call. -#[no_mangle] pub unsafe extern "C" fn drm_panic_qr_generate ( url: *const i8,
drivers/gpu/drm/i915/display/intel_color.c +20 -10
@@ -1333,19 +1333,29 @@ static void ilk_load_lut_8(const struct intel_crtc_state *crtc_state, lut = blob->data;/* -* DSB fails to correctly load the legacy LUT -* unless we either write each entry twice, -* or use non-posted writes +* DSB fails to correctly load the legacy LUT unless +* we either write each entry twice when using posted +* writes, or we use non-posted writes. +* +* If palette anti-collision is active during LUT +* register writes: +* - posted writes simply get dropped and thus the LUT +* contents may not be correctly updated +* - non-posted writes are blocked and thus the LUT +* contents are always correct, but simultaneous CPU +* MMIO access will start to fail +* +* Choose the lesser of two evils and use posted writes. +* Using posted writes is also faster, even when having +* to write each register twice. */ -if (crtc_state->dsb_color_vblank) -intel_dsb_nonpost_start (crtc_state->dsb_color_vblank); - -for (i =0 ; i <256 ; i++) +for (i =0 ; i <256 ; i++) {ilk_lut_write (crtc_state,LGC_PALETTE (pipe, i),i9xx_lut_8 (&lut[i])); - -if (crtc_state->dsb_color_vblank) -intel_dsb_nonpost_end (crtc_state->dsb_color_vblank); +if (crtc_state->dsb_color_vblank) +ilk_lut_write (crtc_state,LGC_PALETTE (pipe, i), +i9xx_lut_8 (&lut[i])); + } } static void ilk_load_lut_10(const struct intel_crtc_state *crtc_state,
drivers/gpu/drm/i915/i915_gpu_error.c +15 -3
@@ -1652,9 +1652,21 @@ capture_engine(struct intel_engine_cs *engine,return NULL ;intel_engine_get_hung_entity (engine, &ce, &rq); -if (rq && !i915_request_started (rq)) -drm_info (&engine->gt->i915->drm,"Got hung context on %s with active request %lld:%lld [0x%04X] not yet started\n" , - engine->name, rq->fence.context, rq->fence.seqno, ce->guc_id.id); +if (rq && !i915_request_started (rq)) { +/* +* We want to know also what is the guc_id of the context, +* but if we don't have the context reference, then skip +* printing it. +*/ +if (ce) +drm_info (&engine->gt->i915->drm, +"Got hung context on %s with active request %lld:%lld [0x%04X] not yet started\n" , + engine->name, rq->fence.context, rq->fence.seqno, ce->guc_id.id); +else +drm_info (&engine->gt->i915->drm, +"Got hung context on %s with active request %lld:%lld not yet started\n" , + engine->name, rq->fence.context, rq->fence.seqno); + }if (rq) { capture =intel_engine_coredump_add_request (ee, rq,ATOMIC_MAYFAIL );
drivers/gpu/drm/i915/i915_scheduler.c +1 -1
@@ -506,6 +506,6 @@ int __init i915_scheduler_module_init(void)return 0 ; err_priorities: -kmem_cache_destroy (slab_priorities); +kmem_cache_destroy (slab_dependencies);return -ENOMEM ; }
drivers/gpu/drm/xe/tests/xe_migrate.c +2 -2
@@ -224,8 +224,8 @@ static void xe_migrate_sanity_test(struct xe_migrate *m, struct kunit *test)XE_BO_FLAG_VRAM_IF_DGFX (tile) | XE_BO_FLAG_PINNED);if (IS_ERR (tiny)) { -KUNIT_FAIL (test,"Failed to allocate fake pt: %li\n" , -PTR_ERR (pt)); +KUNIT_FAIL (test,"Failed to allocate tiny fake pt: %li\n" , +PTR_ERR (tiny)); goto free_pt; }
drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c +8 -0
@@ -65,6 +65,14 @@ invalidation_fence_signal(struct xe_device *xe, struct xe_gt_tlb_invalidation_fe__invalidation_fence_signal (xe, fence); } +void xe_gt_tlb_invalidation_fence_signal (struct xe_gt_tlb_invalidation_fence *fence) +{ +if (WARN_ON_ONCE (!fence->gt)) +return ; + +__invalidation_fence_signal (gt_to_xe (fence->gt), fence); +} +static void xe_gt_tlb_fence_timeout (struct work_struct *work) { struct xe_gt *gt = container_of(work, struct xe_gt,
drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h +1 -0
@@ -28,6 +28,7 @@ int xe_guc_tlb_invalidation_done_handler(struct xe_guc *guc, u32 *msg, u32 len);void xe_gt_tlb_invalidation_fence_init (struct xe_gt *gt,struct xe_gt_tlb_invalidation_fence *fence,bool stack); +void xe_gt_tlb_invalidation_fence_signal (struct xe_gt_tlb_invalidation_fence *fence);static inline void xe_gt_tlb_invalidation_fence_wait (struct xe_gt_tlb_invalidation_fence *fence)
drivers/gpu/drm/xe/xe_pt.c +1 -2
@@ -1333,8 +1333,7 @@ static void invalidation_fence_cb(struct dma_fence *fence,queue_work (system_wq, &ifence->work); }else { ifence->base.base.error = ifence->fence->error; -dma_fence_signal (&ifence->base.base); -dma_fence_put (&ifence->base.base); +xe_gt_tlb_invalidation_fence_signal (&ifence->base); }dma_fence_put (ifence->fence); }
drivers/gpu/drm/xe/xe_reg_sr.c +6 -25
@@ -26,46 +26,27 @@#include "xe_reg_whitelist.h" #include "xe_rtp_types.h" -#define XE_REG_SR_GROW_STEP_DEFAULT 16 -static void reg_sr_fini (struct drm_device *drm,void *arg) {struct xe_reg_sr *sr = arg; +struct xe_reg_sr_entry *entry; +unsigned long reg; + +xa_for_each (&sr->xa, reg, entry) +kfree (entry);xa_destroy (&sr->xa); -kfree (sr->pool.arr); -memset (&sr->pool,0 ,sizeof (sr->pool)); }int xe_reg_sr_init (struct xe_reg_sr *sr,const char *name,struct xe_device *xe) {xa_init (&sr->xa); -memset (&sr->pool,0 ,sizeof (sr->pool)); - sr->pool.grow_step =XE_REG_SR_GROW_STEP_DEFAULT ; sr->name = name;return drmm_add_action_or_reset (&xe->drm, reg_sr_fini, sr); }EXPORT_SYMBOL_IF_KUNIT (xe_reg_sr_init); -static struct xe_reg_sr_entry *alloc_entry (struct xe_reg_sr *sr) -{ -if (sr->pool.used == sr->pool.allocated) { -struct xe_reg_sr_entry *arr; - - arr =krealloc_array (sr->pool.arr, -ALIGN (sr->pool.allocated +1 , sr->pool.grow_step), -sizeof (*arr),GFP_KERNEL ); -if (!arr) -return NULL ; - - sr->pool.arr = arr; - sr->pool.allocated += sr->pool.grow_step; - } - -return &sr->pool.arr[sr->pool.used++]; -} -static bool compatible_entries (const struct xe_reg_sr_entry *e1,const struct xe_reg_sr_entry *e2) {
@@ -111,7 +92,7 @@ int xe_reg_sr_add(struct xe_reg_sr *sr,return 0 ; } - pentry =alloc_entry (sr); + pentry =kmalloc (sizeof (*pentry),GFP_KERNEL );if (!pentry) { ret = -ENOMEM ; goto fail;
drivers/gpu/drm/xe/xe_reg_sr_types.h +0 -6
@@ -20,12 +20,6 @@ struct xe_reg_sr_entry { };struct xe_reg_sr { -struct { -struct xe_reg_sr_entry *arr; -unsigned int used; -unsigned int allocated; -unsigned int grow_step; - } pool;struct xarray xa;const char *name;
drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c +1 -1
@@ -339,7 +339,7 @@ tegra241_cmdqv_get_cmdq(struct arm_smmu_device *smmu,* one CPU at a time can enter the process, while the others * will be spinning at the same lock. */ - lidx =smp_processor_id () % cmdqv->num_lvcmdqs_per_vintf; + lidx =raw_smp_processor_id () % cmdqv->num_lvcmdqs_per_vintf; vcmdq = vintf->lvcmdqs[lidx];if (!vcmdq || !READ_ONCE (vcmdq->enabled))return NULL ;
drivers/iommu/intel/cache.c +27 -7
@@ -105,12 +105,35 @@ static void cache_tag_unassign(struct dmar_domain *domain, u16 did,spin_unlock_irqrestore (&domain->cache_lock, flags); } +/* domain->qi_batch will be freed in iommu_free_domain() path. */ +static int domain_qi_batch_alloc (struct dmar_domain *domain) +{ +unsigned long flags; +int ret =0 ; + +spin_lock_irqsave (&domain->cache_lock, flags); +if (domain->qi_batch) + goto out_unlock; + + domain->qi_batch =kzalloc (sizeof (*domain->qi_batch),GFP_ATOMIC ); +if (!domain->qi_batch) + ret = -ENOMEM ; +out_unlock: +spin_unlock_irqrestore (&domain->cache_lock, flags); + +return ret; +} +static int __cache_tag_assign_domain (struct dmar_domain *domain,u16 did,struct device *dev,ioasid_t pasid) {struct device_domain_info *info =dev_iommu_priv_get (dev);int ret; + ret =domain_qi_batch_alloc (domain); +if (ret) +return ret; + ret =cache_tag_assign (domain, did, dev, pasid,CACHE_TAG_IOTLB );if (ret || !info->ats_enabled)return ret;
@@ -139,6 +162,10 @@ static int __cache_tag_assign_parent_domain(struct dmar_domain *domain, u16 did,struct device_domain_info *info =dev_iommu_priv_get (dev);int ret; + ret =domain_qi_batch_alloc (domain); +if (ret) +return ret; + ret =cache_tag_assign (domain, did, dev, pasid,CACHE_TAG_NESTING_IOTLB );if (ret || !info->ats_enabled)return ret;
@@ -190,13 +217,6 @@ int cache_tag_assign_domain(struct dmar_domain *domain,u16 did =domain_get_id_for_dev (domain, dev);int ret; -/* domain->qi_bach will be freed in iommu_free_domain() path. */ -if (!domain->qi_batch) { - domain->qi_batch =kzalloc (sizeof (*domain->qi_batch),GFP_KERNEL ); -if (!domain->qi_batch) -return -ENOMEM ; - } - ret =__cache_tag_assign_domain (domain, did, dev, pasid);if (ret || domain->domain.type !=IOMMU_DOMAIN_NESTED )return ret;
drivers/iommu/intel/iommu.c +3 -1
@@ -3372,6 +3372,9 @@ void device_block_translation(struct device *dev)struct intel_iommu *iommu = info->iommu;unsigned long flags; +if (info->domain) +cache_tag_unassign_domain (info->domain, dev,IOMMU_NO_PASID ); +iommu_disable_pci_caps (info);if (!dev_is_real_dma_subdevice (dev)) {if (sm_supported (iommu))
@@ -3388,7 +3391,6 @@ void device_block_translation(struct device *dev)list_del (&info->link);spin_unlock_irqrestore (&info->domain->lock, flags); -cache_tag_unassign_domain (info->domain, dev,IOMMU_NO_PASID );domain_detach_iommu (info->domain, iommu); info->domain =NULL ; }
drivers/md/dm-zoned-reclaim.c +3 -3
@@ -76,9 +76,9 @@ static int dmz_reclaim_align_wp(struct dmz_reclaim *zrc, struct dm_zone *zone,* pointer and the requested position. */ nr_blocks = block - wp_block; - ret =blkdev_issue_zeroout (dev->bdev, -dmz_start_sect (zmd, zone) +dmz_blk2sect (wp_block), -dmz_blk2sect (nr_blocks),GFP_NOIO ,0 ); + ret =blk_zone_issue_zeroout (dev->bdev, +dmz_start_sect (zmd, zone) +dmz_blk2sect (wp_block), +dmz_blk2sect (nr_blocks),GFP_NOIO );if (ret) { dmz_dev_err(dev, "Align zone %u wp %llu to %llu (wp+%u) blocks failed %d",
drivers/net/bonding/bond_main.c +5 -5
@@ -1520,9 +1520,7 @@ static netdev_features_t bond_fix_features(struct net_device *dev,struct slave *slave; mask = features; - - features &= ~NETIF_F_ONE_FOR_ALL ; - features |=NETIF_F_ALL_FOR_ALL ; + features =netdev_base_features (features);bond_for_each_slave (bond, slave, iter) { features = netdev_increment_features(features,
@@ -1536,6 +1534,7 @@ static netdev_features_t bond_fix_features(struct net_device *dev,#define BOND_VLAN_FEATURES (NETIF_F_HW_CSUM | NETIF_F_SG | \ NETIF_F_FRAGLIST | NETIF_F_GSO_SOFTWARE | \ + NETIF_F_GSO_ENCAP_ALL | \ NETIF_F_HIGHDMA | NETIF_F_LRO)#define BOND_ENC_FEATURES (NETIF_F_HW_CSUM | NETIF_F_SG | \
@@ -1564,8 +1563,9 @@ static void bond_compute_features(struct bonding *bond)if (!bond_has_slaves (bond)) goto done; - vlan_features &=NETIF_F_ALL_FOR_ALL ; - mpls_features &=NETIF_F_ALL_FOR_ALL ; + + vlan_features =netdev_base_features (vlan_features); + mpls_features =netdev_base_features (mpls_features);bond_for_each_slave (bond, slave, iter) { vlan_features = netdev_increment_features(vlan_features,
drivers/net/dsa/microchip/ksz_common.c +18 -24
78 lines not on this page · raw message
drivers/net/dsa/ocelot/felix_vsc9959.c +11 -6
@@ -24,7 +24,7 @@#define VSC9959_NUM_PORTS 6#define VSC9959_TAS_GCL_ENTRY_MAX 63 -#define VSC9959_TAS_MIN_GATE_LEN_NS 33 +#define VSC9959_TAS_MIN_GATE_LEN_NS 35#define VSC9959_VCAP_POLICER_BASE 63#define VSC9959_VCAP_POLICER_MAX 383#define VSC9959_SWITCH_PCI_BAR 4
@@ -1056,11 +1056,15 @@ static void vsc9959_mdio_bus_free(struct ocelot *ocelot)mdiobus_free (felix->imdio); } -/* The switch considers any frame (regardless of size) as eligible for -* transmission if the traffic class gate is open for at least 33 ns. +/* The switch considers any frame (regardless of size) as eligible +* for transmission if the traffic class gate is open for at least +* VSC9959_TAS_MIN_GATE_LEN_NS. +* * Overruns are prevented by cropping an interval at the end of the gate time -* slot for which egress scheduling is blocked, but we need to still keep 33 ns -* available for one packet to be transmitted, otherwise the port tc will hang. +* slot for which egress scheduling is blocked, but we need to still keep +* VSC9959_TAS_MIN_GATE_LEN_NS available for one packet to be transmitted, +* otherwise the port tc will hang. +* * This function returns the size of a gate interval that remains available for * setting the guard band, after reserving the space for one egress frame. */
@@ -1303,7 +1307,8 @@ static void vsc9959_tas_guard_bands_update(struct ocelot *ocelot, int port)* per-tc static guard band lengths, so it reduces the * useful gate interval length. Therefore, be careful * to calculate a guard band (and therefore max_sdu) -* that still leaves 33 ns available in the time slot. +* that still leaves VSC9959_TAS_MIN_GATE_LEN_NS +* available in the time slot. */ max_sdu =div_u64 (remaining_gate_len_ps, picos_per_byte);/* A TC gate may be completely closed, which is a
drivers/net/ethernet/broadcom/bnxt/bnxt.c +6 -8
@@ -1518,7 +1518,7 @@ static void bnxt_tpa_start(struct bnxt *bp, struct bnxt_rx_ring_info *rxr,if (TPA_START_IS_IPV6 (tpa_start1)) tpa_info->gso_type =SKB_GSO_TCPV6 ;/* RSS profiles 1 and 3 with extract code 0 for inner 4-tuple */ -else if (cmp_type ==CMP_TYPE_RX_L2_TPA_START_CMP && +else if (!BNXT_CHIP_P4_PLUS (bp) &&TPA_START_HASH_TYPE (tpa_start) ==3 ) tpa_info->gso_type =SKB_GSO_TCPV6 ; tpa_info->rss_hash =
@@ -2212,15 +2212,13 @@ static int bnxt_rx_pkt(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,if (cmp_type ==CMP_TYPE_RX_L2_V3_CMP ) { type =bnxt_rss_ext_op (bp, rxcmp); }else { -u32 hash_type =RX_CMP_HASH_TYPE (rxcmp); +u32 itypes =RX_CMP_ITYPES (rxcmp); -/* RSS profiles 1 and 3 with extract code 0 for inner -* 4-tuple -*/ -if (hash_type !=1 && hash_type !=3 ) - type =PKT_HASH_TYPE_L3 ; -else +if (itypes ==RX_CMP_FLAGS_ITYPE_TCP || + itypes ==RX_CMP_FLAGS_ITYPE_UDP ) type =PKT_HASH_TYPE_L4 ; +else + type =PKT_HASH_TYPE_L3 ; }skb_set_hash (skb,le32_to_cpu (rxcmp->rx_cmp_rss_hash), type); }
drivers/net/ethernet/broadcom/bnxt/bnxt.h +6 -3
@@ -267,6 +267,9 @@ struct rx_cmp { (((le32_to_cpu ((rxcmp)->rx_cmp_misc_v1) &RX_CMP_RSS_HASH_TYPE ) >>\ RX_CMP_RSS_HASH_TYPE_SHIFT) & RSS_PROFILE_ID_MASK) +#define RX_CMP_ITYPES (rxcmp) \ + (le32_to_cpu((rxcmp)->rx_cmp_len_flags_type) & RX_CMP_FLAGS_ITYPES_MASK) +#define RX_CMP_V3_HASH_TYPE_LEGACY (rxcmp) \ ((le32_to_cpu((rxcmp)->rx_cmp_misc_v1) & RX_CMP_V3_RSS_EXT_OP_LEGACY) >>\ RX_CMP_V3_RSS_EXT_OP_LEGACY_SHIFT)
@@ -378,7 +381,7 @@ struct rx_agg_cmp {u32 rx_agg_cmp_opaque;__le32 rx_agg_cmp_v;#define RX_AGG_CMP_V (1 << 0) -#define RX_AGG_CMP_AGG_ID (0xffff << 16) +#define RX_AGG_CMP_AGG_ID (0x0fff << 16)#define RX_AGG_CMP_AGG_ID_SHIFT 16__le32 rx_agg_cmp_unused; };
@@ -416,7 +419,7 @@ struct rx_tpa_start_cmp {#define RX_TPA_START_CMP_V3_RSS_HASH_TYPE_SHIFT 7#define RX_TPA_START_CMP_AGG_ID (0x7f << 25)#define RX_TPA_START_CMP_AGG_ID_SHIFT 25 -#define RX_TPA_START_CMP_AGG_ID_P5 (0xffff << 16) +#define RX_TPA_START_CMP_AGG_ID_P5 (0x0fff << 16)#define RX_TPA_START_CMP_AGG_ID_SHIFT_P5 16#define RX_TPA_START_CMP_METADATA1 (0xf << 28)#define RX_TPA_START_CMP_METADATA1_SHIFT 28
@@ -540,7 +543,7 @@ struct rx_tpa_end_cmp {#define RX_TPA_END_CMP_PAYLOAD_OFFSET_SHIFT 16#define RX_TPA_END_CMP_AGG_ID (0x7f << 25)#define RX_TPA_END_CMP_AGG_ID_SHIFT 25 -#define RX_TPA_END_CMP_AGG_ID_P5 (0xffff << 16) +#define RX_TPA_END_CMP_AGG_ID_P5 (0x0fff << 16)#define RX_TPA_END_CMP_AGG_ID_SHIFT_P5 16__le32 rx_tpa_end_cmp_tsdelta;
drivers/net/ethernet/chelsio/cxgb4/cxgb4.h +1 -1
@@ -2077,7 +2077,7 @@ void t4_idma_monitor(struct adapter *adapter,struct sge_idma_monitor_state *idma, int hz, int ticks);int t4_set_vf_mac_acl (struct adapter *adapter,unsigned int vf, -unsigned int naddr,u8 *addr); +u8 start,unsigned int naddr,u8 *addr);void t4_tp_pio_read (struct adapter *adap,u32 *buff,u32 nregs,u32 start_index,bool sleep_ok); void t4_tp_tm_pio_read(struct adapter *adap, u32 *buff, u32 nregs,
drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c +1 -1
@@ -3246,7 +3246,7 @@ static int cxgb4_mgmt_set_vf_mac(struct net_device *dev, int vf, u8 *mac)dev_info (pi->adapter->pdev_dev,"Setting MAC %pM on VF %d\n" , mac, vf); - ret =t4_set_vf_mac_acl (adap, vf +1 ,1 , mac); + ret =t4_set_vf_mac_acl (adap, vf +1 , pi->lport,1 , mac);if (!ret)ether_addr_copy (adap->vfinfo[vf].vf_mac_addr, mac);return ret;
drivers/net/ethernet/chelsio/cxgb4/t4_hw.c +3 -2
@@ -10215,11 +10215,12 @@ int t4_load_cfg(struct adapter *adap, const u8 *cfg_data, unsigned int size)* t4_set_vf_mac_acl - Set MAC address for the specified VF * @adapter: The adapter * @vf: one of the VFs instantiated by the specified PF +* @start: The start port id associated with specified VF * @naddr: the number of MAC addresses * @addr: the MAC address(es) to be set to the specified VF */ int t4_set_vf_mac_acl (struct adapter *adapter,unsigned int vf, -unsigned int naddr,u8 *addr) +u8 start,unsigned int naddr,u8 *addr) {struct fw_acl_mac_cmd cmd;
@@ -10234,7 +10235,7 @@ int t4_set_vf_mac_acl(struct adapter *adapter, unsigned int vf, cmd.en_to_len16 =cpu_to_be32 ((unsigned int )FW_LEN16 (cmd)); cmd.nmac = naddr; -switch (adapter->pf) { +switch (start) {case 3 :memcpy (cmd.macaddr3, addr,sizeof (cmd.macaddr3));break ;
drivers/net/ethernet/mellanox/mlx5/core/steering/dr_domain.c +3 -1
@@ -297,7 +297,9 @@ dr_domain_add_vport_cap(struct mlx5dr_domain *dmn, u16 vport)if (ret) {mlx5dr_dbg (dmn,"Couldn't insert new vport into xarray (%d)\n" , ret);kvfree (vport_caps); -return ERR_PTR (ret); +if (ret == -EBUSY ) +return ERR_PTR (-EBUSY ); +return NULL ; }return vport_caps;
drivers/net/ethernet/microchip/sparx5/sparx5_main.c +5 -6
@@ -693,12 +693,11 @@ static int sparx5_start(struct sparx5 *sparx5) err = -ENXIO ;if (sparx5->fdma_irq >=0 ) {if (GCB_CHIP_ID_REV_ID_GET (sparx5->chip_id) >0 ) - err =devm_request_threaded_irq (sparx5->dev, - sparx5->fdma_irq, -NULL , - sparx5_fdma_handler, -IRQF_ONESHOT , -"sparx5-fdma" , sparx5); + err =devm_request_irq (sparx5->dev, + sparx5->fdma_irq, + sparx5_fdma_handler, +0 , +"sparx5-fdma" , sparx5);if (!err) err =sparx5_fdma_start (sparx5);if (err)
drivers/net/ethernet/microchip/sparx5/sparx5_port.c +1 -1
@@ -1119,7 +1119,7 @@ int sparx5_port_init(struct sparx5 *sparx5,spx5_inst_rmw (DEV10G_MAC_MAXLEN_CFG_MAX_LEN_SET (ETH_MAXLEN ),DEV10G_MAC_MAXLEN_CFG_MAX_LEN , devinst, -DEV10G_MAC_ENA_CFG (0 )); +DEV10G_MAC_MAXLEN_CFG (0 ));/* Handle Signal Detect in 10G PCS */ spx5_inst_wr(PCS10G_BR_PCS_SD_CFG_SD_POL_SET(sd_pol) |
drivers/net/ethernet/microsoft/mana/gdma_main.c +4 -2
@@ -1315,7 +1315,7 @@ static int mana_gd_setup_irqs(struct pci_dev *pdev) GFP_KERNEL);if (!gc->irq_contexts) { err = -ENOMEM ; - goto free_irq_vector; + goto free_irq_array; }for (i =0 ; i < nvec; i++) {
@@ -1372,6 +1372,7 @@ static int mana_gd_setup_irqs(struct pci_dev *pdev) gc->max_num_msix = nvec; gc->num_msix_usable = nvec;cpus_read_unlock (); +kfree (irqs);return 0 ; free_irq:
@@ -1384,8 +1385,9 @@ static int mana_gd_setup_irqs(struct pci_dev *pdev) }kfree (gc->irq_contexts); -kfree (irqs); gc->irq_contexts =NULL ; +free_irq_array: +kfree (irqs); free_irq_vector:cpus_read_unlock ();pci_free_irq_vectors (pdev);
drivers/net/ethernet/mscc/ocelot_ptp.c +129 -80
21 lines not on this page · raw message
drivers/net/ethernet/qualcomm/qca_spi.c +11 -15
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/qualcomm/qca_spi.h +0 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/renesas/rswitch.c +53 -32
85 lines not on this page · raw message
drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/usb/typec/anx7411.c +41 -25
66 lines not on this page · raw message
kernel/bpf/btf.c +145 -4
149 lines not on this page · raw message
kernel/bpf/verifier.c +7 -72
79 lines not on this page · raw message
net/batman-adv/translation-table.c +40 -18
58 lines not on this page · raw message
net/bluetooth/iso.c +51 -18
69 lines not on this page · raw message
net/mac80211/ieee80211_i.h +40 -9
49 lines not on this page · raw message
net/netfilter/xt_IDLETIMER.c +28 -24
52 lines not on this page · raw message
tools/testing/selftests/arm64/abi/syscall-abi-asm.S +15 -17
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/progs/test_tp_btf_nullable.c +1 -5
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/progs/verifier_btf_ctx_access.c +2 -2
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/progs/verifier_d_path.c +2 -2
Lines of this file are not shown. View the raw message.
tools/testing/selftests/drivers/net/mlxsw/sharedbuffer.sh +40 -15
55 lines not on this page · raw message
tools/testing/selftests/net/netfilter/rpath.sh +16 -2
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.