1
0
mirror of https://git.FreeBSD.org/src.git synced 2025-01-18 15:30:21 +00:00

- Use the right name for the proctree lock in the locking key.

- Add a note about the special locking semantics used for members such as
  p_cred that are read by multiple processes but only written to by the
  current process.
- Change p_upages_obj's locking key to note that it is created at fork
  and left alone afterwards (the actual pointer, not what it points to.)
- Mark p_intr_nesting_level as being implicitly locked since only curproc
  accesses it.

Reviewed by:	jake
This commit is contained in:
John Baldwin 2001-01-30 00:10:37 +00:00
parent 034fcee1e3
commit 4c8bd1a325
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=71815

View File

@ -127,7 +127,7 @@ struct pargs {
* b - created at fork, never chagnes
* c - locked by proc mtx
* d - locked by allproc_lock lock
* e - locked by proc tree lock
* e - locked by proctree_lock lock
* f - session mtx
* g - process group mtx
* h - callout_lock mtx
@ -138,6 +138,16 @@ struct pargs {
* l - the attaching proc or attaching proc parent
* m - Giant
* n - not locked, lazy
*
* If the locking identifier is followed by a plus '+', then the specified
* member follows these special rules:
* - It is only written to by the current process.
* - It can be read by the current process and other processes.
* Thus, the locking rules for it are slightly different, and allow us to
* optimize the case where a process reads its own such value:
* - Writes to this member are locked.
* - Reads of this value by other processes are locked.
* - Reads of this value by the current process need not be locked.
*/
struct proc {
TAILQ_ENTRY(proc) p_procq; /* (j) Run/mutex queue. */
@ -145,11 +155,11 @@ struct proc {
LIST_ENTRY(proc) p_list; /* (d) List of all processes. */
/* substructures: */
struct pcred *p_cred; /* (c) Process owner's identity. */
struct pcred *p_cred; /* (c+) Process owner's identity. */
struct filedesc *p_fd; /* (b) Ptr to open files structure. */
struct pstats *p_stats; /* (b) Accounting/statistics (CPU). */
struct plimit *p_limit; /* (m) Process limits. */
struct vm_object *p_upages_obj;/* (c) Upages object. */
struct vm_object *p_upages_obj;/* (a) Upages object. */
struct procsig *p_procsig; /* (c) Signal actions, state (CPU). */
#define p_sigacts p_procsig->ps_sigacts
#define p_sigignore p_procsig->ps_sigignore
@ -160,7 +170,7 @@ struct proc {
int p_flag; /* (c) P_* flags. */
int p_sflag; /* (j) PS_* flags. */
int p_intr_nesting_level; /* (n) Interrupt recursion. */
int p_intr_nesting_level; /* (k) Interrupt recursion. */
char p_stat; /* (j) S* process status. */
char p_pad1[3];