@@ -122,6 +122,10 @@ struct mcck_volatile_info {
__u32 reserved;
};
+#define SIDAD_SIZE_MASK 0xff
+#define sidad_origin(sie_block) \
+ (sie_block->sidad & PAGE_MASK)
+
#define CPUSTAT_STOPPED 0x80000000
#define CPUSTAT_WAIT 0x10000000
#define CPUSTAT_ECALL_PEND 0x08000000
@@ -4436,7 +4436,7 @@ static long kvm_s390_guest_mem_op(struct kvm_vcpu *vcpu,
* block which has its own size limit
*/
if (kvm_s390_pv_is_protected(vcpu->kvm) &&
- mop->size > ((vcpu->arch.sie_block->sidad & 0x0f) + 1) * PAGE_SIZE)
+ mop->size > ((vcpu->arch.sie_block->sidad & SIDAD_SIZE_MASK) + 1) * PAGE_SIZE)
return -E2BIG;
if (!(mop->flags & KVM_S390_MEMOP_F_CHECK_ONLY)) {
@@ -4460,7 +4460,7 @@ static long kvm_s390_guest_mem_op(struct kvm_vcpu *vcpu,
}
if (kvm_s390_pv_is_protected(vcpu->kvm)) {
r = 0;
- if (copy_to_user(uaddr, (void *)vcpu->arch.sie_block->sidad +
+ if (copy_to_user(uaddr, (void *)sidad_origin(vcpu->arch.sie_block) +
(mop->gaddr & ~PAGE_MASK),
mop->size))
r = -EFAULT;
@@ -119,7 +119,7 @@ int kvm_s390_pv_destroy_cpu(struct kvm_vcpu *vcpu)
free_pages(vcpu->arch.pv.stor_base,
get_order(uv_info.guest_cpu_stor_len));
- free_page(vcpu->arch.sie_block->sidad);
+ free_page(sidad_origin(vcpu->arch.sie_block));
/* Clear cpu and vm handle */
memset(&vcpu->arch.sie_block->reserved10, 0,
sizeof(vcpu->arch.sie_block->reserved10));
Additionally I would need to use it in the other patches... Signed-off-by: Janosch Frank <frankja@linux.ibm.com> --- arch/s390/include/asm/kvm_host.h | 4 ++++ arch/s390/kvm/kvm-s390.c | 4 ++-- arch/s390/kvm/pv.c | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-)