Hi, Dan,
It appears the fact pmem region is of WB memtype renders set_memory_uc()
to fail due to inconsistency between the requested memtype(UC-) and the
cached
memtype(WB).
# cat /proc/iomem |grep -A 8 -i persist
1840000000-d53fffffff : Persistent Memory
1840000000-1c3fffffff : namespace0.0
5740000000-76bfffffff : namespace2.0
# cat /sys/kernel/debug/x86/pat_memtype_list
PAT memtype list:
PAT: [mem 0x0000001840000000-0x0000001c40000000] write-back
PAT: [mem 0x0000005740000000-0x00000076c0000000] write-back
[10683.418072] Memory failure: 0x1850600: recovery action for dax page:
Recovered
[10683.426147] x86/PAT: fsdax_poison_v1:5018 conflicting memory types
1850600000-1850601000 uncached-minus<->write-back
cscope search shows that unlike pmem, set_memory_uc() is primarily used
by drivers dealing with ioremap(),
perhaps the pmem case needs another way to suppress prefetch?
Your thoughts?
thanks!
-jane