)]}'
{
  "log": [
    {
      "commit": "0ce72d4f7333248efbef1f3309770c7edb1b2625",
      "tree": "a4de6ed7c23962ed62a9f4f64a05c75db51a9833",
      "parents": [
        "4a5b18cc1971046d9ca3a29fdcafbe5648629585"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Tue May 29 15:06:24 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:20 2012 -0700"
      },
      "message": "mm: do_migrate_pages(): rename arguments\n\ns/from_nodes/from and s/to_nodes/to/.  The \"_nodes\" is redundant - it\nduplicates the argument\u0027s type.\n\nDone in a fit of irritation over 80-col issues :(\n\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: KOSAKI Motohiro \u003cmkosaki@redhat.com\u003e\nCc: Larry Woodman \u003clwoodman@redhat.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\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": "4a5b18cc1971046d9ca3a29fdcafbe5648629585",
      "tree": "c10d9476c091e4e4611705b1db40bf300c20f651",
      "parents": [
        "1f1d06c34f7675026326cd9f39ff91e4555cf355"
      ],
      "author": {
        "name": "Larry Woodman",
        "email": "lwoodman@redhat.com",
        "time": "Tue May 29 15:06:24 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:20 2012 -0700"
      },
      "message": "mm: do_migrate_pages() calls migrate_to_node() even if task is already on a correct node\n\nWhile running an application that moves tasks from one cpuset to another\nI noticed that it takes much longer and moves many more pages than\nexpected.\n\nThe reason for this is do_migrate_pages() does its best to preserve the\nrelative node differential from the first node of the cpuset because the\napplication may have been written with that in mind.  If memory was\ninterleaved on the nodes of the source cpuset by an application\ndo_migrate_pages() will try its best to maintain that interleaving on\nthe nodes of the destination cpuset.  This means copying the memory from\nall source nodes to the destination nodes even if the source and\ndestination nodes overlap.\n\nThis is a problem for userspace NUMA placement tools.  The amount of\ntime spent doing extra memory moves cancels out some of the NUMA\nperformance improvements.  Furthermore, if the number of source and\ndestination nodes are to maintain the previous interleaving layout\nanyway.\n\nThis patch changes do_migrate_pages() to only preserve the relative\nlayout inside the program if the number of NUMA nodes in the source and\ndestination mask are the same.  If the number is different, we do a much\nmore efficient migration by not touching memory that is in an allowed\nnode.\n\nThis preserves the old behaviour for programs that want it, while\nallowing a userspace NUMA placement tool to use the new, faster\nmigration.  This improves performance in our tests by up to a factor of\n7.\n\nWithout this change migrating tasks from a cpuset containing nodes 0-7\nto a cpuset containing nodes 3-4, we migrate from ALL the nodes even if\nthey are in the both the source and destination nodesets:\n\n   Migrating 7 to 4\n   Migrating 6 to 3\n   Migrating 5 to 4\n   Migrating 4 to 3\n   Migrating 1 to 4\n   Migrating 3 to 4\n   Migrating 0 to 3\n   Migrating 2 to 3\n\nWith this change we only migrate from nodes that are not in the\ndestination nodesets:\n\n   Migrating 7 to 4\n   Migrating 6 to 3\n   Migrating 5 to 4\n   Migrating 2 to 3\n   Migrating 1 to 4\n   Migrating 0 to 3\n\nYet if we move from a cpuset containing nodes 2,3,4 to a cpuset\ncontaining 3,4,5 we still do move everything so that we preserve the\ndesired NUMA offsets:\n\n   Migrating 4 to 5\n   Migrating 3 to 4\n   Migrating 2 to 3\n\nAs far as performance is concerned this simple patch improves the time\nit takes to move 14, 20 and 26 large tasks from a cpuset containing\nnodes 0-7 to a cpuset containing nodes 1 \u0026 3 by up to a factor of 7.\nHere are the timings with and without the patch:\n\nBEFORE PATCH -- Move times: 59, 140, 651 seconds\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\n  Moving 14 tasks from nodes (0-7) to nodes (1,3)\n  numad(8780) do_migrate_pages (mm\u003d0xffff88081d414400\n  from_nodes\u003d0xffff880818c81d28 to_nodes\u003d0xffff880818c81ce8 flags\u003d0x4)\n  numad(8780) migrate_to_node (mm\u003d0xffff88081d414400 source\u003d0x7 dest\u003d0x3 flags\u003d0x4)\n  numad(8780) migrate_to_node (mm\u003d0xffff88081d414400 source\u003d0x6 dest\u003d0x1 flags\u003d0x4)\n  numad(8780) migrate_to_node (mm\u003d0xffff88081d414400 source\u003d0x5 dest\u003d0x3 flags\u003d0x4)\n  numad(8780) migrate_to_node (mm\u003d0xffff88081d414400 source\u003d0x4 dest\u003d0x1 flags\u003d0x4)\n  numad(8780) migrate_to_node (mm\u003d0xffff88081d414400 source\u003d0x2 dest\u003d0x1 flags\u003d0x4)\n  numad(8780) migrate_to_node (mm\u003d0xffff88081d414400 source\u003d0x1 dest\u003d0x3 flags\u003d0x4)\n  numad(8780) migrate_to_node (mm\u003d0xffff88081d414400 source\u003d0x0 dest\u003d0x1 flags\u003d0x4)\n  (Above moves repeated for each of the 14 tasks...)\n  PID 8890 moved to node(s) 1,3 in 59.2 seconds\n\n  Moving 20 tasks from nodes (0-7) to nodes (1,4-5)\n  numad(8780) do_migrate_pages (mm\u003d0xffff88081d88c700\n  from_nodes\u003d0xffff880818c81d28 to_nodes\u003d0xffff880818c81ce8 flags\u003d0x4)\n  numad(8780) migrate_to_node (mm\u003d0xffff88081d88c700 source\u003d0x7 dest\u003d0x4 flags\u003d0x4)\n  numad(8780) migrate_to_node (mm\u003d0xffff88081d88c700 source\u003d0x6 dest\u003d0x1 flags\u003d0x4)\n  numad(8780) migrate_to_node (mm\u003d0xffff88081d88c700 source\u003d0x3 dest\u003d0x1 flags\u003d0x4)\n  numad(8780) migrate_to_node (mm\u003d0xffff88081d88c700 source\u003d0x2 dest\u003d0x5 flags\u003d0x4)\n  numad(8780) migrate_to_node (mm\u003d0xffff88081d88c700 source\u003d0x1 dest\u003d0x4 flags\u003d0x4)\n  numad(8780) migrate_to_node (mm\u003d0xffff88081d88c700 source\u003d0x0 dest\u003d0x1 flags\u003d0x4)\n  (Above moves repeated for each of the 20 tasks...)\n  PID 8962 moved to node(s) 1,4-5 in 139.88 seconds\n\n  Moving 26 tasks from nodes (0-7) to nodes (1-3,5)\n  numad(8780) do_migrate_pages (mm\u003d0xffff88081d5bc740\n  from_nodes\u003d0xffff880818c81d28 to_nodes\u003d0xffff880818c81ce8 flags\u003d0x4)\n  numad(8780) migrate_to_node (mm\u003d0xffff88081d5bc740 source\u003d0x7 dest\u003d0x5 flags\u003d0x4)\n  numad(8780) migrate_to_node (mm\u003d0xffff88081d5bc740 source\u003d0x6 dest\u003d0x3 flags\u003d0x4)\n  numad(8780) migrate_to_node (mm\u003d0xffff88081d5bc740 source\u003d0x5 dest\u003d0x2 flags\u003d0x4)\n  numad(8780) migrate_to_node (mm\u003d0xffff88081d5bc740 source\u003d0x3 dest\u003d0x5 flags\u003d0x4)\n  numad(8780) migrate_to_node (mm\u003d0xffff88081d5bc740 source\u003d0x2 dest\u003d0x3 flags\u003d0x4)\n  numad(8780) migrate_to_node (mm\u003d0xffff88081d5bc740 source\u003d0x1 dest\u003d0x2 flags\u003d0x4)\n  numad(8780) migrate_to_node (mm\u003d0xffff88081d5bc740 source\u003d0x0 dest\u003d0x1 flags\u003d0x4)\n  numad(8780) migrate_to_node (mm\u003d0xffff88081d5bc740 source\u003d0x4 dest\u003d0x1 flags\u003d0x4)\n  (Above moves repeated for each of the 26 tasks...)\n  PID 9058 moved to node(s) 1-3,5 in 651.45 seconds\n\nAFTER PATCH -- Move times: 42, 56, 93 seconds\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\n  Moving 14 tasks from nodes (0-7) to nodes (5,7)\n  numad(33209) do_migrate_pages (mm\u003d0xffff88101d5ff140\n  from_nodes\u003d0xffff88101e7b5d28 to_nodes\u003d0xffff88101e7b5ce8 flags\u003d0x4)\n  numad(33209) migrate_to_node (mm\u003d0xffff88101d5ff140 source\u003d0x6 dest\u003d0x5 flags\u003d0x4)\n  numad(33209) migrate_to_node (mm\u003d0xffff88101d5ff140 source\u003d0x4 dest\u003d0x5 flags\u003d0x4)\n  numad(33209) migrate_to_node (mm\u003d0xffff88101d5ff140 source\u003d0x3 dest\u003d0x7 flags\u003d0x4)\n  numad(33209) migrate_to_node (mm\u003d0xffff88101d5ff140 source\u003d0x2 dest\u003d0x5 flags\u003d0x4)\n  numad(33209) migrate_to_node (mm\u003d0xffff88101d5ff140 source\u003d0x1 dest\u003d0x7 flags\u003d0x4)\n  numad(33209) migrate_to_node (mm\u003d0xffff88101d5ff140 source\u003d0x0 dest\u003d0x5 flags\u003d0x4)\n  (Above moves repeated for each of the 14 tasks...)\n  PID 33221 moved to node(s) 5,7 in 41.67 seconds\n\n  Moving 20 tasks from nodes (0-7) to nodes (1,3,5)\n  numad(33209) do_migrate_pages (mm\u003d0xffff88101d6c37c0\n  from_nodes\u003d0xffff88101e7b5d28 to_nodes\u003d0xffff88101e7b5ce8 flags\u003d0x4)\n  numad(33209) migrate_to_node (mm\u003d0xffff88101d6c37c0 source\u003d0x7 dest\u003d0x3 flags\u003d0x4)\n  numad(33209) migrate_to_node (mm\u003d0xffff88101d6c37c0 source\u003d0x6 dest\u003d0x1 flags\u003d0x4)\n  numad(33209) migrate_to_node (mm\u003d0xffff88101d6c37c0 source\u003d0x4 dest\u003d0x3 flags\u003d0x4)\n  numad(33209) migrate_to_node (mm\u003d0xffff88101d6c37c0 source\u003d0x2 dest\u003d0x5 flags\u003d0x4)\n  numad(33209) migrate_to_node (mm\u003d0xffff88101d6c37c0 source\u003d0x0 dest\u003d0x1 flags\u003d0x4)\n  (Above moves repeated for each of the 20 tasks...)\n  PID 33289 moved to node(s) 1,3,5 in 56.3 seconds\n\n  Moving 26 tasks from nodes (0-7) to nodes (1,3,5,7)\n  numad(33209) do_migrate_pages (mm\u003d0xffff88101d924400\n  from_nodes\u003d0xffff88101e7b5d28 to_nodes\u003d0xffff88101e7b5ce8 flags\u003d0x4)\n  numad(33209) migrate_to_node (mm\u003d0xffff88101d924400 source\u003d0x6 dest\u003d0x5 flags\u003d0x4)\n  numad(33209) migrate_to_node (mm\u003d0xffff88101d924400 source\u003d0x4 dest\u003d0x1 flags\u003d0x4)\n  numad(33209) migrate_to_node (mm\u003d0xffff88101d924400 source\u003d0x2 dest\u003d0x5 flags\u003d0x4)\n  numad(33209) migrate_to_node (mm\u003d0xffff88101d924400 source\u003d0x0 dest\u003d0x1 flags\u003d0x4)\n  (Above moves repeated for each of the 26 tasks...)\n  PID 33372 moved to node(s) 1,3,5,7 in 92.67 seconds\n\n[akpm@linux-foundation.org: clean up comment layout]\nSigned-off-by: Larry Woodman \u003clwoodman@redhat.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: 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": "89c522c78a6fbc0e24b71e65b65df8b247d5aebd",
      "tree": "e688f99a74b607583e2630d70d4ef3e7666ded32",
      "parents": [
        "71dd0b8ae83120db9ade1380fae7a49cc6b3f465"
      ],
      "author": {
        "name": "Wang Sheng-Hui",
        "email": "shhuiw@gmail.com",
        "time": "Tue May 29 15:06:16 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:18 2012 -0700"
      },
      "message": "mm/mempolicy.c: use enum value MPOL_REBIND_ONCE in mpol_rebind_policy()\n\nWe have enum definition in mempolicy.h: MPOL_REBIND_ONCE.  It should\nreplace the magic number 0 for step comparison in function\nmpol_rebind_policy.\n\nSigned-off-by: Wang Sheng-Hui \u003cshhuiw@gmail.com\u003e\nAcked-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": "05f144a0d5c2207a0349348127f996e104ad7404",
      "tree": "2996c5689ed520557f381cf364739eee2f2b87a4",
      "parents": [
        "644473e9c60c1ff4f6351fed637a6e5551e3dce7"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Wed May 23 12:48:13 2012 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 23 17:57:33 2012 -0700"
      },
      "message": "mm: mempolicy: Let vma_merge and vma_split handle vma-\u003evm_policy linkages\n\nDave Jones\u0027 system call fuzz testing tool \"trinity\" triggered the\nfollowing bug error with slab debugging enabled\n\n    \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n    BUG numa_policy (Not tainted): Poison overwritten\n    -----------------------------------------------------------------------------\n\n    INFO: 0xffff880146498250-0xffff880146498250. First byte 0x6a instead of 0x6b\n    INFO: Allocated in mpol_new+0xa3/0x140 age\u003d46310 cpu\u003d6 pid\u003d32154\n     __slab_alloc+0x3d3/0x445\n     kmem_cache_alloc+0x29d/0x2b0\n     mpol_new+0xa3/0x140\n     sys_mbind+0x142/0x620\n     system_call_fastpath+0x16/0x1b\n    INFO: Freed in __mpol_put+0x27/0x30 age\u003d46268 cpu\u003d6 pid\u003d32154\n     __slab_free+0x2e/0x1de\n     kmem_cache_free+0x25a/0x260\n     __mpol_put+0x27/0x30\n     remove_vma+0x68/0x90\n     exit_mmap+0x118/0x140\n     mmput+0x73/0x110\n     exit_mm+0x108/0x130\n     do_exit+0x162/0xb90\n     do_group_exit+0x4f/0xc0\n     sys_exit_group+0x17/0x20\n     system_call_fastpath+0x16/0x1b\n    INFO: Slab 0xffffea0005192600 objects\u003d27 used\u003d27 fp\u003d0x          (null) flags\u003d0x20000000004080\n    INFO: Object 0xffff880146498250 @offset\u003d592 fp\u003d0xffff88014649b9d0\n\nThis implied a reference counting bug and the problem happened during\nmbind().\n\nmbind() applies a new memory policy to a range and uses mbind_range() to\nmerge existing VMAs or split them as necessary.  In the event of splits,\nmpol_dup() will allocate a new struct mempolicy and maintain existing\nreference counts whose rules are documented in\nDocumentation/vm/numa_memory_policy.txt .\n\nThe problem occurs with shared memory policies.  The vm_op-\u003eset_policy\nincrements the reference count if necessary and split_vma() and\nvma_merge() have already handled the existing reference counts.\nHowever, policy_vma() screws it up by replacing an existing\nvma-\u003evm_policy with one that potentially has the wrong reference count\nleading to a premature free.  This patch removes the damage caused by\npolicy_vma().\n\nWith this patch applied Dave\u0027s trinity tool runs an mbind test for 5\nminutes without error.  /proc/slabinfo reported that there are no\nnuma_policy or shared_policy_node objects allocated after the test\ncompleted and the shared memory region was deleted.\n\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Dave Jones \u003cdavej@redhat.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Stephen Wilson \u003cwilsons@start.ca\u003e\nCc: Christoph Lameter \u003ccl@linux.com\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCc: \u003cstable@vger.kernel.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "644473e9c60c1ff4f6351fed637a6e5551e3dce7",
      "tree": "10316518bedc735a2c6552886658d69dfd9f1eb0",
      "parents": [
        "fb827ec68446c83e9e8754fa9b55aed27ecc4661",
        "4b06a81f1daee668fbd6de85557bfb36dd36078f"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 23 17:42:39 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 23 17:42:39 2012 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace\n\nPull user namespace enhancements from Eric Biederman:\n \"This is a course correction for the user namespace, so that we can\n  reach an inexpensive, maintainable, and reasonably complete\n  implementation.\n\n  Highlights:\n   - Config guards make it impossible to enable the user namespace and\n     code that has not been converted to be user namespace safe.\n\n   - Use of the new kuid_t type ensures the if you somehow get past the\n     config guards the kernel will encounter type errors if you enable\n     user namespaces and attempt to compile in code whose permission\n     checks have not been updated to be user namespace safe.\n\n   - All uids from child user namespaces are mapped into the initial\n     user namespace before they are processed.  Removing the need to add\n     an additional check to see if the user namespace of the compared\n     uids remains the same.\n\n   - With the user namespaces compiled out the performance is as good or\n     better than it is today.\n\n   - For most operations absolutely nothing changes performance or\n     operationally with the user namespace enabled.\n\n   - The worst case performance I could come up with was timing 1\n     billion cache cold stat operations with the user namespace code\n     enabled.  This went from 156s to 164s on my laptop (or 156ns to\n     164ns per stat operation).\n\n   - (uid_t)-1 and (gid_t)-1 are reserved as an internal error value.\n     Most uid/gid setting system calls treat these value specially\n     anyway so attempting to use -1 as a uid would likely cause\n     entertaining failures in userspace.\n\n   - If setuid is called with a uid that can not be mapped setuid fails.\n     I have looked at sendmail, login, ssh and every other program I\n     could think of that would call setuid and they all check for and\n     handle the case where setuid fails.\n\n   - If stat or a similar system call is called from a context in which\n     we can not map a uid we lie and return overflowuid.  The LFS\n     experience suggests not lying and returning an error code might be\n     better, but the historical precedent with uids is different and I\n     can not think of anything that would break by lying about a uid we\n     can\u0027t map.\n\n   - Capabilities are localized to the current user namespace making it\n     safe to give the initial user in a user namespace all capabilities.\n\n  My git tree covers all of the modifications needed to convert the core\n  kernel and enough changes to make a system bootable to runlevel 1.\"\n\nFix up trivial conflicts due to nearby independent changes in fs/stat.c\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace: (46 commits)\n  userns:  Silence silly gcc warning.\n  cred: use correct cred accessor with regards to rcu read lock\n  userns: Convert the move_pages, and migrate_pages permission checks to use uid_eq\n  userns: Convert cgroup permission checks to use uid_eq\n  userns: Convert tmpfs to use kuid and kgid where appropriate\n  userns: Convert sysfs to use kgid/kuid where appropriate\n  userns: Convert sysctl permission checks to use kuid and kgids.\n  userns: Convert proc to use kuid/kgid where appropriate\n  userns: Convert ext4 to user kuid/kgid where appropriate\n  userns: Convert ext3 to use kuid/kgid where appropriate\n  userns: Convert ext2 to use kuid/kgid where appropriate.\n  userns: Convert devpts to use kuid/kgid where appropriate\n  userns: Convert binary formats to use kuid/kgid where appropriate\n  userns: Add negative depends on entries to avoid building code that is userns unsafe\n  userns: signal remove unnecessary map_cred_ns\n  userns: Teach inode_capable to understand inodes whose uids map to other namespaces.\n  userns: Fail exec for suid and sgid binaries with ids outside our user namespace.\n  userns: Convert stat to return values mapped from kuids and kgids\n  userns: Convert user specfied uids and gids in chown into kuids and kgid\n  userns: Use uid_eq gid_eq helpers when comparing kuids and kgids in the vfs\n  ...\n"
    },
    {
      "commit": "b38a86eb196d9402299919456fe3f28e490c76fa",
      "tree": "7e5527ceb26989c48342ab1660de117ccd159279",
      "parents": [
        "14a590c3f987977d7b09ec926481ee0238c08eee"
      ],
      "author": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Mon Mar 12 15:48:24 2012 -0700"
      },
      "committer": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Tue May 15 14:59:30 2012 -0700"
      },
      "message": "userns: Convert the move_pages, and migrate_pages permission checks to use uid_eq\n\nAcked-by: Serge Hallyn \u003cserge.hallyn@canonical.com\u003e\nSigned-off-by: Eric W. Biederman \u003cebiederm@xmission.com\u003e\n"
    },
    {
      "commit": "f2a9ef880763d7fbd657a3af646e132a90d70d34",
      "tree": "09df0c2a4b0572f44424f1e11aee655135082c94",
      "parents": [
        "63f61a6f4633ff34c17bea7a0ed827eaeb0733e1"
      ],
      "author": {
        "name": "Sasha Levin",
        "email": "levinsasha928@gmail.com",
        "time": "Wed Apr 25 16:01:52 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 25 21:26:34 2012 -0700"
      },
      "message": "mm: fix NULL ptr dereference in migrate_pages\n\nCommit 3268c63 (\"mm: fix move/migrate_pages() race on task struct\") has\nadded an odd construct where \u0027mm\u0027 is checked for being NULL, and if it is,\nit would get dereferenced anyways by mput()ing it.\n\nThis would lead to the following NULL ptr deref and BUG() when calling\nmigrate_pages() with a pid that has no mm struct:\n\n[25904.193704] BUG: unable to handle kernel NULL pointer dereference at 0000000000000050\n[25904.194235] IP: [\u003cffffffff810b0de7\u003e] mmput+0x27/0xf0\n[25904.194235] PGD 773e6067 PUD 77da0067 PMD 0\n[25904.194235] Oops: 0002 [#1] PREEMPT SMP\n[25904.194235] CPU 2\n[25904.194235] Pid: 31608, comm: trinity Tainted: G        W    3.4.0-rc2-next-20120412-sasha #69\n[25904.194235] RIP: 0010:[\u003cffffffff810b0de7\u003e]  [\u003cffffffff810b0de7\u003e] mmput+0x27/0xf0\n[25904.194235] RSP: 0018:ffff880077d49e08  EFLAGS: 00010202\n[25904.194235] RAX: 0000000000000286 RBX: 0000000000000000 RCX: 0000000000000000\n[25904.194235] RDX: ffff880075ef8000 RSI: 000000000000023d RDI: 0000000000000286\n[25904.194235] RBP: ffff880077d49e18 R08: 0000000000000001 R09: 0000000000000001\n[25904.194235] R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000000\n[25904.194235] R13: 00000000ffffffea R14: ffff880034287740 R15: ffff8800218d3010\n[25904.194235] FS:  00007fc8b244c700(0000) GS:ffff880029800000(0000) knlGS:0000000000000000\n[25904.194235] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033\n[25904.194235] CR2: 0000000000000050 CR3: 00000000767c6000 CR4: 00000000000406e0\n[25904.194235] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000\n[25904.194235] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400\n[25904.194235] Process trinity (pid: 31608, threadinfo ffff880077d48000, task ffff880075ef8000)\n[25904.194235] Stack:\n[25904.194235]  ffff8800342876c0 0000000000000000 ffff880077d49f78 ffffffff811b8020\n[25904.194235]  ffffffff811b7d91 ffff880075ef8000 ffff88002256d200 0000000000000000\n[25904.194235]  00000000000003ff 0000000000000000 0000000000000000 0000000000000000\n[25904.194235] Call Trace:\n[25904.194235]  [\u003cffffffff811b8020\u003e] sys_migrate_pages+0x340/0x3a0\n[25904.194235]  [\u003cffffffff811b7d91\u003e] ? sys_migrate_pages+0xb1/0x3a0\n[25904.194235]  [\u003cffffffff8266cbb9\u003e] system_call_fastpath+0x16/0x1b\n[25904.194235] Code: c9 c3 66 90 55 31 d2 48 89 e5 be 3d 02 00 00 48 83 ec 10 48 89 1c 24 4c 89 64 24 08 48 89 fb 48 c7 c7 cf 0e e1 82 e8 69 18 03 00 \u003cf0\u003e ff 4b 50 0f 94 c0 84 c0 0f 84 aa 00 00 00 48 89 df e8 72 f1\n[25904.194235] RIP  [\u003cffffffff810b0de7\u003e] mmput+0x27/0xf0\n[25904.194235]  RSP \u003cffff880077d49e08\u003e\n[25904.194235] CR2: 0000000000000050\n[25904.348999] ---[ end trace a307b3ed40206b4b ]---\n\nSigned-off-by: Sasha Levin \u003clevinsasha928@gmail.com\u003e\nCc: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Christoph Lameter \u003ccl@linux.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "cc9a6c8776615f9c194ccf0b63a0aa5628235545",
      "tree": "0cbbf118e86541f8eb2fc7b717a0e08eaced986d",
      "parents": [
        "e845e199362cc5712ba0e7eedc14eed70e144258"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Wed Mar 21 16:34:11 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:59 2012 -0700"
      },
      "message": "cpuset: mm: reduce large amounts of memory barrier related damage v3\n\nCommit c0ff7453bb5c (\"cpuset,mm: fix no node to alloc memory when\nchanging cpuset\u0027s mems\") wins a super prize for the largest number of\nmemory barriers entered into fast paths for one commit.\n\n[get|put]_mems_allowed is incredibly heavy with pairs of full memory\nbarriers inserted into a number of hot paths.  This was detected while\ninvestigating at large page allocator slowdown introduced some time\nafter 2.6.32.  The largest portion of this overhead was shown by\noprofile to be at an mfence introduced by this commit into the page\nallocator hot path.\n\nFor extra style points, the commit introduced the use of yield() in an\nimplementation of what looks like a spinning mutex.\n\nThis patch replaces the full memory barriers on both read and write\nsides with a sequence counter with just read barriers on the fast path\nside.  This is much cheaper on some architectures, including x86.  The\nmain bulk of the patch is the retry logic if the nodemask changes in a\nmanner that can cause a false failure.\n\nWhile updating the nodemask, a check is made to see if a false failure\nis a risk.  If it is, the sequence number gets bumped and parallel\nallocators will briefly stall while the nodemask update takes place.\n\nIn a page fault test microbenchmark, oprofile samples from\n__alloc_pages_nodemask went from 4.53% of all samples to 1.15%.  The\nactual results were\n\n                             3.3.0-rc3          3.3.0-rc3\n                             rc3-vanilla        nobarrier-v2r1\n    Clients   1 UserTime       0.07 (  0.00%)   0.08 (-14.19%)\n    Clients   2 UserTime       0.07 (  0.00%)   0.07 (  2.72%)\n    Clients   4 UserTime       0.08 (  0.00%)   0.07 (  3.29%)\n    Clients   1 SysTime        0.70 (  0.00%)   0.65 (  6.65%)\n    Clients   2 SysTime        0.85 (  0.00%)   0.82 (  3.65%)\n    Clients   4 SysTime        1.41 (  0.00%)   1.41 (  0.32%)\n    Clients   1 WallTime       0.77 (  0.00%)   0.74 (  4.19%)\n    Clients   2 WallTime       0.47 (  0.00%)   0.45 (  3.73%)\n    Clients   4 WallTime       0.38 (  0.00%)   0.37 (  1.58%)\n    Clients   1 Flt/sec/cpu  497620.28 (  0.00%) 520294.53 (  4.56%)\n    Clients   2 Flt/sec/cpu  414639.05 (  0.00%) 429882.01 (  3.68%)\n    Clients   4 Flt/sec/cpu  257959.16 (  0.00%) 258761.48 (  0.31%)\n    Clients   1 Flt/sec      495161.39 (  0.00%) 517292.87 (  4.47%)\n    Clients   2 Flt/sec      820325.95 (  0.00%) 850289.77 (  3.65%)\n    Clients   4 Flt/sec      1020068.93 (  0.00%) 1022674.06 (  0.26%)\n    MMTests Statistics: duration\n    Sys Time Running Test (seconds)             135.68    132.17\n    User+Sys Time Running Test (seconds)         164.2    160.13\n    Total Elapsed Time (seconds)                123.46    120.87\n\nThe overall improvement is small but the System CPU time is much\nimproved and roughly in correlation to what oprofile reported (these\nperformance figures are without profiling so skew is expected).  The\nactual number of page faults is noticeably improved.\n\nFor benchmarks like kernel builds, the overall benefit is marginal but\nthe system CPU time is slightly reduced.\n\nTo test the actual bug the commit fixed I opened two terminals.  The\nfirst ran within a cpuset and continually ran a small program that\nfaulted 100M of anonymous data.  In a second window, the nodemask of the\ncpuset was continually randomised in a loop.\n\nWithout the commit, the program would fail every so often (usually\nwithin 10 seconds) and obviously with the commit everything worked fine.\nWith this patch applied, it also worked fine so the fix should be\nfunctionally equivalent.\n\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Miao Xie \u003cmiaox@cn.fujitsu.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Christoph Lameter \u003ccl@linux.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3268c63eded4612a3d07b56d1e02ce7731e6608e",
      "tree": "c8a07eb4cdf2697d610bb86d23eb46b0a5f892c2",
      "parents": [
        "385de35722c9a22917e7bc5e63cd83a8cffa5ecd"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "cl@linux.com",
        "time": "Wed Mar 21 16:34:06 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:58 2012 -0700"
      },
      "message": "mm: fix move/migrate_pages() race on task struct\n\nMigration functions perform the rcu_read_unlock too early.  As a result\nthe task pointed to may change from under us.  This can result in an oops,\nas reported by Dave Hansen in https://lkml.org/lkml/2012/2/23/302.\n\nThe following patch extend the period of the rcu_read_lock until after the\npermissions checks are done.  We also take a refcount so that the task\nreference is stable when calling security check functions and performing\ncpuset node validation (which takes a mutex).\n\nThe refcount is dropped before actual page migration occurs so there is no\nchange to the refcounts held during page migration.\n\nAlso move the determination of the mm of the task struct to immediately\nbefore the do_migrate*() calls so that it is clear that we switch from\nhandling the task during permission checks to the mm for the actual\nmigration.  Since the determination is only done once and we then no\nlonger use the task_struct we can be sure that we operate on a specific\naddress space that will not change from under us.\n\n[akpm@linux-foundation.org: checkpatch fixes]\nSigned-off-by: Christoph Lameter \u003ccl@linux.com\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nReported-by: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Hugh Dickins \u003chughd@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": "1a5a9906d4e8d1976b701f889d8f35d54b928f25",
      "tree": "e51912e725f224663a738045a4d0528d08da4572",
      "parents": [
        "31f6765266417c0d99f0e922fe82848a7c9c2ae9"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Wed Mar 21 16:33:42 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:54 2012 -0700"
      },
      "message": "mm: thp: fix pmd_bad() triggering in code paths holding mmap_sem read mode\n\nIn some cases it may happen that pmd_none_or_clear_bad() is called with\nthe mmap_sem hold in read mode.  In those cases the huge page faults can\nallocate hugepmds under pmd_none_or_clear_bad() and that can trigger a\nfalse positive from pmd_bad() that will not like to see a pmd\nmaterializing as trans huge.\n\nIt\u0027s not khugepaged causing the problem, khugepaged holds the mmap_sem\nin write mode (and all those sites must hold the mmap_sem in read mode\nto prevent pagetables to go away from under them, during code review it\nseems vm86 mode on 32bit kernels requires that too unless it\u0027s\nrestricted to 1 thread per process or UP builds).  The race is only with\nthe huge pagefaults that can convert a pmd_none() into a\npmd_trans_huge().\n\nEffectively all these pmd_none_or_clear_bad() sites running with\nmmap_sem in read mode are somewhat speculative with the page faults, and\nthe result is always undefined when they run simultaneously.  This is\nprobably why it wasn\u0027t common to run into this.  For example if the\nmadvise(MADV_DONTNEED) runs zap_page_range() shortly before the page\nfault, the hugepage will not be zapped, if the page fault runs first it\nwill be zapped.\n\nAltering pmd_bad() not to error out if it finds hugepmds won\u0027t be enough\nto fix this, because zap_pmd_range would then proceed to call\nzap_pte_range (which would be incorrect if the pmd become a\npmd_trans_huge()).\n\nThe simplest way to fix this is to read the pmd in the local stack\n(regardless of what we read, no need of actual CPU barriers, only\ncompiler barrier needed), and be sure it is not changing under the code\nthat computes its value.  Even if the real pmd is changing under the\nvalue we hold on the stack, we don\u0027t care.  If we actually end up in\nzap_pte_range it means the pmd was not none already and it was not huge,\nand it can\u0027t become huge from under us (khugepaged locking explained\nabove).\n\nAll we need is to enforce that there is no way anymore that in a code\npath like below, pmd_trans_huge can be false, but pmd_none_or_clear_bad\ncan run into a hugepmd.  The overhead of a barrier() is just a compiler\ntweak and should not be measurable (I only added it for THP builds).  I\ndon\u0027t exclude different compiler versions may have prevented the race\ntoo by caching the value of *pmd on the stack (that hasn\u0027t been\nverified, but it wouldn\u0027t be impossible considering\npmd_none_or_clear_bad, pmd_bad, pmd_trans_huge, pmd_none are all inlines\nand there\u0027s no external function called in between pmd_trans_huge and\npmd_none_or_clear_bad).\n\n\t\tif (pmd_trans_huge(*pmd)) {\n\t\t\tif (next-addr !\u003d HPAGE_PMD_SIZE) {\n\t\t\t\tVM_BUG_ON(!rwsem_is_locked(\u0026tlb-\u003emm-\u003emmap_sem));\n\t\t\t\tsplit_huge_page_pmd(vma-\u003evm_mm, pmd);\n\t\t\t} else if (zap_huge_pmd(tlb, vma, pmd, addr))\n\t\t\t\tcontinue;\n\t\t\t/* fall through */\n\t\t}\n\t\tif (pmd_none_or_clear_bad(pmd))\n\nBecause this race condition could be exercised without special\nprivileges this was reported in CVE-2012-1179.\n\nThe race was identified and fully explained by Ulrich who debugged it.\nI\u0027m quoting his accurate explanation below, for reference.\n\n\u003d\u003d\u003d\u003d\u003d\u003d start quote \u003d\u003d\u003d\u003d\u003d\u003d\u003d\n      mapcount 0 page_mapcount 1\n      kernel BUG at mm/huge_memory.c:1384!\n\n    At some point prior to the panic, a \"bad pmd ...\" message similar to the\n    following is logged on the console:\n\n      mm/memory.c:145: bad pmd ffff8800376e1f98(80000000314000e7).\n\n    The \"bad pmd ...\" message is logged by pmd_clear_bad() before it clears\n    the page\u0027s PMD table entry.\n\n        143 void pmd_clear_bad(pmd_t *pmd)\n        144 {\n    -\u003e  145         pmd_ERROR(*pmd);\n        146         pmd_clear(pmd);\n        147 }\n\n    After the PMD table entry has been cleared, there is an inconsistency\n    between the actual number of PMD table entries that are mapping the page\n    and the page\u0027s map count (_mapcount field in struct page). When the page\n    is subsequently reclaimed, __split_huge_page() detects this inconsistency.\n\n       1381         if (mapcount !\u003d page_mapcount(page))\n       1382                 printk(KERN_ERR \"mapcount %d page_mapcount %d\\n\",\n       1383                        mapcount, page_mapcount(page));\n    -\u003e 1384         BUG_ON(mapcount !\u003d page_mapcount(page));\n\n    The root cause of the problem is a race of two threads in a multithreaded\n    process. Thread B incurs a page fault on a virtual address that has never\n    been accessed (PMD entry is zero) while Thread A is executing an madvise()\n    system call on a virtual address within the same 2 MB (huge page) range.\n\n               virtual address space\n              .---------------------.\n              |                     |\n              |                     |\n            .-|---------------------|\n            | |                     |\n            | |                     |\u003c-- B(fault)\n            | |                     |\n      2 MB  | |/////////////////////|-.\n      huge \u003c  |/////////////////////|  \u003e A(range)\n      page  | |/////////////////////|-\u0027\n            | |                     |\n            | |                     |\n            \u0027-|---------------------|\n              |                     |\n              |                     |\n              \u0027---------------------\u0027\n\n    - Thread A is executing an madvise(..., MADV_DONTNEED) system call\n      on the virtual address range \"A(range)\" shown in the picture.\n\n    sys_madvise\n      // Acquire the semaphore in shared mode.\n      down_read(\u0026current-\u003emm-\u003emmap_sem)\n      ...\n      madvise_vma\n        switch (behavior)\n        case MADV_DONTNEED:\n             madvise_dontneed\n               zap_page_range\n                 unmap_vmas\n                   unmap_page_range\n                     zap_pud_range\n                       zap_pmd_range\n                         //\n                         // Assume that this huge page has never been accessed.\n                         // I.e. content of the PMD entry is zero (not mapped).\n                         //\n                         if (pmd_trans_huge(*pmd)) {\n                             // We don\u0027t get here due to the above assumption.\n                         }\n                         //\n                         // Assume that Thread B incurred a page fault and\n             .---------\u003e // sneaks in here as shown below.\n             |           //\n             |           if (pmd_none_or_clear_bad(pmd))\n             |               {\n             |                 if (unlikely(pmd_bad(*pmd)))\n             |                     pmd_clear_bad\n             |                     {\n             |                       pmd_ERROR\n             |                         // Log \"bad pmd ...\" message here.\n             |                       pmd_clear\n             |                         // Clear the page\u0027s PMD entry.\n             |                         // Thread B incremented the map count\n             |                         // in page_add_new_anon_rmap(), but\n             |                         // now the page is no longer mapped\n             |                         // by a PMD entry (-\u003e inconsistency).\n             |                     }\n             |               }\n             |\n             v\n    - Thread B is handling a page fault on virtual address \"B(fault)\" shown\n      in the picture.\n\n    ...\n    do_page_fault\n      __do_page_fault\n        // Acquire the semaphore in shared mode.\n        down_read_trylock(\u0026mm-\u003emmap_sem)\n        ...\n        handle_mm_fault\n          if (pmd_none(*pmd) \u0026\u0026 transparent_hugepage_enabled(vma))\n              // We get here due to the above assumption (PMD entry is zero).\n              do_huge_pmd_anonymous_page\n                alloc_hugepage_vma\n                  // Allocate a new transparent huge page here.\n                ...\n                __do_huge_pmd_anonymous_page\n                  ...\n                  spin_lock(\u0026mm-\u003epage_table_lock)\n                  ...\n                  page_add_new_anon_rmap\n                    // Here we increment the page\u0027s map count (starts at -1).\n                    atomic_set(\u0026page-\u003e_mapcount, 0)\n                  set_pmd_at\n                    // Here we set the page\u0027s PMD entry which will be cleared\n                    // when Thread A calls pmd_clear_bad().\n                  ...\n                  spin_unlock(\u0026mm-\u003epage_table_lock)\n\n    The mmap_sem does not prevent the race because both threads are acquiring\n    it in shared mode (down_read).  Thread B holds the page_table_lock while\n    the page\u0027s map count and PMD table entry are updated.  However, Thread A\n    does not synchronize on that lock.\n\n\u003d\u003d\u003d\u003d\u003d\u003d end quote \u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\n[akpm@linux-foundation.org: checkpatch fixes]\nReported-by: Ulrich Obergfell \u003cuobergfe@redhat.com\u003e\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Dave Jones \u003cdavej@redhat.com\u003e\nAcked-by: Larry Woodman \u003clwoodman@redhat.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: \u003cstable@vger.kernel.org\u003e\t\t[2.6.38+]\nCc: Mark Salter \u003cmsalter@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": "097d59106a8e4b42d07c9892fdd7790f1659c6ff",
      "tree": "babf61a0287b0f09f80580847274877831ed6869",
      "parents": [
        "71fece9511717750d86691e0f517ad04f3c8a801"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 06 18:23:36 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 06 18:23:36 2012 -0800"
      },
      "message": "vm: avoid using find_vma_prev() unnecessarily\n\nSeveral users of \"find_vma_prev()\" were not in fact interested in the\nprevious vma if there was no primary vma to be found either.  And in\nthose cases, we\u0027re much better off just using the regular \"find_vma()\",\nand then \"prev\" can be looked up by just checking vma-\u003evm_prev.\n\nThe find_vma_prev() semantics are fairly subtle (see Mikulas\u0027 recent\ncommit 83cd904d271b: \"mm: fix find_vma_prev\"), and the whole \"return\nprev by reference\" means that it generates worse code too.\n\nThus this \"let\u0027s avoid using this inconvenient and clearly too subtle\ninterface when we don\u0027t really have to\" patch.\n\nCc: Mikulas Patocka \u003cmpatocka@redhat.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a6bc32b899223a877f595ef9ddc1e89ead5072b8",
      "tree": "a9529f7af2cf8e77bb6670acea32169c891a2b76",
      "parents": [
        "66199712e9eef5aede09dbcd9dfff87798a66917"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Thu Jan 12 17:19:43 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 12 20:13:09 2012 -0800"
      },
      "message": "mm: compaction: introduce sync-light migration for use by compaction\n\nThis patch adds a lightweight sync migrate operation MIGRATE_SYNC_LIGHT\nmode that avoids writing back pages to backing storage.  Async compaction\nmaps to MIGRATE_ASYNC while sync compaction maps to MIGRATE_SYNC_LIGHT.\nFor other migrate_pages users such as memory hotplug, MIGRATE_SYNC is\nused.\n\nThis avoids sync compaction stalling for an excessive length of time,\nparticularly when copying files to a USB stick where there might be a\nlarge number of dirty pages backed by a filesystem that does not support\n-\u003ewritepages.\n\n[aarcange@redhat.com: This patch is heavily based on Andrea\u0027s work]\n[akpm@linux-foundation.org: fix fs/nfs/write.c build]\n[akpm@linux-foundation.org: fix fs/btrfs/disk-io.c build]\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\nReviewed-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Dave Jones \u003cdavej@redhat.com\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nCc: Andy Isaacson \u003cadi@hexapodia.org\u003e\nCc: Nai Xia \u003cnai.xia@gmail.com\u003e\nCc: Johannes Weiner \u003cjweiner@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": "fcfb4dcc9698f932836aa63ba0d82e7dbd300fb3",
      "tree": "3a01fc96cc2ba9c339e2848c20a241a9ec9d2423",
      "parents": [
        "0c176d52b0b2619f231b2bbf329b90c028134f58"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Tue Jan 10 15:08:21 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 10 16:30:45 2012 -0800"
      },
      "message": "mm/mempolicy.c: mpol_equal(): use bool\n\nmpol_equal() logically returns a boolean.  Use a bool type to slightly\nimprove readability.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Stephen Wilson \u003cwilsons@start.ca\u003e\nAcked-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": "e26a51148f3ebd859bca8bf2e0f212839b447f62",
      "tree": "aa3a328dabee8a9f1dccc8c8178f690d0eacbf1e",
      "parents": [
        "757e55c23dc62eb5adf45368a72f6b26d6a71ae5"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Wed Dec 28 15:57:11 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Dec 29 16:31:57 2011 -0800"
      },
      "message": "mm/mempolicy.c: refix mbind_range() vma issue\n\ncommit 8aacc9f550 (\"mm/mempolicy.c: fix pgoff in mbind vma merge\") is the\nslightly incorrect fix.\n\nWhy? Think following case.\n\n1. map 4 pages of a file at offset 0\n\n   [0123]\n\n2. map 2 pages just after the first mapping of the same file but with\n   page offset 2\n\n   [0123][23]\n\n3. mbind() 2 pages from the first mapping at offset 2.\n   mbind_range() should treat new vma is,\n\n   [0123][23]\n     |23|\n     mbind vma\n\n   but it does\n\n   [0123][23]\n     |01|\n     mbind vma\n\n   Oops. then, it makes wrong vma merge and splitting ([01][0123] or similar).\n\nThis patch fixes it.\n\n[testcase]\n  test result - before the patch\n\n\tcase4: 126: test failed. expect \u00272,4\u0027, actual \u00272,2,2\u0027\n       \tcase5: passed\n\tcase6: passed\n\tcase7: passed\n\tcase8: passed\n\tcase_n: 246: test failed. expect \u00274,2\u0027, actual \u00271,4\u0027\n\n\t------------[ cut here ]------------\n\tkernel BUG at mm/filemap.c:135!\n\tinvalid opcode: 0000 [#4] SMP DEBUG_PAGEALLOC\n\n\t(snip long bug on messages)\n\n  test result - after the patch\n\n\tcase4: passed\n       \tcase5: passed\n\tcase6: passed\n\tcase7: passed\n\tcase8: passed\n\tcase_n: passed\n\n  source:  mbind_vma_test.c\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n #include \u003cnumaif.h\u003e\n #include \u003cnuma.h\u003e\n #include \u003csys/mman.h\u003e\n #include \u003cstdio.h\u003e\n #include \u003cunistd.h\u003e\n #include \u003cstdlib.h\u003e\n #include \u003cstring.h\u003e\n\nstatic unsigned long pagesize;\nvoid* mmap_addr;\nstruct bitmask *nmask;\nchar buf[1024];\nFILE *file;\nchar retbuf[10240] \u003d \"\";\nint mapped_fd;\n\nchar *rubysrc \u003d \"ruby -e \u0027\\\n  pid \u003d %d; \\\n  vstart \u003d 0x%llx; \\\n  vend \u003d 0x%llx; \\\n  s \u003d `pmap -q #{pid}`; \\\n  rary \u003d []; \\\n  s.each_line {|line|; \\\n    ary\u003dline.split(\\\" \\\"); \\\n    addr \u003d ary[0].to_i(16); \\\n    if(vstart \u003c\u003d addr \u0026\u0026 addr \u003c vend) then \\\n      rary.push(ary[1].to_i()/4); \\\n    end; \\\n  }; \\\n  print rary.join(\\\",\\\"); \\\n\u0027\";\n\nvoid init(void)\n{\n\tvoid* addr;\n\tchar buf[128];\n\n\tnmask \u003d numa_allocate_nodemask();\n\tnuma_bitmask_setbit(nmask, 0);\n\n\tpagesize \u003d getpagesize();\n\n\tsprintf(buf, \"%s\", \"mbind_vma_XXXXXX\");\n\tmapped_fd \u003d mkstemp(buf);\n\tif (mapped_fd \u003d\u003d -1)\n\t\tperror(\"mkstemp \"), exit(1);\n\tunlink(buf);\n\n\tif (lseek(mapped_fd, pagesize*8, SEEK_SET) \u003c 0)\n\t\tperror(\"lseek \"), exit(1);\n\tif (write(mapped_fd, \"\\0\", 1) \u003c 0)\n\t\tperror(\"write \"), exit(1);\n\n\taddr \u003d mmap(NULL, pagesize*8, PROT_NONE,\n\t\t    MAP_SHARED, mapped_fd, 0);\n\tif (addr \u003d\u003d MAP_FAILED)\n\t\tperror(\"mmap \"), exit(1);\n\n\tif (mprotect(addr+pagesize, pagesize*6, PROT_READ|PROT_WRITE) \u003c 0)\n\t\tperror(\"mprotect \"), exit(1);\n\n\tmmap_addr \u003d addr + pagesize;\n\n\t/* make page populate */\n\tmemset(mmap_addr, 0, pagesize*6);\n}\n\nvoid fin(void)\n{\n\tvoid* addr \u003d mmap_addr - pagesize;\n\tmunmap(addr, pagesize*8);\n\n\tmemset(buf, 0, sizeof(buf));\n\tmemset(retbuf, 0, sizeof(retbuf));\n}\n\nvoid mem_bind(int index, int len)\n{\n\tint err;\n\n\terr \u003d mbind(mmap_addr+pagesize*index, pagesize*len,\n\t\t    MPOL_BIND, nmask-\u003emaskp, nmask-\u003esize, 0);\n\tif (err)\n\t\tperror(\"mbind \"), exit(err);\n}\n\nvoid mem_interleave(int index, int len)\n{\n\tint err;\n\n\terr \u003d mbind(mmap_addr+pagesize*index, pagesize*len,\n\t\t    MPOL_INTERLEAVE, nmask-\u003emaskp, nmask-\u003esize, 0);\n\tif (err)\n\t\tperror(\"mbind \"), exit(err);\n}\n\nvoid mem_unbind(int index, int len)\n{\n\tint err;\n\n\terr \u003d mbind(mmap_addr+pagesize*index, pagesize*len,\n\t\t    MPOL_DEFAULT, NULL, 0, 0);\n\tif (err)\n\t\tperror(\"mbind \"), exit(err);\n}\n\nvoid Assert(char *expected, char *value, char *name, int line)\n{\n\tif (strcmp(expected, value) \u003d\u003d 0) {\n\t\tfprintf(stderr, \"%s: passed\\n\", name);\n\t\treturn;\n\t}\n\telse {\n\t\tfprintf(stderr, \"%s: %d: test failed. expect \u0027%s\u0027, actual \u0027%s\u0027\\n\",\n\t\t\tname, line,\n\t\t\texpected, value);\n//\t\texit(1);\n\t}\n}\n\n/*\n      AAAA\n    PPPPPPNNNNNN\n    might become\n    PPNNNNNNNNNN\n    case 4 below\n*/\nvoid case4(void)\n{\n\tinit();\n\tsprintf(buf, rubysrc, getpid(), mmap_addr, mmap_addr+pagesize*6);\n\n\tmem_bind(0, 4);\n\tmem_unbind(2, 2);\n\n\tfile \u003d popen(buf, \"r\");\n\tfread(retbuf, sizeof(retbuf), 1, file);\n\tAssert(\"2,4\", retbuf, \"case4\", __LINE__);\n\n\tfin();\n}\n\n/*\n       AAAA\n PPPPPPNNNNNN\n might become\n PPPPPPPPPPNN\n case 5 below\n*/\nvoid case5(void)\n{\n\tinit();\n\tsprintf(buf, rubysrc, getpid(), mmap_addr, mmap_addr+pagesize*6);\n\n\tmem_bind(0, 2);\n\tmem_bind(2, 2);\n\n\tfile \u003d popen(buf, \"r\");\n\tfread(retbuf, sizeof(retbuf), 1, file);\n\tAssert(\"4,2\", retbuf, \"case5\", __LINE__);\n\n\tfin();\n}\n\n/*\n\t    AAAA\n\tPPPPNNNNXXXX\n\tmight become\n\tPPPPPPPPPPPP 6\n*/\nvoid case6(void)\n{\n\tinit();\n\tsprintf(buf, rubysrc, getpid(), mmap_addr, mmap_addr+pagesize*6);\n\n\tmem_bind(0, 2);\n\tmem_bind(4, 2);\n\tmem_bind(2, 2);\n\n\tfile \u003d popen(buf, \"r\");\n\tfread(retbuf, sizeof(retbuf), 1, file);\n\tAssert(\"6\", retbuf, \"case6\", __LINE__);\n\n\tfin();\n}\n\n/*\n    AAAA\nPPPPNNNNXXXX\nmight become\nPPPPPPPPXXXX 7\n*/\nvoid case7(void)\n{\n\tinit();\n\tsprintf(buf, rubysrc, getpid(), mmap_addr, mmap_addr+pagesize*6);\n\n\tmem_bind(0, 2);\n\tmem_interleave(4, 2);\n\tmem_bind(2, 2);\n\n\tfile \u003d popen(buf, \"r\");\n\tfread(retbuf, sizeof(retbuf), 1, file);\n\tAssert(\"4,2\", retbuf, \"case7\", __LINE__);\n\n\tfin();\n}\n\n/*\n    AAAA\nPPPPNNNNXXXX\nmight become\nPPPPNNNNNNNN 8\n*/\nvoid case8(void)\n{\n\tinit();\n\tsprintf(buf, rubysrc, getpid(), mmap_addr, mmap_addr+pagesize*6);\n\n\tmem_bind(0, 2);\n\tmem_interleave(4, 2);\n\tmem_interleave(2, 2);\n\n\tfile \u003d popen(buf, \"r\");\n\tfread(retbuf, sizeof(retbuf), 1, file);\n\tAssert(\"2,4\", retbuf, \"case8\", __LINE__);\n\n\tfin();\n}\n\nvoid case_n(void)\n{\n\tinit();\n\tsprintf(buf, rubysrc, getpid(), mmap_addr, mmap_addr+pagesize*6);\n\n\t/* make redundunt mappings [0][1234][34][7] */\n\tmmap(mmap_addr + pagesize*4, pagesize*2, PROT_READ|PROT_WRITE,\n\t     MAP_FIXED|MAP_SHARED, mapped_fd, pagesize*3);\n\n\t/* Expect to do nothing. */\n\tmem_unbind(2, 2);\n\n\tfile \u003d popen(buf, \"r\");\n\tfread(retbuf, sizeof(retbuf), 1, file);\n\tAssert(\"4,2\", retbuf, \"case_n\", __LINE__);\n\n\tfin();\n}\n\nint main(int argc, char** argv)\n{\n\tcase4();\n\tcase5();\n\tcase6();\n\tcase7();\n\tcase8();\n\tcase_n();\n\n\treturn 0;\n}\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Caspar Zhang \u003ccaspar@casparzhang.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Christoph Lameter \u003ccl@linux.com\u003e\nCc: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: \u003cstable@vger.kernel.org\u003e\t\t[3.1.x]\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "32aaeffbd4a7457bf2f7448b33b5946ff2a960eb",
      "tree": "faf7ad871d87176423ff9ed1d1ba4d9c688fc23f",
      "parents": [
        "208bca0860406d16398145ddd950036a737c3c9d",
        "67b84999b1a8b1af5625b1eabe92146c5eb42932"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Nov 06 19:44:47 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Nov 06 19:44:47 2011 -0800"
      },
      "message": "Merge branch \u0027modsplit-Oct31_2011\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux\n\n* \u0027modsplit-Oct31_2011\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux: (230 commits)\n  Revert \"tracing: Include module.h in define_trace.h\"\n  irq: don\u0027t put module.h into irq.h for tracking irqgen modules.\n  bluetooth: macroize two small inlines to avoid module.h\n  ip_vs.h: fix implicit use of module_get/module_put from module.h\n  nf_conntrack.h: fix up fallout from implicit moduleparam.h presence\n  include: replace linux/module.h with \"struct module\" wherever possible\n  include: convert various register fcns to macros to avoid include chaining\n  crypto.h: remove unused crypto_tfm_alg_modname() inline\n  uwb.h: fix implicit use of asm/page.h for PAGE_SIZE\n  pm_runtime.h: explicitly requires notifier.h\n  linux/dmaengine.h: fix implicit use of bitmap.h and asm/page.h\n  miscdevice.h: fix up implicit use of lists and types\n  stop_machine.h: fix implicit use of smp.h for smp_processor_id\n  of: fix implicit use of errno.h in include/linux/of.h\n  of_platform.h: delete needless include \u003clinux/module.h\u003e\n  acpi: remove module.h include from platform/aclinux.h\n  miscdevice.h: delete unnecessary inclusion of module.h\n  device_cgroup.h: delete needless include \u003clinux/module.h\u003e\n  net: sch_generic remove redundant use of \u003clinux/module.h\u003e\n  net: inet_timewait_sock doesnt need \u003clinux/module.h\u003e\n  ...\n\nFix up trivial conflicts (other header files, and  removal of the ab3550 mfd driver) in\n - drivers/media/dvb/frontends/dibx000_common.c\n - drivers/media/video/{mt9m111.c,ov6650.c}\n - drivers/mfd/ab3550-core.c\n - include/linux/dmaengine.h\n"
    },
    {
      "commit": "e754d79d35f0b8612445a9bd7491c48d7317e3ad",
      "tree": "6ba53676ba3b425144b7723793e9cda6581a6790",
      "parents": [
        "22d5368a0838c00ed0e3ec20e7ff8c6e46ba99ef"
      ],
      "author": {
        "name": "H Hartley Sweeten",
        "email": "hartleys@visionengravers.com",
        "time": "Mon Oct 31 17:09:23 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Oct 31 17:30:50 2011 -0700"
      },
      "message": "mm/mempolicy.c: quiet sparse noise\n\nQuiet the spares noise:\n\nwarning: symbol \u0027default_policy\u0027 was not declared. Should it be static?\n\nSigned-off-by: H Hartley Sweeten \u003chsweeten@visionengravers.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Stephen Wilson \u003cwilsons@start.ca\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.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": "b95f1b31b75588306e32b2afd32166cad48f670b",
      "tree": "b5496144e41b117cfe5ae70b145b5351709ec4d0",
      "parents": [
        "b9e15bafdf1aa20791cdefdcbf1ccf7d7aa03aaa"
      ],
      "author": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Sun Oct 16 02:01:52 2011 -0400"
      },
      "committer": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Mon Oct 31 09:20:12 2011 -0400"
      },
      "message": "mm: Map most files to use export.h instead of module.h\n\nThe files changed within are only using the EXPORT_SYMBOL\nmacro variants.  They are not using core modular infrastructure\nand hence don\u0027t need module.h but only the export.h header.\n\nSigned-off-by: Paul Gortmaker \u003cpaul.gortmaker@windriver.com\u003e\n"
    },
    {
      "commit": "2bbff6c761e31b4642d297513cd3e0e89bc68ff7",
      "tree": "4555f0e22d503e04d5b1ff103096d6bd517a2422",
      "parents": [
        "8aacc9f550feb09c8b26470498345c192996a68e"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Sep 14 16:21:02 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Sep 14 18:09:36 2011 -0700"
      },
      "message": "mm/mempolicy.c: make copy_from_user() provably correct\n\nWhen compiling mm/mempolicy.c with struct user copy checks the following\nwarning is shown:\n\n  In file included from arch/x86/include/asm/uaccess.h:572,\n                   from include/linux/uaccess.h:5,\n                   from include/linux/highmem.h:7,\n                   from include/linux/pagemap.h:10,\n                   from include/linux/mempolicy.h:70,\n                   from mm/mempolicy.c:68:\n  In function `copy_from_user\u0027,\n      inlined from `compat_sys_get_mempolicy\u0027 at mm/mempolicy.c:1415:\n  arch/x86/include/asm/uaccess_64.h:64: warning: call to `copy_from_user_overflow\u0027 declared with attribute warning: copy_from_user() buffer size is not provably correct\n    LD      mm/built-in.o\n\nFix this by passing correct buffer size value.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8aacc9f550feb09c8b26470498345c192996a68e",
      "tree": "c55adebcb37152e9a504696d468adb0b852d4f04",
      "parents": [
        "bcd438be3b66110dfe70f655cadb2b20e201f076"
      ],
      "author": {
        "name": "Caspar Zhang",
        "email": "caspar@casparzhang.com",
        "time": "Wed Sep 14 16:20:58 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Sep 14 18:09:36 2011 -0700"
      },
      "message": "mm/mempolicy.c: fix pgoff in mbind vma merge\n\ncommit 9d8cebd4bcd7 (\"mm: fix mbind vma merge problem\") didn\u0027t really\nfix the mbind vma merge problem due to wrong pgoff value passing to\nvma_merge(), which made vma_merge() always return NULL.\n\nBefore the patch applied, we are getting a result like:\n\n  addr \u003d 0x7fa58f00c000\n  [snip]\n  7fa58f00c000-7fa58f00d000 rw-p 00000000 00:00 0\n  7fa58f00d000-7fa58f00e000 rw-p 00000000 00:00 0\n  7fa58f00e000-7fa58f00f000 rw-p 00000000 00:00 0\n\nhere 7fa58f00c000-\u003e7fa58f00f000 we get 3 VMAs which are expected to be\nmerged described as described in commit 9d8cebd.\n\nRe-testing the patched kernel with the reproducer provided in commit\n9d8cebd, we get the correct result:\n\n  addr \u003d 0x7ffa5aaa2000\n  [snip]\n  7ffa5aaa2000-7ffa5aaa6000 rw-p 00000000 00:00 0\n  7fffd556f000-7fffd5584000 rw-p 00000000 00:00 0                          [stack]\n\nSigned-off-by: Caspar Zhang \u003ccaspar@casparzhang.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\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": "778d3b0ff0654ad7092bf823fd32010066b12365",
      "tree": "cd0073d8c513e1c56fd6950c4ec985f16fd004ad",
      "parents": [
        "8521fc50d433507a7cdc96bec280f9e5888a54cc"
      ],
      "author": {
        "name": "Michal Hocko",
        "email": "mhocko@suse.cz",
        "time": "Tue Jul 26 16:08:30 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 26 16:49:43 2011 -0700"
      },
      "message": "cpusets: randomize node rotor used in cpuset_mem_spread_node()\n\n[ This patch has already been accepted as commit 0ac0c0d0f837 but later\n  reverted (commit 35926ff5fba8) because it itroduced arch specific\n  __node_random which was defined only for x86 code so it broke other\n  archs.  This is a followup without any arch specific code.  Other than\n  that there are no functional changes.]\n\nSome workloads that create a large number of small files tend to assign\ntoo many pages to node 0 (multi-node systems).  Part of the reason is\nthat the rotor (in cpuset_mem_spread_node()) used to assign nodes starts\nat node 0 for newly created tasks.\n\nThis patch changes the rotor to be initialized to a random node number\nof the cpuset.\n\n[akpm@linux-foundation.org: fix layout]\n[Lee.Schermerhorn@hp.com: Define stub numa_random() for !NUMA configuration]\n[mhocko@suse.cz: Make it arch independent]\n[akpm@linux-foundation.org: fix CONFIG_NUMA\u003dy, MAX_NUMNODES\u003e1 build]\nSigned-off-by: Jack Steiner \u003csteiner@sgi.com\u003e\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nSigned-off-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nCc: Paul Menage \u003cmenage@google.com\u003e\nCc: Jack Steiner \u003csteiner@sgi.com\u003e\nCc: Robin Holt \u003cholt@sgi.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Jack Steiner \u003csteiner@sgi.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Michal Hocko \u003cmhocko@suse.cz\u003e\nCc: Paul Menage \u003cmenage@google.com\u003e\nCc: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nCc: Robin Holt \u003cholt@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f69ff943df6972aae96c10733b6847fa094d8a59",
      "tree": "b0812b5e0b1376f193a9db088ebd8856deabed00",
      "parents": [
        "13057efb0a0063eb8042d99093ec88a52c4f1593"
      ],
      "author": {
        "name": "Stephen Wilson",
        "email": "wilsons@start.ca",
        "time": "Tue May 24 17:12:47 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 25 08:39:34 2011 -0700"
      },
      "message": "mm: proc: move show_numa_map() to fs/proc/task_mmu.c\n\nMoving show_numa_map() from mempolicy.c to task_mmu.c solves several\nissues.\n\n  - Having the show() operation \"miles away\" from the corresponding\n    seq_file iteration operations is a maintenance burden.\n\n  - The need to export ad hoc info like struct proc_maps_private is\n    eliminated.\n\n  - The implementation of show_numa_map() can be improved in a simple\n    manner by cooperating with the other seq_file operations (start,\n    stop, etc) -- something that would be messy to do without this\n    change.\n\nSigned-off-by: Stephen Wilson \u003cwilsons@start.ca\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Alexey Dobriyan \u003cadobriyan@gmail.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": "9840e37239183a947a15d617c67e418c6e505dd8",
      "tree": "591ca1f930df133d9c212ccf09edcbd26b7d3d3e",
      "parents": [
        "722e2ee09b8dfc2ac5eedb802dc0d227702df084"
      ],
      "author": {
        "name": "Stephen Wilson",
        "email": "wilsons@start.ca",
        "time": "Tue May 24 17:12:45 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 25 08:39:33 2011 -0700"
      },
      "message": "mm: remove check_huge_range()\n\nThis function has been superseded by gather_hugetbl_stats() and is no\nlonger needed.\n\nSigned-off-by: Stephen Wilson \u003cwilsons@start.ca\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Alexey Dobriyan \u003cadobriyan@gmail.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": "722e2ee09b8dfc2ac5eedb802dc0d227702df084",
      "tree": "0ce839a50764cb5e50ad7e748773ae159a8dc9cc",
      "parents": [
        "b1f72d1857bb0de19ce20a59f3f85e6dc47bdec8"
      ],
      "author": {
        "name": "Stephen Wilson",
        "email": "wilsons@start.ca",
        "time": "Tue May 24 17:12:44 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 25 08:39:33 2011 -0700"
      },
      "message": "mm: make gather_stats() type-safe and remove forward declaration\n\nImprove the prototype of gather_stats() to take a struct numa_maps as\nargument instead of a generic void *.  Update all callers to make the\nrequired type explicit.\n\nSince gather_stats() is not needed before its definition and is scheduled\nto be moved out of mempolicy.c the declaration is removed as well.\n\nSigned-off-by: Stephen Wilson \u003cwilsons@start.ca\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Alexey Dobriyan \u003cadobriyan@gmail.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": "b1f72d1857bb0de19ce20a59f3f85e6dc47bdec8",
      "tree": "4ce7e448a81f3315bb8aece1b38fc3cd15a7cf6d",
      "parents": [
        "29ea2f6982f1edc4302729116f2246dd7b45471d"
      ],
      "author": {
        "name": "Stephen Wilson",
        "email": "wilsons@start.ca",
        "time": "Tue May 24 17:12:43 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 25 08:39:33 2011 -0700"
      },
      "message": "mm: remove MPOL_MF_STATS\n\nMapping statistics in a NUMA environment is now computed using the generic\nwalk_page_range() logic.  Remove the old/equivalent functionality.\n\nSigned-off-by: Stephen Wilson \u003cwilsons@start.ca\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Alexey Dobriyan \u003cadobriyan@gmail.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": "29ea2f6982f1edc4302729116f2246dd7b45471d",
      "tree": "b40d85bf30c25537bd269407748abbdb3644a54f",
      "parents": [
        "d98f6cb67fb5b9376d4957d7ba9f32eac35c2e08"
      ],
      "author": {
        "name": "Stephen Wilson",
        "email": "wilsons@start.ca",
        "time": "Tue May 24 17:12:42 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 25 08:39:32 2011 -0700"
      },
      "message": "mm: use walk_page_range() instead of custom page table walking code\n\nConverting show_numa_map() to use the generic routine decouples the\nfunction from mempolicy.c, allowing it to be moved out of the mm subsystem\nand into fs/proc.\n\nAlso, include KSM pages in /proc/pid/numa_maps statistics.  The pagewalk\nlogic implemented by check_pte_range() failed to account for such pages as\nthey were not applicable to the page migration case.\n\nSigned-off-by: Stephen Wilson \u003cwilsons@start.ca\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Alexey Dobriyan \u003cadobriyan@gmail.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": "d98f6cb67fb5b9376d4957d7ba9f32eac35c2e08",
      "tree": "e7fbb12bde5e30154403bf4e8cabf0bcf817aa65",
      "parents": [
        "c856507f2b2b47a49d8587afb58930b463f6bff4"
      ],
      "author": {
        "name": "Stephen Wilson",
        "email": "wilsons@start.ca",
        "time": "Tue May 24 17:12:41 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 25 08:39:32 2011 -0700"
      },
      "message": "mm: export get_vma_policy()\n\nIn commit 48fce3429d (\"mempolicies: unexport get_vma_policy()\")\nget_vma_policy() was marked static as all clients were local to\nmempolicy.c.\n\nHowever, the decision to generate /proc/pid/numa_maps in the numa memory\npolicy code and outside the procfs subsystem introduces an artificial\ninterdependency between the two systems.  Exporting get_vma_policy() once\nagain is the first step to clean up this interdependency.\n\nSigned-off-by: Stephen Wilson \u003cwilsons@start.ca\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Alexey Dobriyan \u003cadobriyan@gmail.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": "7571966189e54adf0a8bc1384d6f13f44052ba63",
      "tree": "51f421e135905399751eaf78b19cd184dddf9387",
      "parents": [
        "4031a219d8913da40ade5a6e5b538cc61e975cc8"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Tue Mar 22 16:33:02 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 22 17:44:04 2011 -0700"
      },
      "message": "mempolicy: remove redundant check in __mpol_equal()\n\nThe \u0027flags\u0027 field is already checked, no need to do it again.\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nCc: Bob Liu \u003clliubbo@gmail.com\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\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": "e16b396ce314b2bcdfe6c173fe075bf8e3432368",
      "tree": "640f0f56f2ea676647af4eb42d32fa56be2ee549",
      "parents": [
        "7fd23a24717a327a66f3c32d11a20a2f169c824f",
        "e6e8dd5055a974935af1398c8648d4a9359b0ecb"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 18 10:37:40 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 18 10:37:40 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial: (47 commits)\n  doc: CONFIG_UNEVICTABLE_LRU doesn\u0027t exist anymore\n  Update cpuset info \u0026 webiste for cgroups\n  dcdbas: force SMI to happen when expected\n  arch/arm/Kconfig: remove one to many l\u0027s in the word.\n  asm-generic/user.h: Fix spelling in comment\n  drm: fix printk typo \u0027sracth\u0027\n  Remove one to many n\u0027s in a word\n  Documentation/filesystems/romfs.txt: fixing link to genromfs\n  drivers:scsi Change printk typo initate -\u003e initiate\n  serial, pch uart: Remove duplicate inclusion of linux/pci.h header\n  fs/eventpoll.c: fix spelling\n  mm: Fix out-of-date comments which refers non-existent functions\n  drm: Fix printk typo \u0027failled\u0027\n  coh901318.c: Change initate to initiate.\n  mbox-db5500.c Change initate to initiate.\n  edac: correct i82975x error-info reported\n  edac: correct i82975x mci initialisation\n  edac: correct commented info\n  fs: update comments to point correct document\n  target: remove duplicate include of target/target_core_device.h from drivers/target/target_core_hba.c\n  ...\n\nTrivial conflict in fs/eventpoll.c (spelling vs addition)\n"
    },
    {
      "commit": "5c4b4be3b6b937256103a5ae49177e0c3a17cb8f",
      "tree": "f0b7a74e61af26576e48581b70b7bad0a82d0ee7",
      "parents": [
        "19ee151e140daa5183c4984981801e542e0544fb"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Fri Mar 04 17:36:32 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 04 17:53:39 2011 -0800"
      },
      "message": "mm: use correct numa policy node for transparent hugepages\n\nPass down the correct node for a transparent hugepage allocation.  Most\ncallers continue to use the current node, however the hugepaged daemon\nnow uses the previous node of the first to be collapsed page instead.\nThis ensures that khugepaged does not mess up local memory for an\nexisting process which uses local policy.\n\nThe choice of node is somewhat primitive currently: it just uses the\nnode of the first page in the pmd range.  An alternative would be to\nlook at multiple pages and use the most popular node.  I used the\nsimplest variant for now which should work well enough for the case of\nall pages being on the same node.\n\n[akpm@linux-foundation.org: coding-style fixes]\nAcked-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2f5f9486f8c12e3aa40fe3775a18cb14efc5cea2",
      "tree": "362c21544db1bc65ffb65abf9f2b41b63621a124",
      "parents": [
        "b8bc1dd39722f7c306435d0682e9bf81abf52105"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Fri Mar 04 17:36:29 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 04 17:53:39 2011 -0800"
      },
      "message": "mm: change alloc_pages_vma to pass down the policy node for local policy\n\nCurrently alloc_pages_vma() always uses the local node as policy node for\nthe LOCAL policy.  Pass this node down as an argument instead.\n\nNo behaviour change from this patch, but will be needed for followons.\n\nAcked-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ae0e47f02aaedbfdd5e4bec73f79b714d758223d",
      "tree": "348f99385f42a2f698bddb4ced3e6c472e5d68cc",
      "parents": [
        "ddf12286951aee1e7763112cf26629de3fabe6ae"
      ],
      "author": {
        "name": "Justin P. Mattock",
        "email": "justinmattock@gmail.com",
        "time": "Tue Mar 01 15:06:02 2011 +0100"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Tue Mar 01 15:47:58 2011 +0100"
      },
      "message": "Remove one to many n\u0027s in a word\n\nSigned-off-by: Justin P. Mattock \u003cjustinmattock@gmail.com\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "8eac563c1c3a2047083022357ae63722b19e4e08",
      "tree": "724280edfbf6bd8206b0cc0337ee242d2a2518e0",
      "parents": [
        "7137c6bd455234bcb7560fd829e6ee49cae5fed6"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Fri Feb 25 14:44:28 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Feb 25 15:07:37 2011 -0800"
      },
      "message": "thp: fix interleaving for transparent hugepages\n\nThe THP code didn\u0027t pass the correct interleaving shift to the memory\npolicy code.  Fix this here by adjusting for the order.\n\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\nReviewed-by: Christoph Lameter \u003ccl@linux.com\u003e\nAcked-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "0bbbc0b33d141f78a0d9218a54a47f50621220d3",
      "tree": "3ef3363c189ac536926119731eb86dcf989f4adb",
      "parents": [
        "d39d33c332c611094f84cee39715866f4cbf79e2"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 13 15:47:05 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:45 2011 -0800"
      },
      "message": "thp: add numa awareness to hugepage allocations\n\nIt\u0027s mostly a matter of replacing alloc_pages with alloc_pages_vma after\nintroducing alloc_pages_vma.  khugepaged needs special handling as the\nallocation has to happen inside collapse_huge_page where the vma is known\nand an error has to be returned to the outer loop to sleep\nalloc_sleep_millisecs in case of failure.  But it retains the more\nefficient logic of handling allocation failures in khugepaged in case of\nCONFIG_NUMA\u003dn.\n\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "bae9c19bf12bb2a914a8e530270f41d36cc87c63",
      "tree": "19807de9c2cb9b47fa842a549bd8c2c21579e323",
      "parents": [
        "e7a00c45f29c0155007aa150bf231a70fa470365"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 13 15:46:46 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:41 2011 -0800"
      },
      "message": "thp: split_huge_page_mm/vma\n\nsplit_huge_page_pmd compat code.  Each one of those would need to be\nexpanded to hundred of lines of complex code without a fully reliable\nsplit_huge_page_pmd design.\n\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1e50df39f6e2c3a4a3394df62baa8a213df16c54",
      "tree": "d437981aec4fc5cf84178f7afcca83f0ef40aea1",
      "parents": [
        "53a7706d5ed8f1a53ba062b318773160cc476dde"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Thu Jan 13 15:46:14 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:36 2011 -0800"
      },
      "message": "mempolicy: remove tasklist_lock from migrate_pages\n\nToday, tasklist_lock in migrate_pages doesn\u0027t protect anything.\nrcu_read_lock() provide enough protection from pid hash walk.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReported-by: Peter Zijlstra \u003cpeterz@infradead.org\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": "7f0f24967b0349798803260b2e4bf347cffa1990",
      "tree": "80448367dd2403f02e74f90671e1f050aea41292",
      "parents": [
        "77f1fe6b08b13a87391549c8a820ddc817b6f50e"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Thu Jan 13 15:45:58 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:34 2011 -0800"
      },
      "message": "mm: migration: cleanup migrate_pages API by matching types for offlining and sync\n\nWith the introduction of the boolean sync parameter, the API looks a\nlittle inconsistent as offlining is still an int.  Convert offlining to a\nbool for the sake of being tidy.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: 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": "77f1fe6b08b13a87391549c8a820ddc817b6f50e",
      "tree": "720865bd0994da3787b6f37d33b2ee4c26a2de6c",
      "parents": [
        "3e7d344970673c5334cf7b5bb27c8c0942b06126"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Thu Jan 13 15:45:57 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:34 2011 -0800"
      },
      "message": "mm: migration: allow migration to operate asynchronously and avoid synchronous compaction in the faster path\n\nMigration synchronously waits for writeback if the initial passes fails.\nCallers of memory compaction do not necessarily want this behaviour if the\ncaller is latency sensitive or expects that synchronous migration is not\ngoing to have a significantly better success rate.\n\nThis patch adds a sync parameter to migrate_pages() allowing the caller to\nindicate if wait_on_page_writeback() is allowed within migration or not.\nFor reclaim/compaction, try_to_compact_pages() is first called\nasynchronously, direct reclaim runs and then try_to_compact_pages() is\ncalled synchronously as there is a greater expectation that it\u0027ll succeed.\n\n[akpm@linux-foundation.org: build/merge fix]\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: 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": "55cfaa3cbdd29c4919ecb5fb8965c310f357e48c",
      "tree": "914fad20ce59c42bd3781820c8fb73286581a5ae",
      "parents": [
        "1f64d69c7ad2e48e697493e45590679f7a69b7b2"
      ],
      "author": {
        "name": "Zeng Zhaoming",
        "email": "zengzm.kernel@gmail.com",
        "time": "Thu Dec 02 14:31:13 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Dec 02 14:51:14 2010 -0800"
      },
      "message": "mm/mempolicy.c: add rcu read lock to protect pid structure\n\nfind_task_by_vpid() should be protected by rcu_read_lock(), to prevent\nfree_pid() reclaiming pid.\n\nSigned-off-by: Zeng Zhaoming \u003czengzm.kernel@gmail.com\u003e\nCc: \"Paul E. McKenney\" \u003cpaulmck@us.ibm.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.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": "800416f799e0723635ac2d720ad4449917a1481c",
      "tree": "75f18c93accdfd4b5f58ac3172a336607bde508b",
      "parents": [
        "0851668fdd97e526b2a41f794b785c204dd3d3e0"
      ],
      "author": {
        "name": "Eric Dumazet",
        "email": "eric.dumazet@gmail.com",
        "time": "Wed Oct 27 19:33:43 2010 +0200"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 28 10:04:30 2010 -0700"
      },
      "message": "numa: fix slab_node(MPOL_BIND)\n\nWhen a node contains only HighMem memory, slab_node(MPOL_BIND)\ndereferences a NULL pointer.\n\n[ This code seems to go back all the way to commit 19770b32609b: \"mm:\n  filter based on a nodemask as well as a gfp_mask\".  Which was back in\n  April 2008, and it got merged into 2.6.26.  - Linus ]\n\nSigned-off-by: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Christoph Lameter \u003ccl@linux.com\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCc: stable@kernel.org\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "0def08e3acc2c9c934e4671487029aed52202d42",
      "tree": "5c1259f85b0ab08cb3e421f6104bee832a956413",
      "parents": [
        "74e3f3c3391d81a959f58a1191a560703a4415b4"
      ],
      "author": {
        "name": "Vasiliy Kulikov",
        "email": "segooon@gmail.com",
        "time": "Tue Oct 26 14:21:32 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 26 16:52:06 2010 -0700"
      },
      "message": "mm/mempolicy.c: check return code of check_range\n\nFunction check_range may return ERR_PTR(...). Check for it.\n\nSigned-off-by: Vasiliy Kulikov \u003csegooon@gmail.com\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nReviewed-by: Christoph Lameter \u003ccl@linux.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "cf608ac19c95804dc2df43b1f4f9e068aa9034ab",
      "tree": "a84d37df2b0bb57bd9a4b0b466726f5343fa5448",
      "parents": [
        "e4455abb50a19562dbfdc51a8424fda9b588bd6d"
      ],
      "author": {
        "name": "Minchan Kim",
        "email": "minchan.kim@gmail.com",
        "time": "Tue Oct 26 14:21:29 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 26 16:52:06 2010 -0700"
      },
      "message": "mm: compaction: fix COMPACTPAGEFAILED counting\n\nPresently update_nr_listpages() doesn\u0027t have a role.  That\u0027s because lists\npassed is always empty just after calling migrate_pages.  The\nmigrate_pages cleans up page list which have failed to migrate before\nreturning by aaa994b3.\n\n [PATCH] page migration: handle freeing of pages in migrate_pages()\n\n Do not leave pages on the lists passed to migrate_pages().  Seems that we will\n not need any postprocessing of pages.  This will simplify the handling of\n pages by the callers of migrate_pages().\n\nAt that time, we thought we don\u0027t need any postprocessing of pages.  But\nthe situation is changed.  The compaction need to know the number of\nfailed to migrate for COMPACTPAGEFAILED stat\n\nThis patch makes new rule for caller of migrate_pages to call\nputback_lru_pages.  So caller need to clean up the lists so it has a\nchance to postprocess the pages.  [suggested by Christoph Lameter]\n\nSigned-off-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nReviewed-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nAcked-by: Christoph Lameter \u003ccl@linux.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "596d7cfa2be6284512915609f01b7fe2f4df5d02",
      "tree": "7acfea30efdce5fb17da4302e567059bcae915eb",
      "parents": [
        "251060006003b79b788f8ce5a827ee5354a42910"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Mon Aug 09 17:19:01 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Aug 09 20:44:58 2010 -0700"
      },
      "message": "mempolicy: reduce stack size of migrate_pages()\n\nmigrate_pages() is using \u003e500 bytes stack. Reduce it.\n\n   mm/mempolicy.c: In function \u0027sys_migrate_pages\u0027:\n   mm/mempolicy.c:1344: warning: the frame size of 528 bytes is larger than 512 bytes\n\n[akpm@linux-foundation.org: don\u0027t play with a might-be-NULL pointer]\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: 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": "6f48d0ebd907ae419387f27b602ee98870cfa7bb",
      "tree": "355bd8b616f5a78d8adabe5b9631d7aad970dbaa",
      "parents": [
        "5e9d834a0e0c0485dfa487281ab9650fc37a3bb5"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Mon Aug 09 17:18:52 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Aug 09 20:44:56 2010 -0700"
      },
      "message": "oom: select task from tasklist for mempolicy ooms\n\nThe oom killer presently kills current whenever there is no more memory\nfree or reclaimable on its mempolicy\u0027s nodes.  There is no guarantee that\ncurrent is a memory-hogging task or that killing it will free any\nsubstantial amount of memory, however.\n\nIn such situations, it is better to scan the tasklist for nodes that are\nallowed to allocate on current\u0027s set of nodes and kill the task with the\nhighest badness() score.  This ensures that the most memory-hogging task,\nor the one configured by the user with /proc/pid/oom_adj, is always\nselected in such scenarios.\n\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5c0c165490e763eddcbb0b6c8c41ab5cc11ddea0",
      "tree": "729ad93071eaf065e7dfb7c7d94b0207b2eced8e",
      "parents": [
        "56480287f9776adc5b1a7a335ef62a9b9879ad7f"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "Lee.Schermerhorn@hp.com",
        "time": "Tue Jun 29 15:05:30 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 29 15:29:31 2010 -0700"
      },
      "message": "mempolicy: fix dangling reference to tmpfs superblock mpol\n\nMy patch to \"Factor out duplicate put/frees in mpol_shared_policy_init()\nto a common return path\"; and Dan Carpenter\u0027s fix thereto both left a\ndangling reference to the incoming tmpfs superblock mempolicy structure.\nA similar leak was introduced earlier when the nodemask was moved offstack\nto the scratch area despite the note in the comment block regarding the\nincoming ref.\n\nMove the remaining \u0027put of the incoming \"mpol\" to the common exit path to\ndrop the reference.\n\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nAcked-by: Dan Carpenter \u003cerror27@gmail.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: David Rientjes \u003crientjes@google.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": "0cae3457b1a6e88f31020272bcfd90c178716053",
      "tree": "71cf3f4049e9e80a5dd71219bd74061e8587a643",
      "parents": [
        "b1cdc4670b9508fcd47a15fbd12f70d269880b37"
      ],
      "author": {
        "name": "Dan Carpenter",
        "email": "error27@gmail.com",
        "time": "Tue May 25 23:42:58 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 26 08:19:23 2010 -0700"
      },
      "message": "mempolicy: ERR_PTR dereference in mpol_shared_policy_init()\n\nThe original code called mpol_put(new) while \"new\" was an ERR_PTR.\n\nSigned-off-by: Dan Carpenter \u003cerror27@gmail.com\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nAcked-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": "6ec3a12712ac67ffa4b80d16e0767ffd2431a68d",
      "tree": "7348f7ce38efe041429a2477706181686992e801",
      "parents": [
        "4f92e2586b43a2402e116055d4edda704f911b5b"
      ],
      "author": {
        "name": "Greg Thelen",
        "email": "gthelen@google.com",
        "time": "Mon May 24 14:32:33 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 25 08:07:00 2010 -0700"
      },
      "message": "mm: consider the entire user address space during node migration\n\nUse mm-\u003etask_size instead of TASK_SIZE to ensure that the entire user\naddress space is migrated.  mm-\u003etask_size is independent of the calling\ntask context.  TASK SIZE may be dependant on the address space size of the\ncalling process.  Usage of TASK_SIZE can lead to partial address space\nmigration if the calling process was 32 bit and the migrating process was\n64 bit.\n\nHere is the test script used on 64 system with a 32 bit echo process:\n\n  mount -t cgroup none /cgroup -o cpuset\n  cd /cgroup\n\n  mkdir 0\n  echo 1 \u003e 0/cpuset.cpus\n  echo 0 \u003e 0/cpuset.mems\n  echo 1 \u003e 0/cpuset.memory_migrate\n\n  mkdir 1\n  echo 1 \u003e 1/cpuset.cpus\n  echo 1 \u003e 1/cpuset.mems\n  echo 1 \u003e 1/cpuset.memory_migrate\n\n  echo $$ \u003e 0/tasks\n  64_bit_process \u0026\n  pid\u003d$!\n\n  echo $pid \u003e 1/tasks   # This does not migrate all process pages without\n                        # this patch.  If 64 bit echo is used or this patch is\n                        # applied, then the full address space of $pid is\n                        # migrated.\n\nTo check memory migration, I watched:\n  grep MemUsed /sys/devices/system/node/node*/meminfo\n\nSigned-off-by: Greg Thelen \u003cgthelen@google.com\u003e\nAcked-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@in.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": "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": "708c1bbc9d0c3e57f40501794d9b0eed29d10fce",
      "tree": "4b19caf68c420b32abdf05af3d413b1320f04fbe",
      "parents": [
        "971ada0f6659488c3f36aed4c6f7670ff5ce4368"
      ],
      "author": {
        "name": "Miao Xie",
        "email": "miaox@cn.fujitsu.com",
        "time": "Mon May 24 14:32:07 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 25 08:06:57 2010 -0700"
      },
      "message": "mempolicy: restructure rebinding-mempolicy functions\n\nNick Piggin reported that the allocator may see an empty nodemask when\nchanging cpuset\u0027s mems[1].  It happens only on the kernel that do not do\natomic nodemask_t stores.  (MAX_NUMNODES \u003e BITS_PER_LONG)\n\nBut I found that there is also a problem on the kernel that can do atomic\nnodemask_t stores.  The problem is that the allocator can\u0027t find a node to\nalloc page when changing cpuset\u0027s mems though there is a lot of free\nmemory.  The reason is like this:\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\nI can use the attached program reproduce it by the following step:\n\n# mkdir /dev/cpuset\n# mount -t cpuset cpuset /dev/cpuset\n# mkdir /dev/cpuset/1\n# echo `cat /dev/cpuset/cpus` \u003e /dev/cpuset/1/cpus\n# echo `cat /dev/cpuset/mems` \u003e /dev/cpuset/1/mems\n# echo $$ \u003e /dev/cpuset/1/tasks\n# numactl --membind\u003d`cat /dev/cpuset/mems` ./cpuset_mem_hog \u003cnr_tasks\u003e \u0026\n   \u003cnr_tasks\u003e \u003d max(nr_cpus - 1, 1)\n# killall -s SIGUSR1 cpuset_mem_hog\n# ./change_mems.sh\n\nseveral hours later, oom will happen though there is a lot of free memory.\n\nThis patchset fixes this problem by expanding the nodes range first(set\nnewly allowed bits) and shrink it lazily(clear newly disallowed bits).  So\nwe use a variable to tell the write-side task that read-side task is\nreading nodemask, and the write-side task clears newly disallowed nodes\nafter read-side task ends the current memory allocation.\n\nThis patch:\n\nIn order to fix no node to alloc memory, when we want to update mempolicy\nand mems_allowed, we expand the set of nodes first (set all the newly\nnodes) and shrink the set of nodes lazily(clean disallowed nodes), But the\nmempolicy\u0027s rebind functions may breaks the expanding.\n\nSo we restructure the mempolicy\u0027s rebind functions and split the rebind\nwork to two steps, just like the update of cpuset\u0027s mems: The 1st step:\nexpand the set of the mempolicy\u0027s nodes.  The 2nd step: shrink the set of\nthe mempolicy\u0027s nodes.  It is used when there is no real lock to protect\nthe mempolicy in the read-side.  Otherwise we can do rebind work at once.\n\nIn order to implement it, we define\n\n\tenum mpol_rebind_step {\n\t\tMPOL_REBIND_ONCE,\n\t\tMPOL_REBIND_STEP1,\n\t\tMPOL_REBIND_STEP2,\n\t\tMPOL_REBIND_NSTEP,\n\t};\n\nIf the mempolicy needn\u0027t be updated by two steps, we can pass\nMPOL_REBIND_ONCE to the rebind functions.  Or we can pass\nMPOL_REBIND_STEP1 to do the first step of the rebind work and pass\nMPOL_REBIND_STEP2 to do the second step work.\n\nBesides that, it maybe long time between these two step and we have to\nrelease the lock that protects mempolicy and mems_allowed.  If we hold the\nlock once again, we must check whether the current mempolicy is under the\nrebinding (the first step has been done) or not, because the task may\nalloc a new mempolicy when we don\u0027t hold the lock.  So we defined the\nfollowing flag to identify it:\n\n#define MPOL_F_REBINDING (1 \u003c\u003c 2)\n\nThe new functions will be used in the next patch.\n\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": "15d77835ac48dbc2d4884376ea6a08b65b1c40ba",
      "tree": "4bb094f030cedf8376a70a65f9271b571ba37562",
      "parents": [
        "345ace9c797030e77da8ff211b9502370b9d81ab"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Mon May 24 14:32:04 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 25 08:06:57 2010 -0700"
      },
      "message": "mempolicy: factor mpol_shared_policy_init() return paths\n\nFactor out duplicate put/frees in mpol_shared_policy_init() to a common\nreturn path.\n\nSigned-off-by: 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: 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": "345ace9c797030e77da8ff211b9502370b9d81ab",
      "tree": "5699b5b0b54412466b415ec581125e59f77d4b00",
      "parents": [
        "b4652e8429100ba5c3ddb49499faa1188c98c246"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Mon May 24 14:32:04 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 25 08:06:57 2010 -0700"
      },
      "message": "mempolicy: rename policy_types and cleanup initialization\n\nRename \u0027policy_types[]\u0027 to \u0027policy_modes[]\u0027 to better match the array\ncontents.\n\nUse designated intializer syntax for policy_modes[].\n\nSigned-off-by: 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: 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": "b4652e8429100ba5c3ddb49499faa1188c98c246",
      "tree": "55fa4fcdb8e8cf067b1474cc7068163e152f3075",
      "parents": [
        "e17f74af351cce9a1bade7b33af179497fdf95cf"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Mon May 24 14:32:03 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 25 08:06:57 2010 -0700"
      },
      "message": "mempolicy: lose unnecessary loop variable in mpol_parse_str()\n\nWe don\u0027t really need the extra variable \u0027i\u0027 in mpol_parse_str().  The only\nuse is as the the loop variable.  Then, it\u0027s assigned to \u0027mode\u0027.  Just use\nmode, and loose the \u0027uninitialized_var()\u0027 macro.\n\nSigned-off-by: 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: 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": "e17f74af351cce9a1bade7b33af179497fdf95cf",
      "tree": "99cce009bf299465a3b20594305ee209c8d85c3d",
      "parents": [
        "1980050250fa052b1c24a19f9b3d82fae14d77f8"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Mon May 24 14:32:02 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 25 08:06:57 2010 -0700"
      },
      "message": "mempolicy: don\u0027t call mpol_set_nodemask() when no_context\n\nNo need to call mpol_set_nodemask() when we have no context for the\nmempolicy.  This can occur when we\u0027re parsing a tmpfs \u0027mpol\u0027 mount option.\n Just save the raw nodemask in the mempolicy\u0027s w.user_nodemask member for\nuse when a tmpfs/shmem file is created.  mpol_shared_policy_init() will\n\"contextualize\" the policy for the new file based on the creating task\u0027s\ncontext.\n\nSigned-off-by: 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: 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": "1980050250fa052b1c24a19f9b3d82fae14d77f8",
      "tree": "96743238e6941bd7af113ebe9275f6892b374dd3",
      "parents": [
        "6eb27e1fdf5781719a3d2e90e6c89fa012135c62"
      ],
      "author": {
        "name": "Bob Liu",
        "email": "lliubbo@gmail.com",
        "time": "Mon May 24 14:32:01 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 25 08:06:57 2010 -0700"
      },
      "message": "mempolicy: remove redundant check\n\nLee\u0027s patch \"mempolicy: use MPOL_PREFERRED for system-wide default policy\"\nhas made the MPOL_DEFAULT only used in the memory policy APIs.  So, no\nneed to check in __mpol_equal also.  Also get rid of mpol_match_intent()\nand move its logic directly into __mpol_equal().\n\nSigned-off-by: Bob Liu \u003clliubbo@gmail.com\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\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": "6eb27e1fdf5781719a3d2e90e6c89fa012135c62",
      "tree": "23be89303ad69f5728f69665dfadf2b4dc45628c",
      "parents": [
        "6d556294d5b27fb12f18be7495af45b6156a409e"
      ],
      "author": {
        "name": "Bob Liu",
        "email": "lliubbo@gmail.com",
        "time": "Mon May 24 14:32:00 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 25 08:06:57 2010 -0700"
      },
      "message": "mempolicy: remove case MPOL_INTERLEAVE from policy_zonelist()\n\nIn policy_zonelist() mode MPOL_INTERLEAVE shouldn\u0027t happen, so fall\nthrough to BUG() instead of break to return.  I also fixed the comment.\n\nSigned-off-by: Bob Liu \u003clliubbo@gmail.com\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\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": "6d556294d5b27fb12f18be7495af45b6156a409e",
      "tree": "cb8549b4a4dc53399abc596dcac4630b0d936abf",
      "parents": [
        "e13861d822f8f443ca0c020ea8fc2dc01039cd63"
      ],
      "author": {
        "name": "Bob Liu",
        "email": "lliubbo@gmail.com",
        "time": "Mon May 24 14:31:59 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 25 08:06:57 2010 -0700"
      },
      "message": "mempolicy: remove redundant code\n\n1.  In funtion is_valid_nodemask(), varibable k will be inited to 0 in\n   the following loop, needn\u0027t init to policy_zone anymore.\n\n2. (MPOL_F_STATIC_NODES | MPOL_F_RELATIVE_NODES) has already defined\n   to MPOL_MODE_FLAGS in mempolicy.h.\n\nSigned-off-by: Bob Liu \u003clliubbo@gmail.com\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\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": "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": "c6b6ef8bb05af632889c5536513b9f4004961f73",
      "tree": "85f90f246fa1da0d47c48c43a735bbfac33c542e",
      "parents": [
        "7198f3c9b13c7aa1e5d9f7ff74c0ea303174feff"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Tue Mar 23 13:35:41 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 24 16:31:22 2010 -0700"
      },
      "message": "mempolicy: fix get_mempolicy() for relative and static nodes\n\nDiscovered while testing other mempolicy changes:\n\nget_mempolicy() does not handle static/relative mode flags correctly.\nReturn the value that the user specified so that it can be restored\nvia set_mempolicy() if desired.\n\nSigned-off-by: 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: 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": "926f2ae04f183098cf9a30521776fb2759c8afeb",
      "tree": "2d8583f77478557d508068ccb9bcc62cdc81920d",
      "parents": [
        "12821f5fb942e795f8009ece14bde868893bd811"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Tue Mar 23 13:35:32 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 24 16:31:21 2010 -0700"
      },
      "message": "tmpfs: cleanup mpol_parse_str()\n\nmpol_parse_str() made lots \u0027err\u0027 variable related bug.  Because it is ugly\nand reviewing unfriendly.\n\nThis patch simplifies it.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Ravikiran Thirumalai \u003ckiran@scalex86.org\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\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": "12821f5fb942e795f8009ece14bde868893bd811",
      "tree": "6b83232e845bf8427d7ad313ac31aa910ff6d1f7",
      "parents": [
        "d69b2e63e9172afb4d07c305601b79a55509ac4c"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Tue Mar 23 13:35:31 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 24 16:31:21 2010 -0700"
      },
      "message": "tmpfs: handle MPOL_LOCAL mount option properly\n\ncommit 71fe804b6d5 (mempolicy: use struct mempolicy pointer in\nshmem_sb_info) added mpol\u003dlocal mount option.  but its feature is broken\nsince it was born.  because such code always return 1 (i.e.  mount\nfailure).\n\nThis patch fixes it.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Ravikiran Thirumalai \u003ckiran@scalex86.org\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\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": "d69b2e63e9172afb4d07c305601b79a55509ac4c",
      "tree": "b1abae07eaa3427dedca17427100664cdccf8a38",
      "parents": [
        "413b43deab8377819aba1dbad2abf0c15d59b491"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Tue Mar 23 13:35:30 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 24 16:31:21 2010 -0700"
      },
      "message": "tmpfs: mpol\u003dbind:0 don\u0027t cause mount error.\n\nCurrently, following mount operation cause mount error.\n\n% mount -t tmpfs -ompol\u003dbind:0 none /tmp\n\nBecause commit 71fe804b6d5 (mempolicy: use struct mempolicy pointer in\nshmem_sb_info) corrupted MPOL_BIND parse code.\n\nThis patch restore the needed one.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Ravikiran Thirumalai \u003ckiran@scalex86.org\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\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": "413b43deab8377819aba1dbad2abf0c15d59b491",
      "tree": "07ed7302b20b620f09c479e36c6fd7bd02559860",
      "parents": [
        "8c363afe94b885d39ae2e93e41680282a470ad84"
      ],
      "author": {
        "name": "Ravikiran G Thirumalai",
        "email": "kiran@scalex86.org",
        "time": "Tue Mar 23 13:35:28 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 24 16:31:21 2010 -0700"
      },
      "message": "tmpfs: fix oops on mounts with mpol\u003ddefault\n\nFix an \u0027oops\u0027 when a tmpfs mount point is mounted with the mpol\u003ddefault\nmempolicy.\n\nUpon remounting a tmpfs mount point with \u0027mpol\u003ddefault\u0027 option, the mount\ncode crashed with a null pointer dereference.  The initial problem report\nwas on 2.6.27, but the problem exists in mainline 2.6.34-rc as well.  On\nexamining the code, we see that mpol_new returns NULL if default mempolicy\nwas requested.  This \u0027NULL\u0027 mempolicy is accessed to store the node mask\nresulting in oops.\n\nThe following patch fixes it.\n\nSigned-off-by: Ravikiran Thirumalai \u003ckiran@scalex86.org\u003e\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\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": "4e3eaddd142e2142c048c5052a0a9d2604fccfc6",
      "tree": "5bc45a286502e54e790c54948f22364c5afd9d89",
      "parents": [
        "8655e7e3ddec60603c4f6c14cdf642e2ba198df8",
        "b97c4bc16734a2e597dac7f91ee9eb78f4aeef9a"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 13 14:43:01 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 13 14:43:01 2010 -0800"
      },
      "message": "Merge branch \u0027core-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip\n\n* \u0027core-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:\n  locking: Make sparse work with inline spinlocks and rwlocks\n  x86/mce: Fix RCU lockdep splats\n  rcu: Increase RCU CPU stall timeouts if PROVE_RCU\n  ftrace: Replace read_barrier_depends() with rcu_dereference_raw()\n  rcu: Suppress RCU lockdep warnings during early boot\n  rcu, ftrace: Fix RCU lockdep splat in ftrace_perf_buf_prepare()\n  rcu: Suppress __mpol_dup() false positive from RCU lockdep\n  rcu: Make rcu_read_lock_sched_held() handle !PREEMPT\n  rcu: Add control variables to lockdep_rcu_dereference() diagnostics\n  rcu, cgroup: Relax the check in task_subsys_state() as early boot is now handled by lockdep-RCU\n  rcu: Use wrapper function instead of exporting tasklist_lock\n  sched, rcu: Fix rcu_dereference() for RCU-lockdep\n  rcu: Make task_subsys_state() RCU-lockdep checks handle boot-time use\n  rcu: Fix holdoff for accelerated GPs for last non-dynticked CPU\n  x86/gart: Unexport gart_iommu_aperture\n\nFix trivial conflicts in kernel/trace/ftrace.c\n"
    },
    {
      "commit": "da0aa138944311e6745a00ac3d88f03e8d9a46c4",
      "tree": "f8a88b12652fb2e4ed6775b0cc32da837ca2d949",
      "parents": [
        "d96ae5309165d9ed7c008a178238977b73595cd9"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Fri Mar 05 13:41:59 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 06 11:26:25 2010 -0800"
      },
      "message": "mm/mempolicy.c: fix indentation of the comments of do_migrate_pages\n\nCurrently, do_migrate_pages() have very long comment and this is not\nindent properly.  I often misunderstand it is function starting commnents\nand confused it.\n\nthis patch fixes it.\n\nnote: this patch doesn\u0027t break 80 column rule. I guess original\n      author intended this indentaion, but an accident corrupted it.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: 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": "9d8cebd4bcd7c3878462fdfda34bbcdeb4df7ef4",
      "tree": "0f0a6dadb4430aef18f1491003d70d9351d7b619",
      "parents": [
        "93e4a89a8c987189b168a530a331ef6d0fcf07a7"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Fri Mar 05 13:41:57 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 06 11:26:25 2010 -0800"
      },
      "message": "mm: fix mbind vma merge problem\n\nStrangely, current mbind() doesn\u0027t merge vma with neighbor vma although it\u0027s possible.\nUnfortunately, many vma can reduce performance...\n\nThis patch fixes it.\n\n    reproduced program\n    ----------------------------------------------------------------\n     #include \u003cnumaif.h\u003e\n     #include \u003cnuma.h\u003e\n     #include \u003csys/mman.h\u003e\n     #include \u003cstdio.h\u003e\n     #include \u003cunistd.h\u003e\n     #include \u003cstdlib.h\u003e\n     #include \u003cstring.h\u003e\n\n    static unsigned long pagesize;\n\n    int main(int argc, char** argv)\n    {\n    \tvoid* addr;\n    \tint ch;\n    \tint node;\n    \tstruct bitmask *nmask \u003d numa_allocate_nodemask();\n    \tint err;\n    \tint node_set \u003d 0;\n    \tchar buf[128];\n\n    \twhile ((ch \u003d getopt(argc, argv, \"n:\")) !\u003d -1){\n    \t\tswitch (ch){\n    \t\tcase \u0027n\u0027:\n    \t\t\tnode \u003d strtol(optarg, NULL, 0);\n    \t\t\tnuma_bitmask_setbit(nmask, node);\n    \t\t\tnode_set \u003d 1;\n    \t\t\tbreak;\n    \t\tdefault:\n    \t\t\t;\n    \t\t}\n    \t}\n    \targc -\u003d optind;\n    \targv +\u003d optind;\n\n    \tif (!node_set)\n    \t\tnuma_bitmask_setbit(nmask, 0);\n\n    \tpagesize \u003d getpagesize();\n\n    \taddr \u003d mmap(NULL, pagesize*3, PROT_READ|PROT_WRITE,\n    \t\t    MAP_ANON|MAP_PRIVATE, 0, 0);\n    \tif (addr \u003d\u003d MAP_FAILED)\n    \t\tperror(\"mmap \"), exit(1);\n\n    \tfprintf(stderr, \"pid \u003d %d \\n\" \"addr \u003d %p\\n\", getpid(), addr);\n\n    \t/* make page populate */\n    \tmemset(addr, 0, pagesize*3);\n\n    \t/* first mbind */\n    \terr \u003d mbind(addr+pagesize, pagesize, MPOL_BIND, nmask-\u003emaskp,\n    \t\t    nmask-\u003esize, MPOL_MF_MOVE_ALL);\n    \tif (err)\n    \t\terror(\"mbind1 \");\n\n    \t/* second mbind */\n    \terr \u003d mbind(addr, pagesize*3, MPOL_DEFAULT, NULL, 0, 0);\n    \tif (err)\n    \t\terror(\"mbind2 \");\n\n    \tsprintf(buf, \"cat /proc/%d/maps\", getpid());\n    \tsystem(buf);\n\n    \treturn 0;\n    }\n    ----------------------------------------------------------------\n\nresult without this patch\n\n\taddr \u003d 0x7fe26ef09000\n\t[snip]\n\t7fe26ef09000-7fe26ef0a000 rw-p 00000000 00:00 0\n\t7fe26ef0a000-7fe26ef0b000 rw-p 00000000 00:00 0\n\t7fe26ef0b000-7fe26ef0c000 rw-p 00000000 00:00 0\n\t7fe26ef0c000-7fe26ef0d000 rw-p 00000000 00:00 0\n\n\t\u003d\u003e 0x7fe26ef09000-0x7fe26ef0c000 have three vmas.\n\nresult with this patch\n\n\taddr \u003d 0x7fc9ebc76000\n\t[snip]\n\t7fc9ebc76000-7fc9ebc7a000 rw-p 00000000 00:00 0\n\t7fffbe690000-7fffbe6a5000 rw-p 00000000\t00:00 0\t[stack]\n\n\t\u003d\u003e 0x7fc9ebc76000-0x7fc9ebc7a000 have only one vma.\n\n[minchan.kim@gmail.com: fix file offset passed to vma_merge()]\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReviewed-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nSigned-off-by: 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": "99ee4ca746dda71326db7645463b4075ac1d665c",
      "tree": "ffee1bb0da458f7067a3207df0507be98dea7764",
      "parents": [
        "e6033e3b307fcfae08408e0673266db38392bda4"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Wed Mar 03 17:50:17 2010 -0800"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu Mar 04 12:07:34 2010 +0100"
      },
      "message": "rcu: Suppress __mpol_dup() false positive from RCU lockdep\n\nCommon code is used during task creation and after the task has\nstarted running.  RCU protection is not needed during task\ncreation because no other CPU has access to the\nunder-construction task.  Provide the RCU protection anyway to\nsuppress the false positive, as there does not appear to be a\ngood way for the common code to recognize that the task is only\naccessible to the CPU creating it.\n\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nCc: Paul Menage \u003cmenage@google.com\u003e\nCc: laijs@cn.fujitsu.com\nCc: dipankar@in.ibm.com\nCc: mathieu.desnoyers@polymtl.ca\nCc: josh@joshtriplett.org\nCc: dvhltc@us.ibm.com\nCc: niv@us.ibm.com\nCc: peterz@infradead.org\nCc: rostedt@goodmis.org\nCc: Valdis.Kletnieks@vt.edu\nCc: dhowells@redhat.com\nLKML-Reference: \u003c1267667418-32233-2-git-send-email-paulmck@linux.vnet.ibm.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "62b61f611eb5e20f7e9f8619bfd03bdfe8af6348",
      "tree": "9f06fff7eb6530fbe90b4d998b91071133f6af25",
      "parents": [
        "e9995ef978a7d5296fe04a9a2c5ca6e66d8bb4e5"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh.dickins@tiscali.co.uk",
        "time": "Mon Dec 14 17:59:33 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:20 2009 -0800"
      },
      "message": "ksm: memory hotremove migration only\n\nThe previous patch enables page migration of ksm pages, but that soon gets\ninto trouble: not surprising, since we\u0027re using the ksm page lock to lock\noperations on its stable_node, but page migration switches the page whose\nlock is to be used for that.  Another layer of locking would fix it, but\ndo we need that yet?\n\nDo we actually need page migration of ksm pages?  Yes, memory hotremove\nneeds to offline sections of memory: and since we stopped allocating ksm\npages with GFP_HIGHUSER, they will tend to be GFP_HIGHUSER_MOVABLE\ncandidates for migration.\n\nBut KSM is currently unconscious of NUMA issues, happily merging pages\nfrom different NUMA nodes: at present the rule must be, not to use\nMADV_MERGEABLE where you care about NUMA.  So no, NUMA page migration of\nksm pages does not make sense yet.\n\nSo, to complete support for ksm swapping we need to make hotremove safe.\nksm_memory_callback() take ksm_thread_mutex when MEM_GOING_OFFLINE and\nrelease it when MEM_OFFLINE or MEM_CANCEL_OFFLINE.  But if mapped pages\nare freed before migration reaches them, stable_nodes may be left still\npointing to struct pages which have been removed from the system: the\nstable_node needs to identify a page by pfn rather than page pointer, then\nit can safely prune them when MEM_OFFLINE.\n\nAnd make NUMA migration skip PageKsm pages where it skips PageReserved.\nBut it\u0027s only when we reach unmap_and_move() that the page lock is taken\nand we can be sure that raised pagecount has prevented a PageAnon from\nbeing upgraded: so add offlining arg to migrate_pages(), to migrate ksm\npage when offlining (has sufficient locking) but reject it otherwise.\n\nSigned-off-by: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Izik Eidus \u003cieidus@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Chris Wright \u003cchrisw@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": "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": "6d9c285a632b39ab83c6ae14cbff0e606d4042ee",
      "tree": "e8d334046befcce98abd9ac8bd5350597fe5a59f",
      "parents": [
        "ee32398fda8ab9867cf8d5469d6e83de5f5c1f7c"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Mon Dec 14 17:58:11 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:12 2009 -0800"
      },
      "message": "mm: move inc_zone_page_state(NR_ISOLATED) to just isolated place\n\nChristoph pointed out inc_zone_page_state(NR_ISOLATED) should be placed\nin right after isolate_page().\n\nThis patch does it.\n\nReviewed-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b05ca7385a2848abdc72051f832722641daed8b0",
      "tree": "ce0463be127434f25f23025142f2313d2dae21ab",
      "parents": [
        "ab8a3e14e6f8e567560f664bbd29aefb306a274e"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Mon Oct 26 16:49:59 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 29 07:39:29 2009 -0700"
      },
      "message": "do_mbind(): fix memory leak\n\nIf migrate_prep is failed, new variable is leaked.  This patch fixes it.\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nAcked-by: Christoph Lameter \u003ccl@linux-foundation.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": "ab8a3e14e6f8e567560f664bbd29aefb306a274e",
      "tree": "72de6b1c5a9130a0503ecc4d9e16db236f6884a0",
      "parents": [
        "47f365eb575735c6b2edf5d08e0d16d26a9c23bd"
      ],
      "author": {
        "name": "KOSAKI Motohiro",
        "email": "kosaki.motohiro@jp.fujitsu.com",
        "time": "Mon Oct 26 16:49:58 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 29 07:39:29 2009 -0700"
      },
      "message": "mbind(): fix leak of never putback pages\n\nIf mbind() receives an invalid address, do_mbind leaks a page.  The\nfollowing test program detects this leak.\n\nThis patch fixes it.\n\nmigrate_efault.c\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n #include \u003cnumaif.h\u003e\n #include \u003cnuma.h\u003e\n #include \u003csys/mman.h\u003e\n #include \u003cstdio.h\u003e\n #include \u003cunistd.h\u003e\n #include \u003cstdlib.h\u003e\n #include \u003cstring.h\u003e\n\nstatic unsigned long pagesize;\n\nstatic void* make_hole_mapping(void)\n{\n\n\tvoid* addr;\n\n\taddr \u003d mmap(NULL, pagesize*3, PROT_READ|PROT_WRITE,\n\t\t    MAP_ANON|MAP_PRIVATE, 0, 0);\n\tif (addr \u003d\u003d MAP_FAILED)\n\t\treturn NULL;\n\n\t/* make page populate */\n\tmemset(addr, 0, pagesize*3);\n\n\t/* make memory hole */\n\tmunmap(addr+pagesize, pagesize);\n\n\treturn addr;\n}\n\nint main(int argc, char** argv)\n{\n\tvoid* addr;\n\tint ch;\n\tint node;\n\tstruct bitmask *nmask \u003d numa_allocate_nodemask();\n\tint err;\n\tint node_set \u003d 0;\n\n\twhile ((ch \u003d getopt(argc, argv, \"n:\")) !\u003d -1){\n\t\tswitch (ch){\n\t\tcase \u0027n\u0027:\n\t\t\tnode \u003d strtol(optarg, NULL, 0);\n\t\t\tnuma_bitmask_setbit(nmask, node);\n\t\t\tnode_set \u003d 1;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\t;\n\t\t}\n\t}\n\targc -\u003d optind;\n\targv +\u003d optind;\n\n\tif (!node_set)\n\t\tnuma_bitmask_setbit(nmask, 0);\n\n\tpagesize \u003d getpagesize();\n\n\taddr \u003d make_hole_mapping();\n\n\terr \u003d mbind(addr, pagesize*3, MPOL_BIND, nmask-\u003emaskp, nmask-\u003esize, MPOL_MF_MOVE_ALL);\n\tif (err)\n\t\tperror(\"mbind \");\n\n\treturn 0;\n}\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nAcked-by: Christoph Lameter \u003ccl@linux-foundation.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": "4bfc44958e499af9a73f62201543b3a1f617cfeb",
      "tree": "01b40f951cd1a5e6dda8e2b21e1e24650c43c95e",
      "parents": [
        "93274e4d4e9416ad1fa47e2f26011e2c483fe5fe"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Aug 06 15:07:33 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Aug 07 10:39:55 2009 -0700"
      },
      "message": "mm: make set_mempolicy(MPOL_INTERLEAV) N_HIGH_MEMORY aware\n\nAt first, init_task\u0027s mems_allowed is initialized as this.\n init_task-\u003emems_allowed \u003d\u003d node_state[N_POSSIBLE]\n\nAnd cpuset\u0027s top_cpuset mask is initialized as this\n top_cpuset-\u003emems_allowed \u003d node_state[N_HIGH_MEMORY]\n\nBefore 2.6.29:\npolicy\u0027s mems_allowed is initialized as this.\n\n  1. update tasks-\u003emems_allowed by its cpuset-\u003emems_allowed.\n  2. policy-\u003emems_allowed \u003d nodes_and(tasks-\u003emems_allowed, user\u0027s mask)\n\nUpdating task\u0027s mems_allowed in reference to top_cpuset\u0027s one.\ncpuset\u0027s mems_allowed is aware of N_HIGH_MEMORY, always.\n\nIn 2.6.30: After commit 58568d2a8215cb6f55caf2332017d7bdff954e1c\n(\"cpuset,mm: update tasks\u0027 mems_allowed in time\"), policy\u0027s mems_allowed\nis initialized as this.\n\n  1. policy-\u003emems_allowd \u003d nodes_and(task-\u003emems_allowed, user\u0027s mask)\n\nHere, if task is in top_cpuset, task-\u003emems_allowed is not updated from\ninit\u0027s one.  Assume user excutes command as #numactrl --interleave\u003dall\n,....\n\n  policy-\u003emems_allowd \u003d nodes_and(N_POSSIBLE, ALL_SET_MASK)\n\nThen, policy\u0027s mems_allowd can includes a possible node, which has no pgdat.\n\nMPOL\u0027s INTERLEAVE just scans nodemask of task-\u003emems_allowd and access this\ndirectly.\n\n  NODE_DATA(nid)-\u003ezonelist even if NODE_DATA(nid)\u003d\u003dNULL\n\nThen, what\u0027s we need is making policy-\u003emems_allowed be aware of\nN_HIGH_MEMORY.  This patch does that.  But to do so, extra nodemask will\nbe on statck.  Because I know cpumask has a new interface of\nCPUMASK_ALLOC(), I added it to node.\n\nThis patch stands on old behavior.  But I feel this fix itself is just a\nBand-Aid.  But to do fundametal fix, we have to take care of memory\nhotplug and it takes time.  (task-\u003emems_allowd should be N_HIGH_MEMORY, I\nthink.)\n\nmpol_set_nodemask() should be aware of N_HIGH_MEMORY and policy\u0027s nodemask\nshould be includes only online nodes.\n\nIn old behavior, this is guaranteed by frequent reference to cpuset\u0027s\ncode.  Now, most of them are removed and mempolicy has to check it by\nitself.\n\nTo do check, a few nodemask_t will be used for calculating nodemask.  But,\nsize of nodemask_t can be big and it\u0027s not good to allocate them on stack.\n\nNow, cpumask_t has CPUMASK_ALLOC/FREE an easy code for get scratch area.\nNODEMASK_ALLOC/FREE shoudl be there.\n\n[akpm@linux-foundation.org: cleanups \u0026 tweaks]\nTested-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Miao Xie \u003cmiaox@cn.fujitsu.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Paul Menage \u003cmenage@google.com\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Yasunori Goto \u003cy-goto@jp.fujitsu.com\u003e\nCc: Pekka Enberg \u003cpenberg@cs.helsinki.fi\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": "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": "58568d2a8215cb6f55caf2332017d7bdff954e1c",
      "tree": "ffcdee457494ac78d6550b0aeac86536ca152e7b",
      "parents": [
        "950592f7b991f267d707d372b90f508bbe72acbc"
      ],
      "author": {
        "name": "Miao Xie",
        "email": "miaox@cn.fujitsu.com",
        "time": "Tue Jun 16 15:31:49 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 16 19:47:31 2009 -0700"
      },
      "message": "cpuset,mm: update tasks\u0027 mems_allowed in time\n\nFix allocating page cache/slab object on the unallowed node when memory\nspread is set by updating tasks\u0027 mems_allowed after its cpuset\u0027s mems is\nchanged.\n\nIn order to update tasks\u0027 mems_allowed in time, we must modify the code of\nmemory policy.  Because the memory policy is applied in the process\u0027s\ncontext originally.  After applying this patch, one task directly\nmanipulates anothers mems_allowed, and we use alloc_lock in the\ntask_struct to protect mems_allowed and memory policy of the task.\n\nBut in the fast path, we didn\u0027t use lock to protect them, because adding a\nlock may lead to performance regression.  But if we don\u0027t add a lock,the\ntask might see no nodes when changing cpuset\u0027s mems_allowed to some\nnon-overlapping set.  In order to avoid it, we set all new allowed nodes,\nthen clear newly disallowed ones.\n\n[lee.schermerhorn@hp.com:\n  The rework of mpol_new() to extract the adjusting of the node mask to\n  apply cpuset and mpol flags \"context\" breaks set_mempolicy() and mbind()\n  with MPOL_PREFERRED and a NULL nodemask--i.e., explicit local\n  allocation.  Fix this by adding the check for MPOL_PREFERRED and empty\n  node mask to mpol_new_mpolicy().\n\n  Remove the now unneeded \u0027nodes \u003d NULL\u0027 from mpol_new().\n\n  Note that mpol_new_mempolicy() is always called with a non-NULL\n  \u0027nodes\u0027 parameter now that it has been removed from mpol_new().\n  Therefore, we don\u0027t need to test nodes for NULL before testing it for\n  \u0027empty\u0027.  However, just to be extra paranoid, add a VM_BUG_ON() to\n  verify this assumption.]\n[lee.schermerhorn@hp.com:\n\n  I don\u0027t think the function name \u0027mpol_new_mempolicy\u0027 is descriptive\n  enough to differentiate it from mpol_new().\n\n  This function applies cpuset set context, usually constraining nodes\n  to those allowed by the cpuset.  However, when the \u0027RELATIVE_NODES flag\n  is set, it also translates the nodes.  So I settled on\n  \u0027mpol_set_nodemask()\u0027, because the comment block for mpol_new() mentions\n  that we need to call this function to \"set nodes\".\n\n  Some additional minor line length, whitespace and typo cleanup.]\nSigned-off-by: Miao Xie \u003cmiaox@cn.fujitsu.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Paul Menage \u003cmenage@google.com\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Yasunori Goto \u003cy-goto@jp.fujitsu.com\u003e\nCc: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: 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": "938bb9f5e840eddbf54e4f62f6c5ba9b3ae12c9d",
      "tree": "a25324159ed8cc96b97a4d39aaf228bbd07e3824",
      "parents": [
        "1e7bfb2134dfec37ce04fb3a4ca89299e892d10c"
      ],
      "author": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Wed Jan 14 14:14:30 2009 +0100"
      },
      "committer": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Wed Jan 14 14:15:30 2009 +0100"
      },
      "message": "[CVE-2009-0029] System call wrappers part 28\n\nSigned-off-by: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\n"
    },
    {
      "commit": "2b828925652340277a889cbc11b2d0637f7cdaf7",
      "tree": "32fcb3d3e466fc419fad2d3717956a5b5ad3d35a",
      "parents": [
        "3a3b7ce9336952ea7b9564d976d068a238976c9d",
        "58e20d8d344b0ee083febb18c2b021d2427e56ca"
      ],
      "author": {
        "name": "James Morris",
        "email": "jmorris@namei.org",
        "time": "Fri Nov 14 11:29:12 2008 +1100"
      },
      "committer": {
        "name": "James Morris",
        "email": "jmorris@namei.org",
        "time": "Fri Nov 14 11:29:12 2008 +1100"
      },
      "message": "Merge branch \u0027master\u0027 into next\n\nConflicts:\n\tsecurity/keys/internal.h\n\tsecurity/keys/process_keys.c\n\tsecurity/keys/request_key.c\n\nFixed conflicts above by using the non \u0027tsk\u0027 versions.\n\nSigned-off-by: James Morris \u003cjmorris@namei.org\u003e\n"
    },
    {
      "commit": "c69e8d9c01db2adc503464993c358901c9af9de4",
      "tree": "bed94aaa9aeb7a7834d1c880f72b62a11a752c78",
      "parents": [
        "86a264abe542cfececb4df129bc45a0338d8cdb9"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Nov 14 10:39:19 2008 +1100"
      },
      "committer": {
        "name": "James Morris",
        "email": "jmorris@namei.org",
        "time": "Fri Nov 14 10:39:19 2008 +1100"
      },
      "message": "CRED: Use RCU to access another task\u0027s creds and to release a task\u0027s own creds\n\nUse RCU to access another task\u0027s creds and to release a task\u0027s own creds.\nThis means that it will be possible for the credentials of a task to be\nreplaced without another task (a) requiring a full lock to read them, and (b)\nseeing deallocated memory.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: James Morris \u003cjmorris@namei.org\u003e\nAcked-by: Serge Hallyn \u003cserue@us.ibm.com\u003e\nSigned-off-by: James Morris \u003cjmorris@namei.org\u003e\n"
    },
    {
      "commit": "b6dff3ec5e116e3af6f537d4caedcad6b9e5082a",
      "tree": "9e76f972eb7ce9b84e0146c8e4126a3f86acb428",
      "parents": [
        "15a2460ed0af7538ca8e6c610fe607a2cd9da142"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Nov 14 10:39:16 2008 +1100"
      },
      "committer": {
        "name": "James Morris",
        "email": "jmorris@namei.org",
        "time": "Fri Nov 14 10:39:16 2008 +1100"
      },
      "message": "CRED: Separate task security context from task_struct\n\nSeparate the task security context from task_struct.  At this point, the\nsecurity data is temporarily embedded in the task_struct with two pointers\npointing to it.\n\nNote that the Alpha arch is altered as it refers to (E)UID and (E)GID in\nentry.S via asm-offsets.\n\nWith comment fixes Signed-off-by: Marc Dionne \u003cmarc.c.dionne@gmail.com\u003e\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: James Morris \u003cjmorris@namei.org\u003e\nAcked-by: Serge Hallyn \u003cserue@us.ibm.com\u003e\nSigned-off-by: James Morris \u003cjmorris@namei.org\u003e\n"
    },
    {
      "commit": "76aac0e9a17742e60d408be1a706e9aaad370891",
      "tree": "e873a000d9c96209726e0958e311f005c13b2ed5",
      "parents": [
        "b103c59883f1ec6e4d548b25054608cb5724453c"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Nov 14 10:39:12 2008 +1100"
      },
      "committer": {
        "name": "James Morris",
        "email": "jmorris@namei.org",
        "time": "Fri Nov 14 10:39:12 2008 +1100"
      },
      "message": "CRED: Wrap task credential accesses in the core kernel\n\nWrap access to task credentials so that they can be separated more easily from\nthe task_struct during the introduction of COW creds.\n\nChange most current-\u003e(|e|s|fs)[ug]id to current_(|e|s|fs)[ug]id().\n\nChange some task-\u003ee?[ug]id to task_e?[ug]id().  In some places it makes more\nsense to use RCU directly rather than a convenient wrapper; these will be\naddressed by later patches.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nReviewed-by: James Morris \u003cjmorris@namei.org\u003e\nAcked-by: Serge Hallyn \u003cserue@us.ibm.com\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: linux-audit@redhat.com\nCc: containers@lists.linux-foundation.org\nCc: linux-mm@kvack.org\nSigned-off-by: James Morris \u003cjmorris@namei.org\u003e\n"
    },
    {
      "commit": "0aedadf91a70a11c4a3e7c7d99b21e5528af8d5d",
      "tree": "9e2529fa79ff4134f99772b5ed3693316e2221a5",
      "parents": [
        "17a1217e12d8c8434f8a3deef7bf980c724a6ac7"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "cl@linux-foundation.org",
        "time": "Thu Nov 06 12:53:30 2008 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Nov 06 15:41:18 2008 -0800"
      },
      "message": "mm: move migrate_prep out from under mmap_sem\n\nMove the migrate_prep outside the mmap_sem for the following system calls\n\n1. sys_move_pages\n2. sys_migrate_pages\n3. sys_mbind()\n\nIt really does not matter when we flush the lru.  The system is free to\nadd pages onto the lru even during migration which will make the page\nmigration either skip the page (mbind, migrate_pages) or return a busy\nstate (move_pages).\n\nFixes this lockdep warning (and potential deadlock):\n\nSome VM place has\n      mmap_sem -\u003e kevent_wq via lru_add_drain_all()\n\nnet/core/dev.c::dev_ioctl()  has\n     rtnl_lock  -\u003e  mmap_sem        (*) the ioctl has copy_from_user() and it can do page fault.\n\nlinkwatch_event has\n     kevent_wq -\u003e rtnl_lock\n\nSigned-off-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nReported-by: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: Rik van Riel \u003criel@redhat.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": "894bc310419ac95f4fa4142dc364401a7e607f65",
      "tree": "15d56a7333b41620016b845d2323dd06e822b621",
      "parents": [
        "8a7a8544a4f6554ec2d8048ac9f9672f442db5a2"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "Lee.Schermerhorn@hp.com",
        "time": "Sat Oct 18 20:26:39 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Oct 20 08:50:26 2008 -0700"
      },
      "message": "Unevictable LRU Infrastructure\n\nWhen the system contains lots of mlocked or otherwise unevictable pages,\nthe pageout code (kswapd) can spend lots of time scanning over these\npages.  Worse still, the presence of lots of unevictable pages can confuse\nkswapd into thinking that more aggressive pageout modes are required,\nresulting in all kinds of bad behaviour.\n\nInfrastructure to manage pages excluded from reclaim--i.e., hidden from\nvmscan.  Based on a patch by Larry Woodman of Red Hat.  Reworked to\nmaintain \"unevictable\" pages on a separate per-zone LRU list, to \"hide\"\nthem from vmscan.\n\nKosaki Motohiro added the support for the memory controller unevictable\nlru list.\n\nPages on the unevictable list have both PG_unevictable and PG_lru set.\nThus, PG_unevictable is analogous to and mutually exclusive with\nPG_active--it specifies which LRU list the page is on.\n\nThe unevictable infrastructure is enabled by a new mm Kconfig option\n[CONFIG_]UNEVICTABLE_LRU.\n\nA new function \u0027page_evictable(page, vma)\u0027 in vmscan.c tests whether or\nnot a page may be evictable.  Subsequent patches will add the various\n!evictable tests.  We\u0027ll want to keep these tests light-weight for use in\nshrink_active_list() and, possibly, the fault path.\n\nTo avoid races between tasks putting pages [back] onto an LRU list and\ntasks that might be moving the page from non-evictable to evictable state,\nthe new function \u0027putback_lru_page()\u0027 -- inverse to \u0027isolate_lru_page()\u0027\n-- tests the \"evictability\" of a page after placing it on the LRU, before\ndropping the reference.  If the page has become unevictable,\nputback_lru_page() will redo the \u0027putback\u0027, thus moving the page to the\nunevictable list.  This way, we avoid \"stranding\" evictable pages on the\nunevictable list.\n\n[akpm@linux-foundation.org: fix fallout from out-of-order merge]\n[riel@redhat.com: fix UNEVICTABLE_LRU and !PROC_PAGE_MONITOR build]\n[nishimura@mxp.nes.nec.co.jp: remove redundant mapping check]\n[kosaki.motohiro@jp.fujitsu.com: unevictable-lru-infrastructure: putback_lru_page()/unevictable page handling rework]\n[kosaki.motohiro@jp.fujitsu.com: kill unnecessary lock_page() in vmscan.c]\n[kosaki.motohiro@jp.fujitsu.com: revert migration change of unevictable lru infrastructure]\n[kosaki.motohiro@jp.fujitsu.com: revert to unevictable-lru-infrastructure-kconfig-fix.patch]\n[kosaki.motohiro@jp.fujitsu.com: restore patch failure of vmstat-unevictable-and-mlocked-pages-vm-events.patch]\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nSigned-off-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nDebugged-by: Benjamin Kidwell \u003cbenjkidwell@yahoo.com\u003e\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "62695a84eb8f2e718bf4dfb21700afaa7a08e0ea",
      "tree": "0af7bac599748a7e462bff16d70c702c9e33a2fb",
      "parents": [
        "71088785c6bc68fddb450063d57b1bd1c78e0ea1"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Sat Oct 18 20:26:09 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Oct 20 08:50:25 2008 -0700"
      },
      "message": "vmscan: move isolate_lru_page() to vmscan.c\n\nOn large memory systems, the VM can spend way too much time scanning\nthrough pages that it cannot (or should not) evict from memory.  Not only\ndoes it use up CPU time, but it also provokes lock contention and can\nleave large systems under memory presure in a catatonic state.\n\nThis patch series improves VM scalability by:\n\n1) putting filesystem backed, swap backed and unevictable pages\n   onto their own LRUs, so the system only scans the pages that it\n   can/should evict from memory\n\n2) switching to two handed clock replacement for the anonymous LRUs,\n   so the number of pages that need to be scanned when the system\n   starts swapping is bound to a reasonable number\n\n3) keeping unevictable pages off the LRU completely, so the\n   VM does not waste CPU time scanning them. ramfs, ramdisk,\n   SHM_LOCKED shared memory segments and mlock()ed VMA pages\n   are keept on the unevictable list.\n\nThis patch:\n\nisolate_lru_page logically belongs to be in vmscan.c than migrate.c.\n\nIt is tough, because we don\u0027t need that function without memory migration\nso there is a valid argument to have it in migrate.c.  However a\nsubsequent patch needs to make use of it in the core mm, so we can happily\nmove it to vmscan.c.\n\nAlso, make the function a little more generic by not requiring that it\nadds an isolated page to a given list.  Callers can do that.\n\n\tNote that we now have \u0027__isolate_lru_page()\u0027, that does\n\tsomething quite different, visible outside of vmscan.c\n\tfor use with memory controller.  Methinks we need to\n\trationalize these names/purposes.\t--lts\n\n[akpm@linux-foundation.org: fix mm/memory_hotplug.c build]\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: 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": "d6bf73e4340f52159c1d9f13836b62e20fcd12d3",
      "tree": "18e3b9e4f126958d7d55758d9a70375a847b5760",
      "parents": [
        "6a4ad39b3de60ad0e75a78098be0f0eb1722b753"
      ],
      "author": {
        "name": "MinChan Kim",
        "email": "minchan.kim@gmail.com",
        "time": "Tue Aug 12 15:08:52 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Aug 12 16:07:29 2008 -0700"
      },
      "message": "do_migrate_pages(): remove unused variable\n\nSigned-off-by: MinChan Kim \u003cminchan.kim@gmail.com\u003e\nAcked-by: 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": "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": "d79df630f622806c4d0e116fbaf6ebf6baf53461",
      "tree": "d5a1c06209210c84ec60099687e4a87723ae1599",
      "parents": [
        "b8a0b6ccf2ba2519ace65d782b41ee91bf3c3778"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Fri Jul 04 12:24:13 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 04 13:03:05 2008 -0700"
      },
      "message": "mempolicy: mask off internal flags for userspace API\n\nFlags considered internal to the mempolicy kernel code are stored as part\nof the \"flags\" member of struct mempolicy.\n\nBefore exposing a policy type to userspace via get_mempolicy(), these\ninternal flags must be masked.  Flags exposed to userspace, however,\nshould still be returned to the user.\n\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "71fe804b6d56d6a7aed680e096901434cef6a2c3",
      "tree": "3dd437e09fe6ee57644c72c79e08c562d4bb6389",
      "parents": [
        "3f226aa1cbc006f9d90f22084f519ad2a1286cd8"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Mon Apr 28 02:13:26 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 28 08:58:25 2008 -0700"
      },
      "message": "mempolicy: use struct mempolicy pointer in shmem_sb_info\n\nThis patch replaces the mempolicy mode, mode_flags, and nodemask in the\nshmem_sb_info struct with a struct mempolicy pointer, initialized to NULL.\nThis removes dependency on the details of mempolicy from shmem.c and hugetlbfs\ninode.c and simplifies the interfaces.\n\nmpol_parse_str() in mempolicy.c is changed to return, via a pointer to a\npointer arg, a struct mempolicy pointer on success.  For MPOL_DEFAULT, the\nreturned pointer is NULL.  Further, mpol_parse_str() now takes a \u0027no_context\u0027\nargument that causes the input nodemask to be stored in the w.user_nodemask of\nthe created mempolicy for use when the mempolicy is installed in a tmpfs inode\nshared policy tree.  At that time, any cpuset contextualization is applied to\nthe original input nodemask.  This preserves the previous behavior where the\ninput nodemask was stored in the superblock.  We can think of the returned\nmempolicy as \"context free\".\n\nBecause mpol_parse_str() is now calling mpol_new(), we can remove from\nmpol_to_str() the semantic checks that mpol_new() already performs.\n\nAdd \u0027no_context\u0027 parameter to mpol_to_str() to specify that it should format\nthe nodemask in w.user_nodemask for \u0027bind\u0027 and \u0027interleave\u0027 policies.\n\nChange mpol_shared_policy_init() to take a pointer to a \"context free\" struct\nmempolicy and to create a new, \"contextualized\" mempolicy using the mode,\nmode_flags and user_nodemask from the input mempolicy.\n\n  Note: we know that the mempolicy passed to mpol_to_str() or\n  mpol_shared_policy_init() from a tmpfs superblock is \"context free\".  This\n  is currently the only instance thereof.  However, if we found more uses for\n  this concept, and introduced any ambiguity as to whether a mempolicy was\n  context free or not, we could add another internal mode flag to identify\n  context free mempolicies.  Then, we could remove the \u0027no_context\u0027 argument\n  from mpol_to_str().\n\nAdded shmem_get_sbmpol() to return a reference counted superblock mempolicy,\nif one exists, to pass to mpol_shared_policy_init().  We must add the\nreference under the sb stat_lock to prevent races with replacement of the mpol\nby remount.  This reference is removed in mpol_shared_policy_init().\n\n[akpm@linux-foundation.org: build fix]\n[akpm@linux-foundation.org: another build fix]\n[akpm@linux-foundation.org: yet another build fix]\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Andi Kleen \u003cak@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": "3f226aa1cbc006f9d90f22084f519ad2a1286cd8",
      "tree": "e54a87abb19f9dea184f4c17c4c8532d3d715de8",
      "parents": [
        "095f1fc4ebf36c64fddf9b6db29b1ab5517378e6"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Mon Apr 28 02:13:24 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 28 08:58:25 2008 -0700"
      },
      "message": "mempolicy: support mpol\u003dlocal tmpfs mount option\n\nFor tmpfs/shmem shared policies, MPOL_DEFAULT is not necessarily equivalent to\n\"local allocation\".  Because shared policies are at the same \"scope\" level\n[see Documentation/vm/numa_memory_policy.txt], as vma policies MPOL_DEFAULT\nmeans \"fall back to current task policy\".\n\nThis patch extends the memory policy string parsing function to display\n\"local\" for MPOL_PREFERRED + MPOL_F_LOCAL.  This allows one to specify local\nallocation as the default policy for shared memory areas via the tmpfs mpol\nmount option, regardless of the current task\u0027s policy.\n\nAlso, \"local\" is now displayed for this policy.  This patch allows us to\naccept the same input format as the display.\n\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Andi Kleen \u003cak@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": "095f1fc4ebf36c64fddf9b6db29b1ab5517378e6",
      "tree": "39aae9d5b05d8501d1794e92c6115331c0a40848",
      "parents": [
        "2291990ab36b4b2d8a81b1f92e7a046e51632a60"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Mon Apr 28 02:13:23 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 28 08:58:24 2008 -0700"
      },
      "message": "mempolicy: rework shmem mpol parsing and display\n\nmm/shmem.c currently contains functions to parse and display memory policy\nstrings for the tmpfs \u0027mpol\u0027 mount option.  Move this to mm/mempolicy.c with\nthe rest of the mempolicy support.  With subsequent patches, we\u0027ll be able to\nremove knowledge of the details [mode, flags, policy, ...] completely from\nshmem.c\n\n1) replace shmem_parse_mpol() in mm/shmem.c with mpol_parse_str() in\n   mm/mempolicy.c.  Rework to use the policy_types[] array [used by\n   mpol_to_str()] to look up mode by name.\n\n2) use mpol_to_str() to format policy for shmem_show_mpol().  mpol_to_str()\n   expects a pointer to a struct mempolicy, so temporarily construct one.\n   This will be replaced with a reference to a struct mempolicy in the tmpfs\n   superblock in a subsequent patch.\n\n   NOTE 1: I changed mpol_to_str() to use a colon \u0027:\u0027 rather than an equal\n   sign \u0027\u003d\u0027 as the nodemask delimiter to match mpol_parse_str() and the\n   tmpfs/shmem mpol mount option formatting that now uses mpol_to_str().  This\n   is a user visible change to numa_maps, but then the addition of the mode\n   flags already changed the display.  It makes sense to me to have the mounts\n   and numa_maps display the policy in the same format.  However, if anyone\n   objects strongly, I can pass the desired nodemask delimeter as an arg to\n   mpol_to_str().\n\n   Note 2: Like show_numa_map(), I don\u0027t check the return code from\n   mpol_to_str().  I do use a longer buffer than the one provided by\n   show_numa_map(), which seems to have sufficed so far.\n\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Andi Kleen \u003cak@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": "2291990ab36b4b2d8a81b1f92e7a046e51632a60",
      "tree": "b5b6b8ca9c92bc3c84cd7e7aefb5010d3793db4d",
      "parents": [
        "fc36b8d3d819047eb4d23ca079fb4d3af20ff076"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Mon Apr 28 02:13:22 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 28 08:58:24 2008 -0700"
      },
      "message": "mempolicy: clean-up mpol-to-str() mempolicy formatting\n\nmpol-to-str() formats memory policies into printable strings.  Currently this\nis only used to display \"numa_maps\".  A subsequent patch will use\nmpol_to_str() for formatting tmpfs [shmem] mpol mount options, allowing us to\nremove essentially duplicate code in mm/shmem.c.  This patch cleans up\nmpol_to_str() generally and in preparation for that patch.\n\n1) show_numa_maps() is not checking the return code from mpol_to_str().\n   There\u0027s not a lot we can do in this context if mpol_to_str() did return the\n   error [insufficient space in buffer].  Proposed \"solution\": just check,\n   under DEBUG_VM, that callers are providing sufficient buffer space for the\n   policy, flags, and a few nodes.  This way, we\u0027ll get some display.\n   show_numa_maps() is providing a 50-byte buffer, so it won\u0027t trip this\n   check.  50-bytes should be sufficient unless one has a large number of\n   nodes in a very sparse nodemask.\n\n2) The display of the new mode flags [\"static\" \u0026 \"relative\"] was set up to\n   display multiple flags, separated by a \"bar\" \u0027|\u0027.  However, this support is\n   incomplete--e.g., need_bar was never incremented; and currently, these two\n   flags are mutually exclusive.  So remove the \"bar\" support, for now, and\n   only display one flag.\n\n3) Use snprint() to format flags, so as not to overflow the buffer.  Not\n   that it\u0027s ever happed, AFAIK.\n\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Andi Kleen \u003cak@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": "fc36b8d3d819047eb4d23ca079fb4d3af20ff076",
      "tree": "65ee215a6bdca1e8d4ac4b57525445d7d1829c1d",
      "parents": [
        "53f2556b6792ed99fde965f5e061749edd455623"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Mon Apr 28 02:13:21 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 28 08:58:24 2008 -0700"
      },
      "message": "mempolicy: use MPOL_F_LOCAL to Indicate Preferred Local Policy\n\nNow that we\u0027re using \"preferred local\" policy for system default, we need to\nmake this as fast as possible.  Because of the variable size of the mempolicy\nstructure [based on size of nodemasks], the preferred_node may be in a\ndifferent cacheline from the mode.  This can result in accessing an extra\ncacheline in the normal case of system default policy.  Suspect this is the\ncause of an observed 2-3% slowdown in page fault testing relative to kernel\nwithout this patch series.\n\nTo alleviate this, use an internal mode flag, MPOL_F_LOCAL in the mempolicy\nflags member which is guaranteed [?] to be in the same cacheline as the mode\nitself.\n\nVerified that reworked mempolicy now performs slightly better on 25-rc8-mm1\nfor both anon and shmem segments with system default and vma [preferred local]\npolicy.\n\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Andi Kleen \u003cak@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": "53f2556b6792ed99fde965f5e061749edd455623",
      "tree": "82a679e33bc8c305297cbe4655be0dac24728907",
      "parents": [
        "bea904d54d6faa92400f10c8ea3d3828b8e1eb93"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Mon Apr 28 02:13:20 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 28 08:58:24 2008 -0700"
      },
      "message": "mempolicy: mPOL_PREFERRED cleanups for \"local allocation\"\n\nHere are a couple of \"cleanups\" for MPOL_PREFERRED behavior when\nv.preferred_node \u003c 0 -- i.e., \"local allocation\":\n\n1)  [do_]get_mempolicy() calls the now renamed get_policy_nodemask()\n    to fetch the nodemask associated with a policy.  Currently,\n    get_policy_nodemask() returns the set of nodes with memory, when\n    the policy \u0027mode\u0027 is \u0027PREFERRED, and the preferred_node is \u003c 0.\n    Change to return an empty nodemask, as this is what was specified\n    to achieve \"local allocation\".\n\n2)  When a task is moved into a [new] cpuset, mpol_rebind_policy() is\n    called to adjust any task and vma policy nodes to be valid in the\n    new cpuset.  However, when the policy is MPOL_PREFERRED, and the\n    preferred_node is \u003c0, no rebind is necessary.  The \"local allocation\"\n    indication is valid in any cpuset.  Existing code will \"do the right\n    thing\" because node_remap() will just return the argument node when\n    it is outside of the valid range of node ids.  However, I think it is\n    clearer and cleaner to skip the remap explicitly in this case.\n\n3)  mpol_to_str() produces a printable, \"human readable\" string from a\n    struct mempolicy.  For MPOL_PREFERRED with preferred_node \u003c0,  show\n    \"local\", as this indicates local allocation, as the task migrates\n    among nodes.  Note that this matches the usage of \"local allocation\"\n    in libnuma() and numactl.  Without this change, I believe that node_set()\n    [via set_bit()] will set bit 31, resulting in a misleading display.\n\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Andi Kleen \u003cak@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": "bea904d54d6faa92400f10c8ea3d3828b8e1eb93",
      "tree": "24966dd4dabadb4bb32aa1e00fae2c2168661229",
      "parents": [
        "52cd3b074050dd664380b5e8cfc85d4a6ed8ad48"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Mon Apr 28 02:13:18 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 28 08:58:24 2008 -0700"
      },
      "message": "mempolicy: use MPOL_PREFERRED for system-wide default policy\n\nCurrently, when one specifies MPOL_DEFAULT via a NUMA memory policy API\n[set_mempolicy(), mbind() and internal versions], the kernel simply installs a\nNULL struct mempolicy pointer in the appropriate context: task policy, vma\npolicy, or shared policy.  This causes any use of that policy to \"fall back\"\nto the next most specific policy scope.\n\nThe only use of MPOL_DEFAULT to mean \"local allocation\" is in the system\ndefault policy.  This requires extra checks/cases for MPOL_DEFAULT in many\nmempolicy.c functions.\n\nThere is another, \"preferred\" way to specify local allocation via the APIs.\nThat is using the MPOL_PREFERRED policy mode with an empty nodemask.\nInternally, the empty nodemask gets converted to a preferred_node id of \u0027-1\u0027.\nAll internal usage of MPOL_PREFERRED will convert the \u0027-1\u0027 to the id of the\nnode local to the cpu where the allocation occurs.\n\nSystem default policy, except during boot, is hard-coded to \"local\nallocation\".  By using the MPOL_PREFERRED mode with a negative value of\npreferred node for system default policy, MPOL_DEFAULT will never occur in the\n\u0027policy\u0027 member of a struct mempolicy.  Thus, we can remove all checks for\nMPOL_DEFAULT when converting policy to a node id/zonelist in the allocation\npaths.\n\nIn slab_node() return local node id when policy pointer is NULL.  No need to\nset a pol value to take the switch default.  Replace switch default with\nBUG()--i.e., shouldn\u0027t happen.\n\nWith this patch MPOL_DEFAULT is only used in the APIs, including internal\ncalls to do_set_mempolicy() and in the display of policy in\n/proc/\u003cpid\u003e/numa_maps.  It always means \"fall back\" to the the next most\nspecific policy scope.  This simplifies the description of memory policies\nquite a bit, with no visible change in behavior.\n\nget_mempolicy() continues to return MPOL_DEFAULT and an empty nodemask when\nthe requested policy [task or vma/shared] is NULL.  These are the values one\nwould supply via set_mempolicy() or mbind() to achieve that condition--default\nbehavior.\n\nThis patch updates Documentation to reflect this change.\n\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Andi Kleen \u003cak@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": "52cd3b074050dd664380b5e8cfc85d4a6ed8ad48",
      "tree": "fcfcf55c0e81376ea34919fab26e29bedd7f3b88",
      "parents": [
        "a6020ed759404372e8be2b276e85e51735472cc9"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Mon Apr 28 02:13:16 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 28 08:58:24 2008 -0700"
      },
      "message": "mempolicy: rework mempolicy Reference Counting [yet again]\n\nAfter further discussion with Christoph Lameter, it has become clear that my\nearlier attempts to clean up the mempolicy reference counting were a bit of\noverkill in some areas, resulting in superflous ref/unref in what are usually\nfast paths.  In other areas, further inspection reveals that I botched the\nunref for interleave policies.\n\nA separate patch, suitable for upstream/stable trees, fixes up the known\nerrors in the previous attempt to fix reference counting.\n\nThis patch reworks the memory policy referencing counting and, one hopes,\nsimplifies the code.  Maybe I\u0027ll get it right this time.\n\nSee the update to the numa_memory_policy.txt document for a discussion of\nmemory policy reference counting that motivates this patch.\n\nSummary:\n\nLookup of mempolicy, based on (vma, address) need only add a reference for\nshared policy, and we need only unref the policy when finished for shared\npolicies.  So, this patch backs out all of the unneeded extra reference\ncounting added by my previous attempt.  It then unrefs only shared policies\nwhen we\u0027re finished with them, using the mpol_cond_put() [conditional put]\nhelper function introduced by this patch.\n\nNote that shmem_swapin() calls read_swap_cache_async() with a dummy vma\ncontaining just the policy.  read_swap_cache_async() can call alloc_page_vma()\nmultiple times, so we can\u0027t let alloc_page_vma() unref the shared policy in\nthis case.  To avoid this, we make a copy of any non-null shared policy and\nremove the MPOL_F_SHARED flag from the copy.  This copy occurs before reading\na page [or multiple pages] from swap, so the overhead should not be an issue\nhere.\n\nI introduced a new static inline function \"mpol_cond_copy()\" to copy the\nshared policy to an on-stack policy and remove the flags that would require a\nconditional free.  The current implementation of mpol_cond_copy() assumes that\nthe struct mempolicy contains no pointers to dynamically allocated structures\nthat must be duplicated or reference counted during copy.\n\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Andi Kleen \u003cak@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": "aab0b1029f0843756b68e0ed3ca983685bf43ed6",
      "tree": "95a0546c908a1c7a3bf1353f433ff1464faf68db",
      "parents": [
        "45c4745af381851b0406d8e4db99e62e265691c2"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Mon Apr 28 02:13:13 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 28 08:58:24 2008 -0700"
      },
      "message": "mempolicy: mark shared policies for unref\n\nAs part of yet another rework of mempolicy reference counting, we want to be\nable to identify shared policies efficiently, because they have an extra ref\ntaken on lookup that needs to be removed when we\u0027re finished using the policy.\n\n  Note:  the extra ref is required because the policies are\n  shared between tasks/processes and can be changed/freed\n  by one task while another task is using them--e.g., for\n  page allocation.\n\nBuilding on David Rientjes mempolicy \"mode flags\" enhancement, this patch\nindicates a \"shared\" policy by setting a new MPOL_F_SHARED flag in the flags\nmember of the struct mempolicy added by David.  MPOL_F_SHARED, and any future\n\"internal mode flags\" are reserved from bit zero up, as they will never be\npassed in the upper bits of the mode argument of a mempolicy API.\n\nI set the MPOL_F_SHARED flag when the policy is installed in the shared policy\nrb-tree.  Don\u0027t need/want to clear the flag when removing from the tree as the\nmempolicy is freed [unref\u0027d] internally to the sp_delete() function.  However,\na task could hold another reference on this mempolicy from a prior lookup.  We\nneed the MPOL_F_SHARED flag to stay put so that any tasks holding a ref will\nunref, eventually freeing, the mempolicy.\n\nA later patch in this series will introduce a function to conditionally unref\n[mpol_free] a policy.  The MPOL_F_SHARED flag is one reason [currently the\nonly reason] to unref/free a policy via the conditional free.\n\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Andi Kleen \u003cak@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": "45c4745af381851b0406d8e4db99e62e265691c2",
      "tree": "d93f6f7b3d7eb3773aaa80444c56baff99e670d6",
      "parents": [
        "ae4d8c16aa22775f5731677abb8a82f03cec877e"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Mon Apr 28 02:13:12 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 28 08:58:24 2008 -0700"
      },
      "message": "mempolicy: rename struct mempolicy \u0027policy\u0027 member to \u0027mode\u0027\n\nThe terms \u0027policy\u0027 and \u0027mode\u0027 are both used in various places to describe the\nsemantics of the value stored in the \u0027policy\u0027 member of struct mempolicy.\nFurthermore, the term \u0027policy\u0027 is used to refer to that member, to the entire\nstruct mempolicy and to the more abstract concept of the tuple consisting of a\n\"mode\" and an optional node or set of nodes.  Recently, we have added \"mode\nflags\" that are passed in the upper bits of the \u0027mode\u0027 [or sometimes,\n\u0027policy\u0027] member of the numa APIs.\n\nI\u0027d like to resolve this confusion, which perhaps only exists in my mind, by\nrenaming the \u0027policy\u0027 member to \u0027mode\u0027 throughout, and fixing up the\nDocumentation.  Man pages will be updated separately.\n\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Andi Kleen \u003cak@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": "ae4d8c16aa22775f5731677abb8a82f03cec877e",
      "tree": "2d34c6fd334b51cc5f3265cd4ec26db758639b5c",
      "parents": [
        "f4e53d910b7dde2685b177f1e7c3e3e0b4a42f7b"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Mon Apr 28 02:13:11 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 28 08:58:24 2008 -0700"
      },
      "message": "mempolicy: fixup Fallback for Default Shmem Policy\n\nget_vma_policy() is not handling fallback to task policy correctly when the\nget_policy() vm_op returns NULL.  The NULL overwrites the \u0027pol\u0027 variable that\nwas holding the fallback task mempolicy.  So, it was falling back directly to\nsystem default policy.\n\nFix get_vma_policy() to use only non-NULL policy returned from the vma\nget_policy op.\n\nshm_get_policy() was falling back to current task\u0027s mempolicy if the \"backing\nfile system\" [tmpfs vs hugetlbfs] does not support the get_policy vm_op and\nthe vma policy is null.  This is incorrect for show_numa_maps() which is\nlikely querying the numa_maps of some task other than current.  Remove this\nfallback.\n\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Andi Kleen \u003cak@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": "f4e53d910b7dde2685b177f1e7c3e3e0b4a42f7b",
      "tree": "db4db3abbc0b63de88dabd13e9359ca86973935c",
      "parents": [
        "846a16bf0fc80dc95a414ffce465e3cbf9680247"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Mon Apr 28 02:13:10 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 28 08:58:23 2008 -0700"
      },
      "message": "mempolicy: write lock mmap_sem while changing task mempolicy\n\nA read of /proc/\u003cpid\u003e/numa_maps holds the target task\u0027s mmap_sem for read\nwhile examining each vma\u0027s mempolicy.  A vma\u0027s mempolicy can fall back to the\ntask\u0027s policy.  However, the task could be changing it\u0027s task policy and free\nthe one that the show_numa_maps() is examining.\n\nTo prevent this, grab the mmap_sem for write when updating task mempolicy.\nPointed out to me by Christoph Lameter and extracted and reworked from\nChristoph\u0027s alternative mempol reference counting patch.\n\nThis is analogous to the way that do_mbind() and do_get_mempolicy() prevent\nraces between task\u0027s sharing an mm_struct [a.k.a.  threads] setting and\nquerying a mempolicy for a particular address.\n\nNote: this is necessary, but not sufficient, to allow us to stop taking an\nextra reference on \"other task\u0027s mempolicy\" in get_vma_policy.  Subsequent\npatches will complete this update, allowing us to simplify the tests for\nwhether we need to unref a mempolicy at various points in the code.\n\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Andi Kleen \u003cak@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": "846a16bf0fc80dc95a414ffce465e3cbf9680247",
      "tree": "45e03061c5e3d8242bf470509771926f37177415",
      "parents": [
        "f0be3d32b05d3fea2fcdbbb81a39dac2a7163169"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Mon Apr 28 02:13:09 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 28 08:58:23 2008 -0700"
      },
      "message": "mempolicy: rename mpol_copy to mpol_dup\n\nThis patch renames mpol_copy() to mpol_dup() because, well, that\u0027s what it\ndoes.  Like, e.g., strdup() for strings, mpol_dup() takes a pointer to an\nexisting mempolicy, allocates a new one and copies the contents.\n\nIn a later patch, I want to use the name mpol_copy() to copy the contents from\none mempolicy to another like, e.g., strcpy() does for strings.\n\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Andi Kleen \u003cak@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": "f0be3d32b05d3fea2fcdbbb81a39dac2a7163169",
      "tree": "5794ce6a8befbce82cd3e44ff15fbf3bb5f2f3bf",
      "parents": [
        "3b1163006332302117b1b2acf226d4014ff46525"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "lee.schermerhorn@hp.com",
        "time": "Mon Apr 28 02:13:08 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 28 08:58:23 2008 -0700"
      },
      "message": "mempolicy: rename mpol_free to mpol_put\n\nThis is a change that was requested some time ago by Mel Gorman.  Makes sense\nto me, so here it is.\n\nNote: I retain the name \"mpol_free_shared_policy()\" because it actually does\nfree the shared_policy, which is NOT a reference counted object.  However, ...\n\nThe mempolicy object[s] referenced by the shared_policy are reference counted,\nso mpol_put() is used to release the reference held by the shared_policy.  The\nmempolicy might not be freed at this time, because some task attached to the\nshared object associated with the shared policy may be in the process of\nallocating a page based on the mempolicy.  In that case, the task performing\nthe allocation will hold a reference on the mempolicy, obtained via\nmpol_shared_policy_lookup().  The mempolicy will be freed when all tasks\nholding such a reference have called mpol_put() for the mempolicy.\n\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Andi Kleen \u003cak@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": "3e1f064562fcff7bf3856bc1d00dfa84d4f121cc",
      "tree": "9ebc17449238ab5284b72f634405044376dc816b",
      "parents": [
        "3842b46de626d1a3c44ad280d67ab0a4dc047d13"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Mon Apr 28 02:12:34 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 28 08:58:20 2008 -0700"
      },
      "message": "mempolicy: disallow static or relative flags for local preferred mode\n\nMPOL_F_STATIC_NODES and MPOL_F_RELATIVE_NODES don\u0027t mean anything for\nMPOL_PREFERRED policies that were created with an empty nodemask (for purely\nlocal allocations).  They\u0027ll never be invalidated because the allowed mems of\na task changes or need to be rebound relative to a cpuset\u0027s placement.\n\nAlso fixes a bug identified by Lee Schermerhorn that disallowed empty\nnodemasks to be passed to MPOL_PREFERRED to specify local allocations.  [A\ndifferent, somewhat incomplete, patch already existed in 25-rc5-mm1.]\n\nCc: Paul Jackson \u003cpj@sgi.com\u003e\nCc: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nCc: Andi Kleen \u003cak@suse.de\u003e\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nSigned-off-by: 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": "37012946da940521fb997a758a219d2f1ab56e51",
      "tree": "16553f91325720a53d0314070793700b5926e052",
      "parents": [
        "1d0d2680a01c4f9e292ec6d4714884da939053a1"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Mon Apr 28 02:12:33 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 28 08:58:20 2008 -0700"
      },
      "message": "mempolicy: create mempolicy_operations structure\n\nCreate a mempolicy_operations structure that currently points to two\nfunctions[*] for the various modes:\n\n\tint (*create)(struct mempolicy *, const nodemask_t *);\n\tvoid (*rebind)(struct mempolicy *, const nodemask_t *);\n\nThis splits the implementation for the various modes out of two large\nfunctions, mpol_new() and mpol_rebind_policy().  Eventually it may be\nbeneficial to add additional functions to accomodate the existing switch()\nstatements in mm/mempolicy.c.\n\n [*] The -\u003ecreate() function for MPOL_DEFAULT is currently NULL since no\n     struct mempolicy is dynamically allocated.\n\n[Lee.Schermerhorn@hp.com: fix regression in the package mempolicy regression tests]\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nCc: Paul Jackson \u003cpj@sgi.com\u003e\nCc: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: Andi Kleen \u003cak@suse.de\u003e\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.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"
    }
  ],
  "next": "1d0d2680a01c4f9e292ec6d4714884da939053a1"
}
