)]}'
{
  "log": [
    {
      "commit": "ecf5632dd189ab4c366cef853d6e5fe7adfe52e5",
      "tree": "947ae7edf45415753e960d53957ae3a4121fb3b8",
      "parents": [
        "27eaa1c90c608aa907336c2743d5ecf35c469440"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Sun Jan 16 23:28:17 2011 +0900"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jan 17 08:21:42 2011 -0500"
      },
      "message": "fs: fix address space warnings in ioctl_fiemap()\n\nThe fi_extents_start field of struct fiemap_extent_info is a\nuser pointer but was not marked as __user. This makes sparse\nemit following warnings:\n\n  CHECK   fs/ioctl.c\nfs/ioctl.c:114:26: warning: incorrect type in argument 1 (different address spaces)\nfs/ioctl.c:114:26:    expected void [noderef] \u003casn:1\u003e*dst\nfs/ioctl.c:114:26:    got struct fiemap_extent *[assigned] dest\nfs/ioctl.c:202:14: warning: incorrect type in argument 1 (different address spaces)\nfs/ioctl.c:202:14:    expected void const volatile [noderef] \u003casn:1\u003e*\u003cnoident\u003e\nfs/ioctl.c:202:14:    got struct fiemap_extent *[assigned] fi_extents_start\nfs/ioctl.c:212:27: warning: incorrect type in argument 1 (different address spaces)\nfs/ioctl.c:212:27:    expected void [noderef] \u003casn:1\u003e*dst\nfs/ioctl.c:212:27:    got char *\u003cnoident\u003e\n\nAlso add \u0027ufiemap\u0027 variable to eliminate unnecessary casts.\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "c2b3e74b78b24cb367289a75a2bd30e569e56e0e",
      "tree": "1ae2e53e0aa3831486afd2ec8c71a8cd32535b1b",
      "parents": [
        "2fe17c1075836b66678ed2a305fd09b6773883aa"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Mon Dec 13 19:38:08 2010 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jan 17 03:26:26 2011 -0500"
      },
      "message": "fs: Remove unlikely() from fput_light()\n\nIn fput_light(), there\u0027s an unlikely(fput_needed), which running on\nmy normal desktop doing firefox, xchat, evolution and part of my distcc farm,\nand running the annotate branch profiler shows that the unlikely is not\nvery unlikely.\n\n correct incorrect  %        Function             File              Line\n ------- ---------  -        --------             ----              ----\n       0       48 100 fput_light                file.h               26\n115828710 897415279  88 fput_light              file.h               26\n865271179 5286128445  85 fput_light             file.h               26\n19568539  8923664  31 fput_light                file.h               26\n12353677  3562279  22 fput_light                file.h               26\n  267691    67062  20 fput_light                file.h               26\n15014853   348172   2 fput_light                file.h               26\n  209258      205   0 fput_light                file.h               26\n 1364164        0   0 fput_light                file.h               26\n\nWhich gives 1032903812 times it was correct and 6203351846 times it was\nincorrect, or 85% incorrect.\n\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "2fe17c1075836b66678ed2a305fd09b6773883aa",
      "tree": "eb5287be8138686682eef9622872cfc7657e0664",
      "parents": [
        "64c23e86873ee410554d6d1c76b60da47025e96f"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Fri Jan 14 13:07:43 2011 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jan 17 02:25:31 2011 -0500"
      },
      "message": "fallocate should be a file operation\n\nCurrently all filesystems except XFS implement fallocate asynchronously,\nwhile XFS forced a commit.  Both of these are suboptimal - in case of O_SYNC\nI/O we really want our allocation on disk, especially for the !KEEP_SIZE\ncase where we actually grow the file with user-visible zeroes.  On the\nother hand always commiting the transaction is a bad idea for fast-path\nuses of fallocate like for example in recent Samba versions.   Given\nthat block allocation is a data plane operation anyway change it from\nan inode operation to a file operation so that we have the file structure\navailable that lets us check for O_SYNC.\n\nThis also includes moving the code around for a few of the filesystems,\nand remove the already unnedded S_ISDIR checks given that we only wire\nup fallocate for regular files.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "b3697c0255d9d73eaaa4deb4512e3f0ff97b3b71",
      "tree": "59f7c5aa4c6ac509381071997f0888e2687cebd5",
      "parents": [
        "7e3d0eb0b028ed9e9384e6afcae2f22993bbdf25"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Sun Jan 16 13:10:39 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Jan 16 15:05:44 2011 -0800"
      },
      "message": "fix non-x86 build failure in pmdp_get_and_clear\n\npmdp_get_and_clear/pmdp_clear_flush/pmdp_splitting_flush were trapped as\nBUG() and they were defined only to diminish the risk of build issues on\nnot-x86 archs and to be consistent with the generic pte methods previously\ndefined in include/asm-generic/pgtable.h.\n\nBut they are causing more trouble than they were supposed to solve, so\nit\u0027s simpler not to define them when THP is off.\n\nThis is also correcting the export of pmdp_splitting_flush which is\ncurrently unused (x86 isn\u0027t using the generic implementation in\nmm/pgtable-generic.c and no other arch needs that [yet]).\n\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nSam Ravnborg \u003csam@ravnborg.org\u003e\nCc: Stephen Rothwell \u003csfr@canb.auug.org.au\u003e\nCc: \"David S. Miller\" \u003cdavem@davemloft.net\u003e\nCc: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nCc: \"Luck, Tony\" \u003ctony.luck@intel.com\u003e\nCc: James Bottomley \u003cJames.Bottomley@HansenPartnership.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "fc8fe1e992ae0326a88edbe4d6793e840bbdd4ff",
      "tree": "40eb3f1660898b9261219c0c256f569f0258a953",
      "parents": [
        "f8206b925fb0eba3a11839419be118b09105d7b1"
      ],
      "author": {
        "name": "Rafael J. Wysocki",
        "email": "rjw@sisk.pl",
        "time": "Sun Jan 16 20:42:43 2011 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Jan 16 11:56:26 2011 -0800"
      },
      "message": "PCI / ACPI: Fix build of the AER driver for CONFIG_ACPI unset\n\nAfter commit 415e12b23792 (\"PCI/ACPI: Request _OSC control once for each\nroot bridge (v3)\") include/linux/pci-acpi.h is included by\ndrivers/pci/pcie/aer/aerdrv.c and if CONFIG_ACPI is unset, the bogus and\nunnecessary alternative definition of acpi_find_root_bridge_handle()\ncauses a build error to occur.\n\nRemove the offending piece of garbage.\n\nReported-and-tested-by: Stephen Rothwell \u003csfr@canb.auug.org.au\u003e\nSigned-off-by: Rafael J. Wysocki \u003crjw@sisk.pl\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f8206b925fb0eba3a11839419be118b09105d7b1",
      "tree": "5d41b356a043da09c816ed80bd79d1ea8b2b47e5",
      "parents": [
        "1b59be2a6cdcb5a12e18d8315c07c94a624de48f",
        "f03c65993b98eeb909a4012ce7833c5857d74755"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Jan 16 11:31:50 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Jan 16 11:31:50 2011 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6: (23 commits)\n  sanitize vfsmount refcounting changes\n  fix old umount_tree() breakage\n  autofs4: Merge the remaining dentry ops tables\n  Unexport do_add_mount() and add in follow_automount(), not -\u003ed_automount()\n  Allow d_manage() to be used in RCU-walk mode\n  Remove a further kludge from __do_follow_link()\n  autofs4: Bump version\n  autofs4: Add v4 pseudo direct mount support\n  autofs4: Fix wait validation\n  autofs4: Clean up autofs4_free_ino()\n  autofs4: Clean up dentry operations\n  autofs4: Clean up inode operations\n  autofs4: Remove unused code\n  autofs4: Add d_manage() dentry operation\n  autofs4: Add d_automount() dentry operation\n  Remove the automount through follow_link() kludge code from pathwalk\n  CIFS: Use d_automount() rather than abusing follow_link()\n  NFS: Use d_automount() rather than abusing follow_link()\n  AFS: Use d_automount() rather than abusing follow_link()\n  Add an AT_NO_AUTOMOUNT flag to suppress terminal automount\n  ...\n"
    },
    {
      "commit": "f03c65993b98eeb909a4012ce7833c5857d74755",
      "tree": "a6dd5e353889b7fe4ab87c54170d09443d788fec",
      "parents": [
        "7b8a53fd815deb39542085897743fa0063f9fe06"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Jan 14 22:30:21 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Jan 16 13:47:07 2011 -0500"
      },
      "message": "sanitize vfsmount refcounting changes\n\nInstead of splitting refcount between (per-cpu) mnt_count\nand (SMP-only) mnt_longrefs, make all references contribute\nto mnt_count again and keep track of how many are longterm\nones.\n\nAccounting rules for longterm count:\n\t* 1 for each fs_struct.root.mnt\n\t* 1 for each fs_struct.pwd.mnt\n\t* 1 for having non-NULL -\u003emnt_ns\n\t* decrement to 0 happens only under vfsmount lock exclusive\n\nThat allows nice common case for mntput() - since we can\u0027t drop the\nfinal reference until after mnt_longterm has reached 0 due to the rules\nabove, mntput() can grab vfsmount lock shared and check mnt_longterm.\nIf it turns out to be non-zero (which is the common case), we know\nthat this is not the final mntput() and can just blindly decrement\npercpu mnt_count.  Otherwise we grab vfsmount lock exclusive and\ndo usual decrement-and-check of percpu mnt_count.\n\nFor fs_struct.c we have mnt_make_longterm() and mnt_make_shortterm();\nnamespace.c uses the latter in places where we don\u0027t already hold\nvfsmount lock exclusive and opencodes a few remaining spots where\nwe need to manipulate mnt_longterm.\n\nNote that we mostly revert the code outside of fs/namespace.c back\nto what we used to have; in particular, normal code doesn\u0027t need\nto care about two kinds of references, etc.  And we get to keep\nthe optimization Nick\u0027s variant had bought us...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "ea5b778a8b98c85a87d66bf844904f9c3802b869",
      "tree": "baa56cbe1a907d76341f2cad53e16569cc1d3288",
      "parents": [
        "ab90911ff90cdab59b31c045c3f0ae480d14f29d"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Jan 14 19:10:03 2011 +0000"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Jan 15 20:07:48 2011 -0500"
      },
      "message": "Unexport do_add_mount() and add in follow_automount(), not -\u003ed_automount()\n\nUnexport do_add_mount() and make -\u003ed_automount() return the vfsmount to be\nadded rather than calling do_add_mount() itself.  follow_automount() will then\ndo the addition.\n\nThis slightly complicates things as -\u003ed_automount() normally wants to add the\nnew vfsmount to an expiration list and start an expiration timer.  The problem\nwith that is that the vfsmount will be deleted if it has a refcount of 1 and\nthe timer will not repeat if the expiration list is empty.\n\nTo this end, we require the vfsmount to be returned from d_automount() with a\nrefcount of (at least) 2.  One of these refs will be dropped unconditionally.\nIn addition, follow_automount() must get a 3rd ref around the call to\ndo_add_mount() lest it eat a ref and return an error, leaving the mount we\nhave open to being expired as we would otherwise have only 1 ref on it.\n\nd_automount() should also add the the vfsmount to the expiration list (by\ncalling mnt_set_expiry()) and start the expiration timer before returning, if\nthis mechanism is to be used.  The vfsmount will be unlinked from the\nexpiration list by follow_automount() if do_add_mount() fails.\n\nThis patch also fixes the call to do_add_mount() for AFS to propagate the mount\nflags from the parent vfsmount.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "ab90911ff90cdab59b31c045c3f0ae480d14f29d",
      "tree": "683450a66eb9dc6bf053e38d63f4740bb53a7b6e",
      "parents": [
        "87556ef19926e97464e0163a7840140527ae6615"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Jan 14 18:46:51 2011 +0000"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Jan 15 20:07:47 2011 -0500"
      },
      "message": "Allow d_manage() to be used in RCU-walk mode\n\nAllow d_manage() to be called from pathwalk when it is in RCU-walk mode as well\nas when it is in Ref-walk mode.  This permits __follow_mount_rcu() to call\nd_manage() directly.  d_manage() needs a parameter to indicate that it is in\nRCU-walk mode as it isn\u0027t allowed to sleep if in that mode (but should return\n-ECHILD instead).\n\nautofs4_d_manage() can then be set to retain RCU-walk mode if the daemon\naccesses it and otherwise request dropping back to ref-walk mode.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "1972580bb4edea3ed6fe273b2ca72f44f10f8c86",
      "tree": "9c8e34448ed30e040dcdb18b5b92ec663baa0750",
      "parents": [
        "dd89f90d2deb9aa5bc8e1b15d726ff5c0bb2b623"
      ],
      "author": {
        "name": "Ian Kent",
        "email": "raven@themaw.net",
        "time": "Fri Jan 14 18:46:40 2011 +0000"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Jan 15 20:07:45 2011 -0500"
      },
      "message": "autofs4: Bump version\n\nIncrease the autofs module sub-version so we can tell what kernel\nimplementation is being used from user space debug logging.\n\nSigned-off-by: Ian Kent \u003craven@themaw.net\u003e\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "36d43a43761b004ad1879ac21471d8fc5f3157ec",
      "tree": "6cb6c6d978f4e58de7f9bf901707d6929f098345",
      "parents": [
        "d18610b0ce9eb48c60649d8fcbf68374c84349d3"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Jan 14 18:45:42 2011 +0000"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Jan 15 20:07:34 2011 -0500"
      },
      "message": "NFS: Use d_automount() rather than abusing follow_link()\n\nMake NFS use the new d_automount() dentry operation rather than abusing\nfollow_link() on directories.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nAcked-by: Ian Kent \u003craven@themaw.net\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "6f45b65672c8017d5e210e338bb5858a938ef445",
      "tree": "b62877c489fb682033c37d30d91c53e4d0c3833a",
      "parents": [
        "cc53ce53c86924bfe98a12ea20b7465038a08792"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Jan 14 18:45:31 2011 +0000"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Jan 15 20:07:33 2011 -0500"
      },
      "message": "Add an AT_NO_AUTOMOUNT flag to suppress terminal automount\n\nAdd an AT_NO_AUTOMOUNT flag to suppress terminal automounting of automount\npoint directories.  This can be used by fstatat() users to permit the\ngathering of attributes on an automount point and also prevent\nmass-automounting of a directory of automount points by ls.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Ian Kent \u003craven@themaw.net\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "cc53ce53c86924bfe98a12ea20b7465038a08792",
      "tree": "3c9a4923dd9f413c46bfa83a20cb579446df6deb",
      "parents": [
        "9875cf806403fae66b2410a3c2cc820d97731e04"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Jan 14 18:45:26 2011 +0000"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Jan 15 20:07:31 2011 -0500"
      },
      "message": "Add a dentry op to allow processes to be held during pathwalk transit\n\nAdd a dentry op (d_manage) to permit a filesystem to hold a process and make it\nsleep when it tries to transit away from one of that filesystem\u0027s directories\nduring a pathwalk.  The operation is keyed off a new dentry flag\n(DCACHE_MANAGE_TRANSIT).\n\nThe filesystem is allowed to be selective about which processes it holds and\nwhich it permits to continue on or prohibits from transiting from each flagged\ndirectory.  This will allow autofs to hold up client processes whilst letting\nits userspace daemon through to maintain the directory or the stuff behind it\nor mounted upon it.\n\nThe -\u003ed_manage() dentry operation:\n\n\tint (*d_manage)(struct path *path, bool mounting_here);\n\ntakes a pointer to the directory about to be transited away from and a flag\nindicating whether the transit is undertaken by do_add_mount() or\ndo_move_mount() skipping through a pile of filesystems mounted on a mountpoint.\n\nIt should return 0 if successful and to let the process continue on its way;\n-EISDIR to prohibit the caller from skipping to overmounted filesystems or\nautomounting, and to use this directory; or some other error code to return to\nthe user.\n\n-\u003ed_manage() is called with namespace_sem writelocked if mounting_here is true\nand no other locks held, so it may sleep.  However, if mounting_here is true,\nit may not initiate or wait for a mount or unmount upon the parameter\ndirectory, even if the act is actually performed by userspace.\n\nWithin fs/namei.c, follow_managed() is extended to check with d_manage() first\non each managed directory, before transiting away from it or attempting to\nautomount upon it.\n\nfollow_down() is renamed follow_down_one() and should only be used where the\nfilesystem deliberately intends to avoid management steps (e.g. autofs).\n\nA new follow_down() is added that incorporates the loop done by all other\ncallers of follow_down() (do_add/move_mount(), autofs and NFSD; whilst AFS, NFS\nand CIFS do use it, their use is removed by converting them to use\nd_automount()).  The new follow_down() calls d_manage() as appropriate.  It\nalso takes an extra parameter to indicate if it is being called from mount code\n(with namespace_sem writelocked) which it passes to d_manage().  follow_down()\nignores automount points so that it can be used to mount on them.\n\n__follow_mount_rcu() is made to abort rcu-walk mode if it hits a directory with\nDCACHE_MANAGE_TRANSIT set on the basis that we\u0027re probably going to have to\nsleep.  It would be possible to enter d_manage() in rcu-walk mode too, and have\nthat determine whether to abort or not itself.  That would allow the autofs\ndaemon to continue on in rcu-walk mode.\n\nNote that DCACHE_MANAGE_TRANSIT on a directory should be cleared when it isn\u0027t\nrequired as every tranist from that directory will cause d_manage() to be\ninvoked.  It can always be set again when necessary.\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\nWHAT THIS MEANS FOR AUTOFS\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\n\nAutofs currently uses the lookup() inode op and the d_revalidate() dentry op to\ntrigger the automounting of indirect mounts, and both of these can be called\nwith i_mutex held.\n\nautofs knows that the i_mutex will be held by the caller in lookup(), and so\ncan drop it before invoking the daemon - but this isn\u0027t so for d_revalidate(),\nsince the lock is only held on _some_ of the code paths that call it.  This\nmeans that autofs can\u0027t risk dropping i_mutex from its d_revalidate() function\nbefore it calls the daemon.\n\nThe bug could manifest itself as, for example, a process that\u0027s trying to\nvalidate an automount dentry that gets made to wait because that dentry is\nexpired and needs cleaning up:\n\n\tmkdir         S ffffffff8014e05a     0 32580  24956\n\tCall Trace:\n\t [\u003cffffffff885371fd\u003e] :autofs4:autofs4_wait+0x674/0x897\n\t [\u003cffffffff80127f7d\u003e] avc_has_perm+0x46/0x58\n\t [\u003cffffffff8009fdcf\u003e] autoremove_wake_function+0x0/0x2e\n\t [\u003cffffffff88537be6\u003e] :autofs4:autofs4_expire_wait+0x41/0x6b\n\t [\u003cffffffff88535cfc\u003e] :autofs4:autofs4_revalidate+0x91/0x149\n\t [\u003cffffffff80036d96\u003e] __lookup_hash+0xa0/0x12f\n\t [\u003cffffffff80057a2f\u003e] lookup_create+0x46/0x80\n\t [\u003cffffffff800e6e31\u003e] sys_mkdirat+0x56/0xe4\n\nversus the automount daemon which wants to remove that dentry, but can\u0027t\nbecause the normal process is holding the i_mutex lock:\n\n\tautomount     D ffffffff8014e05a     0 32581      1              32561\n\tCall Trace:\n\t [\u003cffffffff80063c3f\u003e] __mutex_lock_slowpath+0x60/0x9b\n\t [\u003cffffffff8000ccf1\u003e] do_path_lookup+0x2ca/0x2f1\n\t [\u003cffffffff80063c89\u003e] .text.lock.mutex+0xf/0x14\n\t [\u003cffffffff800e6d55\u003e] do_rmdir+0x77/0xde\n\t [\u003cffffffff8005d229\u003e] tracesys+0x71/0xe0\n\t [\u003cffffffff8005d28d\u003e] tracesys+0xd5/0xe0\n\nwhich means that the system is deadlocked.\n\nThis patch allows autofs to hold up normal processes whilst the daemon goes\nahead and does things to the dentry tree behind the automouter point without\nrisking a deadlock as almost no locks are held in d_manage() and none in\nd_automount().\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nWas-Acked-by: Ian Kent \u003craven@themaw.net\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "9875cf806403fae66b2410a3c2cc820d97731e04",
      "tree": "6f9546b400716766af95e0f78e3d600e765b2b51",
      "parents": [
        "1a8edf40e7c3eee955e0dd0316a7c9d85e36f597"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Jan 14 18:45:21 2011 +0000"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Jan 15 20:05:03 2011 -0500"
      },
      "message": "Add a dentry op to handle automounting rather than abusing follow_link()\n\nAdd a dentry op (d_automount) to handle automounting directories rather than\nabusing the follow_link() inode operation.  The operation is keyed off a new\ndentry flag (DCACHE_NEED_AUTOMOUNT).\n\nThis also makes it easier to add an AT_ flag to suppress terminal segment\nautomount during pathwalk and removes the need for the kludge code in the\npathwalk algorithm to handle directories with follow_link() semantics.\n\nThe -\u003ed_automount() dentry operation:\n\n\tstruct vfsmount *(*d_automount)(struct path *mountpoint);\n\ntakes a pointer to the directory to be mounted upon, which is expected to\nprovide sufficient data to determine what should be mounted.  If successful, it\nshould return the vfsmount struct it creates (which it should also have added\nto the namespace using do_add_mount() or similar).  If there\u0027s a collision with\nanother automount attempt, NULL should be returned.  If the directory specified\nby the parameter should be used directly rather than being mounted upon,\n-EISDIR should be returned.  In any other case, an error code should be\nreturned.\n\nThe -\u003ed_automount() operation is called with no locks held and may sleep.  At\nthis point the pathwalk algorithm will be in ref-walk mode.\n\nWithin fs/namei.c itself, a new pathwalk subroutine (follow_automount()) is\nadded to handle mountpoints.  It will return -EREMOTE if the automount flag was\nset, but no d_automount() op was supplied, -ELOOP if we\u0027ve encountered too many\nsymlinks or mountpoints, -EISDIR if the walk point should be used without\nmounting and 0 if successful.  The path will be updated to point to the mounted\nfilesystem if a successful automount took place.\n\n__follow_mount() is replaced by follow_managed() which is more generic\n(especially with the patch that adds -\u003ed_manage()).  This handles transits from\ndirectories during pathwalk, including automounting and skipping over\nmountpoints (and holding processes with the next patch).\n\n__follow_mount_rcu() will jump out of RCU-walk mode if it encounters an\nautomount point with nothing mounted on it.\n\nfollow_dotdot*() does not handle automounts as you don\u0027t want to trigger them\nwhilst following \"..\".\n\nI\u0027ve also extracted the mount/don\u0027t-mount logic from autofs4 and included it\nhere.  It makes the mount go ahead anyway if someone calls open() or creat(),\ntries to traverse the directory, tries to chdir/chroot/etc. into the directory,\nor sticks a \u0027/\u0027 on the end of the pathname.  If they do a stat(), however,\nthey\u0027ll only trigger the automount if they didn\u0027t also say O_NOFOLLOW.\n\nI\u0027ve also added an inode flag (S_AUTOMOUNT) so that filesystems can mark their\ninodes as automount points.  This flag is automatically propagated to the\ndentry as DCACHE_NEED_AUTOMOUNT by __d_instantiate().  This saves NFS and could\nsave AFS a private flag bit apiece, but is not strictly necessary.  It would be\npreferable to do the propagation in d_set_d_op(), but that doesn\u0027t normally\nhave access to the inode.\n\n[AV: fixed breakage in case if __follow_mount_rcu() fails and nameidata_drop_rcu()\nsucceeds in RCU case of do_lookup(); we need to fall through to non-RCU case after\nthat, rather than just returning with ungrabbed *path]\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nWas-Acked-by: Ian Kent \u003craven@themaw.net\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "1b59be2a6cdcb5a12e18d8315c07c94a624de48f",
      "tree": "5cf48d9f94d85e9b1f984610b6868ad100ca1916",
      "parents": [
        "f9ee7f60d6f37ae0184812b4c59b3869f875768b",
        "2ed1c5257b5d669df2a64bd53e61dc19c7d936cd"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Jan 15 13:01:14 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Jan 15 13:01:14 2011 -0800"
      },
      "message": "Merge branch \u0027slab/urgent\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/penberg/slab-2.6\n\n* \u0027slab/urgent\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/penberg/slab-2.6:\n  Update Pekka\u0027s email address in MAINTAINERS\n  mm/slab.c: make local symbols static\n  slub: Avoid use of slub_lock in show_slab_objects()\n  memory hotplug: one more lock on memory hotplug\n"
    },
    {
      "commit": "f9ee7f60d6f37ae0184812b4c59b3869f875768b",
      "tree": "6c30a7e94b90cfa3a43cda45f4bdb2f254f3ba10",
      "parents": [
        "16c1020362083b320868c0deef492249089c3cd3",
        "1161ec944916069ceec21c487e30247d9ff22857",
        "76d1f7bfcd5872056902c5a88b5fcd5d4d00a7a9",
        "afa14e7c553ebe45844d76208f66017a43abd0e2",
        "7c46d8da09df22361d1d43465c4f1b06cecaf25f"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Jan 15 12:45:00 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Jan 15 12:45:00 2011 -0800"
      },
      "message": "Merge branches \u0027core-fixes-for-linus\u0027, \u0027x86-fixes-for-linus\u0027, \u0027timers-fixes-for-linus\u0027 and \u0027perf-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  rcu: avoid pointless blocked-task warnings\n  rcu: demote SRCU_SYNCHRONIZE_DELAY from kernel-parameter status\n  rtmutex: Fix comment about why new_owner can be NULL in wake_futex_pi()\n\n* \u0027x86-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:\n  x86, olpc: Add missing Kconfig dependencies\n  x86, mrst: Set correct APB timer IRQ affinity for secondary cpu\n  x86: tsc: Fix calibration refinement conditionals to avoid divide by zero\n  x86, ia64, acpi: Clean up x86-ism in drivers/acpi/numa.c\n\n* \u0027timers-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:\n  timekeeping: Make local variables static\n  time: Rename misnamed minsec argument of clocks_calc_mult_shift()\n\n* \u0027perf-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:\n  tracing: Remove syscall_exit_fields\n  tracing: Only process module tracepoints once\n  perf record: Add \"nodelay\" mode, disabled by default\n  perf sched: Fix list of events, dropping unsupported \u0027:r\u0027 modifier\n  Revert \"perf tools: Emit clearer message for sys_perf_event_open ENOENT return\"\n  perf top: Fix annotate segv\n  perf evsel: Fix order of event list deletion\n"
    },
    {
      "commit": "597fb188cbee2d371246e1669bbc6051bb666aa9",
      "tree": "fd9cb605050ca15274cf391dc6bd4073d04808df",
      "parents": [
        "38567333a6dabd0f2b4150e9fb6dd8e3ba2985e5",
        "04d94879c8a4973b5499dc26b9d38acee8928791"
      ],
      "author": {
        "name": "Pekka Enberg",
        "email": "penberg@kernel.org",
        "time": "Sat Jan 15 13:28:17 2011 +0200"
      },
      "committer": {
        "name": "Pekka Enberg",
        "email": "penberg@kernel.org",
        "time": "Sat Jan 15 13:28:17 2011 +0200"
      },
      "message": "Merge branch \u0027slub/hotplug\u0027 into slab/urgent\n"
    },
    {
      "commit": "38567333a6dabd0f2b4150e9fb6dd8e3ba2985e5",
      "tree": "1101e3df845ce804035335f80ef3467397bd5373",
      "parents": [
        "de23be5f3580f7b9b52cad6633bb3a3cd13abafe",
        "c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 14 16:29:49 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 14 16:29:49 2011 -0800"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-post-merge-2.6\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-post-merge-2.6:\n  [SCSI] target: Add LIO target core v4.0.0-rc6\n  [SCSI] sd,sr: kill compat SDEV_MEDIA_CHANGE event\n  [SCSI] sd: implement sd_check_events()\n"
    },
    {
      "commit": "3632ef8909118db9584e1bed9538dc180adb32f8",
      "tree": "033925e11aef3c700492b4da0a1332f710de1299",
      "parents": [
        "8473dbb43db92fa8de7c24d1973aaf1e0276a89f"
      ],
      "author": {
        "name": "Dave Airlie",
        "email": "airlied@redhat.com",
        "time": "Sat Jan 15 09:27:00 2011 +1000"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 14 16:10:28 2011 -0800"
      },
      "message": "Revert \"drm: Update fbdev fb_fix_screeninfo\"\n\nThis reverts commit dfe63bb0ad9810db13aab0058caba97866e0a681.\n\nThis commit was causing nouveau not to work properly, for -rc1 I\u0027d\nprefer it worked and we can look if this is useful for 2.6.39.\n\nCc: James Simmons \u003cjsimmons@infradead.org\u003e\nSigned-off-by: Dave Airlie \u003cairlied@redhat.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ab0724ffee24409a7f81afb539b2ac29090bff3e",
      "tree": "8d0611d921494af2477d517f4f8a331150bf328d",
      "parents": [
        "9a1fe2f27f71dd275caf2be5be2fa59bd2a3f8d4"
      ],
      "author": {
        "name": "Markus Trippelsdorf",
        "email": "markus@trippelsdorf.de",
        "time": "Sat Jan 15 00:07:22 2011 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 14 15:23:25 2011 -0800"
      },
      "message": "PCI / ACPI: Fix build issue in pci_root.c for !CONFIG_PCIEPORTBUS\n\nThe compilation of drivers/acpi/pci_root.c fails if\nCONFIG_PCIEPORTBUS is unset.  Fix the problem.\n\nSigned-off-by: Rafael J. Wysocki \u003crjw@sisk.pl\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6ab82196492a0b6968a654a06aae923b28afef0d",
      "tree": "8affe1097bba194fe677d5399f47693dc0363dd8",
      "parents": [
        "6f7f7caab259026234277b659485d22c1dcb1ab4",
        "49731baa41df404c2c3f44555869ab387363af43"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 14 13:32:07 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 14 13:32:07 2011 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-linus\u0027 of git://git.kernel.dk/linux-2.6-block:\n  block: restore multiple bd_link_disk_holder() support\n  block cfq: compensate preempted queue even if it has no slice assigned\n  block cfq: make queue preempt work for queues from different workload\n"
    },
    {
      "commit": "d018b6f4f1539f3679fbdc2d02d58d09e76be84a",
      "tree": "317b9e04d8e7a73a4d07c69a5cb5455ec34f47e5",
      "parents": [
        "18bce371ae09af6c20ee62c1092a4d1d0e84dd49",
        "0f73f2c5a3ebb957ee66718c903c17ed71a4fc2e"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 14 13:25:30 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 14 13:25:30 2011 -0800"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (47 commits)\n  GRETH: resolve SMP issues and other problems\n  GRETH: handle frame error interrupts\n  GRETH: avoid writing bad speed/duplex when setting transfer mode\n  GRETH: fixed skb buffer memory leak on frame errors\n  GRETH: GBit transmit descriptor handling optimization\n  GRETH: fix opening/closing\n  GRETH: added raw AMBA vendor/device number to match against.\n  cassini: Fix build bustage on x86.\n  e1000e: consistent use of Rx/Tx vs. RX/TX/rx/tx in comments/logs\n  e1000e: update Copyright for 2011\n  e1000: Avoid unhandled IRQ\n  r8169: keep firmware in memory.\n  netdev: tilepro: Use is_unicast_ether_addr helper\n  etherdevice.h: Add is_unicast_ether_addr function\n  ks8695net: Use default implementation of ethtool_ops::get_link\n  ks8695net: Disable non-working ethtool operations\n  USB CDC NCM: Don\u0027t deref NULL in cdc_ncm_rx_fixup() and don\u0027t use uninitialized variable.\n  vxge: Remember to release firmware after upgrading firmware\n  netdev: bfin_mac: Remove is_multicast_ether_addr use in netdev_for_each_mc_addr\n  ipsec: update MAX_AH_AUTH_LEN to support sha512\n  ...\n"
    },
    {
      "commit": "18bce371ae09af6c20ee62c1092a4d1d0e84dd49",
      "tree": "f3467fafd8e49392e3f6efef7b88a7b4dd3b7b06",
      "parents": [
        "ec08bdb148767f1193f5f3028749ed865ac27181",
        "a8f2800b4f7b76cecb7209cb6a7d2b14904fc711"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 14 13:17:26 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 14 13:17:26 2011 -0800"
      },
      "message": "Merge branch \u0027for-2.6.38\u0027 of git://linux-nfs.org/~bfields/linux\n\n* \u0027for-2.6.38\u0027 of git://linux-nfs.org/~bfields/linux: (62 commits)\n  nfsd4: fix callback restarting\n  nfsd: break lease on unlink, link, and rename\n  nfsd4: break lease on nfsd setattr\n  nfsd: don\u0027t support msnfs export option\n  nfsd4: initialize cb_per_client\n  nfsd4: allow restarting callbacks\n  nfsd4: simplify nfsd4_cb_prepare\n  nfsd4: give out delegations more quickly in 4.1 case\n  nfsd4: add helper function to run callbacks\n  nfsd4: make sure sequence flags are set after destroy_session\n  nfsd4: re-probe callback on connection loss\n  nfsd4: set sequence flag when backchannel is down\n  nfsd4: keep finer-grained callback status\n  rpc: allow xprt_class-\u003esetup to return a preexisting xprt\n  rpc: keep backchannel xprt as long as server connection\n  rpc: move sk_bc_xprt to svc_xprt\n  nfsd4: allow backchannel recovery\n  nfsd4: support BIND_CONN_TO_SESSION\n  nfsd4: modify session list under cl_lock\n  Documentation: fl_mylease no longer exists\n  ...\n\nFix up conflicts in fs/nfsd/vfs.c with the vfs-scale work.  The\nvfs-scale work touched some msnfs cases, and this merge removes support\nfor that entirely, so the conflict was trivial to resolve.\n"
    },
    {
      "commit": "49731baa41df404c2c3f44555869ab387363af43",
      "tree": "5d3476368fa546aebb1c223e9cf1bab5ad80f698",
      "parents": [
        "c553f8e335c00a7cff3ab3f13e793b13d3f2207f"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jan 14 18:43:57 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jan 14 18:44:22 2011 +0100"
      },
      "message": "block: restore multiple bd_link_disk_holder() support\n\nCommit e09b457b (block: simplify holder symlink handling) incorrectly\nassumed that there is only one link at maximum.  dm may use multiple\nlinks and expects block layer to track reference count for each link,\nwhich is different from and unrelated to the exclusive device holder\nidentified by @holder when the device is opened.\n\nRemove the single holder assumption and automatic removal of the link\nand revive the per-link reference count tracking.  The code\nessentially behaves the same as before commit e09b457b sans the\nunnecessary kobject reference count dancing.\n\nWhile at it, note that this facility should not be used by anyone else\nthan the current ones.  Sysfs symlinks shouldn\u0027t be abused like this\nand the whole thing doesn\u0027t belong in the block layer at all.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Milan Broz \u003cmbroz@redhat.com\u003e\nCc: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nCc: Neil Brown \u003cneilb@suse.de\u003e\nCc: linux-raid@vger.kernel.org\nCc: Kay Sievers \u003ckay.sievers@vrfy.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "d73b388459b1ee2e80f8ff9c1916d75640d7d920",
      "tree": "3e4061226f817c5728009f0bcc1d810d0c4a7b37",
      "parents": [
        "5957e33d6aec266659a71cfabcf7cf2c593ad0d2",
        "0f953bf6b4efa0daddb7c418130a9bd3ee97f7ed"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 14 09:29:05 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 14 09:29:05 2011 -0800"
      },
      "message": "Merge branch \u0027linux-next\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci-2.6\n\n* \u0027linux-next\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci-2.6:\n  PCI/PM: Report wakeup events before resuming devices\n  PCI/PM: Use pm_wakeup_event() directly for reporting wakeup events\n  PCI: sysfs: Update ROM to include default owner write access\n  x86/PCI: make Broadcom CNB20LE driver EMBEDDED and EXPERIMENTAL\n  x86/PCI: don\u0027t use native Broadcom CNB20LE driver when ACPI is available\n  PCI/ACPI: Request _OSC control once for each root bridge (v3)\n  PCI: enable pci\u003dbfsort by default on future Dell systems\n  PCI/PCIe: Clear Root PME Status bits early during system resume\n  PCI: pci-stub: ignore zero-length id parameters\n  x86/PCI: irq and pci_ids patch for Intel Patsburg\n  PCI: Skip id checking if no id is passed\n  PCI: fix __pci_device_probe kernel-doc warning\n  PCI: make pci_restore_state return void\n  PCI: Disable ASPM if BIOS asks us to\n  PCI: Add mask bit definition for MSI-X table\n  PCI: MSI: Move MSI-X entry definition to pci_regs.h\n\nFix up trivial conflicts in drivers/net/{skge.c,sky2.c} that had in the\nmeantime been converted to not use legacy PCI power management, and thus\nno longer use pci_restore_state() at all (and that caused trivial\nconflicts with the \"make pci_restore_state return void\" patch)\n"
    },
    {
      "commit": "5957e33d6aec266659a71cfabcf7cf2c593ad0d2",
      "tree": "6397dec8d71e4ed4f5982792c57d7c0ddb525d1e",
      "parents": [
        "0ad53eeefcbb2620b6a71ffdaad4add20b450b8b",
        "359ab9f5b154cbd807a11e22792235f0f36b0cd5"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 14 09:25:59 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 14 09:25:59 2011 -0800"
      },
      "message": "Merge git://git.infradead.org/battery-2.6\n\n* git://git.infradead.org/battery-2.6: (21 commits)\n  power_supply: Add MAX17042 Fuel Gauge Driver\n  olpc_battery: Fix up XO-1.5 properties list\n  olpc_battery: Add support for CURRENT_NOW and VOLTAGE_NOW\n  olpc_battery: Add support for CHARGE_NOW\n  olpc_battery: Add support for CHARGE_FULL_DESIGN\n  olpc_battery: Ambient temperature is not available on XO-1.5\n  jz4740-battery: Should include linux/io.h\n  s3c_adc_battery: Add gpio_inverted field to pdata\n  power_supply: Don\u0027t use flush_scheduled_work()\n  power_supply: Fix use after free and memory leak\n  gpio-charger: Fix potential race between irq handler and probe/remove\n  gpio-charger: Provide default name for the power_supply\n  gpio-charger: Check result of kzalloc\n  jz4740-battery: Check if platform_data is supplied\n  isp1704_charger: Detect charger after probe\n  isp1704_charger: Set isp-\u003edev before anything needs it\n  isp1704_charger: Detect HUB/Host chargers\n  isp1704_charger: Correct length for storing model\n  power_supply: Add gpio charger driver\n  jz4740-battery: Protect against concurrent battery readings\n  ...\n"
    },
    {
      "commit": "acda4721ae876dedab3fef04bbd8020bfa67ff0a",
      "tree": "ec48d554fe48b3915912e2ae62bc962ade0553bd",
      "parents": [
        "822e5215f9eef86c1dd56d5696bf55a212b0e3f0",
        "32385c7cf60a78375b63afc4f02001df84dfd1a0"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 14 09:08:29 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 14 09:08:29 2011 -0800"
      },
      "message": "Merge branch \u0027vfs-scale-working\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/npiggin/linux-npiggin\n\n* \u0027vfs-scale-working\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/npiggin/linux-npiggin:\n  kernel: fix hlist_bl again\n  cgroups: Fix a lockdep warning at cgroup removal\n  fs: namei fix -\u003eput_link on wrong inode in do_filp_open\n"
    },
    {
      "commit": "822e5215f9eef86c1dd56d5696bf55a212b0e3f0",
      "tree": "661de9888a0edef872e7366df09831bf7a5bc067",
      "parents": [
        "c1e0d97d3d63d5173baf8c39a13dc5c25b031bd4",
        "92d50a4132977b932ed830fa58c05deeb5c524f0"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 14 09:08:00 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 14 09:08:00 2011 -0800"
      },
      "message": "Merge branch \u0027for-next\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sameo/mfd-2.6\n\n* \u0027for-next\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sameo/mfd-2.6: (59 commits)\n  mfd: ab8500-core chip version cut 2.0 support\n  mfd: Flag WM831x /IRQ as a wake source\n  mfd: Convert WM831x away from legacy I2C PM operations\n  regulator: Support MAX8998/LP3974 DVS-GPIO\n  mfd: Support LP3974 RTC\n  i2c: Convert SCx200 driver from using raw PCI to platform device\n  x86: OLPC: convert olpc-xo1 driver from pci device to platform device\n  mfd: MAX8998/LP3974 hibernation support\n  mfd/ab8500: remove spi support\n  mfd: Remove ARCH_U8500 dependency from AB8500\n  misc: Make AB8500_PWM driver depend on U8500 due to PWM breakage\n  mfd: Add __devexit annotation for vx855_remove\n  mfd: twl6030 irq_data conversion.\n  gpio: Fix cs5535 printk warnings\n  misc: Fix cs5535 printk warnings\n  mfd: Convert Wolfson MFD drivers to use irq_data accessor function\n  mfd: Convert TWL4030 to new irq_ APIs\n  mfd: Convert tps6586x driver to new irq_ API\n  mfd: Convert tc6393xb driver to new irq_ APIs\n  mfd: Convert t7166xb driver to new irq_ API\n  ...\n"
    },
    {
      "commit": "b6e335aeeb114dccb07eaa09e8b62ff9510cf745",
      "tree": "f4292a579e594b6c0312e9c34467649cb978aea5",
      "parents": [
        "ff29530e651a3449aea6b0ef4c7048db9e22ef27"
      ],
      "author": {
        "name": "Rafael J. Wysocki",
        "email": "rjw@sisk.pl",
        "time": "Wed Dec 29 13:21:23 2010 +0100"
      },
      "committer": {
        "name": "Jesse Barnes",
        "email": "jbarnes@virtuousgeek.org",
        "time": "Fri Jan 14 08:55:43 2011 -0800"
      },
      "message": "PCI/PM: Use pm_wakeup_event() directly for reporting wakeup events\n\nAfter recent changes related to wakeup events pm_wakeup_event()\nautomatically checks if the given device is configured to signal wakeup,\nso pci_wakeup_event() may be a static inline function calling\npm_wakeup_event() directly.\n\nSigned-off-by: Rafael J. Wysocki \u003crjw@sisk.pl\u003e\nSigned-off-by: Jesse Barnes \u003cjbarnes@virtuousgeek.org\u003e\n"
    },
    {
      "commit": "415e12b2379239973feab91850b0dce985c6058a",
      "tree": "aa79c7a87fd30ac13ae3fd146aad5a44e854c4bc",
      "parents": [
        "6e8af08dfa40b747002207d3ce8e8b43a050d99f"
      ],
      "author": {
        "name": "Rafael J. Wysocki",
        "email": "rjw@sisk.pl",
        "time": "Fri Jan 07 00:55:09 2011 +0100"
      },
      "committer": {
        "name": "Jesse Barnes",
        "email": "jbarnes@virtuousgeek.org",
        "time": "Fri Jan 14 08:55:41 2011 -0800"
      },
      "message": "PCI/ACPI: Request _OSC control once for each root bridge (v3)\n\nMove the evaluation of acpi_pci_osc_control_set() (to request control of\nPCI Express native features) into acpi_pci_root_add() to avoid calling\nit many times for the same root complex with the same arguments.\nAdditionally, check if all of the requisite _OSC support bits are set\nbefore calling acpi_pci_osc_control_set() for a given root complex.\n\nReferences: https://bugzilla.kernel.org/show_bug.cgi?id\u003d20232\nReported-by: Ozan Caglayan \u003cozan@pardus.org.tr\u003e\nTested-by: Ozan Caglayan \u003cozan@pardus.org.tr\u003e\nSigned-off-by: Rafael J. Wysocki \u003crjw@sisk.pl\u003e\nSigned-off-by: Jesse Barnes \u003cjbarnes@virtuousgeek.org\u003e\n"
    },
    {
      "commit": "c94fbe1d9e1e9b1a1f82eb0b53b1cf53bcf9712b",
      "tree": "0191c752be8ea739136106f6cca95df61cffc676",
      "parents": [
        "4ad9f594d7199c99f6b1b3ef88c64bd5920a4592"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Fri Jan 14 11:25:58 2011 -0500"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Fri Jan 14 11:25:58 2011 -0500"
      },
      "message": "tracing: Only process module tracepoints once\n\nThe commit:\n\n 9f987b3141f086de27832514aad9f50a53f754\n tracing: Include module.h in define_trace.h\n\nonly solved half the problem. If the trace/events/module.h header is\nincluded at the time of define_trace.h (or in ftrace.h within it),\nthe module.h TRACE_SYSTEM will override the current TRACE_SYSTEM\nmacro.\n\nSince define_trace.h is included when CREATE_TRACE_POINTS is set,\nand the first thing it does is to #undef CREATE_TRACE_POINTS,\nby placing the module.h TRACE_SYSTEM inside a\n #ifdef CREATE_TRACE_POINTS\nwe can prevent it from overriding the TRACE_SYSTEM that is\nbeing processed, and still process the module.h tracepoints\nwhen the module code defines CREATE_TRACE_POINTS and includes\nthe trace/events/module.h header.\n\nAs with commit 9f987b3141, this is only an issue if module.h\nis not included before the trace/events/\u003cevent\u003e.h file is\nincluded, which (luckily) has not happened yet.\n\nReported-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5",
      "tree": "71c6344688bf56ea6aaf18c586ab69ff4f077ade",
      "parents": [
        "f4013c3879d1bbd9f3ab8351185decd049502368"
      ],
      "author": {
        "name": "Nicholas Bellinger",
        "email": "nab@linux-iscsi.org",
        "time": "Fri Dec 17 11:11:26 2010 -0800"
      },
      "committer": {
        "name": "James Bottomley",
        "email": "James.Bottomley@suse.de",
        "time": "Fri Jan 14 10:12:29 2011 -0600"
      },
      "message": "[SCSI] target: Add LIO target core v4.0.0-rc6\n\nLIO target is a full featured in-kernel target framework with the\nfollowing feature set:\n\nHigh-performance, non-blocking, multithreaded architecture with SIMD\nsupport.\n\nAdvanced SCSI feature set:\n\n    * Persistent Reservations (PRs)\n    * Asymmetric Logical Unit Assignment (ALUA)\n    * Protocol and intra-nexus multiplexing, load-balancing and failover (MC/S)\n    * Full Error Recovery (ERL\u003d0,1,2)\n    * Active/active task migration and session continuation (ERL\u003d2)\n    * Thin LUN provisioning (UNMAP and WRITE_SAMExx)\n\nMultiprotocol target plugins\n\nStorage media independence:\n\n    * Virtualization of all storage media; transparent mapping of IO to LUNs\n    * No hard limits on number of LUNs per Target; maximum LUN size ~750 TB\n    * Backstores: SATA, SAS, SCSI, BluRay, DVD, FLASH, USB, ramdisk, etc.\n\nStandards compliance:\n\n    * Full compliance with IETF (RFC 3720)\n    * Full implementation of SPC-4 PRs and ALUA\n\nSignificant code cleanups done by Christoph Hellwig.\n\n[jejb: fix up for new block bdev exclusive interface. Minor fixes from\n Randy Dunlap and Dan Carpenter.]\nSigned-off-by: Nicholas A. Bellinger \u003cnab@linux-iscsi.org\u003e\nSigned-off-by: James Bottomley \u003cJames.Bottomley@suse.de\u003e\n"
    },
    {
      "commit": "323b7fe8f8f6d5ac6214382cf30e8b3a80b265c9",
      "tree": "537e4b8a2c528f8bd2a71f954e01b71e26ff231c",
      "parents": [
        "836cb711ad7960e52625b24195d6e70b79ab0816"
      ],
      "author": {
        "name": "Wolfram Sang",
        "email": "w.sang@pengutronix.de",
        "time": "Fri Jan 14 09:34:29 2011 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 14 08:06:39 2011 -0800"
      },
      "message": "include/gpio.h: remove remaining __must_check-annotiations\n\nCommit 5f829e405ec4e96f711165a4a7b55c271d4363e2 (gpiolib: add missing functions\nto generic fallback) also introduced two.\n\nSigned-off-by: Wolfram Sang \u003cw.sang@pengutronix.de\u003e\nCc: Greg KH \u003cgregkh@suse.de\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "836cb711ad7960e52625b24195d6e70b79ab0816",
      "tree": "b2e9d2060c24f7c68bc82c8e6add25180fe8eaca",
      "parents": [
        "11ff26c884ec957bed87b49e3a38908f37d0d3e4"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa@bluextal.(none)",
        "time": "Fri Jan 14 14:56:53 2011 +0900"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 14 07:52:02 2011 -0800"
      },
      "message": "Revert update for dirty_ratio for memcg.\n\nThe flags added by commit db16d5ec1f87f17511599bc77857dd1662b5a22f\nhas no user now. We believe we\u0027ll use it soon but considering\npatch reviewing, the change itself should be folded into incoming\nset of \"dirty ratio for memcg\" patches.\n\nSo, it\u0027s better to drop this change from current mainline tree.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Greg Thelen \u003cgthelen@google.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "359ab9f5b154cbd807a11e22792235f0f36b0cd5",
      "tree": "3500652809c242b75deb5139ded7052c389e0bb4",
      "parents": [
        "bf542a4e7b634c2adcba4241a29082f69b0f45dc"
      ],
      "author": {
        "name": "MyungJoo Ham",
        "email": "myungjoo.ham@samsung.com",
        "time": "Fri Jan 14 14:46:11 2011 +0900"
      },
      "committer": {
        "name": "Anton Vorontsov",
        "email": "cbouatmailru@gmail.com",
        "time": "Fri Jan 14 18:11:59 2011 +0300"
      },
      "message": "power_supply: Add MAX17042 Fuel Gauge Driver\n\nThe MAX17042 is a fuel gauge with an I2C interface for lithium-ion\nbetteries. Unlike its predecessor MAX17040, MAX17042 uses 16bit\nregisters. Besides, MAX17042 has much more features than MAX17040; e.g.,\na thermistor, current and current accumulation measurement, battery\ninternal resistance estimate, average values of measurement, and others.\n\nThis patch implements a driver for MAX17042.\nIn this initial release, we have implemented the most basic features of\na fuel gauge: measure the battery capacity and voltage.\n\nSigned-off-by: MyungJoo Ham \u003cmyungjoo.ham@samsung.com\u003e\nSigned-off-by: Kyungmin Park \u003ckyungmin.park@samsung.com\u003e\nSigned-off-by: Anton Vorontsov \u003ccbouatmailru@gmail.com\u003e\n"
    },
    {
      "commit": "32385c7cf60a78375b63afc4f02001df84dfd1a0",
      "tree": "6419ac3c77cb38bac389e5efc59928e01780a2ae",
      "parents": [
        "3ec762ad8be364c2fadfe0d6b2cc6d4d3b5e1b54"
      ],
      "author": {
        "name": "Russell King",
        "email": "rmk+kernel@arm.linux.org.uk",
        "time": "Fri Jan 14 13:12:45 2011 +0000"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 14 13:12:45 2011 +0000"
      },
      "message": "kernel: fix hlist_bl again\n\n__d_rehash is dereferencing an almost-NULL pointer on my ARM926.\nCONFIG_SMP\u003dn and CONFIG_DEBUG_SPINLOCK\u003dy.\n\nThe faulting instruction is:    strne   r3, [r2, #4]\nand as can be seen from the register dump below, r2 is 0x00000001, hence\nthe faulting 0x00000005 address.\n\n__d_rehash is essentially:\n\n       spin_lock_bucket(b);\n       entry-\u003ed_flags \u0026\u003d ~DCACHE_UNHASHED;\n       hlist_bl_add_head_rcu(\u0026entry-\u003ed_hash, \u0026b-\u003ehead);\n       spin_unlock_bucket(b);\n\nwhich is:\n\n       bit_spin_lock(0, (unsigned long *)\u0026b-\u003ehead.first);\n       entry-\u003ed_flags \u0026\u003d ~DCACHE_UNHASHED;\n       hlist_bl_add_head_rcu(\u0026entry-\u003ed_hash, \u0026b-\u003ehead);\n       __bit_spin_unlock(0, (unsigned long *)\u0026b-\u003ehead.first);\n\nbit_spin_lock(0, ptr) sets bit 0 of *ptr, in this case b-\u003ehead.first if\nCONFIG_SMP or CONFIG_DEBUG_SPINLOCK is set:\n\n#if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK)\n       while (unlikely(test_and_set_bit_lock(bitnum, addr))) {\n               while (test_bit(bitnum, addr)) {\n                       preempt_enable();\n                       cpu_relax();\n                       preempt_disable();\n               }\n       }\n#endif\n\nSo, b-\u003ehead.first starts off NULL, and becomes a non-NULL (address 1).\nhlist_bl_add_head_rcu() does this:\n\nstatic inline void hlist_bl_add_head_rcu(struct hlist_bl_node *n,\n                                       struct hlist_bl_head *h)\n{\n       first \u003d hlist_bl_first(h);\n       n-\u003enext \u003d first;\n       if (first)\n               first-\u003epprev \u003d \u0026n-\u003enext;\n\nIt is the store to first-\u003epprev which is faulting.\n\nhlist_bl_first():\n\nstatic inline struct hlist_bl_node *hlist_bl_first(struct hlist_bl_head *h)\n{\n       return (struct hlist_bl_node *)\n               ((unsigned long)h-\u003efirst \u0026 ~LIST_BL_LOCKMASK);\n}\n\nbut:\n#if defined(CONFIG_SMP)\n#define LIST_BL_LOCKMASK        1UL\n#else\n#define LIST_BL_LOCKMASK        0UL\n#endif\n\nSo, we have one piece of code which sets bit 0 of addresses, and another\nbit of code which doesn\u0027t clear it before dereferencing the pointer if\n!CONFIG_SMP \u0026\u0026 CONFIG_DEBUG_SPINLOCK.  With the patch below, I can again\nsucessfully boot the kernel on my Versatile PB/926 platform.\n\nSigned-off-by: Russell King \u003crmk+kernel@arm.linux.org.uk\u003e\n"
    },
    {
      "commit": "92d50a4132977b932ed830fa58c05deeb5c524f0",
      "tree": "1ee4ca4b6126861e30d5ac79ad61b0884b4d8627",
      "parents": [
        "180e4f5f20ef2b03ce2b38634274dde5ccbd8951"
      ],
      "author": {
        "name": "Mattias Wallin",
        "email": "mattias.wallin@stericsson.com",
        "time": "Tue Dec 07 11:20:47 2010 +0100"
      },
      "committer": {
        "name": "Samuel Ortiz",
        "email": "sameo@linux.intel.com",
        "time": "Fri Jan 14 12:38:18 2011 +0100"
      },
      "message": "mfd: ab8500-core chip version cut 2.0 support\n\nThis patch adds support for chip version 2.0 or cut 2.0.\nOne new interrupt latch register - latch 12 - is introduced.\n\nSigned-off-by: Mattias Wallin \u003cmattias.wallin@stericsson.com\u003e\nAcked-by: Linus Walleij \u003clinus.walleij@stericsson.com\u003e\nSigned-off-by: Samuel Ortiz \u003csameo@linux.intel.com\u003e\n"
    },
    {
      "commit": "735a3d9efdc5aeebe201008e6655b235c7f02aeb",
      "tree": "a1083cec498505b1dbd28dd09a73d477965d2d61",
      "parents": [
        "337ce5d1c5759644cea6c47220ce7e84f0398362"
      ],
      "author": {
        "name": "MyungJoo Ham",
        "email": "myungjoo.ham@samsung.com",
        "time": "Tue Jan 11 12:20:05 2011 +0100"
      },
      "committer": {
        "name": "Samuel Ortiz",
        "email": "sameo@linux.intel.com",
        "time": "Fri Jan 14 12:38:16 2011 +0100"
      },
      "message": "regulator: Support MAX8998/LP3974 DVS-GPIO\n\nThe previous driver did not support BUCK1-DVS3, BUCK1-DVS4, and\nBUCK2-DVS2 modes. This patch adds such modes and an option to block\nsetting buck1/2 voltages out of the preset values.\n\nSigned-off-by: MyungJoo Ham \u003cmyungjoo.ham@samsung.com\u003e\nSigned-off-by: Kyungmin Park \u003ckyungmin.park@samsung.com\u003e\nAcked-by: Mark Brown \u003cbroonie@opensource.wolfsonmicro.com\u003e\nSigned-off-by: Samuel Ortiz \u003csameo@linux.intel.com\u003e\n"
    },
    {
      "commit": "337ce5d1c5759644cea6c47220ce7e84f0398362",
      "tree": "0436dbc242425226202476d6181fa6ae89e3a206",
      "parents": [
        "de8255ccd219267cfd34139022b197c1ef8f032f"
      ],
      "author": {
        "name": "MyungJoo Ham",
        "email": "myungjoo.ham@samsung.com",
        "time": "Tue Jan 04 14:17:39 2011 +0900"
      },
      "committer": {
        "name": "Samuel Ortiz",
        "email": "sameo@linux.intel.com",
        "time": "Fri Jan 14 12:38:16 2011 +0100"
      },
      "message": "mfd: Support LP3974 RTC\n\nThe first releases of LP3974 have a large delay in RTC registers,\nwhich requires 2 seconds of delay after writing to a rtc register\n(recommended by National Semiconductor\u0027s engineers)\nbefore reading it.\n\nIf \"rtc_delay\" field of the platform data is true, the rtc driver\nassumes that such delays are required. Although we have not seen\nLP3974s without requiring such delays, we assume that such LP3974s\nwill be released soon (or they have done so already) and they are\nsupported by \"lp3974\" without setting \"rtc_delay\" at the platform\ndata.\n\nThis patch adds delays with msleep when writing values to RTC registers\nif the platform data has rtc_delay set.\n\nSigned-off-by: MyungJoo Ham \u003cmyungjoo.ham@samsung.com\u003e\nSigned-off-by: Kyungmin Park \u003ckyungmin.park@samsung.com\u003e\nReviewed-by: Mark Brown \u003cbroonie@opensource.wolfsonmicro.com\u003e\nSigned-off-by: Samuel Ortiz \u003csameo@linux.intel.com\u003e\n"
    },
    {
      "commit": "cdd137c9c86c201ddb7f42ec978d2da45e7b7a17",
      "tree": "1fe9850f283a3952b139d2fc113759fbb4fed88c",
      "parents": [
        "6680d940b80dbb0617226c5b76b071a3977feb1c"
      ],
      "author": {
        "name": "MyungJoo Ham",
        "email": "myungjoo.ham@samsung.com",
        "time": "Thu Dec 23 17:53:36 2010 +0900"
      },
      "committer": {
        "name": "Samuel Ortiz",
        "email": "sameo@linux.intel.com",
        "time": "Fri Jan 14 12:38:14 2011 +0100"
      },
      "message": "mfd: MAX8998/LP3974 hibernation support\n\nThis patch makes the driver to save and restore register values\nfor hibernation.\n\nSigned-off-by: MyungJoo Ham \u003cmyungjoo.ham@samsung.com\u003e\nSigned-off-by: Kyungmin Park \u003ckyungmin.park@samsung.com\u003e\nSigned-off-by: Samuel Ortiz \u003csameo@linux.intel.com\u003e\n"
    },
    {
      "commit": "e098aded79f24e2024139e82f778ff9db6dc142a",
      "tree": "9a8e55da30e25ddf10f1476dfc4c4c9467efe800",
      "parents": [
        "4f079985b2caacfda5103dd85fb028a2848c84ab"
      ],
      "author": {
        "name": "Mattias Wallin",
        "email": "mattias.wallin@stericsson.com",
        "time": "Thu Dec 02 15:40:31 2010 +0100"
      },
      "committer": {
        "name": "Samuel Ortiz",
        "email": "sameo@linux.intel.com",
        "time": "Fri Jan 14 12:37:47 2011 +0100"
      },
      "message": "mfd: ab8500-core ioresources irq for subdrivers added\n\nThis patch adds the ioresources used by subdrivers to\nretrieve their interrupt.\n\nSigned-off-by: Mattias Wallin \u003cmattias.wallin@stericsson.com\u003e\nSigned-off-by: Samuel Ortiz \u003csameo@linux.intel.com\u003e\n"
    },
    {
      "commit": "4c90aa94f6b3e33f57faaf19ef9819195dff61d3",
      "tree": "14eea47a6ca27e03d16514fe397a1cd9fbf4a901",
      "parents": [
        "d7b9f3220fd97522559316cdd72778f42ac4de04"
      ],
      "author": {
        "name": "Mark Brown",
        "email": "broonie@opensource.wolfsonmicro.com",
        "time": "Fri Nov 26 17:19:34 2010 +0000"
      },
      "committer": {
        "name": "Samuel Ortiz",
        "email": "sameo@linux.intel.com",
        "time": "Fri Jan 14 12:37:42 2011 +0100"
      },
      "message": "mfd: Provide pm_runtime_no_callbacks flag in cell data\n\nAllow MFD cells to have pm_runtime_no_callbacks() called on them during\nregistration. This causes the runtime PM framework to ignore them,\nallowing use of runtime PM to suspend the device as a whole even if\nnot all drivers for the MFD can usefully implement runtime PM. For\nexample, RTCs are likely to run continuously regardless of the power\nstate of the system.\n\nSigned-off-by: Mark Brown \u003cbroonie@opensource.wolfsonmicro.com\u003e\nSigned-off-by: Samuel Ortiz \u003csameo@linux.intel.com\u003e\n"
    },
    {
      "commit": "412dc11d3fd01f96fdf4a8cbfbc5584a17dab7c8",
      "tree": "8550bcb089afaa1529973ce951c763697e39b312",
      "parents": [
        "798e6e321f807c46d81be1572118e031577ea9ab"
      ],
      "author": {
        "name": "Mark Brown",
        "email": "broonie@opensource.wolfsonmicro.com",
        "time": "Wed Nov 24 18:01:41 2010 +0000"
      },
      "committer": {
        "name": "Samuel Ortiz",
        "email": "sameo@linux.intel.com",
        "time": "Fri Jan 14 12:37:39 2011 +0100"
      },
      "message": "mfd: Add WM8326 support\n\nThe WM8326 is a high performance variant of the WM832x series with\nno software visible differences.\n\nSigned-off-by: Mark Brown \u003cbroonie@opensource.wolfsonmicro.com\u003e\nSigned-off-by: Samuel Ortiz \u003csameo@linux.intel.com\u003e\n"
    },
    {
      "commit": "51e7eed79c41180919ff94942895ba38467d9ad4",
      "tree": "7779a12f1a54d0d205c0ceec14cc2c59ba581c3d",
      "parents": [
        "5cd8a77df3e9916069787365a32918caa371fc16"
      ],
      "author": {
        "name": "Tobias Klauser",
        "email": "tklauser@distanz.ch",
        "time": "Wed Jan 12 22:14:56 2011 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Thu Jan 13 21:49:56 2011 -0800"
      },
      "message": "etherdevice.h: Add is_unicast_ether_addr function\n\nFrom a check for !is_multicast_ether_addr it is not always obvious that\nwe\u0027re checking for a unicast address. So add this helper function to\nmake those code paths easier to read.\n\nSigned-off-by: Tobias Klauser \u003ctklauser@distanz.ch\u003e\nAcked-by: Chris Metcalf \u003ccmetcalf@tilera.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "78d07369462e9feeaa5db301b0aa70e9dcb40b48",
      "tree": "8756347993a87a302df4f731ab59dc97ca3a5720",
      "parents": [
        "1ac9ad1394fa542ac7ae0dc943ee3cda678799fa"
      ],
      "author": {
        "name": "Nicolas Dichtel",
        "email": "nicolas.dichtel@6wind.com",
        "time": "Thu Jan 13 11:51:03 2011 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Thu Jan 13 21:48:25 2011 -0800"
      },
      "message": "ipsec: update MAX_AH_AUTH_LEN to support sha512\n\nicv_truncbits is set to 256 for sha512, so update\nMAX_AH_AUTH_LEN to 64.\n\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "1ac9ad1394fa542ac7ae0dc943ee3cda678799fa",
      "tree": "d846be421ed68f4fc612ae7c061783dab73d5fa2",
      "parents": [
        "1949e084bfd143c76e22c0b37f370d6e7bf4bfdd"
      ],
      "author": {
        "name": "Eric Dumazet",
        "email": "eric.dumazet@gmail.com",
        "time": "Wed Jan 12 12:13:14 2011 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Thu Jan 13 21:44:34 2011 -0800"
      },
      "message": "net: remove dev_txq_stats_fold()\n\nAfter recent changes, (percpu stats on vlan/tunnels...), we dont need\nanymore per struct netdev_queue tx_bytes/tx_packets/tx_dropped counters.\n\nOnly remaining users are ixgbe, sch_teql, gianfar \u0026 macvlan :\n\n1) ixgbe can be converted to use existing tx_ring counters.\n\n2) macvlan incremented txq-\u003etx_dropped, it can use the\ndev-\u003estats.tx_dropped counter.\n\n3) sch_teql : almost revert ab35cd4b8f42 (Use net_device internal stats)\n    Now we have ndo_get_stats64(), use it, even for \"unsigned long\"\nfields (No need to bring back a struct net_device_stats)\n\n4) gianfar adds a stats structure per tx queue to hold\ntx_bytes/tx_packets\n\nThis removes a lockdep warning (and possible lockup) in rndis gadget,\ncalling dev_get_stats() from hard IRQ context.\n\nRef: http://www.spinics.net/lists/netdev/msg149202.html\n\nReported-by: Neil Jones \u003cneiljay@gmail.com\u003e\nSigned-off-by: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nCC: Jarek Poplawski \u003cjarkao2@gmail.com\u003e\nCC: Alexander Duyck \u003calexander.h.duyck@intel.com\u003e\nCC: Jeff Kirsher \u003cjeffrey.t.kirsher@intel.com\u003e\nCC: Sandeep Gopalpet \u003csandeep.kumar@freescale.com\u003e\nCC: Michal Nazarewicz \u003cmina86@mina86.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "52cfd503ad7176d23a5dd7af3981744feb60622f",
      "tree": "0a8aeaaf4acbc86ac682f18632b8070c1c6b7ba1",
      "parents": [
        "dc8e7e3ec60bd5ef7868aa88755e9d4c948dc5cc",
        "4263d9a3ae4d15785897d0543bb59316c84ee605"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 20:15:35 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 20:15:35 2011 -0800"
      },
      "message": "Merge branch \u0027release\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6\n\n* \u0027release\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6: (59 commits)\n  ACPI / PM: Fix build problems for !CONFIG_ACPI related to NVS rework\n  ACPI: fix resource check message\n  ACPI / Battery: Update information on info notification and resume\n  ACPI: Drop device flag wake_capable\n  ACPI: Always check if _PRW is present before trying to evaluate it\n  ACPI / PM: Check status of power resources under mutexes\n  ACPI / PM: Rename acpi_power_off_device()\n  ACPI / PM: Drop acpi_power_nocheck\n  ACPI / PM: Drop acpi_bus_get_power()\n  Platform / x86: Make fujitsu_laptop use acpi_bus_update_power()\n  ACPI / Fan: Rework the handling of power resources\n  ACPI / PM: Register power resource devices as soon as they are needed\n  ACPI / PM: Register acpi_power_driver early\n  ACPI / PM: Add function for updating device power state consistently\n  ACPI / PM: Add function for device power state initialization\n  ACPI / PM: Introduce __acpi_bus_get_power()\n  ACPI / PM: Introduce function for refcounting device power resources\n  ACPI / PM: Add functions for manipulating lists of power resources\n  ACPI / PM: Prevent acpi_power_get_inferred_state() from making changes\n  ACPICA: Update version to 20101209\n  ...\n"
    },
    {
      "commit": "dc8e7e3ec60bd5ef7868aa88755e9d4c948dc5cc",
      "tree": "df6b7002b3672dcd269a5bc1473413f50a12df29",
      "parents": [
        "2c79c69adc6205fd115e4b1980c979e1e0e1828a",
        "43952886f0b8b3c344c3392b88de067d5fa5419a"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 20:15:18 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 20:15:18 2011 -0800"
      },
      "message": "Merge branch \u0027idle-release\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-idle-2.6\n\n* \u0027idle-release\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-idle-2.6:\n  cpuidle/x86/perf: fix power:cpu_idle double end events and throw cpu_idle events from the cpuidle layer\n  intel_idle: open broadcast clock event\n  cpuidle: CPUIDLE_FLAG_CHECK_BM is omap3_idle specific\n  cpuidle: CPUIDLE_FLAG_TLB_FLUSHED is specific to intel_idle\n  cpuidle: delete unused CPUIDLE_FLAG_SHALLOW, BALANCED, DEEP definitions\n  SH, cpuidle: delete use of NOP CPUIDLE_FLAGS_SHALLOW\n  cpuidle: delete NOP CPUIDLE_FLAG_POLL\n  ACPI: processor_idle: delete use of NOP CPUIDLE_FLAGs\n  cpuidle: Rename X86 specific idle poll state[0] from C0 to POLL\n  ACPI, intel_idle: Cleanup idle\u003d internal variables\n  cpuidle: Make cpuidle_enable_device() call poll_idle_init()\n  intel_idle: update Sandy Bridge core C-state residency targets\n"
    },
    {
      "commit": "db9effe99adc67c53e6aedadadd2aa9a02342e48",
      "tree": "efe7ebfe951972568189ef2548130f0abd515210",
      "parents": [
        "9c4bc1c2befbbdce4b9fd526e67a7a2ea143ffa2",
        "f20877d94a74557b7c28b4ed8920d834c31e0ea5"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 20:14:13 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 20:14:13 2011 -0800"
      },
      "message": "Merge branch \u0027vfs-scale-working\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/npiggin/linux-npiggin\n\n* \u0027vfs-scale-working\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/npiggin/linux-npiggin:\n  fs: fix do_last error case when need_reval_dot\n  nfs: add missing rcu-walk check\n  fs: hlist UP debug fixup\n  fs: fix dropping of rcu-walk from force_reval_path\n  fs: force_reval_path drop rcu-walk before d_invalidate\n  fs: small rcu-walk documentation fixes\n\nFixed up trivial conflicts in Documentation/filesystems/porting\n"
    },
    {
      "commit": "9c4bc1c2befbbdce4b9fd526e67a7a2ea143ffa2",
      "tree": "1b08c1bb00ce477ca947461777cd7e24de72c148",
      "parents": [
        "2c0076d8c7eb1dafa03d0a792444862080b34106",
        "e1b478e4ec4477520767d1a920433626263a2a6b"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 18:46:48 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 18:46:48 2011 -0800"
      },
      "message": "Merge branch \u0027stable/gntdev\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen\n\n* \u0027stable/gntdev\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen:\n  xen/p2m: Fix module linking error.\n  xen p2m: clear the old pte when adding a page to m2p_override\n  xen gntdev: use gnttab_map_refs and gnttab_unmap_refs\n  xen: introduce gnttab_map_refs and gnttab_unmap_refs\n  xen p2m: transparently change the p2m mappings in the m2p override\n  xen/gntdev: Fix circular locking dependency\n  xen/gntdev: stop using \"token\" argument\n  xen: gntdev: move use of GNTMAP_contains_pte next to the map_op\n  xen: add m2p override mechanism\n  xen: move p2m handling to separate file\n  xen/gntdev: add VM_PFNMAP to vma\n  xen/gntdev: allow usermode to map granted pages\n  xen: define gnttab_set_map_op/unmap_op\n\nFix up trivial conflict in drivers/xen/Kconfig\n"
    },
    {
      "commit": "2c6755988afc003a0332406a134fb6a1626f9b28",
      "tree": "84eea829cab7b28585000f6fd7fe0dc176b746c5",
      "parents": [
        "90dbb77ba48dddb87445d238e84cd137cf97dd98"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 14 02:36:43 2011 +0000"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@hera.kernel.org",
        "time": "Fri Jan 14 02:36:43 2011 +0000"
      },
      "message": "fs: hlist UP debug fixup\n\nPo-Yu Chuang \u003cratbert.chuang@gmail.com\u003e noticed that hlist_bl_set_first could\ncrash on a UP system when LIST_BL_LOCKMASK is 0, because\n\n\tLIST_BL_BUG_ON(!((unsigned long)h-\u003efirst \u0026 LIST_BL_LOCKMASK));\n\nalways evaulates to true.\n\nFix the expression, and also avoid a dependency between bit spinlock\nimplementation and list bl code (list code shouldn\u0027t know anything\nexcept that bit 0 is set when adding and removing elements). Eventually\nif a good use case comes up, we might use this list to store 1 or more\narbitrary bits of data, so it really shouldn\u0027t be tied to locking either,\nbut for now they are helpful for debugging.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "9ce137eee4febaabca81143be07d4205d2bd52d4",
      "tree": "e52e5225e1d113164382bf85bca83a2c0330d64e",
      "parents": [
        "9ee1ba5402e9d35fb35f8e61c968f4987b5fb443"
      ],
      "author": {
        "name": "J. Bruce Fields",
        "email": "bfields@redhat.com",
        "time": "Tue Jan 11 14:07:12 2011 -0500"
      },
      "committer": {
        "name": "J. Bruce Fields",
        "email": "bfields@redhat.com",
        "time": "Thu Jan 13 21:04:07 2011 -0500"
      },
      "message": "nfsd: don\u0027t support msnfs export option\n\nWe\u0027ve long had these pointless #ifdef MSNFS\u0027s sprinkled throughout the\ncode--pointless because MSNFS is always defined (and we give no config\noption to make that easy to change).  So we could just remove the\nifdef\u0027s and compile the resulting code unconditionally.\n\nBut as long as we\u0027re there: why not just rip out this code entirely?\nThe only purpose is to implement the \"msnfs\" export option which turns\non Windows-like behavior in some cases, and:\n\n\t- the export option isn\u0027t documented anywhere;\n\t- the userland utilities (which would need to be able to parse\n\t  \"msnfs\" in an export file) don\u0027t support it;\n\t- I don\u0027t know how to maintain this, as I don\u0027t know what the\n\t  proper behavior is; and\n\t- google shows no evidence that anyone has ever used this.\n\nSigned-off-by: J. Bruce Fields \u003cbfields@redhat.com\u003e\n"
    },
    {
      "commit": "50de1dd967d4ba3b8a90ebe7a4f5feca24191317",
      "tree": "ed2aa4352ae3c2887a90ef6279588a7048397d1b",
      "parents": [
        "17295c88a160c6eea3fcf46cec9d08a0fcb02db9"
      ],
      "author": {
        "name": "Daisuke Nishimura",
        "email": "nishimura@mxp.nes.nec.co.jp",
        "time": "Thu Jan 13 15:47:43 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:51 2011 -0800"
      },
      "message": "memcg: fix memory migration of shmem swapcache\n\nIn the current implementation mem_cgroup_end_migration() decides whether\nthe page migration has succeeded or not by checking \"oldpage-\u003emapping\".\n\nBut if we are tring to migrate a shmem swapcache, the page-\u003emapping of it\nis NULL from the begining, so the check would be invalid.  As a result,\nmem_cgroup_end_migration() assumes the migration has succeeded even if\nit\u0027s not, so \"newpage\" would be freed while it\u0027s not uncharged.\n\nThis patch fixes it by passing mem_cgroup_end_migration() the result of\nthe page migration.\n\nSigned-off-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nReviewed-by: Johannes Weiner \u003channes@cmpxchg.org\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": "dbd4ea78f002df283c95d9774837041735fa1bf9",
      "tree": "e709c6c5c026b1c230bb87ddcfe8415aaf255820",
      "parents": [
        "2a7106f2cb0768d00fe8c1eb42a754a7d8518f08"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Thu Jan 13 15:47:38 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:50 2011 -0800"
      },
      "message": "memcg: add lock to synchronize page accounting and migration\n\nIntroduce a new bit spin lock, PCG_MOVE_LOCK, to synchronize the page\naccounting and migration code.  This reworks the locking scheme of\n_update_stat() and _move_account() by adding new lock bit PCG_MOVE_LOCK,\nwhich is always taken under IRQ disable.\n\n1. If pages are being migrated from a memcg, then updates to that\n   memcg page statistics are protected by grabbing PCG_MOVE_LOCK using\n   move_lock_page_cgroup().  In an upcoming commit, memcg dirty page\n   accounting will be updating memcg page accounting (specifically: num\n   writeback pages) from IRQ context (softirq).  Avoid a deadlocking\n   nested spin lock attempt by disabling irq on the local processor when\n   grabbing the PCG_MOVE_LOCK.\n\n2. lock for update_page_stat is used only for avoiding race with\n   move_account().  So, IRQ awareness of lock_page_cgroup() itself is not\n   a problem.  The problem is between mem_cgroup_update_page_stat() and\n   mem_cgroup_move_account_page().\n\nTrade-off:\n  * Changing lock_page_cgroup() to always disable IRQ (or\n    local_bh) has some impacts on performance and I think\n    it\u0027s bad to disable IRQ when it\u0027s not necessary.\n  * adding a new lock makes move_account() slower.  Score is\n    here.\n\nPerformance Impact: moving a 8G anon process.\n\nBefore:\n\treal    0m0.792s\n\tuser    0m0.000s\n\tsys     0m0.780s\n\nAfter:\n\treal    0m0.854s\n\tuser    0m0.000s\n\tsys     0m0.842s\n\nThis score is bad but planned patches for optimization can reduce\nthis impact.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Greg Thelen \u003cgthelen@google.com\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nAcked-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Andrea Righi \u003carighi@develer.com\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2a7106f2cb0768d00fe8c1eb42a754a7d8518f08",
      "tree": "730bef06e752c1edcb2d475fd193f94bea00bf6a",
      "parents": [
        "ece72400c2a27a3d726cb0854449f991d9fcd2da"
      ],
      "author": {
        "name": "Greg Thelen",
        "email": "gthelen@google.com",
        "time": "Thu Jan 13 15:47:37 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:50 2011 -0800"
      },
      "message": "memcg: create extensible page stat update routines\n\nReplace usage of the mem_cgroup_update_file_mapped() memcg\nstatistic update routine with two new routines:\n* mem_cgroup_inc_page_stat()\n* mem_cgroup_dec_page_stat()\n\nAs before, only the file_mapped statistic is managed.  However, these more\ngeneral interfaces allow for new statistics to be more easily added.  New\nstatistics are added with memcg dirty page accounting.\n\nSigned-off-by: Greg Thelen \u003cgthelen@google.com\u003e\nSigned-off-by: Andrea Righi \u003carighi@develer.com\u003e\nAcked-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "db16d5ec1f87f17511599bc77857dd1662b5a22f",
      "tree": "e9bfa9addc71f08f60c98874aa695daec4ac6537",
      "parents": [
        "744ed1442757767ffede5008bb13e0805085902e"
      ],
      "author": {
        "name": "Greg Thelen",
        "email": "gthelen@google.com",
        "time": "Thu Jan 13 15:47:35 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:50 2011 -0800"
      },
      "message": "memcg: add page_cgroup flags for dirty page tracking\n\nThis patchset provides the ability for each cgroup to have independent\ndirty page limits.\n\nLimiting dirty memory is like fixing the max amount of dirty (hard to\nreclaim) page cache used by a cgroup.  So, in case of multiple cgroup\nwriters, they will not be able to consume more than their designated share\nof dirty pages and will be forced to perform write-out if they cross that\nlimit.\n\nThe patches are based on a series proposed by Andrea Righi in Mar 2010.\n\nOverview:\n\n- Add page_cgroup flags to record when pages are dirty, in writeback, or nfs\n  unstable.\n\n- Extend mem_cgroup to record the total number of pages in each of the\n  interesting dirty states (dirty, writeback, unstable_nfs).\n\n- Add dirty parameters similar to the system-wide  /proc/sys/vm/dirty_*\n  limits to mem_cgroup.  The mem_cgroup dirty parameters are accessible\n  via cgroupfs control files.\n\n- Consider both system and per-memcg dirty limits in page writeback when\n  deciding to queue background writeback or block for foreground writeback.\n\nKnown shortcomings:\n\n- When a cgroup dirty limit is exceeded, then bdi writeback is employed to\n  writeback dirty inodes.  Bdi writeback considers inodes from any cgroup, not\n  just inodes contributing dirty pages to the cgroup exceeding its limit.\n\n- When memory.use_hierarchy is set, then dirty limits are disabled.  This is a\n  implementation detail.  An enhanced implementation is needed to check the\n  chain of parents to ensure that no dirty limit is exceeded.\n\nPerformance data:\n- A page fault microbenchmark workload was used to measure performance, which\n  can be called in read or write mode:\n        f \u003d open(foo. $cpu)\n        truncate(f, 4096)\n        alarm(60)\n        while (1) {\n                p \u003d mmap(f, 4096)\n                if (write)\n\t\t\t*p \u003d 1\n\t\telse\n\t\t\tx \u003d *p\n                munmap(p)\n        }\n\n- The workload was called for several points in the patch series in different\n  modes:\n  - s_read is a single threaded reader\n  - s_write is a single threaded writer\n  - p_read is a 16 thread reader, each operating on a different file\n  - p_write is a 16 thread writer, each operating on a different file\n\n- Measurements were collected on a 16 core non-numa system using \"perf stat\n  --repeat 3\".  The -a option was used for parallel (p_*) runs.\n\n- All numbers are page fault rate (M/sec).  Higher is better.\n\n- To compare the performance of a kernel without non-memcg compare the first and\n  last rows, neither has memcg configured.  The first row does not include any\n  of these memcg patches.\n\n- To compare the performance of using memcg dirty limits, compare the baseline\n  (2nd row titled \"w/ memcg\") with the the code and memcg enabled (2nd to last\n  row titled \"all patches\").\n\n                           root_cgroup                    child_cgroup\n                 s_read s_write p_read p_write   s_read s_write p_read p_write\nmmotm w/o memcg   0.428  0.390   0.429  0.388\nmmotm w/ memcg    0.411  0.378   0.391  0.362     0.412  0.377   0.385  0.363\nall patches       0.384  0.360   0.370  0.348     0.381  0.363   0.368  0.347\nall patches       0.431  0.402   0.427  0.395\n  w/o memcg\n\nThis patch:\n\nAdd additional flags to page_cgroup to track dirty pages within a\nmem_cgroup.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrea Righi \u003carighi@develer.com\u003e\nSigned-off-by: Greg Thelen \u003cgthelen@google.com\u003e\nAcked-by: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "29c1f677d424e8c5683a837fc4f03fc9f19201d7",
      "tree": "97f257ab279cc000e02a1a58fa0869fb405f26cd",
      "parents": [
        "22e5c47ee238abe636655c3862ed28d6eb084ad4"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Thu Jan 13 15:47:21 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:48 2011 -0800"
      },
      "message": "mm: migration: use rcu_dereference_protected when dereferencing the radix tree slot during file page migration\n\nmigrate_pages() -\u003e unmap_and_move() only calls rcu_read_lock() for\nanonymous pages, as introduced by git commit\n989f89c57e6361e7d16fbd9572b5da7d313b073d (\"fix rcu_read_lock() in page\nmigraton\").  The point of the RCU protection there is part of getting a\nstable reference to anon_vma and is only held for anon pages as file pages\nare locked which is sufficient protection against freeing.\n\nHowever, while a file page\u0027s mapping is being migrated, the radix tree is\ndouble checked to ensure it is the expected page.  This uses\nradix_tree_deref_slot() -\u003e rcu_dereference() without the RCU lock held\ntriggering the following warning.\n\n[  173.674290] \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[  173.676016] [ INFO: suspicious rcu_dereference_check() usage. ]\n[  173.676016] ---------------------------------------------------\n[  173.676016] include/linux/radix-tree.h:145 invoked rcu_dereference_check() without protection!\n[  173.676016]\n[  173.676016] other info that might help us debug this:\n[  173.676016]\n[  173.676016]\n[  173.676016] rcu_scheduler_active \u003d 1, debug_locks \u003d 0\n[  173.676016] 1 lock held by hugeadm/2899:\n[  173.676016]  #0:  (\u0026(\u0026inode-\u003ei_data.tree_lock)-\u003erlock){..-.-.}, at: [\u003cc10e3d2b\u003e] migrate_page_move_mapping+0x40/0x1ab\n[  173.676016]\n[  173.676016] stack backtrace:\n[  173.676016] Pid: 2899, comm: hugeadm Not tainted 2.6.37-rc5-autobuild\n[  173.676016] Call Trace:\n[  173.676016]  [\u003cc128cc01\u003e] ? printk+0x14/0x1b\n[  173.676016]  [\u003cc1063502\u003e] lockdep_rcu_dereference+0x7d/0x86\n[  173.676016]  [\u003cc10e3db5\u003e] migrate_page_move_mapping+0xca/0x1ab\n[  173.676016]  [\u003cc10e41ad\u003e] migrate_page+0x23/0x39\n[  173.676016]  [\u003cc10e491b\u003e] buffer_migrate_page+0x22/0x107\n[  173.676016]  [\u003cc10e48f9\u003e] ? buffer_migrate_page+0x0/0x107\n[  173.676016]  [\u003cc10e425d\u003e] move_to_new_page+0x9a/0x1ae\n[  173.676016]  [\u003cc10e47e6\u003e] migrate_pages+0x1e7/0x2fa\n\nThis patch introduces radix_tree_deref_slot_protected() which calls\nrcu_dereference_protected().  Users of it must pass in the\nmapping-\u003etree_lock that is protecting this dereference.  Holding the tree\nlock protects against parallel updaters of the radix tree meaning that\nrcu_dereference_protected is allowable.\n\n[akpm@linux-foundation.org: remove unneeded casts]\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Milton Miller \u003cmiltonm@bga.com\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: \u003cstable@kernel.org\u003e\t\t[2.6.37.early]\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "22e5c47ee238abe636655c3862ed28d6eb084ad4",
      "tree": "4a4e7d330cbef6c99a8914de482eb0e8daba2485",
      "parents": [
        "29ad768cfc08611a4c1070d0f13f82eeea2bac7b"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 13 15:47:20 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:48 2011 -0800"
      },
      "message": "thp: add compound_trans_head() helper\n\nCleanup some code with common compound_trans_head helper.\n\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Johannes Weiner \u003cjweiner@redhat.com\u003e\nCc: Marcelo Tosatti \u003cmtosatti@redhat.com\u003e\nCc: Avi Kivity \u003cavi@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": "60ab3244ec85c44276c585a2a20d3750402e1cf4",
      "tree": "e69e866b370243fc58a6fc721e5347a265e8fd4f",
      "parents": [
        "a664b2d8555c659127bf8fe049a58449d394a707"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 13 15:47:18 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:47 2011 -0800"
      },
      "message": "thp: khugepaged: make khugepaged aware about madvise\n\nMADV_HUGEPAGE and MADV_NOHUGEPAGE were fully effective only if run after\nmmap and before touching the memory.  While this is enough for most\nusages, it\u0027s little effort to make madvise more dynamic at runtime on an\nexisting mapping by making khugepaged aware about madvise.\n\nMADV_HUGEPAGE: register in khugepaged immediately without waiting a page\nfault (that may not ever happen if all pages are already mapped and the\n\"enabled\" knob was set to madvise during the initial page faults).\n\nMADV_NOHUGEPAGE: skip vmas marked VM_NOHUGEPAGE in khugepaged to stop\ncollapsing pages where not needed.\n\n[akpm@linux-foundation.org: tweak comment]\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Michael Kerrisk \u003cmtk.manpages@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": "a664b2d8555c659127bf8fe049a58449d394a707",
      "tree": "14771f4ab93a9dda98174f21e0361a77e2aebfa6",
      "parents": [
        "1ddd6db43a08cba56c7ee920800980862086f1c3"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 13 15:47:17 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:47 2011 -0800"
      },
      "message": "thp: madvise(MADV_NOHUGEPAGE)\n\nAdd madvise MADV_NOHUGEPAGE to mark regions that are not important to be\nhugepage backed.  Return -EINVAL if the vma is not of an anonymous type,\nor the feature isn\u0027t built into the kernel.  Never silently return\nsuccess.\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": "1ddd6db43a08cba56c7ee920800980862086f1c3",
      "tree": "696b6d3c44832b08a55de8724b8539dacd96bd4c",
      "parents": [
        "37c2ac7872a9387542616f658d20ac25f5bdb32e"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 13 15:47:17 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:47 2011 -0800"
      },
      "message": "thp: mm: define MADV_NOHUGEPAGE\n\nDefine MADV_NOHUGEPAGE.\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": "37c2ac7872a9387542616f658d20ac25f5bdb32e",
      "tree": "d115915db4a61e261012bf0f9c4cf14630243d71",
      "parents": [
        "91600e9e592e48736e630851c83da2ad6bf0e91f"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 13 15:47:16 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:47 2011 -0800"
      },
      "message": "thp: compound_trans_order\n\nRead compound_trans_order safe. Noop for CONFIG_TRANSPARENT_HUGEPAGE\u003dn.\n\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Daisuke Nishimura \u003cnishimura@mxp.nes.nec.co.jp\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": "2c888cfbc1b45508a44763d85ba2e8ac43faff5f",
      "tree": "9a7f2214e5d6a01d5724ae63d4d50cddeb2293ff",
      "parents": [
        "97562cd243298acf573620c764a1037bd545c9bc"
      ],
      "author": {
        "name": "Rik van Riel",
        "email": "riel@redhat.com",
        "time": "Thu Jan 13 15:47:13 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:46 2011 -0800"
      },
      "message": "thp: fix anon memory statistics with transparent hugepages\n\nCount each transparent hugepage as HPAGE_PMD_NR pages in the LRU\nstatistics, so the Active(anon) and Inactive(anon) statistics in\n/proc/meminfo are correct.\n\nSigned-off-by: Rik van Riel \u003criel@redhat.com\u003e\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": "5a03b051ed87e72b959f32a86054e1142ac4cf55",
      "tree": "31f0e8efb86d48b0292f8a7ea4bd9cf7c930a0ab",
      "parents": [
        "878aee7d6b5504e01b9caffce080e792b6b8d090"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 13 15:47:11 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:46 2011 -0800"
      },
      "message": "thp: use compaction in kswapd for GFP_ATOMIC order \u003e 0\n\nThis takes advantage of memory compaction to properly generate pages of\norder \u003e 0 if regular page reclaim fails and priority level becomes more\nsevere and we don\u0027t reach the proper watermarks.\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": "8ee53820edfd1f3b6554c593f337148dd3d7fc91",
      "tree": "ca69957e928cd3efa1b47f92dcfb00591702684c",
      "parents": [
        "4b7167b9ff9b7f3f528cbc4c7d02ebd275b9b10c"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 13 15:47:10 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:46 2011 -0800"
      },
      "message": "thp: mmu_notifier_test_young\n\nFor GRU and EPT, we need gup-fast to set referenced bit too (this is why\nit\u0027s correct to return 0 when shadow_access_mask is zero, it requires\ngup-fast to set the referenced bit).  qemu-kvm access already sets the\nyoung bit in the pte if it isn\u0027t zero-copy, if it\u0027s zero copy or a shadow\npaging EPT minor fault we relay on gup-fast to signal the page is in\nuse...\n\nWe also need to check the young bits on the secondary pagetables for NPT\nand not nested shadow mmu as the data may never get accessed again by the\nprimary pte.\n\nWithout this closer accuracy, we\u0027d have to remove the heuristic that\navoids collapsing hugepages in hugepage virtual regions that have not even\na single subpage in use.\n\n-\u003etest_young is full backwards compatible with GRU and other usages that\ndon\u0027t have young bits in pagetables set by the hardware and that should\nnuke the secondary mmu mappings when -\u003eclear_flush_young runs just like\nEPT does.\n\nRemoving the heuristic that checks the young bit in\nkhugepaged/collapse_huge_page completely isn\u0027t so bad either probably but\nI thought it was worth it and this makes it reliable.\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": "94fcc585fb85ad7b059c70872489b50044d401f3",
      "tree": "67efce3803149bec77df1f50a06f384deae02ba6",
      "parents": [
        "bc835011afbea3957217ee716093d791fb2fe44f"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 13 15:47:08 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:45 2011 -0800"
      },
      "message": "thp: avoid breaking huge pmd invariants in case of vma_adjust failures\n\nAn huge pmd can only be mapped if the corresponding 2M virtual range is\nfully contained in the vma.  At times the VM calls split_vma twice, if the\nfirst split_vma succeeds and the second fail, the first split_vma remains\nin effect and it\u0027s not rolled back.  For split_vma or vma_adjust to fail\nan allocation failure is needed so it\u0027s a very unlikely event (the out of\nmemory killer would normally fire before any allocation failure is visible\nto kernel and userland and if an out of memory condition happens it\u0027s\nunlikely to happen exactly here).  Nevertheless it\u0027s safer to ensure that\nno huge pmd can be left around if the vma is adjusted in a way that can\u0027t\nfit hugepages anymore at the new vm_start/vm_end address.\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": "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": "cd7548ab360c462118568eebb8c6da3bc303b02e",
      "tree": "44d145e6139c8753659ee773ae35810dc3d92d0b",
      "parents": [
        "b36f5b0710e9e3b92484de32920fddcb17278664"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Thu Jan 13 15:47:04 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:44 2011 -0800"
      },
      "message": "thp: mprotect: transparent huge page support\n\nNatively handle huge pmds when changing page tables on behalf of\nmprotect().\n\nI left out update_mmu_cache() because we do not need it on x86 anyway but\nmore importantly the interface works on ptes, not pmds.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\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": "0ca1634d4143c3579273ca53b993df19f5c98e92",
      "tree": "d566a582357a9e1528d1783566bfda4375c7e566",
      "parents": [
        "f2d6bfe9ff0acec30b713614260e78b03d20e909"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Thu Jan 13 15:47:02 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:44 2011 -0800"
      },
      "message": "thp: mincore transparent hugepage support\n\nHandle transparent huge page pmd entries natively instead of splitting\nthem into subpages.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\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": "f2d6bfe9ff0acec30b713614260e78b03d20e909",
      "tree": "835dd9f4167513d94ae542cf92347ea98bff5ddc",
      "parents": [
        "5f24ce5fd34c3ca1b3d10d30da754732da64d5c0"
      ],
      "author": {
        "name": "Johannes Weiner",
        "email": "hannes@cmpxchg.org",
        "time": "Thu Jan 13 15:47:01 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:44 2011 -0800"
      },
      "message": "thp: add x86 32bit support\n\nAdd support for transparent hugepages to x86 32bit.\n\nShare the same VM_ bitflag for VM_MAPPED_COPY.  mm/nommu.c will never\nsupport transparent hugepages.\n\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\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": "5f24ce5fd34c3ca1b3d10d30da754732da64d5c0",
      "tree": "c82d27461f2adda210e77808b7dd04eaec017f2f",
      "parents": [
        "21ae5b01750f14140809508a478a4413792e0261"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 13 15:47:00 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:43 2011 -0800"
      },
      "message": "thp: remove PG_buddy\n\nPG_buddy can be converted to _mapcount \u003d\u003d -2.  So the PG_compound_lock can\nbe added to page-\u003eflags without overflowing (because of the sparse section\nbits increasing) with CONFIG_X86_PAE\u003dy and CONFIG_X86_PAT\u003dy.  This also\nhas to move the memory hotplug code from _mapcount to lru.next to avoid\nany risk of clashes.  We can\u0027t use lru.next for PG_buddy removal, but\nmemory hotplug can use lru.next even more easily than the mapcount\ninstead.\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": "ba76149f47d8c939efa0acc07a191237af900471",
      "tree": "162990f51dd24984f114cba14fc7169a3b54f0f1",
      "parents": [
        "79134171df238171daa4c024a42b77b401ccb00b"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 13 15:46:58 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:43 2011 -0800"
      },
      "message": "thp: khugepaged\n\nAdd khugepaged to relocate fragmented pages into hugepages if new\nhugepages become available.  (this is indipendent of the defrag logic that\nwill have to make new hugepages available)\n\nThe fundamental reason why khugepaged is unavoidable, is that some memory\ncan be fragmented and not everything can be relocated.  So when a virtual\nmachine quits and releases gigabytes of hugepages, we want to use those\nfreely available hugepages to create huge-pmd in the other virtual\nmachines that may be running on fragmented memory, to maximize the CPU\nefficiency at all times.  The scan is slow, it takes nearly zero cpu time,\nexcept when it copies data (in which case it means we definitely want to\npay for that cpu time) so it seems a good tradeoff.\n\nIn addition to the hugepages being released by other process releasing\nmemory, we have the strong suspicion that the performance impact of\npotentially defragmenting hugepages during or before each page fault could\nlead to more performance inconsistency than allocating small pages at\nfirst and having them collapsed into large pages later...  if they prove\nthemselfs to be long lived mappings (khugepaged scan is slow so short\nlived mappings have low probability to run into khugepaged if compared to\nlong lived mappings).\n\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nAcked-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": "79134171df238171daa4c024a42b77b401ccb00b",
      "tree": "af7872d5851e371d09b9fe7eb80f4809713c79fb",
      "parents": [
        "b9bbfbe30ae088cc88a4b2ba7732baeebd1a0162"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 13 15:46:58 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:43 2011 -0800"
      },
      "message": "thp: transparent hugepage vmstat\n\nAdd hugepage stat information to /proc/vmstat and /proc/meminfo.\n\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nAcked-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": "500d65d471018d9a13b0d51b7e141ed2a3555c1d",
      "tree": "046dc2337f87a1a365fde126fab7f4ac9ae82793",
      "parents": [
        "0af4e98b6b095c74588af04872f83d333c958c32"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 13 15:46:55 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:42 2011 -0800"
      },
      "message": "thp: pmd_trans_huge migrate bugcheck\n\nNo pmd_trans_huge should ever materialize in migration ptes areas, because\nwe split the hugepage before migration ptes are instantiated.\n\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nAcked-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": "0af4e98b6b095c74588af04872f83d333c958c32",
      "tree": "56b1965482470219a8cf11b7e7c875ae91bff46e",
      "parents": [
        "f66055ab6fb9731dbfce320c5202ef4441b5d77f"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 13 15:46:55 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:42 2011 -0800"
      },
      "message": "thp: madvise(MADV_HUGEPAGE)\n\nAdd madvise MADV_HUGEPAGE to mark regions that are important to be\nhugepage backed.  Return -EINVAL if the vma is not of an anonymous type,\nor the feature isn\u0027t built into the kernel.  Never silently return\nsuccess.\n\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nAcked-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": "71e3aac0724ffe8918992d76acfe3aad7d8724a5",
      "tree": "4ff96e1fc3e53bc9d25b859bf7e5bdbab8f1b25a",
      "parents": [
        "5c3240d92e29ae7bfb9cb58a9b37e80ab40894ff"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 13 15:46:52 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:42 2011 -0800"
      },
      "message": "thp: transparent hugepage core\n\nLately I\u0027ve been working to make KVM use hugepages transparently without\nthe usual restrictions of hugetlbfs.  Some of the restrictions I\u0027d like to\nsee removed:\n\n1) hugepages have to be swappable or the guest physical memory remains\n   locked in RAM and can\u0027t be paged out to swap\n\n2) if a hugepage allocation fails, regular pages should be allocated\n   instead and mixed in the same vma without any failure and without\n   userland noticing\n\n3) if some task quits and more hugepages become available in the\n   buddy, guest physical memory backed by regular pages should be\n   relocated on hugepages automatically in regions under\n   madvise(MADV_HUGEPAGE) (ideally event driven by waking up the\n   kernel deamon if the order\u003dHPAGE_PMD_SHIFT-PAGE_SHIFT list becomes\n   not null)\n\n4) avoidance of reservation and maximization of use of hugepages whenever\n   possible. Reservation (needed to avoid runtime fatal faliures) may be ok for\n   1 machine with 1 database with 1 database cache with 1 database cache size\n   known at boot time. It\u0027s definitely not feasible with a virtualization\n   hypervisor usage like RHEV-H that runs an unknown number of virtual machines\n   with an unknown size of each virtual machine with an unknown amount of\n   pagecache that could be potentially useful in the host for guest not using\n   O_DIRECT (aka cache\u003doff).\n\nhugepages in the virtualization hypervisor (and also in the guest!) are\nmuch more important than in a regular host not using virtualization,\nbecasue with NPT/EPT they decrease the tlb-miss cacheline accesses from 24\nto 19 in case only the hypervisor uses transparent hugepages, and they\ndecrease the tlb-miss cacheline accesses from 19 to 15 in case both the\nlinux hypervisor and the linux guest both uses this patch (though the\nguest will limit the addition speedup to anonymous regions only for\nnow...).  Even more important is that the tlb miss handler is much slower\non a NPT/EPT guest than for a regular shadow paging or no-virtualization\nscenario.  So maximizing the amount of virtual memory cached by the TLB\npays off significantly more with NPT/EPT than without (even if there would\nbe no significant speedup in the tlb-miss runtime).\n\nThe first (and more tedious) part of this work requires allowing the VM to\nhandle anonymous hugepages mixed with regular pages transparently on\nregular anonymous vmas.  This is what this patch tries to achieve in the\nleast intrusive possible way.  We want hugepages and hugetlb to be used in\na way so that all applications can benefit without changes (as usual we\nleverage the KVM virtualization design: by improving the Linux VM at\nlarge, KVM gets the performance boost too).\n\nThe most important design choice is: always fallback to 4k allocation if\nthe hugepage allocation fails!  This is the _very_ opposite of some large\npagecache patches that failed with -EIO back then if a 64k (or similar)\nallocation failed...\n\nSecond important decision (to reduce the impact of the feature on the\nexisting pagetable handling code) is that at any time we can split an\nhugepage into 512 regular pages and it has to be done with an operation\nthat can\u0027t fail.  This way the reliability of the swapping isn\u0027t decreased\n(no need to allocate memory when we are short on memory to swap) and it\u0027s\ntrivial to plug a split_huge_page* one-liner where needed without\npolluting the VM.  Over time we can teach mprotect, mremap and friends to\nhandle pmd_trans_huge natively without calling split_huge_page*.  The fact\nit can\u0027t fail isn\u0027t just for swap: if split_huge_page would return -ENOMEM\n(instead of the current void) we\u0027d need to rollback the mprotect from the\nmiddle of it (ideally including undoing the split_vma) which would be a\nbig change and in the very wrong direction (it\u0027d likely be simpler not to\ncall split_huge_page at all and to teach mprotect and friends to handle\nhugepages instead of rolling them back from the middle).  In short the\nvery value of split_huge_page is that it can\u0027t fail.\n\nThe collapsing and madvise(MADV_HUGEPAGE) part will remain separated and\nincremental and it\u0027ll just be an \"harmless\" addition later if this initial\npart is agreed upon.  It also should be noted that locking-wise replacing\nregular pages with hugepages is going to be very easy if compared to what\nI\u0027m doing below in split_huge_page, as it will only happen when\npage_count(page) matches page_mapcount(page) if we can take the PG_lock\nand mmap_sem in write mode.  collapse_huge_page will be a \"best effort\"\nthat (unlike split_huge_page) can fail at the minimal sign of trouble and\nwe can try again later.  collapse_huge_page will be similar to how KSM\nworks and the madvise(MADV_HUGEPAGE) will work similar to\nmadvise(MADV_MERGEABLE).\n\nThe default I like is that transparent hugepages are used at page fault\ntime.  This can be changed with\n/sys/kernel/mm/transparent_hugepage/enabled.  The control knob can be set\nto three values \"always\", \"madvise\", \"never\" which mean respectively that\nhugepages are always used, or only inside madvise(MADV_HUGEPAGE) regions,\nor never used.  /sys/kernel/mm/transparent_hugepage/defrag instead\ncontrols if the hugepage allocation should defrag memory aggressively\n\"always\", only inside \"madvise\" regions, or \"never\".\n\nThe pmd_trans_splitting/pmd_trans_huge locking is very solid.  The\nput_page (from get_user_page users that can\u0027t use mmu notifier like\nO_DIRECT) that runs against a __split_huge_page_refcount instead was a\npain to serialize in a way that would result always in a coherent page\ncount for both tail and head.  I think my locking solution with a\ncompound_lock taken only after the page_first is valid and is still a\nPageHead should be safe but it surely needs review from SMP race point of\nview.  In short there is no current existing way to serialize the O_DIRECT\nfinal put_page against split_huge_page_refcount so I had to invent a new\none (O_DIRECT loses knowledge on the mapping status by the time gup_fast\nreturns so...).  And I didn\u0027t want to impact all gup/gup_fast users for\nnow, maybe if we change the gup interface substantially we can avoid this\nlocking, I admit I didn\u0027t think too much about it because changing the gup\nunpinning interface would be invasive.\n\nIf we ignored O_DIRECT we could stick to the existing compound refcounting\ncode, by simply adding a get_user_pages_fast_flags(foll_flags) where KVM\n(and any other mmu notifier user) would call it without FOLL_GET (and if\nFOLL_GET isn\u0027t set we\u0027d just BUG_ON if nobody registered itself in the\ncurrent task mmu notifier list yet).  But O_DIRECT is fundamental for\ndecent performance of virtualized I/O on fast storage so we can\u0027t avoid it\nto solve the race of put_page against split_huge_page_refcount to achieve\na complete hugepage feature for KVM.\n\nSwap and oom works fine (well just like with regular pages ;).  MMU\nnotifier is handled transparently too, with the exception of the young bit\non the pmd, that didn\u0027t have a range check but I think KVM will be fine\nbecause the whole point of hugepages is that EPT/NPT will also use a huge\npmd when they notice gup returns pages with PageCompound set, so they\nwon\u0027t care of a range and there\u0027s just the pmd young bit to check in that\ncase.\n\nNOTE: in some cases if the L2 cache is small, this may slowdown and waste\nmemory during COWs because 4M of memory are accessed in a single fault\ninstead of 8k (the payoff is that after COW the program can run faster).\nSo we might want to switch the copy_huge_page (and clear_huge_page too) to\nnot temporal stores.  I also extensively researched ways to avoid this\ncache trashing with a full prefault logic that would cow in 8k/16k/32k/64k\nup to 1M (I can send those patches that fully implemented prefault) but I\nconcluded they\u0027re not worth it and they add an huge additional complexity\nand they remove all tlb benefits until the full hugepage has been faulted\nin, to save a little bit of memory and some cache during app startup, but\nthey still don\u0027t improve substantially the cache-trashing during startup\nif the prefault happens in \u003e4k chunks.  One reason is that those 4k pte\nentries copied are still mapped on a perfectly cache-colored hugepage, so\nthe trashing is the worst one can generate in those copies (cow of 4k page\ncopies aren\u0027t so well colored so they trashes less, but again this results\nin software running faster after the page fault).  Those prefault patches\nallowed things like a pte where post-cow pages were local 4k regular anon\npages and the not-yet-cowed pte entries were pointing in the middle of\nsome hugepage mapped read-only.  If it doesn\u0027t payoff substantially with\ntodays hardware it will payoff even less in the future with larger l2\ncaches, and the prefault logic would blot the VM a lot.  If one is\nemebdded transparent_hugepage can be disabled during boot with sysfs or\nwith the boot commandline parameter transparent_hugepage\u003d0 (or\ntransparent_hugepage\u003d2 to restrict hugepages inside madvise regions) that\nwill ensure not a single hugepage is allocated at boot time.  It is simple\nenough to just disable transparent hugepage globally and let transparent\nhugepages be allocated selectively by applications in the MADV_HUGEPAGE\nregion (both at page fault time, and if enabled with the\ncollapse_huge_page too through the kernel daemon).\n\nThis patch supports only hugepages mapped in the pmd, archs that have\nsmaller hugepages will not fit in this patch alone.  Also some archs like\npower have certain tlb limits that prevents mixing different page size in\nthe same regions so they will not fit in this framework that requires\n\"graceful fallback\" to basic PAGE_SIZE in case of physical memory\nfragmentation.  hugetlbfs remains a perfect fit for those because its\nsoftware limits happen to match the hardware limits.  hugetlbfs also\nremains a perfect fit for hugepage sizes like 1GByte that cannot be hoped\nto be found not fragmented after a certain system uptime and that would be\nvery expensive to defragment with relocation, so requiring reservation.\nhugetlbfs is the \"reservation way\", the point of transparent hugepages is\nnot to have any reservation at all and maximizing the use of cache and\nhugepages at all times automatically.\n\nSome performance result:\n\nvmx andrea # LD_PRELOAD\u003d/usr/lib64/libhugetlbfs.so HUGETLB_MORECORE\u003dyes HUGETLB_PATH\u003d/mnt/huge/ ./largep\nages3\nmemset page fault 1566023\nmemset tlb miss 453854\nmemset second tlb miss 453321\nrandom access tlb miss 41635\nrandom access second tlb miss 41658\nvmx andrea # LD_PRELOAD\u003d/usr/lib64/libhugetlbfs.so HUGETLB_MORECORE\u003dyes HUGETLB_PATH\u003d/mnt/huge/ ./largepages3\nmemset page fault 1566471\nmemset tlb miss 453375\nmemset second tlb miss 453320\nrandom access tlb miss 41636\nrandom access second tlb miss 41637\nvmx andrea # ./largepages3\nmemset page fault 1566642\nmemset tlb miss 453417\nmemset second tlb miss 453313\nrandom access tlb miss 41630\nrandom access second tlb miss 41647\nvmx andrea # ./largepages3\nmemset page fault 1566872\nmemset tlb miss 453418\nmemset second tlb miss 453315\nrandom access tlb miss 41618\nrandom access second tlb miss 41659\nvmx andrea # echo 0 \u003e /proc/sys/vm/transparent_hugepage\nvmx andrea # ./largepages3\nmemset page fault 2182476\nmemset tlb miss 460305\nmemset second tlb miss 460179\nrandom access tlb miss 44483\nrandom access second tlb miss 44186\nvmx andrea # ./largepages3\nmemset page fault 2182791\nmemset tlb miss 460742\nmemset second tlb miss 459962\nrandom access tlb miss 43981\nrandom access second tlb miss 43988\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n#include \u003cstdio.h\u003e\n#include \u003cstdlib.h\u003e\n#include \u003cstring.h\u003e\n#include \u003csys/time.h\u003e\n\n#define SIZE (3UL*1024*1024*1024)\n\nint main()\n{\n\tchar *p \u003d malloc(SIZE), *p2;\n\tstruct timeval before, after;\n\n\tgettimeofday(\u0026before, NULL);\n\tmemset(p, 0, SIZE);\n\tgettimeofday(\u0026after, NULL);\n\tprintf(\"memset page fault %Lu\\n\",\n\t       (after.tv_sec-before.tv_sec)*1000000UL +\n\t       after.tv_usec-before.tv_usec);\n\n\tgettimeofday(\u0026before, NULL);\n\tmemset(p, 0, SIZE);\n\tgettimeofday(\u0026after, NULL);\n\tprintf(\"memset tlb miss %Lu\\n\",\n\t       (after.tv_sec-before.tv_sec)*1000000UL +\n\t       after.tv_usec-before.tv_usec);\n\n\tgettimeofday(\u0026before, NULL);\n\tmemset(p, 0, SIZE);\n\tgettimeofday(\u0026after, NULL);\n\tprintf(\"memset second tlb miss %Lu\\n\",\n\t       (after.tv_sec-before.tv_sec)*1000000UL +\n\t       after.tv_usec-before.tv_usec);\n\n\tgettimeofday(\u0026before, NULL);\n\tfor (p2 \u003d p; p2 \u003c p+SIZE; p2 +\u003d 4096)\n\t\t*p2 \u003d 0;\n\tgettimeofday(\u0026after, NULL);\n\tprintf(\"random access tlb miss %Lu\\n\",\n\t       (after.tv_sec-before.tv_sec)*1000000UL +\n\t       after.tv_usec-before.tv_usec);\n\n\tgettimeofday(\u0026before, NULL);\n\tfor (p2 \u003d p; p2 \u003c p+SIZE; p2 +\u003d 4096)\n\t\t*p2 \u003d 0;\n\tgettimeofday(\u0026after, NULL);\n\tprintf(\"random access second tlb miss %Lu\\n\",\n\t       (after.tv_sec-before.tv_sec)*1000000UL +\n\t       after.tv_usec-before.tv_usec);\n\n\treturn 0;\n}\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "32dba98e085f8b2b4345887df9abf5e0e93bfc12",
      "tree": "6789196797350911a1c370ce909bfde2556ccfc4",
      "parents": [
        "936a5fe6e6148c0b3ea0d792b903847d9b9931a1"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 13 15:46:49 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:41 2011 -0800"
      },
      "message": "thp: _GFP_NO_KSWAPD\n\nTransparent hugepage allocations must be allowed not to invoke kswapd or\nany other kind of indirect reclaim (especially when the defrag sysfs is\ncontrol disabled).  It\u0027s unacceptable to swap out anonymous pages\n(potentially anonymous transparent hugepages) in order to create new\ntransparent hugepages.  This is true for the MADV_HUGEPAGE areas too\n(swapping out a kvm virtual machine and so having it suffer an unbearable\nslowdown, so another one with guest physical memory marked MADV_HUGEPAGE\ncan run 30% faster if it is running memory intensive workloads, makes no\nsense).  If a transparent hugepage allocation fails the slowdown is minor\nand there is total fallback, so kswapd should never be asked to swapout\nmemory to allow the high order allocation to succeed.\n\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "936a5fe6e6148c0b3ea0d792b903847d9b9931a1",
      "tree": "f0326a5877a89251ff2cb727d5e832e911ed1d18",
      "parents": [
        "47ad8475c000141eacb3ecda5e5ce4b43a9cd04d"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 13 15:46:48 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:41 2011 -0800"
      },
      "message": "thp: kvm mmu transparent hugepage support\n\nThis should work for both hugetlbfs and transparent hugepages.\n\n[akpm@linux-foundation.org: bring forward PageTransCompound() addition for bisectability]\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Avi Kivity \u003cavi@redhat.com\u003e\nCc: Marcelo Tosatti \u003cmtosatti@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": "47ad8475c000141eacb3ecda5e5ce4b43a9cd04d",
      "tree": "78c29aaf2ae9340e314a25ea08e9724471cf4414",
      "parents": [
        "3f04f62f90d46a82dd73027c5fd7a15daed5c33d"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 13 15:46:47 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:41 2011 -0800"
      },
      "message": "thp: clear_copy_huge_page\n\nMove the copy/clear_huge_page functions to common code to share between\nhugetlb.c and huge_memory.c.\n\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e7a00c45f29c0155007aa150bf231a70fa470365",
      "tree": "3225a79905dede614ed44e98776cdc6285bbd28a",
      "parents": [
        "4e6af67e970a2ac287739a4c526c857b5bda27ec"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 13 15:46:45 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:41 2011 -0800"
      },
      "message": "thp: add pmd_huge_pte to mm_struct\n\nThis increase the size of the mm struct a bit but it is needed to\npreallocate one pte for each hugepage so that split_huge_page will not\nrequire a fail path.  Guarantee of success is a fundamental property of\nsplit_huge_page to avoid decrasing swapping reliability and to avoid\nadding -ENOMEM fail paths that would otherwise force the hugepage-unaware\nVM code to learn rolling back in the middle of its pte mangling operations\n(if something we need it to learn handling pmd_trans_huge natively rather\nbeing capable of rollback).  When split_huge_page runs a pte is needed to\nsucceed the split, to map the newly splitted regular pages with a regular\npte.  This way all existing VM code remains backwards compatible by just\nadding a split_huge_page* one liner.  The memory waste of those\npreallocated ptes is negligible and so it is worth it.\n\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4e6af67e970a2ac287739a4c526c857b5bda27ec",
      "tree": "2de1bcb20fb3ff136d6b65a651d06a572bfd677d",
      "parents": [
        "91a4ee2670e0ee2b0630a0eb24fb9a87ea3acd0a"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 13 15:46:44 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:41 2011 -0800"
      },
      "message": "thp: clear page compound\n\nsplit_huge_page must transform a compound page to a regular page and needs\nClearPageCompound.\n\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nReviewed-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "91a4ee2670e0ee2b0630a0eb24fb9a87ea3acd0a",
      "tree": "28b3fa3535295544928329290c365eecc5a770d2",
      "parents": [
        "8ac1f8320a0073f28cf9e0491af4cd98f504f92a"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 13 15:46:44 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:41 2011 -0800"
      },
      "message": "thp: add pmd mmu_notifier helpers\n\nAdd mmu notifier helpers to handle pmd huge operations.\n\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nAcked-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": "8ac1f8320a0073f28cf9e0491af4cd98f504f92a",
      "tree": "4dad891c302587fdc7b099b18e05d7dbc5526c64",
      "parents": [
        "64cc6ae001d70bc59e5f854e6b5678f59110df16"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 13 15:46:43 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:40 2011 -0800"
      },
      "message": "thp: pte alloc trans splitting\n\npte alloc routines must wait for split_huge_page if the pmd is not present\nand not null (i.e.  pmd_trans_splitting).  The additional branches are\noptimized away at compile time by pmd_trans_splitting if the config option\nis off.  However we must pass the vma down in order to know the anon_vma\nlock to wait for.\n\n[akpm@linux-foundation.org: coding-style fixes]\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e2cda322648122dc400c85ada80eaddbc612ef6a",
      "tree": "016981ea6d9d3f7448bd9e04720184b14a79302c",
      "parents": [
        "5f6e8da70a289d403975907371ce5738c726ad3f"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 13 15:46:40 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:40 2011 -0800"
      },
      "message": "thp: add pmd mangling generic functions\n\nSome are needed to build but not actually used on archs not supporting\ntransparent hugepages.  Others like pmdp_clear_flush are used by x86 too.\n\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5f6e8da70a289d403975907371ce5738c726ad3f",
      "tree": "c44705a17d4133a8d4a8d02dae9bb5487c3bc2a6",
      "parents": [
        "4c76d9d1fb9b21fa10c9e4c1fab2875018a88aa1"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 13 15:46:40 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:40 2011 -0800"
      },
      "message": "thp: special pmd_trans_* functions\n\nThese returns 0 at compile time when the config option is disabled, to\nallow gcc to eliminate the transparent hugepage function calls at compile\ntime without additional #ifdefs (only the export of those functions have\nto be visible to gcc but they won\u0027t be required at link time and\nhuge_memory.o can be not built at all).\n\n_PAGE_BIT_UNUSED1 is never used for pmd, only on pte.\n\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "14fd403f2146f740942d78af4e0ee59396ad8eab",
      "tree": "c87734f6c6639684208d36548aa3687c6f460e23",
      "parents": [
        "2609ae6d10af0531e826335bd1445d1ace17c847"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 13 15:46:37 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:39 2011 -0800"
      },
      "message": "thp: export maybe_mkwrite\n\nhuge_memory.c needs it too when it fallbacks in copying hugepages into\nregular fragmented pages if hugepage allocation fails during COW.\n\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9180706344487700b40da9eca5dedd3d11cb33b4",
      "tree": "eb0347efe7e40adc78a271752c7382aa67875d6a",
      "parents": [
        "e9da73d67729b58bba256123e2b4651e0d8a01ac"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 13 15:46:32 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:39 2011 -0800"
      },
      "message": "thp: alter compound get_page/put_page\n\nAlter compound get_page/put_page to keep references on subpages too, in\norder to allow __split_huge_page_refcount to split an hugepage even while\nsubpages have been pinned by one of the get_user_pages() variants.\n\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e9da73d67729b58bba256123e2b4651e0d8a01ac",
      "tree": "5e7f8c4d394d625f7832cbd04a8d55f9f0cd0d95",
      "parents": [
        "a826e422420b461a6247137c292ff83c4800354a"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 13 15:46:32 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:38 2011 -0800"
      },
      "message": "thp: compound_lock\n\nAdd a new compound_lock() needed to serialize put_page against\n__split_huge_page_refcount().\n\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nAcked-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": "a826e422420b461a6247137c292ff83c4800354a",
      "tree": "803e3aeb39606e2fe58daa238c454b335aa25cbc",
      "parents": [
        "1c9bf22c09ae14d65225d9b9619b2eb357350cd7"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Jan 13 15:46:31 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:38 2011 -0800"
      },
      "message": "thp: mm: define MADV_HUGEPAGE\n\nDefine MADV_HUGEPAGE.\n\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Arnd Bergmann \u003carnd@arndb.de\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": "9950474883e027e6e728cbcff25f7f2bf0c96530",
      "tree": "ecfdd3e68a25f1ef7822428c44f8375efbe9bc0c",
      "parents": [
        "c585a2678d83ba8fb02fa6b197de0ac7d67377f1"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Thu Jan 13 15:46:20 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:37 2011 -0800"
      },
      "message": "mm: kswapd: stop high-order balancing when any suitable zone is balanced\n\nSimon Kirby reported the following problem\n\n   We\u0027re seeing cases on a number of servers where cache never fully\n   grows to use all available memory.  Sometimes we see servers with 4 GB\n   of memory that never seem to have less than 1.5 GB free, even with a\n   constantly-active VM.  In some cases, these servers also swap out while\n   this happens, even though they are constantly reading the working set\n   into memory.  We have been seeing this happening for a long time; I\n   don\u0027t think it\u0027s anything recent, and it still happens on 2.6.36.\n\nAfter some debugging work by Simon, Dave Hansen and others, the prevaling\ntheory became that kswapd is reclaiming order-3 pages requested by SLUB\ntoo aggressive about it.\n\nThere are two apparent problems here.  On the target machine, there is a\nsmall Normal zone in comparison to DMA32.  As kswapd tries to balance all\nzones, it would continually try reclaiming for Normal even though DMA32\nwas balanced enough for callers.  The second problem is that\nsleeping_prematurely() does not use the same logic as balance_pgdat() when\ndeciding whether to sleep or not.  This keeps kswapd artifically awake.\n\nA number of tests were run and the figures from previous postings will\nlook very different for a few reasons.  One, the old figures were forcing\nmy network card to use GFP_ATOMIC in attempt to replicate Simon\u0027s problem.\n Second, I previous specified slub_min_order\u003d3 again in an attempt to\nreproduce Simon\u0027s problem.  In this posting, I\u0027m depending on Simon to say\nwhether his problem is fixed or not and these figures are to show the\nimpact to the ordinary cases.  Finally, the \"vmscan\" figures are taken\nfrom /proc/vmstat instead of the tracepoints.  There is less information\nbut recording is less disruptive.\n\nThe first test of relevance was postmark with a process running in the\nbackground reading a large amount of anonymous memory in blocks.  The\nobjective was to vaguely simulate what was happening on Simon\u0027s machine\nand it\u0027s memory intensive enough to have kswapd awake.\n\nPOSTMARK\n                                            traceonly          kanyzone\nTransactions per second:              156.00 ( 0.00%)   153.00 (-1.96%)\nData megabytes read per second:        21.51 ( 0.00%)    21.52 ( 0.05%)\nData megabytes written per second:     29.28 ( 0.00%)    29.11 (-0.58%)\nFiles created alone per second:       250.00 ( 0.00%)   416.00 (39.90%)\nFiles create/transact per second:      79.00 ( 0.00%)    76.00 (-3.95%)\nFiles deleted alone per second:       520.00 ( 0.00%)   420.00 (-23.81%)\nFiles delete/transact per second:      79.00 ( 0.00%)    76.00 (-3.95%)\n\nMMTests Statistics: duration\nUser/Sys Time Running Test (seconds)         16.58      17.4\nTotal Elapsed Time (seconds)                218.48    222.47\n\nVMstat Reclaim Statistics: vmscan\nDirect reclaims                                  0          4\nDirect reclaim pages scanned                     0        203\nDirect reclaim pages reclaimed                   0        184\nKswapd pages scanned                        326631     322018\nKswapd pages reclaimed                      312632     309784\nKswapd low wmark quickly                         1          4\nKswapd high wmark quickly                      122        475\nKswapd skip congestion_wait                      1          0\nPages activated                             700040     705317\nPages deactivated                           212113     203922\nPages written                                 9875       6363\n\nTotal pages scanned                         326631    322221\nTotal pages reclaimed                       312632    309968\n%age total pages scanned/reclaimed          95.71%    96.20%\n%age total pages scanned/written             3.02%     1.97%\n\nproc vmstat: Faults\nMajor Faults                                   300       254\nMinor Faults                                645183    660284\nPage ins                                    493588    486704\nPage outs                                  4960088   4986704\nSwap ins                                      1230       661\nSwap outs                                     9869      6355\n\nPerformance is mildly affected because kswapd is no longer doing as much\nwork and the background memory consumer process is getting in the way.\nNote that kswapd scanned and reclaimed fewer pages as it\u0027s less aggressive\nand overall fewer pages were scanned and reclaimed.  Swap in/out is\nparticularly reduced again reflecting kswapd throwing out fewer pages.\n\nThe slight performance impact is unfortunate here but it looks like a\ndirect result of kswapd being less aggressive.  As the bug report is about\ntoo many pages being freed by kswapd, it may have to be accepted for now.\n\nThe second test is a streaming IO benchmark that was previously used by\nJohannes to show regressions in page reclaim.\n\nMICRO\n\t\t\t\t\t traceonly  kanyzone\nUser/Sys Time Running Test (seconds)         29.29     28.87\nTotal Elapsed Time (seconds)                492.18    488.79\n\nVMstat Reclaim Statistics: vmscan\nDirect reclaims                               2128       1460\nDirect reclaim pages scanned               2284822    1496067\nDirect reclaim pages reclaimed              148919     110937\nKswapd pages scanned                      15450014   16202876\nKswapd pages reclaimed                     8503697    8537897\nKswapd low wmark quickly                      3100       3397\nKswapd high wmark quickly                     1860       7243\nKswapd skip congestion_wait                    708        801\nPages activated                               9635       9573\nPages deactivated                             1432       1271\nPages written                                  223       1130\n\nTotal pages scanned                       17734836  17698943\nTotal pages reclaimed                      8652616   8648834\n%age total pages scanned/reclaimed          48.79%    48.87%\n%age total pages scanned/written             0.00%     0.01%\n\nproc vmstat: Faults\nMajor Faults                                   165       221\nMinor Faults                               9655785   9656506\nPage ins                                      3880      7228\nPage outs                                 37692940  37480076\nSwap ins                                         0        69\nSwap outs                                       19        15\n\nAgain fewer pages are scanned and reclaimed as expected and this time the\ntest completed faster.  Note that kswapd is hitting its watermarks faster\n(low and high wmark quickly) which I expect is due to kswapd reclaiming\nfewer pages.\n\nI also ran fs-mark, iozone and sysbench but there is nothing interesting\nto report in the figures.  Performance is not significantly changed and\nthe reclaim statistics look reasonable.\n\nTgis patch:\n\nWhen the allocator enters its slow path, kswapd is woken up to balance the\nnode.  It continues working until all zones within the node are balanced.\nFor order-0 allocations, this makes perfect sense but for higher orders it\ncan have unintended side-effects.  If the zone sizes are imbalanced,\nkswapd may reclaim heavily within a smaller zone discarding an excessive\nnumber of pages.  The user-visible behaviour is that kswapd is awake and\nreclaiming even though plenty of pages are free from a suitable zone.\n\nThis patch alters the \"balance\" logic for high-order reclaim allowing\nkswapd to stop if any suitable zone becomes balanced to reduce the number\nof pages it reclaims from other zones.  kswapd still tries to ensure that\norder-0 watermarks for all zones are met before sleeping.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReviewed-by: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nReviewed-by: Eric B Munson \u003cemunson@mgebm.net\u003e\nCc: Simon Kirby \u003csim@hostway.ca\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Shaohua Li \u003cshaohua.li@intel.com\u003e\nCc: Dave Hansen \u003cdave@linux.vnet.ibm.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\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": "e20e87795834f2f14cb53baf657b91d9c39f92c8",
      "tree": "0ec2c10b0ed4cb572c73153b56c017db536bc056",
      "parents": [
        "088e54658f559a13c2b988086512d76fe9e8f846"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Thu Jan 13 15:46:17 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:36 2011 -0800"
      },
      "message": "mm: remove unlikely() from page_mapping()\n\npage_mapping() has a unlikely that the mapping has PAGE_MAPPING_ANON set.\nBut running the annotated branch profiler on a normal desktop system doing\nvairous tasks (xchat, evolution, firefox, distcc), it is not really that\nunlikely that the mapping here will have the PAGE_MAPPING_ANON flag set:\n\n correct incorrect  %        Function                  File              Line\n ------- ---------  -        --------                  ----              ----\n35935762 1270265395  97 page_mapping                   mm.h                 659\n1306198001   143659   0 page_mapping                   mm.h                 657\n203131478   121586   0 page_mapping                   mm.h                 657\n 5415491     1116   0 page_mapping                   mm.h                 657\n74899487     1116   0 page_mapping                   mm.h                 657\n203132845      224   0 page_mapping                   mm.h                 659\n 5415464       27   0 page_mapping                   mm.h                 659\n   13552        0   0 page_mapping                   mm.h                 657\n   13552        0   0 page_mapping                   mm.h                 659\n  242630        0   0 page_mapping                   mm.h                 657\n  242630        0   0 page_mapping                   mm.h                 659\n74899487        0   0 page_mapping                   mm.h                 659\n\nThe page_mapping() is a static inline, which is why it shows up multiple\ntimes.\n\nThe unlikely in page_mapping() was correct a total of 1909540379 times and\nincorrect 1270533123 times, with a 39% being incorrect.  With this much of\nan error, it\u0027s best to simply remove the unlikely and have the compiler\nand branch prediction figure this out.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Nick Piggin \u003cnpiggin@kernel.dk\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": "088e54658f559a13c2b988086512d76fe9e8f846",
      "tree": "35a5e0f82186dfa740751ec33f2fcdd90e347b0b",
      "parents": [
        "ddf9c6d472825ceda66b3adff0f6437dbcd37f71"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Thu Jan 13 15:46:16 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:36 2011 -0800"
      },
      "message": "mm: remove likely() from mapping_unevictable()\n\nThe mapping_unevictable() has a likely() around the mapping parameter.\nThis mapping parameter comes from page_mapping() which has an unlikely()\nthat the page will be set as PAGE_MAPPING_ANON, and if so, it will return\nNULL.  One would think that this unlikely() means that the mapping\nreturned by page_mapping() would not be NULL, but where page_mapping() is\nused just above mapping_unevictable(), that unlikely() is incorrect most\nof the time.  This means that the \"likely(mapping)\" in\nmapping_unevictable() is incorrect most of the time.\n\nRunning the annotated branch profiler on my main box which runs firefox,\nevolution, xchat and is part of my distcc farm, I had this:\n\n correct incorrect  %        Function                  File              Line\n ------- ---------  -        --------                  ----              ----\n12872836 1269443893  98 mapping_unevictable            pagemap.h            51\n35935762 1270265395  97 page_mapping                   mm.h                 659\n1306198001   143659   0 page_mapping                   mm.h                 657\n203131478   121586   0 page_mapping                   mm.h                 657\n 5415491     1116   0 page_mapping                   mm.h                 657\n74899487     1116   0 page_mapping                   mm.h                 657\n203132845      224   0 page_mapping                   mm.h                 659\n 5415464       27   0 page_mapping                   mm.h                 659\n   13552        0   0 page_mapping                   mm.h                 657\n   13552        0   0 page_mapping                   mm.h                 659\n  242630        0   0 page_mapping                   mm.h                 657\n  242630        0   0 page_mapping                   mm.h                 659\n74899487        0   0 page_mapping                   mm.h                 659\n\nThe page_mapping() is a static inline, which is why it shows up multiple\ntimes.  The mapping_unevictable() is also a static inline but seems to be\nused only once in my setup.\n\nThe unlikely in page_mapping() was correct a total of 1909540379 times and\nincorrect 1270533123 times, with a 39% being incorrect.  Perhaps this is\nenough to remove the unlikely from page_mapping() as well.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\nReviewed-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nAcked-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\nAcked-by: 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": "110d74a921f4d272b47ef6104fcf937df808f4c8",
      "tree": "a2f1705e049f06e1cf8cbaf7d6b3261f0b46b6ab",
      "parents": [
        "fed067da46ad3b9acedaf794a5f05d0bc153280b"
      ],
      "author": {
        "name": "Michel Lespinasse",
        "email": "walken@google.com",
        "time": "Thu Jan 13 15:46:11 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:36 2011 -0800"
      },
      "message": "mm: add FOLL_MLOCK follow_page flag.\n\nMove the code to mlock pages from __mlock_vma_pages_range() to\nfollow_page().\n\nThis allows __mlock_vma_pages_range() to not have to break down work into\n16-page batches.\n\nAn additional motivation for doing this within the present patch series is\nthat it\u0027ll make it easier for a later chagne to drop mmap_sem when\nblocking on disk (we\u0027d like to be able to resume at the page that was read\nfrom disk instead of at the start of a 16-page batch).\n\nSigned-off-by: Michel Lespinasse \u003cwalken@google.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Nick Piggin \u003cnpiggin@kernel.dk\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: \"H. Peter Anvin\" \u003chpa@zytor.com\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: David Howells \u003cdhowells@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": "212260aa07135b327752dc02625c68cf4ce04caf",
      "tree": "7ea25dddf5f69e91ec4b3d22f940e6c9604c7f93",
      "parents": [
        "dabb16f639820267b3850d804571c70bd93d4e07"
      ],
      "author": {
        "name": "Rik van Riel",
        "email": "riel@redhat.com",
        "time": "Thu Jan 13 15:46:06 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:35 2011 -0800"
      },
      "message": "mm: clear PageError bit in msync \u0026 fsync\n\nTemporary IO failures, eg.  due to loss of both multipath paths, can\npermanently leave the PageError bit set on a page, resulting in msync or\nfsync returning -EIO over and over again, even if IO is now getting to the\ndisk correctly.\n\nWe already clear the AS_ENOSPC and AS_IO bits in mapping-\u003eflags in the\nfilemap_fdatawait_range function.  Also clearing the PageError bit on the\npage allows subsequent msync or fsync calls on this file to return without\nan error, if the subsequent IO succeeds.\n\nUnfortunately data written out in the msync or fsync call that returned\n-EIO can still get lost, because the page dirty bit appears to not get\nrestored on IO error.  However, the alternative could be potentially all\nof memory filling up with uncleanable dirty pages, hanging the system, so\nthere is no nice choice here...\n\nSigned-off-by: Rik van Riel \u003criel@redhat.com\u003e\nAcked-by: Valerie Aurora \u003cvaurora@redhat.com\u003e\nAcked-by: Jeff Layton \u003cjlayton@redhat.com\u003e\nCc: Theodore Ts\u0027o \u003ctytso@mit.edu\u003e\nAcked-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "dabb16f639820267b3850d804571c70bd93d4e07",
      "tree": "7da59e6133cd2f820389574ac9206c56e046f5d4",
      "parents": [
        "d0a21265dfb5fa8ae54e90d0fb6d1c215b10a28a"
      ],
      "author": {
        "name": "Mandeep Singh Baines",
        "email": "msb@chromium.org",
        "time": "Thu Jan 13 15:46:05 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:35 2011 -0800"
      },
      "message": "oom: allow a non-CAP_SYS_RESOURCE proces to oom_score_adj down\n\nWe\u0027d like to be able to oom_score_adj a process up/down as it\nenters/leaves the foreground.  Currently, it is not possible to oom_adj\ndown without CAP_SYS_RESOURCE.  This patch allows a task to decrease its\noom_score_adj back to the value that a CAP_SYS_RESOURCE thread set it to\nor its inherited value at fork.  Assuming the thread that has forked it\nhas oom_score_adj of 0, each process could decrease it back from 0 upon\nactivation unless a CAP_SYS_RESOURCE thread elevated it to something\nhigher.\n\nAlternative considered:\n\n* a setuid binary\n* a daemon with CAP_SYS_RESOURCE\n\nSince you don\u0027t wan\u0027t all processes to be able to reduce their oom_adj, a\nsetuid or daemon implementation would be complex.  The alternatives also\nhave much higher overhead.\n\nThis patch updated from original patch based on feedback from David\nRientjes.\n\nSigned-off-by: Mandeep Singh Baines \u003cmsb@chromium.org\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Ying Han \u003cyinghan@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": "d0a21265dfb5fa8ae54e90d0fb6d1c215b10a28a",
      "tree": "a3bf2c96ad8e180f32a52e208667a40bb972275b",
      "parents": [
        "ec3f64fc9c196a304c4b7db3e1ff56d640628509"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Thu Jan 13 15:46:02 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:34 2011 -0800"
      },
      "message": "mm: unify module_alloc code for vmalloc\n\nFour architectures (arm, mips, sparc, x86) use __vmalloc_area() for\nmodule_init().  Much of the code is duplicated and can be generalized in a\nglobally accessible function, __vmalloc_node_range().\n\n__vmalloc_node() now calls into __vmalloc_node_range() with a range of\n[VMALLOC_START, VMALLOC_END) for functionally equivalent behavior.\n\nEach architecture may then use __vmalloc_node_range() directly to remove\nthe duplication of code.\n\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nCc: Christoph Lameter \u003ccl@linux.com\u003e\nCc: Russell King \u003clinux@arm.linux.org.uk\u003e\nCc: Ralf Baechle \u003cralf@linux-mips.org\u003e\nCc: \"David S. Miller\" \u003cdavem@davemloft.net\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nCc: \"H. Peter Anvin\" \u003chpa@zytor.com\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ec3f64fc9c196a304c4b7db3e1ff56d640628509",
      "tree": "43de86d9fbb6543b99e1f450b1a3c15a3f151fa0",
      "parents": [
        "e5a5623b28198aa91ea71ee5d3846757fc76bc87"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Thu Jan 13 15:46:01 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:34 2011 -0800"
      },
      "message": "mm: remove gfp mask from pcpu_get_vm_areas\n\npcpu_get_vm_areas() only uses GFP_KERNEL allocations, so remove the gfp_t\nformal and use the mask internally.\n\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nCc: Christoph Lameter \u003ccl@linux.com\u003e\nCc: Tejun Heo \u003ctj@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": "e5a5623b28198aa91ea71ee5d3846757fc76bc87",
      "tree": "6fad408973a428a0ca2bdffd0c30a7c5af400ec9",
      "parents": [
        "f3a310bc4e5ce7e55e1c8e25c31e63af017f3e50"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Thu Jan 13 15:46:00 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:34 2011 -0800"
      },
      "message": "mm: remove unused get_vm_area_node\n\nget_vm_area_node() is unused in the kernel and can thus be removed.\n\nSigned-off-by: David Rientjes \u003crientjes@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": "f3a310bc4e5ce7e55e1c8e25c31e63af017f3e50",
      "tree": "0c78777bd505f44edeb9bbcc50fb3154896574aa",
      "parents": [
        "9927af740b1b9b1e769310bd0b91425e8047b803"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Thu Jan 13 15:46:00 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:34 2011 -0800"
      },
      "message": "mm: vmscan: rename lumpy_mode to reclaim_mode\n\nWith compaction being used instead of lumpy reclaim, the name lumpy_mode\nand associated variables is a bit misleading.  Rename lumpy_mode to\nreclaim_mode which is a better fit.  There is no functional change.\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": "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"
    }
  ],
  "next": "77f1fe6b08b13a87391549c8a820ddc817b6f50e"
}
