diff options
| -rw-r--r-- | arch/ia64/kernel/asm-offsets.c | 1 | ||||
| -rw-r--r-- | arch/ia64/kernel/efi.c | 10 | ||||
| -rw-r--r-- | arch/ia64/kernel/fsys.S | 105 | ||||
| -rw-r--r-- | arch/ia64/kernel/iosapic.c | 8 | ||||
| -rw-r--r-- | arch/ia64/kernel/setup.c | 2 | ||||
| -rw-r--r-- | arch/ia64/sn/kernel/irq.c | 14 |
6 files changed, 130 insertions, 10 deletions
diff --git a/arch/ia64/kernel/asm-offsets.c b/arch/ia64/kernel/asm-offsets.c index 75a2a2c12258..2236fabbb3c6 100644 --- a/arch/ia64/kernel/asm-offsets.c +++ b/arch/ia64/kernel/asm-offsets.c | |||
| @@ -35,6 +35,7 @@ void foo(void) | |||
| 35 | BLANK(); | 35 | BLANK(); |
| 36 | 36 | ||
| 37 | DEFINE(TI_FLAGS, offsetof(struct thread_info, flags)); | 37 | DEFINE(TI_FLAGS, offsetof(struct thread_info, flags)); |
| 38 | DEFINE(TI_CPU, offsetof(struct thread_info, cpu)); | ||
| 38 | DEFINE(TI_PRE_COUNT, offsetof(struct thread_info, preempt_count)); | 39 | DEFINE(TI_PRE_COUNT, offsetof(struct thread_info, preempt_count)); |
| 39 | 40 | ||
| 40 | BLANK(); | 41 | BLANK(); |
diff --git a/arch/ia64/kernel/efi.c b/arch/ia64/kernel/efi.c index 4061593e5b17..49b93682c752 100644 --- a/arch/ia64/kernel/efi.c +++ b/arch/ia64/kernel/efi.c | |||
| @@ -971,6 +971,11 @@ efi_memmap_init(unsigned long *s, unsigned long *e) | |||
| 971 | if (!is_memory_available(md)) | 971 | if (!is_memory_available(md)) |
| 972 | continue; | 972 | continue; |
| 973 | 973 | ||
| 974 | #ifdef CONFIG_CRASH_DUMP | ||
| 975 | /* saved_max_pfn should ignore max_addr= command line arg */ | ||
| 976 | if (saved_max_pfn < (efi_md_end(md) >> PAGE_SHIFT)) | ||
| 977 | saved_max_pfn = (efi_md_end(md) >> PAGE_SHIFT); | ||
| 978 | #endif | ||
| 974 | /* | 979 | /* |
| 975 | * Round ends inward to granule boundaries | 980 | * Round ends inward to granule boundaries |
| 976 | * Give trimmings to uncached allocator | 981 | * Give trimmings to uncached allocator |
| @@ -1010,11 +1015,6 @@ efi_memmap_init(unsigned long *s, unsigned long *e) | |||
| 1010 | } else | 1015 | } else |
| 1011 | ae = efi_md_end(md); | 1016 | ae = efi_md_end(md); |
| 1012 | 1017 | ||
| 1013 | #ifdef CONFIG_CRASH_DUMP | ||
| 1014 | /* saved_max_pfn should ignore max_addr= command line arg */ | ||
| 1015 | if (saved_max_pfn < (ae >> PAGE_SHIFT)) | ||
| 1016 | saved_max_pfn = (ae >> PAGE_SHIFT); | ||
| 1017 | #endif | ||
| 1018 | /* keep within max_addr= and min_addr= command line arg */ | 1018 | /* keep within max_addr= and min_addr= command line arg */ |
| 1019 | as = max(as, min_addr); | 1019 | as = max(as, min_addr); |
| 1020 | ae = min(ae, max_addr); | 1020 | ae = min(ae, max_addr); |
diff --git a/arch/ia64/kernel/fsys.S b/arch/ia64/kernel/fsys.S index 7a05b1cb2ad5..8589e84a27c6 100644 --- a/arch/ia64/kernel/fsys.S +++ b/arch/ia64/kernel/fsys.S | |||
| @@ -10,6 +10,8 @@ | |||
| 10 | * probably broke it along the way... ;-) | 10 | * probably broke it along the way... ;-) |
| 11 | * 13-Jul-04 clameter Implement fsys_clock_gettime and revise fsys_gettimeofday to make | 11 | * 13-Jul-04 clameter Implement fsys_clock_gettime and revise fsys_gettimeofday to make |
| 12 | * it capable of using memory based clocks without falling back to C code. | 12 | * it capable of using memory based clocks without falling back to C code. |
| 13 | * 08-Feb-07 Fenghua Yu Implement fsys_getcpu. | ||
| 14 | * | ||
| 13 | */ | 15 | */ |
| 14 | 16 | ||
| 15 | #include <asm/asmmacro.h> | 17 | #include <asm/asmmacro.h> |
| @@ -505,6 +507,59 @@ EX(.fail_efault, (p15) st8 [r34]=r3) | |||
| 505 | #endif | 507 | #endif |
| 506 | END(fsys_rt_sigprocmask) | 508 | END(fsys_rt_sigprocmask) |
| 507 | 509 | ||
| 510 | /* | ||
| 511 | * fsys_getcpu doesn't use the third parameter in this implementation. It reads | ||
| 512 | * current_thread_info()->cpu and corresponding node in cpu_to_node_map. | ||
| 513 | */ | ||
| 514 | ENTRY(fsys_getcpu) | ||
| 515 | .prologue | ||
| 516 | .altrp b6 | ||
| 517 | .body | ||
| 518 | ;; | ||
| 519 | add r2=TI_FLAGS+IA64_TASK_SIZE,r16 | ||
| 520 | tnat.nz p6,p0 = r32 // guard against NaT argument | ||
| 521 | add r3=TI_CPU+IA64_TASK_SIZE,r16 | ||
| 522 | ;; | ||
| 523 | ld4 r3=[r3] // M r3 = thread_info->cpu | ||
| 524 | ld4 r2=[r2] // M r2 = thread_info->flags | ||
| 525 | (p6) br.cond.spnt.few .fail_einval // B | ||
| 526 | ;; | ||
| 527 | tnat.nz p7,p0 = r33 // I guard against NaT argument | ||
| 528 | (p7) br.cond.spnt.few .fail_einval // B | ||
| 529 | #ifdef CONFIG_NUMA | ||
| 530 | movl r17=cpu_to_node_map | ||
| 531 | ;; | ||
| 532 | EX(.fail_efault, probe.w.fault r32, 3) // M This takes 5 cycles | ||
| 533 | EX(.fail_efault, probe.w.fault r33, 3) // M This takes 5 cycles | ||
| 534 | shladd r18=r3,1,r17 | ||
| 535 | ;; | ||
| 536 | ld2 r20=[r18] // r20 = cpu_to_node_map[cpu] | ||
| 537 | and r2 = TIF_ALLWORK_MASK,r2 | ||
| 538 | ;; | ||
| 539 | cmp.ne p8,p0=0,r2 | ||
| 540 | (p8) br.spnt.many fsys_fallback_syscall | ||
| 541 | ;; | ||
| 542 | ;; | ||
| 543 | EX(.fail_efault, st4 [r32] = r3) | ||
| 544 | EX(.fail_efault, st2 [r33] = r20) | ||
| 545 | mov r8=0 | ||
| 546 | ;; | ||
| 547 | #else | ||
| 548 | EX(.fail_efault, probe.w.fault r32, 3) // M This takes 5 cycles | ||
| 549 | EX(.fail_efault, probe.w.fault r33, 3) // M This takes 5 cycles | ||
| 550 | and r2 = TIF_ALLWORK_MASK,r2 | ||
| 551 | ;; | ||
| 552 | cmp.ne p8,p0=0,r2 | ||
| 553 | (p8) br.spnt.many fsys_fallback_syscall | ||
| 554 | ;; | ||
| 555 | EX(.fail_efault, st4 [r32] = r3) | ||
| 556 | EX(.fail_efault, st2 [r33] = r0) | ||
| 557 | mov r8=0 | ||
| 558 | ;; | ||
| 559 | #endif | ||
| 560 | FSYS_RETURN | ||
| 561 | END(fsys_getcpu) | ||
| 562 | |||
| 508 | ENTRY(fsys_fallback_syscall) | 563 | ENTRY(fsys_fallback_syscall) |
| 509 | .prologue | 564 | .prologue |
| 510 | .altrp b6 | 565 | .altrp b6 |
| @@ -878,6 +933,56 @@ fsyscall_table: | |||
| 878 | data8 0 // timer_delete | 933 | data8 0 // timer_delete |
| 879 | data8 0 // clock_settime | 934 | data8 0 // clock_settime |
| 880 | data8 fsys_clock_gettime // clock_gettime | 935 | data8 fsys_clock_gettime // clock_gettime |
| 936 | data8 0 // clock_getres // 1255 | ||
| 937 | data8 0 // clock_nanosleep | ||
| 938 | data8 0 // fstatfs64 | ||
| 939 | data8 0 // statfs64 | ||
| 940 | data8 0 // mbind | ||
| 941 | data8 0 // get_mempolicy // 1260 | ||
| 942 | data8 0 // set_mempolicy | ||
| 943 | data8 0 // mq_open | ||
| 944 | data8 0 // mq_unlink | ||
| 945 | data8 0 // mq_timedsend | ||
| 946 | data8 0 // mq_timedreceive // 1265 | ||
| 947 | data8 0 // mq_notify | ||
| 948 | data8 0 // mq_getsetattr | ||
| 949 | data8 0 // kexec_load | ||
| 950 | data8 0 // vserver | ||
| 951 | data8 0 // waitid // 1270 | ||
| 952 | data8 0 // add_key | ||
| 953 | data8 0 // request_key | ||
| 954 | data8 0 // keyctl | ||
| 955 | data8 0 // ioprio_set | ||
| 956 | data8 0 // ioprio_get // 1275 | ||
| 957 | data8 0 // move_pages | ||
| 958 | data8 0 // inotify_init | ||
| 959 | data8 0 // inotify_add_watch | ||
| 960 | data8 0 // inotify_rm_watch | ||
| 961 | data8 0 // migrate_pages // 1280 | ||
| 962 | data8 0 // openat | ||
| 963 | data8 0 // mkdirat | ||
| 964 | data8 0 // mknodat | ||
| 965 | data8 0 // fchownat | ||
| 966 | data8 0 // futimesat // 1285 | ||
| 967 | data8 0 // newfstatat | ||
| 968 | data8 0 // unlinkat | ||
| 969 | data8 0 // renameat | ||
| 970 | data8 0 // linkat | ||
| 971 | data8 0 // symlinkat // 1290 | ||
| 972 | data8 0 // readlinkat | ||
| 973 | data8 0 // fchmodat | ||
| 974 | data8 0 // faccessat | ||
| 975 | data8 0 | ||
| 976 | data8 0 // 1295 | ||
| 977 | data8 0 // unshare | ||
| 978 | data8 0 // splice | ||
| 979 | data8 0 // set_robust_list | ||
| 980 | data8 0 // get_robust_list | ||
| 981 | data8 0 // sync_file_range // 1300 | ||
| 982 | data8 0 // tee | ||
| 983 | data8 0 // vmsplice | ||
| 984 | data8 0 | ||
| 985 | data8 fsys_getcpu // getcpu // 1304 | ||
| 881 | 986 | ||
| 882 | // fill in zeros for the remaining entries | 987 | // fill in zeros for the remaining entries |
| 883 | .zero: | 988 | .zero: |
diff --git a/arch/ia64/kernel/iosapic.c b/arch/ia64/kernel/iosapic.c index d6aab40c6416..dcfbf3e7a9ef 100644 --- a/arch/ia64/kernel/iosapic.c +++ b/arch/ia64/kernel/iosapic.c | |||
| @@ -446,7 +446,7 @@ iosapic_end_level_irq (unsigned int irq) | |||
| 446 | #define iosapic_disable_level_irq mask_irq | 446 | #define iosapic_disable_level_irq mask_irq |
| 447 | #define iosapic_ack_level_irq nop | 447 | #define iosapic_ack_level_irq nop |
| 448 | 448 | ||
| 449 | struct hw_interrupt_type irq_type_iosapic_level = { | 449 | struct irq_chip irq_type_iosapic_level = { |
| 450 | .name = "IO-SAPIC-level", | 450 | .name = "IO-SAPIC-level", |
| 451 | .startup = iosapic_startup_level_irq, | 451 | .startup = iosapic_startup_level_irq, |
| 452 | .shutdown = iosapic_shutdown_level_irq, | 452 | .shutdown = iosapic_shutdown_level_irq, |
| @@ -454,6 +454,8 @@ struct hw_interrupt_type irq_type_iosapic_level = { | |||
| 454 | .disable = iosapic_disable_level_irq, | 454 | .disable = iosapic_disable_level_irq, |
| 455 | .ack = iosapic_ack_level_irq, | 455 | .ack = iosapic_ack_level_irq, |
| 456 | .end = iosapic_end_level_irq, | 456 | .end = iosapic_end_level_irq, |
| 457 | .mask = mask_irq, | ||
| 458 | .unmask = unmask_irq, | ||
| 457 | .set_affinity = iosapic_set_affinity | 459 | .set_affinity = iosapic_set_affinity |
| 458 | }; | 460 | }; |
| 459 | 461 | ||
| @@ -493,7 +495,7 @@ iosapic_ack_edge_irq (unsigned int irq) | |||
| 493 | #define iosapic_disable_edge_irq nop | 495 | #define iosapic_disable_edge_irq nop |
| 494 | #define iosapic_end_edge_irq nop | 496 | #define iosapic_end_edge_irq nop |
| 495 | 497 | ||
| 496 | struct hw_interrupt_type irq_type_iosapic_edge = { | 498 | struct irq_chip irq_type_iosapic_edge = { |
| 497 | .name = "IO-SAPIC-edge", | 499 | .name = "IO-SAPIC-edge", |
| 498 | .startup = iosapic_startup_edge_irq, | 500 | .startup = iosapic_startup_edge_irq, |
| 499 | .shutdown = iosapic_disable_edge_irq, | 501 | .shutdown = iosapic_disable_edge_irq, |
| @@ -501,6 +503,8 @@ struct hw_interrupt_type irq_type_iosapic_edge = { | |||
| 501 | .disable = iosapic_disable_edge_irq, | 503 | .disable = iosapic_disable_edge_irq, |
| 502 | .ack = iosapic_ack_edge_irq, | 504 | .ack = iosapic_ack_edge_irq, |
| 503 | .end = iosapic_end_edge_irq, | 505 | .end = iosapic_end_edge_irq, |
| 506 | .mask = mask_irq, | ||
| 507 | .unmask = unmask_irq, | ||
| 504 | .set_affinity = iosapic_set_affinity | 508 | .set_affinity = iosapic_set_affinity |
| 505 | }; | 509 | }; |
| 506 | 510 | ||
diff --git a/arch/ia64/kernel/setup.c b/arch/ia64/kernel/setup.c index 7d6fe65c93f4..339e8a54c2f1 100644 --- a/arch/ia64/kernel/setup.c +++ b/arch/ia64/kernel/setup.c | |||
| @@ -91,8 +91,6 @@ static struct resource code_resource = { | |||
| 91 | .name = "Kernel code", | 91 | .name = "Kernel code", |
| 92 | .flags = IORESOURCE_BUSY | IORESOURCE_MEM | 92 | .flags = IORESOURCE_BUSY | IORESOURCE_MEM |
| 93 | }; | 93 | }; |
| 94 | extern void efi_initialize_iomem_resources(struct resource *, | ||
| 95 | struct resource *); | ||
| 96 | extern char _text[], _end[], _etext[]; | 94 | extern char _text[], _end[], _etext[]; |
| 97 | 95 | ||
| 98 | unsigned long ia64_max_cacheline_size; | 96 | unsigned long ia64_max_cacheline_size; |
diff --git a/arch/ia64/sn/kernel/irq.c b/arch/ia64/sn/kernel/irq.c index 8c5bee01eaa2..8d2a1bfbfe7c 100644 --- a/arch/ia64/sn/kernel/irq.c +++ b/arch/ia64/sn/kernel/irq.c | |||
| @@ -205,7 +205,17 @@ static void sn_set_affinity_irq(unsigned int irq, cpumask_t mask) | |||
| 205 | (void)sn_retarget_vector(sn_irq_info, nasid, slice); | 205 | (void)sn_retarget_vector(sn_irq_info, nasid, slice); |
| 206 | } | 206 | } |
| 207 | 207 | ||
| 208 | struct hw_interrupt_type irq_type_sn = { | 208 | static void |
| 209 | sn_mask_irq(unsigned int irq) | ||
| 210 | { | ||
| 211 | } | ||
| 212 | |||
| 213 | static void | ||
| 214 | sn_unmask_irq(unsigned int irq) | ||
| 215 | { | ||
| 216 | } | ||
| 217 | |||
| 218 | struct irq_chip irq_type_sn = { | ||
| 209 | .name = "SN hub", | 219 | .name = "SN hub", |
| 210 | .startup = sn_startup_irq, | 220 | .startup = sn_startup_irq, |
| 211 | .shutdown = sn_shutdown_irq, | 221 | .shutdown = sn_shutdown_irq, |
| @@ -213,6 +223,8 @@ struct hw_interrupt_type irq_type_sn = { | |||
| 213 | .disable = sn_disable_irq, | 223 | .disable = sn_disable_irq, |
| 214 | .ack = sn_ack_irq, | 224 | .ack = sn_ack_irq, |
| 215 | .end = sn_end_irq, | 225 | .end = sn_end_irq, |
| 226 | .mask = sn_mask_irq, | ||
| 227 | .unmask = sn_unmask_irq, | ||
| 216 | .set_affinity = sn_set_affinity_irq | 228 | .set_affinity = sn_set_affinity_irq |
| 217 | }; | 229 | }; |
| 218 | 230 | ||
