1. 25 Oct, 2016 40 commits
    • Charlie Jacobsen's avatar
      Updated kconfig files. · dee9b495
      Charlie Jacobsen authored
      -- Moved LCD_INTEL config to arch/x86/Kconfig
    • Charlie Jacobsen's avatar
      Simple re-naming to arch-agnostic names for arch-dep interface. · c8a88195
      Charlie Jacobsen authored
      -- Moved some vmx-specific data structures into implementation file.
      -- lcd_vmx_* => lcd_arch_*
      -- updated virt/lcd/lcd-domains.c
    • Charlie Jacobsen's avatar
    • Charlie Jacobsen's avatar
    • Charlie Jacobsen's avatar
    • Sarah Spall's avatar
    • Sarah Spall's avatar
    • Charlie Jacobsen's avatar
      Added low level vmx launch / resume code. · d90c0cac
      Charlie Jacobsen authored
      Pretty much straight copy over of lcd_run => vmx_enter.
      More comments. Removed re-load of user %ds and %es since
      we are running in 64-bit.
    • Sarah Spall's avatar
      removing generated files · 689cc475
      Sarah Spall authored
    • Sarah Spall's avatar
      removing tests directory · 1e895737
      Sarah Spall authored
    • Sarah Spall's avatar
      removing doc directory · 10172da3
      Sarah Spall authored
    • Sarah Spall's avatar
      removing probably generated file · 58282b09
      Sarah Spall authored
    • Sarah Spall's avatar
      Adding vembyr, needed to generator parser, as well as a starting grammar based... · ecc3b58a
      Sarah Spall authored
      Adding vembyr, needed to generator parser, as well as a starting grammar based on Barrelfish's flounder, and other supporting files. Waited until code compiled to commit
    • Charlie Jacobsen's avatar
      Added header doc to lcd-vmx.h and lcd_vmx_destroy. · 4cdb5e83
      Charlie Jacobsen authored
      lcd_destroy => lcd_vmx_destroy. Pretty much a straight
      copy over, but removed some unneeded code.
    • Charles Jacobsen's avatar
      Fixed vmcs configuration bugs (small macro bugs in vmx.h). · aad218b5
      Charles Jacobsen authored
      Debug controls macros for vm exit and vm entry were
      wrong (I wonder if the kvm guys know, it's in the stable
      linux build).
      I had to enable exiting on load / save to %cr3 for it
      to run on emulab machines.
      Tweaked vmx control debugging code, cleaned up
      logic in adjust_vmx_controls, much simpler.
    • Charles Jacobsen's avatar
      Added vmx configuration debugging. · 8c3624a5
      Charles Jacobsen authored
      -- vmx_print_controls
      -- updated setup_vmcs_config to use it
    • Charles Jacobsen's avatar
      Fixed bugs in lcd_vmx_create and dependencies. Clean build. · 4d27a893
      Charles Jacobsen authored
      Conditional compilation on number of autoload msr's.
    • Charlie Jacobsen's avatar
      Added vmcs read / write routines. · 0de48e3b
      Charlie Jacobsen authored
      Straight copy over from old code.
    • Charlie Jacobsen's avatar
    • Charlie Jacobsen's avatar
      Finished lcd_vmx_create and its dependencies (untested). · 7607ec9a
      Charlie Jacobsen authored
      vmx_setup_vmcs ==> vmx_setup_vmcs_guest_settings and
      -- execution control (e.g., interrupt handling)
      -- ept pointer
      -- %cr0 and %cr4 access control
      -- initial %cr0, %cr4
      -- segmentation--bases, limits, selectors
      -- guest EFER (long mode enabled, no syscall/sysret)
      -- initial activity and interrupt state
      -- control and segmentation regs
      -- host EFER
      -- no saving of syscall/sysret msrs since these are
         disabled in guest
      -- no page attribute table
    • Charlie Jacobsen's avatar
      About half way done with vmcs initialization code. · acbb9533
      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's avatar
      Finished tweaking build setup (will test modprobe next). · cfee63b6
      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's avatar
      Successful build with lcd_vmx_init and lcd_vmx_exit. · 62e4ac37
      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's avatar
      Fixed build system for lcd, and most compiler errors. · 7c05c7a0
      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
      -- 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
      -- 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's avatar
      Tweaking the build set up. · 70f48063
      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's avatar
      Finished lcd_vmx_init and its dependencies. · 18122896
      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
      Removed some of the vmx feature check code that was in
      the original lcd_vmx_init, as setup_vmcs_config now does
      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's avatar
      Starting a fresh lcd-vmx arch-dependent interface. · 8a6ad472
      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
    • Charlie Jacobsen's avatar
      Completed re-factoring of address space code (untested). · 922c8135
      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's avatar
      Re-factored guest virtual address space setup code. · 2170318e
      Charlie Jacobsen authored
      A lot of changes here (:gulp:).
      -- renamed to: lcd_ept_gpa_to_hva
      -- cleaned it up
      Bitmap no longer in lcd; declared as local var
      inside lcd_setup_guest_virtual.
      -- 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)
      -- renamed / refactored to: lcd_gv_walk
      -- break apart each level in guest virtual page
         walk into separate functions, to make it more
      -- serves purpose similar to lcd_ept_walk, but
         returns a pte in the guest virtual page table
      -- takes care of guest virtual mapping that
         the old vmx_setup_initial_page_table did
      Code not tested or built yet.
    • Charlie Jacobsen's avatar
      Updated memory layout and re-factored addr space init. · 5270acc4
      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_initial_ept for alloc'ing and mapping
         host physical memory
      -- re-factored some of the ept code to make the interface
      -- 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's avatar
      Export putname (fix module build) · b404082a
      Anton Burtsev authored
      Resolved-by: Vikram Narayanan's avatarVikram Narayanan <vikram186@gmail.com>
    • Anton Burtsev's avatar
      Clean up user-level includes, build inskern4lcd tool · 2d55c00d
      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
      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's avatar
      ioctl interface to LCD · 552bd976
      Anton Burtsev authored
    • Anton Burtsev's avatar
    • Anton Burtsev's avatar
      Remove obsolete Makefile from ./virt/lcd · 4f665123
      Anton Burtsev authored
        -- The makefile is now in ./arch/x86/lcd
    • Anton Burtsev's avatar
      Wasn't able to link a module due to a name collision · 6c0118e0
      Anton Burtsev authored
        - Renamed target lcd.ko to lcd-domains.ko
    • Anton Burtsev's avatar
    • Anton Burtsev's avatar
    • Charlie Jacobsen's avatar
      Charlie Jacobsen authored
      Per Linux coding style spec. Updated files in
      arch/x86/lcd, drivers/lcd, include/lcd.
    • Anton Burtsev's avatar
      Working on ioctl interface for LCD · 3cbf87c0
      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)