[libvirt] [PATCH] nodedev: Introduce new drm cap

After 7f1bdec5fa0a0cd25 our nodedev driver is capable of determining DRM devices (DRM stands for Direct Render Manager not Digital rights management). There is still one bit missing though: virConnectListAllNodeDevices() is capable of listing either all devices or just those with specified capability. Well, DRM capability is missing there. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- include/libvirt/libvirt-nodedev.h | 1 + src/conf/node_device_conf.c | 3 ++- src/conf/node_device_conf.h | 3 ++- src/libvirt-nodedev.c | 1 + tools/virsh-nodedev.c | 7 +++++-- tools/virsh.pod | 6 +++--- 6 files changed, 14 insertions(+), 7 deletions(-) diff --git a/include/libvirt/libvirt-nodedev.h b/include/libvirt/libvirt-nodedev.h index 4ff8b416a..85003903d 100644 --- a/include/libvirt/libvirt-nodedev.h +++ b/include/libvirt/libvirt-nodedev.h @@ -78,6 +78,7 @@ typedef enum { VIR_CONNECT_LIST_NODE_DEVICES_CAP_FC_HOST = 1 << 9, /* FC Host Bus Adapter */ VIR_CONNECT_LIST_NODE_DEVICES_CAP_VPORTS = 1 << 10, /* Capable of vport */ VIR_CONNECT_LIST_NODE_DEVICES_CAP_SCSI_GENERIC = 1 << 11, /* Capable of scsi_generic */ + VIR_CONNECT_LIST_NODE_DEVICES_CAP_DRM = 1 << 12, /* DRM device */ } virConnectListAllNodeDeviceFlags; int virConnectListAllNodeDevices (virConnectPtr conn, diff --git a/src/conf/node_device_conf.c b/src/conf/node_device_conf.c index f996db115..b3063d9ec 100644 --- a/src/conf/node_device_conf.c +++ b/src/conf/node_device_conf.c @@ -2224,7 +2224,8 @@ virNodeDeviceMatch(virNodeDeviceObjPtr devobj, MATCH(STORAGE) || MATCH(FC_HOST) || MATCH(VPORTS) || - MATCH(SCSI_GENERIC))) + MATCH(SCSI_GENERIC) || + MATCH(DRM))) return false; } diff --git a/src/conf/node_device_conf.h b/src/conf/node_device_conf.h index be7e0e003..40e930a28 100644 --- a/src/conf/node_device_conf.h +++ b/src/conf/node_device_conf.h @@ -340,7 +340,8 @@ void virNodeDeviceObjUnlock(virNodeDeviceObjPtr obj); VIR_CONNECT_LIST_NODE_DEVICES_CAP_STORAGE | \ VIR_CONNECT_LIST_NODE_DEVICES_CAP_FC_HOST | \ VIR_CONNECT_LIST_NODE_DEVICES_CAP_VPORTS | \ - VIR_CONNECT_LIST_NODE_DEVICES_CAP_SCSI_GENERIC) + VIR_CONNECT_LIST_NODE_DEVICES_CAP_SCSI_GENERIC | \ + VIR_CONNECT_LIST_NODE_DEVICES_CAP_DRM) typedef bool (*virNodeDeviceObjListFilter)(virConnectPtr conn, virNodeDeviceDefPtr def); diff --git a/src/libvirt-nodedev.c b/src/libvirt-nodedev.c index 6ea14b3e3..83376b0d9 100644 --- a/src/libvirt-nodedev.c +++ b/src/libvirt-nodedev.c @@ -97,6 +97,7 @@ virNodeNumOfDevices(virConnectPtr conn, const char *cap, unsigned int flags) * VIR_CONNECT_LIST_NODE_DEVICES_CAP_FC_HOST * VIR_CONNECT_LIST_NODE_DEVICES_CAP_VPORTS * VIR_CONNECT_LIST_NODE_DEVICES_CAP_SCSI_GENERIC + * VIR_CONNECT_LIST_NODE_DEVICES_CAP_DRM * * Returns the number of node devices found or -1 and sets @devices to NULL in * case of error. On success, the array stored into @devices is guaranteed to diff --git a/tools/virsh-nodedev.c b/tools/virsh-nodedev.c index 9ede96886..c69144021 100644 --- a/tools/virsh-nodedev.c +++ b/tools/virsh-nodedev.c @@ -414,7 +414,7 @@ cmdNodeListDevices(vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED) goto cleanup; } - switch (cap_type) { + switch ((virNodeDevCapType) cap_type) { case VIR_NODE_DEV_CAP_SYSTEM: flags |= VIR_CONNECT_LIST_NODE_DEVICES_CAP_SYSTEM; break; @@ -451,7 +451,10 @@ cmdNodeListDevices(vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED) case VIR_NODE_DEV_CAP_SCSI_GENERIC: flags |= VIR_CONNECT_LIST_NODE_DEVICES_CAP_SCSI_GENERIC; break; - default: + case VIR_NODE_DEV_CAP_DRM: + flags |= VIR_CONNECT_LIST_NODE_DEVICES_CAP_DRM; + break; + case VIR_NODE_DEV_CAP_LAST: break; } } diff --git a/tools/virsh.pod b/tools/virsh.pod index a47040984..90f4b5a1f 100644 --- a/tools/virsh.pod +++ b/tools/virsh.pod @@ -3072,9 +3072,9 @@ List all of the devices available on the node that are known by libvirt. I<cap> is used to filter the list by capability types, the types must be separated by comma, e.g. --cap pci,scsi, valid capability types include 'system', 'pci', 'usb_device', 'usb', 'net', 'scsi_host', 'scsi_target', -'scsi', 'storage', 'fc_host', 'vports', 'scsi_generic'. If I<--tree> is -used, the output is formatted in a tree representing parents of each node. -I<cap> and I<--tree> are mutually exclusive. +'scsi', 'storage', 'fc_host', 'vports', 'scsi_generic', 'drm'.If I<--tree> +is used, the output is formatted in a tree representing parents of each +node. I<cap> and I<--tree> are mutually exclusive. =item B<nodedev-reattach> I<nodedev> -- 2.11.0

