From patchwork Thu Oct 26 14:04:58 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Tonghao Zhang X-Patchwork-Id: 30976 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 0CE071B263; Thu, 26 Oct 2017 16:05:31 +0200 (CEST) Received: from mail-pg0-f65.google.com (mail-pg0-f65.google.com [74.125.83.65]) by dpdk.org (Postfix) with ESMTP id 26B9F1B25E for ; Thu, 26 Oct 2017 16:05:29 +0200 (CEST) Received: by mail-pg0-f65.google.com with SMTP id g6so2772170pgn.6 for ; Thu, 26 Oct 2017 07:05:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=eU7xbzGgUoPCqLBwd15a3ZjZiiw5LDKg6I5hofm5/wk=; b=NSAoGKT2D2qLAqoykoRsrY3SPTzGSGHMikGp/VJjlQtyJ3lDu0wt+HMmBTL7Ss1FoG PO1ACQtWp0PbtZqPfLZGgzu2bG8JpJ4+O3B7sCFrfgptUraUxZKLkerXQ72uAsDgyb95 pwu3dJdoLueDfFxtutkc0UHbDtamEcCxonH+LgYC6azsj53VOygqYbP/h5y7jI1uXVdb YMMHrdL3dc4j5qZ/zgno9YWNAVGMPPJsiToqmU2iG+V1YzSipswKfPdhjVvMSw3CBmUM ZAgNTrDijg7Y0tH7JSaaGQ3XbzbMl11ssQ0FzQ2JBiDEVyTrP+vye/t9Jb3g43+5rcqu frYQ== 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:mime-version :content-transfer-encoding; bh=eU7xbzGgUoPCqLBwd15a3ZjZiiw5LDKg6I5hofm5/wk=; b=FzUYTkmNv7Aeow39jBVLr2k+3mpr2AtahQ7+IZ5eSYVb+EngrSLGabyTaX67+2R8IM JlsqOEqk5WNgFd5lFFmMLegmSWjjM65LmDj7N3lZHTUiVPiB87NpoANTa87D8fII+rPw TcJ9aqgjbNsbPuGo1EZaUTkJKNxeHzMClwUkLCDPZh8/yoic6J4j4tnaScZ90/4gKeGM BTdYd8OhgGJC6RiiMegM5zUlmreHVqPshhHUoGJCDTXhP5vzeU806cNfh07F26sbZHHI jRMXQuXzgia0PW68UtmDOq0Dt/faEQR6t5kFMUaPMunQrJaKGziNI4H4Ve+0Q7PtciAX 5n1A== X-Gm-Message-State: AMCzsaUQF24nVHbYQBlWqNU6WcqkZF07aikvc6g6iig1+/KfLCo6OkwI krgWus3HotOfJh2o1Yx5dc5Tr2dB X-Google-Smtp-Source: ABhQp+RaK23XVxUXpjqd8RtnaANzLGtyKYFUo986inLgfO9MHvbmw6WnlHmJizat6QikeM9Yr0ISvg== X-Received: by 10.84.128.72 with SMTP id 66mr4594086pla.119.1509026728183; Thu, 26 Oct 2017 07:05:28 -0700 (PDT) Received: from local.opencloud.tech.localdomain ([13.94.31.177]) by smtp.gmail.com with ESMTPSA id w17sm11075110pfa.70.2017.10.26.07.05.25 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 26 Oct 2017 07:05:27 -0700 (PDT) From: xiangxia.m.yue@gmail.com To: dev@dpdk.org Cc: Tonghao Zhang Date: Thu, 26 Oct 2017 07:04:58 -0700 Message-Id: <1509026701-17478-1-git-send-email-xiangxia.m.yue@gmail.com> X-Mailer: git-send-email 1.8.3.1 MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v2 1/4] net/ixgbevf: unregister irq handler when other interrupts 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 we 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 sometiems "eal-intr-thread" thread will process the rx interrupt, and rte_epoll_wait can’t get the event any more, and the packets may be lost. We should unregister the status interrupt handler in "eal-intr-thread" thread and the ixgbe is in the same case. Signed-off-by: Tonghao Zhang --- 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 4339347..94d9df3 100644 --- a/drivers/net/ixgbe/ixgbe_ethdev.c +++ b/drivers/net/ixgbe/ixgbe_ethdev.c @@ -5070,6 +5070,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( ) @@ -5112,6 +5121,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) {