Maybe I miss something, but I don't see the reason for the PPC
arch_mmu_allocate() to set the "cache inhibited" flag. One negative effect was that for such memory the lwarx instruction (used by the atomic_*() functions) does "... cause the system data storage error handle to be invoked...", as the architecture specification puts it. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15759 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -480,16 +480,16 @@ arch_mmu_allocate(void *_virtualAddress, size_t size, uint8 _protection,
|
|||||||
// we only know page sizes
|
// we only know page sizes
|
||||||
size = ROUNDUP(size, B_PAGE_SIZE);
|
size = ROUNDUP(size, B_PAGE_SIZE);
|
||||||
|
|
||||||
// set protection to WIMGNPP: -I---PP
|
// set protection to WIMGNPP: -----PP
|
||||||
// PP: 00 - no access
|
// PP: 00 - no access
|
||||||
// 01 - read only
|
// 01 - read only
|
||||||
// 10 - read/write
|
// 10 - read/write
|
||||||
// 11 - read only
|
// 11 - read only
|
||||||
uint8 protection = 0;
|
uint8 protection = 0;
|
||||||
if (_protection & B_WRITE_AREA)
|
if (_protection & B_WRITE_AREA)
|
||||||
protection = 0x22;
|
protection = 0x02;
|
||||||
else
|
else
|
||||||
protection = 0x21;
|
protection = 0x01;
|
||||||
|
|
||||||
// find free address large enough to hold "size"
|
// find free address large enough to hold "size"
|
||||||
void *virtualAddress = find_free_virtual_range(_virtualAddress, size);
|
void *virtualAddress = find_free_virtual_range(_virtualAddress, size);
|
||||||
|
|||||||
Reference in New Issue
Block a user