Bug 2131123

Summary: RHEL7 UEFI guest turns into black after v2v conversion
Product: Red Hat Enterprise Linux 9 Reporter: mxie <mxie>
Component: virt-v2vAssignee: Laszlo Ersek <lersek>
Status: CLOSED ERRATA QA Contact: mxie <mxie>
Severity: high Docs Contact:
Priority: high    
Version: 9.1CC: chhu, hongzliu, juzhou, lersek, mzhan, rjones, tyan, tzheng, vwu, xiaodwan, ymankad
Target Milestone: rcKeywords: Triaged
Target Release: ---   
Hardware: x86_64   
OS: Unspecified   
Whiteboard:
Fixed In Version: virt-v2v-2.2.0-5.el9 Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2023-05-09 07:45:47 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:
Bug Depends On: 2135762    
Bug Blocks:    
Attachments:
Description Flags
rhel7-uefi-guest-console-black.png none

Description mxie@redhat.com 2022-09-30 01:45:10 UTC
Created attachment 1915140 [details]
rhel7-uefi-guest-console-black.png

Description of problem:
RHEL7 UEFI guest turns into black after v2v conversion

Version-Release number of selected component (if applicable):
virt-v2v-2.0.7-6.el9.x86_64
libguestfs-1.48.4-2.el9.x86_64
guestfs-tools-1.48.2-5.el9.x86_64
libvirt-libs-8.7.0-1.el9.x86_64
qemu-img-7.1.0-1.el9.x86_64
nbdkit-server-1.30.8-1.el9.x86_64
libnbd-1.12.6-1.el9.x86_64


How reproducible:
100%

Steps to Reproduce:
1.Convert a RHEL7 UEFI guest from VMware to libvirt by v2v
# virt-v2v -ic vpx://root.213.107/data/10.73.212.38/?no_verify=1 -it vddk -io vddk-libdir=/home/vddk7.0.3 -io  vddk-thumbprint=87:F9:29:E7:33:DE:34:68:74:3F:6A:C9:61:96:C3:51:E2:1E:EA:2B -ip /home/passwd -of qcow2 esx7.0-rhel7.9-uefi-enable-secureboot -v -x |& tee > v2v-convert-rhel7-uefi-guest-to-libvirt.log
█ 100% [****************************************]

2.Check guest after v2v finishing conversion, but guest turns into black after powering on, pls refer to screenshot 'rhel7-uefi-guest-console-black.png'


Actual results:
As above description

Expected results:
Checkpoints of RHEL7 UEFI guest are passed after v2v conversion

Additional info:

Comment 2 Laszlo Ersek 2022-09-30 08:00:56 UTC
(1) forked from <https://bugzilla.redhat.com/show_bug.cgi?id=2124193#c26> and onwards)

(2) Gerd said in <https://bugzilla.redhat.com/show_bug.cgi?id=2124193#c32>:

> Note the module has been renamed to just 'bochs' in recent kernels,
> so you probably want add both names to the check list.

