From 873e573464e3c968b8158d4a9ce13ffddc6439f5 Mon Sep 17 00:00:00 2001 From: Vikram Kanigiri Date: Mon, 29 Jul 2024 17:47:49 +0530 Subject: [PATCH] vblk: use interrupted wait API instead of normal wait Currently vblk driver uses wait_for_completion() for the requests from block layer or responses from Storage Server. wait_for_completion() make the current waiter to be un-interrutable. But linux top utility loadavg metric includes the processes both in running state and uninterruptable sate. Replace wait_for_completion() with wait_for_completion_interruptible() in driver, so that vblk wait will not be included in loadavg. This changes is made as per customer request. It is for only cosmetic or for accounting purposes and no effect in functionality. Bug 4767390 Change-Id: I2b885a1623b7d2d3a7af00951c5421dacf9d3d26 Signed-off-by: Vikram Kanigiri (cherry picked from commit ff34c49236bf57542eae09a7e7f7189ac8bddd13) Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3219307 GVS: buildbot_gerritrpt Reviewed-by: Sreenivas Velpula Reviewed-by: Vipin Kumar (cherry picked from commit 2784d7b651cea6eb22195443d2cf43593084324b) Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3262249 Reviewed-by: Sumeet Gupta Tested-by: mobile promotions Reviewed-by: mobile promotions Reviewed-by: Manish Bhardwaj Tested-by: Manish Bhardwaj Reviewed-by: Gokul Vasan L J --- drivers/block/tegra_virt_storage/tegra_hv_vblk.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/block/tegra_virt_storage/tegra_hv_vblk.c b/drivers/block/tegra_virt_storage/tegra_hv_vblk.c index 6e3fd16f..13908b7b 100644 --- a/drivers/block/tegra_virt_storage/tegra_hv_vblk.c +++ b/drivers/block/tegra_virt_storage/tegra_hv_vblk.c @@ -701,9 +701,13 @@ static int vblk_request_worker(void *data) { struct vblk_dev *vblkdev = (struct vblk_dev *)data; bool req_submitted, req_completed; + int ret; while (true) { - wait_for_completion(&vblkdev->complete); + ret = wait_for_completion_interruptible(&vblkdev->complete); + if (ret < 0) { + continue; + } /* Taking ivc lock before performing IVC read/write */ mutex_lock(&vblkdev->ivc_lock);