Replaced the swap_addr_t and SWAP_SLOT_NONE in RadixBitmap.{h,cpp} by

radix_slot_t and RADIX_SLOT_NONE.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36998 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ingo Weinhold 2010-06-02 20:42:53 +00:00
parent 435c43f591
commit 8c9b84a588
5 changed files with 33 additions and 31 deletions

View File

@ -37,7 +37,7 @@
#include <SupportDefs.h>
typedef uint32 swap_addr_t;
typedef uint32 radix_slot_t;
typedef uint32 bitmap_t;
typedef struct radix_node {
@ -48,26 +48,26 @@ typedef struct radix_node {
int32 big_hint; // the biggest continuous slots under us
} radix_node;
// Bitmap which uses radix tree for hinting.
// Bitmap which uses radix tree for hinting.
// The radix tree is stored in an array.
typedef struct radix_bitmap {
swap_addr_t free_slots; // # of free slots
swap_addr_t radix; // coverage radix
swap_addr_t skip; // starting skip
radix_node *root; // root of radix tree, actually it is an array
swap_addr_t root_size; // size of the array(# of nodes in the tree)
radix_slot_t free_slots; // # of free slots
radix_slot_t radix; // coverage radix
radix_slot_t skip; // starting skip
radix_node *root; // root of radix tree, actually it is an array
radix_slot_t root_size; // size of the array(# of nodes in the tree)
} radix_bitmap;
#define BITMAP_RADIX (sizeof(swap_addr_t) * 8)
#define NODE_RADIX 16
#define BITMAP_RADIX (sizeof(radix_slot_t) * 8)
#define NODE_RADIX 16
#define SWAP_SLOT_NONE ((swap_addr_t)-1)
#define RADIX_SLOT_NONE ((radix_slot_t)-1)
extern radix_bitmap *radix_bitmap_create(uint32 slots);
extern swap_addr_t radix_bitmap_alloc(radix_bitmap *bmp, uint32 count);
extern void radix_bitmap_dealloc(radix_bitmap *bmp, swap_addr_t slotIndex,
extern radix_slot_t radix_bitmap_alloc(radix_bitmap *bmp, uint32 count);
extern void radix_bitmap_dealloc(radix_bitmap *bmp, radix_slot_t slotIndex,
uint32 count);
extern void radix_bitmap_destroy(radix_bitmap *bmp);

View File

@ -39,13 +39,12 @@ _delete_unrhdr_buffer_locked(struct unrhdr* idStore)
int
_alloc_unr_locked(struct unrhdr* idStore)
{
swap_addr_t slotIndex;
radix_slot_t slotIndex;
int id = ID_STORE_FULL;
slotIndex = radix_bitmap_alloc(idStore->idBuffer, 1);
if (slotIndex != SWAP_SLOT_NONE) {
if (slotIndex != RADIX_SLOT_NONE)
id = slotIndex + idStore->idBias;
}
return id;
}

View File

@ -193,8 +193,8 @@ radix_bitmap_destroy(radix_bitmap *bmp)
}
static swap_addr_t
radix_leaf_alloc(radix_node *leaf, swap_addr_t slotIndex, int32 count)
static radix_slot_t
radix_leaf_alloc(radix_node *leaf, radix_slot_t slotIndex, int32 count)
{
if (count <= (int32)BITMAP_RADIX) {
bitmap_t bitmap = ~leaf->u.bitmap;
@ -212,12 +212,12 @@ radix_leaf_alloc(radix_node *leaf, swap_addr_t slotIndex, int32 count)
// we could not allocate count here, update big_hint
if (leaf->big_hint >= count)
leaf->big_hint = count - 1;
return SWAP_SLOT_NONE;
return RADIX_SLOT_NONE;
}
static swap_addr_t
radix_node_alloc(radix_node *node, swap_addr_t slotIndex, int32 count,
static radix_slot_t
radix_node_alloc(radix_node *node, radix_slot_t slotIndex, int32 count,
uint32 radix, uint32 skip)
{
uint32 next_skip = skip / NODE_RADIX;
@ -228,13 +228,13 @@ radix_node_alloc(radix_node *node, swap_addr_t slotIndex, int32 count,
break;
if (count <= node[i].big_hint) {
swap_addr_t addr = SWAP_SLOT_NONE;
radix_slot_t addr = RADIX_SLOT_NONE;
if (next_skip == 1)
addr = radix_leaf_alloc(&node[i], slotIndex, count);
else
addr = radix_node_alloc(&node[i], slotIndex, count, radix,
next_skip - 1);
if (addr != SWAP_SLOT_NONE) {
if (addr != RADIX_SLOT_NONE) {
node->u.available -= count;
if (node->big_hint > node->u.available)
node->big_hint = node->u.available;
@ -248,21 +248,21 @@ radix_node_alloc(radix_node *node, swap_addr_t slotIndex, int32 count,
// we could not allocate count in the subtree, update big_hint
if (node->big_hint >= count)
node->big_hint = count - 1;
return SWAP_SLOT_NONE;
return RADIX_SLOT_NONE;
}
swap_addr_t
radix_slot_t
radix_bitmap_alloc(radix_bitmap *bmp, uint32 count)
{
swap_addr_t addr = SWAP_SLOT_NONE;
radix_slot_t addr = RADIX_SLOT_NONE;
if (bmp->radix == BITMAP_RADIX)
addr = radix_leaf_alloc(bmp->root, 0, count);
else
addr = radix_node_alloc(bmp->root, 0, count, bmp->radix, bmp->skip);
if (addr != SWAP_SLOT_NONE)
if (addr != RADIX_SLOT_NONE)
bmp->free_slots -= count;
return addr;
@ -270,7 +270,7 @@ radix_bitmap_alloc(radix_bitmap *bmp, uint32 count)
static void
radix_leaf_dealloc(radix_node *leaf, swap_addr_t slotIndex, uint32 count)
radix_leaf_dealloc(radix_node *leaf, radix_slot_t slotIndex, uint32 count)
{
uint32 n = slotIndex & (BITMAP_RADIX - 1);
bitmap_t mask = ((bitmap_t)-1 >> (BITMAP_RADIX - count - n))
@ -282,8 +282,8 @@ radix_leaf_dealloc(radix_node *leaf, swap_addr_t slotIndex, uint32 count)
static void
radix_node_dealloc(radix_node *node, swap_addr_t slotIndex, uint32 count,
uint32 radix, uint32 skip, swap_addr_t index)
radix_node_dealloc(radix_node *node, radix_slot_t slotIndex, uint32 count,
uint32 radix, uint32 skip, radix_slot_t index)
{
node->u.available += count;
@ -317,7 +317,7 @@ radix_node_dealloc(radix_node *node, swap_addr_t slotIndex, uint32 count,
void
radix_bitmap_dealloc(radix_bitmap *bmp, swap_addr_t slotIndex, uint32 count)
radix_bitmap_dealloc(radix_bitmap *bmp, radix_slot_t slotIndex, uint32 count)
{
if (bmp->radix == BITMAP_RADIX)
radix_leaf_dealloc(bmp->root, slotIndex, count);

View File

@ -62,6 +62,8 @@
#define INITIAL_SWAP_HASH_SIZE 1024
#define SWAP_SLOT_NONE RADIX_SLOT_NONE
#define SWAP_BLOCK_PAGES 32
#define SWAP_BLOCK_SHIFT 5 /* 1 << SWAP_BLOCK_SHIFT == SWAP_BLOCK_PAGES */
#define SWAP_BLOCK_MASK (SWAP_BLOCK_PAGES - 1)

View File

@ -15,7 +15,8 @@
#if ENABLE_SWAP_SUPPORT
typedef page_num_t swap_addr_t;
typedef uint32 swap_addr_t;
// TODO: Should be wider, but RadixBitmap supports only a 32 bit type ATM!
struct swap_block;
struct system_memory_info;