)]}'
{
  "log": [
    {
      "commit": "83d1674a946141c3c59d430e96c224f7937e6158",
      "tree": "03420c9fdf56ad35de685b7c0b48899d886bd7ff",
      "parents": [
        "9ca908f47bc784c90e17a553ce33e756c73feac4"
      ],
      "author": {
        "name": "Gerald Schaefer",
        "email": "gerald.schaefer@de.ibm.com",
        "time": "Wed Jul 23 21:28:22 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 24 10:47:21 2008 -0700"
      },
      "message": "mm: make CONFIG_MIGRATION available w/o CONFIG_NUMA\n\nWe\u0027d like to support CONFIG_MEMORY_HOTREMOVE on s390, which depends on\nCONFIG_MIGRATION.  So far, CONFIG_MIGRATION is only available with NUMA\nsupport.\n\nThis patch makes CONFIG_MIGRATION selectable for architectures that define\nARCH_ENABLE_MEMORY_HOTREMOVE.  When MIGRATION is enabled w/o NUMA, the\nkernel won\u0027t compile because migrate_vmas() does not know about\nvm_ops-\u003emigrate() and vma_migratable() does not know about policy_zone.\nTo fix this, those two functions can be restricted to \u0027#ifdef CONFIG_NUMA\u0027\nbecause they are not being used w/o NUMA.  vma_migratable() is moved over\nfrom migrate.h to mempolicy.h.\n\n[kosaki.motohiro@jp.fujitsu.com: build fix]\nAcked-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nSigned-off-by: Gerald Schaefer \u003cgerald.schaefer@de.ibm.com\u003e\nCc: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nCc: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nSigned-off-by: KOSAKI Motorhiro \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": "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": "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": "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": "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": "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": "3842b46de626d1a3c44ad280d67ab0a4dc047d13",
      "tree": "b3ed5977e3fa16300fb285aa7212fe2597aed9d0",
      "parents": [
        "37012946da940521fb997a758a219d2f1ab56e51"
      ],
      "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: small header file cleanup\n\nRemoves forward definition of vm_area_struct in linux/mempolicy.h.  We already\nget it from the linux/slab.h -\u003e linux/gfp.h include.\n\nRemoves the unused mpol_set_vma_default() macro from linux/mempolicy.h.\n\nRemoves the extern definition of default_policy since it is only referenced,\nas it should be, in mm/mempolicy.c.\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\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": "4c50bc0116cf3cc35e7152d6a8424b4db65f52d6",
      "tree": "99c617602cc1946fc86b48e9a35f14f9f354cf67",
      "parents": [
        "7ea931c9fc80c4d0a4306c30ec92eb0f1d922a0b"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Mon Apr 28 02:12:30 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 28 08:58:19 2008 -0700"
      },
      "message": "mempolicy: add MPOL_F_RELATIVE_NODES flag\n\nAdds another optional mode flag, MPOL_F_RELATIVE_NODES, that specifies\nnodemasks passed via set_mempolicy() or mbind() should be considered relative\nto the current task\u0027s mems_allowed.\n\nWhen the mempolicy is created, the passed nodemask is folded and mapped onto\nthe current task\u0027s mems_allowed.  For example, consider a task using\nset_mempolicy() to pass MPOL_INTERLEAVE | MPOL_F_RELATIVE_NODES with a\nnodemask of 1-3.  If current\u0027s mems_allowed is 4-7, the effected nodemask is\n5-7 (the second, third, and fourth node of mems_allowed).\n\nIf the same task is attached to a cpuset, the mempolicy nodemask is rebound\neach time the mems are changed.  Some possible rebinds and results are:\n\n\tmems\t\t\tresult\n\t1-3\t\t\t1-3\n\t1-7\t\t\t2-4\n\t1,5-6\t\t\t1,5-6\n\t1,5-7\t\t\t5-7\n\nLikewise, the zonelist built for MPOL_BIND acts on the set of zones assigned\nto the resultant nodemask from the relative remap.\n\nIn the MPOL_PREFERRED case, the preferred node is remapped from the currently\neffected nodemask to the relative nodemask.\n\nThis mempolicy mode flag was conceived of by Paul Jackson \u003cpj@sgi.com\u003e.\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\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": "f5b087b52f1710eb0bf15a2d2b030c51a6a1ca9e",
      "tree": "66336235822f59215707dfa501e1d2b66b38a015",
      "parents": [
        "028fec414d803117eb4b2ed12acb4dd5da65b32d"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Mon Apr 28 02:12:27 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 28 08:58:19 2008 -0700"
      },
      "message": "mempolicy: add MPOL_F_STATIC_NODES flag\n\nAdd an optional mempolicy mode flag, MPOL_F_STATIC_NODES, that suppresses the\nnode remap when the policy is rebound.\n\nAdds another member to struct mempolicy, nodemask_t user_nodemask, as part of\na union with cpuset_mems_allowed:\n\n\tstruct mempolicy {\n\t\t...\n\t\tunion {\n\t\t\tnodemask_t cpuset_mems_allowed;\n\t\t\tnodemask_t user_nodemask;\n\t\t} w;\n\t}\n\nthat stores the the nodemask that the user passed when he or she created the\nmempolicy via set_mempolicy() or mbind().  When using MPOL_F_STATIC_NODES,\nwhich is passed with any mempolicy mode, the user\u0027s passed nodemask\nintersected with the VMA or task\u0027s allowed nodes is always used when\ndetermining the preferred node, setting the MPOL_BIND zonelist, or creating\nthe interleave nodemask.  This happens whenever the policy is rebound,\nincluding when a task\u0027s cpuset assignment changes or the cpuset\u0027s mems are\nchanged.\n\nThis creates an interesting side-effect in that it allows the mempolicy\n\"intent\" to lie dormant and uneffected until it has access to the node(s) that\nit desires.  For example, if you currently ask for an interleaved policy over\na set of nodes that you do not have access to, the mempolicy is not created\nand the task continues to use the previous policy.  With this change, however,\nit is possible to create the same mempolicy; it is only effected when access\nto nodes in the nodemask is acquired.\n\nIt is also possible to mount tmpfs with the static nodemask behavior when\nspecifying a node or nodemask.  To do this, simply add \"\u003dstatic\" immediately\nfollowing the mempolicy mode at mount time:\n\n\tmount -o remount mpol\u003dinterleave\u003dstatic:1-3\n\nAlso removes mpol_check_policy() and folds its logic into mpol_new() since it\nis now obsoleted.  The unused vma_mpol_equal() is also removed.\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\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": "028fec414d803117eb4b2ed12acb4dd5da65b32d",
      "tree": "427f37ea0331369c1babc55c424c4fd2ac3b39f5",
      "parents": [
        "a3b51e0142d1be156ac697eaadadd6cfbb7ba32b"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Mon Apr 28 02:12:25 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 28 08:58:19 2008 -0700"
      },
      "message": "mempolicy: support optional mode flags\n\nWith the evolution of mempolicies, it is necessary to support mempolicy mode\nflags that specify how the policy shall behave in certain circumstances.  The\nmost immediate need for mode flag support is to suppress remapping the\nnodemask of a policy at the time of rebind.\n\nBoth the mempolicy mode and flags are passed by the user in the \u0027int policy\u0027\nformal of either the set_mempolicy() or mbind() syscall.  A new constant,\nMPOL_MODE_FLAGS, represents the union of legal optional flags that may be\npassed as part of this int.  Mempolicies that include illegal flags as part of\ntheir policy are rejected as invalid.\n\nAn additional member to struct mempolicy is added to support the mode flags:\n\n\tstruct mempolicy {\n\t\t...\n\t\tunsigned short policy;\n\t\tunsigned short flags;\n\t}\n\nThe splitting of the \u0027int\u0027 actual passed by the user is done in\nsys_set_mempolicy() and sys_mbind() for their respective syscalls.  This is\ndone by intersecting the actual with MPOL_MODE_FLAGS, rejecting the syscall of\nthere are additional flags, and storing it in the new \u0027flags\u0027 member of struct\nmempolicy.  The intersection of the actual with ~MPOL_MODE_FLAGS is stored in\nthe \u0027policy\u0027 member of the struct and all current users of pol-\u003epolicy remain\nunchanged.\n\nThe union of the policy mode and optional mode flags is passed back to the\nuser in get_mempolicy().\n\nThis combination of mode and flags within the same actual does not break\nuserspace code that relies on get_mempolicy(\u0026policy, ...) and either\n\n\tswitch (policy) {\n\tcase MPOL_BIND:\n\t\t...\n\tcase MPOL_INTERLEAVE:\n\t\t...\n\t};\n\nstatements or\n\n\tif (policy \u003d\u003d MPOL_INTERLEAVE) {\n\t\t...\n\t}\n\nstatements.  Such applications would need to use optional mode flags when\ncalling set_mempolicy() or mbind() for these previously implemented statements\nto stop working.  If an application does start using optional mode flags, it\nwill need to mask the optional flags off the policy in switch and conditional\nstatements that only test mode.\n\nAn additional member is also added to struct shmem_sb_info to store the\noptional mode flags.\n\n[hugh@veritas.com: shmem mpol: fix build warning]\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\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Hugh Dickins \u003chugh@veritas.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a3b51e0142d1be156ac697eaadadd6cfbb7ba32b",
      "tree": "da9e527316f112c09f0bc16553c64e3c87125c82",
      "parents": [
        "1b27d05b6e21249d2338be26dfcbe8f8d8ff8a5b"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Mon Apr 28 02:12:23 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 28 08:58:19 2008 -0700"
      },
      "message": "mempolicy: convert MPOL constants to enum\n\nThe mempolicy mode constants, MPOL_DEFAULT, MPOL_PREFERRED, MPOL_BIND, and\nMPOL_INTERLEAVE, are better declared as part of an enum since they are\nsequentially numbered and cannot be combined.\n\nThe policy member of struct mempolicy is also converted from type short to\ntype unsigned short.  A negative policy does not have any legitimate meaning,\nso it is possible to change its type in preparation for adding optional mode\nflags later.\n\nThe equivalent member of struct shmem_sb_info is also changed from int to\nunsigned short.\n\nFor compatibility, the policy formal to get_mempolicy() remains as a pointer\nto an int:\n\n\tint get_mempolicy(int *policy, unsigned long *nmask,\n\t\t\t  unsigned long maxnode, unsigned long addr,\n\t\t\t  unsigned long flags);\n\nalthough the only possible values is the range of type unsigned short.\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\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": "19770b32609b6bf97a3dece2529089494cbfc549",
      "tree": "3b5922d1b20aabdf929bde9309f323841717747a",
      "parents": [
        "dd1a239f6f2d4d3eedd318583ec319aa145b324c"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Mon Apr 28 02:12:18 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 28 08:58:19 2008 -0700"
      },
      "message": "mm: filter based on a nodemask as well as a gfp_mask\n\nThe MPOL_BIND policy creates a zonelist that is used for allocations\ncontrolled by that mempolicy.  As the per-node zonelist is already being\nfiltered based on a zone id, this patch adds a version of __alloc_pages() that\ntakes a nodemask for further filtering.  This eliminates the need for\nMPOL_BIND to create a custom zonelist.\n\nA positive benefit of this is that allocations using MPOL_BIND now use the\nlocal node\u0027s distance-ordered zonelist instead of a custom node-id-ordered\nzonelist.  I.e., pages will be allocated from the closest allowed node with\navailable memory.\n\n[Lee.Schermerhorn@hp.com: Mempolicy: update stale documentation and comments]\n[Lee.Schermerhorn@hp.com: Mempolicy: make dequeue_huge_page_vma() obey MPOL_BIND nodemask]\n[Lee.Schermerhorn@hp.com: Mempolicy: make dequeue_huge_page_vma() obey MPOL_BIND nodemask rework]\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "0e88460da6ab7bb6a7ef83675412ed5b6315d741",
      "tree": "1feb4de2362e4998a0deeab66af1efb9c7b8bb34",
      "parents": [
        "dac1d27bc8d5ca636d3014ecfdf94407031d1970"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Mon Apr 28 02:12:14 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 28 08:58:18 2008 -0700"
      },
      "message": "mm: introduce node_zonelist() for accessing the zonelist for a GFP mask\n\nIntroduce a node_zonelist() helper function.  It is used to lookup the\nappropriate zonelist given a node and a GFP mask.  The patch on its own is a\ncleanup but it helps clarify parts of the two-zonelist-per-node patchset.  If\nnecessary, it can be merged with the next patch in this set without problems.\n\nReviewed-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8793d854edbc2774943a4b0de3304dc73991159a",
      "tree": "380b3403a0fedfcce61d9af5af1ffbcc71017abf",
      "parents": [
        "81a6a5cdd2c5cd70874b88afe524ab09e9e869af"
      ],
      "author": {
        "name": "Paul Menage",
        "email": "menage@google.com",
        "time": "Thu Oct 18 23:39:39 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Fri Oct 19 11:53:36 2007 -0700"
      },
      "message": "Task Control Groups: make cpusets a client of cgroups\n\nRemove the filesystem support logic from the cpusets system and makes cpusets\na cgroup subsystem\n\nThe \"cpuset\" filesystem becomes a dummy filesystem; attempts to mount it get\npassed through to the cgroup filesystem with the appropriate options to\nemulate the old cpuset filesystem behaviour.\n\nSigned-off-by: Paul Menage \u003cmenage@google.com\u003e\nCc: Serge E. Hallyn \u003cserue@us.ibm.com\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nCc: Dave Hansen \u003chaveblue@us.ibm.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Paul Jackson \u003cpj@sgi.com\u003e\nCc: Kirill Korotaev \u003cdev@openvz.org\u003e\nCc: Herbert Poetzl \u003cherbert@13thfloor.at\u003e\nCc: Srivatsa Vaddagiri \u003cvatsa@in.ibm.com\u003e\nCc: Cedric Le Goater \u003cclg@fr.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": "dbcb0f19c877df9026b8c1227758d38bd561e9c4",
      "tree": "f58c85976906f42ff44798f514177392d7c48d0f",
      "parents": [
        "d8dc74f212c38407fc9f4367181f8f969b719485"
      ],
      "author": {
        "name": "Adrian Bunk",
        "email": "bunk@stusta.de",
        "time": "Tue Oct 16 01:26:26 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Oct 16 09:43:03 2007 -0700"
      },
      "message": "mm/mempolicy.c: cleanups\n\nThis patch contains the following cleanups:\n- every file should include the headers containing the prototypes for\n  its global functions\n- make the follosing needlessly global functions static:\n  - migrate_to_node()\n  - do_mbind()\n  - sp_alloc()\n  - mpol_rebind_policy()\n\n[akpm@linux-foundation.org: fix uninitialised var warning]\nSigned-off-by: Adrian Bunk \u003cbunk@stusta.de\u003e\nAcked-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "754af6f5a85fcd1ecb456851d20c65e4c6ce10ab",
      "tree": "8c985bfd704a8c993d6ca992725969c6fc5c9e5a",
      "parents": [
        "32a4330d4156e55a4888a201f484dbafed9504ed"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "Lee.Schermerhorn@hp.com",
        "time": "Tue Oct 16 01:24:51 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Oct 16 09:42:54 2007 -0700"
      },
      "message": "Mem Policy: add MPOL_F_MEMS_ALLOWED get_mempolicy() flag\n\nAllow an application to query the memories allowed by its context.\n\nUpdated numa_memory_policy.txt to mention that applications can use this to\nobtain allowed memories for constructing valid policies.\n\nTODO:  update out-of-tree libnuma wrapper[s], or maybe add a new\nwrapper--e.g.,  numa_get_mems_allowed() ?\n\nAlso, update numa syscall man pages.\n\nTested with memtoy V\u003e\u003d0.13.\n\nSigned-off-by:  Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nAcked-by: Christoph Lameter \u003cclameter@sgi.com\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": "480eccf9ae1073b87bb4fe118971fbf134a5bc61",
      "tree": "b66cd85cd6ad9dc7c141d34837a848111d036584",
      "parents": [
        "28f300d23674fa01ae747c66ce861d4ee6aebe8c"
      ],
      "author": {
        "name": "Lee Schermerhorn",
        "email": "Lee.Schermerhorn@hp.com",
        "time": "Tue Sep 18 22:46:47 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed Sep 19 11:24:18 2007 -0700"
      },
      "message": "Fix NUMA Memory Policy Reference Counting\n\nThis patch proposes fixes to the reference counting of memory policy in the\npage allocation paths and in show_numa_map().  Extracted from my \"Memory\nPolicy Cleanups and Enhancements\" series as stand-alone.\n\nShared policy lookup [shmem] has always added a reference to the policy,\nbut this was never unrefed after page allocation or after formatting the\nnuma map data.\n\nDefault system policy should not require additional ref counting, nor\nshould the current task\u0027s task policy.  However, show_numa_map() calls\nget_vma_policy() to examine what may be [likely is] another task\u0027s policy.\nThe latter case needs protection against freeing of the policy.\n\nThis patch adds a reference count to a mempolicy returned by\nget_vma_policy() when the policy is a vma policy or another task\u0027s\nmempolicy.  Again, shared policy is already reference counted on lookup.  A\nmatching \"unref\" [__mpol_free()] is performed in alloc_page_vma() for\nshared and vma policies, and in show_numa_map() for shared and another\ntask\u0027s mempolicy.  We can call __mpol_free() directly, saving an admittedly\ninexpensive inline NULL test, because we know we have a non-NULL policy.\n\nHandling policy ref counts for hugepages is a bit trickier.\nhuge_zonelist() returns a zone list that might come from a shared or vma\n\u0027BIND policy.  In this case, we should hold the reference until after the\nhuge page allocation in dequeue_hugepage().  The patch modifies\nhuge_zonelist() to return a pointer to the mempolicy if it needs to be\nunref\u0027d after allocation.\n\nKernel Build [16cpu, 32GB, ia64] - average of 10 runs:\n\n\t\tw/o patch\tw/ refcount patch\n\t    Avg\t  Std Devn\t   Avg\t  Std Devn\nReal:\t 100.59\t    0.38\t 100.63\t    0.43\nUser:\t1209.60\t    0.37\t1209.91\t    0.31\nSystem:   81.52\t    0.42\t  81.64\t    0.34\n\nSigned-off-by:  Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nAcked-by: Andi Kleen \u003cak@suse.de\u003e\nCc: Christoph Lameter \u003cclameter@sgi.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b377fd3982ad957c796758a90e2988401a884241",
      "tree": "3d7449ccdf7038bffffa9323873f4095cc1ac6ce",
      "parents": [
        "8e92f21ba3ea3f54e4be062b87ef9fc4af2d33e2"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Wed Aug 22 14:02:05 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed Aug 22 19:52:47 2007 -0700"
      },
      "message": "Apply memory policies to top two highest zones when highest zone is ZONE_MOVABLE\n\nThe NUMA layer only supports NUMA policies for the highest zone.  When\nZONE_MOVABLE is configured with kernelcore\u003d, the the highest zone becomes\nZONE_MOVABLE.  The result is that policies are only applied to allocations\nlike anonymous pages and page cache allocated from ZONE_MOVABLE when the\nzone is used.\n\nThis patch applies policies to the two highest zones when the highest zone\nis ZONE_MOVABLE.  As ZONE_MOVABLE consists of pages from the highest \"real\"\nzone, it\u0027s always functionally equivalent.\n\nThe patch has been tested on a variety of machines both NUMA and non-NUMA\ncovering x86, x86_64 and ppc64.  No abnormal results were seen in\nkernbench, tbench, dbench or hackbench.  It passes regression tests from\nthe numactl package with and without kernelcore\u003d once numactl tests are\npatched to wait for vmstat counters to update.\n\nakpm: this is the nasty hack to fix NUMA mempolicies in the presence of\nZONE_MOVABLE and kernelcore\u003d in 2.6.23.  Christoph says \"For .24 either merge\nthe mobility or get the other solution that Mel is working on.  That solution\nwould only use a single zonelist per node and filter on the fly.  That may\nhelp performance and also help to make memory policies work better.\"\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by:  Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nTested-by:  Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nAcked-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: Andi Kleen \u003cak@suse.de\u003e\nCc: Paul Mundt \u003clethal@linux-sh.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "396faf0303d273219db5d7eb4a2879ad977ed185",
      "tree": "96cb64fd6713ef7a924f4f878e259aea781f079a",
      "parents": [
        "2a1e274acf0b1c192face19a4be7c12d4503eaaf"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Jul 17 04:03:13 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:22:59 2007 -0700"
      },
      "message": "Allow huge page allocations to use GFP_HIGH_MOVABLE\n\nHuge pages are not movable so are not allocated from ZONE_MOVABLE.  However,\nas ZONE_MOVABLE will always have pages that can be migrated or reclaimed, it\ncan be used to satisfy hugepage allocations even when the system has been\nrunning a long time.  This allows an administrator to resize the hugepage pool\nat runtime depending on the size of ZONE_MOVABLE.\n\nThis patch adds a new sysctl called hugepages_treat_as_movable.  When a\nnon-zero value is written to it, future allocations for the huge page pool\nwill use ZONE_MOVABLE.  Despite huge pages being non-movable, we do not\nintroduce additional external fragmentation of note as huge pages are always\nthe largest contiguous block we care about.\n\n[akpm@linux-foundation.org: various fixes]\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "faf6bbcf94caee10ba34adb86db4ecca96bfd3bf",
      "tree": "487ebe329419548422c20409830185a6972385aa",
      "parents": [
        "aedb0eb107961a234f7c38e53da65a8f7ea992a9"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Sat Oct 21 10:24:17 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sat Oct 21 13:35:06 2006 -0700"
      },
      "message": "[PATCH] cpuset: mempolicy migration typo fix\n\nMistyped an ifdef CONFIG_CPUSETS - fixed.\n\nI doubt that anyone ever noticed.  The impact of this typo was\nthat if someone:\n 1) was using MPOL_BIND to force off node allocations\n 2) while using cpusets to constrain memory placement\n 3) when that cpuset was migrating that jobs memory\n 4) while the tasks in that job were actively forking\nthen there was a rare chance that future allocations using\nthat MPOL_BIND policy would be node local, not off node.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "2f6726e54a9410e2e4cee864947c05e954051916",
      "tree": "91b1173dead0cfc4a25caacb34b6c80f526bbc59",
      "parents": [
        "4e4785bcf0c8503224fa6c17d8e0228de781bff6"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Mon Sep 25 23:31:18 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Sep 26 08:48:47 2006 -0700"
      },
      "message": "[PATCH] Apply type enum zone_type\n\nAfter we have done this we can now do some typing cleanup.\n\nThe memory policy layer keeps a policy_zone that specifies\nthe zone that gets memory policies applied. This variable\ncan now be of type enum zone_type.\n\nThe check_highest_zone function and the build_zonelists funnctionm must\nthen also take a enum zone_type parameter.\n\nPlus there are a number of loops over zones that also should use\nzone_type.\n\nWe run into some troubles at some points with functions that need a\nzone_type variable to become -1. Fix that up.\n\n[pj@sgi.com: fix set_mempolicy() crash]\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "cee4cca740d209bcb4b9857baa2253d5ba4e3fbe",
      "tree": "88a23004393ea4a32cad79839479c8e653e401d6",
      "parents": [
        "2edc322d420a4cec8dbc184a1220ecd7fa9f8ae6",
        "9348f0de2d2b541b4ba64fb1f4efee9710a3d731"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Jun 20 15:10:08 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Jun 20 15:10:08 2006 -0700"
      },
      "message": "Merge git://git.infradead.org/hdrcleanup-2.6\n\n* git://git.infradead.org/hdrcleanup-2.6: (63 commits)\n  [S390] __FD_foo definitions.\n  Switch to __s32 types in joystick.h instead of C99 types for consistency.\n  Add \u003csys/types.h\u003e to headers included for userspace in \u003clinux/input.h\u003e\n  Move inclusion of \u003clinux/compat.h\u003e out of user scope in asm-x86_64/mtrr.h\n  Remove struct fddi_statistics from user view in \u003clinux/if_fddi.h\u003e\n  Move user-visible parts of drivers/s390/crypto/z90crypt.h to include/asm-s390\n  Revert include/media changes: Mauro says those ioctls are only used in-kernel(!)\n  Include \u003clinux/types.h\u003e and use __uXX types in \u003clinux/cramfs_fs.h\u003e\n  Use __uXX types in \u003clinux/i2o_dev.h\u003e, include \u003clinux/ioctl.h\u003e too\n  Remove private struct dx_hash_info from public view in \u003clinux/ext3_fs.h\u003e\n  Include \u003clinux/types.h\u003e and use __uXX types in \u003clinux/affs_hardblocks.h\u003e\n  Use __uXX types in \u003clinux/divert.h\u003e for struct divert_blk et al.\n  Use __u32 for elf_addr_t in \u003casm-powerpc/elf.h\u003e, not u32. It\u0027s user-visible.\n  Remove PPP_FCS from user view in \u003clinux/ppp_defs.h\u003e, remove __P mess entirely\n  Use __uXX types in user-visible structures in \u003clinux/nbd.h\u003e\n  Don\u0027t use \u0027u32\u0027 in user-visible struct ip_conntrack_old_tuple.\n  Use __uXX types for S390 DASD volume label definitions which are user-visible\n  S390 BIODASDREADCMB ioctl should use __u64 not u64 type.\n  Remove unneeded inclusion of \u003clinux/time.h\u003e from \u003clinux/ufs_fs.h\u003e\n  Fix private integer types used in V4L2 ioctls.\n  ...\n\nManually resolve conflict in include/linux/mtd/physmap.h\n"
    },
    {
      "commit": "45b35a5ced474b9fbbbfcfd5cf346c432d28d9fd",
      "tree": "a6570f00cb40b3e38c3db277e75547ed6f0e34d4",
      "parents": [
        "fd0a0ac1c5393b226640a30bae753983068136b3"
      ],
      "author": {
        "name": "Ralf Baechle",
        "email": "ralf@linux-mips.org",
        "time": "Thu Jun 08 00:43:41 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Thu Jun 08 15:12:21 2006 -0700"
      },
      "message": "[PATCH] Fix mempolicy.h build error\n\nFrom: Ralf Baechle \u003cralf@linux-mips.org\u003e\n\n\u003clinux/mempolicy.h\u003e uses struct mm_struct and relies on a definition or\ndeclaration somehow magically being dragged in which may result in a\nbuild:\n\n[...]\n  CC      mm/mempolicy.o\nIn file included from mm/mempolicy.c:69:\ninclude/linux/mempolicy.h:150: warning: âstruct mm_structâ declared inside parameter list\ninclude/linux/mempolicy.h:150: warning: its scope is only this definition or declaration, which is probably not what you want\ninclude/linux/mempolicy.h:175: warning: âstruct mm_structâ declared inside parameter list\nmm/mempolicy.c:622: error: conflicting types for âdo_migrate_pagesâ\ninclude/linux/mempolicy.h:175: error: previous declaration of âdo_migrate_pagesâ was here\nmm/mempolicy.c:1661: error: conflicting types for âmpol_rebind_mmâ\ninclude/linux/mempolicy.h:150: error: previous declaration of âmpol_rebind_mmâ was here\nmake[1]: *** [mm/mempolicy.o] Error 1\nmake: *** [mm] Error 2\n[ralf@denk linux-ip35]$\n\nIncluding \u003clinux/sched.h\u003e is a step into direction of include hell so\nfixed by adding a forward declaration of struct mm_struct instead.\n\nSigned-off-by: Ralf Baechle \u003cralf@linux-mips.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "62c4f0a2d5a188f73a94f2cb8ea0dba3e7cf0a7f",
      "tree": "e85ca2d0dd43f90dccf758338764c3caa55f333f",
      "parents": [
        "089f26d5e31b7bf42a9a8fefec08b30cd27f4b0e"
      ],
      "author": {
        "name": "David Woodhouse",
        "email": "dwmw2@infradead.org",
        "time": "Wed Apr 26 12:56:16 2006 +0100"
      },
      "committer": {
        "name": "David Woodhouse",
        "email": "dwmw2@infradead.org",
        "time": "Wed Apr 26 12:56:16 2006 +0100"
      },
      "message": "Don\u0027t include linux/config.h from anywhere else in include/\n\nSigned-off-by: David Woodhouse \u003cdwmw2@infradead.org\u003e\n"
    },
    {
      "commit": "c61afb181c649754ea221f104e268cbacfc993e3",
      "tree": "870917b3f9175cf1663a2620d989856913cfb5f8",
      "parents": [
        "101a50019ae5e370d73984ee05d56dd3b08f330a"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Fri Mar 24 03:16:08 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Mar 24 07:33:23 2006 -0800"
      },
      "message": "[PATCH] cpuset memory spread slab cache optimizations\n\nThe hooks in the slab cache allocator code path for support of NUMA\nmempolicies and cpuset memory spreading are in an important code path.  Many\nsystems will use neither feature.\n\nThis patch optimizes those hooks down to a single check of some bits in the\ncurrent tasks task_struct flags.  For non NUMA systems, this hook and related\ncode is already ifdef\u0027d out.\n\nThe optimization is done by using another task flag, set if the task is using\na non-default NUMA mempolicy.  Taking this flag bit along with the\nPF_SPREAD_PAGE and PF_SPREAD_SLAB flag bits added earlier in this \u0027cpuset\nmemory spreading\u0027 patch set, one can check for the combination of any of these\nspecial case memory placement mechanisms with a single test of the current\ntasks task_struct flags.\n\nThis patch also tightens up the code, to save a few bytes of kernel text\nspace, and moves some of it out of line.  Due to the nested inlines called\nfrom multiple places, we were ending up with three copies of this code, which\nonce we get off the main code path (for local node allocation) seems a bit\nwasteful of instruction memory.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "dc85da15d42b0efc792b0f5eab774dc5dbc1ceec",
      "tree": "4b347b10dadf3cc7bdbff36709e8cee2bc673996",
      "parents": [
        "fc0abb1451c64c79ac80665d5ba74450ce274e4d"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@engr.sgi.com",
        "time": "Wed Jan 18 17:42:36 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Jan 18 19:20:18 2006 -0800"
      },
      "message": "[PATCH] NUMA policies in the slab allocator V2\n\nThis patch fixes a regression in 2.6.14 against 2.6.13 that causes an\nimbalance in memory allocation during bootup.\n\nThe slab allocator in 2.6.13 is not numa aware and simply calls\nalloc_pages().  This means that memory policies may control the behavior of\nalloc_pages().  During bootup the memory policy is set to MPOL_INTERLEAVE\nresulting in the spreading out of allocations during bootup over all\navailable nodes.  The slab allocator in 2.6.13 has only a single list of\nslab pages.  As a result the per cpu slab cache and the spinlock controlled\npage lists may contain slab entries from off node memory.  The slab\nallocator in 2.6.13 makes no effort to discern the locality of an entry on\nits lists.\n\nThe NUMA aware slab allocator in 2.6.14 controls locality of the slab pages\nexplicitly by calling alloc_pages_node().  The NUMA slab allocator manages\nslab entries by having lists of available slab pages for each node.  The\nper cpu slab cache can only contain slab entries associated with the node\nlocal to the processor.  This guarantees that the default allocation mode\nof the slab allocator always assigns local memory if available.\n\nSetting MPOL_INTERLEAVE as a default policy during bootup has no effect\nanymore.  In 2.6.14 all node unspecific slab allocations are performed on\nthe boot processor.  This means that most of key data structures are\nallocated on one node.  Most processors will have to refer to these\nstructures making the boot node a potential bottleneck.  This may reduce\nperformance and cause unnecessary memory pressure on the boot node.\n\nThis patch implements NUMA policies in the slab layer.  There is the need\nof explicit application of NUMA memory policies by the slab allcator itself\nsince the NUMA slab allocator does no longer let the page_allocator control\nlocality.\n\nThe check for policies is made directly at the beginning of __cache_alloc\nusing current-\u003emempolicy.  The memory policy is already frequently checked\nby the page allocator (alloc_page_vma() and alloc_page_current()).  So it\nis highly likely that the cacheline is present.  For MPOL_INTERLEAVE\nkmalloc() will spread out each request to one node after another so that an\nequal distribution of allocations can be obtained during bootup.\n\nIt is not possible to push the policy check to lower layers of the NUMA\nslab allocator since the per cpu caches are now only containing slab\nentries from the current node.  If the policy says that the local node is\nnot to be preferred or forbidden then there is no point in checking the\nslab cache or local list of slab pages.  The allocation better be directed\nimmediately to the lists containing slab entries for the allowed set of\nnodes.\n\nThis way of applying policy also fixes another strange behavior in 2.6.13.\nalloc_pages() is controlled by the memory allocation policy of the current\nprocess.  It could therefore be that one process is running with\nMPOL_INTERLEAVE and would f.e.  obtain a new page following that policy\nsince no slab entries are in the lists anymore.  A page can typically be\nused for multiple slab entries but lets say that the current process is\nonly using one.  The other entries are then added to the slab lists.  These\nare now non local entries in the slab lists despite of the possible\navailability of local pages that would provide faster access and increase\nthe performance of the application.\n\nAnother process without MPOL_INTERLEAVE may now run and expect a local slab\nentry from kmalloc().  However, there are still these free slab entries\nfrom the off node page obtained from the other process via MPOL_INTERLEAVE\nin the cache.  The process will then get an off node slab entry although\nother slab entries may be available that are local to that process.  This\nmeans that the policy if one process may contaminate the locality of the\nslab caches for other processes.\n\nThis patch in effect insures that a per process policy is followed for the\nallocation of slab entries and that there cannot be a memory policy\ninfluence from one process to another.  A process with default policy will\nalways get a local slab entry if one is available.  And the process using\nmemory policies will get its memory arranged as requested.  Off-node slab\nallocation will require the use of spinlocks and will make the use of per\ncpu caches not possible.  A process using memory policies to redirect\nallocations offnode will have to cope with additional lock overhead in\naddition to the latency added by the need to access a remote slab entry.\n\nChanges V1-\u003eV2\n- Remove #ifdef CONFIG_NUMA by moving forward declaration into\n  prior #ifdef CONFIG_NUMA section.\n\n- Give the function determining the node number to use a saner\n  name.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "7339ff8302fd70aabf5f1ae26e0c4905fa74a495",
      "tree": "38ee561d51b7e4db7c0d6dd9ebd9fc22c2b6ab88",
      "parents": [
        "852cf918dcf2ae46468b425e679fbcbf0ea8fdbb"
      ],
      "author": {
        "name": "Robin Holt",
        "email": "holt@sgi.com",
        "time": "Sat Jan 14 13:20:48 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sat Jan 14 18:27:07 2006 -0800"
      },
      "message": "[PATCH] Add tmpfs options for memory placement policies\n\nAnything that writes into a tmpfs filesystem is liable to disproportionately\ndecrease the available memory on a particular node.  Since there\u0027s no telling\nwhat sort of application (e.g.  dd/cp/cat) might be dropping large files\nthere, this lets the admin choose the appropriate default behavior for their\nsite\u0027s situation.\n\nIntroduce a tmpfs mount option which allows specifying a memory policy and\na second option to specify the nodelist for that policy.  With the default\npolicy, tmpfs will behave as it does today.  This patch adds support for\npreferred, bind, and interleave policies.\n\nThe default policy will cause pages to be added to tmpfs files on the node\nwhich is doing the writing.  Some jobs expect a single process to create\nand manage the tmpfs files.  This results in a node which has a\nsignificantly reduced number of free pages.\n\nWith this patch, the administrator can specify the policy and nodes for\nthat policy where they would prefer allocations.\n\nThis patch was originally written by Brent Casavant and Hugh Dickins.  I\nadded support for the bind and preferred policies and the mpol_nodelist\nmount option.\n\nSigned-off-by: Brent Casavant \u003cbcasavan@sgi.com\u003e\nSigned-off-by: Hugh Dickins \u003chugh@veritas.com\u003e\nSigned-off-by: Robin Holt \u003cholt@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "4225399a66b315d4d1fb1cb61b75dda201c832e3",
      "tree": "c8bd976bc6590c5fe859c6129abb93072d99cfa8",
      "parents": [
        "202f72d5d1b5c2c084f63ef996c736d208b447b5"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Sun Jan 08 01:01:59 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Jan 08 20:13:44 2006 -0800"
      },
      "message": "[PATCH] cpuset: rebind vma mempolicies fix\n\nFix more of longstanding bug in cpuset/mempolicy interaction.\n\nNUMA mempolicies (mm/mempolicy.c) are constrained by the current tasks cpuset\nto just the Memory Nodes allowed by that cpuset.  The kernel maintains\ninternal state for each mempolicy, tracking what nodes are used for the\nMPOL_INTERLEAVE, MPOL_BIND or MPOL_PREFERRED policies.\n\nWhen a tasks cpuset memory placement changes, whether because the cpuset\nchanged, or because the task was attached to a different cpuset, then the\ntasks mempolicies have to be rebound to the new cpuset placement, so as to\npreserve the cpuset-relative numbering of the nodes in that policy.\n\nAn earlier fix handled such mempolicy rebinding for mempolicies attached to a\ntask.\n\nThis fix rebinds mempolicies attached to vma\u0027s (address ranges in a tasks\naddress space.) Due to the need to hold the task-\u003emm-\u003emmap_sem semaphore while\nupdating vma\u0027s, the rebinding of vma mempolicies has to be done when the\ncpuset memory placement is changed, at which time mmap_sem can be safely\nacquired.  The tasks mempolicy is rebound later, when the task next attempts\nto allocate memory and notices that its task-\u003ecpuset_mems_generation is\nout-of-date with its cpusets mems_generation.\n\nBecause walking the tasklist to find all tasks attached to a changing cpuset\nrequires holding tasklist_lock, a spinlock, one cannot update the vma\u0027s of the\naffected tasks while doing the tasklist scan.  In general, one cannot acquire\na semaphore (which can sleep) while already holding a spinlock (such as\ntasklist_lock).  So a list of mm references has to be built up during the\ntasklist scan, then the tasklist lock dropped, then for each mm, its mmap_sem\nacquired, and the vma\u0027s in that mm rebound.\n\nOnce the tasklist lock is dropped, affected tasks may fork new tasks, before\ntheir mm\u0027s are rebound.  A kernel global \u0027cpuset_being_rebound\u0027 is set to\npoint to the cpuset being rebound (there can only be one; cpuset modifications\nare done under a global \u0027manage_sem\u0027 semaphore), and the mpol_copy code that\nis used to copy a tasks mempolicies during fork catches such forking tasks,\nand ensures their children are also rebound.\n\nWhen a task is moved to a different cpuset, it is easier, as there is only one\ntask involved.  It\u0027s mm-\u003evma\u0027s are scanned, using the same\nmpol_rebind_policy() as used above.\n\nIt may happen that both the mpol_copy hook and the update done via the\ntasklist scan update the same mm twice.  This is ok, as the mempolicies of\neach vma in an mm keep track of what mems_allowed they are relative to, and\nsafely no-op a second request to rebind to the same nodes.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "74cb21553f4bf244185b9bec4c26e4e3169ad55e",
      "tree": "3f8f13e8dacc8f0876b01f62765a123ce1722b17",
      "parents": [
        "909d75a3b77bdd8baa9429bad3b69a654d2954ce"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Sun Jan 08 01:01:56 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Jan 08 20:13:44 2006 -0800"
      },
      "message": "[PATCH] cpuset: numa_policy_rebind cleanup\n\nCleanup, reorganize and make more robust the mempolicy.c code to rebind\nmempolicies relative to the containing cpuset after a tasks memory placement\nchanges.\n\nThe real motivator for this cleanup patch is to lay more groundwork for the\nupcoming patch to correctly rebind NUMA mempolicies that are attached to vma\u0027s\nafter the containing cpuset memory placement changes.\n\nNUMA mempolicies are constrained by the cpuset their task is a member of.\nWhen either (1) a task is moved to a different cpuset, or (2) the \u0027mems\u0027\nmems_allowed of a cpuset is changed, then the NUMA mempolicies have embedded\nnode numbers (for MPOL_BIND, MPOL_INTERLEAVE and MPOL_PREFERRED) that need to\nbe recalculated, relative to their new cpuset placement.\n\nThe old code used an unreliable method of determining what was the old\nmems_allowed constraining the mempolicy.  It just looked at the tasks\nmems_allowed value.  This sort of worked with the present code, that just\nrebinds the -task- mempolicy, and leaves any -vma- mempolicies broken,\nreferring to the old nodes.  But in an upcoming patch, the vma mempolicies\nwill be rebound as well.  Then the order in which the various task and vma\nmempolicies are updated will no longer be deterministic, and one can no longer\ncount on the task-\u003emems_allowed holding the old value for as long as needed.\nIt\u0027s not even clear if the current code was guaranteed to work reliably for\ntask mempolicies.\n\nSo I added a mems_allowed field to each mempolicy, stating exactly what\nmems_allowed the policy is relative to, and updated synchronously and reliably\nanytime that the mempolicy is rebound.\n\nAlso removed a useless wrapper routine, numa_policy_rebind(), and had its\ncaller, cpuset_update_task_memory_state(), call directly to the rewritten\npolicy_rebind() routine, and made that rebind routine extern instead of\nstatic, and added a \"mpol_\" prefix to its name, making it\nmpol_rebind_policy().\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "48fce3429df84a94766fbbc845fa8450d0715b48",
      "tree": "4458b95a0ef8a1896049415a0e3fc8a0e89d340a",
      "parents": [
        "132beacf9785d2e6e8aecb59aa078f3ca5668fa6"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Sun Jan 08 01:01:03 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Jan 08 20:12:44 2006 -0800"
      },
      "message": "[PATCH] mempolicies: unexport get_vma_policy()\n\nSince the numa_maps functionality is now in mempolicy.c we no longer need to\nexport get_vma_policy().\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: Andi Kleen \u003cak@muc.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "45b07ef31d1182d2cfde7711327e3afb268bb1ac",
      "tree": "3bf820531f920b43d4ed963643b1f565c82bcaa4",
      "parents": [
        "d0d963281ccb22e6f339bfdd75c6b2e31351929f"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Sun Jan 08 01:00:56 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Jan 08 20:12:43 2006 -0800"
      },
      "message": "[PATCH] cpusets: swap migration interface\n\nAdd a boolean \"memory_migrate\" to each cpuset, represented by a file\ncontaining \"0\" or \"1\" in each directory below /dev/cpuset.\n\nIt defaults to false (file contains \"0\").  It can be set true by writing\n\"1\" to the file.\n\nIf true, then anytime that a task is attached to the cpuset so marked, the\npages of that task will be moved to that cpuset, preserving, to the extent\npractical, the cpuset-relative placement of the pages.\n\nAlso anytime that a cpuset so marked has its memory placement changed (by\nwriting to its \"mems\" file), the tasks in that cpuset will have their pages\nmoved to the cpusets new nodes, preserving, to the extent practical, the\ncpuset-relative placement of the moved pages.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nCc: Christoph Lameter \u003cchristoph@lameter.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "39743889aaf76725152f16aa90ca3c45f6d52da3",
      "tree": "2a6f658d03dbbd9428934c5e030230a4acb6d5e0",
      "parents": [
        "dc9aa5b9d65fd11b1f5246b46ec610ee8b83c6dd"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Sun Jan 08 01:00:51 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Jan 08 20:12:42 2006 -0800"
      },
      "message": "[PATCH] Swap Migration V5: sys_migrate_pages interface\n\nsys_migrate_pages implementation using swap based page migration\n\nThis is the original API proposed by Ray Bryant in his posts during the first\nhalf of 2005 on linux-mm@kvack.org and linux-kernel@vger.kernel.org.\n\nThe intent of sys_migrate is to migrate memory of a process.  A process may\nhave migrated to another node.  Memory was allocated optimally for the prior\ncontext.  sys_migrate_pages allows to shift the memory to the new node.\n\nsys_migrate_pages is also useful if the processes available memory nodes have\nchanged through cpuset operations to manually move the processes memory.  Paul\nJackson is working on an automated mechanism that will allow an automatic\nmigration if the cpuset of a process is changed.  However, a user may decide\nto manually control the migration.\n\nThis implementation is put into the policy layer since it uses concepts and\nfunctions that are also needed for mbind and friends.  The patch also provides\na do_migrate_pages function that may be useful for cpusets to automatically\nmove memory.  sys_migrate_pages does not modify policies in contrast to Ray\u0027s\nimplementation.\n\nThe current code here is based on the swap based page migration capability and\nthus is not able to preserve the physical layout relative to it containing\nnodeset (which may be a cpuset).  When direct page migration becomes available\nthen the implementation needs to be changed to do a isomorphic move of pages\nbetween different nodesets.  The current implementation simply evicts all\npages in source nodeset that are not in the target nodeset.\n\nPatch supports ia64, i386 and x86_64.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "dc9aa5b9d65fd11b1f5246b46ec610ee8b83c6dd",
      "tree": "808da06f0bc8ab5189f1c315a2b99c85a33ed74c",
      "parents": [
        "7cbe34cf86c673503b177ff47cfa2c7030dabb50"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Sun Jan 08 01:00:50 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Jan 08 20:12:41 2006 -0800"
      },
      "message": "[PATCH] Swap Migration V5: MPOL_MF_MOVE interface\n\nAdd page migration support via swap to the NUMA policy layer\n\nThis patch adds page migration support to the NUMA policy layer.  An\nadditional flag MPOL_MF_MOVE is introduced for mbind.  If MPOL_MF_MOVE is\nspecified then pages that do not conform to the memory policy will be evicted\nfrom memory.  When they get pages back in new pages will be allocated\nfollowing the numa policy.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "4be38e351c5f455f6f490f5aff29053e33ab4f99",
      "tree": "fd7ba3678cdb5750894f58034f47076dd38c64ae",
      "parents": [
        "1a93205bdffd9d7278d4a66081cdb48452522a58"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@engr.sgi.com",
        "time": "Fri Jan 06 00:11:17 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jan 06 08:33:28 2006 -0800"
      },
      "message": "[PATCH] mm: move determination of policy_zone into page allocator\n\nCurrently the function to build a zonelist for a BIND policy has the side\neffect to set the policy_zone.  This seems to be a bit strange.  policy\nzone seems to not be initialized elsewhere and therefore 0.  Do we police\nZONE_DMA if no bind policy has been used yet?\n\nThis patch moves the determination of the zone to apply policies to into\nthe page allocator.  We determine the zone while building the zonelist for\nnodes.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "21abb1478a87e26f5fa71dbcb7cf4264272c2248",
      "tree": "01e9a76ec55975b509aa721ad7d9e9cce89d9c82",
      "parents": [
        "5da7ca86078964cbfe6c83efc1205904587706fe"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@engr.sgi.com",
        "time": "Fri Jan 06 00:10:47 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jan 06 08:33:23 2006 -0800"
      },
      "message": "[PATCH] Remove old node based policy interface from mempolicy.c\n\nmempolicy.c contains provisional interface for huge page allocation based on\nnode numbers.  This is in use in SLES9 but was never used (AFAIK) in upstream\nversions of Linux.\n\nHuge page allocations now use zonelists to figure out where to allocate pages.\n The use of zonelists allows us to find the closest hugepage which was the\nconsideration of the NUMA distance for huge page allocations.\n\nRemove the obsolete functions.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: Andi Kleen \u003cak@muc.de\u003e\nAcked-by: William Lee Irwin III \u003cwli@holomorphy.com\u003e\nCc: Adam Litke \u003cagl@us.ibm.com\u003e\nAcked-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "5da7ca86078964cbfe6c83efc1205904587706fe",
      "tree": "a64a7824e90b42d6fdd71e6cb652362beb8983a1",
      "parents": [
        "96df9333c94d7d5aeceb21f6c5e7ae8ff34753cf"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@engr.sgi.com",
        "time": "Fri Jan 06 00:10:46 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jan 06 08:33:23 2006 -0800"
      },
      "message": "[PATCH] Add NUMA policy support for huge pages.\n\nThe huge_zonelist() function in the memory policy layer provides an list of\nzones ordered by NUMA distance.  The hugetlb layer will walk that list looking\nfor a zone that has available huge pages but is also in the nodeset of the\ncurrent cpuset.\n\nThis patch does not contain the folding of find_or_alloc_huge_page() that was\ncontroversial in the earlier discussion.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: Andi Kleen \u003cak@muc.de\u003e\nAcked-by: William Lee Irwin III \u003cwli@holomorphy.com\u003e\nCc: Adam Litke \u003cagl@us.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "68860ec10bcc07ab4f89f9d940e3b77ae5ca13b3",
      "tree": "a411f9623a113d72f23da38cf2de51f66c177873",
      "parents": [
        "fb5eeeee44edb248b4837416966f19731f497f79"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Sun Oct 30 15:02:36 2005 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Oct 30 17:37:22 2005 -0800"
      },
      "message": "[PATCH] cpusets: automatic numa mempolicy rebinding\n\nThis patch automatically updates a tasks NUMA mempolicy when its cpuset\nmemory placement changes.  It does so within the context of the task,\nwithout any need to support low level external mempolicy manipulation.\n\nIf a system is not using cpusets, or if running on a system with just the\nroot (all-encompassing) cpuset, then this remap is a no-op.  Only when a\ntask is moved between cpusets, or a cpusets memory placement is changed\ndoes the following apply.  Otherwise, the main routine below,\nrebind_policy() is not even called.\n\nWhen mixing cpusets, scheduler affinity, and NUMA mempolicies, the\nessential role of cpusets is to place jobs (several related tasks) on a set\nof CPUs and Memory Nodes, the essential role of sched_setaffinity is to\nmanage a jobs processor placement within its allowed cpuset, and the\nessential role of NUMA mempolicy (mbind, set_mempolicy) is to manage a jobs\nmemory placement within its allowed cpuset.\n\nHowever, CPU affinity and NUMA memory placement are managed within the\nkernel using absolute system wide numbering, not cpuset relative numbering.\n\nThis is ok until a job is migrated to a different cpuset, or what\u0027s the\nsame, a jobs cpuset is moved to different CPUs and Memory Nodes.\n\nThen the CPU affinity and NUMA memory placement of the tasks in the job\nneed to be updated, to preserve their cpuset-relative position.  This can\nbe done for CPU affinity using sched_setaffinity() from user code, as one\ntask can modify anothers CPU affinity.  This cannot be done from an\nexternal task for NUMA memory placement, as that can only be modified in\nthe context of the task using it.\n\nHowever, it easy enough to remap a tasks NUMA mempolicy automatically when\na task is migrated, using the existing cpuset mechanism to trigger a\nrefresh of a tasks memory placement after its cpuset has changed.  All that\nis needed is the old and new nodemask, and notice to the task that it needs\nto rebind its mempolicy.  The tasks mems_allowed has the old mask, the\ntasks cpuset has the new mask, and the existing\ncpuset_update_current_mems_allowed() mechanism provides the notice.  The\nbitmap/cpumask/nodemask remap operators provide the cpuset relative\ncalculations.\n\nThis patch leaves open a couple of issues:\n\n 1) Updating vma and shmfs/tmpfs/hugetlbfs memory policies:\n\n    These mempolicies may reference nodes outside of those allowed to\n    the current task by its cpuset.  Tasks are migrated as part of jobs,\n    which reside on what might be several cpusets in a subtree.  When such\n    a job is migrated, all NUMA memory policy references to nodes within\n    that cpuset subtree should be translated, and references to any nodes\n    outside that subtree should be left untouched.  A future patch will\n    provide the cpuset mechanism needed to mark such subtrees.  With that\n    patch, we will be able to correctly migrate these other memory policies\n    across a job migration.\n\n 2) Updating cpuset, affinity and memory policies in user space:\n\n    This is harder.  Any placement state stored in user space using\n    system-wide numbering will be invalidated across a migration.  More\n    work will be required to provide user code with a migration-safe means\n    to manage its cpuset relative placement, while preserving the current\n    API\u0027s that pass system wide numbers, not cpuset relative numbers across\n    the kernel-user boundary.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "b8072f099b7829a6ff3eba618e1d079a81f753f8",
      "tree": "80bf801b68ecf5f29a61f0f4fd5976b4daa91c6a",
      "parents": [
        "f412ac08c9861b4791af0145934c22f1458686da"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh@veritas.com",
        "time": "Sat Oct 29 18:16:41 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sat Oct 29 21:40:42 2005 -0700"
      },
      "message": "[PATCH] mm: update comments to pte lock\n\nUpdated several references to page_table_lock in common code comments.\n\nSigned-off-by: Hugh Dickins \u003chugh@veritas.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "dfcd3c0dc426bb75770c34b40e14f2da8845ea62",
      "tree": "bd7e9f8463a18025c4775c6cdf22abbbd4236b64",
      "parents": [
        "e46a5e28c201f703c18b47b108bfddec44f897c4"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@suse.de",
        "time": "Sat Oct 29 18:15:48 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sat Oct 29 21:40:35 2005 -0700"
      },
      "message": "[PATCH] Convert mempolicies to nodemask_t\n\nThe NUMA policy code predated nodemask_t so it used open coded bitmaps.\nConvert everything to nodemask_t.  Big patch, but shouldn\u0027t have any actual\nbehaviour changes (except I removed one unnecessary check against\nnode_online_map and one unnecessary BUG_ON)\n\nSigned-off-by: \"Andi Kleen\" \u003cak@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "d42c69972b853fd33a26c8c7405624be41a22136",
      "tree": "2ac805f0da1279492939f8627103f5f9a040034c",
      "parents": [
        "56d8456b06ad1316bff3c75caed5e06e786f20d8"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@suse.de",
        "time": "Wed Jul 06 19:56:03 2005 +0200"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Thu Sep 08 14:57:23 2005 -0700"
      },
      "message": "[PATCH] PCI: Run PCI driver initialization on local node\n\nRun PCI driver initialization on local node\n\nInstead of adding messy kmalloc_node()s everywhere run the\nPCI driver probe on the node local to the device.\n\nThis would not have helped for IDE, but should for\nother more clean drivers that do more initialization in probe().\nIt won\u0027t help for drivers that do most of the work\non first open (like many network drivers)\n\nSigned-off-by: Andi Kleen \u003cak@suse.de\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n"
    },
    {
      "commit": "6e21c8f145f5052c1c2fb4a4b41bee01c848159b",
      "tree": "0b956cfbd67636c19be79fc0cbe0a5ed89fb6b9a",
      "parents": [
        "839b9685e80592809d6dfdd865986cd1b5ddc2fb"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@engr.sgi.com",
        "time": "Sat Sep 03 15:54:45 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@evo.osdl.org",
        "time": "Mon Sep 05 00:05:43 2005 -0700"
      },
      "message": "[PATCH] /proc/\u003cpid\u003e/numa_maps to show on which nodes pages reside\n\nThis patch was recently discussed on linux-mm:\nhttp://marc.theaimsgroup.com/?t\u003d112085728500002\u0026r\u003d1\u0026w\u003d2\n\nI inherited a large code base from Ray for page migration.  There was a\nsmall patch in there that I find to be very useful since it allows the\ndisplay of the locality of the pages in use by a process.  I reworked that\npatch and came up with a /proc/\u003cpid\u003e/numa_maps that gives more information\nabout the vma\u0027s of a process.  numa_maps is indexes by the start address\nfound in /proc/\u003cpid\u003e/maps.  F.e.  with this patch you can see the page use\nof the \"getty\" process:\n\nmargin:/proc/12008 # cat maps\n00000000-00004000 r--p 00000000 00:00 0\n2000000000000000-200000000002c000 r-xp 00000000 08:04 516                /lib/ld-2.3.3.so\n2000000000038000-2000000000040000 rw-p 00028000 08:04 516                /lib/ld-2.3.3.so\n2000000000040000-2000000000044000 rw-p 2000000000040000 00:00 0\n2000000000058000-2000000000260000 r-xp 00000000 08:04 54707842           /lib/tls/libc.so.6.1\n2000000000260000-2000000000268000 ---p 00208000 08:04 54707842           /lib/tls/libc.so.6.1\n2000000000268000-2000000000274000 rw-p 00200000 08:04 54707842           /lib/tls/libc.so.6.1\n2000000000274000-2000000000280000 rw-p 2000000000274000 00:00 0\n2000000000280000-20000000002b4000 r--p 00000000 08:04 9126923            /usr/lib/locale/en_US.utf8/LC_CTYPE\n2000000000300000-2000000000308000 r--s 00000000 08:04 60071467           /usr/lib/gconv/gconv-modules.cache\n2000000000318000-2000000000328000 rw-p 2000000000318000 00:00 0\n4000000000000000-4000000000008000 r-xp 00000000 08:04 29576399           /sbin/mingetty\n6000000000004000-6000000000008000 rw-p 00004000 08:04 29576399           /sbin/mingetty\n6000000000008000-600000000002c000 rw-p 6000000000008000 00:00 0          [heap]\n60000fff7fffc000-60000fff80000000 rw-p 60000fff7fffc000 00:00 0\n60000ffffff44000-60000ffffff98000 rw-p 60000ffffff44000 00:00 0          [stack]\na000000000000000-a000000000020000 ---p 00000000 00:00 0                  [vdso]\n\ncat numa_maps\n2000000000000000 default MaxRef\u003d43 Pages\u003d11 Mapped\u003d11 N0\u003d4 N1\u003d3 N2\u003d2 N3\u003d2\n2000000000038000 default MaxRef\u003d1 Pages\u003d2 Mapped\u003d2 Anon\u003d2 N0\u003d2\n2000000000040000 default MaxRef\u003d1 Pages\u003d1 Mapped\u003d1 Anon\u003d1 N0\u003d1\n2000000000058000 default MaxRef\u003d43 Pages\u003d61 Mapped\u003d61 N0\u003d14 N1\u003d15 N2\u003d16 N3\u003d16\n2000000000268000 default MaxRef\u003d1 Pages\u003d2 Mapped\u003d2 Anon\u003d2 N0\u003d2\n2000000000274000 default MaxRef\u003d1 Pages\u003d3 Mapped\u003d3 Anon\u003d3 N0\u003d3\n2000000000280000 default MaxRef\u003d8 Pages\u003d3 Mapped\u003d3 N0\u003d3\n2000000000300000 default MaxRef\u003d8 Pages\u003d2 Mapped\u003d2 N0\u003d2\n2000000000318000 default MaxRef\u003d1 Pages\u003d1 Mapped\u003d1 Anon\u003d1 N2\u003d1\n4000000000000000 default MaxRef\u003d6 Pages\u003d2 Mapped\u003d2 N1\u003d2\n6000000000004000 default MaxRef\u003d1 Pages\u003d1 Mapped\u003d1 Anon\u003d1 N0\u003d1\n6000000000008000 default MaxRef\u003d1 Pages\u003d1 Mapped\u003d1 Anon\u003d1 N0\u003d1\n60000fff7fffc000 default MaxRef\u003d1 Pages\u003d1 Mapped\u003d1 Anon\u003d1 N0\u003d1\n60000ffffff44000 default MaxRef\u003d1 Pages\u003d1 Mapped\u003d1 Anon\u003d1 N0\u003d1\n\ngetty uses ld.so.  The first vma is the code segment which is used by 43\nother processes and the pages are evenly distributed over the 4 nodes.\n\nThe second vma is the process specific data portion for ld.so.  This is\nonly one page.\n\nThe display format is:\n\n\u003cstartaddress\u003e\t Links to information in /proc/\u003cpid\u003e/map\n\u003cmemory policy\u003e  This can be \"default\" \"interleave\u003d{}\", \"prefer\u003d\u003cnode\u003e\" or \"bind\u003d{\u003czones\u003e}\"\nMaxRef\u003d\t\t\u003cmaximum reference to a page in this vma\u003e\nPages\u003d\t\t\u003cNr of pages in use\u003e\nMapped\u003d\t\t\u003cNr of pages with mapcount \u003e\nAnon\u003d\t\t\u003cnr of anonymous pages\u003e\nNx\u003d\t\t\u003cNr of pages on Node x\u003e\n\nThe content of the proc-file is self-evident.  If this would be tied into\nthe sparsemem system then the contents of this file would not be too\nuseful.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: Hugh Dickins \u003chugh@veritas.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
      "tree": "0bba044c4ce775e45a88a51686b5d9f90697ea9d",
      "parents": [],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:20:36 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:20:36 2005 -0700"
      },
      "message": "Linux-2.6.12-rc2\n\nInitial git repository build. I\u0027m not bothering with the full history,\neven though we have it. We can create a separate \"historical\" git\narchive of that later if we want to, and in the meantime it\u0027s about\n3.2GB when imported into git - space that would just make the early\ngit days unnecessarily complicated, when we don\u0027t have a lot of good\ninfrastructure for it.\n\nLet it rip!\n"
    }
  ]
}
