All of lore.kernel.org
 help / color / mirror / Atom feed
From: Cleber Rosa <crosa@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Aleksandar Markovic" <amarkovic@wavecomp.com>,
	"Caio Carrara" <ccarrara@redhat.com>,
	"Wainer dos Santos Moschetta" <wainersm@redhat.com>,
	"Philippe Mathieu-Daudé" <philmd@redhat.com>,
	"Eduardo Habkost" <ehabkost@redhat.com>,
	"Alex Bennée" <alex.bennee@linaro.org>,
	"Cornelia Huck" <cohuck@redhat.com>,
	"Cleber Rosa" <crosa@redhat.com>,
	"Aleksandar Rikalo" <arikalo@wavecomp.com>,
	"Aurelien Jarno" <aurelien@aurel32.net>,
	"Fam Zheng" <fam@euphon.net>,
	qemu-s390x@nongnu.org, "Stefan Markovic" <smarkovic@wavecomp.com>
Subject: [Qemu-devel] [PATCH v2 13/20] scripts/qemu.py: support adding a console with the default serial device
Date: Fri,  1 Feb 2019 19:56:03 -0500	[thread overview]
Message-ID: <20190202005610.24048-14-crosa@redhat.com> (raw)
In-Reply-To: <20190202005610.24048-1-crosa@redhat.com>

The set_console() utility function traditionally adds a device either
based on the explicitly given device type, or based on the machine type,
a known good type of device.

But, for a number of machine types, it may be impossible or
inconvenient to add the devices my means of "-device" command line
options, and then it may better to just use the "-serial" option and
let QEMU itself, based on the machine type, set the device
accordingly.

To achieve that, the behavior of set_console() now flags the intention
to add a console device on launch(), and if no explicit device type is
given, and there's no definition on CONSOLE_DEV_TYPES, the "-serial"
is going to be added to the QEMU command line, instead of raising
exceptions.

Based on testing with different machine types, the CONSOLE_DEV_TYPES
is now being set to the bare essential entries (one entry to be
honest), for machine types that can not easily give us a working
console with "-serial".

Signed-off-by: Cleber Rosa <crosa@redhat.com>
---
 scripts/qemu.py | 39 +++++++++++++++++++--------------------
 1 file changed, 19 insertions(+), 20 deletions(-)

diff --git a/scripts/qemu.py b/scripts/qemu.py
index eeaab99906..53bdc46ce2 100644
--- a/scripts/qemu.py
+++ b/scripts/qemu.py
@@ -34,11 +34,6 @@ def kvm_available(target_arch=None):
 
 #: Maps machine types to the preferred console device types
 CONSOLE_DEV_TYPES = {
-    r'^clipper$': 'isa-serial',
-    r'^malta': 'isa-serial',
-    r'^(pc.*|q35.*|isapc)$': 'isa-serial',
-    r'^(40p|powernv|prep)$': 'isa-serial',
-    r'^pseries.*': 'spapr-vty',
     r'^s390-ccw-virtio.*': 'sclpconsole',
     }
 
@@ -121,6 +116,7 @@ class QEMUMachine(object):
         self._temp_dir = None
         self._launched = False
         self._machine = None
+        self._console_set = False
         self._console_device_type = None
         self._console_address = None
         self._console_socket = None
@@ -240,13 +236,17 @@ class QEMUMachine(object):
                 '-display', 'none', '-vga', 'none']
         if self._machine is not None:
             args.extend(['-machine', self._machine])
-        if self._console_device_type is not None:
+        if self._console_set:
             self._console_address = os.path.join(self._temp_dir,
                                                  self._name + "-console.sock")
             chardev = ('socket,id=console,path=%s,server,nowait' %
                        self._console_address)
-            device = '%s,chardev=console' % self._console_device_type
-            args.extend(['-chardev', chardev, '-device', device])
+            args.extend(['-chardev', chardev])
+            if self._console_device_type is None:
+                args.extend(['-serial', 'chardev:console'])
+            else:
+                device = '%s,chardev=console' % self._console_device_type
+                args.extend(['-device', device])
         return args
 
     def _pre_launch(self):
@@ -472,30 +472,29 @@ class QEMUMachine(object):
         line.
 
         This is a convenience method that will either use the provided
-        device type, of if not given, it will used the device type set
-        on CONSOLE_DEV_TYPES.
+        device type, of if not given, it will use the device type set
+        on CONSOLE_DEV_TYPES if a machine type is set, and a matching
+        entry exists on CONSOLE_DEV_TYPES.
 
         The actual setting of command line arguments will be be done at
         machine launch time, as it depends on the temporary directory
         to be created.
 
