habanalabs: allow control device open during reset
Monitoring apps would like to query device state at any time so we should allow it also during reset because it doesn't involve accessing the h/w. Signed-off-by: Ofir Bitton <obitton@habana.ai> Reviewed-by: Oded Gabbay <ogabbay@kernel.org> Signed-off-by: Oded Gabbay <ogabbay@kernel.org>
This commit is contained in:
parent
8749c27895
commit
a925d90b36
|
@ -355,6 +355,28 @@ bool hl_device_operational(struct hl_device *hdev,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool hl_ctrl_device_operational(struct hl_device *hdev,
|
||||||
|
enum hl_device_status *status)
|
||||||
|
{
|
||||||
|
enum hl_device_status current_status;
|
||||||
|
|
||||||
|
current_status = hl_device_status(hdev);
|
||||||
|
if (status)
|
||||||
|
*status = current_status;
|
||||||
|
|
||||||
|
switch (current_status) {
|
||||||
|
case HL_DEVICE_STATUS_MALFUNCTION:
|
||||||
|
return false;
|
||||||
|
case HL_DEVICE_STATUS_IN_RESET:
|
||||||
|
case HL_DEVICE_STATUS_IN_RESET_AFTER_DEVICE_RELEASE:
|
||||||
|
case HL_DEVICE_STATUS_NEEDS_RESET:
|
||||||
|
case HL_DEVICE_STATUS_OPERATIONAL:
|
||||||
|
case HL_DEVICE_STATUS_IN_DEVICE_CREATION:
|
||||||
|
default:
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void hpriv_release(struct kref *ref)
|
static void hpriv_release(struct kref *ref)
|
||||||
{
|
{
|
||||||
u64 idle_mask[HL_BUSY_ENGINES_MASK_EXT_SIZE] = {0};
|
u64 idle_mask[HL_BUSY_ENGINES_MASK_EXT_SIZE] = {0};
|
||||||
|
|
|
@ -3496,6 +3496,8 @@ int hl_device_open(struct inode *inode, struct file *filp);
|
||||||
int hl_device_open_ctrl(struct inode *inode, struct file *filp);
|
int hl_device_open_ctrl(struct inode *inode, struct file *filp);
|
||||||
bool hl_device_operational(struct hl_device *hdev,
|
bool hl_device_operational(struct hl_device *hdev,
|
||||||
enum hl_device_status *status);
|
enum hl_device_status *status);
|
||||||
|
bool hl_ctrl_device_operational(struct hl_device *hdev,
|
||||||
|
enum hl_device_status *status);
|
||||||
enum hl_device_status hl_device_status(struct hl_device *hdev);
|
enum hl_device_status hl_device_status(struct hl_device *hdev);
|
||||||
int hl_device_set_debug_mode(struct hl_device *hdev, struct hl_ctx *ctx, bool enable);
|
int hl_device_set_debug_mode(struct hl_device *hdev, struct hl_ctx *ctx, bool enable);
|
||||||
int hl_hw_queues_create(struct hl_device *hdev);
|
int hl_hw_queues_create(struct hl_device *hdev);
|
||||||
|
|
|
@ -270,9 +270,9 @@ int hl_device_open_ctrl(struct inode *inode, struct file *filp)
|
||||||
|
|
||||||
mutex_lock(&hdev->fpriv_ctrl_list_lock);
|
mutex_lock(&hdev->fpriv_ctrl_list_lock);
|
||||||
|
|
||||||
if (!hl_device_operational(hdev, NULL)) {
|
if (!hl_ctrl_device_operational(hdev, NULL)) {
|
||||||
dev_dbg_ratelimited(hdev->dev_ctrl,
|
dev_dbg_ratelimited(hdev->dev_ctrl,
|
||||||
"Can't open %s because it is disabled or in reset\n",
|
"Can't open %s because it is disabled\n",
|
||||||
dev_name(hdev->dev_ctrl));
|
dev_name(hdev->dev_ctrl));
|
||||||
rc = -EPERM;
|
rc = -EPERM;
|
||||||
goto out_err;
|
goto out_err;
|
||||||
|
|
Loading…
Reference in New Issue