blob: 4141afb101bb21d8a2382e4a6aae38e1c86c2fc8 [file] [log] [blame]
Peng Taod7e09d02013-05-02 16:46:55 +08001/*
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 Dilger1dc563a2015-11-08 18:09:37 -050030 * Copyright (c) 2011, 2015, Intel Corporation.
Peng Taod7e09d02013-05-02 16:46:55 +080031 */
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-Hartman9fdaf8c2014-07-11 20:51:16 -070040#include "linux/libcfs.h"
Vitaly Osipovcad7aa12014-04-22 23:25:21 +100041#include <linux/gfp.h>
Peng Taod7e09d02013-05-02 16:46:55 +080042
43#include "curproc.h"
44
James Simmons5b0e50b2016-02-26 11:36:03 -050045#define LIBCFS_VERSION "0.7.0"
46
Peng Taod7e09d02013-05-02 16:46:55 +080047#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 Taod7e09d02013-05-02 16:46:55 +080056#include <linux/list.h>
57
Peng Taod7e09d02013-05-02 16:46:55 +080058/* 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 Taod7e09d02013-05-02 16:46:55 +080063 * Defined by platform
64 */
Peng Taod7e09d02013-05-02 16:46:55 +080065sigset_t cfs_block_allsigs(void);
66sigset_t cfs_block_sigs(unsigned long sigs);
67sigset_t cfs_block_sigsinv(unsigned long sigs);
68void cfs_restore_sigs(sigset_t);
Peng Taod7e09d02013-05-02 16:46:55 +080069void cfs_clear_sigpending(void);
70
Peng Taod7e09d02013-05-02 16:46:55 +080071/*
72 * Random number handling
73 */
74
75/* returns a random 32-bit integer */
76unsigned int cfs_rand(void);
77/* seed the generator */
78void cfs_srand(unsigned int, unsigned int);
79void cfs_get_random_bytes(void *buf, int size);
80
Greg Kroah-Hartman9fdaf8c2014-07-11 20:51:16 -070081#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-Hartman9fdaf8c2014-07-11 20:51:16 -070088#include "libcfs_workitem.h"
89#include "libcfs_hash.h"
Greg Kroah-Hartman9fdaf8c2014-07-11 20:51:16 -070090#include "libcfs_fail.h"
Peng Taod7e09d02013-05-02 16:46:55 +080091
John L. Hammond7b54d082016-03-22 19:04:02 -040092struct 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
103int libcfs_register_ioctl(struct libcfs_ioctl_handler *hand);
104int libcfs_deregister_ioctl(struct libcfs_ioctl_handler *hand);
105
James Simmons659bd8d2016-03-22 19:04:11 -0400106int libcfs_ioctl_getdata(struct libcfs_ioctl_hdr **hdr_pp,
107 const struct libcfs_ioctl_hdr __user *uparam);
108int libcfs_ioctl_data_adjust(struct libcfs_ioctl_data *data);
Aleksei Fedotovabcdb1e2016-04-12 14:05:49 +0300109int libcfs_ioctl(unsigned long cmd, void __user *arg);
Parinay Kondekarae272a42016-03-22 19:04:07 -0400110
Peng Taod7e09d02013-05-02 16:46:55 +0800111/* container_of depends on "likely" which is defined in libcfs_private.h */
112static inline void *__container_of(void *ptr, unsigned long shift)
113{
Viresh Kumar7f44cb02015-07-31 14:08:30 +0530114 if (IS_ERR_OR_NULL(ptr))
Peng Taod7e09d02013-05-02 16:46:55 +0800115 return ptr;
Gulsah Kosefa44eae2014-09-30 21:59:21 +0300116 return (char *)ptr - shift;
Peng Taod7e09d02013-05-02 16:46:55 +0800117}
118
119#define container_of0(ptr, type, member) \
120 ((type *)__container_of((void *)(ptr), offsetof(type, member)))
121
Peng Taod7e09d02013-05-02 16:46:55 +0800122#define _LIBCFS_H
123
Oleg Drokin99d56ff2015-05-04 12:48:09 -0400124void *libcfs_kvzalloc(size_t size, gfp_t flags);
125void *libcfs_kvzalloc_cpt(struct cfs_cpt_table *cptab, int cpt, size_t size,
126 gfp_t flags);
127
Patrick Boettcher25bbe412015-08-10 10:25:08 +0200128extern struct miscdevice libcfs_dev;
129/**
130 * The path of debug log dump upcall script.
131 */
132extern char lnet_upcall[1024];
133extern char lnet_debug_log_upcall[1024];
134
Patrick Boettcher25bbe412015-08-10 10:25:08 +0200135extern struct cfs_wi_sched *cfs_sched_rehash;
136
Oleg Drokinb03f3952015-09-14 18:41:17 -0400137struct lnet_debugfs_symlink_def {
138 char *name;
139 char *target;
140};
141
142void lustre_insert_debugfs(struct ctl_table *table,
143 const struct lnet_debugfs_symlink_def *symlinks);
James Simmons708a24c12016-03-07 18:10:24 -0500144int 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 Drokinb03f3952015-09-14 18:41:17 -0400148
Peng Taod7e09d02013-05-02 16:46:55 +0800149#endif /* _LIBCFS_H */