/SPARTAN/trunk/src/mm/vm.c |
---|
89,13 → 89,13 |
vm_area_t *vm_area_create(vm_t *m, vm_type_t type, size_t size, __address addr) |
{ |
pri_t pri; |
ipl_t ipl; |
vm_area_t *a; |
if (addr % PAGE_SIZE) |
panic("addr not aligned to a page boundary"); |
pri = cpu_priority_high(); |
ipl = interrupts_disable(); |
spinlock_lock(&m->lock); |
/* |
110,7 → 110,7 |
if (!a->mapping) { |
free(a); |
spinlock_unlock(&m->lock); |
cpu_priority_restore(pri); |
interrupts_restore(ipl); |
return NULL; |
} |
129,7 → 129,7 |
} |
spinlock_unlock(&m->lock); |
cpu_priority_restore(pri); |
interrupts_restore(ipl); |
return a; |
} |
141,9 → 141,9 |
void vm_area_map(vm_area_t *a, vm_t *m) |
{ |
int i, flags; |
pri_t pri; |
ipl_t ipl; |
pri = cpu_priority_high(); |
ipl = interrupts_disable(); |
spinlock_lock(&m->lock); |
spinlock_lock(&a->lock); |
165,15 → 165,15 |
spinlock_unlock(&a->lock); |
spinlock_unlock(&m->lock); |
cpu_priority_restore(pri); |
interrupts_restore(ipl); |
} |
void vm_area_unmap(vm_area_t *a, vm_t *m) |
{ |
int i; |
pri_t pri; |
ipl_t ipl; |
pri = cpu_priority_high(); |
ipl = interrupts_disable(); |
spinlock_lock(&m->lock); |
spinlock_lock(&a->lock); |
183,15 → 183,15 |
spinlock_unlock(&a->lock); |
spinlock_unlock(&m->lock); |
cpu_priority_restore(pri); |
interrupts_restore(ipl); |
} |
void vm_install(vm_t *m) |
{ |
link_t *l; |
pri_t pri; |
ipl_t ipl; |
pri = cpu_priority_high(); |
ipl = interrupts_disable(); |
tlb_shootdown_start(); |
spinlock_lock(&m->lock); |
202,7 → 202,7 |
spinlock_unlock(&m->lock); |
tlb_shootdown_finalize(); |
cpu_priority_restore(pri); |
interrupts_restore(ipl); |
vm_install_arch(m); |
/SPARTAN/trunk/src/mm/frame.c |
---|
68,7 → 68,7 |
*/ |
__address frame_alloc(int flags) |
{ |
pri_t pri; |
ipl_t ipl; |
link_t *cur, *tmp; |
zone_t *z; |
zone_t *zone = NULL; |
76,7 → 76,7 |
__address v; |
loop: |
pri = cpu_priority_high(); |
ipl = interrupts_disable(); |
spinlock_lock(&zone_head_lock); |
/* |
104,7 → 104,7 |
* TODO: Sleep until frames are available again. |
*/ |
spinlock_unlock(&zone_head_lock); |
cpu_priority_restore(pri); |
interrupts_restore(ipl); |
panic("Sleep not implemented.\n"); |
goto loop; |
126,7 → 126,7 |
spinlock_unlock(&zone->lock); |
spinlock_unlock(&zone_head_lock); |
cpu_priority_restore(pri); |
interrupts_restore(ipl); |
return v; |
} |
141,7 → 141,7 |
*/ |
void frame_free(__address addr) |
{ |
pri_t pri; |
ipl_t ipl; |
link_t *cur; |
zone_t *z; |
zone_t *zone = NULL; |
149,7 → 149,7 |
ASSERT(addr % FRAME_SIZE == 0); |
pri = cpu_priority_high(); |
ipl = interrupts_disable(); |
spinlock_lock(&zone_head_lock); |
/* |
187,7 → 187,7 |
spinlock_unlock(&zone->lock); |
spinlock_unlock(&zone_head_lock); |
cpu_priority_restore(pri); |
interrupts_restore(ipl); |
} |
/** Mark frame not free. |
199,7 → 199,7 |
*/ |
void frame_not_free(__address addr) |
{ |
pri_t pri; |
ipl_t ipl; |
link_t *cur; |
zone_t *z; |
zone_t *zone = NULL; |
207,7 → 207,7 |
ASSERT(addr % FRAME_SIZE == 0); |
pri = cpu_priority_high(); |
ipl = interrupts_disable(); |
spinlock_lock(&zone_head_lock); |
/* |
246,7 → 246,7 |
spinlock_unlock(&zone->lock); |
spinlock_unlock(&zone_head_lock); |
cpu_priority_restore(pri); |
interrupts_restore(ipl); |
} |
/** Mark frame region not free. |
335,15 → 335,15 |
*/ |
void zone_attach(zone_t *zone) |
{ |
pri_t pri; |
ipl_t ipl; |
pri = cpu_priority_high(); |
ipl = interrupts_disable(); |
spinlock_lock(&zone_head_lock); |
list_append(&zone->link, &zone_head); |
spinlock_unlock(&zone_head_lock); |
cpu_priority_restore(pri); |
interrupts_restore(ipl); |
} |
/** Initialize frame structure |
/SPARTAN/trunk/src/mm/heap.c |
---|
60,7 → 60,7 |
*/ |
void *early_malloc(size_t size) |
{ |
pri_t pri; |
ipl_t ipl; |
chunk_t *x, *y, *z; |
if (size == 0) |
67,7 → 67,7 |
panic("zero-size allocation request"); |
x = chunk0; |
pri = cpu_priority_high(); |
ipl = interrupts_disable(); |
spinlock_lock(&heaplock); |
while (x) { |
if (x->used || x->size < size) { |
84,7 → 84,7 |
*/ |
if (x->size < size + sizeof(chunk_t) + 1) { |
spinlock_unlock(&heaplock); |
cpu_priority_restore(pri); |
interrupts_restore(ipl); |
return &x->data[0]; |
} |
105,18 → 105,18 |
x->size = size; |
x->next = y; |
spinlock_unlock(&heaplock); |
cpu_priority_restore(pri); |
interrupts_restore(ipl); |
return &x->data[0]; |
} |
spinlock_unlock(&heaplock); |
cpu_priority_restore(pri); |
interrupts_restore(ipl); |
return NULL; |
} |
void early_free(void *ptr) |
{ |
pri_t pri; |
ipl_t ipl; |
chunk_t *x, *y, *z; |
if (!ptr) |
127,7 → 127,7 |
if (y->used != 1) |
panic("freeing unused/damaged chunk"); |
pri = cpu_priority_high(); |
ipl = interrupts_disable(); |
spinlock_lock(&heaplock); |
x = y->prev; |
z = y->next; |
150,5 → 150,5 |
} |
y->used = 0; |
spinlock_unlock(&heaplock); |
cpu_priority_restore(pri); |
interrupts_restore(ipl); |
} |