lkml.org 
[lkml]   [2016]   [Mar]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRe: 4.5.0+ panic when setup loop device
From
Date
On 03/17/2016 01:30 PM, Thomas Gleixner wrote:
> On Thu, 17 Mar 2016, Jens Axboe wrote:
>> On 03/17/2016 01:20 PM, Thomas Gleixner wrote:
>>>> This might be better, we need to start at -1 to not miss the first one...
>>>> Still untested.
>>>
>>>> +static inline struct blk_mq_ctx *next_ctx(struct request_queue *q, int
>>>> *i)
>>>> +{
>>>> + do {
>>>> + (*i)++;
>>>> + if (*i < q->nr_queues) {
>>>> + if (cpu_possible(*i))
>>>> + return per_cpu_ptr(q->queue_ctx, *i);
>>>> + continue;
>>>> + }
>>>> + break;
>>>> + } while (1);
>>>> +
>>>> + return NULL;
>>>> +}
>>>> +
>>>> +#define queue_for_each_ctx(q, ctx, i)
>>>> \
>>>> + for ((i) = -1; (ctx = next_ctx((q), &(i))) != NULL;)
>>>> +
>>>
>>> What's wrong with
>>>
>>> for_each_possible_cpu(cpu) {
>>> ctx = per_cpu_ptr(q->queue_ctx, cpu);
>>>
>>> ....
>>> }
>>>
>>> instead of hiding it behind an incomprehensible macro mess?
>>
>> We might not have mapped all of them.
>
> blk_mq_init_cpu_queues() tells a different story and q->queue_ctx is a per_cpu
> allocation.

Yeah my bad, I mistook the possible for online. So we can do the easier fix.

--
Jens Axboe

\
 
 \ /
  Last update: 2016-03-17 22:21    [W:0.060 / U:0.400 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site