X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fvm_guest_mem.c;h=9c7703e4de4424a9a7ada51e685944202b4abe34;hp=e2729b935e8cefcd534db668380c4c048dd7ad94;hb=31281ec866f7244baf965402aebc8e26046b43e0;hpb=749653dd91e8d012f77c9745421f2b7cd0d3da93 diff --git a/palacios/src/palacios/vm_guest_mem.c b/palacios/src/palacios/vm_guest_mem.c index e2729b9..9c7703e 100644 --- a/palacios/src/palacios/vm_guest_mem.c +++ b/palacios/src/palacios/vm_guest_mem.c @@ -430,6 +430,37 @@ int v3_write_gva_memory(struct guest_info * guest_info, addr_t gva, int count, u return bytes_written; } +int v3_set_gva_memory(struct guest_info * guest_info, addr_t gva, int count, uchar_t src) { + addr_t cursor = gva; + int bytes_written = 0; + + + + while (count > 0) { + int dist_to_pg_edge = (PAGE_ADDR(cursor) + PAGE_SIZE) - cursor; + int bytes_to_copy = (dist_to_pg_edge > count) ? count : dist_to_pg_edge; + addr_t host_addr = 0; + + + if (v3_gva_to_hva(guest_info, cursor, &host_addr) != 0) { + PrintDebug(guest_info->vm_info, guest_info, "Invalid GVA(%p)->HVA lookup\n", (void *)cursor); + return bytes_written; + } + + + + memset((void*)host_addr, + src, + bytes_to_copy); + + bytes_written += bytes_to_copy; + count -= bytes_to_copy; + cursor += bytes_to_copy; + } + + return bytes_written; +} + @@ -460,3 +491,28 @@ int v3_write_gpa_memory(struct guest_info * guest_info, addr_t gpa, int count, u return bytes_written; } + +int v3_set_gpa_memory(struct guest_info * guest_info, addr_t gpa, int count, uchar_t src) { + addr_t cursor = gpa; + int bytes_written = 0; + + while (count > 0) { + int dist_to_pg_edge = (PAGE_ADDR(cursor) + PAGE_SIZE) - cursor; + int bytes_to_copy = (dist_to_pg_edge > count) ? count : dist_to_pg_edge; + addr_t host_addr; + + if (v3_gpa_to_hva(guest_info, cursor, &host_addr) != 0) { + return bytes_written; + } + + + memset((void*)host_addr, src, bytes_to_copy); + + bytes_written += bytes_to_copy; + count -= bytes_to_copy; + cursor += bytes_to_copy; + } + + return bytes_written; +} +