Peng Tao | d7e09d0 | 2013-05-02 16:46:55 +0800 | [diff] [blame] | 1 | /* |
| 2 | * GPL HEADER START |
| 3 | * |
| 4 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
| 5 | * |
| 6 | * This program is free software; you can redistribute it and/or modify |
| 7 | * it under the terms of the GNU General Public License version 2 only, |
| 8 | * as published by the Free Software Foundation. |
| 9 | * |
| 10 | * This program is distributed in the hope that it will be useful, but |
| 11 | * WITHOUT ANY WARRANTY; without even the implied warranty of |
| 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 13 | * General Public License version 2 for more details (a copy is included |
| 14 | * in the LICENSE file that accompanied this code). |
| 15 | * |
| 16 | * You should have received a copy of the GNU General Public License |
| 17 | * version 2 along with this program; If not, see |
| 18 | * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf |
| 19 | * |
| 20 | * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, |
| 21 | * CA 95054 USA or visit www.sun.com if you need additional information or |
| 22 | * have any questions. |
| 23 | * |
| 24 | * GPL HEADER END |
| 25 | */ |
| 26 | /* |
| 27 | * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. |
| 28 | * Use is subject to license terms. |
| 29 | * |
Andreas Dilger | 1dc563a | 2015-11-08 18:09:37 -0500 | [diff] [blame] | 30 | * Copyright (c) 2011, 2015, Intel Corporation. |
Peng Tao | d7e09d0 | 2013-05-02 16:46:55 +0800 | [diff] [blame] | 31 | */ |
| 32 | /* |
| 33 | * This file is part of Lustre, http://www.lustre.org/ |
| 34 | * Lustre is a trademark of Sun Microsystems, Inc. |
| 35 | */ |
| 36 | |
| 37 | #ifndef __LIBCFS_LIBCFS_H__ |
| 38 | #define __LIBCFS_LIBCFS_H__ |
| 39 | |
Greg Kroah-Hartman | 9fdaf8c | 2014-07-11 20:51:16 -0700 | [diff] [blame] | 40 | #include "linux/libcfs.h" |
Vitaly Osipov | cad7aa1 | 2014-04-22 23:25:21 +1000 | [diff] [blame] | 41 | #include <linux/gfp.h> |
Peng Tao | d7e09d0 | 2013-05-02 16:46:55 +0800 | [diff] [blame] | 42 | |
| 43 | #include "curproc.h" |
| 44 | |
James Simmons | 5b0e50b | 2016-02-26 11:36:03 -0500 | [diff] [blame] | 45 | #define LIBCFS_VERSION "0.7.0" |
| 46 | |
Peng Tao | d7e09d0 | 2013-05-02 16:46:55 +0800 | [diff] [blame] | 47 | #define LOWEST_BIT_SET(x) ((x) & ~((x) - 1)) |
| 48 | |
| 49 | /* |
| 50 | * Lustre Error Checksum: calculates checksum |
| 51 | * of Hex number by XORing each bit. |
| 52 | */ |
| 53 | #define LERRCHKSUM(hexnum) (((hexnum) & 0xf) ^ ((hexnum) >> 4 & 0xf) ^ \ |
| 54 | ((hexnum) >> 8 & 0xf)) |
| 55 | |
Peng Tao | d7e09d0 | 2013-05-02 16:46:55 +0800 | [diff] [blame] | 56 | #include <linux/list.h> |
| 57 | |
Peng Tao | d7e09d0 | 2013-05-02 16:46:55 +0800 | [diff] [blame] | 58 | /* need both kernel and user-land acceptor */ |
| 59 | #define LNET_ACCEPTOR_MIN_RESERVED_PORT 512 |
| 60 | #define LNET_ACCEPTOR_MAX_RESERVED_PORT 1023 |
| 61 | |
| 62 | /* |
Peng Tao | d7e09d0 | 2013-05-02 16:46:55 +0800 | [diff] [blame] | 63 | * Defined by platform |
| 64 | */ |
Peng Tao | d7e09d0 | 2013-05-02 16:46:55 +0800 | [diff] [blame] | 65 | sigset_t cfs_block_allsigs(void); |
| 66 | sigset_t cfs_block_sigs(unsigned long sigs); |
| 67 | sigset_t cfs_block_sigsinv(unsigned long sigs); |
| 68 | void cfs_restore_sigs(sigset_t); |
Peng Tao | d7e09d0 | 2013-05-02 16:46:55 +0800 | [diff] [blame] | 69 | void cfs_clear_sigpending(void); |
| 70 | |
Peng Tao | d7e09d0 | 2013-05-02 16:46:55 +0800 | [diff] [blame] | 71 | /* |
| 72 | * Random number handling |
| 73 | */ |
| 74 | |
| 75 | /* returns a random 32-bit integer */ |
| 76 | unsigned int cfs_rand(void); |
| 77 | /* seed the generator */ |
| 78 | void cfs_srand(unsigned int, unsigned int); |
| 79 | void cfs_get_random_bytes(void *buf, int size); |
| 80 | |
Greg Kroah-Hartman | 9fdaf8c | 2014-07-11 20:51:16 -0700 | [diff] [blame] | 81 | #include "libcfs_debug.h" |
| 82 | #include "libcfs_cpu.h" |
| 83 | #include "libcfs_private.h" |
| 84 | #include "libcfs_ioctl.h" |
| 85 | #include "libcfs_prim.h" |
| 86 | #include "libcfs_time.h" |
| 87 | #include "libcfs_string.h" |
Greg Kroah-Hartman | 9fdaf8c | 2014-07-11 20:51:16 -0700 | [diff] [blame] | 88 | #include "libcfs_workitem.h" |
| 89 | #include "libcfs_hash.h" |
Greg Kroah-Hartman | 9fdaf8c | 2014-07-11 20:51:16 -0700 | [diff] [blame] | 90 | #include "libcfs_fail.h" |
Peng Tao | d7e09d0 | 2013-05-02 16:46:55 +0800 | [diff] [blame] | 91 | |
John L. Hammond | 7b54d08 | 2016-03-22 19:04:02 -0400 | [diff] [blame] | 92 | struct libcfs_ioctl_handler { |
| 93 | struct list_head item; |
| 94 | int (*handle_ioctl)(unsigned int cmd, struct libcfs_ioctl_hdr *hdr); |
| 95 | }; |
| 96 | |
| 97 | #define DECLARE_IOCTL_HANDLER(ident, func) \ |
| 98 | struct libcfs_ioctl_handler ident = { \ |
| 99 | .item = LIST_HEAD_INIT(ident.item), \ |
| 100 | .handle_ioctl = func \ |
| 101 | } |
| 102 | |
| 103 | int libcfs_register_ioctl(struct libcfs_ioctl_handler *hand); |
| 104 | int libcfs_deregister_ioctl(struct libcfs_ioctl_handler *hand); |
| 105 | |
James Simmons | 659bd8d | 2016-03-22 19:04:11 -0400 | [diff] [blame] | 106 | int libcfs_ioctl_getdata(struct libcfs_ioctl_hdr **hdr_pp, |
| 107 | const struct libcfs_ioctl_hdr __user *uparam); |
| 108 | int libcfs_ioctl_data_adjust(struct libcfs_ioctl_data *data); |
Aleksei Fedotov | abcdb1e | 2016-04-12 14:05:49 +0300 | [diff] [blame] | 109 | int libcfs_ioctl(unsigned long cmd, void __user *arg); |
Parinay Kondekar | ae272a4 | 2016-03-22 19:04:07 -0400 | [diff] [blame] | 110 | |
Peng Tao | d7e09d0 | 2013-05-02 16:46:55 +0800 | [diff] [blame] | 111 | /* container_of depends on "likely" which is defined in libcfs_private.h */ |
| 112 | static inline void *__container_of(void *ptr, unsigned long shift) |
| 113 | { |
Viresh Kumar | 7f44cb0 | 2015-07-31 14:08:30 +0530 | [diff] [blame] | 114 | if (IS_ERR_OR_NULL(ptr)) |
Peng Tao | d7e09d0 | 2013-05-02 16:46:55 +0800 | [diff] [blame] | 115 | return ptr; |
Gulsah Kose | fa44eae | 2014-09-30 21:59:21 +0300 | [diff] [blame] | 116 | return (char *)ptr - shift; |
Peng Tao | d7e09d0 | 2013-05-02 16:46:55 +0800 | [diff] [blame] | 117 | } |
| 118 | |
| 119 | #define container_of0(ptr, type, member) \ |
| 120 | ((type *)__container_of((void *)(ptr), offsetof(type, member))) |
| 121 | |
Peng Tao | d7e09d0 | 2013-05-02 16:46:55 +0800 | [diff] [blame] | 122 | #define _LIBCFS_H |
| 123 | |
Oleg Drokin | 99d56ff | 2015-05-04 12:48:09 -0400 | [diff] [blame] | 124 | void *libcfs_kvzalloc(size_t size, gfp_t flags); |
| 125 | void *libcfs_kvzalloc_cpt(struct cfs_cpt_table *cptab, int cpt, size_t size, |
| 126 | gfp_t flags); |
| 127 | |
Patrick Boettcher | 25bbe41 | 2015-08-10 10:25:08 +0200 | [diff] [blame] | 128 | extern struct miscdevice libcfs_dev; |
| 129 | /** |
| 130 | * The path of debug log dump upcall script. |
| 131 | */ |
| 132 | extern char lnet_upcall[1024]; |
| 133 | extern char lnet_debug_log_upcall[1024]; |
| 134 | |
Patrick Boettcher | 25bbe41 | 2015-08-10 10:25:08 +0200 | [diff] [blame] | 135 | extern struct cfs_wi_sched *cfs_sched_rehash; |
| 136 | |
Oleg Drokin | b03f395 | 2015-09-14 18:41:17 -0400 | [diff] [blame] | 137 | struct lnet_debugfs_symlink_def { |
| 138 | char *name; |
| 139 | char *target; |
| 140 | }; |
| 141 | |
| 142 | void lustre_insert_debugfs(struct ctl_table *table, |
| 143 | const struct lnet_debugfs_symlink_def *symlinks); |
James Simmons | 708a24c1 | 2016-03-07 18:10:24 -0500 | [diff] [blame] | 144 | int lprocfs_call_handler(void *data, int write, loff_t *ppos, |
| 145 | void __user *buffer, size_t *lenp, |
| 146 | int (*handler)(void *data, int write, |
| 147 | loff_t pos, void __user *buffer, int len)); |
Oleg Drokin | b03f395 | 2015-09-14 18:41:17 -0400 | [diff] [blame] | 148 | |
Peng Tao | d7e09d0 | 2013-05-02 16:46:55 +0800 | [diff] [blame] | 149 | #endif /* _LIBCFS_H */ |