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

Re: [Xen-devel] translate pirq to irq



On 12/01/2014 19:26, Igor Kozhukhov wrote:
> Hi Andrew,
>
> On Jan 12, 2014, at 10:29 PM, Andrew Cooper wrote:
>
>> On 11/01/2014 22:59, Igor Kozhukhov wrote:
>>> Hello All,
>>>
>>> I see a comment in physdev.h for 'struct physdev_map_pirq', var 'pirq':
>>> /* IN - high 16 bits hold segment for MAP_PIRQ_TYPE_MSI_SEG */
>>>
>>> i have received 'pirq' from hypervisor > 255.
>>>
>>> map_irq.domid = DOMID_SELF;                                                 
>>>   
>>> map_irq.type = MAP_PIRQ_TYPE_MSI;                                           
>>>   
>>> map_irq.index = -1; /* hypervisor auto allocates vector */                  
>>>   
>>> map_irq.pirq = -1;                                                          
>>>   
>>> map_irq.bus = busnum;                                                       
>>>   
>>> map_irq.devfn = devfn;                                                      
>>>   
>>> map_irq.entry_nr = i;                                                       
>>>   
>>> map_irq.table_base = 0;                                              
>>> rc = HYPERVISOR_physdev_op(PHYSDEVOP_map_pirq, &map_irq);                   
>>>   
>>> irqno = map_irq.pirq;
>>>
>>> i have:
>>> irqno = 279 - it is more APIC_MAX_VECTOR(255)
>>>
>>> i have a question: how to correct translate pirq to irq for APIC map table ?
>>>
>>> all work well on xen-3.4, but it has another realization in function 
>>> physdev_map_pirq() then for xen-4.2.
>> Is this for a PV or HVM guest?  I suspect PV, in which case the irqno
>> handed back will be the event channel on which the notification will
>> arrive, and has nothing to do with regular IDT vectors.
> it is for dom0.
>
> full boot log with xen debug info and DDI_DEBUG on illumos you can find here :
> http://apt2.dilos.org/dilos/logs/putty.log.dom0.txt
>
>
> if it is possible - could you please let me know how to work MSI irq 
> translation to APIC irq table for xen-4.2 ?
>
> i see - in xen code we have a range from 16 to 784 for 4 CPU for MSI IRQ 
> (irq_create() function)
> but - how to correct translate it to APIC IRQ (physical irq)?

Why do you need to know?

Xen controls all interrupts on the system.  Event channels which you
register with Xen have no mapping/relation to local apic vectors.  Your
device drivers should not expect to have an apic vector in their hand.

The reason behind this is that as virtual cpus get scheduled around
physical cpus, Xen needs to move the interrupts from IDT to IDT at which
point their vector will change.

~Andrew


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.