From 3f0c66e7527a8098ee9b745e544b2f6acf78f557 Mon Sep 17 00:00:00 2001 From: Arto Merilainen Date: Mon, 12 May 2014 11:06:01 +0300 Subject: 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 Reviewed-on: http://git-master/r/408075 Reviewed-by: Riham Haidar Tested-by: Riham Haidar --- security/tlk_driver/ote_comms.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'security') 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, -- cgit v1.2.3