increasing the support of affinity-on-first-touch
This commit is contained in:
parent
022983346e
commit
dceb8485d9
3 changed files with 11 additions and 6 deletions
|
@ -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);
|
||||
|
|
|
@ -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)) {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue