diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-08-18 12:38:56 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-08-18 12:38:56 -0400 |
commit | ed72df448250a6da72b65e7881eb63c5ded3475f (patch) | |
tree | cff147d103f1578380b0c3c324630d9c75945fb3 /arch | |
parent | 505683675cf0ed903765f160ad633f77ab90a9d4 (diff) | |
parent | 118142080a75fc1ce599c73b7894a71b4813828e (diff) |
Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux-2.6
* 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux-2.6:
Cross-compilation between e.g. i386 -> 64bit could break -> work around it
[IA64] Enable early console for Ski simulator
[IA64] forbid ptrace changes psr.ri to 3
[IA64] Failure to grow RBS
[IA64] Fix processor_get_freq
[IA64] SGI Altix : fix a force_interrupt bug on altix
[IA64] Update arch/ia64/configs/* s/SLAB/SLUB/
[IA64] get back PT_IA_64_UNWIND program header
[IA64] need NOTES in vmlinux.lds.S
[IA64] make unwinder stop at last frame of the bootloader
[IA64] Clean up CPE handler registration
[IA64] Include Kconfig.preempt
[IA64] SN2 needs platform specific irq_to_vector() function.
[IA64] Use atomic64_read to read an atomic64_t.
[IA64] disable irq's and check need_resched before safe_halt
Diffstat (limited to 'arch')
-rw-r--r-- | arch/ia64/Kconfig | 12 | ||||
-rw-r--r-- | arch/ia64/configs/bigsur_defconfig | 2 | ||||
-rw-r--r-- | arch/ia64/configs/gensparse_defconfig | 2 | ||||
-rw-r--r-- | arch/ia64/configs/sim_defconfig | 2 | ||||
-rw-r--r-- | arch/ia64/configs/sn2_defconfig | 2 | ||||
-rw-r--r-- | arch/ia64/configs/tiger_defconfig | 2 | ||||
-rw-r--r-- | arch/ia64/configs/zx1_defconfig | 2 | ||||
-rw-r--r-- | arch/ia64/defconfig | 3 | ||||
-rw-r--r-- | arch/ia64/hp/sim/boot/boot_head.S | 1 | ||||
-rw-r--r-- | arch/ia64/kernel/cpufreq/acpi-cpufreq.c | 6 | ||||
-rw-r--r-- | arch/ia64/kernel/irq.c | 5 | ||||
-rw-r--r-- | arch/ia64/kernel/mca.c | 34 | ||||
-rw-r--r-- | arch/ia64/kernel/process.c | 10 | ||||
-rw-r--r-- | arch/ia64/kernel/ptrace.c | 10 | ||||
-rw-r--r-- | arch/ia64/kernel/setup.c | 7 | ||||
-rw-r--r-- | arch/ia64/kernel/vmlinux.lds.S | 12 | ||||
-rw-r--r-- | arch/ia64/mm/fault.c | 14 | ||||
-rw-r--r-- | arch/ia64/sn/kernel/irq.c | 12 |
18 files changed, 85 insertions, 53 deletions
diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig index 21aa4fc5f8ef..8c39913d1729 100644 --- a/arch/ia64/Kconfig +++ b/arch/ia64/Kconfig | |||
@@ -327,17 +327,7 @@ config FORCE_CPEI_RETARGET | |||
327 | This option it useful to enable this feature on older BIOS's as well. | 327 | This option it useful to enable this feature on older BIOS's as well. |
328 | You can also enable this by using boot command line option force_cpei=1. | 328 | You can also enable this by using boot command line option force_cpei=1. |
329 | 329 | ||
330 | config PREEMPT | 330 | source "kernel/Kconfig.preempt" |
331 | bool "Preemptible Kernel" | ||
332 | help | ||
333 | This option reduces the latency of the kernel when reacting to | ||
334 | real-time or interactive events by allowing a low priority process to | ||
335 | be preempted even if it is in kernel mode executing a system call. | ||
336 | This allows applications to run more reliably even when the system is | ||
337 | under load. | ||
338 | |||
339 | Say Y here if you are building a kernel for a desktop, embedded | ||
340 | or real-time system. Say N if you are unsure. | ||
341 | 331 | ||
342 | source "mm/Kconfig" | 332 | source "mm/Kconfig" |
343 | 333 | ||
diff --git a/arch/ia64/configs/bigsur_defconfig b/arch/ia64/configs/bigsur_defconfig index 9eb48c0927b0..6dd8655664f3 100644 --- a/arch/ia64/configs/bigsur_defconfig +++ b/arch/ia64/configs/bigsur_defconfig | |||
@@ -42,7 +42,7 @@ CONFIG_CC_ALIGN_FUNCTIONS=0 | |||
42 | CONFIG_CC_ALIGN_LABELS=0 | 42 | CONFIG_CC_ALIGN_LABELS=0 |
43 | CONFIG_CC_ALIGN_LOOPS=0 | 43 | CONFIG_CC_ALIGN_LOOPS=0 |
44 | CONFIG_CC_ALIGN_JUMPS=0 | 44 | CONFIG_CC_ALIGN_JUMPS=0 |
45 | CONFIG_SLAB=y | 45 | CONFIG_SLUB=y |
46 | # CONFIG_TINY_SHMEM is not set | 46 | # CONFIG_TINY_SHMEM is not set |
47 | CONFIG_BASE_SMALL=0 | 47 | CONFIG_BASE_SMALL=0 |
48 | # CONFIG_SLOB is not set | 48 | # CONFIG_SLOB is not set |
diff --git a/arch/ia64/configs/gensparse_defconfig b/arch/ia64/configs/gensparse_defconfig index 3a9ed951db08..e86fbd39c795 100644 --- a/arch/ia64/configs/gensparse_defconfig +++ b/arch/ia64/configs/gensparse_defconfig | |||
@@ -43,7 +43,7 @@ CONFIG_CC_ALIGN_FUNCTIONS=0 | |||
43 | CONFIG_CC_ALIGN_LABELS=0 | 43 | CONFIG_CC_ALIGN_LABELS=0 |
44 | CONFIG_CC_ALIGN_LOOPS=0 | 44 | CONFIG_CC_ALIGN_LOOPS=0 |
45 | CONFIG_CC_ALIGN_JUMPS=0 | 45 | CONFIG_CC_ALIGN_JUMPS=0 |
46 | CONFIG_SLAB=y | 46 | CONFIG_SLUB=y |
47 | # CONFIG_TINY_SHMEM is not set | 47 | # CONFIG_TINY_SHMEM is not set |
48 | CONFIG_BASE_SMALL=0 | 48 | CONFIG_BASE_SMALL=0 |
49 | # CONFIG_SLOB is not set | 49 | # CONFIG_SLOB is not set |
diff --git a/arch/ia64/configs/sim_defconfig b/arch/ia64/configs/sim_defconfig index c420d9f3df98..546a772f438e 100644 --- a/arch/ia64/configs/sim_defconfig +++ b/arch/ia64/configs/sim_defconfig | |||
@@ -43,7 +43,7 @@ CONFIG_CC_ALIGN_FUNCTIONS=0 | |||
43 | CONFIG_CC_ALIGN_LABELS=0 | 43 | CONFIG_CC_ALIGN_LABELS=0 |
44 | CONFIG_CC_ALIGN_LOOPS=0 | 44 | CONFIG_CC_ALIGN_LOOPS=0 |
45 | CONFIG_CC_ALIGN_JUMPS=0 | 45 | CONFIG_CC_ALIGN_JUMPS=0 |
46 | CONFIG_SLAB=y | 46 | CONFIG_SLUB=y |
47 | # CONFIG_TINY_SHMEM is not set | 47 | # CONFIG_TINY_SHMEM is not set |
48 | CONFIG_BASE_SMALL=0 | 48 | CONFIG_BASE_SMALL=0 |
49 | # CONFIG_SLOB is not set | 49 | # CONFIG_SLOB is not set |
diff --git a/arch/ia64/configs/sn2_defconfig b/arch/ia64/configs/sn2_defconfig index 4c9ffc47bc7a..9aecfceeb38c 100644 --- a/arch/ia64/configs/sn2_defconfig +++ b/arch/ia64/configs/sn2_defconfig | |||
@@ -46,7 +46,7 @@ CONFIG_BASE_FULL=y | |||
46 | CONFIG_FUTEX=y | 46 | CONFIG_FUTEX=y |
47 | CONFIG_EPOLL=y | 47 | CONFIG_EPOLL=y |
48 | CONFIG_SHMEM=y | 48 | CONFIG_SHMEM=y |
49 | CONFIG_SLAB=y | 49 | CONFIG_SLUB=y |
50 | CONFIG_VM_EVENT_COUNTERS=y | 50 | CONFIG_VM_EVENT_COUNTERS=y |
51 | CONFIG_RT_MUTEXES=y | 51 | CONFIG_RT_MUTEXES=y |
52 | # CONFIG_TINY_SHMEM is not set | 52 | # CONFIG_TINY_SHMEM is not set |
diff --git a/arch/ia64/configs/tiger_defconfig b/arch/ia64/configs/tiger_defconfig index 3dbb3987df27..797acf9066c1 100644 --- a/arch/ia64/configs/tiger_defconfig +++ b/arch/ia64/configs/tiger_defconfig | |||
@@ -53,7 +53,7 @@ CONFIG_TIMERFD=y | |||
53 | CONFIG_EVENTFD=y | 53 | CONFIG_EVENTFD=y |
54 | CONFIG_SHMEM=y | 54 | CONFIG_SHMEM=y |
55 | CONFIG_VM_EVENT_COUNTERS=y | 55 | CONFIG_VM_EVENT_COUNTERS=y |
56 | CONFIG_SLAB=y | 56 | CONFIG_SLUB=y |
57 | # CONFIG_SLUB is not set | 57 | # CONFIG_SLUB is not set |
58 | # CONFIG_SLOB is not set | 58 | # CONFIG_SLOB is not set |
59 | CONFIG_RT_MUTEXES=y | 59 | CONFIG_RT_MUTEXES=y |
diff --git a/arch/ia64/configs/zx1_defconfig b/arch/ia64/configs/zx1_defconfig index 4a060fc39934..0a06b1333c95 100644 --- a/arch/ia64/configs/zx1_defconfig +++ b/arch/ia64/configs/zx1_defconfig | |||
@@ -48,7 +48,7 @@ CONFIG_BASE_FULL=y | |||
48 | CONFIG_FUTEX=y | 48 | CONFIG_FUTEX=y |
49 | CONFIG_EPOLL=y | 49 | CONFIG_EPOLL=y |
50 | CONFIG_SHMEM=y | 50 | CONFIG_SHMEM=y |
51 | CONFIG_SLAB=y | 51 | CONFIG_SLUB=y |
52 | CONFIG_VM_EVENT_COUNTERS=y | 52 | CONFIG_VM_EVENT_COUNTERS=y |
53 | CONFIG_RT_MUTEXES=y | 53 | CONFIG_RT_MUTEXES=y |
54 | # CONFIG_TINY_SHMEM is not set | 54 | # CONFIG_TINY_SHMEM is not set |
diff --git a/arch/ia64/defconfig b/arch/ia64/defconfig index 03172dc8c403..0210545e7f61 100644 --- a/arch/ia64/defconfig +++ b/arch/ia64/defconfig | |||
@@ -53,8 +53,7 @@ CONFIG_TIMERFD=y | |||
53 | CONFIG_EVENTFD=y | 53 | CONFIG_EVENTFD=y |
54 | CONFIG_SHMEM=y | 54 | CONFIG_SHMEM=y |
55 | CONFIG_VM_EVENT_COUNTERS=y | 55 | CONFIG_VM_EVENT_COUNTERS=y |
56 | CONFIG_SLAB=y | 56 | CONFIG_SLUB=y |
57 | # CONFIG_SLUB is not set | ||
58 | # CONFIG_SLOB is not set | 57 | # CONFIG_SLOB is not set |
59 | CONFIG_RT_MUTEXES=y | 58 | CONFIG_RT_MUTEXES=y |
60 | # CONFIG_TINY_SHMEM is not set | 59 | # CONFIG_TINY_SHMEM is not set |
diff --git a/arch/ia64/hp/sim/boot/boot_head.S b/arch/ia64/hp/sim/boot/boot_head.S index a9bd71ac78e2..8808565491fb 100644 --- a/arch/ia64/hp/sim/boot/boot_head.S +++ b/arch/ia64/hp/sim/boot/boot_head.S | |||
@@ -26,6 +26,7 @@ GLOBAL_ENTRY(_start) | |||
26 | movl sp = stack_mem+16384-16 | 26 | movl sp = stack_mem+16384-16 |
27 | bsw.1 | 27 | bsw.1 |
28 | br.call.sptk.many rp=start_bootloader | 28 | br.call.sptk.many rp=start_bootloader |
29 | 0: nop 0 /* dummy nop to make unwinding work */ | ||
29 | END(_start) | 30 | END(_start) |
30 | 31 | ||
31 | /* | 32 | /* |
diff --git a/arch/ia64/kernel/cpufreq/acpi-cpufreq.c b/arch/ia64/kernel/cpufreq/acpi-cpufreq.c index 15c08d52f09f..8c6ec7070844 100644 --- a/arch/ia64/kernel/cpufreq/acpi-cpufreq.c +++ b/arch/ia64/kernel/cpufreq/acpi-cpufreq.c | |||
@@ -113,10 +113,8 @@ processor_get_freq ( | |||
113 | 113 | ||
114 | saved_mask = current->cpus_allowed; | 114 | saved_mask = current->cpus_allowed; |
115 | set_cpus_allowed(current, cpumask_of_cpu(cpu)); | 115 | set_cpus_allowed(current, cpumask_of_cpu(cpu)); |
116 | if (smp_processor_id() != cpu) { | 116 | if (smp_processor_id() != cpu) |
117 | ret = -EAGAIN; | ||
118 | goto migrate_end; | 117 | goto migrate_end; |
119 | } | ||
120 | 118 | ||
121 | /* processor_get_pstate gets the instantaneous frequency */ | 119 | /* processor_get_pstate gets the instantaneous frequency */ |
122 | ret = processor_get_pstate(&value); | 120 | ret = processor_get_pstate(&value); |
@@ -125,7 +123,7 @@ processor_get_freq ( | |||
125 | set_cpus_allowed(current, saved_mask); | 123 | set_cpus_allowed(current, saved_mask); |
126 | printk(KERN_WARNING "get performance failed with error %d\n", | 124 | printk(KERN_WARNING "get performance failed with error %d\n", |
127 | ret); | 125 | ret); |
128 | ret = -EAGAIN; | 126 | ret = 0; |
129 | goto migrate_end; | 127 | goto migrate_end; |
130 | } | 128 | } |
131 | clock_freq = extract_clock(data, value, cpu); | 129 | clock_freq = extract_clock(data, value, cpu); |
diff --git a/arch/ia64/kernel/irq.c b/arch/ia64/kernel/irq.c index cc3ee4ef37af..44be1c952b7c 100644 --- a/arch/ia64/kernel/irq.c +++ b/arch/ia64/kernel/irq.c | |||
@@ -33,6 +33,11 @@ void ack_bad_irq(unsigned int irq) | |||
33 | } | 33 | } |
34 | 34 | ||
35 | #ifdef CONFIG_IA64_GENERIC | 35 | #ifdef CONFIG_IA64_GENERIC |
36 | ia64_vector __ia64_irq_to_vector(int irq) | ||
37 | { | ||
38 | return irq_cfg[irq].vector; | ||
39 | } | ||
40 | |||
36 | unsigned int __ia64_local_vector_to_irq (ia64_vector vec) | 41 | unsigned int __ia64_local_vector_to_irq (ia64_vector vec) |
37 | { | 42 | { |
38 | return __get_cpu_var(vector_irq)[vec]; | 43 | return __get_cpu_var(vector_irq)[vec]; |
diff --git a/arch/ia64/kernel/mca.c b/arch/ia64/kernel/mca.c index ff28620cb992..63b73f3d4c9f 100644 --- a/arch/ia64/kernel/mca.c +++ b/arch/ia64/kernel/mca.c | |||
@@ -2018,22 +2018,26 @@ ia64_mca_late_init(void) | |||
2018 | 2018 | ||
2019 | if (cpe_vector >= 0) { | 2019 | if (cpe_vector >= 0) { |
2020 | /* If platform supports CPEI, enable the irq. */ | 2020 | /* If platform supports CPEI, enable the irq. */ |
2021 | cpe_poll_enabled = 0; | 2021 | irq = local_vector_to_irq(cpe_vector); |
2022 | for (irq = 0; irq < NR_IRQS; ++irq) | 2022 | if (irq > 0) { |
2023 | if (irq_to_vector(irq) == cpe_vector) { | 2023 | cpe_poll_enabled = 0; |
2024 | desc = irq_desc + irq; | 2024 | desc = irq_desc + irq; |
2025 | desc->status |= IRQ_PER_CPU; | 2025 | desc->status |= IRQ_PER_CPU; |
2026 | setup_irq(irq, &mca_cpe_irqaction); | 2026 | setup_irq(irq, &mca_cpe_irqaction); |
2027 | ia64_cpe_irq = irq; | 2027 | ia64_cpe_irq = irq; |
2028 | } | 2028 | ia64_mca_register_cpev(cpe_vector); |
2029 | ia64_mca_register_cpev(cpe_vector); | 2029 | IA64_MCA_DEBUG("%s: CPEI/P setup and enabled.\n", |
2030 | IA64_MCA_DEBUG("%s: CPEI/P setup and enabled.\n", __FUNCTION__); | 2030 | __FUNCTION__); |
2031 | } else { | 2031 | return 0; |
2032 | /* If platform doesn't support CPEI, get the timer going. */ | ||
2033 | if (cpe_poll_enabled) { | ||
2034 | ia64_mca_cpe_poll(0UL); | ||
2035 | IA64_MCA_DEBUG("%s: CPEP setup and enabled.\n", __FUNCTION__); | ||
2036 | } | 2032 | } |
2033 | printk(KERN_ERR "%s: Failed to find irq for CPE " | ||
2034 | "interrupt handler, vector %d\n", | ||
2035 | __FUNCTION__, cpe_vector); | ||
2036 | } | ||
2037 | /* If platform doesn't support CPEI, get the timer going. */ | ||
2038 | if (cpe_poll_enabled) { | ||
2039 | ia64_mca_cpe_poll(0UL); | ||
2040 | IA64_MCA_DEBUG("%s: CPEP setup and enabled.\n", __FUNCTION__); | ||
2037 | } | 2041 | } |
2038 | } | 2042 | } |
2039 | #endif | 2043 | #endif |
diff --git a/arch/ia64/kernel/process.c b/arch/ia64/kernel/process.c index 4158906c45aa..c613fc0e91cc 100644 --- a/arch/ia64/kernel/process.c +++ b/arch/ia64/kernel/process.c | |||
@@ -198,9 +198,13 @@ default_idle (void) | |||
198 | { | 198 | { |
199 | local_irq_enable(); | 199 | local_irq_enable(); |
200 | while (!need_resched()) { | 200 | while (!need_resched()) { |
201 | if (can_do_pal_halt) | 201 | if (can_do_pal_halt) { |
202 | safe_halt(); | 202 | local_irq_disable(); |
203 | else | 203 | if (!need_resched()) { |
204 | safe_halt(); | ||
205 | } | ||
206 | local_irq_enable(); | ||
207 | } else | ||
204 | cpu_relax(); | 208 | cpu_relax(); |
205 | } | 209 | } |
206 | } | 210 | } |
diff --git a/arch/ia64/kernel/ptrace.c b/arch/ia64/kernel/ptrace.c index 00f803246948..122444a97897 100644 --- a/arch/ia64/kernel/ptrace.c +++ b/arch/ia64/kernel/ptrace.c | |||
@@ -951,10 +951,14 @@ access_uarea (struct task_struct *child, unsigned long addr, | |||
951 | return 0; | 951 | return 0; |
952 | 952 | ||
953 | case PT_CR_IPSR: | 953 | case PT_CR_IPSR: |
954 | if (write_access) | 954 | if (write_access) { |
955 | pt->cr_ipsr = ((*data & IPSR_MASK) | 955 | unsigned long tmp = *data; |
956 | /* psr.ri==3 is a reserved value: SDM 2:25 */ | ||
957 | if ((tmp & IA64_PSR_RI) == IA64_PSR_RI) | ||
958 | tmp &= ~IA64_PSR_RI; | ||
959 | pt->cr_ipsr = ((tmp & IPSR_MASK) | ||
956 | | (pt->cr_ipsr & ~IPSR_MASK)); | 960 | | (pt->cr_ipsr & ~IPSR_MASK)); |
957 | else | 961 | } else |
958 | *data = (pt->cr_ipsr & IPSR_MASK); | 962 | *data = (pt->cr_ipsr & IPSR_MASK); |
959 | return 0; | 963 | return 0; |
960 | 964 | ||
diff --git a/arch/ia64/kernel/setup.c b/arch/ia64/kernel/setup.c index cd9a37a552c3..407efea04bf5 100644 --- a/arch/ia64/kernel/setup.c +++ b/arch/ia64/kernel/setup.c | |||
@@ -389,6 +389,13 @@ early_console_setup (char *cmdline) | |||
389 | if (!efi_setup_pcdp_console(cmdline)) | 389 | if (!efi_setup_pcdp_console(cmdline)) |
390 | earlycons++; | 390 | earlycons++; |
391 | #endif | 391 | #endif |
392 | #ifdef CONFIG_HP_SIMSERIAL_CONSOLE | ||
393 | { | ||
394 | extern struct console hpsim_cons; | ||
395 | register_console(&hpsim_cons); | ||
396 | earlycons++; | ||
397 | } | ||
398 | #endif | ||
392 | 399 | ||
393 | return (earlycons) ? 0 : -1; | 400 | return (earlycons) ? 0 : -1; |
394 | } | 401 | } |
diff --git a/arch/ia64/kernel/vmlinux.lds.S b/arch/ia64/kernel/vmlinux.lds.S index 83e80677de70..00232b4357ba 100644 --- a/arch/ia64/kernel/vmlinux.lds.S +++ b/arch/ia64/kernel/vmlinux.lds.S | |||
@@ -20,6 +20,8 @@ PHDRS { | |||
20 | code PT_LOAD; | 20 | code PT_LOAD; |
21 | percpu PT_LOAD; | 21 | percpu PT_LOAD; |
22 | data PT_LOAD; | 22 | data PT_LOAD; |
23 | note PT_NOTE; | ||
24 | unwind 0x70000001; /* PT_IA_64_UNWIND, but ld doesn't match the name */ | ||
23 | } | 25 | } |
24 | SECTIONS | 26 | SECTIONS |
25 | { | 27 | { |
@@ -62,6 +64,9 @@ SECTIONS | |||
62 | 64 | ||
63 | /* Read-only data */ | 65 | /* Read-only data */ |
64 | 66 | ||
67 | NOTES :code :note /* put .notes in text and mark in PT_NOTE */ | ||
68 | code_continues : {} :code /* switch back to regular program... */ | ||
69 | |||
65 | /* Exception table */ | 70 | /* Exception table */ |
66 | . = ALIGN(16); | 71 | . = ALIGN(16); |
67 | __ex_table : AT(ADDR(__ex_table) - LOAD_OFFSET) | 72 | __ex_table : AT(ADDR(__ex_table) - LOAD_OFFSET) |
@@ -99,7 +104,8 @@ SECTIONS | |||
99 | __start_unwind = .; | 104 | __start_unwind = .; |
100 | *(.IA_64.unwind*) | 105 | *(.IA_64.unwind*) |
101 | __end_unwind = .; | 106 | __end_unwind = .; |
102 | } | 107 | } :code :unwind |
108 | code_continues2 : {} : code | ||
103 | 109 | ||
104 | RODATA | 110 | RODATA |
105 | 111 | ||
@@ -276,10 +282,6 @@ SECTIONS | |||
276 | .debug_typenames 0 : { *(.debug_typenames) } | 282 | .debug_typenames 0 : { *(.debug_typenames) } |
277 | .debug_varnames 0 : { *(.debug_varnames) } | 283 | .debug_varnames 0 : { *(.debug_varnames) } |
278 | /* These must appear regardless of . */ | 284 | /* These must appear regardless of . */ |
279 | /* Discard them for now since Intel SoftSDV cannot handle them. | ||
280 | .comment 0 : { *(.comment) } | ||
281 | .note 0 : { *(.note) } | ||
282 | */ | ||
283 | /DISCARD/ : { *(.comment) } | 285 | /DISCARD/ : { *(.comment) } |
284 | /DISCARD/ : { *(.note) } | 286 | /DISCARD/ : { *(.note) } |
285 | } | 287 | } |
diff --git a/arch/ia64/mm/fault.c b/arch/ia64/mm/fault.c index 73ccb6010c05..9150ffaff9e8 100644 --- a/arch/ia64/mm/fault.c +++ b/arch/ia64/mm/fault.c | |||
@@ -112,11 +112,17 @@ ia64_do_page_fault (unsigned long address, unsigned long isr, struct pt_regs *re | |||
112 | down_read(&mm->mmap_sem); | 112 | down_read(&mm->mmap_sem); |
113 | 113 | ||
114 | vma = find_vma_prev(mm, address, &prev_vma); | 114 | vma = find_vma_prev(mm, address, &prev_vma); |
115 | if (!vma) | 115 | if (!vma && !prev_vma ) |
116 | goto bad_area; | 116 | goto bad_area; |
117 | 117 | ||
118 | /* find_vma_prev() returns vma such that address < vma->vm_end or NULL */ | 118 | /* |
119 | if (address < vma->vm_start) | 119 | * find_vma_prev() returns vma such that address < vma->vm_end or NULL |
120 | * | ||
121 | * May find no vma, but could be that the last vm area is the | ||
122 | * register backing store that needs to expand upwards, in | ||
123 | * this case vma will be null, but prev_vma will ne non-null | ||
124 | */ | ||
125 | if (( !vma && prev_vma ) || (address < vma->vm_start) ) | ||
120 | goto check_expansion; | 126 | goto check_expansion; |
121 | 127 | ||
122 | good_area: | 128 | good_area: |
@@ -172,6 +178,8 @@ ia64_do_page_fault (unsigned long address, unsigned long isr, struct pt_regs *re | |||
172 | 178 | ||
173 | check_expansion: | 179 | check_expansion: |
174 | if (!(prev_vma && (prev_vma->vm_flags & VM_GROWSUP) && (address == prev_vma->vm_end))) { | 180 | if (!(prev_vma && (prev_vma->vm_flags & VM_GROWSUP) && (address == prev_vma->vm_end))) { |
181 | if (!vma) | ||
182 | goto bad_area; | ||
175 | if (!(vma->vm_flags & VM_GROWSDOWN)) | 183 | if (!(vma->vm_flags & VM_GROWSDOWN)) |
176 | goto bad_area; | 184 | goto bad_area; |
177 | if (REGION_NUMBER(address) != REGION_NUMBER(vma->vm_start) | 185 | if (REGION_NUMBER(address) != REGION_NUMBER(vma->vm_start) |
diff --git a/arch/ia64/sn/kernel/irq.c b/arch/ia64/sn/kernel/irq.c index 7f6d2360a262..360047389449 100644 --- a/arch/ia64/sn/kernel/irq.c +++ b/arch/ia64/sn/kernel/irq.c | |||
@@ -256,6 +256,13 @@ struct irq_chip irq_type_sn = { | |||
256 | .set_affinity = sn_set_affinity_irq | 256 | .set_affinity = sn_set_affinity_irq |
257 | }; | 257 | }; |
258 | 258 | ||
259 | ia64_vector sn_irq_to_vector(int irq) | ||
260 | { | ||
261 | if (irq >= IA64_NUM_VECTORS) | ||
262 | return 0; | ||
263 | return (ia64_vector)irq; | ||
264 | } | ||
265 | |||
259 | unsigned int sn_local_vector_to_irq(u8 vector) | 266 | unsigned int sn_local_vector_to_irq(u8 vector) |
260 | { | 267 | { |
261 | return (CPU_VECTOR_TO_IRQ(smp_processor_id(), vector)); | 268 | return (CPU_VECTOR_TO_IRQ(smp_processor_id(), vector)); |
@@ -398,7 +405,10 @@ sn_call_force_intr_provider(struct sn_irq_info *sn_irq_info) | |||
398 | struct sn_pcibus_provider *pci_provider; | 405 | struct sn_pcibus_provider *pci_provider; |
399 | 406 | ||
400 | pci_provider = sn_pci_provider[sn_irq_info->irq_bridge_type]; | 407 | pci_provider = sn_pci_provider[sn_irq_info->irq_bridge_type]; |
401 | if (pci_provider && pci_provider->force_interrupt) | 408 | |
409 | /* Don't force an interrupt if the irq has been disabled */ | ||
410 | if (!(irq_desc[sn_irq_info->irq_irq].status & IRQ_DISABLED) && | ||
411 | pci_provider && pci_provider->force_interrupt) | ||
402 | (*pci_provider->force_interrupt)(sn_irq_info); | 412 | (*pci_provider->force_interrupt)(sn_irq_info); |
403 | } | 413 | } |
404 | 414 | ||