On Sun, Oct 11, 2015 at 11:52:58AM +0800, Xiao Guangrong wrote: > Check if the input Arg3 is valid then store it into dsm_in if needed > > We only do the save on NVDIMM device since we are not going to support any > function on root device > > Signed-off-by: Xiao Guangrong <guangrong.xiao@xxxxxxxxxxxxxxx> > --- > hw/mem/nvdimm/acpi.c | 21 ++++++++++++++++++++- > 1 file changed, 20 insertions(+), 1 deletion(-) > > diff --git a/hw/mem/nvdimm/acpi.c b/hw/mem/nvdimm/acpi.c > index d9fa0fd..3b9399c 100644 > --- a/hw/mem/nvdimm/acpi.c > +++ b/hw/mem/nvdimm/acpi.c > @@ -442,7 +442,7 @@ static void build_nvdimm_devices(NVDIMMState *state, GSList *device_list, > int slot = object_property_get_int(OBJECT(nvdimm), DIMM_SLOT_PROP, > NULL); > uint32_t handle = nvdimm_slot_to_handle(slot); > - Aml *dev, *method; > + Aml *dev, *method, *ifctx; > > dev = aml_device("NV%02X", slot); > aml_append(dev, aml_name_decl("_ADR", aml_int(handle))); > @@ -452,6 +452,24 @@ static void build_nvdimm_devices(NVDIMMState *state, GSList *device_list, > method = aml_method("_DSM", 4); > { > SAVE_ARG012_HANDLE_LOCK(method, aml_int(handle)); > + > + /* Arg3 is passed as Package and it has one element? */ > + ifctx = aml_if(aml_and(aml_equal(aml_object_type(aml_arg(3)), > + aml_int(4)), > + aml_equal(aml_sizeof(aml_arg(3)), aml_arg(3) is used many times below. Pls give it a name that makes sense (not arg3! what is it for?) > + aml_int(1)))); Pls document AML constants used. Like this: ifctx = aml_if(aml_and(aml_equal(aml_object_type(aml_arg(3)), aml_int(4 /* 4 - Package */) ), aml_equal(aml_sizeof(aml_arg(3)), aml_int(1)))); > + { > + /* Local0 = Index(Arg3, 0) */ > + aml_append(ifctx, aml_store(aml_index(aml_arg(3), aml_int(0)), > + aml_local(0))); > + /* Local3 = DeRefOf(Local0) */ > + aml_append(ifctx, aml_store(aml_derefof(aml_local(0)), > + aml_local(3))); > + /* ARG3 = Local3 */ > + aml_append(ifctx, aml_store(aml_local(3), aml_name("ARG3"))); This isn't a good way to comment things: you are just adding ASL before the equivalent C. Pls document what's going on. > + } > + aml_append(method, ifctx); > + > NOTIFY_AND_RETURN_UNLOCK(method); > } > aml_append(dev, method); > @@ -534,6 +552,7 @@ static void nvdimm_build_acpi_devices(NVDIMMState *state, GSList *device_list, > method = aml_method("_DSM", 4); > { > SAVE_ARG012_HANDLE_LOCK(method, aml_int(0)); > + /* no command we support on ROOT device has Arg3. */ > NOTIFY_AND_RETURN_UNLOCK(method); > } > aml_append(dev, method); > -- > 1.8.3.1 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html