lkml.org 
[lkml]   [2024]   [Apr]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCHv10 08/18] x86/tdx: Account shared memory
    Date
    The kernel will convert all shared memory back to private during kexec.
    The direct mapping page tables will provide information on which memory
    is shared.

    It is extremely important to convert all shared memory. If a page is
    missed, it will cause the second kernel to crash when it accesses it.

    Keep track of the number of shared pages. This will allow for
    cross-checking against the shared information in the direct mapping and
    reporting if the shared bit is lost.

    Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Reviewed-by: Kai Huang <kai.huang@intel.com>
    Tested-by: Tao Liu <ltao@redhat.com>
    ---
    arch/x86/coco/tdx/tdx.c | 7 +++++++
    1 file changed, 7 insertions(+)

    diff --git a/arch/x86/coco/tdx/tdx.c b/arch/x86/coco/tdx/tdx.c
    index 26fa47db5782..979891e97d83 100644
    --- a/arch/x86/coco/tdx/tdx.c
    +++ b/arch/x86/coco/tdx/tdx.c
    @@ -38,6 +38,8 @@

    #define TDREPORT_SUBTYPE_0 0

    +static atomic_long_t nr_shared;
    +
    /* Called from __tdx_hypercall() for unrecoverable failure */
    noinstr void __noreturn __tdx_hypercall_failed(void)
    {
    @@ -821,6 +823,11 @@ static int tdx_enc_status_change_finish(unsigned long vaddr, int numpages,
    if (!enc && !tdx_enc_status_changed(vaddr, numpages, enc))
    return -EIO;

    + if (enc)
    + atomic_long_sub(numpages, &nr_shared);
    + else
    + atomic_long_add(numpages, &nr_shared);
    +
    return 0;
    }

    --
    2.43.0

    \
     
     \ /
      Last update: 2024-05-27 16:31    [W:4.403 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site