Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/{i915,xe}/panic: pass struct intel_panic to intel_panic_setup()

Reduce the struct intel_framebuffer usage within the panic
implementation.

Cc: Jocelyn Falempe <jfalempe@redhat.com>
Cc: Maarten Lankhorst <dev@lankhorst.se>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com>
Link: https://lore.kernel.org/r/2a016167b1f6f0b432aed0a630f9dbcd07fadb7b.1756835342.git.jani.nikula@intel.com

+18 -14
+9 -2
drivers/gpu/drm/i915/display/intel_panic.c
··· 1 1 // SPDX-License-Identifier: MIT 2 2 /* Copyright © 2025 Intel Corporation */ 3 3 4 + #include <drm/drm_panic.h> 5 + 4 6 #include "gem/i915_gem_object.h" 7 + #include "intel_display_types.h" 8 + #include "intel_fb.h" 5 9 #include "intel_panic.h" 6 10 7 11 struct intel_panic *intel_panic_alloc(void) ··· 13 9 return i915_gem_object_alloc_panic(); 14 10 } 15 11 16 - int intel_panic_setup(struct drm_scanout_buffer *sb) 12 + int intel_panic_setup(struct intel_panic *panic, struct drm_scanout_buffer *sb) 17 13 { 18 - return i915_gem_object_panic_setup(sb); 14 + struct intel_framebuffer *fb = sb->private; 15 + struct drm_gem_object *obj = intel_fb_bo(&fb->base); 16 + 17 + return i915_gem_object_panic_setup(panic, sb, obj, fb->panic_tiling); 19 18 } 20 19 21 20 void intel_panic_finish(struct intel_panic *panic)
+1 -1
drivers/gpu/drm/i915/display/intel_panic.h
··· 8 8 struct intel_panic; 9 9 10 10 struct intel_panic *intel_panic_alloc(void); 11 - int intel_panic_setup(struct drm_scanout_buffer *sb); 11 + int intel_panic_setup(struct intel_panic *panic, struct drm_scanout_buffer *sb); 12 12 void intel_panic_finish(struct intel_panic *panic); 13 13 14 14 #endif /* __INTEL_PANIC_H__ */
+1 -1
drivers/gpu/drm/i915/display/intel_plane.c
··· 1409 1409 return -EOPNOTSUPP; 1410 1410 } 1411 1411 sb->private = intel_fb; 1412 - ret = intel_panic_setup(sb); 1412 + ret = intel_panic_setup(intel_fb->panic, sb); 1413 1413 if (ret) 1414 1414 return ret; 1415 1415 }
+2 -1
drivers/gpu/drm/i915/gem/i915_gem_object.h
··· 694 694 int i915_gem_object_truncate(struct drm_i915_gem_object *obj); 695 695 696 696 struct intel_panic *i915_gem_object_alloc_panic(void); 697 - int i915_gem_object_panic_setup(struct drm_scanout_buffer *sb); 697 + int i915_gem_object_panic_setup(struct intel_panic *panic, struct drm_scanout_buffer *sb, 698 + struct drm_gem_object *_obj, bool panic_tiling); 698 699 void i915_gem_object_panic_finish(struct intel_panic *panic); 699 700 700 701 /**
+4 -5
drivers/gpu/drm/i915/gem/i915_gem_pages.c
··· 445 445 * Use current vaddr if it exists, or setup a list of pages. 446 446 * pfn is not supported yet. 447 447 */ 448 - int i915_gem_object_panic_setup(struct drm_scanout_buffer *sb) 448 + int i915_gem_object_panic_setup(struct intel_panic *panic, struct drm_scanout_buffer *sb, 449 + struct drm_gem_object *_obj, bool panic_tiling) 449 450 { 450 451 enum i915_map_type has_type; 451 - struct intel_framebuffer *fb = (struct intel_framebuffer *)sb->private; 452 - struct intel_panic *panic = fb->panic; 453 - struct drm_i915_gem_object *obj = to_intel_bo(intel_fb_bo(&fb->base)); 452 + struct drm_i915_gem_object *obj = to_intel_bo(_obj); 454 453 void *ptr; 455 454 456 455 ptr = page_unpack_bits(obj->mm.mapping, &has_type); ··· 459 460 else 460 461 iosys_map_set_vaddr(&sb->map[0], ptr); 461 462 462 - if (fb->panic_tiling) 463 + if (panic_tiling) 463 464 sb->set_pixel = i915_gem_object_panic_map_set_pixel; 464 465 return 0; 465 466 }
+1 -4
drivers/gpu/drm/xe/display/xe_panic.c
··· 66 66 return panic; 67 67 } 68 68 69 - int intel_panic_setup(struct drm_scanout_buffer *sb) 69 + int intel_panic_setup(struct intel_panic *panic, struct drm_scanout_buffer *sb) 70 70 { 71 - struct intel_framebuffer *fb = (struct intel_framebuffer *)sb->private; 72 - struct intel_panic *panic = fb->panic; 73 - 74 71 panic->page = -1; 75 72 sb->set_pixel = xe_panic_page_set_pixel; 76 73 return 0;