[Nouveau] [PATCH v2] pmu: use nvkm_msec instead of do while

Karol Herbst karol at karolherbst.de
Sun Nov 15 04:07:06 PST 2015


> Emil Velikov <emil.l.velikov at gmail.com> hat am 14. November 2015 um 23:44
> geschrieben:
> 
> On 14 November 2015 at 19:51, Karol Herbst <nouveau at karolherbst.de> wrote:
> > I hit this while loop in an error state of the gpu
> >
> > v2: unlock mutex only if reply == true
> >
> > Signed-off-by: Karol Herbst <nouveau at karolherbst.de>
> > ---
> > drm/nouveau/nvkm/subdev/pmu/base.c | 11 +++++++++--
> > 1 file changed, 9 insertions(+), 2 deletions(-)
> >
> > diff --git a/drm/nouveau/nvkm/subdev/pmu/base.c
> > b/drm/nouveau/nvkm/subdev/pmu/base.c
> > index 81a5583..eb248fd 100644
> > --- a/drm/nouveau/nvkm/subdev/pmu/base.c
> > +++ b/drm/nouveau/nvkm/subdev/pmu/base.c
> > @@ -100,9 +100,16 @@ nvkm_pmu_send(struct nvkm_pmu *pmu, u32 reply[2],
> > }
> >
> > /* acquire data segment access */
> > - do {
> > + nvkm_wr32(device, 0x10a580, 0x00000001);
> > + if (nvkm_msec(device, 2000,
> > + if (nvkm_rd32(device, 0x10a580) == 0x00000001)
> > + break;
> > nvkm_wr32(device, 0x10a580, 0x00000001);
> > - } while (nvkm_rd32(device, 0x10a580) != 0x00000001);
> > + ) < 0) {
> > + if (reply)
> > + mutex_unlock(&subdev->mutex);
> > + return -EBUSY;
> > + }
> As you're here might as well use the new nvkm_wait_Xsec macros ?
On a second thought, I don't want to use those timer functions at all, because
they still depend on the gpu being in a sane state and I want to abort
whenever something fishy is going on, too.
I just want to let this while loop timeout after a second or so.
> 
> -Emil

Karol


More information about the Nouveau mailing list