Richard W.M. Jones
2021-Nov-08 09:12 UTC
[Libguestfs] [PATCH v2v 1/2] Remove requested_guestcaps / rcaps
This was part of the old in-place support. When we add new in-place support we'll do something else, but currently this is dead code so remove it completely. Note this removes the code for installing the virtio-scsi driver (only ever using virtio-blk). This was also dead code in the current implementation of virt-v2v, but worth remembering in case we want to resurrect this feature in a future version. --- convert/convert.ml | 10 ++--- convert/convert_linux.ml | 24 +++------- convert/convert_linux.mli | 2 +- convert/convert_windows.ml | 4 +- convert/convert_windows.mli | 2 +- convert/windows_virtio.ml | 87 ++++++------------------------------- convert/windows_virtio.mli | 9 +--- lib/types.ml | 20 --------- lib/types.mli | 10 ----- 9 files changed, 30 insertions(+), 138 deletions(-) diff --git a/convert/convert.ml b/convert/convert.ml index 07c7aee90..109e55284 100644 --- a/convert/convert.ml +++ b/convert/convert.ml @@ -230,10 +230,7 @@ helper-v2v-convert V2VDIR (* Conversion. *) let guestcaps - let rcaps = (*XXX*) - { rcaps_block_bus = None; rcaps_net_bus = None; rcaps_video = None } in - - do_convert g source inspect keep_serial_console rcaps static_ips in + do_convert g source inspect keep_serial_console static_ips in g#umount_all (); @@ -364,7 +361,7 @@ and do_fstrim g inspect ) fses (* Conversion. *) -and do_convert g source inspect keep_serial_console rcaps interfaces +and do_convert g source inspect keep_serial_console interfaces (match inspect.i_product_name with | "unknown" -> message (f_"Converting the guest to run on KVM") @@ -388,9 +385,8 @@ and do_convert g source inspect keep_serial_console rcaps interfaces error (f_"virt-v2v is unable to convert this guest type (%s/%s)") inspect.i_type inspect.i_distro in debug "picked conversion module %s" conversion_name; - debug "requested caps: %s" (string_of_requested_guestcaps rcaps); let guestcaps - convert g source inspect keep_serial_console rcaps interfaces in + convert g source inspect keep_serial_console interfaces in debug "%s" (string_of_guestcaps guestcaps); (* Did we manage to install virtio drivers? *) diff --git a/convert/convert_linux.ml b/convert/convert_linux.ml index 057cf9dff..b0b5d916d 100644 --- a/convert/convert_linux.ml +++ b/convert/convert_linux.ml @@ -34,7 +34,7 @@ open Linux_kernels module G = Guestfs (* The conversion function. *) -let convert (g : G.guestfs) source inspect keep_serial_console rcaps _ +let convert (g : G.guestfs) source inspect keep_serial_console _ (*----------------------------------------------------------------------*) (* Inspect the guest first. We already did some basic inspection in * the common v2v.ml code, but that has to deal with generic guests @@ -111,22 +111,12 @@ let convert (g : G.guestfs) source inspect keep_serial_console rcaps _ let acpi = supports_acpi () in - let video - match rcaps.rcaps_video with - | None -> QXL - | Some video -> video in - let block_type - match rcaps.rcaps_block_bus with - | None -> if kernel.ki_supports_virtio_blk then Virtio_blk else IDE - | Some block_type -> block_type in - + if kernel.ki_supports_virtio_blk then Virtio_blk else IDE in let net_type - match rcaps.rcaps_net_bus with - | None -> if kernel.ki_supports_virtio_net then Virtio_net else E1000 - | Some net_type -> net_type in + if kernel.ki_supports_virtio_net then Virtio_net else E1000 in - configure_display_driver video; + configure_display_driver (); remap_block_devices block_type; configure_kernel_modules block_type net_type; rebuild_initrd kernel; @@ -158,7 +148,7 @@ let convert (g : G.guestfs) source inspect keep_serial_console rcaps _ let guestcaps = { gcaps_block_bus = block_type; gcaps_net_bus = net_type; - gcaps_video = video; + gcaps_video = QXL; gcaps_virtio_rng = kernel.ki_supports_virtio_rng; gcaps_virtio_balloon = kernel.ki_supports_virtio_balloon; gcaps_isa_pvpanic = kernel.ki_supports_isa_pvpanic; @@ -828,8 +818,8 @@ let convert (g : G.guestfs) source inspect keep_serial_console rcaps _ else true - and configure_display_driver video - let video_driver = match video with QXL -> "qxl" | Cirrus -> "cirrus" in + and configure_display_driver () + let video_driver = "qxl" in let updated = ref false in diff --git a/convert/convert_linux.mli b/convert/convert_linux.mli index 8adc172a0..688a7acea 100644 --- a/convert/convert_linux.mli +++ b/convert/convert_linux.mli @@ -23,5 +23,5 @@ Mint and Kali are supported by this module. *) val convert : Guestfs.guestfs -> Types.source -> Types.inspect -> - bool -> Types.requested_guestcaps -> Types.static_ip list -> + bool -> Types.static_ip list -> Types.guestcaps diff --git a/convert/convert_windows.ml b/convert/convert_windows.ml index f2c1132bf..31e16723b 100644 --- a/convert/convert_windows.ml +++ b/convert/convert_windows.ml @@ -38,7 +38,7 @@ module G = Guestfs * time the Windows VM is booted on KVM. *) -let convert (g : G.guestfs) _ inspect _ rcaps static_ips +let convert (g : G.guestfs) _ inspect _ static_ips (*----------------------------------------------------------------------*) (* Inspect the Windows guest. *) @@ -469,7 +469,7 @@ if errorlevel 3010 exit /b 0 disable_xenpv_win_drivers reg; disable_prl_drivers reg; disable_autoreboot reg; - Windows_virtio.install_drivers reg inspect rcaps + Windows_virtio.install_drivers reg inspect and disable_xenpv_win_drivers reg (* Disable xenpv-win service (RHBZ#809273). *) diff --git a/convert/convert_windows.mli b/convert/convert_windows.mli index d2978d6a4..d3ea3d6ae 100644 --- a/convert/convert_windows.mli +++ b/convert/convert_windows.mli @@ -21,5 +21,5 @@ This module converts a Windows guest to run on KVM. *) val convert : Guestfs.guestfs -> Types.source -> Types.inspect -> - bool -> Types.requested_guestcaps -> Types.static_ip list -> + bool -> Types.static_ip list -> Types.guestcaps diff --git a/convert/windows_virtio.ml b/convert/windows_virtio.ml index f843dae2d..08db4ad69 100644 --- a/convert/windows_virtio.ml +++ b/convert/windows_virtio.ml @@ -44,31 +44,16 @@ let viostor_modern_pciid = "VEN_1AF4&DEV_1042&SUBSYS_11001AF4&REV_01" let vioscsi_legacy_pciid = "VEN_1AF4&DEV_1004&SUBSYS_00081AF4&REV_00" let vioscsi_modern_pciid = "VEN_1AF4&DEV_1048&SUBSYS_11001AF4&REV_01" -let rec install_drivers ((g, _) as reg) inspect rcaps +let rec install_drivers ((g, _) as reg) inspect (* Copy the virtio drivers to the guest. *) let driverdir = sprintf "%s/Drivers/VirtIO" inspect.i_windows_systemroot in g#mkdir_p driverdir; if not (copy_drivers g inspect driverdir) then ( - match rcaps with - | { rcaps_block_bus = Some Virtio_blk | Some Virtio_SCSI } - | { rcaps_net_bus = Some Virtio_net } - | { rcaps_video = Some QXL } -> - error (f_"there are no virtio drivers available for this version of Windows (%d.%d %s %s). virt-v2v looks for drivers in %s") - inspect.i_major_version inspect.i_minor_version inspect.i_arch - inspect.i_product_variant virtio_win - - | { rcaps_block_bus = (Some IDE | None); - rcaps_net_bus = ((Some E1000 | Some RTL8139 | None) as net_type); - rcaps_video = (Some Cirrus | None) } -> warning (f_"there are no virtio drivers available for this version of Windows (%d.%d %s %s). virt-v2v looks for drivers in %s\n\nThe guest will be configured to use slower emulated devices.") inspect.i_major_version inspect.i_minor_version inspect.i_arch inspect.i_product_variant virtio_win; - let net_type - match net_type with - | Some model -> model - | None -> RTL8139 in - (IDE, net_type, Cirrus, false, false, false, false) + (IDE, RTL8139, Cirrus, false, false, false, false) ) else ( (* Can we install the block driver? *) @@ -83,25 +68,14 @@ let rec install_drivers ((g, _) as reg) inspect rcaps ) filenames ) ) with Not_found -> None in - let has_vioscsi = g#exists (driverdir // "vioscsi.inf") in - match rcaps.rcaps_block_bus, viostor_driver, has_vioscsi with - | Some Virtio_blk, None, _ -> - error (f_"there is no virtio block device driver for this version of Windows (%d.%d %s). virt-v2v looks for this driver in %s\n\nThe guest will be configured to use a slower emulated device.") - inspect.i_major_version inspect.i_minor_version - inspect.i_arch virtio_win - - | Some Virtio_SCSI, _, false -> - error (f_"there is no vioscsi (virtio SCSI) driver for this version of Windows (%d.%d %s). virt-v2v looks for this driver in %s\n\nThe guest will be configured to use a slower emulated device.") - inspect.i_major_version inspect.i_minor_version - inspect.i_arch virtio_win - - | None, None, _ -> + match viostor_driver with + | None -> warning (f_"there is no virtio block device driver for this version of Windows (%d.%d %s). virt-v2v looks for this driver in %s\n\nThe guest will be configured to use a slower emulated device.") inspect.i_major_version inspect.i_minor_version inspect.i_arch virtio_win; IDE - | (Some Virtio_blk | None), Some driver_name, _ -> + | Some driver_name -> (* Block driver needs tweaks to allow booting; the rest is set up by PnP * manager *) let source = driverdir // (driver_name ^ ".sys") in @@ -111,22 +85,7 @@ let rec install_drivers ((g, _) as reg) inspect rcaps g#cp source target; add_guestor_to_registry reg inspect driver_name viostor_legacy_pciid; add_guestor_to_registry reg inspect driver_name viostor_modern_pciid; - Virtio_blk - - | Some Virtio_SCSI, _, true -> - (* Block driver needs tweaks to allow booting; the rest is set up by PnP - * manager *) - let source = driverdir // "vioscsi.sys" in - let target = sprintf "%s/system32/drivers/vioscsi.sys" - inspect.i_windows_systemroot in - let target = g#case_sensitive_path target in - g#cp source target; - add_guestor_to_registry reg inspect "vioscsi" vioscsi_legacy_pciid; - add_guestor_to_registry reg inspect "vioscsi" vioscsi_modern_pciid; - Virtio_SCSI - - | Some IDE, _, _ -> - IDE in + Virtio_blk in (* Can we install the virtio-net driver? *) let net : guestcaps_net_type @@ -135,46 +94,28 @@ let rec install_drivers ((g, _) as reg) inspect rcaps List.exists ( fun driver_file -> g#exists (driverdir // driver_file) ) filenames in - match rcaps.rcaps_net_bus, has_netkvm with - | Some Virtio_net, false -> - error (f_"there is no virtio network driver for this version of Windows (%d.%d %s). virt-v2v looks for this driver in %s") - inspect.i_major_version inspect.i_minor_version - inspect.i_arch virtio_win - - | None, false -> + if not has_netkvm then ( warning (f_"there is no virtio network driver for this version of Windows (%d.%d %s). virt-v2v looks for this driver in %s\n\nThe guest will be configured to use a slower emulated device.") inspect.i_major_version inspect.i_minor_version inspect.i_arch virtio_win; RTL8139 - - | (Some Virtio_net | None), true -> - Virtio_net - - | Some net_type, _ -> - net_type in + ) + else + Virtio_net in (* Can we install the QXL driver? *) let video : guestcaps_video_type let has_qxl g#exists (driverdir // "qxl.inf") || g#exists (driverdir // "qxldod.inf") in - match rcaps.rcaps_video, has_qxl with - | Some QXL, false -> - error (f_"there is no QXL driver for this version of Windows (%d.%d %s). virt-v2v looks for this driver in %s") - inspect.i_major_version inspect.i_minor_version - inspect.i_arch virtio_win - - | None, false -> + if not has_qxl then ( warning (f_"there is no QXL driver for this version of Windows (%d.%d %s). virt-v2v looks for this driver in %s\n\nThe guest will be configured to use a basic VGA display driver.") inspect.i_major_version inspect.i_minor_version inspect.i_arch virtio_win; Cirrus - - | (Some QXL | None), true -> - QXL - - | Some Cirrus, _ -> - Cirrus in + ) + else + QXL in (* Did we install the miscellaneous drivers? *) let virtio_rng_supported = g#exists (driverdir // "viorng.inf") in diff --git a/convert/windows_virtio.mli b/convert/windows_virtio.mli index 642317b15..4e24625a4 100644 --- a/convert/windows_virtio.mli +++ b/convert/windows_virtio.mli @@ -19,9 +19,9 @@ (** Functions for installing Windows virtio drivers. *) val install_drivers - : Registry.t -> Types.inspect -> Types.requested_guestcaps -> + : Registry.t -> Types.inspect -> Types.guestcaps_block_type * Types.guestcaps_net_type * Types.guestcaps_video_type * bool * bool * bool * bool -(** [install_drivers reg inspect rcaps] +(** [install_drivers reg inspect] installs virtio drivers from the driver directory or driver ISO into the guest driver directory and updates the registry so that the [viostor.sys] driver gets loaded by Windows at boot. @@ -29,11 +29,6 @@ val install_drivers [reg] is the system hive which is open for writes when this function is called. - [rcaps] is the set of guest "capabilities" requested by the caller. This - may include the type of the block driver, network driver, and video driver. - install_drivers will adjust its choices based on that information, and - abort if the requested driver wasn't found. - This returns the tuple [(block_driver, net_driver, video_driver, virtio_rng_supported, virtio_ballon_supported, isa_pvpanic_supported)] reflecting what devices are now required by the guest, either diff --git a/lib/types.ml b/lib/types.ml index 72d10d1ec..9be3e6fcd 100644 --- a/lib/types.ml +++ b/lib/types.ml @@ -422,11 +422,6 @@ type guestcaps = { gcaps_arch : string; gcaps_acpi : bool; } -and requested_guestcaps = { - rcaps_block_bus : guestcaps_block_type option; - rcaps_net_bus : guestcaps_net_type option; - rcaps_video : guestcaps_video_type option; -} and guestcaps_block_type = Virtio_blk | Virtio_SCSI | IDE and guestcaps_net_type = Virtio_net | E1000 | RTL8139 and guestcaps_video_type = QXL | Cirrus @@ -463,21 +458,6 @@ gcaps_acpi = %b gcaps.gcaps_arch gcaps.gcaps_acpi -let string_of_requested_guestcaps rcaps - sprintf "\ -rcaps_block_bus = %s -rcaps_net_bus = %s -rcaps_video = %s -" (match rcaps.rcaps_block_bus with - | None -> "unspecified" - | Some block_type -> (string_of_block_type block_type)) - (match rcaps.rcaps_net_bus with - | None -> "unspecified" - | Some net_type -> (string_of_net_type net_type)) - (match rcaps.rcaps_video with - | None -> "unspecified" - | Some video -> (string_of_video video)) - type target_buses = { target_virtio_blk_bus : target_bus_slot array; target_ide_bus : target_bus_slot array; diff --git a/lib/types.mli b/lib/types.mli index 0bae445d8..4d4049605 100644 --- a/lib/types.mli +++ b/lib/types.mli @@ -282,22 +282,12 @@ type guestcaps = { } (** Guest capabilities after conversion. eg. Was virtio found or installed? *) -and requested_guestcaps = { - rcaps_block_bus : guestcaps_block_type option; - rcaps_net_bus : guestcaps_net_type option; - rcaps_video : guestcaps_video_type option; -} -(** For [--in-place] conversions, the requested guest capabilities, to - allow the caller to affect conversion choices. [None] = no - preference, use the best available. *) - and guestcaps_block_type = Virtio_blk | Virtio_SCSI | IDE and guestcaps_net_type = Virtio_net | E1000 | RTL8139 and guestcaps_video_type = QXL | Cirrus and guestcaps_machine = I440FX | Q35 | Virt val string_of_guestcaps : guestcaps -> string -val string_of_requested_guestcaps : requested_guestcaps -> string (** {2 Guest buses} *) -- 2.32.0
Laszlo Ersek
2021-Nov-08 11:19 UTC
[Libguestfs] [PATCH v2v 1/2] Remove requested_guestcaps / rcaps
On 11/08/21 10:12, Richard W.M. Jones wrote:> This was part of the old in-place support. When we add new in-place > support we'll do something else, but currently this is dead code so > remove it completely. > > Note this removes the code for installing the virtio-scsi driver (only > ever using virtio-blk). This was also dead code in the current > implementation of virt-v2v, but worth remembering in case we want to > resurrect this feature in a future version. > --- > convert/convert.ml | 10 ++--- > convert/convert_linux.ml | 24 +++------- > convert/convert_linux.mli | 2 +- > convert/convert_windows.ml | 4 +- > convert/convert_windows.mli | 2 +- > convert/windows_virtio.ml | 87 ++++++------------------------------- > convert/windows_virtio.mli | 9 +--- > lib/types.ml | 20 --------- > lib/types.mli | 10 ----- > 9 files changed, 30 insertions(+), 138 deletions(-)This is exactly the kind of enormous patch that I don't trust myself to implement in a project I'm new to. It's difficult to find the boundaries (= where we stop cutting), and also difficult to find everything that becomes unused / dead after the removals. (For example, I had to check that "string_of_video" remained in use, via a different call path.) I also find reviewing this pretty hard. The patch modifies many (arguably) disparate aspects that I can't *all* keep easily in mind during review. I think I might have attempted a more bottom-up, gradual elimination approach, but that's exactly because I must watch my step very closely. I do think this patch is fine. Acked-by: Laszlo Ersek <lersek at redhat.com> Thanks! Laszlo> > diff --git a/convert/convert.ml b/convert/convert.ml > index 07c7aee90..109e55284 100644 > --- a/convert/convert.ml > +++ b/convert/convert.ml > @@ -230,10 +230,7 @@ helper-v2v-convert V2VDIR > > (* Conversion. *) > let guestcaps > - let rcaps = (*XXX*) > - { rcaps_block_bus = None; rcaps_net_bus = None; rcaps_video = None } in > - > - do_convert g source inspect keep_serial_console rcaps static_ips in > + do_convert g source inspect keep_serial_console static_ips in > > g#umount_all (); > > @@ -364,7 +361,7 @@ and do_fstrim g inspect > ) fses > > (* Conversion. *) > -and do_convert g source inspect keep_serial_console rcaps interfaces > +and do_convert g source inspect keep_serial_console interfaces > (match inspect.i_product_name with > | "unknown" -> > message (f_"Converting the guest to run on KVM") > @@ -388,9 +385,8 @@ and do_convert g source inspect keep_serial_console rcaps interfaces > error (f_"virt-v2v is unable to convert this guest type (%s/%s)") > inspect.i_type inspect.i_distro in > debug "picked conversion module %s" conversion_name; > - debug "requested caps: %s" (string_of_requested_guestcaps rcaps); > let guestcaps > - convert g source inspect keep_serial_console rcaps interfaces in > + convert g source inspect keep_serial_console interfaces in > debug "%s" (string_of_guestcaps guestcaps); > > (* Did we manage to install virtio drivers? *) > diff --git a/convert/convert_linux.ml b/convert/convert_linux.ml > index 057cf9dff..b0b5d916d 100644 > --- a/convert/convert_linux.ml > +++ b/convert/convert_linux.ml > @@ -34,7 +34,7 @@ open Linux_kernels > module G = Guestfs > > (* The conversion function. *) > -let convert (g : G.guestfs) source inspect keep_serial_console rcaps _ > +let convert (g : G.guestfs) source inspect keep_serial_console _ > (*----------------------------------------------------------------------*) > (* Inspect the guest first. We already did some basic inspection in > * the common v2v.ml code, but that has to deal with generic guests > @@ -111,22 +111,12 @@ let convert (g : G.guestfs) source inspect keep_serial_console rcaps _ > > let acpi = supports_acpi () in > > - let video > - match rcaps.rcaps_video with > - | None -> QXL > - | Some video -> video in > - > let block_type > - match rcaps.rcaps_block_bus with > - | None -> if kernel.ki_supports_virtio_blk then Virtio_blk else IDE > - | Some block_type -> block_type in > - > + if kernel.ki_supports_virtio_blk then Virtio_blk else IDE in > let net_type > - match rcaps.rcaps_net_bus with > - | None -> if kernel.ki_supports_virtio_net then Virtio_net else E1000 > - | Some net_type -> net_type in > + if kernel.ki_supports_virtio_net then Virtio_net else E1000 in > > - configure_display_driver video; > + configure_display_driver (); > remap_block_devices block_type; > configure_kernel_modules block_type net_type; > rebuild_initrd kernel; > @@ -158,7 +148,7 @@ let convert (g : G.guestfs) source inspect keep_serial_console rcaps _ > let guestcaps = { > gcaps_block_bus = block_type; > gcaps_net_bus = net_type; > - gcaps_video = video; > + gcaps_video = QXL; > gcaps_virtio_rng = kernel.ki_supports_virtio_rng; > gcaps_virtio_balloon = kernel.ki_supports_virtio_balloon; > gcaps_isa_pvpanic = kernel.ki_supports_isa_pvpanic; > @@ -828,8 +818,8 @@ let convert (g : G.guestfs) source inspect keep_serial_console rcaps _ > else > true > > - and configure_display_driver video > - let video_driver = match video with QXL -> "qxl" | Cirrus -> "cirrus" in > + and configure_display_driver () > + let video_driver = "qxl" in > > let updated = ref false in > > diff --git a/convert/convert_linux.mli b/convert/convert_linux.mli > index 8adc172a0..688a7acea 100644 > --- a/convert/convert_linux.mli > +++ b/convert/convert_linux.mli > @@ -23,5 +23,5 @@ > Mint and Kali are supported by this module. *) > > val convert : Guestfs.guestfs -> Types.source -> Types.inspect -> > - bool -> Types.requested_guestcaps -> Types.static_ip list -> > + bool -> Types.static_ip list -> > Types.guestcaps > diff --git a/convert/convert_windows.ml b/convert/convert_windows.ml > index f2c1132bf..31e16723b 100644 > --- a/convert/convert_windows.ml > +++ b/convert/convert_windows.ml > @@ -38,7 +38,7 @@ module G = Guestfs > * time the Windows VM is booted on KVM. > *) > > -let convert (g : G.guestfs) _ inspect _ rcaps static_ips > +let convert (g : G.guestfs) _ inspect _ static_ips > (*----------------------------------------------------------------------*) > (* Inspect the Windows guest. *) > > @@ -469,7 +469,7 @@ if errorlevel 3010 exit /b 0 > disable_xenpv_win_drivers reg; > disable_prl_drivers reg; > disable_autoreboot reg; > - Windows_virtio.install_drivers reg inspect rcaps > + Windows_virtio.install_drivers reg inspect > > and disable_xenpv_win_drivers reg > (* Disable xenpv-win service (RHBZ#809273). *) > diff --git a/convert/convert_windows.mli b/convert/convert_windows.mli > index d2978d6a4..d3ea3d6ae 100644 > --- a/convert/convert_windows.mli > +++ b/convert/convert_windows.mli > @@ -21,5 +21,5 @@ > This module converts a Windows guest to run on KVM. *) > > val convert : Guestfs.guestfs -> Types.source -> Types.inspect -> > - bool -> Types.requested_guestcaps -> Types.static_ip list -> > + bool -> Types.static_ip list -> > Types.guestcaps > diff --git a/convert/windows_virtio.ml b/convert/windows_virtio.ml > index f843dae2d..08db4ad69 100644 > --- a/convert/windows_virtio.ml > +++ b/convert/windows_virtio.ml > @@ -44,31 +44,16 @@ let viostor_modern_pciid = "VEN_1AF4&DEV_1042&SUBSYS_11001AF4&REV_01" > let vioscsi_legacy_pciid = "VEN_1AF4&DEV_1004&SUBSYS_00081AF4&REV_00" > let vioscsi_modern_pciid = "VEN_1AF4&DEV_1048&SUBSYS_11001AF4&REV_01" > > -let rec install_drivers ((g, _) as reg) inspect rcaps > +let rec install_drivers ((g, _) as reg) inspect > (* Copy the virtio drivers to the guest. *) > let driverdir = sprintf "%s/Drivers/VirtIO" inspect.i_windows_systemroot in > g#mkdir_p driverdir; > > if not (copy_drivers g inspect driverdir) then ( > - match rcaps with > - | { rcaps_block_bus = Some Virtio_blk | Some Virtio_SCSI } > - | { rcaps_net_bus = Some Virtio_net } > - | { rcaps_video = Some QXL } -> > - error (f_"there are no virtio drivers available for this version of Windows (%d.%d %s %s). virt-v2v looks for drivers in %s") > - inspect.i_major_version inspect.i_minor_version inspect.i_arch > - inspect.i_product_variant virtio_win > - > - | { rcaps_block_bus = (Some IDE | None); > - rcaps_net_bus = ((Some E1000 | Some RTL8139 | None) as net_type); > - rcaps_video = (Some Cirrus | None) } -> > warning (f_"there are no virtio drivers available for this version of Windows (%d.%d %s %s). virt-v2v looks for drivers in %s\n\nThe guest will be configured to use slower emulated devices.") > inspect.i_major_version inspect.i_minor_version inspect.i_arch > inspect.i_product_variant virtio_win; > - let net_type > - match net_type with > - | Some model -> model > - | None -> RTL8139 in > - (IDE, net_type, Cirrus, false, false, false, false) > + (IDE, RTL8139, Cirrus, false, false, false, false) > ) > else ( > (* Can we install the block driver? *) > @@ -83,25 +68,14 @@ let rec install_drivers ((g, _) as reg) inspect rcaps > ) filenames > ) > ) with Not_found -> None in > - let has_vioscsi = g#exists (driverdir // "vioscsi.inf") in > - match rcaps.rcaps_block_bus, viostor_driver, has_vioscsi with > - | Some Virtio_blk, None, _ -> > - error (f_"there is no virtio block device driver for this version of Windows (%d.%d %s). virt-v2v looks for this driver in %s\n\nThe guest will be configured to use a slower emulated device.") > - inspect.i_major_version inspect.i_minor_version > - inspect.i_arch virtio_win > - > - | Some Virtio_SCSI, _, false -> > - error (f_"there is no vioscsi (virtio SCSI) driver for this version of Windows (%d.%d %s). virt-v2v looks for this driver in %s\n\nThe guest will be configured to use a slower emulated device.") > - inspect.i_major_version inspect.i_minor_version > - inspect.i_arch virtio_win > - > - | None, None, _ -> > + match viostor_driver with > + | None -> > warning (f_"there is no virtio block device driver for this version of Windows (%d.%d %s). virt-v2v looks for this driver in %s\n\nThe guest will be configured to use a slower emulated device.") > inspect.i_major_version inspect.i_minor_version > inspect.i_arch virtio_win; > IDE > > - | (Some Virtio_blk | None), Some driver_name, _ -> > + | Some driver_name -> > (* Block driver needs tweaks to allow booting; the rest is set up by PnP > * manager *) > let source = driverdir // (driver_name ^ ".sys") in > @@ -111,22 +85,7 @@ let rec install_drivers ((g, _) as reg) inspect rcaps > g#cp source target; > add_guestor_to_registry reg inspect driver_name viostor_legacy_pciid; > add_guestor_to_registry reg inspect driver_name viostor_modern_pciid; > - Virtio_blk > - > - | Some Virtio_SCSI, _, true -> > - (* Block driver needs tweaks to allow booting; the rest is set up by PnP > - * manager *) > - let source = driverdir // "vioscsi.sys" in > - let target = sprintf "%s/system32/drivers/vioscsi.sys" > - inspect.i_windows_systemroot in > - let target = g#case_sensitive_path target in > - g#cp source target; > - add_guestor_to_registry reg inspect "vioscsi" vioscsi_legacy_pciid; > - add_guestor_to_registry reg inspect "vioscsi" vioscsi_modern_pciid; > - Virtio_SCSI > - > - | Some IDE, _, _ -> > - IDE in > + Virtio_blk in > > (* Can we install the virtio-net driver? *) > let net : guestcaps_net_type > @@ -135,46 +94,28 @@ let rec install_drivers ((g, _) as reg) inspect rcaps > List.exists ( > fun driver_file -> g#exists (driverdir // driver_file) > ) filenames in > - match rcaps.rcaps_net_bus, has_netkvm with > - | Some Virtio_net, false -> > - error (f_"there is no virtio network driver for this version of Windows (%d.%d %s). virt-v2v looks for this driver in %s") > - inspect.i_major_version inspect.i_minor_version > - inspect.i_arch virtio_win > - > - | None, false -> > + if not has_netkvm then ( > warning (f_"there is no virtio network driver for this version of Windows (%d.%d %s). virt-v2v looks for this driver in %s\n\nThe guest will be configured to use a slower emulated device.") > inspect.i_major_version inspect.i_minor_version > inspect.i_arch virtio_win; > RTL8139 > - > - | (Some Virtio_net | None), true -> > - Virtio_net > - > - | Some net_type, _ -> > - net_type in > + ) > + else > + Virtio_net in > > (* Can we install the QXL driver? *) > let video : guestcaps_video_type > let has_qxl > g#exists (driverdir // "qxl.inf") || > g#exists (driverdir // "qxldod.inf") in > - match rcaps.rcaps_video, has_qxl with > - | Some QXL, false -> > - error (f_"there is no QXL driver for this version of Windows (%d.%d %s). virt-v2v looks for this driver in %s") > - inspect.i_major_version inspect.i_minor_version > - inspect.i_arch virtio_win > - > - | None, false -> > + if not has_qxl then ( > warning (f_"there is no QXL driver for this version of Windows (%d.%d %s). virt-v2v looks for this driver in %s\n\nThe guest will be configured to use a basic VGA display driver.") > inspect.i_major_version inspect.i_minor_version > inspect.i_arch virtio_win; > Cirrus > - > - | (Some QXL | None), true -> > - QXL > - > - | Some Cirrus, _ -> > - Cirrus in > + ) > + else > + QXL in > > (* Did we install the miscellaneous drivers? *) > let virtio_rng_supported = g#exists (driverdir // "viorng.inf") in > diff --git a/convert/windows_virtio.mli b/convert/windows_virtio.mli > index 642317b15..4e24625a4 100644 > --- a/convert/windows_virtio.mli > +++ b/convert/windows_virtio.mli > @@ -19,9 +19,9 @@ > (** Functions for installing Windows virtio drivers. *) > > val install_drivers > - : Registry.t -> Types.inspect -> Types.requested_guestcaps -> > + : Registry.t -> Types.inspect -> > Types.guestcaps_block_type * Types.guestcaps_net_type * Types.guestcaps_video_type * bool * bool * bool * bool > -(** [install_drivers reg inspect rcaps] > +(** [install_drivers reg inspect] > installs virtio drivers from the driver directory or driver > ISO into the guest driver directory and updates the registry > so that the [viostor.sys] driver gets loaded by Windows at boot. > @@ -29,11 +29,6 @@ val install_drivers > [reg] is the system hive which is open for writes when this > function is called. > > - [rcaps] is the set of guest "capabilities" requested by the caller. This > - may include the type of the block driver, network driver, and video driver. > - install_drivers will adjust its choices based on that information, and > - abort if the requested driver wasn't found. > - > This returns the tuple [(block_driver, net_driver, video_driver, > virtio_rng_supported, virtio_ballon_supported, isa_pvpanic_supported)] > reflecting what devices are now required by the guest, either > diff --git a/lib/types.ml b/lib/types.ml > index 72d10d1ec..9be3e6fcd 100644 > --- a/lib/types.ml > +++ b/lib/types.ml > @@ -422,11 +422,6 @@ type guestcaps = { > gcaps_arch : string; > gcaps_acpi : bool; > } > -and requested_guestcaps = { > - rcaps_block_bus : guestcaps_block_type option; > - rcaps_net_bus : guestcaps_net_type option; > - rcaps_video : guestcaps_video_type option; > -} > and guestcaps_block_type = Virtio_blk | Virtio_SCSI | IDE > and guestcaps_net_type = Virtio_net | E1000 | RTL8139 > and guestcaps_video_type = QXL | Cirrus > @@ -463,21 +458,6 @@ gcaps_acpi = %b > gcaps.gcaps_arch > gcaps.gcaps_acpi > > -let string_of_requested_guestcaps rcaps > - sprintf "\ > -rcaps_block_bus = %s > -rcaps_net_bus = %s > -rcaps_video = %s > -" (match rcaps.rcaps_block_bus with > - | None -> "unspecified" > - | Some block_type -> (string_of_block_type block_type)) > - (match rcaps.rcaps_net_bus with > - | None -> "unspecified" > - | Some net_type -> (string_of_net_type net_type)) > - (match rcaps.rcaps_video with > - | None -> "unspecified" > - | Some video -> (string_of_video video)) > - > type target_buses = { > target_virtio_blk_bus : target_bus_slot array; > target_ide_bus : target_bus_slot array; > diff --git a/lib/types.mli b/lib/types.mli > index 0bae445d8..4d4049605 100644 > --- a/lib/types.mli > +++ b/lib/types.mli > @@ -282,22 +282,12 @@ type guestcaps = { > } > (** Guest capabilities after conversion. eg. Was virtio found or installed? *) > > -and requested_guestcaps = { > - rcaps_block_bus : guestcaps_block_type option; > - rcaps_net_bus : guestcaps_net_type option; > - rcaps_video : guestcaps_video_type option; > -} > -(** For [--in-place] conversions, the requested guest capabilities, to > - allow the caller to affect conversion choices. [None] = no > - preference, use the best available. *) > - > and guestcaps_block_type = Virtio_blk | Virtio_SCSI | IDE > and guestcaps_net_type = Virtio_net | E1000 | RTL8139 > and guestcaps_video_type = QXL | Cirrus > and guestcaps_machine = I440FX | Q35 | Virt > > val string_of_guestcaps : guestcaps -> string > -val string_of_requested_guestcaps : requested_guestcaps -> string > > (** {2 Guest buses} *) > >