Skip to content
  • Maciej W. Rozycki's avatar
    rtc: cmos: Fix non-ACPI undefined reference to `hpet_rtc_interrupt' · d197a253
    Maciej W. Rozycki authored
    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: default avatarMaciej 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: default avatarAlexandre Belloni <alexandre.belloni@bootlin.com>
    d197a253