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 <jfale...@redhat.com> Cc: Maarten Lankhorst <d...@lankhorst.se> Signed-off-by: Jani Nikula <jani.nik...@intel.com> --- .../drm/i915/display/intel_display_types.h | 1 + drivers/gpu/drm/i915/gem/i915_gem_pages.c | 20 +++++++++---------- drivers/gpu/drm/xe/display/xe_panic.c | 20 +++++++++---------- 3 files changed, 19 insertions(+), 22 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h index fd9d2527889b..608fd69af657 100644 --- a/drivers/gpu/drm/i915/display/intel_display_types.h +++ b/drivers/gpu/drm/i915/display/intel_display_types.h @@ -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 { diff --git a/drivers/gpu/drm/i915/gem/i915_gem_pages.c b/drivers/gpu/drm/i915/gem/i915_gem_pages.c index c16a57160b26..c54ed1b33e60 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_pages.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_pages.c @@ -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; diff --git a/drivers/gpu/drm/xe/display/xe_panic.c b/drivers/gpu/drm/xe/display/xe_panic.c index 18b27a06b260..fc1804d330e4 100644 --- a/drivers/gpu/drm/xe/display/xe_panic.c +++ b/drivers/gpu/drm/xe/display/xe_panic.c @@ -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; -- 2.47.2