On Fri, Apr 1, 2016 at 9:10 AM, Thomas Gleixner <tglx@xxxxxxxxxxxxx> wrote: > On Fri, 1 Apr 2016, Andy Lutomirski wrote: >> +static void update_local_turbo_mode(void *dummy) >> +{ >> + unsigned long cr0 = read_cr0(); >> + >> + /* >> + * KVM doesn't properly handle CD. >> + * >> + * XXX: this may interact poorly with CPU hotplug. > > Please cc these crazy folks who cleanup the hotplug mess so they can put it on > their todo list. > >> + */ >> + >> + if (turbo_mode) >> + write_cr0(cr0 & ~X86_CR0_CD); >> + else >> + write_cr0(cr0 | X86_CR0_CD); > > I think proper turbo mode disable requires ~(X86_CR0_CD | X86_CR0_NW) I thought that made no difference on family 6 and P4 and was actively dangerous (disabled coherency) before. At least, that's what the table of caching modes and the footnote seems to say. > >> +static void update_turbo_mode(void) >> +{ >> + on_each_cpu(update_local_turbo_mode, NULL, 1); >> + >> + if (!turbo_mode) >> + wbinvd(); > > You really want to do wbinvd() on each cpu to make sure that each cpu gets out > of that turbo thing. Nah, this is an explicit optimization to de-turboize as quickly as possible: "The instruction then issues a special-function bus cycle that directs external caches to also write back modified data and another bus cycle to indicate that the external caches should be invalidated." I think we should merge this patch and add a special-case so that calling unlink on turbo_mode sets it to zero. Then people who rm -rf / will brick their systems more slowly :) --Andy -- To unsubscribe from this list: send the line "unsubscribe linux-api" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html