Re: [PATCH v3] drm/amdgpu: Modify the argument of emit_ib interface

2018-10-25 Thread Alex Deucher
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

2018-10-24 Thread Rex Zhu
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