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(a)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} *)