From 6f097b1633873dc250daf8a808b00e0e603e7290 Mon Sep 17 00:00:00 2001 From: "Li, Fei1" Date: Fri, 29 Jun 2018 11:01:17 +0800 Subject: [PATCH] dm: remove set vm memory by cma Signed-off-by: Li, Fei1 Acked-by: Geoffroy Van Cutsem Reviewed-by: Jason Chen CJ --- devicemodel/core/main.c | 2 +- devicemodel/core/vmmapi.c | 100 +------------------- devicemodel/include/public/vhm_ioctl_defs.h | 12 +-- devicemodel/include/vmmapi.h | 14 +-- 4 files changed, 4 insertions(+), 124 deletions(-) diff --git a/devicemodel/core/main.c b/devicemodel/core/main.c index b5a290179..0fee729da 100644 --- a/devicemodel/core/main.c +++ b/devicemodel/core/main.c @@ -829,7 +829,7 @@ main(int argc, char *argv[]) } vm_set_memflags(ctx, memflags); - err = vm_setup_memory(ctx, memsize, VM_MMAP_ALL); + err = vm_setup_memory(ctx, memsize); if (err) { fprintf(stderr, "Unable to setup memory (%d)\n", errno); goto fail; diff --git a/devicemodel/core/vmmapi.c b/devicemodel/core/vmmapi.c index 497bf6807..2dbdf40b7 100644 --- a/devicemodel/core/vmmapi.c +++ b/devicemodel/core/vmmapi.c @@ -318,59 +318,9 @@ vm_map_memseg_vma(struct vmctx *ctx, size_t len, vm_paddr_t gpa, return ioctl(ctx->fd, IC_SET_MEMSEG, &memmap); } -static int -vm_alloc_set_memseg(struct vmctx *ctx, int segid, size_t len, - vm_paddr_t gpa, int prot, char *base, char **ptr) -{ - struct vm_memseg memseg; - struct vm_memmap memmap; - int error, flags; - - if (segid == VM_MEMMAP_SYSMEM) { - bzero(&memseg, sizeof(struct vm_memseg)); - memseg.len = len; - memseg.gpa = gpa; - error = ioctl(ctx->fd, IC_ALLOC_MEMSEG, &memseg); - if (error) - return error; - - bzero(&memmap, sizeof(struct vm_memmap)); - memmap.type = segid; - memmap.len = len; - memmap.gpa = gpa; - memmap.prot = PROT_ALL; - error = ioctl(ctx->fd, IC_SET_MEMSEG, &memmap); - if (error) - return error; - - flags = MAP_SHARED | MAP_FIXED; - if ((ctx->memflags & VM_MEM_F_INCORE) == 0) - flags |= MAP_NOCORE; - - /* mmap into the process address space on the host */ - *ptr = mmap(base + gpa, len, PROT_RW, flags, ctx->fd, gpa); - if (*ptr == MAP_FAILED) { - *ptr = NULL; - error = -1; - } - } else - /* XXX: no VM_BOOTROM/VM_FRAMEBUFFER support*/ - error = -1; - - return error; -} - int -vm_setup_memory(struct vmctx *ctx, size_t memsize, enum vm_mmap_style vms) +vm_setup_memory(struct vmctx *ctx, size_t memsize) { - size_t objsize, len; - vm_paddr_t gpa; - int prot; - char *baseaddr, *ptr; - int error, flags; - - assert(vms == VM_MMAP_ALL); - /* * If 'memsize' cannot fit entirely in the 'lowmem' segment then * create another 'highmem' segment above 4GB for the remainder. @@ -378,66 +328,18 @@ vm_setup_memory(struct vmctx *ctx, size_t memsize, enum vm_mmap_style vms) if (memsize > ctx->lowmem_limit) { ctx->lowmem = ctx->lowmem_limit; ctx->highmem = memsize - ctx->lowmem_limit; - objsize = 4*GB + ctx->highmem; } else { ctx->lowmem = memsize; ctx->highmem = 0; - objsize = ctx->lowmem; } return hugetlb_setup_memory(ctx); - - /* - * Stake out a contiguous region covering the guest physical memory - * and the adjoining guard regions. - */ - len = VM_MMAP_GUARD_SIZE + objsize + VM_MMAP_GUARD_SIZE; - flags = MAP_PRIVATE | MAP_ANON | MAP_NOCORE | MAP_ALIGNED_SUPER; - ptr = mmap(NULL, len, PROT_NONE, flags, -1, 0); - if (ptr == MAP_FAILED) - return -1; - - baseaddr = ptr + VM_MMAP_GUARD_SIZE; - - /* TODO: need add error handling */ - /* alloc & map for lowmem */ - if (ctx->lowmem > 0) { - gpa = 0; - len = ctx->lowmem; - prot = PROT_ALL; - error = vm_alloc_set_memseg(ctx, VM_MEMMAP_SYSMEM, len, gpa, - prot, baseaddr, &ctx->mmap_lowmem); - if (error) - return error; - } - - /* alloc & map for highmem */ - if (ctx->highmem > 0) { - gpa = 4*GB; - len = ctx->highmem; - prot = PROT_ALL; - error = vm_alloc_set_memseg(ctx, VM_MEMMAP_SYSMEM, len, gpa, - prot, baseaddr, &ctx->mmap_highmem); - if (error) - return error; - } - - ctx->baseaddr = baseaddr; - - return 0; } void vm_unsetup_memory(struct vmctx *ctx) { hugetlb_unsetup_memory(ctx); - return; - - if (ctx->lowmem > 0) - munmap(ctx->mmap_lowmem, ctx->lowmem); - - if (ctx->highmem > 0) - munmap(ctx->mmap_highmem, ctx->highmem); } /* diff --git a/devicemodel/include/public/vhm_ioctl_defs.h b/devicemodel/include/public/vhm_ioctl_defs.h index 7c212dd47..1e6c239b8 100644 --- a/devicemodel/include/public/vhm_ioctl_defs.h +++ b/devicemodel/include/public/vhm_ioctl_defs.h @@ -90,6 +90,7 @@ /* Guest memory management */ #define IC_ID_MEM_BASE 0x40UL +/* IC_ALLOC_MEMSEG not used */ #define IC_ALLOC_MEMSEG _IC_ID(IC_ID, IC_ID_MEM_BASE + 0x00) #define IC_SET_MEMSEG _IC_ID(IC_ID, IC_ID_MEM_BASE + 0x01) @@ -105,17 +106,6 @@ #define IC_ID_PM_BASE 0x60UL #define IC_PM_GET_CPU_STATE _IC_ID(IC_ID, IC_ID_PM_BASE + 0x00) -/** - * struct vm_memseg - memory segment info for guest - * - * @len: length of memory segment - * @gpa: guest physical start address of memory segment - */ -struct vm_memseg { - uint64_t len; - uint64_t gpa; -}; - #define VM_MEMMAP_SYSMEM 0 #define VM_MMIO 1 diff --git a/devicemodel/include/vmmapi.h b/devicemodel/include/vmmapi.h index 83dd91baf..84ea3d894 100644 --- a/devicemodel/include/vmmapi.h +++ b/devicemodel/include/vmmapi.h @@ -53,8 +53,6 @@ struct vmctx { int memflags; size_t lowmem; size_t highmem; - char *mmap_lowmem; - char *mmap_highmem; char *baseaddr; char *name; uuid_t vm_uuid; @@ -65,16 +63,6 @@ struct vmctx { void *ioc_dev; }; -/* - * Different styles of mapping the memory assigned to a VM into the address - * space of the controlling process. - */ -enum vm_mmap_style { - VM_MMAP_NONE, /* no mapping */ - VM_MMAP_ALL, /* fully and statically mapped */ - VM_MMAP_SPARSE, /* mappings created on-demand */ -}; - /* * 'flags' value passed to 'vm_set_memflags()'. */ @@ -122,7 +110,7 @@ void vm_destroy(struct vmctx *ctx); int vm_parse_memsize(const char *optarg, size_t *memsize); int vm_map_memseg_vma(struct vmctx *ctx, size_t len, vm_paddr_t gpa, uint64_t vma, int prot); -int vm_setup_memory(struct vmctx *ctx, size_t len, enum vm_mmap_style s); +int vm_setup_memory(struct vmctx *ctx, size_t len); void vm_unsetup_memory(struct vmctx *ctx); bool check_hugetlb_support(void); int hugetlb_setup_memory(struct vmctx *ctx);