On 05/05, Christian König wrote:
> On 5/4/25 23:47, Rodrigo Siqueira wrote:
> > In the GFX code, there are multiple parsers of the CSB buffer, which can
> > be avoided. This data is parsed via get_csb_buffer() in earlier stages,
> > and the result can be checked in "adev->gfx.rlc.cs_ptr". To avoid
> > re-parser the CSB buffer, this commit introduces a helper that copies
> > the CSB buffer into the ring buffer.
> > 
> > Signed-off-by: Rodrigo Siqueira <sique...@igalia.com>
> > ---
> >  drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c | 21 +++++++++++++++++++++
> >  drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.h |  4 ++++
> >  2 files changed, 25 insertions(+)
> > 
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c 
> > b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
> > index 8f1a2f7b03c1..dfd48670a0bf 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
> > @@ -2323,6 +2323,27 @@ void amdgpu_gfx_csb_preamble_end(volatile u32 
> > *buffer, u32 count)
> >     buffer[count++] = cpu_to_le32(0);
> >  }
> >  
> > +/**
> > + * amdgpu_gfx_write_csb_to_ring - Write the CSB buffer into the ring
> > + *
> > + * @ring: Ring reference.
> > + * @csb_buffer: CSB buffer.
> > + * @csb_size: CSB buffer size.
> > + *
> > + * Usually, the adev->gfx.rlc.cs_ptr field is filled in earlier stages via
> > + * get_csb_buffer(). This function just gets the CSB buffer and fills it 
> > in the
> > + * ring buffer.
> > + */
> > +void amdgpu_gfx_write_csb_to_ring(struct amdgpu_ring *ring,
> 
> We already have the amdgpu_ring_write_multiple() function for exactly that.

I'll prepare a V2 that uses amdgpu_ring_write_multiple().

> 
> > +                             volatile u32 *csb_buffer,
> 
> Please drop volatile from all pointers inside the kernel and point me out if 
> you still find some in existing code.
> 
> They are nearly always used incorrectly, see here 
> https://docs.kernel.org/process/volatile-considered-harmful.html

Thanks for the link. I'll make a separate patchset for that.

Thanks
Siqueira

> 
> Thanks,
> Christian.
> 
> 
> > +                             u32 csb_size)
> 
> 
> 
> 
> > +{
> > +   int i;
> > +
> > +   for (i = 0; i < csb_size; i++)
> > +           amdgpu_ring_write(ring, csb_buffer[i]);
> > +}
> > +
> >  /*
> >   * debugfs for to enable/disable gfx job submission to specific core.
> >   */
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.h 
> > b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.h
> > index 08f268dab8f5..ce684c3d3d89 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.h
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.h
> > @@ -646,6 +646,10 @@ u32 amdgpu_gfx_csb_preamble_start(volatile u32 
> > *buffer);
> >  u32 amdgpu_gfx_csb_data_parser(struct amdgpu_device *adev, volatile u32 
> > *buffer, u32 count);
> >  void amdgpu_gfx_csb_preamble_end(volatile u32 *buffer, u32 count);
> >  
> > +void amdgpu_gfx_write_csb_to_ring(struct amdgpu_ring *ring,
> > +                             volatile u32 *csb_buffer,
> > +                             u32 csb_size);
> > +
> >  void amdgpu_debugfs_gfx_sched_mask_init(struct amdgpu_device *adev);
> >  void amdgpu_debugfs_compute_sched_mask_init(struct amdgpu_device *adev);
> >  
> 

-- 
Rodrigo Siqueira

Reply via email to