diff options
author | Ingo Molnar <mingo@elte.hu> | 2008-07-28 18:07:55 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-07-28 18:07:55 -0400 |
commit | cb28a1bbdb4790378e7366d6c9ee1d2340b84f92 (patch) | |
tree | 316436f77dac75335fd2c3ef5f109e71606c50d3 /arch/sh/mm | |
parent | b6d4f7e3ef25beb8c658c97867d98883e69dc544 (diff) | |
parent | f934fb19ef34730263e6afc01e8ec27a8a71470f (diff) |
Merge branch 'linus' into core/generic-dma-coherent
Conflicts:
arch/x86/Kconfig
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/sh/mm')
-rw-r--r-- | arch/sh/mm/Kconfig | 20 | ||||
-rw-r--r-- | arch/sh/mm/cache-debugfs.c | 2 | ||||
-rw-r--r-- | arch/sh/mm/cache-sh4.c | 67 | ||||
-rw-r--r-- | arch/sh/mm/consistent.c | 30 | ||||
-rw-r--r-- | arch/sh/mm/fault_32.c | 12 | ||||
-rw-r--r-- | arch/sh/mm/hugetlbpage.c | 8 | ||||
-rw-r--r-- | arch/sh/mm/init.c | 43 | ||||
-rw-r--r-- | arch/sh/mm/numa.c | 5 | ||||
-rw-r--r-- | arch/sh/mm/pg-sh4.c | 2 | ||||
-rw-r--r-- | arch/sh/mm/pg-sh7705.c | 2 | ||||
-rw-r--r-- | arch/sh/mm/pmb.c | 4 |
11 files changed, 106 insertions, 89 deletions
diff --git a/arch/sh/mm/Kconfig b/arch/sh/mm/Kconfig index 5fd218430b19..56d0a7daa34b 100644 --- a/arch/sh/mm/Kconfig +++ b/arch/sh/mm/Kconfig | |||
@@ -145,25 +145,39 @@ choice | |||
145 | 145 | ||
146 | config PAGE_SIZE_4KB | 146 | config PAGE_SIZE_4KB |
147 | bool "4kB" | 147 | bool "4kB" |
148 | depends on !X2TLB | 148 | depends on !MMU || !X2TLB |
149 | help | 149 | help |
150 | This is the default page size used by all SuperH CPUs. | 150 | This is the default page size used by all SuperH CPUs. |
151 | 151 | ||
152 | config PAGE_SIZE_8KB | 152 | config PAGE_SIZE_8KB |
153 | bool "8kB" | 153 | bool "8kB" |
154 | depends on X2TLB | 154 | depends on !MMU || X2TLB |
155 | help | 155 | help |
156 | This enables 8kB pages as supported by SH-X2 and later MMUs. | 156 | This enables 8kB pages as supported by SH-X2 and later MMUs. |
157 | 157 | ||
158 | config PAGE_SIZE_16KB | ||
159 | bool "16kB" | ||
160 | depends on !MMU | ||
161 | help | ||
162 | This enables 16kB pages on MMU-less SH systems. | ||
163 | |||
158 | config PAGE_SIZE_64KB | 164 | config PAGE_SIZE_64KB |
159 | bool "64kB" | 165 | bool "64kB" |
160 | depends on CPU_SH4 || CPU_SH5 | 166 | depends on !MMU || CPU_SH4 || CPU_SH5 |
161 | help | 167 | help |
162 | This enables support for 64kB pages, possible on all SH-4 | 168 | This enables support for 64kB pages, possible on all SH-4 |
163 | CPUs and later. | 169 | CPUs and later. |
164 | 170 | ||
165 | endchoice | 171 | endchoice |
166 | 172 | ||
173 | config ENTRY_OFFSET | ||
174 | hex | ||
175 | default "0x00001000" if PAGE_SIZE_4KB | ||
176 | default "0x00002000" if PAGE_SIZE_8KB | ||
177 | default "0x00004000" if PAGE_SIZE_16KB | ||
178 | default "0x00010000" if PAGE_SIZE_64KB | ||
179 | default "0x00000000" | ||
180 | |||
167 | choice | 181 | choice |
168 | prompt "HugeTLB page size" | 182 | prompt "HugeTLB page size" |
169 | depends on HUGETLB_PAGE && (CPU_SH4 || CPU_SH5) && MMU | 183 | depends on HUGETLB_PAGE && (CPU_SH4 || CPU_SH5) && MMU |
diff --git a/arch/sh/mm/cache-debugfs.c b/arch/sh/mm/cache-debugfs.c index c5b56d52b7d2..0e189ccd4a77 100644 --- a/arch/sh/mm/cache-debugfs.c +++ b/arch/sh/mm/cache-debugfs.c | |||
@@ -120,7 +120,7 @@ static const struct file_operations cache_debugfs_fops = { | |||
120 | .open = cache_debugfs_open, | 120 | .open = cache_debugfs_open, |
121 | .read = seq_read, | 121 | .read = seq_read, |
122 | .llseek = seq_lseek, | 122 | .llseek = seq_lseek, |
123 | .release = seq_release, | 123 | .release = single_release, |
124 | }; | 124 | }; |
125 | 125 | ||
126 | static int __init cache_debugfs_init(void) | 126 | static int __init cache_debugfs_init(void) |
diff --git a/arch/sh/mm/cache-sh4.c b/arch/sh/mm/cache-sh4.c index 43d7ff6b6ec7..1fdc8d90254a 100644 --- a/arch/sh/mm/cache-sh4.c +++ b/arch/sh/mm/cache-sh4.c | |||
@@ -4,6 +4,7 @@ | |||
4 | * Copyright (C) 1999, 2000, 2002 Niibe Yutaka | 4 | * Copyright (C) 1999, 2000, 2002 Niibe Yutaka |
5 | * Copyright (C) 2001 - 2007 Paul Mundt | 5 | * Copyright (C) 2001 - 2007 Paul Mundt |
6 | * Copyright (C) 2003 Richard Curnow | 6 | * Copyright (C) 2003 Richard Curnow |
7 | * Copyright (c) 2007 STMicroelectronics (R&D) Ltd. | ||
7 | * | 8 | * |
8 | * This file is subject to the terms and conditions of the GNU General Public | 9 | * This file is subject to the terms and conditions of the GNU General Public |
9 | * License. See the file "COPYING" in the main directory of this archive | 10 | * License. See the file "COPYING" in the main directory of this archive |
@@ -22,6 +23,7 @@ | |||
22 | * entirety. | 23 | * entirety. |
23 | */ | 24 | */ |
24 | #define MAX_DCACHE_PAGES 64 /* XXX: Tune for ways */ | 25 | #define MAX_DCACHE_PAGES 64 /* XXX: Tune for ways */ |
26 | #define MAX_ICACHE_PAGES 32 | ||
25 | 27 | ||
26 | static void __flush_dcache_segment_1way(unsigned long start, | 28 | static void __flush_dcache_segment_1way(unsigned long start, |
27 | unsigned long extent); | 29 | unsigned long extent); |
@@ -178,42 +180,45 @@ void __flush_invalidate_region(void *start, int size) | |||
178 | /* | 180 | /* |
179 | * Write back the range of D-cache, and purge the I-cache. | 181 | * Write back the range of D-cache, and purge the I-cache. |
180 | * | 182 | * |
181 | * Called from kernel/module.c:sys_init_module and routine for a.out format. | 183 | * Called from kernel/module.c:sys_init_module and routine for a.out format, |
184 | * signal handler code and kprobes code | ||
182 | */ | 185 | */ |
183 | void flush_icache_range(unsigned long start, unsigned long end) | 186 | void flush_icache_range(unsigned long start, unsigned long end) |
184 | { | 187 | { |
185 | flush_cache_all(); | 188 | int icacheaddr; |
186 | } | 189 | unsigned long flags, v; |
187 | |||
188 | /* | ||
189 | * Write back the D-cache and purge the I-cache for signal trampoline. | ||
190 | * .. which happens to be the same behavior as flush_icache_range(). | ||
191 | * So, we simply flush out a line. | ||
192 | */ | ||
193 | void __uses_jump_to_uncached flush_cache_sigtramp(unsigned long addr) | ||
194 | { | ||
195 | unsigned long v, index; | ||
196 | unsigned long flags; | ||
197 | int i; | 190 | int i; |
198 | 191 | ||
199 | v = addr & ~(L1_CACHE_BYTES-1); | 192 | /* If there are too many pages then just blow the caches */ |
200 | asm volatile("ocbwb %0" | 193 | if (((end - start) >> PAGE_SHIFT) >= MAX_ICACHE_PAGES) { |
201 | : /* no output */ | 194 | flush_cache_all(); |
202 | : "m" (__m(v))); | 195 | } else { |
203 | 196 | /* selectively flush d-cache then invalidate the i-cache */ | |
204 | index = CACHE_IC_ADDRESS_ARRAY | | 197 | /* this is inefficient, so only use for small ranges */ |
205 | (v & boot_cpu_data.icache.entry_mask); | 198 | start &= ~(L1_CACHE_BYTES-1); |
206 | 199 | end += L1_CACHE_BYTES-1; | |
207 | local_irq_save(flags); | 200 | end &= ~(L1_CACHE_BYTES-1); |
208 | jump_to_uncached(); | 201 | |
209 | 202 | local_irq_save(flags); | |
210 | for (i = 0; i < boot_cpu_data.icache.ways; | 203 | jump_to_uncached(); |
211 | i++, index += boot_cpu_data.icache.way_incr) | 204 | |
212 | ctrl_outl(0, index); /* Clear out Valid-bit */ | 205 | for (v = start; v < end; v+=L1_CACHE_BYTES) { |
213 | 206 | asm volatile("ocbwb %0" | |
214 | back_to_cached(); | 207 | : /* no output */ |
215 | wmb(); | 208 | : "m" (__m(v))); |
216 | local_irq_restore(flags); | 209 | |
210 | icacheaddr = CACHE_IC_ADDRESS_ARRAY | ( | ||
211 | v & cpu_data->icache.entry_mask); | ||
212 | |||
213 | for (i = 0; i < cpu_data->icache.ways; | ||
214 | i++, icacheaddr += cpu_data->icache.way_incr) | ||
215 | /* Clear i-cache line valid-bit */ | ||
216 | ctrl_outl(0, icacheaddr); | ||
217 | } | ||
218 | |||
219 | back_to_cached(); | ||
220 | local_irq_restore(flags); | ||
221 | } | ||
217 | } | 222 | } |
218 | 223 | ||
219 | static inline void flush_cache_4096(unsigned long start, | 224 | static inline void flush_cache_4096(unsigned long start, |
diff --git a/arch/sh/mm/consistent.c b/arch/sh/mm/consistent.c index 3095d9581475..b2ce014401b5 100644 --- a/arch/sh/mm/consistent.c +++ b/arch/sh/mm/consistent.c | |||
@@ -10,6 +10,7 @@ | |||
10 | * for more details. | 10 | * for more details. |
11 | */ | 11 | */ |
12 | #include <linux/mm.h> | 12 | #include <linux/mm.h> |
13 | #include <linux/platform_device.h> | ||
13 | #include <linux/dma-mapping.h> | 14 | #include <linux/dma-mapping.h> |
14 | #include <asm/cacheflush.h> | 15 | #include <asm/cacheflush.h> |
15 | #include <asm/addrspace.h> | 16 | #include <asm/addrspace.h> |
@@ -93,3 +94,32 @@ void dma_cache_sync(struct device *dev, void *vaddr, size_t size, | |||
93 | } | 94 | } |
94 | } | 95 | } |
95 | EXPORT_SYMBOL(dma_cache_sync); | 96 | EXPORT_SYMBOL(dma_cache_sync); |
97 | |||
98 | int platform_resource_setup_memory(struct platform_device *pdev, | ||
99 | char *name, unsigned long memsize) | ||
100 | { | ||
101 | struct resource *r; | ||
102 | dma_addr_t dma_handle; | ||
103 | void *buf; | ||
104 | |||
105 | r = pdev->resource + pdev->num_resources - 1; | ||
106 | if (r->flags) { | ||
107 | pr_warning("%s: unable to find empty space for resource\n", | ||
108 | name); | ||
109 | return -EINVAL; | ||
110 | } | ||
111 | |||
112 | buf = dma_alloc_coherent(NULL, memsize, &dma_handle, GFP_KERNEL); | ||
113 | if (!buf) { | ||
114 | pr_warning("%s: unable to allocate memory\n", name); | ||
115 | return -ENOMEM; | ||
116 | } | ||
117 | |||
118 | memset(buf, 0, memsize); | ||
119 | |||
120 | r->flags = IORESOURCE_MEM; | ||
121 | r->start = dma_handle; | ||
122 | r->end = r->start + memsize - 1; | ||
123 | r->name = name; | ||
124 | return 0; | ||
125 | } | ||
diff --git a/arch/sh/mm/fault_32.c b/arch/sh/mm/fault_32.c index d1fa27594c6e..0c776fdfbdda 100644 --- a/arch/sh/mm/fault_32.c +++ b/arch/sh/mm/fault_32.c | |||
@@ -37,16 +37,12 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs, | |||
37 | int fault; | 37 | int fault; |
38 | siginfo_t info; | 38 | siginfo_t info; |
39 | 39 | ||
40 | trace_hardirqs_on(); | ||
41 | local_irq_enable(); | ||
42 | |||
43 | #ifdef CONFIG_SH_KGDB | 40 | #ifdef CONFIG_SH_KGDB |
44 | if (kgdb_nofault && kgdb_bus_err_hook) | 41 | if (kgdb_nofault && kgdb_bus_err_hook) |
45 | kgdb_bus_err_hook(); | 42 | kgdb_bus_err_hook(); |
46 | #endif | 43 | #endif |
47 | 44 | ||
48 | tsk = current; | 45 | tsk = current; |
49 | mm = tsk->mm; | ||
50 | si_code = SEGV_MAPERR; | 46 | si_code = SEGV_MAPERR; |
51 | 47 | ||
52 | if (unlikely(address >= TASK_SIZE)) { | 48 | if (unlikely(address >= TASK_SIZE)) { |
@@ -88,6 +84,14 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs, | |||
88 | return; | 84 | return; |
89 | } | 85 | } |
90 | 86 | ||
87 | /* Only enable interrupts if they were on before the fault */ | ||
88 | if ((regs->sr & SR_IMASK) != SR_IMASK) { | ||
89 | trace_hardirqs_on(); | ||
90 | local_irq_enable(); | ||
91 | } | ||
92 | |||
93 | mm = tsk->mm; | ||
94 | |||
91 | /* | 95 | /* |
92 | * If we're in an interrupt or have no user | 96 | * If we're in an interrupt or have no user |
93 | * context, we must not take the fault.. | 97 | * context, we must not take the fault.. |
diff --git a/arch/sh/mm/hugetlbpage.c b/arch/sh/mm/hugetlbpage.c index ae8c321d6e2a..9304117039c4 100644 --- a/arch/sh/mm/hugetlbpage.c +++ b/arch/sh/mm/hugetlbpage.c | |||
@@ -22,7 +22,8 @@ | |||
22 | #include <asm/tlbflush.h> | 22 | #include <asm/tlbflush.h> |
23 | #include <asm/cacheflush.h> | 23 | #include <asm/cacheflush.h> |
24 | 24 | ||
25 | pte_t *huge_pte_alloc(struct mm_struct *mm, unsigned long addr) | 25 | pte_t *huge_pte_alloc(struct mm_struct *mm, |
26 | unsigned long addr, unsigned long sz) | ||
26 | { | 27 | { |
27 | pgd_t *pgd; | 28 | pgd_t *pgd; |
28 | pud_t *pud; | 29 | pud_t *pud; |
@@ -78,6 +79,11 @@ int pmd_huge(pmd_t pmd) | |||
78 | return 0; | 79 | return 0; |
79 | } | 80 | } |
80 | 81 | ||
82 | int pud_huge(pud_t pud) | ||
83 | { | ||
84 | return 0; | ||
85 | } | ||
86 | |||
81 | struct page *follow_huge_pmd(struct mm_struct *mm, unsigned long address, | 87 | struct page *follow_huge_pmd(struct mm_struct *mm, unsigned long address, |
82 | pmd_t *pmd, int write) | 88 | pmd_t *pmd, int write) |
83 | { | 89 | { |
diff --git a/arch/sh/mm/init.c b/arch/sh/mm/init.c index d7df26bd1e54..b75a7acd62fb 100644 --- a/arch/sh/mm/init.c +++ b/arch/sh/mm/init.c | |||
@@ -25,47 +25,6 @@ DEFINE_PER_CPU(struct mmu_gather, mmu_gathers); | |||
25 | pgd_t swapper_pg_dir[PTRS_PER_PGD]; | 25 | pgd_t swapper_pg_dir[PTRS_PER_PGD]; |
26 | unsigned long cached_to_uncached = 0; | 26 | unsigned long cached_to_uncached = 0; |
27 | 27 | ||
28 | void show_mem(void) | ||
29 | { | ||
30 | int total = 0, reserved = 0, free = 0; | ||
31 | int shared = 0, cached = 0, slab = 0; | ||
32 | pg_data_t *pgdat; | ||
33 | |||
34 | printk("Mem-info:\n"); | ||
35 | show_free_areas(); | ||
36 | |||
37 | for_each_online_pgdat(pgdat) { | ||
38 | unsigned long flags, i; | ||
39 | |||
40 | pgdat_resize_lock(pgdat, &flags); | ||
41 | for (i = 0; i < pgdat->node_spanned_pages; i++) { | ||
42 | struct page *page = pgdat_page_nr(pgdat, i); | ||
43 | total++; | ||
44 | if (PageReserved(page)) | ||
45 | reserved++; | ||
46 | else if (PageSwapCache(page)) | ||
47 | cached++; | ||
48 | else if (PageSlab(page)) | ||
49 | slab++; | ||
50 | else if (!page_count(page)) | ||
51 | free++; | ||
52 | else | ||
53 | shared += page_count(page) - 1; | ||
54 | } | ||
55 | pgdat_resize_unlock(pgdat, &flags); | ||
56 | } | ||
57 | |||
58 | printk("Free swap: %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10)); | ||
59 | printk("%d pages of RAM\n", total); | ||
60 | printk("%d free pages\n", free); | ||
61 | printk("%d reserved pages\n", reserved); | ||
62 | printk("%d slab pages\n", slab); | ||
63 | printk("%d pages shared\n", shared); | ||
64 | printk("%d pages swap cached\n", cached); | ||
65 | printk(KERN_INFO "Total of %ld pages in page table cache\n", | ||
66 | quicklist_total_size()); | ||
67 | } | ||
68 | |||
69 | #ifdef CONFIG_MMU | 28 | #ifdef CONFIG_MMU |
70 | static void set_pte_phys(unsigned long addr, unsigned long phys, pgprot_t prot) | 29 | static void set_pte_phys(unsigned long addr, unsigned long phys, pgprot_t prot) |
71 | { | 30 | { |
@@ -191,7 +150,7 @@ void __init paging_init(void) | |||
191 | pg_data_t *pgdat = NODE_DATA(nid); | 150 | pg_data_t *pgdat = NODE_DATA(nid); |
192 | unsigned long low, start_pfn; | 151 | unsigned long low, start_pfn; |
193 | 152 | ||
194 | start_pfn = pgdat->bdata->node_boot_start >> PAGE_SHIFT; | 153 | start_pfn = pgdat->bdata->node_min_pfn; |
195 | low = pgdat->bdata->node_low_pfn; | 154 | low = pgdat->bdata->node_low_pfn; |
196 | 155 | ||
197 | if (max_zone_pfns[ZONE_NORMAL] < low) | 156 | if (max_zone_pfns[ZONE_NORMAL] < low) |
diff --git a/arch/sh/mm/numa.c b/arch/sh/mm/numa.c index 1663199ce888..095d93bec7cd 100644 --- a/arch/sh/mm/numa.c +++ b/arch/sh/mm/numa.c | |||
@@ -14,7 +14,6 @@ | |||
14 | #include <linux/pfn.h> | 14 | #include <linux/pfn.h> |
15 | #include <asm/sections.h> | 15 | #include <asm/sections.h> |
16 | 16 | ||
17 | static bootmem_data_t plat_node_bdata[MAX_NUMNODES]; | ||
18 | struct pglist_data *node_data[MAX_NUMNODES] __read_mostly; | 17 | struct pglist_data *node_data[MAX_NUMNODES] __read_mostly; |
19 | EXPORT_SYMBOL_GPL(node_data); | 18 | EXPORT_SYMBOL_GPL(node_data); |
20 | 19 | ||
@@ -35,7 +34,7 @@ void __init setup_memory(void) | |||
35 | NODE_DATA(0) = pfn_to_kaddr(free_pfn); | 34 | NODE_DATA(0) = pfn_to_kaddr(free_pfn); |
36 | memset(NODE_DATA(0), 0, sizeof(struct pglist_data)); | 35 | memset(NODE_DATA(0), 0, sizeof(struct pglist_data)); |
37 | free_pfn += PFN_UP(sizeof(struct pglist_data)); | 36 | free_pfn += PFN_UP(sizeof(struct pglist_data)); |
38 | NODE_DATA(0)->bdata = &plat_node_bdata[0]; | 37 | NODE_DATA(0)->bdata = &bootmem_node_data[0]; |
39 | 38 | ||
40 | /* Set up node 0 */ | 39 | /* Set up node 0 */ |
41 | setup_bootmem_allocator(free_pfn); | 40 | setup_bootmem_allocator(free_pfn); |
@@ -66,7 +65,7 @@ void __init setup_bootmem_node(int nid, unsigned long start, unsigned long end) | |||
66 | free_pfn += PFN_UP(sizeof(struct pglist_data)); | 65 | free_pfn += PFN_UP(sizeof(struct pglist_data)); |
67 | memset(NODE_DATA(nid), 0, sizeof(struct pglist_data)); | 66 | memset(NODE_DATA(nid), 0, sizeof(struct pglist_data)); |
68 | 67 | ||
69 | NODE_DATA(nid)->bdata = &plat_node_bdata[nid]; | 68 | NODE_DATA(nid)->bdata = &bootmem_node_data[nid]; |
70 | NODE_DATA(nid)->node_start_pfn = start_pfn; | 69 | NODE_DATA(nid)->node_start_pfn = start_pfn; |
71 | NODE_DATA(nid)->node_spanned_pages = end_pfn - start_pfn; | 70 | NODE_DATA(nid)->node_spanned_pages = end_pfn - start_pfn; |
72 | 71 | ||
diff --git a/arch/sh/mm/pg-sh4.c b/arch/sh/mm/pg-sh4.c index 8c7a9ca79879..38870e0fc182 100644 --- a/arch/sh/mm/pg-sh4.c +++ b/arch/sh/mm/pg-sh4.c | |||
@@ -111,7 +111,7 @@ EXPORT_SYMBOL(copy_user_highpage); | |||
111 | /* | 111 | /* |
112 | * For SH-4, we have our own implementation for ptep_get_and_clear | 112 | * For SH-4, we have our own implementation for ptep_get_and_clear |
113 | */ | 113 | */ |
114 | inline pte_t ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep) | 114 | pte_t ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep) |
115 | { | 115 | { |
116 | pte_t pte = *ptep; | 116 | pte_t pte = *ptep; |
117 | 117 | ||
diff --git a/arch/sh/mm/pg-sh7705.c b/arch/sh/mm/pg-sh7705.c index 7f885b7f8aff..eaf25147194c 100644 --- a/arch/sh/mm/pg-sh7705.c +++ b/arch/sh/mm/pg-sh7705.c | |||
@@ -118,7 +118,7 @@ void copy_user_page(void *to, void *from, unsigned long address, struct page *pg | |||
118 | * For SH7705, we have our own implementation for ptep_get_and_clear | 118 | * For SH7705, we have our own implementation for ptep_get_and_clear |
119 | * Copied from pg-sh4.c | 119 | * Copied from pg-sh4.c |
120 | */ | 120 | */ |
121 | inline pte_t ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep) | 121 | pte_t ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep) |
122 | { | 122 | { |
123 | pte_t pte = *ptep; | 123 | pte_t pte = *ptep; |
124 | 124 | ||
diff --git a/arch/sh/mm/pmb.c b/arch/sh/mm/pmb.c index 0b0ec6e04753..cef727669c87 100644 --- a/arch/sh/mm/pmb.c +++ b/arch/sh/mm/pmb.c | |||
@@ -293,7 +293,7 @@ void pmb_unmap(unsigned long addr) | |||
293 | } while (pmbe); | 293 | } while (pmbe); |
294 | } | 294 | } |
295 | 295 | ||
296 | static void pmb_cache_ctor(struct kmem_cache *cachep, void *pmb) | 296 | static void pmb_cache_ctor(void *pmb) |
297 | { | 297 | { |
298 | struct pmb_entry *pmbe = pmb; | 298 | struct pmb_entry *pmbe = pmb; |
299 | 299 | ||
@@ -385,7 +385,7 @@ static const struct file_operations pmb_debugfs_fops = { | |||
385 | .open = pmb_debugfs_open, | 385 | .open = pmb_debugfs_open, |
386 | .read = seq_read, | 386 | .read = seq_read, |
387 | .llseek = seq_lseek, | 387 | .llseek = seq_lseek, |
388 | .release = seq_release, | 388 | .release = single_release, |
389 | }; | 389 | }; |
390 | 390 | ||
391 | static int __init pmb_debugfs_init(void) | 391 | static int __init pmb_debugfs_init(void) |