Jerome Glisse wrote:
> This add the support for the new fault callback, does change anything
> from driver point of view.
>
> Improvement: store the aperture base in a variable so that we don't
> call a function to get it on each fault.
>
> Patch hasn't been tested.
>
> V2 don't derefence bo->mem.mm_node as it's not NULL only for
>    VRAM or GTT
> V3 update after io_mem_reserve/io_mem_free callback balancing
>
> Signed-off-by: Jerome Glisse <jgli...@redhat.com>
>   

Reviewed-by: Thomas Hellstrom <thellst...@vmware.com>


> ---
>  drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c |   40 
> +++++++++++++++++++++++++++++++-
>  1 files changed, 39 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c 
> b/drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c
> index 825ebe3..7e28448 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c
> @@ -193,6 +193,41 @@ static void vmw_swap_notify(struct ttm_buffer_object *bo)
>       vmw_dmabuf_gmr_unbind(bo);
>  }
>  
> +static int vmw_ttm_io_mem_reserve(struct ttm_bo_device *bdev, struct 
> ttm_mem_reg *mem)
> +{
> +     struct ttm_mem_type_manager *man = &bdev->man[mem->mem_type];
> +     struct vmw_private *dev_priv = container_of(bdev, struct vmw_private, 
> bdev);
> +
> +     mem->bus.is_iomem = false;
> +     mem->bus.offset = 0;
> +     mem->bus.size = mem->num_pages << PAGE_SHIFT;
> +     mem->bus.base = 0;
> +     if (!(man->flags & TTM_MEMTYPE_FLAG_MAPPABLE))
> +             return -EINVAL;
> +     switch (mem->mem_type) {
> +     case TTM_PL_SYSTEM:
> +             /* System memory */
> +             return 0;
> +     case TTM_PL_VRAM:
> +             mem->bus.offset = mem->mm_node->start << PAGE_SHIFT;
> +             mem->bus.base = dev_priv->vram_start;
> +             mem->bus.is_iomem = true;
> +             break;
> +     default:
> +             return -EINVAL;
> +     }
> +     return 0;
> +}
> +
> +static void vmw_ttm_io_mem_free(struct ttm_bo_device *bdev, struct 
> ttm_mem_reg *mem)
> +{
> +}
> +
> +static int vmw_ttm_fault_reserve_notify(struct ttm_buffer_object *bo)
> +{
> +     return 0;
> +}
> +
>  /**
>   * FIXME: We're using the old vmware polling method to sync.
>   * Do this with fences instead.
> @@ -248,5 +283,8 @@ struct ttm_bo_driver vmw_bo_driver = {
>       .sync_obj_unref = vmw_sync_obj_unref,
>       .sync_obj_ref = vmw_sync_obj_ref,
>       .move_notify = vmw_move_notify,
> -     .swap_notify = vmw_swap_notify
> +     .swap_notify = vmw_swap_notify,
> +     .fault_reserve_notify = &vmw_ttm_fault_reserve_notify,
> +     .io_mem_reserve = &vmw_ttm_io_mem_reserve,
> +     .io_mem_free = &vmw_ttm_io_mem_free,
>  };
>   


------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
--
_______________________________________________
Dri-devel mailing list
Dri-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to