05 Oct, 2011

1 commit

  • Awhile back I removed all the CONFIG_GENERIC_TIME referecnes as
    the last of the non-GENERIC_TIME arches were converted.

    However, due to the functionality being important and around for
    awhile, there apparently were some out of tree hardware enablement
    patches that used it and have since been merged.

    This patch removes the remaining instances of GENERIC_TIME.

    Singed-off-by: John Stultz

    John Stultz
     

21 Jan, 2011

1 commit

  • The meaning of CONFIG_EMBEDDED has long since been obsoleted; the option
    is used to configure any non-standard kernel with a much larger scope than
    only small devices.

    This patch renames the option to CONFIG_EXPERT in init/Kconfig and fixes
    references to the option throughout the kernel. A new CONFIG_EMBEDDED
    option is added that automatically selects CONFIG_EXPERT when enabled and
    can be used in the future to isolate options that should only be
    considered for embedded systems (RISC architectures, SLOB, etc).

    Calling the option "EXPERT" more accurately represents its intention: only
    expert users who understand the impact of the configuration changes they
    are making should enable it.

    Reviewed-by: Ingo Molnar
    Acked-by: David Woodhouse
    Signed-off-by: David Rientjes
    Cc: Greg KH
    Cc: "David S. Miller"
    Cc: Jens Axboe
    Cc: Arnd Bergmann
    Cc: Robin Holt
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Rientjes
     

27 Oct, 2010

1 commit

  • I think that it's better to detect DMA misuse at build time rather than
    calling BUG_ON. Architectures that can't do DMA need to define
    CONFIG_NO_DMA.

    Thanks to Sam Ravnborg for explaining how CONFIG_NO_DMA and CONFIG_HAS_DMA
    work:

    http://marc.info/?l=linux-kernel&m=128359913825550&w=2

    HAS_DMA is defined like this:

    config HAS_DMA
    boolean
    depends on !NO_DMA
    default y

    So to set HAS_DMA to true an arch should do:
    1) Do not define NO_DMA
    2) Define NO_DMA abd set it to 'n'

    Must archs - including um - used principle 1).

    In the um case we want to say that we do NOT have any DMA.
    This can be done in two ways.
    a) define NO_DMA and set it to 'y'
    b) redefine HAS_DMA and set it to 'n'.

    The patch you provided used principle b) where other archs use principle a).
    So I suggest you should use principle a) for um too.

    Signed-off-by: FUJITA Tomonori
    Cc: Miklos Szeredi
    Cc: Jeff Dike
    Cc: Sam Ravnborg
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    FUJITA Tomonori
     

24 Feb, 2008

1 commit


09 Feb, 2008

1 commit

  • Calculate TASK_SIZE at run-time by figuring out the host's VMSPLIT - this is
    needed on i386 if UML is to run on hosts with varying VMSPLITs without
    recompilation.

    TASK_SIZE is now defined in terms of a variable, task_size. This gets rid of
    an include of pgtable.h from processor.h, which can cause include loops.

    On i386, task_size is calculated early in boot by probing the address space in
    a binary search to figure out where the boundary between usable and non-usable
    memory is. This tries to make sure that a page that is considered to be in
    userspace is, or can be made, read-write. I'm concerned about a system-global
    VDSO page in kernel memory being hit and considered to be a userspace page.

    On x86_64, task_size is just the old value of CONFIG_TOP_ADDR.

    A bunch of config variable are gone now. CONFIG_TOP_ADDR is directly replaced
    by TASK_SIZE. NEST_LEVEL is gone since the relocation of the stubs makes it
    irrelevant. All the HOST_VMSPLIT stuff is gone. All references to these in
    arch/um/Makefile are also gone.

    I noticed and fixed a missing extern in os.h when adding os_get_task_size.

    Note: This has been revised to fix the 32-bit UML on 64-bit host bug that
    Miklos ran into.

    Signed-off-by: Jeff Dike
    Cc: Miklos Szeredi
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jeff Dike
     

06 Feb, 2008

1 commit

  • Tweak the UML defconfig -
    we probably don't need 256 old-style ptys - this slows down udev
    noticably
    enable hostfs
    disable slab debugging - another noticable performance hit

    Signed-off-by: Jeff Dike
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jeff Dike
     

17 Oct, 2007

