On Mon, Nov 08, 2021 at 12:19:15PM +0100, Laszlo Ersek wrote:
> 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.

TBH I just chopped out every mention of rcaps / requested_guestcaps
over breakfast.  The compiler is very good at finding mistakes in
these kinds of patches because it won't compile something unless all
parameters/function exactly match, all matches are complete, etc.

Old virt-v2v was written in Perl and that was dreadful for refactoring.

Thanks,

Rich.

> Acked-by: Laszlo Ersek <[email protected]>
> 
> 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} *)
> >  
> > 

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
Fedora Windows cross-compiler. Compile Windows programs, test, and
build Windows installers. Over 100 libraries supported.
http://fedoraproject.org/wiki/MinGW

_______________________________________________
Libguestfs mailing list
[email protected]
https://listman.redhat.com/mailman/listinfo/libguestfs

Reply via email to