cpumask: reduce stack usage in find_lowest_rq
Impact: reduce stack usage, cleanup Use a cpumask_var_t in find_lowest_rq() and clean up other old cpumask_t calls. Signed-off-by: Mike Travis <travis@sgi.com>
This commit is contained in:
		| @@ -960,16 +960,17 @@ static struct task_struct *pick_next_highest_task_rt(struct rq *rq, int cpu) | ||||
|  | ||||
| static DEFINE_PER_CPU(cpumask_var_t, local_cpu_mask); | ||||
|  | ||||
| static inline int pick_optimal_cpu(int this_cpu, cpumask_t *mask) | ||||
| static inline int pick_optimal_cpu(int this_cpu, | ||||
| 				   const struct cpumask *mask) | ||||
| { | ||||
| 	int first; | ||||
|  | ||||
| 	/* "this_cpu" is cheaper to preempt than a remote processor */ | ||||
| 	if ((this_cpu != -1) && cpu_isset(this_cpu, *mask)) | ||||
| 	if ((this_cpu != -1) && cpumask_test_cpu(this_cpu, mask)) | ||||
| 		return this_cpu; | ||||
|  | ||||
| 	first = first_cpu(*mask); | ||||
| 	if (first != NR_CPUS) | ||||
| 	first = cpumask_first(mask); | ||||
| 	if (first < nr_cpu_ids) | ||||
| 		return first; | ||||
|  | ||||
| 	return -1; | ||||
| @@ -981,6 +982,7 @@ static int find_lowest_rq(struct task_struct *task) | ||||
| 	struct cpumask *lowest_mask = __get_cpu_var(local_cpu_mask); | ||||
| 	int this_cpu = smp_processor_id(); | ||||
| 	int cpu      = task_cpu(task); | ||||
| 	cpumask_var_t domain_mask; | ||||
|  | ||||
| 	if (task->rt.nr_cpus_allowed == 1) | ||||
| 		return -1; /* No other targets possible */ | ||||
| @@ -1013,19 +1015,25 @@ static int find_lowest_rq(struct task_struct *task) | ||||
| 	if (this_cpu == cpu) | ||||
| 		this_cpu = -1; /* Skip this_cpu opt if the same */ | ||||
|  | ||||
| 	for_each_domain(cpu, sd) { | ||||
| 		if (sd->flags & SD_WAKE_AFFINE) { | ||||
| 			cpumask_t domain_mask; | ||||
| 			int       best_cpu; | ||||
| 	if (alloc_cpumask_var(&domain_mask, GFP_ATOMIC)) { | ||||
| 		for_each_domain(cpu, sd) { | ||||
| 			if (sd->flags & SD_WAKE_AFFINE) { | ||||
| 				int best_cpu; | ||||
|  | ||||
| 			cpumask_and(&domain_mask, sched_domain_span(sd), | ||||
| 				    lowest_mask); | ||||
| 				cpumask_and(domain_mask, | ||||
| 					    sched_domain_span(sd), | ||||
| 					    lowest_mask); | ||||
|  | ||||
| 			best_cpu = pick_optimal_cpu(this_cpu, | ||||
| 						    &domain_mask); | ||||
| 			if (best_cpu != -1) | ||||
| 				return best_cpu; | ||||
| 				best_cpu = pick_optimal_cpu(this_cpu, | ||||
| 							    domain_mask); | ||||
|  | ||||
| 				if (best_cpu != -1) { | ||||
| 					free_cpumask_var(domain_mask); | ||||
| 					return best_cpu; | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		free_cpumask_var(domain_mask); | ||||
| 	} | ||||
|  | ||||
| 	/* | ||||
|   | ||||
		Reference in New Issue
	
	Block a user