On Thu, 2025-03-20 at 11:49 +0000, Tvrtko Ursulin wrote:
> 
> 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".

Almost!

they would be detected with a super-readable

#define DRM_SCHED_XARR_TAG_RESERVED_ENTRY 1

or maybe …UNUSED_ENTRY?

^_^

P.


> 
> Regards,
> 
> Tvrtko
> 

Reply via email to