binfmt: add enter_critical_section

adding enter_critical_section to ensure non preemption in smp
Signed-off-by: hujun5 <hujun5@xiaomi.com>
This commit is contained in:
hujun5
2023-08-04 11:33:29 +08:00
committed by Xiang Xiao
parent 6eabacf304
commit b185f8d889
+4
View File
@@ -77,6 +77,7 @@ int exec_spawn(FAR const char *filename, FAR char * const *argv,
FAR const posix_spawnattr_t *attr) FAR const posix_spawnattr_t *attr)
{ {
FAR struct binary_s *bin; FAR struct binary_s *bin;
irqstate_t flags;
int pid; int pid;
int ret; int ret;
@@ -126,6 +127,7 @@ int exec_spawn(FAR const char *filename, FAR char * const *argv,
* handler. * handler.
*/ */
flags = enter_critical_section();
sched_lock(); sched_lock();
/* Then start the module */ /* Then start the module */
@@ -160,10 +162,12 @@ int exec_spawn(FAR const char *filename, FAR char * const *argv,
#endif #endif
sched_unlock(); sched_unlock();
leave_critical_section(flags);
return pid; return pid;
errout_with_lock: errout_with_lock:
sched_unlock(); sched_unlock();
leave_critical_section(flags);
unload_module(bin); unload_module(bin);
errout_with_bin: errout_with_bin:
kmm_free(bin); kmm_free(bin);