gpu: host1x: Optimize BOs usage when firewall is enabled
We don't need to hold and pin original BOs of the gathers in a case of enabled firewall because in this case gather's content is copied and the copy is used by the executed job. Signed-off-by: Dmitry Osipenko <digetx@gmail.com> Signed-off-by: Thierry Reding <treding@nvidia.com>
This commit is contained in:
Родитель
b3f1b76071
Коммит
26c8de5e5d
|
@ -27,10 +27,13 @@ struct host1x_job *host1x_job_alloc(struct host1x_channel *ch,
|
|||
u32 num_cmdbufs, u32 num_relocs)
|
||||
{
|
||||
struct host1x_job *job = NULL;
|
||||
unsigned int num_unpins = num_cmdbufs + num_relocs;
|
||||
unsigned int num_unpins = num_relocs;
|
||||
u64 total;
|
||||
void *mem;
|
||||
|
||||
if (!IS_ENABLED(CONFIG_TEGRA_HOST1X_FIREWALL))
|
||||
num_unpins += num_cmdbufs;
|
||||
|
||||
/* Check that we're not going to overflow */
|
||||
total = sizeof(struct host1x_job) +
|
||||
(u64)num_relocs * sizeof(struct host1x_reloc) +
|
||||
|
@ -183,6 +186,13 @@ static unsigned int pin_job(struct host1x *host, struct host1x_job *job)
|
|||
job->num_unpins++;
|
||||
}
|
||||
|
||||
/*
|
||||
* We will copy gathers BO content later, so there is no need to
|
||||
* hold and pin them.
|
||||
*/
|
||||
if (IS_ENABLED(CONFIG_TEGRA_HOST1X_FIREWALL))
|
||||
return 0;
|
||||
|
||||
for (i = 0; i < job->num_gathers; i++) {
|
||||
struct host1x_job_gather *g = &job->gathers[i];
|
||||
size_t gather_size = 0;
|
||||
|
@ -216,7 +226,7 @@ static unsigned int pin_job(struct host1x *host, struct host1x_job *job)
|
|||
goto unpin;
|
||||
}
|
||||
|
||||
if (!IS_ENABLED(CONFIG_TEGRA_HOST1X_FIREWALL) && host->domain) {
|
||||
if (host->domain) {
|
||||
for_each_sg(sgt->sgl, sg, sgt->nents, j)
|
||||
gather_size += sg->length;
|
||||
gather_size = iova_align(&host->iova, gather_size);
|
||||
|
|
Загрузка…
Ссылка в новой задаче