diff options
Diffstat (limited to 'kernel/cpuset.c')
-rw-r--r-- | kernel/cpuset.c | 37 |
1 files changed, 6 insertions, 31 deletions
diff --git a/kernel/cpuset.c b/kernel/cpuset.c index 531b235e546f..ebbc9b082e48 100644 --- a/kernel/cpuset.c +++ b/kernel/cpuset.c | |||
@@ -709,36 +709,6 @@ done: | |||
709 | /* Don't kfree(dattr) -- partition_sched_domains() does that. */ | 709 | /* Don't kfree(dattr) -- partition_sched_domains() does that. */ |
710 | } | 710 | } |
711 | 711 | ||
712 | static inline int started_after_time(struct task_struct *t1, | ||
713 | struct timespec *time, | ||
714 | struct task_struct *t2) | ||
715 | { | ||
716 | int start_diff = timespec_compare(&t1->start_time, time); | ||
717 | if (start_diff > 0) { | ||
718 | return 1; | ||
719 | } else if (start_diff < 0) { | ||
720 | return 0; | ||
721 | } else { | ||
722 | /* | ||
723 | * Arbitrarily, if two processes started at the same | ||
724 | * time, we'll say that the lower pointer value | ||
725 | * started first. Note that t2 may have exited by now | ||
726 | * so this may not be a valid pointer any longer, but | ||
727 | * that's fine - it still serves to distinguish | ||
728 | * between two tasks started (effectively) | ||
729 | * simultaneously. | ||
730 | */ | ||
731 | return t1 > t2; | ||
732 | } | ||
733 | } | ||
734 | |||
735 | static inline int started_after(void *p1, void *p2) | ||
736 | { | ||
737 | struct task_struct *t1 = p1; | ||
738 | struct task_struct *t2 = p2; | ||
739 | return started_after_time(t1, &t2->start_time, t2); | ||
740 | } | ||
741 | |||
742 | /** | 712 | /** |
743 | * cpuset_test_cpumask - test a task's cpus_allowed versus its cpuset's | 713 | * cpuset_test_cpumask - test a task's cpus_allowed versus its cpuset's |
744 | * @tsk: task to test | 714 | * @tsk: task to test |
@@ -790,7 +760,12 @@ static int update_tasks_cpumask(struct cpuset *cs) | |||
790 | struct ptr_heap heap; | 760 | struct ptr_heap heap; |
791 | int retval; | 761 | int retval; |
792 | 762 | ||
793 | retval = heap_init(&heap, PAGE_SIZE, GFP_KERNEL, &started_after); | 763 | /* |
764 | * cgroup_scan_tasks() will initialize heap->gt for us. | ||
765 | * heap_init() is still needed here for we should not change | ||
766 | * cs->cpus_allowed when heap_init() fails. | ||
767 | */ | ||
768 | retval = heap_init(&heap, PAGE_SIZE, GFP_KERNEL, NULL); | ||
794 | if (retval) | 769 | if (retval) |
795 | return retval; | 770 | return retval; |
796 | 771 | ||