On Mon, Aug 12, 2019 at 03:38:46PM +0300, Mika Westerberg wrote:
> +static void icm_veto_begin(struct tb *tb)
> +{
> +     struct icm *icm = tb_priv(tb);
> +
> +     if (!icm->veto) {
> +             icm->veto = true;
> +             /* Keep the domain powered while veto is in effect */
> +             pm_runtime_get(&tb->dev);
> +     }
> +}

Hm, don't you need memory barriers when accessing icm->veto?

If so, I'd suggest:

        /* Keep the domain powered while veto is in effect */
        if (cmpxchg(&icm->veto, false, true))
                pm_runtime_get(&tb->dev);

You'll have to declare icm->veto unsigned int instead of bool
because thunderbolt.ko is compiled if CONFIG_COMPILE_TEST is
enabled and there are arches which do not support cmpxchg for
a size of 1 byte.

The other bools in struct icm should likewise be unsigned int
per Linus' dictum:
https://lkml.org/lkml/2017/11/21/384


> --- a/drivers/thunderbolt/nhi.c
> +++ b/drivers/thunderbolt/nhi.c
> +/* Ice Lake specific NHI operations */
> +

Again, can't this be moved to a separate file for maintainability?

Thanks,

Lukas

Reply via email to