diff options
author | Paul Mundt <lethal@linux-sh.org> | 2009-04-01 22:17:41 -0400 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2009-04-01 22:17:41 -0400 |
commit | c4361bb64b81f5b81a7a08d58654493385a2f2b2 (patch) | |
tree | 8741c0b60ddfbc3fc4e17c8d200f6aa6ff32cca0 /arch/alpha | |
parent | 46368fa05164e1afdc1401294908cf30c6d8d981 (diff) | |
parent | 833bb3046b6cb320e775ea2160ddca87d53260d5 (diff) |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
Diffstat (limited to 'arch/alpha')
-rw-r--r-- | arch/alpha/include/asm/machvec.h | 2 | ||||
-rw-r--r-- | arch/alpha/include/asm/pci.h | 14 | ||||
-rw-r--r-- | arch/alpha/include/asm/system.h | 547 | ||||
-rw-r--r-- | arch/alpha/include/asm/types.h | 5 | ||||
-rw-r--r-- | arch/alpha/include/asm/uaccess.h | 12 | ||||
-rw-r--r-- | arch/alpha/include/asm/xchg.h | 258 | ||||
-rw-r--r-- | arch/alpha/kernel/Makefile | 2 | ||||
-rw-r--r-- | arch/alpha/kernel/err_ev6.c | 4 | ||||
-rw-r--r-- | arch/alpha/kernel/err_ev7.c | 6 | ||||
-rw-r--r-- | arch/alpha/kernel/err_marvel.c | 40 | ||||
-rw-r--r-- | arch/alpha/kernel/err_titan.c | 28 | ||||
-rw-r--r-- | arch/alpha/kernel/pci-sysfs.c | 366 | ||||
-rw-r--r-- | arch/alpha/kernel/pci.c | 2 | ||||
-rw-r--r-- | arch/alpha/kernel/pci_iommu.c | 34 | ||||
-rw-r--r-- | arch/alpha/kernel/proto.h | 16 | ||||
-rw-r--r-- | arch/alpha/kernel/setup.c | 2 | ||||
-rw-r--r-- | arch/alpha/kernel/smc37c669.c | 4 | ||||
-rw-r--r-- | arch/alpha/kernel/srm_env.c | 5 | ||||
-rw-r--r-- | arch/alpha/kernel/sys_jensen.c | 3 | ||||
-rw-r--r-- | arch/alpha/kernel/sys_sable.c | 4 | ||||
-rw-r--r-- | arch/alpha/kernel/traps.c | 2 |
21 files changed, 773 insertions, 583 deletions
diff --git a/arch/alpha/include/asm/machvec.h b/arch/alpha/include/asm/machvec.h index fea4ea75b79d..13cd42743810 100644 --- a/arch/alpha/include/asm/machvec.h +++ b/arch/alpha/include/asm/machvec.h | |||
@@ -80,7 +80,7 @@ struct alpha_machine_vector | |||
80 | void (*update_irq_hw)(unsigned long, unsigned long, int); | 80 | void (*update_irq_hw)(unsigned long, unsigned long, int); |
81 | void (*ack_irq)(unsigned long); | 81 | void (*ack_irq)(unsigned long); |
82 | void (*device_interrupt)(unsigned long vector); | 82 | void (*device_interrupt)(unsigned long vector); |
83 | void (*machine_check)(u64 vector, u64 la); | 83 | void (*machine_check)(unsigned long vector, unsigned long la); |
84 | 84 | ||
85 | void (*smp_callin)(void); | 85 | void (*smp_callin)(void); |
86 | void (*init_arch)(void); | 86 | void (*init_arch)(void); |
diff --git a/arch/alpha/include/asm/pci.h b/arch/alpha/include/asm/pci.h index 2a14302c17a3..cb04eaa6ba33 100644 --- a/arch/alpha/include/asm/pci.h +++ b/arch/alpha/include/asm/pci.h | |||
@@ -273,4 +273,18 @@ struct pci_dev *alpha_gendev_to_pci(struct device *dev); | |||
273 | 273 | ||
274 | extern struct pci_dev *isa_bridge; | 274 | extern struct pci_dev *isa_bridge; |
275 | 275 | ||
276 | extern int pci_legacy_read(struct pci_bus *bus, loff_t port, u32 *val, | ||
277 | size_t count); | ||
278 | extern int pci_legacy_write(struct pci_bus *bus, loff_t port, u32 val, | ||
279 | size_t count); | ||
280 | extern int pci_mmap_legacy_page_range(struct pci_bus *bus, | ||
281 | struct vm_area_struct *vma, | ||
282 | enum pci_mmap_state mmap_state); | ||
283 | extern void pci_adjust_legacy_attr(struct pci_bus *bus, | ||
284 | enum pci_mmap_state mmap_type); | ||
285 | #define HAVE_PCI_LEGACY 1 | ||
286 | |||
287 | extern int pci_create_resource_files(struct pci_dev *dev); | ||
288 | extern void pci_remove_resource_files(struct pci_dev *dev); | ||
289 | |||
276 | #endif /* __ALPHA_PCI_H */ | 290 | #endif /* __ALPHA_PCI_H */ |
diff --git a/arch/alpha/include/asm/system.h b/arch/alpha/include/asm/system.h index afe20fa58c99..5aa40cca4f23 100644 --- a/arch/alpha/include/asm/system.h +++ b/arch/alpha/include/asm/system.h | |||
@@ -309,518 +309,71 @@ extern int __min_ipl; | |||
309 | #define tbia() __tbi(-2, /* no second argument */) | 309 | #define tbia() __tbi(-2, /* no second argument */) |
310 | 310 | ||
311 | /* | 311 | /* |
312 | * Atomic exchange. | 312 | * Atomic exchange routines. |
313 | * Since it can be used to implement critical sections | ||
314 | * it must clobber "memory" (also for interrupts in UP). | ||
315 | */ | 313 | */ |
316 | 314 | ||
317 | static inline unsigned long | 315 | #define __ASM__MB |
318 | __xchg_u8(volatile char *m, unsigned long val) | 316 | #define ____xchg(type, args...) __xchg ## type ## _local(args) |
319 | { | 317 | #define ____cmpxchg(type, args...) __cmpxchg ## type ## _local(args) |
320 | unsigned long ret, tmp, addr64; | 318 | #include <asm/xchg.h> |
321 | |||
322 | __asm__ __volatile__( | ||
323 | " andnot %4,7,%3\n" | ||
324 | " insbl %1,%4,%1\n" | ||
325 | "1: ldq_l %2,0(%3)\n" | ||
326 | " extbl %2,%4,%0\n" | ||
327 | " mskbl %2,%4,%2\n" | ||
328 | " or %1,%2,%2\n" | ||
329 | " stq_c %2,0(%3)\n" | ||
330 | " beq %2,2f\n" | ||
331 | #ifdef CONFIG_SMP | ||
332 | " mb\n" | ||
333 | #endif | ||
334 | ".subsection 2\n" | ||
335 | "2: br 1b\n" | ||
336 | ".previous" | ||
337 | : "=&r" (ret), "=&r" (val), "=&r" (tmp), "=&r" (addr64) | ||
338 | : "r" ((long)m), "1" (val) : "memory"); | ||
339 | |||
340 | return ret; | ||
341 | } | ||
342 | |||
343 | static inline unsigned long | ||
344 | __xchg_u16(volatile short *m, unsigned long val) | ||
345 | { | ||
346 | unsigned long ret, tmp, addr64; | ||
347 | |||
348 | __asm__ __volatile__( | ||
349 | " andnot %4,7,%3\n" | ||
350 | " inswl %1,%4,%1\n" | ||
351 | "1: ldq_l %2,0(%3)\n" | ||
352 | " extwl %2,%4,%0\n" | ||
353 | " mskwl %2,%4,%2\n" | ||
354 | " or %1,%2,%2\n" | ||
355 | " stq_c %2,0(%3)\n" | ||
356 | " beq %2,2f\n" | ||
357 | #ifdef CONFIG_SMP | ||
358 | " mb\n" | ||
359 | #endif | ||
360 | ".subsection 2\n" | ||
361 | "2: br 1b\n" | ||
362 | ".previous" | ||
363 | : "=&r" (ret), "=&r" (val), "=&r" (tmp), "=&r" (addr64) | ||
364 | : "r" ((long)m), "1" (val) : "memory"); | ||
365 | |||
366 | return ret; | ||
367 | } | ||
368 | |||
369 | static inline unsigned long | ||
370 | __xchg_u32(volatile int *m, unsigned long val) | ||
371 | { | ||
372 | unsigned long dummy; | ||
373 | |||
374 | __asm__ __volatile__( | ||
375 | "1: ldl_l %0,%4\n" | ||
376 | " bis $31,%3,%1\n" | ||
377 | " stl_c %1,%2\n" | ||
378 | " beq %1,2f\n" | ||
379 | #ifdef CONFIG_SMP | ||
380 | " mb\n" | ||
381 | #endif | ||
382 | ".subsection 2\n" | ||
383 | "2: br 1b\n" | ||
384 | ".previous" | ||
385 | : "=&r" (val), "=&r" (dummy), "=m" (*m) | ||
386 | : "rI" (val), "m" (*m) : "memory"); | ||
387 | |||
388 | return val; | ||
389 | } | ||
390 | |||
391 | static inline unsigned long | ||
392 | __xchg_u64(volatile long *m, unsigned long val) | ||
393 | { | ||
394 | unsigned long dummy; | ||
395 | |||
396 | __asm__ __volatile__( | ||
397 | "1: ldq_l %0,%4\n" | ||
398 | " bis $31,%3,%1\n" | ||
399 | " stq_c %1,%2\n" | ||
400 | " beq %1,2f\n" | ||
401 | #ifdef CONFIG_SMP | ||
402 | " mb\n" | ||
403 | #endif | ||
404 | ".subsection 2\n" | ||
405 | "2: br 1b\n" | ||
406 | ".previous" | ||
407 | : "=&r" (val), "=&r" (dummy), "=m" (*m) | ||
408 | : "rI" (val), "m" (*m) : "memory"); | ||
409 | 319 | ||
410 | return val; | 320 | #define xchg_local(ptr,x) \ |
411 | } | 321 | ({ \ |
412 | 322 | __typeof__(*(ptr)) _x_ = (x); \ | |
413 | /* This function doesn't exist, so you'll get a linker error | 323 | (__typeof__(*(ptr))) __xchg_local((ptr), (unsigned long)_x_, \ |
414 | if something tries to do an invalid xchg(). */ | 324 | sizeof(*(ptr))); \ |
415 | extern void __xchg_called_with_bad_pointer(void); | ||
416 | |||
417 | #define __xchg(ptr, x, size) \ | ||
418 | ({ \ | ||
419 | unsigned long __xchg__res; \ | ||
420 | volatile void *__xchg__ptr = (ptr); \ | ||
421 | switch (size) { \ | ||
422 | case 1: __xchg__res = __xchg_u8(__xchg__ptr, x); break; \ | ||
423 | case 2: __xchg__res = __xchg_u16(__xchg__ptr, x); break; \ | ||
424 | case 4: __xchg__res = __xchg_u32(__xchg__ptr, x); break; \ | ||
425 | case 8: __xchg__res = __xchg_u64(__xchg__ptr, x); break; \ | ||
426 | default: __xchg_called_with_bad_pointer(); __xchg__res = x; \ | ||
427 | } \ | ||
428 | __xchg__res; \ | ||
429 | }) | ||
430 | |||
431 | #define xchg(ptr,x) \ | ||
432 | ({ \ | ||
433 | __typeof__(*(ptr)) _x_ = (x); \ | ||
434 | (__typeof__(*(ptr))) __xchg((ptr), (unsigned long)_x_, sizeof(*(ptr))); \ | ||
435 | }) | 325 | }) |
436 | 326 | ||
437 | static inline unsigned long | 327 | #define cmpxchg_local(ptr, o, n) \ |
438 | __xchg_u8_local(volatile char *m, unsigned long val) | 328 | ({ \ |
439 | { | 329 | __typeof__(*(ptr)) _o_ = (o); \ |
440 | unsigned long ret, tmp, addr64; | 330 | __typeof__(*(ptr)) _n_ = (n); \ |
441 | 331 | (__typeof__(*(ptr))) __cmpxchg_local((ptr), (unsigned long)_o_, \ | |
442 | __asm__ __volatile__( | 332 | (unsigned long)_n_, \ |
443 | " andnot %4,7,%3\n" | 333 | sizeof(*(ptr))); \ |
444 | " insbl %1,%4,%1\n" | ||
445 | "1: ldq_l %2,0(%3)\n" | ||
446 | " extbl %2,%4,%0\n" | ||
447 | " mskbl %2,%4,%2\n" | ||
448 | " or %1,%2,%2\n" | ||
449 | " stq_c %2,0(%3)\n" | ||
450 | " beq %2,2f\n" | ||
451 | ".subsection 2\n" | ||
452 | "2: br 1b\n" | ||
453 | ".previous" | ||
454 | : "=&r" (ret), "=&r" (val), "=&r" (tmp), "=&r" (addr64) | ||
455 | : "r" ((long)m), "1" (val) : "memory"); | ||
456 | |||
457 | return ret; | ||
458 | } | ||
459 | |||
460 | static inline unsigned long | ||
461 | __xchg_u16_local(volatile short *m, unsigned long val) | ||
462 | { | ||
463 | unsigned long ret, tmp, addr64; | ||
464 | |||
465 | __asm__ __volatile__( | ||
466 | " andnot %4,7,%3\n" | ||
467 | " inswl %1,%4,%1\n" | ||
468 | "1: ldq_l %2,0(%3)\n" | ||
469 | " extwl %2,%4,%0\n" | ||
470 | " mskwl %2,%4,%2\n" | ||
471 | " or %1,%2,%2\n" | ||
472 | " stq_c %2,0(%3)\n" | ||
473 | " beq %2,2f\n" | ||
474 | ".subsection 2\n" | ||
475 | "2: br 1b\n" | ||
476 | ".previous" | ||
477 | : "=&r" (ret), "=&r" (val), "=&r" (tmp), "=&r" (addr64) | ||
478 | : "r" ((long)m), "1" (val) : "memory"); | ||
479 | |||
480 | return ret; | ||
481 | } | ||
482 | |||
483 | static inline unsigned long | ||
484 | __xchg_u32_local(volatile int *m, unsigned long val) | ||
485 | { | ||
486 | unsigned long dummy; | ||
487 | |||
488 | __asm__ __volatile__( | ||
489 | "1: ldl_l %0,%4\n" | ||
490 | " bis $31,%3,%1\n" | ||
491 | " stl_c %1,%2\n" | ||
492 | " beq %1,2f\n" | ||
493 | ".subsection 2\n" | ||
494 | "2: br 1b\n" | ||
495 | ".previous" | ||
496 | : "=&r" (val), "=&r" (dummy), "=m" (*m) | ||
497 | : "rI" (val), "m" (*m) : "memory"); | ||
498 | |||
499 | return val; | ||
500 | } | ||
501 | |||
502 | static inline unsigned long | ||
503 | __xchg_u64_local(volatile long *m, unsigned long val) | ||
504 | { | ||
505 | unsigned long dummy; | ||
506 | |||
507 | __asm__ __volatile__( | ||
508 | "1: ldq_l %0,%4\n" | ||
509 | " bis $31,%3,%1\n" | ||
510 | " stq_c %1,%2\n" | ||
511 | " beq %1,2f\n" | ||
512 | ".subsection 2\n" | ||
513 | "2: br 1b\n" | ||
514 | ".previous" | ||
515 | : "=&r" (val), "=&r" (dummy), "=m" (*m) | ||
516 | : "rI" (val), "m" (*m) : "memory"); | ||
517 | |||
518 | return val; | ||
519 | } | ||
520 | |||
521 | #define __xchg_local(ptr, x, size) \ | ||
522 | ({ \ | ||
523 | unsigned long __xchg__res; \ | ||
524 | volatile void *__xchg__ptr = (ptr); \ | ||
525 | switch (size) { \ | ||
526 | case 1: __xchg__res = __xchg_u8_local(__xchg__ptr, x); break; \ | ||
527 | case 2: __xchg__res = __xchg_u16_local(__xchg__ptr, x); break; \ | ||
528 | case 4: __xchg__res = __xchg_u32_local(__xchg__ptr, x); break; \ | ||
529 | case 8: __xchg__res = __xchg_u64_local(__xchg__ptr, x); break; \ | ||
530 | default: __xchg_called_with_bad_pointer(); __xchg__res = x; \ | ||
531 | } \ | ||
532 | __xchg__res; \ | ||
533 | }) | ||
534 | |||
535 | #define xchg_local(ptr,x) \ | ||
536 | ({ \ | ||
537 | __typeof__(*(ptr)) _x_ = (x); \ | ||
538 | (__typeof__(*(ptr))) __xchg_local((ptr), (unsigned long)_x_, \ | ||
539 | sizeof(*(ptr))); \ | ||
540 | }) | 334 | }) |
541 | 335 | ||
542 | /* | 336 | #define cmpxchg64_local(ptr, o, n) \ |
543 | * Atomic compare and exchange. Compare OLD with MEM, if identical, | 337 | ({ \ |
544 | * store NEW in MEM. Return the initial value in MEM. Success is | 338 | BUILD_BUG_ON(sizeof(*(ptr)) != 8); \ |
545 | * indicated by comparing RETURN with OLD. | 339 | cmpxchg_local((ptr), (o), (n)); \ |
546 | * | 340 | }) |
547 | * The memory barrier should be placed in SMP only when we actually | ||
548 | * make the change. If we don't change anything (so if the returned | ||
549 | * prev is equal to old) then we aren't acquiring anything new and | ||
550 | * we don't need any memory barrier as far I can tell. | ||
551 | */ | ||
552 | |||
553 | #define __HAVE_ARCH_CMPXCHG 1 | ||
554 | |||
555 | static inline unsigned long | ||
556 | __cmpxchg_u8(volatile char *m, long old, long new) | ||
557 | { | ||
558 | unsigned long prev, tmp, cmp, addr64; | ||
559 | |||
560 | __asm__ __volatile__( | ||
561 | " andnot %5,7,%4\n" | ||
562 | " insbl %1,%5,%1\n" | ||
563 | "1: ldq_l %2,0(%4)\n" | ||
564 | " extbl %2,%5,%0\n" | ||
565 | " cmpeq %0,%6,%3\n" | ||
566 | " beq %3,2f\n" | ||
567 | " mskbl %2,%5,%2\n" | ||
568 | " or %1,%2,%2\n" | ||
569 | " stq_c %2,0(%4)\n" | ||
570 | " beq %2,3f\n" | ||
571 | #ifdef CONFIG_SMP | ||
572 | " mb\n" | ||
573 | #endif | ||
574 | "2:\n" | ||
575 | ".subsection 2\n" | ||
576 | "3: br 1b\n" | ||
577 | ".previous" | ||
578 | : "=&r" (prev), "=&r" (new), "=&r" (tmp), "=&r" (cmp), "=&r" (addr64) | ||
579 | : "r" ((long)m), "Ir" (old), "1" (new) : "memory"); | ||
580 | |||
581 | return prev; | ||
582 | } | ||
583 | |||
584 | static inline unsigned long | ||
585 | __cmpxchg_u16(volatile short *m, long old, long new) | ||
586 | { | ||
587 | unsigned long prev, tmp, cmp, addr64; | ||
588 | |||
589 | __asm__ __volatile__( | ||
590 | " andnot %5,7,%4\n" | ||
591 | " inswl %1,%5,%1\n" | ||
592 | "1: ldq_l %2,0(%4)\n" | ||
593 | " extwl %2,%5,%0\n" | ||
594 | " cmpeq %0,%6,%3\n" | ||
595 | " beq %3,2f\n" | ||
596 | " mskwl %2,%5,%2\n" | ||
597 | " or %1,%2,%2\n" | ||
598 | " stq_c %2,0(%4)\n" | ||
599 | " beq %2,3f\n" | ||
600 | #ifdef CONFIG_SMP | ||
601 | " mb\n" | ||
602 | #endif | ||
603 | "2:\n" | ||
604 | ".subsection 2\n" | ||
605 | "3: br 1b\n" | ||
606 | ".previous" | ||
607 | : "=&r" (prev), "=&r" (new), "=&r" (tmp), "=&r" (cmp), "=&r" (addr64) | ||
608 | : "r" ((long)m), "Ir" (old), "1" (new) : "memory"); | ||
609 | |||
610 | return prev; | ||
611 | } | ||
612 | |||
613 | static inline unsigned long | ||
614 | __cmpxchg_u32(volatile int *m, int old, int new) | ||
615 | { | ||
616 | unsigned long prev, cmp; | ||
617 | |||
618 | __asm__ __volatile__( | ||
619 | "1: ldl_l %0,%5\n" | ||
620 | " cmpeq %0,%3,%1\n" | ||
621 | " beq %1,2f\n" | ||
622 | " mov %4,%1\n" | ||
623 | " stl_c %1,%2\n" | ||
624 | " beq %1,3f\n" | ||
625 | #ifdef CONFIG_SMP | ||
626 | " mb\n" | ||
627 | #endif | ||
628 | "2:\n" | ||
629 | ".subsection 2\n" | ||
630 | "3: br 1b\n" | ||
631 | ".previous" | ||
632 | : "=&r"(prev), "=&r"(cmp), "=m"(*m) | ||
633 | : "r"((long) old), "r"(new), "m"(*m) : "memory"); | ||
634 | |||
635 | return prev; | ||
636 | } | ||
637 | 341 | ||
638 | static inline unsigned long | ||
639 | __cmpxchg_u64(volatile long *m, unsigned long old, unsigned long new) | ||
640 | { | ||
641 | unsigned long prev, cmp; | ||
642 | |||
643 | __asm__ __volatile__( | ||
644 | "1: ldq_l %0,%5\n" | ||
645 | " cmpeq %0,%3,%1\n" | ||
646 | " beq %1,2f\n" | ||
647 | " mov %4,%1\n" | ||
648 | " stq_c %1,%2\n" | ||
649 | " beq %1,3f\n" | ||
650 | #ifdef CONFIG_SMP | 342 | #ifdef CONFIG_SMP |
651 | " mb\n" | 343 | #undef __ASM__MB |
344 | #define __ASM__MB "\tmb\n" | ||
652 | #endif | 345 | #endif |
653 | "2:\n" | 346 | #undef ____xchg |
654 | ".subsection 2\n" | 347 | #undef ____cmpxchg |
655 | "3: br 1b\n" | 348 | #define ____xchg(type, args...) __xchg ##type(args) |
656 | ".previous" | 349 | #define ____cmpxchg(type, args...) __cmpxchg ##type(args) |
657 | : "=&r"(prev), "=&r"(cmp), "=m"(*m) | 350 | #include <asm/xchg.h> |
658 | : "r"((long) old), "r"(new), "m"(*m) : "memory"); | 351 | |
659 | 352 | #define xchg(ptr,x) \ | |
660 | return prev; | 353 | ({ \ |
661 | } | 354 | __typeof__(*(ptr)) _x_ = (x); \ |
662 | 355 | (__typeof__(*(ptr))) __xchg((ptr), (unsigned long)_x_, \ | |
663 | /* This function doesn't exist, so you'll get a linker error | 356 | sizeof(*(ptr))); \ |
664 | if something tries to do an invalid cmpxchg(). */ | ||
665 | extern void __cmpxchg_called_with_bad_pointer(void); | ||
666 | |||
667 | static __always_inline unsigned long | ||
668 | __cmpxchg(volatile void *ptr, unsigned long old, unsigned long new, int size) | ||
669 | { | ||
670 | switch (size) { | ||
671 | case 1: | ||
672 | return __cmpxchg_u8(ptr, old, new); | ||
673 | case 2: | ||
674 | return __cmpxchg_u16(ptr, old, new); | ||
675 | case 4: | ||
676 | return __cmpxchg_u32(ptr, old, new); | ||
677 | case 8: | ||
678 | return __cmpxchg_u64(ptr, old, new); | ||
679 | } | ||
680 | __cmpxchg_called_with_bad_pointer(); | ||
681 | return old; | ||
682 | } | ||
683 | |||
684 | #define cmpxchg(ptr, o, n) \ | ||
685 | ({ \ | ||
686 | __typeof__(*(ptr)) _o_ = (o); \ | ||
687 | __typeof__(*(ptr)) _n_ = (n); \ | ||
688 | (__typeof__(*(ptr))) __cmpxchg((ptr), (unsigned long)_o_, \ | ||
689 | (unsigned long)_n_, sizeof(*(ptr))); \ | ||
690 | }) | 357 | }) |
691 | #define cmpxchg64(ptr, o, n) \ | ||
692 | ({ \ | ||
693 | BUILD_BUG_ON(sizeof(*(ptr)) != 8); \ | ||
694 | cmpxchg((ptr), (o), (n)); \ | ||
695 | }) | ||
696 | |||
697 | static inline unsigned long | ||
698 | __cmpxchg_u8_local(volatile char *m, long old, long new) | ||
699 | { | ||
700 | unsigned long prev, tmp, cmp, addr64; | ||
701 | |||
702 | __asm__ __volatile__( | ||
703 | " andnot %5,7,%4\n" | ||
704 | " insbl %1,%5,%1\n" | ||
705 | "1: ldq_l %2,0(%4)\n" | ||
706 | " extbl %2,%5,%0\n" | ||
707 | " cmpeq %0,%6,%3\n" | ||
708 | " beq %3,2f\n" | ||
709 | " mskbl %2,%5,%2\n" | ||
710 | " or %1,%2,%2\n" | ||
711 | " stq_c %2,0(%4)\n" | ||
712 | " beq %2,3f\n" | ||
713 | "2:\n" | ||
714 | ".subsection 2\n" | ||
715 | "3: br 1b\n" | ||
716 | ".previous" | ||
717 | : "=&r" (prev), "=&r" (new), "=&r" (tmp), "=&r" (cmp), "=&r" (addr64) | ||
718 | : "r" ((long)m), "Ir" (old), "1" (new) : "memory"); | ||
719 | |||
720 | return prev; | ||
721 | } | ||
722 | |||
723 | static inline unsigned long | ||
724 | __cmpxchg_u16_local(volatile short *m, long old, long new) | ||
725 | { | ||
726 | unsigned long prev, tmp, cmp, addr64; | ||
727 | |||
728 | __asm__ __volatile__( | ||
729 | " andnot %5,7,%4\n" | ||
730 | " inswl %1,%5,%1\n" | ||
731 | "1: ldq_l %2,0(%4)\n" | ||
732 | " extwl %2,%5,%0\n" | ||
733 | " cmpeq %0,%6,%3\n" | ||
734 | " beq %3,2f\n" | ||
735 | " mskwl %2,%5,%2\n" | ||
736 | " or %1,%2,%2\n" | ||
737 | " stq_c %2,0(%4)\n" | ||
738 | " beq %2,3f\n" | ||
739 | "2:\n" | ||
740 | ".subsection 2\n" | ||
741 | "3: br 1b\n" | ||
742 | ".previous" | ||
743 | : "=&r" (prev), "=&r" (new), "=&r" (tmp), "=&r" (cmp), "=&r" (addr64) | ||
744 | : "r" ((long)m), "Ir" (old), "1" (new) : "memory"); | ||
745 | |||
746 | return prev; | ||
747 | } | ||
748 | |||
749 | static inline unsigned long | ||
750 | __cmpxchg_u32_local(volatile int *m, int old, int new) | ||
751 | { | ||
752 | unsigned long prev, cmp; | ||
753 | |||
754 | __asm__ __volatile__( | ||
755 | "1: ldl_l %0,%5\n" | ||
756 | " cmpeq %0,%3,%1\n" | ||
757 | " beq %1,2f\n" | ||
758 | " mov %4,%1\n" | ||
759 | " stl_c %1,%2\n" | ||
760 | " beq %1,3f\n" | ||
761 | "2:\n" | ||
762 | ".subsection 2\n" | ||
763 | "3: br 1b\n" | ||
764 | ".previous" | ||
765 | : "=&r"(prev), "=&r"(cmp), "=m"(*m) | ||
766 | : "r"((long) old), "r"(new), "m"(*m) : "memory"); | ||
767 | |||
768 | return prev; | ||
769 | } | ||
770 | |||
771 | static inline unsigned long | ||
772 | __cmpxchg_u64_local(volatile long *m, unsigned long old, unsigned long new) | ||
773 | { | ||
774 | unsigned long prev, cmp; | ||
775 | |||
776 | __asm__ __volatile__( | ||
777 | "1: ldq_l %0,%5\n" | ||
778 | " cmpeq %0,%3,%1\n" | ||
779 | " beq %1,2f\n" | ||
780 | " mov %4,%1\n" | ||
781 | " stq_c %1,%2\n" | ||
782 | " beq %1,3f\n" | ||
783 | "2:\n" | ||
784 | ".subsection 2\n" | ||
785 | "3: br 1b\n" | ||
786 | ".previous" | ||
787 | : "=&r"(prev), "=&r"(cmp), "=m"(*m) | ||
788 | : "r"((long) old), "r"(new), "m"(*m) : "memory"); | ||
789 | |||
790 | return prev; | ||
791 | } | ||
792 | |||
793 | static __always_inline unsigned long | ||
794 | __cmpxchg_local(volatile void *ptr, unsigned long old, unsigned long new, | ||
795 | int size) | ||
796 | { | ||
797 | switch (size) { | ||
798 | case 1: | ||
799 | return __cmpxchg_u8_local(ptr, old, new); | ||
800 | case 2: | ||
801 | return __cmpxchg_u16_local(ptr, old, new); | ||
802 | case 4: | ||
803 | return __cmpxchg_u32_local(ptr, old, new); | ||
804 | case 8: | ||
805 | return __cmpxchg_u64_local(ptr, old, new); | ||
806 | } | ||
807 | __cmpxchg_called_with_bad_pointer(); | ||
808 | return old; | ||
809 | } | ||
810 | 358 | ||
811 | #define cmpxchg_local(ptr, o, n) \ | 359 | #define cmpxchg(ptr, o, n) \ |
812 | ({ \ | 360 | ({ \ |
813 | __typeof__(*(ptr)) _o_ = (o); \ | 361 | __typeof__(*(ptr)) _o_ = (o); \ |
814 | __typeof__(*(ptr)) _n_ = (n); \ | 362 | __typeof__(*(ptr)) _n_ = (n); \ |
815 | (__typeof__(*(ptr))) __cmpxchg_local((ptr), (unsigned long)_o_, \ | 363 | (__typeof__(*(ptr))) __cmpxchg((ptr), (unsigned long)_o_, \ |
816 | (unsigned long)_n_, sizeof(*(ptr))); \ | 364 | (unsigned long)_n_, sizeof(*(ptr)));\ |
817 | }) | 365 | }) |
818 | #define cmpxchg64_local(ptr, o, n) \ | 366 | |
819 | ({ \ | 367 | #define cmpxchg64(ptr, o, n) \ |
820 | BUILD_BUG_ON(sizeof(*(ptr)) != 8); \ | 368 | ({ \ |
821 | cmpxchg_local((ptr), (o), (n)); \ | 369 | BUILD_BUG_ON(sizeof(*(ptr)) != 8); \ |
370 | cmpxchg((ptr), (o), (n)); \ | ||
822 | }) | 371 | }) |
823 | 372 | ||
373 | #undef __ASM__MB | ||
374 | #undef ____cmpxchg | ||
375 | |||
376 | #define __HAVE_ARCH_CMPXCHG 1 | ||
824 | 377 | ||
825 | #endif /* __ASSEMBLY__ */ | 378 | #endif /* __ASSEMBLY__ */ |
826 | 379 | ||
diff --git a/arch/alpha/include/asm/types.h b/arch/alpha/include/asm/types.h index c1541353ccef..f072f344497e 100644 --- a/arch/alpha/include/asm/types.h +++ b/arch/alpha/include/asm/types.h | |||
@@ -8,7 +8,12 @@ | |||
8 | * not a major issue. However, for interoperability, libraries still | 8 | * not a major issue. However, for interoperability, libraries still |
9 | * need to be careful to avoid a name clashes. | 9 | * need to be careful to avoid a name clashes. |
10 | */ | 10 | */ |
11 | |||
12 | #ifdef __KERNEL__ | ||
13 | #include <asm-generic/int-ll64.h> | ||
14 | #else | ||
11 | #include <asm-generic/int-l64.h> | 15 | #include <asm-generic/int-l64.h> |
16 | #endif | ||
12 | 17 | ||
13 | #ifndef __ASSEMBLY__ | 18 | #ifndef __ASSEMBLY__ |
14 | 19 | ||
diff --git a/arch/alpha/include/asm/uaccess.h b/arch/alpha/include/asm/uaccess.h index 22de3b434a22..163f3053001c 100644 --- a/arch/alpha/include/asm/uaccess.h +++ b/arch/alpha/include/asm/uaccess.h | |||
@@ -498,13 +498,13 @@ struct exception_table_entry | |||
498 | }; | 498 | }; |
499 | 499 | ||
500 | /* Returns the new pc */ | 500 | /* Returns the new pc */ |
501 | #define fixup_exception(map_reg, fixup, pc) \ | 501 | #define fixup_exception(map_reg, _fixup, pc) \ |
502 | ({ \ | 502 | ({ \ |
503 | if ((fixup)->fixup.bits.valreg != 31) \ | 503 | if ((_fixup)->fixup.bits.valreg != 31) \ |
504 | map_reg((fixup)->fixup.bits.valreg) = 0; \ | 504 | map_reg((_fixup)->fixup.bits.valreg) = 0; \ |
505 | if ((fixup)->fixup.bits.errreg != 31) \ | 505 | if ((_fixup)->fixup.bits.errreg != 31) \ |
506 | map_reg((fixup)->fixup.bits.errreg) = -EFAULT; \ | 506 | map_reg((_fixup)->fixup.bits.errreg) = -EFAULT; \ |
507 | (pc) + (fixup)->fixup.bits.nextinsn; \ | 507 | (pc) + (_fixup)->fixup.bits.nextinsn; \ |
508 | }) | 508 | }) |
509 | 509 | ||
510 | 510 | ||
diff --git a/arch/alpha/include/asm/xchg.h b/arch/alpha/include/asm/xchg.h new file mode 100644 index 000000000000..beba1b803e0d --- /dev/null +++ b/arch/alpha/include/asm/xchg.h | |||
@@ -0,0 +1,258 @@ | |||
1 | #ifndef __ALPHA_SYSTEM_H | ||
2 | #error Do not include xchg.h directly! | ||
3 | #else | ||
4 | /* | ||
5 | * xchg/xchg_local and cmpxchg/cmpxchg_local share the same code | ||
6 | * except that local version do not have the expensive memory barrier. | ||
7 | * So this file is included twice from asm/system.h. | ||
8 | */ | ||
9 | |||
10 | /* | ||
11 | * Atomic exchange. | ||
12 | * Since it can be used to implement critical sections | ||
13 | * it must clobber "memory" (also for interrupts in UP). | ||
14 | */ | ||
15 | |||
16 | static inline unsigned long | ||
17 | ____xchg(_u8, volatile char *m, unsigned long val) | ||
18 | { | ||
19 | unsigned long ret, tmp, addr64; | ||
20 | |||
21 | __asm__ __volatile__( | ||
22 | " andnot %4,7,%3\n" | ||
23 | " insbl %1,%4,%1\n" | ||
24 | "1: ldq_l %2,0(%3)\n" | ||
25 | " extbl %2,%4,%0\n" | ||
26 | " mskbl %2,%4,%2\n" | ||
27 | " or %1,%2,%2\n" | ||
28 | " stq_c %2,0(%3)\n" | ||
29 | " beq %2,2f\n" | ||
30 | __ASM__MB | ||
31 | ".subsection 2\n" | ||
32 | "2: br 1b\n" | ||
33 | ".previous" | ||
34 | : "=&r" (ret), "=&r" (val), "=&r" (tmp), "=&r" (addr64) | ||
35 | : "r" ((long)m), "1" (val) : "memory"); | ||
36 | |||
37 | return ret; | ||
38 | } | ||
39 | |||
40 | static inline unsigned long | ||
41 | ____xchg(_u16, volatile short *m, unsigned long val) | ||
42 | { | ||
43 | unsigned long ret, tmp, addr64; | ||
44 | |||
45 | __asm__ __volatile__( | ||
46 | " andnot %4,7,%3\n" | ||
47 | " inswl %1,%4,%1\n" | ||
48 | "1: ldq_l %2,0(%3)\n" | ||
49 | " extwl %2,%4,%0\n" | ||
50 | " mskwl %2,%4,%2\n" | ||
51 | " or %1,%2,%2\n" | ||
52 | " stq_c %2,0(%3)\n" | ||
53 | " beq %2,2f\n" | ||
54 | __ASM__MB | ||
55 | ".subsection 2\n" | ||
56 | "2: br 1b\n" | ||
57 | ".previous" | ||
58 | : "=&r" (ret), "=&r" (val), "=&r" (tmp), "=&r" (addr64) | ||
59 | : "r" ((long)m), "1" (val) : "memory"); | ||
60 | |||
61 | return ret; | ||
62 | } | ||
63 | |||
64 | static inline unsigned long | ||
65 | ____xchg(_u32, volatile int *m, unsigned long val) | ||
66 | { | ||
67 | unsigned long dummy; | ||
68 | |||
69 | __asm__ __volatile__( | ||
70 | "1: ldl_l %0,%4\n" | ||
71 | " bis $31,%3,%1\n" | ||
72 | " stl_c %1,%2\n" | ||
73 | " beq %1,2f\n" | ||
74 | __ASM__MB | ||
75 | ".subsection 2\n" | ||
76 | "2: br 1b\n" | ||
77 | ".previous" | ||
78 | : "=&r" (val), "=&r" (dummy), "=m" (*m) | ||
79 | : "rI" (val), "m" (*m) : "memory"); | ||
80 | |||
81 | return val; | ||
82 | } | ||
83 | |||
84 | static inline unsigned long | ||
85 | ____xchg(_u64, volatile long *m, unsigned long val) | ||
86 | { | ||
87 | unsigned long dummy; | ||
88 | |||
89 | __asm__ __volatile__( | ||
90 | "1: ldq_l %0,%4\n" | ||
91 | " bis $31,%3,%1\n" | ||
92 | " stq_c %1,%2\n" | ||
93 | " beq %1,2f\n" | ||
94 | __ASM__MB | ||
95 | ".subsection 2\n" | ||
96 | "2: br 1b\n" | ||
97 | ".previous" | ||
98 | : "=&r" (val), "=&r" (dummy), "=m" (*m) | ||
99 | : "rI" (val), "m" (*m) : "memory"); | ||
100 | |||
101 | return val; | ||
102 | } | ||
103 | |||
104 | /* This function doesn't exist, so you'll get a linker error | ||
105 | if something tries to do an invalid xchg(). */ | ||
106 | extern void __xchg_called_with_bad_pointer(void); | ||
107 | |||
108 | static __always_inline unsigned long | ||
109 | ____xchg(, volatile void *ptr, unsigned long x, int size) | ||
110 | { | ||
111 | switch (size) { | ||
112 | case 1: | ||
113 | return ____xchg(_u8, ptr, x); | ||
114 | case 2: | ||
115 | return ____xchg(_u16, ptr, x); | ||
116 | case 4: | ||
117 | return ____xchg(_u32, ptr, x); | ||
118 | case 8: | ||
119 | return ____xchg(_u64, ptr, x); | ||
120 | } | ||
121 | __xchg_called_with_bad_pointer(); | ||
122 | return x; | ||
123 | } | ||
124 | |||
125 | /* | ||
126 | * Atomic compare and exchange. Compare OLD with MEM, if identical, | ||
127 | * store NEW in MEM. Return the initial value in MEM. Success is | ||
128 | * indicated by comparing RETURN with OLD. | ||
129 | * | ||
130 | * The memory barrier should be placed in SMP only when we actually | ||
131 | * make the change. If we don't change anything (so if the returned | ||
132 | * prev is equal to old) then we aren't acquiring anything new and | ||
133 | * we don't need any memory barrier as far I can tell. | ||
134 | */ | ||
135 | |||
136 | static inline unsigned long | ||
137 | ____cmpxchg(_u8, volatile char *m, unsigned char old, unsigned char new) | ||
138 | { | ||
139 | unsigned long prev, tmp, cmp, addr64; | ||
140 | |||
141 | __asm__ __volatile__( | ||
142 | " andnot %5,7,%4\n" | ||
143 | " insbl %1,%5,%1\n" | ||
144 | "1: ldq_l %2,0(%4)\n" | ||
145 | " extbl %2,%5,%0\n" | ||
146 | " cmpeq %0,%6,%3\n" | ||
147 | " beq %3,2f\n" | ||
148 | " mskbl %2,%5,%2\n" | ||
149 | " or %1,%2,%2\n" | ||
150 | " stq_c %2,0(%4)\n" | ||
151 | " beq %2,3f\n" | ||
152 | __ASM__MB | ||
153 | "2:\n" | ||
154 | ".subsection 2\n" | ||
155 | "3: br 1b\n" | ||
156 | ".previous" | ||
157 | : "=&r" (prev), "=&r" (new), "=&r" (tmp), "=&r" (cmp), "=&r" (addr64) | ||
158 | : "r" ((long)m), "Ir" (old), "1" (new) : "memory"); | ||
159 | |||
160 | return prev; | ||
161 | } | ||
162 | |||
163 | static inline unsigned long | ||
164 | ____cmpxchg(_u16, volatile short *m, unsigned short old, unsigned short new) | ||
165 | { | ||
166 | unsigned long prev, tmp, cmp, addr64; | ||
167 | |||
168 | __asm__ __volatile__( | ||
169 | " andnot %5,7,%4\n" | ||
170 | " inswl %1,%5,%1\n" | ||
171 | "1: ldq_l %2,0(%4)\n" | ||
172 | " extwl %2,%5,%0\n" | ||
173 | " cmpeq %0,%6,%3\n" | ||
174 | " beq %3,2f\n" | ||
175 | " mskwl %2,%5,%2\n" | ||
176 | " or %1,%2,%2\n" | ||
177 | " stq_c %2,0(%4)\n" | ||
178 | " beq %2,3f\n" | ||
179 | __ASM__MB | ||
180 | "2:\n" | ||
181 | ".subsection 2\n" | ||
182 | "3: br 1b\n" | ||
183 | ".previous" | ||
184 | : "=&r" (prev), "=&r" (new), "=&r" (tmp), "=&r" (cmp), "=&r" (addr64) | ||
185 | : "r" ((long)m), "Ir" (old), "1" (new) : "memory"); | ||
186 | |||
187 | return prev; | ||
188 | } | ||
189 | |||
190 | static inline unsigned long | ||
191 | ____cmpxchg(_u32, volatile int *m, int old, int new) | ||
192 | { | ||
193 | unsigned long prev, cmp; | ||
194 | |||
195 | __asm__ __volatile__( | ||
196 | "1: ldl_l %0,%5\n" | ||
197 | " cmpeq %0,%3,%1\n" | ||
198 | " beq %1,2f\n" | ||
199 | " mov %4,%1\n" | ||
200 | " stl_c %1,%2\n" | ||
201 | " beq %1,3f\n" | ||
202 | __ASM__MB | ||
203 | "2:\n" | ||
204 | ".subsection 2\n" | ||
205 | "3: br 1b\n" | ||
206 | ".previous" | ||
207 | : "=&r"(prev), "=&r"(cmp), "=m"(*m) | ||
208 | : "r"((long) old), "r"(new), "m"(*m) : "memory"); | ||
209 | |||
210 | return prev; | ||
211 | } | ||
212 | |||
213 | static inline unsigned long | ||
214 | ____cmpxchg(_u64, volatile long *m, unsigned long old, unsigned long new) | ||
215 | { | ||
216 | unsigned long prev, cmp; | ||
217 | |||
218 | __asm__ __volatile__( | ||
219 | "1: ldq_l %0,%5\n" | ||
220 | " cmpeq %0,%3,%1\n" | ||
221 | " beq %1,2f\n" | ||
222 | " mov %4,%1\n" | ||
223 | " stq_c %1,%2\n" | ||
224 | " beq %1,3f\n" | ||
225 | __ASM__MB | ||
226 | "2:\n" | ||
227 | ".subsection 2\n" | ||
228 | "3: br 1b\n" | ||
229 | ".previous" | ||
230 | : "=&r"(prev), "=&r"(cmp), "=m"(*m) | ||
231 | : "r"((long) old), "r"(new), "m"(*m) : "memory"); | ||
232 | |||
233 | return prev; | ||
234 | } | ||
235 | |||
236 | /* This function doesn't exist, so you'll get a linker error | ||
237 | if something tries to do an invalid cmpxchg(). */ | ||
238 | extern void __cmpxchg_called_with_bad_pointer(void); | ||
239 | |||
240 | static __always_inline unsigned long | ||
241 | ____cmpxchg(, volatile void *ptr, unsigned long old, unsigned long new, | ||
242 | int size) | ||
243 | { | ||
244 | switch (size) { | ||
245 | case 1: | ||
246 | return ____cmpxchg(_u8, ptr, old, new); | ||
247 | case 2: | ||
248 | return ____cmpxchg(_u16, ptr, old, new); | ||
249 | case 4: | ||
250 | return ____cmpxchg(_u32, ptr, old, new); | ||
251 | case 8: | ||
252 | return ____cmpxchg(_u64, ptr, old, new); | ||
253 | } | ||
254 | __cmpxchg_called_with_bad_pointer(); | ||
255 | return old; | ||
256 | } | ||
257 | |||
258 | #endif | ||
diff --git a/arch/alpha/kernel/Makefile b/arch/alpha/kernel/Makefile index b4697759a123..a427538252f8 100644 --- a/arch/alpha/kernel/Makefile +++ b/arch/alpha/kernel/Makefile | |||
@@ -12,7 +12,7 @@ obj-y := entry.o traps.o process.o init_task.o osf_sys.o irq.o \ | |||
12 | 12 | ||
13 | obj-$(CONFIG_VGA_HOSE) += console.o | 13 | obj-$(CONFIG_VGA_HOSE) += console.o |
14 | obj-$(CONFIG_SMP) += smp.o | 14 | obj-$(CONFIG_SMP) += smp.o |
15 | obj-$(CONFIG_PCI) += pci.o pci_iommu.o | 15 | obj-$(CONFIG_PCI) += pci.o pci_iommu.o pci-sysfs.o |
16 | obj-$(CONFIG_SRM_ENV) += srm_env.o | 16 | obj-$(CONFIG_SRM_ENV) += srm_env.o |
17 | obj-$(CONFIG_MODULES) += module.o | 17 | obj-$(CONFIG_MODULES) += module.o |
18 | 18 | ||
diff --git a/arch/alpha/kernel/err_ev6.c b/arch/alpha/kernel/err_ev6.c index 11aee012a8ae..985e5c1681ac 100644 --- a/arch/alpha/kernel/err_ev6.c +++ b/arch/alpha/kernel/err_ev6.c | |||
@@ -157,8 +157,8 @@ ev6_parse_cbox(u64 c_addr, u64 c1_syn, u64 c2_syn, | |||
157 | err_print_prefix, | 157 | err_print_prefix, |
158 | streamname[stream], bitsname[bits], sourcename[source]); | 158 | streamname[stream], bitsname[bits], sourcename[source]); |
159 | 159 | ||
160 | printk("%s Address: 0x%016lx\n" | 160 | printk("%s Address: 0x%016llx\n" |
161 | " Syndrome[upper.lower]: %02lx.%02lx\n", | 161 | " Syndrome[upper.lower]: %02llx.%02llx\n", |
162 | err_print_prefix, | 162 | err_print_prefix, |
163 | c_addr, | 163 | c_addr, |
164 | c2_syn, c1_syn); | 164 | c2_syn, c1_syn); |
diff --git a/arch/alpha/kernel/err_ev7.c b/arch/alpha/kernel/err_ev7.c index 68cd493f54c5..73770c6ca013 100644 --- a/arch/alpha/kernel/err_ev7.c +++ b/arch/alpha/kernel/err_ev7.c | |||
@@ -246,13 +246,13 @@ ev7_process_pal_subpacket(struct el_subpacket *header) | |||
246 | 246 | ||
247 | switch(header->type) { | 247 | switch(header->type) { |
248 | case EL_TYPE__PAL__LOGOUT_FRAME: | 248 | case EL_TYPE__PAL__LOGOUT_FRAME: |
249 | printk("%s*** MCHK occurred on LPID %ld (RBOX %lx)\n", | 249 | printk("%s*** MCHK occurred on LPID %ld (RBOX %llx)\n", |
250 | err_print_prefix, | 250 | err_print_prefix, |
251 | packet->by_type.logout.whami, | 251 | packet->by_type.logout.whami, |
252 | packet->by_type.logout.rbox_whami); | 252 | packet->by_type.logout.rbox_whami); |
253 | el_print_timestamp(&packet->by_type.logout.timestamp); | 253 | el_print_timestamp(&packet->by_type.logout.timestamp); |
254 | printk("%s EXC_ADDR: %016lx\n" | 254 | printk("%s EXC_ADDR: %016llx\n" |
255 | " HALT_CODE: %lx\n", | 255 | " HALT_CODE: %llx\n", |
256 | err_print_prefix, | 256 | err_print_prefix, |
257 | packet->by_type.logout.exc_addr, | 257 | packet->by_type.logout.exc_addr, |
258 | packet->by_type.logout.halt_code); | 258 | packet->by_type.logout.halt_code); |
diff --git a/arch/alpha/kernel/err_marvel.c b/arch/alpha/kernel/err_marvel.c index 413bf37eb094..6bfd243efba3 100644 --- a/arch/alpha/kernel/err_marvel.c +++ b/arch/alpha/kernel/err_marvel.c | |||
@@ -129,7 +129,7 @@ marvel_print_po7_crrct_sym(u64 crrct_sym) | |||
129 | 129 | ||
130 | 130 | ||
131 | printk("%s Correctable Error Symptoms:\n" | 131 | printk("%s Correctable Error Symptoms:\n" |
132 | "%s Syndrome: 0x%lx\n", | 132 | "%s Syndrome: 0x%llx\n", |
133 | err_print_prefix, | 133 | err_print_prefix, |
134 | err_print_prefix, EXTRACT(crrct_sym, IO7__PO7_CRRCT_SYM__SYN)); | 134 | err_print_prefix, EXTRACT(crrct_sym, IO7__PO7_CRRCT_SYM__SYN)); |
135 | marvel_print_err_cyc(EXTRACT(crrct_sym, IO7__PO7_CRRCT_SYM__ERR_CYC)); | 135 | marvel_print_err_cyc(EXTRACT(crrct_sym, IO7__PO7_CRRCT_SYM__ERR_CYC)); |
@@ -186,7 +186,7 @@ marvel_print_po7_uncrr_sym(u64 uncrr_sym, u64 valid_mask) | |||
186 | uncrr_sym &= valid_mask; | 186 | uncrr_sym &= valid_mask; |
187 | 187 | ||
188 | if (EXTRACT(valid_mask, IO7__PO7_UNCRR_SYM__SYN)) | 188 | if (EXTRACT(valid_mask, IO7__PO7_UNCRR_SYM__SYN)) |
189 | printk("%s Syndrome: 0x%lx\n", | 189 | printk("%s Syndrome: 0x%llx\n", |
190 | err_print_prefix, | 190 | err_print_prefix, |
191 | EXTRACT(uncrr_sym, IO7__PO7_UNCRR_SYM__SYN)); | 191 | EXTRACT(uncrr_sym, IO7__PO7_UNCRR_SYM__SYN)); |
192 | 192 | ||
@@ -307,7 +307,7 @@ marvel_print_po7_ugbge_sym(u64 ugbge_sym) | |||
307 | sprintf(opcode_str, "BlkIO"); | 307 | sprintf(opcode_str, "BlkIO"); |
308 | break; | 308 | break; |
309 | default: | 309 | default: |
310 | sprintf(opcode_str, "0x%lx\n", | 310 | sprintf(opcode_str, "0x%llx\n", |
311 | EXTRACT(ugbge_sym, IO7__PO7_UGBGE_SYM__UPH_OPCODE)); | 311 | EXTRACT(ugbge_sym, IO7__PO7_UGBGE_SYM__UPH_OPCODE)); |
312 | break; | 312 | break; |
313 | } | 313 | } |
@@ -321,7 +321,7 @@ marvel_print_po7_ugbge_sym(u64 ugbge_sym) | |||
321 | opcode_str); | 321 | opcode_str); |
322 | 322 | ||
323 | if (0xC5 != EXTRACT(ugbge_sym, IO7__PO7_UGBGE_SYM__UPH_OPCODE)) | 323 | if (0xC5 != EXTRACT(ugbge_sym, IO7__PO7_UGBGE_SYM__UPH_OPCODE)) |
324 | printk("%s Packet Offset 0x%08lx\n", | 324 | printk("%s Packet Offset 0x%08llx\n", |
325 | err_print_prefix, | 325 | err_print_prefix, |
326 | EXTRACT(ugbge_sym, IO7__PO7_UGBGE_SYM__UPH_PKT_OFF)); | 326 | EXTRACT(ugbge_sym, IO7__PO7_UGBGE_SYM__UPH_PKT_OFF)); |
327 | } | 327 | } |
@@ -480,8 +480,8 @@ marvel_print_po7_err_sum(struct ev7_pal_io_subpacket *io) | |||
480 | printk("%s Lost Error\n", err_print_prefix); | 480 | printk("%s Lost Error\n", err_print_prefix); |
481 | 481 | ||
482 | printk("%s Failing Packet:\n" | 482 | printk("%s Failing Packet:\n" |
483 | "%s Cycle 1: %016lx\n" | 483 | "%s Cycle 1: %016llx\n" |
484 | "%s Cycle 2: %016lx\n", | 484 | "%s Cycle 2: %016llx\n", |
485 | err_print_prefix, | 485 | err_print_prefix, |
486 | err_print_prefix, io->po7_err_pkt0, | 486 | err_print_prefix, io->po7_err_pkt0, |
487 | err_print_prefix, io->po7_err_pkt1); | 487 | err_print_prefix, io->po7_err_pkt1); |
@@ -515,9 +515,9 @@ marvel_print_pox_tlb_err(u64 tlb_err) | |||
515 | if (!(tlb_err & IO7__POX_TLBERR__ERR_VALID)) | 515 | if (!(tlb_err & IO7__POX_TLBERR__ERR_VALID)) |
516 | return; | 516 | return; |
517 | 517 | ||
518 | printk("%s TLB Error on index 0x%lx:\n" | 518 | printk("%s TLB Error on index 0x%llx:\n" |
519 | "%s - %s\n" | 519 | "%s - %s\n" |
520 | "%s - Addr: 0x%016lx\n", | 520 | "%s - Addr: 0x%016llx\n", |
521 | err_print_prefix, | 521 | err_print_prefix, |
522 | EXTRACT(tlb_err, IO7__POX_TLBERR__ERR_TLB_PTR), | 522 | EXTRACT(tlb_err, IO7__POX_TLBERR__ERR_TLB_PTR), |
523 | err_print_prefix, | 523 | err_print_prefix, |
@@ -579,7 +579,7 @@ marvel_print_pox_spl_cmplt(u64 spl_cmplt) | |||
579 | sprintf(message, "Uncorrectable Split Write Data Error"); | 579 | sprintf(message, "Uncorrectable Split Write Data Error"); |
580 | break; | 580 | break; |
581 | default: | 581 | default: |
582 | sprintf(message, "%08lx\n", | 582 | sprintf(message, "%08llx\n", |
583 | EXTRACT(spl_cmplt, IO7__POX_SPLCMPLT__MESSAGE)); | 583 | EXTRACT(spl_cmplt, IO7__POX_SPLCMPLT__MESSAGE)); |
584 | break; | 584 | break; |
585 | } | 585 | } |
@@ -620,9 +620,9 @@ marvel_print_pox_trans_sum(u64 trans_sum) | |||
620 | return; | 620 | return; |
621 | 621 | ||
622 | printk("%s Transaction Summary:\n" | 622 | printk("%s Transaction Summary:\n" |
623 | "%s Command: 0x%lx - %s\n" | 623 | "%s Command: 0x%llx - %s\n" |
624 | "%s Address: 0x%016lx%s\n" | 624 | "%s Address: 0x%016llx%s\n" |
625 | "%s PCI-X Master Slot: 0x%lx\n", | 625 | "%s PCI-X Master Slot: 0x%llx\n", |
626 | err_print_prefix, | 626 | err_print_prefix, |
627 | err_print_prefix, | 627 | err_print_prefix, |
628 | EXTRACT(trans_sum, IO7__POX_TRANSUM__PCIX_CMD), | 628 | EXTRACT(trans_sum, IO7__POX_TRANSUM__PCIX_CMD), |
@@ -964,12 +964,12 @@ marvel_process_io_error(struct ev7_lf_subpackets *lf_subpackets, int print) | |||
964 | 964 | ||
965 | #if 0 | 965 | #if 0 |
966 | printk("%s PORT 7 ERROR:\n" | 966 | printk("%s PORT 7 ERROR:\n" |
967 | "%s PO7_ERROR_SUM: %016lx\n" | 967 | "%s PO7_ERROR_SUM: %016llx\n" |
968 | "%s PO7_UNCRR_SYM: %016lx\n" | 968 | "%s PO7_UNCRR_SYM: %016llx\n" |
969 | "%s PO7_CRRCT_SYM: %016lx\n" | 969 | "%s PO7_CRRCT_SYM: %016llx\n" |
970 | "%s PO7_UGBGE_SYM: %016lx\n" | 970 | "%s PO7_UGBGE_SYM: %016llx\n" |
971 | "%s PO7_ERR_PKT0: %016lx\n" | 971 | "%s PO7_ERR_PKT0: %016llx\n" |
972 | "%s PO7_ERR_PKT1: %016lx\n", | 972 | "%s PO7_ERR_PKT1: %016llx\n", |
973 | err_print_prefix, | 973 | err_print_prefix, |
974 | err_print_prefix, io->po7_error_sum, | 974 | err_print_prefix, io->po7_error_sum, |
975 | err_print_prefix, io->po7_uncrr_sym, | 975 | err_print_prefix, io->po7_uncrr_sym, |
@@ -987,12 +987,12 @@ marvel_process_io_error(struct ev7_lf_subpackets *lf_subpackets, int print) | |||
987 | if (!MARVEL_IO_ERR_VALID(io->ports[i].pox_err_sum)) | 987 | if (!MARVEL_IO_ERR_VALID(io->ports[i].pox_err_sum)) |
988 | continue; | 988 | continue; |
989 | 989 | ||
990 | printk("%s PID %u PORT %d POx_ERR_SUM: %016lx\n", | 990 | printk("%s PID %u PORT %d POx_ERR_SUM: %016llx\n", |
991 | err_print_prefix, | 991 | err_print_prefix, |
992 | lf_subpackets->io_pid, i, io->ports[i].pox_err_sum); | 992 | lf_subpackets->io_pid, i, io->ports[i].pox_err_sum); |
993 | marvel_print_pox_err(io->ports[i].pox_err_sum, &io->ports[i]); | 993 | marvel_print_pox_err(io->ports[i].pox_err_sum, &io->ports[i]); |
994 | 994 | ||
995 | printk("%s [ POx_FIRST_ERR: %016lx ]\n", | 995 | printk("%s [ POx_FIRST_ERR: %016llx ]\n", |
996 | err_print_prefix, io->ports[i].pox_first_err); | 996 | err_print_prefix, io->ports[i].pox_first_err); |
997 | marvel_print_pox_err(io->ports[i].pox_first_err, | 997 | marvel_print_pox_err(io->ports[i].pox_first_err, |
998 | &io->ports[i]); | 998 | &io->ports[i]); |
diff --git a/arch/alpha/kernel/err_titan.c b/arch/alpha/kernel/err_titan.c index 257449ed15ef..c7e28a88d6e3 100644 --- a/arch/alpha/kernel/err_titan.c +++ b/arch/alpha/kernel/err_titan.c | |||
@@ -107,12 +107,12 @@ titan_parse_p_serror(int which, u64 serror, int print) | |||
107 | if (!print) | 107 | if (!print) |
108 | return status; | 108 | return status; |
109 | 109 | ||
110 | printk("%s PChip %d SERROR: %016lx\n", | 110 | printk("%s PChip %d SERROR: %016llx\n", |
111 | err_print_prefix, which, serror); | 111 | err_print_prefix, which, serror); |
112 | if (serror & TITAN__PCHIP_SERROR__ECCMASK) { | 112 | if (serror & TITAN__PCHIP_SERROR__ECCMASK) { |
113 | printk("%s %sorrectable ECC Error:\n" | 113 | printk("%s %sorrectable ECC Error:\n" |
114 | " Source: %-6s Command: %-8s Syndrome: 0x%08x\n" | 114 | " Source: %-6s Command: %-8s Syndrome: 0x%08x\n" |
115 | " Address: 0x%lx\n", | 115 | " Address: 0x%llx\n", |
116 | err_print_prefix, | 116 | err_print_prefix, |
117 | (serror & TITAN__PCHIP_SERROR__UECC) ? "Unc" : "C", | 117 | (serror & TITAN__PCHIP_SERROR__UECC) ? "Unc" : "C", |
118 | serror_src[EXTRACT(serror, TITAN__PCHIP_SERROR__SRC)], | 118 | serror_src[EXTRACT(serror, TITAN__PCHIP_SERROR__SRC)], |
@@ -223,7 +223,7 @@ titan_parse_p_perror(int which, int port, u64 perror, int print) | |||
223 | if (!print) | 223 | if (!print) |
224 | return status; | 224 | return status; |
225 | 225 | ||
226 | printk("%s PChip %d %cPERROR: %016lx\n", | 226 | printk("%s PChip %d %cPERROR: %016llx\n", |
227 | err_print_prefix, which, | 227 | err_print_prefix, which, |
228 | port ? 'A' : 'G', perror); | 228 | port ? 'A' : 'G', perror); |
229 | if (perror & TITAN__PCHIP_PERROR__IPTPW) | 229 | if (perror & TITAN__PCHIP_PERROR__IPTPW) |
@@ -316,7 +316,7 @@ titan_parse_p_agperror(int which, u64 agperror, int print) | |||
316 | addr = EXTRACT(agperror, TITAN__PCHIP_AGPERROR__ADDR) << 3; | 316 | addr = EXTRACT(agperror, TITAN__PCHIP_AGPERROR__ADDR) << 3; |
317 | len = EXTRACT(agperror, TITAN__PCHIP_AGPERROR__LEN); | 317 | len = EXTRACT(agperror, TITAN__PCHIP_AGPERROR__LEN); |
318 | 318 | ||
319 | printk("%s PChip %d AGPERROR: %016lx\n", err_print_prefix, | 319 | printk("%s PChip %d AGPERROR: %016llx\n", err_print_prefix, |
320 | which, agperror); | 320 | which, agperror); |
321 | if (agperror & TITAN__PCHIP_AGPERROR__NOWINDOW) | 321 | if (agperror & TITAN__PCHIP_AGPERROR__NOWINDOW) |
322 | printk("%s No Window\n", err_print_prefix); | 322 | printk("%s No Window\n", err_print_prefix); |
@@ -597,16 +597,16 @@ privateer_process_680_frame(struct el_common *mchk_header, int print) | |||
597 | return status; | 597 | return status; |
598 | 598 | ||
599 | /* TODO - decode instead of just dumping... */ | 599 | /* TODO - decode instead of just dumping... */ |
600 | printk("%s Summary Flags: %016lx\n" | 600 | printk("%s Summary Flags: %016llx\n" |
601 | " CChip DIRx: %016lx\n" | 601 | " CChip DIRx: %016llx\n" |
602 | " System Management IR: %016lx\n" | 602 | " System Management IR: %016llx\n" |
603 | " CPU IR: %016lx\n" | 603 | " CPU IR: %016llx\n" |
604 | " Power Supply IR: %016lx\n" | 604 | " Power Supply IR: %016llx\n" |
605 | " LM78 Fault Status: %016lx\n" | 605 | " LM78 Fault Status: %016llx\n" |
606 | " System Doors: %016lx\n" | 606 | " System Doors: %016llx\n" |
607 | " Temperature Warning: %016lx\n" | 607 | " Temperature Warning: %016llx\n" |
608 | " Fan Control: %016lx\n" | 608 | " Fan Control: %016llx\n" |
609 | " Fatal Power Down Code: %016lx\n", | 609 | " Fatal Power Down Code: %016llx\n", |
610 | err_print_prefix, | 610 | err_print_prefix, |
611 | emchk->summary, | 611 | emchk->summary, |
612 | emchk->c_dirx, | 612 | emchk->c_dirx, |
diff --git a/arch/alpha/kernel/pci-sysfs.c b/arch/alpha/kernel/pci-sysfs.c new file mode 100644 index 000000000000..6ea822e7f724 --- /dev/null +++ b/arch/alpha/kernel/pci-sysfs.c | |||
@@ -0,0 +1,366 @@ | |||
1 | /* | ||
2 | * arch/alpha/kernel/pci-sysfs.c | ||
3 | * | ||
4 | * Copyright (C) 2009 Ivan Kokshaysky | ||
5 | * | ||
6 | * Alpha PCI resource files. | ||
7 | * | ||
8 | * Loosely based on generic HAVE_PCI_MMAP implementation in | ||
9 | * drivers/pci/pci-sysfs.c | ||
10 | */ | ||
11 | |||
12 | #include <linux/sched.h> | ||
13 | #include <linux/pci.h> | ||
14 | |||
15 | static int hose_mmap_page_range(struct pci_controller *hose, | ||
16 | struct vm_area_struct *vma, | ||
17 | enum pci_mmap_state mmap_type, int sparse) | ||
18 | { | ||
19 | unsigned long base; | ||
20 | |||
21 | if (mmap_type == pci_mmap_mem) | ||
22 | base = sparse ? hose->sparse_mem_base : hose->dense_mem_base; | ||
23 | else | ||
24 | base = sparse ? hose->sparse_io_base : hose->dense_io_base; | ||
25 | |||
26 | vma->vm_pgoff += base >> PAGE_SHIFT; | ||
27 | vma->vm_flags |= (VM_IO | VM_RESERVED); | ||
28 | |||
29 | return io_remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff, | ||
30 | vma->vm_end - vma->vm_start, | ||
31 | vma->vm_page_prot); | ||
32 | } | ||
33 | |||
34 | static int __pci_mmap_fits(struct pci_dev *pdev, int num, | ||
35 | struct vm_area_struct *vma, int sparse) | ||
36 | { | ||
37 | unsigned long nr, start, size; | ||
38 | int shift = sparse ? 5 : 0; | ||
39 | |||
40 | nr = (vma->vm_end - vma->vm_start) >> PAGE_SHIFT; | ||
41 | start = vma->vm_pgoff; | ||
42 | size = ((pci_resource_len(pdev, num) - 1) >> (PAGE_SHIFT - shift)) + 1; | ||
43 | |||
44 | if (start < size && size - start >= nr) | ||
45 | return 1; | ||
46 | WARN(1, "process \"%s\" tried to map%s 0x%08lx-0x%08lx on %s BAR %d " | ||
47 | "(size 0x%08lx)\n", | ||
48 | current->comm, sparse ? " sparse" : "", start, start + nr, | ||
49 | pci_name(pdev), num, size); | ||
50 | return 0; | ||
51 | } | ||
52 | |||
53 | /** | ||
54 | * pci_mmap_resource - map a PCI resource into user memory space | ||
55 | * @kobj: kobject for mapping | ||
56 | * @attr: struct bin_attribute for the file being mapped | ||
57 | * @vma: struct vm_area_struct passed into the mmap | ||
58 | * @sparse: address space type | ||
59 | * | ||
60 | * Use the bus mapping routines to map a PCI resource into userspace. | ||
61 | */ | ||
62 | static int pci_mmap_resource(struct kobject *kobj, struct bin_attribute *attr, | ||
63 | struct vm_area_struct *vma, int sparse) | ||
64 | { | ||
65 | struct pci_dev *pdev = to_pci_dev(container_of(kobj, | ||
66 | struct device, kobj)); | ||
67 | struct resource *res = (struct resource *)attr->private; | ||
68 | enum pci_mmap_state mmap_type; | ||
69 | struct pci_bus_region bar; | ||
70 | int i; | ||
71 | |||
72 | for (i = 0; i < PCI_ROM_RESOURCE; i++) | ||
73 | if (res == &pdev->resource[i]) | ||
74 | break; | ||
75 | if (i >= PCI_ROM_RESOURCE) | ||
76 | return -ENODEV; | ||
77 | |||
78 | if (!__pci_mmap_fits(pdev, i, vma, sparse)) | ||
79 | return -EINVAL; | ||
80 | |||
81 | if (iomem_is_exclusive(res->start)) | ||
82 | return -EINVAL; | ||
83 | |||
84 | pcibios_resource_to_bus(pdev, &bar, res); | ||
85 | vma->vm_pgoff += bar.start >> (PAGE_SHIFT - (sparse ? 5 : 0)); | ||
86 | mmap_type = res->flags & IORESOURCE_MEM ? pci_mmap_mem : pci_mmap_io; | ||
87 | |||
88 | return hose_mmap_page_range(pdev->sysdata, vma, mmap_type, sparse); | ||
89 | } | ||
90 | |||
91 | static int pci_mmap_resource_sparse(struct kobject *kobj, | ||
92 | struct bin_attribute *attr, | ||
93 | struct vm_area_struct *vma) | ||
94 | { | ||
95 | return pci_mmap_resource(kobj, attr, vma, 1); | ||
96 | } | ||
97 | |||
98 | static int pci_mmap_resource_dense(struct kobject *kobj, | ||
99 | struct bin_attribute *attr, | ||
100 | struct vm_area_struct *vma) | ||
101 | { | ||
102 | return pci_mmap_resource(kobj, attr, vma, 0); | ||
103 | } | ||
104 | |||
105 | /** | ||
106 | * pci_remove_resource_files - cleanup resource files | ||
107 | * @dev: dev to cleanup | ||
108 | * | ||
109 | * If we created resource files for @dev, remove them from sysfs and | ||
110 | * free their resources. | ||
111 | */ | ||
112 | void pci_remove_resource_files(struct pci_dev *pdev) | ||
113 | { | ||
114 | int i; | ||
115 | |||
116 | for (i = 0; i < PCI_ROM_RESOURCE; i++) { | ||
117 | struct bin_attribute *res_attr; | ||
118 | |||
119 | res_attr = pdev->res_attr[i]; | ||
120 | if (res_attr) { | ||
121 | sysfs_remove_bin_file(&pdev->dev.kobj, res_attr); | ||
122 | kfree(res_attr); | ||
123 | } | ||
124 | |||
125 | res_attr = pdev->res_attr_wc[i]; | ||
126 | if (res_attr) { | ||
127 | sysfs_remove_bin_file(&pdev->dev.kobj, res_attr); | ||
128 | kfree(res_attr); | ||
129 | } | ||
130 | } | ||
131 | } | ||
132 | |||
133 | static int sparse_mem_mmap_fits(struct pci_dev *pdev, int num) | ||
134 | { | ||
135 | struct pci_bus_region bar; | ||
136 | struct pci_controller *hose = pdev->sysdata; | ||
137 | long dense_offset; | ||
138 | unsigned long sparse_size; | ||
139 | |||
140 | pcibios_resource_to_bus(pdev, &bar, &pdev->resource[num]); | ||
141 | |||
142 | /* All core logic chips have 4G sparse address space, except | ||
143 | CIA which has 16G (see xxx_SPARSE_MEM and xxx_DENSE_MEM | ||
144 | definitions in asm/core_xxx.h files). This corresponds | ||
145 | to 128M or 512M of the bus space. */ | ||
146 | dense_offset = (long)(hose->dense_mem_base - hose->sparse_mem_base); | ||
147 | sparse_size = dense_offset >= 0x400000000UL ? 0x20000000 : 0x8000000; | ||
148 | |||
149 | return bar.end < sparse_size; | ||
150 | } | ||
151 | |||
152 | static int pci_create_one_attr(struct pci_dev *pdev, int num, char *name, | ||
153 | char *suffix, struct bin_attribute *res_attr, | ||
154 | unsigned long sparse) | ||
155 | { | ||
156 | size_t size = pci_resource_len(pdev, num); | ||
157 | |||
158 | sprintf(name, "resource%d%s", num, suffix); | ||
159 | res_attr->mmap = sparse ? pci_mmap_resource_sparse : | ||
160 | pci_mmap_resource_dense; | ||
161 | res_attr->attr.name = name; | ||
162 | res_attr->attr.mode = S_IRUSR | S_IWUSR; | ||
163 | res_attr->size = sparse ? size << 5 : size; | ||
164 | res_attr->private = &pdev->resource[num]; | ||
165 | return sysfs_create_bin_file(&pdev->dev.kobj, res_attr); | ||
166 | } | ||
167 | |||
168 | static int pci_create_attr(struct pci_dev *pdev, int num) | ||
169 | { | ||
170 | /* allocate attribute structure, piggyback attribute name */ | ||
171 | int retval, nlen1, nlen2 = 0, res_count = 1; | ||
172 | unsigned long sparse_base, dense_base; | ||
173 | struct bin_attribute *attr; | ||
174 | struct pci_controller *hose = pdev->sysdata; | ||
175 | char *suffix, *attr_name; | ||
176 | |||
177 | suffix = ""; /* Assume bwx machine, normal resourceN files. */ | ||
178 | nlen1 = 10; | ||
179 | |||
180 | if (pdev->resource[num].flags & IORESOURCE_MEM) { | ||
181 | sparse_base = hose->sparse_mem_base; | ||
182 | dense_base = hose->dense_mem_base; | ||
183 | if (sparse_base && !sparse_mem_mmap_fits(pdev, num)) { | ||
184 | sparse_base = 0; | ||
185 | suffix = "_dense"; | ||
186 | nlen1 = 16; /* resourceN_dense */ | ||
187 | } | ||
188 | } else { | ||
189 | sparse_base = hose->sparse_io_base; | ||
190 | dense_base = hose->dense_io_base; | ||
191 | } | ||
192 | |||
193 | if (sparse_base) { | ||
194 | suffix = "_sparse"; | ||
195 | nlen1 = 17; | ||
196 | if (dense_base) { | ||
197 | nlen2 = 16; /* resourceN_dense */ | ||
198 | res_count = 2; | ||
199 | } | ||
200 | } | ||
201 | |||
202 | attr = kzalloc(sizeof(*attr) * res_count + nlen1 + nlen2, GFP_ATOMIC); | ||
203 | if (!attr) | ||
204 | return -ENOMEM; | ||
205 | |||
206 | /* Create bwx, sparse or single dense file */ | ||
207 | attr_name = (char *)(attr + res_count); | ||
208 | pdev->res_attr[num] = attr; | ||
209 | retval = pci_create_one_attr(pdev, num, attr_name, suffix, attr, | ||
210 | sparse_base); | ||
211 | if (retval || res_count == 1) | ||
212 | return retval; | ||
213 | |||
214 | /* Create dense file */ | ||
215 | attr_name += nlen1; | ||
216 | attr++; | ||
217 | pdev->res_attr_wc[num] = attr; | ||
218 | return pci_create_one_attr(pdev, num, attr_name, "_dense", attr, 0); | ||
219 | } | ||
220 | |||
221 | /** | ||
222 | * pci_create_resource_files - create resource files in sysfs for @dev | ||
223 | * @dev: dev in question | ||
224 | * | ||
225 | * Walk the resources in @dev creating files for each resource available. | ||
226 | */ | ||
227 | int pci_create_resource_files(struct pci_dev *pdev) | ||
228 | { | ||
229 | int i; | ||
230 | int retval; | ||
231 | |||
232 | /* Expose the PCI resources from this device as files */ | ||
233 | for (i = 0; i < PCI_ROM_RESOURCE; i++) { | ||
234 | |||
235 | /* skip empty resources */ | ||
236 | if (!pci_resource_len(pdev, i)) | ||
237 | continue; | ||
238 | |||
239 | retval = pci_create_attr(pdev, i); | ||
240 | if (retval) { | ||
241 | pci_remove_resource_files(pdev); | ||
242 | return retval; | ||
243 | } | ||
244 | } | ||
245 | return 0; | ||
246 | } | ||
247 | |||
248 | /* Legacy I/O bus mapping stuff. */ | ||
249 | |||
250 | static int __legacy_mmap_fits(struct pci_controller *hose, | ||
251 | struct vm_area_struct *vma, | ||
252 | unsigned long res_size, int sparse) | ||
253 | { | ||
254 | unsigned long nr, start, size; | ||
255 | |||
256 | nr = (vma->vm_end - vma->vm_start) >> PAGE_SHIFT; | ||
257 | start = vma->vm_pgoff; | ||
258 | size = ((res_size - 1) >> PAGE_SHIFT) + 1; | ||
259 | |||
260 | if (start < size && size - start >= nr) | ||
261 | return 1; | ||
262 | WARN(1, "process \"%s\" tried to map%s 0x%08lx-0x%08lx on hose %d " | ||
263 | "(size 0x%08lx)\n", | ||
264 | current->comm, sparse ? " sparse" : "", start, start + nr, | ||
265 | hose->index, size); | ||
266 | return 0; | ||
267 | } | ||
268 | |||
269 | static inline int has_sparse(struct pci_controller *hose, | ||
270 | enum pci_mmap_state mmap_type) | ||
271 | { | ||
272 | unsigned long base; | ||
273 | |||
274 | base = (mmap_type == pci_mmap_mem) ? hose->sparse_mem_base : | ||
275 | hose->sparse_io_base; | ||
276 | |||
277 | return base != 0; | ||
278 | } | ||
279 | |||
280 | int pci_mmap_legacy_page_range(struct pci_bus *bus, struct vm_area_struct *vma, | ||
281 | enum pci_mmap_state mmap_type) | ||
282 | { | ||
283 | struct pci_controller *hose = bus->sysdata; | ||
284 | int sparse = has_sparse(hose, mmap_type); | ||
285 | unsigned long res_size; | ||
286 | |||
287 | res_size = (mmap_type == pci_mmap_mem) ? bus->legacy_mem->size : | ||
288 | bus->legacy_io->size; | ||
289 | if (!__legacy_mmap_fits(hose, vma, res_size, sparse)) | ||
290 | return -EINVAL; | ||
291 | |||
292 | return hose_mmap_page_range(hose, vma, mmap_type, sparse); | ||
293 | } | ||
294 | |||
295 | /** | ||
296 | * pci_adjust_legacy_attr - adjustment of legacy file attributes | ||
297 | * @b: bus to create files under | ||
298 | * @mmap_type: I/O port or memory | ||
299 | * | ||
300 | * Adjust file name and size for sparse mappings. | ||
301 | */ | ||
302 | void pci_adjust_legacy_attr(struct pci_bus *bus, enum pci_mmap_state mmap_type) | ||
303 | { | ||
304 | struct pci_controller *hose = bus->sysdata; | ||
305 | |||
306 | if (!has_sparse(hose, mmap_type)) | ||
307 | return; | ||
308 | |||
309 | if (mmap_type == pci_mmap_mem) { | ||
310 | bus->legacy_mem->attr.name = "legacy_mem_sparse"; | ||
311 | bus->legacy_mem->size <<= 5; | ||
312 | } else { | ||
313 | bus->legacy_io->attr.name = "legacy_io_sparse"; | ||
314 | bus->legacy_io->size <<= 5; | ||
315 | } | ||
316 | return; | ||
317 | } | ||
318 | |||
319 | /* Legacy I/O bus read/write functions */ | ||
320 | int pci_legacy_read(struct pci_bus *bus, loff_t port, u32 *val, size_t size) | ||
321 | { | ||
322 | struct pci_controller *hose = bus->sysdata; | ||
323 | |||
324 | port += hose->io_space->start; | ||
325 | |||
326 | switch(size) { | ||
327 | case 1: | ||
328 | *((u8 *)val) = inb(port); | ||
329 | return 1; | ||
330 | case 2: | ||
331 | if (port & 1) | ||
332 | return -EINVAL; | ||
333 | *((u16 *)val) = inw(port); | ||
334 | return 2; | ||
335 | case 4: | ||
336 | if (port & 3) | ||
337 | return -EINVAL; | ||
338 | *((u32 *)val) = inl(port); | ||
339 | return 4; | ||
340 | } | ||
341 | return -EINVAL; | ||
342 | } | ||
343 | |||
344 | int pci_legacy_write(struct pci_bus *bus, loff_t port, u32 val, size_t size) | ||
345 | { | ||
346 | struct pci_controller *hose = bus->sysdata; | ||
347 | |||
348 | port += hose->io_space->start; | ||
349 | |||
350 | switch(size) { | ||
351 | case 1: | ||
352 | outb(port, val); | ||
353 | return 1; | ||
354 | case 2: | ||
355 | if (port & 1) | ||
356 | return -EINVAL; | ||
357 | outw(port, val); | ||
358 | return 2; | ||
359 | case 4: | ||
360 | if (port & 3) | ||
361 | return -EINVAL; | ||
362 | outl(port, val); | ||
363 | return 4; | ||
364 | } | ||
365 | return -EINVAL; | ||
366 | } | ||
diff --git a/arch/alpha/kernel/pci.c b/arch/alpha/kernel/pci.c index a3b938811400..a91ba28999b5 100644 --- a/arch/alpha/kernel/pci.c +++ b/arch/alpha/kernel/pci.c | |||
@@ -168,7 +168,7 @@ pcibios_align_resource(void *data, struct resource *res, | |||
168 | */ | 168 | */ |
169 | 169 | ||
170 | /* Align to multiple of size of minimum base. */ | 170 | /* Align to multiple of size of minimum base. */ |
171 | alignto = max(0x1000UL, align); | 171 | alignto = max_t(resource_size_t, 0x1000, align); |
172 | start = ALIGN(start, alignto); | 172 | start = ALIGN(start, alignto); |
173 | if (hose->sparse_mem_base && size <= 7 * 16*MB) { | 173 | if (hose->sparse_mem_base && size <= 7 * 16*MB) { |
174 | if (((start / (16*MB)) & 0x7) == 0) { | 174 | if (((start / (16*MB)) & 0x7) == 0) { |
diff --git a/arch/alpha/kernel/pci_iommu.c b/arch/alpha/kernel/pci_iommu.c index b9094da05d7a..bfb880af959d 100644 --- a/arch/alpha/kernel/pci_iommu.c +++ b/arch/alpha/kernel/pci_iommu.c | |||
@@ -247,7 +247,7 @@ pci_map_single_1(struct pci_dev *pdev, void *cpu_addr, size_t size, | |||
247 | && paddr + size <= __direct_map_size) { | 247 | && paddr + size <= __direct_map_size) { |
248 | ret = paddr + __direct_map_base; | 248 | ret = paddr + __direct_map_base; |
249 | 249 | ||
250 | DBGA2("pci_map_single: [%p,%lx] -> direct %lx from %p\n", | 250 | DBGA2("pci_map_single: [%p,%zx] -> direct %llx from %p\n", |
251 | cpu_addr, size, ret, __builtin_return_address(0)); | 251 | cpu_addr, size, ret, __builtin_return_address(0)); |
252 | 252 | ||
253 | return ret; | 253 | return ret; |
@@ -258,7 +258,7 @@ pci_map_single_1(struct pci_dev *pdev, void *cpu_addr, size_t size, | |||
258 | if (dac_allowed) { | 258 | if (dac_allowed) { |
259 | ret = paddr + alpha_mv.pci_dac_offset; | 259 | ret = paddr + alpha_mv.pci_dac_offset; |
260 | 260 | ||
261 | DBGA2("pci_map_single: [%p,%lx] -> DAC %lx from %p\n", | 261 | DBGA2("pci_map_single: [%p,%zx] -> DAC %llx from %p\n", |
262 | cpu_addr, size, ret, __builtin_return_address(0)); | 262 | cpu_addr, size, ret, __builtin_return_address(0)); |
263 | 263 | ||
264 | return ret; | 264 | return ret; |
@@ -299,7 +299,7 @@ pci_map_single_1(struct pci_dev *pdev, void *cpu_addr, size_t size, | |||
299 | ret = arena->dma_base + dma_ofs * PAGE_SIZE; | 299 | ret = arena->dma_base + dma_ofs * PAGE_SIZE; |
300 | ret += (unsigned long)cpu_addr & ~PAGE_MASK; | 300 | ret += (unsigned long)cpu_addr & ~PAGE_MASK; |
301 | 301 | ||
302 | DBGA2("pci_map_single: [%p,%lx] np %ld -> sg %lx from %p\n", | 302 | DBGA2("pci_map_single: [%p,%zx] np %ld -> sg %llx from %p\n", |
303 | cpu_addr, size, npages, ret, __builtin_return_address(0)); | 303 | cpu_addr, size, npages, ret, __builtin_return_address(0)); |
304 | 304 | ||
305 | return ret; | 305 | return ret; |
@@ -355,14 +355,14 @@ pci_unmap_single(struct pci_dev *pdev, dma_addr_t dma_addr, size_t size, | |||
355 | && dma_addr < __direct_map_base + __direct_map_size) { | 355 | && dma_addr < __direct_map_base + __direct_map_size) { |
356 | /* Nothing to do. */ | 356 | /* Nothing to do. */ |
357 | 357 | ||
358 | DBGA2("pci_unmap_single: direct [%lx,%lx] from %p\n", | 358 | DBGA2("pci_unmap_single: direct [%llx,%zx] from %p\n", |
359 | dma_addr, size, __builtin_return_address(0)); | 359 | dma_addr, size, __builtin_return_address(0)); |
360 | 360 | ||
361 | return; | 361 | return; |
362 | } | 362 | } |
363 | 363 | ||
364 | if (dma_addr > 0xffffffff) { | 364 | if (dma_addr > 0xffffffff) { |
365 | DBGA2("pci64_unmap_single: DAC [%lx,%lx] from %p\n", | 365 | DBGA2("pci64_unmap_single: DAC [%llx,%zx] from %p\n", |
366 | dma_addr, size, __builtin_return_address(0)); | 366 | dma_addr, size, __builtin_return_address(0)); |
367 | return; | 367 | return; |
368 | } | 368 | } |
@@ -373,9 +373,9 @@ pci_unmap_single(struct pci_dev *pdev, dma_addr_t dma_addr, size_t size, | |||
373 | 373 | ||
374 | dma_ofs = (dma_addr - arena->dma_base) >> PAGE_SHIFT; | 374 | dma_ofs = (dma_addr - arena->dma_base) >> PAGE_SHIFT; |
375 | if (dma_ofs * PAGE_SIZE >= arena->size) { | 375 | if (dma_ofs * PAGE_SIZE >= arena->size) { |
376 | printk(KERN_ERR "Bogus pci_unmap_single: dma_addr %lx " | 376 | printk(KERN_ERR "Bogus pci_unmap_single: dma_addr %llx " |
377 | " base %lx size %x\n", dma_addr, arena->dma_base, | 377 | " base %llx size %x\n", |
378 | arena->size); | 378 | dma_addr, arena->dma_base, arena->size); |
379 | return; | 379 | return; |
380 | BUG(); | 380 | BUG(); |
381 | } | 381 | } |
@@ -394,7 +394,7 @@ pci_unmap_single(struct pci_dev *pdev, dma_addr_t dma_addr, size_t size, | |||
394 | 394 | ||
395 | spin_unlock_irqrestore(&arena->lock, flags); | 395 | spin_unlock_irqrestore(&arena->lock, flags); |
396 | 396 | ||
397 | DBGA2("pci_unmap_single: sg [%lx,%lx] np %ld from %p\n", | 397 | DBGA2("pci_unmap_single: sg [%llx,%zx] np %ld from %p\n", |
398 | dma_addr, size, npages, __builtin_return_address(0)); | 398 | dma_addr, size, npages, __builtin_return_address(0)); |
399 | } | 399 | } |
400 | EXPORT_SYMBOL(pci_unmap_single); | 400 | EXPORT_SYMBOL(pci_unmap_single); |
@@ -444,7 +444,7 @@ try_again: | |||
444 | goto try_again; | 444 | goto try_again; |
445 | } | 445 | } |
446 | 446 | ||
447 | DBGA2("pci_alloc_consistent: %lx -> [%p,%x] from %p\n", | 447 | DBGA2("pci_alloc_consistent: %zx -> [%p,%llx] from %p\n", |
448 | size, cpu_addr, *dma_addrp, __builtin_return_address(0)); | 448 | size, cpu_addr, *dma_addrp, __builtin_return_address(0)); |
449 | 449 | ||
450 | return cpu_addr; | 450 | return cpu_addr; |
@@ -464,7 +464,7 @@ pci_free_consistent(struct pci_dev *pdev, size_t size, void *cpu_addr, | |||
464 | pci_unmap_single(pdev, dma_addr, size, PCI_DMA_BIDIRECTIONAL); | 464 | pci_unmap_single(pdev, dma_addr, size, PCI_DMA_BIDIRECTIONAL); |
465 | free_pages((unsigned long)cpu_addr, get_order(size)); | 465 | free_pages((unsigned long)cpu_addr, get_order(size)); |
466 | 466 | ||
467 | DBGA2("pci_free_consistent: [%x,%lx] from %p\n", | 467 | DBGA2("pci_free_consistent: [%llx,%zx] from %p\n", |
468 | dma_addr, size, __builtin_return_address(0)); | 468 | dma_addr, size, __builtin_return_address(0)); |
469 | } | 469 | } |
470 | EXPORT_SYMBOL(pci_free_consistent); | 470 | EXPORT_SYMBOL(pci_free_consistent); |
@@ -551,7 +551,7 @@ sg_fill(struct device *dev, struct scatterlist *leader, struct scatterlist *end, | |||
551 | out->dma_address = paddr + __direct_map_base; | 551 | out->dma_address = paddr + __direct_map_base; |
552 | out->dma_length = size; | 552 | out->dma_length = size; |
553 | 553 | ||
554 | DBGA(" sg_fill: [%p,%lx] -> direct %lx\n", | 554 | DBGA(" sg_fill: [%p,%lx] -> direct %llx\n", |
555 | __va(paddr), size, out->dma_address); | 555 | __va(paddr), size, out->dma_address); |
556 | 556 | ||
557 | return 0; | 557 | return 0; |
@@ -563,7 +563,7 @@ sg_fill(struct device *dev, struct scatterlist *leader, struct scatterlist *end, | |||
563 | out->dma_address = paddr + alpha_mv.pci_dac_offset; | 563 | out->dma_address = paddr + alpha_mv.pci_dac_offset; |
564 | out->dma_length = size; | 564 | out->dma_length = size; |
565 | 565 | ||
566 | DBGA(" sg_fill: [%p,%lx] -> DAC %lx\n", | 566 | DBGA(" sg_fill: [%p,%lx] -> DAC %llx\n", |
567 | __va(paddr), size, out->dma_address); | 567 | __va(paddr), size, out->dma_address); |
568 | 568 | ||
569 | return 0; | 569 | return 0; |
@@ -589,7 +589,7 @@ sg_fill(struct device *dev, struct scatterlist *leader, struct scatterlist *end, | |||
589 | out->dma_address = arena->dma_base + dma_ofs*PAGE_SIZE + paddr; | 589 | out->dma_address = arena->dma_base + dma_ofs*PAGE_SIZE + paddr; |
590 | out->dma_length = size; | 590 | out->dma_length = size; |
591 | 591 | ||
592 | DBGA(" sg_fill: [%p,%lx] -> sg %lx np %ld\n", | 592 | DBGA(" sg_fill: [%p,%lx] -> sg %llx np %ld\n", |
593 | __va(paddr), size, out->dma_address, npages); | 593 | __va(paddr), size, out->dma_address, npages); |
594 | 594 | ||
595 | /* All virtually contiguous. We need to find the length of each | 595 | /* All virtually contiguous. We need to find the length of each |
@@ -752,7 +752,7 @@ pci_unmap_sg(struct pci_dev *pdev, struct scatterlist *sg, int nents, | |||
752 | 752 | ||
753 | if (addr > 0xffffffff) { | 753 | if (addr > 0xffffffff) { |
754 | /* It's a DAC address -- nothing to do. */ | 754 | /* It's a DAC address -- nothing to do. */ |
755 | DBGA(" (%ld) DAC [%lx,%lx]\n", | 755 | DBGA(" (%ld) DAC [%llx,%zx]\n", |
756 | sg - end + nents, addr, size); | 756 | sg - end + nents, addr, size); |
757 | continue; | 757 | continue; |
758 | } | 758 | } |
@@ -760,12 +760,12 @@ pci_unmap_sg(struct pci_dev *pdev, struct scatterlist *sg, int nents, | |||
760 | if (addr >= __direct_map_base | 760 | if (addr >= __direct_map_base |
761 | && addr < __direct_map_base + __direct_map_size) { | 761 | && addr < __direct_map_base + __direct_map_size) { |
762 | /* Nothing to do. */ | 762 | /* Nothing to do. */ |
763 | DBGA(" (%ld) direct [%lx,%lx]\n", | 763 | DBGA(" (%ld) direct [%llx,%zx]\n", |
764 | sg - end + nents, addr, size); | 764 | sg - end + nents, addr, size); |
765 | continue; | 765 | continue; |
766 | } | 766 | } |
767 | 767 | ||
768 | DBGA(" (%ld) sg [%lx,%lx]\n", | 768 | DBGA(" (%ld) sg [%llx,%zx]\n", |
769 | sg - end + nents, addr, size); | 769 | sg - end + nents, addr, size); |
770 | 770 | ||
771 | npages = iommu_num_pages(addr, size, PAGE_SIZE); | 771 | npages = iommu_num_pages(addr, size, PAGE_SIZE); |
diff --git a/arch/alpha/kernel/proto.h b/arch/alpha/kernel/proto.h index fe14c6747cd6..567f2598d090 100644 --- a/arch/alpha/kernel/proto.h +++ b/arch/alpha/kernel/proto.h | |||
@@ -20,7 +20,7 @@ struct pci_controller; | |||
20 | extern struct pci_ops apecs_pci_ops; | 20 | extern struct pci_ops apecs_pci_ops; |
21 | extern void apecs_init_arch(void); | 21 | extern void apecs_init_arch(void); |
22 | extern void apecs_pci_clr_err(void); | 22 | extern void apecs_pci_clr_err(void); |
23 | extern void apecs_machine_check(u64, u64); | 23 | extern void apecs_machine_check(unsigned long vector, unsigned long la_ptr); |
24 | extern void apecs_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); | 24 | extern void apecs_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); |
25 | 25 | ||
26 | /* core_cia.c */ | 26 | /* core_cia.c */ |
@@ -29,7 +29,7 @@ extern void cia_init_pci(void); | |||
29 | extern void cia_init_arch(void); | 29 | extern void cia_init_arch(void); |
30 | extern void pyxis_init_arch(void); | 30 | extern void pyxis_init_arch(void); |
31 | extern void cia_kill_arch(int); | 31 | extern void cia_kill_arch(int); |
32 | extern void cia_machine_check(u64, u64); | 32 | extern void cia_machine_check(unsigned long vector, unsigned long la_ptr); |
33 | extern void cia_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); | 33 | extern void cia_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); |
34 | 34 | ||
35 | /* core_irongate.c */ | 35 | /* core_irongate.c */ |
@@ -42,7 +42,7 @@ extern void irongate_machine_check(u64, u64); | |||
42 | /* core_lca.c */ | 42 | /* core_lca.c */ |
43 | extern struct pci_ops lca_pci_ops; | 43 | extern struct pci_ops lca_pci_ops; |
44 | extern void lca_init_arch(void); | 44 | extern void lca_init_arch(void); |
45 | extern void lca_machine_check(u64, u64); | 45 | extern void lca_machine_check(unsigned long vector, unsigned long la_ptr); |
46 | extern void lca_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); | 46 | extern void lca_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); |
47 | 47 | ||
48 | /* core_marvel.c */ | 48 | /* core_marvel.c */ |
@@ -64,7 +64,7 @@ void io7_clear_errors(struct io7 *io7); | |||
64 | extern struct pci_ops mcpcia_pci_ops; | 64 | extern struct pci_ops mcpcia_pci_ops; |
65 | extern void mcpcia_init_arch(void); | 65 | extern void mcpcia_init_arch(void); |
66 | extern void mcpcia_init_hoses(void); | 66 | extern void mcpcia_init_hoses(void); |
67 | extern void mcpcia_machine_check(u64, u64); | 67 | extern void mcpcia_machine_check(unsigned long vector, unsigned long la_ptr); |
68 | extern void mcpcia_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); | 68 | extern void mcpcia_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); |
69 | 69 | ||
70 | /* core_polaris.c */ | 70 | /* core_polaris.c */ |
@@ -72,14 +72,14 @@ extern struct pci_ops polaris_pci_ops; | |||
72 | extern int polaris_read_config_dword(struct pci_dev *, int, u32 *); | 72 | extern int polaris_read_config_dword(struct pci_dev *, int, u32 *); |
73 | extern int polaris_write_config_dword(struct pci_dev *, int, u32); | 73 | extern int polaris_write_config_dword(struct pci_dev *, int, u32); |
74 | extern void polaris_init_arch(void); | 74 | extern void polaris_init_arch(void); |
75 | extern void polaris_machine_check(u64, u64); | 75 | extern void polaris_machine_check(unsigned long vector, unsigned long la_ptr); |
76 | #define polaris_pci_tbi ((void *)0) | 76 | #define polaris_pci_tbi ((void *)0) |
77 | 77 | ||
78 | /* core_t2.c */ | 78 | /* core_t2.c */ |
79 | extern struct pci_ops t2_pci_ops; | 79 | extern struct pci_ops t2_pci_ops; |
80 | extern void t2_init_arch(void); | 80 | extern void t2_init_arch(void); |
81 | extern void t2_kill_arch(int); | 81 | extern void t2_kill_arch(int); |
82 | extern void t2_machine_check(u64, u64); | 82 | extern void t2_machine_check(unsigned long vector, unsigned long la_ptr); |
83 | extern void t2_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); | 83 | extern void t2_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); |
84 | 84 | ||
85 | /* core_titan.c */ | 85 | /* core_titan.c */ |
@@ -94,14 +94,14 @@ extern struct _alpha_agp_info *titan_agp_info(void); | |||
94 | extern struct pci_ops tsunami_pci_ops; | 94 | extern struct pci_ops tsunami_pci_ops; |
95 | extern void tsunami_init_arch(void); | 95 | extern void tsunami_init_arch(void); |
96 | extern void tsunami_kill_arch(int); | 96 | extern void tsunami_kill_arch(int); |
97 | extern void tsunami_machine_check(u64, u64); | 97 | extern void tsunami_machine_check(unsigned long vector, unsigned long la_ptr); |
98 | extern void tsunami_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); | 98 | extern void tsunami_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); |
99 | 99 | ||
100 | /* core_wildfire.c */ | 100 | /* core_wildfire.c */ |
101 | extern struct pci_ops wildfire_pci_ops; | 101 | extern struct pci_ops wildfire_pci_ops; |
102 | extern void wildfire_init_arch(void); | 102 | extern void wildfire_init_arch(void); |
103 | extern void wildfire_kill_arch(int); | 103 | extern void wildfire_kill_arch(int); |
104 | extern void wildfire_machine_check(u64, u64); | 104 | extern void wildfire_machine_check(unsigned long vector, unsigned long la_ptr); |
105 | extern void wildfire_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); | 105 | extern void wildfire_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); |
106 | extern int wildfire_pa_to_nid(unsigned long); | 106 | extern int wildfire_pa_to_nid(unsigned long); |
107 | extern int wildfire_cpuid_to_nid(int); | 107 | extern int wildfire_cpuid_to_nid(int); |
diff --git a/arch/alpha/kernel/setup.c b/arch/alpha/kernel/setup.c index 02bee6983ce2..80df86cd746b 100644 --- a/arch/alpha/kernel/setup.c +++ b/arch/alpha/kernel/setup.c | |||
@@ -1255,7 +1255,7 @@ show_cpuinfo(struct seq_file *f, void *slot) | |||
1255 | platform_string(), nr_processors); | 1255 | platform_string(), nr_processors); |
1256 | 1256 | ||
1257 | #ifdef CONFIG_SMP | 1257 | #ifdef CONFIG_SMP |
1258 | seq_printf(f, "cpus active\t\t: %d\n" | 1258 | seq_printf(f, "cpus active\t\t: %u\n" |
1259 | "cpu active mask\t\t: %016lx\n", | 1259 | "cpu active mask\t\t: %016lx\n", |
1260 | num_online_cpus(), cpus_addr(cpu_possible_map)[0]); | 1260 | num_online_cpus(), cpus_addr(cpu_possible_map)[0]); |
1261 | #endif | 1261 | #endif |
diff --git a/arch/alpha/kernel/smc37c669.c b/arch/alpha/kernel/smc37c669.c index fd467b207f0f..bca5bda90cde 100644 --- a/arch/alpha/kernel/smc37c669.c +++ b/arch/alpha/kernel/smc37c669.c | |||
@@ -2542,8 +2542,8 @@ void __init SMC669_Init ( int index ) | |||
2542 | SMC37c669_display_device_info( ); | 2542 | SMC37c669_display_device_info( ); |
2543 | #endif | 2543 | #endif |
2544 | local_irq_restore(flags); | 2544 | local_irq_restore(flags); |
2545 | printk( "SMC37c669 Super I/O Controller found @ 0x%lx\n", | 2545 | printk( "SMC37c669 Super I/O Controller found @ 0x%p\n", |
2546 | (unsigned long) SMC_base ); | 2546 | SMC_base ); |
2547 | } | 2547 | } |
2548 | else { | 2548 | else { |
2549 | local_irq_restore(flags); | 2549 | local_irq_restore(flags); |
diff --git a/arch/alpha/kernel/srm_env.c b/arch/alpha/kernel/srm_env.c index 78ad7cd1bbd6..d12af472e1c0 100644 --- a/arch/alpha/kernel/srm_env.c +++ b/arch/alpha/kernel/srm_env.c | |||
@@ -218,7 +218,6 @@ srm_env_init(void) | |||
218 | BASE_DIR); | 218 | BASE_DIR); |
219 | goto cleanup; | 219 | goto cleanup; |
220 | } | 220 | } |
221 | base_dir->owner = THIS_MODULE; | ||
222 | 221 | ||
223 | /* | 222 | /* |
224 | * Create per-name subdirectory | 223 | * Create per-name subdirectory |
@@ -229,7 +228,6 @@ srm_env_init(void) | |||
229 | BASE_DIR, NAMED_DIR); | 228 | BASE_DIR, NAMED_DIR); |
230 | goto cleanup; | 229 | goto cleanup; |
231 | } | 230 | } |
232 | named_dir->owner = THIS_MODULE; | ||
233 | 231 | ||
234 | /* | 232 | /* |
235 | * Create per-number subdirectory | 233 | * Create per-number subdirectory |
@@ -241,7 +239,6 @@ srm_env_init(void) | |||
241 | goto cleanup; | 239 | goto cleanup; |
242 | 240 | ||
243 | } | 241 | } |
244 | numbered_dir->owner = THIS_MODULE; | ||
245 | 242 | ||
246 | /* | 243 | /* |
247 | * Create all named nodes | 244 | * Create all named nodes |
@@ -254,7 +251,6 @@ srm_env_init(void) | |||
254 | goto cleanup; | 251 | goto cleanup; |
255 | 252 | ||
256 | entry->proc_entry->data = (void *) entry; | 253 | entry->proc_entry->data = (void *) entry; |
257 | entry->proc_entry->owner = THIS_MODULE; | ||
258 | entry->proc_entry->read_proc = srm_env_read; | 254 | entry->proc_entry->read_proc = srm_env_read; |
259 | entry->proc_entry->write_proc = srm_env_write; | 255 | entry->proc_entry->write_proc = srm_env_write; |
260 | 256 | ||
@@ -275,7 +271,6 @@ srm_env_init(void) | |||
275 | 271 | ||
276 | entry->id = var_num; | 272 | entry->id = var_num; |
277 | entry->proc_entry->data = (void *) entry; | 273 | entry->proc_entry->data = (void *) entry; |
278 | entry->proc_entry->owner = THIS_MODULE; | ||
279 | entry->proc_entry->read_proc = srm_env_read; | 274 | entry->proc_entry->read_proc = srm_env_read; |
280 | entry->proc_entry->write_proc = srm_env_write; | 275 | entry->proc_entry->write_proc = srm_env_write; |
281 | } | 276 | } |
diff --git a/arch/alpha/kernel/sys_jensen.c b/arch/alpha/kernel/sys_jensen.c index e2516f9a8967..2b5caf3d9b15 100644 --- a/arch/alpha/kernel/sys_jensen.c +++ b/arch/alpha/kernel/sys_jensen.c | |||
@@ -244,12 +244,11 @@ jensen_init_arch(void) | |||
244 | } | 244 | } |
245 | 245 | ||
246 | static void | 246 | static void |
247 | jensen_machine_check (u64 vector, u64 la) | 247 | jensen_machine_check(unsigned long vector, unsigned long la) |
248 | { | 248 | { |
249 | printk(KERN_CRIT "Machine check\n"); | 249 | printk(KERN_CRIT "Machine check\n"); |
250 | } | 250 | } |
251 | 251 | ||
252 | |||
253 | /* | 252 | /* |
254 | * The System Vector | 253 | * The System Vector |
255 | */ | 254 | */ |
diff --git a/arch/alpha/kernel/sys_sable.c b/arch/alpha/kernel/sys_sable.c index d232e42be018..9e263256a42d 100644 --- a/arch/alpha/kernel/sys_sable.c +++ b/arch/alpha/kernel/sys_sable.c | |||
@@ -453,7 +453,7 @@ sable_lynx_enable_irq(unsigned int irq) | |||
453 | sable_lynx_irq_swizzle->update_irq_hw(bit, mask); | 453 | sable_lynx_irq_swizzle->update_irq_hw(bit, mask); |
454 | spin_unlock(&sable_lynx_irq_lock); | 454 | spin_unlock(&sable_lynx_irq_lock); |
455 | #if 0 | 455 | #if 0 |
456 | printk("%s: mask 0x%lx bit 0x%x irq 0x%x\n", | 456 | printk("%s: mask 0x%lx bit 0x%lx irq 0x%x\n", |
457 | __func__, mask, bit, irq); | 457 | __func__, mask, bit, irq); |
458 | #endif | 458 | #endif |
459 | } | 459 | } |
@@ -469,7 +469,7 @@ sable_lynx_disable_irq(unsigned int irq) | |||
469 | sable_lynx_irq_swizzle->update_irq_hw(bit, mask); | 469 | sable_lynx_irq_swizzle->update_irq_hw(bit, mask); |
470 | spin_unlock(&sable_lynx_irq_lock); | 470 | spin_unlock(&sable_lynx_irq_lock); |
471 | #if 0 | 471 | #if 0 |
472 | printk("%s: mask 0x%lx bit 0x%x irq 0x%x\n", | 472 | printk("%s: mask 0x%lx bit 0x%lx irq 0x%x\n", |
473 | __func__, mask, bit, irq); | 473 | __func__, mask, bit, irq); |
474 | #endif | 474 | #endif |
475 | } | 475 | } |
diff --git a/arch/alpha/kernel/traps.c b/arch/alpha/kernel/traps.c index cefc5a355ef9..6ee7655b7568 100644 --- a/arch/alpha/kernel/traps.c +++ b/arch/alpha/kernel/traps.c | |||
@@ -623,7 +623,7 @@ do_entUna(void * va, unsigned long opcode, unsigned long reg, | |||
623 | } | 623 | } |
624 | 624 | ||
625 | lock_kernel(); | 625 | lock_kernel(); |
626 | printk("Bad unaligned kernel access at %016lx: %p %lx %ld\n", | 626 | printk("Bad unaligned kernel access at %016lx: %p %lx %lu\n", |
627 | pc, va, opcode, reg); | 627 | pc, va, opcode, reg); |
628 | do_exit(SIGSEGV); | 628 | do_exit(SIGSEGV); |
629 | 629 | ||