diff for duplicates of <20200116064531.483522-10-aneesh.kumar@linux.ibm.com> diff --git a/a/1.txt b/N1/1.txt index f6033fe..c968301 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -39,22 +39,22 @@ index c35668fbf4d4..98de654b79b3 100644 @@ -393,8 +393,12 @@ config HAVE_ARCH_JUMP_LABEL config HAVE_ARCH_JUMP_LABEL_RELATIVE bool - + +config MMU_GATHER_TABLE_FREE + bool + config MMU_GATHER_RCU_TABLE_FREE bool + select MMU_GATHER_TABLE_FREE - + config MMU_GATHER_PAGE_SIZE bool @@ -404,6 +408,7 @@ config MMU_GATHER_NO_RANGE - + config MMU_GATHER_NO_GATHER bool + depends on MMU_GATHER_TABLE_FREE - + config ARCH_HAVE_NMI_SAFE_CMPXCHG bool diff --git a/arch/arm/include/asm/tlb.h b/arch/arm/include/asm/tlb.h @@ -62,9 +62,9 @@ index 46a21cee3442..4d4e7b6aabff 100644 --- a/arch/arm/include/asm/tlb.h +++ b/arch/arm/include/asm/tlb.h @@ -37,10 +37,6 @@ static inline void __tlb_remove_table(void *_table) - + #include <asm-generic/tlb.h> - + -#ifndef CONFIG_MMU_GATHER_RCU_TABLE_FREE -#define tlb_remove_table(tlb, entry) tlb_remove_page(tlb, entry) -#endif @@ -125,7 +125,7 @@ index ca0fe75b5355..f391f6b500b4 100644 @@ -155,37 +171,12 @@ * various ptep_get_and_clear() functions. */ - + -#ifdef CONFIG_MMU_GATHER_RCU_TABLE_FREE -/* - * Semi RCU freeing of the page directories. @@ -165,9 +165,9 @@ index ca0fe75b5355..f391f6b500b4 100644 void *tables[0]; }; @@ -195,6 +186,17 @@ struct mmu_table_batch { - + extern void tlb_remove_table(struct mmu_gather *tlb, void *table); - + +#else /* !CONFIG_MMU_GATHER_HAVE_TABLE_FREE */ + +/* @@ -185,23 +185,23 @@ index ca0fe75b5355..f391f6b500b4 100644 @@ -248,7 +250,7 @@ extern bool __tlb_remove_page_size(struct mmu_gather *tlb, struct page *page, struct mmu_gather { struct mm_struct *mm; - + -#ifdef CONFIG_MMU_GATHER_RCU_TABLE_FREE +#ifdef CONFIG_MMU_GATHER_TABLE_FREE struct mmu_table_batch *batch; #endif - + diff --git a/mm/mmu_gather.c b/mm/mmu_gather.c index a28c74328085..a3538cb2bcbe 100644 --- a/mm/mmu_gather.c +++ b/mm/mmu_gather.c @@ -91,56 +91,106 @@ bool __tlb_remove_page_size(struct mmu_gather *tlb, struct page *page, int page_ - + #endif /* MMU_GATHER_NO_GATHER */ - + -#ifdef CONFIG_MMU_GATHER_RCU_TABLE_FREE +#ifdef CONFIG_MMU_GATHER_TABLE_FREE - + -/* - * See the comment near struct mmu_table_batch. - */ @@ -216,7 +216,7 @@ index a28c74328085..a3538cb2bcbe 100644 +} + +#ifdef CONFIG_MMU_GATHER_RCU_TABLE_FREE - + /* - * If we want tlb_remove_table() to imply TLB invalidates. + * Semi RCU freeing of the page directories. @@ -257,12 +257,12 @@ index a28c74328085..a3538cb2bcbe 100644 - tlb_flush_mmu_tlbonly(tlb); - } -} - + static void tlb_remove_table_smp_sync(void *arg) { /* Simply deliver the interrupt */ } - + -static void tlb_remove_table_one(void *table) +static void tlb_remove_table_sync_one(void) { @@ -277,24 +277,24 @@ index a28c74328085..a3538cb2bcbe 100644 smp_call_function(tlb_remove_table_smp_sync, NULL, 1); - __tlb_remove_table(table); } - + static void tlb_remove_table_rcu(struct rcu_head *head) { - struct mmu_table_batch *batch; - int i; + __tlb_remove_table_free(container_of(head, struct mmu_table_batch, rcu)); +} - + - batch = container_of(head, struct mmu_table_batch, rcu); +static void tlb_remove_table_free(struct mmu_table_batch *batch) +{ + call_rcu(&batch->rcu, tlb_remove_table_rcu); +} - + - for (i = 0; i < batch->nr; i++) - __tlb_remove_table(batch->tables[i]); +#else /* !CONFIG_MMU_GATHER_RCU_TABLE_FREE */ - + - free_page((unsigned long)batch); +static void tlb_remove_table_sync_one(void) { } + @@ -325,10 +325,10 @@ index a28c74328085..a3538cb2bcbe 100644 + tlb_remove_table_sync_one(); + __tlb_remove_table(table); } - + static void tlb_table_flush(struct mmu_gather *tlb) @@ -149,7 +199,7 @@ static void tlb_table_flush(struct mmu_gather *tlb) - + if (*batch) { tlb_table_invalidate(tlb); - call_rcu(&(*batch)->rcu, tlb_remove_table_rcu); @@ -339,7 +339,7 @@ index a28c74328085..a3538cb2bcbe 100644 @@ -173,13 +223,21 @@ void tlb_remove_table(struct mmu_gather *tlb, void *table) tlb_table_flush(tlb); } - + -#endif /* CONFIG_MMU_GATHER_RCU_TABLE_FREE */ +static inline void tlb_table_init(struct mmu_gather *tlb) +{ @@ -352,7 +352,7 @@ index a28c74328085..a3538cb2bcbe 100644 +static inline void tlb_table_init(struct mmu_gather *tlb) { } + +#endif /* CONFIG_MMU_GATHER_TABLE_FREE */ - + static void tlb_flush_mmu_free(struct mmu_gather *tlb) { -#ifdef CONFIG_MMU_GATHER_RCU_TABLE_FREE @@ -364,7 +364,7 @@ index a28c74328085..a3538cb2bcbe 100644 @@ -220,9 +278,7 @@ void tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm, tlb->batch_count = 0; #endif - + -#ifdef CONFIG_MMU_GATHER_RCU_TABLE_FREE - tlb->batch = NULL; -#endif diff --git a/a/content_digest b/N1/content_digest index f34936a..53cb00d 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -54,22 +54,22 @@ "@@ -393,8 +393,12 @@ config HAVE_ARCH_JUMP_LABEL\n" " config HAVE_ARCH_JUMP_LABEL_RELATIVE\n" " \tbool\n" - " \n" + "\n" "+config MMU_GATHER_TABLE_FREE\n" "+\tbool\n" "+\n" " config MMU_GATHER_RCU_TABLE_FREE\n" " \tbool\n" "+\tselect MMU_GATHER_TABLE_FREE\n" - " \n" + "\n" " config MMU_GATHER_PAGE_SIZE\n" " \tbool\n" "@@ -404,6 +408,7 @@ config MMU_GATHER_NO_RANGE\n" - " \n" + "\n" " config MMU_GATHER_NO_GATHER\n" " \tbool\n" "+\tdepends on MMU_GATHER_TABLE_FREE\n" - " \n" + "\n" " config ARCH_HAVE_NMI_SAFE_CMPXCHG\n" " \tbool\n" "diff --git a/arch/arm/include/asm/tlb.h b/arch/arm/include/asm/tlb.h\n" @@ -77,9 +77,9 @@ "--- a/arch/arm/include/asm/tlb.h\n" "+++ b/arch/arm/include/asm/tlb.h\n" "@@ -37,10 +37,6 @@ static inline void __tlb_remove_table(void *_table)\n" - " \n" + "\n" " #include <asm-generic/tlb.h>\n" - " \n" + "\n" "-#ifndef CONFIG_MMU_GATHER_RCU_TABLE_FREE\n" "-#define tlb_remove_table(tlb, entry) tlb_remove_page(tlb, entry)\n" "-#endif\n" @@ -140,7 +140,7 @@ "@@ -155,37 +171,12 @@\n" " * various ptep_get_and_clear() functions.\n" " */\n" - " \n" + "\n" "-#ifdef CONFIG_MMU_GATHER_RCU_TABLE_FREE\n" "-/*\n" "- * Semi RCU freeing of the page directories.\n" @@ -180,9 +180,9 @@ " \tvoid\t\t\t*tables[0];\n" " };\n" "@@ -195,6 +186,17 @@ struct mmu_table_batch {\n" - " \n" + "\n" " extern void tlb_remove_table(struct mmu_gather *tlb, void *table);\n" - " \n" + "\n" "+#else /* !CONFIG_MMU_GATHER_HAVE_TABLE_FREE */\n" "+\n" "+/*\n" @@ -200,23 +200,23 @@ "@@ -248,7 +250,7 @@ extern bool __tlb_remove_page_size(struct mmu_gather *tlb, struct page *page,\n" " struct mmu_gather {\n" " \tstruct mm_struct\t*mm;\n" - " \n" + "\n" "-#ifdef CONFIG_MMU_GATHER_RCU_TABLE_FREE\n" "+#ifdef CONFIG_MMU_GATHER_TABLE_FREE\n" " \tstruct mmu_table_batch\t*batch;\n" " #endif\n" - " \n" + "\n" "diff --git a/mm/mmu_gather.c b/mm/mmu_gather.c\n" "index a28c74328085..a3538cb2bcbe 100644\n" "--- a/mm/mmu_gather.c\n" "+++ b/mm/mmu_gather.c\n" "@@ -91,56 +91,106 @@ bool __tlb_remove_page_size(struct mmu_gather *tlb, struct page *page, int page_\n" - " \n" + "\n" " #endif /* MMU_GATHER_NO_GATHER */\n" - " \n" + "\n" "-#ifdef CONFIG_MMU_GATHER_RCU_TABLE_FREE\n" "+#ifdef CONFIG_MMU_GATHER_TABLE_FREE\n" - " \n" + "\n" "-/*\n" "- * See the comment near struct mmu_table_batch.\n" "- */\n" @@ -231,7 +231,7 @@ "+}\n" "+\n" "+#ifdef CONFIG_MMU_GATHER_RCU_TABLE_FREE\n" - " \n" + "\n" " /*\n" "- * If we want tlb_remove_table() to imply TLB invalidates.\n" "+ * Semi RCU freeing of the page directories.\n" @@ -272,12 +272,12 @@ "-\t\ttlb_flush_mmu_tlbonly(tlb);\n" "-\t}\n" "-}\n" - " \n" + "\n" " static void tlb_remove_table_smp_sync(void *arg)\n" " {\n" " \t/* Simply deliver the interrupt */\n" " }\n" - " \n" + "\n" "-static void tlb_remove_table_one(void *table)\n" "+static void tlb_remove_table_sync_one(void)\n" " {\n" @@ -292,24 +292,24 @@ " \tsmp_call_function(tlb_remove_table_smp_sync, NULL, 1);\n" "-\t__tlb_remove_table(table);\n" " }\n" - " \n" + "\n" " static void tlb_remove_table_rcu(struct rcu_head *head)\n" " {\n" "-\tstruct mmu_table_batch *batch;\n" "-\tint i;\n" "+\t__tlb_remove_table_free(container_of(head, struct mmu_table_batch, rcu));\n" "+}\n" - " \n" + "\n" "-\tbatch = container_of(head, struct mmu_table_batch, rcu);\n" "+static void tlb_remove_table_free(struct mmu_table_batch *batch)\n" "+{\n" "+\tcall_rcu(&batch->rcu, tlb_remove_table_rcu);\n" "+}\n" - " \n" + "\n" "-\tfor (i = 0; i < batch->nr; i++)\n" "-\t\t__tlb_remove_table(batch->tables[i]);\n" "+#else /* !CONFIG_MMU_GATHER_RCU_TABLE_FREE */\n" - " \n" + "\n" "-\tfree_page((unsigned long)batch);\n" "+static void tlb_remove_table_sync_one(void) { }\n" "+\n" @@ -340,10 +340,10 @@ "+\ttlb_remove_table_sync_one();\n" "+\t__tlb_remove_table(table);\n" " }\n" - " \n" + "\n" " static void tlb_table_flush(struct mmu_gather *tlb)\n" "@@ -149,7 +199,7 @@ static void tlb_table_flush(struct mmu_gather *tlb)\n" - " \n" + "\n" " \tif (*batch) {\n" " \t\ttlb_table_invalidate(tlb);\n" "-\t\tcall_rcu(&(*batch)->rcu, tlb_remove_table_rcu);\n" @@ -354,7 +354,7 @@ "@@ -173,13 +223,21 @@ void tlb_remove_table(struct mmu_gather *tlb, void *table)\n" " \t\ttlb_table_flush(tlb);\n" " }\n" - " \n" + "\n" "-#endif /* CONFIG_MMU_GATHER_RCU_TABLE_FREE */\n" "+static inline void tlb_table_init(struct mmu_gather *tlb)\n" "+{\n" @@ -367,7 +367,7 @@ "+static inline void tlb_table_init(struct mmu_gather *tlb) { }\n" "+\n" "+#endif /* CONFIG_MMU_GATHER_TABLE_FREE */\n" - " \n" + "\n" " static void tlb_flush_mmu_free(struct mmu_gather *tlb)\n" " {\n" "-#ifdef CONFIG_MMU_GATHER_RCU_TABLE_FREE\n" @@ -379,7 +379,7 @@ "@@ -220,9 +278,7 @@ void tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm,\n" " \ttlb->batch_count = 0;\n" " #endif\n" - " \n" + "\n" "-#ifdef CONFIG_MMU_GATHER_RCU_TABLE_FREE\n" "-\ttlb->batch = NULL;\n" "-#endif\n" @@ -390,4 +390,4 @@ "-- \n" 2.24.1 -38daa02ae48a8a27ba1c478be131170edd9d36f20626b0edc2dfb7c8974709e3 +cc24408477a54a17e0c1f9f1204758b4ecb52b7feed74432e74a218a66d049df
diff --git a/a/content_digest b/N2/content_digest index f34936a..7dc6563 100644 --- a/a/content_digest +++ b/N2/content_digest @@ -6,10 +6,10 @@ peterz@infradead.org will@kernel.org " mpe@ellerman.id.au\0" - "Cc\0linux-mm@kvack.org" - linux-kernel@vger.kernel.org - linux-arch@vger.kernel.org + "Cc\0linux-arch@vger.kernel.org" + linux-mm@kvack.org linuxppc-dev@lists.ozlabs.org + linux-kernel@vger.kernel.org " Aneesh Kumar K . V <aneesh.kumar@linux.ibm.com>\0" "\00:1\0" "b\0" @@ -390,4 +390,4 @@ "-- \n" 2.24.1 -38daa02ae48a8a27ba1c478be131170edd9d36f20626b0edc2dfb7c8974709e3 +e56ea0530a269b3f61c621fa3387b87d2502b83b7ca4544aec1276f45c9e6da9
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.