55 lines
1.7 KiB
Diff
55 lines
1.7 KiB
Diff
From d9e2da766fa2f6e75e2a246914e02d57aaa80c30 Mon Sep 17 00:00:00 2001
|
|
From: Shuo Liu <shuo.a.liu@intel.com>
|
|
Date: Fri, 31 Aug 2018 10:59:02 +0800
|
|
Subject: [PATCH 552/743] vhm: remove re-schedule for ioreq tasklet
|
|
|
|
io_req_tasklet can process all existing or even incoming ioreqs in the
|
|
ioreq shared page once. So when the ioreq IPI rising, we needn't rearm
|
|
the tasklet if the previous one havn't got running. tasklet_schedule
|
|
can gurantee to execute once after schedule, and all pending ioreqs
|
|
can be processed once. tasklet_schedule also can rearm the running
|
|
tasklet so no ioreq interrupt lost.
|
|
|
|
Signed-off-by: Shuo Liu <shuo.a.liu@intel.com>
|
|
Reviewed-by: Jason Chen CJ <jason.cj.chen@intel.com>
|
|
---
|
|
drivers/char/vhm/vhm_dev.c | 11 +----------
|
|
1 file changed, 1 insertion(+), 10 deletions(-)
|
|
|
|
diff --git a/drivers/char/vhm/vhm_dev.c b/drivers/char/vhm/vhm_dev.c
|
|
index e454b9efcda2..39204b5d7898 100644
|
|
--- a/drivers/char/vhm/vhm_dev.c
|
|
+++ b/drivers/char/vhm/vhm_dev.c
|
|
@@ -96,7 +96,6 @@ static int major;
|
|
static struct class *vhm_class;
|
|
static struct device *vhm_device;
|
|
static struct tasklet_struct vhm_io_req_tasklet;
|
|
-static atomic_t ioreq_retry = ATOMIC_INIT(0);
|
|
|
|
struct table_iomems {
|
|
/* list node for this table_iomems */
|
|
@@ -622,19 +621,11 @@ static void io_req_tasklet(unsigned long data)
|
|
|
|
acrn_ioreq_distribute_request(vm);
|
|
}
|
|
-
|
|
- if (atomic_read(&ioreq_retry) > 0) {
|
|
- atomic_dec(&ioreq_retry);
|
|
- tasklet_schedule(&vhm_io_req_tasklet);
|
|
- }
|
|
}
|
|
|
|
static void vhm_intr_handler(void)
|
|
{
|
|
- if (test_bit(TASKLET_STATE_SCHED, &(vhm_io_req_tasklet.state)))
|
|
- atomic_inc(&ioreq_retry);
|
|
- else
|
|
- tasklet_schedule(&vhm_io_req_tasklet);
|
|
+ tasklet_schedule(&vhm_io_req_tasklet);
|
|
}
|
|
|
|
static int vhm_dev_release(struct inode *inodep, struct file *filep)
|
|
--
|
|
2.19.2
|
|
|