anv: Fix some mismatches of canonical and regular addresses around anv_bo_vma_alloc_or_close()
anv_vma_alloc() returns a canonical address, but explicit_address is a regular address. This mismatch can potentially cause issues. So here making bo->offset as always canonical address by converting it in the explicit case and fixing the only caller that was caling anv_bo_vma_alloc_or_close() with a canonical address. Signed-off-by: José Roberto de Souza <jose.souza@intel.com> Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23977>
This commit is contained in:

committed by
Marge Bot

parent
f948393005
commit
2fa4fe2c85
@@ -436,7 +436,7 @@ anv_block_pool_expand_range(struct anv_block_pool *pool, uint32_t size)
|
|||||||
pool->name,
|
pool->name,
|
||||||
new_bo_size,
|
new_bo_size,
|
||||||
pool->bo_alloc_flags,
|
pool->bo_alloc_flags,
|
||||||
pool->start_address + pool->size,
|
intel_48b_address(pool->start_address + pool->size),
|
||||||
&new_bo);
|
&new_bo);
|
||||||
if (result != VK_SUCCESS)
|
if (result != VK_SUCCESS)
|
||||||
return result;
|
return result;
|
||||||
@@ -1422,7 +1422,7 @@ anv_bo_vma_alloc_or_close(struct anv_device *device,
|
|||||||
|
|
||||||
if (alloc_flags & ANV_BO_ALLOC_FIXED_ADDRESS) {
|
if (alloc_flags & ANV_BO_ALLOC_FIXED_ADDRESS) {
|
||||||
bo->has_fixed_address = true;
|
bo->has_fixed_address = true;
|
||||||
bo->offset = explicit_address;
|
bo->offset = intel_canonical_address(explicit_address);
|
||||||
} else {
|
} else {
|
||||||
bo->offset = anv_vma_alloc(device, bo->size + bo->_ccs_size,
|
bo->offset = anv_vma_alloc(device, bo->size + bo->_ccs_size,
|
||||||
align, alloc_flags, explicit_address,
|
align, alloc_flags, explicit_address,
|
||||||
|
@@ -419,7 +419,7 @@ struct anv_bo {
|
|||||||
|
|
||||||
/* Last known offset. This value is provided by the kernel when we
|
/* Last known offset. This value is provided by the kernel when we
|
||||||
* execbuf and is used as the presumed offset for the next bunch of
|
* execbuf and is used as the presumed offset for the next bunch of
|
||||||
* relocations.
|
* relocations, in canonical address format.
|
||||||
*/
|
*/
|
||||||
uint64_t offset;
|
uint64_t offset;
|
||||||
|
|
||||||
@@ -596,7 +596,7 @@ struct anv_block_pool {
|
|||||||
|
|
||||||
uint64_t size;
|
uint64_t size;
|
||||||
|
|
||||||
/* The address where the start of the pool is pinned. The various bos that
|
/* The canonical address where the start of the pool is pinned. The various bos that
|
||||||
* are created as the pool grows will have addresses in the range
|
* are created as the pool grows will have addresses in the range
|
||||||
* [start_address, start_address + BLOCK_POOL_MEMFD_SIZE).
|
* [start_address, start_address + BLOCK_POOL_MEMFD_SIZE).
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user