[v2] lib/dmadev: get DMA device using device ID

Message ID 20231219110027.16443-1-amitprakashs@marvell.com (mailing list archive)
State Accepted, archived
Delegated to: Thomas Monjalon
Headers
Series [v2] lib/dmadev: get DMA device using device ID |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/loongarch-compilation success Compilation OK
ci/loongarch-unit-testing success Unit Testing PASS
ci/Intel-compilation success Compilation OK
ci/iol-broadcom-Performance success Performance Testing PASS
ci/intel-Testing success Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-intel-Functional success Functional Testing PASS
ci/github-robot: build success github build: passed
ci/iol-broadcom-Functional success Functional Testing PASS
ci/iol-sample-apps-testing success Testing PASS
ci/intel-Functional success Functional PASS
ci/iol-unit-arm64-testing success Testing PASS
ci/iol-compile-amd64-testing success Testing PASS
ci/iol-unit-amd64-testing success Testing PASS
ci/iol-abi-testing success Testing PASS
ci/iol-compile-arm64-testing success Testing PASS

Commit Message

Amit Prakash Shukla Dec. 19, 2023, 11 a.m. UTC
  DMA library has a function to get DMA device based on device name but
there is no function to get DMA device using device id.

Added a function that lookup for the dma device using device id and
returns the pointer to the same.

Signed-off-by: Amit Prakash Shukla <amitprakashs@marvell.com>
Acked-by: Chengwen Feng <fengchengwen@huawei.com>
---
v2:
  - Arranged api in alphabetical order in version.map

 lib/dmadev/rte_dmadev.c     |  9 +++++++++
 lib/dmadev/rte_dmadev_pmd.h | 14 ++++++++++++++
 lib/dmadev/version.map      |  1 +
 3 files changed, 24 insertions(+)
  

Comments

Anoob Joseph Jan. 8, 2024, 2:47 p.m. UTC | #1
> 
> DMA library has a function to get DMA device based on device name but
> there is no function to get DMA device using device id.
> 
> Added a function that lookup for the dma device using device id and returns
> the pointer to the same.
> 
> Signed-off-by: Amit Prakash Shukla <amitprakashs@marvell.com>
> Acked-by: Chengwen Feng <fengchengwen@huawei.com>

Acked-by: Anoob Joseph <anoobj@marvell.com>
  
Amit Prakash Shukla Feb. 6, 2024, 6:24 a.m. UTC | #2
Hi Thomas,

Gentle ping.

Could you please consider merging this patch. The driver series https://patches.dpdk.org/project/dpdk/patch/20231208082835.2817601-3-amitprakashs@marvell.com/ is dependent on this patch.

Thanks,
Amit Shukla

> -----Original Message-----
> From: Anoob Joseph <anoobj@marvell.com>
> Sent: Monday, January 8, 2024 8:17 PM
> To: Amit Prakash Shukla <amitprakashs@marvell.com>; Chengwen Feng
> <fengchengwen@huawei.com>; Kevin Laatz <kevin.laatz@intel.com>; Bruce
> Richardson <bruce.richardson@intel.com>
> Cc: dev@dpdk.org; Jerin Jacob Kollanukkaran <jerinj@marvell.com>; Vamsi
> Krishna Attunuru <vattunuru@marvell.com>; Nithin Kumar Dabilpuram
> <ndabilpuram@marvell.com>; mb@smartsharesystems.com; Amit Prakash
> Shukla <amitprakashs@marvell.com>
> Subject: RE: [PATCH v2] lib/dmadev: get DMA device using device ID
> 
> >
> > DMA library has a function to get DMA device based on device name but
> > there is no function to get DMA device using device id.
> >
> > Added a function that lookup for the dma device using device id and
> > returns the pointer to the same.
> >
> > Signed-off-by: Amit Prakash Shukla <amitprakashs@marvell.com>
> > Acked-by: Chengwen Feng <fengchengwen@huawei.com>
> 
> Acked-by: Anoob Joseph <anoobj@marvell.com>
>
  
Thomas Monjalon Feb. 8, 2024, 4:25 p.m. UTC | #3
19/12/2023 12:00, Amit Prakash Shukla:
> +struct rte_dma_dev *
> +rte_dma_pmd_get_dev_by_id(const int dev_id)

const does not make sense here for an int parameter.

