Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 15 Jul 2002 14:16:46 -0500
From:      "Alan L. Cox" <alc@imimic.com>
To:        John Baldwin <jhb@FreeBSD.org>
Cc:        Alan Cox <alc@FreeBSD.org>, cvs-all@FreeBSD.org, cvs-committers@FreeBSD.org
Subject:   Re: cvs commit: src/sys/alpha/alpha pmap.c src/sys/vm vm_page.c
Message-ID:  <3D331F9E.3D48367B@imimic.com>
References:  <XFMail.20020715090319.jhb@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
John Baldwin wrote:
> 
> On 14-Jul-2002 Alan Cox wrote:
> > alc         2002/07/14 16:51:55 PDT
> >
> >   Modified files:
> >     sys/alpha/alpha      pmap.c
> >     sys/vm               vm_page.c
> >   Log:
> >    o Lock page queue accesses by vm_page_wire() that aren't
> >      within a critical section.
> >    o Assert that the page queues lock is held in vm_page_wire()
> >      unless an Alpha.
> 
> Even in a critical section you still need the lock to ensure you
> don't read stale data and to prevent others from writing to them
> out from under you.

Yes, I agree.

> If the critical section in question is for pmap_growkernel(), then
> I think you can actually remove it anyways.

It is.  The solution that I have in mind is to introduce a new flag,
VM_ALLOC_WIRED, to vm_page_alloc() that requests allocation of a wired
page.  Thus, the page's wired count can be initialized to 1 before the
(spin) mutex on the free queues is released.

In addition to addressing this particular problem, VM_ALLOC_WIRED will
find general use in replacing code that looks like:

	m = vm_page_alloc(...);
	...
	vm_page_lock_queues();
	vm_page_wire(m);
	vm_page_unlock_queues();

Regards,
Alan

P.S. The scattered placement of wired pages in the physical memory is
the chief reason why large contigmalloc()s fail on long-running
systems.  This flag could be used to help address that.

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3D331F9E.3D48367B>