From 27eacafb6f6da782c3ea998d1adf31802c16af3e Mon Sep 17 00:00:00 2001 From: Kostik Belousov Date: Wed, 28 Sep 2005 18:21:28 +0300 Subject: [PATCH] --- yaml --- r: 9459 b: refs/heads/master c: 411b67b4b6a4dd1e0292a6a58dd753978179d173 h: refs/heads/master i: 9457: a58ef5f9885713dc6bd04bae51e846e4049ceffc 9455: 6f06751edf4dfccbc91464d98a419c42aa43f4b7 v: v3 --- [refs] | 2 +- trunk/arch/i386/kernel/cpu/amd.c | 16 ---------------- trunk/arch/x86_64/kernel/mce.c | 10 +++------- trunk/arch/x86_64/kernel/setup.c | 22 ++++++++++------------ trunk/drivers/macintosh/smu.c | 4 +--- trunk/fs/read_write.c | 3 +++ trunk/include/asm-x86_64/msr.h | 1 - trunk/include/linux/sched.h | 22 +++++----------------- trunk/kernel/signal.c | 3 +-- 9 files changed, 24 insertions(+), 59 deletions(-) diff --git a/[refs] b/[refs] index 2980668e788b..958fc3d05f3a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: a44fe13eab664ac488ced0845d9885b019bd24c5 +refs/heads/master: 411b67b4b6a4dd1e0292a6a58dd753978179d173 diff --git a/trunk/arch/i386/kernel/cpu/amd.c b/trunk/arch/i386/kernel/cpu/amd.c index 4c1ddf2b57cc..73aeaf5a9d4e 100644 --- a/trunk/arch/i386/kernel/cpu/amd.c +++ b/trunk/arch/i386/kernel/cpu/amd.c @@ -28,22 +28,6 @@ static void __init init_amd(struct cpuinfo_x86 *c) int mbytes = num_physpages >> (20-PAGE_SHIFT); int r; -#ifdef CONFIG_SMP - unsigned long value; - - /* Disable TLB flush filter by setting HWCR.FFDIS on K8 - * bit 6 of msr C001_0015 - * - * Errata 63 for SH-B3 steppings - * Errata 122 for all steppings (F+ have it disabled by default) - */ - if (c->x86 == 15) { - rdmsrl(MSR_K7_HWCR, value); - value |= 1 << 6; - wrmsrl(MSR_K7_HWCR, value); - } -#endif - /* * FIXME: We should handle the K5 here. Set up the write * range and also turn on MSR 83 bits 4 and 31 (write alloc, diff --git a/trunk/arch/x86_64/kernel/mce.c b/trunk/arch/x86_64/kernel/mce.c index 69541db5ff2c..08203b07f4bd 100644 --- a/trunk/arch/x86_64/kernel/mce.c +++ b/trunk/arch/x86_64/kernel/mce.c @@ -54,12 +54,9 @@ void mce_log(struct mce *mce) { unsigned next, entry; mce->finished = 0; - wmb(); + smp_wmb(); for (;;) { entry = rcu_dereference(mcelog.next); - /* The rmb forces the compiler to reload next in each - iteration */ - rmb(); for (;;) { /* When the buffer fills up discard new entries. Assume that the earlier errors are the more interesting. */ @@ -72,7 +69,6 @@ void mce_log(struct mce *mce) entry++; continue; } - break; } smp_rmb(); next = entry + 1; @@ -80,9 +76,9 @@ void mce_log(struct mce *mce) break; } memcpy(mcelog.entry + entry, mce, sizeof(struct mce)); - wmb(); + smp_wmb(); mcelog.entry[entry].finished = 1; - wmb(); + smp_wmb(); if (!test_and_set_bit(0, &console_logged)) notify_user = 1; diff --git a/trunk/arch/x86_64/kernel/setup.c b/trunk/arch/x86_64/kernel/setup.c index 257f5ba17902..238f73e1a834 100644 --- a/trunk/arch/x86_64/kernel/setup.c +++ b/trunk/arch/x86_64/kernel/setup.c @@ -831,6 +831,8 @@ static void __init amd_detect_cmp(struct cpuinfo_x86 *c) #endif } +#define HWCR 0xc0010015 + static int __init init_amd(struct cpuinfo_x86 *c) { int r; @@ -839,18 +841,14 @@ static int __init init_amd(struct cpuinfo_x86 *c) #ifdef CONFIG_SMP unsigned long value; - /* - * Disable TLB flush filter by setting HWCR.FFDIS on K8 - * bit 6 of msr C001_0015 - * - * Errata 63 for SH-B3 steppings - * Errata 122 for all steppings (F+ have it disabled by default) - */ - if (c->x86 == 15) { - rdmsrl(MSR_K8_HWCR, value); - value |= 1 << 6; - wrmsrl(MSR_K8_HWCR, value); - } + // Disable TLB flush filter by setting HWCR.FFDIS: + // bit 6 of msr C001_0015 + // + // Errata 63 for SH-B3 steppings + // Errata 122 for all(?) steppings + rdmsrl(HWCR, value); + value |= 1 << 6; + wrmsrl(HWCR, value); #endif /* Bit 31 in normal CPUID used for nonstandard 3DNow ID; diff --git a/trunk/drivers/macintosh/smu.c b/trunk/drivers/macintosh/smu.c index 9b38674fbf75..a85ac18dd21d 100644 --- a/trunk/drivers/macintosh/smu.c +++ b/trunk/drivers/macintosh/smu.c @@ -153,10 +153,8 @@ static irqreturn_t smu_db_intr(int irq, void *arg, struct pt_regs *regs) spin_lock_irqsave(&smu->lock, flags); gpio = pmac_do_feature_call(PMAC_FTR_READ_GPIO, NULL, smu->doorbell); - if ((gpio & 7) != 7) { - spin_unlock_irqrestore(&smu->lock, flags); + if ((gpio & 7) != 7) return IRQ_HANDLED; - } cmd = smu->cmd_cur; smu->cmd_cur = NULL; diff --git a/trunk/fs/read_write.c b/trunk/fs/read_write.c index b60324aaa2b6..a091ee4f430d 100644 --- a/trunk/fs/read_write.c +++ b/trunk/fs/read_write.c @@ -497,6 +497,9 @@ static ssize_t do_readv_writev(int type, struct file *file, } ret = rw_verify_area(type, file, pos, tot_len); + if (ret) + goto out; + ret = security_file_permission(file, type == READ ? MAY_READ : MAY_WRITE); if (ret) goto out; diff --git a/trunk/include/asm-x86_64/msr.h b/trunk/include/asm-x86_64/msr.h index 5a7fe3c6c3d8..4d727f3f5550 100644 --- a/trunk/include/asm-x86_64/msr.h +++ b/trunk/include/asm-x86_64/msr.h @@ -234,7 +234,6 @@ static inline unsigned int cpuid_edx(unsigned int op) #define MSR_K8_TOP_MEM1 0xC001001A #define MSR_K8_TOP_MEM2 0xC001001D #define MSR_K8_SYSCFG 0xC0010010 -#define MSR_K8_HWCR 0xC0010015 /* K6 MSRs */ #define MSR_K6_EFER 0xC0000080 diff --git a/trunk/include/linux/sched.h b/trunk/include/linux/sched.h index c3ba31f210a9..afe6c61f13e5 100644 --- a/trunk/include/linux/sched.h +++ b/trunk/include/linux/sched.h @@ -107,26 +107,14 @@ extern unsigned long nr_iowait(void); #include -/* - * Task state bitmask. NOTE! These bits are also - * encoded in fs/proc/array.c: get_task_state(). - * - * We have two separate sets of flags: task->state - * is about runnability, while task->exit_state are - * about the task exiting. Confusing, but this way - * modifying one set can't modify the other one by - * mistake. - */ #define TASK_RUNNING 0 #define TASK_INTERRUPTIBLE 1 #define TASK_UNINTERRUPTIBLE 2 -#define TASK_STOPPED 4 -#define TASK_TRACED 8 -/* in tsk->exit_state */ -#define EXIT_ZOMBIE 16 -#define EXIT_DEAD 32 -/* in tsk->state again */ -#define TASK_NONINTERACTIVE 64 +#define TASK_NONINTERACTIVE 4 +#define TASK_STOPPED 8 +#define TASK_TRACED 16 +#define EXIT_ZOMBIE 32 +#define EXIT_DEAD 64 #define __set_task_state(tsk, state_value) \ do { (tsk)->state = (state_value); } while (0) diff --git a/trunk/kernel/signal.c b/trunk/kernel/signal.c index 619b027e92b5..5a274705ba19 100644 --- a/trunk/kernel/signal.c +++ b/trunk/kernel/signal.c @@ -1763,8 +1763,7 @@ do_signal_stop(int signr) * stop is always done with the siglock held, * so this check has no races. */ - if (!t->exit_state && - !(t->state & (TASK_STOPPED|TASK_TRACED))) { + if (t->state < TASK_STOPPED) { stop_count++; signal_wake_up(t, 0); }