From patchwork Sun Jan 14 10:03:37 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tonghao Zhang X-Patchwork-Id: 33698 X-Patchwork-Delegate: helin.zhang@intel.com 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 0E4E32C6E; Sun, 14 Jan 2018 11:05:00 +0100 (CET) Received: from mail-pl0-f67.google.com (mail-pl0-f67.google.com [209.85.160.67]) by dpdk.org (Postfix) with ESMTP id 45C2910B7 for ; Sun, 14 Jan 2018 11:04:58 +0100 (CET) Received: by mail-pl0-f67.google.com with SMTP id 62so1743525pld.7 for ; Sun, 14 Jan 2018 02:04:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=nZYgQCl5iwNzZ+h1WguK54MJQvi3siRU99tpsqcJHFk=; b=PlYs8yoCnR621YwaTjLl3+LgY3Dmy+VxpdJ3UeMHwNIZPJ8gQhRZJCj5fy4FVA/unc Qq3IBjpkzsGZ2lq+eZQXYJ74x8xQFYg82czMoq0snoRvAgAFi8czih1tSlfZQG1jOVBu PNzqFvC76CuHtLtRDPRo4ubw0iF/jKVwPxBpTojF2SG1fJD5Jiwde2XYPUaWt+XmgFjj tbP8CNgXxgtkoWgaQNJwDfQXmgiQZPxd2/Igdtr1RPAuniPBX/WcV779CukfC0JSluh3 2z7WjhagsmPLj5HGd664KW88By3jdMMQTNqGQS5/PskbMQMOhL3D1FpAdHrHmN2f1606 ptdQ== 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; bh=nZYgQCl5iwNzZ+h1WguK54MJQvi3siRU99tpsqcJHFk=; b=afLxHMRZ1W+lE0z85tYUwknxgsmzTqIKaJNoJHtPB1Li0UshsDBKChxRuImqjcm1IN iHx3nIyozi5QoS+8ECzvKt2cRIC3gy8aC9a3Nve5C2iAn8Xqgxo1FbuwfTAx8K+T9Jvm cOsIJ2S5NbWIWHGVHrCnQ8bkRNBNHSJM9NJnYAYthRwRvKSCZ4ur4kTGjI1MK3NrcMMH RBaTos4Ci8RcEADbteLMMzQffV1u6hhaCibnttbtzR2S/DcOwBvs1+uDqrYOKY8hcl3o IRGOqd+9zTD/a+wCeTyWdeu3CYZKOAhIitPCJ8yJcQDsO8Kaqd2rRv6wZD1AuNhPbktn drqA== X-Gm-Message-State: AKwxyteVmoNXFBLf2wZ/7TwNoVNIsWH/uf90z+9cXADV8QvU5Egljbzz KfKp9b50J1MMwde/fV6adw0= X-Google-Smtp-Source: ACJfBoscXIBIamvonoJVVMZpTun/03qNkppul3uUf4mRTUtwi5t8sYXNgyENf/T2NE28Z6oOmIzkCw== X-Received: by 10.159.202.138 with SMTP id p10mr434953plo.261.1515924297264; Sun, 14 Jan 2018 02:04:57 -0800 (PST) Received: from local.opencloud.tech.localdomain ([183.240.196.59]) by smtp.gmail.com with ESMTPSA id v7sm15208761pgs.83.2018.01.14.02.04.54 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 14 Jan 2018 02:04:56 -0800 (PST) From: xiangxia.m.yue@gmail.com To: wei.dai@intel.com, beilei.xing@intel.com Cc: dev@dpdk.org, Tonghao Zhang Date: Sun, 14 Jan 2018 02:03:37 -0800 Message-Id: <1515924222-19044-1-git-send-email-xiangxia.m.yue@gmail.com> X-Mailer: git-send-email 1.8.3.1 Subject: [dpdk-dev] [PATCH v3 1/6] net/ixgbevf: unregister irq handler when other interrupts not allowed. 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: Tonghao Zhang When bind the ixgbe VF (e.g 82599 card) to igb_uio and enable the rx-interrupt, there will be more than one epoll_wait on intr_handle.fd. One is in "eal-intr-thread" thread, and the others are in the thread which call the "rte_epoll_wait". The problem is that sometimes "eal-intr-thread" thread will process the rx interrupt, and then rte_epoll_wait can't get the event anymore, and the packets may be lost. The patch unregister the status interrupt handler in "eal-intr-thread" thread and the ixgbe pf is in the same case. Signed-off-by: Tonghao Zhang Acked-by: Beilei Xing --- drivers/net/ixgbe/ixgbe_ethdev.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c index ff19a56..0e056a2 100644 --- a/drivers/net/ixgbe/ixgbe_ethdev.c +++ b/drivers/net/ixgbe/ixgbe_ethdev.c @@ -5078,6 +5078,15 @@ static int ixgbevf_dev_xstats_get_names(__rte_unused struct rte_eth_dev *dev, } ixgbevf_configure_msix(dev); + if (!rte_intr_allow_others(intr_handle)) { + rte_intr_callback_unregister(intr_handle, + ixgbevf_dev_interrupt_handler, + dev); + if (dev->data->dev_conf.intr_conf.lsc != 0) + PMD_INIT_LOG(INFO, "lsc won't enable because of" + " no intr multiplex"); + } + /* When a VF port is bound to VFIO-PCI, only miscellaneous interrupt * is mapped to VFIO vector 0 in eth_ixgbevf_dev_init( ). * If previous VFIO interrupt mapping setting in eth_ixgbevf_dev_init( ) @@ -5120,6 +5129,12 @@ static int ixgbevf_dev_xstats_get_names(__rte_unused struct rte_eth_dev *dev, ixgbe_dev_clear_queues(dev); + if (!rte_intr_allow_others(intr_handle)) + /* resume to the default handler */ + rte_intr_callback_register(intr_handle, + ixgbevf_dev_interrupt_handler, + (void *)dev); + /* Clean datapath event and queue/vec mapping */ rte_intr_efd_disable(intr_handle); if (intr_handle->intr_vec != NULL) {