> -----Original Message----- > From: Andrew Rybchenko <andrew.rybche...@oktetlabs.ru> > Sent: 15 октября 2021 г. 12:34 > To: Dmitry Kozlyuk <dkozl...@nvidia.com>; dev@dpdk.org > Cc: Matan Azrad <ma...@nvidia.com>; Olivier Matz <olivier.m...@6wind.com> > Subject: Re: [PATCH v4 2/4] mempool: add non-IO flag > > External email: Use caution opening links or attachments > > > On 10/15/21 12:18 PM, Dmitry Kozlyuk wrote: > >> -----Original Message----- > >> From: Andrew Rybchenko <andrew.rybche...@oktetlabs.ru> [...] > >>> diff --git a/lib/mempool/rte_mempool.c b/lib/mempool/rte_mempool.c > >>> index 51c0ba2931..2204f140b3 100644 > >>> --- a/lib/mempool/rte_mempool.c > >>> +++ b/lib/mempool/rte_mempool.c > >>> @@ -371,6 +371,8 @@ rte_mempool_populate_iova(struct rte_mempool > >>> *mp, char *vaddr, > >>> > >>> STAILQ_INSERT_TAIL(&mp->mem_list, memhdr, next); > >>> mp->nb_mem_chunks++; > >>> + if (iova == RTE_BAD_IOVA) > >>> + mp->flags |= MEMPOOL_F_NON_IO; > >> > >> As I understand rte_mempool_populate_iova() may be called few times > >> for one mempool. The flag must be set if all invocations are done > >> with RTE_BAD_IOVA. So, it should be set by default and just removed > >> when iova != RTE_BAD_IOVA happens. > > > > I don't agree at all. If any object of the pool is unsuitable for IO, > > the pool cannot be considered suitable for IO. So if there's a single > > invocation with RTE_BAD_IOVA, the flag must be set forever. > > If so, some objects may be used for IO, some cannot be used. > What should happen if an application allocates an object which is suitable > for IO and try to use it this way?
Never mind, I was thinking in v1 mode when the application marked mempools as not suitable for IO. Since now they're marked automatically, you're correct: the flag must be set if and only if there is no chance that objects from this pool will be used for IO.