22 Jul, 2011

2 commits

  • Also removes a long-unused #define and an extraneous semicolon.

    Signed-off-by: Rusty Russell

    Rusty Russell
     
  • The Host used to create some page tables for the Guest to use at the
    top of Guest memory; it would then tell the Guest where this was. In
    particular, it created linear mappings for 0 and 0xC0000000 addresses
    because lguest used to switch to its real page tables quite late in
    boot.

    However, since d50d8fe19 Linux initialized boot page tables in
    head_32.S even before the "are we lguest?" boot jump. So, now we can
    simplify things: the Host pagetable code assumes 1:1 linear mapping
    until it first calls the LHCALL_NEW_PGTABLE hypercall, which we now do
    before we reach C code.

    This also means that the Host doesn't need to know anything about the
    Guest's PAGE_OFFSET. (Non-Linux guests might not even have such a
    thing).

    Signed-off-by: Rusty Russell

    Rusty Russell
     

20 Jan, 2011

1 commit


30 Mar, 2010

1 commit

  • …it slab.h inclusion from percpu.h

    percpu.h is included by sched.h and module.h and thus ends up being
    included when building most .c files. percpu.h includes slab.h which
    in turn includes gfp.h making everything defined by the two files
    universally available and complicating inclusion dependencies.

    percpu.h -> slab.h dependency is about to be removed. Prepare for
    this change by updating users of gfp and slab facilities include those
    headers directly instead of assuming availability. As this conversion
    needs to touch large number of source files, the following script is
    used as the basis of conversion.

    http://userweb.kernel.org/~tj/misc/slabh-sweep.py

    The script does the followings.

    * Scan files for gfp and slab usages and update includes such that
    only the necessary includes are there. ie. if only gfp is used,
    gfp.h, if slab is used, slab.h.

    * When the script inserts a new include, it looks at the include
    blocks and try to put the new include such that its order conforms
    to its surrounding. It's put in the include block which contains
    core kernel includes, in the same order that the rest are ordered -
    alphabetical, Christmas tree, rev-Xmas-tree or at the end if there
    doesn't seem to be any matching order.

    * If the script can't find a place to put a new include (mostly
    because the file doesn't have fitting include block), it prints out
    an error message indicating which .h file needs to be added to the
    file.

    The conversion was done in the following steps.

    1. The initial automatic conversion of all .c files updated slightly
    over 4000 files, deleting around 700 includes and adding ~480 gfp.h
    and ~3000 slab.h inclusions. The script emitted errors for ~400
    files.

    2. Each error was manually checked. Some didn't need the inclusion,
    some needed manual addition while adding it to implementation .h or
    embedding .c file was more appropriate for others. This step added
    inclusions to around 150 files.

    3. The script was run again and the output was compared to the edits
    from #2 to make sure no file was left behind.

    4. Several build tests were done and a couple of problems were fixed.
    e.g. lib/decompress_*.c used malloc/free() wrappers around slab
    APIs requiring slab.h to be added manually.

    5. The script was run on all .h files but without automatically
    editing them as sprinkling gfp.h and slab.h inclusions around .h
    files could easily lead to inclusion dependency hell. Most gfp.h
    inclusion directives were ignored as stuff from gfp.h was usually
    wildly available and often used in preprocessor macros. Each
    slab.h inclusion directive was examined and added manually as
    necessary.

    6. percpu.h was updated not to include slab.h.

    7. Build test were done on the following configurations and failures
    were fixed. CONFIG_GCOV_KERNEL was turned off for all tests (as my
    distributed build env didn't work with gcov compiles) and a few
    more options had to be turned off depending on archs to make things
    build (like ipr on powerpc/64 which failed due to missing writeq).

    * x86 and x86_64 UP and SMP allmodconfig and a custom test config.
    * powerpc and powerpc64 SMP allmodconfig
    * sparc and sparc64 SMP allmodconfig
    * ia64 SMP allmodconfig
    * s390 SMP allmodconfig
    * alpha SMP allmodconfig
    * um on x86_64 SMP allmodconfig

    8. percpu.h modifications were reverted so that it could be applied as
    a separate patch and serve as bisection point.

    Given the fact that I had only a couple of failures from tests on step
    6, I'm fairly confident about the coverage of this conversion patch.
    If there is a breakage, it's likely to be something in one of the arch
    headers which should be easily discoverable easily on most builds of
    the specific arch.

    Signed-off-by: Tejun Heo <tj@kernel.org>
    Guess-its-ok-by: Christoph Lameter <cl@linux-foundation.org>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Lee Schermerhorn <Lee.Schermerhorn@hp.com>

    Tejun Heo
     

24 Sep, 2009

1 commit

  • * git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux-2.6-for-linus:
    lguest: don't force VIRTIO_F_NOTIFY_ON_EMPTY
    lguest: cleanup for map_switcher()
    lguest: use PGDIR_SHIFT for PAE code to allow different PAGE_OFFSET
    lguest: use set_pte/set_pmd uniformly for real page table entries
    lguest: move panic notifier registration to its expected place.
    virtio_blk: add support for cache flush
    virtio: add virtio IDs file
    virtio: get rid of redundant VIRTIO_ID_9P definition
    virtio: make add_buf return capacity remaining
    virtio_pci: minor MSI-X cleanups

    Linus Torvalds
     

23 Sep, 2009

2 commits


21 Sep, 2009

1 commit


30 Jul, 2009

2 commits

  • Every so often, after code shuffles, I need to go through and unbitrot
    the Lguest Journey (see drivers/lguest/README). Since we now use RCU in
    a simple form in one place I took the opportunity to expand that explanation.

    Signed-off-by: Rusty Russell
    Cc: Ingo Molnar
    Cc: Paul McKenney

    Rusty Russell
     
  • I don't really notice it (except to begrudge the extra vertical
    space), but Ingo does. And he pointed out that one excuse of lguest
    is as a teaching tool, it should set a good example.

    Signed-off-by: Rusty Russell
    Cc: Ingo Molnar

    Rusty Russell
     

