aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/i386/kernel/alternative.c6
-rw-r--r--arch/i386/kernel/cpu/perfctr-watchdog.c28
-rw-r--r--arch/i386/kernel/nmi.c2
-rw-r--r--arch/i386/kernel/ptrace.c1
-rw-r--r--arch/ia64/kernel/ptrace.c1
-rw-r--r--arch/m68k/kernel/ptrace.c1
-rw-r--r--fs/nfsd/nfsfh.c20
-rw-r--r--fs/nfsd/vfs.c3
-rw-r--r--include/asm-um/elf-x86_64.h42
-rw-r--r--kernel/ptrace.c1
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
608static 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
608static void probe_nmi_watchdog(void) 618static 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)
274void ptrace_disable(struct task_struct *child) 274void 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)
116void ptrace_disable(struct task_struct *child) 116void 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
122long arch_ptrace(struct task_struct *child, long request, long addr, long data) 121long 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() */