From: Olaf Dabrunz <Olaf.Dabrunz@gmx.net>
To: Stefan Assmann <sassmann@redhat.com>
Cc: "qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
Olaf Dabrunz <Olaf.Dabrunz@gmx.net>,
Alexander Graf <agraf@suse.de>, Avi Kivity <avi@redhat.com>
Subject: Re: [Qemu-devel] [PATCH 1/2] Route PC irqs to ISA bus instead of i8259 directly
Date: Mon, 10 Aug 2009 15:14:41 +0200 [thread overview]
Message-ID: <20090810131441.GB14714@santana.dyndns.org> (raw)
In-Reply-To: <4A7FEC23.1050708@redhat.com>
On 10-Aug-09, Stefan Assmann wrote:
> On 10.08.2009 11:04, Alexander Graf wrote:
>>
>> Am 09.08.2009 um 18:44 schrieb Avi Kivity <avi@redhat.com>:
>>
>>> A PC has its motherboard IRQ lines connected to both the PIC and IOAPIC.
>>> Currently, qemu routes IRQs to the PIC which then calls the IOAPIC, an
>>> incestuous arrangement. In order to clean this up, create a new ISA IRQ
>>> abstraction, and have devices raise ISA IRQs (which in turn raise the
>>> i8259
>>> IRQs as usual).
>>
>> Is this really true? From my understanding the PIC in modern systems is
>> emulated through the IOAPIC, which is the reason we have legacy interrupts.
>
> While not sure how the hardware implementation is done in detail I can
> confirm that the IRQs indeed end up at both PIC and IO-APIC0 if the
> device is connected to the southbridge directly. If that's not the case
> for example a PCI bus connected via PCIe that sports it's own IO-APIC
> then IRQs are forwarded (over PCIe) from the IO-APIC to the southbridge
> (PIC).
To be exact, IRQs on modern PCs are routed to both an IO-APIC and the
PIC via wires and some routing mechanism. (Support for the PIC is
required by ACPI.) The routing mechanism to the PIC does _not_ involve
an IO-APIC. It is implementation-specific to the chipset and the board,
and operating systems get routing info from the ACPI tables (delivered
by the BIOS). The routing to the PIC is set up by the BIOS, which knows
how to program the chipset-specific routing registers.
The IO-APICs are standard components that are programmed by the
operating system. They do not have any "forwarding to the PIC"
component. The intention is that there are no implementation-specific
differences between them (except for number of lines, the generation of
the IO-APIC spec and slight differences in the hardware implementation).
They are supposed to be programmable by the OS in a standard way. That
is why they cannot be part of a scheme that routes IRQs to the PIC.
Now that being said, there are mechanisms like boot interrupts that on
some chipsets activate forwarding of interrupts to the PIC, when the
corresponding "line" in a (secondary) IO-APIC is disabled. This means
that the IO-APIC state is "sampled" by some logic to select forwarding
to the PIC. The IO-APIC itself is not part of this mechanism, it is just
"being watched".
> In any case, to come closer to the real hardware having an abstraction
> that receives IRQs from devices and delivers them to the appropriate
> interrupt controller(s) seems to be a valid step IMHO.
>
> Does qemu support multiple IO-APICs? I guess not so no need for boot
> interrupts. (If yes then there would be the question how close you
> really want to be to existing hardware.)
>
> Stefan
--
Olaf Dabrunz (Olaf.Dabrunz <at> gmx.net)
next prev parent reply other threads:[~2009-08-10 13:14 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-08-09 16:44 [Qemu-devel] [PATCH 0/2] Disentagle ISA IRQs Avi Kivity
2009-08-09 16:44 ` [Qemu-devel] [PATCH 1/2] Route PC irqs to ISA bus instead of i8259 directly Avi Kivity
2009-08-10 8:34 ` Gerd Hoffmann
2009-08-10 8:46 ` Avi Kivity
2009-08-10 9:04 ` Alexander Graf
2009-08-10 9:43 ` Avi Kivity
2009-08-10 9:45 ` Stefan Assmann
2009-08-10 9:52 ` Avi Kivity
2009-08-10 13:20 ` Olaf Dabrunz
2009-08-10 13:14 ` Olaf Dabrunz [this message]
2009-08-09 16:44 ` [Qemu-devel] [PATCH 2/2] Route IOAPIC interrupts via ISA bus Avi Kivity
2009-08-10 8:38 ` Gerd Hoffmann
2009-08-26 16:03 ` Gerd Hoffmann
2009-08-26 16:06 ` Avi Kivity
2009-08-26 16:30 ` Gerd Hoffmann
2009-08-26 19:09 ` Gleb Natapov
2009-08-27 7:40 ` Gerd Hoffmann
2009-08-27 7:57 ` Gleb Natapov
2009-08-27 8:18 ` Jamie Lokier
2009-08-27 8:24 ` Gleb Natapov
2009-08-27 8:55 ` Gerd Hoffmann
2009-08-27 10:35 ` Isaku Yamahata
2009-08-27 21:07 ` [Qemu-devel] " Bjørn Mork
2009-08-27 4:53 ` [Qemu-devel] " Avi Kivity
2009-08-27 7:35 ` Gerd Hoffmann
2009-08-27 7:57 ` Avi Kivity
2009-08-27 8:13 ` Gerd Hoffmann
2009-08-27 8:26 ` Avi Kivity
2009-08-28 2:20 ` Beth Kon
2009-08-29 17:47 ` Avi Kivity
2009-08-30 2:09 ` Beth Kon
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=20090810131441.GB14714@santana.dyndns.org \
--to=olaf.dabrunz@gmx.net \
--cc=agraf@suse.de \
--cc=avi@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=sassmann@redhat.com \
/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).