> +{
> +	if (!rte_dma_is_valid(dev_id))
> +		return NULL;
> +
> +	return &rte_dma_devices[dev_id];
> +}
[...]
> +/**
> + * @internal
> + * Get the rte_dma_dev structure device pointer for the device id.
> + *
> + * @param dev_id
> + *   Device ID value to select the device structure.

This comment is not explanatory.
What is an ID? Where does it come from?
Where can we see such ID for DMA device?

> + *
> + * @return
> + *   - rte_dma_dev structure pointer for the given device ID on success, NULL
> + *   otherwise.
> + */
> +__rte_internal
> +struct rte_dma_dev *rte_dma_pmd_get_dev_by_id(const int dev_id);

Again, const does not make sense here.

Chengwen, please can you comment this patch as you maintain dmadev?
  
fengchengwen Feb. 9, 2024, 8:18 a.m. UTC | #4
Hi Thomas,


On 2024/2/9 0:25, Thomas Monjalon wrote:
> 19/12/2023 12:00, Amit Prakash Shukla:
>> +struct rte_dma_dev *
>> +rte_dma_pmd_get_dev_by_id(const int dev_id)
> const does not make sense here for an int parameter.


I think it could be OK with const even if the parameter is not pointer.

However, most DPDK APIs do not have const for simple types (e.g. 
int/uin16_t).

In this aspect, I think it's also OK to remove const of here for 
consistency.


>
>> +{
>> +	if (!rte_dma_is_valid(dev_id))
>> +		return NULL;
>> +
>> +	return &rte_dma_devices[dev_id];
>> +}
> [...]
>> +/**
>> + * @internal
>> + * Get the rte_dma_dev structure device pointer for the device id.
>> + *
>> + * @param dev_id
>> + *   Device ID value to select the device structure.
> This comment is not explanatory.
> What is an ID? Where does it come from?
> Where can we see such ID for DMA device?

This new API is used in the event-dma driver of cnxk [1]:

The rte_event_dma_adapter_vchan_add has parameter of dma_dev_id, and it then

invoke (*dev->dev_ops->dma_adapter_vchan_add)(dev, dma_dev_id, vchan, 
event),

at cnxk driver, this ops will check whether the DMA is 
cnxk_dmadev_pci_driver.

I think this is because the cnxk's event-and-dma implement has deep coupling

(because the cnxk's event device could interact with another vendor's 
dma device).


Maybe we should think of a better way to solve this kind of coupling 
problem.


Thanks


[1] 
https://patches.dpdk.org/project/dpdk/patch/20231208082835.2817601-3-amitprakashs@marvell.com/

>
>> + *
>> + * @return
>> + *   - rte_dma_dev structure pointer for the given device ID on success, NULL
>> + *   otherwise.
>> + */
>> +__rte_internal
>> +struct rte_dma_dev *rte_dma_pmd_get_dev_by_id(const int dev_id);
> Again, const does not make sense here.
>
> Chengwen, please can you comment this patch as you maintain dmadev?
>
>
  
Amit Prakash Shukla Feb. 9, 2024, 11:05 a.m. UTC | #5
Hi Thomas and Chengwen,

Thank you for the review and feedback. Please find my comment in-line.

Thanks,
Amit Shukla

