From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM02-CY1-obe.outbound.protection.outlook.com (mail-cys01nam02on0089.outbound.protection.outlook.com [104.47.37.89]) by dpdk.org (Postfix) with ESMTP id 3B11DFA68 for ; Wed, 18 Jan 2017 15:03:49 +0100 (CET) Received: from BN3PR0301CA0025.namprd03.prod.outlook.com (10.160.180.163) by BY2PR0301MB0743.namprd03.prod.outlook.com (10.160.63.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.845.12; Wed, 18 Jan 2017 14:03:47 +0000 Received: from BL2FFO11FD014.protection.gbl (2a01:111:f400:7c09::119) by BN3PR0301CA0025.outlook.office365.com (2a01:111:e400:4000::35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.845.12 via Frontend Transport; Wed, 18 Jan 2017 14:03:47 +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 BL2FFO11FD014.mail.protection.outlook.com (10.173.160.222) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.803.8 via Frontend Transport; Wed, 18 Jan 2017 14:03:46 +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 v0IE2513026776; Wed, 18 Jan 2017 07:03:45 -0700 From: Shreyansh Jain To: CC: , , Shreyansh Jain Date: Wed, 18 Jan 2017 19:35:25 +0530 Message-ID: <1484748329-5418-10-git-send-email-shreyansh.jain@nxp.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1484748329-5418-1-git-send-email-shreyansh.jain@nxp.com> References: <1484735880-17178-1-git-send-email-shreyansh.jain@nxp.com> <1484748329-5418-1-git-send-email-shreyansh.jain@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131292218270062186; (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)(39860400002)(39410400002)(39400400002)(39450400003)(39380400002)(39850400002)(39840400002)(2980300002)(1109001)(1110001)(339900001)(199003)(189002)(626004)(106466001)(2906002)(50986999)(68736007)(8656002)(85426001)(38730400001)(6916009)(189998001)(104016004)(50226002)(8936002)(54906002)(77096006)(6666003)(36756003)(110136003)(76176999)(81166006)(48376002)(2950100002)(81156014)(8676002)(50466002)(5660300001)(33646002)(4326007)(2351001)(86362001)(92566002)(305945005)(105606002)(97736004)(356003)(47776003)(5003940100001)(53936002); DIR:OUT; SFP:1101; SCL:1; SRVR:BY2PR0301MB0743; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11FD014; 1:DpvY59xQXydgHuAhnBIitg2y97zj5YkiN36uKyGZ6FnIvPbunwlyDlsuq4GpCJbSlDLihWhTHgYrn+kycRWwmNfiRfZwHUQuy/wL89q1hdjqntKizMn8XhEk0HWpYjtH6HN6CUf7+jmqfT5WR+J034ddLtADV9aZ5ziXjAwbm7EScZrDMII6KBjjviBkq93eiRjnqk3uzEKDSRC4f2HNJ6vePEW8TtmCxZb55fsjdbb6xEs3ocD2mp9dEPs5i3vMpo7nS/M1UlwmHUNOBmuDIAWhF75tQffwOw1ZYpXixMeAOcxPa+Gvzy7OIRhACyEKM3cPmui0F4sON8oaEoCcOF66mbIk7LiXZFAlXZf3BmO/fUvOJeowpXWDy2HAuCTgBsRiO4A98I8fsnM5NqAPzWodXaRYK9RnH0VVPszQKSvBi2R9RQh+92H2MQs5M1vekUrutEGZan5ViEiOkQKdYt155qTD6blIIEV/J5XaD1vkiACGK5YChvjkA3tSTeGEjpUbDQN/bT5nuIh2m4fWvbe2mMT69dFAyEnGqfinaYIDPVVuoUWKM5oUnJxguU0uZsr/W6xEFhL+590Sob31t1DIIERUFNLXDGdvxu8MfscgWh6mVimd1GmvuOebuwN78nBuqlZDQqEwI+Jjqqx30gQBh4/SPJk8ywYwNp6eRRIFTSS1ZboNAjJ4jI9dhs/PvHo8dV5zYqoIhPOEW/ghxg== MIME-Version: 1.0 Content-Type: text/plain X-MS-Office365-Filtering-Correlation-Id: a84f8748-3ec2-4fb2-966a-08d43faad239 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:BY2PR0301MB0743; X-Microsoft-Exchange-Diagnostics: 1; BY2PR0301MB0743; 3:Q37AmKKoETztgDdPr9UaI8vr1pWWOAEIkhVOSjJ579QmjhZhM0QwsBMDqpkW64d8f5MpcPoDrMx26eSiEtXTOLAA81f1SbdoRikOtk1InE7K1xcdEZfUEu5g6FdxaQd20iCx9FUUg9Ok2t2hmKXL4cUmULLiq4BXd+uu5i741bEqkZu8hZKHTmUlR8ZlzKw2RWC+3ZBFxkJxjx0OY+4pW69pm35ifpdQYSkhYcfiZNCsCz3cPHX9W8NEfZ9WD43XDrY1e0huriCX6VmMCN44Iymg5LNp4Ksni4nUBI9CeDUp7w2H6NaUDxAEuh4lcS0GPaPIJlQTbjT5AxxvEymbb6+aY2A9yV3krqE6AETv5/V7uxf5XXpgPUQBedD5YKqg; 25:KOtX6rsjEVaKkrPBO96hyOLCs9nPpibUQ1TiBJVj4LDXIFkJI/1vUOWiD+N4rvv5X7P0+TlPBsw9PbV8Iv4lIQx+e746sAjFxiprBBINafTeWCdcKVBqJzLZopdSpTHZ/cgSWqIn0p68w269eDBMc4EEsVLrm1+55dDSPQaB04y5rB82vr+Hf3bS0+wqPEM0Are93rbaYnO8n2prQ8YskE6mpenJyja2BN6XFAtp59CFdREBlqNpsU0kTU16QmDXGR5ntAOsaVMQtIZojn/nXqMZGpAjOOr79H4a5zhQDflkRz2F73250vCFHl456IiQ//cMS0u7uHx80gamqW00lJ9UzRxEcWL07n/CC+DtnKsGRd4XE+SY0O9ZmQV24zs1lzW+bU+caWogZatP8RxM1RcEMtdSD39i82JcM6B/i7NbrASBm2juHOB5paVFjQ0nqQ8sxEAuUcM9uLNgKa8IZA== X-Microsoft-Exchange-Diagnostics: 1; BY2PR0301MB0743; 31:LVa6ohThBlZI+zm4ecta6MjOSfXjyfoE43WXKiuaLNV6fJok1sThhVkwLArKOzkvZazSEGted20sa2cXwydhLo8G4aDC2C31cPdbOZkgdoL318v/fkYxKvGTUGOhUqFbB3OZUd/nOGKqEPvdtiqMtOmrH8PPUJ3FqdSoQEtBB71sp2byzVPCVMxzc8WFqF/pEhye8QTWvLi61DemtvZh/F9Yx/+EMeOcHk0SQU7IY/m5brhhtMar05C/OLFnOQqFpa09Cyr7QzdclhJ2FRNqCg== 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)(13015025)(13024025)(13023025)(13018025)(13017025)(5005006)(8121501046)(3002001)(10201501046)(6055026)(6096035)(20161123565025)(20161123563025)(20161123556025)(20161123561025)(20161123559025); SRVR:BY2PR0301MB0743; BCL:0; PCL:0; RULEID:(400006); SRVR:BY2PR0301MB0743; X-Microsoft-Exchange-Diagnostics: 1; BY2PR0301MB0743; 4:2BcbAf+bdHUTVWBYQ4y7qd5gAc/cIpsX2Fm6wFXzzhttDBsf7w35s8l1ialWR6Ib34SvFWO5H/usa1OYx0+XSQcxxBQ3TbzMaZF4xmniQiMxiW6a6UqqFIREHdE0tmNmDnes1k33krrI8cwantqPwHRJucwnADq6pRyOjMBLFh8Dp+MPTyPv6anUVDhWuoeYRA7HmVqiz6oP4YTDy+PnVEONAmYQ5HZYcLJx8NlmBha5idyqUiGqZq2tmEG75oNbUIekeHRyjB9RwfhxvBQ3rhvcTgezg4ILGzE8+QXNGXIOAUo3w3jgbCqU6A2KmqKs/9NBIldeyv1EUv3T51UreEYSwafVvqDA8cgVOWvVn6Pu2fbeDs1zgKgmEe11Du0S3obuOLWKmvw7KQKAjB7w9Xd36zX1cFuqirV2e6LDeLraWzyi5AhqoNyb9OnQfvOSk7YcbTrvUnHCIqmdzgzDHHdrAaRmubqAi3Wuw6BIyqdtPAYkHLvJAw3QSDMMOpUqQLu3OCfh1WSdkOnVKmasqpVGxBVh9DviGziE0AcdXSUWRUGLYZ7tyJinZ4tIojMtXqQ39cahNiYjdXeqtaQZebjOYKpfIERRukt7pNyYZG+vvwZlChvtZuseENKlv7aWn19FqWr+uYPtnT/D6Jqb4jLNdiWg0fL7G+8b/BDCcKKewC/WaDdfF/xYaQU4zNrR7JO48zF53Jt3JW8EUPBg3D+EKQLHnAzJG4GrNEDnj2rqov5sm4mzPTNpCCy7IyauALDM/XdTCLrMIQM08VsnIw== X-Forefront-PRVS: 01917B1794 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BY2PR0301MB0743; 23:swYESqXWS7fH5VO4WFERkO4g1dnv0yHJv6/c26m?= =?us-ascii?Q?BSMxVqPiveZxJ/guApD98JzUEBAIF1Hbmdzl4aT28EYmFFqXyKHvyO90ihzV?= =?us-ascii?Q?67IBHfSFTOBoU+tXYufj+keb5Ov96tKqfrTzKomT6LV3HD+PGRIwGmA2GViR?= =?us-ascii?Q?Yme8tdKBhCM162N6ef/Nqafto02W1dcxOu5+UrUmjtHrQmw+Lu8y0keQXZKf?= =?us-ascii?Q?Zl9/fefVPjVvaW6ZZKnoX32Zi0SIUJjqfcup0otaT/pr8pSy2RKHz/Zm/l5W?= =?us-ascii?Q?dcrVEi2U3ygYaPY7ykzYW9SDpi0AIrZENiS+DAbOkKBiec+VEwon+9A9Wvt2?= =?us-ascii?Q?HI/bXczHadejRvBUv04xKL77v19VdMQlOITzlgN4dIBxw5XIj6IDHcjjg1p2?= =?us-ascii?Q?udGbT5LISkZwHHx+oPAxyh7WY8qn0jAB94NaQ4F2tpHjyJ1tzxpWDZTXRr28?= =?us-ascii?Q?HJ7A0yIUADu4wd4KoKPkBpYfmTjZeqi1s9R3OkqK70uM4xg0BYoHzoEsEFAL?= =?us-ascii?Q?RDGrENqS3pA2EfgUGbF21o44vGlQhPuuWx8M+fujZFb2k7yn2cy9UrN8sGa1?= =?us-ascii?Q?oRRtmzgVRBXTShNpuSaX9JVYbp8L5LJAdFR4WnOSSsvEjJXth2OCPXFz098f?= =?us-ascii?Q?Q3msGiiQbhiBFRBwPHs2tdJ7MLoRlHdbla9rel0qFHT0ErZIyGmjPx1puT5W?= =?us-ascii?Q?faoxk+zrRmZLkM3HG2DxuA7yQxJtP9dpRjJ//s7dHm2L0/FY9pnQHHfh1x7O?= =?us-ascii?Q?4VgJSGS+OD5b5SuvnuHPZD4o/9jwHSfdmiWLNA2LcB3u6J9O4WFsb/x6O342?= =?us-ascii?Q?j7VNT2LoCVMCP0jnN9ATlemNRuu+4PkBMyBELH19xuiPKAc30KIVwksTP3oa?= =?us-ascii?Q?CGP4314bac3Q1jdPvbIyWZYyqeOE3F5Mm00njqOKY3vNtripVYSUA/fxAQho?= =?us-ascii?Q?iMpUjxZ9AjYf6YQ7ULIEuh0Xf1gb4MtYY0X1x5KYEVM4ouPIv/K+W0ded8H+?= =?us-ascii?Q?3Syd/shLU5in7qMvEYqABj9gD/0EwsCiQkvl8Y45b+o/8TCx2W7oznnZ6+7C?= =?us-ascii?Q?wC8yFtsYjSH//wk7dC3ZLqEJtzFfhgcaUc1a4U6SSerXUY0q8bs5WuGFz33h?= =?us-ascii?Q?USqiiwhktqLvJvXO4zkmtJ7QPFP2GABss4Fj6scTIRuaAuD1eCQGR6LTAHYN?= =?us-ascii?Q?LyQR4pbkGbg2AA4Foyheunfp0jRUuoeV0R6ANAGjf/gA49DVEmpAuSTkOqL/?= =?us-ascii?Q?wYfzn0SP6Tz1JGrHT3FjUIYu1dbW+lPjEAuJz7xFNYnsNqA3s4OqzI1Rus3R?= =?us-ascii?Q?ofakzw7wmiwveS/qaSZlk6T4=3D?= X-Microsoft-Exchange-Diagnostics: 1; BY2PR0301MB0743; 6:VjNYspk0kiIkxceXp8/sGxNTHoZC7kmnZPoYH+eNaMaQln6nEHBbHcCscZmH14tsBltAUtKkoYMD3DWN5rZAP6tid6gdDw41de1UuEzryTXOJR1khrE0H7DlSc4IEhl74kkLGfGEbHVLmoAAFpqtazAKovblUMKB/Sf9OWsb00AGnLXehCefZqLR5UXE6kofhC0JfruKyqjBTzXZiljaAKFSTWQeC/GdwxXf4Efp4hqZ/7/csvcnpdaGPCJK67lcA+j+zE7F9a/iRQBWiny7jsj+r5pQ/AWmpMaxYLQCmlaktiYvUK/ILbat/otgzVJEO8AzROvO8nr7Kc1wL7LzlFHVx32mMgILgzttaDa38J/YA8Rhn/LSN1KbO90A4BOqk5EE9YsHOB9MLjOrq2AJ7CrVTatfy7cGhzwM/67Usc2i1fO+IZ0fxJlsjqsnwt9+; 5:AzAayjKJcs0Os2zpZUU2iOZFUxlUspQ8A0nywpayNkksuYGlw9ILXhn9/icrvLbbekU75BOisRgVMoKWOzabuks9bWqBjg2ZlaFiqCIy7q9VFzf0V4zfHw3ViG7BMuK208zCz0BW7zK/Q83FZODjOpd7daYMpTTnakc7PYT+N48PTFTDIPP+Es3aiewnCOFE; 24:kX20NnpFotWAOM28rM8ME6X/Mlq0PFUQhuVHZJ767pCXEZZZylHvtuhs5nrXgQBsfZeoX3JLyGOb9Szmv5p+4HPxJ2CSTfmutIICzUh4Tb4= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY2PR0301MB0743; 7:AJZnNYHDFN+cpTqQu2OsJdtORciG40s59LR3uzLYZqj5WgvFqiUybis3mS2d7bCy8Jpnf+dfqfzAJ0VRFf76U8zGEk40BPn9oJAvnAQgpAzQ71LC6aKcDPxfpfAwMxyIoIECbNKzOQ4XfpUg4xzHE8Ttl//mfsdcL41OS1BXcDq1r+oPB5DYQf9+sC23biQmG+9K2Rc098C1oM83y4J9qyyRnlNa99NDgvKEUe3JuwuUS7q3RB4KizlJdd0IwV1K4SW0zL464utHm+AutoVcfSWN1KTKmPjeky8paW4zcE973EUjJGzdwgF1fdfJ7e85bWDlNDMbJNkvvDZQD7W205XckFNP4/bHe3H164UQzuCd1fCklDtxtjwqpO7Yjtyudx7VtAhNEoG6BXdhsUUHQSUNqy8BeYRogqvzeEcYzstIHZoH/izJ0Ff28/NZuwrjFMxtPdswLKoq6EgpTy1akA== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Jan 2017 14:03:46.8346 (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: BY2PR0301MB0743 Subject: [dpdk-dev] [PATCH v10 09/13] test: add test cases for scan and probe on 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: Wed, 18 Jan 2017 14:03:49 -0000 Signed-off-by: Shreyansh Jain Reviewed-by: Ferruh Yigit --- app/test/test_bus.c | 152 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) diff --git a/app/test/test_bus.c b/app/test/test_bus.c index 0b6d011..ef7fa89 100644 --- a/app/test/test_bus.c +++ b/app/test/test_bus.c @@ -120,12 +120,15 @@ static int scan_fn_for_busB(void); /* generic implementations wrapped around by above declarations */ static int generic_scan_fn(struct rte_bus *bus); +static int generic_probe_fn(void); +static int dummy_match_fn(struct rte_driver *drv, struct rte_device *dev); struct dummy_bus busA = { .name = "busA_impl", /* busA */ .bus = { .name = "busA", .scan = scan_fn_for_busA, + .probe = generic_probe_fn, }, }; @@ -134,6 +137,7 @@ struct dummy_bus busB = { .bus = { .name = "busB", .scan = scan_fn_for_busB, + .probe = generic_probe_fn, }, }; @@ -288,6 +292,46 @@ generic_scan_fn(struct rte_bus *bus) return 0; } +/* @internal + * Obtain bus from driver object. Match the address of rte_device object + * with all the devices associated with that bus. + * + * Being a test function, all this does is validate that device object + * provided is available on the same bus to which driver is registered. + * + * @param drv + * driver to match with + * @param dev + * device object + * @return + * 0 for successful match + * !0 for failed match + */ +static int +dummy_match_fn(struct rte_driver *drv __rte_unused, struct rte_device *dev) +{ + struct rte_bus *bus; + struct dummy_device *ddev = NULL; + struct dummy_device *ddev_as_arg; + struct dummy_bus *dbus = NULL; + + /* Match is based entirely on address of 'dev' and 'dev_p' extracted + * from bus->device_list. + */ + + /* a driver is registered with the bus *before* the scan. */ + bus = dev->bus; + dbus = container_of(bus, struct dummy_bus, bus); + ddev_as_arg = container_of(dev, struct dummy_device, dev); + + TAILQ_FOREACH(ddev, &dbus->device_list, next) { + if (ddev == ddev_as_arg) + return 0; + } + + return 1; +} + int scan_fn_for_busA(void) { struct dummy_bus_map *dbm; @@ -504,6 +548,110 @@ test_bus_scan(void) return 0; } +/* + * + */ +static int +generic_probe_fn(void) +{ + int ret = 0; + int i, j; + struct rte_driver *drv; + struct rte_device *dev; + struct dummy_bus *dbus = NULL; + struct dummy_device *ddev = NULL; + struct dummy_driver *ddrv = NULL; + + /* In case of this test: + * 1. for each bus in rte_bus_list + * 2. for each device on that bus (bus specific->device_list) + * 3. for each driver on that bus (bus specific->driver_list) + * 4. call match + * 5. link driver and device + * 6. Verify the linkage. + */ + for (i = 0; bus_map[i].name; i++) { + /* get bus pointer from bus_map itself */ + dbus = bus_map[i].dbus; + + /* Looping over all scanned devices */ + TAILQ_FOREACH(ddev, &dbus->device_list, next) { + /* There is a list of drivers within dummy_bus_map. + * In case of PMDs, this would be driver registration + * APIs/list + */ + for (j = 0; bus_map[i].ddrivers[j]; j++) { + ddrv = bus_map[i].ddrivers[j]; + + drv = &ddrv->drv; + dev = &ddev->dev; + ret = dummy_match_fn(drv, dev); + if (!ret) { + /* As match is generic, it always + * results in dev->drv pointing to + * first driver entry in bus_map[i] + */ + dev->driver = drv; + dev->bus = &dbus->bus; + } + /* Else, continue */ + } + } + } + + /* Verify the linkage. All devices belonging to a bus_map[i] + * should have same driver (first driver entry of bus_map[i]) + */ + for (i = 0; bus_map[i].name; i++) { + ddrv = bus_map[i].ddrivers[0]; + drv = &ddrv->drv; + + for (j = 0; bus_map[i].ddevices[j]; j++) { + ddev = bus_map[i].ddevices[j]; + dev = &ddev->dev; + if (dev->driver != drv) { + printf("Incorrect driver<->device linkage.\n"); + return -1; + } + } + } + + return 0; +} + +/* @internal + * Function to perform 'probe' and link devices and drivers on a bus. + * This would work over all the buses registered, and all devices and drivers + * registered with it - call match on each pair. + * + * @param void + * @return + * 0 for successful probe + * !0 for failure in probe + * + */ +static int +test_probe_on_bus(void) +{ + int ret = 0; + int i; + struct dummy_bus *dbus; + struct rte_bus *bus; + + for (i = 0; bus_map[i].name; i++) { + /* get bus pointer from bus_map itself */ + dbus = bus_map[i].dbus; + bus = &dbus->bus; + ret = bus->probe(); + if (ret) + printf("Probe for %s failed.\n", bus_map[i].name); + } + + printf("Probe on all buses successful.\n"); + dump_device_tree(); + + return 0; +} int test_bus(void) @@ -518,6 +666,10 @@ test_bus(void) if (test_bus_scan()) return -1; + /* Now that the devices and drivers are registered, perform probe */ + if (test_probe_on_bus()) + return -1; + if (test_device_unregistration_on_bus()) return -1; -- 2.7.4