Lines Matching refs:resource
10 * struct devlink_resource - devlink resource
11 * @name: name of the resource
13 * @size: size of the resource
14 * @size_new: updated size of the resource, reload is needed
15 * @size_valid: valid in case the total size of the resource is valid
17 * @parent: parent resource
40 struct devlink_resource *resource, u64 resource_id)
44 if (resource)
45 resource_list = &resource->resource_list;
49 list_for_each_entry(resource, resource_list, list) {
52 if (resource->id == resource_id)
53 return resource;
55 child_resource = devlink_resource_find(devlink, resource,
64 devlink_resource_validate_children(struct devlink_resource *resource)
70 if (list_empty(&resource->resource_list))
73 list_for_each_entry(child_resource, &resource->resource_list, list)
76 if (parts_size > resource->size_new)
79 resource->size_valid = size_valid;
83 devlink_resource_validate_size(struct devlink_resource *resource, u64 size,
89 if (size > resource->size_params.size_max) {
94 if (size < resource->size_params.size_min) {
99 div64_u64_rem(size, resource->size_params.size_granularity, &reminder);
111 struct devlink_resource *resource;
121 resource = devlink_resource_find(devlink, NULL, resource_id);
122 if (!resource)
126 err = devlink_resource_validate_size(resource, size, info->extack);
130 resource->size_new = size;
131 devlink_resource_validate_children(resource);
132 if (resource->parent)
133 devlink_resource_validate_children(resource->parent);
138 devlink_resource_size_params_put(struct devlink_resource *resource,
143 size_params = &resource->size_params;
155 static int devlink_resource_occ_put(struct devlink_resource *resource,
158 if (!resource->occ_get)
161 resource->occ_get(resource->occ_get_priv),
166 struct devlink_resource *resource)
176 if (nla_put_string(skb, DEVLINK_ATTR_RESOURCE_NAME, resource->name) ||
177 nla_put_u64_64bit(skb, DEVLINK_ATTR_RESOURCE_SIZE, resource->size,
179 nla_put_u64_64bit(skb, DEVLINK_ATTR_RESOURCE_ID, resource->id,
182 if (resource->size != resource->size_new &&
184 resource->size_new, DEVLINK_ATTR_PAD))
186 if (devlink_resource_occ_put(resource, skb))
188 if (devlink_resource_size_params_put(resource, skb))
190 if (list_empty(&resource->resource_list))
194 resource->size_valid))
202 list_for_each_entry(child_resource, &resource->resource_list, list) {
223 struct devlink_resource *resource;
232 resource = list_first_entry(&devlink->resource_list,
256 list_for_each_entry_from(resource, &devlink->resource_list, list) {
257 err = devlink_resource_put(devlink, skb, resource);
299 struct devlink_resource *resource,
305 if (resource)
306 resource_list = &resource->resource_list;
310 list_for_each_entry(resource, resource_list, list) {
311 if (!resource->size_valid)
313 err = devlink_resources_validate(devlink, resource, info);
321 * devl_resource_register - devlink resource register
324 * @resource_name: resource's name
325 * @resource_size: resource's size
326 * @resource_id: resource's id
327 * @parent_resource_id: resource's parent id
332 * Documentation/networking/devlink/devlink-resource.rst
341 struct devlink_resource *resource;
349 resource = devlink_resource_find(devlink, NULL, resource_id);
350 if (resource)
353 resource = kzalloc(sizeof(*resource), GFP_KERNEL);
354 if (!resource)
366 resource->parent = parent_resource;
368 kfree(resource);
373 resource->name = resource_name;
374 resource->size = resource_size;
375 resource->size_new = resource_size;
376 resource->id = resource_id;
377 resource->size_valid = true;
378 memcpy(&resource->size_params, size_params,
379 sizeof(resource->size_params));
380 INIT_LIST_HEAD(&resource->resource_list);
381 list_add_tail(&resource->list, resource_list);
388 * devlink_resource_register - devlink resource register
391 * @resource_name: resource's name
392 * @resource_size: resource's size
393 * @resource_id: resource's id
394 * @parent_resource_id: resource's parent id
399 * Documentation/networking/devlink/devlink-resource.rst
421 struct devlink_resource *resource)
425 list_for_each_entry_safe(child_resource, tmp, &resource->resource_list,
472 * @resource_id: the requested resource id
479 struct devlink_resource *resource;
483 resource = devlink_resource_find(devlink, NULL, resource_id);
484 if (!resource)
486 *p_resource_size = resource->size_new;
487 resource->size = resource->size_new;
496 * @resource_id: resource id
505 struct devlink_resource *resource;
509 resource = devlink_resource_find(devlink, NULL, resource_id);
510 if (WARN_ON(!resource))
512 WARN_ON(resource->occ_get);
514 resource->occ_get = occ_get;
515 resource->occ_get_priv = occ_get_priv;
523 * @resource_id: resource id
545 * @resource_id: resource id
550 struct devlink_resource *resource;
554 resource = devlink_resource_find(devlink, NULL, resource_id);
555 if (WARN_ON(!resource))
557 WARN_ON(!resource->occ_get);
559 resource->occ_get = NULL;
560 resource->occ_get_priv = NULL;
568 * @resource_id: resource id