[v4,1/1] eal: add internal function to get base address

Message ID 20220117134239.1773-1-syalavarthi@marvell.com (mailing list archive)
State Superseded, archived
Delegated to: Thomas Monjalon
Headers
Series [v4,1/1] eal: add internal function to get base address |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK
ci/intel-Testing success Testing PASS
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-broadcom-Functional success Functional Testing PASS
ci/iol-broadcom-Performance success Performance Testing PASS
ci/github-robot: build success github build: passed
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-intel-Functional success Functional Testing PASS
ci/iol-x86_64-unit-testing success Testing PASS
ci/iol-aarch64-unit-testing success Testing PASS
ci/iol-x86_64-compile-testing success Testing PASS
ci/iol-aarch64-compile-testing success Testing PASS
ci/iol-abi-testing success Testing PASS

Commit Message

Srikanth Yalavarthi Jan. 17, 2022, 1:42 p.m. UTC
  Added an internal helper to get OS-specific EAL mapping base address

This helper can be used by the drivers to map host address range with
offload devices and would be need for device specific operations like
firmware load

Signed-off-by: Srikanth Yalavarthi <syalavarthi@marvell.com>
---
 lib/eal/common/eal_common_config.c | 7 +++++++
 lib/eal/include/rte_eal.h          | 9 +++++++++
 lib/eal/version.map                | 1 +
 3 files changed, 17 insertions(+)
  

Comments

Dmitry Kozlyuk Jan. 17, 2022, 2:43 p.m. UTC | #1
2022-01-17 05:42 (UTC-0800), Srikanth Yalavarthi:
> Added an internal helper to get OS-specific EAL mapping base address
> 
> This helper can be used by the drivers to map host address range with
> offload devices and would be need for device specific operations like
> firmware load

Hello Srikanth,

Please elaborate on the intended usage of the new API
and how it will correlate with the EAL usage of the same VA ranges.
Note that on Windows eal_get_baseaddr() returns 0 which does not imply
anything about where EAL mappings will reside.
  
Srikanth Yalavarthi Jan. 18, 2022, 5:29 a.m. UTC | #2
Hi Dmitry,

This is to cater to use cases where chunks of memory are allocated by the host / application, and would like to represent it as an offset from the Linux virtual base address. One use case is for a firmware running on an accelerator, this can be used as reference address to access host memory.

Another situation can be to use the offset as an identifier for the memory using smaller data types

Srikanth

-----Original Message-----
From: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com> 
Sent: 17 January 2022 20:14
To: Srikanth Yalavarthi <syalavarthi@marvell.com>
Cc: Ray Kinsella <mdr@ashroe.eu>; dev@dpdk.org; Jerin Jacob Kollanukkaran <jerinj@marvell.com>; Shivah Shankar Shankar Narayan Rao <sshankarnara@marvell.com>
Subject: [EXT] Re: [PATCH v4 1/1] eal: add internal function to get base address

External Email

----------------------------------------------------------------------
2022-01-17 05:42 (UTC-0800), Srikanth Yalavarthi:
> Added an internal helper to get OS-specific EAL mapping base address
> 
> This helper can be used by the drivers to map host address range with 
> offload devices and would be need for device specific operations like 
> firmware load

Hello Srikanth,

Please elaborate on the intended usage of the new API and how it will correlate with the EAL usage of the same VA ranges.
Note that on Windows eal_get_baseaddr() returns 0 which does not imply anything about where EAL mappings will reside.
  
Dmitry Kozlyuk Jan. 18, 2022, 9:40 a.m. UTC | #3
2022-01-18 05:29 (UTC+0000), Srikanth Yalavarthi:
> Hi Dmitry,
> 
> This is to cater to use cases where chunks of memory are allocated by the host / application, and would like to represent it as an offset from the Linux virtual base address. One use case is for a firmware running on an accelerator, this can be used as reference address to access host memory.
> 
> Another situation can be to use the offset as an identifier for the memory using smaller data types

Thank you, the intent is clear now. It is worth adding to the commit log.
On the implementation: eal_get_baseaddr() does not respect --base-virtaddr,
you probably want something like what eal_get_virtual_area() uses:

	internal_conf->base_virtaddr != 0 ?
		internal_conf->base_virtaddr : eal_get_baseaddr()

P.S. Please avoid top-posting.
  

Patch

diff --git a/lib/eal/common/eal_common_config.c b/lib/eal/common/eal_common_config.c
index 1c4c4dd585..cec4991d96 100644
--- a/lib/eal/common/eal_common_config.c
+++ b/lib/eal/common/eal_common_config.c
@@ -87,3 +87,10 @@  rte_eal_has_pci(void)
 {
 	return !internal_config.no_pci;
 }
+
+/* Get the EAL base address */
+uint64_t
+rte_eal_get_baseaddr(void)
+{
+	return eal_get_baseaddr();
+}
diff --git a/lib/eal/include/rte_eal.h b/lib/eal/include/rte_eal.h
index 5a34a6acd9..29298c3c83 100644
--- a/lib/eal/include/rte_eal.h
+++ b/lib/eal/include/rte_eal.h
@@ -475,6 +475,15 @@  rte_eal_mbuf_user_pool_ops(void);
 const char *
 rte_eal_get_runtime_dir(void);
 
+/**
+ * Get the OS-specific EAL base address.
+ *
+ * @return
+ *    The base address.
+ */
+__rte_internal
+uint64_t rte_eal_get_baseaddr(void);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/lib/eal/version.map b/lib/eal/version.map
index ab28c22791..b53eeb30d7 100644
--- a/lib/eal/version.map
+++ b/lib/eal/version.map
@@ -425,6 +425,7 @@  EXPERIMENTAL {
 INTERNAL {
 	global:
 
+	rte_eal_get_baseaddr;
 	rte_firmware_read;
 	rte_intr_allow_others;
 	rte_intr_cap_multiple;