virtio_free_region_cache() is called within call_rcu(),
always with a non-NULL argument. Ensure new code keep it
that way by replacing the NULL check by an assertion.
Add a comment this function is called within call_rcu().
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
hw/virtio/virtio.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
index a5214bca612..3a1f6c520cb 100644
--- a/hw/virtio/virtio.c
+++ b/hw/virtio/virtio.c
@@ -133,12 +133,10 @@ struct VirtQueue
QLIST_ENTRY(VirtQueue) node;
};
+/* Called within call_rcu(). */
static void virtio_free_region_cache(VRingMemoryRegionCaches *caches)
{
- if (!caches) {
- return;
- }
-
+ assert(caches != NULL);
address_space_cache_destroy(&caches->desc);
address_space_cache_destroy(&caches->avail);
address_space_cache_destroy(&caches->used);
--
2.31.1
On Thu, Aug 26, 2021 at 07:26:57PM +0200, Philippe Mathieu-Daudé wrote:
>virtio_free_region_cache() is called within call_rcu(),
>always with a non-NULL argument. Ensure new code keep it
>that way by replacing the NULL check by an assertion.
>Add a comment this function is called within call_rcu().
>
>Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
>---
> hw/virtio/virtio.c | 6 ++----
> 1 file changed, 2 insertions(+), 4 deletions(-)
>
>diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
>index a5214bca612..3a1f6c520cb 100644
>--- a/hw/virtio/virtio.c
>+++ b/hw/virtio/virtio.c
>@@ -133,12 +133,10 @@ struct VirtQueue
> QLIST_ENTRY(VirtQueue) node;
> };
>
>+/* Called within call_rcu(). */
> static void virtio_free_region_cache(VRingMemoryRegionCaches *caches)
> {
>- if (!caches) {
>- return;
>- }
>-
>+ assert(caches != NULL);
> address_space_cache_destroy(&caches->desc);
> address_space_cache_destroy(&caches->avail);
> address_space_cache_destroy(&caches->used);
>--
>2.31.1
>
>
Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
On Thu, Aug 26, 2021 at 07:26:57PM +0200, Philippe Mathieu-Daudé wrote:
> virtio_free_region_cache() is called within call_rcu(),
> always with a non-NULL argument. Ensure new code keep it
> that way by replacing the NULL check by an assertion.
> Add a comment this function is called within call_rcu().
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> ---
> hw/virtio/virtio.c | 6 ++----
> 1 file changed, 2 insertions(+), 4 deletions(-)
>
> diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
> index a5214bca612..3a1f6c520cb 100644
> --- a/hw/virtio/virtio.c
> +++ b/hw/virtio/virtio.c
> @@ -133,12 +133,10 @@ struct VirtQueue
> QLIST_ENTRY(VirtQueue) node;
> };
>
> +/* Called within call_rcu(). */
> static void virtio_free_region_cache(VRingMemoryRegionCaches *caches)
> {
> - if (!caches) {
> - return;
> - }
> -
> + assert(caches != NULL);
> address_space_cache_destroy(&caches->desc);
> address_space_cache_destroy(&caches->avail);
> address_space_cache_destroy(&caches->used);
Looks like an artifact that was left in when the code was originally
introduced in commit c611c76417f52b335ecaab01c61743e3b705eb7c ("virtio:
add MemoryListener to cache ring translations"). Paolo could confirm
this.
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
© 2016 - 2026 Red Hat, Inc.