)]}'
{
  "log": [
    {
      "commit": "82d4b5779a75887750748609f3415f01c1bb9f81",
      "tree": "44e467cea2a2fbf88325b6a562c2efa39f53b9d2",
      "parents": [
        "15fa8f425557a0d698f933627771f520ef4ae34b"
      ],
      "author": {
        "name": "Dave Hansen",
        "email": "dave@linux.vnet.ibm.com",
        "time": "Tue May 24 17:11:42 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 25 08:39:11 2011 -0700"
      },
      "message": "include/linux/gfp.h: convert BUG_ON() into VM_BUG_ON()\n\nVM_BUG_ON() if effectively a BUG_ON() undef #ifdef CONFIG_DEBUG_VM.  That\nis exactly what we have here now, and two different folks have suggested\ndoing it this way.\n\nSigned-off-by: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nCc: Christoph Lameter \u003ccl@linux.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "15fa8f425557a0d698f933627771f520ef4ae34b",
      "tree": "033020d146cef836681d56f570fb6b0116ac5794",
      "parents": [
        "72788c385604523422592249c19cba0187021e9b"
      ],
      "author": {
        "name": "Dave Hansen",
        "email": "dave@linux.vnet.ibm.com",
        "time": "Tue May 24 17:11:41 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 25 08:39:11 2011 -0700"
      },
      "message": "include/linux/gfp.h: work around apparent sparse confusion\n\nRunning sparse on page_alloc.c today, it errors out:\n        include/linux/gfp.h:254:17: error: bad constant expression\n        include/linux/gfp.h:254:17: error: cannot size expression\n\nwhich is a line in gfp_zone():\n\n        BUILD_BUG_ON((GFP_ZONE_BAD \u003e\u003e bit) \u0026 1);\n\nThat\u0027s really unfortunate, because it ends up hiding all of the other\nlegitimate sparse messages like this:\n        mm/page_alloc.c:5315:59: warning: incorrect type in argument 1 (different base types)\n        mm/page_alloc.c:5315:59:    expected unsigned long [unsigned] [usertype] size\n        mm/page_alloc.c:5315:59:    got restricted gfp_t [usertype] \u003cnoident\u003e\n...\n\nHaving sparse be able to catch these very oopsable bugs is a lot more\nimportant than keeping a BUILD_BUG_ON().  Kill the BUILD_BUG_ON().\n\nCompiles on x86_64 with and without CONFIG_DEBUG_VM\u003dy.  defconfig boots\nfine for me.\n\nSigned-off-by: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ee85c2e1454603ebb9f8d87223ac79dcdc87fa32",
      "tree": "1e5f85fcd35083116e6bc88f6e995b4351e987f1",
      "parents": [
        "71a6d0af5b031d27029fda64fbab9b9d953d2b33"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Wed May 11 15:13:34 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 11 18:50:45 2011 -0700"
      },
      "message": "mm: add alloc_pages_exact_nid()\n\nAdd a alloc_pages_exact_nid() that allocates on a specific node.\n\nThe naming is quite broken, but fixing that would need a larger renaming\naction.\n\n[akpm@linux-foundation.org: coding-style fixes]\n[akpm@linux-foundation.org: tweak comment]\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "78afd5612deb8268bafc8b6507d72341d5ed9aac",
      "tree": "b96131d6f237b9ce6848d95c8eccdd1f7855365c",
      "parents": [
        "11bc82d67d1150767901bca54a24466621d763d7"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Tue Mar 22 16:33:12 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 22 17:44:05 2011 -0700"
      },
      "message": "mm: add __GFP_OTHER_NODE flag\n\nAdd a new __GFP_OTHER_NODE flag to tell the low level numa statistics in\nzone_statistics() that an allocation is on behalf of another thread.  This\nway the local and remote counters can be still correct, even when\nbackground daemons like khugepaged are changing memory mappings.\n\nThis only affects the accounting, but I think it\u0027s worth doing that right\nto avoid confusing users.\n\nI first tried to just pass down the right node, but this required a lot of\nchanges to pass down this parameter and at least one addition of a 10th\nargument to a 9 argument function.  Using the flag is a lot less\nintrusive.\n\nOpen: should be also used for migration?\n\n[akpm@linux-foundation.org: coding-style fixes]\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "236344d6b417d05a3080477639234fd9ca97568d",
      "tree": "bebda56cddb3dc7ce6f73091383ac857606a5f11",
      "parents": [
        "2f5f9486f8c12e3aa40fe3775a18cb14efc5cea2"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Fri Mar 04 17:36:30 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 04 17:53:39 2011 -0800"
      },
      "message": "mm: add alloc_page_vma_node()\n\nAdd a alloc_page_vma_node that allows passing the \"local\" node in.  Used\nin a followon patch.\n\nAcked-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2f5f9486f8c12e3aa40fe3775a18cb14efc5cea2",
      "tree": "362c21544db1bc65ffb65abf9f2b41b63621a124",
      "parents": [
        "b8bc1dd39722f7c306435d0682e9bf81abf52105"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Fri Mar 04 17:36:29 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 04 17:53:39 2011 -0800"
      },
      "message": "mm: change alloc_pages_vma to pass down the policy node for local policy\n\nCurrently alloc_pages_vma() always uses the local node as policy node for\nthe LOCAL policy.  Pass this node down as an argument instead.\n\nNo behaviour change from this patch, but will be needed for followons.\n\nAcked-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1765e3a4933ea0870fabd755feffc5473c4363ce",
      "tree": "208364f2933f96773310a3a6c4dce6a21f66eec7",
      "parents": [
        "7ef88ad561457c0346355dfd1f53e503ddfde719"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Mon Jan 24 14:45:10 2011 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Mon Jan 24 14:45:11 2011 +1030"
      },
      "message": "Remove MAYBE_BUILD_BUG_ON\n\nNow BUILD_BUG_ON() can handle optimizable constants, we don\u0027t need\nMAYBE_BUILD_BUG_ON any more.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "0bbbc0b33d141f78a0d9218a54a47f50621220d3",
      "tree": "3ef3363c189ac536926119731eb86dcf989f4adb",
      "parents": [
        "d39d33c332c611094f84cee39715866f4cbf79e2"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 13 15:47:05 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:45 2011 -0800"
      },
      "message": "thp: add numa awareness to hugepage allocations\n\nIt\u0027s mostly a matter of replacing alloc_pages with alloc_pages_vma after\nintroducing alloc_pages_vma.  khugepaged needs special handling as the\nallocation has to happen inside collapse_huge_page where the vma is known\nand an error has to be returned to the outer loop to sleep\nalloc_sleep_millisecs in case of failure.  But it retains the more\nefficient logic of handling allocation failures in khugepaged in case of\nCONFIG_NUMA\u003dn.\n\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "71e3aac0724ffe8918992d76acfe3aad7d8724a5",
      "tree": "4ff96e1fc3e53bc9d25b859bf7e5bdbab8f1b25a",
      "parents": [
        "5c3240d92e29ae7bfb9cb58a9b37e80ab40894ff"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 13 15:46:52 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:42 2011 -0800"
      },
      "message": "thp: transparent hugepage core\n\nLately I\u0027ve been working to make KVM use hugepages transparently without\nthe usual restrictions of hugetlbfs.  Some of the restrictions I\u0027d like to\nsee removed:\n\n1) hugepages have to be swappable or the guest physical memory remains\n   locked in RAM and can\u0027t be paged out to swap\n\n2) if a hugepage allocation fails, regular pages should be allocated\n   instead and mixed in the same vma without any failure and without\n   userland noticing\n\n3) if some task quits and more hugepages become available in the\n   buddy, guest physical memory backed by regular pages should be\n   relocated on hugepages automatically in regions under\n   madvise(MADV_HUGEPAGE) (ideally event driven by waking up the\n   kernel deamon if the order\u003dHPAGE_PMD_SHIFT-PAGE_SHIFT list becomes\n   not null)\n\n4) avoidance of reservation and maximization of use of hugepages whenever\n   possible. Reservation (needed to avoid runtime fatal faliures) may be ok for\n   1 machine with 1 database with 1 database cache with 1 database cache size\n   known at boot time. It\u0027s definitely not feasible with a virtualization\n   hypervisor usage like RHEV-H that runs an unknown number of virtual machines\n   with an unknown size of each virtual machine with an unknown amount of\n   pagecache that could be potentially useful in the host for guest not using\n   O_DIRECT (aka cache\u003doff).\n\nhugepages in the virtualization hypervisor (and also in the guest!) are\nmuch more important than in a regular host not using virtualization,\nbecasue with NPT/EPT they decrease the tlb-miss cacheline accesses from 24\nto 19 in case only the hypervisor uses transparent hugepages, and they\ndecrease the tlb-miss cacheline accesses from 19 to 15 in case both the\nlinux hypervisor and the linux guest both uses this patch (though the\nguest will limit the addition speedup to anonymous regions only for\nnow...).  Even more important is that the tlb miss handler is much slower\non a NPT/EPT guest than for a regular shadow paging or no-virtualization\nscenario.  So maximizing the amount of virtual memory cached by the TLB\npays off significantly more with NPT/EPT than without (even if there would\nbe no significant speedup in the tlb-miss runtime).\n\nThe first (and more tedious) part of this work requires allowing the VM to\nhandle anonymous hugepages mixed with regular pages transparently on\nregular anonymous vmas.  This is what this patch tries to achieve in the\nleast intrusive possible way.  We want hugepages and hugetlb to be used in\na way so that all applications can benefit without changes (as usual we\nleverage the KVM virtualization design: by improving the Linux VM at\nlarge, KVM gets the performance boost too).\n\nThe most important design choice is: always fallback to 4k allocation if\nthe hugepage allocation fails!  This is the _very_ opposite of some large\npagecache patches that failed with -EIO back then if a 64k (or similar)\nallocation failed...\n\nSecond important decision (to reduce the impact of the feature on the\nexisting pagetable handling code) is that at any time we can split an\nhugepage into 512 regular pages and it has to be done with an operation\nthat can\u0027t fail.  This way the reliability of the swapping isn\u0027t decreased\n(no need to allocate memory when we are short on memory to swap) and it\u0027s\ntrivial to plug a split_huge_page* one-liner where needed without\npolluting the VM.  Over time we can teach mprotect, mremap and friends to\nhandle pmd_trans_huge natively without calling split_huge_page*.  The fact\nit can\u0027t fail isn\u0027t just for swap: if split_huge_page would return -ENOMEM\n(instead of the current void) we\u0027d need to rollback the mprotect from the\nmiddle of it (ideally including undoing the split_vma) which would be a\nbig change and in the very wrong direction (it\u0027d likely be simpler not to\ncall split_huge_page at all and to teach mprotect and friends to handle\nhugepages instead of rolling them back from the middle).  In short the\nvery value of split_huge_page is that it can\u0027t fail.\n\nThe collapsing and madvise(MADV_HUGEPAGE) part will remain separated and\nincremental and it\u0027ll just be an \"harmless\" addition later if this initial\npart is agreed upon.  It also should be noted that locking-wise replacing\nregular pages with hugepages is going to be very easy if compared to what\nI\u0027m doing below in split_huge_page, as it will only happen when\npage_count(page) matches page_mapcount(page) if we can take the PG_lock\nand mmap_sem in write mode.  collapse_huge_page will be a \"best effort\"\nthat (unlike split_huge_page) can fail at the minimal sign of trouble and\nwe can try again later.  collapse_huge_page will be similar to how KSM\nworks and the madvise(MADV_HUGEPAGE) will work similar to\nmadvise(MADV_MERGEABLE).\n\nThe default I like is that transparent hugepages are used at page fault\ntime.  This can be changed with\n/sys/kernel/mm/transparent_hugepage/enabled.  The control knob can be set\nto three values \"always\", \"madvise\", \"never\" which mean respectively that\nhugepages are always used, or only inside madvise(MADV_HUGEPAGE) regions,\nor never used.  /sys/kernel/mm/transparent_hugepage/defrag instead\ncontrols if the hugepage allocation should defrag memory aggressively\n\"always\", only inside \"madvise\" regions, or \"never\".\n\nThe pmd_trans_splitting/pmd_trans_huge locking is very solid.  The\nput_page (from get_user_page users that can\u0027t use mmu notifier like\nO_DIRECT) that runs against a __split_huge_page_refcount instead was a\npain to serialize in a way that would result always in a coherent page\ncount for both tail and head.  I think my locking solution with a\ncompound_lock taken only after the page_first is valid and is still a\nPageHead should be safe but it surely needs review from SMP race point of\nview.  In short there is no current existing way to serialize the O_DIRECT\nfinal put_page against split_huge_page_refcount so I had to invent a new\none (O_DIRECT loses knowledge on the mapping status by the time gup_fast\nreturns so...).  And I didn\u0027t want to impact all gup/gup_fast users for\nnow, maybe if we change the gup interface substantially we can avoid this\nlocking, I admit I didn\u0027t think too much about it because changing the gup\nunpinning interface would be invasive.\n\nIf we ignored O_DIRECT we could stick to the existing compound refcounting\ncode, by simply adding a get_user_pages_fast_flags(foll_flags) where KVM\n(and any other mmu notifier user) would call it without FOLL_GET (and if\nFOLL_GET isn\u0027t set we\u0027d just BUG_ON if nobody registered itself in the\ncurrent task mmu notifier list yet).  But O_DIRECT is fundamental for\ndecent performance of virtualized I/O on fast storage so we can\u0027t avoid it\nto solve the race of put_page against split_huge_page_refcount to achieve\na complete hugepage feature for KVM.\n\nSwap and oom works fine (well just like with regular pages ;).  MMU\nnotifier is handled transparently too, with the exception of the young bit\non the pmd, that didn\u0027t have a range check but I think KVM will be fine\nbecause the whole point of hugepages is that EPT/NPT will also use a huge\npmd when they notice gup returns pages with PageCompound set, so they\nwon\u0027t care of a range and there\u0027s just the pmd young bit to check in that\ncase.\n\nNOTE: in some cases if the L2 cache is small, this may slowdown and waste\nmemory during COWs because 4M of memory are accessed in a single fault\ninstead of 8k (the payoff is that after COW the program can run faster).\nSo we might want to switch the copy_huge_page (and clear_huge_page too) to\nnot temporal stores.  I also extensively researched ways to avoid this\ncache trashing with a full prefault logic that would cow in 8k/16k/32k/64k\nup to 1M (I can send those patches that fully implemented prefault) but I\nconcluded they\u0027re not worth it and they add an huge additional complexity\nand they remove all tlb benefits until the full hugepage has been faulted\nin, to save a little bit of memory and some cache during app startup, but\nthey still don\u0027t improve substantially the cache-trashing during startup\nif the prefault happens in \u003e4k chunks.  One reason is that those 4k pte\nentries copied are still mapped on a perfectly cache-colored hugepage, so\nthe trashing is the worst one can generate in those copies (cow of 4k page\ncopies aren\u0027t so well colored so they trashes less, but again this results\nin software running faster after the page fault).  Those prefault patches\nallowed things like a pte where post-cow pages were local 4k regular anon\npages and the not-yet-cowed pte entries were pointing in the middle of\nsome hugepage mapped read-only.  If it doesn\u0027t payoff substantially with\ntodays hardware it will payoff even less in the future with larger l2\ncaches, and the prefault logic would blot the VM a lot.  If one is\nemebdded transparent_hugepage can be disabled during boot with sysfs or\nwith the boot commandline parameter transparent_hugepage\u003d0 (or\ntransparent_hugepage\u003d2 to restrict hugepages inside madvise regions) that\nwill ensure not a single hugepage is allocated at boot time.  It is simple\nenough to just disable transparent hugepage globally and let transparent\nhugepages be allocated selectively by applications in the MADV_HUGEPAGE\nregion (both at page fault time, and if enabled with the\ncollapse_huge_page too through the kernel daemon).\n\nThis patch supports only hugepages mapped in the pmd, archs that have\nsmaller hugepages will not fit in this patch alone.  Also some archs like\npower have certain tlb limits that prevents mixing different page size in\nthe same regions so they will not fit in this framework that requires\n\"graceful fallback\" to basic PAGE_SIZE in case of physical memory\nfragmentation.  hugetlbfs remains a perfect fit for those because its\nsoftware limits happen to match the hardware limits.  hugetlbfs also\nremains a perfect fit for hugepage sizes like 1GByte that cannot be hoped\nto be found not fragmented after a certain system uptime and that would be\nvery expensive to defragment with relocation, so requiring reservation.\nhugetlbfs is the \"reservation way\", the point of transparent hugepages is\nnot to have any reservation at all and maximizing the use of cache and\nhugepages at all times automatically.\n\nSome performance result:\n\nvmx andrea # LD_PRELOAD\u003d/usr/lib64/libhugetlbfs.so HUGETLB_MORECORE\u003dyes HUGETLB_PATH\u003d/mnt/huge/ ./largep\nages3\nmemset page fault 1566023\nmemset tlb miss 453854\nmemset second tlb miss 453321\nrandom access tlb miss 41635\nrandom access second tlb miss 41658\nvmx andrea # LD_PRELOAD\u003d/usr/lib64/libhugetlbfs.so HUGETLB_MORECORE\u003dyes HUGETLB_PATH\u003d/mnt/huge/ ./largepages3\nmemset page fault 1566471\nmemset tlb miss 453375\nmemset second tlb miss 453320\nrandom access tlb miss 41636\nrandom access second tlb miss 41637\nvmx andrea # ./largepages3\nmemset page fault 1566642\nmemset tlb miss 453417\nmemset second tlb miss 453313\nrandom access tlb miss 41630\nrandom access second tlb miss 41647\nvmx andrea # ./largepages3\nmemset page fault 1566872\nmemset tlb miss 453418\nmemset second tlb miss 453315\nrandom access tlb miss 41618\nrandom access second tlb miss 41659\nvmx andrea # echo 0 \u003e /proc/sys/vm/transparent_hugepage\nvmx andrea # ./largepages3\nmemset page fault 2182476\nmemset tlb miss 460305\nmemset second tlb miss 460179\nrandom access tlb miss 44483\nrandom access second tlb miss 44186\nvmx andrea # ./largepages3\nmemset page fault 2182791\nmemset tlb miss 460742\nmemset second tlb miss 459962\nrandom access tlb miss 43981\nrandom access second tlb miss 43988\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n#include \u003cstdio.h\u003e\n#include \u003cstdlib.h\u003e\n#include \u003cstring.h\u003e\n#include \u003csys/time.h\u003e\n\n#define SIZE (3UL*1024*1024*1024)\n\nint main()\n{\n\tchar *p \u003d malloc(SIZE), *p2;\n\tstruct timeval before, after;\n\n\tgettimeofday(\u0026before, NULL);\n\tmemset(p, 0, SIZE);\n\tgettimeofday(\u0026after, NULL);\n\tprintf(\"memset page fault %Lu\\n\",\n\t       (after.tv_sec-before.tv_sec)*1000000UL +\n\t       after.tv_usec-before.tv_usec);\n\n\tgettimeofday(\u0026before, NULL);\n\tmemset(p, 0, SIZE);\n\tgettimeofday(\u0026after, NULL);\n\tprintf(\"memset tlb miss %Lu\\n\",\n\t       (after.tv_sec-before.tv_sec)*1000000UL +\n\t       after.tv_usec-before.tv_usec);\n\n\tgettimeofday(\u0026before, NULL);\n\tmemset(p, 0, SIZE);\n\tgettimeofday(\u0026after, NULL);\n\tprintf(\"memset second tlb miss %Lu\\n\",\n\t       (after.tv_sec-before.tv_sec)*1000000UL +\n\t       after.tv_usec-before.tv_usec);\n\n\tgettimeofday(\u0026before, NULL);\n\tfor (p2 \u003d p; p2 \u003c p+SIZE; p2 +\u003d 4096)\n\t\t*p2 \u003d 0;\n\tgettimeofday(\u0026after, NULL);\n\tprintf(\"random access tlb miss %Lu\\n\",\n\t       (after.tv_sec-before.tv_sec)*1000000UL +\n\t       after.tv_usec-before.tv_usec);\n\n\tgettimeofday(\u0026before, NULL);\n\tfor (p2 \u003d p; p2 \u003c p+SIZE; p2 +\u003d 4096)\n\t\t*p2 \u003d 0;\n\tgettimeofday(\u0026after, NULL);\n\tprintf(\"random access second tlb miss %Lu\\n\",\n\t       (after.tv_sec-before.tv_sec)*1000000UL +\n\t       after.tv_usec-before.tv_usec);\n\n\treturn 0;\n}\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "32dba98e085f8b2b4345887df9abf5e0e93bfc12",
      "tree": "6789196797350911a1c370ce909bfde2556ccfc4",
      "parents": [
        "936a5fe6e6148c0b3ea0d792b903847d9b9931a1"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 13 15:46:49 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:41 2011 -0800"
      },
      "message": "thp: _GFP_NO_KSWAPD\n\nTransparent hugepage allocations must be allowed not to invoke kswapd or\nany other kind of indirect reclaim (especially when the defrag sysfs is\ncontrol disabled).  It\u0027s unacceptable to swap out anonymous pages\n(potentially anonymous transparent hugepages) in order to create new\ntransparent hugepages.  This is true for the MADV_HUGEPAGE areas too\n(swapping out a kvm virtual machine and so having it suffer an unbearable\nslowdown, so another one with guest physical memory marked MADV_HUGEPAGE\ncan run 30% faster if it is running memory intensive workloads, makes no\nsense).  If a transparent hugepage allocation fails the slowdown is minor\nand there is total fallback, so kswapd should never be asked to swapout\nmemory to allow the high order allocation to succeed.\n\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c9e664f1fdf34aa8cede047b206deaa8f1945af0",
      "tree": "6038002f46173ca785936ac2fe54177197f98a08",
      "parents": [
        "9f339caf8454f0c21983111350ede93983db4340"
      ],
      "author": {
        "name": "Rafael J. Wysocki",
        "email": "rjw@sisk.pl",
        "time": "Fri Dec 03 22:57:45 2010 +0100"
      },
      "committer": {
        "name": "Rafael J. Wysocki",
        "email": "rjw@sisk.pl",
        "time": "Mon Dec 06 23:52:08 2010 +0100"
      },
      "message": "PM / Hibernate: Fix memory corruption related to swap\n\nThere is a problem that swap pages allocated before the creation of\na hibernation image can be released and used for storing the contents\nof different memory pages while the image is being saved.  Since the\nkernel stored in the image doesn\u0027t know of that, it causes memory\ncorruption to occur after resume from hibernation, especially on\nsystems with relatively small RAM that need to swap often.\n\nThis issue can be addressed by keeping the GFP_IOFS bits clear\nin gfp_allowed_mask during the entire hibernation, including the\nsaving of the image, until the system is finally turned off or\nthe hibernation is aborted.  Unfortunately, for this purpose\nit\u0027s necessary to rework the way in which the hibernate and\nsuspend code manipulates gfp_allowed_mask.\n\nThis change is based on an earlier patch from Hugh Dickins.\n\nSigned-off-by: Rafael J. Wysocki \u003crjw@sisk.pl\u003e\nReported-by: Ondrej Zary \u003clinux@rainbow-software.org\u003e\nAcked-by: Hugh Dickins \u003chughd@google.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: stable@kernel.org\n"
    },
    {
      "commit": "16b56cf4b8a0fa9acc21bd2ad19839b917999b96",
      "tree": "174dcc56e46bf5f939824031957270b4a9f7a9c6",
      "parents": [
        "36deb0be314702627aeae1f5737fc84d01dc26c6"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Tue Oct 26 14:22:04 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 26 16:52:10 2010 -0700"
      },
      "message": "mm: fix sparse warnings on GFP_ZONE_TABLE/BAD\n\nIntroduce ___GFP_* masks in order for gfp_t to not be mixed with plain\nintegers which causes a lot of warnings like the following:\n\n warning: restricted gfp_t degrades to integer\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "fd23855e38d2a7275a786238459c070b4e9f7975",
      "tree": "e390a91f70a428b2a70bb1fa95fcb53dd662908a",
      "parents": [
        "263ff5d8e82e577202d2b8393585b0e2436b7ffc"
      ],
      "author": {
        "name": "matt mooney",
        "email": "mfmooney@gmail.com",
        "time": "Mon May 24 14:32:45 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 25 08:07:01 2010 -0700"
      },
      "message": "include/linux/gfp.h: fix coding style\n\nAdd parenthesis in a define.  This doesn\u0027t change functionality.\n\ncheckpatch errors:\n1) white space fixes\n2) add spaces after comas\n\nSigned-off-by: matt mooney \u003cmfm@muteddisk.com\u003e\nCc: Dan Carpenter \u003cerror27@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": "263ff5d8e82e577202d2b8393585b0e2436b7ffc",
      "tree": "d8a1c1e7f854ae09bef85a280b365d7bb2340583",
      "parents": [
        "cf23422b9d76215316855253da491d4c9f294372"
      ],
      "author": {
        "name": "matt mooney",
        "email": "mfmooney@gmail.com",
        "time": "Mon May 24 14:32:44 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 25 08:07:00 2010 -0700"
      },
      "message": "include/linux/gfp.h: spelling fixes\n\nFix minor spelling errors in a few comments; no code changes.\n\nSigned-off-by: matt mooney \u003cmfm@muteddisk.com\u003e\nCc: Dan Carpenter \u003cerror27@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": "478352e789f507105193d3d0177c3b4f26da0399",
      "tree": "c1f614f19aac209814a44611cf7a9b126fc1e493",
      "parents": [
        "645747462435d84c6c6a64269ed49cc3015f753d"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Fri Mar 05 13:42:23 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 06 11:26:27 2010 -0800"
      },
      "message": "mm: add comment about deprecation of __GFP_NOFAIL\n\n__GFP_NOFAIL was deprecated in dab48dab, so add a comment that no new\nusers should be added.\n\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "452aa6999e6703ffbddd7f6ea124d3968915f3e3",
      "tree": "48e375fdb60920675f68b444b462903ad8bb6940",
      "parents": [
        "ad2bd7e0e9647cd48593a6b3a2be07dc2c2d28ed"
      ],
      "author": {
        "name": "Rafael J. Wysocki",
        "email": "rjw@sisk.pl",
        "time": "Fri Mar 05 13:42:13 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 06 11:26:26 2010 -0800"
      },
      "message": "mm/pm: force GFP_NOIO during suspend/hibernation and resume\n\nThere are quite a few GFP_KERNEL memory allocations made during\nsuspend/hibernation and resume that may cause the system to hang, because\nthe I/O operations they depend on cannot be completed due to the\nunderlying devices being suspended.\n\nAvoid this problem by clearing the __GFP_IO and __GFP_FS bits in\ngfp_allowed_mask before suspend/hibernation and restoring the original\nvalues of these bits in gfp_allowed_mask durig the subsequent resume.\n\n[akpm@linux-foundation.org: fix CONFIG_PM\u003dn linkage]\nSigned-off-by: Rafael J. Wysocki \u003crjw@sisk.pl\u003e\nReported-by: Maxim Levitsky \u003cmaximlevitsky@gmail.com\u003e\nCc: Sebastian Ott \u003csebott@linux.vnet.ibm.com\u003e\nCc: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "fc91668eaf9e7ba61e867fc2218b7e9fb67faa4f",
      "tree": "08d443d76255e8d60ae6ba07d52cdc295172ded8",
      "parents": [
        "c475dab63ae798d81fb597a6a1859986b296d9d0"
      ],
      "author": {
        "name": "Li Hong",
        "email": "lihong.hi@gmail.com",
        "time": "Fri Mar 05 13:41:54 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 06 11:26:25 2010 -0800"
      },
      "message": "mm: remove free_hot_page()\n\nfree_hot_page() is just a wrapper around free_hot_cold_page() with\nparameter \u0027cold \u003d 0\u0027.  After adding a clear comment for\nfree_hot_cold_page(), it is reasonable to remove a level of call.\n\n[akpm@linux-foundation.org: fix build]\nSigned-off-by: Li Hong \u003clihong.hi@gmail.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Larry Woodman \u003clwoodman@redhat.com\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Li Ming Chun \u003cmacli@brc.ubc.ca\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Americo Wang \u003cxiyou.wangcong@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": "8c87df457cb58fe75b9b893007917cf8095660a0",
      "tree": "32446b329e4b83ae6158fa1505c36634a75dbfe8",
      "parents": [
        "1fe72eaa0f46a0fa4cdcd8f3f7853b6d39469784"
      ],
      "author": {
        "name": "Jan Beulich",
        "email": "JBeulich@novell.com",
        "time": "Tue Sep 22 16:43:52 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Sep 23 07:39:29 2009 -0700"
      },
      "message": "BUILD_BUG_ON(): fix it and a couple of bogus uses of it\n\ngcc permitting variable length arrays makes the current construct used for\nBUILD_BUG_ON() useless, as that doesn\u0027t produce any diagnostic if the\ncontrolling expression isn\u0027t really constant.  Instead, this patch makes\nit so that a bit field gets used here.  Consequently, those uses where the\ncondition isn\u0027t really constant now also need fixing.\n\nNote that in the gfp.h, kmemcheck.h, and virtio_config.h cases\nMAYBE_BUILD_BUG_ON() really just serves documentation purposes - even if\nthe expression is compile time constant (__builtin_constant_p() yields\ntrue), the array is still deemed of variable length by gcc, and hence the\nwhole expression doesn\u0027t have the intended effect.\n\n[akpm@linux-foundation.org: make arch/sparc/include/asm/vio.h compile]\n[akpm@linux-foundation.org: more nonsensical assertions in tpm.c..]\nSigned-off-by: Jan Beulich \u003cjbeulich@novell.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: Catalin Marinas \u003ccatalin.marinas@arm.com\u003e\nCc: \"David S. Miller\" \u003cdavem@davemloft.net\u003e\nCc: Rajiv Andrade \u003csrajiv@linux.vnet.ibm.com\u003e\nCc: Mimi Zohar \u003czohar@us.ibm.com\u003e\nCc: James Morris \u003cjmorris@namei.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1a8670a29b5277cbe601f74ab63d2c5211fb3005",
      "tree": "1b2ca94009c1f3d7ff05bbda3b8956631e3f38d9",
      "parents": [
        "0b21767637c3c99890a248fe47ac414e51cf5eb7"
      ],
      "author": {
        "name": "Alexey Dobriyan",
        "email": "adobriyan@gmail.com",
        "time": "Mon Sep 21 17:03:09 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Sep 22 07:17:38 2009 -0700"
      },
      "message": "oom: move oom_killer_enable()/oom_killer_disable to where they belong\n\nSigned-off-by: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "38a398572fa2d8124f7479e40db581b5b72719c9",
      "tree": "cad43f1cb00b760507278cc7b55f8e7fa4ab4fab",
      "parents": [
        "cc013a88906bad9d2832d6316de1c7dbc1c2a794"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Mon Sep 21 17:02:39 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Sep 22 07:17:34 2009 -0700"
      },
      "message": "page-allocator: remove dead function free_cold_page()\n\nThe function free_cold_page() has no callers so delete it.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "dcce284a259373f9e5570f2e33f79eca84fcf565",
      "tree": "afc4b23208974f17c080ea3d2ecfbaca4254c010",
      "parents": [
        "9729a6eb5878a3daa18395f2b5fb38bf9359a761"
      ],
      "author": {
        "name": "Benjamin Herrenschmidt",
        "email": "benh@kernel.crashing.org",
        "time": "Thu Jun 18 13:24:12 2009 +1000"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 18 13:12:57 2009 -0700"
      },
      "message": "mm: Extend gfp masking to the page allocator\n\nThe page allocator also needs the masking of gfp flags during boot,\nso this moves it out of slab/slub and uses it with the page allocator\nas well.\n\nSigned-off-by: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nAcked-by: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "517d08699b250021303f9a7cf0d758b6dc0748ed",
      "tree": "5e5b0134c3fffb78fe9d8b1641a64ff28fdd7bbc",
      "parents": [
        "8eeee4e2f04fc551f50c9d9847da2d73d7d33728",
        "a34601c5d84134055782ee031d58d82f5440e918"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:50:13 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:50:13 2009 -0700"
      },
      "message": "Merge branch \u0027akpm\u0027\n\n* akpm: (182 commits)\n  fbdev: bf54x-lq043fb: use kzalloc over kmalloc/memset\n  fbdev: *bfin*: fix __dev{init,exit} markings\n  fbdev: *bfin*: drop unnecessary calls to memset\n  fbdev: bfin-t350mcqb-fb: drop unused local variables\n  fbdev: blackfin has __raw I/O accessors, so use them in fb.h\n  fbdev: s1d13xxxfb: add accelerated bitblt functions\n  tcx: use standard fields for framebuffer physical address and length\n  fbdev: add support for handoff from firmware to hw framebuffers\n  intelfb: fix a bug when changing video timing\n  fbdev: use framebuffer_release() for freeing fb_info structures\n  radeon: P2G2CLK_ALWAYS_ONb tested twice, should 2nd be P2G2CLK_DAC_ALWAYS_ONb?\n  s3c-fb: CPUFREQ frequency scaling support\n  s3c-fb: fix resource releasing on error during probing\n  carminefb: fix possible access beyond end of carmine_modedb[]\n  acornfb: remove fb_mmap function\n  mb862xxfb: use CONFIG_OF instead of CONFIG_PPC_OF\n  mb862xxfb: restrict compliation of platform driver to PPC\n  Samsung SoC Framebuffer driver: add Alpha Channel support\n  atmel-lcdc: fix pixclock upper bound detection\n  offb: use framebuffer_alloc() to allocate fb_info struct\n  ...\n\nManually fix up conflicts due to kmemcheck in mm/slab.c\n"
    },
    {
      "commit": "b70d94ee438b3fd9c15c7691d7a932a135c18101",
      "tree": "a33e88b812c0cd8a18017e34dcddcea7715320c9",
      "parents": [
        "31c911329e048b715a1dfeaaf617be9430fd7f4e"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "cl@linux.com",
        "time": "Tue Jun 16 15:32:46 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:41 2009 -0700"
      },
      "message": "page-allocator: use integer fields lookup for gfp_zone and check for errors in flags passed to the page allocator\n\nThis simplifies the code in gfp_zone() and also keeps the ability of the\ncompiler to use constant folding to get rid of gfp_zone processing.\n\nThe lookup of the zone is done using a bitfield stored in an integer.  So\nthe code in gfp_zone is a simple extraction of bits from a constant\nbitfield.  The compiler is generating a load of a constant into a register\nand then performs a shift and mask operation to get the zone from a gfp_t.\n No cachelines are touched and no branches have to be predicted by the\ncompiler.\n\nWe are doing some macro tricks here to convince the compiler to always do\nthe constant folding if possible.\n\nSigned-off-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7f33d49a2ed546e01f7b1d0607661810f2421859",
      "tree": "8b05ac7ec2cd123efb266ecaa1bf0bd1487158f8",
      "parents": [
        "75927af8bcb940dad4fe281713d526cb520869ff"
      ],
      "author": {
        "name": "Rafael J. Wysocki",
        "email": "rjw@sisk.pl",
        "time": "Tue Jun 16 15:32:41 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:40 2009 -0700"
      },
      "message": "mm, PM/Freezer: Disable OOM killer when tasks are frozen\n\nCurrently, the following scenario appears to be possible in theory:\n\n* Tasks are frozen for hibernation or suspend.\n* Free pages are almost exhausted.\n* Certain piece of code in the suspend code path attempts to allocate\n  some memory using GFP_KERNEL and allocation order less than or\n  equal to PAGE_ALLOC_COSTLY_ORDER.\n* __alloc_pages_internal() cannot find a free page so it invokes the\n  OOM killer.\n* The OOM killer attempts to kill a task, but the task is frozen, so\n  it doesn\u0027t die immediately.\n* __alloc_pages_internal() jumps to \u0027restart\u0027, unsuccessfully tries\n  to find a free page and invokes the OOM killer.\n* No progress can be made.\n\nAlthough it is now hard to trigger during hibernation due to the memory\nshrinking carried out by the hibernation code, it is theoretically\npossible to trigger during suspend after the memory shrinking has been\nremoved from that code path.  Moreover, since memory allocations are\ngoing to be used for the hibernation memory shrinking, it will be even\nmore likely to happen during hibernation.\n\nTo prevent it from happening, introduce the oom_killer_disabled switch\nthat will cause __alloc_pages_internal() to fail in the situations in\nwhich the OOM killer would have been called and make the freezer set\nthis switch after tasks have been successfully frozen.\n\n[akpm@linux-foundation.org: be nicer to the namespace]\nSigned-off-by: Rafael J. Wysocki \u003crjw@sisk.pl\u003e\nCc: Fengguang Wu \u003cfengguang.wu@gmail.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nAcked-by: Pavel Machek \u003cpavel@ucw.cz\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6484eb3e2a81807722c5f28efef94d8338b7b996",
      "tree": "10ce36f412c2ff0c7eb399af1a189f8e354f56db",
      "parents": [
        "b3c466ce512923298ae8c0121d3e9f397a3f1210"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Jun 16 15:31:54 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:32 2009 -0700"
      },
      "message": "page allocator: do not check NUMA node ID when the caller knows the node is valid\n\nCallers of alloc_pages_node() can optionally specify -1 as a node to mean\n\"allocate from the current node\".  However, a number of the callers in\nfast paths know for a fact their node is valid.  To avoid a comparison and\nbranch, this patch adds alloc_pages_exact_node() that only checks the nid\nwith VM_BUG_ON().  Callers that know their node is valid are then\nconverted.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nAcked-by: Paul Mundt \u003clethal@linux-sh.org\u003e\t[for the SLOB NUMA bits]\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b3c466ce512923298ae8c0121d3e9f397a3f1210",
      "tree": "ca6f360a6dbaaa0a71b9375fb57d544364532254",
      "parents": [
        "d239171e4f6efd58d7e423853056b1b6a74f1446"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Jun 16 15:31:53 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:32 2009 -0700"
      },
      "message": "page allocator: do not sanity check order in the fast path\n\nNo user of the allocator API should be passing in an order \u003e\u003d MAX_ORDER\nbut we check for it on each and every allocation.  Delete this check and\nmake it a VM_BUG_ON check further down the call path.\n\n[akpm@linux-foundation.org: s/VM_BUG_ON/WARN_ON_ONCE/]\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d239171e4f6efd58d7e423853056b1b6a74f1446",
      "tree": "3b0d96abf99e5add7bfc6236f745503b540bd350",
      "parents": [
        "6c0db4664b49417d80988953e69c323721353227"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Jun 16 15:31:52 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:32 2009 -0700"
      },
      "message": "page allocator: replace __alloc_pages_internal() with __alloc_pages_nodemask()\n\nThe start of a large patch series to clean up and optimise the page\nallocator.\n\nThe performance improvements are in a wide range depending on the exact\nmachine but the results I\u0027ve seen so fair are approximately;\n\nkernbench:\t0\tto\t 0.12% (elapsed time)\n\t\t0.49%\tto\t 3.20% (sys time)\naim9:\t\t-4%\tto\t30% (for page_test and brk_test)\ntbench:\t\t-1%\tto\t 4%\nhackbench:\t-2.5%\tto\t 3.45% (mostly within the noise though)\nnetperf-udp\t-1.34%  to\t 4.06% (varies between machines a bit)\nnetperf-tcp\t-0.44%  to\t 5.22% (varies between machines a bit)\n\nI haven\u0027t sysbench figures at hand, but previously they were within the\n-0.5% to 2% range.\n\nOn netperf, the client and server were bound to opposite number CPUs to\nmaximise the problems with cache line bouncing of the struct pages so I\nexpect different people to report different results for netperf depending\non their exact machine and how they ran the test (different machines, same\ncpus client/server, shared cache but two threads client/server, different\nsocket client/server etc).\n\nI also measured the vmlinux sizes for a single x86-based config with\nCONFIG_DEBUG_INFO enabled but not CONFIG_DEBUG_VM.  The core of the\n.config is based on the Debian Lenny kernel config so I expect it to be\nreasonably typical.\n\nThis patch:\n\n__alloc_pages_internal is the core page allocator function but essentially\nit is an alias of __alloc_pages_nodemask.  Naming a publicly available and\nexported function \"internal\" is also a big ugly.  This patch renames\n__alloc_pages_internal() to __alloc_pages_nodemask() and deletes the old\nnodemask function.\n\nWarning - This patch renames an exported symbol.  No kernel driver is\naffected by external drivers calling __alloc_pages_internal() should\nchange the call to __alloc_pages_nodemask() without any alteration of\nparameters.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "722f2a6c87f34ee0fd0130a8cf45f81e0705594a",
      "tree": "50b054df34d2731eb0ba0cf1a6c27e43e7eed428",
      "parents": [
        "7a0aeb14e18ad59394bd9bbc6e57fb345819e748",
        "45e3e1935e2857c54783291107d33323b3ef33c8"
      ],
      "author": {
        "name": "Vegard Nossum",
        "email": "vegard.nossum@gmail.com",
        "time": "Mon Jun 15 15:50:49 2009 +0200"
      },
      "committer": {
        "name": "Vegard Nossum",
        "email": "vegard.nossum@gmail.com",
        "time": "Mon Jun 15 15:50:49 2009 +0200"
      },
      "message": "Merge commit \u0027linus/master\u0027 into HEAD\n\nConflicts:\n\tMAINTAINERS\n\nSigned-off-by: Vegard Nossum \u003cvegard.nossum@gmail.com\u003e\n"
    },
    {
      "commit": "b1eeab67682a5e397aecf172046b3a8bd4808ae4",
      "tree": "c357b6ac1945dc8beecc2f8c4d84660ad8d35aae",
      "parents": [
        "9b5cab31897e9e89e36c0c2a89b16b93ff1a971a"
      ],
      "author": {
        "name": "Vegard Nossum",
        "email": "vegard.nossum@gmail.com",
        "time": "Tue Nov 25 16:55:53 2008 +0100"
      },
      "committer": {
        "name": "Vegard Nossum",
        "email": "vegard.nossum@gmail.com",
        "time": "Mon Jun 15 15:48:33 2009 +0200"
      },
      "message": "kmemcheck: add hooks for the page allocator\n\nThis adds support for tracking the initializedness of memory that\nwas allocated with the page allocator. Highmem requests are not\ntracked.\n\nCc: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nAcked-by: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\n\n[build fix for !CONFIG_KMEMCHECK]\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n\n[rebased for mainline inclusion]\nSigned-off-by: Vegard Nossum \u003cvegard.nossum@gmail.com\u003e\n"
    },
    {
      "commit": "2dff440525f8faba8836e9f05297b76f23b4af30",
      "tree": "9f15e1dc2da06dba97cd939e41f34342caf05097",
      "parents": [
        "f85612967c93b67b10dd240e3e8bf8a0eee9def7"
      ],
      "author": {
        "name": "Vegard Nossum",
        "email": "vegard.nossum@gmail.com",
        "time": "Sat May 31 15:56:17 2008 +0200"
      },
      "committer": {
        "name": "Vegard Nossum",
        "email": "vegard.nossum@gmail.com",
        "time": "Mon Jun 15 12:40:03 2009 +0200"
      },
      "message": "kmemcheck: add mm functions\n\nWith kmemcheck enabled, the slab allocator needs to do this:\n\n1. Tell kmemcheck to allocate the shadow memory which stores the status of\n   each byte in the allocation proper, e.g. whether it is initialized or\n   uninitialized.\n2. Tell kmemcheck which parts of memory that should be marked uninitialized.\n   There are actually a few more states, such as \"not yet allocated\" and\n   \"recently freed\".\n\nIf a slab cache is set up using the SLAB_NOTRACK flag, it will never return\nmemory that can take page faults because of kmemcheck.\n\nIf a slab cache is NOT set up using the SLAB_NOTRACK flag, callers can still\nrequest memory with the __GFP_NOTRACK flag. This does not prevent the page\nfaults from occuring, however, but marks the object in question as being\ninitialized so that no warnings will ever be produced for this object.\n\nIn addition to (and in contrast to) __GFP_NOTRACK, the\n__GFP_NOTRACK_FALSE_POSITIVE flag indicates that the allocation should\nnot be tracked _because_ it would produce a false positive. Their values\nare identical, but need not be so in the future (for example, we could now\nenable/disable false positives with a config option).\n\nParts of this patch were contributed by Pekka Enberg but merged for\natomicity.\n\nSigned-off-by: Vegard Nossum \u003cvegard.nossum@gmail.com\u003e\nSigned-off-by: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n\n[rebased for mainline inclusion]\nSigned-off-by: Vegard Nossum \u003cvegard.nossum@gmail.com\u003e\n"
    },
    {
      "commit": "7e85ee0c1d15ca5f8bff0f514f158eba1742dd87",
      "tree": "8f9c21f0df6bea88740d7dd48834ac9ffc238e93",
      "parents": [
        "eb91f1d0a531289e18f5587dc197d12a251c66a3"
      ],
      "author": {
        "name": "Pekka Enberg",
        "email": "penberg@cs.helsinki.fi",
        "time": "Fri Jun 12 14:03:06 2009 +0300"
      },
      "committer": {
        "name": "Pekka Enberg",
        "email": "penberg@cs.helsinki.fi",
        "time": "Fri Jun 12 18:53:33 2009 +0300"
      },
      "message": "slab,slub: don\u0027t enable interrupts during early boot\n\nAs explained by Benjamin Herrenschmidt:\n\n  Oh and btw, your patch alone doesn\u0027t fix powerpc, because it\u0027s missing\n  a whole bunch of GFP_KERNEL\u0027s in the arch code... You would have to\n  grep the entire kernel for things that check slab_is_available() and\n  even then you\u0027ll be missing some.\n\n  For example, slab_is_available() didn\u0027t always exist, and so in the\n  early days on powerpc, we used a mem_init_done global that is set form\n  mem_init() (not perfect but works in practice). And we still have code\n  using that to do the test.\n\nTherefore, mask out __GFP_WAIT, __GFP_IO, and __GFP_FS in the slab allocators\nin early boot code to avoid enabling interrupts.\n\nSigned-off-by: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\n"
    },
    {
      "commit": "082edb7bf443eb8eda15b482d16ad9dd8137ad24",
      "tree": "167d8c2ca193af9161aded5f368f300981c59535",
      "parents": [
        "0b966252d9e5d95ec2d11e63d7e55b42913aa5b7"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Mar 13 23:43:37 2009 +1030"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Mar 13 14:35:31 2009 +0100"
      },
      "message": "numa, cpumask: move numa_node_id default implementation to topology.h\n\nImpact: cleanup, potential bugfix\n\nNot sure what changed to expose this, but clearly that numa_node_id()\ndoesn\u0027t belong in mmzone.h (the inline in gfp.h is probably overkill, too).\n\nIn file included from include/linux/topology.h:34,\n                 from arch/x86/mm/numa.c:2:\n/home/rusty/patches-cpumask/linux-2.6/arch/x86/include/asm/topology.h:64:1: warning: \"numa_node_id\" redefined\nIn file included from include/linux/topology.h:32,\n                 from arch/x86/mm/numa.c:2:\ninclude/linux/mmzone.h:770:1: warning: this is the location of the previous definition\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: Mike Travis \u003ctravis@sgi.com\u003e\nLKML-Reference: \u003c200903132343.37661.rusty@rustcorp.com.au\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "3c1d43787b48c798f44dc32a6e6deb5ca2da3e68",
      "tree": "587da6031de37a716839656cf4fe4245aba2afb4",
      "parents": [
        "e5991371ee0d1c0ce19e133c6f9075b49c5b4ae8"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh@veritas.com",
        "time": "Tue Jan 06 14:39:23 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 06 15:59:01 2009 -0800"
      },
      "message": "mm: remove GFP_HIGHUSER_PAGECACHE\n\nGFP_HIGHUSER_PAGECACHE is just an alias for GFP_HIGHUSER_MOVABLE, making\nthat harder to track down: remove it, and its out-of-work brothers\nGFP_NOFS_PAGECACHE and GFP_USER_PAGECACHE.\n\nSince we\u0027re making that improvement to hotremove_migrate_alloc(), I think\nwe can now also remove one of the \"o\"s from its comment.\n\nSigned-off-by: Hugh Dickins \u003chugh@veritas.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2be0ffe2b29bd31d3debd0877797892ff2d91f4c",
      "tree": "7f6e56b3fc5a721296851448e3facf821ef543dd",
      "parents": [
        "3560e249abda6bee41a07a7bf0383a6e193e2839"
      ],
      "author": {
        "name": "Timur Tabi",
        "email": "timur@freescale.com",
        "time": "Wed Jul 23 21:28:11 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 24 10:47:20 2008 -0700"
      },
      "message": "mm: add alloc_pages_exact() and free_pages_exact()\n\nalloc_pages_exact() is similar to alloc_pages(), except that it allocates\nthe minimum number of pages to fulfill the request.  This is useful if you\nwant to allocate a very large buffer that is slightly larger than an even\npower-of-two number of pages.  In that case, alloc_pages() will waste a\nlot of memory.\n\nI have a video driver that wants to allocate a 5MB buffer.  alloc_pages()\nwiill waste 3MB of physically-contiguous memory.\n\nSigned-off-by: Timur Tabi \u003ctimur@freescale.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e4048e5dc4aecec670f48ed007a28779f09cebd6",
      "tree": "eb22cb47f1885d8006a85c5142d6e7f9d115de49",
      "parents": [
        "efe9e77997f6e0306fedc6efa98df491dcf5ecb0"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Wed Jul 23 21:27:01 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 24 10:47:14 2008 -0700"
      },
      "message": "page allocator: inline some __alloc_pages() wrappers\n\nTwo zonelist patch series rewrote __page_alloc() largely.  Now, it is just\na wrapper function.  Inlining them will save a function call.\n\n[akpm@linux-foundation.org: export __alloc_pages_internal]\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ab857d09386661145924c9403792234aeca4bdff",
      "tree": "02027a87f919d721615664910b415f21bd88e9c5",
      "parents": [
        "86051ca5eaf5e560113ec7673462804c54284456"
      ],
      "author": {
        "name": "Nishanth Aravamudan",
        "email": "nacc@us.ibm.com",
        "time": "Tue Apr 29 00:58:23 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Apr 29 08:05:58 2008 -0700"
      },
      "message": "mm: fix misleading __GFP_REPEAT related comments\n\nThe definition and use of __GFP_REPEAT, __GFP_NOFAIL and __GFP_NORETRY in the\ncore VM have somewhat differing comments as to their actual semantics.\nAnnoyingly, the flags definition has inline and header comments, which might\nbe interpreted as not being equivalent.  Just add references to the header\ncomments in the inline ones so they don\u0027t go out of sync in the future.  In\ntheir use in __alloc_pages() clarify that the current implementation treats\nlow-order allocations and __GFP_REPEAT allocations as distinct cases.\n\nTo clarify, the flags\u0027 semantics are:\n\n__GFP_NORETRY means try no harder than one run through __alloc_pages\n\n__GFP_REPEAT means __GFP_NOFAIL\n\n__GFP_NOFAIL means repeat forever\n\norder \u003c\u003d PAGE_ALLOC_COSTLY_ORDER means __GFP_NOFAIL\n\nSigned-off-by: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8cece85ec744bdc7ea0fc2d33f65b3f031c28468",
      "tree": "f11f84a37cf53f4db78d12b6372b7fe105ddccf5",
      "parents": [
        "2309f9e6fe3f1de661eab9613f7903ab4420c753"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Mon Apr 28 02:13:36 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 28 08:58:26 2008 -0700"
      },
      "message": "mm: fix broken gfp_zone with __GFP_THISNODE\n\nThis hack, \"base \u003d MAX_NR_ZONES\", at __GFP_THISNODE was used for old\nzonliests.\n\nNow, new zonelist[] have a list for __GFP_THISNODE and this hack is incorrect.\nShould be removed.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: 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": "19770b32609b6bf97a3dece2529089494cbfc549",
      "tree": "3b5922d1b20aabdf929bde9309f323841717747a",
      "parents": [
        "dd1a239f6f2d4d3eedd318583ec319aa145b324c"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Mon Apr 28 02:12:18 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 28 08:58:19 2008 -0700"
      },
      "message": "mm: filter based on a nodemask as well as a gfp_mask\n\nThe MPOL_BIND policy creates a zonelist that is used for allocations\ncontrolled by that mempolicy.  As the per-node zonelist is already being\nfiltered based on a zone id, this patch adds a version of __alloc_pages() that\ntakes a nodemask for further filtering.  This eliminates the need for\nMPOL_BIND to create a custom zonelist.\n\nA positive benefit of this is that allocations using MPOL_BIND now use the\nlocal node\u0027s distance-ordered zonelist instead of a custom node-id-ordered\nzonelist.  I.e., pages will be allocated from the closest allowed node with\navailable memory.\n\n[Lee.Schermerhorn@hp.com: Mempolicy: update stale documentation and comments]\n[Lee.Schermerhorn@hp.com: Mempolicy: make dequeue_huge_page_vma() obey MPOL_BIND nodemask]\n[Lee.Schermerhorn@hp.com: Mempolicy: make dequeue_huge_page_vma() obey MPOL_BIND nodemask rework]\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "54a6eb5c4765aa573a030ceeba2c14e3d2ea5706",
      "tree": "547176a090beb787722a153cf2b8b942dc0e68db",
      "parents": [
        "18ea7e710d2452fa726814a406779188028cf1bf"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Mon Apr 28 02:12:16 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 28 08:58:18 2008 -0700"
      },
      "message": "mm: use two zonelist that are filtered by GFP mask\n\nCurrently a node has two sets of zonelists, one for each zone type in the\nsystem and a second set for GFP_THISNODE allocations.  Based on the zones\nallowed by a gfp mask, one of these zonelists is selected.  All of these\nzonelists consume memory and occupy cache lines.\n\nThis patch replaces the multiple zonelists per-node with two zonelists.  The\nfirst contains all populated zones in the system, ordered by distance, for\nfallback allocations when the target/preferred node has no free pages.  The\nsecond contains all populated zones in the node suitable for GFP_THISNODE\nallocations.\n\nAn iterator macro is introduced called for_each_zone_zonelist() that interates\nthrough each zone allowed by the GFP flags in the selected zonelist.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "0e88460da6ab7bb6a7ef83675412ed5b6315d741",
      "tree": "1feb4de2362e4998a0deeab66af1efb9c7b8bb34",
      "parents": [
        "dac1d27bc8d5ca636d3014ecfdf94407031d1970"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Mon Apr 28 02:12:14 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 28 08:58:18 2008 -0700"
      },
      "message": "mm: introduce node_zonelist() for accessing the zonelist for a GFP mask\n\nIntroduce a node_zonelist() helper function.  It is used to lookup the\nappropriate zonelist given a node and a GFP mask.  The patch on its own is a\ncleanup but it helps clarify parts of the two-zonelist-per-node patchset.  If\nnecessary, it can be merged with the next patch in this set without problems.\n\nReviewed-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "488514d1798289f56f80ed018e246179fe500383",
      "tree": "e68d9f703dcbceed0cc08b03014d109d7ec3acd4",
      "parents": [
        "e92adcba261fd391591bb63c1703185a04a41554"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Mon Apr 28 02:12:05 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 28 08:58:17 2008 -0700"
      },
      "message": "Remove set_migrateflags()\n\nMigrate flags must be set on slab creation as agreed upon when the antifrag\nlogic was reviewed.  Otherwise some slabs of a slabcache will end up in the\nunmovable and others in the reclaimable section depending on which flag was\nactive when a new slab page was allocated.\n\nThis likely slid in somehow when antifrag was merged. Remove it.\n\nThe buffer_heads are always allocated with __GFP_RECLAIMABLE because the\nSLAB_RECLAIM_ACCOUNT option is set.  The set_migrateflags() never had any\neffect there.\n\nRadix tree allocations are not directly reclaimable but they are allocated\nwith __GFP_RECLAIMABLE set on each allocation.  We now set\nSLAB_RECLAIM_ACCOUNT on radix tree slab creation making sure that radix\ntree slabs are consistently placed in the reclaimable section.  Radix tree\nslabs will also be accounted as such.\n\nThere is then no user left of set_migratepages. So remove it.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b3c97528689619fc66569b30bf83d09d9929521a",
      "tree": "91dc53590deab88c9bf255c2b5cbd74bdbc36de1",
      "parents": [
        "aa02cd2d9bd1e24a230bd66a0a741b984d03915a"
      ],
      "author": {
        "name": "Harvey Harrison",
        "email": "harvey.harrison@gmail.com",
        "time": "Wed Feb 13 15:03:15 2008 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed Feb 13 16:21:18 2008 -0800"
      },
      "message": "include/linux: Remove all users of FASTCALL() macro\n\nFASTCALL() is always expanded to empty, remove it.\n\n[akpm@linux-foundation.org: coding-style fixes]\nSigned-off-by: Harvey Harrison \u003charvey.harrison@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": "9f8f2172537de7af0b0fbd33502d18d52b1339bc",
      "tree": "273c86583ed0295059c5526d3bd6927520a20add",
      "parents": [
        "e2848a0efedef4dad52d1334d37f8719cd6268fd"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Mon Feb 04 22:29:11 2008 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Feb 05 09:44:17 2008 -0800"
      },
      "message": "Page allocator: clean up pcp draining functions\n\n- Add comments explaing how drain_pages() works.\n\n- Eliminate useless functions\n\n- Rename drain_all_local_pages to drain_all_pages(). It does drain\n  all pages not only those of the local processor.\n\n- Eliminate useless interrupt off / on sequences. drain_pages()\n  disables interrupts on its own. The execution thread is\n  pinned to processor by the caller. So there is no need to\n  disable interrupts.\n\n- Put drain_all_pages() declaration in gfp.h and remove the\n  declarations from suspend.h and from mm/memory_hotplug.c\n\n- Make software suspend call drain_all_pages(). The draining\n  of processor local pages is may not the right approach if\n  software suspend wants to support SMP. If they call drain_all_pages\n  then we can make drain_pages() static.\n\n[akpm@linux-foundation.org: fix build]\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: \"Rafael J. Wysocki\" \u003crjw@sisk.pl\u003e\nCc: Daniel Walker \u003cdwalker@mvista.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "467c996c1e1910633fa8e7adc9b052aa3ed5f97c",
      "tree": "09e0e70160386be1bdaa12801afddf287e12c8a1",
      "parents": [
        "d9c2340052278d8eb2ffb16b0484f8f794def4de"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Oct 16 01:26:02 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Oct 16 09:43:00 2007 -0700"
      },
      "message": "Print out statistics in relation to fragmentation avoidance to /proc/pagetypeinfo\n\nThis patch provides fragmentation avoidance statistics via /proc/pagetypeinfo.\n The information is collected only on request so there is no runtime overhead.\n The statistics are in three parts:\n\nThe first part prints information on the size of blocks that pages are\nbeing grouped on and looks like\n\nPage block order: 10\nPages per block:  1024\n\nThe second part is a more detailed version of /proc/buddyinfo and looks like\n\nFree pages count per migrate type at order       0      1      2      3      4      5      6      7      8      9     10\nNode    0, zone      DMA, type    Unmovable      0      0      0      0      0      0      0      0      0      0      0\nNode    0, zone      DMA, type  Reclaimable      1      0      0      0      0      0      0      0      0      0      0\nNode    0, zone      DMA, type      Movable      0      0      0      0      0      0      0      0      0      0      0\nNode    0, zone      DMA, type      Reserve      0      4      4      0      0      0      0      1      0      1      0\nNode    0, zone   Normal, type    Unmovable    111      8      4      4      2      3      1      0      0      0      0\nNode    0, zone   Normal, type  Reclaimable    293     89      8      0      0      0      0      0      0      0      0\nNode    0, zone   Normal, type      Movable      1      6     13      9      7      6      3      0      0      0      0\nNode    0, zone   Normal, type      Reserve      0      0      0      0      0      0      0      0      0      0      4\n\nThe third part looks like\n\nNumber of blocks type     Unmovable  Reclaimable      Movable      Reserve\nNode 0, zone      DMA            0            1            2            1\nNode 0, zone   Normal            3           17           94            4\n\nTo walk the zones within a node with interrupts disabled, walk_zones_in_node()\nis introduced and shared between /proc/buddyinfo, /proc/zoneinfo and\n/proc/pagetypeinfo to reduce code duplication.  It seems specific to what\nvmstat.c requires but could be broken out as a general utility function in\nmmzone.c if there were other other potential users.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: Andy Whitcroft \u003capw@shadowen.org\u003e\nAcked-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": "e12ba74d8ff3e2f73a583500d7095e406df4d093",
      "tree": "a0d3385b65f0b3e1e00b0bbf11b75e7538a93edb",
      "parents": [
        "c361be55b3128474aa66d31092db330b07539103"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Oct 16 01:25:52 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Oct 16 09:43:00 2007 -0700"
      },
      "message": "Group short-lived and reclaimable kernel allocations\n\nThis patch marks a number of allocations that are either short-lived such as\nnetwork buffers or are reclaimable such as inode allocations.  When something\nlike updatedb is called, long-lived and unmovable kernel allocations tend to\nbe spread throughout the address space which increases fragmentation.\n\nThis patch groups these allocations together as much as possible by adding a\nnew MIGRATE_TYPE.  The MIGRATE_RECLAIMABLE type is for allocations that can be\nreclaimed on demand, but not moved.  i.e.  they can be migrated by deleting\nthem and re-reading the information from elsewhere.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Andy Whitcroft \u003capw@shadowen.org\u003e\nCc: 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": "6cb062296f73e74768cca2f3eaf90deac54de02d",
      "tree": "1572139653a6fc97cdffd06f2c1bfa650da2ce03",
      "parents": [
        "58c0a4a7864b2dad6da4090813322fcd29a11c92"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Tue Oct 16 01:25:41 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Oct 16 09:42:59 2007 -0700"
      },
      "message": "Categorize GFP flags\n\nThe function of GFP_LEVEL_MASK seems to be unclear.  In order to clear up\nthe mystery we get rid of it and replace GFP_LEVEL_MASK with 3 sets of GFP\nflags:\n\nGFP_RECLAIM_MASK\tFlags used to control page allocator reclaim behavior.\n\nGFP_CONSTRAINT_MASK\tFlags used to limit where allocations can occur.\n\nGFP_SLAB_BUG_MASK\tFlags that the slab allocator BUG()s on.\n\nThese replace the uses of GFP_LEVEL mask in the slab allocators and in\nvmalloc.c.\n\nThe use of the flags not included in these sets may occur as a result of a\nslab allocation standing in for a page allocation when constructing scatter\ngather lists.  Extraneous flags are cleared and not passed through to the\npage allocator.  __GFP_MOVABLE/RECLAIMABLE, __GFP_COLD and __GFP_COMP will\nnow be ignored if passed to a slab allocator.\n\nChange the allocation of allocator meta data in SLAB and vmalloc to not\npass through flags listed in GFP_CONSTRAINT_MASK.  SLAB already removes the\n__GFP_THISNODE flag for such allocations.  Generalize that to also cover\nvmalloc.  The use of GFP_CONSTRAINT_MASK also includes __GFP_HARDWALL.\n\nThe impact of allocator metadata placement on access latency to the\ncachelines of the object itself is minimal since metadata is only\nreferenced on alloc and free.  The attempt is still made to place the meta\ndata optimally but we consistently allow fallback both in SLAB and vmalloc\n(SLUB does not need to allocate metadata like that).\n\nAllocator metadata may serve multiple in kernel users and thus should not\nbe subject to the limitations arising from a single allocation context.\n\n[akpm@linux-foundation.org: fix fallback_alloc()]\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": "523b945855a1427000ffc707c610abe5947ae607",
      "tree": "2d84b5b6822a2a20bfd79146c08ce06ac8c80b9b",
      "parents": [
        "633c0666b5a5c41c376a5a7e4304d638dc48c1b9"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Tue Oct 16 01:25:37 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Oct 16 09:42:59 2007 -0700"
      },
      "message": "Memoryless nodes: Fix GFP_THISNODE behavior\n\nGFP_THISNODE checks that the zone selected is within the pgdat (node) of the\nfirst zone of a nodelist.  That only works if the node has memory.  A\nmemoryless node will have its first node on another pgdat (node).\n\nGFP_THISNODE currently will return simply memory on the first pgdat.  Thus it\nis returning memory on other nodes.  GFP_THISNODE should fail if there is no\nlocal memory on a node.\n\nAdd a new set of zonelists for each node that only contain the nodes that\nbelong to the zones itself so that no fallback is possible.\n\nThen modify gfp_type to pickup the right zone based on the presence of\n__GFP_THISNODE.\n\nDrop the existing GFP_THISNODE checks from the page_allocators hot path.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nAcked-by: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nTested-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nAcked-by: Bob Picco \u003cbob.picco@hp.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmel@skynet.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2a1e274acf0b1c192face19a4be7c12d4503eaaf",
      "tree": "f7e98e1fe19d38bb10bf178fb8f8ed1789b659b2",
      "parents": [
        "769848c03895b63e5662eb7e4ec8c4866f7d0183"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Jul 17 04:03:12 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:22:59 2007 -0700"
      },
      "message": "Create the ZONE_MOVABLE zone\n\nThe following 8 patches against 2.6.20-mm2 create a zone called ZONE_MOVABLE\nthat is only usable by allocations that specify both __GFP_HIGHMEM and\n__GFP_MOVABLE.  This has the effect of keeping all non-movable pages within a\nsingle memory partition while allowing movable allocations to be satisfied\nfrom either partition.  The patches may be applied with the list-based\nanti-fragmentation patches that groups pages together based on mobility.\n\nThe size of the zone is determined by a kernelcore\u003d parameter specified at\nboot-time.  This specifies how much memory is usable by non-movable\nallocations and the remainder is used for ZONE_MOVABLE.  Any range of pages\nwithin ZONE_MOVABLE can be released by migrating the pages or by reclaiming.\n\nWhen selecting a zone to take pages from for ZONE_MOVABLE, there are two\nthings to consider.  First, only memory from the highest populated zone is\nused for ZONE_MOVABLE.  On the x86, this is probably going to be ZONE_HIGHMEM\nbut it would be ZONE_DMA on ppc64 or possibly ZONE_DMA32 on x86_64.  Second,\nthe amount of memory usable by the kernel will be spread evenly throughout\nNUMA nodes where possible.  If the nodes are not of equal size, the amount of\nmemory usable by the kernel on some nodes may be greater than others.\n\nBy default, the zone is not as useful for hugetlb allocations because they are\npinned and non-migratable (currently at least).  A sysctl is provided that\nallows huge pages to be allocated from that zone.  This means that the huge\npage pool can be resized to the size of ZONE_MOVABLE during the lifetime of\nthe system assuming that pages are not mlocked.  Despite huge pages being\nnon-movable, we do not introduce additional external fragmentation of note as\nhuge pages are always the largest contiguous block we care about.\n\nCredit goes to Andy Whitcroft for catching a large variety of problems during\nreview of the patches.\n\nThis patch creates an additional zone, ZONE_MOVABLE.  This zone is only usable\nby allocations which specify both __GFP_HIGHMEM and __GFP_MOVABLE.  Hot-added\nmemory continues to be placed in their existing destination as there is no\nmechanism to redirect them to a specific zone.\n\n[y-goto@jp.fujitsu.com: Fix section mismatch of memory hotplug related code]\n[akpm@linux-foundation.org: various fixes]\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Andy Whitcroft \u003capw@shadowen.org\u003e\nSigned-off-by: Yasunori Goto \u003cy-goto@jp.fujitsu.com\u003e\nCc: William Lee Irwin III \u003cwli@holomorphy.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "769848c03895b63e5662eb7e4ec8c4866f7d0183",
      "tree": "8911c7c312c8b8b172795fa2874c8162e1d3d15a",
      "parents": [
        "a32ea1e1f925399e0d81ca3f7394a44a6dafa12c"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Jul 17 04:03:05 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:22:59 2007 -0700"
      },
      "message": "Add __GFP_MOVABLE for callers to flag allocations from high memory that may be migrated\n\nIt is often known at allocation time whether a page may be migrated or not.\nThis patch adds a flag called __GFP_MOVABLE and a new mask called\nGFP_HIGH_MOVABLE.  Allocations using the __GFP_MOVABLE can be either migrated\nusing the page migration mechanism or reclaimed by syncing with backing\nstorage and discarding.\n\nAn API function very similar to alloc_zeroed_user_highpage() is added for\n__GFP_MOVABLE allocations called alloc_zeroed_user_highpage_movable().  The\nflags used by alloc_zeroed_user_highpage() are not changed because it would\nchange the semantics of an existing API.  After this patch is applied there\nare no in-kernel users of alloc_zeroed_user_highpage() so it probably should\nbe marked deprecated if this patch is merged.\n\nNote that this patch includes a minor cleanup to the use of __GFP_ZERO in\nshmem.c to keep all flag modifications to inode-\u003emapping in the\nshmem_dir_alloc() helper function.  This clean-up suggestion is courtesy of\nHugh Dickens.\n\nAdditional credit goes to Christoph Lameter and Linus Torvalds for shaping the\nconcept.  Credit to Hugh Dickens for catching issues with shmem swap vector\nand ramfs allocations.\n\n[akpm@linux-foundation.org: build fix]\n[hugh@veritas.com: __GFP_ZERO cleanup]\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Andy Whitcroft \u003capw@shadowen.org\u003e\nCc: 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": "4037d452202e34214e8a939fa5621b2b3bbb45b7",
      "tree": "31b59c0ca94fba4d53b6738b0bad3d1e9fde3063",
      "parents": [
        "77461ab33229d48614402decfb1b2eaa6d446861"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Wed May 09 02:35:14 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed May 09 12:30:56 2007 -0700"
      },
      "message": "Move remote node draining out of slab allocators\n\nCurrently the slab allocators contain callbacks into the page allocator to\nperform the draining of pagesets on remote nodes.  This requires SLUB to have\na whole subsystem in order to be compatible with SLAB.  Moving node draining\nout of the slab allocators avoids a section of code in SLUB.\n\nMove the node draining so that is is done when the vm statistics are updated.\nAt that point we are already touching all the cachelines with the pagesets of\na processor.\n\nAdd a expire counter there.  If we have to update per zone or global vm\nstatistics then assume that the pageset will require subsequent draining.\n\nThe expire counter will be decremented on each vm stats update pass until it\nreaches zero.  Then we will drain one batch from the pageset.  The draining\nwill cause vm counter updates which will then cause another expiration until\nthe pcp is empty.  So we will drain a batch every 3 seconds.\n\nNote that remote node draining is a somewhat esoteric feature that is required\non large NUMA systems because otherwise significant portions of system memory\ncan become trapped in pcp queues.  The number of pcp is determined by the\nnumber of processors and nodes in a system.  A system with 4 processors and 2\nnodes has 8 pcps which is okay.  But a system with 1024 processors and 512\nnodes has 512k pcps with a high potential for large amount of memory being\ncaught in them.\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": "cfce66047f1893cb7d3abb0d53e65cbbd8d605f0",
      "tree": "b6e533a6b3deee686c42abf6c9117154548c0aaf",
      "parents": [
        "4f104934591ed98534b3a4c3d17d972b790e9c42"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Sun May 06 14:50:17 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Mon May 07 12:12:57 2007 -0700"
      },
      "message": "Slab allocators: remove useless __GFP_NO_GROW flag\n\nThere is no user remaining and I have never seen any use of that flag.\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": "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": "f2e97df669d32f74152336f46e4e0e328b993c57",
      "tree": "ed80999a8c4f60918525b1638008b8c748808a60",
      "parents": [
        "8a5ab4157b3933d4fa29a1612879ab08f681041a"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@ftp.linux.org.uk",
        "time": "Fri Feb 09 16:38:55 2007 +0000"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Fri Feb 09 09:14:06 2007 -0800"
      },
      "message": "[PATCH] in non-NUMA case mark GFP_THISNODE gfp_t\n\n... operations with it are OK as is, but flags \u0026 ~0 will have no idea that\nthis ~0 is meant to be ~gfp_t.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "cc102509074bba0316f2b5deebd7ef4447da295e",
      "tree": "44ac5fc0c0dd7a24e8925e680a03361f4722a5a6",
      "parents": [
        "7602bdf2fd14a40dd9b104e516fdc05e1bd17952"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Wed Dec 06 20:32:00 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Thu Dec 07 08:39:21 2006 -0800"
      },
      "message": "[PATCH] mm: add arch_alloc_page\n\nAdd an arch_alloc_page to match arch_free_page.\n\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": "77f700dab4c05f8ee17584ec869672796d7bcb87",
      "tree": "f51447c092beaa02b91ca2ce0c61ee511e48002f",
      "parents": [
        "08e0f6a9705376732fd3bc9bf8ba97a6b5211eb1"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Wed Sep 27 01:50:07 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Sep 27 08:26:12 2006 -0700"
      },
      "message": "[PATCH] Disable GFP_THISNODE in the non-NUMA case\n\nGFP_THISNODE must be set to 0 in the non numa case otherwise we disable retry\nand warnings for failing allocations in the SMP and UP case.\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": "980128f223fa3c75e3ebdde650c9f1bcabd4c0a2",
      "tree": "b0fa592cf621cebc674b9ec1a4ab4e2558ec7aaf",
      "parents": [
        "fbd98167e653535c5816be154f2149c0efa7757d"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Mon Sep 25 23:31:46 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Sep 26 08:48:50 2006 -0700"
      },
      "message": "[PATCH] Define easier to handle GFP_THISNODE\n\nIn many places we will need to use the same combination of flags.  Specify\na single GFP_THISNODE definition for ease of use in gfp.h.\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": "9b819d204cf602eab1a53a9ec4b8d2ca51e02a1d",
      "tree": "9442bf01a00a93a8ae54462fb4878588e1b2a6bf",
      "parents": [
        "056c62418cc639bf2fe962c6a6ee56054b838bc7"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Mon Sep 25 23:31:40 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Sep 26 08:48:50 2006 -0700"
      },
      "message": "[PATCH] Add __GFP_THISNODE to avoid fallback to other nodes and ignore cpuset/memory policy restrictions\n\nAdd a new gfp flag __GFP_THISNODE to avoid fallback to other nodes.  This\nflag is essential if a kernel component requires memory to be located on a\ncertain node.  It will be needed for alloc_pages_node() to force allocation\non the indicated node and for alloc_pages() to force allocation on the\ncurrent node.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: Andy Whitcroft \u003capw@shadowen.org\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\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": "4e4785bcf0c8503224fa6c17d8e0228de781bff6",
      "tree": "002c0a051f7f4de4548ca0a8394b664f64c63627",
      "parents": [
        "b9b15780f808efa2c897f337644ba7a2bec03ecc"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Mon Sep 25 23:31:17 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Sep 26 08:48:47 2006 -0700"
      },
      "message": "[PATCH] mempolicies: fix policy_zone check\n\nThere is a check in zonelist_policy that compares pieces of the bitmap\nobtained from a gfp mask via GFP_ZONETYPES with a zone number in function\nzonelist_policy().\n\nThe bitmap is an ORed mask of __GFP_DMA, __GFP_DMA32 and __GFP_HIGHMEM.\nThe policy_zone is a zone number with the possible values of ZONE_DMA,\nZONE_DMA32, ZONE_HIGHMEM and ZONE_NORMAL. These are two different domains\nof values.\n\nFor some reason seemed to work before the zone reduction patchset (It\ndefinitely works on SGI boxes since we just have one zone and the check\ncannot fail).\n\nWith the zone reduction patchset this check definitely fails on systems\nwith two zones if the system actually has memory in both zones.\n\nThis is because ZONE_NORMAL is selected using no __GFP flag at\nall and thus gfp_zone(gfpmask) \u003d\u003d 0. ZONE_DMA is selected when __GFP_DMA\nis set. __GFP_DMA is 0x01.  So gfp_zone(gfpmask) \u003d\u003d 1.\n\npolicy_zone is set to ZONE_NORMAL (\u003d\u003d1) if ZONE_NORMAL and ZONE_DMA are\npopulated.\n\nFor ZONE_NORMAL gfp_zone(\u003cno _GFP_DMA\u003e) yields 0 which is \u003c\npolicy_zone(ZONE_NORMAL) and so policy is not applied to regular memory\nallocations!\n\nInstead gfp_zone(__GFP_DMA) \u003d\u003d 1 which results in policy being applied\nto DMA allocations!\n\nWhat we realy want in that place is to establish the highest allowable\nzone for a given gfp_mask. If the highest zone is higher or equal to the\npolicy_zone then memory policies need to be applied. We have such\na highest_zone() function in page_alloc.c.\n\nSo move the highest_zone() function from mm/page_alloc.c into\ninclude/linux/gfp.h.  On the way we simplify the function and use the new\nzone_type that was also introduced with the zone reduction patchset plus we\nalso specify the right type for the gfp flags parameter.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Lee Schermerhorn \u003cLee.Schermerhorn@hp.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": "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": "7b04d7170e9af805cac19f97b28fff10db897893",
      "tree": "f4b0de67af631c1a1099bcd35621ae7fff38af67",
      "parents": [
        "a5d2f46a97cf8e23f5da17dec50a972642ac409f"
      ],
      "author": {
        "name": "Jeff Dike",
        "email": "jdike@addtoit.com",
        "time": "Mon Apr 10 22:53:27 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Apr 11 06:18:35 2006 -0700"
      },
      "message": "[PATCH] Add GFP_NOWAIT\n\nIntroduce GFP_NOWAIT, as an alias for GFP_ATOMIC \u0026 ~__GFP_HIGH.\n\nThis also changes XFS, which is the only in-tree user of this idiom that I\ncould find.  The XFS piece is compile-tested only.\n\nSigned-off-by: Jeff Dike \u003cjdike@addtoit.com\u003e\nAcked-by: Nathan Scott \u003cnathans@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "8fce4d8e3b9e3cf47cc8afeb6077e22ab795d989",
      "tree": "4930be5756f7a3893717d38f443f6261f11a1f60",
      "parents": [
        "7b61fcda8a640bb87be23f9f09c1f24357b5c6e1"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@engr.sgi.com",
        "time": "Thu Mar 09 17:33:54 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Thu Mar 09 19:47:38 2006 -0800"
      },
      "message": "[PATCH] slab: Node rotor for freeing alien caches and remote per cpu pages.\n\nThe cache reaper currently tries to free all alien caches and all remote\nper cpu pages in each pass of cache_reap.  For a machines with large number\nof nodes (such as Altix) this may lead to sporadic delays of around ~10ms.\nInterrupts are disabled while reclaiming creating unacceptable delays.\n\nThis patch changes that behavior by adding a per cpu reap_node variable.\nInstead of attempting to free all caches, we free only one alien cache and\nthe per cpu pages from one remote node.  That reduces the time spend in\ncache_reap.  However, doing so will lengthen the time it takes to\ncompletely drain all remote per cpu pagesets and all alien caches.  The\ntime needed will grow with the number of nodes in the system.  All caches\nare drained when they overflow their respective capacity.  So the drawback\nhere is only that a bit of memory may be wasted for awhile longer.\n\nDetails:\n\n1. Rename drain_remote_pages to drain_node_pages to allow the specification\n   of the node to drain of pcp pages.\n\n2. Add additional functions init_reap_node, next_reap_node for NUMA\n   that manage a per cpu reap_node counter.\n\n3. Add a reap_alien function that reaps only from the current reap_node.\n\nFor us this seems to be a critical issue.  Holdoffs of an average of ~7ms\ncause some HPC benchmarks to slow down significantly.  F.e.  NAS parallel\nslows down dramatically.  NAS parallel has a 12-16 seconds runtime w/o rotor\ncompared to 5.8 secs with the rotor patches.  It gets down to 5.05 secs with\nthe additional interrupt holdoff reductions.\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": "819a692804a8d2d42b7bb033d2650dba47622149",
      "tree": "a3b614679c0ee42bec418c933d96e194884031d1",
      "parents": [
        "1584b89c921acefe88881f08d836d80f00600a84"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@suse.de",
        "time": "Wed Jan 11 22:43:45 2006 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Jan 11 19:04:51 2006 -0800"
      },
      "message": "[PATCH] x86_64: Handle unknown node (-1) in alloc_pages_node\n\nFollowing kmalloc_node.\n\nNeeded for another patch to return -1 for unknown nodes in x86-64.\n\nCc: Christoph Lameter \u003cclameter@engr.sgi.com\u003e\nCc: kiran@scalex86.org\nSigned-off-by: Andi Kleen \u003cak@suse.de\u003e\n[ Changed 0 to numa_node_id() on suggestion by Christoph Lameter ]\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "4eac915d02453e81a32595cd7423492c81337a26",
      "tree": "2c652730cdf2cb0015cf59a8f75506c917685091",
      "parents": [
        "7365f3d169a1eae00e713c1a4eea90e86415dcc5"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Wed Jan 11 12:17:19 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Jan 11 18:42:09 2006 -0800"
      },
      "message": "[PATCH] mm: gfp_atomic comments\n\nClarify in comments that GFP_ATOMIC means both \"don\u0027t sleep\" and \"use\nemergency pools\", hence both ALLOC_HARDER and ALLOC_HIGH.\n\nSigned-off-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": "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": "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": "2d6c666e8704cf06267f29a4fa3d2cf823469c38",
      "tree": "c53db43c6e936ae44f232ab5f04dfc6900230190",
      "parents": [
        "7fb1d9fca5c6e3b06773b69165a73f3fb786b8ee"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Sun Nov 13 16:06:44 2005 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Nov 13 18:14:12 2005 -0800"
      },
      "message": "[PATCH] mm: gfp_noreclaim cleanup\n\nRemove last remnant of the defunct early reclaim page logic, the no longer\nused __GFP_NORECLAIM flag bit.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nAcked-by: Martin Hicks \u003cmort@bork.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "af4ca457eaf2d6682059c18463eb106e2ce58198",
      "tree": "399ca5ab3b15d723a6aefd04c764a2a06089ed06",
      "parents": [
        "434f1d10c1adb6c2e333d501ce1e42be610e0723"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Oct 21 02:55:38 2005 -0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Oct 28 08:16:46 2005 -0700"
      },
      "message": "[PATCH] gfp_t: infrastructure\n\nBeginning of gfp_t annotations:\n\n - -Wbitwise added to CHECKFLAGS\n - old __bitwise renamed to __bitwise__\n - __bitwise defined to either __bitwise__ or nothing, depending on\n   __CHECK_ENDIAN__ being defined\n - gfp_t switched from __nocast to __bitwise__\n - force cast to gfp_t added to __GFP_... constants\n - new helper - gfp_zone(); extracts zone bits out of gfp_t value and casts\n   the result to int\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "dd0fc66fb33cd610bc1a5db8a5e232d34879b4d7",
      "tree": "51f96a9db96293b352e358f66032e1f4ff79fafb",
      "parents": [
        "3b0e77bd144203a507eb191f7117d2c5004ea1de"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@ftp.linux.org.uk",
        "time": "Fri Oct 07 07:46:04 2005 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sat Oct 08 15:00:57 2005 -0700"
      },
      "message": "[PATCH] gfp flags annotations - part 1\n\n - added typedef unsigned int __nocast gfp_t;\n\n - replaced __nocast uses for gfp flags with gfp_t - it gives exactly\n   the same warnings as far as sparse is concerned, doesn\u0027t change\n   generated code (from gcc point of view we replaced unsigned int with\n   typedef) and documents what\u0027s going on far better.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "f90b1d2f1aaaa40c6519a32e69615edc25bb97d5",
      "tree": "f93fb812e31885956e23b6fe7839082e661b5119",
      "parents": [
        "a49335cceab8afb6603152fcc3f7d3b6677366ca"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Tue Sep 06 15:18:10 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Sep 07 16:57:40 2005 -0700"
      },
      "message": "[PATCH] cpusets: new __GFP_HARDWALL flag\n\nAdd another GFP flag: __GFP_HARDWALL.\n\nA subsequent \"cpuset_zone_allowed\" patch will use this flag to mark GFP_USER\nallocations, and distinguish them from GFP_KERNEL allocations.\n\nAllocations (such as GFP_USER) marked GFP_HARDWALL are constrainted to the\ncurrent tasks cpuset.  Other allocations (such as GFP_KERNEL) can steal from\nthe possibly larger nearest mem_exclusive cpuset ancestor, if memory is tight\non every node in the current cpuset.\n\nThis patch collides with Mel Gorman\u0027s patch to reduce fragmentation in the\nstandard buddy allocator, which adds two GFP flags.  This was discussed on\nlinux-mm in July.  Most likely, one of his flags for user reclaimable memory\ncan be the same as my __GFP_HARDWALL flag, under some generic name meaning its\nuser address space memory.\n\nSigned-off-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": "0db925af1db5f3dfe1691c35b39496e2baaff9c9",
      "tree": "bb9f827fa001b27f7a902abf174e8f0057c9df81",
      "parents": [
        "b84c21572de8a732062eff5592e3c4b3b1793bb8"
      ],
      "author": {
        "name": "Alexey Dobriyan",
        "email": "adobriyan@gmail.com",
        "time": "Thu Jul 07 17:56:58 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Thu Jul 07 18:23:46 2005 -0700"
      },
      "message": "[PATCH] propagate __nocast annotations\n\nSigned-off-by: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "4ae7c03943fca73f23bc0cdb938070f41b98101f",
      "tree": "d4b3a7369896af7aa7bb58d0d1699be91fc4aa0d",
      "parents": [
        "578c2fd6a7f378434655e5c480e23152a3994404"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@engr.sgi.com",
        "time": "Tue Jun 21 17:14:57 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Tue Jun 21 18:46:18 2005 -0700"
      },
      "message": "[PATCH] Periodically drain non local pagesets\n\nThe pageset array can potentially acquire a huge amount of memory on large\nNUMA systems.  F.e.  on a system with 512 processors and 256 nodes there\nwill be 256*512 pagesets.  If each pageset only holds 5 pages then we are\ntalking about 655360 pages.With a 16K page size on IA64 this results in\npotentially 10 Gigabytes of memory being trapped in pagesets.  The typical\ncases are much less for smaller systems but there is still the potential of\nmemory being trapped in off node pagesets.  Off node memory may be rarely\nused if local memory is available and so we may potentially have memory in\nseldom used pagesets without this patch.\n\nThe slab allocator flushes its per cpu caches every 2 seconds.  The\nfollowing patch flushes the off node pageset caches in the same way by\ntying into the slab flush.\n\nThe patch also changes /proc/zoneinfo to include the number of pages\ncurrently in each pageset.\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": "0c35bbadc59f5ed105c34471143eceb4c0dd9c95",
      "tree": "d82de388e8c0a38fa4b1d27ad372e84c9f01e013",
      "parents": [
        "753ee728964e5afb80c17659cc6c3a6fd0a42fe0"
      ],
      "author": {
        "name": "Martin Hicks",
        "email": "mort@sgi.com",
        "time": "Tue Jun 21 17:14:42 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Tue Jun 21 18:46:14 2005 -0700"
      },
      "message": "[PATCH] VM: add __GFP_NORECLAIM\n\nWhen using the early zone reclaim, it was noticed that allocating new pages\nthat should be spread across the whole system caused eviction of local pages.\n\nThis adds a new GFP flag to prevent early reclaim from happening during\ncertain allocation attempts.  The example that is implemented here is for page\ncache pages.  We want page cache pages to be spread across the whole system,\nand we don\u0027t want page cache pages to evict other pages to get local memory.\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": "b84a35be0285229b0a8a5e2e04d79360c5b75562",
      "tree": "3ff63fde8534eb615b408d047b461015781f6a5b",
      "parents": [
        "8e30f272a93ec9c1d5c305c5040dfaebc880499d"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "nickpiggin@yahoo.com.au",
        "time": "Sun May 01 08:58:36 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sun May 01 08:58:36 2005 -0700"
      },
      "message": "[PATCH] mempool: NOMEMALLOC and NORETRY\n\nMempools have 2 problems.\n\nThe first is that mempool_alloc can possibly get stuck in __alloc_pages\nwhen they should opt to fail, and take an element from their reserved pool.\n\nThe second is that it will happily eat emergency PF_MEMALLOC reserves\ninstead of going to their reserved pools.\n\nFix the first by passing __GFP_NORETRY in the allocation calls in\nmempool_alloc.  Fix the second by introducing a __GFP_MEMPOOL flag which\ndirects the page allocator not to allocate from the reserve pool.\n\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"
    }
  ]
}
