On 05.03.2025 10:11, Mykola Kvach wrote:
> From: Mirela Simonovic <mirela.simono...@aggios.com>
> 
> Introduce a separate struct for watchdog timers. It is needed to properly
> implement the suspend/resume actions for the watchdog timers. To be able
> to restart watchdog timer after suspend we need to remember their
> frequency somewhere. To not bloat the struct timer a new struct
> watchdog_timer is introduced, containing the original timer and the last
> set timeout.
> 
> Signed-off-by: Mykyta Poturai <mykyta_potu...@epam.com>
> Signed-off-by: Mykola Kvach <mykola_kv...@epam.com>

A From: with no corresponding S-o-b: is potentially problematic. You also
can't simply add one with her agreement, though.

> ---
> This commit was introduced in patch series V2.

Yet, btw, the whole series isn't tagged with a version.

> --- a/xen/common/keyhandler.c
> +++ b/xen/common/keyhandler.c
> @@ -305,7 +305,7 @@ static void cf_check dump_domains(unsigned char key)
>          for ( i = 0 ; i < NR_DOMAIN_WATCHDOG_TIMERS; i++ )
>              if ( test_bit(i, &d->watchdog_inuse_map) )
>                  printk("    watchdog %d expires in %d seconds\n",
> -                       i, (u32)((d->watchdog_timer[i].expires - NOW()) >> 
> 30));
> +                       i, (u32)((d->watchdog_timer[i].timer.expires - NOW()) 
> >> 30));

I realize you mean to just do a mechanical replacement here, yet the use of
u32 is not only against our style (should be uint32_t then), but it's also
not clear to me that this subtraction can't ever yield a negative result.
Hence the use of %d looks more correct to me than the cast to an unsigned
type.

In any event the already long line now grows too long and hence needs
wrapping.

> @@ -569,7 +570,7 @@ struct domain
>  #define NR_DOMAIN_WATCHDOG_TIMERS 2
>      spinlock_t watchdog_lock;
>      uint32_t watchdog_inuse_map;
> -    struct timer watchdog_timer[NR_DOMAIN_WATCHDOG_TIMERS];
> +    struct watchdog_timer watchdog_timer[NR_DOMAIN_WATCHDOG_TIMERS];

An alternative would be to have a separate array for the timeout values.
This would also save some space, seeing that on 64-bit arches you
introduce 32 bits of tail padding in the struct.

If we go the struct watchdog_timer route, may I at least suggest to rename
the field to just "watchdog", so things like &d->watchdog_timer[i].timer
don't say "timer" twice?

> --- a/xen/include/xen/watchdog.h
> +++ b/xen/include/xen/watchdog.h
> @@ -8,6 +8,12 @@
>  #define __XEN_WATCHDOG_H__
>  
>  #include <xen/types.h>
> +#include <xen/timer.h>
> +
> +struct watchdog_timer {
> +    struct timer timer;
> +    uint32_t timeout;

This wants a brief comment mentioning the granularity.

Jan

Reply via email to