>>> On 10.05.18 at 11:08, <roger....@citrix.com> wrote:
> @@ -304,6 +313,30 @@ static inline uint64_t hpet_fixup_reg(
>      return new;
>  }
>  
> +static void timer_sanitize_int(HPETState *h, unsigned int tn)

"int" as sort of a suffix here might be misleading (could be viewed as some
sort of integer as well) - how about "route" (or "int_route") instead?

> +{
> +    unsigned int irq;
> +
> +    if ( timer_int_valid(h, tn) )
> +        return;
> +
> +    h->hpet.timers[tn].config &= ~HPET_TN_ROUTE;

Please don't open-code timer_config() (also below), despite there being
quite a few examples in pre-existing code.

> +    if ( !timer_enabled(h, tn) )
> +        return;
> +
> +    /*
> +     * If the requested interrupt is not valid and the timer is
> +     * enabled pick the first irq.
> +     */
> +    irq = ffs(timer_int_route_cap(h, tn));
> +    if ( !irq )
> +    {
> +        ASSERT_UNREACHABLE();
> +        return;
> +    }
> +    h->hpet.timers[tn].config |= (irq - 1) << HPET_TN_ROUTE_SHIFT;

I think I would prefer find_first_set_bit() instead of ffs() here, to avoid the
subtraction of 1. Also please use MASK_INSR() here - HPET_TN_ROUTE_SHIFT
is a #define that should actually go away.

I'm also unconvinced the assertion is really useful here - the field in question
is r/o, and we initialize it unconditionally in hpet_set().

Jan



_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Reply via email to