On Mon, 16 May 2022 09:08:15 +0000 Janosch Frank <frankja@xxxxxxxxxxxxx> wrote: > The capability indicates dump support for protected VMs. > > Signed-off-by: Janosch Frank <frankja@xxxxxxxxxxxxx> > --- > arch/s390/kvm/kvm-s390.c | 20 ++++++++++++++++++++ > include/uapi/linux/kvm.h | 1 + > 2 files changed, 21 insertions(+) > > diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c > index c0c848c84552..1d65235ed3d3 100644 > --- a/arch/s390/kvm/kvm-s390.c > +++ b/arch/s390/kvm/kvm-s390.c > @@ -606,6 +606,26 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext) > case KVM_CAP_S390_PROTECTED: > r = is_prot_virt_host(); > break; > + case KVM_CAP_S390_PROTECTED_DUMP: { > + u64 pv_cmds_dump[] = { > + BIT_UVC_CMD_DUMP_INIT, > + BIT_UVC_CMD_DUMP_CONFIG_STOR_STATE, > + BIT_UVC_CMD_DUMP_CPU, > + BIT_UVC_CMD_DUMP_COMPLETE, > + }; > + int i; > + > + if (!is_prot_virt_host()) > + return 0; we don't return usually in this function, can you use break instad? or maybe even something simpler like this: r = is_prot_virt_host(); for (i = 0; r && i < ARRAY_SIZE(...); i++) r = r && test_bit_inv(...); > + > + r = 1; > + for (i = 0; i < ARRAY_SIZE(pv_cmds_dump); i++) { > + if (!test_bit_inv(pv_cmds_dump[i], > + (unsigned long *)&uv_info.inst_calls_list)) > + return 0; > + } > + break; > + } > default: > r = 0; > } > diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h > index 0a8b57654ea7..ba8f2985a8c0 100644 > --- a/include/uapi/linux/kvm.h > +++ b/include/uapi/linux/kvm.h > @@ -1152,6 +1152,7 @@ struct kvm_ppc_resize_hpt { > #define KVM_CAP_DISABLE_QUIRKS2 213 > /* #define KVM_CAP_VM_TSC_CONTROL 214 */ > #define KVM_CAP_SYSTEM_EVENT_DATA 215 > +#define KVM_CAP_S390_PROTECTED_DUMP 216 > > #ifdef KVM_CAP_IRQ_ROUTING >