diff options
Diffstat (limited to 'include')
229 files changed, 2084 insertions, 5320 deletions
diff --git a/include/acpi/platform/aclinux.h b/include/acpi/platform/aclinux.h index 47faf27913a5..7f1e92930b62 100644 --- a/include/acpi/platform/aclinux.h +++ b/include/acpi/platform/aclinux.h | |||
@@ -64,7 +64,7 @@ | |||
64 | /* Host-dependent types and defines */ | 64 | /* Host-dependent types and defines */ |
65 | 65 | ||
66 | #define ACPI_MACHINE_WIDTH BITS_PER_LONG | 66 | #define ACPI_MACHINE_WIDTH BITS_PER_LONG |
67 | #define acpi_cache_t kmem_cache_t | 67 | #define acpi_cache_t struct kmem_cache |
68 | #define acpi_spinlock spinlock_t * | 68 | #define acpi_spinlock spinlock_t * |
69 | #define ACPI_EXPORT_SYMBOL(symbol) EXPORT_SYMBOL(symbol); | 69 | #define ACPI_EXPORT_SYMBOL(symbol) EXPORT_SYMBOL(symbol); |
70 | #define strtoul simple_strtoul | 70 | #define strtoul simple_strtoul |
diff --git a/include/asm-alpha/dma-mapping.h b/include/asm-alpha/dma-mapping.h index b9ff4d8cb33a..57e09f5e3424 100644 --- a/include/asm-alpha/dma-mapping.h +++ b/include/asm-alpha/dma-mapping.h | |||
@@ -51,7 +51,7 @@ int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, | |||
51 | 51 | ||
52 | #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) | 52 | #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) |
53 | #define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) | 53 | #define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) |
54 | #define dma_is_consistent(dev) (1) | 54 | #define dma_is_consistent(d, h) (1) |
55 | 55 | ||
56 | int dma_set_mask(struct device *dev, u64 mask); | 56 | int dma_set_mask(struct device *dev, u64 mask); |
57 | 57 | ||
@@ -60,7 +60,7 @@ int dma_set_mask(struct device *dev, u64 mask); | |||
60 | #define dma_sync_single_range(dev, addr, off, size, dir) do { } while (0) | 60 | #define dma_sync_single_range(dev, addr, off, size, dir) do { } while (0) |
61 | #define dma_sync_sg_for_cpu(dev, sg, nents, dir) do { } while (0) | 61 | #define dma_sync_sg_for_cpu(dev, sg, nents, dir) do { } while (0) |
62 | #define dma_sync_sg_for_device(dev, sg, nents, dir) do { } while (0) | 62 | #define dma_sync_sg_for_device(dev, sg, nents, dir) do { } while (0) |
63 | #define dma_cache_sync(va, size, dir) do { } while (0) | 63 | #define dma_cache_sync(dev, va, size, dir) do { } while (0) |
64 | 64 | ||
65 | #define dma_get_cache_alignment() L1_CACHE_BYTES | 65 | #define dma_get_cache_alignment() L1_CACHE_BYTES |
66 | 66 | ||
diff --git a/include/asm-alpha/unistd.h b/include/asm-alpha/unistd.h index 2cabbd465c0c..84313d14e780 100644 --- a/include/asm-alpha/unistd.h +++ b/include/asm-alpha/unistd.h | |||
@@ -387,188 +387,6 @@ | |||
387 | 387 | ||
388 | #define NR_SYSCALLS 447 | 388 | #define NR_SYSCALLS 447 |
389 | 389 | ||
390 | #if defined(__GNUC__) | ||
391 | |||
392 | #define _syscall_return(type) \ | ||
393 | return (_sc_err ? errno = _sc_ret, _sc_ret = -1L : 0), (type) _sc_ret | ||
394 | |||
395 | #define _syscall_clobbers \ | ||
396 | "$1", "$2", "$3", "$4", "$5", "$6", "$7", "$8", \ | ||
397 | "$22", "$23", "$24", "$25", "$27", "$28" \ | ||
398 | |||
399 | #define _syscall0(type, name) \ | ||
400 | type name(void) \ | ||
401 | { \ | ||
402 | long _sc_ret, _sc_err; \ | ||
403 | { \ | ||
404 | register long _sc_0 __asm__("$0"); \ | ||
405 | register long _sc_19 __asm__("$19"); \ | ||
406 | \ | ||
407 | _sc_0 = __NR_##name; \ | ||
408 | __asm__("callsys # %0 %1 %2" \ | ||
409 | : "=r"(_sc_0), "=r"(_sc_19) \ | ||
410 | : "0"(_sc_0) \ | ||
411 | : _syscall_clobbers); \ | ||
412 | _sc_ret = _sc_0, _sc_err = _sc_19; \ | ||
413 | } \ | ||
414 | _syscall_return(type); \ | ||
415 | } | ||
416 | |||
417 | #define _syscall1(type,name,type1,arg1) \ | ||
418 | type name(type1 arg1) \ | ||
419 | { \ | ||
420 | long _sc_ret, _sc_err; \ | ||
421 | { \ | ||
422 | register long _sc_0 __asm__("$0"); \ | ||
423 | register long _sc_16 __asm__("$16"); \ | ||
424 | register long _sc_19 __asm__("$19"); \ | ||
425 | \ | ||
426 | _sc_0 = __NR_##name; \ | ||
427 | _sc_16 = (long) (arg1); \ | ||
428 | __asm__("callsys # %0 %1 %2 %3" \ | ||
429 | : "=r"(_sc_0), "=r"(_sc_19) \ | ||
430 | : "0"(_sc_0), "r"(_sc_16) \ | ||
431 | : _syscall_clobbers); \ | ||
432 | _sc_ret = _sc_0, _sc_err = _sc_19; \ | ||
433 | } \ | ||
434 | _syscall_return(type); \ | ||
435 | } | ||
436 | |||
437 | #define _syscall2(type,name,type1,arg1,type2,arg2) \ | ||
438 | type name(type1 arg1,type2 arg2) \ | ||
439 | { \ | ||
440 | long _sc_ret, _sc_err; \ | ||
441 | { \ | ||
442 | register long _sc_0 __asm__("$0"); \ | ||
443 | register long _sc_16 __asm__("$16"); \ | ||
444 | register long _sc_17 __asm__("$17"); \ | ||
445 | register long _sc_19 __asm__("$19"); \ | ||
446 | \ | ||
447 | _sc_0 = __NR_##name; \ | ||
448 | _sc_16 = (long) (arg1); \ | ||
449 | _sc_17 = (long) (arg2); \ | ||
450 | __asm__("callsys # %0 %1 %2 %3 %4" \ | ||
451 | : "=r"(_sc_0), "=r"(_sc_19) \ | ||
452 | : "0"(_sc_0), "r"(_sc_16), "r"(_sc_17) \ | ||
453 | : _syscall_clobbers); \ | ||
454 | _sc_ret = _sc_0, _sc_err = _sc_19; \ | ||
455 | } \ | ||
456 | _syscall_return(type); \ | ||
457 | } | ||
458 | |||
459 | #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ | ||
460 | type name(type1 arg1,type2 arg2,type3 arg3) \ | ||
461 | { \ | ||
462 | long _sc_ret, _sc_err; \ | ||
463 | { \ | ||
464 | register long _sc_0 __asm__("$0"); \ | ||
465 | register long _sc_16 __asm__("$16"); \ | ||
466 | register long _sc_17 __asm__("$17"); \ | ||
467 | register long _sc_18 __asm__("$18"); \ | ||
468 | register long _sc_19 __asm__("$19"); \ | ||
469 | \ | ||
470 | _sc_0 = __NR_##name; \ | ||
471 | _sc_16 = (long) (arg1); \ | ||
472 | _sc_17 = (long) (arg2); \ | ||
473 | _sc_18 = (long) (arg3); \ | ||
474 | __asm__("callsys # %0 %1 %2 %3 %4 %5" \ | ||
475 | : "=r"(_sc_0), "=r"(_sc_19) \ | ||
476 | : "0"(_sc_0), "r"(_sc_16), "r"(_sc_17), \ | ||
477 | "r"(_sc_18) \ | ||
478 | : _syscall_clobbers); \ | ||
479 | _sc_ret = _sc_0, _sc_err = _sc_19; \ | ||
480 | } \ | ||
481 | _syscall_return(type); \ | ||
482 | } | ||
483 | |||
484 | #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \ | ||
485 | type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ | ||
486 | { \ | ||
487 | long _sc_ret, _sc_err; \ | ||
488 | { \ | ||
489 | register long _sc_0 __asm__("$0"); \ | ||
490 | register long _sc_16 __asm__("$16"); \ | ||
491 | register long _sc_17 __asm__("$17"); \ | ||
492 | register long _sc_18 __asm__("$18"); \ | ||
493 | register long _sc_19 __asm__("$19"); \ | ||
494 | \ | ||
495 | _sc_0 = __NR_##name; \ | ||
496 | _sc_16 = (long) (arg1); \ | ||
497 | _sc_17 = (long) (arg2); \ | ||
498 | _sc_18 = (long) (arg3); \ | ||
499 | _sc_19 = (long) (arg4); \ | ||
500 | __asm__("callsys # %0 %1 %2 %3 %4 %5 %6" \ | ||
501 | : "=r"(_sc_0), "=r"(_sc_19) \ | ||
502 | : "0"(_sc_0), "r"(_sc_16), "r"(_sc_17), \ | ||
503 | "r"(_sc_18), "1"(_sc_19) \ | ||
504 | : _syscall_clobbers); \ | ||
505 | _sc_ret = _sc_0, _sc_err = _sc_19; \ | ||
506 | } \ | ||
507 | _syscall_return(type); \ | ||
508 | } | ||
509 | |||
510 | #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \ | ||
511 | type5,arg5) \ | ||
512 | type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \ | ||
513 | { \ | ||
514 | long _sc_ret, _sc_err; \ | ||
515 | { \ | ||
516 | register long _sc_0 __asm__("$0"); \ | ||
517 | register long _sc_16 __asm__("$16"); \ | ||
518 | register long _sc_17 __asm__("$17"); \ | ||
519 | register long _sc_18 __asm__("$18"); \ | ||
520 | register long _sc_19 __asm__("$19"); \ | ||
521 | register long _sc_20 __asm__("$20"); \ | ||
522 | \ | ||
523 | _sc_0 = __NR_##name; \ | ||
524 | _sc_16 = (long) (arg1); \ | ||
525 | _sc_17 = (long) (arg2); \ | ||
526 | _sc_18 = (long) (arg3); \ | ||
527 | _sc_19 = (long) (arg4); \ | ||
528 | _sc_20 = (long) (arg5); \ | ||
529 | __asm__("callsys # %0 %1 %2 %3 %4 %5 %6 %7" \ | ||
530 | : "=r"(_sc_0), "=r"(_sc_19) \ | ||
531 | : "0"(_sc_0), "r"(_sc_16), "r"(_sc_17), \ | ||
532 | "r"(_sc_18), "1"(_sc_19), "r"(_sc_20) \ | ||
533 | : _syscall_clobbers); \ | ||
534 | _sc_ret = _sc_0, _sc_err = _sc_19; \ | ||
535 | } \ | ||
536 | _syscall_return(type); \ | ||
537 | } | ||
538 | |||
539 | #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \ | ||
540 | type5,arg5,type6,arg6) \ | ||
541 | type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5, type6 arg6)\ | ||
542 | { \ | ||
543 | long _sc_ret, _sc_err; \ | ||
544 | { \ | ||
545 | register long _sc_0 __asm__("$0"); \ | ||
546 | register long _sc_16 __asm__("$16"); \ | ||
547 | register long _sc_17 __asm__("$17"); \ | ||
548 | register long _sc_18 __asm__("$18"); \ | ||
549 | register long _sc_19 __asm__("$19"); \ | ||
550 | register long _sc_20 __asm__("$20"); \ | ||
551 | register long _sc_21 __asm__("$21"); \ | ||
552 | \ | ||
553 | _sc_0 = __NR_##name; \ | ||
554 | _sc_16 = (long) (arg1); \ | ||
555 | _sc_17 = (long) (arg2); \ | ||
556 | _sc_18 = (long) (arg3); \ | ||
557 | _sc_19 = (long) (arg4); \ | ||
558 | _sc_20 = (long) (arg5); \ | ||
559 | _sc_21 = (long) (arg6); \ | ||
560 | __asm__("callsys # %0 %1 %2 %3 %4 %5 %6 %7 %8" \ | ||
561 | : "=r"(_sc_0), "=r"(_sc_19) \ | ||
562 | : "0"(_sc_0), "r"(_sc_16), "r"(_sc_17), \ | ||
563 | "r"(_sc_18), "1"(_sc_19), "r"(_sc_20), "r"(_sc_21) \ | ||
564 | : _syscall_clobbers); \ | ||
565 | _sc_ret = _sc_0, _sc_err = _sc_19; \ | ||
566 | } \ | ||
567 | _syscall_return(type); \ | ||
568 | } | ||
569 | |||
570 | #endif /* __GNUC__ */ | ||
571 | |||
572 | #define __ARCH_WANT_IPC_PARSE_VERSION | 390 | #define __ARCH_WANT_IPC_PARSE_VERSION |
573 | #define __ARCH_WANT_OLD_READDIR | 391 | #define __ARCH_WANT_OLD_READDIR |
574 | #define __ARCH_WANT_STAT64 | 392 | #define __ARCH_WANT_STAT64 |
diff --git a/include/asm-arm/arch-omap/irda.h b/include/asm-arm/arch-omap/irda.h index 805ae3575e44..345a649ec838 100644 --- a/include/asm-arm/arch-omap/irda.h +++ b/include/asm-arm/arch-omap/irda.h | |||
@@ -24,7 +24,7 @@ struct omap_irda_config { | |||
24 | /* Very specific to the needs of some platforms (h3,h4) | 24 | /* Very specific to the needs of some platforms (h3,h4) |
25 | * having calls which can sleep in irda_set_speed. | 25 | * having calls which can sleep in irda_set_speed. |
26 | */ | 26 | */ |
27 | struct work_struct gpio_expa; | 27 | struct delayed_work gpio_expa; |
28 | int rx_channel; | 28 | int rx_channel; |
29 | int tx_channel; | 29 | int tx_channel; |
30 | unsigned long dest_start; | 30 | unsigned long dest_start; |
diff --git a/include/asm-arm/dma-mapping.h b/include/asm-arm/dma-mapping.h index 666617711c81..9bc46b486afb 100644 --- a/include/asm-arm/dma-mapping.h +++ b/include/asm-arm/dma-mapping.h | |||
@@ -48,7 +48,7 @@ static inline int dma_get_cache_alignment(void) | |||
48 | return 32; | 48 | return 32; |
49 | } | 49 | } |
50 | 50 | ||
51 | static inline int dma_is_consistent(dma_addr_t handle) | 51 | static inline int dma_is_consistent(struct device *dev, dma_addr_t handle) |
52 | { | 52 | { |
53 | return !!arch_is_coherent(); | 53 | return !!arch_is_coherent(); |
54 | } | 54 | } |
diff --git a/include/asm-arm/setup.h b/include/asm-arm/setup.h index aa4b5782f0c9..e5407392afca 100644 --- a/include/asm-arm/setup.h +++ b/include/asm-arm/setup.h | |||
@@ -14,55 +14,57 @@ | |||
14 | #ifndef __ASMARM_SETUP_H | 14 | #ifndef __ASMARM_SETUP_H |
15 | #define __ASMARM_SETUP_H | 15 | #define __ASMARM_SETUP_H |
16 | 16 | ||
17 | #include <asm/types.h> | ||
18 | |||
17 | #define COMMAND_LINE_SIZE 1024 | 19 | #define COMMAND_LINE_SIZE 1024 |
18 | 20 | ||
19 | /* The list ends with an ATAG_NONE node. */ | 21 | /* The list ends with an ATAG_NONE node. */ |
20 | #define ATAG_NONE 0x00000000 | 22 | #define ATAG_NONE 0x00000000 |
21 | 23 | ||
22 | struct tag_header { | 24 | struct tag_header { |
23 | u32 size; | 25 | __u32 size; |
24 | u32 tag; | 26 | __u32 tag; |
25 | }; | 27 | }; |
26 | 28 | ||
27 | /* The list must start with an ATAG_CORE node */ | 29 | /* The list must start with an ATAG_CORE node */ |
28 | #define ATAG_CORE 0x54410001 | 30 | #define ATAG_CORE 0x54410001 |
29 | 31 | ||
30 | struct tag_core { | 32 | struct tag_core { |
31 | u32 flags; /* bit 0 = read-only */ | 33 | __u32 flags; /* bit 0 = read-only */ |
32 | u32 pagesize; | 34 | __u32 pagesize; |
33 | u32 rootdev; | 35 | __u32 rootdev; |
34 | }; | 36 | }; |
35 | 37 | ||
36 | /* it is allowed to have multiple ATAG_MEM nodes */ | 38 | /* it is allowed to have multiple ATAG_MEM nodes */ |
37 | #define ATAG_MEM 0x54410002 | 39 | #define ATAG_MEM 0x54410002 |
38 | 40 | ||
39 | struct tag_mem32 { | 41 | struct tag_mem32 { |
40 | u32 size; | 42 | __u32 size; |
41 | u32 start; /* physical start address */ | 43 | __u32 start; /* physical start address */ |
42 | }; | 44 | }; |
43 | 45 | ||
44 | /* VGA text type displays */ | 46 | /* VGA text type displays */ |
45 | #define ATAG_VIDEOTEXT 0x54410003 | 47 | #define ATAG_VIDEOTEXT 0x54410003 |
46 | 48 | ||
47 | struct tag_videotext { | 49 | struct tag_videotext { |
48 | u8 x; | 50 | __u8 x; |
49 | u8 y; | 51 | __u8 y; |
50 | u16 video_page; | 52 | __u16 video_page; |
51 | u8 video_mode; | 53 | __u8 video_mode; |
52 | u8 video_cols; | 54 | __u8 video_cols; |
53 | u16 video_ega_bx; | 55 | __u16 video_ega_bx; |
54 | u8 video_lines; | 56 | __u8 video_lines; |
55 | u8 video_isvga; | 57 | __u8 video_isvga; |
56 | u16 video_points; | 58 | __u16 video_points; |
57 | }; | 59 | }; |
58 | 60 | ||
59 | /* describes how the ramdisk will be used in kernel */ | 61 | /* describes how the ramdisk will be used in kernel */ |
60 | #define ATAG_RAMDISK 0x54410004 | 62 | #define ATAG_RAMDISK 0x54410004 |
61 | 63 | ||
62 | struct tag_ramdisk { | 64 | struct tag_ramdisk { |
63 | u32 flags; /* bit 0 = load, bit 1 = prompt */ | 65 | __u32 flags; /* bit 0 = load, bit 1 = prompt */ |
64 | u32 size; /* decompressed ramdisk size in _kilo_ bytes */ | 66 | __u32 size; /* decompressed ramdisk size in _kilo_ bytes */ |
65 | u32 start; /* starting block of floppy-based RAM disk image */ | 67 | __u32 start; /* starting block of floppy-based RAM disk image */ |
66 | }; | 68 | }; |
67 | 69 | ||
68 | /* describes where the compressed ramdisk image lives (virtual address) */ | 70 | /* describes where the compressed ramdisk image lives (virtual address) */ |
@@ -76,23 +78,23 @@ struct tag_ramdisk { | |||
76 | #define ATAG_INITRD2 0x54420005 | 78 | #define ATAG_INITRD2 0x54420005 |
77 | 79 | ||
78 | struct tag_initrd { | 80 | struct tag_initrd { |
79 | u32 start; /* physical start address */ | 81 | __u32 start; /* physical start address */ |
80 | u32 size; /* size of compressed ramdisk image in bytes */ | 82 | __u32 size; /* size of compressed ramdisk image in bytes */ |
81 | }; | 83 | }; |
82 | 84 | ||
83 | /* board serial number. "64 bits should be enough for everybody" */ | 85 | /* board serial number. "64 bits should be enough for everybody" */ |
84 | #define ATAG_SERIAL 0x54410006 | 86 | #define ATAG_SERIAL 0x54410006 |
85 | 87 | ||
86 | struct tag_serialnr { | 88 | struct tag_serialnr { |
87 | u32 low; | 89 | __u32 low; |
88 | u32 high; | 90 | __u32 high; |
89 | }; | 91 | }; |
90 | 92 | ||
91 | /* board revision */ | 93 | /* board revision */ |
92 | #define ATAG_REVISION 0x54410007 | 94 | #define ATAG_REVISION 0x54410007 |
93 | 95 | ||
94 | struct tag_revision { | 96 | struct tag_revision { |
95 | u32 rev; | 97 | __u32 rev; |
96 | }; | 98 | }; |
97 | 99 | ||
98 | /* initial values for vesafb-type framebuffers. see struct screen_info | 100 | /* initial values for vesafb-type framebuffers. see struct screen_info |
@@ -101,20 +103,20 @@ struct tag_revision { | |||
101 | #define ATAG_VIDEOLFB 0x54410008 | 103 | #define ATAG_VIDEOLFB 0x54410008 |
102 | 104 | ||
103 | struct tag_videolfb { | 105 | struct tag_videolfb { |
104 | u16 lfb_width; | 106 | __u16 lfb_width; |
105 | u16 lfb_height; | 107 | __u16 lfb_height; |
106 | u16 lfb_depth; | 108 | __u16 lfb_depth; |
107 | u16 lfb_linelength; | 109 | __u16 lfb_linelength; |
108 | u32 lfb_base; | 110 | __u32 lfb_base; |
109 | u32 lfb_size; | 111 | __u32 lfb_size; |
110 | u8 red_size; | 112 | __u8 red_size; |
111 | u8 red_pos; | 113 | __u8 red_pos; |
112 | u8 green_size; | 114 | __u8 green_size; |
113 | u8 green_pos; | 115 | __u8 green_pos; |
114 | u8 blue_size; | 116 | __u8 blue_size; |
115 | u8 blue_pos; | 117 | __u8 blue_pos; |
116 | u8 rsvd_size; | 118 | __u8 rsvd_size; |
117 | u8 rsvd_pos; | 119 | __u8 rsvd_pos; |
118 | }; | 120 | }; |
119 | 121 | ||
120 | /* command line: \0 terminated string */ | 122 | /* command line: \0 terminated string */ |
@@ -128,17 +130,17 @@ struct tag_cmdline { | |||
128 | #define ATAG_ACORN 0x41000101 | 130 | #define ATAG_ACORN 0x41000101 |
129 | 131 | ||
130 | struct tag_acorn { | 132 | struct tag_acorn { |
131 | u32 memc_control_reg; | 133 | __u32 memc_control_reg; |
132 | u32 vram_pages; | 134 | __u32 vram_pages; |
133 | u8 sounddefault; | 135 | __u8 sounddefault; |
134 | u8 adfsdrives; | 136 | __u8 adfsdrives; |
135 | }; | 137 | }; |
136 | 138 | ||
137 | /* footbridge memory clock, see arch/arm/mach-footbridge/arch.c */ | 139 | /* footbridge memory clock, see arch/arm/mach-footbridge/arch.c */ |
138 | #define ATAG_MEMCLK 0x41000402 | 140 | #define ATAG_MEMCLK 0x41000402 |
139 | 141 | ||
140 | struct tag_memclk { | 142 | struct tag_memclk { |
141 | u32 fmemclk; | 143 | __u32 fmemclk; |
142 | }; | 144 | }; |
143 | 145 | ||
144 | struct tag { | 146 | struct tag { |
@@ -167,24 +169,26 @@ struct tag { | |||
167 | }; | 169 | }; |
168 | 170 | ||
169 | struct tagtable { | 171 | struct tagtable { |
170 | u32 tag; | 172 | __u32 tag; |
171 | int (*parse)(const struct tag *); | 173 | int (*parse)(const struct tag *); |
172 | }; | 174 | }; |
173 | 175 | ||
174 | #define __tag __attribute_used__ __attribute__((__section__(".taglist.init"))) | ||
175 | #define __tagtable(tag, fn) \ | ||
176 | static struct tagtable __tagtable_##fn __tag = { tag, fn } | ||
177 | |||
178 | #define tag_member_present(tag,member) \ | 176 | #define tag_member_present(tag,member) \ |
179 | ((unsigned long)(&((struct tag *)0L)->member + 1) \ | 177 | ((unsigned long)(&((struct tag *)0L)->member + 1) \ |
180 | <= (tag)->hdr.size * 4) | 178 | <= (tag)->hdr.size * 4) |
181 | 179 | ||
182 | #define tag_next(t) ((struct tag *)((u32 *)(t) + (t)->hdr.size)) | 180 | #define tag_next(t) ((struct tag *)((__u32 *)(t) + (t)->hdr.size)) |
183 | #define tag_size(type) ((sizeof(struct tag_header) + sizeof(struct type)) >> 2) | 181 | #define tag_size(type) ((sizeof(struct tag_header) + sizeof(struct type)) >> 2) |
184 | 182 | ||
185 | #define for_each_tag(t,base) \ | 183 | #define for_each_tag(t,base) \ |
186 | for (t = base; t->hdr.size; t = tag_next(t)) | 184 | for (t = base; t->hdr.size; t = tag_next(t)) |
187 | 185 | ||
186 | #ifdef __KERNEL__ | ||
187 | |||
188 | #define __tag __attribute_used__ __attribute__((__section__(".taglist.init"))) | ||
189 | #define __tagtable(tag, fn) \ | ||
190 | static struct tagtable __tagtable_##fn __tag = { tag, fn } | ||
191 | |||
188 | /* | 192 | /* |
189 | * Memory map description | 193 | * Memory map description |
190 | */ | 194 | */ |
@@ -217,4 +221,6 @@ struct early_params { | |||
217 | static struct early_params __early_##fn __attribute_used__ \ | 221 | static struct early_params __early_##fn __attribute_used__ \ |
218 | __attribute__((__section__(".early_param.init"))) = { name, fn } | 222 | __attribute__((__section__(".early_param.init"))) = { name, fn } |
219 | 223 | ||
224 | #endif /* __KERNEL__ */ | ||
225 | |||
220 | #endif | 226 | #endif |
diff --git a/include/asm-arm/unistd.h b/include/asm-arm/unistd.h index 14a87eec5a2d..d44c629d8424 100644 --- a/include/asm-arm/unistd.h +++ b/include/asm-arm/unistd.h | |||
@@ -377,156 +377,6 @@ | |||
377 | #endif | 377 | #endif |
378 | 378 | ||
379 | #ifdef __KERNEL__ | 379 | #ifdef __KERNEL__ |
380 | #include <linux/err.h> | ||
381 | #include <linux/linkage.h> | ||
382 | |||
383 | #define __sys2(x) #x | ||
384 | #define __sys1(x) __sys2(x) | ||
385 | |||
386 | #ifndef __syscall | ||
387 | #if defined(__thumb__) || defined(__ARM_EABI__) | ||
388 | #define __SYS_REG(name) register long __sysreg __asm__("r7") = __NR_##name; | ||
389 | #define __SYS_REG_LIST(regs...) "r" (__sysreg) , ##regs | ||
390 | #define __syscall(name) "swi\t0" | ||
391 | #else | ||
392 | #define __SYS_REG(name) | ||
393 | #define __SYS_REG_LIST(regs...) regs | ||
394 | #define __syscall(name) "swi\t" __sys1(__NR_##name) "" | ||
395 | #endif | ||
396 | #endif | ||
397 | |||
398 | #define __syscall_return(type, res) \ | ||
399 | do { \ | ||
400 | if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \ | ||
401 | errno = -(res); \ | ||
402 | res = -1; \ | ||
403 | } \ | ||
404 | return (type) (res); \ | ||
405 | } while (0) | ||
406 | |||
407 | #define _syscall0(type,name) \ | ||
408 | type name(void) { \ | ||
409 | __SYS_REG(name) \ | ||
410 | register long __res_r0 __asm__("r0"); \ | ||
411 | long __res; \ | ||
412 | __asm__ __volatile__ ( \ | ||
413 | __syscall(name) \ | ||
414 | : "=r" (__res_r0) \ | ||
415 | : __SYS_REG_LIST() \ | ||
416 | : "memory" ); \ | ||
417 | __res = __res_r0; \ | ||
418 | __syscall_return(type,__res); \ | ||
419 | } | ||
420 | |||
421 | #define _syscall1(type,name,type1,arg1) \ | ||
422 | type name(type1 arg1) { \ | ||
423 | __SYS_REG(name) \ | ||
424 | register long __r0 __asm__("r0") = (long)arg1; \ | ||
425 | register long __res_r0 __asm__("r0"); \ | ||
426 | long __res; \ | ||
427 | __asm__ __volatile__ ( \ | ||
428 | __syscall(name) \ | ||
429 | : "=r" (__res_r0) \ | ||
430 | : __SYS_REG_LIST( "0" (__r0) ) \ | ||
431 | : "memory" ); \ | ||
432 | __res = __res_r0; \ | ||
433 | __syscall_return(type,__res); \ | ||
434 | } | ||
435 | |||
436 | #define _syscall2(type,name,type1,arg1,type2,arg2) \ | ||
437 | type name(type1 arg1,type2 arg2) { \ | ||
438 | __SYS_REG(name) \ | ||
439 | register long __r0 __asm__("r0") = (long)arg1; \ | ||
440 | register long __r1 __asm__("r1") = (long)arg2; \ | ||
441 | register long __res_r0 __asm__("r0"); \ | ||
442 | long __res; \ | ||
443 | __asm__ __volatile__ ( \ | ||
444 | __syscall(name) \ | ||
445 | : "=r" (__res_r0) \ | ||
446 | : __SYS_REG_LIST( "0" (__r0), "r" (__r1) ) \ | ||
447 | : "memory" ); \ | ||
448 | __res = __res_r0; \ | ||
449 | __syscall_return(type,__res); \ | ||
450 | } | ||
451 | |||
452 | |||
453 | #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ | ||
454 | type name(type1 arg1,type2 arg2,type3 arg3) { \ | ||
455 | __SYS_REG(name) \ | ||
456 | register long __r0 __asm__("r0") = (long)arg1; \ | ||
457 | register long __r1 __asm__("r1") = (long)arg2; \ | ||
458 | register long __r2 __asm__("r2") = (long)arg3; \ | ||
459 | register long __res_r0 __asm__("r0"); \ | ||
460 | long __res; \ | ||
461 | __asm__ __volatile__ ( \ | ||
462 | __syscall(name) \ | ||
463 | : "=r" (__res_r0) \ | ||
464 | : __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2) ) \ | ||
465 | : "memory" ); \ | ||
466 | __res = __res_r0; \ | ||
467 | __syscall_return(type,__res); \ | ||
468 | } | ||
469 | |||
470 | |||
471 | #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4)\ | ||
472 | type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) { \ | ||
473 | __SYS_REG(name) \ | ||
474 | register long __r0 __asm__("r0") = (long)arg1; \ | ||
475 | register long __r1 __asm__("r1") = (long)arg2; \ | ||
476 | register long __r2 __asm__("r2") = (long)arg3; \ | ||
477 | register long __r3 __asm__("r3") = (long)arg4; \ | ||
478 | register long __res_r0 __asm__("r0"); \ | ||
479 | long __res; \ | ||
480 | __asm__ __volatile__ ( \ | ||
481 | __syscall(name) \ | ||
482 | : "=r" (__res_r0) \ | ||
483 | : __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2), "r" (__r3) ) \ | ||
484 | : "memory" ); \ | ||
485 | __res = __res_r0; \ | ||
486 | __syscall_return(type,__res); \ | ||
487 | } | ||
488 | |||
489 | |||
490 | #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \ | ||
491 | type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) { \ | ||
492 | __SYS_REG(name) \ | ||
493 | register long __r0 __asm__("r0") = (long)arg1; \ | ||
494 | register long __r1 __asm__("r1") = (long)arg2; \ | ||
495 | register long __r2 __asm__("r2") = (long)arg3; \ | ||
496 | register long __r3 __asm__("r3") = (long)arg4; \ | ||
497 | register long __r4 __asm__("r4") = (long)arg5; \ | ||
498 | register long __res_r0 __asm__("r0"); \ | ||
499 | long __res; \ | ||
500 | __asm__ __volatile__ ( \ | ||
501 | __syscall(name) \ | ||
502 | : "=r" (__res_r0) \ | ||
503 | : __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2), \ | ||
504 | "r" (__r3), "r" (__r4) ) \ | ||
505 | : "memory" ); \ | ||
506 | __res = __res_r0; \ | ||
507 | __syscall_return(type,__res); \ | ||
508 | } | ||
509 | |||
510 | #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5,type6,arg6) \ | ||
511 | type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6) { \ | ||
512 | __SYS_REG(name) \ | ||
513 | register long __r0 __asm__("r0") = (long)arg1; \ | ||
514 | register long __r1 __asm__("r1") = (long)arg2; \ | ||
515 | register long __r2 __asm__("r2") = (long)arg3; \ | ||
516 | register long __r3 __asm__("r3") = (long)arg4; \ | ||
517 | register long __r4 __asm__("r4") = (long)arg5; \ | ||
518 | register long __r5 __asm__("r5") = (long)arg6; \ | ||
519 | register long __res_r0 __asm__("r0"); \ | ||
520 | long __res; \ | ||
521 | __asm__ __volatile__ ( \ | ||
522 | __syscall(name) \ | ||
523 | : "=r" (__res_r0) \ | ||
524 | : __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2), \ | ||
525 | "r" (__r3), "r" (__r4), "r" (__r5) ) \ | ||
526 | : "memory" ); \ | ||
527 | __res = __res_r0; \ | ||
528 | __syscall_return(type,__res); \ | ||
529 | } | ||
530 | 380 | ||
531 | #define __ARCH_WANT_IPC_PARSE_VERSION | 381 | #define __ARCH_WANT_IPC_PARSE_VERSION |
532 | #define __ARCH_WANT_STAT64 | 382 | #define __ARCH_WANT_STAT64 |
diff --git a/include/asm-arm26/pgalloc.h b/include/asm-arm26/pgalloc.h index 6437167b1ffe..7725af3ddb4d 100644 --- a/include/asm-arm26/pgalloc.h +++ b/include/asm-arm26/pgalloc.h | |||
@@ -15,7 +15,7 @@ | |||
15 | #include <asm/tlbflush.h> | 15 | #include <asm/tlbflush.h> |
16 | #include <linux/slab.h> | 16 | #include <linux/slab.h> |
17 | 17 | ||
18 | extern kmem_cache_t *pte_cache; | 18 | extern struct kmem_cache *pte_cache; |
19 | 19 | ||
20 | static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr){ | 20 | static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr){ |
21 | return kmem_cache_alloc(pte_cache, GFP_KERNEL); | 21 | return kmem_cache_alloc(pte_cache, GFP_KERNEL); |
diff --git a/include/asm-arm26/setup.h b/include/asm-arm26/setup.h index 6348931be65d..1a867b4e8d53 100644 --- a/include/asm-arm26/setup.h +++ b/include/asm-arm26/setup.h | |||
@@ -16,6 +16,8 @@ | |||
16 | 16 | ||
17 | #define COMMAND_LINE_SIZE 1024 | 17 | #define COMMAND_LINE_SIZE 1024 |
18 | 18 | ||
19 | #ifdef __KERNEL__ | ||
20 | |||
19 | /* The list ends with an ATAG_NONE node. */ | 21 | /* The list ends with an ATAG_NONE node. */ |
20 | #define ATAG_NONE 0x00000000 | 22 | #define ATAG_NONE 0x00000000 |
21 | 23 | ||
@@ -202,4 +204,6 @@ struct meminfo { | |||
202 | 204 | ||
203 | extern struct meminfo meminfo; | 205 | extern struct meminfo meminfo; |
204 | 206 | ||
207 | #endif /* __KERNEL__ */ | ||
208 | |||
205 | #endif | 209 | #endif |
diff --git a/include/asm-arm26/unistd.h b/include/asm-arm26/unistd.h index 25a5eead85be..4c3b919177e5 100644 --- a/include/asm-arm26/unistd.h +++ b/include/asm-arm26/unistd.h | |||
@@ -311,139 +311,6 @@ | |||
311 | #define __ARM_NR_usr26 (__ARM_NR_BASE+3) | 311 | #define __ARM_NR_usr26 (__ARM_NR_BASE+3) |
312 | 312 | ||
313 | #ifdef __KERNEL__ | 313 | #ifdef __KERNEL__ |
314 | #include <linux/err.h> | ||
315 | #include <linux/linkage.h> | ||
316 | |||
317 | #define __sys2(x) #x | ||
318 | #define __sys1(x) __sys2(x) | ||
319 | |||
320 | #ifndef __syscall | ||
321 | #define __syscall(name) "swi\t" __sys1(__NR_##name) "" | ||
322 | #endif | ||
323 | |||
324 | #define __syscall_return(type, res) \ | ||
325 | do { \ | ||
326 | if ((unsigned long)(res) >= (unsigned long)-MAX_ERRNO) { \ | ||
327 | errno = -(res); \ | ||
328 | res = -1; \ | ||
329 | } \ | ||
330 | return (type) (res); \ | ||
331 | } while (0) | ||
332 | |||
333 | #define _syscall0(type,name) \ | ||
334 | type name(void) { \ | ||
335 | register long __res_r0 __asm__("r0"); \ | ||
336 | long __res; \ | ||
337 | __asm__ __volatile__ ( \ | ||
338 | __syscall(name) \ | ||
339 | : "=r" (__res_r0) \ | ||
340 | : \ | ||
341 | : "lr"); \ | ||
342 | __res = __res_r0; \ | ||
343 | __syscall_return(type,__res); \ | ||
344 | } | ||
345 | |||
346 | #define _syscall1(type,name,type1,arg1) \ | ||
347 | type name(type1 arg1) { \ | ||
348 | register long __r0 __asm__("r0") = (long)arg1; \ | ||
349 | register long __res_r0 __asm__("r0"); \ | ||
350 | long __res; \ | ||
351 | __asm__ __volatile__ ( \ | ||
352 | __syscall(name) \ | ||
353 | : "=r" (__res_r0) \ | ||
354 | : "r" (__r0) \ | ||
355 | : "lr"); \ | ||
356 | __res = __res_r0; \ | ||
357 | __syscall_return(type,__res); \ | ||
358 | } | ||
359 | |||
360 | #define _syscall2(type,name,type1,arg1,type2,arg2) \ | ||
361 | type name(type1 arg1,type2 arg2) { \ | ||
362 | register long __r0 __asm__("r0") = (long)arg1; \ | ||
363 | register long __r1 __asm__("r1") = (long)arg2; \ | ||
364 | register long __res_r0 __asm__("r0"); \ | ||
365 | long __res; \ | ||
366 | __asm__ __volatile__ ( \ | ||
367 | __syscall(name) \ | ||
368 | : "=r" (__res_r0) \ | ||
369 | : "r" (__r0),"r" (__r1) \ | ||
370 | : "lr"); \ | ||
371 | __res = __res_r0; \ | ||
372 | __syscall_return(type,__res); \ | ||
373 | } | ||
374 | |||
375 | |||
376 | #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ | ||
377 | type name(type1 arg1,type2 arg2,type3 arg3) { \ | ||
378 | register long __r0 __asm__("r0") = (long)arg1; \ | ||
379 | register long __r1 __asm__("r1") = (long)arg2; \ | ||
380 | register long __r2 __asm__("r2") = (long)arg3; \ | ||
381 | register long __res_r0 __asm__("r0"); \ | ||
382 | long __res; \ | ||
383 | __asm__ __volatile__ ( \ | ||
384 | __syscall(name) \ | ||
385 | : "=r" (__res_r0) \ | ||
386 | : "r" (__r0),"r" (__r1),"r" (__r2) \ | ||
387 | : "lr"); \ | ||
388 | __res = __res_r0; \ | ||
389 | __syscall_return(type,__res); \ | ||
390 | } | ||
391 | |||
392 | |||
393 | #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4)\ | ||
394 | type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) { \ | ||
395 | register long __r0 __asm__("r0") = (long)arg1; \ | ||
396 | register long __r1 __asm__("r1") = (long)arg2; \ | ||
397 | register long __r2 __asm__("r2") = (long)arg3; \ | ||
398 | register long __r3 __asm__("r3") = (long)arg4; \ | ||
399 | register long __res_r0 __asm__("r0"); \ | ||
400 | long __res; \ | ||
401 | __asm__ __volatile__ ( \ | ||
402 | __syscall(name) \ | ||
403 | : "=r" (__res_r0) \ | ||
404 | : "r" (__r0),"r" (__r1),"r" (__r2),"r" (__r3) \ | ||
405 | : "lr"); \ | ||
406 | __res = __res_r0; \ | ||
407 | __syscall_return(type,__res); \ | ||
408 | } | ||
409 | |||
410 | |||
411 | #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \ | ||
412 | type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) { \ | ||
413 | register long __r0 __asm__("r0") = (long)arg1; \ | ||
414 | register long __r1 __asm__("r1") = (long)arg2; \ | ||
415 | register long __r2 __asm__("r2") = (long)arg3; \ | ||
416 | register long __r3 __asm__("r3") = (long)arg4; \ | ||
417 | register long __r4 __asm__("r4") = (long)arg5; \ | ||
418 | register long __res_r0 __asm__("r0"); \ | ||
419 | long __res; \ | ||
420 | __asm__ __volatile__ ( \ | ||
421 | __syscall(name) \ | ||
422 | : "=r" (__res_r0) \ | ||
423 | : "r" (__r0),"r" (__r1),"r" (__r2),"r" (__r3),"r" (__r4) \ | ||
424 | : "lr"); \ | ||
425 | __res = __res_r0; \ | ||
426 | __syscall_return(type,__res); \ | ||
427 | } | ||
428 | |||
429 | #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5,type6,arg6) \ | ||
430 | type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6) { \ | ||
431 | register long __r0 __asm__("r0") = (long)arg1; \ | ||
432 | register long __r1 __asm__("r1") = (long)arg2; \ | ||
433 | register long __r2 __asm__("r2") = (long)arg3; \ | ||
434 | register long __r3 __asm__("r3") = (long)arg4; \ | ||
435 | register long __r4 __asm__("r4") = (long)arg5; \ | ||
436 | register long __r5 __asm__("r5") = (long)arg6; \ | ||
437 | register long __res_r0 __asm__("r0"); \ | ||
438 | long __res; \ | ||
439 | __asm__ __volatile__ ( \ | ||
440 | __syscall(name) \ | ||
441 | : "=r" (__res_r0) \ | ||
442 | : "r" (__r0),"r" (__r1),"r" (__r2),"r" (__r3), "r" (__r4),"r" (__r5) \ | ||
443 | : "lr"); \ | ||
444 | __res = __res_r0; \ | ||
445 | __syscall_return(type,__res); \ | ||
446 | } | ||
447 | 314 | ||
448 | #define __ARCH_WANT_IPC_PARSE_VERSION | 315 | #define __ARCH_WANT_IPC_PARSE_VERSION |
449 | #define __ARCH_WANT_OLD_READDIR | 316 | #define __ARCH_WANT_OLD_READDIR |
diff --git a/include/asm-avr32/dma-mapping.h b/include/asm-avr32/dma-mapping.h index 4c40cb41cdf8..0580b5d62bba 100644 --- a/include/asm-avr32/dma-mapping.h +++ b/include/asm-avr32/dma-mapping.h | |||
@@ -8,7 +8,8 @@ | |||
8 | #include <asm/cacheflush.h> | 8 | #include <asm/cacheflush.h> |
9 | #include <asm/io.h> | 9 | #include <asm/io.h> |
10 | 10 | ||
11 | extern void dma_cache_sync(void *vaddr, size_t size, int direction); | 11 | extern void dma_cache_sync(struct device *dev, void *vaddr, size_t size, |
12 | int direction); | ||
12 | 13 | ||
13 | /* | 14 | /* |
14 | * Return whether the given device DMA address mask can be supported | 15 | * Return whether the given device DMA address mask can be supported |
@@ -307,7 +308,7 @@ dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, | |||
307 | #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) | 308 | #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) |
308 | #define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) | 309 | #define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) |
309 | 310 | ||
310 | static inline int dma_is_consistent(dma_addr_t dma_addr) | 311 | static inline int dma_is_consistent(struct device *dev, dma_addr_t dma_addr) |
311 | { | 312 | { |
312 | return 1; | 313 | return 1; |
313 | } | 314 | } |
diff --git a/include/asm-avr32/setup.h b/include/asm-avr32/setup.h index 10193da4113b..0a5224245e44 100644 --- a/include/asm-avr32/setup.h +++ b/include/asm-avr32/setup.h | |||
@@ -13,6 +13,8 @@ | |||
13 | 13 | ||
14 | #define COMMAND_LINE_SIZE 256 | 14 | #define COMMAND_LINE_SIZE 256 |
15 | 15 | ||
16 | #ifdef __KERNEL__ | ||
17 | |||
16 | /* Magic number indicating that a tag table is present */ | 18 | /* Magic number indicating that a tag table is present */ |
17 | #define ATAG_MAGIC 0xa2a25441 | 19 | #define ATAG_MAGIC 0xa2a25441 |
18 | 20 | ||
@@ -138,4 +140,6 @@ void chip_enable_sdram(void); | |||
138 | 140 | ||
139 | #endif /* !__ASSEMBLY__ */ | 141 | #endif /* !__ASSEMBLY__ */ |
140 | 142 | ||
143 | #endif /* __KERNEL__ */ | ||
144 | |||
141 | #endif /* __ASM_AVR32_SETUP_H__ */ | 145 | #endif /* __ASM_AVR32_SETUP_H__ */ |
diff --git a/include/asm-cris/arch-v10/bitops.h b/include/asm-cris/arch-v10/bitops.h index b73f5396e5a6..be85f6de25d3 100644 --- a/include/asm-cris/arch-v10/bitops.h +++ b/include/asm-cris/arch-v10/bitops.h | |||
@@ -10,7 +10,7 @@ | |||
10 | * number. They differ in that the first function also inverts all bits | 10 | * number. They differ in that the first function also inverts all bits |
11 | * in the input. | 11 | * in the input. |
12 | */ | 12 | */ |
13 | extern inline unsigned long cris_swapnwbrlz(unsigned long w) | 13 | static inline unsigned long cris_swapnwbrlz(unsigned long w) |
14 | { | 14 | { |
15 | /* Let's just say we return the result in the same register as the | 15 | /* Let's just say we return the result in the same register as the |
16 | input. Saying we clobber the input but can return the result | 16 | input. Saying we clobber the input but can return the result |
@@ -26,7 +26,7 @@ extern inline unsigned long cris_swapnwbrlz(unsigned long w) | |||
26 | return res; | 26 | return res; |
27 | } | 27 | } |
28 | 28 | ||
29 | extern inline unsigned long cris_swapwbrlz(unsigned long w) | 29 | static inline unsigned long cris_swapwbrlz(unsigned long w) |
30 | { | 30 | { |
31 | unsigned res; | 31 | unsigned res; |
32 | __asm__ ("swapwbr %0 \n\t" | 32 | __asm__ ("swapwbr %0 \n\t" |
@@ -40,7 +40,7 @@ extern inline unsigned long cris_swapwbrlz(unsigned long w) | |||
40 | * ffz = Find First Zero in word. Undefined if no zero exists, | 40 | * ffz = Find First Zero in word. Undefined if no zero exists, |
41 | * so code should check against ~0UL first.. | 41 | * so code should check against ~0UL first.. |
42 | */ | 42 | */ |
43 | extern inline unsigned long ffz(unsigned long w) | 43 | static inline unsigned long ffz(unsigned long w) |
44 | { | 44 | { |
45 | return cris_swapnwbrlz(w); | 45 | return cris_swapnwbrlz(w); |
46 | } | 46 | } |
@@ -51,7 +51,7 @@ extern inline unsigned long ffz(unsigned long w) | |||
51 | * | 51 | * |
52 | * Undefined if no bit exists, so code should check against 0 first. | 52 | * Undefined if no bit exists, so code should check against 0 first. |
53 | */ | 53 | */ |
54 | extern inline unsigned long __ffs(unsigned long word) | 54 | static inline unsigned long __ffs(unsigned long word) |
55 | { | 55 | { |
56 | return cris_swapnwbrlz(~word); | 56 | return cris_swapnwbrlz(~word); |
57 | } | 57 | } |
@@ -65,7 +65,7 @@ extern inline unsigned long __ffs(unsigned long word) | |||
65 | * differs in spirit from the above ffz (man ffs). | 65 | * differs in spirit from the above ffz (man ffs). |
66 | */ | 66 | */ |
67 | 67 | ||
68 | extern inline unsigned long kernel_ffs(unsigned long w) | 68 | static inline unsigned long kernel_ffs(unsigned long w) |
69 | { | 69 | { |
70 | return w ? cris_swapwbrlz (w) + 1 : 0; | 70 | return w ? cris_swapwbrlz (w) + 1 : 0; |
71 | } | 71 | } |
diff --git a/include/asm-cris/dma-mapping.h b/include/asm-cris/dma-mapping.h index cbf1a98f0129..662cea70152d 100644 --- a/include/asm-cris/dma-mapping.h +++ b/include/asm-cris/dma-mapping.h | |||
@@ -156,10 +156,10 @@ dma_get_cache_alignment(void) | |||
156 | return (1 << INTERNODE_CACHE_SHIFT); | 156 | return (1 << INTERNODE_CACHE_SHIFT); |
157 | } | 157 | } |
158 | 158 | ||
159 | #define dma_is_consistent(d) (1) | 159 | #define dma_is_consistent(d, h) (1) |
160 | 160 | ||
161 | static inline void | 161 | static inline void |
162 | dma_cache_sync(void *vaddr, size_t size, | 162 | dma_cache_sync(struct device *dev, void *vaddr, size_t size, |
163 | enum dma_data_direction direction) | 163 | enum dma_data_direction direction) |
164 | { | 164 | { |
165 | } | 165 | } |
diff --git a/include/asm-cris/semaphore-helper.h b/include/asm-cris/semaphore-helper.h index dbd0f30b85b6..a8e1e6cb7cd0 100644 --- a/include/asm-cris/semaphore-helper.h +++ b/include/asm-cris/semaphore-helper.h | |||
@@ -20,12 +20,12 @@ | |||
20 | /* | 20 | /* |
21 | * These two _must_ execute atomically wrt each other. | 21 | * These two _must_ execute atomically wrt each other. |
22 | */ | 22 | */ |
23 | extern inline void wake_one_more(struct semaphore * sem) | 23 | static inline void wake_one_more(struct semaphore * sem) |
24 | { | 24 | { |
25 | atomic_inc(&sem->waking); | 25 | atomic_inc(&sem->waking); |
26 | } | 26 | } |
27 | 27 | ||
28 | extern inline int waking_non_zero(struct semaphore *sem) | 28 | static inline int waking_non_zero(struct semaphore *sem) |
29 | { | 29 | { |
30 | unsigned long flags; | 30 | unsigned long flags; |
31 | int ret = 0; | 31 | int ret = 0; |
@@ -40,7 +40,7 @@ extern inline int waking_non_zero(struct semaphore *sem) | |||
40 | return ret; | 40 | return ret; |
41 | } | 41 | } |
42 | 42 | ||
43 | extern inline int waking_non_zero_interruptible(struct semaphore *sem, | 43 | static inline int waking_non_zero_interruptible(struct semaphore *sem, |
44 | struct task_struct *tsk) | 44 | struct task_struct *tsk) |
45 | { | 45 | { |
46 | int ret = 0; | 46 | int ret = 0; |
@@ -59,7 +59,7 @@ extern inline int waking_non_zero_interruptible(struct semaphore *sem, | |||
59 | return ret; | 59 | return ret; |
60 | } | 60 | } |
61 | 61 | ||
62 | extern inline int waking_non_zero_trylock(struct semaphore *sem) | 62 | static inline int waking_non_zero_trylock(struct semaphore *sem) |
63 | { | 63 | { |
64 | int ret = 1; | 64 | int ret = 1; |
65 | unsigned long flags; | 65 | unsigned long flags; |
diff --git a/include/asm-frv/dma-mapping.h b/include/asm-frv/dma-mapping.h index e9fc1d47797e..bcb2df68496e 100644 --- a/include/asm-frv/dma-mapping.h +++ b/include/asm-frv/dma-mapping.h | |||
@@ -172,10 +172,10 @@ int dma_get_cache_alignment(void) | |||
172 | return 1 << L1_CACHE_SHIFT; | 172 | return 1 << L1_CACHE_SHIFT; |
173 | } | 173 | } |
174 | 174 | ||
175 | #define dma_is_consistent(d) (1) | 175 | #define dma_is_consistent(d, h) (1) |
176 | 176 | ||
177 | static inline | 177 | static inline |
178 | void dma_cache_sync(void *vaddr, size_t size, | 178 | void dma_cache_sync(struct device *dev, void *vaddr, size_t size, |
179 | enum dma_data_direction direction) | 179 | enum dma_data_direction direction) |
180 | { | 180 | { |
181 | flush_write_buffers(); | 181 | flush_write_buffers(); |
diff --git a/include/asm-frv/highmem.h b/include/asm-frv/highmem.h index 0f390f41f816..ff4d6cdeb152 100644 --- a/include/asm-frv/highmem.h +++ b/include/asm-frv/highmem.h | |||
@@ -115,7 +115,7 @@ static inline void *kmap_atomic(struct page *page, enum km_type type) | |||
115 | { | 115 | { |
116 | unsigned long paddr; | 116 | unsigned long paddr; |
117 | 117 | ||
118 | inc_preempt_count(); | 118 | pagefault_disable(); |
119 | paddr = page_to_phys(page); | 119 | paddr = page_to_phys(page); |
120 | 120 | ||
121 | switch (type) { | 121 | switch (type) { |
@@ -170,8 +170,7 @@ static inline void kunmap_atomic(void *kvaddr, enum km_type type) | |||
170 | default: | 170 | default: |
171 | BUG(); | 171 | BUG(); |
172 | } | 172 | } |
173 | dec_preempt_count(); | 173 | pagefault_enable(); |
174 | preempt_check_resched(); | ||
175 | } | 174 | } |
176 | 175 | ||
177 | #endif /* !__ASSEMBLY__ */ | 176 | #endif /* !__ASSEMBLY__ */ |
diff --git a/include/asm-frv/param.h b/include/asm-frv/param.h index 168381ebb41a..365653b1726c 100644 --- a/include/asm-frv/param.h +++ b/include/asm-frv/param.h | |||
@@ -18,6 +18,5 @@ | |||
18 | #endif | 18 | #endif |
19 | 19 | ||
20 | #define MAXHOSTNAMELEN 64 /* max length of hostname */ | 20 | #define MAXHOSTNAMELEN 64 /* max length of hostname */ |
21 | #define COMMAND_LINE_SIZE 512 | ||
22 | 21 | ||
23 | #endif /* _ASM_PARAM_H */ | 22 | #endif /* _ASM_PARAM_H */ |
diff --git a/include/asm-frv/setup.h b/include/asm-frv/setup.h index 0d293b9a5857..afd787ceede6 100644 --- a/include/asm-frv/setup.h +++ b/include/asm-frv/setup.h | |||
@@ -12,6 +12,10 @@ | |||
12 | #ifndef _ASM_SETUP_H | 12 | #ifndef _ASM_SETUP_H |
13 | #define _ASM_SETUP_H | 13 | #define _ASM_SETUP_H |
14 | 14 | ||
15 | #define COMMAND_LINE_SIZE 512 | ||
16 | |||
17 | #ifdef __KERNEL__ | ||
18 | |||
15 | #include <linux/init.h> | 19 | #include <linux/init.h> |
16 | 20 | ||
17 | #ifndef __ASSEMBLY__ | 21 | #ifndef __ASSEMBLY__ |
@@ -22,4 +26,6 @@ extern unsigned long __initdata num_mappedpages; | |||
22 | 26 | ||
23 | #endif /* !__ASSEMBLY__ */ | 27 | #endif /* !__ASSEMBLY__ */ |
24 | 28 | ||
29 | #endif /* __KERNEL__ */ | ||
30 | |||
25 | #endif /* _ASM_SETUP_H */ | 31 | #endif /* _ASM_SETUP_H */ |
diff --git a/include/asm-frv/unistd.h b/include/asm-frv/unistd.h index 725e854928cf..584c0417ae4d 100644 --- a/include/asm-frv/unistd.h +++ b/include/asm-frv/unistd.h | |||
@@ -320,125 +320,6 @@ | |||
320 | #ifdef __KERNEL__ | 320 | #ifdef __KERNEL__ |
321 | 321 | ||
322 | #define NR_syscalls 310 | 322 | #define NR_syscalls 310 |
323 | #include <linux/err.h> | ||
324 | |||
325 | /* | ||
326 | * process the return value of a syscall, consigning it to one of two possible fates | ||
327 | * - user-visible error numbers are in the range -1 - -4095: see <asm-frv/errno.h> | ||
328 | */ | ||
329 | #undef __syscall_return | ||
330 | #define __syscall_return(type, res) \ | ||
331 | do { \ | ||
332 | unsigned long __sr2 = (res); \ | ||
333 | if (__builtin_expect(__sr2 >= (unsigned long)(-MAX_ERRNO), 0)) { \ | ||
334 | errno = (-__sr2); \ | ||
335 | __sr2 = ~0UL; \ | ||
336 | } \ | ||
337 | return (type) __sr2; \ | ||
338 | } while (0) | ||
339 | |||
340 | /* XXX - _foo needs to be __foo, while __NR_bar could be _NR_bar. */ | ||
341 | |||
342 | #undef _syscall0 | ||
343 | #define _syscall0(type,name) \ | ||
344 | type name(void) \ | ||
345 | { \ | ||
346 | register unsigned long __scnum __asm__ ("gr7") = (__NR_##name); \ | ||
347 | register unsigned long __sc0 __asm__ ("gr8"); \ | ||
348 | __asm__ __volatile__ ("tira gr0,#0" \ | ||
349 | : "=r" (__sc0) \ | ||
350 | : "r" (__scnum)); \ | ||
351 | __syscall_return(type, __sc0); \ | ||
352 | } | ||
353 | |||
354 | #undef _syscall1 | ||
355 | #define _syscall1(type,name,type1,arg1) \ | ||
356 | type name(type1 arg1) \ | ||
357 | { \ | ||
358 | register unsigned long __scnum __asm__ ("gr7") = (__NR_##name); \ | ||
359 | register unsigned long __sc0 __asm__ ("gr8") = (unsigned long) arg1; \ | ||
360 | __asm__ __volatile__ ("tira gr0,#0" \ | ||
361 | : "+r" (__sc0) \ | ||
362 | : "r" (__scnum)); \ | ||
363 | __syscall_return(type, __sc0); \ | ||
364 | } | ||
365 | |||
366 | #undef _syscall2 | ||
367 | #define _syscall2(type,name,type1,arg1,type2,arg2) \ | ||
368 | type name(type1 arg1,type2 arg2) \ | ||
369 | { \ | ||
370 | register unsigned long __scnum __asm__ ("gr7") = (__NR_##name); \ | ||
371 | register unsigned long __sc0 __asm__ ("gr8") = (unsigned long) arg1; \ | ||
372 | register unsigned long __sc1 __asm__ ("gr9") = (unsigned long) arg2; \ | ||
373 | __asm__ __volatile__ ("tira gr0,#0" \ | ||
374 | : "+r" (__sc0) \ | ||
375 | : "r" (__scnum), "r" (__sc1)); \ | ||
376 | __syscall_return(type, __sc0); \ | ||
377 | } | ||
378 | |||
379 | #undef _syscall3 | ||
380 | #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ | ||
381 | type name(type1 arg1,type2 arg2,type3 arg3) \ | ||
382 | { \ | ||
383 | register unsigned long __scnum __asm__ ("gr7") = (__NR_##name); \ | ||
384 | register unsigned long __sc0 __asm__ ("gr8") = (unsigned long) arg1; \ | ||
385 | register unsigned long __sc1 __asm__ ("gr9") = (unsigned long) arg2; \ | ||
386 | register unsigned long __sc2 __asm__ ("gr10") = (unsigned long) arg3; \ | ||
387 | __asm__ __volatile__ ("tira gr0,#0" \ | ||
388 | : "+r" (__sc0) \ | ||
389 | : "r" (__scnum), "r" (__sc1), "r" (__sc2)); \ | ||
390 | __syscall_return(type, __sc0); \ | ||
391 | } | ||
392 | |||
393 | #undef _syscall4 | ||
394 | #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \ | ||
395 | type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ | ||
396 | { \ | ||
397 | register unsigned long __scnum __asm__ ("gr7") = (__NR_##name); \ | ||
398 | register unsigned long __sc0 __asm__ ("gr8") = (unsigned long) arg1; \ | ||
399 | register unsigned long __sc1 __asm__ ("gr9") = (unsigned long) arg2; \ | ||
400 | register unsigned long __sc2 __asm__ ("gr10") = (unsigned long) arg3; \ | ||
401 | register unsigned long __sc3 __asm__ ("gr11") = (unsigned long) arg4; \ | ||
402 | __asm__ __volatile__ ("tira gr0,#0" \ | ||
403 | : "+r" (__sc0) \ | ||
404 | : "r" (__scnum), "r" (__sc1), "r" (__sc2), "r" (__sc3)); \ | ||
405 | __syscall_return(type, __sc0); \ | ||
406 | } | ||
407 | |||
408 | #undef _syscall5 | ||
409 | #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \ | ||
410 | type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) \ | ||
411 | { \ | ||
412 | register unsigned long __scnum __asm__ ("gr7") = (__NR_##name); \ | ||
413 | register unsigned long __sc0 __asm__ ("gr8") = (unsigned long) arg1; \ | ||
414 | register unsigned long __sc1 __asm__ ("gr9") = (unsigned long) arg2; \ | ||
415 | register unsigned long __sc2 __asm__ ("gr10") = (unsigned long) arg3; \ | ||
416 | register unsigned long __sc3 __asm__ ("gr11") = (unsigned long) arg4; \ | ||
417 | register unsigned long __sc4 __asm__ ("gr12") = (unsigned long) arg5; \ | ||
418 | __asm__ __volatile__ ("tira gr0,#0" \ | ||
419 | : "+r" (__sc0) \ | ||
420 | : "r" (__scnum), "r" (__sc1), "r" (__sc2), \ | ||
421 | "r" (__sc3), "r" (__sc4)); \ | ||
422 | __syscall_return(type, __sc0); \ | ||
423 | } | ||
424 | |||
425 | #undef _syscall6 | ||
426 | #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5, type6, arg6) \ | ||
427 | type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6) \ | ||
428 | { \ | ||
429 | register unsigned long __scnum __asm__ ("gr7") = (__NR_##name); \ | ||
430 | register unsigned long __sc0 __asm__ ("gr8") = (unsigned long) arg1; \ | ||
431 | register unsigned long __sc1 __asm__ ("gr9") = (unsigned long) arg2; \ | ||
432 | register unsigned long __sc2 __asm__ ("gr10") = (unsigned long) arg3; \ | ||
433 | register unsigned long __sc3 __asm__ ("gr11") = (unsigned long) arg4; \ | ||
434 | register unsigned long __sc4 __asm__ ("gr12") = (unsigned long) arg5; \ | ||
435 | register unsigned long __sc5 __asm__ ("gr13") = (unsigned long) arg6; \ | ||
436 | __asm__ __volatile__ ("tira gr0,#0" \ | ||
437 | : "+r" (__sc0) \ | ||
438 | : "r" (__scnum), "r" (__sc1), "r" (__sc2), \ | ||
439 | "r" (__sc3), "r" (__sc4), "r" (__sc5)); \ | ||
440 | __syscall_return(type, __sc0); \ | ||
441 | } | ||
442 | 323 | ||
443 | #define __ARCH_WANT_IPC_PARSE_VERSION | 324 | #define __ARCH_WANT_IPC_PARSE_VERSION |
444 | /* #define __ARCH_WANT_OLD_READDIR */ | 325 | /* #define __ARCH_WANT_OLD_READDIR */ |
diff --git a/include/asm-generic/Kbuild b/include/asm-generic/Kbuild index 3c06be381701..fa14f8cd30c5 100644 --- a/include/asm-generic/Kbuild +++ b/include/asm-generic/Kbuild | |||
@@ -1,4 +1,3 @@ | |||
1 | header-y += atomic.h | ||
2 | header-y += errno-base.h | 1 | header-y += errno-base.h |
3 | header-y += errno.h | 2 | header-y += errno.h |
4 | header-y += fcntl.h | 3 | header-y += fcntl.h |
diff --git a/include/asm-generic/Kbuild.asm b/include/asm-generic/Kbuild.asm index a84c3d88a189..a37e95fe58d6 100644 --- a/include/asm-generic/Kbuild.asm +++ b/include/asm-generic/Kbuild.asm | |||
@@ -14,6 +14,7 @@ unifdef-y += posix_types.h | |||
14 | unifdef-y += ptrace.h | 14 | unifdef-y += ptrace.h |
15 | unifdef-y += resource.h | 15 | unifdef-y += resource.h |
16 | unifdef-y += sembuf.h | 16 | unifdef-y += sembuf.h |
17 | unifdef-y += setup.h | ||
17 | unifdef-y += shmbuf.h | 18 | unifdef-y += shmbuf.h |
18 | unifdef-y += sigcontext.h | 19 | unifdef-y += sigcontext.h |
19 | unifdef-y += siginfo.h | 20 | unifdef-y += siginfo.h |
diff --git a/include/asm-generic/atomic.h b/include/asm-generic/atomic.h index 42a95d9a0641..b7e4a0467cb1 100644 --- a/include/asm-generic/atomic.h +++ b/include/asm-generic/atomic.h | |||
@@ -66,7 +66,7 @@ static inline void atomic_long_sub(long i, atomic_long_t *l) | |||
66 | atomic64_sub(i, v); | 66 | atomic64_sub(i, v); |
67 | } | 67 | } |
68 | 68 | ||
69 | #else | 69 | #else /* BITS_PER_LONG == 64 */ |
70 | 70 | ||
71 | typedef atomic_t atomic_long_t; | 71 | typedef atomic_t atomic_long_t; |
72 | 72 | ||
@@ -113,5 +113,6 @@ static inline void atomic_long_sub(long i, atomic_long_t *l) | |||
113 | atomic_sub(i, v); | 113 | atomic_sub(i, v); |
114 | } | 114 | } |
115 | 115 | ||
116 | #endif | 116 | #endif /* BITS_PER_LONG == 64 */ |
117 | #endif | 117 | |
118 | #endif /* _ASM_GENERIC_ATOMIC_H */ | ||
diff --git a/include/asm-generic/dma-mapping.h b/include/asm-generic/dma-mapping.h index b541e48cc545..783ab9944d70 100644 --- a/include/asm-generic/dma-mapping.h +++ b/include/asm-generic/dma-mapping.h | |||
@@ -266,7 +266,7 @@ dma_error(dma_addr_t dma_addr) | |||
266 | 266 | ||
267 | #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) | 267 | #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) |
268 | #define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) | 268 | #define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) |
269 | #define dma_is_consistent(d) (1) | 269 | #define dma_is_consistent(d, h) (1) |
270 | 270 | ||
271 | static inline int | 271 | static inline int |
272 | dma_get_cache_alignment(void) | 272 | dma_get_cache_alignment(void) |
@@ -295,7 +295,7 @@ dma_sync_single_range_for_device(struct device *dev, dma_addr_t dma_handle, | |||
295 | } | 295 | } |
296 | 296 | ||
297 | static inline void | 297 | static inline void |
298 | dma_cache_sync(void *vaddr, size_t size, | 298 | dma_cache_sync(struct device *dev, void *vaddr, size_t size, |
299 | enum dma_data_direction direction) | 299 | enum dma_data_direction direction) |
300 | { | 300 | { |
301 | /* could define this in terms of the dma_cache ... operations, | 301 | /* could define this in terms of the dma_cache ... operations, |
diff --git a/include/asm-generic/futex.h b/include/asm-generic/futex.h index df893c160318..f422df0956a2 100644 --- a/include/asm-generic/futex.h +++ b/include/asm-generic/futex.h | |||
@@ -21,7 +21,7 @@ futex_atomic_op_inuser (int encoded_op, int __user *uaddr) | |||
21 | if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int))) | 21 | if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int))) |
22 | return -EFAULT; | 22 | return -EFAULT; |
23 | 23 | ||
24 | inc_preempt_count(); | 24 | pagefault_disable(); |
25 | 25 | ||
26 | switch (op) { | 26 | switch (op) { |
27 | case FUTEX_OP_SET: | 27 | case FUTEX_OP_SET: |
@@ -33,7 +33,7 @@ futex_atomic_op_inuser (int encoded_op, int __user *uaddr) | |||
33 | ret = -ENOSYS; | 33 | ret = -ENOSYS; |
34 | } | 34 | } |
35 | 35 | ||
36 | dec_preempt_count(); | 36 | pagefault_enable(); |
37 | 37 | ||
38 | if (!ret) { | 38 | if (!ret) { |
39 | switch (cmp) { | 39 | switch (cmp) { |
diff --git a/include/asm-h8300/delay.h b/include/asm-h8300/delay.h index cbccbbdd640f..743beba70f82 100644 --- a/include/asm-h8300/delay.h +++ b/include/asm-h8300/delay.h | |||
@@ -9,7 +9,7 @@ | |||
9 | * Delay routines, using a pre-computed "loops_per_second" value. | 9 | * Delay routines, using a pre-computed "loops_per_second" value. |
10 | */ | 10 | */ |
11 | 11 | ||
12 | extern __inline__ void __delay(unsigned long loops) | 12 | static inline void __delay(unsigned long loops) |
13 | { | 13 | { |
14 | __asm__ __volatile__ ("1:\n\t" | 14 | __asm__ __volatile__ ("1:\n\t" |
15 | "dec.l #1,%0\n\t" | 15 | "dec.l #1,%0\n\t" |
@@ -27,7 +27,7 @@ extern __inline__ void __delay(unsigned long loops) | |||
27 | 27 | ||
28 | extern unsigned long loops_per_jiffy; | 28 | extern unsigned long loops_per_jiffy; |
29 | 29 | ||
30 | extern __inline__ void udelay(unsigned long usecs) | 30 | static inline void udelay(unsigned long usecs) |
31 | { | 31 | { |
32 | usecs *= 4295; /* 2**32 / 1000000 */ | 32 | usecs *= 4295; /* 2**32 / 1000000 */ |
33 | usecs /= (loops_per_jiffy*HZ); | 33 | usecs /= (loops_per_jiffy*HZ); |
diff --git a/include/asm-h8300/mmu_context.h b/include/asm-h8300/mmu_context.h index 855721a5dcc9..5c165f7bee0e 100644 --- a/include/asm-h8300/mmu_context.h +++ b/include/asm-h8300/mmu_context.h | |||
@@ -9,7 +9,7 @@ static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk) | |||
9 | { | 9 | { |
10 | } | 10 | } |
11 | 11 | ||
12 | extern inline int | 12 | static inline int |
13 | init_new_context(struct task_struct *tsk, struct mm_struct *mm) | 13 | init_new_context(struct task_struct *tsk, struct mm_struct *mm) |
14 | { | 14 | { |
15 | // mm->context = virt_to_phys(mm->pgd); | 15 | // mm->context = virt_to_phys(mm->pgd); |
@@ -23,7 +23,7 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, str | |||
23 | { | 23 | { |
24 | } | 24 | } |
25 | 25 | ||
26 | extern inline void activate_mm(struct mm_struct *prev_mm, | 26 | static inline void activate_mm(struct mm_struct *prev_mm, |
27 | struct mm_struct *next_mm) | 27 | struct mm_struct *next_mm) |
28 | { | 28 | { |
29 | } | 29 | } |
diff --git a/include/asm-h8300/pci.h b/include/asm-h8300/pci.h index 5edad5b70fd5..0c771b05fdd5 100644 --- a/include/asm-h8300/pci.h +++ b/include/asm-h8300/pci.h | |||
@@ -10,12 +10,12 @@ | |||
10 | #define pcibios_assign_all_busses() 0 | 10 | #define pcibios_assign_all_busses() 0 |
11 | #define pcibios_scan_all_fns(a, b) 0 | 11 | #define pcibios_scan_all_fns(a, b) 0 |
12 | 12 | ||
13 | extern inline void pcibios_set_master(struct pci_dev *dev) | 13 | static inline void pcibios_set_master(struct pci_dev *dev) |
14 | { | 14 | { |
15 | /* No special bus mastering setup handling */ | 15 | /* No special bus mastering setup handling */ |
16 | } | 16 | } |
17 | 17 | ||
18 | extern inline void pcibios_penalize_isa_irq(int irq, int active) | 18 | static inline void pcibios_penalize_isa_irq(int irq, int active) |
19 | { | 19 | { |
20 | /* We don't do dynamic PCI IRQ allocation */ | 20 | /* We don't do dynamic PCI IRQ allocation */ |
21 | } | 21 | } |
diff --git a/include/asm-h8300/tlbflush.h b/include/asm-h8300/tlbflush.h index bbdffbeeedef..9a2c5c9fd700 100644 --- a/include/asm-h8300/tlbflush.h +++ b/include/asm-h8300/tlbflush.h | |||
@@ -47,12 +47,12 @@ static inline void flush_tlb_range(struct mm_struct *mm, | |||
47 | BUG(); | 47 | BUG(); |
48 | } | 48 | } |
49 | 49 | ||
50 | extern inline void flush_tlb_kernel_page(unsigned long addr) | 50 | static inline void flush_tlb_kernel_page(unsigned long addr) |
51 | { | 51 | { |
52 | BUG(); | 52 | BUG(); |
53 | } | 53 | } |
54 | 54 | ||
55 | extern inline void flush_tlb_pgtables(struct mm_struct *mm, | 55 | static inline void flush_tlb_pgtables(struct mm_struct *mm, |
56 | unsigned long start, unsigned long end) | 56 | unsigned long start, unsigned long end) |
57 | { | 57 | { |
58 | BUG(); | 58 | BUG(); |
diff --git a/include/asm-h8300/unistd.h b/include/asm-h8300/unistd.h index 747788d629ae..7ddd414f8d16 100644 --- a/include/asm-h8300/unistd.h +++ b/include/asm-h8300/unistd.h | |||
@@ -295,172 +295,6 @@ | |||
295 | #ifdef __KERNEL__ | 295 | #ifdef __KERNEL__ |
296 | 296 | ||
297 | #define NR_syscalls 289 | 297 | #define NR_syscalls 289 |
298 | #include <linux/err.h> | ||
299 | |||
300 | /* user-visible error numbers are in the range -1 - -MAX_ERRNO: see | ||
301 | <asm-m68k/errno.h> */ | ||
302 | |||
303 | #define __syscall_return(type, res) \ | ||
304 | do { \ | ||
305 | if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \ | ||
306 | /* avoid using res which is declared to be in register d0; \ | ||
307 | errno might expand to a function call and clobber it. */ \ | ||
308 | int __err = -(res); \ | ||
309 | errno = __err; \ | ||
310 | res = -1; \ | ||
311 | } \ | ||
312 | return (type) (res); \ | ||
313 | } while (0) | ||
314 | |||
315 | #define _syscall0(type, name) \ | ||
316 | type name(void) \ | ||
317 | { \ | ||
318 | register long __res __asm__("er0"); \ | ||
319 | __asm__ __volatile__ ("mov.l %1,er0\n\t" \ | ||
320 | "trapa #0\n\t" \ | ||
321 | : "=r" (__res) \ | ||
322 | : "g" (__NR_##name) \ | ||
323 | : "cc", "memory"); \ | ||
324 | __syscall_return(type, __res); \ | ||
325 | } | ||
326 | |||
327 | #define _syscall1(type, name, atype, a) \ | ||
328 | type name(atype a) \ | ||
329 | { \ | ||
330 | register long __res __asm__("er0"); \ | ||
331 | register long _a __asm__("er1"); \ | ||
332 | _a = (long)a; \ | ||
333 | __asm__ __volatile__ ("mov.l %1,er0\n\t" \ | ||
334 | "trapa #0\n\t" \ | ||
335 | : "=r" (__res) \ | ||
336 | : "g" (__NR_##name), \ | ||
337 | "g" (_a) \ | ||
338 | : "cc", "memory"); \ | ||
339 | __syscall_return(type, __res); \ | ||
340 | } | ||
341 | |||
342 | #define _syscall2(type, name, atype, a, btype, b) \ | ||
343 | type name(atype a, btype b) \ | ||
344 | { \ | ||
345 | register long __res __asm__("er0"); \ | ||
346 | register long _a __asm__("er1"); \ | ||
347 | register long _b __asm__("er2"); \ | ||
348 | _a = (long)a; \ | ||
349 | _b = (long)b; \ | ||
350 | __asm__ __volatile__ ("mov.l %1,er0\n\t" \ | ||
351 | "trapa #0\n\t" \ | ||
352 | : "=r" (__res) \ | ||
353 | : "g" (__NR_##name), \ | ||
354 | "g" (_a), \ | ||
355 | "g" (_b) \ | ||
356 | : "cc", "memory"); \ | ||
357 | __syscall_return(type, __res); \ | ||
358 | } | ||
359 | |||
360 | #define _syscall3(type, name, atype, a, btype, b, ctype, c) \ | ||
361 | type name(atype a, btype b, ctype c) \ | ||
362 | { \ | ||
363 | register long __res __asm__("er0"); \ | ||
364 | register long _a __asm__("er1"); \ | ||
365 | register long _b __asm__("er2"); \ | ||
366 | register long _c __asm__("er3"); \ | ||
367 | _a = (long)a; \ | ||
368 | _b = (long)b; \ | ||
369 | _c = (long)c; \ | ||
370 | __asm__ __volatile__ ("mov.l %1,er0\n\t" \ | ||
371 | "trapa #0\n\t" \ | ||
372 | : "=r" (__res) \ | ||
373 | : "g" (__NR_##name), \ | ||
374 | "g" (_a), \ | ||
375 | "g" (_b), \ | ||
376 | "g" (_c) \ | ||
377 | : "cc", "memory"); \ | ||
378 | __syscall_return(type, __res); \ | ||
379 | } | ||
380 | |||
381 | #define _syscall4(type, name, atype, a, btype, b, \ | ||
382 | ctype, c, dtype, d) \ | ||
383 | type name(atype a, btype b, ctype c, dtype d) \ | ||
384 | { \ | ||
385 | register long __res __asm__("er0"); \ | ||
386 | register long _a __asm__("er1"); \ | ||
387 | register long _b __asm__("er2"); \ | ||
388 | register long _c __asm__("er3"); \ | ||
389 | register long _d __asm__("er4"); \ | ||
390 | _a = (long)a; \ | ||
391 | _b = (long)b; \ | ||
392 | _c = (long)c; \ | ||
393 | _d = (long)d; \ | ||
394 | __asm__ __volatile__ ("mov.l %1,er0\n\t" \ | ||
395 | "trapa #0\n\t" \ | ||
396 | : "=r" (__res) \ | ||
397 | : "g" (__NR_##name), \ | ||
398 | "g" (_a), \ | ||
399 | "g" (_b), \ | ||
400 | "g" (_c), \ | ||
401 | "g" (_d) \ | ||
402 | : "cc", "memory"); \ | ||
403 | __syscall_return(type, __res); \ | ||
404 | } | ||
405 | |||
406 | #define _syscall5(type, name, atype, a, btype, b, \ | ||
407 | ctype, c, dtype, d, etype, e) \ | ||
408 | type name(atype a, btype b, ctype c, dtype d, etype e) \ | ||
409 | { \ | ||
410 | register long __res __asm__("er0"); \ | ||
411 | register long _a __asm__("er1"); \ | ||
412 | register long _b __asm__("er2"); \ | ||
413 | register long _c __asm__("er3"); \ | ||
414 | register long _d __asm__("er4"); \ | ||
415 | register long _e __asm__("er5"); \ | ||
416 | _a = (long)a; \ | ||
417 | _b = (long)b; \ | ||
418 | _c = (long)c; \ | ||
419 | _d = (long)d; \ | ||
420 | _e = (long)e; \ | ||
421 | __asm__ __volatile__ ("mov.l %1,er0\n\t" \ | ||
422 | "trapa #0\n\t" \ | ||
423 | : "=r" (__res) \ | ||
424 | : "g" (__NR_##name), \ | ||
425 | "g" (_a), \ | ||
426 | "g" (_b), \ | ||
427 | "g" (_c), \ | ||
428 | "g" (_d), \ | ||
429 | "g" (_e) \ | ||
430 | : "cc", "memory"); \ | ||
431 | __syscall_return(type, __res); \ | ||
432 | } | ||
433 | |||
434 | #define _syscall6(type, name, atype, a, btype, b, \ | ||
435 | ctype, c, dtype, d, etype, e, ftype, f) \ | ||
436 | type name(atype a, btype b, ctype c, dtype d, etype e, ftype f) \ | ||
437 | { \ | ||
438 | register long __res __asm__("er0"); \ | ||
439 | register long _a __asm__("er1"); \ | ||
440 | register long _b __asm__("er2"); \ | ||
441 | register long _c __asm__("er3"); \ | ||
442 | register long _d __asm__("er4"); \ | ||
443 | register long _e __asm__("er5"); \ | ||
444 | register long _f __asm__("er6"); \ | ||
445 | _a = (long)a; \ | ||
446 | _b = (long)b; \ | ||
447 | _c = (long)c; \ | ||
448 | _d = (long)d; \ | ||
449 | _e = (long)e; \ | ||
450 | _f = (long)f; \ | ||
451 | __asm__ __volatile__ ("mov.l %1,er0\n\t" \ | ||
452 | "trapa #0\n\t" \ | ||
453 | : "=r" (__res) \ | ||
454 | : "g" (__NR_##name), \ | ||
455 | "g" (_a), \ | ||
456 | "g" (_b), \ | ||
457 | "g" (_c), \ | ||
458 | "g" (_d), \ | ||
459 | "g" (_e) \ | ||
460 | "g" (_f) \ | ||
461 | : "cc", "memory"); \ | ||
462 | __syscall_return(type, __res); \ | ||
463 | } | ||
464 | 298 | ||
465 | #define __ARCH_WANT_IPC_PARSE_VERSION | 299 | #define __ARCH_WANT_IPC_PARSE_VERSION |
466 | #define __ARCH_WANT_OLD_READDIR | 300 | #define __ARCH_WANT_OLD_READDIR |
diff --git a/include/asm-i386/Kbuild b/include/asm-i386/Kbuild index 147e4ac1ebf0..5ae93afc67e1 100644 --- a/include/asm-i386/Kbuild +++ b/include/asm-i386/Kbuild | |||
@@ -7,5 +7,4 @@ header-y += ptrace-abi.h | |||
7 | header-y += ucontext.h | 7 | header-y += ucontext.h |
8 | 8 | ||
9 | unifdef-y += mtrr.h | 9 | unifdef-y += mtrr.h |
10 | unifdef-y += setup.h | ||
11 | unifdef-y += vm86.h | 10 | unifdef-y += vm86.h |
diff --git a/include/asm-i386/atomic.h b/include/asm-i386/atomic.h index 6aab7a105fad..c57441bb2905 100644 --- a/include/asm-i386/atomic.h +++ b/include/asm-i386/atomic.h | |||
@@ -14,7 +14,7 @@ | |||
14 | * on us. We need to use _exactly_ the address the user gave us, | 14 | * on us. We need to use _exactly_ the address the user gave us, |
15 | * not some alias that contains the same information. | 15 | * not some alias that contains the same information. |
16 | */ | 16 | */ |
17 | typedef struct { volatile int counter; } atomic_t; | 17 | typedef struct { int counter; } atomic_t; |
18 | 18 | ||
19 | #define ATOMIC_INIT(i) { (i) } | 19 | #define ATOMIC_INIT(i) { (i) } |
20 | 20 | ||
diff --git a/include/asm-i386/dma-mapping.h b/include/asm-i386/dma-mapping.h index 81999a3ebe7c..183eebeebbdc 100644 --- a/include/asm-i386/dma-mapping.h +++ b/include/asm-i386/dma-mapping.h | |||
@@ -156,10 +156,10 @@ dma_get_cache_alignment(void) | |||
156 | return (1 << INTERNODE_CACHE_SHIFT); | 156 | return (1 << INTERNODE_CACHE_SHIFT); |
157 | } | 157 | } |
158 | 158 | ||
159 | #define dma_is_consistent(d) (1) | 159 | #define dma_is_consistent(d, h) (1) |
160 | 160 | ||
161 | static inline void | 161 | static inline void |
162 | dma_cache_sync(void *vaddr, size_t size, | 162 | dma_cache_sync(struct device *dev, void *vaddr, size_t size, |
163 | enum dma_data_direction direction) | 163 | enum dma_data_direction direction) |
164 | { | 164 | { |
165 | flush_write_buffers(); | 165 | flush_write_buffers(); |
diff --git a/include/asm-i386/futex.h b/include/asm-i386/futex.h index 946d97cfea23..438ef0ec7101 100644 --- a/include/asm-i386/futex.h +++ b/include/asm-i386/futex.h | |||
@@ -56,7 +56,7 @@ futex_atomic_op_inuser (int encoded_op, int __user *uaddr) | |||
56 | if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int))) | 56 | if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int))) |
57 | return -EFAULT; | 57 | return -EFAULT; |
58 | 58 | ||
59 | inc_preempt_count(); | 59 | pagefault_disable(); |
60 | 60 | ||
61 | if (op == FUTEX_OP_SET) | 61 | if (op == FUTEX_OP_SET) |
62 | __futex_atomic_op1("xchgl %0, %2", ret, oldval, uaddr, oparg); | 62 | __futex_atomic_op1("xchgl %0, %2", ret, oldval, uaddr, oparg); |
@@ -88,7 +88,7 @@ futex_atomic_op_inuser (int encoded_op, int __user *uaddr) | |||
88 | } | 88 | } |
89 | } | 89 | } |
90 | 90 | ||
91 | dec_preempt_count(); | 91 | pagefault_enable(); |
92 | 92 | ||
93 | if (!ret) { | 93 | if (!ret) { |
94 | switch (cmp) { | 94 | switch (cmp) { |
diff --git a/include/asm-i386/mmzone.h b/include/asm-i386/mmzone.h index 61b073322006..3503ad66945e 100644 --- a/include/asm-i386/mmzone.h +++ b/include/asm-i386/mmzone.h | |||
@@ -120,13 +120,26 @@ static inline int pfn_valid(int pfn) | |||
120 | __alloc_bootmem_node(NODE_DATA(0), (x), PAGE_SIZE, __pa(MAX_DMA_ADDRESS)) | 120 | __alloc_bootmem_node(NODE_DATA(0), (x), PAGE_SIZE, __pa(MAX_DMA_ADDRESS)) |
121 | #define alloc_bootmem_low_pages(x) \ | 121 | #define alloc_bootmem_low_pages(x) \ |
122 | __alloc_bootmem_node(NODE_DATA(0), (x), PAGE_SIZE, 0) | 122 | __alloc_bootmem_node(NODE_DATA(0), (x), PAGE_SIZE, 0) |
123 | #define alloc_bootmem_node(ignore, x) \ | 123 | #define alloc_bootmem_node(pgdat, x) \ |
124 | __alloc_bootmem_node(NODE_DATA(0), (x), SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS)) | 124 | ({ \ |
125 | #define alloc_bootmem_pages_node(ignore, x) \ | 125 | struct pglist_data __attribute__ ((unused)) \ |
126 | __alloc_bootmem_node(NODE_DATA(0), (x), PAGE_SIZE, __pa(MAX_DMA_ADDRESS)) | 126 | *__alloc_bootmem_node__pgdat = (pgdat); \ |
127 | #define alloc_bootmem_low_pages_node(ignore, x) \ | 127 | __alloc_bootmem_node(NODE_DATA(0), (x), SMP_CACHE_BYTES, \ |
128 | __alloc_bootmem_node(NODE_DATA(0), (x), PAGE_SIZE, 0) | 128 | __pa(MAX_DMA_ADDRESS)); \ |
129 | 129 | }) | |
130 | #define alloc_bootmem_pages_node(pgdat, x) \ | ||
131 | ({ \ | ||
132 | struct pglist_data __attribute__ ((unused)) \ | ||
133 | *__alloc_bootmem_node__pgdat = (pgdat); \ | ||
134 | __alloc_bootmem_node(NODE_DATA(0), (x), PAGE_SIZE, \ | ||
135 | __pa(MAX_DMA_ADDRESS)) \ | ||
136 | }) | ||
137 | #define alloc_bootmem_low_pages_node(pgdat, x) \ | ||
138 | ({ \ | ||
139 | struct pglist_data __attribute__ ((unused)) \ | ||
140 | *__alloc_bootmem_node__pgdat = (pgdat); \ | ||
141 | __alloc_bootmem_node(NODE_DATA(0), (x), PAGE_SIZE, 0); \ | ||
142 | }) | ||
130 | #endif /* CONFIG_NEED_MULTIPLE_NODES */ | 143 | #endif /* CONFIG_NEED_MULTIPLE_NODES */ |
131 | 144 | ||
132 | #endif /* _ASM_MMZONE_H_ */ | 145 | #endif /* _ASM_MMZONE_H_ */ |
diff --git a/include/asm-i386/param.h b/include/asm-i386/param.h index 745dc5bd0fbc..21b32466fcdc 100644 --- a/include/asm-i386/param.h +++ b/include/asm-i386/param.h | |||
@@ -18,6 +18,5 @@ | |||
18 | #endif | 18 | #endif |
19 | 19 | ||
20 | #define MAXHOSTNAMELEN 64 /* max length of hostname */ | 20 | #define MAXHOSTNAMELEN 64 /* max length of hostname */ |
21 | #define COMMAND_LINE_SIZE 256 | ||
22 | 21 | ||
23 | #endif | 22 | #endif |
diff --git a/include/asm-i386/pgtable.h b/include/asm-i386/pgtable.h index b4a301f647ba..e6a4723f0eb1 100644 --- a/include/asm-i386/pgtable.h +++ b/include/asm-i386/pgtable.h | |||
@@ -35,14 +35,14 @@ struct vm_area_struct; | |||
35 | #define ZERO_PAGE(vaddr) (virt_to_page(empty_zero_page)) | 35 | #define ZERO_PAGE(vaddr) (virt_to_page(empty_zero_page)) |
36 | extern unsigned long empty_zero_page[1024]; | 36 | extern unsigned long empty_zero_page[1024]; |
37 | extern pgd_t swapper_pg_dir[1024]; | 37 | extern pgd_t swapper_pg_dir[1024]; |
38 | extern kmem_cache_t *pgd_cache; | 38 | extern struct kmem_cache *pgd_cache; |
39 | extern kmem_cache_t *pmd_cache; | 39 | extern struct kmem_cache *pmd_cache; |
40 | extern spinlock_t pgd_lock; | 40 | extern spinlock_t pgd_lock; |
41 | extern struct page *pgd_list; | 41 | extern struct page *pgd_list; |
42 | 42 | ||
43 | void pmd_ctor(void *, kmem_cache_t *, unsigned long); | 43 | void pmd_ctor(void *, struct kmem_cache *, unsigned long); |
44 | void pgd_ctor(void *, kmem_cache_t *, unsigned long); | 44 | void pgd_ctor(void *, struct kmem_cache *, unsigned long); |
45 | void pgd_dtor(void *, kmem_cache_t *, unsigned long); | 45 | void pgd_dtor(void *, struct kmem_cache *, unsigned long); |
46 | void pgtable_cache_init(void); | 46 | void pgtable_cache_init(void); |
47 | void paging_init(void); | 47 | void paging_init(void); |
48 | 48 | ||
diff --git a/include/asm-i386/rwsem.h b/include/asm-i386/rwsem.h index bc598d6388e3..041906f3c6df 100644 --- a/include/asm-i386/rwsem.h +++ b/include/asm-i386/rwsem.h | |||
@@ -75,8 +75,8 @@ struct rw_semaphore { | |||
75 | 75 | ||
76 | 76 | ||
77 | #define __RWSEM_INITIALIZER(name) \ | 77 | #define __RWSEM_INITIALIZER(name) \ |
78 | { RWSEM_UNLOCKED_VALUE, SPIN_LOCK_UNLOCKED, LIST_HEAD_INIT((name).wait_list) \ | 78 | { RWSEM_UNLOCKED_VALUE, __SPIN_LOCK_UNLOCKED((name).wait_lock), \ |
79 | __RWSEM_DEP_MAP_INIT(name) } | 79 | LIST_HEAD_INIT((name).wait_list) __RWSEM_DEP_MAP_INIT(name) } |
80 | 80 | ||
81 | #define DECLARE_RWSEM(name) \ | 81 | #define DECLARE_RWSEM(name) \ |
82 | struct rw_semaphore name = __RWSEM_INITIALIZER(name) | 82 | struct rw_semaphore name = __RWSEM_INITIALIZER(name) |
diff --git a/include/asm-i386/setup.h b/include/asm-i386/setup.h index 9930c5a355fc..67659dbaf120 100644 --- a/include/asm-i386/setup.h +++ b/include/asm-i386/setup.h | |||
@@ -6,6 +6,8 @@ | |||
6 | #ifndef _i386_SETUP_H | 6 | #ifndef _i386_SETUP_H |
7 | #define _i386_SETUP_H | 7 | #define _i386_SETUP_H |
8 | 8 | ||
9 | #define COMMAND_LINE_SIZE 256 | ||
10 | |||
9 | #ifdef __KERNEL__ | 11 | #ifdef __KERNEL__ |
10 | #include <linux/pfn.h> | 12 | #include <linux/pfn.h> |
11 | 13 | ||
@@ -14,10 +16,8 @@ | |||
14 | */ | 16 | */ |
15 | #define MAXMEM_PFN PFN_DOWN(MAXMEM) | 17 | #define MAXMEM_PFN PFN_DOWN(MAXMEM) |
16 | #define MAX_NONPAE_PFN (1 << 20) | 18 | #define MAX_NONPAE_PFN (1 << 20) |
17 | #endif | ||
18 | 19 | ||
19 | #define PARAM_SIZE 4096 | 20 | #define PARAM_SIZE 4096 |
20 | #define COMMAND_LINE_SIZE 256 | ||
21 | 21 | ||
22 | #define OLD_CL_MAGIC_ADDR 0x90020 | 22 | #define OLD_CL_MAGIC_ADDR 0x90020 |
23 | #define OLD_CL_MAGIC 0xA33F | 23 | #define OLD_CL_MAGIC 0xA33F |
@@ -79,4 +79,6 @@ void __init add_memory_region(unsigned long long start, | |||
79 | 79 | ||
80 | #endif /* __ASSEMBLY__ */ | 80 | #endif /* __ASSEMBLY__ */ |
81 | 81 | ||
82 | #endif /* __KERNEL__ */ | ||
83 | |||
82 | #endif /* _i386_SETUP_H */ | 84 | #endif /* _i386_SETUP_H */ |
diff --git a/include/asm-i386/spinlock_types.h b/include/asm-i386/spinlock_types.h index 59efe849f351..4da9345c1500 100644 --- a/include/asm-i386/spinlock_types.h +++ b/include/asm-i386/spinlock_types.h | |||
@@ -6,13 +6,13 @@ | |||
6 | #endif | 6 | #endif |
7 | 7 | ||
8 | typedef struct { | 8 | typedef struct { |
9 | volatile unsigned int slock; | 9 | unsigned int slock; |
10 | } raw_spinlock_t; | 10 | } raw_spinlock_t; |
11 | 11 | ||
12 | #define __RAW_SPIN_LOCK_UNLOCKED { 1 } | 12 | #define __RAW_SPIN_LOCK_UNLOCKED { 1 } |
13 | 13 | ||
14 | typedef struct { | 14 | typedef struct { |
15 | volatile unsigned int lock; | 15 | unsigned int lock; |
16 | } raw_rwlock_t; | 16 | } raw_rwlock_t; |
17 | 17 | ||
18 | #define __RAW_RW_LOCK_UNLOCKED { RW_LOCK_BIAS } | 18 | #define __RAW_RW_LOCK_UNLOCKED { RW_LOCK_BIAS } |
diff --git a/include/asm-i386/suspend.h b/include/asm-i386/suspend.h index 30361526d568..8dbaafe611ff 100644 --- a/include/asm-i386/suspend.h +++ b/include/asm-i386/suspend.h | |||
@@ -6,18 +6,7 @@ | |||
6 | #include <asm/desc.h> | 6 | #include <asm/desc.h> |
7 | #include <asm/i387.h> | 7 | #include <asm/i387.h> |
8 | 8 | ||
9 | static inline int | 9 | static inline int arch_prepare_suspend(void) { return 0; } |
10 | arch_prepare_suspend(void) | ||
11 | { | ||
12 | /* If you want to make non-PSE machine work, turn off paging | ||
13 | in swsusp_arch_suspend. swsusp_pg_dir should have identity mapping, so | ||
14 | it could work... */ | ||
15 | if (!cpu_has_pse) { | ||
16 | printk(KERN_ERR "PSE is required for swsusp.\n"); | ||
17 | return -EPERM; | ||
18 | } | ||
19 | return 0; | ||
20 | } | ||
21 | 10 | ||
22 | /* image of the saved processor state */ | 11 | /* image of the saved processor state */ |
23 | struct saved_context { | 12 | struct saved_context { |
diff --git a/include/asm-i386/unistd.h b/include/asm-i386/unistd.h index beeeaf6b054a..833fa1704ff9 100644 --- a/include/asm-i386/unistd.h +++ b/include/asm-i386/unistd.h | |||
@@ -329,104 +329,6 @@ | |||
329 | #ifdef __KERNEL__ | 329 | #ifdef __KERNEL__ |
330 | 330 | ||
331 | #define NR_syscalls 320 | 331 | #define NR_syscalls 320 |
332 | #include <linux/err.h> | ||
333 | |||
334 | /* | ||
335 | * user-visible error numbers are in the range -1 - -MAX_ERRNO: see | ||
336 | * <asm-i386/errno.h> | ||
337 | */ | ||
338 | #define __syscall_return(type, res) \ | ||
339 | do { \ | ||
340 | if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \ | ||
341 | errno = -(res); \ | ||
342 | res = -1; \ | ||
343 | } \ | ||
344 | return (type) (res); \ | ||
345 | } while (0) | ||
346 | |||
347 | /* XXX - _foo needs to be __foo, while __NR_bar could be _NR_bar. */ | ||
348 | #define _syscall0(type,name) \ | ||
349 | type name(void) \ | ||
350 | { \ | ||
351 | long __res; \ | ||
352 | __asm__ volatile ("int $0x80" \ | ||
353 | : "=a" (__res) \ | ||
354 | : "0" (__NR_##name)); \ | ||
355 | __syscall_return(type,__res); \ | ||
356 | } | ||
357 | |||
358 | #define _syscall1(type,name,type1,arg1) \ | ||
359 | type name(type1 arg1) \ | ||
360 | { \ | ||
361 | long __res; \ | ||
362 | __asm__ volatile ("push %%ebx ; movl %2,%%ebx ; int $0x80 ; pop %%ebx" \ | ||
363 | : "=a" (__res) \ | ||
364 | : "0" (__NR_##name),"ri" ((long)(arg1)) : "memory"); \ | ||
365 | __syscall_return(type,__res); \ | ||
366 | } | ||
367 | |||
368 | #define _syscall2(type,name,type1,arg1,type2,arg2) \ | ||
369 | type name(type1 arg1,type2 arg2) \ | ||
370 | { \ | ||
371 | long __res; \ | ||
372 | __asm__ volatile ("push %%ebx ; movl %2,%%ebx ; int $0x80 ; pop %%ebx" \ | ||
373 | : "=a" (__res) \ | ||
374 | : "0" (__NR_##name),"ri" ((long)(arg1)),"c" ((long)(arg2)) \ | ||
375 | : "memory"); \ | ||
376 | __syscall_return(type,__res); \ | ||
377 | } | ||
378 | |||
379 | #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ | ||
380 | type name(type1 arg1,type2 arg2,type3 arg3) \ | ||
381 | { \ | ||
382 | long __res; \ | ||
383 | __asm__ volatile ("push %%ebx ; movl %2,%%ebx ; int $0x80 ; pop %%ebx" \ | ||
384 | : "=a" (__res) \ | ||
385 | : "0" (__NR_##name),"ri" ((long)(arg1)),"c" ((long)(arg2)), \ | ||
386 | "d" ((long)(arg3)) : "memory"); \ | ||
387 | __syscall_return(type,__res); \ | ||
388 | } | ||
389 | |||
390 | #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \ | ||
391 | type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ | ||
392 | { \ | ||
393 | long __res; \ | ||
394 | __asm__ volatile ("push %%ebx ; movl %2,%%ebx ; int $0x80 ; pop %%ebx" \ | ||
395 | : "=a" (__res) \ | ||
396 | : "0" (__NR_##name),"ri" ((long)(arg1)),"c" ((long)(arg2)), \ | ||
397 | "d" ((long)(arg3)),"S" ((long)(arg4)) : "memory"); \ | ||
398 | __syscall_return(type,__res); \ | ||
399 | } | ||
400 | |||
401 | #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \ | ||
402 | type5,arg5) \ | ||
403 | type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \ | ||
404 | { \ | ||
405 | long __res; \ | ||
406 | __asm__ volatile ("push %%ebx ; movl %2,%%ebx ; movl %1,%%eax ; " \ | ||
407 | "int $0x80 ; pop %%ebx" \ | ||
408 | : "=a" (__res) \ | ||
409 | : "i" (__NR_##name),"ri" ((long)(arg1)),"c" ((long)(arg2)), \ | ||
410 | "d" ((long)(arg3)),"S" ((long)(arg4)),"D" ((long)(arg5)) \ | ||
411 | : "memory"); \ | ||
412 | __syscall_return(type,__res); \ | ||
413 | } | ||
414 | |||
415 | #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \ | ||
416 | type5,arg5,type6,arg6) \ | ||
417 | type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5,type6 arg6) \ | ||
418 | { \ | ||
419 | long __res; \ | ||
420 | struct { long __a1; long __a6; } __s = { (long)arg1, (long)arg6 }; \ | ||
421 | __asm__ volatile ("push %%ebp ; push %%ebx ; movl 4(%2),%%ebp ; " \ | ||
422 | "movl 0(%2),%%ebx ; movl %1,%%eax ; int $0x80 ; " \ | ||
423 | "pop %%ebx ; pop %%ebp" \ | ||
424 | : "=a" (__res) \ | ||
425 | : "i" (__NR_##name),"0" ((long)(&__s)),"c" ((long)(arg2)), \ | ||
426 | "d" ((long)(arg3)),"S" ((long)(arg4)),"D" ((long)(arg5)) \ | ||
427 | : "memory"); \ | ||
428 | __syscall_return(type,__res); \ | ||
429 | } | ||
430 | 332 | ||
431 | #define __ARCH_WANT_IPC_PARSE_VERSION | 333 | #define __ARCH_WANT_IPC_PARSE_VERSION |
432 | #define __ARCH_WANT_OLD_READDIR | 334 | #define __ARCH_WANT_OLD_READDIR |
diff --git a/include/asm-ia64/Kbuild b/include/asm-ia64/Kbuild index 15818a18bc52..4a1e48b9f403 100644 --- a/include/asm-ia64/Kbuild +++ b/include/asm-ia64/Kbuild | |||
@@ -10,7 +10,6 @@ header-y += intrinsics.h | |||
10 | header-y += perfmon_default_smpl.h | 10 | header-y += perfmon_default_smpl.h |
11 | header-y += ptrace_offsets.h | 11 | header-y += ptrace_offsets.h |
12 | header-y += rse.h | 12 | header-y += rse.h |
13 | header-y += setup.h | ||
14 | header-y += ucontext.h | 13 | header-y += ucontext.h |
15 | 14 | ||
16 | unifdef-y += perfmon.h | 15 | unifdef-y += perfmon.h |
diff --git a/include/asm-ia64/dma-mapping.h b/include/asm-ia64/dma-mapping.h index 99a8f8e1218c..ebd5887f4b1a 100644 --- a/include/asm-ia64/dma-mapping.h +++ b/include/asm-ia64/dma-mapping.h | |||
@@ -50,7 +50,8 @@ dma_set_mask (struct device *dev, u64 mask) | |||
50 | extern int dma_get_cache_alignment(void); | 50 | extern int dma_get_cache_alignment(void); |
51 | 51 | ||
52 | static inline void | 52 | static inline void |
53 | dma_cache_sync (void *vaddr, size_t size, enum dma_data_direction dir) | 53 | dma_cache_sync (struct device *dev, void *vaddr, size_t size, |
54 | enum dma_data_direction dir) | ||
54 | { | 55 | { |
55 | /* | 56 | /* |
56 | * IA-64 is cache-coherent, so this is mostly a no-op. However, we do need to | 57 | * IA-64 is cache-coherent, so this is mostly a no-op. However, we do need to |
@@ -59,6 +60,6 @@ dma_cache_sync (void *vaddr, size_t size, enum dma_data_direction dir) | |||
59 | mb(); | 60 | mb(); |
60 | } | 61 | } |
61 | 62 | ||
62 | #define dma_is_consistent(dma_handle) (1) /* all we do is coherent memory... */ | 63 | #define dma_is_consistent(d, h) (1) /* all we do is coherent memory... */ |
63 | 64 | ||
64 | #endif /* _ASM_IA64_DMA_MAPPING_H */ | 65 | #endif /* _ASM_IA64_DMA_MAPPING_H */ |
diff --git a/include/asm-ia64/futex.h b/include/asm-ia64/futex.h index 07d77f3a8cbe..8a98a2654139 100644 --- a/include/asm-ia64/futex.h +++ b/include/asm-ia64/futex.h | |||
@@ -59,7 +59,7 @@ futex_atomic_op_inuser (int encoded_op, int __user *uaddr) | |||
59 | if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int))) | 59 | if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int))) |
60 | return -EFAULT; | 60 | return -EFAULT; |
61 | 61 | ||
62 | inc_preempt_count(); | 62 | pagefault_disable(); |
63 | 63 | ||
64 | switch (op) { | 64 | switch (op) { |
65 | case FUTEX_OP_SET: | 65 | case FUTEX_OP_SET: |
@@ -83,7 +83,7 @@ futex_atomic_op_inuser (int encoded_op, int __user *uaddr) | |||
83 | ret = -ENOSYS; | 83 | ret = -ENOSYS; |
84 | } | 84 | } |
85 | 85 | ||
86 | dec_preempt_count(); | 86 | pagefault_enable(); |
87 | 87 | ||
88 | if (!ret) { | 88 | if (!ret) { |
89 | switch (cmp) { | 89 | switch (cmp) { |
diff --git a/include/asm-ia64/pgalloc.h b/include/asm-ia64/pgalloc.h index 9cb68e9b377e..393e04c42a2c 100644 --- a/include/asm-ia64/pgalloc.h +++ b/include/asm-ia64/pgalloc.h | |||
@@ -60,7 +60,7 @@ static inline void *pgtable_quicklist_alloc(void) | |||
60 | static inline void pgtable_quicklist_free(void *pgtable_entry) | 60 | static inline void pgtable_quicklist_free(void *pgtable_entry) |
61 | { | 61 | { |
62 | #ifdef CONFIG_NUMA | 62 | #ifdef CONFIG_NUMA |
63 | unsigned long nid = page_to_nid(virt_to_page(pgtable_entry)); | 63 | int nid = page_to_nid(virt_to_page(pgtable_entry)); |
64 | 64 | ||
65 | if (unlikely(nid != numa_node_id())) { | 65 | if (unlikely(nid != numa_node_id())) { |
66 | free_page((unsigned long)pgtable_entry); | 66 | free_page((unsigned long)pgtable_entry); |
diff --git a/include/asm-m32r/setup.h b/include/asm-m32r/setup.h index 52f4fa29abfc..6a0b32202d4e 100644 --- a/include/asm-m32r/setup.h +++ b/include/asm-m32r/setup.h | |||
@@ -1,6 +1,11 @@ | |||
1 | /* | 1 | /* |
2 | * This is set up by the setup-routine at boot-time | 2 | * This is set up by the setup-routine at boot-time |
3 | */ | 3 | */ |
4 | |||
5 | #define COMMAND_LINE_SIZE 512 | ||
6 | |||
7 | #ifdef __KERNEL__ | ||
8 | |||
4 | #define PARAM ((unsigned char *)empty_zero_page) | 9 | #define PARAM ((unsigned char *)empty_zero_page) |
5 | 10 | ||
6 | #define MOUNT_ROOT_RDONLY (*(unsigned long *) (PARAM+0x000)) | 11 | #define MOUNT_ROOT_RDONLY (*(unsigned long *) (PARAM+0x000)) |
@@ -18,8 +23,6 @@ | |||
18 | 23 | ||
19 | #define SCREEN_INFO (*(struct screen_info *) (PARAM+0x200)) | 24 | #define SCREEN_INFO (*(struct screen_info *) (PARAM+0x200)) |
20 | 25 | ||
21 | #define COMMAND_LINE_SIZE (512) | ||
22 | |||
23 | #define RAMDISK_IMAGE_START_MASK (0x07FF) | 26 | #define RAMDISK_IMAGE_START_MASK (0x07FF) |
24 | #define RAMDISK_PROMPT_FLAG (0x8000) | 27 | #define RAMDISK_PROMPT_FLAG (0x8000) |
25 | #define RAMDISK_LOAD_FLAG (0x4000) | 28 | #define RAMDISK_LOAD_FLAG (0x4000) |
@@ -27,3 +30,5 @@ | |||
27 | extern unsigned long memory_start; | 30 | extern unsigned long memory_start; |
28 | extern unsigned long memory_end; | 31 | extern unsigned long memory_end; |
29 | 32 | ||
33 | #endif /* __KERNEL__ */ | ||
34 | |||
diff --git a/include/asm-m32r/unistd.h b/include/asm-m32r/unistd.h index 95aa34298d82..5b66bd3c6ed6 100644 --- a/include/asm-m32r/unistd.h +++ b/include/asm-m32r/unistd.h | |||
@@ -296,117 +296,6 @@ | |||
296 | #ifdef __KERNEL__ | 296 | #ifdef __KERNEL__ |
297 | 297 | ||
298 | #define NR_syscalls 285 | 298 | #define NR_syscalls 285 |
299 | #include <linux/err.h> | ||
300 | |||
301 | /* user-visible error numbers are in the range -1 - -MAX_ERRNO: see | ||
302 | * <asm-m32r/errno.h> | ||
303 | */ | ||
304 | |||
305 | #include <asm/syscall.h> /* SYSCALL_* */ | ||
306 | |||
307 | #define __syscall_return(type, res) \ | ||
308 | do { \ | ||
309 | if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \ | ||
310 | /* Avoid using "res" which is declared to be in register r0; \ | ||
311 | errno might expand to a function call and clobber it. */ \ | ||
312 | int __err = -(res); \ | ||
313 | errno = __err; \ | ||
314 | res = -1; \ | ||
315 | } \ | ||
316 | return (type) (res); \ | ||
317 | } while (0) | ||
318 | |||
319 | #define _syscall0(type,name) \ | ||
320 | type name(void) \ | ||
321 | { \ | ||
322 | register long __scno __asm__ ("r7") = __NR_##name; \ | ||
323 | register long __res __asm__("r0"); \ | ||
324 | __asm__ __volatile__ (\ | ||
325 | "trap #" SYSCALL_VECTOR "|| nop"\ | ||
326 | : "=r" (__res) \ | ||
327 | : "r" (__scno) \ | ||
328 | : "memory"); \ | ||
329 | __syscall_return(type,__res); \ | ||
330 | } | ||
331 | |||
332 | #define _syscall1(type,name,type1,arg1) \ | ||
333 | type name(type1 arg1) \ | ||
334 | { \ | ||
335 | register long __scno __asm__ ("r7") = __NR_##name; \ | ||
336 | register long __res __asm__ ("r0") = (long)(arg1); \ | ||
337 | __asm__ __volatile__ (\ | ||
338 | "trap #" SYSCALL_VECTOR "|| nop"\ | ||
339 | : "=r" (__res) \ | ||
340 | : "r" (__scno), "0" (__res) \ | ||
341 | : "memory"); \ | ||
342 | __syscall_return(type,__res); \ | ||
343 | } | ||
344 | |||
345 | #define _syscall2(type,name,type1,arg1,type2,arg2) \ | ||
346 | type name(type1 arg1,type2 arg2) \ | ||
347 | { \ | ||
348 | register long __scno __asm__ ("r7") = __NR_##name; \ | ||
349 | register long __arg2 __asm__ ("r1") = (long)(arg2); \ | ||
350 | register long __res __asm__ ("r0") = (long)(arg1); \ | ||
351 | __asm__ __volatile__ (\ | ||
352 | "trap #" SYSCALL_VECTOR "|| nop"\ | ||
353 | : "=r" (__res) \ | ||
354 | : "r" (__scno), "0" (__res), "r" (__arg2) \ | ||
355 | : "memory"); \ | ||
356 | __syscall_return(type,__res); \ | ||
357 | } | ||
358 | |||
359 | #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ | ||
360 | type name(type1 arg1,type2 arg2,type3 arg3) \ | ||
361 | { \ | ||
362 | register long __scno __asm__ ("r7") = __NR_##name; \ | ||
363 | register long __arg3 __asm__ ("r2") = (long)(arg3); \ | ||
364 | register long __arg2 __asm__ ("r1") = (long)(arg2); \ | ||
365 | register long __res __asm__ ("r0") = (long)(arg1); \ | ||
366 | __asm__ __volatile__ (\ | ||
367 | "trap #" SYSCALL_VECTOR "|| nop"\ | ||
368 | : "=r" (__res) \ | ||
369 | : "r" (__scno), "0" (__res), "r" (__arg2), \ | ||
370 | "r" (__arg3) \ | ||
371 | : "memory"); \ | ||
372 | __syscall_return(type,__res); \ | ||
373 | } | ||
374 | |||
375 | #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \ | ||
376 | type name(type1 arg1,type2 arg2,type3 arg3,type4 arg4) \ | ||
377 | { \ | ||
378 | register long __scno __asm__ ("r7") = __NR_##name; \ | ||
379 | register long __arg4 __asm__ ("r3") = (long)(arg4); \ | ||
380 | register long __arg3 __asm__ ("r2") = (long)(arg3); \ | ||
381 | register long __arg2 __asm__ ("r1") = (long)(arg2); \ | ||
382 | register long __res __asm__ ("r0") = (long)(arg1); \ | ||
383 | __asm__ __volatile__ (\ | ||
384 | "trap #" SYSCALL_VECTOR "|| nop"\ | ||
385 | : "=r" (__res) \ | ||
386 | : "r" (__scno), "0" (__res), "r" (__arg2), \ | ||
387 | "r" (__arg3), "r" (__arg4) \ | ||
388 | : "memory"); \ | ||
389 | __syscall_return(type,__res); \ | ||
390 | } | ||
391 | |||
392 | #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \ | ||
393 | type5,arg5) \ | ||
394 | type name(type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \ | ||
395 | { \ | ||
396 | register long __scno __asm__ ("r7") = __NR_##name; \ | ||
397 | register long __arg5 __asm__ ("r4") = (long)(arg5); \ | ||
398 | register long __arg4 __asm__ ("r3") = (long)(arg4); \ | ||
399 | register long __arg3 __asm__ ("r2") = (long)(arg3); \ | ||
400 | register long __arg2 __asm__ ("r1") = (long)(arg2); \ | ||
401 | register long __res __asm__ ("r0") = (long)(arg1); \ | ||
402 | __asm__ __volatile__ (\ | ||
403 | "trap #" SYSCALL_VECTOR "|| nop"\ | ||
404 | : "=r" (__res) \ | ||
405 | : "r" (__scno), "0" (__res), "r" (__arg2), \ | ||
406 | "r" (__arg3), "r" (__arg4), "r" (__arg5) \ | ||
407 | : "memory"); \ | ||
408 | __syscall_return(type,__res); \ | ||
409 | } | ||
410 | 299 | ||
411 | #define __ARCH_WANT_IPC_PARSE_VERSION | 300 | #define __ARCH_WANT_IPC_PARSE_VERSION |
412 | #define __ARCH_WANT_STAT64 | 301 | #define __ARCH_WANT_STAT64 |
diff --git a/include/asm-m68k/dma-mapping.h b/include/asm-m68k/dma-mapping.h index d90d841d3dfd..00259ed6fc95 100644 --- a/include/asm-m68k/dma-mapping.h +++ b/include/asm-m68k/dma-mapping.h | |||
@@ -21,7 +21,7 @@ static inline int dma_get_cache_alignment(void) | |||
21 | return 1 << L1_CACHE_SHIFT; | 21 | return 1 << L1_CACHE_SHIFT; |
22 | } | 22 | } |
23 | 23 | ||
24 | static inline int dma_is_consistent(dma_addr_t dma_addr) | 24 | static inline int dma_is_consistent(struct device *dev, dma_addr_t dma_addr) |
25 | { | 25 | { |
26 | return 0; | 26 | return 0; |
27 | } | 27 | } |
@@ -41,7 +41,7 @@ static inline void dma_free_noncoherent(struct device *dev, size_t size, | |||
41 | { | 41 | { |
42 | dma_free_coherent(dev, size, addr, handle); | 42 | dma_free_coherent(dev, size, addr, handle); |
43 | } | 43 | } |
44 | static inline void dma_cache_sync(void *vaddr, size_t size, | 44 | static inline void dma_cache_sync(struct device *dev, void *vaddr, size_t size, |
45 | enum dma_data_direction dir) | 45 | enum dma_data_direction dir) |
46 | { | 46 | { |
47 | /* we use coherent allocation, so not much to do here. */ | 47 | /* we use coherent allocation, so not much to do here. */ |
diff --git a/include/asm-m68k/setup.h b/include/asm-m68k/setup.h index 7facc9a46e74..2a8853cd6554 100644 --- a/include/asm-m68k/setup.h +++ b/include/asm-m68k/setup.h | |||
@@ -41,8 +41,12 @@ | |||
41 | #define MACH_Q40 10 | 41 | #define MACH_Q40 10 |
42 | #define MACH_SUN3X 11 | 42 | #define MACH_SUN3X 11 |
43 | 43 | ||
44 | #define COMMAND_LINE_SIZE 256 | ||
45 | |||
44 | #ifdef __KERNEL__ | 46 | #ifdef __KERNEL__ |
45 | 47 | ||
48 | #define CL_SIZE COMMAND_LINE_SIZE | ||
49 | |||
46 | #ifndef __ASSEMBLY__ | 50 | #ifndef __ASSEMBLY__ |
47 | extern unsigned long m68k_machtype; | 51 | extern unsigned long m68k_machtype; |
48 | #endif /* !__ASSEMBLY__ */ | 52 | #endif /* !__ASSEMBLY__ */ |
@@ -355,8 +359,6 @@ extern int m68k_is040or060; | |||
355 | */ | 359 | */ |
356 | 360 | ||
357 | #define NUM_MEMINFO 4 | 361 | #define NUM_MEMINFO 4 |
358 | #define CL_SIZE 256 | ||
359 | #define COMMAND_LINE_SIZE CL_SIZE | ||
360 | 362 | ||
361 | #ifndef __ASSEMBLY__ | 363 | #ifndef __ASSEMBLY__ |
362 | struct mem_info { | 364 | struct mem_info { |
diff --git a/include/asm-m68k/unistd.h b/include/asm-m68k/unistd.h index ad4348058c66..fdbb60e6a0d4 100644 --- a/include/asm-m68k/unistd.h +++ b/include/asm-m68k/unistd.h | |||
@@ -317,103 +317,6 @@ | |||
317 | #ifdef __KERNEL__ | 317 | #ifdef __KERNEL__ |
318 | 318 | ||
319 | #define NR_syscalls 311 | 319 | #define NR_syscalls 311 |
320 | #include <linux/err.h> | ||
321 | |||
322 | /* user-visible error numbers are in the range -1 - -MAX_ERRNO: see | ||
323 | <asm-m68k/errno.h> */ | ||
324 | |||
325 | #define __syscall_return(type, res) \ | ||
326 | do { \ | ||
327 | if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \ | ||
328 | /* avoid using res which is declared to be in register d0; \ | ||
329 | errno might expand to a function call and clobber it. */ \ | ||
330 | int __err = -(res); \ | ||
331 | errno = __err; \ | ||
332 | res = -1; \ | ||
333 | } \ | ||
334 | return (type) (res); \ | ||
335 | } while (0) | ||
336 | |||
337 | #define _syscall0(type,name) \ | ||
338 | type name(void) \ | ||
339 | { \ | ||
340 | register long __res __asm__ ("%d0") = __NR_##name; \ | ||
341 | __asm__ __volatile__ ("trap #0" \ | ||
342 | : "+d" (__res) ); \ | ||
343 | __syscall_return(type,__res); \ | ||
344 | } | ||
345 | |||
346 | #define _syscall1(type,name,atype,a) \ | ||
347 | type name(atype a) \ | ||
348 | { \ | ||
349 | register long __res __asm__ ("%d0") = __NR_##name; \ | ||
350 | register long __a __asm__ ("%d1") = (long)(a); \ | ||
351 | __asm__ __volatile__ ("trap #0" \ | ||
352 | : "+d" (__res) \ | ||
353 | : "d" (__a) ); \ | ||
354 | __syscall_return(type,__res); \ | ||
355 | } | ||
356 | |||
357 | #define _syscall2(type,name,atype,a,btype,b) \ | ||
358 | type name(atype a,btype b) \ | ||
359 | { \ | ||
360 | register long __res __asm__ ("%d0") = __NR_##name; \ | ||
361 | register long __a __asm__ ("%d1") = (long)(a); \ | ||
362 | register long __b __asm__ ("%d2") = (long)(b); \ | ||
363 | __asm__ __volatile__ ("trap #0" \ | ||
364 | : "+d" (__res) \ | ||
365 | : "d" (__a), "d" (__b) \ | ||
366 | ); \ | ||
367 | __syscall_return(type,__res); \ | ||
368 | } | ||
369 | |||
370 | #define _syscall3(type,name,atype,a,btype,b,ctype,c) \ | ||
371 | type name(atype a,btype b,ctype c) \ | ||
372 | { \ | ||
373 | register long __res __asm__ ("%d0") = __NR_##name; \ | ||
374 | register long __a __asm__ ("%d1") = (long)(a); \ | ||
375 | register long __b __asm__ ("%d2") = (long)(b); \ | ||
376 | register long __c __asm__ ("%d3") = (long)(c); \ | ||
377 | __asm__ __volatile__ ("trap #0" \ | ||
378 | : "+d" (__res) \ | ||
379 | : "d" (__a), "d" (__b), \ | ||
380 | "d" (__c) \ | ||
381 | ); \ | ||
382 | __syscall_return(type,__res); \ | ||
383 | } | ||
384 | |||
385 | #define _syscall4(type,name,atype,a,btype,b,ctype,c,dtype,d) \ | ||
386 | type name (atype a, btype b, ctype c, dtype d) \ | ||
387 | { \ | ||
388 | register long __res __asm__ ("%d0") = __NR_##name; \ | ||
389 | register long __a __asm__ ("%d1") = (long)(a); \ | ||
390 | register long __b __asm__ ("%d2") = (long)(b); \ | ||
391 | register long __c __asm__ ("%d3") = (long)(c); \ | ||
392 | register long __d __asm__ ("%d4") = (long)(d); \ | ||
393 | __asm__ __volatile__ ("trap #0" \ | ||
394 | : "+d" (__res) \ | ||
395 | : "d" (__a), "d" (__b), \ | ||
396 | "d" (__c), "d" (__d) \ | ||
397 | ); \ | ||
398 | __syscall_return(type,__res); \ | ||
399 | } | ||
400 | |||
401 | #define _syscall5(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e) \ | ||
402 | type name (atype a,btype b,ctype c,dtype d,etype e) \ | ||
403 | { \ | ||
404 | register long __res __asm__ ("%d0") = __NR_##name; \ | ||
405 | register long __a __asm__ ("%d1") = (long)(a); \ | ||
406 | register long __b __asm__ ("%d2") = (long)(b); \ | ||
407 | register long __c __asm__ ("%d3") = (long)(c); \ | ||
408 | register long __d __asm__ ("%d4") = (long)(d); \ | ||
409 | register long __e __asm__ ("%d5") = (long)(e); \ | ||
410 | __asm__ __volatile__ ("trap #0" \ | ||
411 | : "+d" (__res) \ | ||
412 | : "d" (__a), "d" (__b), \ | ||
413 | "d" (__c), "d" (__d), "d" (__e) \ | ||
414 | ); \ | ||
415 | __syscall_return(type,__res); \ | ||
416 | } | ||
417 | 320 | ||
418 | #define __ARCH_WANT_IPC_PARSE_VERSION | 321 | #define __ARCH_WANT_IPC_PARSE_VERSION |
419 | #define __ARCH_WANT_OLD_READDIR | 322 | #define __ARCH_WANT_OLD_READDIR |
diff --git a/include/asm-m68knommu/irq.h b/include/asm-m68knommu/irq.h index 45e7a2fd1689..7b8f874f8429 100644 --- a/include/asm-m68knommu/irq.h +++ b/include/asm-m68knommu/irq.h | |||
@@ -86,5 +86,6 @@ extern void (*mach_disable_irq)(unsigned int); | |||
86 | #define enable_irq(x) do { } while (0) | 86 | #define enable_irq(x) do { } while (0) |
87 | #define disable_irq(x) do { } while (0) | 87 | #define disable_irq(x) do { } while (0) |
88 | #define disable_irq_nosync(x) disable_irq(x) | 88 | #define disable_irq_nosync(x) disable_irq(x) |
89 | #define irq_canonicalize(irq) (irq) | ||
89 | 90 | ||
90 | #endif /* _M68K_IRQ_H_ */ | 91 | #endif /* _M68K_IRQ_H_ */ |
diff --git a/include/asm-m68knommu/rtc.h b/include/asm-m68knommu/rtc.h new file mode 100644 index 000000000000..eaf18ec83c8e --- /dev/null +++ b/include/asm-m68knommu/rtc.h | |||
@@ -0,0 +1 @@ | |||
#include <asm-m68k/rtc.h> | |||
diff --git a/include/asm-m68knommu/setup.h b/include/asm-m68knommu/setup.h index d2b0fcce41b2..fb86bb2a6078 100644 --- a/include/asm-m68knommu/setup.h +++ b/include/asm-m68knommu/setup.h | |||
@@ -1,5 +1,10 @@ | |||
1 | #ifdef __KERNEL__ | ||
2 | |||
1 | #include <asm-m68k/setup.h> | 3 | #include <asm-m68k/setup.h> |
2 | 4 | ||
3 | /* We have a bigger command line buffer. */ | 5 | /* We have a bigger command line buffer. */ |
4 | #undef COMMAND_LINE_SIZE | 6 | #undef COMMAND_LINE_SIZE |
7 | |||
8 | #endif /* __KERNEL__ */ | ||
9 | |||
5 | #define COMMAND_LINE_SIZE 512 | 10 | #define COMMAND_LINE_SIZE 512 |
diff --git a/include/asm-m68knommu/ucontext.h b/include/asm-m68knommu/ucontext.h index 5d570cedbb02..713a27f901cd 100644 --- a/include/asm-m68knommu/ucontext.h +++ b/include/asm-m68knommu/ucontext.h | |||
@@ -5,21 +5,17 @@ typedef int greg_t; | |||
5 | #define NGREG 18 | 5 | #define NGREG 18 |
6 | typedef greg_t gregset_t[NGREG]; | 6 | typedef greg_t gregset_t[NGREG]; |
7 | 7 | ||
8 | #ifdef CONFIG_FPU | ||
9 | typedef struct fpregset { | 8 | typedef struct fpregset { |
10 | int f_pcr; | 9 | int f_pcr; |
11 | int f_psr; | 10 | int f_psr; |
12 | int f_fpiaddr; | 11 | int f_fpiaddr; |
13 | int f_fpregs[8][3]; | 12 | int f_fpregs[8][3]; |
14 | } fpregset_t; | 13 | } fpregset_t; |
15 | #endif | ||
16 | 14 | ||
17 | struct mcontext { | 15 | struct mcontext { |
18 | int version; | 16 | int version; |
19 | gregset_t gregs; | 17 | gregset_t gregs; |
20 | #ifdef CONFIG_FPU | ||
21 | fpregset_t fpregs; | 18 | fpregset_t fpregs; |
22 | #endif | ||
23 | }; | 19 | }; |
24 | 20 | ||
25 | #define MCONTEXT_VERSION 2 | 21 | #define MCONTEXT_VERSION 2 |
@@ -29,9 +25,7 @@ struct ucontext { | |||
29 | struct ucontext *uc_link; | 25 | struct ucontext *uc_link; |
30 | stack_t uc_stack; | 26 | stack_t uc_stack; |
31 | struct mcontext uc_mcontext; | 27 | struct mcontext uc_mcontext; |
32 | #ifdef CONFIG_FPU | ||
33 | unsigned long uc_filler[80]; | 28 | unsigned long uc_filler[80]; |
34 | #endif | ||
35 | sigset_t uc_sigmask; /* mask last for extensibility */ | 29 | sigset_t uc_sigmask; /* mask last for extensibility */ |
36 | }; | 30 | }; |
37 | 31 | ||
diff --git a/include/asm-m68knommu/unistd.h b/include/asm-m68knommu/unistd.h index ebaf03197114..82e03195f325 100644 --- a/include/asm-m68knommu/unistd.h +++ b/include/asm-m68knommu/unistd.h | |||
@@ -318,156 +318,6 @@ | |||
318 | #ifdef __KERNEL__ | 318 | #ifdef __KERNEL__ |
319 | 319 | ||
320 | #define NR_syscalls 311 | 320 | #define NR_syscalls 311 |
321 | #include <linux/err.h> | ||
322 | |||
323 | /* user-visible error numbers are in the range -1 - -MAX_ERRNO: see | ||
324 | <asm-m68k/errno.h> */ | ||
325 | |||
326 | #define __syscall_return(type, res) \ | ||
327 | do { \ | ||
328 | if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \ | ||
329 | /* avoid using res which is declared to be in register d0; \ | ||
330 | errno might expand to a function call and clobber it. */ \ | ||
331 | int __err = -(res); \ | ||
332 | errno = __err; \ | ||
333 | res = -1; \ | ||
334 | } \ | ||
335 | return (type) (res); \ | ||
336 | } while (0) | ||
337 | |||
338 | #define _syscall0(type, name) \ | ||
339 | type name(void) \ | ||
340 | { \ | ||
341 | long __res; \ | ||
342 | __asm__ __volatile__ ("movel %1, %%d0\n\t" \ | ||
343 | "trap #0\n\t" \ | ||
344 | "movel %%d0, %0" \ | ||
345 | : "=g" (__res) \ | ||
346 | : "i" (__NR_##name) \ | ||
347 | : "cc", "%d0"); \ | ||
348 | if ((unsigned long)(__res) >= (unsigned long)(-125)) { \ | ||
349 | errno = -__res; \ | ||
350 | __res = -1; \ | ||
351 | } \ | ||
352 | return (type)__res; \ | ||
353 | } | ||
354 | |||
355 | #define _syscall1(type, name, atype, a) \ | ||
356 | type name(atype a) \ | ||
357 | { \ | ||
358 | long __res; \ | ||
359 | __asm__ __volatile__ ("movel %2, %%d1\n\t" \ | ||
360 | "movel %1, %%d0\n\t" \ | ||
361 | "trap #0\n\t" \ | ||
362 | "movel %%d0, %0" \ | ||
363 | : "=g" (__res) \ | ||
364 | : "i" (__NR_##name), \ | ||
365 | "g" ((long)a) \ | ||
366 | : "cc", "%d0", "%d1"); \ | ||
367 | if ((unsigned long)(__res) >= (unsigned long)(-125)) { \ | ||
368 | errno = -__res; \ | ||
369 | __res = -1; \ | ||
370 | } \ | ||
371 | return (type)__res; \ | ||
372 | } | ||
373 | |||
374 | #define _syscall2(type, name, atype, a, btype, b) \ | ||
375 | type name(atype a, btype b) \ | ||
376 | { \ | ||
377 | long __res; \ | ||
378 | __asm__ __volatile__ ("movel %3, %%d2\n\t" \ | ||
379 | "movel %2, %%d1\n\t" \ | ||
380 | "movel %1, %%d0\n\t" \ | ||
381 | "trap #0\n\t" \ | ||
382 | "movel %%d0, %0" \ | ||
383 | : "=g" (__res) \ | ||
384 | : "i" (__NR_##name), \ | ||
385 | "a" ((long)a), \ | ||
386 | "g" ((long)b) \ | ||
387 | : "cc", "%d0", "%d1", "%d2"); \ | ||
388 | if ((unsigned long)(__res) >= (unsigned long)(-125)) { \ | ||
389 | errno = -__res; \ | ||
390 | __res = -1; \ | ||
391 | } \ | ||
392 | return (type)__res; \ | ||
393 | } | ||
394 | |||
395 | #define _syscall3(type, name, atype, a, btype, b, ctype, c) \ | ||
396 | type name(atype a, btype b, ctype c) \ | ||
397 | { \ | ||
398 | long __res; \ | ||
399 | __asm__ __volatile__ ("movel %4, %%d3\n\t" \ | ||
400 | "movel %3, %%d2\n\t" \ | ||
401 | "movel %2, %%d1\n\t" \ | ||
402 | "movel %1, %%d0\n\t" \ | ||
403 | "trap #0\n\t" \ | ||
404 | "movel %%d0, %0" \ | ||
405 | : "=g" (__res) \ | ||
406 | : "i" (__NR_##name), \ | ||
407 | "a" ((long)a), \ | ||
408 | "a" ((long)b), \ | ||
409 | "g" ((long)c) \ | ||
410 | : "cc", "%d0", "%d1", "%d2", "%d3"); \ | ||
411 | if ((unsigned long)(__res) >= (unsigned long)(-125)) { \ | ||
412 | errno = -__res; \ | ||
413 | __res = -1; \ | ||
414 | } \ | ||
415 | return (type)__res; \ | ||
416 | } | ||
417 | |||
418 | #define _syscall4(type, name, atype, a, btype, b, ctype, c, dtype, d) \ | ||
419 | type name(atype a, btype b, ctype c, dtype d) \ | ||
420 | { \ | ||
421 | long __res; \ | ||
422 | __asm__ __volatile__ ("movel %5, %%d4\n\t" \ | ||
423 | "movel %4, %%d3\n\t" \ | ||
424 | "movel %3, %%d2\n\t" \ | ||
425 | "movel %2, %%d1\n\t" \ | ||
426 | "movel %1, %%d0\n\t" \ | ||
427 | "trap #0\n\t" \ | ||
428 | "movel %%d0, %0" \ | ||
429 | : "=g" (__res) \ | ||
430 | : "i" (__NR_##name), \ | ||
431 | "a" ((long)a), \ | ||
432 | "a" ((long)b), \ | ||
433 | "a" ((long)c), \ | ||
434 | "g" ((long)d) \ | ||
435 | : "cc", "%d0", "%d1", "%d2", "%d3", \ | ||
436 | "%d4"); \ | ||
437 | if ((unsigned long)(__res) >= (unsigned long)(-125)) { \ | ||
438 | errno = -__res; \ | ||
439 | __res = -1; \ | ||
440 | } \ | ||
441 | return (type)__res; \ | ||
442 | } | ||
443 | |||
444 | #define _syscall5(type, name, atype, a, btype, b, ctype, c, dtype, d, etype, e) \ | ||
445 | type name(atype a, btype b, ctype c, dtype d, etype e) \ | ||
446 | { \ | ||
447 | long __res; \ | ||
448 | __asm__ __volatile__ ("movel %6, %%d5\n\t" \ | ||
449 | "movel %5, %%d4\n\t" \ | ||
450 | "movel %4, %%d3\n\t" \ | ||
451 | "movel %3, %%d2\n\t" \ | ||
452 | "movel %2, %%d1\n\t" \ | ||
453 | "movel %1, %%d0\n\t" \ | ||
454 | "trap #0\n\t" \ | ||
455 | "movel %%d0, %0" \ | ||
456 | : "=g" (__res) \ | ||
457 | : "i" (__NR_##name), \ | ||
458 | "a" ((long)a), \ | ||
459 | "a" ((long)b), \ | ||
460 | "a" ((long)c), \ | ||
461 | "a" ((long)d), \ | ||
462 | "g" ((long)e) \ | ||
463 | : "cc", "%d0", "%d1", "%d2", "%d3", \ | ||
464 | "%d4", "%d5"); \ | ||
465 | if ((unsigned long)(__res) >= (unsigned long)(-125)) { \ | ||
466 | errno = -__res; \ | ||
467 | __res = -1; \ | ||
468 | } \ | ||
469 | return (type)__res; \ | ||
470 | } | ||
471 | 321 | ||
472 | #define __ARCH_WANT_IPC_PARSE_VERSION | 322 | #define __ARCH_WANT_IPC_PARSE_VERSION |
473 | #define __ARCH_WANT_OLD_READDIR | 323 | #define __ARCH_WANT_OLD_READDIR |
diff --git a/include/asm-mips/dma-mapping.h b/include/asm-mips/dma-mapping.h index 43288634c38a..236d1a467cc7 100644 --- a/include/asm-mips/dma-mapping.h +++ b/include/asm-mips/dma-mapping.h | |||
@@ -63,9 +63,9 @@ dma_get_cache_alignment(void) | |||
63 | return 128; | 63 | return 128; |
64 | } | 64 | } |
65 | 65 | ||
66 | extern int dma_is_consistent(dma_addr_t dma_addr); | 66 | extern int dma_is_consistent(struct device *dev, dma_addr_t dma_addr); |
67 | 67 | ||
68 | extern void dma_cache_sync(void *vaddr, size_t size, | 68 | extern void dma_cache_sync(struct device *dev, void *vaddr, size_t size, |
69 | enum dma_data_direction direction); | 69 | enum dma_data_direction direction); |
70 | 70 | ||
71 | #define ARCH_HAS_DMA_DECLARE_COHERENT_MEMORY | 71 | #define ARCH_HAS_DMA_DECLARE_COHERENT_MEMORY |
diff --git a/include/asm-mips/futex.h b/include/asm-mips/futex.h index 927a216bd530..47e5679c2353 100644 --- a/include/asm-mips/futex.h +++ b/include/asm-mips/futex.h | |||
@@ -88,7 +88,7 @@ futex_atomic_op_inuser (int encoded_op, int __user *uaddr) | |||
88 | if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int))) | 88 | if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int))) |
89 | return -EFAULT; | 89 | return -EFAULT; |
90 | 90 | ||
91 | inc_preempt_count(); | 91 | pagefault_disable(); |
92 | 92 | ||
93 | switch (op) { | 93 | switch (op) { |
94 | case FUTEX_OP_SET: | 94 | case FUTEX_OP_SET: |
@@ -115,7 +115,7 @@ futex_atomic_op_inuser (int encoded_op, int __user *uaddr) | |||
115 | ret = -ENOSYS; | 115 | ret = -ENOSYS; |
116 | } | 116 | } |
117 | 117 | ||
118 | dec_preempt_count(); | 118 | pagefault_enable(); |
119 | 119 | ||
120 | if (!ret) { | 120 | if (!ret) { |
121 | switch (cmp) { | 121 | switch (cmp) { |
diff --git a/include/asm-mips/highmem.h b/include/asm-mips/highmem.h index c976bfaaba83..f8c8182f7f2e 100644 --- a/include/asm-mips/highmem.h +++ b/include/asm-mips/highmem.h | |||
@@ -21,6 +21,7 @@ | |||
21 | 21 | ||
22 | #include <linux/init.h> | 22 | #include <linux/init.h> |
23 | #include <linux/interrupt.h> | 23 | #include <linux/interrupt.h> |
24 | #include <linux/uaccess.h> | ||
24 | #include <asm/kmap_types.h> | 25 | #include <asm/kmap_types.h> |
25 | 26 | ||
26 | /* undef for production */ | 27 | /* undef for production */ |
@@ -70,11 +71,16 @@ static inline void *kmap(struct page *page) | |||
70 | 71 | ||
71 | static inline void *kmap_atomic(struct page *page, enum km_type type) | 72 | static inline void *kmap_atomic(struct page *page, enum km_type type) |
72 | { | 73 | { |
74 | pagefault_disable(); | ||
73 | return page_address(page); | 75 | return page_address(page); |
74 | } | 76 | } |
75 | 77 | ||
76 | static inline void kunmap_atomic(void *kvaddr, enum km_type type) { } | 78 | static inline void kunmap_atomic(void *kvaddr, enum km_type type) |
77 | #define kmap_atomic_pfn(pfn, idx) page_address(pfn_to_page(pfn)) | 79 | { |
80 | pagefault_enable(); | ||
81 | } | ||
82 | |||
83 | #define kmap_atomic_pfn(pfn, idx) kmap_atomic(pfn_to_page(pfn), (idx)) | ||
78 | 84 | ||
79 | #define kmap_atomic_to_page(ptr) virt_to_page(ptr) | 85 | #define kmap_atomic_to_page(ptr) virt_to_page(ptr) |
80 | 86 | ||
diff --git a/include/asm-mips/i8259.h b/include/asm-mips/i8259.h index 0214abe3f0af..4df8d8b118c0 100644 --- a/include/asm-mips/i8259.h +++ b/include/asm-mips/i8259.h | |||
@@ -19,10 +19,31 @@ | |||
19 | 19 | ||
20 | #include <asm/io.h> | 20 | #include <asm/io.h> |
21 | 21 | ||
22 | /* i8259A PIC registers */ | ||
23 | #define PIC_MASTER_CMD 0x20 | ||
24 | #define PIC_MASTER_IMR 0x21 | ||
25 | #define PIC_MASTER_ISR PIC_MASTER_CMD | ||
26 | #define PIC_MASTER_POLL PIC_MASTER_ISR | ||
27 | #define PIC_MASTER_OCW3 PIC_MASTER_ISR | ||
28 | #define PIC_SLAVE_CMD 0xa0 | ||
29 | #define PIC_SLAVE_IMR 0xa1 | ||
30 | |||
31 | /* i8259A PIC related value */ | ||
32 | #define PIC_CASCADE_IR 2 | ||
33 | #define MASTER_ICW4_DEFAULT 0x01 | ||
34 | #define SLAVE_ICW4_DEFAULT 0x01 | ||
35 | #define PIC_ICW4_AEOI 2 | ||
36 | |||
22 | extern spinlock_t i8259A_lock; | 37 | extern spinlock_t i8259A_lock; |
23 | 38 | ||
39 | extern void init_8259A(int auto_eoi); | ||
40 | extern void enable_8259A_irq(unsigned int irq); | ||
41 | extern void disable_8259A_irq(unsigned int irq); | ||
42 | |||
24 | extern void init_i8259_irqs(void); | 43 | extern void init_i8259_irqs(void); |
25 | 44 | ||
45 | #define I8259A_IRQ_BASE 0 | ||
46 | |||
26 | /* | 47 | /* |
27 | * Do the traditional i8259 interrupt polling thing. This is for the few | 48 | * Do the traditional i8259 interrupt polling thing. This is for the few |
28 | * cases where no better interrupt acknowledge method is available and we | 49 | * cases where no better interrupt acknowledge method is available and we |
@@ -35,15 +56,15 @@ static inline int i8259_irq(void) | |||
35 | spin_lock(&i8259A_lock); | 56 | spin_lock(&i8259A_lock); |
36 | 57 | ||
37 | /* Perform an interrupt acknowledge cycle on controller 1. */ | 58 | /* Perform an interrupt acknowledge cycle on controller 1. */ |
38 | outb(0x0C, 0x20); /* prepare for poll */ | 59 | outb(0x0C, PIC_MASTER_CMD); /* prepare for poll */ |
39 | irq = inb(0x20) & 7; | 60 | irq = inb(PIC_MASTER_CMD) & 7; |
40 | if (irq == 2) { | 61 | if (irq == PIC_CASCADE_IR) { |
41 | /* | 62 | /* |
42 | * Interrupt is cascaded so perform interrupt | 63 | * Interrupt is cascaded so perform interrupt |
43 | * acknowledge on controller 2. | 64 | * acknowledge on controller 2. |
44 | */ | 65 | */ |
45 | outb(0x0C, 0xA0); /* prepare for poll */ | 66 | outb(0x0C, PIC_SLAVE_CMD); /* prepare for poll */ |
46 | irq = (inb(0xA0) & 7) + 8; | 67 | irq = (inb(PIC_SLAVE_CMD) & 7) + 8; |
47 | } | 68 | } |
48 | 69 | ||
49 | if (unlikely(irq == 7)) { | 70 | if (unlikely(irq == 7)) { |
@@ -54,14 +75,14 @@ static inline int i8259_irq(void) | |||
54 | * significant bit is not set then there is no valid | 75 | * significant bit is not set then there is no valid |
55 | * interrupt. | 76 | * interrupt. |
56 | */ | 77 | */ |
57 | outb(0x0B, 0x20); /* ISR register */ | 78 | outb(0x0B, PIC_MASTER_ISR); /* ISR register */ |
58 | if(~inb(0x20) & 0x80) | 79 | if(~inb(PIC_MASTER_ISR) & 0x80) |
59 | irq = -1; | 80 | irq = -1; |
60 | } | 81 | } |
61 | 82 | ||
62 | spin_unlock(&i8259A_lock); | 83 | spin_unlock(&i8259A_lock); |
63 | 84 | ||
64 | return irq; | 85 | return likely(irq >= 0) ? irq + I8259A_IRQ_BASE : irq; |
65 | } | 86 | } |
66 | 87 | ||
67 | #endif /* _ASM_I8259_H */ | 88 | #endif /* _ASM_I8259_H */ |
diff --git a/include/asm-mips/pgtable-32.h b/include/asm-mips/pgtable-32.h index d20f2e9b28be..2fbd47eba32d 100644 --- a/include/asm-mips/pgtable-32.h +++ b/include/asm-mips/pgtable-32.h | |||
@@ -156,9 +156,9 @@ pfn_pte(unsigned long pfn, pgprot_t prot) | |||
156 | #define __pte_offset(address) \ | 156 | #define __pte_offset(address) \ |
157 | (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) | 157 | (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) |
158 | #define pte_offset(dir, address) \ | 158 | #define pte_offset(dir, address) \ |
159 | ((pte_t *) (pmd_page_vaddr(*dir)) + __pte_offset(address)) | 159 | ((pte_t *) pmd_page_vaddr(*(dir)) + __pte_offset(address)) |
160 | #define pte_offset_kernel(dir, address) \ | 160 | #define pte_offset_kernel(dir, address) \ |
161 | ((pte_t *) pmd_page_vaddr(*(dir)) + __pte_offset(address)) | 161 | ((pte_t *) pmd_page_vaddr(*(dir)) + __pte_offset(address)) |
162 | 162 | ||
163 | #define pte_offset_map(dir, address) \ | 163 | #define pte_offset_map(dir, address) \ |
164 | ((pte_t *)page_address(pmd_page(*(dir))) + __pte_offset(address)) | 164 | ((pte_t *)page_address(pmd_page(*(dir))) + __pte_offset(address)) |
diff --git a/include/asm-mips/pgtable-64.h b/include/asm-mips/pgtable-64.h index b9b1e86493ee..a5b18710b6a4 100644 --- a/include/asm-mips/pgtable-64.h +++ b/include/asm-mips/pgtable-64.h | |||
@@ -212,9 +212,9 @@ static inline pmd_t *pmd_offset(pud_t * pud, unsigned long address) | |||
212 | #define __pte_offset(address) \ | 212 | #define __pte_offset(address) \ |
213 | (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) | 213 | (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) |
214 | #define pte_offset(dir, address) \ | 214 | #define pte_offset(dir, address) \ |
215 | ((pte_t *) (pmd_page_vaddr(*dir)) + __pte_offset(address)) | 215 | ((pte_t *) pmd_page_vaddr(*(dir)) + __pte_offset(address)) |
216 | #define pte_offset_kernel(dir, address) \ | 216 | #define pte_offset_kernel(dir, address) \ |
217 | ((pte_t *) pmd_page_vaddr(*(dir)) + __pte_offset(address)) | 217 | ((pte_t *) pmd_page_vaddr(*(dir)) + __pte_offset(address)) |
218 | #define pte_offset_map(dir, address) \ | 218 | #define pte_offset_map(dir, address) \ |
219 | ((pte_t *)page_address(pmd_page(*(dir))) + __pte_offset(address)) | 219 | ((pte_t *)page_address(pmd_page(*(dir))) + __pte_offset(address)) |
220 | #define pte_offset_map_nested(dir, address) \ | 220 | #define pte_offset_map_nested(dir, address) \ |
diff --git a/include/asm-mips/setup.h b/include/asm-mips/setup.h index 737fa4a6912e..70009a902639 100644 --- a/include/asm-mips/setup.h +++ b/include/asm-mips/setup.h | |||
@@ -1,8 +1,6 @@ | |||
1 | #ifdef __KERNEL__ | ||
2 | #ifndef _MIPS_SETUP_H | 1 | #ifndef _MIPS_SETUP_H |
3 | #define _MIPS_SETUP_H | 2 | #define _MIPS_SETUP_H |
4 | 3 | ||
5 | #define COMMAND_LINE_SIZE 256 | 4 | #define COMMAND_LINE_SIZE 256 |
6 | 5 | ||
7 | #endif /* __SETUP_H */ | 6 | #endif /* __SETUP_H */ |
8 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-mips/unistd.h b/include/asm-mips/unistd.h index ec56aa52f669..696cff39a1d3 100644 --- a/include/asm-mips/unistd.h +++ b/include/asm-mips/unistd.h | |||
@@ -933,268 +933,6 @@ | |||
933 | 933 | ||
934 | #ifndef __ASSEMBLY__ | 934 | #ifndef __ASSEMBLY__ |
935 | 935 | ||
936 | /* XXX - _foo needs to be __foo, while __NR_bar could be _NR_bar. */ | ||
937 | #define _syscall0(type,name) \ | ||
938 | type name(void) \ | ||
939 | { \ | ||
940 | register unsigned long __a3 asm("$7"); \ | ||
941 | unsigned long __v0; \ | ||
942 | \ | ||
943 | __asm__ volatile ( \ | ||
944 | ".set\tnoreorder\n\t" \ | ||
945 | "li\t$2, %2\t\t\t# " #name "\n\t" \ | ||
946 | "syscall\n\t" \ | ||
947 | "move\t%0, $2\n\t" \ | ||
948 | ".set\treorder" \ | ||
949 | : "=&r" (__v0), "=r" (__a3) \ | ||
950 | : "i" (__NR_##name) \ | ||
951 | : "$2", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", \ | ||
952 | "memory"); \ | ||
953 | \ | ||
954 | if (__a3 == 0) \ | ||
955 | return (type) __v0; \ | ||
956 | errno = __v0; \ | ||
957 | return (type) -1; \ | ||
958 | } | ||
959 | |||
960 | /* | ||
961 | * DANGER: This macro isn't usable for the pipe(2) call | ||
962 | * which has a unusual return convention. | ||
963 | */ | ||
964 | #define _syscall1(type,name,atype,a) \ | ||
965 | type name(atype a) \ | ||
966 | { \ | ||
967 | register unsigned long __a0 asm("$4") = (unsigned long) a; \ | ||
968 | register unsigned long __a3 asm("$7"); \ | ||
969 | unsigned long __v0; \ | ||
970 | \ | ||
971 | __asm__ volatile ( \ | ||
972 | ".set\tnoreorder\n\t" \ | ||
973 | "li\t$2, %3\t\t\t# " #name "\n\t" \ | ||
974 | "syscall\n\t" \ | ||
975 | "move\t%0, $2\n\t" \ | ||
976 | ".set\treorder" \ | ||
977 | : "=&r" (__v0), "=r" (__a3) \ | ||
978 | : "r" (__a0), "i" (__NR_##name) \ | ||
979 | : "$2", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", \ | ||
980 | "memory"); \ | ||
981 | \ | ||
982 | if (__a3 == 0) \ | ||
983 | return (type) __v0; \ | ||
984 | errno = __v0; \ | ||
985 | return (type) -1; \ | ||
986 | } | ||
987 | |||
988 | #define _syscall2(type,name,atype,a,btype,b) \ | ||
989 | type name(atype a, btype b) \ | ||
990 | { \ | ||
991 | register unsigned long __a0 asm("$4") = (unsigned long) a; \ | ||
992 | register unsigned long __a1 asm("$5") = (unsigned long) b; \ | ||
993 | register unsigned long __a3 asm("$7"); \ | ||
994 | unsigned long __v0; \ | ||
995 | \ | ||
996 | __asm__ volatile ( \ | ||
997 | ".set\tnoreorder\n\t" \ | ||
998 | "li\t$2, %4\t\t\t# " #name "\n\t" \ | ||
999 | "syscall\n\t" \ | ||
1000 | "move\t%0, $2\n\t" \ | ||
1001 | ".set\treorder" \ | ||
1002 | : "=&r" (__v0), "=r" (__a3) \ | ||
1003 | : "r" (__a0), "r" (__a1), "i" (__NR_##name) \ | ||
1004 | : "$2", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", \ | ||
1005 | "memory"); \ | ||
1006 | \ | ||
1007 | if (__a3 == 0) \ | ||
1008 | return (type) __v0; \ | ||
1009 | errno = __v0; \ | ||
1010 | return (type) -1; \ | ||
1011 | } | ||
1012 | |||
1013 | #define _syscall3(type,name,atype,a,btype,b,ctype,c) \ | ||
1014 | type name(atype a, btype b, ctype c) \ | ||
1015 | { \ | ||
1016 | register unsigned long __a0 asm("$4") = (unsigned long) a; \ | ||
1017 | register unsigned long __a1 asm("$5") = (unsigned long) b; \ | ||
1018 | register unsigned long __a2 asm("$6") = (unsigned long) c; \ | ||
1019 | register unsigned long __a3 asm("$7"); \ | ||
1020 | unsigned long __v0; \ | ||
1021 | \ | ||
1022 | __asm__ volatile ( \ | ||
1023 | ".set\tnoreorder\n\t" \ | ||
1024 | "li\t$2, %5\t\t\t# " #name "\n\t" \ | ||
1025 | "syscall\n\t" \ | ||
1026 | "move\t%0, $2\n\t" \ | ||
1027 | ".set\treorder" \ | ||
1028 | : "=&r" (__v0), "=r" (__a3) \ | ||
1029 | : "r" (__a0), "r" (__a1), "r" (__a2), "i" (__NR_##name) \ | ||
1030 | : "$2", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", \ | ||
1031 | "memory"); \ | ||
1032 | \ | ||
1033 | if (__a3 == 0) \ | ||
1034 | return (type) __v0; \ | ||
1035 | errno = __v0; \ | ||
1036 | return (type) -1; \ | ||
1037 | } | ||
1038 | |||
1039 | #define _syscall4(type,name,atype,a,btype,b,ctype,c,dtype,d) \ | ||
1040 | type name(atype a, btype b, ctype c, dtype d) \ | ||
1041 | { \ | ||
1042 | register unsigned long __a0 asm("$4") = (unsigned long) a; \ | ||
1043 | register unsigned long __a1 asm("$5") = (unsigned long) b; \ | ||
1044 | register unsigned long __a2 asm("$6") = (unsigned long) c; \ | ||
1045 | register unsigned long __a3 asm("$7") = (unsigned long) d; \ | ||
1046 | unsigned long __v0; \ | ||
1047 | \ | ||
1048 | __asm__ volatile ( \ | ||
1049 | ".set\tnoreorder\n\t" \ | ||
1050 | "li\t$2, %5\t\t\t# " #name "\n\t" \ | ||
1051 | "syscall\n\t" \ | ||
1052 | "move\t%0, $2\n\t" \ | ||
1053 | ".set\treorder" \ | ||
1054 | : "=&r" (__v0), "+r" (__a3) \ | ||
1055 | : "r" (__a0), "r" (__a1), "r" (__a2), "i" (__NR_##name) \ | ||
1056 | : "$2", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", \ | ||
1057 | "memory"); \ | ||
1058 | \ | ||
1059 | if (__a3 == 0) \ | ||
1060 | return (type) __v0; \ | ||
1061 | errno = __v0; \ | ||
1062 | return (type) -1; \ | ||
1063 | } | ||
1064 | |||
1065 | #if (_MIPS_SIM == _MIPS_SIM_ABI32) | ||
1066 | |||
1067 | /* | ||
1068 | * Using those means your brain needs more than an oil change ;-) | ||
1069 | */ | ||
1070 | |||
1071 | #define _syscall5(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e) \ | ||
1072 | type name(atype a, btype b, ctype c, dtype d, etype e) \ | ||
1073 | { \ | ||
1074 | register unsigned long __a0 asm("$4") = (unsigned long) a; \ | ||
1075 | register unsigned long __a1 asm("$5") = (unsigned long) b; \ | ||
1076 | register unsigned long __a2 asm("$6") = (unsigned long) c; \ | ||
1077 | register unsigned long __a3 asm("$7") = (unsigned long) d; \ | ||
1078 | unsigned long __v0; \ | ||
1079 | \ | ||
1080 | __asm__ volatile ( \ | ||
1081 | ".set\tnoreorder\n\t" \ | ||
1082 | "lw\t$2, %6\n\t" \ | ||
1083 | "subu\t$29, 32\n\t" \ | ||
1084 | "sw\t$2, 16($29)\n\t" \ | ||
1085 | "li\t$2, %5\t\t\t# " #name "\n\t" \ | ||
1086 | "syscall\n\t" \ | ||
1087 | "move\t%0, $2\n\t" \ | ||
1088 | "addiu\t$29, 32\n\t" \ | ||
1089 | ".set\treorder" \ | ||
1090 | : "=&r" (__v0), "+r" (__a3) \ | ||
1091 | : "r" (__a0), "r" (__a1), "r" (__a2), "i" (__NR_##name), \ | ||
1092 | "m" ((unsigned long)e) \ | ||
1093 | : "$2", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", \ | ||
1094 | "memory"); \ | ||
1095 | \ | ||
1096 | if (__a3 == 0) \ | ||
1097 | return (type) __v0; \ | ||
1098 | errno = __v0; \ | ||
1099 | return (type) -1; \ | ||
1100 | } | ||
1101 | |||
1102 | #define _syscall6(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e,ftype,f) \ | ||
1103 | type name(atype a, btype b, ctype c, dtype d, etype e, ftype f) \ | ||
1104 | { \ | ||
1105 | register unsigned long __a0 asm("$4") = (unsigned long) a; \ | ||
1106 | register unsigned long __a1 asm("$5") = (unsigned long) b; \ | ||
1107 | register unsigned long __a2 asm("$6") = (unsigned long) c; \ | ||
1108 | register unsigned long __a3 asm("$7") = (unsigned long) d; \ | ||
1109 | unsigned long __v0; \ | ||
1110 | \ | ||
1111 | __asm__ volatile ( \ | ||
1112 | ".set\tnoreorder\n\t" \ | ||
1113 | "lw\t$2, %6\n\t" \ | ||
1114 | "lw\t$8, %7\n\t" \ | ||
1115 | "subu\t$29, 32\n\t" \ | ||
1116 | "sw\t$2, 16($29)\n\t" \ | ||
1117 | "sw\t$8, 20($29)\n\t" \ | ||
1118 | "li\t$2, %5\t\t\t# " #name "\n\t" \ | ||
1119 | "syscall\n\t" \ | ||
1120 | "move\t%0, $2\n\t" \ | ||
1121 | "addiu\t$29, 32\n\t" \ | ||
1122 | ".set\treorder" \ | ||
1123 | : "=&r" (__v0), "+r" (__a3) \ | ||
1124 | : "r" (__a0), "r" (__a1), "r" (__a2), "i" (__NR_##name), \ | ||
1125 | "m" ((unsigned long)e), "m" ((unsigned long)f) \ | ||
1126 | : "$2", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", \ | ||
1127 | "memory"); \ | ||
1128 | \ | ||
1129 | if (__a3 == 0) \ | ||
1130 | return (type) __v0; \ | ||
1131 | errno = __v0; \ | ||
1132 | return (type) -1; \ | ||
1133 | } | ||
1134 | |||
1135 | #endif /* (_MIPS_SIM == _MIPS_SIM_ABI32) */ | ||
1136 | |||
1137 | #if (_MIPS_SIM == _MIPS_SIM_NABI32) || (_MIPS_SIM == _MIPS_SIM_ABI64) | ||
1138 | |||
1139 | #define _syscall5(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e) \ | ||
1140 | type name (atype a,btype b,ctype c,dtype d,etype e) \ | ||
1141 | { \ | ||
1142 | register unsigned long __a0 asm("$4") = (unsigned long) a; \ | ||
1143 | register unsigned long __a1 asm("$5") = (unsigned long) b; \ | ||
1144 | register unsigned long __a2 asm("$6") = (unsigned long) c; \ | ||
1145 | register unsigned long __a3 asm("$7") = (unsigned long) d; \ | ||
1146 | register unsigned long __a4 asm("$8") = (unsigned long) e; \ | ||
1147 | unsigned long __v0; \ | ||
1148 | \ | ||
1149 | __asm__ volatile ( \ | ||
1150 | ".set\tnoreorder\n\t" \ | ||
1151 | "li\t$2, %6\t\t\t# " #name "\n\t" \ | ||
1152 | "syscall\n\t" \ | ||
1153 | "move\t%0, $2\n\t" \ | ||
1154 | ".set\treorder" \ | ||
1155 | : "=&r" (__v0), "+r" (__a3) \ | ||
1156 | : "r" (__a0), "r" (__a1), "r" (__a2), "r" (__a4), "i" (__NR_##name) \ | ||
1157 | : "$2", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", \ | ||
1158 | "memory"); \ | ||
1159 | \ | ||
1160 | if (__a3 == 0) \ | ||
1161 | return (type) __v0; \ | ||
1162 | errno = __v0; \ | ||
1163 | return (type) -1; \ | ||
1164 | } | ||
1165 | |||
1166 | #define _syscall6(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e,ftype,f) \ | ||
1167 | type name (atype a,btype b,ctype c,dtype d,etype e,ftype f) \ | ||
1168 | { \ | ||
1169 | register unsigned long __a0 asm("$4") = (unsigned long) a; \ | ||
1170 | register unsigned long __a1 asm("$5") = (unsigned long) b; \ | ||
1171 | register unsigned long __a2 asm("$6") = (unsigned long) c; \ | ||
1172 | register unsigned long __a3 asm("$7") = (unsigned long) d; \ | ||
1173 | register unsigned long __a4 asm("$8") = (unsigned long) e; \ | ||
1174 | register unsigned long __a5 asm("$9") = (unsigned long) f; \ | ||
1175 | unsigned long __v0; \ | ||
1176 | \ | ||
1177 | __asm__ volatile ( \ | ||
1178 | ".set\tnoreorder\n\t" \ | ||
1179 | "li\t$2, %7\t\t\t# " #name "\n\t" \ | ||
1180 | "syscall\n\t" \ | ||
1181 | "move\t%0, $2\n\t" \ | ||
1182 | ".set\treorder" \ | ||
1183 | : "=&r" (__v0), "+r" (__a3) \ | ||
1184 | : "r" (__a0), "r" (__a1), "r" (__a2), "r" (__a4), "r" (__a5), \ | ||
1185 | "i" (__NR_##name) \ | ||
1186 | : "$2", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", \ | ||
1187 | "memory"); \ | ||
1188 | \ | ||
1189 | if (__a3 == 0) \ | ||
1190 | return (type) __v0; \ | ||
1191 | errno = __v0; \ | ||
1192 | return (type) -1; \ | ||
1193 | } | ||
1194 | |||
1195 | #endif /* (_MIPS_SIM == _MIPS_SIM_NABI32) || (_MIPS_SIM == _MIPS_SIM_ABI64) */ | ||
1196 | |||
1197 | |||
1198 | #define __ARCH_OMIT_COMPAT_SYS_GETDENTS64 | 936 | #define __ARCH_OMIT_COMPAT_SYS_GETDENTS64 |
1199 | #define __ARCH_WANT_IPC_PARSE_VERSION | 937 | #define __ARCH_WANT_IPC_PARSE_VERSION |
1200 | #define __ARCH_WANT_OLD_READDIR | 938 | #define __ARCH_WANT_OLD_READDIR |
diff --git a/include/asm-parisc/dma-mapping.h b/include/asm-parisc/dma-mapping.h index 1e387e1dad30..66f0b408c669 100644 --- a/include/asm-parisc/dma-mapping.h +++ b/include/asm-parisc/dma-mapping.h | |||
@@ -191,13 +191,13 @@ dma_get_cache_alignment(void) | |||
191 | } | 191 | } |
192 | 192 | ||
193 | static inline int | 193 | static inline int |
194 | dma_is_consistent(dma_addr_t dma_addr) | 194 | dma_is_consistent(struct device *dev, dma_addr_t dma_addr) |
195 | { | 195 | { |
196 | return (hppa_dma_ops->dma_sync_single_for_cpu == NULL); | 196 | return (hppa_dma_ops->dma_sync_single_for_cpu == NULL); |
197 | } | 197 | } |
198 | 198 | ||
199 | static inline void | 199 | static inline void |
200 | dma_cache_sync(void *vaddr, size_t size, | 200 | dma_cache_sync(struct device *dev, void *vaddr, size_t size, |
201 | enum dma_data_direction direction) | 201 | enum dma_data_direction direction) |
202 | { | 202 | { |
203 | if(hppa_dma_ops->dma_sync_single_for_cpu) | 203 | if(hppa_dma_ops->dma_sync_single_for_cpu) |
diff --git a/include/asm-parisc/futex.h b/include/asm-parisc/futex.h index d84bbb283fd1..dbee6e60aa81 100644 --- a/include/asm-parisc/futex.h +++ b/include/asm-parisc/futex.h | |||
@@ -21,7 +21,7 @@ futex_atomic_op_inuser (int encoded_op, int __user *uaddr) | |||
21 | if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int))) | 21 | if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int))) |
22 | return -EFAULT; | 22 | return -EFAULT; |
23 | 23 | ||
24 | inc_preempt_count(); | 24 | pagefault_disable(); |
25 | 25 | ||
26 | switch (op) { | 26 | switch (op) { |
27 | case FUTEX_OP_SET: | 27 | case FUTEX_OP_SET: |
@@ -33,7 +33,7 @@ futex_atomic_op_inuser (int encoded_op, int __user *uaddr) | |||
33 | ret = -ENOSYS; | 33 | ret = -ENOSYS; |
34 | } | 34 | } |
35 | 35 | ||
36 | dec_preempt_count(); | 36 | pagefault_enable(); |
37 | 37 | ||
38 | if (!ret) { | 38 | if (!ret) { |
39 | switch (cmp) { | 39 | switch (cmp) { |
diff --git a/include/asm-powerpc/dma-mapping.h b/include/asm-powerpc/dma-mapping.h index 7e38b5fddada..7c7de87bd8ae 100644 --- a/include/asm-powerpc/dma-mapping.h +++ b/include/asm-powerpc/dma-mapping.h | |||
@@ -342,9 +342,9 @@ static inline int dma_mapping_error(dma_addr_t dma_addr) | |||
342 | #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) | 342 | #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) |
343 | #define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) | 343 | #define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) |
344 | #ifdef CONFIG_NOT_COHERENT_CACHE | 344 | #ifdef CONFIG_NOT_COHERENT_CACHE |
345 | #define dma_is_consistent(d) (0) | 345 | #define dma_is_consistent(d, h) (0) |
346 | #else | 346 | #else |
347 | #define dma_is_consistent(d) (1) | 347 | #define dma_is_consistent(d, h) (1) |
348 | #endif | 348 | #endif |
349 | 349 | ||
350 | static inline int dma_get_cache_alignment(void) | 350 | static inline int dma_get_cache_alignment(void) |
@@ -378,7 +378,7 @@ static inline void dma_sync_single_range_for_device(struct device *dev, | |||
378 | dma_sync_single_for_device(dev, dma_handle, offset + size, direction); | 378 | dma_sync_single_for_device(dev, dma_handle, offset + size, direction); |
379 | } | 379 | } |
380 | 380 | ||
381 | static inline void dma_cache_sync(void *vaddr, size_t size, | 381 | static inline void dma_cache_sync(struct device *dev, void *vaddr, size_t size, |
382 | enum dma_data_direction direction) | 382 | enum dma_data_direction direction) |
383 | { | 383 | { |
384 | BUG_ON(direction == DMA_NONE); | 384 | BUG_ON(direction == DMA_NONE); |
diff --git a/include/asm-powerpc/elf.h b/include/asm-powerpc/elf.h index b5436642a109..d36426c01b6b 100644 --- a/include/asm-powerpc/elf.h +++ b/include/asm-powerpc/elf.h | |||
@@ -124,12 +124,10 @@ typedef elf_greg_t32 elf_gregset_t32[ELF_NGREG]; | |||
124 | # define ELF_DATA ELFDATA2MSB | 124 | # define ELF_DATA ELFDATA2MSB |
125 | typedef elf_greg_t64 elf_greg_t; | 125 | typedef elf_greg_t64 elf_greg_t; |
126 | typedef elf_gregset_t64 elf_gregset_t; | 126 | typedef elf_gregset_t64 elf_gregset_t; |
127 | # define elf_addr_t unsigned long | ||
128 | #else | 127 | #else |
129 | /* Assumption: ELF_ARCH == EM_PPC and ELF_CLASS == ELFCLASS32 */ | 128 | /* Assumption: ELF_ARCH == EM_PPC and ELF_CLASS == ELFCLASS32 */ |
130 | typedef elf_greg_t32 elf_greg_t; | 129 | typedef elf_greg_t32 elf_greg_t; |
131 | typedef elf_gregset_t32 elf_gregset_t; | 130 | typedef elf_gregset_t32 elf_gregset_t; |
132 | # define elf_addr_t __u32 | ||
133 | #endif /* ELF_ARCH */ | 131 | #endif /* ELF_ARCH */ |
134 | 132 | ||
135 | /* Floating point registers */ | 133 | /* Floating point registers */ |
diff --git a/include/asm-powerpc/futex.h b/include/asm-powerpc/futex.h index 936422e54891..3f3673fd3ff3 100644 --- a/include/asm-powerpc/futex.h +++ b/include/asm-powerpc/futex.h | |||
@@ -43,7 +43,7 @@ static inline int futex_atomic_op_inuser (int encoded_op, int __user *uaddr) | |||
43 | if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int))) | 43 | if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int))) |
44 | return -EFAULT; | 44 | return -EFAULT; |
45 | 45 | ||
46 | inc_preempt_count(); | 46 | pagefault_disable(); |
47 | 47 | ||
48 | switch (op) { | 48 | switch (op) { |
49 | case FUTEX_OP_SET: | 49 | case FUTEX_OP_SET: |
@@ -65,7 +65,7 @@ static inline int futex_atomic_op_inuser (int encoded_op, int __user *uaddr) | |||
65 | ret = -ENOSYS; | 65 | ret = -ENOSYS; |
66 | } | 66 | } |
67 | 67 | ||
68 | dec_preempt_count(); | 68 | pagefault_enable(); |
69 | 69 | ||
70 | if (!ret) { | 70 | if (!ret) { |
71 | switch (cmp) { | 71 | switch (cmp) { |
diff --git a/include/asm-powerpc/pgalloc.h b/include/asm-powerpc/pgalloc.h index ae63db7b3e7d..b0830db68f8a 100644 --- a/include/asm-powerpc/pgalloc.h +++ b/include/asm-powerpc/pgalloc.h | |||
@@ -11,7 +11,7 @@ | |||
11 | #include <linux/cpumask.h> | 11 | #include <linux/cpumask.h> |
12 | #include <linux/percpu.h> | 12 | #include <linux/percpu.h> |
13 | 13 | ||
14 | extern kmem_cache_t *pgtable_cache[]; | 14 | extern struct kmem_cache *pgtable_cache[]; |
15 | 15 | ||
16 | #ifdef CONFIG_PPC_64K_PAGES | 16 | #ifdef CONFIG_PPC_64K_PAGES |
17 | #define PTE_CACHE_NUM 0 | 17 | #define PTE_CACHE_NUM 0 |
diff --git a/include/asm-powerpc/setup.h b/include/asm-powerpc/setup.h index 3d9740aae018..817fac0a0714 100644 --- a/include/asm-powerpc/setup.h +++ b/include/asm-powerpc/setup.h | |||
@@ -1,9 +1,6 @@ | |||
1 | #ifndef _ASM_POWERPC_SETUP_H | 1 | #ifndef _ASM_POWERPC_SETUP_H |
2 | #define _ASM_POWERPC_SETUP_H | 2 | #define _ASM_POWERPC_SETUP_H |
3 | 3 | ||
4 | #ifdef __KERNEL__ | ||
5 | |||
6 | #define COMMAND_LINE_SIZE 512 | 4 | #define COMMAND_LINE_SIZE 512 |
7 | 5 | ||
8 | #endif /* __KERNEL__ */ | ||
9 | #endif /* _ASM_POWERPC_SETUP_H */ | 6 | #endif /* _ASM_POWERPC_SETUP_H */ |
diff --git a/include/asm-powerpc/unistd.h b/include/asm-powerpc/unistd.h index 04b6c17cc59b..0ae954e3d258 100644 --- a/include/asm-powerpc/unistd.h +++ b/include/asm-powerpc/unistd.h | |||
@@ -334,115 +334,6 @@ | |||
334 | 334 | ||
335 | #ifndef __ASSEMBLY__ | 335 | #ifndef __ASSEMBLY__ |
336 | 336 | ||
337 | /* On powerpc a system call basically clobbers the same registers like a | ||
338 | * function call, with the exception of LR (which is needed for the | ||
339 | * "sc; bnslr" sequence) and CR (where only CR0.SO is clobbered to signal | ||
340 | * an error return status). | ||
341 | */ | ||
342 | |||
343 | #define __syscall_nr(nr, type, name, args...) \ | ||
344 | unsigned long __sc_ret, __sc_err; \ | ||
345 | { \ | ||
346 | register unsigned long __sc_0 __asm__ ("r0"); \ | ||
347 | register unsigned long __sc_3 __asm__ ("r3"); \ | ||
348 | register unsigned long __sc_4 __asm__ ("r4"); \ | ||
349 | register unsigned long __sc_5 __asm__ ("r5"); \ | ||
350 | register unsigned long __sc_6 __asm__ ("r6"); \ | ||
351 | register unsigned long __sc_7 __asm__ ("r7"); \ | ||
352 | register unsigned long __sc_8 __asm__ ("r8"); \ | ||
353 | \ | ||
354 | __sc_loadargs_##nr(name, args); \ | ||
355 | __asm__ __volatile__ \ | ||
356 | ("sc \n\t" \ | ||
357 | "mfcr %0 " \ | ||
358 | : "=&r" (__sc_0), \ | ||
359 | "=&r" (__sc_3), "=&r" (__sc_4), \ | ||
360 | "=&r" (__sc_5), "=&r" (__sc_6), \ | ||
361 | "=&r" (__sc_7), "=&r" (__sc_8) \ | ||
362 | : __sc_asm_input_##nr \ | ||
363 | : "cr0", "ctr", "memory", \ | ||
364 | "r9", "r10","r11", "r12"); \ | ||
365 | __sc_ret = __sc_3; \ | ||
366 | __sc_err = __sc_0; \ | ||
367 | } \ | ||
368 | if (__sc_err & 0x10000000) \ | ||
369 | { \ | ||
370 | errno = __sc_ret; \ | ||
371 | __sc_ret = -1; \ | ||
372 | } \ | ||
373 | return (type) __sc_ret | ||
374 | |||
375 | #define __sc_loadargs_0(name, dummy...) \ | ||
376 | __sc_0 = __NR_##name | ||
377 | #define __sc_loadargs_1(name, arg1) \ | ||
378 | __sc_loadargs_0(name); \ | ||
379 | __sc_3 = (unsigned long) (arg1) | ||
380 | #define __sc_loadargs_2(name, arg1, arg2) \ | ||
381 | __sc_loadargs_1(name, arg1); \ | ||
382 | __sc_4 = (unsigned long) (arg2) | ||
383 | #define __sc_loadargs_3(name, arg1, arg2, arg3) \ | ||
384 | __sc_loadargs_2(name, arg1, arg2); \ | ||
385 | __sc_5 = (unsigned long) (arg3) | ||
386 | #define __sc_loadargs_4(name, arg1, arg2, arg3, arg4) \ | ||
387 | __sc_loadargs_3(name, arg1, arg2, arg3); \ | ||
388 | __sc_6 = (unsigned long) (arg4) | ||
389 | #define __sc_loadargs_5(name, arg1, arg2, arg3, arg4, arg5) \ | ||
390 | __sc_loadargs_4(name, arg1, arg2, arg3, arg4); \ | ||
391 | __sc_7 = (unsigned long) (arg5) | ||
392 | #define __sc_loadargs_6(name, arg1, arg2, arg3, arg4, arg5, arg6) \ | ||
393 | __sc_loadargs_5(name, arg1, arg2, arg3, arg4, arg5); \ | ||
394 | __sc_8 = (unsigned long) (arg6) | ||
395 | |||
396 | #define __sc_asm_input_0 "0" (__sc_0) | ||
397 | #define __sc_asm_input_1 __sc_asm_input_0, "1" (__sc_3) | ||
398 | #define __sc_asm_input_2 __sc_asm_input_1, "2" (__sc_4) | ||
399 | #define __sc_asm_input_3 __sc_asm_input_2, "3" (__sc_5) | ||
400 | #define __sc_asm_input_4 __sc_asm_input_3, "4" (__sc_6) | ||
401 | #define __sc_asm_input_5 __sc_asm_input_4, "5" (__sc_7) | ||
402 | #define __sc_asm_input_6 __sc_asm_input_5, "6" (__sc_8) | ||
403 | |||
404 | #define _syscall0(type,name) \ | ||
405 | type name(void) \ | ||
406 | { \ | ||
407 | __syscall_nr(0, type, name); \ | ||
408 | } | ||
409 | |||
410 | #define _syscall1(type,name,type1,arg1) \ | ||
411 | type name(type1 arg1) \ | ||
412 | { \ | ||
413 | __syscall_nr(1, type, name, arg1); \ | ||
414 | } | ||
415 | |||
416 | #define _syscall2(type,name,type1,arg1,type2,arg2) \ | ||
417 | type name(type1 arg1, type2 arg2) \ | ||
418 | { \ | ||
419 | __syscall_nr(2, type, name, arg1, arg2); \ | ||
420 | } | ||
421 | |||
422 | #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ | ||
423 | type name(type1 arg1, type2 arg2, type3 arg3) \ | ||
424 | { \ | ||
425 | __syscall_nr(3, type, name, arg1, arg2, arg3); \ | ||
426 | } | ||
427 | |||
428 | #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \ | ||
429 | type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ | ||
430 | { \ | ||
431 | __syscall_nr(4, type, name, arg1, arg2, arg3, arg4); \ | ||
432 | } | ||
433 | |||
434 | #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \ | ||
435 | type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) \ | ||
436 | { \ | ||
437 | __syscall_nr(5, type, name, arg1, arg2, arg3, arg4, arg5); \ | ||
438 | } | ||
439 | #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5,type6,arg6) \ | ||
440 | type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6) \ | ||
441 | { \ | ||
442 | __syscall_nr(6, type, name, arg1, arg2, arg3, arg4, arg5, arg6); \ | ||
443 | } | ||
444 | |||
445 | |||
446 | #include <linux/types.h> | 337 | #include <linux/types.h> |
447 | #include <linux/compiler.h> | 338 | #include <linux/compiler.h> |
448 | #include <linux/linkage.h> | 339 | #include <linux/linkage.h> |
diff --git a/include/asm-ppc/highmem.h b/include/asm-ppc/highmem.h index 1d2c4ef81c22..f7b21ee302b4 100644 --- a/include/asm-ppc/highmem.h +++ b/include/asm-ppc/highmem.h | |||
@@ -79,7 +79,7 @@ static inline void *kmap_atomic(struct page *page, enum km_type type) | |||
79 | unsigned long vaddr; | 79 | unsigned long vaddr; |
80 | 80 | ||
81 | /* even !CONFIG_PREEMPT needs this, for in_atomic in do_page_fault */ | 81 | /* even !CONFIG_PREEMPT needs this, for in_atomic in do_page_fault */ |
82 | inc_preempt_count(); | 82 | pagefault_disable(); |
83 | if (!PageHighMem(page)) | 83 | if (!PageHighMem(page)) |
84 | return page_address(page); | 84 | return page_address(page); |
85 | 85 | ||
@@ -101,8 +101,7 @@ static inline void kunmap_atomic(void *kvaddr, enum km_type type) | |||
101 | unsigned int idx = type + KM_TYPE_NR*smp_processor_id(); | 101 | unsigned int idx = type + KM_TYPE_NR*smp_processor_id(); |
102 | 102 | ||
103 | if (vaddr < KMAP_FIX_BEGIN) { // FIXME | 103 | if (vaddr < KMAP_FIX_BEGIN) { // FIXME |
104 | dec_preempt_count(); | 104 | pagefault_enable(); |
105 | preempt_check_resched(); | ||
106 | return; | 105 | return; |
107 | } | 106 | } |
108 | 107 | ||
@@ -115,8 +114,7 @@ static inline void kunmap_atomic(void *kvaddr, enum km_type type) | |||
115 | pte_clear(&init_mm, vaddr, kmap_pte+idx); | 114 | pte_clear(&init_mm, vaddr, kmap_pte+idx); |
116 | flush_tlb_page(NULL, vaddr); | 115 | flush_tlb_page(NULL, vaddr); |
117 | #endif | 116 | #endif |
118 | dec_preempt_count(); | 117 | pagefault_enable(); |
119 | preempt_check_resched(); | ||
120 | } | 118 | } |
121 | 119 | ||
122 | static inline struct page *kmap_atomic_to_page(void *ptr) | 120 | static inline struct page *kmap_atomic_to_page(void *ptr) |
diff --git a/include/asm-s390/setup.h b/include/asm-s390/setup.h index 7664bacdd832..9574fe80a046 100644 --- a/include/asm-s390/setup.h +++ b/include/asm-s390/setup.h | |||
@@ -8,12 +8,13 @@ | |||
8 | #ifndef _ASM_S390_SETUP_H | 8 | #ifndef _ASM_S390_SETUP_H |
9 | #define _ASM_S390_SETUP_H | 9 | #define _ASM_S390_SETUP_H |
10 | 10 | ||
11 | #define COMMAND_LINE_SIZE 896 | ||
12 | |||
11 | #ifdef __KERNEL__ | 13 | #ifdef __KERNEL__ |
12 | 14 | ||
13 | #include <asm/types.h> | 15 | #include <asm/types.h> |
14 | 16 | ||
15 | #define PARMAREA 0x10400 | 17 | #define PARMAREA 0x10400 |
16 | #define COMMAND_LINE_SIZE 896 | ||
17 | #define MEMORY_CHUNKS 16 /* max 0x7fff */ | 18 | #define MEMORY_CHUNKS 16 /* max 0x7fff */ |
18 | #define IPL_PARMBLOCK_ORIGIN 0x2000 | 19 | #define IPL_PARMBLOCK_ORIGIN 0x2000 |
19 | 20 | ||
diff --git a/include/asm-s390/unistd.h b/include/asm-s390/unistd.h index 71d3c21b84f0..fb6fef97d739 100644 --- a/include/asm-s390/unistd.h +++ b/include/asm-s390/unistd.h | |||
@@ -345,160 +345,6 @@ | |||
345 | 345 | ||
346 | #ifdef __KERNEL__ | 346 | #ifdef __KERNEL__ |
347 | 347 | ||
348 | #include <linux/err.h> | ||
349 | |||
350 | #define __syscall_return(type, res) \ | ||
351 | do { \ | ||
352 | if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \ | ||
353 | errno = -(res); \ | ||
354 | res = -1; \ | ||
355 | } \ | ||
356 | return (type) (res); \ | ||
357 | } while (0) | ||
358 | |||
359 | #define _svc_clobber "1", "cc", "memory" | ||
360 | |||
361 | #define _syscall0(type,name) \ | ||
362 | type name(void) { \ | ||
363 | register long __svcres asm("2"); \ | ||
364 | long __res; \ | ||
365 | asm volatile( \ | ||
366 | " .if %1 < 256\n" \ | ||
367 | " svc %b1\n" \ | ||
368 | " .else\n" \ | ||
369 | " la %%r1,%1\n" \ | ||
370 | " svc 0\n" \ | ||
371 | " .endif" \ | ||
372 | : "=d" (__svcres) \ | ||
373 | : "i" (__NR_##name) \ | ||
374 | : _svc_clobber); \ | ||
375 | __res = __svcres; \ | ||
376 | __syscall_return(type,__res); \ | ||
377 | } | ||
378 | |||
379 | #define _syscall1(type,name,type1,arg1) \ | ||
380 | type name(type1 arg1) { \ | ||
381 | register type1 __arg1 asm("2") = arg1; \ | ||
382 | register long __svcres asm("2"); \ | ||
383 | long __res; \ | ||
384 | asm volatile( \ | ||
385 | " .if %1 < 256\n" \ | ||
386 | " svc %b1\n" \ | ||
387 | " .else\n" \ | ||
388 | " la %%r1,%1\n" \ | ||
389 | " svc 0\n" \ | ||
390 | " .endif" \ | ||
391 | : "=d" (__svcres) \ | ||
392 | : "i" (__NR_##name), \ | ||
393 | "0" (__arg1) \ | ||
394 | : _svc_clobber); \ | ||
395 | __res = __svcres; \ | ||
396 | __syscall_return(type,__res); \ | ||
397 | } | ||
398 | |||
399 | #define _syscall2(type,name,type1,arg1,type2,arg2) \ | ||
400 | type name(type1 arg1, type2 arg2) { \ | ||
401 | register type1 __arg1 asm("2") = arg1; \ | ||
402 | register type2 __arg2 asm("3") = arg2; \ | ||
403 | register long __svcres asm("2"); \ | ||
404 | long __res; \ | ||
405 | asm volatile( \ | ||
406 | " .if %1 < 256\n" \ | ||
407 | " svc %b1\n" \ | ||
408 | " .else\n" \ | ||
409 | " la %%r1,%1\n" \ | ||
410 | " svc 0\n" \ | ||
411 | " .endif" \ | ||
412 | : "=d" (__svcres) \ | ||
413 | : "i" (__NR_##name), \ | ||
414 | "0" (__arg1), \ | ||
415 | "d" (__arg2) \ | ||
416 | : _svc_clobber ); \ | ||
417 | __res = __svcres; \ | ||
418 | __syscall_return(type,__res); \ | ||
419 | } | ||
420 | |||
421 | #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ | ||
422 | type name(type1 arg1, type2 arg2, type3 arg3) { \ | ||
423 | register type1 __arg1 asm("2") = arg1; \ | ||
424 | register type2 __arg2 asm("3") = arg2; \ | ||
425 | register type3 __arg3 asm("4") = arg3; \ | ||
426 | register long __svcres asm("2"); \ | ||
427 | long __res; \ | ||
428 | asm volatile( \ | ||
429 | " .if %1 < 256\n" \ | ||
430 | " svc %b1\n" \ | ||
431 | " .else\n" \ | ||
432 | " la %%r1,%1\n" \ | ||
433 | " svc 0\n" \ | ||
434 | " .endif" \ | ||
435 | : "=d" (__svcres) \ | ||
436 | : "i" (__NR_##name), \ | ||
437 | "0" (__arg1), \ | ||
438 | "d" (__arg2), \ | ||
439 | "d" (__arg3) \ | ||
440 | : _svc_clobber); \ | ||
441 | __res = __svcres; \ | ||
442 | __syscall_return(type,__res); \ | ||
443 | } | ||
444 | |||
445 | #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3, \ | ||
446 | type4,name4) \ | ||
447 | type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) { \ | ||
448 | register type1 __arg1 asm("2") = arg1; \ | ||
449 | register type2 __arg2 asm("3") = arg2; \ | ||
450 | register type3 __arg3 asm("4") = arg3; \ | ||
451 | register type4 __arg4 asm("5") = arg4; \ | ||
452 | register long __svcres asm("2"); \ | ||
453 | long __res; \ | ||
454 | asm volatile( \ | ||
455 | " .if %1 < 256\n" \ | ||
456 | " svc %b1\n" \ | ||
457 | " .else\n" \ | ||
458 | " la %%r1,%1\n" \ | ||
459 | " svc 0\n" \ | ||
460 | " .endif" \ | ||
461 | : "=d" (__svcres) \ | ||
462 | : "i" (__NR_##name), \ | ||
463 | "0" (__arg1), \ | ||
464 | "d" (__arg2), \ | ||
465 | "d" (__arg3), \ | ||
466 | "d" (__arg4) \ | ||
467 | : _svc_clobber); \ | ||
468 | __res = __svcres; \ | ||
469 | __syscall_return(type,__res); \ | ||
470 | } | ||
471 | |||
472 | #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3, \ | ||
473 | type4,name4,type5,name5) \ | ||
474 | type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ | ||
475 | type5 arg5) { \ | ||
476 | register type1 __arg1 asm("2") = arg1; \ | ||
477 | register type2 __arg2 asm("3") = arg2; \ | ||
478 | register type3 __arg3 asm("4") = arg3; \ | ||
479 | register type4 __arg4 asm("5") = arg4; \ | ||
480 | register type5 __arg5 asm("6") = arg5; \ | ||
481 | register long __svcres asm("2"); \ | ||
482 | long __res; \ | ||
483 | asm volatile( \ | ||
484 | " .if %1 < 256\n" \ | ||
485 | " svc %b1\n" \ | ||
486 | " .else\n" \ | ||
487 | " la %%r1,%1\n" \ | ||
488 | " svc 0\n" \ | ||
489 | " .endif" \ | ||
490 | : "=d" (__svcres) \ | ||
491 | : "i" (__NR_##name), \ | ||
492 | "0" (__arg1), \ | ||
493 | "d" (__arg2), \ | ||
494 | "d" (__arg3), \ | ||
495 | "d" (__arg4), \ | ||
496 | "d" (__arg5) \ | ||
497 | : _svc_clobber); \ | ||
498 | __res = __svcres; \ | ||
499 | __syscall_return(type,__res); \ | ||
500 | } | ||
501 | |||
502 | #define __ARCH_WANT_IPC_PARSE_VERSION | 348 | #define __ARCH_WANT_IPC_PARSE_VERSION |
503 | #define __ARCH_WANT_OLD_READDIR | 349 | #define __ARCH_WANT_OLD_READDIR |
504 | #define __ARCH_WANT_SYS_ALARM | 350 | #define __ARCH_WANT_SYS_ALARM |
diff --git a/include/asm-sh/atomic.h b/include/asm-sh/atomic.h index 8bdc1ba56f73..28305c3cbddf 100644 --- a/include/asm-sh/atomic.h +++ b/include/asm-sh/atomic.h | |||
@@ -28,11 +28,11 @@ static inline void atomic_add(int i, atomic_t *v) | |||
28 | unsigned long tmp; | 28 | unsigned long tmp; |
29 | 29 | ||
30 | __asm__ __volatile__ ( | 30 | __asm__ __volatile__ ( |
31 | "1: movli.l @%3, %0 ! atomic_add \n" | 31 | "1: movli.l @%2, %0 ! atomic_add \n" |
32 | " add %2, %0 \n" | 32 | " add %1, %0 \n" |
33 | " movco.l %0, @%3 \n" | 33 | " movco.l %0, @%2 \n" |
34 | " bf 1b \n" | 34 | " bf 1b \n" |
35 | : "=&z" (tmp), "=r" (&v->counter) | 35 | : "=&z" (tmp) |
36 | : "r" (i), "r" (&v->counter) | 36 | : "r" (i), "r" (&v->counter) |
37 | : "t"); | 37 | : "t"); |
38 | #else | 38 | #else |
@@ -50,11 +50,11 @@ static inline void atomic_sub(int i, atomic_t *v) | |||
50 | unsigned long tmp; | 50 | unsigned long tmp; |
51 | 51 | ||
52 | __asm__ __volatile__ ( | 52 | __asm__ __volatile__ ( |
53 | "1: movli.l @%3, %0 ! atomic_sub \n" | 53 | "1: movli.l @%2, %0 ! atomic_sub \n" |
54 | " sub %2, %0 \n" | 54 | " sub %1, %0 \n" |
55 | " movco.l %0, @%3 \n" | 55 | " movco.l %0, @%2 \n" |
56 | " bf 1b \n" | 56 | " bf 1b \n" |
57 | : "=&z" (tmp), "=r" (&v->counter) | 57 | : "=&z" (tmp) |
58 | : "r" (i), "r" (&v->counter) | 58 | : "r" (i), "r" (&v->counter) |
59 | : "t"); | 59 | : "t"); |
60 | #else | 60 | #else |
@@ -80,12 +80,12 @@ static inline int atomic_add_return(int i, atomic_t *v) | |||
80 | 80 | ||
81 | #ifdef CONFIG_CPU_SH4A | 81 | #ifdef CONFIG_CPU_SH4A |
82 | __asm__ __volatile__ ( | 82 | __asm__ __volatile__ ( |
83 | "1: movli.l @%3, %0 ! atomic_add_return \n" | 83 | "1: movli.l @%2, %0 ! atomic_add_return \n" |
84 | " add %2, %0 \n" | 84 | " add %1, %0 \n" |
85 | " movco.l %0, @%3 \n" | 85 | " movco.l %0, @%2 \n" |
86 | " bf 1b \n" | 86 | " bf 1b \n" |
87 | " synco \n" | 87 | " synco \n" |
88 | : "=&z" (temp), "=r" (&v->counter) | 88 | : "=&z" (temp) |
89 | : "r" (i), "r" (&v->counter) | 89 | : "r" (i), "r" (&v->counter) |
90 | : "t"); | 90 | : "t"); |
91 | #else | 91 | #else |
@@ -109,12 +109,12 @@ static inline int atomic_sub_return(int i, atomic_t *v) | |||
109 | 109 | ||
110 | #ifdef CONFIG_CPU_SH4A | 110 | #ifdef CONFIG_CPU_SH4A |
111 | __asm__ __volatile__ ( | 111 | __asm__ __volatile__ ( |
112 | "1: movli.l @%3, %0 ! atomic_sub_return \n" | 112 | "1: movli.l @%2, %0 ! atomic_sub_return \n" |
113 | " sub %2, %0 \n" | 113 | " sub %1, %0 \n" |
114 | " movco.l %0, @%3 \n" | 114 | " movco.l %0, @%2 \n" |
115 | " bf 1b \n" | 115 | " bf 1b \n" |
116 | " synco \n" | 116 | " synco \n" |
117 | : "=&z" (temp), "=r" (&v->counter) | 117 | : "=&z" (temp) |
118 | : "r" (i), "r" (&v->counter) | 118 | : "r" (i), "r" (&v->counter) |
119 | : "t"); | 119 | : "t"); |
120 | #else | 120 | #else |
@@ -186,11 +186,11 @@ static inline void atomic_clear_mask(unsigned int mask, atomic_t *v) | |||
186 | unsigned long tmp; | 186 | unsigned long tmp; |
187 | 187 | ||
188 | __asm__ __volatile__ ( | 188 | __asm__ __volatile__ ( |
189 | "1: movli.l @%3, %0 ! atomic_clear_mask \n" | 189 | "1: movli.l @%2, %0 ! atomic_clear_mask \n" |
190 | " and %2, %0 \n" | 190 | " and %1, %0 \n" |
191 | " movco.l %0, @%3 \n" | 191 | " movco.l %0, @%2 \n" |
192 | " bf 1b \n" | 192 | " bf 1b \n" |
193 | : "=&z" (tmp), "=r" (&v->counter) | 193 | : "=&z" (tmp) |
194 | : "r" (~mask), "r" (&v->counter) | 194 | : "r" (~mask), "r" (&v->counter) |
195 | : "t"); | 195 | : "t"); |
196 | #else | 196 | #else |
@@ -208,11 +208,11 @@ static inline void atomic_set_mask(unsigned int mask, atomic_t *v) | |||
208 | unsigned long tmp; | 208 | unsigned long tmp; |
209 | 209 | ||
210 | __asm__ __volatile__ ( | 210 | __asm__ __volatile__ ( |
211 | "1: movli.l @%3, %0 ! atomic_set_mask \n" | 211 | "1: movli.l @%2, %0 ! atomic_set_mask \n" |
212 | " or %2, %0 \n" | 212 | " or %1, %0 \n" |
213 | " movco.l %0, @%3 \n" | 213 | " movco.l %0, @%2 \n" |
214 | " bf 1b \n" | 214 | " bf 1b \n" |
215 | : "=&z" (tmp), "=r" (&v->counter) | 215 | : "=&z" (tmp) |
216 | : "r" (mask), "r" (&v->counter) | 216 | : "r" (mask), "r" (&v->counter) |
217 | : "t"); | 217 | : "t"); |
218 | #else | 218 | #else |
diff --git a/include/asm-sh/bugs.h b/include/asm-sh/bugs.h index beeea40f549e..795047da5e17 100644 --- a/include/asm-sh/bugs.h +++ b/include/asm-sh/bugs.h | |||
@@ -23,16 +23,20 @@ static void __init check_bugs(void) | |||
23 | cpu_data->loops_per_jiffy = loops_per_jiffy; | 23 | cpu_data->loops_per_jiffy = loops_per_jiffy; |
24 | 24 | ||
25 | switch (cpu_data->type) { | 25 | switch (cpu_data->type) { |
26 | case CPU_SH7604: | 26 | case CPU_SH7604 ... CPU_SH7619: |
27 | *p++ = '2'; | 27 | *p++ = '2'; |
28 | break; | 28 | break; |
29 | case CPU_SH7206: | ||
30 | *p++ = '2'; | ||
31 | *p++ = 'a'; | ||
32 | break; | ||
29 | case CPU_SH7705 ... CPU_SH7300: | 33 | case CPU_SH7705 ... CPU_SH7300: |
30 | *p++ = '3'; | 34 | *p++ = '3'; |
31 | break; | 35 | break; |
32 | case CPU_SH7750 ... CPU_SH4_501: | 36 | case CPU_SH7750 ... CPU_SH4_501: |
33 | *p++ = '4'; | 37 | *p++ = '4'; |
34 | break; | 38 | break; |
35 | case CPU_SH7770 ... CPU_SH7781: | 39 | case CPU_SH7770 ... CPU_SH7785: |
36 | *p++ = '4'; | 40 | *p++ = '4'; |
37 | *p++ = 'a'; | 41 | *p++ = 'a'; |
38 | break; | 42 | break; |
diff --git a/include/asm-sh/clock.h b/include/asm-sh/clock.h index fdfb75b30f0d..1df92807f8c5 100644 --- a/include/asm-sh/clock.h +++ b/include/asm-sh/clock.h | |||
@@ -4,6 +4,7 @@ | |||
4 | #include <linux/kref.h> | 4 | #include <linux/kref.h> |
5 | #include <linux/list.h> | 5 | #include <linux/list.h> |
6 | #include <linux/seq_file.h> | 6 | #include <linux/seq_file.h> |
7 | #include <linux/clk.h> | ||
7 | 8 | ||
8 | struct clk; | 9 | struct clk; |
9 | 10 | ||
@@ -18,7 +19,7 @@ struct clk_ops { | |||
18 | struct clk { | 19 | struct clk { |
19 | struct list_head node; | 20 | struct list_head node; |
20 | const char *name; | 21 | const char *name; |
21 | 22 | int id; | |
22 | struct module *owner; | 23 | struct module *owner; |
23 | 24 | ||
24 | struct clk *parent; | 25 | struct clk *parent; |
@@ -40,22 +41,13 @@ void arch_init_clk_ops(struct clk_ops **, int type); | |||
40 | int clk_init(void); | 41 | int clk_init(void); |
41 | 42 | ||
42 | int __clk_enable(struct clk *); | 43 | int __clk_enable(struct clk *); |
43 | int clk_enable(struct clk *); | ||
44 | |||
45 | void __clk_disable(struct clk *); | 44 | void __clk_disable(struct clk *); |
46 | void clk_disable(struct clk *); | ||
47 | 45 | ||
48 | int clk_set_rate(struct clk *, unsigned long rate); | ||
49 | unsigned long clk_get_rate(struct clk *); | ||
50 | void clk_recalc_rate(struct clk *); | 46 | void clk_recalc_rate(struct clk *); |
51 | 47 | ||
52 | struct clk *clk_get(const char *id); | ||
53 | void clk_put(struct clk *); | ||
54 | |||
55 | int clk_register(struct clk *); | 48 | int clk_register(struct clk *); |
56 | void clk_unregister(struct clk *); | 49 | void clk_unregister(struct clk *); |
57 | 50 | ||
58 | int show_clocks(struct seq_file *m); | 51 | int show_clocks(struct seq_file *m); |
59 | 52 | ||
60 | #endif /* __ASM_SH_CLOCK_H */ | 53 | #endif /* __ASM_SH_CLOCK_H */ |
61 | |||
diff --git a/include/asm-sh/cpu-sh2/cache.h b/include/asm-sh/cpu-sh2/cache.h index cd96402e8562..20b9796842dc 100644 --- a/include/asm-sh/cpu-sh2/cache.h +++ b/include/asm-sh/cpu-sh2/cache.h | |||
@@ -12,6 +12,7 @@ | |||
12 | 12 | ||
13 | #define L1_CACHE_SHIFT 4 | 13 | #define L1_CACHE_SHIFT 4 |
14 | 14 | ||
15 | #if defined(CONFIG_CPU_SUBTYPE_SH7604) | ||
15 | #define CCR 0xfffffe92 /* Address of Cache Control Register */ | 16 | #define CCR 0xfffffe92 /* Address of Cache Control Register */ |
16 | 17 | ||
17 | #define CCR_CACHE_CE 0x01 /* Cache enable */ | 18 | #define CCR_CACHE_CE 0x01 /* Cache enable */ |
@@ -27,5 +28,26 @@ | |||
27 | #define CCR_CACHE_ORA CCR_CACHE_TW | 28 | #define CCR_CACHE_ORA CCR_CACHE_TW |
28 | #define CCR_CACHE_WT 0x00 /* SH-2 is _always_ write-through */ | 29 | #define CCR_CACHE_WT 0x00 /* SH-2 is _always_ write-through */ |
29 | 30 | ||
31 | #elif defined(CONFIG_CPU_SUBTYPE_SH7619) | ||
32 | #define CCR1 0xffffffec | ||
33 | #define CCR CCR1 | ||
34 | |||
35 | #define CCR_CACHE_CE 0x01 /* Cache enable */ | ||
36 | #define CCR_CACHE_WT 0x06 /* CCR[bit1=1,bit2=1] */ | ||
37 | /* 0x00000000-0x7fffffff: Write-through */ | ||
38 | /* 0x80000000-0x9fffffff: Write-back */ | ||
39 | /* 0xc0000000-0xdfffffff: Write-through */ | ||
40 | #define CCR_CACHE_CB 0x00 /* CCR[bit1=0,bit2=0] */ | ||
41 | /* 0x00000000-0x7fffffff: Write-back */ | ||
42 | /* 0x80000000-0x9fffffff: Write-through */ | ||
43 | /* 0xc0000000-0xdfffffff: Write-back */ | ||
44 | #define CCR_CACHE_CF 0x08 /* Cache invalidate */ | ||
45 | |||
46 | #define CACHE_OC_ADDRESS_ARRAY 0xf0000000 | ||
47 | #define CACHE_OC_DATA_ARRAY 0xf1000000 | ||
48 | |||
49 | #define CCR_CACHE_ENABLE CCR_CACHE_CE | ||
50 | #define CCR_CACHE_INVALIDATE CCR_CACHE_CF | ||
51 | #endif | ||
30 | #endif /* __ASM_CPU_SH2_CACHE_H */ | 52 | #endif /* __ASM_CPU_SH2_CACHE_H */ |
31 | 53 | ||
diff --git a/include/asm-sh/cpu-sh2/freq.h b/include/asm-sh/cpu-sh2/freq.h new file mode 100644 index 000000000000..31de475da70b --- /dev/null +++ b/include/asm-sh/cpu-sh2/freq.h | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | * include/asm-sh/cpu-sh2/freq.h | ||
3 | * | ||
4 | * Copyright (C) 2006 Yoshinori Sato | ||
5 | * | ||
6 | * This file is subject to the terms and conditions of the GNU General Public | ||
7 | * License. See the file "COPYING" in the main directory of this archive | ||
8 | * for more details. | ||
9 | */ | ||
10 | #ifndef __ASM_CPU_SH2_FREQ_H | ||
11 | #define __ASM_CPU_SH2_FREQ_H | ||
12 | |||
13 | #if defined(CONFIG_CPU_SUBTYPE_SH7619) | ||
14 | #define FREQCR 0xf815ff80 | ||
15 | #endif | ||
16 | |||
17 | #endif /* __ASM_CPU_SH2_FREQ_H */ | ||
18 | |||
diff --git a/include/asm-sh/cpu-sh2/mmu_context.h b/include/asm-sh/cpu-sh2/mmu_context.h new file mode 100644 index 000000000000..beeb299e01ec --- /dev/null +++ b/include/asm-sh/cpu-sh2/mmu_context.h | |||
@@ -0,0 +1,16 @@ | |||
1 | /* | ||
2 | * include/asm-sh/cpu-sh2/mmu_context.h | ||
3 | * | ||
4 | * Copyright (C) 2003 Paul Mundt | ||
5 | * | ||
6 | * This file is subject to the terms and conditions of the GNU General Public | ||
7 | * License. See the file "COPYING" in the main directory of this archive | ||
8 | * for more details. | ||
9 | */ | ||
10 | #ifndef __ASM_CPU_SH2_MMU_CONTEXT_H | ||
11 | #define __ASM_CPU_SH2_MMU_CONTEXT_H | ||
12 | |||
13 | /* No MMU */ | ||
14 | |||
15 | #endif /* __ASM_CPU_SH2_MMU_CONTEXT_H */ | ||
16 | |||
diff --git a/include/asm-sh/cpu-sh2/timer.h b/include/asm-sh/cpu-sh2/timer.h new file mode 100644 index 000000000000..a39c241e8195 --- /dev/null +++ b/include/asm-sh/cpu-sh2/timer.h | |||
@@ -0,0 +1,6 @@ | |||
1 | #ifndef __ASM_CPU_SH2_TIMER_H | ||
2 | #define __ASM_CPU_SH2_TIMER_H | ||
3 | |||
4 | /* Nothing needed yet */ | ||
5 | |||
6 | #endif /* __ASM_CPU_SH2_TIMER_H */ | ||
diff --git a/include/asm-sh/cpu-sh2a/addrspace.h b/include/asm-sh/cpu-sh2a/addrspace.h new file mode 100644 index 000000000000..3d2e9aa21522 --- /dev/null +++ b/include/asm-sh/cpu-sh2a/addrspace.h | |||
@@ -0,0 +1 @@ | |||
#include <asm/cpu-sh2/addrspace.h> | |||
diff --git a/include/asm-sh/cpu-sh2a/cache.h b/include/asm-sh/cpu-sh2a/cache.h new file mode 100644 index 000000000000..3e4b9e480982 --- /dev/null +++ b/include/asm-sh/cpu-sh2a/cache.h | |||
@@ -0,0 +1,39 @@ | |||
1 | /* | ||
2 | * include/asm-sh/cpu-sh2a/cache.h | ||
3 | * | ||
4 | * Copyright (C) 2004 Paul Mundt | ||
5 | * | ||
6 | * This file is subject to the terms and conditions of the GNU General Public | ||
7 | * License. See the file "COPYING" in the main directory of this archive | ||
8 | * for more details. | ||
9 | */ | ||
10 | #ifndef __ASM_CPU_SH2A_CACHE_H | ||
11 | #define __ASM_CPU_SH2A_CACHE_H | ||
12 | |||
13 | #define L1_CACHE_SHIFT 4 | ||
14 | |||
15 | #define CCR1 0xfffc1000 | ||
16 | #define CCR2 0xfffc1004 | ||
17 | |||
18 | /* CCR1 behaves more like the traditional CCR */ | ||
19 | #define CCR CCR1 | ||
20 | |||
21 | /* | ||
22 | * Most of the SH-2A CCR1 definitions resemble the SH-4 ones. All others not | ||
23 | * listed here are reserved. | ||
24 | */ | ||
25 | #define CCR_CACHE_CB 0x0000 /* Hack */ | ||
26 | #define CCR_CACHE_OCE 0x0001 | ||
27 | #define CCR_CACHE_WT 0x0002 | ||
28 | #define CCR_CACHE_OCI 0x0008 /* OCF */ | ||
29 | #define CCR_CACHE_ICE 0x0100 | ||
30 | #define CCR_CACHE_ICI 0x0800 /* ICF */ | ||
31 | |||
32 | #define CACHE_IC_ADDRESS_ARRAY 0xf0000000 | ||
33 | #define CACHE_OC_ADDRESS_ARRAY 0xf0800000 | ||
34 | |||
35 | #define CCR_CACHE_ENABLE (CCR_CACHE_OCE | CCR_CACHE_ICE) | ||
36 | #define CCR_CACHE_INVALIDATE (CCR_CACHE_OCI | CCR_CACHE_ICI) | ||
37 | |||
38 | #endif /* __ASM_CPU_SH2A_CACHE_H */ | ||
39 | |||
diff --git a/include/asm-sh/cpu-sh2a/cacheflush.h b/include/asm-sh/cpu-sh2a/cacheflush.h new file mode 100644 index 000000000000..fa3186c73350 --- /dev/null +++ b/include/asm-sh/cpu-sh2a/cacheflush.h | |||
@@ -0,0 +1 @@ | |||
#include <asm/cpu-sh2/cacheflush.h> | |||
diff --git a/include/asm-sh/cpu-sh2a/dma.h b/include/asm-sh/cpu-sh2a/dma.h new file mode 100644 index 000000000000..0d5ad85c1de8 --- /dev/null +++ b/include/asm-sh/cpu-sh2a/dma.h | |||
@@ -0,0 +1 @@ | |||
#include <asm/cpu-sh2/dma.h> | |||
diff --git a/include/asm-sh/cpu-sh2a/freq.h b/include/asm-sh/cpu-sh2a/freq.h new file mode 100644 index 000000000000..e518fff6d10f --- /dev/null +++ b/include/asm-sh/cpu-sh2a/freq.h | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | * include/asm-sh/cpu-sh2a/freq.h | ||
3 | * | ||
4 | * Copyright (C) 2006 Yoshinori Sato | ||
5 | * | ||
6 | * This file is subject to the terms and conditions of the GNU General Public | ||
7 | * License. See the file "COPYING" in the main directory of this archive | ||
8 | * for more details. | ||
9 | */ | ||
10 | #ifndef __ASM_CPU_SH2A_FREQ_H | ||
11 | #define __ASM_CPU_SH2A_FREQ_H | ||
12 | |||
13 | #if defined(CONFIG_CPU_SUBTYPE_SH7206) | ||
14 | #define FREQCR 0xfffe0010 | ||
15 | #endif | ||
16 | |||
17 | #endif /* __ASM_CPU_SH2A_FREQ_H */ | ||
18 | |||
diff --git a/include/asm-sh/cpu-sh2a/mmu_context.h b/include/asm-sh/cpu-sh2a/mmu_context.h new file mode 100644 index 000000000000..cd2387f7db9e --- /dev/null +++ b/include/asm-sh/cpu-sh2a/mmu_context.h | |||
@@ -0,0 +1 @@ | |||
#include <asm/cpu-sh2/mmu_context.h> | |||
diff --git a/include/asm-sh/cpu-sh2a/timer.h b/include/asm-sh/cpu-sh2a/timer.h new file mode 100644 index 000000000000..fee504adf11e --- /dev/null +++ b/include/asm-sh/cpu-sh2a/timer.h | |||
@@ -0,0 +1 @@ | |||
#include <asm/cpu-sh2/timer.h> | |||
diff --git a/include/asm-sh/cpu-sh2a/ubc.h b/include/asm-sh/cpu-sh2a/ubc.h new file mode 100644 index 000000000000..cf28062b96a2 --- /dev/null +++ b/include/asm-sh/cpu-sh2a/ubc.h | |||
@@ -0,0 +1 @@ | |||
#include <asm/cpu-sh2/ubc.h> | |||
diff --git a/include/asm-sh/cpu-sh2a/watchdog.h b/include/asm-sh/cpu-sh2a/watchdog.h new file mode 100644 index 000000000000..c1b3e2488478 --- /dev/null +++ b/include/asm-sh/cpu-sh2a/watchdog.h | |||
@@ -0,0 +1 @@ | |||
#include <asm/cpu-sh2/watchdog.h> | |||
diff --git a/include/asm-sh/dma-mapping.h b/include/asm-sh/dma-mapping.h index 56cd4b977232..37ab0c131a4d 100644 --- a/include/asm-sh/dma-mapping.h +++ b/include/asm-sh/dma-mapping.h | |||
@@ -53,7 +53,7 @@ static inline void dma_free_coherent(struct device *dev, size_t size, | |||
53 | consistent_free(vaddr, size); | 53 | consistent_free(vaddr, size); |
54 | } | 54 | } |
55 | 55 | ||
56 | static inline void dma_cache_sync(void *vaddr, size_t size, | 56 | static inline void dma_cache_sync(struct device *dev, void *vaddr, size_t size, |
57 | enum dma_data_direction dir) | 57 | enum dma_data_direction dir) |
58 | { | 58 | { |
59 | consistent_sync(vaddr, size, (int)dir); | 59 | consistent_sync(vaddr, size, (int)dir); |
diff --git a/include/asm-sh/dma.h b/include/asm-sh/dma.h index d9daa028689f..faf3051cd429 100644 --- a/include/asm-sh/dma.h +++ b/include/asm-sh/dma.h | |||
@@ -14,9 +14,7 @@ | |||
14 | #include <linux/spinlock.h> | 14 | #include <linux/spinlock.h> |
15 | #include <linux/wait.h> | 15 | #include <linux/wait.h> |
16 | #include <linux/sysdev.h> | 16 | #include <linux/sysdev.h> |
17 | #include <linux/device.h> | ||
18 | #include <asm/cpu/dma.h> | 17 | #include <asm/cpu/dma.h> |
19 | #include <asm/semaphore.h> | ||
20 | 18 | ||
21 | /* The maximum address that we can perform a DMA transfer to on this platform */ | 19 | /* The maximum address that we can perform a DMA transfer to on this platform */ |
22 | /* Don't define MAX_DMA_ADDRESS; it's useless on the SuperH and any | 20 | /* Don't define MAX_DMA_ADDRESS; it's useless on the SuperH and any |
@@ -46,16 +44,21 @@ | |||
46 | * DMAC (dma_info) flags | 44 | * DMAC (dma_info) flags |
47 | */ | 45 | */ |
48 | enum { | 46 | enum { |
49 | DMAC_CHANNELS_CONFIGURED = 0x00, | 47 | DMAC_CHANNELS_CONFIGURED = 0x01, |
50 | DMAC_CHANNELS_TEI_CAPABLE = 0x01, | 48 | DMAC_CHANNELS_TEI_CAPABLE = 0x02, /* Transfer end interrupt */ |
51 | }; | 49 | }; |
52 | 50 | ||
53 | /* | 51 | /* |
54 | * DMA channel capabilities / flags | 52 | * DMA channel capabilities / flags |
55 | */ | 53 | */ |
56 | enum { | 54 | enum { |
57 | DMA_TEI_CAPABLE = 0x01, | 55 | DMA_CONFIGURED = 0x01, |
58 | DMA_CONFIGURED = 0x02, | 56 | |
57 | /* | ||
58 | * Transfer end interrupt, inherited from DMAC. | ||
59 | * wait_queue used in dma_wait_for_completion. | ||
60 | */ | ||
61 | DMA_TEI_CAPABLE = 0x02, | ||
59 | }; | 62 | }; |
60 | 63 | ||
61 | extern spinlock_t dma_spin_lock; | 64 | extern spinlock_t dma_spin_lock; |
@@ -68,28 +71,31 @@ struct dma_ops { | |||
68 | 71 | ||
69 | int (*get_residue)(struct dma_channel *chan); | 72 | int (*get_residue)(struct dma_channel *chan); |
70 | int (*xfer)(struct dma_channel *chan); | 73 | int (*xfer)(struct dma_channel *chan); |
71 | void (*configure)(struct dma_channel *chan, unsigned long flags); | 74 | int (*configure)(struct dma_channel *chan, unsigned long flags); |
75 | int (*extend)(struct dma_channel *chan, unsigned long op, void *param); | ||
72 | }; | 76 | }; |
73 | 77 | ||
74 | struct dma_channel { | 78 | struct dma_channel { |
75 | char dev_id[16]; | 79 | char dev_id[16]; /* unique name per DMAC of channel */ |
76 | 80 | ||
77 | unsigned int chan; /* Physical channel number */ | 81 | unsigned int chan; /* DMAC channel number */ |
78 | unsigned int vchan; /* Virtual channel number */ | 82 | unsigned int vchan; /* Virtual channel number */ |
83 | |||
79 | unsigned int mode; | 84 | unsigned int mode; |
80 | unsigned int count; | 85 | unsigned int count; |
81 | 86 | ||
82 | unsigned long sar; | 87 | unsigned long sar; |
83 | unsigned long dar; | 88 | unsigned long dar; |
84 | 89 | ||
90 | const char **caps; | ||
91 | |||
85 | unsigned long flags; | 92 | unsigned long flags; |
86 | atomic_t busy; | 93 | atomic_t busy; |
87 | 94 | ||
88 | struct semaphore sem; | ||
89 | wait_queue_head_t wait_queue; | 95 | wait_queue_head_t wait_queue; |
90 | 96 | ||
91 | struct sys_device dev; | 97 | struct sys_device dev; |
92 | char *name; | 98 | void *priv_data; |
93 | }; | 99 | }; |
94 | 100 | ||
95 | struct dma_info { | 101 | struct dma_info { |
@@ -103,6 +109,12 @@ struct dma_info { | |||
103 | struct dma_channel *channels; | 109 | struct dma_channel *channels; |
104 | 110 | ||
105 | struct list_head list; | 111 | struct list_head list; |
112 | int first_channel_nr; | ||
113 | }; | ||
114 | |||
115 | struct dma_chan_caps { | ||
116 | int ch_num; | ||
117 | const char **caplist; | ||
106 | }; | 118 | }; |
107 | 119 | ||
108 | #define to_dma_channel(channel) container_of(channel, struct dma_channel, dev) | 120 | #define to_dma_channel(channel) container_of(channel, struct dma_channel, dev) |
@@ -121,6 +133,8 @@ extern int dma_xfer(unsigned int chan, unsigned long from, | |||
121 | #define dma_read_page(chan, from, to) \ | 133 | #define dma_read_page(chan, from, to) \ |
122 | dma_read(chan, from, to, PAGE_SIZE) | 134 | dma_read(chan, from, to, PAGE_SIZE) |
123 | 135 | ||
136 | extern int request_dma_bycap(const char **dmac, const char **caps, | ||
137 | const char *dev_id); | ||
124 | extern int request_dma(unsigned int chan, const char *dev_id); | 138 | extern int request_dma(unsigned int chan, const char *dev_id); |
125 | extern void free_dma(unsigned int chan); | 139 | extern void free_dma(unsigned int chan); |
126 | extern int get_dma_residue(unsigned int chan); | 140 | extern int get_dma_residue(unsigned int chan); |
@@ -131,6 +145,10 @@ extern void dma_configure_channel(unsigned int chan, unsigned long flags); | |||
131 | 145 | ||
132 | extern int register_dmac(struct dma_info *info); | 146 | extern int register_dmac(struct dma_info *info); |
133 | extern void unregister_dmac(struct dma_info *info); | 147 | extern void unregister_dmac(struct dma_info *info); |
148 | extern struct dma_info *get_dma_info_by_name(const char *dmac_name); | ||
149 | |||
150 | extern int dma_extend(unsigned int chan, unsigned long op, void *param); | ||
151 | extern int register_chan_caps(const char *dmac, struct dma_chan_caps *capslist); | ||
134 | 152 | ||
135 | #ifdef CONFIG_SYSFS | 153 | #ifdef CONFIG_SYSFS |
136 | /* arch/sh/drivers/dma/dma-sysfs.c */ | 154 | /* arch/sh/drivers/dma/dma-sysfs.c */ |
diff --git a/include/asm-sh/elf.h b/include/asm-sh/elf.h index fc050fd7645e..43ca244564b1 100644 --- a/include/asm-sh/elf.h +++ b/include/asm-sh/elf.h | |||
@@ -74,7 +74,7 @@ typedef struct user_fpu_struct elf_fpregset_t; | |||
74 | #define ELF_ARCH EM_SH | 74 | #define ELF_ARCH EM_SH |
75 | 75 | ||
76 | #define USE_ELF_CORE_DUMP | 76 | #define USE_ELF_CORE_DUMP |
77 | #define ELF_EXEC_PAGESIZE 4096 | 77 | #define ELF_EXEC_PAGESIZE PAGE_SIZE |
78 | 78 | ||
79 | /* This is the location that an ET_DYN program is loaded if exec'ed. Typical | 79 | /* This is the location that an ET_DYN program is loaded if exec'ed. Typical |
80 | use of this is to invoke "./ld.so someprog" to test out a new version of | 80 | use of this is to invoke "./ld.so someprog" to test out a new version of |
diff --git a/include/asm-sh/entry-macros.S b/include/asm-sh/entry-macros.S new file mode 100644 index 000000000000..500030eae7aa --- /dev/null +++ b/include/asm-sh/entry-macros.S | |||
@@ -0,0 +1,33 @@ | |||
1 | ! entry.S macro define | ||
2 | |||
3 | .macro cli | ||
4 | stc sr, r0 | ||
5 | or #0xf0, r0 | ||
6 | ldc r0, sr | ||
7 | .endm | ||
8 | |||
9 | .macro sti | ||
10 | mov #0xf0, r11 | ||
11 | extu.b r11, r11 | ||
12 | not r11, r11 | ||
13 | stc sr, r10 | ||
14 | and r11, r10 | ||
15 | #ifdef CONFIG_HAS_SR_RB | ||
16 | stc k_g_imask, r11 | ||
17 | or r11, r10 | ||
18 | #endif | ||
19 | ldc r10, sr | ||
20 | .endm | ||
21 | |||
22 | .macro get_current_thread_info, ti, tmp | ||
23 | #ifdef CONFIG_HAS_SR_RB | ||
24 | stc r7_bank, \ti | ||
25 | #else | ||
26 | mov #((THREAD_SIZE - 1) >> 10) ^ 0xff, \tmp | ||
27 | shll8 \tmp | ||
28 | shll2 \tmp | ||
29 | mov r15, \ti | ||
30 | and \tmp, \ti | ||
31 | #endif | ||
32 | .endm | ||
33 | |||
diff --git a/include/asm-sh/irq-sh73180.h b/include/asm-sh/irq-sh73180.h deleted file mode 100644 index b28af9a69d72..000000000000 --- a/include/asm-sh/irq-sh73180.h +++ /dev/null | |||
@@ -1,314 +0,0 @@ | |||
1 | #ifndef __ASM_SH_IRQ_SH73180_H | ||
2 | #define __ASM_SH_IRQ_SH73180_H | ||
3 | |||
4 | /* | ||
5 | * linux/include/asm-sh/irq-sh73180.h | ||
6 | * | ||
7 | * Copyright (C) 2004 Takashi SHUDO <shudo@hitachi-ul.co.jp> | ||
8 | */ | ||
9 | |||
10 | #undef INTC_IPRA | ||
11 | #undef INTC_IPRB | ||
12 | #undef INTC_IPRC | ||
13 | #undef INTC_IPRD | ||
14 | |||
15 | #undef DMTE0_IRQ | ||
16 | #undef DMTE1_IRQ | ||
17 | #undef DMTE2_IRQ | ||
18 | #undef DMTE3_IRQ | ||
19 | #undef DMTE4_IRQ | ||
20 | #undef DMTE5_IRQ | ||
21 | #undef DMTE6_IRQ | ||
22 | #undef DMTE7_IRQ | ||
23 | #undef DMAE_IRQ | ||
24 | #undef DMA_IPR_ADDR | ||
25 | #undef DMA_IPR_POS | ||
26 | #undef DMA_PRIORITY | ||
27 | |||
28 | #undef INTC_IMCR0 | ||
29 | #undef INTC_IMCR1 | ||
30 | #undef INTC_IMCR2 | ||
31 | #undef INTC_IMCR3 | ||
32 | #undef INTC_IMCR4 | ||
33 | #undef INTC_IMCR5 | ||
34 | #undef INTC_IMCR6 | ||
35 | #undef INTC_IMCR7 | ||
36 | #undef INTC_IMCR8 | ||
37 | #undef INTC_IMCR9 | ||
38 | #undef INTC_IMCR10 | ||
39 | |||
40 | |||
41 | #define INTC_IPRA 0xA4080000UL | ||
42 | #define INTC_IPRB 0xA4080004UL | ||
43 | #define INTC_IPRC 0xA4080008UL | ||
44 | #define INTC_IPRD 0xA408000CUL | ||
45 | #define INTC_IPRE 0xA4080010UL | ||
46 | #define INTC_IPRF 0xA4080014UL | ||
47 | #define INTC_IPRG 0xA4080018UL | ||
48 | #define INTC_IPRH 0xA408001CUL | ||
49 | #define INTC_IPRI 0xA4080020UL | ||
50 | #define INTC_IPRJ 0xA4080024UL | ||
51 | #define INTC_IPRK 0xA4080028UL | ||
52 | |||
53 | #define INTC_IMR0 0xA4080080UL | ||
54 | #define INTC_IMR1 0xA4080084UL | ||
55 | #define INTC_IMR2 0xA4080088UL | ||
56 | #define INTC_IMR3 0xA408008CUL | ||
57 | #define INTC_IMR4 0xA4080090UL | ||
58 | #define INTC_IMR5 0xA4080094UL | ||
59 | #define INTC_IMR6 0xA4080098UL | ||
60 | #define INTC_IMR7 0xA408009CUL | ||
61 | #define INTC_IMR8 0xA40800A0UL | ||
62 | #define INTC_IMR9 0xA40800A4UL | ||
63 | #define INTC_IMR10 0xA40800A8UL | ||
64 | #define INTC_IMR11 0xA40800ACUL | ||
65 | |||
66 | #define INTC_IMCR0 0xA40800C0UL | ||
67 | #define INTC_IMCR1 0xA40800C4UL | ||
68 | #define INTC_IMCR2 0xA40800C8UL | ||
69 | #define INTC_IMCR3 0xA40800CCUL | ||
70 | #define INTC_IMCR4 0xA40800D0UL | ||
71 | #define INTC_IMCR5 0xA40800D4UL | ||
72 | #define INTC_IMCR6 0xA40800D8UL | ||
73 | #define INTC_IMCR7 0xA40800DCUL | ||
74 | #define INTC_IMCR8 0xA40800E0UL | ||
75 | #define INTC_IMCR9 0xA40800E4UL | ||
76 | #define INTC_IMCR10 0xA40800E8UL | ||
77 | #define INTC_IMCR11 0xA40800ECUL | ||
78 | |||
79 | #define INTC_ICR0 0xA4140000UL | ||
80 | #define INTC_ICR1 0xA414001CUL | ||
81 | |||
82 | #define INTMSK0 0xa4140044 | ||
83 | #define INTMSKCLR0 0xa4140064 | ||
84 | #define INTC_INTPRI0 0xa4140010 | ||
85 | |||
86 | /* | ||
87 | NOTE: | ||
88 | |||
89 | *_IRQ = (INTEVT2 - 0x200)/0x20 | ||
90 | */ | ||
91 | |||
92 | /* TMU0 */ | ||
93 | #define TMU0_IRQ 16 | ||
94 | #define TMU0_IPR_ADDR INTC_IPRA | ||
95 | #define TMU0_IPR_POS 3 | ||
96 | #define TMU0_PRIORITY 2 | ||
97 | |||
98 | #define TIMER_IRQ 16 | ||
99 | #define TIMER_IPR_ADDR INTC_IPRA | ||
100 | #define TIMER_IPR_POS 3 | ||
101 | #define TIMER_PRIORITY 2 | ||
102 | |||
103 | /* TMU1 */ | ||
104 | #define TMU1_IRQ 17 | ||
105 | #define TMU1_IPR_ADDR INTC_IPRA | ||
106 | #define TMU1_IPR_POS 2 | ||
107 | #define TMU1_PRIORITY 2 | ||
108 | |||
109 | /* TMU2 */ | ||
110 | #define TMU2_IRQ 18 | ||
111 | #define TMU2_IPR_ADDR INTC_IPRA | ||
112 | #define TMU2_IPR_POS 1 | ||
113 | #define TMU2_PRIORITY 2 | ||
114 | |||
115 | /* LCDC */ | ||
116 | #define LCDC_IRQ 28 | ||
117 | #define LCDC_IPR_ADDR INTC_IPRB | ||
118 | #define LCDC_IPR_POS 2 | ||
119 | #define LCDC_PRIORITY 2 | ||
120 | |||
121 | /* VIO (Video I/O) */ | ||
122 | #define CEU_IRQ 52 | ||
123 | #define BEU_IRQ 53 | ||
124 | #define VEU_IRQ 54 | ||
125 | #define VOU_IRQ 55 | ||
126 | #define VIO_IPR_ADDR INTC_IPRE | ||
127 | #define VIO_IPR_POS 2 | ||
128 | #define VIO_PRIORITY 2 | ||
129 | |||
130 | /* MFI (Multi Functional Interface) */ | ||
131 | #define MFI_IRQ 56 | ||
132 | #define MFI_IPR_ADDR INTC_IPRE | ||
133 | #define MFI_IPR_POS 1 | ||
134 | #define MFI_PRIORITY 2 | ||
135 | |||
136 | /* VPU (Video Processing Unit) */ | ||
137 | #define VPU_IRQ 60 | ||
138 | #define VPU_IPR_ADDR INTC_IPRE | ||
139 | #define VPU_IPR_POS 0 | ||
140 | #define VPU_PRIORITY 2 | ||
141 | |||
142 | /* 3DG */ | ||
143 | #define TDG_IRQ 63 | ||
144 | #define TDG_IPR_ADDR INTC_IPRJ | ||
145 | #define TDG_IPR_POS 2 | ||
146 | #define TDG_PRIORITY 2 | ||
147 | |||
148 | /* DMAC(1) */ | ||
149 | #define DMTE0_IRQ 48 | ||
150 | #define DMTE1_IRQ 49 | ||
151 | #define DMTE2_IRQ 50 | ||
152 | #define DMTE3_IRQ 51 | ||
153 | #define DMA1_IPR_ADDR INTC_IPRE | ||
154 | #define DMA1_IPR_POS 3 | ||
155 | #define DMA1_PRIORITY 7 | ||
156 | |||
157 | /* DMAC(2) */ | ||
158 | #define DMTE4_IRQ 76 | ||
159 | #define DMTE5_IRQ 77 | ||
160 | #define DMA2_IPR_ADDR INTC_IPRF | ||
161 | #define DMA2_IPR_POS 2 | ||
162 | #define DMA2_PRIORITY 7 | ||
163 | |||
164 | /* SCIF0 */ | ||
165 | #define SCIF_ERI_IRQ 80 | ||
166 | #define SCIF_RXI_IRQ 81 | ||
167 | #define SCIF_BRI_IRQ 82 | ||
168 | #define SCIF_TXI_IRQ 83 | ||
169 | #define SCIF_IPR_ADDR INTC_IPRG | ||
170 | #define SCIF_IPR_POS 3 | ||
171 | #define SCIF_PRIORITY 3 | ||
172 | |||
173 | /* SIOF0 */ | ||
174 | #define SIOF0_IRQ 84 | ||
175 | #define SIOF0_IPR_ADDR INTC_IPRH | ||
176 | #define SIOF0_IPR_POS 3 | ||
177 | #define SIOF0_PRIORITY 3 | ||
178 | |||
179 | /* FLCTL (Flash Memory Controller) */ | ||
180 | #define FLSTE_IRQ 92 | ||
181 | #define FLTEND_IRQ 93 | ||
182 | #define FLTRQ0_IRQ 94 | ||
183 | #define FLTRQ1_IRQ 95 | ||
184 | #define FLCTL_IPR_ADDR INTC_IPRH | ||
185 | #define FLCTL_IPR_POS 1 | ||
186 | #define FLCTL_PRIORITY 3 | ||
187 | |||
188 | /* IIC(0) (IIC Bus Interface) */ | ||
189 | #define IIC0_ALI_IRQ 96 | ||
190 | #define IIC0_TACKI_IRQ 97 | ||
191 | #define IIC0_WAITI_IRQ 98 | ||
192 | #define IIC0_DTEI_IRQ 99 | ||
193 | #define IIC0_IPR_ADDR INTC_IPRH | ||
194 | #define IIC0_IPR_POS 0 | ||
195 | #define IIC0_PRIORITY 3 | ||
196 | |||
197 | /* IIC(1) (IIC Bus Interface) */ | ||
198 | #define IIC1_ALI_IRQ 44 | ||
199 | #define IIC1_TACKI_IRQ 45 | ||
200 | #define IIC1_WAITI_IRQ 46 | ||
201 | #define IIC1_DTEI_IRQ 47 | ||
202 | #define IIC1_IPR_ADDR INTC_IPRG | ||
203 | #define IIC1_IPR_POS 0 | ||
204 | #define IIC1_PRIORITY 3 | ||
205 | |||
206 | /* SIO0 */ | ||
207 | #define SIO0_IRQ 88 | ||
208 | #define SIO0_IPR_ADDR INTC_IPRI | ||
209 | #define SIO0_IPR_POS 3 | ||
210 | #define SIO0_PRIORITY 3 | ||
211 | |||
212 | /* SDHI */ | ||
213 | #define SDHI_SDHII0_IRQ 100 | ||
214 | #define SDHI_SDHII1_IRQ 101 | ||
215 | #define SDHI_SDHII2_IRQ 102 | ||
216 | #define SDHI_SDHII3_IRQ 103 | ||
217 | #define SDHI_IPR_ADDR INTC_IPRK | ||
218 | #define SDHI_IPR_POS 0 | ||
219 | #define SDHI_PRIORITY 3 | ||
220 | |||
221 | /* SIU (Sound Interface Unit) */ | ||
222 | #define SIU_IRQ 108 | ||
223 | #define SIU_IPR_ADDR INTC_IPRJ | ||
224 | #define SIU_IPR_POS 1 | ||
225 | #define SIU_PRIORITY 3 | ||
226 | |||
227 | #define PORT_PACR 0xA4050100UL | ||
228 | #define PORT_PBCR 0xA4050102UL | ||
229 | #define PORT_PCCR 0xA4050104UL | ||
230 | #define PORT_PDCR 0xA4050106UL | ||
231 | #define PORT_PECR 0xA4050108UL | ||
232 | #define PORT_PFCR 0xA405010AUL | ||
233 | #define PORT_PGCR 0xA405010CUL | ||
234 | #define PORT_PHCR 0xA405010EUL | ||
235 | #define PORT_PJCR 0xA4050110UL | ||
236 | #define PORT_PKCR 0xA4050112UL | ||
237 | #define PORT_PLCR 0xA4050114UL | ||
238 | #define PORT_SCPCR 0xA4050116UL | ||
239 | #define PORT_PMCR 0xA4050118UL | ||
240 | #define PORT_PNCR 0xA405011AUL | ||
241 | #define PORT_PQCR 0xA405011CUL | ||
242 | #define PORT_PRCR 0xA405011EUL | ||
243 | #define PORT_PTCR 0xA405014CUL | ||
244 | #define PORT_PUCR 0xA405014EUL | ||
245 | #define PORT_PVCR 0xA4050150UL | ||
246 | |||
247 | #define PORT_PSELA 0xA4050140UL | ||
248 | #define PORT_PSELB 0xA4050142UL | ||
249 | #define PORT_PSELC 0xA4050144UL | ||
250 | #define PORT_PSELE 0xA4050158UL | ||
251 | |||
252 | #define PORT_HIZCRA 0xA4050146UL | ||
253 | #define PORT_HIZCRB 0xA4050148UL | ||
254 | #define PORT_DRVCR 0xA405014AUL | ||
255 | |||
256 | #define PORT_PADR 0xA4050120UL | ||
257 | #define PORT_PBDR 0xA4050122UL | ||
258 | #define PORT_PCDR 0xA4050124UL | ||
259 | #define PORT_PDDR 0xA4050126UL | ||
260 | #define PORT_PEDR 0xA4050128UL | ||
261 | #define PORT_PFDR 0xA405012AUL | ||
262 | #define PORT_PGDR 0xA405012CUL | ||
263 | #define PORT_PHDR 0xA405012EUL | ||
264 | #define PORT_PJDR 0xA4050130UL | ||
265 | #define PORT_PKDR 0xA4050132UL | ||
266 | #define PORT_PLDR 0xA4050134UL | ||
267 | #define PORT_SCPDR 0xA4050136UL | ||
268 | #define PORT_PMDR 0xA4050138UL | ||
269 | #define PORT_PNDR 0xA405013AUL | ||
270 | #define PORT_PQDR 0xA405013CUL | ||
271 | #define PORT_PRDR 0xA405013EUL | ||
272 | #define PORT_PTDR 0xA405016CUL | ||
273 | #define PORT_PUDR 0xA405016EUL | ||
274 | #define PORT_PVDR 0xA4050170UL | ||
275 | |||
276 | #define IRQ0_IRQ 32 | ||
277 | #define IRQ1_IRQ 33 | ||
278 | #define IRQ2_IRQ 34 | ||
279 | #define IRQ3_IRQ 35 | ||
280 | #define IRQ4_IRQ 36 | ||
281 | #define IRQ5_IRQ 37 | ||
282 | #define IRQ6_IRQ 38 | ||
283 | #define IRQ7_IRQ 39 | ||
284 | |||
285 | #define INTPRI00 0xA4140010UL | ||
286 | |||
287 | #define IRQ0_IPR_ADDR INTPRI00 | ||
288 | #define IRQ1_IPR_ADDR INTPRI00 | ||
289 | #define IRQ2_IPR_ADDR INTPRI00 | ||
290 | #define IRQ3_IPR_ADDR INTPRI00 | ||
291 | #define IRQ4_IPR_ADDR INTPRI00 | ||
292 | #define IRQ5_IPR_ADDR INTPRI00 | ||
293 | #define IRQ6_IPR_ADDR INTPRI00 | ||
294 | #define IRQ7_IPR_ADDR INTPRI00 | ||
295 | |||
296 | #define IRQ0_IPR_POS 7 | ||
297 | #define IRQ1_IPR_POS 6 | ||
298 | #define IRQ2_IPR_POS 5 | ||
299 | #define IRQ3_IPR_POS 4 | ||
300 | #define IRQ4_IPR_POS 3 | ||
301 | #define IRQ5_IPR_POS 2 | ||
302 | #define IRQ6_IPR_POS 1 | ||
303 | #define IRQ7_IPR_POS 0 | ||
304 | |||
305 | #define IRQ0_PRIORITY 1 | ||
306 | #define IRQ1_PRIORITY 1 | ||
307 | #define IRQ2_PRIORITY 1 | ||
308 | #define IRQ3_PRIORITY 1 | ||
309 | #define IRQ4_PRIORITY 1 | ||
310 | #define IRQ5_PRIORITY 1 | ||
311 | #define IRQ6_PRIORITY 1 | ||
312 | #define IRQ7_PRIORITY 1 | ||
313 | |||
314 | #endif /* __ASM_SH_IRQ_SH73180_H */ | ||
diff --git a/include/asm-sh/irq-sh7343.h b/include/asm-sh/irq-sh7343.h deleted file mode 100644 index 5d15419b53b0..000000000000 --- a/include/asm-sh/irq-sh7343.h +++ /dev/null | |||
@@ -1,317 +0,0 @@ | |||
1 | #ifndef __ASM_SH_IRQ_SH7343_H | ||
2 | #define __ASM_SH_IRQ_SH7343_H | ||
3 | |||
4 | /* | ||
5 | * linux/include/asm-sh/irq-sh7343.h | ||
6 | * | ||
7 | * Copyright (C) 2006 Kenati Technologies Inc. | ||
8 | * Andre Mccurdy <andre@kenati.com> | ||
9 | * Ranjit Deshpande <ranjit@kenati.com> | ||
10 | */ | ||
11 | |||
12 | #undef INTC_IPRA | ||
13 | #undef INTC_IPRB | ||
14 | #undef INTC_IPRC | ||
15 | #undef INTC_IPRD | ||
16 | |||
17 | #undef DMTE0_IRQ | ||
18 | #undef DMTE1_IRQ | ||
19 | #undef DMTE2_IRQ | ||
20 | #undef DMTE3_IRQ | ||
21 | #undef DMTE4_IRQ | ||
22 | #undef DMTE5_IRQ | ||
23 | #undef DMTE6_IRQ | ||
24 | #undef DMTE7_IRQ | ||
25 | #undef DMAE_IRQ | ||
26 | #undef DMA_IPR_ADDR | ||
27 | #undef DMA_IPR_POS | ||
28 | #undef DMA_PRIORITY | ||
29 | |||
30 | #undef INTC_IMCR0 | ||
31 | #undef INTC_IMCR1 | ||
32 | #undef INTC_IMCR2 | ||
33 | #undef INTC_IMCR3 | ||
34 | #undef INTC_IMCR4 | ||
35 | #undef INTC_IMCR5 | ||
36 | #undef INTC_IMCR6 | ||
37 | #undef INTC_IMCR7 | ||
38 | #undef INTC_IMCR8 | ||
39 | #undef INTC_IMCR9 | ||
40 | #undef INTC_IMCR10 | ||
41 | |||
42 | |||
43 | #define INTC_IPRA 0xA4080000UL | ||
44 | #define INTC_IPRB 0xA4080004UL | ||
45 | #define INTC_IPRC 0xA4080008UL | ||
46 | #define INTC_IPRD 0xA408000CUL | ||
47 | #define INTC_IPRE 0xA4080010UL | ||
48 | #define INTC_IPRF 0xA4080014UL | ||
49 | #define INTC_IPRG 0xA4080018UL | ||
50 | #define INTC_IPRH 0xA408001CUL | ||
51 | #define INTC_IPRI 0xA4080020UL | ||
52 | #define INTC_IPRJ 0xA4080024UL | ||
53 | #define INTC_IPRK 0xA4080028UL | ||
54 | #define INTC_IPRL 0xA408002CUL | ||
55 | |||
56 | #define INTC_IMR0 0xA4080080UL | ||
57 | #define INTC_IMR1 0xA4080084UL | ||
58 | #define INTC_IMR2 0xA4080088UL | ||
59 | #define INTC_IMR3 0xA408008CUL | ||
60 | #define INTC_IMR4 0xA4080090UL | ||
61 | #define INTC_IMR5 0xA4080094UL | ||
62 | #define INTC_IMR6 0xA4080098UL | ||
63 | #define INTC_IMR7 0xA408009CUL | ||
64 | #define INTC_IMR8 0xA40800A0UL | ||
65 | #define INTC_IMR9 0xA40800A4UL | ||
66 | #define INTC_IMR10 0xA40800A8UL | ||
67 | #define INTC_IMR11 0xA40800ACUL | ||
68 | |||
69 | #define INTC_IMCR0 0xA40800C0UL | ||
70 | #define INTC_IMCR1 0xA40800C4UL | ||
71 | #define INTC_IMCR2 0xA40800C8UL | ||
72 | #define INTC_IMCR3 0xA40800CCUL | ||
73 | #define INTC_IMCR4 0xA40800D0UL | ||
74 | #define INTC_IMCR5 0xA40800D4UL | ||
75 | #define INTC_IMCR6 0xA40800D8UL | ||
76 | #define INTC_IMCR7 0xA40800DCUL | ||
77 | #define INTC_IMCR8 0xA40800E0UL | ||
78 | #define INTC_IMCR9 0xA40800E4UL | ||
79 | #define INTC_IMCR10 0xA40800E8UL | ||
80 | #define INTC_IMCR11 0xA40800ECUL | ||
81 | |||
82 | #define INTC_ICR0 0xA4140000UL | ||
83 | #define INTC_ICR1 0xA414001CUL | ||
84 | |||
85 | #define INTMSK0 0xa4140044 | ||
86 | #define INTMSKCLR0 0xa4140064 | ||
87 | #define INTC_INTPRI0 0xa4140010 | ||
88 | |||
89 | /* | ||
90 | NOTE: | ||
91 | |||
92 | *_IRQ = (INTEVT2 - 0x200)/0x20 | ||
93 | */ | ||
94 | |||
95 | /* TMU0 */ | ||
96 | #define TMU0_IRQ 16 | ||
97 | #define TMU0_IPR_ADDR INTC_IPRA | ||
98 | #define TMU0_IPR_POS 3 | ||
99 | #define TMU0_PRIORITY 2 | ||
100 | |||
101 | #define TIMER_IRQ 16 | ||
102 | #define TIMER_IPR_ADDR INTC_IPRA | ||
103 | #define TIMER_IPR_POS 3 | ||
104 | #define TIMER_PRIORITY 2 | ||
105 | |||
106 | /* TMU1 */ | ||
107 | #define TMU1_IRQ 17 | ||
108 | #define TMU1_IPR_ADDR INTC_IPRA | ||
109 | #define TMU1_IPR_POS 2 | ||
110 | #define TMU1_PRIORITY 2 | ||
111 | |||
112 | /* TMU2 */ | ||
113 | #define TMU2_IRQ 18 | ||
114 | #define TMU2_IPR_ADDR INTC_IPRA | ||
115 | #define TMU2_IPR_POS 1 | ||
116 | #define TMU2_PRIORITY 2 | ||
117 | |||
118 | /* LCDC */ | ||
119 | #define LCDC_IRQ 28 | ||
120 | #define LCDC_IPR_ADDR INTC_IPRB | ||
121 | #define LCDC_IPR_POS 2 | ||
122 | #define LCDC_PRIORITY 2 | ||
123 | |||
124 | /* VIO (Video I/O) */ | ||
125 | #define CEU_IRQ 52 | ||
126 | #define BEU_IRQ 53 | ||
127 | #define VEU_IRQ 54 | ||
128 | #define VOU_IRQ 55 | ||
129 | #define VIO_IPR_ADDR INTC_IPRE | ||
130 | #define VIO_IPR_POS 2 | ||
131 | #define VIO_PRIORITY 2 | ||
132 | |||
133 | /* MFI (Multi Functional Interface) */ | ||
134 | #define MFI_IRQ 56 | ||
135 | #define MFI_IPR_ADDR INTC_IPRE | ||
136 | #define MFI_IPR_POS 1 | ||
137 | #define MFI_PRIORITY 2 | ||
138 | |||
139 | /* VPU (Video Processing Unit) */ | ||
140 | #define VPU_IRQ 60 | ||
141 | #define VPU_IPR_ADDR INTC_IPRE | ||
142 | #define VPU_IPR_POS 0 | ||
143 | #define VPU_PRIORITY 2 | ||
144 | |||
145 | /* 3DG */ | ||
146 | #define TDG_IRQ 63 | ||
147 | #define TDG_IPR_ADDR INTC_IPRJ | ||
148 | #define TDG_IPR_POS 2 | ||
149 | #define TDG_PRIORITY 2 | ||
150 | |||
151 | /* DMAC(1) */ | ||
152 | #define DMTE0_IRQ 48 | ||
153 | #define DMTE1_IRQ 49 | ||
154 | #define DMTE2_IRQ 50 | ||
155 | #define DMTE3_IRQ 51 | ||
156 | #define DMA1_IPR_ADDR INTC_IPRE | ||
157 | #define DMA1_IPR_POS 3 | ||
158 | #define DMA1_PRIORITY 7 | ||
159 | |||
160 | /* DMAC(2) */ | ||
161 | #define DMTE4_IRQ 76 | ||
162 | #define DMTE5_IRQ 77 | ||
163 | #define DMA2_IPR_ADDR INTC_IPRF | ||
164 | #define DMA2_IPR_POS 2 | ||
165 | #define DMA2_PRIORITY 7 | ||
166 | |||
167 | /* SCIF0 */ | ||
168 | #define SCIF_ERI_IRQ 80 | ||
169 | #define SCIF_RXI_IRQ 81 | ||
170 | #define SCIF_BRI_IRQ 82 | ||
171 | #define SCIF_TXI_IRQ 83 | ||
172 | #define SCIF_IPR_ADDR INTC_IPRG | ||
173 | #define SCIF_IPR_POS 3 | ||
174 | #define SCIF_PRIORITY 3 | ||
175 | |||
176 | /* SIOF0 */ | ||
177 | #define SIOF0_IRQ 84 | ||
178 | #define SIOF0_IPR_ADDR INTC_IPRH | ||
179 | #define SIOF0_IPR_POS 3 | ||
180 | #define SIOF0_PRIORITY 3 | ||
181 | |||
182 | /* FLCTL (Flash Memory Controller) */ | ||
183 | #define FLSTE_IRQ 92 | ||
184 | #define FLTEND_IRQ 93 | ||
185 | #define FLTRQ0_IRQ 94 | ||
186 | #define FLTRQ1_IRQ 95 | ||
187 | #define FLCTL_IPR_ADDR INTC_IPRH | ||
188 | #define FLCTL_IPR_POS 1 | ||
189 | #define FLCTL_PRIORITY 3 | ||
190 | |||
191 | /* IIC(0) (IIC Bus Interface) */ | ||
192 | #define IIC0_ALI_IRQ 96 | ||
193 | #define IIC0_TACKI_IRQ 97 | ||
194 | #define IIC0_WAITI_IRQ 98 | ||
195 | #define IIC0_DTEI_IRQ 99 | ||
196 | #define IIC0_IPR_ADDR INTC_IPRH | ||
197 | #define IIC0_IPR_POS 0 | ||
198 | #define IIC0_PRIORITY 3 | ||
199 | |||
200 | /* IIC(1) (IIC Bus Interface) */ | ||
201 | #define IIC1_ALI_IRQ 44 | ||
202 | #define IIC1_TACKI_IRQ 45 | ||
203 | #define IIC1_WAITI_IRQ 46 | ||
204 | #define IIC1_DTEI_IRQ 47 | ||
205 | #define IIC1_IPR_ADDR INTC_IPRI | ||
206 | #define IIC1_IPR_POS 0 | ||
207 | #define IIC1_PRIORITY 3 | ||
208 | |||
209 | /* SIO0 */ | ||
210 | #define SIO0_IRQ 88 | ||
211 | #define SIO0_IPR_ADDR INTC_IPRI | ||
212 | #define SIO0_IPR_POS 3 | ||
213 | #define SIO0_PRIORITY 3 | ||
214 | |||
215 | /* SDHI */ | ||
216 | #define SDHI_SDHII0_IRQ 100 | ||
217 | #define SDHI_SDHII1_IRQ 101 | ||
218 | #define SDHI_SDHII2_IRQ 102 | ||
219 | #define SDHI_SDHII3_IRQ 103 | ||
220 | #define SDHI_IPR_ADDR INTC_IPRK | ||
221 | #define SDHI_IPR_POS 0 | ||
222 | #define SDHI_PRIORITY 3 | ||
223 | |||
224 | /* SIU (Sound Interface Unit) */ | ||
225 | #define SIU_IRQ 108 | ||
226 | #define SIU_IPR_ADDR INTC_IPRJ | ||
227 | #define SIU_IPR_POS 1 | ||
228 | #define SIU_PRIORITY 3 | ||
229 | |||
230 | #define PORT_PACR 0xA4050100UL | ||
231 | #define PORT_PBCR 0xA4050102UL | ||
232 | #define PORT_PCCR 0xA4050104UL | ||
233 | #define PORT_PDCR 0xA4050106UL | ||
234 | #define PORT_PECR 0xA4050108UL | ||
235 | #define PORT_PFCR 0xA405010AUL | ||
236 | #define PORT_PGCR 0xA405010CUL | ||
237 | #define PORT_PHCR 0xA405010EUL | ||
238 | #define PORT_PJCR 0xA4050110UL | ||
239 | #define PORT_PKCR 0xA4050112UL | ||
240 | #define PORT_PLCR 0xA4050114UL | ||
241 | #define PORT_SCPCR 0xA4050116UL | ||
242 | #define PORT_PMCR 0xA4050118UL | ||
243 | #define PORT_PNCR 0xA405011AUL | ||
244 | #define PORT_PQCR 0xA405011CUL | ||
245 | #define PORT_PRCR 0xA405011EUL | ||
246 | #define PORT_PTCR 0xA405014CUL | ||
247 | #define PORT_PUCR 0xA405014EUL | ||
248 | #define PORT_PVCR 0xA4050150UL | ||
249 | |||
250 | #define PORT_PSELA 0xA4050140UL | ||
251 | #define PORT_PSELB 0xA4050142UL | ||
252 | #define PORT_PSELC 0xA4050144UL | ||
253 | #define PORT_PSELE 0xA4050158UL | ||
254 | |||
255 | #define PORT_HIZCRA 0xA4050146UL | ||
256 | #define PORT_HIZCRB 0xA4050148UL | ||
257 | #define PORT_DRVCR 0xA405014AUL | ||
258 | |||
259 | #define PORT_PADR 0xA4050120UL | ||
260 | #define PORT_PBDR 0xA4050122UL | ||
261 | #define PORT_PCDR 0xA4050124UL | ||
262 | #define PORT_PDDR 0xA4050126UL | ||
263 | #define PORT_PEDR 0xA4050128UL | ||
264 | #define PORT_PFDR 0xA405012AUL | ||
265 | #define PORT_PGDR 0xA405012CUL | ||
266 | #define PORT_PHDR 0xA405012EUL | ||
267 | #define PORT_PJDR 0xA4050130UL | ||
268 | #define PORT_PKDR 0xA4050132UL | ||
269 | #define PORT_PLDR 0xA4050134UL | ||
270 | #define PORT_SCPDR 0xA4050136UL | ||
271 | #define PORT_PMDR 0xA4050138UL | ||
272 | #define PORT_PNDR 0xA405013AUL | ||
273 | #define PORT_PQDR 0xA405013CUL | ||
274 | #define PORT_PRDR 0xA405013EUL | ||
275 | #define PORT_PTDR 0xA405016CUL | ||
276 | #define PORT_PUDR 0xA405016EUL | ||
277 | #define PORT_PVDR 0xA4050170UL | ||
278 | |||
279 | #define IRQ0_IRQ 32 | ||
280 | #define IRQ1_IRQ 33 | ||
281 | #define IRQ2_IRQ 34 | ||
282 | #define IRQ3_IRQ 35 | ||
283 | #define IRQ4_IRQ 36 | ||
284 | #define IRQ5_IRQ 37 | ||
285 | #define IRQ6_IRQ 38 | ||
286 | #define IRQ7_IRQ 39 | ||
287 | |||
288 | #define INTPRI00 0xA4140010UL | ||
289 | |||
290 | #define IRQ0_IPR_ADDR INTPRI00 | ||
291 | #define IRQ1_IPR_ADDR INTPRI00 | ||
292 | #define IRQ2_IPR_ADDR INTPRI00 | ||
293 | #define IRQ3_IPR_ADDR INTPRI00 | ||
294 | #define IRQ4_IPR_ADDR INTPRI00 | ||
295 | #define IRQ5_IPR_ADDR INTPRI00 | ||
296 | #define IRQ6_IPR_ADDR INTPRI00 | ||
297 | #define IRQ7_IPR_ADDR INTPRI00 | ||
298 | |||
299 | #define IRQ0_IPR_POS 7 | ||
300 | #define IRQ1_IPR_POS 6 | ||
301 | #define IRQ2_IPR_POS 5 | ||
302 | #define IRQ3_IPR_POS 4 | ||
303 | #define IRQ4_IPR_POS 3 | ||
304 | #define IRQ5_IPR_POS 2 | ||
305 | #define IRQ6_IPR_POS 1 | ||
306 | #define IRQ7_IPR_POS 0 | ||
307 | |||
308 | #define IRQ0_PRIORITY 1 | ||
309 | #define IRQ1_PRIORITY 1 | ||
310 | #define IRQ2_PRIORITY 1 | ||
311 | #define IRQ3_PRIORITY 1 | ||
312 | #define IRQ4_PRIORITY 1 | ||
313 | #define IRQ5_PRIORITY 1 | ||
314 | #define IRQ6_PRIORITY 1 | ||
315 | #define IRQ7_PRIORITY 1 | ||
316 | |||
317 | #endif /* __ASM_SH_IRQ_SH7343_H */ | ||
diff --git a/include/asm-sh/irq-sh7780.h b/include/asm-sh/irq-sh7780.h deleted file mode 100644 index 19912ae6a7f7..000000000000 --- a/include/asm-sh/irq-sh7780.h +++ /dev/null | |||
@@ -1,311 +0,0 @@ | |||
1 | #ifndef __ASM_SH_IRQ_SH7780_H | ||
2 | #define __ASM_SH_IRQ_SH7780_H | ||
3 | |||
4 | /* | ||
5 | * linux/include/asm-sh/irq-sh7780.h | ||
6 | * | ||
7 | * Copyright (C) 2004 Takashi SHUDO <shudo@hitachi-ul.co.jp> | ||
8 | */ | ||
9 | #define INTC_BASE 0xffd00000 | ||
10 | #define INTC_ICR0 (INTC_BASE+0x0) | ||
11 | #define INTC_ICR1 (INTC_BASE+0x1c) | ||
12 | #define INTC_INTPRI (INTC_BASE+0x10) | ||
13 | #define INTC_INTREQ (INTC_BASE+0x24) | ||
14 | #define INTC_INTMSK0 (INTC_BASE+0x44) | ||
15 | #define INTC_INTMSK1 (INTC_BASE+0x48) | ||
16 | #define INTC_INTMSK2 (INTC_BASE+0x40080) | ||
17 | #define INTC_INTMSKCLR0 (INTC_BASE+0x64) | ||
18 | #define INTC_INTMSKCLR1 (INTC_BASE+0x68) | ||
19 | #define INTC_INTMSKCLR2 (INTC_BASE+0x40084) | ||
20 | #define INTC_NMIFCR (INTC_BASE+0xc0) | ||
21 | #define INTC_USERIMASK (INTC_BASE+0x30000) | ||
22 | |||
23 | #define INTC_INT2PRI0 (INTC_BASE+0x40000) | ||
24 | #define INTC_INT2PRI1 (INTC_BASE+0x40004) | ||
25 | #define INTC_INT2PRI2 (INTC_BASE+0x40008) | ||
26 | #define INTC_INT2PRI3 (INTC_BASE+0x4000c) | ||
27 | #define INTC_INT2PRI4 (INTC_BASE+0x40010) | ||
28 | #define INTC_INT2PRI5 (INTC_BASE+0x40014) | ||
29 | #define INTC_INT2PRI6 (INTC_BASE+0x40018) | ||
30 | #define INTC_INT2PRI7 (INTC_BASE+0x4001c) | ||
31 | #define INTC_INT2A0 (INTC_BASE+0x40030) | ||
32 | #define INTC_INT2A1 (INTC_BASE+0x40034) | ||
33 | #define INTC_INT2MSKR (INTC_BASE+0x40038) | ||
34 | #define INTC_INT2MSKCR (INTC_BASE+0x4003c) | ||
35 | #define INTC_INT2B0 (INTC_BASE+0x40040) | ||
36 | #define INTC_INT2B1 (INTC_BASE+0x40044) | ||
37 | #define INTC_INT2B2 (INTC_BASE+0x40048) | ||
38 | #define INTC_INT2B3 (INTC_BASE+0x4004c) | ||
39 | #define INTC_INT2B4 (INTC_BASE+0x40050) | ||
40 | #define INTC_INT2B5 (INTC_BASE+0x40054) | ||
41 | #define INTC_INT2B6 (INTC_BASE+0x40058) | ||
42 | #define INTC_INT2B7 (INTC_BASE+0x4005c) | ||
43 | #define INTC_INT2GPIC (INTC_BASE+0x40090) | ||
44 | /* | ||
45 | NOTE: | ||
46 | *_IRQ = (INTEVT2 - 0x200)/0x20 | ||
47 | */ | ||
48 | /* IRQ 0-7 line external int*/ | ||
49 | #define IRQ0_IRQ 2 | ||
50 | #define IRQ0_IPR_ADDR INTC_INTPRI | ||
51 | #define IRQ0_IPR_POS 7 | ||
52 | #define IRQ0_PRIORITY 2 | ||
53 | |||
54 | #define IRQ1_IRQ 4 | ||
55 | #define IRQ1_IPR_ADDR INTC_INTPRI | ||
56 | #define IRQ1_IPR_POS 6 | ||
57 | #define IRQ1_PRIORITY 2 | ||
58 | |||
59 | #define IRQ2_IRQ 6 | ||
60 | #define IRQ2_IPR_ADDR INTC_INTPRI | ||
61 | #define IRQ2_IPR_POS 5 | ||
62 | #define IRQ2_PRIORITY 2 | ||
63 | |||
64 | #define IRQ3_IRQ 8 | ||
65 | #define IRQ3_IPR_ADDR INTC_INTPRI | ||
66 | #define IRQ3_IPR_POS 4 | ||
67 | #define IRQ3_PRIORITY 2 | ||
68 | |||
69 | #define IRQ4_IRQ 10 | ||
70 | #define IRQ4_IPR_ADDR INTC_INTPRI | ||
71 | #define IRQ4_IPR_POS 3 | ||
72 | #define IRQ4_PRIORITY 2 | ||
73 | |||
74 | #define IRQ5_IRQ 12 | ||
75 | #define IRQ5_IPR_ADDR INTC_INTPRI | ||
76 | #define IRQ5_IPR_POS 2 | ||
77 | #define IRQ5_PRIORITY 2 | ||
78 | |||
79 | #define IRQ6_IRQ 14 | ||
80 | #define IRQ6_IPR_ADDR INTC_INTPRI | ||
81 | #define IRQ6_IPR_POS 1 | ||
82 | #define IRQ6_PRIORITY 2 | ||
83 | |||
84 | #define IRQ7_IRQ 0 | ||
85 | #define IRQ7_IPR_ADDR INTC_INTPRI | ||
86 | #define IRQ7_IPR_POS 0 | ||
87 | #define IRQ7_PRIORITY 2 | ||
88 | |||
89 | /* TMU */ | ||
90 | /* ch0 */ | ||
91 | #define TMU_IRQ 28 | ||
92 | #define TMU_IPR_ADDR INTC_INT2PRI0 | ||
93 | #define TMU_IPR_POS 3 | ||
94 | #define TMU_PRIORITY 2 | ||
95 | |||
96 | #define TIMER_IRQ 28 | ||
97 | #define TIMER_IPR_ADDR INTC_INT2PRI0 | ||
98 | #define TIMER_IPR_POS 3 | ||
99 | #define TIMER_PRIORITY 2 | ||
100 | |||
101 | /* ch 1*/ | ||
102 | #define TMU_CH1_IRQ 29 | ||
103 | #define TMU_CH1_IPR_ADDR INTC_INT2PRI0 | ||
104 | #define TMU_CH1_IPR_POS 2 | ||
105 | #define TMU_CH1_PRIORITY 2 | ||
106 | |||
107 | #define TIMER1_IRQ 29 | ||
108 | #define TIMER1_IPR_ADDR INTC_INT2PRI0 | ||
109 | #define TIMER1_IPR_POS 2 | ||
110 | #define TIMER1_PRIORITY 2 | ||
111 | |||
112 | /* ch 2*/ | ||
113 | #define TMU_CH2_IRQ 30 | ||
114 | #define TMU_CH2_IPR_ADDR INTC_INT2PRI0 | ||
115 | #define TMU_CH2_IPR_POS 1 | ||
116 | #define TMU_CH2_PRIORITY 2 | ||
117 | /* ch 2 Input capture */ | ||
118 | #define TMU_CH2IC_IRQ 31 | ||
119 | #define TMU_CH2IC_IPR_ADDR INTC_INT2PRI0 | ||
120 | #define TMU_CH2IC_IPR_POS 0 | ||
121 | #define TMU_CH2IC_PRIORITY 2 | ||
122 | /* ch 3 */ | ||
123 | #define TMU_CH3_IRQ 96 | ||
124 | #define TMU_CH3_IPR_ADDR INTC_INT2PRI1 | ||
125 | #define TMU_CH3_IPR_POS 3 | ||
126 | #define TMU_CH3_PRIORITY 2 | ||
127 | /* ch 4 */ | ||
128 | #define TMU_CH4_IRQ 97 | ||
129 | #define TMU_CH4_IPR_ADDR INTC_INT2PRI1 | ||
130 | #define TMU_CH4_IPR_POS 2 | ||
131 | #define TMU_CH4_PRIORITY 2 | ||
132 | /* ch 5*/ | ||
133 | #define TMU_CH5_IRQ 98 | ||
134 | #define TMU_CH5_IPR_ADDR INTC_INT2PRI1 | ||
135 | #define TMU_CH5_IPR_POS 1 | ||
136 | #define TMU_CH5_PRIORITY 2 | ||
137 | |||
138 | /* SCIF0 */ | ||
139 | #define SCIF0_ERI_IRQ 40 | ||
140 | #define SCIF0_RXI_IRQ 41 | ||
141 | #define SCIF0_BRI_IRQ 42 | ||
142 | #define SCIF0_TXI_IRQ 43 | ||
143 | #define SCIF0_IPR_ADDR INTC_INT2PRI2 | ||
144 | #define SCIF0_IPR_POS 3 | ||
145 | #define SCIF0_PRIORITY 3 | ||
146 | |||
147 | /* SCIF1 */ | ||
148 | #define SCIF1_ERI_IRQ 76 | ||
149 | #define SCIF1_RXI_IRQ 77 | ||
150 | #define SCIF1_BRI_IRQ 78 | ||
151 | #define SCIF1_TXI_IRQ 79 | ||
152 | #define SCIF1_IPR_ADDR INTC_INT2PRI2 | ||
153 | #define SCIF1_IPR_POS 2 | ||
154 | #define SCIF1_PRIORITY 3 | ||
155 | |||
156 | #define WDT_IRQ 27 | ||
157 | #define WDT_IPR_ADDR INTC_INT2PRI2 | ||
158 | #define WDT_IPR_POS 1 | ||
159 | #define WDT_PRIORITY 2 | ||
160 | |||
161 | /* DMAC(0) */ | ||
162 | #define DMINT0_IRQ 34 | ||
163 | #define DMINT1_IRQ 35 | ||
164 | #define DMINT2_IRQ 36 | ||
165 | #define DMINT3_IRQ 37 | ||
166 | #define DMINT4_IRQ 44 | ||
167 | #define DMINT5_IRQ 45 | ||
168 | #define DMINT6_IRQ 46 | ||
169 | #define DMINT7_IRQ 47 | ||
170 | #define DMAE_IRQ 38 | ||
171 | #define DMA0_IPR_ADDR INTC_INT2PRI3 | ||
172 | #define DMA0_IPR_POS 2 | ||
173 | #define DMA0_PRIORITY 7 | ||
174 | |||
175 | /* DMAC(1) */ | ||
176 | #define DMINT8_IRQ 92 | ||
177 | #define DMINT9_IRQ 93 | ||
178 | #define DMINT10_IRQ 94 | ||
179 | #define DMINT11_IRQ 95 | ||
180 | #define DMA1_IPR_ADDR INTC_INT2PRI3 | ||
181 | #define DMA1_IPR_POS 1 | ||
182 | #define DMA1_PRIORITY 7 | ||
183 | |||
184 | #define DMTE0_IRQ DMINT0_IRQ | ||
185 | #define DMTE4_IRQ DMINT4_IRQ | ||
186 | #define DMA_IPR_ADDR DMA0_IPR_ADDR | ||
187 | #define DMA_IPR_POS DMA0_IPR_POS | ||
188 | #define DMA_PRIORITY DMA0_PRIORITY | ||
189 | |||
190 | /* CMT */ | ||
191 | #define CMT_IRQ 56 | ||
192 | #define CMT_IPR_ADDR INTC_INT2PRI4 | ||
193 | #define CMT_IPR_POS 3 | ||
194 | #define CMT_PRIORITY 0 | ||
195 | |||
196 | /* HAC */ | ||
197 | #define HAC_IRQ 60 | ||
198 | #define HAC_IPR_ADDR INTC_INT2PRI4 | ||
199 | #define HAC_IPR_POS 2 | ||
200 | #define CMT_PRIORITY 0 | ||
201 | |||
202 | /* PCIC(0) */ | ||
203 | #define PCIC0_IRQ 64 | ||
204 | #define PCIC0_IPR_ADDR INTC_INT2PRI4 | ||
205 | #define PCIC0_IPR_POS 1 | ||
206 | #define PCIC0_PRIORITY 2 | ||
207 | |||
208 | /* PCIC(1) */ | ||
209 | #define PCIC1_IRQ 65 | ||
210 | #define PCIC1_IPR_ADDR INTC_INT2PRI4 | ||
211 | #define PCIC1_IPR_POS 0 | ||
212 | #define PCIC1_PRIORITY 2 | ||
213 | |||
214 | /* PCIC(2) */ | ||
215 | #define PCIC2_IRQ 66 | ||
216 | #define PCIC2_IPR_ADDR INTC_INT2PRI5 | ||
217 | #define PCIC2_IPR_POS 3 | ||
218 | #define PCIC2_PRIORITY 2 | ||
219 | |||
220 | /* PCIC(3) */ | ||
221 | #define PCIC3_IRQ 67 | ||
222 | #define PCIC3_IPR_ADDR INTC_INT2PRI5 | ||
223 | #define PCIC3_IPR_POS 2 | ||
224 | #define PCIC3_PRIORITY 2 | ||
225 | |||
226 | /* PCIC(4) */ | ||
227 | #define PCIC4_IRQ 68 | ||
228 | #define PCIC4_IPR_ADDR INTC_INT2PRI5 | ||
229 | #define PCIC4_IPR_POS 1 | ||
230 | #define PCIC4_PRIORITY 2 | ||
231 | |||
232 | /* PCIC(5) */ | ||
233 | #define PCICERR_IRQ 69 | ||
234 | #define PCICPWD3_IRQ 70 | ||
235 | #define PCICPWD2_IRQ 71 | ||
236 | #define PCICPWD1_IRQ 72 | ||
237 | #define PCICPWD0_IRQ 73 | ||
238 | #define PCIC5_IPR_ADDR INTC_INT2PRI5 | ||
239 | #define PCIC5_IPR_POS 0 | ||
240 | #define PCIC5_PRIORITY 2 | ||
241 | |||
242 | /* SIOF */ | ||
243 | #define SIOF_IRQ 80 | ||
244 | #define SIOF_IPR_ADDR INTC_INT2PRI6 | ||
245 | #define SIOF_IPR_POS 3 | ||
246 | #define SIOF_PRIORITY 3 | ||
247 | |||
248 | /* HSPI */ | ||
249 | #define HSPI_IRQ 84 | ||
250 | #define HSPI_IPR_ADDR INTC_INT2PRI6 | ||
251 | #define HSPI_IPR_POS 2 | ||
252 | #define HSPI_PRIORITY 3 | ||
253 | |||
254 | /* MMCIF */ | ||
255 | #define MMCIF_FSTAT_IRQ 88 | ||
256 | #define MMCIF_TRAN_IRQ 89 | ||
257 | #define MMCIF_ERR_IRQ 90 | ||
258 | #define MMCIF_FRDY_IRQ 91 | ||
259 | #define MMCIF_IPR_ADDR INTC_INT2PRI6 | ||
260 | #define MMCIF_IPR_POS 1 | ||
261 | #define HSPI_PRIORITY 3 | ||
262 | |||
263 | /* SSI */ | ||
264 | #define SSI_IRQ 100 | ||
265 | #define SSI_IPR_ADDR INTC_INT2PRI6 | ||
266 | #define SSI_IPR_POS 0 | ||
267 | #define SSI_PRIORITY 3 | ||
268 | |||
269 | /* FLCTL */ | ||
270 | #define FLCTL_FLSTE_IRQ 104 | ||
271 | #define FLCTL_FLTEND_IRQ 105 | ||
272 | #define FLCTL_FLTRQ0_IRQ 106 | ||
273 | #define FLCTL_FLTRQ1_IRQ 107 | ||
274 | #define FLCTL_IPR_ADDR INTC_INT2PRI7 | ||
275 | #define FLCTL_IPR_POS 3 | ||
276 | #define FLCTL_PRIORITY 3 | ||
277 | |||
278 | /* GPIO */ | ||
279 | #define GPIO0_IRQ 108 | ||
280 | #define GPIO1_IRQ 109 | ||
281 | #define GPIO2_IRQ 110 | ||
282 | #define GPIO3_IRQ 111 | ||
283 | #define GPIO_IPR_ADDR INTC_INT2PRI7 | ||
284 | #define GPIO_IPR_POS 2 | ||
285 | #define GPIO_PRIORITY 3 | ||
286 | |||
287 | #define INTC_TMU0_MSK 0 | ||
288 | #define INTC_TMU3_MSK 1 | ||
289 | #define INTC_RTC_MSK 2 | ||
290 | #define INTC_SCIF0_MSK 3 | ||
291 | #define INTC_SCIF1_MSK 4 | ||
292 | #define INTC_WDT_MSK 5 | ||
293 | #define INTC_HUID_MSK 7 | ||
294 | #define INTC_DMAC0_MSK 8 | ||
295 | #define INTC_DMAC1_MSK 9 | ||
296 | #define INTC_CMT_MSK 12 | ||
297 | #define INTC_HAC_MSK 13 | ||
298 | #define INTC_PCIC0_MSK 14 | ||
299 | #define INTC_PCIC1_MSK 15 | ||
300 | #define INTC_PCIC2_MSK 16 | ||
301 | #define INTC_PCIC3_MSK 17 | ||
302 | #define INTC_PCIC4_MSK 18 | ||
303 | #define INTC_PCIC5_MSK 19 | ||
304 | #define INTC_SIOF_MSK 20 | ||
305 | #define INTC_HSPI_MSK 21 | ||
306 | #define INTC_MMCIF_MSK 22 | ||
307 | #define INTC_SSI_MSK 23 | ||
308 | #define INTC_FLCTL_MSK 24 | ||
309 | #define INTC_GPIO_MSK 25 | ||
310 | |||
311 | #endif /* __ASM_SH_IRQ_SH7780_H */ | ||
diff --git a/include/asm-sh/irq.h b/include/asm-sh/irq.h index 6cd3e9e2a76a..fd576088e47e 100644 --- a/include/asm-sh/irq.h +++ b/include/asm-sh/irq.h | |||
@@ -1,233 +1,9 @@ | |||
1 | #ifndef __ASM_SH_IRQ_H | 1 | #ifndef __ASM_SH_IRQ_H |
2 | #define __ASM_SH_IRQ_H | 2 | #define __ASM_SH_IRQ_H |
3 | 3 | ||
4 | /* | ||
5 | * | ||
6 | * linux/include/asm-sh/irq.h | ||
7 | * | ||
8 | * Copyright (C) 1999 Niibe Yutaka & Takeshi Yaegashi | ||
9 | * Copyright (C) 2000 Kazumoto Kojima | ||
10 | * Copyright (C) 2003 Paul Mundt | ||
11 | * | ||
12 | */ | ||
13 | |||
14 | #include <asm/machvec.h> | 4 | #include <asm/machvec.h> |
15 | #include <asm/ptrace.h> /* for pt_regs */ | 5 | #include <asm/ptrace.h> /* for pt_regs */ |
16 | 6 | ||
17 | #ifndef CONFIG_CPU_SUBTYPE_SH7780 | ||
18 | |||
19 | #define INTC_DMAC0_MSK 0 | ||
20 | |||
21 | #if defined(CONFIG_CPU_SH3) | ||
22 | #define INTC_IPRA 0xfffffee2UL | ||
23 | #define INTC_IPRB 0xfffffee4UL | ||
24 | #elif defined(CONFIG_CPU_SH4) | ||
25 | #define INTC_IPRA 0xffd00004UL | ||
26 | #define INTC_IPRB 0xffd00008UL | ||
27 | #define INTC_IPRC 0xffd0000cUL | ||
28 | #define INTC_IPRD 0xffd00010UL | ||
29 | #endif | ||
30 | |||
31 | #define TIMER_IRQ 16 | ||
32 | #define TIMER_IPR_ADDR INTC_IPRA | ||
33 | #define TIMER_IPR_POS 3 | ||
34 | #define TIMER_PRIORITY 2 | ||
35 | |||
36 | #define TIMER1_IRQ 17 | ||
37 | #define TIMER1_IPR_ADDR INTC_IPRA | ||
38 | #define TIMER1_IPR_POS 2 | ||
39 | #define TIMER1_PRIORITY 4 | ||
40 | |||
41 | #define RTC_IRQ 22 | ||
42 | #define RTC_IPR_ADDR INTC_IPRA | ||
43 | #define RTC_IPR_POS 0 | ||
44 | #define RTC_PRIORITY TIMER_PRIORITY | ||
45 | |||
46 | #if defined(CONFIG_CPU_SH3) | ||
47 | #define DMTE0_IRQ 48 | ||
48 | #define DMTE1_IRQ 49 | ||
49 | #define DMTE2_IRQ 50 | ||
50 | #define DMTE3_IRQ 51 | ||
51 | #define DMA_IPR_ADDR INTC_IPRE | ||
52 | #define DMA_IPR_POS 3 | ||
53 | #define DMA_PRIORITY 7 | ||
54 | #if defined(CONFIG_CPU_SUBTYPE_SH7300) | ||
55 | /* TMU2 */ | ||
56 | #define TIMER2_IRQ 18 | ||
57 | #define TIMER2_IPR_ADDR INTC_IPRA | ||
58 | #define TIMER2_IPR_POS 1 | ||
59 | #define TIMER2_PRIORITY 2 | ||
60 | |||
61 | /* WDT */ | ||
62 | #define WDT_IRQ 27 | ||
63 | #define WDT_IPR_ADDR INTC_IPRB | ||
64 | #define WDT_IPR_POS 3 | ||
65 | #define WDT_PRIORITY 2 | ||
66 | |||
67 | /* SIM (SIM Card Module) */ | ||
68 | #define SIM_ERI_IRQ 23 | ||
69 | #define SIM_RXI_IRQ 24 | ||
70 | #define SIM_TXI_IRQ 25 | ||
71 | #define SIM_TEND_IRQ 26 | ||
72 | #define SIM_IPR_ADDR INTC_IPRB | ||
73 | #define SIM_IPR_POS 1 | ||
74 | #define SIM_PRIORITY 2 | ||
75 | |||
76 | /* VIO (Video I/O) */ | ||
77 | #define VIO_IRQ 52 | ||
78 | #define VIO_IPR_ADDR INTC_IPRE | ||
79 | #define VIO_IPR_POS 2 | ||
80 | #define VIO_PRIORITY 2 | ||
81 | |||
82 | /* MFI (Multi Functional Interface) */ | ||
83 | #define MFI_IRQ 56 | ||
84 | #define MFI_IPR_ADDR INTC_IPRE | ||
85 | #define MFI_IPR_POS 1 | ||
86 | #define MFI_PRIORITY 2 | ||
87 | |||
88 | /* VPU (Video Processing Unit) */ | ||
89 | #define VPU_IRQ 60 | ||
90 | #define VPU_IPR_ADDR INTC_IPRE | ||
91 | #define VPU_IPR_POS 0 | ||
92 | #define VPU_PRIORITY 2 | ||
93 | |||
94 | /* KEY (Key Scan Interface) */ | ||
95 | #define KEY_IRQ 79 | ||
96 | #define KEY_IPR_ADDR INTC_IPRF | ||
97 | #define KEY_IPR_POS 3 | ||
98 | #define KEY_PRIORITY 2 | ||
99 | |||
100 | /* CMT (Compare Match Timer) */ | ||
101 | #define CMT_IRQ 104 | ||
102 | #define CMT_IPR_ADDR INTC_IPRF | ||
103 | #define CMT_IPR_POS 0 | ||
104 | #define CMT_PRIORITY 2 | ||
105 | |||
106 | /* DMAC(1) */ | ||
107 | #define DMTE0_IRQ 48 | ||
108 | #define DMTE1_IRQ 49 | ||
109 | #define DMTE2_IRQ 50 | ||
110 | #define DMTE3_IRQ 51 | ||
111 | #define DMA1_IPR_ADDR INTC_IPRE | ||
112 | #define DMA1_IPR_POS 3 | ||
113 | #define DMA1_PRIORITY 7 | ||
114 | |||
115 | /* DMAC(2) */ | ||
116 | #define DMTE4_IRQ 76 | ||
117 | #define DMTE5_IRQ 77 | ||
118 | #define DMA2_IPR_ADDR INTC_IPRF | ||
119 | #define DMA2_IPR_POS 2 | ||
120 | #define DMA2_PRIORITY 7 | ||
121 | |||
122 | /* SIOF0 */ | ||
123 | #define SIOF0_IRQ 84 | ||
124 | #define SIOF0_IPR_ADDR INTC_IPRH | ||
125 | #define SIOF0_IPR_POS 3 | ||
126 | #define SIOF0_PRIORITY 3 | ||
127 | |||
128 | /* FLCTL (Flash Memory Controller) */ | ||
129 | #define FLSTE_IRQ 92 | ||
130 | #define FLTEND_IRQ 93 | ||
131 | #define FLTRQ0_IRQ 94 | ||
132 | #define FLTRQ1_IRQ 95 | ||
133 | #define FLCTL_IPR_ADDR INTC_IPRH | ||
134 | #define FLCTL_IPR_POS 1 | ||
135 | #define FLCTL_PRIORITY 3 | ||
136 | |||
137 | /* IIC (IIC Bus Interface) */ | ||
138 | #define IIC_ALI_IRQ 96 | ||
139 | #define IIC_TACKI_IRQ 97 | ||
140 | #define IIC_WAITI_IRQ 98 | ||
141 | #define IIC_DTEI_IRQ 99 | ||
142 | #define IIC_IPR_ADDR INTC_IPRH | ||
143 | #define IIC_IPR_POS 0 | ||
144 | #define IIC_PRIORITY 3 | ||
145 | |||
146 | /* SIO0 */ | ||
147 | #define SIO0_IRQ 88 | ||
148 | #define SIO0_IPR_ADDR INTC_IPRI | ||
149 | #define SIO0_IPR_POS 3 | ||
150 | #define SIO0_PRIORITY 3 | ||
151 | |||
152 | /* SIU (Sound Interface Unit) */ | ||
153 | #define SIU_IRQ 108 | ||
154 | #define SIU_IPR_ADDR INTC_IPRJ | ||
155 | #define SIU_IPR_POS 1 | ||
156 | #define SIU_PRIORITY 3 | ||
157 | |||
158 | #endif | ||
159 | #elif defined(CONFIG_CPU_SH4) | ||
160 | #define DMTE0_IRQ 34 | ||
161 | #define DMTE1_IRQ 35 | ||
162 | #define DMTE2_IRQ 36 | ||
163 | #define DMTE3_IRQ 37 | ||
164 | #define DMTE4_IRQ 44 /* 7751R only */ | ||
165 | #define DMTE5_IRQ 45 /* 7751R only */ | ||
166 | #define DMTE6_IRQ 46 /* 7751R only */ | ||
167 | #define DMTE7_IRQ 47 /* 7751R only */ | ||
168 | #define DMAE_IRQ 38 | ||
169 | #define DMA_IPR_ADDR INTC_IPRC | ||
170 | #define DMA_IPR_POS 2 | ||
171 | #define DMA_PRIORITY 7 | ||
172 | #endif | ||
173 | |||
174 | #if defined (CONFIG_CPU_SUBTYPE_SH7707) || defined (CONFIG_CPU_SUBTYPE_SH7708) || \ | ||
175 | defined (CONFIG_CPU_SUBTYPE_SH7709) || defined (CONFIG_CPU_SUBTYPE_SH7750) || \ | ||
176 | defined (CONFIG_CPU_SUBTYPE_SH7751) || defined (CONFIG_CPU_SUBTYPE_SH7706) | ||
177 | #define SCI_ERI_IRQ 23 | ||
178 | #define SCI_RXI_IRQ 24 | ||
179 | #define SCI_TXI_IRQ 25 | ||
180 | #define SCI_IPR_ADDR INTC_IPRB | ||
181 | #define SCI_IPR_POS 1 | ||
182 | #define SCI_PRIORITY 3 | ||
183 | #endif | ||
184 | |||
185 | #if defined(CONFIG_CPU_SUBTYPE_SH7300) | ||
186 | #define SCIF0_IRQ 80 | ||
187 | #define SCIF0_IPR_ADDR INTC_IPRG | ||
188 | #define SCIF0_IPR_POS 3 | ||
189 | #define SCIF0_PRIORITY 3 | ||
190 | #elif defined(CONFIG_CPU_SUBTYPE_SH7705) || \ | ||
191 | defined(CONFIG_CPU_SUBTYPE_SH7706) || \ | ||
192 | defined(CONFIG_CPU_SUBTYPE_SH7707) || \ | ||
193 | defined(CONFIG_CPU_SUBTYPE_SH7709) | ||
194 | #define SCIF_ERI_IRQ 56 | ||
195 | #define SCIF_RXI_IRQ 57 | ||
196 | #define SCIF_BRI_IRQ 58 | ||
197 | #define SCIF_TXI_IRQ 59 | ||
198 | #define SCIF_IPR_ADDR INTC_IPRE | ||
199 | #define SCIF_IPR_POS 1 | ||
200 | #define SCIF_PRIORITY 3 | ||
201 | |||
202 | #define IRDA_ERI_IRQ 52 | ||
203 | #define IRDA_RXI_IRQ 53 | ||
204 | #define IRDA_BRI_IRQ 54 | ||
205 | #define IRDA_TXI_IRQ 55 | ||
206 | #define IRDA_IPR_ADDR INTC_IPRE | ||
207 | #define IRDA_IPR_POS 2 | ||
208 | #define IRDA_PRIORITY 3 | ||
209 | #elif defined(CONFIG_CPU_SUBTYPE_SH7750) || defined(CONFIG_CPU_SUBTYPE_SH7751) || \ | ||
210 | defined(CONFIG_CPU_SUBTYPE_ST40STB1) || defined(CONFIG_CPU_SUBTYPE_SH4_202) | ||
211 | #define SCIF_ERI_IRQ 40 | ||
212 | #define SCIF_RXI_IRQ 41 | ||
213 | #define SCIF_BRI_IRQ 42 | ||
214 | #define SCIF_TXI_IRQ 43 | ||
215 | #define SCIF_IPR_ADDR INTC_IPRC | ||
216 | #define SCIF_IPR_POS 1 | ||
217 | #define SCIF_PRIORITY 3 | ||
218 | #if defined(CONFIG_CPU_SUBTYPE_ST40STB1) | ||
219 | #define SCIF1_ERI_IRQ 23 | ||
220 | #define SCIF1_RXI_IRQ 24 | ||
221 | #define SCIF1_BRI_IRQ 25 | ||
222 | #define SCIF1_TXI_IRQ 26 | ||
223 | #define SCIF1_IPR_ADDR INTC_IPRB | ||
224 | #define SCIF1_IPR_POS 1 | ||
225 | #define SCIF1_PRIORITY 3 | ||
226 | #endif /* ST40STB1 */ | ||
227 | |||
228 | #endif /* 775x / SH4-202 / ST40STB1 */ | ||
229 | #endif /* 7780 */ | ||
230 | |||
231 | /* NR_IRQS is made from three components: | 7 | /* NR_IRQS is made from three components: |
232 | * 1. ONCHIP_NR_IRQS - number of IRLS + on-chip peripherial modules | 8 | * 1. ONCHIP_NR_IRQS - number of IRLS + on-chip peripherial modules |
233 | * 2. PINT_NR_IRQS - number of PINT interrupts | 9 | * 2. PINT_NR_IRQS - number of PINT interrupts |
@@ -265,6 +41,10 @@ | |||
265 | # define ONCHIP_NR_IRQS 109 | 41 | # define ONCHIP_NR_IRQS 109 |
266 | #elif defined(CONFIG_CPU_SUBTYPE_SH7780) | 42 | #elif defined(CONFIG_CPU_SUBTYPE_SH7780) |
267 | # define ONCHIP_NR_IRQS 111 | 43 | # define ONCHIP_NR_IRQS 111 |
44 | #elif defined(CONFIG_CPU_SUBTYPE_SH7206) | ||
45 | # define ONCHIP_NR_IRQS 256 | ||
46 | #elif defined(CONFIG_CPU_SUBTYPE_SH7619) | ||
47 | # define ONCHIP_NR_IRQS 128 | ||
268 | #elif defined(CONFIG_SH_UNKNOWN) /* Most be last */ | 48 | #elif defined(CONFIG_SH_UNKNOWN) /* Most be last */ |
269 | # define ONCHIP_NR_IRQS 144 | 49 | # define ONCHIP_NR_IRQS 144 |
270 | #endif | 50 | #endif |
@@ -312,9 +92,11 @@ | |||
312 | /* NR_IRQS. 1+2+3 */ | 92 | /* NR_IRQS. 1+2+3 */ |
313 | #define NR_IRQS (ONCHIP_NR_IRQS + PINT_NR_IRQS + OFFCHIP_NR_IRQS) | 93 | #define NR_IRQS (ONCHIP_NR_IRQS + PINT_NR_IRQS + OFFCHIP_NR_IRQS) |
314 | 94 | ||
315 | extern void disable_irq(unsigned int); | 95 | /* |
316 | extern void disable_irq_nosync(unsigned int); | 96 | * Convert back and forth between INTEVT and IRQ values. |
317 | extern void enable_irq(unsigned int); | 97 | */ |
98 | #define evt2irq(evt) (((evt) >> 5) - 16) | ||
99 | #define irq2evt(irq) (((irq) + 16) << 5) | ||
318 | 100 | ||
319 | /* | 101 | /* |
320 | * Simple Mask Register Support | 102 | * Simple Mask Register Support |
@@ -327,362 +109,36 @@ extern unsigned short *irq_mask_register; | |||
327 | */ | 109 | */ |
328 | void init_IRQ_pint(void); | 110 | void init_IRQ_pint(void); |
329 | 111 | ||
112 | /* | ||
113 | * The shift value is now the number of bits to shift, not the number of | ||
114 | * bits/4. This is to make it easier to read the value directly from the | ||
115 | * datasheets. The IPR address, addr, will be set from ipr_idx via the | ||
116 | * map_ipridx_to_addr function. | ||
117 | */ | ||
330 | struct ipr_data { | 118 | struct ipr_data { |
331 | unsigned int irq; | 119 | unsigned int irq; |
332 | unsigned int addr; /* Address of Interrupt Priority Register */ | 120 | int ipr_idx; /* Index for the IPR registered */ |
333 | int shift; /* Shifts of the 16-bit data */ | 121 | int shift; /* Number of bits to shift the data */ |
334 | int priority; /* The priority */ | 122 | int priority; /* The priority */ |
123 | unsigned int addr; /* Address of Interrupt Priority Register */ | ||
335 | }; | 124 | }; |
336 | 125 | ||
337 | /* | 126 | /* |
338 | * Function for "on chip support modules". | 127 | * Given an IPR IDX, map the value to an IPR register address. |
339 | */ | 128 | */ |
340 | extern void make_ipr_irq(struct ipr_data *table, unsigned int nr_irqs); | 129 | unsigned int map_ipridx_to_addr(int idx); |
341 | extern void make_imask_irq(unsigned int irq); | ||
342 | |||
343 | #if defined(CONFIG_CPU_SUBTYPE_SH7300) | ||
344 | #undef INTC_IPRA | ||
345 | #undef INTC_IPRB | ||
346 | #define INTC_IPRA 0xA414FEE2UL | ||
347 | #define INTC_IPRB 0xA414FEE4UL | ||
348 | #define INTC_IPRC 0xA4140016UL | ||
349 | #define INTC_IPRD 0xA4140018UL | ||
350 | #define INTC_IPRE 0xA414001AUL | ||
351 | #define INTC_IPRF 0xA4080000UL | ||
352 | #define INTC_IPRG 0xA4080002UL | ||
353 | #define INTC_IPRH 0xA4080004UL | ||
354 | #define INTC_IPRI 0xA4080006UL | ||
355 | #define INTC_IPRJ 0xA4080008UL | ||
356 | |||
357 | #define INTC_IMR0 0xA4080040UL | ||
358 | #define INTC_IMR1 0xA4080042UL | ||
359 | #define INTC_IMR2 0xA4080044UL | ||
360 | #define INTC_IMR3 0xA4080046UL | ||
361 | #define INTC_IMR4 0xA4080048UL | ||
362 | #define INTC_IMR5 0xA408004AUL | ||
363 | #define INTC_IMR6 0xA408004CUL | ||
364 | #define INTC_IMR7 0xA408004EUL | ||
365 | #define INTC_IMR8 0xA4080050UL | ||
366 | #define INTC_IMR9 0xA4080052UL | ||
367 | #define INTC_IMR10 0xA4080054UL | ||
368 | |||
369 | #define INTC_IMCR0 0xA4080060UL | ||
370 | #define INTC_IMCR1 0xA4080062UL | ||
371 | #define INTC_IMCR2 0xA4080064UL | ||
372 | #define INTC_IMCR3 0xA4080066UL | ||
373 | #define INTC_IMCR4 0xA4080068UL | ||
374 | #define INTC_IMCR5 0xA408006AUL | ||
375 | #define INTC_IMCR6 0xA408006CUL | ||
376 | #define INTC_IMCR7 0xA408006EUL | ||
377 | #define INTC_IMCR8 0xA4080070UL | ||
378 | #define INTC_IMCR9 0xA4080072UL | ||
379 | #define INTC_IMCR10 0xA4080074UL | ||
380 | |||
381 | #define INTC_ICR0 0xA414FEE0UL | ||
382 | #define INTC_ICR1 0xA4140010UL | ||
383 | |||
384 | #define INTC_IRR0 0xA4140004UL | ||
385 | |||
386 | #define PORT_PACR 0xA4050100UL | ||
387 | #define PORT_PBCR 0xA4050102UL | ||
388 | #define PORT_PCCR 0xA4050104UL | ||
389 | #define PORT_PDCR 0xA4050106UL | ||
390 | #define PORT_PECR 0xA4050108UL | ||
391 | #define PORT_PFCR 0xA405010AUL | ||
392 | #define PORT_PGCR 0xA405010CUL | ||
393 | #define PORT_PHCR 0xA405010EUL | ||
394 | #define PORT_PJCR 0xA4050110UL | ||
395 | #define PORT_PKCR 0xA4050112UL | ||
396 | #define PORT_PLCR 0xA4050114UL | ||
397 | #define PORT_SCPCR 0xA4050116UL | ||
398 | #define PORT_PMCR 0xA4050118UL | ||
399 | #define PORT_PNCR 0xA405011AUL | ||
400 | #define PORT_PQCR 0xA405011CUL | ||
401 | |||
402 | #define PORT_PSELA 0xA4050140UL | ||
403 | #define PORT_PSELB 0xA4050142UL | ||
404 | #define PORT_PSELC 0xA4050144UL | ||
405 | |||
406 | #define PORT_HIZCRA 0xA4050146UL | ||
407 | #define PORT_HIZCRB 0xA4050148UL | ||
408 | #define PORT_DRVCR 0xA4050150UL | ||
409 | |||
410 | #define PORT_PADR 0xA4050120UL | ||
411 | #define PORT_PBDR 0xA4050122UL | ||
412 | #define PORT_PCDR 0xA4050124UL | ||
413 | #define PORT_PDDR 0xA4050126UL | ||
414 | #define PORT_PEDR 0xA4050128UL | ||
415 | #define PORT_PFDR 0xA405012AUL | ||
416 | #define PORT_PGDR 0xA405012CUL | ||
417 | #define PORT_PHDR 0xA405012EUL | ||
418 | #define PORT_PJDR 0xA4050130UL | ||
419 | #define PORT_PKDR 0xA4050132UL | ||
420 | #define PORT_PLDR 0xA4050134UL | ||
421 | #define PORT_SCPDR 0xA4050136UL | ||
422 | #define PORT_PMDR 0xA4050138UL | ||
423 | #define PORT_PNDR 0xA405013AUL | ||
424 | #define PORT_PQDR 0xA405013CUL | ||
425 | |||
426 | #define IRQ0_IRQ 32 | ||
427 | #define IRQ1_IRQ 33 | ||
428 | #define IRQ2_IRQ 34 | ||
429 | #define IRQ3_IRQ 35 | ||
430 | #define IRQ4_IRQ 36 | ||
431 | #define IRQ5_IRQ 37 | ||
432 | |||
433 | #define IRQ0_IPR_ADDR INTC_IPRC | ||
434 | #define IRQ1_IPR_ADDR INTC_IPRC | ||
435 | #define IRQ2_IPR_ADDR INTC_IPRC | ||
436 | #define IRQ3_IPR_ADDR INTC_IPRC | ||
437 | #define IRQ4_IPR_ADDR INTC_IPRD | ||
438 | #define IRQ5_IPR_ADDR INTC_IPRD | ||
439 | |||
440 | #define IRQ0_IPR_POS 0 | ||
441 | #define IRQ1_IPR_POS 1 | ||
442 | #define IRQ2_IPR_POS 2 | ||
443 | #define IRQ3_IPR_POS 3 | ||
444 | #define IRQ4_IPR_POS 0 | ||
445 | #define IRQ5_IPR_POS 1 | ||
446 | 130 | ||
447 | #define IRQ0_PRIORITY 1 | 131 | /* |
448 | #define IRQ1_PRIORITY 1 | 132 | * Enable individual interrupt mode for external IPR IRQs. |
449 | #define IRQ2_PRIORITY 1 | 133 | */ |
450 | #define IRQ3_PRIORITY 1 | 134 | void ipr_irq_enable_irlm(void); |
451 | #define IRQ4_PRIORITY 1 | ||
452 | #define IRQ5_PRIORITY 1 | ||
453 | |||
454 | extern int ipr_irq_demux(int irq); | ||
455 | #define __irq_demux(irq) ipr_irq_demux(irq) | ||
456 | |||
457 | #elif defined(CONFIG_CPU_SUBTYPE_SH7604) | ||
458 | #define INTC_IPRA 0xfffffee2UL | ||
459 | #define INTC_IPRB 0xfffffe60UL | ||
460 | |||
461 | #define INTC_VCRA 0xfffffe62UL | ||
462 | #define INTC_VCRB 0xfffffe64UL | ||
463 | #define INTC_VCRC 0xfffffe66UL | ||
464 | #define INTC_VCRD 0xfffffe68UL | ||
465 | |||
466 | #define INTC_VCRWDT 0xfffffee4UL | ||
467 | #define INTC_VCRDIV 0xffffff0cUL | ||
468 | #define INTC_VCRDMA0 0xffffffa0UL | ||
469 | #define INTC_VCRDMA1 0xffffffa8UL | ||
470 | |||
471 | #define INTC_ICR 0xfffffee0UL | ||
472 | #elif defined(CONFIG_CPU_SUBTYPE_SH7705) || \ | ||
473 | defined(CONFIG_CPU_SUBTYPE_SH7706) || \ | ||
474 | defined(CONFIG_CPU_SUBTYPE_SH7707) || \ | ||
475 | defined(CONFIG_CPU_SUBTYPE_SH7709) || \ | ||
476 | defined(CONFIG_CPU_SUBTYPE_SH7710) | ||
477 | #define INTC_IRR0 0xa4000004UL | ||
478 | #define INTC_IRR1 0xa4000006UL | ||
479 | #define INTC_IRR2 0xa4000008UL | ||
480 | |||
481 | #define INTC_ICR0 0xfffffee0UL | ||
482 | #define INTC_ICR1 0xa4000010UL | ||
483 | #define INTC_ICR2 0xa4000012UL | ||
484 | #define INTC_INTER 0xa4000014UL | ||
485 | |||
486 | #define INTC_IPRC 0xa4000016UL | ||
487 | #define INTC_IPRD 0xa4000018UL | ||
488 | #define INTC_IPRE 0xa400001aUL | ||
489 | #if defined(CONFIG_CPU_SUBTYPE_SH7707) | ||
490 | #define INTC_IPRF 0xa400001cUL | ||
491 | #elif defined(CONFIG_CPU_SUBTYPE_SH7705) | ||
492 | #define INTC_IPRF 0xa4080000UL | ||
493 | #define INTC_IPRG 0xa4080002UL | ||
494 | #define INTC_IPRH 0xa4080004UL | ||
495 | #elif defined(CONFIG_CPU_SUBTYPE_SH7710) | ||
496 | /* Interrupt Controller Registers */ | ||
497 | #undef INTC_IPRA | ||
498 | #undef INTC_IPRB | ||
499 | #define INTC_IPRA 0xA414FEE2UL | ||
500 | #define INTC_IPRB 0xA414FEE4UL | ||
501 | #define INTC_IPRF 0xA4080000UL | ||
502 | #define INTC_IPRG 0xA4080002UL | ||
503 | #define INTC_IPRH 0xA4080004UL | ||
504 | #define INTC_IPRI 0xA4080006UL | ||
505 | |||
506 | #undef INTC_ICR0 | ||
507 | #undef INTC_ICR1 | ||
508 | #define INTC_ICR0 0xA414FEE0UL | ||
509 | #define INTC_ICR1 0xA4140010UL | ||
510 | |||
511 | #define INTC_IRR0 0xa4000004UL | ||
512 | #define INTC_IRR1 0xa4000006UL | ||
513 | #define INTC_IRR2 0xa4000008UL | ||
514 | #define INTC_IRR3 0xa400000AUL | ||
515 | #define INTC_IRR4 0xa400000CUL | ||
516 | #define INTC_IRR5 0xa4080020UL | ||
517 | #define INTC_IRR7 0xa4080024UL | ||
518 | #define INTC_IRR8 0xa4080026UL | ||
519 | |||
520 | /* Interrupt numbers */ | ||
521 | #define TIMER2_IRQ 18 | ||
522 | #define TIMER2_IPR_ADDR INTC_IPRA | ||
523 | #define TIMER2_IPR_POS 1 | ||
524 | #define TIMER2_PRIORITY 2 | ||
525 | |||
526 | /* WDT */ | ||
527 | #define WDT_IRQ 27 | ||
528 | #define WDT_IPR_ADDR INTC_IPRB | ||
529 | #define WDT_IPR_POS 3 | ||
530 | #define WDT_PRIORITY 2 | ||
531 | |||
532 | #define SCIF0_ERI_IRQ 52 | ||
533 | #define SCIF0_RXI_IRQ 53 | ||
534 | #define SCIF0_BRI_IRQ 54 | ||
535 | #define SCIF0_TXI_IRQ 55 | ||
536 | #define SCIF0_IPR_ADDR INTC_IPRE | ||
537 | #define SCIF0_IPR_POS 2 | ||
538 | #define SCIF0_PRIORITY 3 | ||
539 | |||
540 | #define DMTE4_IRQ 76 | ||
541 | #define DMTE5_IRQ 77 | ||
542 | #define DMA2_IPR_ADDR INTC_IPRF | ||
543 | #define DMA2_IPR_POS 2 | ||
544 | #define DMA2_PRIORITY 7 | ||
545 | |||
546 | #define IPSEC_IRQ 79 | ||
547 | #define IPSEC_IPR_ADDR INTC_IPRF | ||
548 | #define IPSEC_IPR_POS 3 | ||
549 | #define IPSEC_PRIORITY 3 | ||
550 | |||
551 | /* EDMAC */ | ||
552 | #define EDMAC0_IRQ 80 | ||
553 | #define EDMAC0_IPR_ADDR INTC_IPRG | ||
554 | #define EDMAC0_IPR_POS 3 | ||
555 | #define EDMAC0_PRIORITY 3 | ||
556 | |||
557 | #define EDMAC1_IRQ 81 | ||
558 | #define EDMAC1_IPR_ADDR INTC_IPRG | ||
559 | #define EDMAC1_IPR_POS 2 | ||
560 | #define EDMAC1_PRIORITY 3 | ||
561 | |||
562 | #define EDMAC2_IRQ 82 | ||
563 | #define EDMAC2_IPR_ADDR INTC_IPRG | ||
564 | #define EDMAC2_IPR_POS 1 | ||
565 | #define EDMAC2_PRIORITY 3 | ||
566 | |||
567 | /* SIOF */ | ||
568 | #define SIOF0_ERI_IRQ 96 | ||
569 | #define SIOF0_TXI_IRQ 97 | ||
570 | #define SIOF0_RXI_IRQ 98 | ||
571 | #define SIOF0_CCI_IRQ 99 | ||
572 | #define SIOF0_IPR_ADDR INTC_IPRH | ||
573 | #define SIOF0_IPR_POS 0 | ||
574 | #define SIOF0_PRIORITY 7 | ||
575 | |||
576 | #define SIOF1_ERI_IRQ 100 | ||
577 | #define SIOF1_TXI_IRQ 101 | ||
578 | #define SIOF1_RXI_IRQ 102 | ||
579 | #define SIOF1_CCI_IRQ 103 | ||
580 | #define SIOF1_IPR_ADDR INTC_IPRI | ||
581 | #define SIOF1_IPR_POS 1 | ||
582 | #define SIOF1_PRIORITY 7 | ||
583 | #endif /* CONFIG_CPU_SUBTYPE_SH7710 */ | ||
584 | |||
585 | #if defined(CONFIG_CPU_SUBTYPE_SH7710) | ||
586 | #define PORT_PACR 0xa4050100UL | ||
587 | #define PORT_PBCR 0xa4050102UL | ||
588 | #define PORT_PCCR 0xa4050104UL | ||
589 | #define PORT_PETCR 0xa4050106UL | ||
590 | #define PORT_PADR 0xa4050120UL | ||
591 | #define PORT_PBDR 0xa4050122UL | ||
592 | #define PORT_PCDR 0xa4050124UL | ||
593 | #else | ||
594 | #define PORT_PACR 0xa4000100UL | ||
595 | #define PORT_PBCR 0xa4000102UL | ||
596 | #define PORT_PCCR 0xa4000104UL | ||
597 | #define PORT_PFCR 0xa400010aUL | ||
598 | #define PORT_PADR 0xa4000120UL | ||
599 | #define PORT_PBDR 0xa4000122UL | ||
600 | #define PORT_PCDR 0xa4000124UL | ||
601 | #define PORT_PFDR 0xa400012aUL | ||
602 | #endif | ||
603 | |||
604 | #define IRQ0_IRQ 32 | ||
605 | #define IRQ1_IRQ 33 | ||
606 | #define IRQ2_IRQ 34 | ||
607 | #define IRQ3_IRQ 35 | ||
608 | #define IRQ4_IRQ 36 | ||
609 | #define IRQ5_IRQ 37 | ||
610 | |||
611 | #define IRQ0_IPR_ADDR INTC_IPRC | ||
612 | #define IRQ1_IPR_ADDR INTC_IPRC | ||
613 | #define IRQ2_IPR_ADDR INTC_IPRC | ||
614 | #define IRQ3_IPR_ADDR INTC_IPRC | ||
615 | #define IRQ4_IPR_ADDR INTC_IPRD | ||
616 | #define IRQ5_IPR_ADDR INTC_IPRD | ||
617 | |||
618 | #define IRQ0_IPR_POS 0 | ||
619 | #define IRQ1_IPR_POS 1 | ||
620 | #define IRQ2_IPR_POS 2 | ||
621 | #define IRQ3_IPR_POS 3 | ||
622 | #define IRQ4_IPR_POS 0 | ||
623 | #define IRQ5_IPR_POS 1 | ||
624 | |||
625 | #define IRQ0_PRIORITY 1 | ||
626 | #define IRQ1_PRIORITY 1 | ||
627 | #define IRQ2_PRIORITY 1 | ||
628 | #define IRQ3_PRIORITY 1 | ||
629 | #define IRQ4_PRIORITY 1 | ||
630 | #define IRQ5_PRIORITY 1 | ||
631 | |||
632 | #define PINT0_IRQ 40 | ||
633 | #define PINT8_IRQ 41 | ||
634 | |||
635 | #define PINT0_IPR_ADDR INTC_IPRD | ||
636 | #define PINT8_IPR_ADDR INTC_IPRD | ||
637 | |||
638 | #define PINT0_IPR_POS 3 | ||
639 | #define PINT8_IPR_POS 2 | ||
640 | #define PINT0_PRIORITY 2 | ||
641 | #define PINT8_PRIORITY 2 | ||
642 | |||
643 | extern int ipr_irq_demux(int irq); | ||
644 | #define __irq_demux(irq) ipr_irq_demux(irq) | ||
645 | #endif /* CONFIG_CPU_SUBTYPE_SH7707 || CONFIG_CPU_SUBTYPE_SH7709 */ | ||
646 | |||
647 | #if defined(CONFIG_CPU_SUBTYPE_SH7750) || defined(CONFIG_CPU_SUBTYPE_SH7751) || \ | ||
648 | defined(CONFIG_CPU_SUBTYPE_ST40STB1) || defined(CONFIG_CPU_SUBTYPE_SH4_202) | ||
649 | #define INTC_ICR 0xffd00000 | ||
650 | #define INTC_ICR_NMIL (1<<15) | ||
651 | #define INTC_ICR_MAI (1<<14) | ||
652 | #define INTC_ICR_NMIB (1<<9) | ||
653 | #define INTC_ICR_NMIE (1<<8) | ||
654 | #define INTC_ICR_IRLM (1<<7) | ||
655 | #endif | ||
656 | |||
657 | #ifdef CONFIG_CPU_SUBTYPE_SH7780 | ||
658 | #include <asm/irq-sh7780.h> | ||
659 | #endif | ||
660 | |||
661 | /* SH with INTC2-style interrupts */ | ||
662 | #ifdef CONFIG_CPU_HAS_INTC2_IRQ | ||
663 | #if defined(CONFIG_CPU_SUBTYPE_ST40STB1) | ||
664 | #define INTC2_BASE 0xfe080000 | ||
665 | #define INTC2_FIRST_IRQ 64 | ||
666 | #define INTC2_INTREQ_OFFSET 0x20 | ||
667 | #define INTC2_INTMSK_OFFSET 0x40 | ||
668 | #define INTC2_INTMSKCLR_OFFSET 0x60 | ||
669 | #define NR_INTC2_IRQS 25 | ||
670 | #elif defined(CONFIG_CPU_SUBTYPE_SH7760) | ||
671 | #define INTC2_BASE 0xfe080000 | ||
672 | #define INTC2_FIRST_IRQ 48 /* INTEVT 0x800 */ | ||
673 | #define INTC2_INTREQ_OFFSET 0x20 | ||
674 | #define INTC2_INTMSK_OFFSET 0x40 | ||
675 | #define INTC2_INTMSKCLR_OFFSET 0x60 | ||
676 | #define NR_INTC2_IRQS 64 | ||
677 | #elif defined(CONFIG_CPU_SUBTYPE_SH7780) | ||
678 | #define INTC2_BASE 0xffd40000 | ||
679 | #define INTC2_FIRST_IRQ 21 | ||
680 | #define INTC2_INTMSK_OFFSET (0x38) | ||
681 | #define INTC2_INTMSKCLR_OFFSET (0x3c) | ||
682 | #define NR_INTC2_IRQS 60 | ||
683 | #endif | ||
684 | 135 | ||
685 | #define INTC2_INTPRI_OFFSET 0x00 | 136 | /* |
137 | * Function for "on chip support modules". | ||
138 | */ | ||
139 | void make_ipr_irq(struct ipr_data *table, unsigned int nr_irqs); | ||
140 | void make_imask_irq(unsigned int irq); | ||
141 | void init_IRQ_ipr(void); | ||
686 | 142 | ||
687 | struct intc2_data { | 143 | struct intc2_data { |
688 | unsigned short irq; | 144 | unsigned short irq; |
@@ -693,20 +149,14 @@ struct intc2_data { | |||
693 | 149 | ||
694 | void make_intc2_irq(struct intc2_data *, unsigned int nr_irqs); | 150 | void make_intc2_irq(struct intc2_data *, unsigned int nr_irqs); |
695 | void init_IRQ_intc2(void); | 151 | void init_IRQ_intc2(void); |
696 | #endif | ||
697 | |||
698 | extern int shmse_irq_demux(int irq); | ||
699 | 152 | ||
700 | static inline int generic_irq_demux(int irq) | 153 | static inline int generic_irq_demux(int irq) |
701 | { | 154 | { |
702 | return irq; | 155 | return irq; |
703 | } | 156 | } |
704 | 157 | ||
705 | #ifndef __irq_demux | ||
706 | #define __irq_demux(irq) (irq) | ||
707 | #endif | ||
708 | #define irq_canonicalize(irq) (irq) | 158 | #define irq_canonicalize(irq) (irq) |
709 | #define irq_demux(irq) __irq_demux(sh_mv.mv_irq_demux(irq)) | 159 | #define irq_demux(irq) sh_mv.mv_irq_demux(irq) |
710 | 160 | ||
711 | #ifdef CONFIG_4KSTACKS | 161 | #ifdef CONFIG_4KSTACKS |
712 | extern void irq_ctx_init(int cpu); | 162 | extern void irq_ctx_init(int cpu); |
@@ -717,12 +167,4 @@ extern void irq_ctx_exit(int cpu); | |||
717 | # define irq_ctx_exit(cpu) do { } while (0) | 167 | # define irq_ctx_exit(cpu) do { } while (0) |
718 | #endif | 168 | #endif |
719 | 169 | ||
720 | #if defined(CONFIG_CPU_SUBTYPE_SH73180) | ||
721 | #include <asm/irq-sh73180.h> | ||
722 | #endif | ||
723 | |||
724 | #if defined(CONFIG_CPU_SUBTYPE_SH7343) | ||
725 | #include <asm/irq-sh7343.h> | ||
726 | #endif | ||
727 | |||
728 | #endif /* __ASM_SH_IRQ_H */ | 170 | #endif /* __ASM_SH_IRQ_H */ |
diff --git a/include/asm-sh/irqflags.h b/include/asm-sh/irqflags.h new file mode 100644 index 000000000000..9dedc1b693e3 --- /dev/null +++ b/include/asm-sh/irqflags.h | |||
@@ -0,0 +1,123 @@ | |||
1 | #ifndef __ASM_SH_IRQFLAGS_H | ||
2 | #define __ASM_SH_IRQFLAGS_H | ||
3 | |||
4 | static inline void raw_local_irq_enable(void) | ||
5 | { | ||
6 | unsigned long __dummy0, __dummy1; | ||
7 | |||
8 | __asm__ __volatile__ ( | ||
9 | "stc sr, %0\n\t" | ||
10 | "and %1, %0\n\t" | ||
11 | #ifdef CONFIG_CPU_HAS_SR_RB | ||
12 | "stc r6_bank, %1\n\t" | ||
13 | "or %1, %0\n\t" | ||
14 | #endif | ||
15 | "ldc %0, sr\n\t" | ||
16 | : "=&r" (__dummy0), "=r" (__dummy1) | ||
17 | : "1" (~0x000000f0) | ||
18 | : "memory" | ||
19 | ); | ||
20 | } | ||
21 | |||
22 | static inline void raw_local_irq_disable(void) | ||
23 | { | ||
24 | unsigned long flags; | ||
25 | |||
26 | __asm__ __volatile__ ( | ||
27 | "stc sr, %0\n\t" | ||
28 | "or #0xf0, %0\n\t" | ||
29 | "ldc %0, sr\n\t" | ||
30 | : "=&z" (flags) | ||
31 | : /* no inputs */ | ||
32 | : "memory" | ||
33 | ); | ||
34 | } | ||
35 | |||
36 | static inline void set_bl_bit(void) | ||
37 | { | ||
38 | unsigned long __dummy0, __dummy1; | ||
39 | |||
40 | __asm__ __volatile__ ( | ||
41 | "stc sr, %0\n\t" | ||
42 | "or %2, %0\n\t" | ||
43 | "and %3, %0\n\t" | ||
44 | "ldc %0, sr\n\t" | ||
45 | : "=&r" (__dummy0), "=r" (__dummy1) | ||
46 | : "r" (0x10000000), "r" (0xffffff0f) | ||
47 | : "memory" | ||
48 | ); | ||
49 | } | ||
50 | |||
51 | static inline void clear_bl_bit(void) | ||
52 | { | ||
53 | unsigned long __dummy0, __dummy1; | ||
54 | |||
55 | __asm__ __volatile__ ( | ||
56 | "stc sr, %0\n\t" | ||
57 | "and %2, %0\n\t" | ||
58 | "ldc %0, sr\n\t" | ||
59 | : "=&r" (__dummy0), "=r" (__dummy1) | ||
60 | : "1" (~0x10000000) | ||
61 | : "memory" | ||
62 | ); | ||
63 | } | ||
64 | |||
65 | static inline unsigned long __raw_local_save_flags(void) | ||
66 | { | ||
67 | unsigned long flags; | ||
68 | |||
69 | __asm__ __volatile__ ( | ||
70 | "stc sr, %0\n\t" | ||
71 | "and #0xf0, %0\n\t" | ||
72 | : "=&z" (flags) | ||
73 | : /* no inputs */ | ||
74 | : "memory" | ||
75 | ); | ||
76 | |||
77 | return flags; | ||
78 | } | ||
79 | |||
80 | #define raw_local_save_flags(flags) \ | ||
81 | do { (flags) = __raw_local_save_flags(); } while (0) | ||
82 | |||
83 | static inline int raw_irqs_disabled_flags(unsigned long flags) | ||
84 | { | ||
85 | return (flags != 0); | ||
86 | } | ||
87 | |||
88 | static inline int raw_irqs_disabled(void) | ||
89 | { | ||
90 | unsigned long flags = __raw_local_save_flags(); | ||
91 | |||
92 | return raw_irqs_disabled_flags(flags); | ||
93 | } | ||
94 | |||
95 | static inline unsigned long __raw_local_irq_save(void) | ||
96 | { | ||
97 | unsigned long flags, __dummy; | ||
98 | |||
99 | __asm__ __volatile__ ( | ||
100 | "stc sr, %1\n\t" | ||
101 | "mov %1, %0\n\t" | ||
102 | "or #0xf0, %0\n\t" | ||
103 | "ldc %0, sr\n\t" | ||
104 | "mov %1, %0\n\t" | ||
105 | "and #0xf0, %0\n\t" | ||
106 | : "=&z" (flags), "=&r" (__dummy) | ||
107 | : /* no inputs */ | ||
108 | : "memory" | ||
109 | ); | ||
110 | |||
111 | return flags; | ||
112 | } | ||
113 | |||
114 | #define raw_local_irq_save(flags) \ | ||
115 | do { (flags) = __raw_local_irq_save(); } while (0) | ||
116 | |||
117 | static inline void raw_local_irq_restore(unsigned long flags) | ||
118 | { | ||
119 | if ((flags & 0xf0) != 0xf0) | ||
120 | raw_local_irq_enable(); | ||
121 | } | ||
122 | |||
123 | #endif /* __ASM_SH_IRQFLAGS_H */ | ||
diff --git a/include/asm-sh/mmu_context.h b/include/asm-sh/mmu_context.h index c7088efe579a..46f04e23bd45 100644 --- a/include/asm-sh/mmu_context.h +++ b/include/asm-sh/mmu_context.h | |||
@@ -10,7 +10,6 @@ | |||
10 | 10 | ||
11 | #include <asm/cpu/mmu_context.h> | 11 | #include <asm/cpu/mmu_context.h> |
12 | #include <asm/tlbflush.h> | 12 | #include <asm/tlbflush.h> |
13 | #include <asm/pgalloc.h> | ||
14 | #include <asm/uaccess.h> | 13 | #include <asm/uaccess.h> |
15 | #include <asm/io.h> | 14 | #include <asm/io.h> |
16 | 15 | ||
@@ -42,10 +41,8 @@ extern unsigned long mmu_context_cache; | |||
42 | /* | 41 | /* |
43 | * Get MMU context if needed. | 42 | * Get MMU context if needed. |
44 | */ | 43 | */ |
45 | static __inline__ void | 44 | static inline void get_mmu_context(struct mm_struct *mm) |
46 | get_mmu_context(struct mm_struct *mm) | ||
47 | { | 45 | { |
48 | extern void flush_tlb_all(void); | ||
49 | unsigned long mc = mmu_context_cache; | 46 | unsigned long mc = mmu_context_cache; |
50 | 47 | ||
51 | /* Check if we have old version of context. */ | 48 | /* Check if we have old version of context. */ |
@@ -61,6 +58,7 @@ get_mmu_context(struct mm_struct *mm) | |||
61 | * Flush all TLB and start new cycle. | 58 | * Flush all TLB and start new cycle. |
62 | */ | 59 | */ |
63 | flush_tlb_all(); | 60 | flush_tlb_all(); |
61 | |||
64 | /* | 62 | /* |
65 | * Fix version; Note that we avoid version #0 | 63 | * Fix version; Note that we avoid version #0 |
66 | * to distingush NO_CONTEXT. | 64 | * to distingush NO_CONTEXT. |
@@ -75,11 +73,10 @@ get_mmu_context(struct mm_struct *mm) | |||
75 | * Initialize the context related info for a new mm_struct | 73 | * Initialize the context related info for a new mm_struct |
76 | * instance. | 74 | * instance. |
77 | */ | 75 | */ |
78 | static __inline__ int init_new_context(struct task_struct *tsk, | 76 | static inline int init_new_context(struct task_struct *tsk, |
79 | struct mm_struct *mm) | 77 | struct mm_struct *mm) |
80 | { | 78 | { |
81 | mm->context.id = NO_CONTEXT; | 79 | mm->context.id = NO_CONTEXT; |
82 | |||
83 | return 0; | 80 | return 0; |
84 | } | 81 | } |
85 | 82 | ||
@@ -87,12 +84,12 @@ static __inline__ int init_new_context(struct task_struct *tsk, | |||
87 | * Destroy context related info for an mm_struct that is about | 84 | * Destroy context related info for an mm_struct that is about |
88 | * to be put to rest. | 85 | * to be put to rest. |
89 | */ | 86 | */ |
90 | static __inline__ void destroy_context(struct mm_struct *mm) | 87 | static inline void destroy_context(struct mm_struct *mm) |
91 | { | 88 | { |
92 | /* Do nothing */ | 89 | /* Do nothing */ |
93 | } | 90 | } |
94 | 91 | ||
95 | static __inline__ void set_asid(unsigned long asid) | 92 | static inline void set_asid(unsigned long asid) |
96 | { | 93 | { |
97 | unsigned long __dummy; | 94 | unsigned long __dummy; |
98 | 95 | ||
@@ -105,7 +102,7 @@ static __inline__ void set_asid(unsigned long asid) | |||
105 | "r" (0xffffff00)); | 102 | "r" (0xffffff00)); |
106 | } | 103 | } |
107 | 104 | ||
108 | static __inline__ unsigned long get_asid(void) | 105 | static inline unsigned long get_asid(void) |
109 | { | 106 | { |
110 | unsigned long asid; | 107 | unsigned long asid; |
111 | 108 | ||
@@ -120,24 +117,29 @@ static __inline__ unsigned long get_asid(void) | |||
120 | * After we have set current->mm to a new value, this activates | 117 | * After we have set current->mm to a new value, this activates |
121 | * the context for the new mm so we see the new mappings. | 118 | * the context for the new mm so we see the new mappings. |
122 | */ | 119 | */ |
123 | static __inline__ void activate_context(struct mm_struct *mm) | 120 | static inline void activate_context(struct mm_struct *mm) |
124 | { | 121 | { |
125 | get_mmu_context(mm); | 122 | get_mmu_context(mm); |
126 | set_asid(mm->context.id & MMU_CONTEXT_ASID_MASK); | 123 | set_asid(mm->context.id & MMU_CONTEXT_ASID_MASK); |
127 | } | 124 | } |
128 | 125 | ||
129 | /* MMU_TTB can be used for optimizing the fault handling. | 126 | /* MMU_TTB is used for optimizing the fault handling. */ |
130 | (Currently not used) */ | 127 | static inline void set_TTB(pgd_t *pgd) |
131 | static __inline__ void switch_mm(struct mm_struct *prev, | ||
132 | struct mm_struct *next, | ||
133 | struct task_struct *tsk) | ||
134 | { | 128 | { |
135 | if (likely(prev != next)) { | 129 | ctrl_outl((unsigned long)pgd, MMU_TTB); |
136 | unsigned long __pgdir = (unsigned long)next->pgd; | 130 | } |
137 | 131 | ||
138 | __asm__ __volatile__("mov.l %0, %1" | 132 | static inline pgd_t *get_TTB(void) |
139 | : /* no output */ | 133 | { |
140 | : "r" (__pgdir), "m" (__m(MMU_TTB))); | 134 | return (pgd_t *)ctrl_inl(MMU_TTB); |
135 | } | ||
136 | |||
137 | static inline void switch_mm(struct mm_struct *prev, | ||
138 | struct mm_struct *next, | ||
139 | struct task_struct *tsk) | ||
140 | { | ||
141 | if (likely(prev != next)) { | ||
142 | set_TTB(next->pgd); | ||
141 | activate_context(next); | 143 | activate_context(next); |
142 | } | 144 | } |
143 | } | 145 | } |
@@ -147,7 +149,7 @@ static __inline__ void switch_mm(struct mm_struct *prev, | |||
147 | #define activate_mm(prev, next) \ | 149 | #define activate_mm(prev, next) \ |
148 | switch_mm((prev),(next),NULL) | 150 | switch_mm((prev),(next),NULL) |
149 | 151 | ||
150 | static __inline__ void | 152 | static inline void |
151 | enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk) | 153 | enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk) |
152 | { | 154 | { |
153 | } | 155 | } |
diff --git a/include/asm-sh/page.h b/include/asm-sh/page.h index ca8b26d90475..380fd62dd05a 100644 --- a/include/asm-sh/page.h +++ b/include/asm-sh/page.h | |||
@@ -13,9 +13,16 @@ | |||
13 | [ P4 control ] 0xE0000000 | 13 | [ P4 control ] 0xE0000000 |
14 | */ | 14 | */ |
15 | 15 | ||
16 | |||
17 | /* PAGE_SHIFT determines the page size */ | 16 | /* PAGE_SHIFT determines the page size */ |
18 | #define PAGE_SHIFT 12 | 17 | #if defined(CONFIG_PAGE_SIZE_4KB) |
18 | # define PAGE_SHIFT 12 | ||
19 | #elif defined(CONFIG_PAGE_SIZE_8KB) | ||
20 | # define PAGE_SHIFT 13 | ||
21 | #elif defined(CONFIG_PAGE_SIZE_64KB) | ||
22 | # define PAGE_SHIFT 16 | ||
23 | #else | ||
24 | # error "Bogus kernel page size?" | ||
25 | #endif | ||
19 | 26 | ||
20 | #ifdef __ASSEMBLY__ | 27 | #ifdef __ASSEMBLY__ |
21 | #define PAGE_SIZE (1 << PAGE_SHIFT) | 28 | #define PAGE_SIZE (1 << PAGE_SHIFT) |
@@ -28,8 +35,14 @@ | |||
28 | 35 | ||
29 | #if defined(CONFIG_HUGETLB_PAGE_SIZE_64K) | 36 | #if defined(CONFIG_HUGETLB_PAGE_SIZE_64K) |
30 | #define HPAGE_SHIFT 16 | 37 | #define HPAGE_SHIFT 16 |
38 | #elif defined(CONFIG_HUGETLB_PAGE_SIZE_256K) | ||
39 | #define HPAGE_SHIFT 18 | ||
31 | #elif defined(CONFIG_HUGETLB_PAGE_SIZE_1MB) | 40 | #elif defined(CONFIG_HUGETLB_PAGE_SIZE_1MB) |
32 | #define HPAGE_SHIFT 20 | 41 | #define HPAGE_SHIFT 20 |
42 | #elif defined(CONFIG_HUGETLB_PAGE_SIZE_4MB) | ||
43 | #define HPAGE_SHIFT 22 | ||
44 | #elif defined(CONFIG_HUGETLB_PAGE_SIZE_64MB) | ||
45 | #define HPAGE_SHIFT 26 | ||
33 | #endif | 46 | #endif |
34 | 47 | ||
35 | #ifdef CONFIG_HUGETLB_PAGE | 48 | #ifdef CONFIG_HUGETLB_PAGE |
@@ -69,15 +82,25 @@ extern void __copy_user_page(void *to, void *from, void *orig_to); | |||
69 | /* | 82 | /* |
70 | * These are used to make use of C type-checking.. | 83 | * These are used to make use of C type-checking.. |
71 | */ | 84 | */ |
72 | typedef struct { unsigned long pte; } pte_t; | 85 | #ifdef CONFIG_X2TLB |
73 | typedef struct { unsigned long pgd; } pgd_t; | 86 | typedef struct { unsigned long pte_low, pte_high; } pte_t; |
87 | typedef struct { unsigned long long pgprot; } pgprot_t; | ||
88 | #define pte_val(x) \ | ||
89 | ((x).pte_low | ((unsigned long long)(x).pte_high << 32)) | ||
90 | #define __pte(x) \ | ||
91 | ({ pte_t __pte = {(x), ((unsigned long long)(x)) >> 32}; __pte; }) | ||
92 | #else | ||
93 | typedef struct { unsigned long pte_low; } pte_t; | ||
74 | typedef struct { unsigned long pgprot; } pgprot_t; | 94 | typedef struct { unsigned long pgprot; } pgprot_t; |
95 | #define pte_val(x) ((x).pte_low) | ||
96 | #define __pte(x) ((pte_t) { (x) } ) | ||
97 | #endif | ||
98 | |||
99 | typedef struct { unsigned long pgd; } pgd_t; | ||
75 | 100 | ||
76 | #define pte_val(x) ((x).pte) | ||
77 | #define pgd_val(x) ((x).pgd) | 101 | #define pgd_val(x) ((x).pgd) |
78 | #define pgprot_val(x) ((x).pgprot) | 102 | #define pgprot_val(x) ((x).pgprot) |
79 | 103 | ||
80 | #define __pte(x) ((pte_t) { (x) } ) | ||
81 | #define __pgd(x) ((pgd_t) { (x) } ) | 104 | #define __pgd(x) ((pgd_t) { (x) } ) |
82 | #define __pgprot(x) ((pgprot_t) { (x) } ) | 105 | #define __pgprot(x) ((pgprot_t) { (x) } ) |
83 | 106 | ||
diff --git a/include/asm-sh/pgalloc.h b/include/asm-sh/pgalloc.h index e841465ab4d2..888e4529e6fe 100644 --- a/include/asm-sh/pgalloc.h +++ b/include/asm-sh/pgalloc.h | |||
@@ -1,13 +1,16 @@ | |||
1 | #ifndef __ASM_SH_PGALLOC_H | 1 | #ifndef __ASM_SH_PGALLOC_H |
2 | #define __ASM_SH_PGALLOC_H | 2 | #define __ASM_SH_PGALLOC_H |
3 | 3 | ||
4 | #define pmd_populate_kernel(mm, pmd, pte) \ | 4 | static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd, |
5 | set_pmd(pmd, __pmd(_PAGE_TABLE + __pa(pte))) | 5 | pte_t *pte) |
6 | { | ||
7 | set_pmd(pmd, __pmd((unsigned long)pte)); | ||
8 | } | ||
6 | 9 | ||
7 | static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, | 10 | static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, |
8 | struct page *pte) | 11 | struct page *pte) |
9 | { | 12 | { |
10 | set_pmd(pmd, __pmd(_PAGE_TABLE + page_to_phys(pte))); | 13 | set_pmd(pmd, __pmd((unsigned long)page_address(pte))); |
11 | } | 14 | } |
12 | 15 | ||
13 | /* | 16 | /* |
@@ -15,7 +18,16 @@ static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, | |||
15 | */ | 18 | */ |
16 | static inline pgd_t *pgd_alloc(struct mm_struct *mm) | 19 | static inline pgd_t *pgd_alloc(struct mm_struct *mm) |
17 | { | 20 | { |
18 | return (pgd_t *)__get_free_page(GFP_KERNEL | __GFP_REPEAT | __GFP_ZERO); | 21 | pgd_t *pgd = (pgd_t *)__get_free_page(GFP_KERNEL | __GFP_REPEAT); |
22 | |||
23 | if (pgd) { | ||
24 | memset(pgd, 0, USER_PTRS_PER_PGD * sizeof(pgd_t)); | ||
25 | memcpy(pgd + USER_PTRS_PER_PGD, | ||
26 | swapper_pg_dir + USER_PTRS_PER_PGD, | ||
27 | (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t)); | ||
28 | } | ||
29 | |||
30 | return pgd; | ||
19 | } | 31 | } |
20 | 32 | ||
21 | static inline void pgd_free(pgd_t *pgd) | 33 | static inline void pgd_free(pgd_t *pgd) |
diff --git a/include/asm-sh/pgtable-2level.h b/include/asm-sh/pgtable-2level.h deleted file mode 100644 index b525db6f61c6..000000000000 --- a/include/asm-sh/pgtable-2level.h +++ /dev/null | |||
@@ -1,70 +0,0 @@ | |||
1 | #ifndef __ASM_SH_PGTABLE_2LEVEL_H | ||
2 | #define __ASM_SH_PGTABLE_2LEVEL_H | ||
3 | |||
4 | /* | ||
5 | * traditional two-level paging structure: | ||
6 | */ | ||
7 | |||
8 | #define PGDIR_SHIFT 22 | ||
9 | #define PTRS_PER_PGD 1024 | ||
10 | |||
11 | /* | ||
12 | * this is two-level, so we don't really have any | ||
13 | * PMD directory physically. | ||
14 | */ | ||
15 | #define PMD_SHIFT 22 | ||
16 | #define PTRS_PER_PMD 1 | ||
17 | |||
18 | #define PTRS_PER_PTE 1024 | ||
19 | |||
20 | #ifndef __ASSEMBLY__ | ||
21 | #define pte_ERROR(e) \ | ||
22 | printk("%s:%d: bad pte %08lx.\n", __FILE__, __LINE__, pte_val(e)) | ||
23 | #define pmd_ERROR(e) \ | ||
24 | printk("%s:%d: bad pmd %08lx.\n", __FILE__, __LINE__, pmd_val(e)) | ||
25 | #define pgd_ERROR(e) \ | ||
26 | printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e)) | ||
27 | |||
28 | /* | ||
29 | * The "pgd_xxx()" functions here are trivial for a folded two-level | ||
30 | * setup: the pgd is never bad, and a pmd always exists (as it's folded | ||
31 | * into the pgd entry) | ||
32 | */ | ||
33 | static inline int pgd_none(pgd_t pgd) { return 0; } | ||
34 | static inline int pgd_bad(pgd_t pgd) { return 0; } | ||
35 | static inline int pgd_present(pgd_t pgd) { return 1; } | ||
36 | static inline void pgd_clear (pgd_t * pgdp) { } | ||
37 | |||
38 | /* | ||
39 | * Certain architectures need to do special things when PTEs | ||
40 | * within a page table are directly modified. Thus, the following | ||
41 | * hook is made available. | ||
42 | */ | ||
43 | #define set_pte(pteptr, pteval) (*(pteptr) = pteval) | ||
44 | #define set_pte_at(mm,addr,ptep,pteval) set_pte(ptep,pteval) | ||
45 | |||
46 | /* | ||
47 | * (pmds are folded into pgds so this doesn't get actually called, | ||
48 | * but the define is needed for a generic inline function.) | ||
49 | */ | ||
50 | #define set_pmd(pmdptr, pmdval) (*(pmdptr) = pmdval) | ||
51 | #define set_pgd(pgdptr, pgdval) (*(pgdptr) = pgdval) | ||
52 | |||
53 | #define pgd_page_vaddr(pgd) \ | ||
54 | ((unsigned long) __va(pgd_val(pgd) & PAGE_MASK)) | ||
55 | |||
56 | #define pgd_page(pgd) \ | ||
57 | (phys_to_page(pgd_val(pgd))) | ||
58 | |||
59 | static inline pmd_t * pmd_offset(pgd_t * dir, unsigned long address) | ||
60 | { | ||
61 | return (pmd_t *) dir; | ||
62 | } | ||
63 | |||
64 | #define pte_pfn(x) ((unsigned long)(((x).pte >> PAGE_SHIFT))) | ||
65 | #define pfn_pte(pfn, prot) __pte(((pfn) << PAGE_SHIFT) | pgprot_val(prot)) | ||
66 | #define pfn_pmd(pfn, prot) __pmd(((pfn) << PAGE_SHIFT) | pgprot_val(prot)) | ||
67 | |||
68 | #endif /* !__ASSEMBLY__ */ | ||
69 | |||
70 | #endif /* __ASM_SH_PGTABLE_2LEVEL_H */ | ||
diff --git a/include/asm-sh/pgtable.h b/include/asm-sh/pgtable.h index 2c8682ad1012..c84901dbd8e5 100644 --- a/include/asm-sh/pgtable.h +++ b/include/asm-sh/pgtable.h | |||
@@ -15,15 +15,10 @@ | |||
15 | #include <asm-generic/pgtable-nopmd.h> | 15 | #include <asm-generic/pgtable-nopmd.h> |
16 | #include <asm/page.h> | 16 | #include <asm/page.h> |
17 | 17 | ||
18 | #define PTRS_PER_PGD 1024 | ||
19 | |||
20 | #ifndef __ASSEMBLY__ | 18 | #ifndef __ASSEMBLY__ |
21 | #include <asm/addrspace.h> | 19 | #include <asm/addrspace.h> |
22 | #include <asm/fixmap.h> | 20 | #include <asm/fixmap.h> |
23 | 21 | ||
24 | extern pgd_t swapper_pg_dir[PTRS_PER_PGD]; | ||
25 | extern void paging_init(void); | ||
26 | |||
27 | /* | 22 | /* |
28 | * ZERO_PAGE is a global shared page that is always zero: used | 23 | * ZERO_PAGE is a global shared page that is always zero: used |
29 | * for zero-mapped memory areas etc.. | 24 | * for zero-mapped memory areas etc.. |
@@ -33,15 +28,28 @@ extern unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)]; | |||
33 | 28 | ||
34 | #endif /* !__ASSEMBLY__ */ | 29 | #endif /* !__ASSEMBLY__ */ |
35 | 30 | ||
36 | /* traditional two-level paging structure */ | 31 | /* |
37 | #define PGDIR_SHIFT 22 | 32 | * traditional two-level paging structure |
38 | #define PTRS_PER_PMD 1 | 33 | */ |
39 | #define PTRS_PER_PTE 1024 | 34 | /* PTE bits */ |
40 | #define PMD_SIZE (1UL << PMD_SHIFT) | 35 | #ifdef CONFIG_X2TLB |
41 | #define PMD_MASK (~(PMD_SIZE-1)) | 36 | # define PTE_MAGNITUDE 3 /* 64-bit PTEs on extended mode SH-X2 TLB */ |
42 | #define PGDIR_SIZE (1UL << PGDIR_SHIFT) | 37 | #else |
38 | # define PTE_MAGNITUDE 2 /* 32-bit PTEs */ | ||
39 | #endif | ||
40 | #define PTE_SHIFT PAGE_SHIFT | ||
41 | #define PTE_BITS (PTE_SHIFT - PTE_MAGNITUDE) | ||
42 | |||
43 | /* PGD bits */ | ||
44 | #define PGDIR_SHIFT (PTE_SHIFT + PTE_BITS) | ||
45 | #define PGDIR_BITS (32 - PGDIR_SHIFT) | ||
46 | #define PGDIR_SIZE (1 << PGDIR_SHIFT) | ||
43 | #define PGDIR_MASK (~(PGDIR_SIZE-1)) | 47 | #define PGDIR_MASK (~(PGDIR_SIZE-1)) |
44 | 48 | ||
49 | /* Entries per level */ | ||
50 | #define PTRS_PER_PTE (PAGE_SIZE / 4) | ||
51 | #define PTRS_PER_PGD (PAGE_SIZE / 4) | ||
52 | |||
45 | #define USER_PTRS_PER_PGD (TASK_SIZE/PGDIR_SIZE) | 53 | #define USER_PTRS_PER_PGD (TASK_SIZE/PGDIR_SIZE) |
46 | #define FIRST_USER_ADDRESS 0 | 54 | #define FIRST_USER_ADDRESS 0 |
47 | 55 | ||
@@ -49,7 +57,7 @@ extern unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)]; | |||
49 | 57 | ||
50 | /* | 58 | /* |
51 | * First 1MB map is used by fixed purpose. | 59 | * First 1MB map is used by fixed purpose. |
52 | * Currently only 4-enty (16kB) is used (see arch/sh/mm/cache.c) | 60 | * Currently only 4-entry (16kB) is used (see arch/sh/mm/cache.c) |
53 | */ | 61 | */ |
54 | #define VMALLOC_START (P3SEG+0x00100000) | 62 | #define VMALLOC_START (P3SEG+0x00100000) |
55 | #define VMALLOC_END (FIXADDR_START-2*PAGE_SIZE) | 63 | #define VMALLOC_END (FIXADDR_START-2*PAGE_SIZE) |
@@ -57,7 +65,8 @@ extern unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)]; | |||
57 | /* | 65 | /* |
58 | * Linux PTEL encoding. | 66 | * Linux PTEL encoding. |
59 | * | 67 | * |
60 | * Hardware and software bit definitions for the PTEL value: | 68 | * Hardware and software bit definitions for the PTEL value (see below for |
69 | * notes on SH-X2 MMUs and 64-bit PTEs): | ||
61 | * | 70 | * |
62 | * - Bits 0 and 7 are reserved on SH-3 (_PAGE_WT and _PAGE_SZ1 on SH-4). | 71 | * - Bits 0 and 7 are reserved on SH-3 (_PAGE_WT and _PAGE_SZ1 on SH-4). |
63 | * | 72 | * |
@@ -76,20 +85,57 @@ extern unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)]; | |||
76 | * | 85 | * |
77 | * - Bits 31, 30, and 29 remain unused by everyone and can be used for future | 86 | * - Bits 31, 30, and 29 remain unused by everyone and can be used for future |
78 | * software flags, although care must be taken to update _PAGE_CLEAR_FLAGS. | 87 | * software flags, although care must be taken to update _PAGE_CLEAR_FLAGS. |
88 | * | ||
89 | * XXX: Leave the _PAGE_FILE and _PAGE_WT overhaul for a rainy day. | ||
90 | * | ||
91 | * SH-X2 MMUs and extended PTEs | ||
92 | * | ||
93 | * SH-X2 supports an extended mode TLB with split data arrays due to the | ||
94 | * number of bits needed for PR and SZ (now EPR and ESZ) encodings. The PR and | ||
95 | * SZ bit placeholders still exist in data array 1, but are implemented as | ||
96 | * reserved bits, with the real logic existing in data array 2. | ||
97 | * | ||
98 | * The downside to this is that we can no longer fit everything in to a 32-bit | ||
99 | * PTE encoding, so a 64-bit pte_t is necessary for these parts. On the plus | ||
100 | * side, this gives us quite a few spare bits to play with for future usage. | ||
79 | */ | 101 | */ |
102 | /* Legacy and compat mode bits */ | ||
80 | #define _PAGE_WT 0x001 /* WT-bit on SH-4, 0 on SH-3 */ | 103 | #define _PAGE_WT 0x001 /* WT-bit on SH-4, 0 on SH-3 */ |
81 | #define _PAGE_HW_SHARED 0x002 /* SH-bit : shared among processes */ | 104 | #define _PAGE_HW_SHARED 0x002 /* SH-bit : shared among processes */ |
82 | #define _PAGE_DIRTY 0x004 /* D-bit : page changed */ | 105 | #define _PAGE_DIRTY 0x004 /* D-bit : page changed */ |
83 | #define _PAGE_CACHABLE 0x008 /* C-bit : cachable */ | 106 | #define _PAGE_CACHABLE 0x008 /* C-bit : cachable */ |
84 | #define _PAGE_SZ0 0x010 /* SZ0-bit : Size of page */ | 107 | #ifndef CONFIG_X2TLB |
85 | #define _PAGE_RW 0x020 /* PR0-bit : write access allowed */ | 108 | # define _PAGE_SZ0 0x010 /* SZ0-bit : Size of page */ |
86 | #define _PAGE_USER 0x040 /* PR1-bit : user space access allowed */ | 109 | # define _PAGE_RW 0x020 /* PR0-bit : write access allowed */ |
87 | #define _PAGE_SZ1 0x080 /* SZ1-bit : Size of page (on SH-4) */ | 110 | # define _PAGE_USER 0x040 /* PR1-bit : user space access allowed*/ |
111 | # define _PAGE_SZ1 0x080 /* SZ1-bit : Size of page (on SH-4) */ | ||
112 | #endif | ||
88 | #define _PAGE_PRESENT 0x100 /* V-bit : page is valid */ | 113 | #define _PAGE_PRESENT 0x100 /* V-bit : page is valid */ |
89 | #define _PAGE_PROTNONE 0x200 /* software: if not present */ | 114 | #define _PAGE_PROTNONE 0x200 /* software: if not present */ |
90 | #define _PAGE_ACCESSED 0x400 /* software: page referenced */ | 115 | #define _PAGE_ACCESSED 0x400 /* software: page referenced */ |
91 | #define _PAGE_FILE _PAGE_WT /* software: pagecache or swap? */ | 116 | #define _PAGE_FILE _PAGE_WT /* software: pagecache or swap? */ |
92 | 117 | ||
118 | /* Extended mode bits */ | ||
119 | #define _PAGE_EXT_ESZ0 0x0010 /* ESZ0-bit: Size of page */ | ||
120 | #define _PAGE_EXT_ESZ1 0x0020 /* ESZ1-bit: Size of page */ | ||
121 | #define _PAGE_EXT_ESZ2 0x0040 /* ESZ2-bit: Size of page */ | ||
122 | #define _PAGE_EXT_ESZ3 0x0080 /* ESZ3-bit: Size of page */ | ||
123 | |||
124 | #define _PAGE_EXT_USER_EXEC 0x0100 /* EPR0-bit: User space executable */ | ||
125 | #define _PAGE_EXT_USER_WRITE 0x0200 /* EPR1-bit: User space writable */ | ||
126 | #define _PAGE_EXT_USER_READ 0x0400 /* EPR2-bit: User space readable */ | ||
127 | |||
128 | #define _PAGE_EXT_KERN_EXEC 0x0800 /* EPR3-bit: Kernel space executable */ | ||
129 | #define _PAGE_EXT_KERN_WRITE 0x1000 /* EPR4-bit: Kernel space writable */ | ||
130 | #define _PAGE_EXT_KERN_READ 0x2000 /* EPR5-bit: Kernel space readable */ | ||
131 | |||
132 | /* Wrapper for extended mode pgprot twiddling */ | ||
133 | #ifdef CONFIG_X2TLB | ||
134 | # define _PAGE_EXT(x) ((unsigned long long)(x) << 32) | ||
135 | #else | ||
136 | # define _PAGE_EXT(x) (0) | ||
137 | #endif | ||
138 | |||
93 | /* software: moves to PTEA.TC (Timing Control) */ | 139 | /* software: moves to PTEA.TC (Timing Control) */ |
94 | #define _PAGE_PCC_AREA5 0x00000000 /* use BSC registers for area5 */ | 140 | #define _PAGE_PCC_AREA5 0x00000000 /* use BSC registers for area5 */ |
95 | #define _PAGE_PCC_AREA6 0x80000000 /* use BSC registers for area6 */ | 141 | #define _PAGE_PCC_AREA6 0x80000000 /* use BSC registers for area6 */ |
@@ -114,37 +160,160 @@ extern unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)]; | |||
114 | 160 | ||
115 | #define _PAGE_FLAGS_HARDWARE_MASK (0x1fffffff & ~(_PAGE_CLEAR_FLAGS)) | 161 | #define _PAGE_FLAGS_HARDWARE_MASK (0x1fffffff & ~(_PAGE_CLEAR_FLAGS)) |
116 | 162 | ||
117 | /* Hardware flags: SZ0=1 (4k-byte) */ | 163 | /* Hardware flags, page size encoding */ |
118 | #define _PAGE_FLAGS_HARD _PAGE_SZ0 | 164 | #if defined(CONFIG_X2TLB) |
165 | # if defined(CONFIG_PAGE_SIZE_4KB) | ||
166 | # define _PAGE_FLAGS_HARD _PAGE_EXT(_PAGE_EXT_ESZ0) | ||
167 | # elif defined(CONFIG_PAGE_SIZE_8KB) | ||
168 | # define _PAGE_FLAGS_HARD _PAGE_EXT(_PAGE_EXT_ESZ1) | ||
169 | # elif defined(CONFIG_PAGE_SIZE_64KB) | ||
170 | # define _PAGE_FLAGS_HARD _PAGE_EXT(_PAGE_EXT_ESZ2) | ||
171 | # endif | ||
172 | #else | ||
173 | # if defined(CONFIG_PAGE_SIZE_4KB) | ||
174 | # define _PAGE_FLAGS_HARD _PAGE_SZ0 | ||
175 | # elif defined(CONFIG_PAGE_SIZE_64KB) | ||
176 | # define _PAGE_FLAGS_HARD _PAGE_SZ1 | ||
177 | # endif | ||
178 | #endif | ||
119 | 179 | ||
120 | #if defined(CONFIG_HUGETLB_PAGE_SIZE_64K) | 180 | #if defined(CONFIG_X2TLB) |
121 | #define _PAGE_SZHUGE (_PAGE_SZ1) | 181 | # if defined(CONFIG_HUGETLB_PAGE_SIZE_64K) |
122 | #elif defined(CONFIG_HUGETLB_PAGE_SIZE_1MB) | 182 | # define _PAGE_SZHUGE (_PAGE_EXT_ESZ2) |
123 | #define _PAGE_SZHUGE (_PAGE_SZ0 | _PAGE_SZ1) | 183 | # elif defined(CONFIG_HUGETLB_PAGE_SIZE_256K) |
184 | # define _PAGE_SZHUGE (_PAGE_EXT_ESZ0 | _PAGE_EXT_ESZ2) | ||
185 | # elif defined(CONFIG_HUGETLB_PAGE_SIZE_1MB) | ||
186 | # define _PAGE_SZHUGE (_PAGE_EXT_ESZ0 | _PAGE_EXT_ESZ1 | _PAGE_EXT_ESZ2) | ||
187 | # elif defined(CONFIG_HUGETLB_PAGE_SIZE_4MB) | ||
188 | # define _PAGE_SZHUGE (_PAGE_EXT_ESZ3) | ||
189 | # elif defined(CONFIG_HUGETLB_PAGE_SIZE_64MB) | ||
190 | # define _PAGE_SZHUGE (_PAGE_EXT_ESZ2 | _PAGE_EXT_ESZ3) | ||
191 | # endif | ||
192 | #else | ||
193 | # if defined(CONFIG_HUGETLB_PAGE_SIZE_64K) | ||
194 | # define _PAGE_SZHUGE (_PAGE_SZ1) | ||
195 | # elif defined(CONFIG_HUGETLB_PAGE_SIZE_1MB) | ||
196 | # define _PAGE_SZHUGE (_PAGE_SZ0 | _PAGE_SZ1) | ||
197 | # endif | ||
198 | #endif | ||
199 | |||
200 | /* | ||
201 | * Stub out _PAGE_SZHUGE if we don't have a good definition for it, | ||
202 | * to make pte_mkhuge() happy. | ||
203 | */ | ||
204 | #ifndef _PAGE_SZHUGE | ||
205 | # define _PAGE_SZHUGE (_PAGE_FLAGS_HARD) | ||
124 | #endif | 206 | #endif |
125 | 207 | ||
126 | #define _PAGE_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED | _PAGE_DIRTY) | 208 | #define _PAGE_CHG_MASK \ |
127 | #define _KERNPG_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_ACCESSED | _PAGE_DIRTY) | 209 | (PTE_MASK | _PAGE_ACCESSED | _PAGE_CACHABLE | _PAGE_DIRTY) |
128 | #define _PAGE_CHG_MASK (PTE_MASK | _PAGE_ACCESSED | _PAGE_CACHABLE | _PAGE_DIRTY) | ||
129 | 210 | ||
130 | #ifndef __ASSEMBLY__ | 211 | #ifndef __ASSEMBLY__ |
131 | 212 | ||
132 | #ifdef CONFIG_MMU | 213 | #if defined(CONFIG_X2TLB) /* SH-X2 TLB */ |
133 | #define PAGE_NONE __pgprot(_PAGE_PROTNONE | _PAGE_CACHABLE |_PAGE_ACCESSED | _PAGE_FLAGS_HARD) | 214 | #define PAGE_NONE __pgprot(_PAGE_PROTNONE | _PAGE_CACHABLE | \ |
134 | #define PAGE_SHARED __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_CACHABLE |_PAGE_ACCESSED | _PAGE_FLAGS_HARD) | 215 | _PAGE_ACCESSED | _PAGE_FLAGS_HARD) |
135 | #define PAGE_COPY __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_CACHABLE | _PAGE_ACCESSED | _PAGE_FLAGS_HARD) | 216 | |
136 | #define PAGE_READONLY __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_CACHABLE | _PAGE_ACCESSED | _PAGE_FLAGS_HARD) | 217 | #define PAGE_SHARED __pgprot(_PAGE_PRESENT | _PAGE_ACCESSED | \ |
137 | #define PAGE_KERNEL __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_CACHABLE | _PAGE_DIRTY | _PAGE_ACCESSED | _PAGE_HW_SHARED | _PAGE_FLAGS_HARD) | 218 | _PAGE_CACHABLE | _PAGE_FLAGS_HARD | \ |
219 | _PAGE_EXT(_PAGE_EXT_USER_READ | \ | ||
220 | _PAGE_EXT_USER_WRITE)) | ||
221 | |||
222 | #define PAGE_EXECREAD __pgprot(_PAGE_PRESENT | _PAGE_ACCESSED | \ | ||
223 | _PAGE_CACHABLE | _PAGE_FLAGS_HARD | \ | ||
224 | _PAGE_EXT(_PAGE_EXT_USER_EXEC | \ | ||
225 | _PAGE_EXT_USER_READ)) | ||
226 | |||
227 | #define PAGE_COPY PAGE_EXECREAD | ||
228 | |||
229 | #define PAGE_READONLY __pgprot(_PAGE_PRESENT | _PAGE_ACCESSED | \ | ||
230 | _PAGE_CACHABLE | _PAGE_FLAGS_HARD | \ | ||
231 | _PAGE_EXT(_PAGE_EXT_USER_READ)) | ||
232 | |||
233 | #define PAGE_WRITEONLY __pgprot(_PAGE_PRESENT | _PAGE_ACCESSED | \ | ||
234 | _PAGE_CACHABLE | _PAGE_FLAGS_HARD | \ | ||
235 | _PAGE_EXT(_PAGE_EXT_USER_WRITE)) | ||
236 | |||
237 | #define PAGE_RWX __pgprot(_PAGE_PRESENT | _PAGE_ACCESSED | \ | ||
238 | _PAGE_CACHABLE | _PAGE_FLAGS_HARD | \ | ||
239 | _PAGE_EXT(_PAGE_EXT_USER_WRITE | \ | ||
240 | _PAGE_EXT_USER_READ | \ | ||
241 | _PAGE_EXT_USER_EXEC)) | ||
242 | |||
243 | #define PAGE_KERNEL __pgprot(_PAGE_PRESENT | _PAGE_CACHABLE | \ | ||
244 | _PAGE_DIRTY | _PAGE_ACCESSED | \ | ||
245 | _PAGE_HW_SHARED | _PAGE_FLAGS_HARD | \ | ||
246 | _PAGE_EXT(_PAGE_EXT_KERN_READ | \ | ||
247 | _PAGE_EXT_KERN_WRITE | \ | ||
248 | _PAGE_EXT_KERN_EXEC)) | ||
249 | |||
138 | #define PAGE_KERNEL_NOCACHE \ | 250 | #define PAGE_KERNEL_NOCACHE \ |
139 | __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_ACCESSED | _PAGE_HW_SHARED | _PAGE_FLAGS_HARD) | 251 | __pgprot(_PAGE_PRESENT | _PAGE_DIRTY | \ |
140 | #define PAGE_KERNEL_RO __pgprot(_PAGE_PRESENT | _PAGE_CACHABLE | _PAGE_DIRTY | _PAGE_ACCESSED | _PAGE_HW_SHARED | _PAGE_FLAGS_HARD) | 252 | _PAGE_ACCESSED | _PAGE_HW_SHARED | \ |
253 | _PAGE_FLAGS_HARD | \ | ||
254 | _PAGE_EXT(_PAGE_EXT_KERN_READ | \ | ||
255 | _PAGE_EXT_KERN_WRITE | \ | ||
256 | _PAGE_EXT_KERN_EXEC)) | ||
257 | |||
258 | #define PAGE_KERNEL_RO __pgprot(_PAGE_PRESENT | _PAGE_CACHABLE | \ | ||
259 | _PAGE_DIRTY | _PAGE_ACCESSED | \ | ||
260 | _PAGE_HW_SHARED | _PAGE_FLAGS_HARD | \ | ||
261 | _PAGE_EXT(_PAGE_EXT_KERN_READ | \ | ||
262 | _PAGE_EXT_KERN_EXEC)) | ||
263 | |||
264 | #define PAGE_KERNEL_PCC(slot, type) \ | ||
265 | __pgprot(_PAGE_PRESENT | _PAGE_DIRTY | \ | ||
266 | _PAGE_ACCESSED | _PAGE_FLAGS_HARD | \ | ||
267 | _PAGE_EXT(_PAGE_EXT_KERN_READ | \ | ||
268 | _PAGE_EXT_KERN_WRITE | \ | ||
269 | _PAGE_EXT_KERN_EXEC) \ | ||
270 | (slot ? _PAGE_PCC_AREA5 : _PAGE_PCC_AREA6) | \ | ||
271 | (type)) | ||
272 | |||
273 | #elif defined(CONFIG_MMU) /* SH-X TLB */ | ||
274 | #define PAGE_NONE __pgprot(_PAGE_PROTNONE | _PAGE_CACHABLE | \ | ||
275 | _PAGE_ACCESSED | _PAGE_FLAGS_HARD) | ||
276 | |||
277 | #define PAGE_SHARED __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | \ | ||
278 | _PAGE_CACHABLE | _PAGE_ACCESSED | \ | ||
279 | _PAGE_FLAGS_HARD) | ||
280 | |||
281 | #define PAGE_COPY __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_CACHABLE | \ | ||
282 | _PAGE_ACCESSED | _PAGE_FLAGS_HARD) | ||
283 | |||
284 | #define PAGE_READONLY __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_CACHABLE | \ | ||
285 | _PAGE_ACCESSED | _PAGE_FLAGS_HARD) | ||
286 | |||
287 | #define PAGE_EXECREAD PAGE_READONLY | ||
288 | #define PAGE_RWX PAGE_SHARED | ||
289 | #define PAGE_WRITEONLY PAGE_SHARED | ||
290 | |||
291 | #define PAGE_KERNEL __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_CACHABLE | \ | ||
292 | _PAGE_DIRTY | _PAGE_ACCESSED | \ | ||
293 | _PAGE_HW_SHARED | _PAGE_FLAGS_HARD) | ||
294 | |||
295 | #define PAGE_KERNEL_NOCACHE \ | ||
296 | __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | \ | ||
297 | _PAGE_ACCESSED | _PAGE_HW_SHARED | \ | ||
298 | _PAGE_FLAGS_HARD) | ||
299 | |||
300 | #define PAGE_KERNEL_RO __pgprot(_PAGE_PRESENT | _PAGE_CACHABLE | \ | ||
301 | _PAGE_DIRTY | _PAGE_ACCESSED | \ | ||
302 | _PAGE_HW_SHARED | _PAGE_FLAGS_HARD) | ||
303 | |||
141 | #define PAGE_KERNEL_PCC(slot, type) \ | 304 | #define PAGE_KERNEL_PCC(slot, type) \ |
142 | __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_ACCESSED | _PAGE_FLAGS_HARD | (slot ? _PAGE_PCC_AREA5 : _PAGE_PCC_AREA6) | (type)) | 305 | __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | \ |
306 | _PAGE_ACCESSED | _PAGE_FLAGS_HARD | \ | ||
307 | (slot ? _PAGE_PCC_AREA5 : _PAGE_PCC_AREA6) | \ | ||
308 | (type)) | ||
143 | #else /* no mmu */ | 309 | #else /* no mmu */ |
144 | #define PAGE_NONE __pgprot(0) | 310 | #define PAGE_NONE __pgprot(0) |
145 | #define PAGE_SHARED __pgprot(0) | 311 | #define PAGE_SHARED __pgprot(0) |
146 | #define PAGE_COPY __pgprot(0) | 312 | #define PAGE_COPY __pgprot(0) |
313 | #define PAGE_EXECREAD __pgprot(0) | ||
314 | #define PAGE_RWX __pgprot(0) | ||
147 | #define PAGE_READONLY __pgprot(0) | 315 | #define PAGE_READONLY __pgprot(0) |
316 | #define PAGE_WRITEONLY __pgprot(0) | ||
148 | #define PAGE_KERNEL __pgprot(0) | 317 | #define PAGE_KERNEL __pgprot(0) |
149 | #define PAGE_KERNEL_NOCACHE __pgprot(0) | 318 | #define PAGE_KERNEL_NOCACHE __pgprot(0) |
150 | #define PAGE_KERNEL_RO __pgprot(0) | 319 | #define PAGE_KERNEL_RO __pgprot(0) |
@@ -154,27 +323,32 @@ extern unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)]; | |||
154 | #endif /* __ASSEMBLY__ */ | 323 | #endif /* __ASSEMBLY__ */ |
155 | 324 | ||
156 | /* | 325 | /* |
157 | * As i386 and MIPS, SuperH can't do page protection for execute, and | 326 | * SH-X and lower (legacy) SuperH parts (SH-3, SH-4, some SH-4A) can't do page |
158 | * considers that the same as a read. Also, write permissions imply | 327 | * protection for execute, and considers it the same as a read. Also, write |
159 | * read permissions. This is the closest we can get.. | 328 | * permission implies read permission. This is the closest we can get.. |
329 | * | ||
330 | * SH-X2 (SH7785) and later parts take this to the opposite end of the extreme, | ||
331 | * not only supporting separate execute, read, and write bits, but having | ||
332 | * completely separate permission bits for user and kernel space. | ||
160 | */ | 333 | */ |
334 | /*xwr*/ | ||
161 | #define __P000 PAGE_NONE | 335 | #define __P000 PAGE_NONE |
162 | #define __P001 PAGE_READONLY | 336 | #define __P001 PAGE_READONLY |
163 | #define __P010 PAGE_COPY | 337 | #define __P010 PAGE_COPY |
164 | #define __P011 PAGE_COPY | 338 | #define __P011 PAGE_COPY |
165 | #define __P100 PAGE_READONLY | 339 | #define __P100 PAGE_EXECREAD |
166 | #define __P101 PAGE_READONLY | 340 | #define __P101 PAGE_EXECREAD |
167 | #define __P110 PAGE_COPY | 341 | #define __P110 PAGE_COPY |
168 | #define __P111 PAGE_COPY | 342 | #define __P111 PAGE_COPY |
169 | 343 | ||
170 | #define __S000 PAGE_NONE | 344 | #define __S000 PAGE_NONE |
171 | #define __S001 PAGE_READONLY | 345 | #define __S001 PAGE_READONLY |
172 | #define __S010 PAGE_SHARED | 346 | #define __S010 PAGE_WRITEONLY |
173 | #define __S011 PAGE_SHARED | 347 | #define __S011 PAGE_SHARED |
174 | #define __S100 PAGE_READONLY | 348 | #define __S100 PAGE_EXECREAD |
175 | #define __S101 PAGE_READONLY | 349 | #define __S101 PAGE_EXECREAD |
176 | #define __S110 PAGE_SHARED | 350 | #define __S110 PAGE_RWX |
177 | #define __S111 PAGE_SHARED | 351 | #define __S111 PAGE_RWX |
178 | 352 | ||
179 | #ifndef __ASSEMBLY__ | 353 | #ifndef __ASSEMBLY__ |
180 | 354 | ||
@@ -183,7 +357,17 @@ extern unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)]; | |||
183 | * within a page table are directly modified. Thus, the following | 357 | * within a page table are directly modified. Thus, the following |
184 | * hook is made available. | 358 | * hook is made available. |
185 | */ | 359 | */ |
360 | #ifdef CONFIG_X2TLB | ||
361 | static inline void set_pte(pte_t *ptep, pte_t pte) | ||
362 | { | ||
363 | ptep->pte_high = pte.pte_high; | ||
364 | smp_wmb(); | ||
365 | ptep->pte_low = pte.pte_low; | ||
366 | } | ||
367 | #else | ||
186 | #define set_pte(pteptr, pteval) (*(pteptr) = pteval) | 368 | #define set_pte(pteptr, pteval) (*(pteptr) = pteval) |
369 | #endif | ||
370 | |||
187 | #define set_pte_at(mm,addr,ptep,pteval) set_pte(ptep,pteval) | 371 | #define set_pte_at(mm,addr,ptep,pteval) set_pte(ptep,pteval) |
188 | 372 | ||
189 | /* | 373 | /* |
@@ -192,18 +376,18 @@ extern unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)]; | |||
192 | */ | 376 | */ |
193 | #define set_pmd(pmdptr, pmdval) (*(pmdptr) = pmdval) | 377 | #define set_pmd(pmdptr, pmdval) (*(pmdptr) = pmdval) |
194 | 378 | ||
195 | #define pte_pfn(x) ((unsigned long)(((x).pte >> PAGE_SHIFT))) | 379 | #define pte_pfn(x) ((unsigned long)(((x).pte_low >> PAGE_SHIFT))) |
196 | #define pfn_pte(pfn, prot) __pte(((pfn) << PAGE_SHIFT) | pgprot_val(prot)) | 380 | #define pfn_pte(pfn, prot) __pte(((pfn) << PAGE_SHIFT) | pgprot_val(prot)) |
197 | #define pfn_pmd(pfn, prot) __pmd(((pfn) << PAGE_SHIFT) | pgprot_val(prot)) | 381 | #define pfn_pmd(pfn, prot) __pmd(((pfn) << PAGE_SHIFT) | pgprot_val(prot)) |
198 | 382 | ||
199 | #define pte_none(x) (!pte_val(x)) | 383 | #define pte_none(x) (!pte_val(x)) |
200 | #define pte_present(x) (pte_val(x) & (_PAGE_PRESENT | _PAGE_PROTNONE)) | 384 | #define pte_present(x) (pte_val(x) & (_PAGE_PRESENT | _PAGE_PROTNONE)) |
201 | #define pte_clear(mm,addr,xp) do { set_pte_at(mm, addr, xp, __pte(0)); } while (0) | 385 | #define pte_clear(mm,addr,xp) do { set_pte_at(mm, addr, xp, __pte(0)); } while (0) |
202 | 386 | ||
203 | #define pmd_none(x) (!pmd_val(x)) | 387 | #define pmd_none(x) (!pmd_val(x)) |
204 | #define pmd_present(x) (pmd_val(x) & _PAGE_PRESENT) | 388 | #define pmd_present(x) (pmd_val(x)) |
205 | #define pmd_clear(xp) do { set_pmd(xp, __pmd(0)); } while (0) | 389 | #define pmd_clear(xp) do { set_pmd(xp, __pmd(0)); } while (0) |
206 | #define pmd_bad(x) ((pmd_val(x) & (~PAGE_MASK & ~_PAGE_USER)) != _KERNPG_TABLE) | 390 | #define pmd_bad(x) (pmd_val(x) & ~PAGE_MASK) |
207 | 391 | ||
208 | #define pages_to_mb(x) ((x) >> (20-PAGE_SHIFT)) | 392 | #define pages_to_mb(x) ((x) >> (20-PAGE_SHIFT)) |
209 | #define pte_page(x) phys_to_page(pte_val(x)&PTE_PHYS_MASK) | 393 | #define pte_page(x) phys_to_page(pte_val(x)&PTE_PHYS_MASK) |
@@ -212,28 +396,52 @@ extern unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)]; | |||
212 | * The following only work if pte_present() is true. | 396 | * The following only work if pte_present() is true. |
213 | * Undefined behaviour if not.. | 397 | * Undefined behaviour if not.. |
214 | */ | 398 | */ |
215 | static inline int pte_read(pte_t pte) { return pte_val(pte) & _PAGE_USER; } | 399 | #define pte_not_present(pte) (!(pte_val(pte) & _PAGE_PRESENT)) |
216 | static inline int pte_exec(pte_t pte) { return pte_val(pte) & _PAGE_USER; } | 400 | #define pte_dirty(pte) (pte_val(pte) & _PAGE_DIRTY) |
217 | static inline int pte_dirty(pte_t pte){ return pte_val(pte) & _PAGE_DIRTY; } | 401 | #define pte_young(pte) (pte_val(pte) & _PAGE_ACCESSED) |
218 | static inline int pte_young(pte_t pte){ return pte_val(pte) & _PAGE_ACCESSED; } | 402 | #define pte_file(pte) (pte_val(pte) & _PAGE_FILE) |
219 | static inline int pte_file(pte_t pte) { return pte_val(pte) & _PAGE_FILE; } | 403 | |
220 | static inline int pte_write(pte_t pte){ return pte_val(pte) & _PAGE_RW; } | 404 | #ifdef CONFIG_X2TLB |
221 | static inline int pte_not_present(pte_t pte){ return !(pte_val(pte) & _PAGE_PRESENT); } | 405 | #define pte_read(pte) ((pte).pte_high & _PAGE_EXT_USER_READ) |
222 | 406 | #define pte_exec(pte) ((pte).pte_high & _PAGE_EXT_USER_EXEC) | |
223 | static inline pte_t pte_rdprotect(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) & ~_PAGE_USER)); return pte; } | 407 | #define pte_write(pte) ((pte).pte_high & _PAGE_EXT_USER_WRITE) |
224 | static inline pte_t pte_exprotect(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) & ~_PAGE_USER)); return pte; } | 408 | #else |
225 | static inline pte_t pte_mkclean(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) & ~_PAGE_DIRTY)); return pte; } | 409 | #define pte_read(pte) (pte_val(pte) & _PAGE_USER) |
226 | static inline pte_t pte_mkold(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) & ~_PAGE_ACCESSED)); return pte; } | 410 | #define pte_exec(pte) (pte_val(pte) & _PAGE_USER) |
227 | static inline pte_t pte_wrprotect(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) & ~_PAGE_RW)); return pte; } | 411 | #define pte_write(pte) (pte_val(pte) & _PAGE_RW) |
228 | static inline pte_t pte_mkread(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) | _PAGE_USER)); return pte; } | ||
229 | static inline pte_t pte_mkexec(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) | _PAGE_USER)); return pte; } | ||
230 | static inline pte_t pte_mkdirty(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) | _PAGE_DIRTY)); return pte; } | ||
231 | static inline pte_t pte_mkyoung(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) | _PAGE_ACCESSED)); return pte; } | ||
232 | static inline pte_t pte_mkwrite(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) | _PAGE_RW)); return pte; } | ||
233 | #ifdef CONFIG_HUGETLB_PAGE | ||
234 | static inline pte_t pte_mkhuge(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) | _PAGE_SZHUGE)); return pte; } | ||
235 | #endif | 412 | #endif |
236 | 413 | ||
414 | #define PTE_BIT_FUNC(h,fn,op) \ | ||
415 | static inline pte_t pte_##fn(pte_t pte) { pte.pte_##h op; return pte; } | ||
416 | |||
417 | #ifdef CONFIG_X2TLB | ||
418 | /* | ||
419 | * We cheat a bit in the SH-X2 TLB case. As the permission bits are | ||
420 | * individually toggled (and user permissions are entirely decoupled from | ||
421 | * kernel permissions), we attempt to couple them a bit more sanely here. | ||
422 | */ | ||
423 | PTE_BIT_FUNC(high, rdprotect, &= ~_PAGE_EXT_USER_READ); | ||
424 | PTE_BIT_FUNC(high, mkread, |= _PAGE_EXT_USER_READ | _PAGE_EXT_KERN_READ); | ||
425 | PTE_BIT_FUNC(high, wrprotect, &= ~_PAGE_EXT_USER_WRITE); | ||
426 | PTE_BIT_FUNC(high, mkwrite, |= _PAGE_EXT_USER_WRITE | _PAGE_EXT_KERN_WRITE); | ||
427 | PTE_BIT_FUNC(high, exprotect, &= ~_PAGE_EXT_USER_EXEC); | ||
428 | PTE_BIT_FUNC(high, mkexec, |= _PAGE_EXT_USER_EXEC | _PAGE_EXT_KERN_EXEC); | ||
429 | PTE_BIT_FUNC(high, mkhuge, |= _PAGE_SZHUGE); | ||
430 | #else | ||
431 | PTE_BIT_FUNC(low, rdprotect, &= ~_PAGE_USER); | ||
432 | PTE_BIT_FUNC(low, mkread, |= _PAGE_USER); | ||
433 | PTE_BIT_FUNC(low, wrprotect, &= ~_PAGE_RW); | ||
434 | PTE_BIT_FUNC(low, mkwrite, |= _PAGE_RW); | ||
435 | PTE_BIT_FUNC(low, exprotect, &= ~_PAGE_USER); | ||
436 | PTE_BIT_FUNC(low, mkexec, |= _PAGE_USER); | ||
437 | PTE_BIT_FUNC(low, mkhuge, |= _PAGE_SZHUGE); | ||
438 | #endif | ||
439 | |||
440 | PTE_BIT_FUNC(low, mkclean, &= ~_PAGE_DIRTY); | ||
441 | PTE_BIT_FUNC(low, mkdirty, |= _PAGE_DIRTY); | ||
442 | PTE_BIT_FUNC(low, mkold, &= ~_PAGE_ACCESSED); | ||
443 | PTE_BIT_FUNC(low, mkyoung, |= _PAGE_ACCESSED); | ||
444 | |||
237 | /* | 445 | /* |
238 | * Macro and implementation to make a page protection as uncachable. | 446 | * Macro and implementation to make a page protection as uncachable. |
239 | */ | 447 | */ |
@@ -258,13 +466,14 @@ static inline pgprot_t pgprot_noncached(pgprot_t _prot) | |||
258 | #define mk_pte(page, pgprot) pfn_pte(page_to_pfn(page), (pgprot)) | 466 | #define mk_pte(page, pgprot) pfn_pte(page_to_pfn(page), (pgprot)) |
259 | 467 | ||
260 | static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) | 468 | static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) |
261 | { set_pte(&pte, __pte((pte_val(pte) & _PAGE_CHG_MASK) | pgprot_val(newprot))); return pte; } | 469 | { |
262 | 470 | set_pte(&pte, __pte((pte_val(pte) & _PAGE_CHG_MASK) | | |
263 | #define pmd_page_vaddr(pmd) \ | 471 | pgprot_val(newprot))); |
264 | ((unsigned long) __va(pmd_val(pmd) & PAGE_MASK)) | 472 | return pte; |
473 | } | ||
265 | 474 | ||
266 | #define pmd_page(pmd) \ | 475 | #define pmd_page_vaddr(pmd) pmd_val(pmd) |
267 | (phys_to_page(pmd_val(pmd))) | 476 | #define pmd_page(pmd) (virt_to_page(pmd_val(pmd))) |
268 | 477 | ||
269 | /* to find an entry in a page-table-directory. */ | 478 | /* to find an entry in a page-table-directory. */ |
270 | #define pgd_index(address) (((address) >> PGDIR_SHIFT) & (PTRS_PER_PGD-1)) | 479 | #define pgd_index(address) (((address) >> PGDIR_SHIFT) & (PTRS_PER_PGD-1)) |
@@ -283,8 +492,15 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) | |||
283 | #define pte_unmap(pte) do { } while (0) | 492 | #define pte_unmap(pte) do { } while (0) |
284 | #define pte_unmap_nested(pte) do { } while (0) | 493 | #define pte_unmap_nested(pte) do { } while (0) |
285 | 494 | ||
495 | #ifdef CONFIG_X2TLB | ||
496 | #define pte_ERROR(e) \ | ||
497 | printk("%s:%d: bad pte %p(%08lx%08lx).\n", __FILE__, __LINE__, \ | ||
498 | &(e), (e).pte_high, (e).pte_low) | ||
499 | #else | ||
286 | #define pte_ERROR(e) \ | 500 | #define pte_ERROR(e) \ |
287 | printk("%s:%d: bad pte %08lx.\n", __FILE__, __LINE__, pte_val(e)) | 501 | printk("%s:%d: bad pte %08lx.\n", __FILE__, __LINE__, pte_val(e)) |
502 | #endif | ||
503 | |||
288 | #define pgd_ERROR(e) \ | 504 | #define pgd_ERROR(e) \ |
289 | printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e)) | 505 | printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e)) |
290 | 506 | ||
@@ -337,6 +553,9 @@ extern unsigned int kobjsize(const void *objp); | |||
337 | extern pte_t ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep); | 553 | extern pte_t ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep); |
338 | #endif | 554 | #endif |
339 | 555 | ||
556 | extern pgd_t swapper_pg_dir[PTRS_PER_PGD]; | ||
557 | extern void paging_init(void); | ||
558 | |||
340 | #include <asm-generic/pgtable.h> | 559 | #include <asm-generic/pgtable.h> |
341 | 560 | ||
342 | #endif /* !__ASSEMBLY__ */ | 561 | #endif /* !__ASSEMBLY__ */ |
diff --git a/include/asm-sh/processor.h b/include/asm-sh/processor.h index 45bb74e35d32..6f1dd7ca1b1d 100644 --- a/include/asm-sh/processor.h +++ b/include/asm-sh/processor.h | |||
@@ -36,7 +36,10 @@ | |||
36 | */ | 36 | */ |
37 | enum cpu_type { | 37 | enum cpu_type { |
38 | /* SH-2 types */ | 38 | /* SH-2 types */ |
39 | CPU_SH7604, | 39 | CPU_SH7604, CPU_SH7619, |
40 | |||
41 | /* SH-2A types */ | ||
42 | CPU_SH7206, | ||
40 | 43 | ||
41 | /* SH-3 types */ | 44 | /* SH-3 types */ |
42 | CPU_SH7705, CPU_SH7706, CPU_SH7707, | 45 | CPU_SH7705, CPU_SH7706, CPU_SH7707, |
@@ -47,7 +50,10 @@ enum cpu_type { | |||
47 | /* SH-4 types */ | 50 | /* SH-4 types */ |
48 | CPU_SH7750, CPU_SH7750S, CPU_SH7750R, CPU_SH7751, CPU_SH7751R, | 51 | CPU_SH7750, CPU_SH7750S, CPU_SH7750R, CPU_SH7751, CPU_SH7751R, |
49 | CPU_SH7760, CPU_ST40RA, CPU_ST40GX1, CPU_SH4_202, CPU_SH4_501, | 52 | CPU_SH7760, CPU_ST40RA, CPU_ST40GX1, CPU_SH4_202, CPU_SH4_501, |
53 | |||
54 | /* SH-4A types */ | ||
50 | CPU_SH73180, CPU_SH7343, CPU_SH7770, CPU_SH7780, CPU_SH7781, | 55 | CPU_SH73180, CPU_SH7343, CPU_SH7770, CPU_SH7780, CPU_SH7781, |
56 | CPU_SH7785, | ||
51 | 57 | ||
52 | /* Unknown subtype */ | 58 | /* Unknown subtype */ |
53 | CPU_SH_NONE | 59 | CPU_SH_NONE |
@@ -130,12 +136,11 @@ union sh_fpu_union { | |||
130 | }; | 136 | }; |
131 | 137 | ||
132 | struct thread_struct { | 138 | struct thread_struct { |
139 | /* Saved registers when thread is descheduled */ | ||
133 | unsigned long sp; | 140 | unsigned long sp; |
134 | unsigned long pc; | 141 | unsigned long pc; |
135 | 142 | ||
136 | unsigned long trap_no, error_code; | 143 | /* Hardware debugging registers */ |
137 | unsigned long address; | ||
138 | /* Hardware debugging registers may come here */ | ||
139 | unsigned long ubc_pc; | 144 | unsigned long ubc_pc; |
140 | 145 | ||
141 | /* floating point info */ | 146 | /* floating point info */ |
@@ -150,12 +155,7 @@ typedef struct { | |||
150 | extern int ubc_usercnt; | 155 | extern int ubc_usercnt; |
151 | 156 | ||
152 | #define INIT_THREAD { \ | 157 | #define INIT_THREAD { \ |
153 | sizeof(init_stack) + (long) &init_stack, /* sp */ \ | 158 | .sp = sizeof(init_stack) + (long) &init_stack, \ |
154 | 0, /* pc */ \ | ||
155 | 0, 0, \ | ||
156 | 0, \ | ||
157 | 0, \ | ||
158 | {{{0,}},} /* fpu state */ \ | ||
159 | } | 159 | } |
160 | 160 | ||
161 | /* | 161 | /* |
@@ -259,8 +259,8 @@ void show_trace(struct task_struct *tsk, unsigned long *sp, | |||
259 | struct pt_regs *regs); | 259 | struct pt_regs *regs); |
260 | extern unsigned long get_wchan(struct task_struct *p); | 260 | extern unsigned long get_wchan(struct task_struct *p); |
261 | 261 | ||
262 | #define KSTK_EIP(tsk) ((tsk)->thread.pc) | 262 | #define KSTK_EIP(tsk) (task_pt_regs(tsk)->pc) |
263 | #define KSTK_ESP(tsk) ((tsk)->thread.sp) | 263 | #define KSTK_ESP(tsk) (task_pt_regs(tsk)->regs[15]) |
264 | 264 | ||
265 | #define cpu_sleep() __asm__ __volatile__ ("sleep" : : : "memory") | 265 | #define cpu_sleep() __asm__ __volatile__ ("sleep" : : : "memory") |
266 | #define cpu_relax() barrier() | 266 | #define cpu_relax() barrier() |
diff --git a/include/asm-sh/push-switch.h b/include/asm-sh/push-switch.h new file mode 100644 index 000000000000..dfc6bad567f0 --- /dev/null +++ b/include/asm-sh/push-switch.h | |||
@@ -0,0 +1,28 @@ | |||
1 | #ifndef __ASM_SH_PUSH_SWITCH_H | ||
2 | #define __ASM_SH_PUSH_SWITCH_H | ||
3 | |||
4 | #include <linux/timer.h> | ||
5 | #include <linux/interrupt.h> | ||
6 | #include <linux/workqueue.h> | ||
7 | |||
8 | struct push_switch { | ||
9 | /* switch state */ | ||
10 | unsigned int state:1; | ||
11 | /* debounce timer */ | ||
12 | struct timer_list debounce; | ||
13 | /* workqueue */ | ||
14 | struct work_struct work; | ||
15 | }; | ||
16 | |||
17 | struct push_switch_platform_info { | ||
18 | /* IRQ handler */ | ||
19 | irqreturn_t (*irq_handler)(int irq, void *data); | ||
20 | /* Special IRQ flags */ | ||
21 | unsigned int irq_flags; | ||
22 | /* Bit location of switch */ | ||
23 | unsigned int bit; | ||
24 | /* Symbolic switch name */ | ||
25 | const char *name; | ||
26 | }; | ||
27 | |||
28 | #endif /* __ASM_SH_PUSH_SWITCH_H */ | ||
diff --git a/include/asm-sh/rwsem.h b/include/asm-sh/rwsem.h index 9d2aea5e8488..4931ba817d73 100644 --- a/include/asm-sh/rwsem.h +++ b/include/asm-sh/rwsem.h | |||
@@ -25,11 +25,21 @@ struct rw_semaphore { | |||
25 | #define RWSEM_ACTIVE_WRITE_BIAS (RWSEM_WAITING_BIAS + RWSEM_ACTIVE_BIAS) | 25 | #define RWSEM_ACTIVE_WRITE_BIAS (RWSEM_WAITING_BIAS + RWSEM_ACTIVE_BIAS) |
26 | spinlock_t wait_lock; | 26 | spinlock_t wait_lock; |
27 | struct list_head wait_list; | 27 | struct list_head wait_list; |
28 | #ifdef CONFIG_DEBUG_LOCK_ALLOC | ||
29 | struct lockdep_map dep_map; | ||
30 | #endif | ||
28 | }; | 31 | }; |
29 | 32 | ||
33 | #ifdef CONFIG_DEBUG_LOCK_ALLOC | ||
34 | # define __RWSEM_DEP_MAP_INIT(lockname) , .dep_map = { .name = #lockname } | ||
35 | #else | ||
36 | # define __RWSEM_DEP_MAP_INIT(lockname) | ||
37 | #endif | ||
38 | |||
30 | #define __RWSEM_INITIALIZER(name) \ | 39 | #define __RWSEM_INITIALIZER(name) \ |
31 | { RWSEM_UNLOCKED_VALUE, SPIN_LOCK_UNLOCKED, \ | 40 | { RWSEM_UNLOCKED_VALUE, SPIN_LOCK_UNLOCKED, \ |
32 | LIST_HEAD_INIT((name).wait_list) } | 41 | LIST_HEAD_INIT((name).wait_list) \ |
42 | __RWSEM_DEP_MAP_INIT(name) } | ||
33 | 43 | ||
34 | #define DECLARE_RWSEM(name) \ | 44 | #define DECLARE_RWSEM(name) \ |
35 | struct rw_semaphore name = __RWSEM_INITIALIZER(name) | 45 | struct rw_semaphore name = __RWSEM_INITIALIZER(name) |
@@ -39,6 +49,16 @@ extern struct rw_semaphore *rwsem_down_write_failed(struct rw_semaphore *sem); | |||
39 | extern struct rw_semaphore *rwsem_wake(struct rw_semaphore *sem); | 49 | extern struct rw_semaphore *rwsem_wake(struct rw_semaphore *sem); |
40 | extern struct rw_semaphore *rwsem_downgrade_wake(struct rw_semaphore *sem); | 50 | extern struct rw_semaphore *rwsem_downgrade_wake(struct rw_semaphore *sem); |
41 | 51 | ||
52 | extern void __init_rwsem(struct rw_semaphore *sem, const char *name, | ||
53 | struct lock_class_key *key); | ||
54 | |||
55 | #define init_rwsem(sem) \ | ||
56 | do { \ | ||
57 | static struct lock_class_key __key; \ | ||
58 | \ | ||
59 | __init_rwsem((sem), #sem, &__key); \ | ||
60 | } while (0) | ||
61 | |||
42 | static inline void init_rwsem(struct rw_semaphore *sem) | 62 | static inline void init_rwsem(struct rw_semaphore *sem) |
43 | { | 63 | { |
44 | sem->count = RWSEM_UNLOCKED_VALUE; | 64 | sem->count = RWSEM_UNLOCKED_VALUE; |
@@ -141,6 +161,11 @@ static inline void __downgrade_write(struct rw_semaphore *sem) | |||
141 | rwsem_downgrade_wake(sem); | 161 | rwsem_downgrade_wake(sem); |
142 | } | 162 | } |
143 | 163 | ||
164 | static inline void __down_write_nested(struct rw_semaphore *sem, int subclass) | ||
165 | { | ||
166 | __down_write(sem); | ||
167 | } | ||
168 | |||
144 | /* | 169 | /* |
145 | * implement exchange and add functionality | 170 | * implement exchange and add functionality |
146 | */ | 171 | */ |
diff --git a/include/asm-sh/se7206.h b/include/asm-sh/se7206.h new file mode 100644 index 000000000000..698eb80389ab --- /dev/null +++ b/include/asm-sh/se7206.h | |||
@@ -0,0 +1,13 @@ | |||
1 | #ifndef __ASM_SH_SE7206_H | ||
2 | #define __ASM_SH_SE7206_H | ||
3 | |||
4 | #define PA_SMSC 0x30000000 | ||
5 | #define PA_MRSHPC 0x34000000 | ||
6 | #define PA_LED 0x31400000 | ||
7 | |||
8 | void init_se7206_IRQ(void); | ||
9 | |||
10 | #define __IO_PREFIX se7206 | ||
11 | #include <asm/io_generic.h> | ||
12 | |||
13 | #endif /* __ASM_SH_SE7206_H */ | ||
diff --git a/include/asm-sh/setup.h b/include/asm-sh/setup.h index 34ca8a7f06ba..1583c6b7bdaa 100644 --- a/include/asm-sh/setup.h +++ b/include/asm-sh/setup.h | |||
@@ -1,10 +1,12 @@ | |||
1 | #ifdef __KERNEL__ | ||
2 | #ifndef _SH_SETUP_H | 1 | #ifndef _SH_SETUP_H |
3 | #define _SH_SETUP_H | 2 | #define _SH_SETUP_H |
4 | 3 | ||
5 | #define COMMAND_LINE_SIZE 256 | 4 | #define COMMAND_LINE_SIZE 256 |
6 | 5 | ||
6 | #ifdef __KERNEL__ | ||
7 | |||
7 | int setup_early_printk(char *); | 8 | int setup_early_printk(char *); |
8 | 9 | ||
9 | #endif /* _SH_SETUP_H */ | ||
10 | #endif /* __KERNEL__ */ | 10 | #endif /* __KERNEL__ */ |
11 | |||
12 | #endif /* _SH_SETUP_H */ | ||
diff --git a/include/asm-sh/system.h b/include/asm-sh/system.h index 3340126f4e0f..b1e42e7f998b 100644 --- a/include/asm-sh/system.h +++ b/include/asm-sh/system.h | |||
@@ -6,6 +6,7 @@ | |||
6 | * Copyright (C) 2002 Paul Mundt | 6 | * Copyright (C) 2002 Paul Mundt |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include <linux/irqflags.h> | ||
9 | #include <asm/types.h> | 10 | #include <asm/types.h> |
10 | 11 | ||
11 | /* | 12 | /* |
@@ -131,103 +132,6 @@ static inline unsigned long tas(volatile int *m) | |||
131 | 132 | ||
132 | #define set_mb(var, value) do { xchg(&var, value); } while (0) | 133 | #define set_mb(var, value) do { xchg(&var, value); } while (0) |
133 | 134 | ||
134 | /* Interrupt Control */ | ||
135 | #ifdef CONFIG_CPU_HAS_SR_RB | ||
136 | static inline void local_irq_enable(void) | ||
137 | { | ||
138 | unsigned long __dummy0, __dummy1; | ||
139 | |||
140 | __asm__ __volatile__("stc sr, %0\n\t" | ||
141 | "and %1, %0\n\t" | ||
142 | "stc r6_bank, %1\n\t" | ||
143 | "or %1, %0\n\t" | ||
144 | "ldc %0, sr" | ||
145 | : "=&r" (__dummy0), "=r" (__dummy1) | ||
146 | : "1" (~0x000000f0) | ||
147 | : "memory"); | ||
148 | } | ||
149 | #else | ||
150 | static inline void local_irq_enable(void) | ||
151 | { | ||
152 | unsigned long __dummy0, __dummy1; | ||
153 | |||
154 | __asm__ __volatile__ ( | ||
155 | "stc sr, %0\n\t" | ||
156 | "and %1, %0\n\t" | ||
157 | "ldc %0, sr\n\t" | ||
158 | : "=&r" (__dummy0), "=r" (__dummy1) | ||
159 | : "1" (~0x000000f0) | ||
160 | : "memory"); | ||
161 | } | ||
162 | #endif | ||
163 | |||
164 | static inline void local_irq_disable(void) | ||
165 | { | ||
166 | unsigned long __dummy; | ||
167 | __asm__ __volatile__("stc sr, %0\n\t" | ||
168 | "or #0xf0, %0\n\t" | ||
169 | "ldc %0, sr" | ||
170 | : "=&z" (__dummy) | ||
171 | : /* no inputs */ | ||
172 | : "memory"); | ||
173 | } | ||
174 | |||
175 | static inline void set_bl_bit(void) | ||
176 | { | ||
177 | unsigned long __dummy0, __dummy1; | ||
178 | |||
179 | __asm__ __volatile__ ("stc sr, %0\n\t" | ||
180 | "or %2, %0\n\t" | ||
181 | "and %3, %0\n\t" | ||
182 | "ldc %0, sr" | ||
183 | : "=&r" (__dummy0), "=r" (__dummy1) | ||
184 | : "r" (0x10000000), "r" (0xffffff0f) | ||
185 | : "memory"); | ||
186 | } | ||
187 | |||
188 | static inline void clear_bl_bit(void) | ||
189 | { | ||
190 | unsigned long __dummy0, __dummy1; | ||
191 | |||
192 | __asm__ __volatile__ ("stc sr, %0\n\t" | ||
193 | "and %2, %0\n\t" | ||
194 | "ldc %0, sr" | ||
195 | : "=&r" (__dummy0), "=r" (__dummy1) | ||
196 | : "1" (~0x10000000) | ||
197 | : "memory"); | ||
198 | } | ||
199 | |||
200 | #define local_save_flags(x) \ | ||
201 | __asm__("stc sr, %0; and #0xf0, %0" : "=&z" (x) :/**/: "memory" ) | ||
202 | |||
203 | #define irqs_disabled() \ | ||
204 | ({ \ | ||
205 | unsigned long flags; \ | ||
206 | local_save_flags(flags); \ | ||
207 | (flags != 0); \ | ||
208 | }) | ||
209 | |||
210 | static inline unsigned long local_irq_save(void) | ||
211 | { | ||
212 | unsigned long flags, __dummy; | ||
213 | |||
214 | __asm__ __volatile__("stc sr, %1\n\t" | ||
215 | "mov %1, %0\n\t" | ||
216 | "or #0xf0, %0\n\t" | ||
217 | "ldc %0, sr\n\t" | ||
218 | "mov %1, %0\n\t" | ||
219 | "and #0xf0, %0" | ||
220 | : "=&z" (flags), "=&r" (__dummy) | ||
221 | :/**/ | ||
222 | : "memory" ); | ||
223 | return flags; | ||
224 | } | ||
225 | |||
226 | #define local_irq_restore(x) do { \ | ||
227 | if ((x & 0x000000f0) != 0x000000f0) \ | ||
228 | local_irq_enable(); \ | ||
229 | } while (0) | ||
230 | |||
231 | /* | 135 | /* |
232 | * Jump to P2 area. | 136 | * Jump to P2 area. |
233 | * When handling TLB or caches, we need to do it from P2 area. | 137 | * When handling TLB or caches, we need to do it from P2 area. |
@@ -264,9 +168,6 @@ do { \ | |||
264 | : "=&r" (__dummy)); \ | 168 | : "=&r" (__dummy)); \ |
265 | } while (0) | 169 | } while (0) |
266 | 170 | ||
267 | /* For spinlocks etc */ | ||
268 | #define local_irq_save(x) x = local_irq_save() | ||
269 | |||
270 | static inline unsigned long xchg_u32(volatile u32 *m, unsigned long val) | 171 | static inline unsigned long xchg_u32(volatile u32 *m, unsigned long val) |
271 | { | 172 | { |
272 | unsigned long flags, retval; | 173 | unsigned long flags, retval; |
diff --git a/include/asm-sh/thread_info.h b/include/asm-sh/thread_info.h index 3ebc3f9039eb..0c01dc550819 100644 --- a/include/asm-sh/thread_info.h +++ b/include/asm-sh/thread_info.h | |||
@@ -90,13 +90,7 @@ static inline struct thread_info *current_thread_info(void) | |||
90 | #endif | 90 | #endif |
91 | #define free_thread_info(ti) kfree(ti) | 91 | #define free_thread_info(ti) kfree(ti) |
92 | 92 | ||
93 | #else /* !__ASSEMBLY__ */ | 93 | #endif /* __ASSEMBLY__ */ |
94 | |||
95 | /* how to get the thread information struct from ASM */ | ||
96 | #define GET_THREAD_INFO(reg) \ | ||
97 | stc r7_bank, reg | ||
98 | |||
99 | #endif | ||
100 | 94 | ||
101 | /* | 95 | /* |
102 | * thread information flags | 96 | * thread information flags |
diff --git a/include/asm-sh/timer.h b/include/asm-sh/timer.h index 5df842bcf7b6..17b5e76a4c31 100644 --- a/include/asm-sh/timer.h +++ b/include/asm-sh/timer.h | |||
@@ -18,11 +18,32 @@ struct sys_timer { | |||
18 | 18 | ||
19 | struct sys_device dev; | 19 | struct sys_device dev; |
20 | struct sys_timer_ops *ops; | 20 | struct sys_timer_ops *ops; |
21 | |||
22 | #ifdef CONFIG_NO_IDLE_HZ | ||
23 | struct dyn_tick_timer *dyn_tick; | ||
24 | #endif | ||
21 | }; | 25 | }; |
22 | 26 | ||
27 | #ifdef CONFIG_NO_IDLE_HZ | ||
28 | #define DYN_TICK_ENABLED (1 << 1) | ||
29 | |||
30 | struct dyn_tick_timer { | ||
31 | spinlock_t lock; | ||
32 | unsigned int state; /* Current state */ | ||
33 | int (*enable)(void); /* Enables dynamic tick */ | ||
34 | int (*disable)(void); /* Disables dynamic tick */ | ||
35 | void (*reprogram)(unsigned long); /* Reprograms the timer */ | ||
36 | int (*handler)(int, void *); | ||
37 | }; | ||
38 | |||
39 | void timer_dyn_reprogram(void); | ||
40 | #else | ||
41 | #define timer_dyn_reprogram() do { } while (0) | ||
42 | #endif | ||
43 | |||
23 | #define TICK_SIZE (tick_nsec / 1000) | 44 | #define TICK_SIZE (tick_nsec / 1000) |
24 | 45 | ||
25 | extern struct sys_timer tmu_timer; | 46 | extern struct sys_timer tmu_timer, cmt_timer, mtu2_timer; |
26 | extern struct sys_timer *sys_timer; | 47 | extern struct sys_timer *sys_timer; |
27 | 48 | ||
28 | #ifndef CONFIG_GENERIC_TIME | 49 | #ifndef CONFIG_GENERIC_TIME |
diff --git a/include/asm-sh/titan.h b/include/asm-sh/titan.h index 270a4f4bc8a9..03f3583c8918 100644 --- a/include/asm-sh/titan.h +++ b/include/asm-sh/titan.h | |||
@@ -1,9 +1,8 @@ | |||
1 | /* | 1 | /* |
2 | * Platform defintions for Titan | 2 | * Platform defintions for Titan |
3 | */ | 3 | */ |
4 | 4 | #ifndef _ASM_SH_TITAN_H | |
5 | #ifndef _ASM_SH_TITAN_TITAN_H | 5 | #define _ASM_SH_TITAN_H |
6 | #define _ASM_SH_TITAN_TITAN_H | ||
7 | 6 | ||
8 | #define __IO_PREFIX titan | 7 | #define __IO_PREFIX titan |
9 | #include <asm/io_generic.h> | 8 | #include <asm/io_generic.h> |
@@ -15,29 +14,4 @@ | |||
15 | #define TITAN_IRQ_MPCIB 11 /* mPCI B */ | 14 | #define TITAN_IRQ_MPCIB 11 /* mPCI B */ |
16 | #define TITAN_IRQ_USB 11 /* USB */ | 15 | #define TITAN_IRQ_USB 11 /* USB */ |
17 | 16 | ||
18 | /* | 17 | #endif /* __ASM_SH_TITAN_H */ |
19 | * The external interrupt lines, these take up ints 0 - 15 inclusive | ||
20 | * depending on the priority for the interrupt. In fact the priority | ||
21 | * is the interrupt :-) | ||
22 | */ | ||
23 | #define IRL0_IRQ 0 | ||
24 | #define IRL0_IPR_ADDR INTC_IPRD | ||
25 | #define IRL0_IPR_POS 3 | ||
26 | #define IRL0_PRIORITY 8 | ||
27 | |||
28 | #define IRL1_IRQ 1 | ||
29 | #define IRL1_IPR_ADDR INTC_IPRD | ||
30 | #define IRL1_IPR_POS 2 | ||
31 | #define IRL1_PRIORITY 8 | ||
32 | |||
33 | #define IRL2_IRQ 2 | ||
34 | #define IRL2_IPR_ADDR INTC_IPRD | ||
35 | #define IRL2_IPR_POS 1 | ||
36 | #define IRL2_PRIORITY 8 | ||
37 | |||
38 | #define IRL3_IRQ 3 | ||
39 | #define IRL3_IPR_ADDR INTC_IPRD | ||
40 | #define IRL3_IPR_POS 0 | ||
41 | #define IRL3_PRIORITY 8 | ||
42 | |||
43 | #endif | ||
diff --git a/include/asm-sh/unistd.h b/include/asm-sh/unistd.h index 1c2abde122cd..f982073dc6c6 100644 --- a/include/asm-sh/unistd.h +++ b/include/asm-sh/unistd.h | |||
@@ -332,125 +332,6 @@ | |||
332 | 332 | ||
333 | #ifdef __KERNEL__ | 333 | #ifdef __KERNEL__ |
334 | 334 | ||
335 | #include <linux/err.h> | ||
336 | |||
337 | /* user-visible error numbers are in the range -1 - -MAX_ERRNO: | ||
338 | * see <asm-sh/errno.h> */ | ||
339 | |||
340 | #define __syscall_return(type, res) \ | ||
341 | do { \ | ||
342 | if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \ | ||
343 | /* Avoid using "res" which is declared to be in register r0; \ | ||
344 | errno might expand to a function call and clobber it. */ \ | ||
345 | int __err = -(res); \ | ||
346 | errno = __err; \ | ||
347 | res = -1; \ | ||
348 | } \ | ||
349 | return (type) (res); \ | ||
350 | } while (0) | ||
351 | |||
352 | /* XXX - _foo needs to be __foo, while __NR_bar could be _NR_bar. */ | ||
353 | #define _syscall0(type,name) \ | ||
354 | type name(void) \ | ||
355 | { \ | ||
356 | register long __sc0 __asm__ ("r3") = __NR_##name; \ | ||
357 | __asm__ __volatile__ ("trapa #0x10" \ | ||
358 | : "=z" (__sc0) \ | ||
359 | : "0" (__sc0) \ | ||
360 | : "memory" ); \ | ||
361 | __syscall_return(type,__sc0); \ | ||
362 | } | ||
363 | |||
364 | #define _syscall1(type,name,type1,arg1) \ | ||
365 | type name(type1 arg1) \ | ||
366 | { \ | ||
367 | register long __sc0 __asm__ ("r3") = __NR_##name; \ | ||
368 | register long __sc4 __asm__ ("r4") = (long) arg1; \ | ||
369 | __asm__ __volatile__ ("trapa #0x11" \ | ||
370 | : "=z" (__sc0) \ | ||
371 | : "0" (__sc0), "r" (__sc4) \ | ||
372 | : "memory"); \ | ||
373 | __syscall_return(type,__sc0); \ | ||
374 | } | ||
375 | |||
376 | #define _syscall2(type,name,type1,arg1,type2,arg2) \ | ||
377 | type name(type1 arg1,type2 arg2) \ | ||
378 | { \ | ||
379 | register long __sc0 __asm__ ("r3") = __NR_##name; \ | ||
380 | register long __sc4 __asm__ ("r4") = (long) arg1; \ | ||
381 | register long __sc5 __asm__ ("r5") = (long) arg2; \ | ||
382 | __asm__ __volatile__ ("trapa #0x12" \ | ||
383 | : "=z" (__sc0) \ | ||
384 | : "0" (__sc0), "r" (__sc4), "r" (__sc5) \ | ||
385 | : "memory"); \ | ||
386 | __syscall_return(type,__sc0); \ | ||
387 | } | ||
388 | |||
389 | #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ | ||
390 | type name(type1 arg1,type2 arg2,type3 arg3) \ | ||
391 | { \ | ||
392 | register long __sc0 __asm__ ("r3") = __NR_##name; \ | ||
393 | register long __sc4 __asm__ ("r4") = (long) arg1; \ | ||
394 | register long __sc5 __asm__ ("r5") = (long) arg2; \ | ||
395 | register long __sc6 __asm__ ("r6") = (long) arg3; \ | ||
396 | __asm__ __volatile__ ("trapa #0x13" \ | ||
397 | : "=z" (__sc0) \ | ||
398 | : "0" (__sc0), "r" (__sc4), "r" (__sc5), "r" (__sc6) \ | ||
399 | : "memory"); \ | ||
400 | __syscall_return(type,__sc0); \ | ||
401 | } | ||
402 | |||
403 | #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \ | ||
404 | type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ | ||
405 | { \ | ||
406 | register long __sc0 __asm__ ("r3") = __NR_##name; \ | ||
407 | register long __sc4 __asm__ ("r4") = (long) arg1; \ | ||
408 | register long __sc5 __asm__ ("r5") = (long) arg2; \ | ||
409 | register long __sc6 __asm__ ("r6") = (long) arg3; \ | ||
410 | register long __sc7 __asm__ ("r7") = (long) arg4; \ | ||
411 | __asm__ __volatile__ ("trapa #0x14" \ | ||
412 | : "=z" (__sc0) \ | ||
413 | : "0" (__sc0), "r" (__sc4), "r" (__sc5), "r" (__sc6), \ | ||
414 | "r" (__sc7) \ | ||
415 | : "memory" ); \ | ||
416 | __syscall_return(type,__sc0); \ | ||
417 | } | ||
418 | |||
419 | #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \ | ||
420 | type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) \ | ||
421 | { \ | ||
422 | register long __sc3 __asm__ ("r3") = __NR_##name; \ | ||
423 | register long __sc4 __asm__ ("r4") = (long) arg1; \ | ||
424 | register long __sc5 __asm__ ("r5") = (long) arg2; \ | ||
425 | register long __sc6 __asm__ ("r6") = (long) arg3; \ | ||
426 | register long __sc7 __asm__ ("r7") = (long) arg4; \ | ||
427 | register long __sc0 __asm__ ("r0") = (long) arg5; \ | ||
428 | __asm__ __volatile__ ("trapa #0x15" \ | ||
429 | : "=z" (__sc0) \ | ||
430 | : "0" (__sc0), "r" (__sc4), "r" (__sc5), "r" (__sc6), "r" (__sc7), \ | ||
431 | "r" (__sc3) \ | ||
432 | : "memory" ); \ | ||
433 | __syscall_return(type,__sc0); \ | ||
434 | } | ||
435 | |||
436 | #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5,type6,arg6) \ | ||
437 | type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6) \ | ||
438 | { \ | ||
439 | register long __sc3 __asm__ ("r3") = __NR_##name; \ | ||
440 | register long __sc4 __asm__ ("r4") = (long) arg1; \ | ||
441 | register long __sc5 __asm__ ("r5") = (long) arg2; \ | ||
442 | register long __sc6 __asm__ ("r6") = (long) arg3; \ | ||
443 | register long __sc7 __asm__ ("r7") = (long) arg4; \ | ||
444 | register long __sc0 __asm__ ("r0") = (long) arg5; \ | ||
445 | register long __sc1 __asm__ ("r1") = (long) arg6; \ | ||
446 | __asm__ __volatile__ ("trapa #0x16" \ | ||
447 | : "=z" (__sc0) \ | ||
448 | : "0" (__sc0), "r" (__sc4), "r" (__sc5), "r" (__sc6), "r" (__sc7), \ | ||
449 | "r" (__sc3), "r" (__sc1) \ | ||
450 | : "memory" ); \ | ||
451 | __syscall_return(type,__sc0); \ | ||
452 | } | ||
453 | |||
454 | #define __ARCH_WANT_IPC_PARSE_VERSION | 335 | #define __ARCH_WANT_IPC_PARSE_VERSION |
455 | #define __ARCH_WANT_OLD_READDIR | 336 | #define __ARCH_WANT_OLD_READDIR |
456 | #define __ARCH_WANT_OLD_STAT | 337 | #define __ARCH_WANT_OLD_STAT |
diff --git a/include/asm-sh64/dma-mapping.h b/include/asm-sh64/dma-mapping.h index 68e27a8fca31..5efe906c59f7 100644 --- a/include/asm-sh64/dma-mapping.h +++ b/include/asm-sh64/dma-mapping.h | |||
@@ -35,7 +35,7 @@ static inline void dma_free_coherent(struct device *dev, size_t size, | |||
35 | consistent_free(NULL, size, vaddr, dma_handle); | 35 | consistent_free(NULL, size, vaddr, dma_handle); |
36 | } | 36 | } |
37 | 37 | ||
38 | static inline void dma_cache_sync(void *vaddr, size_t size, | 38 | static inline void dma_cache_sync(struct device *dev, void *vaddr, size_t size, |
39 | enum dma_data_direction dir) | 39 | enum dma_data_direction dir) |
40 | { | 40 | { |
41 | dma_cache_wback_inv((unsigned long)vaddr, size); | 41 | dma_cache_wback_inv((unsigned long)vaddr, size); |
diff --git a/include/asm-sh64/setup.h b/include/asm-sh64/setup.h index ebd42eb1b709..5b07b14c2927 100644 --- a/include/asm-sh64/setup.h +++ b/include/asm-sh64/setup.h | |||
@@ -1,6 +1,10 @@ | |||
1 | #ifndef __ASM_SH64_SETUP_H | 1 | #ifndef __ASM_SH64_SETUP_H |
2 | #define __ASM_SH64_SETUP_H | 2 | #define __ASM_SH64_SETUP_H |
3 | 3 | ||
4 | #define COMMAND_LINE_SIZE 256 | ||
5 | |||
6 | #ifdef __KERNEL__ | ||
7 | |||
4 | #define PARAM ((unsigned char *)empty_zero_page) | 8 | #define PARAM ((unsigned char *)empty_zero_page) |
5 | #define MOUNT_ROOT_RDONLY (*(unsigned long *) (PARAM+0x000)) | 9 | #define MOUNT_ROOT_RDONLY (*(unsigned long *) (PARAM+0x000)) |
6 | #define RAMDISK_FLAGS (*(unsigned long *) (PARAM+0x004)) | 10 | #define RAMDISK_FLAGS (*(unsigned long *) (PARAM+0x004)) |
@@ -12,5 +16,7 @@ | |||
12 | #define COMMAND_LINE ((char *) (PARAM+256)) | 16 | #define COMMAND_LINE ((char *) (PARAM+256)) |
13 | #define COMMAND_LINE_SIZE 256 | 17 | #define COMMAND_LINE_SIZE 256 |
14 | 18 | ||
19 | #endif /* __KERNEL__ */ | ||
20 | |||
15 | #endif /* __ASM_SH64_SETUP_H */ | 21 | #endif /* __ASM_SH64_SETUP_H */ |
16 | 22 | ||
diff --git a/include/asm-sh64/unistd.h b/include/asm-sh64/unistd.h index ee7828b27ad1..1f38a7aacaaf 100644 --- a/include/asm-sh64/unistd.h +++ b/include/asm-sh64/unistd.h | |||
@@ -347,148 +347,6 @@ | |||
347 | #ifdef __KERNEL__ | 347 | #ifdef __KERNEL__ |
348 | 348 | ||
349 | #define NR_syscalls 321 | 349 | #define NR_syscalls 321 |
350 | #include <linux/err.h> | ||
351 | |||
352 | /* user-visible error numbers are in the range -1 - -MAX_ERRNO: | ||
353 | * see <asm-sh64/errno.h> */ | ||
354 | |||
355 | #define __syscall_return(type, res) \ | ||
356 | do { \ | ||
357 | /* Note: when returning from kernel the return value is in r9 \ | ||
358 | ** This prevents conflicts between return value and arg1 \ | ||
359 | ** when dispatching signal handler, in other words makes \ | ||
360 | ** life easier in the system call epilogue (see entry.S) \ | ||
361 | */ \ | ||
362 | register unsigned long __sr2 __asm__ ("r2") = res; \ | ||
363 | if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \ | ||
364 | errno = -(res); \ | ||
365 | __sr2 = -1; \ | ||
366 | } \ | ||
367 | return (type) (__sr2); \ | ||
368 | } while (0) | ||
369 | |||
370 | /* XXX - _foo needs to be __foo, while __NR_bar could be _NR_bar. */ | ||
371 | |||
372 | #define _syscall0(type,name) \ | ||
373 | type name(void) \ | ||
374 | { \ | ||
375 | register unsigned long __sc0 __asm__ ("r9") = ((0x10 << 16) | __NR_##name); \ | ||
376 | __asm__ __volatile__ ("trapa %1 !\t\t\t" #name "()" \ | ||
377 | : "=r" (__sc0) \ | ||
378 | : "r" (__sc0) ); \ | ||
379 | __syscall_return(type,__sc0); \ | ||
380 | } | ||
381 | |||
382 | /* | ||
383 | * The apparent spurious "dummy" assembler comment is *needed*, | ||
384 | * as without it, the compiler treats the arg<n> variables | ||
385 | * as no longer live just before the asm. The compiler can | ||
386 | * then optimize the storage into any registers it wishes. | ||
387 | * The additional dummy statement forces the compiler to put | ||
388 | * the arguments into the correct registers before the TRAPA. | ||
389 | */ | ||
390 | #define _syscall1(type,name,type1,arg1) \ | ||
391 | type name(type1 arg1) \ | ||
392 | { \ | ||
393 | register unsigned long __sc0 __asm__ ("r9") = ((0x11 << 16) | __NR_##name); \ | ||
394 | register unsigned long __sc2 __asm__ ("r2") = (unsigned long) arg1; \ | ||
395 | __asm__ __volatile__ ("trapa %1 !\t\t\t" #name "(%2)" \ | ||
396 | : "=r" (__sc0) \ | ||
397 | : "r" (__sc0), "r" (__sc2)); \ | ||
398 | __asm__ __volatile__ ("!dummy %0 %1" \ | ||
399 | : \ | ||
400 | : "r" (__sc0), "r" (__sc2)); \ | ||
401 | __syscall_return(type,__sc0); \ | ||
402 | } | ||
403 | |||
404 | #define _syscall2(type,name,type1,arg1,type2,arg2) \ | ||
405 | type name(type1 arg1,type2 arg2) \ | ||
406 | { \ | ||
407 | register unsigned long __sc0 __asm__ ("r9") = ((0x12 << 16) | __NR_##name); \ | ||
408 | register unsigned long __sc2 __asm__ ("r2") = (unsigned long) arg1; \ | ||
409 | register unsigned long __sc3 __asm__ ("r3") = (unsigned long) arg2; \ | ||
410 | __asm__ __volatile__ ("trapa %1 !\t\t\t" #name "(%2,%3)" \ | ||
411 | : "=r" (__sc0) \ | ||
412 | : "r" (__sc0), "r" (__sc2), "r" (__sc3) ); \ | ||
413 | __asm__ __volatile__ ("!dummy %0 %1 %2" \ | ||
414 | : \ | ||
415 | : "r" (__sc0), "r" (__sc2), "r" (__sc3) ); \ | ||
416 | __syscall_return(type,__sc0); \ | ||
417 | } | ||
418 | |||
419 | #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ | ||
420 | type name(type1 arg1,type2 arg2,type3 arg3) \ | ||
421 | { \ | ||
422 | register unsigned long __sc0 __asm__ ("r9") = ((0x13 << 16) | __NR_##name); \ | ||
423 | register unsigned long __sc2 __asm__ ("r2") = (unsigned long) arg1; \ | ||
424 | register unsigned long __sc3 __asm__ ("r3") = (unsigned long) arg2; \ | ||
425 | register unsigned long __sc4 __asm__ ("r4") = (unsigned long) arg3; \ | ||
426 | __asm__ __volatile__ ("trapa %1 !\t\t\t" #name "(%2,%3,%4)" \ | ||
427 | : "=r" (__sc0) \ | ||
428 | : "r" (__sc0), "r" (__sc2), "r" (__sc3), "r" (__sc4) ); \ | ||
429 | __asm__ __volatile__ ("!dummy %0 %1 %2 %3" \ | ||
430 | : \ | ||
431 | : "r" (__sc0), "r" (__sc2), "r" (__sc3), "r" (__sc4) ); \ | ||
432 | __syscall_return(type,__sc0); \ | ||
433 | } | ||
434 | |||
435 | #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \ | ||
436 | type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ | ||
437 | { \ | ||
438 | register unsigned long __sc0 __asm__ ("r9") = ((0x14 << 16) | __NR_##name); \ | ||
439 | register unsigned long __sc2 __asm__ ("r2") = (unsigned long) arg1; \ | ||
440 | register unsigned long __sc3 __asm__ ("r3") = (unsigned long) arg2; \ | ||
441 | register unsigned long __sc4 __asm__ ("r4") = (unsigned long) arg3; \ | ||
442 | register unsigned long __sc5 __asm__ ("r5") = (unsigned long) arg4; \ | ||
443 | __asm__ __volatile__ ("trapa %1 !\t\t\t" #name "(%2,%3,%4,%5)" \ | ||
444 | : "=r" (__sc0) \ | ||
445 | : "r" (__sc0), "r" (__sc2), "r" (__sc3), "r" (__sc4), "r" (__sc5) );\ | ||
446 | __asm__ __volatile__ ("!dummy %0 %1 %2 %3 %4" \ | ||
447 | : \ | ||
448 | : "r" (__sc0), "r" (__sc2), "r" (__sc3), "r" (__sc4), "r" (__sc5) );\ | ||
449 | __syscall_return(type,__sc0); \ | ||
450 | } | ||
451 | |||
452 | #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \ | ||
453 | type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) \ | ||
454 | { \ | ||
455 | register unsigned long __sc0 __asm__ ("r9") = ((0x15 << 16) | __NR_##name); \ | ||
456 | register unsigned long __sc2 __asm__ ("r2") = (unsigned long) arg1; \ | ||
457 | register unsigned long __sc3 __asm__ ("r3") = (unsigned long) arg2; \ | ||
458 | register unsigned long __sc4 __asm__ ("r4") = (unsigned long) arg3; \ | ||
459 | register unsigned long __sc5 __asm__ ("r5") = (unsigned long) arg4; \ | ||
460 | register unsigned long __sc6 __asm__ ("r6") = (unsigned long) arg5; \ | ||
461 | __asm__ __volatile__ ("trapa %1 !\t\t\t" #name "(%2,%3,%4,%5,%6)" \ | ||
462 | : "=r" (__sc0) \ | ||
463 | : "r" (__sc0), "r" (__sc2), "r" (__sc3), "r" (__sc4), "r" (__sc5), \ | ||
464 | "r" (__sc6)); \ | ||
465 | __asm__ __volatile__ ("!dummy %0 %1 %2 %3 %4 %5" \ | ||
466 | : \ | ||
467 | : "r" (__sc0), "r" (__sc2), "r" (__sc3), "r" (__sc4), "r" (__sc5), \ | ||
468 | "r" (__sc6)); \ | ||
469 | __syscall_return(type,__sc0); \ | ||
470 | } | ||
471 | |||
472 | #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5, type6, arg6) \ | ||
473 | type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6) \ | ||
474 | { \ | ||
475 | register unsigned long __sc0 __asm__ ("r9") = ((0x16 << 16) | __NR_##name); \ | ||
476 | register unsigned long __sc2 __asm__ ("r2") = (unsigned long) arg1; \ | ||
477 | register unsigned long __sc3 __asm__ ("r3") = (unsigned long) arg2; \ | ||
478 | register unsigned long __sc4 __asm__ ("r4") = (unsigned long) arg3; \ | ||
479 | register unsigned long __sc5 __asm__ ("r5") = (unsigned long) arg4; \ | ||
480 | register unsigned long __sc6 __asm__ ("r6") = (unsigned long) arg5; \ | ||
481 | register unsigned long __sc7 __asm__ ("r7") = (unsigned long) arg6; \ | ||
482 | __asm__ __volatile__ ("trapa %1 !\t\t\t" #name "(%2,%3,%4,%5,%6,%7)" \ | ||
483 | : "=r" (__sc0) \ | ||
484 | : "r" (__sc0), "r" (__sc2), "r" (__sc3), "r" (__sc4), "r" (__sc5), \ | ||
485 | "r" (__sc6), "r" (__sc7)); \ | ||
486 | __asm__ __volatile__ ("!dummy %0 %1 %2 %3 %4 %5 %6" \ | ||
487 | : \ | ||
488 | : "r" (__sc0), "r" (__sc2), "r" (__sc3), "r" (__sc4), "r" (__sc5), \ | ||
489 | "r" (__sc6), "r" (__sc7)); \ | ||
490 | __syscall_return(type,__sc0); \ | ||
491 | } | ||
492 | 350 | ||
493 | #define __ARCH_WANT_IPC_PARSE_VERSION | 351 | #define __ARCH_WANT_IPC_PARSE_VERSION |
494 | #define __ARCH_WANT_OLD_READDIR | 352 | #define __ARCH_WANT_OLD_READDIR |
diff --git a/include/asm-sparc/unistd.h b/include/asm-sparc/unistd.h index f7827fa4cd5e..d5b2f8053b3b 100644 --- a/include/asm-sparc/unistd.h +++ b/include/asm-sparc/unistd.h | |||
@@ -329,136 +329,6 @@ | |||
329 | * find a free slot in the 0-302 range. | 329 | * find a free slot in the 0-302 range. |
330 | */ | 330 | */ |
331 | 331 | ||
332 | #define _syscall0(type,name) \ | ||
333 | type name(void) \ | ||
334 | { \ | ||
335 | long __res; \ | ||
336 | register long __g1 __asm__ ("g1") = __NR_##name; \ | ||
337 | __asm__ __volatile__ ("t 0x10\n\t" \ | ||
338 | "bcc 1f\n\t" \ | ||
339 | "mov %%o0, %0\n\t" \ | ||
340 | "sub %%g0, %%o0, %0\n\t" \ | ||
341 | "1:\n\t" \ | ||
342 | : "=r" (__res)\ | ||
343 | : "r" (__g1) \ | ||
344 | : "o0", "cc"); \ | ||
345 | if (__res < -255 || __res >= 0) \ | ||
346 | return (type) __res; \ | ||
347 | errno = -__res; \ | ||
348 | return -1; \ | ||
349 | } | ||
350 | |||
351 | #define _syscall1(type,name,type1,arg1) \ | ||
352 | type name(type1 arg1) \ | ||
353 | { \ | ||
354 | long __res; \ | ||
355 | register long __g1 __asm__ ("g1") = __NR_##name; \ | ||
356 | register long __o0 __asm__ ("o0") = (long)(arg1); \ | ||
357 | __asm__ __volatile__ ("t 0x10\n\t" \ | ||
358 | "bcc 1f\n\t" \ | ||
359 | "mov %%o0, %0\n\t" \ | ||
360 | "sub %%g0, %%o0, %0\n\t" \ | ||
361 | "1:\n\t" \ | ||
362 | : "=r" (__res), "=&r" (__o0) \ | ||
363 | : "1" (__o0), "r" (__g1) \ | ||
364 | : "cc"); \ | ||
365 | if (__res < -255 || __res >= 0) \ | ||
366 | return (type) __res; \ | ||
367 | errno = -__res; \ | ||
368 | return -1; \ | ||
369 | } | ||
370 | |||
371 | #define _syscall2(type,name,type1,arg1,type2,arg2) \ | ||
372 | type name(type1 arg1,type2 arg2) \ | ||
373 | { \ | ||
374 | long __res; \ | ||
375 | register long __g1 __asm__ ("g1") = __NR_##name; \ | ||
376 | register long __o0 __asm__ ("o0") = (long)(arg1); \ | ||
377 | register long __o1 __asm__ ("o1") = (long)(arg2); \ | ||
378 | __asm__ __volatile__ ("t 0x10\n\t" \ | ||
379 | "bcc 1f\n\t" \ | ||
380 | "mov %%o0, %0\n\t" \ | ||
381 | "sub %%g0, %%o0, %0\n\t" \ | ||
382 | "1:\n\t" \ | ||
383 | : "=r" (__res), "=&r" (__o0) \ | ||
384 | : "1" (__o0), "r" (__o1), "r" (__g1) \ | ||
385 | : "cc"); \ | ||
386 | if (__res < -255 || __res >= 0) \ | ||
387 | return (type) __res; \ | ||
388 | errno = -__res; \ | ||
389 | return -1; \ | ||
390 | } | ||
391 | |||
392 | #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ | ||
393 | type name(type1 arg1,type2 arg2,type3 arg3) \ | ||
394 | { \ | ||
395 | long __res; \ | ||
396 | register long __g1 __asm__ ("g1") = __NR_##name; \ | ||
397 | register long __o0 __asm__ ("o0") = (long)(arg1); \ | ||
398 | register long __o1 __asm__ ("o1") = (long)(arg2); \ | ||
399 | register long __o2 __asm__ ("o2") = (long)(arg3); \ | ||
400 | __asm__ __volatile__ ("t 0x10\n\t" \ | ||
401 | "bcc 1f\n\t" \ | ||
402 | "mov %%o0, %0\n\t" \ | ||
403 | "sub %%g0, %%o0, %0\n\t" \ | ||
404 | "1:\n\t" \ | ||
405 | : "=r" (__res), "=&r" (__o0) \ | ||
406 | : "1" (__o0), "r" (__o1), "r" (__o2), "r" (__g1) \ | ||
407 | : "cc"); \ | ||
408 | if (__res < -255 || __res>=0) \ | ||
409 | return (type) __res; \ | ||
410 | errno = -__res; \ | ||
411 | return -1; \ | ||
412 | } | ||
413 | |||
414 | #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \ | ||
415 | type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ | ||
416 | { \ | ||
417 | long __res; \ | ||
418 | register long __g1 __asm__ ("g1") = __NR_##name; \ | ||
419 | register long __o0 __asm__ ("o0") = (long)(arg1); \ | ||
420 | register long __o1 __asm__ ("o1") = (long)(arg2); \ | ||
421 | register long __o2 __asm__ ("o2") = (long)(arg3); \ | ||
422 | register long __o3 __asm__ ("o3") = (long)(arg4); \ | ||
423 | __asm__ __volatile__ ("t 0x10\n\t" \ | ||
424 | "bcc 1f\n\t" \ | ||
425 | "mov %%o0, %0\n\t" \ | ||
426 | "sub %%g0, %%o0, %0\n\t" \ | ||
427 | "1:\n\t" \ | ||
428 | : "=r" (__res), "=&r" (__o0) \ | ||
429 | : "1" (__o0), "r" (__o1), "r" (__o2), "r" (__o3), "r" (__g1) \ | ||
430 | : "cc"); \ | ||
431 | if (__res < -255 || __res>=0) \ | ||
432 | return (type) __res; \ | ||
433 | errno = -__res; \ | ||
434 | return -1; \ | ||
435 | } | ||
436 | |||
437 | #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \ | ||
438 | type5,arg5) \ | ||
439 | type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \ | ||
440 | { \ | ||
441 | long __res; \ | ||
442 | register long __g1 __asm__ ("g1") = __NR_##name; \ | ||
443 | register long __o0 __asm__ ("o0") = (long)(arg1); \ | ||
444 | register long __o1 __asm__ ("o1") = (long)(arg2); \ | ||
445 | register long __o2 __asm__ ("o2") = (long)(arg3); \ | ||
446 | register long __o3 __asm__ ("o3") = (long)(arg4); \ | ||
447 | register long __o4 __asm__ ("o4") = (long)(arg5); \ | ||
448 | __asm__ __volatile__ ("t 0x10\n\t" \ | ||
449 | "bcc 1f\n\t" \ | ||
450 | "mov %%o0, %0\n\t" \ | ||
451 | "sub %%g0, %%o0, %0\n\t" \ | ||
452 | "1:\n\t" \ | ||
453 | : "=r" (__res), "=&r" (__o0) \ | ||
454 | : "1" (__o0), "r" (__o1), "r" (__o2), "r" (__o3), "r" (__o4), "r" (__g1) \ | ||
455 | : "cc"); \ | ||
456 | if (__res < -255 || __res>=0) \ | ||
457 | return (type) __res; \ | ||
458 | errno = -__res; \ | ||
459 | return -1; \ | ||
460 | } | ||
461 | |||
462 | #define __ARCH_WANT_IPC_PARSE_VERSION | 332 | #define __ARCH_WANT_IPC_PARSE_VERSION |
463 | #define __ARCH_WANT_OLD_READDIR | 333 | #define __ARCH_WANT_OLD_READDIR |
464 | #define __ARCH_WANT_STAT64 | 334 | #define __ARCH_WANT_STAT64 |
diff --git a/include/asm-sparc64/dma-mapping.h b/include/asm-sparc64/dma-mapping.h index 27c46fbeebd6..2f858a2df94a 100644 --- a/include/asm-sparc64/dma-mapping.h +++ b/include/asm-sparc64/dma-mapping.h | |||
@@ -181,7 +181,7 @@ dma_sync_single_for_device(struct device *dev, dma_addr_t dma_handle, size_t siz | |||
181 | 181 | ||
182 | #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) | 182 | #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) |
183 | #define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) | 183 | #define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) |
184 | #define dma_is_consistent(d) (1) | 184 | #define dma_is_consistent(d, h) (1) |
185 | 185 | ||
186 | static inline int | 186 | static inline int |
187 | dma_get_cache_alignment(void) | 187 | dma_get_cache_alignment(void) |
@@ -210,7 +210,7 @@ dma_sync_single_range_for_device(struct device *dev, dma_addr_t dma_handle, | |||
210 | } | 210 | } |
211 | 211 | ||
212 | static inline void | 212 | static inline void |
213 | dma_cache_sync(void *vaddr, size_t size, | 213 | dma_cache_sync(struct device *dev, void *vaddr, size_t size, |
214 | enum dma_data_direction direction) | 214 | enum dma_data_direction direction) |
215 | { | 215 | { |
216 | /* could define this in terms of the dma_cache ... operations, | 216 | /* could define this in terms of the dma_cache ... operations, |
diff --git a/include/asm-sparc64/futex.h b/include/asm-sparc64/futex.h index 7392fc4a954e..876312fe82cc 100644 --- a/include/asm-sparc64/futex.h +++ b/include/asm-sparc64/futex.h | |||
@@ -45,7 +45,7 @@ static inline int futex_atomic_op_inuser(int encoded_op, int __user *uaddr) | |||
45 | if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28)) | 45 | if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28)) |
46 | oparg = 1 << oparg; | 46 | oparg = 1 << oparg; |
47 | 47 | ||
48 | inc_preempt_count(); | 48 | pagefault_disable(); |
49 | 49 | ||
50 | switch (op) { | 50 | switch (op) { |
51 | case FUTEX_OP_SET: | 51 | case FUTEX_OP_SET: |
@@ -67,7 +67,7 @@ static inline int futex_atomic_op_inuser(int encoded_op, int __user *uaddr) | |||
67 | ret = -ENOSYS; | 67 | ret = -ENOSYS; |
68 | } | 68 | } |
69 | 69 | ||
70 | dec_preempt_count(); | 70 | pagefault_enable(); |
71 | 71 | ||
72 | if (!ret) { | 72 | if (!ret) { |
73 | switch (cmp) { | 73 | switch (cmp) { |
diff --git a/include/asm-sparc64/pgalloc.h b/include/asm-sparc64/pgalloc.h index 010f9cd0a672..5891ff7ba760 100644 --- a/include/asm-sparc64/pgalloc.h +++ b/include/asm-sparc64/pgalloc.h | |||
@@ -13,7 +13,7 @@ | |||
13 | #include <asm/page.h> | 13 | #include <asm/page.h> |
14 | 14 | ||
15 | /* Page table allocation/freeing. */ | 15 | /* Page table allocation/freeing. */ |
16 | extern kmem_cache_t *pgtable_cache; | 16 | extern struct kmem_cache *pgtable_cache; |
17 | 17 | ||
18 | static inline pgd_t *pgd_alloc(struct mm_struct *mm) | 18 | static inline pgd_t *pgd_alloc(struct mm_struct *mm) |
19 | { | 19 | { |
diff --git a/include/asm-sparc64/unistd.h b/include/asm-sparc64/unistd.h index 63669dad0d72..47047536f261 100644 --- a/include/asm-sparc64/unistd.h +++ b/include/asm-sparc64/unistd.h | |||
@@ -332,124 +332,6 @@ | |||
332 | * find a free slot in the 0-302 range. | 332 | * find a free slot in the 0-302 range. |
333 | */ | 333 | */ |
334 | 334 | ||
335 | #define _syscall0(type,name) \ | ||
336 | type name(void) \ | ||
337 | { \ | ||
338 | long __res; \ | ||
339 | register long __g1 __asm__ ("g1") = __NR_##name; \ | ||
340 | __asm__ __volatile__ ("t 0x6d\n\t" \ | ||
341 | "sub %%g0, %%o0, %0\n\t" \ | ||
342 | "movcc %%xcc, %%o0, %0\n\t" \ | ||
343 | : "=r" (__res)\ | ||
344 | : "r" (__g1) \ | ||
345 | : "o0", "cc"); \ | ||
346 | if (__res >= 0) \ | ||
347 | return (type) __res; \ | ||
348 | errno = -__res; \ | ||
349 | return -1; \ | ||
350 | } | ||
351 | |||
352 | #define _syscall1(type,name,type1,arg1) \ | ||
353 | type name(type1 arg1) \ | ||
354 | { \ | ||
355 | long __res; \ | ||
356 | register long __g1 __asm__ ("g1") = __NR_##name; \ | ||
357 | register long __o0 __asm__ ("o0") = (long)(arg1); \ | ||
358 | __asm__ __volatile__ ("t 0x6d\n\t" \ | ||
359 | "sub %%g0, %%o0, %0\n\t" \ | ||
360 | "movcc %%xcc, %%o0, %0\n\t" \ | ||
361 | : "=r" (__res), "=&r" (__o0) \ | ||
362 | : "1" (__o0), "r" (__g1) \ | ||
363 | : "cc"); \ | ||
364 | if (__res >= 0) \ | ||
365 | return (type) __res; \ | ||
366 | errno = -__res; \ | ||
367 | return -1; \ | ||
368 | } | ||
369 | |||
370 | #define _syscall2(type,name,type1,arg1,type2,arg2) \ | ||
371 | type name(type1 arg1,type2 arg2) \ | ||
372 | { \ | ||
373 | long __res; \ | ||
374 | register long __g1 __asm__ ("g1") = __NR_##name; \ | ||
375 | register long __o0 __asm__ ("o0") = (long)(arg1); \ | ||
376 | register long __o1 __asm__ ("o1") = (long)(arg2); \ | ||
377 | __asm__ __volatile__ ("t 0x6d\n\t" \ | ||
378 | "sub %%g0, %%o0, %0\n\t" \ | ||
379 | "movcc %%xcc, %%o0, %0\n\t" \ | ||
380 | : "=r" (__res), "=&r" (__o0) \ | ||
381 | : "1" (__o0), "r" (__o1), "r" (__g1) \ | ||
382 | : "cc"); \ | ||
383 | if (__res >= 0) \ | ||
384 | return (type) __res; \ | ||
385 | errno = -__res; \ | ||
386 | return -1; \ | ||
387 | } | ||
388 | |||
389 | #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ | ||
390 | type name(type1 arg1,type2 arg2,type3 arg3) \ | ||
391 | { \ | ||
392 | long __res; \ | ||
393 | register long __g1 __asm__ ("g1") = __NR_##name; \ | ||
394 | register long __o0 __asm__ ("o0") = (long)(arg1); \ | ||
395 | register long __o1 __asm__ ("o1") = (long)(arg2); \ | ||
396 | register long __o2 __asm__ ("o2") = (long)(arg3); \ | ||
397 | __asm__ __volatile__ ("t 0x6d\n\t" \ | ||
398 | "sub %%g0, %%o0, %0\n\t" \ | ||
399 | "movcc %%xcc, %%o0, %0\n\t" \ | ||
400 | : "=r" (__res), "=&r" (__o0) \ | ||
401 | : "1" (__o0), "r" (__o1), "r" (__o2), "r" (__g1) \ | ||
402 | : "cc"); \ | ||
403 | if (__res>=0) \ | ||
404 | return (type) __res; \ | ||
405 | errno = -__res; \ | ||
406 | return -1; \ | ||
407 | } | ||
408 | |||
409 | #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \ | ||
410 | type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ | ||
411 | { \ | ||
412 | long __res; \ | ||
413 | register long __g1 __asm__ ("g1") = __NR_##name; \ | ||
414 | register long __o0 __asm__ ("o0") = (long)(arg1); \ | ||
415 | register long __o1 __asm__ ("o1") = (long)(arg2); \ | ||
416 | register long __o2 __asm__ ("o2") = (long)(arg3); \ | ||
417 | register long __o3 __asm__ ("o3") = (long)(arg4); \ | ||
418 | __asm__ __volatile__ ("t 0x6d\n\t" \ | ||
419 | "sub %%g0, %%o0, %0\n\t" \ | ||
420 | "movcc %%xcc, %%o0, %0\n\t" \ | ||
421 | : "=r" (__res), "=&r" (__o0) \ | ||
422 | : "1" (__o0), "r" (__o1), "r" (__o2), "r" (__o3), "r" (__g1) \ | ||
423 | : "cc"); \ | ||
424 | if (__res>=0) \ | ||
425 | return (type) __res; \ | ||
426 | errno = -__res; \ | ||
427 | return -1; \ | ||
428 | } | ||
429 | |||
430 | #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \ | ||
431 | type5,arg5) \ | ||
432 | type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \ | ||
433 | { \ | ||
434 | long __res; \ | ||
435 | register long __g1 __asm__ ("g1") = __NR_##name; \ | ||
436 | register long __o0 __asm__ ("o0") = (long)(arg1); \ | ||
437 | register long __o1 __asm__ ("o1") = (long)(arg2); \ | ||
438 | register long __o2 __asm__ ("o2") = (long)(arg3); \ | ||
439 | register long __o3 __asm__ ("o3") = (long)(arg4); \ | ||
440 | register long __o4 __asm__ ("o4") = (long)(arg5); \ | ||
441 | __asm__ __volatile__ ("t 0x6d\n\t" \ | ||
442 | "sub %%g0, %%o0, %0\n\t" \ | ||
443 | "movcc %%xcc, %%o0, %0\n\t" \ | ||
444 | : "=r" (__res), "=&r" (__o0) \ | ||
445 | : "1" (__o0), "r" (__o1), "r" (__o2), "r" (__o3), "r" (__o4), "r" (__g1) \ | ||
446 | : "cc"); \ | ||
447 | if (__res>=0) \ | ||
448 | return (type) __res; \ | ||
449 | errno = -__res; \ | ||
450 | return -1; \ | ||
451 | } | ||
452 | |||
453 | /* sysconf options, for SunOS compatibility */ | 335 | /* sysconf options, for SunOS compatibility */ |
454 | #define _SC_ARG_MAX 1 | 336 | #define _SC_ARG_MAX 1 |
455 | #define _SC_CHILD_MAX 2 | 337 | #define _SC_CHILD_MAX 2 |
diff --git a/include/asm-um/dma-mapping.h b/include/asm-um/dma-mapping.h index babd29895114..f0ee4fb55911 100644 --- a/include/asm-um/dma-mapping.h +++ b/include/asm-um/dma-mapping.h | |||
@@ -94,7 +94,7 @@ dma_sync_sg(struct device *dev, struct scatterlist *sg, int nelems, | |||
94 | 94 | ||
95 | #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) | 95 | #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) |
96 | #define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) | 96 | #define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) |
97 | #define dma_is_consistent(d) (1) | 97 | #define dma_is_consistent(d, h) (1) |
98 | 98 | ||
99 | static inline int | 99 | static inline int |
100 | dma_get_cache_alignment(void) | 100 | dma_get_cache_alignment(void) |
@@ -112,7 +112,7 @@ dma_sync_single_range(struct device *dev, dma_addr_t dma_handle, | |||
112 | } | 112 | } |
113 | 113 | ||
114 | static inline void | 114 | static inline void |
115 | dma_cache_sync(void *vaddr, size_t size, | 115 | dma_cache_sync(struct device *dev, void *vaddr, size_t size, |
116 | enum dma_data_direction direction) | 116 | enum dma_data_direction direction) |
117 | { | 117 | { |
118 | BUG(); | 118 | BUG(); |
diff --git a/include/asm-v850/irq.h b/include/asm-v850/irq.h index 1bf096db8f4c..88687c181f01 100644 --- a/include/asm-v850/irq.h +++ b/include/asm-v850/irq.h | |||
@@ -46,8 +46,6 @@ extern void | |||
46 | init_irq_handlers (int base_irq, int num, int interval, | 46 | init_irq_handlers (int base_irq, int num, int interval, |
47 | struct hw_interrupt_type *irq_type); | 47 | struct hw_interrupt_type *irq_type); |
48 | 48 | ||
49 | typedef void (*irq_handler_t)(int irq, void *data, struct pt_regs *regs); | ||
50 | |||
51 | /* Handle interrupt IRQ. REGS are the registers at the time of ther | 49 | /* Handle interrupt IRQ. REGS are the registers at the time of ther |
52 | interrupt. */ | 50 | interrupt. */ |
53 | extern unsigned int handle_irq (int irq, struct pt_regs *regs); | 51 | extern unsigned int handle_irq (int irq, struct pt_regs *regs); |
diff --git a/include/asm-v850/unistd.h b/include/asm-v850/unistd.h index 737401e7d3ad..2241ed45ecfe 100644 --- a/include/asm-v850/unistd.h +++ b/include/asm-v850/unistd.h | |||
@@ -204,168 +204,8 @@ | |||
204 | #define __NR_gettid 201 | 204 | #define __NR_gettid 201 |
205 | #define __NR_tkill 202 | 205 | #define __NR_tkill 202 |
206 | 206 | ||
207 | |||
208 | /* Syscall protocol: | ||
209 | Syscall number in r12, args in r6-r9, r13-r14 | ||
210 | Return value in r10 | ||
211 | Trap 0 for `short' syscalls, where all the args can fit in function | ||
212 | call argument registers, and trap 1 when there are additional args in | ||
213 | r13-r14. */ | ||
214 | |||
215 | #define SYSCALL_NUM "r12" | ||
216 | #define SYSCALL_ARG0 "r6" | ||
217 | #define SYSCALL_ARG1 "r7" | ||
218 | #define SYSCALL_ARG2 "r8" | ||
219 | #define SYSCALL_ARG3 "r9" | ||
220 | #define SYSCALL_ARG4 "r13" | ||
221 | #define SYSCALL_ARG5 "r14" | ||
222 | #define SYSCALL_RET "r10" | ||
223 | |||
224 | #define SYSCALL_SHORT_TRAP "0" | ||
225 | #define SYSCALL_LONG_TRAP "1" | ||
226 | |||
227 | /* Registers clobbered by any syscall. This _doesn't_ include the syscall | ||
228 | number (r12) or the `extended arg' registers (r13, r14), even though | ||
229 | they are actually clobbered too (this is because gcc's `asm' statement | ||
230 | doesn't allow a clobber to be used as an input or output). */ | ||
231 | #define SYSCALL_CLOBBERS "r1", "r5", "r11", "r15", "r16", \ | ||
232 | "r17", "r18", "r19" | ||
233 | |||
234 | /* Registers clobbered by a `short' syscall. This includes all clobbers | ||
235 | except the syscall number (r12). */ | ||
236 | #define SYSCALL_SHORT_CLOBBERS SYSCALL_CLOBBERS, "r13", "r14" | ||
237 | |||
238 | #ifdef __KERNEL__ | 207 | #ifdef __KERNEL__ |
239 | 208 | ||
240 | #include <asm/clinkage.h> | ||
241 | #include <linux/err.h> | ||
242 | |||
243 | #define __syscall_return(type, res) \ | ||
244 | do { \ | ||
245 | /* user-visible error numbers are in the range -1 - -MAX_ERRNO: \ | ||
246 | see <asm-v850/errno.h> */ \ | ||
247 | if (__builtin_expect ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO), 0)) { \ | ||
248 | errno = -(res); \ | ||
249 | res = -1; \ | ||
250 | } \ | ||
251 | return (type) (res); \ | ||
252 | } while (0) | ||
253 | |||
254 | |||
255 | #define _syscall0(type, name) \ | ||
256 | type name (void) \ | ||
257 | { \ | ||
258 | register unsigned long __syscall __asm__ (SYSCALL_NUM) = __NR_##name; \ | ||
259 | register unsigned long __ret __asm__ (SYSCALL_RET); \ | ||
260 | __asm__ __volatile__ ("trap " SYSCALL_SHORT_TRAP \ | ||
261 | : "=r" (__ret), "=r" (__syscall) \ | ||
262 | : "1" (__syscall) \ | ||
263 | : SYSCALL_SHORT_CLOBBERS); \ | ||
264 | __syscall_return (type, __ret); \ | ||
265 | } | ||
266 | |||
267 | #define _syscall1(type, name, atype, a) \ | ||
268 | type name (atype a) \ | ||
269 | { \ | ||
270 | register atype __a __asm__ (SYSCALL_ARG0) = a; \ | ||
271 | register unsigned long __syscall __asm__ (SYSCALL_NUM) = __NR_##name; \ | ||
272 | register unsigned long __ret __asm__ (SYSCALL_RET); \ | ||
273 | __asm__ __volatile__ ("trap " SYSCALL_SHORT_TRAP \ | ||
274 | : "=r" (__ret), "=r" (__syscall) \ | ||
275 | : "1" (__syscall), "r" (__a) \ | ||
276 | : SYSCALL_SHORT_CLOBBERS); \ | ||
277 | __syscall_return (type, __ret); \ | ||
278 | } | ||
279 | |||
280 | #define _syscall2(type, name, atype, a, btype, b) \ | ||
281 | type name (atype a, btype b) \ | ||
282 | { \ | ||
283 | register atype __a __asm__ (SYSCALL_ARG0) = a; \ | ||
284 | register btype __b __asm__ (SYSCALL_ARG1) = b; \ | ||
285 | register unsigned long __syscall __asm__ (SYSCALL_NUM) = __NR_##name; \ | ||
286 | register unsigned long __ret __asm__ (SYSCALL_RET); \ | ||
287 | __asm__ __volatile__ ("trap " SYSCALL_SHORT_TRAP \ | ||
288 | : "=r" (__ret), "=r" (__syscall) \ | ||
289 | : "1" (__syscall), "r" (__a), "r" (__b) \ | ||
290 | : SYSCALL_SHORT_CLOBBERS); \ | ||
291 | __syscall_return (type, __ret); \ | ||
292 | } | ||
293 | |||
294 | #define _syscall3(type, name, atype, a, btype, b, ctype, c) \ | ||
295 | type name (atype a, btype b, ctype c) \ | ||
296 | { \ | ||
297 | register atype __a __asm__ (SYSCALL_ARG0) = a; \ | ||
298 | register btype __b __asm__ (SYSCALL_ARG1) = b; \ | ||
299 | register ctype __c __asm__ (SYSCALL_ARG2) = c; \ | ||
300 | register unsigned long __syscall __asm__ (SYSCALL_NUM) = __NR_##name; \ | ||
301 | register unsigned long __ret __asm__ (SYSCALL_RET); \ | ||
302 | __asm__ __volatile__ ("trap " SYSCALL_SHORT_TRAP \ | ||
303 | : "=r" (__ret), "=r" (__syscall) \ | ||
304 | : "1" (__syscall), "r" (__a), "r" (__b), "r" (__c) \ | ||
305 | : SYSCALL_SHORT_CLOBBERS); \ | ||
306 | __syscall_return (type, __ret); \ | ||
307 | } | ||
308 | |||
309 | #define _syscall4(type, name, atype, a, btype, b, ctype, c, dtype, d) \ | ||
310 | type name (atype a, btype b, ctype c, dtype d) \ | ||
311 | { \ | ||
312 | register atype __a __asm__ (SYSCALL_ARG0) = a; \ | ||
313 | register btype __b __asm__ (SYSCALL_ARG1) = b; \ | ||
314 | register ctype __c __asm__ (SYSCALL_ARG2) = c; \ | ||
315 | register dtype __d __asm__ (SYSCALL_ARG3) = d; \ | ||
316 | register unsigned long __syscall __asm__ (SYSCALL_NUM) = __NR_##name; \ | ||
317 | register unsigned long __ret __asm__ (SYSCALL_RET); \ | ||
318 | __asm__ __volatile__ ("trap " SYSCALL_SHORT_TRAP \ | ||
319 | : "=r" (__ret), "=r" (__syscall) \ | ||
320 | : "1" (__syscall), \ | ||
321 | "r" (__a), "r" (__b), "r" (__c), "r" (__d) \ | ||
322 | : SYSCALL_SHORT_CLOBBERS); \ | ||
323 | __syscall_return (type, __ret); \ | ||
324 | } | ||
325 | |||
326 | #define _syscall5(type, name, atype, a, btype, b, ctype, c, dtype, d, etype,e)\ | ||
327 | type name (atype a, btype b, ctype c, dtype d, etype e) \ | ||
328 | { \ | ||
329 | register atype __a __asm__ (SYSCALL_ARG0) = a; \ | ||
330 | register btype __b __asm__ (SYSCALL_ARG1) = b; \ | ||
331 | register ctype __c __asm__ (SYSCALL_ARG2) = c; \ | ||
332 | register dtype __d __asm__ (SYSCALL_ARG3) = d; \ | ||
333 | register etype __e __asm__ (SYSCALL_ARG4) = e; \ | ||
334 | register unsigned long __syscall __asm__ (SYSCALL_NUM) = __NR_##name; \ | ||
335 | register unsigned long __ret __asm__ (SYSCALL_RET); \ | ||
336 | __asm__ __volatile__ ("trap " SYSCALL_LONG_TRAP \ | ||
337 | : "=r" (__ret), "=r" (__syscall), "=r" (__e) \ | ||
338 | : "1" (__syscall), \ | ||
339 | "r" (__a), "r" (__b), "r" (__c), "r" (__d), "2" (__e) \ | ||
340 | : SYSCALL_CLOBBERS); \ | ||
341 | __syscall_return (type, __ret); \ | ||
342 | } | ||
343 | |||
344 | #define __SYSCALL6_TRAP(syscall, ret, a, b, c, d, e, f) \ | ||
345 | __asm__ __volatile__ ("trap " SYSCALL_LONG_TRAP \ | ||
346 | : "=r" (ret), "=r" (syscall), \ | ||
347 | "=r" (e), "=r" (f) \ | ||
348 | : "1" (syscall), \ | ||
349 | "r" (a), "r" (b), "r" (c), "r" (d), \ | ||
350 | "2" (e), "3" (f) \ | ||
351 | : SYSCALL_CLOBBERS); | ||
352 | |||
353 | #define _syscall6(type, name, atype, a, btype, b, ctype, c, dtype, d, etype, e, ftype, f) \ | ||
354 | type name (atype a, btype b, ctype c, dtype d, etype e, ftype f) \ | ||
355 | { \ | ||
356 | register atype __a __asm__ (SYSCALL_ARG0) = a; \ | ||
357 | register btype __b __asm__ (SYSCALL_ARG1) = b; \ | ||
358 | register ctype __c __asm__ (SYSCALL_ARG2) = c; \ | ||
359 | register dtype __d __asm__ (SYSCALL_ARG3) = d; \ | ||
360 | register etype __e __asm__ (SYSCALL_ARG4) = e; \ | ||
361 | register etype __f __asm__ (SYSCALL_ARG5) = f; \ | ||
362 | register unsigned long __syscall __asm__ (SYSCALL_NUM) = __NR_##name; \ | ||
363 | register unsigned long __ret __asm__ (SYSCALL_RET); \ | ||
364 | __SYSCALL6_TRAP(__syscall, __ret, __a, __b, __c, __d, __e, __f); \ | ||
365 | __syscall_return (type, __ret); \ | ||
366 | } | ||
367 | |||
368 | |||
369 | #define __ARCH_WANT_IPC_PARSE_VERSION | 209 | #define __ARCH_WANT_IPC_PARSE_VERSION |
370 | #define __ARCH_WANT_OLD_READDIR | 210 | #define __ARCH_WANT_OLD_READDIR |
371 | #define __ARCH_WANT_STAT64 | 211 | #define __ARCH_WANT_STAT64 |
diff --git a/include/asm-x86_64/Kbuild b/include/asm-x86_64/Kbuild index 6c455b4068c0..ebd7117782a6 100644 --- a/include/asm-x86_64/Kbuild +++ b/include/asm-x86_64/Kbuild | |||
@@ -11,7 +11,6 @@ header-y += ldt.h | |||
11 | header-y += msr.h | 11 | header-y += msr.h |
12 | header-y += prctl.h | 12 | header-y += prctl.h |
13 | header-y += ptrace-abi.h | 13 | header-y += ptrace-abi.h |
14 | header-y += setup.h | ||
15 | header-y += sigcontext32.h | 14 | header-y += sigcontext32.h |
16 | header-y += ucontext.h | 15 | header-y += ucontext.h |
17 | header-y += vsyscall32.h | 16 | header-y += vsyscall32.h |
diff --git a/include/asm-x86_64/atomic.h b/include/asm-x86_64/atomic.h index 626d3715fbb5..706ca4b60000 100644 --- a/include/asm-x86_64/atomic.h +++ b/include/asm-x86_64/atomic.h | |||
@@ -21,7 +21,7 @@ | |||
21 | * on us. We need to use _exactly_ the address the user gave us, | 21 | * on us. We need to use _exactly_ the address the user gave us, |
22 | * not some alias that contains the same information. | 22 | * not some alias that contains the same information. |
23 | */ | 23 | */ |
24 | typedef struct { volatile int counter; } atomic_t; | 24 | typedef struct { int counter; } atomic_t; |
25 | 25 | ||
26 | #define ATOMIC_INIT(i) { (i) } | 26 | #define ATOMIC_INIT(i) { (i) } |
27 | 27 | ||
diff --git a/include/asm-x86_64/dma-mapping.h b/include/asm-x86_64/dma-mapping.h index 10174b110a5c..be9ec6890723 100644 --- a/include/asm-x86_64/dma-mapping.h +++ b/include/asm-x86_64/dma-mapping.h | |||
@@ -180,12 +180,13 @@ static inline int dma_get_cache_alignment(void) | |||
180 | return boot_cpu_data.x86_clflush_size; | 180 | return boot_cpu_data.x86_clflush_size; |
181 | } | 181 | } |
182 | 182 | ||
183 | #define dma_is_consistent(h) 1 | 183 | #define dma_is_consistent(d, h) 1 |
184 | 184 | ||
185 | extern int dma_set_mask(struct device *dev, u64 mask); | 185 | extern int dma_set_mask(struct device *dev, u64 mask); |
186 | 186 | ||
187 | static inline void | 187 | static inline void |
188 | dma_cache_sync(void *vaddr, size_t size, enum dma_data_direction dir) | 188 | dma_cache_sync(struct device *dev, void *vaddr, size_t size, |
189 | enum dma_data_direction dir) | ||
189 | { | 190 | { |
190 | flush_write_buffers(); | 191 | flush_write_buffers(); |
191 | } | 192 | } |
diff --git a/include/asm-x86_64/futex.h b/include/asm-x86_64/futex.h index 9804bf07b092..5cdfb08013c3 100644 --- a/include/asm-x86_64/futex.h +++ b/include/asm-x86_64/futex.h | |||
@@ -55,7 +55,7 @@ futex_atomic_op_inuser (int encoded_op, int __user *uaddr) | |||
55 | if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int))) | 55 | if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int))) |
56 | return -EFAULT; | 56 | return -EFAULT; |
57 | 57 | ||
58 | inc_preempt_count(); | 58 | pagefault_disable(); |
59 | 59 | ||
60 | switch (op) { | 60 | switch (op) { |
61 | case FUTEX_OP_SET: | 61 | case FUTEX_OP_SET: |
@@ -78,7 +78,7 @@ futex_atomic_op_inuser (int encoded_op, int __user *uaddr) | |||
78 | ret = -ENOSYS; | 78 | ret = -ENOSYS; |
79 | } | 79 | } |
80 | 80 | ||
81 | dec_preempt_count(); | 81 | pagefault_enable(); |
82 | 82 | ||
83 | if (!ret) { | 83 | if (!ret) { |
84 | switch (cmp) { | 84 | switch (cmp) { |
diff --git a/include/asm-x86_64/smp.h b/include/asm-x86_64/smp.h index 7ae7e7d89d16..e17b9ec42e98 100644 --- a/include/asm-x86_64/smp.h +++ b/include/asm-x86_64/smp.h | |||
@@ -113,13 +113,6 @@ static __inline int logical_smp_processor_id(void) | |||
113 | #define cpu_physical_id(cpu) x86_cpu_to_apicid[cpu] | 113 | #define cpu_physical_id(cpu) x86_cpu_to_apicid[cpu] |
114 | #else | 114 | #else |
115 | #define cpu_physical_id(cpu) boot_cpu_id | 115 | #define cpu_physical_id(cpu) boot_cpu_id |
116 | static inline int smp_call_function_single(int cpuid, void (*func) (void *info), | ||
117 | void *info, int retry, int wait) | ||
118 | { | ||
119 | /* Disable interrupts here? */ | ||
120 | func(info); | ||
121 | return 0; | ||
122 | } | ||
123 | #endif /* !CONFIG_SMP */ | 116 | #endif /* !CONFIG_SMP */ |
124 | #endif | 117 | #endif |
125 | 118 | ||
diff --git a/include/asm-x86_64/spinlock_types.h b/include/asm-x86_64/spinlock_types.h index 59efe849f351..4da9345c1500 100644 --- a/include/asm-x86_64/spinlock_types.h +++ b/include/asm-x86_64/spinlock_types.h | |||
@@ -6,13 +6,13 @@ | |||
6 | #endif | 6 | #endif |
7 | 7 | ||
8 | typedef struct { | 8 | typedef struct { |
9 | volatile unsigned int slock; | 9 | unsigned int slock; |
10 | } raw_spinlock_t; | 10 | } raw_spinlock_t; |
11 | 11 | ||
12 | #define __RAW_SPIN_LOCK_UNLOCKED { 1 } | 12 | #define __RAW_SPIN_LOCK_UNLOCKED { 1 } |
13 | 13 | ||
14 | typedef struct { | 14 | typedef struct { |
15 | volatile unsigned int lock; | 15 | unsigned int lock; |
16 | } raw_rwlock_t; | 16 | } raw_rwlock_t; |
17 | 17 | ||
18 | #define __RAW_RW_LOCK_UNLOCKED { RW_LOCK_BIAS } | 18 | #define __RAW_RW_LOCK_UNLOCKED { RW_LOCK_BIAS } |
diff --git a/include/asm-x86_64/unistd.h b/include/asm-x86_64/unistd.h index 777288eb7e75..c5f596e71faa 100644 --- a/include/asm-x86_64/unistd.h +++ b/include/asm-x86_64/unistd.h | |||
@@ -622,25 +622,7 @@ __SYSCALL(__NR_move_pages, sys_move_pages) | |||
622 | 622 | ||
623 | #define __NR_syscall_max __NR_move_pages | 623 | #define __NR_syscall_max __NR_move_pages |
624 | 624 | ||
625 | #ifdef __KERNEL__ | ||
626 | #include <linux/err.h> | ||
627 | #endif | ||
628 | |||
629 | #ifndef __NO_STUBS | 625 | #ifndef __NO_STUBS |
630 | |||
631 | /* user-visible error numbers are in the range -1 - -MAX_ERRNO */ | ||
632 | |||
633 | #define __syscall_clobber "r11","rcx","memory" | ||
634 | |||
635 | #define __syscall_return(type, res) \ | ||
636 | do { \ | ||
637 | if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \ | ||
638 | errno = -(res); \ | ||
639 | res = -1; \ | ||
640 | } \ | ||
641 | return (type) (res); \ | ||
642 | } while (0) | ||
643 | |||
644 | #define __ARCH_WANT_OLD_READDIR | 626 | #define __ARCH_WANT_OLD_READDIR |
645 | #define __ARCH_WANT_OLD_STAT | 627 | #define __ARCH_WANT_OLD_STAT |
646 | #define __ARCH_WANT_SYS_ALARM | 628 | #define __ARCH_WANT_SYS_ALARM |
@@ -664,87 +646,6 @@ do { \ | |||
664 | #define __ARCH_WANT_SYS_TIME | 646 | #define __ARCH_WANT_SYS_TIME |
665 | #define __ARCH_WANT_COMPAT_SYS_TIME | 647 | #define __ARCH_WANT_COMPAT_SYS_TIME |
666 | 648 | ||
667 | #define __syscall "syscall" | ||
668 | |||
669 | #define _syscall0(type,name) \ | ||
670 | type name(void) \ | ||
671 | { \ | ||
672 | long __res; \ | ||
673 | __asm__ volatile (__syscall \ | ||
674 | : "=a" (__res) \ | ||
675 | : "0" (__NR_##name) : __syscall_clobber ); \ | ||
676 | __syscall_return(type,__res); \ | ||
677 | } | ||
678 | |||
679 | #define _syscall1(type,name,type1,arg1) \ | ||
680 | type name(type1 arg1) \ | ||
681 | { \ | ||
682 | long __res; \ | ||
683 | __asm__ volatile (__syscall \ | ||
684 | : "=a" (__res) \ | ||
685 | : "0" (__NR_##name),"D" ((long)(arg1)) : __syscall_clobber ); \ | ||
686 | __syscall_return(type,__res); \ | ||
687 | } | ||
688 | |||
689 | #define _syscall2(type,name,type1,arg1,type2,arg2) \ | ||
690 | type name(type1 arg1,type2 arg2) \ | ||
691 | { \ | ||
692 | long __res; \ | ||
693 | __asm__ volatile (__syscall \ | ||
694 | : "=a" (__res) \ | ||
695 | : "0" (__NR_##name),"D" ((long)(arg1)),"S" ((long)(arg2)) : __syscall_clobber ); \ | ||
696 | __syscall_return(type,__res); \ | ||
697 | } | ||
698 | |||
699 | #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ | ||
700 | type name(type1 arg1,type2 arg2,type3 arg3) \ | ||
701 | { \ | ||
702 | long __res; \ | ||
703 | __asm__ volatile (__syscall \ | ||
704 | : "=a" (__res) \ | ||
705 | : "0" (__NR_##name),"D" ((long)(arg1)),"S" ((long)(arg2)), \ | ||
706 | "d" ((long)(arg3)) : __syscall_clobber); \ | ||
707 | __syscall_return(type,__res); \ | ||
708 | } | ||
709 | |||
710 | #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \ | ||
711 | type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ | ||
712 | { \ | ||
713 | long __res; \ | ||
714 | __asm__ volatile ("movq %5,%%r10 ;" __syscall \ | ||
715 | : "=a" (__res) \ | ||
716 | : "0" (__NR_##name),"D" ((long)(arg1)),"S" ((long)(arg2)), \ | ||
717 | "d" ((long)(arg3)),"g" ((long)(arg4)) : __syscall_clobber,"r10" ); \ | ||
718 | __syscall_return(type,__res); \ | ||
719 | } | ||
720 | |||
721 | #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \ | ||
722 | type5,arg5) \ | ||
723 | type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \ | ||
724 | { \ | ||
725 | long __res; \ | ||
726 | __asm__ volatile ("movq %5,%%r10 ; movq %6,%%r8 ; " __syscall \ | ||
727 | : "=a" (__res) \ | ||
728 | : "0" (__NR_##name),"D" ((long)(arg1)),"S" ((long)(arg2)), \ | ||
729 | "d" ((long)(arg3)),"g" ((long)(arg4)),"g" ((long)(arg5)) : \ | ||
730 | __syscall_clobber,"r8","r10" ); \ | ||
731 | __syscall_return(type,__res); \ | ||
732 | } | ||
733 | |||
734 | #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \ | ||
735 | type5,arg5,type6,arg6) \ | ||
736 | type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5,type6 arg6) \ | ||
737 | { \ | ||
738 | long __res; \ | ||
739 | __asm__ volatile ("movq %5,%%r10 ; movq %6,%%r8 ; movq %7,%%r9 ; " __syscall \ | ||
740 | : "=a" (__res) \ | ||
741 | : "0" (__NR_##name),"D" ((long)(arg1)),"S" ((long)(arg2)), \ | ||
742 | "d" ((long)(arg3)), "g" ((long)(arg4)), "g" ((long)(arg5)), \ | ||
743 | "g" ((long)(arg6)) : \ | ||
744 | __syscall_clobber,"r8","r10","r9" ); \ | ||
745 | __syscall_return(type,__res); \ | ||
746 | } | ||
747 | |||
748 | #ifdef __KERNEL__ | 649 | #ifdef __KERNEL__ |
749 | #ifndef __ASSEMBLY__ | 650 | #ifndef __ASSEMBLY__ |
750 | 651 | ||
diff --git a/include/asm-xtensa/dma-mapping.h b/include/asm-xtensa/dma-mapping.h index c39c91dfcc69..82b03b3a2ee6 100644 --- a/include/asm-xtensa/dma-mapping.h +++ b/include/asm-xtensa/dma-mapping.h | |||
@@ -170,10 +170,10 @@ dma_get_cache_alignment(void) | |||
170 | return L1_CACHE_BYTES; | 170 | return L1_CACHE_BYTES; |
171 | } | 171 | } |
172 | 172 | ||
173 | #define dma_is_consistent(d) (1) | 173 | #define dma_is_consistent(d, h) (1) |
174 | 174 | ||
175 | static inline void | 175 | static inline void |
176 | dma_cache_sync(void *vaddr, size_t size, | 176 | dma_cache_sync(struct device *dev, void *vaddr, size_t size, |
177 | enum dma_data_direction direction) | 177 | enum dma_data_direction direction) |
178 | { | 178 | { |
179 | consistent_sync(vaddr, size, direction); | 179 | consistent_sync(vaddr, size, direction); |
diff --git a/include/asm-xtensa/unistd.h b/include/asm-xtensa/unistd.h index 411f810a55c6..2e1a1b997e7d 100644 --- a/include/asm-xtensa/unistd.h +++ b/include/asm-xtensa/unistd.h | |||
@@ -218,190 +218,6 @@ | |||
218 | 218 | ||
219 | #define SYSXTENSA_COUNT 5 /* count of syscall0 functions*/ | 219 | #define SYSXTENSA_COUNT 5 /* count of syscall0 functions*/ |
220 | 220 | ||
221 | #ifdef __KERNEL__ | ||
222 | #include <linux/linkage.h> | ||
223 | |||
224 | #define __syscall_return(type, res) return ((type)(res)) | ||
225 | |||
226 | /* Tensilica's xt-xcc compiler is much more agressive at code | ||
227 | * optimization than gcc. Multiple __asm__ statements are | ||
228 | * insufficient for xt-xcc because subsequent optimization passes | ||
229 | * (beyond the front-end that knows of __asm__ statements and other | ||
230 | * such GNU Extensions to C) can modify the register selection for | ||
231 | * containment of C variables. | ||
232 | * | ||
233 | * xt-xcc cannot modify the contents of a single __asm__ statement, so | ||
234 | * we create single-asm versions of the syscall macros that are | ||
235 | * suitable and optimal for both xt-xcc and gcc. | ||
236 | * | ||
237 | * Linux takes system-call arguments in registers. The following | ||
238 | * design is optimized for user-land apps (e.g., glibc) which | ||
239 | * typically have a function wrapper around the "syscall" assembly | ||
240 | * instruction. It satisfies the Xtensa ABI while minizing argument | ||
241 | * shifting. | ||
242 | * | ||
243 | * The Xtensa ABI and software conventions require the system-call | ||
244 | * number in a2. If an argument exists in a2, we move it to the next | ||
245 | * available register. Note that for improved efficiency, we do NOT | ||
246 | * shift all parameters down one register to maintain the original | ||
247 | * order. | ||
248 | * | ||
249 | * At best case (zero arguments), we just write the syscall number to | ||
250 | * a2. At worst case (1 to 6 arguments), we move the argument in a2 | ||
251 | * to the next available register, then write the syscall number to | ||
252 | * a2. | ||
253 | * | ||
254 | * For clarity, the following truth table enumerates all possibilities. | ||
255 | * | ||
256 | * arguments syscall number arg0, arg1, arg2, arg3, arg4, arg5 | ||
257 | * --------- -------------- ---------------------------------- | ||
258 | * 0 a2 | ||
259 | * 1 a2 a3 | ||
260 | * 2 a2 a4, a3 | ||
261 | * 3 a2 a5, a3, a4 | ||
262 | * 4 a2 a6, a3, a4, a5 | ||
263 | * 5 a2 a7, a3, a4, a5, a6 | ||
264 | * 6 a2 a8, a3, a4, a5, a6, a7 | ||
265 | */ | ||
266 | |||
267 | #define _syscall0(type,name) \ | ||
268 | type name(void) \ | ||
269 | { \ | ||
270 | long __res; \ | ||
271 | __asm__ __volatile__ ( \ | ||
272 | " movi a2, %1 \n" \ | ||
273 | " syscall \n" \ | ||
274 | " mov %0, a2 \n" \ | ||
275 | : "=a" (__res) \ | ||
276 | : "i" (__NR_##name) \ | ||
277 | : "a2" \ | ||
278 | ); \ | ||
279 | __syscall_return(type,__res); \ | ||
280 | } | ||
281 | |||
282 | #define _syscall1(type,name,type0,arg0) \ | ||
283 | type name(type0 arg0) \ | ||
284 | { \ | ||
285 | long __res; \ | ||
286 | __asm__ __volatile__ ( \ | ||
287 | " mov a3, %2 \n" \ | ||
288 | " movi a2, %1 \n" \ | ||
289 | " syscall \n" \ | ||
290 | " mov %0, a2 \n" \ | ||
291 | : "=a" (__res) \ | ||
292 | : "i" (__NR_##name), "a" (arg0) \ | ||
293 | : "a2", "a3" \ | ||
294 | ); \ | ||
295 | __syscall_return(type,__res); \ | ||
296 | } | ||
297 | |||
298 | #define _syscall2(type,name,type0,arg0,type1,arg1) \ | ||
299 | type name(type0 arg0,type1 arg1) \ | ||
300 | { \ | ||
301 | long __res; \ | ||
302 | __asm__ __volatile__ ( \ | ||
303 | " mov a4, %2 \n" \ | ||
304 | " mov a3, %3 \n" \ | ||
305 | " movi a2, %1 \n" \ | ||
306 | " syscall \n" \ | ||
307 | " mov %0, a2 \n" \ | ||
308 | : "=a" (__res) \ | ||
309 | : "i" (__NR_##name), "a" (arg0), "a" (arg1) \ | ||
310 | : "a2", "a3", "a4" \ | ||
311 | ); \ | ||
312 | __syscall_return(type,__res); \ | ||
313 | } | ||
314 | |||
315 | #define _syscall3(type,name,type0,arg0,type1,arg1,type2,arg2) \ | ||
316 | type name(type0 arg0,type1 arg1,type2 arg2) \ | ||
317 | { \ | ||
318 | long __res; \ | ||
319 | __asm__ __volatile__ ( \ | ||
320 | " mov a5, %2 \n" \ | ||
321 | " mov a4, %4 \n" \ | ||
322 | " mov a3, %3 \n" \ | ||
323 | " movi a2, %1 \n" \ | ||
324 | " syscall \n" \ | ||
325 | " mov %0, a2 \n" \ | ||
326 | : "=a" (__res) \ | ||
327 | : "i" (__NR_##name), "a" (arg0), "a" (arg1), "a" (arg2) \ | ||
328 | : "a2", "a3", "a4", "a5" \ | ||
329 | ); \ | ||
330 | __syscall_return(type,__res); \ | ||
331 | } | ||
332 | |||
333 | #define _syscall4(type,name,type0,arg0,type1,arg1,type2,arg2,type3,arg3) \ | ||
334 | type name(type0 arg0,type1 arg1,type2 arg2,type3 arg3) \ | ||
335 | { \ | ||
336 | long __res; \ | ||
337 | __asm__ __volatile__ ( \ | ||
338 | " mov a6, %2 \n" \ | ||
339 | " mov a5, %5 \n" \ | ||
340 | " mov a4, %4 \n" \ | ||
341 | " mov a3, %3 \n" \ | ||
342 | " movi a2, %1 \n" \ | ||
343 | " syscall \n" \ | ||
344 | " mov %0, a2 \n" \ | ||
345 | : "=a" (__res) \ | ||
346 | : "i" (__NR_##name), "a" (arg0), "a" (arg1), "a" (arg2), "a" (arg3) \ | ||
347 | : "a2", "a3", "a4", "a5", "a6" \ | ||
348 | ); \ | ||
349 | __syscall_return(type,__res); \ | ||
350 | } | ||
351 | |||
352 | /* Note that we save and restore the a7 frame pointer. | ||
353 | * Including a7 in the clobber list doesn't do what you'd expect. | ||
354 | */ | ||
355 | #define _syscall5(type,name,type0,arg0,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \ | ||
356 | type name(type0 arg0,type1 arg1,type2 arg2,type3 arg3,type4 arg4) \ | ||
357 | { \ | ||
358 | long __res; \ | ||
359 | __asm__ __volatile__ ( \ | ||
360 | " mov a9, a7 \n" \ | ||
361 | " mov a7, %2 \n" \ | ||
362 | " mov a6, %6 \n" \ | ||
363 | " mov a5, %5 \n" \ | ||
364 | " mov a4, %4 \n" \ | ||
365 | " mov a3, %3 \n" \ | ||
366 | " movi a2, %1 \n" \ | ||
367 | " syscall \n" \ | ||
368 | " mov a7, a9 \n" \ | ||
369 | " mov %0, a2 \n" \ | ||
370 | : "=a" (__res) \ | ||
371 | : "i" (__NR_##name), "a" (arg0), "a" (arg1), "a" (arg2), \ | ||
372 | "a" (arg3), "a" (arg4) \ | ||
373 | : "a2", "a3", "a4", "a5", "a6", "a9" \ | ||
374 | ); \ | ||
375 | __syscall_return(type,__res); \ | ||
376 | } | ||
377 | |||
378 | /* Note that we save and restore the a7 frame pointer. | ||
379 | * Including a7 in the clobber list doesn't do what you'd expect. | ||
380 | */ | ||
381 | #define _syscall6(type,name,type0,arg0,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \ | ||
382 | type name(type0 arg0,type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \ | ||
383 | { \ | ||
384 | long __res; \ | ||
385 | __asm__ __volatile__ ( \ | ||
386 | " mov a9, a7 \n" \ | ||
387 | " mov a8, %2 \n" \ | ||
388 | " mov a7, %7 \n" \ | ||
389 | " mov a6, %6 \n" \ | ||
390 | " mov a5, %5 \n" \ | ||
391 | " mov a4, %4 \n" \ | ||
392 | " mov a3, %3 \n" \ | ||
393 | " movi a2, %1 \n" \ | ||
394 | " syscall \n" \ | ||
395 | " mov a7, a9 \n" \ | ||
396 | " mov %0, a2 \n" \ | ||
397 | : "=a" (__res) \ | ||
398 | : "i" (__NR_##name), "a" (arg0), "a" (arg1), "a" (arg2), \ | ||
399 | "a" (arg3), "a" (arg4), "a" (arg5) \ | ||
400 | : "a2", "a3", "a4", "a5", "a6", "a8", "a9" \ | ||
401 | ); \ | ||
402 | __syscall_return(type,__res); \ | ||
403 | } | ||
404 | |||
405 | /* | 221 | /* |
406 | * "Conditional" syscalls | 222 | * "Conditional" syscalls |
407 | * | 223 | * |
diff --git a/include/linux/Kbuild b/include/linux/Kbuild index ff433126361f..e618b25b5add 100644 --- a/include/linux/Kbuild +++ b/include/linux/Kbuild | |||
@@ -221,6 +221,7 @@ unifdef-y += if_bridge.h | |||
221 | unifdef-y += if_ec.h | 221 | unifdef-y += if_ec.h |
222 | unifdef-y += if_eql.h | 222 | unifdef-y += if_eql.h |
223 | unifdef-y += if_ether.h | 223 | unifdef-y += if_ether.h |
224 | unifdef-y += if_fddi.h | ||
224 | unifdef-y += if_frad.h | 225 | unifdef-y += if_frad.h |
225 | unifdef-y += if_ltalk.h | 226 | unifdef-y += if_ltalk.h |
226 | unifdef-y += if_pppox.h | 227 | unifdef-y += if_pppox.h |
@@ -282,6 +283,7 @@ unifdef-y += nvram.h | |||
282 | unifdef-y += parport.h | 283 | unifdef-y += parport.h |
283 | unifdef-y += patchkey.h | 284 | unifdef-y += patchkey.h |
284 | unifdef-y += pci.h | 285 | unifdef-y += pci.h |
286 | unifdef-y += personality.h | ||
285 | unifdef-y += pktcdvd.h | 287 | unifdef-y += pktcdvd.h |
286 | unifdef-y += pmu.h | 288 | unifdef-y += pmu.h |
287 | unifdef-y += poll.h | 289 | unifdef-y += poll.h |
@@ -337,6 +339,7 @@ unifdef-y += videodev.h | |||
337 | unifdef-y += wait.h | 339 | unifdef-y += wait.h |
338 | unifdef-y += wanrouter.h | 340 | unifdef-y += wanrouter.h |
339 | unifdef-y += watchdog.h | 341 | unifdef-y += watchdog.h |
342 | unifdef-y += wireless.h | ||
340 | unifdef-y += xfrm.h | 343 | unifdef-y += xfrm.h |
341 | 344 | ||
342 | objhdr-y += version.h | 345 | objhdr-y += version.h |
diff --git a/include/linux/aio.h b/include/linux/aio.h index 0d71c0041f13..3372ec6bf53a 100644 --- a/include/linux/aio.h +++ b/include/linux/aio.h | |||
@@ -111,7 +111,6 @@ struct kiocb { | |||
111 | size_t ki_nbytes; /* copy of iocb->aio_nbytes */ | 111 | size_t ki_nbytes; /* copy of iocb->aio_nbytes */ |
112 | char __user *ki_buf; /* remaining iocb->aio_buf */ | 112 | char __user *ki_buf; /* remaining iocb->aio_buf */ |
113 | size_t ki_left; /* remaining bytes */ | 113 | size_t ki_left; /* remaining bytes */ |
114 | long ki_retried; /* just for testing */ | ||
115 | struct iovec ki_inline_vec; /* inline vector */ | 114 | struct iovec ki_inline_vec; /* inline vector */ |
116 | struct iovec *ki_iovec; | 115 | struct iovec *ki_iovec; |
117 | unsigned long ki_nr_segs; | 116 | unsigned long ki_nr_segs; |
@@ -194,7 +193,7 @@ struct kioctx { | |||
194 | 193 | ||
195 | struct aio_ring_info ring_info; | 194 | struct aio_ring_info ring_info; |
196 | 195 | ||
197 | struct work_struct wq; | 196 | struct delayed_work wq; |
198 | }; | 197 | }; |
199 | 198 | ||
200 | /* prototypes */ | 199 | /* prototypes */ |
@@ -238,7 +237,6 @@ do { \ | |||
238 | } while (0) | 237 | } while (0) |
239 | 238 | ||
240 | #define io_wait_to_kiocb(wait) container_of(wait, struct kiocb, ki_wait) | 239 | #define io_wait_to_kiocb(wait) container_of(wait, struct kiocb, ki_wait) |
241 | #define is_retried_kiocb(iocb) ((iocb)->ki_retried > 1) | ||
242 | 240 | ||
243 | #include <linux/aio_abi.h> | 241 | #include <linux/aio_abi.h> |
244 | 242 | ||
diff --git a/include/linux/bootmem.h b/include/linux/bootmem.h index 31e9abb6d977..2275f2748708 100644 --- a/include/linux/bootmem.h +++ b/include/linux/bootmem.h | |||
@@ -119,8 +119,7 @@ extern void *alloc_large_system_hash(const char *tablename, | |||
119 | unsigned int *_hash_mask, | 119 | unsigned int *_hash_mask, |
120 | unsigned long limit); | 120 | unsigned long limit); |
121 | 121 | ||
122 | #define HASH_HIGHMEM 0x00000001 /* Consider highmem? */ | 122 | #define HASH_EARLY 0x00000001 /* Allocating during early boot? */ |
123 | #define HASH_EARLY 0x00000002 /* Allocating during early boot? */ | ||
124 | 123 | ||
125 | /* Only NUMA needs hash distribution. | 124 | /* Only NUMA needs hash distribution. |
126 | * IA64 is known to have sufficient vmalloc space. | 125 | * IA64 is known to have sufficient vmalloc space. |
diff --git a/include/linux/bottom_half.h b/include/linux/bottom_half.h new file mode 100644 index 000000000000..777dbf695d44 --- /dev/null +++ b/include/linux/bottom_half.h | |||
@@ -0,0 +1,10 @@ | |||
1 | #ifndef _LINUX_BH_H | ||
2 | #define _LINUX_BH_H | ||
3 | |||
4 | extern void local_bh_disable(void); | ||
5 | extern void __local_bh_enable(void); | ||
6 | extern void _local_bh_enable(void); | ||
7 | extern void local_bh_enable(void); | ||
8 | extern void local_bh_enable_ip(unsigned long ip); | ||
9 | |||
10 | #endif /* _LINUX_BH_H */ | ||
diff --git a/include/linux/carta_random32.h b/include/linux/carta_random32.h deleted file mode 100644 index f6f3bd9f20b5..000000000000 --- a/include/linux/carta_random32.h +++ /dev/null | |||
@@ -1,29 +0,0 @@ | |||
1 | /* | ||
2 | * Fast, simple, yet decent quality random number generator based on | ||
3 | * a paper by David G. Carta ("Two Fast Implementations of the | ||
4 | * `Minimal Standard' Random Number Generator," Communications of the | ||
5 | * ACM, January, 1990). | ||
6 | * | ||
7 | * Copyright (c) 2002-2006 Hewlett-Packard Development Company, L.P. | ||
8 | * Contributed by Stephane Eranian <eranian@hpl.hp.com> | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or | ||
11 | * modify it under the terms of version 2 of the GNU General Public | ||
12 | * License as published by the Free Software Foundation. | ||
13 | * | ||
14 | * This program is distributed in the hope that it will be useful, | ||
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
17 | * General Public License for more details. | ||
18 | * | ||
19 | * You should have received a copy of the GNU General Public License | ||
20 | * along with this program; if not, write to the Free Software | ||
21 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA | ||
22 | * 02111-1307 USA | ||
23 | */ | ||
24 | #ifndef _LINUX_CARTA_RANDOM32_H_ | ||
25 | #define _LINUX_CARTA_RANDOM32_H_ | ||
26 | |||
27 | u64 carta_random32(u64 seed); | ||
28 | |||
29 | #endif /* _LINUX_CARTA_RANDOM32_H_ */ | ||
diff --git a/include/linux/cciss_ioctl.h b/include/linux/cciss_ioctl.h index 6e27f42e3a57..cb57c30081a8 100644 --- a/include/linux/cciss_ioctl.h +++ b/include/linux/cciss_ioctl.h | |||
@@ -80,7 +80,7 @@ typedef __u32 DriverVer_type; | |||
80 | #define HWORD __u16 | 80 | #define HWORD __u16 |
81 | #define DWORD __u32 | 81 | #define DWORD __u32 |
82 | 82 | ||
83 | #define CISS_MAX_LUN 16 | 83 | #define CISS_MAX_LUN 1024 |
84 | 84 | ||
85 | #define LEVEL2LUN 1 // index into Target(x) structure, due to byte swapping | 85 | #define LEVEL2LUN 1 // index into Target(x) structure, due to byte swapping |
86 | #define LEVEL3LUN 0 | 86 | #define LEVEL3LUN 0 |
diff --git a/include/linux/cdev.h b/include/linux/cdev.h index ee5f53f2ca15..f309b00e986e 100644 --- a/include/linux/cdev.h +++ b/include/linux/cdev.h | |||
@@ -2,6 +2,10 @@ | |||
2 | #define _LINUX_CDEV_H | 2 | #define _LINUX_CDEV_H |
3 | #ifdef __KERNEL__ | 3 | #ifdef __KERNEL__ |
4 | 4 | ||
5 | #include <linux/kobject.h> | ||
6 | #include <linux/kdev_t.h> | ||
7 | #include <linux/list.h> | ||
8 | |||
5 | struct cdev { | 9 | struct cdev { |
6 | struct kobject kobj; | 10 | struct kobject kobj; |
7 | struct module *owner; | 11 | struct module *owner; |
diff --git a/include/linux/connector.h b/include/linux/connector.h index 4c02119c6ab9..3ea1cd58de97 100644 --- a/include/linux/connector.h +++ b/include/linux/connector.h | |||
@@ -133,7 +133,7 @@ struct cn_callback_data { | |||
133 | struct cn_callback_entry { | 133 | struct cn_callback_entry { |
134 | struct list_head callback_entry; | 134 | struct list_head callback_entry; |
135 | struct cn_callback *cb; | 135 | struct cn_callback *cb; |
136 | struct work_struct work; | 136 | struct delayed_work work; |
137 | struct cn_queue_dev *pdev; | 137 | struct cn_queue_dev *pdev; |
138 | 138 | ||
139 | struct cn_callback_id id; | 139 | struct cn_callback_id id; |
@@ -170,7 +170,7 @@ void cn_queue_free_dev(struct cn_queue_dev *dev); | |||
170 | 170 | ||
171 | int cn_cb_equal(struct cb_id *, struct cb_id *); | 171 | int cn_cb_equal(struct cb_id *, struct cb_id *); |
172 | 172 | ||
173 | void cn_queue_wrapper(void *data); | 173 | void cn_queue_wrapper(struct work_struct *work); |
174 | 174 | ||
175 | extern int cn_already_initialized; | 175 | extern int cn_already_initialized; |
176 | 176 | ||
diff --git a/include/linux/cpu.h b/include/linux/cpu.h index ad90340e7dba..bfb520212d71 100644 --- a/include/linux/cpu.h +++ b/include/linux/cpu.h | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <linux/compiler.h> | 24 | #include <linux/compiler.h> |
25 | #include <linux/cpumask.h> | 25 | #include <linux/cpumask.h> |
26 | #include <asm/semaphore.h> | 26 | #include <asm/semaphore.h> |
27 | #include <linux/mutex.h> | ||
27 | 28 | ||
28 | struct cpu { | 29 | struct cpu { |
29 | int node_id; /* The node which contains the CPU */ | 30 | int node_id; /* The node which contains the CPU */ |
@@ -74,6 +75,17 @@ extern struct sysdev_class cpu_sysdev_class; | |||
74 | 75 | ||
75 | #ifdef CONFIG_HOTPLUG_CPU | 76 | #ifdef CONFIG_HOTPLUG_CPU |
76 | /* Stop CPUs going up and down. */ | 77 | /* Stop CPUs going up and down. */ |
78 | |||
79 | static inline void cpuhotplug_mutex_lock(struct mutex *cpu_hp_mutex) | ||
80 | { | ||
81 | mutex_lock(cpu_hp_mutex); | ||
82 | } | ||
83 | |||
84 | static inline void cpuhotplug_mutex_unlock(struct mutex *cpu_hp_mutex) | ||
85 | { | ||
86 | mutex_unlock(cpu_hp_mutex); | ||
87 | } | ||
88 | |||
77 | extern void lock_cpu_hotplug(void); | 89 | extern void lock_cpu_hotplug(void); |
78 | extern void unlock_cpu_hotplug(void); | 90 | extern void unlock_cpu_hotplug(void); |
79 | #define hotcpu_notifier(fn, pri) { \ | 91 | #define hotcpu_notifier(fn, pri) { \ |
@@ -85,17 +97,24 @@ extern void unlock_cpu_hotplug(void); | |||
85 | #define unregister_hotcpu_notifier(nb) unregister_cpu_notifier(nb) | 97 | #define unregister_hotcpu_notifier(nb) unregister_cpu_notifier(nb) |
86 | int cpu_down(unsigned int cpu); | 98 | int cpu_down(unsigned int cpu); |
87 | #define cpu_is_offline(cpu) unlikely(!cpu_online(cpu)) | 99 | #define cpu_is_offline(cpu) unlikely(!cpu_online(cpu)) |
88 | #else | 100 | |
101 | #else /* CONFIG_HOTPLUG_CPU */ | ||
102 | |||
103 | static inline void cpuhotplug_mutex_lock(struct mutex *cpu_hp_mutex) | ||
104 | { } | ||
105 | static inline void cpuhotplug_mutex_unlock(struct mutex *cpu_hp_mutex) | ||
106 | { } | ||
107 | |||
89 | #define lock_cpu_hotplug() do { } while (0) | 108 | #define lock_cpu_hotplug() do { } while (0) |
90 | #define unlock_cpu_hotplug() do { } while (0) | 109 | #define unlock_cpu_hotplug() do { } while (0) |
91 | #define lock_cpu_hotplug_interruptible() 0 | 110 | #define lock_cpu_hotplug_interruptible() 0 |
92 | #define hotcpu_notifier(fn, pri) do { } while (0) | 111 | #define hotcpu_notifier(fn, pri) do { (void)(fn); } while (0) |
93 | #define register_hotcpu_notifier(nb) do { } while (0) | 112 | #define register_hotcpu_notifier(nb) do { (void)(nb); } while (0) |
94 | #define unregister_hotcpu_notifier(nb) do { } while (0) | 113 | #define unregister_hotcpu_notifier(nb) do { (void)(nb); } while (0) |
95 | 114 | ||
96 | /* CPUs don't go offline once they're online w/o CONFIG_HOTPLUG_CPU */ | 115 | /* CPUs don't go offline once they're online w/o CONFIG_HOTPLUG_CPU */ |
97 | static inline int cpu_is_offline(int cpu) { return 0; } | 116 | static inline int cpu_is_offline(int cpu) { return 0; } |
98 | #endif | 117 | #endif /* CONFIG_HOTPLUG_CPU */ |
99 | 118 | ||
100 | #ifdef CONFIG_SUSPEND_SMP | 119 | #ifdef CONFIG_SUSPEND_SMP |
101 | extern int disable_nonboot_cpus(void); | 120 | extern int disable_nonboot_cpus(void); |
diff --git a/include/linux/cpuset.h b/include/linux/cpuset.h index 4d8adf663681..8821e1f75b44 100644 --- a/include/linux/cpuset.h +++ b/include/linux/cpuset.h | |||
@@ -23,6 +23,7 @@ extern void cpuset_fork(struct task_struct *p); | |||
23 | extern void cpuset_exit(struct task_struct *p); | 23 | extern void cpuset_exit(struct task_struct *p); |
24 | extern cpumask_t cpuset_cpus_allowed(struct task_struct *p); | 24 | extern cpumask_t cpuset_cpus_allowed(struct task_struct *p); |
25 | extern nodemask_t cpuset_mems_allowed(struct task_struct *p); | 25 | extern nodemask_t cpuset_mems_allowed(struct task_struct *p); |
26 | #define cpuset_current_mems_allowed (current->mems_allowed) | ||
26 | void cpuset_init_current_mems_allowed(void); | 27 | void cpuset_init_current_mems_allowed(void); |
27 | void cpuset_update_task_memory_state(void); | 28 | void cpuset_update_task_memory_state(void); |
28 | #define cpuset_nodes_subset_current_mems_allowed(nodes) \ | 29 | #define cpuset_nodes_subset_current_mems_allowed(nodes) \ |
@@ -45,7 +46,7 @@ extern int cpuset_excl_nodes_overlap(const struct task_struct *p); | |||
45 | extern int cpuset_memory_pressure_enabled; | 46 | extern int cpuset_memory_pressure_enabled; |
46 | extern void __cpuset_memory_pressure_bump(void); | 47 | extern void __cpuset_memory_pressure_bump(void); |
47 | 48 | ||
48 | extern struct file_operations proc_cpuset_operations; | 49 | extern const struct file_operations proc_cpuset_operations; |
49 | extern char *cpuset_task_status_allowed(struct task_struct *task, char *buffer); | 50 | extern char *cpuset_task_status_allowed(struct task_struct *task, char *buffer); |
50 | 51 | ||
51 | extern void cpuset_lock(void); | 52 | extern void cpuset_lock(void); |
@@ -83,6 +84,7 @@ static inline nodemask_t cpuset_mems_allowed(struct task_struct *p) | |||
83 | return node_possible_map; | 84 | return node_possible_map; |
84 | } | 85 | } |
85 | 86 | ||
87 | #define cpuset_current_mems_allowed (node_online_map) | ||
86 | static inline void cpuset_init_current_mems_allowed(void) {} | 88 | static inline void cpuset_init_current_mems_allowed(void) {} |
87 | static inline void cpuset_update_task_memory_state(void) {} | 89 | static inline void cpuset_update_task_memory_state(void) {} |
88 | #define cpuset_nodes_subset_current_mems_allowed(nodes) (1) | 90 | #define cpuset_nodes_subset_current_mems_allowed(nodes) (1) |
diff --git a/include/linux/debug_locks.h b/include/linux/debug_locks.h index 952bee79a8f3..a1c10b0c4cf0 100644 --- a/include/linux/debug_locks.h +++ b/include/linux/debug_locks.h | |||
@@ -24,7 +24,7 @@ extern int debug_locks_off(void); | |||
24 | int __ret = 0; \ | 24 | int __ret = 0; \ |
25 | \ | 25 | \ |
26 | if (unlikely(c)) { \ | 26 | if (unlikely(c)) { \ |
27 | if (debug_locks_off()) \ | 27 | if (debug_locks_silent || debug_locks_off()) \ |
28 | WARN_ON(1); \ | 28 | WARN_ON(1); \ |
29 | __ret = 1; \ | 29 | __ret = 1; \ |
30 | } \ | 30 | } \ |
diff --git a/include/linux/delayacct.h b/include/linux/delayacct.h index 561e2a77805c..55d1ca5e60f5 100644 --- a/include/linux/delayacct.h +++ b/include/linux/delayacct.h | |||
@@ -30,7 +30,7 @@ | |||
30 | #ifdef CONFIG_TASK_DELAY_ACCT | 30 | #ifdef CONFIG_TASK_DELAY_ACCT |
31 | 31 | ||
32 | extern int delayacct_on; /* Delay accounting turned on/off */ | 32 | extern int delayacct_on; /* Delay accounting turned on/off */ |
33 | extern kmem_cache_t *delayacct_cache; | 33 | extern struct kmem_cache *delayacct_cache; |
34 | extern void delayacct_init(void); | 34 | extern void delayacct_init(void); |
35 | extern void __delayacct_tsk_init(struct task_struct *); | 35 | extern void __delayacct_tsk_init(struct task_struct *); |
36 | extern void __delayacct_tsk_exit(struct task_struct *); | 36 | extern void __delayacct_tsk_exit(struct task_struct *); |
diff --git a/include/linux/device.h b/include/linux/device.h index 583a341e016c..49ab53ce92dc 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
@@ -371,6 +371,9 @@ struct device { | |||
371 | core doesn't touch it */ | 371 | core doesn't touch it */ |
372 | struct dev_pm_info power; | 372 | struct dev_pm_info power; |
373 | 373 | ||
374 | #ifdef CONFIG_NUMA | ||
375 | int numa_node; /* NUMA node this device is close to */ | ||
376 | #endif | ||
374 | u64 *dma_mask; /* dma mask (if dma'able device) */ | 377 | u64 *dma_mask; /* dma mask (if dma'able device) */ |
375 | u64 coherent_dma_mask;/* Like dma_mask, but for | 378 | u64 coherent_dma_mask;/* Like dma_mask, but for |
376 | alloc_coherent mappings as | 379 | alloc_coherent mappings as |
@@ -394,6 +397,25 @@ struct device { | |||
394 | void (*release)(struct device * dev); | 397 | void (*release)(struct device * dev); |
395 | }; | 398 | }; |
396 | 399 | ||
400 | #ifdef CONFIG_NUMA | ||
401 | static inline int dev_to_node(struct device *dev) | ||
402 | { | ||
403 | return dev->numa_node; | ||
404 | } | ||
405 | static inline void set_dev_node(struct device *dev, int node) | ||
406 | { | ||
407 | dev->numa_node = node; | ||
408 | } | ||
409 | #else | ||
410 | static inline int dev_to_node(struct device *dev) | ||
411 | { | ||
412 | return -1; | ||
413 | } | ||
414 | static inline void set_dev_node(struct device *dev, int node) | ||
415 | { | ||
416 | } | ||
417 | #endif | ||
418 | |||
397 | static inline void * | 419 | static inline void * |
398 | dev_get_drvdata (struct device *dev) | 420 | dev_get_drvdata (struct device *dev) |
399 | { | 421 | { |
diff --git a/include/linux/elf.h b/include/linux/elf.h index 743d5c8e6d36..60713e6ea297 100644 --- a/include/linux/elf.h +++ b/include/linux/elf.h | |||
@@ -6,6 +6,8 @@ | |||
6 | #include <linux/elf-em.h> | 6 | #include <linux/elf-em.h> |
7 | #include <asm/elf.h> | 7 | #include <asm/elf.h> |
8 | 8 | ||
9 | struct file; | ||
10 | |||
9 | #ifndef elf_read_implies_exec | 11 | #ifndef elf_read_implies_exec |
10 | /* Executables for which elf_read_implies_exec() returns TRUE will | 12 | /* Executables for which elf_read_implies_exec() returns TRUE will |
11 | have the READ_IMPLIES_EXEC personality flag set automatically. | 13 | have the READ_IMPLIES_EXEC personality flag set automatically. |
@@ -358,6 +360,7 @@ extern Elf32_Dyn _DYNAMIC []; | |||
358 | #define elfhdr elf32_hdr | 360 | #define elfhdr elf32_hdr |
359 | #define elf_phdr elf32_phdr | 361 | #define elf_phdr elf32_phdr |
360 | #define elf_note elf32_note | 362 | #define elf_note elf32_note |
363 | #define elf_addr_t Elf32_Off | ||
361 | 364 | ||
362 | #else | 365 | #else |
363 | 366 | ||
@@ -365,6 +368,7 @@ extern Elf64_Dyn _DYNAMIC []; | |||
365 | #define elfhdr elf64_hdr | 368 | #define elfhdr elf64_hdr |
366 | #define elf_phdr elf64_phdr | 369 | #define elf_phdr elf64_phdr |
367 | #define elf_note elf64_note | 370 | #define elf_note elf64_note |
371 | #define elf_addr_t Elf64_Off | ||
368 | 372 | ||
369 | #endif | 373 | #endif |
370 | 374 | ||
diff --git a/include/linux/ext3_jbd.h b/include/linux/ext3_jbd.h index ce0e6109aff0..8c43b13a02fe 100644 --- a/include/linux/ext3_jbd.h +++ b/include/linux/ext3_jbd.h | |||
@@ -109,74 +109,32 @@ int ext3_mark_inode_dirty(handle_t *handle, struct inode *inode); | |||
109 | * been done yet. | 109 | * been done yet. |
110 | */ | 110 | */ |
111 | 111 | ||
112 | void ext3_journal_abort_handle(const char *caller, const char *err_fn, | 112 | static inline void ext3_journal_release_buffer(handle_t *handle, |
113 | struct buffer_head *bh, handle_t *handle, int err); | 113 | struct buffer_head *bh) |
114 | |||
115 | static inline int | ||
116 | __ext3_journal_get_undo_access(const char *where, handle_t *handle, | ||
117 | struct buffer_head *bh) | ||
118 | { | 114 | { |
119 | int err = journal_get_undo_access(handle, bh); | 115 | journal_release_buffer(handle, bh); |
120 | if (err) | ||
121 | ext3_journal_abort_handle(where, __FUNCTION__, bh, handle,err); | ||
122 | return err; | ||
123 | } | 116 | } |
124 | 117 | ||
125 | static inline int | 118 | void ext3_journal_abort_handle(const char *caller, const char *err_fn, |
126 | __ext3_journal_get_write_access(const char *where, handle_t *handle, | 119 | struct buffer_head *bh, handle_t *handle, int err); |
127 | struct buffer_head *bh) | ||
128 | { | ||
129 | int err = journal_get_write_access(handle, bh); | ||
130 | if (err) | ||
131 | ext3_journal_abort_handle(where, __FUNCTION__, bh, handle,err); | ||
132 | return err; | ||
133 | } | ||
134 | 120 | ||
135 | static inline void | 121 | int __ext3_journal_get_undo_access(const char *where, handle_t *handle, |
136 | ext3_journal_release_buffer(handle_t *handle, struct buffer_head *bh) | 122 | struct buffer_head *bh); |
137 | { | ||
138 | journal_release_buffer(handle, bh); | ||
139 | } | ||
140 | 123 | ||
141 | static inline int | 124 | int __ext3_journal_get_write_access(const char *where, handle_t *handle, |
142 | __ext3_journal_forget(const char *where, handle_t *handle, struct buffer_head *bh) | 125 | struct buffer_head *bh); |
143 | { | ||
144 | int err = journal_forget(handle, bh); | ||
145 | if (err) | ||
146 | ext3_journal_abort_handle(where, __FUNCTION__, bh, handle,err); | ||
147 | return err; | ||
148 | } | ||
149 | 126 | ||
150 | static inline int | 127 | int __ext3_journal_forget(const char *where, handle_t *handle, |
151 | __ext3_journal_revoke(const char *where, handle_t *handle, | 128 | struct buffer_head *bh); |
152 | unsigned long blocknr, struct buffer_head *bh) | ||
153 | { | ||
154 | int err = journal_revoke(handle, blocknr, bh); | ||
155 | if (err) | ||
156 | ext3_journal_abort_handle(where, __FUNCTION__, bh, handle,err); | ||
157 | return err; | ||
158 | } | ||
159 | 129 | ||
160 | static inline int | 130 | int __ext3_journal_revoke(const char *where, handle_t *handle, |
161 | __ext3_journal_get_create_access(const char *where, | 131 | unsigned long blocknr, struct buffer_head *bh); |
162 | handle_t *handle, struct buffer_head *bh) | ||
163 | { | ||
164 | int err = journal_get_create_access(handle, bh); | ||
165 | if (err) | ||
166 | ext3_journal_abort_handle(where, __FUNCTION__, bh, handle,err); | ||
167 | return err; | ||
168 | } | ||
169 | 132 | ||
170 | static inline int | 133 | int __ext3_journal_get_create_access(const char *where, |
171 | __ext3_journal_dirty_metadata(const char *where, | 134 | handle_t *handle, struct buffer_head *bh); |
172 | handle_t *handle, struct buffer_head *bh) | ||
173 | { | ||
174 | int err = journal_dirty_metadata(handle, bh); | ||
175 | if (err) | ||
176 | ext3_journal_abort_handle(where, __FUNCTION__, bh, handle,err); | ||
177 | return err; | ||
178 | } | ||
179 | 135 | ||
136 | int __ext3_journal_dirty_metadata(const char *where, | ||
137 | handle_t *handle, struct buffer_head *bh); | ||
180 | 138 | ||
181 | #define ext3_journal_get_undo_access(handle, bh) \ | 139 | #define ext3_journal_get_undo_access(handle, bh) \ |
182 | __ext3_journal_get_undo_access(__FUNCTION__, (handle), (bh)) | 140 | __ext3_journal_get_undo_access(__FUNCTION__, (handle), (bh)) |
diff --git a/include/linux/ext4_jbd2.h b/include/linux/ext4_jbd2.h index 72dd631912e4..d716e6392cf6 100644 --- a/include/linux/ext4_jbd2.h +++ b/include/linux/ext4_jbd2.h | |||
@@ -114,74 +114,32 @@ int ext4_mark_inode_dirty(handle_t *handle, struct inode *inode); | |||
114 | * been done yet. | 114 | * been done yet. |
115 | */ | 115 | */ |
116 | 116 | ||
117 | void ext4_journal_abort_handle(const char *caller, const char *err_fn, | 117 | static inline void ext4_journal_release_buffer(handle_t *handle, |
118 | struct buffer_head *bh, handle_t *handle, int err); | 118 | struct buffer_head *bh) |
119 | |||
120 | static inline int | ||
121 | __ext4_journal_get_undo_access(const char *where, handle_t *handle, | ||
122 | struct buffer_head *bh) | ||
123 | { | 119 | { |
124 | int err = jbd2_journal_get_undo_access(handle, bh); | 120 | jbd2_journal_release_buffer(handle, bh); |
125 | if (err) | ||
126 | ext4_journal_abort_handle(where, __FUNCTION__, bh, handle,err); | ||
127 | return err; | ||
128 | } | 121 | } |
129 | 122 | ||
130 | static inline int | 123 | void ext4_journal_abort_handle(const char *caller, const char *err_fn, |
131 | __ext4_journal_get_write_access(const char *where, handle_t *handle, | 124 | struct buffer_head *bh, handle_t *handle, int err); |
132 | struct buffer_head *bh) | ||
133 | { | ||
134 | int err = jbd2_journal_get_write_access(handle, bh); | ||
135 | if (err) | ||
136 | ext4_journal_abort_handle(where, __FUNCTION__, bh, handle,err); | ||
137 | return err; | ||
138 | } | ||
139 | 125 | ||
140 | static inline void | 126 | int __ext4_journal_get_undo_access(const char *where, handle_t *handle, |
141 | ext4_journal_release_buffer(handle_t *handle, struct buffer_head *bh) | 127 | struct buffer_head *bh); |
142 | { | ||
143 | jbd2_journal_release_buffer(handle, bh); | ||
144 | } | ||
145 | 128 | ||
146 | static inline int | 129 | int __ext4_journal_get_write_access(const char *where, handle_t *handle, |
147 | __ext4_journal_forget(const char *where, handle_t *handle, struct buffer_head *bh) | 130 | struct buffer_head *bh); |
148 | { | ||
149 | int err = jbd2_journal_forget(handle, bh); | ||
150 | if (err) | ||
151 | ext4_journal_abort_handle(where, __FUNCTION__, bh, handle,err); | ||
152 | return err; | ||
153 | } | ||
154 | 131 | ||
155 | static inline int | 132 | int __ext4_journal_forget(const char *where, handle_t *handle, |
156 | __ext4_journal_revoke(const char *where, handle_t *handle, | 133 | struct buffer_head *bh); |
157 | ext4_fsblk_t blocknr, struct buffer_head *bh) | ||
158 | { | ||
159 | int err = jbd2_journal_revoke(handle, blocknr, bh); | ||
160 | if (err) | ||
161 | ext4_journal_abort_handle(where, __FUNCTION__, bh, handle,err); | ||
162 | return err; | ||
163 | } | ||
164 | 134 | ||
165 | static inline int | 135 | int __ext4_journal_revoke(const char *where, handle_t *handle, |
166 | __ext4_journal_get_create_access(const char *where, | 136 | ext4_fsblk_t blocknr, struct buffer_head *bh); |
167 | handle_t *handle, struct buffer_head *bh) | ||
168 | { | ||
169 | int err = jbd2_journal_get_create_access(handle, bh); | ||
170 | if (err) | ||
171 | ext4_journal_abort_handle(where, __FUNCTION__, bh, handle,err); | ||
172 | return err; | ||
173 | } | ||
174 | 137 | ||
175 | static inline int | 138 | int __ext4_journal_get_create_access(const char *where, |
176 | __ext4_journal_dirty_metadata(const char *where, | 139 | handle_t *handle, struct buffer_head *bh); |
177 | handle_t *handle, struct buffer_head *bh) | ||
178 | { | ||
179 | int err = jbd2_journal_dirty_metadata(handle, bh); | ||
180 | if (err) | ||
181 | ext4_journal_abort_handle(where, __FUNCTION__, bh, handle,err); | ||
182 | return err; | ||
183 | } | ||
184 | 140 | ||
141 | int __ext4_journal_dirty_metadata(const char *where, | ||
142 | handle_t *handle, struct buffer_head *bh); | ||
185 | 143 | ||
186 | #define ext4_journal_get_undo_access(handle, bh) \ | 144 | #define ext4_journal_get_undo_access(handle, bh) \ |
187 | __ext4_journal_get_undo_access(__FUNCTION__, (handle), (bh)) | 145 | __ext4_journal_get_undo_access(__FUNCTION__, (handle), (bh)) |
diff --git a/include/linux/file.h b/include/linux/file.h index 74183e6f7f45..6e77b9177f9e 100644 --- a/include/linux/file.h +++ b/include/linux/file.h | |||
@@ -64,6 +64,8 @@ struct files_struct { | |||
64 | 64 | ||
65 | #define files_fdtable(files) (rcu_dereference((files)->fdt)) | 65 | #define files_fdtable(files) (rcu_dereference((files)->fdt)) |
66 | 66 | ||
67 | extern struct kmem_cache *filp_cachep; | ||
68 | |||
67 | extern void FASTCALL(__fput(struct file *)); | 69 | extern void FASTCALL(__fput(struct file *)); |
68 | extern void FASTCALL(fput(struct file *)); | 70 | extern void FASTCALL(fput(struct file *)); |
69 | 71 | ||
@@ -114,4 +116,6 @@ struct files_struct *get_files_struct(struct task_struct *); | |||
114 | void FASTCALL(put_files_struct(struct files_struct *fs)); | 116 | void FASTCALL(put_files_struct(struct files_struct *fs)); |
115 | void reset_files_struct(struct task_struct *, struct files_struct *); | 117 | void reset_files_struct(struct task_struct *, struct files_struct *); |
116 | 118 | ||
119 | extern struct kmem_cache *files_cachep; | ||
120 | |||
117 | #endif /* __LINUX_FILE_H */ | 121 | #endif /* __LINUX_FILE_H */ |
diff --git a/include/linux/freezer.h b/include/linux/freezer.h new file mode 100644 index 000000000000..6e05e3e7ce39 --- /dev/null +++ b/include/linux/freezer.h | |||
@@ -0,0 +1,87 @@ | |||
1 | /* Freezer declarations */ | ||
2 | |||
3 | #ifdef CONFIG_PM | ||
4 | /* | ||
5 | * Check if a process has been frozen | ||
6 | */ | ||
7 | static inline int frozen(struct task_struct *p) | ||
8 | { | ||
9 | return p->flags & PF_FROZEN; | ||
10 | } | ||
11 | |||
12 | /* | ||
13 | * Check if there is a request to freeze a process | ||
14 | */ | ||
15 | static inline int freezing(struct task_struct *p) | ||
16 | { | ||
17 | return p->flags & PF_FREEZE; | ||
18 | } | ||
19 | |||
20 | /* | ||
21 | * Request that a process be frozen | ||
22 | * FIXME: SMP problem. We may not modify other process' flags! | ||
23 | */ | ||
24 | static inline void freeze(struct task_struct *p) | ||
25 | { | ||
26 | p->flags |= PF_FREEZE; | ||
27 | } | ||
28 | |||
29 | /* | ||
30 | * Sometimes we may need to cancel the previous 'freeze' request | ||
31 | */ | ||
32 | static inline void do_not_freeze(struct task_struct *p) | ||
33 | { | ||
34 | p->flags &= ~PF_FREEZE; | ||
35 | } | ||
36 | |||
37 | /* | ||
38 | * Wake up a frozen process | ||
39 | */ | ||
40 | static inline int thaw_process(struct task_struct *p) | ||
41 | { | ||
42 | if (frozen(p)) { | ||
43 | p->flags &= ~PF_FROZEN; | ||
44 | wake_up_process(p); | ||
45 | return 1; | ||
46 | } | ||
47 | return 0; | ||
48 | } | ||
49 | |||
50 | /* | ||
51 | * freezing is complete, mark process as frozen | ||
52 | */ | ||
53 | static inline void frozen_process(struct task_struct *p) | ||
54 | { | ||
55 | p->flags = (p->flags & ~PF_FREEZE) | PF_FROZEN; | ||
56 | } | ||
57 | |||
58 | extern void refrigerator(void); | ||
59 | extern int freeze_processes(void); | ||
60 | extern void thaw_processes(void); | ||
61 | |||
62 | static inline int try_to_freeze(void) | ||
63 | { | ||
64 | if (freezing(current)) { | ||
65 | refrigerator(); | ||
66 | return 1; | ||
67 | } else | ||
68 | return 0; | ||
69 | } | ||
70 | |||
71 | extern void thaw_some_processes(int all); | ||
72 | |||
73 | #else | ||
74 | static inline int frozen(struct task_struct *p) { return 0; } | ||
75 | static inline int freezing(struct task_struct *p) { return 0; } | ||
76 | static inline void freeze(struct task_struct *p) { BUG(); } | ||
77 | static inline int thaw_process(struct task_struct *p) { return 1; } | ||
78 | static inline void frozen_process(struct task_struct *p) { BUG(); } | ||
79 | |||
80 | static inline void refrigerator(void) {} | ||
81 | static inline int freeze_processes(void) { BUG(); return 0; } | ||
82 | static inline void thaw_processes(void) {} | ||
83 | |||
84 | static inline int try_to_freeze(void) { return 0; } | ||
85 | |||
86 | |||
87 | #endif | ||
diff --git a/include/linux/fs.h b/include/linux/fs.h index cac7b1ef9543..70b99fbb560b 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -543,19 +543,22 @@ struct inode { | |||
543 | struct list_head i_dentry; | 543 | struct list_head i_dentry; |
544 | unsigned long i_ino; | 544 | unsigned long i_ino; |
545 | atomic_t i_count; | 545 | atomic_t i_count; |
546 | umode_t i_mode; | ||
547 | unsigned int i_nlink; | 546 | unsigned int i_nlink; |
548 | uid_t i_uid; | 547 | uid_t i_uid; |
549 | gid_t i_gid; | 548 | gid_t i_gid; |
550 | dev_t i_rdev; | 549 | dev_t i_rdev; |
550 | unsigned long i_version; | ||
551 | loff_t i_size; | 551 | loff_t i_size; |
552 | #ifdef __NEED_I_SIZE_ORDERED | ||
553 | seqcount_t i_size_seqcount; | ||
554 | #endif | ||
552 | struct timespec i_atime; | 555 | struct timespec i_atime; |
553 | struct timespec i_mtime; | 556 | struct timespec i_mtime; |
554 | struct timespec i_ctime; | 557 | struct timespec i_ctime; |
555 | unsigned int i_blkbits; | 558 | unsigned int i_blkbits; |
556 | unsigned long i_version; | ||
557 | blkcnt_t i_blocks; | 559 | blkcnt_t i_blocks; |
558 | unsigned short i_bytes; | 560 | unsigned short i_bytes; |
561 | umode_t i_mode; | ||
559 | spinlock_t i_lock; /* i_blocks, i_bytes, maybe i_size */ | 562 | spinlock_t i_lock; /* i_blocks, i_bytes, maybe i_size */ |
560 | struct mutex i_mutex; | 563 | struct mutex i_mutex; |
561 | struct rw_semaphore i_alloc_sem; | 564 | struct rw_semaphore i_alloc_sem; |
@@ -598,9 +601,6 @@ struct inode { | |||
598 | void *i_security; | 601 | void *i_security; |
599 | #endif | 602 | #endif |
600 | void *i_private; /* fs or device private pointer */ | 603 | void *i_private; /* fs or device private pointer */ |
601 | #ifdef __NEED_I_SIZE_ORDERED | ||
602 | seqcount_t i_size_seqcount; | ||
603 | #endif | ||
604 | }; | 604 | }; |
605 | 605 | ||
606 | /* | 606 | /* |
@@ -636,7 +636,7 @@ extern void inode_double_unlock(struct inode *inode1, struct inode *inode2); | |||
636 | * cmpxchg8b without the need of the lock prefix). For SMP compiles | 636 | * cmpxchg8b without the need of the lock prefix). For SMP compiles |
637 | * and 64bit archs it makes no difference if preempt is enabled or not. | 637 | * and 64bit archs it makes no difference if preempt is enabled or not. |
638 | */ | 638 | */ |
639 | static inline loff_t i_size_read(struct inode *inode) | 639 | static inline loff_t i_size_read(const struct inode *inode) |
640 | { | 640 | { |
641 | #if BITS_PER_LONG==32 && defined(CONFIG_SMP) | 641 | #if BITS_PER_LONG==32 && defined(CONFIG_SMP) |
642 | loff_t i_size; | 642 | loff_t i_size; |
@@ -679,12 +679,12 @@ static inline void i_size_write(struct inode *inode, loff_t i_size) | |||
679 | #endif | 679 | #endif |
680 | } | 680 | } |
681 | 681 | ||
682 | static inline unsigned iminor(struct inode *inode) | 682 | static inline unsigned iminor(const struct inode *inode) |
683 | { | 683 | { |
684 | return MINOR(inode->i_rdev); | 684 | return MINOR(inode->i_rdev); |
685 | } | 685 | } |
686 | 686 | ||
687 | static inline unsigned imajor(struct inode *inode) | 687 | static inline unsigned imajor(const struct inode *inode) |
688 | { | 688 | { |
689 | return MAJOR(inode->i_rdev); | 689 | return MAJOR(inode->i_rdev); |
690 | } | 690 | } |
@@ -1481,7 +1481,9 @@ extern char * getname(const char __user *); | |||
1481 | extern void __init vfs_caches_init_early(void); | 1481 | extern void __init vfs_caches_init_early(void); |
1482 | extern void __init vfs_caches_init(unsigned long); | 1482 | extern void __init vfs_caches_init(unsigned long); |
1483 | 1483 | ||
1484 | #define __getname() kmem_cache_alloc(names_cachep, SLAB_KERNEL) | 1484 | extern struct kmem_cache *names_cachep; |
1485 | |||
1486 | #define __getname() kmem_cache_alloc(names_cachep, GFP_KERNEL) | ||
1485 | #define __putname(name) kmem_cache_free(names_cachep, (void *)(name)) | 1487 | #define __putname(name) kmem_cache_free(names_cachep, (void *)(name)) |
1486 | #ifndef CONFIG_AUDITSYSCALL | 1488 | #ifndef CONFIG_AUDITSYSCALL |
1487 | #define putname(name) __putname(name) | 1489 | #define putname(name) __putname(name) |
diff --git a/include/linux/fs_struct.h b/include/linux/fs_struct.h index c623d12a486e..11a36ceddf73 100644 --- a/include/linux/fs_struct.h +++ b/include/linux/fs_struct.h | |||
@@ -18,6 +18,8 @@ struct fs_struct { | |||
18 | .umask = 0022, \ | 18 | .umask = 0022, \ |
19 | } | 19 | } |
20 | 20 | ||
21 | extern struct kmem_cache *fs_cachep; | ||
22 | |||
21 | extern void exit_fs(struct task_struct *); | 23 | extern void exit_fs(struct task_struct *); |
22 | extern void set_fs_altroot(void); | 24 | extern void set_fs_altroot(void); |
23 | extern void set_fs_root(struct fs_struct *, struct vfsmount *, struct dentry *); | 25 | extern void set_fs_root(struct fs_struct *, struct vfsmount *, struct dentry *); |
diff --git a/include/linux/fuse.h b/include/linux/fuse.h index 9fc48a674b82..534744efe30d 100644 --- a/include/linux/fuse.h +++ b/include/linux/fuse.h | |||
@@ -15,7 +15,7 @@ | |||
15 | #define FUSE_KERNEL_VERSION 7 | 15 | #define FUSE_KERNEL_VERSION 7 |
16 | 16 | ||
17 | /** Minor version number of this interface */ | 17 | /** Minor version number of this interface */ |
18 | #define FUSE_KERNEL_MINOR_VERSION 7 | 18 | #define FUSE_KERNEL_MINOR_VERSION 8 |
19 | 19 | ||
20 | /** The node ID of the root inode */ | 20 | /** The node ID of the root inode */ |
21 | #define FUSE_ROOT_ID 1 | 21 | #define FUSE_ROOT_ID 1 |
@@ -92,6 +92,11 @@ struct fuse_file_lock { | |||
92 | #define FUSE_ASYNC_READ (1 << 0) | 92 | #define FUSE_ASYNC_READ (1 << 0) |
93 | #define FUSE_POSIX_LOCKS (1 << 1) | 93 | #define FUSE_POSIX_LOCKS (1 << 1) |
94 | 94 | ||
95 | /** | ||
96 | * Release flags | ||
97 | */ | ||
98 | #define FUSE_RELEASE_FLUSH (1 << 0) | ||
99 | |||
95 | enum fuse_opcode { | 100 | enum fuse_opcode { |
96 | FUSE_LOOKUP = 1, | 101 | FUSE_LOOKUP = 1, |
97 | FUSE_FORGET = 2, /* no reply */ | 102 | FUSE_FORGET = 2, /* no reply */ |
@@ -127,6 +132,8 @@ enum fuse_opcode { | |||
127 | FUSE_ACCESS = 34, | 132 | FUSE_ACCESS = 34, |
128 | FUSE_CREATE = 35, | 133 | FUSE_CREATE = 35, |
129 | FUSE_INTERRUPT = 36, | 134 | FUSE_INTERRUPT = 36, |
135 | FUSE_BMAP = 37, | ||
136 | FUSE_DESTROY = 38, | ||
130 | }; | 137 | }; |
131 | 138 | ||
132 | /* The read buffer is required to be at least 8k, but may be much larger */ | 139 | /* The read buffer is required to be at least 8k, but may be much larger */ |
@@ -205,12 +212,13 @@ struct fuse_open_out { | |||
205 | struct fuse_release_in { | 212 | struct fuse_release_in { |
206 | __u64 fh; | 213 | __u64 fh; |
207 | __u32 flags; | 214 | __u32 flags; |
208 | __u32 padding; | 215 | __u32 release_flags; |
216 | __u64 lock_owner; | ||
209 | }; | 217 | }; |
210 | 218 | ||
211 | struct fuse_flush_in { | 219 | struct fuse_flush_in { |
212 | __u64 fh; | 220 | __u64 fh; |
213 | __u32 flush_flags; | 221 | __u32 unused; |
214 | __u32 padding; | 222 | __u32 padding; |
215 | __u64 lock_owner; | 223 | __u64 lock_owner; |
216 | }; | 224 | }; |
@@ -296,6 +304,16 @@ struct fuse_interrupt_in { | |||
296 | __u64 unique; | 304 | __u64 unique; |
297 | }; | 305 | }; |
298 | 306 | ||
307 | struct fuse_bmap_in { | ||
308 | __u64 block; | ||
309 | __u32 blocksize; | ||
310 | __u32 padding; | ||
311 | }; | ||
312 | |||
313 | struct fuse_bmap_out { | ||
314 | __u64 block; | ||
315 | }; | ||
316 | |||
299 | struct fuse_in_header { | 317 | struct fuse_in_header { |
300 | __u32 len; | 318 | __u32 len; |
301 | __u32 opcode; | 319 | __u32 opcode; |
diff --git a/include/linux/gfp.h b/include/linux/gfp.h index bf2b6bc3f6fd..00c314aedab7 100644 --- a/include/linux/gfp.h +++ b/include/linux/gfp.h | |||
@@ -116,6 +116,9 @@ static inline enum zone_type gfp_zone(gfp_t flags) | |||
116 | #ifndef HAVE_ARCH_FREE_PAGE | 116 | #ifndef HAVE_ARCH_FREE_PAGE |
117 | static inline void arch_free_page(struct page *page, int order) { } | 117 | static inline void arch_free_page(struct page *page, int order) { } |
118 | #endif | 118 | #endif |
119 | #ifndef HAVE_ARCH_ALLOC_PAGE | ||
120 | static inline void arch_alloc_page(struct page *page, int order) { } | ||
121 | #endif | ||
119 | 122 | ||
120 | extern struct page * | 123 | extern struct page * |
121 | FASTCALL(__alloc_pages(gfp_t, unsigned int, struct zonelist *)); | 124 | FASTCALL(__alloc_pages(gfp_t, unsigned int, struct zonelist *)); |
diff --git a/include/linux/highmem.h b/include/linux/highmem.h index fd7d12daa94f..3d8768b619e9 100644 --- a/include/linux/highmem.h +++ b/include/linux/highmem.h | |||
@@ -3,6 +3,7 @@ | |||
3 | 3 | ||
4 | #include <linux/fs.h> | 4 | #include <linux/fs.h> |
5 | #include <linux/mm.h> | 5 | #include <linux/mm.h> |
6 | #include <linux/uaccess.h> | ||
6 | 7 | ||
7 | #include <asm/cacheflush.h> | 8 | #include <asm/cacheflush.h> |
8 | 9 | ||
@@ -41,9 +42,10 @@ static inline void *kmap(struct page *page) | |||
41 | 42 | ||
42 | #define kunmap(page) do { (void) (page); } while (0) | 43 | #define kunmap(page) do { (void) (page); } while (0) |
43 | 44 | ||
44 | #define kmap_atomic(page, idx) page_address(page) | 45 | #define kmap_atomic(page, idx) \ |
45 | #define kunmap_atomic(addr, idx) do { } while (0) | 46 | ({ pagefault_disable(); page_address(page); }) |
46 | #define kmap_atomic_pfn(pfn, idx) page_address(pfn_to_page(pfn)) | 47 | #define kunmap_atomic(addr, idx) do { pagefault_enable(); } while (0) |
48 | #define kmap_atomic_pfn(pfn, idx) kmap_atomic(pfn_to_page(pfn), (idx)) | ||
47 | #define kmap_atomic_to_page(ptr) virt_to_page(ptr) | 49 | #define kmap_atomic_to_page(ptr) virt_to_page(ptr) |
48 | #endif | 50 | #endif |
49 | 51 | ||
diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h index ace64e57e17f..a60995afe334 100644 --- a/include/linux/hugetlb.h +++ b/include/linux/hugetlb.h | |||
@@ -35,6 +35,7 @@ extern int sysctl_hugetlb_shm_group; | |||
35 | 35 | ||
36 | pte_t *huge_pte_alloc(struct mm_struct *mm, unsigned long addr); | 36 | pte_t *huge_pte_alloc(struct mm_struct *mm, unsigned long addr); |
37 | pte_t *huge_pte_offset(struct mm_struct *mm, unsigned long addr); | 37 | pte_t *huge_pte_offset(struct mm_struct *mm, unsigned long addr); |
38 | int huge_pmd_unshare(struct mm_struct *mm, unsigned long *addr, pte_t *ptep); | ||
38 | struct page *follow_huge_addr(struct mm_struct *mm, unsigned long address, | 39 | struct page *follow_huge_addr(struct mm_struct *mm, unsigned long address, |
39 | int write); | 40 | int write); |
40 | struct page *follow_huge_pmd(struct mm_struct *mm, unsigned long address, | 41 | struct page *follow_huge_pmd(struct mm_struct *mm, unsigned long address, |
diff --git a/include/linux/i2o.h b/include/linux/i2o.h index c115e9e840b4..52f53e2e70c3 100644 --- a/include/linux/i2o.h +++ b/include/linux/i2o.h | |||
@@ -461,7 +461,7 @@ struct i2o_driver { | |||
461 | int (*reply) (struct i2o_controller *, u32, struct i2o_message *); | 461 | int (*reply) (struct i2o_controller *, u32, struct i2o_message *); |
462 | 462 | ||
463 | /* Event handler */ | 463 | /* Event handler */ |
464 | void (*event) (struct i2o_event *); | 464 | work_func_t event; |
465 | 465 | ||
466 | struct workqueue_struct *event_queue; /* Event queue */ | 466 | struct workqueue_struct *event_queue; /* Event queue */ |
467 | 467 | ||
@@ -490,7 +490,7 @@ struct i2o_dma { | |||
490 | */ | 490 | */ |
491 | struct i2o_pool { | 491 | struct i2o_pool { |
492 | char *name; | 492 | char *name; |
493 | kmem_cache_t *slab; | 493 | struct kmem_cache *slab; |
494 | mempool_t *mempool; | 494 | mempool_t *mempool; |
495 | }; | 495 | }; |
496 | 496 | ||
@@ -986,7 +986,8 @@ extern void i2o_driver_unregister(struct i2o_driver *); | |||
986 | 986 | ||
987 | /** | 987 | /** |
988 | * i2o_driver_notify_controller_add - Send notification of added controller | 988 | * i2o_driver_notify_controller_add - Send notification of added controller |
989 | * to a single I2O driver | 989 | * @drv: I2O driver |
990 | * @c: I2O controller | ||
990 | * | 991 | * |
991 | * Send notification of added controller to a single registered driver. | 992 | * Send notification of added controller to a single registered driver. |
992 | */ | 993 | */ |
@@ -998,8 +999,9 @@ static inline void i2o_driver_notify_controller_add(struct i2o_driver *drv, | |||
998 | }; | 999 | }; |
999 | 1000 | ||
1000 | /** | 1001 | /** |
1001 | * i2o_driver_notify_controller_remove - Send notification of removed | 1002 | * i2o_driver_notify_controller_remove - Send notification of removed controller |
1002 | * controller to a single I2O driver | 1003 | * @drv: I2O driver |
1004 | * @c: I2O controller | ||
1003 | * | 1005 | * |
1004 | * Send notification of removed controller to a single registered driver. | 1006 | * Send notification of removed controller to a single registered driver. |
1005 | */ | 1007 | */ |
@@ -1011,8 +1013,9 @@ static inline void i2o_driver_notify_controller_remove(struct i2o_driver *drv, | |||
1011 | }; | 1013 | }; |
1012 | 1014 | ||
1013 | /** | 1015 | /** |
1014 | * i2o_driver_notify_device_add - Send notification of added device to a | 1016 | * i2o_driver_notify_device_add - Send notification of added device |
1015 | * single I2O driver | 1017 | * @drv: I2O driver |
1018 | * @i2o_dev: the added i2o_device | ||
1016 | * | 1019 | * |
1017 | * Send notification of added device to a single registered driver. | 1020 | * Send notification of added device to a single registered driver. |
1018 | */ | 1021 | */ |
@@ -1025,7 +1028,8 @@ static inline void i2o_driver_notify_device_add(struct i2o_driver *drv, | |||
1025 | 1028 | ||
1026 | /** | 1029 | /** |
1027 | * i2o_driver_notify_device_remove - Send notification of removed device | 1030 | * i2o_driver_notify_device_remove - Send notification of removed device |
1028 | * to a single I2O driver | 1031 | * @drv: I2O driver |
1032 | * @i2o_dev: the added i2o_device | ||
1029 | * | 1033 | * |
1030 | * Send notification of removed device to a single registered driver. | 1034 | * Send notification of removed device to a single registered driver. |
1031 | */ | 1035 | */ |
@@ -1148,7 +1152,7 @@ static inline void i2o_msg_post(struct i2o_controller *c, | |||
1148 | /** | 1152 | /** |
1149 | * i2o_msg_post_wait - Post and wait a message and wait until return | 1153 | * i2o_msg_post_wait - Post and wait a message and wait until return |
1150 | * @c: controller | 1154 | * @c: controller |
1151 | * @m: message to post | 1155 | * @msg: message to post |
1152 | * @timeout: time in seconds to wait | 1156 | * @timeout: time in seconds to wait |
1153 | * | 1157 | * |
1154 | * This API allows an OSM to post a message and then be told whether or | 1158 | * This API allows an OSM to post a message and then be told whether or |
diff --git a/include/linux/init_task.h b/include/linux/init_task.h index 33c5daacc743..733790d4f7db 100644 --- a/include/linux/init_task.h +++ b/include/linux/init_task.h | |||
@@ -73,7 +73,7 @@ | |||
73 | extern struct nsproxy init_nsproxy; | 73 | extern struct nsproxy init_nsproxy; |
74 | #define INIT_NSPROXY(nsproxy) { \ | 74 | #define INIT_NSPROXY(nsproxy) { \ |
75 | .count = ATOMIC_INIT(1), \ | 75 | .count = ATOMIC_INIT(1), \ |
76 | .nslock = SPIN_LOCK_UNLOCKED, \ | 76 | .nslock = __SPIN_LOCK_UNLOCKED(nsproxy.nslock), \ |
77 | .uts_ns = &init_uts_ns, \ | 77 | .uts_ns = &init_uts_ns, \ |
78 | .namespace = NULL, \ | 78 | .namespace = NULL, \ |
79 | INIT_IPC_NS(ipc_ns) \ | 79 | INIT_IPC_NS(ipc_ns) \ |
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index 5b83e7b59621..de7593f4e895 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h | |||
@@ -11,6 +11,7 @@ | |||
11 | #include <linux/hardirq.h> | 11 | #include <linux/hardirq.h> |
12 | #include <linux/sched.h> | 12 | #include <linux/sched.h> |
13 | #include <linux/irqflags.h> | 13 | #include <linux/irqflags.h> |
14 | #include <linux/bottom_half.h> | ||
14 | #include <asm/atomic.h> | 15 | #include <asm/atomic.h> |
15 | #include <asm/ptrace.h> | 16 | #include <asm/ptrace.h> |
16 | #include <asm/system.h> | 17 | #include <asm/system.h> |
@@ -217,12 +218,6 @@ static inline void __deprecated save_and_cli(unsigned long *x) | |||
217 | #define save_and_cli(x) save_and_cli(&x) | 218 | #define save_and_cli(x) save_and_cli(&x) |
218 | #endif /* CONFIG_SMP */ | 219 | #endif /* CONFIG_SMP */ |
219 | 220 | ||
220 | extern void local_bh_disable(void); | ||
221 | extern void __local_bh_enable(void); | ||
222 | extern void _local_bh_enable(void); | ||
223 | extern void local_bh_enable(void); | ||
224 | extern void local_bh_enable_ip(unsigned long ip); | ||
225 | |||
226 | /* PLEASE, avoid to allocate new softirqs, if you need not _really_ high | 221 | /* PLEASE, avoid to allocate new softirqs, if you need not _really_ high |
227 | frequency threaded job scheduling. For almost all the purposes | 222 | frequency threaded job scheduling. For almost all the purposes |
228 | tasklets are more than enough. F.e. all serial device BHs et | 223 | tasklets are more than enough. F.e. all serial device BHs et |
diff --git a/include/linux/ipmi.h b/include/linux/ipmi.h index 796ca009fd46..7a9db390c56a 100644 --- a/include/linux/ipmi.h +++ b/include/linux/ipmi.h | |||
@@ -208,6 +208,15 @@ struct kernel_ipmi_msg | |||
208 | code as the first byte of the incoming data, unlike a response. */ | 208 | code as the first byte of the incoming data, unlike a response. */ |
209 | 209 | ||
210 | 210 | ||
211 | /* | ||
212 | * Modes for ipmi_set_maint_mode() and the userland IOCTL. The AUTO | ||
213 | * setting is the default and means it will be set on certain | ||
214 | * commands. Hard setting it on and off will override automatic | ||
215 | * operation. | ||
216 | */ | ||
217 | #define IPMI_MAINTENANCE_MODE_AUTO 0 | ||
218 | #define IPMI_MAINTENANCE_MODE_OFF 1 | ||
219 | #define IPMI_MAINTENANCE_MODE_ON 2 | ||
211 | 220 | ||
212 | #ifdef __KERNEL__ | 221 | #ifdef __KERNEL__ |
213 | 222 | ||
@@ -374,6 +383,35 @@ int ipmi_unregister_for_cmd(ipmi_user_t user, | |||
374 | unsigned int chans); | 383 | unsigned int chans); |
375 | 384 | ||
376 | /* | 385 | /* |
386 | * Go into a mode where the driver will not autonomously attempt to do | ||
387 | * things with the interface. It will still respond to attentions and | ||
388 | * interrupts, and it will expect that commands will complete. It | ||
389 | * will not automatcially check for flags, events, or things of that | ||
390 | * nature. | ||
391 | * | ||
392 | * This is primarily used for firmware upgrades. The idea is that | ||
393 | * when you go into firmware upgrade mode, you do this operation | ||
394 | * and the driver will not attempt to do anything but what you tell | ||
395 | * it or what the BMC asks for. | ||
396 | * | ||
397 | * Note that if you send a command that resets the BMC, the driver | ||
398 | * will still expect a response from that command. So the BMC should | ||
399 | * reset itself *after* the response is sent. Resetting before the | ||
400 | * response is just silly. | ||
401 | * | ||
402 | * If in auto maintenance mode, the driver will automatically go into | ||
403 | * maintenance mode for 30 seconds if it sees a cold reset, a warm | ||
404 | * reset, or a firmware NetFN. This means that code that uses only | ||
405 | * firmware NetFN commands to do upgrades will work automatically | ||
406 | * without change, assuming it sends a message every 30 seconds or | ||
407 | * less. | ||
408 | * | ||
409 | * See the IPMI_MAINTENANCE_MODE_xxx defines for what the mode means. | ||
410 | */ | ||
411 | int ipmi_get_maintenance_mode(ipmi_user_t user); | ||
412 | int ipmi_set_maintenance_mode(ipmi_user_t user, int mode); | ||
413 | |||
414 | /* | ||
377 | * Allow run-to-completion mode to be set for the interface of | 415 | * Allow run-to-completion mode to be set for the interface of |
378 | * a specific user. | 416 | * a specific user. |
379 | */ | 417 | */ |
@@ -656,4 +694,11 @@ struct ipmi_timing_parms | |||
656 | #define IPMICTL_GET_TIMING_PARMS_CMD _IOR(IPMI_IOC_MAGIC, 23, \ | 694 | #define IPMICTL_GET_TIMING_PARMS_CMD _IOR(IPMI_IOC_MAGIC, 23, \ |
657 | struct ipmi_timing_parms) | 695 | struct ipmi_timing_parms) |
658 | 696 | ||
697 | /* | ||
698 | * Set the maintenance mode. See ipmi_set_maintenance_mode() above | ||
699 | * for a description of what this does. | ||
700 | */ | ||
701 | #define IPMICTL_GET_MAINTENANCE_MODE_CMD _IOR(IPMI_IOC_MAGIC, 30, int) | ||
702 | #define IPMICTL_SET_MAINTENANCE_MODE_CMD _IOW(IPMI_IOC_MAGIC, 31, int) | ||
703 | |||
659 | #endif /* __LINUX_IPMI_H */ | 704 | #endif /* __LINUX_IPMI_H */ |
diff --git a/include/linux/ipmi_msgdefs.h b/include/linux/ipmi_msgdefs.h index 4d04d8b58a0a..b56a158d587a 100644 --- a/include/linux/ipmi_msgdefs.h +++ b/include/linux/ipmi_msgdefs.h | |||
@@ -46,6 +46,8 @@ | |||
46 | #define IPMI_NETFN_APP_REQUEST 0x06 | 46 | #define IPMI_NETFN_APP_REQUEST 0x06 |
47 | #define IPMI_NETFN_APP_RESPONSE 0x07 | 47 | #define IPMI_NETFN_APP_RESPONSE 0x07 |
48 | #define IPMI_GET_DEVICE_ID_CMD 0x01 | 48 | #define IPMI_GET_DEVICE_ID_CMD 0x01 |
49 | #define IPMI_COLD_RESET_CMD 0x02 | ||
50 | #define IPMI_WARM_RESET_CMD 0x03 | ||
49 | #define IPMI_CLEAR_MSG_FLAGS_CMD 0x30 | 51 | #define IPMI_CLEAR_MSG_FLAGS_CMD 0x30 |
50 | #define IPMI_GET_DEVICE_GUID_CMD 0x08 | 52 | #define IPMI_GET_DEVICE_GUID_CMD 0x08 |
51 | #define IPMI_GET_MSG_FLAGS_CMD 0x31 | 53 | #define IPMI_GET_MSG_FLAGS_CMD 0x31 |
@@ -60,20 +62,27 @@ | |||
60 | #define IPMI_NETFN_STORAGE_RESPONSE 0x0b | 62 | #define IPMI_NETFN_STORAGE_RESPONSE 0x0b |
61 | #define IPMI_ADD_SEL_ENTRY_CMD 0x44 | 63 | #define IPMI_ADD_SEL_ENTRY_CMD 0x44 |
62 | 64 | ||
65 | #define IPMI_NETFN_FIRMWARE_REQUEST 0x08 | ||
66 | #define IPMI_NETFN_FIRMWARE_RESPONSE 0x09 | ||
67 | |||
63 | /* The default slave address */ | 68 | /* The default slave address */ |
64 | #define IPMI_BMC_SLAVE_ADDR 0x20 | 69 | #define IPMI_BMC_SLAVE_ADDR 0x20 |
65 | 70 | ||
66 | /* The BT interface on high-end HP systems supports up to 255 bytes in | 71 | /* The BT interface on high-end HP systems supports up to 255 bytes in |
67 | * one transfer. Its "virtual" BMC supports some commands that are longer | 72 | * one transfer. Its "virtual" BMC supports some commands that are longer |
68 | * than 128 bytes. Use the full 256, plus NetFn/LUN, Cmd, cCode, plus | 73 | * than 128 bytes. Use the full 256, plus NetFn/LUN, Cmd, cCode, plus |
69 | * some overhead. It would be nice to base this on the "BT Capabilities" | 74 | * some overhead; it's not worth the effort to dynamically size this based |
70 | * but that's too hard to propagate to the rest of the driver. */ | 75 | * on the results of the "Get BT Capabilities" command. */ |
71 | #define IPMI_MAX_MSG_LENGTH 272 /* multiple of 16 */ | 76 | #define IPMI_MAX_MSG_LENGTH 272 /* multiple of 16 */ |
72 | 77 | ||
73 | #define IPMI_CC_NO_ERROR 0x00 | 78 | #define IPMI_CC_NO_ERROR 0x00 |
74 | #define IPMI_NODE_BUSY_ERR 0xc0 | 79 | #define IPMI_NODE_BUSY_ERR 0xc0 |
75 | #define IPMI_INVALID_COMMAND_ERR 0xc1 | 80 | #define IPMI_INVALID_COMMAND_ERR 0xc1 |
81 | #define IPMI_TIMEOUT_ERR 0xc3 | ||
76 | #define IPMI_ERR_MSG_TRUNCATED 0xc6 | 82 | #define IPMI_ERR_MSG_TRUNCATED 0xc6 |
83 | #define IPMI_REQ_LEN_INVALID_ERR 0xc7 | ||
84 | #define IPMI_REQ_LEN_EXCEEDED_ERR 0xc8 | ||
85 | #define IPMI_NOT_IN_MY_STATE_ERR 0xd5 /* IPMI 2.0 */ | ||
77 | #define IPMI_LOST_ARBITRATION_ERR 0x81 | 86 | #define IPMI_LOST_ARBITRATION_ERR 0x81 |
78 | #define IPMI_BUS_ERR 0x82 | 87 | #define IPMI_BUS_ERR 0x82 |
79 | #define IPMI_NAK_ON_WRITE_ERR 0x83 | 88 | #define IPMI_NAK_ON_WRITE_ERR 0x83 |
diff --git a/include/linux/ipmi_smi.h b/include/linux/ipmi_smi.h index 6d9c7e4da472..c0633108d05d 100644 --- a/include/linux/ipmi_smi.h +++ b/include/linux/ipmi_smi.h | |||
@@ -115,6 +115,13 @@ struct ipmi_smi_handlers | |||
115 | poll for operations during things like crash dumps. */ | 115 | poll for operations during things like crash dumps. */ |
116 | void (*poll)(void *send_info); | 116 | void (*poll)(void *send_info); |
117 | 117 | ||
118 | /* Enable/disable firmware maintenance mode. Note that this | ||
119 | is *not* the modes defined, this is simply an on/off | ||
120 | setting. The message handler does the mode handling. Note | ||
121 | that this is called from interupt context, so it cannot | ||
122 | block. */ | ||
123 | void (*set_maintenance_mode)(void *send_info, int enable); | ||
124 | |||
118 | /* Tell the handler that we are using it/not using it. The | 125 | /* Tell the handler that we are using it/not using it. The |
119 | message handler get the modules that this handler belongs | 126 | message handler get the modules that this handler belongs |
120 | to; this function lets the SMI claim any modules that it | 127 | to; this function lets the SMI claim any modules that it |
@@ -173,6 +180,7 @@ int ipmi_register_smi(struct ipmi_smi_handlers *handlers, | |||
173 | void *send_info, | 180 | void *send_info, |
174 | struct ipmi_device_id *device_id, | 181 | struct ipmi_device_id *device_id, |
175 | struct device *dev, | 182 | struct device *dev, |
183 | const char *sysfs_name, | ||
176 | unsigned char slave_addr); | 184 | unsigned char slave_addr); |
177 | 185 | ||
178 | /* | 186 | /* |
diff --git a/include/linux/jbd.h b/include/linux/jbd.h index fe89444b1c6f..452737551260 100644 --- a/include/linux/jbd.h +++ b/include/linux/jbd.h | |||
@@ -839,7 +839,6 @@ struct journal_s | |||
839 | */ | 839 | */ |
840 | 840 | ||
841 | /* Filing buffers */ | 841 | /* Filing buffers */ |
842 | extern void __journal_temp_unlink_buffer(struct journal_head *jh); | ||
843 | extern void journal_unfile_buffer(journal_t *, struct journal_head *); | 842 | extern void journal_unfile_buffer(journal_t *, struct journal_head *); |
844 | extern void __journal_unfile_buffer(struct journal_head *); | 843 | extern void __journal_unfile_buffer(struct journal_head *); |
845 | extern void __journal_refile_buffer(struct journal_head *); | 844 | extern void __journal_refile_buffer(struct journal_head *); |
@@ -949,7 +948,7 @@ void journal_put_journal_head(struct journal_head *jh); | |||
949 | /* | 948 | /* |
950 | * handle management | 949 | * handle management |
951 | */ | 950 | */ |
952 | extern kmem_cache_t *jbd_handle_cache; | 951 | extern struct kmem_cache *jbd_handle_cache; |
953 | 952 | ||
954 | static inline handle_t *jbd_alloc_handle(gfp_t gfp_flags) | 953 | static inline handle_t *jbd_alloc_handle(gfp_t gfp_flags) |
955 | { | 954 | { |
diff --git a/include/linux/jbd2.h b/include/linux/jbd2.h index ddb128795781..0e0fedd2039a 100644 --- a/include/linux/jbd2.h +++ b/include/linux/jbd2.h | |||
@@ -848,7 +848,6 @@ struct journal_s | |||
848 | */ | 848 | */ |
849 | 849 | ||
850 | /* Filing buffers */ | 850 | /* Filing buffers */ |
851 | extern void __jbd2_journal_temp_unlink_buffer(struct journal_head *jh); | ||
852 | extern void jbd2_journal_unfile_buffer(journal_t *, struct journal_head *); | 851 | extern void jbd2_journal_unfile_buffer(journal_t *, struct journal_head *); |
853 | extern void __jbd2_journal_unfile_buffer(struct journal_head *); | 852 | extern void __jbd2_journal_unfile_buffer(struct journal_head *); |
854 | extern void __jbd2_journal_refile_buffer(struct journal_head *); | 853 | extern void __jbd2_journal_refile_buffer(struct journal_head *); |
@@ -958,7 +957,7 @@ void jbd2_journal_put_journal_head(struct journal_head *jh); | |||
958 | /* | 957 | /* |
959 | * handle management | 958 | * handle management |
960 | */ | 959 | */ |
961 | extern kmem_cache_t *jbd2_handle_cache; | 960 | extern struct kmem_cache *jbd2_handle_cache; |
962 | 961 | ||
963 | static inline handle_t *jbd_alloc_handle(gfp_t gfp_flags) | 962 | static inline handle_t *jbd_alloc_handle(gfp_t gfp_flags) |
964 | { | 963 | { |
diff --git a/include/linux/kbd_kern.h b/include/linux/kbd_kern.h index efe0ee4cc80b..06c58c423fe1 100644 --- a/include/linux/kbd_kern.h +++ b/include/linux/kbd_kern.h | |||
@@ -158,7 +158,7 @@ static inline void con_schedule_flip(struct tty_struct *t) | |||
158 | if (t->buf.tail != NULL) | 158 | if (t->buf.tail != NULL) |
159 | t->buf.tail->commit = t->buf.tail->used; | 159 | t->buf.tail->commit = t->buf.tail->used; |
160 | spin_unlock_irqrestore(&t->buf.lock, flags); | 160 | spin_unlock_irqrestore(&t->buf.lock, flags); |
161 | schedule_work(&t->buf.work); | 161 | schedule_delayed_work(&t->buf.work, 0); |
162 | } | 162 | } |
163 | 163 | ||
164 | #endif | 164 | #endif |
diff --git a/include/linux/kexec.h b/include/linux/kexec.h index a4ede62b339d..e3abcec6c51c 100644 --- a/include/linux/kexec.h +++ b/include/linux/kexec.h | |||
@@ -105,6 +105,7 @@ extern struct page *kimage_alloc_control_pages(struct kimage *image, | |||
105 | unsigned int order); | 105 | unsigned int order); |
106 | extern void crash_kexec(struct pt_regs *); | 106 | extern void crash_kexec(struct pt_regs *); |
107 | int kexec_should_crash(struct task_struct *); | 107 | int kexec_should_crash(struct task_struct *); |
108 | void crash_save_cpu(struct pt_regs *regs, int cpu); | ||
108 | extern struct kimage *kexec_image; | 109 | extern struct kimage *kexec_image; |
109 | extern struct kimage *kexec_crash_image; | 110 | extern struct kimage *kexec_crash_image; |
110 | 111 | ||
diff --git a/include/linux/kprobes.h b/include/linux/kprobes.h index ac4c0559f751..769be39b9681 100644 --- a/include/linux/kprobes.h +++ b/include/linux/kprobes.h | |||
@@ -165,7 +165,7 @@ extern void arch_disarm_kprobe(struct kprobe *p); | |||
165 | extern int arch_init_kprobes(void); | 165 | extern int arch_init_kprobes(void); |
166 | extern void show_registers(struct pt_regs *regs); | 166 | extern void show_registers(struct pt_regs *regs); |
167 | extern kprobe_opcode_t *get_insn_slot(void); | 167 | extern kprobe_opcode_t *get_insn_slot(void); |
168 | extern void free_insn_slot(kprobe_opcode_t *slot); | 168 | extern void free_insn_slot(kprobe_opcode_t *slot, int dirty); |
169 | extern void kprobes_inc_nmissed_count(struct kprobe *p); | 169 | extern void kprobes_inc_nmissed_count(struct kprobe *p); |
170 | 170 | ||
171 | /* Get the kprobe at this addr (if any) - called with preemption disabled */ | 171 | /* Get the kprobe at this addr (if any) - called with preemption disabled */ |
diff --git a/include/linux/ktime.h b/include/linux/ktime.h index 84eeecd60a02..611f17f79eef 100644 --- a/include/linux/ktime.h +++ b/include/linux/ktime.h | |||
@@ -248,9 +248,9 @@ static inline struct timeval ktime_to_timeval(const ktime_t kt) | |||
248 | * | 248 | * |
249 | * Returns the scalar nanoseconds representation of kt | 249 | * Returns the scalar nanoseconds representation of kt |
250 | */ | 250 | */ |
251 | static inline u64 ktime_to_ns(const ktime_t kt) | 251 | static inline s64 ktime_to_ns(const ktime_t kt) |
252 | { | 252 | { |
253 | return (u64) kt.tv.sec * NSEC_PER_SEC + kt.tv.nsec; | 253 | return (s64) kt.tv.sec * NSEC_PER_SEC + kt.tv.nsec; |
254 | } | 254 | } |
255 | 255 | ||
256 | #endif | 256 | #endif |
diff --git a/include/linux/libata.h b/include/linux/libata.h index 202283b5df96..ab2754830322 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h | |||
@@ -575,8 +575,9 @@ struct ata_port { | |||
575 | struct ata_host *host; | 575 | struct ata_host *host; |
576 | struct device *dev; | 576 | struct device *dev; |
577 | 577 | ||
578 | struct work_struct port_task; | 578 | void *port_task_data; |
579 | struct work_struct hotplug_task; | 579 | struct delayed_work port_task; |
580 | struct delayed_work hotplug_task; | ||
580 | struct work_struct scsi_rescan_task; | 581 | struct work_struct scsi_rescan_task; |
581 | 582 | ||
582 | unsigned int hsm_task_state; | 583 | unsigned int hsm_task_state; |
@@ -755,7 +756,7 @@ extern void ata_host_resume(struct ata_host *host); | |||
755 | extern int ata_ratelimit(void); | 756 | extern int ata_ratelimit(void); |
756 | extern int ata_busy_sleep(struct ata_port *ap, | 757 | extern int ata_busy_sleep(struct ata_port *ap, |
757 | unsigned long timeout_pat, unsigned long timeout); | 758 | unsigned long timeout_pat, unsigned long timeout); |
758 | extern void ata_port_queue_task(struct ata_port *ap, void (*fn)(void *), | 759 | extern void ata_port_queue_task(struct ata_port *ap, work_func_t fn, |
759 | void *data, unsigned long delay); | 760 | void *data, unsigned long delay); |
760 | extern u32 ata_wait_register(void __iomem *reg, u32 mask, u32 val, | 761 | extern u32 ata_wait_register(void __iomem *reg, u32 mask, u32 val, |
761 | unsigned long interval_msec, | 762 | unsigned long interval_msec, |
diff --git a/include/linux/lockd/lockd.h b/include/linux/lockd/lockd.h index 862d9730a60d..8c39654549d8 100644 --- a/include/linux/lockd/lockd.h +++ b/include/linux/lockd/lockd.h | |||
@@ -164,14 +164,12 @@ void nlmclnt_next_cookie(struct nlm_cookie *); | |||
164 | */ | 164 | */ |
165 | struct nlm_host * nlmclnt_lookup_host(const struct sockaddr_in *, int, int, const char *, int); | 165 | struct nlm_host * nlmclnt_lookup_host(const struct sockaddr_in *, int, int, const char *, int); |
166 | struct nlm_host * nlmsvc_lookup_host(struct svc_rqst *, const char *, int); | 166 | struct nlm_host * nlmsvc_lookup_host(struct svc_rqst *, const char *, int); |
167 | struct nlm_host * nlm_lookup_host(int server, const struct sockaddr_in *, int, int, const char *, int); | ||
168 | struct rpc_clnt * nlm_bind_host(struct nlm_host *); | 167 | struct rpc_clnt * nlm_bind_host(struct nlm_host *); |
169 | void nlm_rebind_host(struct nlm_host *); | 168 | void nlm_rebind_host(struct nlm_host *); |
170 | struct nlm_host * nlm_get_host(struct nlm_host *); | 169 | struct nlm_host * nlm_get_host(struct nlm_host *); |
171 | void nlm_release_host(struct nlm_host *); | 170 | void nlm_release_host(struct nlm_host *); |
172 | void nlm_shutdown_hosts(void); | 171 | void nlm_shutdown_hosts(void); |
173 | extern void nlm_host_rebooted(const struct sockaddr_in *, const char *, int, u32); | 172 | extern void nlm_host_rebooted(const struct sockaddr_in *, const char *, int, u32); |
174 | struct nsm_handle *nsm_find(const struct sockaddr_in *, const char *, int); | ||
175 | void nsm_release(struct nsm_handle *); | 173 | void nsm_release(struct nsm_handle *); |
176 | 174 | ||
177 | 175 | ||
diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h index 819f08f1310d..498bfbd3b4e1 100644 --- a/include/linux/lockdep.h +++ b/include/linux/lockdep.h | |||
@@ -193,7 +193,6 @@ extern void lockdep_free_key_range(void *start, unsigned long size); | |||
193 | 193 | ||
194 | extern void lockdep_off(void); | 194 | extern void lockdep_off(void); |
195 | extern void lockdep_on(void); | 195 | extern void lockdep_on(void); |
196 | extern int lockdep_internal(void); | ||
197 | 196 | ||
198 | /* | 197 | /* |
199 | * These methods are used by specific locking variants (spinlocks, | 198 | * These methods are used by specific locking variants (spinlocks, |
@@ -243,6 +242,8 @@ extern void lock_release(struct lockdep_map *lock, int nested, | |||
243 | 242 | ||
244 | # define INIT_LOCKDEP .lockdep_recursion = 0, | 243 | # define INIT_LOCKDEP .lockdep_recursion = 0, |
245 | 244 | ||
245 | #define lockdep_depth(tsk) ((tsk)->lockdep_depth) | ||
246 | |||
246 | #else /* !LOCKDEP */ | 247 | #else /* !LOCKDEP */ |
247 | 248 | ||
248 | static inline void lockdep_off(void) | 249 | static inline void lockdep_off(void) |
@@ -253,11 +254,6 @@ static inline void lockdep_on(void) | |||
253 | { | 254 | { |
254 | } | 255 | } |
255 | 256 | ||
256 | static inline int lockdep_internal(void) | ||
257 | { | ||
258 | return 0; | ||
259 | } | ||
260 | |||
261 | # define lock_acquire(l, s, t, r, c, i) do { } while (0) | 257 | # define lock_acquire(l, s, t, r, c, i) do { } while (0) |
262 | # define lock_release(l, n, i) do { } while (0) | 258 | # define lock_release(l, n, i) do { } while (0) |
263 | # define lockdep_init() do { } while (0) | 259 | # define lockdep_init() do { } while (0) |
@@ -277,6 +273,9 @@ static inline int lockdep_internal(void) | |||
277 | * The class key takes no space if lockdep is disabled: | 273 | * The class key takes no space if lockdep is disabled: |
278 | */ | 274 | */ |
279 | struct lock_class_key { }; | 275 | struct lock_class_key { }; |
276 | |||
277 | #define lockdep_depth(tsk) (0) | ||
278 | |||
280 | #endif /* !LOCKDEP */ | 279 | #endif /* !LOCKDEP */ |
281 | 280 | ||
282 | #if defined(CONFIG_TRACE_IRQFLAGS) && defined(CONFIG_GENERIC_HARDIRQS) | 281 | #if defined(CONFIG_TRACE_IRQFLAGS) && defined(CONFIG_GENERIC_HARDIRQS) |
diff --git a/include/linux/mm.h b/include/linux/mm.h index d538de901965..a17b147c61e7 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
@@ -114,6 +114,8 @@ struct vm_area_struct { | |||
114 | #endif | 114 | #endif |
115 | }; | 115 | }; |
116 | 116 | ||
117 | extern struct kmem_cache *vm_area_cachep; | ||
118 | |||
117 | /* | 119 | /* |
118 | * This struct defines the per-mm list of VMAs for uClinux. If CONFIG_MMU is | 120 | * This struct defines the per-mm list of VMAs for uClinux. If CONFIG_MMU is |
119 | * disabled, then there's a single shared list of VMAs maintained by the | 121 | * disabled, then there's a single shared list of VMAs maintained by the |
@@ -294,6 +296,24 @@ void put_pages_list(struct list_head *pages); | |||
294 | void split_page(struct page *page, unsigned int order); | 296 | void split_page(struct page *page, unsigned int order); |
295 | 297 | ||
296 | /* | 298 | /* |
299 | * Compound pages have a destructor function. Provide a | ||
300 | * prototype for that function and accessor functions. | ||
301 | * These are _only_ valid on the head of a PG_compound page. | ||
302 | */ | ||
303 | typedef void compound_page_dtor(struct page *); | ||
304 | |||
305 | static inline void set_compound_page_dtor(struct page *page, | ||
306 | compound_page_dtor *dtor) | ||
307 | { | ||
308 | page[1].lru.next = (void *)dtor; | ||
309 | } | ||
310 | |||
311 | static inline compound_page_dtor *get_compound_page_dtor(struct page *page) | ||
312 | { | ||
313 | return (compound_page_dtor *)page[1].lru.next; | ||
314 | } | ||
315 | |||
316 | /* | ||
297 | * Multiple processes may "see" the same page. E.g. for untouched | 317 | * Multiple processes may "see" the same page. E.g. for untouched |
298 | * mappings of /dev/null, all processes see the same page full of | 318 | * mappings of /dev/null, all processes see the same page full of |
299 | * zeroes, and text pages of executables and shared libraries have | 319 | * zeroes, and text pages of executables and shared libraries have |
@@ -396,7 +416,9 @@ void split_page(struct page *page, unsigned int order); | |||
396 | * We are going to use the flags for the page to node mapping if its in | 416 | * We are going to use the flags for the page to node mapping if its in |
397 | * there. This includes the case where there is no node, so it is implicit. | 417 | * there. This includes the case where there is no node, so it is implicit. |
398 | */ | 418 | */ |
399 | #define FLAGS_HAS_NODE (NODES_WIDTH > 0 || NODES_SHIFT == 0) | 419 | #if !(NODES_WIDTH > 0 || NODES_SHIFT == 0) |
420 | #define NODE_NOT_IN_PAGE_FLAGS | ||
421 | #endif | ||
400 | 422 | ||
401 | #ifndef PFN_SECTION_SHIFT | 423 | #ifndef PFN_SECTION_SHIFT |
402 | #define PFN_SECTION_SHIFT 0 | 424 | #define PFN_SECTION_SHIFT 0 |
@@ -411,13 +433,18 @@ void split_page(struct page *page, unsigned int order); | |||
411 | #define NODES_PGSHIFT (NODES_PGOFF * (NODES_WIDTH != 0)) | 433 | #define NODES_PGSHIFT (NODES_PGOFF * (NODES_WIDTH != 0)) |
412 | #define ZONES_PGSHIFT (ZONES_PGOFF * (ZONES_WIDTH != 0)) | 434 | #define ZONES_PGSHIFT (ZONES_PGOFF * (ZONES_WIDTH != 0)) |
413 | 435 | ||
414 | /* NODE:ZONE or SECTION:ZONE is used to lookup the zone from a page. */ | 436 | /* NODE:ZONE or SECTION:ZONE is used to ID a zone for the buddy allcator */ |
415 | #if FLAGS_HAS_NODE | 437 | #ifdef NODE_NOT_IN_PAGEFLAGS |
416 | #define ZONETABLE_SHIFT (NODES_SHIFT + ZONES_SHIFT) | 438 | #define ZONEID_SHIFT (SECTIONS_SHIFT + ZONES_SHIFT) |
439 | #else | ||
440 | #define ZONEID_SHIFT (NODES_SHIFT + ZONES_SHIFT) | ||
441 | #endif | ||
442 | |||
443 | #if ZONES_WIDTH > 0 | ||
444 | #define ZONEID_PGSHIFT ZONES_PGSHIFT | ||
417 | #else | 445 | #else |
418 | #define ZONETABLE_SHIFT (SECTIONS_SHIFT + ZONES_SHIFT) | 446 | #define ZONEID_PGSHIFT NODES_PGOFF |
419 | #endif | 447 | #endif |
420 | #define ZONETABLE_PGSHIFT ZONES_PGSHIFT | ||
421 | 448 | ||
422 | #if SECTIONS_WIDTH+NODES_WIDTH+ZONES_WIDTH > FLAGS_RESERVED | 449 | #if SECTIONS_WIDTH+NODES_WIDTH+ZONES_WIDTH > FLAGS_RESERVED |
423 | #error SECTIONS_WIDTH+NODES_WIDTH+ZONES_WIDTH > FLAGS_RESERVED | 450 | #error SECTIONS_WIDTH+NODES_WIDTH+ZONES_WIDTH > FLAGS_RESERVED |
@@ -426,26 +453,28 @@ void split_page(struct page *page, unsigned int order); | |||
426 | #define ZONES_MASK ((1UL << ZONES_WIDTH) - 1) | 453 | #define ZONES_MASK ((1UL << ZONES_WIDTH) - 1) |
427 | #define NODES_MASK ((1UL << NODES_WIDTH) - 1) | 454 | #define NODES_MASK ((1UL << NODES_WIDTH) - 1) |
428 | #define SECTIONS_MASK ((1UL << SECTIONS_WIDTH) - 1) | 455 | #define SECTIONS_MASK ((1UL << SECTIONS_WIDTH) - 1) |
429 | #define ZONETABLE_MASK ((1UL << ZONETABLE_SHIFT) - 1) | 456 | #define ZONEID_MASK ((1UL << ZONEID_SHIFT) - 1) |
430 | 457 | ||
431 | static inline enum zone_type page_zonenum(struct page *page) | 458 | static inline enum zone_type page_zonenum(struct page *page) |
432 | { | 459 | { |
433 | return (page->flags >> ZONES_PGSHIFT) & ZONES_MASK; | 460 | return (page->flags >> ZONES_PGSHIFT) & ZONES_MASK; |
434 | } | 461 | } |
435 | 462 | ||
436 | struct zone; | 463 | /* |
437 | extern struct zone *zone_table[]; | 464 | * The identification function is only used by the buddy allocator for |
438 | 465 | * determining if two pages could be buddies. We are not really | |
466 | * identifying a zone since we could be using a the section number | ||
467 | * id if we have not node id available in page flags. | ||
468 | * We guarantee only that it will return the same value for two | ||
469 | * combinable pages in a zone. | ||
470 | */ | ||
439 | static inline int page_zone_id(struct page *page) | 471 | static inline int page_zone_id(struct page *page) |
440 | { | 472 | { |
441 | return (page->flags >> ZONETABLE_PGSHIFT) & ZONETABLE_MASK; | 473 | BUILD_BUG_ON(ZONEID_PGSHIFT == 0 && ZONEID_MASK); |
442 | } | 474 | return (page->flags >> ZONEID_PGSHIFT) & ZONEID_MASK; |
443 | static inline struct zone *page_zone(struct page *page) | ||
444 | { | ||
445 | return zone_table[page_zone_id(page)]; | ||
446 | } | 475 | } |
447 | 476 | ||
448 | static inline unsigned long zone_to_nid(struct zone *zone) | 477 | static inline int zone_to_nid(struct zone *zone) |
449 | { | 478 | { |
450 | #ifdef CONFIG_NUMA | 479 | #ifdef CONFIG_NUMA |
451 | return zone->node; | 480 | return zone->node; |
@@ -454,13 +483,20 @@ static inline unsigned long zone_to_nid(struct zone *zone) | |||
454 | #endif | 483 | #endif |
455 | } | 484 | } |
456 | 485 | ||
457 | static inline unsigned long page_to_nid(struct page *page) | 486 | #ifdef NODE_NOT_IN_PAGE_FLAGS |
487 | extern int page_to_nid(struct page *page); | ||
488 | #else | ||
489 | static inline int page_to_nid(struct page *page) | ||
490 | { | ||
491 | return (page->flags >> NODES_PGSHIFT) & NODES_MASK; | ||
492 | } | ||
493 | #endif | ||
494 | |||
495 | static inline struct zone *page_zone(struct page *page) | ||
458 | { | 496 | { |
459 | if (FLAGS_HAS_NODE) | 497 | return &NODE_DATA(page_to_nid(page))->node_zones[page_zonenum(page)]; |
460 | return (page->flags >> NODES_PGSHIFT) & NODES_MASK; | ||
461 | else | ||
462 | return zone_to_nid(page_zone(page)); | ||
463 | } | 498 | } |
499 | |||
464 | static inline unsigned long page_to_section(struct page *page) | 500 | static inline unsigned long page_to_section(struct page *page) |
465 | { | 501 | { |
466 | return (page->flags >> SECTIONS_PGSHIFT) & SECTIONS_MASK; | 502 | return (page->flags >> SECTIONS_PGSHIFT) & SECTIONS_MASK; |
@@ -477,6 +513,7 @@ static inline void set_page_node(struct page *page, unsigned long node) | |||
477 | page->flags &= ~(NODES_MASK << NODES_PGSHIFT); | 513 | page->flags &= ~(NODES_MASK << NODES_PGSHIFT); |
478 | page->flags |= (node & NODES_MASK) << NODES_PGSHIFT; | 514 | page->flags |= (node & NODES_MASK) << NODES_PGSHIFT; |
479 | } | 515 | } |
516 | |||
480 | static inline void set_page_section(struct page *page, unsigned long section) | 517 | static inline void set_page_section(struct page *page, unsigned long section) |
481 | { | 518 | { |
482 | page->flags &= ~(SECTIONS_MASK << SECTIONS_PGSHIFT); | 519 | page->flags &= ~(SECTIONS_MASK << SECTIONS_PGSHIFT); |
@@ -947,8 +984,6 @@ extern void mem_init(void); | |||
947 | extern void show_mem(void); | 984 | extern void show_mem(void); |
948 | extern void si_meminfo(struct sysinfo * val); | 985 | extern void si_meminfo(struct sysinfo * val); |
949 | extern void si_meminfo_node(struct sysinfo *val, int nid); | 986 | extern void si_meminfo_node(struct sysinfo *val, int nid); |
950 | extern void zonetable_add(struct zone *zone, int nid, enum zone_type zid, | ||
951 | unsigned long pfn, unsigned long size); | ||
952 | 987 | ||
953 | #ifdef CONFIG_NUMA | 988 | #ifdef CONFIG_NUMA |
954 | extern void setup_per_cpu_pageset(void); | 989 | extern void setup_per_cpu_pageset(void); |
diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h index 528e7d3fecb1..c15ae1986b98 100644 --- a/include/linux/mmc/host.h +++ b/include/linux/mmc/host.h | |||
@@ -110,7 +110,7 @@ struct mmc_host { | |||
110 | struct mmc_card *card_busy; /* the MMC card claiming host */ | 110 | struct mmc_card *card_busy; /* the MMC card claiming host */ |
111 | struct mmc_card *card_selected; /* the selected MMC card */ | 111 | struct mmc_card *card_selected; /* the selected MMC card */ |
112 | 112 | ||
113 | struct work_struct detect; | 113 | struct delayed_work detect; |
114 | 114 | ||
115 | unsigned long private[0] ____cacheline_aligned; | 115 | unsigned long private[0] ____cacheline_aligned; |
116 | }; | 116 | }; |
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index e06683e2bea3..e339a7345f25 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h | |||
@@ -278,7 +278,7 @@ struct zone { | |||
278 | /* | 278 | /* |
279 | * rarely used fields: | 279 | * rarely used fields: |
280 | */ | 280 | */ |
281 | char *name; | 281 | const char *name; |
282 | } ____cacheline_internodealigned_in_smp; | 282 | } ____cacheline_internodealigned_in_smp; |
283 | 283 | ||
284 | /* | 284 | /* |
@@ -288,19 +288,94 @@ struct zone { | |||
288 | */ | 288 | */ |
289 | #define DEF_PRIORITY 12 | 289 | #define DEF_PRIORITY 12 |
290 | 290 | ||
291 | /* Maximum number of zones on a zonelist */ | ||
292 | #define MAX_ZONES_PER_ZONELIST (MAX_NUMNODES * MAX_NR_ZONES) | ||
293 | |||
294 | #ifdef CONFIG_NUMA | ||
295 | /* | ||
296 | * We cache key information from each zonelist for smaller cache | ||
297 | * footprint when scanning for free pages in get_page_from_freelist(). | ||
298 | * | ||
299 | * 1) The BITMAP fullzones tracks which zones in a zonelist have come | ||
300 | * up short of free memory since the last time (last_fullzone_zap) | ||
301 | * we zero'd fullzones. | ||
302 | * 2) The array z_to_n[] maps each zone in the zonelist to its node | ||
303 | * id, so that we can efficiently evaluate whether that node is | ||
304 | * set in the current tasks mems_allowed. | ||
305 | * | ||
306 | * Both fullzones and z_to_n[] are one-to-one with the zonelist, | ||
307 | * indexed by a zones offset in the zonelist zones[] array. | ||
308 | * | ||
309 | * The get_page_from_freelist() routine does two scans. During the | ||
310 | * first scan, we skip zones whose corresponding bit in 'fullzones' | ||
311 | * is set or whose corresponding node in current->mems_allowed (which | ||
312 | * comes from cpusets) is not set. During the second scan, we bypass | ||
313 | * this zonelist_cache, to ensure we look methodically at each zone. | ||
314 | * | ||
315 | * Once per second, we zero out (zap) fullzones, forcing us to | ||
316 | * reconsider nodes that might have regained more free memory. | ||
317 | * The field last_full_zap is the time we last zapped fullzones. | ||
318 | * | ||
319 | * This mechanism reduces the amount of time we waste repeatedly | ||
320 | * reexaming zones for free memory when they just came up low on | ||
321 | * memory momentarilly ago. | ||
322 | * | ||
323 | * The zonelist_cache struct members logically belong in struct | ||
324 | * zonelist. However, the mempolicy zonelists constructed for | ||
325 | * MPOL_BIND are intentionally variable length (and usually much | ||
326 | * shorter). A general purpose mechanism for handling structs with | ||
327 | * multiple variable length members is more mechanism than we want | ||
328 | * here. We resort to some special case hackery instead. | ||
329 | * | ||
330 | * The MPOL_BIND zonelists don't need this zonelist_cache (in good | ||
331 | * part because they are shorter), so we put the fixed length stuff | ||
332 | * at the front of the zonelist struct, ending in a variable length | ||
333 | * zones[], as is needed by MPOL_BIND. | ||
334 | * | ||
335 | * Then we put the optional zonelist cache on the end of the zonelist | ||
336 | * struct. This optional stuff is found by a 'zlcache_ptr' pointer in | ||
337 | * the fixed length portion at the front of the struct. This pointer | ||
338 | * both enables us to find the zonelist cache, and in the case of | ||
339 | * MPOL_BIND zonelists, (which will just set the zlcache_ptr to NULL) | ||
340 | * to know that the zonelist cache is not there. | ||
341 | * | ||
342 | * The end result is that struct zonelists come in two flavors: | ||
343 | * 1) The full, fixed length version, shown below, and | ||
344 | * 2) The custom zonelists for MPOL_BIND. | ||
345 | * The custom MPOL_BIND zonelists have a NULL zlcache_ptr and no zlcache. | ||
346 | * | ||
347 | * Even though there may be multiple CPU cores on a node modifying | ||
348 | * fullzones or last_full_zap in the same zonelist_cache at the same | ||
349 | * time, we don't lock it. This is just hint data - if it is wrong now | ||
350 | * and then, the allocator will still function, perhaps a bit slower. | ||
351 | */ | ||
352 | |||
353 | |||
354 | struct zonelist_cache { | ||
355 | unsigned short z_to_n[MAX_ZONES_PER_ZONELIST]; /* zone->nid */ | ||
356 | DECLARE_BITMAP(fullzones, MAX_ZONES_PER_ZONELIST); /* zone full? */ | ||
357 | unsigned long last_full_zap; /* when last zap'd (jiffies) */ | ||
358 | }; | ||
359 | #else | ||
360 | struct zonelist_cache; | ||
361 | #endif | ||
362 | |||
291 | /* | 363 | /* |
292 | * One allocation request operates on a zonelist. A zonelist | 364 | * One allocation request operates on a zonelist. A zonelist |
293 | * is a list of zones, the first one is the 'goal' of the | 365 | * is a list of zones, the first one is the 'goal' of the |
294 | * allocation, the other zones are fallback zones, in decreasing | 366 | * allocation, the other zones are fallback zones, in decreasing |
295 | * priority. | 367 | * priority. |
296 | * | 368 | * |
297 | * Right now a zonelist takes up less than a cacheline. We never | 369 | * If zlcache_ptr is not NULL, then it is just the address of zlcache, |
298 | * modify it apart from boot-up, and only a few indices are used, | 370 | * as explained above. If zlcache_ptr is NULL, there is no zlcache. |
299 | * so despite the zonelist table being relatively big, the cache | ||
300 | * footprint of this construct is very small. | ||
301 | */ | 371 | */ |
372 | |||
302 | struct zonelist { | 373 | struct zonelist { |
303 | struct zone *zones[MAX_NUMNODES * MAX_NR_ZONES + 1]; // NULL delimited | 374 | struct zonelist_cache *zlcache_ptr; // NULL or &zlcache |
375 | struct zone *zones[MAX_ZONES_PER_ZONELIST + 1]; // NULL delimited | ||
376 | #ifdef CONFIG_NUMA | ||
377 | struct zonelist_cache zlcache; // optional ... | ||
378 | #endif | ||
304 | }; | 379 | }; |
305 | 380 | ||
306 | #ifdef CONFIG_ARCH_POPULATES_NODE_MAP | 381 | #ifdef CONFIG_ARCH_POPULATES_NODE_MAP |
diff --git a/include/linux/moduleparam.h b/include/linux/moduleparam.h index 7c0c2c198f1f..4a189dadb160 100644 --- a/include/linux/moduleparam.h +++ b/include/linux/moduleparam.h | |||
@@ -63,6 +63,9 @@ struct kparam_array | |||
63 | not there, read bits mean it's readable, write bits mean it's | 63 | not there, read bits mean it's readable, write bits mean it's |
64 | writable. */ | 64 | writable. */ |
65 | #define __module_param_call(prefix, name, set, get, arg, perm) \ | 65 | #define __module_param_call(prefix, name, set, get, arg, perm) \ |
66 | /* Default value instead of permissions? */ \ | ||
67 | static int __param_perm_check_##name __attribute__((unused)) = \ | ||
68 | BUILD_BUG_ON_ZERO((perm) < 0 || (perm) > 0777 || ((perm) & 2)); \ | ||
66 | static char __param_str_##name[] = prefix #name; \ | 69 | static char __param_str_##name[] = prefix #name; \ |
67 | static struct kernel_param const __param_##name \ | 70 | static struct kernel_param const __param_##name \ |
68 | __attribute_used__ \ | 71 | __attribute_used__ \ |
diff --git a/include/linux/msg.h b/include/linux/msg.h index acc7c174ff00..f1b60740d641 100644 --- a/include/linux/msg.h +++ b/include/linux/msg.h | |||
@@ -92,6 +92,12 @@ struct msg_queue { | |||
92 | struct list_head q_senders; | 92 | struct list_head q_senders; |
93 | }; | 93 | }; |
94 | 94 | ||
95 | /* Helper routines for sys_msgsnd and sys_msgrcv */ | ||
96 | extern long do_msgsnd(int msqid, long mtype, void __user *mtext, | ||
97 | size_t msgsz, int msgflg); | ||
98 | extern long do_msgrcv(int msqid, long *pmtype, void __user *mtext, | ||
99 | size_t msgsz, long msgtyp, int msgflg); | ||
100 | |||
95 | #endif /* __KERNEL__ */ | 101 | #endif /* __KERNEL__ */ |
96 | 102 | ||
97 | #endif /* _LINUX_MSG_H */ | 103 | #endif /* _LINUX_MSG_H */ |
diff --git a/include/linux/mutex.h b/include/linux/mutex.h index 27c48daa3183..b2b91c477563 100644 --- a/include/linux/mutex.h +++ b/include/linux/mutex.h | |||
@@ -94,7 +94,7 @@ do { \ | |||
94 | 94 | ||
95 | #define __MUTEX_INITIALIZER(lockname) \ | 95 | #define __MUTEX_INITIALIZER(lockname) \ |
96 | { .count = ATOMIC_INIT(1) \ | 96 | { .count = ATOMIC_INIT(1) \ |
97 | , .wait_lock = SPIN_LOCK_UNLOCKED \ | 97 | , .wait_lock = __SPIN_LOCK_UNLOCKED(lockname.wait_lock) \ |
98 | , .wait_list = LIST_HEAD_INIT(lockname.wait_list) \ | 98 | , .wait_list = LIST_HEAD_INIT(lockname.wait_list) \ |
99 | __DEBUG_MUTEX_INITIALIZER(lockname) \ | 99 | __DEBUG_MUTEX_INITIALIZER(lockname) \ |
100 | __DEP_MAP_MUTEX_INITIALIZER(lockname) } | 100 | __DEP_MAP_MUTEX_INITIALIZER(lockname) } |
diff --git a/include/linux/nbd.h b/include/linux/nbd.h index d6b6dc09ad97..0f3e69302540 100644 --- a/include/linux/nbd.h +++ b/include/linux/nbd.h | |||
@@ -64,6 +64,7 @@ struct nbd_device { | |||
64 | struct gendisk *disk; | 64 | struct gendisk *disk; |
65 | int blksize; | 65 | int blksize; |
66 | u64 bytesize; | 66 | u64 bytesize; |
67 | pid_t pid; /* pid of nbd-client, if attached */ | ||
67 | }; | 68 | }; |
68 | 69 | ||
69 | #endif | 70 | #endif |
diff --git a/include/linux/ncp_fs_sb.h b/include/linux/ncp_fs_sb.h index b089d9506283..a503052138bd 100644 --- a/include/linux/ncp_fs_sb.h +++ b/include/linux/ncp_fs_sb.h | |||
@@ -127,10 +127,10 @@ struct ncp_server { | |||
127 | } unexpected_packet; | 127 | } unexpected_packet; |
128 | }; | 128 | }; |
129 | 129 | ||
130 | extern void ncp_tcp_rcv_proc(void *server); | 130 | extern void ncp_tcp_rcv_proc(struct work_struct *work); |
131 | extern void ncp_tcp_tx_proc(void *server); | 131 | extern void ncp_tcp_tx_proc(struct work_struct *work); |
132 | extern void ncpdgram_rcv_proc(void *server); | 132 | extern void ncpdgram_rcv_proc(struct work_struct *work); |
133 | extern void ncpdgram_timeout_proc(void *server); | 133 | extern void ncpdgram_timeout_proc(struct work_struct *work); |
134 | extern void ncpdgram_timeout_call(unsigned long server); | 134 | extern void ncpdgram_timeout_call(unsigned long server); |
135 | extern void ncp_tcp_data_ready(struct sock* sk, int len); | 135 | extern void ncp_tcp_data_ready(struct sock* sk, int len); |
136 | extern void ncp_tcp_write_space(struct sock* sk); | 136 | extern void ncp_tcp_write_space(struct sock* sk); |
diff --git a/include/linux/netpoll.h b/include/linux/netpoll.h index 2cc9867b1626..29930b71a9aa 100644 --- a/include/linux/netpoll.h +++ b/include/linux/netpoll.h | |||
@@ -32,7 +32,7 @@ struct netpoll_info { | |||
32 | struct netpoll *rx_np; /* netpoll that registered an rx_hook */ | 32 | struct netpoll *rx_np; /* netpoll that registered an rx_hook */ |
33 | struct sk_buff_head arp_tx; /* list of arp requests to reply to */ | 33 | struct sk_buff_head arp_tx; /* list of arp requests to reply to */ |
34 | struct sk_buff_head txq; | 34 | struct sk_buff_head txq; |
35 | struct work_struct tx_work; | 35 | struct delayed_work tx_work; |
36 | }; | 36 | }; |
37 | 37 | ||
38 | void netpoll_poll(struct netpoll *np); | 38 | void netpoll_poll(struct netpoll *np); |
diff --git a/include/linux/nfs_fs_sb.h b/include/linux/nfs_fs_sb.h index 7ccfc7ef0a83..95796e6924f1 100644 --- a/include/linux/nfs_fs_sb.h +++ b/include/linux/nfs_fs_sb.h | |||
@@ -51,7 +51,7 @@ struct nfs_client { | |||
51 | 51 | ||
52 | unsigned long cl_lease_time; | 52 | unsigned long cl_lease_time; |
53 | unsigned long cl_last_renewal; | 53 | unsigned long cl_last_renewal; |
54 | struct work_struct cl_renewd; | 54 | struct delayed_work cl_renewd; |
55 | 55 | ||
56 | struct rpc_wait_queue cl_rpcwaitq; | 56 | struct rpc_wait_queue cl_rpcwaitq; |
57 | 57 | ||
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index c09da1e30c54..ff2dcb436cd0 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
@@ -390,7 +390,7 @@ | |||
390 | #define PCI_DEVICE_ID_NS_CS5535_IDE 0x002d | 390 | #define PCI_DEVICE_ID_NS_CS5535_IDE 0x002d |
391 | #define PCI_DEVICE_ID_NS_CS5535_AUDIO 0x002e | 391 | #define PCI_DEVICE_ID_NS_CS5535_AUDIO 0x002e |
392 | #define PCI_DEVICE_ID_NS_CS5535_USB 0x002f | 392 | #define PCI_DEVICE_ID_NS_CS5535_USB 0x002f |
393 | #define PCI_DEVICE_ID_NS_CS5535_VIDEO 0x0030 | 393 | #define PCI_DEVICE_ID_NS_GX_VIDEO 0x0030 |
394 | #define PCI_DEVICE_ID_NS_SATURN 0x0035 | 394 | #define PCI_DEVICE_ID_NS_SATURN 0x0035 |
395 | #define PCI_DEVICE_ID_NS_SCx200_BRIDGE 0x0500 | 395 | #define PCI_DEVICE_ID_NS_SCx200_BRIDGE 0x0500 |
396 | #define PCI_DEVICE_ID_NS_SCx200_SMI 0x0501 | 396 | #define PCI_DEVICE_ID_NS_SCx200_SMI 0x0501 |
@@ -403,8 +403,7 @@ | |||
403 | #define PCI_DEVICE_ID_NS_SC1100_XBUS 0x0515 | 403 | #define PCI_DEVICE_ID_NS_SC1100_XBUS 0x0515 |
404 | #define PCI_DEVICE_ID_NS_87410 0xd001 | 404 | #define PCI_DEVICE_ID_NS_87410 0xd001 |
405 | 405 | ||
406 | #define PCI_DEVICE_ID_NS_CS5535_HOST_BRIDGE 0x0028 | 406 | #define PCI_DEVICE_ID_NS_GX_HOST_BRIDGE 0x0028 |
407 | #define PCI_DEVICE_ID_NS_CS5535_ISA_BRIDGE 0x002b | ||
408 | 407 | ||
409 | #define PCI_VENDOR_ID_TSENG 0x100c | 408 | #define PCI_VENDOR_ID_TSENG 0x100c |
410 | #define PCI_DEVICE_ID_TSENG_W32P_2 0x3202 | 409 | #define PCI_DEVICE_ID_TSENG_W32P_2 0x3202 |
@@ -1864,6 +1863,7 @@ | |||
1864 | #define PCI_DEVICE_ID_OXSEMI_16PCI95N 0x9511 | 1863 | #define PCI_DEVICE_ID_OXSEMI_16PCI95N 0x9511 |
1865 | #define PCI_DEVICE_ID_OXSEMI_16PCI954PP 0x9513 | 1864 | #define PCI_DEVICE_ID_OXSEMI_16PCI954PP 0x9513 |
1866 | #define PCI_DEVICE_ID_OXSEMI_16PCI952 0x9521 | 1865 | #define PCI_DEVICE_ID_OXSEMI_16PCI952 0x9521 |
1866 | #define PCI_DEVICE_ID_OXSEMI_16PCI952PP 0x9523 | ||
1867 | 1867 | ||
1868 | #define PCI_VENDOR_ID_SAMSUNG 0x144d | 1868 | #define PCI_VENDOR_ID_SAMSUNG 0x144d |
1869 | 1869 | ||
diff --git a/include/linux/profile.h b/include/linux/profile.h index acce53fd38b6..5670b340c4ef 100644 --- a/include/linux/profile.h +++ b/include/linux/profile.h | |||
@@ -6,10 +6,15 @@ | |||
6 | #include <linux/kernel.h> | 6 | #include <linux/kernel.h> |
7 | #include <linux/init.h> | 7 | #include <linux/init.h> |
8 | #include <linux/cpumask.h> | 8 | #include <linux/cpumask.h> |
9 | #include <linux/cache.h> | ||
10 | |||
9 | #include <asm/errno.h> | 11 | #include <asm/errno.h> |
10 | 12 | ||
13 | extern int prof_on __read_mostly; | ||
14 | |||
11 | #define CPU_PROFILING 1 | 15 | #define CPU_PROFILING 1 |
12 | #define SCHED_PROFILING 2 | 16 | #define SCHED_PROFILING 2 |
17 | #define SLEEP_PROFILING 3 | ||
13 | 18 | ||
14 | struct proc_dir_entry; | 19 | struct proc_dir_entry; |
15 | struct pt_regs; | 20 | struct pt_regs; |
@@ -18,7 +23,24 @@ struct notifier_block; | |||
18 | /* init basic kernel profiler */ | 23 | /* init basic kernel profiler */ |
19 | void __init profile_init(void); | 24 | void __init profile_init(void); |
20 | void profile_tick(int); | 25 | void profile_tick(int); |
21 | void profile_hit(int, void *); | 26 | |
27 | /* | ||
28 | * Add multiple profiler hits to a given address: | ||
29 | */ | ||
30 | void profile_hits(int, void *ip, unsigned int nr_hits); | ||
31 | |||
32 | /* | ||
33 | * Single profiler hit: | ||
34 | */ | ||
35 | static inline void profile_hit(int type, void *ip) | ||
36 | { | ||
37 | /* | ||
38 | * Speedup for the common (no profiling enabled) case: | ||
39 | */ | ||
40 | if (unlikely(prof_on == type)) | ||
41 | profile_hits(type, ip, 1); | ||
42 | } | ||
43 | |||
22 | #ifdef CONFIG_PROC_FS | 44 | #ifdef CONFIG_PROC_FS |
23 | void create_prof_cpu_mask(struct proc_dir_entry *); | 45 | void create_prof_cpu_mask(struct proc_dir_entry *); |
24 | #else | 46 | #else |
diff --git a/include/linux/quotaops.h b/include/linux/quotaops.h index 5110201a4159..90c23f690c0d 100644 --- a/include/linux/quotaops.h +++ b/include/linux/quotaops.h | |||
@@ -37,6 +37,9 @@ extern int dquot_release(struct dquot *dquot); | |||
37 | extern int dquot_commit_info(struct super_block *sb, int type); | 37 | extern int dquot_commit_info(struct super_block *sb, int type); |
38 | extern int dquot_mark_dquot_dirty(struct dquot *dquot); | 38 | extern int dquot_mark_dquot_dirty(struct dquot *dquot); |
39 | 39 | ||
40 | int remove_inode_dquot_ref(struct inode *inode, int type, | ||
41 | struct list_head *tofree_head); | ||
42 | |||
40 | extern int vfs_quota_on(struct super_block *sb, int type, int format_id, char *path); | 43 | extern int vfs_quota_on(struct super_block *sb, int type, int format_id, char *path); |
41 | extern int vfs_quota_on_mount(struct super_block *sb, char *qf_name, | 44 | extern int vfs_quota_on_mount(struct super_block *sb, char *qf_name, |
42 | int format_id, int type); | 45 | int format_id, int type); |
diff --git a/include/linux/radix-tree.h b/include/linux/radix-tree.h index cbfa11537421..0deb842541ac 100644 --- a/include/linux/radix-tree.h +++ b/include/linux/radix-tree.h | |||
@@ -1,6 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (C) 2001 Momchil Velikov | 2 | * Copyright (C) 2001 Momchil Velikov |
3 | * Portions Copyright (C) 2001 Christoph Hellwig | 3 | * Portions Copyright (C) 2001 Christoph Hellwig |
4 | * Copyright (C) 2006 Nick Piggin | ||
4 | * | 5 | * |
5 | * This program is free software; you can redistribute it and/or | 6 | * This program is free software; you can redistribute it and/or |
6 | * modify it under the terms of the GNU General Public License as | 7 | * modify it under the terms of the GNU General Public License as |
@@ -21,6 +22,35 @@ | |||
21 | 22 | ||
22 | #include <linux/preempt.h> | 23 | #include <linux/preempt.h> |
23 | #include <linux/types.h> | 24 | #include <linux/types.h> |
25 | #include <linux/kernel.h> | ||
26 | #include <linux/rcupdate.h> | ||
27 | |||
28 | /* | ||
29 | * A direct pointer (root->rnode pointing directly to a data item, | ||
30 | * rather than another radix_tree_node) is signalled by the low bit | ||
31 | * set in the root->rnode pointer. | ||
32 | * | ||
33 | * In this case root->height is also NULL, but the direct pointer tests are | ||
34 | * needed for RCU lookups when root->height is unreliable. | ||
35 | */ | ||
36 | #define RADIX_TREE_DIRECT_PTR 1 | ||
37 | |||
38 | static inline void *radix_tree_ptr_to_direct(void *ptr) | ||
39 | { | ||
40 | return (void *)((unsigned long)ptr | RADIX_TREE_DIRECT_PTR); | ||
41 | } | ||
42 | |||
43 | static inline void *radix_tree_direct_to_ptr(void *ptr) | ||
44 | { | ||
45 | return (void *)((unsigned long)ptr & ~RADIX_TREE_DIRECT_PTR); | ||
46 | } | ||
47 | |||
48 | static inline int radix_tree_is_direct_ptr(void *ptr) | ||
49 | { | ||
50 | return (int)((unsigned long)ptr & RADIX_TREE_DIRECT_PTR); | ||
51 | } | ||
52 | |||
53 | /*** radix-tree API starts here ***/ | ||
24 | 54 | ||
25 | #define RADIX_TREE_MAX_TAGS 2 | 55 | #define RADIX_TREE_MAX_TAGS 2 |
26 | 56 | ||
@@ -47,6 +77,77 @@ do { \ | |||
47 | (root)->rnode = NULL; \ | 77 | (root)->rnode = NULL; \ |
48 | } while (0) | 78 | } while (0) |
49 | 79 | ||
80 | /** | ||
81 | * Radix-tree synchronization | ||
82 | * | ||
83 | * The radix-tree API requires that users provide all synchronisation (with | ||
84 | * specific exceptions, noted below). | ||
85 | * | ||
86 | * Synchronization of access to the data items being stored in the tree, and | ||
87 | * management of their lifetimes must be completely managed by API users. | ||
88 | * | ||
89 | * For API usage, in general, | ||
90 | * - any function _modifying_ the the tree or tags (inserting or deleting | ||
91 | * items, setting or clearing tags must exclude other modifications, and | ||
92 | * exclude any functions reading the tree. | ||
93 | * - any function _reading_ the the tree or tags (looking up items or tags, | ||
94 | * gang lookups) must exclude modifications to the tree, but may occur | ||
95 | * concurrently with other readers. | ||
96 | * | ||
97 | * The notable exceptions to this rule are the following functions: | ||
98 | * radix_tree_lookup | ||
99 | * radix_tree_tag_get | ||
100 | * radix_tree_gang_lookup | ||
101 | * radix_tree_gang_lookup_tag | ||
102 | * radix_tree_tagged | ||
103 | * | ||
104 | * The first 4 functions are able to be called locklessly, using RCU. The | ||
105 | * caller must ensure calls to these functions are made within rcu_read_lock() | ||
106 | * regions. Other readers (lock-free or otherwise) and modifications may be | ||
107 | * running concurrently. | ||
108 | * | ||
109 | * It is still required that the caller manage the synchronization and lifetimes | ||
110 | * of the items. So if RCU lock-free lookups are used, typically this would mean | ||
111 | * that the items have their own locks, or are amenable to lock-free access; and | ||
112 | * that the items are freed by RCU (or only freed after having been deleted from | ||
113 | * the radix tree *and* a synchronize_rcu() grace period). | ||
114 | * | ||
115 | * (Note, rcu_assign_pointer and rcu_dereference are not needed to control | ||
116 | * access to data items when inserting into or looking up from the radix tree) | ||
117 | * | ||
118 | * radix_tree_tagged is able to be called without locking or RCU. | ||
119 | */ | ||
120 | |||
121 | /** | ||
122 | * radix_tree_deref_slot - dereference a slot | ||
123 | * @pslot: pointer to slot, returned by radix_tree_lookup_slot | ||
124 | * Returns: item that was stored in that slot with any direct pointer flag | ||
125 | * removed. | ||
126 | * | ||
127 | * For use with radix_tree_lookup_slot(). Caller must hold tree at least read | ||
128 | * locked across slot lookup and dereference. More likely, will be used with | ||
129 | * radix_tree_replace_slot(), as well, so caller will hold tree write locked. | ||
130 | */ | ||
131 | static inline void *radix_tree_deref_slot(void **pslot) | ||
132 | { | ||
133 | return radix_tree_direct_to_ptr(*pslot); | ||
134 | } | ||
135 | /** | ||
136 | * radix_tree_replace_slot - replace item in a slot | ||
137 | * @pslot: pointer to slot, returned by radix_tree_lookup_slot | ||
138 | * @item: new item to store in the slot. | ||
139 | * | ||
140 | * For use with radix_tree_lookup_slot(). Caller must hold tree write locked | ||
141 | * across slot lookup and replacement. | ||
142 | */ | ||
143 | static inline void radix_tree_replace_slot(void **pslot, void *item) | ||
144 | { | ||
145 | BUG_ON(radix_tree_is_direct_ptr(item)); | ||
146 | rcu_assign_pointer(*pslot, | ||
147 | (void *)((unsigned long)item | | ||
148 | ((unsigned long)*pslot & RADIX_TREE_DIRECT_PTR))); | ||
149 | } | ||
150 | |||
50 | int radix_tree_insert(struct radix_tree_root *, unsigned long, void *); | 151 | int radix_tree_insert(struct radix_tree_root *, unsigned long, void *); |
51 | void *radix_tree_lookup(struct radix_tree_root *, unsigned long); | 152 | void *radix_tree_lookup(struct radix_tree_root *, unsigned long); |
52 | void **radix_tree_lookup_slot(struct radix_tree_root *, unsigned long); | 153 | void **radix_tree_lookup_slot(struct radix_tree_root *, unsigned long); |
diff --git a/include/linux/raid/raid5.h b/include/linux/raid/raid5.h index f13299a15591..03636d7918fe 100644 --- a/include/linux/raid/raid5.h +++ b/include/linux/raid/raid5.h | |||
@@ -235,7 +235,7 @@ struct raid5_private_data { | |||
235 | */ | 235 | */ |
236 | int active_name; | 236 | int active_name; |
237 | char cache_name[2][20]; | 237 | char cache_name[2][20]; |
238 | kmem_cache_t *slab_cache; /* for allocating stripes */ | 238 | struct kmem_cache *slab_cache; /* for allocating stripes */ |
239 | 239 | ||
240 | int seq_flush, seq_write; | 240 | int seq_flush, seq_write; |
241 | int quiesce; | 241 | int quiesce; |
diff --git a/include/linux/reiserfs_fs.h b/include/linux/reiserfs_fs.h index 7bc6bfb86253..d0e4dce33ad5 100644 --- a/include/linux/reiserfs_fs.h +++ b/include/linux/reiserfs_fs.h | |||
@@ -739,7 +739,7 @@ struct block_head { | |||
739 | #define PUT_B_FREE_SPACE(p_s_bh,val) do { set_blkh_free_space(B_BLK_HEAD(p_s_bh),val); } while (0) | 739 | #define PUT_B_FREE_SPACE(p_s_bh,val) do { set_blkh_free_space(B_BLK_HEAD(p_s_bh),val); } while (0) |
740 | 740 | ||
741 | /* Get right delimiting key. -- little endian */ | 741 | /* Get right delimiting key. -- little endian */ |
742 | #define B_PRIGHT_DELIM_KEY(p_s_bh) (&(blk_right_delim_key(B_BLK_HEAD(p_s_bh)) | 742 | #define B_PRIGHT_DELIM_KEY(p_s_bh) (&(blk_right_delim_key(B_BLK_HEAD(p_s_bh)))) |
743 | 743 | ||
744 | /* Does the buffer contain a disk leaf. */ | 744 | /* Does the buffer contain a disk leaf. */ |
745 | #define B_IS_ITEMS_LEVEL(p_s_bh) (B_LEVEL(p_s_bh) == DISK_LEAF_NODE_LEVEL) | 745 | #define B_IS_ITEMS_LEVEL(p_s_bh) (B_LEVEL(p_s_bh) == DISK_LEAF_NODE_LEVEL) |
diff --git a/include/linux/reiserfs_fs_sb.h b/include/linux/reiserfs_fs_sb.h index 62a7169aed8b..3a28742d86f9 100644 --- a/include/linux/reiserfs_fs_sb.h +++ b/include/linux/reiserfs_fs_sb.h | |||
@@ -249,7 +249,8 @@ struct reiserfs_journal { | |||
249 | int j_errno; | 249 | int j_errno; |
250 | 250 | ||
251 | /* when flushing ordered buffers, throttle new ordered writers */ | 251 | /* when flushing ordered buffers, throttle new ordered writers */ |
252 | struct work_struct j_work; | 252 | struct delayed_work j_work; |
253 | struct super_block *j_work_sb; | ||
253 | atomic_t j_async_throttle; | 254 | atomic_t j_async_throttle; |
254 | }; | 255 | }; |
255 | 256 | ||
diff --git a/include/linux/relay.h b/include/linux/relay.h index 24accb483849..c6a48bfc8b14 100644 --- a/include/linux/relay.h +++ b/include/linux/relay.h | |||
@@ -38,7 +38,7 @@ struct rchan_buf | |||
38 | size_t subbufs_consumed; /* count of sub-buffers consumed */ | 38 | size_t subbufs_consumed; /* count of sub-buffers consumed */ |
39 | struct rchan *chan; /* associated channel */ | 39 | struct rchan *chan; /* associated channel */ |
40 | wait_queue_head_t read_wait; /* reader wait queue */ | 40 | wait_queue_head_t read_wait; /* reader wait queue */ |
41 | struct work_struct wake_readers; /* reader wake-up work struct */ | 41 | struct delayed_work wake_readers; /* reader wake-up work struct */ |
42 | struct dentry *dentry; /* channel file dentry */ | 42 | struct dentry *dentry; /* channel file dentry */ |
43 | struct kref kref; /* channel buffer refcount */ | 43 | struct kref kref; /* channel buffer refcount */ |
44 | struct page **page_array; /* array of current buffer pages */ | 44 | struct page **page_array; /* array of current buffer pages */ |
@@ -274,7 +274,7 @@ static inline void subbuf_start_reserve(struct rchan_buf *buf, | |||
274 | /* | 274 | /* |
275 | * exported relay file operations, kernel/relay.c | 275 | * exported relay file operations, kernel/relay.c |
276 | */ | 276 | */ |
277 | extern struct file_operations relay_file_operations; | 277 | extern const struct file_operations relay_file_operations; |
278 | 278 | ||
279 | #endif /* _LINUX_RELAY_H */ | 279 | #endif /* _LINUX_RELAY_H */ |
280 | 280 | ||
diff --git a/include/linux/rmap.h b/include/linux/rmap.h index db2c1df4fef9..36f850373d2c 100644 --- a/include/linux/rmap.h +++ b/include/linux/rmap.h | |||
@@ -30,11 +30,11 @@ struct anon_vma { | |||
30 | 30 | ||
31 | #ifdef CONFIG_MMU | 31 | #ifdef CONFIG_MMU |
32 | 32 | ||
33 | extern kmem_cache_t *anon_vma_cachep; | 33 | extern struct kmem_cache *anon_vma_cachep; |
34 | 34 | ||
35 | static inline struct anon_vma *anon_vma_alloc(void) | 35 | static inline struct anon_vma *anon_vma_alloc(void) |
36 | { | 36 | { |
37 | return kmem_cache_alloc(anon_vma_cachep, SLAB_KERNEL); | 37 | return kmem_cache_alloc(anon_vma_cachep, GFP_KERNEL); |
38 | } | 38 | } |
39 | 39 | ||
40 | static inline void anon_vma_free(struct anon_vma *anon_vma) | 40 | static inline void anon_vma_free(struct anon_vma *anon_vma) |
diff --git a/include/linux/rtmutex.h b/include/linux/rtmutex.h index 5d41dee82f80..b0090e9f7884 100644 --- a/include/linux/rtmutex.h +++ b/include/linux/rtmutex.h | |||
@@ -63,7 +63,7 @@ struct hrtimer_sleeper; | |||
63 | #endif | 63 | #endif |
64 | 64 | ||
65 | #define __RT_MUTEX_INITIALIZER(mutexname) \ | 65 | #define __RT_MUTEX_INITIALIZER(mutexname) \ |
66 | { .wait_lock = SPIN_LOCK_UNLOCKED \ | 66 | { .wait_lock = __SPIN_LOCK_UNLOCKED(mutexname.wait_lock) \ |
67 | , .wait_list = PLIST_HEAD_INIT(mutexname.wait_list, mutexname.wait_lock) \ | 67 | , .wait_list = PLIST_HEAD_INIT(mutexname.wait_list, mutexname.wait_lock) \ |
68 | , .owner = NULL \ | 68 | , .owner = NULL \ |
69 | __DEBUG_RT_MUTEX_INITIALIZER(mutexname)} | 69 | __DEBUG_RT_MUTEX_INITIALIZER(mutexname)} |
diff --git a/include/linux/rwsem-spinlock.h b/include/linux/rwsem-spinlock.h index ae1fcadd598e..813cee13da0d 100644 --- a/include/linux/rwsem-spinlock.h +++ b/include/linux/rwsem-spinlock.h | |||
@@ -44,7 +44,8 @@ struct rw_semaphore { | |||
44 | #endif | 44 | #endif |
45 | 45 | ||
46 | #define __RWSEM_INITIALIZER(name) \ | 46 | #define __RWSEM_INITIALIZER(name) \ |
47 | { 0, SPIN_LOCK_UNLOCKED, LIST_HEAD_INIT((name).wait_list) __RWSEM_DEP_MAP_INIT(name) } | 47 | { 0, __SPIN_LOCK_UNLOCKED(name.wait_lock), LIST_HEAD_INIT((name).wait_list) \ |
48 | __RWSEM_DEP_MAP_INIT(name) } | ||
48 | 49 | ||
49 | #define DECLARE_RWSEM(name) \ | 50 | #define DECLARE_RWSEM(name) \ |
50 | struct rw_semaphore name = __RWSEM_INITIALIZER(name) | 51 | struct rw_semaphore name = __RWSEM_INITIALIZER(name) |
diff --git a/include/linux/sched.h b/include/linux/sched.h index eafe4a7b8237..dede82c63445 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
@@ -194,7 +194,16 @@ extern void init_idle(struct task_struct *idle, int cpu); | |||
194 | 194 | ||
195 | extern cpumask_t nohz_cpu_mask; | 195 | extern cpumask_t nohz_cpu_mask; |
196 | 196 | ||
197 | extern void show_state(void); | 197 | /* |
198 | * Only dump TASK_* tasks. (-1 for all tasks) | ||
199 | */ | ||
200 | extern void show_state_filter(unsigned long state_filter); | ||
201 | |||
202 | static inline void show_state(void) | ||
203 | { | ||
204 | show_state_filter(-1); | ||
205 | } | ||
206 | |||
198 | extern void show_regs(struct pt_regs *); | 207 | extern void show_regs(struct pt_regs *); |
199 | 208 | ||
200 | /* | 209 | /* |
@@ -338,15 +347,23 @@ struct mm_struct { | |||
338 | 347 | ||
339 | unsigned long saved_auxv[AT_VECTOR_SIZE]; /* for /proc/PID/auxv */ | 348 | unsigned long saved_auxv[AT_VECTOR_SIZE]; /* for /proc/PID/auxv */ |
340 | 349 | ||
341 | unsigned dumpable:2; | ||
342 | cpumask_t cpu_vm_mask; | 350 | cpumask_t cpu_vm_mask; |
343 | 351 | ||
344 | /* Architecture-specific MM context */ | 352 | /* Architecture-specific MM context */ |
345 | mm_context_t context; | 353 | mm_context_t context; |
346 | 354 | ||
347 | /* Token based thrashing protection. */ | 355 | /* Swap token stuff */ |
348 | unsigned long swap_token_time; | 356 | /* |
349 | char recent_pagein; | 357 | * Last value of global fault stamp as seen by this process. |
358 | * In other words, this value gives an indication of how long | ||
359 | * it has been since this task got the token. | ||
360 | * Look at mm/thrash.c | ||
361 | */ | ||
362 | unsigned int faultstamp; | ||
363 | unsigned int token_priority; | ||
364 | unsigned int last_interval; | ||
365 | |||
366 | unsigned char dumpable:2; | ||
350 | 367 | ||
351 | /* coredumping support */ | 368 | /* coredumping support */ |
352 | int core_waiters; | 369 | int core_waiters; |
@@ -556,7 +573,7 @@ struct sched_info { | |||
556 | #endif /* defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) */ | 573 | #endif /* defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) */ |
557 | 574 | ||
558 | #ifdef CONFIG_SCHEDSTATS | 575 | #ifdef CONFIG_SCHEDSTATS |
559 | extern struct file_operations proc_schedstat_operations; | 576 | extern const struct file_operations proc_schedstat_operations; |
560 | #endif /* CONFIG_SCHEDSTATS */ | 577 | #endif /* CONFIG_SCHEDSTATS */ |
561 | 578 | ||
562 | #ifdef CONFIG_TASK_DELAY_ACCT | 579 | #ifdef CONFIG_TASK_DELAY_ACCT |
@@ -1288,7 +1305,6 @@ extern int kill_pgrp(struct pid *pid, int sig, int priv); | |||
1288 | extern int kill_pid(struct pid *pid, int sig, int priv); | 1305 | extern int kill_pid(struct pid *pid, int sig, int priv); |
1289 | extern int __kill_pg_info(int sig, struct siginfo *info, pid_t pgrp); | 1306 | extern int __kill_pg_info(int sig, struct siginfo *info, pid_t pgrp); |
1290 | extern int kill_pg_info(int, struct siginfo *, pid_t); | 1307 | extern int kill_pg_info(int, struct siginfo *, pid_t); |
1291 | extern int kill_proc_info(int, struct siginfo *, pid_t); | ||
1292 | extern void do_notify_parent(struct task_struct *, int); | 1308 | extern void do_notify_parent(struct task_struct *, int); |
1293 | extern void force_sig(int, struct task_struct *); | 1309 | extern void force_sig(int, struct task_struct *); |
1294 | extern void force_sig_specific(int, struct task_struct *); | 1310 | extern void force_sig_specific(int, struct task_struct *); |
@@ -1610,87 +1626,6 @@ extern int sched_create_sysfs_power_savings_entries(struct sysdev_class *cls); | |||
1610 | 1626 | ||
1611 | extern void normalize_rt_tasks(void); | 1627 | extern void normalize_rt_tasks(void); |
1612 | 1628 | ||
1613 | #ifdef CONFIG_PM | ||
1614 | /* | ||
1615 | * Check if a process has been frozen | ||
1616 | */ | ||
1617 | static inline int frozen(struct task_struct *p) | ||
1618 | { | ||
1619 | return p->flags & PF_FROZEN; | ||
1620 | } | ||
1621 | |||
1622 | /* | ||
1623 | * Check if there is a request to freeze a process | ||
1624 | */ | ||
1625 | static inline int freezing(struct task_struct *p) | ||
1626 | { | ||
1627 | return p->flags & PF_FREEZE; | ||
1628 | } | ||
1629 | |||
1630 | /* | ||
1631 | * Request that a process be frozen | ||
1632 | * FIXME: SMP problem. We may not modify other process' flags! | ||
1633 | */ | ||
1634 | static inline void freeze(struct task_struct *p) | ||
1635 | { | ||
1636 | p->flags |= PF_FREEZE; | ||
1637 | } | ||
1638 | |||
1639 | /* | ||
1640 | * Sometimes we may need to cancel the previous 'freeze' request | ||
1641 | */ | ||
1642 | static inline void do_not_freeze(struct task_struct *p) | ||
1643 | { | ||
1644 | p->flags &= ~PF_FREEZE; | ||
1645 | } | ||
1646 | |||
1647 | /* | ||
1648 | * Wake up a frozen process | ||
1649 | */ | ||
1650 | static inline int thaw_process(struct task_struct *p) | ||
1651 | { | ||
1652 | if (frozen(p)) { | ||
1653 | p->flags &= ~PF_FROZEN; | ||
1654 | wake_up_process(p); | ||
1655 | return 1; | ||
1656 | } | ||
1657 | return 0; | ||
1658 | } | ||
1659 | |||
1660 | /* | ||
1661 | * freezing is complete, mark process as frozen | ||
1662 | */ | ||
1663 | static inline void frozen_process(struct task_struct *p) | ||
1664 | { | ||
1665 | p->flags = (p->flags & ~PF_FREEZE) | PF_FROZEN; | ||
1666 | } | ||
1667 | |||
1668 | extern void refrigerator(void); | ||
1669 | extern int freeze_processes(void); | ||
1670 | extern void thaw_processes(void); | ||
1671 | |||
1672 | static inline int try_to_freeze(void) | ||
1673 | { | ||
1674 | if (freezing(current)) { | ||
1675 | refrigerator(); | ||
1676 | return 1; | ||
1677 | } else | ||
1678 | return 0; | ||
1679 | } | ||
1680 | #else | ||
1681 | static inline int frozen(struct task_struct *p) { return 0; } | ||
1682 | static inline int freezing(struct task_struct *p) { return 0; } | ||
1683 | static inline void freeze(struct task_struct *p) { BUG(); } | ||
1684 | static inline int thaw_process(struct task_struct *p) { return 1; } | ||
1685 | static inline void frozen_process(struct task_struct *p) { BUG(); } | ||
1686 | |||
1687 | static inline void refrigerator(void) {} | ||
1688 | static inline int freeze_processes(void) { BUG(); return 0; } | ||
1689 | static inline void thaw_processes(void) {} | ||
1690 | |||
1691 | static inline int try_to_freeze(void) { return 0; } | ||
1692 | |||
1693 | #endif /* CONFIG_PM */ | ||
1694 | #endif /* __KERNEL__ */ | 1629 | #endif /* __KERNEL__ */ |
1695 | 1630 | ||
1696 | #endif | 1631 | #endif |
diff --git a/include/linux/seq_file.h b/include/linux/seq_file.h index b95f6eb7254c..3e3cccbb1cac 100644 --- a/include/linux/seq_file.h +++ b/include/linux/seq_file.h | |||
@@ -20,7 +20,7 @@ struct seq_file { | |||
20 | loff_t index; | 20 | loff_t index; |
21 | loff_t version; | 21 | loff_t version; |
22 | struct mutex lock; | 22 | struct mutex lock; |
23 | struct seq_operations *op; | 23 | const struct seq_operations *op; |
24 | void *private; | 24 | void *private; |
25 | }; | 25 | }; |
26 | 26 | ||
@@ -31,7 +31,7 @@ struct seq_operations { | |||
31 | int (*show) (struct seq_file *m, void *v); | 31 | int (*show) (struct seq_file *m, void *v); |
32 | }; | 32 | }; |
33 | 33 | ||
34 | int seq_open(struct file *, struct seq_operations *); | 34 | int seq_open(struct file *, const struct seq_operations *); |
35 | ssize_t seq_read(struct file *, char __user *, size_t, loff_t *); | 35 | ssize_t seq_read(struct file *, char __user *, size_t, loff_t *); |
36 | loff_t seq_lseek(struct file *, loff_t, int); | 36 | loff_t seq_lseek(struct file *, loff_t, int); |
37 | int seq_release(struct inode *, struct file *); | 37 | int seq_release(struct inode *, struct file *); |
diff --git a/include/linux/serial_8250.h b/include/linux/serial_8250.h index 8e9681413726..71310d80c09a 100644 --- a/include/linux/serial_8250.h +++ b/include/linux/serial_8250.h | |||
@@ -41,6 +41,7 @@ enum { | |||
41 | PLAT8250_DEV_FOURPORT, | 41 | PLAT8250_DEV_FOURPORT, |
42 | PLAT8250_DEV_ACCENT, | 42 | PLAT8250_DEV_ACCENT, |
43 | PLAT8250_DEV_BOCA, | 43 | PLAT8250_DEV_BOCA, |
44 | PLAT8250_DEV_EXAR_ST16C554, | ||
44 | PLAT8250_DEV_HUB6, | 45 | PLAT8250_DEV_HUB6, |
45 | PLAT8250_DEV_MCA, | 46 | PLAT8250_DEV_MCA, |
46 | PLAT8250_DEV_AU1X00, | 47 | PLAT8250_DEV_AU1X00, |
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h index 463ab953b092..827672136646 100644 --- a/include/linux/serial_core.h +++ b/include/linux/serial_core.h | |||
@@ -132,6 +132,8 @@ | |||
132 | 132 | ||
133 | #define PORT_S3C2412 73 | 133 | #define PORT_S3C2412 73 |
134 | 134 | ||
135 | /* Xilinx uartlite */ | ||
136 | #define PORT_UARTLITE 74 | ||
135 | 137 | ||
136 | #ifdef __KERNEL__ | 138 | #ifdef __KERNEL__ |
137 | 139 | ||
diff --git a/include/linux/signal.h b/include/linux/signal.h index 117135e33d67..14749056dd63 100644 --- a/include/linux/signal.h +++ b/include/linux/signal.h | |||
@@ -241,6 +241,8 @@ extern int sigprocmask(int, sigset_t *, sigset_t *); | |||
241 | struct pt_regs; | 241 | struct pt_regs; |
242 | extern int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka, struct pt_regs *regs, void *cookie); | 242 | extern int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka, struct pt_regs *regs, void *cookie); |
243 | 243 | ||
244 | extern struct kmem_cache *sighand_cachep; | ||
245 | |||
244 | #endif /* __KERNEL__ */ | 246 | #endif /* __KERNEL__ */ |
245 | 247 | ||
246 | #endif /* _LINUX_SIGNAL_H */ | 248 | #endif /* _LINUX_SIGNAL_H */ |
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index a05a5f7c0b73..4ff3940210d8 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
@@ -332,20 +332,20 @@ struct sk_buff { | |||
332 | extern void kfree_skb(struct sk_buff *skb); | 332 | extern void kfree_skb(struct sk_buff *skb); |
333 | extern void __kfree_skb(struct sk_buff *skb); | 333 | extern void __kfree_skb(struct sk_buff *skb); |
334 | extern struct sk_buff *__alloc_skb(unsigned int size, | 334 | extern struct sk_buff *__alloc_skb(unsigned int size, |
335 | gfp_t priority, int fclone); | 335 | gfp_t priority, int fclone, int node); |
336 | static inline struct sk_buff *alloc_skb(unsigned int size, | 336 | static inline struct sk_buff *alloc_skb(unsigned int size, |
337 | gfp_t priority) | 337 | gfp_t priority) |
338 | { | 338 | { |
339 | return __alloc_skb(size, priority, 0); | 339 | return __alloc_skb(size, priority, 0, -1); |
340 | } | 340 | } |
341 | 341 | ||
342 | static inline struct sk_buff *alloc_skb_fclone(unsigned int size, | 342 | static inline struct sk_buff *alloc_skb_fclone(unsigned int size, |
343 | gfp_t priority) | 343 | gfp_t priority) |
344 | { | 344 | { |
345 | return __alloc_skb(size, priority, 1); | 345 | return __alloc_skb(size, priority, 1, -1); |
346 | } | 346 | } |
347 | 347 | ||
348 | extern struct sk_buff *alloc_skb_from_cache(kmem_cache_t *cp, | 348 | extern struct sk_buff *alloc_skb_from_cache(struct kmem_cache *cp, |
349 | unsigned int size, | 349 | unsigned int size, |
350 | gfp_t priority); | 350 | gfp_t priority); |
351 | extern void kfree_skbmem(struct sk_buff *skb); | 351 | extern void kfree_skbmem(struct sk_buff *skb); |
diff --git a/include/linux/slab.h b/include/linux/slab.h index c4947b8a2c03..2271886744f8 100644 --- a/include/linux/slab.h +++ b/include/linux/slab.h | |||
@@ -7,27 +7,17 @@ | |||
7 | #ifndef _LINUX_SLAB_H | 7 | #ifndef _LINUX_SLAB_H |
8 | #define _LINUX_SLAB_H | 8 | #define _LINUX_SLAB_H |
9 | 9 | ||
10 | #if defined(__KERNEL__) | 10 | #ifdef __KERNEL__ |
11 | 11 | ||
12 | typedef struct kmem_cache kmem_cache_t; | 12 | #include <linux/gfp.h> |
13 | #include <linux/init.h> | ||
14 | #include <linux/types.h> | ||
15 | #include <asm/page.h> /* kmalloc_sizes.h needs PAGE_SIZE */ | ||
16 | #include <asm/cache.h> /* kmalloc_sizes.h needs L1_CACHE_BYTES */ | ||
17 | #include <linux/compiler.h> | ||
13 | 18 | ||
14 | #include <linux/gfp.h> | 19 | /* kmem_cache_t exists for legacy reasons and is not used by code in mm */ |
15 | #include <linux/init.h> | 20 | typedef struct kmem_cache kmem_cache_t __deprecated; |
16 | #include <linux/types.h> | ||
17 | #include <asm/page.h> /* kmalloc_sizes.h needs PAGE_SIZE */ | ||
18 | #include <asm/cache.h> /* kmalloc_sizes.h needs L1_CACHE_BYTES */ | ||
19 | |||
20 | /* flags for kmem_cache_alloc() */ | ||
21 | #define SLAB_NOFS GFP_NOFS | ||
22 | #define SLAB_NOIO GFP_NOIO | ||
23 | #define SLAB_ATOMIC GFP_ATOMIC | ||
24 | #define SLAB_USER GFP_USER | ||
25 | #define SLAB_KERNEL GFP_KERNEL | ||
26 | #define SLAB_DMA GFP_DMA | ||
27 | |||
28 | #define SLAB_LEVEL_MASK GFP_LEVEL_MASK | ||
29 | |||
30 | #define SLAB_NO_GROW __GFP_NO_GROW /* don't grow a cache */ | ||
31 | 21 | ||
32 | /* flags to pass to kmem_cache_create(). | 22 | /* flags to pass to kmem_cache_create(). |
33 | * The first 3 are only valid when the allocator as been build | 23 | * The first 3 are only valid when the allocator as been build |
@@ -57,22 +47,23 @@ typedef struct kmem_cache kmem_cache_t; | |||
57 | /* prototypes */ | 47 | /* prototypes */ |
58 | extern void __init kmem_cache_init(void); | 48 | extern void __init kmem_cache_init(void); |
59 | 49 | ||
60 | extern kmem_cache_t *kmem_cache_create(const char *, size_t, size_t, unsigned long, | 50 | extern struct kmem_cache *kmem_cache_create(const char *, size_t, size_t, |
61 | void (*)(void *, kmem_cache_t *, unsigned long), | 51 | unsigned long, |
62 | void (*)(void *, kmem_cache_t *, unsigned long)); | 52 | void (*)(void *, struct kmem_cache *, unsigned long), |
63 | extern void kmem_cache_destroy(kmem_cache_t *); | 53 | void (*)(void *, struct kmem_cache *, unsigned long)); |
64 | extern int kmem_cache_shrink(kmem_cache_t *); | 54 | extern void kmem_cache_destroy(struct kmem_cache *); |
65 | extern void *kmem_cache_alloc(kmem_cache_t *, gfp_t); | 55 | extern int kmem_cache_shrink(struct kmem_cache *); |
56 | extern void *kmem_cache_alloc(struct kmem_cache *, gfp_t); | ||
66 | extern void *kmem_cache_zalloc(struct kmem_cache *, gfp_t); | 57 | extern void *kmem_cache_zalloc(struct kmem_cache *, gfp_t); |
67 | extern void kmem_cache_free(kmem_cache_t *, void *); | 58 | extern void kmem_cache_free(struct kmem_cache *, void *); |
68 | extern unsigned int kmem_cache_size(kmem_cache_t *); | 59 | extern unsigned int kmem_cache_size(struct kmem_cache *); |
69 | extern const char *kmem_cache_name(kmem_cache_t *); | 60 | extern const char *kmem_cache_name(struct kmem_cache *); |
70 | 61 | ||
71 | /* Size description struct for general caches. */ | 62 | /* Size description struct for general caches. */ |
72 | struct cache_sizes { | 63 | struct cache_sizes { |
73 | size_t cs_size; | 64 | size_t cs_size; |
74 | kmem_cache_t *cs_cachep; | 65 | struct kmem_cache *cs_cachep; |
75 | kmem_cache_t *cs_dmacachep; | 66 | struct kmem_cache *cs_dmacachep; |
76 | }; | 67 | }; |
77 | extern struct cache_sizes malloc_sizes[]; | 68 | extern struct cache_sizes malloc_sizes[]; |
78 | 69 | ||
@@ -211,7 +202,7 @@ extern unsigned int ksize(const void *); | |||
211 | extern int slab_is_available(void); | 202 | extern int slab_is_available(void); |
212 | 203 | ||
213 | #ifdef CONFIG_NUMA | 204 | #ifdef CONFIG_NUMA |
214 | extern void *kmem_cache_alloc_node(kmem_cache_t *, gfp_t flags, int node); | 205 | extern void *kmem_cache_alloc_node(struct kmem_cache *, gfp_t flags, int node); |
215 | extern void *__kmalloc_node(size_t size, gfp_t flags, int node); | 206 | extern void *__kmalloc_node(size_t size, gfp_t flags, int node); |
216 | 207 | ||
217 | static inline void *kmalloc_node(size_t size, gfp_t flags, int node) | 208 | static inline void *kmalloc_node(size_t size, gfp_t flags, int node) |
@@ -236,8 +227,27 @@ found: | |||
236 | } | 227 | } |
237 | return __kmalloc_node(size, flags, node); | 228 | return __kmalloc_node(size, flags, node); |
238 | } | 229 | } |
230 | |||
231 | /* | ||
232 | * kmalloc_node_track_caller is a special version of kmalloc_node that | ||
233 | * records the calling function of the routine calling it for slab leak | ||
234 | * tracking instead of just the calling function (confusing, eh?). | ||
235 | * It's useful when the call to kmalloc_node comes from a widely-used | ||
236 | * standard allocator where we care about the real place the memory | ||
237 | * allocation request comes from. | ||
238 | */ | ||
239 | #ifndef CONFIG_DEBUG_SLAB | ||
240 | #define kmalloc_node_track_caller(size, flags, node) \ | ||
241 | __kmalloc_node(size, flags, node) | ||
239 | #else | 242 | #else |
240 | static inline void *kmem_cache_alloc_node(kmem_cache_t *cachep, gfp_t flags, int node) | 243 | extern void *__kmalloc_node_track_caller(size_t, gfp_t, int, void *); |
244 | #define kmalloc_node_track_caller(size, flags, node) \ | ||
245 | __kmalloc_node_track_caller(size, flags, node, \ | ||
246 | __builtin_return_address(0)) | ||
247 | #endif | ||
248 | #else /* CONFIG_NUMA */ | ||
249 | static inline void *kmem_cache_alloc_node(struct kmem_cache *cachep, | ||
250 | gfp_t flags, int node) | ||
241 | { | 251 | { |
242 | return kmem_cache_alloc(cachep, flags); | 252 | return kmem_cache_alloc(cachep, flags); |
243 | } | 253 | } |
@@ -245,10 +255,13 @@ static inline void *kmalloc_node(size_t size, gfp_t flags, int node) | |||
245 | { | 255 | { |
246 | return kmalloc(size, flags); | 256 | return kmalloc(size, flags); |
247 | } | 257 | } |
258 | |||
259 | #define kmalloc_node_track_caller(size, flags, node) \ | ||
260 | kmalloc_track_caller(size, flags) | ||
248 | #endif | 261 | #endif |
249 | 262 | ||
250 | extern int FASTCALL(kmem_cache_reap(int)); | 263 | extern int FASTCALL(kmem_cache_reap(int)); |
251 | extern int FASTCALL(kmem_ptr_validate(kmem_cache_t *cachep, void *ptr)); | 264 | extern int FASTCALL(kmem_ptr_validate(struct kmem_cache *cachep, void *ptr)); |
252 | 265 | ||
253 | #else /* CONFIG_SLOB */ | 266 | #else /* CONFIG_SLOB */ |
254 | 267 | ||
@@ -283,16 +296,9 @@ static inline void *kcalloc(size_t n, size_t size, gfp_t flags) | |||
283 | #define kzalloc(s, f) __kzalloc(s, f) | 296 | #define kzalloc(s, f) __kzalloc(s, f) |
284 | #define kmalloc_track_caller kmalloc | 297 | #define kmalloc_track_caller kmalloc |
285 | 298 | ||
286 | #endif /* CONFIG_SLOB */ | 299 | #define kmalloc_node_track_caller kmalloc_node |
287 | 300 | ||
288 | /* System wide caches */ | 301 | #endif /* CONFIG_SLOB */ |
289 | extern kmem_cache_t *vm_area_cachep; | ||
290 | extern kmem_cache_t *names_cachep; | ||
291 | extern kmem_cache_t *files_cachep; | ||
292 | extern kmem_cache_t *filp_cachep; | ||
293 | extern kmem_cache_t *fs_cachep; | ||
294 | extern kmem_cache_t *sighand_cachep; | ||
295 | extern kmem_cache_t *bio_cachep; | ||
296 | 302 | ||
297 | #endif /* __KERNEL__ */ | 303 | #endif /* __KERNEL__ */ |
298 | 304 | ||
diff --git a/include/linux/smp.h b/include/linux/smp.h index 51649987f691..7ba23ec8211b 100644 --- a/include/linux/smp.h +++ b/include/linux/smp.h | |||
@@ -99,6 +99,13 @@ static inline int up_smp_call_function(void) | |||
99 | static inline void smp_send_reschedule(int cpu) { } | 99 | static inline void smp_send_reschedule(int cpu) { } |
100 | #define num_booting_cpus() 1 | 100 | #define num_booting_cpus() 1 |
101 | #define smp_prepare_boot_cpu() do {} while (0) | 101 | #define smp_prepare_boot_cpu() do {} while (0) |
102 | static inline int smp_call_function_single(int cpuid, void (*func) (void *info), | ||
103 | void *info, int retry, int wait) | ||
104 | { | ||
105 | /* Disable interrupts here? */ | ||
106 | func(info); | ||
107 | return 0; | ||
108 | } | ||
102 | 109 | ||
103 | #endif /* !SMP */ | 110 | #endif /* !SMP */ |
104 | 111 | ||
diff --git a/include/linux/spinlock.h b/include/linux/spinlock.h index 8451052ca66f..94b767d64275 100644 --- a/include/linux/spinlock.h +++ b/include/linux/spinlock.h | |||
@@ -52,6 +52,7 @@ | |||
52 | #include <linux/thread_info.h> | 52 | #include <linux/thread_info.h> |
53 | #include <linux/kernel.h> | 53 | #include <linux/kernel.h> |
54 | #include <linux/stringify.h> | 54 | #include <linux/stringify.h> |
55 | #include <linux/bottom_half.h> | ||
55 | 56 | ||
56 | #include <asm/system.h> | 57 | #include <asm/system.h> |
57 | 58 | ||
diff --git a/include/linux/sunrpc/rpc_pipe_fs.h b/include/linux/sunrpc/rpc_pipe_fs.h index a2eb9b4a9de3..4a68125b6de6 100644 --- a/include/linux/sunrpc/rpc_pipe_fs.h +++ b/include/linux/sunrpc/rpc_pipe_fs.h | |||
@@ -30,7 +30,7 @@ struct rpc_inode { | |||
30 | #define RPC_PIPE_WAIT_FOR_OPEN 1 | 30 | #define RPC_PIPE_WAIT_FOR_OPEN 1 |
31 | int flags; | 31 | int flags; |
32 | struct rpc_pipe_ops *ops; | 32 | struct rpc_pipe_ops *ops; |
33 | struct work_struct queue_timeout; | 33 | struct delayed_work queue_timeout; |
34 | }; | 34 | }; |
35 | 35 | ||
36 | static inline struct rpc_inode * | 36 | static inline struct rpc_inode * |
diff --git a/include/linux/sunrpc/sched.h b/include/linux/sunrpc/sched.h index f399c138f79d..0746c3b16f3a 100644 --- a/include/linux/sunrpc/sched.h +++ b/include/linux/sunrpc/sched.h | |||
@@ -222,7 +222,7 @@ struct rpc_wait_queue { | |||
222 | 222 | ||
223 | #ifndef RPC_DEBUG | 223 | #ifndef RPC_DEBUG |
224 | # define RPC_WAITQ_INIT(var,qname) { \ | 224 | # define RPC_WAITQ_INIT(var,qname) { \ |
225 | .lock = SPIN_LOCK_UNLOCKED, \ | 225 | .lock = __SPIN_LOCK_UNLOCKED(var.lock), \ |
226 | .tasks = { \ | 226 | .tasks = { \ |
227 | [0] = LIST_HEAD_INIT(var.tasks[0]), \ | 227 | [0] = LIST_HEAD_INIT(var.tasks[0]), \ |
228 | [1] = LIST_HEAD_INIT(var.tasks[1]), \ | 228 | [1] = LIST_HEAD_INIT(var.tasks[1]), \ |
@@ -231,7 +231,7 @@ struct rpc_wait_queue { | |||
231 | } | 231 | } |
232 | #else | 232 | #else |
233 | # define RPC_WAITQ_INIT(var,qname) { \ | 233 | # define RPC_WAITQ_INIT(var,qname) { \ |
234 | .lock = SPIN_LOCK_UNLOCKED, \ | 234 | .lock = __SPIN_LOCK_UNLOCKED(var.lock), \ |
235 | .tasks = { \ | 235 | .tasks = { \ |
236 | [0] = LIST_HEAD_INIT(var.tasks[0]), \ | 236 | [0] = LIST_HEAD_INIT(var.tasks[0]), \ |
237 | [1] = LIST_HEAD_INIT(var.tasks[1]), \ | 237 | [1] = LIST_HEAD_INIT(var.tasks[1]), \ |
diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h index 60394fbc4c70..3e04c1512fc4 100644 --- a/include/linux/sunrpc/xprt.h +++ b/include/linux/sunrpc/xprt.h | |||
@@ -177,7 +177,7 @@ struct rpc_xprt { | |||
177 | unsigned long connect_timeout, | 177 | unsigned long connect_timeout, |
178 | bind_timeout, | 178 | bind_timeout, |
179 | reestablish_timeout; | 179 | reestablish_timeout; |
180 | struct work_struct connect_worker; | 180 | struct delayed_work connect_worker; |
181 | unsigned short port; | 181 | unsigned short port; |
182 | 182 | ||
183 | /* | 183 | /* |
diff --git a/include/linux/suspend.h b/include/linux/suspend.h index b1237f16ecde..bf99bd49f8ef 100644 --- a/include/linux/suspend.h +++ b/include/linux/suspend.h | |||
@@ -9,10 +9,13 @@ | |||
9 | #include <linux/init.h> | 9 | #include <linux/init.h> |
10 | #include <linux/pm.h> | 10 | #include <linux/pm.h> |
11 | 11 | ||
12 | /* page backup entry */ | 12 | /* struct pbe is used for creating lists of pages that should be restored |
13 | * atomically during the resume from disk, because the page frames they have | ||
14 | * occupied before the suspend are in use. | ||
15 | */ | ||
13 | struct pbe { | 16 | struct pbe { |
14 | unsigned long address; /* address of the copy */ | 17 | void *address; /* address of the copy */ |
15 | unsigned long orig_address; /* original address of page */ | 18 | void *orig_address; /* original address of a page */ |
16 | struct pbe *next; | 19 | struct pbe *next; |
17 | }; | 20 | }; |
18 | 21 | ||
diff --git a/include/linux/swap.h b/include/linux/swap.h index e7c36ba2a2db..add51cebc8d9 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h | |||
@@ -218,8 +218,6 @@ extern void swap_unplug_io_fn(struct backing_dev_info *, struct page *); | |||
218 | /* linux/mm/page_io.c */ | 218 | /* linux/mm/page_io.c */ |
219 | extern int swap_readpage(struct file *, struct page *); | 219 | extern int swap_readpage(struct file *, struct page *); |
220 | extern int swap_writepage(struct page *page, struct writeback_control *wbc); | 220 | extern int swap_writepage(struct page *page, struct writeback_control *wbc); |
221 | extern int rw_swap_page_sync(int rw, swp_entry_t entry, struct page *page, | ||
222 | struct bio **bio_chain); | ||
223 | extern int end_swap_bio_read(struct bio *bio, unsigned int bytes_done, int err); | 221 | extern int end_swap_bio_read(struct bio *bio, unsigned int bytes_done, int err); |
224 | 222 | ||
225 | /* linux/mm/swap_state.c */ | 223 | /* linux/mm/swap_state.c */ |
@@ -247,9 +245,10 @@ extern int swap_duplicate(swp_entry_t); | |||
247 | extern int valid_swaphandles(swp_entry_t, unsigned long *); | 245 | extern int valid_swaphandles(swp_entry_t, unsigned long *); |
248 | extern void swap_free(swp_entry_t); | 246 | extern void swap_free(swp_entry_t); |
249 | extern void free_swap_and_cache(swp_entry_t); | 247 | extern void free_swap_and_cache(swp_entry_t); |
250 | extern int swap_type_of(dev_t); | 248 | extern int swap_type_of(dev_t, sector_t); |
251 | extern unsigned int count_swap_pages(int, int); | 249 | extern unsigned int count_swap_pages(int, int); |
252 | extern sector_t map_swap_page(struct swap_info_struct *, pgoff_t); | 250 | extern sector_t map_swap_page(struct swap_info_struct *, pgoff_t); |
251 | extern sector_t swapdev_block(int, pgoff_t); | ||
253 | extern struct swap_info_struct *get_swap_info_struct(unsigned); | 252 | extern struct swap_info_struct *get_swap_info_struct(unsigned); |
254 | extern int can_share_swap_page(struct page *); | 253 | extern int can_share_swap_page(struct page *); |
255 | extern int remove_exclusive_swap_page(struct page *); | 254 | extern int remove_exclusive_swap_page(struct page *); |
@@ -259,7 +258,6 @@ extern spinlock_t swap_lock; | |||
259 | 258 | ||
260 | /* linux/mm/thrash.c */ | 259 | /* linux/mm/thrash.c */ |
261 | extern struct mm_struct * swap_token_mm; | 260 | extern struct mm_struct * swap_token_mm; |
262 | extern unsigned long swap_token_default_timeout; | ||
263 | extern void grab_swap_token(void); | 261 | extern void grab_swap_token(void); |
264 | extern void __put_swap_token(struct mm_struct *); | 262 | extern void __put_swap_token(struct mm_struct *); |
265 | 263 | ||
diff --git a/include/linux/taskstats_kern.h b/include/linux/taskstats_kern.h index 6562a2050a25..7e9680f4afdd 100644 --- a/include/linux/taskstats_kern.h +++ b/include/linux/taskstats_kern.h | |||
@@ -12,64 +12,27 @@ | |||
12 | #include <net/genetlink.h> | 12 | #include <net/genetlink.h> |
13 | 13 | ||
14 | #ifdef CONFIG_TASKSTATS | 14 | #ifdef CONFIG_TASKSTATS |
15 | extern kmem_cache_t *taskstats_cache; | 15 | extern struct kmem_cache *taskstats_cache; |
16 | extern struct mutex taskstats_exit_mutex; | 16 | extern struct mutex taskstats_exit_mutex; |
17 | 17 | ||
18 | static inline void taskstats_exit_free(struct taskstats *tidstats) | ||
19 | { | ||
20 | if (tidstats) | ||
21 | kmem_cache_free(taskstats_cache, tidstats); | ||
22 | } | ||
23 | |||
24 | static inline void taskstats_tgid_init(struct signal_struct *sig) | 18 | static inline void taskstats_tgid_init(struct signal_struct *sig) |
25 | { | 19 | { |
26 | sig->stats = NULL; | 20 | sig->stats = NULL; |
27 | } | 21 | } |
28 | 22 | ||
29 | static inline void taskstats_tgid_alloc(struct task_struct *tsk) | ||
30 | { | ||
31 | struct signal_struct *sig = tsk->signal; | ||
32 | struct taskstats *stats; | ||
33 | |||
34 | if (sig->stats != NULL) | ||
35 | return; | ||
36 | |||
37 | /* No problem if kmem_cache_zalloc() fails */ | ||
38 | stats = kmem_cache_zalloc(taskstats_cache, SLAB_KERNEL); | ||
39 | |||
40 | spin_lock_irq(&tsk->sighand->siglock); | ||
41 | if (!sig->stats) { | ||
42 | sig->stats = stats; | ||
43 | stats = NULL; | ||
44 | } | ||
45 | spin_unlock_irq(&tsk->sighand->siglock); | ||
46 | |||
47 | if (stats) | ||
48 | kmem_cache_free(taskstats_cache, stats); | ||
49 | } | ||
50 | |||
51 | static inline void taskstats_tgid_free(struct signal_struct *sig) | 23 | static inline void taskstats_tgid_free(struct signal_struct *sig) |
52 | { | 24 | { |
53 | if (sig->stats) | 25 | if (sig->stats) |
54 | kmem_cache_free(taskstats_cache, sig->stats); | 26 | kmem_cache_free(taskstats_cache, sig->stats); |
55 | } | 27 | } |
56 | 28 | ||
57 | extern void taskstats_exit_alloc(struct taskstats **, unsigned int *); | 29 | extern void taskstats_exit(struct task_struct *, int group_dead); |
58 | extern void taskstats_exit_send(struct task_struct *, struct taskstats *, int, unsigned int); | ||
59 | extern void taskstats_init_early(void); | 30 | extern void taskstats_init_early(void); |
60 | #else | 31 | #else |
61 | static inline void taskstats_exit_alloc(struct taskstats **ptidstats, unsigned int *mycpu) | 32 | static inline void taskstats_exit(struct task_struct *tsk, int group_dead) |
62 | {} | ||
63 | static inline void taskstats_exit_free(struct taskstats *ptidstats) | ||
64 | {} | ||
65 | static inline void taskstats_exit_send(struct task_struct *tsk, | ||
66 | struct taskstats *tidstats, | ||
67 | int group_dead, unsigned int cpu) | ||
68 | {} | 33 | {} |
69 | static inline void taskstats_tgid_init(struct signal_struct *sig) | 34 | static inline void taskstats_tgid_init(struct signal_struct *sig) |
70 | {} | 35 | {} |
71 | static inline void taskstats_tgid_alloc(struct task_struct *tsk) | ||
72 | {} | ||
73 | static inline void taskstats_tgid_free(struct signal_struct *sig) | 36 | static inline void taskstats_tgid_free(struct signal_struct *sig) |
74 | {} | 37 | {} |
75 | static inline void taskstats_init_early(void) | 38 | static inline void taskstats_init_early(void) |
diff --git a/include/linux/tty.h b/include/linux/tty.h index 65321f911c1e..f717f0898238 100644 --- a/include/linux/tty.h +++ b/include/linux/tty.h | |||
@@ -53,7 +53,7 @@ struct tty_buffer { | |||
53 | }; | 53 | }; |
54 | 54 | ||
55 | struct tty_bufhead { | 55 | struct tty_bufhead { |
56 | struct work_struct work; | 56 | struct delayed_work work; |
57 | struct semaphore pty_sem; | 57 | struct semaphore pty_sem; |
58 | spinlock_t lock; | 58 | spinlock_t lock; |
59 | struct tty_buffer *head; /* Queue head */ | 59 | struct tty_buffer *head; /* Queue head */ |
diff --git a/include/linux/uaccess.h b/include/linux/uaccess.h index 65a68da8bd5d..975c963e5789 100644 --- a/include/linux/uaccess.h +++ b/include/linux/uaccess.h | |||
@@ -1,8 +1,43 @@ | |||
1 | #ifndef __LINUX_UACCESS_H__ | 1 | #ifndef __LINUX_UACCESS_H__ |
2 | #define __LINUX_UACCESS_H__ | 2 | #define __LINUX_UACCESS_H__ |
3 | 3 | ||
4 | #include <linux/preempt.h> | ||
4 | #include <asm/uaccess.h> | 5 | #include <asm/uaccess.h> |
5 | 6 | ||
7 | /* | ||
8 | * These routines enable/disable the pagefault handler in that | ||
9 | * it will not take any locks and go straight to the fixup table. | ||
10 | * | ||
11 | * They have great resemblance to the preempt_disable/enable calls | ||
12 | * and in fact they are identical; this is because currently there is | ||
13 | * no other way to make the pagefault handlers do this. So we do | ||
14 | * disable preemption but we don't necessarily care about that. | ||
15 | */ | ||
16 | static inline void pagefault_disable(void) | ||
17 | { | ||
18 | inc_preempt_count(); | ||
19 | /* | ||
20 | * make sure to have issued the store before a pagefault | ||
21 | * can hit. | ||
22 | */ | ||
23 | barrier(); | ||
24 | } | ||
25 | |||
26 | static inline void pagefault_enable(void) | ||
27 | { | ||
28 | /* | ||
29 | * make sure to issue those last loads/stores before enabling | ||
30 | * the pagefault handler again. | ||
31 | */ | ||
32 | barrier(); | ||
33 | dec_preempt_count(); | ||
34 | /* | ||
35 | * make sure we do.. | ||
36 | */ | ||
37 | barrier(); | ||
38 | preempt_check_resched(); | ||
39 | } | ||
40 | |||
6 | #ifndef ARCH_HAS_NOCACHE_UACCESS | 41 | #ifndef ARCH_HAS_NOCACHE_UACCESS |
7 | 42 | ||
8 | static inline unsigned long __copy_from_user_inatomic_nocache(void *to, | 43 | static inline unsigned long __copy_from_user_inatomic_nocache(void *to, |
@@ -30,14 +65,22 @@ static inline unsigned long __copy_from_user_nocache(void *to, | |||
30 | * do_page_fault() doesn't attempt to take mmap_sem. This makes | 65 | * do_page_fault() doesn't attempt to take mmap_sem. This makes |
31 | * probe_kernel_address() suitable for use within regions where the caller | 66 | * probe_kernel_address() suitable for use within regions where the caller |
32 | * already holds mmap_sem, or other locks which nest inside mmap_sem. | 67 | * already holds mmap_sem, or other locks which nest inside mmap_sem. |
68 | * This must be a macro because __get_user() needs to know the types of the | ||
69 | * args. | ||
70 | * | ||
71 | * We don't include enough header files to be able to do the set_fs(). We | ||
72 | * require that the probe_kernel_address() caller will do that. | ||
33 | */ | 73 | */ |
34 | #define probe_kernel_address(addr, retval) \ | 74 | #define probe_kernel_address(addr, retval) \ |
35 | ({ \ | 75 | ({ \ |
36 | long ret; \ | 76 | long ret; \ |
77 | mm_segment_t old_fs = get_fs(); \ | ||
37 | \ | 78 | \ |
38 | inc_preempt_count(); \ | 79 | set_fs(KERNEL_DS); \ |
39 | ret = __get_user(retval, (__force typeof(*addr) __user *)addr);\ | 80 | pagefault_disable(); \ |
40 | dec_preempt_count(); \ | 81 | ret = __get_user(retval, (__force typeof(retval) __user *)(addr)); \ |
82 | pagefault_enable(); \ | ||
83 | set_fs(old_fs); \ | ||
41 | ret; \ | 84 | ret; \ |
42 | }) | 85 | }) |
43 | 86 | ||
diff --git a/include/linux/usb.h b/include/linux/usb.h index 0cd73edeef13..aab5b1b72021 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h | |||
@@ -388,7 +388,7 @@ struct usb_device { | |||
388 | 388 | ||
389 | int pm_usage_cnt; /* usage counter for autosuspend */ | 389 | int pm_usage_cnt; /* usage counter for autosuspend */ |
390 | #ifdef CONFIG_PM | 390 | #ifdef CONFIG_PM |
391 | struct work_struct autosuspend; /* for delayed autosuspends */ | 391 | struct delayed_work autosuspend; /* for delayed autosuspends */ |
392 | struct mutex pm_mutex; /* protects PM operations */ | 392 | struct mutex pm_mutex; /* protects PM operations */ |
393 | 393 | ||
394 | unsigned auto_pm:1; /* autosuspend/resume in progress */ | 394 | unsigned auto_pm:1; /* autosuspend/resume in progress */ |
diff --git a/include/linux/workqueue.h b/include/linux/workqueue.h index 9bca3539a1e5..f0cb1df7b475 100644 --- a/include/linux/workqueue.h +++ b/include/linux/workqueue.h | |||
@@ -11,12 +11,23 @@ | |||
11 | 11 | ||
12 | struct workqueue_struct; | 12 | struct workqueue_struct; |
13 | 13 | ||
14 | struct work_struct; | ||
15 | typedef void (*work_func_t)(struct work_struct *work); | ||
16 | |||
14 | struct work_struct { | 17 | struct work_struct { |
15 | unsigned long pending; | 18 | /* the first word is the work queue pointer and the flags rolled into |
19 | * one */ | ||
20 | unsigned long management; | ||
21 | #define WORK_STRUCT_PENDING 0 /* T if work item pending execution */ | ||
22 | #define WORK_STRUCT_NOAUTOREL 1 /* F if work item automatically released on exec */ | ||
23 | #define WORK_STRUCT_FLAG_MASK (3UL) | ||
24 | #define WORK_STRUCT_WQ_DATA_MASK (~WORK_STRUCT_FLAG_MASK) | ||
16 | struct list_head entry; | 25 | struct list_head entry; |
17 | void (*func)(void *); | 26 | work_func_t func; |
18 | void *data; | 27 | }; |
19 | void *wq_data; | 28 | |
29 | struct delayed_work { | ||
30 | struct work_struct work; | ||
20 | struct timer_list timer; | 31 | struct timer_list timer; |
21 | }; | 32 | }; |
22 | 33 | ||
@@ -24,77 +35,159 @@ struct execute_work { | |||
24 | struct work_struct work; | 35 | struct work_struct work; |
25 | }; | 36 | }; |
26 | 37 | ||
27 | #define __WORK_INITIALIZER(n, f, d) { \ | 38 | #define __WORK_INITIALIZER(n, f) { \ |
39 | .management = 0, \ | ||
40 | .entry = { &(n).entry, &(n).entry }, \ | ||
41 | .func = (f), \ | ||
42 | } | ||
43 | |||
44 | #define __WORK_INITIALIZER_NAR(n, f) { \ | ||
45 | .management = (1 << WORK_STRUCT_NOAUTOREL), \ | ||
28 | .entry = { &(n).entry, &(n).entry }, \ | 46 | .entry = { &(n).entry, &(n).entry }, \ |
29 | .func = (f), \ | 47 | .func = (f), \ |
30 | .data = (d), \ | 48 | } |
49 | |||
50 | #define __DELAYED_WORK_INITIALIZER(n, f) { \ | ||
51 | .work = __WORK_INITIALIZER((n).work, (f)), \ | ||
52 | .timer = TIMER_INITIALIZER(NULL, 0, 0), \ | ||
53 | } | ||
54 | |||
55 | #define __DELAYED_WORK_INITIALIZER_NAR(n, f) { \ | ||
56 | .work = __WORK_INITIALIZER_NAR((n).work, (f)), \ | ||
31 | .timer = TIMER_INITIALIZER(NULL, 0, 0), \ | 57 | .timer = TIMER_INITIALIZER(NULL, 0, 0), \ |
32 | } | 58 | } |
33 | 59 | ||
34 | #define DECLARE_WORK(n, f, d) \ | 60 | #define DECLARE_WORK(n, f) \ |
35 | struct work_struct n = __WORK_INITIALIZER(n, f, d) | 61 | struct work_struct n = __WORK_INITIALIZER(n, f) |
62 | |||
63 | #define DECLARE_WORK_NAR(n, f) \ | ||
64 | struct work_struct n = __WORK_INITIALIZER_NAR(n, f) | ||
65 | |||
66 | #define DECLARE_DELAYED_WORK(n, f) \ | ||
67 | struct delayed_work n = __DELAYED_WORK_INITIALIZER(n, f) | ||
68 | |||
69 | #define DECLARE_DELAYED_WORK_NAR(n, f) \ | ||
70 | struct dwork_struct n = __DELAYED_WORK_INITIALIZER_NAR(n, f) | ||
36 | 71 | ||
37 | /* | 72 | /* |
38 | * initialize a work-struct's func and data pointers: | 73 | * initialize a work item's function pointer |
39 | */ | 74 | */ |
40 | #define PREPARE_WORK(_work, _func, _data) \ | 75 | #define PREPARE_WORK(_work, _func) \ |
41 | do { \ | 76 | do { \ |
42 | (_work)->func = _func; \ | 77 | (_work)->func = (_func); \ |
43 | (_work)->data = _data; \ | ||
44 | } while (0) | 78 | } while (0) |
45 | 79 | ||
80 | #define PREPARE_DELAYED_WORK(_work, _func) \ | ||
81 | PREPARE_WORK(&(_work)->work, (_func)) | ||
82 | |||
46 | /* | 83 | /* |
47 | * initialize all of a work-struct: | 84 | * initialize all of a work item in one go |
48 | */ | 85 | */ |
49 | #define INIT_WORK(_work, _func, _data) \ | 86 | #define INIT_WORK(_work, _func) \ |
50 | do { \ | 87 | do { \ |
88 | (_work)->management = 0; \ | ||
51 | INIT_LIST_HEAD(&(_work)->entry); \ | 89 | INIT_LIST_HEAD(&(_work)->entry); \ |
52 | (_work)->pending = 0; \ | 90 | PREPARE_WORK((_work), (_func)); \ |
53 | PREPARE_WORK((_work), (_func), (_data)); \ | 91 | } while (0) |
92 | |||
93 | #define INIT_WORK_NAR(_work, _func) \ | ||
94 | do { \ | ||
95 | (_work)->management = (1 << WORK_STRUCT_NOAUTOREL); \ | ||
96 | INIT_LIST_HEAD(&(_work)->entry); \ | ||
97 | PREPARE_WORK((_work), (_func)); \ | ||
98 | } while (0) | ||
99 | |||
100 | #define INIT_DELAYED_WORK(_work, _func) \ | ||
101 | do { \ | ||
102 | INIT_WORK(&(_work)->work, (_func)); \ | ||
103 | init_timer(&(_work)->timer); \ | ||
104 | } while (0) | ||
105 | |||
106 | #define INIT_DELAYED_WORK_NAR(_work, _func) \ | ||
107 | do { \ | ||
108 | INIT_WORK_NAR(&(_work)->work, (_func)); \ | ||
54 | init_timer(&(_work)->timer); \ | 109 | init_timer(&(_work)->timer); \ |
55 | } while (0) | 110 | } while (0) |
56 | 111 | ||
112 | /** | ||
113 | * work_pending - Find out whether a work item is currently pending | ||
114 | * @work: The work item in question | ||
115 | */ | ||
116 | #define work_pending(work) \ | ||
117 | test_bit(WORK_STRUCT_PENDING, &(work)->management) | ||
118 | |||
119 | /** | ||
120 | * delayed_work_pending - Find out whether a delayable work item is currently | ||
121 | * pending | ||
122 | * @work: The work item in question | ||
123 | */ | ||
124 | #define delayed_work_pending(work) \ | ||
125 | test_bit(WORK_STRUCT_PENDING, &(work)->work.management) | ||
126 | |||
127 | /** | ||
128 | * work_release - Release a work item under execution | ||
129 | * @work: The work item to release | ||
130 | * | ||
131 | * This is used to release a work item that has been initialised with automatic | ||
132 | * release mode disabled (WORK_STRUCT_NOAUTOREL is set). This gives the work | ||
133 | * function the opportunity to grab auxiliary data from the container of the | ||
134 | * work_struct before clearing the pending bit as the work_struct may be | ||
135 | * subject to deallocation the moment the pending bit is cleared. | ||
136 | * | ||
137 | * In such a case, this should be called in the work function after it has | ||
138 | * fetched any data it may require from the containter of the work_struct. | ||
139 | * After this function has been called, the work_struct may be scheduled for | ||
140 | * further execution or it may be deallocated unless other precautions are | ||
141 | * taken. | ||
142 | * | ||
143 | * This should also be used to release a delayed work item. | ||
144 | */ | ||
145 | #define work_release(work) \ | ||
146 | clear_bit(WORK_STRUCT_PENDING, &(work)->management) | ||
147 | |||
148 | |||
57 | extern struct workqueue_struct *__create_workqueue(const char *name, | 149 | extern struct workqueue_struct *__create_workqueue(const char *name, |
58 | int singlethread); | 150 | int singlethread, |
59 | #define create_workqueue(name) __create_workqueue((name), 0) | 151 | int freezeable); |
60 | #define create_singlethread_workqueue(name) __create_workqueue((name), 1) | 152 | #define create_workqueue(name) __create_workqueue((name), 0, 0) |
153 | #define create_freezeable_workqueue(name) __create_workqueue((name), 0, 1) | ||
154 | #define create_singlethread_workqueue(name) __create_workqueue((name), 1, 0) | ||
61 | 155 | ||
62 | extern void destroy_workqueue(struct workqueue_struct *wq); | 156 | extern void destroy_workqueue(struct workqueue_struct *wq); |
63 | 157 | ||
64 | extern int FASTCALL(queue_work(struct workqueue_struct *wq, struct work_struct *work)); | 158 | extern int FASTCALL(queue_work(struct workqueue_struct *wq, struct work_struct *work)); |
65 | extern int FASTCALL(queue_delayed_work(struct workqueue_struct *wq, struct work_struct *work, unsigned long delay)); | 159 | extern int FASTCALL(queue_delayed_work(struct workqueue_struct *wq, struct delayed_work *work, unsigned long delay)); |
66 | extern int queue_delayed_work_on(int cpu, struct workqueue_struct *wq, | 160 | extern int queue_delayed_work_on(int cpu, struct workqueue_struct *wq, |
67 | struct work_struct *work, unsigned long delay); | 161 | struct delayed_work *work, unsigned long delay); |
68 | extern void FASTCALL(flush_workqueue(struct workqueue_struct *wq)); | 162 | extern void FASTCALL(flush_workqueue(struct workqueue_struct *wq)); |
69 | 163 | ||
70 | extern int FASTCALL(schedule_work(struct work_struct *work)); | 164 | extern int FASTCALL(schedule_work(struct work_struct *work)); |
71 | extern int FASTCALL(schedule_delayed_work(struct work_struct *work, unsigned long delay)); | 165 | extern int FASTCALL(schedule_delayed_work(struct delayed_work *work, unsigned long delay)); |
72 | 166 | ||
73 | extern int schedule_delayed_work_on(int cpu, struct work_struct *work, unsigned long delay); | 167 | extern int schedule_delayed_work_on(int cpu, struct delayed_work *work, unsigned long delay); |
74 | extern int schedule_on_each_cpu(void (*func)(void *info), void *info); | 168 | extern int schedule_on_each_cpu(work_func_t func); |
75 | extern void flush_scheduled_work(void); | 169 | extern void flush_scheduled_work(void); |
76 | extern int current_is_keventd(void); | 170 | extern int current_is_keventd(void); |
77 | extern int keventd_up(void); | 171 | extern int keventd_up(void); |
78 | 172 | ||
79 | extern void init_workqueues(void); | 173 | extern void init_workqueues(void); |
80 | void cancel_rearming_delayed_work(struct work_struct *work); | 174 | void cancel_rearming_delayed_work(struct delayed_work *work); |
81 | void cancel_rearming_delayed_workqueue(struct workqueue_struct *, | 175 | void cancel_rearming_delayed_workqueue(struct workqueue_struct *, |
82 | struct work_struct *); | 176 | struct delayed_work *); |
83 | int execute_in_process_context(void (*fn)(void *), void *, | 177 | int execute_in_process_context(work_func_t fn, struct execute_work *); |
84 | struct execute_work *); | ||
85 | 178 | ||
86 | /* | 179 | /* |
87 | * Kill off a pending schedule_delayed_work(). Note that the work callback | 180 | * Kill off a pending schedule_delayed_work(). Note that the work callback |
88 | * function may still be running on return from cancel_delayed_work(). Run | 181 | * function may still be running on return from cancel_delayed_work(). Run |
89 | * flush_scheduled_work() to wait on it. | 182 | * flush_scheduled_work() to wait on it. |
90 | */ | 183 | */ |
91 | static inline int cancel_delayed_work(struct work_struct *work) | 184 | static inline int cancel_delayed_work(struct delayed_work *work) |
92 | { | 185 | { |
93 | int ret; | 186 | int ret; |
94 | 187 | ||
95 | ret = del_timer_sync(&work->timer); | 188 | ret = del_timer_sync(&work->timer); |
96 | if (ret) | 189 | if (ret) |
97 | clear_bit(0, &work->pending); | 190 | clear_bit(WORK_STRUCT_PENDING, &work->work.management); |
98 | return ret; | 191 | return ret; |
99 | } | 192 | } |
100 | 193 | ||
diff --git a/include/net/dst.h b/include/net/dst.h index e156e38e4ac3..62b7e7598e9a 100644 --- a/include/net/dst.h +++ b/include/net/dst.h | |||
@@ -98,7 +98,7 @@ struct dst_ops | |||
98 | int entry_size; | 98 | int entry_size; |
99 | 99 | ||
100 | atomic_t entries; | 100 | atomic_t entries; |
101 | kmem_cache_t *kmem_cachep; | 101 | struct kmem_cache *kmem_cachep; |
102 | }; | 102 | }; |
103 | 103 | ||
104 | #ifdef __KERNEL__ | 104 | #ifdef __KERNEL__ |
diff --git a/include/net/ieee80211softmac.h b/include/net/ieee80211softmac.h index 617b672b1132..89119277553d 100644 --- a/include/net/ieee80211softmac.h +++ b/include/net/ieee80211softmac.h | |||
@@ -108,8 +108,8 @@ struct ieee80211softmac_assoc_info { | |||
108 | /* Scan retries remaining */ | 108 | /* Scan retries remaining */ |
109 | int scan_retry; | 109 | int scan_retry; |
110 | 110 | ||
111 | struct work_struct work; | 111 | struct delayed_work work; |
112 | struct work_struct timeout; | 112 | struct delayed_work timeout; |
113 | }; | 113 | }; |
114 | 114 | ||
115 | struct ieee80211softmac_bss_info { | 115 | struct ieee80211softmac_bss_info { |
diff --git a/include/net/inet_hashtables.h b/include/net/inet_hashtables.h index a9eb2eaf094e..34cc76e3ddb4 100644 --- a/include/net/inet_hashtables.h +++ b/include/net/inet_hashtables.h | |||
@@ -125,7 +125,7 @@ struct inet_hashinfo { | |||
125 | rwlock_t lhash_lock ____cacheline_aligned; | 125 | rwlock_t lhash_lock ____cacheline_aligned; |
126 | atomic_t lhash_users; | 126 | atomic_t lhash_users; |
127 | wait_queue_head_t lhash_wait; | 127 | wait_queue_head_t lhash_wait; |
128 | kmem_cache_t *bind_bucket_cachep; | 128 | struct kmem_cache *bind_bucket_cachep; |
129 | }; | 129 | }; |
130 | 130 | ||
131 | static inline struct inet_ehash_bucket *inet_ehash_bucket( | 131 | static inline struct inet_ehash_bucket *inet_ehash_bucket( |
@@ -136,10 +136,10 @@ static inline struct inet_ehash_bucket *inet_ehash_bucket( | |||
136 | } | 136 | } |
137 | 137 | ||
138 | extern struct inet_bind_bucket * | 138 | extern struct inet_bind_bucket * |
139 | inet_bind_bucket_create(kmem_cache_t *cachep, | 139 | inet_bind_bucket_create(struct kmem_cache *cachep, |
140 | struct inet_bind_hashbucket *head, | 140 | struct inet_bind_hashbucket *head, |
141 | const unsigned short snum); | 141 | const unsigned short snum); |
142 | extern void inet_bind_bucket_destroy(kmem_cache_t *cachep, | 142 | extern void inet_bind_bucket_destroy(struct kmem_cache *cachep, |
143 | struct inet_bind_bucket *tb); | 143 | struct inet_bind_bucket *tb); |
144 | 144 | ||
145 | static inline int inet_bhashfn(const __u16 lport, const int bhash_size) | 145 | static inline int inet_bhashfn(const __u16 lport, const int bhash_size) |
diff --git a/include/net/inet_timewait_sock.h b/include/net/inet_timewait_sock.h index 5f48748fe017..f7be1ac73601 100644 --- a/include/net/inet_timewait_sock.h +++ b/include/net/inet_timewait_sock.h | |||
@@ -84,7 +84,7 @@ struct inet_timewait_death_row { | |||
84 | }; | 84 | }; |
85 | 85 | ||
86 | extern void inet_twdr_hangman(unsigned long data); | 86 | extern void inet_twdr_hangman(unsigned long data); |
87 | extern void inet_twdr_twkill_work(void *data); | 87 | extern void inet_twdr_twkill_work(struct work_struct *work); |
88 | extern void inet_twdr_twcal_tick(unsigned long data); | 88 | extern void inet_twdr_twcal_tick(unsigned long data); |
89 | 89 | ||
90 | #if (BITS_PER_LONG == 64) | 90 | #if (BITS_PER_LONG == 64) |
diff --git a/include/net/neighbour.h b/include/net/neighbour.h index c8aacbd2e333..23967031ddb7 100644 --- a/include/net/neighbour.h +++ b/include/net/neighbour.h | |||
@@ -160,7 +160,7 @@ struct neigh_table | |||
160 | atomic_t entries; | 160 | atomic_t entries; |
161 | rwlock_t lock; | 161 | rwlock_t lock; |
162 | unsigned long last_rand; | 162 | unsigned long last_rand; |
163 | kmem_cache_t *kmem_cachep; | 163 | struct kmem_cache *kmem_cachep; |
164 | struct neigh_statistics *stats; | 164 | struct neigh_statistics *stats; |
165 | struct neighbour **hash_buckets; | 165 | struct neighbour **hash_buckets; |
166 | unsigned int hash_mask; | 166 | unsigned int hash_mask; |
diff --git a/include/net/netfilter/nf_conntrack_expect.h b/include/net/netfilter/nf_conntrack_expect.h index cef3136e22a3..41bcc9eb4206 100644 --- a/include/net/netfilter/nf_conntrack_expect.h +++ b/include/net/netfilter/nf_conntrack_expect.h | |||
@@ -7,7 +7,7 @@ | |||
7 | #include <net/netfilter/nf_conntrack.h> | 7 | #include <net/netfilter/nf_conntrack.h> |
8 | 8 | ||
9 | extern struct list_head nf_conntrack_expect_list; | 9 | extern struct list_head nf_conntrack_expect_list; |
10 | extern kmem_cache_t *nf_conntrack_expect_cachep; | 10 | extern struct kmem_cache *nf_conntrack_expect_cachep; |
11 | extern struct file_operations exp_file_ops; | 11 | extern struct file_operations exp_file_ops; |
12 | 12 | ||
13 | struct nf_conntrack_expect | 13 | struct nf_conntrack_expect |
diff --git a/include/net/request_sock.h b/include/net/request_sock.h index e37baaf2080b..7aed02ce2b65 100644 --- a/include/net/request_sock.h +++ b/include/net/request_sock.h | |||
@@ -29,7 +29,7 @@ struct proto; | |||
29 | struct request_sock_ops { | 29 | struct request_sock_ops { |
30 | int family; | 30 | int family; |
31 | int obj_size; | 31 | int obj_size; |
32 | kmem_cache_t *slab; | 32 | struct kmem_cache *slab; |
33 | int (*rtx_syn_ack)(struct sock *sk, | 33 | int (*rtx_syn_ack)(struct sock *sk, |
34 | struct request_sock *req, | 34 | struct request_sock *req, |
35 | struct dst_entry *dst); | 35 | struct dst_entry *dst); |
@@ -60,7 +60,7 @@ struct request_sock { | |||
60 | 60 | ||
61 | static inline struct request_sock *reqsk_alloc(const struct request_sock_ops *ops) | 61 | static inline struct request_sock *reqsk_alloc(const struct request_sock_ops *ops) |
62 | { | 62 | { |
63 | struct request_sock *req = kmem_cache_alloc(ops->slab, SLAB_ATOMIC); | 63 | struct request_sock *req = kmem_cache_alloc(ops->slab, GFP_ATOMIC); |
64 | 64 | ||
65 | if (req != NULL) | 65 | if (req != NULL) |
66 | req->rsk_ops = ops; | 66 | req->rsk_ops = ops; |
diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h index f8cbe40f52c0..c089f93ba591 100644 --- a/include/net/sctp/structs.h +++ b/include/net/sctp/structs.h | |||
@@ -1030,7 +1030,7 @@ void sctp_inq_init(struct sctp_inq *); | |||
1030 | void sctp_inq_free(struct sctp_inq *); | 1030 | void sctp_inq_free(struct sctp_inq *); |
1031 | void sctp_inq_push(struct sctp_inq *, struct sctp_chunk *packet); | 1031 | void sctp_inq_push(struct sctp_inq *, struct sctp_chunk *packet); |
1032 | struct sctp_chunk *sctp_inq_pop(struct sctp_inq *); | 1032 | struct sctp_chunk *sctp_inq_pop(struct sctp_inq *); |
1033 | void sctp_inq_set_th_handler(struct sctp_inq *, void (*)(void *), void *); | 1033 | void sctp_inq_set_th_handler(struct sctp_inq *, work_func_t); |
1034 | 1034 | ||
1035 | /* This is the structure we use to hold outbound chunks. You push | 1035 | /* This is the structure we use to hold outbound chunks. You push |
1036 | * chunks in and they automatically pop out the other end as bundled | 1036 | * chunks in and they automatically pop out the other end as bundled |
diff --git a/include/net/sock.h b/include/net/sock.h index fe3a33fad03f..03684e702d13 100644 --- a/include/net/sock.h +++ b/include/net/sock.h | |||
@@ -571,7 +571,7 @@ struct proto { | |||
571 | int *sysctl_rmem; | 571 | int *sysctl_rmem; |
572 | int max_header; | 572 | int max_header; |
573 | 573 | ||
574 | kmem_cache_t *slab; | 574 | struct kmem_cache *slab; |
575 | unsigned int obj_size; | 575 | unsigned int obj_size; |
576 | 576 | ||
577 | atomic_t *orphan_count; | 577 | atomic_t *orphan_count; |
@@ -746,6 +746,25 @@ static inline int sk_stream_wmem_schedule(struct sock *sk, int size) | |||
746 | */ | 746 | */ |
747 | #define sock_owned_by_user(sk) ((sk)->sk_lock.owner) | 747 | #define sock_owned_by_user(sk) ((sk)->sk_lock.owner) |
748 | 748 | ||
749 | /* | ||
750 | * Macro so as to not evaluate some arguments when | ||
751 | * lockdep is not enabled. | ||
752 | * | ||
753 | * Mark both the sk_lock and the sk_lock.slock as a | ||
754 | * per-address-family lock class. | ||
755 | */ | ||
756 | #define sock_lock_init_class_and_name(sk, sname, skey, name, key) \ | ||
757 | do { \ | ||
758 | sk->sk_lock.owner = NULL; \ | ||
759 | init_waitqueue_head(&sk->sk_lock.wq); \ | ||
760 | spin_lock_init(&(sk)->sk_lock.slock); \ | ||
761 | debug_check_no_locks_freed((void *)&(sk)->sk_lock, \ | ||
762 | sizeof((sk)->sk_lock)); \ | ||
763 | lockdep_set_class_and_name(&(sk)->sk_lock.slock, \ | ||
764 | (skey), (sname)); \ | ||
765 | lockdep_init_map(&(sk)->sk_lock.dep_map, (name), (key), 0); \ | ||
766 | } while (0) | ||
767 | |||
749 | extern void FASTCALL(lock_sock_nested(struct sock *sk, int subclass)); | 768 | extern void FASTCALL(lock_sock_nested(struct sock *sk, int subclass)); |
750 | 769 | ||
751 | static inline void lock_sock(struct sock *sk) | 770 | static inline void lock_sock(struct sock *sk) |
diff --git a/include/net/timewait_sock.h b/include/net/timewait_sock.h index d7a306ea560d..1e1ee3253fd8 100644 --- a/include/net/timewait_sock.h +++ b/include/net/timewait_sock.h | |||
@@ -15,7 +15,7 @@ | |||
15 | #include <net/sock.h> | 15 | #include <net/sock.h> |
16 | 16 | ||
17 | struct timewait_sock_ops { | 17 | struct timewait_sock_ops { |
18 | kmem_cache_t *twsk_slab; | 18 | struct kmem_cache *twsk_slab; |
19 | unsigned int twsk_obj_size; | 19 | unsigned int twsk_obj_size; |
20 | int (*twsk_unique)(struct sock *sk, | 20 | int (*twsk_unique)(struct sock *sk, |
21 | struct sock *sktw, void *twp); | 21 | struct sock *sktw, void *twp); |
diff --git a/include/scsi/libsas.h b/include/scsi/libsas.h index 44b2f82a6eec..0c775fceb675 100644 --- a/include/scsi/libsas.h +++ b/include/scsi/libsas.h | |||
@@ -201,9 +201,14 @@ struct domain_device { | |||
201 | void *lldd_dev; | 201 | void *lldd_dev; |
202 | }; | 202 | }; |
203 | 203 | ||
204 | struct sas_discovery_event { | ||
205 | struct work_struct work; | ||
206 | struct asd_sas_port *port; | ||
207 | }; | ||
208 | |||
204 | struct sas_discovery { | 209 | struct sas_discovery { |
205 | spinlock_t disc_event_lock; | 210 | spinlock_t disc_event_lock; |
206 | struct work_struct disc_work[DISC_NUM_EVENTS]; | 211 | struct sas_discovery_event disc_work[DISC_NUM_EVENTS]; |
207 | unsigned long pending; | 212 | unsigned long pending; |
208 | u8 fanout_sas_addr[8]; | 213 | u8 fanout_sas_addr[8]; |
209 | u8 eeds_a[8]; | 214 | u8 eeds_a[8]; |
@@ -249,14 +254,19 @@ struct asd_sas_port { | |||
249 | void *lldd_port; /* not touched by the sas class code */ | 254 | void *lldd_port; /* not touched by the sas class code */ |
250 | }; | 255 | }; |
251 | 256 | ||
257 | struct asd_sas_event { | ||
258 | struct work_struct work; | ||
259 | struct asd_sas_phy *phy; | ||
260 | }; | ||
261 | |||
252 | /* The phy pretty much is controlled by the LLDD. | 262 | /* The phy pretty much is controlled by the LLDD. |
253 | * The class only reads those fields. | 263 | * The class only reads those fields. |
254 | */ | 264 | */ |
255 | struct asd_sas_phy { | 265 | struct asd_sas_phy { |
256 | /* private: */ | 266 | /* private: */ |
257 | /* protected by ha->event_lock */ | 267 | /* protected by ha->event_lock */ |
258 | struct work_struct port_events[PORT_NUM_EVENTS]; | 268 | struct asd_sas_event port_events[PORT_NUM_EVENTS]; |
259 | struct work_struct phy_events[PHY_NUM_EVENTS]; | 269 | struct asd_sas_event phy_events[PHY_NUM_EVENTS]; |
260 | 270 | ||
261 | unsigned long port_events_pending; | 271 | unsigned long port_events_pending; |
262 | unsigned long phy_events_pending; | 272 | unsigned long phy_events_pending; |
@@ -308,10 +318,15 @@ struct scsi_core { | |||
308 | int queue_thread_kill; | 318 | int queue_thread_kill; |
309 | }; | 319 | }; |
310 | 320 | ||
321 | struct sas_ha_event { | ||
322 | struct work_struct work; | ||
323 | struct sas_ha_struct *ha; | ||
324 | }; | ||
325 | |||
311 | struct sas_ha_struct { | 326 | struct sas_ha_struct { |
312 | /* private: */ | 327 | /* private: */ |
313 | spinlock_t event_lock; | 328 | spinlock_t event_lock; |
314 | struct work_struct ha_events[HA_NUM_EVENTS]; | 329 | struct sas_ha_event ha_events[HA_NUM_EVENTS]; |
315 | unsigned long pending; | 330 | unsigned long pending; |
316 | 331 | ||
317 | struct scsi_core core; | 332 | struct scsi_core core; |
@@ -542,7 +557,7 @@ struct sas_task { | |||
542 | 557 | ||
543 | static inline struct sas_task *sas_alloc_task(gfp_t flags) | 558 | static inline struct sas_task *sas_alloc_task(gfp_t flags) |
544 | { | 559 | { |
545 | extern kmem_cache_t *sas_task_cache; | 560 | extern struct kmem_cache *sas_task_cache; |
546 | struct sas_task *task = kmem_cache_alloc(sas_task_cache, flags); | 561 | struct sas_task *task = kmem_cache_alloc(sas_task_cache, flags); |
547 | 562 | ||
548 | if (task) { | 563 | if (task) { |
@@ -560,7 +575,7 @@ static inline struct sas_task *sas_alloc_task(gfp_t flags) | |||
560 | static inline void sas_free_task(struct sas_task *task) | 575 | static inline void sas_free_task(struct sas_task *task) |
561 | { | 576 | { |
562 | if (task) { | 577 | if (task) { |
563 | extern kmem_cache_t *sas_task_cache; | 578 | extern struct kmem_cache *sas_task_cache; |
564 | BUG_ON(!list_empty(&task->list)); | 579 | BUG_ON(!list_empty(&task->list)); |
565 | kmem_cache_free(sas_task_cache, task); | 580 | kmem_cache_free(sas_task_cache, task); |
566 | } | 581 | } |
@@ -631,6 +646,6 @@ void sas_unregister_dev(struct domain_device *); | |||
631 | 646 | ||
632 | void sas_init_dev(struct domain_device *); | 647 | void sas_init_dev(struct domain_device *); |
633 | 648 | ||
634 | void sas_task_abort(struct sas_task *task); | 649 | void sas_task_abort(struct work_struct *); |
635 | 650 | ||
636 | #endif /* _SASLIB_H_ */ | 651 | #endif /* _SASLIB_H_ */ |
diff --git a/include/scsi/scsi_transport_fc.h b/include/scsi/scsi_transport_fc.h index fd352323378b..798f7c7ee426 100644 --- a/include/scsi/scsi_transport_fc.h +++ b/include/scsi/scsi_transport_fc.h | |||
@@ -206,9 +206,9 @@ struct fc_rport { /* aka fc_starget_attrs */ | |||
206 | u8 flags; | 206 | u8 flags; |
207 | struct list_head peers; | 207 | struct list_head peers; |
208 | struct device dev; | 208 | struct device dev; |
209 | struct work_struct dev_loss_work; | 209 | struct delayed_work dev_loss_work; |
210 | struct work_struct scan_work; | 210 | struct work_struct scan_work; |
211 | struct work_struct fail_io_work; | 211 | struct delayed_work fail_io_work; |
212 | struct work_struct stgt_delete_work; | 212 | struct work_struct stgt_delete_work; |
213 | struct work_struct rport_delete_work; | 213 | struct work_struct rport_delete_work; |
214 | } __attribute__((aligned(sizeof(unsigned long)))); | 214 | } __attribute__((aligned(sizeof(unsigned long)))); |
diff --git a/include/scsi/scsi_transport_iscsi.h b/include/scsi/scsi_transport_iscsi.h index 4b95c89c95c9..d5c218ddc527 100644 --- a/include/scsi/scsi_transport_iscsi.h +++ b/include/scsi/scsi_transport_iscsi.h | |||
@@ -176,7 +176,7 @@ struct iscsi_cls_session { | |||
176 | 176 | ||
177 | /* recovery fields */ | 177 | /* recovery fields */ |
178 | int recovery_tmo; | 178 | int recovery_tmo; |
179 | struct work_struct recovery_work; | 179 | struct delayed_work recovery_work; |
180 | 180 | ||
181 | int target_id; | 181 | int target_id; |
182 | 182 | ||
diff --git a/include/sound/ac97_codec.h b/include/sound/ac97_codec.h index 4c43521cc493..33720397a904 100644 --- a/include/sound/ac97_codec.h +++ b/include/sound/ac97_codec.h | |||
@@ -511,7 +511,7 @@ struct snd_ac97 { | |||
511 | #ifdef CONFIG_SND_AC97_POWER_SAVE | 511 | #ifdef CONFIG_SND_AC97_POWER_SAVE |
512 | unsigned int power_up; /* power states */ | 512 | unsigned int power_up; /* power states */ |
513 | struct workqueue_struct *power_workq; | 513 | struct workqueue_struct *power_workq; |
514 | struct work_struct power_work; | 514 | struct delayed_work power_work; |
515 | #endif | 515 | #endif |
516 | struct device dev; | 516 | struct device dev; |
517 | }; | 517 | }; |
diff --git a/include/sound/ak4114.h b/include/sound/ak4114.h index 11702aa0bea9..2ee061625fd0 100644 --- a/include/sound/ak4114.h +++ b/include/sound/ak4114.h | |||
@@ -182,7 +182,7 @@ struct ak4114 { | |||
182 | unsigned char rcs0; | 182 | unsigned char rcs0; |
183 | unsigned char rcs1; | 183 | unsigned char rcs1; |
184 | struct workqueue_struct *workqueue; | 184 | struct workqueue_struct *workqueue; |
185 | struct work_struct work; | 185 | struct delayed_work work; |
186 | void *change_callback_private; | 186 | void *change_callback_private; |
187 | void (*change_callback)(struct ak4114 *ak4114, unsigned char c0, unsigned char c1); | 187 | void (*change_callback)(struct ak4114 *ak4114, unsigned char c0, unsigned char c1); |
188 | }; | 188 | }; |