Intel and ARM are now basically the same. No more need for those level of indirection. Consolidate it and save a lot of lines of code.
Signed-off-by: Ralf Ramsauer <[email protected]> --- hypervisor/arch/x86/include/asm/vcpu.h | 7 ------ hypervisor/arch/x86/svm.c | 7 ------ hypervisor/arch/x86/vcpu.c | 33 ++++++++++---------------- hypervisor/arch/x86/vmx.c | 7 ------ 4 files changed, 12 insertions(+), 42 deletions(-) diff --git a/hypervisor/arch/x86/include/asm/vcpu.h b/hypervisor/arch/x86/include/asm/vcpu.h index 24872f55..37c9630b 100644 --- a/hypervisor/arch/x86/include/asm/vcpu.h +++ b/hypervisor/arch/x86/include/asm/vcpu.h @@ -25,11 +25,6 @@ X86_CR0_MP | X86_CR0_PE) #define X86_CR4_HOST_STATE X86_CR4_PAE -struct vcpu_io_bitmap { - u8 *data; - u32 size; -}; - struct vcpu_io_intercept { u16 port; unsigned int size; @@ -88,8 +83,6 @@ const u8 *vcpu_get_inst_bytes(const struct guest_paging_structures *pg_structs, void vcpu_skip_emulated_instruction(unsigned int inst_len); -void vcpu_vendor_get_cell_io_bitmap(struct cell *cell, - struct vcpu_io_bitmap *out); unsigned int vcpu_vendor_get_io_bitmap_pages(void); #define VCPU_CS_DPL_MASK BIT_MASK(6, 5) diff --git a/hypervisor/arch/x86/svm.c b/hypervisor/arch/x86/svm.c index ae215ade..74abe652 100644 --- a/hypervisor/arch/x86/svm.c +++ b/hypervisor/arch/x86/svm.c @@ -1007,13 +1007,6 @@ const u8 *vcpu_get_inst_bytes(const struct guest_paging_structures *pg_structs, } } -void vcpu_vendor_get_cell_io_bitmap(struct cell *cell, - struct vcpu_io_bitmap *iobm) -{ - iobm->data = cell->arch.io_bitmap; - iobm->size = IOPM_PAGES * PAGE_SIZE; -} - unsigned int vcpu_vendor_get_io_bitmap_pages(void) { return IOPM_PAGES; diff --git a/hypervisor/arch/x86/vcpu.c b/hypervisor/arch/x86/vcpu.c index eb171605..2e3a1880 100644 --- a/hypervisor/arch/x86/vcpu.c +++ b/hypervisor/arch/x86/vcpu.c @@ -81,9 +81,8 @@ int vcpu_cell_init(struct cell *cell) const unsigned int io_bitmap_pages = vcpu_vendor_get_io_bitmap_pages(); const u8 *pio_bitmap = jailhouse_cell_pio_bitmap(cell->config); u32 pio_bitmap_size = cell->config->pio_bitmap_size; - struct vcpu_io_bitmap cell_iobm, root_cell_iobm; unsigned int n, pm_timer_addr; - u32 size; + u32 size, iobm_size; int err; u8 *b; @@ -97,18 +96,16 @@ int vcpu_cell_init(struct cell *cell) return err; } - vcpu_vendor_get_cell_io_bitmap(cell, &cell_iobm); - /* initialize io bitmap to trap all accesses */ - memset(cell_iobm.data, -1, cell_iobm.size); + iobm_size = io_bitmap_pages * PAGE_SIZE; + memset(cell->arch.io_bitmap, -1, iobm_size); /* copy io bitmap from cell config */ - size = pio_bitmap_size > cell_iobm.size ? - cell_iobm.size : pio_bitmap_size; - memcpy(cell_iobm.data, pio_bitmap, size); + size = pio_bitmap_size > iobm_size ? iobm_size : pio_bitmap_size; + memcpy(cell->arch.io_bitmap, pio_bitmap, size); /* always intercept access to i8042 command register */ - cell_iobm.data[I8042_CMD_REG / 8] |= 1 << (I8042_CMD_REG % 8); + cell->arch.io_bitmap[I8042_CMD_REG / 8] |= 1 << (I8042_CMD_REG % 8); /* but moderate only if the config allows i8042 access */ cell->arch.pio_i8042_allowed = @@ -121,20 +118,17 @@ int vcpu_cell_init(struct cell *cell) * Shrink PIO access of root cell corresponding to new cell's * access rights. */ - vcpu_vendor_get_cell_io_bitmap(&root_cell, &root_cell_iobm); - for (b = root_cell_iobm.data; pio_bitmap_size > 0; + for (b = root_cell.arch.io_bitmap; pio_bitmap_size > 0; b++, pio_bitmap++, pio_bitmap_size--) *b |= ~*pio_bitmap; } /* permit access to the PM timer if there is any */ pm_timer_addr = system_config->platform_info.x86.pm_timer_address; - if (pm_timer_addr) { - for (n = 0; n < 4; n++, pm_timer_addr++) { - b = cell_iobm.data; - b[pm_timer_addr / 8] &= ~(1 << (pm_timer_addr % 8)); - } - } + if (pm_timer_addr) + for (n = 0; n < 4; n++, pm_timer_addr++) + cell->arch.io_bitmap[pm_timer_addr / 8] &= + ~(1 << (pm_timer_addr % 8)); return 0; } @@ -145,15 +139,12 @@ void vcpu_cell_exit(struct cell *cell) jailhouse_cell_pio_bitmap(root_cell.config); const u8 *pio_bitmap = jailhouse_cell_pio_bitmap(cell->config); u32 pio_bitmap_size = cell->config->pio_bitmap_size; - struct vcpu_io_bitmap root_cell_iobm; u8 *b; - vcpu_vendor_get_cell_io_bitmap(&root_cell, &root_cell_iobm); - if (root_cell.config->pio_bitmap_size < pio_bitmap_size) pio_bitmap_size = root_cell.config->pio_bitmap_size; - for (b = root_cell_iobm.data; pio_bitmap_size > 0; + for (b = root_cell.arch.io_bitmap; pio_bitmap_size > 0; b++, pio_bitmap++, root_pio_bitmap++, pio_bitmap_size--) *b &= *pio_bitmap | *root_pio_bitmap; diff --git a/hypervisor/arch/x86/vmx.c b/hypervisor/arch/x86/vmx.c index 182e4de0..c4b7dbb6 100644 --- a/hypervisor/arch/x86/vmx.c +++ b/hypervisor/arch/x86/vmx.c @@ -1219,13 +1219,6 @@ void vmx_entry_failure(void) panic_stop(); } -void vcpu_vendor_get_cell_io_bitmap(struct cell *cell, - struct vcpu_io_bitmap *iobm) -{ - iobm->data = cell->arch.io_bitmap; - iobm->size = PIO_BITMAP_PAGES * PAGE_SIZE; -} - unsigned int vcpu_vendor_get_io_bitmap_pages(void) { return PIO_BITMAP_PAGES; -- 2.22.0 -- You received this message because you are subscribed to the Google Groups "Jailhouse" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/jailhouse-dev/20190725171123.9266-2-ralf.ramsauer%40oth-regensburg.de.
