diff options
Diffstat (limited to 'drivers/net/netdevsim/dev.c')
-rw-r--r-- | drivers/net/netdevsim/dev.c | 63 |
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 | ||
76 | static struct net *nsim_devlink_net(struct devlink *devlink) | ||
77 | { | ||
78 | return &init_net; | ||
79 | } | ||
80 | |||
76 | static u64 nsim_dev_ipv4_fib_resource_occ_get(void *priv) | 81 | static 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 | ||
84 | static u64 nsim_dev_ipv4_fib_rules_res_occ_get(void *priv) | 88 | static 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 | ||
92 | static u64 nsim_dev_ipv6_fib_resource_occ_get(void *priv) | 95 | static 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 | ||
100 | static u64 nsim_dev_ipv6_fib_rules_res_occ_get(void *priv) | 102 | static 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 | ||
108 | static int nsim_dev_resources_register(struct devlink *devlink) | 109 | static 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, ¶ms); | 133 | NSIM_RESOURCE_IPV4, ¶ms); |
@@ -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, ¶ms); | 142 | NSIM_RESOURCE_IPV4, ¶ms); |
@@ -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, ¶ms); | 161 | NSIM_RESOURCE_IPV6, ¶ms); |
@@ -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, ¶ms); | 170 | NSIM_RESOURCE_IPV6, ¶ms); |
@@ -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); |
195 | out: | 192 | out: |
196 | return err; | 193 | return err; |
197 | } | 194 | } |
@@ -199,11 +196,11 @@ out: | |||
199 | static int nsim_dev_reload(struct devlink *devlink, | 196 | static 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); |
316 | err_resources_unregister: | 306 | err_resources_unregister: |
317 | devlink_resources_unregister(devlink, NULL); | 307 | devlink_resources_unregister(devlink, NULL); |
318 | err_fib_destroy: | ||
319 | nsim_fib_destroy(nsim_dev->fib_data); | ||
320 | err_devlink_free: | 308 | err_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 | } |