Re: remove-page-list patch in -mm breaks m68k
From: Andrew Morton
Date: Tue Mar 23 2004 - 12:44:03 EST
Geert Uytterhoeven <geert@xxxxxxxxxxxxxx> 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@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/