> +/**
> + * drm_gem_vram_unpin() - Unpins a GEM VRAM object
> + * @gbo:     the GEM VRAM object
> + *
> + * Returns:
> + * 0 on success, or
> + * a negative error code otherwise.
> + */
> +int drm_gem_vram_unpin(struct drm_gem_vram_object *gbo)
> +{
> +     int i, ret;
> +     struct ttm_operation_ctx ctx = { false, false };
> +
> +     if (!gbo->pin_count)
> +             return 0;

WARN_ON_ONCE() here?  That should not happen ...

> +/**
> + * drm_gem_vram_push_to_system() - \
> +     Unpins a GEM VRAM object and moves it to system memory
> + * @gbo:     the GEM VRAM object
> + *
> + * This operation only works if the caller holds the final pin on the
> + * buffer object.
> + *
> + * Returns:
> + * 0 on success, or
> + * a negative error code otherwise.
> + */
> +int drm_gem_vram_push_to_system(struct drm_gem_vram_object *gbo)
> +{
> +     int i, ret;
> +     struct ttm_operation_ctx ctx = { false, false };
> +
> +     if (!gbo->pin_count)
> +             return 0;

Likewise.

> +     --gbo->pin_count;
> +     if (gbo->pin_count)
> +             return 0;
> +
> +     if (gbo->kmap.virtual)
> +             ttm_bo_kunmap(&gbo->kmap);
> +
> +     drm_gem_vram_placement(gbo, TTM_PL_FLAG_SYSTEM);
> +     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)
> +             return ret;
> +
> +     return 0;
> +}
> +EXPORT_SYMBOL(drm_gem_vram_push_to_system);

Very simliar to drm_gem_vram_unpin, can't we just call that function?

Something like this:

        drm_gem_vram_push_to_system()
        {
                if (gbo->pin_count == 1 && gbo->kmap.virtual)
                        ttm_bo_kunmap(&gbo->kmap);
                return drm_gem_vram_unpin();
        }

> +struct drm_gem_vram_object {
> +     /* Supported placements are %TTM_PL_VRAM and %TTM_PL_SYSTEM */
> +     struct ttm_placement placement;
> +     struct ttm_place placements[3];

placements[2] should be enough I guess?

cheers,
  Gerd

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to