diff options
Diffstat (limited to 'arch/ia64/kernel')
-rw-r--r-- | arch/ia64/kernel/entry.S | 6 | ||||
-rw-r--r-- | arch/ia64/kernel/process.c | 5 | ||||
-rw-r--r-- | arch/ia64/kernel/setup.c | 37 | ||||
-rw-r--r-- | arch/ia64/kernel/topology.c | 2 | ||||
-rw-r--r-- | arch/ia64/kernel/unwind.c | 12 |
5 files changed, 46 insertions, 16 deletions
diff --git a/arch/ia64/kernel/entry.S b/arch/ia64/kernel/entry.S index bb9a506deb78..66946f3fdac7 100644 --- a/arch/ia64/kernel/entry.S +++ b/arch/ia64/kernel/entry.S | |||
@@ -1574,8 +1574,8 @@ sys_call_table: | |||
1574 | data8 sys_ioprio_set | 1574 | data8 sys_ioprio_set |
1575 | data8 sys_ioprio_get // 1275 | 1575 | data8 sys_ioprio_get // 1275 |
1576 | data8 sys_set_zone_reclaim | 1576 | data8 sys_set_zone_reclaim |
1577 | data8 sys_ni_syscall | 1577 | data8 sys_inotify_init |
1578 | data8 sys_ni_syscall | 1578 | data8 sys_inotify_add_watch |
1579 | data8 sys_ni_syscall | 1579 | data8 sys_inotify_rm_watch |
1580 | 1580 | ||
1581 | .org sys_call_table + 8*NR_syscalls // guard against failures to increase NR_syscalls | 1581 | .org sys_call_table + 8*NR_syscalls // guard against failures to increase NR_syscalls |
diff --git a/arch/ia64/kernel/process.c b/arch/ia64/kernel/process.c index e484910246ad..66e840609808 100644 --- a/arch/ia64/kernel/process.c +++ b/arch/ia64/kernel/process.c | |||
@@ -807,16 +807,12 @@ machine_restart (char *restart_cmd) | |||
807 | (*efi.reset_system)(EFI_RESET_WARM, 0, 0, NULL); | 807 | (*efi.reset_system)(EFI_RESET_WARM, 0, 0, NULL); |
808 | } | 808 | } |
809 | 809 | ||
810 | EXPORT_SYMBOL(machine_restart); | ||
811 | |||
812 | void | 810 | void |
813 | machine_halt (void) | 811 | machine_halt (void) |
814 | { | 812 | { |
815 | cpu_halt(); | 813 | cpu_halt(); |
816 | } | 814 | } |
817 | 815 | ||
818 | EXPORT_SYMBOL(machine_halt); | ||
819 | |||
820 | void | 816 | void |
821 | machine_power_off (void) | 817 | machine_power_off (void) |
822 | { | 818 | { |
@@ -825,4 +821,3 @@ machine_power_off (void) | |||
825 | machine_halt(); | 821 | machine_halt(); |
826 | } | 822 | } |
827 | 823 | ||
828 | EXPORT_SYMBOL(machine_power_off); | ||
diff --git a/arch/ia64/kernel/setup.c b/arch/ia64/kernel/setup.c index 5c7c95737bbf..84f89da7c640 100644 --- a/arch/ia64/kernel/setup.c +++ b/arch/ia64/kernel/setup.c | |||
@@ -20,6 +20,7 @@ | |||
20 | * 02/01/00 R.Seth fixed get_cpuinfo for SMP | 20 | * 02/01/00 R.Seth fixed get_cpuinfo for SMP |
21 | * 01/07/99 S.Eranian added the support for command line argument | 21 | * 01/07/99 S.Eranian added the support for command line argument |
22 | * 06/24/99 W.Drummond added boot_cpu_data. | 22 | * 06/24/99 W.Drummond added boot_cpu_data. |
23 | * 05/28/05 Z. Menyhart Dynamic stride size for "flush_icache_range()" | ||
23 | */ | 24 | */ |
24 | #include <linux/config.h> | 25 | #include <linux/config.h> |
25 | #include <linux/module.h> | 26 | #include <linux/module.h> |
@@ -85,6 +86,13 @@ EXPORT_SYMBOL(io_space); | |||
85 | unsigned int num_io_spaces; | 86 | unsigned int num_io_spaces; |
86 | 87 | ||
87 | /* | 88 | /* |
89 | * "flush_icache_range()" needs to know what processor dependent stride size to use | ||
90 | * when it makes i-cache(s) coherent with d-caches. | ||
91 | */ | ||
92 | #define I_CACHE_STRIDE_SHIFT 5 /* Safest way to go: 32 bytes by 32 bytes */ | ||
93 | unsigned long ia64_i_cache_stride_shift = ~0; | ||
94 | |||
95 | /* | ||
88 | * The merge_mask variable needs to be set to (max(iommu_page_size(iommu)) - 1). This | 96 | * The merge_mask variable needs to be set to (max(iommu_page_size(iommu)) - 1). This |
89 | * mask specifies a mask of address bits that must be 0 in order for two buffers to be | 97 | * mask specifies a mask of address bits that must be 0 in order for two buffers to be |
90 | * mergeable by the I/O MMU (i.e., the end address of the first buffer and the start | 98 | * mergeable by the I/O MMU (i.e., the end address of the first buffer and the start |
@@ -628,6 +636,12 @@ setup_per_cpu_areas (void) | |||
628 | /* start_kernel() requires this... */ | 636 | /* start_kernel() requires this... */ |
629 | } | 637 | } |
630 | 638 | ||
639 | /* | ||
640 | * Calculate the max. cache line size. | ||
641 | * | ||
642 | * In addition, the minimum of the i-cache stride sizes is calculated for | ||
643 | * "flush_icache_range()". | ||
644 | */ | ||
631 | static void | 645 | static void |
632 | get_max_cacheline_size (void) | 646 | get_max_cacheline_size (void) |
633 | { | 647 | { |
@@ -641,6 +655,8 @@ get_max_cacheline_size (void) | |||
641 | printk(KERN_ERR "%s: ia64_pal_cache_summary() failed (status=%ld)\n", | 655 | printk(KERN_ERR "%s: ia64_pal_cache_summary() failed (status=%ld)\n", |
642 | __FUNCTION__, status); | 656 | __FUNCTION__, status); |
643 | max = SMP_CACHE_BYTES; | 657 | max = SMP_CACHE_BYTES; |
658 | /* Safest setup for "flush_icache_range()" */ | ||
659 | ia64_i_cache_stride_shift = I_CACHE_STRIDE_SHIFT; | ||
644 | goto out; | 660 | goto out; |
645 | } | 661 | } |
646 | 662 | ||
@@ -649,14 +665,31 @@ get_max_cacheline_size (void) | |||
649 | &cci); | 665 | &cci); |
650 | if (status != 0) { | 666 | if (status != 0) { |
651 | printk(KERN_ERR | 667 | printk(KERN_ERR |
652 | "%s: ia64_pal_cache_config_info(l=%lu) failed (status=%ld)\n", | 668 | "%s: ia64_pal_cache_config_info(l=%lu, 2) failed (status=%ld)\n", |
653 | __FUNCTION__, l, status); | 669 | __FUNCTION__, l, status); |
654 | max = SMP_CACHE_BYTES; | 670 | max = SMP_CACHE_BYTES; |
671 | /* The safest setup for "flush_icache_range()" */ | ||
672 | cci.pcci_stride = I_CACHE_STRIDE_SHIFT; | ||
673 | cci.pcci_unified = 1; | ||
655 | } | 674 | } |
656 | line_size = 1 << cci.pcci_line_size; | 675 | line_size = 1 << cci.pcci_line_size; |
657 | if (line_size > max) | 676 | if (line_size > max) |
658 | max = line_size; | 677 | max = line_size; |
659 | } | 678 | if (!cci.pcci_unified) { |
679 | status = ia64_pal_cache_config_info(l, | ||
680 | /* cache_type (instruction)= */ 1, | ||
681 | &cci); | ||
682 | if (status != 0) { | ||
683 | printk(KERN_ERR | ||
684 | "%s: ia64_pal_cache_config_info(l=%lu, 1) failed (status=%ld)\n", | ||
685 | __FUNCTION__, l, status); | ||
686 | /* The safest setup for "flush_icache_range()" */ | ||
687 | cci.pcci_stride = I_CACHE_STRIDE_SHIFT; | ||
688 | } | ||
689 | } | ||
690 | if (cci.pcci_stride < ia64_i_cache_stride_shift) | ||
691 | ia64_i_cache_stride_shift = cci.pcci_stride; | ||
692 | } | ||
660 | out: | 693 | out: |
661 | if (max > ia64_max_cacheline_size) | 694 | if (max > ia64_max_cacheline_size) |
662 | ia64_max_cacheline_size = max; | 695 | ia64_max_cacheline_size = max; |
diff --git a/arch/ia64/kernel/topology.c b/arch/ia64/kernel/topology.c index d8030f3bd865..92ff46ad21e2 100644 --- a/arch/ia64/kernel/topology.c +++ b/arch/ia64/kernel/topology.c | |||
@@ -36,12 +36,14 @@ int arch_register_cpu(int num) | |||
36 | parent = &sysfs_nodes[cpu_to_node(num)]; | 36 | parent = &sysfs_nodes[cpu_to_node(num)]; |
37 | #endif /* CONFIG_NUMA */ | 37 | #endif /* CONFIG_NUMA */ |
38 | 38 | ||
39 | #ifdef CONFIG_ACPI_BOOT | ||
39 | /* | 40 | /* |
40 | * If CPEI cannot be re-targetted, and this is | 41 | * If CPEI cannot be re-targetted, and this is |
41 | * CPEI target, then dont create the control file | 42 | * CPEI target, then dont create the control file |
42 | */ | 43 | */ |
43 | if (!can_cpei_retarget() && is_cpu_cpei_target(num)) | 44 | if (!can_cpei_retarget() && is_cpu_cpei_target(num)) |
44 | sysfs_cpus[num].cpu.no_control = 1; | 45 | sysfs_cpus[num].cpu.no_control = 1; |
46 | #endif | ||
45 | 47 | ||
46 | return register_cpu(&sysfs_cpus[num].cpu, num, parent); | 48 | return register_cpu(&sysfs_cpus[num].cpu, num, parent); |
47 | } | 49 | } |
diff --git a/arch/ia64/kernel/unwind.c b/arch/ia64/kernel/unwind.c index 2776a074c6f1..3288be47bc75 100644 --- a/arch/ia64/kernel/unwind.c +++ b/arch/ia64/kernel/unwind.c | |||
@@ -362,7 +362,7 @@ unw_access_gr (struct unw_frame_info *info, int regnum, unsigned long *val, char | |||
362 | if (info->pri_unat_loc) | 362 | if (info->pri_unat_loc) |
363 | nat_addr = info->pri_unat_loc; | 363 | nat_addr = info->pri_unat_loc; |
364 | else | 364 | else |
365 | nat_addr = &info->sw->ar_unat; | 365 | nat_addr = &info->sw->caller_unat; |
366 | nat_mask = (1UL << ((long) addr & 0x1f8)/8); | 366 | nat_mask = (1UL << ((long) addr & 0x1f8)/8); |
367 | } | 367 | } |
368 | } else { | 368 | } else { |
@@ -524,7 +524,7 @@ unw_access_ar (struct unw_frame_info *info, int regnum, unsigned long *val, int | |||
524 | case UNW_AR_UNAT: | 524 | case UNW_AR_UNAT: |
525 | addr = info->unat_loc; | 525 | addr = info->unat_loc; |
526 | if (!addr) | 526 | if (!addr) |
527 | addr = &info->sw->ar_unat; | 527 | addr = &info->sw->caller_unat; |
528 | break; | 528 | break; |
529 | 529 | ||
530 | case UNW_AR_LC: | 530 | case UNW_AR_LC: |
@@ -1775,7 +1775,7 @@ run_script (struct unw_script *script, struct unw_frame_info *state) | |||
1775 | 1775 | ||
1776 | case UNW_INSN_SETNAT_MEMSTK: | 1776 | case UNW_INSN_SETNAT_MEMSTK: |
1777 | if (!state->pri_unat_loc) | 1777 | if (!state->pri_unat_loc) |
1778 | state->pri_unat_loc = &state->sw->ar_unat; | 1778 | state->pri_unat_loc = &state->sw->caller_unat; |
1779 | /* register off. is a multiple of 8, so the least 3 bits (type) are 0 */ | 1779 | /* register off. is a multiple of 8, so the least 3 bits (type) are 0 */ |
1780 | s[dst+1] = ((unsigned long) state->pri_unat_loc - s[dst]) | UNW_NAT_MEMSTK; | 1780 | s[dst+1] = ((unsigned long) state->pri_unat_loc - s[dst]) | UNW_NAT_MEMSTK; |
1781 | break; | 1781 | break; |
@@ -2243,11 +2243,11 @@ unw_init (void) | |||
2243 | if (8*sizeof(unw_hash_index_t) < UNW_LOG_HASH_SIZE) | 2243 | if (8*sizeof(unw_hash_index_t) < UNW_LOG_HASH_SIZE) |
2244 | unw_hash_index_t_is_too_narrow(); | 2244 | unw_hash_index_t_is_too_narrow(); |
2245 | 2245 | ||
2246 | unw.sw_off[unw.preg_index[UNW_REG_PRI_UNAT_GR]] = SW(AR_UNAT); | 2246 | unw.sw_off[unw.preg_index[UNW_REG_PRI_UNAT_GR]] = SW(CALLER_UNAT); |
2247 | unw.sw_off[unw.preg_index[UNW_REG_BSPSTORE]] = SW(AR_BSPSTORE); | 2247 | unw.sw_off[unw.preg_index[UNW_REG_BSPSTORE]] = SW(AR_BSPSTORE); |
2248 | unw.sw_off[unw.preg_index[UNW_REG_PFS]] = SW(AR_UNAT); | 2248 | unw.sw_off[unw.preg_index[UNW_REG_PFS]] = SW(AR_PFS); |
2249 | unw.sw_off[unw.preg_index[UNW_REG_RP]] = SW(B0); | 2249 | unw.sw_off[unw.preg_index[UNW_REG_RP]] = SW(B0); |
2250 | unw.sw_off[unw.preg_index[UNW_REG_UNAT]] = SW(AR_UNAT); | 2250 | unw.sw_off[unw.preg_index[UNW_REG_UNAT]] = SW(CALLER_UNAT); |
2251 | unw.sw_off[unw.preg_index[UNW_REG_PR]] = SW(PR); | 2251 | unw.sw_off[unw.preg_index[UNW_REG_PR]] = SW(PR); |
2252 | unw.sw_off[unw.preg_index[UNW_REG_LC]] = SW(AR_LC); | 2252 | unw.sw_off[unw.preg_index[UNW_REG_LC]] = SW(AR_LC); |
2253 | unw.sw_off[unw.preg_index[UNW_REG_FPSR]] = SW(AR_FPSR); | 2253 | unw.sw_off[unw.preg_index[UNW_REG_FPSR]] = SW(AR_FPSR); |