lkml.org 
[lkml]   [2013]   [Aug]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
Subject[PATCH] Add uio_sync_event interface to support mulit-instances case in UIO framework
Date
Hi, guys,

Recently, we have met fake interrupt issue when using UIO as our vpu driver in mulit-instances case,
the issue can be described as below:

In multi-instances case, we use vpu_lock(semaphore) to implement the mutually exclusive access to the
device, each instace open uio device once and will be associated with a fd and its own uio_listener,
we use poll to wait for the hardware interrupt. So let's assume that there are two instances, A and B,
their uio_listener->event_count and idev->event are all 0 at the beginning, then A get the vpu_lock and start
to work, it will block at poll()(because listener->event_count == idev->count) until H/W interrupt happens
(atomic_inc(&idev->event)), after it releases vpu_lock, B will get the lock and start to work, however,
its poll will return immediately because B's uio_listener->event_count is 0 while idev->event has been 1,
that's how the fake interrupt happens.

Our proposal:
Add new uio_sync_event(struct uio_listener *listener) function in uio,c, so that we can call it directly
when we want to sync the event count.


Xiaolong Ye (1):
uio: add uio_event_sync interface

drivers/uio/uio.c | 12 ++++++++++++
include/linux/uio_driver.h | 1 +
2 files changed, 13 insertions(+)

--
1.7.9.5



\
 
 \ /
  Last update: 2013-08-14 14:41    [W:1.604 / U:1.064 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site