From: Keir Fraser Date: Wed, 27 Aug 2008 09:26:50 +0000 (+0100) Subject: xmalloc: Cannot be called in IRQ context so doesn't need IRQ-safe locking. X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~14113^2~30 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=6fc80aed0d7bfcc27d8f39736133c702f07cac16;p=xen.git xmalloc: Cannot be called in IRQ context so doesn't need IRQ-safe locking. Signed-off-by: Keir Fraser --- diff --git a/xen/common/xmalloc.c b/xen/common/xmalloc.c index 61e64441a8..e6f9c385d8 100644 --- a/xen/common/xmalloc.c +++ b/xen/common/xmalloc.c @@ -136,15 +136,14 @@ static void maybe_split(struct xmalloc_hdr *hdr, size_t size, size_t block) 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); } @@ -175,7 +174,6 @@ static inline size_t align_up(size_t size, size_t align) void *_xmalloc(size_t size, size_t align) { struct xmalloc_hdr *i; - unsigned long flags; ASSERT(!in_irq()); @@ -196,17 +194,17 @@ void *_xmalloc(size_t size, size_t align) 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); @@ -214,7 +212,6 @@ void *_xmalloc(size_t size, size_t align) void xfree(void *p) { - unsigned long flags; struct xmalloc_hdr *i, *tmp, *hdr; ASSERT(!in_irq()); @@ -238,7 +235,7 @@ void xfree(void *p) } /* 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; @@ -275,7 +272,7 @@ void xfree(void *p) add_to_freelist(hdr); } - spin_unlock_irqrestore(&freelist_lock, flags); + spin_unlock(&freelist_lock); } /*