From: "Burakov, Anatoly" <anatoly.burakov@intel.com>
To: Alejandro Lucero <alejandro.lucero@netronome.com>, 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 10:38:48 +0000 [thread overview]
Message-ID: <bbedb135-44a8-0635-b335-12aea9b1e404@intel.com> (raw)
In-Reply-To: <20181031172931.11894-7-alejandro.lucero@netronome.com>
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.
> 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.
> + *
> + * @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.
@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
next prev parent reply other threads:[~2018-11-01 10:38 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 [this message]
2018-11-01 13:34 ` Alejandro Lucero
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=bbedb135-44a8-0635-b335-12aea9b1e404@intel.com \
--to=anatoly.burakov@intel.com \
--cc=alejandro.lucero@netronome.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).