1/* 2 * Copyright (c) 2011 Jeffrey Roberson <jeff@freebsd.org> 3 * Copyright (c) 2008 Mayur Shardul <mayur.shardul@gmail.com> 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: --- 444 unchanged lines hidden (view full) --- 453 /* 454 * Calculate how much to increment our index by 455 * based on the tree level. We must truncate the 456 * lower bits to start from the begnning of the 457 * next leaf. 458 */ 459 inc = 1LL << (level * VM_RADIX_WIDTH); 460 start &= ~VM_RADIX_MAX(level); |
461 462 /* Avoid start address wrapping up. */ 463 if ((VM_RADIX_MAXVAL - start) < inc) { 464 rnode = NULL; 465 goto out; 466 } |
467 start += inc; 468 slot++; 469 CTR5(KTR_VM, 470 "leaf: start %ju end %ju inc %ju mask 0x%jX slot %d", 471 (uintmax_t)start, (uintmax_t)end, (uintmax_t)inc, 472 (uintmax_t)~VM_RADIX_MAX(level), slot); 473 for (; slot < VM_RADIX_COUNT; slot++, start += inc) { 474 if (end != 0 && start >= end) { 475 rnode = NULL; 476 goto out; 477 } 478 if (rnode->rn_child[slot]) { 479 rnode = rnode->rn_child[slot]; 480 break; 481 } |
482 if ((VM_RADIX_MAXVAL - start) < inc) { 483 rnode = NULL; 484 goto out; 485 } |
486 } 487 if (slot == VM_RADIX_COUNT) 488 goto restart; 489 } 490 491out: 492 *startp = start; 493 return (rnode); --- 277 unchanged lines hidden --- |