Bug 1153927

Summary: set NEXTBOOT to uefi setting failed from Windows Recovery console
Product: Red Hat Enterprise Linux 7 Reporter: Xiaoqing Wei <xwei>
Component: ovmfAssignee: Laszlo Ersek <lersek>
Status: CLOSED ERRATA QA Contact: Virtualization Bugs <virt-bugs>
Severity: medium Docs Contact:
Priority: unspecified    
Version: 7.1CC: juzhang, lersek, mrezanin, pjones, xwei
Target Milestone: rc   
Target Release: ---   
Hardware: x86_64   
OS: All   
Whiteboard:
Fixed In Version: OVMF-20140822-3.git9ece15a.el7 Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2015-03-05 05:36:02 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Xiaoqing Wei 2014-10-17 07:15:23 UTC
Description of problem:
in Windows 8(or 10 Tech Preview), MS provided a convenient
way to set the NEXT BOOT into uefi setting in the Windows
'Recovery Console' which is not functioning under OVMF(set success
but reboot wont enter ovmf setting interface), I confirmed
it work on my UEFI host(not SB support though).

Version-Release number of selected component (if applicable):
OVMF-20140822

How reproducible:
100%

Steps to Reproduce:
1. boot a VM w/ OVMF firmware
2. enter Windows Recovery Console and set next boot to uefi setting.
3. reboot

Actual results:
VM still boot into Windows, not uefi setting

Expected results:
VM reboot, and entering uefi setting interface, just like uefi physical hosts

Additional info:

Host is a Dell Optilex 790

Comment 2 Laszlo Ersek 2014-10-22 14:37:57 UTC
Posted upstream series:
http://thread.gmane.org/gmane.comp.bios.tianocore.devel/10510

Comment 3 Laszlo Ersek 2014-10-23 12:09:43 UTC
Posted upstream v2:
http://thread.gmane.org/gmane.comp.bios.tianocore.devel/10571

Comment 4 Laszlo Ersek 2014-11-06 20:57:32 UTC
Upstream commits to backport:

  1 e0763f8 Try to read key strike even when the TimeOuts value is zero,
            this will avoid BDS not get user input when TimeOuts value set
            to zero.
  2 1574210 OvmfPkg: BDS: remove dead call to PlatformBdsEnterFrontPage()
  3 260ab57 OvmfPkg: BDS: drop useless return statement
  4 5126ef7 OvmfPkg: BDS: don't overwrite the BDS Front Page timeout
  5 547222d OvmfPkg: BDS: optimize second argument in
            PlatformBdsEnterFrontPage() call
  6 b90ffb9 OvmfPkg: BDS: drop superfluous "connect first boot option" logic
  7 b1220e2 OvmfPkg: BDS: drop custom boot timeout, revert to
            IntelFrameworkModulePkg's
  8 848834c OvmfPkg: set video resolution of text setup to 640x480

Comment 8 Xiaoqing Wei 2014-11-21 04:36:29 UTC
on

qemu-kvm-rhev-2.1.2-8.el7.x86_64
OVMF-20140822-4.git9ece15a.el7.x86_64

1) install a 2012r2 VM with OVMF(with the UefiShell.iso attached.)
after create user name/ password
then login as Administrator
open a cmd, execute:

2) reagentc /info
// check that Recovery Console has been enabled.

then 

3) reagentc /boottore
// ask OS to enter Recovery Console in the next boot

4) reboot the VM
shutdown /r /t 0

5) Windows 2012 R2 would boot into the Recovery Console this time
then choose 'throuble shooting your os' -> 'enter uefi setting', it prompts a restart, click it

6) wait till VM restarted, dont input anything in the vm screen

VM goes into OVMF interface ! so the bz has been fixed.


VM definition


