08 Jul, 2008

1 commit

  • There are various constraints on the use of unit-at-a-time:
    - i386 uses no-unit-at-a-time for pre-4.0 (not 4.3)
    - x86_64 uses unit-at-a-time always

    Uli reported a crash on x86_64 with gcc 4.1.2 with unit-at-a-time,
    resulting in commit c0a18111e571138747a98af18b3a2124df56a0d1

    Ingo reported a gcc internal error with gcc 4.3 with no-unit-at-a-timem,
    resulting in 22eecde2f9034764a3fd095eecfa3adfb8ec9a98

    Benny Halevy is seeing extern inlines not resolved with gcc 4.3 with
    no-unit-at-a-time

    This patch reintroduces unit-at-a-time for gcc >= 4.0, bringing back the
    possibility of Uli's crash. If that happens, we'll debug it.

    I started seeing both the internal compiler errors and unresolved
    inlines on Fedora 9. This patch fixes both problems, without so far
    reintroducing the crash reported by Uli.

    Signed-off-by: Jeff Dike
    Cc: Benny Halevy
    Cc: Adrian Bunk
    Cc: Ingo Molnar
    Cc: Ulrich Drepper
    Signed-off-by: Linus Torvalds

    Jeff Dike
     

06 Dec, 2007

1 commit


07 Nov, 2007

1 commit


29 Oct, 2007

2 commits


17 Oct, 2007

2 commits

  • * git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild: (40 commits)
    kbuild: introduce ccflags-y, asflags-y and ldflags-y
    kbuild: enable 'make CPPFLAGS=...' to add additional options to CPP
    kbuild: enable use of AFLAGS and CFLAGS on commandline
    kbuild: enable 'make AFLAGS=...' to add additional options to AS
    kbuild: fix AFLAGS use in h8300 and m68knommu
    kbuild: check for wrong use of CFLAGS
    kbuild: enable 'make CFLAGS=...' to add additional options to CC
    kbuild: fix up CFLAGS usage
    kbuild: make modpost detect unterminated device id lists
    kbuild: call export_report from the Makefile
    kbuild: move Kai Germaschewski to CREDITS
    kconfig/menuconfig: distinguish between selected-by-another options and comments
    kconfig: tristate choices with mixed tristate and boolean values
    include/linux/Kbuild: remove duplicate entries
    kbuild: kill backward compatibility checks
    kbuild: kill EXTRA_ARFLAGS
    kbuild: fix documentation in makefiles.txt
    kbuild: call make once for all targets when O=.. is used
    kbuild: pass -g to assembler under CONFIG_DEBUG_INFO
    kbuild: update _shipped files for kconfig syntax cleanup
    ...

    Fix up conflicts in arch/um/sys-{x86_64,i386}/Makefile manually.

    Linus Torvalds
     
  • 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
     

16 Oct, 2007

1 commit

  • The variable AFLAGS is a wellknown variable and the usage by
    kbuild may result in unexpected behaviour.
    On top of that several people over time has asked for a way to
    pass in additional flags to gcc.

    This patch replace use of AFLAGS with KBUILD_AFLAGS all over
    the tree.

    Patch was tested on following architectures:
    alpha, arm, i386, x86_64, mips, sparc, sparc64, ia64, m68k, s390

    Signed-off-by: Sam Ravnborg

    Sam Ravnborg
     

15 Oct, 2007

1 commit

  • The variable CFLAGS is a wellknown variable and the usage by
    kbuild may result in unexpected behaviour.
    On top of that several people over time has asked for a way to
    pass in additional flags to gcc.

    This patch replace use of CFLAGS with KBUILD_CFLAGS all over the
    tree and enabling one to use:
    make CFLAGS=...
    to specify additional gcc commandline options.

    One usecase is when trying to find gcc bugs but other
    use cases has been requested too.

    Patch was tested on following architectures:
    alpha, arm, i386, x86_64, mips, sparc, sparc64, ia64, m68k

    Test was simple to do a defconfig build, apply the patch and check
    that nothing got rebuild.

    Signed-off-by: Sam Ravnborg

    Sam Ravnborg
     

14 Oct, 2007

