aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/netdevsim/dev.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/netdevsim/dev.c')
-rw-r--r--drivers/net/netdevsim/dev.c63
1 files changed, 25 insertions, 38 deletions
diff --git a/drivers/net/netdevsim/dev.c b/drivers/net/netdevsim/dev.c
index c5c417a3c0ce..bcc40a236624 100644
--- a/drivers/net/netdevsim/dev.c
+++ b/drivers/net/netdevsim/dev.c
@@ -73,46 +73,47 @@ static void nsim_dev_port_debugfs_exit(struct nsim_dev_port *nsim_dev_port)
73 debugfs_remove_recursive(nsim_dev_port->ddir); 73 debugfs_remove_recursive(nsim_dev_port->ddir);
74} 74}
75 75
76static struct net *nsim_devlink_net(struct devlink *devlink)
77{
78 return &init_net;
79}
80
76static u64 nsim_dev_ipv4_fib_resource_occ_get(void *priv) 81static u64 nsim_dev_ipv4_fib_resource_occ_get(void *priv)
77{ 82{
78 struct nsim_dev *nsim_dev = priv; 83 struct net *net = priv;
79 84
80 return nsim_fib_get_val(nsim_dev->fib_data, 85 return nsim_fib_get_val(net, NSIM_RESOURCE_IPV4_FIB, false);
81 NSIM_RESOURCE_IPV4_FIB, false);
82} 86}
83 87
84static u64 nsim_dev_ipv4_fib_rules_res_occ_get(void *priv) 88static u64 nsim_dev_ipv4_fib_rules_res_occ_get(void *priv)
85{ 89{
86 struct nsim_dev *nsim_dev = priv; 90 struct net *net = priv;
87 91
88 return nsim_fib_get_val(nsim_dev->fib_data, 92 return nsim_fib_get_val(net, NSIM_RESOURCE_IPV4_FIB_RULES, false);
89 NSIM_RESOURCE_IPV4_FIB_RULES, false);
90} 93}
91 94
92static u64 nsim_dev_ipv6_fib_resource_occ_get(void *priv) 95static u64 nsim_dev_ipv6_fib_resource_occ_get(void *priv)
93{ 96{
94 struct nsim_dev *nsim_dev = priv; 97 struct net *net = priv;
95 98
96 return nsim_fib_get_val(nsim_dev->fib_data, 99 return nsim_fib_get_val(net, NSIM_RESOURCE_IPV6_FIB, false);
97 NSIM_RESOURCE_IPV6_FIB, false);
98} 100}
99 101
100static u64 nsim_dev_ipv6_fib_rules_res_occ_get(void *priv) 102static u64 nsim_dev_ipv6_fib_rules_res_occ_get(void *priv)
101{ 103{
102 struct nsim_dev *nsim_dev = priv; 104 struct net *net = priv;
103 105
104 return nsim_fib_get_val(nsim_dev->fib_data, 106 return nsim_fib_get_val(net, NSIM_RESOURCE_IPV6_FIB_RULES, false);
105 NSIM_RESOURCE_IPV6_FIB_RULES, false);
106} 107}
107 108
108static int nsim_dev_resources_register(struct devlink *devlink) 109static int nsim_dev_resources_register(struct devlink *devlink)
109{ 110{
110 struct nsim_dev *nsim_dev = devlink_priv(devlink);
111 struct devlink_resource_size_params params = { 111 struct devlink_resource_size_params params = {
112 .size_max = (u64)-1, 112 .size_max = (u64)-1,
113 .size_granularity = 1, 113 .size_granularity = 1,
114 .unit = DEVLINK_RESOURCE_UNIT_ENTRY 114 .unit = DEVLINK_RESOURCE_UNIT_ENTRY
115 }; 115 };
116 struct net *net = nsim_devlink_net(devlink);
116 int err; 117 int err;
117 u64 n; 118 u64 n;
118 119
@@ -126,8 +127,7 @@ static int nsim_dev_resources_register(struct devlink *devlink)
126 goto out; 127 goto out;
127 } 128 }
128 129
129 n = nsim_fib_get_val(nsim_dev->fib_data, 130 n = nsim_fib_get_val(net, NSIM_RESOURCE_IPV4_FIB, true);
130 NSIM_RESOURCE_IPV4_FIB, true);
131 err = devlink_resource_register(devlink, "fib", n, 131 err = devlink_resource_register(devlink, "fib", n,
132 NSIM_RESOURCE_IPV4_FIB, 132 NSIM_RESOURCE_IPV4_FIB,
133 NSIM_RESOURCE_IPV4, &params); 133 NSIM_RESOURCE_IPV4, &params);
@@ -136,8 +136,7 @@ static int nsim_dev_resources_register(struct devlink *devlink)
136 return err; 136 return err;
137 } 137 }
138 138
139 n = nsim_fib_get_val(nsim_dev->fib_data, 139 n = nsim_fib_get_val(net, NSIM_RESOURCE_IPV4_FIB_RULES, true);
140 NSIM_RESOURCE_IPV4_FIB_RULES, true);
141 err = devlink_resource_register(devlink, "fib-rules", n, 140 err = devlink_resource_register(devlink, "fib-rules", n,
142 NSIM_RESOURCE_IPV4_FIB_RULES, 141 NSIM_RESOURCE_IPV4_FIB_RULES,
143 NSIM_RESOURCE_IPV4, &params); 142 NSIM_RESOURCE_IPV4, &params);
@@ -156,8 +155,7 @@ static int nsim_dev_resources_register(struct devlink *devlink)
156 goto out; 155 goto out;
157 } 156 }
158 157
159 n = nsim_fib_get_val(nsim_dev->fib_data, 158 n = nsim_fib_get_val(net, NSIM_RESOURCE_IPV6_FIB, true);
160 NSIM_RESOURCE_IPV6_FIB, true);
161 err = devlink_resource_register(devlink, "fib", n, 159 err = devlink_resource_register(devlink, "fib", n,
162 NSIM_RESOURCE_IPV6_FIB, 160 NSIM_RESOURCE_IPV6_FIB,
163 NSIM_RESOURCE_IPV6, &params); 161 NSIM_RESOURCE_IPV6, &params);
@@ -166,8 +164,7 @@ static int nsim_dev_resources_register(struct devlink *devlink)
166 return err; 164 return err;
167 } 165 }
168 166
169 n = nsim_fib_get_val(nsim_dev->fib_data, 167 n = nsim_fib_get_val(net, NSIM_RESOURCE_IPV6_FIB_RULES, true);
170 NSIM_RESOURCE_IPV6_FIB_RULES, true);
171 err = devlink_resource_register(devlink, "fib-rules", n, 168 err = devlink_resource_register(devlink, "fib-rules", n,
172 NSIM_RESOURCE_IPV6_FIB_RULES, 169 NSIM_RESOURCE_IPV6_FIB_RULES,
173 NSIM_RESOURCE_IPV6, &params); 170 NSIM_RESOURCE_IPV6, &params);
@@ -179,19 +176,19 @@ static int nsim_dev_resources_register(struct devlink *devlink)
179 devlink_resource_occ_get_register(devlink, 176 devlink_resource_occ_get_register(devlink,
180 NSIM_RESOURCE_IPV4_FIB, 177 NSIM_RESOURCE_IPV4_FIB,
181 nsim_dev_ipv4_fib_resource_occ_get, 178 nsim_dev_ipv4_fib_resource_occ_get,
182 nsim_dev); 179 net);
183 devlink_resource_occ_get_register(devlink, 180 devlink_resource_occ_get_register(devlink,
184 NSIM_RESOURCE_IPV4_FIB_RULES, 181 NSIM_RESOURCE_IPV4_FIB_RULES,
185 nsim_dev_ipv4_fib_rules_res_occ_get, 182 nsim_dev_ipv4_fib_rules_res_occ_get,
186 nsim_dev); 183 net);
187 devlink_resource_occ_get_register(devlink, 184 devlink_resource_occ_get_register(devlink,
188 NSIM_RESOURCE_IPV6_FIB, 185 NSIM_RESOURCE_IPV6_FIB,
189 nsim_dev_ipv6_fib_resource_occ_get, 186 nsim_dev_ipv6_fib_resource_occ_get,
190 nsim_dev); 187 net);
191 devlink_resource_occ_get_register(devlink, 188 devlink_resource_occ_get_register(devlink,
192 NSIM_RESOURCE_IPV6_FIB_RULES, 189 NSIM_RESOURCE_IPV6_FIB_RULES,
193 nsim_dev_ipv6_fib_rules_res_occ_get, 190 nsim_dev_ipv6_fib_rules_res_occ_get,
194 nsim_dev); 191 net);
195out: 192out:
196 return err; 193 return err;
197} 194}
@@ -199,11 +196,11 @@ out:
199static int nsim_dev_reload(struct devlink *devlink, 196static int nsim_dev_reload(struct devlink *devlink,
200 struct netlink_ext_ack *extack) 197 struct netlink_ext_ack *extack)
201{ 198{
202 struct nsim_dev *nsim_dev = devlink_priv(devlink);
203 enum nsim_resource_id res_ids[] = { 199 enum nsim_resource_id res_ids[] = {
204 NSIM_RESOURCE_IPV4_FIB, NSIM_RESOURCE_IPV4_FIB_RULES, 200 NSIM_RESOURCE_IPV4_FIB, NSIM_RESOURCE_IPV4_FIB_RULES,
205 NSIM_RESOURCE_IPV6_FIB, NSIM_RESOURCE_IPV6_FIB_RULES 201 NSIM_RESOURCE_IPV6_FIB, NSIM_RESOURCE_IPV6_FIB_RULES
206 }; 202 };
203 struct net *net = nsim_devlink_net(devlink);
207 int i; 204 int i;
208 205
209 for (i = 0; i < ARRAY_SIZE(res_ids); ++i) { 206 for (i = 0; i < ARRAY_SIZE(res_ids); ++i) {
@@ -212,8 +209,7 @@ static int nsim_dev_reload(struct devlink *devlink,
212 209
213 err = devlink_resource_size_get(devlink, res_ids[i], &val); 210 err = devlink_resource_size_get(devlink, res_ids[i], &val);
214 if (!err) { 211 if (!err) {
215 err = nsim_fib_set_max(nsim_dev->fib_data, 212 err = nsim_fib_set_max(net, res_ids[i], val, extack);
216 res_ids[i], val, extack);
217 if (err) 213 if (err)
218 return err; 214 return err;
219 } 215 }
@@ -285,15 +281,9 @@ nsim_dev_create(struct nsim_bus_dev *nsim_bus_dev, unsigned int port_count)
285 mutex_init(&nsim_dev->port_list_lock); 281 mutex_init(&nsim_dev->port_list_lock);
286 nsim_dev->fw_update_status = true; 282 nsim_dev->fw_update_status = true;
287 283
288 nsim_dev->fib_data = nsim_fib_create();
289 if (IS_ERR(nsim_dev->fib_data)) {
290 err = PTR_ERR(nsim_dev->fib_data);
291 goto err_devlink_free;
292 }
293
294 err = nsim_dev_resources_register(devlink); 284 err = nsim_dev_resources_register(devlink);
295 if (err) 285 if (err)
296 goto err_fib_destroy; 286 goto err_devlink_free;
297 287
298 err = devlink_register(devlink, &nsim_bus_dev->dev); 288 err = devlink_register(devlink, &nsim_bus_dev->dev);
299 if (err) 289 if (err)
@@ -315,8 +305,6 @@ err_dl_unregister:
315 devlink_unregister(devlink); 305 devlink_unregister(devlink);
316err_resources_unregister: 306err_resources_unregister:
317 devlink_resources_unregister(devlink, NULL); 307 devlink_resources_unregister(devlink, NULL);
318err_fib_destroy:
319 nsim_fib_destroy(nsim_dev->fib_data);
320err_devlink_free: 308err_devlink_free:
321 devlink_free(devlink); 309 devlink_free(devlink);
322 return ERR_PTR(err); 310 return ERR_PTR(err);
@@ -330,7 +318,6 @@ static void nsim_dev_destroy(struct nsim_dev *nsim_dev)
330 nsim_dev_debugfs_exit(nsim_dev); 318 nsim_dev_debugfs_exit(nsim_dev);
331 devlink_unregister(devlink); 319 devlink_unregister(devlink);
332 devlink_resources_unregister(devlink, NULL); 320 devlink_resources_unregister(devlink, NULL);
333 nsim_fib_destroy(nsim_dev->fib_data);
334 mutex_destroy(&nsim_dev->port_list_lock); 321 mutex_destroy(&nsim_dev->port_list_lock);
335 devlink_free(devlink); 322 devlink_free(devlink);
336} 323}