[tip: x86/cpu] tools/x86/kcpuid: Simplify usage() handling

From: tip-bot2 for Ahmed S. Darwish
Date: Tue Mar 25 2025 - 05:09:08 EST


The following commit has been merged into the x86/cpu branch of tip:

Commit-ID: 660c29fe53deeb3b3aef1d666ed3bde7608380bd
Gitweb: https://git.kernel.org/tip/660c29fe53deeb3b3aef1d666ed3bde7608380bd
Author: Ahmed S. Darwish <darwi@xxxxxxxxxxxxx>
AuthorDate: Mon, 24 Mar 2025 15:20:24 +01:00
Committer: Ingo Molnar <mingo@xxxxxxxxxx>
CommitterDate: Tue, 25 Mar 2025 09:53:44 +01:00

tools/x86/kcpuid: Simplify usage() handling

Refactor usage() to accept an exit code parameter and exit the program
after usage output. This streamlines its callers' code paths.

Remove the "Invalid option" error message since getopt_long(3) already
emits a similar message by default.

Signed-off-by: Ahmed S. Darwish <darwi@xxxxxxxxxxxxx>
Signed-off-by: Ingo Molnar <mingo@xxxxxxxxxx>
Cc: H. Peter Anvin <hpa@xxxxxxxxx>
Cc: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
Cc: Josh Poimboeuf <jpoimboe@xxxxxxxxxx>
Link: https://lore.kernel.org/r/20250324142042.29010-4-darwi@xxxxxxxxxxxxx
---
tools/arch/x86/kcpuid/kcpuid.c | 37 ++++++++++++++-------------------
1 file changed, 16 insertions(+), 21 deletions(-)

diff --git a/tools/arch/x86/kcpuid/kcpuid.c b/tools/arch/x86/kcpuid/kcpuid.c
index 25b10fe..a90ac0b 100644
--- a/tools/arch/x86/kcpuid/kcpuid.c
+++ b/tools/arch/x86/kcpuid/kcpuid.c
@@ -10,6 +10,7 @@

#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
#define min(a, b) (((a) < (b)) ? (a) : (b))
+#define __noreturn __attribute__((__noreturn__))

typedef unsigned int u32;
typedef unsigned long long u64;
@@ -584,17 +585,17 @@ static void setup_platform_cpuid(void)
leafs_ext = setup_cpuid_range(0x80000000);
}

-static void usage(void)
+static void __noreturn usage(int exit_code)
{
- warnx("kcpuid [-abdfhr] [-l leaf] [-s subleaf]\n"
- "\t-a|--all Show both bit flags and complex bit fields info\n"
- "\t-b|--bitflags Show boolean flags only\n"
- "\t-d|--detail Show details of the flag/fields (default)\n"
- "\t-f|--flags Specify the CPUID CSV file\n"
- "\t-h|--help Show usage info\n"
- "\t-l|--leaf=index Specify the leaf you want to check\n"
- "\t-r|--raw Show raw CPUID data\n"
- "\t-s|--subleaf=sub Specify the subleaf you want to check"
+ errx(exit_code, "kcpuid [-abdfhr] [-l leaf] [-s subleaf]\n"
+ "\t-a|--all Show both bit flags and complex bit fields info\n"
+ "\t-b|--bitflags Show boolean flags only\n"
+ "\t-d|--detail Show details of the flag/fields (default)\n"
+ "\t-f|--flags Specify the CPUID CSV file\n"
+ "\t-h|--help Show usage info\n"
+ "\t-l|--leaf=index Specify the leaf you want to check\n"
+ "\t-r|--raw Show raw CPUID data\n"
+ "\t-s|--subleaf=sub Specify the subleaf you want to check"
);
}

@@ -610,7 +611,7 @@ static struct option opts[] = {
{ NULL, 0, NULL, 0 }
};

-static int parse_options(int argc, char *argv[])
+static void parse_options(int argc, char *argv[])
{
int c;

@@ -630,9 +631,7 @@ static int parse_options(int argc, char *argv[])
user_csv = optarg;
break;
case 'h':
- usage();
- exit(1);
- break;
+ usage(EXIT_SUCCESS);
case 'l':
/* main leaf */
user_index = strtoul(optarg, NULL, 0);
@@ -645,11 +644,8 @@ static int parse_options(int argc, char *argv[])
user_sub = strtoul(optarg, NULL, 0);
break;
default:
- warnx("Invalid option '%c'", optopt);
- return -1;
- }
-
- return 0;
+ usage(EXIT_FAILURE);
+ }
}

/*
@@ -662,8 +658,7 @@ static int parse_options(int argc, char *argv[])
*/
int main(int argc, char *argv[])
{
- if (parse_options(argc, argv))
- return -1;
+ parse_options(argc, argv);

/* Setup the cpuid leafs of current platform */
setup_platform_cpuid();