diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/kernel/sys_oabi-compat.c | 19 | ||||
-rw-r--r-- | arch/frv/kernel/setup.c | 1 | ||||
-rw-r--r-- | arch/ia64/include/asm/paravirt_privop.h | 2 | ||||
-rw-r--r-- | arch/ia64/kernel/smp.c | 14 | ||||
-rw-r--r-- | arch/s390/kernel/compat_linux.c | 18 | ||||
-rw-r--r-- | arch/sparc/kernel/sys_sparc32.c | 19 | ||||
-rw-r--r-- | arch/x86/ia32/sys_ia32.c | 19 | ||||
-rw-r--r-- | arch/x86/include/asm/lguest_hcall.h | 2 | ||||
-rw-r--r-- | arch/x86/lguest/boot.c | 16 |
9 files changed, 36 insertions, 74 deletions
diff --git a/arch/arm/kernel/sys_oabi-compat.c b/arch/arm/kernel/sys_oabi-compat.c index e04173c7e621..d59a0cd537f0 100644 --- a/arch/arm/kernel/sys_oabi-compat.c +++ b/arch/arm/kernel/sys_oabi-compat.c | |||
@@ -177,21 +177,12 @@ asmlinkage long sys_oabi_fstatat64(int dfd, | |||
177 | int flag) | 177 | int flag) |
178 | { | 178 | { |
179 | struct kstat stat; | 179 | struct kstat stat; |
180 | int error = -EINVAL; | 180 | int error; |
181 | 181 | ||
182 | if ((flag & ~AT_SYMLINK_NOFOLLOW) != 0) | 182 | error = vfs_fstatat(dfd, filename, &stat, flag); |
183 | goto out; | 183 | if (error) |
184 | 184 | return error; | |
185 | if (flag & AT_SYMLINK_NOFOLLOW) | 185 | return cp_oldabi_stat64(&stat, statbuf); |
186 | error = vfs_lstat_fd(dfd, filename, &stat); | ||
187 | else | ||
188 | error = vfs_stat_fd(dfd, filename, &stat); | ||
189 | |||
190 | if (!error) | ||
191 | error = cp_oldabi_stat64(&stat, statbuf); | ||
192 | |||
193 | out: | ||
194 | return error; | ||
195 | } | 186 | } |
196 | 187 | ||
197 | struct oabi_flock64 { | 188 | struct oabi_flock64 { |
diff --git a/arch/frv/kernel/setup.c b/arch/frv/kernel/setup.c index 0669e1382383..55e4fab7c0bc 100644 --- a/arch/frv/kernel/setup.c +++ b/arch/frv/kernel/setup.c | |||
@@ -46,7 +46,6 @@ | |||
46 | #include <asm/io.h> | 46 | #include <asm/io.h> |
47 | 47 | ||
48 | #ifdef CONFIG_BLK_DEV_INITRD | 48 | #ifdef CONFIG_BLK_DEV_INITRD |
49 | #include <linux/blk.h> | ||
50 | #include <asm/pgtable.h> | 49 | #include <asm/pgtable.h> |
51 | #endif | 50 | #endif |
52 | 51 | ||
diff --git a/arch/ia64/include/asm/paravirt_privop.h b/arch/ia64/include/asm/paravirt_privop.h index 3d2951130b5f..8f6cb11c9fae 100644 --- a/arch/ia64/include/asm/paravirt_privop.h +++ b/arch/ia64/include/asm/paravirt_privop.h | |||
@@ -445,7 +445,6 @@ paravirt_set_rr0_to_rr4(unsigned long val0, unsigned long val1, | |||
445 | register unsigned long ia64_intri_res asm ("r8"); \ | 445 | register unsigned long ia64_intri_res asm ("r8"); \ |
446 | register unsigned long __reg asm ("r8") = (reg); \ | 446 | register unsigned long __reg asm ("r8") = (reg); \ |
447 | \ | 447 | \ |
448 | BUILD_BUG_ON(!__builtin_constant_p(reg)); \ | ||
449 | asm volatile (paravirt_alt_bundle(__PARAVIRT_BR, \ | 448 | asm volatile (paravirt_alt_bundle(__PARAVIRT_BR, \ |
450 | PARAVIRT_TYPE(GETREG) \ | 449 | PARAVIRT_TYPE(GETREG) \ |
451 | + (reg)) \ | 450 | + (reg)) \ |
@@ -464,7 +463,6 @@ paravirt_set_rr0_to_rr4(unsigned long val0, unsigned long val1, | |||
464 | register unsigned long ia64_clobber1 asm ("r8"); \ | 463 | register unsigned long ia64_clobber1 asm ("r8"); \ |
465 | register unsigned long ia64_clobber2 asm ("r9"); \ | 464 | register unsigned long ia64_clobber2 asm ("r9"); \ |
466 | \ | 465 | \ |
467 | BUILD_BUG_ON(!__builtin_constant_p(reg)); \ | ||
468 | asm volatile (paravirt_alt_bundle(__PARAVIRT_BR, \ | 466 | asm volatile (paravirt_alt_bundle(__PARAVIRT_BR, \ |
469 | PARAVIRT_TYPE(SETREG) \ | 467 | PARAVIRT_TYPE(SETREG) \ |
470 | + (reg)) \ | 468 | + (reg)) \ |
diff --git a/arch/ia64/kernel/smp.c b/arch/ia64/kernel/smp.c index 2ea4199d9c57..5230eaafd83f 100644 --- a/arch/ia64/kernel/smp.c +++ b/arch/ia64/kernel/smp.c | |||
@@ -225,6 +225,7 @@ smp_send_reschedule (int cpu) | |||
225 | { | 225 | { |
226 | platform_send_ipi(cpu, IA64_IPI_RESCHEDULE, IA64_IPI_DM_INT, 0); | 226 | platform_send_ipi(cpu, IA64_IPI_RESCHEDULE, IA64_IPI_DM_INT, 0); |
227 | } | 227 | } |
228 | EXPORT_SYMBOL_GPL(smp_send_reschedule); | ||
228 | 229 | ||
229 | /* | 230 | /* |
230 | * Called with preemption disabled. | 231 | * Called with preemption disabled. |
@@ -300,15 +301,12 @@ smp_flush_tlb_mm (struct mm_struct *mm) | |||
300 | return; | 301 | return; |
301 | } | 302 | } |
302 | 303 | ||
304 | smp_call_function_mask(mm->cpu_vm_mask, | ||
305 | (void (*)(void *))local_finish_flush_tlb_mm, mm, 1); | ||
306 | local_irq_disable(); | ||
307 | local_finish_flush_tlb_mm(mm); | ||
308 | local_irq_enable(); | ||
303 | preempt_enable(); | 309 | preempt_enable(); |
304 | /* | ||
305 | * We could optimize this further by using mm->cpu_vm_mask to track which CPUs | ||
306 | * have been running in the address space. It's not clear that this is worth the | ||
307 | * trouble though: to avoid races, we have to raise the IPI on the target CPU | ||
308 | * anyhow, and once a CPU is interrupted, the cost of local_flush_tlb_all() is | ||
309 | * rather trivial. | ||
310 | */ | ||
311 | on_each_cpu((void (*)(void *))local_finish_flush_tlb_mm, mm, 1); | ||
312 | } | 310 | } |
313 | 311 | ||
314 | void arch_send_call_function_single_ipi(int cpu) | 312 | void arch_send_call_function_single_ipi(int cpu) |
diff --git a/arch/s390/kernel/compat_linux.c b/arch/s390/kernel/compat_linux.c index 6cc87d8c8682..002c70d3cb75 100644 --- a/arch/s390/kernel/compat_linux.c +++ b/arch/s390/kernel/compat_linux.c | |||
@@ -702,20 +702,12 @@ asmlinkage long sys32_fstatat64(unsigned int dfd, char __user *filename, | |||
702 | struct stat64_emu31 __user* statbuf, int flag) | 702 | struct stat64_emu31 __user* statbuf, int flag) |
703 | { | 703 | { |
704 | struct kstat stat; | 704 | struct kstat stat; |
705 | int error = -EINVAL; | 705 | int error; |
706 | |||
707 | if ((flag & ~AT_SYMLINK_NOFOLLOW) != 0) | ||
708 | goto out; | ||
709 | |||
710 | if (flag & AT_SYMLINK_NOFOLLOW) | ||
711 | error = vfs_lstat_fd(dfd, filename, &stat); | ||
712 | else | ||
713 | error = vfs_stat_fd(dfd, filename, &stat); | ||
714 | 706 | ||
715 | if (!error) | 707 | error = vfs_fstatat(dfd, filename, &stat, flag); |
716 | error = cp_stat64(statbuf, &stat); | 708 | if (error) |
717 | out: | 709 | return error; |
718 | return error; | 710 | return cp_stat64(statbuf, &stat); |
719 | } | 711 | } |
720 | 712 | ||
721 | /* | 713 | /* |
diff --git a/arch/sparc/kernel/sys_sparc32.c b/arch/sparc/kernel/sys_sparc32.c index e800503879e4..f5000a460c05 100644 --- a/arch/sparc/kernel/sys_sparc32.c +++ b/arch/sparc/kernel/sys_sparc32.c | |||
@@ -206,21 +206,12 @@ asmlinkage long compat_sys_fstatat64(unsigned int dfd, char __user *filename, | |||
206 | struct compat_stat64 __user * statbuf, int flag) | 206 | struct compat_stat64 __user * statbuf, int flag) |
207 | { | 207 | { |
208 | struct kstat stat; | 208 | struct kstat stat; |
209 | int error = -EINVAL; | 209 | int error; |
210 | |||
211 | if ((flag & ~AT_SYMLINK_NOFOLLOW) != 0) | ||
212 | goto out; | ||
213 | |||
214 | if (flag & AT_SYMLINK_NOFOLLOW) | ||
215 | error = vfs_lstat_fd(dfd, filename, &stat); | ||
216 | else | ||
217 | error = vfs_stat_fd(dfd, filename, &stat); | ||
218 | |||
219 | if (!error) | ||
220 | error = cp_compat_stat64(&stat, statbuf); | ||
221 | 210 | ||
222 | out: | 211 | error = vfs_fstatat(dfd, filename, &stat, flag); |
223 | return error; | 212 | if (error) |
213 | return error; | ||
214 | return cp_compat_stat64(&stat, statbuf); | ||
224 | } | 215 | } |
225 | 216 | ||
226 | asmlinkage long compat_sys_sysfs(int option, u32 arg1, u32 arg2) | 217 | asmlinkage long compat_sys_sysfs(int option, u32 arg1, u32 arg2) |
diff --git a/arch/x86/ia32/sys_ia32.c b/arch/x86/ia32/sys_ia32.c index efac92fd1efb..085a8c35f149 100644 --- a/arch/x86/ia32/sys_ia32.c +++ b/arch/x86/ia32/sys_ia32.c | |||
@@ -129,21 +129,12 @@ asmlinkage long sys32_fstatat(unsigned int dfd, char __user *filename, | |||
129 | struct stat64 __user *statbuf, int flag) | 129 | struct stat64 __user *statbuf, int flag) |
130 | { | 130 | { |
131 | struct kstat stat; | 131 | struct kstat stat; |
132 | int error = -EINVAL; | 132 | int error; |
133 | 133 | ||
134 | if ((flag & ~AT_SYMLINK_NOFOLLOW) != 0) | 134 | error = vfs_fstatat(dfd, filename, &stat, flag); |
135 | goto out; | 135 | if (error) |
136 | 136 | return error; | |
137 | if (flag & AT_SYMLINK_NOFOLLOW) | 137 | return cp_stat64(statbuf, &stat); |
138 | error = vfs_lstat_fd(dfd, filename, &stat); | ||
139 | else | ||
140 | error = vfs_stat_fd(dfd, filename, &stat); | ||
141 | |||
142 | if (!error) | ||
143 | error = cp_stat64(statbuf, &stat); | ||
144 | |||
145 | out: | ||
146 | return error; | ||
147 | } | 138 | } |
148 | 139 | ||
149 | /* | 140 | /* |
diff --git a/arch/x86/include/asm/lguest_hcall.h b/arch/x86/include/asm/lguest_hcall.h index 0f4ee7148afe..faae1996487b 100644 --- a/arch/x86/include/asm/lguest_hcall.h +++ b/arch/x86/include/asm/lguest_hcall.h | |||
@@ -5,7 +5,6 @@ | |||
5 | #define LHCALL_FLUSH_ASYNC 0 | 5 | #define LHCALL_FLUSH_ASYNC 0 |
6 | #define LHCALL_LGUEST_INIT 1 | 6 | #define LHCALL_LGUEST_INIT 1 |
7 | #define LHCALL_SHUTDOWN 2 | 7 | #define LHCALL_SHUTDOWN 2 |
8 | #define LHCALL_LOAD_GDT 3 | ||
9 | #define LHCALL_NEW_PGTABLE 4 | 8 | #define LHCALL_NEW_PGTABLE 4 |
10 | #define LHCALL_FLUSH_TLB 5 | 9 | #define LHCALL_FLUSH_TLB 5 |
11 | #define LHCALL_LOAD_IDT_ENTRY 6 | 10 | #define LHCALL_LOAD_IDT_ENTRY 6 |
@@ -17,6 +16,7 @@ | |||
17 | #define LHCALL_SET_PMD 15 | 16 | #define LHCALL_SET_PMD 15 |
18 | #define LHCALL_LOAD_TLS 16 | 17 | #define LHCALL_LOAD_TLS 16 |
19 | #define LHCALL_NOTIFY 17 | 18 | #define LHCALL_NOTIFY 17 |
19 | #define LHCALL_LOAD_GDT_ENTRY 18 | ||
20 | 20 | ||
21 | #define LGUEST_TRAP_ENTRY 0x1F | 21 | #define LGUEST_TRAP_ENTRY 0x1F |
22 | 22 | ||
diff --git a/arch/x86/lguest/boot.c b/arch/x86/lguest/boot.c index e94a11e42f98..a2085368a3dc 100644 --- a/arch/x86/lguest/boot.c +++ b/arch/x86/lguest/boot.c | |||
@@ -273,15 +273,15 @@ static void lguest_load_idt(const struct desc_ptr *desc) | |||
273 | * controls the entire thing and the Guest asks it to make changes using the | 273 | * controls the entire thing and the Guest asks it to make changes using the |
274 | * LOAD_GDT hypercall. | 274 | * LOAD_GDT hypercall. |
275 | * | 275 | * |
276 | * This is the opposite of the IDT code where we have a LOAD_IDT_ENTRY | 276 | * This is the exactly like the IDT code. |
277 | * hypercall and use that repeatedly to load a new IDT. I don't think it | ||
278 | * really matters, but wouldn't it be nice if they were the same? Wouldn't | ||
279 | * it be even better if you were the one to send the patch to fix it? | ||
280 | */ | 277 | */ |
281 | static void lguest_load_gdt(const struct desc_ptr *desc) | 278 | static void lguest_load_gdt(const struct desc_ptr *desc) |
282 | { | 279 | { |
283 | BUG_ON((desc->size + 1) / 8 != GDT_ENTRIES); | 280 | unsigned int i; |
284 | kvm_hypercall2(LHCALL_LOAD_GDT, __pa(desc->address), GDT_ENTRIES); | 281 | struct desc_struct *gdt = (void *)desc->address; |
282 | |||
283 | for (i = 0; i < (desc->size+1)/8; i++) | ||
284 | kvm_hypercall3(LHCALL_LOAD_GDT_ENTRY, i, gdt[i].a, gdt[i].b); | ||
285 | } | 285 | } |
286 | 286 | ||
287 | /* For a single GDT entry which changes, we do the lazy thing: alter our GDT, | 287 | /* For a single GDT entry which changes, we do the lazy thing: alter our GDT, |
@@ -291,7 +291,9 @@ static void lguest_write_gdt_entry(struct desc_struct *dt, int entrynum, | |||
291 | const void *desc, int type) | 291 | const void *desc, int type) |
292 | { | 292 | { |
293 | native_write_gdt_entry(dt, entrynum, desc, type); | 293 | native_write_gdt_entry(dt, entrynum, desc, type); |
294 | kvm_hypercall2(LHCALL_LOAD_GDT, __pa(dt), GDT_ENTRIES); | 294 | /* Tell Host about this new entry. */ |
295 | kvm_hypercall3(LHCALL_LOAD_GDT_ENTRY, entrynum, | ||
296 | dt[entrynum].a, dt[entrynum].b); | ||
295 | } | 297 | } |
296 | 298 | ||
297 | /* OK, I lied. There are three "thread local storage" GDT entries which change | 299 | /* OK, I lied. There are three "thread local storage" GDT entries which change |