From patchwork Sat Feb 10 10:24:36 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akihiko Odaki X-Patchwork-Id: 13552225 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 97FC5C48BC1 for ; Sat, 10 Feb 2024 10:26:37 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rYkXW-00071J-6E; Sat, 10 Feb 2024 05:24:54 -0500 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 1rYkXS-00070o-1e for qemu-devel@nongnu.org; Sat, 10 Feb 2024 05:24:50 -0500 Received: from mail-il1-x129.google.com ([2607:f8b0:4864:20::129]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rYkXQ-0002dQ-Ia for qemu-devel@nongnu.org; Sat, 10 Feb 2024 05:24:49 -0500 Received: by mail-il1-x129.google.com with SMTP id e9e14a558f8ab-363b8429f03so5212045ab.1 for ; Sat, 10 Feb 2024 02:24:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1707560687; x=1708165487; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=/Zrx+cM9JnBC8UHWhVfp2cUkKCiTKN/0k3qIHo/fadQ=; b=OPks0v+5nLxVFRcJlPwTmBlFpIpSEHqWgEClNtDnryErBEbg17zkkpRqqNPncYxXnj ugojUKuG2FMHaWXwQ2yIOklkEKy9W1lnoHr0QqJndFJVPGHtQ7QNXAI6ba9ENnq0Q03i sGRkXAbzCAoF6lzUscswF9JdjJj2NNOyzl+WIDs2Wdff882c5PsBkt9pTgqBRkrUcXeY sc4YgFEJ/mdzWEGGwEExZNa6hHuJ90S5a/am7HZ0vt4gf9y+iCSaJpMcdf9hL2oRy8gp 5xdfkqS4FjRzllGP2I4K7wMX6nwLceRU4XKx1wj3CXObrimVSqM2j3GL2wEjpCOjt7qz 08gA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707560687; x=1708165487; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/Zrx+cM9JnBC8UHWhVfp2cUkKCiTKN/0k3qIHo/fadQ=; b=JZPflCWA1kzU8y3w8au8J3arpaVyqeoXFLNAOjqpPxzNOW7UGb2wckyAJd/IBZob8z JdFooqlk03FBh0XNZ+uzxE2OlJXZBP9GDLcPdzJxriiRVZRJhW3+k4A4vUHANFoUdJUT Epr4EOJP7HMMCA2ll5lJa8FKNVggvq1BAIOuH1nerYIiotmYcZS4y9OsvwbAFqT8vc5L 8K0m1xazb894aamtRS7eGsXd+o2FJAceBOW7rvWud48GRaSts7EKo0E1edqWFewmA1rp KTkT8GRG1twH65464XzrLGF2Cf5LU4ihYlc8eycrHcxQTALPjeoQqGnwqlXodMYldvb+ Sr5A== X-Gm-Message-State: AOJu0Yz/Smo60hmoWwU0FNRbVQCW5oyb7mPFerarvpyeEj8GESPwj6n2 ULIkHMZuwYDmKnBJCYJhNOCq8LJFzxtR9dL0yvFr3CMNR1qLYsqhhMXx4tZrH6M= X-Google-Smtp-Source: AGHT+IE1lc9r25BsOY+Z2jeAgQ5GjB8B8DA2HxTmpf25vF8iwcp9wVmNAdK7kDrM14MT5WxNcJbrrQ== X-Received: by 2002:a92:dc51:0:b0:363:dd7a:f62a with SMTP id x17-20020a92dc51000000b00363dd7af62amr1985694ilq.26.1707560687653; Sat, 10 Feb 2024 02:24:47 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCUUMtqcYsm8qnzeD4tEo9eijVeifmE4Ms3oj0tTBgpu9zAmASWFARHBBwuAd8uJfNS30eu2HWX5c/gFkU9uTwVqRe9D52BdyJgdDVN7oWxyth72ELs/LY034xxAGQynYbZ75v4FgUP0aEJmchCSdoKPH88wvQJnaCqgBCHujDKQZhqKu65v21vt47W76XOHLZXiQiF/Hyn+QINrR7+Jaga/xSZsx+8OE6ItYz9jOfiFOqSDRiTWhoN7HAFiXNZz/t6xysAeVyRf0Az64qUsrQslqRIfX2qUuwq1QK2ZrdV5PQ83JX5MPCUe3fOScyymeOSEC+kGC4ZuPfkUQLs6o7HkhwLBwr72C2AKBQCaHvMbCKY+pvzN3K3BEu/+01e31Ay2pPlJOzuzUidnyEEE5xlqAbCXSMwMg2cuy2rWYQ== Received: from localhost ([157.82.200.138]) by smtp.gmail.com with UTF8SMTPSA id a15-20020a63d40f000000b005ceeeea1816sm3288273pgh.77.2024.02.10.02.24.44 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 10 Feb 2024 02:24:47 -0800 (PST) From: Akihiko Odaki Date: Sat, 10 Feb 2024 19:24:36 +0900 Subject: [PATCH v2 1/6] hw/pci: Determine if rombar is explicitly enabled MIME-Version: 1.0 Message-Id: <20240210-reuse-v2-1-24ba2a502692@daynix.com> References: <20240210-reuse-v2-0-24ba2a502692@daynix.com> In-Reply-To: <20240210-reuse-v2-0-24ba2a502692@daynix.com> To: "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goa?= =?utf-8?q?ter?= , Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Eduardo Habkost , Sriram Yagnaraman , Jason Wang , Keith Busch , Klaus Jensen Cc: qemu-devel@nongnu.org, qemu-block@nongnu.org, Akihiko Odaki X-Mailer: b4 0.12.3 Received-SPF: none client-ip=2607:f8b0:4864:20::129; envelope-from=akihiko.odaki@daynix.com; helo=mail-il1-x129.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01 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+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org vfio determines if rombar is explicitly enabled by inspecting QDict. Inspecting QDict is not nice because QDict is untyped and depends on the details on the external interface. Add an infrastructure to determine if rombar is explicitly enabled to hw/pci. PCIDevice::rom_bar is changed to have -1 by the default to tell rombar is explicitly enabled. It is consistent with other properties like addr and romsize. Signed-off-by: Akihiko Odaki --- include/hw/pci/pci_device.h | 5 +++++ hw/pci/pci.c | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/include/hw/pci/pci_device.h b/include/hw/pci/pci_device.h index d3dd0f64b273..54fa0676abf1 100644 --- a/include/hw/pci/pci_device.h +++ b/include/hw/pci/pci_device.h @@ -205,6 +205,11 @@ static inline uint16_t pci_get_bdf(PCIDevice *dev) return PCI_BUILD_BDF(pci_bus_num(pci_get_bus(dev)), dev->devfn); } +static inline bool pci_rom_bar_explicitly_enabled(PCIDevice *dev) +{ + return dev->rom_bar && dev->rom_bar != -1; +} + uint16_t pci_requester_id(PCIDevice *dev); /* DMA access functions */ diff --git a/hw/pci/pci.c b/hw/pci/pci.c index 76080af580d7..d08548d8ffe9 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -71,7 +71,7 @@ static Property pci_props[] = { DEFINE_PROP_PCI_DEVFN("addr", PCIDevice, devfn, -1), DEFINE_PROP_STRING("romfile", PCIDevice, romfile), DEFINE_PROP_UINT32("romsize", PCIDevice, romsize, -1), - DEFINE_PROP_UINT32("rombar", PCIDevice, rom_bar, 1), + DEFINE_PROP_UINT32("rombar", PCIDevice, rom_bar, -1), DEFINE_PROP_BIT("multifunction", PCIDevice, cap_present, QEMU_PCI_CAP_MULTIFUNCTION_BITNR, false), DEFINE_PROP_BIT("x-pcie-lnksta-dllla", PCIDevice, cap_present, From patchwork Sat Feb 10 10:24:37 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Akihiko Odaki X-Patchwork-Id: 13552223 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 88C73C4829D for ; Sat, 10 Feb 2024 10:26:37 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rYkXh-00074M-KZ; Sat, 10 Feb 2024 05:25:05 -0500 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 1rYkXf-00073N-N4 for qemu-devel@nongnu.org; Sat, 10 Feb 2024 05:25:03 -0500 Received: from mail-oi1-x22b.google.com ([2607:f8b0:4864:20::22b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rYkXV-0002e5-RE for qemu-devel@nongnu.org; Sat, 10 Feb 2024 05:24:55 -0500 Received: by mail-oi1-x22b.google.com with SMTP id 5614622812f47-3bb9d54575cso1168562b6e.2 for ; Sat, 10 Feb 2024 02:24:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1707560692; x=1708165492; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=KshG4XdFN/TjxiO4+Kgrx0bCb7ZBpfjPIzIbQ6JKIZk=; b=rfJNGksGidj4aL4ZMIw+kqIUWEsnBJ1w63J/XTQ85EhqN6HZmKbWsIZFMeGEAvz9Wx 2TQJEmn9/DwtyAxVn2YgEARXbk3Z4+9zSg45QUjRsZJe3+vbVmisP0yrzqloIs5IrlMa 3Vam1WDwqKc2qCnmqHtJSAZyJdeTNMgCnKn8nS00aB3TYz2cgjLCZqBx+peT4K6kTdKs 7NvvLHp0wL1JPErk7EO2HXVTiawwNz8PGJRTz8nsX/mfcjOjwcyvzp+g3lnjpNWAYXOV WM+M2YbXAkqz6PDuM+ffvf7+0Q2EP1RarJ10j7x+/xJ4uVBOxo67H5THPX5iuqr3EjXN QFcw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707560692; x=1708165492; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=KshG4XdFN/TjxiO4+Kgrx0bCb7ZBpfjPIzIbQ6JKIZk=; b=H4SYxPGS4J6g+WRaACafbr4DgnXU3JfXu3WM1f1REYZJpwB4CEX+acvwhAdWRkZQ1m sZb1Bf89tBdzIWTXUN4th3GvrXv2mb1CeOg5INaKwaEKWKZa619mKbw9qwld+CGP7Oks 7I0/o1H19SS8JiPxa6NqwMF29djCrYVILLkZePtW7KIPMqkEzEWh49fT3YLT6YR/QTf8 5/A47r/Fp4z5EGpEPoJIvL9jzDoBkx73Ddw0kAr96pNWkPFf35FsfYMblECG8rhj0xIv tkT/pQN7+P6sPzxTQj2/czQ28N3kPgNaU+aYPPUWr+gPqgVp91iVdjCjJfHz6ldsOnOk C6Aw== X-Gm-Message-State: AOJu0YzXFEPnRynOzAI8aNRn86gf8iXy9ST3n8mN08/rrF3KBrKNJcW/ TKNrbea3guenkUT/Q75KWceH8ODM3KS5VtCCgQGhLT4DNbQtW4pXlvmVdobxNac= X-Google-Smtp-Source: AGHT+IHKp5j+emFwwliVk3wDpqK9aBHdEgcqn1XGS4R0PelKs7l1KZPLMaEBqvsZMH/NBI1rqgSMcw== X-Received: by 2002:a05:6808:1494:b0:3bf:f5f0:a8e with SMTP id e20-20020a056808149400b003bff5f00a8emr2138250oiw.3.1707560692603; Sat, 10 Feb 2024 02:24:52 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCVxEGN3xr++KS8+PsRVg7b+Ot1pFKfsC6ea5JXng3DK51os8W+CxL5UCUC4ReAbp03fAE2SWimlHez7sdkS2JDoT2tqsUwywKLhFENti0JGC708Wzbu+Zmp5EMAxmovOphYK9pOKrDveh3zTiQURBRBzyETxJo7Aie0AbdjCxjAlHITIkUishINOxL5MAiFwX2lo6HaA/Vf1KS1DWNymbeSSdcjgDv4OaAtVFEEoF+0JtykN8v4zXRxuZw/6u1Wb1G/zxR+iQH2964hd2sKpuPRCKv5rAzCUuHtDeIkfe67xBgF6aAVxlc7gTkYMRbXm9A0noc0UjBiNncp79Uz6NvSppA04pHFydKggocIs9Q6PV1BjAE25Tmj07a/DoQmc9NFsgebdZ0j3avpm4qW1V112fzyoU1Toeo8b64nvA== Received: from localhost ([157.82.200.138]) by smtp.gmail.com with UTF8SMTPSA id o125-20020a62cd83000000b006dff7fd5dedsm2054672pfg.9.2024.02.10.02.24.49 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 10 Feb 2024 02:24:52 -0800 (PST) From: Akihiko Odaki Date: Sat, 10 Feb 2024 19:24:37 +0900 Subject: [PATCH v2 2/6] vfio: Avoid inspecting option QDict for rombar MIME-Version: 1.0 Message-Id: <20240210-reuse-v2-2-24ba2a502692@daynix.com> References: <20240210-reuse-v2-0-24ba2a502692@daynix.com> In-Reply-To: <20240210-reuse-v2-0-24ba2a502692@daynix.com> To: "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goa?= =?utf-8?q?ter?= , Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Eduardo Habkost , Sriram Yagnaraman , Jason Wang , Keith Busch , Klaus Jensen Cc: qemu-devel@nongnu.org, qemu-block@nongnu.org, Akihiko Odaki X-Mailer: b4 0.12.3 Received-SPF: none client-ip=2607:f8b0:4864:20::22b; envelope-from=akihiko.odaki@daynix.com; helo=mail-oi1-x22b.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=unavailable 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+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Use pci_rom_bar_explicitly_enabled() to determine if rombar is explicitly enabled. Signed-off-by: Akihiko Odaki Reviewed-by: Philippe Mathieu-Daudé --- hw/vfio/pci.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index d7fe06715c4b..44178ac9355f 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -1010,7 +1010,6 @@ static void vfio_pci_size_rom(VFIOPCIDevice *vdev) { uint32_t orig, size = cpu_to_le32((uint32_t)PCI_ROM_ADDRESS_MASK); off_t offset = vdev->config_offset + PCI_ROM_ADDRESS; - DeviceState *dev = DEVICE(vdev); char *name; int fd = vdev->vbasedev.fd; @@ -1044,7 +1043,7 @@ static void vfio_pci_size_rom(VFIOPCIDevice *vdev) } if (vfio_opt_rom_in_denylist(vdev)) { - if (dev->opts && qdict_haskey(dev->opts, "rombar")) { + if (pci_rom_bar_explicitly_enabled(&vdev->pdev)) { warn_report("Device at %s is known to cause system instability" " issues during option rom execution", vdev->vbasedev.name); From patchwork Sat Feb 10 10:24:38 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Akihiko Odaki X-Patchwork-Id: 13552224 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 793FFC4829A for ; Sat, 10 Feb 2024 10:26:37 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rYkXi-00074c-0y; Sat, 10 Feb 2024 05:25:06 -0500 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 1rYkXh-000745-4a for qemu-devel@nongnu.org; Sat, 10 Feb 2024 05:25:05 -0500 Received: from mail-pl1-x630.google.com ([2607:f8b0:4864:20::630]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rYkXc-0002eI-Qd for qemu-devel@nongnu.org; Sat, 10 Feb 2024 05:25:04 -0500 Received: by mail-pl1-x630.google.com with SMTP id d9443c01a7336-1d7881b1843so16280525ad.3 for ; Sat, 10 Feb 2024 02:24:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1707560697; x=1708165497; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=EtHvqx0pYo51UarG6u8auC68i9+0d57qDsSmnOr8C/4=; b=JyWA9tL0PL4EYbLsWPH1jaPdZF1kZ8CgteDrG9cSbOL6U1zwrBpKzrBKn2BnbRge9O 9f33BmcUWka75RFCGsB4Qw0Vx+k7QIJ338qmRa60f7W/tQBB9yvR7IEHIyGp1BlJroAW CaRYHg3sSCQv7uYXL7xv9gr+3MjlZKz7IukfC7cthjZoKAYD0cAdROdvym2O2NfYlv0w 3ew8OlV+8ZiS94kMM6dCgjRkfQn6WVJpx2SA1lTsm+FmsBtdCjc2SxAu7/hpg0Soetmn kGJUjxaLC1LGV4z657JYr2AVQTbCLZu9ITsxhK0wk0U2VUOyZ76az09mdLLgR+Abg7n0 GpfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707560697; x=1708165497; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=EtHvqx0pYo51UarG6u8auC68i9+0d57qDsSmnOr8C/4=; b=UY/+Ofx89S14AdzlRi5yqUgJyCUy2XqHxvn01GX14qL+1RxBH9+IBbUKgOv96JHS4P QLpUO7MfA7+dG8pR+Dlh4gQQcdmg85554aDqnmR96TtD/0slT6vybqmqohAFfpyAaWBd glUX2WgGw8pfI0Jjh7YZam28a8xxkbufWO4RGi+Ukaz8+aSa2vNM2yBezI3nM0a62ptn tdsPI/Kq36p3KmS8KjOdNjQitIEFGGMap4M7NlWtm1h0LDx3ds+75aQXp+Cs/Jw18QQj WMmudWHtUQt4PwQ6+0kLBGgFcr+S55wBu7pqma9pQyTZhDLja7vIZEVTTuL5M8+8OWe2 F2nw== X-Gm-Message-State: AOJu0Yy1wO6YzjnxpJrEzf3APmgwlJ1vJypQgAyStZFec3H7JLcP++1f YW1LVuOCWI5xbpE4BQequ8S0rRfVCOf7x8w22EzdWA4W/1km8nPuGPtAo3W7ZKc= X-Google-Smtp-Source: AGHT+IGYE4PNSJjBF+CoByHfCaHkIA1VNxP61Kk3nOm0dMgbKj7wbi9/hpMc7ogtADbEXnT1/Pahlw== X-Received: by 2002:a17:902:e892:b0:1d8:f07f:7592 with SMTP id w18-20020a170902e89200b001d8f07f7592mr2732126plg.55.1707560697214; Sat, 10 Feb 2024 02:24:57 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCVRHrnhxgd2YqiGxRE2OhT4DvwSt9cngi6gIXemefyRFJqZ3MuqroESeqTHi19e35cJibHIjGkbCiEM8TG3PPkrrcFhR7qGZbET6//JWRVWn+ACbawuCn+wPU+ZJ2gp21dsGFz3XyBN2Kj3RaDKM3h/xGGU+3ZtGR96CNmUasVbTea7ImEPQGzfVXE/NzqYY8p1xI4tLJzh5JUderokBkvX2jzZ/qm2Gcrzl38mMepjp2zCc5Lr3Bqdu83WMsilDlQtit2TBkRFVbAwDiKyvVR3XUSPHeGYmUQpu0KsW2W10ANLj1w90isOfhvRqAlhSACSEh6lMaDK8QtJyfx0CrCdxeA1VnuWVjQo75wLO9WNvu7VkrQBk+AnHLdb4lmV6/SvEs5wc01R0nfRZpg92hW5Du626w5FBrJ/wwu3Mg== Received: from localhost ([157.82.200.138]) by smtp.gmail.com with UTF8SMTPSA id la11-20020a170902fa0b00b001d9daf742ccsm2782712plb.233.2024.02.10.02.24.54 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 10 Feb 2024 02:24:56 -0800 (PST) From: Akihiko Odaki Date: Sat, 10 Feb 2024 19:24:38 +0900 Subject: [PATCH v2 3/6] hw/qdev: Remove opts member MIME-Version: 1.0 Message-Id: <20240210-reuse-v2-3-24ba2a502692@daynix.com> References: <20240210-reuse-v2-0-24ba2a502692@daynix.com> In-Reply-To: <20240210-reuse-v2-0-24ba2a502692@daynix.com> To: "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goa?= =?utf-8?q?ter?= , Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Eduardo Habkost , Sriram Yagnaraman , Jason Wang , Keith Busch , Klaus Jensen Cc: qemu-devel@nongnu.org, qemu-block@nongnu.org, Akihiko Odaki X-Mailer: b4 0.12.3 Received-SPF: none client-ip=2607:f8b0:4864:20::630; envelope-from=akihiko.odaki@daynix.com; helo=mail-pl1-x630.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01 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+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org It is no longer used. Signed-off-by: Akihiko Odaki Reviewed-by: Philippe Mathieu-Daudé --- include/hw/qdev-core.h | 4 ---- hw/core/qdev.c | 1 - system/qdev-monitor.c | 12 +++++++----- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h index 151d9682380d..6befbca31117 100644 --- a/include/hw/qdev-core.h +++ b/include/hw/qdev-core.h @@ -237,10 +237,6 @@ struct DeviceState { * @pending_deleted_expires_ms: optional timeout for deletion events */ int64_t pending_deleted_expires_ms; - /** - * @opts: QDict of options for the device - */ - QDict *opts; /** * @hotplugged: was device added after PHASE_MACHINE_READY? */ diff --git a/hw/core/qdev.c b/hw/core/qdev.c index 43d863b0c5b0..c98691a90d48 100644 --- a/hw/core/qdev.c +++ b/hw/core/qdev.c @@ -706,7 +706,6 @@ static void device_finalize(Object *obj) dev->canonical_path = NULL; } - qobject_unref(dev->opts); g_free(dev->id); } diff --git a/system/qdev-monitor.c b/system/qdev-monitor.c index a13db763e5dd..71c00f62ee38 100644 --- a/system/qdev-monitor.c +++ b/system/qdev-monitor.c @@ -625,6 +625,7 @@ DeviceState *qdev_device_add_from_qdict(const QDict *opts, char *id; DeviceState *dev = NULL; BusState *bus = NULL; + QDict *properties; driver = qdict_get_try_str(opts, "driver"); if (!driver) { @@ -705,13 +706,14 @@ DeviceState *qdev_device_add_from_qdict(const QDict *opts, } /* set properties */ - dev->opts = qdict_clone_shallow(opts); - qdict_del(dev->opts, "driver"); - qdict_del(dev->opts, "bus"); - qdict_del(dev->opts, "id"); + properties = qdict_clone_shallow(opts); + qdict_del(properties, "driver"); + qdict_del(properties, "bus"); + qdict_del(properties, "id"); - object_set_properties_from_keyval(&dev->parent_obj, dev->opts, from_json, + object_set_properties_from_keyval(&dev->parent_obj, properties, from_json, errp); + qobject_unref(properties); if (*errp) { goto err_del_dev; } From patchwork Sat Feb 10 10:24:39 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akihiko Odaki X-Patchwork-Id: 13552229 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 5C8DFC4829A for ; Sat, 10 Feb 2024 10:26:54 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rYkY2-00078D-F5; Sat, 10 Feb 2024 05:25:26 -0500 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 1rYkY0-00077i-Tt for qemu-devel@nongnu.org; Sat, 10 Feb 2024 05:25:24 -0500 Received: from mail-pl1-x631.google.com ([2607:f8b0:4864:20::631]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rYkXv-0002qg-Gm for qemu-devel@nongnu.org; Sat, 10 Feb 2024 05:25:20 -0500 Received: by mail-pl1-x631.google.com with SMTP id d9443c01a7336-1d93ddd76adso13965475ad.2 for ; Sat, 10 Feb 2024 02:25:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1707560717; x=1708165517; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=sVsDDgcIpEBlmcq1EWawWovzpkmUUsK5fa5lmtMzwhw=; b=jb3bOhuLabfGKeF6kVh+mDl0WZv+Y2PEyDtA1TmfxlLc/kq1TZWqGjm2ZB0QGJabAj FJqPM7ft9DtzmzhdPgmPBwlzNfIwvE2VUTA9C9WFZnUuBYkUdPWaA12zZX8r1Ep6ZjWy nNxVHWXWsTxNBDLAgjhtU6gVGpIZXF7DFSLLMqztpYWlp4rHOC8hjbY8AoUU+BnoJsqL 2BMqS1+1zKVUsHjh4oheuTsskRjaCM/RY3ntZ0vWlC9FyAJMNEWBey6h/h8hxuHuWWWJ r9CXGXmmdkoE5EnqnYXMNYcYrk8BriTmOObKg0oDYzcG4tXBKLWtbaZMmhnGo7cGtxeh nhMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707560717; x=1708165517; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=sVsDDgcIpEBlmcq1EWawWovzpkmUUsK5fa5lmtMzwhw=; b=vKoVfUQ4/2S1+exslwV1ac7yXXHWjnnS1UcNK9o3M0Mg0GnJ7pVOFABUPLy0rSDY1A S4+XDtX3Jsq5moel0TeoM22IexVYOztQCyKgBsyVkTNU3/8cEmqC759XHu2CcfveGuTR sTO5MCYdA4+LR82xMUqPEKBf1EBLVv1Gl2DboMtn9cyDwpUy2xlJ7GsO2oq99+y8QTnn 3OV7MwtDzciQI/Y+9/bgMklKSBIq8uHGn8Luyjf8jsHCx0C8Y4R/CcQwwonzDJ2JQ+mM nR5KdybS+69ngbQ08sBbn6FI+Fs0EyXXChcneO9KReLE2OimASz92O9wJ2Prfde1aN1n uW2A== X-Gm-Message-State: AOJu0YxE5s5mQjf2dbkqIJFMEH7V9uxz4njE7AXqhNmuziQV+K6t7AU5 fcZZ9Q2FoQNxA3pBpBAW8c+uMH6T/ffDiv5gzozJ9Erv4/dU+LTgpy6fOrXTVgA= X-Google-Smtp-Source: AGHT+IFNfUEb2c0Wqf+kcJOVHVMWxuGdI4nhv0ayt94jpSM/KDEF9RoKQws+A26PZM2XIyxcRHaCcA== X-Received: by 2002:a17:903:1cc:b0:1d9:8ac8:d79d with SMTP id e12-20020a17090301cc00b001d98ac8d79dmr1933607plh.19.1707560717406; Sat, 10 Feb 2024 02:25:17 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCXOwJUIFYlheqwOeaAiQJFsc8BDXryn9ieggJhHVbyj0uFPqi4sML/EB7UpoccunzM7m8UgS8/QaCdRXYxWPwv979LBKcTCdNLCuZ58zWALFuwjTH4otveBOlx/SYVEOfFDQrrOLvRxIGuxw9u/lPybTbc8fgslAnE3Ol95jrQe5LbpuLGJHzPQFTCKVofFEadoF4MYgqtZys78T5SAOqjw/qnzYCZfn55b2cKGrXDrDLDbv1mLmLKjejkdUM8fyaYPhP2OQSeoNlJkFu8H+FOOZw8KikEBrWn0BDQsU6xggHDdh/GV1AtdroqPRN+tgTlbHnh4zjHGRNerbpyxxvR0fp3LnCNyjYEp+rbgtJ/UVq5uHf+NsQyfgq8qHeS6EXEMiO7iPXpzGPk7Ig/3vsW/x6wEj4xpXwpRf/xe8Q== Received: from localhost ([157.82.200.138]) by smtp.gmail.com with UTF8SMTPSA id v2-20020a170903238200b001d7274cbd33sm2781554plh.121.2024.02.10.02.24.59 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 10 Feb 2024 02:25:01 -0800 (PST) From: Akihiko Odaki Date: Sat, 10 Feb 2024 19:24:39 +0900 Subject: [PATCH v2 4/6] pcie_sriov: Validate NumVFs MIME-Version: 1.0 Message-Id: <20240210-reuse-v2-4-24ba2a502692@daynix.com> References: <20240210-reuse-v2-0-24ba2a502692@daynix.com> In-Reply-To: <20240210-reuse-v2-0-24ba2a502692@daynix.com> To: "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goa?= =?utf-8?q?ter?= , Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Eduardo Habkost , Sriram Yagnaraman , Jason Wang , Keith Busch , Klaus Jensen Cc: qemu-devel@nongnu.org, qemu-block@nongnu.org, Akihiko Odaki X-Mailer: b4 0.12.3 Received-SPF: none client-ip=2607:f8b0:4864:20::631; envelope-from=akihiko.odaki@daynix.com; helo=mail-pl1-x631.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01 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+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org The guest may write NumVFs greater than TotalVFs and that can lead to buffer overflow in VF implementations. Fixes: 7c0fa8dff811 ("pcie: Add support for Single Root I/O Virtualization (SR/IOV)") Signed-off-by: Akihiko Odaki --- hw/pci/pcie_sriov.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hw/pci/pcie_sriov.c b/hw/pci/pcie_sriov.c index a1fe65f5d801..da209b7f47fd 100644 --- a/hw/pci/pcie_sriov.c +++ b/hw/pci/pcie_sriov.c @@ -176,6 +176,9 @@ static void register_vfs(PCIDevice *dev) assert(sriov_cap > 0); num_vfs = pci_get_word(dev->config + sriov_cap + PCI_SRIOV_NUM_VF); + if (num_vfs > pci_get_word(dev->config + sriov_cap + PCI_SRIOV_TOTAL_VF)) { + return; + } dev->exp.sriov_pf.vf = g_new(PCIDevice *, num_vfs); From patchwork Sat Feb 10 10:24:40 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akihiko Odaki X-Patchwork-Id: 13552227 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 9573CC48BC0 for ; Sat, 10 Feb 2024 10:26:37 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rYkY5-00078r-5a; Sat, 10 Feb 2024 05:25:29 -0500 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 1rYkY3-00078N-3L for qemu-devel@nongnu.org; Sat, 10 Feb 2024 05:25:27 -0500 Received: from mail-oo1-xc2f.google.com ([2607:f8b0:4864:20::c2f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rYkY0-0002rE-LE for qemu-devel@nongnu.org; Sat, 10 Feb 2024 05:25:26 -0500 Received: by mail-oo1-xc2f.google.com with SMTP id 006d021491bc7-59a8b9b327aso633192eaf.2 for ; Sat, 10 Feb 2024 02:25:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1707560722; x=1708165522; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=ae5CtOMhVksha9DVXSsd/Qrfo+qE+N9LWIHAOndZ5zw=; b=a02dkI5ZijeWB5pOqrUr6u7qi31AhZTj8qAvHUOqeQl09xbdCkAf0TXK7IbVN+eagH du13VMWFeZi4plUQvfzfCm7eh3+O+bBY6vqe8fbOCKTxtk3Uu6D6nXOnNxOFe1bm8iR5 oa/7S2mx2xcr+oU31+SqqFRsnPvq2rT7naMQGF7J4Z2guJVG675Ay66kd/r2O+Jt96XS G6kWrBVzHHhgrtB4Jy3vEhb2OexO+ADvsiORJFddPkkLpS/g8wyWZLSElO6uk3bscy+9 sPR4IFcg7zECmLmhRwCibLEc4ElwMeYIDs74Zqd6HlS5Jsh61jqIYAZPW/FXILwyw0c5 mZmg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707560722; x=1708165522; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ae5CtOMhVksha9DVXSsd/Qrfo+qE+N9LWIHAOndZ5zw=; b=Nk66RXdaOSxdxaWcTM+ceerVSbeHuNAFVKCHlvrgvA0vraDXyqYqUSG3TUUFwxUY/z hQqpI2ZPQm7xZ3GABsJr5zUziMrE/Y7MjLqcJuDKGRPikLnbiXRGzeVqeiPTNmPF4HD6 ErhiAqKOBwxqx+siuGwclQFU9BIiJwKmyvTQ9mWLkwiApgNdzKy/9ZA8fqpUrV9zmqJH xvx11y+p/HpBwoFx/IqW69yQ22YjSkX/p3stpSlotZna6uqwSe7vPx7/6ztj4rAJk8V/ 5RLNOIMjgDFwBwcDRqwie+qI9dlthu+xY/Q68jStpPQnwAhEJBsZeTQUlQamcgQBNnH1 k2gQ== X-Gm-Message-State: AOJu0Yw4vu72s/LEUSirpHFYYwyZzP0ASsukyw5Ij1iWMfJEhzn2QpRT Szx/2ICy2kqz0JGfD5lEzbLFKIJDwL0VksZq5w/0hbWHTlRaw7iGFbGAAdymn1A= X-Google-Smtp-Source: AGHT+IEl0tmtKaY2T/DzBZDHjDXBLz8o/G9SOa+SQwjN0W3vzzB47M0CbMWLw2seYoOeBOPJAOvKjA== X-Received: by 2002:a05:6358:5991:b0:178:de46:783c with SMTP id c17-20020a056358599100b00178de46783cmr3395436rwf.16.1707560722607; Sat, 10 Feb 2024 02:25:22 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCWrIkHfCOjYxfLdFe0BuZwa/ZnShFEEFYmDXBD+Z2SySG5Vz055Gao1FuwD9o2ltm/qEKVUZfO912Qj7SXf4oh6XK3rJxbJJc5AqdX8pBevfVL7FM1MMfuoJ02xkRZLCI63jls2/RLMIwOXmjQQk+bxhugLVBW4/NnxpS3Lsd/HUxoWZfT7DSC/VO3//Bduy1b/ogEotVvO9Z2shx29Ympz96W0h6fboKQnkGBSQsSitHgzsk1A+6JEsopI6OhHLZZ13dTMgqN0zLNIlJ/GGHqOQKMC8BYq7FiwgZqRZrR0zAItu0DIMeRpZzjwnLn5xNmRH/da/BcQAZlC56Ytr/TtPn95T7xdiW3Y8QztG7E2hEivo64fytyaTyQfcNxZWTa9MWvD3fm6Vi1zg5dqYcCkuyvauenAQatc9G4dqA== Received: from localhost ([157.82.200.138]) by smtp.gmail.com with UTF8SMTPSA id r18-20020a62e412000000b006e03ab56acbsm1967105pfh.217.2024.02.10.02.25.19 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 10 Feb 2024 02:25:22 -0800 (PST) From: Akihiko Odaki Date: Sat, 10 Feb 2024 19:24:40 +0900 Subject: [PATCH v2 5/6] pcie_sriov: Reuse SR-IOV VF device instances MIME-Version: 1.0 Message-Id: <20240210-reuse-v2-5-24ba2a502692@daynix.com> References: <20240210-reuse-v2-0-24ba2a502692@daynix.com> In-Reply-To: <20240210-reuse-v2-0-24ba2a502692@daynix.com> To: "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goa?= =?utf-8?q?ter?= , Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Eduardo Habkost , Sriram Yagnaraman , Jason Wang , Keith Busch , Klaus Jensen Cc: qemu-devel@nongnu.org, qemu-block@nongnu.org, Akihiko Odaki X-Mailer: b4 0.12.3 Received-SPF: none client-ip=2607:f8b0:4864:20::c2f; envelope-from=akihiko.odaki@daynix.com; helo=mail-oo1-xc2f.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01 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+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Disable SR-IOV VF devices by reusing code to power down PCI devices instead of removing them when the guest requests to disable VFs. This allows to realize devices and report VF realization errors at PF realization time. Signed-off-by: Akihiko Odaki --- docs/pcie_sriov.txt | 8 ++-- include/hw/pci/pci.h | 2 +- include/hw/pci/pci_device.h | 2 +- include/hw/pci/pcie_sriov.h | 6 +-- hw/net/igb.c | 13 ++++-- hw/nvme/ctrl.c | 24 +++++++---- hw/pci/pci.c | 18 ++++---- hw/pci/pci_host.c | 4 +- hw/pci/pcie.c | 4 +- hw/pci/pcie_sriov.c | 100 ++++++++++++++++++++------------------------ 10 files changed, 97 insertions(+), 84 deletions(-) diff --git a/docs/pcie_sriov.txt b/docs/pcie_sriov.txt index a47aad0bfab0..ab2142807f79 100644 --- a/docs/pcie_sriov.txt +++ b/docs/pcie_sriov.txt @@ -52,9 +52,11 @@ setting up a BAR for a VF. ... /* Add and initialize the SR/IOV capability */ - pcie_sriov_pf_init(d, 0x200, "your_virtual_dev", - vf_devid, initial_vfs, total_vfs, - fun_offset, stride); + if (!pcie_sriov_pf_init(d, 0x200, "your_virtual_dev", + vf_devid, initial_vfs, total_vfs, + fun_offset, stride, errp)) { + return; + } /* Set up individual VF BARs (parameters as for normal BARs) */ pcie_sriov_pf_init_vf_bar( ... ) diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h index fa6313aabc43..fae83b9b723c 100644 --- a/include/hw/pci/pci.h +++ b/include/hw/pci/pci.h @@ -643,6 +643,6 @@ static inline void pci_irq_pulse(PCIDevice *pci_dev) } MSIMessage pci_get_msi_message(PCIDevice *dev, int vector); -void pci_set_power(PCIDevice *pci_dev, bool state); +void pci_set_enabled(PCIDevice *pci_dev, bool state); #endif diff --git a/include/hw/pci/pci_device.h b/include/hw/pci/pci_device.h index 54fa0676abf1..f5aba8ae2675 100644 --- a/include/hw/pci/pci_device.h +++ b/include/hw/pci/pci_device.h @@ -56,7 +56,7 @@ typedef struct PCIReqIDCache PCIReqIDCache; struct PCIDevice { DeviceState qdev; bool partially_hotplugged; - bool has_power; + bool is_enabled; /* PCI config space */ uint8_t *config; diff --git a/include/hw/pci/pcie_sriov.h b/include/hw/pci/pcie_sriov.h index 095fb0c9edf9..d9a39daccac4 100644 --- a/include/hw/pci/pcie_sriov.h +++ b/include/hw/pci/pcie_sriov.h @@ -18,7 +18,6 @@ struct PCIESriovPF { uint16_t num_vfs; /* Number of virtual functions created */ uint8_t vf_bar_type[PCI_NUM_REGIONS]; /* Store type for each VF bar */ - const char *vfname; /* Reference to the device type used for the VFs */ PCIDevice **vf; /* Pointer to an array of num_vfs VF devices */ }; @@ -27,10 +26,11 @@ struct PCIESriovVF { uint16_t vf_number; /* Logical VF number of this function */ }; -void pcie_sriov_pf_init(PCIDevice *dev, uint16_t offset, +bool pcie_sriov_pf_init(PCIDevice *dev, uint16_t offset, const char *vfname, uint16_t vf_dev_id, uint16_t init_vfs, uint16_t total_vfs, - uint16_t vf_offset, uint16_t vf_stride); + uint16_t vf_offset, uint16_t vf_stride, + Error **errp); void pcie_sriov_pf_exit(PCIDevice *dev); /* Set up a VF bar in the SR/IOV bar area */ diff --git a/hw/net/igb.c b/hw/net/igb.c index 0b5c31a58bba..1079a33d4000 100644 --- a/hw/net/igb.c +++ b/hw/net/igb.c @@ -447,9 +447,16 @@ static void igb_pci_realize(PCIDevice *pci_dev, Error **errp) pcie_ari_init(pci_dev, 0x150); - pcie_sriov_pf_init(pci_dev, IGB_CAP_SRIOV_OFFSET, TYPE_IGBVF, - IGB_82576_VF_DEV_ID, IGB_MAX_VF_FUNCTIONS, IGB_MAX_VF_FUNCTIONS, - IGB_VF_OFFSET, IGB_VF_STRIDE); + if (!pcie_sriov_pf_init(pci_dev, IGB_CAP_SRIOV_OFFSET, + TYPE_IGBVF, IGB_82576_VF_DEV_ID, + IGB_MAX_VF_FUNCTIONS, IGB_MAX_VF_FUNCTIONS, + IGB_VF_OFFSET, IGB_VF_STRIDE, + errp)) { + pcie_cap_exit(pci_dev); + igb_cleanup_msix(s); + msi_uninit(pci_dev); + return; + } pcie_sriov_pf_init_vf_bar(pci_dev, IGBVF_MMIO_BAR_IDX, PCI_BASE_ADDRESS_MEM_TYPE_64 | PCI_BASE_ADDRESS_MEM_PREFETCH, diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c index f026245d1e9e..f8df622fe590 100644 --- a/hw/nvme/ctrl.c +++ b/hw/nvme/ctrl.c @@ -8031,7 +8031,8 @@ static uint64_t nvme_bar_size(unsigned total_queues, unsigned total_irqs, return bar_size; } -static void nvme_init_sriov(NvmeCtrl *n, PCIDevice *pci_dev, uint16_t offset) +static bool nvme_init_sriov(NvmeCtrl *n, PCIDevice *pci_dev, uint16_t offset, + Error **errp) { uint16_t vf_dev_id = n->params.use_intel_id ? PCI_DEVICE_ID_INTEL_NVME : PCI_DEVICE_ID_REDHAT_NVME; @@ -8040,12 +8041,17 @@ static void nvme_init_sriov(NvmeCtrl *n, PCIDevice *pci_dev, uint16_t offset) le16_to_cpu(cap->vifrsm), NULL, NULL); - pcie_sriov_pf_init(pci_dev, offset, "nvme", vf_dev_id, - n->params.sriov_max_vfs, n->params.sriov_max_vfs, - NVME_VF_OFFSET, NVME_VF_STRIDE); + if (!pcie_sriov_pf_init(pci_dev, offset, "nvme", vf_dev_id, + n->params.sriov_max_vfs, n->params.sriov_max_vfs, + NVME_VF_OFFSET, NVME_VF_STRIDE, + errp)) { + return false; + } pcie_sriov_pf_init_vf_bar(pci_dev, 0, PCI_BASE_ADDRESS_SPACE_MEMORY | PCI_BASE_ADDRESS_MEM_TYPE_64, bar_size); + + return true; } static int nvme_add_pm_capability(PCIDevice *pci_dev, uint8_t offset) @@ -8124,6 +8130,12 @@ static bool nvme_init_pci(NvmeCtrl *n, PCIDevice *pci_dev, Error **errp) return false; } + if (!pci_is_vf(pci_dev) && n->params.sriov_max_vfs && + !nvme_init_sriov(n, pci_dev, 0x120, errp)) { + msix_uninit(pci_dev, &n->bar0, &n->bar0); + return false; + } + nvme_update_msixcap_ts(pci_dev, n->conf_msix_qsize); if (n->params.cmb_size_mb) { @@ -8134,10 +8146,6 @@ static bool nvme_init_pci(NvmeCtrl *n, PCIDevice *pci_dev, Error **errp) nvme_init_pmr(n, pci_dev); } - if (!pci_is_vf(pci_dev) && n->params.sriov_max_vfs) { - nvme_init_sriov(n, pci_dev, 0x120); - } - return true; } diff --git a/hw/pci/pci.c b/hw/pci/pci.c index d08548d8ffe9..727d812f419f 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -1522,7 +1522,7 @@ static void pci_update_mappings(PCIDevice *d) continue; new_addr = pci_bar_address(d, i, r->type, r->size); - if (!d->has_power) { + if (!d->is_enabled) { new_addr = PCI_BAR_UNMAPPED; } @@ -1610,7 +1610,7 @@ void pci_default_write_config(PCIDevice *d, uint32_t addr, uint32_t val_in, int pci_update_irq_disabled(d, was_irq_disabled); memory_region_set_enabled(&d->bus_master_enable_region, (pci_get_word(d->config + PCI_COMMAND) - & PCI_COMMAND_MASTER) && d->has_power); + & PCI_COMMAND_MASTER) && d->is_enabled); } msi_write_config(d, addr, val_in, l); @@ -2179,7 +2179,9 @@ static void pci_qdev_realize(DeviceState *qdev, Error **errp) return; } - pci_set_power(pci_dev, true); + if (!pci_is_vf(pci_dev)) { + pci_set_enabled(pci_dev, true); + } pci_dev->msi_trigger = pci_msi_trigger; } @@ -2835,18 +2837,18 @@ MSIMessage pci_get_msi_message(PCIDevice *dev, int vector) return msg; } -void pci_set_power(PCIDevice *d, bool state) +void pci_set_enabled(PCIDevice *d, bool state) { - if (d->has_power == state) { + if (d->is_enabled == state) { return; } - d->has_power = state; + d->is_enabled = state; pci_update_mappings(d); memory_region_set_enabled(&d->bus_master_enable_region, (pci_get_word(d->config + PCI_COMMAND) - & PCI_COMMAND_MASTER) && d->has_power); - if (!d->has_power) { + & PCI_COMMAND_MASTER) && d->is_enabled); + if (d->qdev.realized) { pci_device_reset(d); } } diff --git a/hw/pci/pci_host.c b/hw/pci/pci_host.c index dfe6fe618401..d7e13d72ce07 100644 --- a/hw/pci/pci_host.c +++ b/hw/pci/pci_host.c @@ -86,7 +86,7 @@ void pci_host_config_write_common(PCIDevice *pci_dev, uint32_t addr, * allowing direct removal of unexposed functions. */ if ((pci_dev->qdev.hotplugged && !pci_get_function_0(pci_dev)) || - !pci_dev->has_power || is_pci_dev_ejected(pci_dev)) { + !pci_dev->is_enabled || is_pci_dev_ejected(pci_dev)) { return; } @@ -111,7 +111,7 @@ uint32_t pci_host_config_read_common(PCIDevice *pci_dev, uint32_t addr, * allowing direct removal of unexposed functions. */ if ((pci_dev->qdev.hotplugged && !pci_get_function_0(pci_dev)) || - !pci_dev->has_power || is_pci_dev_ejected(pci_dev)) { + !pci_dev->is_enabled || is_pci_dev_ejected(pci_dev)) { return ~0x0; } diff --git a/hw/pci/pcie.c b/hw/pci/pcie.c index 6db0cf69cd8a..f34c157e1fd3 100644 --- a/hw/pci/pcie.c +++ b/hw/pci/pcie.c @@ -394,7 +394,9 @@ static void pcie_set_power_device(PCIBus *bus, PCIDevice *dev, void *opaque) { bool *power = opaque; - pci_set_power(dev, *power); + if (!pci_is_vf(dev)) { + pci_set_enabled(dev, *power); + } } static void pcie_cap_update_power(PCIDevice *hotplug_dev) diff --git a/hw/pci/pcie_sriov.c b/hw/pci/pcie_sriov.c index da209b7f47fd..9ba34cf8f8ed 100644 --- a/hw/pci/pcie_sriov.c +++ b/hw/pci/pcie_sriov.c @@ -20,15 +20,29 @@ #include "qapi/error.h" #include "trace.h" -static PCIDevice *register_vf(PCIDevice *pf, int devfn, - const char *name, uint16_t vf_num); -static void unregister_vfs(PCIDevice *dev); +static void unrealize_vfs(PCIDevice *dev, uint16_t total_vfs) +{ + for (uint16_t i = 0; i < total_vfs; i++) { + Error *err = NULL; + PCIDevice *vf = dev->exp.sriov_pf.vf[i]; + if (!object_property_set_bool(OBJECT(vf), "realized", false, &err)) { + error_reportf_err(err, "Failed to unplug: "); + } + object_unparent(OBJECT(vf)); + object_unref(OBJECT(vf)); + } + g_free(dev->exp.sriov_pf.vf); + dev->exp.sriov_pf.vf = NULL; +} -void pcie_sriov_pf_init(PCIDevice *dev, uint16_t offset, +bool pcie_sriov_pf_init(PCIDevice *dev, uint16_t offset, const char *vfname, uint16_t vf_dev_id, uint16_t init_vfs, uint16_t total_vfs, - uint16_t vf_offset, uint16_t vf_stride) + uint16_t vf_offset, uint16_t vf_stride, + Error **errp) { + BusState *bus = qdev_get_parent_bus(&dev->qdev); + int32_t devfn = dev->devfn + vf_offset; uint8_t *cfg = dev->config + offset; uint8_t *wmask; @@ -36,7 +50,6 @@ void pcie_sriov_pf_init(PCIDevice *dev, uint16_t offset, offset, PCI_EXT_CAP_SRIOV_SIZEOF); dev->exp.sriov_cap = offset; dev->exp.sriov_pf.num_vfs = 0; - dev->exp.sriov_pf.vfname = g_strdup(vfname); dev->exp.sriov_pf.vf = NULL; pci_set_word(cfg + PCI_SRIOV_VF_OFFSET, vf_offset); @@ -69,13 +82,35 @@ void pcie_sriov_pf_init(PCIDevice *dev, uint16_t offset, pci_set_word(wmask + PCI_SRIOV_SYS_PGSIZE, 0x553); qdev_prop_set_bit(&dev->qdev, "multifunction", true); + + dev->exp.sriov_pf.vf = g_new(PCIDevice *, total_vfs); + + for (uint16_t i = 0; i < total_vfs; i++) { + PCIDevice *vf = pci_new(devfn, vfname); + vf->exp.sriov_vf.pf = dev; + vf->exp.sriov_vf.vf_number = i; + + if (!qdev_realize(&vf->qdev, bus, errp)) { + unrealize_vfs(dev, i); + return false; + } + + /* set vid/did according to sr/iov spec - they are not used */ + pci_config_set_vendor_id(vf->config, 0xffff); + pci_config_set_device_id(vf->config, 0xffff); + + dev->exp.sriov_pf.vf[i] = vf; + devfn += vf_stride; + } + + return true; } void pcie_sriov_pf_exit(PCIDevice *dev) { - unregister_vfs(dev); - g_free((char *)dev->exp.sriov_pf.vfname); - dev->exp.sriov_pf.vfname = NULL; + uint8_t *cfg = dev->config + dev->exp.sriov_cap; + + unrealize_vfs(dev, pci_get_word(cfg + PCI_SRIOV_TOTAL_VF)); } void pcie_sriov_pf_init_vf_bar(PCIDevice *dev, int region_num, @@ -141,38 +176,11 @@ void pcie_sriov_vf_register_bar(PCIDevice *dev, int region_num, } } -static PCIDevice *register_vf(PCIDevice *pf, int devfn, const char *name, - uint16_t vf_num) -{ - PCIDevice *dev = pci_new(devfn, name); - dev->exp.sriov_vf.pf = pf; - dev->exp.sriov_vf.vf_number = vf_num; - PCIBus *bus = pci_get_bus(pf); - Error *local_err = NULL; - - qdev_realize(&dev->qdev, &bus->qbus, &local_err); - if (local_err) { - error_report_err(local_err); - return NULL; - } - - /* set vid/did according to sr/iov spec - they are not used */ - pci_config_set_vendor_id(dev->config, 0xffff); - pci_config_set_device_id(dev->config, 0xffff); - - return dev; -} - static void register_vfs(PCIDevice *dev) { uint16_t num_vfs; uint16_t i; uint16_t sriov_cap = dev->exp.sriov_cap; - uint16_t vf_offset = - pci_get_word(dev->config + sriov_cap + PCI_SRIOV_VF_OFFSET); - uint16_t vf_stride = - pci_get_word(dev->config + sriov_cap + PCI_SRIOV_VF_STRIDE); - int32_t devfn = dev->devfn + vf_offset; assert(sriov_cap > 0); num_vfs = pci_get_word(dev->config + sriov_cap + PCI_SRIOV_NUM_VF); @@ -180,18 +188,10 @@ static void register_vfs(PCIDevice *dev) return; } - dev->exp.sriov_pf.vf = g_new(PCIDevice *, num_vfs); - trace_sriov_register_vfs(dev->name, PCI_SLOT(dev->devfn), PCI_FUNC(dev->devfn), num_vfs); for (i = 0; i < num_vfs; i++) { - dev->exp.sriov_pf.vf[i] = register_vf(dev, devfn, - dev->exp.sriov_pf.vfname, i); - if (!dev->exp.sriov_pf.vf[i]) { - num_vfs = i; - break; - } - devfn += vf_stride; + pci_set_enabled(dev->exp.sriov_pf.vf[i], true); } dev->exp.sriov_pf.num_vfs = num_vfs; } @@ -204,16 +204,8 @@ static void unregister_vfs(PCIDevice *dev) trace_sriov_unregister_vfs(dev->name, PCI_SLOT(dev->devfn), PCI_FUNC(dev->devfn), num_vfs); for (i = 0; i < num_vfs; i++) { - Error *err = NULL; - PCIDevice *vf = dev->exp.sriov_pf.vf[i]; - if (!object_property_set_bool(OBJECT(vf), "realized", false, &err)) { - error_reportf_err(err, "Failed to unplug: "); - } - object_unparent(OBJECT(vf)); - object_unref(OBJECT(vf)); + pci_set_enabled(dev->exp.sriov_pf.vf[i], false); } - g_free(dev->exp.sriov_pf.vf); - dev->exp.sriov_pf.vf = NULL; dev->exp.sriov_pf.num_vfs = 0; pci_set_word(dev->config + dev->exp.sriov_cap + PCI_SRIOV_NUM_VF, 0); } From patchwork Sat Feb 10 10:24:41 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akihiko Odaki X-Patchwork-Id: 13552228 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 29E77C48260 for ; Sat, 10 Feb 2024 10:26:53 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rYkY8-0007A5-E1; Sat, 10 Feb 2024 05:25:32 -0500 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 1rYkY5-00079P-Py for qemu-devel@nongnu.org; Sat, 10 Feb 2024 05:25:29 -0500 Received: from mail-pl1-x636.google.com ([2607:f8b0:4864:20::636]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rYkY4-0002xm-DO for qemu-devel@nongnu.org; Sat, 10 Feb 2024 05:25:29 -0500 Received: by mail-pl1-x636.google.com with SMTP id d9443c01a7336-1d751bc0c15so16819925ad.2 for ; Sat, 10 Feb 2024 02:25:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1707560727; x=1708165527; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=HYSjFZHgQ2mbSqHRTj9z4C9g2BrbZ8iNuTfeoBp92uM=; b=BPgJyd2YvFimCl1yOL7WV2xD3kbSoiDk0WASS8MeOzLKfBQYxcBx2Go3B+KLSh57gn LfDe3jvLfKpCIq3gLJeJ9ZoCsn0rdo+u2Zrhf6h/m7agcUhdde+tJwNav9DC4OLxs0Zk fHXxqkY2hi/hVwW7sE3Q0Hsm4I+fVyTVz/zvJJxWeSgh2x4qLSzD+CaK7wJtW8TQnXkr 2qEUc0AHpU5C0Xm/3odvdXfjjrVzhxHWig8SelwSEQrekQz2gSRrdPeLQHa09aNrGk4f SWLrBo6FQq2PbWQ4SLNrsfsaUcb9b7KdAki7fYhYvqZwP7Q6aDTwPHjgXoAov7Rxbsld TJ0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707560727; x=1708165527; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=HYSjFZHgQ2mbSqHRTj9z4C9g2BrbZ8iNuTfeoBp92uM=; b=GoQsAfbpKP7w8YaW2lU6wei7PsI/8yiqGgtbGlSPRiTuqQ6UqDELCqoSuzU+Kuyvy/ dvTWJHY8rkiybigA7Kgv8E67FmALIq4nirxX6/I7S7mCm2SQlLvNe7aTAMYaGuoscc8H XUxgo6/yrxnThl6T7KLtm12gUO4FFUVGr37Izqp+nrcpHJKKOp7sHT6Or3NsU64lOcPj 05lnI2JoPOrOYSn//qOK2tuUMJnH3/fqamJPPUUTj1uajggc2j+I3ZUcTSgvHRcbY/Ee Viv9tGBxTuPjq+yn17MOqbv0wXTsyFq++701V3BqA3TXgcBT2X1y2fbxZkAEXqUr8iM9 MovA== X-Gm-Message-State: AOJu0YzysyyPfhlyFy2sKlPLpYJudzLbLQOE6TMVk1piZBU/ZUIpci5f 5ZN+pqDQffxtpowsN9BNW0L49p3B3TWiVLFnaDTJRW3VyUljHI1c6fkkbRt/mWo= X-Google-Smtp-Source: AGHT+IGQ5aM221Wc+qYNnPkwBsvvR3Eberqq3vc7FhS4p+fUTry0/8lA9fzDI02NO/aUK8tdVyy/Ug== X-Received: by 2002:a17:902:c60a:b0:1d9:8549:48de with SMTP id r10-20020a170902c60a00b001d9854948demr1586878plr.27.1707560727100; Sat, 10 Feb 2024 02:25:27 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCUoyMEgFesgaCR8VJ9Rh14JN+NimmFvywA076D0js6O07lKOTz8gN6Zk4wwhOganlJ+rCMy2DUt4g9YZq0NAsKeKqGywsaQs1KZ23uxpbV4sY+xda1XIaFiQfubQqQejOmfJJavmPlkN2aEq8Lh5FIuZOoNoxiqj5oaSYkGOGI+bcHnGbUwZC4FGWiLzcP7qPocGjZM/BUXWNEdv7+fvMHZWNznE6xT1J8RqYqKVpTYijqobmHj8xetNibNlFipbV0hVCc10bMnBKD7T2W2kyMPKbu/Imv84n3f+/TDJ2oourFeKr8TyyzmsTzgLUwO8h0hCoPsa0Jq/1xh2FztQ28Srrs6JYyMRQfHlePXC9zway9pR/7KKewfFQdFK1NXjaaM/YRQQFZjw+w8rkxCKhe3VkAWfZnw+vfBmerSzw== Received: from localhost ([157.82.200.138]) by smtp.gmail.com with UTF8SMTPSA id ko13-20020a17090307cd00b001d88d791eccsm2802749plb.160.2024.02.10.02.25.24 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 10 Feb 2024 02:25:26 -0800 (PST) From: Akihiko Odaki Date: Sat, 10 Feb 2024 19:24:41 +0900 Subject: [PATCH v2 6/6] pcie_sriov: Release VFs failed to realize MIME-Version: 1.0 Message-Id: <20240210-reuse-v2-6-24ba2a502692@daynix.com> References: <20240210-reuse-v2-0-24ba2a502692@daynix.com> In-Reply-To: <20240210-reuse-v2-0-24ba2a502692@daynix.com> To: "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goa?= =?utf-8?q?ter?= , Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Eduardo Habkost , Sriram Yagnaraman , Jason Wang , Keith Busch , Klaus Jensen Cc: qemu-devel@nongnu.org, qemu-block@nongnu.org, Akihiko Odaki X-Mailer: b4 0.12.3 Received-SPF: none client-ip=2607:f8b0:4864:20::636; envelope-from=akihiko.odaki@daynix.com; helo=mail-pl1-x636.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01 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+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Release VFs failed to realize just as we do in unregister_vfs(). Fixes: 7c0fa8dff811 ("pcie: Add support for Single Root I/O Virtualization (SR/IOV)") Signed-off-by: Akihiko Odaki --- hw/pci/pcie_sriov.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hw/pci/pcie_sriov.c b/hw/pci/pcie_sriov.c index 9ba34cf8f8ed..9d668b8d6c17 100644 --- a/hw/pci/pcie_sriov.c +++ b/hw/pci/pcie_sriov.c @@ -91,6 +91,8 @@ bool pcie_sriov_pf_init(PCIDevice *dev, uint16_t offset, vf->exp.sriov_vf.vf_number = i; if (!qdev_realize(&vf->qdev, bus, errp)) { + object_unparent(OBJECT(vf)); + object_unref(vf); unrealize_vfs(dev, i); return false; }