On 29/07/2025 10:24 pm, Dmytro Prokopchuk1 wrote:
> diff --git a/xen/common/event_channel.c b/xen/common/event_channel.c
> index c8c1bfa615..2efb5f5c78 100644
> --- a/xen/common/event_channel.c
> +++ b/xen/common/event_channel.c
> @@ -672,7 +672,7 @@ static int evtchn_bind_pirq(evtchn_bind_pirq_t *bind)
>      if ( rc != 0 )
>      {
>          info->evtchn = 0;
> -        pirq_cleanup_check(info, d);
> +        PIRQ_CLEANUP_CHECK(info, d);

Well, this is awkward.  This is dead code, but only when you realise ...

> diff --git a/xen/include/xen/irq.h b/xen/include/xen/irq.h
> index 95034c0d6b..958d0b1aca 100644
> --- a/xen/include/xen/irq.h
> +++ b/xen/include/xen/irq.h
> @@ -185,7 +185,7 @@ extern struct pirq *pirq_get_info(struct domain *d, int 
> pirq);
>  
>  void pirq_cleanup_check(struct pirq *pirq, struct domain *d);
>  
> -#define pirq_cleanup_check(pirq, d) \
> +#define PIRQ_CLEANUP_CHECK(pirq, d) \
>      (!(pirq)->evtchn ? pirq_cleanup_check(pirq, d) : (void)0)
>  

... what this is really doing.

Looking at this overall diff, it really is outrageous that we're hiding
a conditional call like this.

We should just remove the macro, and expand

    if ( !pirq->evtchn )
        pirq_cleanup_check(pirq, d);

in most of the callsites.  The overall diff will be smaller (no need to
change the comments), and the end result is proper regular normal C.

I can draft a patch to that effect.

~Andrew

Reply via email to