For the same reasons as using stolen memory for DPT, it's also a bad
idea for framebuffers. Allocate new framebuffers always in system memory
when we don't inherit them, and prohibit inheriting stolen framebuffers
when CONFIG_PREEMPT_RT is enabled.

Signed-off-by: Maarten Lankhorst <[email protected]>
---
 drivers/gpu/drm/xe/display/xe_display_bo.c | 35 +++++-----------------
 1 file changed, 7 insertions(+), 28 deletions(-)

diff --git a/drivers/gpu/drm/xe/display/xe_display_bo.c 
b/drivers/gpu/drm/xe/display/xe_display_bo.c
index 7fbac223b0977..5b54d247cb212 100644
--- a/drivers/gpu/drm/xe/display/xe_display_bo.c
+++ b/drivers/gpu/drm/xe/display/xe_display_bo.c
@@ -127,7 +127,7 @@ bool xe_display_bo_fbdev_prefer_stolen(struct xe_device 
*xe, unsigned int size)
        if (!stolen)
                return false;
 
-       if (IS_DGFX(xe))
+       if (IS_DGFX(xe) || IS_ENABLED(CONFIG_PREEMPT_RT))
                return false;
 
        if (XE_DEVICE_WA(xe, 22019338487_display))
@@ -146,33 +146,12 @@ static struct drm_gem_object 
*xe_display_bo_fbdev_create(struct drm_device *drm,
        struct xe_device *xe = to_xe_device(drm);
        struct xe_bo *obj;
 
-       obj = ERR_PTR(-ENODEV);
-
-       if (xe_display_bo_fbdev_prefer_stolen(xe, size)) {
-               obj = xe_bo_create_pin_map_novm(xe, xe_device_get_root_tile(xe),
-                                               size,
-                                               ttm_bo_type_kernel,
-                                               XE_BO_FLAG_FORCE_WC |
-                                               XE_BO_FLAG_STOLEN |
-                                               XE_BO_FLAG_GGTT,
-                                               false);
-               if (!IS_ERR(obj))
-                       drm_info(&xe->drm, "Allocated fbdev into stolen\n");
-               else
-                       drm_info(&xe->drm, "Allocated fbdev into stolen failed: 
%li\n", PTR_ERR(obj));
-       } else {
-               drm_info(&xe->drm, "Allocating fbdev: Stolen memory not 
preferred.\n");
-       }
-
-       if (IS_ERR(obj)) {
-               obj = xe_bo_create_pin_map_novm(xe, 
xe_device_get_root_tile(xe), size,
-                                               ttm_bo_type_kernel,
-                                               XE_BO_FLAG_FORCE_WC |
-                                               
XE_BO_FLAG_VRAM_IF_DGFX(xe_device_get_root_tile(xe)) |
-                                               XE_BO_FLAG_GGTT,
-                                               false);
-       }
-
+       obj = xe_bo_create_pin_map_novm(xe, xe_device_get_root_tile(xe), size,
+                                       ttm_bo_type_kernel,
+                                       XE_BO_FLAG_FORCE_WC |
+                                       
XE_BO_FLAG_VRAM_IF_DGFX(xe_device_get_root_tile(xe)) |
+                                       XE_BO_FLAG_GGTT,
+                                       false);
        if (IS_ERR(obj)) {
                drm_err(&xe->drm, "failed to allocate framebuffer (%pe)\n", 
obj);
                return ERR_PTR(-ENOMEM);
-- 
2.53.0

Reply via email to