On Mon, Oct 04, 2021 at 11:32:28PM +0900, Naoya Horiguchi wrote: > On Mon, Oct 04, 2021 at 01:55:30PM +0200, David Hildenbrand wrote: > > On 04.10.21 13:50, Naoya Horiguchi wrote: ... > > > > > > Hwpoison entry for hugepage is also exposed by this patch. The below > > > example shows how pagemap is visible in the case where a memory error > > > hit a hugepage mapped to a process. > > > > > > $ ./page-types --no-summary --pid $PID --raw --list --addr 0x700000000+0x400 > > > voffset offset len flags > > > 700000000 12fa00 1 ___U_______Ma__H_G_________________f_______1 > > > 700000001 12fa01 1ff ___________Ma___TG_________________f_______1 > > > 700000200 12f800 1 __________B________X_______________f______w_ > > > 700000201 12f801 1 ___________________X_______________f______w_ // memory failure hit this page > > > 700000202 12f802 1fe __________B________X_______________f______w_ > > > > > > The entries with both of "X" flag (hwpoison flag) and "w" flag (swap > > > flag) are considered as hwpoison entries. So all pages in 2MB range > > > are inaccessible from the process. We can get actual error location > > > by page-types in physical address mode. > > > > > > $ ./page-types --no-summary --addr 0x12f800+0x200 --raw --list > > > offset len flags > > > 12f800 1 __________B_________________________________ > > > 12f801 1 ___________________X________________________ > > > 12f802 1fe __________B_________________________________ > > > > > > Signed-off-by: Naoya Horiguchi <naoya.horiguchi@xxxxxxx> > > > --- > > > fs/proc/task_mmu.c | 41 ++++++++++++++++++++++++++++++++--------- > > > include/linux/swapops.h | 13 +++++++++++++ > > > tools/vm/page-types.c | 7 ++++++- > > > 3 files changed, 51 insertions(+), 10 deletions(-) > > > > > > Please also update the documentation located at > > > > Documentation/admin-guide/mm/pagemap.rst > > I will do this in the next post. Reading the document, I found that swap type is already exported so we could identify hwpoison entry with it (without new PM_HWPOISON bit). One problem is that the format of swap types (like SWP_HWPOISON) depends on a few config macros like CONFIG_DEVICE_PRIVATE and CONFIG_MIGRATION, so we also need to export how the swap type field is interpreted. I thought of adding new interfaces for example under /sys/kernel/mm/swap/type_format/, which shows info like below (assuming that all CONFIG_{DEVICE_PRIVATE,MIGRATION,MEMORY_FAILURE} is enabled): $ ls /sys/kernel/mm/swap/type_format/ hwpoison migration_read migration_write device_write device_read device_exclusive_write device_exclusive_read $ cat /sys/kernel/mm/swap/type_format/hwpoison 25 $ cat /sys/kernel/mm/swap/type_format/device_write 28 Does it make sense or any better approach? Thanks, Naoya Horiguchi