mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-22 13:15:11 -04:00
drm/amdgpu: update ring reset function signature
Going forward, we'll need more than just the vmid. Add the guilty amdgpu_fence. Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
@@ -155,7 +155,7 @@ static enum drm_gpu_sched_stat amdgpu_job_timedout(struct drm_sched_job *s_job)
|
||||
if (is_guilty)
|
||||
dma_fence_set_error(&s_job->s_fence->finished, -ETIME);
|
||||
|
||||
r = amdgpu_ring_reset(ring, job->vmid);
|
||||
r = amdgpu_ring_reset(ring, job->vmid, NULL);
|
||||
if (!r) {
|
||||
if (amdgpu_ring_sched_ready(ring))
|
||||
drm_sched_stop(&ring->sched, s_job);
|
||||
|
||||
@@ -268,7 +268,8 @@ struct amdgpu_ring_funcs {
|
||||
void (*patch_cntl)(struct amdgpu_ring *ring, unsigned offset);
|
||||
void (*patch_ce)(struct amdgpu_ring *ring, unsigned offset);
|
||||
void (*patch_de)(struct amdgpu_ring *ring, unsigned offset);
|
||||
int (*reset)(struct amdgpu_ring *ring, unsigned int vmid);
|
||||
int (*reset)(struct amdgpu_ring *ring, unsigned int vmid,
|
||||
struct amdgpu_fence *timedout_fence);
|
||||
void (*emit_cleaner_shader)(struct amdgpu_ring *ring);
|
||||
bool (*is_guilty)(struct amdgpu_ring *ring);
|
||||
};
|
||||
@@ -425,7 +426,7 @@ struct amdgpu_ring {
|
||||
#define amdgpu_ring_patch_cntl(r, o) ((r)->funcs->patch_cntl((r), (o)))
|
||||
#define amdgpu_ring_patch_ce(r, o) ((r)->funcs->patch_ce((r), (o)))
|
||||
#define amdgpu_ring_patch_de(r, o) ((r)->funcs->patch_de((r), (o)))
|
||||
#define amdgpu_ring_reset(r, v) (r)->funcs->reset((r), (v))
|
||||
#define amdgpu_ring_reset(r, v, f) (r)->funcs->reset((r), (v), (f))
|
||||
|
||||
unsigned int amdgpu_ring_max_ibs(enum amdgpu_ring_type type);
|
||||
int amdgpu_ring_alloc(struct amdgpu_ring *ring, unsigned ndw);
|
||||
|
||||
@@ -9522,7 +9522,9 @@ static void gfx_v10_ring_insert_nop(struct amdgpu_ring *ring, uint32_t num_nop)
|
||||
amdgpu_ring_insert_nop(ring, num_nop - 1);
|
||||
}
|
||||
|
||||
static int gfx_v10_0_reset_kgq(struct amdgpu_ring *ring, unsigned int vmid)
|
||||
static int gfx_v10_0_reset_kgq(struct amdgpu_ring *ring,
|
||||
unsigned int vmid,
|
||||
struct amdgpu_fence *timedout_fence)
|
||||
{
|
||||
struct amdgpu_device *adev = ring->adev;
|
||||
struct amdgpu_kiq *kiq = &adev->gfx.kiq[0];
|
||||
@@ -9579,7 +9581,8 @@ static int gfx_v10_0_reset_kgq(struct amdgpu_ring *ring, unsigned int vmid)
|
||||
}
|
||||
|
||||
static int gfx_v10_0_reset_kcq(struct amdgpu_ring *ring,
|
||||
unsigned int vmid)
|
||||
unsigned int vmid,
|
||||
struct amdgpu_fence *timedout_fence)
|
||||
{
|
||||
struct amdgpu_device *adev = ring->adev;
|
||||
struct amdgpu_kiq *kiq = &adev->gfx.kiq[0];
|
||||
|
||||
@@ -6811,7 +6811,9 @@ static int gfx_v11_reset_gfx_pipe(struct amdgpu_ring *ring)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int gfx_v11_0_reset_kgq(struct amdgpu_ring *ring, unsigned int vmid)
|
||||
static int gfx_v11_0_reset_kgq(struct amdgpu_ring *ring,
|
||||
unsigned int vmid,
|
||||
struct amdgpu_fence *timedout_fence)
|
||||
{
|
||||
struct amdgpu_device *adev = ring->adev;
|
||||
int r;
|
||||
@@ -6973,7 +6975,9 @@ static int gfx_v11_0_reset_compute_pipe(struct amdgpu_ring *ring)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int gfx_v11_0_reset_kcq(struct amdgpu_ring *ring, unsigned int vmid)
|
||||
static int gfx_v11_0_reset_kcq(struct amdgpu_ring *ring,
|
||||
unsigned int vmid,
|
||||
struct amdgpu_fence *timedout_fence)
|
||||
{
|
||||
struct amdgpu_device *adev = ring->adev;
|
||||
int r = 0;
|
||||
|
||||
@@ -5307,7 +5307,9 @@ static int gfx_v12_reset_gfx_pipe(struct amdgpu_ring *ring)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int gfx_v12_0_reset_kgq(struct amdgpu_ring *ring, unsigned int vmid)
|
||||
static int gfx_v12_0_reset_kgq(struct amdgpu_ring *ring,
|
||||
unsigned int vmid,
|
||||
struct amdgpu_fence *timedout_fence)
|
||||
{
|
||||
struct amdgpu_device *adev = ring->adev;
|
||||
int r;
|
||||
@@ -5421,7 +5423,9 @@ static int gfx_v12_0_reset_compute_pipe(struct amdgpu_ring *ring)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int gfx_v12_0_reset_kcq(struct amdgpu_ring *ring, unsigned int vmid)
|
||||
static int gfx_v12_0_reset_kcq(struct amdgpu_ring *ring,
|
||||
unsigned int vmid,
|
||||
struct amdgpu_fence *timedout_fence)
|
||||
{
|
||||
struct amdgpu_device *adev = ring->adev;
|
||||
int r;
|
||||
|
||||
@@ -7172,7 +7172,8 @@ static void gfx_v9_ring_insert_nop(struct amdgpu_ring *ring, uint32_t num_nop)
|
||||
}
|
||||
|
||||
static int gfx_v9_0_reset_kcq(struct amdgpu_ring *ring,
|
||||
unsigned int vmid)
|
||||
unsigned int vmid,
|
||||
struct amdgpu_fence *timedout_fence)
|
||||
{
|
||||
struct amdgpu_device *adev = ring->adev;
|
||||
struct amdgpu_kiq *kiq = &adev->gfx.kiq[0];
|
||||
|
||||
@@ -3552,7 +3552,8 @@ static int gfx_v9_4_3_reset_hw_pipe(struct amdgpu_ring *ring)
|
||||
}
|
||||
|
||||
static int gfx_v9_4_3_reset_kcq(struct amdgpu_ring *ring,
|
||||
unsigned int vmid)
|
||||
unsigned int vmid,
|
||||
struct amdgpu_fence *timedout_fence)
|
||||
{
|
||||
struct amdgpu_device *adev = ring->adev;
|
||||
struct amdgpu_kiq *kiq = &adev->gfx.kiq[ring->xcc_id];
|
||||
|
||||
@@ -764,7 +764,9 @@ static int jpeg_v2_0_process_interrupt(struct amdgpu_device *adev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int jpeg_v2_0_ring_reset(struct amdgpu_ring *ring, unsigned int vmid)
|
||||
static int jpeg_v2_0_ring_reset(struct amdgpu_ring *ring,
|
||||
unsigned int vmid,
|
||||
struct amdgpu_fence *timedout_fence)
|
||||
{
|
||||
jpeg_v2_0_stop(ring->adev);
|
||||
jpeg_v2_0_start(ring->adev);
|
||||
|
||||
@@ -643,7 +643,9 @@ static int jpeg_v2_5_process_interrupt(struct amdgpu_device *adev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int jpeg_v2_5_ring_reset(struct amdgpu_ring *ring, unsigned int vmid)
|
||||
static int jpeg_v2_5_ring_reset(struct amdgpu_ring *ring,
|
||||
unsigned int vmid,
|
||||
struct amdgpu_fence *timedout_fence)
|
||||
{
|
||||
jpeg_v2_5_stop_inst(ring->adev, ring->me);
|
||||
jpeg_v2_5_start_inst(ring->adev, ring->me);
|
||||
|
||||
@@ -555,7 +555,9 @@ static int jpeg_v3_0_process_interrupt(struct amdgpu_device *adev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int jpeg_v3_0_ring_reset(struct amdgpu_ring *ring, unsigned int vmid)
|
||||
static int jpeg_v3_0_ring_reset(struct amdgpu_ring *ring,
|
||||
unsigned int vmid,
|
||||
struct amdgpu_fence *timedout_fence)
|
||||
{
|
||||
jpeg_v3_0_stop(ring->adev);
|
||||
jpeg_v3_0_start(ring->adev);
|
||||
|
||||
@@ -720,7 +720,9 @@ static int jpeg_v4_0_process_interrupt(struct amdgpu_device *adev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int jpeg_v4_0_ring_reset(struct amdgpu_ring *ring, unsigned int vmid)
|
||||
static int jpeg_v4_0_ring_reset(struct amdgpu_ring *ring,
|
||||
unsigned int vmid,
|
||||
struct amdgpu_fence *timedout_fence)
|
||||
{
|
||||
if (amdgpu_sriov_vf(ring->adev))
|
||||
return -EINVAL;
|
||||
|
||||
@@ -1143,7 +1143,9 @@ static void jpeg_v4_0_3_core_stall_reset(struct amdgpu_ring *ring)
|
||||
WREG32_SOC15(JPEG, jpeg_inst, regJPEG_CORE_RST_CTRL, 0x00);
|
||||
}
|
||||
|
||||
static int jpeg_v4_0_3_ring_reset(struct amdgpu_ring *ring, unsigned int vmid)
|
||||
static int jpeg_v4_0_3_ring_reset(struct amdgpu_ring *ring,
|
||||
unsigned int vmid,
|
||||
struct amdgpu_fence *timedout_fence)
|
||||
{
|
||||
if (amdgpu_sriov_vf(ring->adev))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
@@ -834,7 +834,9 @@ static void jpeg_v5_0_1_core_stall_reset(struct amdgpu_ring *ring)
|
||||
WREG32_SOC15(JPEG, jpeg_inst, regJPEG_CORE_RST_CTRL, 0x00);
|
||||
}
|
||||
|
||||
static int jpeg_v5_0_1_ring_reset(struct amdgpu_ring *ring, unsigned int vmid)
|
||||
static int jpeg_v5_0_1_ring_reset(struct amdgpu_ring *ring,
|
||||
unsigned int vmid,
|
||||
struct amdgpu_fence *timedout_fence)
|
||||
{
|
||||
if (amdgpu_sriov_vf(ring->adev))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
@@ -1675,7 +1675,9 @@ static bool sdma_v4_4_2_page_ring_is_guilty(struct amdgpu_ring *ring)
|
||||
return sdma_v4_4_2_is_queue_selected(adev, instance_id, true);
|
||||
}
|
||||
|
||||
static int sdma_v4_4_2_reset_queue(struct amdgpu_ring *ring, unsigned int vmid)
|
||||
static int sdma_v4_4_2_reset_queue(struct amdgpu_ring *ring,
|
||||
unsigned int vmid,
|
||||
struct amdgpu_fence *timedout_fence)
|
||||
{
|
||||
struct amdgpu_device *adev = ring->adev;
|
||||
u32 id = ring->me;
|
||||
|
||||
@@ -1539,7 +1539,9 @@ static int sdma_v5_0_soft_reset(struct amdgpu_ip_block *ip_block)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sdma_v5_0_reset_queue(struct amdgpu_ring *ring, unsigned int vmid)
|
||||
static int sdma_v5_0_reset_queue(struct amdgpu_ring *ring,
|
||||
unsigned int vmid,
|
||||
struct amdgpu_fence *timedout_fence)
|
||||
{
|
||||
struct amdgpu_device *adev = ring->adev;
|
||||
u32 inst_id = ring->me;
|
||||
|
||||
@@ -1452,7 +1452,9 @@ static int sdma_v5_2_wait_for_idle(struct amdgpu_ip_block *ip_block)
|
||||
return -ETIMEDOUT;
|
||||
}
|
||||
|
||||
static int sdma_v5_2_reset_queue(struct amdgpu_ring *ring, unsigned int vmid)
|
||||
static int sdma_v5_2_reset_queue(struct amdgpu_ring *ring,
|
||||
unsigned int vmid,
|
||||
struct amdgpu_fence *timedout_fence)
|
||||
{
|
||||
struct amdgpu_device *adev = ring->adev;
|
||||
u32 inst_id = ring->me;
|
||||
|
||||
@@ -1550,7 +1550,9 @@ static int sdma_v6_0_ring_preempt_ib(struct amdgpu_ring *ring)
|
||||
return r;
|
||||
}
|
||||
|
||||
static int sdma_v6_0_reset_queue(struct amdgpu_ring *ring, unsigned int vmid)
|
||||
static int sdma_v6_0_reset_queue(struct amdgpu_ring *ring,
|
||||
unsigned int vmid,
|
||||
struct amdgpu_fence *timedout_fence)
|
||||
{
|
||||
struct amdgpu_device *adev = ring->adev;
|
||||
int i, r;
|
||||
|
||||
@@ -802,7 +802,9 @@ static bool sdma_v7_0_check_soft_reset(struct amdgpu_ip_block *ip_block)
|
||||
return false;
|
||||
}
|
||||
|
||||
static int sdma_v7_0_reset_queue(struct amdgpu_ring *ring, unsigned int vmid)
|
||||
static int sdma_v7_0_reset_queue(struct amdgpu_ring *ring,
|
||||
unsigned int vmid,
|
||||
struct amdgpu_fence *timedout_fence)
|
||||
{
|
||||
struct amdgpu_device *adev = ring->adev;
|
||||
int i, r;
|
||||
|
||||
@@ -1967,7 +1967,9 @@ static int vcn_v4_0_ring_patch_cs_in_place(struct amdgpu_cs_parser *p,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int vcn_v4_0_ring_reset(struct amdgpu_ring *ring, unsigned int vmid)
|
||||
static int vcn_v4_0_ring_reset(struct amdgpu_ring *ring,
|
||||
unsigned int vmid,
|
||||
struct amdgpu_fence *timedout_fence)
|
||||
{
|
||||
struct amdgpu_device *adev = ring->adev;
|
||||
struct amdgpu_vcn_inst *vinst = &adev->vcn.inst[ring->me];
|
||||
|
||||
@@ -1594,7 +1594,9 @@ static void vcn_v4_0_3_unified_ring_set_wptr(struct amdgpu_ring *ring)
|
||||
}
|
||||
}
|
||||
|
||||
static int vcn_v4_0_3_ring_reset(struct amdgpu_ring *ring, unsigned int vmid)
|
||||
static int vcn_v4_0_3_ring_reset(struct amdgpu_ring *ring,
|
||||
unsigned int vmid,
|
||||
struct amdgpu_fence *timedout_fence)
|
||||
{
|
||||
int r = 0;
|
||||
int vcn_inst;
|
||||
|
||||
@@ -1465,7 +1465,9 @@ static void vcn_v4_0_5_unified_ring_set_wptr(struct amdgpu_ring *ring)
|
||||
}
|
||||
}
|
||||
|
||||
static int vcn_v4_0_5_ring_reset(struct amdgpu_ring *ring, unsigned int vmid)
|
||||
static int vcn_v4_0_5_ring_reset(struct amdgpu_ring *ring,
|
||||
unsigned int vmid,
|
||||
struct amdgpu_fence *timedout_fence)
|
||||
{
|
||||
struct amdgpu_device *adev = ring->adev;
|
||||
struct amdgpu_vcn_inst *vinst = &adev->vcn.inst[ring->me];
|
||||
|
||||
@@ -1192,7 +1192,9 @@ static void vcn_v5_0_0_unified_ring_set_wptr(struct amdgpu_ring *ring)
|
||||
}
|
||||
}
|
||||
|
||||
static int vcn_v5_0_0_ring_reset(struct amdgpu_ring *ring, unsigned int vmid)
|
||||
static int vcn_v5_0_0_ring_reset(struct amdgpu_ring *ring,
|
||||
unsigned int vmid,
|
||||
struct amdgpu_fence *timedout_fence)
|
||||
{
|
||||
struct amdgpu_device *adev = ring->adev;
|
||||
struct amdgpu_vcn_inst *vinst = &adev->vcn.inst[ring->me];
|
||||
|
||||
Reference in New Issue
Block a user