• M
    rtc: cmos: Fix non-ACPI undefined reference to `hpet_rtc_interrupt' · 65a060ca
    Maciej W. Rozycki 提交于
    commit d197a253855d2d8e507a003880aab35c4e2473db upstream.
    
    Fix a commit 311ee9c1 ("rtc: cmos: allow using ACPI for RTC alarm
    instead of HPET") `rtc-cmos' regression causing a link error:
    
    drivers/rtc/rtc-cmos.o: In function `cmos_platform_probe':
    rtc-cmos.c:(.init.text+0x33c): undefined reference to `hpet_rtc_interrupt'
    rtc-cmos.c:(.init.text+0x3f4): undefined reference to `hpet_rtc_interrupt'
    
    with non-ACPI platforms using this driver.  The cause is the change of
    the condition guarding the use of `hpet_rtc_interrupt'.
    
    Previously it was a call to `is_hpet_enabled'.  That function is static
    inline and has a hardcoded 0 result for non-ACPI platforms, which imply
    !HPET_EMULATE_RTC.  Consequently the compiler optimized the whole block
    away including the reference to `hpet_rtc_interrupt', which never made
    it to the link stage.
    
    Now the guarding condition is a call to `use_hpet_alarm', which is not
    static inline and therefore the compiler may not be able to prove that
    it actually always returns 0 for non-ACPI platforms.  Consequently the
    build breaks with an unsatisfied reference, because `hpet_rtc_interrupt'
    is nowhere defined at link time.
    
    Fix the problem by marking `use_hpet_alarm' inline.  As the `inline'
    keyword serves as an optimization hint rather than a requirement the
    compiler is still free to choose whether inlining will be beneficial or
    not for ACPI platforms.
    Signed-off-by: NMaciej W. Rozycki <macro@linux-mips.org>
    Fixes: 311ee9c1 ("rtc: cmos: allow using ACPI for RTC alarm instead of HPET")
    Cc: stable@vger.kernel.org # 4.18+
    Signed-off-by: NAlexandre Belloni <alexandre.belloni@bootlin.com>
    Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    65a060ca
rtc-cmos.c 36.3 KB