DPDK patches and discussions
 help / color / mirror / Atom feed
From: Alejandro Lucero <alejandro.lucero@netronome.com>
To: "Burakov, Anatoly" <anatoly.burakov@intel.com>
Cc: dev <dev@dpdk.org>
Subject: Re: [dpdk-dev] [PATCH 6/7] mem: add safe and unsafe versions for checking DMA mask
Date: Thu, 1 Nov 2018 13:34:02 +0000	[thread overview]
Message-ID: <CAD+H993+p2Zkdkj=Dg42Tp+o=XUJQ_BjL+2Up+ODmtB4W88Bjw@mail.gmail.com> (raw)
In-Reply-To: <bbedb135-44a8-0635-b335-12aea9b1e404@intel.com>

On Thu, Nov 1, 2018 at 10:38 AM Burakov, Anatoly <anatoly.burakov@intel.com>
wrote:

> On 31-Oct-18 5:29 PM, Alejandro Lucero wrote:
> > During memory initialization calling rte_mem_check_dma_mask
> > leads to a deadlock because memory_hotplug_lock is locked by a
> > writer, the current code in execution, and rte_memseg_walk
> > tries to lock as a reader.
> >
> > This patch adds safe and unsafe versions for invoking the final
> > function specifying if the memory_hotplug_lock needs to be
> > acquired, this is for the safe version, or not, the unsafe one.
> > PMDs should use the safe version and just internal EAL memory
> > code should use the unsafe one.
> >
> > Fixes: 223b7f1d5ef6 ("mem: add function for checking memseg IOVA")
> >
> > Signed-off-by: Alejandro Lucero <alejandro.lucero@netronome.com>
> > ---
>
> I don't think _safe and _unsafe are good names. _unsafe implies
> something might blow up, which isn't the case :) I think following the
> naming convention established by other functions (rte_mem_check_dma_mask
> and rte_mem_check_dma_mask_thread_unsafe) is better. User/driver code is
> only supposed to use rte_mem_check_dma_mask safe version anyway, so
> there's no need to differentiate between the two if the other one is
> never supposed to be used.
>
>
It makes sense. I will do it in next version.
Thanks


