Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/net/rds/ib_sysctl.c
15109 views
1
/*
2
* Copyright (c) 2006 Oracle. All rights reserved.
3
*
4
* This software is available to you under a choice of one of two
5
* licenses. You may choose to be licensed under the terms of the GNU
6
* General Public License (GPL) Version 2, available from the file
7
* COPYING in the main directory of this source tree, or the
8
* OpenIB.org BSD license below:
9
*
10
* Redistribution and use in source and binary forms, with or
11
* without modification, are permitted provided that the following
12
* conditions are met:
13
*
14
* - Redistributions of source code must retain the above
15
* copyright notice, this list of conditions and the following
16
* disclaimer.
17
*
18
* - Redistributions in binary form must reproduce the above
19
* copyright notice, this list of conditions and the following
20
* disclaimer in the documentation and/or other materials
21
* provided with the distribution.
22
*
23
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
27
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
28
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
29
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30
* SOFTWARE.
31
*
32
*/
33
#include <linux/kernel.h>
34
#include <linux/sysctl.h>
35
#include <linux/proc_fs.h>
36
37
#include "ib.h"
38
39
static struct ctl_table_header *rds_ib_sysctl_hdr;
40
41
unsigned long rds_ib_sysctl_max_send_wr = RDS_IB_DEFAULT_SEND_WR;
42
unsigned long rds_ib_sysctl_max_recv_wr = RDS_IB_DEFAULT_RECV_WR;
43
unsigned long rds_ib_sysctl_max_recv_allocation = (128 * 1024 * 1024) / RDS_FRAG_SIZE;
44
static unsigned long rds_ib_sysctl_max_wr_min = 1;
45
/* hardware will fail CQ creation long before this */
46
static unsigned long rds_ib_sysctl_max_wr_max = (u32)~0;
47
48
unsigned long rds_ib_sysctl_max_unsig_wrs = 16;
49
static unsigned long rds_ib_sysctl_max_unsig_wr_min = 1;
50
static unsigned long rds_ib_sysctl_max_unsig_wr_max = 64;
51
52
/*
53
* This sysctl does nothing.
54
*
55
* Backwards compatibility with RDS 3.0 wire protocol
56
* disables initial FC credit exchange.
57
* If it's ever possible to drop 3.0 support,
58
* setting this to 1 and moving init/refill of send/recv
59
* rings from ib_cm_connect_complete() back into ib_setup_qp()
60
* will cause credits to be added before protocol negotiation.
61
*/
62
unsigned int rds_ib_sysctl_flow_control = 0;
63
64
static ctl_table rds_ib_sysctl_table[] = {
65
{
66
.procname = "max_send_wr",
67
.data = &rds_ib_sysctl_max_send_wr,
68
.maxlen = sizeof(unsigned long),
69
.mode = 0644,
70
.proc_handler = proc_doulongvec_minmax,
71
.extra1 = &rds_ib_sysctl_max_wr_min,
72
.extra2 = &rds_ib_sysctl_max_wr_max,
73
},
74
{
75
.procname = "max_recv_wr",
76
.data = &rds_ib_sysctl_max_recv_wr,
77
.maxlen = sizeof(unsigned long),
78
.mode = 0644,
79
.proc_handler = proc_doulongvec_minmax,
80
.extra1 = &rds_ib_sysctl_max_wr_min,
81
.extra2 = &rds_ib_sysctl_max_wr_max,
82
},
83
{
84
.procname = "max_unsignaled_wr",
85
.data = &rds_ib_sysctl_max_unsig_wrs,
86
.maxlen = sizeof(unsigned long),
87
.mode = 0644,
88
.proc_handler = proc_doulongvec_minmax,
89
.extra1 = &rds_ib_sysctl_max_unsig_wr_min,
90
.extra2 = &rds_ib_sysctl_max_unsig_wr_max,
91
},
92
{
93
.procname = "max_recv_allocation",
94
.data = &rds_ib_sysctl_max_recv_allocation,
95
.maxlen = sizeof(unsigned long),
96
.mode = 0644,
97
.proc_handler = proc_doulongvec_minmax,
98
},
99
{
100
.procname = "flow_control",
101
.data = &rds_ib_sysctl_flow_control,
102
.maxlen = sizeof(rds_ib_sysctl_flow_control),
103
.mode = 0644,
104
.proc_handler = proc_dointvec,
105
},
106
{ }
107
};
108
109
static struct ctl_path rds_ib_sysctl_path[] = {
110
{ .procname = "net", },
111
{ .procname = "rds", },
112
{ .procname = "ib", },
113
{ }
114
};
115
116
void rds_ib_sysctl_exit(void)
117
{
118
if (rds_ib_sysctl_hdr)
119
unregister_sysctl_table(rds_ib_sysctl_hdr);
120
}
121
122
int rds_ib_sysctl_init(void)
123
{
124
rds_ib_sysctl_hdr = register_sysctl_paths(rds_ib_sysctl_path, rds_ib_sysctl_table);
125
if (!rds_ib_sysctl_hdr)
126
return -ENOMEM;
127
return 0;
128
}
129
130