• Heiko Carstens's avatar
    s390/timer: avoid overflow when programming clock comparator · d911e03d
    Heiko Carstens authored
    Since ed4f2094 "s390/time: fix sched_clock() overflow" a new helper function
    is used to avoid overflows when converting TOD format values to nanosecond
    values.
    The kvm interrupt code formerly however only worked by accident because of
    an overflow. It tried to program a timer that would expire in more than ~29
    years. Because of the old TOD-to-nanoseconds overflow bug the real expiry
    value however was much smaller, but now it isn't anymore.
    This however triggers yet another bug in the function that programs the clock
    comparator s390_next_ktime(): if the absolute "expires" value is after 2042
    this will result in an overflow and the programmed value is lower than the
    current TOD value which immediatly triggers a clock comparator (= timer)
    interrupt.
    Since the timer isn't expired it will be programmed immediately again and so
    on... the result is a dead system.
    To fix this simply program the maximum possible value if an overflow is
    detected.
    Reported-by: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
    Tested-by: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
    Cc: stable@vger.kernel.org # v3.3+
    Signed-off-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
    d911e03d
time.c 46 KB