On 2018-09-19 at 09:20:25 +0200, David Hildenbrand wrote:
Am 19.09.18 um 04:53 schrieb Dan Williams:
> Should we consider just not setting PageReserved for
> devm_memremap_pages()? Perhaps kvm is not be the only component making
> these assumptions about this flag?
I was asking the exact same question in v3 or so.
I was recently going through all PageReserved users, trying to clean up
and document how it is used.
PG_reserved used to be a marker "not available for the page allocator".
This is only partially true and not really helpful I think. My current
PG_reserved is set for special pages, struct pages of such pages should
in general not be touched except by their owner. Pages marked as
- Kernel image (including vDSO) and similar (e.g. BIOS, initrd)
- Pages allocated early during boot (bootmem, memblock)
- Zero pages
- Pages that have been associated with a zone but were not onlined
(e.g. NVDIMM/pmem, online_page_callback used by XEN)
- Pages to exclude from the hibernation image (e.g. loaded kexec images)
- MCA (memory error) pages on ia64
- Offline pages
Some architectures don't allow to ioremap RAM pages that are not marked
as reserved. Allocated pages might have to be set reserved to allow for
that - if there is a good reason to enforce this. Consequently,
PG_reserved part of a user space table might be the indicator for the
zero page, pmem or MMIO pages.
Swapping code does not care about PageReserved at all as far as I
remember. This seems to be fine as it only looks at the way pages have
been mapped into user space.
I don't really see a good reason to set pmem pages as reserved. One
question would be, how/if to exclude them from the hibernation image.
But that could also be solved differently (we would have to double check
how they are handled in hibernation code).
A similar user of PageReserved to look at is:
It will not mark pages dirty if they are reserved. Similar to KVM code.
Yes, kvm is
not the only one user of the dax reserved page.
> Why is MEMORY_DEVICE_PUBLIC memory specifically excluded?
> This has less to do with "dax" pages and more to do with
> devm_memremap_pages() established ranges. P2PDMA is another producer
> of these pages. If either MEMORY_DEVICE_PUBLIC or P2PDMA pages can be
> used in these kvm paths then I think this points to consider clearing
> the Reserved flag.
Thanks Dan/David's comments.
for MEMORY_DEVICE_PUBLIC memory, since host driver could manager the
memory resource to share to guest, Jerome says we could ignore it at
And p2pmem, it seems mapped in a PCI bar space which should most likely
a mmio. I think kvm should treated as a reserved page.
> That said I haven't audited all the locations that test PageReserved().
> Sorry for not responding sooner I was on extended leave.
David / dhildenb