From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753845AbbCaRJW (ORCPT ); Tue, 31 Mar 2015 13:09:22 -0400 Received: from mail-la0-f53.google.com ([209.85.215.53]:33629 "EHLO mail-la0-f53.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752725AbbCaRJU (ORCPT ); Tue, 31 Mar 2015 13:09:20 -0400 MIME-Version: 1.0 In-Reply-To: <20150331164337.GA8462@gmail.com> References: <20150327081141.GA9526@gmail.com> <551534B1.6090908@redhat.com> <20150327111738.GA8749@gmail.com> <20150327113430.GC14778@gmail.com> <551549AF.50808@redhat.com> <20150327121645.GC15631@gmail.com> <55154DB3.9000008@redhat.com> <20150328091106.GA5361@gmail.com> <20150331164337.GA8462@gmail.com> From: Andy Lutomirski Date: Tue, 31 Mar 2015 10:08:58 -0700 Message-ID: Subject: Re: [PATCH] x86/asm/entry/64: better check for canonical address To: Ingo Molnar Cc: Denys Vlasenko , Denys Vlasenko , Brian Gerst , Borislav Petkov , "the arch/x86 maintainers" , Linux Kernel Mailing List , Linus Torvalds Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Mar 31, 2015 at 9:43 AM, Ingo Molnar wrote: > > * Denys Vlasenko wrote: > >> > I guess they could optimize it by adding a single "I am a modern >> > OS executing regular userspace" flag to the descriptor [or >> > expressing the same as a separate instruction], to avoid all that >> > legacy crap that won't trigger on like 99.999999% of systems ... >> >> Yes, that would be a useful addition. Interrupt servicing on x86 >> takes a non-negligible hit because of IRET slowness. > > But ... to react to your other patch: detecting the common easy case > and doing a POPF+RET ourselves ought to be pretty good as well? > > But only if ptregs->rip != the magic RET itself, to avoid recursion. > > Even with all those extra checks it should still be much faster. > I have a smallish preference for doing sti;ret instead, because that keeps the funny special case entirely localized to the NMI code instead of putting it in the IRQ exit path. I suspect that the performance loss is at most a cycle or two (we're adding a branch, but sti itself is quite fast). That being said, I could easily be convinced otherwise. We'd certainly get better code coverage if the special case were in the IRQ exit path, since it would presumably happen fairly frequently. Heck, executing write(anything, BAD_USER_POINTER, 1) in a tight loop would probably hit that case very quickly if there's any network traffic. --Andy