1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2024-12-28 11:21:44 +03:00

qemu: implement support for Fibre Channel VMID

Based on kernel commit messages the interface is

    /sys/class/fc/fc_udev_device/appid_store

where we need to write the following string "$INODE:$APPID".

$INODE is the VM root cgroup inode in hexadecimal and $APPID is user
provided string that will be attached to each FC frame for the VM
within the cgroup identified by inode and has limit 128 bytes.

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
This commit is contained in:
Pavel Hrdina 2021-08-02 20:26:57 +02:00
parent 38b5f4faab
commit 6cbb1865d8

View File

@ -904,6 +904,34 @@ qemuSetupCpuCgroup(virDomainObj *vm)
}
static int
qemuSetupCgroupAppid(virDomainObj *vm)
{
qemuDomainObjPrivate *priv = vm->privateData;
int inode = -1;
const char *path = "/sys/class/fc/fc_udev_device/appid_store";
g_autofree char *appid = NULL;
virDomainResourceDef *resource = vm->def->resource;
if (!resource || !resource->appid)
return 0;
inode = virCgroupGetInode(priv->cgroup);
if (inode < 0)
return -1;
appid = g_strdup_printf("%X:%s", inode, resource->appid);
if (virFileWriteStr(path, appid, 0) < 0) {
virReportSystemError(errno,
_("Unable to write '%s' to '%s'"), appid, path);
return -1;
}
return 0;
}
static int
qemuInitCgroup(virDomainObj *vm,
size_t nnicindexes,
@ -1096,6 +1124,9 @@ qemuSetupCgroup(virDomainObj *vm,
if (qemuSetupCpusetCgroup(vm) < 0)
return -1;
if (qemuSetupCgroupAppid(vm) < 0)
return -1;
return 0;
}