[dpdk-dev,RFC,01/10] virtio: rearrange resource initialization

Message ID 20140826020837.898427212@networkplumber.org (mailing list archive)
State RFC, archived
Headers

Commit Message

Stephen Hemminger Aug. 26, 2014, 2:07 a.m. UTC
  For clarity make the setup of PCI resources for Linux
into a function rather than block of code #ifdef'd in middle
of dev_init.

---
 lib/librte_pmd_virtio/virtio_ethdev.c |   76 +++++++++++++++++++---------------
 1 file changed, 43 insertions(+), 33 deletions(-)
  

Comments

Ouyang Changchun Aug. 26, 2014, 7:14 a.m. UTC | #1
Acked-by: Changchun Ouyang <Changchun.ouyang@intel.com>


> -----Original Message-----

> From: Stephen Hemminger [mailto:stephen@networkplumber.org]

> Sent: Tuesday, August 26, 2014 10:08 AM

> To: Ouyang, Changchun

> Cc: dev@dpdk.org

> Subject: [RFC 01/10] virtio: rearrange resource initialization

> 

> For clarity make the setup of PCI resources for Linux into a function rather

> than block of code #ifdef'd in middle of dev_init.

> 

> ---

>  lib/librte_pmd_virtio/virtio_ethdev.c |   76 +++++++++++++++++++----------

> -----

>  1 file changed, 43 insertions(+), 33 deletions(-)

> 

> --- a/lib/librte_pmd_virtio/virtio_ethdev.c	2014-08-25

> 19:00:03.622515574 -0700

> +++ b/lib/librte_pmd_virtio/virtio_ethdev.c	2014-08-25

> 19:00:03.622515574 -0700

> @@ -706,6 +706,41 @@ virtio_has_msix(const struct rte_pci_add

> 

>  	return (d != NULL);

>  }

> +

> +/* Extract I/O port numbers from sysfs */ static int

> +virtio_resource_init(struct rte_pci_device *pci_dev) {

> +	char dirname[PATH_MAX];

> +	char filename[PATH_MAX];

> +	unsigned long start, size;

> +

> +	if (get_uio_dev(&pci_dev->addr, dirname, sizeof(dirname)) < 0)

> +		return -1;

> +

> +	/* get portio size */

> +	snprintf(filename, sizeof(filename),

> +		     "%s/portio/port0/size", dirname);

> +	if (parse_sysfs_value(filename, &size) < 0) {

> +		PMD_INIT_LOG(ERR, "%s(): cannot parse size",

> +			     __func__);

> +		return -1;

> +	}

> +

> +	/* get portio start */

> +	snprintf(filename, sizeof(filename),

> +		 "%s/portio/port0/start", dirname);

> +	if (parse_sysfs_value(filename, &start) < 0) {

> +		PMD_INIT_LOG(ERR, "%s(): cannot parse portio start",

> +			     __func__);

> +		return -1;

> +	}

> +	pci_dev->mem_resource[0].addr = (void *)(uintptr_t)start;

> +	pci_dev->mem_resource[0].len =  (uint64_t)size;

> +	PMD_INIT_LOG(DEBUG,

> +		     "PCI Port IO found start=0x%lx with size=0x%lx",

> +		     start, size);

> +	return 0;

> +}

>  #else

>  static int

>  virtio_has_msix(const struct rte_pci_addr *loc __rte_unused) @@ -713,6

> +748,12 @@ virtio_has_msix(const struct rte_pci_add

>  	/* nic_uio does not enable interrupts, return 0 (false). */

>  	return 0;

>  }

> +

> +static int virtio_resource_init(struct rte_pci_device *pci_dev

> +__rte_unused) {

> +	/* no setup required */

> +	return 0;

> +}

>  #endif

> 

>  /*

> @@ -749,40 +790,9 @@ eth_virtio_dev_init(__rte_unused struct

>  		return 0;

> 

>  	pci_dev = eth_dev->pci_dev;

> +	if (virtio_resource_init(pci_dev) < 0)

> +		return -1;

> 

> -#ifdef RTE_EXEC_ENV_LINUXAPP

> -	{

> -		char dirname[PATH_MAX];

> -		char filename[PATH_MAX];

> -		unsigned long start, size;

> -

> -		if (get_uio_dev(&pci_dev->addr, dirname, sizeof(dirname))

> < 0)

> -			return -1;

> -

> -		/* get portio size */

> -		snprintf(filename, sizeof(filename),

> -			     "%s/portio/port0/size", dirname);

> -		if (parse_sysfs_value(filename, &size) < 0) {

> -			PMD_INIT_LOG(ERR, "%s(): cannot parse size",

> -				     __func__);

> -			return -1;

> -		}

> -

> -		/* get portio start */

