1. 23 10月, 2007 8 次提交
    • R
      Lguest support for Virtio · 19f1537b
      Rusty Russell 提交于
      This makes lguest able to use the virtio devices.
      
      We change the device descriptor page from a simple array to a variable
      length "type, config_len, status, config data..." format, and
      implement virtio_config_ops to read from that config data.
      
      We use the virtio ring implementation for an efficient Guest <-> Host
      virtqueue mechanism, and the new LHCALL_NOTIFY hypercall to kick the
      host when it changes.
      
      We also use LHCALL_NOTIFY on kernel addresses for very very early
      console output.  We could have another hypercall, but this hack works
      quite well.
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      19f1537b
    • R
      Remove old lguest bus and drivers. · 0ca49ca9
      Rusty Russell 提交于
      This gets rid of the lguest bus, drivers and DMA mechanism, to make
      way for a generic virtio mechanism.
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      0ca49ca9
    • R
      Virtio helper routines for a descriptor ringbuffer implementation · 0a8a69dd
      Rusty Russell 提交于
      These helper routines supply most of the virtqueue_ops for hypervisors
      which want to use a ring for virtio.  Unlike the previous lguest
      implementation:
      
      1) The rings are variable sized (2^n-1 elements).
      2) They have an unfortunate limit of 65535 bytes per sg element.
      3) The page numbers are always 64 bit (PAE anyone?)
      4) They no longer place used[] on a separate page, just a separate
         cacheline.
      5) We do a modulo on a variable.  We could be tricky if we cared.
      6) Interrupts and notifies are suppressed using flags within the rings.
      
      Users need only get the ring pages and provide a notify hook (KVM
      wants the guest to allocate the rings, lguest does it sanely).
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      Cc: Dor Laor <dor.laor@qumranet.com>
      0a8a69dd
    • R
      Boot with virtual == physical to get closer to native Linux. · 47436aa4
      Rusty Russell 提交于
      1) This allows us to get alot closer to booting bzImages.
      
      2) It means we don't have to know page_offset.
      
      3) The Guest needs to modify the boot pagetables to create the
         PAGE_OFFSET mapping before jumping to C code.
      
      4) guest_pa() walks the page tables rather than using page_offset.
      
      5) We don't use page_offset to figure out whether to emulate: it was
         always kinda quesationable, and won't work for instructions done
         before remapping (bzImage unpacking in particular).
      
      6) We still want the kernel address for tlb flushing: have the initial
         hypercall give us that, too.
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      47436aa4
    • R
      Allow guest to specify syscall vector to use. · c18acd73
      Rusty Russell 提交于
      (Based on Ron Minnich's LGUEST_PLAN9_SYSCALL patch).
      
      This patch allows Guests to specify what system call vector they want,
      and we try to reserve it.  We only allow one non-Linux system call
      vector, to try to avoid DoS on the Host.
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      c18acd73
    • J
      Make hypercalls arch-independent. · b410e7b1
      Jes Sorensen 提交于
      Clean up the hypercall code to make the code in hypercalls.c
      architecture independent. First process the common hypercalls and
      then call lguest_arch_do_hcall() if the call hasn't been handled.
      Rename struct hcall_ring to hcall_args.
      
      This patch requires the previous patch which reorganize the layout of
      struct lguest_regs on i386 so they match the layout of struct
      hcall_args.
      Signed-off-by: NJes Sorensen <jes@sgi.com>
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      b410e7b1
    • J
      Move i386 part of core.c to x86/core.c. · 625efab1
      Jes Sorensen 提交于
      Separate i386 architecture specific from core.c and move it to
      x86/core.c and add x86/lguest.h header file to match.
      Signed-off-by: NJes Sorensen <jes@sgi.com>
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      625efab1
    • R
      Move lguest guest support to arch/x86. · 34b8867a
      Rusty Russell 提交于
      Lguest has two sides: host support (to launch guests) and guest
      support (replacement boot path and paravirt_ops).  This moves the
      guest side to arch/x86/lguest where it's closer to related code.
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      Cc: Andi Kleen <ak@suse.de>
      34b8867a