[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20201030083842.GA4319@kernel.org>
Date: Fri, 30 Oct 2020 10:38:42 +0200
From: Mike Rapoport <rppt@...nel.org>
To: Sudarshan Rajagopalan <sudaraja@...eaurora.org>
Cc: Anshuman Khandual <anshuman.khandual@....com>,
Mark Rutland <mark.rutland@....com>,
David Hildenbrand <david@...hat.com>,
Steven Price <steven.price@....com>,
linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org,
Catalin Marinas <catalin.marinas@....com>,
Will Deacon <will@...nel.org>,
Suren Baghdasaryan <surenb@...gle.com>,
Greg Kroah-Hartman <gregkh@...gle.com>,
Pratik Patel <pratikp@...eaurora.org>
Subject: Re: mm/memblock: export memblock_{start/end}_of_DRAM
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.
Powered by blists - more mailing lists