Thread (16 messages) 16 messages, 3 authors, 2016-10-04

memblock_reserve or memblock_remove to reserve a page

From: Arun Sudhilal <hidden>
Date: 2016-10-03 12:32:24

Hello Nikhil,

On Wed, Sep 28, 2016 at 6:55 PM, Nikhil Utane
[off-list ref] wrote:
base1 = 0xA4D000; size1=0x1000;
memblock_reserve (base1, size1);

(In a separate static driver code)
request_mem_region_exclusive (0x00A4D000, 4096, "csSIGILL")
Thanks for details. Looks strange.
One possible case I can think of is, when you use
request_mem_region_exclusive, user space cannot access it using
/dev/mem. May be any of your user space task is corrupting this region
before. now he is not able to access this location because you have
marked it as EXCLUSIVE for kernel.
If a driver requests for a memory region, shouldn't the kernel then not
allocate it for any other purpose?
To remove pages from kernel allocation, you need to have only
successful invocation of memblock_reserve() function.

Regards,
Arun
-Regards
Nikhil

On Wed, Sep 28, 2016 at 3:12 PM, Arun Sudhilal [off-list ref] wrote:
quoted
Hello Nikhil,

On Wed, Sep 28, 2016 at 2:41 PM, Nikhil Utane
[off-list ref] wrote:
quoted
Arun,

What seems to have done the trick is calling memblock_remove() followed
by a
call to request_mem_region(). This creates a hole which can be confirmed
in
the output of /proc/iomem.

Do you see any issue with this approach?
I really don't know how it works for you. Marking address of a page as
iomem.  How buddy allocator ignores this page?
request_mem_region() is a way of managing IO resource memory, to avoid
two drivers using same IO memory. It has not relation with buddy
allocator.

Can you post code snippet?

Regards,
Arun
quoted
-Thanks
Nikhil

On Tue, Sep 27, 2016 at 4:14 PM, Arun Sudhilal [off-list ref]
wrote:
quoted
Hello Nikhil,

On Fri, Sep 9, 2016 at 7:01 AM, Nikhil Utane
[off-list ref] wrote:
quoted
I want to reserve a physical memory page with a fixed PFN. I do not
want
this page to be used by anyone else. I am calling memblock_reserve()
to
supposedly reserve the page. I am writing some content into this
page.
What
I see is that during some runs the content of this page is modified
(either
fully or sometimes partially). In few runs, I see it as intact. Is it
expected that even after calling memblock_reserve() the kernel can
allocate
this physical page for any other purpose? How is memblock_remove()
different
from memblock_reserve? I tried reading up but didn't see any useful
information. What I understood is memblock_remove will completely
remove
from kernel's allocation mechanism. Should I then be using remove
instead of
reserve?
when a DT entry is added to  #reserved-memory node, what
drivers/of/fdt.c does is to call memblock_remove() and
memblock_reserve().
This happens after the memblock driver is initialized but before buddy
allocator up. Did you try this approach? This should work for you.

Only option once the kernel boot is complete is to try out the
technique what mm/memory_hotplug.c does while offline memory.
isolate_page_range and then migrate.

Regards,
Arun

quoted
-Thanks
Nikhil

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies at kernelnewbies.org
https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help