habanalabs: show the process context dram usage
authorOded Gabbay <oded.gabbay@gmail.com>
Tue, 30 Jul 2019 08:48:02 +0000 (11:48 +0300)
committerOded Gabbay <oded.gabbay@gmail.com>
Thu, 5 Sep 2019 11:55:26 +0000 (14:55 +0300)
When the user query the dram usage of a context, show it the dram usage of
its context, not the user context that is currently running on the device.

This has no effect right now as we only have a single process and a single
context, but this makes the code more ready for multiple process support.

Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com>
Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/misc/habanalabs/habanalabs_ioctl.c

index 07127576b3e84df0b90185b3677a79ebafd755b4..c9a4799eb251c1cedda3f88ec55ba4c757c394f9 100644 (file)
@@ -89,8 +89,9 @@ static int hw_events_info(struct hl_device *hdev, struct hl_info_args *args)
        return copy_to_user(out, arr, min(max_size, size)) ? -EFAULT : 0;
 }
 
-static int dram_usage_info(struct hl_device *hdev, struct hl_info_args *args)
+static int dram_usage_info(struct hl_fpriv *hpriv, struct hl_info_args *args)
 {
+       struct hl_device *hdev = hpriv->hdev;
        struct hl_info_dram_usage dram_usage = {0};
        u32 max_size = args->return_size;
        void __user *out = (void __user *) (uintptr_t) args->return_pointer;
@@ -104,7 +105,9 @@ static int dram_usage_info(struct hl_device *hdev, struct hl_info_args *args)
                                prop->dram_base_address);
        dram_usage.dram_free_mem = (prop->dram_size - dram_kmd_size) -
                                        atomic64_read(&hdev->dram_used_mem);
-       dram_usage.ctx_dram_mem = atomic64_read(&hdev->user_ctx->dram_phys_mem);
+       if (hpriv->ctx)
+               dram_usage.ctx_dram_mem =
+                       atomic64_read(&hpriv->ctx->dram_phys_mem);
 
        return copy_to_user(out, &dram_usage,
                min((size_t) max_size, sizeof(dram_usage))) ? -EFAULT : 0;
@@ -218,7 +221,7 @@ static int hl_info_ioctl(struct hl_fpriv *hpriv, void *data)
                break;
 
        case HL_INFO_DRAM_USAGE:
-               rc = dram_usage_info(hdev, args);
+               rc = dram_usage_info(hpriv, args);
                break;
 
        case HL_INFO_HW_IDLE:
@@ -321,7 +324,7 @@ long hl_ioctl(struct file *filep, unsigned int cmd, unsigned long arg)
                cmd = ioctl->cmd;
        } else {
                dev_err(hdev->dev, "invalid ioctl: pid=%d, nr=0x%02x\n",
-                         task_pid_nr(current), nr);
+                       task_pid_nr(current), nr);
                return -ENOTTY;
        }