mirror of https://gitee.com/openkylin/linux.git
habanalabs: Avoid using a non-initialized MMU cache mutex
The MMU cache mutex is used in the ASIC hw_init() functions, but it is initialized only later in hl_mmu_init(). This patch prevents it by moving the initialization to the device_early_init() function. Signed-off-by: Tomer Tayar <ttayar@habana.ai> Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com>
This commit is contained in:
parent
8438846cce
commit
8d45f1de39
|
@ -231,6 +231,7 @@ static int device_early_init(struct hl_device *hdev)
|
||||||
|
|
||||||
mutex_init(&hdev->fd_open_cnt_lock);
|
mutex_init(&hdev->fd_open_cnt_lock);
|
||||||
mutex_init(&hdev->send_cpu_message_lock);
|
mutex_init(&hdev->send_cpu_message_lock);
|
||||||
|
mutex_init(&hdev->mmu_cache_lock);
|
||||||
INIT_LIST_HEAD(&hdev->hw_queues_mirror_list);
|
INIT_LIST_HEAD(&hdev->hw_queues_mirror_list);
|
||||||
spin_lock_init(&hdev->hw_queues_mirror_lock);
|
spin_lock_init(&hdev->hw_queues_mirror_lock);
|
||||||
atomic_set(&hdev->in_reset, 0);
|
atomic_set(&hdev->in_reset, 0);
|
||||||
|
@ -260,6 +261,7 @@ static int device_early_init(struct hl_device *hdev)
|
||||||
*/
|
*/
|
||||||
static void device_early_fini(struct hl_device *hdev)
|
static void device_early_fini(struct hl_device *hdev)
|
||||||
{
|
{
|
||||||
|
mutex_destroy(&hdev->mmu_cache_lock);
|
||||||
mutex_destroy(&hdev->send_cpu_message_lock);
|
mutex_destroy(&hdev->send_cpu_message_lock);
|
||||||
|
|
||||||
hl_cb_mgr_fini(hdev, &hdev->kernel_cb_mgr);
|
hl_cb_mgr_fini(hdev, &hdev->kernel_cb_mgr);
|
||||||
|
|
|
@ -404,15 +404,12 @@ int hl_mmu_init(struct hl_device *hdev)
|
||||||
|
|
||||||
/* MMU H/W init was already done in device hw_init() */
|
/* MMU H/W init was already done in device hw_init() */
|
||||||
|
|
||||||
mutex_init(&hdev->mmu_cache_lock);
|
|
||||||
|
|
||||||
hdev->mmu_pgt_pool =
|
hdev->mmu_pgt_pool =
|
||||||
gen_pool_create(__ffs(prop->mmu_hop_table_size), -1);
|
gen_pool_create(__ffs(prop->mmu_hop_table_size), -1);
|
||||||
|
|
||||||
if (!hdev->mmu_pgt_pool) {
|
if (!hdev->mmu_pgt_pool) {
|
||||||
dev_err(hdev->dev, "Failed to create page gen pool\n");
|
dev_err(hdev->dev, "Failed to create page gen pool\n");
|
||||||
rc = -ENOMEM;
|
return -ENOMEM;
|
||||||
goto err_pool_create;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = gen_pool_add(hdev->mmu_pgt_pool, prop->mmu_pgt_addr +
|
rc = gen_pool_add(hdev->mmu_pgt_pool, prop->mmu_pgt_addr +
|
||||||
|
@ -436,8 +433,6 @@ int hl_mmu_init(struct hl_device *hdev)
|
||||||
|
|
||||||
err_pool_add:
|
err_pool_add:
|
||||||
gen_pool_destroy(hdev->mmu_pgt_pool);
|
gen_pool_destroy(hdev->mmu_pgt_pool);
|
||||||
err_pool_create:
|
|
||||||
mutex_destroy(&hdev->mmu_cache_lock);
|
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
@ -459,7 +454,6 @@ void hl_mmu_fini(struct hl_device *hdev)
|
||||||
|
|
||||||
kvfree(hdev->mmu_shadow_hop0);
|
kvfree(hdev->mmu_shadow_hop0);
|
||||||
gen_pool_destroy(hdev->mmu_pgt_pool);
|
gen_pool_destroy(hdev->mmu_pgt_pool);
|
||||||
mutex_destroy(&hdev->mmu_cache_lock);
|
|
||||||
|
|
||||||
/* MMU H/W fini will be done in device hw_fini() */
|
/* MMU H/W fini will be done in device hw_fini() */
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue