Linux 6.8.7
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.8.7 kernel.
All users of the 6.8 kernel series must upgrade.
The updated 6.8.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.8.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/admin-guide/hw-vuln/spectre.rst | 22 Documentation/admin-guide/kernel-parameters.txt | 12 Documentation/devicetree/bindings/display/msm/qcom,sm8150-mdss.yaml | 9 Makefile | 2 arch/arm/boot/dts/nxp/imx/imx7s-warp.dts | 1 arch/arm/mach-omap2/board-n8x0.c | 23 - arch/arm64/boot/dts/freescale/imx8-ss-conn.dtsi | 16 arch/arm64/boot/dts/freescale/imx8-ss-dma.dtsi | 40 - arch/arm64/boot/dts/freescale/imx8-ss-lsio.dtsi | 16 arch/arm64/boot/dts/freescale/imx8mp-venice-gw72xx.dtsi | 2 arch/arm64/boot/dts/freescale/imx8mp-venice-gw73xx.dtsi | 2 arch/arm64/boot/dts/freescale/imx8qm-ss-dma.dtsi | 8 arch/arm64/include/asm/tlbflush.h | 20 arch/x86/Kconfig | 21 arch/x86/events/core.c | 1 arch/x86/include/asm/apic.h | 3 arch/x86/kernel/apic/apic.c | 6 arch/x86/kernel/cpu/bugs.c | 82 +-- arch/x86/kernel/cpu/common.c | 48 +- block/blk-cgroup.c | 9 block/blk-cgroup.h | 2 block/blk-core.c | 2 drivers/accel/ivpu/ivpu_drv.c | 20 drivers/accel/ivpu/ivpu_hw.h | 6 drivers/accel/ivpu/ivpu_hw_37xx.c | 7 drivers/accel/ivpu/ivpu_hw_40xx.c | 6 drivers/accel/ivpu/ivpu_ipc.c | 8 drivers/accel/ivpu/ivpu_pm.c | 5 drivers/acpi/numa/hmat.c | 43 + drivers/acpi/scan.c | 3 drivers/ata/libata-core.c | 2 drivers/ata/libata-scsi.c | 9 drivers/base/node.c | 6 drivers/cxl/acpi.c | 8 drivers/cxl/core/cdat.c | 58 +- drivers/cxl/core/mbox.c | 5 drivers/cxl/core/port.c | 76 ++- drivers/cxl/core/regs.c | 5 drivers/cxl/cxl.h | 8 drivers/firmware/arm_ffa/driver.c | 2 drivers/firmware/arm_scmi/raw_mode.c | 7 drivers/gpu/drm/amd/amdgpu/amdgpu_vpe.c | 6 drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c | 2 drivers/gpu/drm/amd/amdgpu/soc21.c | 32 + drivers/gpu/drm/amd/amdgpu/umsch_mm_v4_0.c | 2 drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 1 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 15 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_wb.c | 6 drivers/gpu/drm/amd/display/dc/clk_mgr/dcn316/dcn316_clk_mgr.c | 19 drivers/gpu/drm/amd/display/dc/core/dc_state.c | 9 drivers/gpu/drm/amd/display/dc/optc/dcn32/dcn32_optc.c | 3 drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_4_ppt.c | 12 drivers/gpu/drm/ast/ast_dp.c | 3 drivers/gpu/drm/drm_client_modeset.c | 3 drivers/gpu/drm/i915/display/intel_cdclk.c | 7 drivers/gpu/drm/i915/display/intel_cdclk.h | 3 drivers/gpu/drm/i915/display/intel_ddi.c | 5 drivers/gpu/drm/i915/display/intel_dp.c | 6 drivers/gpu/drm/i915/display/intel_psr.c | 11 drivers/gpu/drm/i915/display/intel_vrr.c | 7 drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 4 drivers/gpu/drm/msm/disp/dpu1/dpu_core_perf.c | 10 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c | 8 drivers/gpu/drm/msm/dp/dp_display.c | 2 drivers/gpu/drm/msm/msm_fb.c | 6 drivers/gpu/drm/msm/msm_kms.c | 4 drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowof.c | 7 drivers/gpu/drm/panfrost/panfrost_mmu.c | 13 drivers/gpu/drm/qxl/qxl_release.c | 50 +- drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 11 drivers/gpu/drm/xe/xe_display.c | 5 drivers/gpu/drm/xe/xe_hwmon.c | 4 drivers/iommu/intel/iommu.c | 11 drivers/iommu/intel/perfmon.c | 2 drivers/iommu/intel/svm.c | 2 drivers/md/raid1.c | 2 drivers/media/cec/core/cec-adap.c | 14 drivers/mmc/host/omap.c | 48 +- drivers/net/dsa/mt7530.c | 229 ++++++++-- drivers/net/dsa/mt7530.h | 5 drivers/net/ethernet/amazon/ena/ena_com.c | 2 drivers/net/ethernet/amazon/ena/ena_netdev.c | 35 + drivers/net/ethernet/amazon/ena/ena_xdp.c | 4 drivers/net/ethernet/amd/pds_core/core.c | 14 drivers/net/ethernet/amd/pds_core/core.h | 5 drivers/net/ethernet/amd/pds_core/dev.c | 3 drivers/net/ethernet/amd/pds_core/main.c | 8 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 2 drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c | 6 drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c | 20 drivers/net/ethernet/marvell/octeontx2/nic/qos.c | 1 drivers/net/ethernet/mellanox/mlx5/core/en/ptp.h | 8 drivers/net/ethernet/mellanox/mlx5/core/en/qos.c | 33 - drivers/net/ethernet/mellanox/mlx5/core/en/selq.c | 2 drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c | 17 drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 2 drivers/net/ethernet/mellanox/mlx5/core/en_tx.c | 7 drivers/net/ethernet/mellanox/mlx5/core/fs_core.c | 17 drivers/net/ethernet/mellanox/mlx5/core/main.c | 37 - drivers/net/ethernet/mellanox/mlx5/core/pci_irq.c | 4 drivers/net/ethernet/mellanox/mlx5/core/sf/dev/driver.c | 22 drivers/net/ethernet/micrel/ks8851.h | 3 drivers/net/ethernet/micrel/ks8851_common.c | 16 drivers/net/ethernet/micrel/ks8851_par.c | 11 drivers/net/ethernet/micrel/ks8851_spi.c | 11 drivers/net/ethernet/microchip/sparx5/sparx5_port.c | 4 drivers/net/geneve.c | 4 drivers/net/virtio_net.c | 26 - drivers/platform/chrome/cros_ec_uart.c | 28 - drivers/scsi/hisi_sas/hisi_sas_main.c | 2 drivers/scsi/qla2xxx/qla_edif.c | 2 drivers/scsi/sg.c | 20 drivers/vhost/vhost.c | 24 - fs/btrfs/delayed-inode.c | 3 fs/btrfs/inode.c | 13 fs/btrfs/ioctl.c | 37 + fs/btrfs/qgroup.c | 2 fs/btrfs/root-tree.c | 10 fs/btrfs/root-tree.h | 2 fs/btrfs/tests/extent-io-tests.c | 28 + fs/btrfs/transaction.c | 17 fs/ceph/addr.c | 4 fs/ceph/caps.c | 4 fs/ceph/mds_client.c | 9 fs/ceph/mds_client.h | 3 fs/kernfs/file.c | 9 fs/proc/bootconfig.c | 12 fs/smb/client/cached_dir.c | 4 include/acpi/acpi_bus.h | 8 include/linux/bootconfig.h | 1 include/linux/dma-fence.h | 7 include/linux/irqflags.h | 2 include/linux/node.h | 18 include/linux/u64_stats_sync.h | 9 include/net/addrconf.h | 4 include/net/af_unix.h | 2 include/net/bluetooth/bluetooth.h | 11 include/net/ip_tunnels.h | 33 + init/main.c | 5 io_uring/io_uring.c | 25 + io_uring/net.c | 22 io_uring/rw.c | 2 kernel/cpu.c | 3 kernel/kprobes.c | 18 kernel/power/suspend.c | 6 kernel/trace/ring_buffer.c | 6 kernel/trace/trace_events.c | 4 lib/checksum_kunit.c | 5 net/batman-adv/translation-table.c | 2 net/bluetooth/hci_request.c | 4 net/bluetooth/hci_sock.c | 21 net/bluetooth/hci_sync.c | 66 ++ net/bluetooth/iso.c | 50 -- net/bluetooth/l2cap_core.c | 3 net/bluetooth/l2cap_sock.c | 52 -- net/bluetooth/rfcomm/sock.c | 14 net/bluetooth/sco.c | 23 - net/ipv4/netfilter/arp_tables.c | 4 net/ipv4/netfilter/ip_tables.c | 4 net/ipv4/route.c | 4 net/ipv6/addrconf.c | 7 net/ipv6/ip6_fib.c | 7 net/ipv6/netfilter/ip6_tables.c | 4 net/openvswitch/conntrack.c | 5 net/unix/af_unix.c | 8 net/unix/garbage.c | 35 + net/unix/scm.c | 8 net/xdp/xsk.c | 2 tools/testing/selftests/kselftest.h | 33 + tools/testing/selftests/timers/posix_timers.c | 105 ++-- 170 files changed, 1553 insertions(+), 876 deletions(-)
Aaro Koskinen (6):
ARM: OMAP2+: fix bogus MMC GPIO labels on Nokia N8x0
ARM: OMAP2+: fix N810 MMC gpiod table
mmc: omap: fix broken slot switch lookup
mmc: omap: fix deferred probe
mmc: omap: restore original power up/down steps
ARM: OMAP2+: fix USB regression on Nokia N8x0
Adam Dunlap (1):
x86/apic: Force native_apic_mem_read() to use the MOV instruction
Alex Constantino (1):
Revert "drm/qxl: simplify qxl_fence_wait"
Alex Deucher (1):
drm/amdgpu: always force full reset for SOC21
Alex Hung (1):
drm/amd/display: Return max resolution supported by DWB
Alexander Wetzel (2):
scsi: sg: Avoid sg device teardown race
scsi: sg: Avoid race in error handling & drop bogus warn
Amir Goldstein (1):
kernfs: annotate different lockdep class for of->mutex of writable files
Anna-Maria Behnsen (1):
PM: s2idle: Make sure CPUs will wakeup directly on resume
Archie Pusaka (1):
Bluetooth: l2cap: Don't double set the HCI_CONN_MGMT_CONNECTED bit
Arnd Bergmann (6):
nouveau: fix function cast warning
lib: checksum: hide unused expected_csum_ipv6_magic[]
ipv6: fib: hide unused 'pn' variable
ipv4/route: avoid unused-but-set-variable warning
tracing: hide unused ftrace_event_id_fops
irqflags: Explicitly ignore lockdep_hrtimer_exit() argument
Arınç ÜNAL (1):
net: dsa: mt7530: trap link-local frames regardless of ST Port State
Boris Brezillon (1):
drm/panfrost: Fix the error path in panfrost_mmu_map_fault_addr()
Boris Burkov (4):
btrfs: qgroup: correctly model root qgroup rsv in convert
btrfs: qgroup: fix qgroup prealloc rsv leak in subvolume operations
btrfs: record delayed inode root in transaction
btrfs: qgroup: convert PREALLOC to PERTRANS after record_root_in_trans
Breno Leitao (1):
virtio_net: Do not send RSS key if it is not supported
Brett Creeley (1):
pds_core: Fix pdsc_check_pci_health function to use work thread
Carolina Jubran (3):
net/mlx5e: RSS, Block changing channels number when RXFH is configured net/mlx5e: Fix mlx5e_priv_init() cleanup flow
net/mlx5e: HTB, Fix inconsistencies with QoS SQs number
Cosmin Ratiu (2):
net/mlx5: Properly link new fs rules into the tree net/mlx5: Correctly compare pkt reformat ids
Cristian Marussi (1):
firmware: arm_scmi: Make raw debugfs entries non-seekable
Damien Le Moal (1):
ata: libata-scsi: Fix ata_scsi_dev_rescan() error path
Dan Carpenter (1):
scsi: qla2xxx: Fix off by one in qla_edif_app_getstats()
Daniel Machon (1):
net: sparx5: fix wrong config being used when reconfiguring PCS
Daniel Sneddon (1):
x86/bugs: Fix return type of spectre_bhi_state()
Dave Jiang (8):
cxl/core/regs: Fix usage of map->reg_type in cxl_decode_regblock() before assigned base/node / ACPI: Enumerate node access class for 'struct access_coordinate'
ACPI: HMAT: Introduce 2 levels of generic port access class
ACPI: HMAT / cxl: Add retrieval of generic port coordinates for both access classes
cxl: Split out combine_coordinates() for common shared usage
cxl: Split out host bridge access coordinates
cxl: Remove checking of iter in cxl_endpoint_get_perf_coordinates()
cxl: Fix retrieving of access_coordinates in PCIe path
David Arinzon (4):
net: ena: Fix potential sign extension issue
net: ena: Wrong missing IO completions check order
net: ena: Fix incorrect descriptor free behavior
net: ena: Set tx_info->xdpf value to NULL
David Sterba (1):
btrfs: tests: allocate dummy fs_info and root in test_find_delalloc()
Dillon Varone (1):
drm/amd/display: Do not recursively call manual trigger programming
Dmitry Antipov (1):
Bluetooth: Fix memory leak in hci_req_sync_complete()
Dmitry Baryshkov (3):
drm/msm/dpu: don't allow overriding data from catalog
drm/msm/dpu: make error messages at dpu_core_irq_register_callback() more sensible
dt-bindings: display/msm: sm8150-mdss: add DP node
Eric Dumazet (3):
xsk: validate user input for XDP_{UMEM|COMPLETION}_FILL_RING
geneve: fix header validation in geneve[6]_xmit_skb
netfilter: complete validation of user input
Fabio Estevam (1):
ARM: dts: imx7s-warp: Pass OV2680 link-frequencies
Frank Li (8):
arm64: dts: imx8-ss-conn: fix usdhc wrong lpcg clock order
arm64: dts: imx8qm-ss-dma: fix can lpcg indices
arm64: dts: imx8-ss-dma: fix can lpcg indices
arm64: dts: imx8-ss-dma: fix adc lpcg indices
arm64: dts: imx8-ss-conn: fix usb lpcg indices
arm64: dts: imx8-ss-dma: fix pwm lpcg indices
arm64: dts: imx8-ss-lsio: fix pwm lpcg indices
arm64: dts: imx8-ss-dma: fix spi lpcg indices
Fudongwang (1):
drm/amd/display: fix disable otg wa logic in DCN316
Gavin Shan (3):
arm64: tlb: Fix TLBI RANGE operand
vhost: Add smp_rmb() in vhost_vq_avail_empty()
vhost: Add smp_rmb() in vhost_enable_notify()
Geetha sowjanya (1):
octeontx2-af: Fix NIX SQ mode and BP config
Gerd Bayer (2):
s390/ism: fix receive message buffer allocation Revert "s390/ism: fix receive message buffer allocation"
Greg Kroah-Hartman (1):
Linux 6.8.7
Hans de Goede (1):
ACPI: scan: Do not increase dep_unmet for already met dependencies
Hariprasad Kelam (1):
octeontx2-pf: Fix transmit scheduler resource leak
Harish Kasiviswanathan (1):
drm/amdkfd: Reset GPU on queue preemption failure
Harry Wentland (2):
drm/amd/display: Program VSC SDP colorimetry for all DP sinks >= 1.4 drm/amd/display: Set VSC SDP Colorimetry same way for MST and SST
Igor Pylypiv (1):
ata: libata-core: Allow command duration limits detection for ACS-4 drives
Ilya Maximets (1):
net: openvswitch: fix unwanted error log on timeout policy probing
Ingo Molnar (1):
x86/bugs: Rename various 'ia32_cap' variables to 'x86_arch_cap_msr'
Jacek Lawrynowicz (3):
accel/ivpu: Put NPU back to D3hot after failed resume accel/ivpu: Return max freq for DRM_IVPU_PARAM_CORE_CLOCK_RATE accel/ivpu: Fix deadlock in context_xa
Jacob Pan (1):
iommu/vt-d: Allocate local memory for page request queue
Jammy Huang (1):
drm/ast: Fix soft lockup
Jens Axboe (1):
io_uring: disable io-wq execution of multishot NOWAIT requests
Jens Wiklander (1):
firmware: arm_ffa: Fix the partition ID check in ffa_notification_info_get()
Jiri Benc (1):
ipv6: fix race condition between ipv6_get_ifaddr and ipv6_del_addr
Johan Hovold (2):
drm/msm/dp: fix runtime PM leak on disconnect drm/msm/dp: fix runtime PM leak on connect failure
John Stultz (2):
selftests: timers: Fix posix_timers ksft_print_msg() warning
selftests: timers: Fix abs() warning in posix_timers test
Josh Poimboeuf (6):
x86/bugs: Fix BHI documentation
x86/bugs: Cache the value of MSR_IA32_ARCH_CAPABILITIES
x86/bugs: Fix BHI handling of RRSBA
x86/bugs: Clarify that syscall hardening isn't a BHI mitigation x86/bugs: Remove CONFIG_BHI_MITIGATION_AUTO and spectre_bhi=auto x86/bugs: Replace CONFIG_SPECTRE_BHI_{ON,OFF} with CONFIG_MITIGATION_SPECTRE_BHI
Karthik Poosa (1):
drm/xe/hwmon: Cast result to output precision on left shift of operand
Kuniyuki Iwashima (2):
af_unix: Clear stale u->oob_skb.
af_unix: Do not use atomic ops for unix_sk(sk)->inflight.Kwangjin Ko (1):
cxl/core: Fix initialization of mbox_cmd.size_out in get event
Lang Yu (1):
drm/amdgpu/umsch: reinitialize write pointer in hw init
Lijo Lazar (1):
drm/amdgpu: Reset dGPU if suspend got aborted
Lu Baolu (1):
iommu/vt-d: Fix WARN_ON in iommu probe path
Luca Weiss (1):
drm/msm/adreno: Set highest_bank_bit for A619
Lucas De Marchi (1):
drm/xe/display: Fix double mutex initialization
Luiz Augusto von Dentz (9):
Bluetooth: ISO: Align broadcast sync_timeout with connection timeout
Bluetooth: ISO: Don't reject BT_ISO_QOS if parameters are unset
Bluetooth: hci_sync: Use QoS to determine which PHY to scan
Bluetooth: hci_sync: Fix using the same interval and window for Coded PHY
Bluetooth: SCO: Fix not validating setsockopt user input
Bluetooth: RFCOMM: Fix not validating setsockopt user input
Bluetooth: L2CAP: Fix not validating setsockopt user input
Bluetooth: ISO: Fix not validating setsockopt user input
Bluetooth: hci_sock: Fix not validating setsockopt user input
Marek Vasut (2):
net: ks8851: Inline ks8851_rx_skb()
net: ks8851: Handle softirqs at the end of IRQ thread to fix hang
Masami Hiramatsu (1):
fs/proc: Skip bootloader comment if no embedded kernel parameters
Michael Liang (1):
net/mlx5: offset comp irq index in name by one
Michal Luczaj (1):
af_unix: Fix garbage collector racing against connect()
Ming Lei (1):
block: fix q->blkg_list corruption during disk rebind
Moshe Shemesh (1):
net/mlx5: SF, Stop waiting for FW as teardown was called
Namhyung Kim (1):
perf/x86: Fix out of range data
Nathan Chancellor (1):
selftests: kselftest: Mark functions that unconditionally call exit() as __noreturn
NeilBrown (1):
ceph: redirty page before returning AOP_WRITEPAGE_ACTIVATE
Nini Song (1):
media: cec: core: remove length check of Timer Status
Noah Loomans (1):
platform/chrome: cros_ec_uart: properly fix race condition
Oleg Nesterov (2):
selftests/timers/posix_timers: Reimplement check_timer_distribution()
selftests: kselftest: Fix build failure with NOLIBC
Pavan Chebbi (1):
bnxt_en: Reset PTP tx_avail after possible firmware reset
Pavel Begunkov (2):
io_uring: refactor DEFER_TASKRUN multishot checks io_uring/net: restore msg_control on sendzc retry
Petr Tesarik (1):
u64_stats: fix u64_stats_init() for lockdep when used repeatedly in one file
Peyton Lee (1):
drm/amdgpu/vpe: power on vpe when hw_init
Raag Jadav (1):
ACPI: bus: allow _UID matching for integer zero
Rahul Rameshbabu (1):
net/mlx5e: Do not produce metadata freelist entries in Tx port ts WQE xmit
Sean Christopherson (1):
x86/cpu: Actually turn off mitigations by default for SPECULATION_MITIGATIONS=n
Shannon Nelson (1):
pds_core: use pci_reset_function for health reset
Shay Drory (1):
net/mlx5: Register devlink first under devlink lock
Stephen Boyd (1):
drm/msm: Add newlines to some debug prints
Steve French (1):
smb3: fix Open files on server counter going negative
Steven Rostedt (Google) (1):
ring-buffer: Only update pages_touched when a new page is touched
Sven Eckelmann (1):
batman-adv: Avoid infinite loop trying to resize local TT
Tim Harvey (2):
arm64: dts: freescale: imx8mp-venice-gw72xx-2x: fix USB vbus regulator
arm64: dts: freescale: imx8mp-venice-gw73xx-2x: fix USB vbus regulator
Tim Huang (2):
drm/amd/pm: fixes a random hang in S4 for SMU v13.0.4/11 drm/amdgpu: fix incorrect number of active RBs for gfx11
Vikas Gupta (2):
bnxt_en: Fix possible memory leak in bnxt_rdma_aux_device_init()
bnxt_en: Fix error recovery for RoCE ulp client
Ville Syrjälä (6):
drm/i915/vrr: Disable VRR when using bigjoiner drm/client: Fully protect modes[] with dev->mode_config.mutex drm/i915/cdclk: Fix CDCLK programming order when pipes are active drm/i915/psr: Disable PSR when bigjoiner is used drm/i915: Disable port sync when bigjoiner is used drm/i915: Disable live M/N updates when using bigjoiner
Wachowski, Karol (2):
accel/ivpu: Check return code of ipc->lock init accel/ivpu: Fix PCI D0 state entry in resume
Wenjing Liu (1):
drm/amd/display: always reset ODM mode in context when adding first plane
Xiang Chen (1):
scsi: hisi_sas: Modify the deadline for ata_wait_after_reset()
Xiubo Li (1):
ceph: switch to use cap_delay_lock for the unlink delay list
Xuchun Shang (1):
iommu/vt-d: Fix wrong use of pasid config
Yifan Zhang (1):
drm/amdgpu: differentiate external rev id for gfx 11.5.0
Yu Kuai (1):
raid1: fix use-after-free for original bio in raid1_write_request()
Yuquan Wang (1):
cxl/mem: Fix for the index of Clear Event Record Handle
Zack Rusin (1):
drm/vmwgfx: Enable DMA mappings with SEV
Zheng Yejian (1):
kprobes: Fix possible use-after-free issue on kprobe registration
Zhenhua Huang (1):
fs/proc: remove redundant comments from /proc/bootconfig
Greg Kroah-Hartman
maintainerDocumentation/admin-guide/hw-vuln/spectre.rst +9 -13
@@ -439,12 +439,12 @@ The possible values in this file are: - System is protected by retpoline * - BHI: BHI_DIS_S - System is protected by BHI_DIS_S - * - BHI: SW loop; KVM SW loop + * - BHI: SW loop, KVM SW loop - System is protected by software clearing sequence - * - BHI: Syscall hardening - - Syscalls are hardened against BHI - * - BHI: Syscall hardening; KVM: SW loop - - System is protected from userspace attacks by syscall hardening; KVM is protected by software clearing sequence + * - BHI: Vulnerable + - System is vulnerable to BHI + * - BHI: Vulnerable, KVM: SW loop + - System is vulnerable; KVM is protected by software clearing sequence Full mitigation might require a microcode update from the CPU vendor. When the necessary microcode is not available, the kernel will
@@ -661,18 +661,14 @@ kernel command line. spectre_bhi= [X86] Control mitigation of Branch History Injection - (BHI) vulnerability. Syscalls are hardened against BHI - regardless of this setting. This setting affects the deployment + (BHI) vulnerability. This setting affects the deployment of the HW BHI control and the SW BHB clearing sequence. on - unconditionally enable. + (default) Enable the HW or SW mitigation as + needed. off - unconditionally disable. - auto - enable if hardware mitigation - control(BHI_DIS_S) is available, otherwise - enable alternate mitigation in KVM. + Disable the mitigation. For spectre_v2_user see Documentation/admin-guide/kernel-parameters.txt
Documentation/admin-guide/kernel-parameters.txt +5 -7
@@ -3419,6 +3419,7 @@ reg_file_data_sampling=off [X86] retbleed=off [X86] spec_store_bypass_disable=off [X86,PPC] + spectre_bhi=off [X86] spectre_v2_user=off [X86] srbds=off [X86,INTEL] ssbd=force-off [ARM64]
@@ -6032,16 +6033,13 @@ See Documentation/admin-guide/laptops/sonypi.rst spectre_bhi= [X86] Control mitigation of Branch History Injection - (BHI) vulnerability. Syscalls are hardened against BHI - reglardless of this setting. This setting affects the + (BHI) vulnerability. This setting affects the deployment of the HW BHI control and the SW BHB clearing sequence. - on - unconditionally enable. - off - unconditionally disable. - auto - (default) enable hardware mitigation - (BHI_DIS_S) if available, otherwise enable - alternate mitigation in KVM. + on - (default) Enable the HW or SW mitigation + as needed. + off - Disable the mitigation. spectre_v2= [X86] Control mitigation of Spectre variant 2 (indirect branch speculation) vulnerability.
Documentation/devicetree/bindings/display/msm/qcom,sm8150-mdss.yaml +9 -0
@@ -53,6 +53,15 @@ patternProperties: compatible: const: qcom,sm8150-dpu + "^displayport-controller@[0-9a-f]+$": + type: object + additionalProperties: true + + properties: + compatible: + contains: + const: qcom,sm8150-dp + "^dsi@[0-9a-f]+$": type: object additionalProperties: true
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 8 -SUBLEVEL = 6 +SUBLEVEL = 7 EXTRAVERSION = NAME = Hurr durr I'ma ninja sloth
arch/arm/boot/dts/nxp/imx/imx7s-warp.dts +1 -0
@@ -210,6 +210,7 @@ ov2680_to_mipi: endpoint { remote-endpoint = <&mipi_from_sensor>; clock-lanes = <0>; data-lanes = <1>; + link-frequencies = /bits/ 64 <330000000>; }; }; };
arch/arm/mach-omap2/board-n8x0.c +10 -13
@@ -79,10 +79,8 @@ static struct musb_hdrc_platform_data tusb_data = {static struct gpiod_lookup_table tusb_gpio_table = { .dev_id ="musb-tusb" , .table = { -GPIO_LOOKUP ("gpio-0-15" ,0 ,"enable" , -GPIO_ACTIVE_HIGH ), -GPIO_LOOKUP ("gpio-48-63" ,10 ,"int" , -GPIO_ACTIVE_HIGH ), +GPIO_LOOKUP ("gpio-0-31" ,0 ,"enable" ,GPIO_ACTIVE_HIGH ), +GPIO_LOOKUP ("gpio-32-63" ,26 ,"int" ,GPIO_ACTIVE_HIGH ), { } }, };
@@ -140,12 +138,11 @@ static int slot1_cover_open;static int slot2_cover_open;static struct device *mmc_device; -static struct gpiod_lookup_table nokia8xx_mmc_gpio_table = { +static struct gpiod_lookup_table nokia800_mmc_gpio_table = { .dev_id ="mmci-omap.0" , .table = {/* Slot switch, GPIO 96 */ -GPIO_LOOKUP ("gpio-80-111" ,16 , -"switch" ,GPIO_ACTIVE_HIGH ), +GPIO_LOOKUP ("gpio-96-127" ,0 ,"switch" ,GPIO_ACTIVE_HIGH ), { } }, };
@@ -153,12 +150,12 @@ static struct gpiod_lookup_table nokia8xx_mmc_gpio_table = {static struct gpiod_lookup_table nokia810_mmc_gpio_table = { .dev_id ="mmci-omap.0" , .table = { +/* Slot switch, GPIO 96 */ +GPIO_LOOKUP ("gpio-96-127" ,0 ,"switch" ,GPIO_ACTIVE_HIGH ),/* Slot index 1, VSD power, GPIO 23 */ -GPIO_LOOKUP_IDX ("gpio-16-31" ,7 , -"vsd" ,1 ,GPIO_ACTIVE_HIGH ), +GPIO_LOOKUP_IDX ("gpio-0-31" ,23 ,"vsd" ,1 ,GPIO_ACTIVE_HIGH ),/* Slot index 1, VIO power, GPIO 9 */ -GPIO_LOOKUP_IDX ("gpio-0-15" ,9 , -"vio" ,1 ,GPIO_ACTIVE_HIGH ), +GPIO_LOOKUP_IDX ("gpio-0-31" ,9 ,"vio" ,1 ,GPIO_ACTIVE_HIGH ), { } }, };
@@ -415,8 +412,6 @@ static struct omap_mmc_platform_data *mmc_data[OMAP24XX_NR_MMC];static void __init n8x0_mmc_init (void ) { -gpiod_add_lookup_table (&nokia8xx_mmc_gpio_table); -if (board_is_n810 ()) { mmc1_data.slots[0 ].name ="external" ;
@@ -429,6 +424,8 @@ static void __init n8x0_mmc_init(void) mmc1_data.slots[1 ].name ="internal" ; mmc1_data.slots[1 ].ban_openended =1 ;gpiod_add_lookup_table (&nokia810_mmc_gpio_table); + }else { +gpiod_add_lookup_table (&nokia800_mmc_gpio_table); } mmc1_data.nr_slots =2 ;
arch/arm64/boot/dts/freescale/imx8-ss-conn.dtsi +8 -8
@@ -41,7 +41,7 @@ usbotg1: usb@5b0d0000 { interrupts = <GIC_SPI 267 IRQ_TYPE_LEVEL_HIGH>; fsl,usbphy = <&usbphy1>; fsl,usbmisc = <&usbmisc1 0>; - clocks = <&usb2_lpcg 0>; + clocks = <&usb2_lpcg IMX_LPCG_CLK_6>; ahb-burst-config = <0x0>; tx-burst-size-dword = <0x10>; rx-burst-size-dword = <0x10>;
@@ -58,7 +58,7 @@ usbmisc1: usbmisc@5b0d0200 { usbphy1: usbphy@5b100000 { compatible = "fsl,imx7ulp-usbphy"; reg = <0x5b100000 0x1000>; - clocks = <&usb2_lpcg 1>; + clocks = <&usb2_lpcg IMX_LPCG_CLK_7>; power-domains = <&pd IMX_SC_R_USB_0_PHY>; status = "disabled"; };
@@ -67,8 +67,8 @@ usdhc1: mmc@5b010000 { interrupts = <GIC_SPI 232 IRQ_TYPE_LEVEL_HIGH>; reg = <0x5b010000 0x10000>; clocks = <&sdhc0_lpcg IMX_LPCG_CLK_4>, - <&sdhc0_lpcg IMX_LPCG_CLK_0>, - <&sdhc0_lpcg IMX_LPCG_CLK_5>; + <&sdhc0_lpcg IMX_LPCG_CLK_5>, + <&sdhc0_lpcg IMX_LPCG_CLK_0>; clock-names = "ipg", "ahb", "per"; power-domains = <&pd IMX_SC_R_SDHC_0>; status = "disabled";
@@ -78,8 +78,8 @@ usdhc2: mmc@5b020000 { interrupts = <GIC_SPI 233 IRQ_TYPE_LEVEL_HIGH>; reg = <0x5b020000 0x10000>; clocks = <&sdhc1_lpcg IMX_LPCG_CLK_4>, - <&sdhc1_lpcg IMX_LPCG_CLK_0>, - <&sdhc1_lpcg IMX_LPCG_CLK_5>; + <&sdhc1_lpcg IMX_LPCG_CLK_5>, + <&sdhc1_lpcg IMX_LPCG_CLK_0>; clock-names = "ipg", "ahb", "per"; power-domains = <&pd IMX_SC_R_SDHC_1>; fsl,tuning-start-tap = <20>;
@@ -91,8 +91,8 @@ usdhc3: mmc@5b030000 { interrupts = <GIC_SPI 234 IRQ_TYPE_LEVEL_HIGH>; reg = <0x5b030000 0x10000>; clocks = <&sdhc2_lpcg IMX_LPCG_CLK_4>, - <&sdhc2_lpcg IMX_LPCG_CLK_0>, - <&sdhc2_lpcg IMX_LPCG_CLK_5>; + <&sdhc2_lpcg IMX_LPCG_CLK_5>, + <&sdhc2_lpcg IMX_LPCG_CLK_0>; clock-names = "ipg", "ahb", "per"; power-domains = <&pd IMX_SC_R_SDHC_2>; status = "disabled";
arch/arm64/boot/dts/freescale/imx8-ss-dma.dtsi +20 -20
@@ -27,8 +27,8 @@ lpspi0: spi@5a000000 { #size-cells = <0>; interrupts = <GIC_SPI 336 IRQ_TYPE_LEVEL_HIGH>; interrupt-parent = <&gic>; - clocks = <&spi0_lpcg 0>, - <&spi0_lpcg 1>; + clocks = <&spi0_lpcg IMX_LPCG_CLK_0>, + <&spi0_lpcg IMX_LPCG_CLK_4>; clock-names = "per", "ipg"; assigned-clocks = <&clk IMX_SC_R_SPI_0 IMX_SC_PM_CLK_PER>; assigned-clock-rates = <60000000>;
@@ -43,8 +43,8 @@ lpspi1: spi@5a010000 { #size-cells = <0>; interrupts = <GIC_SPI 337 IRQ_TYPE_LEVEL_HIGH>; interrupt-parent = <&gic>; - clocks = <&spi1_lpcg 0>, - <&spi1_lpcg 1>; + clocks = <&spi1_lpcg IMX_LPCG_CLK_0>, + <&spi1_lpcg IMX_LPCG_CLK_4>; clock-names = "per", "ipg"; assigned-clocks = <&clk IMX_SC_R_SPI_1 IMX_SC_PM_CLK_PER>; assigned-clock-rates = <60000000>;
@@ -59,8 +59,8 @@ lpspi2: spi@5a020000 { #size-cells = <0>; interrupts = <GIC_SPI 338 IRQ_TYPE_LEVEL_HIGH>; interrupt-parent = <&gic>; - clocks = <&spi2_lpcg 0>, - <&spi2_lpcg 1>; + clocks = <&spi2_lpcg IMX_LPCG_CLK_0>, + <&spi2_lpcg IMX_LPCG_CLK_4>; clock-names = "per", "ipg"; assigned-clocks = <&clk IMX_SC_R_SPI_2 IMX_SC_PM_CLK_PER>; assigned-clock-rates = <60000000>;
@@ -75,8 +75,8 @@ lpspi3: spi@5a030000 { #size-cells = <0>; interrupts = <GIC_SPI 339 IRQ_TYPE_LEVEL_HIGH>; interrupt-parent = <&gic>; - clocks = <&spi3_lpcg 0>, - <&spi3_lpcg 1>; + clocks = <&spi3_lpcg IMX_LPCG_CLK_0>, + <&spi3_lpcg IMX_LPCG_CLK_4>; clock-names = "per", "ipg"; assigned-clocks = <&clk IMX_SC_R_SPI_3 IMX_SC_PM_CLK_PER>; assigned-clock-rates = <60000000>;
@@ -144,8 +144,8 @@ adma_pwm: pwm@5a190000 { compatible = "fsl,imx8qxp-pwm", "fsl,imx27-pwm"; reg = <0x5a190000 0x1000>; interrupts = <GIC_SPI 127 IRQ_TYPE_LEVEL_HIGH>; - clocks = <&adma_pwm_lpcg 1>, - <&adma_pwm_lpcg 0>; + clocks = <&adma_pwm_lpcg IMX_LPCG_CLK_4>, + <&adma_pwm_lpcg IMX_LPCG_CLK_0>; clock-names = "ipg", "per"; assigned-clocks = <&clk IMX_SC_R_LCD_0_PWM_0 IMX_SC_PM_CLK_PER>; assigned-clock-rates = <24000000>;
@@ -377,8 +377,8 @@ adc0: adc@5a880000 { reg = <0x5a880000 0x10000>; interrupts = <GIC_SPI 240 IRQ_TYPE_LEVEL_HIGH>; interrupt-parent = <&gic>; - clocks = <&adc0_lpcg 0>, - <&adc0_lpcg 1>; + clocks = <&adc0_lpcg IMX_LPCG_CLK_0>, + <&adc0_lpcg IMX_LPCG_CLK_4>; clock-names = "per", "ipg"; assigned-clocks = <&clk IMX_SC_R_ADC_0 IMX_SC_PM_CLK_PER>; assigned-clock-rates = <24000000>;
@@ -392,8 +392,8 @@ adc1: adc@5a890000 { reg = <0x5a890000 0x10000>; interrupts = <GIC_SPI 241 IRQ_TYPE_LEVEL_HIGH>; interrupt-parent = <&gic>; - clocks = <&adc1_lpcg 0>, - <&adc1_lpcg 1>; + clocks = <&adc1_lpcg IMX_LPCG_CLK_0>, + <&adc1_lpcg IMX_LPCG_CLK_4>; clock-names = "per", "ipg"; assigned-clocks = <&clk IMX_SC_R_ADC_1 IMX_SC_PM_CLK_PER>; assigned-clock-rates = <24000000>;
@@ -406,8 +406,8 @@ flexcan1: can@5a8d0000 { reg = <0x5a8d0000 0x10000>; interrupts = <GIC_SPI 235 IRQ_TYPE_LEVEL_HIGH>; interrupt-parent = <&gic>; - clocks = <&can0_lpcg 1>, - <&can0_lpcg 0>; + clocks = <&can0_lpcg IMX_LPCG_CLK_4>, + <&can0_lpcg IMX_LPCG_CLK_0>; clock-names = "ipg", "per"; assigned-clocks = <&clk IMX_SC_R_CAN_0 IMX_SC_PM_CLK_PER>; assigned-clock-rates = <40000000>;
@@ -427,8 +427,8 @@ flexcan2: can@5a8e0000 { * CAN1 shares CAN0's clock and to enable CAN0's clock it * has to be powered on. */ - clocks = <&can0_lpcg 1>, - <&can0_lpcg 0>; + clocks = <&can0_lpcg IMX_LPCG_CLK_4>, + <&can0_lpcg IMX_LPCG_CLK_0>; clock-names = "ipg", "per"; assigned-clocks = <&clk IMX_SC_R_CAN_0 IMX_SC_PM_CLK_PER>; assigned-clock-rates = <40000000>;
@@ -448,8 +448,8 @@ flexcan3: can@5a8f0000 { * CAN2 shares CAN0's clock and to enable CAN0's clock it * has to be powered on. */ - clocks = <&can0_lpcg 1>, - <&can0_lpcg 0>; + clocks = <&can0_lpcg IMX_LPCG_CLK_4>, + <&can0_lpcg IMX_LPCG_CLK_0>; clock-names = "ipg", "per"; assigned-clocks = <&clk IMX_SC_R_CAN_0 IMX_SC_PM_CLK_PER>; assigned-clock-rates = <40000000>;
arch/arm64/boot/dts/freescale/imx8-ss-lsio.dtsi +8 -8
@@ -25,8 +25,8 @@ lsio_pwm0: pwm@5d000000 { compatible = "fsl,imx27-pwm"; reg = <0x5d000000 0x10000>; clock-names = "ipg", "per"; - clocks = <&pwm0_lpcg 4>, - <&pwm0_lpcg 1>; + clocks = <&pwm0_lpcg IMX_LPCG_CLK_6>, + <&pwm0_lpcg IMX_LPCG_CLK_1>; assigned-clocks = <&clk IMX_SC_R_PWM_0 IMX_SC_PM_CLK_PER>; assigned-clock-rates = <24000000>; #pwm-cells = <3>;
@@ -38,8 +38,8 @@ lsio_pwm1: pwm@5d010000 { compatible = "fsl,imx27-pwm"; reg = <0x5d010000 0x10000>; clock-names = "ipg", "per"; - clocks = <&pwm1_lpcg 4>, - <&pwm1_lpcg 1>; + clocks = <&pwm1_lpcg IMX_LPCG_CLK_6>, + <&pwm1_lpcg IMX_LPCG_CLK_1>; assigned-clocks = <&clk IMX_SC_R_PWM_1 IMX_SC_PM_CLK_PER>; assigned-clock-rates = <24000000>; #pwm-cells = <3>;
@@ -51,8 +51,8 @@ lsio_pwm2: pwm@5d020000 { compatible = "fsl,imx27-pwm"; reg = <0x5d020000 0x10000>; clock-names = "ipg", "per"; - clocks = <&pwm2_lpcg 4>, - <&pwm2_lpcg 1>; + clocks = <&pwm2_lpcg IMX_LPCG_CLK_6>, + <&pwm2_lpcg IMX_LPCG_CLK_1>; assigned-clocks = <&clk IMX_SC_R_PWM_2 IMX_SC_PM_CLK_PER>; assigned-clock-rates = <24000000>; #pwm-cells = <3>;
@@ -64,8 +64,8 @@ lsio_pwm3: pwm@5d030000 { compatible = "fsl,imx27-pwm"; reg = <0x5d030000 0x10000>; clock-names = "ipg", "per"; - clocks = <&pwm3_lpcg 4>, - <&pwm3_lpcg 1>; + clocks = <&pwm3_lpcg IMX_LPCG_CLK_6>, + <&pwm3_lpcg IMX_LPCG_CLK_1>; assigned-clocks = <&clk IMX_SC_R_PWM_3 IMX_SC_PM_CLK_PER>; assigned-clock-rates = <24000000>; #pwm-cells = <3>;
arch/arm64/boot/dts/freescale/imx8mp-venice-gw72xx.dtsi +1 -1
@@ -14,6 +14,7 @@ connector { pinctrl-0 = <&pinctrl_usbcon1>; type = "micro"; label = "otg"; + vbus-supply = <®_usb1_vbus>; id-gpios = <&gpio3 21 GPIO_ACTIVE_HIGH>; port {
@@ -183,7 +184,6 @@ &usb3_0 { }; &usb3_phy0 { - vbus-supply = <®_usb1_vbus>; status = "okay"; };
arch/arm64/boot/dts/freescale/imx8mp-venice-gw73xx.dtsi +1 -1
@@ -14,6 +14,7 @@ connector { pinctrl-0 = <&pinctrl_usbcon1>; type = "micro"; label = "otg"; + vbus-supply = <®_usb1_vbus>; id-gpios = <&gpio3 21 GPIO_ACTIVE_HIGH>; port {
@@ -202,7 +203,6 @@ &usb3_0 { }; &usb3_phy0 { - vbus-supply = <®_usb1_vbus>; status = "okay"; };
arch/arm64/boot/dts/freescale/imx8qm-ss-dma.dtsi +4 -4
@@ -127,15 +127,15 @@ &flexcan1 { }; &flexcan2 { - clocks = <&can1_lpcg 1>, - <&can1_lpcg 0>; + clocks = <&can1_lpcg IMX_LPCG_CLK_4>, + <&can1_lpcg IMX_LPCG_CLK_0>; assigned-clocks = <&clk IMX_SC_R_CAN_1 IMX_SC_PM_CLK_PER>; fsl,clk-source = /bits/ 8 <1>; }; &flexcan3 { - clocks = <&can2_lpcg 1>, - <&can2_lpcg 0>; + clocks = <&can2_lpcg IMX_LPCG_CLK_4>, + <&can2_lpcg IMX_LPCG_CLK_0>; assigned-clocks = <&clk IMX_SC_R_CAN_2 IMX_SC_PM_CLK_PER>; fsl,clk-source = /bits/ 8 <1>; };
arch/arm64/include/asm/tlbflush.h +11 -9
@@ -161,12 +161,18 @@ static inline unsigned long get_trans_granule(void)#define MAX_TLBI_RANGE_PAGES __TLBI_RANGE_PAGES(31, 3)/* -* Generate 'num' values from -1 to 30 with -1 rejected by the -* __flush_tlb_range() loop below. +* Generate 'num' values from -1 to 31 with -1 rejected by the +* __flush_tlb_range() loop below. Its return value is only +* significant for a maximum of MAX_TLBI_RANGE_PAGES pages. If +* 'pages' is more than that, you must iterate over the overall +* range. */ -#define TLBI_RANGE_MASK GENMASK_ULL(4, 0) -#define __TLBI_RANGE_NUM (pages, scale) \ - ((((pages) >> (5 * (scale) + 1)) & TLBI_RANGE_MASK) - 1) +#define __TLBI_RANGE_NUM (pages, scale) \ + ({ \ + int __pages = min((pages), \ + __TLBI_RANGE_PAGES(31, (scale))); \ + (__pages >> (5 * (scale) + 1)) - 1; \ + })/* * TLB Invalidation
@@ -379,10 +385,6 @@ static inline void arch_tlbbatch_flush(struct arch_tlbflush_unmap_batch *batch)* 3. If there is 1 page remaining, flush it through non-range operations. Range * operations can only span an even number of pages. We save this for last to * ensure 64KB start alignment is maintained for the LPA2 case. -* -* Note that certain ranges can be represented by either num = 31 and -* scale or num = 0 and scale + 1. The loop below favours the latter -* since num is limited to 30 by the __TLBI_RANGE_NUM() macro. */ #define __flush_tlb_range_op (op, start, pages, stride, \ asid, tlb_level, tlbi_user, lpa2) \
arch/x86/Kconfig +3 -18
@@ -2612,31 +2612,16 @@ config MITIGATION_RFDS stored in floating point, vector and integer registers. See also <file:Documentation/admin-guide/hw-vuln/reg-file-data-sampling.rst> -choice - prompt "Clear branch history" +config MITIGATION_SPECTRE_BHI + bool "Mitigate Spectre-BHB (Branch History Injection)" depends on CPU_SUP_INTEL - default SPECTRE_BHI_ON + default y help Enable BHI mitigations. BHI attacks are a form of Spectre V2 attacks where the branch history buffer is poisoned to speculatively steer indirect branches. See <file:Documentation/admin-guide/hw-vuln/spectre.rst> -config SPECTRE_BHI_ON - bool "on" - help - Equivalent to setting spectre_bhi=on command line parameter. -config SPECTRE_BHI_OFF - bool "off" - help - Equivalent to setting spectre_bhi=off command line parameter. -config SPECTRE_BHI_AUTO - bool "auto" - help - Equivalent to setting spectre_bhi=auto command line parameter. - -endchoice - endif config ARCH_HAS_ADD_PAGES
arch/x86/events/core.c +1 -0
@@ -1644,6 +1644,7 @@ static void x86_pmu_del(struct perf_event *event, int flags)while (++i < cpuc->n_events) { cpuc->event_list[i-1 ] = cpuc->event_list[i]; cpuc->event_constraint[i-1 ] = cpuc->event_constraint[i]; + cpuc->assign[i-1 ] = cpuc->assign[i]; } cpuc->event_constraint[i-1 ] =NULL ; --cpuc->n_events;
arch/x86/include/asm/apic.h +2 -1
@@ -13,6 +13,7 @@#include <asm/mpspec.h> #include <asm/msr.h> #include <asm/hardirq.h> +#include <asm/io.h> #define ARCH_APICTIMER_STOPS_ON_C3 1
@@ -96,7 +97,7 @@ static inline void native_apic_mem_write(u32 reg, u32 v)static inline u32 native_apic_mem_read (u32 reg) { -return *((volatile u32 *)(APIC_BASE + reg)); +return readl ((void __iomem *)(APIC_BASE + reg)); }static inline void native_apic_mem_eoi (void )
arch/x86/kernel/apic/apic.c +3 -3
@@ -1724,11 +1724,11 @@ static int x2apic_state;static bool x2apic_hw_locked (void ) { -u64 ia32_cap; +u64 x86_arch_cap_msr;u64 msr; - ia32_cap =x86_read_arch_cap_msr (); -if (ia32_cap &ARCH_CAP_XAPIC_DISABLE ) { + x86_arch_cap_msr =x86_read_arch_cap_msr (); +if (x86_arch_cap_msr &ARCH_CAP_XAPIC_DISABLE ) {rdmsrl (MSR_IA32_XAPIC_DISABLE_STATUS , msr);return (msr &LEGACY_XAPIC_DISABLED ); }
arch/x86/kernel/cpu/bugs.c +36 -46
222 lines not on this page · raw message
arch/x86/kernel/cpu/common.c +24 -24
134 lines not on this page · raw message
block/blk-cgroup.c +6 -3
@@ -1409,6 +1409,12 @@ static int blkcg_css_online(struct cgroup_subsys_state *css)return 0 ; } +void blkg_init_queue (struct request_queue *q) +{ +INIT_LIST_HEAD (&q->blkg_list); +mutex_init (&q->blkcg_mutex); +} +int blkcg_init_disk (struct gendisk *disk) {struct request_queue *q = disk->queue;
@@ -1416,9 +1422,6 @@ int blkcg_init_disk(struct gendisk *disk)bool preloaded;int ret; -INIT_LIST_HEAD (&q->blkg_list); -mutex_init (&q->blkcg_mutex); - new_blkg =blkg_alloc (&blkcg_root, disk,GFP_KERNEL );if (!new_blkg)return -ENOMEM ;
block/blk-cgroup.h +2 -0
@@ -188,6 +188,7 @@ struct blkcg_policy {extern struct blkcg blkcg_root;extern bool blkcg_debug_stats; +void blkg_init_queue (struct request_queue *q);int blkcg_init_disk (struct gendisk *disk);void blkcg_exit_disk (struct gendisk *disk);
@@ -481,6 +482,7 @@ struct blkcg { };static inline struct blkcg_gq *blkg_lookup (struct blkcg *blkcg,void *key) {return NULL ; } +static inline void blkg_init_queue (struct request_queue *q) { }static inline int blkcg_init_disk (struct gendisk *disk) {return 0 ; }static inline void blkcg_exit_disk (struct gendisk *disk) { }static inline int blkcg_policy_register (struct blkcg_policy *pol) {return 0 ; }
block/blk-core.c +2 -0
@@ -431,6 +431,8 @@ struct request_queue *blk_alloc_queue(int node_id)init_waitqueue_head (&q->mq_freeze_wq);mutex_init (&q->mq_freeze_lock); +blkg_init_queue (q); +/* * Init percpu_ref in atomic mode so that it's faster to shutdown. * See blk_register_queue() for details.
drivers/accel/ivpu/ivpu_drv.c +2 -18
@@ -131,22 +131,6 @@ static int ivpu_get_capabilities(struct ivpu_device *vdev, struct drm_ivpu_paramreturn 0 ; } -static int ivpu_get_core_clock_rate (struct ivpu_device *vdev,u64 *clk_rate) -{ -int ret; - - ret =ivpu_rpm_get_if_active (vdev); -if (ret <0 ) -return ret; - - *clk_rate = ret ?ivpu_hw_reg_pll_freq_get (vdev) :0 ; - -if (ret) -ivpu_rpm_put (vdev); - -return 0 ; -} -static int ivpu_get_param_ioctl (struct drm_device *dev,void *data,struct drm_file *file) {struct ivpu_file_priv *file_priv = file->driver_priv;
@@ -170,7 +154,7 @@ static int ivpu_get_param_ioctl(struct drm_device *dev, void *data, struct drm_f args->value = vdev->platform;break ;case DRM_IVPU_PARAM_CORE_CLOCK_RATE : - ret =ivpu_get_core_clock_rate (vdev, &args->value); + args->value =ivpu_hw_ratio_to_freq (vdev, vdev->hw->pll.max_ratio);break ;case DRM_IVPU_PARAM_NUM_CONTEXTS : args->value =ivpu_get_context_count (vdev);
@@ -530,7 +514,7 @@ static int ivpu_dev_init(struct ivpu_device *vdev) vdev->context_xa_limit.min =IVPU_USER_CONTEXT_MIN_SSID ; vdev->context_xa_limit.max =IVPU_USER_CONTEXT_MAX_SSID ;atomic64_set (&vdev->unique_id_counter,0 ); -xa_init_flags (&vdev->context_xa,XA_FLAGS_ALLOC ); +xa_init_flags (&vdev->context_xa,XA_FLAGS_ALLOC |XA_FLAGS_LOCK_IRQ );xa_init_flags (&vdev->submitted_jobs_xa,XA_FLAGS_ALLOC1 );lockdep_set_class (&vdev->submitted_jobs_xa.xa_lock, &submitted_jobs_xa_lock_class_key);INIT_LIST_HEAD (&vdev->bo_list);
drivers/accel/ivpu/ivpu_hw.h +6 -0
@@ -21,6 +21,7 @@ struct ivpu_hw_ops {u32 (*profiling_freq_get)(struct ivpu_device *vdev);void (*profiling_freq_drive)(struct ivpu_device *vdev,bool enable);u32 (*reg_pll_freq_get)(struct ivpu_device *vdev); +u32 (*ratio_to_freq)(struct ivpu_device *vdev,u32 ratio);u32 (*reg_telemetry_offset_get)(struct ivpu_device *vdev);u32 (*reg_telemetry_size_get)(struct ivpu_device *vdev);u32 (*reg_telemetry_enable_get)(struct ivpu_device *vdev);
@@ -130,6 +131,11 @@ static inline u32 ivpu_hw_reg_pll_freq_get(struct ivpu_device *vdev)return vdev->hw->ops->reg_pll_freq_get (vdev); }; +static inline u32 ivpu_hw_ratio_to_freq (struct ivpu_device *vdev,u32 ratio) +{ +return vdev->hw->ops->ratio_to_freq (vdev, ratio); +} +static inline u32 ivpu_hw_reg_telemetry_offset_get (struct ivpu_device *vdev) {return vdev->hw->ops->reg_telemetry_offset_get (vdev);
drivers/accel/ivpu/ivpu_hw_37xx.c +4 -3
@@ -805,12 +805,12 @@ static void ivpu_hw_37xx_profiling_freq_drive(struct ivpu_device *vdev, bool ena/* Profiling freq - is a debug feature. Unavailable on VPU 37XX. */ } -static u32 ivpu_hw_37xx_pll_to_freq (u32 ratio,u32 config) +static u32 ivpu_hw_37xx_ratio_to_freq (struct ivpu_device *vdev,u32 ratio) {u32 pll_clock =PLL_REF_CLK_FREQ * ratio;u32 cpu_clock; -if ((config &0xff ) ==PLL_RATIO_4_3 ) +if ((vdev->hw->config &0xff ) ==PLL_RATIO_4_3 ) cpu_clock = pll_clock *2 /4 ;else cpu_clock = pll_clock *2 /5 ;
@@ -829,7 +829,7 @@ static u32 ivpu_hw_37xx_reg_pll_freq_get(struct ivpu_device *vdev)if (!ivpu_is_silicon (vdev))return PLL_SIMULATION_FREQ ; -return ivpu_hw_37xx_pll_to_freq (pll_curr_ratio, vdev->hw->config); +return ivpu_hw_37xx_ratio_to_freq (vdev, pll_curr_ratio); }static u32 ivpu_hw_37xx_reg_telemetry_offset_get (struct ivpu_device *vdev)
@@ -1052,6 +1052,7 @@ const struct ivpu_hw_ops ivpu_hw_37xx_ops = { .profiling_freq_get = ivpu_hw_37xx_profiling_freq_get, .profiling_freq_drive = ivpu_hw_37xx_profiling_freq_drive, .reg_pll_freq_get = ivpu_hw_37xx_reg_pll_freq_get, + .ratio_to_freq = ivpu_hw_37xx_ratio_to_freq, .reg_telemetry_offset_get = ivpu_hw_37xx_reg_telemetry_offset_get, .reg_telemetry_size_get = ivpu_hw_37xx_reg_telemetry_size_get, .reg_telemetry_enable_get = ivpu_hw_37xx_reg_telemetry_enable_get,
drivers/accel/ivpu/ivpu_hw_40xx.c +6 -0
@@ -980,6 +980,11 @@ static u32 ivpu_hw_40xx_reg_pll_freq_get(struct ivpu_device *vdev)return PLL_RATIO_TO_FREQ (pll_curr_ratio); } +static u32 ivpu_hw_40xx_ratio_to_freq (struct ivpu_device *vdev,u32 ratio) +{ +return PLL_RATIO_TO_FREQ (ratio); +} +static u32 ivpu_hw_40xx_reg_telemetry_offset_get (struct ivpu_device *vdev) {return REGB_RD32 (VPU_40XX_BUTTRESS_VPU_TELEMETRY_OFFSET );
@@ -1230,6 +1235,7 @@ const struct ivpu_hw_ops ivpu_hw_40xx_ops = { .profiling_freq_get = ivpu_hw_40xx_profiling_freq_get, .profiling_freq_drive = ivpu_hw_40xx_profiling_freq_drive, .reg_pll_freq_get = ivpu_hw_40xx_reg_pll_freq_get, + .ratio_to_freq = ivpu_hw_40xx_ratio_to_freq, .reg_telemetry_offset_get = ivpu_hw_40xx_reg_telemetry_offset_get, .reg_telemetry_size_get = ivpu_hw_40xx_reg_telemetry_size_get, .reg_telemetry_enable_get = ivpu_hw_40xx_reg_telemetry_enable_get,
drivers/accel/ivpu/ivpu_ipc.c +6 -2
@@ -1,6 +1,6 @@// SPDX-License-Identifier: GPL-2.0-only /* -* Copyright (C) 2020-2023 Intel Corporation +* Copyright (C) 2020-2024 Intel Corporation */ #include <linux/genalloc.h>
@@ -501,7 +501,11 @@ int ivpu_ipc_init(struct ivpu_device *vdev)spin_lock_init (&ipc->cons_lock);INIT_LIST_HEAD (&ipc->cons_list);INIT_LIST_HEAD (&ipc->cb_msg_list); -drmm_mutex_init (&vdev->drm, &ipc->lock); + ret =drmm_mutex_init (&vdev->drm, &ipc->lock); +if (ret) { +ivpu_err (vdev,"Failed to initialize ipc->lock, ret %d\n" , ret); + goto err_free_rx; + }ivpu_ipc_reset (vdev);return 0 ;
drivers/accel/ivpu/ivpu_pm.c +3 -2
@@ -74,10 +74,10 @@ static int ivpu_resume(struct ivpu_device *vdev) {int ret; -pci_set_power_state (to_pci_dev (vdev->drm.dev),PCI_D0 ); +retry:pci_restore_state (to_pci_dev (vdev->drm.dev)); +pci_set_power_state (to_pci_dev (vdev->drm.dev),PCI_D0 ); -retry: ret =ivpu_hw_power_up (vdev);if (ret) {ivpu_err (vdev,"Failed to power up HW: %d\n" , ret);
@@ -100,6 +100,7 @@ static int ivpu_resume(struct ivpu_device *vdev)ivpu_mmu_disable (vdev); err_power_down:ivpu_hw_power_down (vdev); +pci_set_power_state (to_pci_dev (vdev->drm.dev), PCI_D3hot);if (!ivpu_fw_is_cold_boot (vdev)) {ivpu_pm_prepare_cold_boot (vdev);
drivers/acpi/numa/hmat.c +27 -16
112 lines not on this page · raw message
drivers/acpi/scan.c +2 -1
@@ -1802,7 +1802,8 @@ static void acpi_scan_dep_init(struct acpi_device *adev)if (dep->honor_dep) adev->flags.honor_deps =1 ; - adev->dep_unmet++; +if (!dep->met) + adev->dep_unmet++; } } }
drivers/ata/libata-core.c +1 -1
@@ -2539,7 +2539,7 @@ static void ata_dev_config_cdl(struct ata_device *dev)bool cdl_enabled;u64 val; -if (ata_id_major_version (dev->id) <12 ) +if (ata_id_major_version (dev->id) <11 ) goto not_supported; if (!ata_log_supported(dev, ATA_LOG_IDENTIFY_DEVICE) ||
drivers/ata/libata-scsi.c +5 -4
@@ -4745,7 +4745,7 @@ void ata_scsi_dev_rescan(struct work_struct *work)* bail out. */ if (ap->pflags &ATA_PFLAG_SUSPENDED ) - goto unlock; + goto unlock_ap;if (!sdev)continue ;
@@ -4758,7 +4758,7 @@ void ata_scsi_dev_rescan(struct work_struct *work)if (do_resume) { ret =scsi_resume_device (sdev);if (ret == -EWOULDBLOCK ) - goto unlock; + goto unlock_scan; dev->flags &= ~ATA_DFLAG_RESUMING ; } ret =scsi_rescan_device (sdev);
@@ -4766,12 +4766,13 @@ void ata_scsi_dev_rescan(struct work_struct *work)spin_lock_irqsave (ap->lock, flags);if (ret) - goto unlock; + goto unlock_ap; } } -unlock: +unlock_ap:spin_unlock_irqrestore (ap->lock, flags); +unlock_scan:mutex_unlock (&ap->scsi_scan_mutex);/* Reschedule with a delay if scsi_rescan_device() returned an error */
drivers/base/node.c +3 -3
@@ -126,7 +126,7 @@ static void node_access_release(struct device *dev) }static struct node_access_nodes *node_init_node_access (struct node *node, -unsigned int access) +enum access_coordinate_class access) {struct node_access_nodes *access_node;struct device *dev;
@@ -191,7 +191,7 @@ static struct attribute *access_attrs[] = {* @access: The access class the for the given attributes */ void node_set_perf_attrs (unsigned int nid,struct access_coordinate *coord, -unsigned int access) +enum access_coordinate_class access) {struct node_access_nodes *c;struct node *node;
@@ -689,7 +689,7 @@ int register_cpu_under_node(unsigned int cpu, unsigned int nid)*/ int register_memory_node_under_compute_node (unsigned int mem_nid,unsigned int cpu_nid, -unsigned int access) +enum access_coordinate_class access) {struct node *init_node, *targ_node;struct node_access_nodes *initiator, *target;
drivers/cxl/acpi.c +5 -3
@@ -530,13 +530,15 @@ static int get_genport_coordinates(struct device *dev, struct cxl_dport *dport)if (kstrtou32 (acpi_device_uid (hb),0 , &uid))return -EINVAL ; - rc =acpi_get_genport_coordinates (uid, &dport->hb_coord); + rc =acpi_get_genport_coordinates (uid, dport->hb_coord);if (rc <0 )return rc;/* Adjust back to picoseconds from nanoseconds */ - dport->hb_coord.read_latency *=1000 ; - dport->hb_coord.write_latency *=1000 ; +for (int i =0 ; i <ACCESS_COORDINATE_MAX ; i++) { + dport->hb_coord[i].read_latency *=1000 ; + dport->hb_coord[i].write_latency *=1000 ; + }return 0 ; }
drivers/cxl/core/cdat.c +44 -14
81 lines not on this page · raw message
drivers/cxl/core/mbox.c +3 -2
@@ -915,7 +915,7 @@ static int cxl_clear_event_record(struct cxl_memdev_state *mds, payload->handles[i++] = gen->hdr.handle;dev_dbg (mds->cxlds.dev,"Event log '%d': Clearing %u\n" , log, -le16_to_cpu (payload->handles[i])); +le16_to_cpu (payload->handles[i -1 ]));if (i == max_handles) { payload->nr_recs = i;
@@ -958,13 +958,14 @@ static void cxl_mem_get_records_log(struct cxl_memdev_state *mds, .payload_in = &log_type, .size_in = sizeof(log_type), .payload_out = payload, - .size_out = mds->payload_size, .min_out = struct_size(payload, records, 0), }; do { int rc, i; + mbox_cmd.size_out = mds->payload_size; + rc = cxl_internal_send_cmd(mds, &mbox_cmd); if (rc) { dev_err_ratelimited(dev,
drivers/cxl/core/port.c +50 -26
98 lines not on this page · raw message
drivers/cxl/core/regs.c +3 -2
@@ -271,6 +271,7 @@ EXPORT_SYMBOL_NS_GPL(cxl_map_device_regs, CXL);static bool cxl_decode_regblock (struct pci_dev *pdev,u32 reg_lo,u32 reg_hi,struct cxl_register_map *map) { +u8 reg_type =FIELD_GET (CXL_DVSEC_REG_LOCATOR_BLOCK_ID_MASK , reg_lo);int bar =FIELD_GET (CXL_DVSEC_REG_LOCATOR_BIR_MASK , reg_lo);u64 offset = ((u64 )reg_hi <<32 ) | (reg_lo &CXL_DVSEC_REG_LOCATOR_BLOCK_OFF_LOW_MASK );
@@ -278,11 +279,11 @@ static bool cxl_decode_regblock(struct pci_dev *pdev, u32 reg_lo, u32 reg_hi,if (offset >pci_resource_len (pdev, bar)) {dev_warn (&pdev->dev,"BAR%d: %pr: too small (offset: %pa, type: %d)\n" , bar, - &pdev->resource[bar], &offset, map->reg_type); + &pdev->resource[bar], &offset, reg_type);return false; } - map->reg_type =FIELD_GET (CXL_DVSEC_REG_LOCATOR_BLOCK_ID_MASK , reg_lo); + map->reg_type = reg_type; map->resource =pci_resource_start (pdev, bar) + offset; map->max_size =pci_resource_len (pdev, bar) - offset;return true;
drivers/cxl/cxl.h +7 -1
@@ -671,7 +671,7 @@ struct cxl_dport {struct cxl_port *port;struct cxl_regs regs;struct access_coordinate sw_coord; -struct access_coordinate hb_coord; +struct access_coordinate hb_coord[ACCESS_COORDINATE_MAX ];long link_latency; };
@@ -879,9 +879,15 @@ void cxl_switch_parse_cdat(struct cxl_port *port);int cxl_endpoint_get_perf_coordinates (struct cxl_port *port,struct access_coordinate *coord); +int cxl_hb_get_perf_coordinates (struct cxl_port *port, +struct access_coordinate *coord);void cxl_memdev_update_perf (struct cxl_memdev *cxlmd); +void cxl_coordinates_combine (struct access_coordinate *out, +struct access_coordinate *c1, +struct access_coordinate *c2); +/* * Unit test builds overrides this to __weak, find the 'strong' version * of these symbols in tools/testing/cxl/.
drivers/firmware/arm_ffa/driver.c +1 -1
@@ -790,7 +790,7 @@ static void ffa_notification_info_get(void) part_id = packed_id_list[ids_processed++]; -if (!ids_count[list]) {/* Global Notification */ +if (ids_count[list] ==1 ) {/* Global Notification */ __do_sched_recv_cb (part_id,0 , false);continue ; }
drivers/firmware/arm_scmi/raw_mode.c +6 -1
@@ -921,7 +921,7 @@ static int scmi_dbg_raw_mode_open(struct inode *inode, struct file *filp) rd->raw = raw; filp->private_data = rd; -return 0 ; +return nonseekable_open (inode, filp); }static int scmi_dbg_raw_mode_release (struct inode *inode,struct file *filp)
@@ -950,6 +950,7 @@ static const struct file_operations scmi_dbg_raw_mode_reset_fops = { .open = scmi_dbg_raw_mode_open, .release = scmi_dbg_raw_mode_release, .write = scmi_dbg_raw_mode_reset_write, + .llseek = no_llseek, .owner = THIS_MODULE, };
@@ -959,6 +960,7 @@ static const struct file_operations scmi_dbg_raw_mode_message_fops = { .read = scmi_dbg_raw_mode_message_read, .write = scmi_dbg_raw_mode_message_write, .poll = scmi_dbg_raw_mode_message_poll, + .llseek = no_llseek, .owner = THIS_MODULE, };
@@ -975,6 +977,7 @@ static const struct file_operations scmi_dbg_raw_mode_message_async_fops = { .read = scmi_dbg_raw_mode_message_read, .write = scmi_dbg_raw_mode_message_async_write, .poll = scmi_dbg_raw_mode_message_poll, + .llseek = no_llseek, .owner = THIS_MODULE, };
@@ -998,6 +1001,7 @@ static const struct file_operations scmi_dbg_raw_mode_notification_fops = { .release = scmi_dbg_raw_mode_release, .read = scmi_test_dbg_raw_mode_notif_read, .poll = scmi_test_dbg_raw_mode_notif_poll, + .llseek = no_llseek, .owner = THIS_MODULE, };
@@ -1021,6 +1025,7 @@ static const struct file_operations scmi_dbg_raw_mode_errors_fops = { .release = scmi_dbg_raw_mode_release, .read = scmi_test_dbg_raw_mode_errors_read, .poll = scmi_test_dbg_raw_mode_errors_poll, + .llseek = no_llseek, .owner = THIS_MODULE, };
drivers/gpu/drm/amd/amdgpu/amdgpu_vpe.c +6 -0
@@ -390,6 +390,12 @@ static int vpe_hw_init(void *handle)struct amdgpu_vpe *vpe = &adev->vpe;int ret; +/* Power on VPE */ + ret =amdgpu_device_ip_set_powergating_state (adev,AMD_IP_BLOCK_TYPE_VPE , +AMD_PG_STATE_UNGATE ); +if (ret) +return ret; + ret =vpe_load_microcode (vpe);if (ret)return ret;
drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c +1 -1
@@ -1630,7 +1630,7 @@ static void gfx_v11_0_setup_rb(struct amdgpu_device *adev) active_rb_bitmap |= (0x3 << (i * rb_bitmap_width_per_sa)); } - active_rb_bitmap |= global_active_rb_bitmap; + active_rb_bitmap &= global_active_rb_bitmap; adev->gfx.config.backend_enable_mask = active_rb_bitmap; adev->gfx.config.num_rbs =hweight32 (active_rb_bitmap); }
drivers/gpu/drm/amd/amdgpu/soc21.c +29 -3
@@ -450,10 +450,8 @@ static bool soc21_need_full_reset(struct amdgpu_device *adev) {switch (amdgpu_ip_version (adev,GC_HWIP ,0 )) {case IP_VERSION (11 ,0 ,0 ): -return amdgpu_ras_is_supported (adev,AMDGPU_RAS_BLOCK__UMC );case IP_VERSION (11 ,0 ,2 ):case IP_VERSION (11 ,0 ,3 ): -return false;default :return true; }
@@ -714,7 +712,10 @@ static int soc21_common_early_init(void *handle)AMD_PG_SUPPORT_VCN |AMD_PG_SUPPORT_JPEG |AMD_PG_SUPPORT_GFX_PG ; - adev->external_rev_id = adev->rev_id +0x1 ; +if (adev->rev_id ==0 ) + adev->external_rev_id =0x1 ; +else + adev->external_rev_id = adev->rev_id +0x10 ;break ;default :/* FIXME: not supported yet */
@@ -832,10 +833,35 @@ static int soc21_common_suspend(void *handle)return soc21_common_hw_fini (adev); } +static bool soc21_need_reset_on_resume (struct amdgpu_device *adev) +{ +u32 sol_reg1, sol_reg2; + +/* Will reset for the following suspend abort cases. +* 1) Only reset dGPU side. +* 2) S3 suspend got aborted and TOS is active. +*/ +if (!(adev->flags &AMD_IS_APU ) && adev->in_s3 && + !adev->suspend_complete) { + sol_reg1 =RREG32_SOC15 (MP0 ,0 , regMP0_SMN_C2PMSG_81); +msleep (100 ); + sol_reg2 =RREG32_SOC15 (MP0 ,0 , regMP0_SMN_C2PMSG_81); + +return (sol_reg1 != sol_reg2); + } + +return false; +} +static int soc21_common_resume (void *handle) {struct amdgpu_device *adev = (struct amdgpu_device *)handle; +if (soc21_need_reset_on_resume (adev)) { +dev_info (adev->dev,"S3 suspend aborted, resetting..." ); +soc21_asic_reset (adev); + } +return soc21_common_hw_init (adev); }
drivers/gpu/drm/amd/amdgpu/umsch_mm_v4_0.c +2 -0
@@ -225,6 +225,8 @@ static int umsch_mm_v4_0_ring_start(struct amdgpu_umsch_mm *umsch)WREG32_SOC15 (VCN ,0 , regVCN_UMSCH_RB_SIZE, ring->ring_size); + ring->wptr =0 ; + data =RREG32_SOC15 (VCN ,0 , regVCN_RB_ENABLE); data &= ~(VCN_RB_ENABLE__AUDIO_RB_EN_MASK );WREG32_SOC15 (VCN ,0 , regVCN_RB_ENABLE, data);
drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c +1 -0
@@ -1997,6 +1997,7 @@ static int unmap_queues_cpsch(struct device_queue_manager *dqm,dev_err (dev,"HIQ MQD's queue_doorbell_id0 is not 0, Queue preemption time out\n" );while (halt_if_hws_hang)schedule (); +kfd_hws_hang (dqm);return -ETIME ; }
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +6 -9
@@ -6257,19 +6257,16 @@ create_stream_for_sink(struct drm_connector *connector,if (stream->signal ==SIGNAL_TYPE_HDMI_TYPE_A )mod_build_hf_vsif_infopacket (stream, &stream->vsp_infopacket); -if (stream->link->psr_settings.psr_feature_enabled || stream->link->replay_settings.replay_feature_enabled) { +if (stream->signal ==SIGNAL_TYPE_DISPLAY_PORT || + stream->signal ==SIGNAL_TYPE_DISPLAY_PORT_MST || + stream->signal ==SIGNAL_TYPE_EDP ) {// // should decide stream support vsc sdp colorimetry capability // before building vsc info packet // - stream->use_vsc_sdp_for_colorimetry = false; -if (aconnector->dc_sink->sink_signal ==SIGNAL_TYPE_DISPLAY_PORT_MST ) { - stream->use_vsc_sdp_for_colorimetry = - aconnector->dc_sink->is_vsc_sdp_colorimetry_supported; - }else { -if (stream->link->dpcd_caps.dprx_feature.bits.VSC_SDP_COLORIMETRY_SUPPORTED) - stream->use_vsc_sdp_for_colorimetry = true; - } + stream->use_vsc_sdp_for_colorimetry = stream->link->dpcd_caps.dpcd_rev.raw >=0x14 && + stream->link->dpcd_caps.dprx_feature.bits.VSC_SDP_COLORIMETRY_SUPPORTED; +if (stream->out_transfer_func->tf ==TRANSFER_FUNCTION_GAMMA22 ) tf =TRANSFER_FUNC_GAMMA_22 ;mod_build_vsc_infopacket (stream, &stream->vsc_infopacket, stream->output_color_space, tf);
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_wb.c +2 -4
@@ -76,10 +76,8 @@ static int amdgpu_dm_wb_encoder_atomic_check(struct drm_encoder *encoder,static int amdgpu_dm_wb_connector_get_modes (struct drm_connector *connector) { -struct drm_device *dev = connector->dev; - -return drm_add_modes_noedid (connector, dev->mode_config.max_width, - dev->mode_config.max_height); +/* Maximum resolution supported by DWB */ +return drm_add_modes_noedid (connector,3840 ,2160 ); } static int amdgpu_dm_wb_prepare_job(struct drm_writeback_connector *wb_connector,
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn316/dcn316_clk_mgr.c +12 -7
@@ -99,20 +99,25 @@ static int dcn316_get_active_display_cnt_wa(return display_count; } -static void dcn316_disable_otg_wa (struct clk_mgr *clk_mgr_base,struct dc_state *context,bool disable) +static void dcn316_disable_otg_wa (struct clk_mgr *clk_mgr_base,struct dc_state *context, +bool safe_to_lower,bool disable) {struct dc *dc = clk_mgr_base->ctx->dc;int i;for (i =0 ; i < dc->res_pool->pipe_count; ++i) { -struct pipe_ctx *pipe = &dc->current_state->res_ctx.pipe_ctx[i]; +struct pipe_ctx *pipe = safe_to_lower + ? &context->res_ctx.pipe_ctx[i] + : &dc->current_state->res_ctx.pipe_ctx[i];if (pipe->top_pipe || pipe->prev_odm_pipe)continue ; -if (pipe->stream && (pipe->stream->dpms_off || pipe->plane_state ==NULL || -dc_is_virtual_signal (pipe->stream->signal))) { +if (pipe->stream && (pipe->stream->dpms_off ||dc_is_virtual_signal (pipe->stream->signal) || + !pipe->stream->link_enc)) {if (disable) { - pipe->stream_res.tg->funcs->immediate_disable_crtc (pipe->stream_res.tg); +if (pipe->stream_res.tg && pipe->stream_res.tg->funcs->immediate_disable_crtc) + pipe->stream_res.tg->funcs->immediate_disable_crtc (pipe->stream_res.tg); +reset_sync_context_for_pipe (dc, context, i); }else pipe->stream_res.tg->funcs->enable_crtc (pipe->stream_res.tg);
@@ -207,11 +212,11 @@ static void dcn316_update_clocks(struct clk_mgr *clk_mgr_base, }if (should_set_clock (safe_to_lower, new_clocks->dispclk_khz, clk_mgr_base->clks.dispclk_khz)) { -dcn316_disable_otg_wa (clk_mgr_base, context, true); +dcn316_disable_otg_wa (clk_mgr_base, context, safe_to_lower, true); clk_mgr_base->clks.dispclk_khz = new_clocks->dispclk_khz;dcn316_smu_set_dispclk (clk_mgr, clk_mgr_base->clks.dispclk_khz); -dcn316_disable_otg_wa (clk_mgr_base, context, false); +dcn316_disable_otg_wa (clk_mgr_base, context, safe_to_lower, false); update_dispclk = true; }
drivers/gpu/drm/amd/display/dc/core/dc_state.c +9 -0
@@ -436,6 +436,15 @@ bool dc_state_add_plane( goto out; } +if (stream_status->plane_count ==0 && dc->config.enable_windowed_mpo_odm) +/* ODM combine could prevent us from supporting more planes +* we will reset ODM slice count back to 1 when all planes have +* been removed to maximize the amount of planes supported when +* new planes are added. +*/ +resource_update_pipes_for_stream_with_slice_count ( + state, dc->current_state, dc->res_pool, stream,1 ); + otg_master_pipe =resource_get_otg_master_for_stream ( &state->res_ctx, stream);if (otg_master_pipe)
drivers/gpu/drm/amd/display/dc/optc/dcn32/dcn32_optc.c +0 -3
@@ -267,9 +267,6 @@ static void optc32_setup_manual_trigger(struct timing_generator *optc)OTG_V_TOTAL_MAX_SEL ,1 ,OTG_FORCE_LOCK_ON_EVENT ,0 , OTG_SET_V_TOTAL_MIN_MASK, (1 << 1)); /* TRIGA */ - -// Setup manual flow control for EOF via TRIG_A - optc->funcs->setup_manual_trigger (optc); } }
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_4_ppt.c +11 -1
@@ -226,8 +226,18 @@ static int smu_v13_0_4_system_features_control(struct smu_context *smu, bool en)struct amdgpu_device *adev = smu->adev;int ret =0 ; -if (!en && !adev->in_s0ix) +if (!en && !adev->in_s0ix) { +/* Adds a GFX reset as workaround just before sending the +* MP1_UNLOAD message to prevent GC/RLC/PMFW from entering +* an invalid state. +*/ + ret =smu_cmn_send_smc_msg_with_param (smu, SMU_MSG_GfxDeviceDriverReset, +SMU_RESET_MODE_2 ,NULL ); +if (ret) +return ret; + ret =smu_cmn_send_smc_msg (smu, SMU_MSG_PrepareMp1ForUnload,NULL ); + }return ret; }
drivers/gpu/drm/ast/ast_dp.c +3 -0
@@ -180,6 +180,7 @@ void ast_dp_set_on_off(struct drm_device *dev, bool on) {struct ast_device *ast =to_ast_device (dev);u8 video_on_off = on; +u32 i =0 ;// Video On/Off ast_set_index_reg_mask (ast,AST_IO_VGACRI ,0xE3 , (u8 ) ~AST_DP_VIDEO_ENABLE , on);
@@ -192,6 +193,8 @@ void ast_dp_set_on_off(struct drm_device *dev, bool on) ASTDP_MIRROR_VIDEO_ENABLE) != video_on_off) {// wait 1 ms mdelay (1 ); +if (++i >200 ) +break ; } } }
drivers/gpu/drm/drm_client_modeset.c +2 -1
@@ -777,6 +777,7 @@ int drm_client_modeset_probe(struct drm_client_dev *client, unsigned int width,unsigned int total_modes_count =0 ;struct drm_client_offset *offsets;unsigned int connector_count =0 ; +/* points to modes protected by mode_config.mutex */ struct drm_display_mode **modes;struct drm_crtc **crtcs;int i, ret =0 ;
@@ -845,7 +846,6 @@ int drm_client_modeset_probe(struct drm_client_dev *client, unsigned int width,drm_client_pick_crtcs (client, connectors, connector_count, crtcs, modes,0 , width, height); } -mutex_unlock (&dev->mode_config.mutex);drm_client_modeset_release (client);
@@ -875,6 +875,7 @@ int drm_client_modeset_probe(struct drm_client_dev *client, unsigned int width, modeset->y = offset->y; } } +mutex_unlock (&dev->mode_config.mutex);mutex_unlock (&client->modeset_mutex); out:
drivers/gpu/drm/i915/display/intel_cdclk.c +5 -2
@@ -2521,7 +2521,7 @@ intel_set_cdclk_pre_plane_update(struct intel_atomic_state *state)if (IS_DG2 (i915))intel_cdclk_pcode_pre_notify (state); -if (pipe ==INVALID_PIPE || +if (new_cdclk_state->disable_pipes || old_cdclk_state->actual.cdclk <= new_cdclk_state->actual.cdclk) {drm_WARN_ON (&i915->drm, !new_cdclk_state->base.changed);
@@ -2553,7 +2553,7 @@ intel_set_cdclk_post_plane_update(struct intel_atomic_state *state)if (IS_DG2 (i915))intel_cdclk_pcode_post_notify (state); -if (pipe !=INVALID_PIPE && +if (!new_cdclk_state->disable_pipes && old_cdclk_state->actual.cdclk > new_cdclk_state->actual.cdclk) {drm_WARN_ON (&i915->drm, !new_cdclk_state->base.changed);
@@ -3036,6 +3036,7 @@ static struct intel_global_state *intel_cdclk_duplicate_state(struct intel_globareturn NULL ; cdclk_state->pipe =INVALID_PIPE ; + cdclk_state->disable_pipes = false;return &cdclk_state->base; }
@@ -3214,6 +3215,8 @@ int intel_modeset_calc_cdclk(struct intel_atomic_state *state)if (ret)return ret; + new_cdclk_state->disable_pipes = true; +drm_dbg_kms (&dev_priv->drm,"Modeset required for cdclk change\n" ); }
drivers/gpu/drm/i915/display/intel_cdclk.h +3 -0
@@ -51,6 +51,9 @@ struct intel_cdclk_state {/* bitmask of active pipes */ u8 active_pipes; + +/* update cdclk with pipes disabled */ +bool disable_pipes; };int intel_crtc_compute_min_cdclk (const struct intel_crtc_state *crtc_state);
drivers/gpu/drm/i915/display/intel_ddi.c +5 -0
@@ -4229,7 +4229,12 @@ static bool m_n_equal(const struct intel_link_m_n *m_n_1,static bool crtcs_port_sync_compatible (const struct intel_crtc_state *crtc_state1,const struct intel_crtc_state *crtc_state2) { +/* +* FIXME the modeset sequence is currently wrong and +* can't deal with bigjoiner + port sync at the same time. +*/ return crtc_state1->hw.active && crtc_state2->hw.active && + !crtc_state1->bigjoiner_pipes && !crtc_state2->bigjoiner_pipes && crtc_state1->output_types == crtc_state2->output_types && crtc_state1->output_format == crtc_state2->output_format && crtc_state1->lane_count == crtc_state2->lane_count &&
drivers/gpu/drm/i915/display/intel_dp.c +5 -1
@@ -2756,7 +2756,11 @@ intel_dp_drrs_compute_config(struct intel_connector *connector,intel_panel_downclock_mode (connector, &pipe_config->hw.adjusted_mode);int pixel_clock; -if (has_seamless_m_n (connector)) +/* +* FIXME all joined pipes share the same transcoder. +* Need to account for that when updating M/N live. +*/ +if (has_seamless_m_n (connector) && !pipe_config->bigjoiner_pipes) pipe_config->update_m_n = true;if (!can_enable_drrs (connector, pipe_config, downclock_mode)) {
drivers/gpu/drm/i915/display/intel_psr.c +11 -0
@@ -1368,6 +1368,17 @@ void intel_psr_compute_config(struct intel_dp *intel_dp,return ; } +/* +* FIXME figure out what is wrong with PSR+bigjoiner and +* fix it. Presumably something related to the fact that +* PSR is a transcoder level feature. +*/ +if (crtc_state->bigjoiner_pipes) { +drm_dbg_kms (&dev_priv->drm, +"PSR disabled due to bigjoiner\n" ); +return ; + } +if (CAN_PANEL_REPLAY (intel_dp)) crtc_state->has_panel_replay = true;else
drivers/gpu/drm/i915/display/intel_vrr.c +7 -0
@@ -117,6 +117,13 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,const struct drm_display_info *info = &connector->base.display_info;int vmin, vmax; +/* +* FIXME all joined pipes share the same transcoder. +* Need to account for that during VRR toggle/push/etc. +*/ +if (crtc_state->bigjoiner_pipes) +return ; +if (adjusted_mode->flags &DRM_MODE_FLAG_INTERLACE )return ;
drivers/gpu/drm/msm/adreno/a6xx_gpu.c +4 -0
@@ -1295,6 +1295,10 @@ static void a6xx_calc_ubwc_config(struct adreno_gpu *gpu)if (adreno_is_a618 (gpu)) gpu->ubwc_config.highest_bank_bit =14 ; +if (adreno_is_a619 (gpu)) +/* TODO: Should be 14 but causes corruption at e.g. 1920x1200 on DP */ + gpu->ubwc_config.highest_bank_bit =13 ; +if (adreno_is_a619_holi (gpu)) gpu->ubwc_config.highest_bank_bit =13 ;
drivers/gpu/drm/msm/disp/dpu1/dpu_core_perf.c +5 -5
@@ -459,15 +459,15 @@ int dpu_core_perf_debugfs_init(struct dpu_kms *dpu_kms, struct dentry *parent) &perf->core_clk_rate);debugfs_create_u32 ("enable_bw_release" ,0600 , entry, (u32 *)&perf->enable_bw_release); -debugfs_create_u32 ("threshold_low" ,0600 , entry, +debugfs_create_u32 ("threshold_low" ,0400 , entry, (u32 *)&perf->perf_cfg->max_bw_low); -debugfs_create_u32 ("threshold_high" ,0600 , entry, +debugfs_create_u32 ("threshold_high" ,0400 , entry, (u32 *)&perf->perf_cfg->max_bw_high); -debugfs_create_u32 ("min_core_ib" ,0600 , entry, +debugfs_create_u32 ("min_core_ib" ,0400 , entry, (u32 *)&perf->perf_cfg->min_core_ib); -debugfs_create_u32 ("min_llcc_ib" ,0600 , entry, +debugfs_create_u32 ("min_llcc_ib" ,0400 , entry, (u32 *)&perf->perf_cfg->min_llcc_ib); -debugfs_create_u32 ("min_dram_ib" ,0600 , entry, +debugfs_create_u32 ("min_dram_ib" ,0400 , entry, (u32 *)&perf->perf_cfg->min_dram_ib);debugfs_create_file ("perf_mode" ,0600 , entry, (u32 *)perf, &dpu_core_perf_mode_fops);
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c +4 -4
@@ -525,14 +525,14 @@ int dpu_core_irq_register_callback(struct dpu_kms *dpu_kms,int ret;if (!irq_cb) { -DPU_ERROR ("invalid IRQ=[%d, %d] irq_cb:%ps\n" , -DPU_IRQ_REG (irq_idx),DPU_IRQ_BIT (irq_idx), irq_cb); +DPU_ERROR ("IRQ=[%d, %d] NULL callback\n" , +DPU_IRQ_REG (irq_idx),DPU_IRQ_BIT (irq_idx));return -EINVAL ; }if (!dpu_core_irq_is_valid (irq_idx)) { -DPU_ERROR ("invalid IRQ=[%d, %d]\n" , -DPU_IRQ_REG (irq_idx),DPU_IRQ_BIT (irq_idx)); +DPU_ERROR ("invalid IRQ=[%d, %d] irq_cb:%ps\n" , +DPU_IRQ_REG (irq_idx),DPU_IRQ_BIT (irq_idx), irq_cb);return -EINVAL ; }
drivers/gpu/drm/msm/dp/dp_display.c +2 -0
@@ -598,6 +598,7 @@ static int dp_hpd_plug_handle(struct dp_display_private *dp, u32 data) ret =dp_display_usbpd_configure_cb (&pdev->dev);if (ret) {/* link train failed */ dp->hpd_state =ST_DISCONNECTED ; +pm_runtime_put_sync (&pdev->dev); }else { dp->hpd_state =ST_MAINLINK_READY ; }
@@ -655,6 +656,7 @@ static int dp_hpd_unplug_handle(struct dp_display_private *dp, u32 data)dp_display_host_phy_exit (dp); dp->hpd_state =ST_DISCONNECTED ;dp_display_notify_disconnect (&dp->dp_display.pdev->dev); +pm_runtime_put_sync (&pdev->dev);mutex_unlock (&dp->event_mutex);return 0 ; }
drivers/gpu/drm/msm/msm_fb.c +3 -3
@@ -89,7 +89,7 @@ int msm_framebuffer_prepare(struct drm_framebuffer *fb,for (i =0 ; i < n; i++) { ret =msm_gem_get_and_pin_iova (fb->obj[i], aspace, &msm_fb->iova[i]); -drm_dbg_state (fb->dev,"FB[%u]: iova[%d]: %08llx (%d)" , +drm_dbg_state (fb->dev,"FB[%u]: iova[%d]: %08llx (%d)\n" , fb->base.id, i, msm_fb->iova[i], ret);if (ret)return ret;
@@ -176,7 +176,7 @@ static struct drm_framebuffer *msm_framebuffer_init(struct drm_device *dev,const struct msm_format *format;int ret, i, n; -drm_dbg_state (dev,"create framebuffer: mode_cmd=%p (%dx%d@%4.4s)" , +drm_dbg_state (dev,"create framebuffer: mode_cmd=%p (%dx%d@%4.4s)\n" , mode_cmd, mode_cmd->width, mode_cmd->height, (char *)&mode_cmd->pixel_format);
@@ -232,7 +232,7 @@ static struct drm_framebuffer *msm_framebuffer_init(struct drm_device *dev,refcount_set (&msm_fb->dirtyfb,1 ); -drm_dbg_state (dev,"create: FB ID: %d (%p)" , fb->base.id, fb); +drm_dbg_state (dev,"create: FB ID: %d (%p)\n" , fb->base.id, fb);return fb;
drivers/gpu/drm/msm/msm_kms.c +2 -2
@@ -149,7 +149,7 @@ int msm_crtc_enable_vblank(struct drm_crtc *crtc)struct msm_kms *kms = priv->kms;if (!kms)return -ENXIO ; -drm_dbg_vbl (dev,"crtc=%u" , crtc->base.id); +drm_dbg_vbl (dev,"crtc=%u\n" , crtc->base.id);return vblank_ctrl_queue_work (priv, crtc, true); }
@@ -160,7 +160,7 @@ void msm_crtc_disable_vblank(struct drm_crtc *crtc)struct msm_kms *kms = priv->kms;if (!kms)return ; -drm_dbg_vbl (dev,"crtc=%u" , crtc->base.id); +drm_dbg_vbl (dev,"crtc=%u\n" , crtc->base.id);vblank_ctrl_queue_work (priv, crtc, false); }
drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowof.c +6 -1
@@ -66,11 +66,16 @@ of_init(struct nvkm_bios *bios, const char *name)return ERR_PTR (-EINVAL ); } +static void of_fini (void *p) +{ +kfree (p); +} +const struct nvbios_source nvbios_of = { .name ="OpenFirmware" , .init = of_init, - .fini = (void (*)(void *))kfree, + .fini = of_fini, .read = of_read, .size = of_size, .rw = false,
drivers/gpu/drm/panfrost/panfrost_mmu.c +9 -4
@@ -502,11 +502,18 @@ static int panfrost_mmu_map_fault_addr(struct panfrost_device *pfdev, int as,mapping_set_unevictable (mapping);for (i = page_offset; i < page_offset +NUM_FAULT_PAGES ; i++) { +/* Can happen if the last fault only partially filled this +* section of the pages array before failing. In that case +* we skip already filled pages. +*/ +if (pages[i]) +continue ; + pages[i] =shmem_read_mapping_page (mapping, i);if (IS_ERR (pages[i])) { ret =PTR_ERR (pages[i]); pages[i] =NULL ; - goto err_pages; + goto err_unlock; } }
@@ -514,7 +521,7 @@ static int panfrost_mmu_map_fault_addr(struct panfrost_device *pfdev, int as, ret =sg_alloc_table_from_pages (sgt, pages + page_offset,NUM_FAULT_PAGES ,0 ,SZ_2M ,GFP_KERNEL );if (ret) - goto err_pages; + goto err_unlock; ret =dma_map_sgtable (pfdev->dev, sgt,DMA_BIDIRECTIONAL ,0 );if (ret)
@@ -537,8 +544,6 @@ static int panfrost_mmu_map_fault_addr(struct panfrost_device *pfdev, int as, err_map:sg_free_table (sgt); -err_pages: -drm_gem_shmem_put_pages (&bo->base); err_unlock:dma_resv_unlock (obj->resv); err_bo:
drivers/gpu/drm/qxl/qxl_release.c +45 -5
61 lines not on this page · raw message
drivers/gpu/drm/vmwgfx/vmwgfx_drv.c +6 -5
@@ -666,11 +666,12 @@ static int vmw_dma_select_mode(struct vmw_private *dev_priv) [vmw_dma_map_populate] = "Caching DMA mappings.", [vmw_dma_map_bind] = "Giving up DMA mappings early."}; -/* TTM currently doesn't fully support SEV encryption. */ -if (cc_platform_has (CC_ATTR_MEM_ENCRYPT )) -return -EINVAL ; - -if (vmw_force_coherent) +/* +* When running with SEV we always want dma mappings, because +* otherwise ttm tt pool pages will bounce through swiotlb running +* out of available space. +*/ +if (vmw_force_coherent ||cc_platform_has (CC_ATTR_MEM_ENCRYPT )) dev_priv->map_mode = vmw_dma_alloc_coherent;else if (vmw_restrict_iommu) dev_priv->map_mode = vmw_dma_map_bind;
drivers/gpu/drm/xe/xe_display.c +0 -5
@@ -108,11 +108,6 @@ int xe_display_create(struct xe_device *xe) xe->display.hotplug.dp_wq =alloc_ordered_workqueue ("xe-dp" ,0 );drmm_mutex_init (&xe->drm, &xe->sb_lock); -drmm_mutex_init (&xe->drm, &xe->display.backlight.lock); -drmm_mutex_init (&xe->drm, &xe->display.audio.mutex); -drmm_mutex_init (&xe->drm, &xe->display.wm.wm_mutex); -drmm_mutex_init (&xe->drm, &xe->display.pps.mutex); -drmm_mutex_init (&xe->drm, &xe->display.hdcp.hdcp_mutex); xe->enabled_irq_mask = ~0 ; err =drmm_add_action_or_reset (&xe->drm, display_destroy,NULL );
drivers/gpu/drm/xe/xe_hwmon.c +2 -2
@@ -288,7 +288,7 @@ xe_hwmon_power1_max_interval_show(struct device *dev, struct device_attribute *a* As y can be < 2, we compute tau4 = (4 | x) << y * and then add 2 when doing the final right shift to account for units */ - tau4 = ((1 << x_w) | x) << y; + tau4 = (u64)((1 << x_w) | x) << y;/* val in hwmon interface units (millisec) */ out =mul_u64_u32_shr (tau4,SF_TIME , hwmon->scl_shift_time + x_w);
@@ -328,7 +328,7 @@ xe_hwmon_power1_max_interval_store(struct device *dev, struct device_attribute * r =FIELD_PREP (PKG_MAX_WIN ,PKG_MAX_WIN_DEFAULT ); x =REG_FIELD_GET (PKG_MAX_WIN_X , r); y =REG_FIELD_GET (PKG_MAX_WIN_Y , r); - tau4 = ((1 << x_w) | x) << y; + tau4 = (u64)((1 << x_w) | x) << y; max_win =mul_u64_u32_shr (tau4,SF_TIME , hwmon->scl_shift_time + x_w);if (val > max_win)
drivers/iommu/intel/iommu.c +7 -4
@@ -4381,9 +4381,11 @@ static struct iommu_device *intel_iommu_probe_device(struct device *dev) }dev_iommu_priv_set (dev, info); - ret =device_rbtree_insert (iommu, info); -if (ret) - goto free; +if (pdev &&pci_ats_supported (pdev)) { + ret =device_rbtree_insert (iommu, info); +if (ret) + goto free; + }if (sm_supported (iommu) && !dev_is_real_dma_subdevice (dev)) { ret =intel_pasid_alloc_table (dev);
@@ -4410,7 +4412,8 @@ static void intel_iommu_release_device(struct device *dev)struct intel_iommu *iommu = info->iommu;mutex_lock (&iommu->iopf_lock); -device_rbtree_remove (info); +if (dev_is_pci (dev) &&pci_ats_supported (to_pci_dev (dev))) +device_rbtree_remove (info);mutex_unlock (&iommu->iopf_lock); if (sm_supported(iommu) && !dev_is_real_dma_subdevice(dev) &&
drivers/iommu/intel/perfmon.c +1 -1
@@ -438,7 +438,7 @@ static int iommu_pmu_assign_event(struct iommu_pmu *iommu_pmu,iommu_pmu_set_filter (domain, event->attr.config1,IOMMU_PMU_FILTER_DOMAIN , idx, event->attr.config1); -iommu_pmu_set_filter (pasid, event->attr.config1, +iommu_pmu_set_filter (pasid, event->attr.config2,IOMMU_PMU_FILTER_PASID , idx, event->attr.config1); iommu_pmu_set_filter(ats, event->attr.config2,
drivers/iommu/intel/svm.c +1 -1
@@ -67,7 +67,7 @@ int intel_svm_enable_prq(struct intel_iommu *iommu)struct page *pages;int irq, ret; - pages =alloc_pages (GFP_KERNEL | __GFP_ZERO,PRQ_ORDER ); + pages =alloc_pages_node (iommu->node,GFP_KERNEL | __GFP_ZERO,PRQ_ORDER );if (!pages) {pr_warn ("IOMMU: %s: Failed to allocate page request queue\n" , iommu->name);
drivers/md/raid1.c +1 -1
@@ -1474,7 +1474,7 @@ static void raid1_write_request(struct mddev *mddev, struct bio *bio,for (j =0 ; j < i; j++)if (r1_bio->bios[j])rdev_dec_pending (conf->mirrors[j].rdev, mddev); -free_r1bio (r1_bio); +mempool_free (r1_bio, &conf->r1bio_pool);allow_barrier (conf, bio->bi_iter.bi_sector);if (bio->bi_opf &REQ_NOWAIT ) {
drivers/media/cec/core/cec-adap.c +0 -14
@@ -1151,20 +1151,6 @@ void cec_received_msg_ts(struct cec_adapter *adap,if (valid_la && min_len) {/* These messages have special length requirements */ switch (cmd) { -case CEC_MSG_TIMER_STATUS : -if (msg->msg[2 ] &0x10 ) { -switch (msg->msg[2 ] &0xf ) { -case CEC_OP_PROG_INFO_NOT_ENOUGH_SPACE : -case CEC_OP_PROG_INFO_MIGHT_NOT_BE_ENOUGH_SPACE : -if (msg->len <5 ) - valid_la = false; -break ; - } - }else if ((msg->msg[2 ] &0xf ) ==CEC_OP_PROG_ERROR_DUPLICATE ) { -if (msg->len <5 ) - valid_la = false; - } -break ;case CEC_MSG_RECORD_ON :switch (msg->msg[2 ]) {case CEC_OP_RECORD_SRC_OWN :
drivers/mmc/host/omap.c +31 -17
78 lines not on this page · raw message
drivers/net/dsa/mt7530.c +195 -34
250 lines not on this page · raw message
drivers/net/dsa/mt7530.h +5 -0
@@ -65,6 +65,7 @@ enum mt753x_id {/* Registers for BPDU and PAE frame control*/ #define MT753X_BPC 0x24 +#define MT753X_PAE_BPDU_FR BIT(25)#define MT753X_PAE_EG_TAG_MASK GENMASK(24, 22)#define MT753X_PAE_EG_TAG (x) FIELD_PREP(MT753X_PAE_EG_TAG_MASK, x)#define MT753X_PAE_PORT_FW_MASK GENMASK(18, 16)
@@ -75,20 +76,24 @@ enum mt753x_id {/* Register for :01 and :02 MAC DA frame control */ #define MT753X_RGAC1 0x28 +#define MT753X_R02_BPDU_FR BIT(25)#define MT753X_R02_EG_TAG_MASK GENMASK(24, 22)#define MT753X_R02_EG_TAG (x) FIELD_PREP(MT753X_R02_EG_TAG_MASK, x)#define MT753X_R02_PORT_FW_MASK GENMASK(18, 16)#define MT753X_R02_PORT_FW (x) FIELD_PREP(MT753X_R02_PORT_FW_MASK, x) +#define MT753X_R01_BPDU_FR BIT(9)#define MT753X_R01_EG_TAG_MASK GENMASK(8, 6)#define MT753X_R01_EG_TAG (x) FIELD_PREP(MT753X_R01_EG_TAG_MASK, x)#define MT753X_R01_PORT_FW_MASK GENMASK(2, 0)/* Register for :03 and :0E MAC DA frame control */ #define MT753X_RGAC2 0x2c +#define MT753X_R0E_BPDU_FR BIT(25)#define MT753X_R0E_EG_TAG_MASK GENMASK(24, 22)#define MT753X_R0E_EG_TAG (x) FIELD_PREP(MT753X_R0E_EG_TAG_MASK, x)#define MT753X_R0E_PORT_FW_MASK GENMASK(18, 16)#define MT753X_R0E_PORT_FW (x) FIELD_PREP(MT753X_R0E_PORT_FW_MASK, x) +#define MT753X_R03_BPDU_FR BIT(9)#define MT753X_R03_EG_TAG_MASK GENMASK(8, 6)#define MT753X_R03_EG_TAG (x) FIELD_PREP(MT753X_R03_EG_TAG_MASK, x)#define MT753X_R03_PORT_FW_MASK GENMASK(2, 0)
drivers/net/ethernet/amazon/ena/ena_com.c +1 -1
@@ -362,7 +362,7 @@ static int ena_com_init_io_sq(struct ena_com_dev *ena_dev,ENA_COM_BOUNCE_BUFFER_CNTRL_CNT ; io_sq->bounce_buf_ctrl.next_to_use =0 ; - size = io_sq->bounce_buf_ctrl.buffer_size * + size = (size_t )io_sq->bounce_buf_ctrl.buffer_size * io_sq->bounce_buf_ctrl.buffers_num; dev_node =dev_to_node (ena_dev->dmadev);
drivers/net/ethernet/amazon/ena/ena_netdev.c +23 -12
@@ -696,8 +696,11 @@ void ena_unmap_tx_buff(struct ena_ring *tx_ring,static void ena_free_tx_bufs (struct ena_ring *tx_ring) {bool print_once = true; +bool is_xdp_ring;u32 i; + is_xdp_ring =ENA_IS_XDP_INDEX (tx_ring->adapter, tx_ring->qid); +for (i =0 ; i < tx_ring->ring_size; i++) {struct ena_tx_buffer *tx_info = &tx_ring->tx_buffer_info[i];
@@ -717,10 +720,15 @@ static void ena_free_tx_bufs(struct ena_ring *tx_ring)ena_unmap_tx_buff (tx_ring, tx_info); -dev_kfree_skb_any (tx_info->skb); +if (is_xdp_ring) +xdp_return_frame (tx_info->xdpf); +else +dev_kfree_skb_any (tx_info->skb); } -netdev_tx_reset_queue (netdev_get_tx_queue (tx_ring->netdev, - tx_ring->qid)); + +if (!is_xdp_ring) +netdev_tx_reset_queue (netdev_get_tx_queue (tx_ring->netdev, + tx_ring->qid)); }static void ena_free_all_tx_bufs (struct ena_adapter *adapter)
@@ -3421,10 +3429,11 @@ static void check_for_missing_completions(struct ena_adapter *adapter) {struct ena_ring *tx_ring;struct ena_ring *rx_ring; -int i, budget, rc; +int qid, budget, rc;int io_queue_count; io_queue_count = adapter->xdp_num_queues + adapter->num_io_queues; +/* Make sure the driver doesn't turn the device in other process */ smp_rmb ();
@@ -3437,27 +3446,29 @@ static void check_for_missing_completions(struct ena_adapter *adapter)if (adapter->missing_tx_completion_to ==ENA_HW_HINTS_NO_TIMEOUT )return ; - budget =ENA_MONITORED_TX_QUEUES ; + budget =min_t (u32, io_queue_count,ENA_MONITORED_TX_QUEUES ); -for (i = adapter->last_monitored_tx_qid; i < io_queue_count; i++) { - tx_ring = &adapter->tx_ring[i]; - rx_ring = &adapter->rx_ring[i]; + qid = adapter->last_monitored_tx_qid; + +while (budget) { + qid = (qid +1 ) % io_queue_count; + + tx_ring = &adapter->tx_ring[qid]; + rx_ring = &adapter->rx_ring[qid]; rc =check_missing_comp_in_tx_queue (adapter, tx_ring);if (unlikely (rc))return ; - rc = !ENA_IS_XDP_INDEX (adapter, i) ? + rc = !ENA_IS_XDP_INDEX (adapter, qid) ?check_for_rx_interrupt_queue (adapter, rx_ring) :0 ;if (unlikely (rc))return ; budget--; -if (!budget) -break ; } - adapter->last_monitored_tx_qid = i % io_queue_count; + adapter->last_monitored_tx_qid = qid; }/* trigger napi schedule after 2 consecutive detections */
drivers/net/ethernet/amazon/ena/ena_xdp.c +3 -1
@@ -89,7 +89,7 @@ int ena_xdp_xmit_frame(struct ena_ring *tx_ring, rc =ena_xdp_tx_map_frame (tx_ring, tx_info, xdpf, &ena_tx_ctx);if (unlikely (rc)) -return rc; + goto err; ena_tx_ctx.req_id = req_id;
@@ -112,7 +112,9 @@ int ena_xdp_xmit_frame(struct ena_ring *tx_ring, error_unmap_dma:ena_unmap_tx_buff (tx_ring, tx_info); +err: tx_info->xdpf =NULL ; +return rc; }
drivers/net/ethernet/amd/pds_core/core.c +12 -2
@@ -595,6 +595,16 @@ void pdsc_fw_up(struct pdsc *pdsc)pdsc_teardown (pdsc,PDSC_TEARDOWN_RECOVERY ); } +void pdsc_pci_reset_thread (struct work_struct *work) +{ + struct pdsc *pdsc = container_of(work, struct pdsc, pci_reset_work); +struct pci_dev *pdev = pdsc->pdev; + +pci_dev_get (pdev); +pci_reset_function (pdev); +pci_dev_put (pdev); +} +static void pdsc_check_pci_health (struct pdsc *pdsc) {u8 fw_status;
@@ -609,8 +619,8 @@ static void pdsc_check_pci_health(struct pdsc *pdsc)if (fw_status !=PDS_RC_BAD_PCI )return ; -pdsc_reset_prepare (pdsc->pdev); -pdsc_reset_done (pdsc->pdev); +/* prevent deadlock between pdsc_reset_prepare and pdsc_health_thread */ +queue_work (pdsc->wq, &pdsc->pci_reset_work); }void pdsc_health_thread (struct work_struct *work)
drivers/net/ethernet/amd/pds_core/core.h +2 -3
@@ -197,6 +197,7 @@ struct pdsc {struct pdsc_qcq notifyqcq;u64 last_eid;struct pdsc_viftype *viftype_status; +struct work_struct pci_reset_work; };/** enum pds_core_dbell_bits - bitwise composition of dbell values.
@@ -283,9 +284,6 @@ int pdsc_devcmd_init(struct pdsc *pdsc);int pdsc_devcmd_reset (struct pdsc *pdsc);int pdsc_dev_init (struct pdsc *pdsc); -void pdsc_reset_prepare (struct pci_dev *pdev); -void pdsc_reset_done (struct pci_dev *pdev); -int pdsc_intr_alloc (struct pdsc *pdsc,char *name,irq_handler_t handler,void *data);void pdsc_intr_free (struct pdsc *pdsc,int index);
@@ -315,5 +313,6 @@ int pdsc_firmware_update(struct pdsc *pdsc, const struct firmware *fw,void pdsc_fw_down (struct pdsc *pdsc);void pdsc_fw_up (struct pdsc *pdsc); +void pdsc_pci_reset_thread (struct work_struct *work);#endif /* _PDSC_H_ */
drivers/net/ethernet/amd/pds_core/dev.c +3 -0
@@ -229,6 +229,9 @@ int pdsc_devcmd_reset(struct pdsc *pdsc) .reset.opcode = PDS_CORE_CMD_RESET, }; +if (!pdsc_is_fw_running (pdsc)) +return 0 ; +return pdsc_devcmd (pdsc, &cmd, &comp, pdsc->devcmd_timeout); }
drivers/net/ethernet/amd/pds_core/main.c +5 -3
@@ -238,6 +238,7 @@ static int pdsc_init_pf(struct pdsc *pdsc)snprintf (wq_name,sizeof (wq_name),"%s.%d" ,PDS_CORE_DRV_NAME , pdsc->uid); pdsc->wq =create_singlethread_workqueue (wq_name);INIT_WORK (&pdsc->health_work, pdsc_health_thread); +INIT_WORK (&pdsc->pci_reset_work, pdsc_pci_reset_thread);timer_setup (&pdsc->wdtimer, pdsc_wdtimer_cb,0 ); pdsc->wdtimer_period =PDSC_WATCHDOG_SECS *HZ ;
@@ -468,7 +469,7 @@ static void pdsc_restart_health_thread(struct pdsc *pdsc)mod_timer (&pdsc->wdtimer, jiffies +1 ); } -void pdsc_reset_prepare (struct pci_dev *pdev) +static void pdsc_reset_prepare (struct pci_dev *pdev) {struct pdsc *pdsc =pci_get_drvdata (pdev);
@@ -477,10 +478,11 @@ void pdsc_reset_prepare(struct pci_dev *pdev)pdsc_unmap_bars (pdsc);pci_release_regions (pdev); -pci_disable_device (pdev); +if (pci_is_enabled (pdev)) +pci_disable_device (pdev); } -void pdsc_reset_done (struct pci_dev *pdev) +static void pdsc_reset_done (struct pci_dev *pdev) {struct pdsc *pdsc =pci_get_drvdata (pdev);struct device *dev = pdsc->dev;
drivers/net/ethernet/broadcom/bnxt/bnxt.c +2 -0
@@ -11526,6 +11526,8 @@ static int __bnxt_open_nic(struct bnxt *bp, bool irq_re_init, bool link_re_init)/* VF-reps may need to be re-opened after the PF is re-opened */ if (BNXT_PF (bp))bnxt_vf_reps_open (bp); +if (bp->ptp_cfg) +atomic_set (&bp->ptp_cfg->tx_avail,BNXT_MAX_TX_TS );bnxt_ptp_init_rtc (bp, true);bnxt_ptp_cfg_tstamp_filters (bp);return 0 ;
drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c +5 -1
@@ -210,6 +210,9 @@ void bnxt_ulp_start(struct bnxt *bp, int err)if (err)return ; +if (edev->ulp_tbl->msix_requested) +bnxt_fill_msix_vecs (bp, edev->msix_entries); +if (aux_priv) {struct auxiliary_device *adev;
@@ -392,12 +395,13 @@ void bnxt_rdma_aux_device_init(struct bnxt *bp)if (!edev) goto aux_dev_uninit; + aux_priv->edev = edev; + ulp =kzalloc (sizeof (*ulp),GFP_KERNEL );if (!ulp) goto aux_dev_uninit; edev->ulp_tbl = ulp; - aux_priv->edev = edev; bp->edev = edev;bnxt_set_edev_info (edev, bp);
drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c +10 -10
@@ -4721,18 +4721,18 @@ static int rvu_nix_block_init(struct rvu *rvu, struct nix_hw *nix_hw)*/ rvu_write64 (rvu, blkaddr,NIX_AF_CFG ,rvu_read64 (rvu, blkaddr,NIX_AF_CFG ) |0x40ULL ); + } -/* Set chan/link to backpressure TL3 instead of TL2 */ -rvu_write64 (rvu, blkaddr,NIX_AF_PSE_CHANNEL_LEVEL ,0x01 ); +/* Set chan/link to backpressure TL3 instead of TL2 */ +rvu_write64 (rvu, blkaddr,NIX_AF_PSE_CHANNEL_LEVEL ,0x01 ); -/* Disable SQ manager's sticky mode operation (set TM6 = 0) -* This sticky mode is known to cause SQ stalls when multiple -* SQs are mapped to same SMQ and transmitting pkts at a time. -*/ - cfg =rvu_read64 (rvu, blkaddr,NIX_AF_SQM_DBG_CTL_STATUS ); - cfg &= ~BIT_ULL (15 ); -rvu_write64 (rvu, blkaddr,NIX_AF_SQM_DBG_CTL_STATUS , cfg); - } +/* Disable SQ manager's sticky mode operation (set TM6 = 0) +* This sticky mode is known to cause SQ stalls when multiple +* SQs are mapped to same SMQ and transmitting pkts at a time. +*/ + cfg =rvu_read64 (rvu, blkaddr,NIX_AF_SQM_DBG_CTL_STATUS ); + cfg &= ~BIT_ULL (15 ); +rvu_write64 (rvu, blkaddr,NIX_AF_SQM_DBG_CTL_STATUS , cfg); ltdefs = rvu->kpu.lt_def;/* Calibrate X2P bus to check if CGX/LBK links are fine */
drivers/net/ethernet/marvell/octeontx2/nic/qos.c +1 -0
@@ -382,6 +382,7 @@ static void otx2_qos_read_txschq_cfg_tl(struct otx2_qos_node *parent,otx2_qos_read_txschq_cfg_tl (node, cfg); cnt = cfg->static_node_pos[node->level]; cfg->schq_contig_list[node->level][cnt] = node->schq; + cfg->schq_index_used[node->level][cnt] = true; cfg->schq_contig[node->level]++; cfg->static_node_pos[node->level]++;otx2_qos_read_txschq_cfg_schq (node, cfg);
drivers/net/ethernet/mellanox/mlx5/core/en/ptp.h +7 -1
@@ -95,9 +95,15 @@ static inline void mlx5e_ptp_metadata_fifo_push(struct mlx5e_ptp_metadata_fifo * }static inline u8 +mlx5e_ptp_metadata_fifo_peek (struct mlx5e_ptp_metadata_fifo *fifo) +{ +return fifo->data[fifo->mask & fifo->cc]; +} + +static inline void mlx5e_ptp_metadata_fifo_pop (struct mlx5e_ptp_metadata_fifo *fifo) { -return fifo->data[fifo->mask & fifo->cc++]; + fifo->cc++; } static inline void
drivers/net/ethernet/mellanox/mlx5/core/en/qos.c +17 -16
@@ -83,24 +83,25 @@ int mlx5e_open_qos_sq(struct mlx5e_priv *priv, struct mlx5e_channels *chs, txq_ix =mlx5e_qid_from_qos (chs, node_qid); -WARN_ON (node_qid > priv->htb_max_qos_sqs); -if (node_qid == priv->htb_max_qos_sqs) { -struct mlx5e_sq_stats *stats, **stats_list =NULL ; - -if (priv->htb_max_qos_sqs ==0 ) { - stats_list =kvcalloc (mlx5e_qos_max_leaf_nodes (priv->mdev), -sizeof (*stats_list), -GFP_KERNEL ); -if (!stats_list) -return -ENOMEM ; - } +WARN_ON (node_qid >=mlx5e_htb_cur_leaf_nodes (priv->htb)); +if (!priv->htb_qos_sq_stats) { +struct mlx5e_sq_stats **stats_list; + + stats_list =kvcalloc (mlx5e_qos_max_leaf_nodes (priv->mdev), +sizeof (*stats_list),GFP_KERNEL ); +if (!stats_list) +return -ENOMEM ; + +WRITE_ONCE (priv->htb_qos_sq_stats, stats_list); + } + +if (!priv->htb_qos_sq_stats[node_qid]) { +struct mlx5e_sq_stats *stats; + stats =kzalloc (sizeof (*stats),GFP_KERNEL ); -if (!stats) { -kvfree (stats_list); +if (!stats)return -ENOMEM ; - } -if (stats_list) -WRITE_ONCE (priv->htb_qos_sq_stats, stats_list); +WRITE_ONCE (priv->htb_qos_sq_stats[node_qid], stats);/* Order htb_max_qos_sqs increment after writing the array pointer. * Pairs with smp_load_acquire in en_stats.c.
drivers/net/ethernet/mellanox/mlx5/core/en/selq.c +2 -0
@@ -57,6 +57,7 @@ int mlx5e_selq_init(struct mlx5e_selq *selq, struct mutex *state_lock)void mlx5e_selq_cleanup (struct mlx5e_selq *selq) { +mutex_lock (selq->state_lock);WARN_ON_ONCE (selq->is_prepared);kvfree (selq->standby);
@@ -67,6 +68,7 @@ void mlx5e_selq_cleanup(struct mlx5e_selq *selq)kvfree (selq->standby); selq->standby =NULL ; +mutex_unlock (selq->state_lock); }void mlx5e_selq_prepare_params (struct mlx5e_selq *selq,struct mlx5e_params *params)
drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c +17 -0
@@ -451,6 +451,23 @@ int mlx5e_ethtool_set_channels(struct mlx5e_priv *priv,mutex_lock (&priv->state_lock); +/* If RXFH is configured, changing the channels number is allowed only if +* it does not require resizing the RSS table. This is because the previous +* configuration may no longer be compatible with the new RSS table. +*/ +if (netif_is_rxfh_configured (priv->netdev)) { +int cur_rqt_size =mlx5e_rqt_size (priv->mdev, cur_params->num_channels); +int new_rqt_size =mlx5e_rqt_size (priv->mdev, count); + +if (new_rqt_size != cur_rqt_size) { + err = -EINVAL ; +netdev_err (priv->netdev, +"%s: RXFH is configured, block changing channels number that affects RSS table size (new: %d, current: %d)\n" , + __func__, new_rqt_size, cur_rqt_size); + goto out; + } + } +/* Don't allow changing the number of channels if HTB offload is active, * because the numeration of the QoS SQs will change, while per-queue * qdiscs are attached.
drivers/net/ethernet/mellanox/mlx5/core/en_main.c +0 -2
@@ -5695,9 +5695,7 @@ void mlx5e_priv_cleanup(struct mlx5e_priv *priv)kfree (priv->tx_rates);kfree (priv->txq2sq);destroy_workqueue (priv->wq); -mutex_lock (&priv->state_lock);mlx5e_selq_cleanup (&priv->selq); -mutex_unlock (&priv->state_lock);free_cpumask_var (priv->scratchpad.cpumask);for (i =0 ; i < priv->htb_max_qos_sqs; i++)
drivers/net/ethernet/mellanox/mlx5/core/en_tx.c +3 -4
@@ -398,6 +398,8 @@ mlx5e_txwqe_complete(struct mlx5e_txqsq *sq, struct sk_buff *skb, (skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP))) {u8 metadata_index =be32_to_cpu (eseg->flow_table_metadata); +mlx5e_ptp_metadata_fifo_pop (&sq->ptpsq->metadata_freelist); +mlx5e_skb_cb_hwtstamp_init (skb);mlx5e_ptp_metadata_map_put (&sq->ptpsq->metadata_map, skb, metadata_index);
@@ -496,9 +498,6 @@ mlx5e_sq_xmit_wqe(struct mlx5e_txqsq *sq, struct sk_buff *skb, err_drop: stats->dropped++; -if (unlikely (sq->ptpsq && (skb_shinfo (skb)->tx_flags &SKBTX_HW_TSTAMP ))) -mlx5e_ptp_metadata_fifo_push (&sq->ptpsq->metadata_freelist, -be32_to_cpu (eseg->flow_table_metadata));dev_kfree_skb_any (skb);mlx5e_tx_flush (sq); }
@@ -657,7 +656,7 @@ static void mlx5e_cqe_ts_id_eseg(struct mlx5e_ptpsq *ptpsq, struct sk_buff *skb, {if (unlikely (skb_shinfo (skb)->tx_flags &SKBTX_HW_TSTAMP )) eseg->flow_table_metadata = -cpu_to_be32 (mlx5e_ptp_metadata_fifo_pop (&ptpsq->metadata_freelist)); +cpu_to_be32 (mlx5e_ptp_metadata_fifo_peek (&ptpsq->metadata_freelist)); } static void mlx5e_txwqe_build_eseg(struct mlx5e_priv *priv, struct mlx5e_txqsq *sq,
drivers/net/ethernet/mellanox/mlx5/core/fs_core.c +14 -3
@@ -1664,6 +1664,16 @@ static int create_auto_flow_group(struct mlx5_flow_table *ft,return err; } +static bool mlx5_pkt_reformat_cmp (struct mlx5_pkt_reformat *p1, +struct mlx5_pkt_reformat *p2) +{ +return p1->owner == p2->owner && + (p1->owner ==MLX5_FLOW_RESOURCE_OWNER_FW ? + p1->id == p2->id : +mlx5_fs_dr_action_get_pkt_reformat_id (p1) == +mlx5_fs_dr_action_get_pkt_reformat_id (p2)); +} +static bool mlx5_flow_dests_cmp (struct mlx5_flow_destination *d1,struct mlx5_flow_destination *d2) {
@@ -1675,8 +1685,8 @@ static bool mlx5_flow_dests_cmp(struct mlx5_flow_destination *d1, ((d1->vport.flags &MLX5_FLOW_DEST_VPORT_VHCA_ID ) ? (d1->vport.vhca_id == d2->vport.vhca_id) : true) && ((d1->vport.flags &MLX5_FLOW_DEST_VPORT_REFORMAT_ID ) ? - (d1->vport.pkt_reformat->id == - d2->vport.pkt_reformat->id) : true)) || +mlx5_pkt_reformat_cmp (d1->vport.pkt_reformat, + d2->vport.pkt_reformat) : true)) || (d1->type ==MLX5_FLOW_DESTINATION_TYPE_FLOW_TABLE && d1->ft == d2->ft) || (d1->type == MLX5_FLOW_DESTINATION_TYPE_TIR &&
@@ -1808,8 +1818,9 @@ static struct mlx5_flow_handle *add_rule_fg(struct mlx5_flow_group *fg, }trace_mlx5_fs_set_fte (fte, false); +/* Link newly added rules into the tree. */ for (i =0 ; i < handle->num_rules; i++) { -if (refcount_read (&handle->rule[i]->node.refcount) ==1 ) { +if (!handle->rule[i]->node.parent) {tree_add_node (&handle->rule[i]->node, &fte->node);trace_mlx5_fs_add_rule (handle->rule[i]); }
drivers/net/ethernet/mellanox/mlx5/core/main.c +20 -17
@@ -1480,6 +1480,14 @@ int mlx5_init_one_devl_locked(struct mlx5_core_dev *dev)if (err) goto err_register; + err =mlx5_crdump_enable (dev); +if (err) +mlx5_core_err (dev,"mlx5_crdump_enable failed with error code %d\n" , err); + + err =mlx5_hwmon_dev_register (dev); +if (err) +mlx5_core_err (dev,"mlx5_hwmon_dev_register failed with error code %d\n" , err); +mutex_unlock (&dev->intf_state_mutex);return 0 ;
@@ -1505,7 +1513,10 @@ int mlx5_init_one(struct mlx5_core_dev *dev)int err;devl_lock (devlink); +devl_register (devlink); err =mlx5_init_one_devl_locked (dev); +if (err) +devl_unregister (devlink);devl_unlock (devlink);return err; }
@@ -1517,6 +1528,8 @@ void mlx5_uninit_one(struct mlx5_core_dev *dev)devl_lock (devlink);
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/pci_irq.c +3 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/sf/dev/driver.c +13 -9
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/micrel/ks8851_common.c +5 -11
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/micrel/ks8851_par.c +0 -11
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/micrel/ks8851_spi.c +0 -11
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/microchip/sparx5/sparx5_port.c +2 -2
Lines of this file are not shown. View the raw message.
drivers/platform/chrome/cros_ec_uart.c +14 -14
Lines of this file are not shown. View the raw message.
net/bluetooth/hci_sync.c +55 -11
66 lines not on this page · raw message
net/bluetooth/iso.c +22 -28
50 lines not on this page · raw message
net/bluetooth/l2cap_sock.c +20 -32
52 lines not on this page · raw message
tools/testing/selftests/timers/posix_timers.c +48 -57
105 lines not on this page · 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.