Re: [PATCH 4/6] KVM: Add kvm_get_irq_routing_entry() func

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux