Commit 52ac3777 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'ras-urgent-2020-03-15' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull RAS fixes from Thomas Gleixner:
 "Two RAS related fixes:

   - Shut down the per CPU thermal throttling poll work properly when a
     CPU goes offline.

     The missing shutdown caused the poll work to be migrated to a
     unbound worker which triggered warnings about the usage of
     smp_processor_id() in preemptible context

   - Fix the PPIN feature initialization which missed to enable the
     functionality when PPIN_CTL was enabled but the MSR locked against
     updates"

* tag 'ras-urgent-2020-03-15' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  x86/mce: Fix logic and comments around MSR_PPIN_CTL
  x86/mce/therm_throt: Undo thermal polling properly on CPU offline
parents b67775e1 59b58096
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -493,17 +493,18 @@ static void intel_ppin_init(struct cpuinfo_x86 *c)
			return;

		if ((val & 3UL) == 1UL) {
			/* PPIN available but disabled: */
			/* PPIN locked in disabled mode */
			return;
		}

		/* If PPIN is disabled, but not locked, try to enable: */
		if (!(val & 3UL)) {
		/* If PPIN is disabled, try to enable */
		if (!(val & 2UL)) {
			wrmsrl_safe(MSR_PPIN_CTL,  val | 2UL);
			rdmsrl_safe(MSR_PPIN_CTL, &val);
		}

		if ((val & 3UL) == 2UL)
		/* Is the enable bit set? */
		if (val & 2UL)
			set_cpu_cap(c, X86_FEATURE_INTEL_PPIN);
	}
}
+7 −2
Original line number Diff line number Diff line
@@ -486,9 +486,14 @@ static int thermal_throttle_offline(unsigned int cpu)
{
	struct thermal_state *state = &per_cpu(thermal_state, cpu);
	struct device *dev = get_cpu_device(cpu);
	u32 l;

	/* Mask the thermal vector before draining evtl. pending work */
	l = apic_read(APIC_LVTTHMR);
	apic_write(APIC_LVTTHMR, l | APIC_LVT_MASKED);

	cancel_delayed_work(&state->package_throttle.therm_work);
	cancel_delayed_work(&state->core_throttle.therm_work);
	cancel_delayed_work_sync(&state->package_throttle.therm_work);
	cancel_delayed_work_sync(&state->core_throttle.therm_work);

	state->package_throttle.rate_control_active = false;
	state->core_throttle.rate_control_active = false;