1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-03-20 06:50:22 +03:00

nodedev: refactor CCW device address

Replace cssid, ssid and devno elements with virCCWDeviceAddress.

Reviewed-by: Marc Hartmayer <mhartmay@linux.ibm.com>
Signed-off-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
Boris Fiuczynski 2025-02-04 18:11:37 +01:00 committed by Michal Privoznik
parent 04de9ad285
commit 7ad25b4665
5 changed files with 19 additions and 28 deletions

View File

@ -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:

View File

@ -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;

View File

@ -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);

View File

@ -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;
}

View File

@ -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;
}