increasing the support of affinity-on-first-touch

This commit is contained in:
Stefan Lankes 2011-12-14 01:39:12 -08:00
parent 022983346e
commit dceb8485d9
3 changed files with 11 additions and 6 deletions

View file

@ -99,7 +99,7 @@ void svm_invalidate(void);
static inline void svm_flush(size_t unused)
{
// need to write to another line to make sure the write combine buffer gets flushed
*(int *)RCCE_fool_write_combine_buffer = 1;
*(volatile int *)RCCE_fool_write_combine_buffer = 1;
}
#else
void svm_flush(size_t addr);

View file

@ -413,10 +413,12 @@ int change_page_permissions(size_t start, size_t end, uint32_t flags)
phyaddr = pgt->entries[index2] & 0xFFFFF000;
newflags = pgt->entries[index2] & 0xFFF; // get old flags
if ((newflags & PG_SVM_STRONG) && !(newflags & PG_PRESENT) && (flags & (VMA_READ|VMA_WRITE) && !(flags & VMA_NOACCESS)))
newflags |= PG_PRESENT;
else if ((newflags & PG_SVM_STRONG) && (newflags & PG_PRESENT) && (flags & VMA_NOACCESS))
newflags &= ~PG_PRESENT;
if (!(newflags & PG_SVM_INIT)) {
if ((newflags & PG_SVM_STRONG) && !(newflags & PG_PRESENT) && (flags & (VMA_READ|VMA_WRITE) && !(flags & VMA_NOACCESS)))
newflags |= PG_PRESENT;
else if ((newflags & PG_SVM_STRONG) && (newflags & PG_PRESENT) && (flags & VMA_NOACCESS))
newflags &= ~PG_PRESENT;
}
// update flags
if (!(flags & VMA_WRITE)) {

View file

@ -253,7 +253,10 @@ int svm_alloc_page(size_t addr, page_table_t* pgt)
#endif
if (pgt->entries[index2] & PG_SVM_LAZYRELEASE)
return 0;
return svm_access_request(addr);
if (pgt->entries[index2] & PG_RW)
return svm_access_request(addr);
return 0;
}
}