habanalabs: enable access to info ioctl during hard reset
authorDani Liberman <dliberman@habana.ai>
Mon, 22 Nov 2021 19:47:30 +0000 (21:47 +0200)
committerOded Gabbay <ogabbay@kernel.org>
Sun, 26 Dec 2021 06:59:07 +0000 (08:59 +0200)
Because info ioctl is used to retrieve data, some of its opcodes may be
used during hard reset.
Other ioctls should be blocked while device is not operational.

Signed-off-by: Dani Liberman <dliberman@habana.ai>
Reviewed-by: Oded Gabbay <ogabbay@kernel.org>
Signed-off-by: Oded Gabbay <ogabbay@kernel.org>
drivers/misc/habanalabs/common/command_submission.c
drivers/misc/habanalabs/common/habanalabs_ioctl.c

index 7a277f442207f2a7c250c3f9e86dc1d134d5d505..8be547b0926c90282dc333eff02d73d6cd83c528 100644 (file)
@@ -1146,9 +1146,6 @@ static int hl_cs_sanity_checks(struct hl_fpriv *hpriv, union hl_cs_args *args)
        enum hl_cs_type cs_type;
 
        if (!hl_device_operational(hdev, &status)) {
-               dev_warn_ratelimited(hdev->dev,
-                       "Device is %s. Can't submit new CS\n",
-                       hdev->status[status]);
                return -EBUSY;
        }
 
@@ -2997,7 +2994,7 @@ int hl_wait_ioctl(struct hl_fpriv *hpriv, void *data)
         * user interrupt
         */
        if (!hl_device_operational(hpriv->hdev, NULL))
-               return -EPERM;
+               return -EBUSY;
 
        if (flags & HL_WAIT_CS_FLAGS_INTERRUPT)
                rc = hl_interrupt_wait_ioctl(hpriv, data);
index 15797d55b4e80b92e5ab45b2e3b3419b563e8680..6c7339978bae33f723ea2201a65381b08be8c7ab 100644 (file)
@@ -774,7 +774,6 @@ static long _hl_ioctl(struct file *filep, unsigned int cmd, unsigned long arg,
                const struct hl_ioctl_desc *ioctl, struct device *dev)
 {
        struct hl_fpriv *hpriv = filep->private_data;
-       struct hl_device *hdev = hpriv->hdev;
        unsigned int nr = _IOC_NR(cmd);
        char stack_kdata[128] = {0};
        char *kdata = NULL;
@@ -783,12 +782,6 @@ static long _hl_ioctl(struct file *filep, unsigned int cmd, unsigned long arg,
        u32 hl_size;
        int retcode;
 
-       if (hdev->hard_reset_pending) {
-               dev_crit_ratelimited(dev,
-                       "Device HARD reset pending! Please close FD\n");
-               return -ENODEV;
-       }
-
        /* Do not trust userspace, use our own definition */
        func = ioctl->func;