From 360e2db4400dd8b48775644057c5a1de3fb88ecd Mon Sep 17 00:00:00 2001 From: Yonghua Huang Date: Sat, 7 May 2022 11:21:19 +0300 Subject: [PATCH] dm: fix SSRAM region unmap failure issue In ACRN HSM driver, only MMIO type is supported when doing EPT unmap. This patch walk around above issue to unmap SSRAM region before doing EPT mapping. Tracked-On: #7563 Signed-off-by: Yonghua Huang --- devicemodel/hw/platform/vssram/vssram.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/devicemodel/hw/platform/vssram/vssram.c b/devicemodel/hw/platform/vssram/vssram.c index 74edc6df3..85348200d 100644 --- a/devicemodel/hw/platform/vssram/vssram.c +++ b/devicemodel/hw/platform/vssram/vssram.c @@ -449,7 +449,6 @@ static void *vssram_mmap_buffer(int fd, size_t size) static int vssram_ept_map_buffer(struct vmctx *ctx, struct vssram_buf *buf_desc) { struct acrn_vm_memmap memmap = { - .type = ACRN_MEMMAP_RAM, .vma_base = 0, .len = 0, .attr = ACRN_MEM_ACCESS_RWX @@ -458,10 +457,19 @@ static int vssram_ept_map_buffer(struct vmctx *ctx, struct vssram_buf *buf_desc) memmap.vma_base = buf_desc->vma_base; memmap.user_vm_pa = buf_desc->gpa_base; memmap.len = buf_desc->size; + + /* + * This is a Walk-around: + * - As only MMIO type can be supported when doing EPT unmap in HSM driver, + * so hardcoding of 'type' to be MMIO type. + */ + memmap.type = ACRN_MEMMAP_MMIO; error = ioctl(ctx->fd, ACRN_IOCTL_UNSET_MEMSEG, &memmap); if (error) { pr_err("ACRN_IOCTL_UNSET_MEMSEG ioctl() returned an error: %s\n", errormsg(errno)); } + + memmap.type = ACRN_MEMMAP_RAM; error = ioctl(ctx->fd, ACRN_IOCTL_SET_MEMSEG, &memmap); if (error) { pr_err("ACRN_IOCTL_SET_MEMSEG ioctl() returned an error: %s\n", errormsg(errno));