diff options
Diffstat (limited to 'arch/ia64/kernel')
-rw-r--r-- | arch/ia64/kernel/acpi.c | 4 | ||||
-rw-r--r-- | arch/ia64/kernel/iosapic.c | 2 | ||||
-rw-r--r-- | arch/ia64/kernel/irq.c | 6 | ||||
-rw-r--r-- | arch/ia64/kernel/irq_ia64.c | 31 | ||||
-rw-r--r-- | arch/ia64/kernel/msi_ia64.c | 59 | ||||
-rw-r--r-- | arch/ia64/kernel/perfmon.c | 2 | ||||
-rw-r--r-- | arch/ia64/kernel/vmlinux.lds.S | 11 |
7 files changed, 39 insertions, 76 deletions
diff --git a/arch/ia64/kernel/acpi.c b/arch/ia64/kernel/acpi.c index d541671caf4a..bdef2ce38c8b 100644 --- a/arch/ia64/kernel/acpi.c +++ b/arch/ia64/kernel/acpi.c | |||
@@ -199,6 +199,10 @@ char *__init __acpi_map_table(unsigned long phys_addr, unsigned long size) | |||
199 | return __va(phys_addr); | 199 | return __va(phys_addr); |
200 | } | 200 | } |
201 | 201 | ||
202 | void __init __acpi_unmap_table(char *map, unsigned long size) | ||
203 | { | ||
204 | } | ||
205 | |||
202 | /* -------------------------------------------------------------------------- | 206 | /* -------------------------------------------------------------------------- |
203 | Boot-time Table Parsing | 207 | Boot-time Table Parsing |
204 | -------------------------------------------------------------------------- */ | 208 | -------------------------------------------------------------------------- */ |
diff --git a/arch/ia64/kernel/iosapic.c b/arch/ia64/kernel/iosapic.c index e13125058bed..166e0d839fa0 100644 --- a/arch/ia64/kernel/iosapic.c +++ b/arch/ia64/kernel/iosapic.c | |||
@@ -880,7 +880,7 @@ iosapic_unregister_intr (unsigned int gsi) | |||
880 | if (iosapic_intr_info[irq].count == 0) { | 880 | if (iosapic_intr_info[irq].count == 0) { |
881 | #ifdef CONFIG_SMP | 881 | #ifdef CONFIG_SMP |
882 | /* Clear affinity */ | 882 | /* Clear affinity */ |
883 | cpus_setall(idesc->affinity); | 883 | cpumask_setall(idesc->affinity); |
884 | #endif | 884 | #endif |
885 | /* Clear the interrupt information */ | 885 | /* Clear the interrupt information */ |
886 | iosapic_intr_info[irq].dest = 0; | 886 | iosapic_intr_info[irq].dest = 0; |
diff --git a/arch/ia64/kernel/irq.c b/arch/ia64/kernel/irq.c index a58f64ca9f0e..7429752ef5ad 100644 --- a/arch/ia64/kernel/irq.c +++ b/arch/ia64/kernel/irq.c | |||
@@ -80,7 +80,7 @@ int show_interrupts(struct seq_file *p, void *v) | |||
80 | seq_printf(p, "%10u ", kstat_irqs(i)); | 80 | seq_printf(p, "%10u ", kstat_irqs(i)); |
81 | #else | 81 | #else |
82 | for_each_online_cpu(j) { | 82 | for_each_online_cpu(j) { |
83 | seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]); | 83 | seq_printf(p, "%10u ", kstat_irqs_cpu(i, j)); |
84 | } | 84 | } |
85 | #endif | 85 | #endif |
86 | seq_printf(p, " %14s", irq_desc[i].chip->name); | 86 | seq_printf(p, " %14s", irq_desc[i].chip->name); |
@@ -103,7 +103,7 @@ static char irq_redir [NR_IRQS]; // = { [0 ... NR_IRQS-1] = 1 }; | |||
103 | void set_irq_affinity_info (unsigned int irq, int hwid, int redir) | 103 | void set_irq_affinity_info (unsigned int irq, int hwid, int redir) |
104 | { | 104 | { |
105 | if (irq < NR_IRQS) { | 105 | if (irq < NR_IRQS) { |
106 | cpumask_copy(&irq_desc[irq].affinity, | 106 | cpumask_copy(irq_desc[irq].affinity, |
107 | cpumask_of(cpu_logical_id(hwid))); | 107 | cpumask_of(cpu_logical_id(hwid))); |
108 | irq_redir[irq] = (char) (redir & 0xff); | 108 | irq_redir[irq] = (char) (redir & 0xff); |
109 | } | 109 | } |
@@ -148,7 +148,7 @@ static void migrate_irqs(void) | |||
148 | if (desc->status == IRQ_PER_CPU) | 148 | if (desc->status == IRQ_PER_CPU) |
149 | continue; | 149 | continue; |
150 | 150 | ||
151 | if (cpumask_any_and(&irq_desc[irq].affinity, cpu_online_mask) | 151 | if (cpumask_any_and(irq_desc[irq].affinity, cpu_online_mask) |
152 | >= nr_cpu_ids) { | 152 | >= nr_cpu_ids) { |
153 | /* | 153 | /* |
154 | * Save it for phase 2 processing | 154 | * Save it for phase 2 processing |
diff --git a/arch/ia64/kernel/irq_ia64.c b/arch/ia64/kernel/irq_ia64.c index 28d3d483db92..acc4d19ae62a 100644 --- a/arch/ia64/kernel/irq_ia64.c +++ b/arch/ia64/kernel/irq_ia64.c | |||
@@ -493,14 +493,15 @@ ia64_handle_irq (ia64_vector vector, struct pt_regs *regs) | |||
493 | saved_tpr = ia64_getreg(_IA64_REG_CR_TPR); | 493 | saved_tpr = ia64_getreg(_IA64_REG_CR_TPR); |
494 | ia64_srlz_d(); | 494 | ia64_srlz_d(); |
495 | while (vector != IA64_SPURIOUS_INT_VECTOR) { | 495 | while (vector != IA64_SPURIOUS_INT_VECTOR) { |
496 | int irq = local_vector_to_irq(vector); | ||
497 | struct irq_desc *desc = irq_to_desc(irq); | ||
498 | |||
496 | if (unlikely(IS_LOCAL_TLB_FLUSH(vector))) { | 499 | if (unlikely(IS_LOCAL_TLB_FLUSH(vector))) { |
497 | smp_local_flush_tlb(); | 500 | smp_local_flush_tlb(); |
498 | kstat_this_cpu.irqs[vector]++; | 501 | kstat_incr_irqs_this_cpu(irq, desc); |
499 | } else if (unlikely(IS_RESCHEDULE(vector))) | 502 | } else if (unlikely(IS_RESCHEDULE(vector))) { |
500 | kstat_this_cpu.irqs[vector]++; | 503 | kstat_incr_irqs_this_cpu(irq, desc); |
501 | else { | 504 | } else { |
502 | int irq = local_vector_to_irq(vector); | ||
503 | |||
504 | ia64_setreg(_IA64_REG_CR_TPR, vector); | 505 | ia64_setreg(_IA64_REG_CR_TPR, vector); |
505 | ia64_srlz_d(); | 506 | ia64_srlz_d(); |
506 | 507 | ||
@@ -543,22 +544,24 @@ void ia64_process_pending_intr(void) | |||
543 | 544 | ||
544 | vector = ia64_get_ivr(); | 545 | vector = ia64_get_ivr(); |
545 | 546 | ||
546 | irq_enter(); | 547 | irq_enter(); |
547 | saved_tpr = ia64_getreg(_IA64_REG_CR_TPR); | 548 | saved_tpr = ia64_getreg(_IA64_REG_CR_TPR); |
548 | ia64_srlz_d(); | 549 | ia64_srlz_d(); |
549 | 550 | ||
550 | /* | 551 | /* |
551 | * Perform normal interrupt style processing | 552 | * Perform normal interrupt style processing |
552 | */ | 553 | */ |
553 | while (vector != IA64_SPURIOUS_INT_VECTOR) { | 554 | while (vector != IA64_SPURIOUS_INT_VECTOR) { |
555 | int irq = local_vector_to_irq(vector); | ||
556 | struct irq_desc *desc = irq_to_desc(irq); | ||
557 | |||
554 | if (unlikely(IS_LOCAL_TLB_FLUSH(vector))) { | 558 | if (unlikely(IS_LOCAL_TLB_FLUSH(vector))) { |
555 | smp_local_flush_tlb(); | 559 | smp_local_flush_tlb(); |
556 | kstat_this_cpu.irqs[vector]++; | 560 | kstat_incr_irqs_this_cpu(irq, desc); |
557 | } else if (unlikely(IS_RESCHEDULE(vector))) | 561 | } else if (unlikely(IS_RESCHEDULE(vector))) { |
558 | kstat_this_cpu.irqs[vector]++; | 562 | kstat_incr_irqs_this_cpu(irq, desc); |
559 | else { | 563 | } else { |
560 | struct pt_regs *old_regs = set_irq_regs(NULL); | 564 | struct pt_regs *old_regs = set_irq_regs(NULL); |
561 | int irq = local_vector_to_irq(vector); | ||
562 | 565 | ||
563 | ia64_setreg(_IA64_REG_CR_TPR, vector); | 566 | ia64_setreg(_IA64_REG_CR_TPR, vector); |
564 | ia64_srlz_d(); | 567 | ia64_srlz_d(); |
diff --git a/arch/ia64/kernel/msi_ia64.c b/arch/ia64/kernel/msi_ia64.c index 890339339035..2b15e233f7fe 100644 --- a/arch/ia64/kernel/msi_ia64.c +++ b/arch/ia64/kernel/msi_ia64.c | |||
@@ -7,44 +7,7 @@ | |||
7 | #include <linux/msi.h> | 7 | #include <linux/msi.h> |
8 | #include <linux/dmar.h> | 8 | #include <linux/dmar.h> |
9 | #include <asm/smp.h> | 9 | #include <asm/smp.h> |
10 | 10 | #include <asm/msidef.h> | |
11 | /* | ||
12 | * Shifts for APIC-based data | ||
13 | */ | ||
14 | |||
15 | #define MSI_DATA_VECTOR_SHIFT 0 | ||
16 | #define MSI_DATA_VECTOR(v) (((u8)v) << MSI_DATA_VECTOR_SHIFT) | ||
17 | #define MSI_DATA_VECTOR_MASK 0xffffff00 | ||
18 | |||
19 | #define MSI_DATA_DELIVERY_SHIFT 8 | ||
20 | #define MSI_DATA_DELIVERY_FIXED (0 << MSI_DATA_DELIVERY_SHIFT) | ||
21 | #define MSI_DATA_DELIVERY_LOWPRI (1 << MSI_DATA_DELIVERY_SHIFT) | ||
22 | |||
23 | #define MSI_DATA_LEVEL_SHIFT 14 | ||
24 | #define MSI_DATA_LEVEL_DEASSERT (0 << MSI_DATA_LEVEL_SHIFT) | ||
25 | #define MSI_DATA_LEVEL_ASSERT (1 << MSI_DATA_LEVEL_SHIFT) | ||
26 | |||
27 | #define MSI_DATA_TRIGGER_SHIFT 15 | ||
28 | #define MSI_DATA_TRIGGER_EDGE (0 << MSI_DATA_TRIGGER_SHIFT) | ||
29 | #define MSI_DATA_TRIGGER_LEVEL (1 << MSI_DATA_TRIGGER_SHIFT) | ||
30 | |||
31 | /* | ||
32 | * Shift/mask fields for APIC-based bus address | ||
33 | */ | ||
34 | |||
35 | #define MSI_TARGET_CPU_SHIFT 4 | ||
36 | #define MSI_ADDR_HEADER 0xfee00000 | ||
37 | |||
38 | #define MSI_ADDR_DESTID_MASK 0xfff0000f | ||
39 | #define MSI_ADDR_DESTID_CPU(cpu) ((cpu) << MSI_TARGET_CPU_SHIFT) | ||
40 | |||
41 | #define MSI_ADDR_DESTMODE_SHIFT 2 | ||
42 | #define MSI_ADDR_DESTMODE_PHYS (0 << MSI_ADDR_DESTMODE_SHIFT) | ||
43 | #define MSI_ADDR_DESTMODE_LOGIC (1 << MSI_ADDR_DESTMODE_SHIFT) | ||
44 | |||
45 | #define MSI_ADDR_REDIRECTION_SHIFT 3 | ||
46 | #define MSI_ADDR_REDIRECTION_CPU (0 << MSI_ADDR_REDIRECTION_SHIFT) | ||
47 | #define MSI_ADDR_REDIRECTION_LOWPRI (1 << MSI_ADDR_REDIRECTION_SHIFT) | ||
48 | 11 | ||
49 | static struct irq_chip ia64_msi_chip; | 12 | static struct irq_chip ia64_msi_chip; |
50 | 13 | ||
@@ -65,8 +28,8 @@ static void ia64_set_msi_irq_affinity(unsigned int irq, | |||
65 | read_msi_msg(irq, &msg); | 28 | read_msi_msg(irq, &msg); |
66 | 29 | ||
67 | addr = msg.address_lo; | 30 | addr = msg.address_lo; |
68 | addr &= MSI_ADDR_DESTID_MASK; | 31 | addr &= MSI_ADDR_DEST_ID_MASK; |
69 | addr |= MSI_ADDR_DESTID_CPU(cpu_physical_id(cpu)); | 32 | addr |= MSI_ADDR_DEST_ID_CPU(cpu_physical_id(cpu)); |
70 | msg.address_lo = addr; | 33 | msg.address_lo = addr; |
71 | 34 | ||
72 | data = msg.data; | 35 | data = msg.data; |
@@ -75,7 +38,7 @@ static void ia64_set_msi_irq_affinity(unsigned int irq, | |||
75 | msg.data = data; | 38 | msg.data = data; |
76 | 39 | ||
77 | write_msi_msg(irq, &msg); | 40 | write_msi_msg(irq, &msg); |
78 | irq_desc[irq].affinity = cpumask_of_cpu(cpu); | 41 | cpumask_copy(irq_desc[irq].affinity, cpumask_of(cpu)); |
79 | } | 42 | } |
80 | #endif /* CONFIG_SMP */ | 43 | #endif /* CONFIG_SMP */ |
81 | 44 | ||
@@ -98,9 +61,9 @@ int ia64_setup_msi_irq(struct pci_dev *pdev, struct msi_desc *desc) | |||
98 | msg.address_hi = 0; | 61 | msg.address_hi = 0; |
99 | msg.address_lo = | 62 | msg.address_lo = |
100 | MSI_ADDR_HEADER | | 63 | MSI_ADDR_HEADER | |
101 | MSI_ADDR_DESTMODE_PHYS | | 64 | MSI_ADDR_DEST_MODE_PHYS | |
102 | MSI_ADDR_REDIRECTION_CPU | | 65 | MSI_ADDR_REDIRECTION_CPU | |
103 | MSI_ADDR_DESTID_CPU(dest_phys_id); | 66 | MSI_ADDR_DEST_ID_CPU(dest_phys_id); |
104 | 67 | ||
105 | msg.data = | 68 | msg.data = |
106 | MSI_DATA_TRIGGER_EDGE | | 69 | MSI_DATA_TRIGGER_EDGE | |
@@ -183,11 +146,11 @@ static void dmar_msi_set_affinity(unsigned int irq, const struct cpumask *mask) | |||
183 | 146 | ||
184 | msg.data &= ~MSI_DATA_VECTOR_MASK; | 147 | msg.data &= ~MSI_DATA_VECTOR_MASK; |
185 | msg.data |= MSI_DATA_VECTOR(cfg->vector); | 148 | msg.data |= MSI_DATA_VECTOR(cfg->vector); |
186 | msg.address_lo &= ~MSI_ADDR_DESTID_MASK; | 149 | msg.address_lo &= ~MSI_ADDR_DEST_ID_MASK; |
187 | msg.address_lo |= MSI_ADDR_DESTID_CPU(cpu_physical_id(cpu)); | 150 | msg.address_lo |= MSI_ADDR_DEST_ID_CPU(cpu_physical_id(cpu)); |
188 | 151 | ||
189 | dmar_msi_write(irq, &msg); | 152 | dmar_msi_write(irq, &msg); |
190 | irq_desc[irq].affinity = *mask; | 153 | cpumask_copy(irq_desc[irq].affinity, mask); |
191 | } | 154 | } |
192 | #endif /* CONFIG_SMP */ | 155 | #endif /* CONFIG_SMP */ |
193 | 156 | ||
@@ -215,9 +178,9 @@ msi_compose_msg(struct pci_dev *pdev, unsigned int irq, struct msi_msg *msg) | |||
215 | msg->address_hi = 0; | 178 | msg->address_hi = 0; |
216 | msg->address_lo = | 179 | msg->address_lo = |
217 | MSI_ADDR_HEADER | | 180 | MSI_ADDR_HEADER | |
218 | MSI_ADDR_DESTMODE_PHYS | | 181 | MSI_ADDR_DEST_MODE_PHYS | |
219 | MSI_ADDR_REDIRECTION_CPU | | 182 | MSI_ADDR_REDIRECTION_CPU | |
220 | MSI_ADDR_DESTID_CPU(dest); | 183 | MSI_ADDR_DEST_ID_CPU(dest); |
221 | 184 | ||
222 | msg->data = | 185 | msg->data = |
223 | MSI_DATA_TRIGGER_EDGE | | 186 | MSI_DATA_TRIGGER_EDGE | |
diff --git a/arch/ia64/kernel/perfmon.c b/arch/ia64/kernel/perfmon.c index 0e499757309b..5c0f408cfd71 100644 --- a/arch/ia64/kernel/perfmon.c +++ b/arch/ia64/kernel/perfmon.c | |||
@@ -2196,7 +2196,7 @@ pfmfs_delete_dentry(struct dentry *dentry) | |||
2196 | return 1; | 2196 | return 1; |
2197 | } | 2197 | } |
2198 | 2198 | ||
2199 | static struct dentry_operations pfmfs_dentry_operations = { | 2199 | static const struct dentry_operations pfmfs_dentry_operations = { |
2200 | .d_delete = pfmfs_delete_dentry, | 2200 | .d_delete = pfmfs_delete_dentry, |
2201 | }; | 2201 | }; |
2202 | 2202 | ||
diff --git a/arch/ia64/kernel/vmlinux.lds.S b/arch/ia64/kernel/vmlinux.lds.S index 10a7d47e8510..3765efc5f963 100644 --- a/arch/ia64/kernel/vmlinux.lds.S +++ b/arch/ia64/kernel/vmlinux.lds.S | |||
@@ -213,16 +213,9 @@ SECTIONS | |||
213 | { *(.data.cacheline_aligned) } | 213 | { *(.data.cacheline_aligned) } |
214 | 214 | ||
215 | /* Per-cpu data: */ | 215 | /* Per-cpu data: */ |
216 | percpu : { } :percpu | ||
217 | . = ALIGN(PERCPU_PAGE_SIZE); | 216 | . = ALIGN(PERCPU_PAGE_SIZE); |
218 | __phys_per_cpu_start = .; | 217 | PERCPU_VADDR(PERCPU_ADDR, :percpu) |
219 | .data.percpu PERCPU_ADDR : AT(__phys_per_cpu_start - LOAD_OFFSET) | 218 | __phys_per_cpu_start = __per_cpu_load; |
220 | { | ||
221 | __per_cpu_start = .; | ||
222 | *(.data.percpu) | ||
223 | *(.data.percpu.shared_aligned) | ||
224 | __per_cpu_end = .; | ||
225 | } | ||
226 | . = __phys_per_cpu_start + PERCPU_PAGE_SIZE; /* ensure percpu data fits | 219 | . = __phys_per_cpu_start + PERCPU_PAGE_SIZE; /* ensure percpu data fits |
227 | * into percpu page size | 220 | * into percpu page size |
228 | */ | 221 | */ |