diff options
author | Tejun Heo <tj@kernel.org> | 2010-01-04 19:17:33 -0500 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2010-01-04 19:17:33 -0500 |
commit | 32032df6c2f6c9c6b2ada2ce42322231824f70c2 (patch) | |
tree | b1ce838a37044bb38dfc128e2116ca35630e629a /arch/m32r | |
parent | 22b737f4c75197372d64afc6ed1bccd58c00e549 (diff) | |
parent | c5974b835a909ff15c3b7e6cf6789b5eb919f419 (diff) |
Merge branch 'master' into percpu
Conflicts:
arch/powerpc/platforms/pseries/hvCall.S
include/linux/percpu.h
Diffstat (limited to 'arch/m32r')
-rw-r--r-- | arch/m32r/Kconfig | 3 | ||||
-rw-r--r-- | arch/m32r/boot/compressed/Makefile | 18 | ||||
-rw-r--r-- | arch/m32r/boot/compressed/misc.c | 143 | ||||
-rw-r--r-- | arch/m32r/include/asm/cacheflush.h | 3 | ||||
-rw-r--r-- | arch/m32r/include/asm/elf.h | 1 | ||||
-rw-r--r-- | arch/m32r/include/asm/io.h | 7 | ||||
-rw-r--r-- | arch/m32r/include/asm/socket.h | 2 | ||||
-rw-r--r-- | arch/m32r/include/asm/spinlock.h | 48 | ||||
-rw-r--r-- | arch/m32r/include/asm/spinlock_types.h | 8 | ||||
-rw-r--r-- | arch/m32r/kernel/irq.c | 4 | ||||
-rw-r--r-- | arch/m32r/kernel/m32r_ksyms.c | 6 | ||||
-rw-r--r-- | arch/m32r/kernel/smp.c | 3 | ||||
-rw-r--r-- | arch/m32r/kernel/sys_m32r.c | 24 | ||||
-rw-r--r-- | arch/m32r/kernel/syscall_table.S | 2 | ||||
-rw-r--r-- | arch/m32r/kernel/time.c | 15 | ||||
-rw-r--r-- | arch/m32r/kernel/traps.c | 4 | ||||
-rw-r--r-- | arch/m32r/kernel/vmlinux.lds.S | 2 | ||||
-rw-r--r-- | arch/m32r/lib/delay.c | 4 | ||||
-rw-r--r-- | arch/m32r/mm/discontig.c | 5 | ||||
-rw-r--r-- | arch/m32r/mm/mmu.S | 12 |
20 files changed, 120 insertions, 194 deletions
diff --git a/arch/m32r/Kconfig b/arch/m32r/Kconfig index c41234f1b825..3a9319f93e89 100644 --- a/arch/m32r/Kconfig +++ b/arch/m32r/Kconfig | |||
@@ -11,6 +11,9 @@ config M32R | |||
11 | select HAVE_IDE | 11 | select HAVE_IDE |
12 | select HAVE_OPROFILE | 12 | select HAVE_OPROFILE |
13 | select INIT_ALL_POSSIBLE | 13 | select INIT_ALL_POSSIBLE |
14 | select HAVE_KERNEL_GZIP | ||
15 | select HAVE_KERNEL_BZIP2 | ||
16 | select HAVE_KERNEL_LZMA | ||
14 | 17 | ||
15 | config SBUS | 18 | config SBUS |
16 | bool | 19 | bool |
diff --git a/arch/m32r/boot/compressed/Makefile b/arch/m32r/boot/compressed/Makefile index 560484ae35ec..177716b1d613 100644 --- a/arch/m32r/boot/compressed/Makefile +++ b/arch/m32r/boot/compressed/Makefile | |||
@@ -1,11 +1,11 @@ | |||
1 | # | 1 | # |
2 | # linux/arch/sh/boot/compressed/Makefile | 2 | # linux/arch/m32r/boot/compressed/Makefile |
3 | # | 3 | # |
4 | # create a compressed vmlinux image from the original vmlinux | 4 | # create a compressed vmlinux image from the original vmlinux |
5 | # | 5 | # |
6 | 6 | ||
7 | targets := vmlinux vmlinux.bin vmlinux.bin.gz head.o misc.o \ | 7 | targets := vmlinux vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2 \ |
8 | piggy.o vmlinux.lds | 8 | vmlinux.bin.lzma head.o misc.o piggy.o vmlinux.lds |
9 | 9 | ||
10 | OBJECTS = $(obj)/head.o $(obj)/misc.o | 10 | OBJECTS = $(obj)/head.o $(obj)/misc.o |
11 | 11 | ||
@@ -27,6 +27,12 @@ $(obj)/vmlinux.bin: vmlinux FORCE | |||
27 | $(obj)/vmlinux.bin.gz: $(obj)/vmlinux.bin FORCE | 27 | $(obj)/vmlinux.bin.gz: $(obj)/vmlinux.bin FORCE |
28 | $(call if_changed,gzip) | 28 | $(call if_changed,gzip) |
29 | 29 | ||
30 | $(obj)/vmlinux.bin.bz2: $(obj)/vmlinux.bin FORCE | ||
31 | $(call if_changed,bzip2) | ||
32 | |||
33 | $(obj)/vmlinux.bin.lzma: $(obj)/vmlinux.bin FORCE | ||
34 | $(call if_changed,lzma) | ||
35 | |||
30 | CFLAGS_misc.o += -fpic | 36 | CFLAGS_misc.o += -fpic |
31 | 37 | ||
32 | ifdef CONFIG_MMU | 38 | ifdef CONFIG_MMU |
@@ -37,5 +43,9 @@ endif | |||
37 | 43 | ||
38 | OBJCOPYFLAGS += -R .empty_zero_page | 44 | OBJCOPYFLAGS += -R .empty_zero_page |
39 | 45 | ||
40 | $(obj)/piggy.o: $(obj)/vmlinux.scr $(obj)/vmlinux.bin.gz FORCE | 46 | suffix_$(CONFIG_KERNEL_GZIP) = gz |
47 | suffix_$(CONFIG_KERNEL_BZIP2) = bz2 | ||
48 | suffix_$(CONFIG_KERNEL_LZMA) = lzma | ||
49 | |||
50 | $(obj)/piggy.o: $(obj)/vmlinux.scr $(obj)/vmlinux.bin.$(suffix-y) FORCE | ||
41 | $(call if_changed,ld) | 51 | $(call if_changed,ld) |
diff --git a/arch/m32r/boot/compressed/misc.c b/arch/m32r/boot/compressed/misc.c index d394292498c0..370d60881977 100644 --- a/arch/m32r/boot/compressed/misc.c +++ b/arch/m32r/boot/compressed/misc.c | |||
@@ -9,140 +9,49 @@ | |||
9 | * Adapted for SH by Stuart Menefy, Aug 1999 | 9 | * Adapted for SH by Stuart Menefy, Aug 1999 |
10 | * | 10 | * |
11 | * 2003-02-12: Support M32R by Takeo Takahashi | 11 | * 2003-02-12: Support M32R by Takeo Takahashi |
12 | * This is based on arch/sh/boot/compressed/misc.c. | ||
13 | */ | 12 | */ |
14 | 13 | ||
15 | #include <linux/string.h> | ||
16 | |||
17 | /* | 14 | /* |
18 | * gzip declarations | 15 | * gzip declarations |
19 | */ | 16 | */ |
20 | |||
21 | #define OF(args) args | ||
22 | #define STATIC static | 17 | #define STATIC static |
23 | 18 | ||
24 | #undef memset | 19 | #undef memset |
25 | #undef memcpy | 20 | #undef memcpy |
26 | #define memzero(s, n) memset ((s), 0, (n)) | 21 | #define memzero(s, n) memset ((s), 0, (n)) |
27 | 22 | ||
28 | typedef unsigned char uch; | ||
29 | typedef unsigned short ush; | ||
30 | typedef unsigned long ulg; | ||
31 | |||
32 | #define WSIZE 0x8000 /* Window size must be at least 32k, */ | ||
33 | /* and a power of two */ | ||
34 | |||
35 | static uch *inbuf; /* input buffer */ | ||
36 | static uch window[WSIZE]; /* Sliding window buffer */ | ||
37 | |||
38 | static unsigned insize = 0; /* valid bytes in inbuf */ | ||
39 | static unsigned inptr = 0; /* index of next byte to be processed in inbuf */ | ||
40 | static unsigned outcnt = 0; /* bytes in output buffer */ | ||
41 | |||
42 | /* gzip flag byte */ | ||
43 | #define ASCII_FLAG 0x01 /* bit 0 set: file probably ASCII text */ | ||
44 | #define CONTINUATION 0x02 /* bit 1 set: continuation of multi-part gzip file */ | ||
45 | #define EXTRA_FIELD 0x04 /* bit 2 set: extra field present */ | ||
46 | #define ORIG_NAME 0x08 /* bit 3 set: original file name present */ | ||
47 | #define COMMENT 0x10 /* bit 4 set: file comment present */ | ||
48 | #define ENCRYPTED 0x20 /* bit 5 set: file is encrypted */ | ||
49 | #define RESERVED 0xC0 /* bit 6,7: reserved */ | ||
50 | |||
51 | #define get_byte() (inptr < insize ? inbuf[inptr++] : fill_inbuf()) | ||
52 | |||
53 | /* Diagnostic functions */ | ||
54 | #ifdef DEBUG | ||
55 | # define Assert(cond,msg) {if(!(cond)) error(msg);} | ||
56 | # define Trace(x) fprintf x | ||
57 | # define Tracev(x) {if (verbose) fprintf x ;} | ||
58 | # define Tracevv(x) {if (verbose>1) fprintf x ;} | ||
59 | # define Tracec(c,x) {if (verbose && (c)) fprintf x ;} | ||
60 | # define Tracecv(c,x) {if (verbose>1 && (c)) fprintf x ;} | ||
61 | #else | ||
62 | # define Assert(cond,msg) | ||
63 | # define Trace(x) | ||
64 | # define Tracev(x) | ||
65 | # define Tracevv(x) | ||
66 | # define Tracec(c,x) | ||
67 | # define Tracecv(c,x) | ||
68 | #endif | ||
69 | |||
70 | static int fill_inbuf(void); | ||
71 | static void flush_window(void); | ||
72 | static void error(char *m); | 23 | static void error(char *m); |
73 | 24 | ||
74 | static unsigned char *input_data; | ||
75 | static int input_len; | ||
76 | |||
77 | static long bytes_out = 0; | ||
78 | static uch *output_data; | ||
79 | static unsigned long output_ptr = 0; | ||
80 | |||
81 | #include "m32r_sio.c" | 25 | #include "m32r_sio.c" |
82 | 26 | ||
83 | static unsigned long free_mem_ptr; | 27 | static unsigned long free_mem_ptr; |
84 | static unsigned long free_mem_end_ptr; | 28 | static unsigned long free_mem_end_ptr; |
85 | 29 | ||
86 | #define HEAP_SIZE 0x10000 | 30 | #ifdef CONFIG_KERNEL_BZIP2 |
87 | 31 | static void *memset(void *s, int c, size_t n) | |
88 | #include "../../../../lib/inflate.c" | ||
89 | |||
90 | void* memset(void* s, int c, size_t n) | ||
91 | { | 32 | { |
92 | int i; | 33 | char *ss = s; |
93 | char *ss = (char*)s; | ||
94 | 34 | ||
95 | for (i=0;i<n;i++) ss[i] = c; | 35 | while (n--) |
36 | *ss++ = c; | ||
96 | return s; | 37 | return s; |
97 | } | 38 | } |
39 | #endif | ||
98 | 40 | ||
99 | void* memcpy(void* __dest, __const void* __src, | 41 | #ifdef CONFIG_KERNEL_GZIP |
100 | size_t __n) | 42 | #define BOOT_HEAP_SIZE 0x10000 |
101 | { | 43 | #include "../../../../lib/decompress_inflate.c" |
102 | int i; | 44 | #endif |
103 | char *d = (char *)__dest, *s = (char *)__src; | ||
104 | |||
105 | for (i=0;i<__n;i++) d[i] = s[i]; | ||
106 | return __dest; | ||
107 | } | ||
108 | |||
109 | /* =========================================================================== | ||
110 | * Fill the input buffer. This is called only when the buffer is empty | ||
111 | * and at least one byte is really needed. | ||
112 | */ | ||
113 | static int fill_inbuf(void) | ||
114 | { | ||
115 | if (insize != 0) { | ||
116 | error("ran out of input data"); | ||
117 | } | ||
118 | |||
119 | inbuf = input_data; | ||
120 | insize = input_len; | ||
121 | inptr = 1; | ||
122 | return inbuf[0]; | ||
123 | } | ||
124 | 45 | ||
125 | /* =========================================================================== | 46 | #ifdef CONFIG_KERNEL_BZIP2 |
126 | * Write the output window window[0..outcnt-1] and update crc and bytes_out. | 47 | #define BOOT_HEAP_SIZE 0x400000 |
127 | * (Used for the decompressed data only.) | 48 | #include "../../../../lib/decompress_bunzip2.c" |
128 | */ | 49 | #endif |
129 | static void flush_window(void) | ||
130 | { | ||
131 | ulg c = crc; /* temporary variable */ | ||
132 | unsigned n; | ||
133 | uch *in, *out, ch; | ||
134 | 50 | ||
135 | in = window; | 51 | #ifdef CONFIG_KERNEL_LZMA |
136 | out = &output_data[output_ptr]; | 52 | #define BOOT_HEAP_SIZE 0x10000 |
137 | for (n = 0; n < outcnt; n++) { | 53 | #include "../../../../lib/decompress_unlzma.c" |
138 | ch = *out++ = *in++; | 54 | #endif |
139 | c = crc_32_tab[((int)c ^ ch) & 0xff] ^ (c >> 8); | ||
140 | } | ||
141 | crc = c; | ||
142 | bytes_out += (ulg)outcnt; | ||
143 | output_ptr += (ulg)outcnt; | ||
144 | outcnt = 0; | ||
145 | } | ||
146 | 55 | ||
147 | static void error(char *x) | 56 | static void error(char *x) |
148 | { | 57 | { |
@@ -153,20 +62,20 @@ static void error(char *x) | |||
153 | while(1); /* Halt */ | 62 | while(1); /* Halt */ |
154 | } | 63 | } |
155 | 64 | ||
156 | /* return decompressed size */ | ||
157 | void | 65 | void |
158 | decompress_kernel(int mmu_on, unsigned char *zimage_data, | 66 | decompress_kernel(int mmu_on, unsigned char *zimage_data, |
159 | unsigned int zimage_len, unsigned long heap) | 67 | unsigned int zimage_len, unsigned long heap) |
160 | { | 68 | { |
69 | unsigned char *input_data = zimage_data; | ||
70 | int input_len = zimage_len; | ||
71 | unsigned char *output_data; | ||
72 | |||
161 | output_data = (unsigned char *)CONFIG_MEMORY_START + 0x2000 | 73 | output_data = (unsigned char *)CONFIG_MEMORY_START + 0x2000 |
162 | + (mmu_on ? 0x80000000 : 0); | 74 | + (mmu_on ? 0x80000000 : 0); |
163 | free_mem_ptr = heap; | 75 | free_mem_ptr = heap; |
164 | free_mem_end_ptr = free_mem_ptr + HEAP_SIZE; | 76 | free_mem_end_ptr = free_mem_ptr + BOOT_HEAP_SIZE; |
165 | input_data = zimage_data; | ||
166 | input_len = zimage_len; | ||
167 | 77 | ||
168 | makecrc(); | 78 | puts("\nDecompressing Linux... "); |
169 | puts("Uncompressing Linux... "); | 79 | decompress(input_data, input_len, NULL, NULL, output_data, NULL, error); |
170 | gunzip(); | 80 | puts("done.\nBooting the kernel.\n"); |
171 | puts("Ok, booting the kernel.\n"); | ||
172 | } | 81 | } |
diff --git a/arch/m32r/include/asm/cacheflush.h b/arch/m32r/include/asm/cacheflush.h index 78587c958146..8e8e04516c39 100644 --- a/arch/m32r/include/asm/cacheflush.h +++ b/arch/m32r/include/asm/cacheflush.h | |||
@@ -12,6 +12,7 @@ extern void _flush_cache_copyback_all(void); | |||
12 | #define flush_cache_dup_mm(mm) do { } while (0) | 12 | #define flush_cache_dup_mm(mm) do { } while (0) |
13 | #define flush_cache_range(vma, start, end) do { } while (0) | 13 | #define flush_cache_range(vma, start, end) do { } while (0) |
14 | #define flush_cache_page(vma, vmaddr, pfn) do { } while (0) | 14 | #define flush_cache_page(vma, vmaddr, pfn) do { } while (0) |
15 | #define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 0 | ||
15 | #define flush_dcache_page(page) do { } while (0) | 16 | #define flush_dcache_page(page) do { } while (0) |
16 | #define flush_dcache_mmap_lock(mapping) do { } while (0) | 17 | #define flush_dcache_mmap_lock(mapping) do { } while (0) |
17 | #define flush_dcache_mmap_unlock(mapping) do { } while (0) | 18 | #define flush_dcache_mmap_unlock(mapping) do { } while (0) |
@@ -33,6 +34,7 @@ extern void smp_flush_cache_all(void); | |||
33 | #define flush_cache_dup_mm(mm) do { } while (0) | 34 | #define flush_cache_dup_mm(mm) do { } while (0) |
34 | #define flush_cache_range(vma, start, end) do { } while (0) | 35 | #define flush_cache_range(vma, start, end) do { } while (0) |
35 | #define flush_cache_page(vma, vmaddr, pfn) do { } while (0) | 36 | #define flush_cache_page(vma, vmaddr, pfn) do { } while (0) |
37 | #define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 0 | ||
36 | #define flush_dcache_page(page) do { } while (0) | 38 | #define flush_dcache_page(page) do { } while (0) |
37 | #define flush_dcache_mmap_lock(mapping) do { } while (0) | 39 | #define flush_dcache_mmap_lock(mapping) do { } while (0) |
38 | #define flush_dcache_mmap_unlock(mapping) do { } while (0) | 40 | #define flush_dcache_mmap_unlock(mapping) do { } while (0) |
@@ -46,6 +48,7 @@ extern void smp_flush_cache_all(void); | |||
46 | #define flush_cache_dup_mm(mm) do { } while (0) | 48 | #define flush_cache_dup_mm(mm) do { } while (0) |
47 | #define flush_cache_range(vma, start, end) do { } while (0) | 49 | #define flush_cache_range(vma, start, end) do { } while (0) |
48 | #define flush_cache_page(vma, vmaddr, pfn) do { } while (0) | 50 | #define flush_cache_page(vma, vmaddr, pfn) do { } while (0) |
51 | #define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 0 | ||
49 | #define flush_dcache_page(page) do { } while (0) | 52 | #define flush_dcache_page(page) do { } while (0) |
50 | #define flush_dcache_mmap_lock(mapping) do { } while (0) | 53 | #define flush_dcache_mmap_lock(mapping) do { } while (0) |
51 | #define flush_dcache_mmap_unlock(mapping) do { } while (0) | 54 | #define flush_dcache_mmap_unlock(mapping) do { } while (0) |
diff --git a/arch/m32r/include/asm/elf.h b/arch/m32r/include/asm/elf.h index 0cc34c94bf2b..2f85412ef730 100644 --- a/arch/m32r/include/asm/elf.h +++ b/arch/m32r/include/asm/elf.h | |||
@@ -102,7 +102,6 @@ typedef elf_fpreg_t elf_fpregset_t; | |||
102 | */ | 102 | */ |
103 | #define ELF_PLAT_INIT(_r, load_addr) (_r)->r0 = 0 | 103 | #define ELF_PLAT_INIT(_r, load_addr) (_r)->r0 = 0 |
104 | 104 | ||
105 | #define USE_ELF_CORE_DUMP | ||
106 | #define ELF_EXEC_PAGESIZE PAGE_SIZE | 105 | #define ELF_EXEC_PAGESIZE PAGE_SIZE |
107 | 106 | ||
108 | /* | 107 | /* |
diff --git a/arch/m32r/include/asm/io.h b/arch/m32r/include/asm/io.h index d06933bd6318..4010f1fc5b65 100644 --- a/arch/m32r/include/asm/io.h +++ b/arch/m32r/include/asm/io.h | |||
@@ -162,6 +162,13 @@ static inline void _writel(unsigned long l, unsigned long addr) | |||
162 | #define __raw_writew writew | 162 | #define __raw_writew writew |
163 | #define __raw_writel writel | 163 | #define __raw_writel writel |
164 | 164 | ||
165 | #define ioread8 read | ||
166 | #define ioread16 readw | ||
167 | #define ioread32 readl | ||
168 | #define iowrite8 writeb | ||
169 | #define iowrite16 writew | ||
170 | #define iowrite32 writel | ||
171 | |||
165 | #define mmiowb() | 172 | #define mmiowb() |
166 | 173 | ||
167 | #define flush_write_buffers() do { } while (0) /* M32R_FIXME */ | 174 | #define flush_write_buffers() do { } while (0) /* M32R_FIXME */ |
diff --git a/arch/m32r/include/asm/socket.h b/arch/m32r/include/asm/socket.h index 3390a864f224..469787c30098 100644 --- a/arch/m32r/include/asm/socket.h +++ b/arch/m32r/include/asm/socket.h | |||
@@ -60,4 +60,6 @@ | |||
60 | #define SO_PROTOCOL 38 | 60 | #define SO_PROTOCOL 38 |
61 | #define SO_DOMAIN 39 | 61 | #define SO_DOMAIN 39 |
62 | 62 | ||
63 | #define SO_RXQ_OVFL 40 | ||
64 | |||
63 | #endif /* _ASM_M32R_SOCKET_H */ | 65 | #endif /* _ASM_M32R_SOCKET_H */ |
diff --git a/arch/m32r/include/asm/spinlock.h b/arch/m32r/include/asm/spinlock.h index dded923883b2..179a06489b10 100644 --- a/arch/m32r/include/asm/spinlock.h +++ b/arch/m32r/include/asm/spinlock.h | |||
@@ -24,19 +24,19 @@ | |||
24 | * We make no fairness assumptions. They have a cost. | 24 | * We make no fairness assumptions. They have a cost. |
25 | */ | 25 | */ |
26 | 26 | ||
27 | #define __raw_spin_is_locked(x) (*(volatile int *)(&(x)->slock) <= 0) | 27 | #define arch_spin_is_locked(x) (*(volatile int *)(&(x)->slock) <= 0) |
28 | #define __raw_spin_lock_flags(lock, flags) __raw_spin_lock(lock) | 28 | #define arch_spin_lock_flags(lock, flags) arch_spin_lock(lock) |
29 | #define __raw_spin_unlock_wait(x) \ | 29 | #define arch_spin_unlock_wait(x) \ |
30 | do { cpu_relax(); } while (__raw_spin_is_locked(x)) | 30 | do { cpu_relax(); } while (arch_spin_is_locked(x)) |
31 | 31 | ||
32 | /** | 32 | /** |
33 | * __raw_spin_trylock - Try spin lock and return a result | 33 | * arch_spin_trylock - Try spin lock and return a result |
34 | * @lock: Pointer to the lock variable | 34 | * @lock: Pointer to the lock variable |
35 | * | 35 | * |
36 | * __raw_spin_trylock() tries to get the lock and returns a result. | 36 | * arch_spin_trylock() tries to get the lock and returns a result. |
37 | * On the m32r, the result value is 1 (= Success) or 0 (= Failure). | 37 | * On the m32r, the result value is 1 (= Success) or 0 (= Failure). |
38 | */ | 38 | */ |
39 | static inline int __raw_spin_trylock(raw_spinlock_t *lock) | 39 | static inline int arch_spin_trylock(arch_spinlock_t *lock) |
40 | { | 40 | { |
41 | int oldval; | 41 | int oldval; |
42 | unsigned long tmp1, tmp2; | 42 | unsigned long tmp1, tmp2; |
@@ -50,7 +50,7 @@ static inline int __raw_spin_trylock(raw_spinlock_t *lock) | |||
50 | * } | 50 | * } |
51 | */ | 51 | */ |
52 | __asm__ __volatile__ ( | 52 | __asm__ __volatile__ ( |
53 | "# __raw_spin_trylock \n\t" | 53 | "# arch_spin_trylock \n\t" |
54 | "ldi %1, #0; \n\t" | 54 | "ldi %1, #0; \n\t" |
55 | "mvfc %2, psw; \n\t" | 55 | "mvfc %2, psw; \n\t" |
56 | "clrpsw #0x40 -> nop; \n\t" | 56 | "clrpsw #0x40 -> nop; \n\t" |
@@ -69,7 +69,7 @@ static inline int __raw_spin_trylock(raw_spinlock_t *lock) | |||
69 | return (oldval > 0); | 69 | return (oldval > 0); |
70 | } | 70 | } |
71 | 71 | ||
72 | static inline void __raw_spin_lock(raw_spinlock_t *lock) | 72 | static inline void arch_spin_lock(arch_spinlock_t *lock) |
73 | { | 73 | { |
74 | unsigned long tmp0, tmp1; | 74 | unsigned long tmp0, tmp1; |
75 | 75 | ||
@@ -84,7 +84,7 @@ static inline void __raw_spin_lock(raw_spinlock_t *lock) | |||
84 | * } | 84 | * } |
85 | */ | 85 | */ |
86 | __asm__ __volatile__ ( | 86 | __asm__ __volatile__ ( |
87 | "# __raw_spin_lock \n\t" | 87 | "# arch_spin_lock \n\t" |
88 | ".fillinsn \n" | 88 | ".fillinsn \n" |
89 | "1: \n\t" | 89 | "1: \n\t" |
90 | "mvfc %1, psw; \n\t" | 90 | "mvfc %1, psw; \n\t" |
@@ -111,7 +111,7 @@ static inline void __raw_spin_lock(raw_spinlock_t *lock) | |||
111 | ); | 111 | ); |
112 | } | 112 | } |
113 | 113 | ||
114 | static inline void __raw_spin_unlock(raw_spinlock_t *lock) | 114 | static inline void arch_spin_unlock(arch_spinlock_t *lock) |
115 | { | 115 | { |
116 | mb(); | 116 | mb(); |
117 | lock->slock = 1; | 117 | lock->slock = 1; |
@@ -140,15 +140,15 @@ static inline void __raw_spin_unlock(raw_spinlock_t *lock) | |||
140 | * read_can_lock - would read_trylock() succeed? | 140 | * read_can_lock - would read_trylock() succeed? |
141 | * @lock: the rwlock in question. | 141 | * @lock: the rwlock in question. |
142 | */ | 142 | */ |
143 | #define __raw_read_can_lock(x) ((int)(x)->lock > 0) | 143 | #define arch_read_can_lock(x) ((int)(x)->lock > 0) |
144 | 144 | ||
145 | /** | 145 | /** |
146 | * write_can_lock - would write_trylock() succeed? | 146 | * write_can_lock - would write_trylock() succeed? |
147 | * @lock: the rwlock in question. | 147 | * @lock: the rwlock in question. |
148 | */ | 148 | */ |
149 | #define __raw_write_can_lock(x) ((x)->lock == RW_LOCK_BIAS) | 149 | #define arch_write_can_lock(x) ((x)->lock == RW_LOCK_BIAS) |
150 | 150 | ||
151 | static inline void __raw_read_lock(raw_rwlock_t *rw) | 151 | static inline void arch_read_lock(arch_rwlock_t *rw) |
152 | { | 152 | { |
153 | unsigned long tmp0, tmp1; | 153 | unsigned long tmp0, tmp1; |
154 | 154 | ||
@@ -199,7 +199,7 @@ static inline void __raw_read_lock(raw_rwlock_t *rw) | |||
199 | ); | 199 | ); |
200 | } | 200 | } |
201 | 201 | ||
202 | static inline void __raw_write_lock(raw_rwlock_t *rw) | 202 | static inline void arch_write_lock(arch_rwlock_t *rw) |
203 | { | 203 | { |
204 | unsigned long tmp0, tmp1, tmp2; | 204 | unsigned long tmp0, tmp1, tmp2; |
205 | 205 | ||
@@ -252,7 +252,7 @@ static inline void __raw_write_lock(raw_rwlock_t *rw) | |||
252 | ); | 252 | ); |
253 | } | 253 | } |
254 | 254 | ||
255 | static inline void __raw_read_unlock(raw_rwlock_t *rw) | 255 | static inline void arch_read_unlock(arch_rwlock_t *rw) |
256 | { | 256 | { |
257 | unsigned long tmp0, tmp1; | 257 | unsigned long tmp0, tmp1; |
258 | 258 | ||
@@ -274,7 +274,7 @@ static inline void __raw_read_unlock(raw_rwlock_t *rw) | |||
274 | ); | 274 | ); |
275 | } | 275 | } |
276 | 276 | ||
277 | static inline void __raw_write_unlock(raw_rwlock_t *rw) | 277 | static inline void arch_write_unlock(arch_rwlock_t *rw) |
278 | { | 278 | { |
279 | unsigned long tmp0, tmp1, tmp2; | 279 | unsigned long tmp0, tmp1, tmp2; |
280 | 280 | ||
@@ -298,7 +298,7 @@ static inline void __raw_write_unlock(raw_rwlock_t *rw) | |||
298 | ); | 298 | ); |
299 | } | 299 | } |
300 | 300 | ||
301 | static inline int __raw_read_trylock(raw_rwlock_t *lock) | 301 | static inline int arch_read_trylock(arch_rwlock_t *lock) |
302 | { | 302 | { |
303 | atomic_t *count = (atomic_t*)lock; | 303 | atomic_t *count = (atomic_t*)lock; |
304 | if (atomic_dec_return(count) >= 0) | 304 | if (atomic_dec_return(count) >= 0) |
@@ -307,7 +307,7 @@ static inline int __raw_read_trylock(raw_rwlock_t *lock) | |||
307 | return 0; | 307 | return 0; |
308 | } | 308 | } |
309 | 309 | ||
310 | static inline int __raw_write_trylock(raw_rwlock_t *lock) | 310 | static inline int arch_write_trylock(arch_rwlock_t *lock) |
311 | { | 311 | { |
312 | atomic_t *count = (atomic_t *)lock; | 312 | atomic_t *count = (atomic_t *)lock; |
313 | if (atomic_sub_and_test(RW_LOCK_BIAS, count)) | 313 | if (atomic_sub_and_test(RW_LOCK_BIAS, count)) |
@@ -316,11 +316,11 @@ static inline int __raw_write_trylock(raw_rwlock_t *lock) | |||
316 | return 0; | 316 | return 0; |
317 | } | 317 | } |
318 | 318 | ||
319 | #define __raw_read_lock_flags(lock, flags) __raw_read_lock(lock) | 319 | #define arch_read_lock_flags(lock, flags) arch_read_lock(lock) |
320 | #define __raw_write_lock_flags(lock, flags) __raw_write_lock(lock) | 320 | #define arch_write_lock_flags(lock, flags) arch_write_lock(lock) |
321 | 321 | ||
322 | #define _raw_spin_relax(lock) cpu_relax() | 322 | #define arch_spin_relax(lock) cpu_relax() |
323 | #define _raw_read_relax(lock) cpu_relax() | 323 | #define arch_read_relax(lock) cpu_relax() |
324 | #define _raw_write_relax(lock) cpu_relax() | 324 | #define arch_write_relax(lock) cpu_relax() |
325 | 325 | ||
326 | #endif /* _ASM_M32R_SPINLOCK_H */ | 326 | #endif /* _ASM_M32R_SPINLOCK_H */ |
diff --git a/arch/m32r/include/asm/spinlock_types.h b/arch/m32r/include/asm/spinlock_types.h index 83f52105c0e4..92e27672661f 100644 --- a/arch/m32r/include/asm/spinlock_types.h +++ b/arch/m32r/include/asm/spinlock_types.h | |||
@@ -7,17 +7,17 @@ | |||
7 | 7 | ||
8 | typedef struct { | 8 | typedef struct { |
9 | volatile int slock; | 9 | volatile int slock; |
10 | } raw_spinlock_t; | 10 | } arch_spinlock_t; |
11 | 11 | ||
12 | #define __RAW_SPIN_LOCK_UNLOCKED { 1 } | 12 | #define __ARCH_SPIN_LOCK_UNLOCKED { 1 } |
13 | 13 | ||
14 | typedef struct { | 14 | typedef struct { |
15 | volatile int lock; | 15 | volatile int lock; |
16 | } raw_rwlock_t; | 16 | } arch_rwlock_t; |
17 | 17 | ||
18 | #define RW_LOCK_BIAS 0x01000000 | 18 | #define RW_LOCK_BIAS 0x01000000 |
19 | #define RW_LOCK_BIAS_STR "0x01000000" | 19 | #define RW_LOCK_BIAS_STR "0x01000000" |
20 | 20 | ||
21 | #define __RAW_RW_LOCK_UNLOCKED { RW_LOCK_BIAS } | 21 | #define __ARCH_RW_LOCK_UNLOCKED { RW_LOCK_BIAS } |
22 | 22 | ||
23 | #endif /* _ASM_M32R_SPINLOCK_TYPES_H */ | 23 | #endif /* _ASM_M32R_SPINLOCK_TYPES_H */ |
diff --git a/arch/m32r/kernel/irq.c b/arch/m32r/kernel/irq.c index 8dfd31e87c4c..3c71f776872c 100644 --- a/arch/m32r/kernel/irq.c +++ b/arch/m32r/kernel/irq.c | |||
@@ -40,7 +40,7 @@ int show_interrupts(struct seq_file *p, void *v) | |||
40 | } | 40 | } |
41 | 41 | ||
42 | if (i < NR_IRQS) { | 42 | if (i < NR_IRQS) { |
43 | spin_lock_irqsave(&irq_desc[i].lock, flags); | 43 | raw_spin_lock_irqsave(&irq_desc[i].lock, flags); |
44 | action = irq_desc[i].action; | 44 | action = irq_desc[i].action; |
45 | if (!action) | 45 | if (!action) |
46 | goto skip; | 46 | goto skip; |
@@ -59,7 +59,7 @@ int show_interrupts(struct seq_file *p, void *v) | |||
59 | 59 | ||
60 | seq_putc(p, '\n'); | 60 | seq_putc(p, '\n'); |
61 | skip: | 61 | skip: |
62 | spin_unlock_irqrestore(&irq_desc[i].lock, flags); | 62 | raw_spin_unlock_irqrestore(&irq_desc[i].lock, flags); |
63 | } | 63 | } |
64 | return 0; | 64 | return 0; |
65 | } | 65 | } |
diff --git a/arch/m32r/kernel/m32r_ksyms.c b/arch/m32r/kernel/m32r_ksyms.c index 22624b51d4d3..700570747a90 100644 --- a/arch/m32r/kernel/m32r_ksyms.c +++ b/arch/m32r/kernel/m32r_ksyms.c | |||
@@ -23,12 +23,6 @@ EXPORT_SYMBOL(__ioremap); | |||
23 | EXPORT_SYMBOL(iounmap); | 23 | EXPORT_SYMBOL(iounmap); |
24 | EXPORT_SYMBOL(kernel_thread); | 24 | EXPORT_SYMBOL(kernel_thread); |
25 | 25 | ||
26 | /* Networking helper routines. */ | ||
27 | /* Delay loops */ | ||
28 | EXPORT_SYMBOL(__udelay); | ||
29 | EXPORT_SYMBOL(__delay); | ||
30 | EXPORT_SYMBOL(__const_udelay); | ||
31 | |||
32 | EXPORT_SYMBOL(strncpy_from_user); | 26 | EXPORT_SYMBOL(strncpy_from_user); |
33 | EXPORT_SYMBOL(__strncpy_from_user); | 27 | EXPORT_SYMBOL(__strncpy_from_user); |
34 | EXPORT_SYMBOL(clear_user); | 28 | EXPORT_SYMBOL(clear_user); |
diff --git a/arch/m32r/kernel/smp.c b/arch/m32r/kernel/smp.c index 1b7598e6f6e8..31cef20b2996 100644 --- a/arch/m32r/kernel/smp.c +++ b/arch/m32r/kernel/smp.c | |||
@@ -17,6 +17,7 @@ | |||
17 | 17 | ||
18 | #include <linux/irq.h> | 18 | #include <linux/irq.h> |
19 | #include <linux/interrupt.h> | 19 | #include <linux/interrupt.h> |
20 | #include <linux/sched.h> | ||
20 | #include <linux/spinlock.h> | 21 | #include <linux/spinlock.h> |
21 | #include <linux/mm.h> | 22 | #include <linux/mm.h> |
22 | #include <linux/smp.h> | 23 | #include <linux/smp.h> |
@@ -805,7 +806,7 @@ unsigned long send_IPI_mask_phys(cpumask_t physid_mask, int ipi_num, | |||
805 | 806 | ||
806 | if (mask & ~physids_coerce(phys_cpu_present_map)) | 807 | if (mask & ~physids_coerce(phys_cpu_present_map)) |
807 | BUG(); | 808 | BUG(); |
808 | if (ipi_num >= NR_IPIS) | 809 | if (ipi_num >= NR_IPIS || ipi_num < 0) |
809 | BUG(); | 810 | BUG(); |
810 | 811 | ||
811 | mask <<= IPI_SHIFT; | 812 | mask <<= IPI_SHIFT; |
diff --git a/arch/m32r/kernel/sys_m32r.c b/arch/m32r/kernel/sys_m32r.c index 305ac852bbed..d3c865c5a6ba 100644 --- a/arch/m32r/kernel/sys_m32r.c +++ b/arch/m32r/kernel/sys_m32r.c | |||
@@ -76,30 +76,6 @@ asmlinkage int sys_tas(int __user *addr) | |||
76 | return oldval; | 76 | return oldval; |
77 | } | 77 | } |
78 | 78 | ||
79 | asmlinkage long sys_mmap2(unsigned long addr, unsigned long len, | ||
80 | unsigned long prot, unsigned long flags, | ||
81 | unsigned long fd, unsigned long pgoff) | ||
82 | { | ||
83 | int error = -EBADF; | ||
84 | struct file *file = NULL; | ||
85 | |||
86 | flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); | ||
87 | if (!(flags & MAP_ANONYMOUS)) { | ||
88 | file = fget(fd); | ||
89 | if (!file) | ||
90 | goto out; | ||
91 | } | ||
92 | |||
93 | down_write(¤t->mm->mmap_sem); | ||
94 | error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); | ||
95 | up_write(¤t->mm->mmap_sem); | ||
96 | |||
97 | if (file) | ||
98 | fput(file); | ||
99 | out: | ||
100 | return error; | ||
101 | } | ||
102 | |||
103 | /* | 79 | /* |
104 | * sys_ipc() is the de-multiplexer for the SysV IPC calls.. | 80 | * sys_ipc() is the de-multiplexer for the SysV IPC calls.. |
105 | * | 81 | * |
diff --git a/arch/m32r/kernel/syscall_table.S b/arch/m32r/kernel/syscall_table.S index aa3bf4cfab37..60536e271233 100644 --- a/arch/m32r/kernel/syscall_table.S +++ b/arch/m32r/kernel/syscall_table.S | |||
@@ -191,7 +191,7 @@ ENTRY(sys_call_table) | |||
191 | .long sys_ni_syscall /* streams2 */ | 191 | .long sys_ni_syscall /* streams2 */ |
192 | .long sys_vfork /* 190 */ | 192 | .long sys_vfork /* 190 */ |
193 | .long sys_getrlimit | 193 | .long sys_getrlimit |
194 | .long sys_mmap2 | 194 | .long sys_mmap_pgoff |
195 | .long sys_truncate64 | 195 | .long sys_truncate64 |
196 | .long sys_ftruncate64 | 196 | .long sys_ftruncate64 |
197 | .long sys_stat64 /* 195 */ | 197 | .long sys_stat64 /* 195 */ |
diff --git a/arch/m32r/kernel/time.c b/arch/m32r/kernel/time.c index ba61c4c73202..9cedcef11575 100644 --- a/arch/m32r/kernel/time.c +++ b/arch/m32r/kernel/time.c | |||
@@ -33,6 +33,15 @@ | |||
33 | 33 | ||
34 | #include <asm/hw_irq.h> | 34 | #include <asm/hw_irq.h> |
35 | 35 | ||
36 | #if defined(CONFIG_RTC_DRV_CMOS) || defined(CONFIG_RTC_DRV_CMOS_MODULE) | ||
37 | /* this needs a better home */ | ||
38 | DEFINE_SPINLOCK(rtc_lock); | ||
39 | |||
40 | #ifdef CONFIG_RTC_DRV_CMOS_MODULE | ||
41 | EXPORT_SYMBOL(rtc_lock); | ||
42 | #endif | ||
43 | #endif /* pc-style 'CMOS' RTC support */ | ||
44 | |||
36 | #ifdef CONFIG_SMP | 45 | #ifdef CONFIG_SMP |
37 | extern void smp_local_timer_interrupt(void); | 46 | extern void smp_local_timer_interrupt(void); |
38 | #endif | 47 | #endif |
@@ -66,7 +75,7 @@ u32 arch_gettimeoffset(void) | |||
66 | count = 0; | 75 | count = 0; |
67 | 76 | ||
68 | count = (latch - count) * TICK_SIZE; | 77 | count = (latch - count) * TICK_SIZE; |
69 | elapsed_time = (count + latch / 2) / latch; | 78 | elapsed_time = DIV_ROUND_CLOSEST(count, latch); |
70 | /* NOTE: LATCH is equal to the "interval" value (= reload count). */ | 79 | /* NOTE: LATCH is equal to the "interval" value (= reload count). */ |
71 | 80 | ||
72 | #else /* CONFIG_SMP */ | 81 | #else /* CONFIG_SMP */ |
@@ -84,7 +93,7 @@ u32 arch_gettimeoffset(void) | |||
84 | p_count = count; | 93 | p_count = count; |
85 | 94 | ||
86 | count = (latch - count) * TICK_SIZE; | 95 | count = (latch - count) * TICK_SIZE; |
87 | elapsed_time = (count + latch / 2) / latch; | 96 | elapsed_time = DIV_ROUND_CLOSEST(count, latch); |
88 | /* NOTE: LATCH is equal to the "interval" value (= reload count). */ | 97 | /* NOTE: LATCH is equal to the "interval" value (= reload count). */ |
89 | #endif /* CONFIG_SMP */ | 98 | #endif /* CONFIG_SMP */ |
90 | #elif defined(CONFIG_CHIP_M32310) | 99 | #elif defined(CONFIG_CHIP_M32310) |
@@ -202,7 +211,7 @@ void __init time_init(void) | |||
202 | 211 | ||
203 | bus_clock = boot_cpu_data.bus_clock; | 212 | bus_clock = boot_cpu_data.bus_clock; |
204 | divide = boot_cpu_data.timer_divide; | 213 | divide = boot_cpu_data.timer_divide; |
205 | latch = (bus_clock/divide + HZ / 2) / HZ; | 214 | latch = DIV_ROUND_CLOSEST(bus_clock/divide, HZ); |
206 | 215 | ||
207 | printk("Timer start : latch = %ld\n", latch); | 216 | printk("Timer start : latch = %ld\n", latch); |
208 | 217 | ||
diff --git a/arch/m32r/kernel/traps.c b/arch/m32r/kernel/traps.c index 03b14e55cd89..fbd109031df3 100644 --- a/arch/m32r/kernel/traps.c +++ b/arch/m32r/kernel/traps.c | |||
@@ -104,8 +104,8 @@ static void set_eit_vector_entries(void) | |||
104 | eit_vector[186] = (unsigned long)smp_call_function_interrupt; | 104 | eit_vector[186] = (unsigned long)smp_call_function_interrupt; |
105 | eit_vector[187] = (unsigned long)smp_ipi_timer_interrupt; | 105 | eit_vector[187] = (unsigned long)smp_ipi_timer_interrupt; |
106 | eit_vector[188] = (unsigned long)smp_flush_cache_all_interrupt; | 106 | eit_vector[188] = (unsigned long)smp_flush_cache_all_interrupt; |
107 | eit_vector[189] = (unsigned long)smp_call_function_single_interrupt; | 107 | eit_vector[189] = 0; /* CPU_BOOT_IPI */ |
108 | eit_vector[190] = 0; | 108 | eit_vector[190] = (unsigned long)smp_call_function_single_interrupt; |
109 | eit_vector[191] = 0; | 109 | eit_vector[191] = 0; |
110 | #endif | 110 | #endif |
111 | _flush_cache_copyback_all(); | 111 | _flush_cache_copyback_all(); |
diff --git a/arch/m32r/kernel/vmlinux.lds.S b/arch/m32r/kernel/vmlinux.lds.S index 8ceb6181d805..7da94eaa082b 100644 --- a/arch/m32r/kernel/vmlinux.lds.S +++ b/arch/m32r/kernel/vmlinux.lds.S | |||
@@ -42,6 +42,8 @@ SECTIONS | |||
42 | _etext = .; /* End of text section */ | 42 | _etext = .; /* End of text section */ |
43 | 43 | ||
44 | EXCEPTION_TABLE(16) | 44 | EXCEPTION_TABLE(16) |
45 | NOTES | ||
46 | |||
45 | RODATA | 47 | RODATA |
46 | RW_DATA_SECTION(32, PAGE_SIZE, THREAD_SIZE) | 48 | RW_DATA_SECTION(32, PAGE_SIZE, THREAD_SIZE) |
47 | _edata = .; /* End of data section */ | 49 | _edata = .; /* End of data section */ |
diff --git a/arch/m32r/lib/delay.c b/arch/m32r/lib/delay.c index ced549be80f5..940f4837e42b 100644 --- a/arch/m32r/lib/delay.c +++ b/arch/m32r/lib/delay.c | |||
@@ -122,4 +122,8 @@ void __ndelay(unsigned long nsecs) | |||
122 | { | 122 | { |
123 | __const_udelay(nsecs * 0x00005); /* 2**32 / 1000000000 (rounded up) */ | 123 | __const_udelay(nsecs * 0x00005); /* 2**32 / 1000000000 (rounded up) */ |
124 | } | 124 | } |
125 | |||
126 | EXPORT_SYMBOL(__delay); | ||
127 | EXPORT_SYMBOL(__const_udelay); | ||
128 | EXPORT_SYMBOL(__udelay); | ||
125 | EXPORT_SYMBOL(__ndelay); | 129 | EXPORT_SYMBOL(__ndelay); |
diff --git a/arch/m32r/mm/discontig.c b/arch/m32r/mm/discontig.c index b7a78ad429b7..5d2858f6eede 100644 --- a/arch/m32r/mm/discontig.c +++ b/arch/m32r/mm/discontig.c | |||
@@ -32,6 +32,9 @@ typedef struct { | |||
32 | } mem_prof_t; | 32 | } mem_prof_t; |
33 | static mem_prof_t mem_prof[MAX_NUMNODES]; | 33 | static mem_prof_t mem_prof[MAX_NUMNODES]; |
34 | 34 | ||
35 | extern unsigned long memory_start; | ||
36 | extern unsigned long memory_end; | ||
37 | |||
35 | static void __init mem_prof_init(void) | 38 | static void __init mem_prof_init(void) |
36 | { | 39 | { |
37 | unsigned long start_pfn, holes, free_pfn; | 40 | unsigned long start_pfn, holes, free_pfn; |
@@ -42,7 +45,7 @@ static void __init mem_prof_init(void) | |||
42 | /* Node#0 SDRAM */ | 45 | /* Node#0 SDRAM */ |
43 | mp = &mem_prof[0]; | 46 | mp = &mem_prof[0]; |
44 | mp->start_pfn = PFN_UP(CONFIG_MEMORY_START); | 47 | mp->start_pfn = PFN_UP(CONFIG_MEMORY_START); |
45 | mp->pages = PFN_DOWN(CONFIG_MEMORY_SIZE); | 48 | mp->pages = PFN_DOWN(memory_end - memory_start); |
46 | mp->holes = 0; | 49 | mp->holes = 0; |
47 | mp->free_pfn = PFN_UP(__pa(_end)); | 50 | mp->free_pfn = PFN_UP(__pa(_end)); |
48 | 51 | ||
diff --git a/arch/m32r/mm/mmu.S b/arch/m32r/mm/mmu.S index 49a6d16a3d58..e9491a5ae827 100644 --- a/arch/m32r/mm/mmu.S +++ b/arch/m32r/mm/mmu.S | |||
@@ -150,9 +150,13 @@ ENTRY(tme_handler) | |||
150 | 150 | ||
151 | ; pmd = pmd_offset(pgd, address); | 151 | ; pmd = pmd_offset(pgd, address); |
152 | ld r3, @r3 ; r3: pmd data | 152 | ld r3, @r3 ; r3: pmd data |
153 | ldi r2, #-4096 | ||
154 | beqz r3, 3f ; pmd_none(*pmd) ? | 153 | beqz r3, 3f ; pmd_none(*pmd) ? |
155 | 154 | ||
155 | and3 r2, r3, #0xfff | ||
156 | add3 r2, r2, #-355 ; _KERNPG_TABLE(=0x163) | ||
157 | bnez r2, 3f ; pmd_bad(*pmd) ? | ||
158 | ldi r2, #-4096 | ||
159 | |||
156 | ; pte = pte_offset(pmd, address); | 160 | ; pte = pte_offset(pmd, address); |
157 | and r2, r3 ; r2: pte base addr | 161 | and r2, r3 ; r2: pte base addr |
158 | srl3 r3, r0, #10 | 162 | srl3 r3, r0, #10 |
@@ -263,9 +267,9 @@ ENTRY(tme_handler) | |||
263 | ld r1, @r3 ; r1: pmd | 267 | ld r1, @r3 ; r1: pmd |
264 | beqz r1, 3f ; pmd_none(*pmd) ? | 268 | beqz r1, 3f ; pmd_none(*pmd) ? |
265 | ; | 269 | ; |
266 | and3 r1, r1, #0xeff | 270 | and3 r1, r1, #0x3ff |
267 | ldi r4, #611 ; _KERNPG_TABLE(=611) | 271 | ldi r4, #0x163 ; _KERNPG_TABLE(=0x163) |
268 | bne r1, r4, 3f ; !pmd_bad(*pmd) ? | 272 | bne r1, r4, 3f ; pmd_bad(*pmd) ? |
269 | 273 | ||
270 | .fillinsn | 274 | .fillinsn |
271 | 4: | 275 | 4: |