On Wed, 20 Jan 2021 11:24:45 +1100
David Gibson <da...@gibson.dropbear.id.au> wrote:

> On Tue, Jan 19, 2021 at 05:58:24PM -0300, Daniel Henrique Barboza wrote:
> > Commit 006e9d361869 added warning messages for cap-cfpc, cap-ibs and
> > cap-sbbc when enabled under TCG. Commit 8ff43ee404d3 did the same thing
> > when introducing cap-ccf-assist.
> > 
> > These warning messages, although benign to the machine launch, can make
> > users a bit confused. E.g:
> > 
> > $ sudo ./ppc64-softmmu/qemu-system-ppc64
> > qemu-system-ppc64: warning: TCG doesn't support requested feature, 
> > cap-cfpc=workaround
> > qemu-system-ppc64: warning: TCG doesn't support requested feature, 
> > cap-sbbc=workaround
> > qemu-system-ppc64: warning: TCG doesn't support requested feature, 
> > cap-ibs=workaround
> > qemu-system-ppc64: warning: TCG doesn't support requested feature, 
> > cap-ccf-assist=on
> > 
> > We're complaining about "TCG doesn't support requested feature" when the
> > user didn't request any of those caps in the command line.
> > 
> > Check if we're running with TCG and change the defaults in 
> > spapr_caps_init().
> > Note that this change doesn't impact backward compatibility or migration
> > to older QEMU versions because we never activated these caps with TCG
> > in the first place.
> 
> Nack.  Changing those capabilities changes guest visible properties of
> the guest environment.  Silently altering guest visible
> characteristics based on whether or not we're running with KVM is not
> acceptable (we did it in the past and it caused a lot of grief).
> 

I definitely agree with the nack, but I also agree with the
intention behind this patch. Since we know if a capability
was requested from the command line, the warning can be
restricted to this case with something like:

--- a/hw/ppc/spapr_caps.c
+++ b/hw/ppc/spapr_caps.c
@@ -243,7 +243,7 @@ static void cap_safe_cache_apply(SpaprMachineState *spapr, >
     ERRP_GUARD();
     uint8_t kvm_val =  kvmppc_get_cap_safe_cache();
 
-    if (tcg_enabled() && val) {
+    if (tcg_enabled() && val && spapr->cmd_line_caps[SPAPR_CAP_CFPC]) {
         /* TCG only supports broken, allow other values and print a warning */
         warn_report("TCG doesn't support requested feature, cap-cfpc=%s",
                     cap_cfpc_possible.vals[val]);

A further improvement would be to only issue these warnings at
machine init instead of printing them again and again at each
reboot. This should be possible in spapr_caps_init() because
the accelerator has been set and the capabilities have been
parsed already.

> > 
> > Signed-off-by: Daniel Henrique Barboza <danielhb...@gmail.com>
> > ---
> >  hw/ppc/spapr_caps.c | 15 +++++++++++++++
> >  1 file changed, 15 insertions(+)
> > 
> > diff --git a/hw/ppc/spapr_caps.c b/hw/ppc/spapr_caps.c
> > index 9341e9782a..53eea2b11e 100644
> > --- a/hw/ppc/spapr_caps.c
> > +++ b/hw/ppc/spapr_caps.c
> > @@ -781,6 +781,21 @@ void spapr_caps_init(SpaprMachineState *spapr)
> >      /* Compute the actual set of caps we should run with */
> >      default_caps = default_caps_with_cpu(spapr, MACHINE(spapr)->cpu_type);
> >  
> > +   /*
> > +    * These are KVM specific caps that TCG doesn't support, but will
> > +    * throw an warning if enabled by default (see 006e9d361869 and
> > +    * 8ff43ee404d3). This behavior can make the user wonder why a warning
> > +    * is being shown for caps that the user didn't enable in the
> > +    * command line.
> > +    *
> > +    * Disable them for TCG. */
> > +    if (tcg_enabled()) {
> > +        default_caps.caps[SPAPR_CAP_CFPC] = SPAPR_CAP_BROKEN;
> > +        default_caps.caps[SPAPR_CAP_SBBC] = SPAPR_CAP_BROKEN;
> > +        default_caps.caps[SPAPR_CAP_IBS] = SPAPR_CAP_BROKEN;
> > +        default_caps.caps[SPAPR_CAP_CCF_ASSIST] = SPAPR_CAP_BROKEN;
> > +    }
> > +
> >      for (i = 0; i < SPAPR_CAP_NUM; i++) {
> >          /* Store the defaults */
> >          spapr->def.caps[i] = default_caps.caps[i];
> 

Attachment: pgpWxUbNAqDDx.pgp
Description: OpenPGP digital signature

Reply via email to