12 Jan, 2006

1 commit

  • Let's switch mutex_debug_check_no_locks_freed() to take (addr, len) as
    arguments instead, since all its callers were just calculating the 'to'
    address for themselves anyway... (and sometimes doing so badly).

    Signed-off-by: David Woodhouse
    Acked-by: Ingo Molnar
    Signed-off-by: Linus Torvalds

    David Woodhouse
     

10 Jan, 2006

1 commit


09 Jan, 2006

6 commits


14 Nov, 2005

2 commits


08 Nov, 2005

1 commit


07 Nov, 2005

4 commits

  • Various core kernel-doc cleanups:
    - add missing function parameters in ipc, irq/manage, kernel/sys,
    kernel/sysctl, and mm/slab;
    - move description to just above function for kernel_restart()

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

    Randy Dunlap
     
  • Chen noticed that cache_reap uses REAPTIMEOUT_CPUC+smp_processor_id() as
    the timeout for rescheduling.

    The "+smp_processor_id()" part is wrong, the timeout should be identical
    for all cpus: start_cpu_timer already adds a cpu dependant offset to avoid
    any clustering.

    The attached patch removes smp_processor_id().

    Signed-Off-By: Manfred Spraul
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Manfred Spraul
     
  • This patch renames struct kmem_cache_s to kmem_cache so we can start using
    it instead of kmem_cache_t typedef.

    Signed-off-by: Pekka Enberg
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Pekka J Enberg
     
  • slab presently goes BUG if someone tries to register an already-registered
    cache.

    But this can happen if the user accidentally loads a module which is already
    statically linked into the kernel. Nuking the kernel is rather a harsh
    reaction.

    Change it into a warning, and just fail the kmem_cache_alloc() attempt. If
    the module is well-behaved, the modprobe will fail and all is well.

    Notes:

    - Swaps the ranking of cache_chain_sem and lock_cpu_hotplug(). Doesn't seem
    important.

    Acked-by: Manfred Spraul
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andrew Morton
     

30 Oct, 2005

1 commit


28 Oct, 2005

1 commit


09 Oct, 2005

1 commit

  • - added typedef unsigned int __nocast gfp_t;

    - replaced __nocast uses for gfp flags with gfp_t - it gives exactly
    the same warnings as far as sparse is concerned, doesn't change
    generated code (from gcc point of view we replaced unsigned int with
    typedef) and documents what's going on far better.

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

    Al Viro
     

28 Sep, 2005

1 commit

  • In kmalloc_node we are checking if the allocation is for the same node when
    interrupts are "on". This may lead to an allocation on another node than
    intended.

    This patch just shifts the check for the current node in __cache_alloc_node
    when interrupts are disabled.

    Signed-off-by: Alok N Kataria
    Acked-by: Christoph Lameter
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Alok N Kataria
     

24 Sep, 2005

1 commit

  • As davem points out, this wasn't such a great idea. There may be some code
    which does:

    size = 1024*1024;
    while (kmalloc(size, ...) == 0)
    size /= 2;

    which will now explode.

    Cc: "David S. Miller"
    Cc: Christoph Lameter
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andrew Morton
     

23 Sep, 2005

3 commits

  • I had an issue on ia64 where I got a bug in kernel/workqueue because
    kzalloc returned a NULL pointer due to the task structure getting too big
    for the slab allocator. Usually these cases are caught by the kmalloc
    macro in include/linux/slab.h.

    Compilation will fail if a too big value is passed to kmalloc.

    However, kzalloc uses __kmalloc which has no check for that. This patch
    makes __kmalloc bug if a too large entity is requested.

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

    Christoph Lameter
     
  • The numa slab allocator may allocate pages from foreign nodes onto the
    lists for a particular node if a node runs out of memory. Inspecting the
    slab->nodeid field will not reflect that the page is now in use for the
    slabs of another node.

    This patch fixes that issue by adding a node field to free_block so that
    the caller can indicate which node currently uses a slab.

    Also removes the check for the current node from kmalloc_cache_node since
    the process may shift later to another node which may lead to an allocation
    on another node than intended.

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

    Christoph Lameter
     
  • It is essential that index_of() be inlined. But alpha undoes the gcc
    inlining hackery and index_of() ends up out-of-line. So fiddle with things
    to make that function inline again.

    Cc: Richard Henderson
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ivan Kokshaysky
     

