ttm: add prime sharing support to TTM (v2)
This adds the ability for ttm common code to take an SG table and use it as the backing for a slave TTM object. The drivers can then populate their GTT tables using the SG object. v2: make sure to setup VM for sg bos as well. Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Reviewed-by: Jerome Glisse <jglisse@redhat.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
@@ -343,6 +343,16 @@ static int ttm_bo_add_ttm(struct ttm_buffer_object *bo, bool zero_alloc)
|
||||
if (unlikely(bo->ttm == NULL))
|
||||
ret = -ENOMEM;
|
||||
break;
|
||||
case ttm_bo_type_sg:
|
||||
bo->ttm = bdev->driver->ttm_tt_create(bdev, bo->num_pages << PAGE_SHIFT,
|
||||
page_flags | TTM_PAGE_FLAG_SG,
|
||||
glob->dummy_read_page);
|
||||
if (unlikely(bo->ttm == NULL)) {
|
||||
ret = -ENOMEM;
|
||||
break;
|
||||
}
|
||||
bo->ttm->sg = bo->sg;
|
||||
break;
|
||||
default:
|
||||
pr_err("Illegal buffer object type\n");
|
||||
ret = -EINVAL;
|
||||
@@ -1169,6 +1179,7 @@ int ttm_bo_init(struct ttm_bo_device *bdev,
|
||||
bool interruptible,
|
||||
struct file *persistent_swap_storage,
|
||||
size_t acc_size,
|
||||
struct sg_table *sg,
|
||||
void (*destroy) (struct ttm_buffer_object *))
|
||||
{
|
||||
int ret = 0;
|
||||
@@ -1223,6 +1234,7 @@ int ttm_bo_init(struct ttm_bo_device *bdev,
|
||||
bo->seq_valid = false;
|
||||
bo->persistent_swap_storage = persistent_swap_storage;
|
||||
bo->acc_size = acc_size;
|
||||
bo->sg = sg;
|
||||
atomic_inc(&bo->glob->bo_count);
|
||||
|
||||
ret = ttm_bo_check_placement(bo, placement);
|
||||
@@ -1233,7 +1245,8 @@ int ttm_bo_init(struct ttm_bo_device *bdev,
|
||||
* For ttm_bo_type_device buffers, allocate
|
||||
* address space from the device.
|
||||
*/
|
||||
if (bo->type == ttm_bo_type_device) {
|
||||
if (bo->type == ttm_bo_type_device ||
|
||||
bo->type == ttm_bo_type_sg) {
|
||||
ret = ttm_bo_setup_vm(bo);
|
||||
if (ret)
|
||||
goto out_err;
|
||||
@@ -1312,7 +1325,7 @@ int ttm_bo_create(struct ttm_bo_device *bdev,
|
||||
|
||||
ret = ttm_bo_init(bdev, bo, size, type, placement, page_alignment,
|
||||
buffer_start, interruptible,
|
||||
persistent_swap_storage, acc_size, NULL);
|
||||
persistent_swap_storage, acc_size, NULL, NULL);
|
||||
if (likely(ret == 0))
|
||||
*p_bo = bo;
|
||||
|
||||
|
Reference in New Issue
Block a user