x86/vPCI: tolerate (un)masking a disabled MSI-X entry

None of the four reasons causing vpci_msix_arch_mask_entry() to get
called (there's just a single call site) are impossible or illegal prior
to an entry actually having got set up:
- the entry may remain masked (in this case, however, a prior masked ->
  unmasked transition would already not have worked),
- MSI-X may not be enabled,
- the global mask bit may be set,
- the entry may not otherwise have been updated.
Hence the function asserting that the entry was previously set up was
simply wrong. Since the caller tracks the masked state (and setting up
of an entry would only be effected when that software bit is clear),
it's okay to skip both masking and unmasking requests in this case.

Fixes: d6281be9d0 ('vpci/msix: add MSI-X handlers')
Reported-by: Manuel Bouyer <bouyer@antioche.eu.org>
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Roger Pau Monné <roger.pau@citrix.com>
Tested-by: Manuel Bouyer <bouyer@antioche.eu.org>
master commit: 04b090366c
master date: 2021-01-05 13:17:54 +0100
This commit is contained in:
Jan Beulich committed 2021-01-21 16:18:06 +01:00
1 parent a514c5ef5b
commit 5f9b0f90ee
1 file changed
+2 -2
+2 -2
View File
@@ -844,8 +844,8 @@ void vpci_msi_arch_print(const struct vpci_msi *msi)
void vpci_msix_arch_mask_entry(struct vpci_msix_entry *entry,
const struct pci_dev *pdev, bool mask)
{
ASSERT(entry->arch.pirq != INVALID_PIRQ);
vpci_mask_pirq(pdev->domain, entry->arch.pirq, mask);
if ( entry->arch.pirq != INVALID_PIRQ )
vpci_mask_pirq(pdev->domain, entry->arch.pirq, mask);
}
int vpci_msix_arch_enable_entry(struct vpci_msix_entry *entry,
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.