On 20.11.2012, at 09:57, Paul Mackerras wrote: > A new ioctl, KVM_PPC_GET_HTAB_FD, returns a file descriptor. Reads on > this fd return the contents of the HPT (hashed page table), writes > create and/or remove entries in the HPT. There is a new capability, > KVM_CAP_PPC_HTAB_FD, to indicate the presence of the ioctl. The ioctl > takes an argument structure with the index of the first HPT entry to > read out and a set of flags. The flags indicate whether the user is > intending to read or write the HPT, and whether to return all entries > or only the "bolted" entries (those with the bolted bit, 0x10, set in > the first doubleword). > > This is intended for use in implementing qemu's savevm/loadvm and for > live migration. Therefore, on reads, the first pass returns information > about all HPTEs (or all bolted HPTEs). When the first pass reaches the > end of the HPT, it returns from the read. Subsequent reads only return > information about HPTEs that have changed since they were last read. > A read that finds no changed HPTEs in the HPT following where the last > read finished will return 0 bytes. > > The format of the data provides a simple run-length compression of the > invalid entries. Each block of data starts with a header that indicates > the index (position in the HPT, which is just an array), the number of > valid entries starting at that index (may be zero), and the number of > invalid entries following those valid entries. The valid entries, 16 > bytes each, follow the header. The invalid entries are not explicitly > represented. > > Signed-off-by: Paul Mackerras <paulus@xxxxxxxxx> > --- > v2: added comments, added reserved field in struct kvm_get_htab_fd > > Documentation/virtual/kvm/api.txt | 53 +++++ > arch/powerpc/include/asm/kvm_book3s_64.h | 22 ++ > arch/powerpc/include/asm/kvm_ppc.h | 2 + > arch/powerpc/include/uapi/asm/kvm.h | 25 +++ > arch/powerpc/kvm/book3s_64_mmu_hv.c | 344 ++++++++++++++++++++++++++++++ > arch/powerpc/kvm/book3s_hv.c | 12 -- > arch/powerpc/kvm/powerpc.c | 17 ++ > include/uapi/linux/kvm.h | 3 + > 8 files changed, 466 insertions(+), 12 deletions(-) > > diff --git a/Documentation/virtual/kvm/api.txt b/Documentation/virtual/kvm/api.txt > index 6671fdc..33080ea 100644 > --- a/Documentation/virtual/kvm/api.txt > +++ b/Documentation/virtual/kvm/api.txt > @@ -2071,6 +2071,59 @@ KVM_S390_INT_EXTERNAL_CALL (vcpu) - sigp external call; source cpu in parm > > Note that the vcpu ioctl is asynchronous to vcpu execution. > > +4.78 KVM_PPC_GET_HTAB_FD > + > +Capability: KVM_CAP_PPC_HTAB_FD > +Architectures: powerpc > +Type: vm ioctl > +Parameters: Pointer to struct kvm_get_htab_fd (in) > +Returns: file descriptor number (>= 0) on success, -1 on error > + > +This returns a file descriptor that can be used either to read out the > +entries in the guest's hashed page table (HPT), or to write entries to > +initialize the HPT. The returned fd can only be written to if the > +KVM_GET_HTAB_WRITE bit is set in the flags field of the argument, and > +can only be read if that bit is clear. The argument struct looks like > +this: > + > +/* For KVM_PPC_GET_HTAB_FD */ > +struct kvm_get_htab_fd { > + __u64 flags; > + __u64 start_index; Documentation is out of sync :). Applied all 3 with fixed documentation. Alex -- 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