Re: [libvirt] [PATCH v3 2/6] nodedev: conf: Split PCI sub-capability parsing to separate methods

2017-05-09 Thread Pavel Hrdina
On Wed, Apr 26, 2017 at 04:55:29PM +0200, Erik Skultety wrote:
> Since there's at least SRIOV and MDEV sub-capabilities to be parsed,
> let's make the code more readable by splitting it to several logical
> blocks.
> 
> Signed-off-by: Erik Skultety 
> ---
>  src/conf/node_device_conf.c | 130 
> ++--
>  1 file changed, 77 insertions(+), 53 deletions(-)
> 
> diff --git a/src/conf/node_device_conf.c b/src/conf/node_device_conf.c
> index 85cfd8396..d70d9942c 100644
> --- a/src/conf/node_device_conf.c
> +++ b/src/conf/node_device_conf.c
> @@ -1286,76 +1286,102 @@ virPCIEDeviceInfoParseXML(xmlXPathContextPtr ctxt,
>  
>  
>  static int
> -virNodeDevPCICapabilityParseXML(xmlXPathContextPtr ctxt,
> -xmlNodePtr node,
> -virNodeDevCapPCIDevPtr pci_dev)
> +virNodeDevPCICapSRIOVPhysicalParseXML(xmlXPathContextPtr ctxt,
> +  virNodeDevCapPCIDevPtr pci_dev)
>  {
> -char *maxFuncsStr = virXMLPropString(node, "maxCount");
> -char *type = virXMLPropString(node, "type");
> -xmlNodePtr *addresses = NULL;
> -xmlNodePtr orignode = ctxt->node;
> -int ret = -1;
> -size_t i = 0;
> -
> -ctxt->node = node;
> -
> -if (!type) {
> -virReportError(VIR_ERR_XML_ERROR, "%s", _("Missing capability 
> type"));
> -goto out;
> -}
> -
> -if (STREQ(type, "phys_function")) {
> -xmlNodePtr address = virXPathNode("./address[1]", ctxt);
> +xmlNodePtr address = virXPathNode("./address[1]", ctxt);
>  
>  if (VIR_ALLOC(pci_dev->physical_function) < 0)
> -goto out;
> +return -1;
>  
>  if (!address) {
>  virReportError(VIR_ERR_XML_ERROR, "%s",
> _("Missing address in 'phys_function' 
> capability"));
> -goto out;
> +return -1;
>  }
>  
>  if (virPCIDeviceAddressParseXML(address,
>  pci_dev->physical_function) < 0)
> -goto out;
> +return -1;
>  
>  pci_dev->flags |= VIR_NODE_DEV_CAP_FLAG_PCI_PHYSICAL_FUNCTION;

Wrong indentation of the function body.

Pavel


signature.asc
Description: Digital signature
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

[libvirt] [PATCH v3 2/6] nodedev: conf: Split PCI sub-capability parsing to separate methods

2017-04-26 Thread Erik Skultety
Since there's at least SRIOV and MDEV sub-capabilities to be parsed,
let's make the code more readable by splitting it to several logical
blocks.

Signed-off-by: Erik Skultety 
---
 src/conf/node_device_conf.c | 130 ++--
 1 file changed, 77 insertions(+), 53 deletions(-)

diff --git a/src/conf/node_device_conf.c b/src/conf/node_device_conf.c
index 85cfd8396..d70d9942c 100644
--- a/src/conf/node_device_conf.c
+++ b/src/conf/node_device_conf.c
@@ -1286,76 +1286,102 @@ virPCIEDeviceInfoParseXML(xmlXPathContextPtr ctxt,
 
 
 static int
-virNodeDevPCICapabilityParseXML(xmlXPathContextPtr ctxt,
-xmlNodePtr node,
-virNodeDevCapPCIDevPtr pci_dev)
+virNodeDevPCICapSRIOVPhysicalParseXML(xmlXPathContextPtr ctxt,
+  virNodeDevCapPCIDevPtr pci_dev)
 {
-char *maxFuncsStr = virXMLPropString(node, "maxCount");
-char *type = virXMLPropString(node, "type");
-xmlNodePtr *addresses = NULL;
-xmlNodePtr orignode = ctxt->node;
-int ret = -1;
-size_t i = 0;
-
-ctxt->node = node;
-
-if (!type) {
-virReportError(VIR_ERR_XML_ERROR, "%s", _("Missing capability type"));
-goto out;
-}
-
-if (STREQ(type, "phys_function")) {
-xmlNodePtr address = virXPathNode("./address[1]", ctxt);
+xmlNodePtr address = virXPathNode("./address[1]", ctxt);
 
 if (VIR_ALLOC(pci_dev->physical_function) < 0)
-goto out;
+return -1;
 
 if (!address) {
 virReportError(VIR_ERR_XML_ERROR, "%s",
_("Missing address in 'phys_function' capability"));
-goto out;
+return -1;
 }
 
 if (virPCIDeviceAddressParseXML(address,
 pci_dev->physical_function) < 0)
-goto out;
+return -1;
 
 pci_dev->flags |= VIR_NODE_DEV_CAP_FLAG_PCI_PHYSICAL_FUNCTION;
-} else if (STREQ(type, "virt_functions")) {
-int naddresses;
-
-if ((naddresses = virXPathNodeSet("./address", ctxt, &addresses)) < 0)
-goto out;
-
-if (maxFuncsStr &&
-virStrToLong_uip(maxFuncsStr, NULL, 10,
- &pci_dev->max_virtual_functions) < 0) {
-virReportError(VIR_ERR_XML_ERROR, "%s",
-   _("Malformed 'maxCount' parameter"));
-goto out;
-}
 
-if (VIR_ALLOC_N(pci_dev->virtual_functions, naddresses) < 0)
-goto out;
+return 0;
+}
+
+
+static int
+virNodeDevPCICapSRIOVVirtualParseXML(xmlXPathContextPtr ctxt,
+ virNodeDevCapPCIDevPtr pci_dev)
+{
+int ret = -1;
+xmlNodePtr *addresses = NULL;
+int naddresses = virXPathNodeSet("./address", ctxt, &addresses);
+char *maxFuncsStr = virXPathString("string(./@maxCount)", ctxt);
+size_t i;
 
-for (i = 0; i < naddresses; i++) {
-virPCIDeviceAddressPtr addr = NULL;
+if (naddresses < 0)
+goto cleanup;
 
-if (VIR_ALLOC(addr) < 0)
-goto out;
+if (maxFuncsStr &&
+virStrToLong_uip(maxFuncsStr, NULL, 10,
+ &pci_dev->max_virtual_functions) < 0) {
+virReportError(VIR_ERR_XML_ERROR, "%s",
+   _("Malformed 'maxCount' parameter"));
+goto cleanup;
+}
 
-if (virPCIDeviceAddressParseXML(addresses[i], addr) < 0) {
-VIR_FREE(addr);
-goto out;
-}
+if (VIR_ALLOC_N(pci_dev->virtual_functions, naddresses) < 0)
+goto cleanup;
 
-if (VIR_APPEND_ELEMENT(pci_dev->virtual_functions,
-   pci_dev->num_virtual_functions,
-   addr) < 0)
-goto out;
+for (i = 0; i < naddresses; i++) {
+virPCIDeviceAddressPtr addr = NULL;
+
+if (VIR_ALLOC(addr) < 0)
+goto cleanup;
+
+if (virPCIDeviceAddressParseXML(addresses[i], addr) < 0) {
+VIR_FREE(addr);
+goto cleanup;
 }
 
-pci_dev->flags |= VIR_NODE_DEV_CAP_FLAG_PCI_VIRTUAL_FUNCTION;
+if (VIR_APPEND_ELEMENT(pci_dev->virtual_functions,
+   pci_dev->num_virtual_functions,
+   addr) < 0)
+goto cleanup;
+}
+
+pci_dev->flags |= VIR_NODE_DEV_CAP_FLAG_PCI_VIRTUAL_FUNCTION;
+ret = 0;
+ cleanup:
+VIR_FREE(addresses);
+VIR_FREE(maxFuncsStr);
+return ret;
+}
+
+
+static int
+virNodeDevPCICapabilityParseXML(xmlXPathContextPtr ctxt,
+xmlNodePtr node,
+virNodeDevCapPCIDevPtr pci_dev)
+{
+char *type = virXMLPropString(node, "type");
+xmlNodePtr orignode = ctxt->node;
+int ret = -1;
+
+ctxt->node = node;
+
+if (!type) {
+virReportError(V