Re: [PATCH 16/35] x86: make 64 bit use early_res instead of bootmem before slab

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 02/24/2010 02:59 PM, Peter Zijlstra wrote:
> On Tue, 2010-02-16 at 17:16 -0800, Yinghai Lu wrote:
> 
>> Subject: [PATCH -v3 16/35] x86: make 64 bit use early_res instead of bootmem before slab
>>
>> finally we can use early_res to replace bootmem for x86_64 now.
>>
>> still can use CONFIG_NO_BOOTMEM to enable it or not
>>
>> -v2: fix 32bit compiling about MAX_DMA32_PFN
>> -v3: fix PPC compiling
>> | mm/page_alloc.c:3468: error: implicit declaration of function 'find_early_area'
>> | mm/page_alloc.c:3483: error: implicit declaration of function 'reserve_early_without_check'
>>
>> | actually the function is only needed for no_bootmem
>>
>>
>> Signed-off-by: Yinghai Lu <yinghai@xxxxxxxxxx>
> 
> This makes my machine unhappy and panic.. machine works fine with
> CONFIG_NO_BOOTMEM=n
> 
> Kernel panic - not syncing: free_early on not reserved area: 2f80000-2f9ffff!
> Pid: 0, comm: swapper Not tainted 2.6.33-rc8-tip-00918-gb34d361 #159
> Call Trace:	
>  [<ffffffff815d12e2>] panic+0x84/0x147
>  [<ffffffff81cceecb>] free_early+0x64/0x6d
>  [<ffffffff81cd2231>] free_bootmem+0xc/0xe
>  [<ffffffff81cc1cd6>] pcpu_fc_free+0x1d/0x1f
>  [<ffffffff81cd6056>] pcpu_embed_first_chunk+0x13a/0x27f
>  [<ffffffff81cc1cd8>] ? pcpu_fc_alloc+0x0/0xac
>  [<ffffffff81cc1cb9>] ? pcpu_fc_free+0x0/0x1f
>  [<ffffffff81cc1af7>] setup_per_cpu_areas+0x82/0x239
>  [<ffffffff81cb5b3c>] start_kernel+0x1b8/0x43b
>  [<ffffffff81cb52bc>] x86_64_start_reservations+0xa7/0xab
>  [<ffffffff81cb53b8>] x86_64_start_kernel+0xf8/0x107
> 

we can not handle partial free, and current only user for that is pcpu_setup...

please check this debug patch

diff --git a/mm/percpu.c b/mm/percpu.c
index 841defe..6aa6d8d 100644
--- a/mm/percpu.c
+++ b/mm/percpu.c
@@ -1923,8 +1923,10 @@ int __init pcpu_embed_first_chunk(size_t reserved_size, ssize_t dyn_size,
 
 		for (i = 0; i < gi->nr_units; i++, ptr += ai->unit_size) {
 			if (gi->cpu_map[i] == NR_CPUS) {
+#ifndef CONFIG_NO_BOOTMEM
 				/* unused unit, free whole */
 				free_fn(ptr, ai->unit_size);
+#endif
 				continue;
 			}
 			/* copy and return the unused part */
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux