@@ -609,7 +609,7 @@ void msix_unuse_all_vectors(PCIDevice *dev)
int msix_set_mask_notifier(PCIDevice *dev, unsigned vector, void *opaque)
{
- int r;
+ int r = 0;
if (vector >= dev->msix_entries_nr || !dev->msix_entry_used[vector])
return 0;
@@ -619,13 +619,15 @@ int msix_set_mask_notifier(PCIDevice *dev, unsigned vector, void *opaque)
/* Unmask the new notifier unless vector is masked. */
if (msix_is_masked(dev, vector)) {
- return 0;
+ goto out;
}
r = dev->msix_mask_notifier(dev, vector, opaque,
msix_is_masked(dev, vector));
if (r < 0) {
return r;
}
+
+out:
dev->msix_mask_notifier_opaque[vector] = opaque;
return r;
}
@@ -640,8 +642,8 @@ int msix_unset_mask_notifier(PCIDevice *dev, unsigned vector)
assert(dev->msix_mask_notifier_opaque[vector]);
/* Mask the old notifier unless it is already masked. */
- if (msix_is_masked(dev, vector)) {
- return 0;
+ if (!msix_is_masked(dev, vector)) {
+ goto out;
}
r = dev->msix_mask_notifier(dev, vector,
dev->msix_mask_notifier_opaque[vector],
@@ -649,6 +651,8 @@ int msix_unset_mask_notifier(PCIDevice *dev, unsigned vector)
if (r < 0) {
return r;
}
+
+out:
dev->msix_mask_notifier_opaque[vector] = NULL;
return r;
}