[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 2/2] x86/cpuid: set MCDT_NO for non-affected models


  • To: Roger Pau Monne <roger.pau@xxxxxxxxxx>, "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Andrew Cooper <Andrew.Cooper3@xxxxxxxxxx>
  • Date: Fri, 13 May 2022 11:18:47 +0000
  • Accept-language: en-GB, en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=On1+Yugy0e7XDuqPkB7HA1FEytdu/qaeXgWsOI6dlvo=; b=QSnAmXpIUkzl38ZxyB1zgvEjRFqkTgBDDsec8TA4AeAwY3Fqaw76ArCt1q6GwbC0Jf8Uv99qR4idr+e0iLtKM7/jsmi3lNeDQieYJzB5LOZBzF9tPcY59KguGISzk5iCeZwvjyyt8DDJ/3PQj7J0dHGyQiAeeZzz+MivzTRLuXttDCBWJmnXId6L+m788RvFsl6Jpdnl334CXoXjH85QqYFs1osmDVvHcE78tj7xaXAvE3klzSl60g+uGcHTlC9w6H0reHtBhUIZDeMc5YDpevszy+Lh7pPWe0bW+yFnczJt9CsvbEeT2QceczcI+OUFcVx6MD7b1pOs8u/wCweIoA==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hYtqxuapzrtvkNg98Dpvp9snp5YmTlR+Q1DUKEaPxxw30bR0wIIPSz1SRNnTzLOfVMaNMUSrt3Vubmxlu69D5V4OzoB1UD9Z3oeezrkGoPFIEus+DLlD0HhbPex9+BlzH7rIJaq39eTAXNJeGbnDbRKqSGuHHJmKg2qUcB8d0y2i97hC33myO/gP+OrwSL94aXSVtWWxqA35D4WsN41WL/i4gxB4IM9oKHcnp2q4znWiktUmfY3Xz0ot7L8eNRFWJI5JVqDLhfSeMIm92mhvTKxeFUfpiSEfHB1nExhYw692SVyQKQks16tiBw3TY3QP16MSp5iUx/9WnC3RzI3UZQ==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com;
  • Cc: Jan Beulich <jbeulich@xxxxxxxx>, Wei Liu <wl@xxxxxxx>
  • Delivery-date: Fri, 13 May 2022 11:18:59 +0000
  • Ironport-data: A9a23:nLqUw6vbfaa+1cKFEDAcGIQLkufnVCVfMUV32f8akzHdYApBsoF/q tZmKWCFa/qKM2CgeIgjOojg9EwCu5HQz4VgT1M+qHw2QSlA+JbJXdiXEBz9bniYRiHhoOOLz Cm8hv3odp1coqr0/0/1WlTZhSAgk/nOHNIQMcacUsxLbVYMpBwJ1FQywobVvqYy2YLjW17U4 ouryyHiEATNNwBcYzp8B52r8HuDjNyq0N/PlgVjDRzjlAa2e0g9VPrzF4noR5fLatA88tqBb /TC1NmEElbxpH/BPD8HfoHTKSXmSpaKVeSHZ+E/t6KK2nCurQRquko32WZ1he66RFxlkvgoo Oihu6BcRi9xL4mcwN1AbiVXTQR8GfNZqLzEBl+W5Jn7I03uKxMAwt1IJWRvZ8g037gyBmtDs /sFNDoKcxaPwfqsx662QfVtgcJlK9T3OIQYuTdryjSx4fQOGMifBfmVo4IJmm5v36iiHt6HD yYdQRNpYA7NfFtkPVAPBYhltOypmmP+Y3tTr1f9Sa8fvDGJl1Mti+eF3Nz9ev+4aflwhkWhu 0Xc71/3BTImM+yD8G/Qmp6rrqqV9c/hY6oCGbv9+vN0jVm7wm0IFAZQRVa9ueO+iEO1R5RYM UN80igkoLU29UerZsLgRBD+q3mB1jYDX/JAHut87xuCopc4+C6cD2kACzJENtovsZZsQSRwj wDQ2dT0GTZorbuZD2qH8auZpi+zPi5TKnIeYSgDTk0O5NyLTJwPsy8jh+1LSMad5uAZ0xmrq 9xWhEDSX4kusPM=
  • Ironport-hdrordr: A9a23:xd4KGKyF6GMk3ReIlbovKrPxdegkLtp133Aq2lEZdPULSKGlfp GV9sjziyWetN9IYgBapTiBUJPwIk81bfZOkMUs1MSZLXPbUQyTXc5fBOrZsnDd8kjFmtK1up 0QFJSWZOeQMbE+t7eD3ODaKadv/DDkytHPuQ629R4EIm9XguNbnn5E422gYy9LrXx9dP4E/e 2nl696TlSbGUg/X4CePD0oTuLDr9rEmNbNehgdHSMq7wGIkHeB9KP6OwLw5GZfbxp/hZMZtU TVmQ3w4auu99uhzAXH6mPV55NK3PP819p4AtCWgMR9EESutu/oXvUiZ1SxhkFwnAid0idsrD AKmWZnAy1H0QKVQohym2q15+Cv6kd315ao8y7kvZKqm72EeNt9MbsBuWsRSGqm16Jr1usMr5 5jziaXsYFaAgjHmzm479/UVwtynk7xunY6l/UP5kYvGbf2RYUh27D3xnklWavo3RiKmrwPAa 1rFoXR9fxWeVSVYzTQuXRu2sWlWjA2Eg2dSkYPt8SJ23wO9UoJhXcw1YgahDMN5Zg9Q55L66 DNNblpjqhHSosTYbhmDOkMTMOrAijGQA7KMmiVPVP7fZt3cE7lutry+vE49euqcJsHwN87n4 nASkpRsSood0fnGaS1rep2G9D2MRGAtBjWu7FjDsJCy8zBrZLQQF6+YUFrlde8qPMCBcCeU+ qvOfttcoreEVc=
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Thread-index: AQHYZrUyMvxAwXZZoEuS2l9n2AZByq0cqQOA
  • Thread-topic: [PATCH 2/2] x86/cpuid: set MCDT_NO for non-affected models

