Messages in this thread | | | Date | Thu, 20 Nov 2014 00:09:22 +0100 (CET) | From | Thomas Gleixner <> | Subject | Re: frequent lockups in 3.18rc4 |
| |
On Wed, 19 Nov 2014, Frederic Weisbecker wrote:
> On Wed, Nov 19, 2014 at 10:56:26PM +0100, Thomas Gleixner wrote: > > On Wed, 19 Nov 2014, Frederic Weisbecker wrote: > > > I got a report lately involving context tracking. Not sure if it's > > > the same here but the issue was that context tracking uses per cpu data > > > and per cpu allocation use vmalloc and vmalloc'ed area can fault due to > > > lazy paging. > > > > This is complete nonsense. pcpu allocations are populated right > > away. Otherwise no single line of kernel code which uses dynamically > > allocated per cpu storage would be safe. > > Note this isn't faulting because part of the allocation is > swapped. No it's all reserved in the physical memory, but it's a > lazy allocation. Part of it isn't yet addressed in the > P[UGM?]D. That's what vmalloc_fault() is for.
Sorry, I can't follow your argumentation here.
pcpu_alloc() .... area_found: ....
/* clear the areas and return address relative to base address */ for_each_possible_cpu(cpu) memset((void *)pcpu_chunk_addr(chunk, cpu, 0) + off, 0, size);
How would that memset fail to establish the mapping, which is btw. already established via:
pcpu_populate_chunk() already before that memset? Are we talking about different per cpu allocators here or am I missing something completely non obvious?
Thanks,
tglx
| |