]> www.infradead.org Git - users/hch/misc.git/commitdiff
drm/{i915,xe}/fb: add panic pointer member to struct intel_framebuffer
authorJani Nikula <jani.nikula@intel.com>
Tue, 2 Sep 2025 17:51:50 +0000 (20:51 +0300)
committerJani Nikula <jani.nikula@intel.com>
Mon, 8 Sep 2025 11:23:46 +0000 (14:23 +0300)
Add a panic data pointer member in struct intel_framebuffer in
preparation for breaking the artificial subclassing between
intel_framebuffer and panic structures.

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/41f42e1de8545409274d54854aa12e0fb390e394.1756835342.git.jani.nikula@intel.com
drivers/gpu/drm/i915/display/intel_display_types.h
drivers/gpu/drm/i915/gem/i915_gem_pages.c
drivers/gpu/drm/xe/display/xe_panic.c

index fd9d2527889b482bf5db57abdff7f05737491d54..608fd69af6570b85c4691324d0808dcb9ff12bae 100644 (file)
@@ -149,6 +149,7 @@ struct intel_framebuffer {
        unsigned int vtd_guard;
 
        unsigned int (*panic_tiling)(unsigned int x, unsigned int y, unsigned int width);
+       void *panic;
 };
 
 enum intel_hotplug_state {
index c16a57160b2623493f095efec89ba16a9d457e89..c54ed1b33e6014c8b2d3605b8baba6e74067b09d 100644 (file)
@@ -368,11 +368,6 @@ struct i915_framebuffer {
        struct i915_panic_data panic;
 };
 
-static inline struct i915_panic_data *to_i915_panic_data(struct intel_framebuffer *fb)
-{
-       return &container_of_const(fb, struct i915_framebuffer, base)->panic;
-}
-
 static void i915_panic_kunmap(struct i915_panic_data *panic)
 {
        if (panic->vaddr) {
@@ -420,7 +415,7 @@ static void i915_gem_object_panic_page_set_pixel(struct drm_scanout_buffer *sb,
        unsigned int new_page;
        unsigned int offset;
        struct intel_framebuffer *fb = (struct intel_framebuffer *)sb->private;
-       struct i915_panic_data *panic = to_i915_panic_data(fb);
+       struct i915_panic_data *panic = fb->panic;
 
        if (fb->panic_tiling)
                offset = fb->panic_tiling(sb->width, x, y);
@@ -446,9 +441,12 @@ struct intel_framebuffer *i915_gem_object_alloc_framebuffer(void)
        struct i915_framebuffer *i915_fb;
 
        i915_fb = kzalloc(sizeof(*i915_fb), GFP_KERNEL);
-       if (i915_fb)
-               return &i915_fb->base;
-       return NULL;
+       if (!i915_fb)
+               return NULL;
+
+       i915_fb->base.panic = &i915_fb->panic;
+
+       return &i915_fb->base;
 }
 
 /*
@@ -460,7 +458,7 @@ int i915_gem_object_panic_setup(struct drm_scanout_buffer *sb)
 {
        enum i915_map_type has_type;
        struct intel_framebuffer *fb = (struct intel_framebuffer *)sb->private;
-       struct i915_panic_data *panic = to_i915_panic_data(fb);
+       struct i915_panic_data *panic = fb->panic;
        struct drm_i915_gem_object *obj = to_intel_bo(intel_fb_bo(&fb->base));
        void *ptr;
 
@@ -488,7 +486,7 @@ int i915_gem_object_panic_setup(struct drm_scanout_buffer *sb)
 
 void i915_gem_object_panic_finish(struct intel_framebuffer *fb)
 {
-       struct i915_panic_data *panic = to_i915_panic_data(fb);
+       struct i915_panic_data *panic = fb->panic;
 
        i915_panic_kunmap(panic);
        panic->page = -1;
index 18b27a06b26015b2ceb0cf3cf4cb8dd80e105a6a..fc1804d330e4a223762373bbd3dfb4de17a847f8 100644 (file)
@@ -20,11 +20,6 @@ struct xe_framebuffer {
        struct xe_panic_data panic;
 };
 
-static inline struct xe_panic_data *to_xe_panic_data(struct intel_framebuffer *fb)
-{
-       return &container_of_const(fb, struct xe_framebuffer, base)->panic;
-}
-
 static void xe_panic_kunmap(struct xe_panic_data *panic)
 {
        if (panic->vaddr) {
@@ -43,7 +38,7 @@ static void xe_panic_page_set_pixel(struct drm_scanout_buffer *sb, unsigned int
                                    unsigned int y, u32 color)
 {
        struct intel_framebuffer *fb = (struct intel_framebuffer *)sb->private;
-       struct xe_panic_data *panic = to_xe_panic_data(fb);
+       struct xe_panic_data *panic = fb->panic;
        struct xe_bo *bo = gem_to_xe_bo(intel_fb_bo(&fb->base));
        unsigned int new_page;
        unsigned int offset;
@@ -72,15 +67,18 @@ struct intel_framebuffer *intel_bo_alloc_framebuffer(void)
        struct xe_framebuffer *xe_fb;
 
        xe_fb = kzalloc(sizeof(*xe_fb), GFP_KERNEL);
-       if (xe_fb)
-               return &xe_fb->base;
-       return NULL;
+       if (!xe_fb)
+               return NULL;
+
+       xe_fb->base.panic = &xe_fb->panic;
+
+       return &xe_fb->base;
 }
 
 int intel_panic_setup(struct drm_scanout_buffer *sb)
 {
        struct intel_framebuffer *fb = (struct intel_framebuffer *)sb->private;
-       struct xe_panic_data *panic = to_xe_panic_data(fb);
+       struct xe_panic_data *panic = fb->panic;
 
        panic->page = -1;
        sb->set_pixel = xe_panic_page_set_pixel;
@@ -89,7 +87,7 @@ int intel_panic_setup(struct drm_scanout_buffer *sb)
 
 void intel_panic_finish(struct intel_framebuffer *fb)
 {
-       struct xe_panic_data *panic = to_xe_panic_data(fb);
+       struct xe_panic_data *panic = fb->panic;
 
        xe_panic_kunmap(panic);
        panic->page = -1;