From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=50011 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OLA58-00052X-P5 for qemu-devel@nongnu.org; Sun, 06 Jun 2010 03:15:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OLA57-0007ik-Qr for qemu-devel@nongnu.org; Sun, 06 Jun 2010 03:15:42 -0400 Received: from mx1.redhat.com ([209.132.183.28]:23873) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OLA57-0007ic-IZ for qemu-devel@nongnu.org; Sun, 06 Jun 2010 03:15:41 -0400 Date: Sun, 6 Jun 2010 10:15:36 +0300 From: Gleb Natapov Subject: Re: [Qemu-devel] Re: [RFT][PATCH 07/15] qemu_irq: Add IRQ handlers with delivery feedback Message-ID: <20100606071536.GA2337@redhat.com> References: <20100601183058.GB6191@redhat.com> <4C074A72.3070507@web.de> <20100603063456.GM24302@redhat.com> <4C0752CB.9030701@web.de> <20100603070300.GN24302@redhat.com> <20100603070559.GO24302@redhat.com> <4C099471.3060507@web.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4C099471.3060507@web.de> List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Jan Kiszka Cc: Blue Swirl , qemu-devel@nongnu.org, Juan Quintela On Sat, Jun 05, 2010 at 02:04:01AM +0200, Jan Kiszka wrote: > > I'd like to also support EOI handling. When the guest clears the > > interrupt condtion, the EOI callback would be called. This could occur > > much later than the IRQ delivery time. I'm not sure if we need the > > result code in that case. > > > > If any intermediate device (IOAPIC?) needs to be informed about either > > delivery or EOI also, it could create a proxy message with its > > callbacks in place. But we need then a separate opaque field (in > > addition to payload) to store the original message. > > > > struct IRQMsg { > > DeviceState *src; > > void (*delivery_cb)(IRQMsg *msg, int result); > > void (*eoi_cb)(IRQMsg *msg, int result); > > void *src_opaque; > > void *payload; > > }; > > Extending the lifetime of IRQMsg objects beyond the delivery call stack > means qemu_malloc/free for every delivery. I think it takes a _very_ > appealing reason to justify this. But so far I do not see any use case > for eio_cb at all. > I dislike use of eoi for reinfecting missing interrupts since it eliminates use of internal PIC/APIC queue of not yet delivered interrupts. PIC and APIC has internal queue that can handle two elements: one is delivered, but not yet acked interrupt in isr and another is pending interrupt in irr. Using eoi callback (or ack notifier as it's called inside kernel) interrupt will be considered coalesced even if irr is cleared, but no ack was received for previously delivered interrupt. But ack notifiers actually has another use: device assignment. There is a plan to move device assignment from kernel to userspace and for that ack notifiers will have to be extended to userspace too. If so we can use them to do irq decoalescing as well. I doubt they should be part of IRQMsg though. Why not do what kernel does: have globally registered notifier based on irqchip/pin. -- Gleb.