)]}'
{
  "log": [
    {
      "commit": "1f64d69c7ad2e48e697493e45590679f7a69b7b2",
      "tree": "62e6c3d1dd31e1f87992710cde6b0b905f482606",
      "parents": [
        "94c35de9a918665d9354efe2bafc29ba4b37497a"
      ],
      "author": {
        "name": "Dean Nelson",
        "email": "dnelson@redhat.com",
        "time": "Thu Dec 02 14:31:12 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Dec 02 14:51:14 2010 -0800"
      },
      "message": "mm/hugetlb.c: avoid double unlock_page() in hugetlb_fault()\n\nHave hugetlb_fault() call unlock_page(page) only if it had previously\ncalled lock_page(page).\n\nSetting CONFIG_DEBUG_VM\u003dy and then running the libhugetlbfs test suite,\nresulted in the tripping of VM_BUG_ON(!PageLocked(page)) in\nunlock_page() having been called by hugetlb_fault() when page \u003d\u003d\npagecache_page.  This patch remedied the problem.\n\nSigned-off-by: Dean Nelson \u003cdnelson@redhat.com\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "44e2aa937e698ea95dd86b2a4fabd734ef2c76db",
      "tree": "691e3e8b04f486fe8a13fc43587c0144275e7c70",
      "parents": [
        "70384dc6dcc6aa76762200262820bdb8b724ecd5"
      ],
      "author": {
        "name": "Dean Nelson",
        "email": "dnelson@redhat.com",
        "time": "Tue Oct 26 14:22:08 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 26 16:52:11 2010 -0700"
      },
      "message": "mm/hugetlb.c: add missing spin_lock() to hugetlb_cow()\n\nAdd missing spin_lock() of the page_table_lock before an error return in\nhugetlb_cow(). Callers of hugtelb_cow() expect it to be held upon return.\n\nSigned-off-by: Dean Nelson \u003cdnelson@redhat.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "aa50d3a7aa8147b9e14dc9d5972a5d2359db4ef8",
      "tree": "68fae5060333dcc24c17e9dd00a87bd760d883e9",
      "parents": [
        "6f39ce056ab2ab2d29b2fae4aed61ed0b485972f"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Wed Oct 06 21:45:00 2010 +0200"
      },
      "committer": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Fri Oct 08 09:32:46 2010 +0200"
      },
      "message": "Encode huge page size for VM_FAULT_HWPOISON errors\n\nThis fixes a problem introduced with the hugetlb hwpoison handling\n\nThe user space SIGBUS signalling wants to know the size of the hugepage\nthat caused a HWPOISON fault.\n\nUnfortunately the architecture page fault handlers do not have easy\naccess to the struct page.\n\nPass the information out in the fault error code instead.\n\nI added a separate VM_FAULT_HWPOISON_LARGE bit for this case and encode\nthe hpage index in some free upper bits of the fault code. The small\npage hwpoison keeps stays with the VM_FAULT_HWPOISON name to minimize\nchanges.\n\nAlso add code to hugetlb.h to convert that index into a page shift.\n\nWill be used in a further patch.\n\nCc: Naoya Horiguchi \u003cn-horiguchi@ah.jp.nec.com\u003e\nCc: fengguang.wu@intel.com\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\n"
    },
    {
      "commit": "d5bd910696a27e505078c19ba6b4143537570681",
      "tree": "a80f92016a158145315ba24999a05bb00bac6965",
      "parents": [
        "4e1c19750a8991c66e998a1915f2ad5c391bbd04"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Mon Sep 27 09:00:12 2010 +0200"
      },
      "committer": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Fri Oct 08 09:32:46 2010 +0200"
      },
      "message": "hugepage: move is_hugepage_on_freelist inside ifdef to avoid warning\n\nFixes warning reported by Stephen Rothwell\n\nmm/hugetlb.c:2950: warning: \u0027is_hugepage_on_freelist\u0027 defined but not used\n\nfor the !CONFIG_MEMORY_FAILURE case.\n\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\n"
    },
    {
      "commit": "8c6c2ecb44667f7204e9d2b89c4c1f42edc5a196",
      "tree": "82dcfddae57bc34c04be1b044b363534082d8ada",
      "parents": [
        "a9869b837c098732bad84939015c0eb391b23e41"
      ],
      "author": {
        "name": "Naoya Horiguchi",
        "email": "n-horiguchi@ah.jp.nec.com",
        "time": "Wed Sep 08 10:19:38 2010 +0900"
      },
      "committer": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Fri Oct 08 09:32:45 2010 +0200"
      },
      "message": "HWPOSION, hugetlb: recover from free hugepage error when !MF_COUNT_INCREASED\n\nCurrently error recovery for free hugepage works only for MF_COUNT_INCREASED.\nThis patch enables !MF_COUNT_INCREASED case.\n\nFree hugepages can be handled directly by alloc_huge_page() and\ndequeue_hwpoisoned_huge_page(), and both of them are protected\nby hugetlb_lock, so there is no race between them.\n\nNote that this patch defines the refcount of HWPoisoned hugepage\ndequeued from freelist is 1, deviated from present 0, thereby we\ncan avoid race between unpoison and memory failure on free hugepage.\nThis is reasonable because unlikely to free buddy pages, free hugepage\nis governed by hugetlbfs even after error handling finishes.\nAnd it also makes unpoison code added in the later patch cleaner.\n\nSigned-off-by: Naoya Horiguchi \u003cn-horiguchi@ah.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\n"
    },
    {
      "commit": "a9869b837c098732bad84939015c0eb391b23e41",
      "tree": "00ba63997470724e2704c9b7c995c91672b53c7b",
      "parents": [
        "6de2b1aab94355482bd2accdc115666509667458"
      ],
      "author": {
        "name": "Naoya Horiguchi",
        "email": "n-horiguchi@ah.jp.nec.com",
        "time": "Wed Sep 08 10:19:37 2010 +0900"
      },
      "committer": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Fri Oct 08 09:32:45 2010 +0200"
      },
      "message": "hugetlb: move refcounting in hugepage allocation inside hugetlb_lock\n\nCurrently alloc_huge_page() raises page refcount outside hugetlb_lock.\nbut it causes race when dequeue_hwpoison_huge_page() runs concurrently\nwith alloc_huge_page().\nTo avoid it, this patch moves set_page_refcounted() in hugetlb_lock.\n\nSigned-off-by: Naoya Horiguchi \u003cn-horiguchi@ah.jp.nec.com\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Christoph Lameter \u003ccl@linux.com\u003e\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\n"
    },
    {
      "commit": "6de2b1aab94355482bd2accdc115666509667458",
      "tree": "630a88dd5afe2c49a428179770140b22bbc9d7da",
      "parents": [
        "290408d4a25002f099efeee7b6a5778d431154d6"
      ],
      "author": {
        "name": "Naoya Horiguchi",
        "email": "n-horiguchi@ah.jp.nec.com",
        "time": "Wed Sep 08 10:19:36 2010 +0900"
      },
      "committer": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Fri Oct 08 09:32:45 2010 +0200"
      },
      "message": "HWPOISON, hugetlb: add free check to dequeue_hwpoison_huge_page()\n\nThis check is necessary to avoid race between dequeue and allocation,\nwhich can cause a free hugepage to be dequeued twice and get kernel unstable.\n\nSigned-off-by: Naoya Horiguchi \u003cn-horiguchi@ah.jp.nec.com\u003e\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Christoph Lameter \u003ccl@linux.com\u003e\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\n"
    },
    {
      "commit": "290408d4a25002f099efeee7b6a5778d431154d6",
      "tree": "c0a69a11ce963ef8a22607f5e782ae667ca5d538",
      "parents": [
        "0ebabb416f585ace711769057422af4bbc9d1110"
      ],
      "author": {
        "name": "Naoya Horiguchi",
        "email": "n-horiguchi@ah.jp.nec.com",
        "time": "Wed Sep 08 10:19:35 2010 +0900"
      },
      "committer": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Fri Oct 08 09:32:45 2010 +0200"
      },
      "message": "hugetlb: hugepage migration core\n\nThis patch extends page migration code to support hugepage migration.\nOne of the potential users of this feature is soft offlining which\nis triggered by memory corrected errors (added by the next patch.)\n\nTodo:\n- there are other users of page migration such as memory policy,\n  memory hotplug and memocy compaction.\n  They are not ready for hugepage support for now.\n\nChangeLog since v4:\n- define migrate_huge_pages()\n- remove changes on isolation/putback_lru_page()\n\nChangeLog since v2:\n- refactor isolate/putback_lru_page() to handle hugepage\n- add comment about race on unmap_and_move_huge_page()\n\nChangeLog since v1:\n- divide migration code path for hugepage\n- define routine checking migration swap entry for hugetlb\n- replace \"goto\" with \"if/else\" in remove_migration_pte()\n\nSigned-off-by: Naoya Horiguchi \u003cn-horiguchi@ah.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\n"
    },
    {
      "commit": "0ebabb416f585ace711769057422af4bbc9d1110",
      "tree": "d23d66033fdaefec9c2b4051f108b948c5389d0e",
      "parents": [
        "bf50bab2b34483316162443587b8467952e07730"
      ],
      "author": {
        "name": "Naoya Horiguchi",
        "email": "n-horiguchi@ah.jp.nec.com",
        "time": "Wed Sep 08 10:19:34 2010 +0900"
      },
      "committer": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Fri Oct 08 09:32:44 2010 +0200"
      },
      "message": "hugetlb: redefine hugepage copy functions\n\nThis patch modifies hugepage copy functions to have only destination\nand source hugepages as arguments for later use.\nThe old ones are renamed from copy_{gigantic,huge}_page() to\ncopy_user_{gigantic,huge}_page().\nThis naming convention is consistent with that between copy_highpage()\nand copy_user_highpage().\n\nChangeLog since v4:\n- add blank line between local declaration and code\n- remove unnecessary might_sleep()\n\nChangeLog since v2:\n- change copy_huge_page() from macro to inline dummy function\n  to avoid compile warning when !CONFIG_HUGETLB_PAGE.\n\nSigned-off-by: Naoya Horiguchi \u003cn-horiguchi@ah.jp.nec.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Christoph Lameter \u003ccl@linux.com\u003e\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\n"
    },
    {
      "commit": "bf50bab2b34483316162443587b8467952e07730",
      "tree": "d142f7427c6b82e11ff9333bf507aa24b9525e3e",
      "parents": [
        "998b4382c1d75a6fd3b0e334dae3ab33bd074d99"
      ],
      "author": {
        "name": "Naoya Horiguchi",
        "email": "n-horiguchi@ah.jp.nec.com",
        "time": "Wed Sep 08 10:19:33 2010 +0900"
      },
      "committer": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Fri Oct 08 09:32:44 2010 +0200"
      },
      "message": "hugetlb: add allocate function for hugepage migration\n\nWe can\u0027t use existing hugepage allocation functions to allocate hugepage\nfor page migration, because page migration can happen asynchronously with\nthe running processes and page migration users should call the allocation\nfunction with physical addresses (not virtual addresses) as arguments.\n\nChangeLog since v3:\n- unify alloc_buddy_huge_page() and alloc_buddy_huge_page_node()\n\nChangeLog since v2:\n- remove unnecessary get/put_mems_allowed() (thanks to David Rientjes)\n\nChangeLog since v1:\n- add comment on top of alloc_huge_page_no_vma()\n\nSigned-off-by: Naoya Horiguchi \u003cn-horiguchi@ah.jp.nec.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nReviewed-by: Christoph Lameter \u003ccl@linux.com\u003e\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\n"
    },
    {
      "commit": "998b4382c1d75a6fd3b0e334dae3ab33bd074d99",
      "tree": "666c8eaad844df0447870f1e6fada4f0fb8007cd",
      "parents": [
        "6b0cd00bc396daf5c2dcf17a8d82055335341f46"
      ],
      "author": {
        "name": "Naoya Horiguchi",
        "email": "n-horiguchi@ah.jp.nec.com",
        "time": "Wed Sep 08 10:19:32 2010 +0900"
      },
      "committer": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Fri Oct 08 09:32:44 2010 +0200"
      },
      "message": "hugetlb: fix metadata corruption in hugetlb_fault()\n\nSince the PageHWPoison() check is for avoiding hwpoisoned page remained\nin pagecache mapping to the process, it should be done in \"found in pagecache\"\nbranch, not in the common path.\nOtherwise, metadata corruption occurs if memory failure happens between\nalloc_huge_page() and lock_page() because page fault fails with metadata\nchanges remained (such as refcount, mapcount, etc.)\n\nThis patch moves the check to \"found in pagecache\" branch and fix the problem.\n\nChangeLog since v2:\n- remove retry check in \"new allocation\" path.\n- make description more detailed\n- change patch name from \"HWPOISON, hugetlb: move PG_HWPoison bit check\"\n\nSigned-off-by: Naoya Horiguchi \u003cn-horiguchi@ah.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nReviewed-by: Christoph Lameter \u003ccl@linux.com\u003e\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\n"
    },
    {
      "commit": "56c9cfb13c9b6516017eea4e8cbe22ea02e07ee6",
      "tree": "1b09c9350d8f48d81514f274a3a1933dc9f1a2ef",
      "parents": [
        "cd67f0d2a9a6b5b9f79f4343dc8805757d9ebae2"
      ],
      "author": {
        "name": "Naoya Horiguchi",
        "email": "n-horiguchi@ah.jp.nec.com",
        "time": "Fri Sep 10 13:23:04 2010 +0900"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 23 17:29:18 2010 -0700"
      },
      "message": "hugetlb, rmap: fix confusing page locking in hugetlb_cow()\n\nThe \"if (!trylock_page)\" block in the avoidcopy path of hugetlb_cow()\nlooks confusing and is buggy.  Originally this trylock_page() was\nintended to make sure that old_page is locked even when old_page !\u003d\npagecache_page, because then only pagecache_page is locked.\n\nThis patch fixes it by moving page locking into hugetlb_fault().\n\nSigned-off-by: Naoya Horiguchi \u003cn-horiguchi@ah.jp.nec.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "cd67f0d2a9a6b5b9f79f4343dc8805757d9ebae2",
      "tree": "5e97527cfdb295d494e6c97d23b75ce59a25f664",
      "parents": [
        "433abed6c6f76ca079a9564f2a1a51fd28ebe0ca"
      ],
      "author": {
        "name": "Naoya Horiguchi",
        "email": "n-horiguchi@ah.jp.nec.com",
        "time": "Fri Sep 10 13:23:04 2010 +0900"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 23 17:29:18 2010 -0700"
      },
      "message": "hugetlb, rmap: use hugepage_add_new_anon_rmap() in hugetlb_cow()\n\nObviously, setting anon_vma for COWed hugepage should be done\nby hugepage_add_new_anon_rmap() to scan vmas faster.\nThis patch fixes it.\n\nSigned-off-by: Naoya Horiguchi \u003cn-horiguchi@ah.jp.nec.com\u003e\nAcked-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1021a645344d4a77333e19e60d37b9343be0d7b7",
      "tree": "7a78ab55f27f97209ed1b85ccfd88c6d5b8416d3",
      "parents": [
        "7367f5b013fee33f7d40a5a10a39d5134f529ec8",
        "28957a5467bab9ed51a237d21e31055fad987887"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Aug 12 10:15:10 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Aug 12 10:15:10 2010 -0700"
      },
      "message": "Merge branch \u0027hwpoison\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/ak/linux-mce-2.6\n\n* \u0027hwpoison\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/ak/linux-mce-2.6:\n  hugetlb: add missing unlock in avoidcopy path in hugetlb_cow()\n  hwpoison: rename CONFIG\n  HWPOISON, hugetlb: support hwpoison injection for hugepage\n  HWPOISON, hugetlb: detect hwpoison in hugetlb code\n  HWPOISON, hugetlb: isolate corrupted hugepage\n  HWPOISON, hugetlb: maintain mce_bad_pages in handling hugepage error\n  HWPOISON, hugetlb: set/clear PG_hwpoison bits on hugepage\n  HWPOISON, hugetlb: enable error handling path for hugepage\n  hugetlb, rmap: add reverse mapping for hugepage\n  hugetlb: move definition of is_vm_hugetlb_page() to hugepage_inline.h\n\nFix up trivial conflicts in mm/memory-failure.c\n"
    },
    {
      "commit": "28957a5467bab9ed51a237d21e31055fad987887",
      "tree": "1bc0a2bee4744516fb9874e36bbd7eb6cd9020b3",
      "parents": [
        "e3390f67a7267daa227380b6f1bbf13c7ddd4aff"
      ],
      "author": {
        "name": "Naoya Horiguchi",
        "email": "n-horiguchi@ah.jp.nec.com",
        "time": "Fri Jul 02 14:47:20 2010 +0900"
      },
      "committer": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Wed Aug 11 09:23:48 2010 +0200"
      },
      "message": "hugetlb: add missing unlock in avoidcopy path in hugetlb_cow()\n\nThis patch fixes possible deadlock in hugepage lock_page()\nby adding missing unlock_page().\n\nlibhugetlbfs test will hit this bug when the next patch in this\npatchset (\"hugetlb, HWPOISON: move PG_HWPoison bit check\") is applied.\n\nSigned-off-by: Naoya Horiguchi \u003cn-horiguchi@ah.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nAcked-by: Fengguang Wu \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\n"
    },
    {
      "commit": "43131e141abdb44c487cf79af3ef1fe5164dcef9",
      "tree": "374312457143abd52f1c4b0dbada363f5a69ba55",
      "parents": [
        "fd6a03edd271cf2d69a61aa8df98dd05fa6b9afd"
      ],
      "author": {
        "name": "Naoya Horiguchi",
        "email": "n-horiguchi@ah.jp.nec.com",
        "time": "Fri May 28 09:29:22 2010 +0900"
      },
      "committer": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Wed Aug 11 09:23:11 2010 +0200"
      },
      "message": "HWPOISON, hugetlb: support hwpoison injection for hugepage\n\nThis patch enables hwpoison injection through debug/hwpoison interfaces,\nwith which we can test memory error handling for free or reserved\nhugepages (which cannot be tested by madvise() injector).\n\n[AK: Export PageHuge too for the injection module]\nSigned-off-by: Naoya Horiguchi \u003cn-horiguchi@ah.jp.nec.com\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nAcked-by: Fengguang Wu \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\n"
    },
    {
      "commit": "fd6a03edd271cf2d69a61aa8df98dd05fa6b9afd",
      "tree": "32d3e89f1f66a3d9b68bccc88fec548acc361bf5",
      "parents": [
        "93f70f900da36fbc19c13c2aa04b2e468c8d00fb"
      ],
      "author": {
        "name": "Naoya Horiguchi",
        "email": "n-horiguchi@ah.jp.nec.com",
        "time": "Fri May 28 09:29:21 2010 +0900"
      },
      "committer": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Wed Aug 11 09:23:01 2010 +0200"
      },
      "message": "HWPOISON, hugetlb: detect hwpoison in hugetlb code\n\nThis patch enables to block access to hwpoisoned hugepage and\nalso enables to block unmapping for it.\n\nDependency:\n  \"HWPOISON, hugetlb: enable error handling path for hugepage\"\n\nSigned-off-by: Naoya Horiguchi \u003cn-horiguchi@ah.jp.nec.com\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nAcked-by: Fengguang Wu \u003cfengguang.wu@intel.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\n"
    },
    {
      "commit": "93f70f900da36fbc19c13c2aa04b2e468c8d00fb",
      "tree": "7868f891bca0ed18c9806771a68feac0b4010517",
      "parents": [
        "c9fbdd5f131440981b124883656ea21fb12cde4a"
      ],
      "author": {
        "name": "Naoya Horiguchi",
        "email": "n-horiguchi@ah.jp.nec.com",
        "time": "Fri May 28 09:29:20 2010 +0900"
      },
      "committer": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Wed Aug 11 09:22:46 2010 +0200"
      },
      "message": "HWPOISON, hugetlb: isolate corrupted hugepage\n\nIf error hugepage is not in-use, we can fully recovery from error\nby dequeuing it from freelist, so return RECOVERY.\nOtherwise whether or not we can recovery depends on user processes,\nso return DELAYED.\n\nDependency:\n  \"HWPOISON, hugetlb: enable error handling path for hugepage\"\n\nSigned-off-by: Naoya Horiguchi \u003cn-horiguchi@ah.jp.nec.com\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nAcked-by: Fengguang Wu \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\n"
    },
    {
      "commit": "0fe6e20b9c4c53b3e97096ee73a0857f60aad43f",
      "tree": "3014636f2ed66fdebecb6f6bab338b39c3543a07",
      "parents": [
        "8edf344c66a3f214d709dad1421c29d678915b3f"
      ],
      "author": {
        "name": "Naoya Horiguchi",
        "email": "n-horiguchi@ah.jp.nec.com",
        "time": "Fri May 28 09:29:16 2010 +0900"
      },
      "committer": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Wed Aug 11 09:21:15 2010 +0200"
      },
      "message": "hugetlb, rmap: add reverse mapping for hugepage\n\nThis patch adds reverse mapping feature for hugepage by introducing\nmapcount for shared/private-mapped hugepage and anon_vma for\nprivate-mapped hugepage.\n\nWhile hugepage is not currently swappable, reverse mapping can be useful\nfor memory error handler.\n\nWithout this patch, memory error handler cannot identify processes\nusing the bad hugepage nor unmap it from them. That is:\n- for shared hugepage:\n  we can collect processes using a hugepage through pagecache,\n  but can not unmap the hugepage because of the lack of mapcount.\n- for privately mapped hugepage:\n  we can neither collect processes nor unmap the hugepage.\nThis patch solves these problems.\n\nThis patch include the bug fix given by commit 23be7468e8, so reverts it.\n\nDependency:\n  \"hugetlb: move definition of is_vm_hugetlb_page() to hugepage_inline.h\"\n\nChangeLog since May 24.\n- create hugetlb_inline.h and move is_vm_hugetlb_index() in it.\n- move functions setting up anon_vma for hugepage into mm/rmap.c.\n\nChangeLog since May 13.\n- rebased to 2.6.34\n- fix logic error (in case that private mapping and shared mapping coexist)\n- move is_vm_hugetlb_page() into include/linux/mm.h to use this function\n  from linear_page_index()\n- define and use linear_hugepage_index() instead of compound_order()\n- use page_move_anon_rmap() in hugetlb_cow()\n- copy exclusive switch of __set_page_anon_rmap() into hugepage counterpart.\n- revert commit 24be7468 completely\n\nSigned-off-by: Naoya Horiguchi \u003cn-horiguchi@ah.jp.nec.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Larry Woodman \u003clwoodman@redhat.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nAcked-by: Fengguang Wu \u003cfengguang.wu@intel.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\n"
    },
    {
      "commit": "3edd4fc9537d95e460d502987c63a90d6b9a7a82",
      "tree": "fe0563459b9d6104dcc7f7ab6f8945e815f09665",
      "parents": [
        "a1b200e27c0426ea98c1231a2b78c6094eb073e4"
      ],
      "author": {
        "name": "Doug Doan",
        "email": "dougd@cray.com",
        "time": "Mon Aug 09 17:18:30 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Aug 09 20:44:54 2010 -0700"
      },
      "message": "hugetlb: call mmu notifiers on hugepage cow\n\nWhen a copy-on-write occurs, we take one of two paths in handle_mm_fault:\nthrough handle_pte_fault for normal pages, or through hugetlb_fault for\nhuge pages.\n\nIn the normal page case, we eventually get to do_wp_page and call mmu\nnotifiers via ptep_clear_flush_notify.  There is no callout to the mmmu\nnotifiers in the huge page case.  This patch fixes that.\n\nSigned-off-by: Doug Doan \u003cdougd@cray.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: 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": "c0ff7453bb5c7c98e0885fb94279f2571946f280",
      "tree": "8bb2b169a5145f0496575dbd2f48bb4b1c83f819",
      "parents": [
        "708c1bbc9d0c3e57f40501794d9b0eed29d10fce"
      ],
      "author": {
        "name": "Miao Xie",
        "email": "miaox@cn.fujitsu.com",
        "time": "Mon May 24 14:32:08 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 25 08:06:57 2010 -0700"
      },
      "message": "cpuset,mm: fix no node to alloc memory when changing cpuset\u0027s mems\n\nBefore applying this patch, cpuset updates task-\u003emems_allowed and\nmempolicy by setting all new bits in the nodemask first, and clearing all\nold unallowed bits later.  But in the way, the allocator may find that\nthere is no node to alloc memory.\n\nThe reason is that cpuset rebinds the task\u0027s mempolicy, it cleans the\nnodes which the allocater can alloc pages on, for example:\n\n(mpol: mempolicy)\n\ttask1\t\t\ttask1\u0027s mpol\ttask2\n\talloc page\t\t1\n\t  alloc on node0? NO\t1\n\t\t\t\t1\t\tchange mems from 1 to 0\n\t\t\t\t1\t\trebind task1\u0027s mpol\n\t\t\t\t0-1\t\t  set new bits\n\t\t\t\t0\t  \t  clear disallowed bits\n\t  alloc on node1? NO\t0\n\t  ...\n\tcan\u0027t alloc page\n\t  goto oom\n\nThis patch fixes this problem by expanding the nodes range first(set newly\nallowed bits) and shrink it lazily(clear newly disallowed bits).  So we\nuse a variable to tell the write-side task that read-side task is reading\nnodemask, and the write-side task clears newly disallowed nodes after\nread-side task ends the current memory allocation.\n\n[akpm@linux-foundation.org: fix spello]\nSigned-off-by: Miao Xie \u003cmiaox@cn.fujitsu.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Paul Menage \u003cmenage@google.com\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Ravikiran Thirumalai \u003ckiran@scalex86.org\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4a6018f7f4f1075c1a5403b5ec0ee7262187b86c",
      "tree": "84cec71366550baaa85ac6e8f6349c340bf3586b",
      "parents": [
        "475f9aa6aa538befcbd0fa95bdebada600f247cd"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue May 11 14:06:53 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 11 17:33:42 2010 -0700"
      },
      "message": "hugetlbfs: kill applications that use MAP_NORESERVE with SIGBUS instead of OOM-killer\n\nOrdinarily, application using hugetlbfs will create mappings with\nreserves.  For shared mappings, these pages are reserved before mmap()\nreturns success and for private mappings, the caller process is guaranteed\nand a child process that cannot get the pages gets killed with sigbus.\n\nAn application that uses MAP_NORESERVE gets no reservations and mmap()\nwill always succeed at the risk the page will not be available at fault\ntime.  This might be used for example on very large sparse mappings where\nthe developer is confident the necessary huge pages exist to satisfy all\nfaults even though the whole mapping cannot be backed by huge pages.\nUnfortunately, if an allocation does fail, VM_FAULT_OOM is returned to the\nfault handler which proceeds to trigger the OOM-killer.  This is\nunhelpful.\n\nEven without hugetlbfs mounted, a user using mmap() can trivially trigger\nthe OOM-killer because VM_FAULT_OOM is returned (will provide example\nprogram if desired - it\u0027s a whopping 24 lines long).  It could be\nconsidered a DOS available to an unprivileged user.\n\nThis patch alters hugetlbfs to kill a process that uses MAP_NORESERVE\nwhere huge pages were not available with SIGBUS instead of triggering the\nOOM killer.\n\nThis change affects hugetlb_cow() as well.  I feel there is a failure case\nin there, but I didn\u0027t create one.  It would need a fairly specific target\nin terms of the faulting application and the hugepage pool size.  The\nhugetlb_no_page() path is much easier to hit but both might as well be\nclosed.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "23be7468e8802a2ac1de6ee3eecb3ec7f14dc703",
      "tree": "2c01e547594b8d7f32ddda47b6bea284d8f19761",
      "parents": [
        "9a6a1ecd9e9b5d046a236da2f7eb6b6812f04229"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Fri Apr 23 13:17:56 2010 -0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Apr 24 11:31:25 2010 -0700"
      },
      "message": "hugetlb: fix infinite loop in get_futex_key() when backed by huge pages\n\nIf a futex key happens to be located within a huge page mapped\nMAP_PRIVATE, get_futex_key() can go into an infinite loop waiting for a\npage-\u003emapping that will never exist.\n\nSee https://bugzilla.redhat.com/show_bug.cgi?id\u003d552257 for more details\nabout the problem.\n\nThis patch makes page-\u003emapping a poisoned value that includes\nPAGE_MAPPING_ANON mapped MAP_PRIVATE.  This is enough for futex to\ncontinue but because of PAGE_MAPPING_ANON, the poisoned value is not\ndereferenced or used by futex.  No other part of the VM should be\ndereferencing the page-\u003emapping of a hugetlbfs page as its page cache is\nnot on the LRU.\n\nThis patch fixes the problem with the test case described in the bugzilla.\n\n[akpm@linux-foundation.org: mel cant spel]\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nAcked-by: Darren Hart \u003cdarren@dvhart.com\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5a0e3ad6af8660be21ca98a971cd00f331318c05",
      "tree": "5bfb7be11a03176a87296a43ac6647975c00a1d1",
      "parents": [
        "ed391f4ebf8f701d3566423ce8f17e614cde9806"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 24 17:04:11 2010 +0900"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Mar 30 22:02:32 2010 +0900"
      },
      "message": "include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h\n\npercpu.h is included by sched.h and module.h and thus ends up being\nincluded when building most .c files.  percpu.h includes slab.h which\nin turn includes gfp.h making everything defined by the two files\nuniversally available and complicating inclusion dependencies.\n\npercpu.h -\u003e slab.h dependency is about to be removed.  Prepare for\nthis change by updating users of gfp and slab facilities include those\nheaders directly instead of assuming availability.  As this conversion\nneeds to touch large number of source files, the following script is\nused as the basis of conversion.\n\n  http://userweb.kernel.org/~tj/misc/slabh-sweep.py\n\nThe script does the followings.\n\n* Scan files for gfp and slab usages and update includes such that\n  only the necessary includes are there.  ie. if only gfp is used,\n  gfp.h, if slab is used, slab.h.\n\n* When the script inserts a new include, it looks at the include\n  blocks and try to put the new include such that its order conforms\n  to its surrounding.  It\u0027s put in the include block which contains\n  core kernel includes, in the same order that the rest are ordered -\n  alphabetical, Christmas tree, rev-Xmas-tree or at the end if there\n  doesn\u0027t seem to be any matching order.\n\n* If the script can\u0027t find a place to put a new include (mostly\n  because the file doesn\u0027t have fitting include block), it prints out\n  an error message indicating which .h file needs to be added to the\n  file.\n\nThe conversion was done in the following steps.\n\n1. The initial automatic conversion of all .c files updated slightly\n   over 4000 files, deleting around 700 includes and adding ~480 gfp.h\n   and ~3000 slab.h inclusions.  The script emitted errors for ~400\n   files.\n\n2. Each error was manually checked.  Some didn\u0027t need the inclusion,\n   some needed manual addition while adding it to implementation .h or\n   embedding .c file was more appropriate for others.  This step added\n   inclusions to around 150 files.\n\n3. The script was run again and the output was compared to the edits\n   from #2 to make sure no file was left behind.\n\n4. Several build tests were done and a couple of problems were fixed.\n   e.g. lib/decompress_*.c used malloc/free() wrappers around slab\n   APIs requiring slab.h to be added manually.\n\n5. The script was run on all .h files but without automatically\n   editing them as sprinkling gfp.h and slab.h inclusions around .h\n   files could easily lead to inclusion dependency hell.  Most gfp.h\n   inclusion directives were ignored as stuff from gfp.h was usually\n   wildly available and often used in preprocessor macros.  Each\n   slab.h inclusion directive was examined and added manually as\n   necessary.\n\n6. percpu.h was updated not to include slab.h.\n\n7. Build test were done on the following configurations and failures\n   were fixed.  CONFIG_GCOV_KERNEL was turned off for all tests (as my\n   distributed build env didn\u0027t work with gcov compiles) and a few\n   more options had to be turned off depending on archs to make things\n   build (like ipr on powerpc/64 which failed due to missing writeq).\n\n   * x86 and x86_64 UP and SMP allmodconfig and a custom test config.\n   * powerpc and powerpc64 SMP allmodconfig\n   * sparc and sparc64 SMP allmodconfig\n   * ia64 SMP allmodconfig\n   * s390 SMP allmodconfig\n   * alpha SMP allmodconfig\n   * um on x86_64 SMP allmodconfig\n\n8. percpu.h modifications were reverted so that it could be applied as\n   a separate patch and serve as bisection point.\n\nGiven the fact that I had only a couple of failures from tests on step\n6, I\u0027m fairly confident about the coverage of this conversion patch.\nIf there is a breakage, it\u0027s likely to be something in one of the arch\nheaders which should be easily discoverable easily on most builds of\nthe specific arch.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nGuess-its-ok-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\n"
    },
    {
      "commit": "ac0f6f927db539e03e1f3f61bcd4ed57d5cde7a9",
      "tree": "816e5ac643b15c2050c64a7075f0f7e13d86ea09",
      "parents": [
        "b1bf9368407ae7e89d8a005bb40beb70a41df539",
        "9f33be2c3a80bdc2cc08342dd77fac87652e0548"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Mar 01 09:15:15 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Mar 01 09:15:15 2010 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of master.kernel.org:/home/rmk/linux-2.6-arm\n\n* \u0027for-linus\u0027 of master.kernel.org:/home/rmk/linux-2.6-arm: (100 commits)\n  ARM: Eliminate decompressor -Dstatic\u003d PIC hack\n  ARM: 5958/1: ARM: U300: fix inverted clk round rate\n  ARM: 5956/1: misplaced parentheses\n  ARM: 5955/1: ep93xx: move timer defines into core.c and document\n  ARM: 5954/1: ep93xx: move gpio interrupt support to gpio.c\n  ARM: 5953/1: ep93xx: fix broken build of clock.c\n  ARM: 5952/1: ARM: MM: Add ARM_L1_CACHE_SHIFT_6 for handle inside each ARCH Kconfig\n  ARM: 5949/1: NUC900 add gpio virtual memory map\n  ARM: 5948/1: Enable timer0 to time4 clock support for nuc910\n  ARM: 5940/2: ARM: MMCI: remove custom DBG macro and printk\n  ARM: make_coherent(): fix problems with highpte, part 2\n  MM: Pass a PTE pointer to update_mmu_cache() rather than the PTE itself\n  ARM: 5945/1: ep93xx: include correct irq.h in core.c\n  ARM: 5933/1: amba-pl011: support hardware flow control\n  ARM: 5930/1: Add PKMAP area description to memory.txt.\n  ARM: 5929/1: Add checks to detect overlap of memory regions.\n  ARM: 5928/1: Change type of VMALLOC_END to unsigned long.\n  ARM: 5927/1: Make delimiters of DMA area globally visibly.\n  ARM: 5926/1: Add \"Virtual kernel memory...\" printout.\n  ARM: 5920/1: OMAP4: Enable L2 Cache\n  ...\n\nFix up trivial conflict in arch/arm/mach-mx25/clock.c\n"
    },
    {
      "commit": "4b3073e1c53a256275f1079c0fbfbe85883d9275",
      "tree": "a0fa98cb75edbbc58c43bbe38ac4c6da0913ae6d",
      "parents": [
        "ed42acaef1a9d51631a31b55e9ed52d400430492"
      ],
      "author": {
        "name": "Russell King",
        "email": "rmk+kernel@arm.linux.org.uk",
        "time": "Fri Dec 18 16:40:18 2009 +0000"
      },
      "committer": {
        "name": "Russell King",
        "email": "rmk+kernel@arm.linux.org.uk",
        "time": "Sat Feb 20 16:41:46 2010 +0000"
      },
      "message": "MM: Pass a PTE pointer to update_mmu_cache() rather than the PTE itself\n\nOn VIVT ARM, when we have multiple shared mappings of the same file\nin the same MM, we need to ensure that we have coherency across all\ncopies.  We do this via make_coherent() by making the pages\nuncacheable.\n\nThis used to work fine, until we allowed highmem with highpte - we\nnow have a page table which is mapped as required, and is not available\nfor modification via update_mmu_cache().\n\nRalf Beache suggested getting rid of the PTE value passed to\nupdate_mmu_cache():\n\n  On MIPS update_mmu_cache() calls __update_tlb() which walks pagetables\n  to construct a pointer to the pte again.  Passing a pte_t * is much\n  more elegant.  Maybe we might even replace the pte argument with the\n  pte_t?\n\nBen Herrenschmidt would also like the pte pointer for PowerPC:\n\n  Passing the ptep in there is exactly what I want.  I want that\n  -instead- of the PTE value, because I have issue on some ppc cases,\n  for I$/D$ coherency, where set_pte_at() may decide to mask out the\n  _PAGE_EXEC.\n\nSo, pass in the mapped page table pointer into update_mmu_cache(), and\nremove the PTE value, updating all implementations and call sites to\nsuit.\n\nIncludes a fix from Stephen Rothwell:\n\n  sparc: fix fallout from update_mmu_cache API change\n\n  Signed-off-by: Stephen Rothwell \u003csfr@canb.auug.org.au\u003e\n\nAcked-by: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nSigned-off-by: Russell King \u003crmk+kernel@arm.linux.org.uk\u003e\n"
    },
    {
      "commit": "094e9539bd24bbe23b8e2741e903b0f3f1f85b03",
      "tree": "1b217c0351db28589fc164d5bf570d61c173bf5c",
      "parents": [
        "03eac7bb882a75e6ee5705288f7ec36ad2e7d0d5"
      ],
      "author": {
        "name": "Jeff Mahoney",
        "email": "jeffm@suse.com",
        "time": "Tue Feb 02 13:44:14 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Feb 02 18:11:22 2010 -0800"
      },
      "message": "hugetlb: fix section mismatches\n\nhugetlb_sysfs_add_hstate is called by hugetlb_register_node directly\nduring init and also indirectly via sysfs after init.\n\nThis patch removes the __init tag from hugetlb_sysfs_add_hstate.\n\nSigned-off-by: Jeff Mahoney \u003cjeffm@suse.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": "74dbdd239bb1348ad86d28b18574d9c1f28b62ca",
      "tree": "d29d30ee9d4c3dd64d831fa9d042c76cba829b58",
      "parents": [
        "b5430a04e995081a308b4419bd0940f2badc6e6b"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Fri Jan 08 14:43:05 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jan 11 09:34:06 2010 -0800"
      },
      "message": "mm: hugetlb: fix clear_huge_page()\n\nsz is in bytes, MAX_ORDER_NR_PAGES is in pages.\n\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nAcked-by: David Gibson \u003cdwg@au1.ibm.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: David Rientjes \u003crientjes@google.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": "536240f2bde98216feac87b4891d19a536b8884a",
      "tree": "e4755bb36c232262a2ebadb055d8947acb39b672",
      "parents": [
        "6927c1dd93fc982140f3a3742ac4b224cd3e02b2"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Mon Dec 14 17:59:56 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:24 2009 -0800"
      },
      "message": "hugetlb: abort a hugepage pool resize if a signal is pending\n\nIf a user asks for a hugepage pool resize but specified a large number,\nthe machine can begin trashing.  In response, they might hit ctrl-c but\nsignals are ignored and the pool resize continues until it fails an\nallocation.  This can take a considerable amount of time so this patch\naborts a pool resize if a signal is pending.\n\nSuggested by Dave Hansen.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: 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": "4eb2b1dcd598f8489130405c81c60c289896d92a",
      "tree": "87bf0dec35f55688595447de65eb95952eb3dabc",
      "parents": [
        "70da2340fbc68e91e701762f785479ab495a0869"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Mon Dec 14 17:59:53 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:23 2009 -0800"
      },
      "message": "hugetlb: acquire the i_mmap_lock before walking the prio_tree to unmap a page\n\nWhen the owner of a mapping fails COW because a child process is holding a\nreference, the children VMAs are walked and the page is unmapped.  The\ni_mmap_lock is taken for the unmapping of the page but not the walking of\nthe prio_tree.  In theory, that tree could be changing if the lock is not\nheld.  This patch takes the i_mmap_lock properly for the duration of the\nprio_tree walk.\n\n[hugh.dickins@tiscali.co.uk: Spotted the problem in the first place]\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b76c8cfbff94263fdf2f408e94b78b049c24a9dc",
      "tree": "2252a29e2cfaddf08060174afd635e5f8ab66c1f",
      "parents": [
        "b4e655a4aaa327810110457cef92681447dd13e4"
      ],
      "author": {
        "name": "Larry Woodman",
        "email": "lwoodman@redhat.com",
        "time": "Mon Dec 14 17:59:37 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:20 2009 -0800"
      },
      "message": "hugetlb: prevent deadlock in __unmap_hugepage_range() when alloc_huge_page() fails\n\nhugetlb_fault() takes the mm-\u003epage_table_lock spinlock then calls\nhugetlb_cow().  If the alloc_huge_page() in hugetlb_cow() fails due to an\ninsufficient huge page pool it calls unmap_ref_private() with the\nmm-\u003epage_table_lock held.  unmap_ref_private() then calls\nunmap_hugepage_range() which tries to acquire the mm-\u003epage_table_lock.\n\n[\u003cffffffff810928c3\u003e] print_circular_bug_tail+0x80/0x9f\n [\u003cffffffff8109280b\u003e] ? check_noncircular+0xb0/0xe8\n [\u003cffffffff810935e0\u003e] __lock_acquire+0x956/0xc0e\n [\u003cffffffff81093986\u003e] lock_acquire+0xee/0x12e\n [\u003cffffffff8111a7a6\u003e] ? unmap_hugepage_range+0x3e/0x84\n [\u003cffffffff8111a7a6\u003e] ? unmap_hugepage_range+0x3e/0x84\n [\u003cffffffff814c348d\u003e] _spin_lock+0x40/0x89\n [\u003cffffffff8111a7a6\u003e] ? unmap_hugepage_range+0x3e/0x84\n [\u003cffffffff8111afee\u003e] ? alloc_huge_page+0x218/0x318\n [\u003cffffffff8111a7a6\u003e] unmap_hugepage_range+0x3e/0x84\n [\u003cffffffff8111b2d0\u003e] hugetlb_cow+0x1e2/0x3f4\n [\u003cffffffff8111b935\u003e] ? hugetlb_fault+0x453/0x4f6\n [\u003cffffffff8111b962\u003e] hugetlb_fault+0x480/0x4f6\n [\u003cffffffff8111baee\u003e] follow_hugetlb_page+0x116/0x2d9\n [\u003cffffffff814c31a7\u003e] ? _spin_unlock_irq+0x3a/0x5c\n [\u003cffffffff81107b4d\u003e] __get_user_pages+0x2a3/0x427\n [\u003cffffffff81107d0f\u003e] get_user_pages+0x3e/0x54\n [\u003cffffffff81040b8b\u003e] get_user_pages_fast+0x170/0x1b5\n [\u003cffffffff81160352\u003e] dio_get_page+0x64/0x14a\n [\u003cffffffff8116112a\u003e] __blockdev_direct_IO+0x4b7/0xb31\n [\u003cffffffff8115ef91\u003e] blkdev_direct_IO+0x58/0x6e\n [\u003cffffffff8115e0a4\u003e] ? blkdev_get_blocks+0x0/0xb8\n [\u003cffffffff810ed2c5\u003e] generic_file_aio_read+0xdd/0x528\n [\u003cffffffff81219da3\u003e] ? avc_has_perm+0x66/0x8c\n [\u003cffffffff81132842\u003e] do_sync_read+0xf5/0x146\n [\u003cffffffff8107da00\u003e] ? autoremove_wake_function+0x0/0x5a\n [\u003cffffffff81211857\u003e] ? security_file_permission+0x24/0x3a\n [\u003cffffffff81132fd8\u003e] vfs_read+0xb5/0x126\n [\u003cffffffff81133f6b\u003e] ? fget_light+0x5e/0xf8\n [\u003cffffffff81133131\u003e] sys_read+0x54/0x8c\n [\u003cffffffff81011e42\u003e] system_call_fastpath+0x16/0x1b\n\nThis can be fixed by dropping the mm-\u003epage_table_lock around the call to\nunmap_ref_private() if alloc_huge_page() fails, its dropped right below in\nthe normal path anyway.  However, earlier in the that function, it\u0027s also\npossible to call into the page allocator with the same spinlock held.\n\nWhat this patch does is drop the spinlock before the page allocator is\npotentially entered.  The check for page allocation failure can be made\nwithout the page_table_lock as well as the copy of the huge page.  Even if\nthe PTE changed while the spinlock was held, the consequence is that a\nhuge page is copied unnecessarily.  This resolves both the double taking\nof the lock and sleeping with the spinlock held.\n\n[mel@csn.ul.ie: Cover also the case where process can sleep with spinlock]\nSigned-off-by: Larry Woodman \u003clwooman@redhat.com\u003e\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: Adam Litke \u003cagl@us.ibm.com\u003e\nCc: Andy Whitcroft \u003capw@shadowen.org\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: David Gibson \u003cdavid@gibson.dropbear.id.au\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "bad44b5be84cf3bb1ff900bec02ee61e1993328c",
      "tree": "edd9a9cc2f482ca8684c9e64abe4b977a5525615",
      "parents": [
        "39da08cb074cf19cb249832a2a955dfb28837e65"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Mon Dec 14 17:58:38 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:13 2009 -0800"
      },
      "message": "mm: add gfp flags for NODEMASK_ALLOC slab allocations\n\nObjects passed to NODEMASK_ALLOC() are relatively small in size and are\nbacked by slab caches that are not of large order, traditionally never\ngreater than PAGE_ALLOC_COSTLY_ORDER.\n\nThus, using GFP_KERNEL for these allocations on large machines when\nCONFIG_NODES_SHIFT \u003e 8 will cause the page allocator to loop endlessly in\nthe allocation attempt, each time invoking both direct reclaim or the oom\nkiller.\n\nThis is of particular interest when using NODEMASK_ALLOC() from a\nmempolicy context (either directly in mm/mempolicy.c or the mempolicy\nconstrained hugetlb allocations) since the oom killer always kills current\nwhen allocations are constrained by mempolicies.  So for all present use\ncases in the kernel, current would end up being oom killed when direct\nreclaim fails.  That would allow the NODEMASK_ALLOC() to succeed but\ncurrent would have sacrificed itself upon returning.\n\nThis patch adds gfp flags to NODEMASK_ALLOC() to pass to kmalloc() on\nCONFIG_NODES_SHIFT \u003e 8; this parameter is a nop on other configurations.\nAll current use cases either directly from hugetlb code or indirectly via\nNODEMASK_SCRATCH() union __GFP_NORETRY to avoid direct reclaim and the oom\nkiller when the slab allocator needs to allocate additional pages.\n\nThe side-effect of this change is that all current use cases of either\nNODEMASK_ALLOC() or NODEMASK_SCRATCH() need appropriate -ENOMEM handling\nwhen the allocation fails (never for CONFIG_NODES_SHIFT \u003c\u003d 8).  All\ncurrent use cases were audited and do have appropriate error handling at\nthis time.\n\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Adam Litke \u003cagl@us.ibm.com\u003e\nCc: Andy Whitcroft \u003capw@canonical.com\u003e\nCc: Eric Whitney \u003ceric.whitney@hp.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9b5e5d0fdc91b73bba8cf5e0fbe3521a953e4e4d",
      "tree": "58b7ca4a13b71de2132ae669fc138eb85c5ab3c8",
      "parents": [
        "267b4c281b4a43c8f3d965c791d3a7fd62448733"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Mon Dec 14 17:58:32 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:13 2009 -0800"
      },
      "message": "hugetlb: use only nodes with memory for huge pages\n\nRegister per node hstate sysfs attributes only for nodes with memory.\nGlobal replacement of \u0027all online nodes\" with \"all nodes with memory\" in\nmm/hugetlb.c.  Suggested by David Rientjes.\n\nA subsequent patch will handle adding/removing of per node hstate sysfs\nattributes when nodes transition to/from memoryless state via memory\nhotplug.\n\nNOTE: this patch has not been tested with memoryless nodes.\n\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nReviewed-by: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nCc: Adam Litke \u003cagl@us.ibm.com\u003e\nCc: Andy Whitcroft \u003capw@canonical.com\u003e\nCc: Eric Whitney \u003ceric.whitney@hp.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9a30523066cde73c1442b76224bb540de9f9b0b0",
      "tree": "57165f74e16def0b74bb6e6e05ec9a6b7bd42403",
      "parents": [
        "4e25b2576efda24c02e2d6b9bcb5965a3f865f33"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Mon Dec 14 17:58:25 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:12 2009 -0800"
      },
      "message": "hugetlb: add per node hstate attributes\n\nAdd the per huge page size control/query attributes to the per node\nsysdevs:\n\n/sys/devices/system/node/node\u003cID\u003e/hugepages/hugepages-\u003csize\u003e/\n\tnr_hugepages       - r/w\n\tfree_huge_pages    - r/o\n\tsurplus_huge_pages - r/o\n\nThe patch attempts to re-use/share as much of the existing global hstate\nattribute initialization and handling, and the \"nodes_allowed\" constraint\nprocessing as possible.\n\nCalling set_max_huge_pages() with no node indicates a change to global\nhstate parameters.  In this case, any non-default task mempolicy will be\nused to generate the nodes_allowed mask.  A valid node id indicates an\nupdate to that node\u0027s hstate parameters, and the count argument specifies\nthe target count for the specified node.  From this info, we compute the\ntarget global count for the hstate and construct a nodes_allowed node mask\ncontain only the specified node.\n\nSetting the node specific nr_hugepages via the per node attribute\neffectively ignores any task mempolicy or cpuset constraints.\n\nWith this patch:\n\n(me):ls /sys/devices/system/node/node0/hugepages/hugepages-2048kB\n./  ../  free_hugepages  nr_hugepages  surplus_hugepages\n\nStarting from:\nNode 0 HugePages_Total:     0\nNode 0 HugePages_Free:      0\nNode 0 HugePages_Surp:      0\nNode 1 HugePages_Total:     0\nNode 1 HugePages_Free:      0\nNode 1 HugePages_Surp:      0\nNode 2 HugePages_Total:     0\nNode 2 HugePages_Free:      0\nNode 2 HugePages_Surp:      0\nNode 3 HugePages_Total:     0\nNode 3 HugePages_Free:      0\nNode 3 HugePages_Surp:      0\nvm.nr_hugepages \u003d 0\n\nAllocate 16 persistent huge pages on node 2:\n(me):echo 16 \u003e/sys/devices/system/node/node2/hugepages/hugepages-2048kB/nr_hugepages\n\n[Note that this is equivalent to:\n\tnumactl -m 2 hugeadmin --pool-pages-min 2M:+16\n]\n\nYields:\nNode 0 HugePages_Total:     0\nNode 0 HugePages_Free:      0\nNode 0 HugePages_Surp:      0\nNode 1 HugePages_Total:     0\nNode 1 HugePages_Free:      0\nNode 1 HugePages_Surp:      0\nNode 2 HugePages_Total:    16\nNode 2 HugePages_Free:     16\nNode 2 HugePages_Surp:      0\nNode 3 HugePages_Total:     0\nNode 3 HugePages_Free:      0\nNode 3 HugePages_Surp:      0\nvm.nr_hugepages \u003d 16\n\nGlobal controls work as expected--reduce pool to 8 persistent huge pages:\n(me):echo 8 \u003e/sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages\n\nNode 0 HugePages_Total:     0\nNode 0 HugePages_Free:      0\nNode 0 HugePages_Surp:      0\nNode 1 HugePages_Total:     0\nNode 1 HugePages_Free:      0\nNode 1 HugePages_Surp:      0\nNode 2 HugePages_Total:     8\nNode 2 HugePages_Free:      8\nNode 2 HugePages_Surp:      0\nNode 3 HugePages_Total:     0\nNode 3 HugePages_Free:      0\nNode 3 HugePages_Surp:      0\n\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Adam Litke \u003cagl@us.ibm.com\u003e\nCc: Andy Whitcroft \u003capw@canonical.com\u003e\nCc: Eric Whitney \u003ceric.whitney@hp.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "06808b0827e1cd14eedc96bac2655d5b37ac246c",
      "tree": "8f7b52a4af1532ed414631f68b99a059e299d83f",
      "parents": [
        "c1e6c8d074ea3621106548654cc244d2edc12ead"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Mon Dec 14 17:58:21 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:12 2009 -0800"
      },
      "message": "hugetlb: derive huge pages nodes allowed from task mempolicy\n\nThis patch derives a \"nodes_allowed\" node mask from the numa mempolicy of\nthe task modifying the number of persistent huge pages to control the\nallocation, freeing and adjusting of surplus huge pages when the pool page\ncount is modified via the new sysctl or sysfs attribute\n\"nr_hugepages_mempolicy\".  The nodes_allowed mask is derived as follows:\n\n* For \"default\" [NULL] task mempolicy, a NULL nodemask_t pointer\n  is produced.  This will cause the hugetlb subsystem to use\n  node_online_map as the \"nodes_allowed\".  This preserves the\n  behavior before this patch.\n* For \"preferred\" mempolicy, including explicit local allocation,\n  a nodemask with the single preferred node will be produced.\n  \"local\" policy will NOT track any internode migrations of the\n  task adjusting nr_hugepages.\n* For \"bind\" and \"interleave\" policy, the mempolicy\u0027s nodemask\n  will be used.\n* Other than to inform the construction of the nodes_allowed node\n  mask, the actual mempolicy mode is ignored.  That is, all modes\n  behave like interleave over the resulting nodes_allowed mask\n  with no \"fallback\".\n\nSee the updated documentation [next patch] for more information\nabout the implications of this patch.\n\nExamples:\n\nStarting with:\n\n\tNode 0 HugePages_Total:     0\n\tNode 1 HugePages_Total:     0\n\tNode 2 HugePages_Total:     0\n\tNode 3 HugePages_Total:     0\n\nDefault behavior [with or without this patch] balances persistent\nhugepage allocation across nodes [with sufficient contiguous memory]:\n\n\tsysctl vm.nr_hugepages[_mempolicy]\u003d32\n\nyields:\n\n\tNode 0 HugePages_Total:     8\n\tNode 1 HugePages_Total:     8\n\tNode 2 HugePages_Total:     8\n\tNode 3 HugePages_Total:     8\n\nOf course, we only have nr_hugepages_mempolicy with the patch,\nbut with default mempolicy, nr_hugepages_mempolicy behaves the\nsame as nr_hugepages.\n\nApplying mempolicy--e.g., with numactl [using \u0027-m\u0027 a.k.a.\n\u0027--membind\u0027 because it allows multiple nodes to be specified\nand it\u0027s easy to type]--we can allocate huge pages on\nindividual nodes or sets of nodes.  So, starting from the\ncondition above, with 8 huge pages per node, add 8 more to\nnode 2 using:\n\n\tnumactl -m 2 sysctl vm.nr_hugepages_mempolicy\u003d40\n\nThis yields:\n\n\tNode 0 HugePages_Total:     8\n\tNode 1 HugePages_Total:     8\n\tNode 2 HugePages_Total:    16\n\tNode 3 HugePages_Total:     8\n\nThe incremental 8 huge pages were restricted to node 2 by the\nspecified mempolicy.\n\nSimilarly, we can use mempolicy to free persistent huge pages\nfrom specified nodes:\n\n\tnumactl -m 0,1 sysctl vm.nr_hugepages_mempolicy\u003d32\n\nyields:\n\n\tNode 0 HugePages_Total:     4\n\tNode 1 HugePages_Total:     4\n\tNode 2 HugePages_Total:    16\n\tNode 3 HugePages_Total:     8\n\nThe 8 huge pages freed were balanced over nodes 0 and 1.\n\n[rientjes@google.com: accomodate reworked NODEMASK_ALLOC]\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nCc: Adam Litke \u003cagl@us.ibm.com\u003e\nCc: Andy Whitcroft \u003capw@canonical.com\u003e\nCc: Eric Whitney \u003ceric.whitney@hp.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6ae11b278bca1cd41651bae49a8c69de2f6a6262",
      "tree": "8bf4203ce676cac4f5ce1d03b35adbca1571d295",
      "parents": [
        "9a76db099709388ae4126c4f441358b97c6ba20c"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Mon Dec 14 17:58:16 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:12 2009 -0800"
      },
      "message": "hugetlb: add nodemask arg to huge page alloc, free and surplus adjust functions\n\nIn preparation for constraining huge page allocation and freeing by the\ncontrolling task\u0027s numa mempolicy, add a \"nodes_allowed\" nodemask pointer\nto the allocate, free and surplus adjustment functions.  For now, pass\nNULL to indicate default behavior--i.e., use node_online_map.  A\nsubsqeuent patch will derive a non-default mask from the controlling\ntask\u0027s numa mempolicy.\n\nNote that this method of updating the global hstate nr_hugepages under the\nconstraint of a nodemask simplifies keeping the global state\nconsistent--especially the number of persistent and surplus pages relative\nto reservations and overcommit limits.  There are undoubtedly other ways\nto do this, but this works for both interfaces: mempolicy and per node\nattributes.\n\n[rientjes@google.com: fix HIGHMEM compile error]\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nReviewed-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nReviewed-by: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: Adam Litke \u003cagl@us.ibm.com\u003e\nCc: Andy Whitcroft \u003capw@canonical.com\u003e\nCc: Eric Whitney \u003ceric.whitney@hp.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\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": "9a76db099709388ae4126c4f441358b97c6ba20c",
      "tree": "16b4a616695d8c54af8da5b731c0d67e2f06bf4e",
      "parents": [
        "4e7b8a6cef64a4c1f1194f9926f794c2b75ebdd7"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Mon Dec 14 17:58:15 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:12 2009 -0800"
      },
      "message": "hugetlb: rework hstate_next_node_* functions\n\nModify the hstate_next_node* functions to allow them to be called to\nobtain the \"start_nid\".  Then, whereas prior to this patch we\nunconditionally called hstate_next_node_to_{alloc|free}(), whether or not\nwe successfully allocated/freed a huge page on the node, now we only call\nthese functions on failure to alloc/free to advance to next allowed node.\n\nFactor out the next_node_allowed() function to handle wrap at end of\nnode_online_map.  In this version, the allowed nodes include all of the\nonline nodes.\n\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nReviewed-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nReviewed-by: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: Adam Litke \u003cagl@us.ibm.com\u003e\nCc: Andy Whitcroft \u003capw@canonical.com\u003e\nCc: Eric Whitney \u003ceric.whitney@hp.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f0f37e2f77731b3473fa6bd5ee53255d9a9cdb40",
      "tree": "3c26d3ed1a453156e9c208ccb5567a8954dba064",
      "parents": [
        "6f5071020d5ec89b5d095aa488db604adb921aec"
      ],
      "author": {
        "name": "Alexey Dobriyan",
        "email": "adobriyan@gmail.com",
        "time": "Sun Sep 27 22:29:37 2009 +0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Sep 27 11:39:25 2009 -0700"
      },
      "message": "const: mark struct vm_struct_operations\n\n* mark struct vm_area_struct::vm_ops as const\n* mark vm_ops in AGP code\n\nBut leave TTM code alone, something is fishy there with global vm_ops\nbeing used.\n\nSigned-off-by: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8d65af789f3e2cf4cfbdbf71a0f7a61ebcd41d38",
      "tree": "121df3bfffc7853ac6d2c514ad514d4a748a0933",
      "parents": [
        "c0d0787b6d47d9f4d5e8bd321921104e854a9135"
      ],
      "author": {
        "name": "Alexey Dobriyan",
        "email": "adobriyan@gmail.com",
        "time": "Wed Sep 23 15:57:19 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 07:21:04 2009 -0700"
      },
      "message": "sysctl: remove \"struct file *\" argument of -\u003eproc_handler\n\nIt\u0027s unused.\n\nIt isn\u0027t needed -- read or write flag is already passed and sysctl\nshouldn\u0027t care about the rest.\n\nIt _was_ used in two places at arch/frv for some reason.\n\nSigned-off-by: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nCc: David Howells \u003cdhowells@redhat.com\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Ralf Baechle \u003cralf@linux-mips.org\u003e\nCc: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: \"David S. Miller\" \u003cdavem@davemloft.net\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": "3ae77f43b1118a76ea37952d444319c15e002c03",
      "tree": "78152c28d4c8be8da36148e2e38e87e1b08b839b",
      "parents": [
        "6e919717c82c5773ac671816c8392c70d261685f"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Sep 21 17:03:33 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Sep 22 07:17:41 2009 -0700"
      },
      "message": "mm: hugetlbfs_pagecache_present\n\nRename hugetlbfs_backed() to hugetlbfs_pagecache_present()\nand add more comments, as suggested by Mel Gorman.\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Minchan Kim \u003cminchan.kim@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": "2a15efc953b26ad57d7d38b9e6782d57e53b4ab2",
      "tree": "f4d04903b3303e80460d2fa3f38da2b7eea82d22",
      "parents": [
        "8e4b9a60718970bbc02dfd3abd0b956ab65af231"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Sep 21 17:03:27 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Sep 22 07:17:40 2009 -0700"
      },
      "message": "mm: follow_hugetlb_page flags\n\nfollow_hugetlb_page() shouldn\u0027t be guessing about the coredump case\neither: pass the foll_flags down to it, instead of just the write bit.\n\nRemove that obscure huge_zeropage_ok() test.  The decision is easy,\nthough unlike the non-huge case - here vm_ops-\u003efault is always set.\nBut we know that a fault would serve up zeroes, unless there\u0027s\nalready a hugetlbfs pagecache page to back the range.\n\n(Alternatively, since hugetlb pages aren\u0027t swapped out under pressure,\nyou could save more dump space by arguing that a page not yet faulted\ninto this process cannot be relevant to the dump; but that would be\nmore surprising.)\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Minchan Kim \u003cminchan.kim@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": "57dd28fb0513d2f772bb215f27925165e7b9ce5f",
      "tree": "6ebdf5b1a336e75b156d7818273af1d78ea78ac6",
      "parents": [
        "41a25e7e67b8be33d7598ff7968b9a8b405b6567"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "Lee.Schermerhorn@hp.com",
        "time": "Mon Sep 21 17:01:25 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Sep 22 07:17:26 2009 -0700"
      },
      "message": "hugetlb: restore interleaving of bootmem huge pages\n\nI noticed that alloc_bootmem_huge_page() will only advance to the next\nnode on failure to allocate a huge page, potentially filling nodes with\nhuge-pages.  I asked about this on linux-mm and linux-numa, cc\u0027ing the\nusual huge page suspects.\n\nMel Gorman responded:\n\n\tI strongly suspect that the same node being used until allocation\n\tfailure instead of round-robin is an oversight and not deliberate\n\tat all. It appears to be a side-effect of a fix made way back in\n\tcommit 63b4613c3f0d4b724ba259dc6c201bb68b884e1a [\"hugetlb: fix\n\thugepage allocation with memoryless nodes\"]. Prior to that patch\n\tit looked like allocations would always round-robin even when\n\tallocation was successful.\n\nThis patch--factored out of my \"hugetlb mempolicy\" series--moves the\nadvance of the hstate next node from which to allocate up before the test\nfor success of the attempted allocation.\n\nNote that alloc_bootmem_huge_page() is only used for order \u003e MAX_ORDER\nhuge pages.\n\nI\u0027ll post a separate patch for mainline/stable, as the above mentioned\n\"balance freeing\" series renamed the next node to alloc function.\n\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nReviewed-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Andy Whitcroft \u003capw@canonical.com\u003e\nReviewed-by: Andi Kleen \u003candi@firstfloor.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "685f345708096ed21078aa44a6f4a6e6d1d1b580",
      "tree": "9ba51e5721d4749317be33623a382940c0299bec",
      "parents": [
        "e8c5c8249878fb6564125680a1d15e06adbd5639"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Mon Sep 21 17:01:23 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Sep 22 07:17:26 2009 -0700"
      },
      "message": "hugetlb: use free_pool_huge_page() to return unused surplus pages\n\nUse the [modified] free_pool_huge_page() function to return unused\nsurplus pages.  This will help keep huge pages balanced across nodes\nbetween freeing of unused surplus pages and freeing of persistent huge\npages [from set_max_huge_pages] by using the same node id \"cursor\". It\nalso eliminates some code duplication.\n\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nCc: Adam Litke \u003cagl@us.ibm.com\u003e\nCc: Andy Whitcroft \u003capw@canonical.com\u003e\nCc: Eric Whitney \u003ceric.whitney@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": "e8c5c8249878fb6564125680a1d15e06adbd5639",
      "tree": "66a69c11ea0f27e45c747e6f7236da80d9788cc1",
      "parents": [
        "55a4462af5722d2814858bc51ee8d58ca29544ab"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Mon Sep 21 17:01:22 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Sep 22 07:17:26 2009 -0700"
      },
      "message": "hugetlb: balance freeing of huge pages across nodes\n\nFree huges pages from nodes in round robin fashion in an attempt to keep\n[persistent a.k.a static] hugepages balanced across nodes\n\nNew function free_pool_huge_page() is modeled on and performs roughly the\ninverse of alloc_fresh_huge_page().  Replaces dequeue_huge_page() which\nnow has no callers, so this patch removes it.\n\nHelper function hstate_next_node_to_free() uses new hstate member\nnext_to_free_nid to distribute \"frees\" across all nodes with huge pages.\n\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nCc: Adam Litke \u003cagl@us.ibm.com\u003e\nCc: Andy Whitcroft \u003capw@canonical.com\u003e\nCc: Eric Whitney \u003ceric.whitney@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": "f340ca0f065ecf3e7549687e763370106dacb2c2",
      "tree": "8e847419873436e9b383d334cd15917e03177949",
      "parents": [
        "3eea8437f61ca1f9192d146124425e759c3e5758"
      ],
      "author": {
        "name": "Joerg Roedel",
        "email": "joerg.roedel@amd.com",
        "time": "Fri Jun 19 15:16:22 2009 +0200"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@redhat.com",
        "time": "Thu Sep 10 08:33:01 2009 +0300"
      },
      "message": "hugetlbfs: export vma_kernel_pagsize to modules\n\nThis function is required by KVM.\n\nSigned-off-by: Joerg Roedel \u003cjoerg.roedel@amd.com\u003e\nSigned-off-by: Avi Kivity \u003cavi@redhat.com\u003e\n"
    },
    {
      "commit": "e4c6f8bed01f9f9a5c607bd689bf67e7b8a36bd8",
      "tree": "d344bc7b6f89f7066c7e35ddff8c4a4b56904a36",
      "parents": [
        "659098141d02eb8e3545be8969d262e02d2f3f98"
      ],
      "author": {
        "name": "Eric Sandeen",
        "email": "sandeen@sandeen.net",
        "time": "Wed Jul 29 15:02:16 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jul 29 19:10:35 2009 -0700"
      },
      "message": "hugetlbfs: fix i_blocks accounting\n\nAs reported in Red Hat bz #509671, i_blocks for files on hugetlbfs get\naccounting wrong when doing something like:\n\n   $ \u003e foo\n   $ date  \u003e foo\n   date: write error: Invalid argument\n   $ /usr/bin/stat foo\n     File: `foo\u0027\n     Size: 0          Blocks: 18446744073709547520 IO Block: 2097152 regular\n...\n\nThis is because hugetlb_unreserve_pages() is unconditionally removing\nblocks_per_huge_page(h) on each call rather than using the freed amount.\nIf there were 0 blocks, it goes negative, resulting in the above.\n\nThis is a regression from commit a5516438959d90b071ff0a484ce4f3f523dc3152\n(\"hugetlb: modular state for hugetlb page size\")\n\nwhich did:\n\n-\tinode-\u003ei_blocks -\u003d BLOCKS_PER_HUGEPAGE * freed;\n+\tinode-\u003ei_blocks -\u003d blocks_per_huge_page(h);\n\nso just put back the freed multiplier, and it\u0027s all happy again.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nAcked-by: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: William Lee Irwin III \u003cwli@holomorphy.com\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "788c7df451467df71638dd79a2d63d78c6e13b9c",
      "tree": "30714df634b620784b7a04fefc51d8c09291de38",
      "parents": [
        "a800faec1b21d7133b5f0c8c6dac593b7c4e118d"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Tue Jun 23 13:49:05 2009 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 23 11:23:33 2009 -0700"
      },
      "message": "hugetlb: fault flags instead of write_access\n\nhandle_mm_fault() is now passing fault flags rather than write_access\ndown to hugetlb_fault(), so better recognize that in hugetlb_fault(),\nand in hugetlb_no_page().\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nAcked-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "20a0307c0396c2edb651401d2f2db193dda2f3c9",
      "tree": "408fde4bf84223757f5dd150e401e8d9d9df5d36",
      "parents": [
        "a1dd268cf6306565a31a48deff8bf4f6b4b105f7"
      ],
      "author": {
        "name": "Wu Fengguang",
        "email": "fengguang.wu@intel.com",
        "time": "Tue Jun 16 15:32:22 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:36 2009 -0700"
      },
      "message": "mm: introduce PageHuge() for testing huge/gigantic pages\n\nA series of patches to enhance the /proc/pagemap interface and to add a\nuserspace executable which can be used to present the pagemap data.\n\nExport 10 more flags to end users (and more for kernel developers):\n\n        11. KPF_MMAP            (pseudo flag) memory mapped page\n        12. KPF_ANON            (pseudo flag) memory mapped page (anonymous)\n        13. KPF_SWAPCACHE       page is in swap cache\n        14. KPF_SWAPBACKED      page is swap/RAM backed\n        15. KPF_COMPOUND_HEAD   (*)\n        16. KPF_COMPOUND_TAIL   (*)\n        17. KPF_HUGE\t\thugeTLB pages\n        18. KPF_UNEVICTABLE     page is in the unevictable LRU list\n        19. KPF_HWPOISON        hardware detected corruption\n        20. KPF_NOPAGE          (pseudo flag) no page frame at the address\n\n        (*) For compound pages, exporting _both_ head/tail info enables\n            users to tell where a compound page starts/ends, and its order.\n\na simple demo of the page-types tool\n\n# ./page-types -h\npage-types [options]\n            -r|--raw                  Raw mode, for kernel developers\n            -a|--addr    addr-spec    Walk a range of pages\n            -b|--bits    bits-spec    Walk pages with specified bits\n            -l|--list                 Show page details in ranges\n            -L|--list-each            Show page details one by one\n            -N|--no-summary           Don\u0027t show summay info\n            -h|--help                 Show this usage message\naddr-spec:\n            N                         one page at offset N (unit: pages)\n            N+M                       pages range from N to N+M-1\n            N,M                       pages range from N to M-1\n            N,                        pages range from N to end\n            ,M                        pages range from 0 to M\nbits-spec:\n            bit1,bit2                 (flags \u0026 (bit1|bit2)) !\u003d 0\n            bit1,bit2\u003dbit1            (flags \u0026 (bit1|bit2)) \u003d\u003d bit1\n            bit1,~bit2                (flags \u0026 (bit1|bit2)) \u003d\u003d bit1\n            \u003dbit1,bit2                flags \u003d\u003d (bit1|bit2)\nbit-names:\n          locked              error         referenced           uptodate\n           dirty                lru             active               slab\n       writeback            reclaim              buddy               mmap\n       anonymous          swapcache         swapbacked      compound_head\n   compound_tail               huge        unevictable           hwpoison\n          nopage           reserved(r)         mlocked(r)    mappedtodisk(r)\n         private(r)       private_2(r)   owner_private(r)            arch(r)\n        uncached(r)       readahead(o)       slob_free(o)     slub_frozen(o)\n      slub_debug(o)\n                                   (r) raw mode bits  (o) overloaded bits\n\n# ./page-types\n             flags      page-count       MB  symbolic-flags                     long-symbolic-flags\n0x0000000000000000          487369     1903  _________________________________\n0x0000000000000014               5        0  __R_D____________________________  referenced,dirty\n0x0000000000000020               1        0  _____l___________________________  lru\n0x0000000000000024              34        0  __R__l___________________________  referenced,lru\n0x0000000000000028            3838       14  ___U_l___________________________  uptodate,lru\n0x0001000000000028              48        0  ___U_l_______________________I___  uptodate,lru,readahead\n0x000000000000002c            6478       25  __RU_l___________________________  referenced,uptodate,lru\n0x000100000000002c              47        0  __RU_l_______________________I___  referenced,uptodate,lru,readahead\n0x0000000000000040            8344       32  ______A__________________________  active\n0x0000000000000060               1        0  _____lA__________________________  lru,active\n0x0000000000000068             348        1  ___U_lA__________________________  uptodate,lru,active\n0x0001000000000068              12        0  ___U_lA______________________I___  uptodate,lru,active,readahead\n0x000000000000006c             988        3  __RU_lA__________________________  referenced,uptodate,lru,active\n0x000100000000006c              48        0  __RU_lA______________________I___  referenced,uptodate,lru,active,readahead\n0x0000000000004078               1        0  ___UDlA_______b__________________  uptodate,dirty,lru,active,swapbacked\n0x000000000000407c              34        0  __RUDlA_______b__________________  referenced,uptodate,dirty,lru,active,swapbacked\n0x0000000000000400             503        1  __________B______________________  buddy\n0x0000000000000804               1        0  __R________M_____________________  referenced,mmap\n0x0000000000000828            1029        4  ___U_l_____M_____________________  uptodate,lru,mmap\n0x0001000000000828              43        0  ___U_l_____M_________________I___  uptodate,lru,mmap,readahead\n0x000000000000082c             382        1  __RU_l_____M_____________________  referenced,uptodate,lru,mmap\n0x000100000000082c              12        0  __RU_l_____M_________________I___  referenced,uptodate,lru,mmap,readahead\n0x0000000000000868             192        0  ___U_lA____M_____________________  uptodate,lru,active,mmap\n0x0001000000000868              12        0  ___U_lA____M_________________I___  uptodate,lru,active,mmap,readahead\n0x000000000000086c             800        3  __RU_lA____M_____________________  referenced,uptodate,lru,active,mmap\n0x000100000000086c              31        0  __RU_lA____M_________________I___  referenced,uptodate,lru,active,mmap,readahead\n0x0000000000004878               2        0  ___UDlA____M__b__________________  uptodate,dirty,lru,active,mmap,swapbacked\n0x0000000000001000             492        1  ____________a____________________  anonymous\n0x0000000000005808               4        0  ___U_______Ma_b__________________  uptodate,mmap,anonymous,swapbacked\n0x0000000000005868            2839       11  ___U_lA____Ma_b__________________  uptodate,lru,active,mmap,anonymous,swapbacked\n0x000000000000586c              30        0  __RU_lA____Ma_b__________________  referenced,uptodate,lru,active,mmap,anonymous,swapbacked\n             total          513968     2007\n\n# ./page-types -r\n             flags      page-count       MB  symbolic-flags                     long-symbolic-flags\n0x0000000000000000          468002     1828  _________________________________\n0x0000000100000000           19102       74  _____________________r___________  reserved\n0x0000000000008000              41        0  _______________H_________________  compound_head\n0x0000000000010000             188        0  ________________T________________  compound_tail\n0x0000000000008014               1        0  __R_D__________H_________________  referenced,dirty,compound_head\n0x0000000000010014               4        0  __R_D___________T________________  referenced,dirty,compound_tail\n0x0000000000000020               1        0  _____l___________________________  lru\n0x0000000800000024              34        0  __R__l__________________P________  referenced,lru,private\n0x0000000000000028            3794       14  ___U_l___________________________  uptodate,lru\n0x0001000000000028              46        0  ___U_l_______________________I___  uptodate,lru,readahead\n0x0000000400000028              44        0  ___U_l_________________d_________  uptodate,lru,mappedtodisk\n0x0001000400000028               2        0  ___U_l_________________d_____I___  uptodate,lru,mappedtodisk,readahead\n0x000000000000002c            6434       25  __RU_l___________________________  referenced,uptodate,lru\n0x000100000000002c              47        0  __RU_l_______________________I___  referenced,uptodate,lru,readahead\n0x000000040000002c              14        0  __RU_l_________________d_________  referenced,uptodate,lru,mappedtodisk\n0x000000080000002c              30        0  __RU_l__________________P________  referenced,uptodate,lru,private\n0x0000000800000040            8124       31  ______A_________________P________  active,private\n0x0000000000000040             219        0  ______A__________________________  active\n0x0000000800000060               1        0  _____lA_________________P________  lru,active,private\n0x0000000000000068             322        1  ___U_lA__________________________  uptodate,lru,active\n0x0001000000000068              12        0  ___U_lA______________________I___  uptodate,lru,active,readahead\n0x0000000400000068              13        0  ___U_lA________________d_________  uptodate,lru,active,mappedtodisk\n0x0000000800000068              12        0  ___U_lA_________________P________  uptodate,lru,active,private\n0x000000000000006c             977        3  __RU_lA__________________________  referenced,uptodate,lru,active\n0x000100000000006c              48        0  __RU_lA______________________I___  referenced,uptodate,lru,active,readahead\n0x000000040000006c               5        0  __RU_lA________________d_________  referenced,uptodate,lru,active,mappedtodisk\n0x000000080000006c               3        0  __RU_lA_________________P________  referenced,uptodate,lru,active,private\n0x0000000c0000006c               3        0  __RU_lA________________dP________  referenced,uptodate,lru,active,mappedtodisk,private\n0x0000000c00000068               1        0  ___U_lA________________dP________  uptodate,lru,active,mappedtodisk,private\n0x0000000000004078               1        0  ___UDlA_______b__________________  uptodate,dirty,lru,active,swapbacked\n0x000000000000407c              34        0  __RUDlA_______b__________________  referenced,uptodate,dirty,lru,active,swapbacked\n0x0000000000000400             538        2  __________B______________________  buddy\n0x0000000000000804               1        0  __R________M_____________________  referenced,mmap\n0x0000000000000828            1029        4  ___U_l_____M_____________________  uptodate,lru,mmap\n0x0001000000000828              43        0  ___U_l_____M_________________I___  uptodate,lru,mmap,readahead\n0x000000000000082c             382        1  __RU_l_____M_____________________  referenced,uptodate,lru,mmap\n0x000100000000082c              12        0  __RU_l_____M_________________I___  referenced,uptodate,lru,mmap,readahead\n0x0000000000000868             192        0  ___U_lA____M_____________________  uptodate,lru,active,mmap\n0x0001000000000868              12        0  ___U_lA____M_________________I___  uptodate,lru,active,mmap,readahead\n0x000000000000086c             800        3  __RU_lA____M_____________________  referenced,uptodate,lru,active,mmap\n0x000100000000086c              31        0  __RU_lA____M_________________I___  referenced,uptodate,lru,active,mmap,readahead\n0x0000000000004878               2        0  ___UDlA____M__b__________________  uptodate,dirty,lru,active,mmap,swapbacked\n0x0000000000001000             492        1  ____________a____________________  anonymous\n0x0000000000005008               2        0  ___U________a_b__________________  uptodate,anonymous,swapbacked\n0x0000000000005808               4        0  ___U_______Ma_b__________________  uptodate,mmap,anonymous,swapbacked\n0x000000000000580c               1        0  __RU_______Ma_b__________________  referenced,uptodate,mmap,anonymous,swapbacked\n0x0000000000005868            2839       11  ___U_lA____Ma_b__________________  uptodate,lru,active,mmap,anonymous,swapbacked\n0x000000000000586c              29        0  __RU_lA____Ma_b__________________  referenced,uptodate,lru,active,mmap,anonymous,swapbacked\n             total          513968     2007\n\n# ./page-types --raw --list --no-summary --bits reserved\noffset  count   flags\n0       15      _____________________r___________\n31      4       _____________________r___________\n159     97      _____________________r___________\n4096    2067    _____________________r___________\n6752    2390    _____________________r___________\n9355    3       _____________________r___________\n9728    14526   _____________________r___________\n\nThis patch:\n\nIntroduce PageHuge(), which identifies huge/gigantic pages by their\ndedicated compound destructor functions.\n\nAlso move prep_compound_gigantic_page() to hugetlb.c and make\n__free_pages_ok() non-static.\n\nSigned-off-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: Matt Mackall \u003cmpm@selenic.com\u003e\nCc: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "62bc62a873116805774ffd37d7f86aa4faa832b1",
      "tree": "7f3f5b94b2d484a13ca27b8d3f6f54cfe126d7c0",
      "parents": [
        "974709bdb2a34db378fc84140220f363f558d0d6"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "cl@linux-foundation.org",
        "time": "Tue Jun 16 15:32:15 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:35 2009 -0700"
      },
      "message": "page allocator: use a pre-calculated value instead of num_online_nodes() in fast paths\n\nnum_online_nodes() is called in a number of places but most often by the\npage allocator when deciding whether the zonelist needs to be filtered\nbased on cpusets or the zonelist cache.  This is actually a heavy function\nand touches a number of cache lines.\n\nThis patch stores the number of online nodes at boot time and updates the\nvalue when nodes get onlined and offlined.  The value is then used in a\nnumber of important paths in place of num_online_nodes().\n\n[rientjes@google.com: do not override definition of node_set_online() with macro]\nSigned-off-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: 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: 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": "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": "f83a275dbc5ca1721143698e844243fcadfabf6a",
      "tree": "d76da760e6e234d1d445211c59f0f1087d57facf",
      "parents": [
        "32b154c0b0bae2879bf4e549d861caf1759a3546"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Thu May 28 14:34:40 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri May 29 08:40:03 2009 -0700"
      },
      "message": "mm: account for MAP_SHARED mappings using VM_MAYSHARE and not VM_SHARED in hugetlbfs\n\nAddresses http://bugzilla.kernel.org/show_bug.cgi?id\u003d13302\n\nhugetlbfs reserves huge pages but does not fault them at mmap() time to\nensure that future faults succeed.  The reservation behaviour differs\ndepending on whether the mapping was mapped MAP_SHARED or MAP_PRIVATE.\nFor MAP_SHARED mappings, hugepages are reserved when mmap() is first\ncalled and are tracked based on information associated with the inode.\nOther processes mapping MAP_SHARED use the same reservation.  MAP_PRIVATE\ntrack the reservations based on the VMA created as part of the mmap()\noperation.  Each process mapping MAP_PRIVATE must make its own\nreservation.\n\nhugetlbfs currently checks if a VMA is MAP_SHARED with the VM_SHARED flag\nand not VM_MAYSHARE.  For file-backed mappings, such as hugetlbfs,\nVM_SHARED is set only if the mapping is MAP_SHARED and the file was opened\nread-write.  If a shared memory mapping was mapped shared-read-write for\npopulating of data and mapped shared-read-only by other processes, then\nhugetlbfs would account for the mapping as if it was MAP_PRIVATE.  This\ncauses processes to fail to map the file MAP_SHARED even though it should\nsucceed as the reservation is there.\n\nThis patch alters mm/hugetlb.c and replaces VM_SHARED with VM_MAYSHARE\nwhen the intent of the code was to check whether the VMA was mapped\nMAP_SHARED or MAP_PRIVATE.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: \u003cstable@kernel.org\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: \u003cstarlight@binnacle.cx\u003e\nCc: Eric B Munson \u003cebmunson@us.ibm.com\u003e\nCc: Adam Litke \u003cagl@us.ibm.com\u003e\nCc: Andy Whitcroft \u003capw@canonical.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e2f17d9459aeccf4e013e31cbd741d6b1858eec4",
      "tree": "919fb245d700a04d253247e19db0b084454b20cc",
      "parents": [
        "d1d7487173eab8352125cf6cc271940f24254bd4"
      ],
      "author": {
        "name": "Roel Kluin",
        "email": "roel.kluin@gmail.com",
        "time": "Tue Mar 31 15:23:15 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 01 08:59:13 2009 -0700"
      },
      "message": "hugetlb: chg cannot become less than 0\n\nchg is unsigned, so it cannot be less than 0.\n\nAlso, since region_chg returns long, let vma_needs_reservation() forward\nthis to alloc_huge_page().  Store it as long as well.  all callers cast it\nto long anyway.\n\nSigned-off-by: Roel Kluin \u003croel.kluin@gmail.com\u003e\nCc: Andy Whitcroft \u003capw@shadowen.org\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Adam Litke \u003cagl@us.ibm.com\u003e\nCc: Johannes Weiner \u003channes@saeurebad.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "17c9d12e126cb0de8d535dc1908c4819d712bc68",
      "tree": "a1a9a07e2eb70e8c474d3bd040d724413bde9718",
      "parents": [
        "6c6f1f0f4db31a192916eaa31ec2f114fda7d5e5"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Wed Feb 11 16:34:16 2009 +0000"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Feb 11 12:38:09 2009 -0800"
      },
      "message": "Do not account for hugetlbfs quota at mmap() time if mapping [SHM|MAP]_NORESERVE\n\nCommit 5a6fe125950676015f5108fb71b2a67441755003 brought hugetlbfs more\nin line with the core VM by obeying VM_NORESERVE and not reserving\nhugepages for both shared and private mappings when [SHM|MAP]_NORESERVE\nare specified.  However, it is still taking filesystem quota\nunconditionally.\n\nAt fault time, if there are no reserves and attempt is made to allocate\nthe page and account for filesystem quota.  If either fail, the fault\nfails.  The impact is that quota is getting accounted for twice.  This\npatch partially reverts 5a6fe125950676015f5108fb71b2a67441755003.  To\nhelp prevent this mistake happening again, it improves the documentation\nof hugetlb_reserve_pages()\n\nReported-by: Andy Whitcroft \u003capw@canonical.com\u003e\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: Andy Whitcroft \u003capw@canonical.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5a6fe125950676015f5108fb71b2a67441755003",
      "tree": "c985fac46de39392466c4917c497b50bdc9c0757",
      "parents": [
        "4c098bcd55fad34dcf224bf8343db6a9ac58fc68"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Feb 10 14:02:27 2009 +0000"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Feb 10 10:48:42 2009 -0800"
      },
      "message": "Do not account for the address space used by hugetlbfs using VM_ACCOUNT\n\nWhen overcommit is disabled, the core VM accounts for pages used by anonymous\nshared, private mappings and special mappings. It keeps track of VMAs that\nshould be accounted for with VM_ACCOUNT and VMAs that never had a reserve\nwith VM_NORESERVE.\n\nOvercommit for hugetlbfs is much riskier than overcommit for base pages\ndue to contiguity requirements. It avoids overcommiting on both shared and\nprivate mappings using reservation counters that are checked and updated\nduring mmap(). This ensures (within limits) that hugepages exist in the\nfuture when faults occurs or it is too easy to applications to be SIGKILLed.\n\nAs hugetlbfs makes its own reservations of a different unit to the base page\nsize, VM_ACCOUNT should never be set. Even if the units were correct, we would\ndouble account for the usage in the core VM and hugetlbfs. VM_NORESERVE may\nbe set because an application can request no reserves be made for hugetlbfs\nat the risk of getting killed later.\n\nWith commit fc8744adc870a8d4366908221508bb113d8b72ee, VM_NORESERVE and\nVM_ACCOUNT are getting unconditionally set for hugetlbfs-backed mappings. This\nbreaks the accounting for both the core VM and hugetlbfs, can trigger an\nOOM storm when hugepage pools are too small lockups and corrupted counters\notherwise are used. This patch brings hugetlbfs more in line with how the\ncore VM treats VM_NORESERVE but prevents VM_ACCOUNT being set.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "91f47662dfaa5b459aebe13284c6c38db27350dc",
      "tree": "f2ab72a8be3219b1233e9c63e87f235219df3053",
      "parents": [
        "73ce02e96fe34a983199a9855b2ae738f960a6ee"
      ],
      "author": {
        "name": "Cyrill Gorcunov",
        "email": "gorcunov@gmail.com",
        "time": "Tue Jan 06 14:40:33 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 06 15:59:10 2009 -0800"
      },
      "message": "mm: hugetlb: remove redundant `if\u0027 operation\n\nAt this point we already know that \u0027addr\u0027 is not NULL so get rid of\nredundant \u0027if\u0027.  Probably gcc eliminate it by optimization pass.\n\n[akpm@linux-foundation.org: use __weak, too]\nSigned-off-by: Cyrill Gorcunov \u003cgorcunov@openvz.org\u003e\nReviewed-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ebdd4aea8d736e3b5ce27ab0a26860c9fded341b",
      "tree": "4d19d85c0f7bf668a530a69d76d7c8157e8bcba4",
      "parents": [
        "f0d7a4b3ed46816f5097d521850a8ab7a0d40f3c"
      ],
      "author": {
        "name": "Hannes Eder",
        "email": "hannes@hanneseder.net",
        "time": "Tue Jan 06 14:39:58 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 06 15:59:06 2009 -0800"
      },
      "message": "hugetlb: fix sparse warnings\n\nFix the following sparse warnings:\n\n  mm/hugetlb.c:375:3: warning: returning void-valued expression\n  mm/hugetlb.c:408:3: warning: returning void-valued expression\n\nSigned-off-by: Hannes Eder \u003channes@hanneseder.net\u003e\nAcked-by: Nishanth Aravamudan \u003cnacc@us.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": "3340289ddf29ca75c3acfb3a6b72f234b2f74d5c",
      "tree": "d5da94eb1cb0146160fcb0e7aa161bfa5b6ac807",
      "parents": [
        "08fba69986e20c1c9e5fe2e6064d146cc4f42480"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Jan 06 14:38:54 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 06 15:58:58 2009 -0800"
      },
      "message": "mm: report the MMU pagesize in /proc/pid/smaps\n\nThe KernelPageSize entry in /proc/pid/smaps is the pagesize used by the\nkernel to back a VMA.  This matches the size used by the MMU in the\nmajority of cases.  However, one counter-example occurs on PPC64 kernels\nwhereby a kernel using 64K as a base pagesize may still use 4K pages for\nthe MMU on older processor.  To distinguish, this patch reports\nMMUPageSize as the pagesize used by the MMU in /proc/pid/smaps.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: \"KOSAKI Motohiro\" \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Alexey Dobriyan \u003cadobriyan@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": "08fba69986e20c1c9e5fe2e6064d146cc4f42480",
      "tree": "40bd36a6778624527d91ede0eb51aa5b99aab01c",
      "parents": [
        "238c6d54830c624f34ac9cf123ac04aebfca5013"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Jan 06 14:38:53 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 06 15:58:58 2009 -0800"
      },
      "message": "mm: report the pagesize backing a VMA in /proc/pid/smaps\n\nIt is useful to verify a hugepage-aware application is using the expected\npagesizes for its memory regions. This patch creates an entry called\nKernelPageSize in /proc/pid/smaps that is the size of page used by the\nkernel to back a VMA. The entry is not called PageSize as it is possible\nthe MMU uses a different size. This extension should not break any sensible\nparser that skips lines containing unrecognised information.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: \"KOSAKI Motohiro\" \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Alexey Dobriyan \u003cadobriyan@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": "7526674de0c921e7f1e9b6f71a1f9d832557b554",
      "tree": "9b40d13ecd775197b74fcb396d6aba7ce5ea589e",
      "parents": [
        "b5f1f5557fd83fe92bdf2d2e80e431d655464d6c"
      ],
      "author": {
        "name": "Adam Litke",
        "email": "agl@us.ibm.com",
        "time": "Wed Nov 12 13:24:56 2008 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Nov 12 17:17:16 2008 -0800"
      },
      "message": "hugetlb: make unmap_ref_private multi-size-aware\n\nOops.  Part of the hugetlb private reservation code was not fully\nconverted to use hstates.\n\nWhen a huge page must be unmapped from VMAs due to a failed COW,\nHPAGE_SIZE is used in the call to unmap_hugepage_range() regardless of\nthe page size being used.  This works if the VMA is using the default\nhuge page size.  Otherwise we might unmap too much, too little, or\ntrigger a BUG_ON.  Rare but serious -- fix it.\n\nSigned-off-by: Adam Litke \u003cagl@us.ibm.com\u003e\nCc: Jon Tollefson \u003ckniht@linux.vnet.ibm.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": "18229df5b613ed0732a766fc37850de2e7988e43",
      "tree": "ab235f27a5a9d93b8f94773252a1d8f660b9fad1",
      "parents": [
        "69d177c2fc702d402b17fdca2190d5a7e3ca55c5"
      ],
      "author": {
        "name": "Andy Whitcroft",
        "email": "apw@shadowen.org",
        "time": "Thu Nov 06 12:53:27 2008 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Nov 06 15:41:18 2008 -0800"
      },
      "message": "hugetlb: pull gigantic page initialisation out of the default path\n\nAs we can determine exactly when a gigantic page is in use we can optimise\nthe common regular page cases by pulling out gigantic page initialisation\ninto its own function.  As gigantic pages are never released to buddy we\ndo not need a destructor.  This effectivly reverts the previous change to\nthe main buddy allocator.  It also adds a paranoid check to ensure we\nnever release gigantic pages from hugetlbfs to the main buddy.\n\nSigned-off-by: Andy Whitcroft \u003capw@shadowen.org\u003e\nCc: Jon Tollefson \u003ckniht@linux.vnet.ibm.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: \u003cstable@kernel.org\u003e\t\t[2.6.27.x]\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "69d177c2fc702d402b17fdca2190d5a7e3ca55c5",
      "tree": "2040e0a84b7c07c29ac6fb6e51e125de52256f5d",
      "parents": [
        "22bece00dc1f28dd3374c55e464c9f02eb642876"
      ],
      "author": {
        "name": "Andy Whitcroft",
        "email": "apw@shadowen.org",
        "time": "Thu Nov 06 12:53:26 2008 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Nov 06 15:41:18 2008 -0800"
      },
      "message": "hugetlbfs: handle pages higher order than MAX_ORDER\n\nWhen working with hugepages, hugetlbfs assumes that those hugepages are\nsmaller than MAX_ORDER.  Specifically it assumes that the mem_map is\ncontigious and uses that to optimise access to the elements of the mem_map\nthat represent the hugepage.  Gigantic pages (such as 16GB pages on\npowerpc) by definition are of greater order than MAX_ORDER (larger than\nMAX_ORDER_NR_PAGES in size).  This means that we can no longer make use of\nthe buddy alloctor guarentees for the contiguity of the mem_map, which\nensures that the mem_map is at least contigious for maximmally aligned\nareas of MAX_ORDER_NR_PAGES pages.\n\nThis patch adds new mem_map accessors and iterator helpers which handle\nany discontiguity at MAX_ORDER_NR_PAGES boundaries.  It then uses these to\nimplement gigantic page versions of copy_huge_page and clear_huge_page,\nand to allow follow_hugetlb_page handle gigantic pages.\n\nSigned-off-by: Andy Whitcroft \u003capw@shadowen.org\u003e\nCc: Jon Tollefson \u003ckniht@linux.vnet.ibm.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: \u003cstable@kernel.org\u003e\t\t[2.6.27.x]\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e1759c215bee5abbcb6cb066590ab20905154ed5",
      "tree": "14a43e259767082706dab112292ff92e13ce42a4",
      "parents": [
        "9617760287eec9091d26e6967bd3e4194de18f97"
      ],
      "author": {
        "name": "Alexey Dobriyan",
        "email": "adobriyan@gmail.com",
        "time": "Wed Oct 15 23:50:22 2008 +0400"
      },
      "committer": {
        "name": "Alexey Dobriyan",
        "email": "adobriyan@gmail.com",
        "time": "Thu Oct 23 13:52:40 2008 +0400"
      },
      "message": "proc: switch /proc/meminfo to seq_file\n\nand move it to fs/proc/meminfo.c while I\u0027m at it.\n\nSigned-off-by: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\n"
    },
    {
      "commit": "4b2e38ad703541f7845c2d766426148b8d1aa329",
      "tree": "aaafbec5325d15c38c382c655120fb6492c11f82",
      "parents": [
        "e575f111dc0f27044e170580e7de50985ab3e011"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Sat Oct 18 20:27:10 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Oct 20 08:52:32 2008 -0700"
      },
      "message": "hugepage: support ZERO_PAGE()\n\nPresently hugepage doesn\u0027t use zero page at all because zero page is only\nused for coredumping and hugepage can\u0027t core dump.\n\nHowever we have now implemented hugepage coredumping.  Therefore we should\nimplement the zero page of hugepage.\n\nImplementation note:\n\no Why do we only check VM_SHARED for zero page?\n  normal page checked as ..\n\n\tstatic inline int use_zero_page(struct vm_area_struct *vma)\n\t{\n\t        if (vma-\u003evm_flags \u0026 (VM_LOCKED | VM_SHARED))\n\t                return 0;\n\n\t        return !vma-\u003evm_ops || !vma-\u003evm_ops-\u003efault;\n\t}\n\nFirst, hugepages are never mlock()ed.  We aren\u0027t concerned with VM_LOCKED.\n\nSecond, hugetlbfs is a pseudo filesystem, not a real filesystem and it\ndoesn\u0027t have any file backing.  Thus ops-\u003efault checking is meaningless.\n\no Why don\u0027t we use zero page if !pte.\n\n!pte indicate {pud, pmd} doesn\u0027t exist or some error happened.  So we\nshouldn\u0027t return zero page if any error occurred.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Adam Litke \u003cagl@us.ibm.com\u003e\nCc: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: Kawai Hidehiro \u003chidehiro.kawai.ez@hitachi.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": "2a4b3ded5c76fbe373d6415b1b3ad4841f15c9bd",
      "tree": "32569113d280e8b69c81359246a51173b187ed74",
      "parents": [
        "db64fe02258f1507e13fe5212a989922323685ce"
      ],
      "author": {
        "name": "Harvey Harrison",
        "email": "harvey.harrison@gmail.com",
        "time": "Sat Oct 18 20:27:06 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Oct 20 08:52:32 2008 -0700"
      },
      "message": "mm: hugetlb.c make functions static, use NULL rather than 0\n\nmm/hugetlb.c:265:17: warning: symbol \u0027resv_map_alloc\u0027 was not declared. Should it be static?\nmm/hugetlb.c:277:6: warning: symbol \u0027resv_map_release\u0027 was not declared. Should it be static?\nmm/hugetlb.c:292:9: warning: Using plain integer as NULL pointer\nmm/hugetlb.c:1750:5: warning: symbol \u0027unmap_ref_private\u0027 was not declared. Should it be static?\n\nSigned-off-by: Harvey Harrison \u003charvey.harrison@gmail.com\u003e\nAcked-by: Andy Whitcroft \u003capw@shadowen.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4f98a2fee8acdb4ac84545df98cccecfd130f8db",
      "tree": "035a2937f4c3e2f7b4269412041c073ac646937c",
      "parents": [
        "b2e185384f534781fd22f5ce170b2ad26f97df70"
      ],
      "author": {
        "name": "Rik van Riel",
        "email": "riel@redhat.com",
        "time": "Sat Oct 18 20:26:32 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Oct 20 08:50:25 2008 -0700"
      },
      "message": "vmscan: split LRU lists into anon \u0026 file sets\n\nSplit the LRU lists in two, one set for pages that are backed by real file\nsystems (\"file\") and one for pages that are backed by memory and swap\n(\"anon\").  The latter includes tmpfs.\n\nThe advantage of doing this is that the VM will not have to scan over lots\nof anonymous pages (which we generally do not want to swap out), just to\nfind the page cache pages that it should evict.\n\nThis patch has the infrastructure and a basic policy to balance how much\nwe scan the anon lists and how much we scan the file lists.  The big\npolicy changes are in separate patches.\n\n[lee.schermerhorn@hp.com: collect lru meminfo statistics from correct offset]\n[kosaki.motohiro@jp.fujitsu.com: prevent incorrect oom under split_lru]\n[kosaki.motohiro@jp.fujitsu.com: fix pagevec_move_tail() doesn\u0027t treat unevictable page]\n[hugh@veritas.com: memcg swapbacked pages active]\n[hugh@veritas.com: splitlru: BDI_CAP_SWAP_BACKED]\n[akpm@linux-foundation.org: fix /proc/vmstat units]\n[nishimura@mxp.nes.nec.co.jp: memcg: fix handling of shmem migration]\n[kosaki.motohiro@jp.fujitsu.com: adjust Quicklists field of /proc/meminfo]\n[kosaki.motohiro@jp.fujitsu.com: fix style issue of get_scan_ratio()]\nSigned-off-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Hugh Dickins \u003chugh@veritas.com\u003e\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b4d1d99fdd8b98fb03dfd6ef9b0ece220de38640",
      "tree": "e2bdf12aa53b71430edd312f441c79fdd6114535",
      "parents": [
        "db99100d2ed40dd9736fcb1adb3657a98f9bcfd9"
      ],
      "author": {
        "name": "David Gibson",
        "email": "david@gibson.dropbear.id.au",
        "time": "Wed Oct 15 22:01:11 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 16 11:21:29 2008 -0700"
      },
      "message": "hugetlb: handle updating of ACCESSED and DIRTY in hugetlb_fault()\n\nThe page fault path for normal pages, if the fault is neither a no-page\nfault nor a write-protect fault, will update the DIRTY and ACCESSED bits\nin the page table appropriately.\n\nThe hugepage fault path, however, does not do this, handling only no-page\nor write-protect type faults.  It assumes that either the ACCESSED and\nDIRTY bits are irrelevant for hugepages (usually true, since they are\nnever swapped) or that they are handled by the arch code.\n\nThis is inconvenient for some software-loaded TLB architectures, where the\n_PAGE_ACCESSED (_PAGE_DIRTY) bits need to be set to enable read (write)\naccess to the page at the TLB miss.  This could be worked around in the\narch TLB miss code, but the TLB miss fast path can be made simple more\neasily if the hugetlb_fault() path handles this, as the normal page fault\npath does.\n\nSigned-off-by: David Gibson \u003cdavid@gibson.dropbear.id.au\u003e\nCc: William Lee Irwin III \u003cwli@holomorphy.com\u003e\nCc: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: Adam Litke \u003cagl@us.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": "2b26736c88db85c038e04c2306d0745553e69602",
      "tree": "3914f58d18e93e33eee1256027551954ff24a432",
      "parents": [
        "57303d80175e10056bf51206f9961d586f02f967"
      ],
      "author": {
        "name": "Andy Whitcroft",
        "email": "apw@shadowen.org",
        "time": "Tue Aug 12 15:08:49 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Aug 12 16:07:28 2008 -0700"
      },
      "message": "allocate structures for reservation tracking in hugetlbfs outside of spinlocks v2\n\n[Andrew this should replace the previous version which did not check\nthe returns from the region prepare for errors.  This has been tested by\nus and Gerald and it looks good.\n\nBah, while reviewing the locking based on your previous email I spotted\nthat we need to check the return from the vma_needs_reservation call for\nallocation errors.  Here is an updated patch to correct this.  This passes\ntesting here.]\n\nSigned-off-by: Andy Whitcroft \u003capw@shadowen.org\u003e\nTested-by: Gerald Schaefer \u003cgerald.schaefer@de.ibm.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": "57303d80175e10056bf51206f9961d586f02f967",
      "tree": "3979c1d3e6bf154227ef94245c5a7b6141512211",
      "parents": [
        "ff1a4a7b14ae146142b1c93a001304caf662ae13"
      ],
      "author": {
        "name": "Andy Whitcroft",
        "email": "apw@shadowen.org",
        "time": "Tue Aug 12 15:08:47 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Aug 12 16:07:28 2008 -0700"
      },
      "message": "hugetlbfs: allocate structures for reservation tracking outside of spinlocks\n\nIn the normal case, hugetlbfs reserves hugepages at map time so that the\npages exist for future faults.  A struct file_region is used to track when\nreservations have been consumed and where.  These file_regions are\nallocated as necessary with kmalloc() which can sleep with the\nmm-\u003epage_table_lock held.  This is wrong and triggers may-sleep warning\nwhen PREEMPT is enabled.\n\nUpdates to the underlying file_region are done in two phases.  The first\nphase prepares the region for the change, allocating any necessary memory,\nwithout actually making the change.  The second phase actually commits the\nchange.  This patch makes use of this by checking the reservations before\nthe page_table_lock is taken; triggering any necessary allocations.  This\nmay then be safely repeated within the locks without any allocations being\nrequired.\n\nCredit to Mel Gorman for diagnosing this failure and initial versions of\nthe patch.\n\nSigned-off-by: Andy Whitcroft \u003capw@shadowen.org\u003e\nTested-by: Gerald Schaefer \u003cgerald.schaefer@de.ibm.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": "caff3a2c333e11a794308bd9a875a09b94fee24a",
      "tree": "3cc787b8b61913bc6b93b28eafd963f786d96b53",
      "parents": [
        "02eb7eeb8990b9cbd32c7bc1ef2d431ca390e44a"
      ],
      "author": {
        "name": "Gerald Schaefer",
        "email": "gerald.schaefer@de.ibm.com",
        "time": "Tue Aug 12 15:08:38 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Aug 12 16:07:27 2008 -0700"
      },
      "message": "hugetlb: call arch_prepare_hugepage() for surplus pages\n\nThe s390 software large page emulation implements shared page tables by\nusing page-\u003eindex of the first tail page from a compound large page to\nstore page table information.  This is set up in arch_prepare_hugepage(),\nwhich is called from alloc_fresh_huge_page_node().\n\nA similar call to arch_prepare_hugepage() is missing for surplus large\npages that are allocated in alloc_buddy_huge_page(), which breaks the\nsoftware emulation mode for (surplus) large pages on s390.  This patch\nadds the missing call to arch_prepare_hugepage().  It will have no effect\non other architectures where arch_prepare_hugepage() is a nop.\n\nAlso, use the correct order in the error path in alloc_fresh_huge_page_node().\n\nAcked-by: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nSigned-off-by: Gerald Schaefer \u003cgerald.schaefer@de.ibm.com\u003e\nAcked-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nAcked-by: Adam Litke \u003cagl@us.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": "d6606683a5e3dac35cb979c7195f54ed827567bd",
      "tree": "05abf88c9de4b1c99de2c8f955d6c04c2e8abc6a",
      "parents": [
        "a14ad05f47b55ea84136eb4da43ea96fa469326a"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 06 12:04:54 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 06 12:04:54 2008 -0700"
      },
      "message": "Revert duplicate \"mm/hugetlb.c must #include \u003casm/io.h\u003e\"\n\nThis reverts commit 7cb93181629c613ee2b8f4ffe3446f8003074842, since we\ndid that patch twice, and the problem was already fixed earlier by\n78a34ae29bf1c9df62a5bd0f0798b6c62a54d520.\n\nReported-by: Andi Kleen \u003candi@firstfloor.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "0ef89d25d3e390dfa7c46772907951744a4067dc",
      "tree": "768d97175d6df35408733f6fe40cf414b4ac75bd",
      "parents": [
        "c6de002617c199f80f9a2a713dffc263bdc69b81"
      ],
      "author": {
        "name": "Benjamin Herrenschmidt",
        "email": "benh@kernel.crashing.org",
        "time": "Thu Jul 31 00:07:30 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Aug 01 12:46:41 2008 -0700"
      },
      "message": "mm/hugetlb: don\u0027t crash when HPAGE_SHIFT is 0\n\nSome platform decide whether they support huge pages at boot time.  On\nthese, such as powerpc, HPAGE_SHIFT is a variable, not a constant, and is\nset to 0 when there is no such support.\n\nThe patches to introduce multiple huge pages support broke that causing\nthe kernel to crash at boot time on machines such as POWER3 which lack\nsupport for multiple page sizes.\n\nSigned-off-by: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "00e9028a95fb8a4d79f2fb695a853f33ea7d3b57",
      "tree": "2dea2ae498a6ce57de8890e87185aca5e9f3ad2d",
      "parents": [
        "57b1494d2ba544c62673234da6115c21fac27ffc",
        "7cb93181629c613ee2b8f4ffe3446f8003074842"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Aug 01 10:53:43 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Aug 01 10:53:43 2008 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6: (28 commits)\n  mm/hugetlb.c must #include \u003casm/io.h\u003e\n  video: Fix up hp6xx driver build regressions.\n  sh: defconfig updates.\n  sh: Kill off stray mach-rsk7203 reference.\n  serial: sh-sci: Fix up SH7760/SH7780/SH7785 early printk regression.\n  sh: Move out individual boards without mach groups.\n  sh: Make sure AT_SYSINFO_EHDR is exposed to userspace in asm/auxvec.h.\n  sh: Allow SH-3 and SH-5 to use common headers.\n  sh: Provide common CPU headers, prune the SH-2 and SH-2A directories.\n  sh/maple: clean maple bus code\n  sh: More header path fixups for mach dir refactoring.\n  sh: Move out the solution engine headers to arch/sh/include/mach-se/\n  sh: I2C fix for AP325RXA and Migo-R\n  sh: Shuffle the board directories in to mach groups.\n  sh: dma-sh: Fix up dreamcast dma.h mach path.\n  sh: Switch KBUILD_DEFCONFIG to shx3_defconfig.\n  sh: Add ARCH_DEFCONFIG entries for sh and sh64.\n  sh: Fix compile error of Solution Engine\n  sh: Proper __put_user_asm() size mismatch fix.\n  sh: Stub in a dummy ENTRY_OFFSET for uImage offset calculation.\n  ...\n"
    },
    {
      "commit": "7cb93181629c613ee2b8f4ffe3446f8003074842",
      "tree": "3665bf0e793dfa63020514de8c549a65430c5ab0",
      "parents": [
        "193f3c2f1531ec9755a87a33038fba3ee29f6ca5"
      ],
      "author": {
        "name": "Adrian Bunk",
        "email": "bunk@kernel.org",
        "time": "Wed Jul 30 02:18:26 2008 +0900"
      },
      "committer": {
        "name": "Paul Mundt",
        "email": "lethal@linux-sh.org",
        "time": "Wed Jul 30 02:18:26 2008 +0900"
      },
      "message": "mm/hugetlb.c must #include \u003casm/io.h\u003e\n\nThis patch fixes the following build error on sh caused by\ncommit aa888a74977a8f2120ae9332376e179c39a6b07d\n(hugetlb: support larger than MAX_ORDER):\n\n\u003c--  snip  --\u003e\n\n...\n  CC      mm/hugetlb.o\n/home/bunk/linux/kernel-2.6/git/linux-2.6/mm/hugetlb.c: In function \u0027alloc_bootmem_huge_page\u0027:\n/home/bunk/linux/kernel-2.6/git/linux-2.6/mm/hugetlb.c:958: error: implicit declaration of function \u0027virt_to_phys\u0027\nmake[2]: *** [mm/hugetlb.o] Error 1\n\n\u003c--  snip  --\u003e\n\nReported-by: Adrian Bunk \u003cbunk@kernel.org\u003e\nSigned-off-by: Adrian Bunk \u003cbunk@kernel.org\u003e\nSigned-off-by: Paul Mundt \u003clethal@linux-sh.org\u003e\n"
    },
    {
      "commit": "78a34ae29bf1c9df62a5bd0f0798b6c62a54d520",
      "tree": "e8a5576a9142c11be1edc667ecbe7395f8c088ce",
      "parents": [
        "cddb8a5c14aa89810b40495d94d3d2a0faee6619"
      ],
      "author": {
        "name": "Adrian Bunk",
        "email": "bunk@kernel.org",
        "time": "Mon Jul 28 15:46:30 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 28 16:30:21 2008 -0700"
      },
      "message": "mm/hugetlb.c must #include \u003casm/io.h\u003e\n\nThis patch fixes the following build error on sh caused by commit\naa888a74977a8f2120ae9332376e179c39a6b07d (\"hugetlb: support larger than\nMAX_ORDER\"):\n\n  mm/hugetlb.c: In function \u0027alloc_bootmem_huge_page\u0027:\n  mm/hugetlb.c:958: error: implicit declaration of function \u0027virt_to_phys\u0027\n\nSigned-off-by: Adrian Bunk \u003cbunk@kernel.org\u003e\nCc: Hirokazu Takata \u003ctakata@linux-m32r.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "cddb8a5c14aa89810b40495d94d3d2a0faee6619",
      "tree": "d0b47b071f7d2dd1d6f9c36084aa8cfcef90d1da",
      "parents": [
        "7906d00cd1f687268f0a3599442d113767795ae6"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "andrea@qumranet.com",
        "time": "Mon Jul 28 15:46:29 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 28 16:30:21 2008 -0700"
      },
      "message": "mmu-notifiers: core\n\nWith KVM/GFP/XPMEM there isn\u0027t just the primary CPU MMU pointing to pages.\n There are secondary MMUs (with secondary sptes and secondary tlbs) too.\nsptes in the kvm case are shadow pagetables, but when I say spte in\nmmu-notifier context, I mean \"secondary pte\".  In GRU case there\u0027s no\nactual secondary pte and there\u0027s only a secondary tlb because the GRU\nsecondary MMU has no knowledge about sptes and every secondary tlb miss\nevent in the MMU always generates a page fault that has to be resolved by\nthe CPU (this is not the case of KVM where the a secondary tlb miss will\nwalk sptes in hardware and it will refill the secondary tlb transparently\nto software if the corresponding spte is present).  The same way\nzap_page_range has to invalidate the pte before freeing the page, the spte\n(and secondary tlb) must also be invalidated before any page is freed and\nreused.\n\nCurrently we take a page_count pin on every page mapped by sptes, but that\nmeans the pages can\u0027t be swapped whenever they\u0027re mapped by any spte\nbecause they\u0027re part of the guest working set.  Furthermore a spte unmap\nevent can immediately lead to a page to be freed when the pin is released\n(so requiring the same complex and relatively slow tlb_gather smp safe\nlogic we have in zap_page_range and that can be avoided completely if the\nspte unmap event doesn\u0027t require an unpin of the page previously mapped in\nthe secondary MMU).\n\nThe mmu notifiers allow kvm/GRU/XPMEM to attach to the tsk-\u003emm and know\nwhen the VM is swapping or freeing or doing anything on the primary MMU so\nthat the secondary MMU code can drop sptes before the pages are freed,\navoiding all page pinning and allowing 100% reliable swapping of guest\nphysical address space.  Furthermore it avoids the code that teardown the\nmappings of the secondary MMU, to implement a logic like tlb_gather in\nzap_page_range that would require many IPI to flush other cpu tlbs, for\neach fixed number of spte unmapped.\n\nTo make an example: if what happens on the primary MMU is a protection\ndowngrade (from writeable to wrprotect) the secondary MMU mappings will be\ninvalidated, and the next secondary-mmu-page-fault will call\nget_user_pages and trigger a do_wp_page through get_user_pages if it\ncalled get_user_pages with write\u003d1, and it\u0027ll re-establishing an updated\nspte or secondary-tlb-mapping on the copied page.  Or it will setup a\nreadonly spte or readonly tlb mapping if it\u0027s a guest-read, if it calls\nget_user_pages with write\u003d0.  This is just an example.\n\nThis allows to map any page pointed by any pte (and in turn visible in the\nprimary CPU MMU), into a secondary MMU (be it a pure tlb like GRU, or an\nfull MMU with both sptes and secondary-tlb like the shadow-pagetable layer\nwith kvm), or a remote DMA in software like XPMEM (hence needing of\nschedule in XPMEM code to send the invalidate to the remote node, while no\nneed to schedule in kvm/gru as it\u0027s an immediate event like invalidating\nprimary-mmu pte).\n\nAt least for KVM without this patch it\u0027s impossible to swap guests\nreliably.  And having this feature and removing the page pin allows\nseveral other optimizations that simplify life considerably.\n\nDependencies:\n\n1) mm_take_all_locks() to register the mmu notifier when the whole VM\n   isn\u0027t doing anything with \"mm\".  This allows mmu notifier users to keep\n   track if the VM is in the middle of the invalidate_range_begin/end\n   critical section with an atomic counter incraese in range_begin and\n   decreased in range_end.  No secondary MMU page fault is allowed to map\n   any spte or secondary tlb reference, while the VM is in the middle of\n   range_begin/end as any page returned by get_user_pages in that critical\n   section could later immediately be freed without any further\n   -\u003einvalidate_page notification (invalidate_range_begin/end works on\n   ranges and -\u003einvalidate_page isn\u0027t called immediately before freeing\n   the page).  To stop all page freeing and pagetable overwrites the\n   mmap_sem must be taken in write mode and all other anon_vma/i_mmap\n   locks must be taken too.\n\n2) It\u0027d be a waste to add branches in the VM if nobody could possibly\n   run KVM/GRU/XPMEM on the kernel, so mmu notifiers will only enabled if\n   CONFIG_KVM\u003dm/y.  In the current kernel kvm won\u0027t yet take advantage of\n   mmu notifiers, but this already allows to compile a KVM external module\n   against a kernel with mmu notifiers enabled and from the next pull from\n   kvm.git we\u0027ll start using them.  And GRU/XPMEM will also be able to\n   continue the development by enabling KVM\u003dm in their config, until they\n   submit all GRU/XPMEM GPLv2 code to the mainline kernel.  Then they can\n   also enable MMU_NOTIFIERS in the same way KVM does it (even if KVM\u003dn).\n   This guarantees nobody selects MMU_NOTIFIER\u003dy if KVM and GRU and XPMEM\n   are all \u003dn.\n\nThe mmu_notifier_register call can fail because mm_take_all_locks may be\ninterrupted by a signal and return -EINTR.  Because mmu_notifier_reigster\nis used when a driver startup, a failure can be gracefully handled.  Here\nan example of the change applied to kvm to register the mmu notifiers.\nUsually when a driver startups other allocations are required anyway and\n-ENOMEM failure paths exists already.\n\n struct  kvm *kvm_arch_create_vm(void)\n {\n        struct kvm *kvm \u003d kzalloc(sizeof(struct kvm), GFP_KERNEL);\n+       int err;\n\n        if (!kvm)\n                return ERR_PTR(-ENOMEM);\n\n        INIT_LIST_HEAD(\u0026kvm-\u003earch.active_mmu_pages);\n\n+       kvm-\u003earch.mmu_notifier.ops \u003d \u0026kvm_mmu_notifier_ops;\n+       err \u003d mmu_notifier_register(\u0026kvm-\u003earch.mmu_notifier, current-\u003emm);\n+       if (err) {\n+               kfree(kvm);\n+               return ERR_PTR(err);\n+       }\n+\n        return kvm;\n }\n\nmmu_notifier_unregister returns void and it\u0027s reliable.\n\nThe patch also adds a few needed but missing includes that would prevent\nkernel to compile after these changes on non-x86 archs (x86 didn\u0027t need\nthem by luck).\n\n[akpm@linux-foundation.org: coding-style fixes]\n[akpm@linux-foundation.org: fix mm/filemap_xip.c build]\n[akpm@linux-foundation.org: fix mm/mmu_notifier.c build]\nSigned-off-by: Andrea Arcangeli \u003candrea@qumranet.com\u003e\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Jack Steiner \u003csteiner@sgi.com\u003e\nCc: Robin Holt \u003cholt@sgi.com\u003e\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Kanoj Sarcar \u003ckanojsarcar@yahoo.com\u003e\nCc: Roland Dreier \u003crdreier@cisco.com\u003e\nCc: Steve Wise \u003cswise@opengridcomputing.com\u003e\nCc: Avi Kivity \u003cavi@qumranet.com\u003e\nCc: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: Anthony Liguori \u003caliguori@us.ibm.com\u003e\nCc: Chris Wright \u003cchrisw@redhat.com\u003e\nCc: Marcelo Tosatti \u003cmarcelo@kvack.org\u003e\nCc: Eric Dumazet \u003cdada1@cosmosbay.com\u003e\nCc: \"Paul E. McKenney\" \u003cpaulmck@us.ibm.com\u003e\nCc: Izik Eidus \u003cizike@qumranet.com\u003e\nCc: Anthony Liguori \u003caliguori@us.ibm.com\u003e\nCc: Rik van Riel \u003criel@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": "8a21346058ad946134b6ddfeb5de975c3cfcf5da",
      "tree": "cd9210fc5a56a5d3090941d62f1bc0217499940f",
      "parents": [
        "16d69265b930f7e2fa9eea381715696f780718f4"
      ],
      "author": {
        "name": "Nishanth Aravamudan",
        "email": "nacc@us.ibm.com",
        "time": "Fri Jul 25 19:44:37 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Jul 26 12:00:01 2008 -0700"
      },
      "message": "hugetlb: fix CONFIG_SYSCTL\u003dn build\n\nFixes a build failure reported by Alan Cox:\n\nmm/hugetlb.c: In function `hugetlb_acct_memory\u0027: mm/hugetlb.c:1507:\nerror: implicit declaration of function `cpuset_mems_nr\u0027\n\nAlso reverts Ingo\u0027s\n\n    commit e44d1b2998d62a1f2f4d7eb17b56ba396535509f\n    Author: Ingo Molnar \u003cmingo@elte.hu\u003e\n    Date:   Fri Jul 25 12:57:41 2008 +0200\n\n        mm/hugetlb.c: fix build failure with !CONFIG_SYSCTL\n\nwhich fixed the build error but added some unused-static-function warnings.\n\nSigned-off-by: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nCc: Alan Cox \u003calan@lxorguk.ukuu.org.uk\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e44d1b2998d62a1f2f4d7eb17b56ba396535509f",
      "tree": "febb4d6e113c34e0f83375712f078da41a0a59af",
      "parents": [
        "5047887caf1806f31652210df27fb62a7c43f27d"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Jul 25 12:57:41 2008 +0200"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 25 11:35:41 2008 -0700"
      },
      "message": "mm/hugetlb.c: fix build failure with !CONFIG_SYSCTL\n\non !CONFIG_SYSCTL on x86 with latest -git i get:\n\n     mm/hugetlb.c: In function \u0027decrement_hugepage_resv_vma\u0027:\n     mm/hugetlb.c:83: error: \u0027reserve\u0027 undeclared (first use in this function)\n     mm/hugetlb.c:83: error: (Each undeclared identifier is reported only once\n     mm/hugetlb.c:83: error: for each function it appears in.)\n\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7251ff78b94c2a68d267623d09b32672b20662c1",
      "tree": "bfe107d8837b259b4043d1b38ec0d44e35eb2cd0",
      "parents": [
        "7f09ca51e925ba62e9ebfd4979f093e97e38adeb"
      ],
      "author": {
        "name": "Adam Litke",
        "email": "agl@us.ibm.com",
        "time": "Wed Jul 23 21:27:59 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 24 10:47:19 2008 -0700"
      },
      "message": "hugetlb: quota is not freed for unused reserved private huge pages\n\nWith shared reservations (and now also with private reservations), we reserve\nhuge pages at mmap time.  We also account for the mapping against fs quota to\nprevent a reservation from being preempted by quota exhaustion.\n\nWhen testing with the libhugetlbfs test suite, I found a problem with quota\naccounting.  FS quota for allocated pages is handled correctly but we are not\nreleasing quota for private pages that were reserved but never allocated.  Do\nthis in hugetlb_vm_op_close() at the same time as unused page reservations are\nreleased.\n\nSigned-off-by: Adam Litke \u003cagl@us.ibm.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Johannes Weiner \u003channes@saeurebad.de\u003e\nCc: William Lee Irwin III \u003cwli@holomorphy.com\u003e\nCc: Hugh Dickins \u003chugh@veritas.com\u003e\nAcked-by: Andy Whitcroft \u003capw@shadowen.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7f09ca51e925ba62e9ebfd4979f093e97e38adeb",
      "tree": "58d34768289dce10e32019657c550912fbb37bad",
      "parents": [
        "0d9ea75443dc7e37843e656b8ebc947a6d16d618"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Wed Jul 23 21:27:58 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 24 10:47:19 2008 -0700"
      },
      "message": "hugetlb: fix a hugepage reservation check for MAP_SHARED\n\nWhen removing a huge page from the hugepage pool for a fault the system checks\nto see if the mapping requires additional pages to be reserved, and if it does\nwhether there are any unreserved pages remaining.  If not, the allocation\nfails without even attempting to get a page.  In order to determine whether to\napply this check we call vma_has_private_reserves() which tells us if this vma\nis MAP_PRIVATE and is the owner.  This incorrectly triggers the remaining\nreservation test for MAP_SHARED mappings which prevents allocation of the\nfinal page in the pool even though it is reserved for this mapping.\n\nIn reality we only want to check this for MAP_PRIVATE mappings where the\nprocess is not the original mapper.  Replace vma_has_private_reserves() with\nvma_has_reserves() which indicates whether further reserves are required, and\nupdate the caller.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: Adam Litke \u003cagl@us.ibm.com\u003e\nAcked-by: Andy Whitcroft \u003capw@shadowen.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "53ba51d21d6e048424ab8aadfebdb1f25ae07b60",
      "tree": "0d5c5ee420e85f3a86ff7fe9151e7c3d547e7de1",
      "parents": [
        "e11bfbfcb08ef4223b863799897c19cdf7c5bc00"
      ],
      "author": {
        "name": "Jon Tollefson",
        "email": "kniht@linux.vnet.ibm.com",
        "time": "Wed Jul 23 21:27:52 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 24 10:47:19 2008 -0700"
      },
      "message": "hugetlb: allow arch overridden hugepage allocation\n\nAllow alloc_bootmem_huge_page() to be overridden by architectures that\ncan\u0027t always use bootmem.  This requires huge_boot_pages to be available\nfor use by this function.\n\nThis is required for powerpc 16G pages, which have to be reserved prior to\nboot-time.  The location of these pages are indicated in the device tree.\n\nAcked-by: Adam Litke \u003cagl@us.ibm.com\u003e\nSigned-off-by: Jon Tollefson \u003ckniht@linux.vnet.ibm.com\u003e\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e11bfbfcb08ef4223b863799897c19cdf7c5bc00",
      "tree": "2d66db5a2f92e3ad299e95a09d327f30f306aa24",
      "parents": [
        "b4718e628dbf68a2dee23b5709e2aa3190409c56"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Wed Jul 23 21:27:52 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 24 10:47:19 2008 -0700"
      },
      "message": "hugetlb: override default huge page size\n\nAllow configurations with the default huge page size which is different to\nthe traditional HPAGE_SIZE size.  The default huge page size is the one\nrepresented in the legacy /proc ABIs, SHM, and which is defaulted to when\nmounting hugetlbfs filesystems.\n\nThis is implemented with a new kernel option default_hugepagesz\u003d, which\ndefaults to HPAGE_SIZE if not specified.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ceb868796181dc95ea01a110e123afd391639873",
      "tree": "991be618e5195b05c31974a19adb4b9602315013",
      "parents": [
        "4abd32dbab201c3ced0b0af12accea77cd9eeffc"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@suse.de",
        "time": "Wed Jul 23 21:27:50 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 24 10:47:18 2008 -0700"
      },
      "message": "hugetlb: introduce pud_huge\n\nStraight forward extensions for huge pages located in the PUD instead of\nPMDs.\n\nSigned-off-by: Andi Kleen \u003cak@suse.de\u003e\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nCc: Heiko Carstens \u003cheiko.carstens@de.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": "4abd32dbab201c3ced0b0af12accea77cd9eeffc",
      "tree": "152295359540e704fb1d0a4a0fbf5df889108634",
      "parents": [
        "8faa8b077b2cdc4e4646842fe50b07840955a013"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@suse.de",
        "time": "Wed Jul 23 21:27:49 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 24 10:47:18 2008 -0700"
      },
      "message": "hugetlb: printk cleanup\n\n- Reword sentence to clarify meaning with multiple options\n- Add support for using GB prefixes for the page size\n- Add extra printk to delayed \u003e MAX_ORDER allocation code\n\nAcked-by: Adam Litke \u003cagl@us.ibm.com\u003e\nAcked-by: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nSigned-off-by: Andi Kleen \u003cak@suse.de\u003e\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8faa8b077b2cdc4e4646842fe50b07840955a013",
      "tree": "9c55a56ad5bb36219c8cf030329e67acd1b7e2e0",
      "parents": [
        "aa888a74977a8f2120ae9332376e179c39a6b07d"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@suse.de",
        "time": "Wed Jul 23 21:27:48 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 24 10:47:18 2008 -0700"
      },
      "message": "hugetlb: support boot allocate different sizes\n\nMake some infrastructure changes to allow boot-time allocation of\ndifferent hugepage page sizes.\n\n- move all basic hstate initialisation into hugetlb_add_hstate\n- create a new function hugetlb_hstate_alloc_pages() to do the\n  actual initial page allocations. Call this function early in\n  order to allocate giant pages from bootmem.\n- Check for multiple hugepages\u003d parameters\n\nAcked-by: Adam Litke \u003cagl@us.ibm.com\u003e\nAcked-by: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nAcked-by: Andrew Hastings \u003cabh@cray.com\u003e\nSigned-off-by: Andi Kleen \u003cak@suse.de\u003e\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "aa888a74977a8f2120ae9332376e179c39a6b07d",
      "tree": "1834f8a81e0126ffdd9d9622a9522331dffa2ac8",
      "parents": [
        "01ad1c0827db5b3695c53e296dbb2c1da16a0911"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@suse.de",
        "time": "Wed Jul 23 21:27:47 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 24 10:47:18 2008 -0700"
      },
      "message": "hugetlb: support larger than MAX_ORDER\n\nThis is needed on x86-64 to handle GB pages in hugetlbfs, because it is\nnot practical to enlarge MAX_ORDER to 1GB.\n\nInstead the 1GB pages are only allocated at boot using the bootmem\nallocator using the hugepages\u003d...  option.\n\nThese 1G bootmem pages are never freed.  In theory it would be possible to\nimplement that with some complications, but since it would be a one-way\nstreet (\u003e\u003d MAX_ORDER pages cannot be allocated later) I decided not to\ncurrently.\n\nThe \u003e\u003d MAX_ORDER code is not ifdef\u0027ed per architecture.  It is not very\nbig and the ifdef uglyness seemed not be worth it.\n\nKnown problems: /proc/meminfo and \"free\" do not display the memory\nallocated for gb pages in \"Total\".  This is a little confusing for the\nuser.\n\nAcked-by: Andrew Hastings \u003cabh@cray.com\u003e\nSigned-off-by: Andi Kleen \u003cak@suse.de\u003e\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5ced66c901f1cf0b684feb15c2cd8b126e263d07",
      "tree": "d5faa514fa226a2fcba97aef1673c404369c1ad2",
      "parents": [
        "a3437870160cf2caaac6bdd76c7377a5a4145a8c"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@suse.de",
        "time": "Wed Jul 23 21:27:45 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 24 10:47:17 2008 -0700"
      },
      "message": "hugetlb: abstract numa round robin selection\n\nNeed this as a separate function for a future patch.\n\nNo behaviour change.\n\nAcked-by: Adam Litke \u003cagl@us.ibm.com\u003e\nAcked-by: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nSigned-off-by: Andi Kleen \u003cak@suse.de\u003e\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a3437870160cf2caaac6bdd76c7377a5a4145a8c",
      "tree": "6d3c8ddd442e4cd96f1f8bdcf59fcaef72f4edc9",
      "parents": [
        "a137e1cc6d6e7d315fef03962a2a5a113348b13b"
      ],
      "author": {
        "name": "Nishanth Aravamudan",
        "email": "nacc@us.ibm.com",
        "time": "Wed Jul 23 21:27:44 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 24 10:47:17 2008 -0700"
      },
      "message": "hugetlb: new sysfs interface\n\nProvide new hugepages user APIs that are more suited to multiple hstates\nin sysfs.  There is a new directory, /sys/kernel/hugepages.  Underneath\nthat directory there will be a directory per-supported hugepage size,\ne.g.:\n\n/sys/kernel/hugepages/hugepages-64kB\n/sys/kernel/hugepages/hugepages-16384kB\n/sys/kernel/hugepages/hugepages-16777216kB\n\ncorresponding to 64k, 16m and 16g respectively.  Within each\nhugepages-size directory there are a number of files, corresponding to the\ntracked counters in the hstate, e.g.:\n\n/sys/kernel/hugepages/hugepages-64/nr_hugepages\n/sys/kernel/hugepages/hugepages-64/nr_overcommit_hugepages\n/sys/kernel/hugepages/hugepages-64/free_hugepages\n/sys/kernel/hugepages/hugepages-64/resv_hugepages\n/sys/kernel/hugepages/hugepages-64/surplus_hugepages\n\nOf these files, the first two are read-write and the latter three are\nread-only.  The size of the hugepage being manipulated is trivially\ndeducible from the enclosing directory and is always expressed in kB (to\nmatch meminfo).\n\n[dave@linux.vnet.ibm.com: fix build]\n[nacc@us.ibm.com: hugetlb: hang off of /sys/kernel/mm rather than /sys/kernel]\n[nacc@us.ibm.com: hugetlb: remove CONFIG_SYSFS dependency]\nAcked-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\nSigned-off-by: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nSigned-off-by: Nishanth Aravamudan \u003cnacc@us.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": "a137e1cc6d6e7d315fef03962a2a5a113348b13b",
      "tree": "b47e195c392abaa3640cc2f9187d99d58cee664a",
      "parents": [
        "e5ff215941d59f8ae6bf58f6428dc5c26745a612"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@suse.de",
        "time": "Wed Jul 23 21:27:43 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 24 10:47:17 2008 -0700"
      },
      "message": "hugetlbfs: per mount huge page sizes\n\nAdd the ability to configure the hugetlb hstate used on a per mount basis.\n\n- Add a new pagesize\u003d option to the hugetlbfs mount that allows setting\n  the page size\n- This option causes the mount code to find the hstate corresponding to the\n  specified size, and sets up a pointer to the hstate in the mount\u0027s\n  superblock.\n- Change the hstate accessors to use this information rather than the\n  global_hstate they were using (requires a slight change in mm/memory.c\n  so we don\u0027t NULL deref in the error-unmap path -- see comments).\n\n[np: take hstate out of hugetlbfs inode and vma-\u003evm_private_data]\n\nAcked-by: Adam Litke \u003cagl@us.ibm.com\u003e\nAcked-by: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nSigned-off-by: Andi Kleen \u003cak@suse.de\u003e\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e5ff215941d59f8ae6bf58f6428dc5c26745a612",
      "tree": "d8a3f730124d6608c6c880515625ca2d4e4ed044",
      "parents": [
        "a5516438959d90b071ff0a484ce4f3f523dc3152"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@suse.de",
        "time": "Wed Jul 23 21:27:42 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 24 10:47:17 2008 -0700"
      },
      "message": "hugetlb: multiple hstates for multiple page sizes\n\nAdd basic support for more than one hstate in hugetlbfs.  This is the key\nto supporting multiple hugetlbfs page sizes at once.\n\n- Rather than a single hstate, we now have an array, with an iterator\n- default_hstate continues to be the struct hstate which we use by default\n- Add functions for architectures to register new hstates\n\n[akpm@linux-foundation.org: coding-style fixes]\nAcked-by: Adam Litke \u003cagl@us.ibm.com\u003e\nAcked-by: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nSigned-off-by: Andi Kleen \u003cak@suse.de\u003e\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a5516438959d90b071ff0a484ce4f3f523dc3152",
      "tree": "e356ba9364c76b93c176b4d4a262b7aca3ee8f91",
      "parents": [
        "b7ba30c679ed1eb7ed3ed8f281f6493282042bd4"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@suse.de",
        "time": "Wed Jul 23 21:27:41 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 24 10:47:17 2008 -0700"
      },
      "message": "hugetlb: modular state for hugetlb page size\n\nThe goal of this patchset is to support multiple hugetlb page sizes.  This\nis achieved by introducing a new struct hstate structure, which\nencapsulates the important hugetlb state and constants (eg.  huge page\nsize, number of huge pages currently allocated, etc).\n\nThe hstate structure is then passed around the code which requires these\nfields, they will do the right thing regardless of the exact hstate they\nare operating on.\n\nThis patch adds the hstate structure, with a single global instance of it\n(default_hstate), and does the basic work of converting hugetlb to use the\nhstate.\n\nFuture patches will add more hstate structures to allow for different\nhugetlbfs mounts to have different page sizes.\n\n[akpm@linux-foundation.org: coding-style fixes]\nAcked-by: Adam Litke \u003cagl@us.ibm.com\u003e\nAcked-by: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nSigned-off-by: Andi Kleen \u003cak@suse.de\u003e\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b7ba30c679ed1eb7ed3ed8f281f6493282042bd4",
      "tree": "9857d629f7903fc6e56e518c2443cee8899902d9",
      "parents": [
        "ff7ea79cf7c3a481851bd4b2185fdeb6ce4afa29"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@suse.de",
        "time": "Wed Jul 23 21:27:40 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 24 10:47:17 2008 -0700"
      },
      "message": "hugetlb: factor out prep_new_huge_page\n\nNeeded to avoid code duplication in follow up patches.\n\nAcked-by: Adam Litke \u003cagl@us.ibm.com\u003e\nAcked-by: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nSigned-off-by: Andi Kleen \u003cak@suse.de\u003e\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a858f7b2e9bb4eb665176dde5cf32eeaaf90f153",
      "tree": "54f79db047c42d476502e9023d3cbdb0a4c2c767",
      "parents": [
        "84afd99b8398c9d73af8238aa3cd835858e3097a"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@saeurebad.de",
        "time": "Wed Jul 23 21:27:33 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 24 10:47:16 2008 -0700"
      },
      "message": "vma_page_offset() has no callees: drop it\n\nHugh adds: vma_pagecache_offset() has a dangerously misleading name, since\nit\u0027s using hugepage units: rename it to vma_hugecache_offset().\n\n[apw@shadowen.org: restack onto fixed MAP_PRIVATE reservations]\n[akpm@linux-foundation.org: vma_split conversion]\nSigned-off-by: Johannes Weiner \u003channes@saeurebad.de\u003e\nSigned-off-by: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: Adam Litke \u003cagl@us.ibm.com\u003e\nCc: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nCc: Andi Kleen \u003cak@suse.de\u003e\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Andy Whitcroft \u003capw@shadowen.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "84afd99b8398c9d73af8238aa3cd835858e3097a",
      "tree": "11908ca096ef8e95e578b766d1077e7d12eb2a62",
      "parents": [
        "c37f9fb11c976ffc08200d631dada6dcbfd07ea4"
      ],
      "author": {
        "name": "Andy Whitcroft",
        "email": "apw@shadowen.org",
        "time": "Wed Jul 23 21:27:32 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 24 10:47:16 2008 -0700"
      },
      "message": "hugetlb reservations: fix hugetlb MAP_PRIVATE reservations across vma splits\n\nWhen a hugetlb mapping with a reservation is split, a new VMA is cloned\nfrom the original.  This new VMA is a direct copy of the original\nincluding the reservation count.  When this pair of VMAs are unmapped we\nwill incorrect double account the unused reservation and the overall\nreservation count will be incorrect, in extreme cases it will wrap.\n\nThe problem occurs when we split an existing VMA say to unmap a page in\nthe middle.  split_vma() will create a new VMA copying all fields from the\noriginal.  As we are storing our reservation count in vm_private_data this\nis also copies, endowing the new VMA with a duplicate of the original\nVMA\u0027s reservation.  Neither of the new VMAs can exhaust these reservations\nas they are too small, but when we unmap and close these VMAs we will\nincorrect credit the remainder twice and resv_huge_pages will become out\nof sync.  This can lead to allocation failures on mappings with\nreservations and even to resv_huge_pages wrapping which prevents all\nsubsequent hugepage allocations.\n\nThe simple fix would be to correctly apportion the remaining reservation\ncount when the split is made.  However the only hook we have vm_ops-\u003eopen\nonly has the new VMA we do not know the identity of the preceeding VMA.\nAlso even if we did have that VMA to hand we do not know how much of the\nreservation was consumed each side of the split.\n\nThis patch therefore takes a different tack.  We know that the whole of\nany private mapping (which has a reservation) has a reservation over its\nwhole size.  Any present pages represent consumed reservation.  Therefore\nif we track the instantiated pages we can calculate the remaining\nreservation.\n\nThis patch reuses the existing regions code to track the regions for which\nwe have consumed reservation (ie.  the instantiated pages), as each page\nis faulted in we record the consumption of reservation for the new page.\nWhen we need to return unused reservations at unmap time we simply count\nthe consumed reservation region subtracting that from the whole of the\nmap.  During a VMA split the newly opened VMA will point to the same\nregion map, as this map is offset oriented it remains valid for both of\nthe split VMAs.  This map is referenced counted so that it is removed when\nall VMAs which are part of the mmap are gone.\n\nThanks to Adam Litke and Mel Gorman for their review feedback.\n\nSigned-off-by: Andy Whitcroft \u003capw@shadowen.org\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Adam Litke \u003cagl@us.ibm.com\u003e\nCc: Johannes Weiner \u003channes@saeurebad.de\u003e\nCc: Andy Whitcroft \u003capw@shadowen.org\u003e\nCc: William Lee Irwin III \u003cwli@holomorphy.com\u003e\nCc: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: Michael Kerrisk \u003cmtk.manpages@googlemail.com\u003e\nCc: Jon Tollefson \u003ckniht@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": "c37f9fb11c976ffc08200d631dada6dcbfd07ea4",
      "tree": "2598f0713e4e61ed90335db1745decf2da6086a4",
      "parents": [
        "9682290484370ce68ba23cd2ec2838e301934199"
      ],
      "author": {
        "name": "Andy Whitcroft",
        "email": "apw@shadowen.org",
        "time": "Wed Jul 23 21:27:30 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 24 10:47:16 2008 -0700"
      },
      "message": "hugetlb: allow huge page mappings to be created without reservations\n\nBy default all shared mappings and most private mappings now have\nreservations associated with them.  This improves semantics by providing\nallocation guarentees to the mapper.  However a small number of\napplications may attempt to make very large sparse mappings, with these\nstrict reservations the system will never be able to honour the mapping.\n\nThis patch set brings MAP_NORESERVE support to hugetlb files.  This allows\nnew mappings to be made to hugetlbfs files without an associated\nreservation, for both shared and private mappings.  This allows\napplications which want to create very sparse mappings to opt-out of the\nreservation system.  Obviously as there is no reservation they are liable\nto fault at runtime if the huge page pool becomes exhausted; buyer beware.\n\nSigned-off-by: Andy Whitcroft \u003capw@shadowen.org\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Adam Litke \u003cagl@us.ibm.com\u003e\nCc: Johannes Weiner \u003channes@saeurebad.de\u003e\nCc: Andy Whitcroft \u003capw@shadowen.org\u003e\nCc: William Lee Irwin III \u003cwli@holomorphy.com\u003e\nCc: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: Michael Kerrisk \u003cmtk.manpages@googlemail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9682290484370ce68ba23cd2ec2838e301934199",
      "tree": "435dbd415ed2324d9f8e768425cf26704365cf3c",
      "parents": [
        "cdfd4325c0d878679bd6a3ba8285b71d9980e3c0"
      ],
      "author": {
        "name": "Andy Whitcroft",
        "email": "apw@shadowen.org",
        "time": "Wed Jul 23 21:27:29 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 24 10:47:16 2008 -0700"
      },
      "message": "hugetlb: move reservation region support earlier\n\nThe following patch will require use of the reservation regions support.\nMove this earlier in the file.  No changes have been made to this code.\n\nSigned-off-by: Andy Whitcroft \u003capw@shadowen.org\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: Adam Litke \u003cagl@us.ibm.com\u003e\nCc: Johannes Weiner \u003channes@saeurebad.de\u003e\nCc: Andy Whitcroft \u003capw@shadowen.org\u003e\nCc: William Lee Irwin III \u003cwli@holomorphy.com\u003e\nCc: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: Michael Kerrisk \u003cmtk.manpages@googlemail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e7c4b0bfd025f71cf7624b7c1be174f63caade33",
      "tree": "ee81ef1fafe34ca1a4a914d0db7e5decbc122379",
      "parents": [
        "04f2cbe35699d22dbf428373682ead85ca1240f5"
      ],
      "author": {
        "name": "Andy Whitcroft",
        "email": "apw@shadowen.org",
        "time": "Wed Jul 23 21:27:26 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 24 10:47:16 2008 -0700"
      },
      "message": "huge page private reservation review cleanups\n\nCreate some new accessors for vma private data to cut down on and contain\nthe casts.  Encapsulates the huge and small page offset calculations.\nAlso adds a couple of VM_BUG_ONs for consistency.\n\n[akpm@linux-foundation.org: Make things static]\nSigned-off-by: Andy Whitcroft \u003capw@shadowen.org\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Adam Litke \u003cagl@us.ibm.com\u003e\nCc: Johannes Weiner \u003channes@saeurebad.de\u003e\nCc: Andy Whitcroft \u003capw@shadowen.org\u003e\nCc: William Lee Irwin III \u003cwli@holomorphy.com\u003e\nCc: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: Michael Kerrisk \u003cmtk.manpages@googlemail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "04f2cbe35699d22dbf428373682ead85ca1240f5",
      "tree": "1987a2c704cc97d8adf603054c9d89d18b9b30e0",
      "parents": [
        "a1e78772d72b2616ed20e54896e68e0e7044854e"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Wed Jul 23 21:27:25 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 24 10:47:16 2008 -0700"
      },
      "message": "hugetlb: guarantee that COW faults for a process that called mmap(MAP_PRIVATE) on hugetlbfs will succeed\n\nAfter patch 2 in this series, a process that successfully calls mmap() for\na MAP_PRIVATE mapping will be guaranteed to successfully fault until a\nprocess calls fork().  At that point, the next write fault from the parent\ncould fail due to COW if the child still has a reference.\n\nWe only reserve pages for the parent but a copy must be made to avoid\nleaking data from the parent to the child after fork().  Reserves could be\ntaken for both parent and child at fork time to guarantee faults but if\nthe mapping is large it is highly likely we will not have sufficient pages\nfor the reservation, and it is common to fork only to exec() immediatly\nafter.  A failure here would be very undesirable.\n\nNote that the current behaviour of mainline with MAP_PRIVATE pages is\npretty bad.  The following situation is allowed to occur today.\n\n1. Process calls mmap(MAP_PRIVATE)\n2. Process calls mlock() to fault all pages and makes sure it succeeds\n3. Process forks()\n4. Process writes to MAP_PRIVATE mapping while child still exists\n5. If the COW fails at this point, the process gets SIGKILLed even though it\n   had taken care to ensure the pages existed\n\nThis patch improves the situation by guaranteeing the reliability of the\nprocess that successfully calls mmap().  When the parent performs COW, it\nwill try to satisfy the allocation without using reserves.  If that fails\nthe parent will steal the page leaving any children without a page.\nFaults from the child after that point will result in failure.  If the\nchild COW happens first, an attempt will be made to allocate the page\nwithout reserves and the child will get SIGKILLed on failure.\n\nTo summarise the new behaviour:\n\n1. If the original mapper performs COW on a private mapping with multiple\n   references, it will attempt to allocate a hugepage from the pool or\n   the buddy allocator without using the existing reserves. On fail, VMAs\n   mapping the same area are traversed and the page being COW\u0027d is unmapped\n   where found. It will then steal the original page as the last mapper in\n   the normal way.\n\n2. The VMAs the pages were unmapped from are flagged to note that pages\n   with data no longer exist. Future no-page faults on those VMAs will\n   terminate the process as otherwise it would appear that data was corrupted.\n   A warning is printed to the console that this situation occured.\n\n2. If the child performs COW first, it will attempt to satisfy the COW\n   from the pool if there are enough pages or via the buddy allocator if\n   overcommit is allowed and the buddy allocator can satisfy the request. If\n   it fails, the child will be killed.\n\nIf the pool is large enough, existing applications will not notice that\nthe reserves were a factor.  Existing applications depending on the\nno-reserves been set are unlikely to exist as for much of the history of\nhugetlbfs, pages were prefaulted at mmap(), allocating the pages at that\npoint or failing the mmap().\n\n[npiggin@suse.de: fix CONFIG_HUGETLB\u003dn build]\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: Adam Litke \u003cagl@us.ibm.com\u003e\nCc: Andy Whitcroft \u003capw@shadowen.org\u003e\nCc: William Lee Irwin III \u003cwli@holomorphy.com\u003e\nCc: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a1e78772d72b2616ed20e54896e68e0e7044854e",
      "tree": "d752dd96c2a4fcc555779a7aa99f95069c9b95ae",
      "parents": [
        "fc1b8a73dd71226902a11928dd5500326e101df9"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Wed Jul 23 21:27:23 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 24 10:47:16 2008 -0700"
      },
      "message": "hugetlb: reserve huge pages for reliable MAP_PRIVATE hugetlbfs mappings until fork()\n\nThis patch reserves huge pages at mmap() time for MAP_PRIVATE mappings in\na similar manner to the reservations taken for MAP_SHARED mappings.  The\nreserve count is accounted both globally and on a per-VMA basis for\nprivate mappings.  This guarantees that a process that successfully calls\nmmap() will successfully fault all pages in the future unless fork() is\ncalled.\n\nThe characteristics of private mappings of hugetlbfs files behaviour after\nthis patch are;\n\n1. The process calling mmap() is guaranteed to succeed all future faults until\n   it forks().\n2. On fork(), the parent may die due to SIGKILL on writes to the private\n   mapping if enough pages are not available for the COW. For reasonably\n   reliable behaviour in the face of a small huge page pool, children of\n   hugepage-aware processes should not reference the mappings; such as\n   might occur when fork()ing to exec().\n3. On fork(), the child VMAs inherit no reserves. Reads on pages already\n   faulted by the parent will succeed. Successful writes will depend on enough\n   huge pages being free in the pool.\n4. Quotas of the hugetlbfs mount are checked at reserve time for the mapper\n   and at fault time otherwise.\n\nBefore this patch, all reads or writes in the child potentially needs page\nallocations that can later lead to the death of the parent.  This applies\nto reads and writes of uninstantiated pages as well as COW.  After the\npatch it is only a write to an instantiated page that causes problems.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: Adam Litke \u003cagl@us.ibm.com\u003e\nCc: Andy Whitcroft \u003capw@shadowen.org\u003e\nCc: William Lee Irwin III \u003cwli@holomorphy.com\u003e\nCc: Hugh Dickins \u003chugh@veritas.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "fc1b8a73dd71226902a11928dd5500326e101df9",
      "tree": "524abe44f0da15bef579cbeffad0a78d26571f72",
      "parents": [
        "9109fb7b3520de187ebc3646c209d66a233f7169"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Wed Jul 23 21:27:22 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 24 10:47:16 2008 -0700"
      },
      "message": "hugetlb: move hugetlb_acct_memory()\n\nThis is a patchset to give reliable behaviour to a process that\nsuccessfully calls mmap(MAP_PRIVATE) on a hugetlbfs file.  Currently, it\nis possible for the process to be killed due to a small hugepage pool size\neven if it calls mlock().\n\nMAP_SHARED mappings on hugetlbfs reserve huge pages at mmap() time.  This\nguarantees all future faults against the mapping will succeed.  This\nallows local allocations at first use improving NUMA locality whilst\nretaining reliability.\n\nMAP_PRIVATE mappings do not reserve pages.  This can result in an\napplication being SIGKILLed later if a huge page is not available at fault\ntime.  This makes huge pages usage very ill-advised in some cases as the\nunexpected application failure cannot be detected and handled as it is\nimmediately fatal.  Although an application may force instantiation of the\npages using mlock(), this may lead to poor memory placement and the\nprocess may still be killed when performing COW.\n\nThis patchset introduces a reliability guarantee for the process which\ncreates a private mapping, i.e.  the process that calls mmap() on a\nhugetlbfs file successfully.  The first patch of the set is purely\nmechanical code move to make later diffs easier to read.  The second patch\nwill guarantee faults up until the process calls fork().  After patch two,\nas long as the child keeps the mappings, the parent is no longer\nguaranteed to be reliable.  Patch 3 guarantees that the parent will always\nsuccessfully COW by unmapping the pages from the child in the event there\nare insufficient pages in the hugepage pool in allocate a new page, be it\nvia a static or dynamic pool.\n\nExisting hugepage-aware applications are unlikely to be affected by this\nchange.  For much of hugetlbfs\u0027s history, pages were pre-faulted at mmap()\ntime or mmap() failed which acts in a reserve-like manner.  If the pool is\nsized correctly already so that parent and child can fault reliably, the\napplication will not even notice the reserves.  It\u0027s only when the pool is\ntoo small for the application to function perfectly reliably that the\nreserves come into play.\n\nCredit goes to Andy Whitcroft for cleaning up a number of mistakes during\nreview before the patches were released.\n\nThis patch:\n\nA later patch in this set needs to call hugetlb_acct_memory() before it is\ndefined.  This patch moves the function without modification.  This makes\nlater diffs easier to read.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: Adam Litke \u003cagl@us.ibm.com\u003e\nCc: Andy Whitcroft \u003capw@shadowen.org\u003e\nCc: William Lee Irwin III \u003cwli@holomorphy.com\u003e\nCc: Hugh Dickins \u003chugh@veritas.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "75353bed36cfbbfb55bbde0896bbf5a02d9ba355",
      "tree": "da149cfb59d289845dc1ee4d33612314e03be5a1",
      "parents": [
        "c748e1340e0de3fa7fed86f8bdf499be9242afff"
      ],
      "author": {
        "name": "Adrian Bunk",
        "email": "bunk@kernel.org",
        "time": "Wed Jul 23 21:27:03 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 24 10:47:14 2008 -0700"
      },
      "message": "mm/hugetlb.c: fix duplicate variable\n\nIt\u0027s confusing that set_max_huge_pages() contained two different\nvariables named \"ret\", and although the code works correctly this should\nbe fixed.\n\nThe inner of the two variables can simply be removed.\n\nSpotted by sparse.\n\nSigned-off-by: Adrian Bunk \u003cbunk@kernel.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"
    }
  ],
  "next": "4647875819aa210115d926242aa18e034517cece"
}
