@@ -36,8 +36,16 @@ nouveau_mc_intr(struct nouveau_subdev *subdev)
while (stat && map->stat) {
if (stat & map->stat) {
unit = nouveau_subdev(subdev, map->unit);
- if (unit && unit->intr)
- unit->intr(unit);
+ if (unit) {
+ if (unit->intr)
+ unit->intr(unit);
+ else if (printk_ratelimit())
+ nv_error(pmc,
+ "%s has no interrupt handler, ignoring interrupt %x\n",
+ unit->name, intr & map->stat);
+ } else if (printk_ratelimit())
+ nv_error(pmc, "subdev %u does not exist for interrupt %x\n",
+ map->unit, intr & map->stat);
intr &= ~map->stat;
}
map++;
I noticed that bsp, vp and ppp had no interrupt handler after investigating why 15% of my cpu time went to interrupts. nouveau was silent about it, but it should be an error since we have no way of acking in that case. Signed-off-by: Maarten Lankhorst <maarten.lankhorst@canonical.com> --- fwiw, the interrupt was 10, the exit interrupt after secret scrubber finishes.. I have absolutely no idea why, as it times out on wait before the engine initialization.. Maybe just ack it from the bsp/vp/ppp interrupt handler? Or should it be part of the base fuc class..