@@ -610,7 +610,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,11 @@ int msix_set_mask_notifier(PCIDevice *dev, unsigned vector, void *opaque)
assert(!dev->msix_mask_notifier_opaque[vector]);
/* Unmask the new notifier unless vector is masked. */
- if (msix_is_masked(dev, vector)) {
- return 0;
- }
- r = dev->msix_mask_notifier(dev, vector, opaque,
- msix_is_masked(dev, vector));
- if (r < 0) {
- return r;
+ if (!msix_is_masked(dev, vector)) {
+ r = dev->msix_mask_notifier(dev, vector, opaque, false);
+ if (r < 0) {
+ return r;
+ }
}
dev->msix_mask_notifier_opaque[vector] = opaque;
return r;
@@ -634,21 +632,21 @@ int msix_set_mask_notifier(PCIDevice *dev, unsigned vector, void *opaque)
int msix_unset_mask_notifier(PCIDevice *dev, unsigned vector)
{
int r = 0;
+ void *opaque;
if (vector >= dev->msix_entries_nr || !dev->msix_entry_used[vector])
return 0;
+ opaque = dev->msix_mask_notifier_opaque[vector];
+
assert(dev->msix_mask_notifier);
- assert(dev->msix_mask_notifier_opaque[vector]);
+ assert(opaque);
/* Mask the old notifier unless it is already masked. */
- if (msix_is_masked(dev, vector)) {
- return 0;
- }
- r = dev->msix_mask_notifier(dev, vector,
- dev->msix_mask_notifier_opaque[vector],
- !msix_is_masked(dev, vector));
- if (r < 0) {
- return r;
+ if (!msix_is_masked(dev, vector)) {
+ r = dev->msix_mask_notifier(dev, vector, opaque, true);
+ if (r < 0) {
+ return r;
+ }
}
dev->msix_mask_notifier_opaque[vector] = NULL;
return r;