From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: [Qemu-devel] [PATCH] [RFC] Fix time drift of rtc clock + general support Date: Mon, 24 Mar 2008 15:56:19 +0200 Message-ID: <47E7B303.2050100@qumranet.com> References: <1206282453.18800.31.camel@localhost.localdomain> <200803231619.32472.paul@codesourcery.com> <47E7542C.60901@qumranet.com> <200803241345.29197.paul@codesourcery.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Cc: kvm-devel , qemu-devel@nongnu.org To: Paul Brook Return-path: In-Reply-To: <200803241345.29197.paul@codesourcery.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: kvm-devel-bounces@lists.sourceforge.net Errors-To: kvm-devel-bounces@lists.sourceforge.net List-Id: kvm.vger.kernel.org Paul Brook wrote: > On Monday 24 March 2008, Avi Kivity wrote: > >> Paul Brook wrote: >> >>> On Sunday 23 March 2008, Dor Laor wrote: >>> >>>> --- a/qemu/hw/irq.c >>>> +++ b/qemu/hw/irq.c >>>> @@ -30,6 +30,8 @@ struct IRQState { >>>> int n; >>>> }; >>>> >>>> +uint32_t qemu_irq_acked[NR_IRQ_WORDS]; >>>> >>> This is absolute rubbish. The whole point of the IRQ framework is that it >>> doesn't assume a single flat IRQ controller. >>> >> x86 does have a single irq space (even when using cascaded pics or >> multiple ioapics), called gsi (for generalized system interrupt, or >> something). It is possible to enumerate all irqs on all platforms that >> have a finite number of them. >> > > Sure, it's possible to enumerate all the possible IRQ inputs (it's effectively > the same as enumerating all the IRQ sources). It's not possible to say > anything particularly useful about that enumeration though. > It's not uncommon for interrupts to be connected to GPIO pins, be inverted, or > have interrupt routings that change dynamically. > > Right, but... >> It may be better though to identify an irq by a (controller_id, >> irq_line) pair instead. >> > > That's what qemu_irq is for. Anything else is IMHO wrong. > In the case of a kernel virtualization module (like kqemu of kvm) that is able to handle interrupt injection, qemu_irq is not sufficient since it is not visible to the kernel. We need some serialization that can pass the user/kernel boundary. For x86 gsi is a satisfactory serialization. Even for a pure qemu solution, qemu_irq is difficult to work with. For the x86 case, we know which vector was successfully injected, and we need to work out which qemu_irq caused it. This is not deterministic in the general case (since several irq lines can cause the same vector to be injected, and since the irq->vector mapping can change), so any solution will involve heuristics. -- error compiling committee.c: too many arguments to function ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/