All of lore.kernel.org
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: Anthony Liguori <anthony@codemonkey.ws>
Cc: qemu-devel@nongnu.org, "H. Peter Anvin" <hpa@linux.intel.com>,
	Gerd Hoffmann <kraxel@redhat.com>, Alexander Graf <agraf@suse.de>,
	"Richard W. M. Jones" <rjones@redhat.com>
Subject: Re: [Qemu-devel] qdev: Some ISA devices don't handle second instantiation gracefully
Date: Tue, 12 Oct 2010 15:54:59 +0200	[thread overview]
Message-ID: <m3fwwbfrd8.fsf@blackfin.pond.sub.org> (raw)
In-Reply-To: <4CB46239.60500@codemonkey.ws> (Anthony Liguori's message of "Tue, 12 Oct 2010 08:27:21 -0500")

Anthony Liguori <anthony@codemonkey.ws> writes:

> On 10/12/2010 08:00 AM, Markus Armbruster wrote:
>> Markus Armbruster<armbru@redhat.com>  writes:
>>
>>    
>>> When I try -device isa-applesmc -device isa-applesmc, I get
>>>
>>>      WARNING: Using AppleSMC with invalid key
>>>      qemu: hardware error: register_ioport_read: invalid opaque
>>>      [...]
>>>
>>> and a core dump.
>>>
>>> I know nothing about this device.  Instantiating twice may well make no
>>> sense.  But hw_error() is not a nice way to reject a command line
>>> option.
>>>      
>> Actually, ib700 and isa-debugcon fail the same way.
>>
>> They call register_ioport_write(), which aborts via hw_error() when the
>> port is already in use.  This is okay for non-configurable parts of a
>> board emulation, but not okay for a qdev device, unless it has no_user
>> set.
>>    
>
> It's definitely right to fail but I agree, it's better to propagate
> the error.
>
>> Related: when isa_init_irq() finds the requested IRQ already in use, it
>> fails with exit(1).  Maybe register_ioport_write()&  friends should do
>> that as well.
>>
>> Or maybe qdev device models should have an "at most one" flag.
>>    
>
> I think the proper thing to do is remove all exit(1)s and propagate
> errors instead.

exit() is good enough during startup, i.e. -device.  It's wrong for hot
plug; anything to be used in a hot plug path must propagate errors.  We
could keep exiting in code that's only used by non-hotpluggable devices.

> A simple approach would be to make register_ioport_{read,write}()
> return an int, then do a query-replace on the source tree to make all
> invocations of it simply check the return value and exit if it's
> non-zero.

In similar cases, we've used a simple FOO_nofail() wrapper in places
that want to exit.

I'll see what I can do.

  reply	other threads:[~2010-10-12 13:56 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-10-12 12:50 [Qemu-devel] isa-applesmc doesn't handle second instantiation gracefully Markus Armbruster
2010-10-12 12:57 ` [Qemu-devel] " Alexander Graf
2010-10-12 13:00 ` [Qemu-devel] qdev: Some ISA devices don't handle second instantiation gracefully (was: isa-applesmc doesn't handle second instantiation gracefully) Markus Armbruster
2010-10-12 13:04   ` [Qemu-devel] " Alexander Graf
2010-10-12 14:52     ` [Qemu-devel] Re: qdev: Some ISA devices don't handle second instantiation gracefully Gerd Hoffmann
2010-10-12 13:27   ` [Qemu-devel] " Anthony Liguori
2010-10-12 13:54     ` Markus Armbruster [this message]
2010-10-12 14:24       ` Anthony Liguori
2010-10-13 12:47   ` [Qemu-devel] Re: qdev: Some ISA devices don't handle second instantiation gracefully (was: isa-applesmc doesn't handle second instantiation gracefully) Richard W.M. Jones

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=m3fwwbfrd8.fsf@blackfin.pond.sub.org \
    --to=armbru@redhat.com \
    --cc=agraf@suse.de \
    --cc=anthony@codemonkey.ws \
    --cc=hpa@linux.intel.com \
    --cc=kraxel@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=rjones@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.