Re: [PATCH v3] drm/amdgpu: Modify the argument of emit_ib interface
On Wed, Oct 24, 2018 at 10:58 AM Rex Zhu wrote: > > use the point of struct amdgpu_job as the function > argument instand of vmid, so the other members of > struct amdgpu_job can be visit in emit_ib function. > > v2: add a wrapper for getting the VMID > add the job before the ib on the parameter list. > v3: refine the wrapper name > > Signed-off-by: Rex Zhu Reviewed-by: Alex Deucher > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c | 3 +-- > drivers/gpu/drm/amd/amdgpu/amdgpu_job.h | 2 ++ > drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h | 5 +++-- > drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 6 -- > drivers/gpu/drm/amd/amdgpu/amdgpu_vce.h | 4 ++-- > drivers/gpu/drm/amd/amdgpu/cik_sdma.c| 4 +++- > drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c| 4 +++- > drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c| 10 +++--- > drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c| 10 +++--- > drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c| 26 +++--- > drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | 5 - > drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | 5 - > drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c | 7 +-- > drivers/gpu/drm/amd/amdgpu/si_dma.c | 4 +++- > drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c| 3 ++- > drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c| 3 ++- > drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c| 11 +-- > drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c| 10 -- > drivers/gpu/drm/amd/amdgpu/vce_v3_0.c| 6 +- > drivers/gpu/drm/amd/amdgpu/vce_v4_0.c| 6 -- > drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c| 18 +- > 21 files changed, 106 insertions(+), 46 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c > index b8963b7..ba277cd 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c > @@ -221,8 +221,7 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned > num_ibs, > !amdgpu_sriov_vf(adev)) /* for SRIOV preemption, > Preamble CE ib must be inserted anyway */ > continue; > > - amdgpu_ring_emit_ib(ring, ib, job ? job->vmid : 0, > - need_ctx_switch); > + amdgpu_ring_emit_ib(ring, job, ib, need_ctx_switch); > need_ctx_switch = false; > } > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h > b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h > index 57cfe78..e1b46a6 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h > @@ -33,6 +33,8 @@ > #define to_amdgpu_job(sched_job) \ > container_of((sched_job), struct amdgpu_job, base) > > +#define AMDGPU_JOB_GET_VMID(job) ((job) ? (job)->vmid : 0) > + > struct amdgpu_fence; > > struct amdgpu_job { > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h > b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h > index 4caa301..ef7252a 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h > @@ -129,8 +129,9 @@ struct amdgpu_ring_funcs { > unsigned emit_ib_size; > /* command emit functions */ > void (*emit_ib)(struct amdgpu_ring *ring, > + struct amdgpu_job *job, > struct amdgpu_ib *ib, > - unsigned vmid, bool ctx_switch); > + bool ctx_switch); > void (*emit_fence)(struct amdgpu_ring *ring, uint64_t addr, >uint64_t seq, unsigned flags); > void (*emit_pipeline_sync)(struct amdgpu_ring *ring); > @@ -229,7 +230,7 @@ struct amdgpu_ring { > #define amdgpu_ring_get_rptr(r) (r)->funcs->get_rptr((r)) > #define amdgpu_ring_get_wptr(r) (r)->funcs->get_wptr((r)) > #define amdgpu_ring_set_wptr(r) (r)->funcs->set_wptr((r)) > -#define amdgpu_ring_emit_ib(r, ib, vmid, c) (r)->funcs->emit_ib((r), (ib), > (vmid), (c)) > +#define amdgpu_ring_emit_ib(r, job, ib, c) ((r)->funcs->emit_ib((r), (job), > (ib), (c))) > #define amdgpu_ring_emit_pipeline_sync(r) (r)->funcs->emit_pipeline_sync((r)) > #define amdgpu_ring_emit_vm_flush(r, vmid, addr) > (r)->funcs->emit_vm_flush((r), (vmid), (addr)) > #define amdgpu_ring_emit_fence(r, addr, seq, flags) > (r)->funcs->emit_fence((r), (addr), (seq), (flags)) > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c > index 5f3f540..56675ec 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c > @@ -1032,8 +1032,10 @@ int amdgpu_vce_ring_parse_cs_vm(struct > amdgpu_cs_parser *p, uint32_t ib_idx) > * @ib: the IB to execute > * > */ > -void amdgpu_vce_ring_emit_ib(struct amdgpu_ring *ring, struct amdgpu_ib *ib, > -unsigned vmid, bool ctx_switch) > +void amdgpu_vce_ring_emit_ib(struct amdgpu_ring *ring, > + struct
[PATCH v3] drm/amdgpu: Modify the argument of emit_ib interface
use the point of struct amdgpu_job as the function argument instand of vmid, so the other members of struct amdgpu_job can be visit in emit_ib function. v2: add a wrapper for getting the VMID add the job before the ib on the parameter list. v3: refine the wrapper name Signed-off-by: Rex Zhu --- drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c | 3 +-- drivers/gpu/drm/amd/amdgpu/amdgpu_job.h | 2 ++ drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h | 5 +++-- drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 6 -- drivers/gpu/drm/amd/amdgpu/amdgpu_vce.h | 4 ++-- drivers/gpu/drm/amd/amdgpu/cik_sdma.c| 4 +++- drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c| 4 +++- drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c| 10 +++--- drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c| 10 +++--- drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c| 26 +++--- drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | 5 - drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | 5 - drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c | 7 +-- drivers/gpu/drm/amd/amdgpu/si_dma.c | 4 +++- drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c| 3 ++- drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c| 3 ++- drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c| 11 +-- drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c| 10 -- drivers/gpu/drm/amd/amdgpu/vce_v3_0.c| 6 +- drivers/gpu/drm/amd/amdgpu/vce_v4_0.c| 6 -- drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c| 18 +- 21 files changed, 106 insertions(+), 46 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c index b8963b7..ba277cd 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c @@ -221,8 +221,7 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned num_ibs, !amdgpu_sriov_vf(adev)) /* for SRIOV preemption, Preamble CE ib must be inserted anyway */ continue; - amdgpu_ring_emit_ib(ring, ib, job ? job->vmid : 0, - need_ctx_switch); + amdgpu_ring_emit_ib(ring, job, ib, need_ctx_switch); need_ctx_switch = false; } diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h index 57cfe78..e1b46a6 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h @@ -33,6 +33,8 @@ #define to_amdgpu_job(sched_job) \ container_of((sched_job), struct amdgpu_job, base) +#define AMDGPU_JOB_GET_VMID(job) ((job) ? (job)->vmid : 0) + struct amdgpu_fence; struct amdgpu_job { diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h index 4caa301..ef7252a 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h @@ -129,8 +129,9 @@ struct amdgpu_ring_funcs { unsigned emit_ib_size; /* command emit functions */ void (*emit_ib)(struct amdgpu_ring *ring, + struct amdgpu_job *job, struct amdgpu_ib *ib, - unsigned vmid, bool ctx_switch); + bool ctx_switch); void (*emit_fence)(struct amdgpu_ring *ring, uint64_t addr, uint64_t seq, unsigned flags); void (*emit_pipeline_sync)(struct amdgpu_ring *ring); @@ -229,7 +230,7 @@ struct amdgpu_ring { #define amdgpu_ring_get_rptr(r) (r)->funcs->get_rptr((r)) #define amdgpu_ring_get_wptr(r) (r)->funcs->get_wptr((r)) #define amdgpu_ring_set_wptr(r) (r)->funcs->set_wptr((r)) -#define amdgpu_ring_emit_ib(r, ib, vmid, c) (r)->funcs->emit_ib((r), (ib), (vmid), (c)) +#define amdgpu_ring_emit_ib(r, job, ib, c) ((r)->funcs->emit_ib((r), (job), (ib), (c))) #define amdgpu_ring_emit_pipeline_sync(r) (r)->funcs->emit_pipeline_sync((r)) #define amdgpu_ring_emit_vm_flush(r, vmid, addr) (r)->funcs->emit_vm_flush((r), (vmid), (addr)) #define amdgpu_ring_emit_fence(r, addr, seq, flags) (r)->funcs->emit_fence((r), (addr), (seq), (flags)) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c index 5f3f540..56675ec 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c @@ -1032,8 +1032,10 @@ int amdgpu_vce_ring_parse_cs_vm(struct amdgpu_cs_parser *p, uint32_t ib_idx) * @ib: the IB to execute * */ -void amdgpu_vce_ring_emit_ib(struct amdgpu_ring *ring, struct amdgpu_ib *ib, -unsigned vmid, bool ctx_switch) +void amdgpu_vce_ring_emit_ib(struct amdgpu_ring *ring, + struct amdgpu_job *job, + struct amdgpu_ib *ib, + bool ctx_switch) { amdgpu_ring_write(ring, VCE_CMD_IB); amdgpu_ring_write(ring, lower_32_bits(ib->gpu_addr)); diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.h