| From: Mike Galbraith <umgwanakikbuti@gmail.com> |
| Date: Tue, 22 Mar 2016 11:16:09 +0100 |
| Subject: [PATCH] mm/zsmalloc: Use get/put_cpu_light in |
| zs_map_object()/zs_unmap_object() |
| |
| Otherwise, we get a ___might_sleep() splat. |
| |
| Signed-off-by: Mike Galbraith <umgwanakikbuti@gmail.com> |
| Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> |
| --- |
| mm/zsmalloc.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| --- a/mm/zsmalloc.c |
| +++ b/mm/zsmalloc.c |
| @@ -1292,7 +1292,7 @@ void *zs_map_object(struct zs_pool *pool |
| class = pool->size_class[class_idx]; |
| off = obj_idx_to_offset(page, obj_idx, class->size); |
| |
| - area = &get_cpu_var(zs_map_area); |
| + area = per_cpu_ptr(&zs_map_area, get_cpu_light()); |
| area->vm_mm = mm; |
| if (off + class->size <= PAGE_SIZE) { |
| /* this object is contained entirely within a page */ |
| @@ -1345,7 +1345,7 @@ void zs_unmap_object(struct zs_pool *poo |
| |
| __zs_unmap_object(area, pages, off, class->size); |
| } |
| - put_cpu_var(zs_map_area); |
| + put_cpu_light(); |
| unpin_tag(handle); |
| } |
| EXPORT_SYMBOL_GPL(zs_unmap_object); |