lkml.org 
[lkml]   [2006]   [Jan]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: ALSA on MIPS platform
    At Mon, 30 Jan 2006 18:56:08 +0900 (JST),
    Atsushi Nemoto wrote:
    >
    > >>>>> On Fri, 27 Jan 2006 16:57:49 +0100, Takashi Iwai <tiwai@suse.de> said:
    > hugh> Yes, mark_pages() and unmark_pages() can just be removed as soon
    > hugh> as you like.
    >
    > >> When I tried undefining NEED_RESERVE_PAGES for MIPS on 2.6.13,
    > >> something did not work (I can not remember details...). But it seems
    > >> things have been changed in 2.6.15. I'll try again. Thanks.
    >
    > tiwai> Yes, it was changed pretty much.
    >
    > I undefined NEED_RESERVE_PAGES on 2.6.15 and it seems OK on MIPS.
    > Thank you.

    Well, as Hugu pointed out, that page reservation plays no longer any
    role. The patch below should work too on 2.6.15 or later.


    Takashi


    --- linux/sound/core/memalloc.c 23 Jan 2006 15:53:15 -0000 1.52
    +++ linux/sound/core/memalloc.c 30 Jan 2006 10:16:31 -0000
    @@ -141,10 +141,6 @@

    #endif /* arch */

    -#if ! defined(__arm__)
    -#define NEED_RESERVE_PAGES
    -#endif
    -
    /*
    *
    * Generic memory allocators
    @@ -163,20 +159,6 @@
    snd_allocated_pages -= 1 << order;
    }

    -static void mark_pages(struct page *page, int order)
    -{
    - struct page *last_page = page + (1 << order);
    - while (page < last_page)
    - SetPageReserved(page++);
    -}
    -
    -static void unmark_pages(struct page *page, int order)
    -{
    - struct page *last_page = page + (1 << order);
    - while (page < last_page)
    - ClearPageReserved(page++);
    -}
    -
    /**
    * snd_malloc_pages - allocate pages with the given size
    * @size: the size to allocate in bytes
    @@ -195,10 +177,8 @@
    snd_assert(gfp_flags != 0, return NULL);
    gfp_flags |= __GFP_COMP; /* compound page lets parts be mapped */
    pg = get_order(size);
    - if ((res = (void *) __get_free_pages(gfp_flags, pg)) != NULL) {
    - mark_pages(virt_to_page(res), pg);
    + if ((res = (void *) __get_free_pages(gfp_flags, pg)) != NULL)
    inc_snd_pages(pg);
    - }
    return res;
    }

    @@ -217,7 +197,6 @@
    return;
    pg = get_order(size);
    dec_snd_pages(pg);
    - unmark_pages(virt_to_page(ptr), pg);
    free_pages((unsigned long) ptr, pg);
    }

    @@ -242,12 +221,8 @@
    | __GFP_NORETRY /* don't trigger OOM-killer */
    | __GFP_NOWARN; /* no stack trace print - this call is non-critical */
    res = dma_alloc_coherent(dev, PAGE_SIZE << pg, dma, gfp_flags);
    - if (res != NULL) {
    -#ifdef NEED_RESERVE_PAGES
    - mark_pages(virt_to_page(res), pg); /* should be dma_to_page() */
    -#endif
    + if (res != NULL)
    inc_snd_pages(pg);
    - }

    return res;
    }
    @@ -262,9 +237,6 @@
    return;
    pg = get_order(size);
    dec_snd_pages(pg);
    -#ifdef NEED_RESERVE_PAGES
    - unmark_pages(virt_to_page(ptr), pg); /* should be dma_to_page() */
    -#endif
    dma_free_coherent(dev, PAGE_SIZE << pg, ptr, dma);
    }

    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2006-01-30 11:21    [W:2.610 / U:0.156 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site