On Wed, Jun 1, 2016 at 9:10 AM, Christian König <deathsimple at vodafone.de> wrote: > From: Christian König <christian.koenig at amd.com> > > vm_flush() now comes directly after vm_grab_id(). > > Signed-off-by: Christian König <christian.koenig at amd.com>
For the series: Acked-by: Alex Deucher <alexander.deucher at amd.com> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 - > drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 31 +++++++++++-------------------- > 2 files changed, 11 insertions(+), 21 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h > b/drivers/gpu/drm/amd/amdgpu/amdgpu.h > index 52326d3..e054542 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h > @@ -886,7 +886,6 @@ struct amdgpu_vm_id { > struct fence *first; > struct amdgpu_sync active; > struct fence *last_flush; > - struct amdgpu_ring *last_user; > atomic64_t owner; > > uint64_t pd_gpu_addr; > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c > index 8ea1c73..48d5ad18 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c > @@ -237,6 +237,7 @@ int amdgpu_vm_grab_id(struct amdgpu_vm *vm, struct > amdgpu_ring *ring, > i = ring->idx; > do { > struct fence *flushed; > + bool same_ring = ring->idx == i; > > id = vm->ids[i++]; > if (i == AMDGPU_MAX_RINGS) > @@ -252,7 +253,7 @@ int amdgpu_vm_grab_id(struct amdgpu_vm *vm, struct > amdgpu_ring *ring, > if (pd_addr != id->pd_gpu_addr) > continue; > > - if (id->last_user != ring && > + if (!same_ring && > (!id->last_flush || !fence_is_signaled(id->last_flush))) > continue; > > @@ -261,15 +262,9 @@ int amdgpu_vm_grab_id(struct amdgpu_vm *vm, struct > amdgpu_ring *ring, > (!flushed || fence_is_later(updates, flushed))) > continue; > > - /* Good we can use this VMID */ > - if (id->last_user == ring) { > - r = amdgpu_sync_fence(ring->adev, sync, > - id->first); > - if (r) > - goto error; > - } > - > - /* And remember this submission as user of the VMID */ > + /* Good we can use this VMID. Remember this submission as > + * user of the VMID. > + */ > r = amdgpu_sync_fence(ring->adev, &id->active, fence); > if (r) > goto error; > @@ -306,7 +301,6 @@ int amdgpu_vm_grab_id(struct amdgpu_vm *vm, struct > amdgpu_ring *ring, > id->pd_gpu_addr = pd_addr; > > list_move_tail(&id->list, &adev->vm_manager.ids_lru); > - id->last_user = ring; > atomic64_set(&id->owner, vm->client_id); > vm->ids[ring->idx] = id; > > @@ -357,16 +351,13 @@ int amdgpu_vm_flush(struct amdgpu_ring *ring, > trace_amdgpu_vm_flush(pd_addr, ring->idx, vm_id); > amdgpu_ring_emit_vm_flush(ring, vm_id, pd_addr); > > + r = amdgpu_fence_emit(ring, &fence); > + if (r) > + return r; > + > mutex_lock(&adev->vm_manager.lock); > - if ((id->pd_gpu_addr == pd_addr) && (id->last_user == ring)) { > - r = amdgpu_fence_emit(ring, &fence); > - if (r) { > - mutex_unlock(&adev->vm_manager.lock); > - return r; > - } > - fence_put(id->last_flush); > - id->last_flush = fence; > - } > + fence_put(id->last_flush); > + id->last_flush = fence; > mutex_unlock(&adev->vm_manager.lock); > } > > -- > 2.5.0 > > _______________________________________________ > dri-devel mailing list > dri-devel at lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel