Skip to contentSkip to conversation

-machine vmport=off: Allow disabling of VMWare ioport emulation

PATCH In review Dr. David Alan Gilbert (git) 4 participants 10 messages May 19, 2014 – Sep 25, 2014

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 -machine vmport=off: Allow disabling of VMWare ioport emulation

From: "Dr. David Alan Gilbert" <[email protected]>

VMWare apparently doesn't like running under QEMU due to our incomplete emulation of it's special IO Port. This adds a -machine suboption to allow it to be turned off.

---
 hw/i386/pc_piix.c | 5 +++--
 hw/i386/pc_q35.c  | 5 ++++-
 qemu-options.hx   | 3 +++
 vl.c              | 4 ++++
 4 files changed, 14 insertions(+), 3 deletions(-)
hw/i386/pc_piix.c +3 -2
index eaf3e61..418f95a 100644
@@ -204,8 +204,9 @@ static void pc_init1(QEMUMachineInitArgs *args,
     pc_vga_init(isa_bus, pci_enabled ? pci_bus : NULL);
 
     /* init basic PC hardware */
-    pc_basic_device_init(isa_bus, gsi, &rtc_state, &floppy, xen_enabled(),
-        0x4);
+    pc_basic_device_init(isa_bus, gsi, &rtc_state, &floppy,
+                         !qemu_opt_get_bool(qemu_get_machine_opts(), "vmport",
+                                            true) || xen_enabled(), 0x4);
 
     pc_nic_init(isa_bus, pci_bus);
 
hw/i386/pc_q35.c +4 -1
index 9517ec6..c868af1 100644
@@ -206,7 +206,10 @@ static void pc_q35_init(QEMUMachineInitArgs *args)
     pc_register_ferr_irq(gsi[13]);
 
     /* init basic PC hardware */
-    pc_basic_device_init(isa_bus, gsi, &rtc_state, &floppy, false, 0xff0104);
+    pc_basic_device_init(isa_bus, gsi, &rtc_state, &floppy,
+                         !qemu_opt_get_bool(qemu_get_machine_opts(), "vmport",
+                                            true),
+                         0xff0104);
 
     /* connect pm stuff to lpc */
     ich9_lpc_pm_init(lpc);
qemu-options.hx +3 -0
index 781af14..54e8f94 100644
@@ -33,6 +33,7 @@ DEF("machine", HAS_ARG, QEMU_OPTION_machine, \
     "                property accel=accel1[:accel2[:...]] selects accelerator\n"
     "                supported accelerators are kvm, xen, tcg (default: tcg)\n"
     "                kernel_irqchip=on|off controls accelerated irqchip support\n"
+    "                vmport=on|off controls emulation of vmport (default: on)\n"
     "                kvm_shadow_mem=size of KVM shadow MMU\n"
     "                dump-guest-core=on|off include guest memory in a core dump (default=on)\n"
     "                mem-merge=on|off controls memory merge support (default: on)\n",
@@ -50,6 +51,8 @@ than one accelerator specified, the next one is used if the previous one fails
 to initialize.
 @item kernel_irqchip=on|off
 Enables in-kernel irqchip support for the chosen accelerator when available.
+@item vmport=on|off
+Enables emulation of VMWare IO port, for vmmouse etc. (enabled by default)
 @item kvm_shadow_mem=size
 Defines the size of the KVM shadow MMU.
 @item dump-guest-core=on|off
vl.c +4 -0
index 99b6fc0..eb26c77 100644
@@ -331,6 +331,10 @@ static QemuOptsList qemu_machine_opts = {
             .type = QEMU_OPT_BOOL,
             .help = "use KVM in-kernel irqchip",
         }, {
+            .name = "vmport",
+            .type = QEMU_OPT_BOOL,
+            .help = "Enable vmport",
+        }, {
             .name = "kvm_shadow_mem",
             .type = QEMU_OPT_SIZE,
             .help = "KVM shadow MMU size",
Signature · 1 line
1.9.0
Tested-by on v1 1/1
#1 lore raw
Quoted 7 lines · Dr. David Alan Gilbert (git)

From: "Dr. David Alan Gilbert" <[email protected]>

VMWare apparently doesn't like running under QEMU due to our incomplete emulation of it's special IO Port. This adds a -machine suboption to allow it to be turned off.

I was able to use this option in order to install VMware ESXi as a guest under KVM. Here are my notes on how to do this:

https://rwmj.wordpress.com/2014/05/19/notes-on-getting-vmware-esxi-to-run-under-kvm/#content

Rich.

Signature · 5 lines
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-df lists disk usage of guests without needing to install any
software inside the virtual machine.  Supports Linux and Windows.
http://people.redhat.com/~rjones/virt-df/
#2 lore raw
In reply to Dr. David Alan Gilbert (git)

hw/i386/pc_piix.c static void pc_init1(QEMUMachineInitArgs *args, · line 209

Quoted 6 lines
     /* init basic PC hardware */
hw/i386/pc_piix.c +3 -2
-    pc_basic_device_init(isa_bus, gsi, &rtc_state, &floppy, xen_enabled(),
-        0x4);
+    pc_basic_device_init(isa_bus, gsi, &rtc_state, &floppy,
+                         !qemu_opt_get_bool(qemu_get_machine_opts(), "vmport",
+                                            true) || xen_enabled(), 0x4);

pc_basic_device_init
(isa_bus, gsi, &rtc_state, &floppy,
!qemu_opt_get_bool(qemu_get_machine_opts(),"vmport",!xen_enabled()), 0x4);

?

This makes vmport switchable on xen too, with traditional behavior being the default (off on xen, on otherwise).

cheers,
Gerd

#3 lore raw
Quoted 12 lines · * Gerd Hoffmann ([email protected]) wrote:

hw/i386/pc_piix.c static void pc_init1(QEMUMachineInitArgs *args, · line 209

Quoted 6 lines
     /* init basic PC hardware */
hw/i386/pc_piix.c +3 -2
-    pc_basic_device_init(isa_bus, gsi, &rtc_state, &floppy, xen_enabled(),
-        0x4);
+    pc_basic_device_init(isa_bus, gsi, &rtc_state, &floppy,
+                         !qemu_opt_get_bool(qemu_get_machine_opts(), "vmport",
+                                            true) || xen_enabled(), 0x4);

pc_basic_device_init
(isa_bus, gsi, &rtc_state, &floppy,
!qemu_opt_get_bool(qemu_get_machine_opts(),"vmport",!xen_enabled()), 0x4);

Quoted 4 lines

?

This makes vmport switchable on xen too, with traditional behavior being the default (off on xen, on otherwise).

Yes I guess that would work (although documenting it would be a little hairy); however, does anyone understand the reasons it's disabled in the Xen world?

Dave
--
Dr. David Alan Gilbert / [email protected] / Manchester, UK

#4 lore raw
Quoted 13 lines · Dr. David Alan Gilbert
Quoted 12 lines · * Gerd Hoffmann ([email protected]) wrote:

hw/i386/pc_piix.c static void pc_init1(QEMUMachineInitArgs *args, · line 209

Quoted 6 lines
     /* init basic PC hardware */
hw/i386/pc_piix.c +3 -2
-    pc_basic_device_init(isa_bus, gsi, &rtc_state, &floppy, xen_enabled(),
-        0x4);
+    pc_basic_device_init(isa_bus, gsi, &rtc_state, &floppy,
+                         !qemu_opt_get_bool(qemu_get_machine_opts(), "vmport",
+                                            true) || xen_enabled(), 0x4);

pc_basic_device_init
(isa_bus, gsi, &rtc_state, &floppy,
!qemu_opt_get_bool(qemu_get_machine_opts(),"vmport",!xen_enabled()), 0x4);

Quoted 7 lines
Quoted 4 lines

?

This makes vmport switchable on xen too, with traditional behavior being the default (off on xen, on otherwise).

Yes I guess that would work (although documenting it would be a little hairy); however, does anyone understand the reasons it's disabled in the Xen world?

It was disabled in this patch. The commit message is saying that vmport cannot work in Xen, but I'm not exactly clear why.

commit 1611977c3d8fdbdac6090cbd1f5555cee4aed6d9
Author: Anthony PERARD <[email protected]>
Date: Tue May 3 17:06:54 2011 +0100

pc, Disable vmport initialisation with Xen.

This is because there is not synchronisation of the vcpu register between Xen and QEMU, so vmport can't work properly.

This patch introduces no_vmport parameter to pc_basic_device_init.

Rich.

Signature · 5 lines
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
Reviewed-by
#5 lore raw

Hi,

Quoted 11 lines

It was disabled in this patch. The commit message is saying that vmport cannot work in Xen, but I'm not exactly clear why.

commit 1611977c3d8fdbdac6090cbd1f5555cee4aed6d9
Author: Anthony PERARD <[email protected]>
Date: Tue May 3 17:06:54 2011 +0100

pc, Disable vmport initialisation with Xen.

This is because there is not synchronisation of the vcpu register between Xen and QEMU, so vmport can't work properly.

Ah, ok. The backdoor has side effects (writing the port does modify vcpu registers). That is the bit which is problematic for xen. Scratch the idea then.

Original patch is fine.

cheers,
Gerd

Reviewed-by Gerd Hoffmann
#6 lore raw

What is happening with this patch? I would like to use this code.

-Don Slutz

________________________________________
From: [email protected] [[email protected]] on behalf of Gerd Hoffmann [[email protected]]
Sent: Tuesday, May 20, 2014 6:10 AM
To: Richard W.M. Jones
Cc: [email protected]; [email protected]; [email protected]; Dr. David Alan Gilbert; [email protected]; Anthony PERARD
Subject: Re: [Qemu-devel] [PATCH] -machine vmport=off: Allow disabling of VMWare ioport emulation

Hi,

Quoted 11 lines

It was disabled in this patch. The commit message is saying that vmport cannot work in Xen, but I'm not exactly clear why.

commit 1611977c3d8fdbdac6090cbd1f5555cee4aed6d9
Author: Anthony PERARD <[email protected]>
Date: Tue May 3 17:06:54 2011 +0100

pc, Disable vmport initialisation with Xen.

This is because there is not synchronisation of the vcpu register between Xen and QEMU, so vmport can't work properly.

Ah, ok. The backdoor has side effects (writing the port does modify vcpu registers). That is the bit which is problematic for xen. Scratch the idea then.

Original patch is fine.

cheers,
Gerd

#7 lore raw
Quoted 1 line · * Slutz, Donald Christopher ([email protected]) wrote:

What is happening with this patch? I would like to use this code.

I need to rework it for the new machine types code; but it was pretty low down my list of priorities; but I can try and get a minute for it again.

Dave

Quoted 28 lines

-Don Slutz

________________________________________
From: [email protected] [[email protected]] on behalf of Gerd Hoffmann [[email protected]]
Sent: Tuesday, May 20, 2014 6:10 AM
To: Richard W.M. Jones
Cc: [email protected]; [email protected]; [email protected]; Dr. David Alan Gilbert; [email protected]; Anthony PERARD
Subject: Re: [Qemu-devel] [PATCH] -machine vmport=off: Allow disabling of VMWare ioport emulation

Hi,

Quoted 11 lines

It was disabled in this patch. The commit message is saying that vmport cannot work in Xen, but I'm not exactly clear why.

commit 1611977c3d8fdbdac6090cbd1f5555cee4aed6d9
Author: Anthony PERARD <[email protected]>
Date: Tue May 3 17:06:54 2011 +0100

pc, Disable vmport initialisation with Xen.

This is because there is not synchronisation of the vcpu register between Xen and QEMU, so vmport can't work properly.

Ah, ok. The backdoor has side effects (writing the port does modify vcpu registers). That is the bit which is problematic for xen. Scratch the idea then.

Quoted 9 lines

Original patch is fine.

cheers,
Gerd

--
Dr. David Alan Gilbert / [email protected] / Manchester, UK

#8 lore raw
Quoted 5 lines · Dr. David Alan Gilbert
Quoted 1 line · * Slutz, Donald Christopher ([email protected]) wrote:

What is happening with this patch? I would like to use this code.

I need to rework it for the new machine types code; but it was pretty low down my list of priorities; but I can try and get a minute for it again.

Ok, I did not see any mail about this. If I am reading this right you mean like I did in

commit c87b1520726f7ae1e698a41f07043d1b539ac88c

Do you want me to attempt to "port" this patch this way?

-Don Slutz

Quoted 39 lines

Dave

Quoted 26 lines

-Don Slutz

________________________________________
From: [email protected] [[email protected]] on behalf of Gerd Hoffmann [[email protected]]
Sent: Tuesday, May 20, 2014 6:10 AM
To: Richard W.M. Jones
Cc: [email protected]; [email protected]; [email protected]; Dr. David Alan Gilbert; [email protected]; Anthony PERARD
Subject: Re: [Qemu-devel] [PATCH] -machine vmport=off: Allow disabling of VMWare ioport emulation

   Hi,
Quoted 11 lines

It was disabled in this patch. The commit message is saying that vmport cannot work in Xen, but I'm not exactly clear why.

commit 1611977c3d8fdbdac6090cbd1f5555cee4aed6d9
Author: Anthony PERARD <[email protected]>
Date: Tue May 3 17:06:54 2011 +0100

pc, Disable vmport initialisation with Xen.

This is because there is not synchronisation of the vcpu register between Xen and QEMU, so vmport can't work properly.

Ah, ok. The backdoor has side effects (writing the port does modify vcpu registers). That is the bit which is problematic for xen. Scratch the idea then.

Quoted 9 lines

Original patch is fine.

cheers,
Gerd

--
Dr. David Alan Gilbert / [email protected] / Manchester, UK

#9 lore raw
Quoted 7 lines · * Slutz, Donald Christopher ([email protected]) wrote:
Quoted 5 lines · Dr. David Alan Gilbert
Quoted 1 line · * Slutz, Donald Christopher ([email protected]) wrote:

What is happening with this patch? I would like to use this code.

I need to rework it for the new machine types code; but it was pretty low down my list of priorities; but I can try and get a minute for it again.

Quoted 6 lines

Ok, I did not see any mail about this. If I am reading this right you mean like I did in

commit c87b1520726f7ae1e698a41f07043d1b539ac88c

Do you want me to attempt to "port" this patch this way?

To be honest I hadn't got that far in figuring the new stuff out, but yes I think so please check with [email protected] (cc'd); he was pointing me in the direction of those changes I think. But if you want to do the update, please feel free.

Dave
--
Dr. David Alan Gilbert / [email protected] / Manchester, UK