mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-23 18:16:01 +03:00
Previously, only "high" priority bare channels were interleaved between all other bare channels and TSGs. This patch decouples priority from interleaving and introduces 3 levels for interleaving a bare channel or TSG: high, medium, and low. The levels define the number of times a channel or TSG will appear on a runlist (see nvgpu.h for details). By default, all bare channels and TSGs are set to interleave level low. Userspace can then request the interleave level to be increased via the CHANNEL_SET_RUNLIST_INTERLEAVE ioctl (TSG-specific ioctl will be added later). As timeslice settings will soon be coming from userspace, the default timeslice for "high" priority channels has been restored. JIRA VFND-1302 Bug 1729664 Change-Id: I178bc1cecda23f5002fec6d791e6dcaedfa05c0c Signed-off-by: Aingara Paramakuru <aparamakuru@nvidia.com> Reviewed-on: http://git-master/r/1014962 Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> Tested-by: Terje Bergstrom <tbergstrom@nvidia.com>
60 lines
1.6 KiB
C
60 lines
1.6 KiB
C
/*
|
|
* Copyright (c) 2014-2016, 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 __TSG_GK20A_H_
|
|
#define __TSG_GK20A_H_
|
|
|
|
#define NVGPU_INVALID_TSG_ID (-1)
|
|
|
|
bool gk20a_is_channel_marked_as_tsg(struct channel_gk20a *ch);
|
|
|
|
|
|
int gk20a_tsg_dev_release(struct inode *inode, struct file *filp);
|
|
int gk20a_tsg_dev_open(struct inode *inode, struct file *filp);
|
|
int gk20a_tsg_open(struct gk20a *g, struct file *filp);
|
|
long gk20a_tsg_dev_ioctl(struct file *filp,
|
|
unsigned int cmd, unsigned long arg);
|
|
|
|
int gk20a_init_tsg_support(struct gk20a *g, u32 tsgid);
|
|
|
|
int gk20a_tsg_unbind_channel(struct channel_gk20a *ch);
|
|
|
|
struct tsg_gk20a {
|
|
struct gk20a *g;
|
|
|
|
bool in_use;
|
|
int tsgid;
|
|
|
|
struct kref refcount;
|
|
|
|
struct list_head ch_list;
|
|
int num_active_channels;
|
|
struct mutex ch_list_lock;
|
|
|
|
int timeslice_timeout;
|
|
int timeslice_scale;
|
|
|
|
struct gr_ctx_desc *tsg_gr_ctx;
|
|
|
|
struct vm_gk20a *vm;
|
|
|
|
u32 interleave_level;
|
|
};
|
|
|
|
int gk20a_enable_tsg(struct tsg_gk20a *tsg);
|
|
int gk20a_disable_tsg(struct tsg_gk20a *tsg);
|
|
|
|
#endif /* __TSG_GK20A_H_ */
|