1. 11 5月, 2007 26 次提交
    • D
      signal/timer/event fds: anonymous inode source · 5dc8bf81
      Davide Libenzi 提交于
      This patch add an anonymous inode source, to be used for files that need
      and inode only in order to create a file*. We do not care of having an
      inode for each file, and we do not even care of having different names in
      the associated dentries (dentry names will be same for classes of file*).
      This allow code reuse, and will be used by epoll, signalfd and timerfd
      (and whatever else there'll be).
      Signed-off-by: NDavide Libenzi <davidel@xmailserver.org>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      5dc8bf81
    • S
      Don't init pgrp and __session in INIT_SIGNALS · 325aa33d
      Sukadev Bhattiprolu 提交于
      Remove initialization of pgrp and __session in INIT_SIGNALS, as these are
      later set by the call to __set_special_pids() in init/main.c by the patch:
      
      	explicitly-set-pgid-and-sid-of-init-process.patch
      Signed-off-by: NSukadev Bhattiprolu <sukadev@us.ibm.com>
      Cc: Cedric Le Goater <clg@fr.ibm.com>
      Cc: Dave Hansen <haveblue@us.ibm.com>
      Cc: Serge Hallyn <serue@us.ibm.com>
      Cc: Eric Biederman <ebiederm@xmission.com>
      Cc: Oleg Nesterov <oleg@tv-sign.ru>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      325aa33d
    • S
      statically initialize struct pid for swapper · 820e45db
      Sukadev Bhattiprolu 提交于
      Statically initialize a struct pid for the swapper process (pid_t == 0) and
      attach it to init_task.  This is needed so task_pid(), task_pgrp() and
      task_session() interfaces work on the swapper process also.
      Signed-off-by: NSukadev Bhattiprolu <sukadev@us.ibm.com>
      Cc: Cedric Le Goater <clg@fr.ibm.com>
      Cc: Dave Hansen <haveblue@us.ibm.com>
      Cc: Serge Hallyn <serue@us.ibm.com>
      Cc: Eric Biederman <ebiederm@xmission.com>
      Cc: Herbert Poetzl <herbert@13thfloor.at>
      Cc: <containers@lists.osdl.org>
      Acked-by: NEric W. Biederman <ebiederm@xmission.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      820e45db
    • S
      attach_pid() with struct pid parameter · e713d0da
      Sukadev Bhattiprolu 提交于
      attach_pid() currently takes a pid_t and then uses find_pid() to find the
      corresponding struct pid.  Sometimes we already have the struct pid.  We can
      then skip find_pid() if attach_pid() were to take a struct pid parameter.
      Signed-off-by: NSukadev Bhattiprolu <sukadev@us.ibm.com>
      Cc: Cedric Le Goater <clg@fr.ibm.com>
      Cc: Dave Hansen <haveblue@us.ibm.com>
      Cc: Serge Hallyn <serue@us.ibm.com>
      Cc: <containers@lists.osdl.org>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      e713d0da
    • M
      consolidate generic_writepages and mpage_writepages · 0ea97180
      Miklos Szeredi 提交于
      Clean up massive code duplication between mpage_writepages() and
      generic_writepages().
      
      The new generic function, write_cache_pages() takes a function pointer
      argument, which will be called for each page to be written.
      
      Maybe cifs_writepages() too can use this infrastructure, but I'm not
      touching that with a ten-foot pole.
      
      The upcoming page writeback support in fuse will also want this.
      Signed-off-by: NMiklos Szeredi <mszeredi@suse.cz>
      Acked-by: NChristoph Hellwig <hch@infradead.org>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      0ea97180
    • P
      tty: add compat_ioctl · e10cc1df
      Paul Fulghum 提交于
      Add compat_ioctl method for tty code to allow processing of 32 bit ioctl
      calls on 64 bit systems by tty core, tty drivers, and line disciplines.
      
      Based on patch by Arnd Bergmann:
      http://www.uwsg.iu.edu/hypermail/linux/kernel/0511.0/1732.html
      
      [akpm@linux-foundation.org: make things static]
      Signed-off-by: NPaul Fulghum <paulkf@microgate.com>
      Acked-by: NArnd Bergmann <arnd@arndb.de>
      Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      e10cc1df
    • R
      module_author: don't advise putting in an email address · 108f39a1
      Rene Herman 提交于
      module_author: don't advise putting in an email address
      
      It's information that's easily outdated and easily mistaken for a driver
      contact which is a problem especially for modules with multiple current and
      non-current authors as well as for modules with a maintainer who may not
      even be a module author.
      Signed-off-by: NRene Herman <rene.herman@gmail.com>
      Cc: Rusty Russell <rusty@rustcorp.com.au>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      108f39a1
    • B
      Add hard_irq_disable() · 2d3fbbb3
      Benjamin Herrenschmidt 提交于
      Some architectures, like powerpc, implement lazy disabling of interrupts.
      That means that on those, local_irq_disable() doesn't actually disable
      interrupts on the CPU, but only sets some per CPU flag which cause them to be
      disabled only if an interrupt actually occurs.
      
      However, in some cases, such as stop_machine, we really want interrupts to be
      fully disabled.  For example, I have code using stop machine to do ECC error
      injection, used to verify operations of the ECC hardware, that sort of thing.
      It really needs to make sure that nothing is actually writing to memory while
      the injection happens.  Similar examples can be found in other low level bits
      and pieces.
      
      This patch implements a generic hard_irq_disable() function which is meant to
      be called -after- local_irq_disable() and ensures that interrupts are fully
      disabled on that CPU.  The default implementation is a nop, though powerpc
      does already provide an appropriate one.
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Cc: Rusty Russell <rusty@rustcorp.com.au>
      Cc: Paul Mackerras <paulus@samba.org>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      2d3fbbb3
    • B
      powerpc: fixup hard_irq_disable semantics · e1fa2e13
      Benjamin Herrenschmidt 提交于
      This patch renames the raw hard_irq_{enable,disable} into
      __hard_irq_{enable,disable} and introduces a higher level hard_irq_disable()
      function that can be used by any code to enforce that IRQs are fully disabled,
      not only lazy disabled.
      
      The difference with the __ versions is that it will update some per-processor
      fields so that the kernel keeps track and properly re-enables them in the next
      local_irq_disable();
      
      This prepares powerpc for my next patch that introduces hard_irq_disable()
      generically.
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Cc: Rusty Russell <rusty@rustcorp.com.au>
      Cc: Paul Mackerras <paulus@samba.org>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      e1fa2e13
    • P
      synclink_gt: add compat_ioctl · 2acdb169
      Paul Fulghum 提交于
      Add support for 32 bit ioctl on 64 bit systems for synclink_gt
      
      Cc: Arnd Bergmann <arnd@arndb.de>
      Signed-off-by: NPaul Fulghum <paulkf@microgate.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      2acdb169
    • S
      Consolidate asm/poll.h · 04dd08b4
      Stephen Rothwell 提交于
      These files are almost all the same.
      
      This patch could be made even simpler if we don't mind POLLREMOVE turning
      up in a few architectures that didn't have it previously (which should be
      OK as POLLREMOVE is not used anywhere in the current tree).
      Signed-off-by: NStephen Rothwell <sfr@canb.auug.org.au>
      Cc: <linux-arch@vger.kernel.org>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      04dd08b4
    • R
      lib/hexdump · 99eaf3c4
      Randy Dunlap 提交于
      Based on ace_dump_mem() from Grant Likely for the Xilinx SystemACE
      CompactFlash interface.
      
      Add print_hex_dump() & hex_dumper() to lib/hexdump.c and linux/kernel.h.
      
      This patch adds the functions print_hex_dump() & hex_dumper().
      print_hex_dump() can be used to perform a hex + ASCII dump of data to
      syslog, in an easily viewable format, thus providing a common text hex dump
      format.
      
      hex_dumper() provides a dump-to-memory function.  It converts one "line" of
      output (16 bytes of input) at a time.
      
      Example usages:
      	print_hex_dump(KERN_DEBUG, DUMP_PREFIX_ADDRESS, frame->data, frame->len);
      	hex_dumper(frame->data, frame->len, linebuf, sizeof(linebuf));
      
      Example output using %DUMP_PREFIX_OFFSET:
      0009ab42: 40414243 44454647 48494a4b 4c4d4e4f-@ABCDEFG HIJKLMNO
      Example output using %DUMP_PREFIX_ADDRESS:
      ffffffff88089af0: 70717273 74757677 78797a7b 7c7d7e7f-pqrstuvw xyz{|}~.
      
      [akpm@linux-foundation.org: cleanups, add export]
      Signed-off-by: NRandy Dunlap <randy.dunlap@oracle.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      99eaf3c4
    • E
      getrusage(): fill ru_inblock and ru_oublock fields if possible · 6eaeeaba
      Eric Dumazet 提交于
      If CONFIG_TASK_IO_ACCOUNTING is defined, we update io accounting counters for
      each task.
      
      This patch permits reporting of values using the well known getrusage()
      syscall, filling ru_inblock and ru_oublock instead of null values.
      
      As TASK_IO_ACCOUNTING currently counts bytes counts, we approximate blocks
      count doing : nr_blocks = nr_bytes / 512
      
      Example of use :
      ----------------------
      After patch is applied, /usr/bin/time command can now give a good
      approximation of IO that the process had to do.
      
      $ /usr/bin/time grep tototo /usr/include/*
      Command exited with non-zero status 1
      0.00user 0.02system 0:02.11elapsed 1%CPU (0avgtext+0avgdata 0maxresident)k
      24288inputs+0outputs (0major+259minor)pagefaults 0swaps
      
      $ /usr/bin/time dd if=/dev/zero of=/tmp/testfile count=1000
      1000+0 enregistrements lus
      1000+0 enregistrements écrits
      512000 octets (512 kB) copiés, 0,00326601 seconde, 157 MB/s
      0.00user 0.00system 0:00.00elapsed 80%CPU (0avgtext+0avgdata 0maxresident)k
      0inputs+3000outputs (0major+299minor)pagefaults 0swaps
      Signed-off-by: NEric Dumazet <dada1@cosmosbay.com>
      Cc: Oleg Nesterov <oleg@tv-sign.ru>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      6eaeeaba
    • J
      uml: iRQ stacks · c14b8494
      Jeff Dike 提交于
      Add a separate IRQ stack.  This differs from i386 in having the entire
      interrupt run on a separate stack rather than starting on the normal kernel
      stack and switching over once some preparation has been done.  The underlying
      mechanism, is of course, sigaltstack.
      
      Another difference is that interrupts that happen in userspace are handled on
      the normal kernel stack.  These cause a wait wakeup instead of a signal
      delivery so there is no point in trying to switch stacks for these.  There's
      no other stuff on the stack, so there is no extra stack consumption.
      
      This quirk makes it possible to have the entire interrupt run on a separate
      stack - process preemption (and calls to schedule()) happens on a normal
      kernel stack.  If we enable CONFIG_PREEMPT, this will need to be rethought.
      
      The IRQ stack for CPU 0 is declared in the same way as the initial kernel
      stack.  IRQ stacks for other CPUs will be allocated dynamically.
      
      An extra field was added to the thread_info structure.  When the active
      thread_info is copied to the IRQ stack, the real_thread field points back to
      the original stack.  This makes it easy to tell where to copy the thread_info
      struct back to when the interrupt is finished.  It also serves as a marker of
      a nested interrupt.  It is NULL for the first interrupt on the stack, and
      non-NULL for any nested interrupts.
      
      Care is taken to behave correctly if a second interrupt comes in when the
      thread_info structure is being set up or taken down.  I could just disable
      interrupts here, but I don't feel like giving up any of the performance gained
      by not flipping signals on and off.
      
      If an interrupt comes in during these critical periods, the handler can't run
      because it has no idea what shape the stack is in.  So, it sets a bit for its
      signal in a global mask and returns.  The outer handler will deal with this
      signal itself.
      
      Atomicity is had with xchg.  A nested interrupt that needs to bail out will
      xchg its signal mask into pending_mask and repeat in case yet another
      interrupt hit at the same time, until the mask stabilizes.
      
      The outermost interrupt will set up the thread_info and xchg a zero into
      pending_mask when it is done.  At this point, nested interrupts will look at
      ->real_thread and see that no setup needs to be done.  They can just continue
      normally.
      
      Similar care needs to be taken when exiting the outer handler.  If another
      interrupt comes in while it is copying the thread_info, it will drop a bit
      into pending_mask.  The outer handler will check this and if it is non-zero,
      will loop, set up the stack again, and handle the interrupt.
      Signed-off-by: NJeff Dike <jdike@linux.intel.com>
      Cc: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      c14b8494
    • H
      m32r: fix pte_to_pgoff(), pgoff_to_pte() and __swp_type() macros · 23c9bbba
      Hirokazu Takata 提交于
      This patch is required to handle file-mapped or swapped-out pages
      correctly.
      
      - Fix pte_to_pgoff() and pgoff_to_pte() macros not to include
        _PAGE_PROTNONE bit of PTE.
        Mask value for { ACCESSED, N, (R, W, X), L, G } is not 0xef but 0x7f.
      - Fix __swp_type() macro for MAX_SWAPFILES_SHIFT(=5), which is defined
        in include/linux/swap.h.
      
      * M32R TLB format
      
           [0]    [1:19]           [20:23]       [24:31]
           +-----------------------+----+-------------+
           |          VPN          |0000|    ASID     |
           +-----------------------+----+-------------+
           +-+---------------------+----+-+---+-+-+-+-+
           |0         PPN          |0000|N|AC |L|G|V| |
           +-+---------------------+----+-+---+-+-+-+-+
                                      ||   RWX     | |
      * software bits in PTE          ||           | +-- _PAGE_FILE | _PAGE_DIRTY
                                      ||           +---- _PAGE_PRESENT
                                      |+---------------- _PAGE_ACCESSED
                                      +----------------- _PAGE_PROTNONE
      Signed-off-by: NHitoshi Yamamoto <hitoshiy@linux-m32r.org>
      Signed-off-by: NHirokazu Takata <takata@linux-m32r.org>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      23c9bbba
    • H
      m32r: fix switch_to macro to push/pop frame pointer if needed · 43c09ce7
      Hirokazu Takata 提交于
      This patch fixes a rarely-happened but severe scheduling problem of
      the recent m32r kernel of 2.6.17-rc3 or later.
      
      In the following previous m32r patch, the switch_to macro was
      modified not to do unnecessary push/pop operations for tuning.
      > [PATCH] m32r: update switch_to macro for tuning
      > 4127272c
      
      In this modification, only 'lr' and 'sp' registers are push/pop'ed,
      assuming that the m32r kernel is always compiled with
      -fomit-frame-pointer option.
      
      However, in 2.6 kernel, kernel/sched.c is irregularly compiled
      with -fno-omit-frame-pointer if CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER
      is not defined.
      
       -- kernel/Makefile --
         :
       ifneq ($(CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER),y)
       # According to Alan Modra <alan@linuxcare.com.au>, the -fno-omit-frame-pointer is
       # needed for x86 only.  Why this used to be enabled for all architectures is beyond
       # me.  I suspect most platforms don't need this, but until we know that for sure
       # I turn this off for IA-64 only.  Andreas Schwab says it's also needed on m68k
       # to get a correct value for the wait-channel (WCHAN in ps). --davidm
       CFLAGS_sched.o := $(PROFILING) -fno-omit-frame-pointer
       endif
         :
       ---
      
      Therefore, for the recent m32r kernel, we have to push/pop 'fp'
      (frame pointer) if CONFIG_FRAME_POINTER is defined or
      CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER is not defined.
      Signed-off-by: NHitoshi Yamamoto <hitoshiy@linux-m32r.org>
      Signed-off-by: NHirokazu Takata <takata@linux-m32r.org>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      43c09ce7
    • Y
      h8300 syscall update · 44316634
      Yoshinori Sato 提交于
      h8300 systemcall entry table update.
      Signed-off-by: NYoshinori Sato <ysato@users.sourceforge.jp>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      44316634
    • A
      x86_64: new syscall · 9393e1dc
      Andi Kleen 提交于
      Add epoll_pwait()
      
      (akpm: stolen from Andi's queue, because I want to send the signalfd patches
      which also add syscalls.  Not sure what the __IGNORE_getcpu is for).
      Signed-off-by: NAndi Kleen <ak@suse.de>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      9393e1dc
    • V
      x86_64: display more intuitive error message if kernel is not 2MB aligned · 069f11f9
      Vivek Goyal 提交于
      o x86_64 kernel needs to be compiled for 2MB aligned addresses. Currently
        we are using BUILD_BUG_ON() to warn the user if he has not done so. But
        looks like folks are not finding message very intutive and don't open
        the respective c file to find problem source. (Bug 8439)
      
      arch/x86_64/kernel/head64.c: In function 'x86_64_start_kernel':
      arch/x86_64/kernel/head64.c:70: error: size of array 'type name' is negative
      
      o Using preprocessor directive #error to print a better message if
        CONFIG_PHYSICAL_START is not aligned to 2MB boundary.
      Signed-off-by: NVivek Goyal <vgoyal@in.ibm.com>
      Cc: Andi Kleen <ak@suse.de>
      Cc: "Eric W. Biederman" <ebiederm@xmission.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      069f11f9
    • J
      i386: work around miscompilation of alternatives code · 6041b57c
      Joerg Roedel 提交于
      A recent change makes my Dell 1501 hang on boot.  It's an AMD MK-36.  I use
      an x86_64 kernel.  It is 100% reproducible.
      
      I debugged this problem a bit and my compiler[1]interprets the =A constraint
      as %rax instead of %edx:%eax on x86_64 which causes the problem.  The appended
      patch provides a workaround for this and fixed the hang on my machine.
      
      [1] gcc version 4.1.3 20070429 (prerelease) (Debian 4.1.2-5)
      Signed-off-by: NJoerg Roedel <joerg.roedel@amd.com>
      Cc: Andi Kleen <ak@suse.de>
      Cc: Benny Halevy <bhalevy@panasas.com>
      Cc: Pete Zaitcev <zaitcev@redhat.com>
      Cc: "Joerg Roedel" <joerg.roedel@amd.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      6041b57c
    • E
      Revert "[PATCH] paravirt: Add startup infrastructure for paravirtualization" · 5a18c92a
      Eric W. Biederman 提交于
      This reverts commit c9ccf30d.
      
      Entering the kernel at startup_32 without passing our real mode data in
      %esi, and without guaranteeing that physical and virtual addresses are
      identity mapped makes head.S impossible to maintain.
      
      The only user of this infrastructure is lguest which is not merged so
      nothing we currently support will break by removing this over designed
      nightmare, and only the pending lguest patches will be affected.  The
      pending Xen patches have a different entry point that they use.
      
      We are currently discussing what Xen and lguest need to do to boot the
      kernel in a more normal fashion so using startup_32 in this weird manner is
      clearly not their long term direction.
      
      So let's remove this code in head.S before it causes brain damage to people
      trying to maintain head.S
      
      Cc: Chris Wright <chrisw@sous-sol.org>
      Cc: Andi Kleen <ak@suse.de>
      Cc: Jeremy Fitzhardinge <jeremy@goop.org>
      Cc: Zachary Amsden <zach@vmware.com>
      CC: H. Peter Anvin <hpa@zytor.com>
      Signed-off-by: NEric W. Biederman <ebiederm@xmission.com>
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      5a18c92a
    • A
      add upper-32-bits macro · 218e180e
      Andrew Morton 提交于
      We keep on getting "right shift count >= width of type" warnings when doing
      things like
      
      	sector_t s;
      
      	x = s >> 56;
      
      because with CONFIG_LBD=n, s is only 32-bit.  Similar problems can occur with
      dma_addr_t's.
      
      So add a simple wrapper function which code can use to avoid this warning.
      The above example would become
      
      	x = upper_32_bits(s) >> 24;
      
      The first user is in fact AFS.
      
      Cc: James Bottomley <James.Bottomley@SteelEye.com>
      Cc: "Cameron, Steve" <Steve.Cameron@hp.com>
      Cc: "Miller, Mike (OS Dev)" <Mike.Miller@hp.com>
      Cc: Hisashi Hifumi <hifumi.hisashi@oss.ntt.co.jp>
      Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
      Cc: David Howells <dhowells@redhat.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      218e180e
    • C
      slub: support concurrent local and remote frees and allocs on a slab · 894b8788
      Christoph Lameter 提交于
      Avoid atomic overhead in slab_alloc and slab_free
      
      SLUB needs to use the slab_lock for the per cpu slabs to synchronize with
      potential kfree operations.  This patch avoids that need by moving all free
      objects onto a lockless_freelist.  The regular freelist continues to exist
      and will be used to free objects.  So while we consume the
      lockless_freelist the regular freelist may build up objects.
      
      If we are out of objects on the lockless_freelist then we may check the
      regular freelist.  If it has objects then we move those over to the
      lockless_freelist and do this again.  There is a significant savings in
      terms of atomic operations that have to be performed.
      
      We can even free directly to the lockless_freelist if we know that we are
      running on the same processor.  So this speeds up short lived objects.
      They may be allocated and freed without taking the slab_lock.  This is
      particular good for netperf.
      
      In order to maximize the effect of the new faster hotpath we extract the
      hottest performance pieces into inlined functions.  These are then inlined
      into kmem_cache_alloc and kmem_cache_free.  So hotpath allocation and
      freeing no longer requires a subroutine call within SLUB.
      
      [I am not sure that it is worth doing this because it changes the easy to
      read structure of slub just to reduce atomic ops.  However, there is
      someone out there with a benchmark on 4 way and 8 way processor systems
      that seems to show a 5% regression vs.  Slab.  Seems that the regression is
      due to increased atomic operations use vs.  SLAB in SLUB).  I wonder if
      this is applicable or discernable at all in a real workload?]
      Signed-off-by: NChristoph Lameter <clameter@sgi.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      894b8788
    • K
    • K
    • I
      CRC ITU-T V.41 · 3e7cbae7
      Ivo van Doorn 提交于
      This will add the CRC calculation according
      to the CRC ITU-T V.41 to the kernel lib/ folder.
      
      This code has been derived from the rt2x00 driver,
      currently found only in the wireless-dev tree, but
      this library is generic and could be used by more
      drivers who currently use their own implementation.
      Signed-off-by: NIvo van Doorn <IvDoorn@gmail.com>
      
      Also useful for the new firewire stack.
      Signed-off-by: NKristian Hoegsberg <krh@redhat.com>
      Signed-off-by: NStefan Richter <stefanr@s5r6.in-berlin.de>
      3e7cbae7
  2. 10 5月, 2007 14 次提交