The EncryptedRAMBlock Notifier lets SEV know which guest RAM pages
will contain encrypted guest data.

Using this notifier lets SEV skip pinning pages that do not contain
encrypted data.

Signed-off-by: Janakarajan Natarajan <janakarajan.natara...@amd.com>
---
 target/i386/sev.c | 25 ++++++++-----------------
 1 file changed, 8 insertions(+), 17 deletions(-)

diff --git a/target/i386/sev.c b/target/i386/sev.c
index cd77f6b5d4..610e992e64 100644
--- a/target/i386/sev.c
+++ b/target/i386/sev.c
@@ -127,21 +127,11 @@ sev_set_guest_state(SevState new_state)
 }
 
 static void
-sev_ram_block_added(RAMBlockNotifier *n, void *host, size_t size)
+sev_ram_block_encrypted_added(RAMBlockEncryptedNotifier *n,
+                              void *host, size_t size)
 {
     int r;
     struct kvm_enc_region range;
-    ram_addr_t offset;
-    MemoryRegion *mr;
-
-    /*
-     * The RAM device presents a memory region that should be treated
-     * as IO region and should not be pinned.
-     */
-    mr = memory_region_from_host(host, &offset);
-    if (mr && memory_region_is_ram_device(mr)) {
-        return;
-    }
 
     range.addr = (__u64)(unsigned long)host;
     range.size = size;
@@ -156,7 +146,8 @@ sev_ram_block_added(RAMBlockNotifier *n, void *host, size_t 
size)
 }
 
 static void
-sev_ram_block_removed(RAMBlockNotifier *n, void *host, size_t size)
+sev_ram_block_encrypted_removed(RAMBlockEncryptedNotifier *n,
+                                void *host, size_t size)
 {
     int r;
     struct kvm_enc_region range;
@@ -172,9 +163,9 @@ sev_ram_block_removed(RAMBlockNotifier *n, void *host, 
size_t size)
     }
 }
 
-static struct RAMBlockNotifier sev_ram_notifier = {
-    .ram_block_added = sev_ram_block_added,
-    .ram_block_removed = sev_ram_block_removed,
+static struct RAMBlockEncryptedNotifier sev_ram_encrypted_notifier = {
+    .ram_block_encrypted_added = sev_ram_block_encrypted_added,
+    .ram_block_encrypted_removed = sev_ram_block_encrypted_removed,
 };
 
 static void
@@ -794,7 +785,7 @@ sev_guest_init(const char *id)
         goto err;
     }
 
-    ram_block_notifier_add(&sev_ram_notifier);
+    ram_block_encrypted_notifier_add(&sev_ram_encrypted_notifier);
     qemu_add_machine_init_done_notifier(&sev_machine_done_notify);
     qemu_add_vm_change_state_handler(sev_vm_state_change, s);
 
-- 
2.20.1

Reply via email to