From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1M77PF-000833-0W for qemu-devel@nongnu.org; Thu, 21 May 2009 08:29:53 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1M77PA-0007zS-9g for qemu-devel@nongnu.org; Thu, 21 May 2009 08:29:52 -0400 Received: from [199.232.76.173] (port=47734 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1M77PA-0007zF-0u for qemu-devel@nongnu.org; Thu, 21 May 2009 08:29:48 -0400 Received: from mx20.gnu.org ([199.232.41.8]:52139) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1M77P9-0004nt-6f for qemu-devel@nongnu.org; Thu, 21 May 2009 08:29:47 -0400 Received: from mail.codesourcery.com ([65.74.133.4]) by mx20.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1M77P5-0002XG-Tr for qemu-devel@nongnu.org; Thu, 21 May 2009 08:29:44 -0400 From: Paul Brook Subject: Re: [Qemu-devel] [PATCH] qemu: msi irq allocation api Date: Thu, 21 May 2009 13:29:37 +0100 References: <20090520162130.GA22109@redhat.com> <200905211301.52089.paul@codesourcery.com> <4A154432.1060808@redhat.com> In-Reply-To: <4A154432.1060808@redhat.com> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200905211329.41578.paul@codesourcery.com> List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Carsten Otte , kvm@vger.kernel.org, "Michael S. Tsirkin" , Rusty Russell , virtualization@lists.linux-foundation.org, Christian Borntraeger , Avi Kivity On Thursday 21 May 2009, Avi Kivity wrote: > Paul Brook wrote: > >>>> In any case we need some internal API for this, and qemu_irq looks > >>>> like a good choice. > >>> > >>> What do you expect to be using this API? > >> > >> virtio, emulated devices capable of supporting MSI (e1000?), device > >> assignment (not yet in qemu.git). > > > > It probably makes sense to have common infrastructure in pci.c to > > expose/implement device side MSI functionality. However I see no need for > > a direct API between the device and the APIC. We already have an API for > > memory accesses and MMIO regions. I'm pretty sure a system could > > implement MSI by pointing the device at system ram, and having the CPU > > periodically poll that. > > Instead of writing directly, let's abstract it behind a qemu_set_irq(). > This is easier for device authors. The default implementation of the > irq callback could write to apic memory, while for kvm we can directly > trigger the interrupt via the kvm APIs. I'm still not convinced. A tight coupling between PCI devices and the APIC is just going to cause us problems later one. I'm going to come back to the fact that these are memory writes so once we get IOMMU support they will presumably be subject to remapping by that, just like any other memory access. Even ignoring that, qemu_irq isn't really the right interface. A MSI is a one- off event, not a level state. OTOH stl_phys is exactly the right interface. The KVM interface should be contained within the APIC implementation. Paul