)]}'
{
  "log": [
    {
      "commit": "2e3e5882dca3ab409aa8c9c96f47610b576719f8",
      "tree": "53184e9026b67710bd74615b818c53a6b62c3ab4",
      "parents": [
        "cbdd1bea2a2dce4c0b45c5f0122c150d9f07f0bc"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Mon Sep 10 11:28:17 2007 +0300"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Sat Oct 13 10:18:27 2007 +0200"
      },
      "message": "KVM: MMU: Don\u0027t do GFP_NOWAIT allocations\n\nBefore preempt notifiers, kvm needed to allocate memory with GFP_NOWAIT so\nas not to have to enable preemption and take a heavyweight exit.  On oom, we\u0027d\nfall back to a GFP_KERNEL allocation.\n\nWith preemption notifiers, we can do a GFP_KERNEL allocation, and perform\nthe heavyweight exit only if the kernel decides to put us to sleep.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "cbdd1bea2a2dce4c0b45c5f0122c150d9f07f0bc",
      "tree": "c01443051868880733c2973abdd59c1d82fdd243",
      "parents": [
        "0d8d2bd4f20c8a2a254b4fe3bc114f12214a6d73"
      ],
      "author": {
        "name": "Christian Ehrhardt",
        "email": "ehrhardt@linux.vnet.ibm.com",
        "time": "Sun Sep 09 15:41:59 2007 +0300"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Sat Oct 13 10:18:27 2007 +0200"
      },
      "message": "KVM: Rename kvm_arch_ops to kvm_x86_ops\n\nThis patch just renames the current (misnamed) _arch namings to _x86 to\nensure better readability when a real arch layer takes place.\n\nSigned-off-by: Christian Ehrhardt \u003cehrhardt@linux.vnet.ibm.com\u003e\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "11ec2804711896546ee3c945f3786c7f9fdd175a",
      "tree": "1e26102931efb8b0b48c440887577d21170ef94a",
      "parents": [
        "15ad71460d75fd7ca41bb248a2310f3f39b302ba"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Mon Jul 23 14:51:37 2007 +0800"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Sat Oct 13 10:18:20 2007 +0200"
      },
      "message": "KVM: Convert vm lock to a mutex\n\nThis allows the kvm mmu to perform sleepy operations, such as memory\nallocation.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "15ad71460d75fd7ca41bb248a2310f3f39b302ba",
      "tree": "1ea549e5c5629561c121a54def146fb6b706c2d4",
      "parents": [
        "519ef35341b4f360f072ea74e398b70a5a2fc270"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Wed Jul 11 18:17:21 2007 +0300"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Sat Oct 13 10:18:20 2007 +0200"
      },
      "message": "KVM: Use the scheduler preemption notifiers to make kvm preemptible\n\nCurrent kvm disables preemption while the new virtualization registers are\nin use.  This of course is not very good for latency sensitive workloads (one\nuse of virtualization is to offload user interface and other latency\ninsensitive stuff to a container, so that it is easier to analyze the\nremaining workload).  This patch re-enables preemption for kvm; preemption\nis now only disabled when switching the registers in and out, and during\nthe switch to guest mode and back.\n\nContains fixes from Shaohua Li \u003cshaohua.li@intel.com\u003e.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "fe5518819463d57ed032bc12458ed681bc790609",
      "tree": "15d13f175f2b77970eb7d84d442689426cafd283",
      "parents": [
        "9ae0448f53324b3c476f68bd134d97ac4ec27e0c"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Mon Jul 23 14:51:39 2007 +0800"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Sat Oct 13 10:18:19 2007 +0200"
      },
      "message": "KVM: Move gfn_to_page out of kmap/unmap pairs\n\ngfn_to_page might sleep with swap support. Move it out of the kmap calls.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "707d92fa72b425bc919a84670c01402e81505c58",
      "tree": "9e3a55293e867e499fd625ebac45db565ff0fc38",
      "parents": [
        "9a2b85c620b9779360c7726de4caeda78cac38d4"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Tue Jul 17 23:19:08 2007 +1000"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Sat Oct 13 10:18:18 2007 +0200"
      },
      "message": "KVM: Trivial: Use standard CR0 flags macros from asm/cpu-features.h\n\nThe kernel now has asm/cpu-features.h: use those macros instead of\ninventing our own.\n\nAlso spell out definition of CR0_RESEVED_BITS (no code change) and fix typo.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "22d95b1282810f5af599ee292b3fc443aefbdad0",
      "tree": "dafe050aef12ea4bbac4ffb77070d8ec416a0838",
      "parents": [
        "44e3ff32ac229a10a30b7b840f092f5b32a5f72a"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Fri Sep 14 20:26:06 2007 +0300"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Fri Sep 14 13:59:55 2007 -0700"
      },
      "message": "KVM: MMU: Fix rare oops on guest context switch\n\nA guest context switch to an uncached cr3 can require allocation of\nshadow pages, but we only recycle shadow pages in kvm_mmu_page_fault().\n\nMove shadow page recycling to mmu_topup_memory_caches(), which is called\nfrom both the page fault handler and from guest cr3 reload.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c4d198d5183ec7bbf8b53216cfc5ded7ebb0ec0c",
      "tree": "7b86e7959f607f1f5015a498515392d8fa480f83",
      "parents": [
        "5c4c1489b93c9dc51cc6e97fd73e325ce94983c0"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Sat Jul 21 09:06:46 2007 +0300"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Fri Jul 20 23:48:47 2007 -0700"
      },
      "message": "KVM: MMU: Fix cleaning up the shadow page allocation cache\n\n__free_page() wants a struct page, not a virtual address.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c1158e63dfeb3928e94c768f0a403b3e0e799f70",
      "tree": "03a30831c27255d82d479b0242017fb2e9c342a5",
      "parents": [
        "35f3f28613bc7263949db23a4c7078e425810c8c"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Fri Jul 20 08:18:27 2007 +0300"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Fri Jul 20 20:23:59 2007 +0300"
      },
      "message": "KVM: MMU: Fix oopses with SLUB\n\nThe kvm mmu uses page-\u003eprivate on shadow page tables; so does slub, and\nan oops result.  Fix by allocating regular pages for shadows instead of\nusing slub.\n\nTested-by: S.Çağlar Onur \u003ccaglar@pardus.org.tr\u003e\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "90cb0529dd230548a7f0d6b315997be854caea1b",
      "tree": "31aad8e119781b7df846a8f8d8522a82ff3e4b25",
      "parents": [
        "d55e2cb20123cdb5020ec4a2b2f1eace5038c292"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Tue Jul 17 13:04:56 2007 +0300"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Fri Jul 20 20:16:29 2007 +0300"
      },
      "message": "KVM: Fix memory slot management functions for guest smp\n\nThe memory slot management functions were oriented against vcpu 0, where\nthey should be kvm-wide.  This causes hangs starting X on guest smp.\n\nFix by making the functions (and resultant tail in the mmu) non-vcpu-specific.\nUnfortunately this reduces the efficiency of the mmu object cache a bit.  We\nmay have to revisit this later.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "20c2df83d25c6a95affe6157a4c9cac4cf5ffaac",
      "tree": "415c4453d2b17a50abe7a3e515177e1fa337bd67",
      "parents": [
        "64fb98fc40738ae1a98bcea9ca3145b89fb71524"
      ],
      "author": {
        "name": "Paul Mundt",
        "email": "lethal@linux-sh.org",
        "time": "Fri Jul 20 10:11:58 2007 +0900"
      },
      "committer": {
        "name": "Paul Mundt",
        "email": "lethal@linux-sh.org",
        "time": "Fri Jul 20 10:11:58 2007 +0900"
      },
      "message": "mm: Remove slab destructors from kmem_cache_create().\n\nSlab destructors were no longer supported after Christoph\u0027s\nc59def9f222d44bb7e2f0a559f2906191a0862d7 change. They\u0027ve been\nBUGs for both slab and slub, and slob never supported them\neither.\n\nThis rips out support for the dtor pointer from kmem_cache_create()\ncompletely and fixes up every single callsite in the kernel (there were\nabout 224, not including the slab allocator definitions themselves,\nor the documentation references).\n\nSigned-off-by: Paul Mundt \u003clethal@linux-sh.org\u003e\n"
    },
    {
      "commit": "e495606dd09d79f9fa496334ac3958f6ff179d82",
      "tree": "0ee6495edb52286e7f7a67841c461fea36e782da",
      "parents": [
        "d6d281684913dabb878e2f53219eed5df2cd867b"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Thu Jun 28 14:15:57 2007 -0400"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Mon Jul 16 12:05:49 2007 +0300"
      },
      "message": "KVM: Clean up #includes\n\nRemove unnecessary ones, and rearange the remaining in the standard order.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "88a97f0b2fe1cd08d06390dc2669b709ea96e11a",
      "tree": "f6b3db226a0253ae3e2689b09c5f084bba24c967",
      "parents": [
        "75880a01124c6aa5d428bdc14163039a87618be1"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Wed Jun 20 17:13:26 2007 +0800"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Mon Jul 16 12:05:48 2007 +0300"
      },
      "message": "KVM: MMU: Fix Wrong tlb flush order\n\nNeed to flush the tlb after updating a pte, not before.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "d9e368d61263055eceac2966bb7ea31b89da3425",
      "tree": "9d507b851ea7bd667cdd50dde640e47e0d4773e9",
      "parents": [
        "39c3b86e5c193e09f69f0e99c93600a4999ffc60"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Thu Jun 07 19:18:30 2007 +0300"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Mon Jul 16 12:05:46 2007 +0300"
      },
      "message": "KVM: Flush remote tlbs when reducing shadow pte permissions\n\nWhen a vcpu causes a shadow tlb entry to have reduced permissions, it\nmust also clear the tlb on remote vcpus.  We do that by:\n\n- setting a bit on the vcpu that requests a tlb flush before the next entry\n- if the vcpu is currently executing, we send an ipi to make sure it\n  exits before we continue\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "7b53aa56508479507c6e5667bb252ca7c2cd19cf",
      "tree": "d2020d70e6578f0d6405cba3f3b5a1ccdc62a581",
      "parents": [
        "313899477f7578d37e82ead1af10f794a6da3c90"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Tue Jun 05 12:17:03 2007 +0300"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Mon Jul 16 12:05:45 2007 +0300"
      },
      "message": "KVM: Fix vcpu freeing for guest smp\n\nA vcpu can pin up to four mmu shadow pages, which means the freeing\nloop will never terminate.  Fix by first unpinning shadow pages on\nall vcpus, then freeing shadow pages.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "17c3ba9d37dbda490792a2b52953f09d0dee30d6",
      "tree": "44749b8658b61c7aa6cdb38d7823fa061d24b12c",
      "parents": [
        "bd2b2baa5c5fbb08b4b0df7508ff419407f7ece6"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Mon Jun 04 15:58:30 2007 +0300"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Mon Jul 16 12:05:45 2007 +0300"
      },
      "message": "KVM: Lazy guest cr3 switching\n\nSwitch guest paging context may require us to allocate memory, which\nmight fail.  Instead of wiring up error paths everywhere, make context\nswitching lazy and actually do the switch before the next guest entry,\nwhere we can return an error if allocation fails.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "bd2b2baa5c5fbb08b4b0df7508ff419407f7ece6",
      "tree": "48cfc0023069b65203741f17586720e48c3f54f9",
      "parents": [
        "b64b3763a5b3868e85330c891e1a30189dcde9b1"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Thu May 31 18:28:51 2007 +0300"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Mon Jul 16 12:05:45 2007 +0300"
      },
      "message": "KVM: MMU: Remove unused large page marker\n\nThis has not been used for some time, as the same information is available\nin the page header.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "b64b3763a5b3868e85330c891e1a30189dcde9b1",
      "tree": "906df8e5b7b43b0b2ef19a4ab57eeaee40f9d21a",
      "parents": [
        "fd97dc516c372982f9c3637e20b131e1f55ac2f6"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Thu May 31 18:24:09 2007 +0300"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Mon Jul 16 12:05:44 2007 +0300"
      },
      "message": "KVM: MMU: Don\u0027t cache guest access bits in the shadow page table\n\nThis was once used to avoid accessing the guest pte when upgrading\nthe shadow pte from read-only to read-write.  But usually we need\nto set the guest pte dirty or accessed bits anyway, so this wasn\u0027t\nreally exploited.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "fd97dc516c372982f9c3637e20b131e1f55ac2f6",
      "tree": "40c86e7691de599286daeebaa942d0392e54e1dd",
      "parents": [
        "4436d466219a6a7874ebc19eb6523c3a9a280dcc"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Thu May 31 18:20:14 2007 +0300"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Mon Jul 16 12:05:44 2007 +0300"
      },
      "message": "KVM: MMU: Simpify accessed/dirty/present/nx bit handling\n\nAlways set the accessed and dirty bit (since having them cleared causes\na read-modify-write cycle), always set the present bit, and copy the\nnx bit from the guest.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "e663ee64aefc57f7eff7325142206c4ea0200be8",
      "tree": "a95c5a1015914ee4101c1770039ad1457e8767c3",
      "parents": [
        "0d551bb698e1328f685ae3611c4a4a96f41bef97"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Thu May 31 15:46:04 2007 +0300"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Mon Jul 16 12:05:44 2007 +0300"
      },
      "message": "KVM: MMU: Make setting shadow ptes atomic on i386\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "97a0a01ea9229e4f3f0f06e0584227e9687159a5",
      "tree": "94ca92cafa05c7156757557466fa7887dd47a14f",
      "parents": [
        "63b1ad24d2695db3ec1cc8b10760e130e1a1f04b"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Thu May 31 15:08:29 2007 +0300"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Mon Jul 16 12:05:43 2007 +0300"
      },
      "message": "KVM: MMU: Fold fix_write_pf() into set_pte_common()\n\nThis prevents some work from being performed twice, and, more importantly,\nreduces the number of places where we modify shadow ptes.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "63b1ad24d2695db3ec1cc8b10760e130e1a1f04b",
      "tree": "b1a74434132f0c3398a21d00337bdbef9661eaa8",
      "parents": [
        "6598c8b2420c30b48fc0d1d40d9ef6a1f7312107"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Thu May 31 11:56:54 2007 +0300"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Mon Jul 16 12:05:43 2007 +0300"
      },
      "message": "KVM: MMU: Fold fix_read_pf() into set_pte_common()\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "e60d75ea292071e7ab33c10ca73fdd33fcbbe501",
      "tree": "85ca6a1b9f0dca02ec166acca4627127312ecf8e",
      "parents": [
        "ef0197e8d9273ad8fbfb1bbd30e46e42a32c79e8"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Wed May 30 19:31:17 2007 +0300"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Mon Jul 16 12:05:43 2007 +0300"
      },
      "message": "KVM: MMU: Move set_pte_common() to pte width dependent code\n\nIn preparation of some modifications.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "d3d25b048b9c7e5c1c20918157a71df734f71766",
      "tree": "3e1f2cf029a1c23497067dfdfeffe69838fe6f0f",
      "parents": [
        "8d7282036f82244c5a1146a1a7edf03c50d278d9"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Wed May 30 12:34:53 2007 +0300"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Mon Jul 16 12:05:43 2007 +0300"
      },
      "message": "KVM: MMU: Use slab caches for shadow pages and their headers\n\nUse slab caches instead of a simple custom list.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "47ad8e689b4f94f9fc3b2588a7aaa65e4eca667c",
      "tree": "ee050d3f0a86f937f10bbc2f6e1893201de323af",
      "parents": [
        "4b02d6daa12465b209ec4f50c363f9553a51f45b"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Sun May 06 15:50:58 2007 +0300"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Mon Jul 16 12:05:40 2007 +0300"
      },
      "message": "KVM: MMU: Store shadow page tables as kernel virtual addresses, not physical\n\nSimpifies things a bit.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "4b02d6daa12465b209ec4f50c363f9553a51f45b",
      "tree": "bf88d7f3bfea2851ba5d7f4b67bef1eee9c2ea48",
      "parents": [
        "2dc7094b5662c4446aa647b257d47a9412fbacc9"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Sun May 06 15:36:30 2007 +0300"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Mon Jul 16 12:05:40 2007 +0300"
      },
      "message": "KVM: MMU: Simplify kvm_mmu_free_page() a tiny bit\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "0028425f647b6b78a0de8810d6b782fc3ce6c272",
      "tree": "8afece215ec531f993c28cc3dee17b0c2c1dd3b1",
      "parents": [
        "fce0657ff9f14f6b1f147b5fcd6db2f54c06424e"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Tue May 01 16:53:31 2007 +0300"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Mon Jul 16 12:05:39 2007 +0300"
      },
      "message": "KVM: Update shadow pte on write to guest pte\n\nA typical demand page/copy on write pattern is:\n\n- page fault on vaddr\n- kvm propagates fault to guest\n- guest handles fault, updates pte\n- kvm traps write, clears shadow pte, resumes guest\n- guest returns to userspace, re-faults on same vaddr\n- kvm installs shadow pte, resumes guest\n- guest continues\n\nSo, three vmexits for a single guest page fault.  But if instead of clearing\nthe page table entry, we update to correspond to the value that the guest\nhas just written, we eliminate the third vmexit.\n\nThis patch does exactly that, reducing kbuild time by about 10%.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "fce0657ff9f14f6b1f147b5fcd6db2f54c06424e",
      "tree": "e2a1a101f5f77894674738476cb5808327c03f0c",
      "parents": [
        "09072daf37abbfe8e2d5018dd913f229c76190f7"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Tue May 01 16:44:05 2007 +0300"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Mon Jul 16 12:05:39 2007 +0300"
      },
      "message": "KVM: MMU: Respect nonpae pagetable quadrant when zapping ptes\n\nWhen a guest writes to a page that has an mmu shadow, we have to clear\nthe shadow pte corresponding to the memory location touched by the guest.\n\nNow, in nonpae mode, a single guest page may have two or four shadow\npages (because a nonpae page maps 4MB or 4GB, whereas the pae shadow maps\n2MB or 1GB), so we when we look up the page we find up to three additional\naliases for the page.  Since we _clear_ the shadow pte, it doesn\u0027t matter\nexcept for a slight performance penalty, but if we want to _update_ the\nshadow pte instead of clearing it, it is vital that we don\u0027t modify the\naliases.\n\nFortunately, exactly which page is needed (the \"quadrant\") is easily\ncomputed, and is accessible in the shadow page header.  All we need is\nto ignore shadow pages from the wrong quadrants.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "09072daf37abbfe8e2d5018dd913f229c76190f7",
      "tree": "dbccbe493a9412cb89bd48b7c0c8ec21f70cf091",
      "parents": [
        "621358455ae043ab39bc3481f13b101bd6016c8d"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Tue May 01 14:16:52 2007 +0300"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Mon Jul 16 12:05:38 2007 +0300"
      },
      "message": "KVM: Unify kvm_mmu_pre_write() and kvm_mmu_post_write()\n\nInstead of calling two functions and repeating expensive checks, call one\nfunction and provide it with before/after information.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "e925c5ba9380dad5fdf1d0a9d9199ac43be74c6a",
      "tree": "9de2c9a4530170d77609af5236d8eaf546fd1ec9",
      "parents": [
        "c86813393f8b8f9f738ab57d9837858ed850df4b"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Mon Apr 30 14:47:02 2007 +0300"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Mon Jul 16 12:05:38 2007 +0300"
      },
      "message": "KVM: Assume that writes smaller than 4 bytes are to non-pagetable pages\n\nThis allows us to remove write protection earlier than otherwise.  Should\nsome mad OS choose to use byte writes to update pagetables, it will suffer\na performance hit, but still work correctly.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "2807696c3791d6dd1dcf20f022eaa2dc7615bc5d",
      "tree": "7a5161b93b9f15264b741aede046992594287d2b",
      "parents": [
        "2ab455ccceb07945368709ba852e49f4c3119331"
      ],
      "author": {
        "name": "Adrian Bunk",
        "email": "bunk@stusta.de",
        "time": "Sat Apr 28 21:20:48 2007 +0200"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Thu May 03 10:52:31 2007 +0300"
      },
      "message": "KVM: fix an if() condition\n\nIt might have worked in this case since PT_PRESENT_MASK is 1, but let\u0027s\nexpress this correctly.\n\nSigned-off-by: Adrian Bunk \u003cbunk@stusta.de\u003e\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "1165f5fec18c077bdba88e7125fd41f8e3617cb4",
      "tree": "a1931bfddfabaa909f4ebd14a5c00a549d1e37ec",
      "parents": [
        "3fca03653010b8c5fa63b99fc94c78cbfb433d00"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Thu Apr 19 17:27:43 2007 +0300"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Thu May 03 10:52:30 2007 +0300"
      },
      "message": "KVM: Per-vcpu statistics\n\nMake the exit statistics per-vcpu instead of global.  This gives a 3.5%\nboost when running one virtual machine per core on my two socket dual core\n(4 cores total) machine.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "d6c69ee9a24b307ce94e55ebfba6208a830c9ecb",
      "tree": "6e3d10f96412932e4e8d3b7cbbc1c0c85189ad6f",
      "parents": [
        "4d56c8a787aefb2e3fc4ac4be966db96c14d1ad8"
      ],
      "author": {
        "name": "Yaozu Dong",
        "email": "eddie.dong@intel.com",
        "time": "Wed Apr 25 14:17:25 2007 +0800"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Thu May 03 10:52:30 2007 +0300"
      },
      "message": "KVM: MMU: Avoid heavy ASSERT at non debug mode.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "8c4385024d31cb909ad84a2cafa5c83a4c5fab61",
      "tree": "9c6df8e13bf475985b682704cbe0b587072cc087",
      "parents": [
        "b5a33a75720c03d58d8281a72b45ffd214f00ed7"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Mon Apr 16 11:53:17 2007 +0300"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Thu May 03 10:52:29 2007 +0300"
      },
      "message": "KVM: Retry sleeping allocation if atomic allocation fails\n\nThis avoids -ENOMEM under memory pressure.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "b5a33a75720c03d58d8281a72b45ffd214f00ed7",
      "tree": "7451b196f292eb96caf5173ad3c6459ab9efb1d7",
      "parents": [
        "417726a3fbecb2092f1054bbaee87bc442b05ef3"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Sun Apr 15 16:31:09 2007 +0300"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Thu May 03 10:52:29 2007 +0300"
      },
      "message": "KVM: Use slab caches to allocate mmu data structures\n\nBetter leak detection, statistics, memory use, speed -- goodness all\naround.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "417726a3fbecb2092f1054bbaee87bc442b05ef3",
      "tree": "4d9810766bba0c28ce408639b5d63b50d71533fd",
      "parents": [
        "d917a6b92d0d1e4e2b98e86c584bc9e643cd5117"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Thu Apr 12 17:35:58 2007 +0300"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Thu May 03 10:52:29 2007 +0300"
      },
      "message": "KVM: Handle partial pae pdptr\n\nSome guests (Solaris) do not set up all four pdptrs, but leave some invalid.\nkvm incorrectly treated these as valid page directories, pinning the\nwrong pages and causing general confusion.\n\nFix by checking the valid bit of a pae pdpte.  This closes sourceforge bug\n1698922.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "954bbbc236afe23b368abdf4942f313a5f6e1d50",
      "tree": "4c990bff08f7a9a13980deb68a85e091065bb1ec",
      "parents": [
        "e0fa826f969c262c23908953bf85add487cc2e6c"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Fri Mar 30 14:02:32 2007 +0300"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Thu May 03 10:52:28 2007 +0300"
      },
      "message": "KVM: Simply gfn_to_page()\n\nMapping a guest page to a host page is a common operation.  Currently,\none has first to find the memory slot where the page belongs (gfn_to_memslot),\nthen locate the page itself (gfn_to_page()).\n\nThis is clumsy, and also won\u0027t work well with memory aliases.  So simplify\ngfn_to_page() not to require memory slot translation first, and instead do it\ninternally.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "e0fa826f969c262c23908953bf85add487cc2e6c",
      "tree": "b9fdaaffea660aadd1120267e6966da3f5d10afe",
      "parents": [
        "df513e2cdd099822ed32cbc20aaf4ff310372202"
      ],
      "author": {
        "name": "Dor Laor",
        "email": "dor.laor@qumranet.com",
        "time": "Fri Mar 30 13:06:33 2007 +0300"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Thu May 03 10:52:28 2007 +0300"
      },
      "message": "KVM: Add mmu cache clear function\n\nFunctions that play around with the physical memory map\nneed a way to clear mappings to possibly nonexistent or\ninvalid memory.  Both the mmu cache and the processor tlb\nare cleared.\n\nSigned-off-by: Dor Laor \u003cdor.laor@qumranet.com\u003e\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "36868f7b0efd0b6a1d45fe3b40a6c4bc63222659",
      "tree": "79acd363a5fce690443f438dcba33b1d88e03373",
      "parents": [
        "55bf4028342d96b21fe5dc0721b481b0bc1e81f6"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Mon Mar 26 19:31:52 2007 +0200"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Thu May 03 10:52:27 2007 +0300"
      },
      "message": "KVM: Use list_move()\n\nUse list_move() where possible.  Noticed by Dor Laor.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "d28c6cfbbc5e2d4fccfe6d733995ed5971ca87f6",
      "tree": "0da31407f97a92c81d189b18608e54ad2064ebad",
      "parents": [
        "916ce2360fadc71d924e02403b31280112a31280"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Fri Mar 23 09:55:25 2007 +0200"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Thu May 03 10:52:27 2007 +0300"
      },
      "message": "KVM: MMU: Fix hugepage pdes mapping same physical address with different access\n\nThe kvm mmu keeps a shadow page for hugepage pdes; if several such pdes map\nthe same physical address, they share the same shadow page.  This is a fairly\ncommon case (kernel mappings on i386 nonpae Linux, for example).\n\nHowever, if the two pdes map the same memory but with different permissions, kvm\nwill happily use the cached shadow page.  If the access through the more\npermissive pde will occur after the access to the strict pde, an endless pagefault\nloop will be generated and the guest will make no progress.\n\nFix by making the access permissions part of the cache lookup key.\n\nThe fix allows Xen pae to boot on kvm and run guest domains.\n\nThanks to Jeremy Fitzhardinge for reporting the bug and testing the fix.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "aac012245a59d78372dc66d292ba567367d86b60",
      "tree": "4faf7564b746b4efd6be91ca83b475cfd9d446e7",
      "parents": [
        "ca5aac1f96c18b5e4dcfea253d7ab607b5dcd5c9"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Tue Mar 20 14:34:28 2007 +0200"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Thu May 03 10:52:25 2007 +0300"
      },
      "message": "KVM: MMU: Remove global pte tracking\n\nThe initial, noncaching, version of the kvm mmu flushed the all nonglobal\nshadow page table translations (much like a native tlb flush).  The new\nimplementation flushes translations only when they change, rendering global\npte tracking superfluous.\n\nThis removes the unused tracking mechanism and storage space.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "039576c03c35e2f990ad9bb9c39e1bad3cd60d34",
      "tree": "fa6c81a40a36d2c0da1cf20c5deb45cb9bd7ba95",
      "parents": [
        "f0fe510864a4520a85dfa35ae14f5f376c56efc7"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Tue Mar 20 12:46:50 2007 +0200"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Thu May 03 10:52:25 2007 +0300"
      },
      "message": "KVM: Avoid guest virtual addresses in string pio userspace interface\n\nThe current string pio interface communicates using guest virtual addresses,\nrelying on userspace to translate addresses and to check permissions.  This\ninterface cannot fully support guest smp, as the check needs to take into\naccount two pages at one in case an unaligned string transfer straddles a\npage boundary.\n\nChange the interface not to communicate guest addresses at all; instead use\na buffer page (mmaped by userspace) and do transfers there.  The kernel\nmanages the virtual to physical translation and can perform the checks\natomically by taking the appropriate locks.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "1ea252afcd4b264b71d9c3f55358ff5ba4c04f1b",
      "tree": "44573dbf1be2e7e688774b420cfd00ec2c4b7f7d",
      "parents": [
        "ff42697436ddf5bd026e2cb4f117656b967f0709"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Thu Mar 08 11:48:09 2007 +0200"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Thu May 03 10:52:23 2007 +0300"
      },
      "message": "KVM: Fix bogus sign extension in mmu mapping audit\n\nWhen auditing a 32-bit guest on a 64-bit host, sign extension of the page\ntable directory pointer table index caused bogus addresses to be shown on\naudit errors.\n\nFix by declaring the index unsigned.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "6b8d0f9b180cb93513bb65f705b299370f0357a1",
      "tree": "f62483014f65a5f13f3ce0bf08c43394208ca7f6",
      "parents": [
        "80d74d5123bf3aecd32302809c4e61bb8a16786b"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Wed Apr 18 11:18:18 2007 +0300"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Thu Apr 19 18:39:26 2007 +0300"
      },
      "message": "KVM: Fix off-by-one when writing to a nonpae guest pde\n\nNonpae guest pdes are shadowed by two pae ptes, so we double the offset\ntwice: once to account for the pte size difference, and once because we\nneed to shadow pdes for a single guest pde.\n\nBut when writing to the upper guest pde we also need to truncate the\nlower bits, otherwise the multiply shifts these bits into the pde index\nand causes an access to the wrong shadow pde.  If we\u0027re at the end of the\npage (accessing the very last guest pde) we can even overflow into the\nnext host page and oops.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "27aba76615eeb36af84118e8ea6d35ffa51fd1e3",
      "tree": "8bd933f47eb91818c2e24cb10a4d820f0abea74e",
      "parents": [
        "ac1b714e78c8f0b252f8d8872e6ce6f898a123b3"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Fri Mar 09 13:04:31 2007 +0200"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Sun Mar 18 10:49:09 2007 +0200"
      },
      "message": "KVM: MMU: Fix host memory corruption on i386 with \u003e\u003d 4GB ram\n\nPAGE_MASK is an unsigned long, so using it to mask physical addresses on\ni386 (which are 64-bit wide) leads to truncation.  This can result in\npage-\u003eprivate of unrelated memory pages being modified, with disasterous\nresults.\n\nFix by not using PAGE_MASK for physical addresses; instead calculate\nthe correct value directly from PAGE_SIZE.  Also fix a similar BUG_ON().\n\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "ac1b714e78c8f0b252f8d8872e6ce6f898a123b3",
      "tree": "6068b184778a7f43c92b0518eaefcf617309779b",
      "parents": [
        "f5b42c3324494ea3f9bf795e2a7e4d3cbb06c607"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Thu Mar 08 17:13:32 2007 +0200"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Sun Mar 18 10:49:09 2007 +0200"
      },
      "message": "KVM: MMU: Fix guest writes to nonpae pde\n\nKVM shadow page tables are always in pae mode, regardless of the guest\nsetting.  This means that a guest pde (mapping 4MB of memory) is mapped\nto two shadow pdes (mapping 2MB each).\n\nWhen the guest writes to a pte or pde, we intercept the write and emulate it.\nWe also remove any shadowed mappings corresponding to the write.  Since the\nmmu did not account for the doubling in the number of pdes, it removed the\nwrong entry, resulting in a mismatch between shadow page tables and guest\npage tables, followed shortly by guest memory corruption.\n\nThis patch fixes the problem by detecting the special case of writing to\na non-pae pde and adjusting the address and number of shadow pdes zapped\naccordingly.\n\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "5972e9535e94bf875eb8eab8a667ba04c7583874",
      "tree": "bdce4e46ab7277c8811cef4b9464646eff3fed3e",
      "parents": [
        "9d8f549dc69b1fc65d0b03916c02f12ca49b3ea0"
      ],
      "author": {
        "name": "Markus Rechberger",
        "email": "markus.rechberger@amd.com",
        "time": "Mon Feb 19 14:37:47 2007 +0200"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Sun Mar 04 11:12:39 2007 +0200"
      },
      "message": "KVM: Use page_private()/set_page_private() apis\n\nBesides using an established api, this allows using kvm in older kernels.\n\nSigned-off-by: Markus Rechberger \u003cmarkus.rechberger@amd.com\u003e\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "11718b4d6ba03cf83e4cd856e5eda3a8d0d17652",
      "tree": "5c0d7b0587f881a1603e2b4235432fce2e3caef6",
      "parents": [
        "8b6d44c7bde7f927b7b70e9f56c22c66c0066277"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@ftp.linux.org.uk",
        "time": "Fri Feb 09 16:39:20 2007 +0000"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Fri Feb 09 09:14:07 2007 -0800"
      },
      "message": "[PATCH] misc NULL noise removal\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "73b1087e6176a34c01eea3db269848f72fad72c1",
      "tree": "05e74fb28c1980e8327587934f2a0fe2a3c0d683",
      "parents": [
        "7993ba43db1c07245ada067791f91dbf018095ac"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Fri Jan 26 00:56:41 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Fri Jan 26 13:50:57 2007 -0800"
      },
      "message": "[PATCH] KVM: MMU: Report nx faults to the guest\n\nWith the recent guest page fault change, we perform access checks on our\nown instead of relying on the cpu.  This means we have to perform the nx\nchecks as well.\n\nSoftware like the google toolbar on windows appears to rely on this\nsomehow.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7993ba43db1c07245ada067791f91dbf018095ac",
      "tree": "444617c9b709ef38b3eadcc6a61ed03bf25d6de7",
      "parents": [
        "6f00e68f210c0407dd666743ce61ae543cfd509d"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Fri Jan 26 00:56:41 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Fri Jan 26 13:50:57 2007 -0800"
      },
      "message": "[PATCH] KVM: MMU: Perform access checks in walk_addr()\n\nCheck pte permission bits in walk_addr(), instead of scattering the checks all\nover the code.  This has the following benefits:\n\n1. We no longer set the accessed bit for accessed which fail permission checks.\n2. Setting the accessed bit is simplified.\n3. Under some circumstances, we used to pretend a page fault was fixed when\n   it would actually fail the access checks.  This caused an unnecessary\n   vmexit.\n4. The error code for guest page faults is now correct.\n\nThe fix helps netbsd further along booting, and allows kvm to pass the new mmu\ntestsuite.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "68a99f6d37aa65e848e09ec6ea52848e93bd5de2",
      "tree": "28f9da432eb33364a17389dc3ce994269318837f",
      "parents": [
        "d21225ee2b6fa9f7669526927f2e0bedebd90940"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Jan 05 16:36:59 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Jan 05 23:55:28 2007 -0800"
      },
      "message": "[PATCH] KVM: Simplify mmu_alloc_roots()\n\nSmall optimization/cleanup:\n\n    page \u003d\u003d page_header(page-\u003epage_hpa)\n\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "7f7417d67ea6c1538469e3ea005484e807642c0a",
      "tree": "5d164c2e78a31abdbfcf2757fef09075aef44e70",
      "parents": [
        "86a2b42e81b8236d9454f5c2d7113a82ed25c735"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Jan 05 16:36:57 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Jan 05 23:55:28 2007 -0800"
      },
      "message": "[PATCH] KVM: Avoid oom on cr3 switch\n\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "37a7d8b046da6254718be1409140cd7bf3126f8f",
      "tree": "a52e3a60234920301c881b8b534e85ae1bed5cf8",
      "parents": [
        "9ede74e0af549d75d4ea870bed8b178983816745"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Fri Jan 05 16:36:56 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Jan 05 23:55:27 2007 -0800"
      },
      "message": "[PATCH] KVM: MMU: add audit code to check mappings, etc are correct\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "40907d5768ab8cadd4cad97bef350820ded20338",
      "tree": "c3e18c9197c3ccbc8e57e42aa870f1e9d5740a94",
      "parents": [
        "e2dec939db126989808853d218e426daaeebc9e2"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Fri Jan 05 16:36:55 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Jan 05 23:55:27 2007 -0800"
      },
      "message": "[PATCH] KVM: MMU: Flush guest tlb when reducing permissions on a pte\n\nIf we reduce permissions on a pte, we must flush the cached copy of the pte\nfrom the guest\u0027s tlb.\n\nThis is implemented at the moment by flushing the entire guest tlb, and can be\nimproved by flushing just the relevant virtual address, if it is known.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "e2dec939db126989808853d218e426daaeebc9e2",
      "tree": "5c742e609e43090df396fc1c7a6b4c526099dbea",
      "parents": [
        "714b93da1a6d97307dfafb9915517879d8a66c0d"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Fri Jan 05 16:36:54 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Jan 05 23:55:27 2007 -0800"
      },
      "message": "[PATCH] KVM: MMU: Detect oom conditions and propagate error to userspace\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "714b93da1a6d97307dfafb9915517879d8a66c0d",
      "tree": "619f30567c9e13b79830301023bef58b98b8f433",
      "parents": [
        "f51234c2cd3ab8bed836e09686e27877e1b55f2a"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Fri Jan 05 16:36:53 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Jan 05 23:55:27 2007 -0800"
      },
      "message": "[PATCH] KVM: MMU: Replace atomic allocations by preallocated objects\n\nThe mmu sometimes needs memory for reverse mapping and parent pte chains.\nhowever, we can\u0027t allocate from within the mmu because of the atomic context.\n\nSo, move the allocations to a central place that can be executed before the\nmain mmu machinery, where we can bail out on failure before any damage is\ndone.\n\n(error handling is deffered for now, but the basic structure is there)\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "f51234c2cd3ab8bed836e09686e27877e1b55f2a",
      "tree": "fbdfbfaf5d7b9c80a105d15b28d600653661572b",
      "parents": [
        "143646567f6dcd584e1ab359b5ec83e0545e70cf"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Fri Jan 05 16:36:52 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Jan 05 23:55:27 2007 -0800"
      },
      "message": "[PATCH] KVM: MMU: Free pages on kvm destruction\n\nBecause mmu pages have attached rmap and parent pte chain structures, we need\nto zap them before freeing so the attached structures are freed.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "3bb65a22a4502067f8cd3cb4c923ffa70be62091",
      "tree": "b8ee904c9a4b99f0c8f58e93b257f653222e3ba0",
      "parents": [
        "86a5ba025d0a0b251817d0efbeaf7037d4175d21"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Fri Jan 05 16:36:51 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Jan 05 23:55:26 2007 -0800"
      },
      "message": "[PATCH] KVM: MMU: Never free a shadow page actively serving as a root\n\nWe always need cr3 to point to something valid, so if we detect that we\u0027re\nfreeing a root page, simply push it back to the top of the active list.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "86a5ba025d0a0b251817d0efbeaf7037d4175d21",
      "tree": "35dbc71edaa0d242ba4c0ca429c41cff67df38d0",
      "parents": [
        "139bdb2d9e410d448281057a37b53770324ccac8"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Fri Jan 05 16:36:50 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Jan 05 23:55:26 2007 -0800"
      },
      "message": "[PATCH] KVM: MMU: Page table write flood protection\n\nIn fork() (or when we protect a page that is no longer a page table), we can\nexperience floods of writes to a page, which have to be emulated.  This is\nexpensive.\n\nSo, if we detect such a flood, zap the page so subsequent writes can proceed\nnatively.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "139bdb2d9e410d448281057a37b53770324ccac8",
      "tree": "35bd78df2e50b008e4dfb9477336bacb75b06252",
      "parents": [
        "5f1e0b6abcc100a79528387207adc3dd92aa5374"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Fri Jan 05 16:36:50 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Jan 05 23:55:26 2007 -0800"
      },
      "message": "[PATCH] KVM: MMU: If an empty shadow page is not empty, report more info\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "5f1e0b6abcc100a79528387207adc3dd92aa5374",
      "tree": "5bdabf79d89bea50e66db6960611702e9c39543b",
      "parents": [
        "260746c03dcb2e5089f95b60cb786aaf405ced63"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Fri Jan 05 16:36:49 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Jan 05 23:55:26 2007 -0800"
      },
      "message": "[PATCH] KVM: MMU: Ensure freed shadow pages are clean\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "260746c03dcb2e5089f95b60cb786aaf405ced63",
      "tree": "069394e7a950db9b69b1f59d91bc856a08a47240",
      "parents": [
        "0e7bc4b9610ed9fde0fa14f0b7a7f939805e5ae9"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Fri Jan 05 16:36:49 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Jan 05 23:55:26 2007 -0800"
      },
      "message": "[PATCH] KVM: MMU: \u003cove is_empty_shadow_page() above kvm_mmu_free_page()\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "0e7bc4b9610ed9fde0fa14f0b7a7f939805e5ae9",
      "tree": "7466256bb2117e1ef5cbb42d2f9a405e80baf5c9",
      "parents": [
        "73f7198e738004671b885c443eb6f88df021c07f"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Fri Jan 05 16:36:48 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Jan 05 23:55:26 2007 -0800"
      },
      "message": "[PATCH] KVM: MMU: Handle misaligned accesses to write protected guest page tables\n\nA misaligned access affects two shadow ptes instead of just one.\n\nSince a misaligned access is unlikely to occur on a real page table, just zap\nthe page out of existence, avoiding further trouble.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "73f7198e738004671b885c443eb6f88df021c07f",
      "tree": "c878b3557357521e285ed5c2db7b081d2aa04f33",
      "parents": [
        "5f015a5b28c75bb6cc5158640db58689b1ee1b51"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Fri Jan 05 16:36:48 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Jan 05 23:55:26 2007 -0800"
      },
      "message": "[PATCH] KVM: MMU: Remove release_pt_page_64()\n\nUnused.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "5f015a5b28c75bb6cc5158640db58689b1ee1b51",
      "tree": "7b103d11d256bfc83c8cd61841cdb893d2b09617",
      "parents": [
        "ebeace8609205bf5e1b96fe325b7dea148042232"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Fri Jan 05 16:36:47 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Jan 05 23:55:25 2007 -0800"
      },
      "message": "[PATCH] KVM: MMU: Remove invlpg interception\n\nSince we write protect shadowed guest page tables, there is no need to trap\npage invalidations (the guest will always change the mapping before issuing\nthe invlpg instruction).\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "ebeace8609205bf5e1b96fe325b7dea148042232",
      "tree": "863991639d7df2a4aa5fd8b20b6b3a28c2cc2cda",
      "parents": [
        "cc4529efc7b730b596d9c7d5a917c00a357e92aa"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Fri Jan 05 16:36:47 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Jan 05 23:55:25 2007 -0800"
      },
      "message": "[PATCH] KVM: MMU: oom handling\n\nWhen beginning to process a page fault, make sure we have enough shadow pages\navailable to service the fault.  If not, free some pages.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "cc4529efc7b730b596d9c7d5a917c00a357e92aa",
      "tree": "b62836e2986bc1d7583de50158f1933e9f65784b",
      "parents": [
        "697fe2e24ac49f03a82f6cfe5d77f7a2122ff382"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Fri Jan 05 16:36:47 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Jan 05 23:55:25 2007 -0800"
      },
      "message": "[PATCH] KVM: MMU: kvm_mmu_put_page() only removes one link to the page\n\n...  and so must not free it unconditionally.\n\nMove the freeing to kvm_mmu_zap_page().\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "697fe2e24ac49f03a82f6cfe5d77f7a2122ff382",
      "tree": "26de8b1535ea7af9124e85985b37069e7d1fd604",
      "parents": [
        "a436036baf331703b4d2c8e8a45f02c597bf6913"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Fri Jan 05 16:36:46 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Jan 05 23:55:25 2007 -0800"
      },
      "message": "[PATCH] KVM: MMU: Implement child shadow unlinking\n\nWhen removing a page table, we must maintain the parent_pte field all child\nshadow page tables.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "a436036baf331703b4d2c8e8a45f02c597bf6913",
      "tree": "ba134b0b42ca42c53e818073af8d51d73771c56b",
      "parents": [
        "9b7a032567ee1128daeebebfc14d3acedfe28c8c"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Fri Jan 05 16:36:45 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Jan 05 23:55:25 2007 -0800"
      },
      "message": "[PATCH] KVM: MMU: If emulating an instruction fails, try unprotecting the page\n\nA page table may have been recycled into a regular page, and so any\ninstruction can be executed on it.  Unprotect the page and let the cpu do its\nthing.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "9b7a032567ee1128daeebebfc14d3acedfe28c8c",
      "tree": "292b109ec407041f26371f3cb7de12d06a636592",
      "parents": [
        "da4a00f002239f72b0d7d0eeaa3b60100e2b1438"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Fri Jan 05 16:36:45 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Jan 05 23:55:25 2007 -0800"
      },
      "message": "[PATCH] KVM: MMU: Zap shadow page table entries on writes to guest page tables\n\nIterate over all shadow pages which correspond to a the given guest page table\nand remove the mappings.\n\nA subsequent page fault will reestablish the new mapping.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "da4a00f002239f72b0d7d0eeaa3b60100e2b1438",
      "tree": "7c7e72ea1fd48025c029429b413e127a3a580c10",
      "parents": [
        "815af8d42ee3f844c0ceaf2104bd9c6a0bb1e26c"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Fri Jan 05 16:36:44 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Jan 05 23:55:25 2007 -0800"
      },
      "message": "[PATCH] KVM: MMU: Support emulated writes into RAM\n\nAs the mmu write protects guest page table, we emulate those writes.  Since\nthey are not mmio, there is no need to go to userspace to perform them.\n\nSo, perform the writes in the kernel if possible, and notify the mmu about\nthem so it can take the approriate action.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "815af8d42ee3f844c0ceaf2104bd9c6a0bb1e26c",
      "tree": "cbb21a8efea0fb3fbd94689546b2f97e11dbf9d9",
      "parents": [
        "374cbac0333ddf5cf1c6637efaf7f3adcc67fd75"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Fri Jan 05 16:36:44 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Jan 05 23:55:25 2007 -0800"
      },
      "message": "[PATCH] KVM: MMU: Let the walker extract the target page gfn from the pte\n\nThis fixes a problem where set_pte_common() looked for shadowed pages based on\nthe page directory gfn (a huge page) instead of the actual gfn being mapped.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "374cbac0333ddf5cf1c6637efaf7f3adcc67fd75",
      "tree": "0960a8c54aa6f592f5d1cb8a7dbc116c9cb3836e",
      "parents": [
        "cea0f0e7ea54753c3265dc77f605a6dad1912cfc"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Fri Jan 05 16:36:43 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Jan 05 23:55:25 2007 -0800"
      },
      "message": "[PATCH] KVM: MMU: Write protect guest pages when a shadow is created for them\n\nWhen we cache a guest page table into a shadow page table, we need to prevent\nfurther access to that page by the guest, as that would render the cache\nincoherent.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "cea0f0e7ea54753c3265dc77f605a6dad1912cfc",
      "tree": "e0a3e64b45fe83f1f0ae89556e1f6fcf92f07185",
      "parents": [
        "25c0de2cc6c26cb99553c2444936a7951c120c09"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Fri Jan 05 16:36:43 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Jan 05 23:55:24 2007 -0800"
      },
      "message": "[PATCH] KVM: MMU: Shadow page table caching\n\nDefine a hashtable for caching shadow page tables. Look up the cache on\ncontext switch (cr3 change) or during page faults.\n\nThe key to the cache is a combination of\n- the guest page table frame number\n- the number of paging levels in the guest\n   * we can cache real mode, 32-bit mode, pae, and long mode page\n     tables simultaneously.  this is useful for smp bootup.\n- the guest page table table\n   * some kernels use a page as both a page table and a page directory.  this\n     allows multiple shadow pages to exist for that page, one per level\n- the \"quadrant\"\n   * 32-bit mode page tables span 4MB, whereas a shadow page table spans\n     2MB.  similarly, a 32-bit page directory spans 4GB, while a shadow\n     page directory spans 1GB.  the quadrant allows caching up to 4 shadow page\n     tables for one guest page in one level.\n- a \"metaphysical\" bit\n   * for real mode, and for pse pages, there is no guest page table, so set\n     the bit to avoid write protecting the page.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "25c0de2cc6c26cb99553c2444936a7951c120c09",
      "tree": "c2b5bd7ff189a1232ed3a89b50caa2ebbad67634",
      "parents": [
        "aef3d3fe1314f2a130f5ccc7114df20865ba784f"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Fri Jan 05 16:36:42 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Jan 05 23:55:24 2007 -0800"
      },
      "message": "[PATCH] KVM: MMU: Make kvm_mmu_alloc_page() return a kvm_mmu_page pointer\n\nThis allows further manipulation on the shadow page table.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "17ac10ad2bb7d8c4f401668484b2e661a15726c6",
      "tree": "671a11b2be1d9f48e96eae8af2b05867f4199db0",
      "parents": [
        "ac79c978f173586ab3624427c89cd22b393cabd4"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Fri Jan 05 16:36:40 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Jan 05 23:55:24 2007 -0800"
      },
      "message": "[PATCH] KVM: MU: Special treatment for shadow pae root pages\n\nSince we\u0027re not going to cache the pae-mode shadow root pages, allocate a\nsingle pae shadow that will hold the four lower-level pages, which will act as\nroots.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "cd4a4e5374110444dc38831af517e51ff5a053c3",
      "tree": "ed82756435e7909c7698d112195994c2e8062328",
      "parents": [
        "399badf315bd4dd571b4b3b7cf666d9a2af40229"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Fri Jan 05 16:36:38 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Jan 05 23:55:24 2007 -0800"
      },
      "message": "[PATCH] KVM: MMU: Implement simple reverse mapping\n\nKeep in each host page frame\u0027s page-\u003eprivate a pointer to the shadow pte which\nmaps it.  If there are multiple shadow ptes mapping the page, set bit 0 of\npage-\u003eprivate, and use the rest as a pointer to a linked list of all such\nmappings.\n\nReverse mappings are needed because we when we cache shadow page tables, we\nmust protect the guest page tables from being modified by the guest, as that\nwould invalidate the cached ptes.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "8018c27b26af56af18eb8b2dc600eba825792d8f",
      "tree": "1125fea536282ff9605f101728a880157796692e",
      "parents": [
        "55a54f79e091d52c3c2835985c347ea4d2e1c21f"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Dec 29 16:50:01 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Sat Dec 30 10:56:44 2006 -0800"
      },
      "message": "[PATCH] kvm: fix GFP_KERNEL allocation in atomic section in kvm_dev_ioctl_create_vcpu()\n\nfix an GFP_KERNEL allocation in atomic section: kvm_dev_ioctl_create_vcpu()\ncalled kvm_mmu_init(), which calls alloc_pages(), while holding the vcpu.\n\nThe fix is to set up the MMU state in two phases: kvm_mmu_create() and\nkvm_mmu_setup().\n\n(NOTE: free_vcpus does an kvm_mmu_destroy() call so there\u0027s no need for any\nextra teardown branch on allocation/init failure here.)\n\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Avi Kivity \u003cavi@qumranet.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "a9058ecd3cd72634cf548588ce79b3f225c9ca32",
      "tree": "11d1edd2dfdcec03ba6b54b3b06d41cae826b940",
      "parents": [
        "1e885461f02259d75e7480a70d291d2d8aaa938e"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Fri Dec 29 16:49:37 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Sat Dec 30 10:56:44 2006 -0800"
      },
      "message": "[PATCH] KVM: Simplify is_long_mode()\n\nInstead of doing tricky stuff with the arch dependent virtualization\nregisters, take a peek at the guest\u0027s efer.\n\nThis simlifies some code, and fixes some confusion in the mmu branch.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "2c264957105b7c248a456ba6602df667ae986550",
      "tree": "f4dde78d957602f696af75bfb7a13b1e80c12236",
      "parents": [
        "36241b8c7cbcc83e7fd534d25e1df8339db8244e"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Fri Dec 22 01:05:28 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Dec 22 08:55:46 2006 -0800"
      },
      "message": "[PATCH] KVM: Use more traditional error handling in kvm_mmu_init()\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "8c7bb723b4e36dbd4b144176116d126104dc65e0",
      "tree": "d5f13bce4876887c8892297e2a31339efa5e6268",
      "parents": [
        "0770b19b94ed8fc97e1fcac91c320ec738919628"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Wed Dec 13 00:34:02 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Wed Dec 13 09:05:47 2006 -0800"
      },
      "message": "[PATCH] KVM: MMU: Ignore pcd, pwt, and pat bits on ptes\n\nThe pcd, pwt, and pat bits on page table entries affect the cpu cache.  Since\nthe cache is a host resource, the guest should not be able to control it.\nMoreover, the meaning of these bits changes depending on whether pat is\nenabled or not.\n\nSo, force these bits to zero on shadow page table entries at all times.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "6aa8b732ca01c3d7a54e93f4d701b8aabbe60fb7",
      "tree": "23fcbe6f4918cacdae26d513a2bd13e91d8b4c38",
      "parents": [
        "f5f1a24a2caa299bb7d294aee92d7dd3410d9ed7"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Sun Dec 10 02:21:36 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Sun Dec 10 09:57:22 2006 -0800"
      },
      "message": "[PATCH] kvm: userspace interface\n\nweb site: http://kvm.sourceforge.net\n\nmailing list: kvm-devel@lists.sourceforge.net\n  (http://lists.sourceforge.net/lists/listinfo/kvm-devel)\n\nThe following patchset adds a driver for Intel\u0027s hardware virtualization\nextensions to the x86 architecture.  The driver adds a character device\n(/dev/kvm) that exposes the virtualization capabilities to userspace.  Using\nthis driver, a process can run a virtual machine (a \"guest\") in a fully\nvirtualized PC containing its own virtual hard disks, network adapters, and\ndisplay.\n\nUsing this driver, one can start multiple virtual machines on a host.\n\nEach virtual machine is a process on the host; a virtual cpu is a thread in\nthat process.  kill(1), nice(1), top(1) work as expected.  In effect, the\ndriver adds a third execution mode to the existing two: we now have kernel\nmode, user mode, and guest mode.  Guest mode has its own address space mapping\nguest physical memory (which is accessible to user mode by mmap()ing\n/dev/kvm).  Guest mode has no access to any I/O devices; any such access is\nintercepted and directed to user mode for emulation.\n\nThe driver supports i386 and x86_64 hosts and guests.  All combinations are\nallowed except x86_64 guest on i386 host.  For i386 guests and hosts, both pae\nand non-pae paging modes are supported.\n\nSMP hosts and UP guests are supported.  At the moment only Intel\nhardware is supported, but AMD virtualization support is being worked on.\n\nPerformance currently is non-stellar due to the naive implementation of the\nmmu virtualization, which throws away most of the shadow page table entries\nevery context switch.  We plan to address this in two ways:\n\n- cache shadow page tables across tlb flushes\n- wait until AMD and Intel release processors with nested page tables\n\nCurrently a virtual desktop is responsive but consumes a lot of CPU.  Under\nWindows I tried playing pinball and watching a few flash movies; with a recent\nCPU one can hardly feel the virtualization.  Linux/X is slower, probably due\nto X being in a separate process.\n\nIn addition to the driver, you need a slightly modified qemu to provide I/O\ndevice emulation and the BIOS.\n\nCaveats (akpm: might no longer be true):\n\n- The Windows install currently bluescreens due to a problem with the\n  virtual APIC.  We are working on a fix.  A temporary workaround is to\n  use an existing image or install through qemu\n- Windows 64-bit does not work.  That\u0027s also true for qemu, so it\u0027s\n  probably a problem with the device model.\n\n[bero@arklinux.org: build fix]\n[simon.kagstrom@bth.se: build fix, other fixes]\n[uril@qumranet.com: KVM: Expose interrupt bitmap]\n[akpm@osdl.org: i386 build fix]\n[mingo@elte.hu: i386 fixes]\n[rdreier@cisco.com: add log levels to all printks]\n[randy.dunlap@oracle.com: Fix sparse NULL and C99 struct init warnings]\n[anthony@codemonkey.ws: KVM: AMD SVM: 32-bit host support]\nSigned-off-by: Yaniv Kamay \u003cyaniv@qumranet.com\u003e\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\nCc: Simon Kagstrom \u003csimon.kagstrom@bth.se\u003e\nCc: Bernhard Rosenkraenzer \u003cbero@arklinux.org\u003e\nSigned-off-by: Uri Lublin \u003curil@qumranet.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Roland Dreier \u003crolandd@cisco.com\u003e\nSigned-off-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nSigned-off-by: Anthony Liguori \u003canthony@codemonkey.ws\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    }
  ]
}
