Kernel (for ppgtt) requires memory address to be aligned to page size (4096). -v2: added marking that also fixes initial committags/18.3-branchpoint01058a5522
. -v3: numbers replaced by PAGE_SIZE; buffer-object size is aligned instead of alignment of offsets (Chris Wilson). -v4: changes related to PAGE_SIZE moved to separate commit -v5: restored alignment to page-size for 0-size. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=106997 Fixes:a363bb2cd0
(i965: Allocate VMA in userspace for full-PPGTT systems.) Fixes:01058a5522
(i965: Add virtual memory allocator infrastructure to brw_bufmgr.) Signed-off-by: Sergii Romantsov <sergii.romantsov@globallogic.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
@@ -496,7 +496,6 @@ bo_alloc_internal(struct brw_bufmgr *bufmgr, | |||
uint32_t stride) | |||
{ | |||
struct brw_bo *bo; | |||
unsigned int page_size = getpagesize(); | |||
int ret; | |||
struct bo_cache_bucket *bucket; | |||
bool alloc_from_cache; | |||
@@ -522,12 +521,12 @@ bo_alloc_internal(struct brw_bufmgr *bufmgr, | |||
* allocation up. | |||
*/ | |||
if (bucket == NULL) { | |||
bo_size = size; | |||
if (bo_size < page_size) | |||
bo_size = page_size; | |||
unsigned int page_size = getpagesize(); | |||
bo_size = size == 0 ? page_size : ALIGN(size, page_size); | |||
} else { | |||
bo_size = bucket->size; | |||
} | |||
assert(bo_size); | |||
mtx_lock(&bufmgr->lock); | |||
/* Get a buffer out of the cache if available */ |