On Tue, 2024-05-07 at 20:43 -0700, Ricardo Neri wrote:
> The delay between an HFI interrupt and its corresponding thermal
> netlink
> event has so far been hard-coded to CONFIG_HZ jiffies (1 second).
> This
> delay is too long for hardware that generates updates every tens of
> milliseconds.
>
> The HFI driver uses a delayed workqueue to send thermal netlink
> events. No
> subsequent events will be sent if there is pending work.
>
> As a result, much of the information of consecutive hardware updates
> will
> be lost if the workqueue delay is too long. User space entities may
> act on
> obsolete data. If the delay is too short, multiple events may
> overwhelm
> listeners.
>
> Set the delay to 100ms to strike a balance between too many and too
> few
> events. Use milliseconds instead of jiffies to improve readability.
>
> Signed-off-by: Ricardo Neri <[email protected]>
Acked-by: Zhang Rui <[email protected]>
-rui
> ---
> Cc: Len Brown <[email protected]>
> Cc: Srinivas Pandruvada <[email protected]>
> Cc: Stanislaw Gruszka <[email protected]>
> Cc: Zhang Rui <[email protected]>
> Cc: [email protected]
> Cc: [email protected]
> ---
> Changes since v1:
> * Dropped the debugfs interface. Instead, updated the delay from 1s
> to
> 100ms.
> ---
> drivers/thermal/intel/intel_hfi.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/thermal/intel/intel_hfi.c
> b/drivers/thermal/intel/intel_hfi.c
> index e2b82d71ab6b..d82b8788b0f8 100644
> --- a/drivers/thermal/intel/intel_hfi.c
> +++ b/drivers/thermal/intel/intel_hfi.c
> @@ -166,7 +166,7 @@ static struct hfi_features hfi_features;
> static DEFINE_MUTEX(hfi_instance_lock);
>
> static struct workqueue_struct *hfi_updates_wq;
> -#define HFI_UPDATE_DELAY HZ
> +#define HFI_UPDATE_DELAY_MS 100
> #define HFI_MAX_THERM_NOTIFY_COUNT 16
>
> static void get_hfi_caps(struct hfi_instance *hfi_instance,
> @@ -322,7 +322,7 @@ void intel_hfi_process_event(__u64
> pkg_therm_status_msr_val)
> raw_spin_unlock(&hfi_instance->event_lock);
>
> queue_delayed_work(hfi_updates_wq, &hfi_instance-
> >update_work,
> - HFI_UPDATE_DELAY);
> + msecs_to_jiffies(HFI_UPDATE_DELAY_MS));
> }
>
> static void init_hfi_cpu_index(struct hfi_cpu_info *info)