[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] Re: qdev: Some ISA devices don't handle second instantiatio
From: |
Alexander Graf |
Subject: |
[Qemu-devel] Re: qdev: Some ISA devices don't handle second instantiation gracefully (was: isa-applesmc doesn't handle second instantiation gracefully) |
Date: |
Tue, 12 Oct 2010 15:04:01 +0200 |
On 12.10.2010, at 15:00, Markus Armbruster wrote:
> Markus Armbruster <address@hidden> 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.
>
> 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.
There can be multiple of these devices on different ports, but a single PIO
port can still only be managed by a single device. By creating the same device
twice without giving it a PIO option, you put two devices on the same PIO port
which can't work.
As this is a configuration error, I'd guess the best way to deal with it is to
return an error for register_ioport which makes the qdev init fail. Then the
respective instantiator can do what is fit. If the device is passed in on the
cmdline, it'd refuse to create the machine and exit. If it's a hotplug event,
it would fail to hotplug.
Alex