From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_PASS,USER_AGENT_NEOMUTT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 80160C43441 for ; Wed, 10 Oct 2018 18:33:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 450EC2075B for ; Wed, 10 Oct 2018 18:33:38 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 450EC2075B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727142AbeJKB46 (ORCPT ); Wed, 10 Oct 2018 21:56:58 -0400 Received: from mx1.redhat.com ([209.132.183.28]:55954 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726525AbeJKB46 (ORCPT ); Wed, 10 Oct 2018 21:56:58 -0400 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id C8F183083395; Wed, 10 Oct 2018 18:33:35 +0000 (UTC) Received: from treble (ovpn-124-83.rdu2.redhat.com [10.10.124.83]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 8146417002; Wed, 10 Oct 2018 18:33:32 +0000 (UTC) Date: Wed, 10 Oct 2018 13:33:30 -0500 From: Josh Poimboeuf To: Andy Lutomirski Cc: Steven Rostedt , Peter Zijlstra , LKML , Linus Torvalds , Ingo Molnar , Andrew Morton , Thomas Gleixner , Masami Hiramatsu , Mathieu Desnoyers , Matthew Helsley , "Rafael J. Wysocki" , David Woodhouse , Paolo Bonzini , Jason Baron , Jiri Kosina , Ard Biesheuvel , Andrew Lutomirski Subject: Re: [POC][RFC][PATCH 1/2] jump_function: Addition of new feature "jump_function" Message-ID: <20181010183330.ootwmz6deazg2k2n@treble> References: <20181006093905.46276505@vmware.local.home> <20181008072134.GB5663@hirez.programming.kicks-ass.net> <20181008155757.GC5663@hirez.programming.kicks-ass.net> <20181009021710.qwt5hpntyeps44h3@treble> <20181008235750.59da83ae@gandalf.local.home> <20181010175237.e7m3sldcu2maoqcq@treble> <20181010181605.arsyjxwdztztrjih@treble> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20181010181605.arsyjxwdztztrjih@treble> User-Agent: NeoMutt/20180716 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.44]); Wed, 10 Oct 2018 18:33:36 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Oct 10, 2018 at 01:16:05PM -0500, Josh Poimboeuf wrote: > > > +#define DEFINE_STATIC_CALL(tramp, func) \ > > > + DECLARE_STATIC_CALL(tramp, func); \ > > > + asm(".pushsection .text, \"ax\" \n" \ > > > + ".align 4 \n" \ > > > + ".globl " #tramp " \n" \ > > > + ".type " #tramp ", @function \n" \ > > > + #tramp ": \n" \ > > > + "jmp " #func " \n" \ > > > > I think this would be nicer as an indirect call that gets patched to a > > direct call so that the update mechanism works even before it's > > initialized. (Currently static_branch blows up horribly if you try to > > update one too early, and that's rather annoying IMO.) > > Yeah, that would be better. It would also allow trampoline function > pointers to work, which I think you mentioned elsewhere. And then I > shouldn't trample this code in __static_call_update() -- that was > already kind of nasty anyway. Re-reading your suggestion, I may have misunderstood what you're suggesting here, but I'm thinking about doing something like what you proposed earlier: GLOBAL(tramp) jmp *current_func(%rip) ENDPROC(tramp) That is, doing an indirect jump instead of the above direct jump, so that any previous references to the trampoline would still work (and it would also work during early boot). Though it should probably be a retpoline instead of an indirect jump. -- Josh