15 Sep, 2005

1 commit

  • With the new changes that we made in the initialization of the slab
    allocator, we first setup the cache from which array caches are allocated,
    and then the cache, from which kmem_list3's are allocated.

    Now if the array cache comes from a cache in which objsize > 32, (in this
    instance size-64) then, first size-64 cache will be allocated and then the
    size-128 (if this is the cache from which kmem_list3's are going to be
    allocated).

    So with these new changes, we are not guaranteed that we will be
    initializing the malloc_sizes array in a serialized order. Thus there is
    a bug in __find_general_cachep, as we are checking whether the first
    cache_sizes ptr is NULL.

    This is replaced by checking whether the array-cache cache is initialized.
    Attached is a patch which does that. Boots fine on a x86-64, with
    DEBUG_SPIN, DEBUG_SLAB, and preempt.

    Attached is a patch which does that. Boots fine on a x86-64, with
    DEBUG_SPIN, DEBUG_SLAB, and preempt.Thanks & Regards, Alok

    Signed-off-by: Alok N Kataria
    Signed-off-by: Shobhit Dayal
    Cc: Manfred Spraul
    Cc: Christoph Lameter
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Alok Kataria
     

11 Sep, 2005

1 commit


10 Sep, 2005

2 commits

  • This patch clarifies NULL handling of kfree() and vfree(). I addition,
    wording of calling context restriction for vfree() and vunmap() are changed
    from "may not" to "must not."

    Signed-off-by: Pekka Enberg
    Acked-by: Manfred Spraul
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Pekka Enberg
     
  • The NUMA API change that introduced kmalloc_node was accepted for
    2.6.12-rc3. Now it is possible to do slab allocations on a node to
    localize memory structures. This API was used by the pageset localization
    patch and the block layer localization patch now in mm. The existing
    kmalloc_node is slow since it simply searches through all pages of the slab
    to find a page that is on the node requested. The two patches do a one
    time allocation of slab structures at initialization and therefore the
    speed of kmalloc node does not matter.

    This patch allows kmalloc_node to be as fast as kmalloc by introducing node
    specific page lists for partial, free and full slabs. Slab allocation
    improves in a NUMA system so that we are seeing a performance gain in AIM7
    of about 5% with this patch alone.

    More NUMA localizations are possible if kmalloc_node operates in an fast
    way like kmalloc.

    Test run on a 32p systems with 32G Ram.

    w/o patch
    Tasks jobs/min jti jobs/min/task real cpu
    1 485.36 100 485.3640 11.99 1.91 Sat Apr 30 14:01:51 2005
    100 26582.63 88 265.8263 21.89 144.96 Sat Apr 30 14:02:14 2005
    200 29866.83 81 149.3342 38.97 286.08 Sat Apr 30 14:02:53 2005
    300 33127.16 78 110.4239 52.71 426.54 Sat Apr 30 14:03:46 2005
    400 34889.47 80 87.2237 66.72 568.90 Sat Apr 30 14:04:53 2005
    500 35654.34 76 71.3087 81.62 714.55 Sat Apr 30 14:06:15 2005
    600 36460.83 75 60.7681 95.77 853.42 Sat Apr 30 14:07:51 2005
    700 35957.00 75 51.3671 113.30 990.67 Sat Apr 30 14:09:45 2005
    800 33380.65 73 41.7258 139.48 1140.86 Sat Apr 30 14:12:05 2005
    900 35095.01 76 38.9945 149.25 1281.30 Sat Apr 30 14:14:35 2005
    1000 36094.37 74 36.0944 161.24 1419.66 Sat Apr 30 14:17:17 2005

    w/patch
    Tasks jobs/min jti jobs/min/task real cpu
    1 484.27 100 484.2736 12.02 1.93 Sat Apr 30 15:59:45 2005
    100 28262.03 90 282.6203 20.59 143.57 Sat Apr 30 16:00:06 2005
    200 32246.45 82 161.2322 36.10 282.89 Sat Apr 30 16:00:42 2005
    300 37945.80 83 126.4860 46.01 418.75 Sat Apr 30 16:01:28 2005
    400 40000.69 81 100.0017 58.20 561.48 Sat Apr 30 16:02:27 2005
    500 40976.10 78 81.9522 71.02 696.95 Sat Apr 30 16:03:38 2005
    600 41121.54 78 68.5359 84.92 834.86 Sat Apr 30 16:05:04 2005
    700 44052.77 78 62.9325 92.48 971.53 Sat Apr 30 16:06:37 2005
    800 41066.89 79 51.3336 113.38 1111.15 Sat Apr 30 16:08:31 2005
    900 38918.77 79 43.2431 134.59 1252.57 Sat Apr 30 16:10:46 2005
    1000 41842.21 76 41.8422 139.09 1392.33 Sat Apr 30 16:13:05 2005

    These are measurement taken directly after boot and show a greater
    improvement than 5%. However, the performance improvements become less
    over time if the AIM7 runs are repeated and settle down at around 5%.

    Links to earlier discussions:
    http://marc.theaimsgroup.com/?t=111094594500003&r=1&w=2
    http://marc.theaimsgroup.com/?t=111603406600002&r=1&w=2

    Changelog V4-V5:
    - alloc_arraycache and alloc_aliencache take node parameter instead of cpu
    - fix initialization so that nodes without cpus are properly handled.
    - simplify code in kmem_cache_init
    - patch against Andrews temp mm3 release
    - Add Shai to credits
    - fallback to __cache_alloc from __cache_alloc_node if the node's cache
    is not available yet.

    Changelog V3-V4:
    - Patch against 2.6.12-rc5-mm1
    - Cleanup patch integrated
    - More and better use of for_each_node and for_each_cpu
    - GCC 2.95 fix (do not use [] use [0])
    - Correct determination of INDEX_AC
    - Remove hack to cause an error on platforms that have no CONFIG_NUMA but nodes.
    - Remove list3_data and list3_data_ptr macros for better readability

    Changelog V2-V3:
    - Made to patch against 2.6.12-rc4-mm1
    - Revised bootstrap mechanism so that larger size kmem_list3 structs can be
    supported. Do a generic solution so that the right slab can be found
    for the internal structs.
    - use for_each_online_node

    Changelog V1-V2:
    - Batching for freeing of wrong-node objects (alien caches)
    - Locking changes and NUMA #ifdefs as requested by Manfred

    Signed-off-by: Alok N Kataria
    Signed-off-by: Shobhit Dayal
    Signed-off-by: Shai Fultheim
    Signed-off-by: Christoph Lameter
    Cc: Manfred Spraul
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Christoph Lameter
     

