lkml.org 
[lkml]   [2004]   [Mar]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patches in this message
    /
    Date
    From
    SubjectRe: remove-page-list patch in -mm breaks m68k
    Geert Uytterhoeven <geert@linux-m68k.org> wrote:
    >
    > On Tue, 23 Mar 2004, Matthias Urlichs wrote:
    > > The patch mentioned in $SUBJECT, which is included in Andrew's mm tree,
    > > does this to "struct page":
    > >
    > > diff -Nru a/include/linux/mm.h b/include/linux/mm.h
    > > --- a/include/linux/mm.h Tue Mar 23 11:29:11 2004
    > > +++ b/include/linux/mm.h Tue Mar 23 11:29:11 2004
    > > @@ -177,7 +177,6 @@
    > > page_flags_t flags; /* atomic flags, some possibly
    > > updated asynchronously */
    > > atomic_t count; /* Usage count, see below. */
    > > - struct list_head list; /* ->mapping has some page lists. */
    > > struct address_space *mapping; /* The inode (or ...) we belong to. */
    > > pgoff_t index; /* Our offset within mapping. */
    > > struct list_head lru; /* Pageout list, eg. active_list;
    > >
    > > In principle, anything that makes "struct page" smaller is a good idea.
    > > Unfortunately, this change breaks m68k, as arch/m68k/mm/memory.c has,
    > > and actually uses,
    > >
    > > #define PD_PTABLE(page) ((ptable_desc *)&(virt_to_page(page)->list))
    > >

    ah-hah, thanks.

    --- 25/arch/m68k/mm/memory.c~m68k-stop-using-page-list 2004-03-23 09:39:17.212548984 -0800
    +++ 25-akpm/arch/m68k/mm/memory.c 2004-03-23 09:39:31.179425696 -0800
    @@ -29,8 +29,8 @@
    typedef struct list_head ptable_desc;
    static LIST_HEAD(ptable_list);

    -#define PD_PTABLE(page) ((ptable_desc *)&(virt_to_page(page)->list))
    -#define PD_PAGE(ptable) (list_entry(ptable, struct page, list))
    +#define PD_PTABLE(page) ((ptable_desc *)&(virt_to_page(page)->lru))
    +#define PD_PAGE(ptable) (list_entry(ptable, struct page, lru))
    #define PD_MARKBITS(dp) (*(unsigned char *)&PD_PAGE(dp)->index)

    #define PTABLE_SIZE (PTRS_PER_PMD * sizeof(pmd_t))
    _

    > | tux$ find arch -type f | xargs grep 'page.*->list'
    > | arch/i386/mm/pageattr.c: list_add(&kpte_page->list, &df_list);
    > | arch/i386/mm/hugetlbpage.c: list_add(&page->list,
    > | arch/i386/mm/hugetlbpage.c: list_del(&page->list);
    > | arch/i386/mm/hugetlbpage.c: INIT_LIST_HEAD(&page->list);
    > | arch/m68k/mm/memory.c:#define PD_PTABLE(page) ((ptable_desc *)&(virt_to_page(page)->list))
    > | arch/sparc64/mm/hugetlbpage.c: list_add(&page->list,
    > | arch/sparc64/mm/hugetlbpage.c: list_del(&page->list);
    > | arch/sparc64/mm/hugetlbpage.c: INIT_LIST_HEAD(&page->list);
    > | arch/ia64/mm/hugetlbpage.c: list_add(&page->list,
    > | arch/ia64/mm/hugetlbpage.c: list_del(&page->list);
    > | arch/ia64/mm/hugetlbpage.c: INIT_LIST_HEAD(&page->list);
    > | arch/ppc64/mm/hugetlbpage.c: list_add(&page->list,
    > | arch/ppc64/mm/hugetlbpage.c: list_del(&page->list);
    > | arch/ppc64/mm/hugetlbpage.c: INIT_LIST_HEAD(&page->list);
    > | arch/arm26/machine/small_page.c: list_del_init(&page->list);
    > | arch/arm26/machine/small_page.c: list_add(&page->list, &order->queue);
    > | arch/arm26/machine/small_page.c: list_add(&page->list, &order->queue);
    > | arch/arm26/machine/small_page.c: list_del_init(&page->list);
    > | tux$
    >
    > Are all of these (except for m68k) converted in the mm tree?

    All except for arm26:

    --- 25/arch/arm26/machine/small_page.c~arm-stop-using-page-list 2004-03-23 09:35:33.994483288 -0800
    +++ 25-akpm/arch/arm26/machine/small_page.c 2004-03-23 09:37:08.227157744 -0800
    @@ -95,7 +95,7 @@ again:
    offset = ffz(USED_MAP(page));
    SET_USED(page, offset);
    if (USED_MAP(page) == order->all_used)
    - list_del_init(&page->list);
    + list_del_init(&page->lru);
    spin_unlock_irqrestore(&small_page_lock, flags);

    return (unsigned long) page_address(page) + (offset << order->shift);
    @@ -110,7 +110,7 @@ need_new_page:
    goto no_page;
    SetPageReserved(page);
    USED_MAP(page) = 0;
    - list_add(&page->list, &order->queue);
    + list_add(&page->lru, &order->queue);
    goto again;
    }

    @@ -151,7 +151,7 @@ static void __free_small_page(unsigned l
    spin_lock_irqsave(&small_page_lock, flags);

    if (USED_MAP(page) == order->all_used)
    - list_add(&page->list, &order->queue);
    + list_add(&page->lru, &order->queue);

    if (!TEST_AND_CLEAR_USED(page, spage))
    goto already_free;
    @@ -167,7 +167,7 @@ free_page:
    /*
    * unlink the page from the small page queue and free it
    */
    - list_del_init(&page->list);
    + list_del_init(&page->lru);
    spin_unlock_irqrestore(&small_page_lock, flags);
    ClearPageReserved(page);
    __free_page(page);
    _

    -
    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: 2005-03-22 14:01    [W:0.028 / U:1.972 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site