From: Sasha Levin <levinsasha928@gmail.com> To: torvalds@linux-foundation.org Cc: tj@kernel.org, akpm@linux-foundation.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, paul.gortmaker@windriver.com, davem@davemloft.net, rostedt@goodmis.org, mingo@elte.hu, ebiederm@xmission.com, aarcange@redhat.com, ericvh@gmail.com, netdev@vger.kernel.org, josh@joshtriplett.org, eric.dumazet@gmail.com, mathieu.desnoyers@efficios.com, axboe@kernel.dk, agk@redhat.com, dm-devel@redhat.com, neilb@suse.de, ccaulfie@redhat.com, teigland@redhat.com, Trond.Myklebust@netapp.com, bfields@fieldses.org, fweisbec@gmail.com, jesse@nicira.com, venkat.x.venkatsubra@oracle.com, ejt@redhat.com, snitzer@redhat.com, edumazet@google.com, linux-nfs@vger.kernel.org, dev@openvswitch.org, rds-devel@oss.oracle.com, lw@cn.fujitsu.com, Sasha Levin <levinsasha928@gmail.com> Subject: [PATCH 03/16] mm,ksm: use new hashtable implementation Date: Tue, 14 Aug 2012 18:24:37 +0200 [thread overview] Message-ID: <1344961490-4068-4-git-send-email-levinsasha928@gmail.com> (raw) In-Reply-To: <1344961490-4068-1-git-send-email-levinsasha928@gmail.com> Switch ksm to use the new hashtable implementation. This reduces the amount of generic unrelated code in the ksm module. Signed-off-by: Sasha Levin <levinsasha928@gmail.com> --- mm/ksm.c | 33 +++++++++++++++------------------ 1 files changed, 15 insertions(+), 18 deletions(-) diff --git a/mm/ksm.c b/mm/ksm.c index 47c8853..5cb602e 100644 --- a/mm/ksm.c +++ b/mm/ksm.c @@ -33,7 +33,7 @@ #include <linux/mmu_notifier.h> #include <linux/swap.h> #include <linux/ksm.h> -#include <linux/hash.h> +#include <linux/hashtable.h> #include <linux/freezer.h> #include <linux/oom.h> @@ -156,9 +156,8 @@ struct rmap_item { static struct rb_root root_stable_tree = RB_ROOT; static struct rb_root root_unstable_tree = RB_ROOT; -#define MM_SLOTS_HASH_SHIFT 10 -#define MM_SLOTS_HASH_HEADS (1 << MM_SLOTS_HASH_SHIFT) -static struct hlist_head mm_slots_hash[MM_SLOTS_HASH_HEADS]; +#define MM_SLOTS_HASH_BITS 10 +static DEFINE_HASHTABLE(mm_slots_hash, MM_SLOTS_HASH_BITS); static struct mm_slot ksm_mm_head = { .mm_list = LIST_HEAD_INIT(ksm_mm_head.mm_list), @@ -275,26 +274,21 @@ static inline void free_mm_slot(struct mm_slot *mm_slot) static struct mm_slot *get_mm_slot(struct mm_struct *mm) { - struct mm_slot *mm_slot; - struct hlist_head *bucket; struct hlist_node *node; + struct mm_slot *slot; + + hash_for_each_possible(mm_slots_hash, slot, node, link, (unsigned long)mm) + if (slot->mm == mm) + return slot; - bucket = &mm_slots_hash[hash_ptr(mm, MM_SLOTS_HASH_SHIFT)]; - hlist_for_each_entry(mm_slot, node, bucket, link) { - if (mm == mm_slot->mm) - return mm_slot; - } return NULL; } static void insert_to_mm_slots_hash(struct mm_struct *mm, struct mm_slot *mm_slot) { - struct hlist_head *bucket; - - bucket = &mm_slots_hash[hash_ptr(mm, MM_SLOTS_HASH_SHIFT)]; mm_slot->mm = mm; - hlist_add_head(&mm_slot->link, bucket); + hash_add(mm_slots_hash, &mm_slot->link, (unsigned long)mm); } static inline int in_stable_tree(struct rmap_item *rmap_item) @@ -647,7 +641,7 @@ static int unmerge_and_remove_all_rmap_items(void) ksm_scan.mm_slot = list_entry(mm_slot->mm_list.next, struct mm_slot, mm_list); if (ksm_test_exit(mm)) { - hlist_del(&mm_slot->link); + hash_del(&mm_slot->link); list_del(&mm_slot->mm_list); spin_unlock(&ksm_mmlist_lock); @@ -1385,7 +1379,7 @@ next_mm: * or when all VM_MERGEABLE areas have been unmapped (and * mmap_sem then protects against race with MADV_MERGEABLE). */ - hlist_del(&slot->link); + hash_del(&slot->link); list_del(&slot->mm_list); spin_unlock(&ksm_mmlist_lock); @@ -1548,7 +1542,7 @@ void __ksm_exit(struct mm_struct *mm) mm_slot = get_mm_slot(mm); if (mm_slot && ksm_scan.mm_slot != mm_slot) { if (!mm_slot->rmap_list) { - hlist_del(&mm_slot->link); + hash_del(&mm_slot->link); list_del(&mm_slot->mm_list); easy_to_free = 1; } else { @@ -2024,6 +2018,9 @@ static int __init ksm_init(void) */ hotplug_memory_notifier(ksm_memory_callback, 100); #endif + + hash_init(mm_slots_hash); + return 0; out_free: -- 1.7.8.6
WARNING: multiple messages have this Message-ID (diff)
From: Sasha Levin <levinsasha928@gmail.com> To: torvalds@linux-foundation.org Cc: tj@kernel.org, akpm@linux-foundation.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, paul.gortmaker@windriver.com, davem@davemloft.net, rostedt@goodmis.org, mingo@elte.hu, ebiederm@xmission.com, aarcange@redhat.com, ericvh@gmail.com, netdev@vger.kernel.org, josh@joshtriplett.org, eric.dumazet@gmail.com, mathieu.desnoyers@efficios.com, axboe@kernel.dk, agk@redhat.com, dm-devel@redhat.com, neilb@suse.de, ccaulfie@redhat.com, teigland@redhat.com, Trond.Myklebust@netapp.com, bfields@fieldses.org, fweisbec@gmail.com, jesse@nicira.com, venkat.x.venkatsubra@oracle.com, ejt@redhat.com, snitzer@redhat.com, edumazet@google.com, linux-nfs@vger.kernel.org, dev@openvswitch.org, rds-devel@oss.oracle.com, lw@cn.fujitsu.com, Sasha Levin <levinsasha928@gmail.com> Subject: [PATCH 03/16] mm,ksm: use new hashtable implementation Date: Tue, 14 Aug 2012 18:24:37 +0200 [thread overview] Message-ID: <1344961490-4068-4-git-send-email-levinsasha928@gmail.com> (raw) In-Reply-To: <1344961490-4068-1-git-send-email-levinsasha928@gmail.com> Switch ksm to use the new hashtable implementation. This reduces the amount of generic unrelated code in the ksm module. Signed-off-by: Sasha Levin <levinsasha928@gmail.com> --- mm/ksm.c | 33 +++++++++++++++------------------ 1 files changed, 15 insertions(+), 18 deletions(-) diff --git a/mm/ksm.c b/mm/ksm.c index 47c8853..5cb602e 100644 --- a/mm/ksm.c +++ b/mm/ksm.c @@ -33,7 +33,7 @@ #include <linux/mmu_notifier.h> #include <linux/swap.h> #include <linux/ksm.h> -#include <linux/hash.h> +#include <linux/hashtable.h> #include <linux/freezer.h> #include <linux/oom.h> @@ -156,9 +156,8 @@ struct rmap_item { static struct rb_root root_stable_tree = RB_ROOT; static struct rb_root root_unstable_tree = RB_ROOT; -#define MM_SLOTS_HASH_SHIFT 10 -#define MM_SLOTS_HASH_HEADS (1 << MM_SLOTS_HASH_SHIFT) -static struct hlist_head mm_slots_hash[MM_SLOTS_HASH_HEADS]; +#define MM_SLOTS_HASH_BITS 10 +static DEFINE_HASHTABLE(mm_slots_hash, MM_SLOTS_HASH_BITS); static struct mm_slot ksm_mm_head = { .mm_list = LIST_HEAD_INIT(ksm_mm_head.mm_list), @@ -275,26 +274,21 @@ static inline void free_mm_slot(struct mm_slot *mm_slot) static struct mm_slot *get_mm_slot(struct mm_struct *mm) { - struct mm_slot *mm_slot; - struct hlist_head *bucket; struct hlist_node *node; + struct mm_slot *slot; + + hash_for_each_possible(mm_slots_hash, slot, node, link, (unsigned long)mm) + if (slot->mm == mm) + return slot; - bucket = &mm_slots_hash[hash_ptr(mm, MM_SLOTS_HASH_SHIFT)]; - hlist_for_each_entry(mm_slot, node, bucket, link) { - if (mm == mm_slot->mm) - return mm_slot; - } return NULL; } static void insert_to_mm_slots_hash(struct mm_struct *mm, struct mm_slot *mm_slot) { - struct hlist_head *bucket; - - bucket = &mm_slots_hash[hash_ptr(mm, MM_SLOTS_HASH_SHIFT)]; mm_slot->mm = mm; - hlist_add_head(&mm_slot->link, bucket); + hash_add(mm_slots_hash, &mm_slot->link, (unsigned long)mm); } static inline int in_stable_tree(struct rmap_item *rmap_item) @@ -647,7 +641,7 @@ static int unmerge_and_remove_all_rmap_items(void) ksm_scan.mm_slot = list_entry(mm_slot->mm_list.next, struct mm_slot, mm_list); if (ksm_test_exit(mm)) { - hlist_del(&mm_slot->link); + hash_del(&mm_slot->link); list_del(&mm_slot->mm_list); spin_unlock(&ksm_mmlist_lock); @@ -1385,7 +1379,7 @@ next_mm: * or when all VM_MERGEABLE areas have been unmapped (and * mmap_sem then protects against race with MADV_MERGEABLE). */ - hlist_del(&slot->link); + hash_del(&slot->link); list_del(&slot->mm_list); spin_unlock(&ksm_mmlist_lock); @@ -1548,7 +1542,7 @@ void __ksm_exit(struct mm_struct *mm) mm_slot = get_mm_slot(mm); if (mm_slot && ksm_scan.mm_slot != mm_slot) { if (!mm_slot->rmap_list) { - hlist_del(&mm_slot->link); + hash_del(&mm_slot->link); list_del(&mm_slot->mm_list); easy_to_free = 1; } else { @@ -2024,6 +2018,9 @@ static int __init ksm_init(void) */ hotplug_memory_notifier(ksm_memory_callback, 100); #endif + + hash_init(mm_slots_hash); + return 0; out_free: -- 1.7.8.6 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2012-08-14 16:25 UTC|newest] Thread overview: 83+ messages / expand[flat|nested] mbox.gz Atom feed top 2012-08-14 16:24 [PATCH 00/16] generic hashtable implementation Sasha Levin 2012-08-14 16:24 ` Sasha Levin 2012-08-14 16:24 ` Sasha Levin 2012-08-14 16:24 ` [PATCH 01/16] hashtable: introduce a small and naive hashtable Sasha Levin 2012-08-14 16:24 ` Sasha Levin 2012-08-14 16:24 ` Sasha Levin 2012-08-14 23:25 ` NeilBrown 2012-08-14 23:25 ` NeilBrown 2012-08-15 0:24 ` Sasha Levin 2012-08-15 0:24 ` Sasha Levin 2012-08-15 0:24 ` Sasha Levin 2012-08-15 0:28 ` Tejun Heo 2012-08-15 0:28 ` Tejun Heo 2012-08-14 16:24 ` [PATCH 02/16] user_ns: use new hashtable implementation Sasha Levin 2012-08-14 16:24 ` Sasha Levin 2012-08-14 23:52 ` Eric W. Biederman 2012-08-14 23:52 ` Eric W. Biederman 2012-08-14 23:52 ` Eric W. Biederman 2012-08-15 0:47 ` Sasha Levin 2012-08-15 0:47 ` Sasha Levin 2012-08-15 0:47 ` Sasha Levin 2012-08-15 1:08 ` Eric W. Biederman 2012-08-15 1:08 ` Eric W. Biederman 2012-08-15 1:08 ` Eric W. Biederman 2012-08-15 1:35 ` Sasha Levin 2012-08-15 1:35 ` Sasha Levin 2012-08-15 3:13 ` Eric W. Biederman 2012-08-15 3:13 ` Eric W. Biederman 2012-08-15 3:13 ` Eric W. Biederman 2012-08-15 3:31 ` Mathieu Desnoyers 2012-08-15 3:31 ` Mathieu Desnoyers 2012-08-15 13:40 ` Sasha Levin 2012-08-15 13:40 ` Sasha Levin 2012-08-15 13:40 ` Sasha Levin 2012-08-15 8:46 ` David Laight 2012-08-15 8:46 ` David Laight 2012-08-15 8:46 ` David Laight 2012-08-16 14:28 ` Mathieu Desnoyers 2012-08-16 14:28 ` Mathieu Desnoyers 2012-08-16 14:28 ` Mathieu Desnoyers 2012-08-18 21:52 ` Sasha Levin 2012-08-18 22:21 ` Eric W. Biederman 2012-08-14 16:24 ` Sasha Levin [this message] 2012-08-14 16:24 ` [PATCH 03/16] mm,ksm: " Sasha Levin 2012-08-14 16:24 ` [PATCH 04/16] workqueue: " Sasha Levin 2012-08-14 16:24 ` Sasha Levin 2012-08-14 16:24 ` Sasha Levin 2012-08-14 16:24 ` [PATCH 05/16] mm/huge_memory: " Sasha Levin 2012-08-14 16:24 ` Sasha Levin 2012-08-14 16:24 ` Sasha Levin 2012-08-14 16:24 ` [PATCH 06/16] tracepoint: " Sasha Levin 2012-08-14 16:24 ` Sasha Levin 2012-08-14 16:24 ` Sasha Levin 2012-08-14 16:24 ` [PATCH 07/16] net,9p: " Sasha Levin 2012-08-14 16:24 ` Sasha Levin 2012-08-14 16:24 ` [PATCH 08/16] block,elevator: " Sasha Levin 2012-08-14 16:24 ` Sasha Levin 2012-08-14 16:24 ` [PATCH 08/16] block, elevator: " Sasha Levin 2012-08-14 16:24 ` [PATCH 09/16] SUNRPC/cache: " Sasha Levin 2012-08-14 16:24 ` Sasha Levin 2012-08-14 16:24 ` Sasha Levin 2012-08-14 16:24 ` [PATCH 10/16] dlm: " Sasha Levin 2012-08-14 16:24 ` Sasha Levin 2012-08-14 16:24 ` Sasha Levin 2012-08-14 16:24 ` [PATCH 11/16] net,l2tp: " Sasha Levin 2012-08-14 16:24 ` Sasha Levin 2012-08-14 16:24 ` [PATCH 11/16] net, l2tp: " Sasha Levin 2012-08-14 16:24 ` [PATCH 12/16] dm: " Sasha Levin 2012-08-14 16:24 ` Sasha Levin 2012-08-14 16:24 ` Sasha Levin 2012-08-14 16:24 ` [PATCH 13/16] lockd: " Sasha Levin 2012-08-14 16:24 ` Sasha Levin 2012-08-14 16:24 ` Sasha Levin 2012-08-14 16:24 ` [PATCH 14/16] net,rds: " Sasha Levin 2012-08-14 16:24 ` Sasha Levin 2012-08-14 16:24 ` [PATCH 15/16] openvswitch: " Sasha Levin 2012-08-14 16:24 ` Sasha Levin 2012-08-14 16:24 ` Sasha Levin 2012-08-14 16:24 ` [PATCH 16/16] tracing output: " Sasha Levin 2012-08-14 16:24 ` Sasha Levin 2012-08-14 16:24 ` Sasha Levin 2012-08-14 18:16 ` [PATCH 00/16] generic " J. Bruce Fields 2012-08-14 18:16 ` J. Bruce Fields
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=1344961490-4068-4-git-send-email-levinsasha928@gmail.com \ --to=levinsasha928@gmail.com \ --cc=Trond.Myklebust@netapp.com \ --cc=aarcange@redhat.com \ --cc=agk@redhat.com \ --cc=akpm@linux-foundation.org \ --cc=axboe@kernel.dk \ --cc=bfields@fieldses.org \ --cc=ccaulfie@redhat.com \ --cc=davem@davemloft.net \ --cc=dev@openvswitch.org \ --cc=dm-devel@redhat.com \ --cc=ebiederm@xmission.com \ --cc=edumazet@google.com \ --cc=ejt@redhat.com \ --cc=eric.dumazet@gmail.com \ --cc=ericvh@gmail.com \ --cc=fweisbec@gmail.com \ --cc=jesse@nicira.com \ --cc=josh@joshtriplett.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=linux-nfs@vger.kernel.org \ --cc=lw@cn.fujitsu.com \ --cc=mathieu.desnoyers@efficios.com \ --cc=mingo@elte.hu \ --cc=neilb@suse.de \ --cc=netdev@vger.kernel.org \ --cc=paul.gortmaker@windriver.com \ --cc=rds-devel@oss.oracle.com \ --cc=rostedt@goodmis.org \ --cc=snitzer@redhat.com \ --cc=teigland@redhat.com \ --cc=tj@kernel.org \ --cc=torvalds@linux-foundation.org \ --cc=venkat.x.venkatsubra@oracle.com \ /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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
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.