diff options
author | Dima Zavin <dima@android.com> | 2011-07-07 20:27:59 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2011-07-08 08:02:53 -0400 |
commit | 732375c6a5a4cc825b676c922d547aba96b8ce15 (patch) | |
tree | 35002255d0e52ad478ffa7134b73c35452c502a0 | |
parent | 8edbb83e5bc3c7d5d76861fc61872105288d2610 (diff) |
plist: Remove the need to supply locks to plist heads
This was legacy code brought over from the RT tree and
is no longer necessary.
Signed-off-by: Dima Zavin <dima@android.com>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Daniel Walker <dwalker@codeaurora.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: Lai Jiangshan <laijs@cn.fujitsu.com>
Link: http://lkml.kernel.org/r/1310084879-10351-2-git-send-email-dima@android.com
Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r-- | include/linux/plist.h | 55 | ||||
-rw-r--r-- | include/linux/rtmutex.h | 4 | ||||
-rw-r--r-- | kernel/fork.c | 2 | ||||
-rw-r--r-- | kernel/futex.c | 2 | ||||
-rw-r--r-- | kernel/pm_qos_params.c | 6 | ||||
-rw-r--r-- | kernel/rtmutex.c | 2 | ||||
-rw-r--r-- | kernel/sched.c | 4 | ||||
-rw-r--r-- | lib/plist.c | 7 |
8 files changed, 14 insertions, 68 deletions
diff --git a/include/linux/plist.h b/include/linux/plist.h index c9b9f322c8d8..aa0fb390bd29 100644 --- a/include/linux/plist.h +++ b/include/linux/plist.h | |||
@@ -77,14 +77,9 @@ | |||
77 | 77 | ||
78 | #include <linux/kernel.h> | 78 | #include <linux/kernel.h> |
79 | #include <linux/list.h> | 79 | #include <linux/list.h> |
80 | #include <linux/spinlock_types.h> | ||
81 | 80 | ||
82 | struct plist_head { | 81 | struct plist_head { |
83 | struct list_head node_list; | 82 | struct list_head node_list; |
84 | #ifdef CONFIG_DEBUG_PI_LIST | ||
85 | raw_spinlock_t *rawlock; | ||
86 | spinlock_t *spinlock; | ||
87 | #endif | ||
88 | }; | 83 | }; |
89 | 84 | ||
90 | struct plist_node { | 85 | struct plist_node { |
@@ -93,37 +88,13 @@ struct plist_node { | |||
93 | struct list_head node_list; | 88 | struct list_head node_list; |
94 | }; | 89 | }; |
95 | 90 | ||
96 | #ifdef CONFIG_DEBUG_PI_LIST | ||
97 | # define PLIST_HEAD_LOCK_INIT(_lock) .spinlock = _lock | ||
98 | # define PLIST_HEAD_LOCK_INIT_RAW(_lock) .rawlock = _lock | ||
99 | #else | ||
100 | # define PLIST_HEAD_LOCK_INIT(_lock) | ||
101 | # define PLIST_HEAD_LOCK_INIT_RAW(_lock) | ||
102 | #endif | ||
103 | |||
104 | #define _PLIST_HEAD_INIT(head) \ | ||
105 | .node_list = LIST_HEAD_INIT((head).node_list) | ||
106 | |||
107 | /** | 91 | /** |
108 | * PLIST_HEAD_INIT - static struct plist_head initializer | 92 | * PLIST_HEAD_INIT - static struct plist_head initializer |
109 | * @head: struct plist_head variable name | 93 | * @head: struct plist_head variable name |
110 | * @_lock: lock to initialize for this list | ||
111 | */ | ||
112 | #define PLIST_HEAD_INIT(head, _lock) \ | ||
113 | { \ | ||
114 | _PLIST_HEAD_INIT(head), \ | ||
115 | PLIST_HEAD_LOCK_INIT(&(_lock)) \ | ||
116 | } | ||
117 | |||
118 | /** | ||
119 | * PLIST_HEAD_INIT_RAW - static struct plist_head initializer | ||
120 | * @head: struct plist_head variable name | ||
121 | * @_lock: lock to initialize for this list | ||
122 | */ | 94 | */ |
123 | #define PLIST_HEAD_INIT_RAW(head, _lock) \ | 95 | #define PLIST_HEAD_INIT(head) \ |
124 | { \ | 96 | { \ |
125 | _PLIST_HEAD_INIT(head), \ | 97 | .node_list = LIST_HEAD_INIT((head).node_list) \ |
126 | PLIST_HEAD_LOCK_INIT_RAW(&(_lock)) \ | ||
127 | } | 98 | } |
128 | 99 | ||
129 | /** | 100 | /** |
@@ -141,31 +112,11 @@ struct plist_node { | |||
141 | /** | 112 | /** |
142 | * plist_head_init - dynamic struct plist_head initializer | 113 | * plist_head_init - dynamic struct plist_head initializer |
143 | * @head: &struct plist_head pointer | 114 | * @head: &struct plist_head pointer |
144 | * @lock: spinlock protecting the list (debugging) | ||
145 | */ | 115 | */ |
146 | static inline void | 116 | static inline void |
147 | plist_head_init(struct plist_head *head, spinlock_t *lock) | 117 | plist_head_init(struct plist_head *head) |
148 | { | 118 | { |
149 | INIT_LIST_HEAD(&head->node_list); | 119 | INIT_LIST_HEAD(&head->node_list); |
150 | #ifdef CONFIG_DEBUG_PI_LIST | ||
151 | head->spinlock = lock; | ||
152 | head->rawlock = NULL; | ||
153 | #endif | ||
154 | } | ||
155 | |||
156 | /** | ||
157 | * plist_head_init_raw - dynamic struct plist_head initializer | ||
158 | * @head: &struct plist_head pointer | ||
159 | * @lock: raw_spinlock protecting the list (debugging) | ||
160 | */ | ||
161 | static inline void | ||
162 | plist_head_init_raw(struct plist_head *head, raw_spinlock_t *lock) | ||
163 | { | ||
164 | INIT_LIST_HEAD(&head->node_list); | ||
165 | #ifdef CONFIG_DEBUG_PI_LIST | ||
166 | head->rawlock = lock; | ||
167 | head->spinlock = NULL; | ||
168 | #endif | ||
169 | } | 120 | } |
170 | 121 | ||
171 | /** | 122 | /** |
diff --git a/include/linux/rtmutex.h b/include/linux/rtmutex.h index 8d522ffeda33..de17134244f3 100644 --- a/include/linux/rtmutex.h +++ b/include/linux/rtmutex.h | |||
@@ -66,7 +66,7 @@ struct hrtimer_sleeper; | |||
66 | 66 | ||
67 | #define __RT_MUTEX_INITIALIZER(mutexname) \ | 67 | #define __RT_MUTEX_INITIALIZER(mutexname) \ |
68 | { .wait_lock = __RAW_SPIN_LOCK_UNLOCKED(mutexname.wait_lock) \ | 68 | { .wait_lock = __RAW_SPIN_LOCK_UNLOCKED(mutexname.wait_lock) \ |
69 | , .wait_list = PLIST_HEAD_INIT_RAW(mutexname.wait_list, mutexname.wait_lock) \ | 69 | , .wait_list = PLIST_HEAD_INIT(mutexname.wait_list) \ |
70 | , .owner = NULL \ | 70 | , .owner = NULL \ |
71 | __DEBUG_RT_MUTEX_INITIALIZER(mutexname)} | 71 | __DEBUG_RT_MUTEX_INITIALIZER(mutexname)} |
72 | 72 | ||
@@ -100,7 +100,7 @@ extern void rt_mutex_unlock(struct rt_mutex *lock); | |||
100 | 100 | ||
101 | #ifdef CONFIG_RT_MUTEXES | 101 | #ifdef CONFIG_RT_MUTEXES |
102 | # define INIT_RT_MUTEXES(tsk) \ | 102 | # define INIT_RT_MUTEXES(tsk) \ |
103 | .pi_waiters = PLIST_HEAD_INIT(tsk.pi_waiters, tsk.pi_lock), \ | 103 | .pi_waiters = PLIST_HEAD_INIT(tsk.pi_waiters), \ |
104 | INIT_RT_MUTEX_DEBUG(tsk) | 104 | INIT_RT_MUTEX_DEBUG(tsk) |
105 | #else | 105 | #else |
106 | # define INIT_RT_MUTEXES(tsk) | 106 | # define INIT_RT_MUTEXES(tsk) |
diff --git a/kernel/fork.c b/kernel/fork.c index 0276c30401a0..7517a53d50e3 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
@@ -1013,7 +1013,7 @@ static void rt_mutex_init_task(struct task_struct *p) | |||
1013 | { | 1013 | { |
1014 | raw_spin_lock_init(&p->pi_lock); | 1014 | raw_spin_lock_init(&p->pi_lock); |
1015 | #ifdef CONFIG_RT_MUTEXES | 1015 | #ifdef CONFIG_RT_MUTEXES |
1016 | plist_head_init_raw(&p->pi_waiters, &p->pi_lock); | 1016 | plist_head_init(&p->pi_waiters); |
1017 | p->pi_blocked_on = NULL; | 1017 | p->pi_blocked_on = NULL; |
1018 | #endif | 1018 | #endif |
1019 | } | 1019 | } |
diff --git a/kernel/futex.c b/kernel/futex.c index fe28dc282eae..3fbc76cbb9aa 100644 --- a/kernel/futex.c +++ b/kernel/futex.c | |||
@@ -2697,7 +2697,7 @@ static int __init futex_init(void) | |||
2697 | futex_cmpxchg_enabled = 1; | 2697 | futex_cmpxchg_enabled = 1; |
2698 | 2698 | ||
2699 | for (i = 0; i < ARRAY_SIZE(futex_queues); i++) { | 2699 | for (i = 0; i < ARRAY_SIZE(futex_queues); i++) { |
2700 | plist_head_init(&futex_queues[i].chain, &futex_queues[i].lock); | 2700 | plist_head_init(&futex_queues[i].chain); |
2701 | spin_lock_init(&futex_queues[i].lock); | 2701 | spin_lock_init(&futex_queues[i].lock); |
2702 | } | 2702 | } |
2703 | 2703 | ||
diff --git a/kernel/pm_qos_params.c b/kernel/pm_qos_params.c index 6824ca7d4d0c..37f05d0f0793 100644 --- a/kernel/pm_qos_params.c +++ b/kernel/pm_qos_params.c | |||
@@ -74,7 +74,7 @@ static DEFINE_SPINLOCK(pm_qos_lock); | |||
74 | static struct pm_qos_object null_pm_qos; | 74 | static struct pm_qos_object null_pm_qos; |
75 | static BLOCKING_NOTIFIER_HEAD(cpu_dma_lat_notifier); | 75 | static BLOCKING_NOTIFIER_HEAD(cpu_dma_lat_notifier); |
76 | static struct pm_qos_object cpu_dma_pm_qos = { | 76 | static struct pm_qos_object cpu_dma_pm_qos = { |
77 | .requests = PLIST_HEAD_INIT(cpu_dma_pm_qos.requests, pm_qos_lock), | 77 | .requests = PLIST_HEAD_INIT(cpu_dma_pm_qos.requests), |
78 | .notifiers = &cpu_dma_lat_notifier, | 78 | .notifiers = &cpu_dma_lat_notifier, |
79 | .name = "cpu_dma_latency", | 79 | .name = "cpu_dma_latency", |
80 | .target_value = PM_QOS_CPU_DMA_LAT_DEFAULT_VALUE, | 80 | .target_value = PM_QOS_CPU_DMA_LAT_DEFAULT_VALUE, |
@@ -84,7 +84,7 @@ static struct pm_qos_object cpu_dma_pm_qos = { | |||
84 | 84 | ||
85 | static BLOCKING_NOTIFIER_HEAD(network_lat_notifier); | 85 | static BLOCKING_NOTIFIER_HEAD(network_lat_notifier); |
86 | static struct pm_qos_object network_lat_pm_qos = { | 86 | static struct pm_qos_object network_lat_pm_qos = { |
87 | .requests = PLIST_HEAD_INIT(network_lat_pm_qos.requests, pm_qos_lock), | 87 | .requests = PLIST_HEAD_INIT(network_lat_pm_qos.requests), |
88 | .notifiers = &network_lat_notifier, | 88 | .notifiers = &network_lat_notifier, |
89 | .name = "network_latency", | 89 | .name = "network_latency", |
90 | .target_value = PM_QOS_NETWORK_LAT_DEFAULT_VALUE, | 90 | .target_value = PM_QOS_NETWORK_LAT_DEFAULT_VALUE, |
@@ -95,7 +95,7 @@ static struct pm_qos_object network_lat_pm_qos = { | |||
95 | 95 | ||
96 | static BLOCKING_NOTIFIER_HEAD(network_throughput_notifier); | 96 | static BLOCKING_NOTIFIER_HEAD(network_throughput_notifier); |
97 | static struct pm_qos_object network_throughput_pm_qos = { | 97 | static struct pm_qos_object network_throughput_pm_qos = { |
98 | .requests = PLIST_HEAD_INIT(network_throughput_pm_qos.requests, pm_qos_lock), | 98 | .requests = PLIST_HEAD_INIT(network_throughput_pm_qos.requests), |
99 | .notifiers = &network_throughput_notifier, | 99 | .notifiers = &network_throughput_notifier, |
100 | .name = "network_throughput", | 100 | .name = "network_throughput", |
101 | .target_value = PM_QOS_NETWORK_THROUGHPUT_DEFAULT_VALUE, | 101 | .target_value = PM_QOS_NETWORK_THROUGHPUT_DEFAULT_VALUE, |
diff --git a/kernel/rtmutex.c b/kernel/rtmutex.c index ab449117aaf2..255e1662acdb 100644 --- a/kernel/rtmutex.c +++ b/kernel/rtmutex.c | |||
@@ -890,7 +890,7 @@ void __rt_mutex_init(struct rt_mutex *lock, const char *name) | |||
890 | { | 890 | { |
891 | lock->owner = NULL; | 891 | lock->owner = NULL; |
892 | raw_spin_lock_init(&lock->wait_lock); | 892 | raw_spin_lock_init(&lock->wait_lock); |
893 | plist_head_init_raw(&lock->wait_list, &lock->wait_lock); | 893 | plist_head_init(&lock->wait_list); |
894 | 894 | ||
895 | debug_rt_mutex_init(lock, name); | 895 | debug_rt_mutex_init(lock, name); |
896 | } | 896 | } |
diff --git a/kernel/sched.c b/kernel/sched.c index 3f2e502d609b..71bc127e96ba 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
@@ -7781,7 +7781,7 @@ static void init_rt_rq(struct rt_rq *rt_rq, struct rq *rq) | |||
7781 | #ifdef CONFIG_SMP | 7781 | #ifdef CONFIG_SMP |
7782 | rt_rq->rt_nr_migratory = 0; | 7782 | rt_rq->rt_nr_migratory = 0; |
7783 | rt_rq->overloaded = 0; | 7783 | rt_rq->overloaded = 0; |
7784 | plist_head_init_raw(&rt_rq->pushable_tasks, &rq->lock); | 7784 | plist_head_init(&rt_rq->pushable_tasks); |
7785 | #endif | 7785 | #endif |
7786 | 7786 | ||
7787 | rt_rq->rt_time = 0; | 7787 | rt_rq->rt_time = 0; |
@@ -7986,7 +7986,7 @@ void __init sched_init(void) | |||
7986 | #endif | 7986 | #endif |
7987 | 7987 | ||
7988 | #ifdef CONFIG_RT_MUTEXES | 7988 | #ifdef CONFIG_RT_MUTEXES |
7989 | plist_head_init_raw(&init_task.pi_waiters, &init_task.pi_lock); | 7989 | plist_head_init(&init_task.pi_waiters); |
7990 | #endif | 7990 | #endif |
7991 | 7991 | ||
7992 | /* | 7992 | /* |
diff --git a/lib/plist.c b/lib/plist.c index 0ae7e6431726..a0a4da489c22 100644 --- a/lib/plist.c +++ b/lib/plist.c | |||
@@ -56,11 +56,6 @@ static void plist_check_list(struct list_head *top) | |||
56 | 56 | ||
57 | static void plist_check_head(struct plist_head *head) | 57 | static void plist_check_head(struct plist_head *head) |
58 | { | 58 | { |
59 | WARN_ON(head != &test_head && !head->rawlock && !head->spinlock); | ||
60 | if (head->rawlock) | ||
61 | WARN_ON_SMP(!raw_spin_is_locked(head->rawlock)); | ||
62 | if (head->spinlock) | ||
63 | WARN_ON_SMP(!spin_is_locked(head->spinlock)); | ||
64 | if (!plist_head_empty(head)) | 59 | if (!plist_head_empty(head)) |
65 | plist_check_list(&plist_first(head)->prio_list); | 60 | plist_check_list(&plist_first(head)->prio_list); |
66 | plist_check_list(&head->node_list); | 61 | plist_check_list(&head->node_list); |
@@ -180,7 +175,7 @@ static int __init plist_test(void) | |||
180 | unsigned int r = local_clock(); | 175 | unsigned int r = local_clock(); |
181 | 176 | ||
182 | printk(KERN_INFO "start plist test\n"); | 177 | printk(KERN_INFO "start plist test\n"); |
183 | plist_head_init(&test_head, NULL); | 178 | plist_head_init(&test_head); |
184 | for (i = 0; i < ARRAY_SIZE(test_node); i++) | 179 | for (i = 0; i < ARRAY_SIZE(test_node); i++) |
185 | plist_node_init(test_node + i, 0); | 180 | plist_node_init(test_node + i, 0); |
186 | 181 | ||