Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756090AbcCQUbc (ORCPT ); Thu, 17 Mar 2016 16:31:32 -0400 Received: from www.linutronix.de ([62.245.132.108]:33911 "EHLO Galois.linutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754230AbcCQUbb (ORCPT ); Thu, 17 Mar 2016 16:31:31 -0400 Date: Thu, 17 Mar 2016 21:30:02 +0100 (CET) From: Thomas Gleixner To: Jens Axboe cc: Peter Zijlstra , Xiong Zhou , "linux-kernel@vger.kernel.org" , Ingo Molnar , Borislav Petkov , Andreas Herrmann Subject: Re: 4.5.0+ panic when setup loop device In-Reply-To: <56EB124C.2040808@kernel.dk> Message-ID: References: <20160317095220.GO6344@twins.programming.kicks-ass.net> <20160317102633.GR6344@twins.programming.kicks-ass.net> <20160317115120.GT6344@twins.programming.kicks-ass.net> <56EADE5F.7000601@kernel.dk> <56EAF6CC.7070108@kernel.dk> <56EB124C.2040808@kernel.dk> User-Agent: Alpine 2.11 (DEB 23 2013-08-11) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Linutronix-Spam-Score: -1.0 X-Linutronix-Spam-Level: - X-Linutronix-Spam-Status: No , -1.0 points, 5.0 required, ALL_TRUSTED=-1,SHORTCIRCUIT=-0.0001 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1042 Lines: 44 On Thu, 17 Mar 2016, Jens Axboe wrote: > On 03/17/2016 01:20 PM, Thomas Gleixner wrote: > > > This might be better, we need to start at -1 to not miss the first one... > > > Still untested. > > > > > +static inline struct blk_mq_ctx *next_ctx(struct request_queue *q, int > > > *i) > > > +{ > > > + do { > > > + (*i)++; > > > + if (*i < q->nr_queues) { > > > + if (cpu_possible(*i)) > > > + return per_cpu_ptr(q->queue_ctx, *i); > > > + continue; > > > + } > > > + break; > > > + } while (1); > > > + > > > + return NULL; > > > +} > > > + > > > +#define queue_for_each_ctx(q, ctx, i) > > > \ > > > + for ((i) = -1; (ctx = next_ctx((q), &(i))) != NULL;) > > > + > > > > What's wrong with > > > > for_each_possible_cpu(cpu) { > > ctx = per_cpu_ptr(q->queue_ctx, cpu); > > > > .... > > } > > > > instead of hiding it behind an incomprehensible macro mess? > > We might not have mapped all of them. blk_mq_init_cpu_queues() tells a different story and q->queue_ctx is a per_cpu allocation. Thanks, tglx