[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20120814145022.GB4606@redhat.com>
Date: Tue, 14 Aug 2012 17:50:22 +0300
From: "Michael S. Tsirkin" <mst@...hat.com>
To: Avi Kivity <avi@...hat.com>
Cc: Alex Williamson <alex.williamson@...hat.com>, gleb@...hat.com,
kvm@...r.kernel.org, linux-kernel@...r.kernel.org,
jan.kiszka@...mens.com
Subject: Re: [PATCH v7 2/2] kvm: KVM_EOIFD, an eventfd for EOIs
On Tue, Aug 14, 2012 at 03:35:54PM +0300, Avi Kivity wrote:
> On 08/12/2012 12:33 PM, Michael S. Tsirkin wrote:
> >>
> >> Michael, would the interface be more acceptable to you if we added
> >> separate ioctls to allocate and free some representation of an irq
> >> source ID, gsi pair? For instance, an ioctl might return an idr entry
> >> for an irq source ID/gsi object which would then be passed as a
> >> parameter in struct kvm_irqfd and struct kvm_eoifd so that the object
> >> representing the source id/gsi isn't magically freed on it's own. This
> >> would also allow us to deassign/close one end and reconfigure it later.
> >> Thanks,
> >>
> >> Alex
> >
> > It's acceptable to me either way. I was only pointing out that as
> > designed, the interface looks simple at first but then you find out some
> > subtle limitations which are implementation driven. This gives
> > an overall feeling the abstraction is too low level.
> >
> > If we compare to the existing irqfd, isn't the difference
> > simply that irqfd deasserts immediately ATM, while we
> > want to delay this until later?
> >
> > If yes, then along the lines that you proposed, and combining with my
> > idea of tracking deasserts, how do you like the following:
> >
> > /* Keep line asserted until guest has handled the interrupt. */
> > #define KVM_IRQFD_FLAG_DEASSERT_ON_ACK (1 << 1)
> > /* Notify after line is deasserted. */
> > #define KVM_IRQFD_FLAG_DEASSERT_EVENTFD (2 << 1)
> >
> > struct kvm_irqfd {
> > __u32 fd;
> > __u32 gsi;
> > __u32 flags;
> > /* eventfd to notify when line is deasserted */
> > __u32 deassert_eventfd;
> > __u8 pad[16];
> > };
> >
> > now the only limitation is that KVM_IRQFD_FLAG_DEASSERT_ON_ACK is only
> > effective for level interrupts.
> >
> > Notes about lifetime of objects:
> > - closing deassert_eventfd does nothing (we can keep
> > reference to it from irqfd so no need for
> > complex polling/flushing scheme)
> > - closing irqfd or deasserting dis-associates
> > deassert_eventfd automatically
> > - source id is internal to irqfd and goes away with it
> >
> > it looks harder to misuse and fits what we want to do nicely,
> > and needs less code to implement.
> >
> > Avi, what do you think?
>
> I think given all the complexity in the separate ioctl approach that
> this makes sense. There are no lifetime issues or code to match the two
> eventfds.
OK, it's fine with me too then. Pls disregard my earlier proposal to
deassert immediately; Gleb showed me it does not work.
> Alex, would this API simplify the code?
>
> Yet another option was raised in the past, and that was exiling ioapic
> and pic to userspace. This moves the entire issue to userspace. The
> cost is a new interface that implements the APIC bus (betweem APIC and
> IOAPIC) and the INTACK sequence (between APIC and PIC), and potential
> for performance regressions due to the PIC, IOAPIC, and PIT being in
> userspace. We would still have to keep the IOAPIC/PIC in the kernel,
> but no new features would be added.
>
> However, this is a huge job. We could discuss this to death too but I
> have the feeling the end result will be to choose the shorter path --
> adding irqackfd/deassertfd/whateverwecallitfd.
>
>
> --
> error compiling committee.c: too many arguments to function
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists