On 11/14/2014 09:58 AM, Christoph Hellwig wrote: > Paul, what's the best way to figure out these CPU stalls? > > The second oops is in blk_mq_map_queue() which is a trivial > two level cpu lookup. I wonder if there's something odd about > cpu numbers on these big old sparc systems? > > Something like the debug patch below might shed some light on where the > index goes wrong, but it'll be horribly verbose. > > > diff --git a/block/blk-mq.c b/block/blk-mq.c > index b5896d4..ef4b35b 100644 > --- a/block/blk-mq.c > +++ b/block/blk-mq.c > @@ -1270,7 +1270,12 @@ run_queue: > */ > struct blk_mq_hw_ctx *blk_mq_map_queue(struct request_queue *q, const int cpu) > { > - return q->queue_hw_ctx[q->mq_map[cpu]]; > + int idx; > + > + printk("cpu: %d\n", cpu); > + idx = q->mq_map[cpu]; > + printk("queue: %d\n", idx); > + return q->queue_hw_ctx[idx]; > } > EXPORT_SYMBOL(blk_mq_map_queue); It'd probably be better to shove this debug stuff into the map building code instead, ala attached. -- Jens Axboe