[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: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Henry Wang <Henry.Wang@xxxxxxx>
  • Date: Wed, 6 Jul 2022 07:29:50 +0000
  • Accept-language: zh-CN, en-US
  • Arc-authentication-results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 63.35.35.123) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com])
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none
  • Arc-message-signature: i=2; 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=mb5KbdQ5rA/52jZXsR1wenHO2L2amUf1FObhgDImYPg=; b=VTDh2laBww8TyknkIUzL6HEEiDlam/+TCgUD1Sx7GxLB8mrtPXqO+LAplgEOzv+kyXi8wlNlx3gNSA2agfBNNS1VOogxKWsvz+ycTs9kEq1xHXcbuOpQcC/6z3BV9dEL2uM5/1owGHadDweLv/ETbLHh9k7Dtcauo3cs+gGlYIVVZh5GjY+HEaatWfDHlCpWNDA0a0v7qOVfin8lhrW99mJnX+/ETkdxThCv+A1LcYhomDcQSE5Kl4QEm278MJ26HtWSwAUgd3LH+A456wulNH9ieHyCxEMn050JtyffHx8RKyIOmyCJNQnn/9Rr8JKJdeiiFLYrgCv2GjimBAgBfw==
  • 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=mb5KbdQ5rA/52jZXsR1wenHO2L2amUf1FObhgDImYPg=; b=KOLYgvJzosLRBSIx9a0tmaBqJwv0ae/Yfl70fcV0jUGUubTj9P9woP/tLdrRZA206gml2jNUBabOqxfvNPA0DgCJxbrLi0+CNRN6FLNBmoLuPP9q05T12jUzi6LM/44bUZrXn8quyiNWoZgAB667+bOJ1cW/ipwGypPgDSZA6kTxK+r0ieG67wVdmh/qY6JrIaEU8NcokhFlI/TU++9jMLqsDREFB2BvKX9mDKo8eS7RZlgt+F//mwDY0RVO6jH962NTNgf/ituxUKcq58HxsFO4SUoQKaoQ8Q4PhOeIDuuLbRfa6uymMKyvBy1nqktPRe9NjJt9vvreSsBlSEewvg==
  • Arc-seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=EcoAUtHdjiNgcG18HdnrMWkzdTWoeCPLzJFqZeOwCIk5mRMe2KtBB7NikKFRIDcBNMgbaObo1/xB3khVthSmjlWve+nsJ8YDHJ3X/rctEOodrevncnq2M8x3tTXtyuZOeKBYEkPNgVsScewRrALOimlWuHo7X0ENYVP4Cc2/Ab+UmBHB3fgjVsEJsMQUVnEt+7ghSq5ZTU2sglviVHcYtgj1bC21Aqxr5d/Y5VRNBPRWsz47ixR9B4RCTKkvCCvgzPgumOUz7mXpzKb367/arZSAzWyaojcatkA6y2Nq05NFIUU7X1t7lUJG6zMubnfMFogWdoRqHIkv6pRC4/zuOQ==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dOUmOD1iyalMtyCl7wacvbAIP+D3J+n5G3WXQtzw1tqwKKXLQ4zyQIJuTwyVH2gYH3xAUTaeYSYBquD3OyHUGg8yAdL69nqBIcHFGcKcocPq9F0bhLT7+dPjFl6eNAjGKx2NZLSN+uADxIiV+vJuxCQzedA00SLBoGae8hqkp+8kFhTJNksV8u8YqSvLWcBqMsxd6JX7dZswkuhK7BFATEGca2e93vdg1yQf+wtpQjdbekis8WZVu+p3vUgQSEyMAG/ERXVi3a8EScVZAh1df0WUIz9NzRIHeluwAaN3MuIWHT5UgbcVeYqonS5O65eg/eiMKML7vIC9bydqMRVNSA==
  • Authentication-results-original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com;
  • Cc: Jan Beulich <jbeulich@xxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Wei Liu <wl@xxxxxxx>, Roger Pau Monne <roger.pau@xxxxxxxxxx>
  • Delivery-date: Wed, 06 Jul 2022 07:30:12 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Nodisclaimer: true
  • Original-authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com;
  • Thread-index: AQHYZrVdmvwWiFDXRUaq3IIw27eoBK1xLw1A
  • Thread-topic: [PATCH 2/2] x86/cpuid: set MCDT_NO for non-affected models

Hi,

It seems that this patch has been stale for nearly 2 months, with the
first patch in series already merged and some discussions between
maintainers and author in the Patch #2 thread. So I am sending this
email as a gentle reminder.

Kind regards,
Henry 

> -----Original Message-----
> Subject: [PATCH 2/2] x86/cpuid: set MCDT_NO for non-affected models
> 
> 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;
> +        }
> +}
> +
>  static void cf_check init_intel(struct cpuinfo_x86 *c)
>  {
>       /* Detect the extended topology information if available */
> @@ -556,6 +623,9 @@ static void cf_check init_intel(struct cpuinfo_x86 *c)
>       if ((opt_cpu_info && !(c->apicid & (c->x86_num_siblings - 1))) ||
>           c == &boot_cpu_data )
>               intel_log_freq(c);
> +
> +     if (!cpu_has(c, X86_FEATURE_MCDT_NO))
> +             update_mcdt_no(c);
>  }
> 
>  const struct cpu_dev intel_cpu_dev = {
> diff --git a/xen/arch/x86/cpuid.c b/xen/arch/x86/cpuid.c
> index 66be1a8015..ca2ed44149 100644
> --- a/xen/arch/x86/cpuid.c
> +++ b/xen/arch/x86/cpuid.c
> @@ -360,6 +360,16 @@ static void __init calculate_host_policy(void)
> 
>      p->basic.max_leaf =
>          min_t(uint32_t, p->basic.max_leaf,   ARRAY_SIZE(p->basic.raw) - 1);
> +
> +    /*
> +     * For Intel hardware MCDT_NO might be set by Xen for models that don't
> +     * exhibit MCDT behavior but also don't have the MCDT_NO bit set in
> +     * CPUID.  Extend feat.max_subleaf beyond what hardware supports to
> include
> +     * the feature leaf containing this information.
> +     */
> +    if ( boot_cpu_has(X86_FEATURE_MCDT_NO) )
> +        p->feat.max_subleaf = max(p->feat.max_subleaf, 2u);
> +
>      p->feat.max_subleaf =
>          min_t(uint32_t, p->feat.max_subleaf, ARRAY_SIZE(p->feat.raw) - 1);
> 
> --
> 2.36.0
> 


 


Rackspace

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