Received: by 2002:a05:6a10:2785:0:0:0:0 with SMTP id ia5csp3045220pxb; Tue, 12 Jan 2021 05:09:11 -0800 (PST) X-Google-Smtp-Source: ABdhPJwjZc7f+Ikz3TGBJW6YW8mLCw4G+9pwO0nftVKHZRXF3w7BqgFPWdBqjONDVKUJiNL/p4ol X-Received: by 2002:a05:6402:7d9:: with SMTP id u25mr2224643edy.262.1610456950790; Tue, 12 Jan 2021 05:09:10 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1610456950; cv=none; d=google.com; s=arc-20160816; b=R/NomYSl/aa54cETi8Tq2bKDRuPfF7eQxDGIHA1X/pt1I6zbhUfWnTqqXwZSb/lmk0 hQTxhPmgZpHYfVg+qtR4eI5g5PwTVoPc8m48IdBLIDA7O5DyeVC9f57Ne/kJPAmMVqlM GuZBJPn71Dd4/QRM6hmaclQYSj9FgQ913g+i8tFq6Qm8mDWPrCLRiQAUQIHXtIe6TdfO 0XSbT7R3JY02pYC3ZTyNWCbjDxkWBrjR+dZIKzwdk8YXL4av9ryYxRFInnAY+n6mtJKa 73TUflgo9Np5Q+FiQdSiF934H/l/QLP4CvoO+nRAYCB21wZB6TlwzNFBinGHDKj5wB9+ ajxA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:from:references :cc:to:subject; bh=rru2hZtIuZ6nXEfjKL80iw3tlXhtK0Ys3aq2CSo0QPU=; b=vm5+dqBEkhwebqGJItAPixi83IWvma3l4Yo/XW/8apWQysila55FLxCkFafZHlqvL2 IK6pj4HnfvWNJGuAo5cpvQdc9hHQ82YzXJ0HDBfmisfYx4QHUCWg4jcu2mO6DagT+dvT PNr/LFUbk5j7ZP1UMECfIsjxGGhbbtlvDJZbTHh5CatQ9uOJ5YOiGc9NH0WlpjC5wbZk hDL6+QSOtnPQ+SYaE7xcvVJYht83b12QnSTxpl5n0dqDrDbwGwhAX3zukd7tVZ6+/OX7 k9bf6WcSbK/5KGMXB08vBd+pYRWFNBqaXRfLGtGxI3zvoEmJoO8RYsxYp3LEXEbQez6r bMKw== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id m1si1061961eja.95.2021.01.12.05.08.46; Tue, 12 Jan 2021 05:09:10 -0800 (PST) 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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1733223AbhALMVp (ORCPT + 99 others); Tue, 12 Jan 2021 07:21:45 -0500 Received: from foss.arm.com ([217.140.110.172]:45128 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727687AbhALMVo (ORCPT ); Tue, 12 Jan 2021 07:21:44 -0500 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id A082E1042; Tue, 12 Jan 2021 04:20:58 -0800 (PST) Received: from [10.57.39.145] (unknown [10.57.39.145]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 180C23F66E; Tue, 12 Jan 2021 04:20:54 -0800 (PST) Subject: Re: [PATCH v3 09/21] arm64: cpufeature: Add global feature override facility To: Marc Zyngier Cc: Catalin Marinas , linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, linux-kernel@vger.kernel.org, Will Deacon , Mark Rutland , David Brazdil , Alexandru Elisei , Ard Biesheuvel , Jing Zhang , Ajay Patil , Prasad Sodagudi , Srinivas Ramana , James Morse , Julien Thierry , kernel-team@android.com References: <20210111132811.2455113-1-maz@kernel.org> <20210111132811.2455113-10-maz@kernel.org> <20210111184154.GC17941@gaia> <129db8bd3913a90c96d4cfe4f55e27a0@kernel.org> From: Suzuki K Poulose Message-ID: <7720a317-2591-3b60-41ce-772bf168bee7@arm.com> Date: Tue, 12 Jan 2021 12:20:45 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.6.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-GB Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 1/12/21 11:51 AM, Marc Zyngier wrote: > On 2021-01-12 11:50, Marc Zyngier wrote: >> Hi Suzuki, >> >> On 2021-01-12 09:17, Suzuki K Poulose wrote: >>> Hi Marc, >>> >>> On 1/11/21 7:48 PM, Marc Zyngier wrote: >> >> [...] >> >>>> diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c >>>> index 894af60b9669..00d99e593b65 100644 >>>> --- a/arch/arm64/kernel/cpufeature.c >>>> +++ b/arch/arm64/kernel/cpufeature.c >>>> @@ -774,6 +774,7 @@ static void __init init_cpu_ftr_reg(u32 sys_reg, u64 new) >>>>       u64 strict_mask = ~0x0ULL; >>>>       u64 user_mask = 0; >>>>       u64 valid_mask = 0; >>>> +    u64 override_val = 0, override_mask = 0; >>>> >>>>       const struct arm64_ftr_bits *ftrp; >>>>       struct arm64_ftr_reg *reg = get_arm64_ftr_reg(sys_reg); >>>> @@ -781,9 +782,35 @@ static void __init init_cpu_ftr_reg(u32 sys_reg, u64 new) >>>>       if (!reg) >>>>           return; >>>> >>>> +    if (reg->override_mask && reg->override_val) { >>>> +        override_mask = *reg->override_mask; >>>> +        override_val = *reg->override_val; >>>> +    } >>>> + >>>>       for (ftrp = reg->ftr_bits; ftrp->width; ftrp++) { >>>>           u64 ftr_mask = arm64_ftr_mask(ftrp); >>>>           s64 ftr_new = arm64_ftr_value(ftrp, new); >>>> +        s64 ftr_ovr = arm64_ftr_value(ftrp, override_val); >>>> + >>>> +        if ((ftr_mask & override_mask) == ftr_mask) { >>>> +            if (ftr_ovr < ftr_new) { >>> >>> Here we assume that all the features are FTR_LOWER_SAFE. We could >>> probably use arm64_ftr_safe_value(ftrp, ftr_new, ftr_ovr) here ? >>> That would cover us for both HIGHER_SAFE and LOWER_SAFE features. >>> However that may be restrictive for FTR_EXACT, as we the safe >>> value would be set to "ftr->safe_val". I guess that may be better >>> than forcing to use an unsafe value for the boot CPU, which could >>> anyway conflict with the other CPUs and eventually trigger the >>> ftr alue to be safe_val. >> >> I like the idea of using the helper, as it cleanups up the code a bit. >> However, not being to set a feature to a certain value could be restrictive, >> as in general, it means that we can only disable a feature and not adjust >> its level of support. >> >> Take PMUVER for example: with the helper, I can't override it from v8.4 to >> v8.1. I can only go to v8.0. > > Actually, we can only *disable* the PMU altogether. Same question though... It depends on two things : 1) What is the safe value for an EXACT typed feature ? Usually, that means either disabled, or the lowest possible value. 2) How is this value consumed ? a) i.e, Do we use the per-CPU value Then none of these changes have any effect b) System wide value ? Then we get the safe value as "influenced" by the infrastructure. The safe value we use for EXACT features is exclusively for making sure that the system uses the safe assumption and thus should be the best option. To answer your question, for PMU, it is 0, implies, v8.0. Or we could update the safe value to -1 (0xf) as the safe value, which is a bit more safer, kind of implying that the PMU is not a standard one. Cheers Suzuki > >         M. > >> >> Is it something we care about? >> >> Thanks, >> >>         M. >