On 01.12.2020 18:40, Roger Pau Monne wrote: > Do not attempt to mask an MSI-X entry if MSI-X is not enabled. Else it > will lead to hitting the following assert on debug builds: > > (XEN) Panic on CPU 13: > (XEN) Assertion 'entry->arch.pirq != INVALID_PIRQ' failed at vmsi.c:843
Since the line number is only of limited use, I'd like to see the function name (vpci_msix_arch_mask_entry()) also added here; easily done while committing, if the question further down can be resolved without code change. > --- a/xen/drivers/vpci/msix.c > +++ b/xen/drivers/vpci/msix.c > @@ -357,7 +357,11 @@ static int msix_write(struct vcpu *v, unsigned long > addr, unsigned int len, > * so that it picks the new state. > */ > entry->masked = new_masked; > - if ( !new_masked && msix->enabled && !msix->masked && entry->updated > ) > + > + if ( !msix->enabled ) > + break; > + > + if ( !new_masked && !msix->masked && entry->updated ) > { > /* > * If MSI-X is enabled, the function mask is not active, the > entry What about a "disabled" -> "enabled-but-masked" transition? This, afaict, similarly won't trigger setting up of entries from control_write(), and hence I'd expect the ASSERT() to similarly trigger when subsequently an entry's mask bit gets altered. I'd also be fine making this further adjustment, if you agree, but the one thing I haven't been able to fully convince myself of is that there's then still no need to set ->updated to true. Jan