Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751787AbdIULwW (ORCPT ); Thu, 21 Sep 2017 07:52:22 -0400 Received: from mail-it0-f65.google.com ([209.85.214.65]:32821 "EHLO mail-it0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751722AbdIULwR (ORCPT ); Thu, 21 Sep 2017 07:52:17 -0400 X-Google-Smtp-Source: AOwi7QDN9lci08Y3TJL+onOqDpSWCNPukbF3Z29JpulUiC1JZAJS/GdnNYxymV/8ugXiL9QvZC4YdvqRsKeJU8+ti0M= 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: Brian Gerst Date: Thu, 21 Sep 2017 07:52:15 -0400 Message-ID: Subject: Re: [PATCH 2/2] x86/asm: Fix inline asm call constraints for clang To: Dmitry Vyukov Cc: Andy Lutomirski , 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: 2599 Lines: 57 On Thu, Sep 21, 2017 at 4:12 AM, Dmitry Vyukov wrote: > 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. No, it is not. The processor pushes 5 or 6 words of data on the stack (the IRET frame plus an error code for certain exceptions) before the interrupt handler gets control. So without using the IST for stack switching on every interrupt, the redzone cannot be used in the kernel as it will get smashed by the IRET frame. In addition, since the kernel's stack is limited in size, skipping 128 bytes on every interrupt would overrun the stack faster. The small gain from using the redzone in the kernel is outweighed by these limitations. -- Brian Gerst