DPDK patches and discussions
 help / color / mirror / Atom feed
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

  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).