Received: by 2002:ab2:1149:0:b0:1f3:1f8c:d0c6 with SMTP id z9csp1610610lqz; Mon, 1 Apr 2024 11:19:36 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCWcut339HNFBlFSGSKWCUtpJcWWX/ZqlB12uQSYWz5L6EJtwOBLEVcLqfL/j+I0P1z5pmcwdiuIDNmUT0YDkGuzLwf8TL+TntAPgr1UoA== X-Google-Smtp-Source: AGHT+IG3/uncc43/g9LX6x63Eb03tQD4Fu2Kfpc5X9x/iZXjfjXKb1xwYT0EofhqKKz82zy5HJME X-Received: by 2002:a05:6870:587:b0:229:f6d4:32f5 with SMTP id m7-20020a056870058700b00229f6d432f5mr11045418oap.1.1711995576274; Mon, 01 Apr 2024 11:19:36 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1711995576; cv=pass; d=google.com; s=arc-20160816; b=NR7EwUwE8GV6tq2wYQFYmnVJ+F3hM5ALTTC22utYvfHbb7GyptpqqGr+JXKUBFxjT5 oW9VhpDqognWklYn3AHK4RBAxtQJXutswIuBiZuJJeuYijyzKAVdED3Ap4ZjDGh4Itf7 UIRxiWk8WuWqj5oJc1wNNMYPhnCXAl+pBsfwwYo00zcZkV5jEcEWduH1XaVYTNCX5uaB TzKJ07UuZ120P1iELuQ5pV28TyFDVa9FDF6EnZYs3zSPcYowMzZuUSB3sc5T/eJKXd/Z gg8v2OR8faVqmp9+pf/sEzpcN547T0O0NSj6O0hlpqGZk5V9ixYnN3Ni9F9sLTdhl1ZC 1uvw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=in-reply-to:content-disposition:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:message-id:subject:cc :to:from:date:dkim-signature; bh=hqKBuFVvAyW5D26dW404XNVOBzZ8VIvU0o0CNfp/51Q=; fh=SRKKsI8ItZIW5i4GLQq2Rf9iZv39NdycHFGuJ4AsUfs=; b=QzbVeeNlDE8PtxrjTmjlqq72eOw5vsoZVJDyaClY9gkKp9GhU1H25azD88gavessbb 3KUTQGSi60aRs7XQLiliouAWK848FzR12j77JYvi6FVgIw3Mle5u8JCAK8McQNfqwz4m mU1NO7GK1LzanrkShhyKZ7cN2C1df5YEKQXmebu6jR/I/NjA3ZIHPOkex8Y8uOvkcTpm U6Vpa66hjT8eQMIOUBRSL0U786WuXMG3W9WAyyTQZTJkVcSaJpkYfZN3zyPzdT2ebHRo GAZjH7iBoTenmo0GfqMUsWqVjdWDbP2Y7sn1Ok9CNg9ddtyB1YLIP5YvcHmTxEvl4Lfa x5/w==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=c5Ct1mh8; arc=pass (i=1 spf=pass spfdomain=intel.com dkim=pass dkdomain=intel.com dmarc=pass fromdomain=intel.com); spf=pass (google.com: domain of linux-kernel+bounces-126941-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-126941-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id l4-20020a639844000000b005e84291790dsi9684177pgo.581.2024.04.01.11.19.35 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 01 Apr 2024 11:19:36 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-126941-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=c5Ct1mh8; arc=pass (i=1 spf=pass spfdomain=intel.com dkim=pass dkdomain=intel.com dmarc=pass fromdomain=intel.com); spf=pass (google.com: domain of linux-kernel+bounces-126941-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-126941-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 6F8FB282F73 for ; Mon, 1 Apr 2024 18:19:06 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id C1CA44F5ED; Mon, 1 Apr 2024 18:19:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="c5Ct1mh8" Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.10]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 27E544D5A0 for ; Mon, 1 Apr 2024 18:18:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.10 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711995541; cv=none; b=Vvqgz/fmNLCRZZTP37dFLIv1Js2WCKDl4nAuJ0k/NUMhjz2PBI5RpNAp3X1eIUdZW0kTtk+suKvetMqv3mppFHhHks5s7FcLxslA89yLLzRGcchwzP9bl+Y2uI+UuDngK2x6poztRyl/wQp0daweZfWOhtqpDL4nZEy24GyLeUA= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711995541; c=relaxed/simple; bh=s1LuEzTGRMEfdpCmX5j5fPzRsUox6WEKCEEwRqhKz60=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=MOHjuBSq01SpUdi79fs3JLQFN3NCQZCJtZdPUTXFzQDqGBL7AVBnOD11rUXOUPHVgm1cWSdCoK+Xw7w3wQU3uGYnMyuVBzKWI1qz3R8S9tvdpOA7kXv61QI4MPcLoleU+YWaQQTQqENbzT0kXoLKS4u0QeFj2i5QNgpzs2IeDZ8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=c5Ct1mh8; arc=none smtp.client-ip=192.198.163.10 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1711995539; x=1743531539; h=date:from:to:cc:subject:message-id:references: mime-version:in-reply-to; bh=s1LuEzTGRMEfdpCmX5j5fPzRsUox6WEKCEEwRqhKz60=; b=c5Ct1mh8EJcmrQinKrGwqOc70K82Bs6dbpAAs8crjF0x18Q/7EjZadda DzUtCgrSenb2M0saeBySt/kK4kJO7v06K2n7BD8+rZZbmqxTkXTWsxKDt PhWN2HLovsDIVTsM9U7pFKwrUJ9YU2NowA0GsNAzPlmJxGCDoQsqMemiJ MGd6L5Y4Hiidg2stPbplpcRbryN6tYnmNH41pjQJHJsewfO88oDuDZPPQ lmDDykyWX6bl/4wJUCVrXEhctB4WpZbEHMWdiHSG2AgdUoOffwPYMmdxN VFkLkSlIFi2j0HJln0aS45dhfGXeyP5uOQg8yKSvHTa08NLL2XDp4slJ7 g==; X-CSE-ConnectionGUID: fNn76pUqQu2H74kLNuPgbg== X-CSE-MsgGUID: 37v5wNgQTIyVSeMNKLVbGg== X-IronPort-AV: E=McAfee;i="6600,9927,11031"; a="18494955" X-IronPort-AV: E=Sophos;i="6.07,172,1708416000"; d="scan'208";a="18494955" Received: from fmviesa001.fm.intel.com ([10.60.135.141]) by fmvoesa104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Apr 2024 11:18:58 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,172,1708416000"; d="scan'208";a="48998734" Received: from agluck-desk3.sc.intel.com (HELO agluck-desk3) ([172.25.222.105]) by smtpauth.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Apr 2024 11:18:58 -0700 Date: Mon, 1 Apr 2024 11:18:57 -0700 From: Tony Luck To: Borislav Petkov Cc: "x86@kernel.org" , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH 01/74] x86/cpu/vfm: Add/initialize x86_vfm field to struct cpuinfo_x86 Message-ID: References: <20240328163746.243023-1-tony.luck@intel.com> <20240328163746.243023-2-tony.luck@intel.com> <20240328164811.GDZgWfSzAWZXO7dUky@fat_crate.local> <20240328165251.GEZgWgY1Clb9z4t3VX@fat_crate.local> <20240328171204.GGZgWk5JNOzQzoaEql@fat_crate.local> <20240329114007.GAZgaolwSFtjHStiuL@fat_crate.local> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20240329114007.GAZgaolwSFtjHStiuL@fat_crate.local> On Fri, Mar 29, 2024 at 12:40:07PM +0100, Borislav Petkov wrote: > Because from looking at your set, I don't see a slick way to check > whether a concrete f/m/s tuple belongs to a range without involved > checking. > > For example, models: > > case 0x30 ... 0x4f: > case 0x60 ... 0x7f: > case 0x90 ... 0x91: > case 0xa0 ... 0xaf: > > are all Zen2. I could do a X86_MATCH_VF_MODEL_RANGE and we even had > a patch like that at some point but it didn't go in. But even if I did > that, I'd still need to do x86_match_cpu() instead of the current > X86_FEATURE_ZEN* checks we're doing. I realized the problem with ranges is the order I put the bits into the x86_vfm field. If I swap around to put the vendor in high bits, family in the middle, model in low bits like this: struct cpuinfo_x86 { union { struct { __u8 x86_model; __u8 x86; /* CPU family */ __u8 x86_vendor; /* CPU vendor */ __u8 x86_reserved; }; __u32 x86_vfm; /* combined vendor, family, model */ }; Then ranges of models within (or across) familiies can work. E.g. the AMD Zen generation checking could be changed from: /* Figure out Zen generations: */ switch (c->x86) { case 0x17: switch (c->x86_model) { case 0x00 ... 0x2f: case 0x50 ... 0x5f: setup_force_cpu_cap(X86_FEATURE_ZEN1); break; case 0x30 ... 0x4f: case 0x60 ... 0x7f: case 0x90 ... 0x91: case 0xa0 ... 0xaf: setup_force_cpu_cap(X86_FEATURE_ZEN2); break; default: goto warn; } break; case 0x19: switch (c->x86_model) { case 0x00 ... 0x0f: case 0x20 ... 0x5f: setup_force_cpu_cap(X86_FEATURE_ZEN3); break; case 0x10 ... 0x1f: case 0x60 ... 0xaf: setup_force_cpu_cap(X86_FEATURE_ZEN4); break; default: goto warn; } break; case 0x1a: switch (c->x86_model) { case 0x00 ... 0x0f: case 0x20 ... 0x2f: case 0x40 ... 0x4f: case 0x70 ... 0x7f: setup_force_cpu_cap(X86_FEATURE_ZEN5); break; default: goto warn; } break; default: break; } to: /* Figure out Zen generations: */ switch (c->x86_vfm) { case AFM(0x17, 0x00) ... AFM(0x17, 0x2f): case AFM(0x17, 0x50) ... AFM(0x17, 0x5f): setup_force_cpu_cap(X86_FEATURE_ZEN1); break; case AFM(0x17, 0x30) ... AFM(0x17, 0x4f): case AFM(0x17, 0x60) ... AFM(0x17, 0x7f): case AFM(0x17, 0x90) ... AFM(0x17, 0x91): case AFM(0x17, 0xa0) ... AFM(0x17, 0xaf): setup_force_cpu_cap(X86_FEATURE_ZEN2); break; case AFM(0x19, 0x00) ... AFM(0x19, 0x0f): case AFM(0x19, 0x20) ... AFM(0x19, 0x5f): setup_force_cpu_cap(X86_FEATURE_ZEN3); break; case AFM(0x19, 0x10) ... AFM(0x19, 0x1f): case AFM(0x19, 0x60) ... AFM(0x19, 0xaf): setup_force_cpu_cap(X86_FEATURE_ZEN4); break; case AFM(0x1a, 0x00) ... AFM(0x1a, 0x0f): case AFM(0x1a, 0x20) ... AFM(0x1a, 0x2f): case AFM(0x1a, 0x40) ... AFM(0x1a, 0x4f): case AFM(0x1a, 0x70) ... AFM(0x1a, 0x7f): setup_force_cpu_cap(X86_FEATURE_ZEN5); break; default: goto warn; } That's more visually more compact, but maybe not any more readable. But you would have the *option* to do this. I'll post V2 of parts 1 & 2 with the re-ordered fields. None of the rest of the patches need to change. -Tony