On 05/04/11 19:13, Blue Swirl wrote:
- /* Enforce a minimum alignment of CONFIG_OFMEM_MALLOC_ALIGN, and choose an alignment
which is the next power of 2 higher than the specified size */
- align = size;
- if (align< CONFIG_OFMEM_MALLOC_ALIGN) {
Since size or alignment of CONFIG_OFMEM_MALLOC_ALIGN (4 or 8) may be common, I'd change '<' to'<=' to avoid the loop.
Okay - although to be honest, most allocations seem to be a multiple of PAGE_SIZE from what I can see so I don't think that would make much difference? I've no objection to this though.
align = CONFIG_OFMEM_MALLOC_ALIGN;
- } else {
align--;
for (i = 1; i< sizeof(unsigned int) * 8; i<<=1) {
This should probably be sizeof(unsigned long) instead, so>4GB sizes on 64 bit targets are properly aligned ;-).
Okay ;)
align |= align>> i?
Done. Thinking about this patch more, it could be that I am over-engineering a simple problem. Maybe the romvec interface simply insists that all allocations are aligned to an 8K boundary which would fix the Solaris IOMMU problem, but also results in much less efficient memory use? I think this is a reasonable starting point though.
ATB,
Mark.