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