)]}'
{
  "log": [
    {
      "commit": "be3a728427a605990a7a0b6dbf9e29b68e266146",
      "tree": "878fb07cca478c4444d85fc26fc16c9f574034a3",
      "parents": [
        "dbe4d2035a5b273c910f8f7eb0b7189ee76f63ad"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Thu Oct 04 01:50:47 2012 +0200"
      },
      "committer": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Tue Dec 11 14:42:36 2012 +0000"
      },
      "message": "mm: numa: pte_numa() and pmd_numa()\n\nImplement pte_numa and pmd_numa.\n\nWe must atomically set the numa bit and clear the present bit to\ndefine a pte_numa or pmd_numa.\n\nOnce a pte or pmd has been set as pte_numa or pmd_numa, the next time\na thread touches a virtual address in the corresponding virtual range,\na NUMA hinting page fault will trigger. The NUMA hinting page fault\nwill clear the NUMA bit and set the present bit again to resolve the\npage fault.\n\nThe expectation is that a NUMA hinting page fault is used as part\nof a placement policy that decides if a page should remain on the\ncurrent node or migrated to a different node.\n\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\n"
    },
    {
      "commit": "2c3cf556b2f7ab5823195766eddec6f1a43134f5",
      "tree": "ed36a604ac7e629e4eb7c36eda1560ba5b19df59",
      "parents": [
        "cef23d9db6b76732d9b0933cb162358a6a1f43d7"
      ],
      "author": {
        "name": "Rik van Riel",
        "email": "riel@redhat.com",
        "time": "Tue Oct 09 15:31:12 2012 +0200"
      },
      "committer": {
        "name": "Mel Gorman",
        "email": "mgorman@suse.de",
        "time": "Tue Dec 11 14:28:34 2012 +0000"
      },
      "message": "x86/mm: Introduce pte_accessible()\n\nWe need pte_present to return true for _PAGE_PROTNONE pages, to indicate that\nthe pte is associated with a page.\n\nHowever, for TLB flushing purposes, we would like to know whether the pte\npoints to an actually accessible page.  This allows us to skip remote TLB\nflushes for pages that are not actually accessible.\n\nFill in this method for x86 and provide a safe (but slower) method\non other architectures.\n\nSigned-off-by: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nFixed-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nLink: http://lkml.kernel.org/n/tip-66p11te4uj23gevgh4j987ip@git.kernel.org\n[ Added Linus\u0027s review fixes. ]\nSigned-off-by: Ingo Molnar \u003cmingo@kernel.org\u003e\n"
    },
    {
      "commit": "2d28a2275c21d04290cfba1555c89a806d2b7706",
      "tree": "a333aa3c8dd434e8f9ccc6b0f8ff80f9d9b4b357",
      "parents": [
        "e3b4126c556ca3a07699adf202d44bed3f453638"
      ],
      "author": {
        "name": "Catalin Marinas",
        "email": "catalin.marinas@arm.com",
        "time": "Mon Oct 08 16:32:59 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 09 16:22:53 2012 +0900"
      },
      "message": "mm: thp: fix the pmd_clear() arguments in pmdp_get_and_clear()\n\nThe CONFIG_TRANSPARENT_HUGEPAGE implementation of pmdp_get_and_clear()\ncalls pmd_clear() with 3 arguments instead of 1.\n\nThis happens only for !__HAVE_ARCH_PMDP_GET_AND_CLEAR which doesn\u0027t seem\nto happen because x86 defines this and it uses pmd_update.\n\n[mhocko@suse.cz: changelog addition]\nSigned-off-by: Catalin Marinas \u003ccatalin.marinas@arm.com\u003e\nSigned-off-by: Steve Capper \u003csteve.capper@arm.com\u003e\nSigned-off-by: Will Deacon \u003cwill.deacon@arm.com\u003e\nCc: Arnd Bergmann \u003carnd@arndb.de\u003e\nReviewed-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nReviewed-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nCc: Gerald Schaefer \u003cgerald.schaefer@de.ibm.com\u003e\nReviewed-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Chris Metcalf \u003ccmetcalf@tilera.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "46dcde735c9d8953bbd8d105ca6779e5b5300c28",
      "tree": "48298fd35d0ef0091541bad482f06202aba97ad3",
      "parents": [
        "e3ebcf64381188a2744a9829a4eb5c2b60f1974c"
      ],
      "author": {
        "name": "Gerald Schaefer",
        "email": "gerald.schaefer@de.ibm.com",
        "time": "Mon Oct 08 16:30:09 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 09 16:22:29 2012 +0900"
      },
      "message": "thp: introduce pmdp_invalidate()\n\nOn s390, a valid page table entry must not be changed while it is attached\nto any CPU.  So instead of pmd_mknotpresent() and set_pmd_at(), an IDTE\noperation would be necessary there.  This patch introduces the\npmdp_invalidate() function, to allow architecture-specific\nimplementations.\n\nSigned-off-by: Gerald Schaefer \u003cgerald.schaefer@de.ibm.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Andi Kleen \u003cak@linux.intel.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Hillf Danton \u003cdhillf@gmail.com\u003e\nCc: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nCc: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e3ebcf64381188a2744a9829a4eb5c2b60f1974c",
      "tree": "6c2bc18729bd6fc12b93d82403fad6afec319c3b",
      "parents": [
        "15626062f4a98279c59a2a5208c496cf65cbf8c0"
      ],
      "author": {
        "name": "Gerald Schaefer",
        "email": "gerald.schaefer@de.ibm.com",
        "time": "Mon Oct 08 16:30:07 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 09 16:22:29 2012 +0900"
      },
      "message": "thp: remove assumptions on pgtable_t type\n\nThe thp page table pre-allocation code currently assumes that pgtable_t is\nof type \"struct page *\".  This may not be true for all architectures, so\nthis patch removes that assumption by replacing the functions\nprepare_pmd_huge_pte() and get_pmd_huge_pte() with two new functions that\ncan be defined architecture-specific.\n\nIt also removes two VM_BUG_ON checks for page_count() and page_mapcount()\noperating on a pgtable_t.  Apart from the VM_BUG_ON removal, there will be\nno functional change introduced by this patch.\n\nSigned-off-by: Gerald Schaefer \u003cgerald.schaefer@de.ibm.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Andi Kleen \u003cak@linux.intel.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Hillf Danton \u003cdhillf@gmail.com\u003e\nCc: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nCc: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b3b9c2932c32e0692018ed5f12f3fd8c70eea8ce",
      "tree": "bca2431f0b0bd2d364f041f0344836cd39b1822c",
      "parents": [
        "5180da410db6369d1f95c9014da1c9bc33fb043e"
      ],
      "author": {
        "name": "Konstantin Khlebnikov",
        "email": "khlebnikov@openvz.org",
        "time": "Mon Oct 08 16:28:34 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 09 16:22:16 2012 +0900"
      },
      "message": "mm, x86, pat: rework linear pfn-mmap tracking\n\nReplace the generic vma-flag VM_PFN_AT_MMAP with x86-only VM_PAT.\n\nWe can toss mapping address from remap_pfn_range() into\ntrack_pfn_vma_new(), and collect all PAT-related logic together in\narch/x86/.\n\nThis patch also restores orignal frustration-free is_cow_mapping() check\nin remap_pfn_range(), as it was before commit v2.6.28-rc8-88-g3c8bb73\n(\"x86: PAT: store vm_pgoff for all linear_over_vma_region mappings - v3\")\n\nis_linear_pfn_mapping() checks can be removed from mm/huge_memory.c,\nbecause it already handled by VM_PFNMAP in VM_NO_THP bit-mask.\n\n[suresh.b.siddha@intel.com: Reset the VM_PAT flag as part of untrack_pfn_vma()]\nSigned-off-by: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nSigned-off-by: Suresh Siddha \u003csuresh.b.siddha@intel.com\u003e\nCc: Venkatesh Pallipadi \u003cvenki@google.com\u003e\nCc: H. Peter Anvin \u003chpa@zytor.com\u003e\nCc: Nick Piggin \u003cnpiggin@kernel.dk\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nCc: Alexander Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Carsten Otte \u003ccotte@de.ibm.com\u003e\nCc: Chris Metcalf \u003ccmetcalf@tilera.com\u003e\nCc: Cyrill Gorcunov \u003cgorcunov@openvz.org\u003e\nCc: Eric Paris \u003ceparis@redhat.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: James Morris \u003cjames.l.morris@oracle.com\u003e\nCc: Jason Baron \u003cjbaron@redhat.com\u003e\nCc: Kentaro Takeda \u003ctakedakn@nttdata.co.jp\u003e\nCc: Matt Helsley \u003cmatthltc@us.ibm.com\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Robert Richter \u003crobert.richter@amd.com\u003e\nCc: Tetsuo Handa \u003cpenguin-kernel@I-love.SAKURA.ne.jp\u003e\nCc: Venkatesh Pallipadi \u003cvenki@google.com\u003e\nAcked-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5180da410db6369d1f95c9014da1c9bc33fb043e",
      "tree": "1d92975710b33a90f77f39d0ad33669329dea949",
      "parents": [
        "b1a86e15dc0304366f50ba1720834bc419c801b1"
      ],
      "author": {
        "name": "Suresh Siddha",
        "email": "suresh.b.siddha@intel.com",
        "time": "Mon Oct 08 16:28:29 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 09 16:22:16 2012 +0900"
      },
      "message": "x86, pat: separate the pfn attribute tracking for remap_pfn_range and vm_insert_pfn\n\nWith PAT enabled, vm_insert_pfn() looks up the existing pfn memory\nattribute and uses it.  Expectation is that the driver reserves the\nmemory attributes for the pfn before calling vm_insert_pfn().\n\nremap_pfn_range() (when called for the whole vma) will setup a new\nattribute (based on the prot argument) for the specified pfn range.\nThis addresses the legacy usage which typically calls remap_pfn_range()\nwith a desired memory attribute.  For ranges smaller than the vma size\n(which is typically not the case), remap_pfn_range() will use the\nexisting memory attribute for the pfn range.\n\nExpose two different API\u0027s for these different behaviors.\ntrack_pfn_insert() for tracking the pfn attribute set by vm_insert_pfn()\nand track_pfn_remap() for the remap_pfn_range().\n\nThis cleanup also prepares the ground for the track/untrack pfn vma\nroutines to take over the ownership of setting PAT specific vm_flag in\nthe \u0027vma\u0027.\n\n[khlebnikov@openvz.org: Clear checks in track_pfn_remap()]\n[akpm@linux-foundation.org: tweak a few comments]\nSigned-off-by: Suresh Siddha \u003csuresh.b.siddha@intel.com\u003e\nSigned-off-by: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nCc: Venkatesh Pallipadi \u003cvenki@google.com\u003e\nCc: H. Peter Anvin \u003chpa@zytor.com\u003e\nCc: Nick Piggin \u003cnpiggin@kernel.dk\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nCc: Alexander Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Carsten Otte \u003ccotte@de.ibm.com\u003e\nCc: Chris Metcalf \u003ccmetcalf@tilera.com\u003e\nCc: Cyrill Gorcunov \u003cgorcunov@openvz.org\u003e\nCc: Eric Paris \u003ceparis@redhat.com\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: James Morris \u003cjames.l.morris@oracle.com\u003e\nCc: Jason Baron \u003cjbaron@redhat.com\u003e\nCc: Kentaro Takeda \u003ctakedakn@nttdata.co.jp\u003e\nCc: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nCc: Matt Helsley \u003cmatthltc@us.ibm.com\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Robert Richter \u003crobert.richter@amd.com\u003e\nCc: Suresh Siddha \u003csuresh.b.siddha@intel.com\u003e\nCc: Tetsuo Handa \u003cpenguin-kernel@I-love.SAKURA.ne.jp\u003e\nAcked-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e4eed03fd06578571c01d4f1478c874bb432c815",
      "tree": "9cfd16247d8208a1fe55ad81b0d4d85c17b80415",
      "parents": [
        "abca7c4965845924f65d40e0aa1092bdd895e314"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Wed Jun 20 12:52:57 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jun 20 14:39:35 2012 -0700"
      },
      "message": "thp: avoid atomic64_read in pmd_read_atomic for 32bit PAE\n\nIn the x86 32bit PAE CONFIG_TRANSPARENT_HUGEPAGE\u003dy case while holding the\nmmap_sem for reading, cmpxchg8b cannot be used to read pmd contents under\nXen.\n\nSo instead of dealing only with \"consistent\" pmdvals in\npmd_none_or_trans_huge_or_clear_bad() (which would be conceptually\nsimpler) we let pmd_none_or_trans_huge_or_clear_bad() deal with pmdvals\nwhere the low 32bit and high 32bit could be inconsistent (to avoid having\nto use cmpxchg8b).\n\nThe only guarantee we get from pmd_read_atomic is that if the low part of\nthe pmd was found null, the high part will be null too (so the pmd will be\nconsidered unstable).  And if the low part of the pmd is found \"stable\"\nlater, then it means the whole pmd was read atomically (because after a\npmd is stable, neither MADV_DONTNEED nor page faults can alter it anymore,\nand we read the high part after the low part).\n\nIn the 32bit PAE x86 case, it is enough to read the low part of the pmdval\natomically to declare the pmd as \"stable\" and that\u0027s true for THP and no\nTHP, furthermore in the THP case we also have a barrier() that will\nprevent any inconsistent pmdvals to be cached by a later re-read of the\n*pmd.\n\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Jonathan Nieder \u003cjrnieder@gmail.com\u003e\nCc: Ulrich Obergfell \u003cuobergfe@redhat.com\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Larry Woodman \u003clwoodman@redhat.com\u003e\nCc: Petr Matousek \u003cpmatouse@redhat.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Jan Beulich \u003cjbeulich@suse.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@gmail.com\u003e\nTested-by: Andrew Jones \u003cdrjones@redhat.com\u003e\nCc: \u003cstable@vger.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": "26c191788f18129af0eb32a358cdaea0c7479626",
      "tree": "21d30812d2e092a940ba81750f75080ce5eb5ae4",
      "parents": [
        "a7f638f999ff42310e9582273b1fe25ea6e469ba"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Tue May 29 15:06:49 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 29 16:22:24 2012 -0700"
      },
      "message": "mm: pmd_read_atomic: fix 32bit PAE pmd walk vs pmd_populate SMP race condition\n\nWhen holding the mmap_sem for reading, pmd_offset_map_lock should only\nrun on a pmd_t that has been read atomically from the pmdp pointer,\notherwise we may read only half of it leading to this crash.\n\nPID: 11679  TASK: f06e8000  CPU: 3   COMMAND: \"do_race_2_panic\"\n #0 [f06a9dd8] crash_kexec at c049b5ec\n #1 [f06a9e2c] oops_end at c083d1c2\n #2 [f06a9e40] no_context at c0433ded\n #3 [f06a9e64] bad_area_nosemaphore at c043401a\n #4 [f06a9e6c] __do_page_fault at c0434493\n #5 [f06a9eec] do_page_fault at c083eb45\n #6 [f06a9f04] error_code (via page_fault) at c083c5d5\n    EAX: 01fb470c EBX: fff35000 ECX: 00000003 EDX: 00000100 EBP:\n    00000000\n    DS:  007b     ESI: 9e201000 ES:  007b     EDI: 01fb4700 GS:  00e0\n    CS:  0060     EIP: c083bc14 ERR: ffffffff EFLAGS: 00010246\n #7 [f06a9f38] _spin_lock at c083bc14\n #8 [f06a9f44] sys_mincore at c0507b7d\n #9 [f06a9fb0] system_call at c083becd\n                         start           len\n    EAX: ffffffda  EBX: 9e200000  ECX: 00001000  EDX: 6228537f\n    DS:  007b      ESI: 00000000  ES:  007b      EDI: 003d0f00\n    SS:  007b      ESP: 62285354  EBP: 62285388  GS:  0033\n    CS:  0073      EIP: 00291416  ERR: 000000da  EFLAGS: 00000286\n\nThis should be a longstanding bug affecting x86 32bit PAE without THP.\nOnly archs with 64bit large pmd_t and 32bit unsigned long should be\naffected.\n\nWith THP enabled the barrier() in pmd_none_or_trans_huge_or_clear_bad()\nwould partly hide the bug when the pmd transition from none to stable,\nby forcing a re-read of the *pmd in pmd_offset_map_lock, but when THP is\nenabled a new set of problem arises by the fact could then transition\nfreely in any of the none, pmd_trans_huge or pmd_trans_stable states.\nSo making the barrier in pmd_none_or_trans_huge_or_clear_bad()\nunconditional isn\u0027t good idea and it would be a flakey solution.\n\nThis should be fully fixed by introducing a pmd_read_atomic that reads\nthe pmd in order with THP disabled, or by reading the pmd atomically\nwith cmpxchg8b with THP enabled.\n\nLuckily this new race condition only triggers in the places that must\nalready be covered by pmd_none_or_trans_huge_or_clear_bad() so the fix\nis localized there but this bug is not related to THP.\n\nNOTE: this can trigger on x86 32bit systems with PAE enabled with more\nthan 4G of ram, otherwise the high part of the pmd will never risk to be\ntruncated because it would be zero at all times, in turn so hiding the\nSMP race.\n\nThis bug was discovered and fully debugged by Ulrich, quote:\n\n----\n[..]\npmd_none_or_trans_huge_or_clear_bad() loads the content of edx and\neax.\n\n    496 static inline int pmd_none_or_trans_huge_or_clear_bad(pmd_t\n    *pmd)\n    497 {\n    498         /* depend on compiler for an atomic pmd read */\n    499         pmd_t pmdval \u003d *pmd;\n\n                                // edi \u003d pmd pointer\n0xc0507a74 \u003csys_mincore+548\u003e:   mov    0x8(%esp),%edi\n...\n                                // edx \u003d PTE page table high address\n0xc0507a84 \u003csys_mincore+564\u003e:   mov    0x4(%edi),%edx\n...\n                                // eax \u003d PTE page table low address\n0xc0507a8e \u003csys_mincore+574\u003e:   mov    (%edi),%eax\n\n[..]\n\nPlease note that the PMD is not read atomically. These are two \"mov\"\ninstructions where the high order bits of the PMD entry are fetched\nfirst. Hence, the above machine code is prone to the following race.\n\n-  The PMD entry {high|low} is 0x0000000000000000.\n   The \"mov\" at 0xc0507a84 loads 0x00000000 into edx.\n\n-  A page fault (on another CPU) sneaks in between the two \"mov\"\n   instructions and instantiates the PMD.\n\n-  The PMD entry {high|low} is now 0x00000003fda38067.\n   The \"mov\" at 0xc0507a8e loads 0xfda38067 into eax.\n----\n\nReported-by: Ulrich Obergfell \u003cuobergfe@redhat.com\u003e\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Larry Woodman \u003clwoodman@redhat.com\u003e\nCc: Petr Matousek \u003cpmatouse@redhat.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: \u003cstable@vger.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": "73636b1aacb1a07e6fbe0d25e560e69b024a8e25",
      "tree": "9531c202c6b3f67fba1cd7ac2b83fa32c31fe197",
      "parents": [
        "51007004f44c9588d70ffb77e1f52479bd5b0e37"
      ],
      "author": {
        "name": "Chris Metcalf",
        "email": "cmetcalf@tilera.com",
        "time": "Wed Mar 28 13:59:18 2012 -0400"
      },
      "committer": {
        "name": "Chris Metcalf",
        "email": "cmetcalf@tilera.com",
        "time": "Fri May 25 12:48:21 2012 -0400"
      },
      "message": "arch/tile: allow building Linux with transparent huge pages enabled\n\nThe change adds some infrastructure for managing tile pmd\u0027s more generally,\nusing pte_pmd() and pmd_pte() methods to translate pmd values to and\nfrom ptes, since on TILEPro a pmd is really just a nested structure\nholding a pgd (aka pte).  Several existing pmd methods are moved into\nthis framework, and a whole raft of additional pmd accessors are defined\nthat are used by the transparent hugepage framework.\n\nThe tile PTE now has a \"client2\" bit.  The bit is used to indicate a\ntransparent huge page is in the process of being split into subpages.\n\nThis change also fixes a generic bug where the return value of the\ngeneric pmdp_splitting_flush() was incorrect.\n\nSigned-off-by: Chris Metcalf \u003ccmetcalf@tilera.com\u003e\n"
    },
    {
      "commit": "ed2d265d1266736bd294332d7f649003943ae36e",
      "tree": "860e5b7bb72933e4a9abacdc2f2d75a0e6254e32",
      "parents": [
        "f1d38e423a697b7aa06e12d3ca4753bcc1aa3531",
        "6c03438edeb5c359af35f060ea016ca65671c269"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 24 10:08:39 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 24 10:08:39 2012 -0700"
      },
      "message": "Merge tag \u0027bug-for-3.4\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux\n\nPull \u003clinux/bug.h\u003e cleanup from Paul Gortmaker:\n \"The changes shown here are to unify linux\u0027s BUG support under the one\n  \u003clinux/bug.h\u003e file.  Due to historical reasons, we have some BUG code\n  in bug.h and some in kernel.h -- i.e.  the support for BUILD_BUG in\n  linux/kernel.h predates the addition of linux/bug.h, but old code in\n  kernel.h wasn\u0027t moved to bug.h at that time.  As a band-aid, kernel.h\n  was including \u003casm/bug.h\u003e to pseudo link them.\n\n  This has caused confusion[1] and general yuck/WTF[2] reactions.  Here\n  is an example that violates the principle of least surprise:\n\n      CC      lib/string.o\n      lib/string.c: In function \u0027strlcat\u0027:\n      lib/string.c:225:2: error: implicit declaration of function \u0027BUILD_BUG_ON\u0027\n      make[2]: *** [lib/string.o] Error 1\n      $\n      $ grep linux/bug.h lib/string.c\n      #include \u003clinux/bug.h\u003e\n      $\n\n  We\u0027ve included \u003clinux/bug.h\u003e for the BUG infrastructure and yet we\n  still get a compile fail! [We\u0027ve not kernel.h for BUILD_BUG_ON.] Ugh -\n  very confusing for someone who is new to kernel development.\n\n  With the above in mind, the goals of this changeset are:\n\n  1) find and fix any include/*.h files that were relying on the\n     implicit presence of BUG code.\n  2) find and fix any C files that were consuming kernel.h and hence\n     relying on implicitly getting some/all BUG code.\n  3) Move the BUG related code living in kernel.h to \u003clinux/bug.h\u003e\n  4) remove the asm/bug.h from kernel.h to finally break the chain.\n\n  During development, the order was more like 3-4, build-test, 1-2.  But\n  to ensure that git history for bisect doesn\u0027t get needless build\n  failures introduced, the commits have been reorderd to fix the problem\n  areas in advance.\n\n\t[1]  https://lkml.org/lkml/2012/1/3/90\n\t[2]  https://lkml.org/lkml/2012/1/17/414\"\n\nFix up conflicts (new radeon file, reiserfs header cleanups) as per Paul\nand linux-next.\n\n* tag \u0027bug-for-3.4\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux:\n  kernel.h: doesn\u0027t explicitly use bug.h, so don\u0027t include it.\n  bug: consolidate BUILD_BUG_ON with other bug code\n  BUG: headers with BUG/BUG_ON etc. need linux/bug.h\n  bug.h: add include of it to various implicit C users\n  lib: fix implicit users of kernel.h for TAINT_WARN\n  spinlock: macroize assert_spin_locked to avoid bug.h dependency\n  x86: relocate get/set debugreg fcns to include/asm/debugreg.\n"
    },
    {
      "commit": "1a5a9906d4e8d1976b701f889d8f35d54b928f25",
      "tree": "e51912e725f224663a738045a4d0528d08da4572",
      "parents": [
        "31f6765266417c0d99f0e922fe82848a7c9c2ae9"
      ],
      "author": {
        "name": "Andrea Arcangeli",
        "email": "aarcange@redhat.com",
        "time": "Wed Mar 21 16:33:42 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 21 17:54:54 2012 -0700"
      },
      "message": "mm: thp: fix pmd_bad() triggering in code paths holding mmap_sem read mode\n\nIn some cases it may happen that pmd_none_or_clear_bad() is called with\nthe mmap_sem hold in read mode.  In those cases the huge page faults can\nallocate hugepmds under pmd_none_or_clear_bad() and that can trigger a\nfalse positive from pmd_bad() that will not like to see a pmd\nmaterializing as trans huge.\n\nIt\u0027s not khugepaged causing the problem, khugepaged holds the mmap_sem\nin write mode (and all those sites must hold the mmap_sem in read mode\nto prevent pagetables to go away from under them, during code review it\nseems vm86 mode on 32bit kernels requires that too unless it\u0027s\nrestricted to 1 thread per process or UP builds).  The race is only with\nthe huge pagefaults that can convert a pmd_none() into a\npmd_trans_huge().\n\nEffectively all these pmd_none_or_clear_bad() sites running with\nmmap_sem in read mode are somewhat speculative with the page faults, and\nthe result is always undefined when they run simultaneously.  This is\nprobably why it wasn\u0027t common to run into this.  For example if the\nmadvise(MADV_DONTNEED) runs zap_page_range() shortly before the page\nfault, the hugepage will not be zapped, if the page fault runs first it\nwill be zapped.\n\nAltering pmd_bad() not to error out if it finds hugepmds won\u0027t be enough\nto fix this, because zap_pmd_range would then proceed to call\nzap_pte_range (which would be incorrect if the pmd become a\npmd_trans_huge()).\n\nThe simplest way to fix this is to read the pmd in the local stack\n(regardless of what we read, no need of actual CPU barriers, only\ncompiler barrier needed), and be sure it is not changing under the code\nthat computes its value.  Even if the real pmd is changing under the\nvalue we hold on the stack, we don\u0027t care.  If we actually end up in\nzap_pte_range it means the pmd was not none already and it was not huge,\nand it can\u0027t become huge from under us (khugepaged locking explained\nabove).\n\nAll we need is to enforce that there is no way anymore that in a code\npath like below, pmd_trans_huge can be false, but pmd_none_or_clear_bad\ncan run into a hugepmd.  The overhead of a barrier() is just a compiler\ntweak and should not be measurable (I only added it for THP builds).  I\ndon\u0027t exclude different compiler versions may have prevented the race\ntoo by caching the value of *pmd on the stack (that hasn\u0027t been\nverified, but it wouldn\u0027t be impossible considering\npmd_none_or_clear_bad, pmd_bad, pmd_trans_huge, pmd_none are all inlines\nand there\u0027s no external function called in between pmd_trans_huge and\npmd_none_or_clear_bad).\n\n\t\tif (pmd_trans_huge(*pmd)) {\n\t\t\tif (next-addr !\u003d HPAGE_PMD_SIZE) {\n\t\t\t\tVM_BUG_ON(!rwsem_is_locked(\u0026tlb-\u003emm-\u003emmap_sem));\n\t\t\t\tsplit_huge_page_pmd(vma-\u003evm_mm, pmd);\n\t\t\t} else if (zap_huge_pmd(tlb, vma, pmd, addr))\n\t\t\t\tcontinue;\n\t\t\t/* fall through */\n\t\t}\n\t\tif (pmd_none_or_clear_bad(pmd))\n\nBecause this race condition could be exercised without special\nprivileges this was reported in CVE-2012-1179.\n\nThe race was identified and fully explained by Ulrich who debugged it.\nI\u0027m quoting his accurate explanation below, for reference.\n\n\u003d\u003d\u003d\u003d\u003d\u003d start quote \u003d\u003d\u003d\u003d\u003d\u003d\u003d\n      mapcount 0 page_mapcount 1\n      kernel BUG at mm/huge_memory.c:1384!\n\n    At some point prior to the panic, a \"bad pmd ...\" message similar to the\n    following is logged on the console:\n\n      mm/memory.c:145: bad pmd ffff8800376e1f98(80000000314000e7).\n\n    The \"bad pmd ...\" message is logged by pmd_clear_bad() before it clears\n    the page\u0027s PMD table entry.\n\n        143 void pmd_clear_bad(pmd_t *pmd)\n        144 {\n    -\u003e  145         pmd_ERROR(*pmd);\n        146         pmd_clear(pmd);\n        147 }\n\n    After the PMD table entry has been cleared, there is an inconsistency\n    between the actual number of PMD table entries that are mapping the page\n    and the page\u0027s map count (_mapcount field in struct page). When the page\n    is subsequently reclaimed, __split_huge_page() detects this inconsistency.\n\n       1381         if (mapcount !\u003d page_mapcount(page))\n       1382                 printk(KERN_ERR \"mapcount %d page_mapcount %d\\n\",\n       1383                        mapcount, page_mapcount(page));\n    -\u003e 1384         BUG_ON(mapcount !\u003d page_mapcount(page));\n\n    The root cause of the problem is a race of two threads in a multithreaded\n    process. Thread B incurs a page fault on a virtual address that has never\n    been accessed (PMD entry is zero) while Thread A is executing an madvise()\n    system call on a virtual address within the same 2 MB (huge page) range.\n\n               virtual address space\n              .---------------------.\n              |                     |\n              |                     |\n            .-|---------------------|\n            | |                     |\n            | |                     |\u003c-- B(fault)\n            | |                     |\n      2 MB  | |/////////////////////|-.\n      huge \u003c  |/////////////////////|  \u003e A(range)\n      page  | |/////////////////////|-\u0027\n            | |                     |\n            | |                     |\n            \u0027-|---------------------|\n              |                     |\n              |                     |\n              \u0027---------------------\u0027\n\n    - Thread A is executing an madvise(..., MADV_DONTNEED) system call\n      on the virtual address range \"A(range)\" shown in the picture.\n\n    sys_madvise\n      // Acquire the semaphore in shared mode.\n      down_read(\u0026current-\u003emm-\u003emmap_sem)\n      ...\n      madvise_vma\n        switch (behavior)\n        case MADV_DONTNEED:\n             madvise_dontneed\n               zap_page_range\n                 unmap_vmas\n                   unmap_page_range\n                     zap_pud_range\n                       zap_pmd_range\n                         //\n                         // Assume that this huge page has never been accessed.\n                         // I.e. content of the PMD entry is zero (not mapped).\n                         //\n                         if (pmd_trans_huge(*pmd)) {\n                             // We don\u0027t get here due to the above assumption.\n                         }\n                         //\n                         // Assume that Thread B incurred a page fault and\n             .---------\u003e // sneaks in here as shown below.\n             |           //\n             |           if (pmd_none_or_clear_bad(pmd))\n             |               {\n             |                 if (unlikely(pmd_bad(*pmd)))\n             |                     pmd_clear_bad\n             |                     {\n             |                       pmd_ERROR\n             |                         // Log \"bad pmd ...\" message here.\n             |                       pmd_clear\n             |                         // Clear the page\u0027s PMD entry.\n             |                         // Thread B incremented the map count\n             |                         // in page_add_new_anon_rmap(), but\n             |                         // now the page is no longer mapped\n             |                         // by a PMD entry (-\u003e inconsistency).\n             |                     }\n             |               }\n             |\n             v\n    - Thread B is handling a page fault on virtual address \"B(fault)\" shown\n      in the picture.\n\n    ...\n    do_page_fault\n      __do_page_fault\n        // Acquire the semaphore in shared mode.\n        down_read_trylock(\u0026mm-\u003emmap_sem)\n        ...\n        handle_mm_fault\n          if (pmd_none(*pmd) \u0026\u0026 transparent_hugepage_enabled(vma))\n              // We get here due to the above assumption (PMD entry is zero).\n              do_huge_pmd_anonymous_page\n                alloc_hugepage_vma\n                  // Allocate a new transparent huge page here.\n                ...\n                __do_huge_pmd_anonymous_page\n                  ...\n                  spin_lock(\u0026mm-\u003epage_table_lock)\n                  ...\n                  page_add_new_anon_rmap\n                    // Here we increment the page\u0027s map count (starts at -1).\n                    atomic_set(\u0026page-\u003e_mapcount, 0)\n                  set_pmd_at\n                    // Here we set the page\u0027s PMD entry which will be cleared\n                    // when Thread A calls pmd_clear_bad().\n                  ...\n                  spin_unlock(\u0026mm-\u003epage_table_lock)\n\n    The mmap_sem does not prevent the race because both threads are acquiring\n    it in shared mode (down_read).  Thread B holds the page_table_lock while\n    the page\u0027s map count and PMD table entry are updated.  However, Thread A\n    does not synchronize on that lock.\n\n\u003d\u003d\u003d\u003d\u003d\u003d end quote \u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\n[akpm@linux-foundation.org: checkpatch fixes]\nReported-by: Ulrich Obergfell \u003cuobergfe@redhat.com\u003e\nSigned-off-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nAcked-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Dave Jones \u003cdavej@redhat.com\u003e\nAcked-by: Larry Woodman \u003clwoodman@redhat.com\u003e\nAcked-by: Rik van Riel \u003criel@redhat.com\u003e\nCc: \u003cstable@vger.kernel.org\u003e\t\t[2.6.38+]\nCc: Mark Salter \u003cmsalter@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "187f1882b5b0748b3c4c22274663fdb372ac0452",
      "tree": "36283f258cf65f03599a045d48bb05d0ec27f3f9",
      "parents": [
        "50af5ead3b44ccf8bd2b4d2a50c1b610f557c480"
      ],
      "author": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Wed Nov 23 20:12:59 2011 -0500"
      },
      "committer": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Sun Mar 04 17:54:34 2012 -0500"
      },
      "message": "BUG: headers with BUG/BUG_ON etc. need linux/bug.h\n\nIf a header file is making use of BUG, BUG_ON, BUILD_BUG_ON, or any\nother BUG variant in a static inline (i.e. not in a #define) then\nthat header really should be including \u003clinux/bug.h\u003e and not just\nexpecting it to be implicitly present.\n\nWe can make this change risk-free, since if the files using these\nheaders didn\u0027t have exposure to linux/bug.h already, they would have\nbeen causing compile failures/warnings.\n\nSigned-off-by: Paul Gortmaker \u003cpaul.gortmaker@windriver.com\u003e\n"
    },
    {
      "commit": "49b24d6b41c576ba43153fc94695f871cce139a5",
      "tree": "21ccb6f8bc29d6c8c2a96b83bbbb3850b9ccc489",
      "parents": [
        "9e6f343852cb16ea961ba5be2ca8dde609aa6f23"
      ],
      "author": {
        "name": "Nicolas Kaiser",
        "email": "nikai@nikai.net",
        "time": "Wed Jun 15 15:08:34 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jun 15 20:04:00 2011 -0700"
      },
      "message": "include/asm-generic/pgtable.h: fix unbalanced parenthesis\n\nSigned-off-by: Nicolas Kaiser \u003cnikai@nikai.net\u003e\nReviewed-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": "2d42552d1c1659b014851cf449ad2fe458509128",
      "tree": "b9ef22867ce52e23b5249a7ad38637eec40363b8",
      "parents": [
        "c26001d4e9133fe45e47eee18cfd826219e71fb9"
      ],
      "author": {
        "name": "Martin Schwidefsky",
        "email": "schwidefsky@de.ibm.com",
        "time": "Mon May 23 10:24:39 2011 +0200"
      },
      "committer": {
        "name": "Martin Schwidefsky",
        "email": "schwidefsky@de.ibm.com",
        "time": "Mon May 23 10:24:31 2011 +0200"
      },
      "message": "[S390] merge page_test_dirty and page_clear_dirty\n\nThe page_clear_dirty primitive always sets the default storage key\nwhich resets the access control bits and the fetch protection bit.\nThat will surprise a KVM guest that sets non-zero access control\nbits or the fetch protection bit. Merge page_test_dirty and\npage_clear_dirty back to a single function and only clear the\ndirty bit from the storage key.\n\nIn addition move the function page_test_and_clear_dirty and\npage_test_and_clear_young to page.h where they belong. This\nrequires to change the parameter from a struct page * to a page\nframe number.\n\nSigned-off-by: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\n"
    },
    {
      "commit": "fbd71844852c9458bf73c7cbdae7189c2d4b377c",
      "tree": "30127c1231cff88df019fa775a630a1bb2374a31",
      "parents": [
        "493f3358cb289ccf716c5a14fa5bb52ab75943e5"
      ],
      "author": {
        "name": "Ben Hutchings",
        "email": "ben@decadent.org.uk",
        "time": "Sun Feb 27 05:41:35 2011 +0000"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Feb 28 17:46:49 2011 -0800"
      },
      "message": "mm: \u003casm-generic/pgtable.h\u003e must include \u003clinux/mm_types.h\u003e\n\nCommit e2cda3226481 (\"thp: add pmd mangling generic functions\") replaced\nsome macros in \u003casm-generic/pgtable.h\u003e with inline functions.\n\nIf the functions are to be defined (not all architectures need them)\nthen struct vm_area_struct must be defined first.  So include\n\u003clinux/mm_types.h\u003e.\n\nFixes a build failure seen in Debian:\n\n    CC [M]  drivers/media/dvb/mantis/mantis_pci.o\n  In file included from arch/arm/include/asm/pgtable.h:460,\n                   from drivers/media/dvb/mantis/mantis_pci.c:25:\n  include/asm-generic/pgtable.h: In function \u0027ptep_test_and_clear_young\u0027:\n  include/asm-generic/pgtable.h:29: error: dereferencing pointer to incomplete type\n\nSigned-off-by: Ben Hutchings \u003cben@decadent.org.uk\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\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": "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": "e2b8d7af0e3a9234de06606f9151f28cf847a8d6",
      "tree": "64bc03271383a43c2097b84b6f0e25c34ed13553",
      "parents": [
        "92f842eac7ee321c8a0749aba2513541b4ac226f"
      ],
      "author": {
        "name": "Martin Schwidefsky",
        "email": "schwidefsky@de.ibm.com",
        "time": "Mon Oct 25 16:10:14 2010 +0200"
      },
      "committer": {
        "name": "Martin Schwidefsky",
        "email": "sky@mschwide.boeblingen.de.ibm.com",
        "time": "Mon Oct 25 16:10:15 2010 +0200"
      },
      "message": "[S390] add support for nonquiescing sske\n\nImprove performance of the sske operation by using the nonquiescing\nvariant if the affected page has no mappings established. On machines\nwith no support for the new sske variant the mask bit will be ignored.\n\nSigned-off-by: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\n"
    },
    {
      "commit": "61c77326d1df079f202fa79403c3ccd8c5966a81",
      "tree": "57780e6b94f24f402d1c9036d6e7cf37a359c22f",
      "parents": [
        "76be97c1fc945db08aae1f1b746012662d643e97"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Mon Aug 16 09:16:55 2010 +0800"
      },
      "committer": {
        "name": "H. Peter Anvin",
        "email": "hpa@zytor.com",
        "time": "Mon Aug 23 10:04:57 2010 -0700"
      },
      "message": "x86, mm: Avoid unnecessary TLB flush\n\nIn x86, access and dirty bits are set automatically by CPU when CPU accesses\nmemory. When we go into the code path of below flush_tlb_fix_spurious_fault(),\nwe already set dirty bit for pte and don\u0027t need flush tlb. This might mean\ntlb entry in some CPUs hasn\u0027t dirty bit set, but this doesn\u0027t matter. When\nthe CPUs do page write, they will automatically check the bit and no software\ninvolved.\n\nOn the other hand, flush tlb in below position is harmful. Test creates CPU\nnumber of threads, each thread writes to a same but random address in same vma\nrange and we measure the total time. Under a 4 socket system, original time is\n1.96s, while with the patch, the time is 0.8s. Under a 2 socket system, there is\n20% time cut too. perf shows a lot of time are taking to send ipi/handle ipi for\ntlb flush.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nLKML-Reference: \u003c20100816011655.GA362@sli10-desk.sh.intel.com\u003e\nAcked-by: Suresh Siddha \u003csuresh.b.siddha@intel.com\u003e\nCc: Andrea Archangeli \u003caarcange@redhat.com\u003e\nSigned-off-by: H. Peter Anvin \u003chpa@zytor.com\u003e\n"
    },
    {
      "commit": "0634a632f5dea8281ae7c9a96800582ff9eb1475",
      "tree": "77314bb143deb7b19bdd8f5cf6229a7720cc5378",
      "parents": [
        "32a9ff9cc55b42543a84bca90b070df92af72671"
      ],
      "author": {
        "name": "Paul Mundt",
        "email": "lethal@linux-sh.org",
        "time": "Tue Jun 23 13:51:19 2009 +0200"
      },
      "committer": {
        "name": "Arnd Bergmann",
        "email": "arnd@arndb.de",
        "time": "Tue Jun 23 14:34:30 2009 +0200"
      },
      "message": "asm-generic: add dummy pgprot_noncached()\n\nMost architectures now provide a pgprot_noncached(), the\nremaining ones can simply use an dummy default implementation,\nexcept for cris and xtensa, which should override the\ndefault appropriately.\n\nSigned-off-by: Arnd Bergmann \u003carnd@arndb.de\u003e\nCc: Jesper Nilsson \u003cjesper.nilsson@axis.com\u003e\nCc: Chris Zankel \u003cchris@zankel.net\u003e\nCc: Magnus Damm \u003cmagnus.damm@gmail.com\u003e\n"
    },
    {
      "commit": "224101ed69d3fbb486868e0f6e0f9fa37302efb4",
      "tree": "46830842a99659421eeabee65d299ab4c3b59f28",
      "parents": [
        "b407fc57b815b2016186220baabc76cc8264206e"
      ],
      "author": {
        "name": "Jeremy Fitzhardinge",
        "email": "jeremy.fitzhardinge@citrix.com",
        "time": "Wed Feb 18 11:18:57 2009 -0800"
      },
      "committer": {
        "name": "Jeremy Fitzhardinge",
        "email": "jeremy.fitzhardinge@citrix.com",
        "time": "Sun Mar 29 23:36:01 2009 -0700"
      },
      "message": "x86/paravirt: finish change from lazy cpu to context switch start/end\n\nImpact: fix lazy context switch API\n\nPass the previous and next tasks into the context switch start\nend calls, so that the called functions can properly access the\ntask state (esp in end_context_switch, in which the next task\nis not yet completely current).\n\nSigned-off-by: Jeremy Fitzhardinge \u003cjeremy.fitzhardinge@citrix.com\u003e\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\n"
    },
    {
      "commit": "7fd7d83d49914f03aefffba6aee09032fcd54cce",
      "tree": "8c9f5b95f6b63b5d28887f47d92a6c79139eac5f",
      "parents": [
        "b8bcfe997e46150fedcc3f5b26b846400122fdd9"
      ],
      "author": {
        "name": "Jeremy Fitzhardinge",
        "email": "jeremy.fitzhardinge@citrix.com",
        "time": "Tue Feb 17 23:24:03 2009 -0800"
      },
      "committer": {
        "name": "Jeremy Fitzhardinge",
        "email": "jeremy.fitzhardinge@citrix.com",
        "time": "Sun Mar 29 23:35:59 2009 -0700"
      },
      "message": "x86/pvops: replace arch_enter_lazy_cpu_mode with arch_start_context_switch\n\nImpact: simplification, prepare for later changes\n\nMake lazy cpu mode more specific to context switching, so that\nit makes sense to do more context-switch specific things in\nthe callbacks.\n\nSigned-off-by: Jeremy Fitzhardinge \u003cjeremy.fitzhardinge@citrix.com\u003e\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\n"
    },
    {
      "commit": "e4b866ed197cef9989348e0479fed8d864ea465b",
      "tree": "0420e59a2312f6d1156ec85e6895cf6f322e0c6f",
      "parents": [
        "afc7d20c8429f32f19d47367fdc36eeed2334ec3"
      ],
      "author": {
        "name": "venkatesh.pallipadi@intel.com",
        "email": "venkatesh.pallipadi@intel.com",
        "time": "Fri Jan 09 16:13:11 2009 -0800"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Tue Jan 13 19:13:01 2009 +0100"
      },
      "message": "x86 PAT: change track_pfn_vma_new to take pgprot_t pointer param\n\nImpact: cleanup\n\nChange the protection parameter for track_pfn_vma_new() into a pgprot_t pointer.\nSubsequent patch changes the x86 PAT handling to return a compatible\nmemtype in pgprot_t, if what was requested cannot be allowed due to conflicts.\nNo fuctionality change in this patch.\n\nSigned-off-by: Venkatesh Pallipadi \u003cvenkatesh.pallipadi@intel.com\u003e\nSigned-off-by: Suresh Siddha \u003csuresh.b.siddha@intel.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "34801ba9bf0381fcf0e2b08179d2c07f2c6ede74",
      "tree": "e14d979cb9abf9220d0c60b04505851805975398",
      "parents": [
        "982d789ab76c8a11426852fec2fdf2f412e21c0c"
      ],
      "author": {
        "name": "venkatesh.pallipadi@intel.com",
        "email": "venkatesh.pallipadi@intel.com",
        "time": "Fri Dec 19 13:47:29 2008 -0800"
      },
      "committer": {
        "name": "H. Peter Anvin",
        "email": "hpa@zytor.com",
        "time": "Fri Dec 19 15:40:30 2008 -0800"
      },
      "message": "x86: PAT: move track untrack pfnmap stubs to asm-generic\n\nImpact: Cleanup and branch hints only.\n\nMove the track and untrack pfn stub routines from memory.c to asm-generic.\nAlso add unlikely to pfnmap related calls in fork and exit path.\n\nSigned-off-by: Venkatesh Pallipadi \u003cvenkatesh.pallipadi@intel.com\u003e\nSigned-off-by: Suresh Siddha \u003csuresh.b.siddha@intel.com\u003e\nSigned-off-by: H. Peter Anvin \u003chpa@zytor.com\u003e\n"
    },
    {
      "commit": "2520bd3123c00272f818a176c92d03c7d0a113d6",
      "tree": "1c5f3e47243d77573cb4933dadc5224d2fb32686",
      "parents": [
        "8a7b12f70fb135a1b1d865687de3edcdc780f6d1"
      ],
      "author": {
        "name": "venkatesh.pallipadi@intel.com",
        "email": "venkatesh.pallipadi@intel.com",
        "time": "Thu Dec 18 11:41:32 2008 -0800"
      },
      "committer": {
        "name": "H. Peter Anvin",
        "email": "hpa@zytor.com",
        "time": "Thu Dec 18 13:30:16 2008 -0800"
      },
      "message": "x86: PAT: add pgprot_writecombine() interface for drivers - v3\n\nImpact: New mm functionality.\n\nAdd pgprot_writecombine. pgprot_writecombine will be aliased to\npgprot_noncached when not supported by the architecture.\n\nSigned-off-by: Venkatesh Pallipadi \u003cvenkatesh.pallipadi@intel.com\u003e\nSigned-off-by: Suresh Siddha \u003csuresh.b.siddha@intel.com\u003e\nSigned-off-by: H. Peter Anvin \u003chpa@zytor.com\u003e\n"
    },
    {
      "commit": "fe1a6875fcaaac2041945008a9875d2c07be1d9b",
      "tree": "5875f52aa0a859a91b96076279f028246475a6cb",
      "parents": [
        "de3b69d7d87e1e86c0307f0f15b377dcebeab906"
      ],
      "author": {
        "name": "Sebastian Siewior",
        "email": "bigeasy@linutronix.de",
        "time": "Tue Jul 15 22:28:46 2008 +0200"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 15 13:58:40 2008 -0700"
      },
      "message": "mm: fix build on non-mmu machines\n\nCommit 1ea0704e0d aka \"mm: add a ptep_modify_prot transaction abstraction\"\n\ncaused:\n\n|  CC      init/main.o\n|In file included from include2/asm/pgtable.h:68,\n|                 from /home/bigeasy/git/linux-2.6-m68k/include/linux/mm.h:39,\n|                 from include2/asm/uaccess.h:8,\n|                 from /home/bigeasy/git/linux-2.6-m68k/include/linux/poll.h:13,\n|                 from /home/bigeasy/git/linux-2.6-m68k/include/linux/rtc.h:113,\n|                 from /home/bigeasy/git/linux-2.6-m68k/include/linux/efi.h:19,\n|                 from /home/bigeasy/git/linux-2.6-m68k/init/main.c:43:\n|/linux-2.6/include/asm-generic/pgtable.h: In function \u0027__ptep_modify_prot_start\u0027:\n|/linux-2.6/include/asm-generic/pgtable.h:209: error: implicit declaration of function \u0027ptep_get_and_clear\u0027\n|/linux-2.6/include/asm-generic/pgtable.h:209: error: incompatible types in return\n|/linux-2.6/include/asm-generic/pgtable.h: In function \u0027__ptep_modify_prot_commit\u0027:\n|/linux-2.6/include/asm-generic/pgtable.h:220: error: implicit declaration of function \u0027set_pte_at\u0027\n|make[2]: *** [init/main.o] Error 1\n|make[1]: *** [init] Error 2\n|make: *** [sub-make] Error 2\n\non my m68knommu box.\n\nAcked-by: Jeremy Fitzhardinge \u003cjeremy.fitzhardinge@citrix.com\u003e\nCc: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nCc: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Sebastian Siewior \u003cbigeasy@linutronix.de\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1ea0704e0da65b2b46f9142ff1391163aac24060",
      "tree": "420215f0876bc9cf3da5a21e5c5904611f821faa",
      "parents": [
        "d02859ecb321c8c0f74cb9bbe3f51a59e58822b0"
      ],
      "author": {
        "name": "Jeremy Fitzhardinge",
        "email": "jeremy@goop.org",
        "time": "Mon Jun 16 04:30:00 2008 -0700"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Jun 25 15:15:53 2008 +0200"
      },
      "message": "mm: add a ptep_modify_prot transaction abstraction\n\nThis patch adds an API for doing read-modify-write updates to a pte\u0027s\nprotection bits which may race against hardware updates to the pte.\nAfter reading the pte, the hardware may asynchonously set the accessed\nor dirty bits on a pte, which would be lost when writing back the\nmodified pte value.\n\nThe existing technique to handle this race is to use\nptep_get_and_clear() atomically fetch the old pte value and clear it\nin memory.  This has the effect of marking the pte as non-present,\nwhich will prevent the hardware from updating its state.  When the new\nvalue is written back, the pte will be present again, and the hardware\ncan resume updating the access/dirty flags.\n\nWhen running in a virtualized environment, pagetable updates are\nrelatively expensive, since they generally involve some trap into the\nhypervisor.  To mitigate the cost of these updates, we tend to batch\nthem.\n\nHowever, because of the atomic nature of ptep_get_and_clear(), it is\ninherently non-batchable.  This new interface allows batching by\ngiving the underlying implementation enough information to open a\ntransaction between the read and write phases:\n\nptep_modify_prot_start() returns the current pte value, and puts the\n  pte entry into a state where either the hardware will not update the\n  pte, or if it does, the updates will be preserved on commit.\n\nptep_modify_prot_commit() writes back the updated pte, makes sure that\n  any hardware updates made since ptep_modify_prot_start() are\n  preserved.\n\nptep_modify_prot_start() and _commit() must be exactly paired, and\nused while holding the appropriate pte lock.  They do not protect\nagainst other software updates of the pte in any way.\n\nThe current implementations of ptep_modify_prot_start and _commit are\nfunctionally unchanged from before: _start() uses ptep_get_and_clear()\nfetch the pte and zero the entry, preventing any hardware updates.\n_commit() simply writes the new pte value back knowing that the\nhardware has not updated the pte in the meantime.\n\nThe only current user of this interface is mprotect\n\nSigned-off-by: Jeremy Fitzhardinge \u003cjeremy.fitzhardinge@citrix.com\u003e\nAcked-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nAcked-by: Hugh Dickins \u003chugh@veritas.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "954ffcb35f5aca428661d29b96c4eee82b3c19cd",
      "tree": "2dd8aaf26a8ae81b461b6d5d824ae8744690e483",
      "parents": [
        "97ee052461446526e1de7236497e6f1b1ffedf8c"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Oct 16 01:25:44 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Oct 16 09:42:59 2007 -0700"
      },
      "message": "flush icache before set_pte() on ia64: flush icache at set_pte\n\nCurrent ia64 kernel flushes icache by lazy_mmu_prot_update() *after*\nset_pte().  This is too late.  This patch removes lazy_mmu_prot_update and\nadd modfied set_pte() for flushing if necessary.\n\nThis patch flush icache of a page when\n\tnew pte has exec bit.\n\t\u0026\u0026 new pte has present bit\n\t\u0026\u0026 new pte is user\u0027s page.\n\t\u0026\u0026 (old *ptep is not present\n            || new pte\u0027s pfn is not same to old *ptep\u0027s ptn)\n\t\u0026\u0026 new pte\u0027s page has no Pg_arch_1 bit.\n\t   Pg_arch_1 is set when a page is cache consistent.\n\nI think this condition checks are much easier to understand than considering\n\"Where sync_icache_dcache() should be inserted ?\".\n\npte_user() for ia64 was removed by http://lkml.org/lkml/2007/6/12/67 as\nclean-up. So, I added it again.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: \"Luck, Tony\" \u003ctony.luck@intel.com\u003e\nCc: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nAcked-by: David S. Miller \u003cdavem@davemloft.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9535239f6bc99f68e0cfae44505ad402b53ed24c",
      "tree": "3805894887354ee777250a7593d4a61ec4b40d56",
      "parents": [
        "73c59afc65cfa50c3362b9ce1ec151a79c41dd8e"
      ],
      "author": {
        "name": "Greg Ungerer",
        "email": "gerg@snapgear.com",
        "time": "Fri Aug 10 13:01:20 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Sat Aug 11 15:47:42 2007 -0700"
      },
      "message": "changing include/asm-generic/pgtable.h for non-mmu\n\nThere are some parts of include/asm-generic/pgtable.h that are relevant to\nthe non-mmu architectures.  To make it easier to include this from them I\nwould like to ifdef the relevant parts.\n\nWithout this there is a handful of functions that are referenced in here\nthat are not defined on many non-mmu architectures.  They could be defined\nout of course, as an alternative approach.\n\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": "e21ea246bce5bb93dd822de420172ec280aed492",
      "tree": "d624d1257728d8d869d54420c83d4bf4c4e19189",
      "parents": [
        "f0e47c229b489e37ba7e4159ef7f9cf9ccd44e19"
      ],
      "author": {
        "name": "Martin Schwidefsky",
        "email": "schwidefsky@de.ibm.com",
        "time": "Tue Jul 17 04:03:03 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:22:59 2007 -0700"
      },
      "message": "mm: remove ptep_test_and_clear_dirty and ptep_clear_flush_dirty\n\nNobody is using ptep_test_and_clear_dirty and ptep_clear_flush_dirty.  Remove\nthe functions from all architectures.\n\nSigned-off-by: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nCc: Hugh Dickins \u003chugh@veritas.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f0e47c229b489e37ba7e4159ef7f9cf9ccd44e19",
      "tree": "52ec70d775bb7f7eafa6863829646ee49cbf427f",
      "parents": [
        "5ee403f584a67fb8725cca4d55218925b9295528"
      ],
      "author": {
        "name": "Martin Schwidefsky",
        "email": "schwidefsky@de.ibm.com",
        "time": "Tue Jul 17 04:03:03 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 10:22:59 2007 -0700"
      },
      "message": "mm: remove ptep_establish()\n\nThe last user of ptep_establish in mm/ is long gone.  Remove the architecture\nprimitive as well.\n\nSigned-off-by: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nCc: Hugh Dickins \u003chugh@veritas.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8dab5241d06bfc9ee141ea78c56cde5070d7460d",
      "tree": "dd9dc3c64c17862b169f4cbe5fd4a108d960c920",
      "parents": [
        "679ce0ace6b1a07043bc3b405a34ddccad808886"
      ],
      "author": {
        "name": "Benjamin Herrenschmidt",
        "email": "benh@kernel.crashing.org",
        "time": "Sat Jun 16 10:16:12 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Sat Jun 16 13:16:16 2007 -0700"
      },
      "message": "Rework ptep_set_access_flags and fix sun4c\n\nSome changes done a while ago to avoid pounding on ptep_set_access_flags and\nupdate_mmu_cache in some race situations break sun4c which requires\nupdate_mmu_cache() to always be called on minor faults.\n\nThis patch reworks ptep_set_access_flags() semantics, implementations and\ncallers so that it\u0027s now responsible for returning whether an update is\nnecessary or not (basically whether the PTE actually changed).  This allow\nfixing the sparc implementation to always return 1 on sun4c.\n\n[akpm@linux-foundation.org: fixes, cleanups]\nSigned-off-by: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nCc: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: David Miller \u003cdavem@davemloft.net\u003e\nCc: Mark Fortescue \u003cmark@mtfhpc.demon.co.uk\u003e\nAcked-by: William Lee Irwin III \u003cwli@holomorphy.com\u003e\nCc: \"Luck, Tony\" \u003ctony.luck@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": "6c210482ae4a9a5bb9377ad250feaacec3faa3cd",
      "tree": "2eb89d89a22380298d64edad59010c1d0a59e5a4",
      "parents": [
        "2fc2d1e9ffcde78af7ab63ed640d9a4901797de2"
      ],
      "author": {
        "name": "Martin Schwidefsky",
        "email": "schwidefsky@de.ibm.com",
        "time": "Fri Apr 27 16:01:57 2007 +0200"
      },
      "committer": {
        "name": "Martin Schwidefsky",
        "email": "schwidefsky@de.ibm.com",
        "time": "Fri Apr 27 16:01:46 2007 +0200"
      },
      "message": "[S390] split page_test_and_clear_dirty.\n\nThe page_test_and_clear_dirty primitive really consists of two\noperations, page_test_dirty and the page_clear_dirty. The combination\nof the two is not an atomic operation, so it makes more sense to have\ntwo separate operations instead of one.\nIn addition to the improved readability of the s390 version of\nSetPageUptodate, it now avoids the page_test_dirty operation which is\nan insert-storage-key-extended (iske) instruction which is an expensive\noperation.\n\nSigned-off-by: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\n"
    },
    {
      "commit": "49f19710512c825aaea73b9207b3a848027cda1d",
      "tree": "06da31bd9a84273e12aa43f536f90eb8146ff92e",
      "parents": [
        "a5bfffac645a7b2d8119f8bbae34df5c94832799"
      ],
      "author": {
        "name": "Zachary Amsden",
        "email": "zach@vmware.com",
        "time": "Sun Apr 08 16:04:01 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Sun Apr 08 19:47:55 2007 -0700"
      },
      "message": "[PATCH] Proper fix for highmem kmap_atomic functions for VMI for 2.6.21\n\nSince lazy MMU batching mode still allows interrupts to enter, it is\npossible for interrupt handlers to try to use kmap_atomic, which fails when\nlazy mode is active, since the PTE update to highmem will be delayed.  The\nbest workaround is to issue an explicit flush in kmap_atomic_functions\ncase; this is the only way nested PTE updates can happen in the interrupt\nhandler.\n\nThanks to Jeremy Fitzhardinge for noting the bug and suggestions on a fix.\n\nThis patch gets reverted again when we start 2.6.22 and the bug gets fixed\ndifferently.\n\nSigned-off-by: Zachary Amsden \u003czach@vmware.com\u003e\nCc: Andi Kleen \u003cak@muc.de\u003e\nCc: Jeremy Fitzhardinge \u003cjeremy@goop.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9226d125d94c7e4964dd41cc5e9ca2ff84091d01",
      "tree": "935d6e80ff843e1d7b54e0fd9386ef2e0d31aa3d",
      "parents": [
        "c119ecce894120790903ef535dac3e105f3d6cde"
      ],
      "author": {
        "name": "Zachary Amsden",
        "email": "zach@vmware.com",
        "time": "Tue Feb 13 13:26:21 2007 +0100"
      },
      "committer": {
        "name": "Andi Kleen",
        "email": "andi@basil.nowhere.org",
        "time": "Tue Feb 13 13:26:21 2007 +0100"
      },
      "message": "[PATCH] i386: paravirt CPU hypercall batching mode\n\nThe VMI ROM has a mode where hypercalls can be queued and batched.  This turns\nout to be a significant win during context switch, but must be done at a\nspecific point before side effects to CPU state are visible to subsequent\ninstructions.  This is similar to the MMU batching hooks already provided.\nThe same hooks could be used by the Xen backend to implement a context switch\nmulticall.\n\nTo explain a bit more about lazy modes in the paravirt patches, basically, the\nidea is that only one of lazy CPU or MMU mode can be active at any given time.\n Lazy MMU mode is similar to this lazy CPU mode, and allows for batching of\nmultiple PTE updates (say, inside a remap loop), but to avoid keeping some\nkind of state machine about when to flush cpu or mmu updates, we just allow\none or the other to be active.  Although there is no real reason a more\ncomprehensive scheme could not be implemented, there is also no demonstrated\nneed for this extra complexity.\n\nSigned-off-by: Zachary Amsden \u003czach@vmware.com\u003e\nSigned-off-by: Andi Kleen \u003cak@suse.de\u003e\nCc: Andi Kleen \u003cak@suse.de\u003e\nCc: Jeremy Fitzhardinge \u003cjeremy@xensource.com\u003e\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: Chris Wright \u003cchrisw@sous-sol.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\n"
    },
    {
      "commit": "a93cb055a23f3172c1e6a22ac1dc4f1c07929b08",
      "tree": "b2118140583912c78d42a3ba950be39815addc14",
      "parents": [
        "d6d861e3c963b4077c83e078e3e300c4b81f93e7"
      ],
      "author": {
        "name": "Zachary Amsden",
        "email": "zach@vmware.com",
        "time": "Sat Sep 30 23:29:37 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Oct 01 00:39:34 2006 -0700"
      },
      "message": "[PATCH] paravirt: remove set pte atomic\n\nNow that ptep_establish has a definition in PAE i386 3-level paging code, the\nonly paging model which is insane enough to have multi-word hardware PTEs\nwhich are not efficient to set atomically, we can remove the ghost of\nset_pte_atomic from other architectures which falesly duplicated it, and\nremove all knowledge of it from the generic pgtable code.\n\nset_pte_atomic is now a private pte operator which is specific to i386\n\nSigned-off-by: Zachary Amsden \u003czach@vmware.com\u003e\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: Jeremy Fitzhardinge \u003cjeremy@xensource.com\u003e\nCc: Andi Kleen \u003cak@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "6606c3e0da5360799e07ae24b05080cc85c68e72",
      "tree": "5072acfc3b36e48ec84fe28805d160cbc9b28900",
      "parents": [
        "9888a1cae3f859db38b9604e3df1c02177161bb0"
      ],
      "author": {
        "name": "Zachary Amsden",
        "email": "zach@vmware.com",
        "time": "Sat Sep 30 23:29:33 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Oct 01 00:39:33 2006 -0700"
      },
      "message": "[PATCH] paravirt: lazy mmu mode hooks.patch\n\nImplement lazy MMU update hooks which are SMP safe for both direct and shadow\npage tables.  The idea is that PTE updates and page invalidations while in\nlazy mode can be batched into a single hypercall.  We use this in VMI for\nshadow page table synchronization, and it is a win.  It also can be used by\nPPC and for direct page tables on Xen.\n\nFor SMP, the enter / leave must happen under protection of the page table\nlocks for page tables which are being modified.  This is because otherwise,\nyou end up with stale state in the batched hypercall, which other CPUs can\nrace ahead of.  Doing this under the protection of the locks guarantees the\nsynchronization is correct, and also means that spurious faults which are\ngenerated during this window by remote CPUs are properly handled, as the page\nfault handler must re-check the PTE under protection of the same lock.\n\nSigned-off-by: Zachary Amsden \u003czach@vmware.com\u003e\nSigned-off-by: Jeremy Fitzhardinge \u003cjeremy@xensource.com\u003e\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: Andi Kleen \u003cak@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "9888a1cae3f859db38b9604e3df1c02177161bb0",
      "tree": "5954dc5e1a2dc1251a57a41aa15b7776a530f230",
      "parents": [
        "3dc907951446b9317b1887223caa4e083390de9f"
      ],
      "author": {
        "name": "Zachary Amsden",
        "email": "zach@vmware.com",
        "time": "Sat Sep 30 23:29:31 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Oct 01 00:39:33 2006 -0700"
      },
      "message": "[PATCH] paravirt: pte clear not present\n\nChange pte_clear_full to a more appropriately named pte_clear_not_present,\nallowing optimizations when not-present mapping changes need not be reflected\nin the hardware TLB for protected page table modes.  There is also another\ncase that can use it in the fremap code.\n\nSigned-off-by: Zachary Amsden \u003czach@vmware.com\u003e\nSigned-off-by: Jeremy Fitzhardinge \u003cjeremy@xensource.com\u003e\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: Andi Kleen \u003cak@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "673eae8230a192f07b8715b872d6925521e9738d",
      "tree": "2917c765594015ebfad00bb4fc1feef41286ca1a",
      "parents": [
        "753b9f86e7aef76c2beda32668ce528f90cb1733"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Mon Sep 25 23:32:29 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Sep 26 08:48:56 2006 -0700"
      },
      "message": "[PATCH] x86: trivial pgtable.h __ASSEMBLY__ move\n\nParsing generic pgtable.h in assembler is simply crazy.  None of this file is\nneeded in assembler code, and C inline functions and structures routine break\none or more different compiles.\n\nSigned-off-by: Zachary Amsden \u003czach@vmware.com\u003e\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "0b0968a3e691771bf87e1ce747b2c7d23b5526c8",
      "tree": "71787e376b7aef54b48e99d15a0fc11c7cf7ee8d",
      "parents": [
        "951bc82c53f30ec6b4c2d04a051e74ea9a89b669"
      ],
      "author": {
        "name": "David S. Miller",
        "email": "davem@sunset.sfo1.dsl.speakeasy.net",
        "time": "Thu Jun 01 17:47:25 2006 -0700"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@sunset.sfo1.dsl.speakeasy.net",
        "time": "Thu Jun 01 17:47:25 2006 -0700"
      },
      "message": "[SPARC64]: Fix D-cache corruption in mremap\n\nIf we move a mapping from one virtual address to another,\nand this changes the virtual color of the mapping to those\npages, we can see corrupt data due to D-cache aliasing.\n\nCheck for and deal with this by overriding the move_pte()\nmacro.  Set things up so that other platforms can cleanly\noverride the move_pte() macro too.\n\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "8c65b4a60450590e79a28e9717ceffa9e4debb3f",
      "tree": "e0e42b5faee0a1c44746a36d9df7a8fbb2a2c24c",
      "parents": [
        "6fdcc2162285a8fc96ab12ff85086c37bceaa494"
      ],
      "author": {
        "name": "Tim Schmielau",
        "email": "tim@physik3.uni-rostock.de",
        "time": "Mon Nov 07 00:59:43 2005 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Nov 07 07:53:41 2005 -0800"
      },
      "message": "[PATCH] fix remaining missing includes\n\nFix more include file problems that surfaced since I submitted the previous\nfix-missing-includes.patch.  This should now allow not to include sched.h\nfrom module.h, which is done by a followup patch.\n\nSigned-off-by: Tim Schmielau \u003ctim@physik3.uni-rostock.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "b8072f099b7829a6ff3eba618e1d079a81f753f8",
      "tree": "80bf801b68ecf5f29a61f0f4fd5976b4daa91c6a",
      "parents": [
        "f412ac08c9861b4791af0145934c22f1458686da"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh@veritas.com",
        "time": "Sat Oct 29 18:16:41 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sat Oct 29 21:40:42 2005 -0700"
      },
      "message": "[PATCH] mm: update comments to pte lock\n\nUpdated several references to page_table_lock in common code comments.\n\nSigned-off-by: Hugh Dickins \u003chugh@veritas.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "8b1f3124618b54cf125dea3a074b9cf469117723",
      "tree": "19ef8a7fe9cc5b1c46dc973ea151edab4aba2b8a",
      "parents": [
        "95001ee9256df846e374f116c92ca8e0beec1527"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "nickpiggin@yahoo.com.au",
        "time": "Tue Sep 27 21:45:18 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Sep 28 07:46:40 2005 -0700"
      },
      "message": "[PATCH] mm: move_pte to remap ZERO_PAGE\n\nMove the ZERO_PAGE remapping complexity to the move_pte macro in\nasm-generic, have it conditionally depend on\n__HAVE_ARCH_MULTIPLE_ZERO_PAGE, which gets defined for MIPS.\n\nFor architectures without __HAVE_ARCH_MULTIPLE_ZERO_PAGE, move_pte becomes\na noop.\n\nFrom: Hugh Dickins \u003chugh@veritas.com\u003e\n\nFix nasty little bug we\u0027ve missed in Nick\u0027s mremap move ZERO_PAGE patch.\nThe \"pte\" at that point may be a swap entry or a pte_file entry: we must\ncheck pte_present before perhaps corrupting such an entry.\n\nPatch below against 2.6.14-rc2-mm1, but the same bug is in 2.6.14-rc2\u0027s\nmm/mremap.c, and more dangerous there since it\u0027s affecting all arches: I\nthink the safest course is to send Nick\u0027s patch and Yoichi\u0027s build fix and\nthis fix (build tested) on to Linus - so only MIPS can be affected.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Hugh Dickins \u003chugh@veritas.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "a600388d28419305aad3c4c0af52c223cf6fa0af",
      "tree": "c70d3d80275f189c49311183472367f45d1a1ef2",
      "parents": [
        "fa5b08d5f818063d18433194f20359ef2ae50254"
      ],
      "author": {
        "name": "Zachary Amsden",
        "email": "zach@vmware.com",
        "time": "Sat Sep 03 15:55:04 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@evo.osdl.org",
        "time": "Mon Sep 05 00:05:48 2005 -0700"
      },
      "message": "[PATCH] x86: ptep_clear optimization\n\nAdd a new accessor for PTEs, which passes the full hint from the mmu_gather\nstruct; this allows architectures with hardware pagetables to optimize away\natomic PTE operations when destroying an address space.  Removing the\nlocked operation should allow better pipelining of memory access in this\nloop.  I measured an average savings of 30-35 cycles per zap_pte_range on\nthe first 500 destructions on Pentium-M, but I believe the optimization\nwould win more on older processors which still assert the bus lock on xchg\nfor an exclusive cacheline.\n\nUpdate: I made some new measurements, and this saves exactly 26 cycles over\nptep_get_and_clear on Pentium M.  On P4, with a PAE kernel, this saves 180\ncycles per ptep_get_and_clear, for a whopping 92160 cycles savings for a\nfull address space destruction.\n\npte_clear_full is not yet used, but is provided for future optimizations\n(in particular, when running inside of a hypervisor that queues page table\nupdates, the full hint allows us to avoid queueing unnecessary page table\nupdate for an address space in the process of being destroyed.\n\nThis is not a huge win, but it does help a bit, and sets the stage for\nfurther hypervisor optimization of the mm layer on all architectures.\n\nSigned-off-by: Zachary Amsden \u003czach@vmware.com\u003e\nCc: Christoph Lameter \u003cchristoph@lameter.com\u003e\nCc: \u003clinux-mm@kvack.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "b4955ce3dd0818b56da532a16c9a4a3804a558ee",
      "tree": "6e01667181bfc495b56e39748783ad2235a4f56e",
      "parents": [
        "c475a8ab625d567eacf5e30ec35d6d8704558062"
      ],
      "author": {
        "name": "Abhijit Karmarkar",
        "email": "abhijitk@veritas.com",
        "time": "Tue Jun 21 17:15:13 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Tue Jun 21 18:46:21 2005 -0700"
      },
      "message": "[PATCH] msync: check pte dirty earlier\n\nIt\u0027s common practice to msync a large address range regularly, in which\noften only a few ptes have actually been dirtied since the previous pass.\n\nsync_pte_range then goes much faster if it tests whether pte is dirty\nbefore locating and accessing each struct page cacheline; and it is hardly\nslowed by ptep_clear_flush_dirty repeating that test in the opposite case,\nwhen every pte actually is dirty.\n\nBut beware, s390\u0027s pte_dirty always says false, since its dirty bit is kept\nin the storage key, located via the struct page address.  So skip this\noptimization in its case: use a pte_maybe_dirty macro which just says true\nif page_test_and_clear_dirty is implemented.\n\nSigned-off-by: Abhijit Karmarkar \u003cabhijitk@veritas.com\u003e\nSigned-off-by: Hugh Dickins \u003chugh@veritas.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "8f6c99c11ae63ce887686f3e51c412cc4d8d8a7d",
      "tree": "4c3f29ce21f2a69f9105581c95e07de5bc5bb7aa",
      "parents": [
        "3bf5ee95648c694bac4d13529563c230cd4fe5f2"
      ],
      "author": {
        "name": "Hugh Dickins",
        "email": "hugh@veritas.com",
        "time": "Tue Apr 19 13:29:17 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org.(none)",
        "time": "Tue Apr 19 13:29:17 2005 -0700"
      },
      "message": "[PATCH] freepgt: remove arch pgd_addr_end\n\nia64 and sparc64 hurriedly had to introduce their own variants of\npgd_addr_end, to leapfrog over the holes in their virtual address spaces which\nthe final clear_page_range suddenly presented when converted from pgd_index to\npgd_addr_end.  But now that free_pgtables respects the vma list, those holes\nare never presented, and the arch variants can go.\n\nSigned-off-by: Hugh Dickins \u003chugh@veritas.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
      "tree": "0bba044c4ce775e45a88a51686b5d9f90697ea9d",
      "parents": [],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:20:36 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:20:36 2005 -0700"
      },
      "message": "Linux-2.6.12-rc2\n\nInitial git repository build. I\u0027m not bothering with the full history,\neven though we have it. We can create a separate \"historical\" git\narchive of that later if we want to, and in the meantime it\u0027s about\n3.2GB when imported into git - space that would just make the early\ngit days unnecessarily complicated, when we don\u0027t have a lot of good\ninfrastructure for it.\n\nLet it rip!\n"
    }
  ]
}
