From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id DFFEDFE5; Fri, 31 Mar 2017 03:30:29 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=intel.com; i=@intel.com; q=dns/txt; s=intel; t=1490923830; x=1522459830; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=JCtU9V8S2oCdoRJTpXhrxoyrn9/1Aq5lmZxbamv3QPs=; b=j327JTwJRuIKd0UW7xBPwijcj+xfHhI7GwTNfl8eAjc4OsPFp0bYZhg/ GJ/TLBXSxgKXzUKwfmQvCd8e9oWoGg==; Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 30 Mar 2017 18:30:28 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.36,249,1486454400"; d="scan'208";a="1113837544" Received: from fmsmsx104.amr.corp.intel.com ([10.18.124.202]) by orsmga001.jf.intel.com with ESMTP; 30 Mar 2017 18:30:28 -0700 Received: from fmsmsx126.amr.corp.intel.com (10.18.125.43) by fmsmsx104.amr.corp.intel.com (10.18.124.202) with Microsoft SMTP Server (TLS) id 14.3.319.2; Thu, 30 Mar 2017 18:30:28 -0700 Received: from shsmsx151.ccr.corp.intel.com (10.239.6.50) by FMSMSX126.amr.corp.intel.com (10.18.125.43) with Microsoft SMTP Server (TLS) id 14.3.319.2; Thu, 30 Mar 2017 18:30:28 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.212]) by SHSMSX151.ccr.corp.intel.com ([169.254.3.82]) with mapi id 14.03.0248.002; Fri, 31 Mar 2017 09:30:24 +0800 From: "Chen, Jing D" To: "Wang, Xiao W" CC: "dev@dpdk.org" , "stable@dpdk.org" Thread-Topic: [PATCH] net/fm10k: fix secondary process crash Thread-Index: AQHSp5tvXR440LQAqUWvdOjViXbqhqGuLT2A Date: Fri, 31 Mar 2017 01:30:23 +0000 Message-ID: <4341B239C0EFF9468EE453F9E9F4604D3C620539@shsmsx102.ccr.corp.intel.com> References: <1490673535-104255-1-git-send-email-xiao.w.wang@intel.com> In-Reply-To: <1490673535-104255-1-git-send-email-xiao.w.wang@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH] net/fm10k: fix secondary process crash 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: , X-List-Received-Date: Fri, 31 Mar 2017 01:30:30 -0000 > -----Original Message----- > From: Wang, Xiao W > Sent: Tuesday, March 28, 2017 11:59 AM > To: Chen, Jing D > Cc: dev@dpdk.org; Wang, Xiao W ; stable@dpdk.org > Subject: [PATCH] net/fm10k: fix secondary process crash >=20 > If the primary process has initialized all the queues to vector pmd mode,= the > secondary process should not use scalar code path, because the per queue = data > structures haven't been prepared for that, e.g. txq->ops is for vector Tx= rather > than scalar Tx. >=20 > Fixes: a6ce64a97520 ("fm10k: introduce vector driver") > Cc: stable@dpdk.org >=20 > Signed-off-by: Xiao Wang > --- > drivers/net/fm10k/fm10k_ethdev.c | 28 ++++++++++++++++++++++++++-- > 1 file changed, 26 insertions(+), 2 deletions(-) >=20 > diff --git a/drivers/net/fm10k/fm10k_ethdev.c > b/drivers/net/fm10k/fm10k_ethdev.c > index 388f929..680d617 100644 > --- a/drivers/net/fm10k/fm10k_ethdev.c > +++ b/drivers/net/fm10k/fm10k_ethdev.c > @@ -2750,6 +2750,21 @@ static void __attribute__((cold)) > int use_sse =3D 1; > uint16_t tx_ftag_en =3D 0; >=20 > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) { > + /* primary process has set the ftag flag and txq_flags */ > + txq =3D dev->data->tx_queues[0]; > + if (fm10k_tx_vec_condition_check(txq)) { > + dev->tx_pkt_burst =3D fm10k_xmit_pkts; > + dev->tx_pkt_prepare =3D fm10k_prep_pkts; > + PMD_INIT_LOG(DEBUG, "Use regular Tx func"); > + } else { > + PMD_INIT_LOG(DEBUG, "Use vector Tx func"); > + dev->tx_pkt_burst =3D fm10k_xmit_pkts_vec; > + dev->tx_pkt_prepare =3D NULL; > + } > + return; > + } > + Why we need to check process type? What would happen if no changes made her= e? > if (fm10k_check_ftag(dev->device->devargs)) > tx_ftag_en =3D 1; >=20 > @@ -2810,6 +2825,9 @@ static void __attribute__((cold)) > else > PMD_INIT_LOG(DEBUG, "Use regular Rx func"); >=20 > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + return; > + > for (i =3D 0; i < dev->data->nb_rx_queues; i++) { > struct fm10k_rx_queue *rxq =3D dev->data->rx_queues[i]; >=20 > @@ -2856,9 +2874,15 @@ static void __attribute__((cold)) > dev->tx_pkt_burst =3D &fm10k_xmit_pkts; > dev->tx_pkt_prepare =3D &fm10k_prep_pkts; >=20 > - /* only initialize in the primary process */ > - if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) > + /* > + * Primary process does the whole initialization, for secondary > + * processes, we just select the same Rx and Tx function as primary. > + */ > + if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY) { > + fm10k_set_rx_function(dev); > + fm10k_set_tx_function(dev); > return 0; > + } >=20 > rte_eth_copy_pci_info(dev, pdev); > dev->data->dev_flags |=3D RTE_ETH_DEV_DETACHABLE; > -- > 1.8.3.1