From patchwork Mon Nov 23 23:26:56 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: "Verma, Vishal L" X-Patchwork-Id: 7687001 Return-Path: X-Original-To: patchwork-linux-acpi@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id D5B28BF90C for ; Mon, 23 Nov 2015 23:27:15 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 0C2FE2088B for ; Mon, 23 Nov 2015 23:27:15 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 145D820861 for ; Mon, 23 Nov 2015 23:27:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753349AbbKWX1N (ORCPT ); Mon, 23 Nov 2015 18:27:13 -0500 Received: from mga11.intel.com ([192.55.52.93]:27388 "EHLO mga11.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753145AbbKWX1M (ORCPT ); Mon, 23 Nov 2015 18:27:12 -0500 Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga102.fm.intel.com with ESMTP; 23 Nov 2015 15:26:59 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.20,338,1444719600"; d="scan'208";a="857957833" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by orsmga002.jf.intel.com with ESMTP; 23 Nov 2015 15:26:57 -0800 Received: from fmsmsx101.amr.corp.intel.com (10.18.124.199) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.248.2; Mon, 23 Nov 2015 15:26:57 -0800 Received: from fmsmsx113.amr.corp.intel.com ([169.254.13.31]) by fmsmsx101.amr.corp.intel.com ([169.254.1.182]) with mapi id 14.03.0248.002; Mon, 23 Nov 2015 15:26:57 -0800 From: "Verma, Vishal L" To: "Williams, Dan J" , "linda.knippers@hpe.com" CC: "linux-nvdimm@lists.01.org" , "toshi.kani@hpe.com" , "jmoyer@redhat.com" , "linux-acpi@vger.kernel.org" , "elliott@hpe.com" , "Wysocki, Rafael J" Subject: Re: [PATCH 3/3] nfit: Adjust for different _FIT and NFIT headers Thread-Topic: [PATCH 3/3] nfit: Adjust for different _FIT and NFIT headers Thread-Index: AQHRI/CCHuSw2c55HUy7/QdAHj6RHJ6qyx0A Date: Mon, 23 Nov 2015 23:26:56 +0000 Message-ID: <1448321216.27481.7.camel@intel.com> References: <03fba073944c91810f89e321cb7fa024f8e9e2c1.1448045168.git.linda.knippers@hpe.com> In-Reply-To: <03fba073944c91810f89e321cb7fa024f8e9e2c1.1448045168.git.linda.knippers@hpe.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.232.112.62] Content-ID: <84962B2592295A42A661A66FA2DEEF44@intel.com> MIME-Version: 1.0 Sender: linux-acpi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org X-Spam-Status: No, score=-7.5 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP 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 > --- >  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 8<----- From da2fd5730bc5125c72101a6b55b85fce97663e40 Mon Sep 17 00:00:00 2001 From: Vishal Verma 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 ---  tools/testing/nvdimm/test/nfit.c | 46 ++++++++++++----------------------------  1 file changed, 14 insertions(+), 32 deletions(-) -- 2.5.0 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;