bus/fslmc: affine dpio to crypto threads
authorHemant Agrawal <hemant.agrawal@nxp.com>
Tue, 11 Apr 2017 13:37:19 +0000 (19:07 +0530)
committerFerruh Yigit <ferruh.yigit@intel.com>
Wed, 19 Apr 2017 13:37:37 +0000 (15:37 +0200)
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
drivers/bus/fslmc/portal/dpaa2_hw_dpio.c
drivers/bus/fslmc/portal/dpaa2_hw_dpio.h
drivers/bus/fslmc/rte_bus_fslmc_version.map

index 16313cc..eaf35e9 100644 (file)
@@ -275,6 +275,51 @@ dpaa2_affine_qbman_swp(void)
        }
 }
 
+int
+dpaa2_affine_qbman_swp_sec(void)
+{
+       unsigned int 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 fslmc_vfio_device *vdev,
                         struct vfio_device_info *obj_info,
index 682f3fa..b1a1b8f 100644 (file)
@@ -56,5 +56,8 @@ RTE_DECLARE_PER_LCORE(struct dpaa2_io_portal_t, _dpaa2_io);
 /* 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);
+
 
 #endif /* _DPAA2_HW_DPIO_H_ */
index 3d5c1ad..ed445e2 100644 (file)
@@ -2,6 +2,7 @@ DPDK_17.05 {
        global:
 
        dpaa2_affine_qbman_swp;
+       dpaa2_affine_qbman_swp_sec;
        dpaa2_alloc_dpbp_dev;
        dpaa2_free_dpbp_dev;
        dpbp_disable;