* [PATCH drm-next] drm/bochs: Add support for drm_panic @ 2025-06-13 13:20 Ryosuke Yasuoka 2025-06-19 6:12 ` Jocelyn Falempe ` (2 more replies) 0 siblings, 3 replies; 11+ messages in thread From: Ryosuke Yasuoka @ 2025-06-13 13:20 UTC (permalink / raw) To: kraxel, maarten.lankhorst, mripard, tzimmermann, airlied, simona, jfalempe Cc: Ryosuke Yasuoka, virtualization, linux-kernel, dri-devel Add drm_panic moudle for bochs drm so that panic screen can be displayed on panic. Signed-off-by: Ryosuke Yasuoka <ryasuoka@redhat.com> --- drivers/gpu/drm/tiny/bochs.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/drivers/gpu/drm/tiny/bochs.c b/drivers/gpu/drm/tiny/bochs.c index 8706763af8fb..ed42ad5c4927 100644 --- a/drivers/gpu/drm/tiny/bochs.c +++ b/drivers/gpu/drm/tiny/bochs.c @@ -19,6 +19,7 @@ #include <drm/drm_gem_shmem_helper.h> #include <drm/drm_managed.h> #include <drm/drm_module.h> +#include <drm/drm_panic.h> #include <drm/drm_plane_helper.h> #include <drm/drm_probe_helper.h> @@ -469,10 +470,28 @@ static void bochs_primary_plane_helper_atomic_update(struct drm_plane *plane, bochs_hw_setformat(bochs, fb->format); } +static int bochs_primary_plane_helper_get_scanout_buffer(struct drm_plane *plane, + struct drm_scanout_buffer *sb) +{ + struct bochs_device *bochs = to_bochs_device(plane->dev); + struct iosys_map map = IOSYS_MAP_INIT_VADDR_IOMEM(bochs->fb_map); + + if (plane->state && plane->state->fb) { + sb->format = plane->state->fb->format; + sb->width = plane->state->fb->width; + sb->height = plane->state->fb->height; + sb->pitch[0] = plane->state->fb->pitches[0]; + sb->map[0] = map; + return 0; + } + return -ENODEV; +} + static const struct drm_plane_helper_funcs bochs_primary_plane_helper_funcs = { DRM_GEM_SHADOW_PLANE_HELPER_FUNCS, .atomic_check = bochs_primary_plane_helper_atomic_check, .atomic_update = bochs_primary_plane_helper_atomic_update, + .get_scanout_buffer = bochs_primary_plane_helper_get_scanout_buffer, }; static const struct drm_plane_funcs bochs_primary_plane_funcs = { base-commit: 19272b37aa4f83ca52bdf9c16d5d81bdd1354494 -- 2.49.0 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH drm-next] drm/bochs: Add support for drm_panic 2025-06-13 13:20 [PATCH drm-next] drm/bochs: Add support for drm_panic Ryosuke Yasuoka @ 2025-06-19 6:12 ` Jocelyn Falempe 2025-06-19 6:37 ` Ryosuke Yasuoka 2025-06-23 10:12 ` Jocelyn Falempe 2025-07-14 0:04 ` Askar Safin 2 siblings, 1 reply; 11+ messages in thread From: Jocelyn Falempe @ 2025-06-19 6:12 UTC (permalink / raw) To: Ryosuke Yasuoka, kraxel, maarten.lankhorst, mripard, tzimmermann, airlied, simona Cc: virtualization, linux-kernel, dri-devel On 13/06/2025 15:20, Ryosuke Yasuoka wrote: > Add drm_panic moudle for bochs drm so that panic screen can be displayed > on panic. Thanks for the patch, it's simple and looks good to me. Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com> If no objections, I will push it next Monday. Best regards, -- Jocelyn > > Signed-off-by: Ryosuke Yasuoka <ryasuoka@redhat.com> > --- > drivers/gpu/drm/tiny/bochs.c | 19 +++++++++++++++++++ > 1 file changed, 19 insertions(+) > > diff --git a/drivers/gpu/drm/tiny/bochs.c b/drivers/gpu/drm/tiny/bochs.c > index 8706763af8fb..ed42ad5c4927 100644 > --- a/drivers/gpu/drm/tiny/bochs.c > +++ b/drivers/gpu/drm/tiny/bochs.c > @@ -19,6 +19,7 @@ > #include <drm/drm_gem_shmem_helper.h> > #include <drm/drm_managed.h> > #include <drm/drm_module.h> > +#include <drm/drm_panic.h> > #include <drm/drm_plane_helper.h> > #include <drm/drm_probe_helper.h> > > @@ -469,10 +470,28 @@ static void bochs_primary_plane_helper_atomic_update(struct drm_plane *plane, > bochs_hw_setformat(bochs, fb->format); > } > > +static int bochs_primary_plane_helper_get_scanout_buffer(struct drm_plane *plane, > + struct drm_scanout_buffer *sb) > +{ > + struct bochs_device *bochs = to_bochs_device(plane->dev); > + struct iosys_map map = IOSYS_MAP_INIT_VADDR_IOMEM(bochs->fb_map); > + > + if (plane->state && plane->state->fb) { > + sb->format = plane->state->fb->format; > + sb->width = plane->state->fb->width; > + sb->height = plane->state->fb->height; > + sb->pitch[0] = plane->state->fb->pitches[0]; > + sb->map[0] = map; > + return 0; > + } > + return -ENODEV; > +} > + > static const struct drm_plane_helper_funcs bochs_primary_plane_helper_funcs = { > DRM_GEM_SHADOW_PLANE_HELPER_FUNCS, > .atomic_check = bochs_primary_plane_helper_atomic_check, > .atomic_update = bochs_primary_plane_helper_atomic_update, > + .get_scanout_buffer = bochs_primary_plane_helper_get_scanout_buffer, > }; > > static const struct drm_plane_funcs bochs_primary_plane_funcs = { > > base-commit: 19272b37aa4f83ca52bdf9c16d5d81bdd1354494 ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH drm-next] drm/bochs: Add support for drm_panic 2025-06-19 6:12 ` Jocelyn Falempe @ 2025-06-19 6:37 ` Ryosuke Yasuoka 2025-06-19 6:42 ` Jocelyn Falempe 0 siblings, 1 reply; 11+ messages in thread From: Ryosuke Yasuoka @ 2025-06-19 6:37 UTC (permalink / raw) To: Jocelyn Falempe Cc: kraxel, maarten.lankhorst, mripard, tzimmermann, airlied, simona, virtualization, linux-kernel, dri-devel On Thu, Jun 19, 2025 at 3:12 PM Jocelyn Falempe <jfalempe@redhat.com> wrote: > > On 13/06/2025 15:20, Ryosuke Yasuoka wrote: > > Add drm_panic moudle for bochs drm so that panic screen can be displayed > > on panic. > > Thanks for the patch, it's simple and looks good to me. > > Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com> > > If no objections, I will push it next Monday. > > Best regards, > > -- > > Jocelyn Thank you Jocelyn for reviewing my patch. Now I found a typo in the commit message; moudle -> module. Let me fix it in v2. Ryosuke > > > > Signed-off-by: Ryosuke Yasuoka <ryasuoka@redhat.com> > > --- > > drivers/gpu/drm/tiny/bochs.c | 19 +++++++++++++++++++ > > 1 file changed, 19 insertions(+) > > > > diff --git a/drivers/gpu/drm/tiny/bochs.c b/drivers/gpu/drm/tiny/bochs.c > > index 8706763af8fb..ed42ad5c4927 100644 > > --- a/drivers/gpu/drm/tiny/bochs.c > > +++ b/drivers/gpu/drm/tiny/bochs.c > > @@ -19,6 +19,7 @@ > > #include <drm/drm_gem_shmem_helper.h> > > #include <drm/drm_managed.h> > > #include <drm/drm_module.h> > > +#include <drm/drm_panic.h> > > #include <drm/drm_plane_helper.h> > > #include <drm/drm_probe_helper.h> > > > > @@ -469,10 +470,28 @@ static void bochs_primary_plane_helper_atomic_update(struct drm_plane *plane, > > bochs_hw_setformat(bochs, fb->format); > > } > > > > +static int bochs_primary_plane_helper_get_scanout_buffer(struct drm_plane *plane, > > + struct drm_scanout_buffer *sb) > > +{ > > + struct bochs_device *bochs = to_bochs_device(plane->dev); > > + struct iosys_map map = IOSYS_MAP_INIT_VADDR_IOMEM(bochs->fb_map); > > + > > + if (plane->state && plane->state->fb) { > > + sb->format = plane->state->fb->format; > > + sb->width = plane->state->fb->width; > > + sb->height = plane->state->fb->height; > > + sb->pitch[0] = plane->state->fb->pitches[0]; > > + sb->map[0] = map; > > + return 0; > > + } > > + return -ENODEV; > > +} > > + > > static const struct drm_plane_helper_funcs bochs_primary_plane_helper_funcs = { > > DRM_GEM_SHADOW_PLANE_HELPER_FUNCS, > > .atomic_check = bochs_primary_plane_helper_atomic_check, > > .atomic_update = bochs_primary_plane_helper_atomic_update, > > + .get_scanout_buffer = bochs_primary_plane_helper_get_scanout_buffer, > > }; > > > > static const struct drm_plane_funcs bochs_primary_plane_funcs = { > > > > base-commit: 19272b37aa4f83ca52bdf9c16d5d81bdd1354494 > ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH drm-next] drm/bochs: Add support for drm_panic 2025-06-19 6:37 ` Ryosuke Yasuoka @ 2025-06-19 6:42 ` Jocelyn Falempe 0 siblings, 0 replies; 11+ messages in thread From: Jocelyn Falempe @ 2025-06-19 6:42 UTC (permalink / raw) To: Ryosuke Yasuoka Cc: kraxel, maarten.lankhorst, mripard, tzimmermann, airlied, simona, virtualization, linux-kernel, dri-devel On 19/06/2025 08:37, Ryosuke Yasuoka wrote: > On Thu, Jun 19, 2025 at 3:12 PM Jocelyn Falempe <jfalempe@redhat.com> wrote: >> >> On 13/06/2025 15:20, Ryosuke Yasuoka wrote: >>> Add drm_panic moudle for bochs drm so that panic screen can be displayed >>> on panic. >> >> Thanks for the patch, it's simple and looks good to me. >> >> Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com> >> >> If no objections, I will push it next Monday. >> >> Best regards, >> >> -- >> >> Jocelyn > > Thank you Jocelyn for reviewing my patch. > Now I found a typo in the commit message; moudle -> module. No need to send a v2 for that, I will fix it before pushing the patch. Thanks, -- Jocelyn > > Let me fix it in v2. > > Ryosuke > >>> >>> Signed-off-by: Ryosuke Yasuoka <ryasuoka@redhat.com> >>> --- >>> drivers/gpu/drm/tiny/bochs.c | 19 +++++++++++++++++++ >>> 1 file changed, 19 insertions(+) >>> >>> diff --git a/drivers/gpu/drm/tiny/bochs.c b/drivers/gpu/drm/tiny/bochs.c >>> index 8706763af8fb..ed42ad5c4927 100644 >>> --- a/drivers/gpu/drm/tiny/bochs.c >>> +++ b/drivers/gpu/drm/tiny/bochs.c >>> @@ -19,6 +19,7 @@ >>> #include <drm/drm_gem_shmem_helper.h> >>> #include <drm/drm_managed.h> >>> #include <drm/drm_module.h> >>> +#include <drm/drm_panic.h> >>> #include <drm/drm_plane_helper.h> >>> #include <drm/drm_probe_helper.h> >>> >>> @@ -469,10 +470,28 @@ static void bochs_primary_plane_helper_atomic_update(struct drm_plane *plane, >>> bochs_hw_setformat(bochs, fb->format); >>> } >>> >>> +static int bochs_primary_plane_helper_get_scanout_buffer(struct drm_plane *plane, >>> + struct drm_scanout_buffer *sb) >>> +{ >>> + struct bochs_device *bochs = to_bochs_device(plane->dev); >>> + struct iosys_map map = IOSYS_MAP_INIT_VADDR_IOMEM(bochs->fb_map); >>> + >>> + if (plane->state && plane->state->fb) { >>> + sb->format = plane->state->fb->format; >>> + sb->width = plane->state->fb->width; >>> + sb->height = plane->state->fb->height; >>> + sb->pitch[0] = plane->state->fb->pitches[0]; >>> + sb->map[0] = map; >>> + return 0; >>> + } >>> + return -ENODEV; >>> +} >>> + >>> static const struct drm_plane_helper_funcs bochs_primary_plane_helper_funcs = { >>> DRM_GEM_SHADOW_PLANE_HELPER_FUNCS, >>> .atomic_check = bochs_primary_plane_helper_atomic_check, >>> .atomic_update = bochs_primary_plane_helper_atomic_update, >>> + .get_scanout_buffer = bochs_primary_plane_helper_get_scanout_buffer, >>> }; >>> >>> static const struct drm_plane_funcs bochs_primary_plane_funcs = { >>> >>> base-commit: 19272b37aa4f83ca52bdf9c16d5d81bdd1354494 >> > ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH drm-next] drm/bochs: Add support for drm_panic 2025-06-13 13:20 [PATCH drm-next] drm/bochs: Add support for drm_panic Ryosuke Yasuoka 2025-06-19 6:12 ` Jocelyn Falempe @ 2025-06-23 10:12 ` Jocelyn Falempe 2025-07-14 0:04 ` Askar Safin 2 siblings, 0 replies; 11+ messages in thread From: Jocelyn Falempe @ 2025-06-23 10:12 UTC (permalink / raw) To: Ryosuke Yasuoka, kraxel, maarten.lankhorst, mripard, tzimmermann, airlied, simona Cc: virtualization, linux-kernel, dri-devel On 13/06/2025 15:20, Ryosuke Yasuoka wrote: > Add drm_panic moudle for bochs drm so that panic screen can be displayed > on panic. I just pushed it to drm-misc-next, with the typo in the commit message fixed. Thanks, -- Jocelyn > > Signed-off-by: Ryosuke Yasuoka <ryasuoka@redhat.com> > --- > drivers/gpu/drm/tiny/bochs.c | 19 +++++++++++++++++++ > 1 file changed, 19 insertions(+) > > diff --git a/drivers/gpu/drm/tiny/bochs.c b/drivers/gpu/drm/tiny/bochs.c > index 8706763af8fb..ed42ad5c4927 100644 > --- a/drivers/gpu/drm/tiny/bochs.c > +++ b/drivers/gpu/drm/tiny/bochs.c > @@ -19,6 +19,7 @@ > #include <drm/drm_gem_shmem_helper.h> > #include <drm/drm_managed.h> > #include <drm/drm_module.h> > +#include <drm/drm_panic.h> > #include <drm/drm_plane_helper.h> > #include <drm/drm_probe_helper.h> > > @@ -469,10 +470,28 @@ static void bochs_primary_plane_helper_atomic_update(struct drm_plane *plane, > bochs_hw_setformat(bochs, fb->format); > } > > +static int bochs_primary_plane_helper_get_scanout_buffer(struct drm_plane *plane, > + struct drm_scanout_buffer *sb) > +{ > + struct bochs_device *bochs = to_bochs_device(plane->dev); > + struct iosys_map map = IOSYS_MAP_INIT_VADDR_IOMEM(bochs->fb_map); > + > + if (plane->state && plane->state->fb) { > + sb->format = plane->state->fb->format; > + sb->width = plane->state->fb->width; > + sb->height = plane->state->fb->height; > + sb->pitch[0] = plane->state->fb->pitches[0]; > + sb->map[0] = map; > + return 0; > + } > + return -ENODEV; > +} > + > static const struct drm_plane_helper_funcs bochs_primary_plane_helper_funcs = { > DRM_GEM_SHADOW_PLANE_HELPER_FUNCS, > .atomic_check = bochs_primary_plane_helper_atomic_check, > .atomic_update = bochs_primary_plane_helper_atomic_update, > + .get_scanout_buffer = bochs_primary_plane_helper_get_scanout_buffer, > }; > > static const struct drm_plane_funcs bochs_primary_plane_funcs = { > > base-commit: 19272b37aa4f83ca52bdf9c16d5d81bdd1354494 ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH drm-next] drm/bochs: Add support for drm_panic 2025-06-13 13:20 [PATCH drm-next] drm/bochs: Add support for drm_panic Ryosuke Yasuoka 2025-06-19 6:12 ` Jocelyn Falempe 2025-06-23 10:12 ` Jocelyn Falempe @ 2025-07-14 0:04 ` Askar Safin 2025-07-15 8:57 ` Jocelyn Falempe 2 siblings, 1 reply; 11+ messages in thread From: Askar Safin @ 2025-07-14 0:04 UTC (permalink / raw) To: ryasuoka Cc: airlied, dri-devel, jfalempe, kraxel, linux-kernel, maarten.lankhorst, mripard, simona, tzimmermann, virtualization Are normal panics (i. e. not drm panics) still supposed to work with bochs? If yes, then I want to point out that they, in fact, don't work since 2019. I. e. panics are not shown in Qemu if: 1) bochs is used 2) we use "normal" panics (not drm panics) I already reported this here: https://lore.kernel.org/regressions/197f290e30b.eaadc7bc7913.7315623184036672946@zohomail.com/T/#u , but nobody answered. -- Askar Safin ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH drm-next] drm/bochs: Add support for drm_panic 2025-07-14 0:04 ` Askar Safin @ 2025-07-15 8:57 ` Jocelyn Falempe 2025-07-15 20:35 ` Askar Safin 0 siblings, 1 reply; 11+ messages in thread From: Jocelyn Falempe @ 2025-07-15 8:57 UTC (permalink / raw) To: Askar Safin, ryasuoka Cc: airlied, dri-devel, kraxel, linux-kernel, maarten.lankhorst, mripard, simona, tzimmermann, virtualization On 14/07/2025 02:04, Askar Safin wrote: > Are normal panics (i. e. not drm panics) still supposed to work with bochs? "Normal panics", is just the console logs through fbcon. The problem is that this is not designed to work in a panic context, so on some driver it can work, but it's not reliable. Also depending on the panic source (Like if the panic occurs in IRQ context), you probably won't see anything. I think the regression is likely because the driver switched to use a shadow buffer (ie: fbcon draws to a buffer in system memory, which is copied to the "VRAM" in a workqueue, and workqueues are disabled in a panic context). So there is no easy fix for the fbcon panic. This patch series, only take care of DRM panic. You can get the same output as fbcon, by selecting CONFIG_DRM_PANIC_SCREEN"kmsg". -- Jocelyn > > If yes, then I want to point out that they, in fact, don't work since 2019. > I. e. panics are not shown in Qemu if: > 1) bochs is used > 2) we use "normal" panics (not drm panics) > > I already reported this here: https://lore.kernel.org/regressions/197f290e30b.eaadc7bc7913.7315623184036672946@zohomail.com/T/#u , > but nobody answered. > > -- > Askar Safin > ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH drm-next] drm/bochs: Add support for drm_panic 2025-07-15 8:57 ` Jocelyn Falempe @ 2025-07-15 20:35 ` Askar Safin 2025-07-15 22:00 ` Jocelyn Falempe 0 siblings, 1 reply; 11+ messages in thread From: Askar Safin @ 2025-07-15 20:35 UTC (permalink / raw) To: Jocelyn Falempe Cc: ryasuoka, airlied, dri-devel, kraxel, linux-kernel, maarten.lankhorst, mripard, simona, tzimmermann, virtualization ---- On Tue, 15 Jul 2025 12:57:04 +0400 Jocelyn Falempe <jfalempe@redhat.com> wrote --- > "Normal panics", is just the console logs through fbcon. The problem is Thank you for answer! Is this possible to configure system such that fbcon works normally, VTs work normally (i. e. via framebuffer), but when panic happens, it is displayed via drm_panic? This seems to be solution to the problem. -- Askar Safin https://types.pl/@safinaskar ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH drm-next] drm/bochs: Add support for drm_panic 2025-07-15 20:35 ` Askar Safin @ 2025-07-15 22:00 ` Jocelyn Falempe 2025-07-16 21:48 ` Askar Safin 0 siblings, 1 reply; 11+ messages in thread From: Jocelyn Falempe @ 2025-07-15 22:00 UTC (permalink / raw) To: Askar Safin Cc: ryasuoka, airlied, dri-devel, kraxel, linux-kernel, maarten.lankhorst, mripard, simona, tzimmermann, virtualization On 15/07/2025 22:35, Askar Safin wrote: > ---- On Tue, 15 Jul 2025 12:57:04 +0400 Jocelyn Falempe <jfalempe@redhat.com> wrote --- > > "Normal panics", is just the console logs through fbcon. The problem is > > Thank you for answer! Is this possible to configure system such that fbcon works normally, > VTs work normally (i. e. via framebuffer), but when panic happens, it is displayed via drm_panic? This seems to > be solution to the problem. Yes, that's the default if you use a drm driver like bochs with fbdev emulation enabled. (Of course you can't have DRM panic on a pure fbdev driver). There was a concurrency problem between fbcon and DRM panic, and I've solved it a year ago with: https://patchwork.freedesktop.org/series/136182/ So make sure you have the following in your .config: CONFIG_FRAMEBUFFER_CONSOLE=y CONFIG_DRM_FBDEV_EMULATION=y CONFIG_DRM_PANIC=y CONFIG_DRM_PANIC_SCREEN="kmsg" Best regards, -- Jocelyn > > -- > Askar Safin > https://types.pl/@safinaskar > ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH drm-next] drm/bochs: Add support for drm_panic 2025-07-15 22:00 ` Jocelyn Falempe @ 2025-07-16 21:48 ` Askar Safin 2025-07-17 9:54 ` Jocelyn Falempe 0 siblings, 1 reply; 11+ messages in thread From: Askar Safin @ 2025-07-16 21:48 UTC (permalink / raw) To: Jocelyn Falempe Cc: ryasuoka, airlied, dri-devel, kraxel, linux-kernel, maarten.lankhorst, mripard, simona, tzimmermann, virtualization ---- On Wed, 16 Jul 2025 02:00:56 +0400 Jocelyn Falempe <jfalempe@redhat.com> wrote --- > Yes, that's the default if you use a drm driver like bochs with fbdev Thank you for answer! I just tried kernel from drm-tip with this config with drm_panic in qemu. And panic works. But I don't like result. When drm panic happens, messages printed to /dev/console disappear. Only kernel messages remain. Here are steps to reproduce. And then I will describe how this breaks my workflow. Compile kernel from drm-tip ( https://gitlab.freedesktop.org/drm/tip ). I used commit b012f04b5be909a307ff629b297387e0ed55195a . It seems to include this bochs patch (i. e. "drm/bochs: Add support for drm_panic"). Use this miniconfig: $ cat mini CONFIG_64BIT=y CONFIG_EXPERT=y CONFIG_PRINTK=y CONFIG_PRINTK_TIME=y CONFIG_PCI=y CONFIG_TTY=y CONFIG_VT=y CONFIG_VT_CONSOLE=y CONFIG_DRM=y CONFIG_DRM_FBDEV_EMULATION=y CONFIG_DRM_BOCHS=y CONFIG_FRAMEBUFFER_CONSOLE=y CONFIG_PROC_FS=y CONFIG_DRM_PANIC=y CONFIG_DRM_PANIC_SCREEN="kmsg" CONFIG_BLK_DEV_INITRD=y CONFIG_RD_GZIP=y CONFIG_BINFMT_ELF=y CONFIG_BINFMT_SCRIPT=y $ make KCONFIG_ALLCONFIG=mini allnoconfig Create initramfs, which contains exactly these files: $ find /tmp/i -ls 2861 0 drwxrwxr-x 3 user user 80 Jul 16 23:56 /tmp/i 2891 0 drwxrwxr-x 2 user user 80 Jul 16 23:56 /tmp/i/bin 2893 0 lrwxrwxrwx 1 user user 7 Jul 16 23:56 /tmp/i/bin/sh -> busybox 2892 1980 -rwxr-xr-x 1 user user 2024544 Jul 16 23:56 /tmp/i/bin/busybox 2864 4 -rwxrwxr-x 1 user user 43 Jul 16 23:18 /tmp/i/init This is "init": === #!/bin/sh set -e echo hello sleep 3 exit 0 === Now boot this in Qemu. I used this command: $ qemu-system-x86_64 -enable-kvm -m 1024 -kernel arch/x86/boot/bzImage -initrd /tmp/ini.cpio.gz You will see word "hello", then after 3 seconds the system will fail into drm panic. What I saw: word "hello" disappeared, when the system falled into panic What I expected to see: word "hello" should remain. Now let me describe how this breaks my workflow. I often use hand-crafted shell scripts as PID 1. Both in Qemu and on real hardware. I use them to reproduce and bisect various kernel bugs. I always put "set -e" in the beginning of shell script. This means that script fails after first error. And thus system fails into kernel panic. I also sometimes put "set -x" to debug these scripts. Thus, when script fails and panic happens, then faulty shell command will be last thing printed on screen before panic stacktrace. But with drm_panic everything printed to /dev/console disappears. This breaks my workflow. In Qemu I can easily workaround this by using serial console. But I cannot do this on real hardware. And yes, I experience fbcon panic problems on real hardware, too, this is why I'm interested in drm panic: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14658 (I have not yet tested whether drm_panic fixes that fbcon i915 panic problem, but I assume it does.) I can workaround this by using efi fb with fb panic as opposed to i915. But this will not work if I attempting to catch bug in i915 itself. (And yes, I recently found another i915-related bug, and I'm trying to debug it using shell scripts running as PID 1. Here it is: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14598 .) I can workaround this by logging everything to disk. But this will not work when everything is mounted read-only. And this is exactly what happens, when I try to catch that kexec-related bug: immediately before issuing "kexec -e" command I mount everything read-only. The only remaining workaround is to redirect everything to /dev/kmsg. I. e. put "exec > /dev/kmsg 2>&1" to the script. This will work. But I still don't like this. -- Askar Safin https://types.pl/@safinaskar ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH drm-next] drm/bochs: Add support for drm_panic 2025-07-16 21:48 ` Askar Safin @ 2025-07-17 9:54 ` Jocelyn Falempe 0 siblings, 0 replies; 11+ messages in thread From: Jocelyn Falempe @ 2025-07-17 9:54 UTC (permalink / raw) To: Askar Safin Cc: ryasuoka, airlied, dri-devel, kraxel, linux-kernel, maarten.lankhorst, mripard, simona, tzimmermann, virtualization On 16/07/2025 23:48, Askar Safin wrote: > ---- On Wed, 16 Jul 2025 02:00:56 +0400 Jocelyn Falempe <jfalempe@redhat.com> wrote --- > > Yes, that's the default if you use a drm driver like bochs with fbdev > > Thank you for answer! I just tried kernel from drm-tip with this config with drm_panic in qemu. And panic works. > But I don't like result. > When drm panic happens, messages printed to /dev/console disappear. Only kernel messages remain. Yes, that's the expected behavior. DRM panic only prints the kernel messages, and don't mix that with console output. > > Here are steps to reproduce. And then I will describe how this breaks my workflow. > > Compile kernel from drm-tip ( https://gitlab.freedesktop.org/drm/tip ). I used commit b012f04b5be909a307ff629b297387e0ed55195a . > It seems to include this bochs patch (i. e. "drm/bochs: Add support for drm_panic"). > Use this miniconfig: > > $ cat mini > CONFIG_64BIT=y > > CONFIG_EXPERT=y > > CONFIG_PRINTK=y > CONFIG_PRINTK_TIME=y > > CONFIG_PCI=y > > CONFIG_TTY=y > CONFIG_VT=y > CONFIG_VT_CONSOLE=y > CONFIG_DRM=y > CONFIG_DRM_FBDEV_EMULATION=y > CONFIG_DRM_BOCHS=y > CONFIG_FRAMEBUFFER_CONSOLE=y > CONFIG_PROC_FS=y > > CONFIG_DRM_PANIC=y > CONFIG_DRM_PANIC_SCREEN="kmsg" > > CONFIG_BLK_DEV_INITRD=y > CONFIG_RD_GZIP=y > CONFIG_BINFMT_ELF=y > CONFIG_BINFMT_SCRIPT=y > $ make KCONFIG_ALLCONFIG=mini allnoconfig > > Create initramfs, which contains exactly these files: > $ find /tmp/i -ls > 2861 0 drwxrwxr-x 3 user user 80 Jul 16 23:56 /tmp/i > 2891 0 drwxrwxr-x 2 user user 80 Jul 16 23:56 /tmp/i/bin > 2893 0 lrwxrwxrwx 1 user user 7 Jul 16 23:56 /tmp/i/bin/sh -> busybox > 2892 1980 -rwxr-xr-x 1 user user 2024544 Jul 16 23:56 /tmp/i/bin/busybox > 2864 4 -rwxrwxr-x 1 user user 43 Jul 16 23:18 /tmp/i/init > > This is "init": > === > #!/bin/sh > > set -e > > echo hello > sleep 3 > exit 0 > === > > Now boot this in Qemu. I used this command: > $ qemu-system-x86_64 -enable-kvm -m 1024 -kernel arch/x86/boot/bzImage -initrd /tmp/ini.cpio.gz > > You will see word "hello", then after 3 seconds the system will fail into drm panic. > > What I saw: word "hello" disappeared, when the system falled into panic > What I expected to see: word "hello" should remain. Even with fbcon, there is no guarantee that "hello" will remain visible, that depends on the screen size, and the amount of logs that the kernel panic will print. > > Now let me describe how this breaks my workflow. > > I often use hand-crafted shell scripts as PID 1. Both in Qemu and on real hardware. > I use them to reproduce and bisect various kernel bugs. > I always put "set -e" in the beginning of shell script. This means that script fails after first error. > And thus system fails into kernel panic. > I also sometimes put "set -x" to debug these scripts. > Thus, when script fails and panic happens, then faulty shell command will be last thing printed on screen before panic stacktrace. > But with drm_panic everything printed to /dev/console disappears. > This breaks my workflow. > > In Qemu I can easily workaround this by using serial console. > > But I cannot do this on real hardware. > > And yes, I experience fbcon panic problems on real hardware, too, this is why I'm interested in drm panic: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14658 > > (I have not yet tested whether drm_panic fixes that fbcon i915 panic problem, but I assume it does.) > > I can workaround this by using efi fb with fb panic as opposed to i915. But this will not work if I attempting to catch bug in i915 itself. > (And yes, I recently found another i915-related bug, and I'm trying to debug it using shell scripts running as PID 1. > Here it is: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14598 .) > > I can workaround this by logging everything to disk. > But this will not work when everything is mounted read-only. > And this is exactly what happens, when I try to catch that kexec-related bug: > immediately before issuing "kexec -e" command I mount everything read-only. > > The only remaining workaround is to redirect everything to /dev/kmsg. > I. e. put "exec > /dev/kmsg 2>&1" to the script. > This will work. > But I still don't like this. This is the workaround I would suggest, as DRM panic can only access the kmsg data, and has no knowledge of what fbcon was doing. If the panic occurs because the PID 1 script exits, then the panic stack trace is not that relevant? Another thing you can try, is to use DRM log instead of fbcon: DRM_CLIENT_LOG=y DRM_CLIENT_DEFAULT_LOG=y DRM_FBDEV_EMULATION=n DRM_CLIENT_DEFAULT="log" DRM_PANIC=n (and boot with console=drm_log) drm-log doesn't scroll the whole screen, and use the non-blocking console API, so is less likely to make artifacts on the screen. But in this case, you won't get the panic trace. Best regards, -- Jocelyn > > -- > Askar Safin > https://types.pl/@safinaskar > ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2025-07-17 9:54 UTC | newest] Thread overview: 11+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-06-13 13:20 [PATCH drm-next] drm/bochs: Add support for drm_panic Ryosuke Yasuoka 2025-06-19 6:12 ` Jocelyn Falempe 2025-06-19 6:37 ` Ryosuke Yasuoka 2025-06-19 6:42 ` Jocelyn Falempe 2025-06-23 10:12 ` Jocelyn Falempe 2025-07-14 0:04 ` Askar Safin 2025-07-15 8:57 ` Jocelyn Falempe 2025-07-15 20:35 ` Askar Safin 2025-07-15 22:00 ` Jocelyn Falempe 2025-07-16 21:48 ` Askar Safin 2025-07-17 9:54 ` Jocelyn Falempe
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).