All of lore.kernel.org
 help / color / mirror / Atom feed
From: Fenghua Yu <fenghua.yu@intel.com>
To: "Thomas Gleixner" <tglx@linutronix.de>,
	"Ingo Molnar" <mingo@redhat.com>,
	"Borislav Petkov" <bp@alien8.de>, "H Peter Anvin" <hpa@zytor.com>,
	"Andy Lutomirski" <luto@amacapital.net>,
	"Andrew Cooper" <andrew.cooper3@citrix.com>,
	"Ashok Raj" <ashok.raj@intel.com>,
	"Tony Luck" <tony.luck@intel.com>,
	"Ravi V Shankar" <ravi.v.shankar@intel.com>
Cc: "linux-kernel" <linux-kernel@vger.kernel.org>,
	"x86" <x86@kernel.org>, Fenghua Yu <fenghua.yu@intel.com>
Subject: [PATCH v3 4/5] x86/umwait: Add sysfs interface to control umwait maximum time
Date: Fri, 24 May 2019 16:56:01 -0700	[thread overview]
Message-ID: <1558742162-73402-5-git-send-email-fenghua.yu@intel.com> (raw)
In-Reply-To: <1558742162-73402-1-git-send-email-fenghua.yu@intel.com>

IA32_UMWAIT_CONTROL[31:2] determines the maximum time in TSC-quanta
that processor can stay in C0.1 or C0.2. A zero value means no maximum
time.

Each instruction sets its own deadline in the instruction's implicit
input EDX:EAX value. The instruction wakes up if the time-stamp counter
reaches or exceeds the specified deadline, or the umwait maximum time
expires, or a store happens in the monitored address range in umwait.

Users can write an unsigned 32-bit number to
/sys/devices/system/cpu/umwait_control/max_time to change the default
value. Note that a value of zero means there is no limit. Low order
two bits are ignored.

Signed-off-by: Fenghua Yu <fenghua.yu@intel.com>
Reviewed-by: Ashok Raj <ashok.raj@intel.com>
Reviewed-by: Tony Luck <tony.luck@intel.com>
---
 arch/x86/power/umwait.c | 37 +++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/arch/x86/power/umwait.c b/arch/x86/power/umwait.c
index cf5de7e1cc24..61076aad7138 100644
--- a/arch/x86/power/umwait.c
+++ b/arch/x86/power/umwait.c
@@ -103,8 +103,45 @@ static ssize_t enable_c0_2_store(struct device *dev,
 }
 static DEVICE_ATTR_RW(enable_c0_2);
 
+static ssize_t
+max_time_show(struct device *kobj, struct device_attribute *attr, char *buf)
+{
+	return sprintf(buf, "%u\n", umwait_max_time);
+}
+
+static ssize_t max_time_store(struct device *kobj,
+			      struct device_attribute *attr,
+			      const char *buf, size_t count)
+{
+	u32 max_time;
+	int ret;
+
+	ret = kstrtou32(buf, 0, &max_time);
+	if (ret)
+		return ret;
+
+	mutex_lock(&umwait_lock);
+
+	/* Only get max time value from bits[31:2] */
+	max_time &= MSR_IA32_UMWAIT_CONTROL_MAX_TIME;
+	if (umwait_max_time == max_time)
+		goto out_unlock;
+
+	umwait_max_time = max_time;
+
+	/* Update umwait max time on all CPUs */
+	umwait_control_msr_update_all_cpus();
+
+out_unlock:
+	mutex_unlock(&umwait_lock);
+
+	return count;
+}
+static DEVICE_ATTR_RW(max_time);
+
 static struct attribute *umwait_attrs[] = {
 	&dev_attr_enable_c0_2.attr,
+	&dev_attr_max_time.attr,
 	NULL
 };
 
-- 
2.19.1


  parent reply	other threads:[~2019-05-25  0:05 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-05-24 23:55 [PATCH v3 0/5] x86/umwait: Enable user wait instructions Fenghua Yu
2019-05-24 23:55 ` [PATCH v3 1/5] x86/cpufeatures: Enumerate " Fenghua Yu
2019-05-30 14:37   ` Andy Lutomirski
2019-05-24 23:55 ` [PATCH v3 2/5] x86/umwait: Initialize umwait control values Fenghua Yu
2019-05-30 21:05   ` Andy Lutomirski
2019-05-24 23:56 ` [PATCH v3 3/5] x86/umwait: Add sysfs interface to control umwait C0.2 state Fenghua Yu
2019-05-30 21:10   ` Andy Lutomirski
2019-05-31  1:17     ` Yu, Fenghua
2019-05-24 23:56 ` Fenghua Yu [this message]
2019-05-30 21:11   ` [PATCH v3 4/5] x86/umwait: Add sysfs interface to control umwait maximum time Andy Lutomirski
2019-05-24 23:56 ` [PATCH v3 5/5] x86/umwait: Document umwait control sysfs interfaces Fenghua Yu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1558742162-73402-5-git-send-email-fenghua.yu@intel.com \
    --to=fenghua.yu@intel.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=ashok.raj@intel.com \
    --cc=bp@alien8.de \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luto@amacapital.net \
    --cc=mingo@redhat.com \
    --cc=ravi.v.shankar@intel.com \
    --cc=tglx@linutronix.de \
    --cc=tony.luck@intel.com \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.