This patch drops the capability matching redundancy by simply converting
the string input to our internal types which are then in turn used for
the actual capability matching.
Signed-off-by: Erik Skultety <eskultet@redhat.com>
---
src/conf/virnodedeviceobj.c | 50 +--------------------------------------------
1 file changed, 1 insertion(+), 49 deletions(-)
diff --git a/src/conf/virnodedeviceobj.c b/src/conf/virnodedeviceobj.c
index ccad59a4b..5360df805 100644
--- a/src/conf/virnodedeviceobj.c
+++ b/src/conf/virnodedeviceobj.c
@@ -128,55 +128,7 @@ static bool
virNodeDeviceObjHasCapStr(const virNodeDeviceObj *obj,
const char *cap)
{
- virNodeDevCapsDefPtr caps = obj->def->caps;
- const char *fc_host_cap =
- virNodeDevCapTypeToString(VIR_NODE_DEV_CAP_FC_HOST);
- const char *vports_cap =
- virNodeDevCapTypeToString(VIR_NODE_DEV_CAP_VPORTS);
- const char *mdev_types =
- virNodeDevCapTypeToString(VIR_NODE_DEV_CAP_MDEV_TYPES);
-
- while (caps) {
- if (STREQ(cap, virNodeDevCapTypeToString(caps->data.type))) {
- return true;
- } else {
- switch (caps->data.type) {
- case VIR_NODE_DEV_CAP_PCI_DEV:
- if ((STREQ(cap, mdev_types)) &&
- (caps->data.pci_dev.flags & VIR_NODE_DEV_CAP_FLAG_PCI_MDEV))
- return true;
- break;
-
- case VIR_NODE_DEV_CAP_SCSI_HOST:
- if ((STREQ(cap, fc_host_cap) &&
- (caps->data.scsi_host.flags & VIR_NODE_DEV_CAP_FLAG_HBA_FC_HOST)) ||
- (STREQ(cap, vports_cap) &&
- (caps->data.scsi_host.flags & VIR_NODE_DEV_CAP_FLAG_HBA_VPORT_OPS)))
- return true;
- break;
-
- case VIR_NODE_DEV_CAP_SYSTEM:
- case VIR_NODE_DEV_CAP_USB_DEV:
- case VIR_NODE_DEV_CAP_USB_INTERFACE:
- case VIR_NODE_DEV_CAP_NET:
- case VIR_NODE_DEV_CAP_SCSI_TARGET:
- case VIR_NODE_DEV_CAP_SCSI:
- case VIR_NODE_DEV_CAP_STORAGE:
- case VIR_NODE_DEV_CAP_FC_HOST:
- case VIR_NODE_DEV_CAP_VPORTS:
- case VIR_NODE_DEV_CAP_SCSI_GENERIC:
- case VIR_NODE_DEV_CAP_DRM:
- case VIR_NODE_DEV_CAP_MDEV_TYPES:
- case VIR_NODE_DEV_CAP_MDEV:
- case VIR_NODE_DEV_CAP_CCW_DEV:
- case VIR_NODE_DEV_CAP_LAST:
- break;
- }
- }
-
- caps = caps->next;
- }
- return false;
+ return virNodeDeviceObjHasCap(obj, virNodeDevCapTypeFromString(cap));
}
--
2.13.6
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
On 01/25/2018 10:23 AM, Erik Skultety wrote:
> This patch drops the capability matching redundancy by simply converting
> the string input to our internal types which are then in turn used for
> the actual capability matching.
>
> Signed-off-by: Erik Skultety <eskultet@redhat.com>
> ---
> src/conf/virnodedeviceobj.c | 50 +--------------------------------------------
> 1 file changed, 1 insertion(+), 49 deletions(-)
>
> diff --git a/src/conf/virnodedeviceobj.c b/src/conf/virnodedeviceobj.c
> index ccad59a4b..5360df805 100644
> --- a/src/conf/virnodedeviceobj.c
> +++ b/src/conf/virnodedeviceobj.c
> @@ -128,55 +128,7 @@ static bool
> virNodeDeviceObjHasCapStr(const virNodeDeviceObj *obj,
> const char *cap)
> {
> - virNodeDevCapsDefPtr caps = obj->def->caps;
> - const char *fc_host_cap =
> - virNodeDevCapTypeToString(VIR_NODE_DEV_CAP_FC_HOST);
> - const char *vports_cap =
> - virNodeDevCapTypeToString(VIR_NODE_DEV_CAP_VPORTS);
> - const char *mdev_types =
> - virNodeDevCapTypeToString(VIR_NODE_DEV_CAP_MDEV_TYPES);
> -
> - while (caps) {
> - if (STREQ(cap, virNodeDevCapTypeToString(caps->data.type))) {
> - return true;
> - } else {
> - switch (caps->data.type) {
> - case VIR_NODE_DEV_CAP_PCI_DEV:
> - if ((STREQ(cap, mdev_types)) &&
> - (caps->data.pci_dev.flags & VIR_NODE_DEV_CAP_FLAG_PCI_MDEV))
> - return true;
> - break;
> -
> - case VIR_NODE_DEV_CAP_SCSI_HOST:
> - if ((STREQ(cap, fc_host_cap) &&
> - (caps->data.scsi_host.flags & VIR_NODE_DEV_CAP_FLAG_HBA_FC_HOST)) ||
> - (STREQ(cap, vports_cap) &&
> - (caps->data.scsi_host.flags & VIR_NODE_DEV_CAP_FLAG_HBA_VPORT_OPS)))
> - return true;
> - break;
> -
> - case VIR_NODE_DEV_CAP_SYSTEM:
> - case VIR_NODE_DEV_CAP_USB_DEV:
> - case VIR_NODE_DEV_CAP_USB_INTERFACE:
> - case VIR_NODE_DEV_CAP_NET:
> - case VIR_NODE_DEV_CAP_SCSI_TARGET:
> - case VIR_NODE_DEV_CAP_SCSI:
> - case VIR_NODE_DEV_CAP_STORAGE:
> - case VIR_NODE_DEV_CAP_FC_HOST:
> - case VIR_NODE_DEV_CAP_VPORTS:
> - case VIR_NODE_DEV_CAP_SCSI_GENERIC:
> - case VIR_NODE_DEV_CAP_DRM:
> - case VIR_NODE_DEV_CAP_MDEV_TYPES:
> - case VIR_NODE_DEV_CAP_MDEV:
> - case VIR_NODE_DEV_CAP_CCW_DEV:
> - case VIR_NODE_DEV_CAP_LAST:
> - break;
> - }
> - }
> -
> - caps = caps->next;
> - }
> - return false;
> + return virNodeDeviceObjHasCap(obj, virNodeDevCapTypeFromString(cap));
I wonder if we should check for the TypeFromString() conversion rather
than pass it to the other function directly.
Michal
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
On Fri, Jan 26, 2018 at 12:40:34PM +0100, Michal Privoznik wrote:
> On 01/25/2018 10:23 AM, Erik Skultety wrote:
> > This patch drops the capability matching redundancy by simply converting
> > the string input to our internal types which are then in turn used for
> > the actual capability matching.
> >
> > Signed-off-by: Erik Skultety <eskultet@redhat.com>
> > ---
> > src/conf/virnodedeviceobj.c | 50 +--------------------------------------------
> > 1 file changed, 1 insertion(+), 49 deletions(-)
> >
> > diff --git a/src/conf/virnodedeviceobj.c b/src/conf/virnodedeviceobj.c
> > index ccad59a4b..5360df805 100644
> > --- a/src/conf/virnodedeviceobj.c
> > +++ b/src/conf/virnodedeviceobj.c
> > @@ -128,55 +128,7 @@ static bool
> > virNodeDeviceObjHasCapStr(const virNodeDeviceObj *obj,
> > const char *cap)
> > {
> > - virNodeDevCapsDefPtr caps = obj->def->caps;
> > - const char *fc_host_cap =
> > - virNodeDevCapTypeToString(VIR_NODE_DEV_CAP_FC_HOST);
> > - const char *vports_cap =
> > - virNodeDevCapTypeToString(VIR_NODE_DEV_CAP_VPORTS);
> > - const char *mdev_types =
> > - virNodeDevCapTypeToString(VIR_NODE_DEV_CAP_MDEV_TYPES);
> > -
> > - while (caps) {
> > - if (STREQ(cap, virNodeDevCapTypeToString(caps->data.type))) {
> > - return true;
> > - } else {
> > - switch (caps->data.type) {
> > - case VIR_NODE_DEV_CAP_PCI_DEV:
> > - if ((STREQ(cap, mdev_types)) &&
> > - (caps->data.pci_dev.flags & VIR_NODE_DEV_CAP_FLAG_PCI_MDEV))
> > - return true;
> > - break;
> > -
> > - case VIR_NODE_DEV_CAP_SCSI_HOST:
> > - if ((STREQ(cap, fc_host_cap) &&
> > - (caps->data.scsi_host.flags & VIR_NODE_DEV_CAP_FLAG_HBA_FC_HOST)) ||
> > - (STREQ(cap, vports_cap) &&
> > - (caps->data.scsi_host.flags & VIR_NODE_DEV_CAP_FLAG_HBA_VPORT_OPS)))
> > - return true;
> > - break;
> > -
> > - case VIR_NODE_DEV_CAP_SYSTEM:
> > - case VIR_NODE_DEV_CAP_USB_DEV:
> > - case VIR_NODE_DEV_CAP_USB_INTERFACE:
> > - case VIR_NODE_DEV_CAP_NET:
> > - case VIR_NODE_DEV_CAP_SCSI_TARGET:
> > - case VIR_NODE_DEV_CAP_SCSI:
> > - case VIR_NODE_DEV_CAP_STORAGE:
> > - case VIR_NODE_DEV_CAP_FC_HOST:
> > - case VIR_NODE_DEV_CAP_VPORTS:
> > - case VIR_NODE_DEV_CAP_SCSI_GENERIC:
> > - case VIR_NODE_DEV_CAP_DRM:
> > - case VIR_NODE_DEV_CAP_MDEV_TYPES:
> > - case VIR_NODE_DEV_CAP_MDEV:
> > - case VIR_NODE_DEV_CAP_CCW_DEV:
> > - case VIR_NODE_DEV_CAP_LAST:
> > - break;
> > - }
> > - }
> > -
> > - caps = caps->next;
> > - }
> > - return false;
> > + return virNodeDeviceObjHasCap(obj, virNodeDevCapTypeFromString(cap));
>
> I wonder if we should check for the TypeFromString() conversion rather
> than pass it to the other function directly.
Well, since the conversion function returns -1 on unknown types and none of our
device cap enum types can ever be equal to -1, since that would make it
non-deterministic, but I agree that by adding a check explicitly we can save a
few cycles, may I assume this to be an ACK with the following squashed in?
diff --git a/src/conf/virnodedeviceobj.c b/src/conf/virnodedeviceobj.c
index 2f37c4a05..ccea10793 100644
--- a/src/conf/virnodedeviceobj.c
+++ b/src/conf/virnodedeviceobj.c
@@ -124,7 +124,12 @@ static bool
virNodeDeviceObjHasCapStr(const virNodeDeviceObj *obj,
const char *cap)
{
- return virNodeDeviceObjHasCap(obj, virNodeDevCapTypeFromString(cap));
+ int type;
+
+ if ((type = virNodeDevCapTypeFromString(cap)) < 0)
+ return false;
+
+ return virNodeDeviceObjHasCap(obj, type);
}
Erik
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
On 01/29/2018 09:42 AM, Erik Skultety wrote:
> On Fri, Jan 26, 2018 at 12:40:34PM +0100, Michal Privoznik wrote:
>> On 01/25/2018 10:23 AM, Erik Skultety wrote:
>>> This patch drops the capability matching redundancy by simply converting
>>> the string input to our internal types which are then in turn used for
>>> the actual capability matching.
>>>
>>> Signed-off-by: Erik Skultety <eskultet@redhat.com>
>>> ---
>>> src/conf/virnodedeviceobj.c | 50 +--------------------------------------------
>>> 1 file changed, 1 insertion(+), 49 deletions(-)
>>>
>>> diff --git a/src/conf/virnodedeviceobj.c b/src/conf/virnodedeviceobj.c
>>> index ccad59a4b..5360df805 100644
>>> --- a/src/conf/virnodedeviceobj.c
>>> +++ b/src/conf/virnodedeviceobj.c
>>> @@ -128,55 +128,7 @@ static bool
>>> virNodeDeviceObjHasCapStr(const virNodeDeviceObj *obj,
>>> const char *cap)
>>> {
>>> - virNodeDevCapsDefPtr caps = obj->def->caps;
>>> - const char *fc_host_cap =
>>> - virNodeDevCapTypeToString(VIR_NODE_DEV_CAP_FC_HOST);
>>> - const char *vports_cap =
>>> - virNodeDevCapTypeToString(VIR_NODE_DEV_CAP_VPORTS);
>>> - const char *mdev_types =
>>> - virNodeDevCapTypeToString(VIR_NODE_DEV_CAP_MDEV_TYPES);
>>> -
>>> - while (caps) {
>>> - if (STREQ(cap, virNodeDevCapTypeToString(caps->data.type))) {
>>> - return true;
>>> - } else {
>>> - switch (caps->data.type) {
>>> - case VIR_NODE_DEV_CAP_PCI_DEV:
>>> - if ((STREQ(cap, mdev_types)) &&
>>> - (caps->data.pci_dev.flags & VIR_NODE_DEV_CAP_FLAG_PCI_MDEV))
>>> - return true;
>>> - break;
>>> -
>>> - case VIR_NODE_DEV_CAP_SCSI_HOST:
>>> - if ((STREQ(cap, fc_host_cap) &&
>>> - (caps->data.scsi_host.flags & VIR_NODE_DEV_CAP_FLAG_HBA_FC_HOST)) ||
>>> - (STREQ(cap, vports_cap) &&
>>> - (caps->data.scsi_host.flags & VIR_NODE_DEV_CAP_FLAG_HBA_VPORT_OPS)))
>>> - return true;
>>> - break;
>>> -
>>> - case VIR_NODE_DEV_CAP_SYSTEM:
>>> - case VIR_NODE_DEV_CAP_USB_DEV:
>>> - case VIR_NODE_DEV_CAP_USB_INTERFACE:
>>> - case VIR_NODE_DEV_CAP_NET:
>>> - case VIR_NODE_DEV_CAP_SCSI_TARGET:
>>> - case VIR_NODE_DEV_CAP_SCSI:
>>> - case VIR_NODE_DEV_CAP_STORAGE:
>>> - case VIR_NODE_DEV_CAP_FC_HOST:
>>> - case VIR_NODE_DEV_CAP_VPORTS:
>>> - case VIR_NODE_DEV_CAP_SCSI_GENERIC:
>>> - case VIR_NODE_DEV_CAP_DRM:
>>> - case VIR_NODE_DEV_CAP_MDEV_TYPES:
>>> - case VIR_NODE_DEV_CAP_MDEV:
>>> - case VIR_NODE_DEV_CAP_CCW_DEV:
>>> - case VIR_NODE_DEV_CAP_LAST:
>>> - break;
>>> - }
>>> - }
>>> -
>>> - caps = caps->next;
>>> - }
>>> - return false;
>>> + return virNodeDeviceObjHasCap(obj, virNodeDevCapTypeFromString(cap));
>>
>> I wonder if we should check for the TypeFromString() conversion rather
>> than pass it to the other function directly.
>
> Well, since the conversion function returns -1 on unknown types and none of our
> device cap enum types can ever be equal to -1, since that would make it
> non-deterministic, but I agree that by adding a check explicitly we can save a
> few cycles, may I assume this to be an ACK with the following squashed in?
>
> diff --git a/src/conf/virnodedeviceobj.c b/src/conf/virnodedeviceobj.c
> index 2f37c4a05..ccea10793 100644
> --- a/src/conf/virnodedeviceobj.c
> +++ b/src/conf/virnodedeviceobj.c
> @@ -124,7 +124,12 @@ static bool
> virNodeDeviceObjHasCapStr(const virNodeDeviceObj *obj,
> const char *cap)
> {
> - return virNodeDeviceObjHasCap(obj, virNodeDevCapTypeFromString(cap));
> + int type;
> +
> + if ((type = virNodeDevCapTypeFromString(cap)) < 0)
> + return false;
> +
> + return virNodeDeviceObjHasCap(obj, type);
> }
>
Yup, looks good to me.
Michal
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
© 2016 - 2026 Red Hat, Inc.