DPDK patches and discussions
 help / color / mirror / Atom feed
From: Anatoly Burakov <anatoly.burakov@intel.com>
To: dev@dpdk.org
Cc: John McNamara <john.mcnamara@intel.com>,
	Marko Kovacevic <marko.kovacevic@intel.com>,
	stable@dpdk.org
Subject: [dpdk-dev] [PATCH 2/3] ipc: add warnings about not using ipc with memory API's
Date: Fri,  3 May 2019 12:50:49 +0100	[thread overview]
Message-ID: <d2385c13fb2b085ecc89eb9422aed8db79e7fb66.1556883753.git.anatoly.burakov@intel.com> (raw)
Message-ID: <20190503115049.Y3R7YlDfzfE9CeU2eG2Vwa2IzxgSznwhPci0a6pFaaQ@z> (raw)
In-Reply-To: <c5b98a67c6f0b66b3ef0534dc1b9ed553d4d7340.1556883753.git.anatoly.burakov@intel.com>
In-Reply-To: <c5b98a67c6f0b66b3ef0534dc1b9ed553d4d7340.1556883753.git.anatoly.burakov@intel.com>

IPC and memory-related API's should not be mixed because memory
relies on IPC internally. Add explicit warnings to IPC API and
to the documentation about this.

Cc: stable@dpdk.org

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
 doc/guides/prog_guide/env_abstraction_layer.rst | 8 ++++++++
 doc/guides/prog_guide/multi_proc_support.rst    | 5 +++++
 lib/librte_eal/common/include/rte_eal.h         | 7 +++++++
 3 files changed, 20 insertions(+)

diff --git a/doc/guides/prog_guide/env_abstraction_layer.rst b/doc/guides/prog_guide/env_abstraction_layer.rst
index c27f730c7..f15bcd976 100644
--- a/doc/guides/prog_guide/env_abstraction_layer.rst
+++ b/doc/guides/prog_guide/env_abstraction_layer.rst
@@ -147,6 +147,14 @@ A default validator callback is provided by EAL, which can be enabled with a
 ``--socket-limit`` command-line option, for a simple way to limit maximum amount
 of memory that can be used by DPDK application.
 
+.. warning::
+    Memory subsystem uses DPDK IPC internally, so memory allocations/callbacks
+    and IPC must not be mixed: it is not safe to allocate/free memory inside
+    memory-related or IPC callbacks, and it is not safe to use IPC inside
+    memory-related callbacks. See chapter
+    :ref:`Multi-process Support <Multi-process_Support>` for more details about
+    DPDK IPC.
+
 + Legacy memory mode
 
 This mode is enabled by specifying ``--legacy-mem`` command-line switch to the
diff --git a/doc/guides/prog_guide/multi_proc_support.rst b/doc/guides/prog_guide/multi_proc_support.rst
index 1e78a1f02..665474a4c 100644
--- a/doc/guides/prog_guide/multi_proc_support.rst
+++ b/doc/guides/prog_guide/multi_proc_support.rst
@@ -318,6 +318,11 @@ supported. However, since sending messages (not requests) does not involve an
 IPC thread, sending messages while processing another message or request is
 supported.
 
+Since the memory sybsystem uses IPC internally, memory allocations and IPC must
+not be mixed: it is not safe to use IPC inside a memory-related callback, nor is
+it safe to allocate/free memory inside IPC callbacks. Attempting to do so may
+lead to a deadlock.
+
 Asynchronous request callbacks may be triggered either from IPC thread or from
 interrupt thread, depending on whether the request has timed out. It is
 therefore suggested to avoid waiting for interrupt-based events (such as alarms)
diff --git a/lib/librte_eal/common/include/rte_eal.h b/lib/librte_eal/common/include/rte_eal.h
index 0603eaf25..7db022532 100644
--- a/lib/librte_eal/common/include/rte_eal.h
+++ b/lib/librte_eal/common/include/rte_eal.h
@@ -225,6 +225,8 @@ struct rte_mp_reply {
  *
  * As we create  socket channel for primary/secondary communication, use
  * this function typedef to register action for coming messages.
+ *
+ * @note No memory allocations should take place inside the callback.
  */
 typedef int (*rte_mp_t)(const struct rte_mp_msg *msg, const void *peer);
 
@@ -234,6 +236,8 @@ typedef int (*rte_mp_t)(const struct rte_mp_msg *msg, const void *peer);
  * As we create socket channel for primary/secondary communication, use
  * this function typedef to register action for coming responses to asynchronous
  * requests.
+ *
+ * @note No memory allocations should take place inside the callback.
  */
 typedef int (*rte_mp_async_reply_t)(const struct rte_mp_msg *request,
 		const struct rte_mp_reply *reply);
@@ -308,6 +312,9 @@ rte_mp_sendmsg(struct rte_mp_msg *msg);
  *
  * @note The caller is responsible to free reply->replies.
  *
+ * @note This API must not be used inside memory-related or IPC callbacks, and
+ *   no memory allocations should take place inside such callback.
+ *
  * @param req
  *   The req argument contains the customized request message.
  *
-- 
2.17.1

  parent reply	other threads:[~2019-05-03 11:51 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-05-03 11:50 [dpdk-dev] [PATCH 1/3] doc: fix typo in ipc doc Anatoly Burakov
2019-05-03 11:50 ` Anatoly Burakov
2019-05-03 11:50 ` Anatoly Burakov [this message]
2019-05-03 11:50   ` [dpdk-dev] [PATCH 2/3] ipc: add warnings about not using ipc with memory API's Anatoly Burakov
2019-05-03 11:50 ` [dpdk-dev] [PATCH 3/3] ipc: add warnings about correct API usage Anatoly Burakov
2019-05-03 11:50   ` Anatoly Burakov
2019-05-09 14:59   ` [dpdk-dev] [dpdk-stable] " Thomas Monjalon
2019-05-09 14:59     ` Thomas Monjalon
2019-05-03 19:03 ` [dpdk-dev] [PATCH 1/3] doc: fix typo in ipc doc Rami Rosen
2019-05-03 19:03   ` Rami Rosen
2019-05-09 14:41 ` [dpdk-dev] [dpdk-stable] " Thomas Monjalon
2019-05-09 14:41   ` Thomas Monjalon
2019-05-09 15:25 ` [dpdk-dev] " Mcnamara, John
2019-05-09 15:25   ` Mcnamara, John
2019-05-09 15:55   ` Thomas Monjalon
2019-05-09 15:55     ` Thomas Monjalon

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=d2385c13fb2b085ecc89eb9422aed8db79e7fb66.1556883753.git.anatoly.burakov@intel.com \
    --to=anatoly.burakov@intel.com \
    --cc=dev@dpdk.org \
    --cc=john.mcnamara@intel.com \
    --cc=marko.kovacevic@intel.com \
    --cc=stable@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).