qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Mahmoud Mandour <ma.mandourr@gmail.com>
To: qemu-devel@nongnu.org
Cc: Eric Auger <eric.auger@redhat.com>,
	Mahmoud Mandour <ma.mandourr@gmail.com>,
	"Michael S. Tsirkin" <mst@redhat.com>
Subject: [PATCH 7/9] virtio-iommu: Replaced qemu_mutex_lock calls with QEMU_LOCK_GUARD
Date: Thu, 11 Mar 2021 05:15:36 +0200	[thread overview]
Message-ID: <20210311031538.5325-8-ma.mandourr@gmail.com> (raw)
In-Reply-To: <20210311031538.5325-1-ma.mandourr@gmail.com>

In various places, qemu_mutex_lock calls and their respective
calls to qemu_mutex_unlock are replaced with QEMU_LOCK_GUARD macros.
This simplifies the code by removing the calls to
qemu_mutex_unlock and eliminates goto paths.

Signed-off-by: Mahmoud Mandour <ma.mandourr@gmail.com>
---
 hw/virtio/virtio-iommu.c | 78 +++++++++++++++++++---------------------
 1 file changed, 36 insertions(+), 42 deletions(-)

diff --git a/hw/virtio/virtio-iommu.c b/hw/virtio/virtio-iommu.c
index c2883a2f6c..46a4cc0801 100644
--- a/hw/virtio/virtio-iommu.c
+++ b/hw/virtio/virtio-iommu.c
@@ -604,37 +604,36 @@ static void virtio_iommu_handle_command(VirtIODevice *vdev, VirtQueue *vq)
             tail.status = VIRTIO_IOMMU_S_DEVERR;
             goto out;
         }
-        qemu_mutex_lock(&s->mutex);
-        switch (head.type) {
-        case VIRTIO_IOMMU_T_ATTACH:
-            tail.status = virtio_iommu_handle_attach(s, iov, iov_cnt);
-            break;
-        case VIRTIO_IOMMU_T_DETACH:
-            tail.status = virtio_iommu_handle_detach(s, iov, iov_cnt);
-            break;
-        case VIRTIO_IOMMU_T_MAP:
-            tail.status = virtio_iommu_handle_map(s, iov, iov_cnt);
-            break;
-        case VIRTIO_IOMMU_T_UNMAP:
-            tail.status = virtio_iommu_handle_unmap(s, iov, iov_cnt);
-            break;
-        case VIRTIO_IOMMU_T_PROBE:
-        {
-            struct virtio_iommu_req_tail *ptail;
+        WITH_QEMU_LOCK_GUARD(&s->mutex) {
+            switch (head.type) {
+            case VIRTIO_IOMMU_T_ATTACH:
+                tail.status = virtio_iommu_handle_attach(s, iov, iov_cnt);
+                break;
+            case VIRTIO_IOMMU_T_DETACH:
+                tail.status = virtio_iommu_handle_detach(s, iov, iov_cnt);
+                break;
+            case VIRTIO_IOMMU_T_MAP:
+                tail.status = virtio_iommu_handle_map(s, iov, iov_cnt);
+                break;
+            case VIRTIO_IOMMU_T_UNMAP:
+                tail.status = virtio_iommu_handle_unmap(s, iov, iov_cnt);
+                break;
+            case VIRTIO_IOMMU_T_PROBE:
+            {
+                struct virtio_iommu_req_tail *ptail;
 
-            output_size = s->config.probe_size + sizeof(tail);
-            buf = g_malloc0(output_size);
+                output_size = s->config.probe_size + sizeof(tail);
+                buf = g_malloc0(output_size);
 
-            ptail = (struct virtio_iommu_req_tail *)
-                        (buf + s->config.probe_size);
-            ptail->status = virtio_iommu_handle_probe(s, iov, iov_cnt, buf);
-            break;
-        }
-        default:
-            tail.status = VIRTIO_IOMMU_S_UNSUPP;
+                ptail = (struct virtio_iommu_req_tail *)
+                            (buf + s->config.probe_size);
+                ptail->status = virtio_iommu_handle_probe(s, iov, iov_cnt, buf);
+                break;
+            }
+            default:
+                tail.status = VIRTIO_IOMMU_S_UNSUPP;
+            }
         }
-        qemu_mutex_unlock(&s->mutex);
-
 out:
         sz = iov_from_buf(elem->in_sg, elem->in_num, 0,
                           buf ? buf : &tail, output_size);
@@ -721,7 +720,7 @@ static IOMMUTLBEntry virtio_iommu_translate(IOMMUMemoryRegion *mr, hwaddr addr,
     sid = virtio_iommu_get_bdf(sdev);
 
     trace_virtio_iommu_translate(mr->parent_obj.name, sid, addr, flag);
-    qemu_mutex_lock(&s->mutex);
+    QEMU_LOCK_GUARD(&s->mutex);
 
     ep = g_tree_lookup(s->endpoints, GUINT_TO_POINTER(sid));
     if (!ep) {
@@ -733,7 +732,7 @@ static IOMMUTLBEntry virtio_iommu_translate(IOMMUMemoryRegion *mr, hwaddr addr,
         } else {
             entry.perm = flag;
         }
-        goto unlock;
+        return entry;
     }
 
     for (i = 0; i < s->nb_reserved_regions; i++) {
@@ -751,7 +750,7 @@ static IOMMUTLBEntry virtio_iommu_translate(IOMMUMemoryRegion *mr, hwaddr addr,
                                           sid, addr);
                 break;
             }
-            goto unlock;
+            return entry;
         }
     }
 
