On Fri, Dec 30, 2016 at 05:33:44PM +0900, YASUOKA Masahiko wrote:
> Hi,
> 
> On Thu, 29 Dec 2016 14:53:20 -0600
> Ryan <pulse.pu...@gmail.com> wrote:
> > I've successfully booted the machine with the following changes:
> > 
> > 
> > --- sys/arch/amd64/stand/efiboot/efiboot.c    2016-06-10 12:36:06.000000000
> > -0600
> > +++ sys/arch/amd64/stand/efiboot/efiboot.c    2016-12-28 15:57:36.728002168
> > -0600
> > @@ -137,12 +137,16 @@ efi_main(EFI_HANDLE image, EFI_SYSTEM_TA
> >  void
> >  efi_cleanup(void)
> >  {
> > +      int         retry;
> >      EFI_STATUS     status;
> > 
> > -    efi_memprobe_internal();    /* sync the current map */
> > -    status = EFI_CALL(BS->ExitBootServices, IH, mmap_key);
> > -    if (status != EFI_SUCCESS)
> > -        panic("ExitBootServices");
> > +    /* retry once in case of failure */
> > +    for (retry = 1; retry == 0; retry--) {
> > +        efi_memprobe_internal();    /* sync the current map */
> > +        status = EFI_CALL(BS->ExitBootServices, IH, mmap_key);
> > +        if (status != EFI_SUCCESS && retry == 0)
> > +            panic("ExitBootServices failed (%d)\n", status);
> > +    }
> >  }
> 
> See the condition of "for" carefully.  It seems that it never become
> true.  Can you check whether it will still boot successfull after this
> problem is fixed?
> 
> (snip)
> > Oh before I forget, while I was reading through the code I noticed what
> > appears to be a typo in sys/arch/amd64/stand/efiboot/eficall.h:
> > 
> > #define     EFI_CALL(...)   \
> >     _efi_call_fn(__VA_ARGS__, _call_9, _call_8, _call_7, _call_6, _call_5, \
> >         _call_4, _call_3, _call_2, _call_1, _call_1)(__VA_ARGS__)
> > #endif
> > 
> > It looks like the second instance of _call_1 should be _call_0 (which is
> > defined earlier), unless I am totally misreading this.
> 
> I commited this already.  Thanks.

Shouldn't this change also be made to armv7 and arm64?

Reply via email to