On 09.12.2011, at 12:23, Carsten Otte wrote: > This patch exports the s390 SIE hardware control block to userspace > via the mapping of the vcpu file descriptor. In order to do so, > a new arch callback named kvm_arch_vcpu_fault is introduced for all > architectures. It allows to map architecture specific pages. > > Signed-off-by: Carsten Otte <cotte@xxxxxxxxxx> > --- > --- > Documentation/virtual/kvm/api.txt | 5 +++++ > arch/ia64/kvm/kvm-ia64.c | 5 +++++ > arch/powerpc/kvm/powerpc.c | 5 +++++ > arch/s390/kvm/kvm-s390.c | 13 +++++++++++++ > arch/x86/kvm/x86.c | 5 +++++ > include/linux/kvm.h | 1 + > include/linux/kvm_host.h | 1 + > virt/kvm/kvm_main.c | 2 +- > 8 files changed, 36 insertions(+), 1 deletion(-) > > --- a/Documentation/virtual/kvm/api.txt > +++ b/Documentation/virtual/kvm/api.txt > @@ -218,6 +218,11 @@ allocation of vcpu ids. For example, if > single-threaded guest vcpus, it should make all vcpu ids be a multiple > of the number of vcpus per vcore. > > +For virtual cpus that have been created with S390 user controlled virtual > +machines, the resulting vcpu fd can be memory mapped at page offset > +KVM_S390_SIE_PAGE_OFFSET in order to obtain a memory map of the virtual > +cpu's hardware control block. > + > 4.8 KVM_GET_DIRTY_LOG (vm ioctl) > > Capability: basic > --- a/arch/ia64/kvm/kvm-ia64.c > +++ b/arch/ia64/kvm/kvm-ia64.c > @@ -1566,6 +1566,11 @@ out: > return r; > } > > +int kvm_arch_vcpu_fault(struct kvm_vcpu *vcpu, struct vm_fault *vmf) > +{ > + return VM_FAULT_SIGBUS; > +} > + > int kvm_arch_prepare_memory_region(struct kvm *kvm, > struct kvm_memory_slot *memslot, > struct kvm_memory_slot old, > --- a/arch/powerpc/kvm/powerpc.c > +++ b/arch/powerpc/kvm/powerpc.c > @@ -659,6 +659,11 @@ out: > return r; > } > > +int kvm_arch_vcpu_fault(struct kvm_vcpu *vcpu, struct vm_fault *vmf) > +{ > + return VM_FAULT_SIGBUS; > +} > + > static int kvm_vm_ioctl_get_pvinfo(struct kvm_ppc_pvinfo *pvinfo) > { > u32 inst_lis = 0x3c000000; > --- a/arch/s390/kvm/kvm-s390.c > +++ b/arch/s390/kvm/kvm-s390.c > @@ -769,6 +769,19 @@ long kvm_arch_vcpu_ioctl(struct file *fi > return r; > } > > +int kvm_arch_vcpu_fault(struct kvm_vcpu *vcpu, struct vm_fault *vmf) > +{ > +#ifdef CONFIG_KVM_UCONTROL > + if ((vmf->pgoff == KVM_S390_SIE_PAGE_OFFSET) > + && (kvm_is_ucontrol(vcpu->kvm))) { > + vmf->page = virt_to_page(vcpu->arch.sie_block); > + get_page(vmf->page); > + return 0; > + } > +#endif > + return VM_FAULT_SIGBUS; > +} > + > /* Section: memory related */ > int kvm_arch_prepare_memory_region(struct kvm *kvm, > struct kvm_memory_slot *memslot, > --- a/arch/x86/kvm/x86.c > +++ b/arch/x86/kvm/x86.c > @@ -2790,6 +2790,11 @@ out: > return r; > } > > +int kvm_arch_vcpu_fault(struct kvm_vcpu *vcpu, struct vm_fault *vmf) > +{ > + return VM_FAULT_SIGBUS; > +} > + > static int kvm_vm_ioctl_set_tss_addr(struct kvm *kvm, unsigned long addr) > { > int ret; > --- a/include/linux/kvm.h > +++ b/include/linux/kvm.h > @@ -439,6 +439,7 @@ struct kvm_ppc_pvinfo { > > #define KVM_VM_REGULAR 0 > #define KVM_VM_UCONTROL 1 > +#define KVM_S390_SIE_PAGE_OFFSET 1 Can we please make these a global number space? I don't want to have any user space code "accidently" call this mmap while it's trying to find out if it can map the PIO page. We already have a global number space for CAPs. 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