qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] kvm: x86: Add support for -machine split-lock-a


From: Hu, Robert
Subject: Re: [Qemu-devel] [PATCH] kvm: x86: Add support for -machine split-lock-ac
Date: Thu, 5 Jul 2018 08:45:51 +0000


Best Regards,
Robert Hoo

> -----Original Message-----
> From: Paolo Bonzini <address@hidden>
> Sent: Wednesday, July 4, 2018 21:39
> To: Liu, Jingqi <address@hidden>
> Cc: address@hidden; address@hidden; address@hidden; qemu-
> address@hidden; Wang, Wei W <address@hidden>; Hu, Robert
> <address@hidden>
> Subject: Re: [PATCH] kvm: x86: Add support for -machine split-lock-ac
> 
> On 04/07/2018 15:12, Jingqi Liu wrote:
> > Add the option split-lock-ac to control whether the #AC exception is
> > generated for split locked accesses, which is introduced for the
> > machine, there is an example to enable it:
> > -machine split-lock-ac=on
> > It is disabled on default.
> >
> > When bit 29 of the MSR (33H) is set, the processor causes an #AC
> > exception to be issued instead of suppressing LOCK on bus(during split
> > lock access).
> 
> This should be a CPU feature, not a machine feature.  As mentioned in the
> review of the kernel patch, please work with Robert to use the same
> infrastructure for both MSR_TEST_CTL and MSR_IA32_ARCH_CAPABILITIES.
> 
> (Robert, does IceLake have this feature?  If so, we cannot create the CPU 
> model
> until everything is in place).

[Robert Hoo] 
Hi Paolo,
This is not an Icelake  feature.
> 
> BTW, why is the availability of the feature not exposed with a CPUID bit?  It
> doesn't make much sense.
> 
> Paolo
> 
> > Signed-off-by: Jingqi Liu <address@hidden>
> > ---
> >  accel/kvm/kvm-all.c       | 10 ++++++++++
> >  hw/core/machine.c         | 19 +++++++++++++++++++
> >  include/hw/boards.h       |  1 +
> >  linux-headers/linux/kvm.h |  1 +
> >  qemu-options.hx           |  3 +++
> >  5 files changed, 34 insertions(+)
> >
> > diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c index
> > eb7db92..e960a4d 100644
> > --- a/accel/kvm/kvm-all.c
> > +++ b/accel/kvm/kvm-all.c
> > @@ -1699,6 +1699,16 @@ static int kvm_init(MachineState *ms)
> >
> >      s->sync_mmu = !!kvm_vm_check_extension(kvm_state,
> > KVM_CAP_SYNC_MMU);
> >
> > +    if (ms->split_lock_ac &&
> > +        kvm_check_extension(s, KVM_CAP_X86_SPLIT_LOCK_AC)) {
> > +        ret = kvm_vm_enable_cap(s, KVM_CAP_X86_SPLIT_LOCK_AC, 0);
> > +        if (ret) {
> > +            fprintf(stderr, "Could not enable the feature that #AC 
> > exception"
> > +                    "will be generated for split lock accesses!\n");
> > +            goto err;
> > +        }
> > +    }
> > +
> >      return 0;
> >
> >  err:
> > diff --git a/hw/core/machine.c b/hw/core/machine.c index
> > 617e5f8..e054119 100644
> > --- a/hw/core/machine.c
> > +++ b/hw/core/machine.c
> > @@ -350,6 +350,22 @@ static void machine_set_memory_encryption(Object
> *obj, const char *value,
> >      ms->memory_encryption = g_strdup(value);  }
> >
> > +static void machine_set_split_lock_ac(Object *obj, bool value,
> > +                                      Error **errp) {
> > +    MachineState *ms = MACHINE(obj);
> > +
> > +    ms->split_lock_ac = value;
> > +}
> > +
> > +static bool machine_get_split_lock_ac(Object *obj, Error **errp) {
> > +    MachineState *ms = MACHINE(obj);
> > +
> > +    return ms->split_lock_ac;
> > +}
> > +
> > +
> >  void machine_class_allow_dynamic_sysbus_dev(MachineClass *mc, const
> > char *type)  {
> >      strList *item = g_new0(strList, 1); @@ -634,6 +650,9 @@ static
> > void machine_class_init(ObjectClass *oc, void *data)
> >          &error_abort);
> >      object_class_property_set_description(oc, "memory-encryption",
> >          "Set memory encyption object to use", &error_abort);
> > +    object_class_property_add_bool(oc, "split-lock-ac",
> > +        machine_get_split_lock_ac, machine_set_split_lock_ac,
> > +        &error_abort);
> >  }
> >
> >  static void machine_class_base_init(ObjectClass *oc, void *data) diff
> > --git a/include/hw/boards.h b/include/hw/boards.h index
> > 79069dd..9c1e2c0 100644
> > --- a/include/hw/boards.h
> > +++ b/include/hw/boards.h
> > @@ -256,6 +256,7 @@ struct MachineState {
> >      bool suppress_vmdesc;
> >      bool enforce_config_section;
> >      bool enable_graphics;
> > +    bool split_lock_ac;
> >      char *memory_encryption;
> >      DeviceMemoryState *device_memory;
> >
> > diff --git a/linux-headers/linux/kvm.h b/linux-headers/linux/kvm.h
> > index 98f389a..4bfa879 100644
> > --- a/linux-headers/linux/kvm.h
> > +++ b/linux-headers/linux/kvm.h
> > @@ -949,6 +949,7 @@ struct kvm_ppc_resize_hpt {  #define
> > KVM_CAP_GET_MSR_FEATURES 153  #define KVM_CAP_HYPERV_EVENTFD
> 154
> > #define KVM_CAP_HYPERV_TLBFLUSH 155
> > +#define KVM_CAP_X86_SPLIT_LOCK_AC 156
> >
> >  #ifdef KVM_CAP_IRQ_ROUTING
> >
> > diff --git a/qemu-options.hx b/qemu-options.hx index 81b1e99..935cefe
> > 100644
> > --- a/qemu-options.hx
> > +++ b/qemu-options.hx
> > @@ -44,6 +44,7 @@ DEF("machine", HAS_ARG, QEMU_OPTION_machine, \
> >      "                nvdimm=on|off controls NVDIMM support (default=off)\n"
> >      "                enforce-config-section=on|off enforce configuration 
> > section
> migration (default=off)\n"
> >      "                s390-squash-mcss=on|off (deprecated) controls support 
> > for
> squashing into default css (default=off)\n"
> > +    "                split-lock-ac=on|off controls support #AC exception 
> > for split
> locked accesses (default=off)\n"
> >      "                address@hidden memory encryption object to use
> (default=none)\n",
> >      QEMU_ARCH_ALL)
> >  STEXI
> > @@ -113,6 +114,8 @@ NOTE: this parameter is deprecated. Please use
> > @option{-global}  @address@hidden|off}
> instead.
> >  @item address@hidden
> >  Memory encryption object to use. The default is none.
> > address@hidden split-lock-ac=on|off
> > +Enables or disables #AC exception for split locked accesses.
> >  @end table
> >  ETEXI
> >
> >


reply via email to

[Prev in Thread] Current Thread [Next in Thread]