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

Re: [Xen-devel] translate pirq to irq



On 12/01/2014 21:01, Igor Kozhukhov wrote:
> On Jan 13, 2014, at 12:34 AM, Andrew Cooper wrote:
>
>> 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.
> is it possible to receive IRQ from APIC table from Xen as index ?

No.

> i need it for local APIC pointer to APIC table array as index.
> all others functions is using index from apic_irq_table[] as APIC IRQ.
>
> i have function apic_find_irq() for this. 
> it is not my realization - it is original code.

Nothing in a dom0 system should know/care about apic vectors.  Dom0
cannot use the IDT, nor can it even write to MSI/MSI-X configuration
registers (they get trapped and fixed-up by Xen).

Even if there were a hypercall to map an event channel back to an
apic-id/vector, it is possible that the data would be stale by the time
the vcpu ran again.

~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®.