On Wed, Mar 11, 2020 at 01:30:24PM +0100, David Hildenbrand wrote: >Let's use a simple array which we can reuse soon. While at it, move the >string->mmop conversion out of the device hotplug lock. > >Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> >Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> >Cc: Michal Hocko <mhocko@xxxxxxxxxx> >Cc: Oscar Salvador <osalvador@xxxxxxx> >Cc: "Rafael J. Wysocki" <rafael@xxxxxxxxxx> >Cc: Baoquan He <bhe@xxxxxxxxxx> >Cc: Wei Yang <richard.weiyang@xxxxxxxxx> >Signed-off-by: David Hildenbrand <david@xxxxxxxxxx> >--- > drivers/base/memory.c | 38 +++++++++++++++++++++++--------------- > 1 file changed, 23 insertions(+), 15 deletions(-) > >diff --git a/drivers/base/memory.c b/drivers/base/memory.c >index e7e77cafef80..8a7f29c0bf97 100644 >--- a/drivers/base/memory.c >+++ b/drivers/base/memory.c >@@ -28,6 +28,24 @@ > > #define MEMORY_CLASS_NAME "memory" > >+static const char *const online_type_to_str[] = { >+ [MMOP_OFFLINE] = "offline", >+ [MMOP_ONLINE] = "online", >+ [MMOP_ONLINE_KERNEL] = "online_kernel", >+ [MMOP_ONLINE_MOVABLE] = "online_movable", >+}; >+ >+static int memhp_online_type_from_str(const char *str) >+{ >+ int i; >+ >+ for (i = 0; i < ARRAY_SIZE(online_type_to_str); i++) { >+ if (sysfs_streq(str, online_type_to_str[i])) >+ return i; >+ } >+ return -EINVAL; >+} >+ > #define to_memory_block(dev) container_of(dev, struct memory_block, dev) > > static int sections_per_block; >@@ -236,26 +254,17 @@ static int memory_subsys_offline(struct device *dev) > static ssize_t state_store(struct device *dev, struct device_attribute *attr, > const char *buf, size_t count) > { >+ const int online_type = memhp_online_type_from_str(buf); In your following patch, you did the same conversion. Is it possible to merge them into this one? > struct memory_block *mem = to_memory_block(dev); >- int ret, online_type; >+ int ret; >+ >+ if (online_type < 0) >+ return -EINVAL; > > ret = lock_device_hotplug_sysfs(); > if (ret) > return ret; > >- if (sysfs_streq(buf, "online_kernel")) >- online_type = MMOP_ONLINE_KERNEL; >- else if (sysfs_streq(buf, "online_movable")) >- online_type = MMOP_ONLINE_MOVABLE; >- else if (sysfs_streq(buf, "online")) >- online_type = MMOP_ONLINE; >- else if (sysfs_streq(buf, "offline")) >- online_type = MMOP_OFFLINE; >- else { >- ret = -EINVAL; >- goto err; >- } >- > switch (online_type) { > case MMOP_ONLINE_KERNEL: > case MMOP_ONLINE_MOVABLE: >@@ -271,7 +280,6 @@ static ssize_t state_store(struct device *dev, struct device_attribute *attr, > ret = -EINVAL; /* should never happen */ > } > >-err: > unlock_device_hotplug(); > > if (ret < 0) >-- >2.24.1 -- Wei Yang Help you, Help me