diff options
| author | Ingo Molnar <mingo@elte.hu> | 2008-07-13 02:50:13 -0400 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2008-07-13 02:50:13 -0400 |
| commit | 54ef76f37bcccf8c16fbaaed13c3c40825195958 (patch) | |
| tree | 59afdb95e68f2fbac2550aa42135921086649c38 /arch | |
| parent | 032f82786f9be4635acaa5f77feca175a4ac5fe1 (diff) | |
| parent | 9df2fe986770bc4c76e8fe72c20b71268eec39a7 (diff) | |
Merge branch 'linus' into sched/devel
Diffstat (limited to 'arch')
| -rw-r--r-- | arch/mips/mm/c-r3k.c | 6 | ||||
| -rw-r--r-- | arch/mips/mm/page.c | 61 | ||||
| -rw-r--r-- | arch/mips/mm/sc-rm7k.c | 4 | ||||
| -rw-r--r-- | arch/powerpc/kernel/legacy_serial.c | 5 | ||||
| -rw-r--r-- | arch/powerpc/kernel/of_platform.c | 2 | ||||
| -rw-r--r-- | arch/um/Makefile | 1 | ||||
| -rw-r--r-- | arch/um/Makefile-i386 | 7 | ||||
| -rw-r--r-- | arch/um/Makefile-x86_64 | 3 | ||||
| -rw-r--r-- | arch/x86/kernel/.gitignore | 1 | ||||
| -rw-r--r-- | arch/x86/mm/ioremap.c | 25 | ||||
| -rw-r--r-- | arch/x86/pci/common.c | 8 |
11 files changed, 81 insertions, 42 deletions
diff --git a/arch/mips/mm/c-r3k.c b/arch/mips/mm/c-r3k.c index 76935e320214..27a5b466c85c 100644 --- a/arch/mips/mm/c-r3k.c +++ b/arch/mips/mm/c-r3k.c | |||
| @@ -26,7 +26,7 @@ | |||
| 26 | static unsigned long icache_size, dcache_size; /* Size in bytes */ | 26 | static unsigned long icache_size, dcache_size; /* Size in bytes */ |
| 27 | static unsigned long icache_lsize, dcache_lsize; /* Size in bytes */ | 27 | static unsigned long icache_lsize, dcache_lsize; /* Size in bytes */ |
| 28 | 28 | ||
| 29 | unsigned long __init r3k_cache_size(unsigned long ca_flags) | 29 | unsigned long __cpuinit r3k_cache_size(unsigned long ca_flags) |
| 30 | { | 30 | { |
| 31 | unsigned long flags, status, dummy, size; | 31 | unsigned long flags, status, dummy, size; |
| 32 | volatile unsigned long *p; | 32 | volatile unsigned long *p; |
| @@ -61,7 +61,7 @@ unsigned long __init r3k_cache_size(unsigned long ca_flags) | |||
| 61 | return size * sizeof(*p); | 61 | return size * sizeof(*p); |
| 62 | } | 62 | } |
| 63 | 63 | ||
| 64 | unsigned long __init r3k_cache_lsize(unsigned long ca_flags) | 64 | unsigned long __cpuinit r3k_cache_lsize(unsigned long ca_flags) |
| 65 | { | 65 | { |
| 66 | unsigned long flags, status, lsize, i; | 66 | unsigned long flags, status, lsize, i; |
| 67 | volatile unsigned long *p; | 67 | volatile unsigned long *p; |
| @@ -90,7 +90,7 @@ unsigned long __init r3k_cache_lsize(unsigned long ca_flags) | |||
| 90 | return lsize * sizeof(*p); | 90 | return lsize * sizeof(*p); |
| 91 | } | 91 | } |
| 92 | 92 | ||
| 93 | static void __init r3k_probe_cache(void) | 93 | static void __cpuinit r3k_probe_cache(void) |
| 94 | { | 94 | { |
| 95 | dcache_size = r3k_cache_size(ST0_ISC); | 95 | dcache_size = r3k_cache_size(ST0_ISC); |
| 96 | if (dcache_size) | 96 | if (dcache_size) |
diff --git a/arch/mips/mm/page.c b/arch/mips/mm/page.c index 1edf0cbbeede..1417c6494858 100644 --- a/arch/mips/mm/page.c +++ b/arch/mips/mm/page.c | |||
| @@ -235,13 +235,12 @@ static void __cpuinit set_prefetch_parameters(void) | |||
| 235 | } | 235 | } |
| 236 | /* | 236 | /* |
| 237 | * Too much unrolling will overflow the available space in | 237 | * Too much unrolling will overflow the available space in |
| 238 | * clear_space_array / copy_page_array. 8 words sounds generous, | 238 | * clear_space_array / copy_page_array. |
| 239 | * but a R4000 with 128 byte L2 line length can exceed even that. | ||
| 240 | */ | 239 | */ |
| 241 | half_clear_loop_size = min(8 * clear_word_size, | 240 | half_clear_loop_size = min(16 * clear_word_size, |
| 242 | max(cache_line_size >> 1, | 241 | max(cache_line_size >> 1, |
| 243 | 4 * clear_word_size)); | 242 | 4 * clear_word_size)); |
| 244 | half_copy_loop_size = min(8 * copy_word_size, | 243 | half_copy_loop_size = min(16 * copy_word_size, |
| 245 | max(cache_line_size >> 1, | 244 | max(cache_line_size >> 1, |
| 246 | 4 * copy_word_size)); | 245 | 4 * copy_word_size)); |
| 247 | } | 246 | } |
| @@ -263,21 +262,23 @@ static inline void __cpuinit build_clear_pref(u32 **buf, int off) | |||
| 263 | if (pref_bias_clear_store) { | 262 | if (pref_bias_clear_store) { |
| 264 | uasm_i_pref(buf, pref_dst_mode, pref_bias_clear_store + off, | 263 | uasm_i_pref(buf, pref_dst_mode, pref_bias_clear_store + off, |
| 265 | A0); | 264 | A0); |
| 266 | } else if (cpu_has_cache_cdex_s) { | 265 | } else if (cache_line_size == (half_clear_loop_size << 1)) { |
| 267 | uasm_i_cache(buf, Create_Dirty_Excl_SD, off, A0); | 266 | if (cpu_has_cache_cdex_s) { |
| 268 | } else if (cpu_has_cache_cdex_p) { | 267 | uasm_i_cache(buf, Create_Dirty_Excl_SD, off, A0); |
| 269 | if (R4600_V1_HIT_CACHEOP_WAR && cpu_is_r4600_v1_x()) { | 268 | } else if (cpu_has_cache_cdex_p) { |
| 270 | uasm_i_nop(buf); | 269 | if (R4600_V1_HIT_CACHEOP_WAR && cpu_is_r4600_v1_x()) { |
| 271 | uasm_i_nop(buf); | 270 | uasm_i_nop(buf); |
| 272 | uasm_i_nop(buf); | 271 | uasm_i_nop(buf); |
| 273 | uasm_i_nop(buf); | 272 | uasm_i_nop(buf); |
| 274 | } | 273 | uasm_i_nop(buf); |
| 274 | } | ||
| 275 | 275 | ||
| 276 | if (R4600_V2_HIT_CACHEOP_WAR && cpu_is_r4600_v2_x()) | 276 | if (R4600_V2_HIT_CACHEOP_WAR && cpu_is_r4600_v2_x()) |
| 277 | uasm_i_lw(buf, ZERO, ZERO, AT); | 277 | uasm_i_lw(buf, ZERO, ZERO, AT); |
| 278 | 278 | ||
| 279 | uasm_i_cache(buf, Create_Dirty_Excl_D, off, A0); | 279 | uasm_i_cache(buf, Create_Dirty_Excl_D, off, A0); |
| 280 | } | 280 | } |
| 281 | } | ||
| 281 | } | 282 | } |
| 282 | 283 | ||
| 283 | void __cpuinit build_clear_page(void) | 284 | void __cpuinit build_clear_page(void) |
| @@ -403,20 +404,22 @@ static inline void build_copy_store_pref(u32 **buf, int off) | |||
| 403 | if (pref_bias_copy_store) { | 404 | if (pref_bias_copy_store) { |
| 404 | uasm_i_pref(buf, pref_dst_mode, pref_bias_copy_store + off, | 405 | uasm_i_pref(buf, pref_dst_mode, pref_bias_copy_store + off, |
| 405 | A0); | 406 | A0); |
| 406 | } else if (cpu_has_cache_cdex_s) { | 407 | } else if (cache_line_size == (half_copy_loop_size << 1)) { |
| 407 | uasm_i_cache(buf, Create_Dirty_Excl_SD, off, A0); | 408 | if (cpu_has_cache_cdex_s) { |
| 408 | } else if (cpu_has_cache_cdex_p) { | 409 | uasm_i_cache(buf, Create_Dirty_Excl_SD, off, A0); |
| 409 | if (R4600_V1_HIT_CACHEOP_WAR && cpu_is_r4600_v1_x()) { | 410 | } else if (cpu_has_cache_cdex_p) { |
| 410 | uasm_i_nop(buf); | 411 | if (R4600_V1_HIT_CACHEOP_WAR && cpu_is_r4600_v1_x()) { |
| 411 | uasm_i_nop(buf); | 412 | uasm_i_nop(buf); |
| 412 | uasm_i_nop(buf); | 413 | uasm_i_nop(buf); |
| 413 | uasm_i_nop(buf); | 414 | uasm_i_nop(buf); |
| 414 | } | 415 | uasm_i_nop(buf); |
| 416 | } | ||
| 415 | 417 | ||
| 416 | if (R4600_V2_HIT_CACHEOP_WAR && cpu_is_r4600_v2_x()) | 418 | if (R4600_V2_HIT_CACHEOP_WAR && cpu_is_r4600_v2_x()) |
| 417 | uasm_i_lw(buf, ZERO, ZERO, AT); | 419 | uasm_i_lw(buf, ZERO, ZERO, AT); |
| 418 | 420 | ||
| 419 | uasm_i_cache(buf, Create_Dirty_Excl_D, off, A0); | 421 | uasm_i_cache(buf, Create_Dirty_Excl_D, off, A0); |
| 422 | } | ||
| 420 | } | 423 | } |
| 421 | } | 424 | } |
| 422 | 425 | ||
diff --git a/arch/mips/mm/sc-rm7k.c b/arch/mips/mm/sc-rm7k.c index fc227f3b1199..e3abfb2d7e86 100644 --- a/arch/mips/mm/sc-rm7k.c +++ b/arch/mips/mm/sc-rm7k.c | |||
| @@ -86,7 +86,7 @@ static void rm7k_sc_inv(unsigned long addr, unsigned long size) | |||
| 86 | /* | 86 | /* |
| 87 | * This function is executed in uncached address space. | 87 | * This function is executed in uncached address space. |
| 88 | */ | 88 | */ |
| 89 | static __init void __rm7k_sc_enable(void) | 89 | static __cpuinit void __rm7k_sc_enable(void) |
| 90 | { | 90 | { |
| 91 | int i; | 91 | int i; |
| 92 | 92 | ||
| @@ -107,7 +107,7 @@ static __init void __rm7k_sc_enable(void) | |||
| 107 | } | 107 | } |
| 108 | } | 108 | } |
| 109 | 109 | ||
| 110 | static __init void rm7k_sc_enable(void) | 110 | static __cpuinit void rm7k_sc_enable(void) |
| 111 | { | 111 | { |
| 112 | if (read_c0_config() & RM7K_CONF_SE) | 112 | if (read_c0_config() & RM7K_CONF_SE) |
| 113 | return; | 113 | return; |
diff --git a/arch/powerpc/kernel/legacy_serial.c b/arch/powerpc/kernel/legacy_serial.c index cf37f5ca4b71..4d96e1db55ee 100644 --- a/arch/powerpc/kernel/legacy_serial.c +++ b/arch/powerpc/kernel/legacy_serial.c | |||
| @@ -33,13 +33,14 @@ static struct legacy_serial_info { | |||
| 33 | phys_addr_t taddr; | 33 | phys_addr_t taddr; |
| 34 | } legacy_serial_infos[MAX_LEGACY_SERIAL_PORTS]; | 34 | } legacy_serial_infos[MAX_LEGACY_SERIAL_PORTS]; |
| 35 | 35 | ||
| 36 | static struct __initdata of_device_id parents[] = { | 36 | static struct __initdata of_device_id legacy_serial_parents[] = { |
| 37 | {.type = "soc",}, | 37 | {.type = "soc",}, |
| 38 | {.type = "tsi-bridge",}, | 38 | {.type = "tsi-bridge",}, |
| 39 | {.type = "opb", }, | 39 | {.type = "opb", }, |
| 40 | {.compatible = "ibm,opb",}, | 40 | {.compatible = "ibm,opb",}, |
| 41 | {.compatible = "simple-bus",}, | 41 | {.compatible = "simple-bus",}, |
| 42 | {.compatible = "wrs,epld-localbus",}, | 42 | {.compatible = "wrs,epld-localbus",}, |
| 43 | {}, | ||
| 43 | }; | 44 | }; |
| 44 | 45 | ||
| 45 | static unsigned int legacy_serial_count; | 46 | static unsigned int legacy_serial_count; |
| @@ -327,7 +328,7 @@ void __init find_legacy_serial_ports(void) | |||
| 327 | struct device_node *parent = of_get_parent(np); | 328 | struct device_node *parent = of_get_parent(np); |
| 328 | if (!parent) | 329 | if (!parent) |
| 329 | continue; | 330 | continue; |
| 330 | if (of_match_node(parents, parent) != NULL) { | 331 | if (of_match_node(legacy_serial_parents, parent) != NULL) { |
| 331 | index = add_legacy_soc_port(np, np); | 332 | index = add_legacy_soc_port(np, np); |
| 332 | if (index >= 0 && np == stdout) | 333 | if (index >= 0 && np == stdout) |
| 333 | legacy_serial_console = index; | 334 | legacy_serial_console = index; |
diff --git a/arch/powerpc/kernel/of_platform.c b/arch/powerpc/kernel/of_platform.c index e79ad8afda07..3f37a6e62771 100644 --- a/arch/powerpc/kernel/of_platform.c +++ b/arch/powerpc/kernel/of_platform.c | |||
| @@ -76,6 +76,8 @@ struct of_device* of_platform_device_create(struct device_node *np, | |||
| 76 | return NULL; | 76 | return NULL; |
| 77 | 77 | ||
| 78 | dev->dma_mask = 0xffffffffUL; | 78 | dev->dma_mask = 0xffffffffUL; |
| 79 | dev->dev.coherent_dma_mask = DMA_32BIT_MASK; | ||
| 80 | |||
| 79 | dev->dev.bus = &of_platform_bus_type; | 81 | dev->dev.bus = &of_platform_bus_type; |
| 80 | 82 | ||
| 81 | /* We do not fill the DMA ops for platform devices by default. | 83 | /* We do not fill the DMA ops for platform devices by default. |
diff --git a/arch/um/Makefile b/arch/um/Makefile index dbeab15e7bb7..ca40397017b9 100644 --- a/arch/um/Makefile +++ b/arch/um/Makefile | |||
| @@ -77,7 +77,6 @@ include $(srctree)/$(ARCH_DIR)/Makefile-os-$(OS) | |||
| 77 | KERNEL_DEFINES = $(strip -Derrno=kernel_errno -Dsigprocmask=kernel_sigprocmask \ | 77 | KERNEL_DEFINES = $(strip -Derrno=kernel_errno -Dsigprocmask=kernel_sigprocmask \ |
| 78 | -Dmktime=kernel_mktime $(ARCH_KERNEL_DEFINES)) | 78 | -Dmktime=kernel_mktime $(ARCH_KERNEL_DEFINES)) |
| 79 | KBUILD_CFLAGS += $(KERNEL_DEFINES) | 79 | KBUILD_CFLAGS += $(KERNEL_DEFINES) |
| 80 | KBUILD_CFLAGS += $(call cc-option,-fno-unit-at-a-time,) | ||
| 81 | 80 | ||
| 82 | PHONY += linux | 81 | PHONY += linux |
| 83 | 82 | ||
diff --git a/arch/um/Makefile-i386 b/arch/um/Makefile-i386 index 561e373bd850..302cbe504543 100644 --- a/arch/um/Makefile-i386 +++ b/arch/um/Makefile-i386 | |||
| @@ -32,4 +32,11 @@ cflags-y += $(call cc-option,-mpreferred-stack-boundary=2) | |||
| 32 | # an unresolved reference. | 32 | # an unresolved reference. |
| 33 | cflags-y += -ffreestanding | 33 | cflags-y += -ffreestanding |
| 34 | 34 | ||
| 35 | # Disable unit-at-a-time mode on pre-gcc-4.0 compilers, it makes gcc use | ||
| 36 | # a lot more stack due to the lack of sharing of stacklots. Also, gcc | ||
| 37 | # 4.3.0 needs -funit-at-a-time for extern inline functions. | ||
| 38 | KBUILD_CFLAGS += $(shell if [ $(call cc-version) -lt 0400 ] ; then \ | ||
| 39 | echo $(call cc-option,-fno-unit-at-a-time); \ | ||
| 40 | else echo $(call cc-option,-funit-at-a-time); fi ;) | ||
| 41 | |||
| 35 | KBUILD_CFLAGS += $(cflags-y) | 42 | KBUILD_CFLAGS += $(cflags-y) |
diff --git a/arch/um/Makefile-x86_64 b/arch/um/Makefile-x86_64 index 8ed362f93582..a9cd7e77a7ab 100644 --- a/arch/um/Makefile-x86_64 +++ b/arch/um/Makefile-x86_64 | |||
| @@ -21,3 +21,6 @@ HEADER_ARCH := x86 | |||
| 21 | 21 | ||
| 22 | LINK-$(CONFIG_LD_SCRIPT_DYN) += -Wl,-rpath,/lib64 | 22 | LINK-$(CONFIG_LD_SCRIPT_DYN) += -Wl,-rpath,/lib64 |
| 23 | LINK-y += -m64 | 23 | LINK-y += -m64 |
| 24 | |||
| 25 | # Do unit-at-a-time unconditionally on x86_64, following the host | ||
| 26 | KBUILD_CFLAGS += $(call cc-option,-funit-at-a-time) | ||
diff --git a/arch/x86/kernel/.gitignore b/arch/x86/kernel/.gitignore index 4ea38a39aed4..08f4fd731469 100644 --- a/arch/x86/kernel/.gitignore +++ b/arch/x86/kernel/.gitignore | |||
| @@ -1,2 +1,3 @@ | |||
| 1 | vsyscall.lds | 1 | vsyscall.lds |
| 2 | vsyscall_32.lds | 2 | vsyscall_32.lds |
| 3 | vmlinux.lds | ||
diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c index 2b2bb3f9b683..d1b867101e5f 100644 --- a/arch/x86/mm/ioremap.c +++ b/arch/x86/mm/ioremap.c | |||
| @@ -300,6 +300,29 @@ void __iomem *ioremap_cache(resource_size_t phys_addr, unsigned long size) | |||
| 300 | } | 300 | } |
| 301 | EXPORT_SYMBOL(ioremap_cache); | 301 | EXPORT_SYMBOL(ioremap_cache); |
| 302 | 302 | ||
| 303 | static void __iomem *ioremap_default(resource_size_t phys_addr, | ||
| 304 | unsigned long size) | ||
| 305 | { | ||
| 306 | unsigned long flags; | ||
| 307 | void *ret; | ||
| 308 | int err; | ||
| 309 | |||
| 310 | /* | ||
| 311 | * - WB for WB-able memory and no other conflicting mappings | ||
| 312 | * - UC_MINUS for non-WB-able memory with no other conflicting mappings | ||
| 313 | * - Inherit from confliting mappings otherwise | ||
| 314 | */ | ||
| 315 | err = reserve_memtype(phys_addr, phys_addr + size, -1, &flags); | ||
| 316 | if (err < 0) | ||
| 317 | return NULL; | ||
| 318 | |||
| 319 | ret = (void *) __ioremap_caller(phys_addr, size, flags, | ||
| 320 | __builtin_return_address(0)); | ||
| 321 | |||
| 322 | free_memtype(phys_addr, phys_addr + size); | ||
| 323 | return (void __iomem *)ret; | ||
| 324 | } | ||
| 325 | |||
| 303 | /** | 326 | /** |
| 304 | * iounmap - Free a IO remapping | 327 | * iounmap - Free a IO remapping |
| 305 | * @addr: virtual address from ioremap_* | 328 | * @addr: virtual address from ioremap_* |
| @@ -365,7 +388,7 @@ void *xlate_dev_mem_ptr(unsigned long phys) | |||
| 365 | if (page_is_ram(start >> PAGE_SHIFT)) | 388 | if (page_is_ram(start >> PAGE_SHIFT)) |
| 366 | return __va(phys); | 389 | return __va(phys); |
| 367 | 390 | ||
| 368 | addr = (void *)ioremap(start, PAGE_SIZE); | 391 | addr = (void *)ioremap_default(start, PAGE_SIZE); |
| 369 | if (addr) | 392 | if (addr) |
| 370 | addr = (void *)((unsigned long)addr | (phys & ~PAGE_MASK)); | 393 | addr = (void *)((unsigned long)addr | (phys & ~PAGE_MASK)); |
| 371 | 394 | ||
diff --git a/arch/x86/pci/common.c b/arch/x86/pci/common.c index 940185ecaeda..6e64aaf00d1d 100644 --- a/arch/x86/pci/common.c +++ b/arch/x86/pci/common.c | |||
| @@ -328,18 +328,18 @@ static struct dmi_system_id __devinitdata pciprobe_dmi_table[] = { | |||
| 328 | #endif | 328 | #endif |
| 329 | { | 329 | { |
| 330 | .callback = set_bf_sort, | 330 | .callback = set_bf_sort, |
| 331 | .ident = "HP ProLiant DL360", | 331 | .ident = "HP ProLiant DL385 G2", |
| 332 | .matches = { | 332 | .matches = { |
| 333 | DMI_MATCH(DMI_SYS_VENDOR, "HP"), | 333 | DMI_MATCH(DMI_SYS_VENDOR, "HP"), |
| 334 | DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant DL360"), | 334 | DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant DL385 G2"), |
| 335 | }, | 335 | }, |
| 336 | }, | 336 | }, |
| 337 | { | 337 | { |
| 338 | .callback = set_bf_sort, | 338 | .callback = set_bf_sort, |
| 339 | .ident = "HP ProLiant DL380", | 339 | .ident = "HP ProLiant DL585 G2", |
| 340 | .matches = { | 340 | .matches = { |
| 341 | DMI_MATCH(DMI_SYS_VENDOR, "HP"), | 341 | DMI_MATCH(DMI_SYS_VENDOR, "HP"), |
| 342 | DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant DL380"), | 342 | DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant DL585 G2"), |
| 343 | }, | 343 | }, |
| 344 | }, | 344 | }, |
| 345 | {} | 345 | {} |
