[PATCH] spufs: fix local store page refcounting
authorArnd Bergmann <arnd@arndb.de>
Tue, 6 Dec 2005 03:52:22 +0000 (22:52 -0500)
committerPaul Mackerras <paulus@samba.org>
Mon, 9 Jan 2006 03:52:45 +0000 (14:52 +1100)
With the new rules for reserved pages, the spufs now
needs working page reference counting.

I should probably look into converting to vm_insert_page,
but for now this patch makes spufs work again.

Signed-off-by: Arnd Bergmann <arndb@de.ibm.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
arch/powerpc/platforms/cell/setup.c
arch/powerpc/platforms/cell/spufs/file.c

index 56273e56cbfb9576c5390cf495213a3010c411a2..c41a6e2e2c3011b5686a7a63bfba240da0d2a1a2 100644 (file)
@@ -114,7 +114,7 @@ static void __init cell_spuprop_present(struct device_node *spe,
                for (pfn = start_pfn; pfn < end_pfn; pfn++) {
                        struct page *page = pfn_to_page(pfn);
                        set_page_links(page, ZONE_DMA, node_id, pfn);
-                       set_page_count(page, 0);
+                       set_page_count(page, 1);
                        reset_page_mapcount(page);
                        SetPageReserved(page);
                        INIT_LIST_HEAD(&page->lru);
index 786fdb1a1cc16cc2940704367193be6a6c937c1e..0fe1feccc02dbf9680f565c9f1582006d367e16d 100644 (file)
@@ -23,6 +23,7 @@
 #include <linux/fs.h>
 #include <linux/ioctl.h>
 #include <linux/module.h>
+#include <linux/pagemap.h>
 #include <linux/poll.h>
 
 #include <asm/io.h>
@@ -106,6 +107,7 @@ spufs_mem_mmap_nopage(struct vm_area_struct *vma,
        if (type)
                *type = VM_FAULT_MINOR;
 
+       page_cache_get(page);
        return page;
 }
 
@@ -120,7 +122,6 @@ spufs_mem_mmap(struct file *file, struct vm_area_struct *vma)
                return -EINVAL;
 
        /* FIXME: */
-       vma->vm_flags |= VM_RESERVED;
        vma->vm_page_prot = __pgprot(pgprot_val(vma->vm_page_prot)
                                     | _PAGE_NO_CACHE);