Replace cssid, ssid and devno elements with virCCWDeviceAddress. Reviewed-by: Marc Hartmayer <mhartmay@xxxxxxxxxxxxx> Signed-off-by: Boris Fiuczynski <fiuczy@xxxxxxxxxxxxx> --- 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