On Fri, Feb 17, 2017 at 04:19:38PM +0100, Michal Privoznik wrote:
After 7f1bdec5fa0a0cd25 our nodedev driver is capable of determining DRM devices (DRM stands for Direct Render Manager not Digital rights management). There is still one bit missing though: virConnectListAllNodeDevices() is capable of listing either all devices or just those with specified capability. Well, DRM capability is missing there.
Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- include/libvirt/libvirt-nodedev.h | 1 + src/conf/node_device_conf.c | 3 ++- src/conf/node_device_conf.h | 3 ++- src/libvirt-nodedev.c | 1 + tools/virsh-nodedev.c | 7 +++++-- tools/virsh.pod | 6 +++--- 6 files changed, 14 insertions(+), 7 deletions(-)
ACK Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://entangle-photo.org -o- http://search.cpan.org/~danberr/ :|

Hi ----- Original Message -----
After 7f1bdec5fa0a0cd25 our nodedev driver is capable of determining DRM devices (DRM stands for Direct Render Manager not Digital rights management). There is still one bit missing though: virConnectListAllNodeDevices() is capable of listing either all devices or just those with specified capability. Well, DRM capability is missing there.
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
looks good, Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
--- include/libvirt/libvirt-nodedev.h | 1 + src/conf/node_device_conf.c | 3 ++- src/conf/node_device_conf.h | 3 ++- src/libvirt-nodedev.c | 1 + tools/virsh-nodedev.c | 7 +++++-- tools/virsh.pod | 6 +++--- 6 files changed, 14 insertions(+), 7 deletions(-)
diff --git a/include/libvirt/libvirt-nodedev.h b/include/libvirt/libvirt-nodedev.h index 4ff8b416a..85003903d 100644 --- a/include/libvirt/libvirt-nodedev.h +++ b/include/libvirt/libvirt-nodedev.h @@ -78,6 +78,7 @@ typedef enum { VIR_CONNECT_LIST_NODE_DEVICES_CAP_FC_HOST = 1 << 9, /* FC Host Bus Adapter */ VIR_CONNECT_LIST_NODE_DEVICES_CAP_VPORTS = 1 << 10, /* Capable of vport */ VIR_CONNECT_LIST_NODE_DEVICES_CAP_SCSI_GENERIC = 1 << 11, /* Capable of scsi_generic */ + VIR_CONNECT_LIST_NODE_DEVICES_CAP_DRM = 1 << 12, /* DRM device */ } virConnectListAllNodeDeviceFlags;
int virConnectListAllNodeDevices (virConnectPtr conn, diff --git a/src/conf/node_device_conf.c b/src/conf/node_device_conf.c index f996db115..b3063d9ec 100644 --- a/src/conf/node_device_conf.c +++ b/src/conf/node_device_conf.c @@ -2224,7 +2224,8 @@ virNodeDeviceMatch(virNodeDeviceObjPtr devobj, MATCH(STORAGE) || MATCH(FC_HOST) || MATCH(VPORTS) || - MATCH(SCSI_GENERIC))) + MATCH(SCSI_GENERIC) || + MATCH(DRM))) return false; }
diff --git a/src/conf/node_device_conf.h b/src/conf/node_device_conf.h index be7e0e003..40e930a28 100644 --- a/src/conf/node_device_conf.h +++ b/src/conf/node_device_conf.h @@ -340,7 +340,8 @@ void virNodeDeviceObjUnlock(virNodeDeviceObjPtr obj); VIR_CONNECT_LIST_NODE_DEVICES_CAP_STORAGE | \ VIR_CONNECT_LIST_NODE_DEVICES_CAP_FC_HOST | \ VIR_CONNECT_LIST_NODE_DEVICES_CAP_VPORTS | \ - VIR_CONNECT_LIST_NODE_DEVICES_CAP_SCSI_GENERIC) + VIR_CONNECT_LIST_NODE_DEVICES_CAP_SCSI_GENERIC | \ + VIR_CONNECT_LIST_NODE_DEVICES_CAP_DRM)
typedef bool (*virNodeDeviceObjListFilter)(virConnectPtr conn, virNodeDeviceDefPtr def); diff --git a/src/libvirt-nodedev.c b/src/libvirt-nodedev.c index 6ea14b3e3..83376b0d9 100644 --- a/src/libvirt-nodedev.c +++ b/src/libvirt-nodedev.c @@ -97,6 +97,7 @@ virNodeNumOfDevices(virConnectPtr conn, const char *cap, unsigned int flags) * VIR_CONNECT_LIST_NODE_DEVICES_CAP_FC_HOST * VIR_CONNECT_LIST_NODE_DEVICES_CAP_VPORTS * VIR_CONNECT_LIST_NODE_DEVICES_CAP_SCSI_GENERIC + * VIR_CONNECT_LIST_NODE_DEVICES_CAP_DRM * * Returns the number of node devices found or -1 and sets @devices to NULL in * case of error. On success, the array stored into @devices is guaranteed to diff --git a/tools/virsh-nodedev.c b/tools/virsh-nodedev.c index 9ede96886..c69144021 100644 --- a/tools/virsh-nodedev.c +++ b/tools/virsh-nodedev.c @@ -414,7 +414,7 @@ cmdNodeListDevices(vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED) goto cleanup; }
- switch (cap_type) { + switch ((virNodeDevCapType) cap_type) { case VIR_NODE_DEV_CAP_SYSTEM: flags |= VIR_CONNECT_LIST_NODE_DEVICES_CAP_SYSTEM; break; @@ -451,7 +451,10 @@ cmdNodeListDevices(vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED) case VIR_NODE_DEV_CAP_SCSI_GENERIC: flags |= VIR_CONNECT_LIST_NODE_DEVICES_CAP_SCSI_GENERIC; break; - default: + case VIR_NODE_DEV_CAP_DRM: + flags |= VIR_CONNECT_LIST_NODE_DEVICES_CAP_DRM; + break; + case VIR_NODE_DEV_CAP_LAST: break; } } diff --git a/tools/virsh.pod b/tools/virsh.pod index a47040984..90f4b5a1f 100644 --- a/tools/virsh.pod +++ b/tools/virsh.pod @@ -3072,9 +3072,9 @@ List all of the devices available on the node that are known by libvirt. I<cap> is used to filter the list by capability types, the types must be separated by comma, e.g. --cap pci,scsi, valid capability types include 'system', 'pci', 'usb_device', 'usb', 'net', 'scsi_host', 'scsi_target', -'scsi', 'storage', 'fc_host', 'vports', 'scsi_generic'. If I<--tree> is -used, the output is formatted in a tree representing parents of each node. -I<cap> and I<--tree> are mutually exclusive. +'scsi', 'storage', 'fc_host', 'vports', 'scsi_generic', 'drm'.If I<--tree> +is used, the output is formatted in a tree representing parents of each +node. I<cap> and I<--tree> are mutually exclusive.
=item B<nodedev-reattach> I<nodedev>
-- 2.11.0
participants (3)
-
Daniel P. Berrange
-
Marc-André Lureau
-
Michal Privoznik