|
|
3e5111 |
From 74e4d42a25e8e8823ce4e7c3544b8f1944cdb471 Mon Sep 17 00:00:00 2001
|
|
|
3e5111 |
Message-Id: <74e4d42a25e8e8823ce4e7c3544b8f1944cdb471@dist-git>
|
|
|
3e5111 |
From: Erik Skultety <eskultet@redhat.com>
|
|
|
3e5111 |
Date: Thu, 18 May 2017 14:02:52 +0200
|
|
|
3e5111 |
Subject: [PATCH] nodedev: Introduce new mdev_types and mdev nodedev
|
|
|
3e5111 |
capabilities
|
|
|
3e5111 |
|
|
|
3e5111 |
The reason for introducing two capabilities, one for the device itself
|
|
|
3e5111 |
(cap 'mdev') and one for the parent device listing the available types
|
|
|
3e5111 |
('mdev_types'), is that we should be able to do
|
|
|
3e5111 |
'virsh nodedev-list --cap' not only for existing mdev devices but also
|
|
|
3e5111 |
for devices that support creation of mdev devices, since one day libvirt
|
|
|
3e5111 |
might be actually able to create the mdev devices in an automated way
|
|
|
3e5111 |
(just like we do for NPIV/vHBA).
|
|
|
3e5111 |
|
|
|
3e5111 |
https://bugzilla.redhat.com/show_bug.cgi?id=1452072
|
|
|
3e5111 |
|
|
|
3e5111 |
Signed-off-by: Erik Skultety <eskultet@redhat.com>
|
|
|
3e5111 |
(cherry picked from commit 4385df97fed24279fa8595a1a49c9f9b3eba5be1)
|
|
|
3e5111 |
Signed-off-by: Erik Skultety <eskultet@redhat.com>
|
|
|
3e5111 |
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
|
|
3e5111 |
---
|
|
|
3e5111 |
include/libvirt/libvirt-nodedev.h | 2 ++
|
|
|
3e5111 |
src/conf/node_device_conf.c | 10 +++++++++-
|
|
|
3e5111 |
src/conf/node_device_conf.h | 6 +++++-
|
|
|
3e5111 |
src/conf/virnodedeviceobj.c | 4 +++-
|
|
|
3e5111 |
src/libvirt-nodedev.c | 2 ++
|
|
|
3e5111 |
src/node_device/node_device_driver.c | 2 ++
|
|
|
3e5111 |
src/node_device/node_device_udev.c | 3 +++
|
|
|
3e5111 |
tools/virsh-nodedev.c | 6 ++++++
|
|
|
3e5111 |
8 files changed, 32 insertions(+), 3 deletions(-)
|
|
|
3e5111 |
|
|
|
3e5111 |
diff --git a/include/libvirt/libvirt-nodedev.h b/include/libvirt/libvirt-nodedev.h
|
|
|
3e5111 |
index 85003903d..1e3043787 100644
|
|
|
3e5111 |
--- a/include/libvirt/libvirt-nodedev.h
|
|
|
3e5111 |
+++ b/include/libvirt/libvirt-nodedev.h
|
|
|
3e5111 |
@@ -79,6 +79,8 @@ typedef enum {
|
|
|
3e5111 |
VIR_CONNECT_LIST_NODE_DEVICES_CAP_VPORTS = 1 << 10, /* Capable of vport */
|
|
|
3e5111 |
VIR_CONNECT_LIST_NODE_DEVICES_CAP_SCSI_GENERIC = 1 << 11, /* Capable of scsi_generic */
|
|
|
3e5111 |
VIR_CONNECT_LIST_NODE_DEVICES_CAP_DRM = 1 << 12, /* DRM device */
|
|
|
3e5111 |
+ VIR_CONNECT_LIST_NODE_DEVICES_CAP_MDEV_TYPES = 1 << 13, /* Capable of mediated devices */
|
|
|
3e5111 |
+ VIR_CONNECT_LIST_NODE_DEVICES_CAP_MDEV = 1 << 14, /* Mediated device */
|
|
|
3e5111 |
} virConnectListAllNodeDeviceFlags;
|
|
|
3e5111 |
|
|
|
3e5111 |
int virConnectListAllNodeDevices (virConnectPtr conn,
|
|
|
3e5111 |
diff --git a/src/conf/node_device_conf.c b/src/conf/node_device_conf.c
|
|
|
3e5111 |
index 56a26b578..90a087a37 100644
|
|
|
3e5111 |
--- a/src/conf/node_device_conf.c
|
|
|
3e5111 |
+++ b/src/conf/node_device_conf.c
|
|
|
3e5111 |
@@ -60,7 +60,9 @@ VIR_ENUM_IMPL(virNodeDevCap, VIR_NODE_DEV_CAP_LAST,
|
|
|
3e5111 |
"fc_host",
|
|
|
3e5111 |
"vports",
|
|
|
3e5111 |
"scsi_generic",
|
|
|
3e5111 |
- "drm")
|
|
|
3e5111 |
+ "drm",
|
|
|
3e5111 |
+ "mdev_types",
|
|
|
3e5111 |
+ "mdev")
|
|
|
3e5111 |
|
|
|
3e5111 |
VIR_ENUM_IMPL(virNodeDevNetCap, VIR_NODE_DEV_CAP_NET_LAST,
|
|
|
3e5111 |
"80203",
|
|
|
3e5111 |
@@ -540,6 +542,8 @@ virNodeDeviceDefFormat(const virNodeDeviceDef *def)
|
|
|
3e5111 |
case VIR_NODE_DEV_CAP_DRM:
|
|
|
3e5111 |
virBufferEscapeString(&buf, "<type>%s</type>\n", virNodeDevDRMTypeToString(data->drm.type));
|
|
|
3e5111 |
break;
|
|
|
3e5111 |
+ case VIR_NODE_DEV_CAP_MDEV:
|
|
|
3e5111 |
+ case VIR_NODE_DEV_CAP_MDEV_TYPES:
|
|
|
3e5111 |
case VIR_NODE_DEV_CAP_FC_HOST:
|
|
|
3e5111 |
case VIR_NODE_DEV_CAP_VPORTS:
|
|
|
3e5111 |
case VIR_NODE_DEV_CAP_LAST:
|
|
|
3e5111 |
@@ -1612,6 +1616,8 @@ virNodeDevCapsDefParseXML(xmlXPathContextPtr ctxt,
|
|
|
3e5111 |
case VIR_NODE_DEV_CAP_DRM:
|
|
|
3e5111 |
ret = virNodeDevCapDRMParseXML(ctxt, def, node, &caps->data.drm);
|
|
|
3e5111 |
break;
|
|
|
3e5111 |
+ case VIR_NODE_DEV_CAP_MDEV:
|
|
|
3e5111 |
+ case VIR_NODE_DEV_CAP_MDEV_TYPES:
|
|
|
3e5111 |
case VIR_NODE_DEV_CAP_FC_HOST:
|
|
|
3e5111 |
case VIR_NODE_DEV_CAP_VPORTS:
|
|
|
3e5111 |
case VIR_NODE_DEV_CAP_SCSI_GENERIC:
|
|
|
3e5111 |
@@ -1929,6 +1935,8 @@ virNodeDevCapsDefFree(virNodeDevCapsDefPtr caps)
|
|
|
3e5111 |
case VIR_NODE_DEV_CAP_SCSI_GENERIC:
|
|
|
3e5111 |
VIR_FREE(data->sg.path);
|
|
|
3e5111 |
break;
|
|
|
3e5111 |
+ case VIR_NODE_DEV_CAP_MDEV:
|
|
|
3e5111 |
+ case VIR_NODE_DEV_CAP_MDEV_TYPES:
|
|
|
3e5111 |
case VIR_NODE_DEV_CAP_DRM:
|
|
|
3e5111 |
case VIR_NODE_DEV_CAP_FC_HOST:
|
|
|
3e5111 |
case VIR_NODE_DEV_CAP_VPORTS:
|
|
|
3e5111 |
diff --git a/src/conf/node_device_conf.h b/src/conf/node_device_conf.h
|
|
|
3e5111 |
index a5d5cdd2a..e168f2e27 100644
|
|
|
3e5111 |
--- a/src/conf/node_device_conf.h
|
|
|
3e5111 |
+++ b/src/conf/node_device_conf.h
|
|
|
3e5111 |
@@ -64,6 +64,8 @@ typedef enum {
|
|
|
3e5111 |
VIR_NODE_DEV_CAP_VPORTS, /* HBA which is capable of vports */
|
|
|
3e5111 |
VIR_NODE_DEV_CAP_SCSI_GENERIC, /* SCSI generic device */
|
|
|
3e5111 |
VIR_NODE_DEV_CAP_DRM, /* DRM device */
|
|
|
3e5111 |
+ VIR_NODE_DEV_CAP_MDEV_TYPES, /* Device capable of mediated devices */
|
|
|
3e5111 |
+ VIR_NODE_DEV_CAP_MDEV, /* Mediated device */
|
|
|
3e5111 |
|
|
|
3e5111 |
VIR_NODE_DEV_CAP_LAST
|
|
|
3e5111 |
} virNodeDevCapType;
|
|
|
3e5111 |
@@ -351,7 +353,9 @@ virNodeDevCapsDefFree(virNodeDevCapsDefPtr caps);
|
|
|
3e5111 |
VIR_CONNECT_LIST_NODE_DEVICES_CAP_FC_HOST | \
|
|
|
3e5111 |
VIR_CONNECT_LIST_NODE_DEVICES_CAP_VPORTS | \
|
|
|
3e5111 |
VIR_CONNECT_LIST_NODE_DEVICES_CAP_SCSI_GENERIC | \
|
|
|
3e5111 |
- VIR_CONNECT_LIST_NODE_DEVICES_CAP_DRM)
|
|
|
3e5111 |
+ VIR_CONNECT_LIST_NODE_DEVICES_CAP_DRM | \
|
|
|
3e5111 |
+ VIR_CONNECT_LIST_NODE_DEVICES_CAP_MDEV_TYPES | \
|
|
|
3e5111 |
+ VIR_CONNECT_LIST_NODE_DEVICES_CAP_MDEV)
|
|
|
3e5111 |
|
|
|
3e5111 |
char *
|
|
|
3e5111 |
virNodeDeviceGetParentName(virConnectPtr conn,
|
|
|
3e5111 |
diff --git a/src/conf/virnodedeviceobj.c b/src/conf/virnodedeviceobj.c
|
|
|
3e5111 |
index 3fe3ae5fe..21d5d3f75 100644
|
|
|
3e5111 |
--- a/src/conf/virnodedeviceobj.c
|
|
|
3e5111 |
+++ b/src/conf/virnodedeviceobj.c
|
|
|
3e5111 |
@@ -494,7 +494,9 @@ virNodeDeviceMatch(virNodeDeviceObjPtr devobj,
|
|
|
3e5111 |
MATCH(FC_HOST) ||
|
|
|
3e5111 |
MATCH(VPORTS) ||
|
|
|
3e5111 |
MATCH(SCSI_GENERIC) ||
|
|
|
3e5111 |
- MATCH(DRM)))
|
|
|
3e5111 |
+ MATCH(DRM) ||
|
|
|
3e5111 |
+ MATCH(MDEV_TYPES) ||
|
|
|
3e5111 |
+ MATCH(MDEV)))
|
|
|
3e5111 |
return false;
|
|
|
3e5111 |
}
|
|
|
3e5111 |
|
|
|
3e5111 |
diff --git a/src/libvirt-nodedev.c b/src/libvirt-nodedev.c
|
|
|
3e5111 |
index 83376b0d9..44e2b4efd 100644
|
|
|
3e5111 |
--- a/src/libvirt-nodedev.c
|
|
|
3e5111 |
+++ b/src/libvirt-nodedev.c
|
|
|
3e5111 |
@@ -98,6 +98,8 @@ virNodeNumOfDevices(virConnectPtr conn, const char *cap, unsigned int flags)
|
|
|
3e5111 |
* VIR_CONNECT_LIST_NODE_DEVICES_CAP_VPORTS
|
|
|
3e5111 |
* VIR_CONNECT_LIST_NODE_DEVICES_CAP_SCSI_GENERIC
|
|
|
3e5111 |
* VIR_CONNECT_LIST_NODE_DEVICES_CAP_DRM
|
|
|
3e5111 |
+ * VIR_CONNECT_LIST_NODE_DEVICES_CAP_MDEV_TYPES
|
|
|
3e5111 |
+ * VIR_CONNECT_LIST_NODE_DEVICES_CAP_MDEV
|
|
|
3e5111 |
*
|
|
|
3e5111 |
* Returns the number of node devices found or -1 and sets @devices to NULL in
|
|
|
3e5111 |
* case of error. On success, the array stored into @devices is guaranteed to
|
|
|
3e5111 |
diff --git a/src/node_device/node_device_driver.c b/src/node_device/node_device_driver.c
|
|
|
3e5111 |
index 99f7bc547..082160d98 100644
|
|
|
3e5111 |
--- a/src/node_device/node_device_driver.c
|
|
|
3e5111 |
+++ b/src/node_device/node_device_driver.c
|
|
|
3e5111 |
@@ -82,6 +82,8 @@ static int update_caps(virNodeDeviceObjPtr dev)
|
|
|
3e5111 |
case VIR_NODE_DEV_CAP_FC_HOST:
|
|
|
3e5111 |
case VIR_NODE_DEV_CAP_VPORTS:
|
|
|
3e5111 |
case VIR_NODE_DEV_CAP_SCSI_GENERIC:
|
|
|
3e5111 |
+ case VIR_NODE_DEV_CAP_MDEV_TYPES:
|
|
|
3e5111 |
+ case VIR_NODE_DEV_CAP_MDEV:
|
|
|
3e5111 |
case VIR_NODE_DEV_CAP_LAST:
|
|
|
3e5111 |
break;
|
|
|
3e5111 |
}
|
|
|
3e5111 |
diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c
|
|
|
3e5111 |
index 591da8db2..d4489e2a5 100644
|
|
|
3e5111 |
--- a/src/node_device/node_device_udev.c
|
|
|
3e5111 |
+++ b/src/node_device/node_device_udev.c
|
|
|
3e5111 |
@@ -43,6 +43,7 @@
|
|
|
3e5111 |
#include "virpci.h"
|
|
|
3e5111 |
#include "virstring.h"
|
|
|
3e5111 |
#include "virnetdev.h"
|
|
|
3e5111 |
+#include "virmdev.h"
|
|
|
3e5111 |
|
|
|
3e5111 |
#define VIR_FROM_THIS VIR_FROM_NODEDEV
|
|
|
3e5111 |
|
|
|
3e5111 |
@@ -1064,6 +1065,8 @@ static int udevGetDeviceDetails(struct udev_device *device,
|
|
|
3e5111 |
return udevProcessSCSIGeneric(device, def);
|
|
|
3e5111 |
case VIR_NODE_DEV_CAP_DRM:
|
|
|
3e5111 |
return udevProcessDRMDevice(device, def);
|
|
|
3e5111 |
+ case VIR_NODE_DEV_CAP_MDEV:
|
|
|
3e5111 |
+ case VIR_NODE_DEV_CAP_MDEV_TYPES:
|
|
|
3e5111 |
case VIR_NODE_DEV_CAP_SYSTEM:
|
|
|
3e5111 |
case VIR_NODE_DEV_CAP_FC_HOST:
|
|
|
3e5111 |
case VIR_NODE_DEV_CAP_VPORTS:
|
|
|
3e5111 |
diff --git a/tools/virsh-nodedev.c b/tools/virsh-nodedev.c
|
|
|
3e5111 |
index c69144021..ad96dda1f 100644
|
|
|
3e5111 |
--- a/tools/virsh-nodedev.c
|
|
|
3e5111 |
+++ b/tools/virsh-nodedev.c
|
|
|
3e5111 |
@@ -454,6 +454,12 @@ cmdNodeListDevices(vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED)
|
|
|
3e5111 |
case VIR_NODE_DEV_CAP_DRM:
|
|
|
3e5111 |
flags |= VIR_CONNECT_LIST_NODE_DEVICES_CAP_DRM;
|
|
|
3e5111 |
break;
|
|
|
3e5111 |
+ case VIR_NODE_DEV_CAP_MDEV_TYPES:
|
|
|
3e5111 |
+ flags |= VIR_CONNECT_LIST_NODE_DEVICES_CAP_MDEV_TYPES;
|
|
|
3e5111 |
+ break;
|
|
|
3e5111 |
+ case VIR_NODE_DEV_CAP_MDEV:
|
|
|
3e5111 |
+ flags |= VIR_CONNECT_LIST_NODE_DEVICES_CAP_MDEV;
|
|
|
3e5111 |
+ break;
|
|
|
3e5111 |
case VIR_NODE_DEV_CAP_LAST:
|
|
|
3e5111 |
break;
|
|
|
3e5111 |
}
|
|
|
3e5111 |
--
|
|
|
3e5111 |
2.13.0
|
|
|
3e5111 |
|