Page MenuHomeFreeBSD

D28569.id83629.diff
No OneTemporary

D28569.id83629.diff

Index: sys/sys/proc.h
===================================================================
--- sys/sys/proc.h
+++ sys/sys/proc.h
@@ -63,6 +63,7 @@
#include <sys/signalvar.h>
#ifndef _KERNEL
#include <sys/time.h> /* For structs itimerval, timeval. */
+#include <machine/atomic.h> /* atomic_load_int/atomic_store_int */
#else
#include <sys/pcpu.h>
#include <sys/systm.h>
@@ -540,7 +541,7 @@
#define TD_IS_SWAPPED(td) ((td)->td_inhibitors & TDI_SWAPPED)
#define TD_ON_LOCK(td) ((td)->td_inhibitors & TDI_LOCK)
#define TD_AWAITING_INTR(td) ((td)->td_inhibitors & TDI_IWAIT)
-#define TD_IS_RUNNING(td) ((td)->td_state == TDS_RUNNING)
+#define TD_IS_RUNNING(td) (atomic_load_int(&(td)->td_state) == TDS_RUNNING)
#define TD_ON_RUNQ(td) ((td)->td_state == TDS_RUNQ)
#define TD_CAN_RUN(td) ((td)->td_state == TDS_CAN_RUN)
#define TD_IS_INHIBITED(td) ((td)->td_state == TDS_INHIBITED)
@@ -557,15 +558,15 @@
((td)->td_inhibitors & TDI_LOCK) != 0 ? "blocked" : \
((td)->td_inhibitors & TDI_IWAIT) != 0 ? "iwait" : "yielding")
-#define TD_SET_INHIB(td, inhib) do { \
- (td)->td_state = TDS_INHIBITED; \
- (td)->td_inhibitors |= (inhib); \
+#define TD_SET_INHIB(td, inhib) do { \
+ atomic_store_int(&(td)->td_state, TDS_INHIBITED); \
+ (td)->td_inhibitors |= (inhib); \
} while (0)
-#define TD_CLR_INHIB(td, inhib) do { \
- if (((td)->td_inhibitors & (inhib)) && \
- (((td)->td_inhibitors &= ~(inhib)) == 0)) \
- (td)->td_state = TDS_CAN_RUN; \
+#define TD_CLR_INHIB(td, inhib) do { \
+ if (((td)->td_inhibitors & (inhib)) && \
+ (((td)->td_inhibitors &= ~(inhib)) == 0)) \
+ atomic_store_int(&(td)->td_state, TDS_CAN_RUN); \
} while (0)
#define TD_SET_SLEEPING(td) TD_SET_INHIB((td), TDI_SLEEPING)
@@ -581,9 +582,9 @@
#define TD_CLR_SUSPENDED(td) TD_CLR_INHIB((td), TDI_SUSPENDED)
#define TD_CLR_IWAIT(td) TD_CLR_INHIB((td), TDI_IWAIT)
-#define TD_SET_RUNNING(td) (td)->td_state = TDS_RUNNING
-#define TD_SET_RUNQ(td) (td)->td_state = TDS_RUNQ
-#define TD_SET_CAN_RUN(td) (td)->td_state = TDS_CAN_RUN
+#define TD_SET_RUNNING(td) atomic_store_int(&(td)->td_state, TDS_RUNNING)
+#define TD_SET_RUNQ(td) atomic_store_int(&(td)->td_state, TDS_RUNQ)
+#define TD_SET_CAN_RUN(td) atomic_store_int(&(td)->td_state, TDS_CAN_RUN)
#define TD_SBDRY_INTR(td) \
(((td)->td_flags & (TDF_SEINTR | TDF_SERESTART)) != 0)

File Metadata

Mime Type
text/plain
Expires
Wed, Apr 22, 8:48 AM (18 h, 43 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
31966111
Default Alt Text
D28569.id83629.diff (2 KB)

Event Timeline