Messages in this thread Patch in this message | | | From | Gavin Shan <> | Subject | [PATCH v2] drivers/base/memory: Use array to show memory block state | Date | Sat, 21 Jan 2023 07:38:14 +0800 |
| |
Use an array to show memory block state from '/sys/devices/system/ memory/memoryX/state', to simplify the code. Besides, WARN_ON() is removed since the warning can be caught by the return value, which is "ERROR-UNKNOWN-%ld\n". A system reboot caused by WARN_ON() is definitely unexpected as Greg mentioned.
No functional change intended.
Signed-off-by: Gavin Shan <gshan@redhat.com> --- v2: Drop WARN_ON() (Greg) --- drivers/base/memory.c | 25 ++++++------------------- 1 file changed, 6 insertions(+), 19 deletions(-)
diff --git a/drivers/base/memory.c b/drivers/base/memory.c index b456ac213610..0fdacdc79806 100644 --- a/drivers/base/memory.c +++ b/drivers/base/memory.c @@ -141,28 +141,15 @@ static ssize_t state_show(struct device *dev, struct device_attribute *attr, char *buf) { struct memory_block *mem = to_memory_block(dev); - const char *output; + static const char *const mem_state_str[] = { + NULL, "online", "going-offline", NULL, "offline", + }; - /* - * We can probably put these states in a nice little array - * so that they're not open-coded - */ - switch (mem->state) { - case MEM_ONLINE: - output = "online"; - break; - case MEM_OFFLINE: - output = "offline"; - break; - case MEM_GOING_OFFLINE: - output = "going-offline"; - break; - default: - WARN_ON(1); + if (mem->state >= ARRAY_SIZE(mem_state_str) || + !mem_state_str[mem->state]) return sysfs_emit(buf, "ERROR-UNKNOWN-%ld\n", mem->state); - } - return sysfs_emit(buf, "%s\n", output); + return sysfs_emit(buf, "%s\n", mem_state_str[mem->state]); } int memory_notify(unsigned long val, void *v) -- 2.23.0
| |