linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Tang Chen <tangchen@cn.fujitsu.com>
To: "Rafael J. Wysocki" <rjw@sisk.pl>
Cc: robert.moore@intel.com, lv.zheng@intel.com, lenb@kernel.org,
	tglx@linutronix.de, mingo@elte.hu, hpa@zytor.com,
	akpm@linux-foundation.org, tj@kernel.org, trenn@suse.de,
	yinghai@kernel.org, jiang.liu@huawei.com, wency@cn.fujitsu.com,
	laijs@cn.fujitsu.com, isimatu.yasuaki@jp.fujitsu.com,
	izumi.taku@jp.fujitsu.com, mgorman@suse.de, minchan@kernel.org,
	mina86@mina86.com, gong.chen@linux.intel.com,
	vasilis.liaskovitis@profitbricks.com, lwoodman@redhat.com,
	riel@redhat.com, jweiner@redhat.com, prarit@redhat.com,
	zhangyanfei@cn.fujitsu.com, yanghy@cn.fujitsu.com,
	x86@kernel.org, linux-doc@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-mm@kvack.org,
	linux-acpi@vger.kernel.org
Subject: Re: [PATCH v2 RESEND 07/18] x86, ACPI: Also initialize signature and length when parsing root table.
Date: Mon, 05 Aug 2013 09:33:32 +0800	[thread overview]
Message-ID: <51FF00EC.1030609@cn.fujitsu.com> (raw)
In-Reply-To: <3299662.WAS8YLIUlv@vostro.rjw.lan>

[-- Attachment #1: Type: text/plain, Size: 1000 bytes --]

Hi Rafael,

On 08/02/2013 09:03 PM, Rafael J. Wysocki wrote:
> On Friday, August 02, 2013 05:14:26 PM Tang Chen wrote:
>> Besides the phys addr of the acpi tables, it will be very convenient if
>> we also have the signature of each table in acpi_gbl_root_table_list at
>> early time. We can find SRAT easily by comparing the signature.
>>
>> This patch alse record signature and some other info in
>> acpi_gbl_root_table_list at early time.
>>
>> Signed-off-by: Tang Chen<tangchen@cn.fujitsu.com>
>> Reviewed-by: Zhang Yanfei<zhangyanfei@cn.fujitsu.com>
>
> The subject is misleading, as the change is in ACPICA and therefore affects not
> only x86.

OK, will change it.

>
> Also I think the same comments as for the other ACPICA patch is this series
> applies: You shouldn't modify acpi_tbl_parse_root_table() in ways that would
> require the other OSes using ACPICA to be modified.
>

Thank you for the reminding. Please refer to the attachment.
How do you think of the idea from Zheng ?

Thanks.

[-- Attachment #2: Re: [PATCH v2 05_18] x86, acpi: Split acpi_boot_table_init() into two parts..eml --]
[-- Type: message/rfc822, Size: 14802 bytes --]

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:11:15 +0000
Message-ID: <1AE640813FDE7649BE1B193DEA596E8802437C27@SHSMSX101.ccr.corp.intel.com>

> 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.

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.

  reply	other threads:[~2013-08-05  1:35 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-08-02  9:14 [PATCH v2 RESEND 00/18] Arrange hotpluggable memory as ZONE_MOVABLE Tang Chen
2013-08-02  9:14 ` [PATCH v2 RESEND 01/18] acpi: Print Hot-Pluggable Field in SRAT Tang Chen
2013-08-02  9:14 ` [PATCH v2 RESEND 02/18] earlycpio.c: Fix the confusing comment of find_cpio_data() Tang Chen
2013-08-02  9:14 ` [PATCH v2 RESEND 03/18] acpi: Remove "continue" in macro INVALID_TABLE() Tang Chen
2013-08-02  9:14 ` [PATCH v2 RESEND 04/18] acpi: Introduce acpi_verify_initrd() to check if a table is invalid Tang Chen
2013-08-06 23:02   ` Toshi Kani
2013-08-02  9:14 ` [PATCH v2 RESEND 05/18] x86, ACPICA: Split acpi_boot_table_init() into two parts Tang Chen
2013-08-02 13:00   ` Rafael J. Wysocki
2013-08-05  3:21     ` Tang Chen
2013-08-05 13:26       ` Rafael J. Wysocki
2013-08-05 13:23         ` Tang Chen
2013-08-02  9:14 ` [PATCH v2 RESEND 06/18] x86, acpi, ACPICA: Initialize ACPI root table list earlier Tang Chen
2013-08-02  9:14 ` [PATCH v2 RESEND 07/18] x86, ACPI: Also initialize signature and length when parsing root table Tang Chen
2013-08-02 13:03   ` Rafael J. Wysocki
2013-08-05  1:33     ` Tang Chen [this message]
2013-08-05 13:28       ` Rafael J. Wysocki
2013-08-02  9:14 ` [PATCH v2 RESEND 08/18] x86: get pg_data_t's memory from other node Tang Chen
2013-08-02  9:14 ` [PATCH v2 RESEND 09/18] x86: Make get_ramdisk_{image|size}() global Tang Chen
2013-08-02  9:14 ` [PATCH v2 RESEND 10/18] x86, acpi: Try to find if SRAT is overrided earlier Tang Chen
2013-08-02  9:14 ` [PATCH v2 RESEND 11/18] x86, acpi: Try to find SRAT in firmware earlier Tang Chen
2013-08-06 23:33   ` Toshi Kani
2013-08-07  1:37     ` Tang Chen
2013-08-02  9:14 ` [PATCH v2 RESEND 12/18] x86, acpi, numa, mem_hotplug: Find hotpluggable memory in SRAT memory affinities Tang Chen
2013-08-02  9:14 ` [PATCH v2 RESEND 13/18] x86, numa, mem_hotplug: Skip all the regions the kernel resides in Tang Chen
2013-08-05  6:22   ` Tang Chen
2013-08-05 14:52     ` Tejun Heo
2013-08-05 15:12       ` Zhang Yanfei
2013-08-06  2:29       ` Tang Chen
2013-08-06 15:10         ` Tejun Heo
2013-08-06  2:50       ` Tang Chen
2013-08-02  9:14 ` [PATCH v2 RESEND 14/18] memblock, numa: Introduce flag into memblock Tang Chen
2013-08-02  9:14 ` [PATCH v2 RESEND 15/18] memblock, mem_hotplug: Introduce MEMBLOCK_HOTPLUG flag to mark hotpluggable regions Tang Chen
2013-08-02  9:14 ` [PATCH v2 RESEND 16/18] memblock, mem_hotplug: Make memblock skip hotpluggable regions by default Tang Chen
2013-08-02  9:14 ` [PATCH v2 RESEND 17/18] mem-hotplug: Introduce movablenode boot option to {en|dis}able using SRAT Tang Chen
2013-08-02  9:14 ` [PATCH v2 RESEND 18/18] x86, numa, acpi, memory-hotplug: Make movablenode have higher priority 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=51FF00EC.1030609@cn.fujitsu.com \
    --to=tangchen@cn.fujitsu.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=lv.zheng@intel.com \
    --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=tglx@linutronix.de \
    --cc=tj@kernel.org \
    --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;
as well as URLs for NNTP newsgroup(s).