Message ID | 1448321216.27481.7.camel@intel.com (mailing list archive) |
---|---|
State | Not Applicable, archived |
Headers | show |
On 11/23/2015 6:26 PM, Verma, Vishal L wrote: > On Fri, 2015-11-20 at 19:05 -0500, Linda Knippers wrote: >> When support for _FIT was added, the code presumed that the data >> returned by the _FIT method is identical to the NFIT table, which >> starts with an acpi_table_header. However, the _FIT is defined >> to return a data in the format of a series of NFIT type structure >> entries and as a method, has an acpi_object header rather tahn >> an acpi_table_header. >> >> To address the differences, explicitly save the acpi_table_header >> from the NFIT, since it is accessible through /sys, and change >> the nfit pointer in the acpi_desc structure to point to the >> table entries rather than the headers. >> >> Reported-by: Jeff Moyer (jmoyer@redhat.com> >> Signed-off-by: Linda Knippers <linda.knippers@hpe.com> >> --- >> drivers/acpi/nfit.c | 47 +++++++++++++++++++++++++++++++++++--------- >> --- >> drivers/acpi/nfit.h | 3 ++- >> 2 files changed, 37 insertions(+), 13 deletions(-) >> > > This patch looks good, but the fact that we're doing the header > processing earlier (before acpi_nfit_init) means that the nfit supplied > by the nfit_test framework (tools/testing/nvdimm/test) can no longer > have a header. The following patch fixes this. > > Apart from that, and the open question for patch 1, for the series, > > Reviewed-by: Vishal Verma <vishal.l.verma@intel.com> Thanks Vishal. I hope I've addressed your question on patch 1. I think patch 1 works as well as the original code did so if you have concerns about making the code more bullet proof in the face of buggy firmware, perhaps we can address that separately from this series. I would really like to see this series go in soon because since the hotplug code went in I can't run an upstream kernel on my hardware. -- ljk > > > > 8<----- > > From da2fd5730bc5125c72101a6b55b85fce97663e40 Mon Sep 17 00:00:00 2001 > From: Vishal Verma <vishal.l.verma@intel.com> > Date: Mon, 23 Nov 2015 15:41:00 -0700 > Subject: [PATCH] nfit_test: Fix nfit generation for test framework > > The hotplug fixes move header parsing to happen earlier, > and the way nfit_test calls into the nfit initialization code, > a header is no longer needed. Remove the header from the table > generated by nfit_test entirely. > > Signed-off-by: Vishal Verma <vishal.l.verma@intel.com> > --- > tools/testing/nvdimm/test/nfit.c | 46 ++++++++++++---------------------------- > 1 file changed, 14 insertions(+), 32 deletions(-) > > diff --git a/tools/testing/nvdimm/test/nfit.c b/tools/testing/nvdimm/test/nfit.c > index 40ab447..3f92d7f 100644 > --- a/tools/testing/nvdimm/test/nfit.c > +++ b/tools/testing/nvdimm/test/nfit.c > @@ -420,8 +420,7 @@ static struct nfit_test_resource *nfit_test_lookup(resource_size_t addr) > > static int nfit_test0_alloc(struct nfit_test *t) > { > - size_t nfit_size = sizeof(struct acpi_table_nfit) > - + sizeof(struct acpi_nfit_system_address) * NUM_SPA > + size_t nfit_size = sizeof(struct acpi_nfit_system_address) * NUM_SPA > + sizeof(struct acpi_nfit_memory_map) * NUM_MEM > + sizeof(struct acpi_nfit_control_region) * NUM_DCR > + sizeof(struct acpi_nfit_data_region) * NUM_BDW > @@ -471,8 +470,7 @@ static int nfit_test0_alloc(struct nfit_test *t) > > static int nfit_test1_alloc(struct nfit_test *t) > { > - size_t nfit_size = sizeof(struct acpi_table_nfit) > - + sizeof(struct acpi_nfit_system_address) > + size_t nfit_size = sizeof(struct acpi_nfit_system_address) > + sizeof(struct acpi_nfit_memory_map) > + sizeof(struct acpi_nfit_control_region); > > @@ -488,18 +486,6 @@ static int nfit_test1_alloc(struct nfit_test *t) > return 0; > } > > -static void nfit_test_init_header(struct acpi_table_nfit *nfit, size_t size) > -{ > - memcpy(nfit->header.signature, ACPI_SIG_NFIT, 4); > - nfit->header.length = size; > - nfit->header.revision = 1; > - memcpy(nfit->header.oem_id, "LIBND", 6); > - memcpy(nfit->header.oem_table_id, "TEST", 5); > - nfit->header.oem_revision = 1; > - memcpy(nfit->header.asl_compiler_id, "TST", 4); > - nfit->header.asl_compiler_revision = 1; > -} > - > static void nfit_test0_setup(struct nfit_test *t) > { > struct nvdimm_bus_descriptor *nd_desc; > @@ -513,14 +499,12 @@ static void nfit_test0_setup(struct nfit_test *t) > struct acpi_nfit_flush_address *flush; > unsigned int offset; > > - nfit_test_init_header(nfit_buf, size); > - > /* > * spa0 (interleave first half of dimm0 and dimm1, note storage > * does not actually alias the related block-data-window > * regions) > */ > - spa = nfit_buf + sizeof(struct acpi_table_nfit); > + spa = nfit_buf; > spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS; > spa->header.length = sizeof(*spa); > memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_PM), 16); > @@ -533,7 +517,7 @@ static void nfit_test0_setup(struct nfit_test *t) > * does not actually alias the related block-data-window > * regions) > */ > - spa = nfit_buf + sizeof(struct acpi_table_nfit) + sizeof(*spa); > + spa = nfit_buf + sizeof(*spa); > spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS; > spa->header.length = sizeof(*spa); > memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_PM), 16); > @@ -542,7 +526,7 @@ static void nfit_test0_setup(struct nfit_test *t) > spa->length = SPA1_SIZE; > > /* spa2 (dcr0) dimm0 */ > - spa = nfit_buf + sizeof(struct acpi_table_nfit) + sizeof(*spa) * 2; > + spa = nfit_buf + sizeof(*spa) * 2; > spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS; > spa->header.length = sizeof(*spa); > memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_DCR), 16); > @@ -551,7 +535,7 @@ static void nfit_test0_setup(struct nfit_test *t) > spa->length = DCR_SIZE; > > /* spa3 (dcr1) dimm1 */ > - spa = nfit_buf + sizeof(struct acpi_table_nfit) + sizeof(*spa) * 3; > + spa = nfit_buf + sizeof(*spa) * 3; > spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS; > spa->header.length = sizeof(*spa); > memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_DCR), 16); > @@ -560,7 +544,7 @@ static void nfit_test0_setup(struct nfit_test *t) > spa->length = DCR_SIZE; > > /* spa4 (dcr2) dimm2 */ > - spa = nfit_buf + sizeof(struct acpi_table_nfit) + sizeof(*spa) * 4; > + spa = nfit_buf + sizeof(*spa) * 4; > spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS; > spa->header.length = sizeof(*spa); > memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_DCR), 16); > @@ -569,7 +553,7 @@ static void nfit_test0_setup(struct nfit_test *t) > spa->length = DCR_SIZE; > > /* spa5 (dcr3) dimm3 */ > - spa = nfit_buf + sizeof(struct acpi_table_nfit) + sizeof(*spa) * 5; > + spa = nfit_buf + sizeof(*spa) * 5; > spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS; > spa->header.length = sizeof(*spa); > memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_DCR), 16); > @@ -578,7 +562,7 @@ static void nfit_test0_setup(struct nfit_test *t) > spa->length = DCR_SIZE; > > /* spa6 (bdw for dcr0) dimm0 */ > - spa = nfit_buf + sizeof(struct acpi_table_nfit) + sizeof(*spa) * 6; > + spa = nfit_buf + sizeof(*spa) * 6; > spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS; > spa->header.length = sizeof(*spa); > memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_BDW), 16); > @@ -587,7 +571,7 @@ static void nfit_test0_setup(struct nfit_test *t) > spa->length = DIMM_SIZE; > > /* spa7 (bdw for dcr1) dimm1 */ > - spa = nfit_buf + sizeof(struct acpi_table_nfit) + sizeof(*spa) * 7; > + spa = nfit_buf + sizeof(*spa) * 7; > spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS; > spa->header.length = sizeof(*spa); > memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_BDW), 16); > @@ -596,7 +580,7 @@ static void nfit_test0_setup(struct nfit_test *t) > spa->length = DIMM_SIZE; > > /* spa8 (bdw for dcr2) dimm2 */ > - spa = nfit_buf + sizeof(struct acpi_table_nfit) + sizeof(*spa) * 8; > + spa = nfit_buf + sizeof(*spa) * 8; > spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS; > spa->header.length = sizeof(*spa); > memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_BDW), 16); > @@ -605,7 +589,7 @@ static void nfit_test0_setup(struct nfit_test *t) > spa->length = DIMM_SIZE; > > /* spa9 (bdw for dcr3) dimm3 */ > - spa = nfit_buf + sizeof(struct acpi_table_nfit) + sizeof(*spa) * 9; > + spa = nfit_buf + sizeof(*spa) * 9; > spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS; > spa->header.length = sizeof(*spa); > memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_BDW), 16); > @@ -613,7 +597,7 @@ static void nfit_test0_setup(struct nfit_test *t) > spa->address = t->dimm_dma[3]; > spa->length = DIMM_SIZE; > > - offset = sizeof(struct acpi_table_nfit) + sizeof(*spa) * 10; > + offset = sizeof(*spa) * 10; > /* mem-region0 (spa0, dimm0) */ > memdev = nfit_buf + offset; > memdev->header.type = ACPI_NFIT_TYPE_MEMORY_MAP; > @@ -1106,9 +1090,7 @@ static void nfit_test1_setup(struct nfit_test *t) > struct acpi_nfit_control_region *dcr; > struct acpi_nfit_system_address *spa; > > - nfit_test_init_header(nfit_buf, size); > - > - offset = sizeof(struct acpi_table_nfit); > + offset = 0; > /* spa0 (flat range with no bdw aliasing) */ > spa = nfit_buf + offset; > spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS; > -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
T24gVHVlLCAyMDE1LTExLTI0IGF0IDExOjMxIC0wNTAwLCBMaW5kYSBLbmlwcGVycyB3cm90ZToN Cj4gDQo+IEkgd291bGQgcmVhbGx5IGxpa2UgdG8gc2VlIHRoaXMgc2VyaWVzIGdvIGluIHNvb24g YmVjYXVzZSBzaW5jZSB0aGUNCj4gaG90cGx1ZyBjb2RlIHdlbnQgaW4gSSBjYW4ndCBydW4gYW4g dXBzdHJlYW0ga2VybmVsIG9uIG15IGhhcmR3YXJlLg0KPiANCkFncmVlZCAtIEknbSBndWVzc2lu ZyBEYW4gd2lsbCBxdWV1ZSB0aGlzIGZvciB0aGUgbmV4dCAtcmMgcHVsbCByZXF1ZXN0Lg0KVGhh bmtzIGZvciB0aGUgZml4ZXMh -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/tools/testing/nvdimm/test/nfit.c b/tools/testing/nvdimm/test/nfit.c index 40ab447..3f92d7f 100644 --- a/tools/testing/nvdimm/test/nfit.c +++ b/tools/testing/nvdimm/test/nfit.c @@ -420,8 +420,7 @@ static struct nfit_test_resource *nfit_test_lookup(resource_size_t addr) static int nfit_test0_alloc(struct nfit_test *t) { - size_t nfit_size = sizeof(struct acpi_table_nfit) - + sizeof(struct acpi_nfit_system_address) * NUM_SPA + size_t nfit_size = sizeof(struct acpi_nfit_system_address) * NUM_SPA + sizeof(struct acpi_nfit_memory_map) * NUM_MEM + sizeof(struct acpi_nfit_control_region) * NUM_DCR + sizeof(struct acpi_nfit_data_region) * NUM_BDW @@ -471,8 +470,7 @@ static int nfit_test0_alloc(struct nfit_test *t) static int nfit_test1_alloc(struct nfit_test *t) { - size_t nfit_size = sizeof(struct acpi_table_nfit) - + sizeof(struct acpi_nfit_system_address) + size_t nfit_size = sizeof(struct acpi_nfit_system_address) + sizeof(struct acpi_nfit_memory_map) + sizeof(struct acpi_nfit_control_region); @@ -488,18 +486,6 @@ static int nfit_test1_alloc(struct nfit_test *t) return 0; } -static void nfit_test_init_header(struct acpi_table_nfit *nfit, size_t size) -{ - memcpy(nfit->header.signature, ACPI_SIG_NFIT, 4); - nfit->header.length = size; - nfit->header.revision = 1; - memcpy(nfit->header.oem_id, "LIBND", 6); - memcpy(nfit->header.oem_table_id, "TEST", 5); - nfit->header.oem_revision = 1; - memcpy(nfit->header.asl_compiler_id, "TST", 4); - nfit->header.asl_compiler_revision = 1; -} - static void nfit_test0_setup(struct nfit_test *t) { struct nvdimm_bus_descriptor *nd_desc; @@ -513,14 +499,12 @@ static void nfit_test0_setup(struct nfit_test *t) struct acpi_nfit_flush_address *flush; unsigned int offset; - nfit_test_init_header(nfit_buf, size); - /* * spa0 (interleave first half of dimm0 and dimm1, note storage * does not actually alias the related block-data-window * regions) */ - spa = nfit_buf + sizeof(struct acpi_table_nfit); + spa = nfit_buf; spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS; spa->header.length = sizeof(*spa); memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_PM), 16); @@ -533,7 +517,7 @@ static void nfit_test0_setup(struct nfit_test *t) * does not actually alias the related block-data-window * regions) */ - spa = nfit_buf + sizeof(struct acpi_table_nfit) + sizeof(*spa); + spa = nfit_buf + sizeof(*spa); spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS; spa->header.length = sizeof(*spa); memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_PM), 16); @@ -542,7 +526,7 @@ static void nfit_test0_setup(struct nfit_test *t) spa->length = SPA1_SIZE; /* spa2 (dcr0) dimm0 */ - spa = nfit_buf + sizeof(struct acpi_table_nfit) + sizeof(*spa) * 2; + spa = nfit_buf + sizeof(*spa) * 2; spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS; spa->header.length = sizeof(*spa); memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_DCR), 16); @@ -551,7 +535,7 @@ static void nfit_test0_setup(struct nfit_test *t) spa->length = DCR_SIZE; /* spa3 (dcr1) dimm1 */ - spa = nfit_buf + sizeof(struct acpi_table_nfit) + sizeof(*spa) * 3; + spa = nfit_buf + sizeof(*spa) * 3; spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS; spa->header.length = sizeof(*spa); memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_DCR), 16); @@ -560,7 +544,7 @@ static void nfit_test0_setup(struct nfit_test *t) spa->length = DCR_SIZE; /* spa4 (dcr2) dimm2 */ - spa = nfit_buf + sizeof(struct acpi_table_nfit) + sizeof(*spa) * 4; + spa = nfit_buf + sizeof(*spa) * 4; spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS; spa->header.length = sizeof(*spa); memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_DCR), 16); @@ -569,7 +553,7 @@ static void nfit_test0_setup(struct nfit_test *t) spa->length = DCR_SIZE; /* spa5 (dcr3) dimm3 */ - spa = nfit_buf + sizeof(struct acpi_table_nfit) + sizeof(*spa) * 5; + spa = nfit_buf + sizeof(*spa) * 5; spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS; spa->header.length = sizeof(*spa); memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_DCR), 16); @@ -578,7 +562,7 @@ static void nfit_test0_setup(struct nfit_test *t) spa->length = DCR_SIZE; /* spa6 (bdw for dcr0) dimm0 */ - spa = nfit_buf + sizeof(struct acpi_table_nfit) + sizeof(*spa) * 6; + spa = nfit_buf + sizeof(*spa) * 6; spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS; spa->header.length = sizeof(*spa); memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_BDW), 16); @@ -587,7 +571,7 @@ static void nfit_test0_setup(struct nfit_test *t) spa->length = DIMM_SIZE; /* spa7 (bdw for dcr1) dimm1 */ - spa = nfit_buf + sizeof(struct acpi_table_nfit) + sizeof(*spa) * 7; + spa = nfit_buf + sizeof(*spa) * 7; spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS; spa->header.length = sizeof(*spa); memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_BDW), 16); @@ -596,7 +580,7 @@ static void nfit_test0_setup(struct nfit_test *t) spa->length = DIMM_SIZE; /* spa8 (bdw for dcr2) dimm2 */ - spa = nfit_buf + sizeof(struct acpi_table_nfit) + sizeof(*spa) * 8; + spa = nfit_buf + sizeof(*spa) * 8; spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS; spa->header.length = sizeof(*spa); memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_BDW), 16); @@ -605,7 +589,7 @@ static void nfit_test0_setup(struct nfit_test *t) spa->length = DIMM_SIZE; /* spa9 (bdw for dcr3) dimm3 */ - spa = nfit_buf + sizeof(struct acpi_table_nfit) + sizeof(*spa) * 9; + spa = nfit_buf + sizeof(*spa) * 9; spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS; spa->header.length = sizeof(*spa); memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_BDW), 16); @@ -613,7 +597,7 @@ static void nfit_test0_setup(struct nfit_test *t) spa->address = t->dimm_dma[3]; spa->length = DIMM_SIZE; - offset = sizeof(struct acpi_table_nfit) + sizeof(*spa) * 10; + offset = sizeof(*spa) * 10; /* mem-region0 (spa0, dimm0) */ memdev = nfit_buf + offset; memdev->header.type = ACPI_NFIT_TYPE_MEMORY_MAP; @@ -1106,9 +1090,7 @@ static void nfit_test1_setup(struct nfit_test *t) struct acpi_nfit_control_region *dcr; struct acpi_nfit_system_address *spa; - nfit_test_init_header(nfit_buf, size); - - offset = sizeof(struct acpi_table_nfit); + offset = 0; /* spa0 (flat range with no bdw aliasing) */ spa = nfit_buf + offset; spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS;