[PATCH 1/2] mmu-mayfail
Chris Wilson
chris at chris-wilson.co.uk
Fri Jun 12 16:40:21 UTC 2020
---
include/linux/mmu_notifier.h | 7 +++++++
mm/mmu_notifier.c | 2 +-
mm/rmap.c | 5 +++--
3 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/include/linux/mmu_notifier.h b/include/linux/mmu_notifier.h
index 736f6918335e..504393abf256 100644
--- a/include/linux/mmu_notifier.h
+++ b/include/linux/mmu_notifier.h
@@ -48,6 +48,7 @@ enum mmu_notifier_event {
};
#define MMU_NOTIFIER_RANGE_BLOCKABLE (1 << 0)
+#define MMU_NOTIFIER_RANGE_MAYFAIL (1 << 1)
struct mmu_notifier_ops {
/*
@@ -396,6 +397,12 @@ mmu_notifier_range_blockable(const struct mmu_notifier_range *range)
return (range->flags & MMU_NOTIFIER_RANGE_BLOCKABLE);
}
+static inline bool
+mmu_notifier_range_mayfail(const struct mmu_notifier_range *range)
+{
+ return (range->flags & MMU_NOTIFIER_RANGE_MAYFAIL);
+}
+
static inline void mmu_notifier_release(struct mm_struct *mm)
{
if (mm_has_notifiers(mm))
diff --git a/mm/mmu_notifier.c b/mm/mmu_notifier.c
index 06852b896fa6..85e82006553f 100644
--- a/mm/mmu_notifier.c
+++ b/mm/mmu_notifier.c
@@ -493,7 +493,7 @@ static int mn_hlist_invalidate_range_start(
_ret = ops->invalidate_range_start(subscription, range);
if (!mmu_notifier_range_blockable(range))
non_block_end();
- if (_ret) {
+ if (_ret && !mmu_notifier_range_mayfail(range)) {
pr_info("%pS callback failed with %d in %sblockable context.\n",
ops->invalidate_range_start, _ret,
!mmu_notifier_range_blockable(range) ?
diff --git a/mm/rmap.c b/mm/rmap.c
index f79a206b271a..95f1820d5982 100644
--- a/mm/rmap.c
+++ b/mm/rmap.c
@@ -1395,8 +1395,9 @@ static bool try_to_unmap_one(struct page *page, struct vm_area_struct *vma,
* Note that the page can not be free in this function as call of
* try_to_unmap() must hold a reference on the page.
*/
- mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, vma, vma->vm_mm,
- address,
+ mmu_notifier_range_init(&range,
+ MMU_NOTIFY_CLEAR, MMU_NOTIFIER_RANGE_MAYFAIL,
+ vma, vma->vm_mm, address,
min(vma->vm_end, address + page_size(page)));
if (PageHuge(page)) {
/*
--
2.20.1
More information about the Intel-gfx-trybot
mailing list