Merge branch 'nfs-server-stable' of git://linux-nfs.org/~bfields/linux
[linux-2.6] / drivers / kvm / mmu.c
1 /*
2  * Kernel-based Virtual Machine driver for Linux
3  *
4  * This module enables machines with Intel VT-x extensions to run virtual
5  * machines without emulation or binary translation.
6  *
7  * MMU support
8  *
9  * Copyright (C) 2006 Qumranet, Inc.
10  *
11  * Authors:
12  *   Yaniv Kamay  <yaniv@qumranet.com>
13  *   Avi Kivity   <avi@qumranet.com>
14  *
15  * This work is licensed under the terms of the GNU GPL, version 2.  See
16  * the COPYING file in the top-level directory.
17  *
18  */
19
20 #include "vmx.h"
21 #include "kvm.h"
22
23 #include <linux/types.h>
24 #include <linux/string.h>
25 #include <linux/mm.h>
26 #include <linux/highmem.h>
27 #include <linux/module.h>
28
29 #include <asm/page.h>
30 #include <asm/cmpxchg.h>
31
32 #undef MMU_DEBUG
33
34 #undef AUDIT
35
36 #ifdef AUDIT
37 static void kvm_mmu_audit(struct kvm_vcpu *vcpu, const char *msg);
38 #else
39 static void kvm_mmu_audit(struct kvm_vcpu *vcpu, const char *msg) {}
40 #endif
41
42 #ifdef MMU_DEBUG
43
44 #define pgprintk(x...) do { if (dbg) printk(x); } while (0)
45 #define rmap_printk(x...) do { if (dbg) printk(x); } while (0)
46
47 #else
48
49 #define pgprintk(x...) do { } while (0)
50 #define rmap_printk(x...) do { } while (0)
51
52 #endif
53
54 #if defined(MMU_DEBUG) || defined(AUDIT)
55 static int dbg = 1;
56 #endif
57
58 #ifndef MMU_DEBUG
59 #define ASSERT(x) do { } while (0)
60 #else
61 #define ASSERT(x)                                                       \
62         if (!(x)) {                                                     \
63                 printk(KERN_WARNING "assertion failed %s:%d: %s\n",     \
64                        __FILE__, __LINE__, #x);                         \
65         }
66 #endif
67
68 #define PT64_PT_BITS 9
69 #define PT64_ENT_PER_PAGE (1 << PT64_PT_BITS)
70 #define PT32_PT_BITS 10
71 #define PT32_ENT_PER_PAGE (1 << PT32_PT_BITS)
72
73 #define PT_WRITABLE_SHIFT 1
74
75 #define PT_PRESENT_MASK (1ULL << 0)
76 #define PT_WRITABLE_MASK (1ULL << PT_WRITABLE_SHIFT)
77 #define PT_USER_MASK (1ULL << 2)
78 #define PT_PWT_MASK (1ULL << 3)
79 #define PT_PCD_MASK (1ULL << 4)
80 #define PT_ACCESSED_MASK (1ULL << 5)
81 #define PT_DIRTY_MASK (1ULL << 6)
82 #define PT_PAGE_SIZE_MASK (1ULL << 7)
83 #define PT_PAT_MASK (1ULL << 7)
84 #define PT_GLOBAL_MASK (1ULL << 8)
85 #define PT64_NX_MASK (1ULL << 63)
86
87 #define PT_PAT_SHIFT 7
88 #define PT_DIR_PAT_SHIFT 12
89 #define PT_DIR_PAT_MASK (1ULL << PT_DIR_PAT_SHIFT)
90
91 #define PT32_DIR_PSE36_SIZE 4
92 #define PT32_DIR_PSE36_SHIFT 13
93 #define PT32_DIR_PSE36_MASK (((1ULL << PT32_DIR_PSE36_SIZE) - 1) << PT32_DIR_PSE36_SHIFT)
94
95
96 #define PT_FIRST_AVAIL_BITS_SHIFT 9
97 #define PT64_SECOND_AVAIL_BITS_SHIFT 52
98
99 #define PT_SHADOW_IO_MARK (1ULL << PT_FIRST_AVAIL_BITS_SHIFT)
100
101 #define VALID_PAGE(x) ((x) != INVALID_PAGE)
102
103 #define PT64_LEVEL_BITS 9
104
105 #define PT64_LEVEL_SHIFT(level) \
106                 ( PAGE_SHIFT + (level - 1) * PT64_LEVEL_BITS )
107
108 #define PT64_LEVEL_MASK(level) \
109                 (((1ULL << PT64_LEVEL_BITS) - 1) << PT64_LEVEL_SHIFT(level))
110
111 #define PT64_INDEX(address, level)\
112         (((address) >> PT64_LEVEL_SHIFT(level)) & ((1 << PT64_LEVEL_BITS) - 1))
113
114
115 #define PT32_LEVEL_BITS 10
116
117 #define PT32_LEVEL_SHIFT(level) \
118                 ( PAGE_SHIFT + (level - 1) * PT32_LEVEL_BITS )
119
120 #define PT32_LEVEL_MASK(level) \
121                 (((1ULL << PT32_LEVEL_BITS) - 1) << PT32_LEVEL_SHIFT(level))
122
123 #define PT32_INDEX(address, level)\
124         (((address) >> PT32_LEVEL_SHIFT(level)) & ((1 << PT32_LEVEL_BITS) - 1))
125
126
127 #define PT64_BASE_ADDR_MASK (((1ULL << 52) - 1) & ~(u64)(PAGE_SIZE-1))
128 #define PT64_DIR_BASE_ADDR_MASK \
129         (PT64_BASE_ADDR_MASK & ~((1ULL << (PAGE_SHIFT + PT64_LEVEL_BITS)) - 1))
130
131 #define PT32_BASE_ADDR_MASK PAGE_MASK
132 #define PT32_DIR_BASE_ADDR_MASK \
133         (PAGE_MASK & ~((1ULL << (PAGE_SHIFT + PT32_LEVEL_BITS)) - 1))
134
135
136 #define PFERR_PRESENT_MASK (1U << 0)
137 #define PFERR_WRITE_MASK (1U << 1)
138 #define PFERR_USER_MASK (1U << 2)
139 #define PFERR_FETCH_MASK (1U << 4)
140
141 #define PT64_ROOT_LEVEL 4
142 #define PT32_ROOT_LEVEL 2
143 #define PT32E_ROOT_LEVEL 3
144
145 #define PT_DIRECTORY_LEVEL 2
146 #define PT_PAGE_TABLE_LEVEL 1
147
148 #define RMAP_EXT 4
149
150 struct kvm_rmap_desc {
151         u64 *shadow_ptes[RMAP_EXT];
152         struct kvm_rmap_desc *more;
153 };
154
155 static struct kmem_cache *pte_chain_cache;
156 static struct kmem_cache *rmap_desc_cache;
157 static struct kmem_cache *mmu_page_header_cache;
158
159 static int is_write_protection(struct kvm_vcpu *vcpu)
160 {
161         return vcpu->cr0 & X86_CR0_WP;
162 }
163
164 static int is_cpuid_PSE36(void)
165 {
166         return 1;
167 }
168
169 static int is_nx(struct kvm_vcpu *vcpu)
170 {
171         return vcpu->shadow_efer & EFER_NX;
172 }
173
174 static int is_present_pte(unsigned long pte)
175 {
176         return pte & PT_PRESENT_MASK;
177 }
178
179 static int is_writeble_pte(unsigned long pte)
180 {
181         return pte & PT_WRITABLE_MASK;
182 }
183
184 static int is_io_pte(unsigned long pte)
185 {
186         return pte & PT_SHADOW_IO_MARK;
187 }
188
189 static int is_rmap_pte(u64 pte)
190 {
191         return (pte & (PT_WRITABLE_MASK | PT_PRESENT_MASK))
192                 == (PT_WRITABLE_MASK | PT_PRESENT_MASK);
193 }
194
195 static void set_shadow_pte(u64 *sptep, u64 spte)
196 {
197 #ifdef CONFIG_X86_64
198         set_64bit((unsigned long *)sptep, spte);
199 #else
200         set_64bit((unsigned long long *)sptep, spte);
201 #endif
202 }
203
204 static int mmu_topup_memory_cache(struct kvm_mmu_memory_cache *cache,
205                                   struct kmem_cache *base_cache, int min)
206 {
207         void *obj;
208
209         if (cache->nobjs >= min)
210                 return 0;
211         while (cache->nobjs < ARRAY_SIZE(cache->objects)) {
212                 obj = kmem_cache_zalloc(base_cache, GFP_KERNEL);
213                 if (!obj)
214                         return -ENOMEM;
215                 cache->objects[cache->nobjs++] = obj;
216         }
217         return 0;
218 }
219
220 static void mmu_free_memory_cache(struct kvm_mmu_memory_cache *mc)
221 {
222         while (mc->nobjs)
223                 kfree(mc->objects[--mc->nobjs]);
224 }
225
226 static int mmu_topup_memory_cache_page(struct kvm_mmu_memory_cache *cache,
227                                        int min)
228 {
229         struct page *page;
230
231         if (cache->nobjs >= min)
232                 return 0;
233         while (cache->nobjs < ARRAY_SIZE(cache->objects)) {
234                 page = alloc_page(GFP_KERNEL);
235                 if (!page)
236                         return -ENOMEM;
237                 set_page_private(page, 0);
238                 cache->objects[cache->nobjs++] = page_address(page);
239         }
240         return 0;
241 }
242
243 static void mmu_free_memory_cache_page(struct kvm_mmu_memory_cache *mc)
244 {
245         while (mc->nobjs)
246                 free_page((unsigned long)mc->objects[--mc->nobjs]);
247 }
248
249 static int mmu_topup_memory_caches(struct kvm_vcpu *vcpu)
250 {
251         int r;
252
253         kvm_mmu_free_some_pages(vcpu);
254         r = mmu_topup_memory_cache(&vcpu->mmu_pte_chain_cache,
255                                    pte_chain_cache, 4);
256         if (r)
257                 goto out;
258         r = mmu_topup_memory_cache(&vcpu->mmu_rmap_desc_cache,
259                                    rmap_desc_cache, 1);
260         if (r)
261                 goto out;
262         r = mmu_topup_memory_cache_page(&vcpu->mmu_page_cache, 4);
263         if (r)
264                 goto out;
265         r = mmu_topup_memory_cache(&vcpu->mmu_page_header_cache,
266                                    mmu_page_header_cache, 4);
267 out:
268         return r;
269 }
270
271 static void mmu_free_memory_caches(struct kvm_vcpu *vcpu)
272 {
273         mmu_free_memory_cache(&vcpu->mmu_pte_chain_cache);
274         mmu_free_memory_cache(&vcpu->mmu_rmap_desc_cache);
275         mmu_free_memory_cache_page(&vcpu->mmu_page_cache);
276         mmu_free_memory_cache(&vcpu->mmu_page_header_cache);
277 }
278
279 static void *mmu_memory_cache_alloc(struct kvm_mmu_memory_cache *mc,
280                                     size_t size)
281 {
282         void *p;
283
284         BUG_ON(!mc->nobjs);
285         p = mc->objects[--mc->nobjs];
286         memset(p, 0, size);
287         return p;
288 }
289
290 static struct kvm_pte_chain *mmu_alloc_pte_chain(struct kvm_vcpu *vcpu)
291 {
292         return mmu_memory_cache_alloc(&vcpu->mmu_pte_chain_cache,
293                                       sizeof(struct kvm_pte_chain));
294 }
295
296 static void mmu_free_pte_chain(struct kvm_pte_chain *pc)
297 {
298         kfree(pc);
299 }
300
301 static struct kvm_rmap_desc *mmu_alloc_rmap_desc(struct kvm_vcpu *vcpu)
302 {
303         return mmu_memory_cache_alloc(&vcpu->mmu_rmap_desc_cache,
304                                       sizeof(struct kvm_rmap_desc));
305 }
306
307 static void mmu_free_rmap_desc(struct kvm_rmap_desc *rd)
308 {
309         kfree(rd);
310 }
311
312 /*
313  * Reverse mapping data structures:
314  *
315  * If page->private bit zero is zero, then page->private points to the
316  * shadow page table entry that points to page_address(page).
317  *
318  * If page->private bit zero is one, (then page->private & ~1) points
319  * to a struct kvm_rmap_desc containing more mappings.
320  */
321 static void rmap_add(struct kvm_vcpu *vcpu, u64 *spte)
322 {
323         struct page *page;
324         struct kvm_rmap_desc *desc;
325         int i;
326
327         if (!is_rmap_pte(*spte))
328                 return;
329         page = pfn_to_page((*spte & PT64_BASE_ADDR_MASK) >> PAGE_SHIFT);
330         if (!page_private(page)) {
331                 rmap_printk("rmap_add: %p %llx 0->1\n", spte, *spte);
332                 set_page_private(page,(unsigned long)spte);
333         } else if (!(page_private(page) & 1)) {
334                 rmap_printk("rmap_add: %p %llx 1->many\n", spte, *spte);
335                 desc = mmu_alloc_rmap_desc(vcpu);
336                 desc->shadow_ptes[0] = (u64 *)page_private(page);
337                 desc->shadow_ptes[1] = spte;
338                 set_page_private(page,(unsigned long)desc | 1);
339         } else {
340                 rmap_printk("rmap_add: %p %llx many->many\n", spte, *spte);
341                 desc = (struct kvm_rmap_desc *)(page_private(page) & ~1ul);
342                 while (desc->shadow_ptes[RMAP_EXT-1] && desc->more)
343                         desc = desc->more;
344                 if (desc->shadow_ptes[RMAP_EXT-1]) {
345                         desc->more = mmu_alloc_rmap_desc(vcpu);
346                         desc = desc->more;
347                 }
348                 for (i = 0; desc->shadow_ptes[i]; ++i)
349                         ;
350                 desc->shadow_ptes[i] = spte;
351         }
352 }
353
354 static void rmap_desc_remove_entry(struct page *page,
355                                    struct kvm_rmap_desc *desc,
356                                    int i,
357                                    struct kvm_rmap_desc *prev_desc)
358 {
359         int j;
360
361         for (j = RMAP_EXT - 1; !desc->shadow_ptes[j] && j > i; --j)
362                 ;
363         desc->shadow_ptes[i] = desc->shadow_ptes[j];
364         desc->shadow_ptes[j] = NULL;
365         if (j != 0)
366                 return;
367         if (!prev_desc && !desc->more)
368                 set_page_private(page,(unsigned long)desc->shadow_ptes[0]);
369         else
370                 if (prev_desc)
371                         prev_desc->more = desc->more;
372                 else
373                         set_page_private(page,(unsigned long)desc->more | 1);
374         mmu_free_rmap_desc(desc);
375 }
376
377 static void rmap_remove(u64 *spte)
378 {
379         struct page *page;
380         struct kvm_rmap_desc *desc;
381         struct kvm_rmap_desc *prev_desc;
382         int i;
383
384         if (!is_rmap_pte(*spte))
385                 return;
386         page = pfn_to_page((*spte & PT64_BASE_ADDR_MASK) >> PAGE_SHIFT);
387         if (!page_private(page)) {
388                 printk(KERN_ERR "rmap_remove: %p %llx 0->BUG\n", spte, *spte);
389                 BUG();
390         } else if (!(page_private(page) & 1)) {
391                 rmap_printk("rmap_remove:  %p %llx 1->0\n", spte, *spte);
392                 if ((u64 *)page_private(page) != spte) {
393                         printk(KERN_ERR "rmap_remove:  %p %llx 1->BUG\n",
394                                spte, *spte);
395                         BUG();
396                 }
397                 set_page_private(page,0);
398         } else {
399                 rmap_printk("rmap_remove:  %p %llx many->many\n", spte, *spte);
400                 desc = (struct kvm_rmap_desc *)(page_private(page) & ~1ul);
401                 prev_desc = NULL;
402                 while (desc) {
403                         for (i = 0; i < RMAP_EXT && desc->shadow_ptes[i]; ++i)
404                                 if (desc->shadow_ptes[i] == spte) {
405                                         rmap_desc_remove_entry(page,
406                                                                desc, i,
407                                                                prev_desc);
408                                         return;
409                                 }
410                         prev_desc = desc;
411                         desc = desc->more;
412                 }
413                 BUG();
414         }
415 }
416
417 static void rmap_write_protect(struct kvm_vcpu *vcpu, u64 gfn)
418 {
419         struct kvm *kvm = vcpu->kvm;
420         struct page *page;
421         struct kvm_rmap_desc *desc;
422         u64 *spte;
423
424         page = gfn_to_page(kvm, gfn);
425         BUG_ON(!page);
426
427         while (page_private(page)) {
428                 if (!(page_private(page) & 1))
429                         spte = (u64 *)page_private(page);
430                 else {
431                         desc = (struct kvm_rmap_desc *)(page_private(page) & ~1ul);
432                         spte = desc->shadow_ptes[0];
433                 }
434                 BUG_ON(!spte);
435                 BUG_ON((*spte & PT64_BASE_ADDR_MASK) >> PAGE_SHIFT
436                        != page_to_pfn(page));
437                 BUG_ON(!(*spte & PT_PRESENT_MASK));
438                 BUG_ON(!(*spte & PT_WRITABLE_MASK));
439                 rmap_printk("rmap_write_protect: spte %p %llx\n", spte, *spte);
440                 rmap_remove(spte);
441                 set_shadow_pte(spte, *spte & ~PT_WRITABLE_MASK);
442                 kvm_flush_remote_tlbs(vcpu->kvm);
443         }
444 }
445
446 #ifdef MMU_DEBUG
447 static int is_empty_shadow_page(u64 *spt)
448 {
449         u64 *pos;
450         u64 *end;
451
452         for (pos = spt, end = pos + PAGE_SIZE / sizeof(u64); pos != end; pos++)
453                 if (*pos != 0) {
454                         printk(KERN_ERR "%s: %p %llx\n", __FUNCTION__,
455                                pos, *pos);
456                         return 0;
457                 }
458         return 1;
459 }
460 #endif
461
462 static void kvm_mmu_free_page(struct kvm *kvm,
463                               struct kvm_mmu_page *page_head)
464 {
465         ASSERT(is_empty_shadow_page(page_head->spt));
466         list_del(&page_head->link);
467         __free_page(virt_to_page(page_head->spt));
468         kfree(page_head);
469         ++kvm->n_free_mmu_pages;
470 }
471
472 static unsigned kvm_page_table_hashfn(gfn_t gfn)
473 {
474         return gfn;
475 }
476
477 static struct kvm_mmu_page *kvm_mmu_alloc_page(struct kvm_vcpu *vcpu,
478                                                u64 *parent_pte)
479 {
480         struct kvm_mmu_page *page;
481
482         if (!vcpu->kvm->n_free_mmu_pages)
483                 return NULL;
484
485         page = mmu_memory_cache_alloc(&vcpu->mmu_page_header_cache,
486                                       sizeof *page);
487         page->spt = mmu_memory_cache_alloc(&vcpu->mmu_page_cache, PAGE_SIZE);
488         set_page_private(virt_to_page(page->spt), (unsigned long)page);
489         list_add(&page->link, &vcpu->kvm->active_mmu_pages);
490         ASSERT(is_empty_shadow_page(page->spt));
491         page->slot_bitmap = 0;
492         page->multimapped = 0;
493         page->parent_pte = parent_pte;
494         --vcpu->kvm->n_free_mmu_pages;
495         return page;
496 }
497
498 static void mmu_page_add_parent_pte(struct kvm_vcpu *vcpu,
499                                     struct kvm_mmu_page *page, u64 *parent_pte)
500 {
501         struct kvm_pte_chain *pte_chain;
502         struct hlist_node *node;
503         int i;
504
505         if (!parent_pte)
506                 return;
507         if (!page->multimapped) {
508                 u64 *old = page->parent_pte;
509
510                 if (!old) {
511                         page->parent_pte = parent_pte;
512                         return;
513                 }
514                 page->multimapped = 1;
515                 pte_chain = mmu_alloc_pte_chain(vcpu);
516                 INIT_HLIST_HEAD(&page->parent_ptes);
517                 hlist_add_head(&pte_chain->link, &page->parent_ptes);
518                 pte_chain->parent_ptes[0] = old;
519         }
520         hlist_for_each_entry(pte_chain, node, &page->parent_ptes, link) {
521                 if (pte_chain->parent_ptes[NR_PTE_CHAIN_ENTRIES-1])
522                         continue;
523                 for (i = 0; i < NR_PTE_CHAIN_ENTRIES; ++i)
524                         if (!pte_chain->parent_ptes[i]) {
525                                 pte_chain->parent_ptes[i] = parent_pte;
526                                 return;
527                         }
528         }
529         pte_chain = mmu_alloc_pte_chain(vcpu);
530         BUG_ON(!pte_chain);
531         hlist_add_head(&pte_chain->link, &page->parent_ptes);
532         pte_chain->parent_ptes[0] = parent_pte;
533 }
534
535 static void mmu_page_remove_parent_pte(struct kvm_mmu_page *page,
536                                        u64 *parent_pte)
537 {
538         struct kvm_pte_chain *pte_chain;
539         struct hlist_node *node;
540         int i;
541
542         if (!page->multimapped) {
543                 BUG_ON(page->parent_pte != parent_pte);
544                 page->parent_pte = NULL;
545                 return;
546         }
547         hlist_for_each_entry(pte_chain, node, &page->parent_ptes, link)
548                 for (i = 0; i < NR_PTE_CHAIN_ENTRIES; ++i) {
549                         if (!pte_chain->parent_ptes[i])
550                                 break;
551                         if (pte_chain->parent_ptes[i] != parent_pte)
552                                 continue;
553                         while (i + 1 < NR_PTE_CHAIN_ENTRIES
554                                 && pte_chain->parent_ptes[i + 1]) {
555                                 pte_chain->parent_ptes[i]
556                                         = pte_chain->parent_ptes[i + 1];
557                                 ++i;
558                         }
559                         pte_chain->parent_ptes[i] = NULL;
560                         if (i == 0) {
561                                 hlist_del(&pte_chain->link);
562                                 mmu_free_pte_chain(pte_chain);
563                                 if (hlist_empty(&page->parent_ptes)) {
564                                         page->multimapped = 0;
565                                         page->parent_pte = NULL;
566                                 }
567                         }
568                         return;
569                 }
570         BUG();
571 }
572
573 static struct kvm_mmu_page *kvm_mmu_lookup_page(struct kvm_vcpu *vcpu,
574                                                 gfn_t gfn)
575 {
576         unsigned index;
577         struct hlist_head *bucket;
578         struct kvm_mmu_page *page;
579         struct hlist_node *node;
580
581         pgprintk("%s: looking for gfn %lx\n", __FUNCTION__, gfn);
582         index = kvm_page_table_hashfn(gfn) % KVM_NUM_MMU_PAGES;
583         bucket = &vcpu->kvm->mmu_page_hash[index];
584         hlist_for_each_entry(page, node, bucket, hash_link)
585                 if (page->gfn == gfn && !page->role.metaphysical) {
586                         pgprintk("%s: found role %x\n",
587                                  __FUNCTION__, page->role.word);
588                         return page;
589                 }
590         return NULL;
591 }
592
593 static struct kvm_mmu_page *kvm_mmu_get_page(struct kvm_vcpu *vcpu,
594                                              gfn_t gfn,
595                                              gva_t gaddr,
596                                              unsigned level,
597                                              int metaphysical,
598                                              unsigned hugepage_access,
599                                              u64 *parent_pte)
600 {
601         union kvm_mmu_page_role role;
602         unsigned index;
603         unsigned quadrant;
604         struct hlist_head *bucket;
605         struct kvm_mmu_page *page;
606         struct hlist_node *node;
607
608         role.word = 0;
609         role.glevels = vcpu->mmu.root_level;
610         role.level = level;
611         role.metaphysical = metaphysical;
612         role.hugepage_access = hugepage_access;
613         if (vcpu->mmu.root_level <= PT32_ROOT_LEVEL) {
614                 quadrant = gaddr >> (PAGE_SHIFT + (PT64_PT_BITS * level));
615                 quadrant &= (1 << ((PT32_PT_BITS - PT64_PT_BITS) * level)) - 1;
616                 role.quadrant = quadrant;
617         }
618         pgprintk("%s: looking gfn %lx role %x\n", __FUNCTION__,
619                  gfn, role.word);
620         index = kvm_page_table_hashfn(gfn) % KVM_NUM_MMU_PAGES;
621         bucket = &vcpu->kvm->mmu_page_hash[index];
622         hlist_for_each_entry(page, node, bucket, hash_link)
623                 if (page->gfn == gfn && page->role.word == role.word) {
624                         mmu_page_add_parent_pte(vcpu, page, parent_pte);
625                         pgprintk("%s: found\n", __FUNCTION__);
626                         return page;
627                 }
628         page = kvm_mmu_alloc_page(vcpu, parent_pte);
629         if (!page)
630                 return page;
631         pgprintk("%s: adding gfn %lx role %x\n", __FUNCTION__, gfn, role.word);
632         page->gfn = gfn;
633         page->role = role;
634         hlist_add_head(&page->hash_link, bucket);
635         if (!metaphysical)
636                 rmap_write_protect(vcpu, gfn);
637         return page;
638 }
639
640 static void kvm_mmu_page_unlink_children(struct kvm *kvm,
641                                          struct kvm_mmu_page *page)
642 {
643         unsigned i;
644         u64 *pt;
645         u64 ent;
646
647         pt = page->spt;
648
649         if (page->role.level == PT_PAGE_TABLE_LEVEL) {
650                 for (i = 0; i < PT64_ENT_PER_PAGE; ++i) {
651                         if (pt[i] & PT_PRESENT_MASK)
652                                 rmap_remove(&pt[i]);
653                         pt[i] = 0;
654                 }
655                 kvm_flush_remote_tlbs(kvm);
656                 return;
657         }
658
659         for (i = 0; i < PT64_ENT_PER_PAGE; ++i) {
660                 ent = pt[i];
661
662                 pt[i] = 0;
663                 if (!(ent & PT_PRESENT_MASK))
664                         continue;
665                 ent &= PT64_BASE_ADDR_MASK;
666                 mmu_page_remove_parent_pte(page_header(ent), &pt[i]);
667         }
668         kvm_flush_remote_tlbs(kvm);
669 }
670
671 static void kvm_mmu_put_page(struct kvm_mmu_page *page,
672                              u64 *parent_pte)
673 {
674         mmu_page_remove_parent_pte(page, parent_pte);
675 }
676
677 static void kvm_mmu_zap_page(struct kvm *kvm,
678                              struct kvm_mmu_page *page)
679 {
680         u64 *parent_pte;
681
682         while (page->multimapped || page->parent_pte) {
683                 if (!page->multimapped)
684                         parent_pte = page->parent_pte;
685                 else {
686                         struct kvm_pte_chain *chain;
687
688                         chain = container_of(page->parent_ptes.first,
689                                              struct kvm_pte_chain, link);
690                         parent_pte = chain->parent_ptes[0];
691                 }
692                 BUG_ON(!parent_pte);
693                 kvm_mmu_put_page(page, parent_pte);
694                 set_shadow_pte(parent_pte, 0);
695         }
696         kvm_mmu_page_unlink_children(kvm, page);
697         if (!page->root_count) {
698                 hlist_del(&page->hash_link);
699                 kvm_mmu_free_page(kvm, page);
700         } else
701                 list_move(&page->link, &kvm->active_mmu_pages);
702 }
703
704 static int kvm_mmu_unprotect_page(struct kvm_vcpu *vcpu, gfn_t gfn)
705 {
706         unsigned index;
707         struct hlist_head *bucket;
708         struct kvm_mmu_page *page;
709         struct hlist_node *node, *n;
710         int r;
711
712         pgprintk("%s: looking for gfn %lx\n", __FUNCTION__, gfn);
713         r = 0;
714         index = kvm_page_table_hashfn(gfn) % KVM_NUM_MMU_PAGES;
715         bucket = &vcpu->kvm->mmu_page_hash[index];
716         hlist_for_each_entry_safe(page, node, n, bucket, hash_link)
717                 if (page->gfn == gfn && !page->role.metaphysical) {
718                         pgprintk("%s: gfn %lx role %x\n", __FUNCTION__, gfn,
719                                  page->role.word);
720                         kvm_mmu_zap_page(vcpu->kvm, page);
721                         r = 1;
722                 }
723         return r;
724 }
725
726 static void mmu_unshadow(struct kvm_vcpu *vcpu, gfn_t gfn)
727 {
728         struct kvm_mmu_page *page;
729
730         while ((page = kvm_mmu_lookup_page(vcpu, gfn)) != NULL) {
731                 pgprintk("%s: zap %lx %x\n",
732                          __FUNCTION__, gfn, page->role.word);
733                 kvm_mmu_zap_page(vcpu->kvm, page);
734         }
735 }
736
737 static void page_header_update_slot(struct kvm *kvm, void *pte, gpa_t gpa)
738 {
739         int slot = memslot_id(kvm, gfn_to_memslot(kvm, gpa >> PAGE_SHIFT));
740         struct kvm_mmu_page *page_head = page_header(__pa(pte));
741
742         __set_bit(slot, &page_head->slot_bitmap);
743 }
744
745 hpa_t safe_gpa_to_hpa(struct kvm_vcpu *vcpu, gpa_t gpa)
746 {
747         hpa_t hpa = gpa_to_hpa(vcpu, gpa);
748
749         return is_error_hpa(hpa) ? bad_page_address | (gpa & ~PAGE_MASK): hpa;
750 }
751
752 hpa_t gpa_to_hpa(struct kvm_vcpu *vcpu, gpa_t gpa)
753 {
754         struct page *page;
755
756         ASSERT((gpa & HPA_ERR_MASK) == 0);
757         page = gfn_to_page(vcpu->kvm, gpa >> PAGE_SHIFT);
758         if (!page)
759                 return gpa | HPA_ERR_MASK;
760         return ((hpa_t)page_to_pfn(page) << PAGE_SHIFT)
761                 | (gpa & (PAGE_SIZE-1));
762 }
763
764 hpa_t gva_to_hpa(struct kvm_vcpu *vcpu, gva_t gva)
765 {
766         gpa_t gpa = vcpu->mmu.gva_to_gpa(vcpu, gva);
767
768         if (gpa == UNMAPPED_GVA)
769                 return UNMAPPED_GVA;
770         return gpa_to_hpa(vcpu, gpa);
771 }
772
773 struct page *gva_to_page(struct kvm_vcpu *vcpu, gva_t gva)
774 {
775         gpa_t gpa = vcpu->mmu.gva_to_gpa(vcpu, gva);
776
777         if (gpa == UNMAPPED_GVA)
778                 return NULL;
779         return pfn_to_page(gpa_to_hpa(vcpu, gpa) >> PAGE_SHIFT);
780 }
781
782 static void nonpaging_new_cr3(struct kvm_vcpu *vcpu)
783 {
784 }
785
786 static int nonpaging_map(struct kvm_vcpu *vcpu, gva_t v, hpa_t p)
787 {
788         int level = PT32E_ROOT_LEVEL;
789         hpa_t table_addr = vcpu->mmu.root_hpa;
790
791         for (; ; level--) {
792                 u32 index = PT64_INDEX(v, level);
793                 u64 *table;
794                 u64 pte;
795
796                 ASSERT(VALID_PAGE(table_addr));
797                 table = __va(table_addr);
798
799                 if (level == 1) {
800                         pte = table[index];
801                         if (is_present_pte(pte) && is_writeble_pte(pte))
802                                 return 0;
803                         mark_page_dirty(vcpu->kvm, v >> PAGE_SHIFT);
804                         page_header_update_slot(vcpu->kvm, table, v);
805                         table[index] = p | PT_PRESENT_MASK | PT_WRITABLE_MASK |
806                                                                 PT_USER_MASK;
807                         rmap_add(vcpu, &table[index]);
808                         return 0;
809                 }
810
811                 if (table[index] == 0) {
812                         struct kvm_mmu_page *new_table;
813                         gfn_t pseudo_gfn;
814
815                         pseudo_gfn = (v & PT64_DIR_BASE_ADDR_MASK)
816                                 >> PAGE_SHIFT;
817                         new_table = kvm_mmu_get_page(vcpu, pseudo_gfn,
818                                                      v, level - 1,
819                                                      1, 0, &table[index]);
820                         if (!new_table) {
821                                 pgprintk("nonpaging_map: ENOMEM\n");
822                                 return -ENOMEM;
823                         }
824
825                         table[index] = __pa(new_table->spt) | PT_PRESENT_MASK
826                                 | PT_WRITABLE_MASK | PT_USER_MASK;
827                 }
828                 table_addr = table[index] & PT64_BASE_ADDR_MASK;
829         }
830 }
831
832 static void mmu_free_roots(struct kvm_vcpu *vcpu)
833 {
834         int i;
835         struct kvm_mmu_page *page;
836
837         if (!VALID_PAGE(vcpu->mmu.root_hpa))
838                 return;
839 #ifdef CONFIG_X86_64
840         if (vcpu->mmu.shadow_root_level == PT64_ROOT_LEVEL) {
841                 hpa_t root = vcpu->mmu.root_hpa;
842
843                 page = page_header(root);
844                 --page->root_count;
845                 vcpu->mmu.root_hpa = INVALID_PAGE;
846                 return;
847         }
848 #endif
849         for (i = 0; i < 4; ++i) {
850                 hpa_t root = vcpu->mmu.pae_root[i];
851
852                 if (root) {
853                         root &= PT64_BASE_ADDR_MASK;
854                         page = page_header(root);
855                         --page->root_count;
856                 }
857                 vcpu->mmu.pae_root[i] = INVALID_PAGE;
858         }
859         vcpu->mmu.root_hpa = INVALID_PAGE;
860 }
861
862 static void mmu_alloc_roots(struct kvm_vcpu *vcpu)
863 {
864         int i;
865         gfn_t root_gfn;
866         struct kvm_mmu_page *page;
867
868         root_gfn = vcpu->cr3 >> PAGE_SHIFT;
869
870 #ifdef CONFIG_X86_64
871         if (vcpu->mmu.shadow_root_level == PT64_ROOT_LEVEL) {
872                 hpa_t root = vcpu->mmu.root_hpa;
873
874                 ASSERT(!VALID_PAGE(root));
875                 page = kvm_mmu_get_page(vcpu, root_gfn, 0,
876                                         PT64_ROOT_LEVEL, 0, 0, NULL);
877                 root = __pa(page->spt);
878                 ++page->root_count;
879                 vcpu->mmu.root_hpa = root;
880                 return;
881         }
882 #endif
883         for (i = 0; i < 4; ++i) {
884                 hpa_t root = vcpu->mmu.pae_root[i];
885
886                 ASSERT(!VALID_PAGE(root));
887                 if (vcpu->mmu.root_level == PT32E_ROOT_LEVEL) {
888                         if (!is_present_pte(vcpu->pdptrs[i])) {
889                                 vcpu->mmu.pae_root[i] = 0;
890                                 continue;
891                         }
892                         root_gfn = vcpu->pdptrs[i] >> PAGE_SHIFT;
893                 } else if (vcpu->mmu.root_level == 0)
894                         root_gfn = 0;
895                 page = kvm_mmu_get_page(vcpu, root_gfn, i << 30,
896                                         PT32_ROOT_LEVEL, !is_paging(vcpu),
897                                         0, NULL);
898                 root = __pa(page->spt);
899                 ++page->root_count;
900                 vcpu->mmu.pae_root[i] = root | PT_PRESENT_MASK;
901         }
902         vcpu->mmu.root_hpa = __pa(vcpu->mmu.pae_root);
903 }
904
905 static gpa_t nonpaging_gva_to_gpa(struct kvm_vcpu *vcpu, gva_t vaddr)
906 {
907         return vaddr;
908 }
909
910 static int nonpaging_page_fault(struct kvm_vcpu *vcpu, gva_t gva,
911                                u32 error_code)
912 {
913         gpa_t addr = gva;
914         hpa_t paddr;
915         int r;
916
917         r = mmu_topup_memory_caches(vcpu);
918         if (r)
919                 return r;
920
921         ASSERT(vcpu);
922         ASSERT(VALID_PAGE(vcpu->mmu.root_hpa));
923
924
925         paddr = gpa_to_hpa(vcpu , addr & PT64_BASE_ADDR_MASK);
926
927         if (is_error_hpa(paddr))
928                 return 1;
929
930         return nonpaging_map(vcpu, addr & PAGE_MASK, paddr);
931 }
932
933 static void nonpaging_free(struct kvm_vcpu *vcpu)
934 {
935         mmu_free_roots(vcpu);
936 }
937
938 static int nonpaging_init_context(struct kvm_vcpu *vcpu)
939 {
940         struct kvm_mmu *context = &vcpu->mmu;
941
942         context->new_cr3 = nonpaging_new_cr3;
943         context->page_fault = nonpaging_page_fault;
944         context->gva_to_gpa = nonpaging_gva_to_gpa;
945         context->free = nonpaging_free;
946         context->root_level = 0;
947         context->shadow_root_level = PT32E_ROOT_LEVEL;
948         context->root_hpa = INVALID_PAGE;
949         return 0;
950 }
951
952 static void kvm_mmu_flush_tlb(struct kvm_vcpu *vcpu)
953 {
954         ++vcpu->stat.tlb_flush;
955         kvm_x86_ops->tlb_flush(vcpu);
956 }
957
958 static void paging_new_cr3(struct kvm_vcpu *vcpu)
959 {
960         pgprintk("%s: cr3 %lx\n", __FUNCTION__, vcpu->cr3);
961         mmu_free_roots(vcpu);
962 }
963
964 static void inject_page_fault(struct kvm_vcpu *vcpu,
965                               u64 addr,
966                               u32 err_code)
967 {
968         kvm_x86_ops->inject_page_fault(vcpu, addr, err_code);
969 }
970
971 static void paging_free(struct kvm_vcpu *vcpu)
972 {
973         nonpaging_free(vcpu);
974 }
975
976 #define PTTYPE 64
977 #include "paging_tmpl.h"
978 #undef PTTYPE
979
980 #define PTTYPE 32
981 #include "paging_tmpl.h"
982 #undef PTTYPE
983
984 static int paging64_init_context_common(struct kvm_vcpu *vcpu, int level)
985 {
986         struct kvm_mmu *context = &vcpu->mmu;
987
988         ASSERT(is_pae(vcpu));
989         context->new_cr3 = paging_new_cr3;
990         context->page_fault = paging64_page_fault;
991         context->gva_to_gpa = paging64_gva_to_gpa;
992         context->free = paging_free;
993         context->root_level = level;
994         context->shadow_root_level = level;
995         context->root_hpa = INVALID_PAGE;
996         return 0;
997 }
998
999 static int paging64_init_context(struct kvm_vcpu *vcpu)
1000 {
1001         return paging64_init_context_common(vcpu, PT64_ROOT_LEVEL);
1002 }
1003
1004 static int paging32_init_context(struct kvm_vcpu *vcpu)
1005 {
1006         struct kvm_mmu *context = &vcpu->mmu;
1007
1008         context->new_cr3 = paging_new_cr3;
1009         context->page_fault = paging32_page_fault;
1010         context->gva_to_gpa = paging32_gva_to_gpa;
1011         context->free = paging_free;
1012         context->root_level = PT32_ROOT_LEVEL;
1013         context->shadow_root_level = PT32E_ROOT_LEVEL;
1014         context->root_hpa = INVALID_PAGE;
1015         return 0;
1016 }
1017
1018 static int paging32E_init_context(struct kvm_vcpu *vcpu)
1019 {
1020         return paging64_init_context_common(vcpu, PT32E_ROOT_LEVEL);
1021 }
1022
1023 static int init_kvm_mmu(struct kvm_vcpu *vcpu)
1024 {
1025         ASSERT(vcpu);
1026         ASSERT(!VALID_PAGE(vcpu->mmu.root_hpa));
1027
1028         if (!is_paging(vcpu))
1029                 return nonpaging_init_context(vcpu);
1030         else if (is_long_mode(vcpu))
1031                 return paging64_init_context(vcpu);
1032         else if (is_pae(vcpu))
1033                 return paging32E_init_context(vcpu);
1034         else
1035                 return paging32_init_context(vcpu);
1036 }
1037
1038 static void destroy_kvm_mmu(struct kvm_vcpu *vcpu)
1039 {
1040         ASSERT(vcpu);
1041         if (VALID_PAGE(vcpu->mmu.root_hpa)) {
1042                 vcpu->mmu.free(vcpu);
1043                 vcpu->mmu.root_hpa = INVALID_PAGE;
1044         }
1045 }
1046
1047 int kvm_mmu_reset_context(struct kvm_vcpu *vcpu)
1048 {
1049         destroy_kvm_mmu(vcpu);
1050         return init_kvm_mmu(vcpu);
1051 }
1052
1053 int kvm_mmu_load(struct kvm_vcpu *vcpu)
1054 {
1055         int r;
1056
1057         mutex_lock(&vcpu->kvm->lock);
1058         r = mmu_topup_memory_caches(vcpu);
1059         if (r)
1060                 goto out;
1061         mmu_alloc_roots(vcpu);
1062         kvm_x86_ops->set_cr3(vcpu, vcpu->mmu.root_hpa);
1063         kvm_mmu_flush_tlb(vcpu);
1064 out:
1065         mutex_unlock(&vcpu->kvm->lock);
1066         return r;
1067 }
1068 EXPORT_SYMBOL_GPL(kvm_mmu_load);
1069
1070 void kvm_mmu_unload(struct kvm_vcpu *vcpu)
1071 {
1072         mmu_free_roots(vcpu);
1073 }
1074
1075 static void mmu_pte_write_zap_pte(struct kvm_vcpu *vcpu,
1076                                   struct kvm_mmu_page *page,
1077                                   u64 *spte)
1078 {
1079         u64 pte;
1080         struct kvm_mmu_page *child;
1081
1082         pte = *spte;
1083         if (is_present_pte(pte)) {
1084                 if (page->role.level == PT_PAGE_TABLE_LEVEL)
1085                         rmap_remove(spte);
1086                 else {
1087                         child = page_header(pte & PT64_BASE_ADDR_MASK);
1088                         mmu_page_remove_parent_pte(child, spte);
1089                 }
1090         }
1091         *spte = 0;
1092         kvm_flush_remote_tlbs(vcpu->kvm);
1093 }
1094
1095 static void mmu_pte_write_new_pte(struct kvm_vcpu *vcpu,
1096                                   struct kvm_mmu_page *page,
1097                                   u64 *spte,
1098                                   const void *new, int bytes)
1099 {
1100         if (page->role.level != PT_PAGE_TABLE_LEVEL)
1101                 return;
1102
1103         if (page->role.glevels == PT32_ROOT_LEVEL)
1104                 paging32_update_pte(vcpu, page, spte, new, bytes);
1105         else
1106                 paging64_update_pte(vcpu, page, spte, new, bytes);
1107 }
1108
1109 void kvm_mmu_pte_write(struct kvm_vcpu *vcpu, gpa_t gpa,
1110                        const u8 *new, int bytes)
1111 {
1112         gfn_t gfn = gpa >> PAGE_SHIFT;
1113         struct kvm_mmu_page *page;
1114         struct hlist_node *node, *n;
1115         struct hlist_head *bucket;
1116         unsigned index;
1117         u64 *spte;
1118         unsigned offset = offset_in_page(gpa);
1119         unsigned pte_size;
1120         unsigned page_offset;
1121         unsigned misaligned;
1122         unsigned quadrant;
1123         int level;
1124         int flooded = 0;
1125         int npte;
1126
1127         pgprintk("%s: gpa %llx bytes %d\n", __FUNCTION__, gpa, bytes);
1128         if (gfn == vcpu->last_pt_write_gfn) {
1129                 ++vcpu->last_pt_write_count;
1130                 if (vcpu->last_pt_write_count >= 3)
1131                         flooded = 1;
1132         } else {
1133                 vcpu->last_pt_write_gfn = gfn;
1134                 vcpu->last_pt_write_count = 1;
1135         }
1136         index = kvm_page_table_hashfn(gfn) % KVM_NUM_MMU_PAGES;
1137         bucket = &vcpu->kvm->mmu_page_hash[index];
1138         hlist_for_each_entry_safe(page, node, n, bucket, hash_link) {
1139                 if (page->gfn != gfn || page->role.metaphysical)
1140                         continue;
1141                 pte_size = page->role.glevels == PT32_ROOT_LEVEL ? 4 : 8;
1142                 misaligned = (offset ^ (offset + bytes - 1)) & ~(pte_size - 1);
1143                 misaligned |= bytes < 4;
1144                 if (misaligned || flooded) {
1145                         /*
1146                          * Misaligned accesses are too much trouble to fix
1147                          * up; also, they usually indicate a page is not used
1148                          * as a page table.
1149                          *
1150                          * If we're seeing too many writes to a page,
1151                          * it may no longer be a page table, or we may be
1152                          * forking, in which case it is better to unmap the
1153                          * page.
1154                          */
1155                         pgprintk("misaligned: gpa %llx bytes %d role %x\n",
1156                                  gpa, bytes, page->role.word);
1157                         kvm_mmu_zap_page(vcpu->kvm, page);
1158                         continue;
1159                 }
1160                 page_offset = offset;
1161                 level = page->role.level;
1162                 npte = 1;
1163                 if (page->role.glevels == PT32_ROOT_LEVEL) {
1164                         page_offset <<= 1;      /* 32->64 */
1165                         /*
1166                          * A 32-bit pde maps 4MB while the shadow pdes map
1167                          * only 2MB.  So we need to double the offset again
1168                          * and zap two pdes instead of one.
1169                          */
1170                         if (level == PT32_ROOT_LEVEL) {
1171                                 page_offset &= ~7; /* kill rounding error */
1172                                 page_offset <<= 1;
1173                                 npte = 2;
1174                         }
1175                         quadrant = page_offset >> PAGE_SHIFT;
1176                         page_offset &= ~PAGE_MASK;
1177                         if (quadrant != page->role.quadrant)
1178                                 continue;
1179                 }
1180                 spte = &page->spt[page_offset / sizeof(*spte)];
1181                 while (npte--) {
1182                         mmu_pte_write_zap_pte(vcpu, page, spte);
1183                         mmu_pte_write_new_pte(vcpu, page, spte, new, bytes);
1184                         ++spte;
1185                 }
1186         }
1187 }
1188
1189 int kvm_mmu_unprotect_page_virt(struct kvm_vcpu *vcpu, gva_t gva)
1190 {
1191         gpa_t gpa = vcpu->mmu.gva_to_gpa(vcpu, gva);
1192
1193         return kvm_mmu_unprotect_page(vcpu, gpa >> PAGE_SHIFT);
1194 }
1195
1196 void __kvm_mmu_free_some_pages(struct kvm_vcpu *vcpu)
1197 {
1198         while (vcpu->kvm->n_free_mmu_pages < KVM_REFILL_PAGES) {
1199                 struct kvm_mmu_page *page;
1200
1201                 page = container_of(vcpu->kvm->active_mmu_pages.prev,
1202                                     struct kvm_mmu_page, link);
1203                 kvm_mmu_zap_page(vcpu->kvm, page);
1204         }
1205 }
1206
1207 static void free_mmu_pages(struct kvm_vcpu *vcpu)
1208 {
1209         struct kvm_mmu_page *page;
1210
1211         while (!list_empty(&vcpu->kvm->active_mmu_pages)) {
1212                 page = container_of(vcpu->kvm->active_mmu_pages.next,
1213                                     struct kvm_mmu_page, link);
1214                 kvm_mmu_zap_page(vcpu->kvm, page);
1215         }
1216         free_page((unsigned long)vcpu->mmu.pae_root);
1217 }
1218
1219 static int alloc_mmu_pages(struct kvm_vcpu *vcpu)
1220 {
1221         struct page *page;
1222         int i;
1223
1224         ASSERT(vcpu);
1225
1226         vcpu->kvm->n_free_mmu_pages = KVM_NUM_MMU_PAGES;
1227
1228         /*
1229          * When emulating 32-bit mode, cr3 is only 32 bits even on x86_64.
1230          * Therefore we need to allocate shadow page tables in the first
1231          * 4GB of memory, which happens to fit the DMA32 zone.
1232          */
1233         page = alloc_page(GFP_KERNEL | __GFP_DMA32);
1234         if (!page)
1235                 goto error_1;
1236         vcpu->mmu.pae_root = page_address(page);
1237         for (i = 0; i < 4; ++i)
1238                 vcpu->mmu.pae_root[i] = INVALID_PAGE;
1239
1240         return 0;
1241
1242 error_1:
1243         free_mmu_pages(vcpu);
1244         return -ENOMEM;
1245 }
1246
1247 int kvm_mmu_create(struct kvm_vcpu *vcpu)
1248 {
1249         ASSERT(vcpu);
1250         ASSERT(!VALID_PAGE(vcpu->mmu.root_hpa));
1251
1252         return alloc_mmu_pages(vcpu);
1253 }
1254
1255 int kvm_mmu_setup(struct kvm_vcpu *vcpu)
1256 {
1257         ASSERT(vcpu);
1258         ASSERT(!VALID_PAGE(vcpu->mmu.root_hpa));
1259
1260         return init_kvm_mmu(vcpu);
1261 }
1262
1263 void kvm_mmu_destroy(struct kvm_vcpu *vcpu)
1264 {
1265         ASSERT(vcpu);
1266
1267         destroy_kvm_mmu(vcpu);
1268         free_mmu_pages(vcpu);
1269         mmu_free_memory_caches(vcpu);
1270 }
1271
1272 void kvm_mmu_slot_remove_write_access(struct kvm *kvm, int slot)
1273 {
1274         struct kvm_mmu_page *page;
1275
1276         list_for_each_entry(page, &kvm->active_mmu_pages, link) {
1277                 int i;
1278                 u64 *pt;
1279
1280                 if (!test_bit(slot, &page->slot_bitmap))
1281                         continue;
1282
1283                 pt = page->spt;
1284                 for (i = 0; i < PT64_ENT_PER_PAGE; ++i)
1285                         /* avoid RMW */
1286                         if (pt[i] & PT_WRITABLE_MASK) {
1287                                 rmap_remove(&pt[i]);
1288                                 pt[i] &= ~PT_WRITABLE_MASK;
1289                         }
1290         }
1291 }
1292
1293 void kvm_mmu_zap_all(struct kvm *kvm)
1294 {
1295         struct kvm_mmu_page *page, *node;
1296
1297         list_for_each_entry_safe(page, node, &kvm->active_mmu_pages, link)
1298                 kvm_mmu_zap_page(kvm, page);
1299
1300         kvm_flush_remote_tlbs(kvm);
1301 }
1302
1303 void kvm_mmu_module_exit(void)
1304 {
1305         if (pte_chain_cache)
1306                 kmem_cache_destroy(pte_chain_cache);
1307         if (rmap_desc_cache)
1308                 kmem_cache_destroy(rmap_desc_cache);
1309         if (mmu_page_header_cache)
1310                 kmem_cache_destroy(mmu_page_header_cache);
1311 }
1312
1313 int kvm_mmu_module_init(void)
1314 {
1315         pte_chain_cache = kmem_cache_create("kvm_pte_chain",
1316                                             sizeof(struct kvm_pte_chain),
1317                                             0, 0, NULL);
1318         if (!pte_chain_cache)
1319                 goto nomem;
1320         rmap_desc_cache = kmem_cache_create("kvm_rmap_desc",
1321                                             sizeof(struct kvm_rmap_desc),
1322                                             0, 0, NULL);
1323         if (!rmap_desc_cache)
1324                 goto nomem;
1325
1326         mmu_page_header_cache = kmem_cache_create("kvm_mmu_page_header",
1327                                                   sizeof(struct kvm_mmu_page),
1328                                                   0, 0, NULL);
1329         if (!mmu_page_header_cache)
1330                 goto nomem;
1331
1332         return 0;
1333
1334 nomem:
1335         kvm_mmu_module_exit();
1336         return -ENOMEM;
1337 }
1338
1339 #ifdef AUDIT
1340
1341 static const char *audit_msg;
1342
1343 static gva_t canonicalize(gva_t gva)
1344 {
1345 #ifdef CONFIG_X86_64
1346         gva = (long long)(gva << 16) >> 16;
1347 #endif
1348         return gva;
1349 }
1350
1351 static void audit_mappings_page(struct kvm_vcpu *vcpu, u64 page_pte,
1352                                 gva_t va, int level)
1353 {
1354         u64 *pt = __va(page_pte & PT64_BASE_ADDR_MASK);
1355         int i;
1356         gva_t va_delta = 1ul << (PAGE_SHIFT + 9 * (level - 1));
1357
1358         for (i = 0; i < PT64_ENT_PER_PAGE; ++i, va += va_delta) {
1359                 u64 ent = pt[i];
1360
1361                 if (!(ent & PT_PRESENT_MASK))
1362                         continue;
1363
1364                 va = canonicalize(va);
1365                 if (level > 1)
1366                         audit_mappings_page(vcpu, ent, va, level - 1);
1367                 else {
1368                         gpa_t gpa = vcpu->mmu.gva_to_gpa(vcpu, va);
1369                         hpa_t hpa = gpa_to_hpa(vcpu, gpa);
1370
1371                         if ((ent & PT_PRESENT_MASK)
1372                             && (ent & PT64_BASE_ADDR_MASK) != hpa)
1373                                 printk(KERN_ERR "audit error: (%s) levels %d"
1374                                        " gva %lx gpa %llx hpa %llx ent %llx\n",
1375                                        audit_msg, vcpu->mmu.root_level,
1376                                        va, gpa, hpa, ent);
1377                 }
1378         }
1379 }
1380
1381 static void audit_mappings(struct kvm_vcpu *vcpu)
1382 {
1383         unsigned i;
1384
1385         if (vcpu->mmu.root_level == 4)
1386                 audit_mappings_page(vcpu, vcpu->mmu.root_hpa, 0, 4);
1387         else
1388                 for (i = 0; i < 4; ++i)
1389                         if (vcpu->mmu.pae_root[i] & PT_PRESENT_MASK)
1390                                 audit_mappings_page(vcpu,
1391                                                     vcpu->mmu.pae_root[i],
1392                                                     i << 30,
1393                                                     2);
1394 }
1395
1396 static int count_rmaps(struct kvm_vcpu *vcpu)
1397 {
1398         int nmaps = 0;
1399         int i, j, k;
1400
1401         for (i = 0; i < KVM_MEMORY_SLOTS; ++i) {
1402                 struct kvm_memory_slot *m = &vcpu->kvm->memslots[i];
1403                 struct kvm_rmap_desc *d;
1404
1405                 for (j = 0; j < m->npages; ++j) {
1406                         struct page *page = m->phys_mem[j];
1407
1408                         if (!page->private)
1409                                 continue;
1410                         if (!(page->private & 1)) {
1411                                 ++nmaps;
1412                                 continue;
1413                         }
1414                         d = (struct kvm_rmap_desc *)(page->private & ~1ul);
1415                         while (d) {
1416                                 for (k = 0; k < RMAP_EXT; ++k)
1417                                         if (d->shadow_ptes[k])
1418                                                 ++nmaps;
1419                                         else
1420                                                 break;
1421                                 d = d->more;
1422                         }
1423                 }
1424         }
1425         return nmaps;
1426 }
1427
1428 static int count_writable_mappings(struct kvm_vcpu *vcpu)
1429 {
1430         int nmaps = 0;
1431         struct kvm_mmu_page *page;
1432         int i;
1433
1434         list_for_each_entry(page, &vcpu->kvm->active_mmu_pages, link) {
1435                 u64 *pt = page->spt;
1436
1437                 if (page->role.level != PT_PAGE_TABLE_LEVEL)
1438                         continue;
1439
1440                 for (i = 0; i < PT64_ENT_PER_PAGE; ++i) {
1441                         u64 ent = pt[i];
1442
1443                         if (!(ent & PT_PRESENT_MASK))
1444                                 continue;
1445                         if (!(ent & PT_WRITABLE_MASK))
1446                                 continue;
1447                         ++nmaps;
1448                 }
1449         }
1450         return nmaps;
1451 }
1452
1453 static void audit_rmap(struct kvm_vcpu *vcpu)
1454 {
1455         int n_rmap = count_rmaps(vcpu);
1456         int n_actual = count_writable_mappings(vcpu);
1457
1458         if (n_rmap != n_actual)
1459                 printk(KERN_ERR "%s: (%s) rmap %d actual %d\n",
1460                        __FUNCTION__, audit_msg, n_rmap, n_actual);
1461 }
1462
1463 static void audit_write_protection(struct kvm_vcpu *vcpu)
1464 {
1465         struct kvm_mmu_page *page;
1466
1467         list_for_each_entry(page, &vcpu->kvm->active_mmu_pages, link) {
1468                 hfn_t hfn;
1469                 struct page *pg;
1470
1471                 if (page->role.metaphysical)
1472                         continue;
1473
1474                 hfn = gpa_to_hpa(vcpu, (gpa_t)page->gfn << PAGE_SHIFT)
1475                         >> PAGE_SHIFT;
1476                 pg = pfn_to_page(hfn);
1477                 if (pg->private)
1478                         printk(KERN_ERR "%s: (%s) shadow page has writable"
1479                                " mappings: gfn %lx role %x\n",
1480                                __FUNCTION__, audit_msg, page->gfn,
1481                                page->role.word);
1482         }
1483 }
1484
1485 static void kvm_mmu_audit(struct kvm_vcpu *vcpu, const char *msg)
1486 {
1487         int olddbg = dbg;
1488
1489         dbg = 0;
1490         audit_msg = msg;
1491         audit_rmap(vcpu);
1492         audit_write_protection(vcpu);
1493         audit_mappings(vcpu);
1494         dbg = olddbg;
1495 }
1496
1497 #endif