2006-12-27 15:49:46

by Aubrey Li

[permalink] [raw]
Subject: Page alignment issue

As for the buddy system, much of docs mention the physical address of
the first page frame of a block should be a multiple of the group
size. For example, the initial address of a 16-page-frame block should
be 16-page aligned. I happened to encounted an issue that the physical
addresss pf the block is not 4-page aligned(0x36c9000) while the order
of the block is 2. I want to know what out of buddy algorithm depend
on this feature? My problem seems to happen in
schedule()->context_switch() call, but so far I didn't figure out the
root cause.

Any clue or suggestion will be really appreciated!
Thanks,
-Aubrey


2006-12-28 03:49:39

by Aubrey Li

[permalink] [raw]
Subject: Re: Page alignment issue

On 12/27/06, Aubrey <[email protected]> wrote:
> As for the buddy system, much of docs mention the physical address of
> the first page frame of a block should be a multiple of the group
> size. For example, the initial address of a 16-page-frame block should
> be 16-page aligned. I happened to encounted an issue that the physical
> addresss pf the block is not 4-page aligned(0x36c9000) while the order
> of the block is 2. I want to know what out of buddy algorithm depend
> on this feature? My problem seems to happen in
> schedule()->context_switch() call, but so far I didn't figure out the
> root cause.

It seems nothing depend on this feature. the problem you encounted is
the kernel task stack should be 2-page aligned.

-Aubrey

2006-12-31 06:03:12

by Nick Piggin

[permalink] [raw]
Subject: Re: Page alignment issue

Aubrey wrote:
> As for the buddy system, much of docs mention the physical address of
> the first page frame of a block should be a multiple of the group
> size. For example, the initial address of a 16-page-frame block should
> be 16-page aligned. I happened to encounted an issue that the physical
> addresss pf the block is not 4-page aligned(0x36c9000) while the order
> of the block is 2. I want to know what out of buddy algorithm depend
> on this feature?

I think that's correct. The buddy allocator uses bitwise operations to
find buddy pages and promote free pairs (eg. see __page_find_buddy()
and __find_combined_index()).

--
SUSE Labs, Novell Inc.
Send instant messages to your online friends http://au.messenger.yahoo.com