drm/vmwgfx: Make all surfaces shareable
authorMaaz Mombasawala <maaz.mombasawala@broadcom.com>
Fri, 26 Jan 2024 20:08:01 +0000 (15:08 -0500)
committerZack Rusin <zack.rusin@broadcom.com>
Tue, 30 Jan 2024 19:18:18 +0000 (14:18 -0500)
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: Maaz Mombasawala <maaz.mombasawala@broadcom.com>
Reviewed-by: Martin Krastev <martin.krastev@broadcom.com>
Signed-off-by: Zack Rusin <zack.rusin@broadcom.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240126200804.732454-3-zack.rusin@broadcom.com
drivers/gpu/drm/vmwgfx/ttm_object.c
drivers/gpu/drm/vmwgfx/ttm_object.h
drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
include/uapi/drm/vmwgfx_drm.h

index ddf8373c1d779c5610689f0b430a9632150fbfd6..6806c05e57f6770578422801989c1ba73d706c7c 100644 (file)
@@ -1,7 +1,7 @@
 /* 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.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
@@ -648,7 +648,6 @@ out_unref:
  * @tfile: struct ttm_object_file identifying the caller
  * @size: The size of the dma_bufs we export.
  * @prime: The object to be initialized.
- * @shareable: See ttm_base_object_init
  * @type: See ttm_base_object_init
  * @refcount_release: See ttm_base_object_init
  *
@@ -656,10 +655,11 @@ out_unref:
  * for data sharing between processes and devices.
  */
 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,
                          void (*refcount_release) (struct ttm_base_object **))
 {
+       bool shareable = !!(type == VMW_RES_SURFACE);
        mutex_init(&prime->mutex);
        prime->size = PAGE_ALIGN(size);
        prime->real_type = type;
index e6b77ee33e559b048ca35cac68a778d569c8adb3..573e038c0fab5c838ce24f639d0e4065a9470226 100644 (file)
@@ -1,6 +1,6 @@
 /**************************************************************************
  *
- * Copyright (c) 2006-2022 VMware, Inc., Palo Alto, CA., USA
+ * Copyright (c) 2006-2023 VMware, Inc., Palo Alto, CA., USA
  * All Rights Reserved.
  *
  * 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);
 extern int ttm_prime_object_init(struct ttm_object_file *tfile,
                                 size_t size,
                                 struct ttm_prime_object *prime,
-                                bool shareable,
                                 enum ttm_object_type type,
                                 void (*refcount_release)
                                 (struct ttm_base_object **));
index 10498725034cb102a530cbee0fec9ebeabea7052..e7a744dfcecfd4837a0b50aaa449f329990356c8 100644 (file)
@@ -832,8 +832,6 @@ int vmw_surface_define_ioctl(struct drm_device *dev, void *data,
                srf->snooper.image = NULL;
        }
 
-       user_srf->prime.base.shareable = false;
-       user_srf->prime.base.tfile = NULL;
        if (drm_is_primary_client(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,
                goto out_unlock;
 
        /*
-        * A gb-aware client referencing a shared surface will
-        * expect a backup buffer to be present.
+        * A gb-aware client referencing a surface will expect a backup
+        * buffer to be present.
         */
-       if (dev_priv->has_mob && req->shareable) {
+       if (dev_priv->has_mob) {
                struct vmw_bo_params params = {
                        .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,
        }
 
        tmp = vmw_resource_reference(&srf->res);
-       ret = ttm_prime_object_init(tfile, res->guest_memory_size, &user_srf->prime,
-                                   req->shareable, VMW_RES_SURFACE,
+       ret = ttm_prime_object_init(tfile, res->guest_memory_size,
+                                   &user_srf->prime,
+                                   VMW_RES_SURFACE,
                                    &vmw_user_surface_base_release);
 
        if (unlikely(ret != 0)) {
@@ -1549,8 +1548,6 @@ vmw_gb_surface_define_internal(struct drm_device *dev,
 
        tmp = vmw_resource_reference(res);
        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_user_surface_base_release);
 
@@ -2052,8 +2049,6 @@ int vmw_gb_surface_define(struct vmw_private *dev_priv,
        }
 
        *srf_out  = &user_srf->srf;
-       user_srf->prime.base.shareable = false;
-       user_srf->prime.base.tfile = NULL;
 
        srf = &user_srf->srf;
        srf->metadata = *req;
index 26549c86a91f72c5f08bbcb5c8854f24450d8b26..26d96fecb902e929e7dae1db6d760c12d07afd0b 100644 (file)
@@ -1,6 +1,6 @@
 /**************************************************************************
  *
- * Copyright © 2009-2022 VMware, Inc., Palo Alto, CA., USA
+ * Copyright © 2009-2023 VMware, Inc., Palo Alto, CA., USA
  * All Rights Reserved.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
@@ -902,7 +902,8 @@ struct drm_vmw_shader_arg {
 /**
  * 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
  *                                      surface.
  * @drm_vmw_surface_flag_create_buffer: Create a backup buffer if none is