From 85d7b3c5cc2e081c8bc81f43cef08738a254fc32 Mon Sep 17 00:00:00 2001 From: Sourab Gupta Date: Mon, 7 May 2018 09:27:30 +0530 Subject: gpu: nvgpu: handle clk arb event posting in OS specific code The mechanism of posting events to userspace is OS specific. In linux this works through poll fd, wherein we can make use of nvgpu_cond variables to poll and trigger the corresponding wait_queue. The post event functionality on QNX doesn't work on poll though. It uses iofunc_notify_trigger to post the events to the calling process. As such QNX can't work with nvgpu_cond's. To overcome this issue, it is proposed to create OS specific interface function for posting clk arb events. Linux can call nvgpu_cond based implementation, which makes sense since these are already initialized and poll'ed in Linux specific code only. QNX can implement this interface to call iofunc_notify_* functions, as per its need. Jira VQRM-3741 Change-Id: I7d9f71dae2ae7f6a09cd56662003fd1b7e50324c Signed-off-by: Sourab Gupta Reviewed-on: https://git-master.nvidia.com/r/1709656 GVS: Gerrit_Virtual_Submit Reviewed-by: Alex Waterman Reviewed-by: Terje Bergstrom Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/common/linux/ioctl_clk_arb.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'drivers/gpu/nvgpu/common') diff --git a/drivers/gpu/nvgpu/common/linux/ioctl_clk_arb.c b/drivers/gpu/nvgpu/common/linux/ioctl_clk_arb.c index 09d47722..a7c6a607 100644 --- a/drivers/gpu/nvgpu/common/linux/ioctl_clk_arb.c +++ b/drivers/gpu/nvgpu/common/linux/ioctl_clk_arb.c @@ -88,6 +88,11 @@ static unsigned int nvgpu_clk_arb_poll_dev(struct file *filp, poll_table *wait) return nvgpu_convert_poll_mask(nvgpu_atomic_xchg(&dev->poll_mask, 0)); } +void nvgpu_clk_arb_event_post_event(struct nvgpu_clk_dev *dev) +{ + nvgpu_cond_broadcast_interruptible(&dev->readout_wq); +} + static int nvgpu_clk_arb_release_event_dev(struct inode *inode, struct file *filp) { -- cgit v1.2.2