[NSWI004] dprintk makes my code stable
Petr Tuma
petr.tuma at d3s.mff.cuni.cz
Sun Oct 25 07:11:53 CET 2020
... and, looking at your current solution, I would recommend https://stackoverflow.com/questions/9935190/why-is-a-point-to-volatile-pointer-like-volatile-int-p-useful as an additional study material.
Petr
On 24/10/2020 17:42, Petr Tuma wrote:
> Hi,
>
> check the C modifier "volatile" and think about the possible difference in optimizations the compiler can do when you (1) have a loop that calls a complex function in a different compilation unit vs (2) have a loop that is quite simple and the compiler can see all variable manipulation.
>
> https://barrgroup.com/embedded-systems/how-to/c-volatile-keyword
>
> Petr
>
>
> On 24/10/2020 07:46, Jura Pelc wrote:
>> So have here awkward behaving of code.
>>
>>
>> I have a block of code where originally was `dprintk` for debugging and everything was fine.
>> But when I tried to remove it (for the sanity of debug output) kernel crashed. (Both with `.configure.py --debug`)
>> I can't see why this is happing and most importantly WHY IS THIS HAPPENING?
>>
>> both `print` and `dprintk` should not apply any change.
>>
>>
>> This is a copy of the issue: https://gitlab.mff.cuni.cz/teaching/nswi004/2020/team-please_dont/-/issues/15 <https://gitlab.mff.cuni.cz/teaching/nswi004/2020/team-please_dont/-/issues/15>
>> related to branch https://gitlab.mff.cuni.cz/teaching/nswi004/2020/team-please_dont/-/tree/bugfix/K-15 <https://gitlab.mff.cuni.cz/teaching/nswi004/2020/team-please_dont/-/tree/bugfix/K-15>
>>
>> file: `heap.c/search_heap_size`
>> When running with `dprintk`, code will run smoothly and the result is expected.
>> ```c
>> *((int*)scanner) = 0xC0FFEE;
>> dprintk("Scanning: 0x%x (%x)\n", scanner, *((int*)scanner));
>> if(*((int*)scanner) != 0xC0FFEE)
>> ```
>>
>> ``` shell
>> [DEBUG src/mm/heap.c:24 search_heap_size()] Scanning: 0x800fb130 (c0ffee)
>> [DEBUG src/mm/heap.c:24 search_heap_size()] Scanning: 0x800fc130 (c0ffee)
>> [DEBUG src/mm/heap.c:24 search_heap_size()] Scanning: 0x800fd130 (c0ffee)
>> [DEBUG src/mm/heap.c:24 search_heap_size()] Scanning: 0x800fe130 (c0ffee)
>> [DEBUG src/mm/heap.c:24 search_heap_size()] Scanning: 0x800ff130 (c0ffee)
>> [DEBUG src/mm/heap.c:24 search_heap_size()] Scanning: 0x80100130 (c0ffee)
>> [DEBUG src/mm/heap.c:27 search_heap_size()] NonMatch: 0x80100130 (ffffffff)
>> [DEBUG src/mm/heap.c:149 heap_init()] heap_begin: 0x80001130
>> [DEBUG src/mm/heap.c:150 heap_init()] heap_end: 0x800ff130
>> [DEBUG src/mm/heap.c:151 heap_init()] heap size: 1016 bytes
>> Hello world!
>> <msim> Alert: XHLT: Machine halt
>>
>> Cycles: 229951
>> ```
>>
>>
>>
>> When running **Without** `dprintk`, code will fail during the process.
>> ```c
>> *((int*)scanner) = 0xC0FFEE;
>> //dprintk("Scanning: 0x%x (%x)\n", scanner, *((int*)scanner));
>> if(*((int*)scanner) != 0xC0FFEE)
>> ```
>>
>> ``` shell
>> <msim> Alert: XRD: Register dump
>> processor 0
>> 0 0 at 0 v0 ffffffffc0000f20 v1 c0ffee a0 0
>> a1 0 a2 0 a3 0 t0 0 t1 0
>> t2 0 t3 0 t4 0 t5 0 t6 0
>> t7 0 s0 0 s1 0 s2 0 s3 0
>> s4 0 s5 0 s6 0 s7 0 t8 0
>> t9 0 k0 ff01 k1 0 gp ffffffff80000000 sp ffffffff800003e8
>> fp 0 ra ffffffff80000440 pc ffffffff80000180 lo 0 hi 0
>> <msim> Alert: XINT: Interactive mode
>> [msim]
>> ```
>>
>>
>> --
>>
>> S pozdravem Jiří Pelc
>> Matematicko-fyzikální fakulta
>> Univerzita Karlova
>>
>> _______________________________________________
>> NSWI004 mailing list
>> NSWI004 at d3s.mff.cuni.cz
>> https://d3s.mff.cuni.cz/mailman/listinfo/nswi004
>>
> _______________________________________________
> NSWI004 mailing list
> NSWI004 at d3s.mff.cuni.cz
> https://d3s.mff.cuni.cz/mailman/listinfo/nswi004
More information about the NSWI004
mailing list