[module] AMD SEV support

This commit is contained in:
Zenithal 2023-05-17 23:44:43 +08:00 committed by Geoffrey McRae
parent a3045e0b4a
commit e6aa2b85a9
2 changed files with 26 additions and 2 deletions

View File

@ -66,3 +66,4 @@ David Meier <meier_david_91@hotmail.com> (Kenny.ch)
Daniel Cordero <looking-glass@0xdc.io> (0xdc) Daniel Cordero <looking-glass@0xdc.io> (0xdc)
esi <git@esibun.net> (esibun) esi <git@esibun.net> (esibun)
MakiseKurisu <saberconer@gmail.com> (MakiseKurisu) MakiseKurisu <saberconer@gmail.com> (MakiseKurisu)
Zenithal <i@zenithal.me> (ZenithalHourlyRate)

View File

@ -1,6 +1,6 @@
/** /**
* Looking Glass * Looking Glass
* Copyright © 2017-2022 The Looking Glass Authors * Copyright © 2017-2023 The Looking Glass Authors
* https://looking-glass.io * https://looking-glass.io
* *
* This program is free software; you can redistribute it and/or modify it * This program is free software; you can redistribute it and/or modify it
@ -33,6 +33,10 @@
#include <asm/io.h> #include <asm/io.h>
#ifdef CONFIG_AMD_MEM_ENCRYPT
#include <asm/mem_encrypt.h>
#endif
#include "kvmfr.h" #include "kvmfr.h"
DEFINE_MUTEX(minor_lock); DEFINE_MUTEX(minor_lock);
@ -321,6 +325,25 @@ static int device_mmap(struct file * filp, struct vm_area_struct * vma)
switch (kdev->type) switch (kdev->type)
{ {
case KVMFR_TYPE_PCI: case KVMFR_TYPE_PCI:
#ifdef CONFIG_AMD_MEM_ENCRYPT
/* Clear C-bit for ivshmem when mapped
* as normal memory to the userspace
*
* devm_memremap below will "hotplug" the ivshmem as normal mem,
* when sev and/or sev-snp is effective,
* ivshmem will be encrypted and private memory.
*
* However, this is not the intention of ivshmem, as it
* is meant to be shared with other VMs and the hypervisor.
*
* Mapping ivshmem as iomem could resolve the sev/sev-snp issue,
* but it then will not be cached and the performance is low.
*
* To maintain high performance yet make it shared, we should
* clear the C-bit for ivshmem.
*/
vma->vm_page_prot.pgprot &= ~(sme_me_mask);
#endif
vma->vm_ops = &pci_mmap_ops; vma->vm_ops = &pci_mmap_ops;
vma->vm_private_data = kdev; vma->vm_private_data = kdev;
return 0; return 0;
@ -626,7 +649,7 @@ MODULE_DEVICE_TABLE(pci, kvmfr_pci_ids);
MODULE_LICENSE("GPL v2"); MODULE_LICENSE("GPL v2");
MODULE_AUTHOR("Geoffrey McRae <geoff@hostfission.com>"); MODULE_AUTHOR("Geoffrey McRae <geoff@hostfission.com>");
MODULE_AUTHOR("Guanzhong Chen <quantum2048@gmail.com>"); MODULE_AUTHOR("Guanzhong Chen <quantum2048@gmail.com>");
MODULE_VERSION("0.0.8"); MODULE_VERSION("0.0.9");
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,16,0) #if LINUX_VERSION_CODE >= KERNEL_VERSION(5,16,0)
MODULE_IMPORT_NS(DMA_BUF); MODULE_IMPORT_NS(DMA_BUF);
#endif #endif