12 Jun, 2009

5 commits


30 Mar, 2009

2 commits


30 Dec, 2008

1 commit


12 Aug, 2008

1 commit

  • Using a simple page table thrashing program I measure a slight
    improvement. The program creates five processes. Each touches 1000
    pages then schedules the next process. We repeat this 1000 times. As
    lguest only caches 4 cr3 values, this rebuilds a lot of shadow page
    tables requiring virt->phys mappings.

    Before: 5.93 seconds
    After: 5.40 seconds

    (Counts of slow vs fastpath in this usage are 6092 and 2852462 respectively.)

    And more importantly for lguest, the code is simpler.

    Signed-off-by: Rusty Russell

    Rusty Russell
     

28 Mar, 2008

1 commit


11 Mar, 2008

1 commit

  • Ahmed managed to crash the Host in release_pgd(), which cannot be a Guest
    bug, and indeed it wasn't.

    The bug was that handing a 0 as the address of the toplevel page table
    being manipulated can cause the lookup code in find_pgdir() to return
    an uninitialized cache entry (we shadow up to 4 top level page tables
    for each Guest).

    Commit 37cc8d7f963ba2deec29c9b68716944516a3244f introduced this
    behaviour in the Guest, uncovering the bug.

    The patch which he submitted (which removed the /4 from the index
    calculation) simply ensured that these high-indexed entries hit the
    early exit path of guest_set_pmd(). But you get lots of segfaults in
    guest userspace as the PMDs aren't being updated.

    Signed-off-by: Rusty Russell

    Rusty Russell
     

10 Feb, 2008

1 commit

  • Beginning from commit 4138cc3418f5, ioremap_nocache() sets the _PAGE_PWT
    flag.

    Lguest doesn't accept a guest pte with a _PWT flag and reports a "bad
    page table entry" in that case.

    Accept guest _PAGE_PWT page table entries.

    Signed-off-by: Ahmed S. Darwish
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Ahmed S. Darwish
     

30 Jan, 2008

8 commits


25 Oct, 2007

1 commit


23 Oct, 2007

5 commits

  • Jes complains that page table code still uses lgread_u32 even though
    it now uses general kernel pte types. The best thing to do is to
    generalize lgread_u32 and lgwrite_u32.

    This means we lose the efficiency of getuser(). We could potentially
    regain it if we used __copy_from_user instead of copy_from_user, but
    I'm not certain that our range check is equivalent to access_ok() on
    all platforms.

    Signed-off-by: Rusty Russell
    Acked-by: Jes Sorensen

    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: Rusty Russell

    Rusty Russell
     
  • Signed-off-by: Rusty Russell

    Rusty Russell
     
  • This is my first step in the migration of page_tables.c to the kernel
    types and functions/macros (2.6.23-rc3). Seems to be working OK.

    Signed-off-by: Matias Zabaljauregui
    Signed-off-by: Rusty Russell

    Matias Zabaljauregui
     
  • In order to avoid problematic special linking of the Launcher, we give
    the Host an offset: this means we can use any memory region in the
    Launcher as Guest memory rather than insisting on mmap() at 0.

    The result is quite pleasing: a number of casts are replaced with
    simple additions.

    Signed-off-by: Rusty Russell

    Rusty Russell
     

27 Jul, 2007

3 commits


20 Jul, 2007

1 commit

  • This is the code for the "lg.ko" module, which allows lguest guests to
    be launched.

    [akpm@linux-foundation.org: update for futex-new-private-futexes]
    [akpm@linux-foundation.org: build fix]
    [jmorris@namei.org: lguest: use hrtimers]
    [akpm@linux-foundation.org: x86_64 build fix]
    Signed-off-by: Rusty Russell
    Cc: Andi Kleen
    Cc: Eric Dumazet
    Cc: Thomas Gleixner
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Rusty Russell