5 commits

  • The calculation of CONFIG_STUB_CODE and CONFIG_STUB_DATA didn't take into
    account anything but 3G/1G and 2G/2G, leaving the other vmsplits out in the
    cold.

    I'd rather not duplicate the four known host vmsplit cases for each of these
    symbols. I'd also like to calculate them based on the highest userspace
    address.

    The Kconfig language seems not to allow calculation of hex constants, so I
    moved this to as-layout.h. CONFIG_STUB_CODE, CONFIG_STUB_DATA, and
    CONFIG_STUB_START are now gone. In their place are STUB_CODE, STUB_DATA, and
    STUB_START in as-layout.h.

    i386 and x86_64 seem to differ as to whether an unadorned constant is an int
    or a long, so I cast them to unsigned long so they can be printed
    consistently. However, they are also used in stub.S, where C types don't work
    so well. So, there are ASM_ versions of these constants for use in stub.S. I
    also ifdef-ed the non-asm-friendly portion of as-layout.h.

    With this in place, most of the rest of this patch is changing CONFIG_STUB_*
    to STUB_*, except in stub.S, where they are changed to ASM_STUB_*.

    defconfig has the old symbols deleted.

    I also print these addresses out in case there is any problem mapping them on
    the host.

    The two stub.S files had some trailing whitespace, so that is cleaned up here.

    [akpm@linux-foundation.org: coding-style fixes]
    Signed-off-by: Jeff Dike
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jeff Dike
     
  • Enable tickless support.

    CONFIG_TICK_ONESHOT and CONFIG_NO_HZ are enabled.

    itimer_clockevent gets CLOCK_EVT_FEAT_ONESHOT and an implementation of
    .set_next_event.

    CONFIG_UML_REAL_TIME_CLOCK goes away because it only makes sense when there is
    a clock ticking away all the time. timer_handler now just calls do_IRQ once
    without trying to figure out how many ticks to emulate.

    The idle loop now needs to turn ticking on and off.

    Userspace ticks keep happening as usual. However, the userspace loop keep
    track of when the next wakeup should happen and suppresses process ticks until
    that happens.

    Signed-off-by: Jeff Dike
    Cc: Thomas Gleixner
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jeff Dike
     
  • Enable CONFIG_GENERIC_CLOCKEVENTS.

    timer_irq gets its name changed to timer_handler, and becomes the recipient of
    timer signals.

    The clock_event_device is set up to imitate the current ticking clock, i.e.
    CLOCK_EVT_FEAT_ONESHOT is not enabled yet.

    disable_timer now doesn't ignore SIGALRM and SIGVTALRM because that breaks
    delay calibration.

    Signed-off-by: Jeff Dike
    Cc: Thomas Gleixner
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jeff Dike
     
  • Fix the passing of printk output back to the mconsole client. The existing
    code was somewhat confused, accumulating output in a buffer, but writing it
    out entirely whenever a new chunk was added. This is fixed.

    The earlier include cleanups caused linux/sysrq.h to not be included - this is
    fixed by adding the include back, under CONFIG_MAGIC_SYSRQ.

    CONFIG_MAGIC_SYSRQ is also defaulted to on in defconfig.

    Signed-off-by: Jeff Dike
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jeff Dike
     
  • This patchset throws out tt mode, which has been non-functional for a while.

    This is done in phases, interspersed with code cleanups on the affected files.

    The removal is done as follows:
    remove all code, config options, and files which depend on
    CONFIG_MODE_TT
    get rid of the CHOOSE_MODE macro, which decided whether to
    call tt-mode or skas-mode code, and replace invocations with their
    skas portions
    replace all now-trivial procedures with their skas equivalents

    There are now a bunch of now-redundant pieces of data structures, including
    mode-specific pieces of the thread structure, pt_regs, and mm_context. These
    are all replaced with their skas-specific contents.

    As part of the ongoing style compliance project, I made a style pass over all
    files that were changed. There are three such patches, one for each phase,
    covering the files affected by that phase but no later ones.

    I noticed that we weren't freeing the LDT state associated with a process when
    it exited, so that's fixed in one of the later patches.

    The last patch is a tidying patch which I've had for a while, but which caused
    inexplicable crashes under tt mode. Since that is no longer a problem, this
    can now go in.

    This patch:

    Start getting rid of tt mode support.

    This patch throws out CONFIG_MODE_TT and all config options, code, and files
    which depend on it.

    CONFIG_MODE_SKAS is gone and everything that depends on it is included
    unconditionally.

    The few changed lines are in re-written Kconfig help, lines which needed
    something skas-related removed from them, and a few more which weren't
    strictly deletions.

    Signed-off-by: Jeff Dike
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jeff Dike
     

20 Jul, 2007

1 commit

  • Currently, CONFIG_X86_CMPXCHG64 both enables boot-time checking of
    the cmpxchg64b feature and enables compilation of the set_64bit() family.
    Since the option is dependent on PAE, and since KVM depends on set_64bit(),
    this effectively disables KVM on i386 nopae.

    Simplify by removing the config option altogether: the boot check is made
    dependent on CONFIG_X86_PAE directly, and the set_64bit() family is exposed
    without constraints. It is up to users to check for the feature flag (KVM
    does not as virtualiation extensions imply its existence).

    Signed-off-by: Avi Kivity
    Signed-off-by: Linus Torvalds

    Avi Kivity
     