On 13/05/2022 11:35, Roger Pau Monne wrote:
> Some CPU models don't exhibit MCDT behavior, but also don't expose
> MCDT_NO.  Set the MCDT_NO bit for CPUs known to not exhibit the
> behavior, so guests can get this information, as using
> family/model/stepping detection when running virtualized is not to be
> relied.
>
> Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
> ---
>  xen/arch/x86/cpu/intel.c | 70 ++++++++++++++++++++++++++++++++++++++++
>  xen/arch/x86/cpuid.c     | 10 ++++++
>  2 files changed, 80 insertions(+)
>
> diff --git a/xen/arch/x86/cpu/intel.c b/xen/arch/x86/cpu/intel.c
> index dc6a0c7807..d821f460ae 100644
> --- a/xen/arch/x86/cpu/intel.c
> +++ b/xen/arch/x86/cpu/intel.c
> @@ -518,6 +518,73 @@ static void intel_log_freq(const struct cpuinfo_x86 *c)
>      printk("%u MHz\n", (factor * max_ratio + 50) / 100);
>  }
>  
> +void update_mcdt_no(struct cpuinfo_x86 *c)
> +{
> +#define FAM6_MODEL(m, s, c) { 6, m, s, c }
> +    /*
> +     * List of models that do not exhibit MCDT behavior, but might not
> +     * advertise MCDT_NO on CPUID.
> +     */
> +    static const struct {
> +        uint8_t family;
> +        uint8_t model;
> +        uint8_t stepping;
> +        bool check_stepping;
> +    } mcdt_no[] = {
> +        /* Haswell Server EP, EP4S. */
> +        FAM6_MODEL(0x3f, 2, true),
> +        /* Elkhart Lake. */
> +        FAM6_MODEL(0x3f, 4, true),
> +        /* Cherryview. */
> +        FAM6_MODEL(0x4c, 0, false),
> +        /* Broadwell Server E, EP, EP4S, EX. */
> +        FAM6_MODEL(0x4f, 0, false),
> +        /* Broadwell DE V2, V3. */
> +        FAM6_MODEL(0x56, 3, true),
> +        /* Broadwell DE Y0. */
> +        FAM6_MODEL(0x56, 4, true),
> +        /* Broadwell DE A1, Hewitt Lake. */
> +        FAM6_MODEL(0x56, 5, true),
> +        /* Anniedale. */
> +        FAM6_MODEL(0x5a, 0, false),
> +        /* Apollo Lake. */
> +        FAM6_MODEL(0x5c, 9, true),
> +        FAM6_MODEL(0x5c, 0xa, true),
> +        /* Denverton. */
> +        FAM6_MODEL(0x5f, 1, true),
> +        /* XMM7272. */
> +        FAM6_MODEL(0x65, 0, false),
> +        /* Cougar Mountain. */
> +        FAM6_MODEL(0x6e, 0, false),
> +        /* Butter. */
> +        FAM6_MODEL(0x75, 0, false),
> +        /* Gemini Lake. */
> +        FAM6_MODEL(0x7a, 1, true),
> +        FAM6_MODEL(0x7a, 8, true),
> +        /* Snowridge. */
> +        FAM6_MODEL(0x86, 4, true),
> +        FAM6_MODEL(0x86, 5, true),
> +        FAM6_MODEL(0x86, 7, true),
> +        /* Lakefield B-step. */
> +        FAM6_MODEL(0x8a, 1, true),
> +        /* Elkhart Lake. */
> +        FAM6_MODEL(0x96, 1, true),
> +        /* Jasper Lake. */
> +        FAM6_MODEL(0x9c, 0, true),
> +        { }
> +    };
> +#undef FAM6_MODEL
> +    const typeof(mcdt_no[0]) *m;
> +
> +    for (m = mcdt_no; m->family | m->model | m->stepping; m++)
> +        if ( c->x86 == m->family && c->x86_model == m->model &&
> +             (!m->check_stepping || c->x86_mask == m->stepping) )
> +        {
> +            __set_bit(X86_FEATURE_MCDT_NO, c->x86_capability);
> +            break;
> +        }
> +}

Please could we see about using x86_match_cpu() rather than basically
opencoding it?  Linux's bug.c has some fairly comprehensive examples of
how to do tables like this with it.

Also, can we use our shiny new intel-family.h names?

The stepping checks guidance seems suspect.  Lemme ping some people
about that.  I suspect that means "we checked the production CPUs but
didn't look at the pre-prod hardware" which in practice means we don't
care about steppings listed.

~Andrew

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.