From nobody Sun Feb 8 19:25:47 2026 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=quarantine dis=none) header.from=suse.com ARC-Seal: i=1; a=rsa-sha256; t=1665048599; cv=none; d=zohomail.com; s=zohoarc; b=h1PCssB3UltEI+7OHA0QYBf5AZ+t2RPXVPJ7kZi86DOWEZDEmr85lZrL2aacmb7X1aNk8DePyNr8eQ68cOgbU957zD5ejJiKkNjDVr21/OiaENbVbovsKNLHwTdD9iGM9Mjhkedqm2kMLjd6S0oVMyGcJBE6YG47C/eedr59c4w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1665048599; h=Content-Transfer-Encoding:Cc:Date:From:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:To; bh=L7RZFM5d4dnIi1GRTKhMwES2/uyXuvfgoPRuTe96ogM=; b=RzUqgvWemnAzlU6EHexYX0xIUFb/II3cM5+XCngvDcQig1BoKwukx+EKEvx9dJT/0P0BAQhMcegOHwnMyx71RqQHcZ1qYwsX6MoAsH0zd905jnqXB4hK0H5zjt/P+5GblsRZmbJqggRHIFj9DYux5Kw9jrPsgLTwA6uqyX3ChkE= 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=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1665048599361517.205052094789; Thu, 6 Oct 2022 02:29:59 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.416787.661469 (Exim 4.92) (envelope-from ) id 1ogNCA-0002Ab-4G; Thu, 06 Oct 2022 09:29:34 +0000 Received: by outflank-mailman (output) from mailman id 416787.661469; Thu, 06 Oct 2022 09:29:34 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ogNCA-0002AU-1V; Thu, 06 Oct 2022 09:29:34 +0000 Received: by outflank-mailman (input) for mailman id 416787; Thu, 06 Oct 2022 09:29:33 +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 1ogNC9-0002AO-Gh for xen-devel@lists.xenproject.org; Thu, 06 Oct 2022 09:29:33 +0000 Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.220.28]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 62165700-4559-11ed-964a-05401a9f4f97; Thu, 06 Oct 2022 11:29:32 +0200 (CEST) Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id 772132197F; Thu, 6 Oct 2022 09:29:31 +0000 (UTC) Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 3D0A51376E; Thu, 6 Oct 2022 09:29:31 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id Plt5DfufPmNIVAAAMHmgww (envelope-from ); Thu, 06 Oct 2022 09:29:31 +0000 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: 62165700-4559-11ed-964a-05401a9f4f97 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1; t=1665048571; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=L7RZFM5d4dnIi1GRTKhMwES2/uyXuvfgoPRuTe96ogM=; b=Ci/J0VnfozSfW1tn8VrgOAeBJ0GslTmfAaoB/QDoi2AQB8js+3KZ7nxA6MxMpRSmow6xVi j2hmf+j+RbkQkmXnOztnb/pndUnWf44vQX6nrfx02GbaRGavkRcfPmN3RY6FOYJjL0o+cN 1YtXQlXJfn1PeYjiWilheBlS/EyqdzM= From: Juergen Gross To: linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org Cc: Juergen Gross , Stefano Stabellini , Oleksandr Tyshchenko , Bjorn Helgaas , xen-devel@lists.xenproject.org Subject: [PATCH] xen/pcifront: move xenstore config scanning into sub-function Date: Thu, 6 Oct 2022 11:29:29 +0200 Message-Id: <20221006092929.30041-1-jgross@suse.com> X-Mailer: git-send-email 2.35.3 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1665048600364100001 Content-Type: text/plain; charset="utf-8" pcifront_try_connect() and pcifront_attach_devices() share a large chunk of duplicated code for reading the config information from Xenstore, which only differs regarding a function call. Put that code into a new sub-function. While at it fix the error reporting in case the root-xx node had the wrong format. As the return value of pcifront_try_connect() and pcifront_attach_devices() are not used anywhere make those functions return void. As an additional bonus this removes the dubious return of -EFAULT in case of an unexpected driver state. Signed-off-by: Juergen Gross Reviewed-by: Jason Andryuk --- drivers/pci/xen-pcifront.c | 133 +++++++++++-------------------------- 1 file changed, 40 insertions(+), 93 deletions(-) diff --git a/drivers/pci/xen-pcifront.c b/drivers/pci/xen-pcifront.c index 689271c4245c..a68e47dcdd7e 100644 --- a/drivers/pci/xen-pcifront.c +++ b/drivers/pci/xen-pcifront.c @@ -819,76 +819,79 @@ static int pcifront_publish_info(struct pcifront_devi= ce *pdev) return err; } =20 -static int pcifront_try_connect(struct pcifront_device *pdev) +static void pcifront_connect(struct pcifront_device *pdev, bool rescan) { - int err =3D -EFAULT; + int err; int i, num_roots, len; char str[64]; unsigned int domain, bus; =20 - - /* Only connect once */ - if (xenbus_read_driver_state(pdev->xdev->nodename) !=3D - XenbusStateInitialised) - goto out; - - err =3D pcifront_connect_and_init_dma(pdev); - if (err && err !=3D -EEXIST) { - xenbus_dev_fatal(pdev->xdev, err, - "Error setting up PCI Frontend"); - goto out; - } - err =3D xenbus_scanf(XBT_NIL, pdev->xdev->otherend, "root_num", "%d", &num_roots); if (err =3D=3D -ENOENT) { xenbus_dev_error(pdev->xdev, err, "No PCI Roots found, trying 0000:00"); - err =3D pcifront_scan_root(pdev, 0, 0); + if (rescan) + err =3D pcifront_rescan_root(pdev, 0, 0); + else + err =3D pcifront_scan_root(pdev, 0, 0); if (err) { xenbus_dev_fatal(pdev->xdev, err, "Error scanning PCI root 0000:00"); - goto out; + return; } num_roots =3D 0; } else if (err !=3D 1) { - if (err =3D=3D 0) - err =3D -EINVAL; - xenbus_dev_fatal(pdev->xdev, err, + xenbus_dev_fatal(pdev->xdev, err >=3D 0 ? -EINVAL : err, "Error reading number of PCI roots"); - goto out; + return; } =20 for (i =3D 0; i < num_roots; i++) { len =3D snprintf(str, sizeof(str), "root-%d", i); - if (unlikely(len >=3D (sizeof(str) - 1))) { - err =3D -ENOMEM; - goto out; - } + if (unlikely(len >=3D (sizeof(str) - 1))) + return; =20 err =3D xenbus_scanf(XBT_NIL, pdev->xdev->otherend, str, "%x:%x", &domain, &bus); if (err !=3D 2) { - if (err >=3D 0) - err =3D -EINVAL; - xenbus_dev_fatal(pdev->xdev, err, + xenbus_dev_fatal(pdev->xdev, err >=3D 0 ? -EINVAL : err, "Error reading PCI root %d", i); - goto out; + return; } =20 - err =3D pcifront_scan_root(pdev, domain, bus); + if (rescan) + err =3D pcifront_rescan_root(pdev, domain, bus); + else + err =3D pcifront_scan_root(pdev, domain, bus); if (err) { xenbus_dev_fatal(pdev->xdev, err, "Error scanning PCI root %04x:%02x", domain, bus); - goto out; + return; } } =20 - err =3D xenbus_switch_state(pdev->xdev, XenbusStateConnected); + xenbus_switch_state(pdev->xdev, XenbusStateConnected); +} =20 -out: - return err; +static void pcifront_try_connect(struct pcifront_device *pdev) +{ + int err; + + /* Only connect once */ + if (xenbus_read_driver_state(pdev->xdev->nodename) !=3D + XenbusStateInitialised) + return; + + err =3D pcifront_connect_and_init_dma(pdev); + if (err && err !=3D -EEXIST) { + xenbus_dev_fatal(pdev->xdev, err, + "Error setting up PCI Frontend"); + return; + } + + pcifront_connect(pdev, false); } =20 static int pcifront_try_disconnect(struct pcifront_device *pdev) @@ -914,67 +917,11 @@ static int pcifront_try_disconnect(struct pcifront_de= vice *pdev) return err; } =20 -static int pcifront_attach_devices(struct pcifront_device *pdev) +static void pcifront_attach_devices(struct pcifront_device *pdev) { - int err =3D -EFAULT; - int i, num_roots, len; - unsigned int domain, bus; - char str[64]; - - if (xenbus_read_driver_state(pdev->xdev->nodename) !=3D + if (xenbus_read_driver_state(pdev->xdev->nodename) =3D=3D XenbusStateReconfiguring) - goto out; - - err =3D xenbus_scanf(XBT_NIL, pdev->xdev->otherend, - "root_num", "%d", &num_roots); - if (err =3D=3D -ENOENT) { - xenbus_dev_error(pdev->xdev, err, - "No PCI Roots found, trying 0000:00"); - err =3D pcifront_rescan_root(pdev, 0, 0); - if (err) { - xenbus_dev_fatal(pdev->xdev, err, - "Error scanning PCI root 0000:00"); - goto out; - } - num_roots =3D 0; - } else if (err !=3D 1) { - if (err =3D=3D 0) - err =3D -EINVAL; - xenbus_dev_fatal(pdev->xdev, err, - "Error reading number of PCI roots"); - goto out; - } - - for (i =3D 0; i < num_roots; i++) { - len =3D snprintf(str, sizeof(str), "root-%d", i); - if (unlikely(len >=3D (sizeof(str) - 1))) { - err =3D -ENOMEM; - goto out; - } - - err =3D xenbus_scanf(XBT_NIL, pdev->xdev->otherend, str, - "%x:%x", &domain, &bus); - if (err !=3D 2) { - if (err >=3D 0) - err =3D -EINVAL; - xenbus_dev_fatal(pdev->xdev, err, - "Error reading PCI root %d", i); - goto out; - } - - err =3D pcifront_rescan_root(pdev, domain, bus); - if (err) { - xenbus_dev_fatal(pdev->xdev, err, - "Error scanning PCI root %04x:%02x", - domain, bus); - goto out; - } - } - - xenbus_switch_state(pdev->xdev, XenbusStateConnected); - -out: - return err; + pcifront_connect(pdev, true); } =20 static int pcifront_detach_devices(struct pcifront_device *pdev) --=20 2.35.3