linux/drivers/gpu/drm/nouveau
Dave Airlie 6763a0aea6 nouveau/vmm: fix another SPT/LPT race
We've had an unknown Turing issue for a while with page faults since
large pages and compression.

I've got a patch series that syncs all our L2 handling with ogkm and it
made this fault happen more.

After writing a bunch of debugging patches, I spotted an invalid LPT
entry where there should have been a valid one.

A 64K MAP succeeds on a range, but a subsequent SPT put drops SPT refs
across multiple ranges,

We shouldn't assume all ranges where SPTEs go away will have the same
sparse/invalid/valid state, just iterate over each instead and do the
right thing.

Cc: stable@vger.kernel.org
Signed-off-by: Dave Airlie <airlied@redhat.com>
Fixes: d19512f5ab ("nouveau/vmm: start tracking if the LPT PTE is valid. (v6)")
Link: https://patch.msgid.link/20260615044737.3419585-1-airlied@gmail.com
[ Properly format commit message. - Danilo ]
Signed-off-by: Danilo Krummrich <dakr@kernel.org>
(cherry picked from commit d008141ed4)
Signed-off-by: Dave Airlie <airlied@redhat.com>
2026-07-10 14:19:23 +10:00
..
dispnv04 Convert more 'alloc_obj' cases to default GFP_KERNEL arguments 2026-02-21 20:03:00 -08:00
dispnv50 drm/nouveau/kms/nvd9-: Remove unused header in crc.c 2026-05-08 14:21:09 -04:00
include Revert "nouveau/gsp: cleanup IS_ERR_OR_NULL in rm_alloc functions" 2026-05-28 22:49:53 +02:00
nvif Convert more 'alloc_obj' cases to default GFP_KERNEL arguments 2026-02-21 20:03:00 -08:00
nvkm nouveau/vmm: fix another SPT/LPT race 2026-07-10 14:19:23 +10:00
gv100_fence.c nouveau: Membar before between semaphore writes and the interrupt 2025-08-29 18:36:51 +02:00
Kbuild drm/nouveau/gv100-: switch to volta semaphore methods 2025-05-19 06:29:26 +10:00
Kconfig drm/nouveau: Support devfreq for Tegra 2025-09-15 14:18:08 -04:00
nouveau_abi16.c drm/nouveau: Fix double call to drm_sched_entity_fini() 2026-04-16 21:34:00 +02:00
nouveau_abi16.h drm/nouveau: Add DRM_IOCTL_NOUVEAU_GET_ZCULL_INFO 2026-02-24 15:04:55 +01:00
nouveau_acpi.c ACPI: video: Fix random crashes due to bad kfree() 2025-01-13 21:09:10 +01:00
nouveau_acpi.h
nouveau_backlight.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
nouveau_bios.c drm/nouveau: expose VBIOS via debugfs on GSP-RM systems 2026-04-29 23:54:47 +02:00
nouveau_bios.h drm/nouveau: move nvxx_* definitions to nouveau_drv.h 2024-07-27 03:05:38 +02:00
nouveau_bo.c drm/nouveau: Test for imported buffers with drm_gem_is_imported() 2026-02-27 15:49:37 +01:00
nouveau_bo.h drm/ttm: rename ttm_bo_put to _fini v3 2025-09-17 14:03:21 +02:00
nouveau_bo0039.c drm/nouveau: remove push pointer from nouveau_channel 2024-07-27 03:05:49 +02:00
nouveau_bo74c1.c drm/nouveau: remove push pointer from nouveau_channel 2024-07-27 03:05:49 +02:00
nouveau_bo85b5.c drm/nouveau: remove push pointer from nouveau_channel 2024-07-27 03:05:49 +02:00
nouveau_bo90b5.c drm/nouveau: remove push pointer from nouveau_channel 2024-07-27 03:05:49 +02:00
nouveau_bo5039.c drm/nouveau: remove push pointer from nouveau_channel 2024-07-27 03:05:49 +02:00
nouveau_bo9039.c drm/nouveau: remove push pointer from nouveau_channel 2024-07-27 03:05:49 +02:00
nouveau_boa0b5.c drm/nouveau: remove push pointer from nouveau_channel 2024-07-27 03:05:49 +02:00
nouveau_chan.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
nouveau_chan.h drm/nouveau: Remove surplus struct member 2025-08-09 13:13:43 +02:00
nouveau_connector.c drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
nouveau_connector.h
nouveau_crtc.h
nouveau_debugfs.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
nouveau_debugfs.h drm/nouveau: Do not fail module init on debugfs errors 2025-07-03 23:56:33 +02:00
nouveau_display.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
nouveau_display.h drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
nouveau_dma.c drm/nouveau/nv50-: separate CHANNEL_GPFIFO handling out from CHANNEL_DMA 2025-05-19 07:14:44 +10:00
nouveau_dma.h drm/nouveau: Remove surplus struct member 2025-08-09 13:13:43 +02:00
nouveau_dmem.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
nouveau_dmem.h
nouveau_dp.c drm/nouveau/dp: Use the generic helper to control LTTPR transparent mode 2025-02-25 18:33:48 +02:00
nouveau_drm.c drm/nouveau: WQ_PERCPU added to alloc_workqueue users 2026-04-28 12:46:55 +02:00
nouveau_drv.h nouveau/vmm: start tracking if the LPT PTE is valid. (v6) 2026-02-05 06:05:09 +10:00
nouveau_encoder.h drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
nouveau_exec.c drm/nouveau: fix reversed error cleanup order in ucopy functions 2026-06-21 15:15:23 +02:00
nouveau_exec.h
nouveau_fence.c dma-buf: inline spinlock for fence protection v5 2026-02-23 16:14:19 +01:00
nouveau_fence.h Revert "drm/nouveau: Remove waitque for sched teardown" 2025-09-03 23:16:59 +02:00
nouveau_gem.c drm/nouveau: fix u32 overflow in pushbuf reloc bounds check 2026-04-20 21:23:14 +02:00
nouveau_gem.h
nouveau_hwmon.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
nouveau_hwmon.h
nouveau_ioc32.c
nouveau_ioctl.h
nouveau_led.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
nouveau_led.h
nouveau_mem.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
nouveau_mem.h drm/nouveau: pass drm to nouveau_mem_new(), instead of cli 2024-07-27 03:05:41 +02:00
nouveau_nvif.c nouveau: add a third state to the fini handler. 2026-02-04 12:17:43 +10:00
nouveau_platform.c drm/nouveau: Support devfreq for Tegra 2025-09-15 14:18:08 -04:00
nouveau_platform.h
nouveau_prime.c nouveau: populate buffers before exporting them. 2025-09-11 10:04:55 +10:00
nouveau_reg.h
nouveau_sched.c drm/nouveau: WQ_PERCPU added to alloc_workqueue users 2026-04-28 12:46:55 +02:00
nouveau_sched.h Revert "drm/nouveau: Remove waitque for sched teardown" 2025-09-03 23:16:59 +02:00
nouveau_sgdma.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
nouveau_svm.c Convert more 'alloc_obj' cases to default GFP_KERNEL arguments 2026-02-21 20:03:00 -08:00
nouveau_svm.h gpu/drm/nouveau: enable THP support for GPU memory migration 2025-11-24 15:08:49 -08:00
nouveau_ttm.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
nouveau_ttm.h
nouveau_uvmm.c drm/nouveau: fix reversed error cleanup order in ucopy functions 2026-06-21 15:15:23 +02:00
nouveau_uvmm.h drm/nouveau/uvmm: Prepare for larger pages 2025-11-12 12:23:38 -05:00
nouveau_vga.c drm/client: Move client event handlers to drm_client_event.c 2024-10-18 09:23:03 +02:00
nouveau_vga.h drm/nouveau: Do not set struct drm_driver.lastclose 2024-08-13 16:21:09 +02:00
nouveau_vmm.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
nouveau_vmm.h
nv04_fence.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
nv10_fence.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
nv10_fence.h
nv17_fence.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
nv50_display.h
nv50_fence.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
nv84_fence.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
nvc0_fence.c drm/nouveau: remove push pointer from nouveau_channel 2024-07-27 03:05:49 +02:00