Lines Matching defs:region

364 	struct devlink_region *region;
372 struct devlink_region *region;
374 list_for_each_entry(region, &devlink->region_list, list)
375 if (!strcmp(region->ops->name, region_name))
376 return region;
385 struct devlink_region *region;
387 list_for_each_entry(region, &port->region_list, list)
388 if (!strcmp(region->ops->name, region_name))
389 return region;
395 devlink_region_snapshot_get_by_id(struct devlink_region *region, u32 id)
399 list_for_each_entry(snapshot, &region->snapshot_list, list)
4206 struct devlink_region *region)
4217 list_for_each_entry(snapshot, &region->snapshot_list, list) {
4234 struct devlink_region *region)
4247 if (region->port) {
4249 region->port->index);
4254 err = nla_put_string(msg, DEVLINK_ATTR_REGION_NAME, region->ops->name);
4259 region->size,
4264 err = devlink_nl_region_snapshots_id_put(msg, devlink, region);
4277 devlink_nl_region_notify_build(struct devlink_region *region,
4281 struct devlink *devlink = region->devlink;
4301 if (region->port) {
4303 region->port->index);
4309 region->ops->name);
4320 region->size, DEVLINK_ATTR_PAD);
4335 static void devlink_nl_region_notify(struct devlink_region *region,
4339 struct devlink *devlink = region->devlink;
4344 msg = devlink_nl_region_notify_build(region, snapshot, cmd, 0, 0);
4482 * This will add a new snapshot of a region. The snapshot
4483 * will be stored on the region struct and can be accessed
4485 * Multiple snapshots can be created on a region.
4490 * @region: devlink region of the snapshot
4495 __devlink_region_snapshot_create(struct devlink_region *region,
4498 struct devlink *devlink = region->devlink;
4504 /* check if region can hold one more snapshot */
4505 if (region->cur_snapshots == region->max_snapshots)
4508 if (devlink_region_snapshot_get_by_id(region, snapshot_id))
4520 snapshot->region = region;
4523 list_add_tail(&snapshot->list, &region->snapshot_list);
4525 region->cur_snapshots++;
4527 devlink_nl_region_notify(region, snapshot, DEVLINK_CMD_REGION_NEW);
4535 static void devlink_region_snapshot_del(struct devlink_region *region,
4538 struct devlink *devlink = region->devlink;
4542 devlink_nl_region_notify(region, snapshot, DEVLINK_CMD_REGION_DEL);
4543 region->cur_snapshots--;
4545 region->ops->destructor(snapshot->data);
4555 struct devlink_region *region;
4574 region = devlink_port_region_get_by_name(port, region_name);
4576 region = devlink_region_get_by_name(devlink, region_name);
4578 if (!region)
4587 region);
4602 struct devlink_region *region;
4605 list_for_each_entry(region, &port->region_list, list) {
4614 NLM_F_MULTI, region);
4630 struct devlink_region *region;
4635 list_for_each_entry(region, &devlink->region_list, list) {
4644 NLM_F_MULTI, region);
4691 struct devlink_region *region;
4712 region = devlink_port_region_get_by_name(port, region_name);
4714 region = devlink_region_get_by_name(devlink, region_name);
4716 if (!region)
4719 snapshot = devlink_region_snapshot_get_by_id(region, snapshot_id);
4723 devlink_region_snapshot_del(region, snapshot);
4734 struct devlink_region *region;
4742 NL_SET_ERR_MSG_MOD(info->extack, "No region name provided");
4757 region = devlink_port_region_get_by_name(port, region_name);
4759 region = devlink_region_get_by_name(devlink, region_name);
4761 if (!region) {
4762 NL_SET_ERR_MSG_MOD(info->extack, "The requested region does not exist");
4766 if (!region->ops->snapshot) {
4767 NL_SET_ERR_MSG_MOD(info->extack, "The requested region does not support taking an immediate snapshot");
4771 if (region->cur_snapshots == region->max_snapshots) {
4772 NL_SET_ERR_MSG_MOD(info->extack, "The region has reached the maximum number of stored snapshots");
4780 if (devlink_region_snapshot_get_by_id(region, snapshot_id)) {
4797 err = region->port_ops->snapshot(port, region->port_ops,
4800 err = region->ops->snapshot(devlink, region->ops,
4805 err = __devlink_region_snapshot_create(region, data, snapshot_id);
4812 snapshot = devlink_region_snapshot_get_by_id(region,
4817 msg = devlink_nl_region_notify_build(region, snapshot,
4833 region->ops->destructor(data);
4839 devlink_region_snapshot_del(region, snapshot);
4876 struct devlink_region *region,
4890 snapshot = devlink_region_snapshot_get_by_id(region, snapshot_id);
4924 struct devlink_region *region;
4962 region = devlink_port_region_get_by_name(port, region_name);
4964 region = devlink_region_get_by_name(devlink, region_name);
4966 if (!region) {
4981 if (end_offset > region->size)
4982 end_offset = region->size;
5002 if (region->port) {
5004 region->port->index);
5020 region, attrs,
9220 * devlink_region_create - create a new address region
9223 * @ops: region operations and name
9224 * @region_max_snapshots: Maximum supported number of snapshots for region
9225 * @region_size: size of region
9232 struct devlink_region *region;
9245 region = kzalloc(sizeof(*region), GFP_KERNEL);
9246 if (!region) {
9251 region->devlink = devlink;
9252 region->max_snapshots = region_max_snapshots;
9253 region->ops = ops;
9254 region->size = region_size;
9255 INIT_LIST_HEAD(&region->snapshot_list);
9256 list_add_tail(&region->list, &devlink->region_list);
9257 devlink_nl_region_notify(region, NULL, DEVLINK_CMD_REGION_NEW);
9260 return region;
9269 * devlink_port_region_create - create a new address region for a port
9272 * @ops: region operations and name
9273 * @region_max_snapshots: Maximum supported number of snapshots for region
9274 * @region_size: size of region
9282 struct devlink_region *region;
9295 region = kzalloc(sizeof(*region), GFP_KERNEL);
9296 if (!region) {
9301 region->devlink = devlink;
9302 region->port = port;
9303 region->max_snapshots = region_max_snapshots;
9304 region->port_ops = ops;
9305 region->size = region_size;
9306 INIT_LIST_HEAD(&region->snapshot_list);
9307 list_add_tail(&region->list, &port->region_list);
9308 devlink_nl_region_notify(region, NULL, DEVLINK_CMD_REGION_NEW);
9311 return region;
9320 * devlink_region_destroy - destroy address region
9322 * @region: devlink region to destroy
9324 void devlink_region_destroy(struct devlink_region *region)
9326 struct devlink *devlink = region->devlink;
9331 /* Free all snapshots of region */
9332 list_for_each_entry_safe(snapshot, ts, &region->snapshot_list, list)
9333 devlink_region_snapshot_del(region, snapshot);
9335 list_del(&region->list);
9337 devlink_nl_region_notify(region, NULL, DEVLINK_CMD_REGION_DEL);
9339 kfree(region);
9390 * This will add a new snapshot of a region. The snapshot
9391 * will be stored on the region struct and can be accessed
9393 * Multiple snapshots can be created on a region.
9396 * @region: devlink region of the snapshot
9400 int devlink_region_snapshot_create(struct devlink_region *region,
9403 struct devlink *devlink = region->devlink;
9407 err = __devlink_region_snapshot_create(region, data, snapshot_id);