// adjust swap pointer
calc.in_core_block -= blocks;
#ifdef INDIRECT_CORE
- process->in_core_blocks = calc.in_core_block - calc.block_base;
+ process->in_core_block = calc.in_core_block;
#endif
// transfer data to swap
process->para_base = para_base;
process->para_limit = para_limit;
#ifdef INDIRECT_CORE
- process->in_core_blocks = blocks;
+ process->in_core_block =
+ (para_limit + (BLOCK_PARAS - 1)) >> BLOCK_PARAS_SHIFT;
#endif
process_avail -= blocks;
return true;
);
#else
assert(
- process->in_core_blocks ==
- process->swap_item.limit - process->swap_item.base
+ process->in_core_block ==
+ (process->para_limit + (BLOCK_PARAS - 1)) >> BLOCK_PARAS_SHIFT
);
#endif /* ! INDIRECT_CORE */
// track total allocation
*(dir ? &process->para_base : &process->para_limit) = para_base_limit;
#ifdef INDIRECT_CORE
- process->in_core_blocks = blocks;
+ process->in_core_block =
+ (process->para_limit + (BLOCK_PARAS - 1)) >> BLOCK_PARAS_SHIFT;
#endif
process_avail -= blocks_change;
return true;
// adjust swap pointer
calc.in_core_block += blocks;
#ifdef INDIRECT_CORE
- process->in_core_blocks = calc.in_core_block - calc.block_base;
+ process->in_core_block = calc.in_core_block;
#endif /* INDIRECT_CORE */
}
process->core_item.limit - process->core_item.base :
0;
#else /* INDIRECT_CORE */
- block = process->in_core_blocks;
+ block =
+ process->in_core_block - (process->para_base >> BLOCK_PARAS_SHIFT);
#endif /* INDIRECT_CORE */
swap_in =
process->swap_item.limit - process->swap_item.base - block;
#ifdef INDIRECT_SWAP
block
#else /* ! INDIRECT_SWAP */
- process->in_core_blocks
+ process->in_core_block - (process->para_base >> BLOCK_PARAS_SHIFT)
#endif /* ! INDIRECT_SWAP */
);
pool_free(&core_table, &process->core_item);
) - calc->core_origin;
//printf("para [%d,%d) in_core_blocks %d block [%d,%d) core_origin %d swap_origin %d in_core_block %d\n", process->para_base, process->para_limit, process->flags & PROCESS_FLAGS_CORE_ITEM ? process->core_item.limit - process->core_item.base : 0, calc->block_base, calc->block_limit, calc->core_origin, calc->swap_origin, calc->in_core_block);
#else
- calc->in_core_block = calc->block_base + process->in_core_blocks;
+ calc->in_core_block = process->in_core_block;
//printf("para [%d,%d) in_core_blocks %d block [%d,%d) core_origin %d swap_origin %d in_core_block %d\n", process->para_base, process->para_limit, process->in_core_blocks, calc->block_base, calc->block_limit, calc->core_origin, calc->swap_origin, calc->in_core_block);
#endif
}