lkml.org 
[lkml]   [2021]   [Sep]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH Part2 v5 03/45] x86/sev: Add the host SEV-SNP initialization support
    On Fri, Aug 20, 2021 at 10:58:36AM -0500, Brijesh Singh wrote:
    > @@ -542,6 +544,10 @@
    > #define MSR_AMD64_SYSCFG 0xc0010010
    > #define MSR_AMD64_SYSCFG_MEM_ENCRYPT_BIT 23
    > #define MSR_AMD64_SYSCFG_MEM_ENCRYPT BIT_ULL(MSR_AMD64_SYSCFG_MEM_ENCRYPT_BIT)
    > +#define MSR_AMD64_SYSCFG_SNP_EN_BIT 24
    > +#define MSR_AMD64_SYSCFG_SNP_EN BIT_ULL(MSR_AMD64_SYSCFG_SNP_EN_BIT)
    > +#define MSR_AMD64_SYSCFG_SNP_VMPL_EN_BIT 25
    > +#define MSR_AMD64_SYSCFG_SNP_VMPL_EN BIT_ULL(MSR_AMD64_SYSCFG_SNP_VMPL_EN_BIT)

    While you're here, move all defines that belong to that MSR which
    we decided it is architectural after all, above the definition of
    MSR_AMD64_NB_CFG above.

    > #define MSR_K8_INT_PENDING_MSG 0xc0010055
    > /* C1E active bits in int pending message */
    > #define K8_INTP_C1E_ACTIVE_MASK 0x18000000
    > diff --git a/arch/x86/kernel/sev.c b/arch/x86/kernel/sev.c
    > index ab17c93634e9..7936c8139c74 100644
    > --- a/arch/x86/kernel/sev.c
    > +++ b/arch/x86/kernel/sev.c
    > @@ -24,6 +24,8 @@
    > #include <linux/sev-guest.h>
    > #include <linux/platform_device.h>
    > #include <linux/io.h>
    > +#include <linux/cpumask.h>
    > +#include <linux/iommu.h>
    >
    > #include <asm/cpu_entry_area.h>
    > #include <asm/stacktrace.h>
    > @@ -40,11 +42,19 @@
    > #include <asm/efi.h>
    > #include <asm/cpuid.h>
    > #include <asm/setup.h>
    > +#include <asm/apic.h>
    > +#include <asm/iommu.h>
    >
    > #include "sev-internal.h"
    >
    > #define DR7_RESET_VALUE 0x400
    >
    > +/*
    > + * The first 16KB from the RMP_BASE is used by the processor for the

    s/for the/for/

    > + * bookkeeping, the range need to be added during the RMP entry lookup.

    s/need/needs/ ... s/during the/during /

    > + */
    > +#define RMPTABLE_CPU_BOOKKEEPING_SZ 0x4000

    Too long: just call it RMP_BASE_OFFSET.

    > +static bool get_rmptable_info(u64 *start, u64 *len)
    > +{
    > + u64 calc_rmp_sz, rmp_sz, rmp_base, rmp_end, nr_pages;
    > +
    > + rdmsrl(MSR_AMD64_RMP_BASE, rmp_base);
    > + rdmsrl(MSR_AMD64_RMP_END, rmp_end);
    > +
    > + if (!rmp_base || !rmp_end) {
    > + pr_info("Memory for the RMP table has not been reserved by BIOS\n");
    > + return false;
    > + }
    > +
    > + rmp_sz = rmp_end - rmp_base + 1;
    > +
    > + /*
    > + * Calculate the amount the memory that must be reserved by the BIOS to
    > + * address the full system RAM. The reserved memory should also cover the
    > + * RMP table itself.
    > + *
    > + * See PPR Family 19h Model 01h, Revision B1 section 2.1.5.2 for more
    > + * information on memory requirement.
    > + */
    > + nr_pages = totalram_pages();
    > + calc_rmp_sz = (((rmp_sz >> PAGE_SHIFT) + nr_pages) << 4) + RMPTABLE_CPU_BOOKKEEPING_SZ;

    use totalram_pages() directly here - nr_pages is assigned to only once.

    > +
    > + if (calc_rmp_sz > rmp_sz) {
    > + pr_info("Memory reserved for the RMP table does not cover full system RAM (expected 0x%llx got 0x%llx)\n",
    > + calc_rmp_sz, rmp_sz);
    > + return false;
    > + }
    > +
    > + *start = rmp_base;
    > + *len = rmp_sz;
    > +
    > + pr_info("RMP table physical address 0x%016llx - 0x%016llx\n", rmp_base, rmp_end);

    "RMP table physical address range: [ ... - ... ]\n", ...

    ...

    > +/*
    > + * This must be called after the PCI subsystem. This is because before enabling
    > + * the SNP feature we need to ensure that IOMMU supports the SEV-SNP feature.

    "... it needs to be ensured that... "

    > + * The iommu_sev_snp_support() is used for checking the feature, and it is
    > + * available after subsys_initcall().
    > + */
    > +fs_initcall(snp_rmptable_init);
    > --
    > 2.17.1
    >

    --
    Regards/Gruss,
    Boris.

    https://people.kernel.org/tglx/notes-about-netiquette

    \
     
     \ /
      Last update: 2021-09-24 10:59    [W:3.897 / U:0.972 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site