17 Jul, 2007

2 commits

  • If the host side of a console can't be opened, this will now produce visible
    error messages.

    enable_chan now returns a status and this is passed up to con_open and
    ssl_open, which will complain if anything went wrong.

    The default host device for the serial line driver is now a pts device rather
    than a pty device since lots of hosts have LEGACY_PTYS disabled. This had
    always been failing on such hosts, but silently.

    Signed-off-by: Jeff Dike
    Cc: Paolo 'Blaisorblade' Giarrusso
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jeff Dike
     
  • Add generic exit-time stack-depth checking to CONFIG_DEBUG_STACK_USAGE.

    This also adds UML support.

    Tested on UML and i386.

    [akpm@linux-foundation.org: cleanups, speedups, tweaks]
    Signed-off-by: Jeff Dike
    Cc: Oleg Nesterov
    Cc: Ingo Molnar
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jeff Dike
     

11 May, 2007

1 commit

  • Make kernel stacks be 1 page on i386 and 2 pages on x86_64. These match the
    host values.

    Signed-off-by: Jeff Dike
    Cc: Paolo 'Blaisorblade' Giarrusso
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jeff Dike
     

03 May, 2007

1 commit


11 Jul, 2006

1 commit


02 May, 2006

1 commit

  • Bring defconfig up to date.

    Also disable CONFIG_BLK_DEV_UBD_SYNC by default. By performing synchronous
    I/O to the host, it slows things down, only protects against host crashes, and
    can make a UML appear to hang while it waits for the host's disk.

    Signed-off-by: Jeff Dike
    Cc: Paolo 'Blaisorblade' Giarrusso
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jeff Dike
     

08 Jul, 2005

