DCE-KMD: Use OS abstraction for condition vars

- Use OS abstraction added to display/drivers/server
  for OS condition variables support.

JIRA TDS-16052

Change-Id: If4ae2698308f1a037e5e0d6ec0c9724695a008d3
Signed-off-by: anupamg <anupamg@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3172718
Reviewed-by: Arun Swain <arswain@nvidia.com>
GVS: buildbot_gerritrpt <buildbot_gerritrpt@nvidia.com>
Reviewed-by: Mahesh Kumar <mahkumar@nvidia.com>
This commit is contained in:
anupamg
2024-07-10 22:26:46 +00:00
committed by Jon Hunter
parent 59ead11048
commit aec0d24ecd
5 changed files with 4 additions and 129 deletions

View File

@@ -4,7 +4,7 @@
*/
#include <dce.h>
#include <dce-cond.h>
#include <os-cond.h>
#include <os-lock.h>
#include <dce-worker.h>
#include <os-utils.h>

View File

@@ -1,125 +0,0 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (c) 2019-2023, NVIDIA CORPORATION. All rights reserved.
*/
#ifndef DCE_COND_H
#define DCE_COND_H
#include <linux/wait.h>
#include <linux/sched.h>
struct dce_cond {
bool initialized;
wait_queue_head_t wq;
};
/**
* DCE_COND_WAIT - Wait for a condition to be true
*
* @c - The condition variable to sleep on
* @condition - The condition that needs to be true
*
* Wait for a condition to become true.
*/
#define DCE_COND_WAIT(c, condition) \
({\
int ret = 0; \
wait_event((c)->wq, condition); \
ret;\
})
/**
* DCE_COND_WAIT_INTERRUPTIBLE - Wait for a condition to be true
*
* @c - The condition variable to sleep on
* @condition - The condition that needs to be true
*
* Wait for a condition to become true. Returns -ERESTARTSYS
* on signal.
*/
#define DCE_COND_WAIT_INTERRUPTIBLE(c, condition) \
({ \
int ret = 0; \
ret = wait_event_interruptible((c)->wq, condition); \
ret; \
})
/**
* DCE_COND_WAIT_TIMEOUT - Wait for a condition to be true
*
* @c - The condition variable to sleep on
* @condition - The condition that needs to be true
* @timeout_ms - Timeout in milliseconds, or 0 for infinite wait.
* This parameter must be a u32. Since this is a macro, this is
* enforced by assigning a typecast NULL pointer to a u32 tmp
* variable which will generate a compiler warning (or error if
* the warning is configured as an error).
*
* Wait for a condition to become true. Returns -ETIMEOUT if
* the wait timed out with condition false.
*/
#define DCE_COND_WAIT_TIMEOUT(c, condition, timeout_ms) \
({\
int ret = 0; \
/* This is the assignment to enforce a u32 for timeout_ms */ \
u32 *tmp = (typeof(timeout_ms) *)NULL; \
(void)tmp; \
if (timeout_ms > 0U) { \
long _ret = wait_event_timeout((c)->wq, condition, \
msecs_to_jiffies(timeout_ms)); \
if (_ret == 0) \
ret = -ETIMEDOUT; \
} else { \
wait_event((c)->wq, condition); \
} \
ret;\
})
/**
* DCE_COND_WAIT_INTERRUPTIBLE_TIMEOUT - Wait for a condition to be true
*
* @c - The condition variable to sleep on
* @condition - The condition that needs to be true
* @timeout_ms - Timeout in milliseconds, or 0 for infinite wait.
* This parameter must be a u32. Since this is a macro, this is
* enforced by assigning a typecast NULL pointer to a u32 tmp
* variable which will generate a compiler warning (or error if
* the warning is configured as an error).
*
* Wait for a condition to become true. Returns -ETIMEOUT if
* the wait timed out with condition false or -ERESTARTSYS on
* signal.
*/
#define DCE_COND_WAIT_INTERRUPTIBLE_TIMEOUT(c, condition, timeout_ms) \
({ \
int ret = 0; \
/* This is the assignment to enforce a u32 for timeout_ms */ \
u32 *tmp = (typeof(timeout_ms) *)NULL; \
(void)tmp; \
if (timeout_ms > 0U) { \
long _ret = wait_event_interruptible_timeout((c)->wq, \
condition, msecs_to_jiffies(timeout_ms)); \
if (_ret == 0) \
ret = -ETIMEDOUT; \
else if (_ret == -ERESTARTSYS) \
ret = -ERESTARTSYS; \
} else { \
ret = wait_event_interruptible((c)->wq, condition); \
} \
ret; \
})
int dce_cond_init(struct dce_cond *cond);
void dce_cond_signal(struct dce_cond *cond);
void dce_cond_signal_interruptible(struct dce_cond *cond);
int dce_cond_broadcast(struct dce_cond *cond);
int dce_cond_broadcast_interruptible(struct dce_cond *cond);
void dce_cond_destroy(struct dce_cond *cond);
#endif

View File

@@ -6,7 +6,7 @@
#ifndef DCE_FSM_H
#define DCE_FSM_H
#include <dce-cond.h>
#include <os-cond.h>
#include <os-lock.h>
/**

View File

@@ -6,7 +6,7 @@
#ifndef DCE_WORKER_H
#define DCE_WORKER_H
#include <dce-cond.h>
#include <os-cond.h>
#include <os-lock.h>
#include <dce-thread.h>
#include <atomic.h>

View File

@@ -11,7 +11,7 @@
#include <dce-ipc.h>
#include <dce-hsp.h>
#include <os-lock.h>
#include <dce-cond.h>
#include <os-cond.h>
#include <dce-regs.h>
#include <dce-thread.h>
#include <dce-worker.h>