mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 04:34:03 +02:00
drm/xe/display: Do not allocate into stolen for new framebuffers.
Prefer to use system memory for global framebuffers, and reserve the space for FBC use only. Now that multiple CRTC's can use FBC's, the simple heuristic of using less than half of stolen is no longer sufficient. Additionally, there are reports of system hangs when using stolen memory, and there are also various workarounds that are avoided by using system memory instead. Link: https://gitlab.freedesktop.org/drm/xe/kernel/-/work_items/7513 Reviewed-by: Matthew Auld <matthew.auld@intel.com> Link: https://patch.msgid.link/20260630135523.1775379-4-dev@lankhorst.se Signed-off-by: Maarten Lankhorst <dev@lankhorst.se> Acked-by: Matthew Brost <matthew.brost@intel.com> #teams
This commit is contained in:
parent
a196406a38
commit
0687ec06f5
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user