Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S936262AbcCQUW3 (ORCPT ); Thu, 17 Mar 2016 16:22:29 -0400 Received: from www.linutronix.de ([62.245.132.108]:33868 "EHLO Galois.linutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932595AbcCQUWV (ORCPT ); Thu, 17 Mar 2016 16:22:21 -0400 Date: Thu, 17 Mar 2016 21:20:51 +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: <56EAF6CC.7070108@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> 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: 1688 Lines: 61 On Thu, 17 Mar 2016, Jens Axboe wrote: > On 03/17/2016 09:42 AM, Jens Axboe wrote: > > On 03/17/2016 05:01 AM, Thomas Gleixner wrote: > > > On Thu, 17 Mar 2016, Peter Zijlstra wrote: > > > > On Thu, Mar 17, 2016 at 12:39:46PM +0100, Thomas Gleixner wrote: > > > > > But we have to clarify and document whether holes in > > > > > cpu_possible_mask are not > > > > > allowed at all or if code like the above is simply broken. > > > > > > > > So the general rule is that cpumasks can have holes, and exempting one > > > > just muddles the water. > > > > > > > > Therefore I'd call the code just plain broken. > > > > > > Agreed. > > > > > > That macro is not really helping the readability of the code at all. So a > > > simple for_each_possible_cpu() loop would have avoided that wreckage. > > > > Does the attached work? The rest of blk-mq should deal with holes just Bah. Attachements ... > > fine, we found some of those issues on sparc. Not sure why this one > > slipped through the cracks. > > 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? Thanks, tglx