All of lore.kernel.org
 help / color / mirror / Atom feed
From: Cleber Rosa <crosa@redhat.com>
To: Wainer dos Santos Moschetta <wainersm@redhat.com>
Cc: fam@euphon.net, ehabkost@redhat.com, jsnow@redhat.com,
	qemu-devel@nongnu.org, alex.bennee@linaro.org, philmd@redhat.com
Subject: Re: [PATCH v2 2/4] python/qemu: accel: Add list_accel() method
Date: Wed, 11 Dec 2019 12:46:28 -0500	[thread overview]
Message-ID: <20191211174628.GA519@localhost.localdomain> (raw)
In-Reply-To: <fee77377-2ffc-af79-4740-23682096f799@redhat.com>

[-- Attachment #1: Type: text/plain, Size: 3590 bytes --]

On Wed, Dec 11, 2019 at 02:58:35PM -0200, Wainer dos Santos Moschetta wrote:
> 
> On 12/9/19 10:52 PM, Cleber Rosa wrote:
> > On Fri, Dec 06, 2019 at 04:34:31PM -0500, Wainer dos Santos Moschetta wrote:
> > > Since commit cbe6d6365a48 the command `qemu -accel help` returns
> > > the list of accelerators enabled in the QEMU binary. This adds
> > > the list_accel() method which return that same list.
> > > 
> > > Signed-off-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
> > > Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
> > > Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> > > ---
> > >   python/qemu/accel.py | 23 +++++++++++++++++++++++
> > >   1 file changed, 23 insertions(+)
> > > 
> > > diff --git a/python/qemu/accel.py b/python/qemu/accel.py
> > > index cbeac10dd1..746b7e68f5 100644
> > > --- a/python/qemu/accel.py
> > > +++ b/python/qemu/accel.py
> > > @@ -14,7 +14,11 @@ accelerators.
> > >   # the COPYING file in the top-level directory.
> > >   #
> > > +import logging
> > >   import os
> > > +import subprocess
> > > +
> > > +LOG = logging.getLogger(__name__)
> > >   # Mapping host architecture to any additional architectures it can
> > >   # support which often includes its 32 bit cousin.
> > > @@ -23,6 +27,25 @@ ADDITIONAL_ARCHES = {
> > >       "aarch64" : "armhf"
> > >   }
> > > +def list_accel(qemu_bin):
> > > +    """
> > > +    List accelerators enabled in the QEMU binary.
> > > +
> > > +    @param qemu_bin (str): path to the QEMU binary.
> > > +    @raise Exception: if failed to run `qemu -accel help`
> > > +    @return a list of accelerator names.
> > > +    """
> > > +    if not qemu_bin:
> > > +        return []
> > > +    try:
> > > +        out = subprocess.check_output("%s -accel help" % qemu_bin, shell=True)
> > There's no need to use a shell here.  This could become:
> > 
> >     out = subprocess.check_output([qemu_bin, '-accel' 'help'])
> 
> Ack
> 
> > 
> > > +    except:
> > > +        LOG.debug("Failed to get the list of accelerators in %s" % qemu_bin)
> > > +        raise
> > > +    lines = out.decode().splitlines()
> > And maybe discard the first line earlier with:
> > 
> >     lines = out.decode().splitlines()[1:]
> > 
> > Also, you could avoid the manual decode() with the `universal_newlines`
> > option to subprocess.check_output(), ie:
> > 
> >     accels = subprocess.check_output([qemu-bin, '-accel', 'help'],
> >                                      universal_newlines=True).splitlines()[1:]
> 
> Nice. v3 will have universal_newlines=True.
> 
> > 
> > > +    # Skip the first line which is the header.
> > > +    return [l.strip() for l in lines[1:] if l]
> > > +
> > I think that the `if l` check can actually hide undesirable behavior
> > (bugs) in the `qemu -accel ?` output.  I don't remember seeing
> > `-$(option) ?` returning empty strings but doesn't mean it couldn't
> > and shouldn't).
> > 
> > I do remember `-machine ?` returning random non-printable characters
> > that turned out to be a bug, though.
> 
> Double-checking: are you suggesting to remove the 'if not empty' check so
> that bugs on output could emerge?
>

Yes, that's my suggestion.  I don't think we need to process QEMU's
output beyond what it's expected to be returned.

Cheers,
- Cleber.

> Thanks!
> 
> - Wainer
> 
> > 
> > >   def kvm_available(target_arch=None):
> > >       host_arch = os.uname()[4]
> > >       if target_arch and target_arch != host_arch:
> > > -- 
> > > 2.21.0
> > > 
> > - Cleber.
> 
> 

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  reply	other threads:[~2019-12-11 17:47 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-06 21:34 [PATCH v2 0/4] python/qemu: New accel module and improvements Wainer dos Santos Moschetta
2019-12-06 21:34 ` [PATCH v2 1/4] python/qemu: Move kvm_available() to its own module Wainer dos Santos Moschetta
2019-12-10  0:36   ` Cleber Rosa
2019-12-06 21:34 ` [PATCH v2 2/4] python/qemu: accel: Add list_accel() method Wainer dos Santos Moschetta
2019-12-10  0:52   ` Cleber Rosa
2019-12-11 16:58     ` Wainer dos Santos Moschetta
2019-12-11 17:46       ` Cleber Rosa [this message]
2019-12-06 21:34 ` [PATCH v2 3/4] python/qemu: accel: Strengthen kvm_available() checks Wainer dos Santos Moschetta
2019-12-10  0:58   ` Cleber Rosa
2019-12-06 21:34 ` [PATCH v2 4/4] python/qemu: accel: Add tcg_available() method Wainer dos Santos Moschetta
2019-12-10  1:18   ` Cleber Rosa

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=20191211174628.GA519@localhost.localdomain \
    --to=crosa@redhat.com \
    --cc=alex.bennee@linaro.org \
    --cc=ehabkost@redhat.com \
    --cc=fam@euphon.net \
    --cc=jsnow@redhat.com \
    --cc=philmd@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --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.