[Nouveau] [PATCH] drm/nouveau: Ack interrupts for some fuc engines

Maarten Lankhorst maarten.lankhorst at canonical.com
Mon Mar 25 23:29:24 PDT 2013


Op 25-03-13 19:14, Marcin Slusarz schreef:
> On Mon, Mar 25, 2013 at 10:22:37AM +0100, Maarten Lankhorst wrote:
>> Fixes 100% cpu usage when the exit interrupt never got acked.
>>
>> Signed-off-by: Maarten Lankhorst <m.b.lankhorst at gmail.com>
>> ---
>> diff --git a/drivers/gpu/drm/nouveau/core/core/falcon.c b/drivers/gpu/drm/nouveau/core/core/falcon.c
>> index e05c157..b11c5f3 100644
>> --- a/drivers/gpu/drm/nouveau/core/core/falcon.c
>> +++ b/drivers/gpu/drm/nouveau/core/core/falcon.c
>> @@ -229,6 +229,24 @@ _nouveau_falcon_fini(struct nouveau_object *object, bool suspend)
>>  	return nouveau_engine_fini(&falcon->base, suspend);
>>  }
>>  
>> +void
>> +nouveau_falcon_intr(struct nouveau_subdev *subdev)
>> +{
>> +	struct nouveau_falcon *falcon = (void*)subdev;
>> +	u32 intr = nv_ro32(falcon, 0x008);
>> +
>> +	nv_wo32(falcon, 0x004, intr);
>> +
>> +	if (intr & 0x10) {
>> +		intr &= ~0x10;
>> +
>> +		nv_info(falcon, "Exit interrupt called\n");
> Do you really want to print it at "info" level? How frequent it is?
It shouldn't be often, I want it to run at the error level since that usually means the firmware exited prematurely/crashed and things go bad, but it happens with the secret scrubber finishing on initialization too. That one is harmless though.
>> +	}
>> +
>> +	if (intr)
>> +		nv_error(falcon, "Unhandled interrupt %08x\n", intr);
>> +}
>> +
>>  int
>>  nouveau_falcon_create_(struct nouveau_object *parent,
>>  		       struct nouveau_object *engine,
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
>



More information about the dri-devel mailing list