RFC: proc.h p_status p_flags split

Simon 'corecode' Schubert corecode at fs.ei.tum.de
Tue Oct 11 14:12:31 PDT 2005


hey,

I think we need to split the P_* flags and the S* stati between procs 
and lwps.  This is how i see the P_* flags could be split.

How should we do with the S* status?  Introduce PS* or LPS*?  Processes 
can't sleep anymore, but they could be stopped.  Do we want a flag for 
that or do we check p_nstopped == p_nthreads?

cheers
  simon
--
Serve - BSD     +++  RENT this banner advert  +++    ASCII Ribbon   /"\
Work - Mac      +++  space for low $$$ NOW!1  +++      Campaign     \ /
Party Enjoy Relax   |   http://dragonflybsd.org      Against  HTML   \
Dude 2c 2 the max   !   http://golden-apple.biz       Mail + News   / \
Index: sys/proc.h
===================================================================
RCS file: /cvs/src/sys/sys/proc.h,v
retrieving revision 1.70
diff -u -r1.70 proc.h
--- sys/proc.h	11 Oct 2005 09:59:56 -0000	1.70
+++ sys/proc.h	11 Oct 2005 20:50:11 -0000
@@ -317,8 +317,8 @@
 #define	P_INMEM		0x00004	/* Loaded into memory. */
 #define	P_PPWAIT	0x00010	/* Parent is waiting for child to exec/exit. */
 #define	P_PROFIL	0x00020	/* Has started profiling. */
-#define P_SELECT	0x00040 /* Selecting; wakeup/waiting danger. */
-#define	P_SINTR		0x00080	/* Sleep is interruptible. */
+#define LWP_SELECT	0x00040 /* Selecting; wakeup/waiting danger. */
+#define	LWP_SINTR	0x00080	/* Sleep is interruptible. */
 #define	P_SUGID		0x00100	/* Had set id privileges since last exec. */
 #define	P_SYSTEM	0x00200	/* System proc: no sigs, stats or swapping. */
 #define	P_UNUSED00400	0x00400
@@ -331,23 +331,23 @@
 /* was	P_NOSWAP	0x08000	was: Do not swap upages; p->p_hold */
 /* was	P_PHYSIO	0x10000	was: Doing physical I/O; use p->p_hold */
 
-#define	P_UPCALLPEND	0x20000	/* an upcall is pending */
+#define	LWP_UPCALLPEND	0x20000	/* an upcall is pending */
 
 #define	P_SWAPPING	0x40000	/* Process is being swapped. */
 #define	P_SWAPINREQ	0x80000	/* Swapin request due to wakeup */
 
 /* Marked a kernel thread */
-#define	P_ONRUNQ	0x100000 /* on a user scheduling run queue */
-#define	P_KTHREADP	0x200000 /* Process is really a kernel thread */
+#define	LWP_ONRUNQ	0x100000 /* on a user scheduling run queue */
+#define	P_KTHREADP	0x200000 /* Process is really a kernel thread XXX not used? */
 #define P_UNUSED400000	0x400000
-#define	P_DEADLKTREAT   0x800000 /* lock aquisition - deadlock treatment */
+#define	LWP_DEADLKTREAT   0x800000 /* lock aquisition - deadlock treatment XXX not used? */
 
 #define	P_JAILED	0x1000000 /* Process is in jail */
-#define	P_OLDMASK	0x2000000 /* need to restore mask before pause */
-#define	P_ALTSTACK	0x4000000 /* have alternate signal stack */
+#define	LWP_OLDMASK	0x2000000 /* need to restore mask before pause */
+#define	LWP_ALTSTACK	0x4000000 /* have alternate signal stack */
 #define	P_INEXEC	0x8000000 /* Process is in execve(). */
-#define P_PASSIVE_ACQ	0x10000000 /* Passive acquire cpu (see kern_switch) */
-#define	P_UPCALLWAIT	0x20000000 /* Wait for upcall or signal */
+#define LWP_PASSIVE_ACQ	0x10000000 /* Passive acquire cpu (see kern_switch) */
+#define	LWP_UPCALLWAIT	0x20000000 /* Wait for upcall or signal */
 
 #ifdef _KERNEL
 
@@ -371,6 +371,7 @@
  * Handy macro for LISTs.
  */
 #define FOREACH_PROC_IN_SYSTEM(p)	LIST_FOREACH((p), &allproc, p_list)
+#define FOREACH_LWP_IN_PROC(p, lp)	LIST_FOREACH((lp), (p)->p_lwps, lwp_list)
 
 /*
  * We use process IDs <= PID_MAX; PID_MAX + 1 must also fit in a pid_t,




More information about the Kernel mailing list