Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'cris-for-3.20' of git://git.kernel.org/pub/scm/linux/kernel/git/jesper/cris

Pull CRIS changes from Jesper Nilsson.

* tag 'cris-for-3.20' of git://git.kernel.org/pub/scm/linux/kernel/git/jesper/cris:
CRIS: Whitespace cleanup
CRIS: macro whitespace fixes in uaccess.h
CRIS: uaccess: fix sparse errors
CRISv32: Remove unnecessary KERN_INFO from sync_serial
CRIS: Fix missing NR_CPUS in menuconfig
CRISv32: Avoid warning of unused variable
CRIS: Avoid warning in cris mm/fault.c
CRIS: Export csum_partial_copy_nocheck

+111 -76
+4
arch/cris/Kconfig
··· 57 57 int 58 58 default 100 59 59 60 + config NR_CPUS 61 + int 62 + default "1" 63 + 60 64 source "init/Kconfig" 61 65 62 66 source "kernel/Kconfig.freezer"
+2 -2
arch/cris/arch-v32/drivers/sync_serial.c
··· 1286 1286 1287 1287 tr_cfg.tr_en = regk_sser_yes; 1288 1288 REG_WR(sser, port->regi_sser, rw_tr_cfg, tr_cfg); 1289 - DEBUGTRDMA(pr_info(KERN_INFO "dma s\n");); 1289 + DEBUGTRDMA(pr_info("dma s\n");); 1290 1290 } else { 1291 1291 DMA_CONTINUE_DATA(port->regi_dmaout); 1292 1292 DEBUGTRDMA(pr_info("dma c\n");); ··· 1443 1443 reg_dma_rw_ack_intr ack_intr = { .data = regk_dma_yes }; 1444 1444 unsigned long flags; 1445 1445 1446 - DEBUGRXINT(pr_info(KERN_INFO "!")); 1446 + DEBUGRXINT(pr_info("!")); 1447 1447 spin_lock_irqsave(&port->lock, flags); 1448 1448 1449 1449 /* If we overrun the user experience is crap regardless if we
+4
arch/cris/arch-v32/kernel/time.c
··· 107 107 * is used though, so set this really low. */ 108 108 #define WATCHDOG_MIN_FREE_PAGES 8 109 109 110 + #if defined(CONFIG_ETRAX_WATCHDOG_NICE_DOGGY) 110 111 /* for reliable NICE_DOGGY behaviour */ 111 112 static int bite_in_progress; 113 + #endif 112 114 113 115 void reset_watchdog(void) 114 116 { ··· 157 155 158 156 nmi_enter(); 159 157 oops_in_progress = 1; 158 + #if defined(CONFIG_ETRAX_WATCHDOG_NICE_DOGGY) 160 159 bite_in_progress = 1; 160 + #endif 161 161 printk(KERN_WARNING "Watchdog bite\n"); 162 162 163 163 /* Check if forced restart or unexpected watchdog */
+97 -73
arch/cris/include/asm/uaccess.h
··· 1 - /* 1 + /* 2 2 * Authors: Bjorn Wesen (bjornw@axis.com) 3 3 * Hans-Peter Nilsson (hp@axis.com) 4 4 */ ··· 35 35 #define MAKE_MM_SEG(s) ((mm_segment_t) { (s) }) 36 36 37 37 /* addr_limit is the maximum accessible address for the task. we misuse 38 - * the KERNEL_DS and USER_DS values to both assign and compare the 38 + * the KERNEL_DS and USER_DS values to both assign and compare the 39 39 * addr_limit values through the equally misnamed get/set_fs macros. 40 40 * (see above) 41 41 */ ··· 47 47 #define get_fs() (current_thread_info()->addr_limit) 48 48 #define set_fs(x) (current_thread_info()->addr_limit = (x)) 49 49 50 - #define segment_eq(a,b) ((a).seg == (b).seg) 50 + #define segment_eq(a, b) ((a).seg == (b).seg) 51 51 52 52 #define __kernel_ok (segment_eq(get_fs(), KERNEL_DS)) 53 - #define __user_ok(addr,size) (((size) <= TASK_SIZE)&&((addr) <= TASK_SIZE-(size))) 54 - #define __access_ok(addr,size) (__kernel_ok || __user_ok((addr),(size))) 55 - #define access_ok(type,addr,size) __access_ok((unsigned long)(addr),(size)) 53 + #define __user_ok(addr, size) \ 54 + (((size) <= TASK_SIZE) && ((addr) <= TASK_SIZE-(size))) 55 + #define __access_ok(addr, size) (__kernel_ok || __user_ok((addr), (size))) 56 + #define access_ok(type, addr, size) __access_ok((unsigned long)(addr), (size)) 56 57 57 58 #include <arch/uaccess.h> 58 59 ··· 70 69 * on our cache or tlb entries. 71 70 */ 72 71 73 - struct exception_table_entry 74 - { 72 + struct exception_table_entry { 75 73 unsigned long insn, fixup; 76 74 }; 77 75 ··· 92 92 * CRIS, we can just do these as direct assignments. (Of course, the 93 93 * exception handling means that it's no longer "just"...) 94 94 */ 95 - #define get_user(x,ptr) \ 96 - __get_user_check((x),(ptr),sizeof(*(ptr))) 97 - #define put_user(x,ptr) \ 98 - __put_user_check((__typeof__(*(ptr)))(x),(ptr),sizeof(*(ptr))) 95 + #define get_user(x, ptr) \ 96 + __get_user_check((x), (ptr), sizeof(*(ptr))) 97 + #define put_user(x, ptr) \ 98 + __put_user_check((__typeof__(*(ptr)))(x), (ptr), sizeof(*(ptr))) 99 99 100 - #define __get_user(x,ptr) \ 101 - __get_user_nocheck((x),(ptr),sizeof(*(ptr))) 102 - #define __put_user(x,ptr) \ 103 - __put_user_nocheck((__typeof__(*(ptr)))(x),(ptr),sizeof(*(ptr))) 100 + #define __get_user(x, ptr) \ 101 + __get_user_nocheck((x), (ptr), sizeof(*(ptr))) 102 + #define __put_user(x, ptr) \ 103 + __put_user_nocheck((__typeof__(*(ptr)))(x), (ptr), sizeof(*(ptr))) 104 104 105 105 extern long __put_user_bad(void); 106 106 107 - #define __put_user_size(x,ptr,size,retval) \ 108 - do { \ 109 - retval = 0; \ 110 - switch (size) { \ 111 - case 1: __put_user_asm(x,ptr,retval,"move.b"); break; \ 112 - case 2: __put_user_asm(x,ptr,retval,"move.w"); break; \ 113 - case 4: __put_user_asm(x,ptr,retval,"move.d"); break; \ 114 - case 8: __put_user_asm_64(x,ptr,retval); break; \ 115 - default: __put_user_bad(); \ 116 - } \ 107 + #define __put_user_size(x, ptr, size, retval) \ 108 + do { \ 109 + retval = 0; \ 110 + switch (size) { \ 111 + case 1: \ 112 + __put_user_asm(x, ptr, retval, "move.b"); \ 113 + break; \ 114 + case 2: \ 115 + __put_user_asm(x, ptr, retval, "move.w"); \ 116 + break; \ 117 + case 4: \ 118 + __put_user_asm(x, ptr, retval, "move.d"); \ 119 + break; \ 120 + case 8: \ 121 + __put_user_asm_64(x, ptr, retval); \ 122 + break; \ 123 + default: \ 124 + __put_user_bad(); \ 125 + } \ 117 126 } while (0) 118 127 119 - #define __get_user_size(x,ptr,size,retval) \ 120 - do { \ 121 - retval = 0; \ 122 - switch (size) { \ 123 - case 1: __get_user_asm(x,ptr,retval,"move.b"); break; \ 124 - case 2: __get_user_asm(x,ptr,retval,"move.w"); break; \ 125 - case 4: __get_user_asm(x,ptr,retval,"move.d"); break; \ 126 - case 8: __get_user_asm_64(x,ptr,retval); break; \ 127 - default: (x) = __get_user_bad(); \ 128 - } \ 128 + #define __get_user_size(x, ptr, size, retval) \ 129 + do { \ 130 + retval = 0; \ 131 + switch (size) { \ 132 + case 1: \ 133 + __get_user_asm(x, ptr, retval, "move.b"); \ 134 + break; \ 135 + case 2: \ 136 + __get_user_asm(x, ptr, retval, "move.w"); \ 137 + break; \ 138 + case 4: \ 139 + __get_user_asm(x, ptr, retval, "move.d"); \ 140 + break; \ 141 + case 8: \ 142 + __get_user_asm_64(x, ptr, retval); \ 143 + break; \ 144 + default: \ 145 + (x) = __get_user_bad(); \ 146 + } \ 129 147 } while (0) 130 148 131 - #define __put_user_nocheck(x,ptr,size) \ 149 + #define __put_user_nocheck(x, ptr, size) \ 132 150 ({ \ 133 151 long __pu_err; \ 134 - __put_user_size((x),(ptr),(size),__pu_err); \ 152 + __put_user_size((x), (ptr), (size), __pu_err); \ 135 153 __pu_err; \ 136 154 }) 137 155 138 - #define __put_user_check(x,ptr,size) \ 139 - ({ \ 140 - long __pu_err = -EFAULT; \ 141 - __typeof__(*(ptr)) *__pu_addr = (ptr); \ 142 - if (access_ok(VERIFY_WRITE,__pu_addr,size)) \ 143 - __put_user_size((x),__pu_addr,(size),__pu_err); \ 144 - __pu_err; \ 156 + #define __put_user_check(x, ptr, size) \ 157 + ({ \ 158 + long __pu_err = -EFAULT; \ 159 + __typeof__(*(ptr)) *__pu_addr = (ptr); \ 160 + if (access_ok(VERIFY_WRITE, __pu_addr, size)) \ 161 + __put_user_size((x), __pu_addr, (size), __pu_err); \ 162 + __pu_err; \ 145 163 }) 146 164 147 165 struct __large_struct { unsigned long buf[100]; }; ··· 167 149 168 150 169 151 170 - #define __get_user_nocheck(x,ptr,size) \ 152 + #define __get_user_nocheck(x, ptr, size) \ 171 153 ({ \ 172 154 long __gu_err, __gu_val; \ 173 - __get_user_size(__gu_val,(ptr),(size),__gu_err); \ 174 - (x) = (__typeof__(*(ptr)))__gu_val; \ 155 + __get_user_size(__gu_val, (ptr), (size), __gu_err); \ 156 + (x) = (__force __typeof__(*(ptr)))__gu_val; \ 175 157 __gu_err; \ 176 158 }) 177 159 178 - #define __get_user_check(x,ptr,size) \ 160 + #define __get_user_check(x, ptr, size) \ 179 161 ({ \ 180 162 long __gu_err = -EFAULT, __gu_val = 0; \ 181 163 const __typeof__(*(ptr)) *__gu_addr = (ptr); \ 182 - if (access_ok(VERIFY_READ,__gu_addr,size)) \ 183 - __get_user_size(__gu_val,__gu_addr,(size),__gu_err); \ 184 - (x) = (__typeof__(*(ptr)))__gu_val; \ 164 + if (access_ok(VERIFY_READ, __gu_addr, size)) \ 165 + __get_user_size(__gu_val, __gu_addr, (size), __gu_err); \ 166 + (x) = (__force __typeof__(*(ptr)))__gu_val; \ 185 167 __gu_err; \ 186 168 }) 187 169 ··· 198 180 __generic_copy_to_user(void __user *to, const void *from, unsigned long n) 199 181 { 200 182 if (access_ok(VERIFY_WRITE, to, n)) 201 - return __copy_user(to,from,n); 183 + return __copy_user(to, from, n); 202 184 return n; 203 185 } 204 186 ··· 206 188 __generic_copy_from_user(void *to, const void __user *from, unsigned long n) 207 189 { 208 190 if (access_ok(VERIFY_READ, from, n)) 209 - return __copy_user_zeroing(to,from,n); 191 + return __copy_user_zeroing(to, from, n); 210 192 return n; 211 193 } 212 194 ··· 214 196 __generic_clear_user(void __user *to, unsigned long n) 215 197 { 216 198 if (access_ok(VERIFY_WRITE, to, n)) 217 - return __do_clear_user(to,n); 199 + return __do_clear_user(to, n); 218 200 return n; 219 201 } 220 202 ··· 228 210 strncpy_from_user(char *dst, const char __user *src, long count) 229 211 { 230 212 long res = -EFAULT; 213 + 231 214 if (access_ok(VERIFY_READ, src, 1)) 232 215 res = __do_strncpy_from_user(dst, src, count); 233 216 return res; ··· 242 223 __constant_copy_from_user(void *to, const void __user *from, unsigned long n) 243 224 { 244 225 unsigned long ret = 0; 226 + 245 227 if (n == 0) 246 228 ; 247 229 else if (n == 1) ··· 293 273 __constant_copy_to_user(void __user *to, const void *from, unsigned long n) 294 274 { 295 275 unsigned long ret = 0; 276 + 296 277 if (n == 0) 297 278 ; 298 279 else if (n == 1) ··· 344 323 __constant_clear_user(void __user *to, unsigned long n) 345 324 { 346 325 unsigned long ret = 0; 326 + 347 327 if (n == 0) 348 328 ; 349 329 else if (n == 1) ··· 372 350 } 373 351 374 352 375 - #define clear_user(to, n) \ 376 - (__builtin_constant_p(n) ? \ 377 - __constant_clear_user(to, n) : \ 378 - __generic_clear_user(to, n)) 353 + #define clear_user(to, n) \ 354 + (__builtin_constant_p(n) ? \ 355 + __constant_clear_user(to, n) : \ 356 + __generic_clear_user(to, n)) 379 357 380 - #define copy_from_user(to, from, n) \ 381 - (__builtin_constant_p(n) ? \ 382 - __constant_copy_from_user(to, from, n) : \ 383 - __generic_copy_from_user(to, from, n)) 358 + #define copy_from_user(to, from, n) \ 359 + (__builtin_constant_p(n) ? \ 360 + __constant_copy_from_user(to, from, n) : \ 361 + __generic_copy_from_user(to, from, n)) 384 362 385 - #define copy_to_user(to, from, n) \ 386 - (__builtin_constant_p(n) ? \ 387 - __constant_copy_to_user(to, from, n) : \ 388 - __generic_copy_to_user(to, from, n)) 363 + #define copy_to_user(to, from, n) \ 364 + (__builtin_constant_p(n) ? \ 365 + __constant_copy_to_user(to, from, n) : \ 366 + __generic_copy_to_user(to, from, n)) 389 367 390 368 /* We let the __ versions of copy_from/to_user inline, because they're often 391 369 * used in fast paths and have only a small space overhead. ··· 395 373 __generic_copy_from_user_nocheck(void *to, const void __user *from, 396 374 unsigned long n) 397 375 { 398 - return __copy_user_zeroing(to,from,n); 376 + return __copy_user_zeroing(to, from, n); 399 377 } 400 378 401 379 static inline unsigned long 402 380 __generic_copy_to_user_nocheck(void __user *to, const void *from, 403 381 unsigned long n) 404 382 { 405 - return __copy_user(to,from,n); 383 + return __copy_user(to, from, n); 406 384 } 407 385 408 386 static inline unsigned long 409 387 __generic_clear_user_nocheck(void __user *to, unsigned long n) 410 388 { 411 - return __do_clear_user(to,n); 389 + return __do_clear_user(to, n); 412 390 } 413 391 414 392 /* without checking */ 415 393 416 - #define __copy_to_user(to,from,n) __generic_copy_to_user_nocheck((to),(from),(n)) 417 - #define __copy_from_user(to,from,n) __generic_copy_from_user_nocheck((to),(from),(n)) 394 + #define __copy_to_user(to, from, n) \ 395 + __generic_copy_to_user_nocheck((to), (from), (n)) 396 + #define __copy_from_user(to, from, n) \ 397 + __generic_copy_from_user_nocheck((to), (from), (n)) 418 398 #define __copy_to_user_inatomic __copy_to_user 419 399 #define __copy_from_user_inatomic __copy_from_user 420 - #define __clear_user(to,n) __generic_clear_user_nocheck((to),(n)) 400 + #define __clear_user(to, n) __generic_clear_user_nocheck((to), (n)) 421 401 422 402 #define strlen_user(str) strnlen_user((str), 0x7ffffffe) 423 403
+1
arch/cris/kernel/crisksyms.c
··· 67 67 #endif 68 68 EXPORT_SYMBOL(csum_partial); 69 69 EXPORT_SYMBOL(csum_partial_copy_from_user); 70 + EXPORT_SYMBOL(csum_partial_copy_nocheck);
+3 -1
arch/cris/mm/fault.c
··· 219 219 /* User mode accesses just cause a SIGSEGV */ 220 220 221 221 if (user_mode(regs)) { 222 + #ifdef CONFIG_NO_SEGFAULT_TERMINATION 223 + DECLARE_WAIT_QUEUE_HEAD(wq); 224 + #endif 222 225 printk(KERN_NOTICE "%s (pid %d) segfaults for page " 223 226 "address %08lx at pc %08lx\n", 224 227 tsk->comm, tsk->pid, ··· 232 229 show_registers(regs); 233 230 234 231 #ifdef CONFIG_NO_SEGFAULT_TERMINATION 235 - DECLARE_WAIT_QUEUE_HEAD(wq); 236 232 wait_event_interruptible(wq, 0 == 1); 237 233 #else 238 234 info.si_signo = SIGSEGV;