[PATCH 1/2] drm/sched: add drm_sched_prealloc_dependency_slots

Tvrtko Ursulin tvrtko.ursulin at igalia.com
Thu Mar 20 11:49:31 UTC 2025


On 19/03/2025 11:23, Christian König wrote:
>>> + *
>>> + * Return:
>>> + * 0 on success, or an error on failing to expand the array.
>>> + */
>>> +int drm_sched_job_prealloc_dependency_slots(struct drm_sched_job
>>> *job,
>>> +					    unsigned int num_deps)
>>> +{
>>> +	struct dma_fence *fence;
>>> +	u32 id = 0;
>>> +	int ret;
>>> +
>>> +	while (num_deps--) {
>>> +		fence = dma_fence_get_stub();
>>> +		ret = xa_alloc(&job->dependencies, &id, fence,
>>> xa_limit_32b,
>>> +			       GFP_KERNEL);
>> So this would fill the xarr with already signaled fences which then
>> later will be replaced with unsignaled fences?
> 
> Yes, exactly that's the idea.
> 
>> Help me out here: would it also work to add NULL instead of that stub-
>> fence?
> 
> Good question, idk. That's an implementation detail of the xarray.
> 
> Tvrtko also correctly pointed out that it is most likely a bad idea to 
> use dma_fence_is_signaled() in the critical code path.
> 
> I will try to dig through the xarray behavior up and update the patch if 
> possible.

I think NULL on its own is not possible, but the two low bits are 
available for pointer tagging, or designating pointers vs integers, 
which looks like it could work. Something like storing 
xa_tag_pointer(NULL, 1) to reserved slots and at lookup time they would 
be detected with "xa_pointer_tag(fence) & 1".

Regards,

Tvrtko



More information about the amd-gfx mailing list