From: "Zheng, Lv" <lv.zheng@intel.com>
To: Tang Chen <tangchen@cn.fujitsu.com>
Cc: Toshi Kani <toshi.kani@hp.com>, "rjw@sisk.pl" <rjw@sisk.pl>,
"lenb@kernel.org" <lenb@kernel.org>,
"tglx@linutronix.de" <tglx@linutronix.de>,
"mingo@elte.hu" <mingo@elte.hu>, "hpa@zytor.com" <hpa@zytor.com>,
"akpm@linux-foundation.org" <akpm@linux-foundation.org>,
"tj@kernel.org" <tj@kernel.org>, "trenn@suse.de" <trenn@suse.de>,
"yinghai@kernel.org" <yinghai@kernel.org>,
"jiang.liu@huawei.com" <jiang.liu@huawei.com>,
"wency@cn.fujitsu.com" <wency@cn.fujitsu.com>,
"laijs@cn.fujitsu.com" <laijs@cn.fujitsu.com>,
"isimatu.yasuaki@jp.fujitsu.com" <isimatu.yasuaki@jp.fujitsu.com>,
"izumi.taku@jp.fujitsu.com" <izumi.taku@jp.fujitsu.com>,
"mgorman@suse.de" <mgorman@suse.de>,
"minchan@kernel.org" <minchan@kernel.org>,
"mina86@mina86.com" <mina86@mina86.com>,
"gong.chen@linux.intel.com" <gong.chen@linux.intel.com>,
"vasilis.liaskovitis@profitbricks.com"
<vasilis.liaskovitis@profitbricks.com>,
"lwoodman@redhat.com" <lwoodman@redhat.com>,
"riel@redhat.com" <riel@redhat.com>,
"jweiner@redhat.com" <jweiner@redhat.com>,
"prarit@redhat.com" <prarit@redhat.com>,
"zhangyanfei@cn.fujitsu.com" <zhangyanfei@cn.fujitsu.com>,
"yanghy@cn.fujitsu.com" <yanghy@cn.fujitsu.com>,
"x86@kernel.org" <x86@kernel.org>,
"linux-doc@vger.kernel.org" <linux-doc@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-mm@kvack.org" <linux-mm@kvack.org>,
"linux-acpi@vger.kernel.org" <linux-acpi@vger.kernel.org>,
"Moore, Robert" <robert.moore@intel.com>
Subject: RE: [PATCH v2 05/18] x86, acpi: Split acpi_boot_table_init() into two parts.
Date: Fri, 2 Aug 2013 08:23:35 +0000 [thread overview]
Message-ID: <1AE640813FDE7649BE1B193DEA596E8802437C47@SHSMSX101.ccr.corp.intel.com> (raw)
In-Reply-To: <51FB5948.6080802@cn.fujitsu.com>
> From: Zheng, Lv
> Sent: Friday, August 02, 2013 4:11 PM
>
> > From: Tang Chen [mailto:tangchen@cn.fujitsu.com]
> > Sent: Friday, August 02, 2013 3:01 PM
> >
> > On 08/02/2013 01:25 PM, Zheng, Lv wrote:
> > ......
> > >>> index ce3d5db..9d68ffc 100644
> > >>> --- a/drivers/acpi/acpica/tbutils.c
> > >>> +++ b/drivers/acpi/acpica/tbutils.c
> > >>> @@ -766,9 +766,30 @@
> > >> acpi_tb_parse_root_table(acpi_physical_address rsdp_address)
> > >>> */
> > >>> acpi_os_unmap_memory(table, length);
> > >>>
> > >>> + return_ACPI_STATUS(AE_OK);
> > >>> +}
> > >>> +
> > >>>
> > >
> > > I don't think you can split the function here.
> > > ACPICA still need to continue to parse the table using the logic
> > implemented in the acpi_tb_install_table() and acpi_tb_parse_fadt().
> > (for example, endianess of the signature).
> > > You'd better to keep them as is and split some codes from
> > 'acpi_tb_install_table' to form another function:
> > acpi_tb_override_table().
> >
> > I'm sorry, I don't quite follow this.
> >
> > I split acpi_tb_parse_root_table(), not acpi_tb_install_table() and
> > acpi_tb_parse_fadt().
> > If ACPICA wants to use these two functions somewhere else, I think it
> is
> > OK, isn't it?
> >
> > And the reason I did this, please see below.
> >
> > ......
> > >>> + *
> > >>> + * FUNCTION: acpi_tb_install_root_table
> > >
> > > I think this function should be acpi_tb_override_tables, and call
> > acpi_tb_override_table() inside this function for each table.
> >
> > It is not just about acpi initrd table override.
> >
> > acpi_tb_parse_root_table() was split into two steps:
> > 1. initialize acpi_gbl_root_table_list
> > 2. install tables into acpi_gbl_root_table_list
> >
> > I need step1 earlier because I want to find SRAT at early time.
> > But I don't want step2 earlier because before install the tables in
> > firmware,
> > acpi initrd table override could happen. I want only SRAT, I don't want
> to
> > touch much existing code.
>
> According to what you've explained, what you didn’t want to be called
> earlier is exactly "acpi initrd table override", please split only this logic to
> the step 2 and leave the others remained.
> I think you should write a function named as acpi_override_tables() or
> likewise in tbxface.c to be executed as the OSPM entry of the step 2.
> Inside this function, acpi_tb_table_override() should be called.
>
> 268 void
> 269 acpi_tb_install_table(acpi_physical_address address,
> 270 char *signature, u32 table_index)
> 271 {
>
> I think you still need the following codes to be called at the early stage.
>
> 272 struct acpi_table_header *table;
> 273 struct acpi_table_header *final_table;
> 274 struct acpi_table_desc *table_desc;
> 275
> 276 if (!address) {
> 277 ACPI_ERROR((AE_INFO,
> 278 "Null physical address for ACPI
> table [%s]",
> 279 signature));
> 280 return;
> 281 }
> 282
> 283 /* Map just the table header */
> 284
> 285 table = acpi_os_map_memory(address, sizeof(struct
> acpi_table_header));
> 286 if (!table) {
> 287 ACPI_ERROR((AE_INFO,
> 288 "Could not map memory for
> table [%s] at %p",
> 289 signature, ACPI_CAST_PTR(void,
> address)));
> 290 return;
> 291 }
> 292
> 293 /* If a particular signature is expected (DSDT/FACS), it
> must match */
> 294
> 295 if (signature
> && !ACPI_COMPARE_NAME(table->signature, signature)) {
> 296 ACPI_BIOS_ERROR((AE_INFO,
> 297 "Invalid signature 0x%X for
> ACPI table, expected [%s]",
> 298 *ACPI_CAST_PTR(u32,
> table->signature),
> 299 signature));
> 300 goto unmap_and_exit;
> 301 }
> 302
> 303 /*
> 304 * Initialize the table entry. Set the pointer to NULL, since
> the
> 305 * table is not fully mapped at this time.
> 306 */
> 307 table_desc =
> &acpi_gbl_root_table_list.tables[table_index];
> 308
> 309 table_desc->address = address;
> 310 table_desc->pointer = NULL;
> 311 table_desc->length = table->length;
> 312 table_desc->flags = ACPI_TABLE_ORIGIN_MAPPED;
> 313 ACPI_MOVE_32_TO_32(table_desc->signature.ascii,
> table->signature);
> 314
>
> You should delete the following codes:
>
> 315 /*
> 316 * ACPI Table Override:
> 317 *
> 318 * Before we install the table, let the host OS override it
> with a new
> 319 * one if desired. Any table within the RSDT/XSDT can be
> replaced,
> 320 * including the DSDT which is pointed to by the FADT.
> 321 *
> 322 * NOTE: If the table is overridden, then final_table will
> contain a
> 323 * mapped pointer to the full new table. If the table is not
> overridden,
> 324 * or if there has been a physical override, then the table
> will be
> 325 * fully mapped later (in verify table). In any case, we
> must
> 326 * unmap the header that was mapped above.
> 327 */
> 328 final_table = acpi_tb_table_override(table, table_desc);
> 329 if (!final_table) {
> 330 final_table = table; /* There was no
> override */
> 331 }
> 332
>
> You still need to keep the following logic.
>
> 333 acpi_tb_print_table_header(table_desc->address,
> final_table);
> 334
> 335 /* Set the global integer width (based upon revision of the
> DSDT) */
> 336
> 337 if (table_index == ACPI_TABLE_INDEX_DSDT) {
> 338
> acpi_ut_set_integer_width(final_table->revision);
> 339 }
> 340
>
> You should delete the following codes:
>
> 341 /*
> 342 * If we have a physical override during this early loading
> of the ACPI
> 343 * tables, unmap the table for now. It will be mapped
> again later when
> 344 * it is actually used. This supports very early loading of
> ACPI tables,
> 345 * before virtual memory is fully initialized and running
> within the
> 346 * host OS. Note: A logical override has the
> ACPI_TABLE_ORIGIN_OVERRIDE
> 347 * flag set and will not be deleted below.
> 348 */
> 349 if (final_table != table) {
> 350 acpi_tb_delete_table(table_desc);
> 351 }
>
> Keep the following.
>
> 352
> 353 unmap_and_exit:
> 354
> 355 /* Always unmap the table header that we mapped above
> */
> 356
> 357 acpi_os_unmap_memory(table, sizeof(struct
> acpi_table_header));
> 358 }
>
> I'm not sure if this can make my concerns clearer for you now.
You might have concerns about how to handle FADT.
In acpi_override_tables, your codes might be looking like:
584 for (i = 0; i < acpi_gbl_root_table_list.current_table_count; i++) {
Just change the I from 2 to 0.
585 acpi_tb_table_override (...);
595 }
You don't need to call acpi_tb_parse_table, the tables pointed by the FADT are DSDT and FACS, their index is 0 and 1.
Thanks and best regards
-Lv
>
> Thanks and best regards
> -Lv
>
> >
> > Would you please explain more about your comment ? I think maybe I
> > missed something
> > important to you guys. :)
> >
> > And all the other ACPICA rules will be followed in the next version.
> >
> > Thanks.
next prev parent reply other threads:[~2013-08-02 8:23 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-01 7:06 [PATCH v2 00/18] Arrange hotpluggable memory as ZONE_MOVABLE Tang Chen
2013-08-01 7:06 ` [PATCH v2 01/18] acpi: Print Hot-Pluggable Field in SRAT Tang Chen
2013-08-01 21:55 ` Toshi Kani
2013-08-01 7:06 ` [PATCH v2 02/18] earlycpio.c: Fix the confusing comment of find_cpio_data() Tang Chen
2013-08-01 21:57 ` Toshi Kani
2013-08-02 4:48 ` Tang Chen
2013-08-01 7:06 ` [PATCH v2 03/18] acpi: Remove "continue" in macro INVALID_TABLE() Tang Chen
2013-08-01 20:26 ` Rafael J. Wysocki
2013-08-01 22:06 ` Toshi Kani
2013-08-02 1:32 ` Tang Chen
2013-08-01 7:06 ` [PATCH v2 04/18] acpi: Introduce acpi_invalid_table() to check if a table is invalid Tang Chen
2013-08-01 20:27 ` Rafael J. Wysocki
2013-08-01 22:26 ` Toshi Kani
2013-08-02 1:34 ` Tang Chen
2013-08-01 7:06 ` [PATCH v2 05/18] x86, acpi: Split acpi_boot_table_init() into two parts Tang Chen
2013-08-01 23:32 ` Toshi Kani
2013-08-02 5:25 ` Zheng, Lv
2013-08-02 7:01 ` Tang Chen
2013-08-02 8:11 ` Zheng, Lv
2013-08-02 8:23 ` Zheng, Lv [this message]
2013-08-02 8:29 ` Tang Chen
2013-08-02 8:54 ` Zheng, Lv
2013-08-02 9:13 ` Tang Chen
2013-08-01 7:06 ` [PATCH v2 06/18] x86, acpi: Initialize ACPI root table list earlier Tang Chen
2013-08-01 23:54 ` Toshi Kani
2013-08-02 7:49 ` Tang Chen
2013-08-02 16:57 ` Toshi Kani
2013-08-01 7:06 ` [PATCH v2 07/18] x86, acpi: Also initialize signature and length when parsing root table Tang Chen
2013-08-02 0:10 ` Toshi Kani
2013-08-02 5:28 ` Zheng, Lv
2013-08-01 7:06 ` [PATCH v2 08/18] x86: get pg_data_t's memory from other node Tang Chen
2013-08-02 0:23 ` Toshi Kani
2013-08-01 7:06 ` [PATCH v2 09/18] x86: Make get_ramdisk_{image|size}() global Tang Chen
2013-08-01 7:06 ` [PATCH v2 10/18] x86, acpi: Try to find if SRAT is overrided earlier Tang Chen
2013-08-02 1:19 ` Toshi Kani
2013-08-02 5:49 ` Tang Chen
2013-08-02 16:05 ` Toshi Kani
2013-08-01 7:06 ` [PATCH v2 11/18] x86, acpi: Try to find SRAT in firmware earlier Tang Chen
2013-08-01 7:06 ` [PATCH v2 12/18] x86, acpi, numa, mem_hotplug: Find hotpluggable memory in SRAT memory affinities Tang Chen
2013-08-01 7:06 ` [PATCH v2 13/18] x86, numa, mem_hotplug: Skip all the regions the kernel resides in Tang Chen
2013-08-01 13:42 ` Tejun Heo
2013-08-02 5:51 ` Tang Chen
2013-08-01 7:06 ` [PATCH v2 14/18] memblock, numa: Introduce flag into memblock Tang Chen
2013-08-01 7:06 ` [PATCH v2 15/18] memblock, mem_hotplug: Introduce MEMBLOCK_HOTPLUG flag to mark hotpluggable regions Tang Chen
2013-08-01 7:06 ` [PATCH v2 16/18] memblock, mem_hotplug: Make memblock skip hotpluggable regions by default Tang Chen
2013-08-01 7:06 ` [PATCH v2 17/18] mem-hotplug: Introduce movablenode boot option to {en|dis}able using SRAT Tang Chen
2013-08-01 7:06 ` [PATCH v2 18/18] x86, numa, acpi, memory-hotplug: Make movablenode have higher priority Tang Chen
2013-08-05 13:07 ` [PATCH v2 00/18] Arrange hotpluggable memory as ZONE_MOVABLE H. Peter Anvin
2013-08-05 13:38 ` Tang Chen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1AE640813FDE7649BE1B193DEA596E8802437C47@SHSMSX101.ccr.corp.intel.com \
--to=lv.zheng@intel.com \
--cc=akpm@linux-foundation.org \
--cc=gong.chen@linux.intel.com \
--cc=hpa@zytor.com \
--cc=isimatu.yasuaki@jp.fujitsu.com \
--cc=izumi.taku@jp.fujitsu.com \
--cc=jiang.liu@huawei.com \
--cc=jweiner@redhat.com \
--cc=laijs@cn.fujitsu.com \
--cc=lenb@kernel.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=lwoodman@redhat.com \
--cc=mgorman@suse.de \
--cc=mina86@mina86.com \
--cc=minchan@kernel.org \
--cc=mingo@elte.hu \
--cc=prarit@redhat.com \
--cc=riel@redhat.com \
--cc=rjw@sisk.pl \
--cc=robert.moore@intel.com \
--cc=tangchen@cn.fujitsu.com \
--cc=tglx@linutronix.de \
--cc=tj@kernel.org \
--cc=toshi.kani@hp.com \
--cc=trenn@suse.de \
--cc=vasilis.liaskovitis@profitbricks.com \
--cc=wency@cn.fujitsu.com \
--cc=x86@kernel.org \
--cc=yanghy@cn.fujitsu.com \
--cc=yinghai@kernel.org \
--cc=zhangyanfei@cn.fujitsu.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox