drm/ttm/vmwgfx: Have TTM manage the validation sequence.
Rather than having the driver supply the validation sequence, leave that responsibility to TTM. This saves some confusion and a function argument. Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
95762c2b34
commit
6570596202
6 changed files with 9 additions and 6 deletions
|
@ -1539,6 +1539,7 @@ int ttm_bo_device_init(struct ttm_bo_device *bdev,
|
|||
bdev->dev_mapping = NULL;
|
||||
bdev->glob = glob;
|
||||
bdev->need_dma32 = need_dma32;
|
||||
bdev->val_seq = 0;
|
||||
spin_lock_init(&bdev->fence_lock);
|
||||
mutex_lock(&glob->device_list_mutex);
|
||||
list_add_tail(&bdev->device_list, &glob->device_list);
|
||||
|
|
|
@ -126,11 +126,12 @@ EXPORT_SYMBOL(ttm_eu_backoff_reservation);
|
|||
* buffers in different orders.
|
||||
*/
|
||||
|
||||
int ttm_eu_reserve_buffers(struct list_head *list, uint32_t val_seq)
|
||||
int ttm_eu_reserve_buffers(struct list_head *list)
|
||||
{
|
||||
struct ttm_bo_global *glob;
|
||||
struct ttm_validate_buffer *entry;
|
||||
int ret;
|
||||
uint32_t val_seq;
|
||||
|
||||
if (list_empty(list))
|
||||
return 0;
|
||||
|
@ -146,6 +147,8 @@ int ttm_eu_reserve_buffers(struct list_head *list, uint32_t val_seq)
|
|||
|
||||
retry:
|
||||
spin_lock(&glob->lru_lock);
|
||||
val_seq = entry->bo->bdev->val_seq++;
|
||||
|
||||
list_for_each_entry(entry, list, head) {
|
||||
struct ttm_buffer_object *bo = entry->bo;
|
||||
|
||||
|
|
|
@ -264,7 +264,6 @@ struct vmw_private {
|
|||
*/
|
||||
|
||||
struct vmw_sw_context ctx;
|
||||
uint32_t val_seq;
|
||||
struct mutex cmdbuf_mutex;
|
||||
|
||||
/**
|
||||
|
|
|
@ -653,8 +653,7 @@ int vmw_execbuf_ioctl(struct drm_device *dev, void *data,
|
|||
ret = vmw_cmd_check_all(dev_priv, sw_context, cmd, arg->command_size);
|
||||
if (unlikely(ret != 0))
|
||||
goto out_err;
|
||||
ret = ttm_eu_reserve_buffers(&sw_context->validate_nodes,
|
||||
dev_priv->val_seq++);
|
||||
ret = ttm_eu_reserve_buffers(&sw_context->validate_nodes);
|
||||
if (unlikely(ret != 0))
|
||||
goto out_err;
|
||||
|
||||
|
|
|
@ -515,6 +515,7 @@ struct ttm_bo_global {
|
|||
* @addr_space_mm: Range manager for the device address space.
|
||||
* lru_lock: Spinlock that protects the buffer+device lru lists and
|
||||
* ddestroy lists.
|
||||
* @val_seq: Current validation sequence.
|
||||
* @nice_mode: Try nicely to wait for buffer idle when cleaning a manager.
|
||||
* If a GPU lockup has been detected, this is forced to 0.
|
||||
* @dev_mapping: A pointer to the struct address_space representing the
|
||||
|
@ -544,6 +545,7 @@ struct ttm_bo_device {
|
|||
* Protected by the global:lru lock.
|
||||
*/
|
||||
struct list_head ddestroy;
|
||||
uint32_t val_seq;
|
||||
|
||||
/*
|
||||
* Protected by load / firstopen / lastclose /unload sync.
|
||||
|
|
|
@ -72,7 +72,6 @@ extern void ttm_eu_backoff_reservation(struct list_head *list);
|
|||
* function ttm_eu_reserve_buffers
|
||||
*
|
||||
* @list: thread private list of ttm_validate_buffer structs.
|
||||
* @val_seq: A unique sequence number.
|
||||
*
|
||||
* Tries to reserve bos pointed to by the list entries for validation.
|
||||
* If the function returns 0, all buffers are marked as "unfenced",
|
||||
|
@ -94,7 +93,7 @@ extern void ttm_eu_backoff_reservation(struct list_head *list);
|
|||
* has failed.
|
||||
*/
|
||||
|
||||
extern int ttm_eu_reserve_buffers(struct list_head *list, uint32_t val_seq);
|
||||
extern int ttm_eu_reserve_buffers(struct list_head *list);
|
||||
|
||||
/**
|
||||
* function ttm_eu_fence_buffer_objects.
|
||||
|
|
Loading…
Reference in a new issue