Received: by 2002:a05:6a10:9e8c:0:0:0:0 with SMTP id y12csp1077234pxx; Tue, 27 Oct 2020 07:46:20 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzoWjWijtJbmPzTGItfw8ssmKb7qMWNWL2QYU6HHZwGm5ZcDH/0cDrKz8DcljkTDo8l0IaV X-Received: by 2002:a17:906:5e44:: with SMTP id b4mr2828311eju.211.1603809979813; Tue, 27 Oct 2020 07:46:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1603809979; cv=none; d=google.com; s=arc-20160816; b=YcuTJD3Nkni1NlZk4ui0B78TieeeztQ+MiNyar2CtA8XbDKjZdFy8ON0rRA/QMSHhF loMPl9wDVNKhiwM63gwOFMlFsdx1OKpoOc8UfyrIiLNQVkg8/3m4uPnRPTcY/VyV/4U1 MdbZTXR9T5IkKkT/kEPQ2DHV3yxWDvlcd5NBfM515vsaR/N7TQXg9Ptedp9VJmU9dCnO 2JA/bW/1Q5uSgAD1EApIq6ko6Adtz7hcLqPikZ2N1XZzac89O8FsnFr8zYU/XnzHbrMy 0wPABe6KlRweFs3/Sjk2vi85Ufo+fh6tKuq5jB9t5WsfzbVj2pt6Xc485/D4Kqc38y2r ewww== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=IydebgDLhybIhlbJoS+5gN0bPeDMS6gjeGXG6v1PSwc=; b=QkkdD3cuNL8xiTiQNTvBWrXWIQAFqKn9tLfPBD3jGz2MTCZ0S8g8o/pHmaJMH8gMa1 jr0ebSCjeGKTWfbDeP24RuhwdRVWTk5m2C/kDMiwCXgnTAB5kn6oUtdNSDK8VQXxdrmX WaTf+leM0TfiqzjHvYgSyt9CaFI+hO59ECclYAJBV5VBFFKkoAb6YcHhW9EaAZIjxtIF VT5LTHa/YdlZqUdcptmR4WWEDaL2vPGvipiXyCbSnmmSfXcRBzW1NUv8u/RfS/WWNOnl 8OPuuFjehccbvf8FaCR5J3uf4Dxr7kPXTLf9EPQCSgZdGwMy5KrgT4FC4rEvOshjJa06 OleA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=n6WLyEqz; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id d18si1112023ejz.660.2020.10.27.07.45.56; Tue, 27 Oct 2020 07:46:19 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=n6WLyEqz; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751269AbgJ0MWp (ORCPT + 99 others); Tue, 27 Oct 2020 08:22:45 -0400 Received: from mail.kernel.org ([198.145.29.99]:39232 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750915AbgJ0MWp (ORCPT ); Tue, 27 Oct 2020 08:22:45 -0400 Received: from localhost (i16-lef01-ix2-212-195-25-126.ft.lns.abo.bbox.fr [212.195.25.126]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 03601218AC; Tue, 27 Oct 2020 12:22:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1603801364; bh=Q5FbWv+W8QbPaNeXDWZaFyh4QTMfeQUS6T0xUbSD2Rw=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=n6WLyEqz+t0pUmuorI1HA4q5K3WArPR8j1+K7YcGQlh7eH3xP8vt4dBTLTp/aehll R8xE6PPp3SIevyKbwH8rQVX18hJuCBIW+0bf4PasI4aDISwZJ463iZH2RHkKGjckLb rDY3LcocXXV+2Y6EyCXX3bnbPQN2FUD4qffQZeKs= Date: Tue, 27 Oct 2020 13:22:41 +0100 From: Frederic Weisbecker To: Peter Zijlstra Cc: Michal Hocko , Thomas Gleixner , Mel Gorman , Frederic Weisbecker , Ingo Molnar , LKML , x86@kernel.org, Linus Torvalds , Josh Poimboeuf Subject: Re: [RFC PATCH v2 0/5] allow overriding default preempt mode from command line Message-ID: <20201027122241.GA140902@lothringen> References: <20201009122926.29962-1-mhocko@kernel.org> <20201009174554.GS2611@hirez.programming.kicks-ass.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20201009174554.GS2611@hirez.programming.kicks-ass.net> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Oct 09, 2020 at 07:45:54PM +0200, Peter Zijlstra wrote: > +DEFINE_STATIC_KEY_TRUE(irq_preemption_key); > + > +/* > + * SC:cond_resched > + * SC:might_resched > + * SC:preempt_schedule > + * SC:preempt_schedule_notrace > + * SB:irq_preemption_key > + * > + * > + * ZERO > + * cond_resched <- RET0 > + * might_resched <- NOP > + * preempt_schedule <- NOP > + * preempt_schedule_notrace <- NOP > + * irq_preemption_key <- false > + * > + * NONE: > + * cond_resched <- __cond_resched > + * might_resched <- NOP > + * preempt_schedule <- NOP > + * preempt_schedule_notrace <- NOP > + * irq_preemption_key <- false > + * > + * VOLUNTARY: > + * cond_resched <- __cond_resched > + * might_resched <- __might_resched > + * preempt_schedule <- NOP > + * preempt_schedule_notrace <- NOP > + * irq_preemption_key <- false > + * > + * FULL: > + * cond_resched <- RET0 > + * might_resched <- NOP > + * preempt_schedule <- preempt_schedule > + * preempt_schedule_notrace <- preempt_schedule_notrace > + * irq_preemption_key <- true > + */ That's cute! I'll try to end up to that result. > +static int __init setup_preempt_mode(char *str) > +{ > + if (!strcmp(str, "zero")) { > + static_call_update(cond_resched, __static_call_return0); > + static_call_update(might_resched, (void (*)(void))NULL); > + static_call_update(preempt_schedule, (void (*)(void))NULL); > + static_call_update(preempt_schedule_notrace, (void (*)(void))NULL); > + static_branch_disable(&irq_preemption_key); > + printk("XXX PREEMPT: %s\n", str); > + } else if (!strcmp(str, "none")) { > + static_call_update(cond_resched, __cond_resched); > + static_call_update(might_resched, (void (*)(void))NULL); > + static_call_update(preempt_schedule, (void (*)(void))NULL); > + static_call_update(preempt_schedule_notrace, (void (*)(void))NULL); > + static_branch_disable(&irq_preemption_key); > + printk("XXX PREEMPT: %s\n", str); > + } else if (!strcmp(str, "voluntary")) { > + static_call_update(cond_resched, __cond_resched); > + static_call_update(might_resched, __might_resched); > + static_call_update(preempt_schedule, (void (*)(void))NULL); > + static_call_update(preempt_schedule_notrace, (void (*)(void))NULL); > + static_branch_disable(&irq_preemption_key); > + printk("XXX PREEMPT: %s\n", str); > + } else if (!strcmp(str, "ponies")) { > + static_call_update(cond_resched, __cond_resched); > + static_call_update(might_resched, (void (*)(void))NULL); > + static_call_update(preempt_schedule, preempt_schedule_thunk); > + static_call_update(preempt_schedule_notrace, preempt_schedule_notrace_thunk); > + static_branch_enable(&irq_preemption_key); > + printk("XXX PREEMPT: %s\n", str); Why would we need that ponies version? Thanks!