FAILED: patch "[PATCH] drm/amdgpu: fix Null pointer dereference error in" failed to apply to 5.15-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 5.15-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-5.15.y
git checkout FETCH_HEAD
git cherry-pick -x 2a1eb1a343208ce7d6839b73d62aece343e693ff
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2023061259-commodity-reflected-be84@gregkh' --subject-prefix 'PATCH 5.15.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 2a1eb1a343208ce7d6839b73d62aece343e693ff Mon Sep 17 00:00:00 2001
From: Horatio Zhang <[email protected]>
Date: Mon, 29 May 2023 14:23:37 -0400
Subject: [PATCH] drm/amdgpu: fix Null pointer dereference error in
amdgpu_device_recover_vram
Use the function of amdgpu_bo_vm_destroy to handle the resource release of shadow bo. During the amdgpu_mes_self_test, shadow bo released, but vmbo->shadow_list was not, which caused a null pointer reference error in amdgpu_device_recover_vram when GPU reset.
drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +4 -6
@@ -79,9 +79,10 @@ static void amdgpu_bo_user_destroy(struct ttm_buffer_object *tbo)static void amdgpu_bo_vm_destroy (struct ttm_buffer_object *tbo) {struct amdgpu_device *adev =amdgpu_ttm_adev (tbo->bdev); -struct amdgpu_bo *bo =ttm_to_amdgpu_bo (tbo); +struct amdgpu_bo *shadow_bo =ttm_to_amdgpu_bo (tbo), *bo;struct amdgpu_bo_vm *vmbo; + bo = shadow_bo->parent; vmbo =to_amdgpu_bo_vm (bo);/* in case amdgpu_device_recover_vram got NULL of bo->parent */ if (!list_empty (&vmbo->shadow_list)) {
@@ -694,11 +695,6 @@ int amdgpu_bo_create_vm(struct amdgpu_device *adev,return r; *vmbo_ptr =to_amdgpu_bo_vm (bo_ptr); -INIT_LIST_HEAD (&(*vmbo_ptr)->shadow_list); -/* Set destroy callback to amdgpu_bo_vm_destroy after vmbo->shadow_list -* is initialized. -*/ - bo_ptr->tbo.destroy = &amdgpu_bo_vm_destroy;return r; }
@@ -715,6 +711,8 @@ void amdgpu_bo_add_to_shadow_list(struct amdgpu_bo_vm *vmbo)mutex_lock (&adev->shadow_list_lock);list_add_tail (&vmbo->shadow_list, &adev->shadow_list); + vmbo->shadow->parent =amdgpu_bo_ref (&vmbo->bo); + vmbo->shadow->tbo.destroy = &amdgpu_bo_vm_destroy;mutex_unlock (&adev->shadow_list_lock); }
drivers/gpu/drm/amd/amdgpu/amdgpu_vm_pt.c +0 -1
@@ -564,7 +564,6 @@ int amdgpu_vm_pt_create(struct amdgpu_device *adev, struct amdgpu_vm *vm,return r; } - (*vmbo)->shadow->parent =amdgpu_bo_ref (bo);amdgpu_bo_add_to_shadow_list (*vmbo);return 0 ;