summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPreetham Chandru Ramchandra <pchandru@nvidia.com>2019-01-17 12:07:39 -0500
committermobile promotions <svcmobile_promotions@nvidia.com>2019-01-22 22:14:57 -0500
commit61bb9dc40395257fa1dc15d267496e3deb32a3e5 (patch)
tree1e7d152b857260a3b4ddc54d82d50776a64cd92d
parentdbb014e34f89298391d65ca2177baac43b60455e (diff)
gpu: nvgpu: nvgpu locks to vanilla Linux locks
Replace nvgpu locks to vanilla Linux locks. For the custom kernel driver when they include nv-p2p.h, nvgpu/linux/lock.h will not be available because nvgpu/linux/lock.h is not copied to /usr/src/kernel_header_file. Bug 200438879 Change-Id: I55b52c6f791970650388b7d51c4d30b5fe75bbb8 Signed-off-by: Preetham Chandru Ramchandra <pchandru@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1997950 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Alex Waterman <alexw@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Bibek Basu <bbasu@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com> (cherry picked from commit eb887094e4f4446e6eed9c17e88f4a36ac5ae972) Reviewed-on: https://git-master.nvidia.com/r/2000831
-rw-r--r--drivers/gpu/nvgpu/os/linux/nvidia_p2p.c22
-rw-r--r--include/linux/nv-p2p.h5
2 files changed, 13 insertions, 14 deletions
diff --git a/drivers/gpu/nvgpu/os/linux/nvidia_p2p.c b/drivers/gpu/nvgpu/os/linux/nvidia_p2p.c
index 7289f311..11d27b47 100644
--- a/drivers/gpu/nvgpu/os/linux/nvidia_p2p.c
+++ b/drivers/gpu/nvgpu/os/linux/nvidia_p2p.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved. 2 * Copyright (c) 2018-2019, NVIDIA CORPORATION. All rights reserved.
3 * 3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a 4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"), 5 * copy of this software and associated documentation files (the "Software"),
@@ -101,7 +101,7 @@ int nvidia_p2p_get_pages(u64 vaddr, u64 size,
101 (*page_table)->free_callback = free_callback; 101 (*page_table)->free_callback = free_callback;
102 (*page_table)->data = data; 102 (*page_table)->data = data;
103 (*page_table)->vaddr = vaddr; 103 (*page_table)->vaddr = vaddr;
104 nvgpu_mutex_init(&(*page_table)->lock); 104 mutex_init(&(*page_table)->lock);
105 (*page_table)->mapped = NVIDIA_P2P_PINNED; 105 (*page_table)->mapped = NVIDIA_P2P_PINNED;
106 106
107 ret = mmu_notifier_register(&(*page_table)->mn, (*page_table)->mm); 107 ret = mmu_notifier_register(&(*page_table)->mn, (*page_table)->mm);
@@ -143,7 +143,7 @@ int nvidia_p2p_free_page_table(struct nvidia_p2p_page_table *page_table)
143 return 0; 143 return 0;
144 } 144 }
145 145
146 nvgpu_mutex_acquire(&page_table->lock); 146 mutex_lock(&page_table->lock);
147 147
148 if (page_table->mapped & NVIDIA_P2P_MAPPED) { 148 if (page_table->mapped & NVIDIA_P2P_MAPPED) {
149 WARN(1, "Attempting to free unmapped pages"); 149 WARN(1, "Attempting to free unmapped pages");
@@ -161,7 +161,7 @@ int nvidia_p2p_free_page_table(struct nvidia_p2p_page_table *page_table)
161 page_table->mapped &= (u32)~NVIDIA_P2P_PINNED; 161 page_table->mapped &= (u32)~NVIDIA_P2P_PINNED;
162 } 162 }
163 163
164 nvgpu_mutex_release(&page_table->lock); 164 mutex_unlock(&page_table->lock);
165 165
166 return 0; 166 return 0;
167} 167}
@@ -183,18 +183,18 @@ int nvidia_p2p_map_pages(struct device *dev,
183 return -EINVAL; 183 return -EINVAL;
184 } 184 }
185 185
186 nvgpu_mutex_acquire(&page_table->lock); 186 mutex_lock(&page_table->lock);
187 187
188 pages = page_table->pages; 188 pages = page_table->pages;
189 nr_pages = page_table->entries; 189 nr_pages = page_table->entries;
190 if (nr_pages <= 0) { 190 if (nr_pages <= 0) {
191 nvgpu_mutex_release(&page_table->lock); 191 mutex_unlock(&page_table->lock);
192 return -EINVAL; 192 return -EINVAL;
193 } 193 }
194 194
195 *dma_mapping = kzalloc(sizeof(**dma_mapping), GFP_KERNEL); 195 *dma_mapping = kzalloc(sizeof(**dma_mapping), GFP_KERNEL);
196 if (!*dma_mapping) { 196 if (!*dma_mapping) {
197 nvgpu_mutex_release(&page_table->lock); 197 mutex_unlock(&page_table->lock);
198 return -ENOMEM; 198 return -ENOMEM;
199 } 199 }
200 sgt = kzalloc(sizeof(*sgt), GFP_KERNEL); 200 sgt = kzalloc(sizeof(*sgt), GFP_KERNEL);
@@ -235,7 +235,7 @@ int nvidia_p2p_map_pages(struct device *dev,
235 (*dma_mapping)->hw_len[i] = sg_dma_len(sg); 235 (*dma_mapping)->hw_len[i] = sg_dma_len(sg);
236 } 236 }
237 (*dma_mapping)->page_table->mapped |= NVIDIA_P2P_MAPPED; 237 (*dma_mapping)->page_table->mapped |= NVIDIA_P2P_MAPPED;
238 nvgpu_mutex_release(&page_table->lock); 238 mutex_unlock(&page_table->lock);
239 239
240 return 0; 240 return 0;
241free_hw_address: 241free_hw_address:
@@ -250,7 +250,7 @@ free_sgt:
250free_dma_mapping: 250free_dma_mapping:
251 kfree(*dma_mapping); 251 kfree(*dma_mapping);
252 *dma_mapping = NULL; 252 *dma_mapping = NULL;
253 nvgpu_mutex_release(&page_table->lock); 253 mutex_unlock(&page_table->lock);
254 254
255 return ret; 255 return ret;
256} 256}
@@ -269,7 +269,7 @@ int nvidia_p2p_unmap_pages(struct nvidia_p2p_dma_mapping *dma_mapping)
269 return -EFAULT; 269 return -EFAULT;
270 } 270 }
271 271
272 nvgpu_mutex_acquire(&page_table->lock); 272 mutex_lock(&page_table->lock);
273 if (page_table->mapped & NVIDIA_P2P_MAPPED) { 273 if (page_table->mapped & NVIDIA_P2P_MAPPED) {
274 kfree(dma_mapping->hw_len); 274 kfree(dma_mapping->hw_len);
275 kfree(dma_mapping->hw_address); 275 kfree(dma_mapping->hw_address);
@@ -283,7 +283,7 @@ int nvidia_p2p_unmap_pages(struct nvidia_p2p_dma_mapping *dma_mapping)
283 kfree(dma_mapping); 283 kfree(dma_mapping);
284 page_table->mapped &= (u32)~NVIDIA_P2P_MAPPED; 284 page_table->mapped &= (u32)~NVIDIA_P2P_MAPPED;
285 } 285 }
286 nvgpu_mutex_release(&page_table->lock); 286 mutex_unlock(&page_table->lock);
287 287
288 return 0; 288 return 0;
289} 289}
diff --git a/include/linux/nv-p2p.h b/include/linux/nv-p2p.h
index c1dee7cf..40e82796 100644
--- a/include/linux/nv-p2p.h
+++ b/include/linux/nv-p2p.h
@@ -1,5 +1,5 @@
1/* 1/*
2 * Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved. 2 * Copyright (c) 2018-2019, NVIDIA CORPORATION. All rights reserved.
3 * 3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a 4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"), 5 * copy of this software and associated documentation files (the "Software"),
@@ -40,7 +40,6 @@
40#include <linux/highmem.h> 40#include <linux/highmem.h>
41#include <linux/mutex.h> 41#include <linux/mutex.h>
42#include <linux/spinlock.h> 42#include <linux/spinlock.h>
43#include <nvgpu/linux/lock.h>
44 43
45#define NVIDIA_P2P_UNINITIALIZED 0x0 44#define NVIDIA_P2P_UNINITIALIZED 0x0
46#define NVIDIA_P2P_PINNED 0x1 45#define NVIDIA_P2P_PINNED 0x1
@@ -64,7 +63,7 @@ struct nvidia_p2p_page_table {
64 63
65 struct mm_struct *mm; 64 struct mm_struct *mm;
66 struct mmu_notifier mn; 65 struct mmu_notifier mn;
67 struct nvgpu_mutex lock; 66 struct mutex lock;
68 void (*free_callback)(void *data); 67 void (*free_callback)(void *data);
69 void *data; 68 void *data;
70}; 69};