On 7/8/13 11:30 PM, Garrett Cooper wrote:
On Mar 8, 2013, at 6:32 PM, Attilio Rao wrote:
Author: attilio
Date: Sat Mar 9 02:32:23 2013
New Revision: 248084
URL: http://svnweb.freebsd.org/changeset/base/248084
Log:
Switch the vm_object mutex to be a rwlock. This will enable in the
future further optimizations where the vm_object lock will be held
in read mode most of the time the page cache resident pool of pages
are accessed for reading purposes.
The change is mostly mechanical but few notes are reported:
* The KPI changes as follow:
- VM_OBJECT_LOCK() -> VM_OBJECT_WLOCK()
- VM_OBJECT_TRYLOCK() -> VM_OBJECT_TRYWLOCK()
- VM_OBJECT_UNLOCK() -> VM_OBJECT_WUNLOCK()
- VM_OBJECT_LOCK_ASSERT(MA_OWNED) -> VM_OBJECT_ASSERT_WLOCKED()
(in order to avoid visibility of implementation details)
- The read-mode operations are added:
VM_OBJECT_RLOCK(), VM_OBJECT_TRYRLOCK(), VM_OBJECT_RUNLOCK(),
VM_OBJECT_ASSERT_RLOCKED(), VM_OBJECT_ASSERT_LOCKED()
* The vm/vm_pager.h namespace pollution avoidance (forcing requiring
sys/mutex.h in consumers directly to cater its inlining functions
using VM_OBJECT_LOCK()) imposes that all the vm/vm_pager.h
consumers now must include also sys/rwlock.h.
* zfs requires a quite convoluted fix to include FreeBSD rwlocks into
the compat layer because the name clash between FreeBSD and solaris
versions must be avoided.
At this purpose zfs redefines the vm_object locking functions
directly, isolating the FreeBSD components in specific compat stubs.
The KPI results heavilly broken by this commit. Thirdy part ports must
be updated accordingly (I can think off-hand of VirtualBox, for example).
Sponsored by: EMC / Isilon storage division
Reviewed by: jeff
Reviewed by: pjd (ZFS specific review)
Discussed with: alc
Tested by: pho
This commit broke emulators/open-vm-tools (which helps with hardware
acceleration and other guest OS services on VMware, et al) and it's been broken
for ~4 months now. Please ask portmgr@ to do an exp- run before making KPI
changes. open-vm-tools, nvidia-driver, qemu*, and virtualbox-ose* are and have
been particularly vulnerable to sweeping changes like this in the past (I've
had to patch a lot of 3rd party software broken by KPI changes in 10.x, more
than in prior releases) and a lot of developers depend on this functionality to
be sane in order to develop software on -CURRENT and -STABLE (and it allows us
to better test your code).
Thanks,
-Garrett
Thanks Garrett,
It would be great if we could track vm changes like this. Is there a
doc that describes the process of an exp-run for us src guys?
Can there a be a link or a hint towards this near some of the commonly
bumped variables in freebsd base to let us know what to do?
I fear even though we may educate the current crop of devs, that we will
experience lossage as new developers are brought on unless we document
this somewhere in src, or at least link to documentation elsewhere from src.
by the way, do you think this change may be what is making virtualbox
insta-panic on my -current box? Is there some trick we can use to
version between the port? Maybe we need a set of macros or something to
note the breakage of ABI?
-Alfred
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-emulation
To unsubscribe, send any mail to "[email protected]"