// SPDX-License-Identifier: MIT /* Copyright © 2025 Intel Corporation */ #include #include "i915_timer_util.h" void cancel_timer(struct timer_list *t) { if (!timer_active(t)) return; timer_delete(t); WRITE_ONCE(t->expires, 0); } void set_timer_ms(struct timer_list *t, unsigned long timeout) { if (!timeout) { cancel_timer(t); return; } timeout = msecs_to_jiffies(timeout); /* * Paranoia to make sure the compiler computes the timeout before * loading 'jiffies' as jiffies is volatile and may be updated in * the background by a timer tick. All to reduce the complexity * of the addition and reduce the risk of losing a jiffy. */ barrier(); /* Keep t->expires = 0 reserved to indicate a canceled timer. */ mod_timer(t, jiffies + timeout ?: 1); }