aboutsummaryrefslogtreecommitdiffstats
path: root/litmus
diff options
context:
space:
mode:
authorChristopher Kenna <cjk@cs.unc.edu>2012-04-01 19:24:46 -0400
committerChristopher Kenna <cjk@cs.unc.edu>2012-04-01 19:24:46 -0400
commitdb4d9fcd3dfbda54b351ef42c13d93a00009784f (patch)
tree2fe93b1420cc8eb74c44e10cc1ab07b5f5e755b3 /litmus
parent9ba35c84953f070616b00237975de9206b698afd (diff)
minor clean-up
Diffstat (limited to 'litmus')
-rw-r--r--litmus/color.c45
-rw-r--r--litmus/color_proc.c16
2 files changed, 39 insertions, 22 deletions
diff --git a/litmus/color.c b/litmus/color.c
index 1077473c8ae9..aefb76e36626 100644
--- a/litmus/color.c
+++ b/litmus/color.c
@@ -57,17 +57,20 @@ void add_page_to_color_list(struct page *page)
57struct page* get_colored_page(unsigned long color) 57struct page* get_colored_page(unsigned long color)
58{ 58{
59 struct color_group *cgroup; 59 struct color_group *cgroup;
60 struct page *page; 60 struct page *page = NULL;
61 BUG_ON(color >= nr_colors); 61 BUG_ON(color >= nr_colors);
62 cgroup = &color_groups[color]; 62 cgroup = &color_groups[color];
63 spin_lock(&cgroup->lock); 63 spin_lock(&cgroup->lock);
64 BUG_ON(!atomic_read(&cgroup->nr_pages)); 64 if (unlikely(!atomic_read(&cgroup->nr_pages))) {
65 printk(KERN_WARNING "no free %lu colored pages.\n", color);
66 goto out_unlock;
67 }
65 page = list_first_entry(&cgroup->list, struct page, lru); 68 page = list_first_entry(&cgroup->list, struct page, lru);
66 list_del(&page->lru); 69 list_del(&page->lru);
67 atomic_dec(&cgroup->nr_pages); 70 atomic_dec(&cgroup->nr_pages);
71out_unlock:
68 spin_unlock(&cgroup->lock); 72 spin_unlock(&cgroup->lock);
69 return page; 73 return page;
70
71} 74}
72 75
73static unsigned long smallest_nr_pages(void) 76static unsigned long smallest_nr_pages(void)
@@ -94,9 +97,10 @@ static int do_add_pages(void)
94 while (smallest_nr_pages() < PAGES_PER_COLOR) { 97 while (smallest_nr_pages() < PAGES_PER_COLOR) {
95 page = alloc_page(GFP_HIGHUSER | __GFP_ZERO | 98 page = alloc_page(GFP_HIGHUSER | __GFP_ZERO |
96 __GFP_MOVABLE); 99 __GFP_MOVABLE);
97 if (!page) { 100 if (unlikely(!page)) {
98 MPRINT("could not allocate pages\n"); 101 MPRINT("could not allocate pages\n");
99 BUG(); 102 ret = -ENOMEM;
103 goto out;
100 } 104 }
101 color = page_color(page); 105 color = page_color(page);
102 if (atomic_read(&color_groups[color].nr_pages) < PAGES_PER_COLOR) 106 if (atomic_read(&color_groups[color].nr_pages) < PAGES_PER_COLOR)
@@ -108,6 +112,7 @@ static int do_add_pages(void)
108 list_del(&page->lru); 112 list_del(&page->lru);
109 __free_page(page); 113 __free_page(page);
110 } 114 }
115out:
111 return ret; 116 return ret;
112} 117}
113 118
@@ -119,14 +124,14 @@ static int do_add_pages(void)
119int color_add_pages_handler(struct ctl_table *table, int write, void __user *buffer, 124int color_add_pages_handler(struct ctl_table *table, int write, void __user *buffer,
120 size_t *lenp, loff_t *ppos) 125 size_t *lenp, loff_t *ppos)
121{ 126{
122 int ret; 127 int ret = 0;
123
124 ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos); 128 ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos);
125 if (ret) 129 if (ret)
126 return ret; 130 goto out;
127 if (write && color_sysctl_add_pages_data) 131 if (write && color_sysctl_add_pages_data)
128 do_add_pages(); 132 ret = do_add_pages();
129 return 0; 133out:
134 return ret;
130} 135}
131 136
132 137
@@ -136,18 +141,21 @@ int color_nr_pages_handler(struct ctl_table *table, int write, void __user *buff
136 struct color_group *cgroup; 141 struct color_group *cgroup;
137 char *buf; 142 char *buf;
138 unsigned long i; 143 unsigned long i;
139 int used = 0; 144 int used = 0, ret = 0;
140
141 if (write)
142 return -EPERM;
143 145
146 if (write) {
147 ret = -EPERM;
148 goto out;
149 }
144 for (i = 0; i < nr_colors; ++i) { 150 for (i = 0; i < nr_colors; ++i) {
145 cgroup = &color_groups[i]; 151 cgroup = &color_groups[i];
146 buf = ((char*)table->data) + used; 152 buf = ((char*)table->data) + used;
147 used += snprintf(buf, table->maxlen - used, ONE_COLOR_FMT, 153 used += snprintf(buf, table->maxlen - used, ONE_COLOR_FMT,
148 i, atomic_read(&cgroup->nr_pages)); 154 i, atomic_read(&cgroup->nr_pages));
149 } 155 }
150 return proc_dostring(table, write, buffer, lenp, ppos); 156 ret = proc_dostring(table, write, buffer, lenp, ppos);
157out:
158 return ret;
151} 159}
152 160
153/*********************************************************** 161/***********************************************************
@@ -182,11 +190,13 @@ static int __init init_color_groups(void)
182{ 190{
183 struct color_group *cgroup; 191 struct color_group *cgroup;
184 unsigned long i; 192 unsigned long i;
193 int ret = 0;
185 194
186 color_groups = kmalloc(nr_colors * sizeof(struct color_group), GFP_KERNEL); 195 color_groups = kmalloc(nr_colors * sizeof(struct color_group), GFP_KERNEL);
187 if (!color_groups) { 196 if (!color_groups) {
188 printk(KERN_WARNING "Could not allocate color groups.\n"); 197 printk(KERN_WARNING "Could not allocate color groups.\n");
189 return -ENOMEM; 198 ret = -ENOMEM;
199 goto out;
190 } 200 }
191 201
192 for (i = 0; i < nr_colors; ++i) { 202 for (i = 0; i < nr_colors; ++i) {
@@ -197,7 +207,8 @@ static int __init init_color_groups(void)
197 LOCKDEP_DYNAMIC_ALLOC(&cgroup->lock, &color_lock_keys[i], 207 LOCKDEP_DYNAMIC_ALLOC(&cgroup->lock, &color_lock_keys[i],
198 cgroup->_lock_name, "color%lu", i); 208 cgroup->_lock_name, "color%lu", i);
199 } 209 }
200 return 0; 210out:
211 return ret;
201} 212}
202 213
203static int __init init_color(void) 214static int __init init_color(void)
diff --git a/litmus/color_proc.c b/litmus/color_proc.c
index 1eba0740db9d..31eec0d728a5 100644
--- a/litmus/color_proc.c
+++ b/litmus/color_proc.c
@@ -54,26 +54,32 @@ extern unsigned long nr_colors; /* litmus/color.c */
54/* must be called AFTER nr_colors is set */ 54/* must be called AFTER nr_colors is set */
55static int __init init_sysctl_nr_colors(void) 55static int __init init_sysctl_nr_colors(void)
56{ 56{
57 int maxlen = ONE_COLOR_LEN * nr_colors; 57 int ret = 0, maxlen = ONE_COLOR_LEN * nr_colors;
58 color_table[NR_PAGES_INDEX].data = kmalloc(maxlen, GFP_KERNEL); 58 color_table[NR_PAGES_INDEX].data = kmalloc(maxlen, GFP_KERNEL);
59 if (!color_table[NR_PAGES_INDEX].data) { 59 if (!color_table[NR_PAGES_INDEX].data) {
60 printk(KERN_WARNING "Could not allocate nr_pages buffer.\n"); 60 printk(KERN_WARNING "Could not allocate nr_pages buffer.\n");
61 return -ENOMEM; 61 ret = -ENOMEM;
62 goto out;
62 } 63 }
63 color_table[NR_PAGES_INDEX].maxlen = maxlen; 64 color_table[NR_PAGES_INDEX].maxlen = maxlen;
64 return 0; 65out:
66 return ret;
65} 67}
66 68
67static struct ctl_table_header *litmus_sysctls; 69static struct ctl_table_header *litmus_sysctls;
68 70
69static int __init litmus_sysctl_init(void) 71static int __init litmus_sysctl_init(void)
70{ 72{
73 int ret = 0;
71 litmus_sysctls = register_sysctl_table(litmus_dir_table); 74 litmus_sysctls = register_sysctl_table(litmus_dir_table);
72 if (!litmus_sysctls) { 75 if (!litmus_sysctls) {
73 printk(KERN_WARNING "Could not register LITMUS^RT sysctl.\n"); 76 printk(KERN_WARNING "Could not register LITMUS^RT sysctl.\n");
74 return -EFAULT; 77 ret = -EFAULT;
78 goto out;
75 } 79 }
76 return init_sysctl_nr_colors(); 80 ret = init_sysctl_nr_colors();
81out:
82 return ret;
77} 83}
78 84
79module_init(litmus_sysctl_init); 85module_init(litmus_sysctl_init);