Replace cssid, ssid and devno elements with virCCWDeviceAddress.
Reviewed-by: Marc Hartmayer <mhartmay(a)linux.ibm.com>
Signed-off-by: Boris Fiuczynski <fiuczy(a)linux.ibm.com>
---
src/conf/node_device_conf.c | 16 ++++++----------
src/conf/node_device_conf.h | 4 +---
src/node_device/node_device_driver.c | 11 ++---------
src/node_device/node_device_udev.c | 9 ++++++---
tests/nodedevmdevctltest.c | 7 ++++---
5 files changed, 19 insertions(+), 28 deletions(-)
diff --git a/src/conf/node_device_conf.c b/src/conf/node_device_conf.c
index 9711594994..85effb7d78 100644
--- a/src/conf/node_device_conf.c
+++ b/src/conf/node_device_conf.c
@@ -640,12 +640,7 @@ static void
virNodeDeviceCapCCWDefFormat(virBuffer *buf,
const virNodeDevCapData *data)
{
- virBufferAsprintf(buf, "<cssid>0x%x</cssid>\n",
- data->ccw_dev.cssid);
- virBufferAsprintf(buf, "<ssid>0x%x</ssid>\n",
- data->ccw_dev.ssid);
- virBufferAsprintf(buf, "<devno>0x%04x</devno>\n",
- data->ccw_dev.devno);
+ virCCWDeviceAddressFormat(buf, data->ccw_dev.dev_addr);
}
@@ -1231,9 +1226,7 @@ virNodeDevCapCCWParseXML(xmlXPathContextPtr ctxt,
if (virNodeDevCCWDeviceAddressParseXML(ctxt, node, def->name, ccw_addr) < 0)
return -1;
- ccw_dev->cssid = ccw_addr->cssid;
- ccw_dev->ssid = ccw_addr->ssid;
- ccw_dev->devno = ccw_addr->devno;
+ ccw_dev->dev_addr = g_steal_pointer(&ccw_addr);
return 0;
}
@@ -2621,6 +2614,7 @@ virNodeDevCapsDefFree(virNodeDevCapsDef *caps)
g_free(data->mdev.parent_addr);
break;
case VIR_NODE_DEV_CAP_CSS_DEV:
+ g_free(data->ccw_dev.dev_addr);
for (i = 0; i < data->ccw_dev.nmdev_types; i++)
virMediatedDeviceTypeFree(data->ccw_dev.mdev_types[i]);
g_free(data->ccw_dev.mdev_types);
@@ -2638,10 +2632,12 @@ virNodeDevCapsDefFree(virNodeDevCapsDef *caps)
g_free(data->mdev_parent.mdev_types);
g_free(data->mdev_parent.address);
break;
+ case VIR_NODE_DEV_CAP_CCW_DEV:
+ g_free(data->ccw_dev.dev_addr);
+ break;
case VIR_NODE_DEV_CAP_DRM:
case VIR_NODE_DEV_CAP_FC_HOST:
case VIR_NODE_DEV_CAP_VPORTS:
- case VIR_NODE_DEV_CAP_CCW_DEV:
case VIR_NODE_DEV_CAP_VDPA:
case VIR_NODE_DEV_CAP_AP_CARD:
case VIR_NODE_DEV_CAP_AP_QUEUE:
diff --git a/src/conf/node_device_conf.h b/src/conf/node_device_conf.h
index 25666a333e..ad2258e90d 100644
--- a/src/conf/node_device_conf.h
+++ b/src/conf/node_device_conf.h
@@ -281,9 +281,7 @@ struct _virNodeDevCapDRM {
typedef struct _virNodeDevCapCCW virNodeDevCapCCW;
struct _virNodeDevCapCCW {
- unsigned int cssid;
- unsigned int ssid;
- unsigned int devno;
+ virCCWDeviceAddress *dev_addr;
unsigned int flags; /* enum virNodeDevCCWCapFlags */
virMediatedDeviceType **mdev_types;
size_t nmdev_types;
diff --git a/src/node_device/node_device_driver.c b/src/node_device/node_device_driver.c
index fa5db0d5d5..9898b1914a 100644
--- a/src/node_device/node_device_driver.c
+++ b/src/node_device/node_device_driver.c
@@ -683,16 +683,9 @@ nodeDeviceObjFormatAddress(virNodeDeviceObj *obj)
break;
}
- case VIR_NODE_DEV_CAP_CSS_DEV: {
- virCCWDeviceAddress ccw_addr = {
- .cssid = caps->data.ccw_dev.cssid,
- .ssid = caps->data.ccw_dev.ssid,
- .devno = caps->data.ccw_dev.devno
- };
-
- addr = virCCWDeviceAddressAsString(&ccw_addr);
+ case VIR_NODE_DEV_CAP_CSS_DEV:
+ addr = virCCWDeviceAddressAsString(caps->data.ccw_dev.dev_addr);
break;
- }
case VIR_NODE_DEV_CAP_AP_MATRIX:
addr = g_strdup(caps->data.ap_matrix.addr);
diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c
index 1d8486f623..97fbe95ac7 100644
--- a/src/node_device/node_device_udev.c
+++ b/src/node_device/node_device_udev.c
@@ -1184,18 +1184,21 @@ udevGetCCWAddress(const char *sysfs_path,
virNodeDevCapData *data)
{
char *p;
+ g_autofree virCCWDeviceAddress *ccw_addr = g_new0(virCCWDeviceAddress, 1);
if ((p = strrchr(sysfs_path, '/')) == NULL ||
virCCWDeviceAddressParseFromString(p + 1,
- &data->ccw_dev.cssid,
- &data->ccw_dev.ssid,
- &data->ccw_dev.devno) < 0) {
+ &ccw_addr->cssid,
+ &ccw_addr->ssid,
+ &ccw_addr->devno) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("failed to parse the CCW address from sysfs path:
'%1$s'"),
sysfs_path);
return -1;
}
+ data->ccw_dev.dev_addr = g_steal_pointer(&ccw_addr);
+
return 0;
}
diff --git a/tests/nodedevmdevctltest.c b/tests/nodedevmdevctltest.c
index 93b0efcb1c..c7e6836edb 100644
--- a/tests/nodedevmdevctltest.c
+++ b/tests/nodedevmdevctltest.c
@@ -435,9 +435,10 @@ fakeCSSDevice(void)
def->caps->data.type = VIR_NODE_DEV_CAP_CSS_DEV;
css_dev = &def->caps->data.ccw_dev;
- css_dev->cssid = 0;
- css_dev->ssid = 0;
- css_dev->devno = 82;
+ css_dev->dev_addr = g_new0(virCCWDeviceAddress, 1);
+ css_dev->dev_addr->cssid = 0;
+ css_dev->dev_addr->ssid = 0;
+ css_dev->dev_addr->devno = 82;
return def;
}
--
2.47.0