Skip to content

Commit fa3e424

Browse files
JasonChenCJjren1
authored andcommitted
mmu: refine functions modify_paging & map/unmap/modify mem
add error return for all, which is valid under release version, as at that time, ASSERT in modify_paging is empty. Signed-off-by: Jason Chen CJ <jason.cj.chen@intel.com> Acked-by: Eddie Dong <eddie.dong@intel.com>
1 parent a91118e commit fa3e424

File tree

2 files changed

+32
-16
lines changed

2 files changed

+32
-16
lines changed

hypervisor/arch/x86/mmu.c

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -838,14 +838,13 @@ static uint64_t break_page_table(struct map_params *map_params, void *paddr,
838838
return next_page_size;
839839
}
840840

841-
static void modify_paging(struct map_params *map_params, void *paddr,
841+
static int modify_paging(struct map_params *map_params, void *paddr,
842842
void *vaddr, uint64_t size, uint32_t flags,
843843
enum mem_map_request_type request_type, bool direct)
844844
{
845845
int64_t remaining_size;
846846
uint64_t adjust_size;
847847
uint64_t attr;
848-
int status = 0;
849848
struct entry_params entry;
850849
uint64_t page_size;
851850
uint64_t vaddr_end = ((uint64_t)vaddr) + size;
@@ -862,9 +861,9 @@ static void modify_paging(struct map_params *map_params, void *paddr,
862861
|| (map_params == NULL)) {
863862
pr_err("%s: vaddr=0x%llx size=0x%llx req_type=0x%lx",
864863
__func__, vaddr, size, request_type);
865-
status = -EINVAL;
864+
ASSERT(0, "Incorrect Arguments");
865+
return -EINVAL;
866866
}
867-
ASSERT(status == 0, "Incorrect Arguments");
868867

869868
attr = config_page_table_attr(map_params, flags);
870869
/* Loop until the entire block of memory is appropriately
@@ -912,43 +911,60 @@ static void modify_paging(struct map_params *map_params, void *paddr,
912911
paddr += adjust_size;
913912
remaining_size -= adjust_size;
914913
}
914+
915+
return 0;
915916
}
916917

917-
void map_mem(struct map_params *map_params, void *paddr, void *vaddr,
918+
int map_mem(struct map_params *map_params, void *paddr, void *vaddr,
918919
uint64_t size, uint32_t flags)
919920
{
921+
int ret = 0;
922+
920923
/* used for MMU and EPT*/
921-
modify_paging(map_params, paddr, vaddr, size, flags,
924+
ret = modify_paging(map_params, paddr, vaddr, size, flags,
922925
PAGING_REQUEST_TYPE_MAP, true);
926+
if (ret < 0)
927+
return ret;
923928
/* only for EPT */
924929
if (map_params->page_table_type == PTT_EPT) {
925-
modify_paging(map_params, vaddr, paddr, size, flags,
930+
ret = modify_paging(map_params, vaddr, paddr, size, flags,
926931
PAGING_REQUEST_TYPE_MAP, false);
927932
}
933+
return ret;
928934
}
929935

930-
void unmap_mem(struct map_params *map_params, void *paddr, void *vaddr,
936+
int unmap_mem(struct map_params *map_params, void *paddr, void *vaddr,
931937
uint64_t size, uint32_t flags)
932938
{
939+
int ret = 0;
940+
933941
/* used for MMU and EPT */
934-
modify_paging(map_params, paddr, vaddr, size, flags,
942+
ret = modify_paging(map_params, paddr, vaddr, size, flags,
935943
PAGING_REQUEST_TYPE_UNMAP, true);
944+
if (ret < 0)
945+
return ret;
936946
/* only for EPT */
937947
if (map_params->page_table_type == PTT_EPT) {
938-
modify_paging(map_params, vaddr, paddr, size, flags,
948+
ret = modify_paging(map_params, vaddr, paddr, size, flags,
939949
PAGING_REQUEST_TYPE_UNMAP, false);
940950
}
951+
return ret;
941952
}
942953

943-
void modify_mem(struct map_params *map_params, void *paddr, void *vaddr,
954+
int modify_mem(struct map_params *map_params, void *paddr, void *vaddr,
944955
uint64_t size, uint32_t flags)
945956
{
957+
int ret = 0;
958+
946959
/* used for MMU and EPT*/
947-
modify_paging(map_params, paddr, vaddr, size, flags,
960+
ret = modify_paging(map_params, paddr, vaddr, size, flags,
948961
PAGING_REQUEST_TYPE_MODIFY, true);
962+
if (ret < 0)
963+
return ret;
949964
/* only for EPT */
950965
if (map_params->page_table_type == PTT_EPT) {
951-
modify_paging(map_params, vaddr, paddr, size, flags,
966+
ret = modify_paging(map_params, vaddr, paddr, size, flags,
952967
PAGING_REQUEST_TYPE_MODIFY, false);
953968
}
969+
return ret;
954970
}

hypervisor/include/arch/x86/mmu.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -318,11 +318,11 @@ void *alloc_paging_struct(void);
318318
void free_paging_struct(void *ptr);
319319
void enable_paging(void *pml4_base_addr);
320320
void init_paging(void);
321-
void map_mem(struct map_params *map_params, void *paddr, void *vaddr,
321+
int map_mem(struct map_params *map_params, void *paddr, void *vaddr,
322322
uint64_t size, uint32_t flags);
323-
void unmap_mem(struct map_params *map_params, void *paddr, void *vaddr,
323+
int unmap_mem(struct map_params *map_params, void *paddr, void *vaddr,
324324
uint64_t size, uint32_t flags);
325-
void modify_mem(struct map_params *map_params, void *paddr, void *vaddr,
325+
int modify_mem(struct map_params *map_params, void *paddr, void *vaddr,
326326
uint64_t size, uint32_t flags);
327327
void mmu_invept(struct vcpu *vcpu);
328328
bool check_continuous_hpa(struct vm *vm, uint64_t gpa, uint64_t size);

0 commit comments

Comments
 (0)