|
@@ -61,6 +61,16 @@ struct mmu_notifier_ops {
|
|
|
struct mm_struct *mm,
|
|
|
unsigned long address);
|
|
|
|
|
|
+ /*
|
|
|
+ * test_young is called to check the young/accessed bitflag in
|
|
|
+ * the secondary pte. This is used to know if the page is
|
|
|
+ * frequently used without actually clearing the flag or tearing
|
|
|
+ * down the secondary mapping on the page.
|
|
|
+ */
|
|
|
+ int (*test_young)(struct mmu_notifier *mn,
|
|
|
+ struct mm_struct *mm,
|
|
|
+ unsigned long address);
|
|
|
+
|
|
|
/*
|
|
|
* change_pte is called in cases that pte mapping to page is changed:
|
|
|
* for example, when ksm remaps pte to point to a new shared page.
|
|
@@ -163,6 +173,8 @@ extern void __mmu_notifier_mm_destroy(struct mm_struct *mm);
|
|
|
extern void __mmu_notifier_release(struct mm_struct *mm);
|
|
|
extern int __mmu_notifier_clear_flush_young(struct mm_struct *mm,
|
|
|
unsigned long address);
|
|
|
+extern int __mmu_notifier_test_young(struct mm_struct *mm,
|
|
|
+ unsigned long address);
|
|
|
extern void __mmu_notifier_change_pte(struct mm_struct *mm,
|
|
|
unsigned long address, pte_t pte);
|
|
|
extern void __mmu_notifier_invalidate_page(struct mm_struct *mm,
|
|
@@ -186,6 +198,14 @@ static inline int mmu_notifier_clear_flush_young(struct mm_struct *mm,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static inline int mmu_notifier_test_young(struct mm_struct *mm,
|
|
|
+ unsigned long address)
|
|
|
+{
|
|
|
+ if (mm_has_notifiers(mm))
|
|
|
+ return __mmu_notifier_test_young(mm, address);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
static inline void mmu_notifier_change_pte(struct mm_struct *mm,
|
|
|
unsigned long address, pte_t pte)
|
|
|
{
|
|
@@ -313,6 +333,12 @@ static inline int mmu_notifier_clear_flush_young(struct mm_struct *mm,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static inline int mmu_notifier_test_young(struct mm_struct *mm,
|
|
|
+ unsigned long address)
|
|
|
+{
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
static inline void mmu_notifier_change_pte(struct mm_struct *mm,
|
|
|
unsigned long address, pte_t pte)
|
|
|
{
|