1 commit

  • a) include/asm-um/arch can't just point to include/asm-$(SUBARCH) now
    b) arch/{i386,x86_64}/crypto are merged now
    c) subarch-obj needed changes
    d) cpufeature_64.h should pull "cpufeature_32.h", not
    since it can be included from asm-um/cpufeature.h
    e) in case of uml-i386 we need CONFIG_X86_32 for make and gcc, but not
    for Kconfig
    f) sysctl.c shouldn't do vdso_enabled for uml-i386 (actually, that one
    should be registered from corresponding arch/*/kernel/*, with ifdef
    going away; that's a separate patch, though).

    With that and with Stephen's patch ("[PATCH net-2.6] uml: hard_header fix")
    we have uml allmodconfig building both on i386 and amd64.

    Signed-off-by: Al Viro
    Signed-off-by: Linus Torvalds

    Al Viro
     

31 Oct, 2006

1 commit

  • From: Jeff Dike , Paolo Giarrusso

    Make sure that when compiling USER_OBJS the correct compilation options are
    passed; since they are compiled with USER_CFLAGS which is derived from
    CFLAGS, make sure it is a recursively evaluated variable, so that changes
    to CFLAGS done afterwards the inclusion of arch/$(ARCH)/Makefile are
    reflected in USER_CFLAGS.

    For instance, without this patch userspace objects are never compiled with
    debug info active.

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

    akpm@osdl.org
     

06 Jun, 2006

1 commit

  • From: Jeff Dike

    This fixes the undefined reference to strcpy seen when building modules on
    i386. Tracked down by Al Viro.

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

    Jeff Dike
     

14 Nov, 2005

1 commit

  • A few fixups - show the new submenu only for x86 subarchitecture (it does not
    make sense to show it for x86_64 users) and remove X86_CMPXCHG, which is now a
    duplicate of Kconfig.i386, even though Kconfig doesn't complain (we also miss
    the dependency on !M386 CPU).

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

    Paolo 'Blaisorblade' Giarrusso
     

07 Nov, 2005

1 commit

  • This patch reverts back the changes to HOSTCFLAGS and HOSTLDFLAGS

    When we were building complete binaries to get constants (such as ptrace
    register layout on stack) from host userspace headers, we needed to make the
    arch for building HOST binaries match our one: i.e. on a 64bit system
    compiling 32bit binaries, we compile 32-bit hostprogs and need, say, 32-bit
    ncurses. Now we can revert that - that avoids problem with, say, menuconfig
    and ncurses, on a system which can't compile well 32-bit programs.

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

    Paolo 'Blaisorblade' Giarrusso
     

31 Oct, 2005

2 commits

  • This was used in the old dark age of 2.4, ARCH_CFLAGS doesn't work any more
    since some time, and UM_FASTCALL was never used in 2.6.

    Instead, reintroduce the thing more properly now, directly in
    include/asm-um/linkage.h.

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

    Paolo 'Blaisorblade' Giarrusso
     
  • Make UML share the underlying cpu-specific tuning done on i386.

    Actually, for now many config options aren't used a lot - but that can be done
    later. Also, UML relies on GCC optimization for things like memcpy and such
    more than i386, so specifying the correct -march and -mtune should be enough.
    Later, we may want to correct some other stuff.

    For instance, since FPU context switching, for us, is done (at least
    partially, i.e. between our kernelspace and userspace) by the host, we may
    allow usage of FPU operations by GCC. This doesn't hold for kernelspace vs.
    kernelspace, but we don't support preemption.

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

    Paolo 'Blaisorblade' Giarrusso
     

29 Sep, 2005

1 commit

  • UML makefiles sanitized:
    - number of generated headers reduced to 2 (from user-offsets.c and
    kernel-offsets.c resp.). The rest is made constant and simply
    includes those two.
    - mk_... helpers are gone now that we don't need to generate these
    headers
    - arch/um/include2 removed since everything under arch/um/include/sysdep
    is constant now and symlink can point straight to source tree.
    - dependencies seriously simplified.

    Signed-off-by: Al Viro
    Signed-off-by: Linus Torvalds

    Al Viro
     

08 Sep, 2005

1 commit

  • A piece of the UML stubs patch got lost - it has
    Killed STUBS_CFLAGS - it's not needed and the only remaining use had been
    gratitious - it only polluted CFLAGS
    in description and does remove it in arch/um/Makefile-x86_64, but forgets to
    do the same in i386 counterpart. Lost chunk follows:

    Signed-off-by: Al Viro
    Signed-off-by: Linus Torvalds

    viro@ZenIV.linux.org.uk
     

28 Jul, 2005

1 commit

  • scripts/Makefile.build:13: /Makefile: No such file or directory
    scripts/Makefile.build:64: kbuild: Makefile.build is included improperly

    the define was removed, but its still required to build some targets.

    Signed-off-by: Olaf Hering
    Cc: Paolo Giarrusso
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Olaf Hering
     

15 Jul, 2005

1 commit

  • This patch makes the command:

    make ARCH=um SUBARCH=i386

    work on x86_64 hosts (with support for building 32-bit binaries). This is
    especially needed since 64-bit UMLs don't support 32-bit emulation for guest
    binaries, currently. This has been tested in all possible cases and works.

    Only exception is that I've built but not tested a 64-bit binary, because I
    hadn't a 64-bit filesystem available.

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

    Paolo 'Blaisorblade' Giarrusso
     

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
     

06 May, 2005

2 commits


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