ipmi_si: Introduce ipmi_panic_event_str[] array
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Fri, 2 Apr 2021 17:43:29 +0000 (20:43 +0300)
committerCorey Minyard <cminyard@mvista.com>
Fri, 2 Apr 2021 17:53:28 +0000 (12:53 -0500)
Instead of repeating twice the constant literals, introduce
ipmi_panic_event_str[] array. It allows to simplify the code
with help of match_string() API.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Message-Id: <20210402174334.13466-6-andriy.shevchenko@linux.intel.com>
Signed-off-by: Corey Minyard <cminyard@mvista.com>
drivers/char/ipmi/ipmi_msghandler.c

index f19f0f9..367616a 100644 (file)
@@ -49,11 +49,17 @@ static int handle_one_recv_msg(struct ipmi_smi *intf,
 static bool initialized;
 static bool drvregistered;
 
+/* Numbers in this enumerator should be mapped to ipmi_panic_event_str */
 enum ipmi_panic_event_op {
        IPMI_SEND_PANIC_EVENT_NONE,
        IPMI_SEND_PANIC_EVENT,
-       IPMI_SEND_PANIC_EVENT_STRING
+       IPMI_SEND_PANIC_EVENT_STRING,
+       IPMI_SEND_PANIC_EVENT_MAX
 };
+
+/* Indices in this array should be mapped to enum ipmi_panic_event_op */
+static const char *const ipmi_panic_event_str[] = { "none", "event", "string", NULL };
+
 #ifdef CONFIG_IPMI_PANIC_STRING
 #define IPMI_PANIC_DEFAULT IPMI_SEND_PANIC_EVENT_STRING
 #elif defined(CONFIG_IPMI_PANIC_EVENT)
@@ -68,46 +74,27 @@ static int panic_op_write_handler(const char *val,
                                  const struct kernel_param *kp)
 {
        char valcp[16];
-       char *s;
-
-       strncpy(valcp, val, 15);
-       valcp[15] = '\0';
+       int e;
 
-       s = strstrip(valcp);
-
-       if (strcmp(s, "none") == 0)
-               ipmi_send_panic_event = IPMI_SEND_PANIC_EVENT_NONE;
-       else if (strcmp(s, "event") == 0)
-               ipmi_send_panic_event = IPMI_SEND_PANIC_EVENT;
-       else if (strcmp(s, "string") == 0)
-               ipmi_send_panic_event = IPMI_SEND_PANIC_EVENT_STRING;
-       else
-               return -EINVAL;
+       strscpy(valcp, val, sizeof(valcp));
+       e = match_string(ipmi_panic_event_str, -1, strstrip(valcp));
+       if (e < 0)
+               return e;
 
+       ipmi_send_panic_event = e;
        return 0;
 }
 
 static int panic_op_read_handler(char *buffer, const struct kernel_param *kp)
 {
-       switch (ipmi_send_panic_event) {
-       case IPMI_SEND_PANIC_EVENT_NONE:
-               strcpy(buffer, "none\n");
-               break;
-
-       case IPMI_SEND_PANIC_EVENT:
-               strcpy(buffer, "event\n");
-               break;
-
-       case IPMI_SEND_PANIC_EVENT_STRING:
-               strcpy(buffer, "string\n");
-               break;
+       const char *event_str;
 
-       default:
-               strcpy(buffer, "???\n");
-               break;
-       }
+       if (ipmi_send_panic_event >= IPMI_SEND_PANIC_EVENT_MAX)
+               event_str = "???";
+       else
+               event_str = ipmi_panic_event_str[ipmi_send_panic_event];
 
-       return strlen(buffer);
+       return sprintf(buffer, "%s\n", event_str);
 }
 
 static const struct kernel_param_ops panic_op_ops = {