From nobody Thu Nov 13 20:38:27 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1582747948; cv=none; d=zohomail.com; s=zohoarc; b=nvR2xIhN0w7yx24IO/LwgHZQ19YqFPSWX8JPSNoFTf2/nE7wCeNpn7TrpiNMcBemRhIS+cVYllvLf/0xgF4PVVJSrnZAPVoQO7SGjcLk7ihDgSiIa40gBzKsTAnxX8UCoGf3si0ugjrWTpf3t9o/+6SoIhU6DqF6dnzOQ0uokOY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1582747948; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:To; bh=1Uswvo93AQ5s785e9k0vQrys2oFD6LB/Mb/LaJZK4Mc=; b=mGWeqIhWLwmSghs8fh1bCg15t8GrL8nDanb+piq1ymQUV9EU1srWjXDvi5hg08ERhV0UNv6QXqIwSidOOR0BgV+2+/FvOKqc05yFjKDm/31hwl+IEY8e2CbsPgamjWp+u5BsBp6LFKFuRaR4lvAwxE+1jssfkmn+SPYCd2PQR4I= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1582747948603903.6533151719335; Wed, 26 Feb 2020 12:12:28 -0800 (PST) Received: from localhost ([::1]:49388 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j732f-00071H-9i for importer@patchew.org; Wed, 26 Feb 2020 15:12:26 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:48454) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j7318-0005WY-Iv for qemu-devel@nongnu.org; Wed, 26 Feb 2020 15:10:51 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j7317-0007cO-Bf for qemu-devel@nongnu.org; Wed, 26 Feb 2020 15:10:50 -0500 Received: from us-smtp-2.mimecast.com ([207.211.31.81]:39501 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j7317-0007bi-7R for qemu-devel@nongnu.org; Wed, 26 Feb 2020 15:10:49 -0500 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-47-Ch3FMmtaP-2mzLnYL8m_iw-1; Wed, 26 Feb 2020 15:10:47 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 1E853DB20; Wed, 26 Feb 2020 20:10:46 +0000 (UTC) Received: from x1w.redhat.com (ovpn-205-195.brq.redhat.com [10.40.205.195]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 97EFF5C28D; Wed, 26 Feb 2020 20:10:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1582747848; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=1Uswvo93AQ5s785e9k0vQrys2oFD6LB/Mb/LaJZK4Mc=; b=FBeRouH8Niz05UGnVz+iTaP4PMQzFb0P5F7JwbykWRnVAwVD0qXcHKbeyhUgBKb34CFURE eiW+iGo6ZuL34cu1IU7t3YuGs8BCUSFTylCGwUbHC9d9zQrzPH7NseiO/1Z0nYVB+I6UdY FBFPIhjvybhZaLn9ktDF2lt6xEEngpc= X-MC-Unique: Ch3FMmtaP-2mzLnYL8m_iw-1 From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Subject: [PATCH v2] hw/i386/intel_iommu: Simplify vtd_find_as_from_bus_num() logic Date: Wed, 26 Feb 2020 21:10:30 +0100 Message-Id: <20200226201030.22583-1-philmd@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 207.211.31.81 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Liu Yi L , Yi Sun , Eduardo Habkost , "Michael S. Tsirkin" , qemu-trivial@nongnu.org, Peter Xu , Eric Auger , Paolo Bonzini , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" The vtd_find_as_from_bus_num() function was introduced (in commit dbaabb25f) in a code format that could return an incorrect pointer, which was later fixed by commit a2e1cd41ccf. We could have avoid this by writing the if() statement differently. Do it now, in case this function is re-used. The code is easier to review (harder to miss bugs). Signed-off-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Peter Xu --- Since v2: Re-worded commit description, patch sent without -w. This patch is easier to review with 'git-diff -w' (--ignore-all-space): @@ -987,14 +987,17 @@ static bool vtd_slpte_nonzero_rsvd(uint64_t slpte, ui= nt32_t level) static VTDBus *vtd_find_as_from_bus_num(IntelIOMMUState *s, uint8_t bus_nu= m) { VTDBus *vtd_bus =3D s->vtd_as_by_bus_num[bus_num]; - if (!vtd_bus) { + GHashTableIter iter; + + if (vtd_bus) { + return vtd_bus; + } + /* * Iterate over the registered buses to find the one which * currently hold this bus number, and update the bus_num * lookup table: */ - GHashTableIter iter; - g_hash_table_iter_init(&iter, s->vtd_as_by_busptr); while (g_hash_table_iter_next(&iter, NULL, (void **)&vtd_bus)) { if (pci_bus_num(vtd_bus->bus) =3D=3D bus_num) { @@ -1002,9 +1005,8 @@ static VTDBus *vtd_find_as_from_bus_num(IntelIOMMUSta= te *s, uint8_t bus_num) return vtd_bus; } } - vtd_bus =3D NULL; - } - return vtd_bus; + + return NULL; } --- hw/i386/intel_iommu.c | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c index 6258c58ac9..e720a8939c 100644 --- a/hw/i386/intel_iommu.c +++ b/hw/i386/intel_iommu.c @@ -987,24 +987,26 @@ static bool vtd_slpte_nonzero_rsvd(uint64_t slpte, ui= nt32_t level) static VTDBus *vtd_find_as_from_bus_num(IntelIOMMUState *s, uint8_t bus_nu= m) { VTDBus *vtd_bus =3D s->vtd_as_by_bus_num[bus_num]; - if (!vtd_bus) { - /* - * Iterate over the registered buses to find the one which - * currently hold this bus number, and update the bus_num - * lookup table: - */ - GHashTableIter iter; + GHashTableIter iter; =20 - g_hash_table_iter_init(&iter, s->vtd_as_by_busptr); - while (g_hash_table_iter_next(&iter, NULL, (void **)&vtd_bus)) { - if (pci_bus_num(vtd_bus->bus) =3D=3D bus_num) { - s->vtd_as_by_bus_num[bus_num] =3D vtd_bus; - return vtd_bus; - } - } - vtd_bus =3D NULL; + if (vtd_bus) { + return vtd_bus; } - return vtd_bus; + + /* + * Iterate over the registered buses to find the one which + * currently hold this bus number, and update the bus_num + * lookup table: + */ + g_hash_table_iter_init(&iter, s->vtd_as_by_busptr); + while (g_hash_table_iter_next(&iter, NULL, (void **)&vtd_bus)) { + if (pci_bus_num(vtd_bus->bus) =3D=3D bus_num) { + s->vtd_as_by_bus_num[bus_num] =3D vtd_bus; + return vtd_bus; + } + } + + return NULL; } =20 /* Given the @iova, get relevant @slptep. @slpte_level will be the last le= vel --=20 2.21.1