(3) My (much) earlier statement that this issue was a RHEL-7.6 guest kernel bug, fixed in RHEL-7.9, was incorrect. I was misled by the fact that installing the RHEL-7.9 GA kernel in the *converted* (output) domain had restored "rhgb" to functional state. In fact what happened was that the RHEL-7.9 guest kernel installation triggered an initrd rebuild (just like "plymouth-set-default-theme -R charge" in <https://bugzilla.redhat.com/show_bug.cgi?id=2124193#c28>), and that masked the actual problem. It's great that mxie went on to install the RHEL-7.9 kernel on the *source* (vmware) guest side, and that she then redid the conversion; that disproved my theory.

Comment 3 Laszlo Ersek 2022-09-30 08:27:49 UTC
Here's the plymouthd (plymouth-0.8.9-0.34.20140113.el7.x86_64) crash backtrace:

#0  0x000055ce0f191540 in ?? ()
#1  0x00007f76214015f9 in ply_renderer_open_input_source (renderer=0x55ce0f1943e0, input_source=<optimized out>) at ply-renderer.c:386
#2  0x00007f76213fb408 in ply_keyboard_watch_for_renderer_input (keyboard=0x55ce0f19e980) at ply-keyboard.c:311
#3  ply_keyboard_watch_for_input (keyboard=keyboard@entry=0x55ce0f19e980) at ply-keyboard.c:394
#4  0x00007f76213fa97b in ply_device_manager_activate_keyboards (manager=0x55ce0f192950) at ply-device-manager.c:1035
#5  0x000055ce0ede3828 in show_theme (state=0x7ffc72096930, theme_path=<optimized out>) at main.c:1761
#6  0x000055ce0ede3eb8 in show_default_splash (state=0x7ffc72096930) at main.c:470
#7  0x000055ce0ede4fe8 in show_default_splash (state=0x7ffc72096930) at main.c:910
#8  show_splash (state=0x7ffc72096930) at main.c:921
#9  0x00007f7621610612 in ply_event_loop_handle_timeouts (loop=0x55ce0f18d150) at ply-event-loop.c:1234
#10 ply_event_loop_process_pending_events (loop=loop@entry=0x55ce0f18d150) at ply-event-loop.c:1303
#11 0x00007f7621610f70 in ply_event_loop_run (loop=0x55ce0f18d150) at ply-event-loop.c:1368
#12 0x000055ce0eddd455 in main (argc=<optimized out>, argv=<optimized out>) at main.c:2390

In ply_renderer_open_input_source(), we have

  renderer->input_source_is_open = renderer->plugin_interface->open_input_source (renderer->backend,

And the function pointer "renderer->plugin_interface->open_input_source" is 0x000055ce0f191540, which apparently points to outer space.

There are three "open_input_source" implementations (more precisely, three plugin interfaces):

  plugins/renderers/frame-buffer/plugin.c
  plugins/renderers/x11/plugin.c
  plugins/renderers/drm/plugin.c

I *think* the problem is that one of these (the DRM one?) gets initially set up, but then potentially unloaded (?), due to the bochs_drm kernel driver not being present in the initrd. Then plymouth leaves some invalid pointers around, and we get the crash.

Comment 4 Laszlo Ersek 2022-09-30 09:30:21 UTC
I can reproduce this locally. In fact in my case it seems to be worse -- I don't get a converted guest that boots to a blank screen but otherwise fine; I get a stuck guest (with spinning CPU) that doesn't seem to quiesce at all.

Comment 5 Laszlo Ersek 2022-09-30 11:32:14 UTC
Yup, including "bochs-drm" (NOTE: *NOT* "bochs_drm"!!!) in the initrd solves the problem for me.

Comment 6 Laszlo Ersek 2022-09-30 12:05:19 UTC
[v2v PATCH] convert_linux: include the BOCHS DRM driver in the initial ram disk
Message-Id: <20220930120444.11883-1-lersek>
https://listman.redhat.com/archives/libguestfs/2022-September/030092.html

Comment 7 Laszlo Ersek 2022-10-04 10:25:56 UTC
(In reply to Laszlo Ersek from comment #6)
> [v2v PATCH] convert_linux: include the BOCHS DRM driver in the initial ram disk
> Message-Id: <20220930120444.11883-1-lersek>
> https://listman.redhat.com/archives/libguestfs/2022-September/030092.html

Upstream commit aa69d64cd452.

Comment 14 Richard W.M. Jones 2022-12-02 12:45:12 UTC
Available in virt-v2v-2.0.7-7.el9

Comment 15 mxie@redhat.com 2022-12-07 01:40:47 UTC
Test the bug with below builds:
virt-v2v-2.0.7-7.el9.x86_64
libguestfs-1.48.4-4.el9.x86_64
guestfs-tools-1.48.2-8.el9.x86_64
nbdkit-server-1.30.8-2.el9_1.x86_64
libnbd-1.12.6-1.el9.x86_64
libvirt-libs-8.10.0-1.el9.x86_64
qemu-img-7.1.0-6.el9.x86_64


Steps:
1.Convert a rhel7 uefi guest from VMware to local libvirt by v2v
# virt-v2v -ic vpx://administrator%40vsphere.local.213.207/data/10.73.212.38/?no_verify=1 -it vddk -io vddk-libdir=/home/vddk8.0.0 -io  vddk-thumbprint=09:9E:54:CF:C3:36:11:9D:7D:B6:45:E0:85:74:4D:DB:CE:24:7B:46  -ip /home/passwd esx7.0-rhel7.9-uefi-enable-secureboot -of qcow2
[   0.9] Setting up the source: -i libvirt -ic vpx://administrator%40vsphere.local.213.207/data/10.73.212.38/?no_verify=1 -it vddk esx7.0-rhel7.9-uefi-enable-secureboot
[   2.6] Opening the source
[   9.2] Inspecting the source
[  29.9] Checking for sufficient free disk space in the guest
[  29.9] Converting Red Hat Enterprise Linux Server 7.9 (Maipo) to run on KVM
virt-v2v: This guest has virtio drivers installed.
[ 236.3] Mapping filesystem data to avoid copying unused and blank areas
[ 237.5] Closing the overlay
[ 237.8] Assigning disks to buses
[ 237.8] Checking if the guest needs BIOS or UEFI to boot
virt-v2v: This guest requires UEFI on the target to boot.
[ 237.8] Setting up the destination: -o libvirt
[ 241.0] Copying disk 1/1
█ 100% [****************************************]
[ 417.8] Creating output metadata
[ 417.9] Finishing off

2.Check guest after v2v finishing conversion, checkpoints of the guest are passed

3.Convert a rhel7 uefi guest from VMware to rhv by v2v
# virt-v2v -ic vpx://administrator%40vsphere.local.213.207/data/10.73.212.38/?no_verify=1 -it vddk -io vddk-libdir=/home/vddk8.0.0 -io  vddk-thumbprint=09:9E:54:CF:C3:36:11:9D:7D:B6:45:E0:85:74:4D:DB:CE:24:7B:46  -ip /home/passwd esx7.0-rhel7.9-uefi-enable-secureboot -of qcow2  -o rhv-upload -oc https://dell-per740-22.lab.eng.pek2.redhat.com/ovirt-engine/api -os nfs_data  -op /home/rhvpasswd 
[   0.1] Setting up the source: -i libvirt -ic vpx://administrator%40vsphere.local.213.207/data/10.73.212.38/?no_verify=1 -it vddk esx7.0-rhel7.9-uefi-enable-secureboot
[   1.9] Opening the source
[   8.8] Inspecting the source
[  43.8] Checking for sufficient free disk space in the guest
[  43.8] Converting Red Hat Enterprise Linux Server 7.9 (Maipo) to run on KVM
virt-v2v: This guest has virtio drivers installed.
[ 347.9] Mapping filesystem data to avoid copying unused and blank areas
[ 349.0] Closing the overlay
[ 349.3] Assigning disks to buses
[ 349.3] Checking if the guest needs BIOS or UEFI to boot
virt-v2v: This guest requires UEFI on the target to boot.
[ 349.3] Setting up the destination: -o rhv-upload -oc https://dell-per740-22.lab.eng.pek2.redhat.com/ovirt-engine/api -os nfs_data
[ 370.6] Copying disk 1/1
█ 100% [****************************************]
[1260.6] Creating output metadata
[1284.2] Finishing off


4.Check guest after v2v finishing conversion, checkpoints of the guest are passed

Result:
  The bug has been fixed

Comment 21 mxie@redhat.com 2022-12-13 08:07:02 UTC
Verify the bug with below builds:
virt-v2v-2.0.7-7.el9.x86_64
libguestfs-1.48.4-4.el9.x86_64
guestfs-tools-1.48.2-8.el9.x86_64
nbdkit-server-1.30.8-2.el9_1.x86_64
libnbd-1.12.6-1.el9.x86_64
libvirt-libs-8.10.0-2.el9.x86_64
qemu-img-7.1.0-6.el9.x86_64

Steps:
1.Convert a rhel7 uefi guest from VMware to local libvirt by v2v
# virt-v2v -ic vpx://administrator%40vsphere.local.213.207/data/10.73.212.38/?no_verify=1 -it vddk -io vddk-libdir=/home/vddk8.0.0 -io  vddk-thumbprint=09:9E:54:CF:C3:36:11:9D:7D:B6:45:E0:85:74:4D:DB:CE:24:7B:46  -ip /home/passwd esx7.0-rhel7.9-uefi-enable-secureboot -of qcow2
[   0.1] Setting up the source: -i libvirt -ic vpx://administrator%40vsphere.local.213.207/data/10.73.212.38/?no_verify=1 -it vddk esx7.0-rhel7.9-uefi-enable-secureboot
[   2.0] Opening the source
[  11.2] Inspecting the source
[  74.4] Checking for sufficient free disk space in the guest
[  74.4] Converting Red Hat Enterprise Linux Server 7.9 (Maipo) to run on KVM
virt-v2v: This guest has virtio drivers installed.
[ 330.9] Mapping filesystem data to avoid copying unused and blank areas
[ 331.9] Closing the overlay
[ 332.2] Assigning disks to buses
[ 332.2] Checking if the guest needs BIOS or UEFI to boot
virt-v2v: This guest requires UEFI on the target to boot.
[ 332.2] Setting up the destination: -o libvirt
[ 336.7] Copying disk 1/1
█ 100% [****************************************]
[ 546.1] Creating output metadata
[ 546.1] Finishing off

2.Check guest after v2v finishing conversion, checkpoints of the guest are passed

3.Convert a rhel7 uefi guest from VMware to rhv by v2v
# virt-v2v -ic vpx://administrator%40vsphere.local.213.207/data/10.73.212.38/?no_verify=1 -it vddk -io vddk-libdir=/home/vddk8.0.0 -io  vddk-thumbprint=09:9E:54:CF:C3:36:11:9D:7D:B6:45:E0:85:74:4D:DB:CE:24:7B:46  -ip /home/passwd esx7.0-rhel7.9-uefi-enable-secureboot -of qcow2  -o rhv-upload -oc https://dell-per740-22.lab.eng.pek2.redhat.com/ovirt-engine/api -os nfs_data  -op /home/rhvpasswd 
[   0.0] Setting up the source: -i libvirt -ic vpx://administrator%40vsphere.local.213.207/data/10.73.212.38/?no_verify=1 -it vddk esx7.0-rhel7.9-uefi-enable-secureboot
[   1.8] Opening the source
[   7.6] Inspecting the source
[  24.1] Checking for sufficient free disk space in the guest
[  24.1] Converting Red Hat Enterprise Linux Server 7.9 (Maipo) to run on KVM
virt-v2v: This guest has virtio drivers installed.
[ 181.2] Mapping filesystem data to avoid copying unused and blank areas
[ 182.1] Closing the overlay
[ 182.4] Assigning disks to buses
[ 182.4] Checking if the guest needs BIOS or UEFI to boot
virt-v2v: This guest requires UEFI on the target to boot.
[ 182.4] Setting up the destination: -o rhv-upload -oc https://dell-per740-22.lab.eng.pek2.redhat.com/ovirt-engine/api -os nfs_data
[ 204.3] Copying disk 1/1
█ 100% [****************************************]
[ 652.2] Creating output metadata
[ 674.1] Finishing off

4.Check guest after v2v finishing conversion, checkpoints of the guest are passed

Result:
   No new problem was found, move the bug from ON_QA to VERIFIED

Comment 23 errata-xmlrpc 2023-05-09 07:45:47 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 (virt-v2v bug fix and enhancement update), 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://access.redhat.com/errata/RHBA-2023:2313