On Fri,  4 Apr 2025 17:35:38 -0700
lon...@linuxonhyperv.com wrote:

> diff --git a/drivers/bus/vmbus/vmbus_channel.c 
> b/drivers/bus/vmbus/vmbus_channel.c
> index bccef168d3..81e8096190 100644
> --- a/drivers/bus/vmbus/vmbus_channel.c
> +++ b/drivers/bus/vmbus/vmbus_channel.c
> @@ -24,6 +24,19 @@ vmbus_sync_set_bit(volatile RTE_ATOMIC(uint32_t) *addr, 
> uint32_t mask)
>       rte_atomic_fetch_or_explicit(addr, mask, rte_memory_order_seq_cst);
>  }
>  
> +static inline void
> +vmbus_send_interrupt(const struct rte_vmbus_device *dev, uint32_t relid)
> +{
> +     RTE_ATOMIC(uint32_t) *int_addr;
> +     uint32_t int_mask;
> +
> +     int_addr = (RTE_ATOMIC(uint32_t)*) (dev->int_page + relid / 32);
> +     int_mask = 1u << (relid % 32);
> +     vmbus_sync_set_bit(int_addr, int_mask);
> +
> +     vmbus_uio_irq_control(dev, 1);
> +}
> +

This part doesn't look right. RTE_ATOMIC() is just a macro to add the _Atomic 
attribute.

Can it be simplified like this?


static inline void
vmbus_sync_set_bit(RTE_ATOMIC(uint32_t *) addr, uint32_t mask)
{
        rte_atomic_fetch_or_explicit(addr, mask, rte_memory_order_seq_cst);
}

static inline void
vmbus_send_interrupt(const struct rte_vmbus_device *dev, uint32_t relid)
{
        RTE_ATOMIC(uint32_t *) int_addr;
        uint32_t int_mask;

        int_addr = dev->int_page + relid / 32;
        int_mask = 1u << (relid % 32);
        vmbus_sync_set_bit(int_addr, int_mask);

        vmbus_uio_irq_control(dev, 1);
}

Reply via email to