提交 9f95552d 编写于 作者: M Michal Privoznik

qemu: De-duplicate some path definitions

There are some paths (e.g. /dev/vfio/vfio or /dev/mapper/control)
which are defined in qemu_domain.c and then in qemu_cgroup.c
again. This is suboptimal. Let's move paths into qemu_domain.h and
drop duplicate definitions.
Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
Reviewed-by: NAndrea Bolognani <abologna@redhat.com>
上级 0ff84542
...@@ -113,8 +113,6 @@ qemuSetupImagePathCgroup(virDomainObjPtr vm, ...@@ -113,8 +113,6 @@ qemuSetupImagePathCgroup(virDomainObjPtr vm,
} }
#define DEVICE_MAPPER_CONTROL_PATH "/dev/mapper/control"
static int static int
qemuSetupImageCgroupInternal(virDomainObjPtr vm, qemuSetupImageCgroupInternal(virDomainObjPtr vm,
virStorageSourcePtr src, virStorageSourcePtr src,
...@@ -127,8 +125,8 @@ qemuSetupImageCgroupInternal(virDomainObjPtr vm, ...@@ -127,8 +125,8 @@ qemuSetupImageCgroupInternal(virDomainObjPtr vm,
} }
if (virStoragePRDefIsManaged(src->pr) && if (virStoragePRDefIsManaged(src->pr) &&
virFileExists(DEVICE_MAPPER_CONTROL_PATH) && virFileExists(QEMU_DEVICE_MAPPER_CONTROL_PATH) &&
qemuSetupImagePathCgroup(vm, DEVICE_MAPPER_CONTROL_PATH, false) < 0) qemuSetupImagePathCgroup(vm, QEMU_DEVICE_MAPPER_CONTROL_PATH, false) < 0)
return -1; return -1;
return qemuSetupImagePathCgroup(vm, src->path, src->readonly || forceReadonly); return qemuSetupImagePathCgroup(vm, src->path, src->readonly || forceReadonly);
...@@ -162,7 +160,7 @@ qemuTeardownImageCgroup(virDomainObjPtr vm, ...@@ -162,7 +160,7 @@ qemuTeardownImageCgroup(virDomainObjPtr vm,
return 0; return 0;
} }
if (virFileExists(DEVICE_MAPPER_CONTROL_PATH)) { if (virFileExists(QEMU_DEVICE_MAPPER_CONTROL_PATH)) {
for (i = 0; i < vm->def->ndisks; i++) { for (i = 0; i < vm->def->ndisks; i++) {
virStorageSourcePtr diskSrc = vm->def->disks[i]->src; virStorageSourcePtr diskSrc = vm->def->disks[i]->src;
...@@ -176,9 +174,10 @@ qemuTeardownImageCgroup(virDomainObjPtr vm, ...@@ -176,9 +174,10 @@ qemuTeardownImageCgroup(virDomainObjPtr vm,
if (i == vm->def->ndisks) { if (i == vm->def->ndisks) {
VIR_DEBUG("Disabling device mapper control"); VIR_DEBUG("Disabling device mapper control");
ret = virCgroupDenyDevicePath(priv->cgroup, ret = virCgroupDenyDevicePath(priv->cgroup,
DEVICE_MAPPER_CONTROL_PATH, perms, true); QEMU_DEVICE_MAPPER_CONTROL_PATH,
perms, true);
virDomainAuditCgroupPath(vm, priv->cgroup, "deny", virDomainAuditCgroupPath(vm, priv->cgroup, "deny",
DEVICE_MAPPER_CONTROL_PATH, QEMU_DEVICE_MAPPER_CONTROL_PATH,
virCgroupGetDevicePermsString(perms), ret); virCgroupGetDevicePermsString(perms), ret);
if (ret < 0) if (ret < 0)
return ret; return ret;
......
...@@ -117,14 +117,6 @@ VIR_ENUM_IMPL(qemuDomainNamespace, ...@@ -117,14 +117,6 @@ VIR_ENUM_IMPL(qemuDomainNamespace,
"mount", "mount",
); );
#define PROC_MOUNTS "/proc/mounts"
#define DEVPREFIX "/dev/"
#define DEV_VFIO "/dev/vfio/vfio"
#define DEVICE_MAPPER_CONTROL_PATH "/dev/mapper/control"
#define DEV_SEV "/dev/sev"
struct _qemuDomainLogContext { struct _qemuDomainLogContext {
virObject parent; virObject parent;
...@@ -11882,7 +11874,7 @@ qemuDomainGetHostdevPath(virDomainDefPtr def, ...@@ -11882,7 +11874,7 @@ qemuDomainGetHostdevPath(virDomainDefPtr def,
tmpPerms[0] = perm; tmpPerms[0] = perm;
if (includeVFIO) { if (includeVFIO) {
if (VIR_STRDUP(tmpPaths[1], DEV_VFIO) < 0) if (VIR_STRDUP(tmpPaths[1], QEMU_DEV_VFIO) < 0)
goto cleanup; goto cleanup;
tmpPerms[1] = VIR_CGROUP_DEVICE_RW; tmpPerms[1] = VIR_CGROUP_DEVICE_RW;
} }
...@@ -11929,7 +11921,7 @@ qemuDomainGetPreservedMountPath(virQEMUDriverConfigPtr cfg, ...@@ -11929,7 +11921,7 @@ qemuDomainGetPreservedMountPath(virQEMUDriverConfigPtr cfg,
{ {
char *path = NULL; char *path = NULL;
char *tmp; char *tmp;
const char *suffix = mountpoint + strlen(DEVPREFIX); const char *suffix = mountpoint + strlen(QEMU_DEVPREFIX);
char *domname = virDomainDefGetShortName(vm->def); char *domname = virDomainDefGetShortName(vm->def);
size_t off; size_t off;
...@@ -11984,7 +11976,7 @@ qemuDomainGetPreservedMounts(virQEMUDriverConfigPtr cfg, ...@@ -11984,7 +11976,7 @@ qemuDomainGetPreservedMounts(virQEMUDriverConfigPtr cfg,
char **paths = NULL, **mounts = NULL; char **paths = NULL, **mounts = NULL;
size_t i, j, nmounts; size_t i, j, nmounts;
if (virFileGetMountSubtree(PROC_MOUNTS, "/dev", if (virFileGetMountSubtree(QEMU_PROC_MOUNTS, "/dev",
&mounts, &nmounts) < 0) &mounts, &nmounts) < 0)
goto error; goto error;
...@@ -12109,7 +12101,7 @@ qemuDomainCreateDeviceRecursive(const char *device, ...@@ -12109,7 +12101,7 @@ qemuDomainCreateDeviceRecursive(const char *device,
* Otherwise we might get fooled with `/dev/../var/my_image'. * Otherwise we might get fooled with `/dev/../var/my_image'.
* For now, lets hope callers play nice. * For now, lets hope callers play nice.
*/ */
if (STRPREFIX(device, DEVPREFIX)) { if (STRPREFIX(device, QEMU_DEVPREFIX)) {
size_t i; size_t i;
for (i = 0; i < data->ndevMountsPath; i++) { for (i = 0; i < data->ndevMountsPath; i++) {
...@@ -12123,7 +12115,7 @@ qemuDomainCreateDeviceRecursive(const char *device, ...@@ -12123,7 +12115,7 @@ qemuDomainCreateDeviceRecursive(const char *device,
/* Okay, @device is in /dev but not in any mount point under /dev. /* Okay, @device is in /dev but not in any mount point under /dev.
* Create it. */ * Create it. */
if (virAsprintf(&devicePath, "%s/%s", if (virAsprintf(&devicePath, "%s/%s",
data->path, device + strlen(DEVPREFIX)) < 0) data->path, device + strlen(QEMU_DEVPREFIX)) < 0)
goto cleanup; goto cleanup;
if (virFileMakeParentPath(devicePath) < 0) { if (virFileMakeParentPath(devicePath) < 0) {
...@@ -12385,7 +12377,7 @@ qemuDomainSetupDisk(virQEMUDriverConfigPtr cfg ATTRIBUTE_UNUSED, ...@@ -12385,7 +12377,7 @@ qemuDomainSetupDisk(virQEMUDriverConfigPtr cfg ATTRIBUTE_UNUSED,
/* qemu-pr-helper might require access to /dev/mapper/control. */ /* qemu-pr-helper might require access to /dev/mapper/control. */
if (disk->src->pr && if (disk->src->pr &&
qemuDomainCreateDevice(DEVICE_MAPPER_CONTROL_PATH, data, true) < 0) qemuDomainCreateDevice(QEMU_DEVICE_MAPPER_CONTROL_PATH, data, true) < 0)
goto cleanup; goto cleanup;
ret = 0; ret = 0;
...@@ -12717,7 +12709,7 @@ qemuDomainSetupLaunchSecurity(virQEMUDriverConfigPtr cfg ATTRIBUTE_UNUSED, ...@@ -12717,7 +12709,7 @@ qemuDomainSetupLaunchSecurity(virQEMUDriverConfigPtr cfg ATTRIBUTE_UNUSED,
VIR_DEBUG("Setting up launch security"); VIR_DEBUG("Setting up launch security");
if (qemuDomainCreateDevice(DEV_SEV, data, false) < 0) if (qemuDomainCreateDevice(QEMU_DEV_SEV, data, false) < 0)
return -1; return -1;
VIR_DEBUG("Set up launch security"); VIR_DEBUG("Set up launch security");
...@@ -13132,7 +13124,7 @@ qemuDomainAttachDeviceMknodRecursive(virQEMUDriverPtr driver, ...@@ -13132,7 +13124,7 @@ qemuDomainAttachDeviceMknodRecursive(virQEMUDriverPtr driver,
isReg = S_ISREG(data.sb.st_mode) || S_ISFIFO(data.sb.st_mode) || S_ISSOCK(data.sb.st_mode); isReg = S_ISREG(data.sb.st_mode) || S_ISFIFO(data.sb.st_mode) || S_ISSOCK(data.sb.st_mode);
isDir = S_ISDIR(data.sb.st_mode); isDir = S_ISDIR(data.sb.st_mode);
if ((isReg || isDir) && STRPREFIX(file, DEVPREFIX)) { if ((isReg || isDir) && STRPREFIX(file, QEMU_DEVPREFIX)) {
cfg = virQEMUDriverGetConfig(driver); cfg = virQEMUDriverGetConfig(driver);
if (!(target = qemuDomainGetPreservedMountPath(cfg, vm, file))) if (!(target = qemuDomainGetPreservedMountPath(cfg, vm, file)))
goto cleanup; goto cleanup;
...@@ -13188,7 +13180,7 @@ qemuDomainAttachDeviceMknodRecursive(virQEMUDriverPtr driver, ...@@ -13188,7 +13180,7 @@ qemuDomainAttachDeviceMknodRecursive(virQEMUDriverPtr driver,
} }
# endif # endif
if (STRPREFIX(file, DEVPREFIX)) { if (STRPREFIX(file, QEMU_DEVPREFIX)) {
size_t i; size_t i;
for (i = 0; i < ndevMountsPath; i++) { for (i = 0; i < ndevMountsPath; i++) {
...@@ -13297,7 +13289,7 @@ qemuDomainDetachDeviceUnlink(virQEMUDriverPtr driver ATTRIBUTE_UNUSED, ...@@ -13297,7 +13289,7 @@ qemuDomainDetachDeviceUnlink(virQEMUDriverPtr driver ATTRIBUTE_UNUSED,
int ret = -1; int ret = -1;
size_t i; size_t i;
if (STRPREFIX(file, DEVPREFIX)) { if (STRPREFIX(file, QEMU_DEVPREFIX)) {
for (i = 0; i < ndevMountsPath; i++) { for (i = 0; i < ndevMountsPath; i++) {
if (STREQ(devMountsPath[i], "/dev")) if (STREQ(devMountsPath[i], "/dev"))
continue; continue;
...@@ -13439,7 +13431,7 @@ qemuDomainNamespaceSetupDisk(virDomainObjPtr vm, ...@@ -13439,7 +13431,7 @@ qemuDomainNamespaceSetupDisk(virDomainObjPtr vm,
/* qemu-pr-helper might require access to /dev/mapper/control. */ /* qemu-pr-helper might require access to /dev/mapper/control. */
if (src->pr && if (src->pr &&
(VIR_STRDUP(dmPath, DEVICE_MAPPER_CONTROL_PATH) < 0 || (VIR_STRDUP(dmPath, QEMU_DEVICE_MAPPER_CONTROL_PATH) < 0 ||
VIR_APPEND_ELEMENT_COPY(paths, npaths, dmPath) < 0)) VIR_APPEND_ELEMENT_COPY(paths, npaths, dmPath) < 0))
goto cleanup; goto cleanup;
......
...@@ -223,6 +223,13 @@ struct _qemuDomainUnpluggingDevice { ...@@ -223,6 +223,13 @@ struct _qemuDomainUnpluggingDevice {
}; };
#define QEMU_PROC_MOUNTS "/proc/mounts"
#define QEMU_DEVPREFIX "/dev/"
#define QEMU_DEV_VFIO "/dev/vfio/vfio"
#define QEMU_DEV_SEV "/dev/sev"
#define QEMU_DEVICE_MAPPER_CONTROL_PATH "/dev/mapper/control"
typedef enum { typedef enum {
QEMU_DOMAIN_NS_MOUNT = 0, QEMU_DOMAIN_NS_MOUNT = 0,
QEMU_DOMAIN_NS_LAST QEMU_DOMAIN_NS_LAST
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include <sys/ioctl.h> #include <sys/ioctl.h>
#include "qemu_hostdev.h" #include "qemu_hostdev.h"
#include "qemu_domain.h"
#include "virlog.h" #include "virlog.h"
#include "virerror.h" #include "virerror.h"
#include "viralloc.h" #include "viralloc.h"
...@@ -125,7 +126,7 @@ qemuHostdevHostSupportsPassthroughVFIO(void) ...@@ -125,7 +126,7 @@ qemuHostdevHostSupportsPassthroughVFIO(void)
return false; return false;
/* condition 2 - /dev/vfio/vfio exists */ /* condition 2 - /dev/vfio/vfio exists */
if (!virFileExists("/dev/vfio/vfio")) if (!virFileExists(QEMU_DEV_VFIO))
return false; return false;
return true; return true;
...@@ -317,7 +318,7 @@ qemuHostdevPrepareMediatedDevices(virQEMUDriverPtr driver, ...@@ -317,7 +318,7 @@ qemuHostdevPrepareMediatedDevices(virQEMUDriverPtr driver,
/* Checking for VFIO only is fine with mdev, as IOMMU isolation is achieved /* Checking for VFIO only is fine with mdev, as IOMMU isolation is achieved
* by the physical parent device. * by the physical parent device.
*/ */
supportsVFIO = virFileExists("/dev/vfio/vfio"); supportsVFIO = virFileExists(QEMU_DEV_VFIO);
for (i = 0; i < nhostdevs; i++) { for (i = 0; i < nhostdevs; i++) {
if (virHostdevIsMdevDevice(hostdevs[i])) { if (virHostdevIsMdevDevice(hostdevs[i])) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册