From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from confino.investici.org (confino.investici.org [93.190.126.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BA5433FD943 for ; Mon, 6 Jul 2026 12:28:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=93.190.126.19 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783340897; cv=none; b=ofJ2Wif/ATz5gGJ0YPjifI+VvuYkB1rWeK+p7HxbRyJeFtgKFPw1kEv6s6ilR68DwPL7mswdiTT79w2dynsCd2wU2eNn40YbhEs6foBhExxiSYb9AJ8sxMnKxzjr6NryVakYsVrSjjzkoxb1NEJWN1R9DHqeYLJj2F3jS9bZ32k= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783340897; c=relaxed/simple; bh=+mNgUyOnGzX/eoQ8W6g/hCTllozoZPqWVIKC0NlpKks=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=GX2t2LzEFSOgoCz/iHejehFQRvkMMSTBzPTNaiuRKnYuFTX7GcgGO5kVaIDMFJ2hs038FeoJauDpzeTU63Hnw8Awpnzoy1HQecqz0Spt1Eglwz3xN8+Qt9t7IB3hO1p65/cimGRm+V8rg26Qs+znX8BoaGWo5D//G7BqlGdgU+U= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=grrlz.net; spf=pass smtp.mailfrom=grrlz.net; dkim=pass (1024-bit key) header.d=grrlz.net header.i=@grrlz.net header.b=FmuGPGBt; arc=none smtp.client-ip=93.190.126.19 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=grrlz.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=grrlz.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=grrlz.net header.i=@grrlz.net header.b="FmuGPGBt" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=grrlz.net; s=stigmate; t=1783340890; bh=S3mKoy+JmEo46Af7Zs1nOA1YmI2nQ9osEhB4Vs6fRds=; h=From:To:Cc:Subject:Date:From; b=FmuGPGBtHlWJBjjJsFfMaXifHfR8LqTRmbionJvycdhp3aLsAMIHdH1T3CtH1A1h3 Suj+kJoB80NexhEJy8zrXek+Vtcf7pa68FfSRQNd3HJ7OVFQ3dPbDXazHu3R0uVcQ5 FYjoWWM8r7hh5DgeX19/ATTNd7X4IcSB84dYYT8o= Received: from mx1.investici.org (unknown [127.0.0.1]) by confino.investici.org (Postfix) with ESMTP id 4gv3Y64xrwz10vk; Mon, 06 Jul 2026 12:28:10 +0000 (UTC) Received: by mx1.investici.org (Postfix) id 4gv3Y61TzPz10xY; Mon, 06 Jul 2026 12:28:10 +0000 (UTC) From: Bradley Morgan To: akpm@linux-foundation.org Cc: kees@kernel.org, linux-kernel@vger.kernel.org, Bradley Morgan Subject: [PATCH] reboot: use lookup tables for sysfs mode and type strings Date: Mon, 6 Jul 2026 12:28:11 +0000 Message-ID: <20260706122811.6695-1-include@grrlz.net> X-Mailer: git-send-email 2.53.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Replace switch and if else chains in the mode and type sysfs handlers with lookup tables, removing duplicated string macros. Signed-off-by: Bradley Morgan --- kernel/reboot.c | 136 ++++++++++++++++++------------------------------ 1 file changed, 51 insertions(+), 85 deletions(-) diff --git a/kernel/reboot.c b/kernel/reboot.c index 695c33e75efd..41a2519755aa 100644 --- a/kernel/reboot.c +++ b/kernel/reboot.c @@ -1177,68 +1177,43 @@ __setup("reboot=", reboot_setup); #ifdef CONFIG_SYSFS -#define REBOOT_COLD_STR "cold" -#define REBOOT_WARM_STR "warm" -#define REBOOT_HARD_STR "hard" -#define REBOOT_SOFT_STR "soft" -#define REBOOT_GPIO_STR "gpio" #define REBOOT_UNDEFINED_STR "undefined" -#define BOOT_TRIPLE_STR "triple" -#define BOOT_KBD_STR "kbd" -#define BOOT_BIOS_STR "bios" -#define BOOT_ACPI_STR "acpi" -#define BOOT_EFI_STR "efi" -#define BOOT_PCI_STR "pci" +static const char *const reboot_mode_strs[] = { + [REBOOT_COLD] = "cold", + [REBOOT_WARM] = "warm", + [REBOOT_HARD] = "hard", + [REBOOT_SOFT] = "soft", + [REBOOT_GPIO] = "gpio", +}; static ssize_t mode_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf) { - const char *val; + const char *val = REBOOT_UNDEFINED_STR; - switch (reboot_mode) { - case REBOOT_COLD: - val = REBOOT_COLD_STR; - break; - case REBOOT_WARM: - val = REBOOT_WARM_STR; - break; - case REBOOT_HARD: - val = REBOOT_HARD_STR; - break; - case REBOOT_SOFT: - val = REBOOT_SOFT_STR; - break; - case REBOOT_GPIO: - val = REBOOT_GPIO_STR; - break; - default: - val = REBOOT_UNDEFINED_STR; - } + if ((unsigned int)reboot_mode < ARRAY_SIZE(reboot_mode_strs)) + val = reboot_mode_strs[reboot_mode]; return sysfs_emit(buf, "%s\n", val); } static ssize_t mode_store(struct kobject *kobj, struct kobj_attribute *attr, const char *buf, size_t count) { + unsigned int i; + if (!capable(CAP_SYS_BOOT)) return -EPERM; - if (!strncmp(buf, REBOOT_COLD_STR, strlen(REBOOT_COLD_STR))) - reboot_mode = REBOOT_COLD; - else if (!strncmp(buf, REBOOT_WARM_STR, strlen(REBOOT_WARM_STR))) - reboot_mode = REBOOT_WARM; - else if (!strncmp(buf, REBOOT_HARD_STR, strlen(REBOOT_HARD_STR))) - reboot_mode = REBOOT_HARD; - else if (!strncmp(buf, REBOOT_SOFT_STR, strlen(REBOOT_SOFT_STR))) - reboot_mode = REBOOT_SOFT; - else if (!strncmp(buf, REBOOT_GPIO_STR, strlen(REBOOT_GPIO_STR))) - reboot_mode = REBOOT_GPIO; - else - return -EINVAL; - - reboot_default = 0; + for (i = 0; i < ARRAY_SIZE(reboot_mode_strs); i++) { + if (!strncmp(buf, reboot_mode_strs[i], + strlen(reboot_mode_strs[i]))) { + reboot_mode = i; + reboot_default = 0; + return count; + } + } - return count; + return -EINVAL; } static struct kobj_attribute reboot_mode_attr = __ATTR_RW(mode); @@ -1265,31 +1240,28 @@ static ssize_t force_store(struct kobject *kobj, struct kobj_attribute *attr, } static struct kobj_attribute reboot_force_attr = __ATTR_RW(force); +static const struct { + enum reboot_type type; + const char *str; +} reboot_type_strs[] = { + { BOOT_TRIPLE, "triple" }, + { BOOT_KBD, "kbd" }, + { BOOT_BIOS, "bios" }, + { BOOT_ACPI, "acpi" }, + { BOOT_EFI, "efi" }, + { BOOT_CF9_FORCE, "pci" }, +}; + static ssize_t type_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf) { - const char *val; + const char *val = REBOOT_UNDEFINED_STR; + unsigned int i; - switch (reboot_type) { - case BOOT_TRIPLE: - val = BOOT_TRIPLE_STR; - break; - case BOOT_KBD: - val = BOOT_KBD_STR; - break; - case BOOT_BIOS: - val = BOOT_BIOS_STR; - break; - case BOOT_ACPI: - val = BOOT_ACPI_STR; - break; - case BOOT_EFI: - val = BOOT_EFI_STR; - break; - case BOOT_CF9_FORCE: - val = BOOT_PCI_STR; - break; - default: - val = REBOOT_UNDEFINED_STR; + for (i = 0; i < ARRAY_SIZE(reboot_type_strs); i++) { + if (reboot_type == reboot_type_strs[i].type) { + val = reboot_type_strs[i].str; + break; + } } return sysfs_emit(buf, "%s\n", val); @@ -1297,27 +1269,21 @@ static ssize_t type_show(struct kobject *kobj, struct kobj_attribute *attr, char static ssize_t type_store(struct kobject *kobj, struct kobj_attribute *attr, const char *buf, size_t count) { + unsigned int i; + if (!capable(CAP_SYS_BOOT)) return -EPERM; - if (!strncmp(buf, BOOT_TRIPLE_STR, strlen(BOOT_TRIPLE_STR))) - reboot_type = BOOT_TRIPLE; - else if (!strncmp(buf, BOOT_KBD_STR, strlen(BOOT_KBD_STR))) - reboot_type = BOOT_KBD; - else if (!strncmp(buf, BOOT_BIOS_STR, strlen(BOOT_BIOS_STR))) - reboot_type = BOOT_BIOS; - else if (!strncmp(buf, BOOT_ACPI_STR, strlen(BOOT_ACPI_STR))) - reboot_type = BOOT_ACPI; - else if (!strncmp(buf, BOOT_EFI_STR, strlen(BOOT_EFI_STR))) - reboot_type = BOOT_EFI; - else if (!strncmp(buf, BOOT_PCI_STR, strlen(BOOT_PCI_STR))) - reboot_type = BOOT_CF9_FORCE; - else - return -EINVAL; - - reboot_default = 0; + for (i = 0; i < ARRAY_SIZE(reboot_type_strs); i++) { + if (!strncmp(buf, reboot_type_strs[i].str, + strlen(reboot_type_strs[i].str))) { + reboot_type = reboot_type_strs[i].type; + reboot_default = 0; + return count; + } + } - return count; + return -EINVAL; } static struct kobj_attribute reboot_type_attr = __ATTR_RW(type); #endif -- 2.53.0