diff options
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/cgroup.c | 1 | ||||
-rw-r--r-- | kernel/cpuset.c | 9 | ||||
-rw-r--r-- | kernel/events/core.c | 4 | ||||
-rw-r--r-- | kernel/fork.c | 5 | ||||
-rw-r--r-- | kernel/power/snapshot.c | 50 | ||||
-rw-r--r-- | kernel/trace/ring_buffer.c | 2 |
6 files changed, 27 insertions, 44 deletions
diff --git a/kernel/cgroup.c b/kernel/cgroup.c index 940aced4ed00..3a73f995a81e 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c | |||
@@ -3985,7 +3985,6 @@ static int pidlist_array_load(struct cgroup *cgrp, enum cgroup_filetype type, | |||
3985 | 3985 | ||
3986 | l = cgroup_pidlist_find_create(cgrp, type); | 3986 | l = cgroup_pidlist_find_create(cgrp, type); |
3987 | if (!l) { | 3987 | if (!l) { |
3988 | mutex_unlock(&cgrp->pidlist_mutex); | ||
3989 | pidlist_free(array); | 3988 | pidlist_free(array); |
3990 | return -ENOMEM; | 3989 | return -ENOMEM; |
3991 | } | 3990 | } |
diff --git a/kernel/cpuset.c b/kernel/cpuset.c index 22874d7cf2c0..52cb04c993b7 100644 --- a/kernel/cpuset.c +++ b/kernel/cpuset.c | |||
@@ -365,13 +365,14 @@ static void cpuset_update_task_spread_flag(struct cpuset *cs, | |||
365 | struct task_struct *tsk) | 365 | struct task_struct *tsk) |
366 | { | 366 | { |
367 | if (is_spread_page(cs)) | 367 | if (is_spread_page(cs)) |
368 | tsk->flags |= PF_SPREAD_PAGE; | 368 | task_set_spread_page(tsk); |
369 | else | 369 | else |
370 | tsk->flags &= ~PF_SPREAD_PAGE; | 370 | task_clear_spread_page(tsk); |
371 | |||
371 | if (is_spread_slab(cs)) | 372 | if (is_spread_slab(cs)) |
372 | tsk->flags |= PF_SPREAD_SLAB; | 373 | task_set_spread_slab(tsk); |
373 | else | 374 | else |
374 | tsk->flags &= ~PF_SPREAD_SLAB; | 375 | task_clear_spread_slab(tsk); |
375 | } | 376 | } |
376 | 377 | ||
377 | /* | 378 | /* |
diff --git a/kernel/events/core.c b/kernel/events/core.c index d640a8b4dcbc..963bf139e2b2 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c | |||
@@ -7948,8 +7948,10 @@ int perf_event_init_task(struct task_struct *child) | |||
7948 | 7948 | ||
7949 | for_each_task_context_nr(ctxn) { | 7949 | for_each_task_context_nr(ctxn) { |
7950 | ret = perf_event_init_context(child, ctxn); | 7950 | ret = perf_event_init_context(child, ctxn); |
7951 | if (ret) | 7951 | if (ret) { |
7952 | perf_event_free_task(child); | ||
7952 | return ret; | 7953 | return ret; |
7954 | } | ||
7953 | } | 7955 | } |
7954 | 7956 | ||
7955 | return 0; | 7957 | return 0; |
diff --git a/kernel/fork.c b/kernel/fork.c index 0cf9cdb6e491..a91e47d86de2 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
@@ -1360,7 +1360,7 @@ static struct task_struct *copy_process(unsigned long clone_flags, | |||
1360 | goto bad_fork_cleanup_policy; | 1360 | goto bad_fork_cleanup_policy; |
1361 | retval = audit_alloc(p); | 1361 | retval = audit_alloc(p); |
1362 | if (retval) | 1362 | if (retval) |
1363 | goto bad_fork_cleanup_policy; | 1363 | goto bad_fork_cleanup_perf; |
1364 | /* copy all the process information */ | 1364 | /* copy all the process information */ |
1365 | shm_init_task(p); | 1365 | shm_init_task(p); |
1366 | retval = copy_semundo(clone_flags, p); | 1366 | retval = copy_semundo(clone_flags, p); |
@@ -1566,8 +1566,9 @@ bad_fork_cleanup_semundo: | |||
1566 | exit_sem(p); | 1566 | exit_sem(p); |
1567 | bad_fork_cleanup_audit: | 1567 | bad_fork_cleanup_audit: |
1568 | audit_free(p); | 1568 | audit_free(p); |
1569 | bad_fork_cleanup_policy: | 1569 | bad_fork_cleanup_perf: |
1570 | perf_event_free_task(p); | 1570 | perf_event_free_task(p); |
1571 | bad_fork_cleanup_policy: | ||
1571 | #ifdef CONFIG_NUMA | 1572 | #ifdef CONFIG_NUMA |
1572 | mpol_put(p->mempolicy); | 1573 | mpol_put(p->mempolicy); |
1573 | bad_fork_cleanup_threadgroup_lock: | 1574 | bad_fork_cleanup_threadgroup_lock: |
diff --git a/kernel/power/snapshot.c b/kernel/power/snapshot.c index c4b8093c80b3..f1604d8cf489 100644 --- a/kernel/power/snapshot.c +++ b/kernel/power/snapshot.c | |||
@@ -725,14 +725,6 @@ static void memory_bm_clear_bit(struct memory_bitmap *bm, unsigned long pfn) | |||
725 | clear_bit(bit, addr); | 725 | clear_bit(bit, addr); |
726 | } | 726 | } |
727 | 727 | ||
728 | static void memory_bm_clear_current(struct memory_bitmap *bm) | ||
729 | { | ||
730 | int bit; | ||
731 | |||
732 | bit = max(bm->cur.node_bit - 1, 0); | ||
733 | clear_bit(bit, bm->cur.node->data); | ||
734 | } | ||
735 | |||
736 | static int memory_bm_test_bit(struct memory_bitmap *bm, unsigned long pfn) | 728 | static int memory_bm_test_bit(struct memory_bitmap *bm, unsigned long pfn) |
737 | { | 729 | { |
738 | void *addr; | 730 | void *addr; |
@@ -1341,35 +1333,23 @@ static struct memory_bitmap copy_bm; | |||
1341 | 1333 | ||
1342 | void swsusp_free(void) | 1334 | void swsusp_free(void) |
1343 | { | 1335 | { |
1344 | unsigned long fb_pfn, fr_pfn; | 1336 | struct zone *zone; |
1345 | 1337 | unsigned long pfn, max_zone_pfn; | |
1346 | memory_bm_position_reset(forbidden_pages_map); | ||
1347 | memory_bm_position_reset(free_pages_map); | ||
1348 | |||
1349 | loop: | ||
1350 | fr_pfn = memory_bm_next_pfn(free_pages_map); | ||
1351 | fb_pfn = memory_bm_next_pfn(forbidden_pages_map); | ||
1352 | |||
1353 | /* | ||
1354 | * Find the next bit set in both bitmaps. This is guaranteed to | ||
1355 | * terminate when fb_pfn == fr_pfn == BM_END_OF_MAP. | ||
1356 | */ | ||
1357 | do { | ||
1358 | if (fb_pfn < fr_pfn) | ||
1359 | fb_pfn = memory_bm_next_pfn(forbidden_pages_map); | ||
1360 | if (fr_pfn < fb_pfn) | ||
1361 | fr_pfn = memory_bm_next_pfn(free_pages_map); | ||
1362 | } while (fb_pfn != fr_pfn); | ||
1363 | |||
1364 | if (fr_pfn != BM_END_OF_MAP && pfn_valid(fr_pfn)) { | ||
1365 | struct page *page = pfn_to_page(fr_pfn); | ||
1366 | 1338 | ||
1367 | memory_bm_clear_current(forbidden_pages_map); | 1339 | for_each_populated_zone(zone) { |
1368 | memory_bm_clear_current(free_pages_map); | 1340 | max_zone_pfn = zone_end_pfn(zone); |
1369 | __free_page(page); | 1341 | for (pfn = zone->zone_start_pfn; pfn < max_zone_pfn; pfn++) |
1370 | goto loop; | 1342 | if (pfn_valid(pfn)) { |
1343 | struct page *page = pfn_to_page(pfn); | ||
1344 | |||
1345 | if (swsusp_page_is_forbidden(page) && | ||
1346 | swsusp_page_is_free(page)) { | ||
1347 | swsusp_unset_page_forbidden(page); | ||
1348 | swsusp_unset_page_free(page); | ||
1349 | __free_page(page); | ||
1350 | } | ||
1351 | } | ||
1371 | } | 1352 | } |
1372 | |||
1373 | nr_copy_pages = 0; | 1353 | nr_copy_pages = 0; |
1374 | nr_meta_pages = 0; | 1354 | nr_meta_pages = 0; |
1375 | restore_pblist = NULL; | 1355 | restore_pblist = NULL; |
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index b38fb2b9e237..2d75c94ae87d 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c | |||
@@ -3359,7 +3359,7 @@ static void rb_iter_reset(struct ring_buffer_iter *iter) | |||
3359 | iter->head = cpu_buffer->reader_page->read; | 3359 | iter->head = cpu_buffer->reader_page->read; |
3360 | 3360 | ||
3361 | iter->cache_reader_page = iter->head_page; | 3361 | iter->cache_reader_page = iter->head_page; |
3362 | iter->cache_read = iter->head; | 3362 | iter->cache_read = cpu_buffer->read; |
3363 | 3363 | ||
3364 | if (iter->head) | 3364 | if (iter->head) |
3365 | iter->read_stamp = cpu_buffer->read_stamp; | 3365 | iter->read_stamp = cpu_buffer->read_stamp; |