|
@@ -568,10 +568,26 @@ static inline void clear_tlb_flush_pending(struct mm_struct *mm)
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
-struct vm_special_mapping
|
|
|
-{
|
|
|
- const char *name;
|
|
|
+struct vm_fault;
|
|
|
+
|
|
|
+struct vm_special_mapping {
|
|
|
+ const char *name; /* The name, e.g. "[vdso]". */
|
|
|
+
|
|
|
+ /*
|
|
|
+ * If .fault is not provided, this points to a
|
|
|
+ * NULL-terminated array of pages that back the special mapping.
|
|
|
+ *
|
|
|
+ * This must not be NULL unless .fault is provided.
|
|
|
+ */
|
|
|
struct page **pages;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * If non-NULL, then this is called to resolve page faults
|
|
|
+ * on the special mapping. If used, .pages is not checked.
|
|
|
+ */
|
|
|
+ int (*fault)(const struct vm_special_mapping *sm,
|
|
|
+ struct vm_area_struct *vma,
|
|
|
+ struct vm_fault *vmf);
|
|
|
};
|
|
|
|
|
|
enum tlb_flush_reason {
|