mirror of
https://github.com/NVIDIA/open-gpu-kernel-modules.git
synced 2026-05-13 09:16:17 +00:00
535.309.01
This commit is contained in:
@@ -1730,6 +1730,27 @@ static inline void nv_nvlfp_put_sp(nv_linux_file_private_t *nvlfp, nvidia_entry_
|
||||
#define NV_ATOMIC_DEC(data) atomic_dec(&(data))
|
||||
#define NV_ATOMIC_DEC_AND_TEST(data) atomic_dec_and_test(&(data))
|
||||
|
||||
#if defined(smp_store_release)
|
||||
#define nv_smp_store_release(p, v) smp_store_release(p, v);
|
||||
#else
|
||||
#define nv_smp_store_release(p, v) \
|
||||
do { \
|
||||
smp_mb(); \
|
||||
ACCESS_ONCE(*p) = (v); \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
#if defined(smp_load_acquire)
|
||||
#define nv_smp_load_acquire(p) smp_load_acquire(p)
|
||||
#else
|
||||
#define nv_smp_load_acquire(p) \
|
||||
({ \
|
||||
typeof(*p) ___p1 = ACCESS_ONCE(*p); \
|
||||
smp_mb(); \
|
||||
___p1; \
|
||||
})
|
||||
#endif
|
||||
|
||||
static inline struct kmem_cache *nv_kmem_cache_create(const char *name, unsigned int size,
|
||||
unsigned int align)
|
||||
{
|
||||
|
||||
@@ -299,14 +299,43 @@ static inline struct rw_semaphore *nv_mmap_get_lock(struct mm_struct *mm)
|
||||
* Commit 45ad9f5290dc updated vma_start_write() to call __vma_start_write().
|
||||
*/
|
||||
void nv_vma_start_write(struct vm_area_struct *);
|
||||
|
||||
static inline void nv_vma_flags_set_word(struct vm_area_struct *vma, unsigned long flags)
|
||||
{
|
||||
nv_vma_start_write(vma);
|
||||
#if defined(NV_VMA_FLAGS_SET_WORD_PRESENT)
|
||||
vma_flags_set_word(&vma->flags, flags);
|
||||
#else
|
||||
ACCESS_PRIVATE(vma, __vm_flags) |= flags;
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void nv_vma_flags_clear_word(struct vm_area_struct *vma, unsigned long flags)
|
||||
{
|
||||
nv_vma_start_write(vma);
|
||||
#if defined(NV_VMA_FLAGS_SET_WORD_PRESENT)
|
||||
vma_flags_clear_word(&vma->flags, flags);
|
||||
#else
|
||||
ACCESS_PRIVATE(vma, __vm_flags) &= ~flags;
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline int nv_is_vma_write_locked(struct vm_area_struct *vma, unsigned int *mm_lock_seq)
|
||||
{
|
||||
#if defined(NV_IS_VMA_WRITE_LOCKED_HAS_MM_LOCK_SEQ_ARG)
|
||||
return __is_vma_write_locked(vma, mm_lock_seq);
|
||||
#else
|
||||
*mm_lock_seq = __vma_raw_mm_seqnum(vma);
|
||||
return __is_vma_write_locked(vma);
|
||||
#endif
|
||||
}
|
||||
#endif // !NV_CAN_CALL_VMA_START_WRITE
|
||||
|
||||
static inline void nv_vm_flags_set(struct vm_area_struct *vma, vm_flags_t flags)
|
||||
{
|
||||
#if !NV_CAN_CALL_VMA_START_WRITE
|
||||
nv_vma_start_write(vma);
|
||||
ACCESS_PRIVATE(vma, __vm_flags) |= flags;
|
||||
#elif defined(NV_VM_AREA_STRUCT_HAS_CONST_VM_FLAGS)
|
||||
nv_vma_flags_set_word(vma, flags);
|
||||
#elif defined(NV_VM_FLAGS_SET_PRESENT)
|
||||
vm_flags_set(vma, flags);
|
||||
#else
|
||||
vma->vm_flags |= flags;
|
||||
@@ -316,9 +345,8 @@ static inline void nv_vm_flags_set(struct vm_area_struct *vma, vm_flags_t flags)
|
||||
static inline void nv_vm_flags_clear(struct vm_area_struct *vma, vm_flags_t flags)
|
||||
{
|
||||
#if !NV_CAN_CALL_VMA_START_WRITE
|
||||
nv_vma_start_write(vma);
|
||||
ACCESS_PRIVATE(vma, __vm_flags) &= ~flags;
|
||||
#elif defined(NV_VM_AREA_STRUCT_HAS_CONST_VM_FLAGS)
|
||||
nv_vma_flags_clear_word(vma, flags);
|
||||
#elif defined(NV_VM_FLAGS_SET_PRESENT)
|
||||
vm_flags_clear(vma, flags);
|
||||
#else
|
||||
vma->vm_flags &= ~flags;
|
||||
|
||||
@@ -36,6 +36,19 @@
|
||||
#define NV_MAX_ISR_DELAY_MS (NV_MAX_ISR_DELAY_US / 1000)
|
||||
#define NV_NSECS_TO_JIFFIES(nsec) ((nsec) * HZ / 1000000000)
|
||||
|
||||
/*
|
||||
* in_hardirq() was added in v5.11-rc1 (2020-12-15) to replace in_irq().
|
||||
* Fall back to in_irq() for older kernels that don't have in_hardirq().
|
||||
*/
|
||||
static inline NvBool nv_in_hardirq(void)
|
||||
{
|
||||
#if defined(in_hardirq)
|
||||
return in_hardirq();
|
||||
#else
|
||||
return in_irq();
|
||||
#endif
|
||||
}
|
||||
|
||||
#if !defined(NV_TIMESPEC64_PRESENT)
|
||||
struct timespec64 {
|
||||
__s64 tv_sec;
|
||||
@@ -142,7 +155,7 @@ static inline NV_STATUS nv_sleep_us(unsigned int us)
|
||||
ktime_get_raw_ts64(&tm1);
|
||||
#endif
|
||||
|
||||
if (in_irq() && (us > NV_MAX_ISR_DELAY_US))
|
||||
if (nv_in_hardirq() && (us > NV_MAX_ISR_DELAY_US))
|
||||
return NV_ERR_GENERIC;
|
||||
|
||||
mdelay_safe_msec = us / 1000;
|
||||
@@ -187,7 +200,7 @@ static inline NV_STATUS nv_sleep_ms(unsigned int ms)
|
||||
tm_start = tm_aux;
|
||||
#endif
|
||||
|
||||
if (in_irq() && (ms > NV_MAX_ISR_DELAY_MS))
|
||||
if (nv_in_hardirq() && (ms > NV_MAX_ISR_DELAY_MS))
|
||||
{
|
||||
return NV_ERR_GENERIC;
|
||||
}
|
||||
|
||||
@@ -305,7 +305,7 @@ typedef struct nv_alloc_mapping_context_s {
|
||||
NvU64 access_size;
|
||||
NvU64 remap_prot_extra;
|
||||
NvU32 prot;
|
||||
NvBool valid;
|
||||
NvU32 valid;
|
||||
NvU32 caching;
|
||||
} nv_alloc_mapping_context_t;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user