From: Yinghai Lu on
On 03/05/2010 12:38 PM, Yinghai Lu wrote:
> if you don't want to drop
> | bootmem: avoid DMA32 zone by default
>
> today mainline tree actually DO NOT need that patch according to print out ...
>
> please apply this one too.
>
> [PATCH] x86/bootmem: introduce bootmem_default_goal
>
> don't punish the 64bit systems with less 4G RAM.
> they should use _pa(MAX_DMA_ADDRESS) at first pass instead of failback...

andrew,

please drop Johannes' patch : bootmem: avoid DMA32 zone by default

so you don't need to apply two fix patches from me:
[PATCH] early_res: double check with updated goal in alloc_memory_core_early
[PATCH] x86/bootmem: introduce bootmem_default_goal

move all bootmem to above 4g, make system performance get worse...

Thanks

Yinghai Lu

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
From: Andrew Morton on
On Fri, 05 Mar 2010 21:44:38 -0800 Yinghai Lu <yinghai(a)kernel.org> wrote:

> On 03/05/2010 12:38 PM, Yinghai Lu wrote:
> > if you don't want to drop
> > | bootmem: avoid DMA32 zone by default
> >
> > today mainline tree actually DO NOT need that patch according to print out ...
> >
> > please apply this one too.
> >
> > [PATCH] x86/bootmem: introduce bootmem_default_goal
> >
> > don't punish the 64bit systems with less 4G RAM.
> > they should use _pa(MAX_DMA_ADDRESS) at first pass instead of failback...
>
> andrew,
>
> please drop Johannes' patch : bootmem: avoid DMA32 zone by default

I'd rather not. That patch is said to fix a runtime problem which is
present in 2.6.33 and hence we planned on backporting it into 2.6.33.x.

I don't have a clue what your patches do. Can you tell us?

Earlier, Johannes wrote

: Humm, now that is a bit disappointing. Because it means we will never
: get rid of bootmem as long as it works for the other architectures.
: And your changeset just added ~900 lines of code, some of it being a
: rather ugly compatibility layer in bootmem that I hoped could go away
: again sooner than later.
:
: I do not know what the upsides for x86 are from no longer using bootmem
: but it would suck from a code maintainance point of view to get stuck
: half way through this transition and have now TWO implementations of
: the bootmem interface we would like to get rid of.

Which is a pretty good-sounding argument. Perhaps we should be
dropping your patches.

What patches _are_ these x86 bootmem changes, anyway? Please identify
them so people can take a look and see what they do.


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
From: Yinghai Lu on
On 03/06/2010 04:22 PM, Andrew Morton wrote:
> On Fri, 05 Mar 2010 21:44:38 -0800 Yinghai Lu <yinghai(a)kernel.org> wrote:
>
>> On 03/05/2010 12:38 PM, Yinghai Lu wrote:
>>> if you don't want to drop
>>> | bootmem: avoid DMA32 zone by default
>>>
>>> today mainline tree actually DO NOT need that patch according to print out ...
>>>
>>> please apply this one too.
>>>
>>> [PATCH] x86/bootmem: introduce bootmem_default_goal
>>>
>>> don't punish the 64bit systems with less 4G RAM.
>>> they should use _pa(MAX_DMA_ADDRESS) at first pass instead of failback...
>>
>> andrew,
>>
>> please drop Johannes' patch : bootmem: avoid DMA32 zone by default
>
> I'd rather not. That patch is said to fix a runtime problem which is
> present in 2.6.33 and hence we planned on backporting it into 2.6.33.x.

that patch make my box booting time from 215s to 265s.

should have better way to fix the problem:
just put the mem_map or the big chunk on high.
instead put everything above 4g.

some thing like
static void * __init_refok __earlyonly_bootmem_alloc(int node,
unsigned long size,
unsigned long align,
unsigned long goal)
{
return __alloc_bootmem_node_high(NODE_DATA(node), size, align, goal);
}

void * __init __alloc_bootmem_node_high(pg_data_t *pgdat, unsigned long size,
unsigned long align, unsigned long goal)
{
#ifdef MAX_DMA32_PFN
unsigned long end_pfn;

if (WARN_ON_ONCE(slab_is_available()))
return kzalloc_node(size, GFP_NOWAIT, pgdat->node_id);

/* update goal according ...MAX_DMA32_PFN */
end_pfn = pgdat->node_start_pfn + pgdat->node_spanned_pages;

if (end_pfn > MAX_DMA32_PFN + (128 >> (20 - PAGE_SHIFT)) &&
(goal >> PAGE_SHIFT) < MAX_DMA32_PFN) {
void *ptr;
unsigned long new_goal;

new_goal = MAX_DMA32_PFN << PAGE_SHIFT;
#ifdef CONFIG_NO_BOOTMEM
ptr = __alloc_memory_core_early(pgdat->node_id, size, align,
new_goal, -1ULL);
#else
ptr = alloc_bootmem_core(pgdat->bdata, size, align,
new_goal, 0);
#endif
if (ptr)
return ptr;
}
#endif

return __alloc_bootmem_node(pgdat, size, align, goal);

}


