[Libguestfs] [COMMON PATCH v2 4/4] inject_virtio_win: write the proper block controller PCI ID to Win registry

Richard W.M. Jones rjones at redhat.com
Wed Mar 8 20:45:07 UTC 2023


On Tue, Mar 07, 2023 at 09:40:26PM +0200, Andrey Drobyshev wrote:
> In case when we are injecting virtio-scsi device driver into the guest
> (rather than the default virtio-blk), make sure we write the right PCI ID
> value into the Windows guest registry.  This is essential for the guest
> to be bootable afterwards.
> 
> Originally-by: Roman Kagan <rkagan at virtuozzo.com>
> Signed-off-by: Andrey Drobyshev <andrey.drobyshev at virtuozzo.com>
> ---
>  mlcustomize/inject_virtio_win.ml | 12 +++++++++---
>  1 file changed, 9 insertions(+), 3 deletions(-)
> 
> diff --git a/mlcustomize/inject_virtio_win.ml b/mlcustomize/inject_virtio_win.ml
> index 345fe32..922c1ab 100644
> --- a/mlcustomize/inject_virtio_win.ml
> +++ b/mlcustomize/inject_virtio_win.ml
> @@ -207,10 +207,16 @@ let rec inject_virtio_win_drivers ({ g } as t) reg =
>          let target = sprintf "%s/system32/drivers/%s.sys"
>                               t.i_windows_systemroot driver_name in
>          let target = g#case_sensitive_path target in
> +        let installed_block_type, legacy_pciid, modern_pciid = (
> +          if driver_name = "vioscsi" then
> +            Virtio_SCSI, vioscsi_legacy_pciid, vioscsi_modern_pciid
> +          else
> +            Virtio_blk, viostor_legacy_pciid, viostor_modern_pciid
> +        ) in
>          g#cp source target;
> -        add_guestor_to_registry t reg driver_name viostor_legacy_pciid;
> -        add_guestor_to_registry t reg driver_name viostor_modern_pciid;
> -        Virtio_blk in
> +        add_guestor_to_registry t reg driver_name legacy_pciid;
> +        add_guestor_to_registry t reg driver_name modern_pciid;
> +        installed_block_type in
>  
>      (* Can we install the virtio-net driver? *)
>      let net : net_type =

Could we make this look more like the code before it was reverted
here?

https://github.com/libguestfs/virt-v2v/commit/b28cd1dcfeb40e7002e8d0b0ce9dcc4ce86beb6c

See the lines starting:
      | Some Virtio_SCSI, _, true ->
        (* Block driver needs tweaks to allow booting; the rest is set up by PnP
   ...

So the change would look like:

-     | Some driver_name ->
+     | Some "viostor" ->
        (* Block driver needs tweaks to allow booting;
         * the rest is set up by PnP manager.
         *)
        let source = driverdir // (driver_name ^ ".sys") in
        let target = sprintf "%s/system32/drivers/%s.sys"
                             t.i_windows_systemroot driver_name in
        let target = g#case_sensitive_path target in
        g#cp source target;
        add_guestor_to_registry t reg driver_name viostor_legacy_pciid;
        add_guestor_to_registry t reg driver_name viostor_modern_pciid;
        Virtio_blk in

+     | Some "vioscsi" ->
+ [... new code for the virtio-scsi case ...]


The old code was a bit clearer don't you think?  Even if there's a
little bit more duplication.

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-top is 'top' for virtual machines.  Tiny program with many
powerful monitoring features, net stats, disk stats, logging, etc.
http://people.redhat.com/~rjones/virt-top


More information about the Libguestfs mailing list