All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mike Rapoport <rppt@kernel.org>
To: Gregory Price <gourry@gourry.net>
Cc: x86@kernel.org, linux-kernel@vger.kernel.org,
	linux-acpi@vger.kernel.org, linux-mm@kvack.org,
	linux-cxl@kvack.org, Jonathan.Cameron@huawei.com,
	dan.j.williams@intel.com, rrichter@amd.com, Terry.Bowman@amd.com,
	dave.jiang@intel.com, ira.weiny@intel.com,
	alison.schofield@intel.com, dave.hansen@linux.intel.com,
	luto@kernel.org, peterz@infradead.org, tglx@linutronix.de,
	mingo@redhat.com, bp@alien8.de, hpa@zytor.com, rafael@kernel.org,
	lenb@kernel.org, david@redhat.com, osalvador@suse.de,
	gregkh@linuxfoundation.org, akpm@linux-foundation.org
Subject: Re: [PATCH v3 3/3] acpi,srat: give memory block size advice based on CFMWS alignment
Date: Mon, 28 Oct 2024 19:24:54 +0200	[thread overview]
Message-ID: <Zx_I5vPrXmZhQNj0@kernel.org> (raw)
In-Reply-To: <20241022213450.15041-4-gourry@gourry.net>

On Tue, Oct 22, 2024 at 05:34:50PM -0400, Gregory Price wrote:
> Capacity is stranded when CFMWS regions are not aligned to block size.
> On x86, block size increases with capacity (2G blocks @ 64G capacity).
> 
> Use CFMWS base/size to report memory block size alignment advice.
> 
> After the alignment, the acpi code begins populating numa nodes with
> memblocks, so probe the value just prior to lock it in.  All future
> callers should be providing advice prior to this point.
> 
> Suggested-by: Dan Williams <dan.j.williams@intel.com>
> Signed-off-by: Gregory Price <gourry@gourry.net>
> ---
>  drivers/acpi/numa/srat.c | 33 +++++++++++++++++++++++++++++++++
>  1 file changed, 33 insertions(+)
> 
> diff --git a/drivers/acpi/numa/srat.c b/drivers/acpi/numa/srat.c
> index 44f91f2c6c5d..35e6f7c17f60 100644
> --- a/drivers/acpi/numa/srat.c
> +++ b/drivers/acpi/numa/srat.c
> @@ -14,6 +14,7 @@
>  #include <linux/errno.h>
>  #include <linux/acpi.h>
>  #include <linux/memblock.h>
> +#include <linux/memory.h>
>  #include <linux/numa.h>
>  #include <linux/nodemask.h>
>  #include <linux/topology.h>
> @@ -333,6 +334,29 @@ acpi_parse_memory_affinity(union acpi_subtable_headers *header,
>  	return 0;
>  }
>  
> +/* Advise memblock on maximum block size to avoid stranded capacity. */
> +static int __init acpi_align_cfmws(union acpi_subtable_headers *header,
> +				   void *arg, const unsigned long table_end)
> +{
> +	struct acpi_cedt_cfmws *cfmws = (struct acpi_cedt_cfmws *)header;
> +	u64 start = cfmws->base_hpa;
> +	u64 size = cfmws->window_size;
> +	unsigned long bz;

Maybe unsigned long size?

> +
> +	for (bz = SZ_64T; bz >= SZ_256M; bz >>= 1) {
> +		if (IS_ALIGNED(start, bz) && IS_ALIGNED(size, bz))
> +			break;
> +	}
> +
> +	if (bz >= SZ_256M) {
> +		if (memory_block_advise_max_size(bz) < 0)
> +			pr_warn("CFMWS: memblock size advise failed\n");
> +	} else

Nit: braces needed for else arm as well

> +		pr_err("CFMWS: [BIOS BUG] base/size alignment violates spec\n");
> +
> +	return 0;
> +}
> +
>  static int __init acpi_parse_cfmws(union acpi_subtable_headers *header,
>  				   void *arg, const unsigned long table_end)
>  {
> @@ -545,6 +569,15 @@ int __init acpi_numa_init(void)
>  	 * Initialize a fake_pxm as the first available PXM to emulate.
>  	 */
>  
> +	/* Align memblock size to CFMW regions if possible */
> +	acpi_table_parse_cedt(ACPI_CEDT_TYPE_CFMWS, acpi_align_cfmws, NULL);
> +
> +	/*
> +	 * Nodes start populating with blocks after this, so probe the max
> +	 * block size to prevent it from changing in the future.
> +	 */
> +	memory_block_probe_max_size();
> +

It won't change, but how drivers/base/memory.c will know about the probed
size if architecture does not override memory_block_size_bytes()?

>  	/* fake_pxm is the next unused PXM value after SRAT parsing */
>  	for (i = 0, fake_pxm = -1; i < MAX_NUMNODES; i++) {
>  		if (node_to_pxm_map[i] > fake_pxm)
> -- 
> 2.43.0
> 

-- 
Sincerely yours,
Mike.

  reply	other threads:[~2024-10-28 17:28 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-10-22 21:34 [PATCH v3 0/3] memory,x86,acpi: hotplug memory alignment advisement Gregory Price
2024-10-22 21:34 ` [PATCH v3 1/3] memory: implement memory_block_advise/probe_max_size Gregory Price
2024-10-28 17:27   ` Mike Rapoport
2024-10-29 12:39   ` David Hildenbrand
2024-10-22 21:34 ` [PATCH v3 2/3] x86: probe memory block size advisement value during mm init Gregory Price
2024-10-29 12:40   ` David Hildenbrand
2024-10-29 13:48     ` Gregory Price
2024-10-29 13:52       ` David Hildenbrand
2024-10-22 21:34 ` [PATCH v3 3/3] acpi,srat: give memory block size advice based on CFMWS alignment Gregory Price
2024-10-28 17:24   ` Mike Rapoport [this message]
2024-10-28 20:55     ` Gregory Price
2024-10-29 12:42   ` David Hildenbrand
2024-10-29 13:20     ` Gregory Price
2024-10-29 16:31       ` Mike Rapoport

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=Zx_I5vPrXmZhQNj0@kernel.org \
    --to=rppt@kernel.org \
    --cc=Jonathan.Cameron@huawei.com \
    --cc=Terry.Bowman@amd.com \
    --cc=akpm@linux-foundation.org \
    --cc=alison.schofield@intel.com \
    --cc=bp@alien8.de \
    --cc=dan.j.williams@intel.com \
    --cc=dave.hansen@linux.intel.com \
    --cc=dave.jiang@intel.com \
    --cc=david@redhat.com \
    --cc=gourry@gourry.net \
    --cc=gregkh@linuxfoundation.org \
    --cc=hpa@zytor.com \
    --cc=ira.weiny@intel.com \
    --cc=lenb@kernel.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-cxl@kvack.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=luto@kernel.org \
    --cc=mingo@redhat.com \
    --cc=osalvador@suse.de \
    --cc=peterz@infradead.org \
    --cc=rafael@kernel.org \
    --cc=rrichter@amd.com \
    --cc=tglx@linutronix.de \
    --cc=x86@kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.