Date: Sat, 1 May 2010 16:49:25 +0200 From: Attilio Rao <attilio@freebsd.org> To: Kip Macy <kmacy@freebsd.org> Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r207460 - head/sys/vm Message-ID: <AANLkTik_LSQGaAs5owwIQRXZt_NRRQ6ND_VJVm-cP9oz@mail.gmail.com> In-Reply-To: <201005010341.o413fMhP067068@svn.freebsd.org> References: <201005010341.o413fMhP067068@svn.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
2010/5/1 Kip Macy <kmacy@freebsd.org>: > Author: kmacy > Date: Sat May =C2=A01 03:41:21 2010 > New Revision: 207460 > URL: http://svn.freebsd.org/changeset/base/207460 > > Log: > =C2=A0Update locking comment above vm_page: > =C2=A0 =C2=A0 =C2=A0 =C2=A0 - re-assign page queue lock "Q" > =C2=A0 =C2=A0 =C2=A0 =C2=A0 - assign page lock "P" > =C2=A0 =C2=A0 =C2=A0 =C2=A0 - update several uncommented fields > =C2=A0 =C2=A0 =C2=A0 =C2=A0 - observe that hold_count is now protected by= the page lock "P" > > Modified: > =C2=A0head/sys/vm/vm_page.h > > Modified: head/sys/vm/vm_page.h > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > --- head/sys/vm/vm_page.h =C2=A0 =C2=A0 =C2=A0 Sat May =C2=A01 02:53:43 2= 010 =C2=A0 =C2=A0 =C2=A0 =C2=A0(r207459) > +++ head/sys/vm/vm_page.h =C2=A0 =C2=A0 =C2=A0 Sat May =C2=A01 03:41:21 2= 010 =C2=A0 =C2=A0 =C2=A0 =C2=A0(r207460) > @@ -90,20 +90,21 @@ > =C2=A0* =C2=A0 =C2=A0 and sundry status bits. > =C2=A0* > =C2=A0* =C2=A0 =C2=A0 Fields in this structure are locked either by the l= ock on the > - * =C2=A0 =C2=A0 object that the page belongs to (O) or by the lock on t= he page > - * =C2=A0 =C2=A0 queues (P). > + * =C2=A0 =C2=A0 object that the page belongs to (O), its corresponding = page lock (P), > + * =C2=A0 =C2=A0 or by the lock on the page queues (Q). > + * > =C2=A0*/ > > =C2=A0TAILQ_HEAD(pglist, vm_page); > > =C2=A0struct vm_page { > - =C2=A0 =C2=A0 =C2=A0 TAILQ_ENTRY(vm_page) pageq; =C2=A0 =C2=A0 /* queue= info for FIFO queue or free list (P) */ > + =C2=A0 =C2=A0 =C2=A0 TAILQ_ENTRY(vm_page) pageq; =C2=A0 =C2=A0 /* queue= info for FIFO queue or free list (Q) */ > =C2=A0 =C2=A0 =C2=A0 =C2=A0TAILQ_ENTRY(vm_page) listq; =C2=A0 =C2=A0 /* p= ages in same object (O) =C2=A0 =C2=A0 */ > =C2=A0 =C2=A0 =C2=A0 =C2=A0struct vm_page *left; =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 /* splay tree link (O) =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0*/ > =C2=A0 =C2=A0 =C2=A0 =C2=A0struct vm_page *right; =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0/* splay tree link (O) =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0*/ > > - =C2=A0 =C2=A0 =C2=A0 vm_object_t object; =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 /* which object am I in (O,P)*/ > - =C2=A0 =C2=A0 =C2=A0 vm_pindex_t pindex; =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 /* offset into object (O,P) */ > + =C2=A0 =C2=A0 =C2=A0 vm_object_t object; =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 /* which object am I in (O,Q)*/ > + =C2=A0 =C2=A0 =C2=A0 vm_pindex_t pindex; =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 /* offset into object (O,Q) */ This notation is ambigous. It doesn't let understand if the lock may be held both together or not, which rules happen for reading/writing such values, etc. May you please follow well-known patterns like the tables in subr_turnstile.c ? (+ for both of them, / for one of them, clarify if it is safe to read them with just one lock of them held, etc). Attilio --=20 Peace can only be achieved by understanding - A. Einstein
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AANLkTik_LSQGaAs5owwIQRXZt_NRRQ6ND_VJVm-cP9oz>