From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: [KVM PATCH v2 1/2] KVM: export lockless GSI attribute Date: Sun, 25 Oct 2009 16:30:12 +0200 Message-ID: <4AE460F4.2090905@redhat.com> References: <20091023023512.3891.65889.stgit@dev.haskins.net> <20091023023845.3891.36857.stgit@dev.haskins.net> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, alacrityvm-devel@lists.sourceforge.net To: Gregory Haskins Return-path: In-Reply-To: <20091023023845.3891.36857.stgit@dev.haskins.net> Sender: linux-kernel-owner@vger.kernel.org List-Id: kvm.vger.kernel.org On 10/23/2009 04:38 AM, Gregory Haskins wrote: > Certain GSI's support lockless injecton, but we have no way to detect > which ones at the GSI level. Knowledge of this attribute will be > useful later in the series so that we can optimize irqfd injection > paths for cases where we know the code will not sleep. Therefore, > we provide an API to query a specific GSI. > > Instead of a lockless attribute, how about a ->set_atomic() method. For msi this can be the same as ->set(), for non-msi it can be a function that schedules the work (which will eventually call ->set()). The benefit is that we make a decision only once, when preparing the routing entry, and install that decision in the routing entry instead of making it again and again later. > +int kvm_irq_check_lockless(struct kvm *kvm, u32 irq) > bool kvm_irq_check_lockless(...) > +{ > + struct kvm_kernel_irq_routing_entry *e; > + struct kvm_irq_routing_table *irq_rt; > + struct hlist_node *n; > + int ret = -ENOENT; > + > + rcu_read_lock(); > + irq_rt = rcu_dereference(kvm->irq_routing); > + if (irq< irq_rt->nr_rt_entries) > + hlist_for_each_entry(e, n,&irq_rt->map[irq], link) > + ret = e->lockless ? 1 : 0; > ret = e->lockless; > + rcu_read_unlock(); > + > + return ret; > +} > + > -- error compiling committee.c: too many arguments to function