[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <4CE4F823.8030804@redhat.com>
Date: Thu, 18 Nov 2010 11:55:47 +0200
From: Avi Kivity <avi@...hat.com>
To: "Michael S. Tsirkin" <mst@...hat.com>
CC: Marcelo Tosatti <mtosatti@...hat.com>,
Gleb Natapov <gleb@...hat.com>,
Xiao Guangrong <xiaoguangrong@...fujitsu.com>,
Gregory Haskins <ghaskins@...ell.com>,
Chris Lalancette <clalance@...hat.com>, kvm@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH RFC] kvm: fast-path msi injection with irqfd
On 11/18/2010 12:12 AM, Michael S. Tsirkin wrote:
> Store irq routing table pointer in the irqfd object,
> and use that to inject MSI directly without bouncing out to
> a kernel thread.
>
> While we touch this structure, rearrange irqfd fields to make fastpath
> better packed for better cache utilization.
>
> Some notes on the design:
> - Use pointer into the rt instead of copying an entry,
> to make it possible to use rcu, thus side-stepping
> locking complexities. We also save some memory this way.
> - Old workqueue code is still used for level irqs.
> I don't think we DTRT with level anyway, however,
> it seems easier to keep the code around as
> it has been thought through and debugged, and fix level later than
> rip out and re-instate it later.
>
>
> @@ -166,6 +178,7 @@ irqfd_ptable_queue_proc(struct file *file, wait_queue_head_t *wqh,
> static int
> kvm_irqfd_assign(struct kvm *kvm, int fd, int gsi)
> {
> + struct kvm_irq_routing_table *irq_rt;
> struct _irqfd *irqfd, *tmp;
> struct file *file = NULL;
> struct eventfd_ctx *eventfd = NULL;
> @@ -215,6 +228,10 @@ kvm_irqfd_assign(struct kvm *kvm, int fd, int gsi)
> goto fail;
> }
>
> + rcu_read_lock();
> + irqfd_update(kvm, irqfd, rcu_dereference(kvm->irq_routing));
> + rcu_read_unlock();
Wow, complicated. rcu_read_lock() protects kvm->irq_routing, while
we're in the update side of rcu-protected irqfd->irq_entry.
A comment please.
The rest looks good, it's nice we finally got the irq injection path so
streamlined.
--
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