When generating a device tree for a guest, it is useful to have a helper for converting host addresses to guest addresses in order to populate the device nodes correctly. This patch adds such a helper, following a similar implementation to the reverse translation function that already exists. Signed-off-by: Will Deacon <will.deacon@xxxxxxx> --- tools/kvm/include/kvm/kvm.h | 1 + tools/kvm/kvm.c | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/tools/kvm/include/kvm/kvm.h b/tools/kvm/include/kvm/kvm.h index 5fb2fb2..b54ac03 100644 --- a/tools/kvm/include/kvm/kvm.h +++ b/tools/kvm/include/kvm/kvm.h @@ -106,6 +106,7 @@ bool kvm__arch_cpu_supports_vm(void); void kvm__arch_periodic_poll(struct kvm *kvm); void *guest_flat_to_host(struct kvm *kvm, u64 offset); +u64 host_to_guest_flat(struct kvm *kvm, void *ptr); int load_flat_binary(struct kvm *kvm, int fd_kernel, int fd_initrd, const char *kernel_cmdline); bool load_bzimage(struct kvm *kvm, int fd_kernel, int fd_initrd, const char *kernel_cmdline, u16 vidmode); diff --git a/tools/kvm/kvm.c b/tools/kvm/kvm.c index a7e2628..af19e37 100644 --- a/tools/kvm/kvm.c +++ b/tools/kvm/kvm.c @@ -201,6 +201,22 @@ void *guest_flat_to_host(struct kvm *kvm, u64 offset) return NULL; } +u64 host_to_guest_flat(struct kvm *kvm, void *ptr) +{ + struct kvm_mem_bank *bank; + + list_for_each_entry(bank, &kvm->mem_banks, list) { + void *bank_start = bank->host_addr; + void *bank_end = bank_start + bank->size; + + if (ptr >= bank_start && ptr < bank_end) + return bank->guest_phys_addr + (ptr - bank_start); + } + + pr_warning("unable to translate host address %p to guest", ptr); + return 0; +} + int kvm__recommended_cpus(struct kvm *kvm) { int ret; -- 1.8.0 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html