summaryrefslogtreecommitdiff
path: root/security
diff options
context:
space:
mode:
authorArto Merilainen <amerilainen@nvidia.com>2014-05-12 11:06:01 +0300
committerRiham Haidar <rhaidar@nvidia.com>2014-05-14 14:06:03 -0700
commit3f0c66e7527a8098ee9b745e544b2f6acf78f557 (patch)
tree1e6ce4484d2d7819b0c937df4f6843c2120854d9 /security
parent1df92ded1131c9c25d49ad2fd01a1583c350757f (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.c8
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,