> ----------------------------------------------------------------------
> Hi Thomas,
> 
> 
> On 2024/2/9 0:25, Thomas Monjalon wrote:
> > 19/12/2023 12:00, Amit Prakash Shukla:
> >> +struct rte_dma_dev *
> >> +rte_dma_pmd_get_dev_by_id(const int dev_id)
> > const does not make sense here for an int parameter.
> 
> 
> I think it could be OK with const even if the parameter is not pointer.
> 
> However, most DPDK APIs do not have const for simple types (e.g.
> int/uin16_t).
> 
> In this aspect, I think it's also OK to remove const of here for consistency.
> 
> 
> >
> >> +{
> >> +	if (!rte_dma_is_valid(dev_id))
> >> +		return NULL;
> >> +
> >> +	return &rte_dma_devices[dev_id];
> >> +}
> > [...]
> >> +/**
> >> + * @internal
> >> + * Get the rte_dma_dev structure device pointer for the device id.
> >> + *
> >> + * @param dev_id
> >> + *   Device ID value to select the device structure.
> > This comment is not explanatory.
> > What is an ID? Where does it come from?
> > Where can we see such ID for DMA device?
> 
> This new API is used in the event-dma driver of cnxk [1]:
> 
> The rte_event_dma_adapter_vchan_add has parameter of dma_dev_id, and it
> then
> 
> invoke (*dev->dev_ops->dma_adapter_vchan_add)(dev, dma_dev_id, vchan,
> event),
> 
> at cnxk driver, this ops will check whether the DMA is
> cnxk_dmadev_pci_driver.
> 
> I think this is because the cnxk's event-and-dma implement has deep coupling
> 
> (because the cnxk's event device could interact with another vendor's
> dma device).
> 
> 
> Maybe we should think of a better way to solve this kind of coupling
> problem.

Id, is the DMA dev id which is used in looking up DMA dev. This API is in-line with the other libraries.
Crypto library has an api rte_cryptodev_pmd_get_dev to get crypto device based on device id.

> 
> 
> Thanks
> 
> 
> [1]
> https://urldefense.proofpoint.com/v2/url?u=https-
> 3A__patches.dpdk.org_project_dpdk_patch_20231208082835.2817601-
> 2D3-2Damitprakashs-
> 40marvell.com_&d=DwICaQ&c=nKjWec2b6R0mOyPaz7xtfQ&r=ALGdXl3fZgF
> GR69VnJLdSnADun7zLaXG1p5Rs7pXihE&m=b0t1Tduh89vXiJ7GQG0eb_yIMN
> k2aEkmL2losNL5qiqNycAqWUi7kLJRmmOunpvy&s=oy9mqDXsDKhXuVG9iy7
> SLmU_shlYhfjrglvjEoEQ4AM&e=
> 
> >
> >> + *
> >> + * @return
> >> + *   - rte_dma_dev structure pointer for the given device ID on success,
> NULL
> >> + *   otherwise.
> >> + */
> >> +__rte_internal
> >> +struct rte_dma_dev *rte_dma_pmd_get_dev_by_id(const int dev_id);
> > Again, const does not make sense here.
> >
> > Chengwen, please can you comment this patch as you maintain dmadev?
> >
> >
  