>
> I don't have a clue what your patches do. Can you tell us?

do use bootmem, and use early_res instead.

you are on the to list...

please check...
http://lkml.org/lkml/2010/2/10/39
>
> Earlier, Johannes wrote
>
> : Humm, now that is a bit disappointing. Because it means we will never
> : get rid of bootmem as long as it works for the other architectures.
> : And your changeset just added ~900 lines of code, some of it being a
> : rather ugly compatibility layer in bootmem that I hoped could go away
> : again sooner than later.
> :
> : I do not know what the upsides for x86 are from no longer using bootmem
> : but it would suck from a code maintainance point of view to get stuck
> : half way through this transition and have now TWO implementations of
> : the bootmem interface we would like to get rid of.
>
> Which is a pretty good-sounding argument. Perhaps we should be
> dropping your patches.
>
> What patches _are_ these x86 bootmem changes, anyway? Please identify
> them so people can take a look and see what they do.

http://lkml.org/lkml/2010/2/10/39

and you and linus, ingo, hpa, tglx on the To list.

Yinghai
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
From: Yinghai Lu on
On 03/06/2010 04:42 PM, Yinghai Lu wrote:
> On 03/06/2010 04:22 PM, Andrew Morton wrote:
>> On Fri, 05 Mar 2010 21:44:38 -0800 Yinghai Lu <yinghai(a)kernel.org> wrote:
>>
>>> On 03/05/2010 12:38 PM, Yinghai Lu wrote:
>>>> if you don't want to drop
>>>> | bootmem: avoid DMA32 zone by default
>>>>
>>>> today mainline tree actually DO NOT need that patch according to print out ...
>>>>
>>>> please apply this one too.
>>>>
>>>> [PATCH] x86/bootmem: introduce bootmem_default_goal
>>>>
>>>> don't punish the 64bit systems with less 4G RAM.
>>>> they should use _pa(MAX_DMA_ADDRESS) at first pass instead of failback...
>>>
>>> andrew,
>>>
>>> please drop Johannes' patch : bootmem: avoid DMA32 zone by default
>>
>> I'd rather not. That patch is said to fix a runtime problem which is
>> present in 2.6.33 and hence we planned on backporting it into 2.6.33.x.
>
> that patch make my box booting time from 215s to 265s.
>
> should have better way to fix the problem:
> just put the mem_map or the big chunk on high.
> instead put everything above 4g.
>
> some thing like
> static void * __init_refok __earlyonly_bootmem_alloc(int node,
> unsigned long size,
> unsigned long align,
> unsigned long goal)
> {
> return __alloc_bootmem_node_high(NODE_DATA(node), size, align, goal);
> }
>
> void * __init __alloc_bootmem_node_high(pg_data_t *pgdat, unsigned long size,
> unsigned long align, unsigned long goal)
> {
> #ifdef MAX_DMA32_PFN
> unsigned long end_pfn;
>
> if (WARN_ON_ONCE(slab_is_available()))
> return kzalloc_node(size, GFP_NOWAIT, pgdat->node_id);
>
> /* update goal according ...MAX_DMA32_PFN */
> end_pfn = pgdat->node_start_pfn + pgdat->node_spanned_pages;
>
> if (end_pfn > MAX_DMA32_PFN + (128 >> (20 - PAGE_SHIFT)) &&
> (goal >> PAGE_SHIFT) < MAX_DMA32_PFN) {
> void *ptr;
> unsigned long new_goal;
>
> new_goal = MAX_DMA32_PFN << PAGE_SHIFT;
> #ifdef CONFIG_NO_BOOTMEM
> ptr = __alloc_memory_core_early(pgdat->node_id, size, align,
> new_goal, -1ULL);
> #else
> ptr = alloc_bootmem_core(pgdat->bdata, size, align,
> new_goal, 0);
> #endif
> if (ptr)
> return ptr;
> }
> #endif
>
> return __alloc_bootmem_node(pgdat, size, align, goal);
>
> }

Jiri, can you send out your bootlog and .config?

Yinghai
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
From: Paul Mackerras on
On Sat, Mar 06, 2010 at 04:22:34PM -0800, Andrew Morton wrote:
> Earlier, Johannes wrote
>
> : Humm, now that is a bit disappointing. Because it means we will never
> : get rid of bootmem as long as it works for the other architectures.
> : And your changeset just added ~900 lines of code, some of it being a
> : rather ugly compatibility layer in bootmem that I hoped could go away
> : again sooner than later.

Whoa! Who's proposing to get rid of bootmem, and why?

Paul.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/