base1 = 0xA4D000; size1=0x1000; memblock_reserve (base1, size1); (In a separate static driver code) request_mem_region_exclusive (0x00A4D000, 4096, "csSIGILL") If a driver requests for a memory region, shouldn't the kernel then not allocate it for any other purpose? -Regards Nikhil On Wed, Sep 28, 2016 at 3:12 PM, Arun Sudhilal <getarunks@gmail.com> wrote:
Hello Nikhil,
On Wed, Sep 28, 2016 at 2:41 PM, Nikhil Utane <nikhil.subscribed@gmail.com> wrote:
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
-Thanks Nikhil
On Tue, Sep 27, 2016 at 4:14 PM, Arun Sudhilal <getarunks@gmail.com>
wrote:
Hello Nikhil,
On Fri, Sep 9, 2016 at 7:01 AM, Nikhil Utane <nikhil.subscribed@gmail.com> wrote:
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
-Thanks Nikhil
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies