diff options
author | Arto Merilainen <amerilainen@nvidia.com> | 2014-05-12 11:06:01 +0300 |
---|---|---|
committer | Riham Haidar <rhaidar@nvidia.com> | 2014-05-14 14:06:03 -0700 |
commit | 3f0c66e7527a8098ee9b745e544b2f6acf78f557 (patch) | |
tree | 1e6ce4484d2d7819b0c937df4f6843c2120854d9 /security | |
parent | 1df92ded1131c9c25d49ad2fd01a1583c350757f (diff) |
security: tlk_driver: Run kthreads on CPU0
Currently, the driver assumes that smc requests come either
from workqueue or from a thread that has possibility to set
cpu affinity. However, kernel threads by default do not have
this possibility and in principle the flag can be set in middle
of operation.
Turning on devices is sometimes done in kernel threads and in GPU
case we may need to change i.e. the VPR parameters. Therefore,
ensure that the communication is done on CPU0.
Bug 1506585
Change-Id: I0cbd8b841a07c8400310167fa8800eaae9de21f2
Signed-off-by: Arto Merilainen <amerilainen@nvidia.com>
Reviewed-on: http://git-master/r/408075
Reviewed-by: Riham Haidar <rhaidar@nvidia.com>
Tested-by: Riham Haidar <rhaidar@nvidia.com>
Diffstat (limited to 'security')
-rw-r--r-- | security/tlk_driver/ote_comms.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/security/tlk_driver/ote_comms.c b/security/tlk_driver/ote_comms.c index cf5f87e31807..a1af05021dbd 100644 --- a/security/tlk_driver/ote_comms.c +++ b/security/tlk_driver/ote_comms.c @@ -374,7 +374,8 @@ int te_set_vpr_params(void *vpr_base, size_t vpr_size) /* Share the same lock used when request is send from user side */ mutex_lock(&smc_lock); - if (current->flags & PF_WQ_WORKER) { + if (current->flags & + (PF_WQ_WORKER | PF_NO_SETAFFINITY | PF_KTHREAD)) { struct tlk_smc_work_args work_args; int cpu = cpu_logical_map(smp_processor_id()); @@ -382,8 +383,9 @@ int te_set_vpr_params(void *vpr_base, size_t vpr_size) work_args.arg1 = (uint32_t)vpr_base; work_args.arg2 = vpr_size; - /* depending on the CPU, execute directly or sched work */ - if (cpu == 0) + /* workers don't change CPU. depending on the CPU, execute + * directly or sched work */ + if (cpu == 0 && (current->flags & PF_WQ_WORKER)) retval = tlk_generic_smc_on_cpu0(&work_args); else retval = work_on_cpu(0, |