drm/amdgpu: link all gtt when binding them V2
V2: spin lock instead of mutex for gtt list Signed-off-by: Chunming Zhou <David1.Zhou@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
78fbb6859b
commit
5c1354bd30
|
@ -2121,6 +2121,10 @@ struct amdgpu_device {
|
|||
/* link all shadow bo */
|
||||
struct list_head shadow_list;
|
||||
struct mutex shadow_list_lock;
|
||||
/* link all gtt */
|
||||
spinlock_t gtt_list_lock;
|
||||
struct list_head gtt_list;
|
||||
|
||||
};
|
||||
|
||||
bool amdgpu_device_is_px(struct drm_device *dev);
|
||||
|
|
|
@ -1577,6 +1577,9 @@ int amdgpu_device_init(struct amdgpu_device *adev,
|
|||
INIT_LIST_HEAD(&adev->shadow_list);
|
||||
mutex_init(&adev->shadow_list_lock);
|
||||
|
||||
INIT_LIST_HEAD(&adev->gtt_list);
|
||||
spin_lock_init(&adev->gtt_list_lock);
|
||||
|
||||
if (adev->asic_type >= CHIP_BONAIRE) {
|
||||
adev->rmmio_base = pci_resource_start(adev->pdev, 5);
|
||||
adev->rmmio_size = pci_resource_len(adev->pdev, 5);
|
||||
|
@ -1584,6 +1587,7 @@ int amdgpu_device_init(struct amdgpu_device *adev,
|
|||
adev->rmmio_base = pci_resource_start(adev->pdev, 2);
|
||||
adev->rmmio_size = pci_resource_len(adev->pdev, 2);
|
||||
}
|
||||
|
||||
adev->rmmio = ioremap(adev->rmmio_base, adev->rmmio_size);
|
||||
if (adev->rmmio == NULL) {
|
||||
return -ENOMEM;
|
||||
|
|
|
@ -520,6 +520,7 @@ struct amdgpu_ttm_tt {
|
|||
spinlock_t guptasklock;
|
||||
struct list_head guptasks;
|
||||
atomic_t mmu_invalidations;
|
||||
struct list_head list;
|
||||
};
|
||||
|
||||
int amdgpu_ttm_tt_get_user_pages(struct ttm_tt *ttm, struct page **pages)
|
||||
|
@ -666,6 +667,9 @@ static int amdgpu_ttm_backend_bind(struct ttm_tt *ttm,
|
|||
ttm->num_pages, (unsigned)gtt->offset);
|
||||
return r;
|
||||
}
|
||||
spin_lock(>t->adev->gtt_list_lock);
|
||||
list_add_tail(>t->list, >t->adev->gtt_list);
|
||||
spin_unlock(>t->adev->gtt_list_lock);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -680,6 +684,10 @@ static int amdgpu_ttm_backend_unbind(struct ttm_tt *ttm)
|
|||
if (gtt->userptr)
|
||||
amdgpu_ttm_tt_unpin_userptr(ttm);
|
||||
|
||||
spin_lock(>t->adev->gtt_list_lock);
|
||||
list_del_init(>t->list);
|
||||
spin_unlock(>t->adev->gtt_list_lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -716,6 +724,7 @@ static struct ttm_tt *amdgpu_ttm_tt_create(struct ttm_bo_device *bdev,
|
|||
kfree(gtt);
|
||||
return NULL;
|
||||
}
|
||||
INIT_LIST_HEAD(>t->list);
|
||||
return >t->ttm.ttm;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue