Files
linux-hwpm/drivers/tegra/hwpm/os/linux/mem_mgmt_utils.h
Vedashree Vidwans dd4f96e5c9 tegra: hwpm: fix kernel crash on TOT
Currently on TOT, stream buffer map functions results in kernel crash.
The kernel crash is an effect of incorrect conditions in the mapping
function. Fix the code logic to use correct kernel version conditions to
use appropriate DMA buffer structures.

Bug 3893741

Change-Id: I3888ec01fdb2025f6d9c3a22296ca9d1abbcadb0
Signed-off-by: Vedashree Vidwans <vvidwans@nvidia.com>
(cherry picked from commit 5a3476cfb6574eb5ace29801a4f428ce9d694ce9)
Reviewed-on: https://git-master.nvidia.com/r/c/linux-hwpm/+/2853211
Reviewed-by: Seema Khowala <seemaj@nvidia.com>
GVS: Gerrit_Virtual_Submit <buildbot_gerritrpt@nvidia.com>
2023-02-08 03:16:11 -08:00

76 lines
2.3 KiB
C

/*
* Copyright (c) 2022-2023, NVIDIA CORPORATION & AFFILIATES. 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.
*/
#ifndef TEGRA_HWPM_OS_LINUX_MEM_MGMT_UTILS_H
#define TEGRA_HWPM_OS_LINUX_MEM_MGMT_UTILS_H
#include <linux/types.h>
#include <linux/version.h>
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0)
#include <linux/iosys-map.h>
#else
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 0)
#include <linux/dma-buf-map.h>
#endif
#endif
/* This macro is copy of TEGRA_SOC_HWPM_MEM_BYTES_INVALID */
#define TEGRA_HWPM_MEM_BYTES_INVALID 0xffffffff
struct tegra_soc_hwpm;
struct tegra_soc_hwpm_alloc_pma_stream;
struct tegra_soc_hwpm_update_get_put;
struct sg_table;
struct dma_buf;
struct dma_buf_attachment;
struct tegra_soc_hwpm_update_get_put;
struct tegra_hwpm_mem_mgmt {
struct sg_table *stream_sgt;
struct sg_table *mem_bytes_sgt;
struct dma_buf *stream_dma_buf;
struct dma_buf_attachment *stream_attach;
u64 stream_buf_size;
u64 stream_buf_va;
u64 mem_bytes_buf_va;
struct dma_buf *mem_bytes_dma_buf;
struct dma_buf_attachment *mem_bytes_attach;
void *mem_bytes_kernel;
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0)
struct iosys_map mem_bytes_map;
#else
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 0)
struct dma_buf_map mem_bytes_map;
#endif
#endif
};
struct tegra_hwpm_allowlist_map {
u64 full_alist_size;
u64 num_pages;
struct page **pages;
void *full_alist_map;
};
int tegra_hwpm_map_stream_buffer(struct tegra_soc_hwpm *hwpm,
struct tegra_soc_hwpm_alloc_pma_stream *alloc_pma_stream);
int tegra_hwpm_clear_mem_pipeline(struct tegra_soc_hwpm *hwpm);
int tegra_hwpm_update_mem_bytes(struct tegra_soc_hwpm *hwpm,
struct tegra_soc_hwpm_update_get_put *update_get_put);
int tegra_hwpm_map_update_allowlist(struct tegra_soc_hwpm *hwpm,
void *ioctl_struct);
void tegra_hwpm_release_alist_map(struct tegra_soc_hwpm *hwpm);
void tegra_hwpm_release_mem_mgmt(struct tegra_soc_hwpm *hwpm);
#endif /* TEGRA_HWPM_OS_LINUX_MEM_MGMT_UTILS_H */