Thomas Monjalon Feb. 9, 2024, 11:18 a.m. UTC | #6
09/02/2024 12:05, Amit Prakash Shukla:
> > On 2024/2/9 0:25, Thomas Monjalon wrote:
> > > 19/12/2023 12:00, Amit Prakash Shukla:
> > >> +struct rte_dma_dev *
> > >> +rte_dma_pmd_get_dev_by_id(const int dev_id)
> > > const does not make sense here for an int parameter.
> > 
> > 
> > I think it could be OK with const even if the parameter is not pointer.
> > 
> > However, most DPDK APIs do not have const for simple types (e.g.
> > int/uin16_t).
> > 
> > In this aspect, I think it's also OK to remove const of here for consistency.
> > 
> > 
> > >
> > >> +{
> > >> +	if (!rte_dma_is_valid(dev_id))
> > >> +		return NULL;
> > >> +
> > >> +	return &rte_dma_devices[dev_id];
> > >> +}
> > > [...]
> > >> +/**
> > >> + * @internal
> > >> + * Get the rte_dma_dev structure device pointer for the device id.
> > >> + *
> > >> + * @param dev_id
> > >> + *   Device ID value to select the device structure.
> > > This comment is not explanatory.
> > > What is an ID? Where does it come from?
> > > Where can we see such ID for DMA device?
> > 
> > This new API is used in the event-dma driver of cnxk [1]:
> > 
> > The rte_event_dma_adapter_vchan_add has parameter of dma_dev_id, and it
> > then
> > 
> > invoke (*dev->dev_ops->dma_adapter_vchan_add)(dev, dma_dev_id, vchan,
> > event),
> > 
> > at cnxk driver, this ops will check whether the DMA is
> > cnxk_dmadev_pci_driver.
> > 
> > I think this is because the cnxk's event-and-dma implement has deep coupling
> > 
> > (because the cnxk's event device could interact with another vendor's
> > dma device).
> > 
> > 
> > Maybe we should think of a better way to solve this kind of coupling
> > problem.
> 
> Id, is the DMA dev id which is used in looking up DMA dev. This API is in-line with the other libraries.
> Crypto library has an api rte_cryptodev_pmd_get_dev to get crypto device based on device id.

OK I think I understand.
It is the library ID, the same as returned by
int rte_dma_get_dev_id_by_name(const char *name);

I can remove the const and apply if you are OK.
I would just change this comment:

+ * @param dev_id
+ *   Device ID value to select the device structure.

into

+ *   DMA device index in dmadev library.
  
Amit Prakash Shukla Feb. 9, 2024, 11:30 a.m. UTC | #7
<snip>
> > >
> > > invoke (*dev->dev_ops->dma_adapter_vchan_add)(dev, dma_dev_id,
> > > vchan, event),
> > >
> > > at cnxk driver, this ops will check whether the DMA is
> > > cnxk_dmadev_pci_driver.
> > >
> > > I think this is because the cnxk's event-and-dma implement has deep
> > > coupling
> > >
> > > (because the cnxk's event device could interact with another
> > > vendor's dma device).
> > >
> > >
> > > Maybe we should think of a better way to solve this kind of coupling
> > > problem.
> >
> > Id, is the DMA dev id which is used in looking up DMA dev. This API is in-line
> with the other libraries.
> > Crypto library has an api rte_cryptodev_pmd_get_dev to get crypto device
> based on device id.
> 
> OK I think I understand.
> It is the library ID, the same as returned by int
> rte_dma_get_dev_id_by_name(const char *name);
> 
> I can remove the const and apply if you are OK.

Sure, I am okay.

> I would just change this comment:
> 
> + * @param dev_id
> + *   Device ID value to select the device structure.
> 
> into
> 
> + *   DMA device index in dmadev library.

Sure.
Thanks.
  
Thomas Monjalon Feb. 9, 2024, 5:36 p.m. UTC | #8
09/02/2024 12:30, Amit Prakash Shukla:
> 
> <snip>
> > > >
> > > > invoke (*dev->dev_ops->dma_adapter_vchan_add)(dev, dma_dev_id,
> > > > vchan, event),
> > > >
> > > > at cnxk driver, this ops will check whether the DMA is
> > > > cnxk_dmadev_pci_driver.
> > > >
> > > > I think this is because the cnxk's event-and-dma implement has deep
> > > > coupling
> > > >
> > > > (because the cnxk's event device could interact with another
> > > > vendor's dma device).
> > > >
> > > >
> > > > Maybe we should think of a better way to solve this kind of coupling
> > > > problem.
> > >
> > > Id, is the DMA dev id which is used in looking up DMA dev. This API is in-line
> > with the other libraries.
> > > Crypto library has an api rte_cryptodev_pmd_get_dev to get crypto device
> > based on device id.
> > 
> > OK I think I understand.
> > It is the library ID, the same as returned by int
> > rte_dma_get_dev_id_by_name(const char *name);
> > 
> > I can remove the const and apply if you are OK.
> 
> Sure, I am okay.
> 
> > I would just change this comment:
> > 
> > + * @param dev_id
> > + *   Device ID value to select the device structure.
> > 
> > into
> > 
> > + *   DMA device index in dmadev library.
> 
> Sure.
> Thanks.

I've also fixed the ID type to be int16_t.

Applied
  

Patch

diff --git a/lib/dmadev/rte_dmadev.c b/lib/dmadev/rte_dmadev.c
index 4e5e420c82..83f49e77f2 100644
--- a/lib/dmadev/rte_dmadev.c
+++ b/lib/dmadev/rte_dmadev.c
@@ -397,6 +397,15 @@  rte_dma_is_valid(int16_t dev_id)
 		rte_dma_devices[dev_id].state != RTE_DMA_DEV_UNUSED;
 }
 
+struct rte_dma_dev *
+rte_dma_pmd_get_dev_by_id(const int dev_id)
+{
+	if (!rte_dma_is_valid(dev_id))
+		return NULL;
+
+	return &rte_dma_devices[dev_id];
+}
+
 uint16_t
 rte_dma_count_avail(void)
 {
diff --git a/lib/dmadev/rte_dmadev_pmd.h b/lib/dmadev/rte_dmadev_pmd.h
index c61cedfb23..f68c3ac6aa 100644
--- a/lib/dmadev/rte_dmadev_pmd.h
+++ b/lib/dmadev/rte_dmadev_pmd.h
@@ -167,6 +167,20 @@  struct rte_dma_dev *rte_dma_pmd_allocate(const char *name, int numa_node,
 __rte_internal
 int rte_dma_pmd_release(const char *name);
 
+/**
+ * @internal
+ * Get the rte_dma_dev structure device pointer for the device id.
+ *
+ * @param dev_id
+ *   Device ID value to select the device structure.
+ *
+ * @return
+ *   - rte_dma_dev structure pointer for the given device ID on success, NULL
+ *   otherwise.
+ */
+__rte_internal
+struct rte_dma_dev *rte_dma_pmd_get_dev_by_id(const int dev_id);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/lib/dmadev/version.map b/lib/dmadev/version.map
index 2a3736514c..046dbfa988 100644
--- a/lib/dmadev/version.map
+++ b/lib/dmadev/version.map
@@ -25,6 +25,7 @@  INTERNAL {
 
 	rte_dma_fp_objs;
 	rte_dma_pmd_allocate;
+	rte_dma_pmd_get_dev_by_id;
 	rte_dma_pmd_release;
 
 	local: *;