From: Peter Xu <peterx@redhat.com>
To: Eric Auger <eric.auger@redhat.com>
Cc: peter.maydell@linaro.org, mst@redhat.com, aik@ozlabs.ru,
qemu-devel@nongnu.org, alex.williamson@redhat.com,
qemu-arm@nongnu.org, pbonzini@redhat.com,
david@gibson.dropbear.id.au, eric.auger.pro@gmail.com
Subject: Re: [PATCH v3 1/2] vfio: Turn the container error into an Error handle
Date: Mon, 23 Sep 2019 15:51:45 +0800 [thread overview]
Message-ID: <20190923075145.GA12806@xz-x1> (raw)
In-Reply-To: <20190923065552.10602-2-eric.auger@redhat.com>
On Mon, Sep 23, 2019 at 08:55:51AM +0200, Eric Auger wrote:
> The container error integer field is currently used to store
> the first error potentially encountered during any
> vfio_listener_region_add() call. However this fails to propagate
> detailed error messages up to the vfio_connect_container caller.
> Instead of using an integer, let's use an Error handle.
>
> Messages are slightly reworded to accomodate the propagation.
Thanks for working on this. Mostly good at least to me, though I
still have a few nitpickings below.
> @@ -543,6 +545,9 @@ static void vfio_listener_region_add(MemoryListener *listener,
> hostwin->max_iova - hostwin->min_iova + 1,
> section->offset_within_address_space,
> int128_get64(section->size))) {
> + error_setg(&err, "Overlap with existing IOMMU range "
> + "[0x%"PRIx64",0x%"PRIx64"]", hostwin->min_iova,
> + hostwin->max_iova - hostwin->min_iova + 1);
> ret = -1;
This line seems to be useless now after we dropped the integer version
of container->error and start to use Error*.
> goto fail;
> }
> @@ -550,6 +555,7 @@ static void vfio_listener_region_add(MemoryListener *listener,
>
> ret = vfio_spapr_create_window(container, section, &pgsize);
> if (ret) {
> + error_setg_errno(&err, -ret, "Failed to create SPAPR window");
> goto fail;
> }
>
> @@ -559,7 +565,7 @@ static void vfio_listener_region_add(MemoryListener *listener,
> #ifdef CONFIG_KVM
> if (kvm_enabled()) {
> VFIOGroup *group;
> - IOMMUMemoryRegion *iommu_mr = IOMMU_MEMORY_REGION(section->mr);
> + IOMMUMemoryRegion *iommu_mr = IOMMU_MEMORY_REGION(mr);
> struct kvm_vfio_spapr_tce param;
> struct kvm_device_attr attr = {
> .group = KVM_DEV_VFIO_GROUP,
> @@ -594,18 +600,17 @@ static void vfio_listener_region_add(MemoryListener *listener,
> }
>
> if (!hostwin_found) {
> - error_report("vfio: IOMMU container %p can't map guest IOVA region"
> - " 0x%"HWADDR_PRIx"..0x%"HWADDR_PRIx,
> - container, iova, end);
> + error_setg(&err, "Container %p can't map guest IOVA region"
> + " 0x%"HWADDR_PRIx"..0x%"HWADDR_PRIx, container, iova, end);
> ret = -EFAULT;
Same here.
> goto fail;
> }
[...]
> @@ -688,10 +694,14 @@ fail:
> */
> if (!container->initialized) {
> if (!container->error) {
> - container->error = ret;
> + error_propagate_prepend(&container->error, err,
> + "Region %s: ", memory_region_name(mr));
> + } else {
> + error_free(err);
> }
> } else {
> - hw_error("vfio: DMA mapping failed, unable to continue");
> + error_reportf_err(err,
> + "vfio: DMA mapping failed, unable to continue: ");
Probably need to keep hw_error() because it asserts inside. Maybe an
error_report_err() before hw_error()?
> }
> }
>
> @@ -1251,6 +1261,7 @@ static int vfio_connect_container(VFIOGroup *group, AddressSpace *as,
> container = g_malloc0(sizeof(*container));
> container->space = space;
> container->fd = fd;
> + container->error = NULL;
> QLIST_INIT(&container->giommu_list);
> QLIST_INIT(&container->hostwin_list);
>
> @@ -1308,9 +1319,9 @@ static int vfio_connect_container(VFIOGroup *group, AddressSpace *as,
> &address_space_memory);
> if (container->error) {
> memory_listener_unregister(&container->prereg_listener);
> - ret = container->error;
> - error_setg(errp,
> - "RAM memory listener initialization failed for container");
> + ret = -1;
> + error_propagate_prepend(errp, container->error,
> + "RAM memory listener initialization failed: ");
(I saw that we've got plenty of prepended prefixes for an error
messages. For me I'll disgard quite a few of them because the errors
will directly be delivered to the top level user, but this might be
too personal as a comment)
Thanks,
> goto free_container_exit;
> }
> }
--
Peter Xu
next prev parent reply other threads:[~2019-09-23 7:53 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-09-23 6:55 [PATCH v3 0/2] Allow memory_region_register_iommu_notifier() to fail Eric Auger
2019-09-23 6:55 ` [PATCH v3 1/2] vfio: Turn the container error into an Error handle Eric Auger
2019-09-23 7:51 ` Peter Xu [this message]
2019-09-23 11:43 ` Auger Eric
2019-09-23 23:10 ` Alex Williamson
2019-09-23 23:49 ` Peter Xu
2019-09-23 23:05 ` Alex Williamson
2019-09-24 9:42 ` Auger Eric
2019-09-23 6:55 ` [PATCH v3 2/2] memory: allow memory_region_register_iommu_notifier() to fail Eric Auger
2019-09-23 7:59 ` Peter Xu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190923075145.GA12806@xz-x1 \
--to=peterx@redhat.com \
--cc=aik@ozlabs.ru \
--cc=alex.williamson@redhat.com \
--cc=david@gibson.dropbear.id.au \
--cc=eric.auger.pro@gmail.com \
--cc=eric.auger@redhat.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).