2002-12-11 09:13:48

by Felix Domke

[permalink] [raw]
Subject: Allocating 16MB aligned phsyical memory

Hi,

i'm almost a newbie to kernel hacking, and i'm currently writing a driver
for some powerpc-based chipset by IBM (STBxxxx), using the
2.4.xx-linuxppc_devel kernel.

Some On-Chip-Devices require a very strict alignment of memory. For example,
one function (mpeg2 transport demuxer) require that all (32) queues (each of
them about 32kb) reside in one 16MB region, each of them not crossing 1MB
boundary.

At the moment, i'm reserving a 16MB space of ram for which i made an own
allocater. needless to say that this sucks. So now i'm searching for a way
to allocate physical-mapped, contiguous, aligned (at 2^24 bytes) memory. I
already tried to understand __get_free_pages, map_page and the
powerpc-specific "consistent_alloc", but i couldn't think of enforcing the
alignments. I don't want to allocate 16MB more memory just for the
alignment.

I know that allocating 16MB-aligned memory isn't nice. But the other choice
is to completely reserve 16MB of RAM, which isn't nice either, since i only
need ~2MB of them.

Can anybody give me a hint how to do this?

felix domke


2002-12-11 22:36:21

by Pete Zaitcev

[permalink] [raw]
Subject: Re: Allocating 16MB aligned phsyical memory

>[...]
> At the moment, i'm reserving a 16MB space of ram for which i made an own
> allocater. needless to say that this sucks.

No, that's normal. Of course, you should have used Pauline's
bigphysarea patch, but otherwise it's a sane idea, IMHO.
http://www.polyware.nl/~middelink/En/hob-v4l.html
http://www.polyware.nl/~middelink/patch/bigphysarea-2.4.4.tar.gz

I often wonder why MPEG hardware designers are such dorks.
It is pretty common place between them to ask for contiguous
memory. I would say, 95% of requests for contiguous memory
comes from poor hacks who have to deal with DVRs, PVRs,
and such. Practically no other hardware is this idiotic.
Not that it's impossible to do right, or anything. I think,
stradis is sane.

-- Pete