From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 45037A04B3; Mon, 3 Feb 2020 06:17:04 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id A141A1BF76; Mon, 3 Feb 2020 06:17:03 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by dpdk.org (Postfix) with ESMTP id 2359F1BE90 for ; Mon, 3 Feb 2020 06:17:02 +0100 (CET) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 0135H1xO010889; Sun, 2 Feb 2020 21:17:01 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-transfer-encoding : mime-version; s=pfpt0818; bh=BZ1U4poYXcVtGEjno4IzQFpl8Q328kPw7oVxaQoFyz0=; b=XnfNQpDAVV500KAMYlf3AGBoMRXnWHhMKuF7Hvh7YfXli1lrxUVLizzOU3HEOByOpasK WSXsbrGDL2jr4kh7gXJqeeqbgRomEBoWsqG9TJ4yDuRtMZB700Ae7zUo0yuDZlm6qKMx a2WBEMoUCxvoq6jxmCcWQEvb3EPuT43ldNtZBxqL3zCaj8xJ02Ujmv/DOPcp24fyjK62 5Uwza9iY1vk3vJZH5Q4jbudLF4KZECi3M71qDKIL5uhSj/Dznjm+zcHT9T1PLzTdRqGp Lk9ZLKLvnkXqR/ADe5whyJRAP2hIGVW/ypv6VrJAalXHSp+5LLb1w3k2X7QsaZKJ38P6 eA== Received: from sc-exch02.marvell.com ([199.233.58.182]) by mx0b-0016f401.pphosted.com with ESMTP id 2xw9quda5b-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Sun, 02 Feb 2020 21:17:01 -0800 Received: from DC5-EXCH01.marvell.com (10.69.176.38) by SC-EXCH02.marvell.com (10.93.176.82) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Sun, 2 Feb 2020 21:16:59 -0800 Received: from SC-EXCH03.marvell.com (10.93.176.83) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Sun, 2 Feb 2020 21:16:58 -0800 Received: from NAM04-CO1-obe.outbound.protection.outlook.com (104.47.45.55) by SC-EXCH03.marvell.com (10.93.176.83) with Microsoft SMTP Server (TLS) id 15.0.1497.2 via Frontend Transport; Sun, 2 Feb 2020 21:16:57 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=j5lXMgP5ZWTd3xPJ6TDbiTXSETPz49lFFcZXrYzr/yuUCRq22XuIwAkPCL2IXFoSPtniGZUtsA+qzeWo3XohwLUT9lKhDFNcIxsceOemtultaBks7Uxsx9++ZR/BoUoil4jpSqnv5cYFPOMOrnUiumm/+zfKEXsuEFSVdtox4kxajpAbzg+HyyVrOm8NQcLESu4Ka7D3ddfywvuiT9QQsenZX3DINH5wdIuNQMRJ/MpIIwO1zafJhaK1sGF+R9hm910dP0yObAEohkQp38x5WvMm96SlZfEwZhSo4qyk3RUE2ObID2DMEMWxf2f2+JYz+8+UPI7gKDV5JV3nqOqT4w== 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-SenderADCheck; bh=BZ1U4poYXcVtGEjno4IzQFpl8Q328kPw7oVxaQoFyz0=; b=Gct2/aUjL/uFsmLbKdPxJIBf0jJF/eY9R+75lrB+K7IxAZgtHzGSM4TJU71beGadFQ/KBfdv10nrmg+XPTvz8LPd+Y94YmTDw4nEH/zLVJ5rCHh8vvuQaueeiBn7uMNDK9AJHi3i6Alyr0jqiZPTk0zVpPTXwy9vhp2a72WaKVu1h7Nh2zm5SPxw+Go/npVMOxPzc/j+axgbrW28852sfUbj4OUzvwUx33tJhqsZ+FKYdUarV4XVG1Wz8keWagXMvN4ymudM+KM9xRb79Bvl1dPBcrfzdinvcJFvcQ2IX1dQ3/uHtkOcin+3K5fad+W1GEx7PqIQLiqVolmLCliXtg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=marvell.com; dmarc=pass action=none header.from=marvell.com; dkim=pass header.d=marvell.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.onmicrosoft.com; s=selector1-marvell-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=BZ1U4poYXcVtGEjno4IzQFpl8Q328kPw7oVxaQoFyz0=; b=QQNy0+z+slQIyoChqdjYpOAWgG9xk8UERlLrOXbETKEv5b3361f3ijhZA8uHrmxfquWs6Pk4JOJgHVjoAYF5itbSCFc/evNkyTT9j5hpV9l4oTAyKava8FmFtkVgTdT03BkjOqwKYgUBvX2VR8+EleUXDa8sRmLYNIA5yAh7+uU= Received: from CY4PR1801MB1863.namprd18.prod.outlook.com (10.171.255.160) by CY4SPR01MB06.namprd18.prod.outlook.com (52.132.99.19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2686.30; Mon, 3 Feb 2020 05:16:56 +0000 Received: from CY4PR1801MB1863.namprd18.prod.outlook.com ([fe80::edb0:c18d:7455:f60b]) by CY4PR1801MB1863.namprd18.prod.outlook.com ([fe80::edb0:c18d:7455:f60b%4]) with mapi id 15.20.2686.031; Mon, 3 Feb 2020 05:16:56 +0000 From: Pavan Nikhilesh Bhagavatula To: Gaetan Rivet , "dev@dpdk.org" , "David Marchand" , "thomas@monjalon.net" CC: Vamsi Krishna Attunuru , Jerin Jacob Kollanukkaran Thread-Topic: [dpdk-dev] [PATCH v7] eal: add manual probing option Thread-Index: AQHV0dOyXwGOXWH+gku5Elml83jIeagI/kPQ Date: Mon, 3 Feb 2020 05:16:56 +0000 Message-ID: References: <3825f1afeebd62b3e50535574ddedadb31435616.1579772895.git.grive@u256.net> In-Reply-To: <3825f1afeebd62b3e50535574ddedadb31435616.1579772895.git.grive@u256.net> Accept-Language: en-IN, en-US Content-Language: en-US X-Mentions: david.marchand@redhat.com,thomas@monjalon.net X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [14.140.231.66] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: cf75d922-41b0-459c-6f89-08d7a86849c4 x-ms-traffictypediagnostic: CY4SPR01MB06: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:75; x-forefront-prvs: 0302D4F392 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(136003)(39850400004)(376002)(346002)(396003)(366004)(199004)(189003)(6506007)(107886003)(8936002)(26005)(55236004)(186003)(66446008)(66946007)(966005)(66556008)(478600001)(66476007)(64756008)(76116006)(4326008)(52536014)(5660300002)(2906002)(30864003)(54906003)(316002)(86362001)(7696005)(81166006)(110136005)(81156014)(8676002)(55016002)(9686003)(33656002)(71200400001)(309714004); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4SPR01MB06; H:CY4PR1801MB1863.namprd18.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: marvell.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: Hz69GrtDVdd2vg/a7QSLIpqrvX7f6dekLoOfxdgTjGdTcWnANV03GSvbPBIYFmaJ+2OOT6wYf/0qCTS4rVm2Xpwu8/5d6KChyikSs45YjkPgiS6Jthx81TKljfNbeBxDTeS/AwCJjhkd0Rb1HkGq7yTVlLOE6SSrvrgVeQiqc49BVNGutycK24gs3LDqcvWETnk769KO30yqeJ0zTl3RqM0jWkQEbGw9WaSi+dn7p3Qh3XxCqDZpvpX4AKVQd0j2Fdf6IxgSKugTmO8n5GlpqDQGRTasaI1ThgjNV41vkAziYIO7Whjue4l+eOWls9P5sDC0jHVZvXzTOlUNKGLvhr+rs9pD7nime6umjkD944il4lLsarzHMtQhdRPNOjijPp6Sxdh7apMO4A+L4BDpmWUCEuKCYlEWFvinC7aGyfYcjt0Fu6VpogPN3Nf0WN5rNWAioUfSSNbql4gB7bJFcvm9VpBLrt6X0SyfybO1DqDWa7CzD8COC7FAQluToOIx4QBoO5ibfuxGvzcFPO9wEWfjFuPEyXuGPE6kSbCVnJwHxlEFM4kCbIKryX/2KfBh x-ms-exchange-antispam-messagedata: tXPK4KrgFCv4THyJ5KH8yajpZMfxkTkxghbQvOt9qf6bmj5DgjYMcf/Px3j2HrnjlpIIHUBSklsI6Dd+TsDqSLTuztdHC0B5Lsl/gQyfEFDLQlTB+otjd1ORex0mOK4HXfloJ1O/ClCymgScHdsDuA== Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: cf75d922-41b0-459c-6f89-08d7a86849c4 X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Feb 2020 05:16:56.2810 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 70e1fb47-1155-421d-87fc-2e58f638b6e0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: cwlQFyTO12zLxYQYkvtlvNwPWJ48+aF4W3sdrKLi13qMGEfuK4BGaF4LVEkSvTXEA+1frwpZc6VEanp0vy3/bosnNFCKtq8+2bfX3MnOrs8= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4SPR01MB06 X-OriginatorOrg: marvell.com X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138, 18.0.572 definitions=2020-02-02_09:2020-02-02, 2020-02-02 signatures=0 Subject: Re: [dpdk-dev] [PATCH v7] eal: add manual probing option 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" @David Marchand @thomas@monjalon.net Ping? Are there any more changes required for this patch? It's been in queue sinc= e last October. >-----Original Message----- >From: dev On Behalf Of Gaetan Rivet >Sent: Thursday, January 23, 2020 3:28 PM >To: dev@dpdk.org >Cc: Vamsi Krishna Attunuru ; Jerin Jacob >Kollanukkaran >Subject: [dpdk-dev] [PATCH v7] eal: add manual probing option > >Add a new EAL option enabling manual probing in the EAL. >This command line option will configure the EAL so that buses >will not trigger their probe step on their own. > >Applications are then expected to hotplug devices as they see fit. > >Devices declared on the command line by the user (using -w and -- >vdev), >will be probed using the hotplug API, in the order they are declared. > >This has the effect of offering a way for users to control probe order >of their devices, for drivers requiring it. > >Signed-off-by: Gaetan Rivet >Acked-by : Vamsi Attunuru >Tested-by: Vamsi Attunuru >Reviewed-by: Jerin Jacob >--- > > haven't heard many opinions on the matter, please shout if you see an >issue >with this approach. > >@Slava: I have tested rather quickly that it does not break anything, > and that it works as intended for basic cases. > Can you test it further for your use-case and tell me if it works = fine? > >Beyond the obvious difference between both probe mode, something >to keep in mind: >while using -w on invalid devices would not block (PCI) bus probing, it >will stop manual >probing in its track. All devices need to exist and be valid device IDs. > >v2: fixed a few typos, map file (and used Travis to validate). > > Slava, are you able to test this patch? > >v3: properly fixed the map file (inherited 19.08 instead of 19.05). > > Added a function to set the probe manual from the application, > without having the user do it from the command line. > > Stopped spamming Slava about it, Vamsi was actually the one >interested in it! > >Standing issue worth chiming in: > > Currently manual-probe will cut off probing from all buses. > It could be interesting to be able to only cut buses supporting hotplug, > given that they are the one able to probe devices afterward. > > No real use-case for this right now, so leaving as-is. Might be worth > considering in the future. > >v4: Rebased on master, > Moved implementation in common EAL, > Used public API within the EAL to set the option, > Made the API experimental > >v5: added note in the Getting Started Guide. > >v6: Rebased on master > > see https://urldefense.proofpoint.com/v2/url?u=3Dhttp- >3A__mails.dpdk.org_archives_dev_2020- >2DJanuary_154178.html&d=3DDwIDAg&c=3DnKjWec2b6R0mOyPaz7xtfQ&r=3D >1cjuAHrGh745jHNmj2fD85sUMIJ2IPIDsIJzo6FN6Z0&m=3DBsQe7kO_de- >Kb6YFvVZPpZgIhGnWWpW8Pou2KkH_Cjk&s=3DoFGrj6beplYlYJWodLDGY >GCUExSbvb1iJEERsA18QnA&e=3D > for reference to this version, linking v7 to v5 thread. > >v7: Updated author and SoB. > > doc/guides/linux_gsg/eal_args.include.rst | 13 ++++++ > doc/guides/rel_notes/release_20_02.rst | 9 ++++ > lib/librte_eal/common/eal_common_bus.c | 6 +++ > lib/librte_eal/common/eal_common_dev.c | 54 >++++++++++++++++++++++ > lib/librte_eal/common/eal_common_options.c | 8 ++++ > lib/librte_eal/common/eal_internal_cfg.h | 1 + > lib/librte_eal/common/eal_options.h | 2 + > lib/librte_eal/common/eal_private.h | 9 ++++ > lib/librte_eal/common/include/rte_eal.h | 36 +++++++++++++++ > lib/librte_eal/rte_eal_version.map | 4 ++ > 10 files changed, 142 insertions(+) > >diff --git a/doc/guides/linux_gsg/eal_args.include.rst >b/doc/guides/linux_gsg/eal_args.include.rst >index ed8b0e35b..d0717d4a0 100644 >--- a/doc/guides/linux_gsg/eal_args.include.rst >+++ b/doc/guides/linux_gsg/eal_args.include.rst >@@ -69,6 +69,19 @@ Device-related options > > --vdev 'net_pcap0,rx_pcap=3Dinput.pcap,tx_pcap=3Doutput.pcap' > >+* ``--manual-probe`` >+ >+ Switch the ``EAL`` probe mode to manual. The main bus probe step >+ is disabled and applications are expected to manually probe >+ devices using ``rte_dev_probe()``. >+ >+ Devices declared on the command-line using ``-w`` and ``-vdev`` >+ are interpreted as hotplug commands. They are thus probed in the >+ order they are declared. >+ >+ This makes this option useful to enforce a specific device probe >+ order, instead of relying on each bus scan implementation details. >+ > * ``-d `` > > Load external drivers. An argument can be a single shared object file= , >or a >diff --git a/doc/guides/rel_notes/release_20_02.rst >b/doc/guides/rel_notes/release_20_02.rst >index 50e2c1484..f6b3b3def 100644 >--- a/doc/guides/rel_notes/release_20_02.rst >+++ b/doc/guides/rel_notes/release_20_02.rst >@@ -56,6 +56,15 @@ New Features > Also, make sure to start the actual text at the margin. > >=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D >=3D=3D=3D > >+* **EAL will now allow probing devices manually.** >+ >+ Previously, a user could not force an order when probing declared >devices. >+ This could cause issues for drivers depending on another device being >present. >+ A new option ``--manual-probe`` is now available to do just that. >+ This new option relies on the device bus supporting hotplug. It can >+ also be used to disable automatic probing from the ``PCI`` bus without >+ having to disable the whole bus. >+ > * **Added Wait Until Equal API.** > > A new API has been added to wait for a memory location to be >updated with a >diff --git a/lib/librte_eal/common/eal_common_bus.c >b/lib/librte_eal/common/eal_common_bus.c >index baa5b532a..145a96812 100644 >--- a/lib/librte_eal/common/eal_common_bus.c >+++ b/lib/librte_eal/common/eal_common_bus.c >@@ -6,6 +6,7 @@ > #include > #include > >+#include > #include > #include > #include >@@ -63,6 +64,11 @@ rte_bus_probe(void) > int ret; > struct rte_bus *bus, *vbus =3D NULL; > >+ if (rte_eal_manual_probe()) { >+ RTE_LOG(DEBUG, EAL, "Manual probing enabled.\n"); >+ return rte_dev_probe_devargs_list(); >+ } >+ > TAILQ_FOREACH(bus, &rte_bus_list, next) { > if (!strcmp(bus->name, "vdev")) { > vbus =3D bus; >diff --git a/lib/librte_eal/common/eal_common_dev.c >b/lib/librte_eal/common/eal_common_dev.c >index 9e4f09d83..368afa273 100644 >--- a/lib/librte_eal/common/eal_common_dev.c >+++ b/lib/librte_eal/common/eal_common_dev.c >@@ -21,6 +21,7 @@ > #include > #include > >+#include "eal_internal_cfg.h" > #include "eal_private.h" > #include "hotplug_mp.h" > >@@ -83,6 +84,59 @@ rte_dev_is_probed(const struct rte_device *dev) > return dev->driver !=3D NULL; > } > >+int >+rte_eal_manual_probe(void) >+{ >+ return internal_config.manual_probe; >+} >+ >+void >+rte_eal_manual_probe_set(int enabled) >+{ >+ internal_config.manual_probe =3D !!enabled; >+} >+ >+int >+rte_dev_probe_devargs_list(void) >+{ >+ struct rte_device *dev; >+ struct rte_devargs *da; >+ int ret; >+ >+ RTE_EAL_DEVARGS_FOREACH(NULL, da) { >+ dev =3D da->bus->find_device(NULL, cmp_dev_name, >da->name); >+ if (dev =3D=3D NULL) { >+ RTE_LOG(ERR, EAL, "Unable to find device %s >on bus %s\n", >+ da->name, da->bus->name); >+ continue; >+ } >+ >+ if (rte_dev_is_probed(dev)) >+ continue; >+ >+ if (dev->bus->plug =3D=3D NULL) { >+ RTE_LOG(ERR, EAL, "Manual probing (hotplug) >not supported by bus %s, " >+ "required by device %s\n", >+ dev->bus->name, dev->name); >+ continue; >+ } >+ >+ ret =3D dev->bus->plug(dev); >+ /* Ignore positive return values, they are possibly >+ * triggered by blacklisted devices on the PCI bus. >Probing >+ * should then continue. >+ */ >+ if (ret < 0) { >+ RTE_LOG(ERR, EAL, "Driver cannot attach device >%s\n", >+ dev->name); >+ /* Fail on first real probe error. */ >+ return ret; >+ } >+ } >+ >+ return 0; >+} >+ > /* helper function to build devargs, caller should free the memory */ > static int > build_devargs(const char *busname, const char *devname, >diff --git a/lib/librte_eal/common/eal_common_options.c >b/lib/librte_eal/common/eal_common_options.c >index 5920233bc..f899eea4d 100644 >--- a/lib/librte_eal/common/eal_common_options.c >+++ b/lib/librte_eal/common/eal_common_options.c >@@ -82,6 +82,7 @@ eal_long_options[] =3D { > {OPT_LEGACY_MEM, 0, NULL, OPT_LEGACY_MEM_NUM >}, > {OPT_SINGLE_FILE_SEGMENTS, 0, NULL, >OPT_SINGLE_FILE_SEGMENTS_NUM}, > {OPT_MATCH_ALLOCATIONS, 0, NULL, >OPT_MATCH_ALLOCATIONS_NUM}, >+ {OPT_MANUAL_PROBE, 0, NULL, >OPT_MANUAL_PROBE_NUM }, > {0, 0, NULL, 0 } > }; > >@@ -1443,6 +1444,9 @@ eal_parse_common_option(int opt, const >char *optarg, > return -1; > } > break; >+ case OPT_MANUAL_PROBE_NUM: >+ rte_eal_manual_probe_set(1); >+ break; > > /* don't know what to do, leave this to caller */ > default: >@@ -1669,6 +1673,10 @@ eal_common_usage(void) > " --"OPT_VDEV" Add a virtual device.\n" > " The argument format is >[,key=3Dval,...]\n" > " (ex: --vdev=3Dnet_pcap0,iface=3Deth2).\n" >+ " --"OPT_MANUAL_PROBE" Enable manual probing.\n" >+ " Disable probe step for all buses.\n" >+ " Devices will need to be probed using the h= otplug >API.\n" >+ " PCI and vdev declarations will be treated = in >order as hotplug commands.\n" > " --"OPT_IOVA_MODE" Set IOVA mode. 'pa' for >IOVA_PA\n" > " 'va' for IOVA_VA\n" > " -d LIB.so|DIR Add a driver or driver directory\n" >diff --git a/lib/librte_eal/common/eal_internal_cfg.h >b/lib/librte_eal/common/eal_internal_cfg.h >index a42f34923..0006f903f 100644 >--- a/lib/librte_eal/common/eal_internal_cfg.h >+++ b/lib/librte_eal/common/eal_internal_cfg.h >@@ -44,6 +44,7 @@ struct internal_config { > unsigned hugepage_unlink; /**< true to unlink backing files >*/ > volatile unsigned no_pci; /**< true to disable PCI */ > volatile unsigned no_hpet; /**< true to disable HPET */ >+ volatile unsigned manual_probe; /**< true to enable manual >device probing. */ > volatile unsigned vmware_tsc_map; /**< true to use VMware >TSC mapping > > * instead of native TSC */ > volatile unsigned no_shconf; /**< true if there is no shared >config */ >diff --git a/lib/librte_eal/common/eal_options.h >b/lib/librte_eal/common/eal_options.h >index 9855429e5..588fa32a6 100644 >--- a/lib/librte_eal/common/eal_options.h >+++ b/lib/librte_eal/common/eal_options.h >@@ -69,6 +69,8 @@ enum { > OPT_IOVA_MODE_NUM, > #define OPT_MATCH_ALLOCATIONS "match-allocations" > OPT_MATCH_ALLOCATIONS_NUM, >+#define OPT_MANUAL_PROBE "manual-probe" >+ OPT_MANUAL_PROBE_NUM, > OPT_LONG_MAX_NUM > }; > >diff --git a/lib/librte_eal/common/eal_private.h >b/lib/librte_eal/common/eal_private.h >index ddcfbe2e4..680c7db88 100644 >--- a/lib/librte_eal/common/eal_private.h >+++ b/lib/librte_eal/common/eal_private.h >@@ -443,4 +443,13 @@ rte_option_usage(void); > uint64_t > eal_get_baseaddr(void); > >+/** >+ * Go through the devargs list and probe everything in order. >+ * >+ * @return >+ * 0 on success, negative on error. >+ */ >+int >+rte_dev_probe_devargs_list(void); >+ > #endif /* _EAL_PRIVATE_H_ */ >diff --git a/lib/librte_eal/common/include/rte_eal.h >b/lib/librte_eal/common/include/rte_eal.h >index 2f9ed298d..7195f6859 100644 >--- a/lib/librte_eal/common/include/rte_eal.h >+++ b/lib/librte_eal/common/include/rte_eal.h >@@ -421,6 +421,42 @@ int rte_eal_has_hugepages(void); > */ > int rte_eal_has_pci(void); > >+/** >+ * Whether EAL probe is manual. >+ * Enabled by the --manual-probe option or by >+ * using rte_eal_manual_probe_set(). >+ * >+ * When manual probing is enabled, batched bus probe of >+ * their devices is disabled. All devices need to be probed >+ * using the proper rte_dev API. >+ * >+ * In this mode, devices declared on the command line will >+ * be probed using the bus hotplug API. It is used to enforce >+ * a specific probe order. >+ * >+ * @return >+ * Nonzero if manual device probing is enabled. >+ * >+ * @see rte_eal_manual_probe_set >+ */ >+__rte_experimental >+int rte_eal_manual_probe(void); >+ >+/** >+ * Configure EAL probe mode -- manual or automatic. >+ * >+ * Enable or disable manual probe mode in EAL. >+ * This function can be called at any time, but must be used >+ * before calling rte_eal_init() to have any effect. >+ * >+ * @param enabled >+ * zero to disable manual probe, non-zero to enable it. >+ * >+ * @see rte_eal_manual_probe >+ */ >+__rte_experimental >+void rte_eal_manual_probe_set(int enabled); >+ > /** > * Whether the EAL was asked to create UIO device. > * >diff --git a/lib/librte_eal/rte_eal_version.map >b/lib/librte_eal/rte_eal_version.map >index e38d02530..13d04a8bc 100644 >--- a/lib/librte_eal/rte_eal_version.map >+++ b/lib/librte_eal/rte_eal_version.map >@@ -332,4 +332,8 @@ EXPERIMENTAL { > # added in 19.11 > rte_log_get_stream; > rte_mcfg_get_single_file_segments; >+ >+ # added in 20.02 >+ rte_eal_manual_probe; >+ rte_eal_manual_probe_set; > }; >-- >2.25.0