Messages in this thread | | | Date | Thu, 26 Jan 2012 11:42:07 +0100 | From | Jens Axboe <> | Subject | Re: [RFC PATCH v1 1/2] sched: unified sched_powersavings sysfs tunable |
| |
On 01/25/2012 03:53 PM, Peter Zijlstra wrote: > On Mon, 2012-01-16 at 21:52 +0530, Vaidyanathan Srinivasan wrote: >> +++ b/block/blk.h >> @@ -167,14 +167,15 @@ static inline int queue_congestion_off_threshold(struct request_queue *q) >> static inline int blk_cpu_to_group(int cpu) >> { >> int group = NR_CPUS; >> -#ifdef CONFIG_SCHED_MC >> - const struct cpumask *mask = cpu_coregroup_mask(cpu); >> - group = cpumask_first(mask); >> -#elif defined(CONFIG_SCHED_SMT) >> - group = cpumask_first(topology_thread_cpumask(cpu)); >> +#ifdef CONFIG_SCHED_POWERSAVE >> + if (smt_capable()) >> + group = cpumask_first(topology_thread_cpumask(cpu)); >> + else >> + group = cpumask_first(cpu_coregroup_mask(cpu)); >> #else >> return cpu; >> #endif >> + /* Possible dead code?? */ >> if (likely(group < NR_CPUS)) >> return group; >> return cpu; > > After going, WTF is block doing! I had a closer look and this doesn't > seem right at all. The old code would use coregroup_mask when SCHED_MC > && SCHED_SMT, the new code does something else. > > Jens, what is this thing trying to do?
Not surprised that it's broken for some configs. The intent of the code is to return the first CPU in the "group" that the passed in core/thread belongs to. This is used to decide whether to perform a completion locally, or to send it off to a different "group".
-- Jens Axboe
| |