# virsh dumpxml win2k12r2
<domain type='kvm' id='52'>
  <name>win2k12r2</name>
  <uuid>ef9c60c4-df4b-417f-9257-6b2fcdc80ec3</uuid>
  <memory unit='KiB'>2097152</memory>
  <currentMemory unit='KiB'>2097152</currentMemory>
  <vcpu placement='static'>2</vcpu>
  <resource>
    <partition>/machine</partition>
  </resource>
  <os>
    <type arch='x86_64' machine='pc-i440fx-rhel7.1.0'>hvm</type>
    <loader readonly='yes' type='pflash'>/usr/share/OVMF/OVMF_CODE.fd</loader>
    <nvram>/var/lib/libvirt/qemu/nvram/win2k12r2_VARS.fd</nvram>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
    <hyperv>
      <relaxed state='on'/>
      <vapic state='on'/>
      <spinlocks state='on' retries='8191'/>
    </hyperv>
  </features>
  <cpu mode='custom' match='exact'>
    <model fallback='allow'>SandyBridge</model>
  </cpu>
  <clock offset='localtime'>
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='hpet' present='no'/>
    <timer name='hypervclock' present='yes'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <pm>
    <suspend-to-mem enabled='yes'/>
    <suspend-to-disk enabled='yes'/>
  </pm>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/win2k12r2.qcow2'/>
      <backingStore/>
      <target dev='hda' bus='ide'/>
      <alias name='ide0-0-0'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw' cache='none'/>
      <source file='/home/kvm_autotest_root/iso/windows/virtio-win.iso'/>
      <backingStore/>
      <target dev='hdb' bus='ide'/>
      <readonly/>
      <alias name='ide0-0-1'/>
      <address type='drive' controller='0' bus='0' target='0' unit='1'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/usr/share/OVMF/UefiShell.iso'/>
      <backingStore/>
      <target dev='hdc' bus='ide'/>
      <readonly/>
      <alias name='ide0-1-0'/>
      <address type='drive' controller='0' bus='1' target='0' unit='0'/>
    </disk>
    <controller type='usb' index='0' model='ich9-ehci1'>
      <alias name='usb0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci1'>
      <alias name='usb0'/>
      <master startport='0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci2'>
      <alias name='usb0'/>
      <master startport='2'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci3'>
      <alias name='usb0'/>
      <master startport='4'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x2'/>
    </controller>
    <controller type='pci' index='0' model='pci-root'>
      <alias name='pci.0'/>
    </controller>
    <controller type='ide' index='0'>
      <alias name='ide0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <controller type='virtio-serial' index='0'>
      <alias name='virtio-serial0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </controller>
    <interface type='bridge'>
      <mac address='52:54:00:88:ca:c6'/>
      <source bridge='switch'/>
      <target dev='vnet0'/>
      <model type='rtl8139'/>
      <alias name='net0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <serial type='pty'>
      <source path='/dev/pts/2'/>
      <target port='0'/>
      <alias name='serial0'/>
    </serial>
    <console type='pty' tty='/dev/pts/2'>
      <source path='/dev/pts/2'/>
      <target type='serial' port='0'/>
      <alias name='serial0'/>
    </console>
    <channel type='spicevmc'>
      <target type='virtio' name='com.redhat.spice.0'/>
      <alias name='channel0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
    <input type='tablet' bus='usb'>
      <alias name='input0'/>
    </input>
    <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
    <graphics type='spice' port='5900' autoport='yes' listen='0.0.0.0'>
      <listen type='address' address='0.0.0.0'/>
    </graphics>
    <sound model='ich6'>
      <alias name='sound0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </sound>
    <video>
      <model type='qxl' ram='65536' vram='65536' heads='1'/>
      <alias name='video0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <redirdev bus='usb' type='spicevmc'>
      <alias name='redir0'/>
    </redirdev>
    <redirdev bus='usb' type='spicevmc'>
      <alias name='redir1'/>
    </redirdev>
    <redirdev bus='usb' type='spicevmc'>
      <alias name='redir2'/>
    </redirdev>
    <redirdev bus='usb' type='spicevmc'>
      <alias name='redir3'/>
    </redirdev>
    <memballoon model='virtio'>
      <alias name='balloon0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </memballoon>
  </devices>
</domain>

Comment 10 errata-xmlrpc 2015-03-05 05:36:02 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://rhn.redhat.com/errata/RHEA-2015-0293.html