On my GP107 when I load nouveau after unloading it, for some reason the GPU stopped sending or the CPU stopped receiving interrupts if MSI was enabled. Doing a rearm once before getting any interrupts fixes this. Signed-off-by: Karol Herbst <kherbst at redhat.com> --- drm/nouveau/nvkm/subdev/pci/base.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drm/nouveau/nvkm/subdev/pci/base.c b/drm/nouveau/nvkm/subdev/pci/base.c index b1b1f362..7ee1fbb4 100644 --- a/drm/nouveau/nvkm/subdev/pci/base.c +++ b/drm/nouveau/nvkm/subdev/pci/base.c @@ -136,6 +136,10 @@ nvkm_pci_init(struct nvkm_subdev *subdev) return ret; pci->irq = pdev->irq; + /* workaround: do a rearm once */ + if (pci->msi) + pci->func->msi_rearm(pci); + return ret; } -- 2.14.3
On Fri, Nov 24, 2017 at 03:56:26AM +0100, Karol Herbst wrote:> On my GP107 when I load nouveau after unloading it, for some reason the > GPU stopped sending or the CPU stopped receiving interrupts if MSI was > enabled.I suppose this could happen if the GPU raises an interrupt after the driver's already called free_irq() on it, and hence the driver can't rearm itself in the interrupt handler. This possibly points to a bug somewhere (the GPU should be completely idle by the time free_irq() is called), but this seems like a valid thing to do at initialization in any case to avoid relying on the prior owner of the device to always behave properly.> Doing a rearm once before getting any interrupts fixes this. > > Signed-off-by: Karol Herbst <kherbst at redhat.com> > --- > drm/nouveau/nvkm/subdev/pci/base.c | 4 ++++ > 1 file changed, 4 insertions(+)Reviewed-by: Thierry Reding <treding at nvidia.com> -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: not available URL: <https://lists.freedesktop.org/archives/nouveau/attachments/20171124/d50312f0/attachment.sig>
On Fri, Nov 24, 2017 at 3:02 PM, Thierry Reding <thierry.reding at gmail.com> wrote:> On Fri, Nov 24, 2017 at 03:56:26AM +0100, Karol Herbst wrote: >> On my GP107 when I load nouveau after unloading it, for some reason the >> GPU stopped sending or the CPU stopped receiving interrupts if MSI was >> enabled. > > I suppose this could happen if the GPU raises an interrupt after the > driver's already called free_irq() on it, and hence the driver can't > rearm itself in the interrupt handler. > > This possibly points to a bug somewhere (the GPU should be completely > idle by the time free_irq() is called), but this seems like a valid > thing to do at initialization in any case to avoid relying on the prior > owner of the device to always behave properly. >Yeah, this makes sense. But what I am wondering about is, why this isn't a bigger problem or maybe this is just due to those changes in the Pascal interrupt handler and this is a Pascal only problem? Anyway, the Nvidia driver seems to do it once on loading time as well, so I was quite sure we could simply do it this way and be sure that we are able to use the GPU from any state.>> Doing a rearm once before getting any interrupts fixes this. >> >> Signed-off-by: Karol Herbst <kherbst at redhat.com> >> --- >> drm/nouveau/nvkm/subdev/pci/base.c | 4 ++++ >> 1 file changed, 4 insertions(+) > > Reviewed-by: Thierry Reding <treding at nvidia.com>
Reasonably Related Threads
- [PATCH] pci: do a msi rearm on init
- [PATCH] pci: do a msi rearm on init
- [PATCH] drm/nouveau: Move irq setup/teardown to pci ctor/dtor
- [PATCH v2] drm/nouveau: Move irq setup/teardown to pci ctor/dtor
- [PATCH v3] drm/nouveau: Move irq setup/teardown to pci ctor/dtor