linux/drivers/gpu/drm/nouveau
Zhi Wang a738fa9105 drm/nouveau/nvkm: introduce new GSP reply policy NVKM_GSP_RPC_REPLY_POLL
Some GSP RPC commands need a new reply policy: "caller don't care about
the message content but want to make sure a reply is received". To
support this case, a new reply policy is introduced.

NV_VGPU_MSG_FUNCTION_ALLOC_MEMORY is a large GSP RPC command. The actual
required policy is NVKM_GSP_RPC_REPLY_POLL. This can be observed from the
dump of the GSP message queue. After the large GSP RPC command is issued,
GSP will write only an empty RPC header in the queue as the reply.

Without this change, the policy "receiving the entire message" is used
for NV_VGPU_MSG_FUNCTION_ALLOC_MEMORY. This causes the timeout of receiving
the returned GSP message in the suspend/resume path.

Introduce the new reply policy NVKM_GSP_RPC_REPLY_POLL, which waits for
the returned GSP message but discards it for the caller. Use the new policy
NVKM_GSP_RPC_REPLY_POLL on the GSP RPC command
NV_VGPU_MSG_FUNCTION_ALLOC_MEMORY.

Fixes: 50f290053d ("drm/nouveau: support handling the return of large GSP message")
Cc: Danilo Krummrich <dakr@kernel.org>
Cc: Alexandre Courbot <acourbot@nvidia.com>
Tested-by: Ben Skeggs <bskeggs@nvidia.com>
Signed-off-by: Zhi Wang <zhiw@nvidia.com>
Signed-off-by: Danilo Krummrich <dakr@kernel.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20250227013554.8269-3-zhiw@nvidia.com
2025-03-09 13:42:10 +01:00
..
dispnv04 drm/nouveau: vendor in drm_encoder_slave API 2025-01-07 15:05:11 +01:00
dispnv50 Merge drm/drm-next into drm-misc-next 2025-02-06 13:47:32 +01:00
include drm/nouveau/nvkm: introduce new GSP reply policy NVKM_GSP_RPC_REPLY_POLL 2025-03-09 13:42:10 +01:00
nvif drm/nouveau: Avoid multiple -Wflex-array-member-not-at-end warnings 2025-02-27 19:16:43 +01:00
nvkm drm/nouveau/nvkm: introduce new GSP reply policy NVKM_GSP_RPC_REPLY_POLL 2025-03-09 13:42:10 +01:00
Kbuild drm/nouveau: handle limited nvif ioctl in abi16 2024-07-27 03:05:22 +02:00
Kconfig drm/nouveau: incorporate I2C TV encoder drivers 2025-01-07 15:05:04 +01:00
nouveau_abi16.c drm/nouveau: pass cli to nouveau_channel_new() instead of drm+device 2024-07-27 03:05:43 +02:00
nouveau_abi16.h drm/nouveau: remove abi16->handles 2024-07-27 03:05:24 +02: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
nouveau_bios.c Merge drm/drm-next into drm-misc-next 2024-07-29 09:35:54 +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-misc-next for v6.12: 2024-08-08 18:58:46 +02:00
nouveau_bo.h drm/nouveau: use GEM references instead of TTMs 2024-07-22 22:46:45 +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 drivers: remove get_task_comm() and print task comm directly 2025-01-12 20:21:16 -08:00
nouveau_chan.h drm/nouveau: remove push pointer from nouveau_channel 2024-07-27 03:05:49 +02:00
nouveau_connector.c drm/nouveau: vendor in drm_encoder_slave API 2025-01-07 15:05:11 +01:00
nouveau_connector.h
nouveau_crtc.h
nouveau_debugfs.c drm/nouveau: create module debugfs root 2024-12-04 21:43:46 +01:00
nouveau_debugfs.h drm/nouveau: create module debugfs root 2024-12-04 21:43:46 +01:00
nouveau_display.c drm/nouveau/disp: Move tiling functions to dispnv50/tile.h 2024-11-04 12:38:06 +01:00
nouveau_display.h drm/nouveau: replace drm_device* with nouveau_drm* as dev drvdata 2024-07-27 03:05:19 +02:00
nouveau_dma.c drm/nouveau: remove chan->drm 2024-07-27 03:05:47 +02:00
nouveau_dma.h
nouveau_dmem.c nouveau/dmem: Fix vulnerability in migrate_to_ram upon copy error 2024-10-08 14:23:38 +02: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 Merge drm/drm-next into drm-misc-next 2025-02-06 13:47:32 +01:00
nouveau_drv.h drm: remove driver date from struct drm_driver and all drivers 2024-12-05 12:35:42 +02:00
nouveau_encoder.h drm/nouveau: vendor in drm_encoder_slave API 2025-01-07 15:05:11 +01:00
nouveau_exec.c drm/nouveau: Constify struct nouveau_job_ops 2024-06-17 17:22:06 +02:00
nouveau_exec.h
nouveau_fence.c nouveau/fence: handle cross device fences properly 2025-01-13 15:49:49 +01:00
nouveau_fence.h Revert "nouveau: rip out busy fence waits" 2024-08-02 14:38:28 +10:00
nouveau_gem.c drm-misc-next for v6.12: 2024-08-08 18:58:46 +02:00
nouveau_gem.h
nouveau_hwmon.c drm/nouveau: move nvxx_* definitions to nouveau_drv.h 2024-07-27 03:05:38 +02:00
nouveau_hwmon.h
nouveau_ioc32.c
nouveau_ioctl.h
nouveau_led.c drm/nouveau: move nvxx_* definitions to nouveau_drv.h 2024-07-27 03:05:38 +02:00
nouveau_led.h
nouveau_mem.c drm/nouveau: remove master 2024-07-27 03:05:48 +02: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 drm/nouveau/nvif: remove driver keep/fini 2024-07-27 03:05:31 +02:00
nouveau_platform.c Get rid of 'remove_new' relic from platform driver struct 2024-12-01 15:12:43 -08:00
nouveau_platform.h
nouveau_prime.c drm/nouveau: prime: fix refcount underflow 2024-07-22 22:53:38 +02:00
nouveau_reg.h
nouveau_sched.c drm/sched: Use struct for drm_sched_init() params 2025-02-12 11:59:52 +01:00
nouveau_sched.h drm/nouveau: Constify struct nouveau_job_ops 2024-06-17 17:22:06 +02:00
nouveau_sgdma.c drm/nouveau: pass drm to nouveau_mem_new(), instead of cli 2024-07-27 03:05:41 +02:00
nouveau_svm.c drm/nouveau: Avoid multiple -Wflex-array-member-not-at-end warnings 2025-02-27 19:16:43 +01:00
nouveau_svm.h
nouveau_ttm.c drm/nouveau: pass drm to nouveau_mem_new(), instead of cli 2024-07-27 03:05:41 +02:00
nouveau_ttm.h
nouveau_uvmm.c nouveau: set placement to original placement on uvmm validate. 2024-08-01 01:22:12 +02:00
nouveau_uvmm.h
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
nouveau_vmm.h
nv04_fence.c drm/nouveau: remove push pointer from nouveau_channel 2024-07-27 03:05:49 +02:00
nv10_fence.c drm/nouveau: remove push pointer from nouveau_channel 2024-07-27 03:05:49 +02:00
nv10_fence.h
nv17_fence.c drm/nouveau: remove push pointer from nouveau_channel 2024-07-27 03:05:49 +02:00
nv50_display.h
nv50_fence.c drm/nouveau: remove chan->drm 2024-07-27 03:05:47 +02:00
nv84_fence.c drm/nouveau: remove push pointer from nouveau_channel 2024-07-27 03:05:49 +02:00
nvc0_fence.c drm/nouveau: remove push pointer from nouveau_channel 2024-07-27 03:05:49 +02:00