From patchwork Mon Aug 20 16:44:20 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luca Boccassi X-Patchwork-Id: 43793 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id E49B82E83; Mon, 20 Aug 2018 18:44:31 +0200 (CEST) Received: from mail-wr1-f66.google.com (mail-wr1-f66.google.com [209.85.221.66]) by dpdk.org (Postfix) with ESMTP id 06B5B1E2B for ; Mon, 20 Aug 2018 18:44:31 +0200 (CEST) Received: by mail-wr1-f66.google.com with SMTP id r16-v6so13506350wrt.11 for ; Mon, 20 Aug 2018 09:44:30 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=8jA1rguQNQsWxOIHsHF/vAjDwGqJikL8hM7ycAKTsa4=; b=q+BG2XOg2luBorRPNRmUaLpLNo6J/dfMnGamUxgzmm1LCUJHrPoTGBEYUZ1WKvq2nf pJaFINuRiUcNvd2DMI+i/P7uH79jMUNFZNK+H0+F5PTvbhs2ycSxviQ9ct0llWhOu8iB emQnKZigldb1MSUYlEuGKTefdNZ4yMZvIBQOh19TMllvM3PenQorQhczn5qPHEpCv4OW q/rbjzbbxIQXni18aB9U2lbZY1RL704Q2zrT6alyIvQgQqKUoSP6f7b2PxzGDfTAudTs 2M9W17QqOTaETvvJkDPCtuQ02xWlc8oyuCDuRUSETUg9RUO/FqcQpwj06g921oeYUnrw fBMw== X-Gm-Message-State: AOUpUlGqmfgQgAN8r1iaFA0ECGzNzpajsHjOh5wyy4ghJUBLUV4whkhz +FCvm1xaE5Q+EceoEtiEG2mABo9U X-Google-Smtp-Source: AA+uWPzBPJtTKgmTF8aF7i+hUpfUUzxgd6NlFCl4nTqnSr1tpdJQB91k3wMr+yoXc67MYmPI0lPykQ== X-Received: by 2002:adf:8405:: with SMTP id 5-v6mr29025871wrf.41.1534783470364; Mon, 20 Aug 2018 09:44:30 -0700 (PDT) Received: from localhost ([2a01:4b00:f419:6f00:8361:8946:ba2b:d556]) by smtp.gmail.com with ESMTPSA id v21-v6sm6884760wrd.4.2018.08.20.09.44.28 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 20 Aug 2018 09:44:28 -0700 (PDT) From: Luca Boccassi To: dev@dpdk.org Cc: maxime.coquelin@redhat.com, zhihong.wang@intel.com, tiwei.bie@intel.com, bruce.richardson@intel.com, brian.russell@intl.att.com Date: Mon, 20 Aug 2018 17:44:20 +0100 Message-Id: <20180820164421.28763-1-bluca@debian.org> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180816184750.30843-1-bluca@debian.org> References: <20180816184750.30843-1-bluca@debian.org> Subject: [dpdk-dev] [PATCH v3 1/2] bus/pci: harmonize and document rte_pci_read_config return value X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On Linux, rte_pci_read_config on success returns the number of read bytes, but on BSD it returns 0. Document the return values, and have BSD behave as Linux does. At least one case (bnx2x PMD) treats 0 as an error, so the change makes sense also for that. Signed-off-by: Luca Boccassi --- drivers/bus/pci/bsd/pci.c | 4 +++- drivers/bus/pci/rte_bus_pci.h | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/bus/pci/bsd/pci.c b/drivers/bus/pci/bsd/pci.c index 655b34b7e4..175d83cf1b 100644 --- a/drivers/bus/pci/bsd/pci.c +++ b/drivers/bus/pci/bsd/pci.c @@ -439,6 +439,8 @@ int rte_pci_read_config(const struct rte_pci_device *dev, { int fd = -1; int size; + /* Copy Linux implementation's behaviour */ + const int return_len = len; struct pci_io pi = { .pi_sel = { .pc_domain = dev->addr.domain, @@ -469,7 +471,7 @@ int rte_pci_read_config(const struct rte_pci_device *dev, } close(fd); - return 0; + return return_len; error: if (fd >= 0) diff --git a/drivers/bus/pci/rte_bus_pci.h b/drivers/bus/pci/rte_bus_pci.h index 0d1955ffe0..df8f64798d 100644 --- a/drivers/bus/pci/rte_bus_pci.h +++ b/drivers/bus/pci/rte_bus_pci.h @@ -219,6 +219,8 @@ void rte_pci_unregister(struct rte_pci_driver *driver); * The length of the data buffer. * @param offset * The offset into PCI config space + * @return + * Number of bytes read on success, negative on error. */ int rte_pci_read_config(const struct rte_pci_device *device, void *buf, size_t len, off_t offset); From patchwork Mon Aug 20 16:44:21 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luca Boccassi X-Patchwork-Id: 43794 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 0D0C74C90; Mon, 20 Aug 2018 18:44:35 +0200 (CEST) Received: from mail-wm0-f66.google.com (mail-wm0-f66.google.com [74.125.82.66]) by dpdk.org (Postfix) with ESMTP id 047704C72 for ; Mon, 20 Aug 2018 18:44:32 +0200 (CEST) Received: by mail-wm0-f66.google.com with SMTP id i134-v6so7521174wmf.0 for ; Mon, 20 Aug 2018 09:44:32 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=tquBm/nu+71UUlE4McGkMI5f0hlcGYZ8F+lSdq1weO8=; b=gMxHOrV4/jnvJxABp0LCU95fWyMESVS3t6SDbKESP0zF/8xh6coxyjy0QCmo84MMrT F3KBmAZXFTDyYNgM4FF1kakeFqi85BtH8A7LaiAhQVUrnR2ifI5JHX7H9YG+ODvnHAQ/ frdbrFDbzr4zPLs8HReFMm96ByUrYfk6UXN0COANC+RItOaDBrg5rao4jOqoobJDclyL Gg9JdtBfnBnHz+uqTMuMrNBKJkVJRjJKcTAIIXoeAXWx5RuQkQq6g5UEpDNyptNpGPbB 31cicWwoJjw4OjtYDg4QyNsfJB8LWbF3mMWUyyPd/72FVZhKCIRw92/tJHxxwrOjhb8a nw2A== X-Gm-Message-State: AOUpUlELOHaIlZSKspjdTroR/LXTRm2q1NPjypFoqoMzaCPrh//NI70N r3m/N5mZl+XFOgXQAFc/1NahIGjf X-Google-Smtp-Source: AA+uWPxKUGUCAvQgIyWaJguLapmjMTP3iKAcsFEFTWm5v059VI3Eu4XHEV5qER/xGM5NTAk1n+TUdQ== X-Received: by 2002:a1c:7908:: with SMTP id l8-v6mr16998767wme.80.1534783472303; Mon, 20 Aug 2018 09:44:32 -0700 (PDT) Received: from localhost ([2a01:4b00:f419:6f00:8361:8946:ba2b:d556]) by smtp.gmail.com with ESMTPSA id q135-v6sm125557wmd.4.2018.08.20.09.44.30 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 20 Aug 2018 09:44:31 -0700 (PDT) From: Luca Boccassi To: dev@dpdk.org Cc: maxime.coquelin@redhat.com, zhihong.wang@intel.com, tiwei.bie@intel.com, bruce.richardson@intel.com, brian.russell@intl.att.com Date: Mon, 20 Aug 2018 17:44:21 +0100 Message-Id: <20180820164421.28763-2-bluca@debian.org> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180820164421.28763-1-bluca@debian.org> References: <20180816184750.30843-1-bluca@debian.org> <20180820164421.28763-1-bluca@debian.org> Subject: [dpdk-dev] [PATCH v3 2/2] virtio: fix PCI config err handling X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Brian Russell In virtio_read_caps and vtpci_msix_detect, rte_pci_read_config returns the number of bytes read from PCI config or < 0 on error. If less than the expected number of bytes are read then log the failure and return rather than carrying on with garbage. Fixes: 6ba1f63b5ab0 ("virtio: support specification 1.0") Signed-off-by: Brian Russell Signed-off-by: Luca Boccassi --- v2: handle additional rte_pci_read_config incomplete reads v3: do not handle rte_pci_read_config of virtio cap, added in v2, as it's less clear what the right thing to do there is drivers/net/virtio/virtio_pci.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/drivers/net/virtio/virtio_pci.c b/drivers/net/virtio/virtio_pci.c index 6bd22e54a6..e1df2c3b4d 100644 --- a/drivers/net/virtio/virtio_pci.c +++ b/drivers/net/virtio/virtio_pci.c @@ -567,16 +567,18 @@ virtio_read_caps(struct rte_pci_device *dev, struct virtio_hw *hw) } ret = rte_pci_read_config(dev, &pos, 1, PCI_CAPABILITY_LIST); - if (ret < 0) { - PMD_INIT_LOG(DEBUG, "failed to read pci capability list"); + if (ret != 1) { + PMD_INIT_LOG(DEBUG, + "failed to read pci capability list, ret %d", ret); return -1; } while (pos) { ret = rte_pci_read_config(dev, &cap, sizeof(cap), pos); - if (ret < 0) { - PMD_INIT_LOG(ERR, - "failed to read pci cap at pos: %x", pos); + if (ret != sizeof(cap)) { + PMD_INIT_LOG(DEBUG, + "failed to read pci cap at pos: %x ret %d", + pos, ret); break; } @@ -693,16 +695,18 @@ vtpci_msix_detect(struct rte_pci_device *dev) int ret; ret = rte_pci_read_config(dev, &pos, 1, PCI_CAPABILITY_LIST); - if (ret < 0) { - PMD_INIT_LOG(DEBUG, "failed to read pci capability list"); + if (ret != 1) { + PMD_INIT_LOG(DEBUG, + "failed to read pci capability list, ret %d", ret); return VIRTIO_MSIX_NONE; } while (pos) { ret = rte_pci_read_config(dev, &cap, sizeof(cap), pos); - if (ret < 0) { - PMD_INIT_LOG(ERR, - "failed to read pci cap at pos: %x", pos); + if (ret != sizeof(cap)) { + PMD_INIT_LOG(DEBUG, + "failed to read pci cap at pos: %x ret %d", + pos, ret); break; }