summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/linux/mm.h7
-rw-r--r--mm/ksm.c18
-rw-r--r--mm/util.c13
3 files changed, 20 insertions, 18 deletions
diff --git a/include/linux/mm.h b/include/linux/mm.h
index 57a9fa34f159..0ac87d9ee9d8 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -2868,5 +2868,12 @@ void __init setup_nr_node_ids(void);
2868static inline void setup_nr_node_ids(void) {} 2868static inline void setup_nr_node_ids(void) {}
2869#endif 2869#endif
2870 2870
2871extern int memcmp_pages(struct page *page1, struct page *page2);
2872
2873static inline int pages_identical(struct page *page1, struct page *page2)
2874{
2875 return !memcmp_pages(page1, page2);
2876}
2877
2871#endif /* __KERNEL__ */ 2878#endif /* __KERNEL__ */
2872#endif /* _LINUX_MM_H */ 2879#endif /* _LINUX_MM_H */
diff --git a/mm/ksm.c b/mm/ksm.c
index 3dc4346411e4..dbee2eb4dd05 100644
--- a/mm/ksm.c
+++ b/mm/ksm.c
@@ -1029,24 +1029,6 @@ static u32 calc_checksum(struct page *page)
1029 return checksum; 1029 return checksum;
1030} 1030}
1031 1031
1032static int memcmp_pages(struct page *page1, struct page *page2)
1033{
1034 char *addr1, *addr2;
1035 int ret;
1036
1037 addr1 = kmap_atomic(page1);
1038 addr2 = kmap_atomic(page2);
1039 ret = memcmp(addr1, addr2, PAGE_SIZE);
1040 kunmap_atomic(addr2);
1041 kunmap_atomic(addr1);
1042 return ret;
1043}
1044
1045static inline int pages_identical(struct page *page1, struct page *page2)
1046{
1047 return !memcmp_pages(page1, page2);
1048}
1049
1050static int write_protect_page(struct vm_area_struct *vma, struct page *page, 1032static int write_protect_page(struct vm_area_struct *vma, struct page *page,
1051 pte_t *orig_pte) 1033 pte_t *orig_pte)
1052{ 1034{
diff --git a/mm/util.c b/mm/util.c
index bab284d69c8c..37f7b6711514 100644
--- a/mm/util.c
+++ b/mm/util.c
@@ -783,3 +783,16 @@ out_mm:
783out: 783out:
784 return res; 784 return res;
785} 785}
786
787int memcmp_pages(struct page *page1, struct page *page2)
788{
789 char *addr1, *addr2;
790 int ret;
791
792 addr1 = kmap_atomic(page1);
793 addr2 = kmap_atomic(page2);
794 ret = memcmp(addr1, addr2, PAGE_SIZE);
795 kunmap_atomic(addr2);
796 kunmap_atomic(addr1);
797 return ret;
798}