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 5D99341DF3; Mon, 6 Mar 2023 09:57:47 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4994440A8A; Mon, 6 Mar 2023 09:57:47 +0100 (CET) Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2086.outbound.protection.outlook.com [40.107.244.86]) by mails.dpdk.org (Postfix) with ESMTP id C53534067B for ; Mon, 6 Mar 2023 09:57:44 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AdHFCgOzWQqbXAy3U0TIWC7R/gwKkVi/mu9hTUM5kb2ZwALaGh2MN9bzplEutGTosYNAHgvtadW9H3/s2pUxLDQGHk/cjK/HtlD3RZ0IpDOTNgrivQcRM/KvWr8Bei2iJcxNKdMjMYM4ixxgfJZi/E6e5sBBEarKrpGaMeivOAYniHxdp+e4k+2FoPEU5vXWXhl7TIwqEPZUSfQZEH9qAACbbhZQdyqhYpe78zx5bykuBXXHfsTfbt2lCaA5vYqzfekP6JExPPXhZQFlAyneXPzTou6f+8YROAIFJHgOBD2ALDveHHATejNL8vrsjmIxb3cN/rEFpSXP7AJ5Av0s9Q== 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=ckdnh/IFiz6jJnBSK63TNdE4MDJfjWWjSEp333fadJs=; b=bzMBmakQjP//lIsGD1ymDxjlB+jwyRu8cfeyniHHRnjYQRIbRXqUglBpyAAX07DsfMOqfOGORA/edUyCH3A6wmhr+Kqc6kGzKXdRitSnnS53ZPfym4bvA3tcfv2tVbaWdZ8jh0uHC/tvp22zqcbbk6eqqAgU1Mt+WPbZjF+yFpnFRojK/iiCsCvDDzlFGsQDC4/K1YDsmDZsu4wp4JmhH1C9ZdFFdLsbZ5XsIGsU6+mOlZW/nS1AjWkRxq2QFuqYmdsMq89p9zcHz09uEKP912A3v1T6I9S+JgMM2CQEO4l9qGSO9gAgKghcYPqg4t/8k0w/SX4lOmxzk6Ux5Jge1A== 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=ckdnh/IFiz6jJnBSK63TNdE4MDJfjWWjSEp333fadJs=; b=5csez4tCc5hcVM9EjBdyHSxcxx71dVuPR9XDjvDwnwRGwbPy/HSc1q2+G5tQ8+ER7vhfh6o1v7xG+Wn5QijWi4OhQaB7QpH1teVrMyoufKNn2XcNJsaqlOjZjoBWMwiTCB2tPYHR2OHcrLjt+0RQS6YJP1waOXJ2ZU9AD0WV2sw= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; Received: from MN2PR12MB4301.namprd12.prod.outlook.com (2603:10b6:208:1d4::22) by BY1PR12MB8445.namprd12.prod.outlook.com (2603:10b6:a03:523::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6156.28; Mon, 6 Mar 2023 08:57:42 +0000 Received: from MN2PR12MB4301.namprd12.prod.outlook.com ([fe80::80ae:e5ed:4fa7:2ad7]) by MN2PR12MB4301.namprd12.prod.outlook.com ([fe80::80ae:e5ed:4fa7:2ad7%8]) with mapi id 15.20.6156.028; Mon, 6 Mar 2023 08:57:42 +0000 Message-ID: Date: Mon, 6 Mar 2023 08:57:35 +0000 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: Re: [PATCH 1/5] ethdev: fix race-condition of proactive error handling mode Content-Language: en-US To: fengchengwen , Konstantin Ananyev , "thomas@monjalon.net" , Andrew Rybchenko , Kalesh AP , Ajit Khaparde Cc: "dev@dpdk.org" References: <20230301030610.49468-1-fengchengwen@huawei.com> <20230301030610.49468-2-fengchengwen@huawei.com> <0f387ca1eee34a7f92745de7b59a71a1@huawei.com> From: Ferruh Yigit In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-ClientProxiedBy: LNXP265CA0053.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:5d::17) To MN2PR12MB4301.namprd12.prod.outlook.com (2603:10b6:208:1d4::22) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MN2PR12MB4301:EE_|BY1PR12MB8445:EE_ X-MS-Office365-Filtering-Correlation-Id: 3dfee22d-dcf8-499c-ff02-08db1e20d838 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: e7uoYhzYkW2MapPPmtQ7THqkhINearcvFIgkW4vsr0MW9n2c5u8yBEhMm25BGDZQJfHqKBt9Dt376Bj/Xe5KkvdRivjOrgLzlDW+0FfERjn876aHfvDAKqYxiFBYc4JzAwPaRJ2M/iYXlXTeSoqc9wq7IwFUsLsqfEbdMtnjbuApW3uXSVrLgzzuO7IAjBvlSoP2Bd5kquPt8bSx029ZP6C9uFDhviCTbXujKUxCeoLiqQVHfFCzxohG26U+0ObZUQEWeWkEpOj79683xubYtJFuTQtX94AzdoIn2mjw3aemDVSVCtbr7JmGwxlHL8LQ9vVdQ2QpC79+JNoEeMt2Y1fqgUen9/OK18055jCBjfn8+q7L0LJF/Yw0LJccfeLRQPWizLtCPkFmn/+fzeK7QkytXQ5gwFVPUB63K4pnL3yf5MHrDQ9a48CPz/TpSqRbKMn1mvti9NBzHrmohPbluY9vIei/AG5yUBFDRwBQSRBdyzk5UPXnjhyeR/vfdxG/iU77WK9OBQFX+reyMBIBpxEaTMdPiQYZ6PNYHSRf98oygQ/nVB/ubxWqXKae58RDAVDY6B0PEmImtXnhJRG1ATNIi5UoXa5vlhKToPel3GTpHHdHNacsPf6z1m4f78Ydz6UIr02z2NNv82F6LxgZt5y/vNfs6qAeTTcM6SjuehF2aBZsuASR1t4WOXoEkxEh5i7OmrMz3HsFmAFBvisKcMjWyNt+5i64mVsIBCVFxX8= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MN2PR12MB4301.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230025)(4636009)(136003)(366004)(39860400002)(396003)(376002)(346002)(451199018)(186003)(38100700002)(8936002)(66556008)(66476007)(8676002)(41300700001)(4326008)(66946007)(44832011)(2906002)(5660300002)(30864003)(478600001)(6666004)(2616005)(53546011)(6512007)(26005)(6506007)(6486002)(966005)(316002)(110136005)(36756003)(86362001)(83380400001)(31696002)(31686004)(45980500001)(43740500002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?WHpYenhBcTdjdDVKNVhUZXdKdGNxNExhUmtTcXM4bGpzd1pWcXo5S0hPbUph?= =?utf-8?B?b3hrYnh2UUkxQk5lZit5ZXRtekNWNDFCRE9qNUROK3lkZ0xTaEVvZkhIbjc5?= =?utf-8?B?RzFPZWFvZ3lZWGVhWmZKRTU0dlo3ODVEUk1lRlpSaU9Ec2NTRGZNNEdtSzNa?= =?utf-8?B?L2RtSGZjSkVNa2xNNGlqQm9XNWplSmVSQ21uUXgvblFoTlJBQTVrbEgyVUtM?= =?utf-8?B?ajJyNzM0MEoxbVNzODl4MVZsU0g3QXQrNjVLSEVBUnp0NHBJVlh5WnRGQTJV?= =?utf-8?B?WHBDdzhoUFBNdytYR2VnT256SGRWNHdxSmhPWUZXQ2tqYkxFc2NRVFpyRzNj?= =?utf-8?B?bENBWTZjclhCU3RVajVITlp1MVlWS296V0hlVis0a29pZHFHWWorK1VGZjJw?= =?utf-8?B?M3pmTnZabVVzdHRSOFJWb2Q5T29BdWVjWEt3cEhqeHpnVHAzNkd4MkJIc2U0?= =?utf-8?B?d0tNR2RaeG5GS0U2QXlGN0JDcCtqVmxjVFVCUjd1Yzl6N0REODlMRy9WdENX?= =?utf-8?B?bE8vWDVxZDBDbTFNdm1XbkpyRXcyVklQOWkyUjNhQmRPaCtFNUJWQk54eEZT?= =?utf-8?B?QmdqSSsrMWo5L1NJd1ZlQlAzVUFHZWF1WEtrSzBOMmxoQVUxS2Y1Yll0SC9L?= =?utf-8?B?MDlFYU43UVQzZUhENktNZzlGS1cvKzhyUUxwUlNZYjVrQVlFckNmY2xmVjJy?= =?utf-8?B?ekRPQUpJNjlwUU5ZN0d4azhIcXNhK1M2Y1JEQjlUVjFJUXBHRjJnNzd5WTNN?= =?utf-8?B?RWxuMEt1TzAyVzdDK29DdG1vZDkyazVIL2M2Y2dPWGV1VmZlaXc5YXFNcUkz?= =?utf-8?B?c2t3WWFMNHNJY20va082ckNQSEp2STZobFpqZWp3NG5rU2g0T2VxRFlONTR1?= =?utf-8?B?VkVjaXdlckVIbTlYaU1URlIzRzBSVk1haUl6cklRZFovUXlRMnc0R0Y1T2hl?= =?utf-8?B?czJWcFl1MnZrNXN3bnErY3J3MklsNzZWaUwxNnlXamtFdXVIeDQ3bGs4d3BF?= =?utf-8?B?V3BVR3BOOUFHZ1FvMlFtWjRlbUtSZUZuSndEbCtzR2lxUXFYaGVwY0xyei9I?= =?utf-8?B?SExSSGxFbnpWSzBZR0dkM0trRWkxbkhKSUtJTjNoRjZ5cTdGRXdZcm1vcDhz?= =?utf-8?B?ZTYvZ0VIdW1mRVBZcVFtMU0zYVozRVVTd00vK1VzUjQwb3BOVzlWc1FpWFQw?= =?utf-8?B?VzZ1OStHM3cyYUYwa25qdHJMSHg0WFlNWjlkYWZIRUpjaWZ2cXRsOXlVTzRh?= =?utf-8?B?UmsvdmdsVmZqRlVaMXdldGtwTXR5dzFFVXNpR2p0RmQ3a1h1N1E3NTFhV21Z?= =?utf-8?B?UXplUk1tWW1aM1dpVHJUejk3S1VqVzZsUkJ2eWc2MXdTQXpKak9aSDcvbHlF?= =?utf-8?B?aXZTQ0U1QnY4WWgvRDVjYVJMbU9qSGpER3JpSXpzZFR2QU9tRTZpR2F4dEhq?= =?utf-8?B?eDNwY0pGOFExLzY5QWtpdHg1M216c1RDUkhJYTBKVDBMQnF0eDhIYkRBVStv?= =?utf-8?B?bmJLZndOMlhQV2swaGo2ZVpMaUxuZkhTNTVoaDk2dTBZUjNwRlNtRWJKcU9B?= =?utf-8?B?U2VraC95RmQxSGUwT0FjQjVaa2QzMWJKbXhsT3JrVkFTRklvY0krWGs2Qi9L?= =?utf-8?B?WUFDYklNZDFWY2pFS0VjSmpYNjE5TkZ1bDNiQ29RczFpS25pWG1ibnUzOUVa?= =?utf-8?B?Tk5pZ1pNMjRWQVg3WnpSVERIVVIvSFhhdXE1TStpY2xJeXpGN0M3K3B0RGdr?= =?utf-8?B?MnJORjRNWHh0K3AvUHVselVibXJudDRFSnRGdFFKcXNIM05PRGhQK0tpSThn?= =?utf-8?B?Wnhid3pjbDh1ekVnSUt0ZFc2RFg5aElaZG5lM0dCTEFKSnNpTlBkd0NRQks4?= =?utf-8?B?REswdmtPUTJ3NUdadFR6RHpocFF2cEdEN2NlbkxnZG10eEhOWlFNeVlhY2Fr?= =?utf-8?B?SzFvckw3RmlTU2djMUdoZFpmQTNCWDFVSjBIWnVuSDlmenNyYm1OVTQ2cFJh?= =?utf-8?B?dkNlUU5JVUFzVHpydUczQW1VVktJa0pkQjZpM3Q3ZjRSbUZrL0hlc1p1ajJy?= =?utf-8?B?WTl0RVVla1dvdFR0dmFkZEw4MHBYZHIzb2pqUVZHcFpaUUVDZkNqRksrUCtV?= =?utf-8?Q?RVhctjvWc8chgpEPtAN+Yb4/G?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3dfee22d-dcf8-499c-ff02-08db1e20d838 X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB4301.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Mar 2023 08:57:42.0176 (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: JW2aO855SvUIu4cwEIKkvokYQzSQFvR7fIkds3cj7gNusjaVvyMxuDFoLFlAiAHT X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR12MB8445 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 3/6/2023 1:41 AM, fengchengwen wrote: > On 2023/3/4 0:51, Ferruh Yigit wrote: >> On 3/2/2023 12:08 PM, Konstantin Ananyev wrote: >>> >>>> In the proactive error handling mode, the PMD will set the data path >>>> pointers to dummy functions and then try recovery, in this period the >>>> application may still invoking data path API. This will introduce a >>>> race-condition with data path which may lead to crash [1]. >>>> >>>> Although the PMD added delay after setting data path pointers to cover >>>> the above race-condition, it reduces the probability, but it doesn't >>>> solve the problem. >>>> >>>> To solve the race-condition problem fundamentally, the following >>>> requirements are added: >>>> 1. The PMD should set the data path pointers to dummy functions after >>>> report RTE_ETH_EVENT_ERR_RECOVERING event. >>>> 2. The application should stop data path API invocation when process >>>> the RTE_ETH_EVENT_ERR_RECOVERING event. >>>> 3. The PMD should set the data path pointers to valid functions before >>>> report RTE_ETH_EVENT_RECOVERY_SUCCESS event. >>>> 4. The application should enable data path API invocation when process >>>> the RTE_ETH_EVENT_RECOVERY_SUCCESS event. >>>> >> >> How this is solving the race-condition, by pushing responsibility to >> stop data path to application? > > Yes, I think it's more practical to collaborate with application. > > The application will control API invocation (including control and data path), > From a DPDK SDK perspective, it has a God perspective. > >> >> What if application is not interested in recovery modes at all and not >> registered any callback for the recovery? > > There's probably race-condition which may lead to crash, because DPDK worker > threads runs busyloop and located on isolated core, and also PMDs add delay time, > the actual probability of occurence is very very low, at least for HNS3 pmd it > has not run out for at least four years. > >> >> I think driver should not rely on application for this, unless >> application explicitly says (to driver) that it is handling recovery, > > If application register the event callback, the PMD could deduce that application will know this. > If application not register, then PMD will recovery itself and maybe race-condition. > If application support is required (that makes sense as you mentioned), in that case I think application should explicitly enable this feature. >> right now there is no way for driver to know this. >> >> >>>> Also, this patch introduce a driver internal function >>>> rte_eth_fp_ops_setup which used as an help function for PMD. >>>> >>>> [1] http://patchwork.dpdk.org/project/dpdk/patch/20230220060839.1267349-2-ashok.k.kaladi@intel.com/ >>>> >>>> Fixes: eb0d471a8941 ("ethdev: add proactive error handling mode") >>>> Cc: stable@dpdk.org >>>> >>>> Signed-off-by: Chengwen Feng >>>> --- >>>> doc/guides/prog_guide/poll_mode_drv.rst | 20 +++++++--------- >>>> lib/ethdev/ethdev_driver.c | 8 +++++++ >>>> lib/ethdev/ethdev_driver.h | 10 ++++++++ >>>> lib/ethdev/rte_ethdev.h | 32 +++++++++++++++---------- >>>> lib/ethdev/version.map | 1 + >>>> 5 files changed, 46 insertions(+), 25 deletions(-) >>>> >>>> diff --git a/doc/guides/prog_guide/poll_mode_drv.rst b/doc/guides/prog_guide/poll_mode_drv.rst >>>> index c145a9066c..e380ff135a 100644 >>>> --- a/doc/guides/prog_guide/poll_mode_drv.rst >>>> +++ b/doc/guides/prog_guide/poll_mode_drv.rst >>>> @@ -638,14 +638,9 @@ different from the application invokes recovery in PASSIVE mode, >>>> the PMD automatically recovers from error in PROACTIVE mode, >>>> and only a small amount of work is required for the application. >>>> >>>> -During error detection and automatic recovery, >>>> -the PMD sets the data path pointers to dummy functions >>>> -(which will prevent the crash), >>>> -and also make sure the control path operations fail with a return code ``-EBUSY``. >>>> - >>>> -Because the PMD recovers automatically, >>>> -the application can only sense that the data flow is disconnected for a while >>>> -and the control API returns an error in this period. >>>> +During error detection and automatic recovery, the PMD sets the data path >>>> +pointers to dummy functions and also make sure the control path operations >>>> +failed with a return code ``-EBUSY``. >>>> >>>> In order to sense the error happening/recovering, >>>> as well as to restore some additional configuration, >>>> @@ -653,9 +648,9 @@ three events are available: >>>> >>>> ``RTE_ETH_EVENT_ERR_RECOVERING`` >>>> Notify the application that an error is detected >>>> - and the recovery is being started. >>>> + and the recovery is about to start. >>>> Upon receiving the event, the application should not invoke >>>> - any control path function until receiving >>>> + any control and data path API until receiving >>>> ``RTE_ETH_EVENT_RECOVERY_SUCCESS`` or ``RTE_ETH_EVENT_RECOVERY_FAILED`` event. >>>> >>>> .. note:: >>>> @@ -666,8 +661,9 @@ three events are available: >>>> >>>> ``RTE_ETH_EVENT_RECOVERY_SUCCESS`` >>>> Notify the application that the recovery from error is successful, >>>> - the PMD already re-configures the port, >>>> - and the effect is the same as a restart operation. >>>> + the PMD already re-configures the port. >>>> + The application should restore some additional configuration, and then >>>> + enable data path API invocation. >>>> >>>> ``RTE_ETH_EVENT_RECOVERY_FAILED`` >>>> Notify the application that the recovery from error failed, >>>> diff --git a/lib/ethdev/ethdev_driver.c b/lib/ethdev/ethdev_driver.c >>>> index 0be1e8ca04..f994653fe9 100644 >>>> --- a/lib/ethdev/ethdev_driver.c >>>> +++ b/lib/ethdev/ethdev_driver.c >>>> @@ -515,6 +515,14 @@ rte_eth_dma_zone_free(const struct rte_eth_dev *dev, const char *ring_name, >>>> return rc; >>>> } >>>> >>>> +void >>>> +rte_eth_fp_ops_setup(struct rte_eth_dev *dev) >>>> +{ >>>> + if (dev == NULL) >>>> + return; >>>> + eth_dev_fp_ops_setup(rte_eth_fp_ops + dev->data->port_id, dev); >>>> +} >>>> + >>>> const struct rte_memzone * >>>> rte_eth_dma_zone_reserve(const struct rte_eth_dev *dev, const char *ring_name, >>>> uint16_t queue_id, size_t size, unsigned int align, >>>> diff --git a/lib/ethdev/ethdev_driver.h b/lib/ethdev/ethdev_driver.h >>>> index 2c9d615fb5..0d964d1f67 100644 >>>> --- a/lib/ethdev/ethdev_driver.h >>>> +++ b/lib/ethdev/ethdev_driver.h >>>> @@ -1621,6 +1621,16 @@ int >>>> rte_eth_dma_zone_free(const struct rte_eth_dev *eth_dev, const char *name, >>>> uint16_t queue_id); >>>> >>>> +/** >>>> + * @internal >>>> + * Setup eth fast-path API to ethdev values. >>>> + * >>>> + * @param dev >>>> + * Pointer to struct rte_eth_dev. >>>> + */ >>>> +__rte_internal >>>> +void rte_eth_fp_ops_setup(struct rte_eth_dev *dev); >>>> + >>>> /** >>>> * @internal >>>> * Atomically set the link status for the specific device. >>>> diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h >>>> index 049641d57c..44ee7229c1 100644 >>>> --- a/lib/ethdev/rte_ethdev.h >>>> +++ b/lib/ethdev/rte_ethdev.h >>>> @@ -3944,25 +3944,28 @@ enum rte_eth_event_type { >>>> */ >>>> RTE_ETH_EVENT_RX_AVAIL_THRESH, >>>> /** Port recovering from a hardware or firmware error. >>>> - * If PMD supports proactive error recovery, >>>> - * it should trigger this event to notify application >>>> - * that it detected an error and the recovery is being started. >>>> - * Upon receiving the event, the application should not invoke any control path API >>>> - * (such as rte_eth_dev_configure/rte_eth_dev_stop...) until receiving >>>> - * RTE_ETH_EVENT_RECOVERY_SUCCESS or RTE_ETH_EVENT_RECOVERY_FAILED event. >>>> - * The PMD will set the data path pointers to dummy functions, >>>> - * and re-set the data path pointers to non-dummy functions >>>> - * before reporting RTE_ETH_EVENT_RECOVERY_SUCCESS event. >>>> - * It means that the application cannot send or receive any packets >>>> - * during this period. >>>> + * >>>> + * If PMD supports proactive error recovery, it should trigger this >>>> + * event to notify application that it detected an error and the >>>> + * recovery is about to start. >>>> + * >>>> + * Upon receiving the event, the application should not invoke any >>>> + * control and data path API until receiving >>>> + * RTE_ETH_EVENT_RECOVERY_SUCCESS or RTE_ETH_EVENT_RECOVERY_FAILED >>>> + * event. >>>> + * >>>> + * Once this event is reported, the PMD will set the data path pointers >>>> + * to dummy functions, and re-set the data path pointers to valid >>>> + * functions before reporting RTE_ETH_EVENT_RECOVERY_SUCCESS event. >>>> + * >>>> * @note Before the PMD reports the recovery result, >>>> * the PMD may report the RTE_ETH_EVENT_ERR_RECOVERING event again, >>>> * because a larger error may occur during the recovery. >>>> */ >>>> RTE_ETH_EVENT_ERR_RECOVERING, >>>> /** Port recovers successfully from the error. >>>> - * The PMD already re-configured the port, >>>> - * and the effect is the same as a restart operation. >>>> + * >>>> + * The PMD already re-configured the port: >>>> * a) The following operation will be retained: (alphabetically) >>>> * - DCB configuration >>>> * - FEC configuration >>>> @@ -3989,6 +3992,9 @@ enum rte_eth_event_type { >>>> * (@see RTE_ETH_DEV_CAPA_FLOW_SHARED_OBJECT_KEEP) >>>> * c) Any other configuration will not be stored >>>> * and will need to be re-configured. >>>> + * >>>> + * The application should restore some additional configuration >>>> + * (see above case b/c), and then enable data path API invocation. >>>> */ >>>> RTE_ETH_EVENT_RECOVERY_SUCCESS, >>>> /** Port recovery failed. >>>> diff --git a/lib/ethdev/version.map b/lib/ethdev/version.map >>>> index 357d1a88c0..c273e0bdae 100644 >>>> --- a/lib/ethdev/version.map >>>> +++ b/lib/ethdev/version.map >>>> @@ -320,6 +320,7 @@ INTERNAL { >>>> rte_eth_devices; >>>> rte_eth_dma_zone_free; >>>> rte_eth_dma_zone_reserve; >>>> + rte_eth_fp_ops_setup; >>>> rte_eth_hairpin_queue_peer_bind; >>>> rte_eth_hairpin_queue_peer_unbind; >>>> rte_eth_hairpin_queue_peer_update; >>>> -- >>> >>> Acked-by: Konstantin Ananyev >>> >>>> 2.17.1 >>> >> >> . >>