)]}'
{
  "log": [
    {
      "commit": "4b51d66989218aad731a721b5b28c79bf5388c09",
      "tree": "8ff7acbd219f699c20c2f1fd201ffb3db5a64062",
      "parents": [
        "66701b1499a3ff11882c8c4aef36e8eac86e17b1"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Sat Feb 10 01:43:10 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Sun Feb 11 10:51:18 2007 -0800"
      },
      "message": "[PATCH] optional ZONE_DMA: optional ZONE_DMA in the VM\n\nMake ZONE_DMA optional in core code.\n\n- ifdef all code for ZONE_DMA and related definitions following the example\n  for ZONE_DMA32 and ZONE_HIGHMEM.\n\n- Without ZONE_DMA, ZONE_HIGHMEM and ZONE_DMA32 we get to a ZONES_SHIFT of\n  0.\n\n- Modify the VM statistics to work correctly without a DMA zone.\n\n- Modify slab to not create DMA slabs if there is no ZONE_DMA.\n\n[akpm@osdl.org: cleanup]\n[jdike@addtoit.com: build fix]\n[apw@shadowen.org: Simplify calculation of the number of bits we need for ZONES_SHIFT]\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: Andi Kleen \u003cak@suse.de\u003e\nCc: \"Luck, Tony\" \u003ctony.luck@intel.com\u003e\nCc: Kyle McMartin \u003ckyle@mcmartin.ca\u003e\nCc: Matthew Wilcox \u003cwilly@debian.org\u003e\nCc: James Bottomley \u003cJames.Bottomley@steeleye.com\u003e\nCc: Paul Mundt \u003clethal@linux-sh.org\u003e\nSigned-off-by: Andy Whitcroft \u003capw@shadowen.org\u003e\nSigned-off-by: Jeff Dike \u003cjdike@addtoit.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "05a0416be2b88d859efcbc4a4290555a04d169a1",
      "tree": "da7216a3a04625a45b952ea21f817d5cdb199530",
      "parents": [
        "9195481d2f869a2707a272057f3f8664fd277534"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Sat Feb 10 01:43:05 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Sun Feb 11 10:51:18 2007 -0800"
      },
      "message": "[PATCH] Drop __get_zone_counts()\n\nValues are readily available via ZVC per node and global sums.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "51ed4491271be8c56bdb2a03481ed34ea4984bc2",
      "tree": "580e03859b7c78a05a6ed479957cd3a1d846c5da",
      "parents": [
        "d23ad42324cc4378132e51f2fc5c9ba6cbe75182"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Sat Feb 10 01:43:02 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Sun Feb 11 10:51:17 2007 -0800"
      },
      "message": "[PATCH] Reorder ZVCs according to cacheline\n\nThe global and per zone counter sums are in arrays of longs.  Reorder the ZVCs\nso that the most frequently used ZVCs are put into the same cacheline.  That\nway calculations of the global, node and per zone vm state touches only a\nsingle cacheline.  This is mostly important for 64 bit systems were one 128\nbyte cacheline takes only 8 longs.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d23ad42324cc4378132e51f2fc5c9ba6cbe75182",
      "tree": "6844416befb3988e432e8f422f3a369e2f760d39",
      "parents": [
        "c878538598d1e7ab41ecc0de8894e34e2fdef630"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Sat Feb 10 01:43:02 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Sun Feb 11 10:51:17 2007 -0800"
      },
      "message": "[PATCH] Use ZVC for free_pages\n\nThis is again simplifies some of the VM counter calculations through the use\nof the ZVC consolidated counters.\n\n[michal.k.k.piotrowski@gmail.com: build fix]\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Michal Piotrowski \u003cmichal.k.k.piotrowski@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c878538598d1e7ab41ecc0de8894e34e2fdef630",
      "tree": "d22e73fddef75521e287c3e7754a1d3224c348d9",
      "parents": [
        "c3704ceb4ad055b489b143f4e37c57d128908012"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Sat Feb 10 01:43:01 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Sun Feb 11 10:51:17 2007 -0800"
      },
      "message": "[PATCH] Use ZVC for inactive and active counts\n\nThe determination of the dirty ratio to determine writeback behavior is\ncurrently based on the number of total pages on the system.\n\nHowever, not all pages in the system may be dirtied.  Thus the ratio is always\ntoo low and can never reach 100%.  The ratio may be particularly skewed if\nlarge hugepage allocations, slab allocations or device driver buffers make\nlarge sections of memory not available anymore.  In that case we may get into\na situation in which f.e.  the background writeback ratio of 40% cannot be\nreached anymore which leads to undesired writeback behavior.\n\nThis patchset fixes that issue by determining the ratio based on the actual\npages that may potentially be dirty.  These are the pages on the active and\nthe inactive list plus free pages.\n\nThe problem with those counts has so far been that it is expensive to\ncalculate these because counts from multiple nodes and multiple zones will\nhave to be summed up.  This patchset makes these counters ZVC counters.  This\nmeans that a current sum per zone, per node and for the whole system is always\navailable via global variables and not expensive anymore to calculate.\n\nThe patchset results in some other good side effects:\n\n- Removal of the various functions that sum up free, active and inactive\n  page counts\n\n- Cleanup of the functions that display information via the proc filesystem.\n\nThis patch:\n\nThe use of a ZVC for nr_inactive and nr_active allows a simplification of some\ncounter operations.  More ZVC functionality is used for sums etc in the\nfollowing patches.\n\n[akpm@osdl.org: UP build fix]\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a2f3aa02576632cdb60bd3de1f4bf55e9ac65604",
      "tree": "2b9b73675de73866fbd219fab5bf2d804e6817b1",
      "parents": [
        "47a4d5be7c50b2e9b905abbe2b97dc87051c5a44"
      ],
      "author": {
        "name": "Dave Hansen",
        "email": "haveblue@us.ibm.com",
        "time": "Wed Jan 10 23:15:30 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Thu Jan 11 18:18:20 2007 -0800"
      },
      "message": "[PATCH] Fix sparsemem on Cell\n\nFix an oops experienced on the Cell architecture when init-time functions,\nearly_*(), are called at runtime.  It alters the call paths to make sure\nthat the callers explicitly say whether the call is being made on behalf of\na hotplug even, or happening at boot-time.\n\nIt has been compile tested on ppc64, ia64, s390, i386 and x86_64.\n\nAcked-by: Arnd Bergmann \u003carndb@de.ibm.com\u003e\nSigned-off-by: Dave Hansen \u003chaveblue@us.ibm.com\u003e\nCc: Yasunori Goto \u003cy-goto@jp.fujitsu.com\u003e\nAcked-by: Andy Whitcroft \u003capw@shadowen.org\u003e\nCc: Christoph Lameter \u003cclameter@engr.sgi.com\u003e\nCc: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nAcked-by: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nCc: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nCc: Paul Mackerras \u003cpaulus@samba.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "15ad7cdcfd76450d4beebc789ec646664238184d",
      "tree": "279d05a76ae0906c23ee2de8c5684d95d9886ad3",
      "parents": [
        "4a08a9f68168e547c2baf100020e9b96cae5fbd1"
      ],
      "author": {
        "name": "Helge Deller",
        "email": "deller@gmx.de",
        "time": "Wed Dec 06 20:40:36 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Thu Dec 07 08:39:46 2006 -0800"
      },
      "message": "[PATCH] struct seq_operations and struct file_operations constification\n\n - move some file_operations structs into the .rodata section\n\n - move static strings from policy_types[] array into the .rodata section\n\n - fix generic seq_operations usages, so that those structs may be defined\n   as \"const\" as well\n\n[akpm@osdl.org: couple of fixes]\nSigned-off-by: Helge Deller \u003cdeller@gmx.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "7253f4ef04b1cd138baf2b29a95473743ac0a307",
      "tree": "5883e6773a3cdad31992539ba3ad989d2566a041",
      "parents": [
        "9276b1bc96a132f4068fdee00983c532f43d3a26"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Wed Dec 06 20:31:49 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Thu Dec 07 08:39:20 2006 -0800"
      },
      "message": "[PATCH] memory page_alloc zonelist caching reorder structure\n\nRearrange the struct members in the \u0027struct zonelist_cache\u0027 structure, so\nas to put the readonly (once initialized) z_to_n[] array first, where it\nwill come right after the zones[] array in struct zonelist.\n\nThis pretty much eliminates the chance that the two frequently written\nelements of \u0027struct zonelist_cache\u0027, the fullzones bitmap and last_full_zap\ntimes, will end up on the same cache line as the performance sensitive,\nfrequently read, never (after init) written zones[] array.\n\nKeeping frequently written data off frequently read cache lines is good for\nperformance.\n\nThanks to Rohit Seth for the suggestion.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nCc: Rohit Seth \u003crohitseth@google.com\u003e\nCc: Paul Menage \u003cmenage@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "9276b1bc96a132f4068fdee00983c532f43d3a26",
      "tree": "04d64444cf6558632cfc7514b5437578b5e616af",
      "parents": [
        "89689ae7f95995723fbcd5c116c47933a3bb8b13"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Wed Dec 06 20:31:48 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Thu Dec 07 08:39:20 2006 -0800"
      },
      "message": "[PATCH] memory page_alloc zonelist caching speedup\n\nOptimize the critical zonelist scanning for free pages in the kernel memory\nallocator by caching the zones that were found to be full recently, and\nskipping them.\n\nRemembers the zones in a zonelist that were short of free memory in the\nlast second.  And it stashes a zone-to-node table in the zonelist struct,\nto optimize that conversion (minimize its cache footprint.)\n\nRecent changes:\n\n    This differs in a significant way from a similar patch that I\n    posted a week ago.  Now, instead of having a nodemask_t of\n    recently full nodes, I have a bitmask of recently full zones.\n    This solves a problem that last weeks patch had, which on\n    systems with multiple zones per node (such as DMA zone) would\n    take seeing any of these zones full as meaning that all zones\n    on that node were full.\n\n    Also I changed names - from \"zonelist faster\" to \"zonelist cache\",\n    as that seemed to better convey what we\u0027re doing here - caching\n    some of the key zonelist state (for faster access.)\n\n    See below for some performance benchmark results.  After all that\n    discussion with David on why I didn\u0027t need them, I went and got\n    some ;).  I wanted to verify that I had not hurt the normal case\n    of memory allocation noticeably.  At least for my one little\n    microbenchmark, I found (1) the normal case wasn\u0027t affected, and\n    (2) workloads that forced scanning across multiple nodes for\n    memory improved up to 10% fewer System CPU cycles and lower\n    elapsed clock time (\u0027sys\u0027 and \u0027real\u0027).  Good.  See details, below.\n\n    I didn\u0027t have the logic in get_page_from_freelist() for various\n    full nodes and zone reclaim failures correct.  That should be\n    fixed up now - notice the new goto labels zonelist_scan,\n    this_zone_full, and try_next_zone, in get_page_from_freelist().\n\nThere are two reasons I persued this alternative, over some earlier\nproposals that would have focused on optimizing the fake numa\nemulation case by caching the last useful zone:\n\n 1) Contrary to what I said before, we (SGI, on large ia64 sn2 systems)\n    have seen real customer loads where the cost to scan the zonelist\n    was a problem, due to many nodes being full of memory before\n    we got to a node we could use.  Or at least, I think we have.\n    This was related to me by another engineer, based on experiences\n    from some time past.  So this is not guaranteed.  Most likely, though.\n\n    The following approach should help such real numa systems just as\n    much as it helps fake numa systems, or any combination thereof.\n\n 2) The effort to distinguish fake from real numa, using node_distance,\n    so that we could cache a fake numa node and optimize choosing\n    it over equivalent distance fake nodes, while continuing to\n    properly scan all real nodes in distance order, was going to\n    require a nasty blob of zonelist and node distance munging.\n\n    The following approach has no new dependency on node distances or\n    zone sorting.\n\nSee comment in the patch below for a description of what it actually does.\n\nTechnical details of note (or controversy):\n\n - See the use of \"zlc_active\" and \"did_zlc_setup\" below, to delay\n   adding any work for this new mechanism until we\u0027ve looked at the\n   first zone in zonelist.  I figured the odds of the first zone\n   having the memory we needed were high enough that we should just\n   look there, first, then get fancy only if we need to keep looking.\n\n - Some odd hackery was needed to add items to struct zonelist, while\n   not tripping up the custom zonelists built by the mm/mempolicy.c\n   code for MPOL_BIND.  My usual wordy comments below explain this.\n   Search for \"MPOL_BIND\".\n\n - Some per-node data in the struct zonelist is now modified frequently,\n   with no locking.  Multiple CPU cores on a node could hit and mangle\n   this data.  The theory is that this is just performance hint data,\n   and the memory allocator will work just fine despite any such mangling.\n   The fields at risk are the struct \u0027zonelist_cache\u0027 fields \u0027fullzones\u0027\n   (a bitmask) and \u0027last_full_zap\u0027 (unsigned long jiffies).  It should\n   all be self correcting after at most a one second delay.\n\n - This still does a linear scan of the same lengths as before.  All\n   I\u0027ve optimized is making the scan faster, not algorithmically\n   shorter.  It is now able to scan a compact array of \u0027unsigned\n   short\u0027 in the case of many full nodes, so one cache line should\n   cover quite a few nodes, rather than each node hitting another\n   one or two new and distinct cache lines.\n\n - If both Andi and Nick don\u0027t find this too complicated, I will be\n   (pleasantly) flabbergasted.\n\n - I removed the comment claiming we only use one cachline\u0027s worth of\n   zonelist.  We seem, at least in the fake numa case, to have put the\n   lie to that claim.\n\n - I pay no attention to the various watermarks and such in this performance\n   hint.  A node could be marked full for one watermark, and then skipped\n   over when searching for a page using a different watermark.  I think\n   that\u0027s actually quite ok, as it will tend to slightly increase the\n   spreading of memory over other nodes, away from a memory stressed node.\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nPerformance - some benchmark results and analysis:\n\nThis benchmark runs a memory hog program that uses multiple\nthreads to touch alot of memory as quickly as it can.\n\nMultiple runs were made, touching 12, 38, 64 or 90 GBytes out of\nthe total 96 GBytes on the system, and using 1, 19, 37, or 55\nthreads (on a 56 CPU system.)  System, user and real (elapsed)\ntimings were recorded for each run, shown in units of seconds,\nin the table below.\n\nTwo kernels were tested - 2.6.18-mm3 and the same kernel with\nthis zonelist caching patch added.  The table also shows the\npercentage improvement the zonelist caching sys time is over\n(lower than) the stock *-mm kernel.\n\n      number     2.6.18-mm3\t   zonelist-cache    delta (\u003c 0 good)\tpercent\n GBs    N  \t------------\t   --------------    ----------------\tsystime\n mem threads   sys user  real\t  sys  user  real     sys  user  real\t better\n  12\t 1     153   24   177\t  151\t 24   176      -2     0    -1\t   1%\n  12\t19\t99   22     8\t   99\t 22\t8\t0     0     0\t   0%\n  12\t37     111   25     6\t  112\t 25\t6\t1     0     0\t  -0%\n  12\t55     115   25     5\t  110\t 23\t5      -5    -2     0\t   4%\n  38\t 1     502   74   576\t  497\t 73   570      -5    -1    -6\t   0%\n  38\t19     426   78    48\t  373\t 76    39     -53    -2    -9\t  12%\n  38\t37     544   83    36\t  547\t 82    36\t3    -1     0\t  -0%\n  38\t55     501   77    23\t  511\t 80    24      10     3     1\t  -1%\n  64\t 1     917  125  1042\t  890\t124  1014     -27    -1   -28\t   2%\n  64\t19    1118  138   119\t  965\t141   103    -153     3   -16\t  13%\n  64\t37    1202  151    94\t 1136\t150    81     -66    -1   -13\t   5%\n  64\t55    1118  141    61\t 1072\t140    58     -46    -1    -3\t   4%\n  90\t 1    1342  177  1519\t 1275\t174  1450     -67    -3   -69\t   4%\n  90\t19    2392  199   192\t 2116\t189   176    -276   -10   -16\t  11%\n  90\t37    3313  238   175\t 2972\t225   145    -341   -13   -30\t  10%\n  90\t55    1948  210   104\t 1843\t213   100    -105     3    -4\t   5%\n\nNotes:\n 1) This test ran a memory hog program that started a specified number N of\n    threads, and had each thread allocate and touch 1/N\u0027th of\n    the total memory to be used in the test run in a single loop,\n    writing a constant word to memory, one store every 4096 bytes.\n    Watching this test during some earlier trial runs, I would see\n    each of these threads sit down on one CPU and stay there, for\n    the remainder of the pass, a different CPU for each thread.\n\n 2) The \u0027real\u0027 column is not comparable to the \u0027sys\u0027 or \u0027user\u0027 columns.\n    The \u0027real\u0027 column is seconds wall clock time elapsed, from beginning\n    to end of that test pass.  The \u0027sys\u0027 and \u0027user\u0027 columns are total\n    CPU seconds spent on that test pass.  For a 19 thread test run,\n    for example, the sum of \u0027sys\u0027 and \u0027user\u0027 could be up to 19 times the\n    number of \u0027real\u0027 elapsed wall clock seconds.\n\n 3) Tests were run on a fresh, single-user boot, to minimize the amount\n    of memory already in use at the start of the test, and to minimize\n    the amount of background activity that might interfere.\n\n 4) Tests were done on a 56 CPU, 28 Node system with 96 GBytes of RAM.\n\n 5) Notice that the \u0027real\u0027 time gets large for the single thread runs, even\n    though the measured \u0027sys\u0027 and \u0027user\u0027 times are modest.  I\u0027m not sure what\n    that means - probably something to do with it being slow for one thread to\n    be accessing memory along ways away.  Perhaps the fake numa system, running\n    ostensibly the same workload, would not show this substantial degradation\n    of \u0027real\u0027 time for one thread on many nodes -- lets hope not.\n\n 6) The high thread count passes (one thread per CPU - on 55 of 56 CPUs)\n    ran quite efficiently, as one might expect.  Each pair of threads needed\n    to allocate and touch the memory on the node the two threads shared, a\n    pleasantly parallizable workload.\n\n 7) The intermediate thread count passes, when asking for alot of memory forcing\n    them to go to a few neighboring nodes, improved the most with this zonelist\n    caching patch.\n\nConclusions:\n * This zonelist cache patch probably makes little difference one way or the\n   other for most workloads on real numa hardware, if those workloads avoid\n   heavy off node allocations.\n * For memory intensive workloads requiring substantial off-node allocations\n   on real numa hardware, this patch improves both kernel and elapsed timings\n   up to ten per-cent.\n * For fake numa systems, I\u0027m optimistic, but will have to leave that up to\n   Rohit Seth to actually test (once I get him a 2.6.18 backport.)\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nCc: Rohit Seth \u003crohitseth@google.com\u003e\nCc: Christoph Lameter \u003cclameter@engr.sgi.com\u003e\nCc: David Rientjes \u003crientjes@cs.washington.edu\u003e\nCc: Paul Menage \u003cmenage@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "3bb1a852ab6c9cdf211a2f4a2f502340c8c38eca",
      "tree": "d08aa652e8eb40c47d5bc37fa1a240b4fb7db029",
      "parents": [
        "2ae88149a27cadf2840e0ab8155bef13be285c03"
      ],
      "author": {
        "name": "Martin Bligh",
        "email": "mbligh@mbligh.org",
        "time": "Sat Oct 28 10:38:24 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sat Oct 28 11:30:50 2006 -0700"
      },
      "message": "[PATCH] vmscan: Fix temp_priority race\n\nThe temp_priority field in zone is racy, as we can walk through a reclaim\npath, and just before we copy it into prev_priority, it can be overwritten\n(say with DEF_PRIORITY) by another reclaimer.\n\nThe same bug is contained in both try_to_free_pages and balance_pgdat, but\nit is fixed slightly differently.  In balance_pgdat, we keep a separate\npriority record per zone in a local array.  In try_to_free_pages there is\nno need to do this, as the priority level is the same for all zones that we\nreclaim from.\n\nImpact of this bug is that temp_priority is copied into prev_priority, and\nsetting this artificially high causes reclaimers to set distress\nartificially low.  They then fail to reclaim mapped pages, when they are,\nin fact, under severe memory pressure (their priority may be as low as 0).\nThis causes the OOM killer to fire incorrectly.\n\nFrom: Andrew Morton \u003cakpm@osdl.org\u003e\n\n__zone_reclaim() isn\u0027t modifying zone-\u003eprev_priority.  But zone-\u003eprev_priority\nis used in the decision whether or not to bring mapped pages onto the inactive\nlist.  Hence there\u0027s a risk here that __zone_reclaim() will fail because\nzone-\u003eprev_priority ir large (ie: low urgency) and lots of mapped pages end up\nstuck on the active list.\n\nFix that up by decreasing (ie making more urgent) zone-\u003eprev_priority as\n__zone_reclaim() scans the zone\u0027s pages.\n\nThis bug perhaps explains why ZONE_RECLAIM_PRIORITY was created.  It should be\npossible to remove that now, and to just start out at DEF_PRIORITY?\n\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Christoph Lameter \u003cclameter@engr.sgi.com\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "7516795739bd53175629b90fab0ad488d7a6a9f7",
      "tree": "1f6b4b7a4f08a25155605b10d5963b7c6ca72e7b",
      "parents": [
        "047a66d4bb24aaf19f41d620f8f0534c2153cd0b"
      ],
      "author": {
        "name": "Andy Whitcroft",
        "email": "apw@shadowen.org",
        "time": "Sat Oct 21 10:24:14 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sat Oct 21 13:35:06 2006 -0700"
      },
      "message": "[PATCH] Reintroduce NODES_SPAN_OTHER_NODES for powerpc\n\nReintroduce NODES_SPAN_OTHER_NODES for powerpc\n\nRevert \"[PATCH] Remove SPAN_OTHER_NODES config definition\"\n    This reverts commit f62859bb6871c5e4a8e591c60befc8caaf54db8c.\nRevert \"[PATCH] mm: remove arch independent NODES_SPAN_OTHER_NODES\"\n    This reverts commit a94b3ab7eab4edcc9b2cb474b188f774c331adf7.\n\nAlso update the comments to indicate that this is still required\nand where its used.\n\nSigned-off-by: Andy Whitcroft \u003capw@shadowen.org\u003e\nCc: Paul Mackerras \u003cpaulus@samba.org\u003e\nCc: Mike Kravetz \u003ckravetz@us.ibm.com\u003e\nCc: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: Will Schmidt \u003cwill_schmidt@vnet.ibm.com\u003e\nCc: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "d5f541ed6e31518508c688912e7464facf253c87",
      "tree": "028d296306e247ca32ec5db398d365dcd70d26b7",
      "parents": [
        "765c4507af71c39aba21006bbd3ec809fe9714ff"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Wed Sep 27 01:50:08 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Sep 27 08:26:13 2006 -0700"
      },
      "message": "[PATCH] Add node to zone for the NUMA case\n\nAdd the node in order to optimize zone_to_nid.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nAcked-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "5b99cd0effaf846240a15441aec459a592577eaf",
      "tree": "355772422c716698762030e6261596c2ba484a37",
      "parents": [
        "e129b5c23c2b471d47f1c5d2b8b193fc2034af43"
      ],
      "author": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Wed Sep 27 01:50:01 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Sep 27 08:26:12 2006 -0700"
      },
      "message": "[PATCH] own header file for struct page\n\nThis moves the definition of struct page from mm.h to its own header file\npage-struct.h.  This is a prereq to fix SetPageUptodate which is broken on\ns390:\n\n#define SetPageUptodate(_page)\n       do {\n               struct page *__page \u003d (_page);\n               if (!test_and_set_bit(PG_uptodate, \u0026__page-\u003eflags))\n                       page_test_and_clear_dirty(_page);\n       } while (0)\n\n_page gets used twice in this macro which can cause subtle bugs.  Using\n__page for the page_test_and_clear_dirty call doesn\u0027t work since it causes\nyet another problem with the page_test_and_clear_dirty macro as well.\n\nIn order to avoid all these problems caused by macros it seems to be a good\nidea to get rid of them and convert them to static inline functions.\nBecause of header file include order it\u0027s necessary to have a seperate\nheader file for the struct page definition.\n\nCc: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nSigned-off-by: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nCc: Roman Zippel \u003czippel@linux-m68k.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "e129b5c23c2b471d47f1c5d2b8b193fc2034af43",
      "tree": "78232266849d0f04b056b0f44554bcb476f0b8e1",
      "parents": [
        "fb01439c5b778d5974a488c5d4fe85e6d0e18a68"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@osdl.org",
        "time": "Wed Sep 27 01:50:00 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Sep 27 08:26:12 2006 -0700"
      },
      "message": "[PATCH] vm: add per-zone writeout counter\n\nThe VM is supposed to minimise the number of pages which get written off the\nLRU (for IO scheduling efficiency, and for high reclaim-success rates).  But\nwe don\u0027t actually have a clear way of showing how true this is.\n\nSo add `nr_vmscan_write\u0027 to /proc/vmstat and /proc/zoneinfo - the number of\npages which have been written by the vm scanner in this zone and globally.\n\nCc: Christoph Lameter \u003cclameter@engr.sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "c713216deebd95d2b0ab38fef8bb2361c0180c2d",
      "tree": "a5a8c61be427e3591811ff712b9ec7ef2f1a1f20",
      "parents": [
        "2bd0cfbde2c0a74e209acbf045f1298cc2f61e01"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Wed Sep 27 01:49:43 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Sep 27 08:26:11 2006 -0700"
      },
      "message": "[PATCH] Introduce mechanism for registering active regions of memory\n\nAt a basic level, architectures define structures to record where active\nranges of page frames are located.  Once located, the code to calculate zone\nsizes and holes in each architecture is very similar.  Some of this zone and\nhole sizing code is difficult to read for no good reason.  This set of patches\neliminates the similar-looking architecture-specific code.\n\nThe patches introduce a mechanism where architectures register where the\nactive ranges of page frames are with add_active_range().  When all areas have\nbeen discovered, free_area_init_nodes() is called to initialise the pgdat and\nzones.  The zone sizes and holes are then calculated in an architecture\nindependent manner.\n\nPatch 1 introduces the mechanism for registering and initialising PFN ranges\nPatch 2 changes ppc to use the mechanism - 139 arch-specific LOC removed\nPatch 3 changes x86 to use the mechanism - 136 arch-specific LOC removed\nPatch 4 changes x86_64 to use the mechanism - 74 arch-specific LOC removed\nPatch 5 changes ia64 to use the mechanism - 52 arch-specific LOC removed\nPatch 6 accounts for mem_map as a memory hole as the pages are not reclaimable.\n\tIt adjusts the watermarks slightly\n\nTony Luck has successfully tested for ia64 on Itanium with tiger_defconfig,\ngensparse_defconfig and defconfig.  Bob Picco has also tested and debugged on\nIA64.  Jack Steiner successfully boot tested on a mammoth SGI IA64-based\nmachine.  These were on patches against 2.6.17-rc1 and release 3 of these\npatches but there have been no ia64-changes since release 3.\n\nThere are differences in the zone sizes for x86_64 as the arch-specific code\nfor x86_64 accounts the kernel image and the starting mem_maps as memory holes\nbut the architecture-independent code accounts the memory as present.\n\nThe big benefit of this set of patches is a sizable reduction of\narchitecture-specific code, some of which is very hairy.  There should be a\ngreater reduction when other architectures use the same mechanisms for zone\nand hole sizing but I lack the hardware to test on.\n\nAdditional credit;\n\tDave Hansen for the initial suggestion and comments on early patches\n\tAndy Whitcroft for reviewing early versions and catching numerous\n\t\terrors\n\tTony Luck for testing and debugging on IA64\n\tBob Picco for fixing bugs related to pfn registration, reviewing a\n\t\tnumber of patch revisions, providing a number of suggestions\n\t\ton future direction and testing heavily\n\tJack Steiner and Robin Holt for testing on IA64 and clarifying\n\t\tissues related to memory holes\n\tYasunori for testing on IA64\n\tAndi Kleen for reviewing and feeding back about x86_64\n\tChristian Kujau for providing valuable information related to ACPI\n\t\tproblems on x86_64 and testing potential fixes\n\nThis patch:\n\nDefine the structure to represent an active range of page frames within a node\nin an architecture independent manner.  Architectures are expected to register\nactive ranges of PFNs using add_active_range(nid, start_pfn, end_pfn) and call\nfree_area_init_nodes() passing the PFNs of the end of each zone.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Bob Picco \u003cbob.picco@hp.com\u003e\nCc: Dave Hansen \u003chaveblue@us.ibm.com\u003e\nCc: Andy Whitcroft \u003capw@shadowen.org\u003e\nCc: Andi Kleen \u003cak@muc.de\u003e\nCc: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nCc: Paul Mackerras \u003cpaulus@samba.org\u003e\nCc: \"Keith Mannthey\" \u003ckmannth@gmail.com\u003e\nCc: \"Luck, Tony\" \u003ctony.luck@intel.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Yasunori Goto \u003cy-goto@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "0ff38490c836dc379ff7ec45b10a15a662f4e5f6",
      "tree": "cb42d5d3cace3c8d12f0b304879039c503807981",
      "parents": [
        "972d1a7b140569084439a81265a0f15b74e924e0"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Mon Sep 25 23:31:52 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Sep 26 08:48:51 2006 -0700"
      },
      "message": "[PATCH] zone_reclaim: dynamic slab reclaim\n\nCurrently one can enable slab reclaim by setting an explicit option in\n/proc/sys/vm/zone_reclaim_mode.  Slab reclaim is then used as a final\noption if the freeing of unmapped file backed pages is not enough to free\nenough pages to allow a local allocation.\n\nHowever, that means that the slab can grow excessively and that most memory\nof a node may be used by slabs.  We have had a case where a machine with\n46GB of memory was using 40-42GB for slab.  Zone reclaim was effective in\ndealing with pagecache pages.  However, slab reclaim was only done during\nglobal reclaim (which is a bit rare on NUMA systems).\n\nThis patch implements slab reclaim during zone reclaim.  Zone reclaim\noccurs if there is a danger of an off node allocation.  At that point we\n\n1. Shrink the per node page cache if the number of pagecache\n   pages is more than min_unmapped_ratio percent of pages in a zone.\n\n2. Shrink the slab cache if the number of the nodes reclaimable slab pages\n   (patch depends on earlier one that implements that counter)\n   are more than min_slab_ratio (a new /proc/sys/vm tunable).\n\nThe shrinking of the slab cache is a bit problematic since it is not node\nspecific.  So we simply calculate what point in the slab we want to reach\n(current per node slab use minus the number of pages that neeed to be\nallocated) and then repeately run the global reclaim until that is\nunsuccessful or we have reached the limit.  I hope we will have zone based\nslab reclaim at some point which will make that easier.\n\nThe default for the min_slab_ratio is 5%\n\nAlso remove the slab option from /proc/sys/vm/zone_reclaim_mode.\n\n[akpm@osdl.org: cleanups]\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "972d1a7b140569084439a81265a0f15b74e924e0",
      "tree": "e86e676e407503ef3d98020a88bb925235f11434",
      "parents": [
        "8417bba4b151346ed475fcc923693c9e3be89063"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Mon Sep 25 23:31:51 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Sep 26 08:48:51 2006 -0700"
      },
      "message": "[PATCH] ZVC: Support NR_SLAB_RECLAIMABLE / NR_SLAB_UNRECLAIMABLE\n\nRemove the atomic counter for slab_reclaim_pages and replace the counter\nand NR_SLAB with two ZVC counter that account for unreclaimable and\nreclaimable slab pages: NR_SLAB_RECLAIMABLE and NR_SLAB_UNRECLAIMABLE.\n\nChange the check in vmscan.c to refer to to NR_SLAB_RECLAIMABLE.  The\nintend seems to be to check for slab pages that could be freed.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "8417bba4b151346ed475fcc923693c9e3be89063",
      "tree": "93d559e32bc76077c1f837aed09a5df56849c610",
      "parents": [
        "d00bcc98d7ec2c87391c9d9e1cca519ef64d33ef"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Mon Sep 25 23:31:51 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Sep 26 08:48:51 2006 -0700"
      },
      "message": "[PATCH] Replace min_unmapped_ratio by min_unmapped_pages in struct zone\n\n*_pages is a better description of the role of the variable.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "19655d3487001d7df0e10e9cbfc27c758b77c2b5",
      "tree": "8d0aaa216bd32bd64e3a9652fd34d40bdb9d1075",
      "parents": [
        "2f6726e54a9410e2e4cee864947c05e954051916"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Mon Sep 25 23:31:19 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Sep 26 08:48:47 2006 -0700"
      },
      "message": "[PATCH] linearly index zone-\u003enode_zonelists[]\n\nI wonder why we need this bitmask indexing into zone-\u003enode_zonelists[]?\n\nWe always start with the highest zone and then include all lower zones\nif we build zonelists.\n\nAre there really cases where we need allocation from ZONE_DMA or\nZONE_HIGHMEM but not ZONE_NORMAL? It seems that the current implementation\nof highest_zone() makes that already impossible.\n\nIf we go linear on the index then gfp_zone() \u003d\u003d highest_zone() and a lot\nof definitions fall by the wayside.\n\nWe can now revert back to the use of gfp_zone() in mempolicy.c ;-)\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "e53ef38d05dd59ed281a35590e4a5b64d8ff4c52",
      "tree": "42e525df84454e89abd6cab8d7983a6a0188b6bb",
      "parents": [
        "fb0e7942bdcbbd2f90e61cb4cfa4fa892a873f8a"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Mon Sep 25 23:31:14 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Sep 26 08:48:46 2006 -0700"
      },
      "message": "[PATCH] reduce MAX_NR_ZONES: make ZONE_HIGHMEM optional\n\nMake ZONE_HIGHMEM optional\n\n- ifdef out code and definitions related to CONFIG_HIGHMEM\n\n- __GFP_HIGHMEM falls back to normal allocations if there is no\n  ZONE_HIGHMEM\n\n- GFP_ZONEMASK becomes 0x01 if there is no DMA32 and no HIGHMEM\n  zone.\n\n[jdike@addtoit.com: build fix]\nSigned-off-by: Jeff Dike \u003cjdike@addtoit.com\u003e\nSigned-off-by: Christoph Lameter \u003cclameter@engr.sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "fb0e7942bdcbbd2f90e61cb4cfa4fa892a873f8a",
      "tree": "71344e9afafbd631f4ac010bc8c48e0b16737299",
      "parents": [
        "2f1b6248682f8b39ca3c7e549dfc216d26c4109b"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Mon Sep 25 23:31:13 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Sep 26 08:48:46 2006 -0700"
      },
      "message": "[PATCH] reduce MAX_NR_ZONES: make ZONE_DMA32 optional\n\nMake ZONE_DMA32 optional\n\n- Add #ifdefs around ZONE_DMA32 specific code and definitions.\n\n- Add CONFIG_ZONE_DMA32 config option and use that for x86_64\n  that alone needs this zone.\n\n- Remove the use of CONFIG_DMA_IS_DMA32 and CONFIG_DMA_IS_NORMAL\n  for ia64 and fix up the way per node ZVCs are calculated.\n\n- Fall back to prior GFP_ZONEMASK of 0x03 if there is no\n  DMA32 zone.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "2f1b6248682f8b39ca3c7e549dfc216d26c4109b",
      "tree": "2340347d10fd0e564fb8527efe3ffbcb216e1906",
      "parents": [
        "98d2b0ebda72fc39cdefd3720d50b9b3ce409085"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Mon Sep 25 23:31:13 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Sep 26 08:48:46 2006 -0700"
      },
      "message": "[PATCH] reduce MAX_NR_ZONES: use enum to define zones, reformat and comment\n\nUse enum for zones and reformat zones dependent information\n\nAdd comments explaning the use of zones and add a zones_t type for zone\nnumbers.\n\nLine up information that will be #ifdefd by the following patches.\n\n[akpm@osdl.org: comment cleanups]\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "df9ecaba3f152d1ea79f2a5e0b87505e03f47590",
      "tree": "b25f855923ef437a0513559425d6c875dbd3e617",
      "parents": [
        "a302eb4e4602d6444ae75a0e516fb2f2c62d6642"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Thu Aug 31 21:27:35 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Sep 01 11:39:08 2006 -0700"
      },
      "message": "[PATCH] ZVC: Scale thresholds depending on the size of the system\n\nThe ZVC counter update threshold is currently set to a fixed value of 32.\nThis patch sets up the threshold depending on the number of processors and\nthe sizes of the zones in the system.\n\nWith the current threshold of 32, I was able to observe slight contention\nwhen more than 130-140 processors concurrently updated the counters.  The\ncontention vanished when I either increased the threshold to 64 or used\nAndrew\u0027s idea of overstepping the interval (see ZVC overstep patch).\n\nHowever, we saw contention again at 220-230 processors.  So we need higher\nvalues for larger systems.\n\nBut the current default is already a bit of an overkill for smaller\nsystems.  Some systems have tiny zones where precision matters.  For\nexample i386 and x86_64 have 16M DMA zones and either 900M ZONE_NORMAL or\nZONE_DMA32.  These are even present on SMP and NUMA systems.\n\nThe patch here sets up a threshold based on the number of processors in the\nsystem and the size of the zone that these counters are used for.  The\nthreshold should grow logarithmically, so we use fls() as an easy\napproximation.\n\nResults of tests on a system with 1024 processors (4TB RAM)\n\nThe following output is from a test allocating 1GB of memory concurrently\non each processor (Forking the process.  So contention on mmap_sem and the\npte locks is not a factor):\n\n                       X                   MIN\nTYPE:               CPUS       WALL       WALL        SYS     USER     TOTCPU\nfork                   1      0.552      0.552      0.540    0.012      0.552\nfork                   4      0.552      0.548      2.164    0.036      2.200\nfork                  16      0.564      0.548      8.812    0.164      8.976\nfork                 128      0.580      0.572     72.204    1.208     73.412\nfork                 256      1.300      0.660    310.400    2.160    312.560\nfork                 512      3.512      0.696   1526.836    4.816   1531.652\nfork                1020     20.024      0.700  17243.176    6.688  17249.863\n\nSo a threshold of 32 is fine up to 128 processors. At 256 processors contention\nbecomes a factor.\n\nOverstepping the counter (earlier patch) improves the numbers a bit:\n\nfork                   4      0.552      0.548      2.164    0.040      2.204\nfork                  16      0.552      0.548      8.640    0.148      8.788\nfork                 128      0.556      0.548     69.676    0.956     70.632\nfork                 256      0.876      0.636    212.468    2.108    214.576\nfork                 512      2.276      0.672    997.324    4.260   1001.584\nfork                1020     13.564      0.680  11586.436    6.088  11592.523\n\nStill contention at 512 and 1020. Contention at 1020 is down by a third.\n256 still has a slight bit of contention.\n\nAfter this patch the counter threshold will be set to 125 which reduces\ncontention significantly:\n\nfork                 128      0.560      0.548     69.776    0.932     70.708\nfork                 256      0.636      0.556    143.460    2.036    145.496\nfork                 512      0.640      0.548    284.244    4.236    288.480\nfork                1020      1.500      0.588   1326.152    8.892   1335.044\n\n[akpm@osdl.org: !SMP build fix]\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "9614634fe6a138fd8ae044950700d2af8d203f97",
      "tree": "9b020c1d36d8625f4048c057058efb2e17c81973",
      "parents": [
        "cb6358eb69d9854f65f2979c0ce9280eee041828"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Mon Jul 03 00:24:13 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Jul 03 15:26:59 2006 -0700"
      },
      "message": "[PATCH] ZVC/zone_reclaim: Leave 1% of unmapped pagecache pages for file I/O\n\nIt turns out that it is advantageous to leave a small portion of unmapped file\nbacked pages if all of a zone\u0027s pages (or almost all pages) are allocated and\nso the page allocator has to go off-node.\n\nThis allows recently used file I/O buffers to stay on the node and\nreduces the times that zone reclaim is invoked if file I/O occurs\nwhen we run out of memory in a zone.\n\nThe problem is that zone reclaim runs too frequently when the page cache is\nused for file I/O (read write and therefore unmapped pages!) alone and we have\nalmost all pages of the zone allocated.  Zone reclaim may remove 32 unmapped\npages.  File I/O will use these pages for the next read/write requests and the\nunmapped pages increase.  After the zone has filled up again zone reclaim will\nremove it again after only 32 pages.  This cycle is too inefficient and there\nare potentially too many zone reclaim cycles.\n\nWith the 1% boundary we may still remove all unmapped pages for file I/O in\nzone reclaim pass.  However.  it will take a large number of read and writes\nto get back to 1% again where we trigger zone reclaim again.\n\nThe zone reclaim 2.6.16/17 does not show this behavior because we have a 30\nsecond timeout.\n\n[akpm@osdl.org: rename the /proc file and the variable]\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "ca889e6c45e0b112cb2ca9d35afc66297519b5d5",
      "tree": "0a5efdec2a61540204d34bcbf56dc691d8f9c391",
      "parents": [
        "bab1846a0582f627f5ec22aa2dc5f4f3e82e8176"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Fri Jun 30 01:55:44 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jun 30 11:25:36 2006 -0700"
      },
      "message": "[PATCH] Use Zoned VM Counters for NUMA statistics\n\nThe numa statistics are really event counters.  But they are per node and\nso we have had special treatment for these counters through additional\nfields on the pcp structure.  We can now use the per zone nature of the\nzoned VM counters to realize these.\n\nThis will shrink the size of the pcp structure on NUMA systems.  We will\nhave some room to add additional per zone counters that will all still fit\nin the same cacheline.\n\n Bits\tPrior pcp size\t  \tSize after patch\tWe can add\n ------------------------------------------------------------------\n 64\t128 bytes (16 words)\t80 bytes (10 words)\t48\n 32\t 76 bytes (19 words)\t56 bytes (14 words)\t8 (64 byte cacheline)\n\t\t\t\t\t\t\t72 (128 byte)\n\nRemove the special statistics for numa and replace them with zoned vm\ncounters.  This has the side effect that global sums of these events now\nshow up in /proc/vmstat.\n\nAlso take the opportunity to move the zone_statistics() function from\npage_alloc.c into vmstat.c.\n\nDiscussions:\nV2 http://marc.theaimsgroup.com/?t\u003d115048227000002\u0026r\u003d1\u0026w\u003d2\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nAcked-by: Andi Kleen \u003cak@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "d2c5e30c9a1420902262aa923794d2ae4e0bc391",
      "tree": "b8c42c189c2bc8dd4b6d808ee8ed2b28dbd70ddd",
      "parents": [
        "fd39fc8561be33065306bdac0e30414e1e8ac8e1"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Fri Jun 30 01:55:41 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jun 30 11:25:36 2006 -0700"
      },
      "message": "[PATCH] zoned vm counters: conversion of nr_bounce to per zone counter\n\nConversion of nr_bounce to a per zone counter\n\nnr_bounce is only used for proc output.  So it could be left as an event\ncounter.  However, the event counters may not be accurate and nr_bounce is\ncategorizing types of pages in a zone.  So we really need this to also be a\nper zone counter.\n\n[akpm@osdl.org: bugfix]\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "fd39fc8561be33065306bdac0e30414e1e8ac8e1",
      "tree": "ae0740716eed3f850a8f7232c61caebe360bb5ae",
      "parents": [
        "ce866b34ae1b7f1ce60234cf65855886ac7e7d30"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Fri Jun 30 01:55:40 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jun 30 11:25:36 2006 -0700"
      },
      "message": "[PATCH] zoned vm counters: conversion of nr_unstable to per zone counter\n\nConversion of nr_unstable to a per zone counter\n\nWe need to do some special modifications to the nfs code since there are\nmultiple cases of disposition and we need to have a page ref for proper\naccounting.\n\nThis converts the last critical page state of the VM and therefore we need to\nremove several functions that were depending on GET_PAGE_STATE_LAST in order\nto make the kernel compile again.  We are only left with event type counters\nin page state.\n\n[akpm@osdl.org: bugfixes]\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "ce866b34ae1b7f1ce60234cf65855886ac7e7d30",
      "tree": "e9a2664f0abc5221b9a92e1417d8e02b94a634c4",
      "parents": [
        "b1e7a8fd854d2f895730e82137400012b509650e"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Fri Jun 30 01:55:40 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jun 30 11:25:35 2006 -0700"
      },
      "message": "[PATCH] zoned vm counters: conversion of nr_writeback to per zone counter\n\nConversion of nr_writeback to per zone counter.\n\nThis removes the last page_state counter from arch/i386/mm/pgtable.c so we\ndrop the page_state from there.\n\n[akpm@osdl.org: bugfix]\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "b1e7a8fd854d2f895730e82137400012b509650e",
      "tree": "9fba87ff6b0146ebd4ee5bc7d5f0c8b037dbb3ad",
      "parents": [
        "df849a1529c106f7460e51479ca78fe07b07dc8c"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Fri Jun 30 01:55:39 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jun 30 11:25:35 2006 -0700"
      },
      "message": "[PATCH] zoned vm counters: conversion of nr_dirty to per zone counter\n\nThis makes nr_dirty a per zone counter.  Looping over all processors is\navoided during writeback state determination.\n\nThe counter aggregation for nr_dirty had to be undone in the NFS layer since\nwe summed up the page counts from multiple zones.  Someone more familiar with\nNFS should probably review what I have done.\n\n[akpm@osdl.org: bugfix]\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "df849a1529c106f7460e51479ca78fe07b07dc8c",
      "tree": "f0e52e4720160aa7540a57715c247dce44584cbc",
      "parents": [
        "9a865ffa34b6117a5e0b67640a084d8c2e198c93"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Fri Jun 30 01:55:38 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jun 30 11:25:35 2006 -0700"
      },
      "message": "[PATCH] zoned vm counters: conversion of nr_pagetables to per zone counter\n\nConversion of nr_page_table_pages to a per zone counter\n\n[akpm@osdl.org: bugfix]\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "9a865ffa34b6117a5e0b67640a084d8c2e198c93",
      "tree": "c295d5a0831df81eeeded3834f32f513b9ae05c7",
      "parents": [
        "34aa1330f9b3c5783d269851d467326525207422"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Fri Jun 30 01:55:38 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jun 30 11:25:35 2006 -0700"
      },
      "message": "[PATCH] zoned vm counters: conversion of nr_slab to per zone counter\n\n- Allows reclaim to access counter without looping over processor counts.\n\n- Allows accurate statistics on how many pages are used in a zone by\n  the slab. This may become useful to balance slab allocations over\n  various zones.\n\n[akpm@osdl.org: bugfix]\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "34aa1330f9b3c5783d269851d467326525207422",
      "tree": "a47db4fa53527ea937dee9e763267ab21865ce11",
      "parents": [
        "f3dbd34460ff54962d3e3244b6bcb7f5295356e6"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Fri Jun 30 01:55:37 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jun 30 11:25:35 2006 -0700"
      },
      "message": "[PATCH] zoned vm counters: zone_reclaim: remove /proc/sys/vm/zone_reclaim_interval\n\nThe zone_reclaim_interval was necessary because we were not able to determine\nhow many unmapped pages exist in a zone.  Therefore we had to scan in\nintervals to figure out if any pages were unmapped.\n\nWith the zoned counters and NR_ANON_PAGES we now know the number of pagecache\npages and the number of mapped pages in a zone.  So we can simply skip the\nreclaim if there is an insufficient number of unmapped pages.  We use\nSWAP_CLUSTER_MAX as the boundary.\n\nDrop all support for /proc/sys/vm/zone_reclaim_interval.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "f3dbd34460ff54962d3e3244b6bcb7f5295356e6",
      "tree": "91caae2b90d684a7640b5da451a9a2ff8a5c8fb8",
      "parents": [
        "bf02cf4b6cf931d060ad5c6ce9b960af6faefd2d"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Fri Jun 30 01:55:36 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jun 30 11:25:35 2006 -0700"
      },
      "message": "[PATCH] zoned vm counters: split NR_ANON_PAGES off from NR_FILE_MAPPED\n\nThe current NR_FILE_MAPPED is used by zone reclaim and the dirty load\ncalculation as the number of mapped pagecache pages.  However, that is not\ntrue.  NR_FILE_MAPPED includes the mapped anonymous pages.  This patch\nseparates those and therefore allows an accurate tracking of the anonymous\npages per zone.\n\nIt then becomes possible to determine the number of unmapped pages per zone\nand we can avoid scanning for unmapped pages if there are none.\n\nAlso it may now be possible to determine the mapped/unmapped ratio in\nget_dirty_limit.  Isnt the number of anonymous pages irrelevant in that\ncalculation?\n\nNote that this will change the meaning of the number of mapped pages reported\nin /proc/vmstat /proc/meminfo and in the per node statistics.  This may affect\nuser space tools that monitor these counters!  NR_FILE_MAPPED works like\nNR_FILE_DIRTY.  It is only valid for pagecache pages.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "347ce434d57da80fd5809c0c836f206a50999c26",
      "tree": "f730d151be77977f594e5cc083a93bbeb4c602cc",
      "parents": [
        "65ba55f500a37272985d071c9bbb35256a2f7c14"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Fri Jun 30 01:55:35 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jun 30 11:25:34 2006 -0700"
      },
      "message": "[PATCH] zoned vm counters: conversion of nr_pagecache to per zone counter\n\nCurrently a single atomic variable is used to establish the size of the page\ncache in the whole machine.  The zoned VM counters have the same method of\nimplementation as the nr_pagecache code but also allow the determination of\nthe pagecache size per zone.\n\nRemove the special implementation for nr_pagecache and make it a zoned counter\nnamed NR_FILE_PAGES.\n\nUpdates of the page cache counters are always performed with interrupts off.\nWe can therefore use the __ variant here.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "65ba55f500a37272985d071c9bbb35256a2f7c14",
      "tree": "e7735326ef2d2dca9d00a6c5ae47e9eb03c7834f",
      "parents": [
        "2244b95a7bcf8d24196f8a3a44187ba5dfff754c"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Fri Jun 30 01:55:34 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jun 30 11:25:34 2006 -0700"
      },
      "message": "[PATCH] zoned vm counters: convert nr_mapped to per zone counter\n\nnr_mapped is important because it allows a determination of how many pages of\na zone are not mapped, which would allow a more efficient means of determining\nwhen we need to reclaim memory in a zone.\n\nWe take the nr_mapped field out of the page state structure and define a new\nper zone counter named NR_FILE_MAPPED (the anonymous pages will be split off\nfrom NR_MAPPED in the next patch).\n\nWe replace the use of nr_mapped in various kernel locations.  This avoids the\nlooping over all processors in try_to_free_pages(), writeback, reclaim (swap +\nzone reclaim).\n\n[akpm@osdl.org: bugfix]\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "2244b95a7bcf8d24196f8a3a44187ba5dfff754c",
      "tree": "771ef8eae45c2794fd73f870109c74d67c28888a",
      "parents": [
        "f6ac2354d791195ca40822b84d73d48a4e8b7f2b"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Fri Jun 30 01:55:33 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jun 30 11:25:34 2006 -0700"
      },
      "message": "[PATCH] zoned vm counters: basic ZVC (zoned vm counter) implementation\n\nPer zone counter infrastructure\n\nThe counters that we currently have for the VM are split per processor.  The\nprocessor however has not much to do with the zone these pages belong to.  We\ncannot tell f.e.  how many ZONE_DMA pages are dirty.\n\nSo we are blind to potentially inbalances in the usage of memory in various\nzones.  F.e.  in a NUMA system we cannot tell how many pages are dirty on a\nparticular node.  If we knew then we could put measures into the VM to balance\nthe use of memory between different zones and different nodes in a NUMA\nsystem.  For example it would be possible to limit the dirty pages per node so\nthat fast local memory is kept available even if a process is dirtying huge\namounts of pages.\n\nAnother example is zone reclaim.  We do not know how many unmapped pages exist\nper zone.  So we just have to try to reclaim.  If it is not working then we\npause and try again later.  It would be better if we knew when it makes sense\nto reclaim unmapped pages from a zone.  This patchset allows the determination\nof the number of unmapped pages per zone.  We can remove the zone reclaim\ninterval with the counters introduced here.\n\nFuthermore the ability to have various usage statistics available will allow\nthe development of new NUMA balancing algorithms that may be able to improve\nthe decision making in the scheduler of when to move a process to another node\nand hopefully will also enable automatic page migration through a user space\nprogram that can analyse the memory load distribution and then rebalance\nmemory use in order to increase performance.\n\nThe counter framework here implements differential counters for each processor\nin struct zone.  The differential counters are consolidated when a threshold\nis exceeded (like done in the current implementation for nr_pageache), when\nslab reaping occurs or when a consolidation function is called.\n\nConsolidation uses atomic operations and accumulates counters per zone in the\nzone structure and also globally in the vm_stat array.  VM functions can\naccess the counts by simply indexing a global or zone specific array.\n\nThe arrangement of counters in an array also simplifies processing when output\nhas to be generated for /proc/*.\n\nCounters can be updated by calling inc/dec_zone_page_state or\n_inc/dec_zone_page_state analogous to *_page_state.  The second group of\nfunctions can be called if it is known that interrupts are disabled.\n\nSpecial optimized increment and decrement functions are provided.  These can\navoid certain checks and use increment or decrement instructions that an\narchitecture may provide.\n\nWe also add a new CONFIG_DMA_IS_NORMAL that signifies that an architecture can\ndo DMA to all memory and therefore ZONE_NORMAL will not be populated.  This is\nonly currently set for IA64 SGI SN2 and currently only affects\nnode_page_state().  In the best case node_page_state can be reduced to\nretrieving a single counter for the one zone on the node.\n\n[akpm@osdl.org: cleanups]\n[akpm@osdl.org: export vm_stat[] for filesystems]\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "30c253e6da655d73eb8bfe2adca9b8f4d82fb81e",
      "tree": "97c49ad364855b95ce52d97a62d176a077ff2a85",
      "parents": [
        "ddc2e812d592457747c4367fb73edcaa8e1e49ff"
      ],
      "author": {
        "name": "Andy Whitcroft",
        "email": "apw@shadowen.org",
        "time": "Fri Jun 23 02:03:41 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jun 23 07:42:51 2006 -0700"
      },
      "message": "[PATCH] sparsemem: record nid during memory present\n\nRecord the node id as we mark sections for instantiation.  Use this nid\nduring instantiation to direct allocations.\n\nSigned-off-by: Andy Whitcroft \u003capw@shadowen.org\u003e\nCc: Mike Kravetz \u003ckravetz@us.ibm.com\u003e\nCc: Dave Hansen \u003chaveblue@us.ibm.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Bob Picco \u003cbob.picco@hp.com\u003e\nCc: Jack Steiner \u003csteiner@sgi.com\u003e\nCc: Yasunori Goto \u003cy-goto@jp.fujitsu.com\u003e\nCc: Martin Bligh \u003cmbligh@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "718127cc3170454f4aa274fdd2f1e01574fecd66",
      "tree": "8b42a48248d6508b8369718deef6b1af3ea82dbf",
      "parents": [
        "86356ab147669bd3bcb2149fd9561d1280835c24"
      ],
      "author": {
        "name": "Yasunori Goto",
        "email": "y-goto@jp.fujitsu.com",
        "time": "Fri Jun 23 02:03:10 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jun 23 07:42:46 2006 -0700"
      },
      "message": "[PATCH] wait_table and zonelist initializing for memory hotadd: add return code for init_current_empty_zone\n\nWhen add_zone() is called against empty zone (not populated zone), we have to\ninitialize the zone which didn\u0027t initialize at boot time.  But,\ninit_currently_empty_zone() may fail due to allocation of wait table.  So,\nthis patch is to catch its error code.\n\nChanges against wait_table is in the next patch.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Yasunori Goto \u003cy-goto@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "02b694dea473ad3db1e2d1b14c1fef8fbd92e5e6",
      "tree": "a39451192b589486d70f4d989f9b7f19ef889db0",
      "parents": [
        "3c5a87f476bed45616e7e543dcaea4440c77bf93"
      ],
      "author": {
        "name": "Yasunori Goto",
        "email": "y-goto@jp.fujitsu.com",
        "time": "Fri Jun 23 02:03:08 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jun 23 07:42:46 2006 -0700"
      },
      "message": "[PATCH] wait_table and zonelist initializing for memory hotadd: change name of wait_table_size()\n\nThis is just to rename from wait_table_size() to wait_table_hash_nr_entries().\n\nSigned-off-by: Yasunori Goto \u003cy-goto@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "cee4cca740d209bcb4b9857baa2253d5ba4e3fbe",
      "tree": "88a23004393ea4a32cad79839479c8e653e401d6",
      "parents": [
        "2edc322d420a4cec8dbc184a1220ecd7fa9f8ae6",
        "9348f0de2d2b541b4ba64fb1f4efee9710a3d731"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Jun 20 15:10:08 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Jun 20 15:10:08 2006 -0700"
      },
      "message": "Merge git://git.infradead.org/hdrcleanup-2.6\n\n* git://git.infradead.org/hdrcleanup-2.6: (63 commits)\n  [S390] __FD_foo definitions.\n  Switch to __s32 types in joystick.h instead of C99 types for consistency.\n  Add \u003csys/types.h\u003e to headers included for userspace in \u003clinux/input.h\u003e\n  Move inclusion of \u003clinux/compat.h\u003e out of user scope in asm-x86_64/mtrr.h\n  Remove struct fddi_statistics from user view in \u003clinux/if_fddi.h\u003e\n  Move user-visible parts of drivers/s390/crypto/z90crypt.h to include/asm-s390\n  Revert include/media changes: Mauro says those ioctls are only used in-kernel(!)\n  Include \u003clinux/types.h\u003e and use __uXX types in \u003clinux/cramfs_fs.h\u003e\n  Use __uXX types in \u003clinux/i2o_dev.h\u003e, include \u003clinux/ioctl.h\u003e too\n  Remove private struct dx_hash_info from public view in \u003clinux/ext3_fs.h\u003e\n  Include \u003clinux/types.h\u003e and use __uXX types in \u003clinux/affs_hardblocks.h\u003e\n  Use __uXX types in \u003clinux/divert.h\u003e for struct divert_blk et al.\n  Use __u32 for elf_addr_t in \u003casm-powerpc/elf.h\u003e, not u32. It\u0027s user-visible.\n  Remove PPP_FCS from user view in \u003clinux/ppp_defs.h\u003e, remove __P mess entirely\n  Use __uXX types in user-visible structures in \u003clinux/nbd.h\u003e\n  Don\u0027t use \u0027u32\u0027 in user-visible struct ip_conntrack_old_tuple.\n  Use __uXX types for S390 DASD volume label definitions which are user-visible\n  S390 BIODASDREADCMB ioctl should use __u64 not u64 type.\n  Remove unneeded inclusion of \u003clinux/time.h\u003e from \u003clinux/ufs_fs.h\u003e\n  Fix private integer types used in V4L2 ioctls.\n  ...\n\nManually resolve conflict in include/linux/mtd/physmap.h\n"
    },
    {
      "commit": "93ff66bf1ef29881dffd6fdc344555dab03cdb42",
      "tree": "61c995a742fa0e2e116e679e5cdd130edf98dd46",
      "parents": [
        "4ae9538dd02824257e8e72c053c69ad6680aba04"
      ],
      "author": {
        "name": "Ralf Baechle",
        "email": "ralf@linux-mips.org",
        "time": "Sun Jun 04 02:51:29 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Jun 05 12:29:16 2006 -0700"
      },
      "message": "[PATCH] Sparsemem build fix\n\nFrom: Ralf Baechle \u003cralf@linux-mips.org\u003e\n\n\u003clinux/mmzone.h\u003e uses PAGE_SIZE, PAGE_SHIFT from \u003casm/page.h\u003e without\nincluding that header itself.  For some sparsemem configurations this may\nresult in build errors like:\n\n  CC      init/initramfs.o\nIn file included from include/linux/gfp.h:4,\n                 from include/linux/slab.h:15,\n                 from include/linux/percpu.h:4,\n                 from include/linux/rcupdate.h:41,\n                 from include/linux/dcache.h:10,\n                 from include/linux/fs.h:226,\n                 from init/initramfs.c:2:\ninclude/linux/mmzone.h:498:22: warning: \"PAGE_SHIFT\" is not defined\nIn file included from include/linux/gfp.h:4,\n                 from include/linux/slab.h:15,\n                 from include/linux/percpu.h:4,\n                 from include/linux/rcupdate.h:41,\n                 from include/linux/dcache.h:10,\n                 from include/linux/fs.h:226,\n                 from init/initramfs.c:2:\ninclude/linux/mmzone.h:526: error: `PAGE_SIZE\u0027 undeclared here (not in a function)\ninclude/linux/mmzone.h: In function `__pfn_to_section\u0027:\ninclude/linux/mmzone.h:573: error: `PAGE_SHIFT\u0027 undeclared (first use in this function)\ninclude/linux/mmzone.h:573: error: (Each undeclared identifier is reported only once\ninclude/linux/mmzone.h:573: error: for each function it appears in.)\ninclude/linux/mmzone.h: In function `pfn_valid\u0027:\ninclude/linux/mmzone.h:578: error: `PAGE_SHIFT\u0027 undeclared (first use in this function)\nmake[1]: *** [init/initramfs.o] Error 1\nmake: *** [init] Error 2\n\nSigned-off-by: Ralf Baechle \u003cralf@linux-mips.org\u003e\nSeems-reasonable-to: Andy Whitcroft \u003capw@shadowen.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "66643de455c27973ac31ad6de9f859d399916842",
      "tree": "7ebed7f051879007d4b11d6aaa9e65a1bcb0b08f",
      "parents": [
        "2c23d62abb820e19c54012520f08a198c2233a85",
        "387e2b0439026aa738a9edca15a57e5c0bcb4dfc"
      ],
      "author": {
        "name": "David Woodhouse",
        "email": "dwmw2@infradead.org",
        "time": "Wed May 24 09:22:21 2006 +0100"
      },
      "committer": {
        "name": "David Woodhouse",
        "email": "dwmw2@infradead.org",
        "time": "Wed May 24 09:22:21 2006 +0100"
      },
      "message": "Merge branch \u0027master\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6\n\nConflicts:\n\n\tinclude/asm-powerpc/unistd.h\n\tinclude/asm-sparc/unistd.h\n\tinclude/asm-sparc64/unistd.h\n\nSigned-off-by: David Woodhouse \u003cdwmw2@infradead.org\u003e\n"
    },
    {
      "commit": "e984bb43f7450312ba66fe0e67a99efa6be3b246",
      "tree": "54c86240172136fc81c773f71cd70eda54fed6f2",
      "parents": [
        "ae57a856429dd932c547530df1b234eb7e642297"
      ],
      "author": {
        "name": "Bob Picco",
        "email": "bob.picco@hp.com",
        "time": "Sat May 20 15:00:31 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun May 21 12:59:22 2006 -0700"
      },
      "message": "[PATCH] Align the node_mem_map endpoints to a MAX_ORDER boundary\n\nAndy added code to buddy allocator which does not require the zone\u0027s\nendpoints to be aligned to MAX_ORDER.  An issue is that the buddy allocator\nrequires the node_mem_map\u0027s endpoints to be MAX_ORDER aligned.  Otherwise\n__page_find_buddy could compute a buddy not in node_mem_map for partial\nMAX_ORDER regions at zone\u0027s endpoints.  page_is_buddy will detect that\nthese pages at endpoints are not PG_buddy (they were zeroed out by bootmem\nallocator and not part of zone).  Of course the negative here is we could\nwaste a little memory but the positive is eliminating all the old checks\nfor zone boundary conditions.\n\nSPARSEMEM won\u0027t encounter this issue because of MAX_ORDER size constraint\nwhen SPARSEMEM is configured.  ia64 VIRTUAL_MEM_MAP doesn\u0027t need the logic\neither because the holes and endpoints are handled differently.  This\nleaves checking alloc_remap and other arches which privately allocate for\nnode_mem_map.\n\nSigned-off-by: Bob Picco \u003cbob.picco@hp.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Dave Hansen \u003chaveblue@us.ibm.com\u003e\nCc: Andy Whitcroft \u003capw@shadowen.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "62c4f0a2d5a188f73a94f2cb8ea0dba3e7cf0a7f",
      "tree": "e85ca2d0dd43f90dccf758338764c3caa55f333f",
      "parents": [
        "089f26d5e31b7bf42a9a8fefec08b30cd27f4b0e"
      ],
      "author": {
        "name": "David Woodhouse",
        "email": "dwmw2@infradead.org",
        "time": "Wed Apr 26 12:56:16 2006 +0100"
      },
      "committer": {
        "name": "David Woodhouse",
        "email": "dwmw2@infradead.org",
        "time": "Wed Apr 26 12:56:16 2006 +0100"
      },
      "message": "Don\u0027t include linux/config.h from anywhere else in include/\n\nSigned-off-by: David Woodhouse \u003cdwmw2@infradead.org\u003e\n"
    },
    {
      "commit": "95144c788dc01b6a0ff2c9c2222e37ffdab358b8",
      "tree": "9f7f186575bb717de39cedaf42bf02a94c11b664",
      "parents": [
        "ae0f15fb91274e67d78836d38c99ec363df33073"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Mon Mar 27 01:16:02 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Mar 27 08:44:48 2006 -0800"
      },
      "message": "[PATCH] uninline zone helpers\n\nHelper functions for for_each_online_pgdat/for_each_zone look too big to be\ninlined.  Speed of these helper macro itself is not very important.  (inner\nloops are tend to do more work than this)\n\nThis patch make helper function to be out-of-lined.\n\n\tinline\t\tout-of-line\n.text   005c0680        005bf6a0\n\n005c0680 - 005bf6a0 \u003d FE0 \u003d 4Kbytes.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "ae0f15fb91274e67d78836d38c99ec363df33073",
      "tree": "bfaa065faf772c42e1875c9e5f4b000cf4b1d241",
      "parents": [
        "3571761fe49d960bb720c2308ffb9401f0a5e161"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Mon Mar 27 01:16:01 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Mar 27 08:44:48 2006 -0800"
      },
      "message": "[PATCH] for_each_online_pgdat: remove pgdat_list\n\nBy using for_each_online_pgdat(), pgdat_list is not necessary now.  This patch\nremoves it.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "8357f8695d58b50fbf2bd507b4b0fc2cd1e43bd6",
      "tree": "8f7326f570ee80d129add7356c7b5c44fb995447",
      "parents": [
        "a0140c1d85637ee5f4ea7c78f066e3611a6a79dc"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Mon Mar 27 01:15:57 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Mar 27 08:44:47 2006 -0800"
      },
      "message": "[PATCH] define for_each_online_pgdat\n\nThis patch defines for_each_online_pgdat() as a replacement of\nfor_each_pgdat()\n\nNow, online nodes are managed by node_online_map.  But for_each_pgdat()\nuses pgdat_link to iterate over all nodes(pgdat).  This means management\nstructure for online pgdat is duplicated.\n\nI think using node_online_map for for_each_pgdat() is simple and sane\nrather ather than pgdat_link.  New macro is named as\nfor_each_online_pgdat().  Following patch will fix callers of\nfor_each_pgdat().\n\nThe bootmem allocater uses for_each_pgdat() before pgdat initialization.  I\ndon\u0027t think it\u0027s sane.  Following patch will fix it.\n\nSigned-off-by: Yasunori Goto     \u003cy-goto@jp.fujitsu.com\u003e\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "a0140c1d85637ee5f4ea7c78f066e3611a6a79dc",
      "tree": "7a52892e57ff7a97a3aabf920891b68ca8bf578a",
      "parents": [
        "0ecd702bcb924d5fb7f687e09986f688336ac896"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Mon Mar 27 01:15:55 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Mar 27 08:44:47 2006 -0800"
      },
      "message": "[PATCH] remove zone_mem_map\n\nThis patch removes zone_mem_map.\n\npfn_to_page uses pgdat, page_to_pfn uses zone.  page_to_pfn can use pgdat\ninstead of zone, which is only one user of zone_mem_map.  By modifing it,\nwe can remove zone_mem_map.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Dave Hansen \u003chaveblue@us.ibm.com\u003e\nCc: Christoph Lameter \u003cchristoph@lameter.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "a117e66ed45ac0569c039ea60bd7a9a61e031858",
      "tree": "292367ab930f83c418c34d4c46f95717e5e6394e",
      "parents": [
        "b06be912a3ad68c69dba0ed6e92723140020e392"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Mon Mar 27 01:15:25 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Mar 27 08:44:44 2006 -0800"
      },
      "message": "[PATCH] unify pfn_to_page: generic functions\n\nThere are 3 memory models, FLATMEM, DISCONTIGMEM, SPARSEMEM.\nEach arch has its own page_to_pfn(), pfn_to_page() for each models.\nBut most of them can use the same arithmetic.\n\nThis patch adds asm-generic/memory_model.h, which includes generic\npage_to_pfn(), pfn_to_page() definitions for each memory model.\n\nWhen CONFIG_OUT_OF_LINE_PFN_TO_PAGE\u003dy, out-of-line functions are\nused instead of macro. This is enabled by some archs and  reduces\ntext size.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: Andi Kleen \u003cak@muc.de\u003e\nCc: Paul Mackerras \u003cpaulus@samba.org\u003e\nCc: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nCc: Richard Henderson \u003crth@twiddle.net\u003e\nCc: Ivan Kokshaysky \u003cink@jurassic.park.msu.ru\u003e\nCc: Russell King \u003crmk@arm.linux.org.uk\u003e\nCc: Ian Molton \u003cspyro@f2s.com\u003e\nCc: Mikael Starvik \u003cstarvik@axis.com\u003e\nCc: David Howells \u003cdhowells@redhat.com\u003e\nCc: Yoshinori Sato \u003cysato@users.sourceforge.jp\u003e\nCc: Hirokazu Takata \u003ctakata.hirokazu@renesas.com\u003e\nCc: Ralf Baechle \u003cralf@linux-mips.org\u003e\nCc: Kyle McMartin \u003ckyle@mcmartin.ca\u003e\nCc: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nCc: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nCc: Paul Mundt \u003clethal@linux-sh.org\u003e\nCc: Kazumoto Kojima \u003ckkojima@rr.iij4u.or.jp\u003e\nCc: Richard Curnow \u003crc@rc0.org.uk\u003e\nCc: William Lee Irwin III \u003cwli@holomorphy.com\u003e\nCc: \"David S. Miller\" \u003cdavem@davemloft.net\u003e\nCc: Jeff Dike \u003cjdike@addtoit.com\u003e\nCc: Paolo \u0027Blaisorblade\u0027 Giarrusso \u003cblaisorblade@yahoo.it\u003e\nCc: Miles Bader \u003cuclinux-v850@lsi.nec.co.jp\u003e\nCc: Chris Zankel \u003cchris@zankel.net\u003e\nCc: \"Luck, Tony\" \u003ctony.luck@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "ce2ea89ba101d976907128441ba3aca72a8804b9",
      "tree": "f08184cdd2c70eff0018c49ceee94a0b25b3b5f0",
      "parents": [
        "79046ae07ae21245520ca0aab985ee6678a879f8"
      ],
      "author": {
        "name": "Andy Whitcroft",
        "email": "apw@shadowen.org",
        "time": "Wed Feb 01 03:05:27 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Feb 01 08:53:15 2006 -0800"
      },
      "message": "[PATCH] GFP_ZONETYPES: calculate from GFP_ZONEMASK\n\nGFP_ZONETYPES calculate from GFP_ZONEMASK\n\nGFP_ZONETYPES\u0027s value is directly related to the value of GFP_ZONEMASK.  It\ntakes one of two forms depending whether the top bit of GFP_ZONEMASK is a\n\u0027loner\u0027.  Supply both forms, enabling the loner.\n\nSigned-off-by: Andy Whitcroft \u003capw@shadowen.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "79046ae07ae21245520ca0aab985ee6678a879f8",
      "tree": "8a980747ab9eeaa3407e2aa2366a4c6e95dee9d0",
      "parents": [
        "42c722d4cb4022e56ff200f3f5a58c0dfd7edac6"
      ],
      "author": {
        "name": "Andy Whitcroft",
        "email": "apw@shadowen.org",
        "time": "Wed Feb 01 03:05:26 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Feb 01 08:53:14 2006 -0800"
      },
      "message": "[PATCH] GFP_ZONETYPES: add commentry on how to calculate\n\nGFP_ZONETYPES define using GFP_ZONEMASK and add commentry\n\nAdd commentry explaining the optimisation that we can apply to GFP_ZONETYPES\nwhen the leftmost bit is a \u0027loaner\u0027, it can only be set in isolation.\n\nSigned-off-by: Andy Whitcroft \u003capw@shadowen.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "9eeff2395e3cfd05c9b2e6074ff943a34b0c5c21",
      "tree": "20160098ec6ed8738cfecfc5f81181ad22b44e60",
      "parents": [
        "f1fd1067ece574ab56e4a70878b9a5a1ed4c3c42"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Wed Jan 18 17:42:31 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Jan 18 19:20:17 2006 -0800"
      },
      "message": "[PATCH] Zone reclaim: Reclaim logic\n\nSome bits for zone reclaim exists in 2.6.15 but they are not usable.  This\npatch fixes them up, removes unused code and makes zone reclaim usable.\n\nZone reclaim allows the reclaiming of pages from a zone if the number of\nfree pages falls below the watermarks even if other zones still have enough\npages available.  Zone reclaim is of particular importance for NUMA\nmachines.  It can be more beneficial to reclaim a page than taking the\nperformance penalties that come with allocating a page on a remote zone.\n\nZone reclaim is enabled if the maximum distance to another node is higher\nthan RECLAIM_DISTANCE, which may be defined by an arch.  By default\nRECLAIM_DISTANCE is 20.  20 is the distance to another node in the same\ncomponent (enclosure or motherboard) on IA64.  The meaning of the NUMA\ndistance information seems to vary by arch.\n\nIf zone reclaim is not successful then no further reclaim attempts will\noccur for a certain time period (ZONE_RECLAIM_INTERVAL).\n\nThis patch was discussed before. See\n\nhttp://marc.theaimsgroup.com/?l\u003dlinux-kernel\u0026m\u003d113519961504207\u0026w\u003d2\nhttp://marc.theaimsgroup.com/?l\u003dlinux-kernel\u0026m\u003d113408418232531\u0026w\u003d2\nhttp://marc.theaimsgroup.com/?l\u003dlinux-kernel\u0026m\u003d113389027420032\u0026w\u003d2\nhttp://marc.theaimsgroup.com/?l\u003dlinux-kernel\u0026m\u003d113380938612205\u0026w\u003d2\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "1f6818b90dbb887261c616a318733703ed526f0a",
      "tree": "7737ceb132fc62339fc1aecc8288e924c63abc87",
      "parents": [
        "8b1bde93175182d7c11d9a1230b2210a5815e747"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@suse.de",
        "time": "Wed Jan 11 22:42:26 2006 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Jan 11 19:01:11 2006 -0800"
      },
      "message": "[PATCH] x86_64: Minor GFP_DMA32 comment fix\n\nPretty obvious\n\nSigned-off-by: Andi Kleen \u003cak@suse.de\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "22fc6eccbf4ce4eb6265e6ada7b50a7b9cc57d05",
      "tree": "3887dc6f1eeb658d773be037971b98d6f5fb3dd7",
      "parents": [
        "6d524aed1f50b2b1d5b4ad5a4e2fe3f38106d0a6"
      ],
      "author": {
        "name": "Ravikiran G Thirumalai",
        "email": "kiran@scalex86.org",
        "time": "Sun Jan 08 01:01:27 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Jan 08 20:13:38 2006 -0800"
      },
      "message": "[PATCH] Change maxaligned_in_smp alignemnt macros to internodealigned_in_smp macros\n\n____cacheline_maxaligned_in_smp is currently used to align critical structures\nand avoid false sharing.  It uses per-arch L1_CACHE_SHIFT_MAX and people find\nL1_CACHE_SHIFT_MAX useless.\n\nHowever, we have been using ____cacheline_maxaligned_in_smp to align\nstructures on the internode cacheline size.  As per Andi\u0027s suggestion,\nfollowing patch kills ____cacheline_maxaligned_in_smp and introduces\nINTERNODE_CACHE_SHIFT, which defaults to L1_CACHE_SHIFT for all arches.\nArches needing L3/Internode cacheline alignment can define\nINTERNODE_CACHE_SHIFT in the arch asm/cache.h.  Patch replaces\n____cacheline_maxaligned_in_smp with ____cacheline_internodealigned_in_smp\n\nWith this patch, L1_CACHE_SHIFT_MAX can be killed\n\nSigned-off-by: Ravikiran Thirumalai \u003ckiran@scalex86.org\u003e\nSigned-off-by: Shai Fultheim \u003cshai@scalex86.org\u003e\nSigned-off-by: Andi Kleen \u003cak@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "8ad4b1fb8205340dba16b63467bb23efc27264d6",
      "tree": "9f5c237ead93976e5454c5da5d3bba350a2419c5",
      "parents": [
        "9d0243bca345d5ce25d3f4b74b7facb3a6df1232"
      ],
      "author": {
        "name": "Rohit Seth",
        "email": "rohit.seth@intel.com",
        "time": "Sun Jan 08 01:00:40 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Jan 08 20:12:40 2006 -0800"
      },
      "message": "[PATCH] Make high and batch sizes of per_cpu_pagelists configurable\n\nAs recently there has been lot of traffic on the right values for batch and\nhigh water marks for per_cpu_pagelists.  This patch makes these two\nvariables configurable through /proc interface.\n\nA new tunable /proc/sys/vm/percpu_pagelist_fraction is added.  This entry\ncontrols the fraction of pages at most in each zone that are allocated for\neach per cpu page list.  The min value for this is 8.  It means that we\ndon\u0027t allow more than 1/8th of pages in each zone to be allocated in any\nsingle per_cpu_pagelist.\n\nThe batch value of each per cpu pagelist is also updated as a result.  It\nis set to pcp-\u003ehigh/4.  The upper limit of batch is (PAGE_SHIFT * 8)\n\nSigned-off-by: Rohit Seth \u003crohit.seth@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "f3fe65122da05e1cd4c9140340d96ea2f95d0c49",
      "tree": "65f2bcdb0a9665123b5083d3aea7dae483593cbc",
      "parents": [
        "80bfed904c690642db9d4178950735299160950b"
      ],
      "author": {
        "name": "Con Kolivas",
        "email": "kernel@kolivas.org",
        "time": "Fri Jan 06 00:11:15 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jan 06 08:33:28 2006 -0800"
      },
      "message": "[PATCH] mm: add populated_zone() helper\n\nThere are numerous places we check whether a zone is populated or not.\n\nProvide a helper function to check for populated zones and convert all\nchecks for zone-\u003epresent_pages.\n\nSigned-off-by: Con Kolivas \u003ckernel@kolivas.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "9328b8faae922e52073785ed6c1eaa8565648a0e",
      "tree": "065034bc534a4997197d26acf1774725159e4e65",
      "parents": [
        "7756b9e4e321c3c83c7aa5b9532d3e7fd7ddeb4a"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "nickpiggin@yahoo.com.au",
        "time": "Fri Jan 06 00:11:10 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jan 06 08:33:26 2006 -0800"
      },
      "message": "[PATCH] mm: dma32 zone statistics\n\nAdd dma32 to zone statistics.  Also attempt to arrange struct page_state a\nbit better (visually).\n\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Andi Kleen \u003cak@muc.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "2d92c5c9150a2a9ca3dc25da58d5042e17a96b6a",
      "tree": "7a559b29019f2391095f958d9546a4453839ec43",
      "parents": [
        "13e7444b0ec59f96d81a4e8c379d5f38fc5f2cc1"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "nickpiggin@yahoo.com.au",
        "time": "Fri Jan 06 00:10:59 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jan 06 08:33:25 2006 -0800"
      },
      "message": "[PATCH] mm: remove pcp low\n\nstruct per_cpu_pages.low is useless.  Remove it.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Hugh Dickins \u003chugh@veritas.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "161599ff39a3c3cdea0a1be05ac53accd2c45cdd",
      "tree": "9943c93c97dcf042f5ec7c5fab011be655d8212a",
      "parents": [
        "2bdaf115b1c364d89484b59d5b937973f1c5a5c3"
      ],
      "author": {
        "name": "Andy Whitcroft",
        "email": "apw@shadowen.org",
        "time": "Fri Jan 06 00:10:54 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jan 06 08:33:24 2006 -0800"
      },
      "message": "[PATCH] sparsemem: provide pfn_to_nid\n\nBefore SPARSEMEM is initialised we cannot provide an efficient pfn_to_nid()\nimplmentation; before initialisation is complete we use early_pfn_to_nid()\nto provide location information.  Until recently there was no non-init user\nof this functionality.  Provide a post init pfn_to_nid() implementation.\n\nNote that this implmentation assumes that the pfn passed has been validated\nwith pfn_valid().  The current single user of this function already has\nthis check.\n\nSigned-off-by: Andy Whitcroft \u003capw@shadowen.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "2bdaf115b1c364d89484b59d5b937973f1c5a5c3",
      "tree": "184d595f1969e5488da6c78f8387f239e8d49cac",
      "parents": [
        "03b00ebcc804180829d513df9e92e5fe8f72aacf"
      ],
      "author": {
        "name": "Andy Whitcroft",
        "email": "apw@shadowen.org",
        "time": "Fri Jan 06 00:10:53 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jan 06 08:33:24 2006 -0800"
      },
      "message": "[PATCH] flatmem split out memory model\n\nThere are three places we define pfn_to_nid().  Two in linux/mmzone.h and one\nin asm/mmzone.h.  These in essence represent the three memory models.  The\ndefinition in linux/mmzone.h under !NEED_MULTIPLE_NODES is both the FLATMEM\ndefinition and the optimisation for single NUMA nodes; the one under SPARSEMEM\nis the NUMA sparsemem one; the one in asm/mmzone.h under DISCONTIGMEM is the\ndiscontigmem one.  This is not in the least bit obvious, particularly the\nconnection between the non-NUMA optimisations and the memory models.\n\nTwo patches:\n\nflatmem-split-out-memory-model: simplifies the selection of pfn_to_nid()\nimplementations.  The selection is based primarily off the memory model\nselected.  Optimisations for non-NUMA are applied where needed.\n\nsparse-provide-pfn_to_nid: implement pfn_to_nid() for SPARSEMEM\n\nThis patch:\n\npfn_to_nid is memory model specific\n\nThe pfn_to_nid() call is memory model specific.  It represents the locality\nidentifier for the memory passed.  Classically this would be a NUMA node,\nbut not a chunk of memory under DISCONTIGMEM.\n\nThe SPARSEMEM and FLATMEM memory model non-NUMA versions of pfn_to_nid()\nare folded together under NEED_MULTIPLE_NODES, while DISCONTIGMEM has its\nown optimisation.  This is all very confusing.\n\nThis patch splits out each implementation of pfn_to_nid() so that we can\nsee them and the optimisations to each.\n\nSigned-off-by: Andy Whitcroft \u003capw@shadowen.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "a94b3ab7eab4edcc9b2cb474b188f774c331adf7",
      "tree": "96636969fa4a9e0b79c98f81cbcd726c5d3834a5",
      "parents": [
        "d5afa6dcf74c0efb60ce07c63d0a727be93c67c5"
      ],
      "author": {
        "name": "Mike Kravetz",
        "email": "kravetz@us.ibm.com",
        "time": "Fri Jan 06 00:10:51 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jan 06 08:33:24 2006 -0800"
      },
      "message": "[PATCH] mm: remove arch independent NODES_SPAN_OTHER_NODES\n\nThe NODES_SPAN_OTHER_NODES config option was created so that DISCONTIGMEM\ncould handle pSeries numa layouts.  However, support for DISCONTIGMEM has\nbeen replaced by SPARSEMEM on powerpc.  As a result, this config option and\nsupporting code is no longer needed.\n\nI have already sent a patch to Paul that removes the option from powerpc\nspecific code.  This removes the arch independent piece.  Doesn\u0027t really\nmatter which is applied first.\n\nSigned-off-by: Mike Kravetz \u003ckravetz@us.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "d5afa6dcf74c0efb60ce07c63d0a727be93c67c5",
      "tree": "5cc602e4c3c6ebbf0d8879676b67c237f3abb026",
      "parents": [
        "9f3fd602aef96c2a490e3bfd669d06475aeba8d8"
      ],
      "author": {
        "name": "Andy Whitcroft",
        "email": "apw@shadowen.org",
        "time": "Fri Jan 06 00:10:50 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jan 06 08:33:24 2006 -0800"
      },
      "message": "[PATCH] mm: pfn_to_pgdat not used in common code\n\npfn_to_pgdat() isn\u0027t used in common code.  Remove definition.\n\nSigned-off-by: Andy Whitcroft \u003capw@shadowen.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "9f3fd602aef96c2a490e3bfd669d06475aeba8d8",
      "tree": "3f16d0d4ff7cbb8943c37391a0ea5fa9e3424dbb",
      "parents": [
        "6bda666a03f063968833760c5bb5c13062ab9291"
      ],
      "author": {
        "name": "Andy Whitcroft",
        "email": "apw@shadowen.org",
        "time": "Fri Jan 06 00:10:50 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jan 06 08:33:23 2006 -0800"
      },
      "message": "[PATCH] mm: kvaddr_to_nid not used in common code\n\nkvaddr_to_nid() isn\u0027t used in common code nor in i386 code.  Remove these\ndefinitions.\n\nSigned-off-by: Andy Whitcroft \u003capw@shadowen.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "ac3461ad632e86e7debd871776683c05ef3ba4c6",
      "tree": "98ea9272b3e9d05499f1a4fbf10e998f6d476fa5",
      "parents": [
        "4b4a27dff4e2d4cc2eac1cde31aede834a966a48"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Nov 22 19:39:30 2005 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Nov 22 19:39:30 2005 -0800"
      },
      "message": "Fix up GFP_ZONEMASK for GFP_DMA32 usage\n\nThere was some confusion about the different zone usage, this should fix\nup the resulting mess in the GFP zonemask handling.\n\nThe different zone usage is still confusing (it\u0027s very easy to mix up\nthe individual zone numbers with the GFP zone _list_ numbers), so we\nmight want to clean up some of this in the future, but in the meantime\nthis should fix the actual problems.\n\nAcked-by: Andi Kleen \u003cak@suse.de\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "4060994c3e337b40e0f6fa8ce2cc178e021baf3d",
      "tree": "980297c1747ca89354bc879cc5d17903eacb19e2",
      "parents": [
        "0174f72f848dfe7dc7488799776303c81b181b16",
        "d3ee871e63d0a0c70413dc0aa5534b8d6cd6ec37"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Nov 14 19:56:02 2005 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Nov 14 19:56:02 2005 -0800"
      },
      "message": "Merge x86-64 update from Andi\n"
    },
    {
      "commit": "69d81fcde7797342417591ba7affb372b9c86eae",
      "tree": "97fbc73fd20f8ebc313b2bc41367a8efe36c2c3d",
      "parents": [
        "50895c5d76e15d8af480eff1aaab5770cabbc2c2"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@suse.de",
        "time": "Sat Nov 05 17:25:53 2005 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Nov 14 19:55:14 2005 -0800"
      },
      "message": "[PATCH] x86_64: Speed up numa_node_id by putting it directly into the PDA\n\nNot go from the CPU number to an mapping array.\nMode number is often used now in fast paths.\n\nThis also adds a generic numa_node_id to all the topology includes\n\nSuggested by Eric Dumazet\n\nSigned-off-by: Andi Kleen \u003cak@suse.de\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "07808b74e7dab1aa385e698795875337d72daf7d",
      "tree": "3b593c31e6e58364f4001105bfeebefa94708209",
      "parents": [
        "1dff7f3db5f045ccbfeca5bb00b0958a78501557"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@suse.de",
        "time": "Sat Nov 05 17:25:53 2005 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Nov 14 19:55:14 2005 -0800"
      },
      "message": "[PATCH] x86_64: Remove obsolete ARCH_HAS_ATOMIC_UNSIGNED and page_flags_t\n\nHas been introduced for x86-64 at some point to save memory\nin struct page, but has been obsolete for some time. Just\nremove it.\n\nSigned-off-by: Andi Kleen \u003cak@suse.de\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "a2f1b424900715ed9d1699c3bb88a434a2b42bc0",
      "tree": "8ef440f840656365166ff2d71aa445c224c53546",
      "parents": [
        "56720367cd89ef5265f39da2d674c5b92cd4cd87"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@suse.de",
        "time": "Sat Nov 05 17:25:53 2005 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Nov 14 19:55:13 2005 -0800"
      },
      "message": "[PATCH] x86_64: Add 4GB DMA32 zone\n\nAdd a new 4GB GFP_DMA32 zone between the GFP_DMA and GFP_NORMAL zones.\n\nAs a bit of historical background: when the x86-64 port\nwas originally designed we had some discussion if we should\nuse a 16MB DMA zone like i386 or a 4GB DMA zone like IA64 or\nboth. Both was ruled out at this point because it was in early\n2.4 when VM is still quite shakey and had bad troubles even\ndealing with one DMA zone.  We settled on the 16MB DMA zone mainly\nbecause we worried about older soundcards and the floppy.\n\nBut this has always caused problems since then because\ndevice drivers had trouble getting enough DMA able memory. These days\nthe VM works much better and the wide use of NUMA has proven\nit can deal with many zones successfully.\n\nSo this patch adds both zones.\n\nThis helps drivers who need a lot of memory below 4GB because\ntheir hardware is not accessing more (graphic drivers - proprietary\nand free ones, video frame buffer drivers, sound drivers etc.).\nPreviously they could only use IOMMU+16MB GFP_DMA, which\nwas not enough memory.\n\nAnother common problem is that hardware who has full memory\naddressing for \u003e4GB misses it for some control structures in memory\n(like transmit rings or other metadata).  They tended to allocate memory\nin the 16MB GFP_DMA or the IOMMU/swiotlb then using pci_alloc_consistent,\nbut that can tie up a lot of precious 16MB GFPDMA/IOMMU/swiotlb memory\n(even on AMD systems the IOMMU tends to be quite small) especially if you have\nmany devices.  With the new zone pci_alloc_consistent can just put\nthis stuff into memory below 4GB which works better.\n\nOne argument was still if the zone should be 4GB or 2GB. The main\nmotivation for 2GB would be an unnamed not so unpopular hardware\nraid controller (mostly found in older machines from a particular four letter\ncompany) who has a strange 2GB restriction in firmware. But\nthat one works ok with swiotlb/IOMMU anyways, so it doesn\u0027t really\nneed GFP_DMA32. I chose 4GB to be compatible with IA64 and because\nit seems to be the most common restriction.\n\nThe new zone is so far added only for x86-64.\n\nFor other architectures who don\u0027t set up this\nnew zone nothing changes. Architectures can set a compatibility\ndefine in Kconfig CONFIG_DMA_IS_DMA32 that will define GFP_DMA32\nas GFP_DMA. Otherwise it\u0027s a nop because on 32bit architectures\nit\u0027s normally not needed because GFP_NORMAL (\u003d0) is DMA able\nenough.\n\nOne problem is still that GFP_DMA means different things on different\narchitectures. e.g. some drivers used to have #ifdef ia64  use GFP_DMA\n(trusting it to be 4GB) #elif __x86_64__ (use other hacks like\nthe swiotlb because 16MB is not enough) ... . This was quite\nugly and is now obsolete.\n\nThese should be now converted to use GFP_DMA32 unconditionally. I haven\u0027t done\nthis yet. Or best only use pci_alloc_consistent/dma_alloc_coherent\nwhich will use GFP_DMA32 transparently.\n\nSigned-off-by: Andi Kleen \u003cak@suse.de\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "7fb1d9fca5c6e3b06773b69165a73f3fb786b8ee",
      "tree": "21f8b7deeb8a7e1197edfccc610365a12d60322e",
      "parents": [
        "51c6f666fceb3184eeff045dad4432b602cd648e"
      ],
      "author": {
        "name": "Rohit Seth",
        "email": "rohit.seth@intel.com",
        "time": "Sun Nov 13 16:06:43 2005 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Nov 13 18:14:12 2005 -0800"
      },
      "message": "[PATCH] mm: __alloc_pages cleanup\n\nClean up of __alloc_pages.\n\nRestoration of previous behaviour, plus further cleanups by introducing an\n\u0027alloc_flags\u0027, removing the last of should_reclaim_zone.\n\nSigned-off-by: Rohit Seth \u003crohit.seth@intel.com\u003e\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "bdc8cb984576ab5b550c8b24c6fa111a873503e3",
      "tree": "f94548988874caa10d770e6e65bc50c925abf825",
      "parents": [
        "208d54e5513c0c02d85af0990901354c74364d5c"
      ],
      "author": {
        "name": "Dave Hansen",
        "email": "haveblue@us.ibm.com",
        "time": "Sat Oct 29 18:16:53 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sat Oct 29 21:40:44 2005 -0700"
      },
      "message": "[PATCH] memory hotplug locking: zone span seqlock\n\nSee the \"fixup bad_range()\" patch for more information, but this actually\ncreates a the lock to protect things making assumptions about a zone\u0027s size\nstaying constant at runtime.\n\nSigned-off-by: Dave Hansen \u003chaveblue@us.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "208d54e5513c0c02d85af0990901354c74364d5c",
      "tree": "83922f1d4a83f19bffcbff299044f421bd7e9c73",
      "parents": [
        "c6a57e19e464db118dc4ab9cfe9e9748c6d630a0"
      ],
      "author": {
        "name": "Dave Hansen",
        "email": "haveblue@us.ibm.com",
        "time": "Sat Oct 29 18:16:52 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sat Oct 29 21:40:44 2005 -0700"
      },
      "message": "[PATCH] memory hotplug locking: node_size_lock\n\npgdat-\u003enode_size_lock is basically only neeeded in one place in the normal\ncode: show_mem(), which is the arch-specific sysrq-m printing function.\n\nStrictly speaking, the architectures not doing memory hotplug do no need this\nlocking in show_mem().  However, they are all included for completeness.  This\nshould also make any future consolidation of all of the implementations a\nlittle more straightforward.\n\nThis lock is also held in the sparsemem code during a memory removal, as\nsections are invalidated.  This is the place there pfn_valid() is made false\nfor a memory area that\u0027s being removed.  The lock is only required when doing\npfn_valid() operations on memory which the user does not already have a\nreference on the page, such as in show_mem().\n\nSigned-off-by: Dave Hansen \u003chaveblue@us.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "4ca644d970bf2542623228a4624af356d20ca267",
      "tree": "1040782e8799d5531a5ee1d5f1143e26e8781e9d",
      "parents": [
        "ed8ece2ec8d3c2031b1a1a0737568bb0d49454e0"
      ],
      "author": {
        "name": "Dave Hansen",
        "email": "haveblue@us.ibm.com",
        "time": "Sat Oct 29 18:16:51 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sat Oct 29 21:40:44 2005 -0700"
      },
      "message": "[PATCH] memory hotplug prep: __section_nr helper\n\nA little helper that we use in the hotplug code.\n\nSigned-off-by: Dave Hansen \u003chaveblue@us.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "260b23674fdb570f3235ce55892246bef1c24c2a",
      "tree": "471e7b546cbf1f7ee4a165e5bd9a2de0770e53be",
      "parents": [
        "c4cdd038318863e912e9b992489f61497f98b442"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Oct 21 03:22:44 2005 -0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Oct 28 08:16:51 2005 -0700"
      },
      "message": "[PATCH] gfp_t: the rest\n\nzone handling, mapping-\u003eflags handling\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "28ae55c98e4d16eac9a05a8a259d7763ef3aeb18",
      "tree": "0ac0a08d88a692b9b9934344b5e439058d71772a",
      "parents": [
        "3e347261a80b57df792ab9464b5f0ed59add53a8"
      ],
      "author": {
        "name": "Dave Hansen",
        "email": "haveblue@us.ibm.com",
        "time": "Sat Sep 03 15:54:29 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@evo.osdl.org",
        "time": "Mon Sep 05 00:05:38 2005 -0700"
      },
      "message": "[PATCH] sparsemem extreme: hotplug preparation\n\nThis splits up sparse_index_alloc() into two pieces.  This is needed\nbecause we\u0027ll allocate the memory for the second level in a different place\nfrom where we actually consume it to keep the allocation from happening\nunderneath a lock\n\nSigned-off-by: Dave Hansen \u003chaveblue@us.ibm.com\u003e\nSigned-off-by: Bob Picco \u003cbob.picco@hp.com\u003e\nCc: Andy Whitcroft \u003capw@shadowen.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "3e347261a80b57df792ab9464b5f0ed59add53a8",
      "tree": "047b35e0f9ec82b3beeff882a9af6292a500097c",
      "parents": [
        "802f192e4a600f7ef84ca25c8b818c8830acef5a"
      ],
      "author": {
        "name": "Bob Picco",
        "email": "bob.picco@hp.com",
        "time": "Sat Sep 03 15:54:28 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@evo.osdl.org",
        "time": "Mon Sep 05 00:05:38 2005 -0700"
      },
      "message": "[PATCH] sparsemem extreme implementation\n\nWith cleanups from Dave Hansen \u003chaveblue@us.ibm.com\u003e\n\nSPARSEMEM_EXTREME makes mem_section a one dimensional array of pointers to\nmem_sections.  This two level layout scheme is able to achieve smaller\nmemory requirements for SPARSEMEM with the tradeoff of an additional shift\nand load when fetching the memory section.  The current SPARSEMEM\nimplementation is a one dimensional array of mem_sections which is the\ndefault SPARSEMEM configuration.  The patch attempts isolates the\nimplementation details of the physical layout of the sparsemem section\narray.\n\nSPARSEMEM_EXTREME requires bootmem to be functioning at the time of\nmemory_present() calls.  This is not always feasible, so architectures\nwhich do not need it may allocate everything statically by using\nSPARSEMEM_STATIC.\n\nSigned-off-by: Andy Whitcroft \u003capw@shadowen.org\u003e\nSigned-off-by: Bob Picco \u003cbob.picco@hp.com\u003e\nSigned-off-by: Dave Hansen \u003chaveblue@us.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "802f192e4a600f7ef84ca25c8b818c8830acef5a",
      "tree": "51e9a6ed164e6a2d8741af510c3954ad79bf19af",
      "parents": [
        "0216f86dafb389c0ad97529fd45e64e883298cfd"
      ],
      "author": {
        "name": "Bob Picco",
        "email": "bob.picco@hp.com",
        "time": "Sat Sep 03 15:54:26 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@evo.osdl.org",
        "time": "Mon Sep 05 00:05:38 2005 -0700"
      },
      "message": "[PATCH] SPARSEMEM EXTREME\n\nA new option for SPARSEMEM is ARCH_SPARSEMEM_EXTREME.  Architecture\nplatforms with a very sparse physical address space would likely want to\nselect this option.  For those architecture platforms that don\u0027t select the\noption, the code generated is equivalent to SPARSEMEM currently in -mm.\nI\u0027ll be posting a patch on ia64 ml which uses this new SPARSEMEM feature.\n\nARCH_SPARSEMEM_EXTREME makes mem_section a one dimensional array of\npointers to mem_sections.  This two level layout scheme is able to achieve\nsmaller memory requirements for SPARSEMEM with the tradeoff of an\nadditional shift and load when fetching the memory section.  The current\nSPARSEMEM -mm implementation is a one dimensional array of mem_sections\nwhich is the default SPARSEMEM configuration.  The patch attempts isolates\nthe implementation details of the physical layout of the sparsemem section\narray.\n\nARCH_SPARSEMEM_EXTREME depends on 64BIT and is by default boolean false.\n\nI\u0027ve boot tested under aim load ia64 configured for ARCH_SPARSEMEM_EXTREME.\n I\u0027ve also boot tested a 4 way Opteron machine with !ARCH_SPARSEMEM_EXTREME\nand tested with aim.\n\nSigned-off-by: Andy Whitcroft \u003capw@shadowen.org\u003e\nSigned-off-by: Bob Picco \u003cbob.picco@hp.com\u003e\nSigned-off-by: Dave Hansen \u003chaveblue@us.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "29751f6991e845f7d002a6ae520bf996b38c8dcd",
      "tree": "f76c4c660ac4d204436f68851979343d2a9ba224",
      "parents": [
        "641c767389b19859a45e6de46d8e18cd935bdb60"
      ],
      "author": {
        "name": "Andy Whitcroft",
        "email": "apw@shadowen.org",
        "time": "Thu Jun 23 00:08:00 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Thu Jun 23 09:45:05 2005 -0700"
      },
      "message": "[PATCH] sparsemem hotplug base\n\nMake sparse\u0027s initalization be accessible at runtime.  This allows sparse\nmappings to be created after boot in a hotplug situation.\n\nThis patch is separated from the previous one just to give an indication how\nmuch of the sparse infrastructure is *just* for hotplug memory.\n\nThe section_mem_map doesn\u0027t really store a pointer.  It stores something that\nis convenient to do some math against to get a pointer.  It isn\u0027t valid to\njust do *section_mem_map, so I don\u0027t think it should be stored as a pointer.\n\nThere are a couple of things I\u0027d like to store about a section.  First of all,\nthe fact that it is !NULL does not mean that it is present.  There could be\nsuch a combination where section_mem_map *is* NULL, but the math gets you\nproperly to a real mem_map.  So, I don\u0027t think that check is safe.\n\nSince we\u0027re storing 32-bit-aligned structures, we have a few bits in the\nbottom of the pointer to play with.  Use one bit to encode whether there\u0027s\nreally a mem_map there, and the other one to tell whether there\u0027s a valid\nsection there.  We need to distinguish between the two because sometimes\nthere\u0027s a gap between when a section is discovered to be present and when we\ncan get the mem_map for it.\n\nSigned-off-by: Dave Hansen \u003chaveblue@us.ibm.com\u003e\nSigned-off-by: Andy Whitcroft \u003capw@shadowen.org\u003e\nSigned-off-by: Jack Steiner \u003csteiner@sgi.com\u003e\nSigned-off-by: Bob Picco \u003cbob.picco@hp.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "641c767389b19859a45e6de46d8e18cd935bdb60",
      "tree": "b3ac95aaea213823c226b181b8a301e4ae95bd9d",
      "parents": [
        "05b79bdcb48c18cd9b580c39e3efb9a1ab078151"
      ],
      "author": {
        "name": "Andy Whitcroft",
        "email": "apw@shadowen.org",
        "time": "Thu Jun 23 00:07:59 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Thu Jun 23 09:45:05 2005 -0700"
      },
      "message": "[PATCH] sparsemem swiss cheese numa layouts\n\nThe part of the sparsemem patch which modifies memmap_init_zone() has recently\nbecome a problem.  It changes behavior so that there is a call to\npfn_to_page() for each individual page inside of a node\u0027s range:\nnode_start_pfn through node_end_pfn.  It used to simply do this once, at the\nbeginning of the node, but having sparsemem\u0027s non-contiguous mem_map[]s inside\nof a node made it necessary to change.\n\nMike Kravetz recently wrote a patch which made the NUMA code accept some new\nkinds of layouts.  The system\u0027s memory was laid out like this, with node 0\u0027s\nmemory in two pieces: one before and one after node 1\u0027s memory:\n\n\tNode 0: +++++     +++++\n\tNode 1:      +++++\n\nPrevious behavior before Mike\u0027s patch was to assign nodes like this:\n\n\tNode 0: 00000     XXXXX\n\tNode 1:      11111\n\nWhere the \u0027X\u0027 areas were simply thrown away.  The new behavior was to make the\npg_data_t span node 0 across all of its areas, including areas that are really\nnode 1\u0027s: Node 0: 000000000000000 Node 1: 11111\n\nThis wastes a little bit of mem_map space, but ends up being OK, and more\nfully utilizes the system\u0027s memory.  memmap_init_zone() initializes all of the\n\"struct page\"s for node 0, even for the \"hole\", but those never get used,\nbecause there is no pfn_to_page() that resolves to those pages.  However, only\ncalling pfn_to_page() once, memmap_init_zone() always uses the pages that were\nallocated for node0-\u003enode_mem_map because:\n\n\tstruct page *start \u003d pfn_to_page(start_pfn);\n\t// effectively start \u003d \u0026node-\u003enode_mem_map[0]\n\tfor (page \u003d start; page \u003c (start + size); page++) {\n\t\tinit_page_here();...\n\t\tpage++;\n\t}\n\nSlow, and wasteful, but generally harmless.\n\nBut, modify that to call pfn_to_page() for each loop iteration (like sparsemem\ndoes):\n\n\tfor (pfn \u003d start_pfn; pfn \u003c \u003c (start_pfn + size); pfn++++) {\n\t\tpage \u003d pfn_to_page(pfn);\n\t}\n\nAnd you end up trying to initialize node 1\u0027s pages too early, along with bogus\ndata from node 0.  This patch checks for those weird layouts and declines to\ntouch the pages, making the more frequent pfn_to_page() calls OK to do.\n\nSigned-off-by: Dave Hansen \u003chaveblue@us.ibm.com\u003e\nSigned-off-by: Andy Whitcroft \u003capw@shadowen.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "d41dee369bff3b9dcb6328d4d822926c28cc2594",
      "tree": "a0405f3b7af3ebca21838a7d427bd75a067bf850",
      "parents": [
        "af705362ab6018071310c5fcd436a6b457517d5f"
      ],
      "author": {
        "name": "Andy Whitcroft",
        "email": "apw@shadowen.org",
        "time": "Thu Jun 23 00:07:54 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Thu Jun 23 09:45:04 2005 -0700"
      },
      "message": "[PATCH] sparsemem memory model\n\nSparsemem abstracts the use of discontiguous mem_maps[].  This kind of\nmem_map[] is needed by discontiguous memory machines (like in the old\nCONFIG_DISCONTIGMEM case) as well as memory hotplug systems.  Sparsemem\nreplaces DISCONTIGMEM when enabled, and it is hoped that it can eventually\nbecome a complete replacement.\n\nA significant advantage over DISCONTIGMEM is that it\u0027s completely separated\nfrom CONFIG_NUMA.  When producing this patch, it became apparent in that NUMA\nand DISCONTIG are often confused.\n\nAnother advantage is that sparse doesn\u0027t require each NUMA node\u0027s ranges to be\ncontiguous.  It can handle overlapping ranges between nodes with no problems,\nwhere DISCONTIGMEM currently throws away that memory.\n\nSparsemem uses an array to provide different pfn_to_page() translations for\neach SECTION_SIZE area of physical memory.  This is what allows the mem_map[]\nto be chopped up.\n\nIn order to do quick pfn_to_page() operations, the section number of the page\nis encoded in page-\u003eflags.  Part of the sparsemem infrastructure enables\nsharing of these bits more dynamically (at compile-time) between the\npage_zone() and sparsemem operations.  However, on 32-bit architectures, the\nnumber of bits is quite limited, and may require growing the size of the\npage-\u003eflags type in certain conditions.  Several things might force this to\noccur: a decrease in the SECTION_SIZE (if you want to hotplug smaller areas of\nmemory), an increase in the physical address space, or an increase in the\nnumber of used page-\u003eflags.\n\nOne thing to note is that, once sparsemem is present, the NUMA node\ninformation no longer needs to be stored in the page-\u003eflags.  It might provide\nspeed increases on certain platforms and will be stored there if there is\nroom.  But, if out of room, an alternate (theoretically slower) mechanism is\nused.\n\nThis patch introduces CONFIG_FLATMEM.  It is used in almost all cases where\nthere used to be an #ifndef DISCONTIG, because SPARSEMEM and DISCONTIGMEM\noften have to compile out the same areas of code.\n\nSigned-off-by: Andy Whitcroft \u003capw@shadowen.org\u003e\nSigned-off-by: Dave Hansen \u003chaveblue@us.ibm.com\u003e\nSigned-off-by: Martin Bligh \u003cmbligh@aracnet.com\u003e\nSigned-off-by: Adrian Bunk \u003cbunk@stusta.de\u003e\nSigned-off-by: Yasunori Goto \u003cy-goto@jp.fujitsu.com\u003e\nSigned-off-by: Bob Picco \u003cbob.picco@hp.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "b159d43fbf7eaaac6ecc647f51cf4257332db47b",
      "tree": "968d856c1bd80b47c76d27da272d95bcaf97aa78",
      "parents": [
        "368a0a3afad08069b2679ecaff80fc18c10a6e2a"
      ],
      "author": {
        "name": "Andy Whitcroft",
        "email": "apw@shadowen.org",
        "time": "Thu Jun 23 00:07:52 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Thu Jun 23 09:45:04 2005 -0700"
      },
      "message": "[PATCH] generify early_pfn_to_nid\n\nProvide a default implementation for early_pfn_to_nid returning node 0.  Allow\narchitectures to override this with their own implementation out of\nasm/mmzone.h.\n\nSigned-off-by: Andy Whitcroft \u003capw@shadowen.org\u003e\nSigned-off-by: Dave Hansen \u003chaveblue@us.ibm.com\u003e\nSigned-off-by: Martin Bligh \u003cmbligh@aracnet.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "93b7504e3e6c1d98586854806e51bea329ea3aa9",
      "tree": "7b0d6f3a6214960daf3136f8c418178405521c07",
      "parents": [
        "0e19243e9a19ef8e5994852671bd06bb51630811"
      ],
      "author": {
        "name": "Dave Hansen",
        "email": "haveblue@us.ibm.com",
        "time": "Thu Jun 23 00:07:47 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Thu Jun 23 09:45:03 2005 -0700"
      },
      "message": "[PATCH] Introduce new Kconfig option for NUMA or DISCONTIG\n\nThere is some confusion that arose when working on SPARSEMEM patch between\nwhat is needed for DISCONTIG vs. NUMA.\n\nMultiple pg_data_t\u0027s are needed for DISCONTIGMEM or NUMA, independently.\nAll of the current NUMA implementations require an implementation of\nDISCONTIG.  Because of this, quite a lot of code which is really needed for\nNUMA is actually under DISCONTIG #ifdefs.  For SPARSEMEM, we changed some\nof these #ifdefs to CONFIG_NUMA, but that broke the DISCONTIG\u003dy and NUMA\u003dn\ncase.\n\nIntroducing this new NEED_MULTIPLE_NODES config option allows code that is\nneeded for both NUMA or DISCONTIG to be separated out from code that is\nspecific to DISCONTIG.\n\nOne great advantage of this approach is that it doesn\u0027t require every\narchitecture to be converted over.  All of the current implementations\nshould \"just work\", only the ones implementing SPARSEMEM will have to be\nfixed up.\n\nThe change to free_area_init() makes it work inside, or out of the new\nconfig option.\n\nSigned-off-by: Dave Hansen \u003chaveblue@us.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "348f8b6c4837a07304d2f72b11ce8d96588065e0",
      "tree": "f4c6c332b2c327630b284598325dff2f44e6c9cf",
      "parents": [
        "6f167ec721108c9282d54424516a12c805e3c306"
      ],
      "author": {
        "name": "Dave Hansen",
        "email": "haveblue@us.ibm.com",
        "time": "Thu Jun 23 00:07:40 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Thu Jun 23 09:45:01 2005 -0700"
      },
      "message": "[PATCH] sparsemem base: reorganize page-\u003eflags bit operations\n\nGenerify the value fields in the page_flags.  The aim is to allow the location\nand size of these fields to be varied.  Additionally we want to move away from\nfixed allocations per field whilst still enforcing the overall bit utilisation\nlimits.  We rely on the compiler to spot and optimise the accessor functions.\n\nSigned-off-by: Andy Whitcroft \u003capw@shadowen.org\u003e\nSigned-off-by: Dave Hansen \u003chaveblue@us.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "408fde81c1bff15c875a3618481e93a01dcc79ea",
      "tree": "89b173c5cccd69a17aa64bff8916c54bdcb2d6fe",
      "parents": [
        "29c31a3bf257e0723423f1f0f9afd1b840434c75"
      ],
      "author": {
        "name": "Dave Hansen",
        "email": "haveblue@us.ibm.com",
        "time": "Thu Jun 23 00:07:37 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Thu Jun 23 09:45:00 2005 -0700"
      },
      "message": "[PATCH] remove non-DISCONTIG use of pgdat-\u003enode_mem_map\n\nThis patch effectively eliminates direct use of pgdat-\u003enode_mem_map outside\nof the DISCONTIG code.  On a flat memory system, these fields aren\u0027t\ncurrently used, neither are they on a sparsemem system.\n\nThere was also a node_mem_map(nid) macro on many architectures.  Its use\nalong with the use of -\u003enode_mem_map itself was not consistent.  It has\nbeen removed in favor of two new, more explicit, arch-independent macros:\n\n\tpgdat_page_nr(pgdat, pagenr)\n\tnid_page_nr(nid, pagenr)\n\nI called them \"pgdat\" and \"nid\" because we overload the term \"node\" to mean\n\"NUMA node\", \"DISCONTIG node\" or \"pg_data_t\" in very confusing ways.  I\nbelieve the newer names are much clearer.\n\nThese macros can be overridden in the sparsemem case with a theoretically\nslower operation using node_start_pfn and pfn_to_page(), instead.  We could\nmake this the only behavior if people want, but I don\u0027t want to change too\nmuch at once.  One thing at a time.\n\nThis patch removes more code than it adds.\n\nCompile tested on alpha, alpha discontig, arm, arm-discontig, i386, i386\ngeneric, NUMAQ, Summit, ppc64, ppc64 discontig, and x86_64.  Full list\nhere: http://sr71.net/patches/2.6.12/2.6.12-rc1-mhp2/configs/\n\nBoot tested on NUMAQ, x86 SMP and ppc64 power4/5 LPARs.\n\nSigned-off-by: Dave Hansen \u003chaveblue@us.ibm.com\u003e\nSigned-off-by: Martin J. Bligh \u003cmbligh@aracnet.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "e7c8d5c9955a4d2e88e36b640563f5d6d5aba48a",
      "tree": "f04f7b0d08cbc46d2f190a85904a3dd696dc6e88",
      "parents": [
        "63551ae0feaaa23807ebea60de1901564bbef32e"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "christoph@lameter.com",
        "time": "Tue Jun 21 17:14:47 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Tue Jun 21 18:46:16 2005 -0700"
      },
      "message": "[PATCH] node local per-cpu-pages\n\nThis patch modifies the way pagesets in struct zone are managed.\n\nEach zone has a per-cpu array of pagesets.  So any particular CPU has some\nmemory in each zone structure which belongs to itself.  Even if that CPU is\nnot local to that zone.\n\nSo the patch relocates the pagesets for each cpu to the node that is nearest\nto the cpu instead of allocating the pagesets in the (possibly remote) target\nzone.  This means that the operations to manage pages on remote zone can be\ndone with information available locally.\n\nWe play a macro trick so that non-NUMA pmachines avoid the additional\npointer chase on the page allocator fastpath.\n\nAIM7 benchmark on a 32 CPU SGI Altix\n\nw/o patches:\nTasks    jobs/min  jti  jobs/min/task      real       cpu\n    1      484.68  100       484.6769     12.01      1.97   Fri Mar 25 11:01:42 2005\n  100    27140.46   89       271.4046     21.44    148.71   Fri Mar 25 11:02:04 2005\n  200    30792.02   82       153.9601     37.80    296.72   Fri Mar 25 11:02:42 2005\n  300    32209.27   81       107.3642     54.21    451.34   Fri Mar 25 11:03:37 2005\n  400    34962.83   78        87.4071     66.59    588.97   Fri Mar 25 11:04:44 2005\n  500    31676.92   75        63.3538     91.87    742.71   Fri Mar 25 11:06:16 2005\n  600    36032.69   73        60.0545     96.91    885.44   Fri Mar 25 11:07:54 2005\n  700    35540.43   77        50.7720    114.63   1024.28   Fri Mar 25 11:09:49 2005\n  800    33906.70   74        42.3834    137.32   1181.65   Fri Mar 25 11:12:06 2005\n  900    34120.67   73        37.9119    153.51   1325.26   Fri Mar 25 11:14:41 2005\n 1000    34802.37   74        34.8024    167.23   1465.26   Fri Mar 25 11:17:28 2005\n\nwith slab API changes and pageset patch:\n\nTasks    jobs/min  jti  jobs/min/task      real       cpu\n    1      485.00  100       485.0000     12.00      1.96   Fri Mar 25 11:46:18 2005\n  100    28000.96   89       280.0096     20.79    150.45   Fri Mar 25 11:46:39 2005\n  200    32285.80   79       161.4290     36.05    293.37   Fri Mar 25 11:47:16 2005\n  300    40424.15   84       134.7472     43.19    438.42   Fri Mar 25 11:47:59 2005\n  400    39155.01   79        97.8875     59.46    590.05   Fri Mar 25 11:48:59 2005\n  500    37881.25   82        75.7625     76.82    730.19   Fri Mar 25 11:50:16 2005\n  600    39083.14   78        65.1386     89.35    872.79   Fri Mar 25 11:51:46 2005\n  700    38627.83   77        55.1826    105.47   1022.46   Fri Mar 25 11:53:32 2005\n  800    39631.94   78        49.5399    117.48   1169.94   Fri Mar 25 11:55:30 2005\n  900    36903.70   79        41.0041    141.94   1310.78   Fri Mar 25 11:57:53 2005\n 1000    36201.23   77        36.2012    160.77   1458.31   Fri Mar 25 12:00:34 2005\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Shobhit Dayal \u003cshobhit@calsoftinc.com\u003e\nSigned-off-by: Shai Fultheim \u003cShai@Scalex86.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "1e7e5a9048b30c57ba1ddaa6cdf59b21b65cde99",
      "tree": "26eb9c483718ca1a0fad23597c0dfd3a69e9f080",
      "parents": [
        "0c35bbadc59f5ed105c34471143eceb4c0dd9c95"
      ],
      "author": {
        "name": "Martin Hicks",
        "email": "mort@sgi.com",
        "time": "Tue Jun 21 17:14:43 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Tue Jun 21 18:46:14 2005 -0700"
      },
      "message": "[PATCH] VM: rate limit early reclaim\n\nWhen early zone reclaim is turned on the LRU is scanned more frequently when a\nzone is low on memory.  This limits when the zone reclaim can be called by\nskipping the scan if another thread (either via kswapd or sync reclaim) is\nalready reclaiming from the zone.\n\nSigned-off-by: Martin Hicks \u003cmort@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "753ee728964e5afb80c17659cc6c3a6fd0a42fe0",
      "tree": "41c9a7700d0858c1f77c5bdaba97e5b636f69b06",
      "parents": [
        "bfbb38fb808ac23ef44472d05d9bb36edfb49ed0"
      ],
      "author": {
        "name": "Martin Hicks",
        "email": "mort@sgi.com",
        "time": "Tue Jun 21 17:14:41 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Tue Jun 21 18:46:14 2005 -0700"
      },
      "message": "[PATCH] VM: early zone reclaim\n\nThis is the core of the (much simplified) early reclaim.  The goal of this\npatch is to reclaim some easily-freed pages from a zone before falling back\nonto another zone.\n\nOne of the major uses of this is NUMA machines.  With the default allocator\nbehavior the allocator would look for memory in another zone, which might be\noff-node, before trying to reclaim from the current zone.\n\nThis adds a zone tuneable to enable early zone reclaim.  It is selected on a\nper-zone basis and is turned on/off via syscall.\n\nAdding some extra throttling on the reclaim was also required (patch\n4/4).  Without the machine would grind to a crawl when doing a \"make -j\"\nkernel build.  Even with this patch the System Time is higher on\naverage, but it seems tolerable.  Here are some numbers for kernbench\nruns on a 2-node, 4cpu, 8Gig RAM Altix in the \"make -j\" run:\n\n\t\t\twall  user   sys   %cpu  ctx sw.  sleeps\n\t\t\t----  ----   ---   ----   ------  ------\nNo patch\t\t1009  1384   847   258   298170   504402\nw/patch, no reclaim     880   1376   667   288   254064   396745\nw/patch \u0026 reclaim       1079  1385   926   252   291625   548873\n\nThese numbers are the average of 2 runs of 3 \"make -j\" runs done right\nafter system boot.  Run-to-run variability for \"make -j\" is huge, so\nthese numbers aren\u0027t terribly useful except to seee that with reclaim\nthe benchmark still finishes in a reasonable amount of time.\n\nI also looked at the NUMA hit/miss stats for the \"make -j\" runs and the\nreclaim doesn\u0027t make any difference when the machine is thrashing away.\n\nDoing a \"make -j8\" on a single node that is filled with page cache pages\ntakes 700 seconds with reclaim turned on and 735 seconds without reclaim\n(due to remote memory accesses).\n\nThe simple zone_reclaim syscall program is at\nhttp://www.bork.org/~mort/sgi/zone_reclaim.c\n\nSigned-off-by: Martin Hicks \u003cmort@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "39c715b71740c4a78ba4769fb54826929bac03cb",
      "tree": "94dd679dfc8e6c2db65971739aa8c8c6206f8174",
      "parents": [
        "84929801e14d968caeb84795bfbb88f04283fbd9"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Tue Jun 21 17:14:34 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Tue Jun 21 18:46:13 2005 -0700"
      },
      "message": "[PATCH] smp_processor_id() cleanup\n\nThis patch implements a number of smp_processor_id() cleanup ideas that\nArjan van de Ven and I came up with.\n\nThe previous __smp_processor_id/_smp_processor_id/smp_processor_id API\nspaghetti was hard to follow both on the implementational and on the\nusage side.\n\nSome of the complexity arose from picking wrong names, some of the\ncomplexity comes from the fact that not all architectures defined\n__smp_processor_id.\n\nIn the new code, there are two externally visible symbols:\n\n - smp_processor_id(): debug variant.\n\n - raw_smp_processor_id(): nondebug variant. Replaces all existing\n   uses of _smp_processor_id() and __smp_processor_id(). Defined\n   by every SMP architecture in include/asm-*/smp.h.\n\nThere is one new internal symbol, dependent on DEBUG_PREEMPT:\n\n - debug_smp_processor_id(): internal debug variant, mapped to\n                             smp_processor_id().\n\nAlso, i moved debug_smp_processor_id() from lib/kernel_lock.c into a new\nlib/smp_processor_id.c file.  All related comments got updated and/or\nclarified.\n\nI have build/boot tested the following 8 .config combinations on x86:\n\n {SMP,UP} x {PREEMPT,!PREEMPT} x {DEBUG_PREEMPT,!DEBUG_PREEMPT}\n\nI have also build/boot tested x64 on UP/PREEMPT/DEBUG_PREEMPT.  (Other\narchitectures are untested, but should work just fine.)\n\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Arjan van de Ven \u003carjan@infradead.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
      "tree": "0bba044c4ce775e45a88a51686b5d9f90697ea9d",
      "parents": [],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:20:36 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:20:36 2005 -0700"
      },
      "message": "Linux-2.6.12-rc2\n\nInitial git repository build. I\u0027m not bothering with the full history,\neven though we have it. We can create a separate \"historical\" git\narchive of that later if we want to, and in the meantime it\u0027s about\n3.2GB when imported into git - space that would just make the early\ngit days unnecessarily complicated, when we don\u0027t have a lot of good\ninfrastructure for it.\n\nLet it rip!\n"
    }
  ]
}
