Lines Matching +full:instance +full:- +full:id

1 /* SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later */
2 // NOLINTNEXTLINE(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp)
3 #include <libpldm/instance-id.h>
46 return -EINVAL; in pldm_instance_db_init()
53 return -EINVAL; in pldm_instance_db_init()
58 return -EINVAL; in pldm_instance_db_init()
63 return -ENOMEM; in pldm_instance_db_init()
66 /* Initialise previous ID values so the next one is zero */ in pldm_instance_db_init()
68 l_ctx->state[i].prev = 31; in pldm_instance_db_init()
71 /* Lock database may be read-only, either by permissions or mountpoint in pldm_instance_db_init()
73 l_ctx->lock_db_fd = open(dbpath, O_RDONLY | O_CLOEXEC); in pldm_instance_db_init()
74 if (l_ctx->lock_db_fd < 0) { in pldm_instance_db_init()
76 return -errno; in pldm_instance_db_init()
87 "/usr/share/libpldm/instance-db/default"); in pldm_instance_db_init_default()
96 close(ctx->lock_db_fd); in pldm_instance_db_destroy()
126 return -EINVAL; in pldm_instance_id_alloc()
129 l_iid = ctx->state[tid].prev; in pldm_instance_id_alloc()
131 return -EPROTO; in pldm_instance_id_alloc()
134 while ((l_iid = iid_next(l_iid)) != ctx->state[tid].prev) { in pldm_instance_id_alloc()
139 /* Have we already allocated this instance ID? */ in pldm_instance_id_alloc()
140 if (ctx->state[tid].allocations & BIT(l_iid)) { in pldm_instance_id_alloc()
144 /* Derive the instance ID offset in the lock database */ in pldm_instance_id_alloc()
150 rc = fcntl(ctx->lock_db_fd, F_OFD_SETLK, &flop); in pldm_instance_id_alloc()
153 return -EAGAIN; in pldm_instance_id_alloc()
155 return -EPROTO; in pldm_instance_id_alloc()
172 rc = fcntl(ctx->lock_db_fd, F_OFD_GETLK, &flop); in pldm_instance_id_alloc()
175 rc = -EAGAIN; in pldm_instance_id_alloc()
178 rc = -EPROTO; in pldm_instance_id_alloc()
185 ctx->state[tid].prev = l_iid; in pldm_instance_id_alloc()
186 ctx->state[tid].allocations |= BIT(l_iid); in pldm_instance_id_alloc()
192 rc = -EPROTO; in pldm_instance_id_alloc()
198 if (fcntl(ctx->lock_db_fd, F_OFD_SETLK, &flop) < 0) { in pldm_instance_id_alloc()
200 return -EAGAIN; in pldm_instance_id_alloc()
202 return -EPROTO; in pldm_instance_id_alloc()
212 return -EAGAIN; in pldm_instance_id_alloc()
224 return -EINVAL; in pldm_instance_id_free()
227 /* Trying to free an instance ID that is not currently allocated */ in pldm_instance_id_free()
228 if (!(ctx->state[tid].allocations & BIT(iid))) { in pldm_instance_id_free()
229 return -EINVAL; in pldm_instance_id_free()
234 rc = fcntl(ctx->lock_db_fd, F_OFD_SETLK, &flop); in pldm_instance_id_free()
237 return -EAGAIN; in pldm_instance_id_free()
239 return -EPROTO; in pldm_instance_id_free()
242 /* Mark the instance ID as no-longer allocated */ in pldm_instance_id_free()
243 ctx->state[tid].allocations &= ~BIT(iid); in pldm_instance_id_free()