diff options
Diffstat (limited to 'arch/ia64/kernel')
-rw-r--r-- | arch/ia64/kernel/efi.c | 16 | ||||
-rw-r--r-- | arch/ia64/kernel/head.S | 1 | ||||
-rw-r--r-- | arch/ia64/kernel/setup.c | 4 | ||||
-rw-r--r-- | arch/ia64/kernel/time.c | 27 |
4 files changed, 36 insertions, 12 deletions
diff --git a/arch/ia64/kernel/efi.c b/arch/ia64/kernel/efi.c index c485a3b32ba8..9990320b6f9a 100644 --- a/arch/ia64/kernel/efi.c +++ b/arch/ia64/kernel/efi.c | |||
@@ -410,24 +410,16 @@ efi_init (void) | |||
410 | efi_config_table_t *config_tables; | 410 | efi_config_table_t *config_tables; |
411 | efi_char16_t *c16; | 411 | efi_char16_t *c16; |
412 | u64 efi_desc_size; | 412 | u64 efi_desc_size; |
413 | char *cp, *end, vendor[100] = "unknown"; | 413 | char *cp, vendor[100] = "unknown"; |
414 | extern char saved_command_line[]; | 414 | extern char saved_command_line[]; |
415 | int i; | 415 | int i; |
416 | 416 | ||
417 | /* it's too early to be able to use the standard kernel command line support... */ | 417 | /* it's too early to be able to use the standard kernel command line support... */ |
418 | for (cp = saved_command_line; *cp; ) { | 418 | for (cp = saved_command_line; *cp; ) { |
419 | if (memcmp(cp, "mem=", 4) == 0) { | 419 | if (memcmp(cp, "mem=", 4) == 0) { |
420 | cp += 4; | 420 | mem_limit = memparse(cp + 4, &cp); |
421 | mem_limit = memparse(cp, &end); | ||
422 | if (end != cp) | ||
423 | break; | ||
424 | cp = end; | ||
425 | } else if (memcmp(cp, "max_addr=", 9) == 0) { | 421 | } else if (memcmp(cp, "max_addr=", 9) == 0) { |
426 | cp += 9; | 422 | max_addr = GRANULEROUNDDOWN(memparse(cp + 9, &cp)); |
427 | max_addr = GRANULEROUNDDOWN(memparse(cp, &end)); | ||
428 | if (end != cp) | ||
429 | break; | ||
430 | cp = end; | ||
431 | } else { | 423 | } else { |
432 | while (*cp != ' ' && *cp) | 424 | while (*cp != ' ' && *cp) |
433 | ++cp; | 425 | ++cp; |
@@ -458,7 +450,7 @@ efi_init (void) | |||
458 | /* Show what we know for posterity */ | 450 | /* Show what we know for posterity */ |
459 | c16 = __va(efi.systab->fw_vendor); | 451 | c16 = __va(efi.systab->fw_vendor); |
460 | if (c16) { | 452 | if (c16) { |
461 | for (i = 0;i < (int) sizeof(vendor) && *c16; ++i) | 453 | for (i = 0;i < (int) sizeof(vendor) - 1 && *c16; ++i) |
462 | vendor[i] = *c16++; | 454 | vendor[i] = *c16++; |
463 | vendor[i] = '\0'; | 455 | vendor[i] = '\0'; |
464 | } | 456 | } |
diff --git a/arch/ia64/kernel/head.S b/arch/ia64/kernel/head.S index fbc7ea35dd57..f1778a84ea61 100644 --- a/arch/ia64/kernel/head.S +++ b/arch/ia64/kernel/head.S | |||
@@ -352,6 +352,7 @@ start_ap: | |||
352 | mov ar.rsc=0 // place RSE in enforced lazy mode | 352 | mov ar.rsc=0 // place RSE in enforced lazy mode |
353 | ;; | 353 | ;; |
354 | loadrs // clear the dirty partition | 354 | loadrs // clear the dirty partition |
355 | mov IA64_KR(PER_CPU_DATA)=r0 // clear physical per-CPU base | ||
355 | ;; | 356 | ;; |
356 | mov ar.bspstore=r2 // establish the new RSE stack | 357 | mov ar.bspstore=r2 // establish the new RSE stack |
357 | ;; | 358 | ;; |
diff --git a/arch/ia64/kernel/setup.c b/arch/ia64/kernel/setup.c index c0766575a3a2..35f7835294a3 100644 --- a/arch/ia64/kernel/setup.c +++ b/arch/ia64/kernel/setup.c | |||
@@ -71,6 +71,8 @@ unsigned long __per_cpu_offset[NR_CPUS]; | |||
71 | EXPORT_SYMBOL(__per_cpu_offset); | 71 | EXPORT_SYMBOL(__per_cpu_offset); |
72 | #endif | 72 | #endif |
73 | 73 | ||
74 | extern void ia64_setup_printk_clock(void); | ||
75 | |||
74 | DEFINE_PER_CPU(struct cpuinfo_ia64, cpu_info); | 76 | DEFINE_PER_CPU(struct cpuinfo_ia64, cpu_info); |
75 | DEFINE_PER_CPU(unsigned long, local_per_cpu_offset); | 77 | DEFINE_PER_CPU(unsigned long, local_per_cpu_offset); |
76 | DEFINE_PER_CPU(unsigned long, ia64_phys_stacked_size_p8); | 78 | DEFINE_PER_CPU(unsigned long, ia64_phys_stacked_size_p8); |
@@ -445,6 +447,8 @@ setup_arch (char **cmdline_p) | |||
445 | /* process SAL system table: */ | 447 | /* process SAL system table: */ |
446 | ia64_sal_init(efi.sal_systab); | 448 | ia64_sal_init(efi.sal_systab); |
447 | 449 | ||
450 | ia64_setup_printk_clock(); | ||
451 | |||
448 | #ifdef CONFIG_SMP | 452 | #ifdef CONFIG_SMP |
449 | cpu_physical_id(0) = hard_smp_processor_id(); | 453 | cpu_physical_id(0) = hard_smp_processor_id(); |
450 | 454 | ||
diff --git a/arch/ia64/kernel/time.c b/arch/ia64/kernel/time.c index 028a2b95936c..a094ec49ccfa 100644 --- a/arch/ia64/kernel/time.c +++ b/arch/ia64/kernel/time.c | |||
@@ -278,3 +278,30 @@ udelay (unsigned long usecs) | |||
278 | } | 278 | } |
279 | } | 279 | } |
280 | EXPORT_SYMBOL(udelay); | 280 | EXPORT_SYMBOL(udelay); |
281 | |||
282 | static unsigned long long ia64_itc_printk_clock(void) | ||
283 | { | ||
284 | if (ia64_get_kr(IA64_KR_PER_CPU_DATA)) | ||
285 | return sched_clock(); | ||
286 | return 0; | ||
287 | } | ||
288 | |||
289 | static unsigned long long ia64_default_printk_clock(void) | ||
290 | { | ||
291 | return (unsigned long long)(jiffies_64 - INITIAL_JIFFIES) * | ||
292 | (1000000000/HZ); | ||
293 | } | ||
294 | |||
295 | unsigned long long (*ia64_printk_clock)(void) = &ia64_default_printk_clock; | ||
296 | |||
297 | unsigned long long printk_clock(void) | ||
298 | { | ||
299 | return ia64_printk_clock(); | ||
300 | } | ||
301 | |||
302 | void __init | ||
303 | ia64_setup_printk_clock(void) | ||
304 | { | ||
305 | if (!(sal_platform_features & IA64_SAL_PLATFORM_FEATURE_ITC_DRIFT)) | ||
306 | ia64_printk_clock = ia64_itc_printk_clock; | ||
307 | } | ||