From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1nam02on0047.outbound.protection.outlook.com [104.47.36.47]) by dpdk.org (Postfix) with ESMTP id D08765589 for ; Tue, 17 Jan 2017 14:35:13 +0100 (CET) Received: from CY1PR03CA0027.namprd03.prod.outlook.com (10.174.128.37) by SN1PR0301MB1583.namprd03.prod.outlook.com (10.162.130.17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.845.12; Tue, 17 Jan 2017 13:35:12 +0000 Received: from BL2FFO11FD023.protection.gbl (2a01:111:f400:7c09::173) by CY1PR03CA0027.outlook.office365.com (2603:10b6:600::37) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.860.13 via Frontend Transport; Tue, 17 Jan 2017 13:35:12 +0000 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=nxp.com; nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=fail action=none header.from=nxp.com;nxp.com; dkim=none (message not signed) header.d=none; Received-SPF: Fail (protection.outlook.com: domain of nxp.com does not designate 192.88.168.50 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.168.50; helo=tx30smr01.am.freescale.net; Received: from tx30smr01.am.freescale.net (192.88.168.50) by BL2FFO11FD023.mail.protection.outlook.com (10.173.161.102) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.803.8 via Frontend Transport; Tue, 17 Jan 2017 13:35:11 +0000 Received: from tophie.ap.freescale.net ([10.232.14.39]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id v0HDYI2m005071; Tue, 17 Jan 2017 06:35:09 -0700 From: Shreyansh Jain To: CC: , , Shreyansh Jain Date: Tue, 17 Jan 2017 19:07:43 +0530 Message-ID: <1484660264-6531-9-git-send-email-shreyansh.jain@nxp.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1484660264-6531-1-git-send-email-shreyansh.jain@nxp.com> References: <1484647774-28984-1-git-send-email-shreyansh.jain@nxp.com> <1484660264-6531-1-git-send-email-shreyansh.jain@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131291337115917711; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.168.50; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(7916002)(336005)(39410400002)(39860400002)(39850400002)(39450400003)(39380400002)(39840400002)(39400400002)(2980300002)(1110001)(1109001)(339900001)(189002)(199003)(5660300001)(50466002)(8936002)(106466001)(68736007)(356003)(2351001)(38730400001)(97736004)(105606002)(8676002)(48376002)(33646002)(86362001)(30001)(50226002)(575784001)(85426001)(77096006)(626004)(50986999)(5003940100001)(305945005)(92566002)(76176999)(110136003)(47776003)(104016004)(54906002)(4326007)(81166006)(6666003)(2906002)(2950100002)(6916009)(81156014)(189998001)(36756003)(8656002); DIR:OUT; SFP:1101; SCL:1; SRVR:SN1PR0301MB1583; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11FD023; 1:bM3vEoxBdMUqAdIqYXWN7mFgqnvuPkuRVeAwBQHhGmoX+ry1ZMqm25bEm4tZyY1q/bJIxGOJaVNvaTlWyFZrxMgzEmLt2oej3yXpiXYMDPDB4xEWWZzzgQ2lKWPUMahrxqBfaxJLyusMaTC5/0BQWbbNDDLjPDbZZO7ieSNWDCUJEvBr6U1kXNATDY+QMu5ugZ7ofYbmmVOCtuy2TcVXGonmFuqv36aFXD1BxU9IueabnIalUl6ln5xPN2XUXAofyFFCbWEQpkNOoHHggORWRit7XaDvT4thtgzGxDsdpKMo0ZLFcMtUcCia9CIebHMLIPQdvIZdoWS1kwXUfvzEUzxViWYFIl8+gMAHtr/Zg3LFAXBgV5f8LmFsPDW4W/GcPa6WpM9PdkRjYuUEZExzcytT0NALZUOcEQFPXWiz+/yUP1aKXcI3fkgrEJtcoN3Rp1j5ZhaVaeOA66Ejyu/UooQ9YShLRbtU8WCNsT1COqSXr1z6BK1fNWEfooXSOK6pB+0YseUocpovx5PGjTI8J8c9i5vWvGeUv+00o4tAS3ppfYUClTyOpumweSxuUMkk1VxfBy25NP/wV7k/9JGFgiiNl2gHTUR8v4hhAp+qxrqm0nnXPB8yTc2wtvp/2fXeeHa8+2jZQ97bTKE1jT3CE7SiKDAPkOmo+tBk7/OfQPX8E0cI1aubkXmfbqzLNr9+uqCyZPNB5RcdYxxagbMngw== MIME-Version: 1.0 Content-Type: text/plain X-MS-Office365-Filtering-Correlation-Id: 037ee517-2b11-4e2f-fc2e-08d43edda955 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:SN1PR0301MB1583; X-Microsoft-Exchange-Diagnostics: 1; SN1PR0301MB1583; 3:R0BDgwQjk7a6yYngMxHVDfAAxy47v6pq550RfR6rePiVHlelaTcpyD3YrU+8UT2PiOXfgeSJNTZ74BaI5aHwIVbr9jEWi4H1XNEX3zkRFPoNI7vB9VJZ5+ukdyOmzD7S8GdZOjHdNxU1iR8yHryr8+99QDPNHgrF8j5suA5YZt73yu9g6GCyYeDLaLszARJUeIGiCJeBNhkknNK6y5FPKCWXBQoeD2HmN/nK56vuQXeC7FXShPle7wLpQvLBA78ZYi8JsHJyEZN6d3sW7IttRlMMVCKF/pEMiX+q9IM2WHFU5OlalVTuKkQ6JjS+cDrXr3tsRz8pAn4Doda2TQr/SV+ld4mXIJ6CUlpFTKUDBnc6xPMGMPrtggE5DwNlSGyy; 25:ezxFY6yMuRN8Co+Ov1e+STI2zh0vgR1m4MSyexyML36ZPAtLmQnrsGGx8CFkLKiIKIbG936DjanV9muYZsBEvCn9a20ApnxjoXLa1D33ec6ZoeB0ILDYlmpWARo0LaauFDD3QNFSdG+j523qf+61u1GbfpLFqNP4V9nubyRJvOtbMZRy8eWA0prCJ68wN+6cLi10WceLhOsnySHsnqRv98FbhmU4tgGTHmsBGTeMAdQerA2XPChPPINXIsce4LBNNsft04v5lnINqlJ5wM3TFETM1LrhVw90aeDthRHF+ERPIQy5V6AALbXurAw6S3e5e+tP6SBM6P7HXhJzOZvHr9RMMTwC5xyCz0D6aDjnDNM+xO75yDjx1NdRVzAz94NYav7Iu2wdZnWM89K2cIJssijB4aBGb2IxEXLgQEH6Z+ESTuGRrX7ZExZY9/ntLFCi1f37lJE5MnPptm2kLb/L1w== X-Microsoft-Exchange-Diagnostics: 1; SN1PR0301MB1583; 31:Bd7AZh1gbG1RNKHhoN5bIaB6lSox0oerNDKupJHfDa15Y5G6H2kSMv7FlS8o3I5sL48Mj0uHMiErLx0Gd9Z6jKQESKTaYMbcM+WqnXbCpk4WQoc94sAysapa0BPtX1DktCwYzJur6tcAoc8fu7TsTsPdwdkro4P+U9+neA3AWHt+CmEPS3oQ4iEx8BM7AWtaKV5OOJ0NSCk5AIIG9V/YR1GQoHO3atbqrgbJeXYoijo2h0e4X2iw5Skuli4z8zJ3yD5b9d9tTehWDxaQZPb8QA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197)(228905959029699); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6095060)(601004)(2401047)(5005006)(8121501046)(13017025)(13023025)(13024025)(13015025)(13018025)(10201501046)(3002001)(6055026)(6096035)(20161123565025)(20161123563025)(20161123556025)(20161123561025)(20161123559025); SRVR:SN1PR0301MB1583; BCL:0; PCL:0; RULEID:(400006); SRVR:SN1PR0301MB1583; X-Microsoft-Exchange-Diagnostics: 1; SN1PR0301MB1583; 4:BttEfF2PvpGTO6soedUW24xq59a4heLYFn5rqDFIPCWVw/s35uccytqSqJvF06lzdh/DpmYzL3icpE1RwkOiMew3uUGBG2IM+AhAtY0Zed7KofOCDiI8H+VSYxxCLgRzZ267uo66UX7q/tuDy1yeHR3aISjkNxtXmRrTMNXQaP0OKb+MJKpWLrw39qy60D2szu0EhkzX/Y6X9eujCF2qmUn8o/ECEL9RO/isz5cEtM8o0SCsO+g5+01lpzURWZNfsaPwrSnCZYOeSWz0DGkeBOlgF0GQFKeoqnArDcsfTBhFk+W8KnNzvwl2mHRnW0SARb6S03miLVhtl8002dU0k9SPbsHqQJMrWQVXjHA0D0PXvPxxf8ReLH1nELaq7A5qhU97p4GAf5B5xRNS2JVBKZz8f5K8fak2yoodMnmfb7iR0w4FNkXrChWX1MkOvHCXPskljfXf8ArquVWOwGTEwKhnVgXATyaYhz/sMceP6N6Y/l0zto5KnKG/c6UYP4T5HQjx9ybqD2v/ktmy8oe/PAVPaIzxw7jZ5pbJhed/M2hp9AIkH6eDbdoWhNr2KEuqjwYYsHs9BRGz0KqGt+fWgUw8Aij1IKHKD66aAp5YHmiL4PDOAROCiWNc9XbY8x946MJ4CAYuU7ibjGKRDhk4UMF6yATq6+atjTWWR4b/6/FQEtGy/aUraTGdduxYyMhNUv7xYwDmJo2itrfTemVa5zzRc72Vu63795uSH/d17ei1We4wdbWxD9X2ZciuO+UqxFZoswKXvKpLkl/5HS81vw== X-Forefront-PRVS: 01901B3451 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; SN1PR0301MB1583; 23:J7sQ9zLv7Fl6stB3xYjnYOhERp9ixPLqmg/e8mA?= =?us-ascii?Q?IWwKM8/fESDGKFmRbc/d5SSH5HUYW714b4EnEEbVgtrGBQbUirQ45Q5l+nEf?= =?us-ascii?Q?kPR9OwspCTbfHxtbCGY7cnYi+t7WHpSvw2PBwH25J79DELsiCq7ThbrH+O34?= =?us-ascii?Q?EZP0EF7WgwAMoAAQMcGKxXui/OitZPtI3Zdipfo28c2GJKFdtUVQ5ONJmPOl?= =?us-ascii?Q?mEOASQKD2gw6X4Bz7HcZDQNHCp+t3BZ1QuG/z0bvuWSGZubvcXNtgcWZexpu?= =?us-ascii?Q?3EE051YmmBo+izUjnCVii/eUYTez0kEfQd/t9BuoifAHw1/EuJZRTNEi93ml?= =?us-ascii?Q?rbOR5l+DfQUa9GW4a6kxY9i9C7U+DxXGSojd0NPs7XDEJ9IHJFZeq+JheEs7?= =?us-ascii?Q?CBZx0By0SzSEl6wUbJcWmY9T2RvqMHKV88vX5lgjL8F4YKn6Be1+X0EpePGz?= =?us-ascii?Q?00Kw5bokeGRBZZE4T2tPniEmUhoQB5iOE1fP0DTu/DCMDALilZ6AnnYlREoO?= =?us-ascii?Q?nHM5yUIOo3hgSnQB719KF4Kc66Hq7588tgRkCiGlXSGKBExslfsYxUhPh4Wv?= =?us-ascii?Q?3gbepLEj/vcKvK4ws67RSYyL1zypPwpb8KBji7eT32ciwqoBtGxjP1955fbL?= =?us-ascii?Q?9JgU2fsjAcphiBDAoqCT9AOfG9DaTytA0j+JMb0KH07h009elQc7DBHc3DuH?= =?us-ascii?Q?xZrsqenRaMklSvknkXqTkcmbkK69VmlNx10cRyvFQqMja8EtqbRpgEIc/Vez?= =?us-ascii?Q?ekMhwLfI2RsHHcOKnHr7I7kBDpQ7q1cx0VKgmf6RhJfxJLYC3aRxA+DlXY7Z?= =?us-ascii?Q?4qY0mkUM7k6vmdk1dOckgKBA1HUIkuss6LudXkmDNuyofERFs/ZH4SPMHiKp?= =?us-ascii?Q?YNOM3O/sSXz3Lp3+LBEjwVY3VHmhtGCJ74EYLSIsr5usQ9Fme4d/T2INvp/z?= =?us-ascii?Q?cBRz+Uu+y3yl7vKyBVZA3GwmDCFdVHOq8AF1A4gJum4B5tfCaMCDy7wL8aNN?= =?us-ascii?Q?gsNcBGZretBknb69VSnWqmNztYNxHzbjXWATNyM03KWUy1NU9C17lapH9ffN?= =?us-ascii?Q?KWmwuvfW+k19Idrn9nfQlI9vGlpwePwXmxNYqhEYh97yuHm7XeBnHGJrwSo8?= =?us-ascii?Q?YdvWdiixw/TdistJdFi9f8lOOnJ/aKN1obpbKvaxHB2tpMDcM5DhIjvhghft?= =?us-ascii?Q?vV0KiS3P40DYo71+MltjdYqJFZ4+1eSIaa344NZZrSbkRsSTYVEAoEwNqfV6?= =?us-ascii?Q?wjJKpiSrZxpdTk+w9M5v0n2RAuTysQpK9ItKTCQ7unXr2IrkRv1cmeFQBcDR?= =?us-ascii?Q?oGICzQjKYn1JCQ4kxOIysmhTzIifQkTLpe9rhpxNZzan0?= X-Microsoft-Exchange-Diagnostics: 1; SN1PR0301MB1583; 6:f01Gw5/AlPqn6j6v3WyW4BhRBNqdpboJ1tgd1cOrbhCsi3obmqQKwR7q051VUiw6t+VqBdLQjdPW2ElVOI7X9tx8Adjc3B82miLspVOYYlaEBz7pC3eIsoZ+/Qn6CfqegPd8RQ82YvBhUFymCJlvgvyGnd8LetXvefsQdZhSlPUx7EJGPZVb+gIMdf+mnHeerzUXZyXhD1Ni/EouxDx8XoFkypgv4dj+6WY1UhP+xG6nTd2KXgn1hNuoL+R4nmXKzo/1nMcCHU3D7IfiHS9rKNijwkoA4jnDZjT5P9XXfaaSMIKnnKhXiVArMWFmUGDV9zhyrQxTG+j+AI3s8WEhNvuQQaCFT7FnGysLIWeE2Z6rIR+TkdMLmW9PHy8wo+L3/S9VvvoSPMqlX4Oe0ahBFVcitaEPs13ZgbViFUBr1LAz0ANrtY/L7rdSQstVv+AZ; 5:NX5YjWVgMhQmW472t5e/Vh0+WPdpznPw4g7Vd7jaFDybHu71tonVtutGbgCPbTxokMvIc5JJsqUI0iRpunEpTuae2RdHdNuhPpZeBWU+HLLqAQIyI72KYHNFyN0ouq0IlduQxGX+8bfvZJ6+Ikv836I3SNk9x/GuaAbFv1TdZmQPg+2wG9+Cj+owJhAw/GGO; 24:wqAnpiXlRX5iSyacReIMPX9voFIKx8zYRCQnBu7t5lJ1OvyO9ca2oJI5gn84wqK/i17u0XlU62ZPEO84E6EzpDNXij4LTlE+QfZanWiSz5M= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; SN1PR0301MB1583; 7:Gx+KXCBFathy9v5KqpibiYZ4Pb0+vGYi8dKYJH2vaKdVvUaSAika5CaMxPJlauGQh+sLfzQgs+CTZbbTyvrJ7OPjfsUuNpOknZvHB49haZCY/p2w6WW70b5usib/6AZSSkffuPU6HiAj0GA9NXUVEbYW4pP/9nvW//BtelezpYIsBYdLI3QgBRD1HJKuUr0/R5VFIo/hPftdAAKC8MdJhWoIYIplA9zsXvcJxdC8O2ZG2OE7rjbSfP0AYgAZU0sk/Ul6eI71ZkOnTE6TCkGO9U0gyjnZcjxc/QHyWnyPO+Ja/tJnLFqFmOnFiH2cJgwnRedTZdAGR7Mba20avNLtm34dDuNV43Mh87gP7faTDkHDspZrofnvQUDHyRZICzuSeWsZ0RS+riwNliDvTmXByiFL0jJRGBfxsD9gHFmhZXYF6yGTScZQzs5TEkq2tlYlvSleDoWmIz6ojpon5tq3Eg== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jan 2017 13:35:11.4201 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[192.88.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR0301MB1583 Subject: [dpdk-dev] [PATCH v8 8/9] eal: enable PCI bus 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: , X-List-Received-Date: Tue, 17 Jan 2017 13:35:14 -0000 Remove EAL initiated direct PCI scan/probe and enable PCI Bus linkage. Signed-off-by: Shreyansh Jain Reviewed-by: Ferruh Yigit --- lib/librte_eal/bsdapp/eal/eal.c | 7 ----- lib/librte_eal/bsdapp/eal/eal_pci.c | 4 +++ lib/librte_eal/bsdapp/eal/rte_eal_version.map | 2 -- lib/librte_eal/common/eal_common_pci.c | 36 +++++++++++---------- lib/librte_eal/common/eal_private.h | 10 ------ lib/librte_eal/common/include/rte_pci.h | 22 +++++-------- lib/librte_eal/linuxapp/eal/eal.c | 7 ----- lib/librte_eal/linuxapp/eal/eal_pci.c | 42 +++++++++---------------- lib/librte_eal/linuxapp/eal/rte_eal_version.map | 2 -- 9 files changed, 45 insertions(+), 87 deletions(-) diff --git a/lib/librte_eal/bsdapp/eal/eal.c b/lib/librte_eal/bsdapp/eal/eal.c index a584447..a7f2671 100644 --- a/lib/librte_eal/bsdapp/eal/eal.c +++ b/lib/librte_eal/bsdapp/eal/eal.c @@ -562,9 +562,6 @@ rte_eal_init(int argc, char **argv) if (rte_eal_timer_init() < 0) rte_panic("Cannot init HPET or TSC timers\n"); - if (rte_eal_pci_init() < 0) - rte_panic("Cannot init PCI\n"); - eal_check_mem_on_local_socket(); if (eal_plugins_init() < 0) @@ -613,10 +610,6 @@ rte_eal_init(int argc, char **argv) rte_eal_mp_remote_launch(sync_func, NULL, SKIP_MASTER); rte_eal_mp_wait_lcore(); - /* Probe & Initialize PCI devices */ - if (rte_eal_pci_probe()) - rte_panic("Cannot probe PCI\n"); - /* Probe all the buses and devices/drivers on them */ if (rte_bus_probe()) rte_panic("Cannot probe devices\n"); diff --git a/lib/librte_eal/bsdapp/eal/eal_pci.c b/lib/librte_eal/bsdapp/eal/eal_pci.c index 48bfe24..e0deded 100644 --- a/lib/librte_eal/bsdapp/eal/eal_pci.c +++ b/lib/librte_eal/bsdapp/eal/eal_pci.c @@ -365,6 +365,10 @@ rte_eal_pci_scan(void) .matches = &matches[0], }; + /* for debug purposes, PCI can be disabled */ + if (internal_config.no_pci) + return 0; + fd = open("/dev/pci", O_RDONLY); if (fd < 0) { RTE_LOG(ERR, EAL, "%s(): error opening /dev/pci\n", __func__); diff --git a/lib/librte_eal/bsdapp/eal/rte_eal_version.map b/lib/librte_eal/bsdapp/eal/rte_eal_version.map index c43140c..f9ec086 100644 --- a/lib/librte_eal/bsdapp/eal/rte_eal_version.map +++ b/lib/librte_eal/bsdapp/eal/rte_eal_version.map @@ -6,8 +6,6 @@ DPDK_2.0 { eal_parse_sysfs_value; eal_timer_source; lcore_config; - pci_device_list; - pci_driver_list; per_lcore__lcore_id; per_lcore__rte_errno; rte_calloc; diff --git a/lib/librte_eal/common/eal_common_pci.c b/lib/librte_eal/common/eal_common_pci.c index 5f2cab5..d8c1350 100644 --- a/lib/librte_eal/common/eal_common_pci.c +++ b/lib/librte_eal/common/eal_common_pci.c @@ -83,11 +83,6 @@ #include "eal_private.h" -struct pci_driver_list pci_driver_list = - TAILQ_HEAD_INITIALIZER(pci_driver_list); -struct pci_device_list pci_device_list = - TAILQ_HEAD_INITIALIZER(pci_device_list); - #define SYSFS_PCI_DEVICES "/sys/bus/pci/devices" const char *pci_get_sysfs_path(void) @@ -315,7 +310,7 @@ pci_probe_all_drivers(struct rte_pci_device *dev) if (dev->driver != NULL) return 0; - TAILQ_FOREACH(dr, &pci_driver_list, next) { + FOREACH_DRIVER_ON_PCIBUS(dr) { rc = rte_eal_pci_probe_one_driver(dr, dev); if (rc < 0) /* negative value is an error */ @@ -342,7 +337,7 @@ pci_detach_all_drivers(struct rte_pci_device *dev) if (dev == NULL) return -1; - TAILQ_FOREACH(dr, &pci_driver_list, next) { + FOREACH_DRIVER_ON_PCIBUS(dr) { rc = rte_eal_pci_detach_dev(dr, dev); if (rc < 0) /* negative value is an error */ @@ -363,6 +358,7 @@ int rte_eal_pci_probe_one(const struct rte_pci_addr *addr) { struct rte_pci_device *dev = NULL; + int ret = 0; if (addr == NULL) @@ -374,7 +370,7 @@ rte_eal_pci_probe_one(const struct rte_pci_addr *addr) if (pci_update_device(addr) < 0) goto err_return; - TAILQ_FOREACH(dev, &pci_device_list, next) { + FOREACH_DEVICE_ON_PCIBUS(dev) { if (rte_eal_compare_pci_addr(&dev->addr, addr)) continue; @@ -404,7 +400,7 @@ rte_eal_pci_detach(const struct rte_pci_addr *addr) if (addr == NULL) return -1; - TAILQ_FOREACH(dev, &pci_device_list, next) { + FOREACH_DEVICE_ON_PCIBUS(dev) { if (rte_eal_compare_pci_addr(&dev->addr, addr)) continue; @@ -412,7 +408,7 @@ rte_eal_pci_detach(const struct rte_pci_addr *addr) if (ret < 0) goto err_return; - TAILQ_REMOVE(&pci_device_list, dev, next); + rte_eal_pci_remove_device(dev); free(dev); return 0; } @@ -441,7 +437,7 @@ rte_eal_pci_probe(void) if (rte_eal_devargs_type_count(RTE_DEVTYPE_WHITELISTED_PCI) == 0) probe_all = 1; - TAILQ_FOREACH(dev, &pci_device_list, next) { + FOREACH_DEVICE_ON_PCIBUS(dev) { /* set devargs in PCI structure */ devargs = pci_devargs_lookup(dev); @@ -489,7 +485,7 @@ rte_eal_pci_dump(FILE *f) { struct rte_pci_device *dev = NULL; - TAILQ_FOREACH(dev, &pci_device_list, next) { + FOREACH_DEVICE_ON_PCIBUS(dev) { pci_dump_one_device(f, dev); } } @@ -498,16 +494,22 @@ rte_eal_pci_dump(FILE *f) void rte_eal_pci_register(struct rte_pci_driver *driver) { - TAILQ_INSERT_TAIL(&pci_driver_list, driver, next); - rte_eal_driver_register(&driver->driver); + TAILQ_INSERT_TAIL(&rte_pci_bus.driver_list, driver, next); + /* Update Bus references */ + driver->pci_bus = &rte_pci_bus; } -/* unregister a driver */ +/* Unregister a driver */ void rte_eal_pci_unregister(struct rte_pci_driver *driver) { - rte_eal_driver_unregister(&driver->driver); - TAILQ_REMOVE(&pci_driver_list, driver, next); + struct rte_pci_bus *pci_bus; + + pci_bus = driver->pci_bus; + + TAILQ_REMOVE(&pci_bus->driver_list, driver, next); + /* Update Bus references */ + driver->pci_bus = NULL; } /* Add a PCI device to PCI Bus */ diff --git a/lib/librte_eal/common/eal_private.h b/lib/librte_eal/common/eal_private.h index 9e7d8f6..68386e8 100644 --- a/lib/librte_eal/common/eal_private.h +++ b/lib/librte_eal/common/eal_private.h @@ -108,16 +108,6 @@ int rte_eal_timer_init(void); */ int rte_eal_log_init(const char *id, int facility); -/** - * Init the PCI infrastructure - * - * This function is private to EAL. - * - * @return - * 0 on success, negative on error - */ -int rte_eal_pci_init(void); - struct rte_pci_driver; struct rte_pci_device; diff --git a/lib/librte_eal/common/include/rte_pci.h b/lib/librte_eal/common/include/rte_pci.h index 05cf693..53793f3 100644 --- a/lib/librte_eal/common/include/rte_pci.h +++ b/lib/librte_eal/common/include/rte_pci.h @@ -87,12 +87,6 @@ extern "C" { #include #include -TAILQ_HEAD(pci_device_list, rte_pci_device); /**< PCI devices in D-linked Q. */ -TAILQ_HEAD(pci_driver_list, rte_pci_driver); /**< PCI drivers in D-linked Q. */ - -extern struct pci_driver_list pci_driver_list; /**< Global list of PCI drivers. */ -extern struct pci_device_list pci_device_list; /**< Global list of PCI devices. */ - /** Pathname of PCI devices directory. */ const char *pci_get_sysfs_path(void); @@ -124,6 +118,9 @@ TAILQ_HEAD(rte_pci_device_list, rte_pci_device); /** List of PCI drivers */ TAILQ_HEAD(rte_pci_driver_list, rte_pci_driver); +/* Extend PCI bus definition to users */ +extern struct rte_pci_bus rte_pci_bus; + /* PCI Bus iterators */ #define FOREACH_DEVICE_ON_PCIBUS(p) \ TAILQ_FOREACH(p, &(rte_pci_bus.device_list), next) @@ -208,8 +205,6 @@ struct rte_pci_device { .subsystem_device_id = PCI_ANY_ID #endif -struct rte_pci_driver; - /** * Initialisation function for the driver called during PCI probing. */ @@ -416,17 +411,14 @@ rte_pci_match(const struct rte_pci_driver *pci_drv, const struct rte_pci_device *pci_dev); /** - * Probe the PCI bus for registered drivers. - * - * Scan the content of the PCI bus, and call the probe() function for - * all registered drivers that have a matching entry in its id_table - * for discovered devices. + * Probe the PCI bus * * @return * - 0 on success. - * - Negative on error. + * - !0 on error. */ -int rte_eal_pci_probe(void); +int +rte_eal_pci_probe(void); /** * Map the PCI device resources in user space virtual memory address diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c index f77ff5c..6bb7fc9 100644 --- a/lib/librte_eal/linuxapp/eal/eal.c +++ b/lib/librte_eal/linuxapp/eal/eal.c @@ -803,9 +803,6 @@ rte_eal_init(int argc, char **argv) if (rte_eal_log_init(logid, internal_config.syslog_facility) < 0) rte_panic("Cannot init logs\n"); - if (rte_eal_pci_init() < 0) - rte_panic("Cannot init PCI\n"); - #ifdef VFIO_PRESENT if (rte_eal_vfio_setup() < 0) rte_panic("Cannot init VFIO\n"); @@ -884,10 +881,6 @@ rte_eal_init(int argc, char **argv) rte_eal_mp_remote_launch(sync_func, NULL, SKIP_MASTER); rte_eal_mp_wait_lcore(); - /* Probe & Initialize PCI devices */ - if (rte_eal_pci_probe()) - rte_panic("Cannot probe PCI\n"); - /* Probe all the buses and devices/drivers on them */ if (rte_bus_probe()) rte_panic("Cannot probe devices\n"); diff --git a/lib/librte_eal/linuxapp/eal/eal_pci.c b/lib/librte_eal/linuxapp/eal/eal_pci.c index 300064d..51522af 100644 --- a/lib/librte_eal/linuxapp/eal/eal_pci.c +++ b/lib/librte_eal/linuxapp/eal/eal_pci.c @@ -232,7 +232,8 @@ pci_parse_sysfs_resource(const char *filename, struct rte_pci_device *dev) /* Scan one pci sysfs entry, and fill the devices list from it. */ static int -pci_scan_one(const char *dirname, const struct rte_pci_addr *addr) +pci_scan_one(struct rte_pci_bus *pci_bus, const char *dirname, + const struct rte_pci_addr *addr) { char filename[PATH_MAX]; unsigned long tmp; @@ -350,21 +351,19 @@ pci_scan_one(const char *dirname, const struct rte_pci_addr *addr) dev->kdrv = RTE_KDRV_NONE; /* device is valid, add in list (sorted) */ - if (TAILQ_EMPTY(&pci_device_list)) { - rte_eal_device_insert(&dev->device); - TAILQ_INSERT_TAIL(&pci_device_list, dev, next); + if (TAILQ_EMPTY(&pci_bus->device_list)) { + rte_eal_pci_add_device(pci_bus, dev); } else { struct rte_pci_device *dev2; int ret; - TAILQ_FOREACH(dev2, &pci_device_list, next) { + TAILQ_FOREACH(dev2, &pci_bus->device_list, next) { ret = rte_eal_compare_pci_addr(&dev->addr, &dev2->addr); if (ret > 0) continue; if (ret < 0) { - TAILQ_INSERT_BEFORE(dev2, dev, next); - rte_eal_device_insert(&dev->device); + rte_eal_pci_insert_device(dev2, dev); } else { /* already registered */ dev2->kdrv = dev->kdrv; dev2->max_vfs = dev->max_vfs; @@ -374,8 +373,8 @@ pci_scan_one(const char *dirname, const struct rte_pci_addr *addr) } return 0; } - rte_eal_device_insert(&dev->device); - TAILQ_INSERT_TAIL(&pci_device_list, dev, next); + + rte_eal_pci_add_device(pci_bus, dev); } return 0; @@ -390,7 +389,7 @@ pci_update_device(const struct rte_pci_addr *addr) pci_get_sysfs_path(), addr->domain, addr->bus, addr->devid, addr->function); - return pci_scan_one(filename, addr); + return pci_scan_one(&rte_pci_bus, filename, addr); } /* @@ -451,6 +450,10 @@ rte_eal_pci_scan(void) char dirname[PATH_MAX]; struct rte_pci_addr addr; + /* for debug purposes, PCI can be disabled */ + if (internal_config.no_pci) + return 0; + dir = opendir(pci_get_sysfs_path()); if (dir == NULL) { RTE_LOG(ERR, EAL, "%s(): opendir failed: %s\n", @@ -467,7 +470,8 @@ rte_eal_pci_scan(void) snprintf(dirname, sizeof(dirname), "%s/%s", pci_get_sysfs_path(), e->d_name); - if (pci_scan_one(dirname, &addr) < 0) + + if (pci_scan_one(&rte_pci_bus, dirname, &addr) < 0) goto error; } closedir(dir); @@ -712,22 +716,6 @@ rte_eal_pci_ioport_unmap(struct rte_pci_ioport *p) return ret; } -/* Init the PCI EAL subsystem */ -int -rte_eal_pci_init(void) -{ - /* for debug purposes, PCI can be disabled */ - if (internal_config.no_pci) - return 0; - - if (rte_eal_pci_scan() < 0) { - RTE_LOG(ERR, EAL, "%s(): Cannot scan PCI bus\n", __func__); - return -1; - } - - return 0; -} - struct rte_pci_bus rte_pci_bus = { .bus = { .scan = rte_eal_pci_scan, diff --git a/lib/librte_eal/linuxapp/eal/rte_eal_version.map b/lib/librte_eal/linuxapp/eal/rte_eal_version.map index 6f047c5..f0e63c3 100644 --- a/lib/librte_eal/linuxapp/eal/rte_eal_version.map +++ b/lib/librte_eal/linuxapp/eal/rte_eal_version.map @@ -6,8 +6,6 @@ DPDK_2.0 { eal_parse_sysfs_value; eal_timer_source; lcore_config; - pci_device_list; - pci_driver_list; per_lcore__lcore_id; per_lcore__rte_errno; rte_calloc; -- 2.7.4