23 Jun, 2006

40 commits

  • Only drm, framebuffer, mtrr parts + misc files here and there.

    Signed-off-by: Alexey Dobriyan
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Alexey Dobriyan
     
  • - avoid expensive modulo (integer division) which happened
    since APM_MAX_EVENTS is 20 (non-power-of-2)
    - kill compiler warnings by initializing two variables
    - add __read_mostly to some important static variables that are read often
    (by idle loop etc.)
    - constify several structures

    Signed-off-by: Andreas Mohr
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andreas Mohr
     
  • Signed-off-by: Adrian Bunk
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Adrian Bunk
     
  • Use the x86 cache-bypassing copy instructions for copy_from_user().

    Some performance data are

    Total of GLOBAL_POWER_EVENTS (CPU cycle samples)

    2.6.12.4.orig 1921587
    2.6.12.4.nt 1599424
    1599424/1921587=83.23% (16.77% reduction)

    BSQ_CACHE_REFERENCE (L3 cache miss)
    2.6.12.4.orig 57427
    2.6.12.4.nt 20858
    20858/57427=36.32% (63.7% reduction)

    L3 cache miss reduction of __copy_from_user_ll
    samples %
    37408 65.1412 vmlinux __copy_from_user_ll
    23 0.1103 vmlinux __copy_user_zeroing_intel_nocache
    23/37408=0.061% (99.94% reduction)

    Top 5 of 2.6.12.4.nt
    Counted GLOBAL_POWER_EVENTS events (time during which processor is not stopped) with a unit mask of 0x01 (mandatory) count 100000
    samples % app name symbol name
    128392 8.0274 vmlinux __copy_user_zeroing_intel_nocache
    64206 4.0143 vmlinux journal_add_journal_head
    59746 3.7355 vmlinux do_get_write_access
    47674 2.9807 vmlinux journal_put_journal_head
    46021 2.8774 vmlinux journal_dirty_metadata
    pattern9-0-cpu4-0-09011728/summary.out

    Counted BSQ_CACHE_REFERENCE events (cache references seen by the bus unit) with a unit mask of 0x3f (multiple flags) count 3000
    samples % app name symbol name
    69755 4.2861 vmlinux __copy_user_zeroing_intel_nocache
    55685 3.4215 vmlinux journal_add_journal_head
    52371 3.2179 vmlinux __find_get_block
    45504 2.7960 vmlinux journal_put_journal_head
    36005 2.2123 vmlinux journal_stop
    pattern9-0-cpu4-0-09011744/summary.out

    Counted BSQ_CACHE_REFERENCE events (cache references seen by the bus unit) with a unit mask of 0x200 (read 3rd level cache miss) count 3000
    samples % app name symbol name
    1147 5.4994 vmlinux journal_add_journal_head
    881 4.2240 vmlinux journal_dirty_data
    872 4.1809 vmlinux blk_rq_map_sg
    734 3.5192 vmlinux journal_commit_transaction
    617 2.9582 vmlinux radix_tree_delete
    pattern9-0-cpu4-0-09011731/summary.out

    iozone results are

    original 2.6.12.4 CPU time = 207.768 sec
    cache aware CPU time = 184.783 sec
    (three times run)
    184.783/207.768=88.94% (11.06% reduction)

    original:
    pattern9-0-cpu4-0-08191720/iozone.out: CPU Utilization: Wall time 45.997 CPU time 64.527 CPU utilization 140.28 %
    pattern9-0-cpu4-0-08191741/iozone.out: CPU Utilization: Wall time 46.878 CPU time 71.933 CPU utilization 153.45 %
    pattern9-0-cpu4-0-08191743/iozone.out: CPU Utilization: Wall time 45.152 CPU time 71.308 CPU utilization 157.93 %

    cache awre:
    pattern9-0-cpu4-0-09011728/iozone.out: CPU Utilization: Wall time 44.842 CPU time 62.465 CPU utilization 139.30 %
    pattern9-0-cpu4-0-09011731/iozone.out: CPU Utilization: Wall time 44.718 CPU time 59.273 CPU utilization 132.55 %
    pattern9-0-cpu4-0-09011744/iozone.out: CPU Utilization: Wall time 44.367 CPU time 63.045 CPU utilization 142.10 %

    Signed-off-by: Hiro Yoshioka
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Hiro Yoshioka
     
  • mremap syscall takes 5 arguments. Fixed by Ralf Baechle.

    Signed-off-by: Ralf Baechle
    Signed-off-by: Yoichi Yuasa
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Yoichi Yuasa
     
  • Add missing PSC #define's required for the drivers using PSC on DBAu1550
    board (also fixing Au1550 PSC3 address) and all Au1200-based boards as
    well. Make the OSS driver use the correct PSC definitions fo each board.

    Signed-off-by: Sergei Shtylyov
    Cc: Ralf Baechle
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Sergei Shtylyov
     
  • Remove _syscall invocations that aren't used in the kernel.

    Signed-off-by: Al Viro
    Signed-off-by: David Howells
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Al Viro
     
  • Remove duplicate EXPORT_SYMBOL annotations from the FRV arch.

    Signed-off-by: Al Viro
    Signed-off-by: David Howells
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Al Viro
     
  • The memcpy_fromio() function should have a const qualifier on its source
    pointer.

    Signed-off-by: Al Viro
    Signed-off-by: David Howells
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Al Viro
     
  • The ieee1394 assumes it may make direct use of ->count in the semaphore
    structure.

    Signed-off-by: Al Viro
    Signed-off-by: David Howells
    Cc: Stefan Richter
    Cc: Ben Collins
    Cc: Jody McIntyre
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Al Viro
     
  • Clean up the FRV arch's xchg() function.

    Signed-off-by: Al Viro
    Signed-off-by: David Howells
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Al Viro
     
  • The FRV arch doesn't currently support initrd, so it should be disabled
    automatically for the moment.

    Signed-off-by: Al Viro
    Signed-off-by: David Howells
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Al Viro
     
  • Disable Ext2 XIP if the kernel is configured in no-MMU mode as the former
    won't build.

    Signed-off-by: Al Viro
    Signed-off-by: David Howells
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Al Viro
     
  • The FRV arch should use fstatat64 not newfstatat.

    Signed-off-by: David Howells
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Al Viro
     
  • Signed-off-by: Al Viro
    Signed-off-by: David Howells
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Al Viro
     
  • Signed-off-by: Al Viro
    Signed-off-by: David Howells
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Al Viro
     
  • Add __user annotations to binfmt_elf_fdpic.

    Signed-off-by: Al Viro
    Signed-off-by: David Howells
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Al Viro
     
  • Add __user annotations to FRV-specific sysctl stuff.

    Signed-off-by: Al Viro
    Signed-off-by: David Howells
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Al Viro
     
  • Add annotations to the FRV signal handling for sparse.

    Signed-off-by: Al Viro
    Signed-off-by: David Howells
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Al Viro
     
  • Add annotations to the FRV I/O handling functions for sparse.

    Signed-off-by: Al Viro
    Signed-off-by: David Howells
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Al Viro
     
  • Add general annotations to the FRV arch for sparse.

    Signed-off-by: Al Viro
    Signed-off-by: David Howells
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Al Viro
     
  • This patch inserts security_task_movememory hook calls into memory management
    code to enable security modules to mediate this operation between tasks.

    Since the last posting, the hook has been renamed following feedback from
    Christoph Lameter.

    Signed-off-by: David Quigley
    Acked-by: Stephen Smalley
    Signed-off-by: James Morris
    Cc: Andi Kleen
    Acked-by: Christoph Lameter
    Acked-by: Chris Wright
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Quigley
     
  • This patch adds new security hook, task_movememory, to be called when memory
    owened by a task is to be moved (e.g. when migrating pages to a this hook is
    identical to the setscheduler implementation, but a separate hook introduced
    to allow this check to be specialized in the future if necessary.

    Since the last posting, the hook has been renamed following feedback from
    Christoph Lameter.

    Signed-off-by: David Quigley
    Acked-by: Stephen Smalley
    Signed-off-by: James Morris
    Cc: Christoph Lameter
    Cc: Andi Kleen
    Acked-by: Chris Wright
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Quigley
     
  • Add a security hook call to enable security modules to control the ability
    to attach a task to a cpuset. While limited control over this operation is
    possible via permission checks on the pseudo fs interface, those checks are
    not sufficient to control access to the target task, which is looked up in
    this function. The existing task_setscheduler hook is re-used for this
    operation since this falls under the same class of operations.

    Signed-off-by: David Quigley
    Acked-by: Stephen Smalley
    Signed-off-by: James Morris
    Acked-by: Paul Jackson
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Quigley
     
  • This patch adds LSM hooks into the setaffinity and getaffinity functions to
    enable security modules to control these operations between tasks with
    task_setscheduler and task_getscheduler LSM hooks.

    Signed-off-by: David Quigley
    Acked-by: Stephen Smalley
    Signed-off-by: James Morris
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Quigley
     
  • Implement an LSM hook for setting a task's IO priority, similar to the hook
    for setting a tasks's nice value.

    A previous version of this LSM hook was included in an older version of
    multiadm by Jan Engelhardt, although I don't recall it being submitted
    upstream.

    Also included is the corresponding SELinux hook, which re-uses the setsched
    permission in the proccess class.

    Signed-off-by: James Morris
    Acked-by: Stephen Smalley
    Cc: Jan Engelhardt
    Cc: Chris Wright
    Cc: Jens Axboe
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    James Morris
     
  • The definition of the third parameter is a pointer to an array of virtual
    addresses which give us some trouble. The existing code calculated the
    wrong address in the array since I used void to avoid having to specify a
    type.

    I now use the correct type "compat_uptr_t __user *" in the definition of
    the function in kernel/compat.c.

    However, I used __u32 in syscalls.h. Would have to include compat.h there
    in order to provide the same definition which would generate an ugly
    include situation.

    On both ia64 and x86_64 compat_uptr_t is u32. So this works although
    parameter declarations differ.

    Signed-off-by: Christoph Lameter
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Christoph Lameter
     
  • sys_move_pages() support for 32bit (i386 plus x86_64 compat layer)

    Add support for move_pages() on i386 and also add the compat functions
    necessary to run 32 bit binaries on x86_64.

    Add compat_sys_move_pages to the x86_64 32bit binary layer. Note that it is
    not up to date so I added the missing pieces. Not sure if this is done the
    right way.

    [akpm@osdl.org: compile fix]
    Signed-off-by: Christoph Lameter
    Cc: Andi Kleen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Christoph Lameter
     
  • sys_move_pages support for x86_64

    Signed-off-by: Christoph Lameter
    Cc: Andi Kleen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Christoph Lameter
     
  • move_pages() is used to move individual pages of a process. The function can
    be used to determine the location of pages and to move them onto the desired
    node. move_pages() returns status information for each page.

    long move_pages(pid, number_of_pages_to_move,
    addresses_of_pages[],
    nodes[] or NULL,
    status[],
    flags);

    The addresses of pages is an array of void * pointing to the
    pages to be moved.

    The nodes array contains the node numbers that the pages should be moved
    to. If a NULL is passed instead of an array then no pages are moved but
    the status array is updated. The status request may be used to determine
    the page state before issuing another move_pages() to move pages.

    The status array will contain the state of all individual page migration
    attempts when the function terminates. The status array is only valid if
    move_pages() completed successfullly.

    Possible page states in status[]:

    0..MAX_NUMNODES The page is now on the indicated node.

    -ENOENT Page is not present

    -EACCES Page is mapped by multiple processes and can only
    be moved if MPOL_MF_MOVE_ALL is specified.

    -EPERM The page has been mlocked by a process/driver and
    cannot be moved.

    -EBUSY Page is busy and cannot be moved. Try again later.

    -EFAULT Invalid address (no VMA or zero page).

    -ENOMEM Unable to allocate memory on target node.

    -EIO Unable to write back page. The page must be written
    back in order to move it since the page is dirty and the
    filesystem does not provide a migration function that
    would allow the moving of dirty pages.

    -EINVAL A dirty page cannot be moved. The filesystem does not provide
    a migration function and has no ability to write back pages.

    The flags parameter indicates what types of pages to move:

    MPOL_MF_MOVE Move pages that are only mapped by the process.

    MPOL_MF_MOVE_ALL Also move pages that are mapped by multiple processes.
    Requires sufficient capabilities.

    Possible return codes from move_pages()

    -ENOENT No pages found that would require moving. All pages
    are either already on the target node, not present, had an
    invalid address or could not be moved because they were
    mapped by multiple processes.

    -EINVAL Flags other than MPOL_MF_MOVE(_ALL) specified or an attempt
    to migrate pages in a kernel thread.

    -EPERM MPOL_MF_MOVE_ALL specified without sufficient priviledges.
    or an attempt to move a process belonging to another user.

    -EACCES One of the target nodes is not allowed by the current cpuset.

    -ENODEV One of the target nodes is not online.

    -ESRCH Process does not exist.

    -E2BIG Too many pages to move.

    -ENOMEM Not enough memory to allocate control array.

    -EFAULT Parameters could not be accessed.

    A test program for move_pages() may be found with the patches
    on ftp.kernel.org:/pub/linux/kernel/people/christoph/pmig/patches-2.6.17-rc4-mm3

    From: Christoph Lameter

    Detailed results for sys_move_pages()

    Pass a pointer to an integer to get_new_page() that may be used to
    indicate where the completion status of a migration operation should be
    placed. This allows sys_move_pags() to report back exactly what happened to
    each page.

    Wish there would be a better way to do this. Looks a bit hacky.

    Signed-off-by: Christoph Lameter
    Cc: Hugh Dickins
    Cc: Jes Sorensen
    Cc: KAMEZAWA Hiroyuki
    Cc: Lee Schermerhorn
    Cc: Andi Kleen
    Cc: Michael Kerrisk
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Christoph Lameter
     
  • Instead of passing a list of new pages, pass a function to allocate a new
    page. This allows the correct placement of MPOL_INTERLEAVE pages during page
    migration. It also further simplifies the callers of migrate pages.
    migrate_pages() becomes similar to migrate_pages_to() so drop
    migrate_pages_to(). The batching of new page allocations becomes unnecessary.

    Signed-off-by: Christoph Lameter
    Cc: Hugh Dickins
    Cc: Jes Sorensen
    Cc: KAMEZAWA Hiroyuki
    Cc: Lee Schermerhorn
    Cc: Andi Kleen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Christoph Lameter
     
  • Do not leave pages on the lists passed to migrate_pages(). Seems that we will
    not need any postprocessing of pages. This will simplify the handling of
    pages by the callers of migrate_pages().

    Signed-off-by: Christoph Lameter
    Cc: Hugh Dickins
    Cc: Jes Sorensen
    Cc: KAMEZAWA Hiroyuki
    Cc: Lee Schermerhorn
    Cc: Andi Kleen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Christoph Lameter
     
  • Currently migrate_pages() is mess with lots of goto. Extract two functions
    from migrate_pages() and get rid of the gotos.

    Plus we can just unconditionally set the locked bit on the new page since we
    are the only one holding a reference. Locking is to stop others from
    accessing the page once we establish references to the new page.

    Remove the list_del from move_to_lru in order to have finer control over list
    processing.

    [akpm@osdl.org: add debug check]
    Signed-off-by: Christoph Lameter
    Cc: Hugh Dickins
    Cc: Jes Sorensen
    Cc: KAMEZAWA Hiroyuki
    Cc: Lee Schermerhorn
    Cc: Andi Kleen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Christoph Lameter
     
  • This patch fixes printk() under zone->lock in show_free_areas(). It can be
    unsafe to call printk() under this lock, since caller can try to
    allocate/free some memory and selfdeadlock on this lock. I found
    allocations/freeing mem both in netconsole and serial console.

    This issue was faced in reallity when meminfo was periodically printed for
    debug purposes and netconsole was used.

    Signed-off-by: Kirill Korotaev
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Kirill Korotaev
     
  • Signed-off-by: Ralf Baechle
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ralf Baechle
     
  • mm/filemap.c:
    - add lots of kernel-doc;
    - fix some typos and kernel-doc errors;
    - drop some blank lines between function close and EXPORT_SYMBOL();

    Signed-off-by: Randy Dunlap
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Randy Dunlap
     
  • - Move comments for kmalloc to right place, currently it near __do_kmalloc

    - Comments for kzalloc

    - More detailed comments for kmalloc

    - Appearance of "kmalloc" and "kzalloc" man pages after "make mandocs"

    [rdunlap@xenotime.net: simplification]
    Signed-off-by: Paul Drynoff
    Acked-by: Randy Dunlap
    Cc: Pekka Enberg
    Cc: Manfred Spraul
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Paul Drynoff
     
  • Signed-off-by: KAMEZAWA Hiroyuki
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    KAMEZAWA Hiroyuki
     
  • Initialise total_memory earlier in boot. Because if for some reason we run
    page reclaim early in boot, we don't want total_memory to be zero when we use
    it as a divisor.

    And rename total_memory to vm_total_pages to avoid naming clashes with
    architectures.

    Cc: Yasunori Goto
    Cc: KAMEZAWA Hiroyuki
    Cc: Martin Bligh
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andrew Morton
     
  • The SLAB bootstrap code assumes that the first two kmalloc caches created
    (the INDEX_AC and INDEX_L3 kmalloc caches) wont be off-slab. But due to AC
    and L3 structure size increase in lockdep, one of them ended up being
    off-slab, and subsequently crashing with:

    Unable to handle kernel NULL pointer dereference at 0000000000000000 RIP:
    [] kmem_cache_alloc+0x26/0x7d

    The fix is to introduce a bootstrap flag and to use it to prevent off-slab
    caches being created so early during bootup.

    (The calculation for off-slab caches is quite complex so i didnt want to
    complicate things with introducing yet another INDEX_ calculation, the flag
    approach is simpler and smaller.)

    Signed-off-by: Ingo Molnar
    Cc: Manfred Spraul
    Cc: Pekka Enberg
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ingo Molnar