~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/net/batman-adv/hash.c

Version: ~ [ linux-5.9-rc5 ] ~ [ linux-5.8.10 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.66 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.146 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.198 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.236 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.236 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.140 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.85 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* Copyright (C) 2006-2014 B.A.T.M.A.N. contributors:
  2  *
  3  * Simon Wunderlich, Marek Lindner
  4  *
  5  * This program is free software; you can redistribute it and/or
  6  * modify it under the terms of version 2 of the GNU General Public
  7  * License as published by the Free Software Foundation.
  8  *
  9  * This program is distributed in the hope that it will be useful, but
 10  * WITHOUT ANY WARRANTY; without even the implied warranty of
 11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 12  * General Public License for more details.
 13  *
 14  * You should have received a copy of the GNU General Public License
 15  * along with this program; if not, see <http://www.gnu.org/licenses/>.
 16  */
 17 
 18 #include "main.h"
 19 #include "hash.h"
 20 
 21 /* clears the hash */
 22 static void batadv_hash_init(struct batadv_hashtable *hash)
 23 {
 24         uint32_t i;
 25 
 26         for (i = 0; i < hash->size; i++) {
 27                 INIT_HLIST_HEAD(&hash->table[i]);
 28                 spin_lock_init(&hash->list_locks[i]);
 29         }
 30 }
 31 
 32 /* free only the hashtable and the hash itself. */
 33 void batadv_hash_destroy(struct batadv_hashtable *hash)
 34 {
 35         kfree(hash->list_locks);
 36         kfree(hash->table);
 37         kfree(hash);
 38 }
 39 
 40 /* allocates and clears the hash */
 41 struct batadv_hashtable *batadv_hash_new(uint32_t size)
 42 {
 43         struct batadv_hashtable *hash;
 44 
 45         hash = kmalloc(sizeof(*hash), GFP_ATOMIC);
 46         if (!hash)
 47                 return NULL;
 48 
 49         hash->table = kmalloc(sizeof(*hash->table) * size, GFP_ATOMIC);
 50         if (!hash->table)
 51                 goto free_hash;
 52 
 53         hash->list_locks = kmalloc(sizeof(*hash->list_locks) * size,
 54                                    GFP_ATOMIC);
 55         if (!hash->list_locks)
 56                 goto free_table;
 57 
 58         hash->size = size;
 59         batadv_hash_init(hash);
 60         return hash;
 61 
 62 free_table:
 63         kfree(hash->table);
 64 free_hash:
 65         kfree(hash);
 66         return NULL;
 67 }
 68 
 69 void batadv_hash_set_lock_class(struct batadv_hashtable *hash,
 70                                 struct lock_class_key *key)
 71 {
 72         uint32_t i;
 73 
 74         for (i = 0; i < hash->size; i++)
 75                 lockdep_set_class(&hash->list_locks[i], key);
 76 }
 77 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp