[PATCH 5/6] drm/amdgpu: add timeline support in amdgpu CS

Zhou, David(ChunMing) David1.Zhou at amd.com
Mon Oct 8 03:38:18 UTC 2018



> -----Original Message-----
> From: Nicolai Hähnle <nhaehnle at gmail.com>
> Sent: Wednesday, September 26, 2018 5:06 PM
> To: Zhou, David(ChunMing) <David1.Zhou at amd.com>; dri-
> devel at lists.freedesktop.org
> Cc: amd-gfx at lists.freedesktop.org
> Subject: Re: [PATCH 5/6] drm/amdgpu: add timeline support in amdgpu CS
> 
> Hey Chunming,
> 
> On 20.09.2018 13:03, Chunming Zhou wrote:
> > @@ -1113,48 +1117,91 @@ static int
> amdgpu_syncobj_lookup_and_add_to_sync(struct amdgpu_cs_parser *p,
> >   }
> >
> >   static int amdgpu_cs_process_syncobj_in_dep(struct amdgpu_cs_parser
> *p,
> > -					    struct amdgpu_cs_chunk *chunk)
> > +					    struct amdgpu_cs_chunk *chunk,
> > +					    bool timeline)
> >   {
> >   	unsigned num_deps;
> >   	int i, r;
> > -	struct drm_amdgpu_cs_chunk_sem *deps;
> >
> > -	deps = (struct drm_amdgpu_cs_chunk_sem *)chunk->kdata;
> > -	num_deps = chunk->length_dw * 4 /
> > -		sizeof(struct drm_amdgpu_cs_chunk_sem);
> > +	if (!timeline) {
> > +		struct drm_amdgpu_cs_chunk_sem *deps;
> >
> > -	for (i = 0; i < num_deps; ++i) {
> > -		r = amdgpu_syncobj_lookup_and_add_to_sync(p,
> deps[i].handle);
> > +		deps = (struct drm_amdgpu_cs_chunk_sem *)chunk->kdata;
> > +		num_deps = chunk->length_dw * 4 /
> > +			sizeof(struct drm_amdgpu_cs_chunk_sem);
> > +		for (i = 0; i < num_deps; ++i) {
> > +			r = amdgpu_syncobj_lookup_and_add_to_sync(p,
> deps[i].handle,
> > +								  0, 0);
> >   		if (r)
> >   			return r;
> 
> The indentation looks wrong.
> 
> 
> > +		}
> > +	} else {
> > +		struct drm_amdgpu_cs_chunk_syncobj *syncobj_deps;
> > +
> > +		syncobj_deps = (struct drm_amdgpu_cs_chunk_syncobj
> *)chunk->kdata;
> > +		num_deps = chunk->length_dw * 4 /
> > +			sizeof(struct drm_amdgpu_cs_chunk_syncobj);
> > +		for (i = 0; i < num_deps; ++i) {
> > +			r = amdgpu_syncobj_lookup_and_add_to_sync(p,
> syncobj_deps[i].handle,
> > +
> syncobj_deps[i].point,
> > +
> syncobj_deps[i].flags);
> > +		if (r)
> > +			return r;
> 
> Here as well.
> 
> So I'm wondering a bit about this uapi. Specifically, what happens if you try to
> use timeline syncobjs here as dependencies _without_
> DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT?
> 
> My understanding is, it'll just return -EINVAL without any indication as to
> which syncobj actually failed. What's the caller supposed to do then?

How about adding a print to indicate which syncobj failed?

Thanks,
David Zhou
> 
> Cheers,
> Nicolai
> --
> Lerne, wie die Welt wirklich ist,
> Aber vergiss niemals, wie sie sein sollte.


More information about the amd-gfx mailing list