diff options
author | Brian Norris <computersforpeace@gmail.com> | 2016-10-28 19:05:25 -0700 |
---|---|---|
committer | Brian Norris <computersforpeace@gmail.com> | 2016-10-28 19:05:25 -0700 |
commit | 0e2ce9d3fcba5f92dd6c2b27d82690e49d0c0854 (patch) | |
tree | a3413237c8dee15dfe620848fecb37408a096345 /drivers/misc/cxl/sysfs.c | |
parent | 30656167bd2347bf867a09cbae2705bd927d3983 (diff) | |
parent | 8ff0513bdcdd71e84aa561cce216675d43fb41b8 (diff) | |
download | talos-obmc-linux-0e2ce9d3fcba5f92dd6c2b27d82690e49d0c0854.tar.gz talos-obmc-linux-0e2ce9d3fcba5f92dd6c2b27d82690e49d0c0854.zip |
Merge tag 'nand/fixes-for-4.9-rc3' of github.com:linux-nand/linux
From Boris:
"""
Three simple fixes:
- the first one is fixing a non-critical bug in the gpmi driver
- the second one is fixing a bug in the 'automatic NAND timings
selection' feature introduced in 4.9-rc1
- the last one is fixing a false positive uninitialized-var warning
"""
Acked-by: Marek Vasut <marex@denx.de>
Diffstat (limited to 'drivers/misc/cxl/sysfs.c')
-rw-r--r-- | drivers/misc/cxl/sysfs.c | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/drivers/misc/cxl/sysfs.c b/drivers/misc/cxl/sysfs.c index b043c20f158f..a8b6d6a635e9 100644 --- a/drivers/misc/cxl/sysfs.c +++ b/drivers/misc/cxl/sysfs.c @@ -75,12 +75,31 @@ static ssize_t reset_adapter_store(struct device *device, int val; rc = sscanf(buf, "%i", &val); - if ((rc != 1) || (val != 1)) + if ((rc != 1) || (val != 1 && val != -1)) return -EINVAL; - if ((rc = cxl_ops->adapter_reset(adapter))) - return rc; - return count; + /* + * See if we can lock the context mapping that's only allowed + * when there are no contexts attached to the adapter. Once + * taken this will also prevent any context from getting activated. + */ + if (val == 1) { + rc = cxl_adapter_context_lock(adapter); + if (rc) + goto out; + + rc = cxl_ops->adapter_reset(adapter); + /* In case reset failed release context lock */ + if (rc) + cxl_adapter_context_unlock(adapter); + + } else if (val == -1) { + /* Perform a forced adapter reset */ + rc = cxl_ops->adapter_reset(adapter); + } + +out: + return rc ? rc : count; } static ssize_t load_image_on_perst_show(struct device *device, |