WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] Remove unused old xmalloc.c file.

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] Remove unused old xmalloc.c file.
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Thu, 23 Oct 2008 07:00:18 -0700
Delivery-date: Thu, 23 Oct 2008 07:00:54 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1224689977 -3600
# Node ID 734a5493f03a9ca31d47adf7a2f78e255e5e9ea9
# Parent  94227875c13d4713b3c44f322663881b5c4ea4a0
Remove unused old xmalloc.c file.
Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx>
---
 xen/common/xmalloc.c |  286 ---------------------------------------------------
 1 files changed, 286 deletions(-)

diff -r 94227875c13d -r 734a5493f03a xen/common/xmalloc.c
--- a/xen/common/xmalloc.c      Wed Oct 22 15:11:54 2008 +0100
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,286 +0,0 @@
-/******************************************************************************
- * Simple allocator for Xen.  If larger than a page, simply use the
- * page-order allocator.
- *
- * Copyright (C) 2005 Rusty Russell IBM Corporation
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-/*
- * TODO (Keir, 17/2/05):
- *  1. Use space in page_info to avoid xmalloc_hdr in allocated blocks.
- *  2. page_info points into free list to make xfree() O(1) complexity.
- *  3. Perhaps make this a sub-page buddy allocator? xmalloc() == O(1).
- *     (Disadvantage is potentially greater internal fragmentation).
- */
-
-#include <xen/config.h>
-#include <xen/mm.h>
-#include <xen/spinlock.h>
-#include <xen/timer.h>
-#include <xen/cache.h>
-#include <xen/prefetch.h>
-#include <xen/irq.h>
-#include <xen/smp.h>
-
-/*
- * XMALLOC_DEBUG:
- *  1. Free data blocks are filled with poison bytes.
- *  2. In-use data blocks have guard bytes at the start and end.
- */
-#ifndef NDEBUG
-#define XMALLOC_DEBUG 1
-#endif
-
-static LIST_HEAD(freelist);
-static DEFINE_SPINLOCK(freelist_lock);
-
-struct xmalloc_hdr
-{
-    /* Size is total including this header. */
-    size_t size;
-    struct list_head freelist;
-} __cacheline_aligned;
-
-static void add_to_freelist(struct xmalloc_hdr *hdr)
-{
-#if XMALLOC_DEBUG
-    memset(hdr + 1, 0xa5, hdr->size - sizeof(*hdr));
-#endif
-    list_add(&hdr->freelist, &freelist);
-}
-
-static void del_from_freelist(struct xmalloc_hdr *hdr)
-{
-#if XMALLOC_DEBUG
-    size_t i;
-    unsigned char *data = (unsigned char *)(hdr + 1);
-    for ( i = 0; i < (hdr->size - sizeof(*hdr)); i++ )
-        BUG_ON(data[i] != 0xa5);
-    BUG_ON((hdr->size <= 0) || (hdr->size >= PAGE_SIZE));
-#endif
-    list_del(&hdr->freelist);
-}
-
-static void *data_from_header(struct xmalloc_hdr *hdr)
-{
-#if XMALLOC_DEBUG
-    /* Data block contain SMP_CACHE_BYTES of guard canary. */
-    unsigned char *data = (unsigned char *)(hdr + 1);
-    memset(data, 0x5a, SMP_CACHE_BYTES);
-    memset(data + hdr->size - sizeof(*hdr) - SMP_CACHE_BYTES,
-           0x5a, SMP_CACHE_BYTES);
-    return data + SMP_CACHE_BYTES;
-#else
-    return hdr + 1;
-#endif
-}
-
-static struct xmalloc_hdr *header_from_data(void *p)
-{
-#if XMALLOC_DEBUG
-    unsigned char *data = (unsigned char *)p - SMP_CACHE_BYTES;
-    struct xmalloc_hdr *hdr = (struct xmalloc_hdr *)data - 1;
-    size_t i;
-
-    /* Check header guard canary. */
-    for ( i = 0; i < SMP_CACHE_BYTES; i++ )
-        BUG_ON(data[i] != 0x5a);
-
-    /* Check footer guard canary. */
-    data += hdr->size - sizeof(*hdr) - SMP_CACHE_BYTES;
-    for ( i = 0; i < SMP_CACHE_BYTES; i++ )
-        BUG_ON(data[i] != 0x5a);
-
-    return hdr;
-#else
-    return (struct xmalloc_hdr *)p - 1;
-#endif
-}
-
-static void maybe_split(struct xmalloc_hdr *hdr, size_t size, size_t block)
-{
-    struct xmalloc_hdr *extra;
-    size_t leftover = block - size;
-
-    /* If enough is left to make a block, put it on free list. */
-    if ( leftover >= (2 * sizeof(struct xmalloc_hdr)) )
-    {
-        extra = (struct xmalloc_hdr *)((unsigned long)hdr + size);
-        extra->size = leftover;
-        add_to_freelist(extra);
-    }
-    else
-    {
-        size = block;
-    }
-
-    hdr->size = size;
-    /* Debugging aid. */
-    hdr->freelist.next = hdr->freelist.prev = NULL;
-}
-
-static void *xmalloc_new_page(size_t size)
-{
-    struct xmalloc_hdr *hdr;
-
-    hdr = alloc_xenheap_page();
-    if ( hdr == NULL )
-        return NULL;
-
-    spin_lock(&freelist_lock);
-    maybe_split(hdr, size, PAGE_SIZE);
-    spin_unlock(&freelist_lock);
-
-    return data_from_header(hdr);
-}
-
-/* Big object?  Just use the page allocator. */
-static void *xmalloc_whole_pages(size_t size)
-{
-    struct xmalloc_hdr *hdr;
-    unsigned int pageorder = get_order_from_bytes(size);
-
-    hdr = alloc_xenheap_pages(pageorder);
-    if ( hdr == NULL )
-        return NULL;
-
-    hdr->size = (1 << (pageorder + PAGE_SHIFT));
-    /* Debugging aid. */
-    hdr->freelist.next = hdr->freelist.prev = NULL;
-
-    return data_from_header(hdr);
-}
-
-/* Return size, increased to alignment with align. */
-static inline size_t align_up(size_t size, size_t align)
-{
-    return (size + align - 1) & ~(align - 1);
-}
-
-void *_xmalloc(size_t size, size_t align)
-{
-    struct xmalloc_hdr *i;
-
-    ASSERT(!in_irq());
-
-    /* We currently always return cacheline aligned. */
-    BUG_ON(align > SMP_CACHE_BYTES);
-
-#if XMALLOC_DEBUG
-    /* Add room for canaries at start and end of data block. */
-    size += 2 * SMP_CACHE_BYTES;
-#endif
-
-    /* Add room for header, pad to align next header. */
-    size += sizeof(struct xmalloc_hdr);
-    size = align_up(size, __alignof__(struct xmalloc_hdr));
-
-    /* For big allocs, give them whole pages. */
-    if ( size >= PAGE_SIZE )
-        return xmalloc_whole_pages(size);
-
-    /* Search free list. */
-    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(&freelist_lock);
-        return data_from_header(i);
-    }
-    spin_unlock(&freelist_lock);
-
-    /* Alloc a new page and return from that. */
-    return xmalloc_new_page(size);
-}
-
-void xfree(void *p)
-{
-    struct xmalloc_hdr *i, *tmp, *hdr;
-
-    ASSERT(!in_irq());
-
-    if ( p == NULL )
-        return;
-
-    hdr = header_from_data(p);
-
-    /* We know hdr will be on same page. */
-    BUG_ON(((long)p & PAGE_MASK) != ((long)hdr & PAGE_MASK));
-
-    /* Not previously freed. */
-    BUG_ON(hdr->freelist.next || hdr->freelist.prev);
-
-    /* Big allocs free directly. */
-    if ( hdr->size >= PAGE_SIZE )
-    {
-        free_xenheap_pages(hdr, get_order_from_bytes(hdr->size));
-        return;
-    }
-
-    /* Merge with other free block, or put in list. */
-    spin_lock(&freelist_lock);
-    list_for_each_entry_safe( i, tmp, &freelist, freelist )
-    {
-        unsigned long _i   = (unsigned long)i;
-        unsigned long _hdr = (unsigned long)hdr;
-
-        /* Do not merge across page boundaries. */
-        if ( ((_i ^ _hdr) & PAGE_MASK) != 0 )
-            continue;
-
-        /* We follow this block?  Swallow it. */
-        if ( (_i + i->size) == _hdr )
-        {
-            del_from_freelist(i);
-            i->size += hdr->size;
-            hdr = i;
-        }
-
-        /* We precede this block? Swallow it. */
-        if ( (_hdr + hdr->size) == _i )
-        {
-            del_from_freelist(i);
-            hdr->size += i->size;
-        }
-    }
-
-    /* Did we merge an entire page? */
-    if ( hdr->size == PAGE_SIZE )
-    {
-        BUG_ON((((unsigned long)hdr) & (PAGE_SIZE-1)) != 0);
-        free_xenheap_pages(hdr, 0);
-    }
-    else
-    {
-        add_to_freelist(hdr);
-    }
-
-    spin_unlock(&freelist_lock);
-}
-
-/*
- * Local variables:
- * mode: C
- * c-set-style: "BSD"
- * c-basic-offset: 4
- * tab-width: 4
- * indent-tabs-mode: nil
- * End:
- */

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] Remove unused old xmalloc.c file., Xen patchbot-unstable <=