Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F153471462
D28569.id83629.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D28569.id83629.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D28569: Use atomic loads/stores when updating td->td_state
Attached
Detach File
Event Timeline
Log In to Comment