Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 391 → Rev 413

/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);
}