mirror of https://github.com/schoebel/mars
brick: safeguard smp_mb and barrier
This commit is contained in:
parent
c8841486bd
commit
ee55f32605
|
@ -62,7 +62,7 @@
|
||||||
|
|
||||||
#define brick_msleep(msecs) _brick_msleep(msecs, false)
|
#define brick_msleep(msecs) _brick_msleep(msecs, false)
|
||||||
extern int _brick_msleep(int msecs, bool shorten);
|
extern int _brick_msleep(int msecs, bool shorten);
|
||||||
#define brick_yield() cond_resched()
|
#define brick_yield() ({ barrier(); cond_resched(); })
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
@ -754,6 +754,7 @@ typedef enum brick_switch {
|
||||||
int _err; \
|
int _err; \
|
||||||
\
|
\
|
||||||
flush_signals(current); \
|
flush_signals(current); \
|
||||||
|
smp_mb(); \
|
||||||
_thr = kthread_create(_thread_fn, _data, _fmt, ##_args); \
|
_thr = kthread_create(_thread_fn, _data, _fmt, ##_args); \
|
||||||
if (likely(!IS_ERR(_thr))) \
|
if (likely(!IS_ERR(_thr))) \
|
||||||
break; \
|
break; \
|
||||||
|
@ -777,6 +778,7 @@ typedef enum brick_switch {
|
||||||
get_task_struct(_thr); \
|
get_task_struct(_thr); \
|
||||||
wake_up_process(_thr); \
|
wake_up_process(_thr); \
|
||||||
} \
|
} \
|
||||||
|
smp_mb(); \
|
||||||
_thr; \
|
_thr; \
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -791,6 +793,7 @@ typedef enum brick_switch {
|
||||||
__REMOVE_FROM_SAY_CHANNEL(__thread__); \
|
__REMOVE_FROM_SAY_CHANNEL(__thread__); \
|
||||||
put_task_struct(__thread__); \
|
put_task_struct(__thread__); \
|
||||||
(_thread) = NULL; \
|
(_thread) = NULL; \
|
||||||
|
smp_mb(); \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue