gpu: nvgpu: Fix CDE bind channel usage
[linux-3.10.git] / drivers / gpu / nvgpu / gk20a / mm_gk20a.h
1 /*
2  * GK20A memory management
3  *
4  * Copyright (c) 2011-2015, NVIDIA CORPORATION.  All rights reserved.
5  *
6  * This program is free software; you can redistribute it and/or modify it
7  * under the terms and conditions of the GNU General Public License,
8  * version 2, as published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13  * more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
17  */
18 #ifndef MM_GK20A_H
19 #define MM_GK20A_H
20
21 #include <linux/scatterlist.h>
22 #include <linux/dma-attrs.h>
23 #include <linux/iommu.h>
24 #include <linux/tegra-soc.h>
25 #include <linux/vmalloc.h>
26 #include <linux/slab.h>
27 #include <asm/dma-iommu.h>
28 #include <asm/cacheflush.h>
29 #include "gk20a_allocator.h"
30
31 #ifdef CONFIG_ARM64
32 #define outer_flush_range(a, b)
33 #define __cpuc_flush_dcache_area __flush_dcache_area
34 #endif
35
36 #define FLUSH_CPU_DCACHE(va, pa, size)  \
37         do {    \
38                 __cpuc_flush_dcache_area((void *)(va), (size_t)(size)); \
39                 outer_flush_range(pa, pa + (size_t)(size));             \
40         } while (0)
41
42 struct mem_desc {
43         void *cpu_va;
44         struct page **pages;
45         struct sg_table *sgt;
46         size_t size;
47         u64 gpu_va;
48 };
49
50 struct mem_desc_sub {
51         u32 offset;
52         u32 size;
53 };
54
55 struct gpfifo_desc {
56         struct mem_desc mem;
57         u32 entry_num;
58
59         u32 get;
60         u32 put;
61
62         bool wrap;
63 };
64
65 struct patch_desc {
66         struct mem_desc mem;
67         u32 data_count;
68 };
69
70 struct zcull_ctx_desc {
71         u64 gpu_va;
72         u32 ctx_attr;
73         u32 ctx_sw_mode;
74 };
75
76 struct gk20a;
77 struct gr_ctx_buffer_desc {
78         void (*destroy)(struct gk20a *, struct gr_ctx_buffer_desc *);
79         struct mem_desc mem;
80         void *priv;
81 };
82
83 #ifdef CONFIG_ARCH_TEGRA_18x_SOC
84 #include "gr_t18x.h"
85 #endif
86
87 struct gr_ctx_desc {
88         struct mem_desc mem;
89
90         int preempt_mode;
91 #ifdef CONFIG_ARCH_TEGRA_18x_SOC
92         struct gr_ctx_desc_t18x t18x;
93 #endif
94 };
95
96 #define NVGPU_GR_PREEMPTION_MODE_WFI            0
97 #define NVGPU_GR_PREEMPTION_MODE_CTA            2
98
99 struct compbit_store_desc {
100         struct mem_desc mem;
101
102         /* The value that is written to the hardware. This depends on
103          * on the number of ltcs and is not an address. */
104         u64 base_hw;
105 };
106
107 struct gk20a_buffer_state {
108         struct list_head list;
109
110         /* The valid compbits and the fence must be changed atomically. */
111         struct mutex lock;
112
113         /* Offset of the surface within the dma-buf whose state is
114          * described by this struct (one dma-buf can contain multiple
115          * surfaces with different states). */
116         size_t offset;
117
118         /* A bitmask of valid sets of compbits (0 = uncompressed). */
119         u32 valid_compbits;
120
121         /* The ZBC color used on this buffer. */
122         u32 zbc_color;
123
124         /* This struct reflects the state of the buffer when this
125          * fence signals. */
126         struct gk20a_fence *fence;
127 };
128
129 enum gmmu_pgsz_gk20a {
130         gmmu_page_size_small  = 0,
131         gmmu_page_size_big    = 1,
132         gmmu_page_size_kernel = 2,
133         gmmu_nr_page_sizes    = 3,
134 };
135
136 struct gk20a_comptags {
137         u32 offset;
138         u32 lines;
139         u32 allocated_lines;
140         bool user_mappable;
141 };
142
143 struct gk20a_mm_entry {
144         /* backing for */
145         void *cpu_va;
146         struct sg_table *sgt;
147         struct page **pages;
148         size_t size;
149         int pgsz;
150         struct gk20a_mm_entry *entries;
151         int num_entries;
152 };
153
154 struct priv_cmd_queue {
155         struct mem_desc mem;
156         u32 size;       /* num of entries in words */
157         u32 put;        /* put for priv cmd queue */
158         u32 get;        /* get for priv cmd queue */
159 };
160
161 struct priv_cmd_entry {
162         u32 *ptr;
163         u64 gva;
164         u32 get;        /* start of entry in queue */
165         u32 size;       /* in words */
166         u32 gp_get;     /* gp_get when submitting last priv cmd */
167         u32 gp_put;     /* gp_put when submitting last priv cmd */
168         u32 gp_wrap;    /* wrap when submitting last priv cmd */
169         struct list_head list;  /* node for lists */
170 };
171
172 struct mapped_buffer_node {
173         struct vm_gk20a *vm;
174         struct rb_node node;
175         struct list_head unmap_list;
176         struct list_head va_buffers_list;
177         struct vm_reserved_va_node *va_node;
178         u64 addr;
179         u64 size;
180         struct dma_buf *dmabuf;
181         struct sg_table *sgt;
182         struct kref ref;
183         u32 user_mapped;
184         bool own_mem_ref;
185         u32 pgsz_idx;
186         u32 ctag_offset;
187         u32 ctag_lines;
188         u32 ctag_allocated_lines;
189
190         /* For comptag mapping, these are the mapping window parameters */
191         bool ctags_mappable;
192         u64 ctag_map_win_addr; /* non-zero if mapped */
193         u64 ctag_map_win_size; /* non-zero if ctags_mappable */
194         u32 ctag_map_win_ctagline; /* ctagline at win start, set if
195                                     * ctags_mappable */
196
197         u32 flags;
198         u32 kind;
199         bool va_allocated;
200 };
201
202 struct vm_reserved_va_node {
203         struct list_head reserved_va_list;
204         struct list_head va_buffers_list;
205         u32 pgsz_idx;
206         u64 vaddr_start;
207         u64 size;
208         bool sparse;
209 };
210
211 struct gk20a_mmu_level {
212         int hi_bit[2];
213         int lo_bit[2];
214         int (*update_entry)(struct vm_gk20a *vm,
215                            struct gk20a_mm_entry *pte,
216                            u32 i, u32 gmmu_pgsz_idx,
217                            struct scatterlist **sgl,
218                            u64 *offset,
219                            u64 *iova,
220                            u32 kind_v, u32 *ctag,
221                            bool cacheable, bool unmapped_pte,
222                            int rw_flag, bool sparse, bool priv);
223         size_t entry_size;
224 };
225
226 /* map/unmap batch state */
227 struct vm_gk20a_mapping_batch
228 {
229         bool gpu_l2_flushed;
230         bool need_tlb_invalidate;
231 };
232
233 struct vm_gk20a {
234         struct mm_gk20a *mm;
235         struct gk20a_as_share *as_share; /* as_share this represents */
236
237         u64 va_start;
238         u64 va_limit;
239
240         int num_user_mapped_buffers;
241
242         bool big_pages;   /* enable large page support */
243         bool enable_ctag;
244         bool mapped;
245
246         u32 big_page_size;
247
248         bool userspace_managed;
249
250         const struct gk20a_mmu_level *mmu_levels;
251
252         struct kref ref;
253
254         struct mutex update_gmmu_lock;
255
256         struct gk20a_mm_entry pdb;
257
258         struct gk20a_allocator vma[gmmu_nr_page_sizes];
259         struct rb_root mapped_buffers;
260
261         struct list_head reserved_va_list;
262
263 #ifdef CONFIG_TEGRA_GR_VIRTUALIZATION
264         u64 handle;
265 #endif
266         u32 gmmu_page_sizes[gmmu_nr_page_sizes];
267
268         /* if non-NULL, kref_put will use this batch when
269            unmapping. Must hold vm->update_gmmu_lock. */
270         struct vm_gk20a_mapping_batch *kref_put_batch;
271 };
272
273 struct gk20a;
274 struct channel_gk20a;
275
276 int gk20a_init_mm_support(struct gk20a *g);
277 int gk20a_init_mm_setup_sw(struct gk20a *g);
278 int gk20a_init_mm_setup_hw(struct gk20a *g);
279
280 int gk20a_mm_fb_flush(struct gk20a *g);
281 void gk20a_mm_l2_flush(struct gk20a *g, bool invalidate);
282 void gk20a_mm_l2_invalidate(struct gk20a *g);
283
284 struct mm_gk20a {
285         struct gk20a *g;
286
287         /* GPU VA default sizes address spaces for channels */
288         struct {
289                 u64 user_size;   /* userspace-visible GPU VA region */
290                 u64 kernel_size; /* kernel-only GPU VA region */
291         } channel;
292
293         struct {
294                 u32 aperture_size;
295                 struct vm_gk20a vm;
296                 struct mem_desc inst_block;
297         } bar1;
298
299         struct {
300                 u32 aperture_size;
301                 struct vm_gk20a vm;
302                 struct mem_desc inst_block;
303         } bar2;
304
305         struct {
306                 u32 aperture_size;
307                 struct vm_gk20a vm;
308                 struct mem_desc inst_block;
309         } pmu;
310
311         struct {
312                 /* using pmu vm currently */
313                 struct mem_desc inst_block;
314         } hwpm;
315
316
317         struct mutex l2_op_lock;
318 #ifdef CONFIG_ARCH_TEGRA_18x_SOC
319         struct mem_desc bar2_desc;
320 #endif
321         void (*remove_support)(struct mm_gk20a *mm);
322         bool sw_ready;
323         int physical_bits;
324         bool use_full_comp_tag_line;
325 #ifdef CONFIG_DEBUG_FS
326         u32 ltc_enabled;
327         u32 ltc_enabled_debug;
328         u32 bypass_smmu;
329         u32 disable_bigpage;
330 #endif
331 };
332
333 int gk20a_mm_init(struct mm_gk20a *mm);
334
335 #define gk20a_from_mm(mm) ((mm)->g)
336 #define gk20a_from_vm(vm) ((vm)->mm->g)
337
338 #define dev_from_vm(vm) dev_from_gk20a(vm->mm->g)
339
340 #define DEFAULT_ALLOC_ALIGNMENT (4*1024)
341
342 static inline int bar1_aperture_size_mb_gk20a(void)
343 {
344         return 16; /* 16MB is more than enough atm. */
345 }
346
347 /*The maximum GPU VA range supported */
348 #define NV_GMMU_VA_RANGE          38
349
350 /* The default userspace-visible GPU VA size */
351 #define NV_MM_DEFAULT_USER_SIZE   (1ULL << 37)
352
353 /* The default kernel-reserved GPU VA size */
354 #define NV_MM_DEFAULT_KERNEL_SIZE (1ULL << 32)
355
356 /*
357  * The bottom 16GB of the space are used for small pages, the remaining high
358  * memory is for large pages.
359  */
360 static inline u64 __nv_gmmu_va_small_page_limit(void)
361 {
362         return ((u64)SZ_1G * 16);
363 }
364
365 static inline int __nv_gmmu_va_is_big_page_region(struct vm_gk20a *vm, u64 addr)
366 {
367         if (!vm->big_pages)
368                 return 0;
369
370         return addr >= vm->vma[gmmu_page_size_big].base &&
371                 addr < vm->vma[gmmu_page_size_big].base +
372                 vm->vma[gmmu_page_size_big].length;
373 }
374
375 /*
376  * This determines the PTE size for a given alloc. Used by both the GVA space
377  * allocator and the mm core code so that agreement can be reached on how to
378  * map allocations.
379  */
380 static inline enum gmmu_pgsz_gk20a __get_pte_size(struct vm_gk20a *vm,
381                                                   u64 base, u64 size)
382 {
383         /*
384          * Currently userspace is not ready for a true unified address space.
385          * As a result, even though the allocator supports mixed address spaces
386          * the address spaces must be treated as separate for now.
387          */
388         if (__nv_gmmu_va_is_big_page_region(vm, base))
389                 return gmmu_page_size_big;
390         else
391                 return gmmu_page_size_small;
392 }
393
394 #if 0 /*related to addr bits above, concern below TBD on which is accurate */
395 #define bar1_instance_block_shift_gk20a() (max_physaddr_bits_gk20a() -\
396                                            bus_bar1_block_ptr_s())
397 #else
398 #define bar1_instance_block_shift_gk20a() bus_bar1_block_ptr_shift_v()
399 #endif
400
401 int gk20a_alloc_inst_block(struct gk20a *g, struct mem_desc *inst_block);
402 void gk20a_free_inst_block(struct gk20a *g, struct mem_desc *inst_block);
403 void gk20a_init_inst_block(struct mem_desc *inst_block, struct vm_gk20a *vm,
404                 u32 big_page_size);
405
406 void gk20a_mm_dump_vm(struct vm_gk20a *vm,
407                 u64 va_begin, u64 va_end, char *label);
408
409 int gk20a_mm_suspend(struct gk20a *g);
410
411 phys_addr_t gk20a_get_phys_from_iova(struct device *d,
412                                 u64 dma_addr);
413
414 int gk20a_get_sgtable(struct device *d, struct sg_table **sgt,
415                         void *cpuva, u64 iova,
416                         size_t size);
417
418 int gk20a_get_sgtable_from_pages(struct device *d, struct sg_table **sgt,
419                         struct page **pages, u64 iova,
420                         size_t size);
421
422 void gk20a_free_sgtable(struct sg_table **sgt);
423
424 u64 gk20a_mm_iova_addr(struct gk20a *g, struct scatterlist *sgl,
425                 u32 flags);
426 u64 gk20a_mm_smmu_vaddr_translate(struct gk20a *g, dma_addr_t iova);
427
428 void gk20a_mm_ltc_isr(struct gk20a *g);
429
430 bool gk20a_mm_mmu_debug_mode_enabled(struct gk20a *g);
431
432 int gk20a_mm_mmu_vpr_info_fetch(struct gk20a *g);
433
434 u64 gk20a_gmmu_map(struct vm_gk20a *vm,
435                 struct sg_table **sgt,
436                 u64 size,
437                 u32 flags,
438                 int rw_flag,
439                 bool priv);
440
441 int gk20a_gmmu_alloc_map(struct vm_gk20a *vm,
442                 size_t size,
443                 struct mem_desc *mem);
444
445 int gk20a_gmmu_alloc_map_attr(struct vm_gk20a *vm,
446                 enum dma_attr attr,
447                 size_t size,
448                 struct mem_desc *mem);
449
450 void gk20a_gmmu_unmap_free(struct vm_gk20a *vm,
451                 struct mem_desc *mem);
452
453 int gk20a_gmmu_alloc(struct gk20a *g,
454                 size_t size,
455                 struct mem_desc *mem);
456
457 int gk20a_gmmu_alloc_attr(struct gk20a *g,
458                 enum dma_attr attr,
459                 size_t size,
460                 struct mem_desc *mem);
461
462 void gk20a_gmmu_free(struct gk20a *g,
463                 struct mem_desc *mem);
464
465 void gk20a_gmmu_free_attr(struct gk20a *g,
466                 enum dma_attr attr,
467                 struct mem_desc *mem);
468
469 static inline phys_addr_t gk20a_mem_phys(struct mem_desc *mem)
470 {
471         /* FIXME: the sgt/sgl may get null if this is accessed e.g. in an isr
472          * during channel deletion - attempt to fix at least null derefs */
473         struct sg_table *sgt = mem->sgt;
474
475         if (sgt) {
476                 struct scatterlist *sgl = sgt->sgl;
477                 if (sgl)
478                         return sg_phys(sgl);
479         }
480
481         return 0;
482 }
483
484 u64 gk20a_locked_gmmu_map(struct vm_gk20a *vm,
485                         u64 map_offset,
486                         struct sg_table *sgt,
487                         u64 buffer_offset,
488                         u64 size,
489                         int pgsz_idx,
490                         u8 kind_v,
491                         u32 ctag_offset,
492                         u32 flags,
493                         int rw_flag,
494                         bool clear_ctags,
495                         bool sparse,
496                         bool priv,
497                         struct vm_gk20a_mapping_batch *batch);
498
499 void gk20a_gmmu_unmap(struct vm_gk20a *vm,
500                 u64 vaddr,
501                 u64 size,
502                 int rw_flag);
503
504 void gk20a_locked_gmmu_unmap(struct vm_gk20a *vm,
505                         u64 vaddr,
506                         u64 size,
507                         int pgsz_idx,
508                         bool va_allocated,
509                         int rw_flag,
510                         bool sparse,
511                         struct vm_gk20a_mapping_batch *batch);
512
513 struct sg_table *gk20a_mm_pin(struct device *dev, struct dma_buf *dmabuf);
514 void gk20a_mm_unpin(struct device *dev, struct dma_buf *dmabuf,
515                     struct sg_table *sgt);
516
517 u64 gk20a_vm_map(struct vm_gk20a *vm,
518                 struct dma_buf *dmabuf,
519                 u64 offset_align,
520                 u32 flags /*NVGPU_AS_MAP_BUFFER_FLAGS_*/,
521                 int kind,
522                 struct sg_table **sgt,
523                 bool user_mapped,
524                 int rw_flag,
525                  u64 buffer_offset,
526                  u64 mapping_size,
527                  struct vm_gk20a_mapping_batch *mapping_batch);
528
529 int gk20a_vm_get_compbits_info(struct vm_gk20a *vm,
530                                u64 mapping_gva,
531                                u64 *compbits_win_size,
532                                u32 *compbits_win_ctagline,
533                                u32 *mapping_ctagline,
534                                u32 *flags);
535
536 int gk20a_vm_map_compbits(struct vm_gk20a *vm,
537                           u64 mapping_gva,
538                           u64 *compbits_win_gva,
539                           u64 *mapping_iova,
540                           u32 flags);
541
542 /* unmap handle from kernel */
543 void gk20a_vm_unmap(struct vm_gk20a *vm, u64 offset);
544
545 void gk20a_vm_unmap_locked(struct mapped_buffer_node *mapped_buffer,
546                            struct vm_gk20a_mapping_batch *batch);
547
548 /* get reference to all currently mapped buffers */
549 int gk20a_vm_get_buffers(struct vm_gk20a *vm,
550                          struct mapped_buffer_node ***mapped_buffers,
551                          int *num_buffers);
552
553 /* put references on the given buffers */
554 void gk20a_vm_put_buffers(struct vm_gk20a *vm,
555                           struct mapped_buffer_node **mapped_buffers,
556                           int num_buffers);
557
558 /* invalidate tlbs for the vm area */
559 void gk20a_mm_tlb_invalidate(struct vm_gk20a *vm);
560
561 /* find buffer corresponding to va */
562 int gk20a_vm_find_buffer(struct vm_gk20a *vm, u64 gpu_va,
563                          struct dma_buf **dmabuf,
564                          u64 *offset);
565
566 void gk20a_vm_get(struct vm_gk20a *vm);
567 void gk20a_vm_put(struct vm_gk20a *vm);
568
569 void gk20a_vm_remove_support(struct vm_gk20a *vm);
570
571 u64 gk20a_vm_alloc_va(struct vm_gk20a *vm,
572                      u64 size,
573                      enum gmmu_pgsz_gk20a gmmu_pgsz_idx);
574
575 int gk20a_vm_free_va(struct vm_gk20a *vm,
576                      u64 offset, u64 size,
577                      enum gmmu_pgsz_gk20a pgsz_idx);
578
579 /* vm-as interface */
580 struct nvgpu_as_alloc_space_args;
581 struct nvgpu_as_free_space_args;
582 int gk20a_vm_alloc_share(struct gk20a_as_share *as_share, u32 big_page_size,
583                          u32 flags);
584 int gk20a_vm_release_share(struct gk20a_as_share *as_share);
585 int gk20a_vm_alloc_space(struct gk20a_as_share *as_share,
586                          struct nvgpu_as_alloc_space_args *args);
587 int gk20a_vm_free_space(struct gk20a_as_share *as_share,
588                         struct nvgpu_as_free_space_args *args);
589 int gk20a_vm_bind_channel(struct gk20a_as_share *as_share,
590                           struct channel_gk20a *ch);
591 int __gk20a_vm_bind_channel(struct vm_gk20a *vm, struct channel_gk20a *ch);
592
593 /* batching eliminates redundant cache flushes and invalidates */
594 void gk20a_vm_mapping_batch_start(struct vm_gk20a_mapping_batch *batch);
595 void gk20a_vm_mapping_batch_finish(
596         struct vm_gk20a *vm, struct vm_gk20a_mapping_batch *batch);
597 /* called when holding vm->update_gmmu_lock */
598 void gk20a_vm_mapping_batch_finish_locked(
599         struct vm_gk20a *vm, struct vm_gk20a_mapping_batch *batch);
600
601
602 /* Note: batch may be NULL if map op is not part of a batch */
603 int gk20a_vm_map_buffer(struct vm_gk20a *vm,
604                         int dmabuf_fd,
605                         u64 *offset_align,
606                         u32 flags, /* NVGPU_AS_MAP_BUFFER_FLAGS_ */
607                         int kind,
608                         u64 buffer_offset,
609                         u64 mapping_size,
610                         struct vm_gk20a_mapping_batch *batch);
611
612 int gk20a_init_vm(struct mm_gk20a *mm,
613                 struct vm_gk20a *vm,
614                 u32 big_page_size,
615                 u64 low_hole,
616                 u64 kernel_reserved,
617                 u64 aperture_size,
618                 bool big_pages,
619                 bool userspace_managed,
620                 char *name);
621 void gk20a_deinit_vm(struct vm_gk20a *vm);
622
623 /* Note: batch may be NULL if unmap op is not part of a batch */
624 int gk20a_vm_unmap_buffer(struct vm_gk20a *vm, u64 offset,
625                           struct vm_gk20a_mapping_batch *batch);
626 void gk20a_get_comptags(struct device *dev, struct dma_buf *dmabuf,
627                         struct gk20a_comptags *comptags);
628 dma_addr_t gk20a_mm_gpuva_to_iova_base(struct vm_gk20a *vm, u64 gpu_vaddr);
629
630 int gk20a_dmabuf_alloc_drvdata(struct dma_buf *dmabuf, struct device *dev);
631
632 int gk20a_dmabuf_get_state(struct dma_buf *dmabuf, struct device *dev,
633                            u64 offset, struct gk20a_buffer_state **state);
634
635 int map_gmmu_pages(struct gk20a_mm_entry *entry);
636 void unmap_gmmu_pages(struct gk20a_mm_entry *entry);
637 void pde_range_from_vaddr_range(struct vm_gk20a *vm,
638                                               u64 addr_lo, u64 addr_hi,
639                                               u32 *pde_lo, u32 *pde_hi);
640 int gk20a_mm_pde_coverage_bit_count(struct vm_gk20a *vm);
641 u32 *pde_from_index(struct vm_gk20a *vm, u32 i);
642 u32 pte_index_from_vaddr(struct vm_gk20a *vm,
643                                u64 addr, enum gmmu_pgsz_gk20a pgsz_idx);
644 void free_gmmu_pages(struct vm_gk20a *vm,
645                      struct gk20a_mm_entry *entry);
646
647 u32 gk20a_mm_get_physical_addr_bits(struct gk20a *g);
648
649 struct gpu_ops;
650 void gk20a_init_mm(struct gpu_ops *gops);
651 const struct gk20a_mmu_level *gk20a_mm_get_mmu_levels(struct gk20a *g,
652                                                       u32 big_page_size);
653 void gk20a_mm_init_pdb(struct gk20a *g, void *inst_ptr, u64 pdb_addr);
654
655 extern const struct gk20a_mmu_level gk20a_mm_levels_64k[];
656 extern const struct gk20a_mmu_level gk20a_mm_levels_128k[];
657
658 static inline void *nvgpu_alloc(size_t size, bool clear)
659 {
660         void *p;
661
662         if (size > PAGE_SIZE) {
663                 if (clear)
664                         p = vzalloc(size);
665                 else
666                         p = vmalloc(size);
667         } else {
668                 if (clear)
669                         p = kzalloc(size, GFP_KERNEL);
670                 else
671                         p = kmalloc(size, GFP_KERNEL);
672         }
673
674         return p;
675 }
676
677 static inline void nvgpu_free(void *p)
678 {
679         if (virt_addr_valid(p))
680                 kfree(p);
681         else
682                 vfree(p);
683 }
684
685 #endif /* MM_GK20A_H */