diff options
Diffstat (limited to 'arch/ia64')
-rw-r--r-- | arch/ia64/include/asm/iommu.h | 2 | ||||
-rw-r--r-- | arch/ia64/include/asm/kvm.h | 1 | ||||
-rw-r--r-- | arch/ia64/kernel/ia64_ksyms.c | 2 | ||||
-rw-r--r-- | arch/ia64/kernel/pci-dma.c | 1 | ||||
-rw-r--r-- | arch/ia64/kernel/smpboot.c | 2 | ||||
-rw-r--r-- | arch/ia64/kvm/Kconfig | 1 | ||||
-rw-r--r-- | arch/ia64/kvm/vmm.c | 6 | ||||
-rw-r--r-- | arch/ia64/mm/fault.c | 46 | ||||
-rw-r--r-- | arch/ia64/pci/pci.c | 13 |
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); | |||
11 | extern int force_iommu, no_iommu; | 11 | extern int force_iommu, no_iommu; |
12 | extern int iommu_pass_through; | 12 | extern int iommu_pass_through; |
13 | extern int iommu_detected; | 13 | extern int iommu_detected; |
14 | extern 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 |
21 | extern void iommu_dma_init(void); | 19 | extern void iommu_dma_init(void); |
22 | extern void machvec_init(const char *name); | 20 | extern 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); | |||
12 | EXPORT_SYMBOL(memcpy); | 12 | EXPORT_SYMBOL(memcpy); |
13 | EXPORT_SYMBOL(strlen); | 13 | EXPORT_SYMBOL(strlen); |
14 | 14 | ||
15 | #include<asm/pgtable.h> | 15 | #include <asm/pgtable.h> |
16 | EXPORT_SYMBOL_GPL(empty_zero_page); | 16 | EXPORT_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 | ||
34 | int iommu_pass_through; | 34 | int iommu_pass_through; |
35 | int 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 | ||
20 | config KVM | 20 | config 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 | |||
75 | void __kprobes | 79 | void __kprobes |
76 | ia64_do_page_fault (unsigned long address, unsigned long isr, struct pt_regs *regs) | 80 | ia64_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 | ||
122 | retry: | ||
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 | ||
390 | out3: | 392 | out3: |
@@ -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 | */ | ||
502 | char * __init | ||
503 | pcibios_setup (char *str) | ||
504 | { | ||
505 | return str; | ||
506 | } | ||
507 | |||
508 | int | 501 | int |
509 | pci_mmap_page_range (struct pci_dev *dev, struct vm_area_struct *vma, | 502 | pci_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) |