Re: panic: Called fill_fpregs while the kernel is using the VFP
- In reply to: bob prohaska : "panic: Called fill_fpregs while the kernel is using the VFP"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 06 Mar 2023 16:59:03 UTC
On Mar 6, 2023, at 07:19, bob prohaska <fbsd@www.zefox.net> wrote:
> This is new to me. Pi2 running armv7 at
> main-4b0552d5f4: Thu Feb 16 16:12:46 PST 2023
>
> panic: Called fill_fpregs while the kernel is using the VFP
> cpuid = 3
> time = 1678112700
> KDB: stack backtrace:
> db_trace_self() at db_trace_self
> pc = 0xc05e5aec lr = 0xc007a684 (db_trace_self_wrapper+0x30)
> sp = 0xdd2de790 fp = 0xdd2de8a8
> db_trace_self_wrapper() at db_trace_self_wrapper+0x30
> pc = 0xc007a684 lr = 0xc02e9184 (vpanic+0x140)
> sp = 0xdd2de8b0 fp = 0xdd2de8d0
> r4 = 0x00000100 r5 = 0x00000000
> r6 = 0xc07875a1 r7 = 0xc0b12f08
> vpanic() at vpanic+0x140
> pc = 0xc02e9184 lr = 0xc02e8f64 (dump_savectx)
> sp = 0xdd2de8d8 fp = 0xdd2de8dc
> r4 = 0xe05bc900 r5 = 0xc4c19e90
> r6 = 0xdffb6e50 r7 = 0xd70afa40
> r8 = 0xdffb6e40 r9 = 0xe05bc900
> r10 = 0xdd2de960
> dump_savectx() at dump_savectx
> pc = 0xc02e8f64 lr = 0xc05f2ea8 (set_regs)
> sp = 0xdd2de8e4 fp = 0xdd2de8f8
> set_regs() at set_regs
> pc = 0xc05f2ea8 lr = 0xc026ee34 (elf32_get_fpregset+0x2c)
> sp = 0xdd2de900 fp = 0xdd2de908
> r4 = 0xdffb6e50 r5 = 0xc026ee08
> elf32_get_fpregset() at elf32_get_fpregset+0x2c
> pc = 0xc026ee34 lr = 0xc026cd9c (elf32_coredump+0x308)
> sp = 0xdd2de910 fp = 0xdd2de988
> r4 = 0xc09033d4 r10 = 0xdd2de960
> elf32_coredump() at elf32_coredump+0x308
> pc = 0xc026cd9c lr = 0xc02edfac (sigexit+0xce0)
> sp = 0xdd2de990 fp = 0xdd2decf8
> r4 = 0x0000004e r5 = 0xddb6883c
> r6 = 0xddb68754 r7 = 0xc026ca94
> r8 = 0xde22e2bc r9 = 0xddb687b0
> r10 = 0x00000000
> sigexit() at sigexit+0xce0
> pc = 0xc02edfac lr = 0xc02ee8ac (postsig+0x128)
> sp = 0xdd2ded00 fp = 0xdd2ded88
> r4 = 0x00000006 r5 = 0xde2f5000
> r6 = 0xdd2ded20 r7 = 0xdd2ded18
> r8 = 0xde22e1f8 r9 = 0xd710cab8
> r10 = 0x00000005
> postsig() at postsig+0x128
> pc = 0xc02ee8ac lr = 0xc02f26dc (ast_sig+0x11c)
> sp = 0xdd2ded90 fp = 0xdd2dee08
> r4 = 0xde2f5000 r5 = 0xde22e2bc
> r6 = 0xc0753a8d r7 = 0x00000000
> r8 = 0xde22e1f8 r9 = 0x00000ab8
> r10 = 0x23adf040
> ast_sig() at ast_sig+0x11c
> pc = 0xc02f26dc lr = 0xc0352fb0 (ast_handler+0xe0)
> sp = 0xdd2dee10 fp = 0xdd2dee28
> r4 = 0xdd2dee40 r5 = 0x0000000e
> r6 = 0x00004000 r7 = 0xc096bf9c
> r8 = 0xde2f5000 r9 = 0x00000001
> ast_handler() at ast_handler+0xe0
> pc = 0xc0352fb0 lr = 0xc0352ec0 (ast+0x20)
> sp = 0xdd2dee30 fp = 0xdd2dee38
> r4 = 0xdd2dee40 r5 = 0xde2f5000
> r6 = 0x00000000 r7 = 0x000001b1
> r8 = 0x24006570 r9 = 0x23adf040
> ast() at ast+0x20
> pc = 0xc0352ec0 lr = 0xc05e8410 (swi_exit+0x3c)
> sp = 0xdd2dee40 fp = 0xbfbfcaf0
> r4 = 0x60000013 r5 = 0xde2f5000
> swi_exit() at swi_exit+0x3c
> pc = 0xc05e8410 lr = 0xc05e8410 (swi_exit+0x3c)
> sp = 0xdd2dee40 fp = 0xbfbfcaf0
> KDB: enter: panic
> [ thread pid 8505 tid 100176 ]
> Stopped at kdb_enter+0x54: ldrb r15, [r15, r15, ror r15]!
> db>
>
See . . .
For the fixes to this armv7/armv6 specific problem:
Mon, 20 Feb 2023
• git: 24abb6b82102 - main - When saving a context on arm call the vfp handler Andrew Turner
Thu, 23 Feb 2023
• git: 4d2427f2c445 - main - arm: Unbreak debugging programs that use FP instructions Kornel Dulęba
• git: 98c666cf8758 - main - arm: Fix initialization of VFP context Kornel Dulęba
So you need 98c666cf8758 or later.
For where it was broken:
Sat, 04 Feb 2023
• git: 6926e2699ae5 - main - arm: Add support for using VFP in kernel Kornel Dulęba
• git: e5d7c5c857f8 - main - arm: mv: Add missing function prototype Kornel Dulęba
It can be nasty to try to build the kernel via a system
running a broken kernel. Getting an appropriate vintage
kernel via a snapshot can work around such issues.
Another way is using an appropriate kernel.txz from what
is available via looking around in:
https://artifact.ci.freebsd.org/snapshot/main/?C=M&O=D
After renaming/deleting /boot/kernel , that compressed
tar file can be expanded with -C / involved to create a
/boot/kernel/ on the armv7 media. With that kernel
booted, then a normal build/install update can be done.
(The wording does not deal with if you happen to end up
with a temporary kernel that is broken in some other
way: pick a different one in that case.)
===
Mark Millard
marklmi at yahoo.com