From: Fenghua Yu <fenghua.yu@intel.com>
To: "Thomas Gleixner" <tglx@linutronix.de>,
"Ingo Molnar" <mingo@redhat.com>, "H Peter Anvin" <hpa@zytor.com>
Cc: "Ashok Raj" <ashok.raj@intel.com>,
"Alan Cox" <alan@linux.intel.com>,
"Ravi V Shankar" <ravi.v.shankar@intel.com>,
"linux-kernel" <linux-kernel@vger.kernel.org>,
"x86" <x86@kernel.org>, Fenghua Yu <fenghua.yu@intel.com>
Subject: [RFC PATCH 5/8] x86/umwait.c: Add sysfs interface to show tsc_khz
Date: Fri, 15 Jun 2018 20:06:12 -0700 [thread overview]
Message-ID: <1529118375-90191-6-git-send-email-fenghua.yu@intel.com> (raw)
In-Reply-To: <1529118375-90191-1-git-send-email-fenghua.yu@intel.com>
User wait process or any other process wants to know tsc frequency to
convert seconds to tsc ticks. Kernel already gets tsc freqency in kernel
internal variable tsc_khz. The sysfs interface /sys/devices/system/cpu/
user_mwait/tsc_khz exposes the internal variable tsc_khz in decimal to
user.
tsc_khz and the interface are available only on CPU that supports
X86_FEATURE_TSC_KNOW_FREQ.
Signed-off-by: Fenghua Yu <fenghua.yu@intel.com>
---
arch/x86/power/umwait.c | 19 ++++++++++++++++++-
1 file changed, 18 insertions(+), 1 deletion(-)
diff --git a/arch/x86/power/umwait.c b/arch/x86/power/umwait.c
index fd7b18d9ed02..33b3ccb40cb9 100644
--- a/arch/x86/power/umwait.c
+++ b/arch/x86/power/umwait.c
@@ -7,7 +7,8 @@
*/
/*
* umwait.c adds control of user wait states that user enters through user wait
- * instructions umwait or tpause.
+ * instructions umwait or tpause. It also dumps tsc_khz to user so user process
+ * can convert seconds to tsc for umwait or other usages.
*/
#include <linux/cpu.h>
#include <asm/msr.h>
@@ -49,7 +50,14 @@ static ssize_t umwait_disable_c0_2_store(struct device *dev,
return count;
}
+static ssize_t tsc_khz_show(struct device *dev, struct device_attribute *attr,
+ char *buf)
+{
+ return sprintf(buf, "%d\n", tsc_khz);
+}
+
static DEVICE_ATTR_RW(umwait_disable_c0_2);
+static DEVICE_ATTR_RO(tsc_khz);
static struct attribute *umwait_attrs[] = {
&dev_attr_umwait_disable_c0_2.attr,
@@ -92,6 +100,15 @@ static int __init umwait_init(void)
if (ret)
return ret;
+ /* Only add the tsc_khz interface when the value is known. */
+ if (boot_cpu_has(X86_FEATURE_TSC_KNOWN_FREQ)) {
+ ret = sysfs_add_file_to_group(&dev->kobj,
+ &dev_attr_tsc_khz.attr,
+ umwait_attr_group.name);
+ if (ret)
+ goto out_group;
+ }
+
ret = cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "umwait/intel:online",
umwait_cpu_online, NULL);
if (ret < 0)
--
2.5.0
next prev parent reply other threads:[~2018-06-16 3:08 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-16 3:06 [RFC PATCH 0/8] x86: Enable a few new instructions Fenghua Yu
2018-06-16 3:06 ` [RFC PATCH 1/8] x86/cpufeatures: Enumerate MOVDIRI instruction Fenghua Yu
2018-06-19 8:57 ` Thomas Gleixner
2018-06-19 21:36 ` Fenghua Yu
2018-06-19 22:32 ` Thomas Gleixner
2018-06-19 22:35 ` Fenghua Yu
2018-06-25 16:13 ` David Laight
2018-06-16 3:06 ` [RFC PATCH 2/8] x86/cpufeatures: Enumerate MOVDIR64B instruction Fenghua Yu
2018-06-16 3:06 ` [RFC PATCH 3/8] x86/cpufeatures: Enumerate UMONITOR, UMWAIT, and TPAUSE instructions Fenghua Yu
2018-06-16 3:06 ` [RFC PATCH 4/8] cpuidle: Set up maximum umwait time and umwait states Fenghua Yu
2018-06-19 9:03 ` Thomas Gleixner
2018-06-19 15:46 ` Fenghua Yu
2018-06-16 3:06 ` Fenghua Yu [this message]
2018-06-19 9:08 ` [RFC PATCH 5/8] x86/umwait.c: Add sysfs interface to show tsc_khz Thomas Gleixner
2018-06-19 15:11 ` Fenghua Yu
2018-06-16 3:06 ` [RFC PATCH 6/8] x86/lib_direct_store.h: Add APIs for direct store instructions Fenghua Yu
2018-06-19 8:47 ` Thomas Gleixner
2018-06-16 3:06 ` [RFC PATCH 7/8] x86/lib_user_wait.h: Add APIs for user wait instructions Fenghua Yu
2018-06-19 9:12 ` Thomas Gleixner
2018-06-19 22:27 ` Fenghua Yu
2018-06-19 22:34 ` Thomas Gleixner
2018-06-19 22:36 ` Fenghua Yu
2018-06-16 3:06 ` [RFC PATCH 8/8] selftests/x86: Self test for the APIs in lib_direct_store.h and lib_user_wait.h 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=1529118375-90191-6-git-send-email-fenghua.yu@intel.com \
--to=fenghua.yu@intel.com \
--cc=alan@linux.intel.com \
--cc=ashok.raj@intel.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=ravi.v.shankar@intel.com \
--cc=tglx@linutronix.de \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).