All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Hildenbrand <david@redhat.com>
To: Vaibhav Jain <vaibhav@linux.ibm.com>, linux-kernel@vger.kernel.org
Cc: "Aneesh Kumar K . V" <aneesh.kumar@linux.ibm.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Dan Williams <dan.j.williams@intel.com>,
	Miaohe Lin <linmiaohe@huawei.com>,
	Muchun Song <songmuchun@bytedance.com>
Subject: Re: [PATCH] resource: re-factor page_is_ram()
Date: Mon, 18 Jul 2022 12:48:08 +0200	[thread overview]
Message-ID: <488f510f-00ad-4ef0-1eb9-ac73c7bb527c@redhat.com> (raw)
In-Reply-To: <20220601163243.3806231-1-vaibhav@linux.ibm.com>

On 01.06.22 18:32, Vaibhav Jain wrote:
> Presently page_is_ram() relies on walk_system_ram_range() that performs a walk
> on kernel iomem resources hierarchy with a dummy callback __is_ram(). Before
> calling find_next_iomem_res(), walk_system_ram_range() does some book-keeping
> which can be avoided for page_is_ram() use-case.
> 
> Hence this patch proposes to update page_is_ram() to directly call
> find_next_iomem_res() with minimal book-keeping needed.
> 
> To avoid allocating a 'struct resource' the patch also updates
> find_next_iomem_res() to not return -EINVAL in case 'res == NULL'. Instead
> out 'struct resource *res' is only populated when its not NULL.
> 
> Signed-off-by: Vaibhav Jain <vaibhav@linux.ibm.com>
> ---
>  kernel/resource.c | 19 ++++++++-----------
>  1 file changed, 8 insertions(+), 11 deletions(-)
> 
> diff --git a/kernel/resource.c b/kernel/resource.c
> index 34eaee179689..ecf6b9a50adc 100644
> --- a/kernel/resource.c
> +++ b/kernel/resource.c
> @@ -311,7 +311,7 @@ EXPORT_SYMBOL(release_resource);
>   *
>   * If a resource is found, returns 0 and @*res is overwritten with the part
>   * of the resource that's within [@start..@end]; if none is found, returns
> - * -ENODEV.  Returns -EINVAL for invalid parameters.
> + * -ENODEV.
>   *

There is still another -EINVAL in that function ...

>   * @start:	start address of the resource searched for
>   * @end:	end address of same resource
> @@ -328,9 +328,6 @@ static int find_next_iomem_res(resource_size_t start, resource_size_t end,
>  {
>  	struct resource *p;
>  
> -	if (!res)
> -		return -EINVAL;
> -
>  	if (start >= end)
>  		return -EINVAL;

As all callers guarantee that, we might just remove it.

>  
> @@ -356,7 +353,7 @@ static int find_next_iomem_res(resource_size_t start, resource_size_t end,
>  		break;
>  	}
>  
> -	if (p) {
> +	if (p && res) {
>  		/* copy data */
>  		*res = (struct resource) {
>  			.start = max(start, p->start),
> @@ -474,18 +471,18 @@ int walk_system_ram_range(unsigned long start_pfn, unsigned long nr_pages,
>  	return ret;
>  }
>  
> -static int __is_ram(unsigned long pfn, unsigned long nr_pages, void *arg)
> -{
> -	return 1;
> -}
> -
>  /*
>   * This generic page_is_ram() returns true if specified address is
>   * registered as System RAM in iomem_resource list.
>   */
>  int __weak page_is_ram(unsigned long pfn)
>  {
> -	return walk_system_ram_range(pfn, 1, NULL, __is_ram) == 1;
> +	const resource_size_t pfn_res = PFN_PHYS(pfn);
> +
> +	return find_next_iomem_res(pfn_res,
> +				   pfn_res + 1,
> +				   IORESOURCE_SYSTEM_RAM | IORESOURCE_BUSY,
> +				   IORES_DESC_NONE, NULL) == 0;
>  }
>  EXPORT_SYMBOL_GPL(page_is_ram);
>  

What about

a) A cleanup patch upfront that removes both -EINVAL cases from
find_next_iomem_res() followed by

b) The actual change to page_is_ram()

?

-- 
Thanks,

David / dhildenb


  parent reply	other threads:[~2022-07-18 10:48 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-01 16:32 [PATCH] resource: re-factor page_is_ram() Vaibhav Jain
2022-06-10 10:23 ` David Hildenbrand
2022-06-16  6:45   ` Vaibhav Jain
2022-07-18 10:42     ` David Hildenbrand
2022-07-18 10:48 ` David Hildenbrand [this message]
2022-07-18 18:00   ` Dan Williams

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=488f510f-00ad-4ef0-1eb9-ac73c7bb527c@redhat.com \
    --to=david@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=aneesh.kumar@linux.ibm.com \
    --cc=dan.j.williams@intel.com \
    --cc=linmiaohe@huawei.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=songmuchun@bytedance.com \
    --cc=vaibhav@linux.ibm.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 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.