Re: [PATCH Part2 RFC v2 08/37] x86/sev: Split the physmap when adding the page in RMP table
From: Peter Zijlstra <peterz@infradead.org>
Date: 2021-05-03 15:07:39
Also in:
lkml
From: Peter Zijlstra <peterz@infradead.org>
Date: 2021-05-03 15:07:39
Also in:
lkml
On Fri, Apr 30, 2021 at 07:37:53AM -0500, Brijesh Singh wrote:
This poses a challenge in the Linux memory model. The Linux kernel creates a direct mapping of all the physical memory -- referred to as the physmap. The physmap may contain a valid mapping of guest owned pages. During the page table walk, the host access may get into the situation where one of the pages within the large page is owned by the guest (i.e assigned bit is set in RMP). A write to a non-guest within the large page will raise an RMP violation. To workaround it, call set_memory_4k() to split the physmap before adding the page in the RMP table. This ensures that the pages added in the RMP table are used as 4K in the physmap.
What's an RMP violation and why are they a problem?
The spliting of the physmap is a temporary solution until the kernel page fault handler is improved to split the kernel address on demand.
How is that an improvement? Fracturing the physmap sucks whichever way around.
One of the disadvtange of splitting is that eventually, it will end up breaking down the entire physmap unless its coalesce back to a large page. I am open to the suggestation on various approaches we could take to address this problem.
Have the hardware fracture the TLB entry internally?