linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
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.

  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