08 Sep, 2005

1 commit


05 Sep, 2005

4 commits


08 Jul, 2005

1 commit


07 Jul, 2005

1 commit

  • This patch used to be in Andrew's tree before the NUMA slab allocator went
    in. Either this patch or the NUMA slab allocator is needed in order for
    kmalloc_node to work correctly.

    pcibus_to_node may be used to generate the node information passed to
    kmalloc_node. pcibus_to_node returns -1 if it was not able to determine
    on which node a pcibus is located. For that case kmalloc_node must
    work like kmalloc.

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

    Christoph Lameter
     

24 Jun, 2005

1 commit

  • This patch creates a new kstrdup library function and changes the "local"
    implementations in several places to use this function.

    Most of the changes come from the sound and net subsystems. The sound part
    had already been acknowledged by Takashi Iwai and the net part by David S.
    Miller.

    I left UML alone for now because I would need more time to read the code
    carefully before making changes there.

    Signed-off-by: Paulo Marques
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Paulo Marques
     

22 Jun, 2005

1 commit

  • The pageset array can potentially acquire a huge amount of memory on large
    NUMA systems. F.e. on a system with 512 processors and 256 nodes there
    will be 256*512 pagesets. If each pageset only holds 5 pages then we are
    talking about 655360 pages.With a 16K page size on IA64 this results in
    potentially 10 Gigabytes of memory being trapped in pagesets. The typical
    cases are much less for smaller systems but there is still the potential of
    memory being trapped in off node pagesets. Off node memory may be rarely
    used if local memory is available and so we may potentially have memory in
    seldom used pagesets without this patch.

    The slab allocator flushes its per cpu caches every 2 seconds. The
    following patch flushes the off node pageset caches in the same way by
    tying into the slab flush.

    The patch also changes /proc/zoneinfo to include the number of pages
    currently in each pageset.

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

    Christoph Lameter
     

19 Jun, 2005

1 commit


01 May, 2005

2 commits

  • This patch changes calls to synchronize_kernel(), deprecated in the earlier
    "Deprecate synchronize_kernel, GPL replacement" patch to instead call the new
    synchronize_rcu() and synchronize_sched() APIs.

    Signed-off-by: Paul E. McKenney
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Paul E. McKenney
     
  • The patch makes the following function calls available to allocate memory
    on a specific node without changing the basic operation of the slab
    allocator:

    kmem_cache_alloc_node(kmem_cache_t *cachep, unsigned int flags, int node);
    kmalloc_node(size_t size, unsigned int flags, int node);

    in a similar way to the existing node-blind functions:

    kmem_cache_alloc(kmem_cache_t *cachep, unsigned int flags);
    kmalloc(size, flags);

    kmem_cache_alloc_node was changed to pass flags and the node information
    through the existing layers of the slab allocator (which lead to some minor
    rearrangements). The functions at the lowest layer (kmem_getpages,
    cache_grow) are already node aware. Also __alloc_percpu can call
    kmalloc_node now.

    Performance measurements (using the pageset localization patch) yields:

    w/o patches:
    Tasks jobs/min jti jobs/min/task real cpu
    1 484.27 100 484.2736 12.02 1.97 Wed Mar 30 20:50:43 2005
    100 25170.83 91 251.7083 23.12 150.10 Wed Mar 30 20:51:06 2005
    200 34601.66 84 173.0083 33.64 294.14 Wed Mar 30 20:51:40 2005
    300 37154.47 86 123.8482 46.99 436.56 Wed Mar 30 20:52:28 2005
    400 39839.82 80 99.5995 58.43 580.46 Wed Mar 30 20:53:27 2005
    500 40036.32 79 80.0726 72.68 728.60 Wed Mar 30 20:54:40 2005
    600 44074.21 79 73.4570 79.23 872.10 Wed Mar 30 20:55:59 2005
    700 44016.60 78 62.8809 92.56 1015.84 Wed Mar 30 20:57:32 2005
    800 40411.05 80 50.5138 115.22 1161.13 Wed Mar 30 20:59:28 2005
    900 42298.56 79 46.9984 123.83 1303.42 Wed Mar 30 21:01:33 2005
    1000 40955.05 80 40.9551 142.11 1441.92 Wed Mar 30 21:03:55 2005

    with pageset localization and slab API patches:
    Tasks jobs/min jti jobs/min/task real cpu
    1 484.19 100 484.1930 12.02 1.98 Wed Mar 30 21:10:18 2005
    100 27428.25 92 274.2825 21.22 149.79 Wed Mar 30 21:10:40 2005
    200 37228.94 86 186.1447 31.27 293.49 Wed Mar 30 21:11:12 2005
    300 41725.42 85 139.0847 41.84 434.10 Wed Mar 30 21:11:54 2005
    400 43032.22 82 107.5805 54.10 582.06 Wed Mar 30 21:12:48 2005
    500 42211.23 83 84.4225 68.94 722.61 Wed Mar 30 21:13:58 2005
    600 40084.49 82 66.8075 87.12 873.11 Wed Mar 30 21:15:25 2005
    700 44169.30 79 63.0990 92.24 1008.77 Wed Mar 30 21:16:58 2005
    800 43097.94 79 53.8724 108.03 1155.88 Wed Mar 30 21:18:47 2005
    900 41846.75 79 46.4964 125.17 1303.38 Wed Mar 30 21:20:52 2005
    1000 40247.85 79 40.2478 144.60 1442.21 Wed Mar 30 21:23:17 2005

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

    Manfred Spraul
     

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