From 3c7acb209e1d630b734a2ec72bd988f5da2ac55c Mon Sep 17 00:00:00 2001 From: Gregory Price Date: Thu, 15 Oct 2026 13:30:29 -0400 Subject: [PATCH] rtc: cmos: Honor explicit use_acpi_alarm parameter value An explicit rtc_cmos.use_acpi_alarm=0 command-line argument is ignored on systems where use_acpi_alarm_quirks() enables ACPI RTC alarms. The argument appears in /proc/cmdline, but the read-only parameter reports Y. The boolean parameter defaults to false, so the driver cannot distinguish an omitted argument from an explicit false value. Use a custom setter to record whether parsing occurred and skip automatic selection when it did. Preserve the bool parameter type metadata. Automatic selection remains unchanged when the parameter is omitted. On the affected system, the explicit false value reports N after this change. The HPET-emulated path completed 100 test runs without a failure while the ACPI RTC event counter remained at zero. Fixes: 36d91a4d401c ("rtc: cmos: introduce quirks to enable use_acpi_alarm mode") Cc: stable@vger.kernel.org Signed-off-by: Gregory Price (Meta) Link: https://patch.msgid.link/20261015173029.3091872-3-gourry@gourry.net Signed-off-by: Alexandre Belloni --- drivers/rtc/rtc-cmos.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/drivers/rtc/rtc-cmos.c b/drivers/rtc/rtc-cmos.c index fe514b1aa343..209aa4ec732c 100644 --- a/drivers/rtc/rtc-cmos.c +++ b/drivers/rtc/rtc-cmos.c @@ -57,7 +57,28 @@ */ static bool use_acpi_alarm; -module_param(use_acpi_alarm, bool, 0444); +static bool use_acpi_alarm_explicit; + +static int set_use_acpi_alarm(const char *val, const struct kernel_param *kp) +{ + int ret; + + ret = param_set_bool(val, kp); + if (!ret) + use_acpi_alarm_explicit = true; + + return ret; +} + +static const struct kernel_param_ops use_acpi_alarm_ops = { + .flags = KERNEL_PARAM_OPS_FL_NOARG, + .set = set_use_acpi_alarm, + .get = param_get_bool, +}; + +param_check_bool(use_acpi_alarm, &use_acpi_alarm); +module_param_cb(use_acpi_alarm, &use_acpi_alarm_ops, &use_acpi_alarm, 0444); +__MODULE_PARM_TYPE(use_acpi_alarm, "bool"); static inline int cmos_use_acpi_alarm(void) { @@ -822,6 +843,9 @@ static void rtc_wake_off(struct device *dev) #ifdef CONFIG_X86 static void use_acpi_alarm_quirks(void) { + if (use_acpi_alarm_explicit) + return; + if (acpi_gbl_FADT.flags & ACPI_FADT_FIXED_RTC) return;