summaryrefslogtreecommitdiffstats
path: root/virt
diff options
context:
space:
mode:
Diffstat (limited to 'virt')
-rw-r--r--virt/kvm/kvm_main.c47
1 files changed, 24 insertions, 23 deletions
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index 314c7774652e..a11cfd20a6a0 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -111,7 +111,7 @@ static void hardware_disable_all(void);
111 111
112static void kvm_io_bus_destroy(struct kvm_io_bus *bus); 112static void kvm_io_bus_destroy(struct kvm_io_bus *bus);
113 113
114static void kvm_release_pfn_dirty(pfn_t pfn); 114static void kvm_release_pfn_dirty(kvm_pfn_t pfn);
115static void mark_page_dirty_in_slot(struct kvm_memory_slot *memslot, gfn_t gfn); 115static void mark_page_dirty_in_slot(struct kvm_memory_slot *memslot, gfn_t gfn);
116 116
117__visible bool kvm_rebooting; 117__visible bool kvm_rebooting;
@@ -119,7 +119,7 @@ EXPORT_SYMBOL_GPL(kvm_rebooting);
119 119
120static bool largepages_enabled = true; 120static bool largepages_enabled = true;
121 121
122bool kvm_is_reserved_pfn(pfn_t pfn) 122bool kvm_is_reserved_pfn(kvm_pfn_t pfn)
123{ 123{
124 if (pfn_valid(pfn)) 124 if (pfn_valid(pfn))
125 return PageReserved(pfn_to_page(pfn)); 125 return PageReserved(pfn_to_page(pfn));
@@ -1289,7 +1289,7 @@ static inline int check_user_page_hwpoison(unsigned long addr)
1289 * true indicates success, otherwise false is returned. 1289 * true indicates success, otherwise false is returned.
1290 */ 1290 */
1291static bool hva_to_pfn_fast(unsigned long addr, bool atomic, bool *async, 1291static bool hva_to_pfn_fast(unsigned long addr, bool atomic, bool *async,
1292 bool write_fault, bool *writable, pfn_t *pfn) 1292 bool write_fault, bool *writable, kvm_pfn_t *pfn)
1293{ 1293{
1294 struct page *page[1]; 1294 struct page *page[1];
1295 int npages; 1295 int npages;
@@ -1322,7 +1322,7 @@ static bool hva_to_pfn_fast(unsigned long addr, bool atomic, bool *async,
1322 * 1 indicates success, -errno is returned if error is detected. 1322 * 1 indicates success, -errno is returned if error is detected.
1323 */ 1323 */
1324static int hva_to_pfn_slow(unsigned long addr, bool *async, bool write_fault, 1324static int hva_to_pfn_slow(unsigned long addr, bool *async, bool write_fault,
1325 bool *writable, pfn_t *pfn) 1325 bool *writable, kvm_pfn_t *pfn)
1326{ 1326{
1327 struct page *page[1]; 1327 struct page *page[1];
1328 int npages = 0; 1328 int npages = 0;
@@ -1386,11 +1386,11 @@ static bool vma_is_valid(struct vm_area_struct *vma, bool write_fault)
1386 * 2): @write_fault = false && @writable, @writable will tell the caller 1386 * 2): @write_fault = false && @writable, @writable will tell the caller
1387 * whether the mapping is writable. 1387 * whether the mapping is writable.
1388 */ 1388 */
1389static pfn_t hva_to_pfn(unsigned long addr, bool atomic, bool *async, 1389static kvm_pfn_t hva_to_pfn(unsigned long addr, bool atomic, bool *async,
1390 bool write_fault, bool *writable) 1390 bool write_fault, bool *writable)
1391{ 1391{
1392 struct vm_area_struct *vma; 1392 struct vm_area_struct *vma;
1393 pfn_t pfn = 0; 1393 kvm_pfn_t pfn = 0;
1394 int npages; 1394 int npages;
1395 1395
1396 /* we can do it either atomically or asynchronously, not both */ 1396 /* we can do it either atomically or asynchronously, not both */
@@ -1431,8 +1431,9 @@ exit:
1431 return pfn; 1431 return pfn;
1432} 1432}
1433 1433
1434pfn_t __gfn_to_pfn_memslot(struct kvm_memory_slot *slot, gfn_t gfn, bool atomic, 1434kvm_pfn_t __gfn_to_pfn_memslot(struct kvm_memory_slot *slot, gfn_t gfn,
1435 bool *async, bool write_fault, bool *writable) 1435 bool atomic, bool *async, bool write_fault,
1436 bool *writable)
1436{ 1437{
1437 unsigned long addr = __gfn_to_hva_many(slot, gfn, NULL, write_fault); 1438 unsigned long addr = __gfn_to_hva_many(slot, gfn, NULL, write_fault);
1438 1439
@@ -1453,7 +1454,7 @@ pfn_t __gfn_to_pfn_memslot(struct kvm_memory_slot *slot, gfn_t gfn, bool atomic,
1453} 1454}
1454EXPORT_SYMBOL_GPL(__gfn_to_pfn_memslot); 1455EXPORT_SYMBOL_GPL(__gfn_to_pfn_memslot);
1455 1456
1456pfn_t gfn_to_pfn_prot(struct kvm *kvm, gfn_t gfn, bool write_fault, 1457kvm_pfn_t gfn_to_pfn_prot(struct kvm *kvm, gfn_t gfn, bool write_fault,
1457 bool *writable) 1458 bool *writable)
1458{ 1459{
1459 return __gfn_to_pfn_memslot(gfn_to_memslot(kvm, gfn), gfn, false, NULL, 1460 return __gfn_to_pfn_memslot(gfn_to_memslot(kvm, gfn), gfn, false, NULL,
@@ -1461,37 +1462,37 @@ pfn_t gfn_to_pfn_prot(struct kvm *kvm, gfn_t gfn, bool write_fault,
1461} 1462}
1462EXPORT_SYMBOL_GPL(gfn_to_pfn_prot); 1463EXPORT_SYMBOL_GPL(gfn_to_pfn_prot);
1463 1464
1464pfn_t gfn_to_pfn_memslot(struct kvm_memory_slot *slot, gfn_t gfn) 1465kvm_pfn_t gfn_to_pfn_memslot(struct kvm_memory_slot *slot, gfn_t gfn)
1465{ 1466{
1466 return __gfn_to_pfn_memslot(slot, gfn, false, NULL, true, NULL); 1467 return __gfn_to_pfn_memslot(slot, gfn, false, NULL, true, NULL);
1467} 1468}
1468EXPORT_SYMBOL_GPL(gfn_to_pfn_memslot); 1469EXPORT_SYMBOL_GPL(gfn_to_pfn_memslot);
1469 1470
1470pfn_t gfn_to_pfn_memslot_atomic(struct kvm_memory_slot *slot, gfn_t gfn) 1471kvm_pfn_t gfn_to_pfn_memslot_atomic(struct kvm_memory_slot *slot, gfn_t gfn)
1471{ 1472{
1472 return __gfn_to_pfn_memslot(slot, gfn, true, NULL, true, NULL); 1473 return __gfn_to_pfn_memslot(slot, gfn, true, NULL, true, NULL);
1473} 1474}
1474EXPORT_SYMBOL_GPL(gfn_to_pfn_memslot_atomic); 1475EXPORT_SYMBOL_GPL(gfn_to_pfn_memslot_atomic);
1475 1476
1476pfn_t gfn_to_pfn_atomic(struct kvm *kvm, gfn_t gfn) 1477kvm_pfn_t gfn_to_pfn_atomic(struct kvm *kvm, gfn_t gfn)
1477{ 1478{
1478 return gfn_to_pfn_memslot_atomic(gfn_to_memslot(kvm, gfn), gfn); 1479 return gfn_to_pfn_memslot_atomic(gfn_to_memslot(kvm, gfn), gfn);
1479} 1480}
1480EXPORT_SYMBOL_GPL(gfn_to_pfn_atomic); 1481EXPORT_SYMBOL_GPL(gfn_to_pfn_atomic);
1481 1482
1482pfn_t kvm_vcpu_gfn_to_pfn_atomic(struct kvm_vcpu *vcpu, gfn_t gfn) 1483kvm_pfn_t kvm_vcpu_gfn_to_pfn_atomic(struct kvm_vcpu *vcpu, gfn_t gfn)
1483{ 1484{
1484 return gfn_to_pfn_memslot_atomic(kvm_vcpu_gfn_to_memslot(vcpu, gfn), gfn); 1485 return gfn_to_pfn_memslot_atomic(kvm_vcpu_gfn_to_memslot(vcpu, gfn), gfn);
1485} 1486}
1486EXPORT_SYMBOL_GPL(kvm_vcpu_gfn_to_pfn_atomic); 1487EXPORT_SYMBOL_GPL(kvm_vcpu_gfn_to_pfn_atomic);
1487 1488
1488pfn_t gfn_to_pfn(struct kvm *kvm, gfn_t gfn) 1489kvm_pfn_t gfn_to_pfn(struct kvm *kvm, gfn_t gfn)
1489{ 1490{
1490 return gfn_to_pfn_memslot(gfn_to_memslot(kvm, gfn), gfn); 1491 return gfn_to_pfn_memslot(gfn_to_memslot(kvm, gfn), gfn);
1491} 1492}
1492EXPORT_SYMBOL_GPL(gfn_to_pfn); 1493EXPORT_SYMBOL_GPL(gfn_to_pfn);
1493 1494
1494pfn_t kvm_vcpu_gfn_to_pfn(struct kvm_vcpu *vcpu, gfn_t gfn) 1495kvm_pfn_t kvm_vcpu_gfn_to_pfn(struct kvm_vcpu *vcpu, gfn_t gfn)
1495{ 1496{
1496 return gfn_to_pfn_memslot(kvm_vcpu_gfn_to_memslot(vcpu, gfn), gfn); 1497 return gfn_to_pfn_memslot(kvm_vcpu_gfn_to_memslot(vcpu, gfn), gfn);
1497} 1498}
@@ -1514,7 +1515,7 @@ int gfn_to_page_many_atomic(struct kvm_memory_slot *slot, gfn_t gfn,
1514} 1515}
1515EXPORT_SYMBOL_GPL(gfn_to_page_many_atomic); 1516EXPORT_SYMBOL_GPL(gfn_to_page_many_atomic);
1516 1517
1517static struct page *kvm_pfn_to_page(pfn_t pfn) 1518static struct page *kvm_pfn_to_page(kvm_pfn_t pfn)
1518{ 1519{
1519 if (is_error_noslot_pfn(pfn)) 1520 if (is_error_noslot_pfn(pfn))
1520 return KVM_ERR_PTR_BAD_PAGE; 1521 return KVM_ERR_PTR_BAD_PAGE;
@@ -1529,7 +1530,7 @@ static struct page *kvm_pfn_to_page(pfn_t pfn)
1529 1530
1530struct page *gfn_to_page(struct kvm *kvm, gfn_t gfn) 1531struct page *gfn_to_page(struct kvm *kvm, gfn_t gfn)
1531{ 1532{
1532 pfn_t pfn; 1533 kvm_pfn_t pfn;
1533 1534
1534 pfn = gfn_to_pfn(kvm, gfn); 1535 pfn = gfn_to_pfn(kvm, gfn);
1535 1536
@@ -1539,7 +1540,7 @@ EXPORT_SYMBOL_GPL(gfn_to_page);
1539 1540
1540struct page *kvm_vcpu_gfn_to_page(struct kvm_vcpu *vcpu, gfn_t gfn) 1541struct page *kvm_vcpu_gfn_to_page(struct kvm_vcpu *vcpu, gfn_t gfn)
1541{ 1542{
1542 pfn_t pfn; 1543 kvm_pfn_t pfn;
1543 1544
1544 pfn = kvm_vcpu_gfn_to_pfn(vcpu, gfn); 1545 pfn = kvm_vcpu_gfn_to_pfn(vcpu, gfn);
1545 1546
@@ -1555,7 +1556,7 @@ void kvm_release_page_clean(struct page *page)
1555} 1556}
1556EXPORT_SYMBOL_GPL(kvm_release_page_clean); 1557EXPORT_SYMBOL_GPL(kvm_release_page_clean);
1557 1558
1558void kvm_release_pfn_clean(pfn_t pfn) 1559void kvm_release_pfn_clean(kvm_pfn_t pfn)
1559{ 1560{
1560 if (!is_error_noslot_pfn(pfn) && !kvm_is_reserved_pfn(pfn)) 1561 if (!is_error_noslot_pfn(pfn) && !kvm_is_reserved_pfn(pfn))
1561 put_page(pfn_to_page(pfn)); 1562 put_page(pfn_to_page(pfn));
@@ -1570,13 +1571,13 @@ void kvm_release_page_dirty(struct page *page)
1570} 1571}
1571EXPORT_SYMBOL_GPL(kvm_release_page_dirty); 1572EXPORT_SYMBOL_GPL(kvm_release_page_dirty);
1572 1573
1573static void kvm_release_pfn_dirty(pfn_t pfn) 1574static void kvm_release_pfn_dirty(kvm_pfn_t pfn)
1574{ 1575{
1575 kvm_set_pfn_dirty(pfn); 1576 kvm_set_pfn_dirty(pfn);
1576 kvm_release_pfn_clean(pfn); 1577 kvm_release_pfn_clean(pfn);
1577} 1578}
1578 1579
1579void kvm_set_pfn_dirty(pfn_t pfn) 1580void kvm_set_pfn_dirty(kvm_pfn_t pfn)
1580{ 1581{
1581 if (!kvm_is_reserved_pfn(pfn)) { 1582 if (!kvm_is_reserved_pfn(pfn)) {
1582 struct page *page = pfn_to_page(pfn); 1583 struct page *page = pfn_to_page(pfn);
@@ -1587,14 +1588,14 @@ void kvm_set_pfn_dirty(pfn_t pfn)
1587} 1588}
1588EXPORT_SYMBOL_GPL(kvm_set_pfn_dirty); 1589EXPORT_SYMBOL_GPL(kvm_set_pfn_dirty);
1589 1590
1590void kvm_set_pfn_accessed(pfn_t pfn) 1591void kvm_set_pfn_accessed(kvm_pfn_t pfn)
1591{ 1592{
1592 if (!kvm_is_reserved_pfn(pfn)) 1593 if (!kvm_is_reserved_pfn(pfn))
1593 mark_page_accessed(pfn_to_page(pfn)); 1594 mark_page_accessed(pfn_to_page(pfn));
1594} 1595}
1595EXPORT_SYMBOL_GPL(kvm_set_pfn_accessed); 1596EXPORT_SYMBOL_GPL(kvm_set_pfn_accessed);
1596 1597
1597void kvm_get_pfn(pfn_t pfn) 1598void kvm_get_pfn(kvm_pfn_t pfn)
1598{ 1599{
1599 if (!kvm_is_reserved_pfn(pfn)) 1600 if (!kvm_is_reserved_pfn(pfn))
1600 get_page(pfn_to_page(pfn)); 1601 get_page(pfn_to_page(pfn));