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 kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html