From: kernel test robot <lkp@intel.com>
To: "Thomas Hellström" <thomas.hellstrom@linux.intel.com>,
intel-xe@lists.freedesktop.org
Cc: oe-kbuild-all@lists.linux.dev,
"Thomas Hellström" <thomas.hellstrom@linux.intel.com>,
"Felix Kuehling" <Felix.Kuehling@amd.com>,
"Alex Deucher" <alexander.deucher@amd.com>,
"Christian König" <christian.koenig@amd.com>,
"David Airlie" <airlied@gmail.com>,
"Simona Vetter" <simona@ffwll.ch>,
"Maarten Lankhorst" <maarten.lankhorst@linux.intel.com>,
"Maxime Ripard" <mripard@kernel.org>,
"Thomas Zimmermann" <tzimmermann@suse.de>,
"Danilo Krummrich" <dakr@kernel.org>,
"Matthew Brost" <matthew.brost@intel.com>,
"Alice Ryhl" <aliceryhl@google.com>,
"Rob Clark" <robin.clark@oss.qualcomm.com>,
"Dmitry Baryshkov" <lumag@kernel.org>,
"Abhinav Kumar" <abhinav.kumar@linux.dev>,
"Jessica Zhang" <jesszhan0024@gmail.com>,
"Sean Paul" <sean@poorly.run>,
"Marijn Suijten" <marijn.suijten@somainline.org>,
amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org,
linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org
Subject: Re: [PATCH 5/5] drm/exec, drm/xe, drm/amdgpu: Add an accessor for struct drm_exec::ticket
Date: Tue, 31 Mar 2026 23:46:28 +0200 [thread overview]
Message-ID: <202603312339.70s7djVd-lkp@intel.com> (raw)
In-Reply-To: <20260331092023.81616-6-thomas.hellstrom@linux.intel.com>
Hi Thomas,
kernel test robot noticed the following build errors:
[auto build test ERROR on drm-misc/drm-misc-next]
[also build test ERROR on next-20260331]
[cannot apply to drm-xe/drm-xe-next linus/master v6.16-rc1]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Thomas-Hellstr-m/drm-exec-Remove-the-index-parameter-from-drm_exec_for_each_locked_obj-_reverse/20260331-220349
base: https://gitlab.freedesktop.org/drm/misc/kernel.git drm-misc-next
patch link: https://lore.kernel.org/r/20260331092023.81616-6-thomas.hellstrom%40linux.intel.com
patch subject: [PATCH 5/5] drm/exec, drm/xe, drm/amdgpu: Add an accessor for struct drm_exec::ticket
config: x86_64-rhel-9.4 (https://download.01.org/0day-ci/archive/20260331/202603312339.70s7djVd-lkp@intel.com/config)
compiler: gcc-14 (Debian 14.2.0-19) 14.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260331/202603312339.70s7djVd-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202603312339.70s7djVd-lkp@intel.com/
All errors (new ones prefixed by >>):
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c: In function 'amdgpu_amdkfd_gpuvm_restore_process_bos':
>> drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c:3001:66: error: incompatible type for argument 1 of 'drm_exec_ticket'
3001 | ret = process_validate_vms(process_info, drm_exec_ticket(exec));
| ^~~~
| |
| struct drm_exec
In file included from drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c:30:
include/drm/drm_exec.h:154:71: note: expected 'struct drm_exec *' but argument is of type 'struct drm_exec'
154 | static inline struct ww_acquire_ctx *drm_exec_ticket(struct drm_exec *exec)
| ~~~~~~~~~~~~~~~~~^~~~
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c:3042:77: error: incompatible type for argument 1 of 'drm_exec_ticket'
3042 | ret = amdgpu_vm_handle_moved(adev, peer_vm, drm_exec_ticket(exec));
| ^~~~
| |
| struct drm_exec
include/drm/drm_exec.h:154:71: note: expected 'struct drm_exec *' but argument is of type 'struct drm_exec'
154 | static inline struct ww_acquire_ctx *drm_exec_ticket(struct drm_exec *exec)
| ~~~~~~~~~~~~~~~~~^~~~
vim +/drm_exec_ticket +3001 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
2897
2898 /** amdgpu_amdkfd_gpuvm_restore_process_bos - Restore all BOs for the given
2899 * KFD process identified by process_info
2900 *
2901 * @process_info: amdkfd_process_info of the KFD process
2902 *
2903 * After memory eviction, restore thread calls this function. The function
2904 * should be called when the Process is still valid. BO restore involves -
2905 *
2906 * 1. Release old eviction fence and create new one
2907 * 2. Get two copies of PD BO list from all the VMs. Keep one copy as pd_list.
2908 * 3 Use the second PD list and kfd_bo_list to create a list (ctx.list) of
2909 * BOs that need to be reserved.
2910 * 4. Reserve all the BOs
2911 * 5. Validate of PD and PT BOs.
2912 * 6. Validate all KFD BOs using kfd_bo_list and Map them and add new fence
2913 * 7. Add fence to all PD and PT BOs.
2914 * 8. Unreserve all BOs
2915 */
2916 int amdgpu_amdkfd_gpuvm_restore_process_bos(void *info, struct dma_fence __rcu **ef)
2917 {
2918 struct amdkfd_process_info *process_info = info;
2919 struct amdgpu_vm *peer_vm;
2920 struct kgd_mem *mem;
2921 struct list_head duplicate_save;
2922 struct amdgpu_sync sync_obj;
2923 unsigned long failed_size = 0;
2924 unsigned long total_size = 0;
2925 struct drm_exec exec;
2926 int ret;
2927
2928 INIT_LIST_HEAD(&duplicate_save);
2929
2930 mutex_lock(&process_info->lock);
2931
2932 drm_exec_init(&exec, DRM_EXEC_IGNORE_DUPLICATES, 0);
2933 drm_exec_until_all_locked(&exec) {
2934 list_for_each_entry(peer_vm, &process_info->vm_list_head,
2935 vm_list_node) {
2936 ret = amdgpu_vm_lock_pd(peer_vm, &exec, 2);
2937 drm_exec_retry_on_contention(&exec);
2938 if (unlikely(ret)) {
2939 pr_err("Locking VM PD failed, ret: %d\n", ret);
2940 goto ttm_reserve_fail;
2941 }
2942 }
2943
2944 /* Reserve all BOs and page tables/directory. Add all BOs from
2945 * kfd_bo_list to ctx.list
2946 */
2947 list_for_each_entry(mem, &process_info->kfd_bo_list,
2948 validate_list) {
2949 struct drm_gem_object *gobj;
2950
2951 gobj = &mem->bo->tbo.base;
2952 ret = drm_exec_prepare_obj(&exec, gobj, 1);
2953 drm_exec_retry_on_contention(&exec);
2954 if (unlikely(ret)) {
2955 pr_err("drm_exec_prepare_obj failed, ret: %d\n", ret);
2956 goto ttm_reserve_fail;
2957 }
2958 }
2959 }
2960
2961 amdgpu_sync_create(&sync_obj);
2962
2963 /* Validate BOs managed by KFD */
2964 list_for_each_entry(mem, &process_info->kfd_bo_list,
2965 validate_list) {
2966
2967 struct amdgpu_bo *bo = mem->bo;
2968 uint32_t domain = mem->domain;
2969 struct dma_resv_iter cursor;
2970 struct dma_fence *fence;
2971
2972 total_size += amdgpu_bo_size(bo);
2973
2974 ret = amdgpu_amdkfd_bo_validate(bo, domain, false);
2975 if (ret) {
2976 pr_debug("Memory eviction: Validate BOs failed\n");
2977 failed_size += amdgpu_bo_size(bo);
2978 ret = amdgpu_amdkfd_bo_validate(bo,
2979 AMDGPU_GEM_DOMAIN_GTT, false);
2980 if (ret) {
2981 pr_debug("Memory eviction: Try again\n");
2982 goto validate_map_fail;
2983 }
2984 }
2985 dma_resv_for_each_fence(&cursor, bo->tbo.base.resv,
2986 DMA_RESV_USAGE_KERNEL, fence) {
2987 ret = amdgpu_sync_fence(&sync_obj, fence, GFP_KERNEL);
2988 if (ret) {
2989 pr_debug("Memory eviction: Sync BO fence failed. Try again\n");
2990 goto validate_map_fail;
2991 }
2992 }
2993 }
2994
2995 if (failed_size)
2996 pr_debug("0x%lx/0x%lx in system\n", failed_size, total_size);
2997
2998 /* Validate PDs, PTs and evicted DMABuf imports last. Otherwise BO
2999 * validations above would invalidate DMABuf imports again.
3000 */
> 3001 ret = process_validate_vms(process_info, drm_exec_ticket(exec));
3002 if (ret) {
3003 pr_debug("Validating VMs failed, ret: %d\n", ret);
3004 goto validate_map_fail;
3005 }
3006
3007 /* Update mappings managed by KFD. */
3008 list_for_each_entry(mem, &process_info->kfd_bo_list,
3009 validate_list) {
3010 struct kfd_mem_attachment *attachment;
3011
3012 list_for_each_entry(attachment, &mem->attachments, list) {
3013 if (!attachment->is_mapped)
3014 continue;
3015
3016 kfd_mem_dmaunmap_attachment(mem, attachment);
3017 ret = update_gpuvm_pte(mem, attachment, &sync_obj);
3018 if (ret) {
3019 pr_debug("Memory eviction: update PTE failed. Try again\n");
3020 goto validate_map_fail;
3021 }
3022 }
3023 }
3024
3025 /* Update mappings not managed by KFD */
3026 list_for_each_entry(peer_vm, &process_info->vm_list_head,
3027 vm_list_node) {
3028 struct amdgpu_device *adev = amdgpu_ttm_adev(
3029 peer_vm->root.bo->tbo.bdev);
3030
3031 struct amdgpu_fpriv *fpriv =
3032 container_of(peer_vm, struct amdgpu_fpriv, vm);
3033
3034 ret = amdgpu_vm_bo_update(adev, fpriv->prt_va, false);
3035 if (ret) {
3036 dev_dbg(adev->dev,
3037 "Memory eviction: handle PRT moved failed, pid %8d. Try again.\n",
3038 pid_nr(process_info->pid));
3039 goto validate_map_fail;
3040 }
3041
3042 ret = amdgpu_vm_handle_moved(adev, peer_vm, drm_exec_ticket(exec));
3043 if (ret) {
3044 dev_dbg(adev->dev,
3045 "Memory eviction: handle moved failed, pid %8d. Try again.\n",
3046 pid_nr(process_info->pid));
3047 goto validate_map_fail;
3048 }
3049 }
3050
3051 /* Update page directories */
3052 ret = process_update_pds(process_info, &sync_obj);
3053 if (ret) {
3054 pr_debug("Memory eviction: update PDs failed. Try again\n");
3055 goto validate_map_fail;
3056 }
3057
3058 /* Sync with fences on all the page tables. They implicitly depend on any
3059 * move fences from amdgpu_vm_handle_moved above.
3060 */
3061 ret = process_sync_pds_resv(process_info, &sync_obj);
3062 if (ret) {
3063 pr_debug("Memory eviction: Failed to sync to PD BO moving fence. Try again\n");
3064 goto validate_map_fail;
3065 }
3066
3067 /* Wait for validate and PT updates to finish */
3068 amdgpu_sync_wait(&sync_obj, false);
3069
3070 /* The old eviction fence may be unsignaled if restore happens
3071 * after a GPU reset or suspend/resume. Keep the old fence in that
3072 * case. Otherwise release the old eviction fence and create new
3073 * one, because fence only goes from unsignaled to signaled once
3074 * and cannot be reused. Use context and mm from the old fence.
3075 *
3076 * If an old eviction fence signals after this check, that's OK.
3077 * Anyone signaling an eviction fence must stop the queues first
3078 * and schedule another restore worker.
3079 */
3080 if (dma_fence_is_signaled(&process_info->eviction_fence->base)) {
3081 struct amdgpu_amdkfd_fence *new_fence =
3082 amdgpu_amdkfd_fence_create(
3083 process_info->eviction_fence->base.context,
3084 process_info->eviction_fence->mm,
3085 NULL, process_info->context_id);
3086
3087 if (!new_fence) {
3088 pr_err("Failed to create eviction fence\n");
3089 ret = -ENOMEM;
3090 goto validate_map_fail;
3091 }
3092 dma_fence_put(&process_info->eviction_fence->base);
3093 process_info->eviction_fence = new_fence;
3094 replace_eviction_fence(ef, dma_fence_get(&new_fence->base));
3095 } else {
3096 WARN_ONCE(*ef != &process_info->eviction_fence->base,
3097 "KFD eviction fence doesn't match KGD process_info");
3098 }
3099
3100 /* Attach new eviction fence to all BOs except pinned ones */
3101 list_for_each_entry(mem, &process_info->kfd_bo_list, validate_list) {
3102 if (mem->bo->tbo.pin_count)
3103 continue;
3104
3105 dma_resv_add_fence(mem->bo->tbo.base.resv,
3106 &process_info->eviction_fence->base,
3107 DMA_RESV_USAGE_BOOKKEEP);
3108 }
3109 /* Attach eviction fence to PD / PT BOs and DMABuf imports */
3110 list_for_each_entry(peer_vm, &process_info->vm_list_head,
3111 vm_list_node) {
3112 struct amdgpu_bo *bo = peer_vm->root.bo;
3113
3114 dma_resv_add_fence(bo->tbo.base.resv,
3115 &process_info->eviction_fence->base,
3116 DMA_RESV_USAGE_BOOKKEEP);
3117 }
3118
3119 validate_map_fail:
3120 amdgpu_sync_free(&sync_obj);
3121 ttm_reserve_fail:
3122 drm_exec_fini(&exec);
3123 mutex_unlock(&process_info->lock);
3124 return ret;
3125 }
3126
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
next prev parent reply other threads:[~2026-03-31 21:47 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-31 9:20 [PATCH 0/5] drm/exec: drm_exec polishing Thomas Hellström
2026-03-31 9:20 ` [PATCH 1/5] drm/exec: Remove the index parameter from drm_exec_for_each_locked_obj[_reverse] Thomas Hellström
2026-03-31 9:29 ` Christian König
2026-03-31 9:20 ` [PATCH 2/5] drm/msm: Remove abuse of drm_exec internals Thomas Hellström
2026-03-31 9:30 ` Christian König
2026-03-31 9:36 ` Christian König
2026-03-31 19:08 ` Rob Clark
2026-03-31 19:52 ` Thomas Hellström
2026-03-31 20:39 ` Rob Clark
2026-03-31 9:20 ` [PATCH 3/5] drm/exec: Make the drm_exec_until_all_locked() macro more readable Thomas Hellström
2026-03-31 9:39 ` Christian König
2026-03-31 11:03 ` Thomas Hellström
2026-03-31 9:20 ` [PATCH 4/5] drm/exec, drm/xe: Avoid abusing the drm_exec retry pointer Thomas Hellström
2026-03-31 9:44 ` Christian König
2026-03-31 10:13 ` Thomas Hellström
2026-03-31 11:09 ` Thomas Hellström
2026-03-31 11:59 ` Christian König
2026-03-31 9:20 ` [PATCH 5/5] drm/exec, drm/xe, drm/amdgpu: Add an accessor for struct drm_exec::ticket Thomas Hellström
2026-03-31 9:46 ` Christian König
2026-03-31 10:18 ` Thomas Hellström
2026-03-31 21:46 ` kernel test robot [this message]
2026-03-31 22:07 ` kernel test robot
2026-04-01 0:38 ` kernel test robot
2026-03-31 9:49 ` ✗ CI.checkpatch: warning for drm/exec: drm_exec polishing Patchwork
2026-03-31 9:51 ` ✓ CI.KUnit: success " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202603312339.70s7djVd-lkp@intel.com \
--to=lkp@intel.com \
--cc=Felix.Kuehling@amd.com \
--cc=abhinav.kumar@linux.dev \
--cc=airlied@gmail.com \
--cc=alexander.deucher@amd.com \
--cc=aliceryhl@google.com \
--cc=amd-gfx@lists.freedesktop.org \
--cc=christian.koenig@amd.com \
--cc=dakr@kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=freedreno@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
--cc=jesszhan0024@gmail.com \
--cc=linux-arm-msm@vger.kernel.org \
--cc=lumag@kernel.org \
--cc=maarten.lankhorst@linux.intel.com \
--cc=marijn.suijten@somainline.org \
--cc=matthew.brost@intel.com \
--cc=mripard@kernel.org \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=robin.clark@oss.qualcomm.com \
--cc=sean@poorly.run \
--cc=simona@ffwll.ch \
--cc=thomas.hellstrom@linux.intel.com \
--cc=tzimmermann@suse.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.