On 10/12/2010 08:00 AM, Markus Armbruster wrote:
Markus Armbruster<arm...@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.

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.

Regards,

Anthony Liguori



Reply via email to