[OpenBIOS] [PATCH 3/5] Alter ofmem_malloc_align() so that the resulting pointer is aligned for both physical and virtual addresses.

Andreas Färber andreas.faerber at web.de
Wed Dec 22 13:53:55 CET 2010


Am 22.12.2010 um 11:38 schrieb Mark Cave-Ayland:

> Andreas Färber wrote:
>
>> --verbose please! What is this supposed to do? Seems like a  
>> duplicate of ofmem.c:ea_to_phys() but different?
>> Andreas
>
> It's used to convert between physical/virtual addresses. For  
> alignment purposes, we need to ensure that memory allocated to a  
> specific alignment is aligned both physically and virtually and  
> since I couldn't see these functions in the PPC io.h file I just  
> added them.
>
> From what you're saying it sounds like the proper fix would be to  
> rename the PPC functions ea_to_phys() (and also it's reverse mapping  
> function) to match the SPARC definitions so they can be called from  
> OFMEM. Does that sound reasonable?

No. The virtual address on ppc64 is something like 80 bits, whereas  
the effective address (64 bits) really is what we want, similar  
differences for 32-bit, so it shouldn't be renamed. It may need to be  
wrapped.

I don't think it belongs in io.h either. I wouldn't know where  
virt_offset is initialized, so I assume that during runtime (as  
opposed to forthstrap) it will be zero and all you're doing there is  
identity-mapping things, which buys us nothing.

We do have ofmem_arch_translate() or similar for the virtual-to- 
physical direction. Maybe we need another ofmem_* one for the opposite  
direction? sparc implementations could then call their *va* macros  
from there if it suits them. The way we map OpenBIOS into RAM in  
ea2phys() should guarantee physical alignment of aligned effective  
addresses, so that there's no need to consider it in other functions  
(this is an ugly hack, in theory OpenBIOS would need to be fully  
relocatable and just copied there).

Andreas


More information about the OpenBIOS mailing list