On 11/18/2010 04:22 AM, Sheng Yang wrote:
On Wednesday 17 November 2010 22:01:41 Avi Kivity wrote:
>  On 11/15/2010 11:15 AM, Sheng Yang wrote:
>  >  We need to query the entry later.
>  >
>  >  +int kvm_get_irq_routing_entry(struct kvm *kvm, int gsi,
>  >  +           struct kvm_kernel_irq_routing_entry *entry)
>  >  +{
>  >  +   int count = 0;
>  >  +   struct kvm_kernel_irq_routing_entry *ei = NULL;
>  >  +   struct kvm_irq_routing_table *irq_rt;
>  >  +   struct hlist_node *n;
>  >  +
>  >  +   rcu_read_lock();
>  >  +   irq_rt = rcu_dereference(kvm->irq_routing);
>  >  +   if (gsi<   irq_rt->nr_rt_entries)
>  >  +           hlist_for_each_entry(ei, n,&irq_rt->map[gsi], link)
>  >  +                   count++;
>  >  +   if (count == 1)
>  >  +           *entry = *ei;
>  >  +   rcu_read_unlock();
>  >  +
>  >  +   return (count != 1);
>  >  +}
>  >  +
>
>  Not good form to rely on ei being valid after the loop.
>
>  I guess this is only useful for msi?  Need to document it.

May can be used for others later, it's somehow generic. Where should I document
it?

Non-msi interrupts (wires) can be wired to more than one interrupt line (and often are - pic/ioapic).

You can document it by adding _msi to the name.

>
>  *entry may be stale after rcu_read_unlock().  Is this a problem?

I suppose not. All MSI-X MMIO accessing would be executed without delay, so no 
re-
order issue would happen. If the guest is reading and writing the field at the 
same
time(from two cpus), it should got some kinds of sync method for itself - or it
may not care what's the reading result(like the one after msix_mask_irq()).

I guess so.  Michael/Alex?

--
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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to