@@ -766,7 +765,7 @@ static IOMMUTLBEntry virtio_iommu_translate(IOMMUMemoryRegion *mr, hwaddr addr,
         } else {
             entry.perm = flag;
         }
-        goto unlock;
+        return entry;
     }
 
     found = g_tree_lookup_extended(ep->domain->mappings, (gpointer)(&interval),
@@ -778,7 +777,7 @@ static IOMMUTLBEntry virtio_iommu_translate(IOMMUMemoryRegion *mr, hwaddr addr,
         virtio_iommu_report_fault(s, VIRTIO_IOMMU_FAULT_R_MAPPING,
                                   VIRTIO_IOMMU_FAULT_F_ADDRESS,
                                   sid, addr);
-        goto unlock;
+        return entry;
     }
 
     read_fault = (flag & IOMMU_RO) &&
@@ -795,14 +794,12 @@ static IOMMUTLBEntry virtio_iommu_translate(IOMMUMemoryRegion *mr, hwaddr addr,
         virtio_iommu_report_fault(s, VIRTIO_IOMMU_FAULT_R_MAPPING,
                                   flags | VIRTIO_IOMMU_FAULT_F_ADDRESS,
                                   sid, addr);
-        goto unlock;
+        return entry;
     }
     entry.translated_addr = addr - mapping_key->low + mapping_value->phys_addr;
     entry.perm = flag;
     trace_virtio_iommu_translate_out(addr, entry.translated_addr, sid);
 
-unlock:
-    qemu_mutex_unlock(&s->mutex);
     return entry;
 }
 
@@ -871,21 +868,18 @@ static void virtio_iommu_replay(IOMMUMemoryRegion *mr, IOMMUNotifier *n)
 
     sid = virtio_iommu_get_bdf(sdev);
 
-    qemu_mutex_lock(&s->mutex);
+    QEMU_LOCK_GUARD(&s->mutex);
 
     if (!s->endpoints) {
-        goto unlock;
+        return;
     }
 
     ep = g_tree_lookup(s->endpoints, GUINT_TO_POINTER(sid));
     if (!ep || !ep->domain) {
-        goto unlock;
+        return;
     }
 
     g_tree_foreach(ep->domain->mappings, virtio_iommu_remap, mr);
-
-unlock:
-    qemu_mutex_unlock(&s->mutex);
 }
 
 static int virtio_iommu_notify_flag_changed(IOMMUMemoryRegion *iommu_mr,
-- 
2.25.1



  parent reply	other threads:[~2021-03-11  9:33 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-11  3:15 [PATCH 0/9] Changing qemu_mutex_locks to lock guard macros Mahmoud Mandour
2021-03-11  3:15 ` [PATCH 1/9] tpm: Changed a qemu_mutex_lock to QEMU_LOCK_GUARD Mahmoud Mandour
2021-03-11 10:04   ` Marc-André Lureau
2021-03-23  2:58   ` Stefan Berger
2021-03-11  3:15 ` [PATCH 2/9] block: Replaced qemu_mutex_lock calls with QEMU_LOCK_GUARD Mahmoud Mandour
2021-03-12 10:23   ` Vladimir Sementsov-Ogievskiy
2021-03-13  5:51     ` Mahmoud Mandour
2021-03-15 14:08       ` Vladimir Sementsov-Ogievskiy
2021-03-16 13:29     ` Eric Blake
2021-03-11  3:15 ` [PATCH 3/9] char: Replaced a qemu_mutex_lock " Mahmoud Mandour
2021-03-11 10:05   ` Marc-André Lureau
2021-03-11  3:15 ` [PATCH 4/9] util: Replaced qemu_mutex_lock with QEMU_LOCK_GUARDs Mahmoud Mandour
2021-03-11  3:15 ` [PATCH 5/9] monitor: Replaced qemu_mutex_lock calls with QEMU_LOCK_GUARD Mahmoud Mandour
2021-03-11  9:50   ` Dr. David Alan Gilbert
2021-03-11  3:15 ` [PATCH 6/9] migration: " Mahmoud Mandour
2021-03-11  9:44   ` Dr. David Alan Gilbert
2021-03-15 18:01     ` Dr. David Alan Gilbert
2021-03-11  3:15 ` Mahmoud Mandour [this message]
2021-03-11  3:15 ` [PATCH 8/9] hw/9pfs/9p-synth: Replaced qemu_mutex_lock " Mahmoud Mandour
2021-03-11  7:43   ` Greg Kurz
2021-03-11 10:49   ` Christian Schoenebeck
2021-03-11 11:52     ` Greg Kurz
2021-03-11 11:59       ` Christian Schoenebeck
2021-03-13  5:43         ` Mahmoud Mandour
2021-03-13  7:51           ` Greg Kurz
2021-03-15 16:07             ` Christian Schoenebeck
2021-03-15 20:31               ` Greg Kurz
2021-03-11  3:15 ` [PATCH 9/9] hw/hyperv/vmbus: replaced " Mahmoud Mandour

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=20210311031538.5325-8-ma.mandourr@gmail.com \
    --to=ma.mandourr@gmail.com \
    --cc=eric.auger@redhat.com \
    --cc=mst@redhat.com \
    --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).