Message ID | 20200921144856.2797-7-christian.koenig@amd.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [01/11] drm/ttm: add ttm_bo_pin()/ttm_bo_unpin() | expand |
Hi Am 21.09.20 um 16:48 schrieb Christian König: > Stop using TTM_PL_FLAG_NO_EVICT. > > Signed-off-by: Christian König <christian.koenig@amd.com> Acked-by: Thomas Zimmermann <tzimmermann@suse.de> > --- > drivers/gpu/drm/drm_gem_vram_helper.c | 37 +++++++-------------------- > include/drm/drm_gem_vram_helper.h | 3 --- > 2 files changed, 9 insertions(+), 31 deletions(-) > > diff --git a/drivers/gpu/drm/drm_gem_vram_helper.c b/drivers/gpu/drm/drm_gem_vram_helper.c > index 50cad0e4a92e..bd3dd17ad81d 100644 > --- a/drivers/gpu/drm/drm_gem_vram_helper.c > +++ b/drivers/gpu/drm/drm_gem_vram_helper.c > @@ -301,7 +301,7 @@ static u64 drm_gem_vram_pg_offset(struct drm_gem_vram_object *gbo) > */ > s64 drm_gem_vram_offset(struct drm_gem_vram_object *gbo) > { > - if (WARN_ON_ONCE(!gbo->pin_count)) > + if (WARN_ON_ONCE(!gbo->bo.pin_count)) > return (s64)-ENODEV; > return drm_gem_vram_pg_offset(gbo) << PAGE_SHIFT; > } > @@ -310,24 +310,21 @@ EXPORT_SYMBOL(drm_gem_vram_offset); > static int drm_gem_vram_pin_locked(struct drm_gem_vram_object *gbo, > unsigned long pl_flag) > { > - int i, ret; > struct ttm_operation_ctx ctx = { false, false }; > + int ret; > > - if (gbo->pin_count) > + if (gbo->bo.pin_count) > goto out; > > if (pl_flag) > drm_gem_vram_placement(gbo, pl_flag); > > - for (i = 0; i < gbo->placement.num_placement; ++i) > - gbo->placements[i].flags |= TTM_PL_FLAG_NO_EVICT; > - > ret = ttm_bo_validate(&gbo->bo, &gbo->placement, &ctx); > if (ret < 0) > return ret; > > out: > - ++gbo->pin_count; > + ttm_bo_pin(&gbo->bo); > > return 0; > } > @@ -369,26 +366,9 @@ int drm_gem_vram_pin(struct drm_gem_vram_object *gbo, unsigned long pl_flag) > } > EXPORT_SYMBOL(drm_gem_vram_pin); > > -static int drm_gem_vram_unpin_locked(struct drm_gem_vram_object *gbo) > +static void drm_gem_vram_unpin_locked(struct drm_gem_vram_object *gbo) > { > - int i, ret; > - struct ttm_operation_ctx ctx = { false, false }; > - > - if (WARN_ON_ONCE(!gbo->pin_count)) > - return 0; > - > - --gbo->pin_count; > - if (gbo->pin_count) > - return 0; > - > - for (i = 0; i < gbo->placement.num_placement ; ++i) > - gbo->placements[i].flags &= ~TTM_PL_FLAG_NO_EVICT; > - > - ret = ttm_bo_validate(&gbo->bo, &gbo->placement, &ctx); > - if (ret < 0) > - return ret; > - > - return 0; > + ttm_bo_unpin(&gbo->bo); > } > > /** > @@ -406,10 +386,11 @@ int drm_gem_vram_unpin(struct drm_gem_vram_object *gbo) > ret = ttm_bo_reserve(&gbo->bo, true, false, NULL); > if (ret) > return ret; > - ret = drm_gem_vram_unpin_locked(gbo); > + > + drm_gem_vram_unpin_locked(gbo); > ttm_bo_unreserve(&gbo->bo); > > - return ret; > + return 0; > } > EXPORT_SYMBOL(drm_gem_vram_unpin); > > diff --git a/include/drm/drm_gem_vram_helper.h b/include/drm/drm_gem_vram_helper.h > index 62cc6e6c3a4f..128f88174d32 100644 > --- a/include/drm/drm_gem_vram_helper.h > +++ b/include/drm/drm_gem_vram_helper.h > @@ -35,7 +35,6 @@ struct vm_area_struct; > * @placement: TTM placement information. Supported placements are \ > %TTM_PL_VRAM and %TTM_PL_SYSTEM > * @placements: TTM placement information. > - * @pin_count: Pin counter > * > * The type struct drm_gem_vram_object represents a GEM object that is > * backed by VRAM. It can be used for simple framebuffer devices with > @@ -64,8 +63,6 @@ struct drm_gem_vram_object { > /* Supported placements are %TTM_PL_VRAM and %TTM_PL_SYSTEM */ > struct ttm_placement placement; > struct ttm_place placements[2]; > - > - int pin_count; > }; > > /** >
diff --git a/drivers/gpu/drm/drm_gem_vram_helper.c b/drivers/gpu/drm/drm_gem_vram_helper.c index 50cad0e4a92e..bd3dd17ad81d 100644 --- a/drivers/gpu/drm/drm_gem_vram_helper.c +++ b/drivers/gpu/drm/drm_gem_vram_helper.c @@ -301,7 +301,7 @@ static u64 drm_gem_vram_pg_offset(struct drm_gem_vram_object *gbo) */ s64 drm_gem_vram_offset(struct drm_gem_vram_object *gbo) { - if (WARN_ON_ONCE(!gbo->pin_count)) + if (WARN_ON_ONCE(!gbo->bo.pin_count)) return (s64)-ENODEV; return drm_gem_vram_pg_offset(gbo) << PAGE_SHIFT; } @@ -310,24 +310,21 @@ EXPORT_SYMBOL(drm_gem_vram_offset); static int drm_gem_vram_pin_locked(struct drm_gem_vram_object *gbo, unsigned long pl_flag) { - int i, ret; struct ttm_operation_ctx ctx = { false, false }; + int ret; - if (gbo->pin_count) + if (gbo->bo.pin_count) goto out; if (pl_flag) drm_gem_vram_placement(gbo, pl_flag); - for (i = 0; i < gbo->placement.num_placement; ++i) - gbo->placements[i].flags |= TTM_PL_FLAG_NO_EVICT; - ret = ttm_bo_validate(&gbo->bo, &gbo->placement, &ctx); if (ret < 0) return ret; out: - ++gbo->pin_count; + ttm_bo_pin(&gbo->bo); return 0; } @@ -369,26 +366,9 @@ int drm_gem_vram_pin(struct drm_gem_vram_object *gbo, unsigned long pl_flag) } EXPORT_SYMBOL(drm_gem_vram_pin); -static int drm_gem_vram_unpin_locked(struct drm_gem_vram_object *gbo) +static void drm_gem_vram_unpin_locked(struct drm_gem_vram_object *gbo) { - int i, ret; - struct ttm_operation_ctx ctx = { false, false }; - - if (WARN_ON_ONCE(!gbo->pin_count)) - return 0; - - --gbo->pin_count; - if (gbo->pin_count) - return 0; - - for (i = 0; i < gbo->placement.num_placement ; ++i) - gbo->placements[i].flags &= ~TTM_PL_FLAG_NO_EVICT; - - ret = ttm_bo_validate(&gbo->bo, &gbo->placement, &ctx); - if (ret < 0) - return ret; - - return 0; + ttm_bo_unpin(&gbo->bo); } /** @@ -406,10 +386,11 @@ int drm_gem_vram_unpin(struct drm_gem_vram_object *gbo) ret = ttm_bo_reserve(&gbo->bo, true, false, NULL); if (ret) return ret; - ret = drm_gem_vram_unpin_locked(gbo); + + drm_gem_vram_unpin_locked(gbo); ttm_bo_unreserve(&gbo->bo); - return ret; + return 0; } EXPORT_SYMBOL(drm_gem_vram_unpin); diff --git a/include/drm/drm_gem_vram_helper.h b/include/drm/drm_gem_vram_helper.h index 62cc6e6c3a4f..128f88174d32 100644 --- a/include/drm/drm_gem_vram_helper.h +++ b/include/drm/drm_gem_vram_helper.h @@ -35,7 +35,6 @@ struct vm_area_struct; * @placement: TTM placement information. Supported placements are \ %TTM_PL_VRAM and %TTM_PL_SYSTEM * @placements: TTM placement information. - * @pin_count: Pin counter * * The type struct drm_gem_vram_object represents a GEM object that is * backed by VRAM. It can be used for simple framebuffer devices with @@ -64,8 +63,6 @@ struct drm_gem_vram_object { /* Supported placements are %TTM_PL_VRAM and %TTM_PL_SYSTEM */ struct ttm_placement placement; struct ttm_place placements[2]; - - int pin_count; }; /**
Stop using TTM_PL_FLAG_NO_EVICT. Signed-off-by: Christian König <christian.koenig@amd.com> --- drivers/gpu/drm/drm_gem_vram_helper.c | 37 +++++++-------------------- include/drm/drm_gem_vram_helper.h | 3 --- 2 files changed, 9 insertions(+), 31 deletions(-)