All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg KH <greg@kroah.com>
To: Fenghua Yu <fenghua.yu@intel.com>
Cc: Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@elte.hu>,
	"H. Peter Anvin" <hpa@linux.intel.com>,
	Ashok Raj <ashok.raj@intel.com>,
	Dave Hansen <dave.hansen@intel.com>,
	Rafael Wysocki <rafael.j.wysocki@intel.com>,
	Tony Luck <tony.luck@intel.com>, Alan Cox <alan@linux.intel.com>,
	Ravi V Shankar <ravi.v.shankar@intel.com>,
	Arjan van de Ven <arjan@infradead.org>,
	linux-kernel <linux-kernel@vger.kernel.org>, x86 <x86@kernel.org>
Subject: Re: [RFC PATCH 10/16] x86/split_lock: Add a debugfs interface to allow user to enable or disable #AC for split lock during run time
Date: Tue, 29 May 2018 20:43:08 +0200	[thread overview]
Message-ID: <20180529184308.GC10618@kroah.com> (raw)
In-Reply-To: <1527435965-202085-11-git-send-email-fenghua.yu@intel.com>

On Sun, May 27, 2018 at 08:45:59AM -0700, Fenghua Yu wrote:
> User wants to enable or disable #AC for split lock during run time.
> 
> The interface /sys/kernel/debug/x86/split_lock/enable is added to allow
> user to control #AC for split lock and show current split lock status
> during run time.
> 
> Writing 1 to the file enables #AC for split lock and writing 0 disables
> #AC for split lock.
> 
> Reading the file shows current eanbled/disabled status of #AC for split
> lock:
> 0: disabled and 1: enabled.
> 
> Signed-off-by: Fenghua Yu <fenghua.yu@intel.com>
> ---
>  arch/x86/kernel/cpu/test_ctl.c | 92 ++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 92 insertions(+)
> 
> diff --git a/arch/x86/kernel/cpu/test_ctl.c b/arch/x86/kernel/cpu/test_ctl.c
> index a2f84fcd4da1..e8b3032f3db0 100644
> --- a/arch/x86/kernel/cpu/test_ctl.c
> +++ b/arch/x86/kernel/cpu/test_ctl.c
> @@ -17,6 +17,7 @@
>  #include <linux/mm.h>
>  #include <linux/reboot.h>
>  #include <linux/syscore_ops.h>
> +#include <linux/debugfs.h>
>  #include <asm/msr.h>
>  
>  #define DISABLE_SPLIT_LOCK_AC		0
> @@ -34,6 +35,14 @@ static DEFINE_MUTEX(reexecute_split_lock_mutex);
>  static int split_lock_ac_kernel = DISABLE_SPLIT_LOCK_AC;
>  static int split_lock_ac_firmware = DISABLE_SPLIT_LOCK_AC;
>  
> +static DEFINE_MUTEX(split_lock_mutex);
> +
> +struct debugfs_file {
> +	char				name[32];
> +	int				mode;
> +	const struct file_operations	*fops;
> +};
> +
>  /* Detete feature of #AC for split lock by probing bit 29 in MSR_TEST_CTL. */
>  void detect_split_lock_ac(void)
>  {
> @@ -292,6 +301,85 @@ static struct syscore_ops split_lock_syscore_ops = {
>  	.resume		= split_lock_bsp_resume,
>  };
>  
> +static int enable_show(void *data, u64 *val)
> +{
> +	*val = split_lock_ac_kernel;
> +
> +	return 0;
> +}
> +
> +static int enable_store(void *data, u64 val)
> +{
> +	u64 msr_val;
> +	int cpu;
> +
> +	if (val != DISABLE_SPLIT_LOCK_AC && val != ENABLE_SPLIT_LOCK_AC)
> +		return -EINVAL;
> +
> +	/* No need to update MSR if new setting is the same as old one. */
> +	if (val == split_lock_ac_kernel)
> +		return 0;
> +
> +	mutex_lock(&split_lock_mutex);
> +	mutex_lock(&reexecute_split_lock_mutex);
> +
> +	/*
> +	 * Wait until it's out of any re-executed split lock instruction
> +	 * window.
> +	 */
> +	wait_for_reexecution();
> +
> +	split_lock_ac_kernel = val;
> +	/* Read split lock setting on the current CPU. */
> +	rdmsrl(MSR_TEST_CTL, msr_val);
> +	/* Change the split lock setting. */
> +	if (split_lock_ac_kernel == DISABLE_SPLIT_LOCK_AC)
> +		msr_val &= ~MSR_TEST_CTL_ENABLE_AC_SPLIT_LOCK;
> +	else
> +		msr_val |= MSR_TEST_CTL_ENABLE_AC_SPLIT_LOCK;
> +	/* Update the split lock setting on all online CPUs. */
> +	for_each_online_cpu(cpu)
> +		wrmsrl_on_cpu(cpu, MSR_TEST_CTL, msr_val);
> +
> +	mutex_unlock(&reexecute_split_lock_mutex);
> +	mutex_unlock(&split_lock_mutex);
> +
> +	return 0;
> +}
> +
> +DEFINE_DEBUGFS_ATTRIBUTE(enable_ops, enable_show, enable_store, "%llx\n");
> +
> +static int __init debugfs_setup_split_lock(void)
> +{
> +	struct debugfs_file debugfs_files[] = {
> +		{"enable",      0600, &enable_ops},
> +	};
> +	struct dentry *split_lock_dir, *fd;
> +	int i;
> +
> +	split_lock_dir = debugfs_create_dir("split_lock", arch_debugfs_dir);
> +	if (!split_lock_dir)
> +		goto out;
> +

No need to test this, just keep moving on.  You should never need to
test the result of any debugfs call at all.


> +	/*  Create files under split_lock_dir. */
> +	for (i = 0; i < ARRAY_SIZE(debugfs_files); i++) {
> +		fd = debugfs_create_file(debugfs_files[i].name,
> +					 debugfs_files[i].mode,
> +					 split_lock_dir, NULL,
> +					 debugfs_files[i].fops);
> +		if (!fd)
> +			goto out_cleanup;

Same here, no need to test anything.

> +	}
> +
> +	return 0;

This function can not fail, might as well make it return void :)

thanks,

greg k-h

  reply	other threads:[~2018-05-29 18:43 UTC|newest]

Thread overview: 73+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-27 15:45 [RFC PATCH 00/16] x86/split_lock: Enable #AC exception for split locked accesses Fenghua Yu
2018-05-27 15:45 ` [RFC PATCH 01/16] x86/split_lock: Add CONFIG and enumerate #AC exception for split locked access feature Fenghua Yu
2018-05-27 15:45 ` [RFC PATCH 02/16] x86/split_lock: Handle #AC exception for split lock in kernel mode Fenghua Yu
2018-06-21 19:46   ` Peter Zijlstra
2018-06-22 10:49   ` Thomas Gleixner
2018-06-22 11:59     ` Thomas Gleixner
2018-06-22 22:41       ` Fenghua Yu
2018-06-22 22:57         ` Thomas Gleixner
2018-06-22 23:03           ` Thomas Gleixner
2018-06-22 23:18       ` Fenghua Yu
2018-06-23  9:08         ` Thomas Gleixner
2018-06-23  4:20     ` Fenghua Yu
2018-06-23  9:17       ` Thomas Gleixner
2018-06-23 15:05         ` Fenghua Yu
2018-06-24  0:55           ` Thomas Gleixner
2018-06-24  1:17             ` Fenghua Yu
2018-06-24  6:43               ` Thomas Gleixner
2018-05-27 15:45 ` [RFC PATCH 03/16] x86/split_lock: Set up #AC exception for split locked accesses on all CPUs Fenghua Yu
2018-05-27 15:45 ` [RFC PATCH 04/16] x86/split_lock: Use non locked bit set instruction in set_cpu_cap Fenghua Yu
2018-06-21 19:55   ` Peter Zijlstra
2018-06-21 20:37     ` Thomas Gleixner
2018-06-27 23:35     ` Fenghua Yu
2018-06-28  7:53       ` Thomas Gleixner
2018-06-28 14:23         ` Fenghua Yu
2018-06-28 14:54           ` Fenghua Yu
2018-05-27 15:45 ` [RFC PATCH 05/16] x86/split_lock: Use non atomic set and clear bit instructions in clear_cpufeature() Fenghua Yu
2018-05-27 15:45 ` [RFC PATCH 06/16] x86/split_lock: Save #AC setting for split lock in firmware in boot time and restore the setting in reboot Fenghua Yu
2018-06-21 19:58   ` Peter Zijlstra
2018-06-22 15:11     ` Alan Cox
2018-06-26  9:05       ` Peter Zijlstra
2018-06-26  9:40         ` Thomas Gleixner
2018-06-26 11:02         ` Alan Cox
2018-06-26 11:31           ` Peter Zijlstra
2018-05-27 15:45 ` [RFC PATCH 07/16] x86/split_lock: Handle suspend/hibernate and resume Fenghua Yu
2018-05-27 15:45 ` [RFC PATCH 08/16] x86/split_lock: Set split lock during EFI runtime service Fenghua Yu
2018-05-27 15:45 ` [RFC PATCH 09/16] x86/split_lock: Add CONFIG to control #AC for split lock at boot time Fenghua Yu
2018-05-27 15:45 ` [RFC PATCH 10/16] x86/split_lock: Add a debugfs interface to allow user to enable or disable #AC for split lock during run time Fenghua Yu
2018-05-29 18:43   ` Greg KH [this message]
2018-05-27 15:46 ` [RFC PATCH 11/16] x86/split_lock: Add CONFIG to control #AC for split lock from kernel at boot time Fenghua Yu
2018-05-27 15:46 ` [RFC PATCH 12/16] x86/split_lock: Add a debugfs interface to allow user to change how to handle split lock in kernel mode during run time Fenghua Yu
2018-05-27 15:46 ` [RFC PATCH 13/16] x86/split_lock: Add debugfs interface to control user mode behavior Fenghua Yu
2018-05-27 15:46 ` [RFC PATCH 14/16] x86/split_lock: Add debugfs interface to show and control firmware setting for split lock Fenghua Yu
2018-05-27 15:46 ` [RFC PATCH 15/16] x86/split_lock: Add CONFIG and debugfs interface for testing #AC for split lock in kernel mode Fenghua Yu
2018-05-27 15:46 ` [RFC PATCH 16/16] x86/split_lock: Add user space split lock test in selftest Fenghua Yu
2018-05-29 16:39 ` [RFC PATCH 00/16] x86/split_lock: Enable #AC exception for split locked accesses Dave Hansen
2018-05-29 17:25   ` Fenghua Yu
2018-05-29 17:28     ` Dave Hansen
2018-05-29 17:40       ` Fenghua Yu
2018-05-29 16:40 ` Dave Hansen
2018-05-29 17:38   ` Fenghua Yu
2018-06-21 20:06   ` Peter Zijlstra
2018-06-21 19:37 ` Peter Zijlstra
2018-06-21 20:18   ` Fenghua Yu
2018-06-21 20:32     ` Thomas Gleixner
2018-06-21 22:00       ` Fenghua Yu
2018-06-21 22:07         ` Peter Zijlstra
2018-06-21 22:08         ` Peter Zijlstra
2018-06-21 22:18           ` Dave Hansen
2018-06-21 22:42             ` Fenghua Yu
2018-06-22  8:11               ` Peter Zijlstra
2018-06-22  9:30               ` Thomas Gleixner
2018-06-21 22:10         ` Peter Zijlstra
2018-06-21 23:05           ` Fenghua Yu
2018-06-22  8:19             ` Peter Zijlstra
2018-06-21 22:11         ` Peter Zijlstra
2018-06-21 22:43           ` Fenghua Yu
2018-06-21 22:13         ` Peter Zijlstra
2018-06-23 18:47           ` Fenghua Yu
2018-06-22  9:18         ` Thomas Gleixner
2018-06-22  9:22         ` Thomas Gleixner
2018-06-22  9:25         ` Thomas Gleixner
2018-06-22  9:28         ` Thomas Gleixner
2018-06-21 20:36     ` Peter Zijlstra

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=20180529184308.GC10618@kroah.com \
    --to=greg@kroah.com \
    --cc=alan@linux.intel.com \
    --cc=arjan@infradead.org \
    --cc=ashok.raj@intel.com \
    --cc=dave.hansen@intel.com \
    --cc=fenghua.yu@intel.com \
    --cc=hpa@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=rafael.j.wysocki@intel.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.