diff options
author | Arnd Bergmann <arnd@arndb.de> | 2005-12-05 22:52:22 -0500 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2006-01-08 22:52:45 -0500 |
commit | d88cfffac0002c56c1a7a813cb885fa6b5fdcd0e (patch) | |
tree | 13e4e65d3275a275913b14b12b49dbe987789334 | |
parent | 39c73c332c8264c0a3a1ce58aa3eae52d17af025 (diff) |
[PATCH] spufs: fix local store page refcounting
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>
-rw-r--r-- | arch/powerpc/platforms/cell/setup.c | 2 | ||||
-rw-r--r-- | arch/powerpc/platforms/cell/spufs/file.c | 3 |
2 files changed, 3 insertions, 2 deletions
diff --git a/arch/powerpc/platforms/cell/setup.c b/arch/powerpc/platforms/cell/setup.c index 56273e56cbfb..c41a6e2e2c30 100644 --- a/arch/powerpc/platforms/cell/setup.c +++ b/arch/powerpc/platforms/cell/setup.c | |||
@@ -114,7 +114,7 @@ static void __init cell_spuprop_present(struct device_node *spe, | |||
114 | for (pfn = start_pfn; pfn < end_pfn; pfn++) { | 114 | for (pfn = start_pfn; pfn < end_pfn; pfn++) { |
115 | struct page *page = pfn_to_page(pfn); | 115 | struct page *page = pfn_to_page(pfn); |
116 | set_page_links(page, ZONE_DMA, node_id, pfn); | 116 | set_page_links(page, ZONE_DMA, node_id, pfn); |
117 | set_page_count(page, 0); | 117 | set_page_count(page, 1); |
118 | reset_page_mapcount(page); | 118 | reset_page_mapcount(page); |
119 | SetPageReserved(page); | 119 | SetPageReserved(page); |
120 | INIT_LIST_HEAD(&page->lru); | 120 | INIT_LIST_HEAD(&page->lru); |
diff --git a/arch/powerpc/platforms/cell/spufs/file.c b/arch/powerpc/platforms/cell/spufs/file.c index 786fdb1a1cc1..0fe1feccc02d 100644 --- a/arch/powerpc/platforms/cell/spufs/file.c +++ b/arch/powerpc/platforms/cell/spufs/file.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <linux/fs.h> | 23 | #include <linux/fs.h> |
24 | #include <linux/ioctl.h> | 24 | #include <linux/ioctl.h> |
25 | #include <linux/module.h> | 25 | #include <linux/module.h> |
26 | #include <linux/pagemap.h> | ||
26 | #include <linux/poll.h> | 27 | #include <linux/poll.h> |
27 | 28 | ||
28 | #include <asm/io.h> | 29 | #include <asm/io.h> |
@@ -106,6 +107,7 @@ spufs_mem_mmap_nopage(struct vm_area_struct *vma, | |||
106 | if (type) | 107 | if (type) |
107 | *type = VM_FAULT_MINOR; | 108 | *type = VM_FAULT_MINOR; |
108 | 109 | ||
110 | page_cache_get(page); | ||
109 | return page; | 111 | return page; |
110 | } | 112 | } |
111 | 113 | ||
@@ -120,7 +122,6 @@ spufs_mem_mmap(struct file *file, struct vm_area_struct *vma) | |||
120 | return -EINVAL; | 122 | return -EINVAL; |
121 | 123 | ||
122 | /* FIXME: */ | 124 | /* FIXME: */ |
123 | vma->vm_flags |= VM_RESERVED; | ||
124 | vma->vm_page_prot = __pgprot(pgprot_val(vma->vm_page_prot) | 125 | vma->vm_page_prot = __pgprot(pgprot_val(vma->vm_page_prot) |
125 | | _PAGE_NO_CACHE); | 126 | | _PAGE_NO_CACHE); |
126 | 127 | ||