From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754133AbcLICQB (ORCPT ); Thu, 8 Dec 2016 21:16:01 -0500 Received: from mga06.intel.com ([134.134.136.31]:30468 "EHLO mga06.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752524AbcLICP7 (ORCPT ); Thu, 8 Dec 2016 21:15:59 -0500 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.33,322,1477983600"; d="scan'208";a="910314258" From: "Zheng, Lv" To: "Williams, Dan J" CC: "Rafael J. Wysocki" , "Wysocki, Rafael J" , "Rafael J. Wysocki" , "Brown, Len" , Lv Zheng , "Linux Kernel Mailing List" , Linux ACPI , "Moore, Robert" , "linux-nvdimm@lists.01.org" Subject: RE: [PATCH 08/11] ACPICA: Tables: Back port acpi_get_table_with_size() and early_acpi_os_unmap_memory() from Linux kernel Thread-Topic: [PATCH 08/11] ACPICA: Tables: Back port acpi_get_table_with_size() and early_acpi_os_unmap_memory() from Linux kernel Thread-Index: AQHSStpukBumdG6xJkGeHqsAdttrKaD8xB8AgADLEoCAAGDkAIAA9/FQ//99UACAAIiW4A== Date: Fri, 9 Dec 2016 02:15:54 +0000 Message-ID: <1AE640813FDE7649BE1B193DEA596E886A2B23C3@SHSMSX101.ccr.corp.intel.com> References: <411c4b5987a902e037bf8c969513853dc960cc8a.1480490191.git.lv.zheng@intel.com> <1AE640813FDE7649BE1B193DEA596E886A2B2398@SHSMSX101.ccr.corp.intel.com> In-Reply-To: Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMDQxMDdiNGQtOGFiNi00NDQ4LWExMGUtM2Y5ZmYzOTExZTgyIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX0lDIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE1LjkuNi42IiwiVHJ1c3RlZExhYmVsSGFzaCI6ImJtXC90OFc5ajdCaHhJb05LcERhYmhvNWhkZExqUEJ3bHhESDNQTm5yYk9VPSJ9 x-ctpclassification: CTP_IC x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by mail.home.local id uB92G5TS025724 Hi, Dan > -----Original Message----- > From: linux-acpi-owner@vger.kernel.org [mailto:linux-acpi-owner@vger.kernel.org] On Behalf Of Dan > Williams > Sent: Friday, December 9, 2016 10:05 AM > To: Zheng, Lv > Cc: Rafael J. Wysocki ; Wysocki, Rafael J ; Rafael J. > Wysocki ; Brown, Len ; Lv Zheng ; Linux > Kernel Mailing List ; Linux ACPI ; Moore, > Robert ; linux-nvdimm@lists.01.org > Subject: Re: [PATCH 08/11] ACPICA: Tables: Back port acpi_get_table_with_size() and > early_acpi_os_unmap_memory() from Linux kernel > > On Thu, Dec 8, 2016 at 5:59 PM, Zheng, Lv wrote: > > Hi, Rafael and Dan > > > >> From: Dan Williams [mailto:dan.j.williams@intel.com] > >> Subject: Re: [PATCH 08/11] ACPICA: Tables: Back port acpi_get_table_with_size() and > >> early_acpi_os_unmap_memory() from Linux kernel > >> > >> On Thu, Dec 8, 2016 at 5:18 AM, Rafael J. Wysocki wrote: > >> > On Thu, Dec 8, 2016 at 2:11 AM, Dan Williams wrote: > >> >> On Tue, Nov 29, 2016 at 11:21 PM, Lv Zheng wrote: > >> >>> ACPICA commit cac6790954d4d752a083e6122220b8a22febcd07 > >> >>> > >> >>> This patch back ports Linux acpi_get_table_with_size() and > >> >>> early_acpi_os_unmap_memory() into ACPICA upstream to reduce divergences. > >> >>> > >> >>> The 2 APIs are used by Linux as table management APIs for long time, it > >> >>> contains a hidden logic that during the early stage, the mapped tables > >> >>> should be unmapped before the early stage ends. > >> >>> > >> >>> During the early stage, tables are handled by the following sequence: > >> >>> acpi_get_table_with_size(); > >> >>> parse the table > >> >>> early_acpi_os_unmap_memory(); > >> >>> During the late stage, tables are handled by the following sequence: > >> >>> acpi_get_table(); > >> >>> parse the table > >> >>> Linux uses acpi_gbl_permanent_mmap to distinguish the early stage and the > >> >>> late stage. > >> >>> > >> >>> The reasoning of introducing acpi_get_table_with_size() is: ACPICA will > >> >>> remember the early mapped pointer in acpi_get_table() and Linux isn't able to > >> >>> prevent ACPICA from using the wrong early mapped pointer during the late > >> >>> stage as there is no API provided from ACPICA to be an inverse of > >> >>> acpi_get_table() to forget the early mapped pointer. > >> >>> > >> >>> But how ACPICA can work with the early/late stage requirement? Inside of > >> >>> ACPICA, tables are ensured to be remained in "INSTALLED" state during the > >> >>> early stage, and they are carefully not transitioned to "VALIDATED" state > >> >>> until the late stage. So the same logic is in fact implemented inside of > >> >>> ACPICA in a different way. The gap is only that the feature is not provided > >> >>> to the OSPMs in an accessible external API style. > >> >>> > >> >>> It then is possible to fix the gap by providing an inverse of > >> >>> acpi_get_table() from ACPICA, so that the two Linux sequences can be > >> >>> combined: > >> >>> acpi_get_table(); > >> >>> parse the table > >> >>> acpi_put_table(); > >> >>> In order to work easier with the current Linux code, acpi_get_table() and > >> >>> acpi_put_table() is implemented in a usage counting based style: > >> >>> 1. When the usage count of the table is increased from 0 to 1, table is > >> >>> mapped and .Pointer is set with the mapping address (VALIDATED); > >> >>> 2. When the usage count of the table is decreased from 1 to 0, .Pointer > >> >>> is unset and the mapping address is unmapped (INVALIDATED). > >> >>> So that we can deploy the new APIs to Linux with minimal effort by just > >> >>> invoking acpi_get_table() in acpi_get_table_with_size() and invoking > >> >>> acpi_put_table() in early_acpi_os_unmap_memory(). Lv Zheng. > >> >>> > >> >>> Link: https://github.com/acpica/acpica/commit/cac67909 > >> >>> Signed-off-by: Lv Zheng > >> >>> Signed-off-by: Bob Moore > >> >> > >> >> This commit in -next (071b39575679 ACPICA: Tables: Back port > >> >> acpi_get_table_with_size() and early_acpi_os_unmap_memory() from Linux > >> >> kernel) causes a regression in my nfit/nvdimm test environment. The > >> >> nfit produced by QEMU no longer results in a nvdimm bus being created. > >> >> > >> >> I have not root caused it, but I'm using the following command line > >> >> options to create an nfit in qemu-2.6. Reverting the commit leads > >> >> compile failures. > >> > > >> > Would the build problems go away if you reverted "ACPICA: Tables: > >> > Allow FADT to be customized with virtual address" (linux-next commit > >> > cf334d3174f9) in addition to it? > >> > >> Yes, reverting those two commits gets me back to a functional environment: > >> > >> Revert "ACPICA: Tables: Allow FADT to be customized with virtual address" > >> Revert "ACPICA: Tables: Back port acpi_get_table_with_size() and > >> early_acpi_os_un > > > > To Dan: > > It seems in drivers/acpi/nfit/core.c. > > The returned table size is used by the NFIT code. > > I think it should be changed to use table_header->length. > > Does the acpi core already validate that table_header->length is > correct? i.e. is is possible that a broken implementation could have > the wrong length in the header? I was assuming that was the purpose of > the _with_size(), but maybe I was wrong? That should always be correct. In acpi_tb_init_table_descriptor(), table_desc->length is set by table_header->length. In acpi_tb_validate_table(), which calls acpi_tb_acquire_table(), acpi_os_map_memory() always uses table_desc->length. Thanks and best regards Lv > -- > 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