On 21/10/2025 15:11, Thomas Hellström wrote:
On Mon, 2025-10-20 at 12:54 +0100, Tvrtko Ursulin wrote:
Some graphics APIs differentiate between out-of-graphics-memory and
out-of-host-memory (system memory). Add a device init flag to have -
ENOSPC
propagated from the resource managers instead of being converted to
-ENOMEM, to aid driver stacks in determining what error code to
return or
whether corrective action can be taken at the driver level.

Co-developed-by: Thomas Hellström <[email protected]>
Cc: Christian König <[email protected]>
Cc: Matthew Brost <[email protected]>
Signed-off-by: Tvrtko Ursulin <[email protected]>
---
Thomas, feel free to take the ownership if you end up liking this
version.
As you can see I lifted your commit text as is and the implementation
is
the same on the high level.

Let's keep it like this. Thanks for doing this. I'll follow up with
xeKMD change once this gets backmerged.

FWIW:
Reviewed-by: Thomas Hellström <[email protected]>

Thanks!

Before being able to merge I will however need:

 * Someone to r-b patch 2/6.
 * Christian to check if I can upgrade his r-b to v2 on patches 2, 4 and 6.
* Maybe not strictly required since all go via drm-misc, but 3/6 could use acks from more driver owners.

Regards,

Tvrtko

---
  drivers/gpu/drm/ttm/ttm_bo.c     | 4 +++-
  drivers/gpu/drm/ttm/ttm_device.c | 1 +
  include/drm/ttm/ttm_allocation.h | 1 +
  include/drm/ttm/ttm_device.h     | 5 +++++
  4 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/ttm/ttm_bo.c
b/drivers/gpu/drm/ttm/ttm_bo.c
index fba2a68a556e..15b3cb199d45 100644
--- a/drivers/gpu/drm/ttm/ttm_bo.c
+++ b/drivers/gpu/drm/ttm/ttm_bo.c
@@ -31,6 +31,7 @@
 #define pr_fmt(fmt) "[TTM] " fmt +#include <drm/ttm/ttm_allocation.h>
  #include <drm/ttm/ttm_bo.h>
  #include <drm/ttm/ttm_placement.h>
  #include <drm/ttm/ttm_tt.h>
@@ -877,7 +878,8 @@ int ttm_bo_validate(struct ttm_buffer_object *bo,
  /* For backward compatibility with userspace */
        if (ret == -ENOSPC)
-               return -ENOMEM;
+               return bo->bdev->alloc_flags &
TTM_ALLOCATION_PROPAGATE_ENOSPC ?
+                      ret : -ENOMEM;
  /*
         * We might need to add a TTM.
diff --git a/drivers/gpu/drm/ttm/ttm_device.c
b/drivers/gpu/drm/ttm/ttm_device.c
index 87c85ccb21ac..5c10e5fbf43b 100644
--- a/drivers/gpu/drm/ttm/ttm_device.c
+++ b/drivers/gpu/drm/ttm/ttm_device.c
@@ -227,6 +227,7 @@ int ttm_device_init(struct ttm_device *bdev,
const struct ttm_device_funcs *func
                return -ENOMEM;
        }
+ bdev->alloc_flags = alloc_flags;
        bdev->funcs = funcs;
  ttm_sys_man_init(bdev);
diff --git a/include/drm/ttm/ttm_allocation.h
b/include/drm/ttm/ttm_allocation.h
index 8f8544760306..655d1e44aba7 100644
--- a/include/drm/ttm/ttm_allocation.h
+++ b/include/drm/ttm/ttm_allocation.h
@@ -7,5 +7,6 @@
  #define TTM_ALLOCATION_POOL_BENEFICIAL_ORDER(n)       ((n) & 0xff)
/* Max order which caller can benefit from */
  #define TTM_ALLOCATION_POOL_USE_DMA_ALLOC     BIT(8) /* Use
coherent DMA allocations. */
  #define TTM_ALLOCATION_POOL_USE_DMA32         BIT(9) /* Use
GFP_DMA32 allocations. */
+#define TTM_ALLOCATION_PROPAGATE_ENOSPC                BIT(10) /*
Do not convert ENOSPC from resource managers to ENOMEM. */
 #endif
diff --git a/include/drm/ttm/ttm_device.h
b/include/drm/ttm/ttm_device.h
index 074b98572275..d016360e5ceb 100644
--- a/include/drm/ttm/ttm_device.h
+++ b/include/drm/ttm/ttm_device.h
@@ -220,6 +220,11 @@ struct ttm_device {
         */
        struct list_head device_list;
+ /**
+        * @alloc_flags: TTM_ALLOCATION_ flags.
+        */
+       unsigned int alloc_flags;
+
        /**
         * @funcs: Function table for the device.
         * Constant after bo device init


Reply via email to