Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753761Ab3IWU6i (ORCPT ); Mon, 23 Sep 2013 16:58:38 -0400 Received: from gate.crashing.org ([63.228.1.57]:45053 "EHLO gate.crashing.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752832Ab3IWU6h (ORCPT ); Mon, 23 Sep 2013 16:58:37 -0400 Message-ID: <1379969837.11249.24.camel@pasglop> Subject: Re: [RFC GIT PULL] softirq: Consolidation and stack overrun fix From: Benjamin Herrenschmidt To: Chris Metcalf Cc: Linus Torvalds , Peter Zijlstra , "H. Peter Anvin" , Frederic Weisbecker , Thomas Gleixner , LKML , Paul Mackerras , Ingo Molnar , James Hogan , "James E.J. Bottomley" , Helge Deller , Martin Schwidefsky , Heiko Carstens , "David S. Miller" , Andrew Morton Date: Tue, 24 Sep 2013 06:57:17 +1000 In-Reply-To: <5240819F.4050903@tilera.com> References: <1379620267-25191-1-git-send-email-fweisbec@gmail.com> <20130920162603.GA30381@localhost.localdomain> <1379799901.24090.6.camel@pasglop> <523E4F8A.7020708@zytor.com> <1379824754.24090.11.camel@pasglop> <1379824861.24090.12.camel@pasglop> <20130922162410.GA10649@laptop.programming.kicks-ass.net> <1379887000.24090.19.camel@pasglop> <5240819F.4050903@tilera.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.6.4-0ubuntu1 Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1390 Lines: 29 On Mon, 2013-09-23 at 13:59 -0400, Chris Metcalf wrote: > We just came up against this on tilegx with a customer bug report in a > PREEMPT environment. On tile, %tp is a GPR that points to the percpu area. > The following seems to be the right abstraction -- though I'd also argue > that letting barrier() clobber not just memory, but %tp, might be a better > solution, but it's not clear what the best way is to do per-architecture > overrides of per-compiler definitions like barrier(). See also the ARM v7 > code, which has to do something similar, though their percpu pointer is > not a GPR, which changes the tradeoffs somewhat. Hrm, if I read correctly what you did is that you read "tp" into another register *and* also mark that action as clobbering the top int on the stack ? I don't quite get what the stack clobber brings you here and how it works around the fact that gcc might still cache that copy of tp into another register accross preempt_enable/disable... It's hard to tell with gcc ... the best I've had so far as an option was something that would mark my per-cpu register (r13) *itself* as clobbered... Cheers, Ben. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/