On Tue, 10 May 2022 14:36:14 +0200 Janosch Frank <frankja@xxxxxxxxxxxxx> wrote: > On 5/9/22 17:28, Claudio Imbrenda wrote: > > On Thu, 28 Apr 2022 13:00:58 +0000 > > Janosch Frank <frankja@xxxxxxxxxxxxx> wrote: > > > >> The dump API requires userspace to provide buffers into which we will > >> store data. The dump information added in this patch tells userspace > >> how big those buffers need to be. > >> > >> Signed-off-by: Janosch Frank <frankja@xxxxxxxxxxxxx> > >> --- > >> arch/s390/kvm/kvm-s390.c | 11 +++++++++++ > >> include/uapi/linux/kvm.h | 12 +++++++++++- > >> 2 files changed, 22 insertions(+), 1 deletion(-) > >> > >> diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c > >> index 23352d45a386..e327a5b8ef78 100644 > >> --- a/arch/s390/kvm/kvm-s390.c > >> +++ b/arch/s390/kvm/kvm-s390.c > >> @@ -2255,6 +2255,17 @@ static ssize_t kvm_s390_handle_pv_info(struct kvm_s390_pv_info *info) > >> > >> return len_min; > >> } > >> + case KVM_PV_INFO_DUMP: { > >> + len_min = sizeof(info->header) + sizeof(info->dump); > > > > so the output will have some zero-padded stuff at the end? > > In which situation? for example when I don't read the patch correctly (oops) > > > > >> + > >> + if (info->header.len_max < len_min) > >> + return -EINVAL; > >> + > >> + info->dump.dump_cpu_buffer_len = uv_info.guest_cpu_stor_len; > >> + info->dump.dump_config_mem_buffer_per_1m = uv_info.conf_dump_storage_state_len; > >> + info->dump.dump_config_finalize_len = uv_info.conf_dump_finalize_len; > >> + return len_min; > >> + } > >> default: > >> return -EINVAL; > >> } > >> diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h > >> index 59e4fb6c7a34..2eba89d7ec29 100644 > >> --- a/include/uapi/linux/kvm.h > >> +++ b/include/uapi/linux/kvm.h > >> @@ -1647,6 +1647,13 @@ struct kvm_s390_pv_unp { > >> > >> enum pv_cmd_info_id { > >> KVM_PV_INFO_VM, > >> + KVM_PV_INFO_DUMP, > >> +}; > >> + > >> +struct kvm_s390_pv_info_dump { > >> + __u64 dump_cpu_buffer_len; > >> + __u64 dump_config_mem_buffer_per_1m; > >> + __u64 dump_config_finalize_len; > >> }; > >> > >> struct kvm_s390_pv_info_vm { > >> @@ -1666,7 +1673,10 @@ struct kvm_s390_pv_info_header { > >> > >> struct kvm_s390_pv_info { > >> struct kvm_s390_pv_info_header header; > >> - struct kvm_s390_pv_info_vm vm; > >> + union { > >> + struct kvm_s390_pv_info_dump dump; > >> + struct kvm_s390_pv_info_vm vm; > >> + }; > >> }; > >> > >> enum pv_cmd_id { > > >