Hi,

This patch resolves the panic when booting without efi.rt.disabled=1 for me.

Thanks!

Jan M.


> On 31 May 2019, at 20:35, Konstantin Belousov <k...@freebsd.org> wrote:
> 
> On Fri, May 31, 2019 at 04:19:57PM +0200, Jan Martin Mikkelsen wrote:
>> Hi,
>> 
>> Christian has pointed me at this 
>> https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=233534 which he raised 
>> after his email. The workaround was to boot with “efi.rt.disabled=1”. 
>> 
>> I took a closer look at what is going on. The problem is that the EFI 
>> rt_gettime call is faulting, and the fault is handled in efirt_support.S and 
>> a failure is reported. These messages is in the kernel output:
>> 
>> kernel trap 12 with interrupts disabled
>> kernel trap 12 with interrupts disabled
>> EFI rt_gettime call faulted, error 14
>> efirtc0: cannot read EFI realtime clock, error 14
>> 
>> So far, so good. The problem is that that later in startup the 
>> "smp_targeted_tlb_shootdown: interrupts disabled” panic occurs, if the SMP 
>> is enabled. With SMP disabled this does not occur and the system runs.
>> 
>> I’m not sure whether this is a BIOS problem (seems likely) or something that 
>> could handled after dealing with the fault in efirt_support.S.
>> 
>> While looking I found the code below that looks wrong in efi_enter(), but 
>> that is not the problem in this case.
>> 
>> Just adding this to the archive in case someone else looks more closely 
>> later.
> 
> Try this.  Only compile-time tested.
> 
> diff --git a/sys/amd64/amd64/efirt_support.S b/sys/amd64/amd64/efirt_support.S
> index cd578eddcfb..b54b13b01fe 100644
> --- a/sys/amd64/amd64/efirt_support.S
> +++ b/sys/amd64/amd64/efirt_support.S
> @@ -47,6 +47,9 @@ ENTRY(efi_rt_arch_call)
>       movq    %r13, EC_R13(%rdi)
>       movq    %r14, EC_R14(%rdi)
>       movq    %r15, EC_R15(%rdi)
> +     pushfq
> +     popq    %rax
> +     movq    %rax, EC_RFLAGS(%rdi)
>       movq    PCPU(CURTHREAD), %rax
>       movq    %rdi, TD_MD+MD_EFIRT_TMP(%rax)
>       movq    PCPU(CURPCB), %rsi
> @@ -98,6 +101,8 @@ efi_rt_arch_call_tail:
>       movq    EC_RBP(%rdi), %rbp
>       movq    EC_RSP(%rdi), %rsp
>       movq    EC_RBX(%rdi), %rbx
> +     pushq   EC_RFLAGS(%rdi)
> +     popfq
> 
>       popq    %rbp
>       ret
> diff --git a/sys/amd64/amd64/genassym.c b/sys/amd64/amd64/genassym.c
> index de3969734a1..2e81b823262 100644
> --- a/sys/amd64/amd64/genassym.c
> +++ b/sys/amd64/amd64/genassym.c
> @@ -272,3 +272,4 @@ ASSYM(EC_R12, offsetof(struct efirt_callinfo, ec_r12));
> ASSYM(EC_R13, offsetof(struct efirt_callinfo, ec_r13));
> ASSYM(EC_R14, offsetof(struct efirt_callinfo, ec_r14));
> ASSYM(EC_R15, offsetof(struct efirt_callinfo, ec_r15));
> +ASSYM(EC_RFLAGS, offsetof(struct efirt_callinfo, ec_rflags));
> diff --git a/sys/amd64/include/efi.h b/sys/amd64/include/efi.h
> index 082223792ac..e630a338c17 100644
> --- a/sys/amd64/include/efi.h
> +++ b/sys/amd64/include/efi.h
> @@ -72,6 +72,7 @@ struct efirt_callinfo {
>       register_t      ec_r13;
>       register_t      ec_r14;
>       register_t      ec_r15;
> +     register_t      ec_rflags;
> };
> 
> #endif /* __AMD64_INCLUDE_EFI_H_ */
> _______________________________________________
> freebsd-stable@freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-stable
> To unsubscribe, send any mail to "freebsd-stable-unsubscr...@freebsd.org"

_______________________________________________
freebsd-stable@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-stable
To unsubscribe, send any mail to "freebsd-stable-unsubscr...@freebsd.org"

Reply via email to