[dpdk-dev,v2,1/6] bus/fslmc: support only single group and container

Message ID 20170825101954.28124-2-shreyansh.jain@nxp.com (mailing list archive)
State Accepted, archived
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Shreyansh Jain Aug. 25, 2017, 10:19 a.m. UTC
  Currently DPAA2 code doesn't support multiple groups and containers.
Remove such provision in code to simplify code.

Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
---
 drivers/bus/fslmc/fslmc_vfio.c | 70 +++++++++++++++---------------------------
 drivers/bus/fslmc/fslmc_vfio.h |  3 +-
 2 files changed, 26 insertions(+), 47 deletions(-)
  

Comments

Santosh Shukla Sept. 18, 2017, 11:15 a.m. UTC | #1
On Friday 25 August 2017 03:49 PM, Shreyansh Jain wrote:
> Currently DPAA2 code doesn't support multiple groups and containers.
> Remove such provision in code to simplify code.
>
> Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
> ---

Reviewed-by: Santosh Shukla <santosh.shukla@caviumnetworks.com>

>  drivers/bus/fslmc/fslmc_vfio.c | 70 +++++++++++++++---------------------------
>  drivers/bus/fslmc/fslmc_vfio.h |  3 +-
>  2 files changed, 26 insertions(+), 47 deletions(-)
>
> diff --git a/drivers/bus/fslmc/fslmc_vfio.c b/drivers/bus/fslmc/fslmc_vfio.c
> index 45e5927..3423b57 100644
> --- a/drivers/bus/fslmc/fslmc_vfio.c
> +++ b/drivers/bus/fslmc/fslmc_vfio.c
> @@ -62,8 +62,6 @@
>  #include "portal/dpaa2_hw_pvt.h"
>  #include "portal/dpaa2_hw_dpio.h"
>  
> -#define VFIO_MAX_CONTAINERS	1
> -
>  #define FSLMC_VFIO_LOG(level, fmt, args...) \
>  	RTE_LOG(level, EAL, "%s(): " fmt "\n", __func__, ##args)
>  
> @@ -71,8 +69,8 @@
>  #define SYSFS_FSL_MC_DEVICES "/sys/bus/fsl-mc/devices"
>  
>  /* Number of VFIO containers & groups with in */
> -static struct fslmc_vfio_group vfio_groups[VFIO_MAX_GRP];
> -static struct fslmc_vfio_container vfio_containers[VFIO_MAX_CONTAINERS];
> +static struct fslmc_vfio_group vfio_group;
> +static struct fslmc_vfio_container vfio_container;
>  static int container_device_fd;
>  static uint32_t *msi_intr_vaddr;
>  void *(*rte_mcp_ptr_list);
> @@ -90,22 +88,18 @@ rte_fslmc_object_register(struct rte_dpaa2_object *object)
>  	TAILQ_INSERT_TAIL(&fslmc_obj_list, object, next);
>  }
>  
> -static int vfio_connect_container(struct fslmc_vfio_group *vfio_group)
> +static int vfio_connect_container(void)
>  {
> -	struct fslmc_vfio_container *container;
> -	int i, fd, ret;
> +	int fd, ret;
>  
>  	/* Try connecting to vfio container if already created */
> -	for (i = 0; i < VFIO_MAX_CONTAINERS; i++) {
> -		container = &vfio_containers[i];
> -		if (!ioctl(vfio_group->fd, VFIO_GROUP_SET_CONTAINER,
> -			   &container->fd)) {
> -			FSLMC_VFIO_LOG(INFO,
> -			    "Container pre-exists with FD[0x%x] for this group",
> -			    container->fd);
> -			vfio_group->container = container;
> -			return 0;
> -		}
> +	if (!ioctl(vfio_group.fd, VFIO_GROUP_SET_CONTAINER,
> +		&vfio_container.fd)) {
> +		FSLMC_VFIO_LOG(INFO,
> +		    "Container pre-exists with FD[0x%x] for this group",
> +		    vfio_container.fd);
> +		vfio_group.container = &vfio_container;
> +		return 0;
>  	}
>  
>  	/* Opens main vfio file descriptor which represents the "container" */
> @@ -118,7 +112,7 @@ static int vfio_connect_container(struct fslmc_vfio_group *vfio_group)
>  	/* Check whether support for SMMU type IOMMU present or not */
>  	if (ioctl(fd, VFIO_CHECK_EXTENSION, VFIO_TYPE1_IOMMU)) {
>  		/* Connect group to container */
> -		ret = ioctl(vfio_group->fd, VFIO_GROUP_SET_CONTAINER, &fd);
> +		ret = ioctl(vfio_group.fd, VFIO_GROUP_SET_CONTAINER, &fd);
>  		if (ret) {
>  			FSLMC_VFIO_LOG(ERR, "Failed to setup group container");
>  			close(fd);
> @@ -137,23 +131,11 @@ static int vfio_connect_container(struct fslmc_vfio_group *vfio_group)
>  		return -EINVAL;
>  	}
>  
> -	container = NULL;
> -	for (i = 0; i < VFIO_MAX_CONTAINERS; i++) {
> -		if (vfio_containers[i].used)
> -			continue;
> -		container = &vfio_containers[i];
> -	}
> -	if (!container) {
> -		FSLMC_VFIO_LOG(ERR, "No free container found");
> -		close(fd);
> -		return -ENOMEM;
> -	}
> +	vfio_container.used = 1;
> +	vfio_container.fd = fd;
> +	vfio_container.group = &vfio_group;
> +	vfio_group.container = &vfio_container;
>  
> -	container->used = 1;
> -	container->fd = fd;
> -	container->group_list[container->index] = vfio_group;
> -	vfio_group->container = container;
> -	container->index++;
>  	return 0;
>  }
>  
> @@ -222,7 +204,7 @@ int rte_fslmc_vfio_dmamap(void)
>  #endif
>  
>  		/* SET DMA MAP for IOMMU */
> -		group = &vfio_groups[0];
> +		group = &vfio_group;
>  
>  		if (!group->container) {
>  			FSLMC_VFIO_LOG(ERR, "Container is not connected ");
> @@ -392,7 +374,7 @@ int fslmc_vfio_process_group(void)
>  	char path[PATH_MAX];
>  	int64_t v_addr;
>  	int ndev_count;
> -	struct fslmc_vfio_group *group = &vfio_groups[0];
> +	struct fslmc_vfio_group *group = &vfio_group;
>  	static int process_once;
>  
>  	/* if already done once */
> @@ -569,7 +551,7 @@ int fslmc_vfio_setup_group(void)
>  {
>  	struct fslmc_vfio_group *group = NULL;
>  	int groupid;
> -	int ret, i;
> +	int ret;
>  	char *container;
>  	struct vfio_group_status status = { .argsz = sizeof(status) };
>  
> @@ -599,13 +581,11 @@ int fslmc_vfio_setup_group(void)
>  	FSLMC_VFIO_LOG(DEBUG, "VFIO iommu group id = %d", groupid);
>  
>  	/* Check if group already exists */
> -	for (i = 0; i < VFIO_MAX_GRP; i++) {
> -		group = &vfio_groups[i];
> -		if (group->groupid == groupid) {
> -			FSLMC_VFIO_LOG(ERR, "groupid already exists %d",
> -				       groupid);
> -			return 0;
> -		}
> +	group = &vfio_group;
> +	if (group->groupid == groupid) {
> +		FSLMC_VFIO_LOG(ERR, "groupid already exists %d",
> +			       groupid);
> +		return 0;
>  	}
>  
>  	/* get the actual group fd */
> @@ -637,7 +617,7 @@ int fslmc_vfio_setup_group(void)
>  	/* check if group does not have a container yet */
>  	if (!(status.flags & VFIO_GROUP_FLAGS_CONTAINER_SET)) {
>  		/* Now connect this IOMMU group to given container */
> -		ret = vfio_connect_container(group);
> +		ret = vfio_connect_container();
>  		if (ret) {
>  			FSLMC_VFIO_LOG(ERR, "VFIO error connecting container"
>  				       " with groupid %d", groupid);
> diff --git a/drivers/bus/fslmc/fslmc_vfio.h b/drivers/bus/fslmc/fslmc_vfio.h
> index 0aff9b1..942a33c 100644
> --- a/drivers/bus/fslmc/fslmc_vfio.h
> +++ b/drivers/bus/fslmc/fslmc_vfio.h
> @@ -44,7 +44,6 @@
>  #define DPAA2_MC_DPBP_DEVID	10
>  #define DPAA2_MC_DPCI_DEVID	11
>  
> -#define VFIO_MAX_GRP 1
>  
>  typedef struct fslmc_vfio_device {
>  	int fd; /* fslmc root container device ?? */
> @@ -64,7 +63,7 @@ typedef struct fslmc_vfio_container {
>  	int fd; /* /dev/vfio/vfio */
>  	int used;
>  	int index; /* index in group list */
> -	struct fslmc_vfio_group *group_list[VFIO_MAX_GRP];
> +	struct fslmc_vfio_group *group;
>  } fslmc_vfio_container;
>  
>  struct rte_dpaa2_object;
  

Patch

diff --git a/drivers/bus/fslmc/fslmc_vfio.c b/drivers/bus/fslmc/fslmc_vfio.c
index 45e5927..3423b57 100644
--- a/drivers/bus/fslmc/fslmc_vfio.c
+++ b/drivers/bus/fslmc/fslmc_vfio.c
@@ -62,8 +62,6 @@ 
 #include "portal/dpaa2_hw_pvt.h"
 #include "portal/dpaa2_hw_dpio.h"
 
-#define VFIO_MAX_CONTAINERS	1
-
 #define FSLMC_VFIO_LOG(level, fmt, args...) \
 	RTE_LOG(level, EAL, "%s(): " fmt "\n", __func__, ##args)
 
@@ -71,8 +69,8 @@ 
 #define SYSFS_FSL_MC_DEVICES "/sys/bus/fsl-mc/devices"
 
 /* Number of VFIO containers & groups with in */
-static struct fslmc_vfio_group vfio_groups[VFIO_MAX_GRP];
-static struct fslmc_vfio_container vfio_containers[VFIO_MAX_CONTAINERS];
+static struct fslmc_vfio_group vfio_group;
+static struct fslmc_vfio_container vfio_container;
 static int container_device_fd;
 static uint32_t *msi_intr_vaddr;
 void *(*rte_mcp_ptr_list);
@@ -90,22 +88,18 @@  rte_fslmc_object_register(struct rte_dpaa2_object *object)
 	TAILQ_INSERT_TAIL(&fslmc_obj_list, object, next);
 }
 
-static int vfio_connect_container(struct fslmc_vfio_group *vfio_group)
+static int vfio_connect_container(void)
 {
-	struct fslmc_vfio_container *container;
-	int i, fd, ret;
+	int fd, ret;
 
 	/* Try connecting to vfio container if already created */
-	for (i = 0; i < VFIO_MAX_CONTAINERS; i++) {
-		container = &vfio_containers[i];
-		if (!ioctl(vfio_group->fd, VFIO_GROUP_SET_CONTAINER,
-			   &container->fd)) {
-			FSLMC_VFIO_LOG(INFO,
-			    "Container pre-exists with FD[0x%x] for this group",
-			    container->fd);
-			vfio_group->container = container;
-			return 0;
-		}
+	if (!ioctl(vfio_group.fd, VFIO_GROUP_SET_CONTAINER,
+		&vfio_container.fd)) {
+		FSLMC_VFIO_LOG(INFO,
+		    "Container pre-exists with FD[0x%x] for this group",
+		    vfio_container.fd);
+		vfio_group.container = &vfio_container;
+		return 0;
 	}
 
 	/* Opens main vfio file descriptor which represents the "container" */
@@ -118,7 +112,7 @@  static int vfio_connect_container(struct fslmc_vfio_group *vfio_group)
 	/* Check whether support for SMMU type IOMMU present or not */
 	if (ioctl(fd, VFIO_CHECK_EXTENSION, VFIO_TYPE1_IOMMU)) {
 		/* Connect group to container */
-		ret = ioctl(vfio_group->fd, VFIO_GROUP_SET_CONTAINER, &fd);
+		ret = ioctl(vfio_group.fd, VFIO_GROUP_SET_CONTAINER, &fd);
 		if (ret) {
 			FSLMC_VFIO_LOG(ERR, "Failed to setup group container");
 			close(fd);
@@ -137,23 +131,11 @@  static int vfio_connect_container(struct fslmc_vfio_group *vfio_group)
 		return -EINVAL;
 	}
 
-	container = NULL;
-	for (i = 0; i < VFIO_MAX_CONTAINERS; i++) {
-		if (vfio_containers[i].used)
-			continue;
-		container = &vfio_containers[i];
-	}
-	if (!container) {
-		FSLMC_VFIO_LOG(ERR, "No free container found");
-		close(fd);
-		return -ENOMEM;
-	}
+	vfio_container.used = 1;
+	vfio_container.fd = fd;
+	vfio_container.group = &vfio_group;
+	vfio_group.container = &vfio_container;
 
-	container->used = 1;
-	container->fd = fd;
-	container->group_list[container->index] = vfio_group;
-	vfio_group->container = container;
-	container->index++;
 	return 0;
 }
 
@@ -222,7 +204,7 @@  int rte_fslmc_vfio_dmamap(void)
 #endif
 
 		/* SET DMA MAP for IOMMU */
-		group = &vfio_groups[0];
+		group = &vfio_group;
 
 		if (!group->container) {
 			FSLMC_VFIO_LOG(ERR, "Container is not connected ");
@@ -392,7 +374,7 @@  int fslmc_vfio_process_group(void)
 	char path[PATH_MAX];
 	int64_t v_addr;
 	int ndev_count;
-	struct fslmc_vfio_group *group = &vfio_groups[0];
+	struct fslmc_vfio_group *group = &vfio_group;
 	static int process_once;
 
 	/* if already done once */
@@ -569,7 +551,7 @@  int fslmc_vfio_setup_group(void)
 {
 	struct fslmc_vfio_group *group = NULL;
 	int groupid;
-	int ret, i;
+	int ret;
 	char *container;
 	struct vfio_group_status status = { .argsz = sizeof(status) };
 
@@ -599,13 +581,11 @@  int fslmc_vfio_setup_group(void)
 	FSLMC_VFIO_LOG(DEBUG, "VFIO iommu group id = %d", groupid);
 
 	/* Check if group already exists */
-	for (i = 0; i < VFIO_MAX_GRP; i++) {
-		group = &vfio_groups[i];
-		if (group->groupid == groupid) {
-			FSLMC_VFIO_LOG(ERR, "groupid already exists %d",
-				       groupid);
-			return 0;
-		}
+	group = &vfio_group;
+	if (group->groupid == groupid) {
+		FSLMC_VFIO_LOG(ERR, "groupid already exists %d",
+			       groupid);
+		return 0;
 	}
 
 	/* get the actual group fd */
@@ -637,7 +617,7 @@  int fslmc_vfio_setup_group(void)
 	/* check if group does not have a container yet */
 	if (!(status.flags & VFIO_GROUP_FLAGS_CONTAINER_SET)) {
 		/* Now connect this IOMMU group to given container */
-		ret = vfio_connect_container(group);
+		ret = vfio_connect_container();
 		if (ret) {
 			FSLMC_VFIO_LOG(ERR, "VFIO error connecting container"
 				       " with groupid %d", groupid);
diff --git a/drivers/bus/fslmc/fslmc_vfio.h b/drivers/bus/fslmc/fslmc_vfio.h
index 0aff9b1..942a33c 100644
--- a/drivers/bus/fslmc/fslmc_vfio.h
+++ b/drivers/bus/fslmc/fslmc_vfio.h
@@ -44,7 +44,6 @@ 
 #define DPAA2_MC_DPBP_DEVID	10
 #define DPAA2_MC_DPCI_DEVID	11
 
-#define VFIO_MAX_GRP 1
 
 typedef struct fslmc_vfio_device {
 	int fd; /* fslmc root container device ?? */
@@ -64,7 +63,7 @@  typedef struct fslmc_vfio_container {
 	int fd; /* /dev/vfio/vfio */
 	int used;
 	int index; /* index in group list */
-	struct fslmc_vfio_group *group_list[VFIO_MAX_GRP];
+	struct fslmc_vfio_group *group;
 } fslmc_vfio_container;
 
 struct rte_dpaa2_object;