Revision 250168ad3c58a0482dc57320c9ed1bd26858bd7f authored by Arcadiy Ivanov on 23 April 2017, 04:30:12 UTC, committed by Arcadiy Ivanov on 23 April 2017, 05:24:28 UTC
https://bugzilla.kernel.org/show_bug.cgi?id=191731 https://bugzilla.redhat.com/show_bug.cgi?id=1436686 Also fixes dell_laptop: Setting old previous keyboard state failed https://bugzilla.kernel.org/show_bug.cgi?id=194081 The issue is actually quite trivial. Byte 3 of kbd_state on some machines contains "timeout_ac". If this byte is simply set to 0 the result is failed state set. The "timeout_ac" is not interpreted in any way, but it is now preserved in order to ensure the LED state changes go through.
1 parent 94836ec
is_single_threaded.c
/* Function to determine if a thread group is single threaded or not
*
* Copyright (C) 2008 Red Hat, Inc. All Rights Reserved.
* Written by David Howells (dhowells@redhat.com)
* - Derived from security/selinux/hooks.c
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public Licence
* as published by the Free Software Foundation; either version
* 2 of the Licence, or (at your option) any later version.
*/
#include <linux/sched/signal.h>
#include <linux/sched/task.h>
#include <linux/sched/mm.h>
/*
* Returns true if the task does not share ->mm with another thread/process.
*/
bool current_is_single_threaded(void)
{
struct task_struct *task = current;
struct mm_struct *mm = task->mm;
struct task_struct *p, *t;
bool ret;
if (atomic_read(&task->signal->live) != 1)
return false;
if (atomic_read(&mm->mm_users) == 1)
return true;
ret = false;
rcu_read_lock();
for_each_process(p) {
if (unlikely(p->flags & PF_KTHREAD))
continue;
if (unlikely(p == task->group_leader))
continue;
for_each_thread(p, t) {
if (unlikely(t->mm == mm))
goto found;
if (likely(t->mm))
break;
/*
* t->mm == NULL. Make sure next_thread/next_task
* will see other CLONE_VM tasks which might be
* forked before exiting.
*/
smp_rmb();
}
}
ret = true;
found:
rcu_read_unlock();
return ret;
}
Computing file changes ...