Skip site navigation (1)Skip section navigation (2)
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>