Merge branch 'vmwgfx-next' of git://people.freedesktop.org/~thomash/linux into drm-next
Mostly code reorganizations and optimizations for vmwgfx. - Move TTM code that's only used by vmwgfx to vmwgfx - Break out the vmwgfx buffer- and resource validation code to a separate source file - Get rid of a number of atomic operations during command buffer validation. From: Thomas Hellstrom <thellstrom@vmware.com> Link: https://patchwork.freedesktop.org/patch/msgid/20180928131157.2810-1-thellstrom@vmware.com
This commit is contained in:
@@ -614,7 +614,7 @@ static int vmw_surface_init(struct vmw_private *dev_priv,
|
||||
*/
|
||||
|
||||
INIT_LIST_HEAD(&srf->view_list);
|
||||
vmw_resource_activate(res, vmw_hw_surface_destroy);
|
||||
res->hw_destroy = vmw_hw_surface_destroy;
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -731,7 +731,7 @@ int vmw_surface_define_ioctl(struct drm_device *dev, void *data,
|
||||
|
||||
if (unlikely(vmw_user_surface_size == 0))
|
||||
vmw_user_surface_size = ttm_round_pot(sizeof(*user_srf)) +
|
||||
128;
|
||||
VMW_IDA_ACC_SIZE + TTM_OBJ_EXTRA_SIZE;
|
||||
|
||||
num_sizes = 0;
|
||||
for (i = 0; i < DRM_VMW_MAX_SURFACE_FACES; ++i) {
|
||||
@@ -744,7 +744,7 @@ int vmw_surface_define_ioctl(struct drm_device *dev, void *data,
|
||||
num_sizes == 0)
|
||||
return -EINVAL;
|
||||
|
||||
size = vmw_user_surface_size + 128 +
|
||||
size = vmw_user_surface_size +
|
||||
ttm_round_pot(num_sizes * sizeof(struct drm_vmw_size)) +
|
||||
ttm_round_pot(num_sizes * sizeof(struct vmw_surface_offset));
|
||||
|
||||
@@ -886,7 +886,7 @@ int vmw_surface_define_ioctl(struct drm_device *dev, void *data,
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
rep->sid = user_srf->prime.base.hash.key;
|
||||
rep->sid = user_srf->prime.base.handle;
|
||||
vmw_resource_unreference(&res);
|
||||
|
||||
ttm_read_unlock(&dev_priv->reservation_sem);
|
||||
@@ -1024,7 +1024,7 @@ int vmw_surface_reference_ioctl(struct drm_device *dev, void *data,
|
||||
if (unlikely(ret != 0)) {
|
||||
DRM_ERROR("copy_to_user failed %p %u\n",
|
||||
user_sizes, srf->num_sizes);
|
||||
ttm_ref_object_base_unref(tfile, base->hash.key, TTM_REF_USAGE);
|
||||
ttm_ref_object_base_unref(tfile, base->handle, TTM_REF_USAGE);
|
||||
ret = -EFAULT;
|
||||
}
|
||||
|
||||
@@ -1613,9 +1613,9 @@ vmw_gb_surface_define_internal(struct drm_device *dev,
|
||||
|
||||
if (unlikely(vmw_user_surface_size == 0))
|
||||
vmw_user_surface_size = ttm_round_pot(sizeof(*user_srf)) +
|
||||
128;
|
||||
VMW_IDA_ACC_SIZE + TTM_OBJ_EXTRA_SIZE;
|
||||
|
||||
size = vmw_user_surface_size + 128;
|
||||
size = vmw_user_surface_size;
|
||||
|
||||
/* Define a surface based on the parameters. */
|
||||
ret = vmw_surface_gb_priv_define(dev,
|
||||
@@ -1687,7 +1687,7 @@ vmw_gb_surface_define_internal(struct drm_device *dev,
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
rep->handle = user_srf->prime.base.hash.key;
|
||||
rep->handle = user_srf->prime.base.handle;
|
||||
rep->backup_size = res->backup_size;
|
||||
if (res->backup) {
|
||||
rep->buffer_map_handle =
|
||||
@@ -1749,7 +1749,7 @@ vmw_gb_surface_reference_internal(struct drm_device *dev,
|
||||
if (unlikely(ret != 0)) {
|
||||
DRM_ERROR("Could not add a reference to a GB surface "
|
||||
"backup buffer.\n");
|
||||
(void) ttm_ref_object_base_unref(tfile, base->hash.key,
|
||||
(void) ttm_ref_object_base_unref(tfile, base->handle,
|
||||
TTM_REF_USAGE);
|
||||
goto out_bad_resource;
|
||||
}
|
||||
@@ -1763,7 +1763,7 @@ vmw_gb_surface_reference_internal(struct drm_device *dev,
|
||||
rep->creq.base.array_size = srf->array_size;
|
||||
rep->creq.base.buffer_handle = backup_handle;
|
||||
rep->creq.base.base_size = srf->base_size;
|
||||
rep->crep.handle = user_srf->prime.base.hash.key;
|
||||
rep->crep.handle = user_srf->prime.base.handle;
|
||||
rep->crep.backup_size = srf->res.backup_size;
|
||||
rep->crep.buffer_handle = backup_handle;
|
||||
rep->crep.buffer_map_handle =
|
||||
|
Reference in New Issue
Block a user