Commit 9840d28f authored by Maaz Mombasawala's avatar Maaz Mombasawala Committed by Zack Rusin

drm/vmwgfx: Make all surfaces shareable

There is no real need to have a separate pool for shareable and
non-shareable surfaces. Make all surfaces shareable, regardless of whether
the drm_vmw_surface_flag_shareable has been specified.
Signed-off-by: default avatarMaaz Mombasawala <maaz.mombasawala@broadcom.com>
Reviewed-by: default avatarMartin Krastev <martin.krastev@broadcom.com>
Signed-off-by: default avatarZack Rusin <zack.rusin@broadcom.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240126200804.732454-3-zack.rusin@broadcom.com
parent 935f7950
/* SPDX-License-Identifier: GPL-2.0 OR MIT */ /* SPDX-License-Identifier: GPL-2.0 OR MIT */
/************************************************************************** /**************************************************************************
* *
* Copyright (c) 2009-2022 VMware, Inc., Palo Alto, CA., USA * Copyright (c) 2009-2023 VMware, Inc., Palo Alto, CA., USA
* All Rights Reserved. * All Rights Reserved.
* *
* Permission is hereby granted, free of charge, to any person obtaining a * Permission is hereby granted, free of charge, to any person obtaining a
...@@ -648,7 +648,6 @@ int ttm_prime_handle_to_fd(struct ttm_object_file *tfile, ...@@ -648,7 +648,6 @@ int ttm_prime_handle_to_fd(struct ttm_object_file *tfile,
* @tfile: struct ttm_object_file identifying the caller * @tfile: struct ttm_object_file identifying the caller
* @size: The size of the dma_bufs we export. * @size: The size of the dma_bufs we export.
* @prime: The object to be initialized. * @prime: The object to be initialized.
* @shareable: See ttm_base_object_init
* @type: See ttm_base_object_init * @type: See ttm_base_object_init
* @refcount_release: See ttm_base_object_init * @refcount_release: See ttm_base_object_init
* *
...@@ -656,10 +655,11 @@ int ttm_prime_handle_to_fd(struct ttm_object_file *tfile, ...@@ -656,10 +655,11 @@ int ttm_prime_handle_to_fd(struct ttm_object_file *tfile,
* for data sharing between processes and devices. * for data sharing between processes and devices.
*/ */
int ttm_prime_object_init(struct ttm_object_file *tfile, size_t size, int ttm_prime_object_init(struct ttm_object_file *tfile, size_t size,
struct ttm_prime_object *prime, bool shareable, struct ttm_prime_object *prime,
enum ttm_object_type type, enum ttm_object_type type,
void (*refcount_release) (struct ttm_base_object **)) void (*refcount_release) (struct ttm_base_object **))
{ {
bool shareable = !!(type == VMW_RES_SURFACE);
mutex_init(&prime->mutex); mutex_init(&prime->mutex);
prime->size = PAGE_ALIGN(size); prime->size = PAGE_ALIGN(size);
prime->real_type = type; prime->real_type = type;
......
/************************************************************************** /**************************************************************************
* *
* Copyright (c) 2006-2022 VMware, Inc., Palo Alto, CA., USA * Copyright (c) 2006-2023 VMware, Inc., Palo Alto, CA., USA
* All Rights Reserved. * All Rights Reserved.
* *
* Permission is hereby granted, free of charge, to any person obtaining a * Permission is hereby granted, free of charge, to any person obtaining a
...@@ -288,7 +288,6 @@ extern void ttm_object_device_release(struct ttm_object_device **p_tdev); ...@@ -288,7 +288,6 @@ extern void ttm_object_device_release(struct ttm_object_device **p_tdev);
extern int ttm_prime_object_init(struct ttm_object_file *tfile, extern int ttm_prime_object_init(struct ttm_object_file *tfile,
size_t size, size_t size,
struct ttm_prime_object *prime, struct ttm_prime_object *prime,
bool shareable,
enum ttm_object_type type, enum ttm_object_type type,
void (*refcount_release) void (*refcount_release)
(struct ttm_base_object **)); (struct ttm_base_object **));
......
...@@ -832,8 +832,6 @@ int vmw_surface_define_ioctl(struct drm_device *dev, void *data, ...@@ -832,8 +832,6 @@ int vmw_surface_define_ioctl(struct drm_device *dev, void *data,
srf->snooper.image = NULL; srf->snooper.image = NULL;
} }
user_srf->prime.base.shareable = false;
user_srf->prime.base.tfile = NULL;
if (drm_is_primary_client(file_priv)) if (drm_is_primary_client(file_priv))
user_srf->master = drm_file_get_master(file_priv); user_srf->master = drm_file_get_master(file_priv);
...@@ -847,10 +845,10 @@ int vmw_surface_define_ioctl(struct drm_device *dev, void *data, ...@@ -847,10 +845,10 @@ int vmw_surface_define_ioctl(struct drm_device *dev, void *data,
goto out_unlock; goto out_unlock;
/* /*
* A gb-aware client referencing a shared surface will * A gb-aware client referencing a surface will expect a backup
* expect a backup buffer to be present. * buffer to be present.
*/ */
if (dev_priv->has_mob && req->shareable) { if (dev_priv->has_mob) {
struct vmw_bo_params params = { struct vmw_bo_params params = {
.domain = VMW_BO_DOMAIN_SYS, .domain = VMW_BO_DOMAIN_SYS,
.busy_domain = VMW_BO_DOMAIN_SYS, .busy_domain = VMW_BO_DOMAIN_SYS,
...@@ -869,8 +867,9 @@ int vmw_surface_define_ioctl(struct drm_device *dev, void *data, ...@@ -869,8 +867,9 @@ int vmw_surface_define_ioctl(struct drm_device *dev, void *data,
} }
tmp = vmw_resource_reference(&srf->res); tmp = vmw_resource_reference(&srf->res);
ret = ttm_prime_object_init(tfile, res->guest_memory_size, &user_srf->prime, ret = ttm_prime_object_init(tfile, res->guest_memory_size,
req->shareable, VMW_RES_SURFACE, &user_srf->prime,
VMW_RES_SURFACE,
&vmw_user_surface_base_release); &vmw_user_surface_base_release);
if (unlikely(ret != 0)) { if (unlikely(ret != 0)) {
...@@ -1549,8 +1548,6 @@ vmw_gb_surface_define_internal(struct drm_device *dev, ...@@ -1549,8 +1548,6 @@ vmw_gb_surface_define_internal(struct drm_device *dev,
tmp = vmw_resource_reference(res); tmp = vmw_resource_reference(res);
ret = ttm_prime_object_init(tfile, res->guest_memory_size, &user_srf->prime, ret = ttm_prime_object_init(tfile, res->guest_memory_size, &user_srf->prime,
req->base.drm_surface_flags &
drm_vmw_surface_flag_shareable,
VMW_RES_SURFACE, VMW_RES_SURFACE,
&vmw_user_surface_base_release); &vmw_user_surface_base_release);
...@@ -2052,8 +2049,6 @@ int vmw_gb_surface_define(struct vmw_private *dev_priv, ...@@ -2052,8 +2049,6 @@ int vmw_gb_surface_define(struct vmw_private *dev_priv,
} }
*srf_out = &user_srf->srf; *srf_out = &user_srf->srf;
user_srf->prime.base.shareable = false;
user_srf->prime.base.tfile = NULL;
srf = &user_srf->srf; srf = &user_srf->srf;
srf->metadata = *req; srf->metadata = *req;
......
/************************************************************************** /**************************************************************************
* *
* Copyright © 2009-2022 VMware, Inc., Palo Alto, CA., USA * Copyright © 2009-2023 VMware, Inc., Palo Alto, CA., USA
* All Rights Reserved. * All Rights Reserved.
* *
* Permission is hereby granted, free of charge, to any person obtaining a * Permission is hereby granted, free of charge, to any person obtaining a
...@@ -902,7 +902,8 @@ struct drm_vmw_shader_arg { ...@@ -902,7 +902,8 @@ struct drm_vmw_shader_arg {
/** /**
* enum drm_vmw_surface_flags * enum drm_vmw_surface_flags
* *
* @drm_vmw_surface_flag_shareable: Whether the surface is shareable * @drm_vmw_surface_flag_shareable: Deprecated - all userspace surfaces are
* shareable.
* @drm_vmw_surface_flag_scanout: Whether the surface is a scanout * @drm_vmw_surface_flag_scanout: Whether the surface is a scanout
* surface. * surface.
* @drm_vmw_surface_flag_create_buffer: Create a backup buffer if none is * @drm_vmw_surface_flag_create_buffer: Create a backup buffer if none is
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment