diff options
-rw-r--r-- | arch/i386/kernel/alternative.c | 6 | ||||
-rw-r--r-- | arch/i386/kernel/cpu/perfctr-watchdog.c | 28 | ||||
-rw-r--r-- | arch/i386/kernel/nmi.c | 2 | ||||
-rw-r--r-- | arch/i386/kernel/ptrace.c | 1 | ||||
-rw-r--r-- | arch/ia64/kernel/ptrace.c | 1 | ||||
-rw-r--r-- | arch/m68k/kernel/ptrace.c | 1 | ||||
-rw-r--r-- | fs/nfsd/nfsfh.c | 20 | ||||
-rw-r--r-- | fs/nfsd/vfs.c | 3 | ||||
-rw-r--r-- | include/asm-um/elf-x86_64.h | 42 | ||||
-rw-r--r-- | kernel/ptrace.c | 1 |
10 files changed, 64 insertions, 41 deletions
diff --git a/arch/i386/kernel/alternative.c b/arch/i386/kernel/alternative.c index 9f4ac8b02de4..bd72d94e713e 100644 --- a/arch/i386/kernel/alternative.c +++ b/arch/i386/kernel/alternative.c | |||
@@ -445,8 +445,6 @@ void __kprobes text_poke(void *addr, unsigned char *opcode, int len) | |||
445 | { | 445 | { |
446 | memcpy(addr, opcode, len); | 446 | memcpy(addr, opcode, len); |
447 | sync_core(); | 447 | sync_core(); |
448 | /* Not strictly needed, but can speed CPU recovery up. Ignore cross cacheline | 448 | /* Could also do a CLFLUSH here to speed up CPU recovery; but |
449 | case. */ | 449 | that causes hangs on some VIA CPUs. */ |
450 | if (cpu_has_clflush) | ||
451 | asm("clflush (%0) " :: "r" (addr) : "memory"); | ||
452 | } | 450 | } |
diff --git a/arch/i386/kernel/cpu/perfctr-watchdog.c b/arch/i386/kernel/cpu/perfctr-watchdog.c index 4be488e73bee..93fecd4b03de 100644 --- a/arch/i386/kernel/cpu/perfctr-watchdog.c +++ b/arch/i386/kernel/cpu/perfctr-watchdog.c | |||
@@ -263,8 +263,8 @@ static int setup_k7_watchdog(unsigned nmi_hz) | |||
263 | unsigned int evntsel; | 263 | unsigned int evntsel; |
264 | struct nmi_watchdog_ctlblk *wd = &__get_cpu_var(nmi_watchdog_ctlblk); | 264 | struct nmi_watchdog_ctlblk *wd = &__get_cpu_var(nmi_watchdog_ctlblk); |
265 | 265 | ||
266 | perfctr_msr = MSR_K7_PERFCTR0; | 266 | perfctr_msr = wd_ops->perfctr; |
267 | evntsel_msr = MSR_K7_EVNTSEL0; | 267 | evntsel_msr = wd_ops->evntsel; |
268 | 268 | ||
269 | wrmsrl(perfctr_msr, 0UL); | 269 | wrmsrl(perfctr_msr, 0UL); |
270 | 270 | ||
@@ -343,8 +343,8 @@ static int setup_p6_watchdog(unsigned nmi_hz) | |||
343 | unsigned int evntsel; | 343 | unsigned int evntsel; |
344 | struct nmi_watchdog_ctlblk *wd = &__get_cpu_var(nmi_watchdog_ctlblk); | 344 | struct nmi_watchdog_ctlblk *wd = &__get_cpu_var(nmi_watchdog_ctlblk); |
345 | 345 | ||
346 | perfctr_msr = MSR_P6_PERFCTR0; | 346 | perfctr_msr = wd_ops->perfctr; |
347 | evntsel_msr = MSR_P6_EVNTSEL0; | 347 | evntsel_msr = wd_ops->evntsel; |
348 | 348 | ||
349 | /* KVM doesn't implement this MSR */ | 349 | /* KVM doesn't implement this MSR */ |
350 | if (wrmsr_safe(perfctr_msr, 0, 0) < 0) | 350 | if (wrmsr_safe(perfctr_msr, 0, 0) < 0) |
@@ -569,8 +569,8 @@ static int setup_intel_arch_watchdog(unsigned nmi_hz) | |||
569 | (ebx & ARCH_PERFMON_UNHALTED_CORE_CYCLES_PRESENT)) | 569 | (ebx & ARCH_PERFMON_UNHALTED_CORE_CYCLES_PRESENT)) |
570 | return 0; | 570 | return 0; |
571 | 571 | ||
572 | perfctr_msr = MSR_ARCH_PERFMON_PERFCTR1; | 572 | perfctr_msr = wd_ops->perfctr; |
573 | evntsel_msr = MSR_ARCH_PERFMON_EVENTSEL1; | 573 | evntsel_msr = wd_ops->evntsel; |
574 | 574 | ||
575 | wrmsrl(perfctr_msr, 0UL); | 575 | wrmsrl(perfctr_msr, 0UL); |
576 | 576 | ||
@@ -605,6 +605,16 @@ static struct wd_ops intel_arch_wd_ops = { | |||
605 | .evntsel = MSR_ARCH_PERFMON_EVENTSEL1, | 605 | .evntsel = MSR_ARCH_PERFMON_EVENTSEL1, |
606 | }; | 606 | }; |
607 | 607 | ||
608 | static struct wd_ops coreduo_wd_ops = { | ||
609 | .reserve = single_msr_reserve, | ||
610 | .unreserve = single_msr_unreserve, | ||
611 | .setup = setup_intel_arch_watchdog, | ||
612 | .rearm = p6_rearm, | ||
613 | .stop = single_msr_stop_watchdog, | ||
614 | .perfctr = MSR_ARCH_PERFMON_PERFCTR0, | ||
615 | .evntsel = MSR_ARCH_PERFMON_EVENTSEL0, | ||
616 | }; | ||
617 | |||
608 | static void probe_nmi_watchdog(void) | 618 | static void probe_nmi_watchdog(void) |
609 | { | 619 | { |
610 | switch (boot_cpu_data.x86_vendor) { | 620 | switch (boot_cpu_data.x86_vendor) { |
@@ -615,6 +625,12 @@ static void probe_nmi_watchdog(void) | |||
615 | wd_ops = &k7_wd_ops; | 625 | wd_ops = &k7_wd_ops; |
616 | break; | 626 | break; |
617 | case X86_VENDOR_INTEL: | 627 | case X86_VENDOR_INTEL: |
628 | /* Work around Core Duo (Yonah) errata AE49 where perfctr1 | ||
629 | doesn't have a working enable bit. */ | ||
630 | if (boot_cpu_data.x86 == 6 && boot_cpu_data.x86_model == 14) { | ||
631 | wd_ops = &coreduo_wd_ops; | ||
632 | break; | ||
633 | } | ||
618 | if (cpu_has(&boot_cpu_data, X86_FEATURE_ARCH_PERFMON)) { | 634 | if (cpu_has(&boot_cpu_data, X86_FEATURE_ARCH_PERFMON)) { |
619 | wd_ops = &intel_arch_wd_ops; | 635 | wd_ops = &intel_arch_wd_ops; |
620 | break; | 636 | break; |
diff --git a/arch/i386/kernel/nmi.c b/arch/i386/kernel/nmi.c index 8c1c965eb2a8..c7227e2180f8 100644 --- a/arch/i386/kernel/nmi.c +++ b/arch/i386/kernel/nmi.c | |||
@@ -115,12 +115,12 @@ static int __init check_nmi_watchdog(void) | |||
115 | atomic_dec(&nmi_active); | 115 | atomic_dec(&nmi_active); |
116 | } | 116 | } |
117 | } | 117 | } |
118 | endflag = 1; | ||
118 | if (!atomic_read(&nmi_active)) { | 119 | if (!atomic_read(&nmi_active)) { |
119 | kfree(prev_nmi_count); | 120 | kfree(prev_nmi_count); |
120 | atomic_set(&nmi_active, -1); | 121 | atomic_set(&nmi_active, -1); |
121 | return -1; | 122 | return -1; |
122 | } | 123 | } |
123 | endflag = 1; | ||
124 | printk("OK.\n"); | 124 | printk("OK.\n"); |
125 | 125 | ||
126 | /* now that we know it works we can reduce NMI frequency to | 126 | /* now that we know it works we can reduce NMI frequency to |
diff --git a/arch/i386/kernel/ptrace.c b/arch/i386/kernel/ptrace.c index 0c8f00e69c4d..7c1b92522e95 100644 --- a/arch/i386/kernel/ptrace.c +++ b/arch/i386/kernel/ptrace.c | |||
@@ -274,7 +274,6 @@ static void clear_singlestep(struct task_struct *child) | |||
274 | void ptrace_disable(struct task_struct *child) | 274 | void ptrace_disable(struct task_struct *child) |
275 | { | 275 | { |
276 | clear_singlestep(child); | 276 | clear_singlestep(child); |
277 | clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
278 | clear_tsk_thread_flag(child, TIF_SYSCALL_EMU); | 277 | clear_tsk_thread_flag(child, TIF_SYSCALL_EMU); |
279 | } | 278 | } |
280 | 279 | ||
diff --git a/arch/ia64/kernel/ptrace.c b/arch/ia64/kernel/ptrace.c index 122444a97897..2e96f17b2f3b 100644 --- a/arch/ia64/kernel/ptrace.c +++ b/arch/ia64/kernel/ptrace.c | |||
@@ -1577,7 +1577,6 @@ sys_ptrace (long request, pid_t pid, unsigned long addr, unsigned long data) | |||
1577 | 1577 | ||
1578 | case PTRACE_DETACH: | 1578 | case PTRACE_DETACH: |
1579 | /* detach a process that was attached. */ | 1579 | /* detach a process that was attached. */ |
1580 | clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
1581 | ret = ptrace_detach(child, data); | 1580 | ret = ptrace_detach(child, data); |
1582 | goto out_tsk; | 1581 | goto out_tsk; |
1583 | 1582 | ||
diff --git a/arch/m68k/kernel/ptrace.c b/arch/m68k/kernel/ptrace.c index 2cf0690b7882..e792d3cba4c7 100644 --- a/arch/m68k/kernel/ptrace.c +++ b/arch/m68k/kernel/ptrace.c | |||
@@ -116,7 +116,6 @@ static inline void singlestep_disable(struct task_struct *child) | |||
116 | void ptrace_disable(struct task_struct *child) | 116 | void ptrace_disable(struct task_struct *child) |
117 | { | 117 | { |
118 | singlestep_disable(child); | 118 | singlestep_disable(child); |
119 | clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
120 | } | 119 | } |
121 | 120 | ||
122 | long arch_ptrace(struct task_struct *child, long request, long addr, long data) | 121 | long arch_ptrace(struct task_struct *child, long request, long addr, long data) |
diff --git a/fs/nfsd/nfsfh.c b/fs/nfsd/nfsfh.c index 0eb464a39aae..7011d62acfc8 100644 --- a/fs/nfsd/nfsfh.c +++ b/fs/nfsd/nfsfh.c | |||
@@ -566,13 +566,23 @@ enum fsid_source fsid_source(struct svc_fh *fhp) | |||
566 | case FSID_DEV: | 566 | case FSID_DEV: |
567 | case FSID_ENCODE_DEV: | 567 | case FSID_ENCODE_DEV: |
568 | case FSID_MAJOR_MINOR: | 568 | case FSID_MAJOR_MINOR: |
569 | return FSIDSOURCE_DEV; | 569 | if (fhp->fh_export->ex_dentry->d_inode->i_sb->s_type->fs_flags |
570 | & FS_REQUIRES_DEV) | ||
571 | return FSIDSOURCE_DEV; | ||
572 | break; | ||
570 | case FSID_NUM: | 573 | case FSID_NUM: |
571 | return FSIDSOURCE_FSID; | ||
572 | default: | ||
573 | if (fhp->fh_export->ex_flags & NFSEXP_FSID) | 574 | if (fhp->fh_export->ex_flags & NFSEXP_FSID) |
574 | return FSIDSOURCE_FSID; | 575 | return FSIDSOURCE_FSID; |
575 | else | 576 | break; |
576 | return FSIDSOURCE_UUID; | 577 | default: |
578 | break; | ||
577 | } | 579 | } |
580 | /* either a UUID type filehandle, or the filehandle doesn't | ||
581 | * match the export. | ||
582 | */ | ||
583 | if (fhp->fh_export->ex_flags & NFSEXP_FSID) | ||
584 | return FSIDSOURCE_FSID; | ||
585 | if (fhp->fh_export->ex_uuid) | ||
586 | return FSIDSOURCE_UUID; | ||
587 | return FSIDSOURCE_DEV; | ||
578 | } | 588 | } |
diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c index a0c2b253818b..7867151ebb83 100644 --- a/fs/nfsd/vfs.c +++ b/fs/nfsd/vfs.c | |||
@@ -115,7 +115,8 @@ nfsd_cross_mnt(struct svc_rqst *rqstp, struct dentry **dpp, | |||
115 | 115 | ||
116 | exp2 = rqst_exp_get_by_name(rqstp, mnt, mounts); | 116 | exp2 = rqst_exp_get_by_name(rqstp, mnt, mounts); |
117 | if (IS_ERR(exp2)) { | 117 | if (IS_ERR(exp2)) { |
118 | err = PTR_ERR(exp2); | 118 | if (PTR_ERR(exp2) != -ENOENT) |
119 | err = PTR_ERR(exp2); | ||
119 | dput(mounts); | 120 | dput(mounts); |
120 | mntput(mnt); | 121 | mntput(mnt); |
121 | goto out; | 122 | goto out; |
diff --git a/include/asm-um/elf-x86_64.h b/include/asm-um/elf-x86_64.h index bfe27aa2c9c4..857471c49dac 100644 --- a/include/asm-um/elf-x86_64.h +++ b/include/asm-um/elf-x86_64.h | |||
@@ -67,27 +67,27 @@ typedef struct { } elf_fpregset_t; | |||
67 | } while (0) | 67 | } while (0) |
68 | 68 | ||
69 | #define ELF_CORE_COPY_REGS(pr_reg, regs) \ | 69 | #define ELF_CORE_COPY_REGS(pr_reg, regs) \ |
70 | (pr_reg)[0] = (regs)->regs.gp[0]; \ | 70 | (pr_reg)[0] = (regs)->regs.skas.regs[0]; \ |
71 | (pr_reg)[1] = (regs)->regs.gp[1]; \ | 71 | (pr_reg)[1] = (regs)->regs.skas.regs[1]; \ |
72 | (pr_reg)[2] = (regs)->regs.gp[2]; \ | 72 | (pr_reg)[2] = (regs)->regs.skas.regs[2]; \ |
73 | (pr_reg)[3] = (regs)->regs.gp[3]; \ | 73 | (pr_reg)[3] = (regs)->regs.skas.regs[3]; \ |
74 | (pr_reg)[4] = (regs)->regs.gp[4]; \ | 74 | (pr_reg)[4] = (regs)->regs.skas.regs[4]; \ |
75 | (pr_reg)[5] = (regs)->regs.gp[5]; \ | 75 | (pr_reg)[5] = (regs)->regs.skas.regs[5]; \ |
76 | (pr_reg)[6] = (regs)->regs.gp[6]; \ | 76 | (pr_reg)[6] = (regs)->regs.skas.regs[6]; \ |
77 | (pr_reg)[7] = (regs)->regs.gp[7]; \ | 77 | (pr_reg)[7] = (regs)->regs.skas.regs[7]; \ |
78 | (pr_reg)[8] = (regs)->regs.gp[8]; \ | 78 | (pr_reg)[8] = (regs)->regs.skas.regs[8]; \ |
79 | (pr_reg)[9] = (regs)->regs.gp[9]; \ | 79 | (pr_reg)[9] = (regs)->regs.skas.regs[9]; \ |
80 | (pr_reg)[10] = (regs)->regs.gp[10]; \ | 80 | (pr_reg)[10] = (regs)->regs.skas.regs[10]; \ |
81 | (pr_reg)[11] = (regs)->regs.gp[11]; \ | 81 | (pr_reg)[11] = (regs)->regs.skas.regs[11]; \ |
82 | (pr_reg)[12] = (regs)->regs.gp[12]; \ | 82 | (pr_reg)[12] = (regs)->regs.skas.regs[12]; \ |
83 | (pr_reg)[13] = (regs)->regs.gp[13]; \ | 83 | (pr_reg)[13] = (regs)->regs.skas.regs[13]; \ |
84 | (pr_reg)[14] = (regs)->regs.gp[14]; \ | 84 | (pr_reg)[14] = (regs)->regs.skas.regs[14]; \ |
85 | (pr_reg)[15] = (regs)->regs.gp[15]; \ | 85 | (pr_reg)[15] = (regs)->regs.skas.regs[15]; \ |
86 | (pr_reg)[16] = (regs)->regs.gp[16]; \ | 86 | (pr_reg)[16] = (regs)->regs.skas.regs[16]; \ |
87 | (pr_reg)[17] = (regs)->regs.gp[17]; \ | 87 | (pr_reg)[17] = (regs)->regs.skas.regs[17]; \ |
88 | (pr_reg)[18] = (regs)->regs.gp[18]; \ | 88 | (pr_reg)[18] = (regs)->regs.skas.regs[18]; \ |
89 | (pr_reg)[19] = (regs)->regs.gp[19]; \ | 89 | (pr_reg)[19] = (regs)->regs.skas.regs[19]; \ |
90 | (pr_reg)[20] = (regs)->regs.gp[20]; \ | 90 | (pr_reg)[20] = (regs)->regs.skas.regs[20]; \ |
91 | (pr_reg)[21] = current->thread.arch.fs; \ | 91 | (pr_reg)[21] = current->thread.arch.fs; \ |
92 | (pr_reg)[22] = 0; \ | 92 | (pr_reg)[22] = 0; \ |
93 | (pr_reg)[23] = 0; \ | 93 | (pr_reg)[23] = 0; \ |
diff --git a/kernel/ptrace.c b/kernel/ptrace.c index 82a558b655da..3eca7a55f2ee 100644 --- a/kernel/ptrace.c +++ b/kernel/ptrace.c | |||
@@ -233,6 +233,7 @@ int ptrace_detach(struct task_struct *child, unsigned int data) | |||
233 | 233 | ||
234 | /* Architecture-specific hardware disable .. */ | 234 | /* Architecture-specific hardware disable .. */ |
235 | ptrace_disable(child); | 235 | ptrace_disable(child); |
236 | clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
236 | 237 | ||
237 | write_lock_irq(&tasklist_lock); | 238 | write_lock_irq(&tasklist_lock); |
238 | /* protect against de_thread()->release_task() */ | 239 | /* protect against de_thread()->release_task() */ |