[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 3/3] x86/msi: clear initial MSI-X state on boot
On Tue, Mar 28, 2023 at 01:37:14PM +0200, Roger Pau Monné wrote: > On Sat, Mar 25, 2023 at 03:49:24AM +0100, Marek Marczykowski-Górecki wrote: > > Some firmware/devices are found to not reset MSI-X properly, leaving > > MASKALL set. Xen relies on initial state being both disabled. > > The 'both' in this sentence seems out of context, as you just mention > MASKALL in the previous sentence. > > > Especially, pci_reset_msix_state() assumes if MASKALL is set, it was Xen > > setting it due to msix->host_maskall or msix->guest_maskall. Clearing > > just MASKALL might be unsafe if ENABLE is set, so clear them both. > > > > Reported-by: Jason Andryuk <jandryuk@xxxxxxxxx> > > Signed-off-by: Marek Marczykowski-Górecki <marmarek@xxxxxxxxxxxxxxxxxxxxxx> > > --- > > v2: > > - new patch > > --- > > xen/drivers/passthrough/msi.c | 7 +++++++ > > 1 file changed, 7 insertions(+) > > > > diff --git a/xen/drivers/passthrough/msi.c b/xen/drivers/passthrough/msi.c > > index ce1a450f6f4a..60adad47e379 100644 > > --- a/xen/drivers/passthrough/msi.c > > +++ b/xen/drivers/passthrough/msi.c > > @@ -48,6 +48,13 @@ int pdev_msi_init(struct pci_dev *pdev) > > ctrl = pci_conf_read16(pdev->sbdf, msix_control_reg(pos)); > > msix->nr_entries = msix_table_size(ctrl); > > > > + /* > > + * Clear both ENABLE and MASKALL, pci_reset_msix_state() relies on > > this > > + * initial state. > > + */ > > + ctrl &= ~(PCI_MSIX_FLAGS_ENABLE|PCI_MSIX_FLAGS_MASKALL); > > + pci_conf_write16(pdev->sbdf, msix_control_reg(pos), ctrl); > > Should you make this conditional to them being set in the first place: > > if ( ctrl & (PCI_MSIX_FLAGS_ENABLE | PCI_MSIX_FLAGS_MASKALL) ) > { > ... > > We should avoid the extra access if possible (specially if it's to > write the same value that has been read). > > I would even move this before the msix_table_size() call, so the > handling of ctrl is closer together. > > Would it also be worth to print a debug message that the initial > device state seems inconsistent? That may make sense. XENLOG_WARNING? XENLOG_DEBUG? -- Best Regards, Marek Marczykowski-Górecki Invisible Things Lab Attachment:
signature.asc
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |