Testing Fiasco.OC+L4re on ODROID-X2(Exynos4412)

Reinier Millo Sánchez rmillo at uclv.cu
Wed May 27 00:05:36 CEST 2015


Hi Adam

On 05/26/2015 05:52 PM, Adam Lackorzynski wrote:
> Hi,
>
> On Fri May 22, 2015 at 02:03:24 -0400, Reinier Millo Sánchez wrote:
>> I've been testing somethings on the Odroid-X2(Exynos4412). It seems that the
>> IRQ handler only handles the first IRQ and disables the IRQs. I have added
>> the following code to check the IRQs in the function
>> Kernel_thread::bootstrap() in the file
>> src/kernel/fiasco/src/kern/kernel_thread.cpp
>>
>>     Per_cpu_data::run_late_ctors(Cpu::invalid());
>>     bootstrap_arch();
>>
>>     Timer_tick::enable(current_cpu());
>>     Proc::sti();
>>
>>     ++ Proc::Status st = Proc::interrupts();
>>     ++ if(st & Proc::Status_interrupts_disabled)
>>     ++    printf("IRQs are enabled\n");
> Just use if (st) ... , Proc::interrupts() is returning a boolean.
I have tested using if(st) and the result is the same.
>
>>     ++ else
>>     ++    printf("IRQs are disabled\n");
>>
>>     Watchdog::enable();
>>
>> I'm trying to check that the IRQs are enabled. The Proc::sti() must activate
>> the IRQs in the CPSR registers, and Proc::interrupts() must return if the
>> interrupts are enabled, but always i'm getting "IRQs are disabled". I have
>> tested the hardware with a Linux kernel and it's working fine. I have tested
>> "CPSIE i" and "CPSIE f" to enable the interrupts and get the same result.
>> I have incremented the warn level on Fiasco.OC, i'm getting:
>>
>>     KERNEL: Warning Buddy:alloc Size mismatch: a80 v 1000
>>
>> I have also tested the local timers on the Exynos4412. The local timer at
>> CPU0 is working fine. It has been configured to auto-reload with 12000 as
>> interval. The local counter decrements the value and reload when arrives
>> zero, but don't raises the interrupt.
>> To test the interrupts have created an small buffer to store the
>> Kip::k()->clock on every interrupt. I have used the buffer to avoid the call
>> of an interrupt inside another interrupt. I have tried to print the values
>> on the function Delay::mesaure(), but it only stores one value. The same
>> thing happens if I use a interrupt counter.
>> Now i'm trying to check the IRQ handler caller, from the general mechanism
>> to the specific interrupt handler, to catch the point where the IRQs are
>> been disabled.
>> Anyone have any suggestions?
> So the handler is actually called all the time right?
The handler is called once, after that, the interrupt remains disabled.
Best regards

-- 
Lic. Reinier Millo Sánchez
Centro de Estudios de Informática
Universidad Central "Marta Abreu" de Las Villas
Carretera a Camajuaní Km 5 1/2
Santa Clara, Villa Clara, Cuba
CP 54830

"antes de discutir ... respira;
   antes de hablar ... escucha;
  antes de escribir ... piensa;
   antes de herir ... siente;
  antes de rendirte ... intenta;
   antes de morir ... vive"

-------------- next part --------------
A non-text attachment was scrubbed...
Name: rmillo.vcf
Type: text/x-vcard
Size: 515 bytes
Desc: not available
URL: <http://os.inf.tu-dresden.de/pipermail/l4-hackers/attachments/20150526/ccdc1980/attachment-0001.vcf>


More information about the l4-hackers mailing list