diff options
Diffstat (limited to 'arch/alpha/kernel')
| -rw-r--r-- | arch/alpha/kernel/alpha_ksyms.c | 9 | ||||
| -rw-r--r-- | arch/alpha/kernel/entry.S | 2 | ||||
| -rw-r--r-- | arch/alpha/kernel/head.S | 2 | ||||
| -rw-r--r-- | arch/alpha/kernel/module.c | 8 | ||||
| -rw-r--r-- | arch/alpha/kernel/osf_sys.c | 7 | ||||
| -rw-r--r-- | arch/alpha/kernel/smp.c | 172 |
6 files changed, 10 insertions, 190 deletions
diff --git a/arch/alpha/kernel/alpha_ksyms.c b/arch/alpha/kernel/alpha_ksyms.c index fc5ef90c4fc9..24ae9a366073 100644 --- a/arch/alpha/kernel/alpha_ksyms.c +++ b/arch/alpha/kernel/alpha_ksyms.c | |||
| @@ -185,15 +185,6 @@ EXPORT_SYMBOL(smp_num_cpus); | |||
| 185 | EXPORT_SYMBOL(smp_call_function); | 185 | EXPORT_SYMBOL(smp_call_function); |
| 186 | EXPORT_SYMBOL(smp_call_function_on_cpu); | 186 | EXPORT_SYMBOL(smp_call_function_on_cpu); |
| 187 | EXPORT_SYMBOL(_atomic_dec_and_lock); | 187 | EXPORT_SYMBOL(_atomic_dec_and_lock); |
| 188 | #ifdef CONFIG_DEBUG_SPINLOCK | ||
| 189 | EXPORT_SYMBOL(_raw_spin_unlock); | ||
| 190 | EXPORT_SYMBOL(debug_spin_lock); | ||
| 191 | EXPORT_SYMBOL(debug_spin_trylock); | ||
| 192 | #endif | ||
| 193 | #ifdef CONFIG_DEBUG_RWLOCK | ||
| 194 | EXPORT_SYMBOL(_raw_write_lock); | ||
| 195 | EXPORT_SYMBOL(_raw_read_lock); | ||
| 196 | #endif | ||
| 197 | EXPORT_SYMBOL(cpu_present_mask); | 188 | EXPORT_SYMBOL(cpu_present_mask); |
| 198 | #endif /* CONFIG_SMP */ | 189 | #endif /* CONFIG_SMP */ |
| 199 | 190 | ||
diff --git a/arch/alpha/kernel/entry.S b/arch/alpha/kernel/entry.S index f0927ee53f29..76cc0cb5fc2e 100644 --- a/arch/alpha/kernel/entry.S +++ b/arch/alpha/kernel/entry.S | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | */ | 5 | */ |
| 6 | 6 | ||
| 7 | #include <linux/config.h> | 7 | #include <linux/config.h> |
| 8 | #include <asm/asm_offsets.h> | 8 | #include <asm/asm-offsets.h> |
| 9 | #include <asm/thread_info.h> | 9 | #include <asm/thread_info.h> |
| 10 | #include <asm/pal.h> | 10 | #include <asm/pal.h> |
| 11 | #include <asm/errno.h> | 11 | #include <asm/errno.h> |
diff --git a/arch/alpha/kernel/head.S b/arch/alpha/kernel/head.S index 4ca2e404708a..0905721fcbca 100644 --- a/arch/alpha/kernel/head.S +++ b/arch/alpha/kernel/head.S | |||
| @@ -9,7 +9,7 @@ | |||
| 9 | 9 | ||
| 10 | #include <linux/config.h> | 10 | #include <linux/config.h> |
| 11 | #include <asm/system.h> | 11 | #include <asm/system.h> |
| 12 | #include <asm/asm_offsets.h> | 12 | #include <asm/asm-offsets.h> |
| 13 | 13 | ||
| 14 | .globl swapper_pg_dir | 14 | .globl swapper_pg_dir |
| 15 | .globl _stext | 15 | .globl _stext |
diff --git a/arch/alpha/kernel/module.c b/arch/alpha/kernel/module.c index fc271e316a38..aac6d4b22f7a 100644 --- a/arch/alpha/kernel/module.c +++ b/arch/alpha/kernel/module.c | |||
| @@ -47,7 +47,7 @@ module_free(struct module *mod, void *module_region) | |||
| 47 | 47 | ||
| 48 | struct got_entry { | 48 | struct got_entry { |
| 49 | struct got_entry *next; | 49 | struct got_entry *next; |
| 50 | Elf64_Addr r_offset; | 50 | Elf64_Sxword r_addend; |
| 51 | int got_offset; | 51 | int got_offset; |
| 52 | }; | 52 | }; |
| 53 | 53 | ||
| @@ -57,14 +57,14 @@ process_reloc_for_got(Elf64_Rela *rela, | |||
| 57 | { | 57 | { |
| 58 | unsigned long r_sym = ELF64_R_SYM (rela->r_info); | 58 | unsigned long r_sym = ELF64_R_SYM (rela->r_info); |
| 59 | unsigned long r_type = ELF64_R_TYPE (rela->r_info); | 59 | unsigned long r_type = ELF64_R_TYPE (rela->r_info); |
| 60 | Elf64_Addr r_offset = rela->r_offset; | 60 | Elf64_Sxword r_addend = rela->r_addend; |
| 61 | struct got_entry *g; | 61 | struct got_entry *g; |
| 62 | 62 | ||
| 63 | if (r_type != R_ALPHA_LITERAL) | 63 | if (r_type != R_ALPHA_LITERAL) |
| 64 | return; | 64 | return; |
| 65 | 65 | ||
| 66 | for (g = chains + r_sym; g ; g = g->next) | 66 | for (g = chains + r_sym; g ; g = g->next) |
| 67 | if (g->r_offset == r_offset) { | 67 | if (g->r_addend == r_addend) { |
| 68 | if (g->got_offset == 0) { | 68 | if (g->got_offset == 0) { |
| 69 | g->got_offset = *poffset; | 69 | g->got_offset = *poffset; |
| 70 | *poffset += 8; | 70 | *poffset += 8; |
| @@ -74,7 +74,7 @@ process_reloc_for_got(Elf64_Rela *rela, | |||
| 74 | 74 | ||
| 75 | g = kmalloc (sizeof (*g), GFP_KERNEL); | 75 | g = kmalloc (sizeof (*g), GFP_KERNEL); |
| 76 | g->next = chains[r_sym].next; | 76 | g->next = chains[r_sym].next; |
| 77 | g->r_offset = r_offset; | 77 | g->r_addend = r_addend; |
| 78 | g->got_offset = *poffset; | 78 | g->got_offset = *poffset; |
| 79 | *poffset += 8; | 79 | *poffset += 8; |
| 80 | chains[r_sym].next = g; | 80 | chains[r_sym].next = g; |
diff --git a/arch/alpha/kernel/osf_sys.c b/arch/alpha/kernel/osf_sys.c index 167fd89f8707..0636116210d2 100644 --- a/arch/alpha/kernel/osf_sys.c +++ b/arch/alpha/kernel/osf_sys.c | |||
| @@ -974,6 +974,7 @@ osf_select(int n, fd_set __user *inp, fd_set __user *outp, fd_set __user *exp, | |||
| 974 | size_t size; | 974 | size_t size; |
| 975 | long timeout; | 975 | long timeout; |
| 976 | int ret = -EINVAL; | 976 | int ret = -EINVAL; |
| 977 | struct fdtable *fdt; | ||
| 977 | 978 | ||
| 978 | timeout = MAX_SCHEDULE_TIMEOUT; | 979 | timeout = MAX_SCHEDULE_TIMEOUT; |
| 979 | if (tvp) { | 980 | if (tvp) { |
| @@ -995,7 +996,8 @@ osf_select(int n, fd_set __user *inp, fd_set __user *outp, fd_set __user *exp, | |||
| 995 | } | 996 | } |
| 996 | } | 997 | } |
| 997 | 998 | ||
| 998 | if (n < 0 || n > current->files->max_fdset) | 999 | fdt = files_fdtable(current->files); |
| 1000 | if (n < 0 || n > fdt->max_fdset) | ||
| 999 | goto out_nofds; | 1001 | goto out_nofds; |
| 1000 | 1002 | ||
| 1001 | /* | 1003 | /* |
| @@ -1152,8 +1154,7 @@ osf_usleep_thread(struct timeval32 __user *sleep, struct timeval32 __user *remai | |||
| 1152 | 1154 | ||
| 1153 | ticks = timeval_to_jiffies(&tmp); | 1155 | ticks = timeval_to_jiffies(&tmp); |
| 1154 | 1156 | ||
| 1155 | current->state = TASK_INTERRUPTIBLE; | 1157 | ticks = schedule_timeout_interruptible(ticks); |
| 1156 | ticks = schedule_timeout(ticks); | ||
| 1157 | 1158 | ||
| 1158 | if (remain) { | 1159 | if (remain) { |
| 1159 | jiffies_to_timeval(ticks, &tmp); | 1160 | jiffies_to_timeval(ticks, &tmp); |
diff --git a/arch/alpha/kernel/smp.c b/arch/alpha/kernel/smp.c index e211aa7404e6..da0be3465791 100644 --- a/arch/alpha/kernel/smp.c +++ b/arch/alpha/kernel/smp.c | |||
| @@ -989,175 +989,3 @@ flush_icache_user_range(struct vm_area_struct *vma, struct page *page, | |||
| 989 | 989 | ||
| 990 | preempt_enable(); | 990 | preempt_enable(); |
| 991 | } | 991 | } |
| 992 | |||
| 993 | #ifdef CONFIG_DEBUG_SPINLOCK | ||
| 994 | void | ||
| 995 | _raw_spin_unlock(spinlock_t * lock) | ||
| 996 | { | ||
| 997 | mb(); | ||
| 998 | lock->lock = 0; | ||
| 999 | |||
| 1000 | lock->on_cpu = -1; | ||
| 1001 | lock->previous = NULL; | ||
| 1002 | lock->task = NULL; | ||
| 1003 | lock->base_file = "none"; | ||
| 1004 | lock->line_no = 0; | ||
| 1005 | } | ||
| 1006 | |||
| 1007 | void | ||
| 1008 | debug_spin_lock(spinlock_t * lock, const char *base_file, int line_no) | ||
| 1009 | { | ||
| 1010 | long tmp; | ||
| 1011 | long stuck; | ||
| 1012 | void *inline_pc = __builtin_return_address(0); | ||
| 1013 | unsigned long started = jiffies; | ||
| 1014 | int printed = 0; | ||
| 1015 | int cpu = smp_processor_id(); | ||
| 1016 | |||
| 1017 | stuck = 1L << 30; | ||
| 1018 | try_again: | ||
| 1019 | |||
| 1020 | /* Use sub-sections to put the actual loop at the end | ||
| 1021 | of this object file's text section so as to perfect | ||
| 1022 | branch prediction. */ | ||
| 1023 | __asm__ __volatile__( | ||
| 1024 | "1: ldl_l %0,%1\n" | ||
| 1025 | " subq %2,1,%2\n" | ||
| 1026 | " blbs %0,2f\n" | ||
| 1027 | " or %0,1,%0\n" | ||
| 1028 | " stl_c %0,%1\n" | ||
| 1029 | " beq %0,3f\n" | ||
| 1030 | "4: mb\n" | ||
| 1031 | ".subsection 2\n" | ||
| 1032 | "2: ldl %0,%1\n" | ||
| 1033 | " subq %2,1,%2\n" | ||
| 1034 | "3: blt %2,4b\n" | ||
| 1035 | " blbs %0,2b\n" | ||
| 1036 | " br 1b\n" | ||
| 1037 | ".previous" | ||
| 1038 | : "=r" (tmp), "=m" (lock->lock), "=r" (stuck) | ||
| 1039 | : "m" (lock->lock), "2" (stuck) : "memory"); | ||
| 1040 | |||
| 1041 | if (stuck < 0) { | ||
| 1042 | printk(KERN_WARNING | ||
| 1043 | "%s:%d spinlock stuck in %s at %p(%d)" | ||
| 1044 | " owner %s at %p(%d) %s:%d\n", | ||
| 1045 | base_file, line_no, | ||
| 1046 | current->comm, inline_pc, cpu, | ||
| 1047 | lock->task->comm, lock->previous, | ||
| 1048 | lock->on_cpu, lock->base_file, lock->line_no); | ||
| 1049 | stuck = 1L << 36; | ||
| 1050 | printed = 1; | ||
| 1051 | goto try_again; | ||
| 1052 | } | ||
| 1053 | |||
| 1054 | /* Exiting. Got the lock. */ | ||
| 1055 | lock->on_cpu = cpu; | ||
| 1056 | lock->previous = inline_pc; | ||
| 1057 | lock->task = current; | ||
| 1058 | lock->base_file = base_file; | ||
| 1059 | lock->line_no = line_no; | ||
| 1060 | |||
| 1061 | if (printed) { | ||
| 1062 | printk(KERN_WARNING | ||
| 1063 | "%s:%d spinlock grabbed in %s at %p(%d) %ld ticks\n", | ||
| 1064 | base_file, line_no, current->comm, inline_pc, | ||
| 1065 | cpu, jiffies - started); | ||
| 1066 | } | ||
| 1067 | } | ||
| 1068 | |||
| 1069 | int | ||
| 1070 | debug_spin_trylock(spinlock_t * lock, const char *base_file, int line_no) | ||
| 1071 | { | ||
| 1072 | int ret; | ||
| 1073 | if ((ret = !test_and_set_bit(0, lock))) { | ||
| 1074 | lock->on_cpu = smp_processor_id(); | ||
| 1075 | lock->previous = __builtin_return_address(0); | ||
| 1076 | lock->task = current; | ||
| 1077 | } else { | ||
| 1078 | lock->base_file = base_file; | ||
| 1079 | lock->line_no = line_no; | ||
| 1080 | } | ||
| 1081 | return ret; | ||
| 1082 | } | ||
| 1083 | #endif /* CONFIG_DEBUG_SPINLOCK */ | ||
| 1084 | |||
| 1085 | #ifdef CONFIG_DEBUG_RWLOCK | ||
| 1086 | void _raw_write_lock(rwlock_t * lock) | ||
| 1087 | { | ||
| 1088 | long regx, regy; | ||
| 1089 | int stuck_lock, stuck_reader; | ||
| 1090 | void *inline_pc = __builtin_return_address(0); | ||
| 1091 | |||
| 1092 | try_again: | ||
| 1093 | |||
| 1094 | stuck_lock = 1<<30; | ||
| 1095 | stuck_reader = 1<<30; | ||
| 1096 | |||
| 1097 | __asm__ __volatile__( | ||
| 1098 | "1: ldl_l %1,%0\n" | ||
| 1099 | " blbs %1,6f\n" | ||
| 1100 | " blt %1,8f\n" | ||
| 1101 | " mov 1,%1\n" | ||
| 1102 | " stl_c %1,%0\n" | ||
| 1103 | " beq %1,6f\n" | ||
| 1104 | "4: mb\n" | ||
| 1105 | ".subsection 2\n" | ||
| 1106 | "6: blt %3,4b # debug\n" | ||
| 1107 | " subl %3,1,%3 # debug\n" | ||
| 1108 | " ldl %1,%0\n" | ||
| 1109 | " blbs %1,6b\n" | ||
| 1110 | "8: blt %4,4b # debug\n" | ||
| 1111 | " subl %4,1,%4 # debug\n" | ||
| 1112 | " ldl %1,%0\n" | ||
| 1113 | " blt %1,8b\n" | ||
| 1114 | " br 1b\n" | ||
| 1115 | ".previous" | ||
| 1116 | : "=m" (*(volatile int *)lock), "=&r" (regx), "=&r" (regy), | ||
| 1117 | "=&r" (stuck_lock), "=&r" (stuck_reader) | ||
| 1118 | : "m" (*(volatile int *)lock), "3" (stuck_lock), "4" (stuck_reader) : "memory"); | ||
| 1119 | |||
| 1120 | if (stuck_lock < 0) { | ||
| 1121 | printk(KERN_WARNING "write_lock stuck at %p\n", inline_pc); | ||
| 1122 | goto try_again; | ||
| 1123 | } | ||
| 1124 | if (stuck_reader < 0) { | ||
| 1125 | printk(KERN_WARNING "write_lock stuck on readers at %p\n", | ||
| 1126 | inline_pc); | ||
| 1127 | goto try_again; | ||
| 1128 | } | ||
| 1129 | } | ||
| 1130 | |||
| 1131 | void _raw_read_lock(rwlock_t * lock) | ||
| 1132 | { | ||
| 1133 | long regx; | ||
| 1134 | int stuck_lock; | ||
| 1135 | void *inline_pc = __builtin_return_address(0); | ||
| 1136 | |||
| 1137 | try_again: | ||
| 1138 | |||
| 1139 | stuck_lock = 1<<30; | ||
| 1140 | |||
| 1141 | __asm__ __volatile__( | ||
| 1142 | "1: ldl_l %1,%0;" | ||
| 1143 | " blbs %1,6f;" | ||
| 1144 | " subl %1,2,%1;" | ||
| 1145 | " stl_c %1,%0;" | ||
| 1146 | " beq %1,6f;" | ||
| 1147 | "4: mb\n" | ||
| 1148 | ".subsection 2\n" | ||
| 1149 | "6: ldl %1,%0;" | ||
| 1150 | " blt %2,4b # debug\n" | ||
| 1151 | " subl %2,1,%2 # debug\n" | ||
| 1152 | " blbs %1,6b;" | ||
| 1153 | " br 1b\n" | ||
| 1154 | ".previous" | ||
| 1155 | : "=m" (*(volatile int *)lock), "=&r" (regx), "=&r" (stuck_lock) | ||
| 1156 | : "m" (*(volatile int *)lock), "2" (stuck_lock) : "memory"); | ||
| 1157 | |||
| 1158 | if (stuck_lock < 0) { | ||
| 1159 | printk(KERN_WARNING "read_lock stuck at %p\n", inline_pc); | ||
| 1160 | goto try_again; | ||
| 1161 | } | ||
| 1162 | } | ||
| 1163 | #endif /* CONFIG_DEBUG_RWLOCK */ | ||
