- 25 Oct, 2016 40 commits
-
-
Charlie Jacobsen authored
Straight copy over from old code.
-
Charlie Jacobsen authored
-
Charlie Jacobsen authored
vmx_setup_vmcs ==> vmx_setup_vmcs_guest_settings and vmx_setup_vmcs_host. vmx_setup_vmcs_guest_settings -- execution control (e.g., interrupt handling) -- ept pointer -- %cr0 and %cr4 access control vmx_setup_vmcs_guest_regs -- initial %cr0, %cr4 -- segmentation--bases, limits, selectors -- guest EFER (long mode enabled, no syscall/sysret) -- initial activity and interrupt state vmx_setup_vmcs_host -- control and segmentation regs -- host EFER -- no saving of syscall/sysret msrs since these are disabled in guest -- no page attribute table
-
Charlie Jacobsen authored
lcd_create --> lcd_vmx_create, with a lot of code re-factored or removed for now, to keep it simple (no gdt, idt, isr, paging bitmap, address space init, etc.). -- basic ept initialization -- vmcs loading on a cpu -- re-factored __vmx_setup_cpu to use built-in segment descriptor access functions in desc.h -- removed host sys_enter storage, since this msr is disabled right now anyway -- more doc to understand vmcs load process
-
Charles Jacobsen authored
Some simple renaming -- LCD => LCD_DOMAINS -- core.c => lcd-domains.c -- new LCD_VMX_INTEL configuration Adjusted virt/lcd/Kconfig to reflect LCD_DOMAINS dependency on LCD_VMX_INTEL.
-
Charles Jacobsen authored
Added straight copy from old code of lcd_vmx_exit. Shifted lcd_vmx_init and lcd_vmx_exit to arch/x86/include/asm/lcd-vmx.h. Ideally, if we want this to be arch-independent, probably want to change header to asm/lcd.h, and routines to lcd_arch_init and lcd_arch_exit, or something similar.
-
Charles Jacobsen authored
Two components to the lcd build now: -- arch/x86/lcd/Makefile: for building x86 lcd code -- virt/lcd/Makefile: for building arch-indep lcd code Modified the build system just slightly for a cleaner build: -- virt/ directory treated like ipc/, usr/, etc. directories -- added Kconfig and Makefile to virt/, mirroring drivers/ -- updated top-level Makefile to include virt/ as vmlinux directory / dependency, so build system will recur into virt/ -- updated arch/x86/Kconfig to include virt/Kconfig, so it will be included as a menu item -- updated arch/x86/Kbuild to include arch/x86/lcd/ Removed old capabilities code in cap/. Removed lcd syscall. Temporarily turned off build for drivers/lcd. Fixed most bugs in lcd-vmx (still need to do lcd_vmx_exit). -- minor naming issues in lcd-vmx.h -- straight copy over of vmx_disable_intercepts_for_msr, but with more doc -- removed VMX_EPT_INDIVIDUAL_ADDR macro from vmx.h (where did this come from? it's not documented in the intel manual, nor is it used in kvm)
-
Charlie Jacobsen authored
The main makefile will now go in virt/lcd. The lcd-vmx.h header will be in the standard include path, and I can reference the x86-dependent code from there, so it should all just work (build not tested yet, will do so soon). Small change to lcd-vmx.c: Made sure I freed msr bitmap page on failure.
-
Charlie Jacobsen authored
Added a few missing macros to arch/x86/include/vmx.h, and RESERVED masks for easily determining which bits in a vmx control are reserved (needed in adjust_vmx_controls). Re-factored setup_vmcs_config and adjust_vmx_controls. setup_vmcs_config does pretty much the same thing, but it fails immediately if a control isn't available -- adjust_vmx_controls confirms that the exact desired controls are available, and sets the reserved bits to 1 or 0 as needed. Cleaner comments and organization. Re-factored the vmx basic settings to vmcs_config_basic_settings. Removed some of the vmx feature check code that was in the original lcd_vmx_init, as setup_vmcs_config now does that. Essentially a straight copy over of: -- __vmx_enable -- vmx_enable -- vmx_disable -- vmx_free_vmxon_areas -- __vmxon -- __vmxoff The only difference is I shifted tbl and cache invalidation to vmx_enable (originally in __vmx_enable) and added some comments. Straight copy over of -- vmx_alloc_vmcs -- vmx_free_vmcs -- invvpid, invept code, with slight renaming
-
Charlie Jacobsen authored
Arch-dependent code will go in arch/x86/lcd, and the header(s) will reside in arch/x86/include/asm. For now, I have only moved some of the arch-dependent junk that was in include/lcd/lcd.h into arch/x86/include/asm/lcd-vmx.h.
-
Charlie Jacobsen authored
Completed lcd_setup_addr_space (replaced vmx_create_initial_page_table). lcd_setup_addr_space allocates and maps the guest physical and virtual memory needed for the lcd when it first enters. The code should be easily extendable for a different address space layout. Guest virtual and ept mapping code is now fairly symmetric and easier to understand. Comment headers for ept and gva functions. Next up: seeing if I can build, and get it to run. Then I'll merge with the main branch (lcd).
-
Charlie Jacobsen authored
A lot of changes here (:gulp:). ept_map_gpa_to_hva -- renamed to: lcd_ept_gpa_to_hva -- cleaned it up Bitmap no longer in lcd; declared as local var inside lcd_setup_guest_virtual. alloc_pt_item -- renamed / refactored to: lcd_gv_alloc_paging_mem_page -- new code allocs host physical page for paging mem, and allocates chunk of guest physical address space (by setting bit in bitmap, as before) map_gva_to_gpa -- renamed / refactored to: lcd_gv_walk -- break apart each level in guest virtual page walk into separate functions, to make it more readable -- serves purpose similar to lcd_ept_walk, but returns a pte in the guest virtual page table lcd_setup_guest_virtual -- takes care of guest virtual mapping that the old vmx_setup_initial_page_table did Code not tested or built yet.
-
Charlie Jacobsen authored
New memory layout in lcd_defs.h, with macros. -- no idt, tss, or interrupt service routines Started re-factoring lcd address space initialization. vmx_setup_initial_page_table will soon be replaced by lcd_setup_addr_space. -- lcd_setup_initial_ept for alloc'ing and mapping host physical memory -- re-factored some of the ept code to make the interface cleaner -- need to think about locking the ept, where it should be done -- soon will have lcd_setup_initial_virt, or something similar, for initializing guest virtual page tables. Copied map_gva_to_gpa routine to new tools/lcd/liblcd/vm.c. This is where liblcd will go. liblcd will contain utilities an lcd can call.
-
Anton Burtsev authored
Conflicts: fs/namei.c Resolved-by:
Vikram Narayanan <vikram186@gmail.com>
-
Anton Burtsev authored
It took me a while to figure out a suggested layout for Linux user-visible headers. I ended up with this: ./include/lcd/lcd.h -- includes #include <uapi/linux/lcd.h> ./include/uapi/linux/lcd.h -- this file will be installed to /usr/linux/lcd.h Note on installing user-visible header files 1) Add header-y += lcd.h line to include/uapi/linux/Kbuild 2) Install sanitized header files into ./usr/include sudo make install_headers 3) Copy ./usr/include to /usr/include sudo find usr/include \( -name .install -o -name ..install.cmd \) -delete sudo cp -rv usr/include/* /usr/include
-
Anton Burtsev authored
-
Anton Burtsev authored
-
Anton Burtsev authored
-- The makefile is now in ./arch/x86/lcd
-
Anton Burtsev authored
- Renamed target lcd.ko to lcd-domains.ko
-
Anton Burtsev authored
-
Anton Burtsev authored
-
Charlie Jacobsen authored
Per Linux coding style spec. Updated files in arch/x86/lcd, drivers/lcd, include/lcd.
-
Anton Burtsev authored
-- A skeleton for the IOCTL interface -- Public include file <linux/lcd-domains.h> -- Moved module load/unload from arch/x86/lcd into drivers/lcd -- Build crashes for modules (built-in works)
-
Anton Burtsev authored
-
Anton Burtsev authored
-
Anton Burtsev authored
-
Anton Burtsev authored
-
Anton Burtsev authored
-
Anton Burtsev authored
-
Anton Burtsev authored
Not ideal. Some problems: - The arch dependent and independent parts are not completely separated. - The module builds in arch/x86/lcd and this is a bit strange - I can't build with LCD buildin, but build works if I build it as a module - There is still a bunch of old warrnings from Weibin's code
-
Anton Burtsev authored
-
Charles Jacobsen authored
Capability code in xcap/ moved to virt/lcd. Arch-independent code in arch/x86/lcd moved to virt/lcd (including tools and guest directories).
-
Jithu Joseph authored
-
Muktesh Khole authored
-
Weibin Sun authored
a command to list number of undefined symbols in kernel modules under a given directory, and sort the output by the numbers. As a tool to decide the module with least dependencies.
-
Jithu Joseph authored
-
Jithu Joseph authored
-
Muktesh Khole authored
-
Weibin Sun authored
-
Sarah Spall authored
-