> >   drivers/net/nfp/nfp_net.c                  |  2 +-
> >   lib/librte_eal/common/eal_common_memory.c  | 24 +++++++++++++++---
> >   lib/librte_eal/common/include/rte_memory.h | 29 +++++++++++++++++++---
> >   lib/librte_eal/common/malloc_heap.c        |  2 +-
> >   lib/librte_eal/rte_eal_version.map         |  3 ++-
> >   5 files changed, 51 insertions(+), 9 deletions(-)
> >
>
> <...>
>
> > -/* check memsegs iovas are within a range based on dma mask */
> > -int __rte_experimental rte_mem_check_dma_mask(uint8_t maskbits);
> > +/**
> > + *  * @warning
>
> Here and in other places - same issue with extra star.
>
> > + * @b EXPERIMENTAL: this API may change without prior notice
> > + *
> > + *  Check memsegs iovas are within a range based on dma mask.
>
> The comments make it seem like the parameter is an actual DMA mask,
> rather than DMA mask *width*. In fact, you seem to have tripped yourself
> up on that already :)
>
> Suggested rewording:
>
> Check if all currently allocated memory segments are compliant with
> supplied DMA address width.
>
>
Ok.


> > + *
> > + *  @param maskbits
> > + *    Address width to check against.
> > + */
> > +int __rte_experimental rte_mem_check_dma_mask_safe(uint8_t maskbits);
> > +
> > +/**
> > + *  * @warning
> > + * @b EXPERIMENTAL: this API may change without prior notice
> > + *
> > + *  Check memsegs iovas are within a range based on dma mask without
> acquiring
> > + *  memory_hotplug_lock first.
> > + *
> > + *  This function is just for EAL core memory internal use. Drivers
> should
> > + *  use the previous safe one.
>
> This is IMO too detailed. Suggested rewording:
>
> Check if all currently allocated memory segments are compliant with
> supplied DMA address width.
>
>
Ok


> @warning This function is not thread-safe and is for internal use only.
>
> > + *
> > + *  @param maskbits
> > + *    Address width to check against.
> > + */
> > +int __rte_experimental rte_mem_check_dma_mask_unsafe(uint8_t maskbits);
> >
> >   /**
> >    *  * @warning
> >    * @b EXPERIMENTAL: this API may change without prior notice
> >    *
> >    *  Set dma mask to use once memory initialization is done.
> > - *  Previous function rte_mem_check_dma_mask can not be used
> > + *  Previous functions rte_mem_check_dma_mask_safe/unsafe can not be
> used
> >    *  safely until memory has been initialized.
> >    */
> >   void __rte_experimental rte_mem_set_dma_mask(uint8_t maskbits);
> > diff --git a/lib/librte_eal/common/malloc_heap.c
> b/lib/librte_eal/common/malloc_heap.c
> > index 711622f19..dd8b983e7 100644
> > --- a/lib/librte_eal/common/malloc_heap.c
> > +++ b/lib/librte_eal/common/malloc_heap.c
> > @@ -335,7 +335,7 @@ alloc_pages_on_heap(struct malloc_heap *heap,
> uint64_t pg_sz, size_t elt_size,
> >        * executed. For 2) implies the new memory can not be added.
> >        */
> >       if (mcfg->dma_maskbits) {
> > -             if (rte_mem_check_dma_mask(mcfg->dma_maskbits)) {
> > +             if (rte_mem_check_dma_mask_unsafe(mcfg->dma_maskbits)) {
> >                       /* Currently this can only happen if IOMMU is
> enabled
> >                        * with RTE_ARCH_X86. It is not safe to use this
> memory
> >                        * so returning an error here.
> > diff --git a/lib/librte_eal/rte_eal_version.map
> b/lib/librte_eal/rte_eal_version.map
> > index ae24b5c73..f863903b6 100644
> > --- a/lib/librte_eal/rte_eal_version.map
> > +++ b/lib/librte_eal/rte_eal_version.map
> > @@ -296,7 +296,8 @@ EXPERIMENTAL {
> >       rte_devargs_remove;
> >       rte_devargs_type_count;
> >       rte_mem_check_dma_mask;
> > -     rte_mem_set_dma_mask;
> > +     rte_mem_set_dma_mask_safe;
> > +     rte_mem_set_dma_mask_unsafe;
>
> Again, alphabet :)
>
> >       rte_eal_cleanup;
> >       rte_fbarray_attach;
> >       rte_fbarray_destroy;
> >
>
>
> --
> Thanks,
> Anatoly
>

  reply	other threads:[~2018-11-01 13:34 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-31 17:29 [dpdk-dev] [PATCH 0/7] fix DMA mask check Alejandro Lucero
2018-10-31 17:29 ` [dpdk-dev] [PATCH 1/7] mem: fix call to " Alejandro Lucero
2018-11-01 10:11   ` Burakov, Anatoly
2018-10-31 17:29 ` [dpdk-dev] [PATCH 2/7] mem: use proper prefix Alejandro Lucero
2018-11-01 10:08   ` Burakov, Anatoly
2018-11-01 10:40     ` Alejandro Lucero
2018-11-01 14:50     ` Thomas Monjalon
2018-11-01 15:03       ` Burakov, Anatoly
2018-11-01 16:18         ` Alejandro Lucero
2018-10-31 17:29 ` [dpdk-dev] [PATCH 3/7] mem: add function for setting DMA mask Alejandro Lucero
2018-11-01 10:11   ` Burakov, Anatoly
2018-11-01 10:48     ` Alejandro Lucero
2018-11-01 10:57       ` Burakov, Anatoly
2018-11-01 11:30         ` Alejandro Lucero
2018-11-01 14:32           ` Alejandro Lucero
2018-10-31 17:29 ` [dpdk-dev] [PATCH 4/7] bus/pci: avoid call to DMA mask check Alejandro Lucero
2018-11-01 10:12   ` Burakov, Anatoly
2018-10-31 17:29 ` [dpdk-dev] [PATCH 5/7] mem: modify error message for " Alejandro Lucero
2018-11-01 10:29   ` Burakov, Anatoly
2018-11-01 11:03     ` Alejandro Lucero
2018-11-01 11:12       ` Burakov, Anatoly
2018-11-01 11:32         ` Alejandro Lucero
2018-10-31 17:29 ` [dpdk-dev] [PATCH 6/7] mem: add safe and unsafe versions for checking DMA mask Alejandro Lucero
2018-11-01 10:38   ` Burakov, Anatoly
2018-11-01 13:34     ` Alejandro Lucero [this message]
2018-10-31 17:29 ` [dpdk-dev] [PATCH 7/7] eal/mem: use DMA mask check for legacy memory Alejandro Lucero
2018-11-01 10:40   ` Burakov, Anatoly
2018-11-01 13:39     ` Alejandro Lucero
2018-11-01 14:28       ` Burakov, Anatoly
2018-11-01 14:32         ` Alejandro Lucero
2018-10-31 17:47 ` [dpdk-dev] [PATCH 0/7] fix DMA mask check Alejandro Lucero
2018-11-02  5:52   ` Hyong Youb Kim
2018-11-01 10:13 ` Mattias Rönnblom
2018-11-01 17:28 ` Ferruh Yigit

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='CAD+H993+p2Zkdkj=Dg42Tp+o=XUJQ_BjL+2Up+ODmtB4W88Bjw@mail.gmail.com' \
    --to=alejandro.lucero@netronome.com \
    --cc=anatoly.burakov@intel.com \
    --cc=dev@dpdk.org \
    /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).