[PATCH libvirt v2 2/5] conf: fix zPCI address auto-generation on s390
Bjoern Walk
bwalk at linux.ibm.com
Fri Jun 26 14:08:02 UTC 2020
Andrea Bolognani <abologna at redhat.com> [2020-06-25, 07:43PM +0200]:
> From 82197ea6d794144e51b72f97df2315a65134b385 Mon Sep 17 00:00:00 2001
> From: Andrea Bolognani <abologna at redhat.com>
> Date: Thu, 25 Jun 2020 18:37:27 +0200
> Subject: [libvirt PATCH 1/2] conf: Move id->{value,isSet} handling further
> down the stack
>
> Signed-off-by: Andrea Bolognani <abologna at redhat.com>
> ---
> src/conf/domain_addr.c | 61 ++++++++++++++++++++++++------------------
> 1 file changed, 35 insertions(+), 26 deletions(-)
>
> diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c
> index 90ed31ef4e..493b155129 100644
> --- a/src/conf/domain_addr.c
> +++ b/src/conf/domain_addr.c
> @@ -33,20 +33,27 @@ VIR_LOG_INIT("conf.domain_addr");
>
> static int
> virDomainZPCIAddressReserveId(virHashTablePtr set,
> - unsigned int id,
> + virZPCIDeviceAddressID *id,
> const char *name)
> {
> - if (virHashLookup(set, &id)) {
> + if (!id->isSet) {
> + virReportError(VIR_ERR_INTERNAL_ERROR,
> + _("No zPCI %s to reserve"),
> + name);
Maybe it's better to fail silently here (or not fail at all and just
make it no-op)? This is more of an assert that concerns the developer
and not something the user can understand.
> + return -1;
> + }
> +
> + if (virHashLookup(set, &id->value)) {
> virReportError(VIR_ERR_INTERNAL_ERROR,
> _("zPCI %s %o is already reserved"),
> - name, id);
> + name, id->value);
> return -1;
> }
>
> - if (virHashAddEntry(set, &id, (void*)1) < 0) {
> + if (virHashAddEntry(set, &id->value, (void*)1) < 0) {
> virReportError(VIR_ERR_INTERNAL_ERROR,
> _("Failed to reserve %s %o"),
> - name, id);
> + name, id->value);
> return -1;
> }
>
> [...]
>
> static void
> virDomainZPCIAddressReleaseId(virHashTablePtr set,
> - unsigned int *id,
> + virZPCIDeviceAddressID *id,
> const char *name)
> {
> - if (virHashRemoveEntry(set, id) < 0) {
> + if (!id->isSet)
> + return;
> +
> + if (virHashRemoveEntry(set, &id->value) < 0) {
> virReportError(VIR_ERR_INTERNAL_ERROR,
> _("Release %s %o failed"),
> - name, *id);
> + name, id->value);
> }
>
> - *id = 0;
> + id->value = 0;
> + id->isSet = false;
Not sure if I don't want to leave this to the caller. 99% of time it
shouldn't matter because the released device is deleted from the domain
anyways, but this tight coupling would prevent hypothetical re-use of
the id.
Reviewed-by: Bjoern Walk <bwalk at linux.ibm.com>
--
IBM Systems
Linux on Z & Virtualization Development
--------------------------------------------------
IBM Deutschland Research & Development GmbH
Schönaicher Str. 220, 71032 Böblingen
Phone: +49 7031 16 1819
--------------------------------------------------
Vorsitzende des Aufsichtsrats: Gregor Pillen
Geschäftsführung: Dirk Wittkopp
Sitz der Gesellschaft: Böblingen
Registergericht: Amtsgericht Stuttgart, HRB 243294
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 902 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20200626/ed745616/attachment-0001.sig>
More information about the libvir-list
mailing list