Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  1 /* Function to determine if a thread group is single threaded or not
  2  *
  3  * Copyright (C) 2008 Red Hat, Inc. All Rights Reserved.
  4  * Written by David Howells (dhowells@redhat.com)
  5  * - Derived from security/selinux/hooks.c
  6  *
  7  * This program is free software; you can redistribute it and/or
  8  * modify it under the terms of the GNU General Public Licence
  9  * as published by the Free Software Foundation; either version
 10  * 2 of the Licence, or (at your option) any later version.
 11  */
 12 
 13 #include <linux/sched.h>
 14 
 15 /**
 16  * is_single_threaded - Determine if a thread group is single-threaded or not
 17  * @p: A task in the thread group in question
 18  *
 19  * This returns true if the thread group to which a task belongs is single
 20  * threaded, false if it is not.
 21  */
 22 bool is_single_threaded(struct task_struct *p)
 23 {
 24         struct task_struct *g, *t;
 25         struct mm_struct *mm = p->mm;
 26 
 27         if (atomic_read(&p->signal->count) != 1)
 28                 goto no;
 29 
 30         if (atomic_read(&p->mm->mm_users) != 1) {
 31                 read_lock(&tasklist_lock);
 32                 do_each_thread(g, t) {
 33                         if (t->mm == mm && t != p)
 34                                 goto no_unlock;
 35                 } while_each_thread(g, t);
 36                 read_unlock(&tasklist_lock);
 37         }
 38 
 39         return true;
 40 
 41 no_unlock:
 42         read_unlock(&tasklist_lock);
 43 no:
 44         return false;
 45 }
 46 
  This page was automatically generated by the LXR engine.