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)
|
static inline void svm_flush(size_t unused)
|
||||||
{
|
{
|
||||||
// need to write to another line to make sure the write combine buffer gets flushed
|
// 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
|
#else
|
||||||
void svm_flush(size_t addr);
|
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;
|
phyaddr = pgt->entries[index2] & 0xFFFFF000;
|
||||||
newflags = pgt->entries[index2] & 0xFFF; // get old flags
|
newflags = pgt->entries[index2] & 0xFFF; // get old flags
|
||||||
|
|
||||||
if ((newflags & PG_SVM_STRONG) && !(newflags & PG_PRESENT) && (flags & (VMA_READ|VMA_WRITE) && !(flags & VMA_NOACCESS)))
|
if (!(newflags & PG_SVM_INIT)) {
|
||||||
newflags |= PG_PRESENT;
|
if ((newflags & PG_SVM_STRONG) && !(newflags & PG_PRESENT) && (flags & (VMA_READ|VMA_WRITE) && !(flags & VMA_NOACCESS)))
|
||||||
else if ((newflags & PG_SVM_STRONG) && (newflags & PG_PRESENT) && (flags & VMA_NOACCESS))
|
newflags |= PG_PRESENT;
|
||||||
newflags &= ~PG_PRESENT;
|
else if ((newflags & PG_SVM_STRONG) && (newflags & PG_PRESENT) && (flags & VMA_NOACCESS))
|
||||||
|
newflags &= ~PG_PRESENT;
|
||||||
|
}
|
||||||
|
|
||||||
// update flags
|
// update flags
|
||||||
if (!(flags & VMA_WRITE)) {
|
if (!(flags & VMA_WRITE)) {
|
||||||
|
|
|
@ -253,7 +253,10 @@ int svm_alloc_page(size_t addr, page_table_t* pgt)
|
||||||
#endif
|
#endif
|
||||||
if (pgt->entries[index2] & PG_SVM_LAZYRELEASE)
|
if (pgt->entries[index2] & PG_SVM_LAZYRELEASE)
|
||||||
return 0;
|
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