clear-pkgs-linux-iot-lts2018/1110-dma-buf-hyper_dmabuf-p...

65 lines
2.2 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Dongwon Kim <dongwon.kim@intel.com>
Date: Wed, 29 May 2019 15:14:47 -0700
Subject: [PATCH] dma-buf/hyper_dmabuf: protection on pending
pending is a counter that shows how many events are currently
pending. This counter variable is updated in multiple places
in the driver so should be protected with the event spin lock..
Signed-off-by: Dongwon Kim <dongwon.kim@intel.com>
Signed-off-by: Liu Xinyun <xinyun.liu@intel.com>
---
drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_drv.c | 4 ++++
drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_event.c | 12 ++++--------
2 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_drv.c b/drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_drv.c
index f1afce29d6af..7c69a7e5eb49 100644
--- a/drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_drv.c
+++ b/drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_drv.c
@@ -201,7 +201,11 @@ static ssize_t hyper_dmabuf_event_read(struct file *filp, char __user *buffer,
}
ret += e->event_data.hdr.size;
+
+ spin_lock_irq(&hy_drv_priv->event_lock);
hy_drv_priv->pending--;
+ spin_unlock_irq(&hy_drv_priv->event_lock);
+
kfree(e);
}
}
diff --git a/drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_event.c b/drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_event.c
index 392ea99e0784..33ef6954d832 100644
--- a/drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_event.c
+++ b/drivers/dma-buf/hyper_dmabuf/hyper_dmabuf_event.c
@@ -58,6 +58,10 @@ static void send_event(struct hyper_dmabuf_event *e)
hy_drv_priv->pending++;
+ dev_dbg(hy_drv_priv->dev,
+ "generating import event(%d) for hid.id:%x\n",
+ hy_drv_priv->pending, e->event_data.hdr.hid.id);
+
wake_up_interruptible(&hy_drv_priv->event_wait);
spin_unlock_irqrestore(&hy_drv_priv->event_lock, irqflags);
@@ -110,13 +114,5 @@ int hyper_dmabuf_import_event(hyper_dmabuf_id_t hid)
send_event(e);
- dev_dbg(hy_drv_priv->dev,
- "event number = %d :", hy_drv_priv->pending);
-
- dev_dbg(hy_drv_priv->dev,
- "generating events for {%d, %d, %d, %d}\n",
- imported->hid.id, imported->hid.rng_key[0],
- imported->hid.rng_key[1], imported->hid.rng_key[2]);
-
return 0;
}
--
https://clearlinux.org