Re: [KVM PATCH v2 1/2] KVM: export lockless GSI attribute

From: Avi Kivity
Date: Sun Oct 25 2009 - 10:30:42 EST


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

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/