mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-08-10 20:43:48 +00:00
dm: Use new memory management ioctls
struct vm_memmap -> struct acrn_vm_memmap VM_MEMMAP_SYSMEM -> ACRN_MEMMAP_RAM VM_MMIO -> ACRN_MEMMAP_MMIO PROT_ALL -> ACRN_MEM_ACCESS_RWX Tracked-On: #6282 Signed-off-by: Shuo A Liu <shuo.a.liu@intel.com>
This commit is contained in:
parent
9c910bae44
commit
7e01d90b87
@ -362,16 +362,15 @@ int
|
|||||||
vm_map_memseg_vma(struct vmctx *ctx, size_t len, vm_paddr_t gpa,
|
vm_map_memseg_vma(struct vmctx *ctx, size_t len, vm_paddr_t gpa,
|
||||||
uint64_t vma, int prot)
|
uint64_t vma, int prot)
|
||||||
{
|
{
|
||||||
struct vm_memmap memmap;
|
struct acrn_vm_memmap memmap;
|
||||||
|
|
||||||
bzero(&memmap, sizeof(struct vm_memmap));
|
bzero(&memmap, sizeof(struct acrn_vm_memmap));
|
||||||
memmap.type = VM_MEMMAP_SYSMEM;
|
memmap.type = ACRN_MEMMAP_RAM;
|
||||||
memmap.using_vma = 1;
|
|
||||||
memmap.vma_base = vma;
|
memmap.vma_base = vma;
|
||||||
memmap.len = len;
|
memmap.len = len;
|
||||||
memmap.gpa = gpa;
|
memmap.user_vm_pa = gpa;
|
||||||
memmap.prot = prot;
|
memmap.attr = prot;
|
||||||
return ioctl(ctx->fd, IC_SET_MEMSEG, &memmap);
|
return ioctl(ctx->fd, ACRN_IOCTL_SET_MEMSEG, &memmap);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
@ -568,32 +567,32 @@ int
|
|||||||
vm_map_ptdev_mmio(struct vmctx *ctx, int bus, int slot, int func,
|
vm_map_ptdev_mmio(struct vmctx *ctx, int bus, int slot, int func,
|
||||||
vm_paddr_t gpa, size_t len, vm_paddr_t hpa)
|
vm_paddr_t gpa, size_t len, vm_paddr_t hpa)
|
||||||
{
|
{
|
||||||
struct vm_memmap memmap;
|
struct acrn_vm_memmap memmap;
|
||||||
|
|
||||||
bzero(&memmap, sizeof(struct vm_memmap));
|
bzero(&memmap, sizeof(struct acrn_vm_memmap));
|
||||||
memmap.type = VM_MMIO;
|
memmap.type = ACRN_MEMMAP_MMIO;
|
||||||
memmap.len = len;
|
memmap.len = len;
|
||||||
memmap.gpa = gpa;
|
memmap.user_vm_pa = gpa;
|
||||||
memmap.hpa = hpa;
|
memmap.service_vm_pa = hpa;
|
||||||
memmap.prot = PROT_ALL;
|
memmap.attr = ACRN_MEM_ACCESS_RWX;
|
||||||
|
|
||||||
return ioctl(ctx->fd, IC_SET_MEMSEG, &memmap);
|
return ioctl(ctx->fd, ACRN_IOCTL_SET_MEMSEG, &memmap);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
vm_unmap_ptdev_mmio(struct vmctx *ctx, int bus, int slot, int func,
|
vm_unmap_ptdev_mmio(struct vmctx *ctx, int bus, int slot, int func,
|
||||||
vm_paddr_t gpa, size_t len, vm_paddr_t hpa)
|
vm_paddr_t gpa, size_t len, vm_paddr_t hpa)
|
||||||
{
|
{
|
||||||
struct vm_memmap memmap;
|
struct acrn_vm_memmap memmap;
|
||||||
|
|
||||||
bzero(&memmap, sizeof(struct vm_memmap));
|
bzero(&memmap, sizeof(struct acrn_vm_memmap));
|
||||||
memmap.type = VM_MMIO;
|
memmap.type = ACRN_MEMMAP_MMIO;
|
||||||
memmap.len = len;
|
memmap.len = len;
|
||||||
memmap.gpa = gpa;
|
memmap.user_vm_pa = gpa;
|
||||||
memmap.hpa = hpa;
|
memmap.service_vm_pa = hpa;
|
||||||
memmap.prot = PROT_ALL;
|
memmap.attr = ACRN_MEM_ACCESS_RWX;
|
||||||
|
|
||||||
return ioctl(ctx->fd, IC_UNSET_MEMSEG, &memmap);
|
return ioctl(ctx->fd, ACRN_IOCTL_UNSET_MEMSEG, &memmap);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -1171,12 +1171,12 @@ int create_and_inject_vrtct(struct vmctx *ctx)
|
|||||||
size_t vrtct_len;
|
size_t vrtct_len;
|
||||||
uint8_t *buf;
|
uint8_t *buf;
|
||||||
uint8_t *vrtct;
|
uint8_t *vrtct;
|
||||||
struct vm_memmap memmap = {
|
struct acrn_vm_memmap memmap = {
|
||||||
.type = VM_MMIO,
|
.type = ACRN_MEMMAP_MMIO,
|
||||||
/* HPA base and size of Software SRAM shall be parsed from vRTCT. */
|
/* HPA base and size of Software SRAM shall be parsed from vRTCT. */
|
||||||
.hpa = 0,
|
.service_vm_pa = 0,
|
||||||
.len = 0,
|
.len = 0,
|
||||||
.prot = PROT_ALL
|
.attr = ACRN_MEM_ACCESS_RWX
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Name of native RTCT table is "PTCT"(v1) or "RTCT"(v2) */
|
/* Name of native RTCT table is "PTCT"(v1) or "RTCT"(v2) */
|
||||||
@ -1218,11 +1218,11 @@ int create_and_inject_vrtct(struct vmctx *ctx)
|
|||||||
free(vrtct);
|
free(vrtct);
|
||||||
free(buf);
|
free(buf);
|
||||||
|
|
||||||
memmap.hpa = get_software_sram_base_hpa();
|
memmap.service_vm_pa = get_software_sram_base_hpa();
|
||||||
memmap.gpa = get_software_sram_base_gpa();
|
memmap.user_vm_pa = get_software_sram_base_gpa();
|
||||||
memmap.len = get_software_sram_size();
|
memmap.len = get_software_sram_size();
|
||||||
ioctl(ctx->fd, IC_UNSET_MEMSEG, &memmap);
|
ioctl(ctx->fd, ACRN_IOCTL_UNSET_MEMSEG, &memmap);
|
||||||
return ioctl(ctx->fd, IC_SET_MEMSEG, &memmap);
|
return ioctl(ctx->fd, ACRN_IOCTL_SET_MEMSEG, &memmap);
|
||||||
};
|
};
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -106,11 +106,10 @@
|
|||||||
_IO(ACRN_IOCTL_TYPE, 0x35)
|
_IO(ACRN_IOCTL_TYPE, 0x35)
|
||||||
|
|
||||||
/* Guest memory management */
|
/* Guest memory management */
|
||||||
#define IC_ID_MEM_BASE 0x40UL
|
#define ACRN_IOCTL_SET_MEMSEG \
|
||||||
/* IC_ALLOC_MEMSEG not used */
|
_IOW(ACRN_IOCTL_TYPE, 0x41, struct acrn_vm_memmap)
|
||||||
#define IC_ALLOC_MEMSEG _IC_ID(IC_ID, IC_ID_MEM_BASE + 0x00)
|
#define ACRN_IOCTL_UNSET_MEMSEG \
|
||||||
#define IC_SET_MEMSEG _IC_ID(IC_ID, IC_ID_MEM_BASE + 0x01)
|
_IOW(ACRN_IOCTL_TYPE, 0x42, struct acrn_vm_memmap)
|
||||||
#define IC_UNSET_MEMSEG _IC_ID(IC_ID, IC_ID_MEM_BASE + 0x02)
|
|
||||||
|
|
||||||
/* PCI assignment*/
|
/* PCI assignment*/
|
||||||
#define IC_ID_PCI_BASE 0x50UL
|
#define IC_ID_PCI_BASE 0x50UL
|
||||||
@ -130,41 +129,54 @@
|
|||||||
#define IC_ID_PM_BASE 0x60UL
|
#define IC_ID_PM_BASE 0x60UL
|
||||||
#define IC_PM_GET_CPU_STATE _IC_ID(IC_ID, IC_ID_PM_BASE + 0x00)
|
#define IC_PM_GET_CPU_STATE _IC_ID(IC_ID, IC_ID_PM_BASE + 0x00)
|
||||||
|
|
||||||
#define VM_MEMMAP_SYSMEM 0
|
|
||||||
#define VM_MMIO 1
|
|
||||||
|
|
||||||
/* VHM eventfd */
|
/* VHM eventfd */
|
||||||
#define IC_ID_EVENT_BASE 0x70UL
|
#define IC_ID_EVENT_BASE 0x70UL
|
||||||
#define IC_EVENT_IOEVENTFD _IC_ID(IC_ID, IC_ID_EVENT_BASE + 0x00)
|
#define IC_EVENT_IOEVENTFD _IC_ID(IC_ID, IC_ID_EVENT_BASE + 0x00)
|
||||||
#define IC_EVENT_IRQFD _IC_ID(IC_ID, IC_ID_EVENT_BASE + 0x01)
|
#define IC_EVENT_IRQFD _IC_ID(IC_ID, IC_ID_EVENT_BASE + 0x01)
|
||||||
|
|
||||||
|
|
||||||
|
#define ACRN_MEM_ACCESS_RIGHT_MASK 0x00000007U
|
||||||
|
#define ACRN_MEM_ACCESS_READ 0x00000001U
|
||||||
|
#define ACRN_MEM_ACCESS_WRITE 0x00000002U
|
||||||
|
#define ACRN_MEM_ACCESS_EXEC 0x00000004U
|
||||||
|
#define ACRN_MEM_ACCESS_RWX (ACRN_MEM_ACCESS_READ | \
|
||||||
|
ACRN_MEM_ACCESS_WRITE | \
|
||||||
|
ACRN_MEM_ACCESS_EXEC)
|
||||||
|
|
||||||
|
#define ACRN_MEM_TYPE_MASK 0x000007C0U
|
||||||
|
#define ACRN_MEM_TYPE_WB 0x00000040U
|
||||||
|
#define ACRN_MEM_TYPE_WT 0x00000080U
|
||||||
|
#define ACRN_MEM_TYPE_UC 0x00000100U
|
||||||
|
#define ACRN_MEM_TYPE_WC 0x00000200U
|
||||||
|
#define ACRN_MEM_TYPE_WP 0x00000400U
|
||||||
|
|
||||||
|
/* Memory mapping types */
|
||||||
|
#define ACRN_MEMMAP_RAM 0
|
||||||
|
#define ACRN_MEMMAP_MMIO 1
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief EPT memory mapping info for guest
|
* @brief EPT memory mapping info for guest
|
||||||
*/
|
*/
|
||||||
struct vm_memmap {
|
struct acrn_vm_memmap {
|
||||||
/** memory mapping type */
|
/** memory mapping type */
|
||||||
uint32_t type;
|
__u32 type;
|
||||||
/** using vma_base to get sos_vm_gpa,
|
/** memory mapping attribute */
|
||||||
* only for type == VM_MEMMAP_SYSMEM
|
__u32 attr;
|
||||||
*/
|
|
||||||
uint32_t using_vma;
|
|
||||||
/** user OS guest physical start address of memory mapping */
|
/** user OS guest physical start address of memory mapping */
|
||||||
uint64_t gpa;
|
__u64 user_vm_pa;
|
||||||
union {
|
union {
|
||||||
/** host physical start address of memory,
|
/** host physical start address of memory,
|
||||||
* only for type == VM_MMIO
|
* only for type == VM_MMIO
|
||||||
*/
|
*/
|
||||||
uint64_t hpa;
|
__u64 service_vm_pa;
|
||||||
/** service OS user virtual start address of
|
/** service OS user virtual start address of
|
||||||
* memory, only for type == VM_MEMMAP_SYSMEM &&
|
* memory, only for type == VM_MEMMAP_SYSMEM &&
|
||||||
* using_vma == true
|
* using_vma == true
|
||||||
*/
|
*/
|
||||||
uint64_t vma_base;
|
__u64 vma_base;
|
||||||
};
|
};
|
||||||
/** the length of memory range mapped */
|
/** the length of memory range mapped */
|
||||||
uint64_t len; /* mmap length */
|
__u64 len;
|
||||||
/** memory mapping attribute */
|
|
||||||
uint32_t prot; /* RWX */
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user