Commit 0d9ccfe1b5321b8d27117817b9ae4d3288c8b015
Exists in
master
and in
7 other branches
Merge branch 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus
* 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus: MIPS: Loongson: Switch from flatmem to sparsemem MIPS: Loongson: Disallow 4kB pages MIPS: Add missing definition for MADV_HWPOISON. MIPS: Fix build error if __xchg() is not getting inlined. MIPS: IP22/IP28 Disable early printk to fix boot problems on some systems.
Showing 3 changed files Side-by-side Diff
arch/mips/Kconfig
... | ... | @@ -358,7 +358,14 @@ |
358 | 358 | select SWAP_IO_SPACE |
359 | 359 | select SYS_HAS_CPU_R4X00 |
360 | 360 | select SYS_HAS_CPU_R5000 |
361 | - select SYS_HAS_EARLY_PRINTK | |
361 | + # | |
362 | + # Disable EARLY_PRINTK for now since it leads to overwritten prom | |
363 | + # memory during early boot on some machines. | |
364 | + # | |
365 | + # See http://www.linux-mips.org/cgi-bin/mesg.cgi?a=linux-mips&i=20091119164009.GA15038%40deprecation.cyrius.com | |
366 | + # for a more details discussion | |
367 | + # | |
368 | + # select SYS_HAS_EARLY_PRINTK | |
362 | 369 | select SYS_SUPPORTS_32BIT_KERNEL |
363 | 370 | select SYS_SUPPORTS_64BIT_KERNEL |
364 | 371 | select SYS_SUPPORTS_BIG_ENDIAN |
... | ... | @@ -410,7 +417,14 @@ |
410 | 417 | select SGI_HAS_ZILOG |
411 | 418 | select SWAP_IO_SPACE |
412 | 419 | select SYS_HAS_CPU_R10000 |
413 | - select SYS_HAS_EARLY_PRINTK | |
420 | + # | |
421 | + # Disable EARLY_PRINTK for now since it leads to overwritten prom | |
422 | + # memory during early boot on some machines. | |
423 | + # | |
424 | + # See http://www.linux-mips.org/cgi-bin/mesg.cgi?a=linux-mips&i=20091119164009.GA15038%40deprecation.cyrius.com | |
425 | + # for a more details discussion | |
426 | + # | |
427 | + # select SYS_HAS_EARLY_PRINTK | |
414 | 428 | select SYS_SUPPORTS_64BIT_KERNEL |
415 | 429 | select SYS_SUPPORTS_BIG_ENDIAN |
416 | 430 | help |
... | ... | @@ -1439,6 +1453,7 @@ |
1439 | 1453 | |
1440 | 1454 | config PAGE_SIZE_4KB |
1441 | 1455 | bool "4kB" |
1456 | + depends on !CPU_LOONGSON2 | |
1442 | 1457 | help |
1443 | 1458 | This option select the standard 4kB Linux page size. On some |
1444 | 1459 | R3000-family processors this is the only available page size. Using |
... | ... | @@ -1763,7 +1778,7 @@ |
1763 | 1778 | |
1764 | 1779 | config ARCH_FLATMEM_ENABLE |
1765 | 1780 | def_bool y |
1766 | - depends on !NUMA | |
1781 | + depends on !NUMA && !CPU_LOONGSON2 | |
1767 | 1782 | |
1768 | 1783 | config ARCH_DISCONTIGMEM_ENABLE |
1769 | 1784 | bool |
arch/mips/include/asm/mman.h
arch/mips/include/asm/system.h
... | ... | @@ -12,6 +12,7 @@ |
12 | 12 | #ifndef _ASM_SYSTEM_H |
13 | 13 | #define _ASM_SYSTEM_H |
14 | 14 | |
15 | +#include <linux/kernel.h> | |
15 | 16 | #include <linux/types.h> |
16 | 17 | #include <linux/irqflags.h> |
17 | 18 | |
... | ... | @@ -193,10 +194,6 @@ |
193 | 194 | #define __xchg_u64 __xchg_u64_unsupported_on_32bit_kernels |
194 | 195 | #endif |
195 | 196 | |
196 | -/* This function doesn't exist, so you'll get a linker error | |
197 | - if something tries to do an invalid xchg(). */ | |
198 | -extern void __xchg_called_with_bad_pointer(void); | |
199 | - | |
200 | 197 | static inline unsigned long __xchg(unsigned long x, volatile void * ptr, int size) |
201 | 198 | { |
202 | 199 | switch (size) { |
203 | 200 | |
... | ... | @@ -205,11 +202,17 @@ |
205 | 202 | case 8: |
206 | 203 | return __xchg_u64(ptr, x); |
207 | 204 | } |
208 | - __xchg_called_with_bad_pointer(); | |
205 | + | |
209 | 206 | return x; |
210 | 207 | } |
211 | 208 | |
212 | -#define xchg(ptr, x) ((__typeof__(*(ptr)))__xchg((unsigned long)(x), (ptr), sizeof(*(ptr)))) | |
209 | +#define xchg(ptr, x) \ | |
210 | +({ \ | |
211 | + BUILD_BUG_ON(sizeof(*(ptr)) & ~0xc); \ | |
212 | + \ | |
213 | + ((__typeof__(*(ptr))) \ | |
214 | + __xchg((unsigned long)(x), (ptr), sizeof(*(ptr)))); \ | |
215 | +}) | |
213 | 216 | |
214 | 217 | extern void set_handler(unsigned long offset, void *addr, unsigned long len); |
215 | 218 | extern void set_uncached_handler(unsigned long offset, void *addr, unsigned long len); |