[RFC PATCH 6/6] workqueue: use kmalloc_align() instead of hacking

From: Lai Jiangshan
Date: Tue Mar 20 2012 - 06:17:07 EST


kmalloc_align() makes the code simpler.

Signed-off-by: Lai Jiangshan <laijs@xxxxxxxxxxxxxx>
---
kernel/workqueue.c | 23 +++++------------------
1 files changed, 5 insertions(+), 18 deletions(-)

diff --git a/kernel/workqueue.c b/kernel/workqueue.c
index 5abf42f..beec5fd 100644
--- a/kernel/workqueue.c
+++ b/kernel/workqueue.c
@@ -2897,20 +2897,9 @@ static int alloc_cwqs(struct workqueue_struct *wq)

if (!(wq->flags & WQ_UNBOUND))
wq->cpu_wq.pcpu = __alloc_percpu(size, align);
- else {
- void *ptr;
-
- /*
- * Allocate enough room to align cwq and put an extra
- * pointer at the end pointing back to the originally
- * allocated pointer which will be used for free.
- */
- ptr = kzalloc(size + align + sizeof(void *), GFP_KERNEL);
- if (ptr) {
- wq->cpu_wq.single = PTR_ALIGN(ptr, align);
- *(void **)(wq->cpu_wq.single + 1) = ptr;
- }
- }
+ else
+ wq->cpu_wq.single = kmalloc_align(size,
+ GFP_KERNEL | __GFP_ZERO, align);

/* just in case, make sure it's actually aligned */
BUG_ON(!IS_ALIGNED(wq->cpu_wq.v, align));
@@ -2921,10 +2910,8 @@ static void free_cwqs(struct workqueue_struct *wq)
{
if (!(wq->flags & WQ_UNBOUND))
free_percpu(wq->cpu_wq.pcpu);
- else if (wq->cpu_wq.single) {
- /* the pointer to free is stored right after the cwq */
- kfree(*(void **)(wq->cpu_wq.single + 1));
- }
+ else if (wq->cpu_wq.single)
+ kfree(wq->cpu_wq.single);
}

static int wq_clamp_max_active(int max_active, unsigned int flags,
--
1.7.4.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/