On 07/24/2018 12:36 AM, Ingo Molnar wrote: > > * Dan Williams <dan.j.williams@xxxxxxxxx> wrote: > >> In preparation for using set_memory_uc() instead set_memory_np() for >> isolating poison from speculation, teach the memtype code to sanitize >> physical addresses vs __PHYSICAL_MASK. >> >> The motivation for using set_memory_uc() for this case is to allow >> ongoing access to persistent memory pages via the pmem-driver + >> memcpy_mcsafe() until the poison is repaired. >> >> Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx> >> Cc: Ingo Molnar <mingo@xxxxxxxxxx> >> Cc: "H. Peter Anvin" <hpa@xxxxxxxxx> >> Cc: Tony Luck <tony.luck@xxxxxxxxx> >> Cc: Borislav Petkov <bp@xxxxxxxxx> >> Cc: <linux-edac@xxxxxxxxxxxxxxx> >> Cc: <x86@xxxxxxxxxx> >> Signed-off-by: Dan Williams <dan.j.williams@xxxxxxxxx> >> --- >> arch/x86/mm/pat.c | 16 ++++++++++++++++ >> 1 file changed, 16 insertions(+) >> >> diff --git a/arch/x86/mm/pat.c b/arch/x86/mm/pat.c >> index 1555bd7d3449..6788ffa990f8 100644 >> --- a/arch/x86/mm/pat.c >> +++ b/arch/x86/mm/pat.c >> @@ -512,6 +512,17 @@ static int free_ram_pages_type(u64 start, u64 end) >> return 0; >> } >> >> +static u64 sanitize_phys(u64 address) >> +{ >> + /* >> + * When changing the memtype for pages containing poison allow >> + * for a "decoy" virtual address (bit 63 clear) passed to >> + * set_memory_X(). __pa() on a "decoy" address results in a >> + * physical address with it 63 set. >> + */ >> + return address & __PHYSICAL_MASK; > > s/it/bit Thanks Ingo! I'll update when I pull in the patch. > > Thanks, > > Ingo > _______________________________________________ > Linux-nvdimm mailing list > Linux-nvdimm@xxxxxxxxxxxx > https://lists.01.org/mailman/listinfo/linux-nvdimm >