Deleted Added
full compact
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 ---