Received: by 2002:a05:6a10:87d6:0:0:0:0 with SMTP id g22csp832046pxr; Mon, 11 Apr 2022 08:17:22 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxfS1Z0WMQIwFArV9fKoCo6fpp5bHRke0lfJ2AYfewQPC6yQiR0U9FZ9gi1fKr6Xjm9aXjI X-Received: by 2002:a17:902:b582:b0:14c:a63d:3df6 with SMTP id a2-20020a170902b58200b0014ca63d3df6mr33303858pls.51.1649690241946; Mon, 11 Apr 2022 08:17:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1649690241; cv=none; d=google.com; s=arc-20160816; b=PwevYXsAuAv3FZjB0LERy/k4fqq2D8Yaq2Tf/kwxaIlyMRrWuVVniEfXoouYTj1YSo 3UzIY18e+2ywmTutgXU293fmSVGvYWVr6KoLm1cv8Yq88T2kTa7PEnsEUdjBpgbL7QP+ Q43t7LfZm6rSQGsIijieyYz0n7EMRfqjOGW1xohCj2hG3hh/58P5uDSjuxYxreMRsOGs lvs6mdmNofzpBTLF0UXqmOJx38xcgeia0FlW8t4rSA+NSN/xXgF0dzzxg9H2HCVLTkr9 dhyn1bK346mKM1LO/bSLvGLfcLxMOgkdqHCmlljCFDxpdD+8ACZfNVFDJdODorweFXOj kPKA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:message-id:date:in-reply-to:subject :cc:to:dkim-signature:dkim-signature:from; bh=/ol4+bGrNb+QqTb72FmI1L958kV08K37LurxqmrD6Yo=; b=dIGPeNVFgjyW+4tmV5hhu11o+25sIh+B+1bEthQgQ3VfO8bQx3HRyly8/iNXjcnpQa uAIeS9XR4LrFrMtBMFQQtSi/9ucCjJxF0tyjjRr0zoihhb6RlFlbn1/92hgVGDI5m555 9c+aV71dDRDiK10vnjwVcIJvNmIuX9bTXNgsaEihfD5p9gY0F/U+TI1zXnQjSisq0pNn OU0nl1dVJtofhWjbzem+NY1bzIfh7bCz+h167qsg5U+8kcnmwyT6VsIeYQ5nMPUfYPYi ++p8Zd16IabkvsmfVugzTAyGhs1gGuf/UE+MYPeq/L2wuwjJhN9UnGYblK6Hts86wEiC MhDQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=DmpkuI4p; dkim=neutral (no key) header.i=@linutronix.de header.s=2020e header.b=kMv4rAme; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id m1-20020a632601000000b003816043eee6si99340pgm.219.2022.04.11.08.17.04; Mon, 11 Apr 2022 08:17:21 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=DmpkuI4p; dkim=neutral (no key) header.i=@linutronix.de header.s=2020e header.b=kMv4rAme; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344340AbiDKJYE (ORCPT + 99 others); Mon, 11 Apr 2022 05:24:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53374 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229781AbiDKJYD (ORCPT ); Mon, 11 Apr 2022 05:24:03 -0400 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0A00C3337C; Mon, 11 Apr 2022 02:21:50 -0700 (PDT) From: Thomas Gleixner DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1649668908; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to; bh=/ol4+bGrNb+QqTb72FmI1L958kV08K37LurxqmrD6Yo=; b=DmpkuI4pHY1D6VU6y+UA9OgCACafnECWy3Sc2pKXtOW0YohcuS3IHkhxqAmrKLPgPaEr5Z rbc1HN/+jNY4Zw9cSTd6Qv5m7s8gMJzjz02wkpgXZDQKfU6euGm28cEN4Txkf83sQFjg/3 7GgvF2DgV4BBz2rYzCbww8k0jpW27hx1Bs1LWeaYgN6+VxtK6OQ56J/wG/CmTIGYqAAc4+ DuTnZV6uPyWRUl6Cb/+7JlauS0JJf1p0//3GjtwaFs56DLXn+lccFvDLLwMs/sR6e8U13+ vyg6edSBNiqQzZ9/5u4gu92TBxIZuOpjSdsr1R/MdTfojPNc5xyed1B+pAI6sg== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1649668908; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to; bh=/ol4+bGrNb+QqTb72FmI1L958kV08K37LurxqmrD6Yo=; b=kMv4rAmeaYGAenvlqVXEiiwJgYg9wybGLF5ejSeezyLKEeRBqo2tAHnROmSIVFpgADNUFl jBYt3+NZ3z00NCDA== To: Pete Swain , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org Cc: "H. Peter Anvin" , Paolo Bonzini , Sean Christopherson , Vitaly Kuznetsov , Wanpeng Li , Jim Mattson , Joerg Roedel , John Stultz , Stephen Boyd , "Maciej W. Rozycki" , Johan Hovold , Feng Tang , "Paul E. McKenney" , Juergen Gross , linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Pete Swain Subject: Re: [PATCH 2/2] timers: retpoline mitigation for time funcs In-Reply-To: <87r165gmoz.ffs@tglx> Date: Mon, 11 Apr 2022 11:21:47 +0200 Message-ID: <87pmlof00k.ffs@tglx> MIME-Version: 1.0 Content-Type: text/plain X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Pete, On Sun, Apr 10 2022 at 14:14, Thomas Gleixner wrote: > On Fri, Feb 18 2022 at 14:18, Pete Swain wrote: >> diff --git a/kernel/time/clockevents.c b/kernel/time/clockevents.c >> index 003ccf338d20..ac15412e87c4 100644 >> --- a/kernel/time/clockevents.c >> +++ b/kernel/time/clockevents.c >> @@ -245,7 +245,8 @@ static int clockevents_program_min_delta(struct clock_event_device *dev) >> >> dev->retries++; >> clc = ((unsigned long long) delta * dev->mult) >> dev->shift; >> - if (dev->set_next_event((unsigned long) clc, dev) == 0) >> + if (INDIRECT_CALL_1(dev->set_next_event, lapic_next_deadline, >> + (unsigned long) clc, dev) == 0) > > No. We are not sprinkling x86'isms into generic code. > >> --- a/kernel/time/timekeeping.c >> +++ b/kernel/time/timekeeping.c >> @@ -190,7 +190,7 @@ static inline u64 tk_clock_read(const struct tk_read_base *tkr) >> { >> struct clocksource *clock = READ_ONCE(tkr->clock); >> >> - return clock->read(clock); >> + return INDIRECT_CALL_1(clock->read, read_tsc, clock); > > Again. No X86 muck here. Just for clarification. I have absolutely no interest in opening this can of worms. The indirect call is in general more expensive on some architectures, so when we grant this for x86, then the next architecture comes around the corner and wants the same treatment. Guess how well that works and how maintainable this is. And no, you can't just go there and have a #define arch_read_favourite_clocksource read_foo because we have multiplatform kernels where the clocksource is selected at runtime which means every platform wants to be the one defining this. You can do that in your own frankenkernels, but for mainline this is not going to fly. You have to come up with something smarter than just taking your profiling results and slapping INDIRECT_CALL_*() all over the place. INDIRECT_CALL is a hack as it leaves the conditional around even if retpoline gets patched out. The kernel has mechanisms to do better than that. Let's look at tk_clock_read(). tkr->clock changes usually once maybe twice during boot. Until shutdown it might change when e.g. TSC becomes unstable and there are a few other cases like suspend/resume. But none of these events are hotpath. While we have several instances of tk_read_base, all of them have the same clock pointer, except for the rare case of suspend/resume. It's redundant storage for various reasons. So with some thought this can be implemented with static_call() which is currently supported by x86 and powerpc32, but there is no reason why it can't be supported by other architectures. INDIRECT_CALL is a x86'ism with a dependency on RETPOLINE, which will never gain traction outside of x86. Thanks, tglx