From: Anthony Liguori <anthony@codemonkey.ws>
To: Gleb Natapov <gleb@redhat.com>
Cc: Peter Maydell <peter.maydell@linaro.org>,
Jan Kiszka <jan.kiszka@siemens.com>,
qemu-devel <qemu-devel@nongnu.org>,
Markus Armbruster <armbru@redhat.com>,
Gerd Hoffmann <kraxel@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>,
"Edgar E. Iglesias" <edgar.iglesias@gmail.com>
Subject: Re: [Qemu-devel] [RFC] Plan for moving forward with QOM
Date: Thu, 15 Sep 2011 12:51:23 -0500 [thread overview]
Message-ID: <4E723B1B.5070805@codemonkey.ws> (raw)
In-Reply-To: <20110915165921.GF11524@redhat.com>
On 09/15/2011 11:59 AM, Gleb Natapov wrote:
> On Thu, Sep 15, 2011 at 11:33:00AM -0500, Anthony Liguori wrote:
>> On 09/15/2011 10:38 AM, Gleb Natapov wrote:
>>> On Thu, Sep 15, 2011 at 10:28:52AM -0500, Anthony Liguori wrote:
>>>> On 09/15/2011 09:25 AM, Gleb Natapov wrote:
>>>>
>>>> There is no canonical parent link. A device may have multiple (more
>>>> or less equivalent) parents.
>>>>
>>>> What should be treated as the "canonical" link depends on what
>>>> you're trying to do. In the case of OF, you want to treat the bus
>>>> as a parent. If a device happens to sit on multiple buses, I'm not
>>>> really sure what you do.
>>>>
>>> Yes, "canonical" is a link to a bus. Can you give an example of a device
>>> that sits on multiple buses?
>>
>> Not all devices buses that they sit on.
>>
> Missing "have"? If device has no bus how do you talk to it? Who carries
> the signal from a cpu to a device?
>
>> A good example is our favorite one to debate--the PIIX3. Devices
> PIIX3 is a collection of devices, not a device.
>
>> like the UART don't sit on a bus. They don't have any links at all.
> In PC UART sits on isa bus. How device can have no links at all? It just
> glued to a motherboard not touching any wires?
A bus implies a bidirectional relationship. IOW, the device has to know that it
sits on a ISA bus to be an ISA device.
The UART has no knowledge of the fact that is mapped behind ISA. The UART
exposes a public interface (through it's pins) that's orthogonal to any buses.
That public interface may be consumed by 1 or more consumers. Some pins may be
used by one device while other pins are used by another device.
Some other logic maps the UART to the rest of the system. My view of modelling
the PIIX3 that I illustrated in this thread is that the PIIX3 encompasses this
logic.
Another way to view it, the PIIX3 has direct knowledge of a UART's public
interface but a UART has no knowledge of the PIIX3's public interface.
>> Instead, the PIIX3 itself bridges the public interface of the UART
>> via its PC interface. So it looks something like this:
> Again you are talking about particular HW implantation, not SW interface
> that the package implements and we need to emulate the later not the
> former.
I'm not. There is no way for a UART to talk to the PIIX3. You can't query it
to figure out where it lives in the device graph. All it can do is generate an
interrupt and hope something is listening. There is no hardware equivalent of
'cpu_register_physical_memory'. Some other piece of hardware has to route
requests to it in a form that it understands.
>
>>
>> class Serial : public Device
>> {
>> uint8_t read(uint8_t addr);
>> };
>>
>> class PIIX3 : public PciDevice, implements PciBus
>> {
>> Serial *tty[4];
>> };
>>
> Make this isa slots, encapsulate UART into isa device and plug one
> into another. You just cut corners here. You wouldn't do the same for
> PCI device, but theoretically you can. You will be able to compose new
> chipset with config file too!
But then you need to have:
class IsaSerial : public IsaDevice
{
Serial uart;
};
All you've done is take the dispatch logic and moved it from PIIX3 to IsaSerial
for the only purpose of creating an artificial abstraction (of having a bus that
doesn't exist).
All devices don't sit on buses. That's the main design problem of qdev.
>> uint32_t PIIX3::pio_access(uint16_t addr, int size)
>> {
>> if (addr == 0x3f8&& this->tty[0]) {
>> return this->tty[0]->read(addr - 0x3f8);
>> } else {
>> ...
>> }
>> }
> Wow, hard coded that way? So another chipset implementation will
> have to duplicate the same exact code?
Yup. We're moving to this model anyway with the memory API. The Serial device
will export a MemoryRegion where its registers start at address 0 and then a
higher layer (IsaSerial or PIIX3) will add that MemoryRegion to it's
MemoryRegion starting at a given offset.
>> There is no backlink in the Serial device so there's no way of
>> walking up the graph from the Serial device itself. You have to
>> transverse to it to build a path.
>>
> That because implementation cut corners (read "incorrect"). Actually
> ability to walk the graph all the way up is a good test that we didn't
> cheated anywhere by pretending that devices are connected by magic.
How do you "walk up the device graph" from a 16650A? What signals are you going
to send out of the pins to do that?
If a device can always do self->parent->parent->parent->send_io(foo) then the
design is fundamentally broken and you will end up with devices that do things
that they shouldn't do.
Regards,
Anthony Liguori
>
> --
> Gleb.
>
next prev parent reply other threads:[~2011-09-15 17:51 UTC|newest]
Thread overview: 88+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-09-14 18:04 [Qemu-devel] [RFC] Plan for moving forward with QOM Anthony Liguori
2011-09-14 18:49 ` Anthony Liguori
2011-09-14 19:30 ` Jan Kiszka
2011-09-14 19:42 ` Anthony Liguori
2011-09-14 21:15 ` Jan Kiszka
2011-09-14 22:11 ` Anthony Liguori
2011-09-15 13:43 ` Jan Kiszka
2011-09-15 14:11 ` Anthony Liguori
2011-09-15 16:38 ` Jan Kiszka
2011-09-15 18:01 ` Anthony Liguori
2011-09-16 10:12 ` Kevin Wolf
2011-09-16 13:00 ` Anthony Liguori
2011-09-14 20:00 ` Edgar E. Iglesias
2011-09-14 20:22 ` Anthony Liguori
2011-09-14 20:27 ` Edgar E. Iglesias
2011-09-14 20:37 ` Blue Swirl
2011-09-14 21:25 ` Anthony Liguori
2011-09-15 6:31 ` Gleb Natapov
2011-09-15 10:49 ` Stefan Hajnoczi
2011-09-15 13:08 ` Anthony Liguori
2011-09-15 13:17 ` Anthony Liguori
2011-09-15 14:23 ` Gleb Natapov
2011-09-16 14:46 ` John Williams
2011-09-16 16:10 ` Anthony Liguori
2011-09-17 1:11 ` Edgar E. Iglesias
2011-09-17 2:12 ` Anthony Liguori
2011-09-17 2:35 ` Edgar E. Iglesias
2011-09-15 13:57 ` Anthony Liguori
2011-09-15 14:14 ` Paolo Bonzini
2011-09-15 14:25 ` Gleb Natapov
2011-09-15 15:28 ` Anthony Liguori
2011-09-15 15:38 ` Gleb Natapov
2011-09-15 16:33 ` Anthony Liguori
2011-09-15 16:59 ` Gleb Natapov
2011-09-15 17:51 ` Anthony Liguori [this message]
2011-09-15 20:29 ` Gleb Natapov
2011-09-15 20:45 ` Peter Maydell
2011-09-15 21:15 ` Anthony Liguori
2011-09-16 16:33 ` Gleb Natapov
2011-09-16 17:47 ` Peter Maydell
2011-09-16 18:08 ` Anthony Liguori
2011-09-16 18:22 ` Gleb Natapov
2011-09-16 18:42 ` Anthony Liguori
2011-09-16 19:13 ` Gleb Natapov
2011-09-16 19:29 ` Anthony Liguori
2011-09-16 20:48 ` Gleb Natapov
2011-09-16 21:03 ` Anthony Liguori
2011-09-17 0:01 ` Edgar E. Iglesias
2011-09-16 18:18 ` Gleb Natapov
2011-09-15 20:50 ` Anthony Liguori
2011-09-16 16:47 ` Gleb Natapov
2011-09-17 0:48 ` Edgar E. Iglesias
2011-09-17 2:17 ` Anthony Liguori
2011-09-17 2:29 ` Anthony Liguori
2011-09-17 2:41 ` Edgar E. Iglesias
2011-09-15 6:47 ` Paolo Bonzini
2011-09-15 13:26 ` Anthony Liguori
2011-09-15 13:35 ` Paolo Bonzini
2011-09-15 13:54 ` Peter Maydell
2011-09-15 14:18 ` Anthony Liguori
2011-09-15 14:33 ` Paolo Bonzini
2011-09-15 14:48 ` Peter Maydell
2011-09-15 15:31 ` Anthony Liguori
2011-09-15 15:47 ` Paolo Bonzini
2011-09-15 20:23 ` Avi Kivity
2011-09-15 20:52 ` Anthony Liguori
2011-09-18 7:56 ` Avi Kivity
2011-09-18 14:00 ` Avi Kivity
2011-09-16 9:36 ` Gerd Hoffmann
2011-12-13 4:47 ` Paul Brook
2011-12-13 13:22 ` Anthony Liguori
2011-12-13 17:40 ` Paul Brook
2011-12-13 18:00 ` Anthony Liguori
2011-12-13 20:36 ` Paul Brook
2011-12-13 21:53 ` Anthony Liguori
2011-12-14 0:39 ` Paul Brook
2011-12-14 13:53 ` Anthony Liguori
2011-12-14 14:01 ` Avi Kivity
2011-12-14 14:11 ` Anthony Liguori
2011-12-14 14:35 ` Avi Kivity
2011-12-14 14:46 ` Anthony Liguori
2011-12-14 14:50 ` Avi Kivity
2011-12-15 18:59 ` Paul Brook
2011-12-15 19:12 ` Anthony Liguori
2011-12-15 21:28 ` Paul Brook
2011-12-16 2:08 ` Anthony Liguori
2011-12-16 5:11 ` Paul Brook
2011-12-14 9:11 ` Andreas Färber
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4E723B1B.5070805@codemonkey.ws \
--to=anthony@codemonkey.ws \
--cc=armbru@redhat.com \
--cc=edgar.iglesias@gmail.com \
--cc=gleb@redhat.com \
--cc=jan.kiszka@siemens.com \
--cc=kraxel@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).