Commit 8e9445a6 authored by Ofir Bitton's avatar Ofir Bitton Committed by Oded Gabbay

habanalabs: add reset support when user closes FD

In order to support command submissions that are done directly from
user space, the driver must perform soft reset once user closes its FD.
In case the soft reset fails or device is not idle, a hard reset should
be performed.
Signed-off-by: default avatarOfir Bitton <obitton@habana.ai>
Reviewed-by: default avatarOded Gabbay <ogabbay@kernel.org>
Signed-off-by: default avatarOded Gabbay <ogabbay@kernel.org>
parent b6821b3c
...@@ -103,8 +103,24 @@ static int hl_device_release(struct inode *inode, struct file *filp) ...@@ -103,8 +103,24 @@ static int hl_device_release(struct inode *inode, struct file *filp)
return 0; return 0;
} }
hl_cb_mgr_fini(hpriv->hdev, &hpriv->cb_mgr); hl_cb_mgr_fini(hdev, &hpriv->cb_mgr);
hl_ctx_mgr_fini(hpriv->hdev, &hpriv->ctx_mgr); hl_ctx_mgr_fini(hdev, &hpriv->ctx_mgr);
if (hdev->reset_upon_device_release) {
u64 idle_mask[HL_BUSY_ENGINES_MASK_EXT_SIZE] = {0};
/* We try soft reset first */
hl_device_reset(hdev, false, false);
/* If device is not idle perform hard reset */
if (!hdev->asic_funcs->is_device_idle(hdev, idle_mask,
HL_BUSY_ENGINES_MASK_EXT_SIZE, NULL)) {
dev_info(hdev->dev,
"device is not idle (mask %#llx %#llx) after soft reset, performing hard reset",
idle_mask[0], idle_mask[1]);
hl_device_reset(hdev, true, false);
}
}
hl_hpriv_put(hpriv); hl_hpriv_put(hpriv);
......
...@@ -1920,6 +1920,7 @@ struct hl_mmu_funcs { ...@@ -1920,6 +1920,7 @@ struct hl_mmu_funcs {
* @device_fini_pending: true if device_fini was called and might be * @device_fini_pending: true if device_fini was called and might be
* waiting for the reset thread to finish * waiting for the reset thread to finish
* @supports_staged_submission: true if staged submissions are supported * @supports_staged_submission: true if staged submissions are supported
* @reset_upon_device_release: true if reset is required upon device release
*/ */
struct hl_device { struct hl_device {
struct pci_dev *pdev; struct pci_dev *pdev;
...@@ -2026,6 +2027,7 @@ struct hl_device { ...@@ -2026,6 +2027,7 @@ struct hl_device {
u8 process_kill_trial_cnt; u8 process_kill_trial_cnt;
u8 device_fini_pending; u8 device_fini_pending;
u8 supports_staged_submission; u8 supports_staged_submission;
u8 reset_upon_device_release;
/* Parameters for bring-up */ /* Parameters for bring-up */
u64 nic_ports_mask; u64 nic_ports_mask;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment