On Thu, May 30, 2013 at 10:16:12AM +0800, joeyli wrote: > 於 四,2013-05-30 於 00:53 +0200,Jiri Kosina 提到: > > On Wed, 29 May 2013, Russ Anderson wrote: > > > > > > Yes, but this call is clearly happening way before ExitBootServices() -- > > > > see the surrounding code, see for example this in efi_main(): > > > > > > > > [ ... snip ... ] > > > > setup_efi_vars(boot_params); > > > > > > > > setup_efi_pci(boot_params); > > > > > > > > status = efi_call_phys3(sys_table->boottime->allocate_pool, > > > > EFI_LOADER_DATA, sizeof(*gdt), > > > > (void **)&gdt); > > > > if (status != EFI_SUCCESS) { > > > > efi_printk("Failed to alloc mem for gdt structure\n"); > > > > goto fail; > > > > } > > > > [ ... snip ... ] > > > > > > Yes. Note the failing call is sys_table->runtime while all the > > > other calls are sys_table->boottime and seem to work. Not sure > > > why the sys_table->runtime call has a problem but it may be > > > a clue. Could something in the runtime path not be set up??? > > > > That was my original idea early today as well. My understanding of the > > UEFI spec is admittedly limited, but afaics calling runtime method from > > boot environment should be a valid thing to do ... ? > > QueryVariableInfo() is a runtime services, all runtime services should > available bother on boot time and runtime: > > UEFI spec 2.3.1 P.109: > Runtime Services > Functions that are available before and after any call to > ExitBootServices(). These functions are described in Section 7. That's a great idea. This patch moves the QueryVariableInfo() call from bootime to runtime, in efi_late_init(). The attached patch is consistent with the UEFI spec and avoids the problem. Thanks, -- Russ Anderson, OS RAS/Partitioning Project Lead SGI - Silicon Graphics Inc rja@sgi.com