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.