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 95F0EA04B4; Sat, 2 May 2020 09:20:54 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id D6BB21D951; Sat, 2 May 2020 09:20:53 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by dpdk.org (Postfix) with ESMTP id CFE841D6EB for ; Sat, 2 May 2020 09:20:51 +0200 (CEST) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 0427GlUB017972; Sat, 2 May 2020 00:20:50 -0700 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=MNqcVUEFRV8nPnKW2qyvp8WMiaErHSxhC4kQjyG4XXk=; b=l6Oi8+WVAof2/iF864Shau98qR+/OOW+NDl5VW613oKRDz+6Y0CApJQscMdudUYR+WMm q0NOQYGydevoKypc6T0xJFLVy+aiIbPxfHhdS0ukQvJYTJEl0C/K4tZF1mI9gFGWmxJJ FmVO+F7DBvMOatR6kLfF0KEyGG9T2iSjm1lepF6GmenbI8rAi8dtLRJfS5QTMkf/GQi+ HDgSN//D0WpDyIb/LjJOP1KAmjZrUGYbyrLjKuNwvwVUAh+S6RrLMDTI3M0hMMwJynoJ qQnP62FsC+NkMrMsANZS1Lo3MmHSiktNLf4EglzAXzkJXjLYzQyzW4IYjvVlUHZPqywP 3Q== Received: from sc-exch01.marvell.com ([199.233.58.181]) by mx0a-0016f401.pphosted.com with ESMTP id 30r7em6emp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Sat, 02 May 2020 00:20:50 -0700 Received: from SC-EXCH02.marvell.com (10.93.176.82) by SC-EXCH01.marvell.com (10.93.176.81) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Sat, 2 May 2020 00:20:48 -0700 Received: from NAM02-BL2-obe.outbound.protection.outlook.com (104.47.38.57) by SC-EXCH02.marvell.com (10.93.176.82) with Microsoft SMTP Server (TLS) id 15.0.1497.2 via Frontend Transport; Sat, 2 May 2020 00:20:48 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=J+/MmWlo+OEoGN3PyTWnHWe1wCrgpjGVn3J7hFplzAzffGTPI3jitwiOAYOeAgqWij5ejK9fxBiMQCiy49C9ylvKxTEd+QlNAqzW6cClsWm+MP3Q2XKY+X2Po94RxgXs50pvaMCdVJ7nerQDVcZkw6Mm1wj3LCQuuNpw7VCUuz/B4Mjto0RRj92SuSXb7ZHsqPnnZpcmYqVCFwCreWSyvs772FcTGqDku9Uibm389nlmuXkpWg51VV/hCu5GFa+61wicxpYMuepj5TvlT85mp/d7VFiE/dvWqOwluZiWFK1r1myzJZ3OaLLn7RP816+XZFRHdSd+ewMlL28zu3shEw== 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=MNqcVUEFRV8nPnKW2qyvp8WMiaErHSxhC4kQjyG4XXk=; b=DLRprmdvc8i1W4VD7rp0ruDjJ+V75M5M/9FJFPaE62TWPcz/KzVgT1lg7COjWdL5n+M40CB17SVB1VqZvZAB1vU8C1EZqTGnAJK+yBFkej5GgvY+Gkb+LDmNHFXOf6TrHi+3sp6kaqDZ85s/kvywLoajXsF4AT7yp5+NnrlsRnPtLseAhXs3ElWfusFwy1pReFD0tM9TY4RFnXbRlle1JbD4XR6hnFT6MnOMwP0nI989xdmHAh2VXhiuvFadSqy5bYvt1Aj/o6MLraLv9AaBQxSezl9Ak2MJkLW1SVIbnxMQea3sAsur3k7UFUnAXZOWPKninlpDjznCgTWGc6ZQag== 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=MNqcVUEFRV8nPnKW2qyvp8WMiaErHSxhC4kQjyG4XXk=; b=PPI4GDMHViVSB5AcbRWTcHBI/LyAwuSsdkrsYCTQm4cQNnOvJVPPdvievlyFFhoj94lPaLjacVsPry/OHiZJz9FbZ08ozvazcLZgur/kVpEoemT2TTIDCmBj7pvYKXDx8NBQ8KleUe3nUXkzjdQ3YFpiA73oplOo6tVKVs5JX4A= Received: from BY5PR18MB3105.namprd18.prod.outlook.com (2603:10b6:a03:1a4::30) by BY5PR18MB3089.namprd18.prod.outlook.com (2603:10b6:a03:1aa::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2958.21; Sat, 2 May 2020 07:20:47 +0000 Received: from BY5PR18MB3105.namprd18.prod.outlook.com ([fe80::cc6:c7ae:dc40:7ddf]) by BY5PR18MB3105.namprd18.prod.outlook.com ([fe80::cc6:c7ae:dc40:7ddf%7]) with mapi id 15.20.2958.027; Sat, 2 May 2020 07:20:46 +0000 From: Sunil Kumar Kori To: =?iso-8859-1?Q?Ga=EBtan_Rivet?= CC: "stephen@networkplumber.org" , "david.marchand@redhat.com" , "Jerin Jacob Kollanukkaran" , "dev@dpdk.org" Thread-Topic: [EXT] Re: [PATCH v4 1/1] bus/pci: optimise scanning with whitelist/blacklist Thread-Index: AQHWH60omhEuboyrCUS2WGMzBXc5aqiTt7YAgACs6AA= Date: Sat, 2 May 2020 07:20:46 +0000 Message-ID: References: <20200420065554.20138-1-skori@marvell.com> <20200501113909.26355-1-skori@marvell.com> <20200501210013.hbkcm6pcsyxscyvc@u256.net> In-Reply-To: <20200501210013.hbkcm6pcsyxscyvc@u256.net> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: u256.net; dkim=none (message not signed) header.d=none;u256.net; dmarc=none action=none header.from=marvell.com; x-originating-ip: [2401:4900:44e0:ed34:845c:7a64:b8c7:9606] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: e5f8da16-1bd6-4e2d-1848-08d7ee695578 x-ms-traffictypediagnostic: BY5PR18MB3089: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:619; x-forefront-prvs: 039178EF4A x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: VPESkt+ojLkOFqWaxJxPM9vUXjrstFcr1oRoArYlzwSBkW2NT9dKRKhsJM487bchTAeatX9qhVyZ+9x6k3lLwhgRWD4cKXex9F+KjCZpfIKdYKfgG9FIxK2W65NJxOXOh+kT1vIt/U5DSy0UTCvJ1qOMuMYl98l71GqWSdv/dm9AOkMwOLhshhvPIXL/M1zUtae8gtxugfth6L7LnMk8RlN4W+yZ5dm0dacs9ewkiH0WTjqlezzwbRQJVm2DME8n7edqpWTrTkKH3fP1S4xKwvTJflbOkM3iR6yZ7OKe364l3VS4LjUplenq7108X6qjGqAzm0do7bAelM1mkEMSkyXGeasLT9NcErSA3AVwlFYEXE0vi68riuf9SUp9CJ5aT/FG22CQHg2WpVuEKRS6L6mSmynUaitZkJdLQQBSFKYEincsFwZ6K8sD1JftjmB8 x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BY5PR18MB3105.namprd18.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(39850400004)(366004)(136003)(376002)(396003)(346002)(66446008)(64756008)(66946007)(66476007)(66556008)(76116006)(2906002)(71200400001)(8936002)(7696005)(6506007)(186003)(8676002)(52536014)(54906003)(33656002)(478600001)(86362001)(66574012)(4326008)(55016002)(9686003)(316002)(6916009)(5660300002); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata: sX3JqNujlcHjsniL36XvreVLjr84SfIHYApInxA1LNBuaoSumi8qFPQ+M1bzVXviIYy4lpiAMT0BGxkqZN8XVwM5yFGGg08d0nzyujzvJ0w9VxTs3q68v9SlhNvY5LilDk/H55ypihzo4I7eMeQz+HUwhMlzAdljfDn7kjsJ5SXND3o2aCEGatik2YY6NWlaM/6d3SqO6cbSA9umcNA6886h5fmboD15WczyBGPqdgXCPTypsMcJ+QggMdDPEH04a7wM8T2w0A64f1nN0bqX1cihpgFpibi7mZnPTwPDBwNprpyAL1yHyb6WMLdNMgADC2xD5ecsA+VYcjAirxmXBK8tQo9B0xUFszP5mDYZrrXp6MR4fjrpBZoTG8qbK+uWDwLW5a1xd74ZlFvLjAZeGKYNJih6s0rwRMznvZPA4ieIIDgqBS596z3tkX2vzexaAwPb/3IVPVOYRiAMamd6TgKGHh+RqTUtRhIMJLU5ob8nkBqwpVO4eGx0fiK3h6Y3PDKsR/QErDDfuwlSbRrfeXJO1f7je5L0MteKv3YdeFWRy5LeMdszaKLdFxB84fzY+zfIV9pQ6ug1NQG0HBW3QzjuhqaPfM50ExmjhyPDyJ/bJCAA+1GTUxTKg1A/T3uf9zkuFiupk9/qMs79A4lEYFVeMgYsiYuK1tZYvogqYiezhrfMVPX7M3qcCsRJwlO7sTnGhKWxA6/YWpiB01X1rexyUaJGyr6NG2wPRPXlfqaAucGTihvIlkd/9+2tuX6xnAF1WuCFxf2eeqnsQmmc4ZTn6o2B6ssNE6bK/6uRCFwITKF01EyhJEbwQL/bF4lCeyjhxnWonzOFVJ2jqQgsIXgDmeipSZuWcmaVpdVQooOeZHJPoNAn4JCG10dpRj71 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: e5f8da16-1bd6-4e2d-1848-08d7ee695578 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 May 2020 07:20:46.7196 (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: h3V1rcIbEy//dNfNjMpb+J28s+I8vRqFFzsnBQ6F6fEld20nI5t7bZvnc02yxiHeD/H3EmhRuk50Q6CRZUOEmQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR18MB3089 X-OriginatorOrg: marvell.com X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138, 18.0.676 definitions=2020-05-02_03:2020-05-01, 2020-05-02 signatures=0 Subject: Re: [dpdk-dev] [EXT] Re: [PATCH v4 1/1] bus/pci: optimise scanning with whitelist/blacklist 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" >-----Original Message----- >From: Ga=EBtan Rivet >Sent: Saturday, May 2, 2020 2:30 AM >To: Sunil Kumar Kori >Cc: stephen@networkplumber.org; david.marchand@redhat.com; Jerin Jacob >Kollanukkaran ; dev@dpdk.org >Subject: [EXT] Re: [PATCH v4 1/1] bus/pci: optimise scanning with >whitelist/blacklist > >External Email > >---------------------------------------------------------------------- >Hello Sunil, > >It's pretty close, thanks. Unfortunately, I just have a few nits remaining= . > >On 01/05/20 17:09 +0530, Sunil Kumar Kori wrote: >> rte_bus_scan API scans all the available PCI devices irrespective of >> white or black listing parameters then further devices are probed >> based on white or black listing parameters. So unnecessary CPU cycles >> are wasted during rte_pci_scan. >> >> For Octeontx2 platform with core frequency 2.4 Ghz, rte_bus_scan >> consumes around 26ms to scan around 90 PCI devices but all may not be >> used by the application. So for the application which uses 2 NICs, >> rte_bus_scan consumes few microseconds and rest time is saved with this >patch. >> >> Patch restricts devices to be scanned as per below mentioned conditions: >> - All devices will be scanned if no parameters are passed. >> - Only white listed devices will be scanned if white list is available. >> - All devices, except black listed, will be scanned if black list is >> available. >> >> Signed-off-by: Sunil Kumar Kori >> --- >> v4: >> - Review comments incorporated (Gaeten and David). >> - Rebased on top of tree. >> v3: >> - Remove __rte_experimental from private function. >> - Remove entry from map file too. >> v2: >> - Added function to validate ignorance of device based on PCI address. >> - Marked device validation function as experimental. >> >> drivers/bus/pci/bsd/pci.c | 12 +++++++++++- >> drivers/bus/pci/linux/pci.c | 3 +++ drivers/bus/pci/pci_common.c | >> 33 ++++++++++++--------------------- >> drivers/bus/pci/private.h | 11 +++++++++++ >> 4 files changed, 37 insertions(+), 22 deletions(-) >> >> diff --git a/drivers/bus/pci/bsd/pci.c b/drivers/bus/pci/bsd/pci.c >> index ebbfeb13a..709a1e7e5 100644 >> --- a/drivers/bus/pci/bsd/pci.c >> +++ b/drivers/bus/pci/bsd/pci.c >> @@ -338,6 +338,7 @@ rte_pci_scan(void) >> .match_buf_len =3D sizeof(matches), >> .matches =3D &matches[0], >> }; >> + struct rte_pci_addr pci_addr; >> >> /* for debug purposes, PCI can be disabled */ >> if (!rte_eal_has_pci()) >> @@ -357,9 +358,18 @@ rte_pci_scan(void) >> goto error; >> } >> >> - for (i =3D 0; i < conf_io.num_matches; i++) >> + for (i =3D 0; i < conf_io.num_matches; i++) { >> + pci_addr.domain =3D matches[i].pc_sel.pc_domain; >> + pci_addr.bus =3D matches[i].pc_sel.pc_bus; >> + pci_addr.devid =3D matches[i].pc_sel.pc_dev; >> + pci_addr.function =3D matches[i].pc_sel.pc_func; >> + >> + if (rte_pci_ignore_device_addr(&pci_addr)) >> + continue; >> + >> if (pci_scan_one(fd, &matches[i]) < 0) >> goto error; >> + } >> >> dev_count +=3D conf_io.num_matches; >> } while(conf_io.status =3D=3D PCI_GETCONF_MORE_DEVS); diff --git >> a/drivers/bus/pci/linux/pci.c b/drivers/bus/pci/linux/pci.c index >> ca783b157..ec347eff3 100644 >> --- a/drivers/bus/pci/linux/pci.c >> +++ b/drivers/bus/pci/linux/pci.c >> @@ -487,6 +487,9 @@ rte_pci_scan(void) >> if (parse_pci_addr_format(e->d_name, sizeof(e->d_name), >&addr) !=3D 0) >> continue; >> >> + if (rte_pci_ignore_device_addr(&addr)) >> + continue; >> + >> snprintf(dirname, sizeof(dirname), "%s/%s", >> rte_pci_get_sysfs_path(), e->d_name); >> >> diff --git a/drivers/bus/pci/pci_common.c >> b/drivers/bus/pci/pci_common.c index 3f5542076..d34e59536 100644 >> --- a/drivers/bus/pci/pci_common.c >> +++ b/drivers/bus/pci/pci_common.c >> @@ -42,14 +42,17 @@ const char *rte_pci_get_sysfs_path(void) >> return path; >> } >> >> -static struct rte_devargs *pci_devargs_lookup(struct rte_pci_device >> *dev) >> +static struct rte_devargs * >> +pci_devargs_lookup(const struct rte_pci_addr *pci_addr) >> { >> struct rte_devargs *devargs; >> struct rte_pci_addr addr; >> >> RTE_EAL_DEVARGS_FOREACH("pci", devargs) { >> - devargs->bus->parse(devargs->name, &addr); >> - if (!rte_pci_addr_cmp(&dev->addr, &addr)) >> + if (rte_pci_addr_parse(devargs->name, &addr) < 0) >> + continue; >> + >> + if (!rte_pci_addr_cmp(pci_addr, &addr)) > >I'm really sorry, I was overzealous on your v4. I thought using >devargs->bus->parse() was from your patch, but it was already there. > >It's even more shameful as it was me who wrote this. > >Anyway, it's much better looking this way, but it should be a separate pat= ch. > No problem. I will revert this change to its original state and later will = share separate Patch to replace devargs->bus->parse. >> return devargs; >> } >> return NULL; >> @@ -63,7 +66,7 @@ pci_name_set(struct rte_pci_device *dev) >> /* Each device has its internal, canonical name set. */ >> rte_pci_device_name(&dev->addr, >> dev->name, sizeof(dev->name)); >> - devargs =3D pci_devargs_lookup(dev); >> + devargs =3D pci_devargs_lookup(&dev->addr); >> dev->device.devargs =3D devargs; >> /* In blacklist mode, if the device is not blacklisted, no >> * rte_devargs exists for it. >> @@ -293,23 +296,12 @@ rte_pci_probe(void) { >> struct rte_pci_device *dev =3D NULL; >> size_t probed =3D 0, failed =3D 0; >> - struct rte_devargs *devargs; >> - int probe_all =3D 0; >> int ret =3D 0; >> >> - if (rte_pci_bus.bus.conf.scan_mode !=3D RTE_BUS_SCAN_WHITELIST) >> - probe_all =3D 1; >> - >> FOREACH_DEVICE_ON_PCIBUS(dev) { >> probed++; >> >> - devargs =3D dev->device.devargs; >> - /* probe all or only whitelisted devices */ >> - if (probe_all) >> - ret =3D pci_probe_all_drivers(dev); >> - else if (devargs !=3D NULL && >> - devargs->policy =3D=3D RTE_DEV_WHITELISTED) >> - ret =3D pci_probe_all_drivers(dev); >> + ret =3D pci_probe_all_drivers(dev); >> if (ret < 0) { >> if (ret !=3D -EEXIST) { >> RTE_LOG(ERR, EAL, "Requested device " >> @@ -589,10 +581,10 @@ pci_dma_unmap(struct rte_device *dev, void >*addr, uint64_t iova, size_t len) >> return -1; >> } >> >> -static bool >> -pci_ignore_device(const struct rte_pci_device *dev) >> +bool >> +rte_pci_ignore_device_addr(const struct rte_pci_addr *pci_addr) > >I'd prefer naming this function rte_pci_ignore_device(), given that >pci_ignore_device() disappears. > Ack. >> { >> - struct rte_devargs *devargs =3D dev->device.devargs; >> + struct rte_devargs *devargs =3D pci_devargs_lookup(pci_addr); >> >> switch (rte_pci_bus.bus.conf.scan_mode) { >> case RTE_BUS_SCAN_WHITELIST: >> @@ -627,8 +619,7 @@ rte_pci_get_iommu_class(void) >> if (iommu_no_va =3D=3D -1) >> iommu_no_va =3D pci_device_iommu_support_va(dev) >> ? 0 : 1; >> - if (pci_ignore_device(dev)) >> - continue; >> + >> if (dev->kdrv =3D=3D RTE_KDRV_UNKNOWN || >> dev->kdrv =3D=3D RTE_KDRV_NONE) >> continue; >> diff --git a/drivers/bus/pci/private.h b/drivers/bus/pci/private.h >> index a205d4d9f..3874219ba 100644 >> --- a/drivers/bus/pci/private.h >> +++ b/drivers/bus/pci/private.h >> @@ -42,6 +42,17 @@ int rte_pci_scan(void); void pci_name_set(struct >> rte_pci_device *dev); >> >> +/** >> + * Validate whether a device with given pci address should be ignored o= r >not. >> + * >> + * @param pci_addr >> + * PCI address of device to be validated >> + * @return >> + * 1: if device is to be ignored, >> + * 0: if device is to be scanned, >> + */ >> +bool rte_pci_ignore_device_addr(const struct rte_pci_addr *pci_addr); >> + >> /** >> * Add a PCI device to the PCI Bus (append to PCI Device list). This fu= nction >> * also updates the bus references of the PCI Device (and the generic >> device >> -- >> 2.17.1 >> > >Otherwise it looks good to me, almost finished! > >-- >Ga=EBtan