From: Guoyun Sun <sunguoyun@loongson.cn> To: Thomas Bogendoerfer <tsbogend@alpha.franken.de>, Paul Burton <paulburton@kernel.org> Cc: Daniel Silsby <dansilsby@gmail.com>, Jiaxun Yang <jiaxun.yang@flygoat.com>, Paul Cercueil <paul@crapouillou.net>, Dmitry Korotin <dkorotin@wavecomp.com>, Andrew Morton <akpm@linux-foundation.org>, Steven Price <steven.price@arm.com>, Geert Uytterhoeven <geert@linux-m68k.org>, Mike Rapoport <rppt@linux.ibm.com>, Anshuman Khandual <anshuman.khandual@arm.com>, linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org, Guoyun Sun <sunguoyun@loongson.cn>, TieZhu Yang <yangtiezhu@loongson.cn>, Xuefeng Li <lixuefeng@loongson.cn> Subject: [PATCH] mips/mm: Add page soft dirty tracking Date: Tue, 21 Apr 2020 17:15:27 +0800 Message-ID: <1587460527-13986-1-git-send-email-sunguoyun@loongson.cn> (raw) User space checkpoint and restart tool (CRIU) needs the page's change to be soft tracked. This allows to do a pre checkpoint and then dump only touched pages. Signed-off-by: Guoyun Sun <sunguoyun@loongson.cn> --- arch/mips/Kconfig | 1 + arch/mips/include/asm/pgtable-bits.h | 8 ++++-- arch/mips/include/asm/pgtable.h | 48 ++++++++++++++++++++++++++++++++++-- 3 files changed, 53 insertions(+), 4 deletions(-) diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index 690718b..642fb47 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig @@ -491,6 +491,7 @@ config MACH_LOONGSON64 select COMMON_CLK select USE_OF select BUILTIN_DTB + select HAVE_ARCH_SOFT_DIRTY help This enables the support of Loongson-2/3 family of machines. diff --git a/arch/mips/include/asm/pgtable-bits.h b/arch/mips/include/asm/pgtable-bits.h index 4da79b8..d43fb6f 100644 --- a/arch/mips/include/asm/pgtable-bits.h +++ b/arch/mips/include/asm/pgtable-bits.h @@ -55,6 +55,7 @@ enum pgtable_bits { #if defined(CONFIG_ARCH_HAS_PTE_SPECIAL) _PAGE_SPECIAL_SHIFT, #endif + _PAGE_SOFT_DIRTY_SHIFT, }; /* @@ -84,6 +85,7 @@ enum pgtable_bits { #if defined(CONFIG_ARCH_HAS_PTE_SPECIAL) _PAGE_SPECIAL_SHIFT, #endif + _PAGE_SOFT_DIRTY_SHIFT, }; #elif defined(CONFIG_CPU_R3K_TLB) @@ -99,6 +101,7 @@ enum pgtable_bits { #if defined(CONFIG_ARCH_HAS_PTE_SPECIAL) _PAGE_SPECIAL_SHIFT, #endif + _PAGE_SOFT_DIRTY_SHIFT, /* Used by TLB hardware (placed in EntryLo) */ _PAGE_GLOBAL_SHIFT = 8, @@ -125,7 +128,7 @@ enum pgtable_bits { #if defined(CONFIG_ARCH_HAS_PTE_SPECIAL) _PAGE_SPECIAL_SHIFT, #endif - + _PAGE_SOFT_DIRTY_SHIFT, /* Used by TLB hardware (placed in EntryLo*) */ #if defined(CONFIG_CPU_HAS_RIXI) _PAGE_NO_EXEC_SHIFT, @@ -152,6 +155,7 @@ enum pgtable_bits { #else # define _PAGE_SPECIAL 0 #endif +#define _PAGE_SOFT_DIRTY (1 << _PAGE_SOFT_DIRTY_SHIFT) /* Used by TLB hardware (placed in EntryLo*) */ #if defined(CONFIG_XPA) @@ -269,6 +273,6 @@ static inline uint64_t pte_to_entrylo(unsigned long pte_val) #define __WRITEABLE (_PAGE_SILENT_WRITE | _PAGE_WRITE | _PAGE_MODIFIED) #define _PAGE_CHG_MASK (_PAGE_ACCESSED | _PAGE_MODIFIED | \ - _PFN_MASK | _CACHE_MASK) + _PAGE_SOFT_DIRTY | _PFN_MASK | _CACHE_MASK) #endif /* _ASM_PGTABLE_BITS_H */ diff --git a/arch/mips/include/asm/pgtable.h b/arch/mips/include/asm/pgtable.h index f1801e7..64b07ff 100644 --- a/arch/mips/include/asm/pgtable.h +++ b/arch/mips/include/asm/pgtable.h @@ -400,7 +400,7 @@ static inline pte_t pte_mkwrite(pte_t pte) static inline pte_t pte_mkdirty(pte_t pte) { - pte_val(pte) |= _PAGE_MODIFIED; + pte_val(pte) |= _PAGE_MODIFIED | _PAGE_SOFT_DIRTY; if (pte_val(pte) & _PAGE_WRITE) pte_val(pte) |= _PAGE_SILENT_WRITE; return pte; @@ -423,6 +423,30 @@ static inline pte_t pte_mkhuge(pte_t pte) return pte; } #endif /* CONFIG_MIPS_HUGE_TLB_SUPPORT */ + +#ifdef CONFIG_HAVE_ARCH_SOFT_DIRTY +static inline bool pte_soft_dirty(pte_t pte) +{ + return pte_val(pte) & _PAGE_SOFT_DIRTY; +} +#define pte_swp_soft_dirty pte_soft_dirty + +static inline pte_t pte_mksoft_dirty(pte_t pte) +{ + pte_val(pte) |= _PAGE_SOFT_DIRTY; + return pte; +} +#define pte_swp_mksoft_dirty pte_mksoft_dirty + +static inline pte_t pte_clear_soft_dirty(pte_t pte) +{ + pte_val(pte) &= ~(_PAGE_SOFT_DIRTY); + return pte; +} +#define pte_swp_clear_soft_dirty pte_clear_soft_dirty + +#endif /* CONFIG_HAVE_ARCH_SOFT_DIRTY */ + #endif /* @@ -579,7 +603,7 @@ static inline pmd_t pmd_mkclean(pmd_t pmd) static inline pmd_t pmd_mkdirty(pmd_t pmd) { - pmd_val(pmd) |= _PAGE_MODIFIED; + pmd_val(pmd) |= _PAGE_MODIFIED | _PAGE_SOFT_DIRTY; if (pmd_val(pmd) & _PAGE_WRITE) pmd_val(pmd) |= _PAGE_SILENT_WRITE; @@ -608,6 +632,26 @@ static inline pmd_t pmd_mkyoung(pmd_t pmd) return pmd; } +#ifdef CONFIG_HAVE_ARCH_SOFT_DIRTY +static inline int pmd_soft_dirty(pmd_t pmd) +{ + return !!(pmd_val(pmd) & _PAGE_SOFT_DIRTY); +} + +static inline pmd_t pmd_mksoft_dirty(pmd_t pmd) +{ + pmd_val(pmd) |= _PAGE_SOFT_DIRTY; + return pmd; +} + +static inline pmd_t pmd_clear_soft_dirty(pmd_t pmd) +{ + pmd_val(pmd) &= ~(_PAGE_SOFT_DIRTY); + return pmd; +} + +#endif /* CONFIG_HAVE_ARCH_SOFT_DIRTY */ + /* Extern to avoid header file madness */ extern pmd_t mk_pmd(struct page *page, pgprot_t prot); -- 2.1.0
next reply index Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-04-21 9:15 Guoyun Sun [this message] 2020-04-26 16:54 ` Thomas Bogendoerfer 2020-04-26 17:09 ` Paul Cercueil 2020-04-27 9:04 ` Thomas Bogendoerfer 2020-04-26 17:10 ` Jiaxun Yang 2020-04-29 1:41 ` kbuild test robot
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1587460527-13986-1-git-send-email-sunguoyun@loongson.cn \ --to=sunguoyun@loongson.cn \ --cc=akpm@linux-foundation.org \ --cc=anshuman.khandual@arm.com \ --cc=dansilsby@gmail.com \ --cc=dkorotin@wavecomp.com \ --cc=geert@linux-m68k.org \ --cc=jiaxun.yang@flygoat.com \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mips@vger.kernel.org \ --cc=lixuefeng@loongson.cn \ --cc=paul@crapouillou.net \ --cc=paulburton@kernel.org \ --cc=rppt@linux.ibm.com \ --cc=steven.price@arm.com \ --cc=tsbogend@alpha.franken.de \ --cc=yangtiezhu@loongson.cn \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Linux-MIPS Archive on lore.kernel.org Archives are clonable: git clone --mirror https://lore.kernel.org/linux-mips/0 linux-mips/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 linux-mips linux-mips/ https://lore.kernel.org/linux-mips \ linux-mips@vger.kernel.org public-inbox-index linux-mips Example config snippet for mirrors Newsgroup available over NNTP: nntp://nntp.lore.kernel.org/org.kernel.vger.linux-mips AGPL code for this site: git clone https://public-inbox.org/public-inbox.git