Message ID | 20190227043008.12059-1-sjitindarsingh@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [QEMU-PPC,v2,1/4] target/ppc/spapr: Add SPAPR_CAP_LARGE_DECREMENTER | expand |
On Wed, Feb 27, 2019 at 03:30:05PM +1100, Suraj Jitindar Singh wrote: > Add spapr_cap SPAPR_CAP_LARGE_DECREMENTER to be used to control the > availability of the large decrementer for a guest. > > Signed-off-by: Suraj Jitindar Singh <sjitindarsingh@gmail.com> This series looks good now, except for one nit... > --- > hw/ppc/spapr.c | 2 ++ > hw/ppc/spapr_caps.c | 17 +++++++++++++++++ > include/hw/ppc/spapr.h | 5 ++++- > 3 files changed, 23 insertions(+), 1 deletion(-) > > diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c > index b6a571b6f1..acf62a2b9f 100644 > --- a/hw/ppc/spapr.c > +++ b/hw/ppc/spapr.c > @@ -2077,6 +2077,7 @@ static const VMStateDescription vmstate_spapr = { > &vmstate_spapr_irq_map, > &vmstate_spapr_cap_nested_kvm_hv, > &vmstate_spapr_dtb, > + &vmstate_spapr_cap_large_decr, > NULL > } > }; > @@ -4288,6 +4289,7 @@ static void spapr_machine_class_init(ObjectClass *oc, void *data) > smc->default_caps.caps[SPAPR_CAP_IBS] = SPAPR_CAP_BROKEN; > smc->default_caps.caps[SPAPR_CAP_HPT_MAXPAGESIZE] = 16; /* 64kiB */ > smc->default_caps.caps[SPAPR_CAP_NESTED_KVM_HV] = SPAPR_CAP_OFF; > + smc->default_caps.caps[SPAPR_CAP_LARGE_DECREMENTER] = 0; ... since this is now a boolean, it should use SPAPR_CAP_OFF / SPAPR_CAP_ON instead of bare 0 and 1.
On Wed, 2019-02-27 at 17:16 +1100, David Gibson wrote: > On Wed, Feb 27, 2019 at 03:30:05PM +1100, Suraj Jitindar Singh wrote: > > Add spapr_cap SPAPR_CAP_LARGE_DECREMENTER to be used to control the > > availability of the large decrementer for a guest. > > > > Signed-off-by: Suraj Jitindar Singh <sjitindarsingh@gmail.com> > > This series looks good now, except for one nit... > > > --- > > hw/ppc/spapr.c | 2 ++ > > hw/ppc/spapr_caps.c | 17 +++++++++++++++++ > > include/hw/ppc/spapr.h | 5 ++++- > > 3 files changed, 23 insertions(+), 1 deletion(-) > > > > diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c > > index b6a571b6f1..acf62a2b9f 100644 > > --- a/hw/ppc/spapr.c > > +++ b/hw/ppc/spapr.c > > @@ -2077,6 +2077,7 @@ static const VMStateDescription vmstate_spapr > > = { > > &vmstate_spapr_irq_map, > > &vmstate_spapr_cap_nested_kvm_hv, > > &vmstate_spapr_dtb, > > + &vmstate_spapr_cap_large_decr, > > NULL > > } > > }; > > @@ -4288,6 +4289,7 @@ static void > > spapr_machine_class_init(ObjectClass *oc, void *data) > > smc->default_caps.caps[SPAPR_CAP_IBS] = SPAPR_CAP_BROKEN; > > smc->default_caps.caps[SPAPR_CAP_HPT_MAXPAGESIZE] = 16; /* > > 64kiB */ > > smc->default_caps.caps[SPAPR_CAP_NESTED_KVM_HV] = > > SPAPR_CAP_OFF; > > + smc->default_caps.caps[SPAPR_CAP_LARGE_DECREMENTER] = 0; > > ... since this is now a boolean, it should use SPAPR_CAP_OFF / > SPAPR_CAP_ON instead of bare 0 and 1. True, do you want me to fix-up and resend? Or can you fix it when you apply? >
On Thu, Feb 28, 2019 at 10:16:00AM +1100, Suraj Jitindar Singh wrote: > On Wed, 2019-02-27 at 17:16 +1100, David Gibson wrote: > > On Wed, Feb 27, 2019 at 03:30:05PM +1100, Suraj Jitindar Singh wrote: > > > Add spapr_cap SPAPR_CAP_LARGE_DECREMENTER to be used to control the > > > availability of the large decrementer for a guest. > > > > > > Signed-off-by: Suraj Jitindar Singh <sjitindarsingh@gmail.com> > > > > This series looks good now, except for one nit... > > > > > --- > > > hw/ppc/spapr.c | 2 ++ > > > hw/ppc/spapr_caps.c | 17 +++++++++++++++++ > > > include/hw/ppc/spapr.h | 5 ++++- > > > 3 files changed, 23 insertions(+), 1 deletion(-) > > > > > > diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c > > > index b6a571b6f1..acf62a2b9f 100644 > > > --- a/hw/ppc/spapr.c > > > +++ b/hw/ppc/spapr.c > > > @@ -2077,6 +2077,7 @@ static const VMStateDescription vmstate_spapr > > > = { > > > &vmstate_spapr_irq_map, > > > &vmstate_spapr_cap_nested_kvm_hv, > > > &vmstate_spapr_dtb, > > > + &vmstate_spapr_cap_large_decr, > > > NULL > > > } > > > }; > > > @@ -4288,6 +4289,7 @@ static void > > > spapr_machine_class_init(ObjectClass *oc, void *data) > > > smc->default_caps.caps[SPAPR_CAP_IBS] = SPAPR_CAP_BROKEN; > > > smc->default_caps.caps[SPAPR_CAP_HPT_MAXPAGESIZE] = 16; /* > > > 64kiB */ > > > smc->default_caps.caps[SPAPR_CAP_NESTED_KVM_HV] = > > > SPAPR_CAP_OFF; > > > + smc->default_caps.caps[SPAPR_CAP_LARGE_DECREMENTER] = 0; > > > > ... since this is now a boolean, it should use SPAPR_CAP_OFF / > > SPAPR_CAP_ON instead of bare 0 and 1. > > True, do you want me to fix-up and resend? Or can you fix it when you > apply? Fix and resend, please.
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index b6a571b6f1..acf62a2b9f 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -2077,6 +2077,7 @@ static const VMStateDescription vmstate_spapr = { &vmstate_spapr_irq_map, &vmstate_spapr_cap_nested_kvm_hv, &vmstate_spapr_dtb, + &vmstate_spapr_cap_large_decr, NULL } }; @@ -4288,6 +4289,7 @@ static void spapr_machine_class_init(ObjectClass *oc, void *data) smc->default_caps.caps[SPAPR_CAP_IBS] = SPAPR_CAP_BROKEN; smc->default_caps.caps[SPAPR_CAP_HPT_MAXPAGESIZE] = 16; /* 64kiB */ smc->default_caps.caps[SPAPR_CAP_NESTED_KVM_HV] = SPAPR_CAP_OFF; + smc->default_caps.caps[SPAPR_CAP_LARGE_DECREMENTER] = 0; spapr_caps_add_properties(smc, &error_abort); smc->irq = &spapr_irq_xics; smc->dr_phb_enabled = true; diff --git a/hw/ppc/spapr_caps.c b/hw/ppc/spapr_caps.c index 64f98ae68d..3f90f5823e 100644 --- a/hw/ppc/spapr_caps.c +++ b/hw/ppc/spapr_caps.c @@ -390,6 +390,13 @@ static void cap_nested_kvm_hv_apply(sPAPRMachineState *spapr, } } +static void cap_large_decr_apply(sPAPRMachineState *spapr, + uint8_t val, Error **errp) +{ + if (val) + error_setg(errp, "No large decrementer support, try cap-large-decr=off"); +} + sPAPRCapabilityInfo capability_table[SPAPR_CAP_NUM] = { [SPAPR_CAP_HTM] = { .name = "htm", @@ -468,6 +475,15 @@ sPAPRCapabilityInfo capability_table[SPAPR_CAP_NUM] = { .type = "bool", .apply = cap_nested_kvm_hv_apply, }, + [SPAPR_CAP_LARGE_DECREMENTER] = { + .name = "large-decr", + .description = "Allow Large Decrementer", + .index = SPAPR_CAP_LARGE_DECREMENTER, + .get = spapr_cap_get_bool, + .set = spapr_cap_set_bool, + .type = "bool", + .apply = cap_large_decr_apply, + }, }; static sPAPRCapabilities default_caps_with_cpu(sPAPRMachineState *spapr, @@ -596,6 +612,7 @@ SPAPR_CAP_MIG_STATE(cfpc, SPAPR_CAP_CFPC); SPAPR_CAP_MIG_STATE(sbbc, SPAPR_CAP_SBBC); SPAPR_CAP_MIG_STATE(ibs, SPAPR_CAP_IBS); SPAPR_CAP_MIG_STATE(nested_kvm_hv, SPAPR_CAP_NESTED_KVM_HV); +SPAPR_CAP_MIG_STATE(large_decr, SPAPR_CAP_LARGE_DECREMENTER); void spapr_caps_init(sPAPRMachineState *spapr) { diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h index 59073a7579..8efc5e0779 100644 --- a/include/hw/ppc/spapr.h +++ b/include/hw/ppc/spapr.h @@ -74,8 +74,10 @@ typedef enum { #define SPAPR_CAP_HPT_MAXPAGESIZE 0x06 /* Nested KVM-HV */ #define SPAPR_CAP_NESTED_KVM_HV 0x07 +/* Large Decrementer */ +#define SPAPR_CAP_LARGE_DECREMENTER 0x08 /* Num Caps */ -#define SPAPR_CAP_NUM (SPAPR_CAP_NESTED_KVM_HV + 1) +#define SPAPR_CAP_NUM (SPAPR_CAP_LARGE_DECREMENTER + 1) /* * Capability Values @@ -828,6 +830,7 @@ extern const VMStateDescription vmstate_spapr_cap_cfpc; extern const VMStateDescription vmstate_spapr_cap_sbbc; extern const VMStateDescription vmstate_spapr_cap_ibs; extern const VMStateDescription vmstate_spapr_cap_nested_kvm_hv; +extern const VMStateDescription vmstate_spapr_cap_large_decr; static inline uint8_t spapr_get_cap(sPAPRMachineState *spapr, int cap) {
Add spapr_cap SPAPR_CAP_LARGE_DECREMENTER to be used to control the availability of the large decrementer for a guest. Signed-off-by: Suraj Jitindar Singh <sjitindarsingh@gmail.com> --- hw/ppc/spapr.c | 2 ++ hw/ppc/spapr_caps.c | 17 +++++++++++++++++ include/hw/ppc/spapr.h | 5 ++++- 3 files changed, 23 insertions(+), 1 deletion(-)