Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 12 Apr 2008 14:56:50 -0700 (PDT)
From:      Matthew Dillon <dillon@apollo.backplane.com>
To:        Jonathan Chen <jon@freebsd.org>
Cc:        hackers@freebsd.org
Subject:   Re: mlock & COW
Message-ID:  <200804122156.m3CLuot5065753@apollo.backplane.com>
References:  <20080309212441.GA56523@porthos.spock.org>

next in thread | previous in thread | raw e-mail | index | archive | help
    I've looked at it some more and it looks like it would be a real
    mess to do it in the protection code.  I think it may be best to
    fix it in the fault code.  That is, to explicitly allow a user-wired
    page to be write-faulted.

    The primary protection check that is causing the segv is in 
    vm_map_lookup() line 3161 and line 3297 (FreeBSD current).  Commenting
    those out will allow the COW on the user-wired page:

        if ((entry->eflags & MAP_ENTRY_USER_WIRED) &&
            (entry->eflags & MAP_ENTRY_COW) &&
            (fault_type & VM_PROT_WRITE) &&
            (fault_typea & VM_PROT_OVERRIDE_WRITE) == 0) {
                RETURN(KERN_PROTECTION_FAILURE);
        }

    BUT!  This is going to cause a panic later on.  There is one big gotcha
    and that is the COW fault will cause the VM system to lose track of
    the wiring of (I think) either the original page or the COW'd page,
    and you will get a panic when it tries to unwire it later on.

    I will mess with it a bit in DragonFly to see if there's a simple
    solution.

					-Matt




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