> 
> > From: Stephen Hemminger [mailto:step...@networkplumber.org]
> > Sent: Tuesday, 27 May 2025 17.07
> >
> > On Mon, 12 May 2025 20:37:19 +0530
> > <sk...@marvell.com> wrote:
> >
> > >  /**@{@name Rx hardware descriptor states
> > > diff --git a/lib/ethdev/rte_ethdev_core.h
> > b/lib/ethdev/rte_ethdev_core.h
> > > index e55fb42996..4ffae4921a 100644
> > > --- a/lib/ethdev/rte_ethdev_core.h
> > > +++ b/lib/ethdev/rte_ethdev_core.h
> > > @@ -45,7 +45,7 @@ typedef uint16_t (*eth_tx_prep_t)(void *txq,
> > >
> > >
> > >  /** @internal Get number of used descriptors on a receive queue. */
> > > -typedef uint32_t (*eth_rx_queue_count_t)(void *rxq);
> > > +typedef int (*eth_rx_queue_count_t)(void *rxq);
> > >
> > >  /** @internal Check the status of a Rx descriptor */
> > >  typedef int (*eth_rx_descriptor_status_t)(void *rxq, uint16_t
> > offset);
> >
> >
> > This gets reported as ABI breakage. The change will have to wait until
> > next LTS (25.11)
> 
> The return type was weird (wrong) to begin with.
> When used, it gets cast to int:
> https://elixir.bootlin.com/dpdk/v25.03/source/lib/ethdev/rte_ethdev.h#L6404

Personally, I don't see anything strange here.
devops rx_queue_count() supposed to return uint, because it should never failed 
for
valid queue. 
While rte_eth_rx_queue_count() itself can fail - wrong port/queue id, etc. 

> 
> You are right that it formally changes the ABI, and we should go through the 
> LTS motions.
> But, for this change, I'd favor an exception.

Again, from my opinion, there is nothing that urgent/important why such changes 
(if needed)
can't wait till next LTS.
For now, we can simply do type conversion explicitly at 
rte_eth_rx_queue_count().

> PS: As a consequence of this change, a patch to update the return type of the 
> callback in all the ethdev drivers should be provided.
> 
> >
> >
> >   [C] 'rte_eth_fp_ops rte_eth_fp_ops[32]' was changed at
> > rte_ethdev.c:47:1:
> >     type of variable changed:
> >       array element type 'struct rte_eth_fp_ops' changed:
> >         type size hasn't changed
> >         1 data member change:
> >           type of 'eth_rx_queue_count_t rx_queue_count' changed:
> >             underlying type 'uint32_t (*)(void*)' changed:
> >               in pointed to type 'function type uint32_t (void*)':
> >                 return type changed:
> >                   entity changed from 'typedef uint32_t' to 'int'
> >                   type size hasn't changed
> >       type size hasn't changed

Reply via email to