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 6968842808 for ; Mon, 27 Mar 2023 14:32:49 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5B32E42B7E; Mon, 27 Mar 2023 14:32:49 +0200 (CEST) Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2065.outbound.protection.outlook.com [40.107.94.65]) by mails.dpdk.org (Postfix) with ESMTP id D35AC40ED8; Mon, 27 Mar 2023 14:32:45 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ob2TpXnt/8lEDOm++lo5xP9az3bwJFs0tYbjLMZ/NprPuJ8LqM18BhAO1YJ3A6vpKyyUJes3GHXOO5z5Fu6zAZE5DEKgkH/EnwXQlm9hRTzeq21mDJ+btaQknsXUPhmi77m5+luPRDn7A6u1y4PvhSDMmnZ447XSgmm2443VGXdK2LY4Y+X+jyih0IwB/FQLd6SO6DvnPoqTXccOIWur4LMsZ+Ry5fWrsOUaAhBnzSp9/T+UCye+IZ3Drgu33q7xnZW37q9ekbELvAiECcSXf3VLecxXqtzZuG81RziggXECYZVr47I7t1+6+BhI5sekbDVZdAZ8SUPm2ewnl/LTyg== 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=QvB5GTd8fLh68xvsEebFirzwI5P8xLbF1N10fZenFkg=; b=IBxoZejk+Badng8wjmHIfJeRSQxtyNrtWz+mQqeaUCk/aGekDUk1BOhCygLrM4Ihge0WS+5GaOLBpzoi5lmmVY+Qnu4RzMOHco1o2DW99aCpgS1x9U6w162laHrIr1fPXQY8UtDTzg1w7RqyjYQFiz3zLJ2Z2K0fhCGiKQotLjx5sxH5hkl9iqcSx0XJlkayzYDpAOpnEiIjTZbfzYjXnZOQVR6yJSdAzNlb9LxSvdu0yHfdeWtsWJArKdSPhRpyGAhjm/Y9vZegNvQueK8mhypf+3rknvKEOPVTHO59Oe8wiGRh0eWAoa83wMjNzKw53ZdAs2UIJyPZnavBWBn5KA== 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=QvB5GTd8fLh68xvsEebFirzwI5P8xLbF1N10fZenFkg=; b=t7/rCdyUaFif+FqQeegouvm+2emrmKxr84NYBBtsDnvFw4d+CSX7qXX/Cn7Xtzlm99yCvygZjN+BCY29zU6fAS/VjBB/Lm1l8KSL2nJKS/5bblTaDaDhx67HPiz+DEi6srAj5RtzaV55ASfkwiY1Q9sJLncQwCeqEpsWloRDzyY= 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 DS7PR12MB5982.namprd12.prod.outlook.com (2603:10b6:8:7d::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6222.30; Mon, 27 Mar 2023 12:32:43 +0000 Received: from CH2PR12MB4294.namprd12.prod.outlook.com ([fe80::dd5a:8a5c:f493:9640]) by CH2PR12MB4294.namprd12.prod.outlook.com ([fe80::dd5a:8a5c:f493:9640%5]) with mapi id 15.20.6222.030; Mon, 27 Mar 2023 12:32:43 +0000 Message-ID: Date: Mon, 27 Mar 2023 13:31:49 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.9.0 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 References: <20230307025533.1950861-1-kaiwenx.deng@intel.com> <20230322072615.179196-1-kaiwenx.deng@intel.com> <0f1ae3b9-f378-9a75-65f7-fcd6e2630414@amd.com> Content-Language: en-US From: Ferruh Yigit Subject: Re: [PATCH v3] net/iavf: fix iavf query stats in intr thread In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-ClientProxiedBy: LO4P123CA0162.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:188::23) To CH2PR12MB4294.namprd12.prod.outlook.com (2603:10b6:610:a9::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR12MB4294:EE_|DS7PR12MB5982:EE_ X-MS-Office365-Filtering-Correlation-Id: 2d6f0853-a60a-4d5e-c88d-08db2ebf5c9a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: EHw+uMsw/LzFojI9vA27mYJZ+j6KsG/PpxGSTbNBBs/uxfgk9rz6iyb4Yv3o9Ls/Jgv6668vzwC5rcAyqs7CpaYuAJiPp15N3yX4S2yaGaj2I3qWqUsYV4FzbZYiBFB4rSz7t1/oe8o7KL4gCGqYH12jrm8p2Mqbo3mk5Dy0yPH/n3BXgp6hyRf8xFG00gFBjvDTgFPmI0RleEvM+kU5rGRvoDRsztJbZmlJVVQuR4Xs8Uoion9cF0h35Bm++S37OdF+ms9XLJvvYfOWp7pu6/F7f4ZQ8UZ94RMuigqHtWtjRi2/W6PX/5A2PbSha5LyDik8CGtAF7tA7Sqrqr+IS/MR567uAClj1Sxa7u3Fu0+O7KtG+2u7YHDnAFAE5SVwEjaIr189VgzdZkzTeWyZVv0j65/KtByeevIezm/uVbgPnAgO7Gs7t+lfH7uyNrkUSRvhnAO4nFDBMOG8hj1++e0p+1MUEFh2bDLMFGyq6aTkP+xXRRG+P7ZbsgqjFV5A8AxiEPL9qUnOpWNT2z/MUQ9Ohbuz8i83jbSWLmvrsNr/nunghtdsnDdZcMB3QNrpPmpCUfLNdU4hsNAC5MMUYf5eE5S9MF+IuqDQuw2R2DVypowrxvg5QZtpHOwCM/jrlHO9xLotPJx7jvDFRBr4ZA== 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)(396003)(136003)(346002)(376002)(39860400002)(451199021)(31686004)(31696002)(36756003)(86362001)(6512007)(6506007)(26005)(53546011)(186003)(2616005)(83380400001)(44832011)(7416002)(8936002)(5660300002)(41300700001)(6486002)(4326008)(54906003)(110136005)(2906002)(38100700002)(316002)(66556008)(8676002)(66946007)(66476007)(478600001)(43740500002)(45980500001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?a2dHWjFWSS82eDJFYnZCRzg4RkpqQklPTDF3ZHZPb3AzaGg2YUNYbVdycjZz?= =?utf-8?B?NVh5VHlSRHkzdllLS2RUZE5uTXhqOXUzRVArL0lZbWdRTEZucEZRSm1SUUN5?= =?utf-8?B?amprRlYvMlhkNytsbWh2alNXa1Z3aGVDbXlYV2JuWVYrcThpZllBVWlFL1Zl?= =?utf-8?B?YTJ3UUYyYXBvVnRob3lKSnhxYTE3bGVDSmtiV284Y1o4YytHNHhsNllwak4v?= =?utf-8?B?alRtV0pUcEdQNkZnVVVDN05rWnJNNG94MTFuekd3MmxrRTBKancwaXRlZ20x?= =?utf-8?B?VWtHUU1ZMWJJSERSOVJEaHVQU0hGdWV1RFNGc3dWUW16VDJRVURpVU1KTDNQ?= =?utf-8?B?bWlGNjVrZkpBbDJkUUtOc2ROY0VRaDlQblZ3NkpzTzJEM1krVWJjR2t3UGVr?= =?utf-8?B?V3J5OXBCTEwySnQ0NURweXdOQzE4a3pWTmdOVzk2R3A2bEo0NmNCRG9jMS9Y?= =?utf-8?B?ajdrZ1VBc0szM2ptWW43NjlTcW5TakJJZ21FNlYrWXJsbEFpRmN3ZjVVeUFL?= =?utf-8?B?bFlMd0c3ZkZuK1FoTkxPK3lLN2UwL1FIODE2VHZMd3YydGYvQzE2TklVemN3?= =?utf-8?B?bEJLTzlyWk1FWU8vV0lwQUorNFRqYVNpY3FwV0xXZEd2QmdhMXQwYytxSHhp?= =?utf-8?B?SlpsVUxEM1ZoZlZMaDJ1Y01tNHZMNGZPdkdBNGRxVEY0SjNRalVuV1pCTlMr?= =?utf-8?B?ZWcyTURsRnM1UnBXakxjMGthUjZVZGJOaHM4TjR4MHFBMFBIUmt3TUNsZm9r?= =?utf-8?B?NE4ycDhWeEgzTGdQYzl6RFppR3dlSWNPczZvOW1QcGlGUmFtR0lmc1dRMDNZ?= =?utf-8?B?N2pzK0VwR2Q4ZnhBNUdXYnZGYXVUVUEyb2hzV1VMMFc3NytITW9wT3pFTWdq?= =?utf-8?B?L3FKQ1ArQ1JLcERWUXRSclhqcGJzd0d4WXkwY3l4TjFMSUtyTUJSaU9CeU9j?= =?utf-8?B?Tm1ZK1R3a3M4dENIT21Ya2FTc29yTEVyMm5aN0JJbE1NN1B1bTJWU1VVWWhZ?= =?utf-8?B?VTF4NXpsOXY4ZVNpdE5TYUpwQVdha2RHSHh6WFRvTVJSRU5VOGlPdWt1RGcw?= =?utf-8?B?d3R6dHdvQWhrclFJREIzV0FqUWtmWkg4ZXBsK1FHbFVMMmtWWGNvU2NQNlBQ?= =?utf-8?B?VkNnQUV2c2ttTGdBOVBQTUVoUzF1SUFVd2R5K3hGdVBDU2ZGejhnZFNxQ2Iw?= =?utf-8?B?bzljUjNkWlprUnBnMmQ3MGt0TTNKZy80V0lQMG1iZjhIWEkvNnNyVU1XWDZQ?= =?utf-8?B?Q3d5K1JQaFdlZytYMmRiWWNMV0xMU1AxWmxjWnJlRjBPUlUzVk1MSnRzcCtz?= =?utf-8?B?V0NTWFhkMnMrSFA4NVh1UzNRTHFNa1BLUVM0SE1Gdzloc0hlNGw0S0JRNEcx?= =?utf-8?B?aXd3akE2eXZ3QWVjUDRtYmFtTVFTYzZtejcyR2xoR0Q1eU5KaTRJMnNvZmlz?= =?utf-8?B?bUQvNExObUpLT0k0Ty9TQ1RmSktZSmhGSnc3Z1VIT2dNK3FNZHArTlAxUHZZ?= =?utf-8?B?SVFWb3VzMjh0bHdxWWl4KzI1KzBXSzFCcXE5TFc5VlMvcG1McURiZjBHUCsz?= =?utf-8?B?Rk9SVmRFOW1oMndmVmtibFQydXh5eXRWeDJIVktkTmp0MHZNK0UyTHpHdXRp?= =?utf-8?B?L0FudlpFeisrSkZPNjY1QTNRRmNtWXhDblNESzhCRGJBbVVqNFRFeGlpSFdE?= =?utf-8?B?NU5sSE1YNk9sSndJbmNWaEt3cXNhdnVZVHp0SzExRkpMZjhRUkJVTHlCUE9M?= =?utf-8?B?TUtJRnF6ZGZYZTErTmJJVTRiSkRoeW1LSzhHTmlzYjJsV1l4YzZjaHFQajRi?= =?utf-8?B?cnBCcU4ybnZDRFF2WTV4a1F6MmVsNEtDT1l3TXRwZGEwZjF2dnJEdmtOZGJt?= =?utf-8?B?OHU5WUh2VE9TMitJekt4MVNEU3cwSmxCVWVSNEJHSUROZjBWOWVJdU1nUWpB?= =?utf-8?B?OG9neHRuQUE0VTQxSHpVTDdMVGJhT2dzcW1TNnJycDFxeGpVRE1VeGF3U2Qw?= =?utf-8?B?NzN0Y0h2QjRXTzFxeFZmYzNpbVQ1YTJpSUFseEZ5K2RxUFlZaWE0VVBBQklq?= =?utf-8?B?Nzg1VmlScHkweDhNSEE4dEVMTjZ2RG93NlJ5NWZzMElqU25ScmN0eFltbnpZ?= =?utf-8?Q?Gosq64cmF24qCRQePTn3aROv7?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2d6f0853-a60a-4d5e-c88d-08db2ebf5c9a X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB4294.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Mar 2023 12:32:43.3582 (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: 4dMB685MaVuwQbHOxigERu2gYXbCg49dPJ8qlkNFyEKyNyhcA+vkC6x2jvrkw/4h X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR12MB5982 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org 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. > 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); >>> >