Re: [PATCH 1/2] mm, Make __get_user_pages return -EHWPOISON for HWPOISON page

Previous thread: I am an emotional amoeba who loves Erika-with-a-k and Erika-with-a-k loves me. by Benjamin LaHaise on Monday, April 26, 2010 - 11:35 pm. (7 messages)

Next thread: [PATCH 2/2] KVM, Fix QEMU-KVM is killed by guest SRAO MCE by Huang Ying on Tuesday, April 27, 2010 - 12:04 am. (7 messages)
From: Huang Ying
Date: Tuesday, April 27, 2010 - 12:04 am

With this patch, the caller of __get_user_pages can distinguish
HWPOISON page from general FAULT page. This is needed by KVM, where
UCR MCE should be relayed to guest for HWPOISON page, while
instruction emulation and MMIO will be tried for general FAULT page.

Signed-off-by: Huang Ying <ying.huang@intel.com>
---
 include/asm-generic/errno.h |    2 ++
 mm/memory.c                 |    5 +++--
 2 files changed, 5 insertions(+), 2 deletions(-)

--- a/include/asm-generic/errno.h
+++ b/include/asm-generic/errno.h
@@ -108,4 +108,6 @@
 
 #define ERFKILL		132	/* Operation not possible due to RF-kill */
 
+#define EHWPOISON	133	/* Memory page has hardware error */
+
 #endif
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -1432,9 +1432,10 @@ int __get_user_pages(struct task_struct
 				if (ret & VM_FAULT_ERROR) {
 					if (ret & VM_FAULT_OOM)
 						return i ? i : -ENOMEM;
-					if (ret &
-					    (VM_FAULT_HWPOISON|VM_FAULT_SIGBUS))
+					if (ret & VM_FAULT_SIGBUS)
 						return i ? i : -EFAULT;
+					if (ret & VM_FAULT_HWPOISON)
+						return i ? i : -EHWPOISON;
 					BUG();
 				}
 				if (ret & VM_FAULT_MAJOR)


--

From: Andrew Morton
Date: Tuesday, April 27, 2010 - 2:47 pm

On Tue, 27 Apr 2010 15:04:18 +0800

This will cause various code paths (eg: fs/direct-io.c) to return
-EHWPOISON to userspace, will it not?

--

From: Huang Ying
Date: Tuesday, April 27, 2010 - 6:50 pm

Yes. I think it may be returned to userspace. Do we need to keep the
userspace errno interface like this?

If it is, we can check whether the virtual page is hwpoisoned via going
through the page table because the hwpoisoned virtual page has a special
swap entry in page table.

Best Regards,
Huang Ying



--

From: Andrew Morton
Date: Tuesday, April 27, 2010 - 3:56 pm

I don't think we should extend the kernel interface in a non-posix
fashion without good reason and some thought.  manpages and glibc will

Spose so.  Or you could perhaps extend __get_user_pages() by adding a
new FOLL_HWPOISON and make it return -EHWPOISON only if FOLL_HWPOISON
was set, and require that the __get_user_pages(FOLL_HWPOISON) caller
rewrite -EHWPOISON to something else.  But I didn't think about that
very hard.

--

Previous thread: I am an emotional amoeba who loves Erika-with-a-k and Erika-with-a-k loves me. by Benjamin LaHaise on Monday, April 26, 2010 - 11:35 pm. (7 messages)

Next thread: [PATCH 2/2] KVM, Fix QEMU-KVM is killed by guest SRAO MCE by Huang Ying on Tuesday, April 27, 2010 - 12:04 am. (7 messages)