mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-06-19 12:12:16 +00:00
HV: misra fix for patch set of Zephyr enabling
- add @pre condition remark; - fix of NULL pointer check; Tracked-On: #3214 Signed-off-by: Victor Sun <victor.sun@intel.com>
This commit is contained in:
parent
1906def29e
commit
0baf537a2c
@ -28,15 +28,16 @@
|
|||||||
/**
|
/**
|
||||||
* @pre vm != NULL && mbi != NULL
|
* @pre vm != NULL && mbi != NULL
|
||||||
*/
|
*/
|
||||||
static void init_vm_ramdisk_info(struct acrn_vm *vm, struct multiboot_module *mod)
|
static void init_vm_ramdisk_info(struct acrn_vm *vm, const struct multiboot_module *mod)
|
||||||
{
|
{
|
||||||
void *mod_addr = hpa2hva((uint64_t)mod->mm_mod_start);
|
void *mod_addr = hpa2hva((uint64_t)mod->mm_mod_start);
|
||||||
uint32_t mod_size = mod->mm_mod_end - mod->mm_mod_start;
|
|
||||||
|
|
||||||
|
if ((mod_addr != NULL) && (mod->mm_mod_end > mod->mm_mod_start)) {
|
||||||
vm->sw.ramdisk_info.src_addr = mod_addr;
|
vm->sw.ramdisk_info.src_addr = mod_addr;
|
||||||
vm->sw.ramdisk_info.load_addr = vm->sw.kernel_info.kernel_load_addr + vm->sw.kernel_info.kernel_size;
|
vm->sw.ramdisk_info.load_addr = vm->sw.kernel_info.kernel_load_addr + vm->sw.kernel_info.kernel_size;
|
||||||
vm->sw.ramdisk_info.load_addr = (void *)round_page_up((uint64_t)vm->sw.ramdisk_info.load_addr);
|
vm->sw.ramdisk_info.load_addr = (void *)round_page_up((uint64_t)vm->sw.ramdisk_info.load_addr);
|
||||||
vm->sw.ramdisk_info.size = mod_size;
|
vm->sw.ramdisk_info.size = mod->mm_mod_end - mod->mm_mod_start;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* There are two sources for sos_vm kernel cmdline:
|
/* There are two sources for sos_vm kernel cmdline:
|
||||||
@ -88,6 +89,9 @@ static void merge_cmdline(const struct acrn_vm *vm, const char *cmdline, const c
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @pre vm != NULL
|
||||||
|
*/
|
||||||
static void *get_kernel_load_addr(struct acrn_vm *vm)
|
static void *get_kernel_load_addr(struct acrn_vm *vm)
|
||||||
{
|
{
|
||||||
void *load_addr = NULL;
|
void *load_addr = NULL;
|
||||||
@ -125,9 +129,9 @@ static void *get_kernel_load_addr(struct acrn_vm *vm)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @pre vm != NULL && mbi != NULL
|
* @pre vm != NULL && mod != NULL
|
||||||
*/
|
*/
|
||||||
static int32_t init_vm_kernel_info(struct acrn_vm *vm, struct multiboot_module *mod)
|
static int32_t init_vm_kernel_info(struct acrn_vm *vm, const struct multiboot_module *mod)
|
||||||
{
|
{
|
||||||
struct acrn_vm_config *vm_config = get_vm_config(vm->vm_id);
|
struct acrn_vm_config *vm_config = get_vm_config(vm->vm_id);
|
||||||
|
|
||||||
@ -136,8 +140,10 @@ static int32_t init_vm_kernel_info(struct acrn_vm *vm, struct multiboot_module *
|
|||||||
|
|
||||||
vm->sw.kernel_type = vm_config->os_config.kernel_type;
|
vm->sw.kernel_type = vm_config->os_config.kernel_type;
|
||||||
vm->sw.kernel_info.kernel_src_addr = hpa2hva((uint64_t)mod->mm_mod_start);
|
vm->sw.kernel_info.kernel_src_addr = hpa2hva((uint64_t)mod->mm_mod_start);
|
||||||
|
if ((vm->sw.kernel_info.kernel_src_addr != NULL) && (mod->mm_mod_end > mod->mm_mod_start)){
|
||||||
vm->sw.kernel_info.kernel_size = mod->mm_mod_end - mod->mm_mod_start;
|
vm->sw.kernel_info.kernel_size = mod->mm_mod_end - mod->mm_mod_start;
|
||||||
vm->sw.kernel_info.kernel_load_addr = get_kernel_load_addr(vm);
|
vm->sw.kernel_info.kernel_load_addr = get_kernel_load_addr(vm);
|
||||||
|
}
|
||||||
|
|
||||||
return (vm->sw.kernel_info.kernel_load_addr == NULL) ? (-EINVAL) : 0;
|
return (vm->sw.kernel_info.kernel_load_addr == NULL) ? (-EINVAL) : 0;
|
||||||
}
|
}
|
||||||
@ -145,7 +151,7 @@ static int32_t init_vm_kernel_info(struct acrn_vm *vm, struct multiboot_module *
|
|||||||
/**
|
/**
|
||||||
* @pre vm != NULL && mbi != NULL
|
* @pre vm != NULL && mbi != NULL
|
||||||
*/
|
*/
|
||||||
static void init_vm_bootargs_info(struct acrn_vm *vm, struct multiboot_info *mbi)
|
static void init_vm_bootargs_info(struct acrn_vm *vm, const struct multiboot_info *mbi)
|
||||||
{
|
{
|
||||||
struct acrn_vm_config *vm_config = get_vm_config(vm->vm_id);
|
struct acrn_vm_config *vm_config = get_vm_config(vm->vm_id);
|
||||||
char *bootargs = vm_config->os_config.bootargs;
|
char *bootargs = vm_config->os_config.bootargs;
|
||||||
@ -171,27 +177,29 @@ static void init_vm_bootargs_info(struct acrn_vm *vm, struct multiboot_info *mbi
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Kernel bootarg and zero page are right before the kernel image */
|
/* Kernel bootarg and zero page are right before the kernel image */
|
||||||
if (vm->sw.bootargs_info.size > 0) {
|
if (vm->sw.bootargs_info.size > 0U) {
|
||||||
vm->sw.bootargs_info.load_addr = vm->sw.kernel_info.kernel_load_addr - (MEM_1K * 8U);
|
vm->sw.bootargs_info.load_addr = vm->sw.kernel_info.kernel_load_addr - (MEM_1K * 8U);
|
||||||
} else {
|
} else {
|
||||||
vm->sw.bootargs_info.load_addr = NULL;
|
vm->sw.bootargs_info.load_addr = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t get_mod_idx_by_tag(struct multiboot_module *mods, uint32_t mods_count, const char *tag)
|
/* @pre mods != NULL
|
||||||
|
*/
|
||||||
|
static uint32_t get_mod_idx_by_tag(const struct multiboot_module *mods, uint32_t mods_count, const char *tag)
|
||||||
{
|
{
|
||||||
uint32_t i, ret = INVALID_MOD_IDX;
|
uint32_t i, ret = INVALID_MOD_IDX;
|
||||||
uint32_t tag_len = strnlen_s(tag, MAX_MOD_TAG_LEN);
|
uint32_t tag_len = strnlen_s(tag, MAX_MOD_TAG_LEN);
|
||||||
|
|
||||||
for (i = 0; i < mods_count; i++) {
|
for (i = 0U; i < mods_count; i++) {
|
||||||
const char *mm_string = (char *)hpa2hva((uint64_t)mods[i].mm_string);
|
const char *mm_string = (char *)hpa2hva((uint64_t)mods[i].mm_string);
|
||||||
uint32_t mm_str_len = strnlen_s(mm_string, MAX_MOD_TAG_LEN);
|
uint32_t mm_str_len = strnlen_s(mm_string, MAX_MOD_TAG_LEN);
|
||||||
|
|
||||||
/* when do file stitch by tool, the tag in mm_string might be followed with 0x0d or 0x0a */
|
/* when do file stitch by tool, the tag in mm_string might be followed with 0x0d or 0x0a */
|
||||||
if ((mm_str_len >= tag_len) && (strncmp(mm_string, tag, tag_len) == 0)
|
if ((mm_str_len >= tag_len) && (strncmp(mm_string, tag, tag_len) == 0)
|
||||||
&& ((mm_string[tag_len] == 0x0d)
|
&& ((*(mm_string + tag_len) == 0x0d)
|
||||||
|| (mm_string[tag_len] == 0x0a)
|
|| (*(mm_string + tag_len) == 0x0a)
|
||||||
|| (mm_string[tag_len] == 0))){
|
|| (*(mm_string + tag_len) == 0))){
|
||||||
ret = i;
|
ret = i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -201,7 +209,7 @@ static uint32_t get_mod_idx_by_tag(struct multiboot_module *mods, uint32_t mods_
|
|||||||
|
|
||||||
/* @pre vm != NULL && mbi != NULL
|
/* @pre vm != NULL && mbi != NULL
|
||||||
*/
|
*/
|
||||||
static int32_t init_vm_sw_load(struct acrn_vm *vm, struct multiboot_info *mbi)
|
static int32_t init_vm_sw_load(struct acrn_vm *vm, const struct multiboot_info *mbi)
|
||||||
{
|
{
|
||||||
struct acrn_vm_config *vm_config = get_vm_config(vm->vm_id);
|
struct acrn_vm_config *vm_config = get_vm_config(vm->vm_id);
|
||||||
struct multiboot_module *mods = (struct multiboot_module *)hpa2hva((uint64_t)mbi->mi_mods_addr);
|
struct multiboot_module *mods = (struct multiboot_module *)hpa2hva((uint64_t)mbi->mi_mods_addr);
|
||||||
@ -210,10 +218,12 @@ static int32_t init_vm_sw_load(struct acrn_vm *vm, struct multiboot_info *mbi)
|
|||||||
|
|
||||||
dev_dbg(ACRN_DBG_BOOT, "mod counts=%d\n", mbi->mi_mods_count);
|
dev_dbg(ACRN_DBG_BOOT, "mod counts=%d\n", mbi->mi_mods_count);
|
||||||
|
|
||||||
|
if (mods != NULL) {
|
||||||
mod_idx = get_mod_idx_by_tag(mods, mbi->mi_mods_count, vm_config->os_config.kernel_mod_tag);
|
mod_idx = get_mod_idx_by_tag(mods, mbi->mi_mods_count, vm_config->os_config.kernel_mod_tag);
|
||||||
if (mod_idx != INVALID_MOD_IDX) {
|
if (mod_idx != INVALID_MOD_IDX) {
|
||||||
ret = init_vm_kernel_info(vm, &mods[mod_idx]);
|
ret = init_vm_kernel_info(vm, &mods[mod_idx]);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
init_vm_bootargs_info(vm, mbi);
|
init_vm_bootargs_info(vm, mbi);
|
||||||
|
@ -50,6 +50,9 @@ static uint32_t create_zeropage_e820(struct zero_page *zp, const struct acrn_vm
|
|||||||
return entry_num;
|
return entry_num;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @pre vm != NULL
|
||||||
|
*/
|
||||||
static uint64_t create_zero_page(struct acrn_vm *vm)
|
static uint64_t create_zero_page(struct acrn_vm *vm)
|
||||||
{
|
{
|
||||||
struct zero_page *zeropage;
|
struct zero_page *zeropage;
|
||||||
@ -98,6 +101,9 @@ static uint64_t create_zero_page(struct acrn_vm *vm)
|
|||||||
return gpa;
|
return gpa;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @pre vm != NULL
|
||||||
|
*/
|
||||||
static void prepare_loading_bzimage(struct acrn_vm *vm, struct acrn_vcpu *vcpu)
|
static void prepare_loading_bzimage(struct acrn_vm *vm, struct acrn_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
@ -150,6 +156,9 @@ static void prepare_loading_bzimage(struct acrn_vm *vm, struct acrn_vcpu *vcpu)
|
|||||||
__func__, vm->vm_id, vcpu_get_gpreg(vcpu, CPU_REG_RSI));
|
__func__, vm->vm_id, vcpu_get_gpreg(vcpu, CPU_REG_RSI));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @pre vm != NULL
|
||||||
|
*/
|
||||||
static void prepare_loading_rawimage(struct acrn_vm *vm)
|
static void prepare_loading_rawimage(struct acrn_vm *vm)
|
||||||
{
|
{
|
||||||
struct sw_kernel_info *sw_kernel = &(vm->sw.kernel_info);
|
struct sw_kernel_info *sw_kernel = &(vm->sw.kernel_info);
|
||||||
@ -158,6 +167,9 @@ static void prepare_loading_rawimage(struct acrn_vm *vm)
|
|||||||
sw_kernel->kernel_entry_addr = (void *)vm_config->os_config.kernel_entry_addr;
|
sw_kernel->kernel_entry_addr = (void *)vm_config->os_config.kernel_entry_addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @pre vm != NULL
|
||||||
|
*/
|
||||||
int32_t direct_boot_sw_loader(struct acrn_vm *vm)
|
int32_t direct_boot_sw_loader(struct acrn_vm *vm)
|
||||||
{
|
{
|
||||||
int32_t ret = 0;
|
int32_t ret = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user