)]}'
{
  "commit": "fa28ba21cec24d3fa1279bcae7e5d5ff6224635a",
  "tree": "dda47a7faa85428753691a50f49b0404f78ea0ec",
  "parents": [
    "f212ec4b7b4d84290f12c9c0416cdea283bf5f40"
  ],
  "author": {
    "name": "Jeremy Fitzhardinge",
    "email": "jeremy@goop.org",
    "time": "Wed Jan 30 13:34:11 2008 +0100"
  },
  "committer": {
    "name": "Ingo Molnar",
    "email": "mingo@elte.hu",
    "time": "Wed Jan 30 13:34:11 2008 +0100"
  },
  "message": "x86: defer cr3 reload when doing pud_clear()\n\nPAE mode requires that we reload cr3 in order to guarantee that\nchanges to the pgd will be noticed by the processor.  This means that\nin principle pud_clear needs to reload cr3 every time.  However,\nbecause reloading cr3 implies a tlb flush, we want to avoid it where\npossible.\n\npud_clear() is only used in a couple of places:\n - in free_pmd_range(), when pulling down a range of process address space, and\n - huge_pmd_unshare()\n\nIn both cases, the calling code will do a a tlb flush anyway, so\nthere\u0027s no need to do it within pud_clear().\n\nIn free_pmd_range(), the pud_clear is immediately followed by\npmd_free_tlb(); we can hook that to make the mmu_gather do an\nunconditional full flush to make sure cr3 gets reloaded.\n\nIn huge_pmd_unshare, it is followed by flush_tlb_range, which always\nresults in a full cr3-reload tlb flush.\n\nSigned-off-by: Jeremy Fitzhardinge \u003cjeremy@xensource.com\u003e\nCc: Andi Kleen \u003cak@suse.de\u003e\nCc: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nCc: H. Peter Anvin \u003chpa@zytor.com\u003e\nCc: William Irwin \u003cwli@holomorphy.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "0caa37a9a25ffe94a5f96cff26a7f75fb93b4aff",
      "old_mode": 33188,
      "old_path": "include/asm-x86/pgalloc_32.h",
      "new_id": "10c2b452e64c87b4a1abf0d8058e4d48eabbc5a5",
      "new_mode": 33188,
      "new_path": "include/asm-x86/pgalloc_32.h"
    },
    {
      "type": "modify",
      "old_id": "ed4c6f0e57ec28464b018f6a61e4fed80a6257dc",
      "old_mode": 33188,
      "old_path": "include/asm-x86/pgtable-3level.h",
      "new_id": "a195c3e757b9ef95931d4c7341fdd2ab02d44464",
      "new_mode": 33188,
      "new_path": "include/asm-x86/pgtable-3level.h"
    }
  ]
}
