Oh! SMP_PAUSE actually jumps here! I would *not* expect that, when I read code like this:
> SMP_PAUSE(active); > foo(); > bar(42); > SMP_RESUME();
Something like the following would be a lot clearer for me:
> if (mhartid() == active) { > foo();
bar(42);
> }
Or maybe:
> if (running_on_hart(active)) { ... }
But note that this lacks the barriers/locking that your code has.
Jonathan Neuschäfer
``` if (running_on_hart(active)) { ... } ``` Yes, these codes are clearer.
/* * If your code needs to temporarily block multiple-threads, do this: * SMP_PAUSE(active) // `active` is hartid of working thread * ... single-threaded work ... * SMP_RESUME() * ... multi-threaded work ... */ But sometimes multi-threaded work has to wait for the single-threaded work to complete.
etc: single-threaded work : init ddr controller multi-threaded work : some operations related to memory
It is necessary to wait for the completion of single-threaded work.
Xiang Wang