]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
KVM: arm64: Drop pkvm_mem_transition for FF-A
authorQuentin Perret <qperret@google.com>
Fri, 10 Jan 2025 12:19:34 +0000 (12:19 +0000)
committerMarc Zyngier <maz@kernel.org>
Sun, 12 Jan 2025 10:46:39 +0000 (10:46 +0000)
Simplify the __pkvm_host_{un}share_ffa() paths by using
{check,set}_page_state_range().

No functional changes intended.

Signed-off-by: Quentin Perret <qperret@google.com>
Link: https://lore.kernel.org/r/20250110121936.1559655-2-qperret@google.com
Signed-off-by: Marc Zyngier <maz@kernel.org>
arch/arm64/kvm/hyp/nvhe/mem_protect.c

index 392f036bc69ee53b151468060bfd7df17f97c123..3a3d9fcbc5084e81aa2792b3f45b8cb72fa7661c 100644 (file)
@@ -1324,22 +1324,14 @@ void hyp_unpin_shared_mem(void *from, void *to)
 
 int __pkvm_host_share_ffa(u64 pfn, u64 nr_pages)
 {
+       u64 phys = hyp_pfn_to_phys(pfn);
+       u64 size = PAGE_SIZE * nr_pages;
        int ret;
-       struct pkvm_mem_share share = {
-               .tx     = {
-                       .nr_pages       = nr_pages,
-                       .initiator      = {
-                               .id     = PKVM_ID_HOST,
-                               .addr   = hyp_pfn_to_phys(pfn),
-                       },
-                       .completer      = {
-                               .id     = PKVM_ID_FFA,
-                       },
-               },
-       };
 
        host_lock_component();
-       ret = do_share(&share);
+       ret = __host_check_page_state_range(phys, size, PKVM_PAGE_OWNED);
+       if (!ret)
+               ret = __host_set_page_state_range(phys, size, PKVM_PAGE_SHARED_OWNED);
        host_unlock_component();
 
        return ret;
@@ -1347,22 +1339,14 @@ int __pkvm_host_share_ffa(u64 pfn, u64 nr_pages)
 
 int __pkvm_host_unshare_ffa(u64 pfn, u64 nr_pages)
 {
+       u64 phys = hyp_pfn_to_phys(pfn);
+       u64 size = PAGE_SIZE * nr_pages;
        int ret;
-       struct pkvm_mem_share share = {
-               .tx     = {
-                       .nr_pages       = nr_pages,
-                       .initiator      = {
-                               .id     = PKVM_ID_HOST,
-                               .addr   = hyp_pfn_to_phys(pfn),
-                       },
-                       .completer      = {
-                               .id     = PKVM_ID_FFA,
-                       },
-               },
-       };
 
        host_lock_component();
-       ret = do_unshare(&share);
+       ret = __host_check_page_state_range(phys, size, PKVM_PAGE_SHARED_OWNED);
+       if (!ret)
+               ret = __host_set_page_state_range(phys, size, PKVM_PAGE_OWNED);
        host_unlock_component();
 
        return ret;