From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 92E7142B7D; Tue, 23 May 2023 12:26:27 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6C9DF40A80; Tue, 23 May 2023 12:26:27 +0200 (CEST) Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2084.outbound.protection.outlook.com [40.107.223.84]) by mails.dpdk.org (Postfix) with ESMTP id E369040689; Tue, 23 May 2023 12:26:25 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=QeLHhcruvwt/LaNDGDzQorXtvJ5D4+fYkLGiqTosk1VEzHtNztEHrxelk+q486pdeNu6QZN+Hndfm8d2AfyhslVUSfUmi7wXwnZ4359DFQyPfNuGzfN4oX6Vv2y3FKOTZ99zwZJNxosNRHn+N1qwAVFzNNWKeQiINyLypYdnE4FJL5YT3RpaPHE9/ZAB7Zsw65ejRfLci4Wu0hIHpOVdbWj0i0oBKT+7HDhyk/OdLoAYKn6h3U5ch7CPx1PbM3FQe7e1TOwqwRDqDS4cb9rwtx3GOMmTjoBswYeAUdZAvp9O4/tpNPfjf4gTO15KuQE2dI1+CxniAfskvLPNWymFoA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=24V7ykpL2sApZBT+XKmtbPRPgNoUIt/YKM0X20+qYNk=; b=DtE9UsTIFNB+4QEpkuE/Vb84d+xgr1j8gcy7vbVPfGt5w/3/PzNa41NlM5nzCWjGsDJNhpT3SWQAwSpLrhcMeW9xYuQ4K+54itzp3O0iaWeY4bS+QnJonwtbwrTFmBuewhAJXY4eq1xSoycOpGzOWdZGfQzoewxZkwBkTzaqz19/reMO5JZ/bMYuMRGnDtS+NvhD/0izAHxfrTOepDvhYFq+6twuB31ukxE41L7X/AMlgxeEkq58ORrNfNP5c4jCdGg0mUTLbuBwePcemfSGYKsk2nbHnXVtWJlrqGWGBqttYdJbcIyLi0fN9mdToWH8LqyBZlGutpf1uo0jznDhtA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=24V7ykpL2sApZBT+XKmtbPRPgNoUIt/YKM0X20+qYNk=; b=WWZGrGcSbY7yj+9EfgiThNhDXOimxSs+Uv53EWfaLym1uHttYQsx6UKRGAx3SPw6Xwd9qhbChsg09lbK9Lp3VVM2GN+Drwxzq08hlBlUBXkfPJgMVRjcEK9Nk2lUKFU6AVRf6OBU5tEN25tzcAYMuXcEX1EWFuAe9TSEvaKDicc= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; Received: from CH2PR12MB4294.namprd12.prod.outlook.com (2603:10b6:610:a9::11) by MN0PR12MB6004.namprd12.prod.outlook.com (2603:10b6:208:380::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6387.30; Tue, 23 May 2023 10:26:23 +0000 Received: from CH2PR12MB4294.namprd12.prod.outlook.com ([fe80::7957:641d:6aba:3f9a]) by CH2PR12MB4294.namprd12.prod.outlook.com ([fe80::7957:641d:6aba:3f9a%4]) with mapi id 15.20.6411.028; Tue, 23 May 2023 10:26:23 +0000 Message-ID: <55631948-ecdf-6388-39f2-51c28c5571c7@amd.com> Date: Tue, 23 May 2023 11:26:15 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.11.0 Subject: Re: [PATCH v3] net/iavf: fix iavf query stats in intr thread Content-Language: en-US To: "Deng, KaiwenX" , "dev@dpdk.org" Cc: "stable@dpdk.org" , "Yang, Qiming" , "Zhou, YidingX" , Chas Williams , "Min Hu (Connor)" , "Wu, Jingjing" , "Xing, Beilei" , Mike Pattrick , "Zhang, Qi Z" , "Doherty, Declan" , "Mrzyglod, Daniel T" , Dapeng Yu , "Zhang, Helin" , "Mcnamara, John" , Thomas Monjalon References: <20230307025533.1950861-1-kaiwenx.deng@intel.com> <20230322072615.179196-1-kaiwenx.deng@intel.com> <0f1ae3b9-f378-9a75-65f7-fcd6e2630414@amd.com> From: Ferruh Yigit In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-ClientProxiedBy: LO2P265CA0452.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:e::32) To CH2PR12MB4294.namprd12.prod.outlook.com (2603:10b6:610:a9::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR12MB4294:EE_|MN0PR12MB6004:EE_ X-MS-Office365-Filtering-Correlation-Id: ddd640b7-ce1b-4a7e-db51-08db5b78280f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 2+8WjdKzyjFlAiomIBQxortTzQg9vm9Sct+PukU+V3rccgwlSq/4KuOPAZSB+MgQwUSMD5NMaKJHxLnBEyZ1hlknxz82GaiZXhXd0lmgPalqsUtLZJiZzIlt29XwUhuNE62Tgx+RMnVwfDN4SGW683H5AU0htBamQvgT0ta94MJHw+OgIL9+o7xEyF4UmN7deZXHb1iNE1rTH0IpTEtfU6xDgUUy/0wIfhIc/MyEKhR8wt6OBRzHGtcwvq9ERGJPdOCjtCXNKn/tqXXSDs+Vmrwo8S17G88R/RcLMRZn+HkdPLdiRS6NUnhrpY2Abm0Qjf76RhFFK2p2vxBhU3qqoAMY9lGBs2o6V1O9Q7bfetQ92Cx6k1XvXfrVYZ9hugP6U38YPvQDuGUiYmf5aCZqx2FB9r4lwciloCohbgjbb5V7AY4vVK+AKgAbnpfCwllCxLxmli3rOq74HqNTRK4RbC1Cvnp+Ivob2+4/ejGVj4kuP3G/rD9H6ZB2PEIY3vUgRGE6RmjmsAVocCYGrbSQX/bO0HkoY8UoTlfFYDpFbk/caiTPaZ0KY3qol2VYbvuF1s73gbDQYt/vBQyCsGVths17ezGMkWfJOI6tnrnW7QCHltMTJC59PFYbagjyRe9o8WjeR35f1stlM83A54/IZw== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CH2PR12MB4294.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(4636009)(366004)(376002)(396003)(346002)(39860400002)(136003)(451199021)(31686004)(110136005)(478600001)(66556008)(66476007)(66946007)(54906003)(4326008)(6512007)(53546011)(38100700002)(186003)(83380400001)(2616005)(6506007)(36756003)(7416002)(6666004)(6486002)(44832011)(2906002)(8936002)(8676002)(26005)(41300700001)(86362001)(5660300002)(31696002)(30864003)(316002)(45980500001)(43740500002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Z0d3T2xIcy9kYXBmbzIrTFpVTFNkdkM4d2VYcXdMdnM4MlpSOEV4WEhaUXlm?= =?utf-8?B?N1M1VlpMZTlsUXJiTFQ0emE5SmxUTTcwdGtUU1ltd29FTFFjV1FjYXpCZ2Vh?= =?utf-8?B?WHlLbWxyMWpsY0ZEajZ6SWIwUjBjWlZiQlJXeWUzbkRYZTgyMi9oc1lHcFMw?= =?utf-8?B?SGRkb2V0bTBmbnBRRStGYlFWRzdZKzBNK2M0MFJFVHFQenF1S0t2ZnAwcnF2?= =?utf-8?B?Q3V0NUF1Ynp6VkZSS2hNdHdsRVY4Qm1wcGV1NGh4T2lGOVJtRHhHWlRXRExr?= =?utf-8?B?b3lpL3A3THZYYTJXaVIwVjlmOEZOcWIxbDljcU5taDRTWVV3N2t5d1VvZ3dt?= =?utf-8?B?NGgvUDkwbEJVL1l0QitPTUF4R2wzemxGNFlvMUUrbm5BZm1lV2g3SUtJUXpQ?= =?utf-8?B?ejJ6NDZJdWZkajhVaVd2eDFQK1BvVW1COHdWNWdEZW5KemdZV2h5czlKd082?= =?utf-8?B?ZGhpOWIwalpqR2RmaFoydnB6MmNPSHZpb2ZMcGhvV0x6ZVQ5VEQwSnl2T0pk?= =?utf-8?B?SVZRZE5QRkZqblRiZ3FCbWwvdU9RQ3dpdmwvcWFNdUFBU2RmbEhFRTJXMmZy?= =?utf-8?B?blVLL0Jib2pXbVlqSjFVS1kwRzFZcHgrRFVEQlR1eFZtZU5ic3hDMXdRN0Vj?= =?utf-8?B?a2d6R2JvV0xaUURFSHoyY2NPb2tYZWw2NU5oemsrWWIzN2RUMGFFWlYyNWkz?= =?utf-8?B?WXV0L3d0Z3Nkc3F3TUU4bVlRWS92c0J5YUQ2ZU9OQ255TlZrRWMyU1ZEb002?= =?utf-8?B?YVczU3JBaEJLazhJUm4zK3dwRzhWK1R5T3dBR1JsUjIrb1JyVE9wQjEwYXAy?= =?utf-8?B?Yk5wY3FXd1h5ZDI4MWJiTE4yeEFKSWZYUUhhVVliUzVKeW1aN2NNbkFTeFZs?= =?utf-8?B?RTN5Vm85MURPTDVucVROY0tvZk5Yajc4VVZ6U3F5SXB1SEh0TWsrTXFKVzds?= =?utf-8?B?UHlkVmNBYWdla3hoWmpaRURoKzFjNUFFdEQ1L2M3eGZiaVhUNXc2YmpBbUhG?= =?utf-8?B?ZlFrQWUzSlJTTm5ETDMvSGQyWWw1Z3V6WElhVFRqMmQwNzdXb2FPQWNvT1Vh?= =?utf-8?B?UU1ZUkltZHp5T0JubXdjd1QyNWRxeUVaWmR6bTR4R2F0aFhqbzlKaVdXTTNH?= =?utf-8?B?NW45aHU3aWVBVk9iaGpDcS9JNFNCTjlvbEt5M1BWRnVCSEtON3ZSbkYrVVVK?= =?utf-8?B?QjNDNDFVYU0wYWxSRGdBWWtNSGdCcGRhTkJrdkpINVQrNXNOd3N3NUZ5clJR?= =?utf-8?B?TmdZcmNOYW5LYzBMSUVrV0xOaGFKUU12U0xHR1RWMktCQjAxVEZFOThkRUFJ?= =?utf-8?B?ZWR5ZHZrNDhSSDFjU1dIWUhLVmNSUytlc3lkK0RXZzcyc2xFZFh2OEZYa2VS?= =?utf-8?B?ZDAxT1Myb0JFNkhVT3NXNzhEK0pEdEJNbW5vYnNUOWNBNW9ndXd2Q2o4MEVI?= =?utf-8?B?OFhjUU9qbDd2ektTcVg0bnJSMkcvQWpyNXlnWUpFVWdvRUFmRkMrcjFWRjNv?= =?utf-8?B?emxRVXcvUVRxREZHalV6U2RVL1cycmhhMEllN3I5bDhwT1c0cGhTcWR0OEl0?= =?utf-8?B?UWk4TUdQSk1vVUh2UlVsZk9DSU9qdEVOZTVEc2gwMWN1QWdEZklmN2xCdWdk?= =?utf-8?B?SzRHdEk3bTN6TGlFUnU2aGNwNmxXb09ZQVZQVVRkaW5XbGxCTFZiRE5iUTFW?= =?utf-8?B?YzZHSHJMRGNMSHFEUnpBakdlWTRnMTZyVUN1bXdDSFZ6V29oNkExQUFnYTVJ?= =?utf-8?B?eGNKaHhNSTFFS0F2TEFTRUJKTWxMT2JQWHF4bHJYT3BYdXkrUWlGZmdWK1pw?= =?utf-8?B?M2tMUzVsTDZJQ0xjMmlySGx6bEZRbEhPSmMvNCtnajZJZkJZdzU2akNpSUVX?= =?utf-8?B?UUpBNG5Zd1VBSXhLWHRaVG80OE9aaWRYK2RQM2dBb0ladDVXM2xTSzFFYjV0?= =?utf-8?B?TmZnYnFFNFFjd2hCSzN4UzhjZXBBdGpxZ0xXVEhqN2dGSG14RnVsaGNjWkp4?= =?utf-8?B?ajZCYmZJODBxSTNUeVpZS0puQlU4Z3BmK2p3ajQ2RDU5ZjdEOFRLSzNDak9P?= =?utf-8?B?SU9KUHovbXlKWFdBWDg5ZlAxeWFDVlFxVjVYRHBoQXFFemt2YzhwRTROakJ6?= =?utf-8?Q?9vx6eH71lPI5pMYVnESl+d7KD?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: ddd640b7-ce1b-4a7e-db51-08db5b78280f X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB4294.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 May 2023 10:26:23.2270 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: ah3NDtyoENXsn3+dis8W2yS5F2IE1g+PvArawQe+6RL54KBKLnhqjUsqmz1CHXvN X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR12MB6004 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org On 5/23/2023 2:45 AM, Deng, KaiwenX wrote: > > >> -----Original Message----- >> From: Deng, KaiwenX >> Sent: Friday, May 5, 2023 10:31 AM >> To: Ferruh Yigit ; dev@dpdk.org >> Cc: stable@dpdk.org; Yang, Qiming ; Zhou, YidingX >> ; Chas Williams ; Min Hu (Connor) >> ; Wu, Jingjing ; Xing, Beilei >> ; Mike Pattrick ; Zhang, Qi Z >> ; Doherty, Declan ; >> Mrzyglod, Daniel T ; Dapeng Yu >> ; Zhang, Helin ; >> Mcnamara, John ; Thomas Monjalon >> >> Subject: RE: [PATCH v3] net/iavf: fix iavf query stats in intr thread >> >> >> >>> -----Original Message----- >>> From: Ferruh Yigit >>> Sent: Monday, March 27, 2023 8:38 PM >>> To: Deng, KaiwenX ; dev@dpdk.org >>> Cc: stable@dpdk.org; Yang, Qiming ; Zhou, >>> YidingX ; Chas Williams ; Min >>> Hu (Connor) ; Wu, Jingjing >>> ; Xing, Beilei ; Mike >>> Pattrick ; Zhang, Qi Z ; >>> Doherty, Declan ; Mrzyglod, Daniel T >>> ; Dapeng Yu ; >>> Zhang, Helin ; Mcnamara, John >>> ; Thomas Monjalon >>> Subject: Re: [PATCH v3] net/iavf: fix iavf query stats in intr thread >>> >>> On 3/27/2023 1:31 PM, Ferruh Yigit wrote: >>>> On 3/27/2023 6:31 AM, Deng, KaiwenX wrote: >>>>> >>>>> >>>>>> -----Original Message----- >>>>>> From: Ferruh Yigit >>>>>> Sent: Thursday, March 23, 2023 11:39 PM >>>>>> To: Deng, KaiwenX ; dev@dpdk.org >>>>>> Cc: stable@dpdk.org; Yang, Qiming ; Zhou, >>>>>> YidingX ; Chas Williams ; >>>>>> Min Hu (Connor) ; Wu, Jingjing >>>>>> ; Xing, Beilei ; >>>>>> Mike Pattrick ; Zhang, Qi Z >>>>>> ; Doherty, Declan >>>>>> ; Mrzyglod, Daniel T >>>>>> ; Dapeng Yu >>>>>> Subject: Re: [PATCH v3] net/iavf: fix iavf query stats in intr >>>>>> thread >>>>>> >>>>>> On 3/22/2023 7:26 AM, Kaiwen Deng wrote: >>>>>>> When iavf send query-stats command in eal-intr-thread through >>>>>>> virtual channel, there will be no response received from >>>>>>> iavf_dev_virtchnl_handler for this command during block and wait. >>>>>>> Because iavf_dev_virtchnl_handler is also registered in eal-intr- >> thread. >>>>>>> >>>>>>> When vf device is bonded as BONDING_MODE_TLB mode, the slave >>> device >>>>>>> update callback will registered in alarm and called by >>>>>>> eal-intr-thread, it would also raise the above issue. >>>>>>> >>>>>>> This commit add to poll the response for VIRTCHNL_OP_GET_STATS >>> when >>>>>> it >>>>>>> is called by eal-intr-thread to fix this issue. >>>>>>> >>>>>>> Fixes: 91bf37d250aa ("net/iavf: add lock for VF commands") >>>>>>> Fixes: 22b123a36d07 ("net/avf: initialize PMD") >>>>>>> Fixes: 7c76a747e68c ("bond: add mode 5") >>>>>>> Fixes: 435d523112cc ("net/iavf: fix multi-process shared data") >>>>>>> Fixes: cb5c1b91f76f ("net/iavf: add thread for event callbacks") >>>>>> >>>>>> >>>>>> Hi Kaiwen, >>>>>> >>>>>> Above commit already seems trying to address same issue, it >>>>>> creates >>>>>> "iavf- event-thread" control thread to asyncroniously handle the >>>>>> interrupts, in non- interrupt context, why it is not working? >>>>>> >>>>>> Instead of adding 'rte_thread_is_intr()' checks, can't you make >>>>>> sure all interrupts handled in control tread? >>>>>> >>>>>> And can you please provide a stack trace in commit log, to >>>>>> describe the issue better? >>>>> Hi Ferru, >>>>> Sorry for my late reply, And thanks for your review. >>>>> >>>>> The above commit does not fix this issue when we need to get the >>> returned data. >>>>> If we call iavf_query_stats and wait for response statistics in the >>>>> intr- >>> thread. >>>>> iavf_handle_virtchnl_msg is also registered in the intr_thread and >>>>> will not be executed while waiting. >>>>> >>>> >>>> Got it, since return value is required, API can't be called asyncroniously. >>>> >>>> >>>> >>>> I think 'rte_thread_is_intr()' checks may cause more trouble for you >>>> in long term, >>>> >>>> - why 'iavf_query_stats()' is called in the iterrupt thread, can it >>>> be prevented? >>>> >>>> - does it make sense to allways poll messages from PF (for simplification)? >>>> >>>> >>>> If answer to both are 'No', I am OK to continue with current >>>> proposal if you are happy with it. >>>> >>> >>> >>> btw, how critical is this issue? >>> >>> If it is critical, I am OK to get it as it is for this release and >>> investigate it further for next release, since only a few days left for this >> release. >>> >> Hi Ferruh, >> >> I didn't find a more suitable solution after consideration, if you have a better >> suggestion, please let me know, thanks. > Hi Ferruh, > Can you please take a look at this patch. > Hi Kaiwen, Sorry for delay, lets continue with this solution. I thought calling from "iavf-event-thread" can be an option but your description clarifies why it is not an option, and I also don't have better solution, so I think can continue as it is. > Thanks. >>> >>>> >>>>> This commit I changed it to polling for replies to commands >>>>> executed in >>> the interrupt thread. >>>>> >>>>> main thread interrupt >>> thread >>>>> | | >>>>> | | >>>>> iavf_query_stats | >>>>> iavf_execute_vf_cmd | >>>>> iavf_aq_send_msg_to_pf and wait handle complete >> | >>>>> | | >>>>> >>>>> |------------------------------------------------------------------ >>>>> ------------------- >>> ------->| >>>>> | | >>>>> | >>> iavf_handle_virtchnl_msg >>>>> | | >>>>> >>>>> |<----------------------------------------------------------------- >>>>> ------------------- >>> --------| >>>>> | | >>>>> iavf_execute_vf_cmd get response | >>>>> | | >>>>> >>>>> The above is the stack trace for the normal execution of >>>>> iavf_query_stats in the main thread. >>>>> >>>>> interrupt thread >>>>> | >>>>> | >>>>> iavf_query_stats >>>>> iavf_execute_vf_cmd >>>>> iavf_aq_send_msg_to_pf wait handle complete(1 sec) >>>>> iavf_execute_vf_cmd timeout >>>>> | >>>>> | >>>>> iavf_handle_virtchnl_msg >>>>> | >>>>> >>>>> The above is the stack trace for the abnormal execution of >>>>> iavf_query_stats in the interrupt thread. >>>>>> >>>>>>> Cc: stable@dpdk.org >>>>>>> >>>>>>> Signed-off-by: Kaiwen Deng >>>>>>> --- >>>>>>> Changes since v2: >>>>>>> - Add to poll the response for VIRTCHNL_OP_GET_STATS. >>>>>>> >>>>>>> Changes since v1: >>>>>>> - Add lock to avoid race condition. >>>>>>> --- >>>>>>> --- >>>>>>> drivers/net/bonding/rte_eth_bond_pmd.c | 7 ++- >>>>>>> drivers/net/iavf/iavf_ethdev.c | 5 +- >>>>>>> drivers/net/iavf/iavf_vchnl.c | 71 ++++++++++++++++++-------- >>>>>>> 3 files changed, 58 insertions(+), 25 deletions(-) >>>>>>> >>>>>>> diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c >>>>>>> b/drivers/net/bonding/rte_eth_bond_pmd.c >>>>>>> index f0c4f7d26b..edce621496 100644 >>>>>>> --- a/drivers/net/bonding/rte_eth_bond_pmd.c >>>>>>> +++ b/drivers/net/bonding/rte_eth_bond_pmd.c >>>>>>> @@ -894,6 +894,7 @@ bond_ethdev_update_tlb_slave_cb(void *arg) >>>>>>> uint8_t update_stats = 0; >>>>>>> uint16_t slave_id; >>>>>>> uint16_t i; >>>>>>> + int ret; >>>>>>> >>>>>>> internals->slave_update_idx++; >>>>>>> >>>>>>> @@ -903,7 +904,10 @@ bond_ethdev_update_tlb_slave_cb(void >> *arg) >>>>>>> >>>>>>> for (i = 0; i < internals->active_slave_count; i++) { >>>>>>> slave_id = internals->active_slaves[i]; >>>>>>> - rte_eth_stats_get(slave_id, &slave_stats); >>>>>>> + ret = rte_eth_stats_get(slave_id, &slave_stats); >>>>>>> + if (ret) >>>>>>> + goto OUT; >>>>>>> + >>>>>>> tx_bytes = slave_stats.obytes - >> tlb_last_obytets[slave_id]; >>>>>>> bandwidth_left(slave_id, tx_bytes, >>>>>>> internals->slave_update_idx, >> &bwg_array[i]); >>>>>> @@ -922,6 +926,7 @@ >>>>>>> bond_ethdev_update_tlb_slave_cb(void *arg) >>>>>>> for (i = 0; i < slave_count; i++) >>>>>>> internals->tlb_slaves_order[i] = bwg_array[i].slave; >>>>>>> >>>>>>> +OUT: >>>>>>> rte_eal_alarm_set(REORDER_PERIOD_MS * 1000, >>>>>> bond_ethdev_update_tlb_slave_cb, >>>>>>> (struct bond_dev_private *)internals); } diff - >> -git >>>>>>> a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c >>>>>>> index 3196210f2c..d6e1f1a7f4 100644 >>>>>>> --- a/drivers/net/iavf/iavf_ethdev.c >>>>>>> +++ b/drivers/net/iavf/iavf_ethdev.c >>>>>>> @@ -2607,6 +2607,9 @@ iavf_dev_init(struct rte_eth_dev *eth_dev) >>>>>>> adapter->dev_data = eth_dev->data; >>>>>>> adapter->stopped = 1; >>>>>>> >>>>>>> + if (iavf_dev_event_handler_init()) >>>>>>> + goto init_vf_err; >>>>>>> + >>>>>>> if (iavf_init_vf(eth_dev) != 0) { >>>>>>> PMD_INIT_LOG(ERR, "Init vf failed"); >>>>>>> return -1; >>>>>>> @@ -2634,8 +2637,6 @@ iavf_dev_init(struct rte_eth_dev *eth_dev) >>>>>>> rte_ether_addr_copy((struct rte_ether_addr *)hw- >>> mac.addr, >>>>>>> ð_dev->data->mac_addrs[0]); >>>>>>> >>>>>>> - if (iavf_dev_event_handler_init()) >>>>>>> - goto init_vf_err; >>>>>>> >>>>>>> if (vf->vf_res->vf_cap_flags & >> VIRTCHNL_VF_OFFLOAD_WB_ON_ITR) >>>>>> { >>>>>>> /* register callback func to eal lib */ diff --git >>>>>>> a/drivers/net/iavf/iavf_vchnl.c b/drivers/net/iavf/iavf_vchnl.c >>>>>>> index 9adaadb173..aeffb07cca 100644 >>>>>>> --- a/drivers/net/iavf/iavf_vchnl.c >>>>>>> +++ b/drivers/net/iavf/iavf_vchnl.c >>>>>>> @@ -256,6 +256,7 @@ iavf_read_msg_from_pf(struct iavf_adapter >>>>>> *adapter, uint16_t buf_len, >>>>>>> vf->link_speed = >>>>>> iavf_convert_link_speed(speed); >>>>>>> } >>>>>>> iavf_dev_link_update(vf->eth_dev, 0); >>>>>>> + iavf_dev_event_post(vf->eth_dev, >>>>>> RTE_ETH_EVENT_INTR_LSC, NULL, 0); >>>>>>> PMD_DRV_LOG(INFO, "Link status >> update:%s", >>>>>>> vf->link_up ? "up" : "down"); >>>>>>> break; >>>>>>> @@ -368,28 +369,48 @@ iavf_execute_vf_cmd(struct iavf_adapter >>>>>> *adapter, struct iavf_cmd_info *args, >>>>>>> _clear_cmd(vf); >>>>>>> break; >>>>>>> default: >>>>>>> - /* For other virtchnl ops in running time, >>>>>>> - * wait for the cmd done flag. >>>>>>> - */ >>>>>>> - do { >>>>>>> - if (vf->pend_cmd == >> VIRTCHNL_OP_UNKNOWN) >>>>>>> - break; >>>>>>> - iavf_msec_delay(ASQ_DELAY_MS); >>>>>>> - /* If don't read msg or read sys event, >> continue */ >>>>>>> - } while (i++ < MAX_TRY_TIMES); >>>>>>> - >>>>>>> - if (i >= MAX_TRY_TIMES) { >>>>>>> - PMD_DRV_LOG(ERR, "No response for >> cmd %d", >>>>>> args->ops); >>>>>>> + if (rte_thread_is_intr()) { >>>>>>> + /* For virtchnl ops were executed in >> eal_intr_thread, >>>>>>> + * need to poll the response. >>>>>>> + */ >>>>>>> + do { >>>>>>> + result = >> iavf_read_msg_from_pf(adapter, >>>>>> args->out_size, >>>>>>> + args- >>> out_buffer); >>>>>>> + if (result == IAVF_MSG_CMD) >>>>>>> + break; >>>>>>> + iavf_msec_delay(ASQ_DELAY_MS); >>>>>>> + } while (i++ < MAX_TRY_TIMES); >>>>>>> + if (i >= MAX_TRY_TIMES || >>>>>>> + vf->cmd_retval != >>>>>> VIRTCHNL_STATUS_SUCCESS) { >>>>>>> + err = -1; >>>>>>> + PMD_DRV_LOG(ERR, "No response >> or return >>>>>> failure (%d)" >>>>>>> + " for cmd %d", vf- >>>>>>> cmd_retval, args->ops); >>>>>>> + } >>>>>>> _clear_cmd(vf); >>>>>>> - err = -EIO; >>>>>>> - } else if (vf->cmd_retval == >>>>>>> - VIRTCHNL_STATUS_ERR_NOT_SUPPORTED) >> { >>>>>>> - PMD_DRV_LOG(ERR, "Cmd %d not >> supported", args- >>>>>>> ops); >>>>>>> - err = -ENOTSUP; >>>>>>> - } else if (vf->cmd_retval != >> VIRTCHNL_STATUS_SUCCESS) { >>>>>>> - PMD_DRV_LOG(ERR, "Return failure %d for >> cmd %d", >>>>>>> - vf->cmd_retval, args->ops); >>>>>>> - err = -EINVAL; >>>>>>> + } else { >>>>>>> + /* For other virtchnl ops in running time, >>>>>>> + * wait for the cmd done flag. >>>>>>> + */ >>>>>>> + do { >>>>>>> + if (vf->pend_cmd == >>>>>> VIRTCHNL_OP_UNKNOWN) >>>>>>> + break; >>>>>>> + iavf_msec_delay(ASQ_DELAY_MS); >>>>>>> + /* If don't read msg or read sys event, >>>>>> continue */ >>>>>>> + } while (i++ < MAX_TRY_TIMES); >>>>>>> + >>>>>>> + if (i >= MAX_TRY_TIMES) { >>>>>>> + PMD_DRV_LOG(ERR, "No response >> for >>>>>> cmd %d", args->ops); >>>>>>> + _clear_cmd(vf); >>>>>>> + err = -EIO; >>>>>>> + } else if (vf->cmd_retval == >>>>>>> + >> VIRTCHNL_STATUS_ERR_NOT_SUPPORTED) { >>>>>>> + PMD_DRV_LOG(ERR, "Cmd %d not >>>>>> supported", args->ops); >>>>>>> + err = -ENOTSUP; >>>>>>> + } else if (vf->cmd_retval != >>>>>> VIRTCHNL_STATUS_SUCCESS) { >>>>>>> + PMD_DRV_LOG(ERR, "Return >> failure %d for >>>>>> cmd %d", >>>>>>> + vf->cmd_retval, args- >>> ops); >>>>>>> + err = -EINVAL; >>>>>>> + } >>>>>>> } >>>>>>> break; >>>>>>> } >>>>>>> @@ -403,8 +424,14 @@ iavf_execute_vf_cmd_safe(struct >>> iavf_adapter >>>>>>> *adapter, { >>>>>>> struct iavf_info *vf = IAVF_DEV_PRIVATE_TO_VF(adapter); >>>>>>> int ret; >>>>>>> + int is_intr_thread = rte_thread_is_intr(); >>>>>>> >>>>>>> - rte_spinlock_lock(&vf->aq_lock); >>>>>>> + if (is_intr_thread) { >>>>>>> + if (!rte_spinlock_trylock(&vf->aq_lock)) >>>>>>> + return -EIO; >>>>>>> + } else { >>>>>>> + rte_spinlock_lock(&vf->aq_lock); >>>>>>> + } >>>>>>> ret = iavf_execute_vf_cmd(adapter, args, async); >>>>>>> rte_spinlock_unlock(&vf->aq_lock); >>>>>>> >>>>> >>>> >