mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-09-23 17:58:30 +00:00
HV: nuc7i7dnb example of new VM configuratons layout
There are 3 kinds of configurations in ACRN hypervisor source code: hypervisor overall setting, per-board setting and scenario specific per-VM setting. Currently Kconfig act as hypervisor overall setting and its souce is located at "hypervisor/arch/x86/configs/$(BOARD).config"; Per-board configs are located at "hypervisor/arch/x86/configs/$(BOARD)" folder; scenario specific per-VM configs are located at "hypervisor/scenarios/$(SCENARIO)" folder. This layout brings issues that board configs and VM configs are coupled tightly. The board specific Kconfig file and misc_cfg.h are shared by all scenarios, and scenario specific pci_dev.c is shared by all boards. So the user have no way to build hypervisor binary for different scenario on different board with one source code repo. The patch will setup a new VM configurations layout as below: misc/vm_configs ├── boards --> folder of supported boards │ ├── <board_1> --> scenario-irrelevant board configs │ │ ├── board.c --> C file of board configs │ │ ├── board_info.h --> H file of board info │ │ ├── pci_devices.h --> pBDF of PCI devices │ │ └── platform_acpi_info.h --> native ACPI info │ ├── <board_2> │ ├── <board_3> │ └── <board...> └── scenarios --> folder of supported scenarios ├── <scenario_1> --> scenario specific VM configs │ ├── <board_1> --> board specific VM configs for <scenario_1> │ │ ├── <board_1>.config --> Kconfig for specific scenario on specific board │ │ ├── misc_cfg.h --> H file of board specific VM configs │ │ ├── pci_dev.c --> board specific VM pci devices list │ │ └── vbar_base.h --> vBAR base info of VM PT pci devices │ ├── <board_2> │ ├── <board_3> │ ├── <board...> │ ├── vm_configurations.c --> C file of scenario specific VM configs │ └── vm_configurations.h --> H file of scenario specific VM configs ├── <scenario_2> ├── <scenario_3> └── <scenario...> The new layout would decouple board configs and VM configs completely: The boards folder stores kinds of supported boards info, each board folder stores scenario-irrelevant board configs only, which could be totally got from a physical platform and works for all scenarios; The scenarios folder stores VM configs of kinds of working scenario. In each scenario folder, besides the generic scenario specific VM configs, the board specific VM configs would be put in a embedded board folder. In new layout, all configs files will be removed out of hypervisor folder and moved to a separate folder. This would make hypervisor LoC calculation more precisely with below fomula: typical LoC = Loc(hypervisor) + Loc(one vm_configs) which Loc(one vm_configs) = Loc(misc/vm_configs/boards/<board>) + LoC(misc/vm_configs/scenarios/<scenario>/<board>) + Loc(misc/vm_configs/scenarios/<scenario>/vm_configurations.c + Loc(misc/vm_configs/scenarios/<scenario>/vm_configurations.h Tracked-On: #5077 Signed-off-by: Victor Sun <victor.sun@intel.com> Reviewed-by: Jason Chen CJ <jason.cj.chen@intel.com> Acked-by: Eddie Dong <eddie.dong@intel.com>
This commit is contained in:
@@ -30,7 +30,7 @@ extern struct dmar_info plat_dmar_info;
|
||||
#ifdef CONFIG_RDT_ENABLED
|
||||
extern struct platform_clos_info platform_l2_clos_array[MAX_PLATFORM_CLOS_NUM];
|
||||
extern struct platform_clos_info platform_l3_clos_array[MAX_PLATFORM_CLOS_NUM];
|
||||
extern struct platform_clos_info platform_mba_clos_array[MAX_PLATFORM_CLOS_NUM];
|
||||
extern struct platform_clos_info platform_mba_clos_array[MAX_MBA_CLOS_NUM_ENTRIES];
|
||||
#endif
|
||||
|
||||
extern const struct cpu_state_table board_cpu_state_tbl;
|
||||
|
@@ -7,7 +7,7 @@
|
||||
#ifndef PAGE_H
|
||||
#define PAGE_H
|
||||
|
||||
#include <pci_devices.h>
|
||||
#include <board_info.h>
|
||||
|
||||
#define PAGE_SHIFT 12U
|
||||
#define PAGE_SIZE (1U << PAGE_SHIFT)
|
||||
@@ -31,14 +31,14 @@
|
||||
* - Guest OS won't re-program device MMIO bars to the address not covered by
|
||||
* this EPT_ADDRESS_SPACE.
|
||||
*/
|
||||
#define EPT_ADDRESS_SPACE(size) ((size > MEM_2G) ? \
|
||||
#define EPT_ADDRESS_SPACE(size) (((size) > MEM_2G) ? \
|
||||
((size) + PLATFORM_LO_MMIO_SIZE + PLATFORM_HI_MMIO_SIZE) \
|
||||
: (MEM_2G + PLATFORM_LO_MMIO_SIZE + PLATFORM_HI_MMIO_SIZE))
|
||||
|
||||
#define PTDEV_HI_MMIO_START ((CONFIG_UOS_RAM_SIZE > MEM_2G) ? \
|
||||
(CONFIG_UOS_RAM_SIZE + PLATFORM_LO_MMIO_SIZE) : (MEM_2G + PLATFORM_LO_MMIO_SIZE))
|
||||
|
||||
#define PRE_VM_EPT_ADDRESS_SPACE(size) (PTDEV_HI_MMIO_START + PTDEV_HI_MMIO_SIZE)
|
||||
#define PRE_VM_EPT_ADDRESS_SPACE(size) (PTDEV_HI_MMIO_START + HI_MMIO_SIZE)
|
||||
|
||||
#define TOTAL_EPT_4K_PAGES_SIZE (PRE_VM_NUM*(PT_PAGE_NUM(PRE_VM_EPT_ADDRESS_SPACE(CONFIG_UOS_RAM_SIZE))*MEM_4K)) + \
|
||||
(SOS_VM_NUM*(PT_PAGE_NUM(EPT_ADDRESS_SPACE(CONFIG_SOS_RAM_SIZE))*MEM_4K)) + \
|
||||
|
Reference in New Issue
Block a user