aboutsummaryrefslogtreecommitdiffstats
path: root/arch/ia64
diff options
context:
space:
mode:
Diffstat (limited to 'arch/ia64')
-rw-r--r--arch/ia64/include/asm/iommu.h2
-rw-r--r--arch/ia64/include/asm/kvm.h1
-rw-r--r--arch/ia64/kernel/ia64_ksyms.c2
-rw-r--r--arch/ia64/kernel/pci-dma.c1
-rw-r--r--arch/ia64/kernel/smpboot.c2
-rw-r--r--arch/ia64/kvm/Kconfig1
-rw-r--r--arch/ia64/kvm/vmm.c6
-rw-r--r--arch/ia64/mm/fault.c46
-rw-r--r--arch/ia64/pci/pci.c13
9 files changed, 43 insertions, 31 deletions
diff --git a/arch/ia64/include/asm/iommu.h b/arch/ia64/include/asm/iommu.h
index b6a809fa2995..105c93b00b1b 100644
--- a/arch/ia64/include/asm/iommu.h
+++ b/arch/ia64/include/asm/iommu.h
@@ -11,12 +11,10 @@ extern void no_iommu_init(void);
11extern int force_iommu, no_iommu; 11extern int force_iommu, no_iommu;
12extern int iommu_pass_through; 12extern int iommu_pass_through;
13extern int iommu_detected; 13extern int iommu_detected;
14extern int iommu_group_mf;
15#else 14#else
16#define iommu_pass_through (0) 15#define iommu_pass_through (0)
17#define no_iommu (1) 16#define no_iommu (1)
18#define iommu_detected (0) 17#define iommu_detected (0)
19#define iommu_group_mf (0)
20#endif 18#endif
21extern void iommu_dma_init(void); 19extern void iommu_dma_init(void);
22extern void machvec_init(const char *name); 20extern void machvec_init(const char *name);
diff --git a/arch/ia64/include/asm/kvm.h b/arch/ia64/include/asm/kvm.h
index b9f82c84f093..ec6c6b301238 100644
--- a/arch/ia64/include/asm/kvm.h
+++ b/arch/ia64/include/asm/kvm.h
@@ -26,6 +26,7 @@
26 26
27/* Select x86 specific features in <linux/kvm.h> */ 27/* Select x86 specific features in <linux/kvm.h> */
28#define __KVM_HAVE_IOAPIC 28#define __KVM_HAVE_IOAPIC
29#define __KVM_HAVE_IRQ_LINE
29#define __KVM_HAVE_DEVICE_ASSIGNMENT 30#define __KVM_HAVE_DEVICE_ASSIGNMENT
30 31
31/* Architectural interrupt line count. */ 32/* Architectural interrupt line count. */
diff --git a/arch/ia64/kernel/ia64_ksyms.c b/arch/ia64/kernel/ia64_ksyms.c
index 7f4a0ed24152..5b7791dd3965 100644
--- a/arch/ia64/kernel/ia64_ksyms.c
+++ b/arch/ia64/kernel/ia64_ksyms.c
@@ -12,7 +12,7 @@ EXPORT_SYMBOL(memset);
12EXPORT_SYMBOL(memcpy); 12EXPORT_SYMBOL(memcpy);
13EXPORT_SYMBOL(strlen); 13EXPORT_SYMBOL(strlen);
14 14
15#include<asm/pgtable.h> 15#include <asm/pgtable.h>
16EXPORT_SYMBOL_GPL(empty_zero_page); 16EXPORT_SYMBOL_GPL(empty_zero_page);
17 17
18#include <asm/checksum.h> 18#include <asm/checksum.h>
diff --git a/arch/ia64/kernel/pci-dma.c b/arch/ia64/kernel/pci-dma.c
index 7cdc89b2483c..1ddcfe5ef353 100644
--- a/arch/ia64/kernel/pci-dma.c
+++ b/arch/ia64/kernel/pci-dma.c
@@ -32,7 +32,6 @@ int force_iommu __read_mostly;
32#endif 32#endif
33 33
34int iommu_pass_through; 34int iommu_pass_through;
35int iommu_group_mf;
36 35
37/* Dummy device used for NULL arguments (normally ISA). Better would 36/* Dummy device used for NULL arguments (normally ISA). Better would
38 be probably a smaller DMA mask, but this is bug-to-bug compatible 37 be probably a smaller DMA mask, but this is bug-to-bug compatible
diff --git a/arch/ia64/kernel/smpboot.c b/arch/ia64/kernel/smpboot.c
index 1113b8aba07f..963d2db53bfa 100644
--- a/arch/ia64/kernel/smpboot.c
+++ b/arch/ia64/kernel/smpboot.c
@@ -382,7 +382,6 @@ smp_callin (void)
382 set_numa_node(cpu_to_node_map[cpuid]); 382 set_numa_node(cpu_to_node_map[cpuid]);
383 set_numa_mem(local_memory_node(cpu_to_node_map[cpuid])); 383 set_numa_mem(local_memory_node(cpu_to_node_map[cpuid]));
384 384
385 ipi_call_lock_irq();
386 spin_lock(&vector_lock); 385 spin_lock(&vector_lock);
387 /* Setup the per cpu irq handling data structures */ 386 /* Setup the per cpu irq handling data structures */
388 __setup_vector_irq(cpuid); 387 __setup_vector_irq(cpuid);
@@ -390,7 +389,6 @@ smp_callin (void)
390 set_cpu_online(cpuid, true); 389 set_cpu_online(cpuid, true);
391 per_cpu(cpu_state, cpuid) = CPU_ONLINE; 390 per_cpu(cpu_state, cpuid) = CPU_ONLINE;
392 spin_unlock(&vector_lock); 391 spin_unlock(&vector_lock);
393 ipi_call_unlock_irq();
394 392
395 smp_setup_percpu_timer(); 393 smp_setup_percpu_timer();
396 394
diff --git a/arch/ia64/kvm/Kconfig b/arch/ia64/kvm/Kconfig
index 9806e55f91be..df5351e3eed7 100644
--- a/arch/ia64/kvm/Kconfig
+++ b/arch/ia64/kvm/Kconfig
@@ -19,6 +19,7 @@ if VIRTUALIZATION
19 19
20config KVM 20config KVM
21 tristate "Kernel-based Virtual Machine (KVM) support" 21 tristate "Kernel-based Virtual Machine (KVM) support"
22 depends on BROKEN
22 depends on HAVE_KVM && MODULES && EXPERIMENTAL 23 depends on HAVE_KVM && MODULES && EXPERIMENTAL
23 # for device assignment: 24 # for device assignment:
24 depends on PCI 25 depends on PCI
diff --git a/arch/ia64/kvm/vmm.c b/arch/ia64/kvm/vmm.c
index f0b9cac82414..176a12cd56de 100644
--- a/arch/ia64/kvm/vmm.c
+++ b/arch/ia64/kvm/vmm.c
@@ -20,9 +20,9 @@
20 */ 20 */
21 21
22 22
23#include<linux/kernel.h> 23#include <linux/kernel.h>
24#include<linux/module.h> 24#include <linux/module.h>
25#include<asm/fpswa.h> 25#include <asm/fpswa.h>
26 26
27#include "vcpu.h" 27#include "vcpu.h"
28 28
diff --git a/arch/ia64/mm/fault.c b/arch/ia64/mm/fault.c
index 02d29c2a132a..8443daf4f515 100644
--- a/arch/ia64/mm/fault.c
+++ b/arch/ia64/mm/fault.c
@@ -72,6 +72,10 @@ mapped_kernel_page_is_present (unsigned long address)
72 return pte_present(pte); 72 return pte_present(pte);
73} 73}
74 74
75# define VM_READ_BIT 0
76# define VM_WRITE_BIT 1
77# define VM_EXEC_BIT 2
78
75void __kprobes 79void __kprobes
76ia64_do_page_fault (unsigned long address, unsigned long isr, struct pt_regs *regs) 80ia64_do_page_fault (unsigned long address, unsigned long isr, struct pt_regs *regs)
77{ 81{
@@ -81,6 +85,12 @@ ia64_do_page_fault (unsigned long address, unsigned long isr, struct pt_regs *re
81 struct siginfo si; 85 struct siginfo si;
82 unsigned long mask; 86 unsigned long mask;
83 int fault; 87 int fault;
88 unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
89
90 mask = ((((isr >> IA64_ISR_X_BIT) & 1UL) << VM_EXEC_BIT)
91 | (((isr >> IA64_ISR_W_BIT) & 1UL) << VM_WRITE_BIT));
92
93 flags |= ((mask & VM_WRITE) ? FAULT_FLAG_WRITE : 0);
84 94
85 /* mmap_sem is performance critical.... */ 95 /* mmap_sem is performance critical.... */
86 prefetchw(&mm->mmap_sem); 96 prefetchw(&mm->mmap_sem);
@@ -109,6 +119,7 @@ ia64_do_page_fault (unsigned long address, unsigned long isr, struct pt_regs *re
109 if (notify_page_fault(regs, TRAP_BRKPT)) 119 if (notify_page_fault(regs, TRAP_BRKPT))
110 return; 120 return;
111 121
122retry:
112 down_read(&mm->mmap_sem); 123 down_read(&mm->mmap_sem);
113 124
114 vma = find_vma_prev(mm, address, &prev_vma); 125 vma = find_vma_prev(mm, address, &prev_vma);
@@ -130,10 +141,6 @@ ia64_do_page_fault (unsigned long address, unsigned long isr, struct pt_regs *re
130 141
131 /* OK, we've got a good vm_area for this memory area. Check the access permissions: */ 142 /* OK, we've got a good vm_area for this memory area. Check the access permissions: */
132 143
133# define VM_READ_BIT 0
134# define VM_WRITE_BIT 1
135# define VM_EXEC_BIT 2
136
137# if (((1 << VM_READ_BIT) != VM_READ || (1 << VM_WRITE_BIT) != VM_WRITE) \ 144# if (((1 << VM_READ_BIT) != VM_READ || (1 << VM_WRITE_BIT) != VM_WRITE) \
138 || (1 << VM_EXEC_BIT) != VM_EXEC) 145 || (1 << VM_EXEC_BIT) != VM_EXEC)
139# error File is out of sync with <linux/mm.h>. Please update. 146# error File is out of sync with <linux/mm.h>. Please update.
@@ -142,9 +149,6 @@ ia64_do_page_fault (unsigned long address, unsigned long isr, struct pt_regs *re
142 if (((isr >> IA64_ISR_R_BIT) & 1UL) && (!(vma->vm_flags & (VM_READ | VM_WRITE)))) 149 if (((isr >> IA64_ISR_R_BIT) & 1UL) && (!(vma->vm_flags & (VM_READ | VM_WRITE))))
143 goto bad_area; 150 goto bad_area;
144 151
145 mask = ( (((isr >> IA64_ISR_X_BIT) & 1UL) << VM_EXEC_BIT)
146 | (((isr >> IA64_ISR_W_BIT) & 1UL) << VM_WRITE_BIT));
147
148 if ((vma->vm_flags & mask) != mask) 152 if ((vma->vm_flags & mask) != mask)
149 goto bad_area; 153 goto bad_area;
150 154
@@ -153,7 +157,11 @@ ia64_do_page_fault (unsigned long address, unsigned long isr, struct pt_regs *re
153 * sure we exit gracefully rather than endlessly redo the 157 * sure we exit gracefully rather than endlessly redo the
154 * fault. 158 * fault.
155 */ 159 */
156 fault = handle_mm_fault(mm, vma, address, (mask & VM_WRITE) ? FAULT_FLAG_WRITE : 0); 160 fault = handle_mm_fault(mm, vma, address, flags);
161
162 if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
163 return;
164
157 if (unlikely(fault & VM_FAULT_ERROR)) { 165 if (unlikely(fault & VM_FAULT_ERROR)) {
158 /* 166 /*
159 * We ran out of memory, or some other thing happened 167 * We ran out of memory, or some other thing happened
@@ -168,10 +176,24 @@ ia64_do_page_fault (unsigned long address, unsigned long isr, struct pt_regs *re
168 } 176 }
169 BUG(); 177 BUG();
170 } 178 }
171 if (fault & VM_FAULT_MAJOR) 179
172 current->maj_flt++; 180 if (flags & FAULT_FLAG_ALLOW_RETRY) {
173 else 181 if (fault & VM_FAULT_MAJOR)
174 current->min_flt++; 182 current->maj_flt++;
183 else
184 current->min_flt++;
185 if (fault & VM_FAULT_RETRY) {
186 flags &= ~FAULT_FLAG_ALLOW_RETRY;
187
188 /* No need to up_read(&mm->mmap_sem) as we would
189 * have already released it in __lock_page_or_retry
190 * in mm/filemap.c.
191 */
192
193 goto retry;
194 }
195 }
196
175 up_read(&mm->mmap_sem); 197 up_read(&mm->mmap_sem);
176 return; 198 return;
177 199
diff --git a/arch/ia64/pci/pci.c b/arch/ia64/pci/pci.c
index 524df4295c90..81acc7a57f3e 100644
--- a/arch/ia64/pci/pci.c
+++ b/arch/ia64/pci/pci.c
@@ -351,6 +351,8 @@ pci_acpi_scan_root(struct acpi_pci_root *root)
351#endif 351#endif
352 352
353 INIT_LIST_HEAD(&info.resources); 353 INIT_LIST_HEAD(&info.resources);
354 /* insert busn resource at first */
355 pci_add_resource(&info.resources, &root->secondary);
354 acpi_walk_resources(device->handle, METHOD_NAME__CRS, count_window, 356 acpi_walk_resources(device->handle, METHOD_NAME__CRS, count_window,
355 &windows); 357 &windows);
356 if (windows) { 358 if (windows) {
@@ -384,7 +386,7 @@ pci_acpi_scan_root(struct acpi_pci_root *root)
384 return NULL; 386 return NULL;
385 } 387 }
386 388
387 pbus->subordinate = pci_scan_child_bus(pbus); 389 pci_scan_child_bus(pbus);
388 return pbus; 390 return pbus;
389 391
390out3: 392out3:
@@ -496,15 +498,6 @@ pcibios_align_resource (void *data, const struct resource *res,
496 return res->start; 498 return res->start;
497} 499}
498 500
499/*
500 * PCI BIOS setup, always defaults to SAL interface
501 */
502char * __init
503pcibios_setup (char *str)
504{
505 return str;
506}
507
508int 501int
509pci_mmap_page_range (struct pci_dev *dev, struct vm_area_struct *vma, 502pci_mmap_page_range (struct pci_dev *dev, struct vm_area_struct *vma,
510 enum pci_mmap_state mmap_state, int write_combine) 503 enum pci_mmap_state mmap_state, int write_combine)