Message ID | 20190529122702.13035-10-christian.koenig@amd.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [01/10] drm/ttm: Make LRU removal optional v2 | expand |
Patch #1,#5,#6,#8,#9,#10 are Reviewed-by: Chunming Zhou <david1.zhou@amd.com> Patch #2,#3,#4 are Acked-by: Chunming Zhou <david1.zhou@amd.com> -David > -----Original Message----- > From: dri-devel <dri-devel-bounces@lists.freedesktop.org> On Behalf Of > Christian K?nig > Sent: Wednesday, May 29, 2019 8:27 PM > To: dri-devel@lists.freedesktop.org; amd-gfx@lists.freedesktop.org > Subject: [PATCH 10/10] drm/amdgpu: stop removing BOs from the LRU v3 > > This avoids OOM situations when we have lots of threads submitting at the > same time. > > v3: apply this to the whole driver, not just CS > > Signed-off-by: Christian König <christian.koenig@amd.com> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 2 +- > drivers/gpu/drm/amd/amdgpu/amdgpu_csa.c | 2 +- > drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 4 ++-- > drivers/gpu/drm/amd/amdgpu/amdgpu_object.h | 2 +- > 4 files changed, 5 insertions(+), 5 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c > index 20f2955d2a55..3e2da24cd17a 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c > @@ -648,7 +648,7 @@ static int amdgpu_cs_parser_bos(struct > amdgpu_cs_parser *p, > } > > r = ttm_eu_reserve_buffers(&p->ticket, &p->validated, true, > - &duplicates, true); > + &duplicates, false); > if (unlikely(r != 0)) { > if (r != -ERESTARTSYS) > DRM_ERROR("ttm_eu_reserve_buffers failed.\n"); > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_csa.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_csa.c > index 06f83cac0d3a..f660628e6af9 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_csa.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_csa.c > @@ -79,7 +79,7 @@ int amdgpu_map_static_csa(struct amdgpu_device > *adev, struct amdgpu_vm *vm, > list_add(&csa_tv.head, &list); > amdgpu_vm_get_pd_bo(vm, &list, &pd); > > - r = ttm_eu_reserve_buffers(&ticket, &list, true, NULL, true); > + r = ttm_eu_reserve_buffers(&ticket, &list, true, NULL, false); > if (r) { > DRM_ERROR("failed to reserve CSA,PD BOs: err=%d\n", r); > return r; > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c > index d513a5ad03dd..ed25a4e14404 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c > @@ -171,7 +171,7 @@ void amdgpu_gem_object_close(struct > drm_gem_object *obj, > > amdgpu_vm_get_pd_bo(vm, &list, &vm_pd); > > - r = ttm_eu_reserve_buffers(&ticket, &list, false, &duplicates, true); > + r = ttm_eu_reserve_buffers(&ticket, &list, false, &duplicates, false); > if (r) { > dev_err(adev->dev, "leaking bo va because " > "we fail to reserve bo (%d)\n", r); > @@ -608,7 +608,7 @@ int amdgpu_gem_va_ioctl(struct drm_device *dev, > void *data, > > amdgpu_vm_get_pd_bo(&fpriv->vm, &list, &vm_pd); > > - r = ttm_eu_reserve_buffers(&ticket, &list, true, &duplicates, true); > + r = ttm_eu_reserve_buffers(&ticket, &list, true, &duplicates, false); > if (r) > goto error_unref; > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h > b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h > index c430e8259038..d60593cc436e 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h > @@ -155,7 +155,7 @@ static inline int amdgpu_bo_reserve(struct > amdgpu_bo *bo, bool no_intr) > struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev); > int r; > > - r = ttm_bo_reserve(&bo->tbo, !no_intr, false, NULL); > + r = __ttm_bo_reserve(&bo->tbo, !no_intr, false, NULL); > if (unlikely(r != 0)) { > if (r != -ERESTARTSYS) > dev_err(adev->dev, "%p reserve failed\n", bo); > -- > 2.17.1 > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel
Hi Christian, The series is: Tested-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Pierre-Eric On 29/05/2019 14:27, Christian König wrote: > This avoids OOM situations when we have lots of threads > submitting at the same time. > > v3: apply this to the whole driver, not just CS > > Signed-off-by: Christian König <christian.koenig@amd.com> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 2 +- > drivers/gpu/drm/amd/amdgpu/amdgpu_csa.c | 2 +- > drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 4 ++-- > drivers/gpu/drm/amd/amdgpu/amdgpu_object.h | 2 +- > 4 files changed, 5 insertions(+), 5 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c > index 20f2955d2a55..3e2da24cd17a 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c > @@ -648,7 +648,7 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p, > } > > r = ttm_eu_reserve_buffers(&p->ticket, &p->validated, true, > - &duplicates, true); > + &duplicates, false); > if (unlikely(r != 0)) { > if (r != -ERESTARTSYS) > DRM_ERROR("ttm_eu_reserve_buffers failed.\n"); > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_csa.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_csa.c > index 06f83cac0d3a..f660628e6af9 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_csa.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_csa.c > @@ -79,7 +79,7 @@ int amdgpu_map_static_csa(struct amdgpu_device *adev, struct amdgpu_vm *vm, > list_add(&csa_tv.head, &list); > amdgpu_vm_get_pd_bo(vm, &list, &pd); > > - r = ttm_eu_reserve_buffers(&ticket, &list, true, NULL, true); > + r = ttm_eu_reserve_buffers(&ticket, &list, true, NULL, false); > if (r) { > DRM_ERROR("failed to reserve CSA,PD BOs: err=%d\n", r); > return r; > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c > index d513a5ad03dd..ed25a4e14404 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c > @@ -171,7 +171,7 @@ void amdgpu_gem_object_close(struct drm_gem_object *obj, > > amdgpu_vm_get_pd_bo(vm, &list, &vm_pd); > > - r = ttm_eu_reserve_buffers(&ticket, &list, false, &duplicates, true); > + r = ttm_eu_reserve_buffers(&ticket, &list, false, &duplicates, false); > if (r) { > dev_err(adev->dev, "leaking bo va because " > "we fail to reserve bo (%d)\n", r); > @@ -608,7 +608,7 @@ int amdgpu_gem_va_ioctl(struct drm_device *dev, void *data, > > amdgpu_vm_get_pd_bo(&fpriv->vm, &list, &vm_pd); > > - r = ttm_eu_reserve_buffers(&ticket, &list, true, &duplicates, true); > + r = ttm_eu_reserve_buffers(&ticket, &list, true, &duplicates, false); > if (r) > goto error_unref; > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h > index c430e8259038..d60593cc436e 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h > @@ -155,7 +155,7 @@ static inline int amdgpu_bo_reserve(struct amdgpu_bo *bo, bool no_intr) > struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev); > int r; > > - r = ttm_bo_reserve(&bo->tbo, !no_intr, false, NULL); > + r = __ttm_bo_reserve(&bo->tbo, !no_intr, false, NULL); > if (unlikely(r != 0)) { > if (r != -ERESTARTSYS) > dev_err(adev->dev, "%p reserve failed\n", bo); >
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c index 20f2955d2a55..3e2da24cd17a 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c @@ -648,7 +648,7 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p, } r = ttm_eu_reserve_buffers(&p->ticket, &p->validated, true, - &duplicates, true); + &duplicates, false); if (unlikely(r != 0)) { if (r != -ERESTARTSYS) DRM_ERROR("ttm_eu_reserve_buffers failed.\n"); diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_csa.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_csa.c index 06f83cac0d3a..f660628e6af9 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_csa.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_csa.c @@ -79,7 +79,7 @@ int amdgpu_map_static_csa(struct amdgpu_device *adev, struct amdgpu_vm *vm, list_add(&csa_tv.head, &list); amdgpu_vm_get_pd_bo(vm, &list, &pd); - r = ttm_eu_reserve_buffers(&ticket, &list, true, NULL, true); + r = ttm_eu_reserve_buffers(&ticket, &list, true, NULL, false); if (r) { DRM_ERROR("failed to reserve CSA,PD BOs: err=%d\n", r); return r; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c index d513a5ad03dd..ed25a4e14404 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c @@ -171,7 +171,7 @@ void amdgpu_gem_object_close(struct drm_gem_object *obj, amdgpu_vm_get_pd_bo(vm, &list, &vm_pd); - r = ttm_eu_reserve_buffers(&ticket, &list, false, &duplicates, true); + r = ttm_eu_reserve_buffers(&ticket, &list, false, &duplicates, false); if (r) { dev_err(adev->dev, "leaking bo va because " "we fail to reserve bo (%d)\n", r); @@ -608,7 +608,7 @@ int amdgpu_gem_va_ioctl(struct drm_device *dev, void *data, amdgpu_vm_get_pd_bo(&fpriv->vm, &list, &vm_pd); - r = ttm_eu_reserve_buffers(&ticket, &list, true, &duplicates, true); + r = ttm_eu_reserve_buffers(&ticket, &list, true, &duplicates, false); if (r) goto error_unref; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h index c430e8259038..d60593cc436e 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h @@ -155,7 +155,7 @@ static inline int amdgpu_bo_reserve(struct amdgpu_bo *bo, bool no_intr) struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev); int r; - r = ttm_bo_reserve(&bo->tbo, !no_intr, false, NULL); + r = __ttm_bo_reserve(&bo->tbo, !no_intr, false, NULL); if (unlikely(r != 0)) { if (r != -ERESTARTSYS) dev_err(adev->dev, "%p reserve failed\n", bo);
This avoids OOM situations when we have lots of threads submitting at the same time. v3: apply this to the whole driver, not just CS Signed-off-by: Christian König <christian.koenig@amd.com> --- drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_csa.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 4 ++-- drivers/gpu/drm/amd/amdgpu/amdgpu_object.h | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-)