Re: [libvirt] [PATCH 0/3] use -serial for ppce500 board and add test case

2014-05-25 Thread Li Zhang

Hi Olivia,

I have looked through your code.
It looks good to me.

Thanks.
Li

On 2014年05月22日 18:55, Olivia Yin wrote:

Machine name ppce500 is used to replace ppce500v2 supported by QEMU.
QEMU ppce500 board uses the old style -serial options.
Test case ppce500-serial is used to verify this change.

Olivia Yin (3):
   change machine name ppce500v2 as ppce500
   qemu: Fix specifying char devs for PPC
   tests: add test case for -serial option for ppce500

  docs/schemas/domaincommon.rng  |  2 +-
  src/qemu/qemu_capabilities.c   | 10 ++---
  tests/qemuxml2argvdata/qemuxml2argv-ppc-dtb.args   |  2 +-
  tests/qemuxml2argvdata/qemuxml2argv-ppc-dtb.xml|  2 +-
  .../qemuxml2argv-ppce500-serial.args   |  7 ++
  .../qemuxml2argv-ppce500-serial.xml| 26 ++
  tests/qemuxml2argvtest.c   |  1 +
  tests/testutilsqemu.c  |  2 +-
  8 files changed, 45 insertions(+), 7 deletions(-)
  create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-ppce500-serial.args
  create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-ppce500-serial.xml



--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Re: [libvirt] [PATCH] qemu: Fix specifying char devs for PPC

2014-05-21 Thread Li Zhang

On 2014年05月19日 15:41, hong-hua@freescale.com wrote:

Hi Cole,

This is a patch similar with your previous patch to fix for ARM.
Do you have any comments on it?

Cindy,
Since you are the main contributor to QEMU driver on PPC, I'll also appreciate 
your comments.


Hi Hong-hua,

It looks good for pseries.
You may need to add a test case as Cole suggests.

Thanks.
--Li


Best Regards,
Olivia


-Original Message-
From: Yin Olivia-R63875
Sent: Friday, May 16, 2014 8:38 AM
To: Yin Olivia-R63875; libvir-list@redhat.com
Subject: RE: [PATCH] qemu: Fix specifying char devs for PPC

Ping.

This is a patch similar with ARM platforms.
http://libvirt.org/git/?p=libvirt.git;a=commitdiff;h=3a2beaee1d50dc968171c5
84ec2edcfdcb8fadde

Right now on ppce500, chardev is not supported for the serial console. So
it uses the the legacy -serial option.

Best Regards,
Olivia


-Original Message-
From: Olivia Yin [mailto:hong-hua@freescale.com]
Sent: Wednesday, May 14, 2014 6:47 PM
To: libvir-list@redhat.com
Cc: Yin Olivia-R63875
Subject: [PATCH] qemu: Fix specifying char devs for PPC

QEMU ppce500 board uses the old style -serial options.

Other PPC boards don't give any way to explicitly wire in a -chardev
except pseries which uses -device spapr-vty with -chardev.

---
  src/qemu/qemu_capabilities.c | 10 +++---
  1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/qemu/qemu_capabilities.c
b/src/qemu/qemu_capabilities.c index b491f58..fe5dd19 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -3460,13 +3460,17 @@ virQEMUCapsSupportsChardev(virDomainDefPtr def,
  !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE))
  return false;

-if ((def-os.arch != VIR_ARCH_ARMV7L)  (def-os.arch !=
VIR_ARCH_AARCH64))
+if ((def-os.arch != VIR_ARCH_ARMV7L)  (def-os.arch !=
VIR_ARCH_AARCH64)
+ (def-os.arch != VIR_ARCH_PPC)  (def-os.arch !=
+VIR_ARCH_PPC64))
  return true;

  /* This may not be true for all ARM machine types, but at least
   * the only supported non-virtio serial devices of vexpress and
versatile
- * don't have the -chardev property wired up. */
+ * don't have the -chardev property wired up.
+ * For PPC machines, only pserial need -device spapr-vty with
+ -chardev */
  return (chr-info.type ==
VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_MMIO
||
  (chr-deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE 
- chr-targetType ==
VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_VIRTIO));
+ chr-targetType ==
+ VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_VIRTIO)
||
+(chr-deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL 
+ chr-info.type ==
+ VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO));
  }
--
1.8.5



--

Li Zhang
IBM China Linux Technology Centre

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Re: [libvirt] [PATCH] qemu: Fix specifying char devs for PPC

2014-05-21 Thread Li Zhang

On 2014年05月21日 14:00, Ján Tomko wrote:

On 05/20/2014 07:25 AM, hong-hua@freescale.com wrote:

Hi Cole,

Thanks for the comments.
Exactly there were already test cases for both pseries and ppce500 machines.
For example,
1) qemuxml2argv-pseries-basic.args: '-chardev spapr-vty' for pseries.
2) qemuxml2argv-ppc-dtb.args:   '-serial pty' for ppce500.

The dtb test is run as:
 DO_TEST(ppc-dtb, QEMU_CAPS_KVM, QEMU_CAPS_DTB);

You need a test which is run with both QEMU_CAPS_DEVICE and QEMU_CAPS_CHARDEV
capabilities to test the changes in virQEMUCapsSupportsChardev, otherwise
it just returns false at the beginning.


Hi Hong-Hua,

Jan is right.
That case doesn't test the code which is changed.
Because QEMU_CAPS_DEVICE and QEMU_CAPS_CHARDEV is not set,
it won't run into your code.

You can add these two capabilities to this case to verify your code. :)

Thanks.
Li



Jan



--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Re: [libvirt] [PATCHv2 1/1] Set pci-ohci as the USB default controller for PPC64.

2014-04-24 Thread Li Zhang

On 2014年04月23日 19:45, Daniel P. Berrange wrote:

ACK and pushed. For older QEMU versions this change has no functional
effect, but for 2.0.0 it is needed to avoid duplicate mouse/kbd as you
describe.


Got it, thanks. :)

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Re: [libvirt] [PATCHv2 1/1] Set pci-ohci as the USB default controller for PPC64.

2014-04-21 Thread Li Zhang

ping...

On 2014年04月09日 16:18, Li Zhang wrote:

From: Li Zhang zhlci...@linux.vnet.ibm.com

PPC64 prefers to set pci-ohci controller as default USB controller.
Currently, libvirt is using legacy USB controller as default. There
are problems with VGA which can't work correctly with USB Keyboard and
USB Mouse.

While providing -nodefaults, ppc64 should be specifying the usb
controller explicitly in place of using the legacy
controller(-usb). Qemu spapr initialization code when sees -usb adds a
USB Keyboard and USB Mouse by default. And libvirt has added a USB
keyboard and USB mouse.

A recent fix in the in qemu VGA code uncoverd this problem, which
resulted in addition of extra keyboard and mouse to the qemu machine.

This patch is to set pci-ohci as USB default controller.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
  v2 - v1:
   * Rephrase the commit message. (Nikunj A Dadhania)

  src/qemu/qemu_command.c  | 5 +++--
  tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-default.args | 2 +-
  2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 379c094..46e851a 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -8466,8 +8466,9 @@ qemuBuildCommandLine(virConnectPtr conn,
  } else if (cont-type == VIR_DOMAIN_CONTROLLER_TYPE_USB 
 cont-model == -1 
 !qemuDomainMachineIsQ35(def) 
-   (!virQEMUCapsGet(qemuCaps, 
QEMU_CAPS_PIIX3_USB_UHCI) ||
-def-os.arch == VIR_ARCH_PPC64)) {
+   (!virQEMUCapsGet(qemuCaps, 
QEMU_CAPS_PIIX3_USB_UHCI) ||
+(!virQEMUCapsGet(qemuCaps, QEMU_CAPS_PCI_OHCI) 
+ def-os.arch == VIR_ARCH_PPC64))) {
  if (usblegacy) {
  virReportError(VIR_ERR_CONFIG_UNSUPPORTED, %s,
 _(Multiple legacy USB controllers are 

diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-default.args 
b/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-default.args
index 3a21b76..eac7c56 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-default.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-default.args
@@ -3,5 +3,5 @@ LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test 
QEMU_AUDIO_DRV=none \
  -nographic -nodefconfig -nodefaults \
  -chardev socket,id=charmonitor,path=/tmp/test-monitor,server,nowait \
  -mon chardev=charmonitor,id=monitor,mode=readline -no-acpi -boot c \
--usb -chardev pty,id=charserial0 \
+-device pci-ohci,id=usb,bus=pci,addr=0x1 -chardev pty,id=charserial0 \
  -device spapr-vty,chardev=charserial0,reg=0x3000


--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Re: [libvirt] [PATCH 1/1] Enable QEMU_CAPS_PCI_MULTIBUS capability for QEMU2.0 forward.

2014-04-10 Thread Li Zhang

On 2014年04月10日 13:50, Michal Privoznik wrote:

On 10.04.2014 07:26, Li Zhang wrote:

On 2014年04月09日 17:25, Michal Privoznik wrote:

On 09.04.2014 04:03, Li Zhang wrote:

From: Li Zhang zhlci...@linux.vnet.ibm.com

For QEMU2.0 forward version, it supports PCI multiBUS.
Currently, libvirt still disables it which causes an error
Bus 'pci' not found.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
src/qemu/qemu_capabilities.c | 3 +++
1 file changed, 3 insertions(+)

diff --git a/src/qemu/qemu_capabilities.c 
b/src/qemu/qemu_capabilities.c

index 2c8ec10..b49398f 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -3019,6 +3019,9 @@ virQEMUCapsInitQMPMonitor(virQEMUCapsPtr 
qemuCaps,

if (qemuCaps-version = 1006000)
virQEMUCapsSet(qemuCaps, QEMU_CAPS_DEVICE_VIDEO_PRIMARY);

+ if (qemuCaps-version = 200)
+ virQEMUCapsSet(qemuCaps, QEMU_CAPS_PCI_MULTIBUS);
+
if (virQEMUCapsProbeQMPCommands(qemuCaps, mon)  0)
goto cleanup;
if (virQEMUCapsProbeQMPEvents(qemuCaps, mon)  0)



Libvirt is setting this capability unconditionally for all x86_64 and
i686 (see virQEMUCapsInitArchQMPBasic). What is the actual scenario
you're seeing this error in?


For pseries machine, before QEMU2.0, the PCI bus default name is always
pci.
QEMU2.0 changed the name as pci.0 to support MULTBUS a couple days 
ago.


If libvirt still parses the name as pci with QEMU_CAPS_PCI_MULTIBUS
disabled,
it will report the error Bus 'pci' not found.

I may need to add a PPC64 condition if X86 always enables MULTIBUS.


Yeah, I see. But then again, I think we need a different patch after all:


It still needs QEMU version check to be compatible with older QEMU. :)
I will change it  according to your suggestion.

Thanks. :)



diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 381b3ec..a14161d 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -2940,10 +2940,13 @@ virQEMUCapsInitArchQMPBasic(virQEMUCapsPtr 
qemuCaps,

 }

 /*
- * Currently only x86_64 and i686 support PCI-multibus,
- * -no-acpi and -no-kvm-pit-reinjection.
+ * Currently only x86_64, i686  and PPC64 support PCI-multibus.
+ * Moreover, the first two arches support -no-acpi and
+ * -no-kvm-pit-reinjection.
  */
-if (qemuCaps-arch == VIR_ARCH_X86_64 ||
+if (qemuCaps-arch == VIR_ARCH_PPC64) {
+virQEMUCapsSet(qemuCaps, QEMU_CAPS_PCI_MULTIBUS);
+} else if (qemuCaps-arch == VIR_ARCH_X86_64 ||
 qemuCaps-arch == VIR_ARCH_I686) {
 virQEMUCapsSet(qemuCaps, QEMU_CAPS_PCI_MULTIBUS);
 virQEMUCapsSet(qemuCaps, QEMU_CAPS_NO_ACPI);


Michal


--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

[libvirt] [PATCH v2 1/1] Enable QEMU_CAPS_PCI_MULTIBUS capability for QEMU2.0 forward on PPC64.

2014-04-10 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

For QEMU2.0 forward version on PPC64, it supports PCI multibus.
Currently, libvirt still disables it which causes an error
Bus 'pci' not found.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/qemu/qemu_capabilities.c | 26 --
 1 file changed, 16 insertions(+), 10 deletions(-)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 381b3ec..812bbe0 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -2813,13 +2813,16 @@ virQEMUCapsInitHelp(virQEMUCapsPtr qemuCaps, uid_t 
runUid, gid_t runGid)
 false)  0)
 goto cleanup;
 
-/* Currently only x86_64 and i686 support PCI-multibus. */
-if (qemuCaps-arch == VIR_ARCH_X86_64 ||
-qemuCaps-arch == VIR_ARCH_I686) {
+/* Currently only x86_64, i686 and PPC64 support PCI-multibus. */
+if ((qemuCaps-arch == VIR_ARCH_PPC64 
+qemuCaps-version = 200) ||
+ARCH_IS_X86(qemuCaps-arch)) {
 virQEMUCapsSet(qemuCaps, QEMU_CAPS_PCI_MULTIBUS);
-} else {
-/* -no-acpi is not supported on other archs
- * even if qemu reports it in -help */
+}
+
+/* -no-acpi is not supported on non-X86 archs
+ * even if qemu reports it in -help */
+if (!ARCH_IS_X86(qemuCaps-arch)) {
 virQEMUCapsClear(qemuCaps, QEMU_CAPS_NO_ACPI);
 }
 
@@ -2940,11 +2943,14 @@ virQEMUCapsInitArchQMPBasic(virQEMUCapsPtr qemuCaps,
 }
 
 /*
- * Currently only x86_64 and i686 support PCI-multibus,
- * -no-acpi and -no-kvm-pit-reinjection.
+ * Currently only x86_64, i686 and PPC64 support PCI-multibus,
+ * Moreover, the first two arches support -no-acpi and
+ * -no-kvm-pit-reinjection.
  */
-if (qemuCaps-arch == VIR_ARCH_X86_64 ||
-qemuCaps-arch == VIR_ARCH_I686) {
+if (qemuCaps-arch == VIR_ARCH_PPC64 
+qemuCaps-version = 200) {
+virQEMUCapsSet(qemuCaps, QEMU_CAPS_PCI_MULTIBUS);
+} else if (ARCH_IS_X86(qemuCaps-arch)) {
 virQEMUCapsSet(qemuCaps, QEMU_CAPS_PCI_MULTIBUS);
 virQEMUCapsSet(qemuCaps, QEMU_CAPS_NO_ACPI);
 virQEMUCapsSet(qemuCaps, QEMU_CAPS_NO_KVM_PIT);
-- 
1.8.2.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


Re: [libvirt] [PATCH v2 1/1] Enable QEMU_CAPS_PCI_MULTIBUS capability for QEMU2.0 forward on PPC64.

2014-04-10 Thread Li Zhang

On 2014年04月10日 20:36, Eric Blake wrote:

On 04/10/2014 02:59 AM, Li Zhang wrote:

From: Li Zhang zhlci...@linux.vnet.ibm.com

For QEMU2.0 forward version on PPC64, it supports PCI multibus.
Currently, libvirt still disables it which causes an error
Bus 'pci' not found.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
  src/qemu/qemu_capabilities.c | 26 --
  1 file changed, 16 insertions(+), 10 deletions(-)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 381b3ec..812bbe0 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -2813,13 +2813,16 @@ virQEMUCapsInitHelp(virQEMUCapsPtr qemuCaps, uid_t 
runUid, gid_t runGid)
  false)  0)
  goto cleanup;
  
-/* Currently only x86_64 and i686 support PCI-multibus. */

-if (qemuCaps-arch == VIR_ARCH_X86_64 ||
-qemuCaps-arch == VIR_ARCH_I686) {
+/* Currently only x86_64, i686 and PPC64 support PCI-multibus. */
+if ((qemuCaps-arch == VIR_ARCH_PPC64 
+qemuCaps-version = 200) ||
+ARCH_IS_X86(qemuCaps-arch)) {

Yuck.  Why again did you push this into qemu 2.0 without also providing
a QMP witness command to query whether the new naming is in effect?

We may be forced to take this patch, but I'm not very happy with the
situation.


I'm sorry. I make a change of the patch according to Michal's suggestion.
I add QEMU2.0 check because we still didn't find any QEMU command.

I also will wait for the witness from QEMU.
If there is a command, I will add change it accordingly.

Sorry again.





--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Re: [libvirt] [PATCH v2 1/1] Enable QEMU_CAPS_PCI_MULTIBUS capability for QEMU2.0 forward on PPC64.

2014-04-10 Thread Li Zhang

On 2014年04月10日 20:39, Daniel P. Berrange wrote:

On Thu, Apr 10, 2014 at 06:36:10AM -0600, Eric Blake wrote:

On 04/10/2014 02:59 AM, Li Zhang wrote:

From: Li Zhang zhlci...@linux.vnet.ibm.com

For QEMU2.0 forward version on PPC64, it supports PCI multibus.
Currently, libvirt still disables it which causes an error
Bus 'pci' not found.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
  src/qemu/qemu_capabilities.c | 26 --
  1 file changed, 16 insertions(+), 10 deletions(-)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 381b3ec..812bbe0 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -2813,13 +2813,16 @@ virQEMUCapsInitHelp(virQEMUCapsPtr qemuCaps, uid_t 
runUid, gid_t runGid)
  false)  0)
  goto cleanup;
  
-/* Currently only x86_64 and i686 support PCI-multibus. */

-if (qemuCaps-arch == VIR_ARCH_X86_64 ||
-qemuCaps-arch == VIR_ARCH_I686) {
+/* Currently only x86_64, i686 and PPC64 support PCI-multibus. */
+if ((qemuCaps-arch == VIR_ARCH_PPC64 
+qemuCaps-version = 200) ||
+ARCH_IS_X86(qemuCaps-arch)) {

Yuck.  Why again did you push this into qemu 2.0 without also providing
a QMP witness command to query whether the new naming is in effect?

We may be forced to take this patch, but I'm not very happy with the
situation.

This was also supposed to have been done against all QEMU architectures,
not merely PPC64, so we could avoid this architecture specific dep :-(
I wonder if QEMU would be willing to revert this patch before 2.0 to
allow a properly complete fix to be done.


I see, Daniel.
We can hold this patch for a while.
It may be a better solution by using a QMP command.
If there is no QMP command, I will check whether we can add one for it.

Thanks.


Regards,
Daniel


--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

[libvirt] [PATCH 1/1] Set pci-ohci as the USB default controller for PPC64.

2014-04-09 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

PPC64 prefers to set pci-ohci controller as default USB controller.
Currently, libvirt is using legacy USB controller as default. There
are problems with VGA which can't work correctly with USB Keyboard and
USB Mouse.

This patch is to set pci-ohci as USB default controller.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/qemu/qemu_command.c  | 5 +++--
 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-default.args | 2 +-
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 379c094..46e851a 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -8466,8 +8466,9 @@ qemuBuildCommandLine(virConnectPtr conn,
 } else if (cont-type == VIR_DOMAIN_CONTROLLER_TYPE_USB 
cont-model == -1 
!qemuDomainMachineIsQ35(def) 
-   (!virQEMUCapsGet(qemuCaps, 
QEMU_CAPS_PIIX3_USB_UHCI) ||
-def-os.arch == VIR_ARCH_PPC64)) {
+   (!virQEMUCapsGet(qemuCaps, 
QEMU_CAPS_PIIX3_USB_UHCI) || 
+(!virQEMUCapsGet(qemuCaps, QEMU_CAPS_PCI_OHCI) 
+ def-os.arch == VIR_ARCH_PPC64))) {
 if (usblegacy) {
 virReportError(VIR_ERR_CONFIG_UNSUPPORTED, %s,
_(Multiple legacy USB controllers are 
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-default.args 
b/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-default.args
index 3a21b76..eac7c56 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-default.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-default.args
@@ -3,5 +3,5 @@ LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test 
QEMU_AUDIO_DRV=none \
 -nographic -nodefconfig -nodefaults \
 -chardev socket,id=charmonitor,path=/tmp/test-monitor,server,nowait \
 -mon chardev=charmonitor,id=monitor,mode=readline -no-acpi -boot c \
--usb -chardev pty,id=charserial0 \
+-device pci-ohci,id=usb,bus=pci,addr=0x1 -chardev pty,id=charserial0 \
 -device spapr-vty,chardev=charserial0,reg=0x3000
-- 
1.8.2.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


Re: [libvirt] [PATCH 1/1] Set pci-ohci as the USB default controller for PPC64.

2014-04-09 Thread Li Zhang

On 2014年04月09日 15:54, Nikunj A Dadhania wrote:

Li Zhang zhlci...@gmail.com writes:


From: Li Zhang zhlci...@linux.vnet.ibm.com

PPC64 prefers to set pci-ohci controller as default USB controller.
Currently, libvirt is using legacy USB controller as default.  There
are problems with VGA which can't work correctly with USB Keyboard and
USB Mouse.

That requires would require a rephrase.

While providing -nodefaults, ppc64 should be specifying the usb
controller explicitly in place of using the legacy
controller(-usb). Qemu spapr initialization code when sees -usb adds a
USB Keyboard and USB Mouse by default. And libvirt too has added a USB
keyboard and USB mouse.

A recent fix in the in qemu VGA code uncoverd this problem, which
resulted in addition of extra keyboard and mouse to the qemu machine.


Thanks, I will send out V2 with your information. :)





This patch is to set pci-ohci as USB default controller.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
  src/qemu/qemu_command.c  | 5 +++--
  tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-default.args | 2 +-
  2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 379c094..46e851a 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -8466,8 +8466,9 @@ qemuBuildCommandLine(virConnectPtr conn,
  } else if (cont-type == VIR_DOMAIN_CONTROLLER_TYPE_USB 
 cont-model == -1 
 !qemuDomainMachineIsQ35(def) 
-   (!virQEMUCapsGet(qemuCaps, 
QEMU_CAPS_PIIX3_USB_UHCI) ||
-def-os.arch == VIR_ARCH_PPC64)) {
+   (!virQEMUCapsGet(qemuCaps, 
QEMU_CAPS_PIIX3_USB_UHCI) ||
+(!virQEMUCapsGet(qemuCaps, QEMU_CAPS_PCI_OHCI) 
+ def-os.arch == VIR_ARCH_PPC64))) {
  if (usblegacy) {
  virReportError(VIR_ERR_CONFIG_UNSUPPORTED, %s,
 _(Multiple legacy USB controllers are 

diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-default.args 
b/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-default.args
index 3a21b76..eac7c56 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-default.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-default.args
@@ -3,5 +3,5 @@ LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test 
QEMU_AUDIO_DRV=none \
  -nographic -nodefconfig -nodefaults \
  -chardev socket,id=charmonitor,path=/tmp/test-monitor,server,nowait \
  -mon chardev=charmonitor,id=monitor,mode=readline -no-acpi -boot c \
--usb -chardev pty,id=charserial0 \
+-device pci-ohci,id=usb,bus=pci,addr=0x1 -chardev pty,id=charserial0 \
  -device spapr-vty,chardev=charserial0,reg=0x3000
--
1.8.2.1


--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

[libvirt] [PATCHv2 1/1] Set pci-ohci as the USB default controller for PPC64.

2014-04-09 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

PPC64 prefers to set pci-ohci controller as default USB controller.
Currently, libvirt is using legacy USB controller as default. There
are problems with VGA which can't work correctly with USB Keyboard and
USB Mouse.

While providing -nodefaults, ppc64 should be specifying the usb
controller explicitly in place of using the legacy
controller(-usb). Qemu spapr initialization code when sees -usb adds a
USB Keyboard and USB Mouse by default. And libvirt has added a USB
keyboard and USB mouse.

A recent fix in the in qemu VGA code uncoverd this problem, which
resulted in addition of extra keyboard and mouse to the qemu machine.

This patch is to set pci-ohci as USB default controller.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 v2 - v1:
  * Rephrase the commit message. (Nikunj A Dadhania)

 src/qemu/qemu_command.c  | 5 +++--
 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-default.args | 2 +-
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 379c094..46e851a 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -8466,8 +8466,9 @@ qemuBuildCommandLine(virConnectPtr conn,
 } else if (cont-type == VIR_DOMAIN_CONTROLLER_TYPE_USB 
cont-model == -1 
!qemuDomainMachineIsQ35(def) 
-   (!virQEMUCapsGet(qemuCaps, 
QEMU_CAPS_PIIX3_USB_UHCI) ||
-def-os.arch == VIR_ARCH_PPC64)) {
+   (!virQEMUCapsGet(qemuCaps, 
QEMU_CAPS_PIIX3_USB_UHCI) || 
+(!virQEMUCapsGet(qemuCaps, QEMU_CAPS_PCI_OHCI) 
+ def-os.arch == VIR_ARCH_PPC64))) {
 if (usblegacy) {
 virReportError(VIR_ERR_CONFIG_UNSUPPORTED, %s,
_(Multiple legacy USB controllers are 
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-default.args 
b/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-default.args
index 3a21b76..eac7c56 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-default.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-default.args
@@ -3,5 +3,5 @@ LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test 
QEMU_AUDIO_DRV=none \
 -nographic -nodefconfig -nodefaults \
 -chardev socket,id=charmonitor,path=/tmp/test-monitor,server,nowait \
 -mon chardev=charmonitor,id=monitor,mode=readline -no-acpi -boot c \
--usb -chardev pty,id=charserial0 \
+-device pci-ohci,id=usb,bus=pci,addr=0x1 -chardev pty,id=charserial0 \
 -device spapr-vty,chardev=charserial0,reg=0x3000
-- 
1.8.2.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


Re: [libvirt] [PATCH 1/1] Enable QEMU_CAPS_PCI_MULTIBUS capability for QEMU2.0 forward.

2014-04-09 Thread Li Zhang

On 2014年04月09日 17:25, Michal Privoznik wrote:

On 09.04.2014 04:03, Li Zhang wrote:

From: Li Zhang zhlci...@linux.vnet.ibm.com

For QEMU2.0 forward version, it supports PCI multiBUS.
Currently, libvirt still disables it which causes an error
Bus 'pci' not found.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
src/qemu/qemu_capabilities.c | 3 +++
1 file changed, 3 insertions(+)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 2c8ec10..b49398f 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -3019,6 +3019,9 @@ virQEMUCapsInitQMPMonitor(virQEMUCapsPtr qemuCaps,
if (qemuCaps-version = 1006000)
virQEMUCapsSet(qemuCaps, QEMU_CAPS_DEVICE_VIDEO_PRIMARY);

+ if (qemuCaps-version = 200)
+ virQEMUCapsSet(qemuCaps, QEMU_CAPS_PCI_MULTIBUS);
+
if (virQEMUCapsProbeQMPCommands(qemuCaps, mon)  0)
goto cleanup;
if (virQEMUCapsProbeQMPEvents(qemuCaps, mon)  0)



Libvirt is setting this capability unconditionally for all x86_64 and 
i686 (see virQEMUCapsInitArchQMPBasic). What is the actual scenario 
you're seeing this error in?


For pseries machine, before QEMU2.0, the PCI bus default name is always 
pci.

QEMU2.0 changed the name as pci.0 to support MULTBUS a couple days ago.

If libvirt still parses the name as pci with QEMU_CAPS_PCI_MULTIBUS 
disabled,

it will report the error Bus 'pci' not found.

I may need to add a PPC64 condition if X86 always enables MULTIBUS.


Thanks.
--Li


Michal


--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

[libvirt] [PATCH 1/1] Enable QEMU_CAPS_PCI_MULTIBUS capability for QEMU2.0 forward.

2014-04-08 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

For QEMU2.0 forward version, it supports PCI multiBUS.
Currently, libvirt still disables it which causes an error
Bus 'pci' not found.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/qemu/qemu_capabilities.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 2c8ec10..b49398f 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -3019,6 +3019,9 @@ virQEMUCapsInitQMPMonitor(virQEMUCapsPtr qemuCaps,
 if (qemuCaps-version = 1006000)
 virQEMUCapsSet(qemuCaps, QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
 
+if (qemuCaps-version = 200)
+virQEMUCapsSet(qemuCaps, QEMU_CAPS_PCI_MULTIBUS);
+
 if (virQEMUCapsProbeQMPCommands(qemuCaps, mon)  0)
 goto cleanup;
 if (virQEMUCapsProbeQMPEvents(qemuCaps, mon)  0)
-- 
1.8.2.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


Re: [libvirt] [PATCH 1/1] Enable QEMU_CAPS_PCI_MULTIBUS capability for QEMU2.0 forward.

2014-04-08 Thread Li Zhang

On 2014年04月09日 11:20, Eric Blake wrote:

On 04/08/2014 08:03 PM, Li Zhang wrote:

From: Li Zhang zhlci...@linux.vnet.ibm.com

For QEMU2.0 forward version, it supports PCI multiBUS.
Currently, libvirt still disables it which causes an error
Bus 'pci' not found.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
  src/qemu/qemu_capabilities.c | 3 +++
  1 file changed, 3 insertions(+)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 2c8ec10..b49398f 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -3019,6 +3019,9 @@ virQEMUCapsInitQMPMonitor(virQEMUCapsPtr qemuCaps,
  if (qemuCaps-version = 1006000)
  virQEMUCapsSet(qemuCaps, QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
  
+if (qemuCaps-version = 200)

+virQEMUCapsSet(qemuCaps, QEMU_CAPS_PCI_MULTIBUS);
+

This is a version number check, which is bad.  Is there a QMP command we
can issue that gives a more reliable answer of whether the feature is
present?


Hi Eric,

I can't find any QMP command for MULTIBUS in QEMU.
There is only one query-pci to list PCI bus and devices information.

Thanks.

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Re: [libvirt] [PATCH v9 0/7] Support keyboard device

2014-02-18 Thread Li Zhang

Hi Jan and Daniel,

Would you like to accept this patchset?

Thanks.

On 2014年02月17日 18:17, Li Zhang wrote:

From: Li Zhang zhlci...@linux.vnet.ibm.com

This patchset is to add keyboard input device.

For PPC64, it doesn't support a default keyboard device when the graphic
is enabled. Libvirt supports QEMU command line as -device VGA which
won't create any keyboard device for it. So it requires libvirt to add
a default USB keyboard device for it.

This patchset is to add keyboard input device and a default USB keyboard
for PPC64.

The related discussion in QEMU community:
http://lists.nongnu.org/archive/html/qemu-devel/2013-11/msg01734.html

Li Zhang (7):
   conf: Add one interface to add default input devices
   conf: Add a keyboard input device type
   conf: Remove the implicit PS2 devices for non-X86 platforms
   qemu_cap: Add USB keyboard capability
   qemu: format qemu command line for USB keyboard
   xen: format xen command line for USB keyboard
   Add a default USB keyboard and USB mouse for PPC64

  v9 - v8:
* Move keyboard XML format to the first patch. (Jan Tomko)
* Correct one logic error. (Jan Tomko)

  v8 - v7:
* Add USB keyboard output XML format when VIR_DOMAIN_XML_MIGRATABLE isn't set. 
(Daniel P.  Jan Tomko)
* Fix test cases because of XML changes.

  v7 - v6:
* Corret indention errors in code. (Jan Tomko)
* Correct make check error in xen driver. (Jan Tomko)
* Split 5/6 to 2 parts, qemu and xen. (Jan Tomko)
  v6 - v5:
* Change kbd to keyboard, and correct -usbdevice parameter.
* Remove implicit PS/2 keyboard output in XML in case
  older libvirtd can read it. (Jan Tomko)
* Remove implicit keyboard for XEN to make it safer.

  v5 - v4:
* Add PS/2 KBD definition in XML file. (Daniel.P.Berrange)
* Allow PS/2 KBD devices and set KBD default bus as PS2 for X86,
  USB for non-x86. (Daniel.P.Berrange)
* Add an implicit PS/2 KBD as PS/2 mouse. (Danniel.P.Berrange)

  v4 - v3:
* Don't remove PS2 mouse device for other virtualization drivers (Jan 
Tomko).

  v3 - v2:
* Handle the KBD device type in xen and QEMU driver. (Daniel.P.Berrange)
* Remove PS2 mouse device for non-X86 platforms.
* Move virDomainDefMaybeAddInput to a new patch. (Jan Tomko)
* Replace VIR_REALLOC_N with VIR_APPEND_ELEMENT. (Jan Tomoko)
* Fix several typos. (Jan Tomoko)
* Add a virReportError when QEMU_CAPS_DEVICE_USB_KBD can't be gotten. (Jan 
Tomoko)

  v2 - v1:
* change ifs to switch clause.
* reconstruct the patches

  docs/schemas/domaincommon.rng  |   1 +
  src/conf/domain_conf.c | 116 ++---
  src/conf/domain_conf.h |   5 +
  src/libvirt_private.syms   |   1 +
  src/qemu/qemu_capabilities.c   |   3 +
  src/qemu/qemu_capabilities.h   |   1 +
  src/qemu/qemu_command.c|  41 ++--
  src/qemu/qemu_domain.c |  23 +++-
  src/util/virarch.h |   2 +
  src/xenxs/xen_sxpr.c   |  27 +++--
  src/xenxs/xen_xm.c |  30 --
  tests/qemucapabilitiesdata/caps_1.2.2-1.caps   |   1 +
  tests/qemucapabilitiesdata/caps_1.3.1-1.caps   |   1 +
  tests/qemucapabilitiesdata/caps_1.4.2-1.caps   |   1 +
  tests/qemucapabilitiesdata/caps_1.5.3-1.caps   |   1 +
  tests/qemucapabilitiesdata/caps_1.6.0-1.caps   |   1 +
  tests/qemucapabilitiesdata/caps_1.6.50-1.caps  |   1 +
  tests/qemuhelptest.c   |   8 ++
  ...qemuhotplug-console-compat-2+console-virtio.xml |   1 +
  .../qemuxml2argv-console-compat-2.xml  |   1 +
  .../qemuxml2argv-graphics-listen-network.xml   |   1 +
  .../qemuxml2argv-graphics-listen-network2.xml  |   1 +
  .../qemuxml2argv-graphics-sdl-fullscreen.xml   |   1 +
  .../qemuxml2argvdata/qemuxml2argv-graphics-sdl.xml |   1 +
  .../qemuxml2argv-graphics-spice-compression.xml|   1 +
  .../qemuxml2argv-graphics-spice-qxl-vga.xml|   1 +
  .../qemuxml2argv-graphics-spice-timeout.xml|   2 +
  .../qemuxml2argv-graphics-spice.xml|   1 +
  .../qemuxml2argv-graphics-vnc-policy.xml   |   1 +
  .../qemuxml2argv-graphics-vnc-sasl.xml |   1 +
  .../qemuxml2argv-graphics-vnc-socket.xml   |   1 +
  .../qemuxml2argv-graphics-vnc-tls.xml  |   1 +
  .../qemuxml2argv-graphics-vnc-websocket.xml|   1 +
  .../qemuxml2argvdata/qemuxml2argv-graphics-vnc.xml |   1 +
  tests/qemuxml2argvdata/qemuxml2argv-input-xen.xml  |   1 +
  .../qemuxml2argv-net-bandwidth.xml |   1 +
  tests/qemuxml2argvdata/qemuxml2argv-pci-bridge.xml |   1 +
  .../qemuxml2argvdata/qemuxml2argv-pseries-disk.xml |   3 +-
  .../qemuxml2argv-pseries-usb-kbd.args  |   9

Re: [libvirt] [PATCH v9 3/7] conf: Remove the implicit PS2 devices for non-X86 platforms

2014-02-18 Thread Li Zhang

On 2014年02月17日 18:17, Li Zhang wrote:

From: Li Zhang zhlci...@linux.vnet.ibm.com

PS2 device only works for X86 platform, other platforms may need
USB devices instead. Athough it doesn't influence the QEMU command line,
but it's not right to add PS2 mouse/keyboard for non-X86 platform.

So, this patch is to remove PS2 devices for non-x86 platforms.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
  src/conf/domain_conf.c | 31 +-
  src/util/virarch.h |  2 ++
  .../qemuxml2argvdata/qemuxml2argv-pseries-disk.xml |  2 --
  3 files changed, 20 insertions(+), 15 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index c475d87..935255d 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -7838,7 +7838,8 @@ virDomainInputDefParseXML(const virDomainDef *dom,
  } else {
  if (STREQ(dom-os.type, hvm)) {
  if ((def-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
-def-type == VIR_DOMAIN_INPUT_TYPE_KBD))
+def-type == VIR_DOMAIN_INPUT_TYPE_KBD) 
+ARCH_IS_X86(dom-os.arch))

^^^
Sorry, there is a trailing space.
It needs to remove it when applying the patch.


  def-bus = VIR_DOMAIN_INPUT_BUS_PS2;
  else
  def-bus = VIR_DOMAIN_INPUT_BUS_USB;
@@ -12497,7 +12498,8 @@ virDomainDefParseXML(xmlDocPtr xml,
  VIR_FREE(nodes);
  
  /* If graphics are enabled, there's an implicit PS2 mouse */

-if (def-ngraphics  0) {
+if (def-ngraphics  0 
+ARCH_IS_X86(def-os.arch)) {


This line is also has a trailing space.


  int input_bus = VIR_DOMAIN_INPUT_BUS_XEN;
  
  if (STREQ(def-os.type, hvm))

@@ -17533,19 +17535,22 @@ virDomainDefFormatInternal(virDomainDefPtr def,
  
  if (def-ngraphics  0) {

  /* If graphics is enabled, add the implicit mouse/keyboard */
-virDomainInputDef autoInput = {
-VIR_DOMAIN_INPUT_TYPE_MOUSE,
-STREQ(def-os.type, hvm) ?
-VIR_DOMAIN_INPUT_BUS_PS2 : VIR_DOMAIN_INPUT_BUS_XEN,
-{ .alias = NULL },
-};
-if (virDomainInputDefFormat(buf, autoInput, flags)  0)
-goto error;
-
-if (!(flags  VIR_DOMAIN_XML_MIGRATABLE)) {
-autoInput.type = VIR_DOMAIN_INPUT_TYPE_KBD;
+if ((ARCH_IS_X86(def-os.arch)) ||
+def-os.arch == VIR_ARCH_NONE) {
+virDomainInputDef autoInput = {
+VIR_DOMAIN_INPUT_TYPE_MOUSE,
+STREQ(def-os.type, hvm) ?
+VIR_DOMAIN_INPUT_BUS_PS2 : VIR_DOMAIN_INPUT_BUS_XEN,
+{ .alias = NULL },
+};
  if (virDomainInputDefFormat(buf, autoInput, flags)  0)
  goto error;
+
+if (!(flags  VIR_DOMAIN_XML_MIGRATABLE)) {
+autoInput.type = VIR_DOMAIN_INPUT_TYPE_KBD;
+if (virDomainInputDefFormat(buf, autoInput, flags)  0)
+goto error;
+}
  }
  
  for (n = 0; n  def-ngraphics; n++)

diff --git a/src/util/virarch.h b/src/util/virarch.h
index b180400..c4d67ce 100644
--- a/src/util/virarch.h
+++ b/src/util/virarch.h
@@ -70,6 +70,8 @@ typedef enum {
  VIR_ARCH_LAST,
  } virArch;
  
+# define ARCH_IS_X86(arch)  ((arch) == VIR_ARCH_X86_64 ||\

+ (arch) == VIR_ARCH_I686)
  
  typedef enum {

  VIR_ARCH_LITTLE_ENDIAN,
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml 
b/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml
index 05e0f63..8dde776 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml
@@ -30,8 +30,6 @@
  controller type='usb' index='0'/
  controller type='scsi' index='0'/
  controller type='pci' index='0' model='pci-root'/
-input type='mouse' bus='ps2'/
-input type='keyboard' bus='ps2'/
  graphics type='sdl'/
  video
model type='cirrus' vram='9216' heads='1'/


--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Re: [libvirt] [PATCH v9 0/7] Support keyboard device

2014-02-18 Thread Li Zhang

On 2014年02月18日 20:52, Ján Tomko wrote:

On 02/18/2014 09:58 AM, Li Zhang wrote:

Hi Jan and Daniel,

Would you like to accept this patchset?

Thanks.


Hi,

it looks good to me and I'd like to push it this week with the changes I
pointed out, unless someone has a different opinion.


Thanks a lot.



Jan



--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Re: [libvirt] [PATCH v8 3/7] conf: Remove the implicit PS2 mouse for non-X86 platforms and add an implicit PS2 keyboard device for X86 platforms.

2014-02-17 Thread Li Zhang

On 2014年02月17日 17:17, Ján Tomko wrote:

On 02/17/2014 10:04 AM, Li Zhang wrote:

On 2014年02月17日 16:48, Ján Tomko wrote:

On 02/17/2014 08:33 AM, Li Zhang wrote:

From: Li Zhang zhlci...@linux.vnet.ibm.com

PS2 device only works for X86 platform, other platforms may need
USB mouse. Athough it doesn't influence the QEMU command line, but
it's not right to add one PS2 mouse for non-X86 platform.

What's more, PS2 keyboard can be supported for X86.

So, this patch is to remove PS2 mouse for non-x86 platforms and also add
an implicit PS2 keyboard device for X86.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 3301398..10c753c 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -12495,29 +12496,27 @@ virDomainDefParseXML(xmlDocPtr xml,
   VIR_FREE(nodes);
 /* If graphics are enabled, there's an implicit PS2 mouse */
-if (def-ngraphics  0) {
-virDomainInputDefPtr input;
+if (def-ngraphics  0 
+ARCH_IS_X86(def-os.arch)) {
+int input_bus = VIR_DOMAIN_INPUT_BUS_XEN;
   -if (VIR_ALLOC(input)  0) {
-goto error;
-}
-if (STREQ(def-os.type, hvm)) {
-input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
-input-bus = VIR_DOMAIN_INPUT_BUS_PS2;
-} else {
-input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
-input-bus = VIR_DOMAIN_INPUT_BUS_XEN;
-}
+if (STREQ(def-os.type, hvm))
+input_bus = VIR_DOMAIN_INPUT_BUS_PS2;
   -if (VIR_REALLOC_N(def-inputs, def-ninputs + 1)  0) {
-virDomainInputDefFree(input);
+if (virDomainDefMaybeAddInput(def,
+  VIR_DOMAIN_INPUT_TYPE_MOUSE,
+  input_bus)  0)
   goto error;
+
+/*Ignore keyboard for XEN, only add a PS2 keyboard device for hvm*/
+if (STREQ(def-os.type, hvm)) {
+if (virDomainDefMaybeAddInput(def,
+  VIR_DOMAIN_INPUT_TYPE_KBD,
+  input_bus)  0)
+goto error;
   }

Adding the default keyboard should be in the patch that adds it to the parser
according to
https://www.redhat.com/archives/libvir-list/2014-February/msg00889.html

Do you mean merge this patch to the first patch?


I mean merging the part dealing with keyboards with the first patch and only
touch the implicit mouse in this patch.


okay, get it. I will send out the next versions. :)



Jan



--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Re: [libvirt] [PATCH v8 3/7] conf: Remove the implicit PS2 mouse for non-X86 platforms and add an implicit PS2 keyboard device for X86 platforms.

2014-02-17 Thread Li Zhang

On 2014年02月17日 16:48, Ján Tomko wrote:

On 02/17/2014 08:33 AM, Li Zhang wrote:

From: Li Zhang zhlci...@linux.vnet.ibm.com

PS2 device only works for X86 platform, other platforms may need
USB mouse. Athough it doesn't influence the QEMU command line, but
it's not right to add one PS2 mouse for non-X86 platform.

What's more, PS2 keyboard can be supported for X86.

So, this patch is to remove PS2 mouse for non-x86 platforms and also add
an implicit PS2 keyboard device for X86.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 3301398..10c753c 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -12495,29 +12496,27 @@ virDomainDefParseXML(xmlDocPtr xml,
  VIR_FREE(nodes);
  
  /* If graphics are enabled, there's an implicit PS2 mouse */

-if (def-ngraphics  0) {
-virDomainInputDefPtr input;
+if (def-ngraphics  0 
+ARCH_IS_X86(def-os.arch)) {
+int input_bus = VIR_DOMAIN_INPUT_BUS_XEN;
  
-if (VIR_ALLOC(input)  0) {

-goto error;
-}
-if (STREQ(def-os.type, hvm)) {
-input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
-input-bus = VIR_DOMAIN_INPUT_BUS_PS2;
-} else {
-input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
-input-bus = VIR_DOMAIN_INPUT_BUS_XEN;
-}
+if (STREQ(def-os.type, hvm))
+input_bus = VIR_DOMAIN_INPUT_BUS_PS2;
  
-if (VIR_REALLOC_N(def-inputs, def-ninputs + 1)  0) {

-virDomainInputDefFree(input);
+if (virDomainDefMaybeAddInput(def,
+  VIR_DOMAIN_INPUT_TYPE_MOUSE,
+  input_bus)  0)
  goto error;
+
+/*Ignore keyboard for XEN, only add a PS2 keyboard device for hvm*/
+if (STREQ(def-os.type, hvm)) {
+if (virDomainDefMaybeAddInput(def,
+  VIR_DOMAIN_INPUT_TYPE_KBD,
+  input_bus)  0)
+goto error;
  }

Adding the default keyboard should be in the patch that adds it to the parser
according to
https://www.redhat.com/archives/libvir-list/2014-February/msg00889.html


Do you mean merge this patch to the first patch?




-def-inputs[def-ninputs] = input;
-def-ninputs++;
  }
  
-

  /* analysis of the sound devices */
  if ((n = virXPathNodeSet(./devices/sound, ctxt, nodes))  0) {
  goto error;
@@ -17533,16 +17532,24 @@ virDomainDefFormatInternal(virDomainDefPtr def,
  }
  
  if (def-ngraphics  0) {

-/* If graphics is enabled, add the implicit mouse */
-virDomainInputDef autoInput = {
-VIR_DOMAIN_INPUT_TYPE_MOUSE,
-STREQ(def-os.type, hvm) ?
-VIR_DOMAIN_INPUT_BUS_PS2 : VIR_DOMAIN_INPUT_BUS_XEN,
-{ .alias = NULL },
-};
+/* If graphics is enabled, add the implicit mouse/keyboard */
+if ((ARCH_IS_X86(def-os.arch)) ||
+def-os.arch == VIR_ARCH_NONE) {
+virDomainInputDef autoInput = {
+VIR_DOMAIN_INPUT_TYPE_MOUSE,
+STREQ(def-os.type, hvm) ?
+VIR_DOMAIN_INPUT_BUS_PS2 : VIR_DOMAIN_INPUT_BUS_XEN,
+{ .alias = NULL },
+};
+if (virDomainInputDefFormat(buf, autoInput, flags)  0)
+goto error;
  
-if (virDomainInputDefFormat(buf, autoInput, flags)  0)

-goto error;
+if (flags  ~VIR_DOMAIN_XML_MIGRATABLE) {

This condition is true, if any other flag than MIGRATABLE is true.
It should be if (!(flags  VIR_DOMAIN_XML_MIGRATABLE)) and also a part fo the
patch adding 'keyboard' to the parser.


+autoInput.type = VIR_DOMAIN_INPUT_TYPE_KBD;
+if (virDomainInputDefFormat(buf, autoInput, flags)  0)
+goto error;
+}
+}
  
  for (n = 0; n  def-ngraphics; n++)

  if (virDomainGraphicsDefFormat(buf, def-graphics[n], flags)  0)

Jan



--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

[libvirt] [PATCH v9 0/7] Support keyboard device

2014-02-17 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

This patchset is to add keyboard input device.

For PPC64, it doesn't support a default keyboard device when the graphic
is enabled. Libvirt supports QEMU command line as -device VGA which
won't create any keyboard device for it. So it requires libvirt to add
a default USB keyboard device for it.

This patchset is to add keyboard input device and a default USB keyboard
for PPC64.

The related discussion in QEMU community:
http://lists.nongnu.org/archive/html/qemu-devel/2013-11/msg01734.html

Li Zhang (7):
  conf: Add one interface to add default input devices
  conf: Add a keyboard input device type
  conf: Remove the implicit PS2 devices for non-X86 platforms
  qemu_cap: Add USB keyboard capability
  qemu: format qemu command line for USB keyboard
  xen: format xen command line for USB keyboard
  Add a default USB keyboard and USB mouse for PPC64

 v9 - v8:
   * Move keyboard XML format to the first patch. (Jan Tomko)
   * Correct one logic error. (Jan Tomko)

 v8 - v7:
   * Add USB keyboard output XML format when VIR_DOMAIN_XML_MIGRATABLE isn't 
set. (Daniel P.  Jan Tomko)
   * Fix test cases because of XML changes.

 v7 - v6:
   * Corret indention errors in code. (Jan Tomko)
   * Correct make check error in xen driver. (Jan Tomko)
   * Split 5/6 to 2 parts, qemu and xen. (Jan Tomko)
 v6 - v5:
   * Change kbd to keyboard, and correct -usbdevice parameter.
   * Remove implicit PS/2 keyboard output in XML in case
 older libvirtd can read it. (Jan Tomko)
   * Remove implicit keyboard for XEN to make it safer.

 v5 - v4:
   * Add PS/2 KBD definition in XML file. (Daniel.P.Berrange)
   * Allow PS/2 KBD devices and set KBD default bus as PS2 for X86, 
 USB for non-x86. (Daniel.P.Berrange)
   * Add an implicit PS/2 KBD as PS/2 mouse. (Danniel.P.Berrange)

 v4 - v3:
   * Don't remove PS2 mouse device for other virtualization drivers (Jan Tomko).

 v3 - v2:
   * Handle the KBD device type in xen and QEMU driver. (Daniel.P.Berrange)
   * Remove PS2 mouse device for non-X86 platforms.
   * Move virDomainDefMaybeAddInput to a new patch. (Jan Tomko)
   * Replace VIR_REALLOC_N with VIR_APPEND_ELEMENT. (Jan Tomoko)
   * Fix several typos. (Jan Tomoko)
   * Add a virReportError when QEMU_CAPS_DEVICE_USB_KBD can't be gotten. (Jan 
Tomoko)

 v2 - v1:
   * change ifs to switch clause.
   * reconstruct the patches

 docs/schemas/domaincommon.rng  |   1 +
 src/conf/domain_conf.c | 116 ++---
 src/conf/domain_conf.h |   5 +
 src/libvirt_private.syms   |   1 +
 src/qemu/qemu_capabilities.c   |   3 +
 src/qemu/qemu_capabilities.h   |   1 +
 src/qemu/qemu_command.c|  41 ++--
 src/qemu/qemu_domain.c |  23 +++-
 src/util/virarch.h |   2 +
 src/xenxs/xen_sxpr.c   |  27 +++--
 src/xenxs/xen_xm.c |  30 --
 tests/qemucapabilitiesdata/caps_1.2.2-1.caps   |   1 +
 tests/qemucapabilitiesdata/caps_1.3.1-1.caps   |   1 +
 tests/qemucapabilitiesdata/caps_1.4.2-1.caps   |   1 +
 tests/qemucapabilitiesdata/caps_1.5.3-1.caps   |   1 +
 tests/qemucapabilitiesdata/caps_1.6.0-1.caps   |   1 +
 tests/qemucapabilitiesdata/caps_1.6.50-1.caps  |   1 +
 tests/qemuhelptest.c   |   8 ++
 ...qemuhotplug-console-compat-2+console-virtio.xml |   1 +
 .../qemuxml2argv-console-compat-2.xml  |   1 +
 .../qemuxml2argv-graphics-listen-network.xml   |   1 +
 .../qemuxml2argv-graphics-listen-network2.xml  |   1 +
 .../qemuxml2argv-graphics-sdl-fullscreen.xml   |   1 +
 .../qemuxml2argvdata/qemuxml2argv-graphics-sdl.xml |   1 +
 .../qemuxml2argv-graphics-spice-compression.xml|   1 +
 .../qemuxml2argv-graphics-spice-qxl-vga.xml|   1 +
 .../qemuxml2argv-graphics-spice-timeout.xml|   2 +
 .../qemuxml2argv-graphics-spice.xml|   1 +
 .../qemuxml2argv-graphics-vnc-policy.xml   |   1 +
 .../qemuxml2argv-graphics-vnc-sasl.xml |   1 +
 .../qemuxml2argv-graphics-vnc-socket.xml   |   1 +
 .../qemuxml2argv-graphics-vnc-tls.xml  |   1 +
 .../qemuxml2argv-graphics-vnc-websocket.xml|   1 +
 .../qemuxml2argvdata/qemuxml2argv-graphics-vnc.xml |   1 +
 tests/qemuxml2argvdata/qemuxml2argv-input-xen.xml  |   1 +
 .../qemuxml2argv-net-bandwidth.xml |   1 +
 tests/qemuxml2argvdata/qemuxml2argv-pci-bridge.xml |   1 +
 .../qemuxml2argvdata/qemuxml2argv-pseries-disk.xml |   3 +-
 .../qemuxml2argv-pseries-usb-kbd.args  |   9 ++
 .../qemuxml2argv-pseries-usb-kbd.xml   |  19 
 .../qemuxml2argv-serial-spiceport.xml  |   1 +
 tests/qemuxml2argvtest.c   |   3

[libvirt] [PATCH v9 1/7] conf: Add one interface to add default input devices

2014-02-17 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

This patch is to add one new interface to add input devices.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/conf/domain_conf.c   | 29 +
 src/conf/domain_conf.h   |  4 
 src/libvirt_private.syms |  1 +
 3 files changed, 34 insertions(+)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index fc9615f..1c24440 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -11050,6 +11050,35 @@ virDomainDefMaybeAddController(virDomainDefPtr def,
 }
 
 
+
+int
+virDomainDefMaybeAddInput(virDomainDefPtr def,
+   int type,
+   int bus)
+{
+size_t i;
+virDomainInputDefPtr input;
+
+for (i = 0; i  def-ninputs; i++) {
+if (def-inputs[i]-type == type 
+def-inputs[i]-bus == bus)
+return 0;
+}
+
+if (VIR_ALLOC(input)  0)
+return -1;
+
+input-type = type;
+input-bus = bus;
+
+if (VIR_APPEND_ELEMENT(def-inputs, def-ninputs, input)  0) {
+VIR_FREE(input);
+return -1;
+}
+
+return 0;
+}
+
 /* Parse a memory element located at XPATH within CTXT, and store the
  * result into MEM.  If REQUIRED, then the value must exist;
  * otherwise, the value is optional.  The value is in blocks of 1024.
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 24cbec3..b8cfee9 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -2805,6 +2805,10 @@ virDomainDefMaybeAddController(virDomainDefPtr def,
int type,
int idx,
int model);
+int
+virDomainDefMaybeAddInput(virDomainDefPtr def,
+  int type,
+  int bus);
 
 char *virDomainDefGetDefaultEmulator(virDomainDefPtr def, virCapsPtr caps);
 
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 67d20ed..e560a21 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -165,6 +165,7 @@ virDomainDefGenSecurityLabelDef;
 virDomainDefGetDefaultEmulator;
 virDomainDefGetSecurityLabelDef;
 virDomainDefMaybeAddController;
+virDomainDefMaybeAddInput;
 virDomainDefNew;
 virDomainDefParseFile;
 virDomainDefParseNode;
-- 
1.8.2.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH v9 2/7] conf: Add a keyboard input device type

2014-02-17 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

There is no keyboard support currently in libvirt .
For some platforms, it needs to add a USB keyboard when graphics are enabled.

This patch is to add keyboard input device type.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 docs/schemas/domaincommon.rng  |  1 +
 src/conf/domain_conf.c | 70 --
 src/conf/domain_conf.h |  1 +
 ...qemuhotplug-console-compat-2+console-virtio.xml |  1 +
 .../qemuxml2argv-console-compat-2.xml  |  1 +
 .../qemuxml2argv-graphics-listen-network.xml   |  1 +
 .../qemuxml2argv-graphics-listen-network2.xml  |  1 +
 .../qemuxml2argv-graphics-sdl-fullscreen.xml   |  1 +
 .../qemuxml2argvdata/qemuxml2argv-graphics-sdl.xml |  1 +
 .../qemuxml2argv-graphics-spice-compression.xml|  1 +
 .../qemuxml2argv-graphics-spice-qxl-vga.xml|  1 +
 .../qemuxml2argv-graphics-spice-timeout.xml|  2 +
 .../qemuxml2argv-graphics-spice.xml|  1 +
 .../qemuxml2argv-graphics-vnc-policy.xml   |  1 +
 .../qemuxml2argv-graphics-vnc-sasl.xml |  1 +
 .../qemuxml2argv-graphics-vnc-socket.xml   |  1 +
 .../qemuxml2argv-graphics-vnc-tls.xml  |  1 +
 .../qemuxml2argv-graphics-vnc-websocket.xml|  1 +
 .../qemuxml2argvdata/qemuxml2argv-graphics-vnc.xml |  1 +
 tests/qemuxml2argvdata/qemuxml2argv-input-xen.xml  |  1 +
 .../qemuxml2argv-net-bandwidth.xml |  1 +
 tests/qemuxml2argvdata/qemuxml2argv-pci-bridge.xml |  1 +
 .../qemuxml2argvdata/qemuxml2argv-pseries-disk.xml |  1 +
 .../qemuxml2argv-serial-spiceport.xml  |  1 +
 .../qemuxml2xmlout-graphics-listen-network2.xml|  1 +
 .../qemuxml2xmlout-graphics-spice-timeout.xml  |  1 +
 tests/vmx2xmldata/vmx2xml-graphics-vnc.xml |  1 +
 27 files changed, 66 insertions(+), 31 deletions(-)

diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index c1efcd2..601e7ac 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -3269,6 +3269,7 @@
 choice
   valuetablet/value
   valuemouse/value
+  valuekeyboard/value
 /choice
   /attribute
   optional
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 1c24440..c475d87 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -506,7 +506,8 @@ VIR_ENUM_IMPL(virDomainVideo, VIR_DOMAIN_VIDEO_TYPE_LAST,
 
 VIR_ENUM_IMPL(virDomainInput, VIR_DOMAIN_INPUT_TYPE_LAST,
   mouse,
-  tablet)
+  tablet,
+  keyboard)
 
 VIR_ENUM_IMPL(virDomainInputBus, VIR_DOMAIN_INPUT_BUS_LAST,
   ps2,
@@ -7772,7 +7773,7 @@ error:
 
 /* Parse the XML definition for an input device */
 static virDomainInputDefPtr
-virDomainInputDefParseXML(const char *ostype,
+virDomainInputDefParseXML(const virDomainDef *dom,
   xmlNodePtr node,
   unsigned int flags)
 {
@@ -7805,9 +7806,10 @@ virDomainInputDefParseXML(const char *ostype,
 goto error;
 }
 
-if (STREQ(ostype, hvm)) {
-if (def-bus == VIR_DOMAIN_INPUT_BUS_PS2  /* Only allow mouse 
for ps2 */
-def-type != VIR_DOMAIN_INPUT_TYPE_MOUSE) {
+if (STREQ(dom-os.type, hvm)) {
+if (def-bus == VIR_DOMAIN_INPUT_BUS_PS2  /* PS2 can be mouse or 
keyboard */
+!(def-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
+def-type == VIR_DOMAIN_INPUT_TYPE_KBD)) {
 virReportError(VIR_ERR_INTERNAL_ERROR,
_(ps2 bus does not support %s input device),
type);
@@ -7825,7 +7827,8 @@ virDomainInputDefParseXML(const char *ostype,
_(unsupported input bus %s),
bus);
 }
-if (def-type != VIR_DOMAIN_INPUT_TYPE_MOUSE) {
+if (def-type != VIR_DOMAIN_INPUT_TYPE_MOUSE 
+def-type != VIR_DOMAIN_INPUT_TYPE_KBD) {
 virReportError(VIR_ERR_INTERNAL_ERROR,
_(xen bus does not support %s input device),
type);
@@ -7833,8 +7836,9 @@ virDomainInputDefParseXML(const char *ostype,
 }
 }
 } else {
-if (STREQ(ostype, hvm)) {
-if (def-type == VIR_DOMAIN_INPUT_TYPE_MOUSE)
+if (STREQ(dom-os.type, hvm)) {
+if ((def-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
+def-type == VIR_DOMAIN_INPUT_TYPE_KBD)) 
 def-bus = VIR_DOMAIN_INPUT_BUS_PS2;
 else
 def-bus = VIR_DOMAIN_INPUT_BUS_USB;
@@ -9856,7 +9860,7 @@ virDomainDeviceDefParse(const char *xmlStr,
 goto error;
 break;
 case VIR_DOMAIN_DEVICE_INPUT:
-if (!(dev-data.input = virDomainInputDefParseXML

[libvirt] [PATCH v9 3/7] conf: Remove the implicit PS2 devices for non-X86 platforms

2014-02-17 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

PS2 device only works for X86 platform, other platforms may need
USB devices instead. Athough it doesn't influence the QEMU command line,
but it's not right to add PS2 mouse/keyboard for non-X86 platform.

So, this patch is to remove PS2 devices for non-x86 platforms.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/conf/domain_conf.c | 31 +-
 src/util/virarch.h |  2 ++
 .../qemuxml2argvdata/qemuxml2argv-pseries-disk.xml |  2 --
 3 files changed, 20 insertions(+), 15 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index c475d87..935255d 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -7838,7 +7838,8 @@ virDomainInputDefParseXML(const virDomainDef *dom,
 } else {
 if (STREQ(dom-os.type, hvm)) {
 if ((def-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
-def-type == VIR_DOMAIN_INPUT_TYPE_KBD)) 
+def-type == VIR_DOMAIN_INPUT_TYPE_KBD) 
+ARCH_IS_X86(dom-os.arch)) 
 def-bus = VIR_DOMAIN_INPUT_BUS_PS2;
 else
 def-bus = VIR_DOMAIN_INPUT_BUS_USB;
@@ -12497,7 +12498,8 @@ virDomainDefParseXML(xmlDocPtr xml,
 VIR_FREE(nodes);
 
 /* If graphics are enabled, there's an implicit PS2 mouse */
-if (def-ngraphics  0) { 
+if (def-ngraphics  0 
+ARCH_IS_X86(def-os.arch)) { 
 int input_bus = VIR_DOMAIN_INPUT_BUS_XEN;
 
 if (STREQ(def-os.type, hvm))
@@ -17533,19 +17535,22 @@ virDomainDefFormatInternal(virDomainDefPtr def,
 
 if (def-ngraphics  0) {
 /* If graphics is enabled, add the implicit mouse/keyboard */
-virDomainInputDef autoInput = {
-VIR_DOMAIN_INPUT_TYPE_MOUSE,
-STREQ(def-os.type, hvm) ?
-VIR_DOMAIN_INPUT_BUS_PS2 : VIR_DOMAIN_INPUT_BUS_XEN,
-{ .alias = NULL },
-};
-if (virDomainInputDefFormat(buf, autoInput, flags)  0)
-goto error;
-
-if (!(flags  VIR_DOMAIN_XML_MIGRATABLE)) {
-autoInput.type = VIR_DOMAIN_INPUT_TYPE_KBD;
+if ((ARCH_IS_X86(def-os.arch)) ||
+def-os.arch == VIR_ARCH_NONE) {
+virDomainInputDef autoInput = {
+VIR_DOMAIN_INPUT_TYPE_MOUSE,
+STREQ(def-os.type, hvm) ?
+VIR_DOMAIN_INPUT_BUS_PS2 : VIR_DOMAIN_INPUT_BUS_XEN,
+{ .alias = NULL },
+};
 if (virDomainInputDefFormat(buf, autoInput, flags)  0)
 goto error;
+
+if (!(flags  VIR_DOMAIN_XML_MIGRATABLE)) {
+autoInput.type = VIR_DOMAIN_INPUT_TYPE_KBD;
+if (virDomainInputDefFormat(buf, autoInput, flags)  0)
+goto error;
+}
 }
 
 for (n = 0; n  def-ngraphics; n++)
diff --git a/src/util/virarch.h b/src/util/virarch.h
index b180400..c4d67ce 100644
--- a/src/util/virarch.h
+++ b/src/util/virarch.h
@@ -70,6 +70,8 @@ typedef enum {
 VIR_ARCH_LAST,
 } virArch;
 
+# define ARCH_IS_X86(arch)  ((arch) == VIR_ARCH_X86_64 ||\
+ (arch) == VIR_ARCH_I686)
 
 typedef enum {
 VIR_ARCH_LITTLE_ENDIAN,
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml 
b/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml
index 05e0f63..8dde776 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml
@@ -30,8 +30,6 @@
 controller type='usb' index='0'/
 controller type='scsi' index='0'/
 controller type='pci' index='0' model='pci-root'/
-input type='mouse' bus='ps2'/
-input type='keyboard' bus='ps2'/
 graphics type='sdl'/
 video
   model type='cirrus' vram='9216' heads='1'/
-- 
1.8.2.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH v9 6/7] xen: format xen command line for USB keyboard

2014-02-17 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

This patch is to format xen command line for USB keyboard

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/xenxs/xen_sxpr.c | 27 +++
 src/xenxs/xen_xm.c   | 30 ++
 2 files changed, 41 insertions(+), 16 deletions(-)

diff --git a/src/xenxs/xen_sxpr.c b/src/xenxs/xen_sxpr.c
index d514725..d366b1b 100644
--- a/src/xenxs/xen_sxpr.c
+++ b/src/xenxs/xen_sxpr.c
@@ -724,21 +724,23 @@ xenParseSxprUSB(virDomainDefPtr def,
 tmp = sexpr_node(node, usbdevice);
 if (tmp  *tmp) {
 if (STREQ(tmp, tablet) ||
-STREQ(tmp, mouse)) {
+STREQ(tmp, mouse) ||
+STREQ(tmp, keyboard)) {
 virDomainInputDefPtr input;
 if (VIR_ALLOC(input)  0)
 goto error;
 input-bus = VIR_DOMAIN_INPUT_BUS_USB;
 if (STREQ(tmp, tablet))
 input-type = VIR_DOMAIN_INPUT_TYPE_TABLET;
-else
+else if (STREQ(tmp, mouse))
 input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
+else
+input-type = VIR_DOMAIN_INPUT_TYPE_KBD;
 
-if (VIR_REALLOC_N(def-inputs, def-ninputs+1)  0) {
+if (VIR_APPEND_ELEMENT(def-inputs, def-ninputs, input)  
0) {
 VIR_FREE(input);
 goto error;
 }
-def-inputs[def-ninputs++] = input;
 } else {
 /* XXX Handle other non-input USB devices later */
 }
@@ -2144,15 +2146,24 @@ xenFormatSxprInput(virDomainInputDefPtr input,
 return 0;
 
 if (input-type != VIR_DOMAIN_INPUT_TYPE_MOUSE 
-input-type != VIR_DOMAIN_INPUT_TYPE_TABLET) {
+input-type != VIR_DOMAIN_INPUT_TYPE_TABLET 
+input-type != VIR_DOMAIN_INPUT_TYPE_KBD) {
 virReportError(VIR_ERR_INTERNAL_ERROR,
_(unexpected input type %d), input-type);
 return -1;
 }
 
-virBufferAsprintf(buf, (usbdevice %s),
-  input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ?
-  mouse : tablet);
+switch (input-type) {
+case VIR_DOMAIN_INPUT_TYPE_MOUSE:
+virBufferAsprintf(buf, (usbdevice %s), mouse);
+break;
+case VIR_DOMAIN_INPUT_TYPE_TABLET:
+virBufferAsprintf(buf, (usbdevice %s), tablet);
+break;
+case VIR_DOMAIN_INPUT_TYPE_KBD:
+virBufferAsprintf(buf, (usbdevice %s), keyboard);
+break;
+}
 
 return 0;
 }
diff --git a/src/xenxs/xen_xm.c b/src/xenxs/xen_xm.c
index 5e89876..3a57547 100644
--- a/src/xenxs/xen_xm.c
+++ b/src/xenxs/xen_xm.c
@@ -886,14 +886,18 @@ xenParseXM(virConfPtr conf, int xendConfigVersion,
 goto cleanup;
 if (str 
 (STREQ(str, tablet) ||
- STREQ(str, mouse))) {
+ STREQ(str, mouse) ||
+ STREQ(str, keyboard))) {
 virDomainInputDefPtr input;
 if (VIR_ALLOC(input)  0)
 goto cleanup;
 input-bus = VIR_DOMAIN_INPUT_BUS_USB;
-input-type = STREQ(str, tablet) ?
-VIR_DOMAIN_INPUT_TYPE_TABLET :
-VIR_DOMAIN_INPUT_TYPE_MOUSE;
+if (STREQ(str, mouse))
+input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
+else if (STREQ(str, tablet))
+input-type = VIR_DOMAIN_INPUT_TYPE_TABLET;
+else if (STREQ(str, keyboard))
+input-type = VIR_DOMAIN_INPUT_TYPE_KBD;
 if (VIR_ALLOC_N(def-inputs, 1)  0) {
 virDomainInputDefFree(input);
 goto cleanup;
@@ -1746,10 +1750,20 @@ virConfPtr xenFormatXM(virConnectPtr conn,
 if (def-inputs[i]-bus == VIR_DOMAIN_INPUT_BUS_USB) {
 if (xenXMConfigSetInt(conf, usb, 1)  0)
 goto cleanup;
-if (xenXMConfigSetString(conf, usbdevice,
- def-inputs[i]-type == 
VIR_DOMAIN_INPUT_TYPE_MOUSE ?
- mouse : tablet)  0)
-goto cleanup;
+switch (def-inputs[i]-type) {
+case VIR_DOMAIN_INPUT_TYPE_MOUSE:
+if (xenXMConfigSetString(conf, usbdevice, mouse)  
0)
+goto cleanup;
+break;
+case VIR_DOMAIN_INPUT_TYPE_TABLET:
+if (xenXMConfigSetString(conf, usbdevice, tablet) 
 0)
+goto cleanup;
+break;
+case VIR_DOMAIN_INPUT_TYPE_KBD:
+if (xenXMConfigSetString(conf, usbdevice, 
keyboard)  0

[libvirt] [PATCH v9 5/7] qemu: format qemu command line for USB keyboard

2014-02-17 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

This patch is to format qemu command line for USB keyboard
and add test cases for it.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/qemu/qemu_command.c| 41 --
 .../qemuxml2argv-pseries-usb-kbd.args  |  9 +
 .../qemuxml2argv-pseries-usb-kbd.xml   | 19 ++
 tests/qemuxml2argvtest.c   |  3 ++
 4 files changed, 62 insertions(+), 10 deletions(-)
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.xml

diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index bb8756f..22ba441 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -5306,9 +5306,19 @@ qemuBuildUSBInputDevStr(virDomainDefPtr def,
 {
 virBuffer buf = VIR_BUFFER_INITIALIZER;
 
-virBufferAsprintf(buf, %s,id=%s,
-  dev-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ?
-  usb-mouse : usb-tablet, dev-info.alias);
+switch (dev-type) {
+case VIR_DOMAIN_INPUT_TYPE_MOUSE:
+virBufferAsprintf(buf, usb-mouse,id=%s, dev-info.alias);
+break;
+case VIR_DOMAIN_INPUT_TYPE_TABLET:
+virBufferAsprintf(buf, usb-tablet,id=%s, dev-info.alias);
+break;
+case VIR_DOMAIN_INPUT_TYPE_KBD:
+if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_USB_KBD))
+goto error;
+virBufferAsprintf(buf, usb-kbd,id=%s, dev-info.alias);
+break;
+}
 
 if (qemuBuildDeviceAddressStr(buf, def, dev-info, qemuCaps)  0)
 goto error;
@@ -9044,9 +9054,17 @@ qemuBuildCommandLine(virConnectPtr conn,
 virCommandAddArg(cmd, optstr);
 VIR_FREE(optstr);
 } else {
-virCommandAddArgList(cmd, -usbdevice,
- input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE
- ? mouse : tablet, NULL);
+switch (input-type) {
+case VIR_DOMAIN_INPUT_TYPE_MOUSE:
+virCommandAddArgList(cmd, -usbdevice, mouse, NULL);
+break;
+case VIR_DOMAIN_INPUT_TYPE_TABLET:
+virCommandAddArgList(cmd, -usbdevice, tablet, 
NULL);
+break;
+case VIR_DOMAIN_INPUT_TYPE_KBD:
+virCommandAddArgList(cmd, -usbdevice, keyboard, 
NULL);
+break;
+}
 }
 }
 }
@@ -11720,20 +11738,23 @@ qemuParseCommandLine(virCapsPtr qemuCaps,
 } else if (STREQ(arg, -usbdevice)) {
 WANT_VALUE();
 if (STREQ(val, tablet) ||
-STREQ(val, mouse)) {
+STREQ(val, mouse) ||
+STREQ(val, keyboard)) {
 virDomainInputDefPtr input;
 if (VIR_ALLOC(input)  0)
 goto error;
 input-bus = VIR_DOMAIN_INPUT_BUS_USB;
 if (STREQ(val, tablet))
 input-type = VIR_DOMAIN_INPUT_TYPE_TABLET;
-else
+else if (STREQ(val, mouse))
 input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
-if (VIR_REALLOC_N(def-inputs, def-ninputs+1)  0) {
+else
+input-type = VIR_DOMAIN_INPUT_TYPE_KBD;
+
+if (VIR_APPEND_ELEMENT(def-inputs, def-ninputs, input)  0) {
 virDomainInputDefFree(input);
 goto error;
 }
-def-inputs[def-ninputs++] = input;
 } else if (STRPREFIX(val, disk:)) {
 if (VIR_ALLOC(disk)  0)
 goto error;
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args 
b/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args
new file mode 100644
index 000..373c72a
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args
@@ -0,0 +1,9 @@
+LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \
+/usr/bin/qemu-system-ppc64 -S -M pseries -m 512 -smp 1 \
+-nographic -nodefconfig -nodefaults \
+-chardev socket,id=charmonitor,path=/tmp/test-monitor,server,nowait \
+-mon chardev=charmonitor,id=monitor,mode=readline -no-acpi -boot c \
+-device pci-ohci,id=usb,bus=pci,addr=0x1 \
+-chardev pty,id=charserial0 \
+-device spapr-vty,chardev=charserial0,reg=0x3000 \
+-device usb-kbd,id=input0
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.xml 
b/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.xml
new file mode 100644
index 000..5bd4c37
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.xml
@@ -0,0 +1,19 @@
+domain type='qemu'
+  nameQEMUGuest1/name
+  uuid1ccfd97d-5eb4-478a-bbe6-88d254c16db7/uuid
+  memory unit='KiB'524288/memory
+  vcpu

[libvirt] [PATCH v9 7/7] Add a default USB keyboard and USB mouse for PPC64

2014-02-17 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

There is no keyboard working on PPC64 and PS2 mouse is only for X86
when graphics are enabled. It needs to add a USB keyboard and USB mouse for 
PPC64.

This patch is to add a USB keyboard and USB mouse when graphics are enabled.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/qemu/qemu_domain.c | 23 +-
 .../qemuxml2argvdata/qemuxml2argv-pseries-disk.xml |  2 ++
 2 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index a665061..7f4ff0e 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -691,6 +691,8 @@ qemuDomainDefPostParse(virDomainDefPtr def,
 bool addPCIRoot = false;
 bool addPCIeRoot = false;
 bool addDefaultMemballoon = true;
+bool addDefaultUSBKBD = false;
+bool addDefaultUSBMouse = false;
 
 /* check for emulator and create a default one if needed */
 if (!def-emulator 
@@ -732,9 +734,14 @@ qemuDomainDefPostParse(virDomainDefPtr def,
addDefaultMemballoon = false;
break;
 
+case VIR_ARCH_PPC64:
+addPCIRoot = true;
+addDefaultUSBKBD = true;
+addDefaultUSBMouse = true;
+break;
+
 case VIR_ARCH_ALPHA:
 case VIR_ARCH_PPC:
-case VIR_ARCH_PPC64:
 case VIR_ARCH_PPCEMB:
 case VIR_ARCH_SH4:
 case VIR_ARCH_SH4EB:
@@ -787,6 +794,20 @@ qemuDomainDefPostParse(virDomainDefPtr def,
 def-memballoon = memballoon;
 }
 
+if (addDefaultUSBKBD 
+def-ngraphics  0 
+virDomainDefMaybeAddInput(def,
+  VIR_DOMAIN_INPUT_TYPE_KBD,
+  VIR_DOMAIN_INPUT_BUS_USB)  0)
+return -1;
+
+if (addDefaultUSBMouse 
+def-ngraphics  0 
+virDomainDefMaybeAddInput(def,
+  VIR_DOMAIN_INPUT_TYPE_MOUSE,
+  VIR_DOMAIN_INPUT_BUS_USB)  0)
+return -1;
+
 return 0;
 }
 
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml 
b/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml
index 8dde776..64b70f3 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml
@@ -30,6 +30,8 @@
 controller type='usb' index='0'/
 controller type='scsi' index='0'/
 controller type='pci' index='0' model='pci-root'/
+input type='keyboard' bus='usb'/
+input type='mouse' bus='usb'/
 graphics type='sdl'/
 video
   model type='cirrus' vram='9216' heads='1'/
-- 
1.8.2.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH v9 4/7] qemu_cap: Add USB keyboard capability

2014-02-17 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

QEMU can support USB keyboard but libvirt haven't supportted it yet.
This patch is to add USB keyboard capabilities and test cases.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/qemu/qemu_capabilities.c  | 3 +++
 src/qemu/qemu_capabilities.h  | 1 +
 tests/qemucapabilitiesdata/caps_1.2.2-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.3.1-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.4.2-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.5.3-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.6.0-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.6.50-1.caps | 1 +
 tests/qemuhelptest.c  | 8 
 9 files changed, 18 insertions(+)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index e7d953a..d618b3f 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -249,6 +249,8 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST,
   enable-fips,
   spice-file-xfer-disable,
   spiceport,
+
+  usb-kbd, /* 165 */
 );
 
 struct _virQEMUCaps {
@@ -1403,6 +1405,7 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = {
 { virtio-mmio, QEMU_CAPS_DEVICE_VIRTIO_MMIO },
 { ich9-intel-hda, QEMU_CAPS_DEVICE_ICH9_INTEL_HDA },
 { pvpanic, QEMU_CAPS_DEVICE_PANIC },
+{ usb-kbd, QEMU_CAPS_DEVICE_USB_KBD },
 };
 
 static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsVirtioBlk[] = {
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
index a4eecb6..b5445e7 100644
--- a/src/qemu/qemu_capabilities.h
+++ b/src/qemu/qemu_capabilities.h
@@ -203,6 +203,7 @@ enum virQEMUCapsFlags {
 QEMU_CAPS_ENABLE_FIPS= 162, /* -enable-fips */
 QEMU_CAPS_SPICE_FILE_XFER_DISABLE = 163, /* -spice disable-agent-file-xfer 
*/
 QEMU_CAPS_CHARDEV_SPICEPORT  = 164, /* -chardev spiceport */
+QEMU_CAPS_DEVICE_USB_KBD = 165, /* -device usb-kbd */
 
 QEMU_CAPS_LAST,   /* this must always be the last item */
 };
diff --git a/tests/qemucapabilitiesdata/caps_1.2.2-1.caps 
b/tests/qemucapabilitiesdata/caps_1.2.2-1.caps
index c3ae814..436cecd 100644
--- a/tests/qemucapabilitiesdata/caps_1.2.2-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.2.2-1.caps
@@ -113,4 +113,5 @@
 flag name='usb-storage.removable'/
 flag name='kvm-pit-lost-tick-policy'/
 flag name='enable-fips'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.3.1-1.caps 
b/tests/qemucapabilitiesdata/caps_1.3.1-1.caps
index da15d8b..6b4a8f0 100644
--- a/tests/qemucapabilitiesdata/caps_1.3.1-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.3.1-1.caps
@@ -126,4 +126,5 @@
 flag name='usb-storage'/
 flag name='usb-storage.removable'/
 flag name='kvm-pit-lost-tick-policy'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.4.2-1.caps 
b/tests/qemucapabilitiesdata/caps_1.4.2-1.caps
index c419068..e3d0047 100644
--- a/tests/qemucapabilitiesdata/caps_1.4.2-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.4.2-1.caps
@@ -127,4 +127,5 @@
 flag name='usb-storage.removable'/
 flag name='ich9-intel-hda'/
 flag name='kvm-pit-lost-tick-policy'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.5.3-1.caps 
b/tests/qemucapabilitiesdata/caps_1.5.3-1.caps
index adf8531..01b4d27 100644
--- a/tests/qemucapabilitiesdata/caps_1.5.3-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.5.3-1.caps
@@ -135,4 +135,5 @@
 flag name='pvpanic'/
 flag name='reboot-timeout'/
 flag name='spiceport'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.6.0-1.caps 
b/tests/qemucapabilitiesdata/caps_1.6.0-1.caps
index e6b2f76..597f873 100644
--- a/tests/qemucapabilitiesdata/caps_1.6.0-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.6.0-1.caps
@@ -141,4 +141,5 @@
 flag name='enable-fips'/
 flag name='spice-file-xfer-disable'/
 flag name='spiceport'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.6.50-1.caps 
b/tests/qemucapabilitiesdata/caps_1.6.50-1.caps
index e6b8117..0c1dd87 100644
--- a/tests/qemucapabilitiesdata/caps_1.6.50-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.6.50-1.caps
@@ -139,4 +139,5 @@
 flag name='reboot-timeout'/
 flag name='spice-file-xfer-disable'/
 flag name='spiceport'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemuhelptest.c b/tests/qemuhelptest.c
index 3628fbe..6e0a5f8 100644
--- a/tests/qemuhelptest.c
+++ b/tests/qemuhelptest.c
@@ -403,6 +403,7 @@ mymain(void)
 QEMU_CAPS_DEVICE_VMWARE_SVGA,
 QEMU_CAPS_DEVICE_USB_SERIAL,
 QEMU_CAPS_DEVICE_USB_NET,
+QEMU_CAPS_DEVICE_USB_KBD,
 QEMU_CAPS_DEVICE_PCI_BRIDGE);
 DO_TEST(qemu-kvm-0.12.3, 12003, 1, 0,
 QEMU_CAPS_VNC_COLON,
@@ -515,6 +516,7 @@ mymain(void

Re: [libvirt] [PATCH v6 1/6] conf: Add a keyboard input device type

2014-02-16 Thread Li Zhang

On 2014年02月14日 17:36, Ján Tomko wrote:

On 02/14/2014 10:02 AM, Li Zhang wrote:

On 2014年02月14日 00:39, Daniel P. Berrange wrote:

On Thu, Feb 13, 2014 at 04:48:21PM +0800, Li Zhang wrote:


@@ -12422,10 +12426,12 @@ virDomainDefParseXML(xmlDocPtr xml,
* XXX will this be true for other virt types ? */
   if ((STREQ(def-os.type, hvm) 
input-bus == VIR_DOMAIN_INPUT_BUS_PS2 
- input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE) ||
+ (input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
+  input-type == VIR_DOMAIN_INPUT_TYPE_KBD)) ||
   (STRNEQ(def-os.type, hvm) 
input-bus == VIR_DOMAIN_INPUT_BUS_XEN 
- input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE)) {
+ (input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
+  input-type == VIR_DOMAIN_INPUT_TYPE_KBD))) {
   virDomainInputDefFree(input);
   continue;

Later on in this function there is

  /* If graphics are enabled, there's an implicit PS2 mouse */
  if (def-ngraphics  0) {
  virDomainInputDefPtr input;

  if (VIR_ALLOC(input)  0) {
  goto error;
  }
  if (STREQ(def-os.type, hvm)) {
  input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
  input-bus = VIR_DOMAIN_INPUT_BUS_PS2;
  } else {
  input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
  input-bus = VIR_DOMAIN_INPUT_BUS_XEN;
  }

  if (VIR_REALLOC_N(def-inputs, def-ninputs + 1)  0) {
  virDomainInputDefFree(input);
  goto error;
  }
  def-inputs[def-ninputs] = input;
  def-ninputs++;
  }


which needs to take care of keyboards too now.

And some more similar logic in virDomainDefFormatInternal
which needs updating

I have add the keyboard device in this function in this version [3/6].

But Jan suggested to remove it from  virDomainDefFormatInternal in v5.
Because it would make the XML unreadable by older libvirtd that didn't know
the keyboard input type.


Sorry about that,

it seems we only care about XML to be readable by older libvirt if
virDomainDefFormat* is called with the
VIR_DOMAIN_XML_MIGRATABLE flag, so we can safely format it when this flag is
not set.


I see. I will add this device when this flag is not set.  :)



Jan



--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

[libvirt] [PATCH v8 0/7] Support keyboard device

2014-02-16 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

This patchset is to add keyboard input device.

For PPC64, it doesn't support a default keyboard device when the graphic
is enabled. Libvirt supports QEMU command line as -device VGA which
won't create any keyboard device for it. So it requires libvirt to add
a default USB keyboard device for it.

This patchset is to add keyboard input device and a default USB keyboard
for PPC64.

The related discussion in QEMU community:
http://lists.nongnu.org/archive/html/qemu-devel/2013-11/msg01734.html

Li Zhang (7):
  conf: Add a keyboard input device type
  conf: Add one interface to add default input devices
  conf: Remove the implicit PS2 mouse for non-X86 platforms and 
 add an implicit PS2 keyboard device for X86 platforms.
  qemu_cap: Add USB keyboard capability
  qemu: format qemu command line for USB keyboard
  xen: format xen command line for USB keyboard
  Add a default USB keyboard and USB mouse for PPC64

 v8 - v7:
   * Add USB keyboard output XML format when VIR_DOMAIN_XML_MIGRATABLE isn't 
set. (Daniel P.  Jan Tomko)
   * Fix test cases because of XML changes.

 v7 - v6:
   * Corret indention errors in code. (Jan Tomko)
   * Correct make check error in xen driver. (Jan Tomko)
   * Split 5/6 to 2 parts, qemu and xen. (Jan Tomko)
 v6 - v5:
   * Change kbd to keyboard, and correct -usbdevice parameter.
   * Remove implicit PS/2 keyboard output in XML in case
 older libvirtd can read it. (Jan Tomko)
   * Remove implicit keyboard for XEN to make it safer.

 v5 - v4:
   * Add PS/2 KBD definition in XML file. (Daniel.P.Berrange)
   * Allow PS/2 KBD devices and set KBD default bus as PS2 for X86, 
 USB for non-x86. (Daniel.P.Berrange)
   * Add an implicit PS/2 KBD as PS/2 mouse. (Danniel.P.Berrange)

 v4 - v3:
   * Don't remove PS2 mouse device for other virtualization drivers (Jan Tomko).

 v3 - v2:
   * Handle the KBD device type in xen and QEMU driver. (Daniel.P.Berrange)
   * Remove PS2 mouse device for non-X86 platforms.
   * Move virDomainDefMaybeAddInput to a new patch. (Jan Tomko)
   * Replace VIR_REALLOC_N with VIR_APPEND_ELEMENT. (Jan Tomoko)
   * Fix several typos. (Jan Tomoko)
   * Add a virReportError when QEMU_CAPS_DEVICE_USB_KBD can't be gotten. (Jan 
Tomoko)

 v2 - v1:
   * change ifs to switch clause.
   * reconstruct the patches

 docs/schemas/domaincommon.rng  |   1 +
 src/conf/domain_conf.c | 116 ++---
 src/conf/domain_conf.h |   5 +
 src/libvirt_private.syms   |   1 +
 src/qemu/qemu_capabilities.c   |   3 +
 src/qemu/qemu_capabilities.h   |   1 +
 src/qemu/qemu_command.c|  41 ++--
 src/qemu/qemu_domain.c |  23 +++-
 src/util/virarch.h |   2 +
 src/xenxs/xen_sxpr.c   |  27 +++--
 src/xenxs/xen_xm.c |  30 --
 tests/qemucapabilitiesdata/caps_1.2.2-1.caps   |   1 +
 tests/qemucapabilitiesdata/caps_1.3.1-1.caps   |   1 +
 tests/qemucapabilitiesdata/caps_1.4.2-1.caps   |   1 +
 tests/qemucapabilitiesdata/caps_1.5.3-1.caps   |   1 +
 tests/qemucapabilitiesdata/caps_1.6.0-1.caps   |   1 +
 tests/qemucapabilitiesdata/caps_1.6.50-1.caps  |   1 +
 tests/qemuhelptest.c   |   8 ++
 ...qemuhotplug-console-compat-2+console-virtio.xml |   1 +
 .../qemuxml2argv-console-compat-2.xml  |   1 +
 .../qemuxml2argv-graphics-listen-network.xml   |   1 +
 .../qemuxml2argv-graphics-listen-network2.xml  |   1 +
 .../qemuxml2argv-graphics-sdl-fullscreen.xml   |   1 +
 .../qemuxml2argvdata/qemuxml2argv-graphics-sdl.xml |   1 +
 .../qemuxml2argv-graphics-spice-compression.xml|   1 +
 .../qemuxml2argv-graphics-spice-qxl-vga.xml|   1 +
 .../qemuxml2argv-graphics-spice-timeout.xml|   2 +
 .../qemuxml2argv-graphics-spice.xml|   1 +
 .../qemuxml2argv-graphics-vnc-policy.xml   |   1 +
 .../qemuxml2argv-graphics-vnc-sasl.xml |   1 +
 .../qemuxml2argv-graphics-vnc-socket.xml   |   1 +
 .../qemuxml2argv-graphics-vnc-tls.xml  |   1 +
 .../qemuxml2argv-graphics-vnc-websocket.xml|   1 +
 .../qemuxml2argvdata/qemuxml2argv-graphics-vnc.xml |   1 +
 tests/qemuxml2argvdata/qemuxml2argv-input-xen.xml  |   1 +
 .../qemuxml2argv-net-bandwidth.xml |   1 +
 tests/qemuxml2argvdata/qemuxml2argv-pci-bridge.xml |   1 +
 .../qemuxml2argvdata/qemuxml2argv-pseries-disk.xml |   3 +-
 .../qemuxml2argv-pseries-usb-kbd.args  |   9 ++
 .../qemuxml2argv-pseries-usb-kbd.xml   |  19 
 .../qemuxml2argv-serial-spiceport.xml  |   1 +
 tests/qemuxml2argvtest.c   |   3 +
 .../qemuxml2xmlout-graphics-listen-network2.xml|   1

[libvirt] [PATCH v8 2/7] conf: Add one interface to add default input devices

2014-02-16 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

This patch is to add one new interface to add input devices.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/conf/domain_conf.c   | 27 +++
 src/conf/domain_conf.h   |  4 
 src/libvirt_private.syms |  1 +
 3 files changed, 32 insertions(+)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 2c6233f..3301398 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -11053,6 +11053,33 @@ virDomainDefMaybeAddController(virDomainDefPtr def,
 return 0;
 }
 
+int
+virDomainDefMaybeAddInput(virDomainDefPtr def,
+   int type,
+   int bus)
+{
+size_t i;
+virDomainInputDefPtr input;
+
+for (i = 0; i  def-ninputs; i++) {
+if (def-inputs[i]-type == type 
+def-inputs[i]-bus == bus)
+return 0;
+}
+
+if (VIR_ALLOC(input)  0)
+return -1;
+
+input-type = type;
+input-bus = bus;
+
+if (VIR_APPEND_ELEMENT(def-inputs, def-ninputs, input)  0) {
+VIR_FREE(input);
+return -1;
+}
+
+return 0;
+}
 
 /* Parse a memory element located at XPATH within CTXT, and store the
  * result into MEM.  If REQUIRED, then the value must exist;
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 2dc259d..009df13 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -2806,6 +2806,10 @@ virDomainDefMaybeAddController(virDomainDefPtr def,
int type,
int idx,
int model);
+int
+virDomainDefMaybeAddInput(virDomainDefPtr def,
+  int type,
+  int bus);
 
 char *virDomainDefGetDefaultEmulator(virDomainDefPtr def, virCapsPtr caps);
 
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 67d20ed..e560a21 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -165,6 +165,7 @@ virDomainDefGenSecurityLabelDef;
 virDomainDefGetDefaultEmulator;
 virDomainDefGetSecurityLabelDef;
 virDomainDefMaybeAddController;
+virDomainDefMaybeAddInput;
 virDomainDefNew;
 virDomainDefParseFile;
 virDomainDefParseNode;
-- 
1.8.2.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH v8 6/7] xen: format xen command line for USB keyboard

2014-02-16 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

This patch is to format xen command line for USB keyboard

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/xenxs/xen_sxpr.c | 27 +++
 src/xenxs/xen_xm.c   | 30 ++
 2 files changed, 41 insertions(+), 16 deletions(-)

diff --git a/src/xenxs/xen_sxpr.c b/src/xenxs/xen_sxpr.c
index d514725..d366b1b 100644
--- a/src/xenxs/xen_sxpr.c
+++ b/src/xenxs/xen_sxpr.c
@@ -724,21 +724,23 @@ xenParseSxprUSB(virDomainDefPtr def,
 tmp = sexpr_node(node, usbdevice);
 if (tmp  *tmp) {
 if (STREQ(tmp, tablet) ||
-STREQ(tmp, mouse)) {
+STREQ(tmp, mouse) ||
+STREQ(tmp, keyboard)) {
 virDomainInputDefPtr input;
 if (VIR_ALLOC(input)  0)
 goto error;
 input-bus = VIR_DOMAIN_INPUT_BUS_USB;
 if (STREQ(tmp, tablet))
 input-type = VIR_DOMAIN_INPUT_TYPE_TABLET;
-else
+else if (STREQ(tmp, mouse))
 input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
+else
+input-type = VIR_DOMAIN_INPUT_TYPE_KBD;
 
-if (VIR_REALLOC_N(def-inputs, def-ninputs+1)  0) {
+if (VIR_APPEND_ELEMENT(def-inputs, def-ninputs, input)  
0) {
 VIR_FREE(input);
 goto error;
 }
-def-inputs[def-ninputs++] = input;
 } else {
 /* XXX Handle other non-input USB devices later */
 }
@@ -2144,15 +2146,24 @@ xenFormatSxprInput(virDomainInputDefPtr input,
 return 0;
 
 if (input-type != VIR_DOMAIN_INPUT_TYPE_MOUSE 
-input-type != VIR_DOMAIN_INPUT_TYPE_TABLET) {
+input-type != VIR_DOMAIN_INPUT_TYPE_TABLET 
+input-type != VIR_DOMAIN_INPUT_TYPE_KBD) {
 virReportError(VIR_ERR_INTERNAL_ERROR,
_(unexpected input type %d), input-type);
 return -1;
 }
 
-virBufferAsprintf(buf, (usbdevice %s),
-  input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ?
-  mouse : tablet);
+switch (input-type) {
+case VIR_DOMAIN_INPUT_TYPE_MOUSE:
+virBufferAsprintf(buf, (usbdevice %s), mouse);
+break;
+case VIR_DOMAIN_INPUT_TYPE_TABLET:
+virBufferAsprintf(buf, (usbdevice %s), tablet);
+break;
+case VIR_DOMAIN_INPUT_TYPE_KBD:
+virBufferAsprintf(buf, (usbdevice %s), keyboard);
+break;
+}
 
 return 0;
 }
diff --git a/src/xenxs/xen_xm.c b/src/xenxs/xen_xm.c
index 5e89876..3a57547 100644
--- a/src/xenxs/xen_xm.c
+++ b/src/xenxs/xen_xm.c
@@ -886,14 +886,18 @@ xenParseXM(virConfPtr conf, int xendConfigVersion,
 goto cleanup;
 if (str 
 (STREQ(str, tablet) ||
- STREQ(str, mouse))) {
+ STREQ(str, mouse) ||
+ STREQ(str, keyboard))) {
 virDomainInputDefPtr input;
 if (VIR_ALLOC(input)  0)
 goto cleanup;
 input-bus = VIR_DOMAIN_INPUT_BUS_USB;
-input-type = STREQ(str, tablet) ?
-VIR_DOMAIN_INPUT_TYPE_TABLET :
-VIR_DOMAIN_INPUT_TYPE_MOUSE;
+if (STREQ(str, mouse))
+input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
+else if (STREQ(str, tablet))
+input-type = VIR_DOMAIN_INPUT_TYPE_TABLET;
+else if (STREQ(str, keyboard))
+input-type = VIR_DOMAIN_INPUT_TYPE_KBD;
 if (VIR_ALLOC_N(def-inputs, 1)  0) {
 virDomainInputDefFree(input);
 goto cleanup;
@@ -1746,10 +1750,20 @@ virConfPtr xenFormatXM(virConnectPtr conn,
 if (def-inputs[i]-bus == VIR_DOMAIN_INPUT_BUS_USB) {
 if (xenXMConfigSetInt(conf, usb, 1)  0)
 goto cleanup;
-if (xenXMConfigSetString(conf, usbdevice,
- def-inputs[i]-type == 
VIR_DOMAIN_INPUT_TYPE_MOUSE ?
- mouse : tablet)  0)
-goto cleanup;
+switch (def-inputs[i]-type) {
+case VIR_DOMAIN_INPUT_TYPE_MOUSE:
+if (xenXMConfigSetString(conf, usbdevice, mouse)  
0)
+goto cleanup;
+break;
+case VIR_DOMAIN_INPUT_TYPE_TABLET:
+if (xenXMConfigSetString(conf, usbdevice, tablet) 
 0)
+goto cleanup;
+break;
+case VIR_DOMAIN_INPUT_TYPE_KBD:
+if (xenXMConfigSetString(conf, usbdevice, 
keyboard)  0

[libvirt] [PATCH v8 3/7] conf: Remove the implicit PS2 mouse for non-X86 platforms and add an implicit PS2 keyboard device for X86 platforms.

2014-02-16 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

PS2 device only works for X86 platform, other platforms may need
USB mouse. Athough it doesn't influence the QEMU command line, but
it's not right to add one PS2 mouse for non-X86 platform.

What's more, PS2 keyboard can be supported for X86.

So, this patch is to remove PS2 mouse for non-x86 platforms and also add
an implicit PS2 keyboard device for X86.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/conf/domain_conf.c | 73 --
 src/util/virarch.h |  2 +
 ...qemuhotplug-console-compat-2+console-virtio.xml |  1 +
 .../qemuxml2argv-console-compat-2.xml  |  1 +
 .../qemuxml2argv-graphics-listen-network.xml   |  1 +
 .../qemuxml2argv-graphics-listen-network2.xml  |  1 +
 .../qemuxml2argv-graphics-sdl-fullscreen.xml   |  1 +
 .../qemuxml2argvdata/qemuxml2argv-graphics-sdl.xml |  1 +
 .../qemuxml2argv-graphics-spice-compression.xml|  1 +
 .../qemuxml2argv-graphics-spice-qxl-vga.xml|  1 +
 .../qemuxml2argv-graphics-spice-timeout.xml|  2 +
 .../qemuxml2argv-graphics-spice.xml|  1 +
 .../qemuxml2argv-graphics-vnc-policy.xml   |  1 +
 .../qemuxml2argv-graphics-vnc-sasl.xml |  1 +
 .../qemuxml2argv-graphics-vnc-socket.xml   |  1 +
 .../qemuxml2argv-graphics-vnc-tls.xml  |  1 +
 .../qemuxml2argv-graphics-vnc-websocket.xml|  1 +
 .../qemuxml2argvdata/qemuxml2argv-graphics-vnc.xml |  1 +
 tests/qemuxml2argvdata/qemuxml2argv-input-xen.xml  |  1 +
 .../qemuxml2argv-net-bandwidth.xml |  1 +
 tests/qemuxml2argvdata/qemuxml2argv-pci-bridge.xml |  1 +
 .../qemuxml2argvdata/qemuxml2argv-pseries-disk.xml |  1 -
 .../qemuxml2argv-serial-spiceport.xml  |  1 +
 .../qemuxml2xmlout-graphics-listen-network2.xml|  1 +
 .../qemuxml2xmlout-graphics-spice-timeout.xml  |  1 +
 tests/vmx2xmldata/vmx2xml-graphics-vnc.xml |  1 +
 26 files changed, 66 insertions(+), 34 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 3301398..10c753c 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -7773,7 +7773,7 @@ error:
 
 /* Parse the XML definition for an input device */
 static virDomainInputDefPtr
-virDomainInputDefParseXML(const char *ostype,
+virDomainInputDefParseXML(const virDomainDef *dom,
   xmlNodePtr node,
   unsigned int flags)
 {
@@ -7806,7 +7806,7 @@ virDomainInputDefParseXML(const char *ostype,
 goto error;
 }
 
-if (STREQ(ostype, hvm)) {
+if (STREQ(dom-os.type, hvm)) {
 if (def-bus == VIR_DOMAIN_INPUT_BUS_PS2  /* PS2 can be mouse or 
keyboard */
 !(def-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
 def-type == VIR_DOMAIN_INPUT_TYPE_KBD)) {
@@ -7836,9 +7836,10 @@ virDomainInputDefParseXML(const char *ostype,
 }
 }
 } else {
-if (STREQ(ostype, hvm)) {
-if (def-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
-def-type == VIR_DOMAIN_INPUT_TYPE_KBD)
+if (STREQ(dom-os.type, hvm)) {
+if ((def-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
+def-type == VIR_DOMAIN_INPUT_TYPE_KBD) 
+ARCH_IS_X86(dom-os.arch))
 def-bus = VIR_DOMAIN_INPUT_BUS_PS2;
 else
 def-bus = VIR_DOMAIN_INPUT_BUS_USB;
@@ -9860,7 +9861,7 @@ virDomainDeviceDefParse(const char *xmlStr,
 goto error;
 break;
 case VIR_DOMAIN_DEVICE_INPUT:
-if (!(dev-data.input = virDomainInputDefParseXML(def-os.type,
+if (!(dev-data.input = virDomainInputDefParseXML(def,
   node, flags)))
 goto error;
 break;
@@ -12443,7 +12444,7 @@ virDomainDefParseXML(xmlDocPtr xml,
 goto error;
 
 for (i = 0; i  n; i++) {
-virDomainInputDefPtr input = virDomainInputDefParseXML(def-os.type,
+virDomainInputDefPtr input = virDomainInputDefParseXML(def,
nodes[i],
flags);
 if (!input)
@@ -12495,29 +12496,27 @@ virDomainDefParseXML(xmlDocPtr xml,
 VIR_FREE(nodes);
 
 /* If graphics are enabled, there's an implicit PS2 mouse */
-if (def-ngraphics  0) {
-virDomainInputDefPtr input;
+if (def-ngraphics  0 
+ARCH_IS_X86(def-os.arch)) {
+int input_bus = VIR_DOMAIN_INPUT_BUS_XEN;
 
-if (VIR_ALLOC(input)  0) {
-goto error;
-}
-if (STREQ(def-os.type, hvm)) {
-input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
-input-bus = VIR_DOMAIN_INPUT_BUS_PS2;
-} else {
-input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
-input-bus = VIR_DOMAIN_INPUT_BUS_XEN

[libvirt] [PATCH v8 1/7] conf: Add a keyboard input device type

2014-02-16 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

There is no keyboard for non-x86 platforms when graphics are enabled.
It's preferred to add one USB keyboard.

This patch is to add keyboard input device type.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 docs/schemas/domaincommon.rng |  1 +
 src/conf/domain_conf.c| 20 +---
 src/conf/domain_conf.h|  1 +
 3 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index c1efcd2..601e7ac 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -3269,6 +3269,7 @@
 choice
   valuetablet/value
   valuemouse/value
+  valuekeyboard/value
 /choice
   /attribute
   optional
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index fc9615f..2c6233f 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -506,7 +506,8 @@ VIR_ENUM_IMPL(virDomainVideo, VIR_DOMAIN_VIDEO_TYPE_LAST,
 
 VIR_ENUM_IMPL(virDomainInput, VIR_DOMAIN_INPUT_TYPE_LAST,
   mouse,
-  tablet)
+  tablet,
+  keyboard)
 
 VIR_ENUM_IMPL(virDomainInputBus, VIR_DOMAIN_INPUT_BUS_LAST,
   ps2,
@@ -7806,8 +7807,9 @@ virDomainInputDefParseXML(const char *ostype,
 }
 
 if (STREQ(ostype, hvm)) {
-if (def-bus == VIR_DOMAIN_INPUT_BUS_PS2  /* Only allow mouse 
for ps2 */
-def-type != VIR_DOMAIN_INPUT_TYPE_MOUSE) {
+if (def-bus == VIR_DOMAIN_INPUT_BUS_PS2  /* PS2 can be mouse or 
keyboard */
+!(def-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
+def-type == VIR_DOMAIN_INPUT_TYPE_KBD)) {
 virReportError(VIR_ERR_INTERNAL_ERROR,
_(ps2 bus does not support %s input device),
type);
@@ -7825,7 +7827,8 @@ virDomainInputDefParseXML(const char *ostype,
_(unsupported input bus %s),
bus);
 }
-if (def-type != VIR_DOMAIN_INPUT_TYPE_MOUSE) {
+if (def-type != VIR_DOMAIN_INPUT_TYPE_MOUSE 
+def-type != VIR_DOMAIN_INPUT_TYPE_KBD) {
 virReportError(VIR_ERR_INTERNAL_ERROR,
_(xen bus does not support %s input device),
type);
@@ -7834,7 +7837,8 @@ virDomainInputDefParseXML(const char *ostype,
 }
 } else {
 if (STREQ(ostype, hvm)) {
-if (def-type == VIR_DOMAIN_INPUT_TYPE_MOUSE)
+if (def-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
+def-type == VIR_DOMAIN_INPUT_TYPE_KBD)
 def-bus = VIR_DOMAIN_INPUT_BUS_PS2;
 else
 def-bus = VIR_DOMAIN_INPUT_BUS_USB;
@@ -12432,10 +12436,12 @@ virDomainDefParseXML(xmlDocPtr xml,
  * XXX will this be true for other virt types ? */
 if ((STREQ(def-os.type, hvm) 
  input-bus == VIR_DOMAIN_INPUT_BUS_PS2 
- input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE) ||
+ (input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
+  input-type == VIR_DOMAIN_INPUT_TYPE_KBD)) ||
 (STRNEQ(def-os.type, hvm) 
  input-bus == VIR_DOMAIN_INPUT_BUS_XEN 
- input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE)) {
+ (input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
+  input-type == VIR_DOMAIN_INPUT_TYPE_KBD))) {
 virDomainInputDefFree(input);
 continue;
 }
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 24cbec3..2dc259d 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -1239,6 +1239,7 @@ struct _virDomainTPMDef {
 enum virDomainInputType {
 VIR_DOMAIN_INPUT_TYPE_MOUSE,
 VIR_DOMAIN_INPUT_TYPE_TABLET,
+VIR_DOMAIN_INPUT_TYPE_KBD,
 
 VIR_DOMAIN_INPUT_TYPE_LAST
 };
-- 
1.8.2.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH v8 7/7] Add a default USB keyboard and USB mouse for PPC64

2014-02-16 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

There is no keyboard working on PPC64 and PS2 mouse is only for X86
when graphics are enabled. It needs to add a USB keyboard and USB mouse for 
PPC64.

This patch is to add a USB keyboard and USB mouse when graphics are enabled.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/qemu/qemu_domain.c | 23 +-
 .../qemuxml2argvdata/qemuxml2argv-pseries-disk.xml |  2 ++
 2 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index a665061..7f4ff0e 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -691,6 +691,8 @@ qemuDomainDefPostParse(virDomainDefPtr def,
 bool addPCIRoot = false;
 bool addPCIeRoot = false;
 bool addDefaultMemballoon = true;
+bool addDefaultUSBKBD = false;
+bool addDefaultUSBMouse = false;
 
 /* check for emulator and create a default one if needed */
 if (!def-emulator 
@@ -732,9 +734,14 @@ qemuDomainDefPostParse(virDomainDefPtr def,
addDefaultMemballoon = false;
break;
 
+case VIR_ARCH_PPC64:
+addPCIRoot = true;
+addDefaultUSBKBD = true;
+addDefaultUSBMouse = true;
+break;
+
 case VIR_ARCH_ALPHA:
 case VIR_ARCH_PPC:
-case VIR_ARCH_PPC64:
 case VIR_ARCH_PPCEMB:
 case VIR_ARCH_SH4:
 case VIR_ARCH_SH4EB:
@@ -787,6 +794,20 @@ qemuDomainDefPostParse(virDomainDefPtr def,
 def-memballoon = memballoon;
 }
 
+if (addDefaultUSBKBD 
+def-ngraphics  0 
+virDomainDefMaybeAddInput(def,
+  VIR_DOMAIN_INPUT_TYPE_KBD,
+  VIR_DOMAIN_INPUT_BUS_USB)  0)
+return -1;
+
+if (addDefaultUSBMouse 
+def-ngraphics  0 
+virDomainDefMaybeAddInput(def,
+  VIR_DOMAIN_INPUT_TYPE_MOUSE,
+  VIR_DOMAIN_INPUT_BUS_USB)  0)
+return -1;
+
 return 0;
 }
 
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml 
b/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml
index 8dde776..64b70f3 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml
@@ -30,6 +30,8 @@
 controller type='usb' index='0'/
 controller type='scsi' index='0'/
 controller type='pci' index='0' model='pci-root'/
+input type='keyboard' bus='usb'/
+input type='mouse' bus='usb'/
 graphics type='sdl'/
 video
   model type='cirrus' vram='9216' heads='1'/
-- 
1.8.2.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH v8 5/7] qemu: format qemu command line for USB keyboard

2014-02-16 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

This patch is to format qemu command line for USB keyboard
and add test cases for it.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/qemu/qemu_command.c| 41 --
 .../qemuxml2argv-pseries-usb-kbd.args  |  9 +
 .../qemuxml2argv-pseries-usb-kbd.xml   | 19 ++
 tests/qemuxml2argvtest.c   |  3 ++
 4 files changed, 62 insertions(+), 10 deletions(-)
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.xml

diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index bb8756f..22ba441 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -5306,9 +5306,19 @@ qemuBuildUSBInputDevStr(virDomainDefPtr def,
 {
 virBuffer buf = VIR_BUFFER_INITIALIZER;
 
-virBufferAsprintf(buf, %s,id=%s,
-  dev-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ?
-  usb-mouse : usb-tablet, dev-info.alias);
+switch (dev-type) {
+case VIR_DOMAIN_INPUT_TYPE_MOUSE:
+virBufferAsprintf(buf, usb-mouse,id=%s, dev-info.alias);
+break;
+case VIR_DOMAIN_INPUT_TYPE_TABLET:
+virBufferAsprintf(buf, usb-tablet,id=%s, dev-info.alias);
+break;
+case VIR_DOMAIN_INPUT_TYPE_KBD:
+if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_USB_KBD))
+goto error;
+virBufferAsprintf(buf, usb-kbd,id=%s, dev-info.alias);
+break;
+}
 
 if (qemuBuildDeviceAddressStr(buf, def, dev-info, qemuCaps)  0)
 goto error;
@@ -9044,9 +9054,17 @@ qemuBuildCommandLine(virConnectPtr conn,
 virCommandAddArg(cmd, optstr);
 VIR_FREE(optstr);
 } else {
-virCommandAddArgList(cmd, -usbdevice,
- input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE
- ? mouse : tablet, NULL);
+switch (input-type) {
+case VIR_DOMAIN_INPUT_TYPE_MOUSE:
+virCommandAddArgList(cmd, -usbdevice, mouse, NULL);
+break;
+case VIR_DOMAIN_INPUT_TYPE_TABLET:
+virCommandAddArgList(cmd, -usbdevice, tablet, 
NULL);
+break;
+case VIR_DOMAIN_INPUT_TYPE_KBD:
+virCommandAddArgList(cmd, -usbdevice, keyboard, 
NULL);
+break;
+}
 }
 }
 }
@@ -11720,20 +11738,23 @@ qemuParseCommandLine(virCapsPtr qemuCaps,
 } else if (STREQ(arg, -usbdevice)) {
 WANT_VALUE();
 if (STREQ(val, tablet) ||
-STREQ(val, mouse)) {
+STREQ(val, mouse) ||
+STREQ(val, keyboard)) {
 virDomainInputDefPtr input;
 if (VIR_ALLOC(input)  0)
 goto error;
 input-bus = VIR_DOMAIN_INPUT_BUS_USB;
 if (STREQ(val, tablet))
 input-type = VIR_DOMAIN_INPUT_TYPE_TABLET;
-else
+else if (STREQ(val, mouse))
 input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
-if (VIR_REALLOC_N(def-inputs, def-ninputs+1)  0) {
+else
+input-type = VIR_DOMAIN_INPUT_TYPE_KBD;
+
+if (VIR_APPEND_ELEMENT(def-inputs, def-ninputs, input)  0) {
 virDomainInputDefFree(input);
 goto error;
 }
-def-inputs[def-ninputs++] = input;
 } else if (STRPREFIX(val, disk:)) {
 if (VIR_ALLOC(disk)  0)
 goto error;
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args 
b/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args
new file mode 100644
index 000..373c72a
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args
@@ -0,0 +1,9 @@
+LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \
+/usr/bin/qemu-system-ppc64 -S -M pseries -m 512 -smp 1 \
+-nographic -nodefconfig -nodefaults \
+-chardev socket,id=charmonitor,path=/tmp/test-monitor,server,nowait \
+-mon chardev=charmonitor,id=monitor,mode=readline -no-acpi -boot c \
+-device pci-ohci,id=usb,bus=pci,addr=0x1 \
+-chardev pty,id=charserial0 \
+-device spapr-vty,chardev=charserial0,reg=0x3000 \
+-device usb-kbd,id=input0
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.xml 
b/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.xml
new file mode 100644
index 000..5bd4c37
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.xml
@@ -0,0 +1,19 @@
+domain type='qemu'
+  nameQEMUGuest1/name
+  uuid1ccfd97d-5eb4-478a-bbe6-88d254c16db7/uuid
+  memory unit='KiB'524288/memory
+  vcpu

[libvirt] [PATCH v8 4/7] qemu_cap: Add USB keyboard capability

2014-02-16 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

QEMU can support USB keyboard but libvirt haven't supportted it yet.
This patch is to add USB keyboard capabilities and test cases.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/qemu/qemu_capabilities.c  | 3 +++
 src/qemu/qemu_capabilities.h  | 1 +
 tests/qemucapabilitiesdata/caps_1.2.2-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.3.1-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.4.2-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.5.3-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.6.0-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.6.50-1.caps | 1 +
 tests/qemuhelptest.c  | 8 
 9 files changed, 18 insertions(+)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index e7d953a..d618b3f 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -249,6 +249,8 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST,
   enable-fips,
   spice-file-xfer-disable,
   spiceport,
+
+  usb-kbd, /* 165 */
 );
 
 struct _virQEMUCaps {
@@ -1403,6 +1405,7 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = {
 { virtio-mmio, QEMU_CAPS_DEVICE_VIRTIO_MMIO },
 { ich9-intel-hda, QEMU_CAPS_DEVICE_ICH9_INTEL_HDA },
 { pvpanic, QEMU_CAPS_DEVICE_PANIC },
+{ usb-kbd, QEMU_CAPS_DEVICE_USB_KBD },
 };
 
 static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsVirtioBlk[] = {
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
index a4eecb6..b5445e7 100644
--- a/src/qemu/qemu_capabilities.h
+++ b/src/qemu/qemu_capabilities.h
@@ -203,6 +203,7 @@ enum virQEMUCapsFlags {
 QEMU_CAPS_ENABLE_FIPS= 162, /* -enable-fips */
 QEMU_CAPS_SPICE_FILE_XFER_DISABLE = 163, /* -spice disable-agent-file-xfer 
*/
 QEMU_CAPS_CHARDEV_SPICEPORT  = 164, /* -chardev spiceport */
+QEMU_CAPS_DEVICE_USB_KBD = 165, /* -device usb-kbd */
 
 QEMU_CAPS_LAST,   /* this must always be the last item */
 };
diff --git a/tests/qemucapabilitiesdata/caps_1.2.2-1.caps 
b/tests/qemucapabilitiesdata/caps_1.2.2-1.caps
index c3ae814..436cecd 100644
--- a/tests/qemucapabilitiesdata/caps_1.2.2-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.2.2-1.caps
@@ -113,4 +113,5 @@
 flag name='usb-storage.removable'/
 flag name='kvm-pit-lost-tick-policy'/
 flag name='enable-fips'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.3.1-1.caps 
b/tests/qemucapabilitiesdata/caps_1.3.1-1.caps
index da15d8b..6b4a8f0 100644
--- a/tests/qemucapabilitiesdata/caps_1.3.1-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.3.1-1.caps
@@ -126,4 +126,5 @@
 flag name='usb-storage'/
 flag name='usb-storage.removable'/
 flag name='kvm-pit-lost-tick-policy'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.4.2-1.caps 
b/tests/qemucapabilitiesdata/caps_1.4.2-1.caps
index c419068..e3d0047 100644
--- a/tests/qemucapabilitiesdata/caps_1.4.2-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.4.2-1.caps
@@ -127,4 +127,5 @@
 flag name='usb-storage.removable'/
 flag name='ich9-intel-hda'/
 flag name='kvm-pit-lost-tick-policy'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.5.3-1.caps 
b/tests/qemucapabilitiesdata/caps_1.5.3-1.caps
index adf8531..01b4d27 100644
--- a/tests/qemucapabilitiesdata/caps_1.5.3-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.5.3-1.caps
@@ -135,4 +135,5 @@
 flag name='pvpanic'/
 flag name='reboot-timeout'/
 flag name='spiceport'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.6.0-1.caps 
b/tests/qemucapabilitiesdata/caps_1.6.0-1.caps
index e6b2f76..597f873 100644
--- a/tests/qemucapabilitiesdata/caps_1.6.0-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.6.0-1.caps
@@ -141,4 +141,5 @@
 flag name='enable-fips'/
 flag name='spice-file-xfer-disable'/
 flag name='spiceport'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.6.50-1.caps 
b/tests/qemucapabilitiesdata/caps_1.6.50-1.caps
index e6b8117..0c1dd87 100644
--- a/tests/qemucapabilitiesdata/caps_1.6.50-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.6.50-1.caps
@@ -139,4 +139,5 @@
 flag name='reboot-timeout'/
 flag name='spice-file-xfer-disable'/
 flag name='spiceport'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemuhelptest.c b/tests/qemuhelptest.c
index 3628fbe..6e0a5f8 100644
--- a/tests/qemuhelptest.c
+++ b/tests/qemuhelptest.c
@@ -403,6 +403,7 @@ mymain(void)
 QEMU_CAPS_DEVICE_VMWARE_SVGA,
 QEMU_CAPS_DEVICE_USB_SERIAL,
 QEMU_CAPS_DEVICE_USB_NET,
+QEMU_CAPS_DEVICE_USB_KBD,
 QEMU_CAPS_DEVICE_PCI_BRIDGE);
 DO_TEST(qemu-kvm-0.12.3, 12003, 1, 0,
 QEMU_CAPS_VNC_COLON,
@@ -515,6 +516,7 @@ mymain(void

[libvirt] [PATCH v7 4/7] qemu_cap: Add USB keyboard capability

2014-02-14 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

QEMU can support USB keyboard but libvirt haven't supportted it yet.
This patch is to add USB keyboard capabilities and test cases.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/qemu/qemu_capabilities.c  | 3 +++
 src/qemu/qemu_capabilities.h  | 1 +
 tests/qemucapabilitiesdata/caps_1.2.2-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.3.1-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.4.2-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.5.3-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.6.0-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.6.50-1.caps | 1 +
 tests/qemuhelptest.c  | 8 
 9 files changed, 18 insertions(+)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index e7d953a..d618b3f 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -249,6 +249,8 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST,
   enable-fips,
   spice-file-xfer-disable,
   spiceport,
+
+  usb-kbd, /* 165 */
 );
 
 struct _virQEMUCaps {
@@ -1403,6 +1405,7 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = {
 { virtio-mmio, QEMU_CAPS_DEVICE_VIRTIO_MMIO },
 { ich9-intel-hda, QEMU_CAPS_DEVICE_ICH9_INTEL_HDA },
 { pvpanic, QEMU_CAPS_DEVICE_PANIC },
+{ usb-kbd, QEMU_CAPS_DEVICE_USB_KBD },
 };
 
 static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsVirtioBlk[] = {
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
index a4eecb6..b5445e7 100644
--- a/src/qemu/qemu_capabilities.h
+++ b/src/qemu/qemu_capabilities.h
@@ -203,6 +203,7 @@ enum virQEMUCapsFlags {
 QEMU_CAPS_ENABLE_FIPS= 162, /* -enable-fips */
 QEMU_CAPS_SPICE_FILE_XFER_DISABLE = 163, /* -spice disable-agent-file-xfer 
*/
 QEMU_CAPS_CHARDEV_SPICEPORT  = 164, /* -chardev spiceport */
+QEMU_CAPS_DEVICE_USB_KBD = 165, /* -device usb-kbd */
 
 QEMU_CAPS_LAST,   /* this must always be the last item */
 };
diff --git a/tests/qemucapabilitiesdata/caps_1.2.2-1.caps 
b/tests/qemucapabilitiesdata/caps_1.2.2-1.caps
index c3ae814..436cecd 100644
--- a/tests/qemucapabilitiesdata/caps_1.2.2-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.2.2-1.caps
@@ -113,4 +113,5 @@
 flag name='usb-storage.removable'/
 flag name='kvm-pit-lost-tick-policy'/
 flag name='enable-fips'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.3.1-1.caps 
b/tests/qemucapabilitiesdata/caps_1.3.1-1.caps
index da15d8b..6b4a8f0 100644
--- a/tests/qemucapabilitiesdata/caps_1.3.1-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.3.1-1.caps
@@ -126,4 +126,5 @@
 flag name='usb-storage'/
 flag name='usb-storage.removable'/
 flag name='kvm-pit-lost-tick-policy'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.4.2-1.caps 
b/tests/qemucapabilitiesdata/caps_1.4.2-1.caps
index c419068..e3d0047 100644
--- a/tests/qemucapabilitiesdata/caps_1.4.2-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.4.2-1.caps
@@ -127,4 +127,5 @@
 flag name='usb-storage.removable'/
 flag name='ich9-intel-hda'/
 flag name='kvm-pit-lost-tick-policy'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.5.3-1.caps 
b/tests/qemucapabilitiesdata/caps_1.5.3-1.caps
index adf8531..01b4d27 100644
--- a/tests/qemucapabilitiesdata/caps_1.5.3-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.5.3-1.caps
@@ -135,4 +135,5 @@
 flag name='pvpanic'/
 flag name='reboot-timeout'/
 flag name='spiceport'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.6.0-1.caps 
b/tests/qemucapabilitiesdata/caps_1.6.0-1.caps
index e6b2f76..597f873 100644
--- a/tests/qemucapabilitiesdata/caps_1.6.0-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.6.0-1.caps
@@ -141,4 +141,5 @@
 flag name='enable-fips'/
 flag name='spice-file-xfer-disable'/
 flag name='spiceport'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.6.50-1.caps 
b/tests/qemucapabilitiesdata/caps_1.6.50-1.caps
index e6b8117..0c1dd87 100644
--- a/tests/qemucapabilitiesdata/caps_1.6.50-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.6.50-1.caps
@@ -139,4 +139,5 @@
 flag name='reboot-timeout'/
 flag name='spice-file-xfer-disable'/
 flag name='spiceport'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemuhelptest.c b/tests/qemuhelptest.c
index 3628fbe..6e0a5f8 100644
--- a/tests/qemuhelptest.c
+++ b/tests/qemuhelptest.c
@@ -403,6 +403,7 @@ mymain(void)
 QEMU_CAPS_DEVICE_VMWARE_SVGA,
 QEMU_CAPS_DEVICE_USB_SERIAL,
 QEMU_CAPS_DEVICE_USB_NET,
+QEMU_CAPS_DEVICE_USB_KBD,
 QEMU_CAPS_DEVICE_PCI_BRIDGE);
 DO_TEST(qemu-kvm-0.12.3, 12003, 1, 0,
 QEMU_CAPS_VNC_COLON,
@@ -515,6 +516,7 @@ mymain(void

[libvirt] [PATCH v7 0/7] Support keyboard device

2014-02-14 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

This patchset is to add keyboard input device.

For PPC64, it doesn't support a default keyboard device when the graphic
is enabled. Libvirt supports QEMU command line as -device VGA which
won't create any keyboard device for it. So it requires libvirt to add
a default USB keyboard device for it.

This patchset is to add keyboard input device and a default USB keyboard
for PPC64.

The related discussion in QEMU community:
http://lists.nongnu.org/archive/html/qemu-devel/2013-11/msg01734.html

Li Zhang (7):
  conf: Add a keyboard input device type
  conf: Add one interface to add default input devices
  conf: Remove the implicit PS2 mouse for non-X86 and platforms and
add an implicit PS2 keyboard device for X86 platforms.
  qemu_cap: Add USB keyboard capability
  qemu: format qemu command line for USB keyboard
  xen: format xen command line for USB keyboard
  Add a default USB keyboard and USB mouse for PPC64

 v7 - v6:
   * Corret indention errors in code. (Jan Tomko)
   * Correct make check error in xen driver. (Jan Tomko)
   * Split 5/6 to 2 parts, qemu and xen. (Jan Tomko)
 v6 - v5:
   * Change kbd to keyboard, and correct -usbdevice parameter.
   * Remove implicit PS/2 keyboard output in XML in case
 older libvirtd can read it. (Jan Tomko)
   * Remove implicit keyboard for XEN to make it safer.

 v5 - v4:
   * Add PS/2 KBD definition in XML file. (Daniel.P.Berrange)
   * Allow PS/2 KBD devices and set KBD default bus as PS2 for X86, 
 USB for non-x86. (Daniel.P.Berrange)
   * Add an implicit PS/2 KBD as PS/2 mouse. (Danniel.P.Berrange)

 v4 - v3:
   * Don't remove PS2 mouse device for other virtualization drivers (Jan Tomko).

 v3 - v2:
   * Handle the KBD device type in xen and QEMU driver. (Daniel.P.Berrange)
   * Remove PS2 mouse device for non-X86 platforms.
   * Move virDomainDefMaybeAddInput to a new patch. (Jan Tomko)
   * Replace VIR_REALLOC_N with VIR_APPEND_ELEMENT. (Jan Tomoko)
   * Fix several typos. (Jan Tomoko)
   * Add a virReportError when QEMU_CAPS_DEVICE_USB_KBD can't be gotten. (Jan 
Tomoko)

 v2 - v1:
   * change ifs to switch clause.
   * reconstruct the patches

 docs/schemas/domaincommon.rng  |   1 +
 src/conf/domain_conf.c | 112 ++---
 src/conf/domain_conf.h |   5 +
 src/libvirt_private.syms   |   1 +
 src/qemu/qemu_capabilities.c   |   3 +
 src/qemu/qemu_capabilities.h   |   1 +
 src/qemu/qemu_command.c|  41 ++--
 src/qemu/qemu_domain.c |  23 -
 src/util/virarch.h |   2 +
 src/xenxs/xen_sxpr.c   |  27 +++--
 src/xenxs/xen_xm.c |  30 --
 tests/qemucapabilitiesdata/caps_1.2.2-1.caps   |   1 +
 tests/qemucapabilitiesdata/caps_1.3.1-1.caps   |   1 +
 tests/qemucapabilitiesdata/caps_1.4.2-1.caps   |   1 +
 tests/qemucapabilitiesdata/caps_1.5.3-1.caps   |   1 +
 tests/qemucapabilitiesdata/caps_1.6.0-1.caps   |   1 +
 tests/qemucapabilitiesdata/caps_1.6.50-1.caps  |   1 +
 tests/qemuhelptest.c   |   8 ++
 .../qemuxml2argvdata/qemuxml2argv-pseries-disk.xml |   3 +-
 .../qemuxml2argv-pseries-usb-kbd.args  |   9 ++
 .../qemuxml2argv-pseries-usb-kbd.xml   |  19 
 tests/qemuxml2argvtest.c   |   3 +
 22 files changed, 227 insertions(+), 67 deletions(-)
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.xml

-- 
1.8.2.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH v7 1/7] conf: Add a keyboard input device type

2014-02-14 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

There is no keyboard for non-x86 platforms when graphics are enabled.
It's preferred to add one USB keyboard.

This patch is to add keyboard input device type.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 docs/schemas/domaincommon.rng |  1 +
 src/conf/domain_conf.c| 20 +---
 src/conf/domain_conf.h|  1 +
 3 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index c1efcd2..601e7ac 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -3269,6 +3269,7 @@
 choice
   valuetablet/value
   valuemouse/value
+  valuekeyboard/value
 /choice
   /attribute
   optional
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index f6065ed..9d344bc 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -506,7 +506,8 @@ VIR_ENUM_IMPL(virDomainVideo, VIR_DOMAIN_VIDEO_TYPE_LAST,
 
 VIR_ENUM_IMPL(virDomainInput, VIR_DOMAIN_INPUT_TYPE_LAST,
   mouse,
-  tablet)
+  tablet,
+  keyboard)
 
 VIR_ENUM_IMPL(virDomainInputBus, VIR_DOMAIN_INPUT_BUS_LAST,
   ps2,
@@ -7796,8 +7797,9 @@ virDomainInputDefParseXML(const char *ostype,
 }
 
 if (STREQ(ostype, hvm)) {
-if (def-bus == VIR_DOMAIN_INPUT_BUS_PS2  /* Only allow mouse 
for ps2 */
-def-type != VIR_DOMAIN_INPUT_TYPE_MOUSE) {
+if (def-bus == VIR_DOMAIN_INPUT_BUS_PS2  /* PS2 can be mouse or 
keyboard */
+!(def-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
+def-type == VIR_DOMAIN_INPUT_TYPE_KBD)) {
 virReportError(VIR_ERR_INTERNAL_ERROR,
_(ps2 bus does not support %s input device),
type);
@@ -7815,7 +7817,8 @@ virDomainInputDefParseXML(const char *ostype,
_(unsupported input bus %s),
bus);
 }
-if (def-type != VIR_DOMAIN_INPUT_TYPE_MOUSE) {
+if (def-type != VIR_DOMAIN_INPUT_TYPE_MOUSE 
+def-type != VIR_DOMAIN_INPUT_TYPE_KBD) {
 virReportError(VIR_ERR_INTERNAL_ERROR,
_(xen bus does not support %s input device),
type);
@@ -7824,7 +7827,8 @@ virDomainInputDefParseXML(const char *ostype,
 }
 } else {
 if (STREQ(ostype, hvm)) {
-if (def-type == VIR_DOMAIN_INPUT_TYPE_MOUSE)
+if (def-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
+def-type == VIR_DOMAIN_INPUT_TYPE_KBD)
 def-bus = VIR_DOMAIN_INPUT_BUS_PS2;
 else
 def-bus = VIR_DOMAIN_INPUT_BUS_USB;
@@ -12422,10 +12426,12 @@ virDomainDefParseXML(xmlDocPtr xml,
  * XXX will this be true for other virt types ? */
 if ((STREQ(def-os.type, hvm) 
  input-bus == VIR_DOMAIN_INPUT_BUS_PS2 
- input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE) ||
+ (input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
+  input-type == VIR_DOMAIN_INPUT_TYPE_KBD)) ||
 (STRNEQ(def-os.type, hvm) 
  input-bus == VIR_DOMAIN_INPUT_BUS_XEN 
- input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE)) {
+ (input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
+  input-type == VIR_DOMAIN_INPUT_TYPE_KBD))) {
 virDomainInputDefFree(input);
 continue;
 }
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 4895e81..98706d5 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -1239,6 +1239,7 @@ struct _virDomainTPMDef {
 enum virDomainInputType {
 VIR_DOMAIN_INPUT_TYPE_MOUSE,
 VIR_DOMAIN_INPUT_TYPE_TABLET,
+VIR_DOMAIN_INPUT_TYPE_KBD,
 
 VIR_DOMAIN_INPUT_TYPE_LAST
 };
-- 
1.8.2.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH v7 2/7] conf: Add one interface to add default input devices

2014-02-14 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

This patch is to add one new interface to add input devices.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/conf/domain_conf.c   | 27 +++
 src/conf/domain_conf.h   |  4 
 src/libvirt_private.syms |  1 +
 3 files changed, 32 insertions(+)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 9d344bc..3cb4fc1 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -11043,6 +11043,33 @@ virDomainDefMaybeAddController(virDomainDefPtr def,
 return 0;
 }
 
+int
+virDomainDefMaybeAddInput(virDomainDefPtr def,
+   int type,
+   int bus)
+{
+size_t i;
+virDomainInputDefPtr input;
+
+for (i = 0; i  def-ninputs; i++) {
+if (def-inputs[i]-type == type 
+def-inputs[i]-bus == bus)
+return 0;
+}
+
+if (VIR_ALLOC(input)  0)
+return -1;
+
+input-type = type;
+input-bus = bus;
+
+if (VIR_APPEND_ELEMENT(def-inputs, def-ninputs, input)  0) {
+VIR_FREE(input);
+return -1;
+}
+
+return 0;
+}
 
 /* Parse a memory element located at XPATH within CTXT, and store the
  * result into MEM.  If REQUIRED, then the value must exist;
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 98706d5..2740152 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -2805,6 +2805,10 @@ virDomainDefMaybeAddController(virDomainDefPtr def,
int type,
int idx,
int model);
+int
+virDomainDefMaybeAddInput(virDomainDefPtr def,
+  int type,
+  int bus);
 
 char *virDomainDefGetDefaultEmulator(virDomainDefPtr def, virCapsPtr caps);
 
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 0b28bac..607888d 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -165,6 +165,7 @@ virDomainDefGenSecurityLabelDef;
 virDomainDefGetDefaultEmulator;
 virDomainDefGetSecurityLabelDef;
 virDomainDefMaybeAddController;
+virDomainDefMaybeAddInput;
 virDomainDefNew;
 virDomainDefParseFile;
 virDomainDefParseNode;
-- 
1.8.2.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH v7 3/7] conf: Remove the implicit PS2 mouse for non-X86 and platforms and add an implicit PS2 keyboard device for X86 platforms.

2014-02-14 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

PS2 device only works for X86 platform, other platforms may need
USB mouse. Athough it doesn't influence the QEMU command line, but
it's not right to add one PS2 mouse for non-X86 platform.

What's more, PS2 keyboard can be supported for X86.

So, this patch is to remove PS2 mouse for non-x86 platforms and also add
an implicit PS2 keyboard device for X86.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/conf/domain_conf.c | 69 +++---
 src/util/virarch.h |  2 +
 .../qemuxml2argvdata/qemuxml2argv-pseries-disk.xml |  1 -
 3 files changed, 37 insertions(+), 35 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 3cb4fc1..87f5fea 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -7763,7 +7763,7 @@ error:
 
 /* Parse the XML definition for an input device */
 static virDomainInputDefPtr
-virDomainInputDefParseXML(const char *ostype,
+virDomainInputDefParseXML(const virDomainDef *dom,
   xmlNodePtr node,
   unsigned int flags)
 {
@@ -7796,7 +7796,7 @@ virDomainInputDefParseXML(const char *ostype,
 goto error;
 }
 
-if (STREQ(ostype, hvm)) {
+if (STREQ(dom-os.type, hvm)) {
 if (def-bus == VIR_DOMAIN_INPUT_BUS_PS2  /* PS2 can be mouse or 
keyboard */
 !(def-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
 def-type == VIR_DOMAIN_INPUT_TYPE_KBD)) {
@@ -7826,9 +7826,10 @@ virDomainInputDefParseXML(const char *ostype,
 }
 }
 } else {
-if (STREQ(ostype, hvm)) {
-if (def-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
-def-type == VIR_DOMAIN_INPUT_TYPE_KBD)
+if (STREQ(dom-os.type, hvm)) {
+if ((def-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
+def-type == VIR_DOMAIN_INPUT_TYPE_KBD) 
+ARCH_IS_X86(dom-os.arch))
 def-bus = VIR_DOMAIN_INPUT_BUS_PS2;
 else
 def-bus = VIR_DOMAIN_INPUT_BUS_USB;
@@ -9850,7 +9851,7 @@ virDomainDeviceDefParse(const char *xmlStr,
 goto error;
 break;
 case VIR_DOMAIN_DEVICE_INPUT:
-if (!(dev-data.input = virDomainInputDefParseXML(def-os.type,
+if (!(dev-data.input = virDomainInputDefParseXML(def,
   node, flags)))
 goto error;
 break;
@@ -12433,7 +12434,7 @@ virDomainDefParseXML(xmlDocPtr xml,
 goto error;
 
 for (i = 0; i  n; i++) {
-virDomainInputDefPtr input = virDomainInputDefParseXML(def-os.type,
+virDomainInputDefPtr input = virDomainInputDefParseXML(def,
nodes[i],
flags);
 if (!input)
@@ -12485,29 +12486,28 @@ virDomainDefParseXML(xmlDocPtr xml,
 VIR_FREE(nodes);
 
 /* If graphics are enabled, there's an implicit PS2 mouse */
-if (def-ngraphics  0) {
-virDomainInputDefPtr input;
+if (def-ngraphics  0 
+(ARCH_IS_X86(def-os.arch) ||
+ def-os.arch == VIR_ARCH_NONE)) {
+int input_bus = VIR_DOMAIN_INPUT_BUS_XEN;
 
-if (VIR_ALLOC(input)  0) {
-goto error;
-}
-if (STREQ(def-os.type, hvm)) {
-input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
-input-bus = VIR_DOMAIN_INPUT_BUS_PS2;
-} else {
-input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
-input-bus = VIR_DOMAIN_INPUT_BUS_XEN;
-}
+if (STREQ(def-os.type, hvm))
+input_bus = VIR_DOMAIN_INPUT_BUS_PS2;
 
-if (VIR_REALLOC_N(def-inputs, def-ninputs + 1)  0) {
-virDomainInputDefFree(input);
+if (virDomainDefMaybeAddInput(def,
+  VIR_DOMAIN_INPUT_TYPE_MOUSE,
+  input_bus)  0)
 goto error;
+
+/*Ignore keyboard for XEN, only add a PS2 keyboard device for hvm*/
+if (STREQ(def-os.type, hvm)) {
+if (virDomainDefMaybeAddInput(def,
+  VIR_DOMAIN_INPUT_TYPE_KBD,
+  input_bus)  0)
+goto error;
 }
-def-inputs[def-ninputs] = input;
-def-ninputs++;
 }
 
-
 /* analysis of the sound devices */
 if ((n = virXPathNodeSet(./devices/sound, ctxt, nodes))  0) {
 goto error;
@@ -17523,16 +17523,17 @@ virDomainDefFormatInternal(virDomainDefPtr def,
 }
 
 if (def-ngraphics  0) {
-/* If graphics is enabled, add the implicit mouse */
-virDomainInputDef autoInput = {
-VIR_DOMAIN_INPUT_TYPE_MOUSE,
-STREQ(def-os.type, hvm) ?
-VIR_DOMAIN_INPUT_BUS_PS2 : VIR_DOMAIN_INPUT_BUS_XEN

[libvirt] [PATCH v7 5/7] qemu: format qemu command line for USB keyboard

2014-02-14 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

This patch is to format qemu command line for USB keyboard
and add test cases for it.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/qemu/qemu_command.c| 41 --
 .../qemuxml2argv-pseries-usb-kbd.args  |  9 +
 .../qemuxml2argv-pseries-usb-kbd.xml   | 19 ++
 tests/qemuxml2argvtest.c   |  3 ++
 4 files changed, 62 insertions(+), 10 deletions(-)
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.xml

diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index e499d54..d7d39b3 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -5306,9 +5306,19 @@ qemuBuildUSBInputDevStr(virDomainDefPtr def,
 {
 virBuffer buf = VIR_BUFFER_INITIALIZER;
 
-virBufferAsprintf(buf, %s,id=%s,
-  dev-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ?
-  usb-mouse : usb-tablet, dev-info.alias);
+switch (dev-type) {
+case VIR_DOMAIN_INPUT_TYPE_MOUSE:
+virBufferAsprintf(buf, usb-mouse,id=%s, dev-info.alias);
+break;
+case VIR_DOMAIN_INPUT_TYPE_TABLET:
+virBufferAsprintf(buf, usb-tablet,id=%s, dev-info.alias);
+break;
+case VIR_DOMAIN_INPUT_TYPE_KBD:
+if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_USB_KBD))
+goto error;
+virBufferAsprintf(buf, usb-kbd,id=%s, dev-info.alias);
+break;
+}
 
 if (qemuBuildDeviceAddressStr(buf, def, dev-info, qemuCaps)  0)
 goto error;
@@ -9044,9 +9054,17 @@ qemuBuildCommandLine(virConnectPtr conn,
 virCommandAddArg(cmd, optstr);
 VIR_FREE(optstr);
 } else {
-virCommandAddArgList(cmd, -usbdevice,
- input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE
- ? mouse : tablet, NULL);
+switch (input-type) {
+case VIR_DOMAIN_INPUT_TYPE_MOUSE:
+virCommandAddArgList(cmd, -usbdevice, mouse, NULL);
+break;
+case VIR_DOMAIN_INPUT_TYPE_TABLET:
+virCommandAddArgList(cmd, -usbdevice, tablet, 
NULL);
+break;
+case VIR_DOMAIN_INPUT_TYPE_KBD:
+virCommandAddArgList(cmd, -usbdevice, keyboard, 
NULL);
+break;
+}
 }
 }
 }
@@ -11720,20 +11738,23 @@ qemuParseCommandLine(virCapsPtr qemuCaps,
 } else if (STREQ(arg, -usbdevice)) {
 WANT_VALUE();
 if (STREQ(val, tablet) ||
-STREQ(val, mouse)) {
+STREQ(val, mouse) ||
+STREQ(val, keyboard)) {
 virDomainInputDefPtr input;
 if (VIR_ALLOC(input)  0)
 goto error;
 input-bus = VIR_DOMAIN_INPUT_BUS_USB;
 if (STREQ(val, tablet))
 input-type = VIR_DOMAIN_INPUT_TYPE_TABLET;
-else
+else if (STREQ(val, mouse))
 input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
-if (VIR_REALLOC_N(def-inputs, def-ninputs+1)  0) {
+else
+input-type = VIR_DOMAIN_INPUT_TYPE_KBD;
+
+if (VIR_APPEND_ELEMENT(def-inputs, def-ninputs, input)  0) {
 virDomainInputDefFree(input);
 goto error;
 }
-def-inputs[def-ninputs++] = input;
 } else if (STRPREFIX(val, disk:)) {
 if (VIR_ALLOC(disk)  0)
 goto error;
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args 
b/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args
new file mode 100644
index 000..373c72a
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args
@@ -0,0 +1,9 @@
+LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \
+/usr/bin/qemu-system-ppc64 -S -M pseries -m 512 -smp 1 \
+-nographic -nodefconfig -nodefaults \
+-chardev socket,id=charmonitor,path=/tmp/test-monitor,server,nowait \
+-mon chardev=charmonitor,id=monitor,mode=readline -no-acpi -boot c \
+-device pci-ohci,id=usb,bus=pci,addr=0x1 \
+-chardev pty,id=charserial0 \
+-device spapr-vty,chardev=charserial0,reg=0x3000 \
+-device usb-kbd,id=input0
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.xml 
b/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.xml
new file mode 100644
index 000..5bd4c37
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.xml
@@ -0,0 +1,19 @@
+domain type='qemu'
+  nameQEMUGuest1/name
+  uuid1ccfd97d-5eb4-478a-bbe6-88d254c16db7/uuid
+  memory unit='KiB'524288/memory
+  vcpu

[libvirt] [PATCH v7 6/7] xen: format xen command line for USB keyboard

2014-02-14 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

This patch is to format xen command line for USB keyboard

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/xenxs/xen_sxpr.c | 27 +++
 src/xenxs/xen_xm.c   | 30 ++
 2 files changed, 41 insertions(+), 16 deletions(-)

diff --git a/src/xenxs/xen_sxpr.c b/src/xenxs/xen_sxpr.c
index d514725..d366b1b 100644
--- a/src/xenxs/xen_sxpr.c
+++ b/src/xenxs/xen_sxpr.c
@@ -724,21 +724,23 @@ xenParseSxprUSB(virDomainDefPtr def,
 tmp = sexpr_node(node, usbdevice);
 if (tmp  *tmp) {
 if (STREQ(tmp, tablet) ||
-STREQ(tmp, mouse)) {
+STREQ(tmp, mouse) ||
+STREQ(tmp, keyboard)) {
 virDomainInputDefPtr input;
 if (VIR_ALLOC(input)  0)
 goto error;
 input-bus = VIR_DOMAIN_INPUT_BUS_USB;
 if (STREQ(tmp, tablet))
 input-type = VIR_DOMAIN_INPUT_TYPE_TABLET;
-else
+else if (STREQ(tmp, mouse))
 input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
+else
+input-type = VIR_DOMAIN_INPUT_TYPE_KBD;
 
-if (VIR_REALLOC_N(def-inputs, def-ninputs+1)  0) {
+if (VIR_APPEND_ELEMENT(def-inputs, def-ninputs, input)  
0) {
 VIR_FREE(input);
 goto error;
 }
-def-inputs[def-ninputs++] = input;
 } else {
 /* XXX Handle other non-input USB devices later */
 }
@@ -2144,15 +2146,24 @@ xenFormatSxprInput(virDomainInputDefPtr input,
 return 0;
 
 if (input-type != VIR_DOMAIN_INPUT_TYPE_MOUSE 
-input-type != VIR_DOMAIN_INPUT_TYPE_TABLET) {
+input-type != VIR_DOMAIN_INPUT_TYPE_TABLET 
+input-type != VIR_DOMAIN_INPUT_TYPE_KBD) {
 virReportError(VIR_ERR_INTERNAL_ERROR,
_(unexpected input type %d), input-type);
 return -1;
 }
 
-virBufferAsprintf(buf, (usbdevice %s),
-  input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ?
-  mouse : tablet);
+switch (input-type) {
+case VIR_DOMAIN_INPUT_TYPE_MOUSE:
+virBufferAsprintf(buf, (usbdevice %s), mouse);
+break;
+case VIR_DOMAIN_INPUT_TYPE_TABLET:
+virBufferAsprintf(buf, (usbdevice %s), tablet);
+break;
+case VIR_DOMAIN_INPUT_TYPE_KBD:
+virBufferAsprintf(buf, (usbdevice %s), keyboard);
+break;
+}
 
 return 0;
 }
diff --git a/src/xenxs/xen_xm.c b/src/xenxs/xen_xm.c
index 5e89876..3a57547 100644
--- a/src/xenxs/xen_xm.c
+++ b/src/xenxs/xen_xm.c
@@ -886,14 +886,18 @@ xenParseXM(virConfPtr conf, int xendConfigVersion,
 goto cleanup;
 if (str 
 (STREQ(str, tablet) ||
- STREQ(str, mouse))) {
+ STREQ(str, mouse) ||
+ STREQ(str, keyboard))) {
 virDomainInputDefPtr input;
 if (VIR_ALLOC(input)  0)
 goto cleanup;
 input-bus = VIR_DOMAIN_INPUT_BUS_USB;
-input-type = STREQ(str, tablet) ?
-VIR_DOMAIN_INPUT_TYPE_TABLET :
-VIR_DOMAIN_INPUT_TYPE_MOUSE;
+if (STREQ(str, mouse))
+input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
+else if (STREQ(str, tablet))
+input-type = VIR_DOMAIN_INPUT_TYPE_TABLET;
+else if (STREQ(str, keyboard))
+input-type = VIR_DOMAIN_INPUT_TYPE_KBD;
 if (VIR_ALLOC_N(def-inputs, 1)  0) {
 virDomainInputDefFree(input);
 goto cleanup;
@@ -1746,10 +1750,20 @@ virConfPtr xenFormatXM(virConnectPtr conn,
 if (def-inputs[i]-bus == VIR_DOMAIN_INPUT_BUS_USB) {
 if (xenXMConfigSetInt(conf, usb, 1)  0)
 goto cleanup;
-if (xenXMConfigSetString(conf, usbdevice,
- def-inputs[i]-type == 
VIR_DOMAIN_INPUT_TYPE_MOUSE ?
- mouse : tablet)  0)
-goto cleanup;
+switch (def-inputs[i]-type) {
+case VIR_DOMAIN_INPUT_TYPE_MOUSE:
+if (xenXMConfigSetString(conf, usbdevice, mouse)  
0)
+goto cleanup;
+break;
+case VIR_DOMAIN_INPUT_TYPE_TABLET:
+if (xenXMConfigSetString(conf, usbdevice, tablet) 
 0)
+goto cleanup;
+break;
+case VIR_DOMAIN_INPUT_TYPE_KBD:
+if (xenXMConfigSetString(conf, usbdevice, 
keyboard)  0

[libvirt] [PATCH v7 7/7] Add a default USB keyboard and USB mouse for PPC64

2014-02-14 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

There is no keyboard working on PPC64 and PS2 mouse is only for PPC64
when graphics are enabled. It needs to add a USB keyboard and USB mouse for it.

This patch is to add a USB keyboard and USB mouse when graphics are enabled.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/qemu/qemu_domain.c | 23 +-
 .../qemuxml2argvdata/qemuxml2argv-pseries-disk.xml |  2 ++
 2 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index a665061..7f4ff0e 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -691,6 +691,8 @@ qemuDomainDefPostParse(virDomainDefPtr def,
 bool addPCIRoot = false;
 bool addPCIeRoot = false;
 bool addDefaultMemballoon = true;
+bool addDefaultUSBKBD = false;
+bool addDefaultUSBMouse = false;
 
 /* check for emulator and create a default one if needed */
 if (!def-emulator 
@@ -732,9 +734,14 @@ qemuDomainDefPostParse(virDomainDefPtr def,
addDefaultMemballoon = false;
break;
 
+case VIR_ARCH_PPC64:
+addPCIRoot = true;
+addDefaultUSBKBD = true;
+addDefaultUSBMouse = true;
+break;
+
 case VIR_ARCH_ALPHA:
 case VIR_ARCH_PPC:
-case VIR_ARCH_PPC64:
 case VIR_ARCH_PPCEMB:
 case VIR_ARCH_SH4:
 case VIR_ARCH_SH4EB:
@@ -787,6 +794,20 @@ qemuDomainDefPostParse(virDomainDefPtr def,
 def-memballoon = memballoon;
 }
 
+if (addDefaultUSBKBD 
+def-ngraphics  0 
+virDomainDefMaybeAddInput(def,
+  VIR_DOMAIN_INPUT_TYPE_KBD,
+  VIR_DOMAIN_INPUT_BUS_USB)  0)
+return -1;
+
+if (addDefaultUSBMouse 
+def-ngraphics  0 
+virDomainDefMaybeAddInput(def,
+  VIR_DOMAIN_INPUT_TYPE_MOUSE,
+  VIR_DOMAIN_INPUT_BUS_USB)  0)
+return -1;
+
 return 0;
 }
 
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml 
b/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml
index 8dde776..64b70f3 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml
@@ -30,6 +30,8 @@
 controller type='usb' index='0'/
 controller type='scsi' index='0'/
 controller type='pci' index='0' model='pci-root'/
+input type='keyboard' bus='usb'/
+input type='mouse' bus='usb'/
 graphics type='sdl'/
 video
   model type='cirrus' vram='9216' heads='1'/
-- 
1.8.2.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


Re: [libvirt] [PATCH v6 1/6] conf: Add a keyboard input device type

2014-02-14 Thread Li Zhang

On 2014年02月14日 00:39, Daniel P. Berrange wrote:

On Thu, Feb 13, 2014 at 04:48:21PM +0800, Li Zhang wrote:


@@ -12422,10 +12426,12 @@ virDomainDefParseXML(xmlDocPtr xml,
   * XXX will this be true for other virt types ? */
  if ((STREQ(def-os.type, hvm) 
   input-bus == VIR_DOMAIN_INPUT_BUS_PS2 
- input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE) ||
+ (input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
+  input-type == VIR_DOMAIN_INPUT_TYPE_KBD)) ||
  (STRNEQ(def-os.type, hvm) 
   input-bus == VIR_DOMAIN_INPUT_BUS_XEN 
- input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE)) {
+ (input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
+  input-type == VIR_DOMAIN_INPUT_TYPE_KBD))) {
  virDomainInputDefFree(input);
  continue;

Later on in this function there is

 /* If graphics are enabled, there's an implicit PS2 mouse */
 if (def-ngraphics  0) {
 virDomainInputDefPtr input;

 if (VIR_ALLOC(input)  0) {
 goto error;
 }
 if (STREQ(def-os.type, hvm)) {
 input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
 input-bus = VIR_DOMAIN_INPUT_BUS_PS2;
 } else {
 input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
 input-bus = VIR_DOMAIN_INPUT_BUS_XEN;
 }

 if (VIR_REALLOC_N(def-inputs, def-ninputs + 1)  0) {
 virDomainInputDefFree(input);
 goto error;
 }
 def-inputs[def-ninputs] = input;
 def-ninputs++;
 }


which needs to take care of keyboards too now.

And some more similar logic in virDomainDefFormatInternal
which needs updating


I have add the keyboard device in this function in this version [3/6].

But Jan suggested to remove it from  virDomainDefFormatInternal in v5.
Because it would make the XML unreadable by older libvirtd that didn't know
the keyboard input type.



Daniel


--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

[libvirt] [PATCH v6 0/6] Support keyboard device

2014-02-13 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

This patchset is to add keyboard input device.

For PPC64, it doesn't support a default keyboard device when the graphic
is enabled. Libvirt supports QEMU command line as -device VGA which
won't create any keyboard device for it. So it requires libvirt to add
a default USB keyboard device for it.

This patchset is to add keyboard input device and a default USB keyboard
for PPC64.

The related discussion in QEMU community:
http://lists.nongnu.org/archive/html/qemu-devel/2013-11/msg01734.html

Li Zhang (6):
  conf: Add a keyboard input device type
  conf: Add one interface to add default input devices
  conf: Remove the implicit PS2 mouse for non-X86 platforms and 
add an implicit PS2 keyboard device for X86 platforms.
  qemu_cap: Add USB keyboard capability
  qemu: parse qemu command line for USB keyboard
  Add a default USB keyboard and USB mouse for PPC64

 v6 - v5:
   * Change kbd to keyboard, and correct -usbdevice parameter.
   * Remove implicit PS/2 keyboard output in XML in case
 older libvirtd can read it. (Jan Tomko)
   * Remove implicit keyboard for XEN to make it safer.

 v5 - v4:
   * Add PS/2 KBD definition in XML file. (Daniel.P.Berrange)
   * Allow PS/2 KBD devices and set KBD default bus as PS2 for X86, 
 USB for non-x86. (Daniel.P.Berrange)
   * Add an implicit PS/2 KBD as PS/2 mouse. (Danniel.P.Berrange)

 v4 - v3:
   * Don't remove PS2 mouse device for other virtualization drivers (Jan Tomko).

 v3 - v2:
   * Handle the KBD device type in xen and QEMU driver. (Daniel.P.Berrange)
   * Remove PS2 mouse device for non-X86 platforms.
   * Move virDomainDefMaybeAddInput to a new patch. (Jan Tomko)
   * Replace VIR_REALLOC_N with VIR_APPEND_ELEMENT. (Jan Tomoko)
   * Fix several typos. (Jan Tomoko)
   * Add a virReportError when QEMU_CAPS_DEVICE_USB_KBD can't be gotten. (Jan 
Tomoko)

 v2 - v1:
   * change ifs to switch clause.
   * reconstruct the patches

 docs/schemas/domaincommon.rng  |   1 +
 src/conf/domain_conf.c | 115 ++---
 src/conf/domain_conf.h |   5 +
 src/libvirt_private.syms   |   1 +
 src/qemu/qemu_capabilities.c   |   3 +
 src/qemu/qemu_capabilities.h   |   1 +
 src/qemu/qemu_command.c|  41 ++--
 src/qemu/qemu_domain.c |  23 -
 src/util/virarch.h |   2 +
 src/xenxs/xen_sxpr.c   |  27 +++--
 src/xenxs/xen_xm.c |  30 --
 tests/qemucapabilitiesdata/caps_1.2.2-1.caps   |   1 +
 tests/qemucapabilitiesdata/caps_1.3.1-1.caps   |   1 +
 tests/qemucapabilitiesdata/caps_1.4.2-1.caps   |   1 +
 tests/qemucapabilitiesdata/caps_1.5.3-1.caps   |   1 +
 tests/qemucapabilitiesdata/caps_1.6.0-1.caps   |   1 +
 tests/qemucapabilitiesdata/caps_1.6.50-1.caps  |   1 +
 tests/qemuhelptest.c   |   8 ++
 .../qemuxml2argvdata/qemuxml2argv-pseries-disk.xml |   3 +-
 .../qemuxml2argv-pseries-usb-kbd.args  |   9 ++
 .../qemuxml2argv-pseries-usb-kbd.xml   |  19 
 tests/qemuxml2argvtest.c   |   3 +
 22 files changed, 229 insertions(+), 68 deletions(-)
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.xml

-- 
1.8.2.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH v6 2/6] conf: Add one interface to add default input devices

2014-02-13 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

This patch is to add one new interface to add input devices.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/conf/domain_conf.c   | 29 +
 src/conf/domain_conf.h   |  4 
 src/libvirt_private.syms |  1 +
 3 files changed, 34 insertions(+)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 9d344bc..786f9d1 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -11043,6 +11043,35 @@ virDomainDefMaybeAddController(virDomainDefPtr def,
 return 0;
 }
 
+int
+virDomainDefMaybeAddInput(virDomainDefPtr def,
+   int type,
+   int bus)
+{
+size_t i;
+virDomainInputDefPtr input;
+
+for (i = 0; i  def-ninputs; i++) {
+if (def-inputs[i]-type == type 
+def-inputs[i]-bus == bus)
+return 0;
+}
+
+if (VIR_ALLOC(input)  0)
+return -1;
+
+input-type = type;
+input-bus = bus;
+
+if (VIR_APPEND_ELEMENT(def-inputs, def-ninputs, input)  0) {
+VIR_FREE(input);
+return -1;
+}
+
+return 0;
+}
+
+
 
 /* Parse a memory element located at XPATH within CTXT, and store the
  * result into MEM.  If REQUIRED, then the value must exist;
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 98706d5..2740152 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -2805,6 +2805,10 @@ virDomainDefMaybeAddController(virDomainDefPtr def,
int type,
int idx,
int model);
+int
+virDomainDefMaybeAddInput(virDomainDefPtr def,
+  int type,
+  int bus);
 
 char *virDomainDefGetDefaultEmulator(virDomainDefPtr def, virCapsPtr caps);
 
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 2c9536a..1256444 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -165,6 +165,7 @@ virDomainDefGenSecurityLabelDef;
 virDomainDefGetDefaultEmulator;
 virDomainDefGetSecurityLabelDef;
 virDomainDefMaybeAddController;
+virDomainDefMaybeAddInput;
 virDomainDefNew;
 virDomainDefParseFile;
 virDomainDefParseNode;
-- 
1.8.2.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH v6 1/6] conf: Add a keyboard input device type

2014-02-13 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

There is no keyboard for non-x86 platforms when graphics are enabled.
It's preferred to add one USB keyboard.

This patch is to add keyboard input device type.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 docs/schemas/domaincommon.rng |  1 +
 src/conf/domain_conf.c| 20 +---
 src/conf/domain_conf.h|  1 +
 3 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index c1efcd2..601e7ac 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -3269,6 +3269,7 @@
 choice
   valuetablet/value
   valuemouse/value
+  valuekeyboard/value
 /choice
   /attribute
   optional
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index f6065ed..9d344bc 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -506,7 +506,8 @@ VIR_ENUM_IMPL(virDomainVideo, VIR_DOMAIN_VIDEO_TYPE_LAST,
 
 VIR_ENUM_IMPL(virDomainInput, VIR_DOMAIN_INPUT_TYPE_LAST,
   mouse,
-  tablet)
+  tablet,
+  keyboard)
 
 VIR_ENUM_IMPL(virDomainInputBus, VIR_DOMAIN_INPUT_BUS_LAST,
   ps2,
@@ -7796,8 +7797,9 @@ virDomainInputDefParseXML(const char *ostype,
 }
 
 if (STREQ(ostype, hvm)) {
-if (def-bus == VIR_DOMAIN_INPUT_BUS_PS2  /* Only allow mouse 
for ps2 */
-def-type != VIR_DOMAIN_INPUT_TYPE_MOUSE) {
+if (def-bus == VIR_DOMAIN_INPUT_BUS_PS2  /* PS2 can be mouse or 
keyboard */
+!(def-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
+def-type == VIR_DOMAIN_INPUT_TYPE_KBD)) {
 virReportError(VIR_ERR_INTERNAL_ERROR,
_(ps2 bus does not support %s input device),
type);
@@ -7815,7 +7817,8 @@ virDomainInputDefParseXML(const char *ostype,
_(unsupported input bus %s),
bus);
 }
-if (def-type != VIR_DOMAIN_INPUT_TYPE_MOUSE) {
+if (def-type != VIR_DOMAIN_INPUT_TYPE_MOUSE 
+def-type != VIR_DOMAIN_INPUT_TYPE_KBD) {
 virReportError(VIR_ERR_INTERNAL_ERROR,
_(xen bus does not support %s input device),
type);
@@ -7824,7 +7827,8 @@ virDomainInputDefParseXML(const char *ostype,
 }
 } else {
 if (STREQ(ostype, hvm)) {
-if (def-type == VIR_DOMAIN_INPUT_TYPE_MOUSE)
+if (def-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
+def-type == VIR_DOMAIN_INPUT_TYPE_KBD)
 def-bus = VIR_DOMAIN_INPUT_BUS_PS2;
 else
 def-bus = VIR_DOMAIN_INPUT_BUS_USB;
@@ -12422,10 +12426,12 @@ virDomainDefParseXML(xmlDocPtr xml,
  * XXX will this be true for other virt types ? */
 if ((STREQ(def-os.type, hvm) 
  input-bus == VIR_DOMAIN_INPUT_BUS_PS2 
- input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE) ||
+ (input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
+  input-type == VIR_DOMAIN_INPUT_TYPE_KBD)) ||
 (STRNEQ(def-os.type, hvm) 
  input-bus == VIR_DOMAIN_INPUT_BUS_XEN 
- input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE)) {
+ (input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
+  input-type == VIR_DOMAIN_INPUT_TYPE_KBD))) {
 virDomainInputDefFree(input);
 continue;
 }
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 4895e81..98706d5 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -1239,6 +1239,7 @@ struct _virDomainTPMDef {
 enum virDomainInputType {
 VIR_DOMAIN_INPUT_TYPE_MOUSE,
 VIR_DOMAIN_INPUT_TYPE_TABLET,
+VIR_DOMAIN_INPUT_TYPE_KBD,
 
 VIR_DOMAIN_INPUT_TYPE_LAST
 };
-- 
1.8.2.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH v6 4/6] qemu_cap: Add USB keyboard capability

2014-02-13 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

QEMU can support USB keyboard but libvirt haven't supportted it yet.
This patch is to add USB keyboard capabilities and test cases.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/qemu/qemu_capabilities.c  | 3 +++
 src/qemu/qemu_capabilities.h  | 1 +
 tests/qemucapabilitiesdata/caps_1.2.2-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.3.1-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.4.2-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.5.3-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.6.0-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.6.50-1.caps | 1 +
 tests/qemuhelptest.c  | 8 
 9 files changed, 18 insertions(+)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index e7d953a..0433607 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -249,6 +249,8 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST,
   enable-fips,
   spice-file-xfer-disable,
   spiceport,
+
+  usb-kbd, /*165*/
 );
 
 struct _virQEMUCaps {
@@ -1403,6 +1405,7 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = {
 { virtio-mmio, QEMU_CAPS_DEVICE_VIRTIO_MMIO },
 { ich9-intel-hda, QEMU_CAPS_DEVICE_ICH9_INTEL_HDA },
 { pvpanic, QEMU_CAPS_DEVICE_PANIC },
+{ usb-kbd, QEMU_CAPS_DEVICE_USB_KBD },
 };
 
 static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsVirtioBlk[] = {
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
index a4eecb6..dbc4c9a 100644
--- a/src/qemu/qemu_capabilities.h
+++ b/src/qemu/qemu_capabilities.h
@@ -203,6 +203,7 @@ enum virQEMUCapsFlags {
 QEMU_CAPS_ENABLE_FIPS= 162, /* -enable-fips */
 QEMU_CAPS_SPICE_FILE_XFER_DISABLE = 163, /* -spice disable-agent-file-xfer 
*/
 QEMU_CAPS_CHARDEV_SPICEPORT  = 164, /* -chardev spiceport */
+QEMU_CAPS_DEVICE_USB_KBD = 165, /*-device usb-kbd*/
 
 QEMU_CAPS_LAST,   /* this must always be the last item */
 };
diff --git a/tests/qemucapabilitiesdata/caps_1.2.2-1.caps 
b/tests/qemucapabilitiesdata/caps_1.2.2-1.caps
index c3ae814..436cecd 100644
--- a/tests/qemucapabilitiesdata/caps_1.2.2-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.2.2-1.caps
@@ -113,4 +113,5 @@
 flag name='usb-storage.removable'/
 flag name='kvm-pit-lost-tick-policy'/
 flag name='enable-fips'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.3.1-1.caps 
b/tests/qemucapabilitiesdata/caps_1.3.1-1.caps
index da15d8b..6b4a8f0 100644
--- a/tests/qemucapabilitiesdata/caps_1.3.1-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.3.1-1.caps
@@ -126,4 +126,5 @@
 flag name='usb-storage'/
 flag name='usb-storage.removable'/
 flag name='kvm-pit-lost-tick-policy'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.4.2-1.caps 
b/tests/qemucapabilitiesdata/caps_1.4.2-1.caps
index c419068..e3d0047 100644
--- a/tests/qemucapabilitiesdata/caps_1.4.2-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.4.2-1.caps
@@ -127,4 +127,5 @@
 flag name='usb-storage.removable'/
 flag name='ich9-intel-hda'/
 flag name='kvm-pit-lost-tick-policy'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.5.3-1.caps 
b/tests/qemucapabilitiesdata/caps_1.5.3-1.caps
index adf8531..01b4d27 100644
--- a/tests/qemucapabilitiesdata/caps_1.5.3-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.5.3-1.caps
@@ -135,4 +135,5 @@
 flag name='pvpanic'/
 flag name='reboot-timeout'/
 flag name='spiceport'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.6.0-1.caps 
b/tests/qemucapabilitiesdata/caps_1.6.0-1.caps
index e6b2f76..597f873 100644
--- a/tests/qemucapabilitiesdata/caps_1.6.0-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.6.0-1.caps
@@ -141,4 +141,5 @@
 flag name='enable-fips'/
 flag name='spice-file-xfer-disable'/
 flag name='spiceport'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.6.50-1.caps 
b/tests/qemucapabilitiesdata/caps_1.6.50-1.caps
index e6b8117..0c1dd87 100644
--- a/tests/qemucapabilitiesdata/caps_1.6.50-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.6.50-1.caps
@@ -139,4 +139,5 @@
 flag name='reboot-timeout'/
 flag name='spice-file-xfer-disable'/
 flag name='spiceport'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemuhelptest.c b/tests/qemuhelptest.c
index 3628fbe..6e0a5f8 100644
--- a/tests/qemuhelptest.c
+++ b/tests/qemuhelptest.c
@@ -403,6 +403,7 @@ mymain(void)
 QEMU_CAPS_DEVICE_VMWARE_SVGA,
 QEMU_CAPS_DEVICE_USB_SERIAL,
 QEMU_CAPS_DEVICE_USB_NET,
+QEMU_CAPS_DEVICE_USB_KBD,
 QEMU_CAPS_DEVICE_PCI_BRIDGE);
 DO_TEST(qemu-kvm-0.12.3, 12003, 1, 0,
 QEMU_CAPS_VNC_COLON,
@@ -515,6 +516,7 @@ mymain(void

[libvirt] [PATCH v6 3/6] conf: Remove the implicit PS2 mouse for non-X86 platforms and add an implicit PS2 keyboard device for X86 platforms.

2014-02-13 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

PS2 device only works for X86 platform, other platforms may need
USB mouse. Athough it doesn't influence the QEMU command line, but
it's not right to add one PS2 mouse for non-X86 platform.

What's more, PS2 keyboard can be supported for X86.

So, this patch is to remove PS2 mouse for non-x86 platforms and also add
an implicit PS2 keyboard device for X86.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/conf/domain_conf.c | 70 +++---
 src/util/virarch.h |  2 +
 .../qemuxml2argvdata/qemuxml2argv-pseries-disk.xml |  1 -
 3 files changed, 37 insertions(+), 36 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 786f9d1..fed79a5 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -7763,7 +7763,7 @@ error:
 
 /* Parse the XML definition for an input device */
 static virDomainInputDefPtr
-virDomainInputDefParseXML(const char *ostype,
+virDomainInputDefParseXML(const virDomainDef *dom,
   xmlNodePtr node,
   unsigned int flags)
 {
@@ -7796,7 +7796,7 @@ virDomainInputDefParseXML(const char *ostype,
 goto error;
 }
 
-if (STREQ(ostype, hvm)) {
+if (STREQ(dom-os.type, hvm)) {
 if (def-bus == VIR_DOMAIN_INPUT_BUS_PS2  /* PS2 can be mouse or 
keyboard */
 !(def-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
 def-type == VIR_DOMAIN_INPUT_TYPE_KBD)) {
@@ -7826,9 +7826,10 @@ virDomainInputDefParseXML(const char *ostype,
 }
 }
 } else {
-if (STREQ(ostype, hvm)) {
-if (def-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
-def-type == VIR_DOMAIN_INPUT_TYPE_KBD)
+if (STREQ(dom-os.type, hvm)) {
+if ((def-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
+def-type == VIR_DOMAIN_INPUT_TYPE_KBD) 
+ARCH_IS_X86(dom-os.arch))
 def-bus = VIR_DOMAIN_INPUT_BUS_PS2;
 else
 def-bus = VIR_DOMAIN_INPUT_BUS_USB;
@@ -9850,7 +9851,7 @@ virDomainDeviceDefParse(const char *xmlStr,
 goto error;
 break;
 case VIR_DOMAIN_DEVICE_INPUT:
-if (!(dev-data.input = virDomainInputDefParseXML(def-os.type,
+if (!(dev-data.input = virDomainInputDefParseXML(def,
   node, flags)))
 goto error;
 break;
@@ -12435,7 +12436,7 @@ virDomainDefParseXML(xmlDocPtr xml,
 goto error;
 
 for (i = 0; i  n; i++) {
-virDomainInputDefPtr input = virDomainInputDefParseXML(def-os.type,
+virDomainInputDefPtr input = virDomainInputDefParseXML(def,
nodes[i],
flags);
 if (!input)
@@ -12486,30 +12487,28 @@ virDomainDefParseXML(xmlDocPtr xml,
 }
 VIR_FREE(nodes);
 
-/* If graphics are enabled, there's an implicit PS2 mouse */
-if (def-ngraphics  0) {
-virDomainInputDefPtr input;
+/* If graphics are enabled, there's an implicit PS2 mouse and PS2 keyboard 
*/
+if (def-ngraphics  0 
+ARCH_IS_X86(def-os.arch)) {
+int input_bus = VIR_DOMAIN_INPUT_BUS_XEN;
 
-if (VIR_ALLOC(input)  0) {
-goto error;
-}
-if (STREQ(def-os.type, hvm)) {
-input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
-input-bus = VIR_DOMAIN_INPUT_BUS_PS2;
-} else {
-input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
-input-bus = VIR_DOMAIN_INPUT_BUS_XEN;
-}
+if (STREQ(def-os.type, hvm))
+input_bus = VIR_DOMAIN_INPUT_BUS_PS2;
 
-if (VIR_REALLOC_N(def-inputs, def-ninputs + 1)  0) {
-virDomainInputDefFree(input);
+if (virDomainDefMaybeAddInput(def,
+  VIR_DOMAIN_INPUT_TYPE_MOUSE,
+  input_bus)  0)
 goto error;
+
+/*Ignore keyboard for XEN, only add a PS2 keyboard device for hvm*/
+if (STREQ(def-os.type, hvm)) {
+if (virDomainDefMaybeAddInput(def,
+  VIR_DOMAIN_INPUT_TYPE_KBD,
+  input_bus)  0)
+goto error;
 }
-def-inputs[def-ninputs] = input;
-def-ninputs++;
 }
 
-
 /* analysis of the sound devices */
 if ((n = virXPathNodeSet(./devices/sound, ctxt, nodes))  0) {
 goto error;
@@ -17525,16 +17524,17 @@ virDomainDefFormatInternal(virDomainDefPtr def,
 }
 
 if (def-ngraphics  0) {
-/* If graphics is enabled, add the implicit mouse */
-virDomainInputDef autoInput = {
-VIR_DOMAIN_INPUT_TYPE_MOUSE,
-STREQ(def-os.type, hvm) ?
-VIR_DOMAIN_INPUT_BUS_PS2

[libvirt] [PATCH v6 5/6] qemu: parse qemu command line for USB keyboard

2014-02-13 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

This patch is to format qemu command line and xen driver for USB keyboard
and add test cases for it.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/qemu/qemu_command.c| 41 --
 src/xenxs/xen_sxpr.c   | 27 +-
 src/xenxs/xen_xm.c | 30 +++-
 .../qemuxml2argv-pseries-usb-kbd.args  |  9 +
 .../qemuxml2argv-pseries-usb-kbd.xml   | 19 ++
 tests/qemuxml2argvtest.c   |  3 ++
 6 files changed, 103 insertions(+), 26 deletions(-)
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.xml

diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index e499d54..d7d39b3 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -5306,9 +5306,19 @@ qemuBuildUSBInputDevStr(virDomainDefPtr def,
 {
 virBuffer buf = VIR_BUFFER_INITIALIZER;
 
-virBufferAsprintf(buf, %s,id=%s,
-  dev-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ?
-  usb-mouse : usb-tablet, dev-info.alias);
+switch (dev-type) {
+case VIR_DOMAIN_INPUT_TYPE_MOUSE:
+virBufferAsprintf(buf, usb-mouse,id=%s, dev-info.alias);
+break;
+case VIR_DOMAIN_INPUT_TYPE_TABLET:
+virBufferAsprintf(buf, usb-tablet,id=%s, dev-info.alias);
+break;
+case VIR_DOMAIN_INPUT_TYPE_KBD:
+if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_USB_KBD))
+goto error;
+virBufferAsprintf(buf, usb-kbd,id=%s, dev-info.alias);
+break;
+}
 
 if (qemuBuildDeviceAddressStr(buf, def, dev-info, qemuCaps)  0)
 goto error;
@@ -9044,9 +9054,17 @@ qemuBuildCommandLine(virConnectPtr conn,
 virCommandAddArg(cmd, optstr);
 VIR_FREE(optstr);
 } else {
-virCommandAddArgList(cmd, -usbdevice,
- input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE
- ? mouse : tablet, NULL);
+switch (input-type) {
+case VIR_DOMAIN_INPUT_TYPE_MOUSE:
+virCommandAddArgList(cmd, -usbdevice, mouse, NULL);
+break;
+case VIR_DOMAIN_INPUT_TYPE_TABLET:
+virCommandAddArgList(cmd, -usbdevice, tablet, 
NULL);
+break;
+case VIR_DOMAIN_INPUT_TYPE_KBD:
+virCommandAddArgList(cmd, -usbdevice, keyboard, 
NULL);
+break;
+}
 }
 }
 }
@@ -11720,20 +11738,23 @@ qemuParseCommandLine(virCapsPtr qemuCaps,
 } else if (STREQ(arg, -usbdevice)) {
 WANT_VALUE();
 if (STREQ(val, tablet) ||
-STREQ(val, mouse)) {
+STREQ(val, mouse) ||
+STREQ(val, keyboard)) {
 virDomainInputDefPtr input;
 if (VIR_ALLOC(input)  0)
 goto error;
 input-bus = VIR_DOMAIN_INPUT_BUS_USB;
 if (STREQ(val, tablet))
 input-type = VIR_DOMAIN_INPUT_TYPE_TABLET;
-else
+else if (STREQ(val, mouse))
 input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
-if (VIR_REALLOC_N(def-inputs, def-ninputs+1)  0) {
+else
+input-type = VIR_DOMAIN_INPUT_TYPE_KBD;
+
+if (VIR_APPEND_ELEMENT(def-inputs, def-ninputs, input)  0) {
 virDomainInputDefFree(input);
 goto error;
 }
-def-inputs[def-ninputs++] = input;
 } else if (STRPREFIX(val, disk:)) {
 if (VIR_ALLOC(disk)  0)
 goto error;
diff --git a/src/xenxs/xen_sxpr.c b/src/xenxs/xen_sxpr.c
index d514725..79cc20e 100644
--- a/src/xenxs/xen_sxpr.c
+++ b/src/xenxs/xen_sxpr.c
@@ -724,21 +724,23 @@ xenParseSxprUSB(virDomainDefPtr def,
 tmp = sexpr_node(node, usbdevice);
 if (tmp  *tmp) {
 if (STREQ(tmp, tablet) ||
-STREQ(tmp, mouse)) {
+STREQ(tmp, mouse) ||
+STREQ(tmp, keyboard)) {
 virDomainInputDefPtr input;
 if (VIR_ALLOC(input)  0)
 goto error;
 input-bus = VIR_DOMAIN_INPUT_BUS_USB;
 if (STREQ(tmp, tablet))
 input-type = VIR_DOMAIN_INPUT_TYPE_TABLET;
-else
+else if (STREQ(tmp, mouse))
 input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
+else
+input-type = VIR_DOMAIN_INPUT_TYPE_KBD

[libvirt] [PATCH v6 6/6] Add a default USB keyboard and USB mouse for PPC64

2014-02-13 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

There is no keyboard working on PPC64 and PS2 mouse is only for PPC64
when graphics are enabled. It needs to add a USB keyboard and USB mouse for it.

This patch is to add a USB keyboard and USB mouse when graphics are enabled.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/qemu/qemu_domain.c | 23 +-
 .../qemuxml2argvdata/qemuxml2argv-pseries-disk.xml |  2 ++
 2 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index a665061..7f4ff0e 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -691,6 +691,8 @@ qemuDomainDefPostParse(virDomainDefPtr def,
 bool addPCIRoot = false;
 bool addPCIeRoot = false;
 bool addDefaultMemballoon = true;
+bool addDefaultUSBKBD = false;
+bool addDefaultUSBMouse = false;
 
 /* check for emulator and create a default one if needed */
 if (!def-emulator 
@@ -732,9 +734,14 @@ qemuDomainDefPostParse(virDomainDefPtr def,
addDefaultMemballoon = false;
break;
 
+case VIR_ARCH_PPC64:
+addPCIRoot = true;
+addDefaultUSBKBD = true;
+addDefaultUSBMouse = true;
+break;
+
 case VIR_ARCH_ALPHA:
 case VIR_ARCH_PPC:
-case VIR_ARCH_PPC64:
 case VIR_ARCH_PPCEMB:
 case VIR_ARCH_SH4:
 case VIR_ARCH_SH4EB:
@@ -787,6 +794,20 @@ qemuDomainDefPostParse(virDomainDefPtr def,
 def-memballoon = memballoon;
 }
 
+if (addDefaultUSBKBD 
+def-ngraphics  0 
+virDomainDefMaybeAddInput(def,
+  VIR_DOMAIN_INPUT_TYPE_KBD,
+  VIR_DOMAIN_INPUT_BUS_USB)  0)
+return -1;
+
+if (addDefaultUSBMouse 
+def-ngraphics  0 
+virDomainDefMaybeAddInput(def,
+  VIR_DOMAIN_INPUT_TYPE_MOUSE,
+  VIR_DOMAIN_INPUT_BUS_USB)  0)
+return -1;
+
 return 0;
 }
 
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml 
b/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml
index 8dde776..64b70f3 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml
@@ -30,6 +30,8 @@
 controller type='usb' index='0'/
 controller type='scsi' index='0'/
 controller type='pci' index='0' model='pci-root'/
+input type='keyboard' bus='usb'/
+input type='mouse' bus='usb'/
 graphics type='sdl'/
 video
   model type='cirrus' vram='9216' heads='1'/
-- 
1.8.2.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


Re: [libvirt] [PATCH v6 2/6] conf: Add one interface to add default input devices

2014-02-13 Thread Li Zhang

On 2014年02月13日 20:37, Ján Tomko wrote:

On 02/13/2014 09:48 AM, Li Zhang wrote:

From: Li Zhang zhlci...@linux.vnet.ibm.com

This patch is to add one new interface to add input devices.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
  src/conf/domain_conf.c   | 29 +
  src/conf/domain_conf.h   |  4 
  src/libvirt_private.syms |  1 +
  3 files changed, 34 insertions(+)

ACK.


diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 9d344bc..786f9d1 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -11043,6 +11043,35 @@ virDomainDefMaybeAddController(virDomainDefPtr def,
  return 0;
  }
  
+int

+virDomainDefMaybeAddInput(virDomainDefPtr def,
+   int type,
+   int bus)
+{
+size_t i;
+virDomainInputDefPtr input;
+
+for (i = 0; i  def-ninputs; i++) {
+if (def-inputs[i]-type == type 
+def-inputs[i]-bus == bus)
+return 0;
+}
+
+if (VIR_ALLOC(input)  0)
+return -1;
+
+input-type = type;
+input-bus = bus;
+
+if (VIR_APPEND_ELEMENT(def-inputs, def-ninputs, input)  0) {
+VIR_FREE(input);
+return -1;
+}
+
+return 0;
+}
+
+

Nitpick: I'd move this extra line above the function, to have them separated
evenly by 2 lines.


Ah, I will remove it in next version :)


  
  /* Parse a memory element located at XPATH within CTXT, and store the

   * result into MEM.  If REQUIRED, then the value must exist;

Jan



--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Re: [libvirt] [PATCH v6 4/6] qemu_cap: Add USB keyboard capability

2014-02-13 Thread Li Zhang

On 2014年02月13日 20:37, Ján Tomko wrote:

On 02/13/2014 09:48 AM, Li Zhang wrote:

From: Li Zhang zhlci...@linux.vnet.ibm.com

QEMU can support USB keyboard but libvirt haven't supportted it yet.
This patch is to add USB keyboard capabilities and test cases.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
  src/qemu/qemu_capabilities.c  | 3 +++
  src/qemu/qemu_capabilities.h  | 1 +
  tests/qemucapabilitiesdata/caps_1.2.2-1.caps  | 1 +
  tests/qemucapabilitiesdata/caps_1.3.1-1.caps  | 1 +
  tests/qemucapabilitiesdata/caps_1.4.2-1.caps  | 1 +
  tests/qemucapabilitiesdata/caps_1.5.3-1.caps  | 1 +
  tests/qemucapabilitiesdata/caps_1.6.0-1.caps  | 1 +
  tests/qemucapabilitiesdata/caps_1.6.50-1.caps | 1 +
  tests/qemuhelptest.c  | 8 
  9 files changed, 18 insertions(+)


ACK


diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index e7d953a..0433607 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -249,6 +249,8 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST,
enable-fips,
spice-file-xfer-disable,
spiceport,
+
+  usb-kbd, /*165*/

There should be spaces around the comment: /* 165 */


got it.



  );
  
  struct _virQEMUCaps {

@@ -1403,6 +1405,7 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = {
  { virtio-mmio, QEMU_CAPS_DEVICE_VIRTIO_MMIO },
  { ich9-intel-hda, QEMU_CAPS_DEVICE_ICH9_INTEL_HDA },
  { pvpanic, QEMU_CAPS_DEVICE_PANIC },
+{ usb-kbd, QEMU_CAPS_DEVICE_USB_KBD },
  };
  
  static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsVirtioBlk[] = {

diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
index a4eecb6..dbc4c9a 100644
--- a/src/qemu/qemu_capabilities.h
+++ b/src/qemu/qemu_capabilities.h
@@ -203,6 +203,7 @@ enum virQEMUCapsFlags {
  QEMU_CAPS_ENABLE_FIPS= 162, /* -enable-fips */
  QEMU_CAPS_SPICE_FILE_XFER_DISABLE = 163, /* -spice 
disable-agent-file-xfer */
  QEMU_CAPS_CHARDEV_SPICEPORT  = 164, /* -chardev spiceport */
+QEMU_CAPS_DEVICE_USB_KBD = 165, /*-device usb-kbd*/

Same here.

  
  QEMU_CAPS_LAST,   /* this must always be the last item */

  };

Jan



--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Re: [libvirt] [PATCH v6 3/6] conf: Remove the implicit PS2 mouse for non-X86 platforms and add an implicit PS2 keyboard device for X86 platforms.

2014-02-13 Thread Li Zhang

On 2014年02月13日 20:37, Ján Tomko wrote:

On 02/13/2014 09:48 AM, Li Zhang wrote:

From: Li Zhang zhlci...@linux.vnet.ibm.com

PS2 device only works for X86 platform, other platforms may need
USB mouse. Athough it doesn't influence the QEMU command line, but
it's not right to add one PS2 mouse for non-X86 platform.

What's more, PS2 keyboard can be supported for X86.

So, this patch is to remove PS2 mouse for non-x86 platforms and also add
an implicit PS2 keyboard device for X86.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
  src/conf/domain_conf.c | 70 +++---
  src/util/virarch.h |  2 +
  .../qemuxml2argvdata/qemuxml2argv-pseries-disk.xml |  1 -
  3 files changed, 37 insertions(+), 36 deletions(-)
@@ -17525,16 +17524,17 @@ virDomainDefFormatInternal(virDomainDefPtr def,
  }
  
  if (def-ngraphics  0) {

-/* If graphics is enabled, add the implicit mouse */
-virDomainInputDef autoInput = {
-VIR_DOMAIN_INPUT_TYPE_MOUSE,
-STREQ(def-os.type, hvm) ?
-VIR_DOMAIN_INPUT_BUS_PS2 : VIR_DOMAIN_INPUT_BUS_XEN,
-{ .alias = NULL },
-};
-
-if (virDomainInputDefFormat(buf, autoInput, flags)  0)
-goto error;
+/* If graphics is enabled, add the implicit mouse/keyboard */

Just mouse.


Oh, right, I forgot change it.




+if (ARCH_IS_X86(def-os.arch)) {

This fails 'make check' in 'sexpr2xmltest'. It seems arch is set to 'NONE'
when we convert xen s-expression to our XML.

I think we should add these for VIR_ARCH_NONE as well.


Ok, I will do it in next version.




+virDomainInputDef autoInput = {
+VIR_DOMAIN_INPUT_TYPE_MOUSE,
+STREQ(def-os.type, hvm) ?
+VIR_DOMAIN_INPUT_BUS_PS2 : VIR_DOMAIN_INPUT_BUS_XEN,
+{ .alias = NULL },
+};
+if (virDomainInputDefFormat(buf, autoInput, flags)  0)
+goto error;
+}
  
  for (n = 0; n  def-ngraphics; n++)

  if (virDomainGraphicsDefFormat(buf, def-graphics[n], flags)  0)
diff --git a/src/util/virarch.h b/src/util/virarch.h
index b180400..9b66e43 100644
--- a/src/util/virarch.h
+++ b/src/util/virarch.h
@@ -70,6 +70,8 @@ typedef enum {
  VIR_ARCH_LAST,
  } virArch;
  
+#define ARCH_IS_X86(arch)  ((arch) == VIR_ARCH_X86_64 ||\

+(arch) == VIR_ARCH_I686)

This fails 'make syntax-check':
cppi: src/util/virarch.h: line 73: not properly indented


I will correct it in next version soon.



There should be a space between # and define, see:
http://libvirt.org/hacking.html#preprocessor

Other than that, this patch looks okay to me.


Thanks. :)



Jan



--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Re: [libvirt] [PATCH v6 5/6] qemu: parse qemu command line for USB keyboard

2014-02-13 Thread Li Zhang

On 2014年02月13日 20:37, Ján Tomko wrote:

On 02/13/2014 09:48 AM, Li Zhang wrote:

From: Li Zhang zhlci...@linux.vnet.ibm.com

This patch is to format qemu command line and xen driver for USB keyboard
and add test cases for it.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
  src/qemu/qemu_command.c| 41 --
  src/xenxs/xen_sxpr.c   | 27 +-
  src/xenxs/xen_xm.c | 30 +++-
  .../qemuxml2argv-pseries-usb-kbd.args  |  9 +
  .../qemuxml2argv-pseries-usb-kbd.xml   | 19 ++
  tests/qemuxml2argvtest.c   |  3 ++
  6 files changed, 103 insertions(+), 26 deletions(-)
  create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args
  create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.xml

I'd split the patch in two - one for qemu, one for xen.



diff --git a/src/xenxs/xen_sxpr.c b/src/xenxs/xen_sxpr.c
index d514725..79cc20e 100644
--- a/src/xenxs/xen_sxpr.c
+++ b/src/xenxs/xen_sxpr.c
@@ -724,21 +724,23 @@ xenParseSxprUSB(virDomainDefPtr def,
  tmp = sexpr_node(node, usbdevice);
  if (tmp  *tmp) {
  if (STREQ(tmp, tablet) ||
-STREQ(tmp, mouse)) {
+STREQ(tmp, mouse) ||
+STREQ(tmp, keyboard)) {
  virDomainInputDefPtr input;
  if (VIR_ALLOC(input)  0)
  goto error;
  input-bus = VIR_DOMAIN_INPUT_BUS_USB;
  if (STREQ(tmp, tablet))
  input-type = VIR_DOMAIN_INPUT_TYPE_TABLET;
-else
+else if (STREQ(tmp, mouse))
  input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
+else
+input-type = VIR_DOMAIN_INPUT_TYPE_KBD;
  
-if (VIR_REALLOC_N(def-inputs, def-ninputs+1)  0) {

+if (VIR_APPEND_ELEMENT(def-inputs, def-ninputs, input)  
0) {
  VIR_FREE(input);
  goto error;
  }
-def-inputs[def-ninputs++] = input;
  } else {
  /* XXX Handle other non-input USB devices later */
  }
@@ -2144,15 +2146,24 @@ xenFormatSxprInput(virDomainInputDefPtr input,
  return 0;
  
  if (input-type != VIR_DOMAIN_INPUT_TYPE_MOUSE 

-input-type != VIR_DOMAIN_INPUT_TYPE_TABLET) {
+input-type != VIR_DOMAIN_INPUT_TYPE_TABLET 
+input-type != VIR_DOMAIN_INPUT_TYPE_KBD) {
  virReportError(VIR_ERR_INTERNAL_ERROR,
 _(unexpected input type %d), input-type);
  return -1;
  }
  
-virBufferAsprintf(buf, (usbdevice %s),

-  input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ?
-  mouse : tablet);
+switch (input-type) {
+case VIR_DOMAIN_INPUT_TYPE_MOUSE:
+virBufferAsprintf(buf, (usbdevice %s),mouse)
+break;
+case VIR_DOMAIN_INPUT_TYPE_TABLET:
+virBufferAsprintf(buf, (usbdevice %s),tablet)
+break;
+case VIR_DOMAIN_INPUT_TYPE_KBD:
+virBufferAsprintf(buf, (usbdevice %s),keyboard)
+break;
+}

In all three cases there is a space missing between arguments and a semicolon
missing at the end.


ah, sorry for that. :(



  
  return 0;

  }
diff --git a/src/xenxs/xen_xm.c b/src/xenxs/xen_xm.c
index 5e89876..b448e99 100644
--- a/src/xenxs/xen_xm.c
+++ b/src/xenxs/xen_xm.c
@@ -886,14 +886,18 @@ xenParseXM(virConfPtr conf, int xendConfigVersion,
  goto cleanup;
  if (str 
  (STREQ(str, tablet) ||
- STREQ(str, mouse))) {
+ STREQ(str, mouse) ||
+ STREQ(str, keyboard))) {
  virDomainInputDefPtr input;
  if (VIR_ALLOC(input)  0)
  goto cleanup;
  input-bus = VIR_DOMAIN_INPUT_BUS_USB;
-input-type = STREQ(str, tablet) ?
-VIR_DOMAIN_INPUT_TYPE_TABLET :
-VIR_DOMAIN_INPUT_TYPE_MOUSE;
+if (STREQ(str, mouse))
+input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
+else if (STREQ(str, tablet))
+input-type = VIR_DOMAIN_INPUT_TYPE_TABLET;
+else (STREQ(str, keyboard))

s/else/else if/


I will change it.



+input-type = VIR_DOMAIN_INPUT_TYPE_KBD;
  if (VIR_ALLOC_N(def-inputs, 1)  0) {
  virDomainInputDefFree(input);
  goto cleanup;

ACK to the QEMU part. The xen part looks fine to me.

Jan



--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Re: [libvirt] [PATCH v6 1/6] conf: Add a keyboard input device type

2014-02-13 Thread Li Zhang

On 2014年02月14日 00:39, Daniel P. Berrange wrote:

On Thu, Feb 13, 2014 at 04:48:21PM +0800, Li Zhang wrote:


@@ -12422,10 +12426,12 @@ virDomainDefParseXML(xmlDocPtr xml,
   * XXX will this be true for other virt types ? */
  if ((STREQ(def-os.type, hvm) 
   input-bus == VIR_DOMAIN_INPUT_BUS_PS2 
- input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE) ||
+ (input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
+  input-type == VIR_DOMAIN_INPUT_TYPE_KBD)) ||
  (STRNEQ(def-os.type, hvm) 
   input-bus == VIR_DOMAIN_INPUT_BUS_XEN 
- input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE)) {
+ (input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
+  input-type == VIR_DOMAIN_INPUT_TYPE_KBD))) {
  virDomainInputDefFree(input);
  continue;

Later on in this function there is

 /* If graphics are enabled, there's an implicit PS2 mouse */
 if (def-ngraphics  0) {
 virDomainInputDefPtr input;

 if (VIR_ALLOC(input)  0) {
 goto error;
 }
 if (STREQ(def-os.type, hvm)) {
 input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
 input-bus = VIR_DOMAIN_INPUT_BUS_PS2;
 } else {
 input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
 input-bus = VIR_DOMAIN_INPUT_BUS_XEN;
 }

 if (VIR_REALLOC_N(def-inputs, def-ninputs + 1)  0) {
 virDomainInputDefFree(input);
 goto error;
 }
 def-inputs[def-ninputs] = input;
 def-ninputs++;
 }


which needs to take care of keyboards too now.

And some more similar logic in virDomainDefFormatInternal
which needs updating


ok, I will do it in next version soon. :)



Daniel


--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Re: [libvirt] [PATCH v5 1/6] conf: Add a keyboard input device type

2014-02-10 Thread Li Zhang

On 2014年02月03日 23:09, Ján Tomko wrote:

On 12/19/2013 08:50 AM, Li Zhang wrote:

From: Li Zhang zhlci...@linux.vnet.ibm.com

There is no keyboard for non-x86 platforms when graphics are enabled.
It's preferred to add one USB keyboard.

This patch is to add keyboard input device type.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
  docs/schemas/domaincommon.rng |  1 +
  src/conf/domain_conf.c| 18 --
  src/conf/domain_conf.h|  1 +
  3 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index be32c6b..df6253c 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -3167,6 +3167,7 @@
  choice
valuetablet/value
valuemouse/value
+  valuekbd/value
  /choice
/attribute
optional
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 0079234..9c30a78 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -505,7 +505,8 @@ VIR_ENUM_IMPL(virDomainVideo, VIR_DOMAIN_VIDEO_TYPE_LAST,
  
  VIR_ENUM_IMPL(virDomainInput, VIR_DOMAIN_INPUT_TYPE_LAST,

mouse,
-  tablet)
+  tablet,
+  kbd)

Maybe keyboard would sound nicer?


Thanks for your review.
ok, I can change it name.


  
  VIR_ENUM_IMPL(virDomainInputBus, VIR_DOMAIN_INPUT_BUS_LAST,

ps2,
@@ -7659,7 +7660,8 @@ virDomainInputDefParseXML(const char *ostype,
  
  if (STREQ(ostype, hvm)) {

  if (def-bus == VIR_DOMAIN_INPUT_BUS_PS2  /* Only allow mouse 
for ps2 */

The comment is no longer true.


I will remove it in next version.




-def-type != VIR_DOMAIN_INPUT_TYPE_MOUSE) {
+!(def-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
+def-type == VIR_DOMAIN_INPUT_TYPE_KBD)) {
  virReportError(VIR_ERR_INTERNAL_ERROR,
 _(ps2 bus does not support %s input device),
 type);

Jan



--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Re: [libvirt] [PATCH v5 5/6] qemu: parse qemu command line for USB keyboard

2014-02-10 Thread Li Zhang

On 2014年02月03日 23:09, Ján Tomko wrote:

On 12/19/2013 08:50 AM, Li Zhang wrote:

From: Li Zhang zhlci...@linux.vnet.ibm.com

This patch is to format qemu command line and xen driver for USB keyboard
and add test cases for it.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
  src/qemu/qemu_command.c| 41 --
  src/xenxs/xen_sxpr.c   | 27 +-
  src/xenxs/xen_xm.c | 30 +++-
  .../qemuxml2argv-pseries-usb-kbd.args  |  9 +
  .../qemuxml2argv-pseries-usb-kbd.xml   | 19 ++
  tests/qemuxml2argvtest.c   |  3 ++
  6 files changed, 103 insertions(+), 26 deletions(-)
  create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args
  create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.xml




diff --git a/src/xenxs/xen_xm.c b/src/xenxs/xen_xm.c
index 5e89876..9e19bb7 100644
--- a/src/xenxs/xen_xm.c
+++ b/src/xenxs/xen_xm.c
@@ -886,14 +886,18 @@ xenParseXM(virConfPtr conf, int xendConfigVersion,
  goto cleanup;
  if (str 
  (STREQ(str, tablet) ||
- STREQ(str, mouse))) {
+ STREQ(str, mouse) ||
+ STREQ(str, kbd))) {
  virDomainInputDefPtr input;
  if (VIR_ALLOC(input)  0)
  goto cleanup;
  input-bus = VIR_DOMAIN_INPUT_BUS_USB;
-input-type = STREQ(str, tablet) ?
-VIR_DOMAIN_INPUT_TYPE_TABLET :
-VIR_DOMAIN_INPUT_TYPE_MOUSE;
+if (STREQ(str, mouse))
+input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
+else if (STREQ(str, tablet))
+input-type = VIR_DOMAIN_INPUT_TYPE_TABLET;
+else (STREQ(str, kbd))
+input-type = VIR_DOMAIN_INPUT_TYPE_KBD;
  if (VIR_ALLOC_N(def-inputs, 1)  0) {
  virDomainInputDefFree(input);
  goto cleanup;
@@ -1746,10 +1750,20 @@ virConfPtr xenFormatXM(virConnectPtr conn,
  if (def-inputs[i]-bus == VIR_DOMAIN_INPUT_BUS_USB) {
  if (xenXMConfigSetInt(conf, usb, 1)  0)
  goto cleanup;
-if (xenXMConfigSetString(conf, usbdevice,
- def-inputs[i]-type == 
VIR_DOMAIN_INPUT_TYPE_MOUSE ?
- mouse : tablet)  0)
-goto cleanup;
+switch (def-inputs[i]-type) {
+case VIR_DOMAIN_INPUT_TYPE_MOUSE:
+if (xenXMConfigSetString(conf, usbdevice, mouse)  
0)
+goto cleanup;
+break;
+case VIR_DOMAIN_INPUT_TYPE_TABLET:
+if (xenXMConfigSetString(conf, usbdevice, tablet) 
 0)
+goto cleanup;
+break;
+case VIR_DOMAIN_INPUT_TYPE_KBD:
+if (xenXMConfigSetString(conf, usbdevice, kbd)  0)
+goto cleanup;
+break;
+}
  break;
  }
  }

I'm not familiar with the xen driver, but I'd feel safer just ignoring the
implicit USB keyboard. I think they should also be in a separate commit.


I'm not familiar with it either. I just added it according to Dan's 
comments.




Jan



--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Re: [libvirt] [PATCH v5 3/6] conf: Remove PS2 mouse device for non-X86 platforms

2014-02-10 Thread Li Zhang

On 2014年02月03日 23:09, Ján Tomko wrote:

On 12/19/2013 08:50 AM, Li Zhang wrote:

From: Li Zhang zhlci...@linux.vnet.ibm.com

PS2 device only works for X86 platform, other platforms may need
USB mouse. Athough it doesn't influence the QEMU command line, but
It's not right to add one PS2 mouse for non-X86 platform.

This patch is to remove PS2 device definition from other platforms.
Add one default USB mouse for PPC64. It can be also added for other
platforms if necessary.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
  src/conf/domain_conf.c | 71 +++---
  src/util/virarch.h |  2 +
  ...qemuhotplug-console-compat-2+console-virtio.xml |  1 +
  .../qemuxml2argv-console-compat-2.xml  |  1 +
  .../qemuxml2argv-graphics-listen-network.xml   |  1 +
  .../qemuxml2argv-graphics-listen-network2.xml  |  1 +
  .../qemuxml2argv-graphics-sdl-fullscreen.xml   |  1 +
  .../qemuxml2argvdata/qemuxml2argv-graphics-sdl.xml |  1 +
  .../qemuxml2argv-graphics-spice-compression.xml|  1 +
  .../qemuxml2argv-graphics-spice-qxl-vga.xml|  1 +
  .../qemuxml2argv-graphics-spice-timeout.xml|  2 +
  .../qemuxml2argv-graphics-spice.xml|  1 +
  .../qemuxml2argv-graphics-vnc-policy.xml   |  1 +
  .../qemuxml2argv-graphics-vnc-sasl.xml |  1 +
  .../qemuxml2argv-graphics-vnc-socket.xml   |  1 +
  .../qemuxml2argv-graphics-vnc-tls.xml  |  1 +
  .../qemuxml2argv-graphics-vnc-websocket.xml|  1 +
  .../qemuxml2argvdata/qemuxml2argv-graphics-vnc.xml |  1 +
  tests/qemuxml2argvdata/qemuxml2argv-input-xen.xml  |  1 +
  .../qemuxml2argv-net-bandwidth.xml |  1 +
  tests/qemuxml2argvdata/qemuxml2argv-pci-bridge.xml |  1 +
  .../qemuxml2argvdata/qemuxml2argv-pseries-disk.xml |  1 -
  .../qemuxml2xmlout-graphics-listen-network2.xml|  1 +
  .../qemuxml2xmlout-graphics-spice-timeout.xml  |  1 +
  tests/vmx2xmldata/vmx2xml-graphics-vnc.xml |  1 +
  25 files changed, 61 insertions(+), 36 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 1a1ac54..e495884 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -12339,30 +12340,25 @@ virDomainDefParseXML(xmlDocPtr xml,
  }
  VIR_FREE(nodes);
  
-/* If graphics are enabled, there's an implicit PS2 mouse */

-if (def-ngraphics  0) {
-virDomainInputDefPtr input;
+/* If graphics are enabled, there's an implicit PS2 mouse and PS2 keyboard 
*/
+if (def-ngraphics  0 
+ARCH_IS_X86(def-os.arch)) {
+int input_bus = VIR_DOMAIN_INPUT_BUS_XEN;
+
+if (STREQ(def-os.type, hvm))
+input_bus = VIR_DOMAIN_INPUT_BUS_PS2;
  
-if (VIR_ALLOC(input)  0) {

+if (virDomainDefMaybeAddInput(def,
+  VIR_DOMAIN_INPUT_TYPE_MOUSE,
+  input_bus)  0)
  goto error;
-}
-if (STREQ(def-os.type, hvm)) {
-input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
-input-bus = VIR_DOMAIN_INPUT_BUS_PS2;
-} else {
-input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
-input-bus = VIR_DOMAIN_INPUT_BUS_XEN;
-}
  
-if (VIR_REALLOC_N(def-inputs, def-ninputs + 1)  0) {

-virDomainInputDefFree(input);
+if (virDomainDefMaybeAddInput(def,
+  VIR_DOMAIN_INPUT_TYPE_KBD,
+  input_bus)  0)

This patch also adds an implicit keyboard, without mentioning it in the commit
message.


I will add it in next version.




  goto error;
-}
-def-inputs[def-ninputs] = input;
-def-ninputs++;
  }
  
-

  /* analysis of the sound devices */
  if ((n = virXPathNodeSet(./devices/sound, ctxt, nodes))  0) {
  goto error;
@@ -17338,16 +17334,21 @@ virDomainDefFormatInternal(virDomainDefPtr def,
  }
  
  if (def-ngraphics  0) {

-/* If graphics is enabled, add the implicit mouse */
-virDomainInputDef autoInput = {
-VIR_DOMAIN_INPUT_TYPE_MOUSE,
-STREQ(def-os.type, hvm) ?
-VIR_DOMAIN_INPUT_BUS_PS2 : VIR_DOMAIN_INPUT_BUS_XEN,
-{ .alias = NULL },
-};
-
-if (virDomainInputDefFormat(buf, autoInput, flags)  0)
-goto error;
+/* If graphics is enabled, add the implicit mouse/keyboard */
+if (ARCH_IS_X86(def-os.arch)) {
+virDomainInputDef autoInput = {
+VIR_DOMAIN_INPUT_TYPE_MOUSE,
+STREQ(def-os.type, hvm) ?
+VIR_DOMAIN_INPUT_BUS_PS2 : VIR_DOMAIN_INPUT_BUS_XEN,
+{ .alias = NULL },
+};
+if (virDomainInputDefFormat(buf, autoInput, flags)  0)
+goto error;
+
+autoInput.type = VIR_DOMAIN_INPUT_TYPE_KBD

Re: [libvirt] [PATCH v5 0/6] Support keyboard device

2014-01-07 Thread Li Zhang

ping

On 2013年12月19日 15:50, Li Zhang wrote:

From: Li Zhang zhlci...@linux.vnet.ibm.com

This patchset is to add keyboard input device.

For PPC64, it doesn't support a default keyboard device when the graphic
is enabled. Libvirt supports QEMU command line as -device VGA which
won't create any keyboard device for it. So it requires libvirt to add
a default USB keyboard device for it.

This patchset is to add keyboard input device and a default USB keyboard
for PPC64.

The related discussion in QEMU community:
http://lists.nongnu.org/archive/html/qemu-devel/2013-11/msg01734.html

Li Zhang (6):
   conf: Add a keyboard input device type
   conf: Add one interface to add default input devices.
   conf: Remove PS2 mouse device for non-X86 platforms
   qemu_cap: Add USB keyboard capability
   qemu: parse qemu command line for USB keyboard
   Add a default USB keyboard and USB mouse for PPC64

  v5 - v4:
* Add PS/2 KBD definition in XML file. (Daniel.P.Berrange)
* Allow PS/2 KBD devices and set KBD default bus as PS2 for X86, USB for 
non-x86. (Daniel.P.Berrange)
* Add an implicit PS/2 KBD as PS/2 mouse. (Danniel.P.Berrange)

  v4 - v3:
* Don't remove PS2 mouse device for other virtualization drivers (Jan 
Tomko).

  v3 - v2:
* Handle the KBD device type in xen and QEMU driver. (Daniel.P.Berrange)
* Remove PS2 mouse device for non-X86 platforms.
* Move virDomainDefMaybeAddInput to a new patch. (Jan Tomko)
* Replace VIR_REALLOC_N with VIR_APPEND_ELEMENT. (Jan Tomoko)
* Fix several typos. (Jan Tomoko)
* Add a virReportError when QEMU_CAPS_DEVICE_USB_KBD can't be gotten. (Jan 
Tomoko)

  v2 - v1:
* change ifs to switch clause.
* reconstruct the patches

  docs/schemas/domaincommon.rng  |  1 +
  src/conf/domain_conf.c | 92 ++
  src/conf/domain_conf.h |  5 ++
  src/libvirt_private.syms   |  1 +
  src/qemu/qemu_capabilities.c   |  2 +
  src/qemu/qemu_capabilities.h   |  1 +
  src/qemu/qemu_command.c| 41 +++---
  src/qemu/qemu_domain.c | 23 +-
  src/util/virarch.h |  2 +
  src/xenxs/xen_sxpr.c   | 27 +--
  src/xenxs/xen_xm.c | 30 +--
  tests/qemucapabilitiesdata/caps_1.2.2-1.caps   |  1 +
  tests/qemucapabilitiesdata/caps_1.3.1-1.caps   |  1 +
  tests/qemucapabilitiesdata/caps_1.4.2-1.caps   |  1 +
  tests/qemucapabilitiesdata/caps_1.5.3-1.caps   |  1 +
  tests/qemucapabilitiesdata/caps_1.6.0-1.caps   |  2 +
  tests/qemucapabilitiesdata/caps_1.6.50-1.caps  |  1 +
  tests/qemuhelptest.c   |  8 ++
  .../qemuxml2argvdata/qemuxml2argv-pseries-disk.xml |  3 +-
  .../qemuxml2argv-pseries-usb-kbd.args  |  9 +++
  .../qemuxml2argv-pseries-usb-kbd.xml   | 19 +
  tests/qemuxml2argvtest.c   |  3 +
  22 files changed, 212 insertions(+), 62 deletions(-)
  create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args
  create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.xml



--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

[libvirt] [PATCH v5 0/6] Support keyboard device

2013-12-18 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

This patchset is to add keyboard input device.

For PPC64, it doesn't support a default keyboard device when the graphic
is enabled. Libvirt supports QEMU command line as -device VGA which
won't create any keyboard device for it. So it requires libvirt to add
a default USB keyboard device for it.

This patchset is to add keyboard input device and a default USB keyboard
for PPC64.

The related discussion in QEMU community:
http://lists.nongnu.org/archive/html/qemu-devel/2013-11/msg01734.html

Li Zhang (6):
  conf: Add a keyboard input device type
  conf: Add one interface to add default input devices.
  conf: Remove PS2 mouse device for non-X86 platforms
  qemu_cap: Add USB keyboard capability
  qemu: parse qemu command line for USB keyboard
  Add a default USB keyboard and USB mouse for PPC64

 v5 - v4:
   * Add PS/2 KBD definition in XML file. (Daniel.P.Berrange)
   * Allow PS/2 KBD devices and set KBD default bus as PS2 for X86, USB for 
non-x86. (Daniel.P.Berrange)
   * Add an implicit PS/2 KBD as PS/2 mouse. (Danniel.P.Berrange)

 v4 - v3:
   * Don't remove PS2 mouse device for other virtualization drivers (Jan Tomko).

 v3 - v2:
   * Handle the KBD device type in xen and QEMU driver. (Daniel.P.Berrange)
   * Remove PS2 mouse device for non-X86 platforms.
   * Move virDomainDefMaybeAddInput to a new patch. (Jan Tomko)
   * Replace VIR_REALLOC_N with VIR_APPEND_ELEMENT. (Jan Tomoko)
   * Fix several typos. (Jan Tomoko)
   * Add a virReportError when QEMU_CAPS_DEVICE_USB_KBD can't be gotten. (Jan 
Tomoko)

 v2 - v1:
   * change ifs to switch clause.
   * reconstruct the patches

 docs/schemas/domaincommon.rng  |  1 +
 src/conf/domain_conf.c | 92 ++
 src/conf/domain_conf.h |  5 ++
 src/libvirt_private.syms   |  1 +
 src/qemu/qemu_capabilities.c   |  2 +
 src/qemu/qemu_capabilities.h   |  1 +
 src/qemu/qemu_command.c| 41 +++---
 src/qemu/qemu_domain.c | 23 +-
 src/util/virarch.h |  2 +
 src/xenxs/xen_sxpr.c   | 27 +--
 src/xenxs/xen_xm.c | 30 +--
 tests/qemucapabilitiesdata/caps_1.2.2-1.caps   |  1 +
 tests/qemucapabilitiesdata/caps_1.3.1-1.caps   |  1 +
 tests/qemucapabilitiesdata/caps_1.4.2-1.caps   |  1 +
 tests/qemucapabilitiesdata/caps_1.5.3-1.caps   |  1 +
 tests/qemucapabilitiesdata/caps_1.6.0-1.caps   |  2 +
 tests/qemucapabilitiesdata/caps_1.6.50-1.caps  |  1 +
 tests/qemuhelptest.c   |  8 ++
 .../qemuxml2argvdata/qemuxml2argv-pseries-disk.xml |  3 +-
 .../qemuxml2argv-pseries-usb-kbd.args  |  9 +++
 .../qemuxml2argv-pseries-usb-kbd.xml   | 19 +
 tests/qemuxml2argvtest.c   |  3 +
 22 files changed, 212 insertions(+), 62 deletions(-)
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.xml

-- 
1.8.2.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH v5 1/6] conf: Add a keyboard input device type

2013-12-18 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

There is no keyboard for non-x86 platforms when graphics are enabled.
It's preferred to add one USB keyboard.

This patch is to add keyboard input device type.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 docs/schemas/domaincommon.rng |  1 +
 src/conf/domain_conf.c| 18 --
 src/conf/domain_conf.h|  1 +
 3 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index be32c6b..df6253c 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -3167,6 +3167,7 @@
 choice
   valuetablet/value
   valuemouse/value
+  valuekbd/value
 /choice
   /attribute
   optional
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 0079234..9c30a78 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -505,7 +505,8 @@ VIR_ENUM_IMPL(virDomainVideo, VIR_DOMAIN_VIDEO_TYPE_LAST,
 
 VIR_ENUM_IMPL(virDomainInput, VIR_DOMAIN_INPUT_TYPE_LAST,
   mouse,
-  tablet)
+  tablet,
+  kbd)
 
 VIR_ENUM_IMPL(virDomainInputBus, VIR_DOMAIN_INPUT_BUS_LAST,
   ps2,
@@ -7659,7 +7660,8 @@ virDomainInputDefParseXML(const char *ostype,
 
 if (STREQ(ostype, hvm)) {
 if (def-bus == VIR_DOMAIN_INPUT_BUS_PS2  /* Only allow mouse 
for ps2 */
-def-type != VIR_DOMAIN_INPUT_TYPE_MOUSE) {
+!(def-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
+def-type == VIR_DOMAIN_INPUT_TYPE_KBD)) {
 virReportError(VIR_ERR_INTERNAL_ERROR,
_(ps2 bus does not support %s input device),
type);
@@ -7677,7 +7679,8 @@ virDomainInputDefParseXML(const char *ostype,
_(unsupported input bus %s),
bus);
 }
-if (def-type != VIR_DOMAIN_INPUT_TYPE_MOUSE) {
+if (def-type != VIR_DOMAIN_INPUT_TYPE_MOUSE 
+def-type != VIR_DOMAIN_INPUT_TYPE_KBD) {
 virReportError(VIR_ERR_INTERNAL_ERROR,
_(xen bus does not support %s input device),
type);
@@ -7686,7 +7689,8 @@ virDomainInputDefParseXML(const char *ostype,
 }
 } else {
 if (STREQ(ostype, hvm)) {
-if (def-type == VIR_DOMAIN_INPUT_TYPE_MOUSE)
+if (def-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
+def-type == VIR_DOMAIN_INPUT_TYPE_KBD)
 def-bus = VIR_DOMAIN_INPUT_BUS_PS2;
 else
 def-bus = VIR_DOMAIN_INPUT_BUS_USB;
@@ -12275,10 +12279,12 @@ virDomainDefParseXML(xmlDocPtr xml,
  * XXX will this be true for other virt types ? */
 if ((STREQ(def-os.type, hvm) 
  input-bus == VIR_DOMAIN_INPUT_BUS_PS2 
- input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE) ||
+ (input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
+  input-type == VIR_DOMAIN_INPUT_TYPE_KBD)) ||
 (STRNEQ(def-os.type, hvm) 
  input-bus == VIR_DOMAIN_INPUT_BUS_XEN 
- input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE)) {
+ (input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
+  input-type == VIR_DOMAIN_INPUT_TYPE_KBD))) {
 virDomainInputDefFree(input);
 continue;
 }
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 647d115..23b2b9b 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -1235,6 +1235,7 @@ struct _virDomainTPMDef {
 enum virDomainInputType {
 VIR_DOMAIN_INPUT_TYPE_MOUSE,
 VIR_DOMAIN_INPUT_TYPE_TABLET,
+VIR_DOMAIN_INPUT_TYPE_KBD,
 
 VIR_DOMAIN_INPUT_TYPE_LAST
 };
-- 
1.8.2.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH v5 6/6] Add a default USB keyboard and USB mouse for PPC64

2013-12-18 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

There is no keyboard working on PPC64 and PS2 mouse is only for PPC64
when graphics are enabled. It needs to add a USB keyboard and USB mouse for it.

This patch is to add a USB keyboard and USB mouse when graphics are enabled.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/qemu/qemu_domain.c | 23 +-
 .../qemuxml2argvdata/qemuxml2argv-pseries-disk.xml |  2 ++
 2 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index e964c75..82d6948 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -691,6 +691,8 @@ qemuDomainDefPostParse(virDomainDefPtr def,
 bool addPCIRoot = false;
 bool addPCIeRoot = false;
 bool addDefaultMemballoon = true;
+bool addDefaultUSBKBD = false;
+bool addDefaultUSBMouse = false;
 
 /* check for emulator and create a default one if needed */
 if (!def-emulator 
@@ -728,9 +730,14 @@ qemuDomainDefPostParse(virDomainDefPtr def,
addDefaultMemballoon = false;
break;
 
+case VIR_ARCH_PPC64:
+addPCIRoot = true;
+addDefaultUSBKBD = true;
+addDefaultUSBMouse = true;
+break;
+
 case VIR_ARCH_ALPHA:
 case VIR_ARCH_PPC:
-case VIR_ARCH_PPC64:
 case VIR_ARCH_PPCEMB:
 case VIR_ARCH_SH4:
 case VIR_ARCH_SH4EB:
@@ -783,6 +790,20 @@ qemuDomainDefPostParse(virDomainDefPtr def,
 def-memballoon = memballoon;
 }
 
+if (addDefaultUSBKBD 
+def-ngraphics  0 
+virDomainDefMaybeAddInput(def,
+  VIR_DOMAIN_INPUT_TYPE_KBD,
+  VIR_DOMAIN_INPUT_BUS_USB)  0)
+return -1;
+
+if (addDefaultUSBMouse 
+def-ngraphics  0 
+virDomainDefMaybeAddInput(def,
+  VIR_DOMAIN_INPUT_TYPE_MOUSE,
+  VIR_DOMAIN_INPUT_BUS_USB)  0)
+return -1;
+
 return 0;
 }
 
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml 
b/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml
index 8dde776..ac1767b 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml
@@ -30,6 +30,8 @@
 controller type='usb' index='0'/
 controller type='scsi' index='0'/
 controller type='pci' index='0' model='pci-root'/
+input type='kbd' bus='usb'/
+input type='mouse' bus='usb'/
 graphics type='sdl'/
 video
   model type='cirrus' vram='9216' heads='1'/
-- 
1.8.2.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH v5 2/6] conf: Add one interface to add default input devices

2013-12-18 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

This patch is to add one new interface to add input devices.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/conf/domain_conf.c   | 29 +
 src/conf/domain_conf.h   |  4 
 src/libvirt_private.syms |  1 +
 3 files changed, 34 insertions(+)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 9c30a78..1a1ac54 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -10899,6 +10899,35 @@ virDomainDefMaybeAddController(virDomainDefPtr def,
 return 0;
 }
 
+int
+virDomainDefMaybeAddInput(virDomainDefPtr def,
+   int type,
+   int bus)
+{
+size_t i;
+virDomainInputDefPtr input;
+
+for (i = 0; i  def-ninputs; i++) {
+if (def-inputs[i]-type == type 
+def-inputs[i]-bus == bus)
+return 0;
+}
+
+if (VIR_ALLOC(input)  0)
+return -1;
+
+input-type = type;
+input-bus = bus;
+
+if (VIR_APPEND_ELEMENT(def-inputs, def-ninputs, input)  0) {
+VIR_FREE(input);
+return -1;
+}
+
+return 0;
+}
+
+
 
 /* Parse a memory element located at XPATH within CTXT, and store the
  * result into MEM.  If REQUIRED, then the value must exist;
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 23b2b9b..9efb588 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -2783,6 +2783,10 @@ virDomainDefMaybeAddController(virDomainDefPtr def,
int type,
int idx,
int model);
+int
+virDomainDefMaybeAddInput(virDomainDefPtr def,
+  int type,
+  int bus);
 
 char *virDomainDefGetDefaultEmulator(virDomainDefPtr def, virCapsPtr caps);
 
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 2dbb8f8..14d7086 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -165,6 +165,7 @@ virDomainDefGenSecurityLabelDef;
 virDomainDefGetDefaultEmulator;
 virDomainDefGetSecurityLabelDef;
 virDomainDefMaybeAddController;
+virDomainDefMaybeAddInput;
 virDomainDefNew;
 virDomainDefParseFile;
 virDomainDefParseNode;
-- 
1.8.2.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH v5 3/6] conf: Remove PS2 mouse device for non-X86 platforms

2013-12-18 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

PS2 device only works for X86 platform, other platforms may need
USB mouse. Athough it doesn't influence the QEMU command line, but
It's not right to add one PS2 mouse for non-X86 platform.

This patch is to remove PS2 device definition from other platforms.
Add one default USB mouse for PPC64. It can be also added for other
platforms if necessary.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/conf/domain_conf.c | 71 +++---
 src/util/virarch.h |  2 +
 ...qemuhotplug-console-compat-2+console-virtio.xml |  1 +
 .../qemuxml2argv-console-compat-2.xml  |  1 +
 .../qemuxml2argv-graphics-listen-network.xml   |  1 +
 .../qemuxml2argv-graphics-listen-network2.xml  |  1 +
 .../qemuxml2argv-graphics-sdl-fullscreen.xml   |  1 +
 .../qemuxml2argvdata/qemuxml2argv-graphics-sdl.xml |  1 +
 .../qemuxml2argv-graphics-spice-compression.xml|  1 +
 .../qemuxml2argv-graphics-spice-qxl-vga.xml|  1 +
 .../qemuxml2argv-graphics-spice-timeout.xml|  2 +
 .../qemuxml2argv-graphics-spice.xml|  1 +
 .../qemuxml2argv-graphics-vnc-policy.xml   |  1 +
 .../qemuxml2argv-graphics-vnc-sasl.xml |  1 +
 .../qemuxml2argv-graphics-vnc-socket.xml   |  1 +
 .../qemuxml2argv-graphics-vnc-tls.xml  |  1 +
 .../qemuxml2argv-graphics-vnc-websocket.xml|  1 +
 .../qemuxml2argvdata/qemuxml2argv-graphics-vnc.xml |  1 +
 tests/qemuxml2argvdata/qemuxml2argv-input-xen.xml  |  1 +
 .../qemuxml2argv-net-bandwidth.xml |  1 +
 tests/qemuxml2argvdata/qemuxml2argv-pci-bridge.xml |  1 +
 .../qemuxml2argvdata/qemuxml2argv-pseries-disk.xml |  1 -
 .../qemuxml2xmlout-graphics-listen-network2.xml|  1 +
 .../qemuxml2xmlout-graphics-spice-timeout.xml  |  1 +
 tests/vmx2xmldata/vmx2xml-graphics-vnc.xml |  1 +
 25 files changed, 61 insertions(+), 36 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 1a1ac54..e495884 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -7625,7 +7625,7 @@ error:
 
 /* Parse the XML definition for an input device */
 static virDomainInputDefPtr
-virDomainInputDefParseXML(const char *ostype,
+virDomainInputDefParseXML(const virDomainDef *dom,
   xmlNodePtr node,
   unsigned int flags)
 {
@@ -7658,7 +7658,7 @@ virDomainInputDefParseXML(const char *ostype,
 goto error;
 }
 
-if (STREQ(ostype, hvm)) {
+if (STREQ(dom-os.type, hvm)) {
 if (def-bus == VIR_DOMAIN_INPUT_BUS_PS2  /* Only allow mouse 
for ps2 */
 !(def-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
 def-type == VIR_DOMAIN_INPUT_TYPE_KBD)) {
@@ -7688,9 +7688,10 @@ virDomainInputDefParseXML(const char *ostype,
 }
 }
 } else {
-if (STREQ(ostype, hvm)) {
-if (def-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
-def-type == VIR_DOMAIN_INPUT_TYPE_KBD)
+if (STREQ(dom-os.type, hvm)) {
+if ((def-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ||
+def-type == VIR_DOMAIN_INPUT_TYPE_KBD) 
+ARCH_IS_X86(dom-os.arch))
 def-bus = VIR_DOMAIN_INPUT_BUS_PS2;
 else
 def-bus = VIR_DOMAIN_INPUT_BUS_USB;
@@ -9692,7 +9693,7 @@ virDomainDeviceDefParse(const char *xmlStr,
 goto error;
 break;
 case VIR_DOMAIN_DEVICE_INPUT:
-if (!(dev-data.input = virDomainInputDefParseXML(def-os.type,
+if (!(dev-data.input = virDomainInputDefParseXML(def,
   node, flags)))
 goto error;
 break;
@@ -12288,7 +12289,7 @@ virDomainDefParseXML(xmlDocPtr xml,
 goto error;
 
 for (i = 0; i  n; i++) {
-virDomainInputDefPtr input = virDomainInputDefParseXML(def-os.type,
+virDomainInputDefPtr input = virDomainInputDefParseXML(def,
nodes[i],
flags);
 if (!input)
@@ -12339,30 +12340,25 @@ virDomainDefParseXML(xmlDocPtr xml,
 }
 VIR_FREE(nodes);
 
-/* If graphics are enabled, there's an implicit PS2 mouse */
-if (def-ngraphics  0) {
-virDomainInputDefPtr input;
+/* If graphics are enabled, there's an implicit PS2 mouse and PS2 keyboard 
*/
+if (def-ngraphics  0 
+ARCH_IS_X86(def-os.arch)) {
+int input_bus = VIR_DOMAIN_INPUT_BUS_XEN;
+
+if (STREQ(def-os.type, hvm))
+input_bus = VIR_DOMAIN_INPUT_BUS_PS2;
 
-if (VIR_ALLOC(input)  0) {
+if (virDomainDefMaybeAddInput(def,
+  VIR_DOMAIN_INPUT_TYPE_MOUSE,
+  input_bus)  0)
 goto error

[libvirt] [PATCH v5 5/6] qemu: parse qemu command line for USB keyboard

2013-12-18 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

This patch is to format qemu command line and xen driver for USB keyboard
and add test cases for it.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/qemu/qemu_command.c| 41 --
 src/xenxs/xen_sxpr.c   | 27 +-
 src/xenxs/xen_xm.c | 30 +++-
 .../qemuxml2argv-pseries-usb-kbd.args  |  9 +
 .../qemuxml2argv-pseries-usb-kbd.xml   | 19 ++
 tests/qemuxml2argvtest.c   |  3 ++
 6 files changed, 103 insertions(+), 26 deletions(-)
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.xml

diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index a80559e..00072aa 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -5307,9 +5307,19 @@ qemuBuildUSBInputDevStr(virDomainDefPtr def,
 {
 virBuffer buf = VIR_BUFFER_INITIALIZER;
 
-virBufferAsprintf(buf, %s,id=%s,
-  dev-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ?
-  usb-mouse : usb-tablet, dev-info.alias);
+switch (dev-type) {
+case VIR_DOMAIN_INPUT_TYPE_MOUSE:
+virBufferAsprintf(buf, usb-mouse,id=%s, dev-info.alias);
+break;
+case VIR_DOMAIN_INPUT_TYPE_TABLET:
+virBufferAsprintf(buf, usb-tablet,id=%s, dev-info.alias);
+break;
+case VIR_DOMAIN_INPUT_TYPE_KBD:
+if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_USB_KBD))
+goto error;
+virBufferAsprintf(buf, usb-kbd,id=%s, dev-info.alias);
+break;
+}
 
 if (qemuBuildDeviceAddressStr(buf, def, dev-info, qemuCaps)  0)
 goto error;
@@ -8996,9 +9006,17 @@ qemuBuildCommandLine(virConnectPtr conn,
 virCommandAddArg(cmd, optstr);
 VIR_FREE(optstr);
 } else {
-virCommandAddArgList(cmd, -usbdevice,
- input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE
- ? mouse : tablet, NULL);
+switch (input-type) {
+case VIR_DOMAIN_INPUT_TYPE_MOUSE:
+virCommandAddArgList(cmd, -usbdevice, mouse, NULL);
+break;
+case VIR_DOMAIN_INPUT_TYPE_TABLET:
+virCommandAddArgList(cmd, -usbdevice, tablet, 
NULL);
+break;
+case VIR_DOMAIN_INPUT_TYPE_KBD:
+virCommandAddArgList(cmd, -usbdevice, kbd, NULL);
+break;
+}
 }
 }
 }
@@ -11684,20 +11702,23 @@ qemuParseCommandLine(virCapsPtr qemuCaps,
 } else if (STREQ(arg, -usbdevice)) {
 WANT_VALUE();
 if (STREQ(val, tablet) ||
-STREQ(val, mouse)) {
+STREQ(val, mouse) ||
+STREQ(val, kbd)) {
 virDomainInputDefPtr input;
 if (VIR_ALLOC(input)  0)
 goto error;
 input-bus = VIR_DOMAIN_INPUT_BUS_USB;
 if (STREQ(val, tablet))
 input-type = VIR_DOMAIN_INPUT_TYPE_TABLET;
-else
+else if (STREQ(val, mouse))
 input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
-if (VIR_REALLOC_N(def-inputs, def-ninputs+1)  0) {
+else
+input-type = VIR_DOMAIN_INPUT_TYPE_KBD;
+
+if (VIR_APPEND_ELEMENT(def-inputs, def-ninputs, input)  0) {
 virDomainInputDefFree(input);
 goto error;
 }
-def-inputs[def-ninputs++] = input;
 } else if (STRPREFIX(val, disk:)) {
 if (VIR_ALLOC(disk)  0)
 goto error;
diff --git a/src/xenxs/xen_sxpr.c b/src/xenxs/xen_sxpr.c
index d514725..a02f999 100644
--- a/src/xenxs/xen_sxpr.c
+++ b/src/xenxs/xen_sxpr.c
@@ -724,21 +724,23 @@ xenParseSxprUSB(virDomainDefPtr def,
 tmp = sexpr_node(node, usbdevice);
 if (tmp  *tmp) {
 if (STREQ(tmp, tablet) ||
-STREQ(tmp, mouse)) {
+STREQ(tmp, mouse) ||
+STREQ(tmp, kbd)) {
 virDomainInputDefPtr input;
 if (VIR_ALLOC(input)  0)
 goto error;
 input-bus = VIR_DOMAIN_INPUT_BUS_USB;
 if (STREQ(tmp, tablet))
 input-type = VIR_DOMAIN_INPUT_TYPE_TABLET;
-else
+else if (STREQ(tmp, mouse))
 input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
+else
+input-type = VIR_DOMAIN_INPUT_TYPE_KBD

[libvirt] [PATCH v5 4/6] qemu_cap: Add USB keyboard capability

2013-12-18 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

QEMU can support USB keyboard but libvirt haven't supportted it yet.
This patch is to add USB keyboard capabilities and test cases.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/qemu/qemu_capabilities.c  | 2 ++
 src/qemu/qemu_capabilities.h  | 1 +
 tests/qemucapabilitiesdata/caps_1.2.2-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.3.1-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.4.2-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.5.3-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.6.0-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.6.50-1.caps | 1 +
 tests/qemuhelptest.c  | 8 
 9 files changed, 17 insertions(+)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 5e9c65e..f963661 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -246,6 +246,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST,
 
   boot-strict, /* 160 */
   pvpanic, /* 161 */
+  usb-kbd,
 );
 
 struct _virQEMUCaps {
@@ -1398,6 +1399,7 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = {
 { virtio-mmio, QEMU_CAPS_DEVICE_VIRTIO_MMIO },
 { ich9-intel-hda, QEMU_CAPS_DEVICE_ICH9_INTEL_HDA },
 { pvpanic, QEMU_CAPS_DEVICE_PANIC },
+{ usb-kbd, QEMU_CAPS_DEVICE_USB_KBD },
 };
 
 static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsVirtioBlk[] = {
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
index bbf4972..fe487a0 100644
--- a/src/qemu/qemu_capabilities.h
+++ b/src/qemu/qemu_capabilities.h
@@ -200,6 +200,7 @@ enum virQEMUCapsFlags {
 QEMU_CAPS_KVM_PIT_TICK_POLICY = 159, /* kvm-pit.lost_tick_policy */
 QEMU_CAPS_BOOT_STRICT= 160, /* -boot strict */
 QEMU_CAPS_DEVICE_PANIC   = 161, /* -device pvpanic */
+QEMU_CAPS_DEVICE_USB_KBD = 162, /*-device usb-kbd*/
 
 QEMU_CAPS_LAST,   /* this must always be the last item */
 };
diff --git a/tests/qemucapabilitiesdata/caps_1.2.2-1.caps 
b/tests/qemucapabilitiesdata/caps_1.2.2-1.caps
index 73a561d..b620341 100644
--- a/tests/qemucapabilitiesdata/caps_1.2.2-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.2.2-1.caps
@@ -112,4 +112,5 @@
 flag name='usb-storage'/
 flag name='usb-storage.removable'/
 flag name='kvm-pit-lost-tick-policy'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.3.1-1.caps 
b/tests/qemucapabilitiesdata/caps_1.3.1-1.caps
index da15d8b..6b4a8f0 100644
--- a/tests/qemucapabilitiesdata/caps_1.3.1-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.3.1-1.caps
@@ -126,4 +126,5 @@
 flag name='usb-storage'/
 flag name='usb-storage.removable'/
 flag name='kvm-pit-lost-tick-policy'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.4.2-1.caps 
b/tests/qemucapabilitiesdata/caps_1.4.2-1.caps
index c419068..e3d0047 100644
--- a/tests/qemucapabilitiesdata/caps_1.4.2-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.4.2-1.caps
@@ -127,4 +127,5 @@
 flag name='usb-storage.removable'/
 flag name='ich9-intel-hda'/
 flag name='kvm-pit-lost-tick-policy'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.5.3-1.caps 
b/tests/qemucapabilitiesdata/caps_1.5.3-1.caps
index 1e5bb74..7548fb9 100644
--- a/tests/qemucapabilitiesdata/caps_1.5.3-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.5.3-1.caps
@@ -134,4 +134,5 @@
 flag name='boot-strict'/
 flag name='pvpanic'/
 flag name='reboot-timeout'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.6.0-1.caps 
b/tests/qemucapabilitiesdata/caps_1.6.0-1.caps
index c7ce591..e6504f5 100644
--- a/tests/qemucapabilitiesdata/caps_1.6.0-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.6.0-1.caps
@@ -138,4 +138,5 @@
 flag name='boot-strict'/
 flag name='pvpanic'/
 flag name='reboot-timeout'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.6.50-1.caps 
b/tests/qemucapabilitiesdata/caps_1.6.50-1.caps
index ba64177..a5f1f55 100644
--- a/tests/qemucapabilitiesdata/caps_1.6.50-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.6.50-1.caps
@@ -137,4 +137,5 @@
 flag name='boot-strict'/
 flag name='pvpanic'/
 flag name='reboot-timeout'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemuhelptest.c b/tests/qemuhelptest.c
index 3628fbe..6e0a5f8 100644
--- a/tests/qemuhelptest.c
+++ b/tests/qemuhelptest.c
@@ -403,6 +403,7 @@ mymain(void)
 QEMU_CAPS_DEVICE_VMWARE_SVGA,
 QEMU_CAPS_DEVICE_USB_SERIAL,
 QEMU_CAPS_DEVICE_USB_NET,
+QEMU_CAPS_DEVICE_USB_KBD,
 QEMU_CAPS_DEVICE_PCI_BRIDGE);
 DO_TEST(qemu-kvm-0.12.3, 12003, 1, 0,
 QEMU_CAPS_VNC_COLON,
@@ -515,6 +516,7 @@ mymain(void)
 QEMU_CAPS_DEVICE_USB_NET

Re: [libvirt] [PATCH v4 1/6] conf: Add a keyboard input device type

2013-12-13 Thread Li Zhang

On 2013年12月12日 20:36, Daniel P. Berrange wrote:

On Thu, Dec 12, 2013 at 03:17:40PM +0800, Li Zhang wrote:

From: Li Zhang zhlci...@linux.vnet.ibm.com

There is no keyboard for non-x86 platforms when graphics are enabled.
It's preferred to add one USB keyboard.

This patch is to add keyboard input device type.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
  docs/schemas/domaincommon.rng | 1 +
  src/conf/domain_conf.c| 3 ++-
  src/conf/domain_conf.h| 1 +
  3 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index 38c6801..964350d 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -3167,6 +3167,7 @@
  choice
valuetablet/value
valuemouse/value
+  valuekbd/value
  /choice
/attribute
optional
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index e0ab4b1..3dee9a8 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -504,7 +504,8 @@ VIR_ENUM_IMPL(virDomainVideo, VIR_DOMAIN_VIDEO_TYPE_LAST,
  
  VIR_ENUM_IMPL(virDomainInput, VIR_DOMAIN_INPUT_TYPE_LAST,

mouse,
-  tablet)
+  tablet,
+  kbd)
  
  VIR_ENUM_IMPL(virDomainInputBus, VIR_DOMAIN_INPUT_BUS_LAST,

ps2,
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 4934911..8aa5f50 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -1223,6 +1223,7 @@ struct _virDomainTPMDef {
  enum virDomainInputType {
  VIR_DOMAIN_INPUT_TYPE_MOUSE,
  VIR_DOMAIN_INPUT_TYPE_TABLET,
+VIR_DOMAIN_INPUT_TYPE_KBD,
  
  VIR_DOMAIN_INPUT_TYPE_LAST

  };

As before this is seriously incomplete. There is alot of logic
throughout this file that specialcases handling of the input
devices which must be updated at the same time.

eg in virDomainInputDefParseXML you must allow a keyboard device
on PS2 bus, and on Xen bus. You must also set the default bus if
none is specified.

OK, I will add that.



In virDomainDefParseXML  we delete any user specified mouse on
the PS/2 bus since it is implicit. We must do the same with kbd
on PS/2 bus.  We also auto-add an implicit PS/2 mouse and must
do the same with PS/2 kbd


I am a little confused about that, PS/2 mouse is auto-added by QEMU.
Is it necessary to add the device configuration in libvirt?
I  can't find any place to add PS/2 kbd in QEMU.

Thanks.


Daniel


--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Re: [libvirt] [PATCH v4 0/6] Support keyboard device

2013-12-12 Thread Li Zhang

ping ...

On 2013年12月12日 15:17, Li Zhang wrote:

From: Li Zhang zhlci...@linux.vnet.ibm.com

This patchset is to add keyboard input device.

For PPC64, it doesn't support a default keyboard device when the graphic
is enabled. Libvirt supports QEMU command line as -device VGA which
won't create any keyboard device for it. So it requires libvirt to add
a default USB keyboard device for it.

This patchset is to add keyboard input device and a default USB keyboard
for PPC64.

The related discussion in QEMU community:
http://lists.nongnu.org/archive/html/qemu-devel/2013-11/msg01734.html

Li Zhang (6):
   conf: Add a keyboard input device type
   conf: Add one interface to add default input devices.
   conf: Remove PS2 mouse device for non-X86 platforms
   qemu_cap: Add USB keyboard capability
   qemu: parse qemu command line for USB keyboard
   Add a default USB keyboard and USB mouse for PPC64

  v4 - v3:
* Don't remove PS2 mouse device for other virtualization drivers (Jan 
Tomko).

  v3 - v2:
* Handle the KBD device type in xen and QEMU driver. (Daniel.P.Berrange)
* Remove PS2 mouse device for non-X86 platforms.
* Move virDomainDefMaybeAddInput to a new patch. (Jan Tomko)
* Replace VIR_REALLOC_N with VIR_APPEND_ELEMENT. (Jan Tomoko)
* Fix several typos. (Jan Tomoko)
* Add a virReportError when QEMU_CAPS_DEVICE_USB_KBD can't be gotten. (Jan 
Tomoko)

  v2 - v1:
* change ifs to switch clause.
* reconstruct the patches

  docs/schemas/domaincommon.rng  |  1 +
  src/conf/domain_conf.c | 92 ++
  src/conf/domain_conf.h |  5 ++
  src/libvirt_private.syms   |  1 +
  src/qemu/qemu_capabilities.c   |  2 +
  src/qemu/qemu_capabilities.h   |  1 +
  src/qemu/qemu_command.c| 41 +++---
  src/qemu/qemu_domain.c | 23 +-
  src/util/virarch.h |  2 +
  src/xenxs/xen_sxpr.c   | 27 +--
  src/xenxs/xen_xm.c | 30 +--
  tests/qemucapabilitiesdata/caps_1.2.2-1.caps   |  1 +
  tests/qemucapabilitiesdata/caps_1.3.1-1.caps   |  1 +
  tests/qemucapabilitiesdata/caps_1.4.2-1.caps   |  1 +
  tests/qemucapabilitiesdata/caps_1.5.3-1.caps   |  1 +
  tests/qemucapabilitiesdata/caps_1.6.0-1.caps   |  2 +
  tests/qemucapabilitiesdata/caps_1.6.50-1.caps  |  1 +
  tests/qemuhelptest.c   |  8 ++
  .../qemuxml2argvdata/qemuxml2argv-pseries-disk.xml |  3 +-
  .../qemuxml2argv-pseries-usb-kbd.args  |  9 +++
  .../qemuxml2argv-pseries-usb-kbd.xml   | 19 +
  tests/qemuxml2argvtest.c   |  3 +
  22 files changed, 212 insertions(+), 62 deletions(-)
  create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args
  create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.xml



--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

[libvirt] [PATCH v4 5/6] qemu: parse qemu command line for USB keyboard

2013-12-11 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

This patch is to format qemu command line and xen driver for USB keyboard
and add test cases for it.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/qemu/qemu_command.c| 41 --
 src/xenxs/xen_sxpr.c   | 27 +-
 src/xenxs/xen_xm.c | 30 +++-
 .../qemuxml2argv-pseries-usb-kbd.args  |  9 +
 .../qemuxml2argv-pseries-usb-kbd.xml   | 19 ++
 tests/qemuxml2argvtest.c   |  3 ++
 6 files changed, 103 insertions(+), 26 deletions(-)
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.xml

diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 9539be7..e2f449f 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -5307,9 +5307,19 @@ qemuBuildUSBInputDevStr(virDomainDefPtr def,
 {
 virBuffer buf = VIR_BUFFER_INITIALIZER;
 
-virBufferAsprintf(buf, %s,id=%s,
-  dev-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ?
-  usb-mouse : usb-tablet, dev-info.alias);
+switch (dev-type) {
+case VIR_DOMAIN_INPUT_TYPE_MOUSE:
+virBufferAsprintf(buf, usb-mouse,id=%s, dev-info.alias);
+break;
+case VIR_DOMAIN_INPUT_TYPE_TABLET:
+virBufferAsprintf(buf, usb-tablet,id=%s, dev-info.alias);
+break;
+case VIR_DOMAIN_INPUT_TYPE_KBD:
+if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_USB_KBD))
+goto error;
+virBufferAsprintf(buf, usb-kbd,id=%s, dev-info.alias);
+break;
+}
 
 if (qemuBuildDeviceAddressStr(buf, def, dev-info, qemuCaps)  0)
 goto error;
@@ -8996,9 +9006,17 @@ qemuBuildCommandLine(virConnectPtr conn,
 virCommandAddArg(cmd, optstr);
 VIR_FREE(optstr);
 } else {
-virCommandAddArgList(cmd, -usbdevice,
- input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE
- ? mouse : tablet, NULL);
+switch (input-type) {
+case VIR_DOMAIN_INPUT_TYPE_MOUSE:
+virCommandAddArgList(cmd, -usbdevice, mouse, NULL);
+break;
+case VIR_DOMAIN_INPUT_TYPE_TABLET:
+virCommandAddArgList(cmd, -usbdevice, tablet, 
NULL);
+break;
+case VIR_DOMAIN_INPUT_TYPE_KBD:
+virCommandAddArgList(cmd, -usbdevice, kbd, NULL);
+break;
+}
 }
 }
 }
@@ -11668,20 +11686,23 @@ qemuParseCommandLine(virCapsPtr qemuCaps,
 } else if (STREQ(arg, -usbdevice)) {
 WANT_VALUE();
 if (STREQ(val, tablet) ||
-STREQ(val, mouse)) {
+STREQ(val, mouse) ||
+STREQ(val, kbd)) {
 virDomainInputDefPtr input;
 if (VIR_ALLOC(input)  0)
 goto error;
 input-bus = VIR_DOMAIN_INPUT_BUS_USB;
 if (STREQ(val, tablet))
 input-type = VIR_DOMAIN_INPUT_TYPE_TABLET;
-else
+else if (STREQ(val, mouse))
 input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
-if (VIR_REALLOC_N(def-inputs, def-ninputs+1)  0) {
+else
+input-type = VIR_DOMAIN_INPUT_TYPE_KBD;
+
+if (VIR_APPEND_ELEMENT(def-inputs, def-ninputs, input)  0) {
 virDomainInputDefFree(input);
 goto error;
 }
-def-inputs[def-ninputs++] = input;
 } else if (STRPREFIX(val, disk:)) {
 if (VIR_ALLOC(disk)  0)
 goto error;
diff --git a/src/xenxs/xen_sxpr.c b/src/xenxs/xen_sxpr.c
index d514725..a02f999 100644
--- a/src/xenxs/xen_sxpr.c
+++ b/src/xenxs/xen_sxpr.c
@@ -724,21 +724,23 @@ xenParseSxprUSB(virDomainDefPtr def,
 tmp = sexpr_node(node, usbdevice);
 if (tmp  *tmp) {
 if (STREQ(tmp, tablet) ||
-STREQ(tmp, mouse)) {
+STREQ(tmp, mouse) ||
+STREQ(tmp, kbd)) {
 virDomainInputDefPtr input;
 if (VIR_ALLOC(input)  0)
 goto error;
 input-bus = VIR_DOMAIN_INPUT_BUS_USB;
 if (STREQ(tmp, tablet))
 input-type = VIR_DOMAIN_INPUT_TYPE_TABLET;
-else
+else if (STREQ(tmp, mouse))
 input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
+else
+input-type = VIR_DOMAIN_INPUT_TYPE_KBD

[libvirt] [PATCH v4 1/6] conf: Add a keyboard input device type

2013-12-11 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

There is no keyboard for non-x86 platforms when graphics are enabled.
It's preferred to add one USB keyboard.

This patch is to add keyboard input device type.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 docs/schemas/domaincommon.rng | 1 +
 src/conf/domain_conf.c| 3 ++-
 src/conf/domain_conf.h| 1 +
 3 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index 38c6801..964350d 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -3167,6 +3167,7 @@
 choice
   valuetablet/value
   valuemouse/value
+  valuekbd/value
 /choice
   /attribute
   optional
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index e0ab4b1..3dee9a8 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -504,7 +504,8 @@ VIR_ENUM_IMPL(virDomainVideo, VIR_DOMAIN_VIDEO_TYPE_LAST,
 
 VIR_ENUM_IMPL(virDomainInput, VIR_DOMAIN_INPUT_TYPE_LAST,
   mouse,
-  tablet)
+  tablet,
+  kbd)
 
 VIR_ENUM_IMPL(virDomainInputBus, VIR_DOMAIN_INPUT_BUS_LAST,
   ps2,
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 4934911..8aa5f50 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -1223,6 +1223,7 @@ struct _virDomainTPMDef {
 enum virDomainInputType {
 VIR_DOMAIN_INPUT_TYPE_MOUSE,
 VIR_DOMAIN_INPUT_TYPE_TABLET,
+VIR_DOMAIN_INPUT_TYPE_KBD,
 
 VIR_DOMAIN_INPUT_TYPE_LAST
 };
-- 
1.8.2.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH v4 4/6] qemu_cap: Add USB keyboard capability

2013-12-11 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

QEMU can support USB keyboard but libvirt haven't supportted it yet.
This patch is to add USB keyboard capabilities and test cases.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/qemu/qemu_capabilities.c  | 2 ++
 src/qemu/qemu_capabilities.h  | 1 +
 tests/qemucapabilitiesdata/caps_1.2.2-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.3.1-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.4.2-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.5.3-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.6.0-1.caps  | 2 ++
 tests/qemucapabilitiesdata/caps_1.6.50-1.caps | 1 +
 tests/qemuhelptest.c  | 8 
 9 files changed, 18 insertions(+)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index a68e555..580d598 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -245,6 +245,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST,
   kvm-pit-lost-tick-policy,
 
   boot-strict, /* 160 */
+  usb-kbd,
 );
 
 struct _virQEMUCaps {
@@ -1396,6 +1397,7 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = {
 { usb-storage, QEMU_CAPS_DEVICE_USB_STORAGE },
 { virtio-mmio, QEMU_CAPS_DEVICE_VIRTIO_MMIO },
 { ich9-intel-hda, QEMU_CAPS_DEVICE_ICH9_INTEL_HDA },
+{ usb-kbd, QEMU_CAPS_DEVICE_USB_KBD },
 };
 
 static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsVirtioBlk[] = {
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
index aea64ea..05837b2 100644
--- a/src/qemu/qemu_capabilities.h
+++ b/src/qemu/qemu_capabilities.h
@@ -199,6 +199,7 @@ enum virQEMUCapsFlags {
 QEMU_CAPS_DEVICE_ICH9_INTEL_HDA = 158, /* -device ich9-intel-hda */
 QEMU_CAPS_KVM_PIT_TICK_POLICY = 159, /* kvm-pit.lost_tick_policy */
 QEMU_CAPS_BOOT_STRICT= 160, /* -boot strict */
+QEMU_CAPS_DEVICE_USB_KBD = 161, /*-device usb-kbd*/
 
 QEMU_CAPS_LAST,   /* this must always be the last item */
 };
diff --git a/tests/qemucapabilitiesdata/caps_1.2.2-1.caps 
b/tests/qemucapabilitiesdata/caps_1.2.2-1.caps
index 73a561d..b620341 100644
--- a/tests/qemucapabilitiesdata/caps_1.2.2-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.2.2-1.caps
@@ -112,4 +112,5 @@
 flag name='usb-storage'/
 flag name='usb-storage.removable'/
 flag name='kvm-pit-lost-tick-policy'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.3.1-1.caps 
b/tests/qemucapabilitiesdata/caps_1.3.1-1.caps
index da15d8b..6b4a8f0 100644
--- a/tests/qemucapabilitiesdata/caps_1.3.1-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.3.1-1.caps
@@ -126,4 +126,5 @@
 flag name='usb-storage'/
 flag name='usb-storage.removable'/
 flag name='kvm-pit-lost-tick-policy'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.4.2-1.caps 
b/tests/qemucapabilitiesdata/caps_1.4.2-1.caps
index c419068..e3d0047 100644
--- a/tests/qemucapabilitiesdata/caps_1.4.2-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.4.2-1.caps
@@ -127,4 +127,5 @@
 flag name='usb-storage.removable'/
 flag name='ich9-intel-hda'/
 flag name='kvm-pit-lost-tick-policy'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.5.3-1.caps 
b/tests/qemucapabilitiesdata/caps_1.5.3-1.caps
index 2b00449..b29ea60 100644
--- a/tests/qemucapabilitiesdata/caps_1.5.3-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.5.3-1.caps
@@ -132,4 +132,5 @@
 flag name='ich9-intel-hda'/
 flag name='kvm-pit-lost-tick-policy'/
 flag name='boot-strict'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.6.0-1.caps 
b/tests/qemucapabilitiesdata/caps_1.6.0-1.caps
index 7bce4aa..2fa7d20 100644
--- a/tests/qemucapabilitiesdata/caps_1.6.0-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.6.0-1.caps
@@ -136,4 +136,6 @@
 flag name='ich9-intel-hda'/
 flag name='kvm-pit-lost-tick-policy'/
 flag name='boot-strict'/
+flag name='usb-kbd'/
+
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.6.50-1.caps 
b/tests/qemucapabilitiesdata/caps_1.6.50-1.caps
index bfaab9d..0151cde 100644
--- a/tests/qemucapabilitiesdata/caps_1.6.50-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.6.50-1.caps
@@ -135,4 +135,5 @@
 flag name='ich9-intel-hda'/
 flag name='kvm-pit-lost-tick-policy'/
 flag name='boot-strict'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemuhelptest.c b/tests/qemuhelptest.c
index 3628fbe..6e0a5f8 100644
--- a/tests/qemuhelptest.c
+++ b/tests/qemuhelptest.c
@@ -403,6 +403,7 @@ mymain(void)
 QEMU_CAPS_DEVICE_VMWARE_SVGA,
 QEMU_CAPS_DEVICE_USB_SERIAL,
 QEMU_CAPS_DEVICE_USB_NET,
+QEMU_CAPS_DEVICE_USB_KBD,
 QEMU_CAPS_DEVICE_PCI_BRIDGE);
 DO_TEST(qemu-kvm-0.12.3, 12003, 1, 0,
 QEMU_CAPS_VNC_COLON,
@@ -515,6 +516,7 @@ mymain

[libvirt] [PATCH v4 2/6] conf: Add one interface to add default input devices.

2013-12-11 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

This patch is to add one new interface to add input devices.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/conf/domain_conf.c   | 29 +
 src/conf/domain_conf.h   |  4 
 src/libvirt_private.syms |  1 +
 3 files changed, 34 insertions(+)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 3dee9a8..d107e6f 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -10822,6 +10822,35 @@ virDomainDefMaybeAddController(virDomainDefPtr def,
 return 0;
 }
 
+int
+virDomainDefMaybeAddInput(virDomainDefPtr def,
+   int type,
+   int bus)
+{
+size_t i;
+virDomainInputDefPtr input;
+
+for (i = 0; i  def-ninputs; i++) {
+if (def-inputs[i]-type == type 
+def-inputs[i]-bus == bus)
+return 0;
+}
+
+if (VIR_ALLOC(input)  0)
+return -1;
+
+input-type = type;
+input-bus = bus;
+
+if (VIR_APPEND_ELEMENT(def-inputs, def-ninputs, input)  0) {
+VIR_FREE(input);
+return -1;
+}
+
+return 0;
+}
+
+
 
 /* Parse a memory element located at XPATH within CTXT, and store the
  * result into MEM.  If REQUIRED, then the value must exist;
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 8aa5f50..8616066 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -2764,6 +2764,10 @@ virDomainDefMaybeAddController(virDomainDefPtr def,
int type,
int idx,
int model);
+int
+virDomainDefMaybeAddInput(virDomainDefPtr def,
+  int type,
+  int bus);
 
 char *virDomainDefGetDefaultEmulator(virDomainDefPtr def, virCapsPtr caps);
 
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 0e749b1..aa497b5 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -165,6 +165,7 @@ virDomainDefGenSecurityLabelDef;
 virDomainDefGetDefaultEmulator;
 virDomainDefGetSecurityLabelDef;
 virDomainDefMaybeAddController;
+virDomainDefMaybeAddInput;
 virDomainDefNew;
 virDomainDefParseFile;
 virDomainDefParseNode;
-- 
1.8.2.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH v4 0/6] Support keyboard device

2013-12-11 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

This patchset is to add keyboard input device.

For PPC64, it doesn't support a default keyboard device when the graphic
is enabled. Libvirt supports QEMU command line as -device VGA which
won't create any keyboard device for it. So it requires libvirt to add
a default USB keyboard device for it.

This patchset is to add keyboard input device and a default USB keyboard
for PPC64.

The related discussion in QEMU community:
http://lists.nongnu.org/archive/html/qemu-devel/2013-11/msg01734.html

Li Zhang (6):
  conf: Add a keyboard input device type
  conf: Add one interface to add default input devices.
  conf: Remove PS2 mouse device for non-X86 platforms
  qemu_cap: Add USB keyboard capability
  qemu: parse qemu command line for USB keyboard
  Add a default USB keyboard and USB mouse for PPC64

 v4 - v3:
   * Don't remove PS2 mouse device for other virtualization drivers (Jan Tomko).

 v3 - v2:
   * Handle the KBD device type in xen and QEMU driver. (Daniel.P.Berrange)
   * Remove PS2 mouse device for non-X86 platforms.
   * Move virDomainDefMaybeAddInput to a new patch. (Jan Tomko)
   * Replace VIR_REALLOC_N with VIR_APPEND_ELEMENT. (Jan Tomoko)
   * Fix several typos. (Jan Tomoko)
   * Add a virReportError when QEMU_CAPS_DEVICE_USB_KBD can't be gotten. (Jan 
Tomoko)

 v2 - v1:
   * change ifs to switch clause.
   * reconstruct the patches

 docs/schemas/domaincommon.rng  |  1 +
 src/conf/domain_conf.c | 92 ++
 src/conf/domain_conf.h |  5 ++
 src/libvirt_private.syms   |  1 +
 src/qemu/qemu_capabilities.c   |  2 +
 src/qemu/qemu_capabilities.h   |  1 +
 src/qemu/qemu_command.c| 41 +++---
 src/qemu/qemu_domain.c | 23 +-
 src/util/virarch.h |  2 +
 src/xenxs/xen_sxpr.c   | 27 +--
 src/xenxs/xen_xm.c | 30 +--
 tests/qemucapabilitiesdata/caps_1.2.2-1.caps   |  1 +
 tests/qemucapabilitiesdata/caps_1.3.1-1.caps   |  1 +
 tests/qemucapabilitiesdata/caps_1.4.2-1.caps   |  1 +
 tests/qemucapabilitiesdata/caps_1.5.3-1.caps   |  1 +
 tests/qemucapabilitiesdata/caps_1.6.0-1.caps   |  2 +
 tests/qemucapabilitiesdata/caps_1.6.50-1.caps  |  1 +
 tests/qemuhelptest.c   |  8 ++
 .../qemuxml2argvdata/qemuxml2argv-pseries-disk.xml |  3 +-
 .../qemuxml2argv-pseries-usb-kbd.args  |  9 +++
 .../qemuxml2argv-pseries-usb-kbd.xml   | 19 +
 tests/qemuxml2argvtest.c   |  3 +
 22 files changed, 212 insertions(+), 62 deletions(-)
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.xml

-- 
1.8.2.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH v4 6/6] Add a default USB keyboard and USB mouse for PPC64

2013-12-11 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

There is no keyboard working on PPC64 and PS2 mouse is only for PPC64
when graphics are enabled. It needs to add a USB keyboard and USB mouse for it.

This patch is to add a USB keyboard and USB mouse when graphics are enabled.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/qemu/qemu_domain.c | 23 +-
 .../qemuxml2argvdata/qemuxml2argv-pseries-disk.xml |  2 ++
 2 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index e964c75..82d6948 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -691,6 +691,8 @@ qemuDomainDefPostParse(virDomainDefPtr def,
 bool addPCIRoot = false;
 bool addPCIeRoot = false;
 bool addDefaultMemballoon = true;
+bool addDefaultUSBKBD = false;
+bool addDefaultUSBMouse = false;
 
 /* check for emulator and create a default one if needed */
 if (!def-emulator 
@@ -728,9 +730,14 @@ qemuDomainDefPostParse(virDomainDefPtr def,
addDefaultMemballoon = false;
break;
 
+case VIR_ARCH_PPC64:
+addPCIRoot = true;
+addDefaultUSBKBD = true;
+addDefaultUSBMouse = true;
+break;
+
 case VIR_ARCH_ALPHA:
 case VIR_ARCH_PPC:
-case VIR_ARCH_PPC64:
 case VIR_ARCH_PPCEMB:
 case VIR_ARCH_SH4:
 case VIR_ARCH_SH4EB:
@@ -783,6 +790,20 @@ qemuDomainDefPostParse(virDomainDefPtr def,
 def-memballoon = memballoon;
 }
 
+if (addDefaultUSBKBD 
+def-ngraphics  0 
+virDomainDefMaybeAddInput(def,
+  VIR_DOMAIN_INPUT_TYPE_KBD,
+  VIR_DOMAIN_INPUT_BUS_USB)  0)
+return -1;
+
+if (addDefaultUSBMouse 
+def-ngraphics  0 
+virDomainDefMaybeAddInput(def,
+  VIR_DOMAIN_INPUT_TYPE_MOUSE,
+  VIR_DOMAIN_INPUT_BUS_USB)  0)
+return -1;
+
 return 0;
 }
 
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml 
b/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml
index 8dde776..ac1767b 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml
@@ -30,6 +30,8 @@
 controller type='usb' index='0'/
 controller type='scsi' index='0'/
 controller type='pci' index='0' model='pci-root'/
+input type='kbd' bus='usb'/
+input type='mouse' bus='usb'/
 graphics type='sdl'/
 video
   model type='cirrus' vram='9216' heads='1'/
-- 
1.8.2.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH v4 3/6] conf: Remove PS2 mouse device for non-X86 platforms

2013-12-11 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

PS2 device only works for X86 platform, other platforms may need
USB mouse. Athough it doesn't influence the QEMU command line, but
It's not right to add one PS2 mouse for non-X86 platform.

This patch is to remove PS2 device definition from other platforms.
Add one default USB mouse for PPC64. It can be also added for other
platforms if necessary.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/conf/domain_conf.c | 60 ++
 src/util/virarch.h |  2 +
 .../qemuxml2argvdata/qemuxml2argv-pseries-disk.xml |  1 -
 3 files changed, 29 insertions(+), 34 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index d107e6f..cd38cbd 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -7567,7 +7567,7 @@ error:
 
 /* Parse the XML definition for an input device */
 static virDomainInputDefPtr
-virDomainInputDefParseXML(const char *ostype,
+virDomainInputDefParseXML(const virDomainDef *dom,
   xmlNodePtr node,
   unsigned int flags)
 {
@@ -7600,7 +7600,7 @@ virDomainInputDefParseXML(const char *ostype,
 goto error;
 }
 
-if (STREQ(ostype, hvm)) {
+if (STREQ(dom-os.type, hvm)) {
 if (def-bus == VIR_DOMAIN_INPUT_BUS_PS2  /* Only allow mouse 
for ps2 */
 def-type != VIR_DOMAIN_INPUT_TYPE_MOUSE) {
 virReportError(VIR_ERR_INTERNAL_ERROR,
@@ -7628,8 +7628,9 @@ virDomainInputDefParseXML(const char *ostype,
 }
 }
 } else {
-if (STREQ(ostype, hvm)) {
-if (def-type == VIR_DOMAIN_INPUT_TYPE_MOUSE)
+if (STREQ(dom-os.type, hvm)) {
+if (def-type == VIR_DOMAIN_INPUT_TYPE_MOUSE 
+ARCH_IS_X86(dom-os.arch))
 def-bus = VIR_DOMAIN_INPUT_BUS_PS2;
 else
 def-bus = VIR_DOMAIN_INPUT_BUS_USB;
@@ -9631,7 +9632,7 @@ virDomainDeviceDefParse(const char *xmlStr,
 goto error;
 break;
 case VIR_DOMAIN_DEVICE_INPUT:
-if (!(dev-data.input = virDomainInputDefParseXML(def-os.type,
+if (!(dev-data.input = virDomainInputDefParseXML(def,
   node, flags)))
 goto error;
 break;
@@ -12211,7 +12212,7 @@ virDomainDefParseXML(xmlDocPtr xml,
 goto error;
 
 for (i = 0; i  n; i++) {
-virDomainInputDefPtr input = virDomainInputDefParseXML(def-os.type,
+virDomainInputDefPtr input = virDomainInputDefParseXML(def,
nodes[i],
flags);
 if (!input)
@@ -12230,9 +12231,11 @@ virDomainDefParseXML(xmlDocPtr xml,
  * with graphics, so don't store it.
  * XXX will this be true for other virt types ? */
 if ((STREQ(def-os.type, hvm) 
+ ARCH_IS_X86(def-os.arch) 
  input-bus == VIR_DOMAIN_INPUT_BUS_PS2 
  input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE) ||
 (STRNEQ(def-os.type, hvm) 
+ ARCH_IS_X86(def-os.arch) 
  input-bus == VIR_DOMAIN_INPUT_BUS_XEN 
  input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE)) {
 virDomainInputDefFree(input);
@@ -12261,29 +12264,19 @@ virDomainDefParseXML(xmlDocPtr xml,
 VIR_FREE(nodes);
 
 /* If graphics are enabled, there's an implicit PS2 mouse */
-if (def-ngraphics  0) {
-virDomainInputDefPtr input;
+if (def-ngraphics  0 
+ARCH_IS_X86(def-os.arch)) {
+int input_bus = VIR_DOMAIN_INPUT_BUS_XEN;
 
-if (VIR_ALLOC(input)  0) {
-goto error;
-}
-if (STREQ(def-os.type, hvm)) {
-input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
-input-bus = VIR_DOMAIN_INPUT_BUS_PS2;
-} else {
-input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
-input-bus = VIR_DOMAIN_INPUT_BUS_XEN;
-}
+if (STREQ(def-os.type, hvm))
+input_bus = VIR_DOMAIN_INPUT_BUS_PS2;
 
-if (VIR_REALLOC_N(def-inputs, def-ninputs + 1)  0) {
-virDomainInputDefFree(input);
+if (virDomainDefMaybeAddInput(def,
+  VIR_DOMAIN_INPUT_TYPE_MOUSE,
+  input_bus)  0)
 goto error;
-}
-def-inputs[def-ninputs] = input;
-def-ninputs++;
 }
 
-
 /* analysis of the sound devices */
 if ((n = virXPathNodeSet(./devices/sound, ctxt, nodes))  0) {
 goto error;
@@ -17205,15 +17198,16 @@ virDomainDefFormatInternal(virDomainDefPtr def,
 
 if (def-ngraphics  0) {
 /* If graphics is enabled, add the implicit mouse */
-virDomainInputDef autoInput = {
-VIR_DOMAIN_INPUT_TYPE_MOUSE,
-STREQ(def-os.type, hvm

Re: [libvirt] [PATCH v3 3/6] Remove PS2 mouse device for non-X86 platforms

2013-12-10 Thread Li Zhang

On 2013年12月11日 00:17, Ján Tomko wrote:

On 12/10/2013 07:02 AM, Li Zhang wrote:

From: Li Zhang zhlci...@linux.vnet.ibm.com

PS2 device only works for X86 platform, other platforms may need
USB mouse. Athough it doesn't influence the QEMU command line, but
It's not right to add one PS2 mouse for non-X86 platform.

This patch is to remove PS2 device definition from other platforms.
Add one default USB mouse for PPC64. It can be also added for other
platforms if necessary.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
  src/conf/domain_conf.c | 59 --
  src/qemu/qemu_domain.c | 20 +++-
  src/util/virarch.h |  2 +
  .../qemuxml2argvdata/qemuxml2argv-pseries-disk.xml |  2 +-
  4 files changed, 42 insertions(+), 41 deletions(-)
@@ -12260,30 +12263,6 @@ virDomainDefParseXML(xmlDocPtr xml,
  }
  VIR_FREE(nodes);
  
-/* If graphics are enabled, there's an implicit PS2 mouse */

-if (def-ngraphics  0) {
-virDomainInputDefPtr input;
-
-if (VIR_ALLOC(input)  0) {
-goto error;
-}
-if (STREQ(def-os.type, hvm)) {
-input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
-input-bus = VIR_DOMAIN_INPUT_BUS_PS2;
-} else {
-input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
-input-bus = VIR_DOMAIN_INPUT_BUS_XEN;
-}
-
-if (VIR_REALLOC_N(def-inputs, def-ninputs + 1)  0) {
-virDomainInputDefFree(input);
-goto error;
-}
-def-inputs[def-ninputs] = input;
-def-ninputs++;
-}
-
-

Here you remove auto-adding of the mouse for all drivers, but only re-add it
to the QEMU driver, leading to failures in sexpr2xmltest.

Sorry, I made some mistakes.
Let me correct it.





  /* analysis of the sound devices */
  if ((n = virXPathNodeSet(./devices/sound, ctxt, nodes))  0) {
  goto error;
@@ -17201,15 +17180,17 @@ virDomainDefFormatInternal(virDomainDefPtr def,
  
  if (def-ngraphics  0) {

  /* If graphics is enabled, add the implicit mouse */
-virDomainInputDef autoInput = {
-VIR_DOMAIN_INPUT_TYPE_MOUSE,
-STREQ(def-os.type, hvm) ?
-VIR_DOMAIN_INPUT_BUS_PS2 : VIR_DOMAIN_INPUT_BUS_XEN,
-{ .alias = NULL },
-};
-
-if (virDomainInputDefFormat(buf, autoInput, flags)  0)
-goto error;
+if (ARCH_IS_X86(def-os.arch)) {
+virDomainInputDef autoInput = {
+VIR_DOMAIN_INPUT_TYPE_MOUSE,
+STREQ(def-os.type, hvm) ?
+VIR_DOMAIN_INPUT_BUS_PS2 : VIR_DOMAIN_INPUT_BUS_XEN,
+{ .alias = NULL },
+};
+if (virDomainInputDefFormat(buf, autoInput, flags)  0)
+goto error;
+}
+
  
  for (n = 0; n  def-ngraphics; n++)

  if (virDomainGraphicsDefFormat(buf, def-graphics[n], flags)  0)

Hmm, if non-USB input devices get skipped when generating the command line and
when formatting the XML, I wonder why are we adding it there in the first place.


I also have some confusion about it.
For PS2 mouse, what I have seen is that it doesn't create QEMU command line.
But it is configured in XML file. This device is added by QEMU if XEN is 
not enabled (hw/pc_piix.c).
I am not sure whether how this device is added on other kind of 
virtualization.
This may be not necessary to add this device in libvirt, it is not 
configurable.


Thanks.
-Li




diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 346fec3..75e615a 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -691,6 +691,8 @@ qemuDomainDefPostParse(virDomainDefPtr def,
  bool addPCIRoot = false;
  bool addPCIeRoot = false;
  bool addDefaultMemballoon = true;
+bool addDefaultMouse = false;
+int  mouse_bus = VIR_DOMAIN_INPUT_BUS_XEN;
  
  /* check for emulator and create a default one if needed */

  if (!def-emulator 
@@ -721,6 +723,9 @@ qemuDomainDefPostParse(virDomainDefPtr def,
  !STRPREFIX(def-os.machine, rhel))
  break;
  addPCIRoot = true;
+addDefaultMouse = true;
+if (STREQ(def-os.type, hvm))
+mouse_bus = VIR_DOMAIN_INPUT_BUS_PS2;

os.type has to be hvm in the qemu driver.


OK, I will remove this check.




  break;
  
  case VIR_ARCH_ARMV7L:

Jan




--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

[libvirt] [PATCH v3 1/6] conf: Add a keyboard input device type

2013-12-09 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

There is no keyboard for non-x86 platforms when graphics are enabled.
It's preferred to add one USB keyboard.

This patch is to add keyboard input device type.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 docs/schemas/domaincommon.rng | 1 +
 src/conf/domain_conf.c| 3 ++-
 src/conf/domain_conf.h| 1 +
 3 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index 38c6801..964350d 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -3167,6 +3167,7 @@
 choice
   valuetablet/value
   valuemouse/value
+  valuekbd/value
 /choice
   /attribute
   optional
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index b76cf26..f8b9639 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -504,7 +504,8 @@ VIR_ENUM_IMPL(virDomainVideo, VIR_DOMAIN_VIDEO_TYPE_LAST,
 
 VIR_ENUM_IMPL(virDomainInput, VIR_DOMAIN_INPUT_TYPE_LAST,
   mouse,
-  tablet)
+  tablet,
+  kbd)
 
 VIR_ENUM_IMPL(virDomainInputBus, VIR_DOMAIN_INPUT_BUS_LAST,
   ps2,
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 4934911..8aa5f50 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -1223,6 +1223,7 @@ struct _virDomainTPMDef {
 enum virDomainInputType {
 VIR_DOMAIN_INPUT_TYPE_MOUSE,
 VIR_DOMAIN_INPUT_TYPE_TABLET,
+VIR_DOMAIN_INPUT_TYPE_KBD,
 
 VIR_DOMAIN_INPUT_TYPE_LAST
 };
-- 
1.8.2.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH v3 4/6] qemu_cap: Add USB keyboard capability

2013-12-09 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

QEMU can support USB keyboard but libvirt haven't supportted it yet.
This patch is to add USB keyboard capabilities and test cases.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/qemu/qemu_capabilities.c  | 2 ++
 src/qemu/qemu_capabilities.h  | 1 +
 tests/qemucapabilitiesdata/caps_1.2.2-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.3.1-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.4.2-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.5.3-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.6.0-1.caps  | 2 ++
 tests/qemucapabilitiesdata/caps_1.6.50-1.caps | 1 +
 tests/qemuhelptest.c  | 8 
 9 files changed, 18 insertions(+)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index a68e555..580d598 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -245,6 +245,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST,
   kvm-pit-lost-tick-policy,
 
   boot-strict, /* 160 */
+  usb-kbd,
 );
 
 struct _virQEMUCaps {
@@ -1396,6 +1397,7 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = {
 { usb-storage, QEMU_CAPS_DEVICE_USB_STORAGE },
 { virtio-mmio, QEMU_CAPS_DEVICE_VIRTIO_MMIO },
 { ich9-intel-hda, QEMU_CAPS_DEVICE_ICH9_INTEL_HDA },
+{ usb-kbd, QEMU_CAPS_DEVICE_USB_KBD },
 };
 
 static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsVirtioBlk[] = {
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
index aea64ea..05837b2 100644
--- a/src/qemu/qemu_capabilities.h
+++ b/src/qemu/qemu_capabilities.h
@@ -199,6 +199,7 @@ enum virQEMUCapsFlags {
 QEMU_CAPS_DEVICE_ICH9_INTEL_HDA = 158, /* -device ich9-intel-hda */
 QEMU_CAPS_KVM_PIT_TICK_POLICY = 159, /* kvm-pit.lost_tick_policy */
 QEMU_CAPS_BOOT_STRICT= 160, /* -boot strict */
+QEMU_CAPS_DEVICE_USB_KBD = 161, /*-device usb-kbd*/
 
 QEMU_CAPS_LAST,   /* this must always be the last item */
 };
diff --git a/tests/qemucapabilitiesdata/caps_1.2.2-1.caps 
b/tests/qemucapabilitiesdata/caps_1.2.2-1.caps
index 73a561d..b620341 100644
--- a/tests/qemucapabilitiesdata/caps_1.2.2-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.2.2-1.caps
@@ -112,4 +112,5 @@
 flag name='usb-storage'/
 flag name='usb-storage.removable'/
 flag name='kvm-pit-lost-tick-policy'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.3.1-1.caps 
b/tests/qemucapabilitiesdata/caps_1.3.1-1.caps
index da15d8b..6b4a8f0 100644
--- a/tests/qemucapabilitiesdata/caps_1.3.1-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.3.1-1.caps
@@ -126,4 +126,5 @@
 flag name='usb-storage'/
 flag name='usb-storage.removable'/
 flag name='kvm-pit-lost-tick-policy'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.4.2-1.caps 
b/tests/qemucapabilitiesdata/caps_1.4.2-1.caps
index c419068..e3d0047 100644
--- a/tests/qemucapabilitiesdata/caps_1.4.2-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.4.2-1.caps
@@ -127,4 +127,5 @@
 flag name='usb-storage.removable'/
 flag name='ich9-intel-hda'/
 flag name='kvm-pit-lost-tick-policy'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.5.3-1.caps 
b/tests/qemucapabilitiesdata/caps_1.5.3-1.caps
index 2b00449..b29ea60 100644
--- a/tests/qemucapabilitiesdata/caps_1.5.3-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.5.3-1.caps
@@ -132,4 +132,5 @@
 flag name='ich9-intel-hda'/
 flag name='kvm-pit-lost-tick-policy'/
 flag name='boot-strict'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.6.0-1.caps 
b/tests/qemucapabilitiesdata/caps_1.6.0-1.caps
index 7bce4aa..2fa7d20 100644
--- a/tests/qemucapabilitiesdata/caps_1.6.0-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.6.0-1.caps
@@ -136,4 +136,6 @@
 flag name='ich9-intel-hda'/
 flag name='kvm-pit-lost-tick-policy'/
 flag name='boot-strict'/
+flag name='usb-kbd'/
+
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.6.50-1.caps 
b/tests/qemucapabilitiesdata/caps_1.6.50-1.caps
index bfaab9d..0151cde 100644
--- a/tests/qemucapabilitiesdata/caps_1.6.50-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.6.50-1.caps
@@ -135,4 +135,5 @@
 flag name='ich9-intel-hda'/
 flag name='kvm-pit-lost-tick-policy'/
 flag name='boot-strict'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemuhelptest.c b/tests/qemuhelptest.c
index 3628fbe..6e0a5f8 100644
--- a/tests/qemuhelptest.c
+++ b/tests/qemuhelptest.c
@@ -403,6 +403,7 @@ mymain(void)
 QEMU_CAPS_DEVICE_VMWARE_SVGA,
 QEMU_CAPS_DEVICE_USB_SERIAL,
 QEMU_CAPS_DEVICE_USB_NET,
+QEMU_CAPS_DEVICE_USB_KBD,
 QEMU_CAPS_DEVICE_PCI_BRIDGE);
 DO_TEST(qemu-kvm-0.12.3, 12003, 1, 0,
 QEMU_CAPS_VNC_COLON,
@@ -515,6 +516,7 @@ mymain

[libvirt] [PATCH v3 5/6] qemu: parse qemu command line for USB keyboard

2013-12-09 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

This patch is to format qemu command line and xen driver for USB keyboard
and add test cases for it.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/qemu/qemu_command.c| 44 +-
 src/xenxs/xen_sxpr.c   | 27 +
 src/xenxs/xen_xm.c | 30 +++
 .../qemuxml2argv-pseries-usb-kbd.args  |  9 +
 .../qemuxml2argv-pseries-usb-kbd.xml   | 19 ++
 tests/qemuxml2argvtest.c   |  3 ++
 6 files changed, 106 insertions(+), 26 deletions(-)
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.xml

diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 9539be7..ceba848 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -5307,9 +5307,22 @@ qemuBuildUSBInputDevStr(virDomainDefPtr def,
 {
 virBuffer buf = VIR_BUFFER_INITIALIZER;
 
-virBufferAsprintf(buf, %s,id=%s,
-  dev-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ?
-  usb-mouse : usb-tablet, dev-info.alias);
+switch (dev-type) {
+case VIR_DOMAIN_INPUT_TYPE_MOUSE:
+virBufferAsprintf(buf, usb-mouse,id=%s, dev-info.alias);
+break;
+case VIR_DOMAIN_INPUT_TYPE_TABLET:
+virBufferAsprintf(buf, usb-tablet,id=%s, dev-info.alias);
+break;
+case VIR_DOMAIN_INPUT_TYPE_KBD:
+if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_USB_KBD)) {
+virReportError(VIR_ERR_INTERNAL_ERROR,
+   %s, _(Can't get QEMU_CAPS_DEVICE_USB_KBD 
capability));
+goto error;
+}
+virBufferAsprintf(buf, usb-kbd,id=%s, dev-info.alias);
+break;
+}
 
 if (qemuBuildDeviceAddressStr(buf, def, dev-info, qemuCaps)  0)
 goto error;
@@ -8996,9 +9009,17 @@ qemuBuildCommandLine(virConnectPtr conn,
 virCommandAddArg(cmd, optstr);
 VIR_FREE(optstr);
 } else {
-virCommandAddArgList(cmd, -usbdevice,
- input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE
- ? mouse : tablet, NULL);
+switch (input-type) {
+case VIR_DOMAIN_INPUT_TYPE_MOUSE:
+virCommandAddArgList(cmd, -usbdevice, mouse, NULL);
+break;
+case VIR_DOMAIN_INPUT_TYPE_TABLET:
+virCommandAddArgList(cmd, -usbdevice, tablet, 
NULL);
+break;
+case VIR_DOMAIN_INPUT_TYPE_KBD:
+virCommandAddArgList(cmd, -usbdevice, kbd, NULL);
+break;
+}
 }
 }
 }
@@ -11668,20 +11689,23 @@ qemuParseCommandLine(virCapsPtr qemuCaps,
 } else if (STREQ(arg, -usbdevice)) {
 WANT_VALUE();
 if (STREQ(val, tablet) ||
-STREQ(val, mouse)) {
+STREQ(val, mouse) ||
+STREQ(val, kbd)) {
 virDomainInputDefPtr input;
 if (VIR_ALLOC(input)  0)
 goto error;
 input-bus = VIR_DOMAIN_INPUT_BUS_USB;
 if (STREQ(val, tablet))
 input-type = VIR_DOMAIN_INPUT_TYPE_TABLET;
-else
+else if (STREQ(val, mouse))
 input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
-if (VIR_REALLOC_N(def-inputs, def-ninputs+1)  0) {
+else
+input-type = VIR_DOMAIN_INPUT_TYPE_KBD;
+
+if (VIR_APPEND_ELEMENT(def-inputs, def-ninputs, input)  0) {
 virDomainInputDefFree(input);
 goto error;
 }
-def-inputs[def-ninputs++] = input;
 } else if (STRPREFIX(val, disk:)) {
 if (VIR_ALLOC(disk)  0)
 goto error;
diff --git a/src/xenxs/xen_sxpr.c b/src/xenxs/xen_sxpr.c
index d514725..a02f999 100644
--- a/src/xenxs/xen_sxpr.c
+++ b/src/xenxs/xen_sxpr.c
@@ -724,21 +724,23 @@ xenParseSxprUSB(virDomainDefPtr def,
 tmp = sexpr_node(node, usbdevice);
 if (tmp  *tmp) {
 if (STREQ(tmp, tablet) ||
-STREQ(tmp, mouse)) {
+STREQ(tmp, mouse) ||
+STREQ(tmp, kbd)) {
 virDomainInputDefPtr input;
 if (VIR_ALLOC(input)  0)
 goto error;
 input-bus = VIR_DOMAIN_INPUT_BUS_USB;
 if (STREQ(tmp, tablet))
 input-type = VIR_DOMAIN_INPUT_TYPE_TABLET;
-else
+else if (STREQ(tmp, mouse))
 input

[libvirt] [PATCH v3 0/6] Support keyboard device

2013-12-09 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

This patchset is to add keyboard input device.

For PPC64, it doesn't support a default keyboard device when the graphic
is enabled. Libvirt supports QEMU command line as -device VGA which
won't create any keyboard device for it. So it requires libvirt to add
a default USB keyboard device for it.

This patchset is to add keyboard input device and a default USB keyboard
for PPC64.

The related discussion in QEMU community:
http://lists.nongnu.org/archive/html/qemu-devel/2013-11/msg01734.html

Li Zhang (6):
  conf: Add a keyboard input device type
  conf: Add one interface to add input devices.
  Remove PS2 mouse device for non-X86 platforms
  qemu_cap: Add USB keyboard capability
  qemu: parse qemu command line for USB keyboard.
  Add a default USB keyboard for PPC64

 v3 - v2:
   * Handle the KBD device type in xen and QEMU driver. (Daniel.P.Berrange)
   * Remove PS2 mouse device for non-X86 platforms.
   * Move virDomainDefMaybeAddInput to a new patch. (Jan Tomko)
   * Replace VIR_REALLOC_N with VIR_APPEND_ELEMENT. (Jan Tomoko)
   * Fix several typos. (Jan Tomoko)
   * Add a virReportError when QEMU_CAPS_DEVICE_USB_KBD can't be gotten. (Jan 
Tomoko)

 v2 - v1:
   * change ifs to switch clause.
   * reconstruct the patches

 docs/schemas/domaincommon.rng  |  1 +
 src/conf/domain_conf.c | 91 --
 src/conf/domain_conf.h |  5 ++
 src/libvirt_private.syms   |  1 +
 src/qemu/qemu_capabilities.c   |  2 +
 src/qemu/qemu_capabilities.h   |  1 +
 src/qemu/qemu_command.c| 41 +++---
 src/qemu/qemu_domain.c | 29 ++-
 src/util/virarch.h |  2 +
 src/xenxs/xen_sxpr.c   | 27 +--
 src/xenxs/xen_xm.c | 30 +--
 tests/qemucapabilitiesdata/caps_1.2.2-1.caps   |  1 +
 tests/qemucapabilitiesdata/caps_1.3.1-1.caps   |  1 +
 tests/qemucapabilitiesdata/caps_1.4.2-1.caps   |  1 +
 tests/qemucapabilitiesdata/caps_1.5.3-1.caps   |  1 +
 tests/qemucapabilitiesdata/caps_1.6.0-1.caps   |  2 +
 tests/qemucapabilitiesdata/caps_1.6.50-1.caps  |  1 +
 tests/qemuhelptest.c   |  8 ++
 .../qemuxml2argvdata/qemuxml2argv-pseries-disk.xml |  3 +-
 .../qemuxml2argv-pseries-usb-kbd.args  |  9 +++
 .../qemuxml2argv-pseries-usb-kbd.xml   | 19 +
 tests/qemuxml2argvtest.c   |  3 +
 22 files changed, 211 insertions(+), 68 deletions(-)
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.xml

-- 
1.8.2.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH v3 2/6] conf: Add one interface to add default input devices.

2013-12-09 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

This patch is to add one new interface to add input devices.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/conf/domain_conf.c   | 29 +
 src/conf/domain_conf.h   |  4 
 src/libvirt_private.syms |  1 +
 3 files changed, 34 insertions(+)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index f8b9639..82339ea 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -10822,6 +10822,35 @@ virDomainDefMaybeAddController(virDomainDefPtr def,
 return 0;
 }
 
+int
+virDomainDefMaybeAddInput(virDomainDefPtr def,
+   int type,
+   int bus)
+{
+size_t i;
+virDomainInputDefPtr input;
+
+for (i = 0; i  def-ninputs; i++) {
+if (def-inputs[i]-type == type 
+def-inputs[i]-bus == bus)
+return 0;
+}
+
+if (VIR_ALLOC(input)  0)
+return -1;
+
+input-type = type;
+input-bus = bus;
+
+if (VIR_APPEND_ELEMENT(def-inputs, def-ninputs, input)  0) {
+VIR_FREE(input);
+return -1;
+}
+
+return 0;
+}
+
+
 
 /* Parse a memory element located at XPATH within CTXT, and store the
  * result into MEM.  If REQUIRED, then the value must exist;
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 8aa5f50..8616066 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -2764,6 +2764,10 @@ virDomainDefMaybeAddController(virDomainDefPtr def,
int type,
int idx,
int model);
+int
+virDomainDefMaybeAddInput(virDomainDefPtr def,
+  int type,
+  int bus);
 
 char *virDomainDefGetDefaultEmulator(virDomainDefPtr def, virCapsPtr caps);
 
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index b2c7a8e..e37931c 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -165,6 +165,7 @@ virDomainDefGenSecurityLabelDef;
 virDomainDefGetDefaultEmulator;
 virDomainDefGetSecurityLabelDef;
 virDomainDefMaybeAddController;
+virDomainDefMaybeAddInput;
 virDomainDefNew;
 virDomainDefParseFile;
 virDomainDefParseNode;
-- 
1.8.2.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH v3 6/6] Add a default USB keyboard for PPC64

2013-12-09 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

There is no keyboard working on PPC64 when graphics are enabled.
It needs to add a USB keyboard for it.

This patch is to add a USB keyboard when graphics are enabled.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/qemu/qemu_domain.c   | 9 +
 tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml | 1 +
 2 files changed, 10 insertions(+)

diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 75e615a..68d9e0c 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -691,6 +691,7 @@ qemuDomainDefPostParse(virDomainDefPtr def,
 bool addPCIRoot = false;
 bool addPCIeRoot = false;
 bool addDefaultMemballoon = true;
+bool addDefaultUSBKBD = false;
 bool addDefaultMouse = false;
 int  mouse_bus = VIR_DOMAIN_INPUT_BUS_XEN;
 
@@ -735,6 +736,7 @@ qemuDomainDefPostParse(virDomainDefPtr def,
 
 case VIR_ARCH_PPC64:
 addPCIRoot = true;
+addDefaultUSBKBD = true;
 addDefaultMouse = true;
 if (STREQ(def-os.type, hvm))
 mouse_bus = VIR_DOMAIN_INPUT_BUS_USB;
@@ -801,6 +803,13 @@ qemuDomainDefPostParse(virDomainDefPtr def,
 return -1;
 }
 
+if (addDefaultUSBKBD 
+def-ngraphics  0 
+virDomainDefMaybeAddInput(def,
+  VIR_DOMAIN_INPUT_TYPE_KBD,
+  VIR_DOMAIN_INPUT_BUS_USB)  0)
+return -1;
+
 return 0;
 }
 
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml 
b/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml
index 117213d..8c87998 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml
@@ -31,6 +31,7 @@
 controller type='scsi' index='0'/
 controller type='pci' index='0' model='pci-root'/
 input type='mouse' bus='usb'/
+input type='kbd' bus='usb'/
 graphics type='sdl'/
 video
   model type='cirrus' vram='9216' heads='1'/
-- 
1.8.2.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH v3 3/6] Remove PS2 mouse device for non-X86 platforms

2013-12-09 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

PS2 device only works for X86 platform, other platforms may need
USB mouse. Athough it doesn't influence the QEMU command line, but
It's not right to add one PS2 mouse for non-X86 platform.

This patch is to remove PS2 device definition from other platforms.
Add one default USB mouse for PPC64. It can be also added for other
platforms if necessary.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/conf/domain_conf.c | 59 --
 src/qemu/qemu_domain.c | 20 +++-
 src/util/virarch.h |  2 +
 .../qemuxml2argvdata/qemuxml2argv-pseries-disk.xml |  2 +-
 4 files changed, 42 insertions(+), 41 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 82339ea..e53a786 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -7567,7 +7567,7 @@ error:
 
 /* Parse the XML definition for an input device */
 static virDomainInputDefPtr
-virDomainInputDefParseXML(const char *ostype,
+virDomainInputDefParseXML(const virDomainDef *dom,
   xmlNodePtr node,
   unsigned int flags)
 {
@@ -7600,7 +7600,7 @@ virDomainInputDefParseXML(const char *ostype,
 goto error;
 }
 
-if (STREQ(ostype, hvm)) {
+if (STREQ(dom-os.type, hvm)) {
 if (def-bus == VIR_DOMAIN_INPUT_BUS_PS2  /* Only allow mouse 
for ps2 */
 def-type != VIR_DOMAIN_INPUT_TYPE_MOUSE) {
 virReportError(VIR_ERR_INTERNAL_ERROR,
@@ -7628,8 +7628,9 @@ virDomainInputDefParseXML(const char *ostype,
 }
 }
 } else {
-if (STREQ(ostype, hvm)) {
-if (def-type == VIR_DOMAIN_INPUT_TYPE_MOUSE)
+if (STREQ(dom-os.type, hvm)) {
+if (def-type == VIR_DOMAIN_INPUT_TYPE_MOUSE 
+ARCH_IS_X86(dom-os.arch))
 def-bus = VIR_DOMAIN_INPUT_BUS_PS2;
 else
 def-bus = VIR_DOMAIN_INPUT_BUS_USB;
@@ -9631,7 +9632,7 @@ virDomainDeviceDefParse(const char *xmlStr,
 goto error;
 break;
 case VIR_DOMAIN_DEVICE_INPUT:
-if (!(dev-data.input = virDomainInputDefParseXML(def-os.type,
+if (!(dev-data.input = virDomainInputDefParseXML(def,
   node, flags)))
 goto error;
 break;
@@ -12211,7 +12212,7 @@ virDomainDefParseXML(xmlDocPtr xml,
 goto error;
 
 for (i = 0; i  n; i++) {
-virDomainInputDefPtr input = virDomainInputDefParseXML(def-os.type,
+virDomainInputDefPtr input = virDomainInputDefParseXML(def,
nodes[i],
flags);
 if (!input)
@@ -12230,9 +12231,11 @@ virDomainDefParseXML(xmlDocPtr xml,
  * with graphics, so don't store it.
  * XXX will this be true for other virt types ? */
 if ((STREQ(def-os.type, hvm) 
+ ARCH_IS_X86(def-os.arch) 
  input-bus == VIR_DOMAIN_INPUT_BUS_PS2 
  input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE) ||
 (STRNEQ(def-os.type, hvm) 
+ ARCH_IS_X86(def-os.arch) 
  input-bus == VIR_DOMAIN_INPUT_BUS_XEN 
  input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE)) {
 virDomainInputDefFree(input);
@@ -12260,30 +12263,6 @@ virDomainDefParseXML(xmlDocPtr xml,
 }
 VIR_FREE(nodes);
 
-/* If graphics are enabled, there's an implicit PS2 mouse */
-if (def-ngraphics  0) {
-virDomainInputDefPtr input;
-
-if (VIR_ALLOC(input)  0) {
-goto error;
-}
-if (STREQ(def-os.type, hvm)) {
-input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
-input-bus = VIR_DOMAIN_INPUT_BUS_PS2;
-} else {
-input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
-input-bus = VIR_DOMAIN_INPUT_BUS_XEN;
-}
-
-if (VIR_REALLOC_N(def-inputs, def-ninputs + 1)  0) {
-virDomainInputDefFree(input);
-goto error;
-}
-def-inputs[def-ninputs] = input;
-def-ninputs++;
-}
-
-
 /* analysis of the sound devices */
 if ((n = virXPathNodeSet(./devices/sound, ctxt, nodes))  0) {
 goto error;
@@ -17201,15 +17180,17 @@ virDomainDefFormatInternal(virDomainDefPtr def,
 
 if (def-ngraphics  0) {
 /* If graphics is enabled, add the implicit mouse */
-virDomainInputDef autoInput = {
-VIR_DOMAIN_INPUT_TYPE_MOUSE,
-STREQ(def-os.type, hvm) ?
-VIR_DOMAIN_INPUT_BUS_PS2 : VIR_DOMAIN_INPUT_BUS_XEN,
-{ .alias = NULL },
-};
-
-if (virDomainInputDefFormat(buf, autoInput, flags)  0)
-goto error;
+if (ARCH_IS_X86(def-os.arch)) {
+virDomainInputDef autoInput

[libvirt] [PATCH v2 5/5] Add a default USB keyboard for PPC64

2013-12-05 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

There is no keyboard working on PPC64 when graphic is enabled.
It needs to add a USB keyboard for it.

This patch is to add a USB keyboard when graphic is enabled.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/qemu/qemu_domain.c   | 14 +-
 tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml |  1 +
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 346fec3..0b910f9 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -691,6 +691,7 @@ qemuDomainDefPostParse(virDomainDefPtr def,
 bool addPCIRoot = false;
 bool addPCIeRoot = false;
 bool addDefaultMemballoon = true;
+bool addDefaultUSBKBD = false;
 
 /* check for emulator and create a default one if needed */
 if (!def-emulator 
@@ -728,9 +729,13 @@ qemuDomainDefPostParse(virDomainDefPtr def,
addDefaultMemballoon = false;
break;
 
+case VIR_ARCH_PPC64:
+   addPCIRoot = true;
+   addDefaultUSBKBD = true;
+   break;
+
 case VIR_ARCH_ALPHA:
 case VIR_ARCH_PPC:
-case VIR_ARCH_PPC64:
 case VIR_ARCH_PPCEMB:
 case VIR_ARCH_SH4:
 case VIR_ARCH_SH4EB:
@@ -783,6 +788,13 @@ qemuDomainDefPostParse(virDomainDefPtr def,
 def-memballoon = memballoon;
 }
 
+if (addDefaultUSBKBD 
+def-ngraphics  0 
+virDomainDefMaybeAddInput(def,
+  VIR_DOMAIN_INPUT_TYPE_KBD,
+  VIR_DOMAIN_INPUT_BUS_USB)  0)
+return -1;
+
 return 0;
 }
 
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml 
b/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml
index dbbd6aa..4a2be91 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml
@@ -30,6 +30,7 @@
 controller type='usb' index='0'/
 controller type='scsi' index='0'/
 controller type='pci' index='0' model='pci-root'/
+input type='kbd' bus='usb'/
 input type='mouse' bus='ps2'/
 graphics type='sdl'/
 video
-- 
1.8.2.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH v2 1/5] conf: Add a keyboard input device type

2013-12-05 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

There is no keyboard for PPC64 platform when grapchic is enabled.
It's preferred to add one USB keyboard.

This patch is to add keyboard input device type.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/conf/domain_conf.c   | 62 +++-
 src/conf/domain_conf.h   |  5 
 src/libvirt_private.syms |  1 +
 3 files changed, 51 insertions(+), 17 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 65bd9b1..b714b6b 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -504,7 +504,8 @@ VIR_ENUM_IMPL(virDomainVideo, VIR_DOMAIN_VIDEO_TYPE_LAST,
 
 VIR_ENUM_IMPL(virDomainInput, VIR_DOMAIN_INPUT_TYPE_LAST,
   mouse,
-  tablet)
+  tablet,
+  kbd)
 
 VIR_ENUM_IMPL(virDomainInputBus, VIR_DOMAIN_INPUT_BUS_LAST,
   ps2,
@@ -10821,6 +10822,41 @@ virDomainDefMaybeAddController(virDomainDefPtr def,
 return 0;
 }
 
+int
+virDomainDefMaybeAddInput(virDomainDefPtr def,
+   int type,
+   int bus)
+{
+size_t i;
+virDomainInputDefPtr input;
+
+for (i = 0; i  def-ninputs; i++) {
+if (def-inputs[i]-type == type 
+def-inputs[i]-bus == bus)
+return 0;
+}
+
+if (VIR_ALLOC(input)  0) {
+goto error;
+}
+input-type = type;
+input-bus = bus;
+
+if (VIR_REALLOC_N(def-inputs, def-ninputs + 1)  0) {
+virDomainInputDefFree(input);
+goto error;
+}
+
+def-inputs[def-ninputs] = input;
+def-ninputs ++;
+return 0;
+
+error:
+virReportOOMError();
+return -1;
+}
+
+
 
 /* Parse a memory element located at XPATH within CTXT, and store the
  * result into MEM.  If REQUIRED, then the value must exist;
@@ -12232,25 +12268,17 @@ virDomainDefParseXML(xmlDocPtr xml,
 
 /* If graphics are enabled, there's an implicit PS2 mouse */
 if (def-ngraphics  0) {
-virDomainInputDefPtr input;
-
-if (VIR_ALLOC(input)  0) {
-goto error;
-}
 if (STREQ(def-os.type, hvm)) {
-input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
-input-bus = VIR_DOMAIN_INPUT_BUS_PS2;
+if (virDomainDefMaybeAddInput(def,
+  VIR_DOMAIN_INPUT_TYPE_MOUSE,
+  VIR_DOMAIN_INPUT_BUS_PS2)  0)
+goto error;
 } else {
-input-type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
-input-bus = VIR_DOMAIN_INPUT_BUS_XEN;
-}
-
-if (VIR_REALLOC_N(def-inputs, def-ninputs + 1)  0) {
-virDomainInputDefFree(input);
-goto error;
+if (virDomainDefMaybeAddInput(def,
+  VIR_DOMAIN_INPUT_TYPE_MOUSE,
+  VIR_DOMAIN_INPUT_BUS_XEN)  0)
+goto error;
 }
-def-inputs[def-ninputs] = input;
-def-ninputs++;
 }
 
 
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 4934911..8616066 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -1223,6 +1223,7 @@ struct _virDomainTPMDef {
 enum virDomainInputType {
 VIR_DOMAIN_INPUT_TYPE_MOUSE,
 VIR_DOMAIN_INPUT_TYPE_TABLET,
+VIR_DOMAIN_INPUT_TYPE_KBD,
 
 VIR_DOMAIN_INPUT_TYPE_LAST
 };
@@ -2763,6 +2764,10 @@ virDomainDefMaybeAddController(virDomainDefPtr def,
int type,
int idx,
int model);
+int
+virDomainDefMaybeAddInput(virDomainDefPtr def,
+  int type,
+  int bus);
 
 char *virDomainDefGetDefaultEmulator(virDomainDefPtr def, virCapsPtr caps);
 
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index b2c7a8e..e37931c 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -165,6 +165,7 @@ virDomainDefGenSecurityLabelDef;
 virDomainDefGetDefaultEmulator;
 virDomainDefGetSecurityLabelDef;
 virDomainDefMaybeAddController;
+virDomainDefMaybeAddInput;
 virDomainDefNew;
 virDomainDefParseFile;
 virDomainDefParseNode;
-- 
1.8.2.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH v2 4/5] qemu: parse USB keyboard qemu command line.

2013-12-05 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

This patch is to parse USB keyboard qemu command line
and add test cases for it.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/qemu/qemu_command.c   | 18 +++---
 .../qemuxml2argv-pseries-usb-kbd.args |  9 +
 .../qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.xml | 19 +++
 tests/qemuxml2argvtest.c  |  3 +++
 4 files changed, 46 insertions(+), 3 deletions(-)
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.xml

diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 9539be7..d65fe27 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -5307,9 +5307,21 @@ qemuBuildUSBInputDevStr(virDomainDefPtr def,
 {
 virBuffer buf = VIR_BUFFER_INITIALIZER;
 
-virBufferAsprintf(buf, %s,id=%s,
-  dev-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ?
-  usb-mouse : usb-tablet, dev-info.alias);
+switch (dev-type) {
+case VIR_DOMAIN_INPUT_TYPE_MOUSE:
+virBufferAsprintf(buf, usb-mouse,id=%s, dev-info.alias);
+break;
+case VIR_DOMAIN_INPUT_TYPE_TABLET:
+virBufferAsprintf(buf, usb-tablet,id=%s, dev-info.alias);
+break;
+case VIR_DOMAIN_INPUT_TYPE_KBD:
+if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_USB_KBD))
+goto error;
+virBufferAsprintf(buf, usb-kbd,id=%s, dev-info.alias);
+break;
+default:
+break;
+}
 
 if (qemuBuildDeviceAddressStr(buf, def, dev-info, qemuCaps)  0)
 goto error;
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args 
b/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args
new file mode 100644
index 000..373c72a
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args
@@ -0,0 +1,9 @@
+LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \
+/usr/bin/qemu-system-ppc64 -S -M pseries -m 512 -smp 1 \
+-nographic -nodefconfig -nodefaults \
+-chardev socket,id=charmonitor,path=/tmp/test-monitor,server,nowait \
+-mon chardev=charmonitor,id=monitor,mode=readline -no-acpi -boot c \
+-device pci-ohci,id=usb,bus=pci,addr=0x1 \
+-chardev pty,id=charserial0 \
+-device spapr-vty,chardev=charserial0,reg=0x3000 \
+-device usb-kbd,id=input0
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.xml 
b/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.xml
new file mode 100644
index 000..c512584
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.xml
@@ -0,0 +1,19 @@
+domain type='qemu'
+  nameQEMUGuest1/name
+  uuid1ccfd97d-5eb4-478a-bbe6-88d254c16db7/uuid
+  memory unit='KiB'524288/memory
+  vcpu placement='static'1/vcpu
+  os
+type arch='ppc64' machine='pseries'hvm/type
+  /os
+  clock offset='utc'/
+  devices
+emulator/usr/bin/qemu-system-ppc64/emulator
+console type='pty'
+  address type=spapr-vio/
+/console
+memballoon model=none/
+controller type='usb' index='0' model='pci-ohci'/
+input type='kbd' bus='usb'/
+  /devices
+/domain
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index f9abf1b..47f3988 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -1176,6 +1176,9 @@ mymain(void)
 DO_TEST_ERROR(pseries-vio-address-clash, QEMU_CAPS_DRIVE,
 QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
 DO_TEST(pseries-nvram, QEMU_CAPS_DEVICE_NVRAM);
+DO_TEST(pseries-usb-kbd, QEMU_CAPS_PCI_OHCI,
+QEMU_CAPS_DEVICE_USB_KBD, QEMU_CAPS_CHARDEV,
+QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
 DO_TEST_FAILURE(pseries-cpu-exact, QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, 
QEMU_CAPS_NODEFCONFIG);
 DO_TEST(disk-ide-drive-split,
 QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
-- 
1.8.2.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH v2 2/5] qemu_cap: Add USB keyboard capability

2013-12-05 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

QEMU can support USB keyboard but libvirt haven't supportted it yet.
This patch is to add USB keyboard capabilities and test cases.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 src/qemu/qemu_capabilities.c  | 2 ++
 src/qemu/qemu_capabilities.h  | 1 +
 tests/qemucapabilitiesdata/caps_1.2.2-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.3.1-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.4.2-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.5.3-1.caps  | 1 +
 tests/qemucapabilitiesdata/caps_1.6.0-1.caps  | 2 ++
 tests/qemucapabilitiesdata/caps_1.6.50-1.caps | 1 +
 tests/qemuhelptest.c  | 8 
 9 files changed, 18 insertions(+)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index a68e555..580d598 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -245,6 +245,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST,
   kvm-pit-lost-tick-policy,
 
   boot-strict, /* 160 */
+  usb-kbd,
 );
 
 struct _virQEMUCaps {
@@ -1396,6 +1397,7 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = {
 { usb-storage, QEMU_CAPS_DEVICE_USB_STORAGE },
 { virtio-mmio, QEMU_CAPS_DEVICE_VIRTIO_MMIO },
 { ich9-intel-hda, QEMU_CAPS_DEVICE_ICH9_INTEL_HDA },
+{ usb-kbd, QEMU_CAPS_DEVICE_USB_KBD },
 };
 
 static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsVirtioBlk[] = {
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
index aea64ea..05837b2 100644
--- a/src/qemu/qemu_capabilities.h
+++ b/src/qemu/qemu_capabilities.h
@@ -199,6 +199,7 @@ enum virQEMUCapsFlags {
 QEMU_CAPS_DEVICE_ICH9_INTEL_HDA = 158, /* -device ich9-intel-hda */
 QEMU_CAPS_KVM_PIT_TICK_POLICY = 159, /* kvm-pit.lost_tick_policy */
 QEMU_CAPS_BOOT_STRICT= 160, /* -boot strict */
+QEMU_CAPS_DEVICE_USB_KBD = 161, /*-device usb-kbd*/
 
 QEMU_CAPS_LAST,   /* this must always be the last item */
 };
diff --git a/tests/qemucapabilitiesdata/caps_1.2.2-1.caps 
b/tests/qemucapabilitiesdata/caps_1.2.2-1.caps
index 73a561d..b620341 100644
--- a/tests/qemucapabilitiesdata/caps_1.2.2-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.2.2-1.caps
@@ -112,4 +112,5 @@
 flag name='usb-storage'/
 flag name='usb-storage.removable'/
 flag name='kvm-pit-lost-tick-policy'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.3.1-1.caps 
b/tests/qemucapabilitiesdata/caps_1.3.1-1.caps
index da15d8b..6b4a8f0 100644
--- a/tests/qemucapabilitiesdata/caps_1.3.1-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.3.1-1.caps
@@ -126,4 +126,5 @@
 flag name='usb-storage'/
 flag name='usb-storage.removable'/
 flag name='kvm-pit-lost-tick-policy'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.4.2-1.caps 
b/tests/qemucapabilitiesdata/caps_1.4.2-1.caps
index c419068..e3d0047 100644
--- a/tests/qemucapabilitiesdata/caps_1.4.2-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.4.2-1.caps
@@ -127,4 +127,5 @@
 flag name='usb-storage.removable'/
 flag name='ich9-intel-hda'/
 flag name='kvm-pit-lost-tick-policy'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.5.3-1.caps 
b/tests/qemucapabilitiesdata/caps_1.5.3-1.caps
index 2b00449..b29ea60 100644
--- a/tests/qemucapabilitiesdata/caps_1.5.3-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.5.3-1.caps
@@ -132,4 +132,5 @@
 flag name='ich9-intel-hda'/
 flag name='kvm-pit-lost-tick-policy'/
 flag name='boot-strict'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.6.0-1.caps 
b/tests/qemucapabilitiesdata/caps_1.6.0-1.caps
index 7bce4aa..2fa7d20 100644
--- a/tests/qemucapabilitiesdata/caps_1.6.0-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.6.0-1.caps
@@ -136,4 +136,6 @@
 flag name='ich9-intel-hda'/
 flag name='kvm-pit-lost-tick-policy'/
 flag name='boot-strict'/
+flag name='usb-kbd'/
+
   /qemuCaps
diff --git a/tests/qemucapabilitiesdata/caps_1.6.50-1.caps 
b/tests/qemucapabilitiesdata/caps_1.6.50-1.caps
index bfaab9d..0151cde 100644
--- a/tests/qemucapabilitiesdata/caps_1.6.50-1.caps
+++ b/tests/qemucapabilitiesdata/caps_1.6.50-1.caps
@@ -135,4 +135,5 @@
 flag name='ich9-intel-hda'/
 flag name='kvm-pit-lost-tick-policy'/
 flag name='boot-strict'/
+flag name='usb-kbd'/
   /qemuCaps
diff --git a/tests/qemuhelptest.c b/tests/qemuhelptest.c
index 3628fbe..6e0a5f8 100644
--- a/tests/qemuhelptest.c
+++ b/tests/qemuhelptest.c
@@ -403,6 +403,7 @@ mymain(void)
 QEMU_CAPS_DEVICE_VMWARE_SVGA,
 QEMU_CAPS_DEVICE_USB_SERIAL,
 QEMU_CAPS_DEVICE_USB_NET,
+QEMU_CAPS_DEVICE_USB_KBD,
 QEMU_CAPS_DEVICE_PCI_BRIDGE);
 DO_TEST(qemu-kvm-0.12.3, 12003, 1, 0,
 QEMU_CAPS_VNC_COLON,
@@ -515,6 +516,7 @@ mymain

[libvirt] [PATCH v2 0/5] Support keyboard device

2013-12-05 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

This patchset is to add keyboard input device.

For PPC64, it doesn't support a default keyboard device when the graphic
is enabled. Libvirt supports QEMU command line as -device VGA which 
won't create any keyboard device for it. So it requires libvirt to add
a default USB keyboard device for it.

This patchset is to add keyboard input device and a default USB keyboard
for PPC64.

The related discussion in QEMU community:
http://lists.nongnu.org/archive/html/qemu-devel/2013-11/msg01734.html

Li Zhang (5):
  conf: Add a keyboard input device type
  qemu_cap: Add USB keyboard capability
  docs/schemas/domaincommon.rng: add keyboard input device type
  qemu: parse USB keyboard qemu command line.
  Add a default USB keyboard for PPC64

 v2 - v1:
   * change ifs to switch clause.
   * reconstruct the patches

 docs/schemas/domaincommon.rng  |  1 +
 src/conf/domain_conf.c | 62 --
 src/conf/domain_conf.h |  5 ++
 src/libvirt_private.syms   |  1 +
 src/qemu/qemu_capabilities.c   |  2 +
 src/qemu/qemu_capabilities.h   |  1 +
 src/qemu/qemu_command.c| 18 +--
 src/qemu/qemu_domain.c | 14 -
 tests/qemucapabilitiesdata/caps_1.2.2-1.caps   |  1 +
 tests/qemucapabilitiesdata/caps_1.3.1-1.caps   |  1 +
 tests/qemucapabilitiesdata/caps_1.4.2-1.caps   |  1 +
 tests/qemucapabilitiesdata/caps_1.5.3-1.caps   |  1 +
 tests/qemucapabilitiesdata/caps_1.6.0-1.caps   |  2 +
 tests/qemucapabilitiesdata/caps_1.6.50-1.caps  |  1 +
 tests/qemuhelptest.c   |  8 +++
 .../qemuxml2argvdata/qemuxml2argv-pseries-disk.xml |  1 +
 .../qemuxml2argv-pseries-usb-kbd.args  |  9 
 .../qemuxml2argv-pseries-usb-kbd.xml   | 19 +++
 tests/qemuxml2argvtest.c   |  3 ++
 19 files changed, 130 insertions(+), 21 deletions(-)
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.xml

-- 
1.8.2.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH v2 3/5] docs/schemas/domaincommon.rng: add keyboard input device type

2013-12-05 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

This patch is to add keyboard input device type in docs/schemas/domaincommon.rng

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
 docs/schemas/domaincommon.rng | 1 +
 1 file changed, 1 insertion(+)

diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index 80848d2..2496045 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -3167,6 +3167,7 @@
 choice
   valuetablet/value
   valuemouse/value
+  valuekbd/value
 /choice
   /attribute
   optional
-- 
1.8.2.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


Re: [libvirt] [PATCH 1/4] Add USB Keyboard support in libvirt

2013-12-05 Thread Li Zhang

On 2013年12月05日 19:41, Daniel P. Berrange wrote:

On Mon, Dec 02, 2013 at 03:27:09PM +0800, Li Zhang wrote:

From: Li Zhang zhlci...@linux.vnet.ibm.com

PS2 devices are not supported for non-x86 platforms. So it needs one USB
keyboard when graphic is enabled.

This patch is to add one kbd input device type for users to add one
USB keyboard in XML file as the following:
   input type='kbd' bus='usb'/


Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
  src/conf/domain_conf.c   |  3 ++-
  src/conf/domain_conf.h   |  1 +
  src/qemu/qemu_capabilities.c |  3 +++
  src/qemu/qemu_capabilities.h |  2 ++
  src/qemu/qemu_command.c  | 12 +---
  5 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 7b0e3ea..d90f05c 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -504,7 +504,8 @@ VIR_ENUM_IMPL(virDomainVideo, VIR_DOMAIN_VIDEO_TYPE_LAST,
  
  VIR_ENUM_IMPL(virDomainInput, VIR_DOMAIN_INPUT_TYPE_LAST,

mouse,
-  tablet)
+  tablet,
+  kbd)
  
  VIR_ENUM_IMPL(virDomainInputBus, VIR_DOMAIN_INPUT_BUS_LAST,

ps2,

This is insufficient. If you look through domain_conf.c you'll find
lots of places referencing VIR_DOMAIN_INPUT_TYPE_{MOUSE,TABLET} which
do special handling. We're going to need much the same for the new
KEYBOARD device too.

And both the Xen driver and QEMU driver will need updating to take
into account the new device type.


OK, I will look through these places to do some changes.



Daniel


--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Re: [libvirt] [PATCH 3/4] schemas/domaincommon.rng: add keyboard input device type

2013-12-05 Thread Li Zhang

On 2013年12月05日 19:42, Daniel P. Berrange wrote:

On Mon, Dec 02, 2013 at 03:27:11PM +0800, Li Zhang wrote:

From: Li Zhang zhlci...@linux.vnet.ibm.com

This patch is to add keyboard input device type in domaincommon.rng

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
  docs/schemas/domaincommon.rng | 1 +
  1 file changed, 1 insertion(+)

The schema change should be in the same patch that changes the parser


Got it, thanks.


Daniel


--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Re: [libvirt] [PATCH 4/4] tests: add test cases for USB keyboard

2013-12-05 Thread Li Zhang

On 2013年12月05日 19:42, Daniel P. Berrange wrote:

On Mon, Dec 02, 2013 at 03:27:12PM +0800, Li Zhang wrote:

From: Li Zhang zhlci...@linux.vnet.ibm.com

This patch is to add USB keyboard test cases for capabilities,
qemuxml2argvtest and qemuargv2xmltest.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
  tests/qemucapabilitiesdata/caps_1.2.2-1.caps  |  1 +
  tests/qemucapabilitiesdata/caps_1.3.1-1.caps  |  1 +
  tests/qemucapabilitiesdata/caps_1.4.2-1.caps  |  1 +
  tests/qemucapabilitiesdata/caps_1.5.3-1.caps  |  1 +
  tests/qemucapabilitiesdata/caps_1.6.0-1.caps  |  1 +
  tests/qemucapabilitiesdata/caps_1.6.50-1.caps |  1 +
  tests/qemuhelptest.c  |  8 
  tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml  |  1 +
  .../qemuxml2argv-pseries-usb-kbd.args |  9 +
  .../qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.xml | 19 +++
  tests/qemuxml2argvtest.c  |  3 +++
  11 files changed, 46 insertions(+)
  create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args
  create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.xml

Test cases should be added in the same patch that adds the
new QEMU command line code.


Got it. I added these to new QEMU command line code in my V2.
I will push my V3 based on your comments.

Thanks. :)



Daniel


--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Re: [libvirt] [PATCH v2 1/5] conf: Add a keyboard input device type

2013-12-05 Thread Li Zhang

On 2013年12月05日 18:11, Ján Tomko wrote:

On 12/05/2013 09:17 AM, Li Zhang wrote:

From: Li Zhang zhlci...@linux.vnet.ibm.com

There is no keyboard for PPC64 platform when grapchic is enabled.

s/grapchic is/graphics are/


It's preferred to add one USB keyboard.

This patch is to add keyboard input device type.

It also splits out 'virDomainDefMaybeAddInput', which would be nicer in a
separate commit IMO.


Thanks for your reviewing.
OK, I will do it in my next version.




Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
  src/conf/domain_conf.c   | 62 +++-
  src/conf/domain_conf.h   |  5 
  src/libvirt_private.syms |  1 +
  3 files changed, 51 insertions(+), 17 deletions(-)

@@ -10821,6 +10822,41 @@ virDomainDefMaybeAddController(virDomainDefPtr def,
  return 0;
  }
  
+int

+virDomainDefMaybeAddInput(virDomainDefPtr def,
+   int type,
+   int bus)
+{
+size_t i;
+virDomainInputDefPtr input;
+
+for (i = 0; i  def-ninputs; i++) {
+if (def-inputs[i]-type == type 
+def-inputs[i]-bus == bus)
+return 0;
+}
+
+if (VIR_ALLOC(input)  0) {
+goto error;
+}
+input-type = type;
+input-bus = bus;
+
+if (VIR_REALLOC_N(def-inputs, def-ninputs + 1)  0) {
+virDomainInputDefFree(input);
+goto error;
+}
+
+def-inputs[def-ninputs] = input;
+def-ninputs ++;

VIR_APPEND_ELEMENT(def-inputs, def-ninputs, input) will do all this
and set input to NULL if it was successfully added - you can call InputDefFree
unconditionally.


Got it, thanks.



+return 0;
+
+error:
+virReportOOMError();

*ALLOC and *ELEMENT already set the OOM error.


ok, I see.



+return -1;
+}
+
+
  
  /* Parse a memory element located at XPATH within CTXT, and store the

   * result into MEM.  If REQUIRED, then the value must exist;

Jan



--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Re: [libvirt] [PATCH v2 4/5] qemu: parse USB keyboard qemu command line.

2013-12-05 Thread Li Zhang

On 2013年12月05日 18:11, Ján Tomko wrote:

On 12/05/2013 09:17 AM, Li Zhang wrote:

From: Li Zhang zhlci...@linux.vnet.ibm.com

This patch is to parse USB keyboard qemu command line

s/parse/format/

OK.




and add test cases for it.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
  src/qemu/qemu_command.c   | 18 +++---
  .../qemuxml2argv-pseries-usb-kbd.args |  9 +
  .../qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.xml | 19 +++
  tests/qemuxml2argvtest.c  |  3 +++
  4 files changed, 46 insertions(+), 3 deletions(-)
  create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args
  create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.xml

diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 9539be7..d65fe27 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -5307,9 +5307,21 @@ qemuBuildUSBInputDevStr(virDomainDefPtr def,
  {
  virBuffer buf = VIR_BUFFER_INITIALIZER;
  
-virBufferAsprintf(buf, %s,id=%s,

-  dev-type == VIR_DOMAIN_INPUT_TYPE_MOUSE ?
-  usb-mouse : usb-tablet, dev-info.alias);
+switch (dev-type) {
+case VIR_DOMAIN_INPUT_TYPE_MOUSE:
+virBufferAsprintf(buf, usb-mouse,id=%s, dev-info.alias);
+break;
+case VIR_DOMAIN_INPUT_TYPE_TABLET:
+virBufferAsprintf(buf, usb-tablet,id=%s, dev-info.alias);
+break;
+case VIR_DOMAIN_INPUT_TYPE_KBD:
+if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_USB_KBD))

Missing virReportError.


I will add it.




+goto error;
+virBufferAsprintf(buf, usb-kbd,id=%s, dev-info.alias);
+break;

This would add a tablet if QEMU_CAPS_DEVICE is not supported:

 if (input-bus == VIR_DOMAIN_INPUT_BUS_USB) {
 if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) {
 char *optstr;
 virCommandAddArg(cmd, -device);
 if (!(optstr = qemuBuildUSBInputDevStr(def, input, qemuCaps)))
 goto error;
 virCommandAddArg(cmd, optstr);
 VIR_FREE(optstr);
 } else {
 virCommandAddArgList(cmd, -usbdevice,
  input-type == VIR_DOMAIN_INPUT_TYPE_MOUSE
  ? mouse : tablet, NULL);

 }
 }



You are right, I need to clean all these mouse/tablet code.
I will do it in my next version.


--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Re: [libvirt] [PATCH v2 3/5] docs/schemas/domaincommon.rng: add keyboard input device type

2013-12-05 Thread Li Zhang

On 2013年12月05日 18:11, Ján Tomko wrote:

On 12/05/2013 09:17 AM, Li Zhang wrote:

From: Li Zhang zhlci...@linux.vnet.ibm.com

This patch is to add keyboard input device type in docs/schemas/domaincommon.rng

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
  docs/schemas/domaincommon.rng | 1 +
  1 file changed, 1 insertion(+)


I'd squash this one together with the commit adding VIR_DOMAIN_INPUT_TYPE_KBD.


ok.


Jan




--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Re: [libvirt] [PATCH v2 2/5] qemu_cap: Add USB keyboard capability

2013-12-05 Thread Li Zhang

On 2013年12月05日 18:11, Ján Tomko wrote:

On 12/05/2013 09:17 AM, Li Zhang wrote:

From: Li Zhang zhlci...@linux.vnet.ibm.com

QEMU can support USB keyboard but libvirt haven't supportted it yet.

s/haven't supportted/hasn't supported/

This patch is to add USB keyboard capabilities and test cases.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
  src/qemu/qemu_capabilities.c  | 2 ++
  src/qemu/qemu_capabilities.h  | 1 +
  tests/qemucapabilitiesdata/caps_1.2.2-1.caps  | 1 +
  tests/qemucapabilitiesdata/caps_1.3.1-1.caps  | 1 +
  tests/qemucapabilitiesdata/caps_1.4.2-1.caps  | 1 +
  tests/qemucapabilitiesdata/caps_1.5.3-1.caps  | 1 +
  tests/qemucapabilitiesdata/caps_1.6.0-1.caps  | 2 ++
  tests/qemucapabilitiesdata/caps_1.6.50-1.caps | 1 +
  tests/qemuhelptest.c  | 8 
  9 files changed, 18 insertions(+)



Thanks.


ACK

Jan



--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Re: [libvirt] [PATCH v2 2/5] qemu_cap: Add USB keyboard capability

2013-12-05 Thread Li Zhang

On 2013年12月05日 18:11, Ján Tomko wrote:

On 12/05/2013 09:17 AM, Li Zhang wrote:

From: Li Zhang zhlci...@linux.vnet.ibm.com

QEMU can support USB keyboard but libvirt haven't supportted it yet.

s/haven't supportted/hasn't supported/

This patch is to add USB keyboard capabilities and test cases.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---
  src/qemu/qemu_capabilities.c  | 2 ++
  src/qemu/qemu_capabilities.h  | 1 +
  tests/qemucapabilitiesdata/caps_1.2.2-1.caps  | 1 +
  tests/qemucapabilitiesdata/caps_1.3.1-1.caps  | 1 +
  tests/qemucapabilitiesdata/caps_1.4.2-1.caps  | 1 +
  tests/qemucapabilitiesdata/caps_1.5.3-1.caps  | 1 +
  tests/qemucapabilitiesdata/caps_1.6.0-1.caps  | 2 ++
  tests/qemucapabilitiesdata/caps_1.6.50-1.caps | 1 +
  tests/qemuhelptest.c  | 8 
  9 files changed, 18 insertions(+)



Thanks.


ACK

Jan



--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

  1   2   3   4   >