/kernel/trunk/generic/include/mm/frame.h |
---|
48,8 → 48,8 |
#define FRAME_NO_MEMORY 1 /* frame_alloc return status */ |
#define FRAME_ERROR 2 /* frame_alloc return status */ |
#define FRAME2ADDR(zone, frame) ((zone)->base + ((frame) - (zone)->frames) * FRAME_SIZE) |
#define ADDR2FRAME(zone, addr) (&((zone)->frames[((addr) - (zone)->base) / FRAME_SIZE])) |
#define FRAME2ADDR(zone, frame) ((zone)->base + (((frame) - (zone)->frames) << FRAME_WIDTH)) |
#define ADDR2FRAME(zone, addr) (&((zone)->frames[(((addr) - (zone)->base) >> FRAME_WIDTH)])) |
#define FRAME_INDEX(zone, frame) ((index_t)((frame) - (zone)->frames)) |
#define FRAME_INDEX_ABS(zone, frame) (((index_t)((frame) - (zone)->frames)) + (zone)->base_index) |
#define FRAME_INDEX_VALID(zone, index) (((index) >= 0) && ((index) < ((zone)->free_count + (zone)->busy_count))) |
/kernel/trunk/generic/src/mm/slab.c |
---|
86,8 → 86,7 |
} |
/* Fill in slab structures */ |
/* TODO: some better way of accessing the frame, although |
* the optimizer might optimize the division out :-/ */ |
/* TODO: some better way of accessing the frame */ |
for (i=0; i< (1<<cache->order); i++) { |
ADDR2FRAME(zone, (__address)(data+i*PAGE_SIZE))->parent = slab; |
} |
144,7 → 143,7 |
if (!slab) |
slab = obj2slab(obj); |
spinlock_lock(cache->lock); |
spinlock_lock(&cache->lock); |
*((int *)obj) = slab->nextavail; |
slab->nextavail = (obj - slab->start)/cache->size; |
165,7 → 164,7 |
spinlock_lock(&cache->lock); |
} |
spinlock_unlock(cache->lock); |
spinlock_unlock(&cache->lock); |
return frames; |
} |