diff options
author | Christopher Kenna <cjk@cs.unc.edu> | 2012-04-01 19:24:46 -0400 |
---|---|---|
committer | Christopher Kenna <cjk@cs.unc.edu> | 2012-04-01 19:24:46 -0400 |
commit | db4d9fcd3dfbda54b351ef42c13d93a00009784f (patch) | |
tree | 2fe93b1420cc8eb74c44e10cc1ab07b5f5e755b3 /litmus | |
parent | 9ba35c84953f070616b00237975de9206b698afd (diff) |
minor clean-up
Diffstat (limited to 'litmus')
-rw-r--r-- | litmus/color.c | 45 | ||||
-rw-r--r-- | litmus/color_proc.c | 16 |
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) | |||
57 | struct page* get_colored_page(unsigned long color) | 57 | struct 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); |
71 | out_unlock: | ||
68 | spin_unlock(&cgroup->lock); | 72 | spin_unlock(&cgroup->lock); |
69 | return page; | 73 | return page; |
70 | |||
71 | } | 74 | } |
72 | 75 | ||
73 | static unsigned long smallest_nr_pages(void) | 76 | static 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 | } |
115 | out: | ||
111 | return ret; | 116 | return ret; |
112 | } | 117 | } |
113 | 118 | ||
@@ -119,14 +124,14 @@ static int do_add_pages(void) | |||
119 | int color_add_pages_handler(struct ctl_table *table, int write, void __user *buffer, | 124 | int 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; | 133 | out: |
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); |
157 | out: | ||
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; | 210 | out: |
211 | return ret; | ||
201 | } | 212 | } |
202 | 213 | ||
203 | static int __init init_color(void) | 214 | static 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 */ |
55 | static int __init init_sysctl_nr_colors(void) | 55 | static 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; | 65 | out: |
66 | return ret; | ||
65 | } | 67 | } |
66 | 68 | ||
67 | static struct ctl_table_header *litmus_sysctls; | 69 | static struct ctl_table_header *litmus_sysctls; |
68 | 70 | ||
69 | static int __init litmus_sysctl_init(void) | 71 | static 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(); |
81 | out: | ||
82 | return ret; | ||
77 | } | 83 | } |
78 | 84 | ||
79 | module_init(litmus_sysctl_init); | 85 | module_init(litmus_sysctl_init); |