From ef4897aa84954facdcf60a5344ff4bf16c2ba71d Mon Sep 17 00:00:00 2001 From: Arto Merilainen Date: Tue, 6 May 2014 19:58:05 +0300 Subject: security: tlk_driver: Allow affinity changing Currently the driver assumes that smc requests come from a thread that already has possibility to set cpu affinity, however, kernel threads by default do not have this possibility. 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 thread can change affinity. Bug 1506585 Change-Id: Ie879f6b2f7d8cb3bc324b5d7a391dd6e8cf9b3cf Signed-off-by: Arto Merilainen Reviewed-on: http://git-master/r/405915 Reviewed-by: Automatic_Commit_Validation_User GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom --- security/tlk_driver/ote_comms.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'security') diff --git a/security/tlk_driver/ote_comms.c b/security/tlk_driver/ote_comms.c index da260a5c216f..64045ac0154e 100644 --- a/security/tlk_driver/ote_comms.c +++ b/security/tlk_driver/ote_comms.c @@ -218,19 +218,33 @@ static void switch_cpumask_to_cpu0(void) { long ret; cpumask_t local_cpu_mask = CPU_MASK_NONE; + unsigned long flags; + + flags = current->flags; + current->flags &= ~PF_NO_SETAFFINITY; cpu_set(0, local_cpu_mask); cpumask_copy(&saved_cpu_mask, tsk_cpus_allowed(current)); ret = sched_setaffinity(0, &local_cpu_mask); if (ret) pr_err("sched_setaffinity #1 -> 0x%lX", ret); + + current->flags = flags; } static void restore_cpumask(void) { - long ret = sched_setaffinity(0, &saved_cpu_mask); + unsigned long flags; + long ret; + + flags = current->flags; + current->flags &= ~PF_NO_SETAFFINITY; + + ret = sched_setaffinity(0, &saved_cpu_mask); if (ret) pr_err("sched_setaffinity #2 -> 0x%lX", ret); + + current->flags = flags; } #else static inline void switch_cpumask_to_cpu0(void) {}; -- cgit v1.2.3