From patchwork Mon Aug 21 23:42:41 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Biggers X-Patchwork-Id: 804210 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="R7hdyCOH"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xbqyt4SP9z9t2R for ; Tue, 22 Aug 2017 09:44:06 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754252AbdHUXnx (ORCPT ); Mon, 21 Aug 2017 19:43:53 -0400 Received: from mail-pg0-f67.google.com ([74.125.83.67]:38162 "EHLO mail-pg0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753790AbdHUXnw (ORCPT ); Mon, 21 Aug 2017 19:43:52 -0400 Received: by mail-pg0-f67.google.com with SMTP id t3so5430144pgt.5; Mon, 21 Aug 2017 16:43:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=nsSdcs/+l7+a/91u8tUE3t4F4dfYA8RSAyFfLBQ5Fps=; b=R7hdyCOHlTdj1Sw2MNJRKxyYxGtgX6yd4kjVDsfUM/ezNlMI6G7bDVzyMOWqAocwe+ cWwlmOajhyeZPB14a4fxX6HIDB4f2Ew5Aml9IDW5D5zls4XZwRog5WuIuOaAjhoc/vbA kiNI6annVwE68qo1468TJuVV8aTcBDql4IfQX30dg6dIARDIOaOMupnMNGbevwuElKQO 5vzBU4Uv2EAKjbPaxG6Iu64rFNOCw/GyTDUFuSY8h8BTak3eX57n3Eo/OSspirbZt8VB Ev4h2jEX70coGWJ4UJxXxfgXsgW44Z52pxuayWsbT2ylPEqW2LDg9d2hUwocmSaUT8+7 vtag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=nsSdcs/+l7+a/91u8tUE3t4F4dfYA8RSAyFfLBQ5Fps=; b=dF5emnrW8Huye9t+ta2BZ5hzkaQ3nUdAVL8Sn1IXtwx8dM5I7fRzpQvC20pmOT1JpB mThU3eA2Ygn0wtp24mkGDDstentG8Y42P0os48FfjUtxt+Gx6IGTlJ842csqs3+af+eO 62e04bTx3oLo6+6ao+6dhaaaQUimNJ2OoMf/z68RbczUcV0owStAreRiEBmKE4rQmHLO KJAr5yZ4PSfuAbfAAYeGiW/VFB+jD1LAGXdHrnR4I6ndDJR0TIUsLKtszCvUW4LzwofB o0GK6Wof5Sd81s4Mu+j8nwnknEfaneEdWXRwPzhxJYcynAiZXi/Ntn1hVLxpO7af16qR WS5g== X-Gm-Message-State: AHYfb5gdwfcILjkvNaD0n2rAmZ68Jf1FGfQExhcUBb+K32nLAlDj5Hpc FjgsbXyD11R45i/ZTec= X-Received: by 10.98.73.70 with SMTP id w67mr18912219pfa.294.1503359031089; Mon, 21 Aug 2017 16:43:51 -0700 (PDT) Received: from ebiggers-linuxstation.kir.corp.google.com ([100.66.174.81]) by smtp.gmail.com with ESMTPSA id h1sm25922823pfg.84.2017.08.21.16.43.49 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 21 Aug 2017 16:43:49 -0700 (PDT) From: Eric Biggers To: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Hannes Frederic Sowa , Jason Baron , Peter Zijlstra , Eric Biggers Subject: [PATCH] once: switch to new jump label API Date: Mon, 21 Aug 2017 16:42:41 -0700 Message-Id: <20170821234241.88438-1-ebiggers3@gmail.com> X-Mailer: git-send-email 2.14.1.480.gb18f417b89-goog Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Eric Biggers Switch the DO_ONCE() macro from the deprecated jump label API to the new one. The new one is more readable, and for DO_ONCE() it also makes the generated code more icache-friendly: now the one-time initialization code is placed out-of-line at the jump target, rather than at the inline fallthrough case. Signed-off-by: Eric Biggers Acked-by: Hannes Frederic Sowa bool __do_once_start(bool *done, unsigned long *flags); -void __do_once_done(bool *done, struct static_key *once_key, +void __do_once_done(bool *done, struct static_key_true *once_key, unsigned long *flags); /* Call a function exactly once. The idea of DO_ONCE() is to perform @@ -38,8 +38,8 @@ void __do_once_done(bool *done, struct static_key *once_key, ({ \ bool ___ret = false; \ static bool ___done = false; \ - static struct static_key ___once_key = STATIC_KEY_INIT_TRUE; \ - if (static_key_true(&___once_key)) { \ + static DEFINE_STATIC_KEY_TRUE(___once_key); \ + if (static_branch_unlikely(&___once_key)) { \ unsigned long ___flags; \ ___ret = __do_once_start(&___done, &___flags); \ if (unlikely(___ret)) { \ diff --git a/lib/once.c b/lib/once.c index 05c8604627eb..831c5a6b0bb2 100644 --- a/lib/once.c +++ b/lib/once.c @@ -5,7 +5,7 @@ struct once_work { struct work_struct work; - struct static_key *key; + struct static_key_true *key; }; static void once_deferred(struct work_struct *w) @@ -14,11 +14,11 @@ static void once_deferred(struct work_struct *w) work = container_of(w, struct once_work, work); BUG_ON(!static_key_enabled(work->key)); - static_key_slow_dec(work->key); + static_branch_disable(work->key); kfree(work); } -static void once_disable_jump(struct static_key *key) +static void once_disable_jump(struct static_key_true *key) { struct once_work *w; @@ -51,7 +51,7 @@ bool __do_once_start(bool *done, unsigned long *flags) } EXPORT_SYMBOL(__do_once_start); -void __do_once_done(bool *done, struct static_key *once_key, +void __do_once_done(bool *done, struct static_key_true *once_key, unsigned long *flags) __releases(once_lock) {