Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751957AbdIUIMw (ORCPT ); Thu, 21 Sep 2017 04:12:52 -0400 Received: from mail-qt0-f173.google.com ([209.85.216.173]:47365 "EHLO mail-qt0-f173.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751832AbdIUIMu (ORCPT ); Thu, 21 Sep 2017 04:12:50 -0400 X-Google-Smtp-Source: AOwi7QCfxuBWWwOYZd30K/fnWkbnVBydyV/5Gt4S84LXWpGUtlIcTvlmkc6P7X7Z8nMpowDhpY/TEXVjrq1xhR+znwI= MIME-Version: 1.0 In-Reply-To: References: <31e96e6bcfcb47725e15a093b9c31660dfaad430.1505846562.git.jpoimboe@redhat.com> <7e39ef18-3e60-8cc9-ec4f-1cd02ade171f@zytor.com> <20170920210731.kbcibdmbd4b3ppfi@treble> From: Dmitry Vyukov Date: Thu, 21 Sep 2017 10:12:29 +0200 Message-ID: Subject: Re: [PATCH 2/2] x86/asm: Fix inline asm call constraints for clang To: Andy Lutomirski Cc: Josh Poimboeuf , "H. Peter Anvin" , "x86@kernel.org" , LKML , Ingo Molnar , Thomas Gleixner , Andy Lutomirski , Linus Torvalds , Alexander Potapenko , Matthias Kaehlcke , Arnd Bergmann , Peter Zijlstra , Andrey Ryabinin Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1915 Lines: 44 On Wed, Sep 20, 2017 at 11:19 PM, Andy Lutomirski wrote: >>> On Wed, Sep 20, 2017 at 08:01:02PM +0200, Dmitry Vyukov wrote: >>>> On Wed, Sep 20, 2017 at 7:46 PM, H. Peter Anvin wrote: >>>>> On 09/20/17 10:38, Dmitry Vyukov wrote: >>>>> >>>>> I think we need just the frame itself and RSP pointing below this >>>>> frame. If we don't have a frame, CALL instruction will smash whatever >>>>> RSP happens to point to. Compiler doesn't have to setup RSP to point >>>>> below used part of stack in leaf functions. >>>>> >>>> >>>> In the kernel it does. Redzoning is not allowed in the kernel, because >>>> interrupts or exceptions would also smash the redzone. >>> >>> I see... But it's the same for user-space signals, the first thing a >>> signal should do is to skip the redzone. I guess interrupt handlers >>> should switch to interrupt stack which avoids smashing redzone >>> altogether. Do you mean nested interrupts/exceptions in interrupts? >>> In my experience frames in leaf functions can have pretty large >>> performance penalty. Wonder if we have we considered changing >>> interrupt/exception handlers to avoid smashing redzones and disable >>> leaf frames? >> >> Currently, on x86-64, I believe all exceptions have their own dedicated >> stacks in the kernel, but IRQs still come in on the task's kernel stack. >> >> Andy, do you know if there's a reason why IRQs don't use a dedicated IST >> stack? >> > > Because IST is awful due to recursion issues. We immediately switch to an IRQ stack, though. > > If the kernel wanted a redzone, it would have to use IST for everything, which would entail a bunch of unpleasant hackery. Thanks. I guess it must be finite recursion, because we could not handle infinite with finite stack. I thing that solves it is simply: sub $256, %rsp ... do stuff ... add $256, %rsp Don't know if it's applicable to interrupts or not.