summaryrefslogtreecommitdiff
path: root/security
diff options
context:
space:
mode:
authorArto Merilainen <amerilainen@nvidia.com>2014-05-06 19:58:05 +0300
committerMandar Padmawar <mpadmawar@nvidia.com>2014-05-12 00:09:15 -0700
commitef4897aa84954facdcf60a5344ff4bf16c2ba71d (patch)
tree6ba409f2b1448df14e4e8323702968d146b38597 /security
parent61934c65cea4d118570c740cb7a839287795b491 (diff)
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 <amerilainen@nvidia.com> Reviewed-on: http://git-master/r/405915 Reviewed-by: Automatic_Commit_Validation_User GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'security')
-rw-r--r--security/tlk_driver/ote_comms.c16
1 files changed, 15 insertions, 1 deletions
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) {};