diff options
| author | Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> | 2009-02-11 14:52:22 -0500 |
|---|---|---|
| committer | Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> | 2009-02-11 14:52:22 -0500 |
| commit | 9049a11de73d3ecc623f1903100d099f82ede56c (patch) | |
| tree | c03d130d58168e337a66fe999682452b7a02b42b /arch/ia64 | |
| parent | c47c1b1f3a9d6973108020df1dcab7604f7774dd (diff) | |
| parent | e4d0407185cdbdcfd99fc23bde2e5454bbc46329 (diff) | |
Merge commit 'remotes/tip/x86/paravirt' into x86/untangle2
* commit 'remotes/tip/x86/paravirt': (175 commits)
xen: use direct ops on 64-bit
xen: make direct versions of irq_enable/disable/save/restore to common code
xen: setup percpu data pointers
xen: fix 32-bit build resulting from mmu move
x86/paravirt: return full 64-bit result
x86, percpu: fix kexec with vmlinux
x86/vmi: fix interrupt enable/disable/save/restore calling convention.
x86/paravirt: don't restore second return reg
xen: setup percpu data pointers
x86: split loading percpu segments from loading gdt
x86: pass in cpu number to switch_to_new_gdt()
x86: UV fix uv_flush_send_and_wait()
x86/paravirt: fix missing callee-save call on pud_val
x86/paravirt: use callee-saved convention for pte_val/make_pte/etc
x86/paravirt: implement PVOP_CALL macros for callee-save functions
x86/paravirt: add register-saving thunks to reduce caller register pressure
x86/paravirt: selectively save/restore regs around pvops calls
x86: fix paravirt clobber in entry_64.S
x86/pvops: add a paravirt_ident functions to allow special patching
xen: move remaining mmu-related stuff into mmu.c
...
Conflicts:
arch/x86/mach-voyager/voyager_smp.c
arch/x86/mm/fault.c
Diffstat (limited to 'arch/ia64')
| -rw-r--r-- | arch/ia64/include/asm/topology.h | 2 | ||||
| -rw-r--r-- | arch/ia64/kernel/iosapic.c | 2 | ||||
| -rw-r--r-- | arch/ia64/kernel/irq.c | 4 | ||||
| -rw-r--r-- | arch/ia64/kernel/irq_ia64.c | 12 | ||||
| -rw-r--r-- | arch/ia64/kernel/msi_ia64.c | 4 | ||||
| -rw-r--r-- | arch/ia64/kernel/vmlinux.lds.S | 1 | ||||
| -rw-r--r-- | arch/ia64/sn/kernel/msi_sn.c | 2 |
7 files changed, 16 insertions, 11 deletions
diff --git a/arch/ia64/include/asm/topology.h b/arch/ia64/include/asm/topology.h index 32f3af1641c5..3193f4417e16 100644 --- a/arch/ia64/include/asm/topology.h +++ b/arch/ia64/include/asm/topology.h | |||
| @@ -84,7 +84,7 @@ void build_cpu_to_node_map(void); | |||
| 84 | .child = NULL, \ | 84 | .child = NULL, \ |
| 85 | .groups = NULL, \ | 85 | .groups = NULL, \ |
| 86 | .min_interval = 8, \ | 86 | .min_interval = 8, \ |
| 87 | .max_interval = 8*(min(num_online_cpus(), 32)), \ | 87 | .max_interval = 8*(min(num_online_cpus(), 32U)), \ |
| 88 | .busy_factor = 64, \ | 88 | .busy_factor = 64, \ |
| 89 | .imbalance_pct = 125, \ | 89 | .imbalance_pct = 125, \ |
| 90 | .cache_nice_tries = 2, \ | 90 | .cache_nice_tries = 2, \ |
diff --git a/arch/ia64/kernel/iosapic.c b/arch/ia64/kernel/iosapic.c index 5cfd3d91001a..006ad366a454 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..226233a6fa19 100644 --- a/arch/ia64/kernel/irq.c +++ b/arch/ia64/kernel/irq.c | |||
| @@ -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..927ad027820c 100644 --- a/arch/ia64/kernel/irq_ia64.c +++ b/arch/ia64/kernel/irq_ia64.c | |||
| @@ -493,11 +493,13 @@ 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 | struct irq_desc *desc = irq_to_desc(vector); | ||
| 497 | |||
| 496 | if (unlikely(IS_LOCAL_TLB_FLUSH(vector))) { | 498 | if (unlikely(IS_LOCAL_TLB_FLUSH(vector))) { |
| 497 | smp_local_flush_tlb(); | 499 | smp_local_flush_tlb(); |
| 498 | kstat_this_cpu.irqs[vector]++; | 500 | kstat_incr_irqs_this_cpu(vector, desc); |
| 499 | } else if (unlikely(IS_RESCHEDULE(vector))) | 501 | } else if (unlikely(IS_RESCHEDULE(vector))) |
| 500 | kstat_this_cpu.irqs[vector]++; | 502 | kstat_incr_irqs_this_cpu(vector, desc); |
| 501 | else { | 503 | else { |
| 502 | int irq = local_vector_to_irq(vector); | 504 | int irq = local_vector_to_irq(vector); |
| 503 | 505 | ||
| @@ -551,11 +553,13 @@ void ia64_process_pending_intr(void) | |||
| 551 | * Perform normal interrupt style processing | 553 | * Perform normal interrupt style processing |
| 552 | */ | 554 | */ |
| 553 | while (vector != IA64_SPURIOUS_INT_VECTOR) { | 555 | while (vector != IA64_SPURIOUS_INT_VECTOR) { |
| 556 | struct irq_desc *desc = irq_to_desc(vector); | ||
| 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(vector, 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(vector, 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); | 565 | int irq = local_vector_to_irq(vector); |
diff --git a/arch/ia64/kernel/msi_ia64.c b/arch/ia64/kernel/msi_ia64.c index 890339339035..dcb6b7c51ea7 100644 --- a/arch/ia64/kernel/msi_ia64.c +++ b/arch/ia64/kernel/msi_ia64.c | |||
| @@ -75,7 +75,7 @@ static void ia64_set_msi_irq_affinity(unsigned int irq, | |||
| 75 | msg.data = data; | 75 | msg.data = data; |
| 76 | 76 | ||
| 77 | write_msi_msg(irq, &msg); | 77 | write_msi_msg(irq, &msg); |
| 78 | irq_desc[irq].affinity = cpumask_of_cpu(cpu); | 78 | cpumask_copy(irq_desc[irq].affinity, cpumask_of(cpu)); |
| 79 | } | 79 | } |
| 80 | #endif /* CONFIG_SMP */ | 80 | #endif /* CONFIG_SMP */ |
| 81 | 81 | ||
| @@ -187,7 +187,7 @@ static void dmar_msi_set_affinity(unsigned int irq, const struct cpumask *mask) | |||
| 187 | msg.address_lo |= MSI_ADDR_DESTID_CPU(cpu_physical_id(cpu)); | 187 | msg.address_lo |= MSI_ADDR_DESTID_CPU(cpu_physical_id(cpu)); |
| 188 | 188 | ||
| 189 | dmar_msi_write(irq, &msg); | 189 | dmar_msi_write(irq, &msg); |
| 190 | irq_desc[irq].affinity = *mask; | 190 | cpumask_copy(irq_desc[irq].affinity, mask); |
| 191 | } | 191 | } |
| 192 | #endif /* CONFIG_SMP */ | 192 | #endif /* CONFIG_SMP */ |
| 193 | 193 | ||
diff --git a/arch/ia64/kernel/vmlinux.lds.S b/arch/ia64/kernel/vmlinux.lds.S index 10a7d47e8510..f45e4e508eca 100644 --- a/arch/ia64/kernel/vmlinux.lds.S +++ b/arch/ia64/kernel/vmlinux.lds.S | |||
| @@ -219,6 +219,7 @@ SECTIONS | |||
| 219 | .data.percpu PERCPU_ADDR : AT(__phys_per_cpu_start - LOAD_OFFSET) | 219 | .data.percpu PERCPU_ADDR : AT(__phys_per_cpu_start - LOAD_OFFSET) |
| 220 | { | 220 | { |
| 221 | __per_cpu_start = .; | 221 | __per_cpu_start = .; |
| 222 | *(.data.percpu.page_aligned) | ||
| 222 | *(.data.percpu) | 223 | *(.data.percpu) |
| 223 | *(.data.percpu.shared_aligned) | 224 | *(.data.percpu.shared_aligned) |
| 224 | __per_cpu_end = .; | 225 | __per_cpu_end = .; |
diff --git a/arch/ia64/sn/kernel/msi_sn.c b/arch/ia64/sn/kernel/msi_sn.c index ca553b0429ce..81e428943d73 100644 --- a/arch/ia64/sn/kernel/msi_sn.c +++ b/arch/ia64/sn/kernel/msi_sn.c | |||
| @@ -205,7 +205,7 @@ static void sn_set_msi_irq_affinity(unsigned int irq, | |||
| 205 | msg.address_lo = (u32)(bus_addr & 0x00000000ffffffff); | 205 | msg.address_lo = (u32)(bus_addr & 0x00000000ffffffff); |
| 206 | 206 | ||
| 207 | write_msi_msg(irq, &msg); | 207 | write_msi_msg(irq, &msg); |
| 208 | irq_desc[irq].affinity = *cpu_mask; | 208 | cpumask_copy(irq_desc[irq].affinity, cpu_mask); |
| 209 | } | 209 | } |
| 210 | #endif /* CONFIG_SMP */ | 210 | #endif /* CONFIG_SMP */ |
| 211 | 211 | ||
