1 /*- 2 * Copyright (c) 2018 VMware, Inc. 3 * 4 * SPDX-License-Identifier: (BSD-2-Clause OR GPL-2.0) 5 */ 6 7 /* Some common utilities used by the VMCI kernel module. */ 8 9 #ifndef _VMCI_UTILS_H_ 10 #define _VMCI_UTILS_H_ 11 12 /* 13 *------------------------------------------------------------------------------ 14 * 15 * vmci_hash_id -- 16 * 17 * Hash function used by the Simple Datagram API. Hashes only a VMCI ID (not 18 * the full VMCI handle). Based on the djb2 hash function by Dan Bernstein. 19 * 20 * Result: 21 * Returns guest call size. 22 * 23 * Side effects: 24 * None. 25 * 26 *------------------------------------------------------------------------------ 27 */ 28 29 static inline int 30 vmci_hash_id(vmci_id id, unsigned size) 31 { 32 unsigned i; 33 int hash = 5381; 34 35 for (i = 0; i < sizeof(id); i++) 36 hash = ((hash << 5) + hash) + (uint8_t)(id >> (i * 8)); 37 38 return (hash & (size - 1)); 39 } 40 41 #endif /* !_VMCI_UTILS_H_ */ 42