On 2013-04-23 19:12, Kai Bollue wrote:
> On 23.04.2013 17:43, Jan Kiszka wrote:
>>
>> Here is the first (and hopefully the only) problem:
>>
>> [  100.359484] I-pipe: Detected illicit call from head domain 'Xenomai'
>> [  100.359484] <3>        into a regular Linux service
>> [  100.493487]  |  #*func               [  100.493482] Pid: 0, comm: 
>> swapper/6 Tainted: G           O 3.5.7-xenomai-2.6.2.1 #7
>> [  100.493483] Call Trace:
>> [  100.493485] I-pipe tracer log (100 points):
>> [  100.493510]  |  #*func                    0 ipipe_prepare_panic+0x7 
>> (ipipe_root_only+0x5d)
>> [  100.493536]  |  #*func                    0 ipipe_root_only+0x9 
>> (add_preempt_count+0x15)
>> [  100.493563]  |  #*func                   -1 add_preempt_count+0x9 
>> (_raw_spin_lock_irqsave+0x56)
>> [  100.493588]  |  # func                   -1 _raw_spin_lock_irqsave+0x7 
>> (alloc_iommu+0x68)
>> [  100.493612]  |  # func                   -1 alloc_iommu+0x11 
>> (dma_map_area+0x58)
>> [  100.493640]  |  # func                   -1 dma_map_area+0x11 
>> (gart_map_page+0x67)
>> [  100.493666]  |  # func                   -1 gart_map_page+0x8 
>> (pci_map_single+0x82 [rt_eepro100])
>> [  100.493693]  |  # func                   -1 __phys_addr+0x4 
>> (pci_map_single+0x53 [rt_eepro100])
>> [  100.493721]  |  # func                   -1 ___xnpod_lock_sched+0x4 
>> (__xnpod_lock_sched+0x21 [rt_eepro100])
>> [  100.493747]  |  + begin   0x80000000     -2 speedo_start_xmit+0x3a 
>> [rt_eepro100] (rtdev_locked_xmit+0x33 [rtnet])
>> [  100.493778]     + func                   -2 speedo_start_xmit+0x11 
>> [rt_eepro100] (rtdev_locked_xmit+0x33 [rtnet])
>>
>> You have an IOMMU enabled, but the rt_eepro100 is lacking support for
>> premapping its DMA buffers so that it does not call into Linux IOMMU
>> remapping code during runtime. The latter raises the error above.
>>
>> Unless you depend on the IOMMU (unlikely unless KVM is on your feature
>> list), disable it and retry.
> 
> OK, now we disabled IOMMU support in the kernel. Unfortunately, still 
> the same problem.

Yeah, its hairy:

[   94.352526]  |  #*func               0 ipipe_trace_panic_freeze+0x9 
(ipipe_root_only+0x62)
[   94.360774]  |  #*func               0 ipipe_prepare_panic+0x7 
(ipipe_root_only+0x5d)
[   94.368618]  |  #*func               0 ipipe_root_only+0x9 
(add_preempt_count+0x15)
[   94.376263]  |  #*func               0 add_preempt_count+0x9 
(_raw_spin_lock_irqsave+0x56)
[   94.384515]  |  # func               0 _raw_spin_lock_irqsave+0x7 
(swiotlb_tbl_map_single+0x96)
[   94.392925]  |  # func              -1 __phys_addr+0x4 ( |  # func           
       -1 __phys_addr+0x4 (pci_map_single+0x53 [rt_eepro100])
[   94.392945]  |  # func              -1 ___xnpod_lock_sched+0x4 
(__xnpod_lock_sched+0x21 [rt_eepro100])
[   94.392954]  |  + begin   0x80000000     -2 speedo_start_xmit+0x3a 
[rt_eepro100] (rtdev_locked_xmit+0x33 [rtnet])
[   94.392964]     + func              -2 speedo_start_xmit+0x11 [rt_eepro100] 
(rtdev_locked_xmit+0x33 [rtnet])

Now the swiotlb is active, a software IOMMU that helps on systems >4G
RAM with devices that can only DMA to 32-bit addresses (it provides
bounce buffers). You can work around that issue by limiting the memory
used by your system (mem=) or by using an RTnet NIC that does not have
this limitation (rt_e1000e and rt_igb compatible ones). Or add
pre-mapping support to the rt_e100pro. Check e.g. the conversion of the
e1000e for the pattern. Patches welcome.

Jan

-- 
Siemens AG, Corporate Technology, CT RTC ITP SDP-DE
Corporate Competence Center Embedded Linux

_______________________________________________
Xenomai mailing list
[email protected]
http://www.xenomai.org/mailman/listinfo/xenomai

Reply via email to