diff options
Diffstat (limited to 'drivers/base/cacheinfo.c')
| -rw-r--r-- | drivers/base/cacheinfo.c | 13 | 
1 files changed, 11 insertions, 2 deletions
diff --git a/drivers/base/cacheinfo.c b/drivers/base/cacheinfo.c index 6e64563361f0..9c2ba1c97c42 100644 --- a/drivers/base/cacheinfo.c +++ b/drivers/base/cacheinfo.c @@ -62,15 +62,21 @@ static int cache_setup_of_node(unsigned int cpu)  		return -ENOENT;  	} -	while (np && index < cache_leaves(cpu)) { +	while (index < cache_leaves(cpu)) {  		this_leaf = this_cpu_ci->info_list + index;  		if (this_leaf->level != 1)  			np = of_find_next_cache_node(np);  		else  			np = of_node_get(np);/* cpu node itself */ +		if (!np) +			break;  		this_leaf->of_node = np;  		index++;  	} + +	if (index != cache_leaves(cpu)) /* not all OF nodes populated */ +		return -ENOENT; +  	return 0;  } @@ -189,8 +195,11 @@ static int detect_cache_attributes(unsigned int cpu)  	 * will be set up here only if they are not populated already  	 */  	ret = cache_shared_cpu_map_setup(cpu); -	if (ret) +	if (ret) { +		pr_warn("Unable to detect cache hierarcy from DT for CPU %d\n", +			cpu);  		goto free_ci; +	}  	return 0;  free_ci:  |