-        @param device_type: the device type, such as "isa-serial"
+        @param device_type: the device type, such as "isa-serial".  If
+                            None is given (the default value) a "-serial
+                            chardev:console" command line argument will
+                            be used instead, resorting to the machine's
+                            default device type, if a machine type is set,
+                            and a matching entry exists on CONSOLE_DEV_TYPES.
         @raises: QEMUMachineAddDeviceError if the device type is not given
                  and can not be determined.
         """
-        if device_type is None:
-            if self._machine is None:
-                raise QEMUMachineAddDeviceError("Can not add a console device:"
-                                                " QEMU instance without a "
-                                                "defined machine type")
+        self._console_set = True
+        if device_type is None and self._machine is not None:
             for regex, device in CONSOLE_DEV_TYPES.items():
                 if re.match(regex, self._machine):
                     device_type = device
                     break
-            if device_type is None:
-                raise QEMUMachineAddDeviceError("Can not add a console device:"
-                                                " no matching console device "
-                                                "type definition")
         self._console_device_type = device_type
 
     @property
-- 
2.20.1

  parent reply	other threads:[~2019-02-02  0:57 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-02-02  0:55 [Qemu-devel] [PATCH v2 00/20] Acceptance Tests: target architecture support Cleber Rosa
2019-02-02  0:55 ` [Qemu-devel] [PATCH v2 01/20] scripts/qemu.py: log QEMU launch command line Cleber Rosa
2019-02-02  0:55 ` [Qemu-devel] [PATCH v2 02/20] Acceptance tests: show avocado test execution by default Cleber Rosa
2019-02-06 14:36   ` Cornelia Huck
2019-02-06 17:02     ` Cleber Rosa
2019-02-06 17:20       ` Cornelia Huck
2019-02-06 17:36         ` Cleber Rosa
2019-02-07 10:25           ` Cornelia Huck
2019-02-07 18:32             ` Cleber Rosa
2019-02-08  9:54               ` Cornelia Huck
2019-02-02  0:55 ` [Qemu-devel] [PATCH v2 03/20] Acceptance tests: improve docstring on pick_default_qemu_bin() Cleber Rosa
2019-02-02  0:55 ` [Qemu-devel] [PATCH v2 04/20] Acceptance tests: fix doc reference to avocado_qemu directory Cleber Rosa
2019-02-02  0:55 ` [Qemu-devel] [PATCH v2 05/20] Acceptance tests: introduce arch parameter and attribute Cleber Rosa
2019-02-06 15:40   ` Cornelia Huck
2019-02-07 18:02     ` Cleber Rosa
2019-02-07 18:22       ` Cleber Rosa
2019-02-08 10:10         ` Cornelia Huck
2019-02-02  0:55 ` [Qemu-devel] [PATCH v2 06/20] Acceptance tests: use "arch:" tag to filter target specific tests Cleber Rosa
2019-02-02  0:55 ` [Qemu-devel] [PATCH v2 07/20] Acceptance tests: look for target architecture in test tags first Cleber Rosa
2019-02-02  0:55 ` [Qemu-devel] [PATCH v2 08/20] Boot Linux Console Test: rename the x86_64 after the arch and machine Cleber Rosa
2019-02-02  0:55 ` [Qemu-devel] [PATCH v2 09/20] Boot Linux Console Test: update the x86_64 kernel Cleber Rosa
2019-02-02  0:56 ` [Qemu-devel] [PATCH v2 10/20] Boot Linux Console Test: add common kernel command line options Cleber Rosa
2019-02-02  1:01   ` Philippe Mathieu-Daudé
2019-02-02  0:56 ` [Qemu-devel] [PATCH v2 11/20] Boot Linux Console Test: increase timeout Cleber Rosa
2019-02-02  0:56 ` [Qemu-devel] [PATCH v2 12/20] Boot Linux Console Test: refactor the console watcher into utility method Cleber Rosa
2019-02-02  0:56 ` Cleber Rosa [this message]
2019-02-02  0:56 ` [Qemu-devel] [PATCH v2 14/20] Boot Linux Console Test: add a test for mips + malta Cleber Rosa
2019-02-02  0:56 ` [Qemu-devel] [PATCH v2 15/20] Boot Linux Console Test: add a test for mips64el " Cleber Rosa
2019-02-02  0:56 ` [Qemu-devel] [PATCH v2 16/20] Boot Linux Console Test: add a test for ppc64 + pseries Cleber Rosa
2019-02-02  0:56 ` [Qemu-devel] [PATCH v2 17/20] Boot Linux Console Test: add a test for aarch64 + virt Cleber Rosa
2019-02-02  0:56 ` [Qemu-devel] [PATCH v2 18/20] Boot Linux Console Test: add a test for arm " Cleber Rosa
2019-02-02  0:56 ` [Qemu-devel] [PATCH v2 19/20] Boot Linux Console Test: add a test for s390x + s390-ccw-virtio Cleber Rosa
2019-02-06 15:44   ` Cornelia Huck
2019-02-02  0:56 ` [Qemu-devel] [PATCH v2 20/20] Boot Linux Console Test: add a test for alpha + clipper Cleber Rosa
2019-02-02 19:20 ` [Qemu-devel] [PATCH v2 00/20] Acceptance Tests: target architecture support no-reply
2019-02-02 19:20 ` no-reply
2019-02-02 19:23 ` no-reply
2019-02-02 19:25 ` no-reply
2019-02-02 19:26 ` no-reply
2019-02-03 17:46 ` no-reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190202005610.24048-14-crosa@redhat.com \
    --to=crosa@redhat.com \
    --cc=alex.bennee@linaro.org \
    --cc=amarkovic@wavecomp.com \
    --cc=arikalo@wavecomp.com \
    --cc=aurelien@aurel32.net \
    --cc=ccarrara@redhat.com \
    --cc=cohuck@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=fam@euphon.net \
    --cc=philmd@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-s390x@nongnu.org \
    --cc=smarkovic@wavecomp.com \
    --cc=wainersm@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.