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: Gerd Hoffmann
Subject: [Qemu-devel] Re: qdev: Some ISA devices don't handle second instantiation gracefully
Date: Tue, 12 Oct 2010 16:52:57 +0200
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.9) Gecko/20100827 Red Hat/3.1.3-1.el6 Thunderbird/3.1.3

  Hi,

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.

ISA isn't hotpluggable anyway, so just exiting unconditionally here isn't a big issue IMHO as effectively only ISA devices are affected by this.

register_ioport_write() should exit with a more useful error message here instead of calling hw_error() though.

We could also make register_ioport_write() pass up an error and have all callers check that. Not sure this is worth the trouble though.

An "at most one" flag might make sense. But on a PC all ISA devices which exist only once at a fixed address (keyboard, floppy, ...) are automagically created so no_user does the trick here. The other ones (serial, ne2k_isa, ...) actually can be created multiple times if you configure different iobases using properties.

Dunno what kind of device apple-smc is ...

cheers,
  Gerd




reply via email to

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