diff options
Diffstat (limited to 'virt')
-rw-r--r-- | virt/kvm/kvm_main.c | 47 |
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 | ||
112 | static void kvm_io_bus_destroy(struct kvm_io_bus *bus); | 112 | static void kvm_io_bus_destroy(struct kvm_io_bus *bus); |
113 | 113 | ||
114 | static void kvm_release_pfn_dirty(pfn_t pfn); | 114 | static void kvm_release_pfn_dirty(kvm_pfn_t pfn); |
115 | static void mark_page_dirty_in_slot(struct kvm_memory_slot *memslot, gfn_t gfn); | 115 | static 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 | ||
120 | static bool largepages_enabled = true; | 120 | static bool largepages_enabled = true; |
121 | 121 | ||
122 | bool kvm_is_reserved_pfn(pfn_t pfn) | 122 | bool 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 | */ |
1291 | static bool hva_to_pfn_fast(unsigned long addr, bool atomic, bool *async, | 1291 | static 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 | */ |
1324 | static int hva_to_pfn_slow(unsigned long addr, bool *async, bool write_fault, | 1324 | static 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 | */ |
1389 | static pfn_t hva_to_pfn(unsigned long addr, bool atomic, bool *async, | 1389 | static 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 | ||
1434 | pfn_t __gfn_to_pfn_memslot(struct kvm_memory_slot *slot, gfn_t gfn, bool atomic, | 1434 | kvm_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 | } |
1454 | EXPORT_SYMBOL_GPL(__gfn_to_pfn_memslot); | 1455 | EXPORT_SYMBOL_GPL(__gfn_to_pfn_memslot); |
1455 | 1456 | ||
1456 | pfn_t gfn_to_pfn_prot(struct kvm *kvm, gfn_t gfn, bool write_fault, | 1457 | kvm_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 | } |
1462 | EXPORT_SYMBOL_GPL(gfn_to_pfn_prot); | 1463 | EXPORT_SYMBOL_GPL(gfn_to_pfn_prot); |
1463 | 1464 | ||
1464 | pfn_t gfn_to_pfn_memslot(struct kvm_memory_slot *slot, gfn_t gfn) | 1465 | kvm_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 | } |
1468 | EXPORT_SYMBOL_GPL(gfn_to_pfn_memslot); | 1469 | EXPORT_SYMBOL_GPL(gfn_to_pfn_memslot); |
1469 | 1470 | ||
1470 | pfn_t gfn_to_pfn_memslot_atomic(struct kvm_memory_slot *slot, gfn_t gfn) | 1471 | kvm_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 | } |
1474 | EXPORT_SYMBOL_GPL(gfn_to_pfn_memslot_atomic); | 1475 | EXPORT_SYMBOL_GPL(gfn_to_pfn_memslot_atomic); |
1475 | 1476 | ||
1476 | pfn_t gfn_to_pfn_atomic(struct kvm *kvm, gfn_t gfn) | 1477 | kvm_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 | } |
1480 | EXPORT_SYMBOL_GPL(gfn_to_pfn_atomic); | 1481 | EXPORT_SYMBOL_GPL(gfn_to_pfn_atomic); |
1481 | 1482 | ||
1482 | pfn_t kvm_vcpu_gfn_to_pfn_atomic(struct kvm_vcpu *vcpu, gfn_t gfn) | 1483 | kvm_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 | } |
1486 | EXPORT_SYMBOL_GPL(kvm_vcpu_gfn_to_pfn_atomic); | 1487 | EXPORT_SYMBOL_GPL(kvm_vcpu_gfn_to_pfn_atomic); |
1487 | 1488 | ||
1488 | pfn_t gfn_to_pfn(struct kvm *kvm, gfn_t gfn) | 1489 | kvm_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 | } |
1492 | EXPORT_SYMBOL_GPL(gfn_to_pfn); | 1493 | EXPORT_SYMBOL_GPL(gfn_to_pfn); |
1493 | 1494 | ||
1494 | pfn_t kvm_vcpu_gfn_to_pfn(struct kvm_vcpu *vcpu, gfn_t gfn) | 1495 | kvm_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 | } |
1515 | EXPORT_SYMBOL_GPL(gfn_to_page_many_atomic); | 1516 | EXPORT_SYMBOL_GPL(gfn_to_page_many_atomic); |
1516 | 1517 | ||
1517 | static struct page *kvm_pfn_to_page(pfn_t pfn) | 1518 | static 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 | ||
1530 | struct page *gfn_to_page(struct kvm *kvm, gfn_t gfn) | 1531 | struct 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 | ||
1540 | struct page *kvm_vcpu_gfn_to_page(struct kvm_vcpu *vcpu, gfn_t gfn) | 1541 | struct 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 | } |
1556 | EXPORT_SYMBOL_GPL(kvm_release_page_clean); | 1557 | EXPORT_SYMBOL_GPL(kvm_release_page_clean); |
1557 | 1558 | ||
1558 | void kvm_release_pfn_clean(pfn_t pfn) | 1559 | void 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 | } |
1571 | EXPORT_SYMBOL_GPL(kvm_release_page_dirty); | 1572 | EXPORT_SYMBOL_GPL(kvm_release_page_dirty); |
1572 | 1573 | ||
1573 | static void kvm_release_pfn_dirty(pfn_t pfn) | 1574 | static 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 | ||
1579 | void kvm_set_pfn_dirty(pfn_t pfn) | 1580 | void 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 | } |
1588 | EXPORT_SYMBOL_GPL(kvm_set_pfn_dirty); | 1589 | EXPORT_SYMBOL_GPL(kvm_set_pfn_dirty); |
1589 | 1590 | ||
1590 | void kvm_set_pfn_accessed(pfn_t pfn) | 1591 | void 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 | } |
1595 | EXPORT_SYMBOL_GPL(kvm_set_pfn_accessed); | 1596 | EXPORT_SYMBOL_GPL(kvm_set_pfn_accessed); |
1596 | 1597 | ||
1597 | void kvm_get_pfn(pfn_t pfn) | 1598 | void 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)); |