From 1f855af63fdd31fe3dcfee75f4f5f9b62f30d87e Mon Sep 17 00:00:00 2001 From: Deepak Nibade Date: Tue, 24 Jan 2017 16:41:51 +0530 Subject: gpu: nvgpu: add mutex and spinlock abstraction files Add new abstraction file for all mutex, spinlock and raw_spinlock operations. Add linux specific file which implements linux specific operations for above Jira NVGPU-13 Change-Id: Idab96aa8bf949d6a92ea0edc9f40e90fca401ea4 Signed-off-by: Deepak Nibade Reviewed-on: http://git-master/r/1293186 GVS: Gerrit_Virtual_Submit Reviewed-by: Konsta Holtta Reviewed-by: Bharat Nihalani --- drivers/gpu/nvgpu/include/nvgpu/lock.h | 63 ++++++++++++++++++++++ drivers/gpu/nvgpu/include/nvgpu/lock_linux.h | 81 ++++++++++++++++++++++++++++ 2 files changed, 144 insertions(+) create mode 100644 drivers/gpu/nvgpu/include/nvgpu/lock.h create mode 100644 drivers/gpu/nvgpu/include/nvgpu/lock_linux.h (limited to 'drivers') diff --git a/drivers/gpu/nvgpu/include/nvgpu/lock.h b/drivers/gpu/nvgpu/include/nvgpu/lock.h new file mode 100644 index 00000000..ad070380 --- /dev/null +++ b/drivers/gpu/nvgpu/include/nvgpu/lock.h @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef NVGPU_LOCK_H +#define NVGPU_LOCK_H + +#include + +/* + * struct nvgpu_mutex + * + * Should be implemented per-OS in a separate library + * But implementation should adhere to mutex implementation + * as specified in Linux Documentation + */ +struct nvgpu_mutex; + +/* + * struct nvgpu_spinlock + * + * Should be implemented per-OS in a separate library + * But implementation should adhere to spinlock implementation + * as specified in Linux Documentation + */ +struct nvgpu_spinlock; + +/* + * struct nvgpu_raw_spinlock + * + * Should be implemented per-OS in a separate library + * But implementation should adhere to raw_spinlock implementation + * as specified in Linux Documentation + */ +struct nvgpu_raw_spinlock; + +int nvgpu_mutex_init(struct nvgpu_mutex *mutex); +void nvgpu_mutex_acquire(struct nvgpu_mutex *mutex); +void nvgpu_mutex_release(struct nvgpu_mutex *mutex); +int nvgpu_mutex_tryacquire(struct nvgpu_mutex *mutex); +void nvgpu_mutex_destroy(struct nvgpu_mutex *mutex); + +void nvgpu_spinlock_init(struct nvgpu_spinlock *spinlock); +void nvgpu_spinlock_acquire(struct nvgpu_spinlock *spinlock); +void nvgpu_spinlock_release(struct nvgpu_spinlock *spinlock); + +void nvgpu_raw_spinlock_init(struct nvgpu_raw_spinlock *spinlock); +void nvgpu_raw_spinlock_acquire(struct nvgpu_raw_spinlock *spinlock); +void nvgpu_raw_spinlock_release(struct nvgpu_raw_spinlock *spinlock); + +#endif /* NVGPU_LOCK_H */ diff --git a/drivers/gpu/nvgpu/include/nvgpu/lock_linux.h b/drivers/gpu/nvgpu/include/nvgpu/lock_linux.h new file mode 100644 index 00000000..fbf26e9d --- /dev/null +++ b/drivers/gpu/nvgpu/include/nvgpu/lock_linux.h @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef NVGPU_LOCK_LINUX_H +#define NVGPU_LOCK_LINUX_H + +#include +#include + +struct nvgpu_mutex { + struct mutex mutex; +}; +struct nvgpu_spinlock { + spinlock_t spinlock; +}; +struct nvgpu_raw_spinlock { + raw_spinlock_t spinlock; +}; + +static inline int nvgpu_mutex_init(struct nvgpu_mutex *mutex) +{ + mutex_init(&mutex->mutex); + return 0; +}; +static inline void nvgpu_mutex_acquire(struct nvgpu_mutex *mutex) +{ + mutex_lock(&mutex->mutex); +}; +static inline void nvgpu_mutex_release(struct nvgpu_mutex *mutex) +{ + mutex_unlock(&mutex->mutex); +}; +static inline int nvgpu_mutex_tryacquire(struct nvgpu_mutex *mutex) +{ + return mutex_trylock(&mutex->mutex); +}; +static inline void nvgpu_mutex_destroy(struct nvgpu_mutex *mutex) +{ + mutex_destroy(&mutex->mutex); +}; + +static inline void nvgpu_spinlock_init(struct nvgpu_spinlock *spinlock) +{ + spin_lock_init(&spinlock->spinlock); +}; +static inline void nvgpu_spinlock_acquire(struct nvgpu_spinlock *spinlock) +{ + spin_lock(&spinlock->spinlock); +}; +static inline void nvgpu_spinlock_release(struct nvgpu_spinlock *spinlock) +{ + spin_unlock(&spinlock->spinlock); +}; + +static inline void nvgpu_raw_spinlock_init(struct nvgpu_raw_spinlock *spinlock) +{ + raw_spin_lock_init(&spinlock->spinlock); +}; +static inline void nvgpu_raw_spinlock_acquire(struct nvgpu_raw_spinlock *spinlock) +{ + raw_spin_lock(&spinlock->spinlock); +}; +static inline void nvgpu_raw_spinlock_release(struct nvgpu_raw_spinlock *spinlock) +{ + raw_spin_unlock(&spinlock->spinlock); +}; + +#endif /* NVGPU_LOCK_LINUX_H */ -- cgit v1.2.2