qemu-devel
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]