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);
}
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;
}
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);
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:
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);
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;
}
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;
}