Skip to content

Commit 6d45969

Browse files
committed
Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull x86 fix from Ingo Molnar: "This fixes the preemption-count imbalance crash reported by Owen Kibel" * 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: x86/mce: Fix CMCI preemption bugs
2 parents 8f98f6f + ea43164 commit 6d45969

File tree

2 files changed

+10
-12
lines changed

2 files changed

+10
-12
lines changed

arch/x86/kernel/cpu/mcheck/mce.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -598,7 +598,6 @@ void machine_check_poll(enum mcp_flags flags, mce_banks_t *b)
598598
{
599599
struct mce m;
600600
int i;
601-
unsigned long *v;
602601

603602
this_cpu_inc(mce_poll_count);
604603

@@ -618,8 +617,7 @@ void machine_check_poll(enum mcp_flags flags, mce_banks_t *b)
618617
if (!(m.status & MCI_STATUS_VAL))
619618
continue;
620619

621-
v = &get_cpu_var(mce_polled_error);
622-
set_bit(0, v);
620+
this_cpu_write(mce_polled_error, 1);
623621
/*
624622
* Uncorrected or signalled events are handled by the exception
625623
* handler when it is enabled, so don't process those here.

arch/x86/kernel/cpu/mcheck/mce_intel.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ static DEFINE_PER_CPU(mce_banks_t, mce_banks_owned);
4242
* cmci_discover_lock protects against parallel discovery attempts
4343
* which could race against each other.
4444
*/
45-
static DEFINE_RAW_SPINLOCK(cmci_discover_lock);
45+
static DEFINE_SPINLOCK(cmci_discover_lock);
4646

4747
#define CMCI_THRESHOLD 1
4848
#define CMCI_POLL_INTERVAL (30 * HZ)
@@ -144,14 +144,14 @@ static void cmci_storm_disable_banks(void)
144144
int bank;
145145
u64 val;
146146

147-
raw_spin_lock_irqsave(&cmci_discover_lock, flags);
147+
spin_lock_irqsave(&cmci_discover_lock, flags);
148148
owned = __get_cpu_var(mce_banks_owned);
149149
for_each_set_bit(bank, owned, MAX_NR_BANKS) {
150150
rdmsrl(MSR_IA32_MCx_CTL2(bank), val);
151151
val &= ~MCI_CTL2_CMCI_EN;
152152
wrmsrl(MSR_IA32_MCx_CTL2(bank), val);
153153
}
154-
raw_spin_unlock_irqrestore(&cmci_discover_lock, flags);
154+
spin_unlock_irqrestore(&cmci_discover_lock, flags);
155155
}
156156

157157
static bool cmci_storm_detect(void)
@@ -211,7 +211,7 @@ static void cmci_discover(int banks)
211211
int i;
212212
int bios_wrong_thresh = 0;
213213

214-
raw_spin_lock_irqsave(&cmci_discover_lock, flags);
214+
spin_lock_irqsave(&cmci_discover_lock, flags);
215215
for (i = 0; i < banks; i++) {
216216
u64 val;
217217
int bios_zero_thresh = 0;
@@ -266,7 +266,7 @@ static void cmci_discover(int banks)
266266
WARN_ON(!test_bit(i, __get_cpu_var(mce_poll_banks)));
267267
}
268268
}
269-
raw_spin_unlock_irqrestore(&cmci_discover_lock, flags);
269+
spin_unlock_irqrestore(&cmci_discover_lock, flags);
270270
if (mca_cfg.bios_cmci_threshold && bios_wrong_thresh) {
271271
pr_info_once(
272272
"bios_cmci_threshold: Some banks do not have valid thresholds set\n");
@@ -316,10 +316,10 @@ void cmci_clear(void)
316316

317317
if (!cmci_supported(&banks))
318318
return;
319-
raw_spin_lock_irqsave(&cmci_discover_lock, flags);
319+
spin_lock_irqsave(&cmci_discover_lock, flags);
320320
for (i = 0; i < banks; i++)
321321
__cmci_disable_bank(i);
322-
raw_spin_unlock_irqrestore(&cmci_discover_lock, flags);
322+
spin_unlock_irqrestore(&cmci_discover_lock, flags);
323323
}
324324

325325
static void cmci_rediscover_work_func(void *arg)
@@ -360,9 +360,9 @@ void cmci_disable_bank(int bank)
360360
if (!cmci_supported(&banks))
361361
return;
362362

363-
raw_spin_lock_irqsave(&cmci_discover_lock, flags);
363+
spin_lock_irqsave(&cmci_discover_lock, flags);
364364
__cmci_disable_bank(bank);
365-
raw_spin_unlock_irqrestore(&cmci_discover_lock, flags);
365+
spin_unlock_irqrestore(&cmci_discover_lock, flags);
366366
}
367367

368368
static void intel_init_cmci(void)

0 commit comments

Comments
 (0)