Received: by 2002:a05:6358:9144:b0:117:f937:c515 with SMTP id r4csp1302684rwr; Fri, 5 May 2023 11:59:45 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5mbzqCvD7TeHkKQlB0kgToHIT+W5ts7rvLXhgU/15V2I1dKnHFtYpImYjKLI8berY2GmU8 X-Received: by 2002:a05:6a20:3d94:b0:d9:6660:8746 with SMTP id s20-20020a056a203d9400b000d966608746mr4465564pzi.18.1683313185626; Fri, 05 May 2023 11:59:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683313185; cv=none; d=google.com; s=arc-20160816; b=F6iE8EFEtnWQBwnwUn6UPYmYtZHT94NnjYTTUtTN0cuZnc3Fxl2pCcADNDsGDzA/po q1CCNPGrjn6Kj+g1LOdaBTEQl5MFlgKCTaiWxLKHV0GfT8+1pmilFbtNx0vPngE2LAbO N8N5aKq+glbCXV0f7KwGZtMpE5Jbyvnuy9udWLbzYGPkoyizDiQUpP7cq+R3KK7ym4ZU kJum6ieYT75XgVyW4Pm8VwbUHzDq9L1ydIDmO+0nz3NYISwz1HEqjsEHniL9E3W3w96N Fsc8HNS9tDSXvXF3vTTs6Jao5XjrzBZ4W8j9T5BrRcYZ/Ntrsr84AhKlW/IjhMMBxQ2h LFnw== 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=FFIT+MIXclPqiy46BnxVsu0PYxvhZXqRoK4IPFWa2ZI=; b=mPod7LFp/VAfocVME9elDY9LfVr2U2vAqqshwReZhrVHKQrKKxO3JUl/0/ndTUiSY4 Oq7++LKw2oqEdXtvJM6dwA/cenT85GIyPR0TcEHfet6TpkEQbHf+gAbL4glvapuNQ3+g x5593QQIlSRkf7K7ZRV3C4H1VDzKl5ID55ouPeZ5ByCxWibHqwOhxK0w+jRu2nWBIj// LkAomOoYyHFjfXycu4AlfTli/SOSNr6Bko+ztWyTat49asPHoHSZjiHbpMECWYdV5rG0 j0BbCuAx6BzWAGk/GAm0cHjA8KqnELzkn4oYtcfh1pqi75voYJqc8zuZnpMoNT7EgWcR Cjhg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@alien8.de header.s=dkim header.b=qqk1DTCK; 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=NONE dis=NONE) header.from=alien8.de Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id w17-20020a639351000000b0052c79bbbf99si2608936pgm.408.2023.05.05.11.59.30; Fri, 05 May 2023 11:59:45 -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=@alien8.de header.s=dkim header.b=qqk1DTCK; 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=NONE dis=NONE) header.from=alien8.de Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233336AbjEESuI (ORCPT + 99 others); Fri, 5 May 2023 14:50:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57102 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233335AbjEESuB (ORCPT ); Fri, 5 May 2023 14:50:01 -0400 Received: from mail.skyhub.de (mail.skyhub.de [IPv6:2a01:4f8:190:11c2::b:1457]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 10A98203E0 for ; Fri, 5 May 2023 11:49:59 -0700 (PDT) Received: from zn.tnic (p5de8e8ea.dip0.t-ipconnect.de [93.232.232.234]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.skyhub.de (SuperMail on ZX Spectrum 128k) with ESMTPSA id CD08D1EC0421; Fri, 5 May 2023 20:49:57 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=alien8.de; s=dkim; t=1683312597; 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: content-transfer-encoding:in-reply-to:in-reply-to: references:references; bh=FFIT+MIXclPqiy46BnxVsu0PYxvhZXqRoK4IPFWa2ZI=; b=qqk1DTCKxsQcCH9iUrAboa0RZW8hIxMm7/JeI88HPDqgKa9TNQ468t+nRH8+vS3dWUJJX1 FZgD8mmQwVsryvaWyTgDFPWOWhN/LumNh9EmJaTvDsn5JXTTLV588/CEiywK/Tq2chcg8/ Woc6wSGV7ORRkIVRci2lknyF/Dj+iZs= Date: Fri, 5 May 2023 20:49:52 +0200 From: Borislav Petkov To: Juergen Gross Cc: linux-kernel@vger.kernel.org, x86@kernel.org, mikelley@microsoft.com, Thomas Gleixner , Ingo Molnar , Dave Hansen , "H. Peter Anvin" Subject: Re: [PATCH v6 02/16] x86/mtrr: replace some constants with defines Message-ID: <20230505184952.GBZFVP0DkRrJiI+84Y@fat_crate.local> References: <20230502120931.20719-1-jgross@suse.com> <20230502120931.20719-3-jgross@suse.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20230502120931.20719-3-jgross@suse.com> X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,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 On Tue, May 02, 2023 at 02:09:17PM +0200, Juergen Gross wrote: > Instead of using constants in MTRR code, use some new #defines. > > Replace size_or_mask and size_and_mask with the much easier concept of > high reserved bits. This is the better commit title than what's there now because the patch does more than just replacing some constants with defines. Therefore my question to patch 1. Anyway, I'll fix it up. Also, some minor cleanups ontop: --- diff --git a/arch/x86/include/uapi/asm/mtrr.h b/arch/x86/include/uapi/asm/mtrr.h index 376563f2bac1..e314969a5e6d 100644 --- a/arch/x86/include/uapi/asm/mtrr.h +++ b/arch/x86/include/uapi/asm/mtrr.h @@ -84,8 +84,8 @@ typedef __u8 mtrr_type; struct mtrr_state_type { struct mtrr_var_range var_ranges[MTRR_MAX_VAR_RANGES]; mtrr_type fixed_ranges[MTRR_NUM_FIXED_RANGES]; - unsigned char enabled; - unsigned char have_fixed; + bool enabled; + bool have_fixed; mtrr_type def_type; }; diff --git a/arch/x86/kernel/cpu/mtrr/generic.c b/arch/x86/kernel/cpu/mtrr/generic.c index 59b48bd8380c..3f0811b2fd18 100644 --- a/arch/x86/kernel/cpu/mtrr/generic.c +++ b/arch/x86/kernel/cpu/mtrr/generic.c @@ -38,14 +38,8 @@ u64 mtrr_tom2; struct mtrr_state_type mtrr_state; EXPORT_SYMBOL_GPL(mtrr_state); -static u32 phys_hi_rsvd; - -void __init mtrr_set_mask(void) -{ - unsigned int phys_addr = boot_cpu_data.x86_phys_bits; - - phys_hi_rsvd = GENMASK(31, phys_addr - 32); -} +/* Reserved bits in the high portion of the MTRRphysBaseN MSR. */ +u32 phys_hi_rsvd; /* * BIOS is expected to clear MtrrFixDramModEn bit, see for example @@ -231,8 +225,7 @@ static u8 mtrr_type_lookup_variable(u64 start, u64 end, u64 *partial_end, if ((start & mask) != (base & mask)) continue; - curr_match = mtrr_state.var_ranges[i].base_lo & - MTRR_PHYSBASE_TYPE; + curr_match = mtrr_state.var_ranges[i].base_lo & MTRR_PHYSBASE_TYPE; if (prev_match == MTRR_TYPE_INVALID) { prev_match = curr_match; continue; @@ -462,7 +455,7 @@ bool __init get_mtrr_state(void) vrs = mtrr_state.var_ranges; rdmsr(MSR_MTRRcap, lo, dummy); - mtrr_state.have_fixed = !!(lo & MTRR_CAP_FIX); + mtrr_state.have_fixed = lo & MTRR_CAP_FIX; for (i = 0; i < num_var_ranges; i++) get_mtrr_var_range(i, &vrs[i]); @@ -471,8 +464,7 @@ bool __init get_mtrr_state(void) rdmsr(MSR_MTRRdefType, lo, dummy); mtrr_state.def_type = lo & MTRR_DEF_TYPE_TYPE; - mtrr_state.enabled = (lo & MTRR_DEF_TYPE_ENABLE) >> - MTRR_STATE_SHIFT; + mtrr_state.enabled = (lo & MTRR_DEF_TYPE_ENABLE) >> MTRR_STATE_SHIFT; if (amd_special_default_mtrr()) { unsigned low, high; @@ -585,7 +577,7 @@ static void generic_get_mtrr(unsigned int reg, unsigned long *base, rdmsr(MTRRphysMask_MSR(reg), mask_lo, mask_hi); - if ((mask_lo & MTRR_PHYSMASK_V) == 0) { + if (!(mask_lo & MTRR_PHYSMASK_V)) { /* Invalid (i.e. free) range */ *base = 0; *size = 0; @@ -700,9 +692,8 @@ static unsigned long set_mtrr_state(void) * Set_mtrr_restore restores the old value of MTRRdefType, * so to set it we fiddle with the saved value: */ - if ((deftype_lo & MTRR_DEF_TYPE_TYPE) != mtrr_state.def_type - || ((deftype_lo & MTRR_DEF_TYPE_ENABLE) >> MTRR_STATE_SHIFT) != - mtrr_state.enabled) { + if ((deftype_lo & MTRR_DEF_TYPE_TYPE) != mtrr_state.def_type || + ((deftype_lo & MTRR_DEF_TYPE_ENABLE) >> MTRR_STATE_SHIFT) != mtrr_state.enabled) { deftype_lo = (deftype_lo & MTRR_DEF_TYPE_DISABLE) | mtrr_state.def_type | @@ -719,8 +710,7 @@ void mtrr_disable(void) rdmsr(MSR_MTRRdefType, deftype_lo, deftype_hi); /* Disable MTRRs, and set the default type to uncached */ - mtrr_wrmsr(MSR_MTRRdefType, deftype_lo & MTRR_DEF_TYPE_DISABLE, - deftype_hi); + mtrr_wrmsr(MSR_MTRRdefType, deftype_lo & MTRR_DEF_TYPE_DISABLE, deftype_hi); } void mtrr_enable(void) diff --git a/arch/x86/kernel/cpu/mtrr/mtrr.c b/arch/x86/kernel/cpu/mtrr/mtrr.c index fddc4e0c6626..1067f128bded 100644 --- a/arch/x86/kernel/cpu/mtrr/mtrr.c +++ b/arch/x86/kernel/cpu/mtrr/mtrr.c @@ -627,7 +627,7 @@ void __init mtrr_bp_init(void) { const char *why = "(not available)"; - mtrr_set_mask(); + phys_hi_rsvd = GENMASK(31, boot_cpu_data.x86_phys_bits - 32); if (cpu_feature_enabled(X86_FEATURE_MTRR)) { mtrr_if = &generic_mtrr_ops; diff --git a/arch/x86/kernel/cpu/mtrr/mtrr.h b/arch/x86/kernel/cpu/mtrr/mtrr.h index a00987e6cc1c..1028a2b67961 100644 --- a/arch/x86/kernel/cpu/mtrr/mtrr.h +++ b/arch/x86/kernel/cpu/mtrr/mtrr.h @@ -58,6 +58,7 @@ extern const struct mtrr_ops *mtrr_if; extern unsigned int num_var_ranges; extern u64 mtrr_tom2; extern struct mtrr_state_type mtrr_state; +extern u32 phys_hi_rsvd; void mtrr_set_mask(void); void mtrr_state_warn(void); -- Regards/Gruss, Boris. https://people.kernel.org/tglx/notes-about-netiquette