From patchwork Wed Jun 14 11:49:12 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adrien Mazarguil X-Patchwork-Id: 25313 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id B4BFA7D05; Wed, 14 Jun 2017 13:49:40 +0200 (CEST) Received: from mail-wr0-f172.google.com (mail-wr0-f172.google.com [209.85.128.172]) by dpdk.org (Postfix) with ESMTP id 0142D7CE2 for ; Wed, 14 Jun 2017 13:49:31 +0200 (CEST) Received: by mail-wr0-f172.google.com with SMTP id q97so186131906wrb.2 for ; Wed, 14 Jun 2017 04:49:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references; bh=+NbOMR0Oa5J+Um2FtyNlK/Uok2hc0ZD9zGClHSLqB8Y=; b=zkH/ThvMyXpLAX48vqB1YGRWOqwvxgo4pZwaqYiYLm36oX6Xkc1P3ckKKXXRPA9hem D95MfK8EfW6WLMlzqpmFUluNDm5QjV+Qo3W2qTsbKiGQa56cMBbcl/Ly32iQNiiiSJyQ rpwwwRqkF43uE142yLPXlMQX5xWf9HxGEDb95N+steIxUyjkpVDYpO/vYiKphGw5GQS1 nWZI3xKX64R8MRDscc4fAA57tsUC2sT+CLy6FKfsbU+qdTWW491zSdh/ZOcd1j8ySfNw jdx42bLvzVbM9JHffE+1jncKHkdZG2KH/S1i7kf7WBpVNo0QpQvrrrE+bv5CNa3jkONl U0Aw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=+NbOMR0Oa5J+Um2FtyNlK/Uok2hc0ZD9zGClHSLqB8Y=; b=SRxYwJlj+4RvBhGPHTl/32K3bOWjkQWIF6XAYv4mkZ2kunQjwkt6g9YjOMt4TuMjVE 71QMfjPG0WTZuh8pWIbfjmBVfoNSPxR6KQ7/GST6su4LoWcFxIvSbUJtmWd9E9Na1uBz BlOh2bcmC0NUKwdRdgxpnwdv37Dgw3IJoYEspiBwSuZC8pJvxDfPbonhXNDD4JVb6WZd aaXhrxKRINvpv2mFH7dFsGnOkPhgrHIDJo5ZU5bMbcQswogqqeZHvD7qGK34NmYXgvYo j6BZFF8MNaKxIHK6zg7jK0+U8pupmkny/1REBVUyGlGoUuCSxPBDjH7eiIbYRXAcdbXb SQdA== X-Gm-Message-State: AKS2vOwydJmgBSxVMtYtLOLXYm6OFjWTHKZMEu2EkUbYCTKCCUp6zMv4 86eWf9voighEZ54rO+w= X-Received: by 10.223.162.156 with SMTP id s28mr192507wra.97.1497440971331; Wed, 14 Jun 2017 04:49:31 -0700 (PDT) Received: from 6wind.com (host.78.145.23.62.rev.coltfrance.com. [62.23.145.78]) by smtp.gmail.com with ESMTPSA id s140sm1432797wmd.1.2017.06.14.04.49.30 for (version=TLS1_2 cipher=AES128-SHA bits=128/128); Wed, 14 Jun 2017 04:49:30 -0700 (PDT) From: Adrien Mazarguil To: dev@dpdk.org Date: Wed, 14 Jun 2017 13:49:12 +0200 Message-Id: <2407596e1e05260170f8b0b80806b28b63e9255d.1497439616.git.adrien.mazarguil@6wind.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: References: Subject: [dpdk-dev] [PATCH 2/7] net/mlx4: fix Rx interrupts with multiple ports 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" Several Ethernet device structures are allocated on top of a common PCI device for mlx4 adapters with multiple ports. These inherit a common interrupt handle from their parent PCI device, which prevents Rx interrupts from working properly on all ports as their configuration is overwritten. Use a local interrupt handle to address this issue. Fixes: 9f05a4b81809 ("net/mlx4: support user space Rx interrupt event") Signed-off-by: Adrien Mazarguil Acked-by: Moti Haimovsky --- drivers/net/mlx4/mlx4.c | 9 +++++++++ drivers/net/mlx4/mlx4.h | 1 + 2 files changed, 10 insertions(+) diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c index 178562e..2b4722f 100644 --- a/drivers/net/mlx4/mlx4.c +++ b/drivers/net/mlx4/mlx4.c @@ -6207,6 +6207,15 @@ mlx4_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev) eth_dev->device->driver = &mlx4_driver.driver; + /* + * Copy and override interrupt handle to prevent it from + * being shared between all ethdev instances of a given PCI + * device. This is required to properly handle Rx interrupts + * on all ports. + */ + priv->intr_handle_dev = *eth_dev->intr_handle; + eth_dev->intr_handle = &priv->intr_handle_dev; + priv->dev = eth_dev; eth_dev->dev_ops = &mlx4_dev_ops; diff --git a/drivers/net/mlx4/mlx4.h b/drivers/net/mlx4/mlx4.h index c46fc23..b74fbf8 100644 --- a/drivers/net/mlx4/mlx4.h +++ b/drivers/net/mlx4/mlx4.h @@ -345,6 +345,7 @@ struct priv { unsigned int txqs_n; /* TX queues array size. */ struct rxq *(*rxqs)[]; /* RX queues. */ struct txq *(*txqs)[]; /* TX queues. */ + struct rte_intr_handle intr_handle_dev; /* Device interrupt handler. */ struct rte_intr_handle intr_handle; /* Interrupt handler. */ struct rte_flow_drop *flow_drop_queue; /* Flow drop queue. */ LIST_HEAD(mlx4_flows, rte_flow) flows;