From nobody Sun May 19 10:14:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=bu.edu ARC-Seal: i=1; a=rsa-sha256; t=1678695963; cv=none; d=zohomail.com; s=zohoarc; b=lupJXLVraoDgwhTSBRGwPK29Viswv5SZsKc0daOgNqDijqykuu21lCqGmMtRMAz7siuBsbg2MbstLa5HgCTeG/JjPFFsZzgb9DmnmtcQhonScXQTlBABsFJqY8FI8v7Mf4c0C30kRqmMQgU7AO9+7kA6IEuBq1heqxO4Wxoys48= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1678695963; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=CSBiTaU29mfOM7fcf75/cx2KDjNGXwwMUJE2RxqvuY0=; b=jBpugdoYzvu9hkKCbxR2ASm14WGg0V6CZPOVohnCTEuvZXlMlqDlXW3BJQzrq8eEzoC4J2Ag/gv7EGcinQXL3a7bZ1b/j4LRkkgTTmjI+quamj94iF9VnHzFN4mS5hkYVad0Y55kAjhnta2xs7yVTLJm7FZ3SQRP1IMMh4AKvss= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1678695963171499.0370747422925; Mon, 13 Mar 2023 01:26:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pbdUG-0000uB-WF; Mon, 13 Mar 2023 04:24:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pbdUF-0000tr-Ab for qemu-devel@nongnu.org; Mon, 13 Mar 2023 04:24:55 -0400 Received: from esa5.hc2706-39.iphmx.com ([216.71.137.63]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pbdUD-0000Fi-Dz for qemu-devel@nongnu.org; Mon, 13 Mar 2023 04:24:55 -0400 Received: from mail-qk1-f200.google.com ([209.85.222.200]) by ob1.hc2706-39.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 13 Mar 2023 04:24:44 -0400 Received: by mail-qk1-f200.google.com with SMTP id o9-20020a05620a228900b0074585d47b77so901272qkh.0 for ; Mon, 13 Mar 2023 01:24:44 -0700 (PDT) Received: from mozz.bu.edu (mozz.bu.edu. [128.197.127.33]) by smtp.gmail.com with ESMTPSA id 131-20020a370789000000b00742a252ba06sm4910772qkh.135.2023.03.13.01.24.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Mar 2023 01:24:41 -0700 (PDT) X-IronPort-RemoteIP: 209.85.222.200 X-IronPort-MID: 276363307 X-IronPort-Reputation: None X-IronPort-Listener: OutgoingMail X-IronPort-SenderGroup: RELAY_GSUITE X-IronPort-MailFlowPolicy: $RELAYED IronPort-Data: A9a23:BOQOBKOGkK1Gp0vvrR0blcFynXyQoLVcMsEvi/4bfWQNrUpx1jRWn zQcUGnSPP2PYjDyfYpyPtvkoEtT6J/Xz9djQAZtpSBmQkwRlceUXt7xwmUcns+xwm8vaGo9s q3yv/GZdJhcokf0/0vraf656yEnj8lkf5KkYMbcICd9WAR4fykojBNnioYRj5VhxNO0GGthg /uryyHkEALjim4c3l48sfrZ80s05a+q4lv0g3RlDRx1lA6G/5UqJM9HTU2BByOQapVZGOe8W 9HCwNmRlo8O105wYj8Nuu+TnnwiG9Y+DyDX4pZlc/HKbix5m8AH+v1T2MzwyKtgo27hc9hZk L2hvHErIOsjFvSkdO81CnG0H8ziVEHvFXCuzXWX6KSuI0P6n3TEweppUHFsEYgkouNzKEFj3 vImDQlXYUXW7w626OrTpuhEg80iKIzyP9patCs4lXfWCvEpRZ2FSKLPjTNa9G1o14YeQLCEP ZBfM2I3BPjDS0Qn1lM/AZYumuuyrnPiNTBUtTp5oIJtvDaIklcqiOeF3Nz9QdrNXtwPm2ui4 X+B0mH7GiMWBOSN8G/Qmp6rrqqV9c/hY6oLGbils/JnnlCX7moUDhIQSB28u/bRt6Klc9dWK khR4yl36KZorBTtQd76UBm15nWDu3bwRuZtLgHz0ynVooK83upTLjFsouJpADD+iPILeA== IronPort-HdrOrdr: A9a23:ljHUEavc7r4B2uyYSUBQHDQ+7skDoNV00zEX/kB9WHVpmwKj5q STdZMgpGPJYVMqMk3I9urwXpVoLUmsl6KdpLNhRotKPzOWxVdAUrsSlLcKqgeIc0aOldK1l5 0QCZSWYOeRMbEQt7ec3ODXKadE/PC3tIqFv6Px9UtMcC1dQ51czm5Ce3mm+45NKDWux6BVKH NR3KR6TkKbCAwqhw2AaRg4Y9Q= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bu.edu; s=s1gsbu; t=1678695881; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=CSBiTaU29mfOM7fcf75/cx2KDjNGXwwMUJE2RxqvuY0=; b=WLmiPSIuSg16pch3q/N6mo3XzSMPKKK7yEfaPAIFmCknNE3FtnFhiIalryny6YuGU6 /glJsTK1xnuzZWzx7kHjjSeARtBMMW8GLes74Eph41230tIVSbvoD+esEAMqKc4AZ04u qkNIskld4DtLMeliJoPzzU0WuK95/FuaA+vOWhLKDOvYnjf6SOmksCWMcALXQRk3/m5r WYMmEDIajcGKjsl6yZn0NZdLJnXfZDerarh+J9gioe+m8RHd/x0b9dYq0Iot6BE1DFiQ fdu9vVsnfSMg8APlkVLfCxh8PVk6kQ4NZSSzn1dt+jXuipoB1v8UgGAw5XZWvWTfF59P hfCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678695881; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=CSBiTaU29mfOM7fcf75/cx2KDjNGXwwMUJE2RxqvuY0=; b=F+hLfYGLsFpQW08rizu+OxhynjfmfNeP7fZtVlbMkclzT4Z3zknpT2w30HdHOVXIso NFO0URzEjq9jpFDYVSsx4jRYGSoc+cDBgjEMs+GC6Eik7GqdExTdngXRr+hUkFjvSiaJ Cd63fVBqPVT8lXe9fEnzgJ4JN1Yy6WX6O07lXtXy65kTcq0aHO/KOl3ShqrzGmgwNp+i mHIRpC56Eb53Kl+lT0x0FSxbzLp+pD1SoZC9STBVK/bNC+1ZH+SWqwSB0feQc4Ijc9F3 s8nQRoBVmSlS4nMXRMuJ5KNiFAWpBPWmDDax2nbETLa/8i8Kb29EuxzJOanq3i8cGjbS j57g== X-Gm-Message-State: AO0yUKVuRct+4rNrW1G8Uqiifss4kiFhd35xI3hNskf1hD+jrucAXjfg ciFbSe4TgqZ/L6AlX359uyapDph1x3wbfZt78N0n3z5/0sYQRem+izFjw3XiVpQDbS566JDrTyr uB3WuswGsEUlt5AsCd6tEodjZ6BeZpwUo7yilcEKfVdA= X-Received: by 2002:a05:6214:48e:b0:56e:a4c5:9d9d with SMTP id pt14-20020a056214048e00b0056ea4c59d9dmr12672888qvb.22.1678695881630; Mon, 13 Mar 2023 01:24:41 -0700 (PDT) X-Google-Smtp-Source: AK7set8M7KuOsOtPqzU0mJFUTf/ug2PuTsJGn+hLfQJ8FmCKXETioyaiyuJRX9iVWGdXpaHtMf3UcQ== X-Received: by 2002:a05:6214:48e:b0:56e:a4c5:9d9d with SMTP id pt14-20020a056214048e00b0056ea4c59d9dmr12672863qvb.22.1678695881340; Mon, 13 Mar 2023 01:24:41 -0700 (PDT) From: Alexander Bulekov To: qemu-devel@nongnu.org Cc: Alexander Bulekov , Stefan Hajnoczi , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Mauro Matteo Cascella , Peter Xu , Jason Wang , David Hildenbrand , Gerd Hoffmann , Thomas Huth , Laurent Vivier , Bandan Das , "Edgar E . Iglesias" , Darren Kenny , Bin Meng , Paolo Bonzini , "Michael S . Tsirkin" , Marcel Apfelbaum , =?UTF-8?q?Daniel=20P=20=2E=20Berrang=C3=A9?= , Eduardo Habkost , Jon Maloy , Siqi Chen Subject: [PATCH v7 1/6] memory: prevent dma-reentracy issues Date: Mon, 13 Mar 2023 04:24:12 -0400 Message-Id: <20230313082417.827484-2-alxndr@bu.edu> X-Mailer: git-send-email 2.39.0 In-Reply-To: <20230313082417.827484-1-alxndr@bu.edu> References: <20230313082417.827484-1-alxndr@bu.edu> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CES-GSUITE_AUTH: bf3aNvsZpxl8 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; Received-SPF: pass client-ip=216.71.137.63; envelope-from=alxndr@bu.edu; helo=esa5.hc2706-39.iphmx.com X-Spam_score_int: 0 X-Spam_score: -0.1 X-Spam_bar: / X-Spam_report: (-0.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HK_RANDOM_ENVFROM=0.999, HK_RANDOM_FROM=1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @bu.edu) X-ZM-MESSAGEID: 1678695966299100006 Content-Type: text/plain; charset="utf-8" Add a flag to the DeviceState, when a device is engaged in PIO/MMIO/DMA. This flag is set/checked prior to calling a device's MemoryRegion handlers, and set when device code initiates DMA. The purpose of this flag is to prevent two types of DMA-based reentrancy issues: 1.) mmio -> dma -> mmio case 2.) bh -> dma write -> mmio case These issues have led to problems such as stack-exhaustion and use-after-frees. Summary of the problem from Peter Maydell: https://lore.kernel.org/qemu-devel/CAFEAcA_23vc7hE3iaM-JVA6W38LK4hJoWae5Kck= nhPRD5fPBZA@mail.gmail.com Resolves: https://gitlab.com/qemu-project/qemu/-/issues/62 Resolves: https://gitlab.com/qemu-project/qemu/-/issues/540 Resolves: https://gitlab.com/qemu-project/qemu/-/issues/541 Resolves: https://gitlab.com/qemu-project/qemu/-/issues/556 Resolves: https://gitlab.com/qemu-project/qemu/-/issues/557 Resolves: https://gitlab.com/qemu-project/qemu/-/issues/827 Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1282 Reviewed-by: Darren Kenny Reviewed-by: Stefan Hajnoczi Signed-off-by: Alexander Bulekov Acked-by: Peter Xu --- include/hw/qdev-core.h | 7 +++++++ softmmu/memory.c | 17 +++++++++++++++++ softmmu/trace-events | 1 + 3 files changed, 25 insertions(+) diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h index bd50ad5ee1..7623703943 100644 --- a/include/hw/qdev-core.h +++ b/include/hw/qdev-core.h @@ -162,6 +162,10 @@ struct NamedClockList { QLIST_ENTRY(NamedClockList) node; }; =20 +typedef struct { + bool engaged_in_io; +} MemReentrancyGuard; + /** * DeviceState: * @realized: Indicates whether the device has been fully constructed. @@ -194,6 +198,9 @@ struct DeviceState { int alias_required_for_version; ResettableState reset; GSList *unplug_blockers; + + /* Is the device currently in mmio/pio/dma? Used to prevent re-entranc= y */ + MemReentrancyGuard mem_reentrancy_guard; }; =20 struct DeviceListener { diff --git a/softmmu/memory.c b/softmmu/memory.c index 4699ba55ec..57bf18a257 100644 --- a/softmmu/memory.c +++ b/softmmu/memory.c @@ -533,6 +533,7 @@ static MemTxResult access_with_adjusted_size(hwaddr add= r, uint64_t access_mask; unsigned access_size; unsigned i; + DeviceState *dev =3D NULL; MemTxResult r =3D MEMTX_OK; =20 if (!access_size_min) { @@ -542,6 +543,19 @@ static MemTxResult access_with_adjusted_size(hwaddr ad= dr, access_size_max =3D 4; } =20 + /* Do not allow more than one simultanous access to a device's IO Regi= ons */ + if (mr->owner && + !mr->ram_device && !mr->ram && !mr->rom_device && !mr->readonly) { + dev =3D (DeviceState *) object_dynamic_cast(mr->owner, TYPE_DEVICE= ); + if (dev) { + if (dev->mem_reentrancy_guard.engaged_in_io) { + trace_memory_region_reentrant_io(get_cpu_index(), mr, addr= , size); + return MEMTX_ERROR; + } + dev->mem_reentrancy_guard.engaged_in_io =3D true; + } + } + /* FIXME: support unaligned access? */ access_size =3D MAX(MIN(size, access_size_max), access_size_min); access_mask =3D MAKE_64BIT_MASK(0, access_size * 8); @@ -556,6 +570,9 @@ static MemTxResult access_with_adjusted_size(hwaddr add= r, access_mask, attrs); } } + if (dev) { + dev->mem_reentrancy_guard.engaged_in_io =3D false; + } return r; } =20 diff --git a/softmmu/trace-events b/softmmu/trace-events index 22606dc27b..62d04ea9a7 100644 --- a/softmmu/trace-events +++ b/softmmu/trace-events @@ -13,6 +13,7 @@ memory_region_ops_read(int cpu_index, void *mr, uint64_t = addr, uint64_t value, u memory_region_ops_write(int cpu_index, void *mr, uint64_t addr, uint64_t v= alue, unsigned size, const char *name) "cpu %d mr %p addr 0x%"PRIx64" value= 0x%"PRIx64" size %u name '%s'" memory_region_subpage_read(int cpu_index, void *mr, uint64_t offset, uint6= 4_t value, unsigned size) "cpu %d mr %p offset 0x%"PRIx64" value 0x%"PRIx64= " size %u" memory_region_subpage_write(int cpu_index, void *mr, uint64_t offset, uint= 64_t value, unsigned size) "cpu %d mr %p offset 0x%"PRIx64" value 0x%"PRIx6= 4" size %u" +memory_region_reentrant_io(int cpu_index, void *mr, uint64_t offset, unsig= ned size) "cpu %d mr %p offset 0x%"PRIx64" size %u" memory_region_ram_device_read(int cpu_index, void *mr, uint64_t addr, uint= 64_t value, unsigned size) "cpu %d mr %p addr 0x%"PRIx64" value 0x%"PRIx64"= size %u" memory_region_ram_device_write(int cpu_index, void *mr, uint64_t addr, uin= t64_t value, unsigned size) "cpu %d mr %p addr 0x%"PRIx64" value 0x%"PRIx64= " size %u" memory_region_sync_dirty(const char *mr, const char *listener, int global)= "mr '%s' listener '%s' synced (global=3D%d)" --=20 2.39.0 From nobody Sun May 19 10:14:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=bu.edu ARC-Seal: i=1; a=rsa-sha256; t=1678696039; cv=none; d=zohomail.com; s=zohoarc; b=geCLGx82Ah1Yg1hnHdrrSEei4wBA/qlv90vEFGfoNxKQWXiOaOCdLITYhS5NExUNZoiXj6eKBwqBxMqyvH0gW5La7e6yRcoWXeJTUexJHXNZBLrdmCMOXtbX38eMymNniynx+sEmsxp9RUqPQEilV508mTTH9a6kvO+sYs9Kd2k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1678696039; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=O5FgUZnYp99aO58Xxxn+b8iUcBxTfOQHbXapV5BLa8M=; b=iecD5HSmCoo7PtILh+TsqtbLkE2vYYvwao6PNmDbaJ/VwxOuPazo6lQfV6U95RWz6bCBzRL0il4npCuVSBn0oEJuMwPlbLrk/FqbOXxdjw264pEIRkHTm4YrYPeIUqPqKYNdm1/W1E+kbD0yzNxkgINwDc/DWeJc9/Xn+784viI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1678696039422923.7453687266149; Mon, 13 Mar 2023 01:27:19 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pbdUM-0000wV-Nw; Mon, 13 Mar 2023 04:25:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pbdUL-0000wI-Cz for qemu-devel@nongnu.org; Mon, 13 Mar 2023 04:25:01 -0400 Received: from esa16.hc2706-39.iphmx.com ([216.71.140.205]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pbdUJ-0000GE-94 for qemu-devel@nongnu.org; Mon, 13 Mar 2023 04:25:01 -0400 Received: from mail-qv1-f69.google.com ([209.85.219.69]) by ob1.hc2706-39.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 13 Mar 2023 04:24:55 -0400 Received: by mail-qv1-f69.google.com with SMTP id s18-20020a0cf792000000b00572c04240f1so6629566qvn.8 for ; Mon, 13 Mar 2023 01:24:55 -0700 (PDT) Received: from mozz.bu.edu (mozz.bu.edu. [128.197.127.33]) by smtp.gmail.com with ESMTPSA id i13-20020ac8488d000000b003b8484fdfccsm5108739qtq.42.2023.03.13.01.24.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Mar 2023 01:24:53 -0700 (PDT) X-IronPort-RemoteIP: 209.85.219.69 X-IronPort-MID: 262677461 X-IronPort-Reputation: None X-IronPort-Listener: OutgoingMail X-IronPort-SenderGroup: RELAY_GSUITE X-IronPort-MailFlowPolicy: $RELAYED IronPort-Data: A9a23:OQzsX6km2pASmfQkxlfUgnHo5gw8JERdPkR7XQ2eYbSJt1+Wr1Gzt xJOUG7UbqvcYjfxc993PIWy9EwA7MfVydQ1SwFqrS42Ei4T+ZvOCOrCEkqhZCn6wu8v7a5EA 2fyTvGacajYm1eF/k/F3oDJ9CU6jufQAOKnUoYoAwgpLSd8UiAtlBl/rOAwh49skLCRDhiE/ Nj/uKUzAnf8s9JPGj9SuvLrRC9H5qyo42tD5wdmP5ingXeF/5UrJMNHTU2OByagKmVkNrbSb /rOyri/4lTY838FYj9yuu+mGqGiaue60Tmm0xK6aYD76vRxjnVaPpIACRYpQRw/ZwNlPjxG4 I4lWZSYEW/FN0BX8QgXe0Aw/ypWZMWq9FJbSJQWXAP6I0DuKhPRL/tS4E4eZ6cG8eFcJF913 uUKBSssfgnElsXv6efuIgVsrpxLwMjDOYoevjR502icA6h3B5/ERKrO6JlT2zJYasJmR66PI ZpEL2A2PVKeMnWjOX9OYH46tO6sln/zaRVStRSYqbdfD237llIrjueybISMEjCMbdlfrEGKn G7Fw2WnHwtKFtm1mAijsUv504cjmgu+Aur+DoaQ7/NvnRify3IeDDUQUl20p+T/jVSxM++zM GQR8ysq6LEsrQmlEIi7UBq/r3qJ+BUbXrK8DtEH1e1E8YKMiy7xO4TOZmcphAAO3CPueQEX6 w== IronPort-HdrOrdr: A9a23:02mQWqOi9HOJTMBcThujsMiBIKoaSvp037Dk7TEUdfUzSL3jqy nKpp4mPHDP+VAssR0b6LK90cq7MAjhHOBOkPAs1N6ZNWGMyQiVxelZjbcKqAeQfBEWmNQtsJ tIQuxVJOe1I2JHrfvX1iGFLvdI+qj7zElqv4vjJrVWID2Cp5sP0+4AMHfiLqS+fmYmOaYE DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bu.edu; s=s1gsbu; t=1678695894; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=O5FgUZnYp99aO58Xxxn+b8iUcBxTfOQHbXapV5BLa8M=; b=QPuTZAAY56IsB64q5hx4yUa2zIEdQfZqQWTKHg9HEG7GGnuaGr3nXsW89C3NF34UUJ spgExhAiqyL7Cu0qIdODRAL+J9QMruGd/ZQiSlFum1kWqVVrmLifxL3KaYvc967OFdqm Qq1W6ytWEbj22petitDsFxvSyCnQMVSlBvJy8xAKgcnep6vc+fr6+q+wKuGhDC3TWKLG D5VKF8uhhU8b8B9rHF592ns9L9WAripnZYUFuYugvnDTLSh9ssHvkMCHdKX1YRxotXn+ UXaz0bDpBCGr6ChBCnQzaB26gXLQqTNvzYrpmU3Au7dn71dqCl5Z8vK91rEAk9SdZYzy FnGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678695894; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=O5FgUZnYp99aO58Xxxn+b8iUcBxTfOQHbXapV5BLa8M=; b=xz4dv9AHUcU0BIsER7K+Kpy2E5X9kYUrs0MuxFOGAJKYYvaMyy3yCDbnLlNGJwbUsY oUhBdcGNQ5gk/5ZJsAjNIIycxROi6aC4vl1W9aenvTivKlIiusNoSkAbuOxGmI14Aq8Y 21OksaRzYtsFCQkxpgN9ZhSbzI1AxWCFBclkw/zo0R+Sk0biv4RCEsTzrWFYoqG8Cytu 4sYHhdh3R8b+GEZ7OpwPe2ZDsyprKPcT+GOq/Hae1dmzgy3qfHDjCUaNBD2NJUqNOuzI gzvio6Iu0og4gvVv9A7p4YjZiHaHq/A/gDpCQHvGTrbjNUclmgJtSBHGuf2/3EeWX7mC 2UsA== X-Gm-Message-State: AO0yUKVYVDx/WhJhpWGrVX+BgcdI13v3pGhVaA0cyd0VnorQ4hq6R9bO MNm+cuN+69lqzyNz7THrNiyQqcPDDoZ64vMeNXm8sweIlPxDYg6CnfX5K4cQ/mq+UzgRIm/jdx+ UtUly8PAlao5f2HlcAyDbayOnmV4UffUV9ftzxk1Zb5Q= X-Received: by 2002:a05:622a:1744:b0:3b6:8bc3:a09c with SMTP id l4-20020a05622a174400b003b68bc3a09cmr18548294qtk.25.1678695894396; Mon, 13 Mar 2023 01:24:54 -0700 (PDT) X-Google-Smtp-Source: AK7set8UxSRW7S802L6te6tW+vKa6u4Ix9xtdKH4xZWNavSKjGr7x1SuTvvopdFCrhKlL+4mawptKQ== X-Received: by 2002:a05:622a:1744:b0:3b6:8bc3:a09c with SMTP id l4-20020a05622a174400b003b68bc3a09cmr18548267qtk.25.1678695894055; Mon, 13 Mar 2023 01:24:54 -0700 (PDT) From: Alexander Bulekov To: qemu-devel@nongnu.org Cc: Alexander Bulekov , Stefan Hajnoczi , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Mauro Matteo Cascella , Peter Xu , Jason Wang , David Hildenbrand , Gerd Hoffmann , Thomas Huth , Laurent Vivier , Bandan Das , "Edgar E . Iglesias" , Darren Kenny , Bin Meng , Paolo Bonzini , "Michael S . Tsirkin" , Marcel Apfelbaum , =?UTF-8?q?Daniel=20P=20=2E=20Berrang=C3=A9?= , Eduardo Habkost , Jon Maloy , Siqi Chen , Fam Zheng , Kevin Wolf , Hanna Reitz , qemu-block@nongnu.org (open list:Block I/O path) Subject: [PATCH v7 2/6] async: Add an optional reentrancy guard to the BH API Date: Mon, 13 Mar 2023 04:24:13 -0400 Message-Id: <20230313082417.827484-3-alxndr@bu.edu> X-Mailer: git-send-email 2.39.0 In-Reply-To: <20230313082417.827484-1-alxndr@bu.edu> References: <20230313082417.827484-1-alxndr@bu.edu> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CES-GSUITE_AUTH: bf3aNvsZpxl8 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; Received-SPF: pass client-ip=216.71.140.205; envelope-from=alxndr@bu.edu; helo=esa16.hc2706-39.iphmx.com X-Spam_score_int: 0 X-Spam_score: -0.1 X-Spam_bar: / X-Spam_report: (-0.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HK_RANDOM_ENVFROM=0.999, HK_RANDOM_FROM=1, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @bu.edu) X-ZM-MESSAGEID: 1678696040268100001 Content-Type: text/plain; charset="utf-8" Devices can pass their MemoryReentrancyGuard (from their DeviceState), when creating new BHes. Then, the async API will toggle the guard before/after calling the BH call-back. This prevents bh->mmio reentrancy issues. Reviewed-by: Darren Kenny Signed-off-by: Alexander Bulekov --- docs/devel/multiple-iothreads.txt | 7 +++++++ include/block/aio.h | 18 ++++++++++++++++-- include/qemu/main-loop.h | 7 +++++-- tests/unit/ptimer-test-stubs.c | 3 ++- util/async.c | 18 +++++++++++++++++- util/main-loop.c | 5 +++-- util/trace-events | 1 + 7 files changed, 51 insertions(+), 8 deletions(-) diff --git a/docs/devel/multiple-iothreads.txt b/docs/devel/multiple-iothre= ads.txt index 343120f2ef..a3e949f6b3 100644 --- a/docs/devel/multiple-iothreads.txt +++ b/docs/devel/multiple-iothreads.txt @@ -61,6 +61,7 @@ There are several old APIs that use the main loop AioCont= ext: * LEGACY qemu_aio_set_event_notifier() - monitor an event notifier * LEGACY timer_new_ms() - create a timer * LEGACY qemu_bh_new() - create a BH + * LEGACY qemu_bh_new_guarded() - create a BH with a device re-entrancy gu= ard * LEGACY qemu_aio_wait() - run an event loop iteration =20 Since they implicitly work on the main loop they cannot be used in code th= at @@ -72,8 +73,14 @@ Instead, use the AioContext functions directly (see incl= ude/block/aio.h): * aio_set_event_notifier() - monitor an event notifier * aio_timer_new() - create a timer * aio_bh_new() - create a BH + * aio_bh_new_guarded() - create a BH with a device re-entrancy guard * aio_poll() - run an event loop iteration =20 +The qemu_bh_new_guarded/aio_bh_new_guarded APIs accept a "MemReentrancyGua= rd" +argument, which is used to check for and prevent re-entrancy problems. For +BHs associated with devices, the reentrancy-guard is contained in the +corresponding DeviceState and named "mem_reentrancy_guard". + The AioContext can be obtained from the IOThread using iothread_get_aio_context() or for the main loop using qemu_get_aio_context= (). Code that takes an AioContext argument works both in IOThreads or the main diff --git a/include/block/aio.h b/include/block/aio.h index 8fba6a3584..3e3bdb9352 100644 --- a/include/block/aio.h +++ b/include/block/aio.h @@ -23,6 +23,8 @@ #include "qemu/thread.h" #include "qemu/timer.h" #include "block/graph-lock.h" +#include "hw/qdev-core.h" + =20 typedef struct BlockAIOCB BlockAIOCB; typedef void BlockCompletionFunc(void *opaque, int ret); @@ -331,9 +333,11 @@ void aio_bh_schedule_oneshot_full(AioContext *ctx, QEM= UBHFunc *cb, void *opaque, * is opaque and must be allocated prior to its use. * * @name: A human-readable identifier for debugging purposes. + * @reentrancy_guard: A guard set when entering a cb to prevent + * device-reentrancy issues */ QEMUBH *aio_bh_new_full(AioContext *ctx, QEMUBHFunc *cb, void *opaque, - const char *name); + const char *name, MemReentrancyGuard *reentrancy_g= uard); =20 /** * aio_bh_new: Allocate a new bottom half structure @@ -342,7 +346,17 @@ QEMUBH *aio_bh_new_full(AioContext *ctx, QEMUBHFunc *c= b, void *opaque, * string. */ #define aio_bh_new(ctx, cb, opaque) \ - aio_bh_new_full((ctx), (cb), (opaque), (stringify(cb))) + aio_bh_new_full((ctx), (cb), (opaque), (stringify(cb)), NULL) + +/** + * aio_bh_new_guarded: Allocate a new bottom half structure with a + * reentrancy_guard + * + * A convenience wrapper for aio_bh_new_full() that uses the cb as the name + * string. + */ +#define aio_bh_new_guarded(ctx, cb, opaque, guard) \ + aio_bh_new_full((ctx), (cb), (opaque), (stringify(cb)), guard) =20 /** * aio_notify: Force processing of pending events. diff --git a/include/qemu/main-loop.h b/include/qemu/main-loop.h index c25f390696..84d1ce57f0 100644 --- a/include/qemu/main-loop.h +++ b/include/qemu/main-loop.h @@ -389,9 +389,12 @@ void qemu_cond_timedwait_iothread(QemuCond *cond, int = ms); =20 void qemu_fd_register(int fd); =20 +#define qemu_bh_new_guarded(cb, opaque, guard) \ + qemu_bh_new_full((cb), (opaque), (stringify(cb)), guard) #define qemu_bh_new(cb, opaque) \ - qemu_bh_new_full((cb), (opaque), (stringify(cb))) -QEMUBH *qemu_bh_new_full(QEMUBHFunc *cb, void *opaque, const char *name); + qemu_bh_new_full((cb), (opaque), (stringify(cb)), NULL) +QEMUBH *qemu_bh_new_full(QEMUBHFunc *cb, void *opaque, const char *name, + MemReentrancyGuard *reentrancy_guard); void qemu_bh_schedule_idle(QEMUBH *bh); =20 enum { diff --git a/tests/unit/ptimer-test-stubs.c b/tests/unit/ptimer-test-stubs.c index f2bfcede93..8c9407c560 100644 --- a/tests/unit/ptimer-test-stubs.c +++ b/tests/unit/ptimer-test-stubs.c @@ -107,7 +107,8 @@ int64_t qemu_clock_deadline_ns_all(QEMUClockType type, = int attr_mask) return deadline; } =20 -QEMUBH *qemu_bh_new_full(QEMUBHFunc *cb, void *opaque, const char *name) +QEMUBH *qemu_bh_new_full(QEMUBHFunc *cb, void *opaque, const char *name, + MemReentrancyGuard *reentrancy_guard) { QEMUBH *bh =3D g_new(QEMUBH, 1); =20 diff --git a/util/async.c b/util/async.c index 21016a1ac7..a9b528c370 100644 --- a/util/async.c +++ b/util/async.c @@ -65,6 +65,7 @@ struct QEMUBH { void *opaque; QSLIST_ENTRY(QEMUBH) next; unsigned flags; + MemReentrancyGuard *reentrancy_guard; }; =20 /* Called concurrently from any thread */ @@ -137,7 +138,7 @@ void aio_bh_schedule_oneshot_full(AioContext *ctx, QEMU= BHFunc *cb, } =20 QEMUBH *aio_bh_new_full(AioContext *ctx, QEMUBHFunc *cb, void *opaque, - const char *name) + const char *name, MemReentrancyGuard *reentrancy_g= uard) { QEMUBH *bh; bh =3D g_new(QEMUBH, 1); @@ -146,13 +147,28 @@ QEMUBH *aio_bh_new_full(AioContext *ctx, QEMUBHFunc *= cb, void *opaque, .cb =3D cb, .opaque =3D opaque, .name =3D name, + .reentrancy_guard =3D reentrancy_guard, }; return bh; } =20 void aio_bh_call(QEMUBH *bh) { + bool last_engaged_in_io =3D false; + + if (bh->reentrancy_guard) { + last_engaged_in_io =3D bh->reentrancy_guard->engaged_in_io; + if (bh->reentrancy_guard->engaged_in_io) { + trace_reentrant_aio(bh->ctx, bh->name); + } + bh->reentrancy_guard->engaged_in_io =3D true; + } + bh->cb(bh->opaque); + + if (bh->reentrancy_guard) { + bh->reentrancy_guard->engaged_in_io =3D last_engaged_in_io; + } } =20 /* Multiple occurrences of aio_bh_poll cannot be called concurrently. */ diff --git a/util/main-loop.c b/util/main-loop.c index 3c0f525192..c4df36c6a5 100644 --- a/util/main-loop.c +++ b/util/main-loop.c @@ -616,9 +616,10 @@ void main_loop_wait(int nonblocking) =20 /* Functions to operate on the main QEMU AioContext. */ =20 -QEMUBH *qemu_bh_new_full(QEMUBHFunc *cb, void *opaque, const char *name) +QEMUBH *qemu_bh_new_full(QEMUBHFunc *cb, void *opaque, const char *name, M= emReentrancyGuard *reentrancy_guard) { - return aio_bh_new_full(qemu_aio_context, cb, opaque, name); + return aio_bh_new_full(qemu_aio_context, cb, opaque, name, + reentrancy_guard); } =20 /* diff --git a/util/trace-events b/util/trace-events index 16f78d8fe5..3f7e766683 100644 --- a/util/trace-events +++ b/util/trace-events @@ -11,6 +11,7 @@ poll_remove(void *ctx, void *node, int fd) "ctx %p node %= p fd %d" # async.c aio_co_schedule(void *ctx, void *co) "ctx %p co %p" aio_co_schedule_bh_cb(void *ctx, void *co) "ctx %p co %p" +reentrant_aio(void *ctx, const char *name) "ctx %p name %s" =20 # thread-pool.c thread_pool_submit(void *pool, void *req, void *opaque) "pool %p req %p op= aque %p" --=20 2.39.0 From nobody Sun May 19 10:14:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=bu.edu ARC-Seal: i=1; a=rsa-sha256; t=1678695963; cv=none; d=zohomail.com; s=zohoarc; b=jXRxyvEAWBo0Ik2CSDUbOgJWrERHvzUJXPYHe042skW90gegqPFYN1sjvQSUHk6ecYYMiJrSONKloW5HjevKnOdMaUO02rfjzDrgs4rtHMsSlAB2ggBxwLdP8qQ4hEKdioDxCQKiOu1dLTJ4DmtdPdky+9AUfemNEE9at/Re0Qc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1678695963; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=y81jYrFdHFI0h2IHDmqZGbfVAz90Pdxvxksgm9ZaytQ=; b=HnoUdSnlDlURYcYgEBpINslw8nCAoxm/2eY6yPSc6GjfkCXVn3Zq+HCNczp5766II12fkiedCR1Z9RUWu+eu+qABgzTiRK/pvoN5SJCTAAYeowE1HHQuPm367xuthPtHgd1rYi3+zf8W1bOkEIwXFMkBNe9SRQDSqJ3GKFnpDXo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1678695963093139.5473140531916; Mon, 13 Mar 2023 01:26:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pbdUd-0000y2-Q0; Mon, 13 Mar 2023 04:25:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pbdUb-0000xr-UW for qemu-devel@nongnu.org; Mon, 13 Mar 2023 04:25:17 -0400 Received: from esa3.hc2706-39.iphmx.com ([68.232.154.118]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pbdUa-0000SG-5x for qemu-devel@nongnu.org; Mon, 13 Mar 2023 04:25:17 -0400 Received: from mail-qv1-f72.google.com ([209.85.219.72]) by ob1.hc2706-39.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 13 Mar 2023 04:25:09 -0400 Received: by mail-qv1-f72.google.com with SMTP id ge13-20020a05621427cd00b005739f5f9d7cso6629243qvb.22 for ; Mon, 13 Mar 2023 01:25:09 -0700 (PDT) Received: from mozz.bu.edu (mozz.bu.edu. [128.197.127.33]) by smtp.gmail.com with ESMTPSA id q13-20020a37430d000000b0074382b756c2sm4853969qka.14.2023.03.13.01.25.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Mar 2023 01:25:07 -0700 (PDT) X-IronPort-RemoteIP: 209.85.219.72 X-IronPort-MID: 264206802 X-IronPort-Reputation: None X-IronPort-Listener: OutgoingMail X-IronPort-SenderGroup: RELAY_GSUITE X-IronPort-MailFlowPolicy: $RELAYED IronPort-Data: A9a23:aJcsMaq7dYVqBuJrkbMq3/RIP0ReBmKlZxIvgKrLsJaIsI4StFCzt garIBnUOPncZDDzc4pxbI62808Du5XRz9VgGgFlqH0wEXxD9pacVYWSI3mrAy7DdceroGCLT ik9hnssCOhuExcwcz/0auCJQUFUjP3OHfykTrafYEidfCc8IA85kxVvhuUltYBhhNm9Emult Mj75sbSIzdJ4RYtWo4vw//F+UMHUMja4mtC5QRlPKsT5jcyqlFOZH4hDfDpR5fHatQMdgKKb 76r5K20+Grf4yAsBruN+losWhRXKlJ6FVHmZkt+AsBOsDAbzsAB+v9T2M4nVKtio27hc+ada Tl6ncfYpQ8BZsUgkQmGOvVSO3gW0aZuodcrLZUj2CA6IoKvn3bEmp1T4E8K0YIw2ut0IGJN0 NYjFw9RfDqivfO83Ym4Vbw57igjBJGD0II3v3hhyXTAE69jT8+ZBarN4tBc0XE7gcUm8fT2P ZJIL2oyKk6ZMlsQYD/7C7pn9AusrnD7YztUsnqfuOw673W7IAlZiuaxaoKLKoTQLSlTtnTA9 kXr03WgOBMfDcei8zOg/liQu9aayEsXX6pXTtVU7MVCmVCW2ykfBQMbUXO9pv+2jFP4XMhQQ 3H44QIrpKk2sVW1F5zzAEf+r3mDsRoRHdFXFoXW9T2w90Yd2C7BbkBsc9KLQIVOWBMeLdDy6 mK0og== IronPort-HdrOrdr: A9a23:OAwdRKCelx0AKf3lHel655DYdb4zR+YMi2TDGXoBLSC9Ffbo6/ xG+c5w6faaskd2ZJhNo6HjBEDEewKmyXcX2/htAV7dZniehILAFugLhvqA/9SjIVyFygc078 ddmsNFebrN5DZB/KPHyTj9OfobhPe8zICUqdH380pNJDsaFJ2ILD0UNu9YKCBLrcV9a6bRbK DsnvavbgDOGEgqUg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bu.edu; s=s1gsbu; t=1678695908; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=y81jYrFdHFI0h2IHDmqZGbfVAz90Pdxvxksgm9ZaytQ=; b=DjCwQ5h5p57oYNsyK/utfPbfsosQ+FOw95CEEL7d7UsWOFBIJt6P0WrnyiRWRde4sl VLwhy4fZtpZYmadyIEEyRTjNc3GU9o2ZSsOIjAUnmXyPryW5rwkFKJOdm1LWsZvwPau+ /zSHnG98mxKvWJGPq3GvlQFZilDahk7OHZAb6o8Xwb8/H3FitfqS0sMu7BeSOZx0yNXb zY/HrsE9zzftWImA55EveRc+sfufDRH4aTs2LhiiKxsL5+O2e/ZTw6vM6IGGq2Z2/MlU yBVc+IBQMfbkORBzYS/BRvYTcoY+/mlRmUmgOOfJpAB2rswbqXECrylYlOX1IbCMfKO+ Yhlw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678695908; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=y81jYrFdHFI0h2IHDmqZGbfVAz90Pdxvxksgm9ZaytQ=; b=hsOovoutUTRnccyijfg/BZHGZBYx3FicyBlkjVh+aGzh1JrunXyl8MbOj7ez+Sp0EG sk4Gqyli0QFUwsnIGkP0RmboTmgYeThdEqRc6ezGEygBj8cgbUlBq2Rv4EQwoPTMb9nQ BBUhvlDEIy1tnVYM4BdI0vuRFLoWspYblhU5bl8ZRiRIIayRtDDb5cuL8HwnJUXh4UJe tDX73Fh7pLGPip4zVvgIRWXNQBBRKOYQI0adPgCtbvKGhuEhsAHOrb4a87wbVxmh1dey zhETyXnvGkkbBrfGSkXcTNVzYmPUHbGVK/Wut7cw5TA9lL/Pe10aQ9yoeVAJAfGO5UH9 EKtw== X-Gm-Message-State: AO0yUKUFbiT7aZWuYT6sf+8Ld9u7JqkxhhKBliuZxxwL8tOtWSzAVBu5 55hZaWAfR2T+MeyXUcHHeXUM1gC77dpA59idZZ4I5xPzW8Y7HzJu91FdQzx9I4gfyjhFSH7D7IH fEovVEeHU1kak/sZoLnCIivJnH7THUAgeLkWVYURt06M= X-Received: by 2002:ac8:7dc3:0:b0:3c0:14ec:bfc2 with SMTP id c3-20020ac87dc3000000b003c014ecbfc2mr54914745qte.28.1678695907955; Mon, 13 Mar 2023 01:25:07 -0700 (PDT) X-Google-Smtp-Source: AK7set+KGwEKXKmj2t/0ntOh2Lv6SBYA0JBDwgb+2jXuc6e660XoR86iot+SaqIiudemP5jK7XLSmw== X-Received: by 2002:ac8:7dc3:0:b0:3c0:14ec:bfc2 with SMTP id c3-20020ac87dc3000000b003c014ecbfc2mr54914716qte.28.1678695907663; Mon, 13 Mar 2023 01:25:07 -0700 (PDT) From: Alexander Bulekov To: qemu-devel@nongnu.org Cc: Alexander Bulekov , Stefan Hajnoczi , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Mauro Matteo Cascella , Peter Xu , Jason Wang , David Hildenbrand , Gerd Hoffmann , Thomas Huth , Laurent Vivier , Bandan Das , "Edgar E . Iglesias" , Darren Kenny , Bin Meng , Paolo Bonzini , "Michael S . Tsirkin" , Marcel Apfelbaum , =?UTF-8?q?Daniel=20P=20=2E=20Berrang=C3=A9?= , Eduardo Habkost , Jon Maloy , Siqi Chen Subject: [PATCH v7 3/6] checkpatch: add qemu_bh_new/aio_bh_new checks Date: Mon, 13 Mar 2023 04:24:14 -0400 Message-Id: <20230313082417.827484-4-alxndr@bu.edu> X-Mailer: git-send-email 2.39.0 In-Reply-To: <20230313082417.827484-1-alxndr@bu.edu> References: <20230313082417.827484-1-alxndr@bu.edu> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CES-GSUITE_AUTH: bf3aNvsZpxl8 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; Received-SPF: pass client-ip=68.232.154.118; envelope-from=alxndr@bu.edu; helo=esa3.hc2706-39.iphmx.com X-Spam_score_int: -23 X-Spam_score: -2.4 X-Spam_bar: -- X-Spam_report: (-2.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HK_RANDOM_ENVFROM=0.999, HK_RANDOM_FROM=1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @bu.edu) X-ZM-MESSAGEID: 1678695966249100002 Content-Type: text/plain; charset="utf-8" Advise authors to use the _guarded versions of the APIs, instead. Reviewed-by: Darren Kenny Signed-off-by: Alexander Bulekov --- scripts/checkpatch.pl | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl index d768171dcf..eeaec436eb 100755 --- a/scripts/checkpatch.pl +++ b/scripts/checkpatch.pl @@ -2865,6 +2865,14 @@ sub process { if ($line =3D~ /\bsignal\s*\(/ && !($line =3D~ /SIG_(?:IGN|DFL)/)) { ERROR("use sigaction to establish signal handlers; signal is not portab= le\n" . $herecurr); } +# recommend qemu_bh_new_guarded instead of qemu_bh_new + if ($realfile =3D~ /.*\/hw\/.*/ && $line =3D~ /\bqemu_bh_new\s*\(/= ) { + ERROR("use qemu_bh_new_guarded() instead of qemu_bh_new() to avoid reen= trancy problems\n" . $herecurr); + } +# recommend aio_bh_new_guarded instead of aio_bh_new + if ($realfile =3D~ /.*\/hw\/.*/ && $line =3D~ /\baio_bh_new\s*\(/)= { + ERROR("use aio_bh_new_guarded() instead of aio_bh_new() to avoid reentr= ancy problems\n" . $herecurr); + } # check for module_init(), use category-specific init macros explicitly pl= ease if ($line =3D~ /^module_init\s*\(/) { ERROR("please use block_init(), type_init() etc. instead of module_init= ()\n" . $herecurr); --=20 2.39.0 From nobody Sun May 19 10:14:44 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=none dis=none) header.from=bu.edu ARC-Seal: i=1; a=rsa-sha256; t=1678696001; cv=none; d=zohomail.com; s=zohoarc; b=A+O4PuzY6kC5sJgHMIsLpmAYTgk4efNhX66wKE6vMKUaRv3JlZJ41P2S4v1mEONoLWzxwfWmK9MCqfIUc0CCTuPR7IYHGIA8NbKryL4z26CzQIrt/7ISr9yXBKTqiR5q9hwZ/i8FjfNViW72+qpAnxRGLSC19pmBWKIA/1HNh1c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1678696001; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=VGGhlsD60scV1DpZM62YCeIeSkP8wBKOkjv1wo9iGSA=; b=LhnCEWWzjvSWB1pvuLxc4E+Gmi1QrcDjwuZ69Kqa/698ZhmJyMmGIEu3fch7gzlaB03iklTC6Xl/25TwTJRAc/WDe5yDz4WHTC5mQDqc39RGtUs+WYzQSFA95Ot7v2qICvlmomii3XRHE6CEsYl5w652Ck6b8ZI5FQMmxR9biGQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1678696001374377.33023343387276; Mon, 13 Mar 2023 01:26:41 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.509142.784387 (Exim 4.92) (envelope-from ) id 1pbdUu-0004pN-Cd; Mon, 13 Mar 2023 08:25:36 +0000 Received: by outflank-mailman (output) from mailman id 509142.784387; Mon, 13 Mar 2023 08:25:36 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pbdUu-0004pG-9b; Mon, 13 Mar 2023 08:25:36 +0000 Received: by outflank-mailman (input) for mailman id 509142; Mon, 13 Mar 2023 08:25:35 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pbdUs-0004pA-Tc for xen-devel@lists.xenproject.org; Mon, 13 Mar 2023 08:25:35 +0000 Received: from esa15.hc2706-39.iphmx.com (esa15.hc2706-39.iphmx.com [216.71.140.200]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 9e2a9675-c178-11ed-87f5-c1b5be75604c; Mon, 13 Mar 2023 09:25:32 +0100 (CET) Received: from mail-qv1-f69.google.com ([209.85.219.69]) by ob1.hc2706-39.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 13 Mar 2023 04:25:24 -0400 Received: by mail-qv1-f69.google.com with SMTP id e11-20020ad4536b000000b005a9292e8c2bso627646qvv.1 for ; Mon, 13 Mar 2023 01:25:24 -0700 (PDT) Received: from mozz.bu.edu (mozz.bu.edu. [128.197.127.33]) by smtp.gmail.com with ESMTPSA id u11-20020ac8050b000000b003bfc0cca1b7sm5160090qtg.49.2023.03.13.01.25.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Mar 2023 01:25:20 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 9e2a9675-c178-11ed-87f5-c1b5be75604c X-IronPort-RemoteIP: 209.85.219.69 X-IronPort-MID: 261668084 X-IronPort-Reputation: None X-IronPort-Listener: OutgoingMail X-IronPort-SenderGroup: RELAY_GSUITE X-IronPort-MailFlowPolicy: $RELAYED IronPort-Data: A9a23:5DmNs6C830h3chVW/23iw5YqxClBgxIJ4kV8jS/XYbTApDsh0zUPm jBLDzyFaffZZTbweot/YdixpB8Hv8SGzIdrTANkpHpgcSl2pJueD7x1DKtR0wB+jCHnZBg6h ynLQoCYdKjYdleF+lH2dOCn9SImvU2xbuKUIPbePSxsThNTRi4kiBZy88Y0mYctitWia++3k YqaT/b3ZRn0i1aYDkpOs/jY8Eg256yo0N8llgdWic5j7Qe2e0Y9Ucp3yZGZdxPQXoRSF+imc OfPpJnRErTxpkpF5nuNy94XQ2VTKlLgFVHmZkl+AsBOtiN/Shkaic7XAha9hXB/0F1ll/gpo DlEWAfZpQ0BZ8Ugk8xEO/VU/r0X0QSrN9YrLFDm2fF/wXEqfFPU5dN+XE8nEbcx1cB5IGNX+ cA7JQ8CO0Xra+KemNpXS8Fpj8UnadD1ZcYR5CAmwjbeAvIrB5vERs0m5/cChGZ21p0IR6+PI ZRIAdZsRE2ojxlnM1MHDp4ktO21wHTzblW0rXrP+/NpvTiLnFAZPL7FHsPsRfakGedvuF+op WPZxEPmIzo4DYnKodaC2jf27gPVpgvrVYRXGLCm+/pChFyI2ndVGBAQTUG8o/Sylgi5Qd03F qAP0i8nrKx37VLyC9ejDlu3p3mLuhNaUN1VewEn1DywJmPvy17xLgA5ovRpMbTKaOdeqeQW6 2K0 IronPort-HdrOrdr: A9a23:ulM0c6n7SoNMtKofUF7BdtSlSRnpDfL63DAbv31ZSRFFG/FwWf re+MjzsiWE9Ar5PUtLpTnuAtjnfZqxz+8W3WBVB8bYYOCEghrUEGgd1/qa/9SIIUSXnZ8/6U 4jSdkFNDSZNzhHZK3BkW6F+rgbsby62ZHtr8vli1lWcSFWR5dJ0zpZYzzrbXGehzMrOXP6Lv ehDwZ8yQZIAU5nFvhTz0NrPtT+mw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bu.edu; s=s1gsbu; t=1678695921; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=VGGhlsD60scV1DpZM62YCeIeSkP8wBKOkjv1wo9iGSA=; b=IWUm5wXTEs8fJGzUTNiEGJ5W93UijudeQX3SIPonXyQiCWRasT4uyZAKEpss9x6G32 XgC5kgTgLIWb37KqJuhSfQ2msj0imck9h4gHrwB3SbvVbyz1EvxJXlfuQyAd0F/vUQen eywymP2TPoklZQsPnCopQkUBPrEK7voEx/zXLcYqVhlKpAMnyfvaFbUDh+HCnxuhlC8B 05NyIHbIKoZ8+E/PSdDfbm68VlF2RklsMQwFKoAFyM3gshdTdh1AEliEWAMpjmf8FAXV TTZwiOA/0t9NYTz+UailYlyCXxB7wCYYFOySGEBwYhjx/TTFyUHXnFD4kKUbT/gr+iFb jbCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678695921; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=VGGhlsD60scV1DpZM62YCeIeSkP8wBKOkjv1wo9iGSA=; b=WmGqQvW4qZWKLf4WW/hTbsvD5u8IKS5vxbjiOQqJLdQPhQtIEQ1B/vkhlfpxOsZjXR fT4RhWsdg2B4bLBb4eMQW5Ivxy0wtwacdi2ifBaxSXBXdexvdbRLpwFeFtB0NSRtW1vC VSY5CrwToYWElwyV9yjS2DwDOCHwUx5isudj62j0Iculx4RZwJFMhTZDBslQEP10gnx8 39XDVQpYbcdWKyVjnMtJoCqzyJmxyDqYuqW2+BM15IVW64uls4N1dODruScjuIq92MAB 6bATfod/NUBmT7R8antZirQoY6ZVh/C3V6bGLkRxQzffmcXz4i6T0O/0qmC2BigaGeg5 9c9A== X-Gm-Message-State: AO0yUKUiYyyAEp4EmzQkpnOd7p0y+1XCp150Bfx111TGWNmkWDbojivF tgbhJU3cAd5ItNnHUtnZoPe5Uik4la7A6xC+bLcG7OHEqpQRiPqOc1AO8zeguqZcrVb+9sr4d2S 3jhP10wgWnsG/2KSE8XIBz/U8WWX/N1eRbDRlpVhXSw== X-Received: by 2002:a05:622a:14c6:b0:3bf:c04a:8d47 with SMTP id u6-20020a05622a14c600b003bfc04a8d47mr20368021qtx.18.1678695921459; Mon, 13 Mar 2023 01:25:21 -0700 (PDT) X-Google-Smtp-Source: AK7set9WmFLO8g9mUwVjLP+1U83rvhdZrkH/htF6D/TW6/NS3x0U2pQaejLpTuNznnAPXF4HlUfYTw== X-Received: by 2002:a05:622a:14c6:b0:3bf:c04a:8d47 with SMTP id u6-20020a05622a14c600b003bfc04a8d47mr20367996qtx.18.1678695921164; Mon, 13 Mar 2023 01:25:21 -0700 (PDT) From: Alexander Bulekov To: qemu-devel@nongnu.org Cc: Alexander Bulekov , Stefan Hajnoczi , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Mauro Matteo Cascella , Peter Xu , Jason Wang , David Hildenbrand , Gerd Hoffmann , Thomas Huth , Laurent Vivier , Bandan Das , "Edgar E . Iglesias" , Darren Kenny , Bin Meng , Paolo Bonzini , "Michael S . Tsirkin" , Marcel Apfelbaum , =?UTF-8?q?Daniel=20P=20=2E=20Berrang=C3=A9?= , Eduardo Habkost , Jon Maloy , Siqi Chen , Paul Durrant , Stefano Stabellini , Anthony Perard , Kevin Wolf , Hanna Reitz , Amit Shah , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , John Snow , Peter Maydell , Mark Cave-Ayland , Keith Busch , Klaus Jensen , Fam Zheng , Dmitry Fleytman , "Gonglei (Arei)" , xen-devel@lists.xenproject.org (open list:X86 Xen CPUs), qemu-block@nongnu.org (open list:virtio-blk), qemu-arm@nongnu.org (open list:i.MX31 (kzm)), qemu-ppc@nongnu.org (open list:New World (mac99)) Subject: [PATCH v7 4/6] hw: replace most qemu_bh_new calls with qemu_bh_new_guarded Date: Mon, 13 Mar 2023 04:24:15 -0400 Message-Id: <20230313082417.827484-5-alxndr@bu.edu> X-Mailer: git-send-email 2.39.0 In-Reply-To: <20230313082417.827484-1-alxndr@bu.edu> References: <20230313082417.827484-1-alxndr@bu.edu> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CES-GSUITE_AUTH: bf3aNvsZpxl8 X-ZohoMail-DKIM: pass (identity @bu.edu) X-ZM-MESSAGEID: 1678696002232100005 Content-Type: text/plain; charset="utf-8" This protects devices from bh->mmio reentrancy issues. Thanks: Thomas Huth for diagnosing OS X test failure. Reviewed-by: Darren Kenny Reviewed-by: Stefan Hajnoczi Reviewed-by: Michael S. Tsirkin Reviewed-by: Paul Durrant Signed-off-by: Alexander Bulekov Reviewed-by: Thomas Huth --- hw/9pfs/xen-9p-backend.c | 5 ++++- hw/block/dataplane/virtio-blk.c | 3 ++- hw/block/dataplane/xen-block.c | 5 +++-- hw/char/virtio-serial-bus.c | 3 ++- hw/display/qxl.c | 9 ++++++--- hw/display/virtio-gpu.c | 6 ++++-- hw/ide/ahci.c | 3 ++- hw/ide/ahci_internal.h | 1 + hw/ide/core.c | 4 +++- hw/misc/imx_rngc.c | 6 ++++-- hw/misc/macio/mac_dbdma.c | 2 +- hw/net/virtio-net.c | 3 ++- hw/nvme/ctrl.c | 6 ++++-- hw/scsi/mptsas.c | 3 ++- hw/scsi/scsi-bus.c | 3 ++- hw/scsi/vmw_pvscsi.c | 3 ++- hw/usb/dev-uas.c | 3 ++- hw/usb/hcd-dwc2.c | 3 ++- hw/usb/hcd-ehci.c | 3 ++- hw/usb/hcd-uhci.c | 2 +- hw/usb/host-libusb.c | 6 ++++-- hw/usb/redirect.c | 6 ++++-- hw/usb/xen-usb.c | 3 ++- hw/virtio/virtio-balloon.c | 5 +++-- hw/virtio/virtio-crypto.c | 3 ++- 25 files changed, 66 insertions(+), 33 deletions(-) diff --git a/hw/9pfs/xen-9p-backend.c b/hw/9pfs/xen-9p-backend.c index 74f3a05f88..0e266c552b 100644 --- a/hw/9pfs/xen-9p-backend.c +++ b/hw/9pfs/xen-9p-backend.c @@ -61,6 +61,7 @@ typedef struct Xen9pfsDev { =20 int num_rings; Xen9pfsRing *rings; + MemReentrancyGuard mem_reentrancy_guard; } Xen9pfsDev; =20 static void xen_9pfs_disconnect(struct XenLegacyDevice *xendev); @@ -443,7 +444,9 @@ static int xen_9pfs_connect(struct XenLegacyDevice *xen= dev) xen_9pdev->rings[i].ring.out =3D xen_9pdev->rings[i].data + XEN_FLEX_RING_SIZE(ring_order); =20 - xen_9pdev->rings[i].bh =3D qemu_bh_new(xen_9pfs_bh, &xen_9pdev->ri= ngs[i]); + xen_9pdev->rings[i].bh =3D qemu_bh_new_guarded(xen_9pfs_bh, + &xen_9pdev->rings[i], + &xen_9pdev->mem_reent= rancy_guard); xen_9pdev->rings[i].out_cons =3D 0; xen_9pdev->rings[i].out_size =3D 0; xen_9pdev->rings[i].inprogress =3D false; diff --git a/hw/block/dataplane/virtio-blk.c b/hw/block/dataplane/virtio-bl= k.c index b28d81737e..a6202997ee 100644 --- a/hw/block/dataplane/virtio-blk.c +++ b/hw/block/dataplane/virtio-blk.c @@ -127,7 +127,8 @@ bool virtio_blk_data_plane_create(VirtIODevice *vdev, V= irtIOBlkConf *conf, } else { s->ctx =3D qemu_get_aio_context(); } - s->bh =3D aio_bh_new(s->ctx, notify_guest_bh, s); + s->bh =3D aio_bh_new_guarded(s->ctx, notify_guest_bh, s, + &DEVICE(vdev)->mem_reentrancy_guard); s->batch_notify_vqs =3D bitmap_new(conf->num_queues); =20 *dataplane =3D s; diff --git a/hw/block/dataplane/xen-block.c b/hw/block/dataplane/xen-block.c index 734da42ea7..d8bc39d359 100644 --- a/hw/block/dataplane/xen-block.c +++ b/hw/block/dataplane/xen-block.c @@ -633,8 +633,9 @@ XenBlockDataPlane *xen_block_dataplane_create(XenDevice= *xendev, } else { dataplane->ctx =3D qemu_get_aio_context(); } - dataplane->bh =3D aio_bh_new(dataplane->ctx, xen_block_dataplane_bh, - dataplane); + dataplane->bh =3D aio_bh_new_guarded(dataplane->ctx, xen_block_datapla= ne_bh, + dataplane, + &DEVICE(xendev)->mem_reentrancy_gua= rd); =20 return dataplane; } diff --git a/hw/char/virtio-serial-bus.c b/hw/char/virtio-serial-bus.c index 7d4601cb5d..dd619f0731 100644 --- a/hw/char/virtio-serial-bus.c +++ b/hw/char/virtio-serial-bus.c @@ -985,7 +985,8 @@ static void virtser_port_device_realize(DeviceState *de= v, Error **errp) return; } =20 - port->bh =3D qemu_bh_new(flush_queued_data_bh, port); + port->bh =3D qemu_bh_new_guarded(flush_queued_data_bh, port, + &dev->mem_reentrancy_guard); port->elem =3D NULL; } =20 diff --git a/hw/display/qxl.c b/hw/display/qxl.c index ec712d3ca2..c0460c4ef1 100644 --- a/hw/display/qxl.c +++ b/hw/display/qxl.c @@ -2201,11 +2201,14 @@ static void qxl_realize_common(PCIQXLDevice *qxl, E= rror **errp) =20 qemu_add_vm_change_state_handler(qxl_vm_change_state_handler, qxl); =20 - qxl->update_irq =3D qemu_bh_new(qxl_update_irq_bh, qxl); + qxl->update_irq =3D qemu_bh_new_guarded(qxl_update_irq_bh, qxl, + &DEVICE(qxl)->mem_reentrancy_gua= rd); qxl_reset_state(qxl); =20 - qxl->update_area_bh =3D qemu_bh_new(qxl_render_update_area_bh, qxl); - qxl->ssd.cursor_bh =3D qemu_bh_new(qemu_spice_cursor_refresh_bh, &qxl-= >ssd); + qxl->update_area_bh =3D qemu_bh_new_guarded(qxl_render_update_area_bh,= qxl, + &DEVICE(qxl)->mem_reentrancy= _guard); + qxl->ssd.cursor_bh =3D qemu_bh_new_guarded(qemu_spice_cursor_refresh_b= h, &qxl->ssd, + &DEVICE(qxl)->mem_reentrancy_= guard); } =20 static void qxl_realize_primary(PCIDevice *dev, Error **errp) diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c index 5e15c79b94..66ac9b6cc5 100644 --- a/hw/display/virtio-gpu.c +++ b/hw/display/virtio-gpu.c @@ -1339,8 +1339,10 @@ void virtio_gpu_device_realize(DeviceState *qdev, Er= ror **errp) =20 g->ctrl_vq =3D virtio_get_queue(vdev, 0); g->cursor_vq =3D virtio_get_queue(vdev, 1); - g->ctrl_bh =3D qemu_bh_new(virtio_gpu_ctrl_bh, g); - g->cursor_bh =3D qemu_bh_new(virtio_gpu_cursor_bh, g); + g->ctrl_bh =3D qemu_bh_new_guarded(virtio_gpu_ctrl_bh, g, + &qdev->mem_reentrancy_guard); + g->cursor_bh =3D qemu_bh_new_guarded(virtio_gpu_cursor_bh, g, + &qdev->mem_reentrancy_guard); QTAILQ_INIT(&g->reslist); QTAILQ_INIT(&g->cmdq); QTAILQ_INIT(&g->fenceq); diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c index 55902e1df7..4e76d6b191 100644 --- a/hw/ide/ahci.c +++ b/hw/ide/ahci.c @@ -1509,7 +1509,8 @@ static void ahci_cmd_done(const IDEDMA *dma) ahci_write_fis_d2h(ad); =20 if (ad->port_regs.cmd_issue && !ad->check_bh) { - ad->check_bh =3D qemu_bh_new(ahci_check_cmd_bh, ad); + ad->check_bh =3D qemu_bh_new_guarded(ahci_check_cmd_bh, ad, + &ad->mem_reentrancy_guard); qemu_bh_schedule(ad->check_bh); } } diff --git a/hw/ide/ahci_internal.h b/hw/ide/ahci_internal.h index 303fcd7235..2480455372 100644 --- a/hw/ide/ahci_internal.h +++ b/hw/ide/ahci_internal.h @@ -321,6 +321,7 @@ struct AHCIDevice { bool init_d2h_sent; AHCICmdHdr *cur_cmd; NCQTransferState ncq_tfs[AHCI_MAX_CMDS]; + MemReentrancyGuard mem_reentrancy_guard; }; =20 struct AHCIPCIState { diff --git a/hw/ide/core.c b/hw/ide/core.c index 2d034731cf..50c8935366 100644 --- a/hw/ide/core.c +++ b/hw/ide/core.c @@ -513,6 +513,7 @@ BlockAIOCB *ide_issue_trim( BlockCompletionFunc *cb, void *cb_opaque, void *opaque) { IDEState *s =3D opaque; + IDEDevice *dev =3D s->unit ? s->bus->slave : s->bus->master; TrimAIOCB *iocb; =20 /* Paired with a decrement in ide_trim_bh_cb() */ @@ -520,7 +521,8 @@ BlockAIOCB *ide_issue_trim( =20 iocb =3D blk_aio_get(&trim_aiocb_info, s->blk, cb, cb_opaque); iocb->s =3D s; - iocb->bh =3D qemu_bh_new(ide_trim_bh_cb, iocb); + iocb->bh =3D qemu_bh_new_guarded(ide_trim_bh_cb, iocb, + &DEVICE(dev)->mem_reentrancy_guard); iocb->ret =3D 0; iocb->qiov =3D qiov; iocb->i =3D -1; diff --git a/hw/misc/imx_rngc.c b/hw/misc/imx_rngc.c index 632c03779c..082c6980ad 100644 --- a/hw/misc/imx_rngc.c +++ b/hw/misc/imx_rngc.c @@ -228,8 +228,10 @@ static void imx_rngc_realize(DeviceState *dev, Error *= *errp) sysbus_init_mmio(sbd, &s->iomem); =20 sysbus_init_irq(sbd, &s->irq); - s->self_test_bh =3D qemu_bh_new(imx_rngc_self_test, s); - s->seed_bh =3D qemu_bh_new(imx_rngc_seed, s); + s->self_test_bh =3D qemu_bh_new_guarded(imx_rngc_self_test, s, + &dev->mem_reentrancy_guard); + s->seed_bh =3D qemu_bh_new_guarded(imx_rngc_seed, s, + &dev->mem_reentrancy_guard); } =20 static void imx_rngc_reset(DeviceState *dev) diff --git a/hw/misc/macio/mac_dbdma.c b/hw/misc/macio/mac_dbdma.c index 43bb1f56ba..80a789f32b 100644 --- a/hw/misc/macio/mac_dbdma.c +++ b/hw/misc/macio/mac_dbdma.c @@ -914,7 +914,7 @@ static void mac_dbdma_realize(DeviceState *dev, Error *= *errp) { DBDMAState *s =3D MAC_DBDMA(dev); =20 - s->bh =3D qemu_bh_new(DBDMA_run_bh, s); + s->bh =3D qemu_bh_new_guarded(DBDMA_run_bh, s, &dev->mem_reentrancy_gu= ard); } =20 static void mac_dbdma_class_init(ObjectClass *oc, void *data) diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c index 53e1c32643..447f669921 100644 --- a/hw/net/virtio-net.c +++ b/hw/net/virtio-net.c @@ -2917,7 +2917,8 @@ static void virtio_net_add_queue(VirtIONet *n, int in= dex) n->vqs[index].tx_vq =3D virtio_add_queue(vdev, n->net_conf.tx_queue_size, virtio_net_handle_tx_bh); - n->vqs[index].tx_bh =3D qemu_bh_new(virtio_net_tx_bh, &n->vqs[inde= x]); + n->vqs[index].tx_bh =3D qemu_bh_new_guarded(virtio_net_tx_bh, &n->= vqs[index], + &DEVICE(vdev)->mem_reent= rancy_guard); } =20 n->vqs[index].tx_waiting =3D 0; diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c index 49c1210fce..62e4a1d7d9 100644 --- a/hw/nvme/ctrl.c +++ b/hw/nvme/ctrl.c @@ -4604,7 +4604,8 @@ static void nvme_init_sq(NvmeSQueue *sq, NvmeCtrl *n,= uint64_t dma_addr, QTAILQ_INSERT_TAIL(&(sq->req_list), &sq->io_req[i], entry); } =20 - sq->bh =3D qemu_bh_new(nvme_process_sq, sq); + sq->bh =3D qemu_bh_new_guarded(nvme_process_sq, sq, + &DEVICE(sq->ctrl)->mem_reentrancy_guard); =20 if (n->dbbuf_enabled) { sq->db_addr =3D n->dbbuf_dbs + (sqid << 3); @@ -5250,7 +5251,8 @@ static void nvme_init_cq(NvmeCQueue *cq, NvmeCtrl *n,= uint64_t dma_addr, } } n->cq[cqid] =3D cq; - cq->bh =3D qemu_bh_new(nvme_post_cqes, cq); + cq->bh =3D qemu_bh_new_guarded(nvme_post_cqes, cq, + &DEVICE(cq->ctrl)->mem_reentrancy_guard); } =20 static uint16_t nvme_create_cq(NvmeCtrl *n, NvmeRequest *req) diff --git a/hw/scsi/mptsas.c b/hw/scsi/mptsas.c index c485da792c..3de288b454 100644 --- a/hw/scsi/mptsas.c +++ b/hw/scsi/mptsas.c @@ -1322,7 +1322,8 @@ static void mptsas_scsi_realize(PCIDevice *dev, Error= **errp) } s->max_devices =3D MPTSAS_NUM_PORTS; =20 - s->request_bh =3D qemu_bh_new(mptsas_fetch_requests, s); + s->request_bh =3D qemu_bh_new_guarded(mptsas_fetch_requests, s, + &DEVICE(dev)->mem_reentrancy_guard= ); =20 scsi_bus_init(&s->bus, sizeof(s->bus), &dev->qdev, &mptsas_scsi_info); } diff --git a/hw/scsi/scsi-bus.c b/hw/scsi/scsi-bus.c index ceceafb2cd..e5c9f7a53d 100644 --- a/hw/scsi/scsi-bus.c +++ b/hw/scsi/scsi-bus.c @@ -193,7 +193,8 @@ static void scsi_dma_restart_cb(void *opaque, bool runn= ing, RunState state) AioContext *ctx =3D blk_get_aio_context(s->conf.blk); /* The reference is dropped in scsi_dma_restart_bh.*/ object_ref(OBJECT(s)); - s->bh =3D aio_bh_new(ctx, scsi_dma_restart_bh, s); + s->bh =3D aio_bh_new_guarded(ctx, scsi_dma_restart_bh, s, + &DEVICE(s)->mem_reentrancy_guard); qemu_bh_schedule(s->bh); } } diff --git a/hw/scsi/vmw_pvscsi.c b/hw/scsi/vmw_pvscsi.c index fa76696855..4de34536e9 100644 --- a/hw/scsi/vmw_pvscsi.c +++ b/hw/scsi/vmw_pvscsi.c @@ -1184,7 +1184,8 @@ pvscsi_realizefn(PCIDevice *pci_dev, Error **errp) pcie_endpoint_cap_init(pci_dev, PVSCSI_EXP_EP_OFFSET); } =20 - s->completion_worker =3D qemu_bh_new(pvscsi_process_completion_queue, = s); + s->completion_worker =3D qemu_bh_new_guarded(pvscsi_process_completion= _queue, s, + &DEVICE(pci_dev)->mem_reent= rancy_guard); =20 scsi_bus_init(&s->bus, sizeof(s->bus), DEVICE(pci_dev), &pvscsi_scsi_i= nfo); /* override default SCSI bus hotplug-handler, with pvscsi's one */ diff --git a/hw/usb/dev-uas.c b/hw/usb/dev-uas.c index 88f99c05d5..f013ded91e 100644 --- a/hw/usb/dev-uas.c +++ b/hw/usb/dev-uas.c @@ -937,7 +937,8 @@ static void usb_uas_realize(USBDevice *dev, Error **err= p) =20 QTAILQ_INIT(&uas->results); QTAILQ_INIT(&uas->requests); - uas->status_bh =3D qemu_bh_new(usb_uas_send_status_bh, uas); + uas->status_bh =3D qemu_bh_new_guarded(usb_uas_send_status_bh, uas, + &d->mem_reentrancy_guard); =20 dev->flags |=3D (1 << USB_DEV_FLAG_IS_SCSI_STORAGE); scsi_bus_init(&uas->bus, sizeof(uas->bus), DEVICE(dev), &usb_uas_scsi_= info); diff --git a/hw/usb/hcd-dwc2.c b/hw/usb/hcd-dwc2.c index 8755e9cbb0..a0c4e782b2 100644 --- a/hw/usb/hcd-dwc2.c +++ b/hw/usb/hcd-dwc2.c @@ -1364,7 +1364,8 @@ static void dwc2_realize(DeviceState *dev, Error **er= rp) s->fi =3D USB_FRMINTVL - 1; s->eof_timer =3D timer_new_ns(QEMU_CLOCK_VIRTUAL, dwc2_frame_boundary,= s); s->frame_timer =3D timer_new_ns(QEMU_CLOCK_VIRTUAL, dwc2_work_timer, s= ); - s->async_bh =3D qemu_bh_new(dwc2_work_bh, s); + s->async_bh =3D qemu_bh_new_guarded(dwc2_work_bh, s, + &dev->mem_reentrancy_guard); =20 sysbus_init_irq(sbd, &s->irq); } diff --git a/hw/usb/hcd-ehci.c b/hw/usb/hcd-ehci.c index d4da8dcb8d..c930c60921 100644 --- a/hw/usb/hcd-ehci.c +++ b/hw/usb/hcd-ehci.c @@ -2533,7 +2533,8 @@ void usb_ehci_realize(EHCIState *s, DeviceState *dev,= Error **errp) } =20 s->frame_timer =3D timer_new_ns(QEMU_CLOCK_VIRTUAL, ehci_work_timer, s= ); - s->async_bh =3D qemu_bh_new(ehci_work_bh, s); + s->async_bh =3D qemu_bh_new_guarded(ehci_work_bh, s, + &dev->mem_reentrancy_guard); s->device =3D dev; =20 s->vmstate =3D qemu_add_vm_change_state_handler(usb_ehci_vm_state_chan= ge, s); diff --git a/hw/usb/hcd-uhci.c b/hw/usb/hcd-uhci.c index 8ac1175ad2..77baaa7a6b 100644 --- a/hw/usb/hcd-uhci.c +++ b/hw/usb/hcd-uhci.c @@ -1190,7 +1190,7 @@ void usb_uhci_common_realize(PCIDevice *dev, Error **= errp) USB_SPEED_MASK_LOW | USB_SPEED_MASK_FULL); } } - s->bh =3D qemu_bh_new(uhci_bh, s); + s->bh =3D qemu_bh_new_guarded(uhci_bh, s, &DEVICE(dev)->mem_reentrancy= _guard); s->frame_timer =3D timer_new_ns(QEMU_CLOCK_VIRTUAL, uhci_frame_timer, = s); s->num_ports_vmstate =3D NB_PORTS; QTAILQ_INIT(&s->queues); diff --git a/hw/usb/host-libusb.c b/hw/usb/host-libusb.c index 176868d345..f500db85ab 100644 --- a/hw/usb/host-libusb.c +++ b/hw/usb/host-libusb.c @@ -1141,7 +1141,8 @@ static void usb_host_nodev_bh(void *opaque) static void usb_host_nodev(USBHostDevice *s) { if (!s->bh_nodev) { - s->bh_nodev =3D qemu_bh_new(usb_host_nodev_bh, s); + s->bh_nodev =3D qemu_bh_new_guarded(usb_host_nodev_bh, s, + &DEVICE(s)->mem_reentrancy_guard= ); } qemu_bh_schedule(s->bh_nodev); } @@ -1739,7 +1740,8 @@ static int usb_host_post_load(void *opaque, int versi= on_id) USBHostDevice *dev =3D opaque; =20 if (!dev->bh_postld) { - dev->bh_postld =3D qemu_bh_new(usb_host_post_load_bh, dev); + dev->bh_postld =3D qemu_bh_new_guarded(usb_host_post_load_bh, dev, + &DEVICE(dev)->mem_reentrancy_= guard); } qemu_bh_schedule(dev->bh_postld); dev->bh_postld_pending =3D true; diff --git a/hw/usb/redirect.c b/hw/usb/redirect.c index fd7df599bc..39fbaaab16 100644 --- a/hw/usb/redirect.c +++ b/hw/usb/redirect.c @@ -1441,8 +1441,10 @@ static void usbredir_realize(USBDevice *udev, Error = **errp) } } =20 - dev->chardev_close_bh =3D qemu_bh_new(usbredir_chardev_close_bh, dev); - dev->device_reject_bh =3D qemu_bh_new(usbredir_device_reject_bh, dev); + dev->chardev_close_bh =3D qemu_bh_new_guarded(usbredir_chardev_close_b= h, dev, + &DEVICE(dev)->mem_reentran= cy_guard); + dev->device_reject_bh =3D qemu_bh_new_guarded(usbredir_device_reject_b= h, dev, + &DEVICE(dev)->mem_reentran= cy_guard); dev->attach_timer =3D timer_new_ms(QEMU_CLOCK_VIRTUAL, usbredir_do_att= ach, dev); =20 packet_id_queue_init(&dev->cancelled, dev, "cancelled"); diff --git a/hw/usb/xen-usb.c b/hw/usb/xen-usb.c index 66cb3f7c24..38ee660a30 100644 --- a/hw/usb/xen-usb.c +++ b/hw/usb/xen-usb.c @@ -1032,7 +1032,8 @@ static void usbback_alloc(struct XenLegacyDevice *xen= dev) =20 QTAILQ_INIT(&usbif->req_free_q); QSIMPLEQ_INIT(&usbif->hotplug_q); - usbif->bh =3D qemu_bh_new(usbback_bh, usbif); + usbif->bh =3D qemu_bh_new_guarded(usbback_bh, usbif, + &DEVICE(xendev)->mem_reentrancy_guard); } =20 static int usbback_free(struct XenLegacyDevice *xendev) diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c index 746f07c4d2..d60dd1f61e 100644 --- a/hw/virtio/virtio-balloon.c +++ b/hw/virtio/virtio-balloon.c @@ -908,8 +908,9 @@ static void virtio_balloon_device_realize(DeviceState *= dev, Error **errp) precopy_add_notifier(&s->free_page_hint_notify); =20 object_ref(OBJECT(s->iothread)); - s->free_page_bh =3D aio_bh_new(iothread_get_aio_context(s->iothrea= d), - virtio_ballloon_get_free_page_hints, = s); + s->free_page_bh =3D aio_bh_new_guarded(iothread_get_aio_context(s-= >iothread), + virtio_ballloon_get_free_page= _hints, s, + &dev->mem_reentrancy_guard); } =20 if (virtio_has_feature(s->host_features, VIRTIO_BALLOON_F_REPORTING)) { diff --git a/hw/virtio/virtio-crypto.c b/hw/virtio/virtio-crypto.c index 802e1b9659..2fe804510f 100644 --- a/hw/virtio/virtio-crypto.c +++ b/hw/virtio/virtio-crypto.c @@ -1074,7 +1074,8 @@ static void virtio_crypto_device_realize(DeviceState = *dev, Error **errp) vcrypto->vqs[i].dataq =3D virtio_add_queue(vdev, 1024, virtio_crypto_handle_dataq_b= h); vcrypto->vqs[i].dataq_bh =3D - qemu_bh_new(virtio_crypto_dataq_bh, &vcrypto->vqs[i]); + qemu_bh_new_guarded(virtio_crypto_dataq_bh, &vcrypto->vqs= [i], + &dev->mem_reentrancy_guard); vcrypto->vqs[i].vcrypto =3D vcrypto; } =20 --=20 2.39.0 From nobody Sun May 19 10:14:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=bu.edu ARC-Seal: i=1; a=rsa-sha256; t=1678696020; cv=none; d=zohomail.com; s=zohoarc; b=KoQ2jN+HItxJa0RLduu/StthRwrEMgMCN57Vo2axyR62XyVPhc1i4y58B/lHA0puogzjObnCksZq6Oe7vTkdNpXWb/ZoxfBzXCjQkYZiSWM5NFvVZlapvlY7bwMsUJTiia8lHqCwY2P8MAe+lCGnVtfn9QJtW1nCOLNq9iICaiQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1678696020; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=WDNGiHRfaVagTIiKe5GPUmnf7mt4jDwhtxyOq8vyirw=; b=fXtbAtskCjZDcX/eqgXoo5+awTeTlg688Jm5R8mfjeKoVrrMpR/9SjHBpLdCV/iZ1GiAwoZzffwIyGnGKVjqiW2DMkHsZtgUixy/4x18r4oLEuRyvOfvinLB6IzkkJXA1V2V3yGV/UnWJPc3pHa0hcPoIcvo8O8DKn1VJhw4lW4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1678696020619993.8728737186727; Mon, 13 Mar 2023 01:27:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pbdV1-00010T-7S; Mon, 13 Mar 2023 04:25:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pbdUx-0000zv-Ny for qemu-devel@nongnu.org; Mon, 13 Mar 2023 04:25:41 -0400 Received: from esa3.hc2706-39.iphmx.com ([68.232.154.118]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pbdUu-0000aa-HZ for qemu-devel@nongnu.org; Mon, 13 Mar 2023 04:25:38 -0400 Received: from mail-qv1-f72.google.com ([209.85.219.72]) by ob1.hc2706-39.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 13 Mar 2023 04:25:35 -0400 Received: by mail-qv1-f72.google.com with SMTP id l13-20020ad44d0d000000b004c74bbb0affso6594881qvl.21 for ; Mon, 13 Mar 2023 01:25:35 -0700 (PDT) Received: from mozz.bu.edu (mozz.bu.edu. [128.197.127.33]) by smtp.gmail.com with ESMTPSA id y26-20020a37f61a000000b007436d0c60ecsm4871692qkj.65.2023.03.13.01.25.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Mar 2023 01:25:34 -0700 (PDT) X-IronPort-RemoteIP: 209.85.219.72 X-IronPort-MID: 264206816 X-IronPort-Reputation: None X-IronPort-Listener: OutgoingMail X-IronPort-SenderGroup: RELAY_GSUITE X-IronPort-MailFlowPolicy: $RELAYED IronPort-Data: A9a23:G0jUT6zda8wbFgmfRml6t+eKxCrEfRIJ4+MujC+fZmUNrF6WrkUGy 2pLDzvSPPuNMWf0fNtzbo7g8RwHsJHdzt8xTVA5rC00HyNBpPSeOdnIdU2Y0wF+jyHgoOCLy +1EN7Es+ehtFie0Si+Fa+Sn9j8kk/nTHNIQMcacUghpXwhoVSw9vhxqnu89k+ZAjMOwRgiAo rsemeWGULOe82MyYzJ8B56r8ks156yp4WhA5DTSWNgQ1LPgvyhNZH4gDfzpR5fIatE8NvK3Q e/F0Ia48gvxl/v6Ior4+lpTWhRiro/6ZGBiuFIPM0SRqkEqShgJ70oOHKF0hXG7Ktm+t4sZJ N1l7fRcQOqyV0HGsL11vxJwSkmSMUDakVNuzLfWXcG7liX7n3XQL/pGFF4uP7Q7wNhMO1oT0 vwUdQscche/iLfjqF67YrEEasULKcDqOMYGpCglw26DS/khRp/HTuPB4towMDUY3JgfW6aDI ZBAOHwwNnwsYDUWUrsTIJs6jOGknFH1bntVpE/9Sa8fuTaPllQvgOGzWDbTUuaoTMhJwmSIn 1PbpGvrAC4EEfeWxAPQpxpAgceKx0sXQrk6DbC967tmjUOewkQVDxsZU0b9puO24nNSQPpaI k0QvzMw9O08qxbtQd76UBm15nWDu3bwRuZtLgHz0ynVooK83upTLjFsouJpADD+iPILeA== IronPort-HdrOrdr: A9a23:yRFNhqh7t/ANBPwobq0/WoSU1XBQXgwji2hC6mlwRA09TyVXrb HLoB19726JtN91YhsdcL+7Sc+9qB/nhPxICMwqTMyftWrdyRaVxf9ZnPLfKlTbckWUh41gPO VbAtJD4bXLbWSS5vyKhzVQfexQpeWvweSDqd2b4U1QbTxHXYld0iYRMHflLqS0fmV77FgCea Z0KvAom9PZQwVuUi1zPBZlY9T+ DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bu.edu; s=s1gsbu; t=1678695935; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=WDNGiHRfaVagTIiKe5GPUmnf7mt4jDwhtxyOq8vyirw=; b=nSEM+j9kU0xVpjyux8Irh/EmBLVpSOhTArRx7bG6uzy3cHzlxdmMDheO54F9Oh1KqO aqiM3/Luh7fGv49uwjaloJRjdOuOfcV9UTnOhKCalUqCnir6Mv3hm9fQ5PB/vi3/80Gf Ug2gkpoSbxDySKvO4JENm1Kiq13bNsfUaBjMiALm58u26e3kf9vNmtBxEZG8lKNuNNR0 Xu5K0WmtF5Lj+TYGyhBNPfKUS93Ikd0ZnS811FX1UkbVx5g/rXOqXb7Ly8E6D0IuFXoA CZHHWRsMRz592WBzsopMPmZJsrBI7SjfqP4IEshThephar70GdnwwVMlanVXjGX/1rvr sX7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678695935; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=WDNGiHRfaVagTIiKe5GPUmnf7mt4jDwhtxyOq8vyirw=; b=RAT06XJLHhGI6Rxu+ZXtbYUykzTxU265e8aRtkq946MW2w6xEPoWuVoEYqWIAbwECU xxShV8OB66/CZ/gK0zjDTXWFm1SxDC4+7F5Xgnt619HGGLTHxoh1GYZ9Xt7p1wODN2bV +jaZF8xc/js/JaeVQUUgstQrqkJsxIDxDUHzVoMyLwqVkhMkIYehb+zkHb0ZQW6vn3K6 ELV/m7Z86u6wd2tpir+bLeS9pdcMAD9xh9npiNDNpa3/I6sM5o0BxKuS23IFNQz03QKP 2FInmATv109/GPg2P2W6WEKaZ4Buhqq+YqRPSiUWmgsLsOY60hOOZzP4x5Mq06VnvCZR 1KBw== X-Gm-Message-State: AO0yUKW5rGZZW3xeNq37gr4+aoEt1X5nTFaUhebRHJbaoJig5B7Gah6z Bz+515Luo828QiSG3eA43v25FUDVfCeL1Clc8qL9f3tIwW5xK5tvh2dShspqBWfLf8q2ysvOH0X I7jYP9S0XIpJWMeZFnXvEfKR6DoHL+hUZFUxN8G5er2U= X-Received: by 2002:ac8:570f:0:b0:3bf:b504:d5ec with SMTP id 15-20020ac8570f000000b003bfb504d5ecmr20369567qtw.42.1678695934812; Mon, 13 Mar 2023 01:25:34 -0700 (PDT) X-Google-Smtp-Source: AK7set8wF4H9/FhX7lx43ppj33EDcJt/A2IGj5XmzdBVBAYsi1PuZ7mMTtzb+BRJ4uIF5i3S8kx7lA== X-Received: by 2002:ac8:570f:0:b0:3bf:b504:d5ec with SMTP id 15-20020ac8570f000000b003bfb504d5ecmr20369550qtw.42.1678695934578; Mon, 13 Mar 2023 01:25:34 -0700 (PDT) From: Alexander Bulekov To: qemu-devel@nongnu.org Cc: Alexander Bulekov , Stefan Hajnoczi , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Mauro Matteo Cascella , Peter Xu , Jason Wang , David Hildenbrand , Gerd Hoffmann , Thomas Huth , Laurent Vivier , Bandan Das , "Edgar E . Iglesias" , Darren Kenny , Bin Meng , Paolo Bonzini , "Michael S . Tsirkin" , Marcel Apfelbaum , =?UTF-8?q?Daniel=20P=20=2E=20Berrang=C3=A9?= , Eduardo Habkost , Jon Maloy , Siqi Chen Subject: [PATCH v7 5/6] memory: Allow disabling re-entrancy checking per-MR Date: Mon, 13 Mar 2023 04:24:16 -0400 Message-Id: <20230313082417.827484-6-alxndr@bu.edu> X-Mailer: git-send-email 2.39.0 In-Reply-To: <20230313082417.827484-1-alxndr@bu.edu> References: <20230313082417.827484-1-alxndr@bu.edu> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CES-GSUITE_AUTH: bf3aNvsZpxl8 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; Received-SPF: pass client-ip=68.232.154.118; envelope-from=alxndr@bu.edu; helo=esa3.hc2706-39.iphmx.com X-Spam_score_int: -23 X-Spam_score: -2.4 X-Spam_bar: -- X-Spam_report: (-2.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HK_RANDOM_ENVFROM=0.999, HK_RANDOM_FROM=1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @bu.edu) X-ZM-MESSAGEID: 1678696022064100003 Content-Type: text/plain; charset="utf-8" Signed-off-by: Alexander Bulekov Reviewed-by: Darren Kenny Reviewed-by: Thomas Huth --- include/exec/memory.h | 3 +++ softmmu/memory.c | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/include/exec/memory.h b/include/exec/memory.h index 6fa0b071f0..5154b123d8 100644 --- a/include/exec/memory.h +++ b/include/exec/memory.h @@ -791,6 +791,9 @@ struct MemoryRegion { unsigned ioeventfd_nb; MemoryRegionIoeventfd *ioeventfds; RamDiscardManager *rdm; /* Only for RAM */ + + /* For devices designed to perform re-entrant IO into their own IO MRs= */ + bool disable_reentrancy_guard; }; =20 struct IOMMUMemoryRegion { diff --git a/softmmu/memory.c b/softmmu/memory.c index 57bf18a257..3018fa2edb 100644 --- a/softmmu/memory.c +++ b/softmmu/memory.c @@ -544,7 +544,7 @@ static MemTxResult access_with_adjusted_size(hwaddr add= r, } =20 /* Do not allow more than one simultanous access to a device's IO Regi= ons */ - if (mr->owner && + if (mr->owner && !mr->disable_reentrancy_guard && !mr->ram_device && !mr->ram && !mr->rom_device && !mr->readonly) { dev =3D (DeviceState *) object_dynamic_cast(mr->owner, TYPE_DEVICE= ); if (dev) { --=20 2.39.0 From nobody Sun May 19 10:14:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=bu.edu ARC-Seal: i=1; a=rsa-sha256; t=1678696040; cv=none; d=zohomail.com; s=zohoarc; b=kdJ/fMVCc95chhwlezS/cxPOZBNvLw35OS/3xmbJxRX5VjJH0n82JtCj0xgs4oGsa5H9VVQUPYdGVEmuNiglisW3WqoFiXqQTpMzNs/PxbjvQsp40BuQL12g0CORCKkJDLXU+x4uQPghcZxhnrzZye5PyJpf3jBOCJs7CFXbIw4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1678696040; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=KpeFkI+n/R4JnjsLeFjb8CrnOXuUwmA/btTZScIGnXo=; b=bAHbpfofg3wdTHasDCwGEsEbYoVnKDURPX8bpUzVcTqtXRvD+86E3SAx9QwajYNt1VYpcrp13SGn3kyOl9uhaVpNOFH0WD2ojdIfjz956cwWmKppjafIc4fIw265fUqZxUi0zF/Ia9oFB//XaiEYzVqZ46WP/7ERq4ytUD95E+Q= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1678696040415963.3176935669097; Mon, 13 Mar 2023 01:27:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pbdVM-0001Qm-IY; Mon, 13 Mar 2023 04:26:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pbdVB-0001Ao-T5 for qemu-devel@nongnu.org; Mon, 13 Mar 2023 04:25:54 -0400 Received: from esa14.hc2706-39.iphmx.com ([216.71.140.199]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pbdV8-0000ba-GP for qemu-devel@nongnu.org; Mon, 13 Mar 2023 04:25:53 -0400 Received: from mail-qt1-f200.google.com ([209.85.160.200]) by ob1.hc2706-39.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 13 Mar 2023 04:25:48 -0400 Received: by mail-qt1-f200.google.com with SMTP id r3-20020ac84243000000b003b9a3ab9153so6454168qtm.8 for ; Mon, 13 Mar 2023 01:25:48 -0700 (PDT) Received: from mozz.bu.edu (mozz.bu.edu. [128.197.127.33]) by smtp.gmail.com with ESMTPSA id x27-20020a05620a0b5b00b0074230493ccfsm4911867qkg.73.2023.03.13.01.25.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Mar 2023 01:25:47 -0700 (PDT) X-IronPort-RemoteIP: 209.85.160.200 X-IronPort-MID: 287108782 X-IronPort-Reputation: None X-IronPort-Listener: OutgoingMail X-IronPort-SenderGroup: RELAY_GSUITE X-IronPort-MailFlowPolicy: $RELAYED IronPort-Data: A9a23:0WFoHqKTXHHOWmTeFE+Rb5clxSXFcZb7ZxGr2PjKsXjdYENS1DZWx 2QaDG6HOveLZ2f1ftt+aI/j9UJUuseGytVhSlRorCE8RH908vbIVI+TRqvS04J+DSFhoGZPt Zh2hgzodZhsJpPkjk7xdOOn9T8kjvvgqoPUUIbsIjp2SRJvVBAvgBdin/9RqoNziJ2yDhjlV ena+qUzA3f4nW8kWo4ow/jb8kg3562p4GlwUmEWPpingnePzxH5M7pCfcldH1OgKqFIE+izQ fr0zb3R1gs1KD90V7tJOp6iGqE7aue60Tqm0xK6aID76vR2nRHe545gXBYqhea7vB3S9zx54 I0lWZVd0m7FNIWV8AgWe0Aw/y2TocSqUVIISJSymZX78qHIT5fj69NVEWYoJJIRw/pMPjtB2 PFbJzZQUw/W0opawJrjIgVtrsEqLc2uJZ9G/386lWmfAvEhTpTOBa7N4Le03h9q3pEITauYP pRBL2A3NHwsYDUWUrsTIJs6jOGknFH1bntVpE/9Sa8fuTiMlVQhj+i3WDbTUsaKZt94skOIn 2Hh0T/cM00CCNKlyzXQpxpAgceKx0sXQrk6DbC967tmjUOewkQVDxsZU0b9puO24nNSQPpaI k0QvzMy9O08rhTzCNb6WBK8rTiPuRt0t8dsLtDWITqlksL8izt1zEBdJtKdQLTKbPMLeAE= IronPort-HdrOrdr: A9a23:i97DQa4ZoYPUg/xESQPXwPvXdLJyesId70hD6qhIIiYlFvBw9v re/sjzsCWe4gr5N0tMpTn+Atj4fZqxz/JICOoqTNSftWvd2VdARbsKhbcKpQeOJ8SUzI5gPM lbHZSXL7bLfD1HZf2Q2njeLz4Yq+P3lpxAjN2ut0tQcQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bu.edu; s=s1gsbu; t=1678695947; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=KpeFkI+n/R4JnjsLeFjb8CrnOXuUwmA/btTZScIGnXo=; b=bMMqmklJPiucjcRrFHTgtE/MLYv/2okRD40GEKh882iwDYeTAUFoPnImaoeQXn/4zD +L9u8RsCvMnYNedNqmjEQkpCp9grzyzyRGVXyyn4J0nzk4+REAqL+htsV/PH8linMdp1 uHxKOMZFUGSH2oack5IAjjtJ5dR0nizKJ63s1EvvKfchvmbJdM3TWZn9EEe8s/dL0kL1 Gd7dQ7V0RXZ8KNW90B/o0inGkXPSbbcZ9KjLfZThyzHDEM3XNKrYJoP6g0s+b6WIt06t OuIUwRzVMqiA2j5GZCjWUkNGGparOD9uZgqQNcSbSzaOcs/hJTsOrgP+kpyVFRfGxLbU u9Dw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678695947; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=KpeFkI+n/R4JnjsLeFjb8CrnOXuUwmA/btTZScIGnXo=; b=aOxYGAI8unC7LxjkOk3urSiAKsYYU2lsEV752T02PkbtPZjKRKCoMUg9e+i5F13tWa CndwrAQ0I+ufB09AIdo7ZsgqfNNjzWY1O66NozQuEX+Cnha0VAGitBpvsspcKjFIcycy yLhIt0hTMLCfAKQwyoQnvI3gz/6giq8U87PDO09cFRvsBxWw8N2RlMrkDwwh7RKx8QLZ Ro9B0FizHkt86UxtYPl8E/9RyS2QaeYLoCWs1U4eXLvpd96Nm8BhhAjWfP3G3fhlk8Xh 6zz2Gs4ID8aHEz72hZ8ZrWk06tUBqd+3tTt7Jg3C9sDNbaSEmRoRPY9YQslgETqyfNkO pjSw== X-Gm-Message-State: AO0yUKUbfSyLHinhBMq2Cn9PsCwoshGmsB1LGAhHpUcN/9gynvXcVmBb VFVNe6pgBDMnh0TJyrT6lajmZWogUKnnkFPQRkkQTMRmu3SLtXNbAu2JdLaCR5gysQb0JD/6Hs0 tnago4k52Cav1u0TptwqBTLe+UzpuNifNWS72LWaTXZY= X-Received: by 2002:a05:622a:15c2:b0:3bf:cc1a:f0bf with SMTP id d2-20020a05622a15c200b003bfcc1af0bfmr62235703qty.24.1678695947577; Mon, 13 Mar 2023 01:25:47 -0700 (PDT) X-Google-Smtp-Source: AK7set+vhAvRPaKaOApdS2WxqDHC1jnbCz5it639ctifSVqlSqXngL3WZ1tEQuqp6/ltI2eh1SN8Bg== X-Received: by 2002:a05:622a:15c2:b0:3bf:cc1a:f0bf with SMTP id d2-20020a05622a15c200b003bfcc1af0bfmr62235683qty.24.1678695947350; Mon, 13 Mar 2023 01:25:47 -0700 (PDT) From: Alexander Bulekov To: qemu-devel@nongnu.org Cc: Alexander Bulekov , Stefan Hajnoczi , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Mauro Matteo Cascella , Peter Xu , Jason Wang , David Hildenbrand , Gerd Hoffmann , Thomas Huth , Laurent Vivier , Bandan Das , "Edgar E . Iglesias" , Darren Kenny , Bin Meng , Paolo Bonzini , "Michael S . Tsirkin" , Marcel Apfelbaum , =?UTF-8?q?Daniel=20P=20=2E=20Berrang=C3=A9?= , Eduardo Habkost , Jon Maloy , Siqi Chen , Fiona Ebner , Fam Zheng Subject: [PATCH v7 6/6] lsi53c895a: disable reentrancy detection for script RAM Date: Mon, 13 Mar 2023 04:24:17 -0400 Message-Id: <20230313082417.827484-7-alxndr@bu.edu> X-Mailer: git-send-email 2.39.0 In-Reply-To: <20230313082417.827484-1-alxndr@bu.edu> References: <20230313082417.827484-1-alxndr@bu.edu> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CES-GSUITE_AUTH: bf3aNvsZpxl8 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; Received-SPF: pass client-ip=216.71.140.199; envelope-from=alxndr@bu.edu; helo=esa14.hc2706-39.iphmx.com X-Spam_score_int: 0 X-Spam_score: -0.1 X-Spam_bar: / X-Spam_report: (-0.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HK_RANDOM_ENVFROM=0.999, HK_RANDOM_FROM=1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @bu.edu) X-ZM-MESSAGEID: 1678696042291100011 Content-Type: text/plain; charset="utf-8" As the code is designed to use the memory APIs to access the script ram, disable reentrancy checks for the pseudo-RAM ram_io MemoryRegion. In the future, ram_io may be converted from an IO to a proper RAM MemoryReg= ion. Reported-by: Fiona Ebner Signed-off-by: Alexander Bulekov Reviewed-by: Darren Kenny Reviewed-by: Thomas Huth --- hw/scsi/lsi53c895a.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/hw/scsi/lsi53c895a.c b/hw/scsi/lsi53c895a.c index af93557a9a..db27872963 100644 --- a/hw/scsi/lsi53c895a.c +++ b/hw/scsi/lsi53c895a.c @@ -2302,6 +2302,12 @@ static void lsi_scsi_realize(PCIDevice *dev, Error *= *errp) memory_region_init_io(&s->io_io, OBJECT(s), &lsi_io_ops, s, "lsi-io", 256); =20 + /* + * Since we use the address-space API to interact with ram_io, disable= the + * re-entrancy guard. + */ + s->ram_io.disable_reentrancy_guard =3D true; + address_space_init(&s->pci_io_as, pci_address_space_io(dev), "lsi-pci-= io"); qdev_init_gpio_out(d, &s->ext_irq, 1); =20 --=20 2.39.0