mirror of
git://nv-tegra.nvidia.com/linux-nv-oot.git
synced 2025-12-25 10:42:21 +03:00
Copy the driver and header sources of the nvmap to kernel/nvidia-oot from kernel/nvidia as part of removing the dependency of kernel/nvidia for OOT drivers. The latest (few) git history of the files copied are b7a355916 video: tegra: nvmap: Fix type casting issue 2128c5433 video: tegra: nvmap: Fix type casting issues 0cd082559 video: tegra: nvmap: Change peer vm id data type 4bd7ece67 tegra: nvmap: mark ivm carveout pages occupied e86f3630a video: tegra: nvmap: Fix type casting issue c43a23e58 video: tegra: nvmap: Fix type casting issue ca1dda22e video: tegra: nvmap: Fix type casting issue 1f567abfe video: tegra: nvmap: Fix wrap up condition 29db4d31c video: tegra: nvmap: Remove unnecessary debugfs fe72f1413 video: tegra: nvmap: Remove get_drv_data() call 3b0fc79e7 video: tegra: nvmap: Fix coverity defect 3cc0ce41b video: tegra: nvmap: Fix coverity defect 6da39e966 video: tegra: nvmap: Fix WARN_ON condition a16351ff1 video: tegra: nvmap: Remove dead code 9993f2d2d video: tegra: nvmap: Update print level 6066a2077 video: tegra: nvmap: Remove nvmap_debug_lru_allocations_show 3cdf2b7ba video: tegra: nvmap: Add kernel version check 716ded4fc video: tegra: nvmap: Initialize the return value 9b6c1b4ab video: tegra: nvmap: Correct debugfs code 33e70118b video: tegra: nvmap: Fix Cert-C error handling bug 7b960ed79 video: tegra: nvmap: Fix Cert-C error handling bug 945dc1471 video: tegra: nvmap: Fix Cert-C error handling bug 31e572de2 video: tegra: nvmap: Fix Cert-C error handling bug 1f25cbf68 video: tegra: nvmap: Fix Cert-C error handling bug fa5428107 video: tegra: nvmap: Remove nvmap_handle_get_from_fd df73f2208 video: tegra: nvmap: Protect kmap/kunmap code 9842e7c6a video: tegra: nvmap: Remove t19x dma_buf map/unmap 06dff1a8d video: tegra: nvmap: Remove unnecessary export symbols 6f097f86b video: tegra: nvmap: Fix Cert-C error handling bug f14171608 video: tegra: nvmap: load nvmap for T23x compatible platforms 266812814 video: tegra: nvmap: Get rid of NVMAP_CONFIG_KSTABLE_KERNEL 1b38c0887 nvmap: Don't use NV_BUILD_KERNEL_OPTIONS 0ab8dc032 video: tegra: nvmap: Reintroduce NVMAP_CONFIG_VPR_RESIZE cc8db9797 driver: platform: tegra: Separate out vpr code 28955d95c video/tegra: nvmap: Enable build as OOT module 876d1fbb8 video: tegra: nvmap: Remove IS_ENABLED check 5ea30867a nvmap: Add support to build as module from OOT kernel a71ad020e video: tegra: nvmap: Protect tegra_vpr args under config e70061cc1 video: tegra: nvmap: Do not export cvnas_dev d2a26ff36 video: tegra: nvmap: Include missing header 692e4f682 video: tegra: nvmap: Update page coloring algo 2b9dbb911 video: tegra: nvmap: Check for return value de8de12b6 video: tegra: nvmap: Enable legacy init support 65d478158 video: tegra: nvmap: Remove dependency of cvnas 38bdd6f05 video: tegra: nvmap: Make nvmap as loadable module 9668e410b video: tegra: nvmap: Enable handle as ID 11c6cbd23 tegra: nvmap: Fix build for Linux v5.18 fbd95c3ab linux: nvmap: change ivm_handle to u32 eb1e2c302 video: tegra: nvmap: Fix NVSCIIPC support 022689b29 tegra: nvmap: return error if handle as ID enabled but id is fd 19e5106ed video: tegra: nvmap: Don't treat ivm as reserved mem carveouts Bug 4038415 Change-Id: I7108aec3b8532fe79c9423c2835744b1213719e8 Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
85 lines
2.2 KiB
C
85 lines
2.2 KiB
C
/*
|
|
* drivers/video/tegra/nvmap/nvmap_mm.c
|
|
*
|
|
* Some MM related functionality specific to nvmap.
|
|
*
|
|
* Copyright (c) 2013-2021, 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.
|
|
*/
|
|
|
|
#include <trace/events/nvmap.h>
|
|
#include <linux/version.h>
|
|
|
|
#include <asm/pgtable.h>
|
|
|
|
#include "nvmap_priv.h"
|
|
|
|
|
|
#ifndef NVMAP_LOADABLE_MODULE
|
|
void nvmap_zap_handle(struct nvmap_handle *handle, u64 offset, u64 size)
|
|
{
|
|
struct list_head *vmas;
|
|
struct nvmap_vma_list *vma_list;
|
|
struct vm_area_struct *vma;
|
|
|
|
if (!handle->heap_pgalloc)
|
|
return;
|
|
|
|
/* if no dirty page is present, no need to zap */
|
|
if (nvmap_handle_track_dirty(handle) && !atomic_read(&handle->pgalloc.ndirty))
|
|
return;
|
|
|
|
if (!size) {
|
|
offset = 0;
|
|
size = handle->size;
|
|
}
|
|
|
|
size = PAGE_ALIGN((offset & ~PAGE_MASK) + size);
|
|
|
|
mutex_lock(&handle->lock);
|
|
vmas = &handle->vmas;
|
|
list_for_each_entry(vma_list, vmas, list) {
|
|
struct nvmap_vma_priv *priv;
|
|
size_t vm_size = size;
|
|
|
|
vma = vma_list->vma;
|
|
priv = vma->vm_private_data;
|
|
if ((offset + size) > (vma->vm_end - vma->vm_start))
|
|
vm_size = vma->vm_end - vma->vm_start - offset;
|
|
|
|
if (priv->offs || vma->vm_pgoff)
|
|
/* vma mapping starts in the middle of handle memory.
|
|
* zapping needs special care. zap entire range for now.
|
|
* FIXME: optimze zapping.
|
|
*/
|
|
zap_page_range(vma, vma->vm_start,
|
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0)
|
|
vma->vm_end - vma->vm_start);
|
|
#else
|
|
vma->vm_end - vma->vm_start, NULL);
|
|
#endif
|
|
else
|
|
zap_page_range(vma, vma->vm_start + offset,
|
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0)
|
|
vm_size);
|
|
#else
|
|
vm_size, NULL);
|
|
#endif
|
|
}
|
|
mutex_unlock(&handle->lock);
|
|
}
|
|
#else
|
|
void nvmap_zap_handle(struct nvmap_handle *handle, u64 offset, u64 size)
|
|
{
|
|
pr_debug("%s is not supported!\n", __func__);
|
|
}
|
|
#endif /* !NVMAP_LOADABLE_MODULE */
|