On Wed, Jun 15, 2016 at 12:36:22PM +0200, Borislav Petkov wrote: > Ah, yes, good point. Will change.
Ok, got a bit more involved - I also need to disable preemption around smp_call_function_single(). Here's what I have now. It seems to work too. static ssize_t energy_policy_pref_hint_show(struct device *dev, struct device_attribute *attr, char *buf) { u64 epb; preempt_disable(); if (rdmsrl_on_cpu(dev->id, MSR_IA32_ENERGY_PERF_BIAS, &epb)) epb = -1; preempt_enable(); return sprintf(buf, "%d\n", (unsigned int)(epb & 0xFULL)); } static ssize_t energy_policy_pref_hint_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { u32 val; u64 epb; if (kstrtou32(buf, 10, &val) < 0) return -EINVAL; if (val > 15) return -EINVAL; preempt_disable(); if (rdmsrl_on_cpu(dev->id, MSR_IA32_ENERGY_PERF_BIAS, &epb)) { count = -EINVAL; goto out; } if ((epb & 0xf) == val) goto out; if (wrmsrl_on_cpu(dev->id, MSR_IA32_ENERGY_PERF_BIAS, (epb & ~0xFULL) | val)) count = -EINVAL; out: preempt_enable(); return count; } -- Regards/Gruss, Boris. ECO tip #101: Trim your mails when you reply.