From: Mike Rapoport <rppt@kernel.org>
To: Sudarshan Rajagopalan <sudaraja@codeaurora.org>
Cc: Mark Rutland <mark.rutland@arm.com>,
David Hildenbrand <david@redhat.com>,
Catalin Marinas <catalin.marinas@arm.com>,
Anshuman Khandual <anshuman.khandual@arm.com>,
linux-kernel@vger.kernel.org, Steven Price <steven.price@arm.com>,
Suren Baghdasaryan <surenb@google.com>,
Greg Kroah-Hartman <gregkh@google.com>,
Will Deacon <will@kernel.org>,
linux-arm-kernel@lists.infradead.org,
Pratik Patel <pratikp@codeaurora.org>
Subject: Re: mm/memblock: export memblock_{start/end}_of_DRAM
Date: Fri, 30 Oct 2020 10:38:42 +0200 [thread overview]
Message-ID: <20201030083842.GA4319@kernel.org> (raw)
In-Reply-To: <d0580051d03df3f3e9f333f6bfe968cf@codeaurora.org>
On Thu, Oct 29, 2020 at 02:29:27PM -0700, Sudarshan Rajagopalan wrote:
> Hello all,
>
> We have a usecase where a module driver adds certain memory blocks using
> add_memory_driver_managed(), so that it can perform memory hotplug
> operations on these blocks. In general, these memory blocks aren’t something
> that gets physically added later, but is part of actual RAM that system
> booted up with. Meaning – we set the ‘mem=’ cmdline parameter to limit the
> memory and later add the remaining ones using add_memory*() variants.
>
> The basic idea is to have driver have ownership and manage certain memory
> blocks for hotplug operations.
>
> For the driver be able to know how much memory was limited and how much
> actually present, we take the delta of ‘bootmem physical end address’ and
> ‘memblock_end_of_DRAM’. The 'bootmem physical end address' is obtained by
> scanning the reg values in ‘memory’ DT node and determining the max
> {addr,size}. Since our driver is getting modularized, we won’t have access
> to memblock_end_of_DRAM (i.e. end address of all memory blocks after ‘mem=’
> is applied).
>
> So checking if memblock_{start/end}_of_DRAM() symbols can be exported? Also,
> this information can be obtained by userspace by doing ‘cat /proc/iomem’ and
> greping for ‘System RAM’. So wondering if userspace can have access to such
> info, can we allow kernel module drivers have access by exporting
> memblock_{start/end}_of_DRAM().
These functions cannot be exported not because we want to hide this
information from the modules but because it is unsafe to use them.
On most architecturs these functions are __init so they are discarded
after boot anyway. Beisdes, the memory configuration known to memblock
might be not accurate in many cases as David explained in his reply.
> Or are there any other ways where a module driver can get the end address of
> system memory block?
What do you mean by "system memory block"? There could be a lot of
interpretations if you take into account memory hotplug, "mem=" option,
reserved and firmware memory.
I'd suggest you to describe the entire use case in more detail. Having
the complete picture would help finding a proper solution.
> Sudarshan
>
--
Sincerely yours,
Mike.
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
WARNING: multiple messages have this Message-ID (diff)
From: Mike Rapoport <rppt@kernel.org>
To: Sudarshan Rajagopalan <sudaraja@codeaurora.org>
Cc: Anshuman Khandual <anshuman.khandual@arm.com>,
Mark Rutland <mark.rutland@arm.com>,
David Hildenbrand <david@redhat.com>,
Steven Price <steven.price@arm.com>,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org,
Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will@kernel.org>,
Suren Baghdasaryan <surenb@google.com>,
Greg Kroah-Hartman <gregkh@google.com>,
Pratik Patel <pratikp@codeaurora.org>
Subject: Re: mm/memblock: export memblock_{start/end}_of_DRAM
Date: Fri, 30 Oct 2020 10:38:42 +0200 [thread overview]
Message-ID: <20201030083842.GA4319@kernel.org> (raw)
In-Reply-To: <d0580051d03df3f3e9f333f6bfe968cf@codeaurora.org>
On Thu, Oct 29, 2020 at 02:29:27PM -0700, Sudarshan Rajagopalan wrote:
> Hello all,
>
> We have a usecase where a module driver adds certain memory blocks using
> add_memory_driver_managed(), so that it can perform memory hotplug
> operations on these blocks. In general, these memory blocks aren’t something
> that gets physically added later, but is part of actual RAM that system
> booted up with. Meaning – we set the ‘mem=’ cmdline parameter to limit the
> memory and later add the remaining ones using add_memory*() variants.
>
> The basic idea is to have driver have ownership and manage certain memory
> blocks for hotplug operations.
>
> For the driver be able to know how much memory was limited and how much
> actually present, we take the delta of ‘bootmem physical end address’ and
> ‘memblock_end_of_DRAM’. The 'bootmem physical end address' is obtained by
> scanning the reg values in ‘memory’ DT node and determining the max
> {addr,size}. Since our driver is getting modularized, we won’t have access
> to memblock_end_of_DRAM (i.e. end address of all memory blocks after ‘mem=’
> is applied).
>
> So checking if memblock_{start/end}_of_DRAM() symbols can be exported? Also,
> this information can be obtained by userspace by doing ‘cat /proc/iomem’ and
> greping for ‘System RAM’. So wondering if userspace can have access to such
> info, can we allow kernel module drivers have access by exporting
> memblock_{start/end}_of_DRAM().
These functions cannot be exported not because we want to hide this
information from the modules but because it is unsafe to use them.
On most architecturs these functions are __init so they are discarded
after boot anyway. Beisdes, the memory configuration known to memblock
might be not accurate in many cases as David explained in his reply.
> Or are there any other ways where a module driver can get the end address of
> system memory block?
What do you mean by "system memory block"? There could be a lot of
interpretations if you take into account memory hotplug, "mem=" option,
reserved and firmware memory.
I'd suggest you to describe the entire use case in more detail. Having
the complete picture would help finding a proper solution.
> Sudarshan
>
--
Sincerely yours,
Mike.
next prev parent reply other threads:[~2020-10-30 8:40 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-29 21:29 mm/memblock: export memblock_{start/end}_of_DRAM Sudarshan Rajagopalan
2020-10-29 21:29 ` Sudarshan Rajagopalan
2020-10-30 6:41 ` David Hildenbrand
2020-10-30 6:41 ` David Hildenbrand
2020-11-03 2:15 ` Sudarshan Rajagopalan
2020-11-03 2:15 ` Sudarshan Rajagopalan
2020-10-30 8:38 ` Mike Rapoport [this message]
2020-10-30 8:38 ` Mike Rapoport
2020-10-31 9:18 ` Christoph Hellwig
2020-10-31 9:18 ` Christoph Hellwig
2020-10-31 10:05 ` David Hildenbrand
2020-10-31 10:05 ` David Hildenbrand
2020-11-03 8:38 ` Christoph Hellwig
2020-11-03 8:38 ` Christoph Hellwig
2020-11-03 2:51 ` Sudarshan Rajagopalan
2020-11-03 2:51 ` Sudarshan Rajagopalan
2020-11-03 16:51 ` Mike Rapoport
2020-11-03 16:51 ` 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=20201030083842.GA4319@kernel.org \
--to=rppt@kernel.org \
--cc=anshuman.khandual@arm.com \
--cc=catalin.marinas@arm.com \
--cc=david@redhat.com \
--cc=gregkh@google.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=pratikp@codeaurora.org \
--cc=steven.price@arm.com \
--cc=sudaraja@codeaurora.org \
--cc=surenb@google.com \
--cc=will@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.