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>