static void *xmalloc_new_page(size_t size)
{
struct xmalloc_hdr *hdr;
- unsigned long flags;
hdr = alloc_xenheap_page();
if ( hdr == NULL )
return NULL;
- spin_lock_irqsave(&freelist_lock, flags);
+ spin_lock(&freelist_lock);
maybe_split(hdr, size, PAGE_SIZE);
- spin_unlock_irqrestore(&freelist_lock, flags);
+ spin_unlock(&freelist_lock);
return data_from_header(hdr);
}
void *_xmalloc(size_t size, size_t align)
{
struct xmalloc_hdr *i;
- unsigned long flags;
ASSERT(!in_irq());
return xmalloc_whole_pages(size);
/* Search free list. */
- spin_lock_irqsave(&freelist_lock, flags);
+ spin_lock(&freelist_lock);
list_for_each_entry( i, &freelist, freelist )
{
if ( i->size < size )
continue;
del_from_freelist(i);
maybe_split(i, size, i->size);
- spin_unlock_irqrestore(&freelist_lock, flags);
+ spin_unlock(&freelist_lock);
return data_from_header(i);
}
- spin_unlock_irqrestore(&freelist_lock, flags);
+ spin_unlock(&freelist_lock);
/* Alloc a new page and return from that. */
return xmalloc_new_page(size);
void xfree(void *p)
{
- unsigned long flags;
struct xmalloc_hdr *i, *tmp, *hdr;
ASSERT(!in_irq());
}
/* Merge with other free block, or put in list. */
- spin_lock_irqsave(&freelist_lock, flags);
+ spin_lock(&freelist_lock);
list_for_each_entry_safe( i, tmp, &freelist, freelist )
{
unsigned long _i = (unsigned long)i;
add_to_freelist(hdr);
}
- spin_unlock_irqrestore(&freelist_lock, flags);
+ spin_unlock(&freelist_lock);
}
/*