74 lines
2.3 KiB
Diff
74 lines
2.3 KiB
Diff
From d329d15b6630b30f4b975585f420cc0b66cd9367 Mon Sep 17 00:00:00 2001
|
|
From: Jian Jun Chen <jian.jun.chen@intel.com>
|
|
Date: Fri, 31 Aug 2018 10:59:03 +0800
|
|
Subject: [PATCH 421/550] VBS-K: add reset support for vbs_rng
|
|
|
|
Add reset support for vbs_rng, it acts as an example about how to
|
|
support D3.
|
|
|
|
Signed-off-by: Jian Jun Chen <jian.jun.chen@intel.com>
|
|
Reviewed-by: Shuo Liu <shuo.a.liu@intel.com>
|
|
Reviewed-by: Yu Wang <yu1.wang@intel.com>
|
|
Reviewed-by: Zhao Yakui <yakui.zhao@intel.com>
|
|
---
|
|
drivers/vbs/vbs_rng.c | 14 +++++++++-----
|
|
1 file changed, 9 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/drivers/vbs/vbs_rng.c b/drivers/vbs/vbs_rng.c
|
|
index 569d1d5d689c..45e17b086c29 100644
|
|
--- a/drivers/vbs/vbs_rng.c
|
|
+++ b/drivers/vbs/vbs_rng.c
|
|
@@ -123,7 +123,7 @@ static int vbs_rng_connection_cnt = 0;
|
|
|
|
/* function declarations */
|
|
static int handle_kick(int client_id, unsigned long *ioreqs_map);
|
|
-static void vbs_rng_reset(struct vbs_rng *rng);
|
|
+static long vbs_rng_reset(struct vbs_rng *rng);
|
|
static void vbs_rng_stop(struct vbs_rng *rng);
|
|
static void vbs_rng_flush(struct vbs_rng *rng);
|
|
#ifdef RUNTIME_CTRL
|
|
@@ -319,7 +319,6 @@ static int vbs_rng_open(struct inode *inode, struct file *f)
|
|
static int vbs_rng_release(struct inode *inode, struct file *f)
|
|
{
|
|
struct vbs_rng *rng = f->private_data;
|
|
- int i;
|
|
|
|
if (!rng)
|
|
pr_err("%s: UNLIKELY rng NULL!\n",
|
|
@@ -327,8 +326,6 @@ static int vbs_rng_release(struct inode *inode, struct file *f)
|
|
|
|
vbs_rng_stop(rng);
|
|
vbs_rng_flush(rng);
|
|
- for (i = 0; i < VBS_K_RNG_VQ_MAX; i++)
|
|
- virtio_vq_reset(&(rng->vqs[i]));
|
|
|
|
/* device specific release */
|
|
vbs_rng_reset(rng);
|
|
@@ -396,6 +393,12 @@ static long vbs_rng_ioctl(struct file *f, unsigned int ioctl,
|
|
/* Increment counter */
|
|
vbs_rng_connection_cnt++;
|
|
return r;
|
|
+ case VBS_RESET_DEV:
|
|
+ pr_debug("VBS_RESET_DEV ioctl:\n");
|
|
+ vbs_rng_stop(rng);
|
|
+ vbs_rng_flush(rng);
|
|
+ r = vbs_rng_reset(rng);
|
|
+ return r;
|
|
default:
|
|
/*mutex_lock(&n->dev.mutex);*/
|
|
pr_debug("VBS_K generic ioctls!\n");
|
|
@@ -410,8 +413,9 @@ static long vbs_rng_ioctl(struct file *f, unsigned int ioctl,
|
|
}
|
|
|
|
/* device specific function to cleanup itself */
|
|
-static void vbs_rng_reset(struct vbs_rng *rng)
|
|
+static long vbs_rng_reset(struct vbs_rng *rng)
|
|
{
|
|
+ return virtio_dev_reset(&rng->dev);
|
|
}
|
|
|
|
/* device specific function */
|
|
--
|
|
2.19.1
|
|
|