Re: [Bug #13116] Can't boot with nosmp

Dan Williams
2009-06-08T16:29:23Z

On Mon, Jun 8, 2009 at 9:15 AM, Stephen Hemminger<shemminger@vyatta.com> wrote:
> On Sun,  7 Jun 2009 11:52:49 +0200 (CEST)
> "Rafael J. Wysocki" <rjw@sisk.pl> wrote:
>
>> This message has been generated automatically as a part of a report
>> of recent regressions.
>>
>> The following bug entry is on the current list of known regressions
>> from 2.6.29.  Please verify if it still should be listed and let me know
>> (either way).
>>
>>
>> Bug-Entry     : http://bugzilla.kernel.org/show_bug.cgi?id=13116
>> Subject               : Can't boot with nosmp
>> Submitter     : Stephen Hemminger <shemminger@vyatta.com>
>> Date          : 2009-04-15 4:18 (54 days old)
>> References    : http://marc.info/?l=linux-kernel&m=123976917817920&w=4
>> Handled-By    : Dan Williams <dan.j.williams@intel.com>
>>
>>
>
> I suspect this bit of code in dmaengine is the culprit:
>
>        /* redistribute available channels */
>        n = 0;
>        for_each_dma_cap_mask(cap, dma_cap_mask_all)
>                for_each_online_cpu(cpu) {
>                        if (num_possible_cpus() > 1)
>                                chan = nth_chan(cap, n++);
>                        else
>                                chan = nth_chan(cap, -1);
>
> Why does num_possible_cpus() == 1 have to be a special case?

When there will only be one cpu the channel allocation policy changes from:
"isolate a channel per cpu"
...to:
"isolate a capability per channel".

For example, isolating per channel allows a memcpy to run concurrently
with an xor.