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); }