DPDK patches and discussions
 help / color / mirror / Atom feed
From: Bruce Richardson <bruce.richardson@intel.com>
To: "Morten Brørup" <mb@smartsharesystems.com>
Cc: <honnappa.nagarahalli@arm.com>, <konstantin.v.ananyev@yandex.ru>,
	<jerinj@marvell.com>, <dev@dpdk.org>
Subject: Re: Bug in non-power-of-2 rings?
Date: Mon, 21 Aug 2023 09:39:45 +0100	[thread overview]
Message-ID: <ZOMi0bKjONLxE1qf@bricha3-MOBL.ger.corp.intel.com> (raw)
In-Reply-To: <98CBD80474FA8B44BF855DF32C47DC35D87B20@smartserver.smartshare.dk>

On Sun, Aug 20, 2023 at 11:07:33AM +0200, Morten Brørup wrote:
> Bruce, Honnappa, Konstantin,
> 
> Back in 2017, Bruce added support for non-power-of-2 rings with this patch [1].
> 
> [1]: https://git.dpdk.org/dpdk/commit/lib/librte_ring/rte_ring.h?id=b74461155543430f5253e96ad6d413ebcad36693
> 
> I think that the calculation of "entries" in __rte_ring_move_cons_head() [2][3] is incorrect when the ring capacity is not power-of-2, because it is missing the capacity comparison you added to rte_ring_count() [4]. Please review if I'm mistaken.
> 
> [2]: https://elixir.bootlin.com/dpdk/v23.07/source/lib/ring/rte_ring_c11_pvt.h#L159
> [3]: https://elixir.bootlin.com/dpdk/v23.07/source/lib/ring/rte_ring_generic_pvt.h#L150
> [4]: https://elixir.bootlin.com/dpdk/v23.07/source/lib/ring/rte_ring.h#L502
> 
thanks for flagging this inconsistency, but I think we are ok.

For consumer, I think this is correct, because we are only ever reducing
the number of entries in the ring, and the calculation of the number of
entries is made in the usual way using modulo arithmetic. We should never
have more than capacity entries in the ring so the check in ring count I
believe is superflous. [The exception would be if someone bypassed the
inline functions and accessed the ring directly themselves - at which point
"all bets are off", to use the English phrase]

The producer code (__rte_ring_move_prod_head) does do a capacity check,
which is where one is required to ensure we never exceed capacity.

/Bruce

  reply	other threads:[~2023-08-21  8:39 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-20  9:07 Morten Brørup
2023-08-21  8:39 ` Bruce Richardson [this message]
2023-08-21  9:29   ` Konstantin Ananyev
2023-08-21  9:36     ` Morten Brørup

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZOMi0bKjONLxE1qf@bricha3-MOBL.ger.corp.intel.com \
    --to=bruce.richardson@intel.com \
    --cc=dev@dpdk.org \
    --cc=honnappa.nagarahalli@arm.com \
    --cc=jerinj@marvell.com \
    --cc=konstantin.v.ananyev@yandex.ru \
    --cc=mb@smartsharesystems.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).