> -		snprintf(filename, sizeof(filename),

> -			     "%s/portio/port0/start", dirname);

> -		if (parse_sysfs_value(filename, &start) < 0) {

> -			PMD_INIT_LOG(ERR, "%s(): cannot parse portio

> start",

> -				     __func__);

> -			return -1;

> -		}

> -		pci_dev->mem_resource[0].addr = (void *)(uintptr_t)start;

> -		pci_dev->mem_resource[0].len =  (uint64_t)size;

> -		PMD_INIT_LOG(DEBUG,

> -			     "PCI Port IO found start=0x%lx with size=0x%lx",

> -			     start, size);

> -	}

> -#endif

>  	hw->use_msix = virtio_has_msix(&pci_dev->addr);

>  	hw->io_base = (uint32_t)(uintptr_t)pci_dev-

> >mem_resource[0].addr;

>
  

Patch

--- a/lib/librte_pmd_virtio/virtio_ethdev.c	2014-08-25 19:00:03.622515574 -0700
+++ b/lib/librte_pmd_virtio/virtio_ethdev.c	2014-08-25 19:00:03.622515574 -0700
@@ -706,6 +706,41 @@  virtio_has_msix(const struct rte_pci_add
 
 	return (d != NULL);
 }
+
+/* Extract I/O port numbers from sysfs */
+static int virtio_resource_init(struct rte_pci_device *pci_dev)
+{
+	char dirname[PATH_MAX];
+	char filename[PATH_MAX];
+	unsigned long start, size;
+
+	if (get_uio_dev(&pci_dev->addr, dirname, sizeof(dirname)) < 0)
+		return -1;
+
+	/* get portio size */
+	snprintf(filename, sizeof(filename),
+		     "%s/portio/port0/size", dirname);
+	if (parse_sysfs_value(filename, &size) < 0) {
+		PMD_INIT_LOG(ERR, "%s(): cannot parse size",
+			     __func__);
+		return -1;
+	}
+
+	/* get portio start */
+	snprintf(filename, sizeof(filename),
+		 "%s/portio/port0/start", dirname);
+	if (parse_sysfs_value(filename, &start) < 0) {
+		PMD_INIT_LOG(ERR, "%s(): cannot parse portio start",
+			     __func__);
+		return -1;
+	}
+	pci_dev->mem_resource[0].addr = (void *)(uintptr_t)start;
+	pci_dev->mem_resource[0].len =  (uint64_t)size;
+	PMD_INIT_LOG(DEBUG,
+		     "PCI Port IO found start=0x%lx with size=0x%lx",
+		     start, size);
+	return 0;
+}
 #else
 static int
 virtio_has_msix(const struct rte_pci_addr *loc __rte_unused)
@@ -713,6 +748,12 @@  virtio_has_msix(const struct rte_pci_add
 	/* nic_uio does not enable interrupts, return 0 (false). */
 	return 0;
 }
+
+static int virtio_resource_init(struct rte_pci_device *pci_dev __rte_unused)
+{
+	/* no setup required */
+	return 0;
+}
 #endif
 
 /*
@@ -749,40 +790,9 @@  eth_virtio_dev_init(__rte_unused struct
 		return 0;
 
 	pci_dev = eth_dev->pci_dev;
+	if (virtio_resource_init(pci_dev) < 0)
+		return -1;
 
-#ifdef RTE_EXEC_ENV_LINUXAPP
-	{
-		char dirname[PATH_MAX];
-		char filename[PATH_MAX];
-		unsigned long start, size;
-
-		if (get_uio_dev(&pci_dev->addr, dirname, sizeof(dirname)) < 0)
-			return -1;
-
-		/* get portio size */
-		snprintf(filename, sizeof(filename),
-			     "%s/portio/port0/size", dirname);
-		if (parse_sysfs_value(filename, &size) < 0) {
-			PMD_INIT_LOG(ERR, "%s(): cannot parse size",
-				     __func__);
-			return -1;
-		}
-
-		/* get portio start */
-		snprintf(filename, sizeof(filename),
-			     "%s/portio/port0/start", dirname);
-		if (parse_sysfs_value(filename, &start) < 0) {
-			PMD_INIT_LOG(ERR, "%s(): cannot parse portio start",
-				     __func__);
-			return -1;
-		}
-		pci_dev->mem_resource[0].addr = (void *)(uintptr_t)start;
-		pci_dev->mem_resource[0].len =  (uint64_t)size;
-		PMD_INIT_LOG(DEBUG,
-			     "PCI Port IO found start=0x%lx with size=0x%lx",
-			     start, size);
-	}
-#endif
 	hw->use_msix = virtio_has_msix(&pci_dev->addr);
 	hw->io_base = (uint32_t)(uintptr_t)pci_dev->mem_resource[0].addr;