subr_syscall.c (22975) | subr_syscall.c (24666) |
---|---|
1/*- 2 * Copyright (C) 1994, David Greenman 3 * Copyright (c) 1990, 1993 4 * The Regents of the University of California. All rights reserved. 5 * 6 * This code is derived from software contributed to Berkeley by 7 * the University of Utah, and William Jolitz. 8 * --- 21 unchanged lines hidden (view full) --- 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 31 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 32 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 33 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 34 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 35 * SUCH DAMAGE. 36 * 37 * from: @(#)trap.c 7.4 (Berkeley) 5/13/91 | 1/*- 2 * Copyright (C) 1994, David Greenman 3 * Copyright (c) 1990, 1993 4 * The Regents of the University of California. All rights reserved. 5 * 6 * This code is derived from software contributed to Berkeley by 7 * the University of Utah, and William Jolitz. 8 * --- 21 unchanged lines hidden (view full) --- 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 31 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 32 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 33 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 34 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 35 * SUCH DAMAGE. 36 * 37 * from: @(#)trap.c 7.4 (Berkeley) 5/13/91 |
38 * $Id$ | 38 * $Id: trap.c,v 1.88 1997/02/22 09:32:55 peter Exp $ |
39 */ 40 41/* 42 * 386 Trap and System call handling 43 */ 44 45#include "opt_ktrace.h" 46#include "opt_ddb.h" --- 477 unchanged lines hidden (view full) --- 524 if (!grow(p, va)) { 525 rv = KERN_FAILURE; 526 --p->p_lock; 527 goto nogo; 528 } 529 } 530 531 /* Fault in the user page: */ | 39 */ 40 41/* 42 * 386 Trap and System call handling 43 */ 44 45#include "opt_ktrace.h" 46#include "opt_ddb.h" --- 477 unchanged lines hidden (view full) --- 524 if (!grow(p, va)) { 525 rv = KERN_FAILURE; 526 --p->p_lock; 527 goto nogo; 528 } 529 } 530 531 /* Fault in the user page: */ |
532 rv = vm_fault(map, va, ftype, FALSE); | 532 rv = vm_fault(map, va, ftype, 533 (ftype & VM_PROT_WRITE) ? VM_FAULT_DIRTY : 0); |
533 534 --p->p_lock; 535 } else { 536 /* 537 * Don't allow user-mode faults in kernel address space. 538 */ 539 if (usermode) 540 goto nogo; --- 84 unchanged lines hidden (view full) --- 625 if (!grow(p, va)) { 626 rv = KERN_FAILURE; 627 --p->p_lock; 628 goto nogo; 629 } 630 } 631 632 /* Fault in the user page: */ | 534 535 --p->p_lock; 536 } else { 537 /* 538 * Don't allow user-mode faults in kernel address space. 539 */ 540 if (usermode) 541 goto nogo; --- 84 unchanged lines hidden (view full) --- 626 if (!grow(p, va)) { 627 rv = KERN_FAILURE; 628 --p->p_lock; 629 goto nogo; 630 } 631 } 632 633 /* Fault in the user page: */ |
633 rv = vm_fault(map, va, ftype, FALSE); | 634 rv = vm_fault(map, va, ftype, 635 (ftype & VM_PROT_WRITE) ? VM_FAULT_DIRTY : 0); |
634 635 --p->p_lock; 636 } else { 637 /* | 636 637 --p->p_lock; 638 } else { 639 /* |
638 * Since we know that kernel virtual address addresses 639 * always have pte pages mapped, we just have to fault 640 * the page. | 640 * Don't have to worry about process locking or stacks in the kernel. |
641 */ 642 rv = vm_fault(map, va, ftype, FALSE); 643 } 644 645 if (rv == KERN_SUCCESS) 646 return (0); 647nogo: 648 if (!usermode) { --- 154 unchanged lines hidden (view full) --- 803 --p->p_lock; 804 return (1); 805 } 806 } 807 808 /* 809 * fault the data page 810 */ | 641 */ 642 rv = vm_fault(map, va, ftype, FALSE); 643 } 644 645 if (rv == KERN_SUCCESS) 646 return (0); 647nogo: 648 if (!usermode) { --- 154 unchanged lines hidden (view full) --- 803 --p->p_lock; 804 return (1); 805 } 806 } 807 808 /* 809 * fault the data page 810 */ |
811 rv = vm_fault(&vm->vm_map, va, VM_PROT_READ|VM_PROT_WRITE, FALSE); | 811 rv = vm_fault(&vm->vm_map, va, VM_PROT_READ|VM_PROT_WRITE, VM_FAULT_DIRTY); |
812 813 --p->p_lock; 814 815 if (rv != KERN_SUCCESS) 816 return 1; 817 818 return (0); 819} --- 121 unchanged lines hidden --- | 812 813 --p->p_lock; 814 815 if (rv != KERN_SUCCESS) 816 return 1; 817 818 return (0); 819} --- 121 unchanged lines hidden --- |