mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-22 17:36:20 +03:00
nvgpu_channel_get_max_subctx_count() right now always returns max subctx count for 0th instance. Update this function to return max subctx count for GPU instance for which channel is allocated. For CE channels that are allocated and managed by nvgpu, cdev pointer is not set in channel private data (since it is assigned in OS specific code). For those channels continue returning max subctx count for 0th instance. CE channels should not need subcontexts anyways. Add nvgpu_cdev pointer in struct nvgpu_channel_linux. Assign it in __gk20a_channel_open() and clear it in gk20a_channel_release() Move code to get runlist and gpu_instance_id after nvgpu_get() call. Accesses to gk20a pointer should always come after nvgpu_get(). Also add a debug print to dump runlist_id and gpu_instance_id being used for channel. Jira NVGPU-5648 Change-Id: Idf58ccefdb7dc9fec78100f79c647e5a00b8fb29 Signed-off-by: Deepak Nibade <dnibade@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvgpu/+/2438924 Reviewed-by: automaticguardword <automaticguardword@nvidia.com> Reviewed-by: Lakshmanan M <lm@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com> GVS: Gerrit_Virtual_Submit
112 lines
3.0 KiB
C
112 lines
3.0 KiB
C
/*
|
|
* Copyright (c) 2017-2019, 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.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
#ifndef NVGPU_LINUX_CHANNEL_H
|
|
#define NVGPU_LINUX_CHANNEL_H
|
|
|
|
#include <linux/workqueue.h>
|
|
#include <linux/dma-buf.h>
|
|
|
|
#include <nvgpu/types.h>
|
|
|
|
struct nvgpu_channel;
|
|
struct nvgpu_gpfifo;
|
|
struct nvgpu_submit_gpfifo_args;
|
|
struct nvgpu_channel_fence;
|
|
struct nvgpu_fence_type;
|
|
struct nvgpu_swprofile;
|
|
struct nvgpu_os_linux;
|
|
struct nvgpu_cdev;
|
|
|
|
struct sync_fence;
|
|
struct sync_timeline;
|
|
|
|
struct nvgpu_channel_completion_cb {
|
|
/*
|
|
* Signal channel owner via a callback, if set, in job cleanup with
|
|
* schedule_work. Means that something finished on the channel (perhaps
|
|
* more than one job).
|
|
*/
|
|
void (*fn)(struct nvgpu_channel *, void *);
|
|
void *user_data;
|
|
/* Make access to the two above atomic */
|
|
struct nvgpu_spinlock lock;
|
|
/* Per-channel async work task, cannot reschedule itself */
|
|
struct work_struct work;
|
|
};
|
|
|
|
struct nvgpu_error_notifier {
|
|
struct dma_buf *dmabuf;
|
|
void *vaddr;
|
|
|
|
struct nvgpu_notification *notification;
|
|
|
|
struct nvgpu_mutex mutex;
|
|
};
|
|
|
|
/*
|
|
* channel-global data for sync fences created from the hardware
|
|
* synchronization primitive in each particular channel.
|
|
*/
|
|
struct nvgpu_os_fence_framework {
|
|
#if defined(CONFIG_NVGPU_SYNCFD_ANDROID)
|
|
struct sync_timeline *timeline;
|
|
#elif defined(CONFIG_NVGPU_SYNCFD_STABLE)
|
|
u64 context;
|
|
bool exists;
|
|
#endif
|
|
};
|
|
|
|
struct nvgpu_usermode_bufs_linux {
|
|
/*
|
|
* Common low level info of these is stored in nvgpu_mems in
|
|
* channel_gk20a; these hold lifetimes for the actual dmabuf and its
|
|
* dma mapping.
|
|
*/
|
|
struct nvgpu_usermode_buf_linux {
|
|
struct dma_buf *dmabuf;
|
|
struct dma_buf_attachment *attachment;
|
|
struct sg_table *sgt;
|
|
} gpfifo, userd;
|
|
};
|
|
|
|
struct nvgpu_channel_linux {
|
|
struct nvgpu_channel *ch;
|
|
|
|
struct nvgpu_os_fence_framework fence_framework;
|
|
|
|
struct nvgpu_channel_completion_cb completion_cb;
|
|
struct nvgpu_error_notifier error_notifier;
|
|
|
|
struct dma_buf *cyclestate_buffer_handler;
|
|
|
|
struct nvgpu_usermode_bufs_linux usermode;
|
|
|
|
struct nvgpu_cdev *cdev;
|
|
};
|
|
|
|
u32 nvgpu_submit_gpfifo_user_flags_to_common_flags(u32 user_flags);
|
|
int nvgpu_channel_init_support_linux(struct nvgpu_os_linux *l);
|
|
void nvgpu_channel_remove_support_linux(struct nvgpu_os_linux *l);
|
|
|
|
/* Deprecated. Use fences in new code. */
|
|
struct nvgpu_channel *gk20a_open_new_channel_with_cb(struct gk20a *g,
|
|
void (*update_fn)(struct nvgpu_channel *, void *),
|
|
void *update_fn_data,
|
|
u32 runlist_id,
|
|
bool is_privileged_channel);
|
|
|
|
#endif
|