On 5/20/09, Michael S. Tsirkin <mst@xxxxxxxxxx> wrote: > On Wed, May 20, 2009 at 09:38:58PM +0300, Blue Swirl wrote: > > On 5/20/09, Michael S. Tsirkin <mst@xxxxxxxxxx> wrote: > > > On Wed, May 20, 2009 at 08:44:31PM +0300, Blue Swirl wrote: > > > > On 5/20/09, Michael S. Tsirkin <mst@xxxxxxxxxx> wrote: > > > > > On Wed, May 20, 2009 at 08:21:01PM +0300, Blue Swirl wrote: > > > > > > On 5/20/09, Michael S. Tsirkin <mst@xxxxxxxxxx> wrote: > > > > > > > define api for allocating/setting up msi-x irqs, and for updating them > > > > > > > with msi-x vector information, supply implementation in ioapic. Please > > > > > > > comment on this API: I intend to port my msi-x patch to work on top of > > > > > > > it. > > > > > > > > > > > > > > Signed-off-by: Michael S. Tsirkin <mst@xxxxxxxxxx> > > > > > > > > > > > > Sparc64 also uses packets ("mondos", not implemented yet) for > > > > > > interrupt vector data, there the packet size is 8 * 64 bits. > > > > > > I think we should aim for a more generic API that covers this case also. > > > > > > > > > > > > > > > Are you sure this is a good idea? MSI is tied to PCI, and PCI only has > > > > > MSI, not "mondos". What code would benefit from this abstraction? > > > > > > > > Sparc64 emulation, of course. I think also the API would be neater. > > > > > > > > > Since "mondos" are not interrupts, why use irqs for them? > > > > I just said above that they are used for interrupt vector data. What > > makes you think they are not interrupts? > > > I'm sorry, I don't really know anything about sparc. > All I am saying is that in PCI, interrupts never pass data, > so qemu_set_irq as it is now, is a good API to send them. > > For the sparc feature you describe, you probably want to add > a message data parameter to qemu_set_irq, but it's not > really useful for MSI. But maybe this API would be useful for both MSI and mondo packets: /* Get vector data stored in the irq */ void *qemu_irq_get_data(qemu_irq irq); /* Set vector data stored in the irq */ void qemu_irq_set_data(qemu_irq irq, void *data); You'd use a struct msi_state as the opaque (not using the array indexed by irq number), I'd use some kind of struct mondo { uint64_t packet[8]; }; Instead of ioapic_update_msi(), you'd call qemu_irq_set_data(). _______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/virtualization