On 11/13/15 12:22, P.A.M. van Dam (Pascal) wrote: > On Thu, Nov 12, 2015 at 07:17:49PM +0100, Laszlo Ersek wrote: > > Good afternoon all, > >> Please don't drop the list and other CC's from the discussion when the >> initial report is sent to the list. Keeping full context. > > My apologies for that. I noticed it when I got your personal out-of-office > reply. :) > > >> >> On 11/11/15 08:38, P.A.M. van Dam (Pascal) wrote: >>> On Mon, Nov 09, 2015 at 10:02:52PM +0100, Laszlo Ersek wrote: >>>> On 11/09/15 14:50, P.A.M. van Dam (Pascal) wrote: >>>>> >>>>> Good day all, >>>>> >>>>> I decided to do some testing with iSCSI boot from within a KVM. >>>>> >>>>> My setup is a Centos 7.1 KVM host with several Fedora 22 and Centos 7.1 >>>>> guests in it. The iSCSI storage has been configured >>>>> from a LenovoEMC EPX6300 NAS. >>>>> >>>>> 1. I've configured the iSCSI bootlun to be available for the OS install. >>>>> 2. Within the KVM guest OS install I assign the LUN to the Centos 7.1 OS. >>>>> 3. The OS installs without errors ont he iSCSI LUN. >>>>> >>>>> After reboot of the freshly installed OS on the KVM >>>>> I configure the iSCSI device in the OVMF user interface. >>>>> >>>>> 4. The iSCSI BOOT LUN is visible from the UEFI shell. >>>>> 5. When booting from the LUN, GRUB correcly displays the bootmenu. >>>> >>>> Am I to understand that GRUB (and its config) are correctly loaded via >>>> iSCSI? >>> >>> Yep. You are correct in this. GRUB loads without issue and both the menu >>> and commandline work. I can even access the kernel and the initrd from >>> GRUB's commandline. >>> >>>> >>>>> 6. When selecting and starting a kernel/initrd pair the started kernel >>>>> quickly crashes reporting a fault. >>>>> >>>>> My questions; >>>>> >>>>> 1. Is iSCSI boot support in the OVMF/EDKII currrently usable? >>> >>> >>>> >>>> I never tested it, but I guess it should work (for some value of >>>> "work"). Since I never tested it, I can't say what code in OvmfPkg would >>>> require specific support (perhaps the boot order library... dunno). >>>> >>>>> 2. Can I help in further analyzing the issue? It could be an issue in >>>>> EDKII (drivers?), in grub or in the Linux kernel. >>>> >>>> Your email is missing almost all of the important details, so let's >>>> start again. :) >>> >>> I will try to supply the info needed. This is my first time on this >>> mailinglist and it's long time since I've joined a Linux project. >>> >>>> >>>> - Are you using libvirt? If so, what version? What is your domain XML? >>>> >>> >>> Yes, I am using libvirt. I am currently using >>> libvirt-1.2.8-16.el7_1.5.x86_64. >>> >>> [virtlabn17.xml] >>> >>> [root@kallista:38 qemu]# cat virtlabn17.xml >>> <!-- >>> WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE >>> OVERWRITTEN AND LOST. Changes to this xml configuration should be made >>> using: >>> virsh edit virtlabn17 >>> or other application using the libvirt API. >>> --> >>> >>> <domain type='kvm'> >>> <name>virtlabn17</name> >>> <uuid>ab2b120f-8a4f-4f90-bd32-fa78fedd51b0</uuid> >>> <description>Centos 7.1 UEFI/ISCSI BOOT virtlabn17</description> >>> <memory unit='KiB'>2097152</memory> >>> <currentMemory unit='KiB'>2097152</currentMemory> >> >> Okay, so 2GB RAM. >> >>> <vcpu placement='static'>2</vcpu> >> >> 2 VCPUs >> >>> <os> >>> <type arch='x86_64' machine='pc-i440fx-rhel7.1.0'>hvm</type> >>> <loader readonly='yes' >>> type='pflash'>/usr/share/edk2.git/ovmf-x64/OVMF_CODE-pure-efi.fd</loader> >>> <nvram >>> template='/usr/share/edk2.git/ovmf-x64/OVMF_VARS-pure-efi.fd'>/var/lib/libvirt/qemu/nvram/virtlabn17_VARS.fd</nvram> >> >> Looks good. The OVMF binary is from Gerd. > > Correct. > >> >>> <boot dev='hd'/> >> >> This is kinda useless here (you don't have a disk in your config). In >> any case, as a side point, the <boot order='N'/> elements within device >> elements are much more flexible than this. See >> <http://libvirt.org/formatdomain.html#elementsNICSBoot>, and then search >> that page for more occurrences of the string "boot order=". See also the >> "boot" element's docs at >> <http://libvirt.org/formatdomain.html#elementsOSBIOS>. > > Ok. I will take a look at it. But as far as I know, it's not the cause of the > issue. :) >> >>> <bootmenu enable='yes'/> >> >> This will drop you to the edk2 setup page; I guess it's fine. > > Correct. > >> >>> </os> >>> <features> >>> <acpi/> >>> <apic/> >>> <pae/> >>> </features> >>> <cpu mode='custom' match='exact'> >>> <model fallback='allow'>SandyBridge</model> >>> </cpu> >>> <clock offset='utc'> >>> <timer name='rtc' tickpolicy='catchup'/> >>> <timer name='pit' tickpolicy='delay'/> >>> <timer name='hpet' present='no'/> >>> </clock> >>> <on_poweroff>destroy</on_poweroff> >>> <on_reboot>restart</on_reboot> >>> <on_crash>restart</on_crash> >>> <devices> >>> <emulator>/usr/libexec/qemu-kvm</emulator> >>> <controller type='usb' index='0' model='ich9-ehci1'> >>> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' >>> function='0x7'/> >>> </controller> >>> <controller type='usb' index='0' model='ich9-uhci1'> >>> <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'> >>> <master startport='2'/> >>> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' >>> function='0x1'/> >>> </controller> >>> <controller type='usb' index='0' model='ich9-uhci3'> >>> <master startport='4'/> >>> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' >>> function='0x2'/> >>> </controller> >>> <controller type='pci' index='0' model='pci-root'/> >>> <controller type='virtio-serial' index='0'> >>> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' >>> function='0x0'/> >>> </controller> >>> <interface type='bridge'> >>> <mac address='52:54:00:0e:2c:f1'/> >>> <source bridge='br0'/> >>> <model type='virtio'/> >>> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' >>> function='0x0'/> >>> </interface> >> >> I see. This is the "Bridge to LAN" config >> <http://libvirt.org/formatdomain.html#elementsNICSBridge>. >> >> You are using virtio-net, and the iPXE oprom will be present in the PCI >> ROM BAR. >> >> Idea (1): not that it might matter a lot, but you could try with the >> builtin virtio-net driver. For that, add the following element within >> <interface>: >> >> <rom bar='off'/> >> > > Yes. I implemented Idea(1) and it works! So there definately is something > with this ROM that cause the > crash. (Looking further in the email, not the crash of the kernel, but > earlier in the process) > > So; conclusion for Idea(1); it's a solution. The system boots fine. It spits > out some udev messages about > the dubious use of devices in the kernel namespace realm vs. userpsace realm, > but it works > Thanks. > > I also tried Idea(2). > >>> <serial type='pty'> >>> <target port='0'/> >>> </serial> >>> <console type='pty'> >>> <target type='serial' port='0'/> >>> </console> >>> <input type='tablet' bus='usb'/> >>> <sound model='ich6'> >>> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' >>> function='0x0'/> >>> </sound> >>> <redirdev bus='usb' type='spicevmc'> >>> </redirdev> >>> <redirdev bus='usb' type='spicevmc'> >>> </redirdev> >>> <memballoon model='virtio'> >>> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' >>> function='0x0'/> >>> </memballoon> >>> </devices> >>> </domain> >>> >>> [/virtlabn17.xml] >>> >>> >>>> - What version of QEMU are you using? What is your command line? >>>> >>> >>> /usr/libexec/qemu-kvm --version >>> QEMU emulator version 2.1.2 (qemu-kvm-ev-2.1.2-23.el7_1.8.1), Copyright (c) >>> 2003-2008 Fabrice Bellard >>> >>> Commandline appears to be (as invoked by virsh) >>> >>> /usr/libexec/qemu-kvm -name virtlabn17 -S -machine >>> pc-i440fx-rhel7.1.0,accel=kvm,usb=off -cpu SandyBridge -drive >>> file=/usr/share/edk2.git/ovmf-x64/OVMF_CODE-pure-efi.fd,if=pflash,format=raw,unit=0,readonly=on >>> -drive >>> file=/var/lib/libvirt/qemu/nvram/virtlabn17_VARS.fd,if=pflash,format=raw,unit=1 >>> -m 2048 -realtime mlock=off -smp 2,sockets=2,cores=1,threads=1 -uuid >>> ab2b120f-8a4f-4f90-bd32-fa78fedd51b0 -nographic -no-user-config >>> -nodefaults -chardev >>> socket,id=charmonitor,path=/var/lib/libvirt/qemu/virtlabn17.monitor,server,nowait >>> -mon chardev=charmonitor,id=monitor,mode=control -rtc >>> base=utc,driftfix=slew -global kvm-pit.lost_tick_policy=discard >>> -no-hpet -no-shutdown -boot order=c,menu=on,strict=on -device >>> ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x5.0x7 -device >>> ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x5 >>> -device >>> ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x5.0x1 >>> -device >>> ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x5.0x2 >>> -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x6 >>> -netdev tap,fd=25,id=hostnet0,vhost=on,vhostfd=62 -device >>> virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:0e:2c:f1,bus=pci.0,addr=0x3 >>> -chardev pty,id=charserial0 -device >>> isa-serial,chardev=charserial0,id=serial0 -device >>> usb-tablet,id=input0 -device intel-hda,id=sound0,bus=pci.0,addr=0x4 >>> -device hda-duplex,id=sound0-codec0,bus=sound0.0,cad=0 -chardev >>> spicevmc,id=charredir0,name=usbredir -device >>> usb-redir,chardev=charredir0,id=redir0 -chardev >>> spicevmc,id=charredir1,name=usbredir -device >>> usb-redir,chardev=charredir1,id=redir1 -device >>> virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x7 -msg timestamp=on >>> >>> >>> >>>> - How did you build OVMF? Do you have a verbose debug log from the OVMF >>>> run? >>> >>> I got OVMF from the nightly builds in the Krax repos: >>> >>> edk2.git-ovmf-x64-0-20151110.b1308.g9ddd7d7.noarch >> >> Right. It looks fresh. >> > > Updated every day for my testing purposes. > >>> >>>> >>>> - I could probably derive the answer to the next question from the >>>> above, but I'll ask anyway: are you using iPXE (bundled with QEMU) >>>> for driving your virtual NIC (utilized by edk2 and grub), or OVMF's >>>> builtin virtio-net driver? If you don't know (or use a NIC model >>>> different from virtio-net), then the answer is iPXE. >>> >>> iPXE is reporting. But KVM is using virtio-net. >> >> Right. >> >>> >>>> >>>> - What is the complete (= "ignore_loglevel") guest kernel log, up to and >>>> including the crash? >>> >>> GRUB commandline is: >>> >>> linuxefi /vmlinuz-3.10.0-229.el7.x86_64 root=UUID=66f3dbf7-78e9-4c10-8\ >>> 702-5ae04159a2f3 ro >>> netroot=iscsi:@10.8.63.157::3260::iqn.2012-07.com.lenovoem\ >>> c:storage.epx6300n2.n2iscsiv05 crashkernel=auto >>> ifname=eth0:52:54:00:0e:2c:f1 \ >>> iscsi_initiator=iqn.1994-05.com.redhat:virtlabn17 ip=eth0:dhcp nomodeset >>> ignor\ >>> e_loglevel >>> >>> initrdefi /initramfs-3.10.0-229.el7.x86_64.img >>> >>> >>> >>> And the kernel log is not that much, so I can include it here. It dies very >>> early in the boot process. >>> >>> !!!! X64 Exception Type - 0D(#GP - General Protection) CPU Apic ID - >>> 00000000 !!!! >>> RIP - 000000007FF67FDA, CS - 0000000000000038, RFLAGS - 0000000000210286 >>> ExceptionData - 0000000000000000 >>> RAX - AFAFAFAFAFAFAFAF, RCX - AFAFAFAFAFAFAFAF, RDX - 000000007E984630 >>> RBX - 000000007E85C628, RSP - 000000007FF58418, RBP - 000000007FF58430 >>> RSI - 000000007F04C898, RDI - AFAFAFAFAFAFAFAF >>> R8 - 000000007F263818, R9 - 000000007F04AC58, R10 - 000000007F0B6898 >>> R11 - 000000007E863000, R12 - 000000007E85BAD0, R13 - 000000007FF59768 >>> R14 - 000000007FF59778, R15 - 0000000000000000 >>> DS - 0000000000000030, ES - 0000000000000030, FS - 0000000000000030 >>> GS - 0000000000000030, SS - 0000000000000030 >>> CR0 - 0000000080000033, CR2 - 0000000000000000, CR3 - 000000007FEF8000 >>> CR4 - 0000000000000668, CR8 - 0000000000000000 >>> DR0 - 0000000000000000, DR1 - 0000000000000000, DR2 - 0000000000000000 >>> DR3 - 0000000000000000, DR6 - 00000000FFFF0FF0, DR7 - 0000000000000400 >>> GDTR - 000000007FEE67D8 0000000000000047, LDTR - 0000000000000000 >>> IDTR - 000000007F69D018 0000000000000FFF, TR - 0000000000000000 >>> FXSAVE_STATE - 000000007FF58070 >>> !!!! Find PE image >>> /home/jenkins/workspace/edk2/rpmbuild/rpm/BUILD/edk2.git/Build/OvmfX64/DEBUG_GCC49/X64/MdeModulePkg/Core/Dxe/DxeMain/DEBUG/DxeCore.dll >>> (ImageBase=000000007FF5A000, EntryPoint=000000007FF5A240) !!!! >>> >>> Hope this helps. >> >> It does. >> >> This is not a guest kernel log. It is a register dump, due to a GP >> fault, from the edk2 DXE_CORE that is built into the OVMF binary. With >> the error message printed, I could locate the exact source code point, >> but for that I'd need the Build subdirectory (with the intermediate >> build files) from Gerd's build system -- and that subdirectory doesn't >> exist any longer. >> >> You wrote: >> >>> 5. When booting from the LUN, GRUB correcly displays the bootmenu. >>> 6. When selecting and starting a kernel/initrd pair the started >>> kernel quickly crashes reporting a fault. >> >> The above means that you don't reach the kernel (well, not those parts >> of it that would run after the EFI stub's ExitBootServices() call). > > That makes sense to me. > >> >> I wonder what could cause the DXE_CORE to blow up. I suspect it happens >> near (or in) gBS->ExitBootServices(). >> >> That UEFI boot service is implemented with the CoreExitBootServices() >> function in "MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c", and UEFI drivers >> for NICs are strongly recommended to abort pending transfers / re-set >> cards in EVT_SIGNAL_EXIT_BOOT_SERVICES callbacks. >> >> ... The iPXE packages on CentOS's Community Build System >> <http://cbs.centos.org/koji/packageinfo?packageID=87> look rather old; >> the most recent build seems to be "ipxe-20130517-7.gitc4bce43.el7". (The >> virtio-net option ROM in question comes from the "ipxe-roms-qemu" >> subpackage.) >> >> In 2015 there have been fixes in iPXE that could affect your booting. >> For example, 755d2b8f ("Ensure drivers are disconnected when >> ExitBootServices() is called"). >> >> Idea (2): can you please install the "ipxe.git-combined" package from >> Gerd's repo as well, and then add the following to your <interface> >> element (note: this is mutually exclusive with idea (1)): >> >> <rom bar='on' file='/usr/share/ipxe.git/combined/1af41000.rom'/> >> > > I implemented this also (removing the rom bar='off' first ofcourse) > and this leads to the same crash and register dump. Ergo, both entities > definately bite eachother. > > Looking at it one way, my issue is solved now. I can boot from my iSCSI LUNs > and will > conduct further testing with booting from DM MULTIPATH devices etc. > > But... are there scenario's possible where one would like to have both > the combined ROM and iSCSI booting?
Yes, such scenarios are possible. For example, if you use a NIC emulated by QEMU for which OVMF has no builtin driver (like "rtl8139"), but iPXE does. (Please refer to the "Network Support" section in OvmfPkg/README.) In those cases the iPXE oprom is your only option. I suggest to discuss this further with Michael Brown, the iPXE maintainer (CC'd). Thanks Laszlo > And so, should this be solved? Or.. > are there any other case that could trigger this behaviour? > > Thanks for your help. Happily testing further. > > If you need more testcases executed; please say so. > > Kind regards, > > Pascal > > > >> Thanks >> Laszlo >> >>> >>> Glad to be of assistance in testing this. Having the KVMs boot from >>> UEFI/ISCSI targets would be a great benefit. I will document my >>> findings and write a recipe how to implement it for the project. >>> >>> >>>> >>>> CC'ing Gary (I seem to recall that Gary has experience with iSCSI >>>> booting under OVMF -- see >>>> <https://github.com/tianocore/edk2/commit/36c6413f>.) >>>> >>>> Thanks >>>> Laszlo >>>> >>>>> >>>>> Thanks for your time. >>>>> >>>>> Kind regards, >>>>> >>>>> Pascal >>>>> >>>>> _______________________________________________ >>>>> edk2-devel mailing list >>>>> edk2-devel@lists.01.org >>>>> https://lists.01.org/mailman/listinfo/edk2-devel >>>>> >>>> >>>> _______________________________________________ >>>> edk2-devel mailing list >>>> edk2-devel@lists.01.org >>>> https://lists.01.org/mailman/listinfo/edk2-devel >> >> _______________________________________________ >> edk2-devel mailing list >> edk2-devel@lists.01.org >> https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel