Message ID | 20221017083822.43118-10-frankja@linux.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | dump: Add arch section and s390x PV dump | expand |
On 10/17/22 10:38, Janosch Frank wrote: > Let's add a few bits of code which hide the new KVM PV dump API from > us via new functions. > > Signed-off-by: Janosch Frank <frankja@linux.ibm.com> > Reviewed-by: Janis Schoetterl-Glausch <scgl@linux.ibm.com> Reviewed-by: Steffen Eiden <seiden@linux.ibm.com> > --- > hw/s390x/pv.c | 51 +++++++++++++++++++++++++++++++++++++++++++ > include/hw/s390x/pv.h | 9 ++++++++ > 2 files changed, 60 insertions(+) > [ snip ]
Hi Janosch On Mon, Oct 17, 2022 at 12:53 PM Janosch Frank <frankja@linux.ibm.com> wrote: > Let's add a few bits of code which hide the new KVM PV dump API from > us via new functions. > > Signed-off-by: Janosch Frank <frankja@linux.ibm.com> > Reviewed-by: Janis Schoetterl-Glausch <scgl@linux.ibm.com> > --- > hw/s390x/pv.c | 51 +++++++++++++++++++++++++++++++++++++++++++ > include/hw/s390x/pv.h | 9 ++++++++ > 2 files changed, 60 insertions(+) > > diff --git a/hw/s390x/pv.c b/hw/s390x/pv.c > index 4c012f2eeb..728ba24547 100644 > --- a/hw/s390x/pv.c > +++ b/hw/s390x/pv.c > @@ -175,6 +175,57 @@ bool kvm_s390_pv_info_basic_valid(void) > return info_valid; > } > > +static int s390_pv_dump_cmd(uint64_t subcmd, uint64_t uaddr, uint64_t > gaddr, > + uint64_t len) > +{ > + struct kvm_s390_pv_dmp dmp = { > + .subcmd = subcmd, > + .buff_addr = uaddr, > + .buff_len = len, > + .gaddr = gaddr, > + }; > + int ret; > + > + ret = s390_pv_cmd(KVM_PV_DUMP, (void *)&dmp); > + if (ret) { > + error_report("KVM DUMP command %ld failed", subcmd); > + } > + return ret; > +} > + > +int kvm_s390_dump_cpu(S390CPU *cpu, void *buff) > +{ > + struct kvm_s390_pv_dmp dmp = { > + .subcmd = KVM_PV_DUMP_CPU, > + .buff_addr = (uint64_t)buff, > + .gaddr = 0, > + .buff_len = info_dump.dump_cpu_buffer_len, > + }; > + struct kvm_pv_cmd pv = { > + .cmd = KVM_PV_DUMP, > + .data = (uint64_t)&dmp, > + }; > + > + return kvm_vcpu_ioctl(CPU(cpu), KVM_S390_PV_CPU_COMMAND, &pv); > +} > + > +int kvm_s390_dump_init(void) > +{ > + return s390_pv_dump_cmd(KVM_PV_DUMP_INIT, 0, 0, 0); > +} > + > +int kvm_s390_dump_mem_state(uint64_t gaddr, size_t len, void *dest) > +{ > + return s390_pv_dump_cmd(KVM_PV_DUMP_CONFIG_STOR_STATE, (uint64_t)dest, > + gaddr, len); > +} > + > +int kvm_s390_dump_completion_data(void *buff) > +{ > + return s390_pv_dump_cmd(KVM_PV_DUMP_COMPLETE, (uint64_t)buff, 0, > + info_dump.dump_config_finalize_len); > +} > + > #define TYPE_S390_PV_GUEST "s390-pv-guest" > OBJECT_DECLARE_SIMPLE_TYPE(S390PVGuest, S390_PV_GUEST) > > diff --git a/include/hw/s390x/pv.h b/include/hw/s390x/pv.h > index e5ea0eca16..3164006674 100644 > --- a/include/hw/s390x/pv.h > +++ b/include/hw/s390x/pv.h > @@ -51,6 +51,10 @@ uint64_t kvm_s390_pv_dmp_get_size_cpu(void); > uint64_t kvm_s390_pv_dmp_get_size_mem_state(void); > uint64_t kvm_s390_pv_dmp_get_size_completion_data(void); > bool kvm_s390_pv_info_basic_valid(void); > +int kvm_s390_dump_init(void); > +int kvm_s390_dump_cpu(S390CPU *cpu, void *buff); > +int kvm_s390_dump_mem_state(uint64_t addr, size_t len, void *dest); > +int kvm_s390_dump_completion_data(void *buff); > #else /* CONFIG_KVM */ > static inline bool s390_is_pv(void) { return false; } > static inline int s390_pv_query_info(void) { return 0; } > @@ -66,6 +70,11 @@ static inline uint64_t > kvm_s390_pv_dmp_get_size_cpu(void) { return 0; } > static inline uint64_t kvm_s390_pv_dmp_get_size_mem_state(void) { return > 0; } > static inline uint64_t kvm_s390_pv_dmp_get_size_completion_data(void) { > return 0; } > static inline bool kvm_s390_pv_info_basic_valid(void) { return false; } > +static inline int kvm_s390_dump_init(void) { return 0; } > +static inline int kvm_s390_dump_cpu(S390CPU *cpu, void *buff, size_t len) > { return 0; } > +static inline int kvm_s390_dump_mem_state(uint64_t addr, size_t len, > + void *dest) { return 0; } > +static inline int kvm_s390_dump_completion_data(void *buff) { return 0; } > #endif /* CONFIG_KVM */ > To fix build issue: ../target/s390x/arch_dump.c ../target/s390x/arch_dump.c: In function ‘s390x_write_elf64_pv’: ../target/s390x/arch_dump.c:195:5: error: too few arguments to function ‘kvm_s390_dump_cpu’ 195 | kvm_s390_dump_cpu(cpu, ¬e->contents.dynamic); | ^~~~~~~~~~~~~~~~~ In file included from ../target/s390x/arch_dump.c:20: /builds/qemu-project/qemu/include/hw/s390x/pv.h:74:19: note: declared here 74 | static inline int kvm_s390_dump_cpu(S390CPU *cpu, void *buff, size_t len) { return 0; } | ^~~~~~~~~~~~~~~~~ https://gitlab.com/qemu-project/qemu/-/jobs/3218295751 Can you ack squashing this to this patch?: diff --git a/include/hw/s390x/pv.h b/include/hw/s390x/pv.h index 3164006674..9360aa1091 100644 --- a/include/hw/s390x/pv.h +++ b/include/hw/s390x/pv.h @@ -71,7 +71,7 @@ static inline uint64_t kvm_s390_pv_dmp_get_size_mem_state(void) { return 0; } static inline uint64_t kvm_s390_pv_dmp_get_size_completion_data(void) { return 0; } static inline bool kvm_s390_pv_info_basic_valid(void) { return false; } static inline int kvm_s390_dump_init(void) { return 0; } -static inline int kvm_s390_dump_cpu(S390CPU *cpu, void *buff, size_t len) { return 0; } +static inline int kvm_s390_dump_cpu(S390CPU *cpu, void *buff) { return 0; } static inline int kvm_s390_dump_mem_state(uint64_t addr, size_t len, void *dest) { return 0; } static inline int kvm_s390_dump_completion_data(void *buff) { return 0; } thanks > int s390_pv_kvm_init(ConfidentialGuestSupport *cgs, Error **errp); > -- > 2.34.1 > > >
On 10/24/22 20:36, Marc-André Lureau wrote: > Hi Janosch > > On Mon, Oct 17, 2022 at 12:53 PM Janosch Frank <frankja@linux.ibm.com> > wrote: > [...] >> diff --git a/include/hw/s390x/pv.h b/include/hw/s390x/pv.h >> index e5ea0eca16..3164006674 100644 >> --- a/include/hw/s390x/pv.h >> +++ b/include/hw/s390x/pv.h >> @@ -51,6 +51,10 @@ uint64_t kvm_s390_pv_dmp_get_size_cpu(void); >> uint64_t kvm_s390_pv_dmp_get_size_mem_state(void); >> uint64_t kvm_s390_pv_dmp_get_size_completion_data(void); >> bool kvm_s390_pv_info_basic_valid(void); >> +int kvm_s390_dump_init(void); >> +int kvm_s390_dump_cpu(S390CPU *cpu, void *buff); >> +int kvm_s390_dump_mem_state(uint64_t addr, size_t len, void *dest); >> +int kvm_s390_dump_completion_data(void *buff); >> #else /* CONFIG_KVM */ >> static inline bool s390_is_pv(void) { return false; } >> static inline int s390_pv_query_info(void) { return 0; } >> @@ -66,6 +70,11 @@ static inline uint64_t >> kvm_s390_pv_dmp_get_size_cpu(void) { return 0; } >> static inline uint64_t kvm_s390_pv_dmp_get_size_mem_state(void) { return >> 0; } >> static inline uint64_t kvm_s390_pv_dmp_get_size_completion_data(void) { >> return 0; } >> static inline bool kvm_s390_pv_info_basic_valid(void) { return false; } >> +static inline int kvm_s390_dump_init(void) { return 0; } >> +static inline int kvm_s390_dump_cpu(S390CPU *cpu, void *buff, size_t len) >> { return 0; } >> +static inline int kvm_s390_dump_mem_state(uint64_t addr, size_t len, >> + void *dest) { return 0; } >> +static inline int kvm_s390_dump_completion_data(void *buff) { return 0; } >> #endif /* CONFIG_KVM */ >> > > > To fix build issue: > ../target/s390x/arch_dump.c > ../target/s390x/arch_dump.c: In function ‘s390x_write_elf64_pv’: > ../target/s390x/arch_dump.c:195:5: error: too few arguments to > function ‘kvm_s390_dump_cpu’ > 195 | kvm_s390_dump_cpu(cpu, ¬e->contents.dynamic); > | ^~~~~~~~~~~~~~~~~ > In file included from ../target/s390x/arch_dump.c:20: > /builds/qemu-project/qemu/include/hw/s390x/pv.h:74:19: note: declared here > 74 | static inline int kvm_s390_dump_cpu(S390CPU *cpu, void *buff, > size_t len) { return 0; } > | ^~~~~~~~~~~~~~~~~ > > https://gitlab.com/qemu-project/qemu/-/jobs/3218295751 > > Can you ack squashing this to this patch?: > Ack
diff --git a/hw/s390x/pv.c b/hw/s390x/pv.c index 4c012f2eeb..728ba24547 100644 --- a/hw/s390x/pv.c +++ b/hw/s390x/pv.c @@ -175,6 +175,57 @@ bool kvm_s390_pv_info_basic_valid(void) return info_valid; } +static int s390_pv_dump_cmd(uint64_t subcmd, uint64_t uaddr, uint64_t gaddr, + uint64_t len) +{ + struct kvm_s390_pv_dmp dmp = { + .subcmd = subcmd, + .buff_addr = uaddr, + .buff_len = len, + .gaddr = gaddr, + }; + int ret; + + ret = s390_pv_cmd(KVM_PV_DUMP, (void *)&dmp); + if (ret) { + error_report("KVM DUMP command %ld failed", subcmd); + } + return ret; +} + +int kvm_s390_dump_cpu(S390CPU *cpu, void *buff) +{ + struct kvm_s390_pv_dmp dmp = { + .subcmd = KVM_PV_DUMP_CPU, + .buff_addr = (uint64_t)buff, + .gaddr = 0, + .buff_len = info_dump.dump_cpu_buffer_len, + }; + struct kvm_pv_cmd pv = { + .cmd = KVM_PV_DUMP, + .data = (uint64_t)&dmp, + }; + + return kvm_vcpu_ioctl(CPU(cpu), KVM_S390_PV_CPU_COMMAND, &pv); +} + +int kvm_s390_dump_init(void) +{ + return s390_pv_dump_cmd(KVM_PV_DUMP_INIT, 0, 0, 0); +} + +int kvm_s390_dump_mem_state(uint64_t gaddr, size_t len, void *dest) +{ + return s390_pv_dump_cmd(KVM_PV_DUMP_CONFIG_STOR_STATE, (uint64_t)dest, + gaddr, len); +} + +int kvm_s390_dump_completion_data(void *buff) +{ + return s390_pv_dump_cmd(KVM_PV_DUMP_COMPLETE, (uint64_t)buff, 0, + info_dump.dump_config_finalize_len); +} + #define TYPE_S390_PV_GUEST "s390-pv-guest" OBJECT_DECLARE_SIMPLE_TYPE(S390PVGuest, S390_PV_GUEST) diff --git a/include/hw/s390x/pv.h b/include/hw/s390x/pv.h index e5ea0eca16..3164006674 100644 --- a/include/hw/s390x/pv.h +++ b/include/hw/s390x/pv.h @@ -51,6 +51,10 @@ uint64_t kvm_s390_pv_dmp_get_size_cpu(void); uint64_t kvm_s390_pv_dmp_get_size_mem_state(void); uint64_t kvm_s390_pv_dmp_get_size_completion_data(void); bool kvm_s390_pv_info_basic_valid(void); +int kvm_s390_dump_init(void); +int kvm_s390_dump_cpu(S390CPU *cpu, void *buff); +int kvm_s390_dump_mem_state(uint64_t addr, size_t len, void *dest); +int kvm_s390_dump_completion_data(void *buff); #else /* CONFIG_KVM */ static inline bool s390_is_pv(void) { return false; } static inline int s390_pv_query_info(void) { return 0; } @@ -66,6 +70,11 @@ static inline uint64_t kvm_s390_pv_dmp_get_size_cpu(void) { return 0; } static inline uint64_t kvm_s390_pv_dmp_get_size_mem_state(void) { return 0; } static inline uint64_t kvm_s390_pv_dmp_get_size_completion_data(void) { return 0; } static inline bool kvm_s390_pv_info_basic_valid(void) { return false; } +static inline int kvm_s390_dump_init(void) { return 0; } +static inline int kvm_s390_dump_cpu(S390CPU *cpu, void *buff, size_t len) { return 0; } +static inline int kvm_s390_dump_mem_state(uint64_t addr, size_t len, + void *dest) { return 0; } +static inline int kvm_s390_dump_completion_data(void *buff) { return 0; } #endif /* CONFIG_KVM */ int s390_pv_kvm_init(ConfidentialGuestSupport *cgs, Error **errp);