[dpdk-dev,15/32] net/dpaa2: dpio routine to affine to crypto threads

Message ID 1480875447-23680-16-git-send-email-hemant.agrawal@nxp.com (mailing list archive)
State Changes Requested, archived
Delegated to: Ferruh Yigit
Headers

Checks

Context Check Description
checkpatch/checkpatch warning coding style issues

Commit Message

Hemant Agrawal Dec. 4, 2016, 6:17 p.m. UTC
  Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 drivers/net/dpaa2/base/dpaa2_hw_dpio.c | 45 ++++++++++++++++++++++++++++++++++
 drivers/net/dpaa2/base/dpaa2_hw_dpio.h |  3 +++
 2 files changed, 48 insertions(+)
  

Comments

Ferruh Yigit Dec. 6, 2016, 7:49 p.m. UTC | #1
On 12/4/2016 6:17 PM, Hemant Agrawal wrote:
> Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
> ---
>  drivers/net/dpaa2/base/dpaa2_hw_dpio.c | 45 ++++++++++++++++++++++++++++++++++
>  drivers/net/dpaa2/base/dpaa2_hw_dpio.h |  3 +++
>  2 files changed, 48 insertions(+)
> 
> diff --git a/drivers/net/dpaa2/base/dpaa2_hw_dpio.c b/drivers/net/dpaa2/base/dpaa2_hw_dpio.c
> index 4a0a638..9c6eb96 100644
> --- a/drivers/net/dpaa2/base/dpaa2_hw_dpio.c
> +++ b/drivers/net/dpaa2/base/dpaa2_hw_dpio.c
> @@ -275,6 +275,51 @@ static inline struct dpaa2_dpio_dev *dpaa2_get_qbman_swp(void)
>  }
>  
>  int
> +dpaa2_affine_qbman_swp_sec(void)
> +{
> +	unsigned lcore_id = rte_lcore_id();
> +	uint64_t tid = syscall(SYS_gettid);
> +
> +	if (lcore_id == LCORE_ID_ANY)
> +		lcore_id = rte_get_master_lcore();
> +	/* if the core id is not supported */
> +	else if (lcore_id >= RTE_MAX_LCORE)
> +		return -1;
> +
> +	if (dpaa2_io_portal[lcore_id].sec_dpio_dev) {
> +		PMD_DRV_LOG(INFO, "DPAA Portal=0x%x (%d) is being shared"
> +			    " between thread %lu and current  %lu",
> +			    dpaa2_io_portal[lcore_id].sec_dpio_dev,
> +			    dpaa2_io_portal[lcore_id].sec_dpio_dev->index,
> +			    dpaa2_io_portal[lcore_id].sec_tid,
> +			    tid);
> +		RTE_PER_LCORE(_dpaa2_io).sec_dpio_dev
> +			= dpaa2_io_portal[lcore_id].sec_dpio_dev;
> +		rte_atomic16_inc(&dpaa2_io_portal
> +				 [lcore_id].sec_dpio_dev->ref_count);
> +		dpaa2_io_portal[lcore_id].sec_tid = tid;
> +
> +		PMD_DRV_LOG(DEBUG, "Old Portal=0x%x (%d) affined thread - %lu",
> +			    dpaa2_io_portal[lcore_id].sec_dpio_dev,
> +			    dpaa2_io_portal[lcore_id].sec_dpio_dev->index,
> +			    tid);
> +		return 0;
> +	}
> +
> +	/* Populate the dpaa2_io_portal structure */
> +	dpaa2_io_portal[lcore_id].sec_dpio_dev = dpaa2_get_qbman_swp();
> +
> +	if (dpaa2_io_portal[lcore_id].sec_dpio_dev) {
> +		RTE_PER_LCORE(_dpaa2_io).sec_dpio_dev
> +			= dpaa2_io_portal[lcore_id].sec_dpio_dev;
> +		dpaa2_io_portal[lcore_id].sec_tid = tid;
> +		return 0;
> +	} else {
> +		return -1;
> +	}
> +}
> +
> +int
>  dpaa2_create_dpio_device(struct dpaa2_vfio_device *vdev,
>  			 struct vfio_device_info *obj_info,
>  		int object_id)
> diff --git a/drivers/net/dpaa2/base/dpaa2_hw_dpio.h b/drivers/net/dpaa2/base/dpaa2_hw_dpio.h
> index d90b900..8480ce3 100644
> --- a/drivers/net/dpaa2/base/dpaa2_hw_dpio.h
> +++ b/drivers/net/dpaa2/base/dpaa2_hw_dpio.h
> @@ -57,6 +57,9 @@ struct dpaa2_io_portal_t {
>  /* Affine a DPIO portal to current processing thread */
>  int dpaa2_affine_qbman_swp(void);
>  
> +/* Affine additional DPIO portal to current crypto processing thread */
> +int dpaa2_affine_qbman_swp_sec(void);

Why crypto related code in net driver base folder? Shouldn't these go to
common folder?

> +
>  /* create dpio device */
>  int dpaa2_create_dpio_device(struct dpaa2_vfio_device *vdev,
>  			     struct vfio_device_info *obj_info,
>
  
Hemant Agrawal Dec. 19, 2016, 3:25 p.m. UTC | #2
On 12/7/2016 1:19 AM, Ferruh Yigit wrote:
> On 12/4/2016 6:17 PM, Hemant Agrawal wrote:
>> Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
>> ---
>>  drivers/net/dpaa2/base/dpaa2_hw_dpio.c | 45 ++++++++++++++++++++++++++++++++++
>>  drivers/net/dpaa2/base/dpaa2_hw_dpio.h |  3 +++
>>  2 files changed, 48 insertions(+)
>>
>> diff --git a/drivers/net/dpaa2/base/dpaa2_hw_dpio.c b/drivers/net/dpaa2/base/dpaa2_hw_dpio.c
>> index 4a0a638..9c6eb96 100644
>> --- a/drivers/net/dpaa2/base/dpaa2_hw_dpio.c
>> +++ b/drivers/net/dpaa2/base/dpaa2_hw_dpio.c
>> @@ -275,6 +275,51 @@ static inline struct dpaa2_dpio_dev *dpaa2_get_qbman_swp(void)
>>  }
>>
>>  int
>> +dpaa2_affine_qbman_swp_sec(void)
>> +{
>> +	unsigned lcore_id = rte_lcore_id();
>> +	uint64_t tid = syscall(SYS_gettid);
>> +
>> +	if (lcore_id == LCORE_ID_ANY)
>> +		lcore_id = rte_get_master_lcore();
>> +	/* if the core id is not supported */
>> +	else if (lcore_id >= RTE_MAX_LCORE)
>> +		return -1;
>> +
>> +	if (dpaa2_io_portal[lcore_id].sec_dpio_dev) {
>> +		PMD_DRV_LOG(INFO, "DPAA Portal=0x%x (%d) is being shared"
>> +			    " between thread %lu and current  %lu",
>> +			    dpaa2_io_portal[lcore_id].sec_dpio_dev,
>> +			    dpaa2_io_portal[lcore_id].sec_dpio_dev->index,
>> +			    dpaa2_io_portal[lcore_id].sec_tid,
>> +			    tid);
>> +		RTE_PER_LCORE(_dpaa2_io).sec_dpio_dev
>> +			= dpaa2_io_portal[lcore_id].sec_dpio_dev;
>> +		rte_atomic16_inc(&dpaa2_io_portal
>> +				 [lcore_id].sec_dpio_dev->ref_count);
>> +		dpaa2_io_portal[lcore_id].sec_tid = tid;
>> +
>> +		PMD_DRV_LOG(DEBUG, "Old Portal=0x%x (%d) affined thread - %lu",
>> +			    dpaa2_io_portal[lcore_id].sec_dpio_dev,
>> +			    dpaa2_io_portal[lcore_id].sec_dpio_dev->index,
>> +			    tid);
>> +		return 0;
>> +	}
>> +
>> +	/* Populate the dpaa2_io_portal structure */
>> +	dpaa2_io_portal[lcore_id].sec_dpio_dev = dpaa2_get_qbman_swp();
>> +
>> +	if (dpaa2_io_portal[lcore_id].sec_dpio_dev) {
>> +		RTE_PER_LCORE(_dpaa2_io).sec_dpio_dev
>> +			= dpaa2_io_portal[lcore_id].sec_dpio_dev;
>> +		dpaa2_io_portal[lcore_id].sec_tid = tid;
>> +		return 0;
>> +	} else {
>> +		return -1;
>> +	}
>> +}
>> +
>> +int
>>  dpaa2_create_dpio_device(struct dpaa2_vfio_device *vdev,
>>  			 struct vfio_device_info *obj_info,
>>  		int object_id)
>> diff --git a/drivers/net/dpaa2/base/dpaa2_hw_dpio.h b/drivers/net/dpaa2/base/dpaa2_hw_dpio.h
>> index d90b900..8480ce3 100644
>> --- a/drivers/net/dpaa2/base/dpaa2_hw_dpio.h
>> +++ b/drivers/net/dpaa2/base/dpaa2_hw_dpio.h
>> @@ -57,6 +57,9 @@ struct dpaa2_io_portal_t {
>>  /* Affine a DPIO portal to current processing thread */
>>  int dpaa2_affine_qbman_swp(void);
>>
>> +/* Affine additional DPIO portal to current crypto processing thread */
>> +int dpaa2_affine_qbman_swp_sec(void);
>
> Why crypto related code in net driver base folder? Shouldn't these go to
> common folder?
>

I agree, dpio is now in common/dpaa2 folder in v2.

>> +
>>  /* create dpio device */
>>  int dpaa2_create_dpio_device(struct dpaa2_vfio_device *vdev,
>>  			     struct vfio_device_info *obj_info,
>>
>
>
  

Patch

diff --git a/drivers/net/dpaa2/base/dpaa2_hw_dpio.c b/drivers/net/dpaa2/base/dpaa2_hw_dpio.c
index 4a0a638..9c6eb96 100644
--- a/drivers/net/dpaa2/base/dpaa2_hw_dpio.c
+++ b/drivers/net/dpaa2/base/dpaa2_hw_dpio.c
@@ -275,6 +275,51 @@  static inline struct dpaa2_dpio_dev *dpaa2_get_qbman_swp(void)
 }
 
 int
+dpaa2_affine_qbman_swp_sec(void)
+{
+	unsigned lcore_id = rte_lcore_id();
+	uint64_t tid = syscall(SYS_gettid);
+
+	if (lcore_id == LCORE_ID_ANY)
+		lcore_id = rte_get_master_lcore();
+	/* if the core id is not supported */
+	else if (lcore_id >= RTE_MAX_LCORE)
+		return -1;
+
+	if (dpaa2_io_portal[lcore_id].sec_dpio_dev) {
+		PMD_DRV_LOG(INFO, "DPAA Portal=0x%x (%d) is being shared"
+			    " between thread %lu and current  %lu",
+			    dpaa2_io_portal[lcore_id].sec_dpio_dev,
+			    dpaa2_io_portal[lcore_id].sec_dpio_dev->index,
+			    dpaa2_io_portal[lcore_id].sec_tid,
+			    tid);
+		RTE_PER_LCORE(_dpaa2_io).sec_dpio_dev
+			= dpaa2_io_portal[lcore_id].sec_dpio_dev;
+		rte_atomic16_inc(&dpaa2_io_portal
+				 [lcore_id].sec_dpio_dev->ref_count);
+		dpaa2_io_portal[lcore_id].sec_tid = tid;
+
+		PMD_DRV_LOG(DEBUG, "Old Portal=0x%x (%d) affined thread - %lu",
+			    dpaa2_io_portal[lcore_id].sec_dpio_dev,
+			    dpaa2_io_portal[lcore_id].sec_dpio_dev->index,
+			    tid);
+		return 0;
+	}
+
+	/* Populate the dpaa2_io_portal structure */
+	dpaa2_io_portal[lcore_id].sec_dpio_dev = dpaa2_get_qbman_swp();
+
+	if (dpaa2_io_portal[lcore_id].sec_dpio_dev) {
+		RTE_PER_LCORE(_dpaa2_io).sec_dpio_dev
+			= dpaa2_io_portal[lcore_id].sec_dpio_dev;
+		dpaa2_io_portal[lcore_id].sec_tid = tid;
+		return 0;
+	} else {
+		return -1;
+	}
+}
+
+int
 dpaa2_create_dpio_device(struct dpaa2_vfio_device *vdev,
 			 struct vfio_device_info *obj_info,
 		int object_id)
diff --git a/drivers/net/dpaa2/base/dpaa2_hw_dpio.h b/drivers/net/dpaa2/base/dpaa2_hw_dpio.h
index d90b900..8480ce3 100644
--- a/drivers/net/dpaa2/base/dpaa2_hw_dpio.h
+++ b/drivers/net/dpaa2/base/dpaa2_hw_dpio.h
@@ -57,6 +57,9 @@  struct dpaa2_io_portal_t {
 /* Affine a DPIO portal to current processing thread */
 int dpaa2_affine_qbman_swp(void);
 
+/* Affine additional DPIO portal to current crypto processing thread */
+int dpaa2_affine_qbman_swp_sec(void);
+
 /* create dpio device */
 int dpaa2_create_dpio_device(struct dpaa2_vfio_device *vdev,
 			     struct vfio_device_info *obj_info,