Message ID | 20230927172849.193996-4-jfalempe@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm/panic: Add a drm panic handler | expand |
Hi Am 27.09.23 um 19:22 schrieb Jocelyn Falempe: > Add support for the drm_panic module, which displays a user-friendly > message to the screen when a kernel panic occurs. > > Signed-off-by: Jocelyn Falempe <jfalempe@redhat.com> > --- > drivers/gpu/drm/tiny/simpledrm.c | 17 +++++++++++++++++ > 1 file changed, 17 insertions(+) > > diff --git a/drivers/gpu/drm/tiny/simpledrm.c b/drivers/gpu/drm/tiny/simpledrm.c > index 25e11ef11c4c..f0454b58ead3 100644 > --- a/drivers/gpu/drm/tiny/simpledrm.c > +++ b/drivers/gpu/drm/tiny/simpledrm.c > @@ -23,6 +23,7 @@ > #include <drm/drm_gem_shmem_helper.h> > #include <drm/drm_managed.h> > #include <drm/drm_modeset_helper_vtables.h> > +#include <drm/drm_panic.h> > #include <drm/drm_plane_helper.h> > #include <drm/drm_probe_helper.h> > > @@ -838,10 +839,24 @@ static struct simpledrm_device *simpledrm_device_create(struct drm_driver *drv, > return ERR_PTR(ret); > > drm_mode_config_reset(dev); > + drm_panic_register(dev); These calls should be part of drm_device_register(). Everything should work transparently to the driver until DRM panic actually calls the get_scanout_buffer callback. Best regards Thomas > > return sdev; > } > > +static int simpledrm_get_scanout_buffer(struct drm_device *dev, > + struct drm_scanout_buffer *sb) > +{ > + struct simpledrm_device *sdev = simpledrm_device_of_dev(dev); > + > + sb->width = sdev->mode.hdisplay; > + sb->height = sdev->mode.vdisplay; > + sb->pitch = sdev->pitch; > + sb->format = sdev->format; > + sb->map = sdev->screen_base; > + return 0; > +} > + > /* > * DRM driver > */ > @@ -857,6 +872,7 @@ static struct drm_driver simpledrm_driver = { > .minor = DRIVER_MINOR, > .driver_features = DRIVER_ATOMIC | DRIVER_GEM | DRIVER_MODESET, > .fops = &simpledrm_fops, > + .get_scanout_buffer = simpledrm_get_scanout_buffer, > }; > > /* > @@ -894,6 +910,7 @@ static int simpledrm_remove(struct platform_device *pdev) > struct drm_device *dev = &sdev->dev; > > drm_dev_unplug(dev); > + drm_panic_unregister(dev); > > return 0; > }
diff --git a/drivers/gpu/drm/tiny/simpledrm.c b/drivers/gpu/drm/tiny/simpledrm.c index 25e11ef11c4c..f0454b58ead3 100644 --- a/drivers/gpu/drm/tiny/simpledrm.c +++ b/drivers/gpu/drm/tiny/simpledrm.c @@ -23,6 +23,7 @@ #include <drm/drm_gem_shmem_helper.h> #include <drm/drm_managed.h> #include <drm/drm_modeset_helper_vtables.h> +#include <drm/drm_panic.h> #include <drm/drm_plane_helper.h> #include <drm/drm_probe_helper.h> @@ -838,10 +839,24 @@ static struct simpledrm_device *simpledrm_device_create(struct drm_driver *drv, return ERR_PTR(ret); drm_mode_config_reset(dev); + drm_panic_register(dev); return sdev; } +static int simpledrm_get_scanout_buffer(struct drm_device *dev, + struct drm_scanout_buffer *sb) +{ + struct simpledrm_device *sdev = simpledrm_device_of_dev(dev); + + sb->width = sdev->mode.hdisplay; + sb->height = sdev->mode.vdisplay; + sb->pitch = sdev->pitch; + sb->format = sdev->format; + sb->map = sdev->screen_base; + return 0; +} + /* * DRM driver */ @@ -857,6 +872,7 @@ static struct drm_driver simpledrm_driver = { .minor = DRIVER_MINOR, .driver_features = DRIVER_ATOMIC | DRIVER_GEM | DRIVER_MODESET, .fops = &simpledrm_fops, + .get_scanout_buffer = simpledrm_get_scanout_buffer, }; /* @@ -894,6 +910,7 @@ static int simpledrm_remove(struct platform_device *pdev) struct drm_device *dev = &sdev->dev; drm_dev_unplug(dev); + drm_panic_unregister(dev); return 0; }
Add support for the drm_panic module, which displays a user-friendly message to the screen when a kernel panic occurs. Signed-off-by: Jocelyn Falempe <jfalempe@redhat.com> --- drivers/gpu/drm/tiny/simpledrm.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+)