update bnxt driver to 233.0.174.0
Describe the bug
The bnxt driver was last updated in June 2024 to Version 230.0.133.0 in OPNsense. https://github.com/opnsense/src/commit/7a63abf952c6abd6dddf08051a4e2fc93adbb9d2 As far as I can see, this drive update was unfortunately not mentioned in any release changelog for 25.x.
We recently tried to update from OPNsense BusinessEdition 24.10.2 to 25.4.1. Therefore the new driver version is used after the update. This lead to an unstable system that is rebooting every few hours.
The latest driver 233.0.174.0 from Broadcom mentions in the os_support_list.txt-file that FreeBSD 14.2 is supported. https://docs.broadcom.com/docs/FreeBSD_Drivers-233.0.174.0
The previous driver 232.0.88.0 from Broadcom does not mention FreeBSD 14.2 support. https://docs.broadcom.com/docs/FreeBSD_Drivers-232.0.88.0
Relevant log files
Fatal trap 12: page fault while in kernel mode cpuid = 12; apic id = 0c fault virtual address = 0x0 fault code = supervisor read data, page not present instruction pointer = 0x20:0xffffffff80d16f24 stack pointer = 0x28:0xfffffe006a7badb0 frame pointer = 0x28:0xfffffe006a7badb0 code segment = base 0x0, limit 0xfffff, type 0x1b = DPL 0, pres 1, long 1, def32 0, gran 1 processor eflags = interrupt enabled, resume, IOPL = 0 current process = 0 (softirq_12) rdi: 0000000000000000 rsi: fffff80311406500 rdx: fffff80189881800 rcx: 0000000000000000 r8: 0000000000000065 r9: 0000000000000000 rax: fffff80417db7000 rbx: fffff80003d12740 rbp: fffffe006a7badb0 r10: 0000000000001388 r11: 00000000853b1fa4 r12: 0000000000000000 r13: 0000000000000000 r14: fffff80621cd8900 r15: fffff80621cd89a0 trap number = 12 panic: page fault cpuid = 12 time = 1748181673 KDB: stack backtrace: db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe006a7baaa0 vpanic() at vpanic+0x131/frame 0xfffffe006a7babd0 panic() at panic+0x43/frame 0xfffffe006a7bac30 trap_fatal() at trap_fatal+0x40b/frame 0xfffffe006a7bac90 trap_pfault() at trap_pfault+0x46/frame 0xfffffe006a7bace0 calltrap() at calltrap+0x8/frame 0xfffffe006a7bace0 --- trap 0xc, rip = 0xffffffff80d16f24, rsp = 0xfffffe006a7badb0, rbp = 0xfffffe006a7badb0 --- nhop_free_any() at nhop_free_any+0x4/frame 0xfffffe006a7badb0 destroy_fd_instance_epoch() at destroy_fd_instance_epoch+0xe4/frame 0xfffffe006a7badf0 epoch_call_task() at epoch_call_task+0x16a/frame 0xfffffe006a7bae40 gtaskqueue_run_locked() at gtaskqueue_run_locked+0x14e/frame 0xfffffe006a7baec0 gtaskqueue_thread_loop() at gtaskqueue_thread_loop+0xc2/frame 0xfffffe006a7baef0 fork_exit() at fork_exit+0x7f/frame 0xfffffe006a7baf30 fork_trampoline() at fork_trampoline+0xe/frame 0xfffffe006a7baf30 --- trap 0, rip = 0, rsp = 0, rbp = 0 --- KDB: enter: panic panic.txt0600001215014621251 7126 ustarrootwheelpage faultversion.txt0600007515014621251 7532 ustarrootwheelFreeBSD 14.2-RELEASE-p3 stable/25.1-n269769-0381600e81a4 SMP
Environment
OPNsense 25.4.1 business edition (amd64) Network BCM57414
a short followup. Updating the firmware to the latest version did not help, still kernel traps every few hours.
I then manually compiled the latest Broadcom driver 233.0.174.0. That immediately helped and the system was stable for more than 48 hours with Business Edition 25.4.1.
Please push the updated driver to latest Business Edition.
@cmitasch the latest in-tree version upstream seems to be 230.0.133.0 which I believe is the one we're currently offering, when broadcom offers other drivers, you could look into building a port for it (similar to the one for realtek (https://github.com/opnsense/ports/tree/master/net/realtek-re-kmod) if they support some sort of overlaying. In terms of driver support Broadcom is usually not the best choice I'm afraid.
As often these drivers support different card models, a fix for one has a risk of causing an issue for another I'm afraid.
since 230.0.133.0 does not support FreeBSD 14.2 according to Broadcom, I would really hope that it could be updated upstream.
I did some testing regarding ports. Is there a way to get the kernel modules updated automatically? Something like DKMS can do on Linux.