> Subject: [EXTERNAL] Re: [Patch v3 6/6] bus/vmbus: set event for channel 
> without
> monitoring support
> 
> 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);
> }

Thank you! You are right it should be RTE_ATOMIC(uint32_t *) not 
RTE_ATOMIC(uint32_t) *.

I'll send v4.

Long

Reply via email to