1 commit

  • UML has had two modes of operation - an insecure, slow mode (tt mode) in
    which the kernel is mapped into every process address space which requires
    no host kernel modifications, and a secure, faster mode (skas mode) in
    which the UML kernel is in a separate host address space, which requires a
    patch to the host kernel.

    This patch implements something very close to skas mode for hosts which
    don't support skas - I'm calling this skas0. It provides the security of
    the skas host patch, and some of the performance gains.

    The two main things that are provided by the skas patch, /proc/mm and
    PTRACE_FAULTINFO, are implemented in a way that require no host patch.

    For the remote address space changing stuff (mmap, munmap, and mprotect),
    we set aside two pages in the process above its stack, one of which
    contains a little bit of code which can call mmap et al.

    To update the address space, the system call information (system call
    number and arguments) are written to the stub page above the code. The
    %esp is set to the beginning of the data, the %eip is set the the start of
    the stub, and it repeatedly pops the information into its registers and
    makes the system call until it sees a system call number of zero. This is
    to amortize the cost of the context switch across multiple address space
    updates.

    When the updates are done, it SIGSTOPs itself, and the kernel process
    continues what it was doing.

    For a PTRACE_FAULTINFO replacement, we set up a SIGSEGV handler in the
    child, and let it handle segfaults rather than nullifying them. The
    handler is in the same page as the mmap stub. The second page is used as
    the stack. The handler reads cr2 and err from the sigcontext, sticks them
    at the base of the stack in a faultinfo struct, and SIGSTOPs itself. The
    kernel then reads the faultinfo and handles the fault.

    A complication on x86_64 is that this involves resetting the registers to
    the segfault values when the process is inside the kill system call. This
    breaks on x86_64 because %rcx will contain %rip because you tell SYSRET
    where to return to by putting the value in %rcx. So, this corrupts $rcx on
    return from the segfault. To work around this, I added an
    arch_finish_segv, which on x86 does nothing, but which on x86_64 ptraces
    the child back through the sigreturn. This causes %rcx to be restored by
    sigreturn and avoids the corruption. Ultimately, I think I will replace
    this with the trick of having it send itself a blocked signal which will be
    unblocked by the sigreturn. This will allow it to be stopped just after
    the sigreturn, and PTRACE_SYSCALLed without all the back-and-forth of
    PTRACE_SYSCALLing it through sigreturn.

    This runs on a stock host, so theoretically (and hopefully), tt mode isn't
    needed any more. We need to make sure that this is better in every way
    than tt mode, though. I'm concerned about the speed of address space
    updates and page fault handling, since they involve extra round-trips to
    the child. We can amortize the round-trip cost for large address space
    updates by writing all of the operations to the data page and having the
    child execute them all at the same time. This will help fork and exec, but
    not page faults, since they involve only one page.

    I can't think of any way to help page faults, except to add something like
    PTRACE_FAULTINFO to the host. There is PTRACE_SIGINFO, but UML doesn't use
    siginfo for SIGSEGV (or anything else) because there isn't enough
    information in the siginfo struct to handle page faults (the faulting
    operation type is missing). Adding that would make PTRACE_SIGINFO a usable
    equivalent to PTRACE_FAULTINFO.

    As for the code itself:

    - The system call stub is in arch/um/kernel/sys-$(SUBARCH)/stub.S. It is
    put in its own section of the binary along with stub_segv_handler in
    arch/um/kernel/skas/process.c. This is manipulated with run_syscall_stub
    in arch/um/kernel/skas/mem_user.c. syscall_stub will execute any system
    call at all, but it's only used for mmap, munmap, and mprotect.

    - The x86_64 stub calls sigreturn by hand rather than allowing the normal
    sigreturn to happen, because the normal sigreturn is a SA_RESTORER in
    UML's address space provided by libc. Needless to say, this is not
    available in the child's address space. Also, it does a couple of odd
    pops before that which restore the stack to the state it was in at the
    time the signal handler was called.

    - There is a new field in the arch mmu_context, which is now a union.
    This is the pid to be manipulated rather than the /proc/mm file
    descriptor. Code which deals with this now checks proc_mm to see whether
    it should use the usual skas code or the new code.

    - userspace_tramp is now used to create a new host process for every UML
    process, rather than one per UML processor. It checks proc_mm and
    ptrace_faultinfo to decide whether to map in the pages above its stack.

    - start_userspace now makes CLONE_VM conditional on proc_mm since we need
    separate address spaces now.

    - switch_mm_skas now just sets userspace_pid[0] to the new pid rather
    than PTRACE_SWITCH_MM. There is an addition to userspace which updates
    its idea of the pid being manipulated each time around the loop. This is
    important on exec, when the pid will change underneath userspace().

    - The stub page has a pte, but it can't be mapped in using tlb_flush
    because it is part of tlb_flush. This is why it's required for it to be
    mapped in by userspace_tramp.

    Other random things:

    - The stub section in uml.lds.S is page aligned. This page is written
    out to the backing vm file in setup_physmem because it is mapped from
    there into user processes.

    - There's some confusion with TASK_SIZE now that there are a couple of
    extra pages that the process can't use. TASK_SIZE is considered by the
    elf code to be the usable process memory, which is reasonable, so it is
    decreased by two pages. This confuses the definition of
    USER_PGDS_IN_LAST_PML4, making it too small because of the rounding down
    of the uneven division. So we round it to the nearest PGDIR_SIZE rather
    than the lower one.

    - I added a missing PT_SYSCALL_ARG6_OFFSET macro.

    - um_mmu.h was made into a userspace-usable file.

    - proc_mm and ptrace_faultinfo are globals which say whether the host
    supports these features.

    - There is a bad interaction between the mm.nr_ptes check at the end of
    exit_mmap, stack randomization, and skas0. exit_mmap will stop freeing
    pages at the PGDIR_SIZE boundary after the last vma. If the stack isn't
    on the last page table page, the last pte page won't be freed, as it
    should be since the stub ptes are there, and exit_mmap will BUG because
    there is an unfreed page. To get around this, TASK_SIZE is set to the
    next lowest PGDIR_SIZE boundary and mm->nr_ptes is decremented after the
    calls to init_stub_pte. This ensures that we know the process stack (and
    all other process mappings) will be below the top page table page, and
    thus we know that mm->nr_ptes will be one too many, and can be
    decremented.

    Things that need fixing:

    - We may need better assurrences that the stub code is PIC.

    - The stub pte is set up in init_new_context_skas.

    - alloc_pgdir is probably the right place.

    Signed-off-by: Jeff Dike
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jeff Dike
     

01 May, 2005

1 commit

  • We want to make possible, for the user, to enable the i586 AES implementation.
    This requires a restructure.

    - Add a CONFIG_UML_X86 to notify that we are building a UML for i386.

    - Rename CONFIG_64_BIT to CONFIG_64BIT as is used for all other archs

    - Tell crypto/Kconfig that UML_X86 is as good as X86

    - Tell it that it must exclude not X86_64 but 64BIT, which will give the
    same results.

    - Tell kbuild to descend down into arch/i386/crypto/ to build what's needed.

    Signed-off-by: Paolo 'Blaisorblade' Giarrusso
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Paolo 'Blaisorblade' Giarrusso
     

17 Apr, 2005

1 commit

  • Initial git repository build. I'm not bothering with the full history,
    even though we have it. We can create a separate "historical" git
    archive of that later if we want to, and in the meantime it's about
    3.2GB when imported into git - space that would just make the early
    git days unnecessarily complicated, when we don't have a lot of good
    infrastructure for it.

    Let it rip!

    Linus Torvalds