On Tue, Jun 15, 2021 at 11:55:19AM -0700, Jane Chu wrote:
> 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(),

Yes, when a driver *knows* the type must follow certain rules, it
requests it.

> perhaps the pmem case needs another way to suppress prefetch?
> 
> Your thoughts?

The way to think about this problem is, who did the ioremap call for the
ioremap'd area? That's the driver that needs changing.

  Luis


Reply via email to