slb.c (215159) | slb.c (217451) |
---|---|
1/*- 2 * Copyright (c) 2010 Nathan Whitehorn 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * --- 9 unchanged lines hidden (view full) --- 18 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 19 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 * | 1/*- 2 * Copyright (c) 2010 Nathan Whitehorn 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * --- 9 unchanged lines hidden (view full) --- 18 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 19 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 * |
26 * $FreeBSD: head/sys/powerpc/aim/slb.c 215159 2010-11-12 04:18:19Z nwhitehorn $ | 26 * $FreeBSD: head/sys/powerpc/aim/slb.c 217451 2011-01-15 19:16:05Z andreast $ |
27 */ 28 29#include <sys/param.h> 30#include <sys/kernel.h> 31#include <sys/lock.h> 32#include <sys/mutex.h> 33#include <sys/proc.h> 34#include <sys/systm.h> --- 160 unchanged lines hidden (view full) --- 195 setbit(&parent->ua_alloc, idx); 196 197 return (inter); 198} 199 200uint64_t 201kernel_va_to_slbv(vm_offset_t va) 202{ | 27 */ 28 29#include <sys/param.h> 30#include <sys/kernel.h> 31#include <sys/lock.h> 32#include <sys/mutex.h> 33#include <sys/proc.h> 34#include <sys/systm.h> --- 160 unchanged lines hidden (view full) --- 195 setbit(&parent->ua_alloc, idx); 196 197 return (inter); 198} 199 200uint64_t 201kernel_va_to_slbv(vm_offset_t va) 202{ |
203 uint64_t esid, slbv; | 203 uint64_t slbv; |
204 | 204 |
205 esid = (uintptr_t)va >> ADDR_SR_SHFT; 206 | |
207 /* Set kernel VSID to deterministic value */ 208 slbv = (KERNEL_VSID((uintptr_t)va >> ADDR_SR_SHFT)) << SLBV_VSID_SHIFT; 209 210 /* Figure out if this is a large-page mapping */ 211 if (hw_direct_map && va < VM_MIN_KERNEL_ADDRESS) { 212 /* 213 * XXX: If we have set up a direct map, assumes 214 * all physical memory is mapped with large pages. --- 265 unchanged lines hidden (view full) --- 480} 481 482static void * 483slb_uma_real_alloc(uma_zone_t zone, int bytes, u_int8_t *flags, int wait) 484{ 485 static vm_offset_t realmax = 0; 486 void *va; 487 vm_page_t m; | 205 /* Set kernel VSID to deterministic value */ 206 slbv = (KERNEL_VSID((uintptr_t)va >> ADDR_SR_SHFT)) << SLBV_VSID_SHIFT; 207 208 /* Figure out if this is a large-page mapping */ 209 if (hw_direct_map && va < VM_MIN_KERNEL_ADDRESS) { 210 /* 211 * XXX: If we have set up a direct map, assumes 212 * all physical memory is mapped with large pages. --- 265 unchanged lines hidden (view full) --- 478} 479 480static void * 481slb_uma_real_alloc(uma_zone_t zone, int bytes, u_int8_t *flags, int wait) 482{ 483 static vm_offset_t realmax = 0; 484 void *va; 485 vm_page_t m; |
488 int pflags; | |
489 490 if (realmax == 0) 491 realmax = platform_real_maxaddr(); 492 493 *flags = UMA_SLAB_PRIV; | 486 487 if (realmax == 0) 488 realmax = platform_real_maxaddr(); 489 490 *flags = UMA_SLAB_PRIV; |
494 if ((wait & (M_NOWAIT|M_USE_RESERVE)) == M_NOWAIT) 495 pflags = VM_ALLOC_INTERRUPT | VM_ALLOC_WIRED; 496 else 497 pflags = VM_ALLOC_SYSTEM | VM_ALLOC_WIRED; 498 if (wait & M_ZERO) 499 pflags |= VM_ALLOC_ZERO; | |
500 501 for (;;) { 502 m = vm_phys_alloc_contig(1, 0, realmax, PAGE_SIZE, 503 PAGE_SIZE); 504 if (m == NULL) { 505 if (wait & M_NOWAIT) 506 return (NULL); 507 VM_WAIT; --- 45 unchanged lines hidden --- | 491 492 for (;;) { 493 m = vm_phys_alloc_contig(1, 0, realmax, PAGE_SIZE, 494 PAGE_SIZE); 495 if (m == NULL) { 496 if (wait & M_NOWAIT) 497 return (NULL); 498 VM_WAIT; --- 45 unchanged lines hidden --- |