This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "".
The branch, master has been updated via d5e5b8ab0540606206d63bfed98ac348fd387362 (commit) via e9a0f5f06f670907d4b88143c7a423d5e7e64f3b (commit) via 4a13b03a2236bc318fc9e7527ed92fbb7da8c3d7 (commit) via 30cb4646306650b581cd01027fe5ff8f207fd5fe (commit) via 79da79bf9d7b371c78c8a9a378f1486090eccf4b (commit) via caee81bd285095020e8aa8287f7283305108d9fa (commit) via ba336a668e2f6b8bbe594201fe679d710d25ecda (commit) via b68ba75a0b89df577326f16c8f8dc48ddddd8091 (commit) via cc3419c062921d4b8238f89251731b99a9bfe0f3 (commit) via 76f7b4e3b8041c22d9a65d5aefa5e154cc8931a3 (commit) via aedf019425b66c6308da0cdce2db3bbc17e72578 (commit) via edd235b2e1ee71a398ed96f99886d974c277b7e4 (commit) via cbdf41027fbc9ef19b89b9218e0b69668b493a1f (commit) via ece4610e4f895860e935fc5920fa4f9f2654a58e (commit) via f698508095a8fabd2fb85b6752d20a16cc817c91 (commit) via b97812b3428b1b54583a488630f6b7224ee558ee (commit) via 048d570f32a020bce1da9e26b71169346a2c0386 (commit) via d82cc9860dc59109ab5bbe793d41b39fe88fe594 (commit) via fb3e2e1ee824b776d7c7d2231b318871fc54004e (commit) via 485d29d7abd32e107e72bb336bd5ff315bae7cc5 (commit) via b5adaba04a5b36b7df9adbac80ed0cef0b3aa038 (commit) via 3211c74f62cc103667da8dc79940b8902998665f (commit) via 64b94677637d6ac5def4e1da159fdd9286e9fccb (commit) via 770291452ff591ec0ec54bbabb75813d7915e1a0 (commit) via 002161535f9deb03d65d5c85bd070c1f16a6ca0a (commit) via 7fa5521584d2141e1696cc2b8bc8e89560bf2043 (commit) via 1c81d1862c46e05a87fcd67a29f647aa62377c33 (commit) via 71326f886c708b564508846bd0cb3e0489cf4949 (commit) via fa671a12b96f4f6fa029e3269b74103795cdffbe (commit) via 8ae8b5ffde0d4ab9f46b8a7a8421690f41257063 (commit) via d8dfea4d963c8bca46417ce5a3cbac7f7996fd73 (commit) via 8162e09d5f6f2a727873bca82a0bb2446ff80e87 (commit) via e3c0dd960475f308365bb88eff215bbc3fab1a62 (commit) via cbb2f2c2fa7f5ec0f430fe776b01049192d53de5 (commit) via 97d6e3be58ce99f8c8d00167851204eed5f32dd8 (commit) via 29244cdd30f8f77d37ddd1154e4023803156dff2 (commit) via dffb865b8d02a7fc4dd3c8df062eb11a91d00bd0 (commit) via 29f908a7fd445796fc0f7a34d729c43af2a3d0a6 (commit) via d8b6f93bec370873246842ce570cd5c0c1c3ac8b (commit) via 18e7c597a26e2a2231042e02214fb6abd6f868e5 (commit) via 9bd8bba34adb3e78dd7f2412b7f0b617d07fb209 (commit) via cf70e9d14e3e78638434c0848c83708c157b49dc (commit) via 34a645564eba87d8609caab242bbc1bc8db4c890 (commit) via 3100810bdd8b17ff77f61bdd2e4795d19cbe3bde (commit) via d5ca8a2b70998bf082989b1bcee65dc927a2b045 (commit) via b6f6058582736cdae3739a1b336419ed491d4fb7 (commit) via dba517a2b7e1db090867d4b154ab610ca4c48531 (commit) via 6e6dec376bc611538a242dacfa17800d1c205ce1 (commit) via fb097ce4d568634869ac2f8cd2e6189f7dd497b8 (commit) via 26fa3a7d35580728239b001f54fe975e49ce6e07 (commit) via c0170949e932e6b87813f9ead4f1c09e50ec8509 (commit) via 8bf533194136de14cf1cf30a99759c36979f7852 (commit) via a388128eee56cdf391b582ea9f09ccbb26869579 (commit) via 09bbc4a3dd3d32c10095c7638950aedb441098a9 (commit) via 590f1120d7642b924a446676a2b5d2791a10de17 (commit) via b8cb2ce41182440795f2291a4dea57eac1856b4e (commit) via 7a7c464be42f73296055cfd6a1901750ec4349ff (commit) via ebd0e3f98c55ecd56c91525f5a5a728f233d55b3 (commit) via d69d4b4c19a6cd80046aafc1389e23e7f6eeab2c (commit) via 7cf851df4e72972a620de4b820496a4afb6edc8e (commit) via d0e6679b7b3aec6e8ce0615ce764c76ca76b5d90 (commit) via f3c999a995792ce51eacfc5be26c74f16002047b (commit) via 53d5deca111c9e9a196f11c990868ed31131618e (commit) via 2145bbedde86dd1836bcfb40cb7683ba01c43641 (commit) via c2ebe4e9de1e4f04acaea56b53e0bcfaba3b5ebb (commit) via 2a26805eb348dbbdc1e2c6bafa563c1e50c6763a (commit) via fa52c46b7b29f0eb94d82b13bcf3edc47ce9da31 (commit) via fe66deb39f8d7dcffaf3a53cefa428df9c879d4d (commit) via 4791830a60d05ba5f017924dc430fc064a553739 (commit) via 16afe7377209b882017e2388641c72dd0191dbd2 (commit) via 06bc18d139485ed42a04c9390791d6157aaef5b8 (commit) via d134c3e2f22138aa7d21820c016c28f704989058 (commit) via d1328faa6d068330d6c5de383ec7e1b554b159bc (commit) via fe1bddbecfdad23c329f56436c3172b841e58836 (commit) via 9c5dea2f9fe8623766127099dbb4bebf79e5c5b4 (commit) via a0114a56b343c0c77576a8966994ce24f080e87d (commit) via 2ac9e718bccdf818838bbfb8a61fdcccaf297d25 (commit) via cb55d339ca97af4799a7ac83a07a39b95c22fc22 (commit) via db4968941f49440858f690486cd59bd19392ebdc (commit) via a35a3fb99e9d1014bb2b5056ac000bd31068f09e (commit) via 15d143ef66be6c8b308b00dfe6aa07eae5838bdd (commit) via 15e24210a8e80fa34730b1cb6883787337a08e7b (commit) via 3bfee42721786fa63bc4016538803da9b967b265 (commit) via 07912a406a6e9d689da1d3eec1367476a343d6ea (commit) via 12c8f4105843469e40823c23dd37c515f07ef52d (commit) via 0cf47204fb0b169f5ef0fa9b802697473cf51d46 (commit) via fc0c161a1ffe14b22e4ac5f449477c2dfc949f04 (commit) via ba9ba1ce21bf0366b6decebf2b505b9c7baaba0c (commit) via ac95ab24e59e3fa5c05d7aafbc836fdb5c9600d6 (commit) via 89aa8a0eb8bb389788f4fec2945d8c2bbf37c5d3 (commit) via 9e2ddd56caf943804fe94ff14714c8a9a5ce8a05 (commit) via 36aff3098872658ea1d8f6ba9420c81d5a03cb64 (commit) via 464e87faa56311bf65b63705a6c68a42ad85bcff (commit) via a1d2290ff7aa102df3f49f3f0197a9806cc432f0 (commit) via 452b0aab9fd6315fa3d13cd8ffe1467e34ae6951 (commit) via e194b1dd6ad06b1804ba955fd2ffe4400cae5d36 (commit) via d61b347dabb3e1ec6bed53506eef41cf572b3a91 (commit) via ae8761485c8e3eb8d02d722021fe969bb8c4cf15 (commit) via 8b6012a870a8c1de76ea112df232852c74b02636 (commit) via a30953543eaaf279dc7faac135f37544ebdd84c8 (commit) via 062e90350b6c80bdd2de39f7a74e504087458280 (commit) via b1c43018a834a1cc6c182d9677083b068508a5b5 (commit) via d6716eb5e041e02794fae6a37f3d268b2290bf3a (commit) via 01c7a2e7c0e98cdeea65e45f6d43b64db0ca0cfa (commit) via 62d1a351dc2c8c27d10bc7da809f85ef5400e30d (commit) via 19e4c5d19b8235900930ef08e8a8f0401b2fd0a5 (commit) via df2d6a1f4b081ccb4de0ed3f2e3902a58b86014c (commit) via 2e89f0e01a04c709150d91984bedded517627eb9 (commit) via e78e28ea32d5f3fbbe222f5575daa76b2f512c28 (commit) via f44ea00700f861bfc12e1eb26b323555e707461d (commit) via 27734c0e9b23a161cdcb433035fd0582fe9f66ae (commit) via d406bd63400075c389785d78d08219dfb4eff243 (commit) via 103e201fc9f114e042765e21f205177a331d3759 (commit) via b0889a12ae054fe34b8380a38d0546b4cdc9cb42 (commit) via d565489daf3910daa5f5fa4d67c1da5531d5230e (commit) via f8c136fea8d68f9506bef8c4afcf54374873bd84 (commit) via 110f18dfa634511f92d3d284b959b6dff5e0ddbf (commit) via 72c11161cb01e879b2fbea32cc2cbdc050b350c4 (commit) via 54ba959bff97efaef1f9ad789acd26b3a5877a47 (commit) via f4e266977cebce35ded91b94b74763cb224e2875 (commit) via d76aebd20d9331ac0069850a6fee91b7c2808a25 (commit) via 557049e9fe2658cd9a72e92efb71e4957ca8852e (commit) via 5bda012d87217d6b5cb09d02eb3cd14f412a8579 (commit) via a6df2bd39d271e52be0bf01814f8502c53b9f5e1 (commit) via 3f45b65b2f145acc8d8ee5a687d0c67b4cbaf3d3 (commit) via 5af199c09a583303b2101540a9af3919f9881411 (commit) via 29444086bc560667b08bcfaf3ff1cd96a0f3d1d9 (commit) via 0ab0d895fde82e8ecf70eb3b4860571a42927654 (commit) via 76543707d74b7566d7fa8b609462f12f228c808d (commit) via 3043b34e38267506943cb38d3822cb0ffb4a4510 (commit) via 8808863abe5caa521c470cab26c67554c909e047 (commit) via 925fe7a78aee4a56c062352325b001e5ea8b1a24 (commit) via f167dfd2ea55731dc2c330a452c49b02b092ff57 (commit) via 2d6fe1c5cc21d8eb03130fbceed8238806dd39a0 (commit) via a6a0a85f694216019a1e79ff78acf8dd40ce928c (commit) via c0c0c9541bfe135888cf869b53343e07021e40cb (commit) via 9f1f212d50d2acbda7919d5bc4b74ea8bcb2ad1b (commit) via f88b7beb810232609018396d81d46b0b59ee6946 (commit) via d5e3d4e6a3d0262385e2c65a5114045628423358 (commit) via 12158fe28e0cd98d982056744611c88a6bf5bd35 (commit) via 685622e53f9f4b20ffe13184bcb85ba2b8327e1d (commit) via a52e7f05e848ac6b1d984e2dab9e2dbb6b70be9a (commit) via cc89d2303a6bb15b521e9be0fe56de896b33e496 (commit) via a2ceab93262ac3eaffc15f3fd23121ea5ac8e71c (commit) via d6e6ae2a506ba554115c22d282fc64f44abaa763 (commit) via 8459fd0292d5f056d30bb8ffe5b3e265f631ba16 (commit) via 4e071bb6167bf1fc196cf1576495858d96821183 (commit) via 1a223e327f2cddfb3358c09f010bded824c1385a (commit) via 58fa1f016f6732c12b3c9da8513307a0469a1521 (commit) via d3501168b73cd50678a811d9851e496817086d2b (commit) via 1af64d372690672d7291f8b7ee5af941a6f4bf99 (commit) via 9b9f99344f8bd6c953d96ac8088992a160ba40cb (commit) via ba4424c1a024395fe719ff3648cc257f8ba45a57 (commit) via f9af9740d0115934e509be2cf6ddf023f54b19b4 (commit) via 050107b62db751794d06f236ed1217a67a322340 (commit) via 6c6bc5ae64970e333b1a7c2fc3953a4b42ad5b6b (commit) via 2b70047e1532830d0d1a307f86b13e3285531dd3 (commit) via c663543d8c7f14c2ef123aae2c294d209a55dda5 (commit) via 318f03624bf35ef587891533bd8f0578fcbbb985 (commit) via d8da667b502401fece798c6953fd923bf737c349 (commit) via 5dc1e15add904cde0a272d9c5d1a4175f3f1b1b6 (commit) via 319d83812fd906aa0ee6f37a7d56186bf6c20787 (commit) via f24c3ce9a7bba884e67b0f786d0b6253e7030e29 (commit) via 4965980e02fcc3b974ef8f7b50fbde2e6d3a9426 (commit) via 6cc3b5cc89e01396cd55091790b9d77187f7cbb7 (commit) via ef9979fb951a715010c379e23709313201c9423d (commit) via 0c897c3a8ea85956c98dad03814b786f040e5793 (commit) via 6a5c1870c690382b361e89c4de2b659c05dde9d6 (commit) via 631d2cb64778f6ad25c178075b8af0e294f3200d (commit) via 121d5b8caf78fb90181a29b4cedabb121f9dc2ff (commit) via a4ff087a0efdb3dadf102b5a3662e9932bb46558 (commit) via f80ea94fe7302c43fd489cdb9cdebc62e5d814b6 (commit) via d0ed4ba3a3e5539b47b1db63676a30a20584ff03 (commit) via ffcdb18d443b1a58b12174008c78f66df2f8eab3 (commit) via a738b2081ca97775a4d3d4894b24d66deabefe5b (commit) via 335dccf9fbd4854e9f093a1d5456f00b28b29b45 (commit) via 741c5545623f3f37b8c43ab646615ef8c8ba4212 (commit) via ba20fb859d7ff4c22f01267b6b60e524fd1cb585 (commit) via ecd9ae8a5cd4584e3fdb5f720051e44ef619a5e3 (commit) via 4e318caee6b10b6014881770f554ee960a22172d (commit) via 5dd51af507d6ec0c2c3729397d120fa00e35deed (commit) via eff372726ba936f16698ef4fcea4498b3fab2db5 (commit) via f5c0532064a15405de0ddfe9f5d33300cb76e85b (commit) via 84d428191111706474e897643e7119d8b1d84a95 (commit) via 8fd0a71f9edb0379a0e59374cdb7be7f99b34fbc (commit) via 3f2f63a3430c932cf65795b8e15a1c4ba72a199c (commit) via 46b3da57b150c2f087aaf0ccb12437aa32a9cf11 (commit) via d169d0cb25f614bd07a6cc5ed288bd5c9f48410b (commit) via fb6a1bdc107c576d1ca64271bda6fe2691ca6a97 (commit) via a46f6251b216b8b2d352dff7c5fab7cbcf269ac2 (commit) via 7a2a3c7a9005702963a2c4bca609a5f45523901c (commit) via c6dad9258ed9bc7e74c798ec8b9aca36ec58a89e (commit) via 5c12da04f4d3225727c98ced6c230f628d9bd685 (commit) via bd7d24cb10d770da40e2608b336dbbbcfc167d55 (commit) via 058b7736ace07d4b6c0c596536741d19d274f84c (commit) via 2db2e32108e370c259923f4b435f3d91ba11dbf0 (commit) via bab38ba55cadae5f820304f9ca2867b417398bc4 (commit) via 6e749c67bece365f99728e812c5de0fcdec00553 (commit) via aa244ee092f7293971211fd9a95701d5343ecd25 (commit) via a8a201a93c87d09f36f14df6487dafe17e00c182 (commit) via bb933a3498614fc71c6e3b2593e768255fd0730e (commit) via d0ce5e335fda536d73b3eff6d10e2d1bd5890683 (commit) via ae21c3d9081380a78a895abca6a072d76c0f49a2 (commit) via 50914f9bff17613992b0943967de7d47764fe8fd (commit) via 55b442886894166511a52219b23e5bb02ef335d0 (commit) via 04cc3fc4ec76ea84638133f12b106f5850f81f3b (commit) via bab7aca5880bf759e54ce4c4a6f5d4cb3bbc278f (commit) via e740a84df538bc7f973815b7125929c397a4599a (commit) via 080581e904d92fac403236898aac078e6cd4f4bc (commit) via 41664c42ed724baa595113c30dacdad635b6724a (commit) via 63d7ac9d9e2dd81c1f5b2efb8eeeef9bff1ffa68 (commit) via 41698708fbc7a856d440d352be91ddf97a04d2bf (commit) via c20090f57bc1991559a3e111416e1ae0aa0fe57f (commit) via e79db7d5662a3b83a39baad69aecc346b4ea4065 (commit) via 9c8e5413f78c21039434111100bbb857b28b3bdb (commit) via 71f3da57f5360176b81bdbe7d30ac356078d25a0 (commit) via 5afb7d94afc622f18b2fdc079aeac968feb4975c (commit) via 95971a4aafab53d4673a0ba07fbee81871c0e2c8 (commit) via 0ba5deeb778eac95ebd9798ed5b9e17b314fe32d (commit) via a9427d718a17329a3c4982529a4d219b928d7fe5 (commit) via 85a9feb6885c46558297a97f5c0810110ac91cdc (commit) via aa44ba190977f7c3388f98882d6249150adac2c0 (commit) via 945e1eb3e643d96de5422cc37b0d51658b5e107c (commit) via a3dfc5eee02c96fbb63c06a8b9b4f534b0736e5d (commit) via fda37c206ba99a3555b1314e567336f880df6633 (commit) via 7219ea695ab4e32be8738519b268eca02452ed85 (commit) via 7dda78c3698978afa6a97d50a8d9e8507d1a979b (commit) via ab83e5b637bfbd445e28e7c61c9983eee1b6b483 (commit) via e09aa1f06048be2388a16ea2f3d923f78a9d86e9 (commit) via de3cbb42dcf3fd115d6ff51888b3a405a583f99f (commit) via b376cb54a146564dccf6a69ce3334b6807d2b132 (commit) via 475b0981b2b65122036df3217095a228d5558c4e (commit) via 29f72dbbee42d7471985637fbd0db9a8269985a0 (commit) via 4bdb68742385cbf2439b08398bbcdadec5120ad2 (commit) via 4e156391d677340ae095f7e04cf4d22c3531f60b (commit) via 1bc9df16d7d7af19c127a7e8fdf94fecdccde1c0 (commit) via 2a180cde62ec990653d6096f1c2dad05ae9ef776 (commit) via 35896c42d29838a8767d7a1fbb396e305c14cdbc (commit) via 675c5532ad3ca6d143d67de13f348775b22ccdfc (commit) via 866ba5c95ec60bd1bda90d5700bb95ec66dae841 (commit) via 28e9406621d7b84511105156b664f295ed9273b6 (commit) via 6b9151cd205f8c0f6dd8ad1b40173359b4333d9b (commit) via d494b27ffa13a92638b15480b5d26b3ca28ccb6b (commit) via f2c924ea7fbbfe8ce3a65193f8461c38c5f70968 (commit) via 46c26b39b7bc23a420f02d5a486f573c7a1e150a (commit) via 0dc1b8642436481a2c8d8808902ded2f2da09b04 (commit) via 2e9cb0e209fd05e876d13e753792ae6d2239cfb2 (commit) via 00e977fc04eb5f2fe1bd75b1d9612c7b59b8a339 (commit) via 634ed5220aabdbe753e65af119ede23cd94f248a (commit) via acc0bdcebead208c00fc013ad18e29c3986d357e (commit) via 5d047aef5acfc188a96895554d9f9d2f0b5c611f (commit) via 7deefdd638532b523228fb4ea001a0e1c209a3d7 (commit) via a838d7c26c81d4053a806cb4ca72e697707223b3 (commit) via 54931a27e07feb2b07f85105ce609459e7228819 (commit) via b86a761e8befebacb8b1d2d76489a28ab11fae5c (commit) via e5593fe741920d8a9f6659516dee4bd414414ea4 (commit) via dd0e9eb3538607e6c5480dd7a76291b5f94e3b8b (commit) via 169eb906840b00db23dcebc037255546aadd6531 (commit) via a52867efee17b1dc79fc17e5c7f362658e5e67f0 (commit) via 7ce7e25cc5e0cc748c67e7d284aa76cd80212eaf (commit) via 93cd75209c70c59e7469eab4f2c52085e6547854 (commit) via 931dc39bf5e04583badc43e77ac5cd011075d83c (commit) via 550aaa4de7928c31fd0cfe671cf0796e8626ae3c (commit) via 47d2af149156e3918ec97f414769b5710f8e60d2 (commit) via 99aac866619b6ee565ee219f3224d86be125a7df (commit) via 27045174f3aa717d9d1a055950cb138caccb9cfd (commit) via e28bb9519b1bfeee78b26170c64eeb0a5aef9a51 (commit) via 68bc4b3b9a3589c556d6d04a442dda057eb02853 (commit) via 109650ed3d939dad74fbfd0fdfbb5bbcea076b6c (commit) via a65ece22d0aec860fbbdc63266d75d6794a132e1 (commit) via afdf175a5ea644ce599fe4843bb26c7a984989f9 (commit) via d8533b4e575d62c9f6f2caedd38d98a1a56fb8d3 (commit) via 107b9411e85aad0a48d759fbf0572a631e189a02 (commit) via 923550217b3800b2826965b1e7e964d799af7d94 (commit) via 27cfa741e4d80919fd352f3660351ac4fb631031 (commit) via 48ad99f7b4acca7577a17e259f1489cf4c7816d9 (commit) via c2c3ed55057e1a8032da4cff3ef0b61d38b33d58 (commit) via d0eb8f2e9610cd61131f9e2e9e3f78ca68c8706f (commit) via 2f144ba129628bd0e38b9804f9f7326380d70b2b (commit) via df1b969c806659be3c37ee16d58325f54ee8c6f7 (commit) via 773ff75a304bbdd4362a8a8064be84e9d76d1a46 (commit) via 4e1a38d1f75dac1fefd255083a605952c211a4df (commit) via 165f61d03a751374f55729257560e1435c34eb0d (commit) via 22187ee507099a0b7c03e9f96b6399dc6a43eb68 (commit) via 3d30a4d26953f3823588a0443226651b745b119c (commit) via c62c615e3358c4f7018788af1e88bbda38db2d36 (commit) via 5ca377b73201924be54b748e52f56aee94ee564c (commit) via e8926e29cb4c66b76bf171d404ed1ed9246374a4 (commit) via 7783e68c8c72c75ce331ed06cedc2f2a8e1674a1 (commit) via a29e079bb362a84e3c821dfef1cb60b2eb1a758d (commit) via 03d11d06e8329f5e5575a50fb9e6b22e280e8396 (commit) via fac3d65908a081764413656bfc7f2bc7bfb5a648 (commit) via 8ce393f99837119cd47b68e54de5171fc4acbda2 (commit) via 716fed6776977db67a0c498b0c3990887903f08d (commit) via 263f18fbc1cfb37d513d48fe99a82f8a7a74c3a9 (commit) via fba1d3ab00e529670840749a9ea18542eca16792 (commit) via 55c3a23f6cfedb678dca8891499f1af3caa065fd (commit) via fd145cc6837b269e680878870b80f0b4d5260eb2 (commit) via 923bb32980273abcc387f0e94f46136ca39eca6c (commit) via 5f16f4cdd606fe3873c4be4492effef47f508d25 (commit) via f624a092961ba6565d28396b947e93a5e8b5ff7d (commit) via e223bd473bfa16b74592cba0047d1328e0a196a8 (commit) via 6f8ff0b8951903a2aab6983d61e51d3392708c17 (commit) via 631112f91d50401b5224cf48ab3c8ccd2ca01f15 (commit) via 8f882efc2e27c19c6e7886d9c7cf9b36ab30360f (commit) via 89513787494341897fc4c6ae0d594f9425faf2a5 (commit) via 8c11d5d8931722616ae1bc5fd89a821a66ec3634 (commit) via ee1bee68a90283a68f09982820f877ae658febe2 (commit) via b8fe0ae5d5dcb3b3db2c7b2ded953da21772bdbc (commit) via 30701b84e576d589a415b1246f67e8355eafb368 (commit) via dfc735cec013302be5993dec51af6d3ce59d45dd (commit) via 08c759b713329962a1fe69b6fbf4132071bdb645 (commit) via 87c47f82095f709841f7f2c4f1106343e2fb6534 (commit) via e545c9a057162dbf0b3e98ff872850325bfabf8f (commit) via 50dadb4517ae0fef3ad90c4cdb010d7c28996b11 (commit) via 539c694ed114c4c55410d83d07348babeba122e5 (commit) via baf7a6b4b2397d8287ca3a22c9608986111b757a (commit) via 479d0a84a59ff1b8ea35d1aaca884107c1dc0270 (commit) via d7da01aa82d4638d99cdf7b47426c92a7593d83d (commit) via 47e316bd0b8842db4371119892071c2b24ff691a (commit) via cc931255c6ec0f7ceb2987b3202889c62a2c6786 (commit) via efbfdf1672040b40b35185ec273c1f52f3dfbbd1 (commit) via c038004f3e3de9c960e967175d7f8b9347121d6a (commit) via 2c5f021cd4944ee093be908420dadd80af070863 (commit) via e8678c3865d46a4b150eadab1124f97fbebcf77c (commit) via bd97bfc9674505fa027950ce32f4b4b6e462eb79 (commit) via b0ea58df23e53063ab567056e9385e3e92536b70 (commit) via 847f86377cbd875a93ae8ab8aae5f68d1a74a415 (commit) via 46d950b3baa3542e45f2e4aa0dcc351b68997cd3 (commit) via 872eae5243f0854be12f3e41b7b8cb84e88461fc (commit) via dc99064673d1ce7e3361db77aad9b2e0e0cdb2b7 (commit) via 2a981a9f67422773b47a5e18f139df8abcbcc499 (commit) via da401643e4975231f9e3fef2df067d3634882890 (commit) via 524213c30fe562834dbdb5480494395b7590a17a (commit) via 3b722d0426d08fcb3f169367a11f14ee84fec8d4 (commit) via 53ff93fd0a75167a5608cf37bb15be5a3f87144b (commit) via 17d9a587364dd76f5a00d8c60f18ab3e6ed01175 (commit) via 0b0ff8e9792b04e2bdc3f0e8ef26083ad5df1a8e (commit) via 4478de9683f9fc875d75220550e7e38f1e4e8224 (commit) via 7f5fa185004547dd74304c8c33ebab485891682e (commit) via 3ed5cffff2dffdb8ada42353729bb16741a2985d (commit) via 052a759357c7af9e0bf8445da6c99a3de2cf86fa (commit) via 12e24df40af8165c90ce4708af60301e76eb9d08 (commit) via 898430fb805520a7f0d6ae66108d29343074d319 (commit) via b44942d2117e0780ad250d5a57ff82e0fa551d74 (commit) via 0dfb4cec8ee0c3fde223be34a365313d543c0951 (commit) via 3951b22ad53bf0067acf24cb52b53d490b7e2209 (commit) via 9b961ecffde7512c7d7ba55bb1e46a0ee0baf90f (commit) via bc1a701fafb8dd8e0151cf3b7dafcddc2b9e2c82 (commit) via d27d5f2d3a9bc3500a841ab73f94123512bc95d6 (commit) via 06c849a1ec6ce6f10bcfc03e0cb51e56562d1bf9 (commit) via c2352595114e40df4bfa2bdcc716a9ad6ad219c5 (commit) via 64a982d48a6bf4178434ef1a47f4d9e20649850c (commit) via 5a95a500650893c780f1f13e059a87c3d0415121 (commit) via f9d0e9eb5583a05331b7c92ec267f13b4d650d92 (commit) via 0331a17069916a54f9894c45ea3c0dc1f3d90cba (commit) via 2d0c0827f5f74e4984a9711f13a50bbc7ce11077 (commit) via 80d9fa87c2f9650fec7c39248d2a4954f59c2be3 (commit) via 638ccf7328fae7048e96ecf136e0d88a7722ca5b (commit) via 9c21607912aa2192df81cdb95950ba7f9f132bc4 (commit) via 1185b56142d5a2a933b5031d09b877b9fd95781b (commit) via 102f246a7a38e79e3b33240210f77e3ce22f2ebb (commit) via 553a112b23f8bb5d476d69d1da9a15e9c72a07ed (commit) via 20d380845223b4a255bf4de253561bf7f246adc5 (commit) via 9f35cc909331f806d35ef84f26f7c80f379f6f6d (commit) via aef88a42b1ed72629c3606d09ded2da2dc383a73 (commit) via 7b4fe6c0dc575483b200ddeb1499acc300dc1bad (commit) via 3115baf4aa1ffa87978c40ea8e9727f0946d359d (commit) via 0c2e789e03a15a7e443896fe335e9e5142468e4e (commit) via 5e370e1113973feafb43a8e57d4c59be40e9aeab (commit) via 13f93292274b8123f3bbed54ddf84cf304909db4 (commit) via 3385e3e1a36dbb37c6b121ef3162f94d1cc21ac5 (commit) via f6f1dac75dade441eef7c7289782dbcefba565c5 (commit) via 92de3423117cffe90b20cbfd0945eada88edfeed (commit) via fddc98f84e9aa44bc43d3797c24868d58d1de715 (commit) via 48e83dc753ee05b3407dd90f81e44ed3b5e1e0ed (commit) via db7b6a6447c432b1fb62d99565bbb9afb9fa04f5 (commit) via 8a738bb590e06f39c92bc33386d1b2795df29a7d (commit) via 8b6d19a39c233f0f464f7cdc61acce9c73b85392 (commit) via 4d2e47d0ed40c9ccd72fe891498ed0342056303d (commit) via ce3b66bfea4caa2549b9d37e71895e67e4adef84 (commit) via df328ba23119d5c1fff18baad65b94792f24b32a (commit) via e10ea1da2c1d4d5285b0087f1cd43a01bc7d20f4 (commit) via 6f4a531a40429a8ba01dcc192a713cbfd288c120 (commit) via 7068593f600e2b5a23ee1780d5c722c54e966df1 (commit) via 593db241c782ef5e597eed63dd9236fa1bb964a8 (commit) via e83dcad9fc2c45ded1389278d8ce77357bf6a3fb (commit) via b0396c25816d3a761b050b3abb85745bf83c4c09 (commit) via ebc0b0c3470e2b183ac4bcf362a95f9dc643b777 (commit) via b53cf30e9266d7ee5e7df39d3c7a7107d70388dd (commit) via 6edcfb7790e1d5fc3cbac7cfba03ab6f18c0207c (commit) via cc9802df5842ba85d83c32a9d3337cc49044fede (commit) via aa0cda520c6823b0ea99dc3295db40b5655529e5 (commit) via 7210354a45df32dae27b6aa16b5a8f737e57994e (commit) via 32ee6577f7c31ed3ac9721c15daa17dd1421c77c (commit) via eaa5e887731be7a4e2ab40aabbd421e9bdbe0291 (commit) via 49f2d7589ba3a6e76b47078c2f13b0b5da5594fe (commit) via 4da1d6734ab6162206a0a02d5159fa91b5480898 (commit) via 9ec013337d88c85d30dffc7f8b6948b46a47c979 (commit) via ed2db4144f580c2e14263321e6e969532c14418f (commit) via 70078c5c31187b942e6aa60914d17af8fdf99433 (commit) via e7a3114f048af76c047fe44b2b2e15440264fde6 (commit) via 0968be36721ae922e61da1684dd141ba4890ea04 (commit) via c364143945eb10ba7065f46a670626342f6cf0c4 (commit) via d2cd17907bc9ca29fd6c6a98610e17abaf1d34e8 (commit) via 5ded0b8443bf2e5b6f710b8ad5c2b1d8b3c0abb1 (commit) via a0c8d5795baa7268f6316ea152f1a1fe2c46abb1 (commit) via 4daba785f2b3dca1ba13841773285f0933dcd136 (commit) via 018121622f6d3102e9bf180a3f28c8bcbf3972ce (commit) via d8d067529d2305b621dad481f3e3b786d8578cd8 (commit) via 8e1ebcc9badcaf5f5ceb3764208c85a30729ba9e (commit) via 0e642ce9b2ac0a26198ef8d6e0c9cb0dbb549d99 (commit) via 05eca183585c77fa7546a4f654cea0f7a7f7b876 (commit) via 3549864cc186c61e468b9efbe19baa18ec75f410 (commit) via eb6929d8bb3124c8165b5da477f0f10c903b8095 (commit) via 76fdb23e160a76fbb69eba3d59a11cf3c8e76d60 (commit) via e884f5f70f745770083e5b57d8a6e982bb2ea1a5 (commit) via bfdc4b98885bbe429db5589ed77da869620df6a8 (commit) via 8f75fc9f66064efb059ce02fe81989d107e8addb (commit) via 0ed1ced007d98980f90604675083bf30c354e867 (commit) via 9555c17ac533b86851ecaa8c25997868a5a4b5f7 (commit) via 6298b9abf1ae88a089a76485092fc1f5699c073c (commit) via 0fcb1a61506c128de598618f2d4d57eb8b8daa2b (commit) via 9aaebc97af0aff04617128b89e223674862980cd (commit) via 1716d1f96d7665a67a44c31b8f6b4fcb91a1f050 (commit) via 07ea2fc78caa0724b0e35f402eb3baef7bcac5ca (commit) via 78f58d7277be3b044553242cee9cee79e3571cc6 (commit) via 0344addff23a8027445331bc0484bb041caeafe3 (commit) via 9e5ccba8998e8cf028611a74622ce9e30cc4f527 (commit) via 5cc1ba9b61b60ce315a42db94f3acea195b4213b (commit) via 1d4e4be670e09f38c2f934232d221a8dd04e2fe6 (commit) via e7aa846454f92b8b720f31a23e2a3e000c432d59 (commit) via 6e20b254031bf3464b0bf5de0e09d4cb057e06d6 (commit) via 4836e53ef5f3f1cbec1650588158680e99c32644 (commit) via 190ae8446e49bf4aa2b848dd3ef42a4f855a28f1 (commit) via 257861448e4ce11eeb012a7159307acc95a98c22 (commit) via d23e510d16e9478aa23ba540486fc0ec1eb049de (commit) via 3570a34c7d467f312c509a242aa94e9ec1a9b581 (commit) via ebb00a1982041fb66a95439abedff978454f2324 (commit) via 968237b592a8162041a4edf0091575fd1390d647 (commit) via 293a6a77afc4b71912c4f44f352975239bbdc1b5 (commit) via 030e5501b93a448c332627ca5fac65136b207672 (commit) via 29fff90e5d5858bbc91edd3ccaade9de4e2c53bb (commit) via d4baf905b440f8417965f56387b2629dab1796c2 (commit) via 2ff09a9d997651d32cef4c0a2ddd5eff670ad288 (commit) via 58f5ab70e61bf28ab9cdf09f4786965cffabc4da (commit) via 10f4ec924c145e3a85a56321add0b4a044b0f9a2 (commit) via 7585d11acfd9c91fb78c2347c2557c4da695d497 (commit) via 75eba7937410284a3b35ee3412ab132177c1811c (commit) via 9e0f0c11abfbf9fd87e89a4fb84bc1e711ec8bd6 (commit) via 2861ed817565e54b6bbbeb7b1f723147725608ad (commit) via cbd21c3bfa6aac6614121fb822f65c97976ef2b2 (commit) via cc8cbb3e772fff59ca7fc86ba80c769beae669ec (commit) via ca00408f7d2893629793d86a89c125ca8294cc1a (commit) via bca1d9c9e69cfa81696a900b8e5363463ad62628 (commit) via 325d77564348416379876922c36e34314cba03d0 (commit) via 7a71ce211d4ec0e307268807b3d654f5d319ea12 (commit) via 58a06dabe599c08fad8a47fd1069b8c4bcead8b0 (commit) via 4390888eb2e8df0281d6afd789dfbf12305a3e84 (commit) via c08fb04d8458a0f06528132bb1fc12b8422429fd (commit) via 7345b76e9d31eb6bde1957c5e3790968508c7f51 (commit) via f5fedf57e370eb5312408e03a67e213ce7f5681e (commit) via 3f62e23c8365e6bb546449a816a768987d2e5a1b (commit) via 8190546d913ac7b82359ec4ea07ae35ea5c667b9 (commit) via 7b056f06011e814fec904b09d99a0ca303102691 (commit) via db9790c49ee553bce2b8766f4bcb3f949eb05b9a (commit) via 55f352976562b8d79f618748376c17cd6d2dcb95 (commit) via 611c34d13fa88389fe0f399f4d959f87235cbbb4 (commit) via a28d3e3e08bc597a0f443e1c0aebf339ccb1bef6 (commit) via d479cfaf5eaeba1943c89503eb3a7fac40bbacab (commit) via 49ed28d0a3d4c9b54b31350a2be490ea3a45eb5b (commit) via 06b7cfbcbfbcb79623a3765488d1930fc13cffac (commit) via 4c45fabb9885db21514f814b239fd6c0fdfff381 (commit) via 5f170855410e6a664abe4e4f565c4551570c4c9a (commit) via dd7eb726c4b05efd29ddf2538a76e4d6a1967b64 (commit) via 45349d6a65c562647bdf33fc24b80c995c68c8e9 (commit) via a2a6271e290c7b7fd50808791f6725e9756559b6 (commit) via 85ee38976a5716210b27b279407e55563b1beb35 (commit) via ff36bf558ed63d0d80b1022ce0709564ae35493c (commit) via ac071fdb94d9fbce420ca3e8a62a152cdec1c94f (commit) via ef949d307d8816c48903612104c4e4a09cca76b1 (commit) via 047eac18b0e7f8fafbf3cbd79a98a581da76804f (commit) via 0adb02202924d2136b1bf6ce27c88abb7e3a1796 (commit) via 888d48cb0b2cc47304bb25a8a203b1a646a073c1 (commit) via 598c5971944ac6446b9d61bada85c631f15a943d (commit) via 00bce01f163755b5475cc2b02e0e1e785c1f1209 (commit) via 1de18ca372abf67233e1258f8cd0f39a47456ed6 (commit) via 2f52b5150ad3d39575c641eb9bd14e5acfd6bcc1 (commit) via e6e2f4e80b6c5b03aacc68205c444d56beca8e16 (commit) via d5c831e933d53b267dd8a783f4bc0585a4851edc (commit) via 09218d1debba3eea842c17beba3c90510c696578 (commit) via 636686ca7d686d03dc653ae0bdca49688a26ccca (commit) via d359f84a6b7a25a4d6ec89ae30d8ddd65371adc5 (commit) via d74b5095d8c54dd68ec9f5d5ebcaed921730c591 (commit) via 82a2b43e6e5d9e077023b851e012816f2c00f308 (commit) via 9f8380e59ad2522f106ab41f422e26b523fd167e (commit) via b97b756c4502acb632096dc0ea43a53e96de8dda (commit) via 5646d6e0504713328ad610dde751eaac074da353 (commit) via 8be97efc503c6b1389dbc364c3fee0752c568ccd (commit) via 438a207a39bad213cdc03929452a8199caef5d8c (commit) via bd6e1c5c4d25ddbe0394ae7a1ee4201751e46085 (commit) via 0d2a6b1b8342d39031a9994c9dd089fed75989bf (commit) via 9361c608a2497724114fe0f2ad4d380fcb8a0137 (commit) via d4ed94b99074657d64884a2c15920df286020222 (commit) via 753dba7e00187d30202657d85baf2d55c34cd048 (commit) via 111f18c8deae6e2b9b2bb0eb5ca9d7e0e1855c17 (commit) via 337a22cea73df01f8df95d0583597f5da983e4c4 (commit) via a876bad9bc6f6603777f37bcececec170a760e03 (commit) via 4ab9089ce1d9bea35f90867a74c29d3c64475cbf (commit) via 3f38a4296272029fa7d348350b16c66b4d8c7eab (commit) via c04c08c1b27c5cc5705e7b8f5f34e288109784c5 (commit) via a944261929caf1530b922933037cffbae39f1d01 (commit) via 141280409e37af53c4d3058cd292cc3be80f20dd (commit) via bd0ca4bc851e1abb026353f880f7f773878e472e (commit) via e1132306f6ca075ec0c1046d75903c307ba53678 (commit) via 66844a35e22d84ceb73b27140b1d3803ccfc14ca (commit) via 55458bbdf4ca7a5cdb06859f6555521f37e08763 (commit) via fae63f4f10b21bafd471b219184001259ee10e47 (commit) via 35e1cefdf7aa750609d52e0751def2f8c93c4810 (commit) via d7396e5b19f940838da819286e281221538e024b (commit) via 68a78de3af9f763d78f0787171ac768f7dbf5cd9 (commit) via b708a27b084ac499694ba3ee85b183afd928340b (commit) via 318e41848d1af7453f19466779a1a12913367754 (commit) via 57e80531f6e355a594e24999df404de9acf9e0b0 (commit) via 49c828151dc96186bf894cc59c920de379151950 (commit) via 90c2744054e93e4dea9d65209d46ed459c16a5b2 (commit) via e06c66fe7a0d82e4e6c8158c0a1a4a5d1270d65e (commit) via ed23ff6612c37aa6b218f52ceafc932f2f858189 (commit) via 269df889a9b2ff6e4a8a1b4e9c2b2e11787eb786 (commit) via 8e34a1aa7f8c3b08a732508754fdc731f9c6d3cb (commit) via 623b5a34aac975e979038d01d9c4ee87963684e1 (commit) via f2265da8a13fea67217956cb7a29b097628e2c3b (commit) via 520b4f009faa9525e53aec565b1f4b464e8dfea7 (commit) via 754165b6b87e37ff77b3503122fe75e6855c820b (commit) via 16fe86ae0d3b3f4011ab24f0666256ee7a7cb802 (commit) via ca6fd4f063ce02945ba2283bc753465524b898a2 (commit) via fdc4c0b40f0b4c856524e86d38a7ffefbb8cd8e5 (commit) via 59b025b38a81470ab6f67c160c179f9711dff747 (commit) via bbf64e48855861197ebcb83e91516560b46f0162 (commit) via a6f859de54659035305b4ad39e074ea531f75473 (commit) via b56d8b7405a059b9d4bd4388f0cae774a64f45dc (commit) via 34ef02199fdec3a47a86df78a7bbe032be44f83e (commit) via 8e00aa1f8f17c2662f9193d68b0c337ec4b5263c (commit) via 8556e01cd7c5e8f9399260c677175a5872b59da8 (commit) via f1bc069ec4d39c0d5951d95b2524820f85428a98 (commit) via 3e7ff600195b7dfc08c89562e4ba332ce9f4d22b (commit) via 8a66f2074be5254f9911d189829823f4af98e0b7 (commit) via 18edf494f30236b8b561269cc31499b34506d7f5 (commit) via 0d3e55704877e74c6c9b42982bb0c7fc1dbca261 (commit) via 09c4ba9249754bcc6abcc39607f4f04879cd4e3d (commit) via 4743add489f2bf7ac831f08087a573c85bc59b99 (commit) via 62363415d21c0e77595b48eabd30cb7f69de2b62 (commit) via fed8690a8c1b260acb60247e01222de2efe4cdef (commit) via c5cc8f18b97ae2eca535a29fbf54facea80558a9 (commit) via e96cfa3e7370b5f8f68e943e2438d9bf9ccc2626 (commit) via 1a1ce749fa95b5da3033711a746edc5fe0878ed0 (commit) via 2ed486bacf7ba5250a6e84407a795662a3709289 (commit) via 7de4d59328b62ff038d72c13fbd0365eefb71f0c (commit) via e8ef75750f3e414a483605bfda56c85f9030ca24 (commit) via b38c33e4ccb028fd1415d5b09dfc98c12dbec98a (commit) via e2329bbdb8021e4be571abdeba1e40e7ef4ede42 (commit) via 11a118bff195bdc86d147f2a52c2b270cb2ad72c (commit) via 3bcf0780ec937373d327a4bb651d3512567f4ba5 (commit) via 508803806a66efe5525c644a36b2e33e0e5cecc9 (commit) via 2bc611a580fe02b655d9de5156d7ed0444888f37 (commit) via 805f353637f2757857b2278e2c86682c356bde17 (commit) via 543d3052e12757ffcc2f3bd29967d0856731932f (commit) via c6aee2829bc5badf05ba6074f496a3b92bbd52f7 (commit) via c986883f6184aa3f22ae28e0b7419ce751fd7bfc (commit) via 70d52b245128205c5df28209c4fa7b5fb2d7ad18 (commit) via dedb18376bafb329b9ff8b5a56c0c3798af316ea (commit) via c67e7869ee82f6bbfbba82988d8f128d2598f1bd (commit) via d1e6e2c9fde01a0be11712656c44fe095c02cb75 (commit) via 4c8fb99fc92b9b766751278c5626bd9f072b9656 (commit) via 07d1ab36c92d601a40400cc89b690f56d0d87ec8 (commit) via 9b89bd6a5d3eb262a2f1f28135fe68cd4f3d8126 (commit) via e8c2edbf636795fa36757f96709d3769d81a2d54 (commit) via e6fa7e457faee625943e7175c71e39dd23305cd5 (commit) via 60e0608ce4dcbba83e9fed7f733cf3c094c6fc55 (commit) via 290342cff5d0e2bb954f9eaf148bfdbf8c14c829 (commit) via 4b01c311a5f6b8be6a837d1fc8c4dcc592685420 (commit) via bb552a40c63560b5b734e80204b716bf16975f48 (commit) via 5c95b45a8fa481067a0ab3a47fb7df8b0861dcfc (commit) via 30c69e14b1d2af1f59b0b0350187711d91724645 (commit) via acfc9500048d075a59fc1ce1205a13575fcaec0c (commit) via 5b91afe772557a1f0cc91620afcccd72af25eab8 (commit) via 8f85d4cfbc70e381ab1798c849b9e59bd3730d0c (commit) via 84fa3e7a760bd5757aa7611e475fbbaff04c67a6 (commit) via 878e720b8d20ce954513e3338cf9dcd7d89cb3b5 (commit) via 9eca3dd5deab6805b2d1989c71e09d37a431a47c (commit) via 44ca0a666b77db5f863a2a9d27b33c74f30e6912 (commit) via cd7e8754a547d6d165b74d5258ce6b4dd60e653d (commit) via e886513b57fca4c00f4c8774cc93efb8d99b5101 (commit) via 33aa8daccc20e2594d1d8037b2c14cc317bbc676 (commit) via 279fdce26c3dbd063f9e86d3c90663937d521703 (commit) via 33f940aeb3b979d7aa07c99b1e6fc4977eab37d9 (commit) via 805a999685d154bbdcced4d055d8ea4a6cbb8288 (commit) via 412a8da2ae1ccf9b596ae2eed84ae1d2f3ba4010 (commit) via 4c13c58dc2df1ff86d15697139ec4225899e8fea (commit) via 05f880c9f71e617bdf8fe91b9caa8c08d8918f39 (commit) via b0c8cca3ddfe1c63d6e450580955764f7fc122ac (commit) via 92936b6a85e89407073bd2d3dc86cb3c52d692fe (commit) via a2d9f584381cb0053f9b7796c4a7b6783d7ed6b3 (commit) via cbfc8265a29a6c82155c533d0e7bda063e14ff13 (commit) via 383a091bd622a568b6bb91eb7b8ab59cefe8179d (commit) via 61594a656bb9af173c070531cd5cc4ddf893c819 (commit) via 6468c67fdae476fa1547127107eae1a3f69f0e23 (commit) via 2a3b50c210b3efa75bbbfbe5b55367031c1563e4 (commit) via d0fe316d5404b84212978931faa7d53c64a4efcc (commit) via e2e0a537c2953d8e67b45ac5fb4f66157e28378b (commit) via 14ae91fae0a1293aa079e4fec5cd50db2ffb34ef (commit) via f5a441303606b2f0ad06a657af2bbd958c648197 (commit) via 627b59fe2c80f8c031eb5b32b2f1e3a4fba2a896 (commit) via a39cd9b1584a8075cfdb2cee4b5019ded516af6a (commit) via 2696c1fdb1fa9e7a0f59ca42f83dfb0b91c00a50 (commit) via 8cc2fe669adc2a5a2f39f44aea91ec0fd8091a03 (commit) via f19b00bdcfe3099d602941e7378c75c184782ce8 (commit) via 760ea9eb4a59fd2b541c6c13ad3a57513587b8d4 (commit) via fd553bd19e82f680d2b7996ae1adffb7e4e6e840 (commit) via f0ca6415e7d438a0707e1f065e24751b10679e44 (commit) via fc8047efd8045d763ce241175930443879c686ed (commit) via 8ec1dafd4bea92b1ea1718d0ebae61153107c03b (commit) via 16213a2830d74383bff78beee34eb36745705388 (commit) via bd5339d6dc62f5b53ca515b9962a7d2adc05194e (commit) via 52d79a73a9472b50ee3c3e4b133fa095fa154b73 (commit) via b29e5df8df2d08e51542a39da27e58bb03ecbf8e (commit) via a2b9496cd96c78dbbd6f0201c081b393ee2388f0 (commit) via 8ee9ac3f32a16f6e5dd2a0df9b56c455ce2dfc8a (commit) via d4674e89875b3cac884dd4ad494fd1de5ac77e7b (commit) via f1b21e8e06e7ab991d2d274d6eaa5ebe7ee54364 (commit) via 1efc16f96f150f54b002cbe64f28b9e55d814672 (commit) via ec236c7d70ca1434ff2074563b5881a86116ffcb (commit) via f8c6fcc8e510f1ba7c0c258e13a994dc5836933e (commit) via d8bceaec15a1ca37cd23d420b1f285c94e5736fc (commit) via d2a49c73b8765a6afb86058f25c5ad829d1c49ef (commit) via f855321e3f7c242cb017bdcdd2d38e58aedc82a5 (commit) via aa5ae5f905f95eb815b0758e635a50418e0ee323 (commit) via 0db9aaeb97c309371b03f6166a763787b4a20aa5 (commit) via 54def4432829350e863e647c74162e50431c4f20 (commit) via 4243fdb11ea1dedb6c13a47b38a9c74010106738 (commit) via e43c8ac9c61791c3044afddbbdcd26e2d429a281 (commit) via ff4ac5e0ad320a83c4a7f1314a150e9b9113062f (commit) via 7c98682102698f613e41384808d012bdda7f31cf (commit) via 51226cbd0a4f44476cbec9eabe2c47d014465137 (commit) via 82c9457b398905edb926fa49a7aba8f7fe0cecb5 (commit) via 588e52ba02550fd7b3afa4407c57237f95250acb (commit) via b18d0bcbcffc1d4988d1a95c86811556c8a80bb6 (commit) via d828b68e9d6e7887be5d933a8d0e1857ec7da8ce (commit) via 71546b2b365d81d7852e496645f6d21d6bd7bbaa (commit) via 6b6b6fb015a8620698b303ef7be3f183af8d35a6 (commit) via 3bfd9e3b1144003b09f12a385465bba3b006827b (commit) via b24a7384e0fedfef26d2a3554289fabb537fdac5 (commit) via f1e57f44a853c7c61bde41e343ab9fac52c4afef (commit) via 14ab21f86c007c12a311dfc67b93ce6bad9f40ad (commit) via 3d153ce120f85775d0b2b3fcf7ccfbdd85ef45d2 (commit) via 6d5e99291a6e62bae7dc8154077ec7bbe98ad4fb (commit) via 48c8a71416f0112a4c075e948efa3092b9fe4dcd (commit) via 5ae37b41e41fbbce8de4c71733ac2adb77c73185 (commit) via 156c4d40d3ed3f4aba8140d6bc3c44ee6dba1216 (commit) via 19a7541d082b937cd6a725a172b0018ceb7077a3 (commit) via 6b29546f13528ff7c49564ef893ae114fa28e63e (commit) via dbc08807f6e5a2e6e9d10d488944d589cf394824 (commit) via 6a838a51516e3918d23cf110dd64703538af8cf8 (commit) via 5e1e8d231fceba86677b63aeab57b0881bedef63 (commit) via 9c66bca0d8c059bb35abb434018e393bebe2ddfe (commit) via 8e64aac38a9418099eccfc06d06fe1098ad03215 (commit) via ebb9acde37af1aeeefb8bc9796bbea4d7425c00f (commit) via 62304a3fd8d3c355fa5bb53b501e27be58b6f16b (commit) via 318505a104ec695354408d99a323844cb45d2282 (commit) via 807f62a25ea72dfe61e6efb3ec7a70bbe785499d (commit) via e1ac6c797539a62ee6b93554a1f0a7f5ba433a36 (commit) via d3c82efd05916221cf28e7d5feff678028b67773 (commit) via ab2bda05acca04c683dc9d2ec7081b826920a88d (commit) via 8c81e81c6f26ae7be377686147768b3ff1cf28e6 (commit) via f72f9c3b54293ac587de816b0b3fbc50005c1426 (commit) via b7bb9f3b117e59a2bd144af3f1c3465dbe636766 (commit) via c31467b8fa286765ef2301fd14fc0de6f9ad9844 (commit) via 263cc9702461784515934c39f1bb52bac936e839 (commit) via acfe0d2564a22c8cec6bc65771ed190395677b32 (commit) via 8b9d55e7424a8f31c0bca45cce315897e4bab6cf (commit) via f10ca8c8b000ba04d431ea67c11ed5c8d82801c6 (commit) via 42815a15e10cabfbfb6f3522a887c7ce2fd1f62b (commit) via 481b71e20e14afa7a8b937580cf2cf4d4c4d9033 (commit) via 762cf20e18a3a02d6a8311ed96e6d13b998aeace (commit) via ca493888e186aa38dbcd56282a3ef6e99a09f4c5 (commit) via 710f73c05301349d067b936fb821ac328821375d (commit) via f39f9869ef083f3e91a883caae3b902f15768012 (commit) via 2d7405baf12745bb83b0480e6b0086884ae86d80 (commit) via 97e47beb623c263b750d8dd1751cebd372b3d01d (commit) via 4e1d2c6cd00486a69c4fac778cfe3474ad23c9cd (commit) via 71225bb7381ce5cd109c238126be04b0c700875f (commit) via 0b20c17505e555710879f5cfdf03902c48115234 (commit) via 124eece86293f4c49474b95f0c2e66bfea0111c6 (commit) via ad7fcd5500d56a148539a9b885fac9d116e02ecb (commit) via 4160187b0f2c8220e93886f310a1da936a2d5bcd (commit) via d6a2b110a9c1c5a464c1266293165ac2c7ad2cb4 (commit) via de17f8fb88080378e3a5d1efbccec1cc87167c0b (commit) via 435099d9b487be2aa85e11c7e7dfdcf82ba5bbd2 (commit) via 5d6c6ea58845ed5b6c311b19690192db34802b18 (commit) via 54e81c1a6b76b4c54dc4a2d65be21118c4e5d3db (commit) via c1edf60d492c08430af8d2c42a1600e54d4028b7 (commit) via 213d8044006e93b859a28a788325c38686912b65 (commit) via bc098bd3b501e3dd72030486725ed78f1d837e74 (commit) via 2dd1d573dadf29332b76e0652f9a2a300647c940 (commit) via a44b8e4fdfd87dc71192af19407aa1865e13931d (commit) via dec969940486796ed98d4bf122dba7c7ebd352ac (commit) via 3ada90e8b82de2eaca3b541a6d26b7cbbb18926f (commit) via 3e3b703c3f46cf5ead7dad1f65d3f6afa876e76b (commit) via 0514646ad1eaa34f74cf47df4ddf966e37227db4 (commit) via f99bc6286c63532fa8c50dec276fa2211e8f8c42 (commit) via 52e23eac0d09566940b3558e9701831643f9db83 (commit) via 38d61b81894ea49c991d39dc7b8b6445e0f63e0b (commit) via 37cab30105889b29543bf90dc1dac1b8ed42cea6 (commit) via b3a46da78d79a63eb6ed4ba903455faef27f50a7 (commit) via af15aa91a3d96a9ea0dd572c6d59b5eba26c51ae (commit) via b0ea4716a00ce31ce0d6c391456c6d61172613d8 (commit) via aed7636c91f79d7afbfb17aee246ebfed68d60d0 (commit) via a5ac11fb32869f126a50fd57b7e1c8b3e043931c (commit) via c922bca7e27b4dcab79ddef9312971ec3d8e3e7f (commit) via 2d232fabd9413821c2b2ce750499e403032ba8d2 (commit) via e2a01fcdb14f4de29f8a8a0cf27a0f4d919b4609 (commit) via 23d5429988b190f1d838027237224e1e798a815a (commit) via 19121fd26494c136b3ec5734dccd26abc0751335 (commit) via 3000df7d88b57af6ed2c1c2b383e1966818d556f (commit) via 5ece2ac021a9d7eedfaed45ded9ae7f550404551 (commit) via f129286d633584da2a62370d813411a6a15f31e0 (commit) via 856eed17319df0876ff9c6a87b782cc2e2eddb7b (commit) via 026b5d196165669d36faa69014dea3129b1ef7e0 (commit) via db2af0cf1c48278015ebfab2faa08a2c8617e9ef (commit) via d369df66acc7c9d8d06653d81df337ff049af52c (commit) via 004d26315cfe93456a22311d078b1271590445ea (commit) via ee8b74e1731bc4b38430205d18be2378bcb8739c (commit) via 1a8df254e18bb50dbd835729bc3d01fcb87ebc6b (commit) via afd376bf0ac0b0eb16159c0004fc06b90f47325c (commit) via 69389f839da0ba662aa287d2992a2308e02cb75c (commit) via 9fcfc658fd57af60d3402bacb17c118eb8c6c8bc (commit) via 811eef3dbbdf8a4b7043fa8ab3079497121a0f66 (commit) via e135a1242c31bb53420e78ed3b763ce16fcb5dfa (commit) via 634cb1b30fe0524cef6d1cf9b4ecb2225e2f4cf0 (commit) via e170717b7a02406c372bca3b21d54c2cdfdabe2e (commit) via 7978583a81f35fa7030c49fe45fb696ea1ed2029 (commit) via 5bff0e376141da4256e3ac6a82ed63fae72fc17c (commit) via 9ecbc368dfbde090ab703253eb660db2c7a7cd74 (commit) via b8051fdcf3f2de0f065c5613519fa6f2d261dbe2 (commit) via d7804c50ddc70f5c0adabf977dc5940b487a186e (commit) via 0de5c1b7c8a0e8114ce22b28f9b431240c9ffcb0 (commit) via a4fa99b7377c39e455fc70c9e924548eb0c5f963 (commit) via 6c480108993202edaa333d0e29095a8fad5f5bc5 (commit) via ee28b8ef7d22af3640484fbf4ba1211d3611a339 (commit) via 5a0f1ce68e6b49e05c4a377e2f1ed8a10cb0ed64 (commit) via adf7480a0cd9c63aff5a3c0e656fe8390575aec0 (commit) via 1d411efa6813a1584a84273e4a174e6f5478963a (commit) via 3d6abd09c13cfa12eaee57622336424c5d68a6aa (commit) via e3a993e7ffb85ef84d5857132844198563b78350 (commit) via cf8b678b4112f649e11723164c5063a49a17e374 (commit) via aa10b6324a91e18925ef9ff035b80b8dcb037a8c (commit) via e411bbb1be0d2a9cecfad21ecdff8e4d6fbb6afa (commit) via 3f2e8076cc67210406bedb53ec172a4b0e0e710e (commit) via b58733eef7766c42a2dc8bd0874966a2bd694f84 (commit) via dca9ed36a0523b03af3975a1abe1c672121dcc25 (commit) via a3152b660a0ec16ce6e2c05df5b12b95fc46b0dc (commit) via 62a7588156cd363570ae89da44e04e0ab614630d (commit) via 2c3c0c247c53816a114e58f81776753a7013892c (commit) via 763475591e8ea61129aaeae3ef35180391d80d30 (commit) via 98dde7f00a4189a620b63a707882527b73d27d97 (commit) via 4e8ad2eb04385ebfe5d55f0f7f52185feb4b55ce (commit) via 9dff4fea7015e1418547d89a617ee05b77aac63c (commit) via cc2f6b776ad000fbf374826f8e60f87d794f89d0 (commit) via 7b9ecb586207fd51f3a181c4e60d7835d2bafb00 (commit) via 33d3fc41f384b2f7780e228d3cfb9129733336a1 (commit) via dc6ce994f3f40e4a0edfa291126ff41d97a5f585 (commit) via 7e05193a18ecd58e8832299e643c35230989a3fb (commit) via b57c288a483ef94ef60fbabd6f2da55db8f897cc (commit) via beb3d56189b56fe10e11a7f90656ea918423b489 (commit) via 1de9b5efcf811d666c6405b9464763eaa77eab5b (commit) via 1d9a27f7bf8e138dec003d150b63addabf76bfbf (commit) via ce86df1391bdc0461173768078e55fc38a441329 (commit) via ef93fe9ac9699215291cbf62991e5ce9fbe860d6 (commit) via 2162d875c16fcec818912e0bec172e900d8d0e99 (commit) via 126f710258a76a34c37aca98c5cfe0fd8d018cc0 (commit) via 7c072de2b818ae028569e41b16c8502d887429cf (commit) via db175f8d9e4b0fa3198936083426dcab570b9d20 (commit) via 644cc172ff460b7c511a17d4f618122810736310 (commit) via daee2ddabd5894111fa6d332bfe18e49d123ff9b (commit) via de16caac8719b2dcf08676ba4d0ad71e05064047 (commit) via 303e2ec23a876d497af7ce81f969d3ef274a670b (commit) via 8101e86e16f85c880b8b79cb85fd8f40233cdcbb (commit) via e83b931579741407c225706b87120642b9cc55ce (commit) via 9e35c0e373501ee7430e51923348d5df76e23c06 (commit) via 77dfaacd6ad88c1b565224bc3dfcbf1f6f2c2309 (commit) via f547a372d44fd8602e07aecb23ffdaf3068cf165 (commit) via a9d0e393329aa2d3ba8be9b6600fedd479c7bc33 (commit) via f72ae32d8fa8bd5d2bd869ee122cd36defb24984 (commit) via 6fed22f67b590a1298a550749b40507326f4ea34 (commit) via 2c5a1d551351182b47c8c1341c633896c1afabe9 (commit) via 7da2690a499e95805536a0d7b3fadf64255f97c5 (commit) via 744e51162a9f6b9d7f5686c15dfaa2771533b72b (commit) via 5883b9683feeda8b01e1c9996088b9b95a394dea (commit) via 9c3717e12552b3d60a7100f14ff8e5bf9408ec0a (commit) via ddf21d74880fe31916ef00e6eff2a01edda4a71b (commit) via b362573b74ddb6e2939d83acd773d72c571f3425 (commit) via 555dbec24fd3dc4909b33189c5f3f24a82e283cf (commit) via 24fc060ca075fd9e04d64d3e53d508ee893ca4a4 (commit) via 61450e23fcc1b56bc9ecf841e8c8d45c5eaa84a2 (commit) via 4963dd2d820005e48f91b78e6caaed45d91a9d63 (commit) via e644ce4e7812946d7175d7452f02058d534e5de7 (commit) via 07833034064c1b2be38fea3f2a1bc2dff8965ecc (commit) via 0dc56b4050068bfccb8e4f958138eaf4933bce27 (commit) via 81e272871043bfc4d5f3f40ed5aa1b17978bf992 (commit) via 9abad7f099e5c23ccb26c1042ef64bc80f04a644 (commit) via 40b28bb012bf0f3fbbb1d5d198f05ace910fbebd (commit) via dde7ed021b42be2ac3daea2b8f8c982c0e3cc3f3 (commit) via ee2eba6f231830539ca6d571d9cb8ba159c7518b (commit) via 042b3ff7271d81809478d479224b4155d5113cc8 (commit) via b1e20c71bb50a1b8806d4d2c5da95f4bdb397d7e (commit) via 74a3c4dd428c878c085f1eea74fd709ebf08f552 (commit) via 8914536bbb4060f37275b6d494957bf096bafc20 (commit) via 0c669854c057a111bfe3fb91f4788146775ff0ed (commit) via 8a741f952fe5fc698b9747ae32b11045e90c251f (commit) via f42930a55162065b295958443278c01449ef17ad (commit) via 1f7e60647e4dad303469706eac9594b7e8a03bdc (commit) via 39c80ed6f675a5d0306fbc738610b410025cc89b (commit) via d7f375ed76653ea681fb4ee03d3f100566f810d1 (commit) via 90831db7175c5d67b9b849c0e2dc6d110bc0be28 (commit) via b86b2835a90c0f1abf54872e28074705932fadb4 (commit) via a343f1f52fd7f5bf8ac2d0be501b5e9bbdb7717d (commit) via cbb4fd0c0e8bae0af6e83f3e1b596a29d525a57e (commit) via a451558313108956d1a03936729b8bf02da21514 (commit) via 33e330c7eb17b1d453cdb46c645289ede4284626 (commit) via 4a4e6c49763b295b36783f1dd1b17dafa193d2d7 (commit) via 78c8ff19270a6107461ec7b85efa3616b8abdadd (commit) via 9f1c337919eca8f32aab83880c54ad7d33e28e8c (commit) via fc29357a5b390a9eed10111cdc8c5f21ff07c163 (commit) via 0ace139f353dbc3e773289621a3aa52f253b790e (commit) via 87f6f204131f66da63c5ce5936a171039fe0ae13 (commit) via 44d09c2c2cd0f330083fd3a5b0db6e16b76665f5 (commit) via b6ea1f0734808036518f6bfeb8e6424039f68bcd (commit) via 4b65a7cec1bd9bc8b8b80cddac1bccd7e64677ce (commit) via e7bcaf5c4e7078dfd89dbef3aa768797793102b7 (commit) via b47af7fe2488a88b406288d5b9c269587cf81af8 (commit) via 0b626e098cf6fc87f42129ce649fa9d0ab2297eb (commit) via 28e9ad635e0a0be0d35b14ee54166c4dbc4b85c6 (commit) via 8a67d9892e8044c196194befa539c22d09b4f709 (commit) via 073952f16ad48aa5ccd73e0f217659f76abc5a4d (commit) via 8f52e363292369c369fe5bee28c82f5f00f57eb6 (commit) via 83336d0df9d10e3c254e44ad17c4267d6c735510 (commit) via 540aaa27990bcf56614da1f5ddc968211057ee60 (commit) via 97eb3fe4373856cd4443c97f70853a670ded1ed8 (commit) via 1ec371b4d930c2324b56d9207ccdbc4b70c98ad0 (commit) via 2ecfd1a00f0e91f029db96a69e9f3dbe3d8227c0 (commit) via 0e0a2f6e1f6cc329be886edf554ea04d5b346df9 (commit) via c20cba8e50d53132ed3fe8b758c78cdb0fa764df (commit) via d001c29b5ad023df54f97ce761866087794874f4 (commit) via 3d0fa27e313f03ea965d376230f452e3e8f151b8 (commit) via 31d4279373ae325fa078a66d19dae5f67a9d0695 (commit) via 95d2f00b22905a75fde5935e6e428b7fc64e1591 (commit) via ad8851d6725a697d141d70c5650199ef46d0ad93 (commit) via 333f0b86f6480d1742189e0ae6083d59b999ce99 (commit) via e41ff878b6e6f3d31d549ddb156a5cf34f62d48c (commit) via 744aa99d25a97aaae4499521f27321f5bb0680b9 (commit) via 3be08a35e2f2161ed19e4a36ba77800a44286625 (commit) via e45a4b9417fba1d62ee5541e854941e9de2ade2c (commit) via 0047979b69807cf489158bb3a7f8f9f4841637cb (commit) via efb0ed0179950a0c6a14d40097405f29fcaa2c23 (commit) via 9a64badfc2aac8730cbd8da8453f76ffba7f1b46 (commit) via faa82f2a861e079dd5379cb31206d6f55b8385ca (commit) via e8b95a816b8bc1236ccbcab082d82dc2d37004f7 (commit) via a6d797b6aa82bcc1557cd418c6e38455d2562976 (commit) via ec0ccb5d20fb759a240e31431baa289b4325927d (commit) via f7933840a019e5c7078917f3e4b4e0e1e49b7434 (commit) via ae577d57e6f43f47ebfef874f6a751ec94d76548 (commit) via b8491127f1bb8b09d85f1f28e4d77bba07d927c0 (commit) via 18df34e33c58af0e0ce4700a61a6b548a2a581c5 (commit) via de10aaf2396d4bfa031bd6ec5d37138ae1393fda (commit) via 77a550918cfe6a5cc50c4ccd6111921578ae442f (commit) via 39e1c364a5acae5309ac2efc61111b8dbc66698a (commit) via 31350d643ca70ba74f640743f00a7051f64331cc (commit) via d62c8f73ce54fbee25502baac0c5b0e94a561568 (commit) via 67185e0b74df971e438dd002339f62b1cd247b4f (commit) via 2ec2ed247c1359da3c99141116f9ba3c0bebde5f (commit) via 6b7fdff459eb9105c0426db9434f08b17970ea1a (commit) via 3407db09bbb3495d606d06ae3aec666076364c60 (commit) via 0c50f6bff0a238e4bc5ceac61cd431f4875443aa (commit) via 8ac2ecbb475ed70b5a48347dca7bf75f78e7c770 (commit) via 498a10c6320ced07a699186312c49d322552ffb2 (commit) via 07024e3199a0650e72a14b8ba54fed00a1ca6180 (commit) via 7496c0e52ee77097e11e4ac673379dc820b9fa58 (commit) via f6b673fb8ff05580f1f7e94d66db3b8806fb9151 (commit) via 1225498adbebfba163d05322fb042c0485fcfe10 (commit) via 42898d963a61cbf300415e0c8208559108a1a8f6 (commit) via 3e67d9c3028cbb4e45998c923460a2a1451b4dbf (commit) via d21ad790ce6ac071a1bafd33cc29ff68303bb891 (commit) via be9fd23e6d4349347d9be48bbf42c008298a4f1f (commit) via 0e6b7de5f74114b1deec98848238b695d81effaa (commit) via f1856d6b09a5bb7aaf3f999ef50ca125eb4238af (commit) via e0ea627e7c4d237586894bbf7574ed80d7f875ed (commit) via ffee3892a3f4f790e483cd3f03c76ce030237323 (commit) via c5a6a425e83bc774328bcc3dff5a35a64134e599 (commit) via 49127831eb8ae2a16860af1fcb39abce68d495b4 (commit) via 0eea70fcff9531743f70e96f64109217e761f4c4 (commit) via e1fe1f215daab00bee994dffeffd07d32324613d (commit) via e7008f027d2a2b13fc9e0038ae0e3ea0f3468087 (commit) via f8ca8fc615f9702ea579d34291a88f5afa579f3d (commit) via 4eb585ab06b3765dc2f8a2d5491158dfe33249f0 (commit) via 6b1593bccbdaf74797f4a3663059468fdd0e76fb (commit) via e05b86fc123d6633158ec17b29487c308b9cb21b (commit) via b626d72d4f6ab7e3f92e41d06dc113d4fdd07771 (commit) via c1129f750bd9c16b7cc08cc3ef820e01d95bc16d (commit) via fa3b6819c4614e11823ca21ead621246c92f56ab (commit) via fef341532aac890b6af15b044a308c998ed29fd7 (commit) via 6dcf4a8da0156c921576f15a2efd2f6f475b5db4 (commit) via 9fbb092ecd1f910f6e8c3bf65bb70189448f742a (commit) via 453ccb2d641e1e862ec2c3f953cf2f1f538b90e2 (commit) via 01ab88f8d4b6d6215f5b126e4dc1600c55893ca3 (commit) via 9a28fb289b69fb9b1d06fc261447a1fc7901d738 (commit) via 2bd578f5146523105f4a4c9ae5b4e94651aa3ec1 (commit) via 7f31e41eae768cd518b2566ff4cb1ba9738ac730 (commit) via 69b9f661a6d679c8a3b5174ea671bfe687d144df (commit) via 7f32ebccf86dcb4f457282ed3411f2d45e1c09a2 (commit) via 7bd9768fb434f1714ae3d38ddf6ba1a4e6ca36c1 (commit) via 78a6fb259adc0856f26ad30a3bbca2768001d2a7 (commit) via 89e093dc684e53ef8d3c4e0056244b111b5a907a (commit) via 9163e328fc0faefcc4c2dfa1d24ca6b173335296 (commit) via 9f4a9b82398530bab80cb324a1098ab5d6f288ad (commit) via 2352b3e8d738da156dca58942f27b859df945790 (commit) via 5f53638a92006d2210bb9821f29ea0260a73b309 (commit) via 0761735ae107f150de3ed4db8505d0da2f8af008 (commit) via 5801e630cdcfeb6c912652858945e7218911887f (commit) via da99a8f6c719e362a5da884b9f4c001cd1595c56 (commit) via 14e7c2125b3dd62dcb47380f57d48104b0b77b8b (commit) via 9778d01219ccbca69172a66448daa58aba63db82 (commit) via 5e39a3473b33223628bbeed8d11ee456c6c77787 (commit) via 5a69887c33467594a295ed482fbeb246e37b7f81 (commit) via a4b4a10694392c52a25714367245a5f886204504 (commit) via c92c580c0f3c8f3bdaf3c03b7a04d748bf18c79e (commit) via 26022c9b229e31bd55540028a62662f890c78c25 (commit) via 391cb244cbd4e75a569b41e96d72cc35e56da44c (commit) via 3c0edd4744ff201051be7c119208c8a20e8dc9ef (commit) via 6b14ef4fcd65c518104d76516cb9e387c6a450fb (commit) via e713c0e531b57c55ad647bc5a9eb0ca7e96cd611 (commit) via 0dea4136e8df29fd072dd0db9a2859ca04cb6214 (commit) via d2e5a6ce49a2e48f24b12146c2ac2a604704e477 (commit) via 9e41f167a8f44b74af6a1e1ffe00dc6d305ac8a4 (commit) via ac1789bfe9ceb6bbe04b6455f996680a20441813 (commit) via f3ba6cde38ff13fef9140462a9773c51f17bbfb1 (commit) via f0af7fba275f6dd18274416fb2c5443b1f0b02f0 (commit) via 494e0822ac8a5e09bb051586130419b48e43f5c2 (commit) via 8ce796fefb7b2c08b8798e5afcf453e670ef0f02 (commit) via 6c633ac8c3df9c437223fd067bc1fb73c10e5914 (commit) via 380aca44b7f0d836a53c7127774c58557e50f797 (commit) via b747f1190338b93631fddd826ea48b31df6f3ce7 (commit) via c6d144981539e98fb57d074555a5fc0ef8592a49 (commit) via 1ce215ee93c320273a0e61c77675c4298cd04c99 (commit) via df701a032847bbce7f58713c237a0c3001d774a5 (commit) via 3d15173910838683b24a0c26ded856a11f0e7695 (commit) via d64ef4d1ff60c9863d91ee4f339d7ce09dc05702 (commit) via dc71eff43913bede7ba55fabe9a74841d683f2df (commit) via 4beb4e0cfac769e96f3f7aab277f7064be5d1423 (commit) via 27fd1ca18269407ecdc9216295d7dffb865171b1 (commit) via f1ceb2cd70c308478b43745f45eb9cbc21e737e8 (commit) via e856aa58da68ed6c76f6abed54772947b602f62e (commit) via b580725696bd2ce2cca2279e336160a2887dcb9e (commit) via 7f499d3c034b686834c979add2b99903a0a4d6de (commit) via 6f454ea25c56ed37963fdaf7ac3a1ff1e4ec8097 (commit) via 654890f132ce220e661d100c6297c9469e4f96e9 (commit) via 9ae10a5e9d8867532af4ab3e87af21874ed6bbb3 (commit) via 83569ad1ccccf7b584c7288fc02493ab425cf579 (commit) via 5c0a2b6d0893e09908a8695cc09964f88f4b47f9 (commit) via afc919408d5990745e5ea373c8394f8df36a83e8 (commit) via 97a22cbc86d87b9ec113113386a29604bdcb812b (commit) via 4b0d5c6b497095f48ec003b47930b08b0382c5ff (commit) via c9300cdeb0a8c8d7a5da8c5659712f5d97a720c3 (commit) via 28481d628f701a7deb5190c27002862502ab6552 (commit) via ec69a55d90c72d1be4d3cdadfec07318049cbbb2 (commit) via 22f5abee037fc3fffc73de83e839550325f99d8c (commit) via 39afd3d75951f07ed8221904fa17885a72e14b5a (commit) via e7db08bea0dec50bf5b6e4ac73876383429466d2 (commit) via 0ddf8e9ba1abe37454316b044132ff3293548d54 (commit) via fc10967f00ebc024b99d25748c9ea55d543932d7 (commit) via 1a48d8bbd088f10dd8c24c58da9e9f15b09c5ced (commit) via 5c62d247304a434055bd7188755761f906d9cf2f (commit) via 38c9e41e4f1aa5ec08e8540c3f8836ec213b7212 (commit) via eab92ec6d03da61e9e1a4eedac667138600cd1f0 (commit) via dd71ca594c816edec8035447c0363d7a27ffde36 (commit) via 2eb86c4d0b62b05736a964c9c8de847463d3445d (commit) via 476869544712df7b670742a81636727ab66e0713 (commit) via 99a299c77d83587f94d8a19e99f28be1b9f85948 (commit) via cbaed9cf6c9aae8a686f5b45b0560c18eb7f6e7b (commit) via 429f4df06bd6f209cf11172f5de7f68d6b6a1a3c (commit) via cfc6686e6d8d9084fb8acaa48fc600b4daa8d230 (commit) via 7d6f4e4553429c2de41162584a5eec53a4c89152 (commit) via f4d5c66960a26540f200bd10cb040957ecf69895 (commit) via f6fd452fe30759e56ed46c5c55f7689f9d24e30c (commit) via 8a0e1c9dc208676531f26286b80ebf5d88ec2d45 (commit) via 3f95efc9211f10b57fb84f86bd0bc4beb4c39ac1 (commit) via 93b117e02892951b4ca4ab6c710daebd53d2daf5 (commit) via 08dd964cc31de0041a27bd4e2b633692545d7e1d (commit) via 644cd961e029b776cb0443ae9885c46db12c8880 (commit) via 136857821a5ff2e226e51383b618c4f4d7ded8da (commit) via 6e48d461a82c8d067d660b2e3e780311edca7282 (commit) via 3d6f543190c50b19c09c9825e366037525294cf3 (commit) via 58cff2094ff87c7bdc0a39cc1e7a2b41c3e37e83 (commit) via 2b8d4f9692d1ab27a7af9a73385d12cfb624f715 (commit) via 7b3420221fe1698634e7a3a0812231f68a29d0e9 (commit) via 77fe665bc8b6ce8f691db81bf3dc307add1f1186 (commit) via 592ba62b590a02ad16de95902b507dca8129f17e (commit) via def4031946de987d3660c4d9eb7e010f2c556d39 (commit) via cbeaf9a7664bfe1b66d847e092996ebd0ebf163a (commit) via 342c266124574578f8960a64e0bd65cb0fb8d4fd (commit) via d7f53e7b179c8b0e8b94a019d855d0234897d232 (commit) via 5dbfcf169d25957810a9cb5a6a9f099083ed1e2e (commit) via 131c8350cd9b465f03b5ef139db1a17141cfc222 (commit) via 27969ed8bc5eef0ec2feeefba94661dcde73cd6a (commit) via ce880154b7769a8bf02dd8cbcc7780683c35b8bc (commit) via ccb0c978dcefc86715c9b3107a5cbfec07978308 (commit) via 42cc5a3adea81cfce89273497434a69503c70987 (commit) via 28c09aba790554e4beef47273511f42b2dc95d3f (commit) via e4de29068b9de6ae8f2ad501f92c578ad562503a (commit) via bac9ef1da4f556f8716934aac292db25ebe4fa1a (commit) via f39a1fdd1eee956f33311fbf8cde4126bb3381b6 (commit) via 9bde6797da6932fb99e12ffc325ca499732557ea (commit) via 3c7b18027e1cc0fb524536ebe997345e64b77787 (commit) via 63f6fc085a38ac1fd8824272234a1f7666e8a82a (commit) via a4409d24b2f1ba2349bd6e5e5a562288e354818f (commit) via 0387e8fdb8edb15e0bdaca90cb2558081f268509 (commit) via db413f1840fbd7a0068b0895d985f444cb0b5fa5 (commit) via c4a38fa471909a42cd323e84dc4db85c8f3e643d (commit) via 9717acc46571aa002ab780933777d2c968be9458 (commit) via 810b9cef134db6149e5f3d6b62dd99549224dee0 (commit) via 54a941d32cdc121582bb5f06af6b52ba9fd3e047 (commit) via 6c4b22c1c268b468dbe9016e4ca6664a4972c345 (commit) via 64cab9759444b3bc070c163d68258045589eba67 (commit) via b000aca4fe35485770a5862eaee9ca4344d8a6f6 (commit) via 9450d67bb137ba9c9e23ef5c64714ee03d3190fe (commit) via 0de5d31de388410587c72a7db1fa3bc15e27c484 (commit) via 1c8a3d18c406aebcb8ba5e70f34d9f8ef20589a4 (commit) via 31fa47948342d7382563ec6ae2ba59cf120ede53 (commit) via 9a29c9544c19061a7c6d0bcf1716e9c25d65b2fd (commit) via 0bb5f377e380fce106c0715f3299938c7933a50b (commit) via 06ec9ee467a1ed19fe82ad09671f1098c666a5c5 (commit) via b1c0da7b0491b7b78e2312a361c0169ff62fc1af (commit) via ead5ee0a9de38f35a9e0245b2c565df037de5700 (commit) via a2229f4160d10ce1e232ed65da3158f72b04b2a1 (commit) via bee3aa08a5808691439e42fac8136f6eb16f6f79 (commit) via 8ba4a34b9614ea7c75d64d1782e1d04703abfe8b (commit) via b65a3f78ccb717377a72f7d39c3bd627bf798f7d (commit) via a46bfdeb08e00b9bfbcf69b43dcdc77d6d797f0b (commit) via 4d3b55f5ca355425ab7bdde6eb52868716df329b (commit) via e573bc9ec22a7253f5d79e1d3ac061c6122e8f5d (commit) via baffb3822d193e798fef436cf241912d1738f505 (commit) via ab956936015804564f1b83db257a62e69c107d64 (commit) via cbd0f513c66e69e5d7c8669e4aa823c082a3a40c (commit) via 28f444498e5f54a79d4d1b4f7e6094b23f185331 (commit) via 011dff3f449af99b31f7e56cdde332bfba189f8a (commit) via 66cd0d3c0d4f0aad4ba2c7640d976f22a7ca5f66 (commit) via 5312f8620f92a1daf0ad06ba5886d13194586ad3 (commit) via bca6c60f2644e3b52e718246ac1840f45e247b2e (commit) via bb7e919bab7770a714908ef7fc53ef539f456ffe (commit) via 79b6b651ed69e802ea7daf51708ec9b8b2899e61 (commit) via 0116343f423f0fd5e83b1b14de7514d7faf124f1 (commit) via 0c9164ee5fa8bb52943e766378e708f870c476ea (commit) via 6b100a64246c8519e5b0af44047bd344e286c1d9 (commit) via e3a79fca57acbe2c3609d168a2edab1ede4401eb (commit) via ffd49d004ed74563b1bc6d96faadf94bdcf65428 (commit) via 6d0f99cbcd2e7d1f34848ff0697e483bd4f2b76c (commit) via 262683f39f22e2d77024f5d8b76555ba6ec76b79 (commit) via 6ac327a9f259ae4fafbe126610dc552f9dd52273 (commit) via c8572d902761f000ef08044a74cc70fba5993b7a (commit) via a17f0df2a50f1c2638ae066d84613b9b1c09c403 (commit) via c88d0c1b05a10e433c49917a94b08267cb451231 (commit) via d3c24e7cf1f6b4767950552f3e34dac712aad6a9 (commit) via 96fe76291f8fb543bf0b2c6263cd4a1b5657d83f (commit) via 3f9cbe14e4bcdaa23de8b202284dac71691b1aa0 (commit) via 5e11da01db2f0a80e668c0edde2dba11f8975451 (commit) via d8cda5cdeab779c145d286a76bd0c6cbef339686 (commit) via 4c168e94772864d5d500848955c865644d94d637 (commit) via 2c9c2a442af9098d70c973fe5ec76af4e46cb7fd (commit) via d99aaccd02b96110c8b7ab8135a30895ff4e2af2 (commit) via a5218c24f4621f18c13672e097d7b6dac4a0ba7f (commit) via 52eedfc75acf5369da7967fa8b1f43fdd0bbf170 (commit) via 513b61c5907db7ec82228b6de06b8a87bf770951 (commit) via bc0ca10af5866636472e3ad4e7b0823865cd5fe7 (commit) via 49cf6e3cd0b1b17df40f4bc4f9191d2928afbff1 (commit) via 07cdc843d84e389e612a75dc066b5ddd4308d162 (commit) via cab3bea734c4c6adcfe8eea35fb5b45b1760001d (commit) via 3aac5d5bad989f5d82975b5b1eadddfb9fadce5a (commit) via 5e1bd0c88398a8987e88ab238e3d2c68f629546c (commit) via f6baea1367f0acc27d746925aa106d9019fe9f48 (commit) via 7dbe941b31ef3d34edd79aba31326d3e407aaf17 (commit) via c5ec1fabfa22280264d81f120555eb45518948cb (commit) via ea08c3acacc9ab86445c2c15d4dc6f70f0372db5 (commit) via d1aa6b899ff91773690bcdcdb80568c503506432 (commit) via 8c47a43798b0ef1d0287f7095ae5b0c2f1baafed (commit) via 046dea4d68914491627b4bffad6b7e6e7da95225 (commit) via 0c700c3bacae424c433f98a79e6f1d7d794ce00e (commit) via 031c955d60683380eb1523551e273f551f84ce4b (commit) via cffdde07497931448ce8a4e03a19ad3116c81bd3 (commit) via 98f556f5045a5d3cf073e75af9f31a2dbeefbcaa (commit) via 9e73493250d59cb3c650acf4d458d3b9d6eb40b7 (commit) via 8073f6ac4752725614c6b2c8b76298e6f16b893d (commit) via 7d0090a443072ed354cc9e1cd81d16aacb26d64a (commit) from 273264b459d98140a3c1a217bcea2c7bd680c826 (commit)
Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below.
- Log ----------------------------------------------------------------- commit d5e5b8ab0540606206d63bfed98ac348fd387362 Merge: 273264b4 e9a0f5f0 Author: Maxim Uvarov maxim.uvarov@linaro.org Date: Thu Apr 5 17:32:07 2018 +0300
Merge branch 'dev/merge_18_0_1' of git://github.com/matiaselo/odp-dpdk
Reviewed-by: Josep Puigdemont josep.puigdemont@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
commit e9a0f5f06f670907d4b88143c7a423d5e7e64f3b Author: Matias Elo matias.elo@nokia.com Date: Wed Apr 4 11:23:33 2018 +0300
linux-dpdk: fix various style problems
Fix various checkpatch style warnings and errors.
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/packet.h b/platform/linux-dpdk/include-abi/odp/api/abi/packet.h index 6e46b875..3b273260 100644 --- a/platform/linux-dpdk/include-abi/odp/api/abi/packet.h +++ b/platform/linux-dpdk/include-abi/odp/api/abi/packet.h @@ -4,7 +4,6 @@ * SPDX-License-Identifier: BSD-3-Clause */
- /** * @file * diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h index 44fe53da..32d9733a 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h @@ -193,7 +193,8 @@ static inline uint32_t _odp_packet_flow_hash(odp_packet_t pkt) return _odp_pkt_get(pkt, uint32_t, rss); }
-static inline void _odp_packet_flow_hash_set(odp_packet_t pkt, uint32_t flow_hash) +static inline void _odp_packet_flow_hash_set(odp_packet_t pkt, + uint32_t flow_hash) { uint32_t *rss = &_odp_pkt_get(pkt, uint32_t, rss); uint64_t *ol_flags = &_odp_pkt_get(pkt, uint64_t, ol_flags); @@ -243,7 +244,8 @@ static inline odp_packet_seg_t _odp_packet_next_seg(odp_packet_t pkt, return (odp_packet_seg_t)(uintptr_t)mb->next; }
-static inline void _odp_packet_prefetch(odp_packet_t pkt, uint32_t offset, uint32_t len) +static inline void _odp_packet_prefetch(odp_packet_t pkt, uint32_t offset, + uint32_t len) { const char *addr = (char *)_odp_packet_data(pkt) + offset; size_t ofs; diff --git a/platform/linux-dpdk/include/odp_buffer_internal.h b/platform/linux-dpdk/include/odp_buffer_internal.h index 42697911..f96a80e9 100644 --- a/platform/linux-dpdk/include/odp_buffer_internal.h +++ b/platform/linux-dpdk/include/odp_buffer_internal.h @@ -4,7 +4,6 @@ * SPDX-License-Identifier: BSD-3-Clause */
- /** * @file * diff --git a/platform/linux-dpdk/include/odp_packet_internal.h b/platform/linux-dpdk/include/odp_packet_internal.h index 8607f0be..ccba63a0 100644 --- a/platform/linux-dpdk/include/odp_packet_internal.h +++ b/platform/linux-dpdk/include/odp_packet_internal.h @@ -4,7 +4,6 @@ * SPDX-License-Identifier: BSD-3-Clause */
- /** * @file * diff --git a/platform/linux-dpdk/include/odp_packet_io_internal.h b/platform/linux-dpdk/include/odp_packet_io_internal.h index 33ec8b81..963ea7ff 100644 --- a/platform/linux-dpdk/include/odp_packet_io_internal.h +++ b/platform/linux-dpdk/include/odp_packet_io_internal.h @@ -4,7 +4,6 @@ * SPDX-License-Identifier: BSD-3-Clause */
- /** * @file * diff --git a/platform/linux-dpdk/include/odp_pool_internal.h b/platform/linux-dpdk/include/odp_pool_internal.h index 9b859526..a94afd7f 100644 --- a/platform/linux-dpdk/include/odp_pool_internal.h +++ b/platform/linux-dpdk/include/odp_pool_internal.h @@ -4,7 +4,6 @@ * SPDX-License-Identifier: BSD-3-Clause */
- /** * @file * @@ -41,7 +40,6 @@ extern "C" { /* Extra error checks */ /* #define POOL_ERROR_CHECK */
- #ifdef POOL_USE_TICKETLOCK #include <odp/api/ticketlock.h> #else @@ -52,7 +50,7 @@ typedef struct ODP_ALIGNED_CACHE { #ifdef POOL_USE_TICKETLOCK odp_ticketlock_t ODP_ALIGNED_CACHE lock; #else - odp_spinlock_t ODP_ALIGNED_CACHE lock ; + odp_spinlock_t ODP_ALIGNED_CACHE lock; #endif char name[ODP_POOL_NAME_LEN]; odp_pool_param_t params; diff --git a/platform/linux-dpdk/odp_buffer.c b/platform/linux-dpdk/odp_buffer.c index 6e19c74e..59ea26f7 100644 --- a/platform/linux-dpdk/odp_buffer.c +++ b/platform/linux-dpdk/odp_buffer.c @@ -73,21 +73,21 @@ int odp_buffer_snprint(char *str, uint32_t n, odp_buffer_t buf) hdr = buf_hdl_to_hdr(buf); pool = hdr->pool_ptr;
- len += snprintf(&str[len], n-len, + len += snprintf(&str[len], n - len, "Buffer\n"); - len += snprintf(&str[len], n-len, + len += snprintf(&str[len], n - len, " pool %" PRIu64 "\n", odp_pool_to_u64(pool->pool_hdl)); - len += snprintf(&str[len], n-len, + len += snprintf(&str[len], n - len, " phy_addr %"PRIu64"\n", hdr->mb.buf_physaddr); - len += snprintf(&str[len], n-len, + len += snprintf(&str[len], n - len, " addr %p\n", hdr->mb.buf_addr); - len += snprintf(&str[len], n-len, + len += snprintf(&str[len], n - len, " size %u\n", hdr->mb.buf_len); - len += snprintf(&str[len], n-len, + len += snprintf(&str[len], n - len, " ref_count %i\n", rte_mbuf_refcnt_read(&hdr->mb)); - len += snprintf(&str[len], n-len, + len += snprintf(&str[len], n - len, " odp type %i\n", hdr->type);
return len; @@ -99,7 +99,7 @@ void odp_buffer_print(odp_buffer_t buf) char str[max_len]; int len;
- len = odp_buffer_snprint(str, max_len-1, buf); + len = odp_buffer_snprint(str, max_len - 1, buf); str[len] = 0;
ODP_PRINT("\n%s\n", str); diff --git a/platform/linux-dpdk/odp_init.c b/platform/linux-dpdk/odp_init.c index 562e0c26..7a51ff23 100644 --- a/platform/linux-dpdk/odp_init.c +++ b/platform/linux-dpdk/odp_init.c @@ -26,12 +26,12 @@ #include <sys/types.h> #include <pwd.h>
-#define MEMPOOL_OPS(hdl) extern void mp_hdlr_init_##hdl(void); -MEMPOOL_OPS(ops_mp_mc) -MEMPOOL_OPS(ops_sp_sc) -MEMPOOL_OPS(ops_mp_sc) -MEMPOOL_OPS(ops_sp_mc) -MEMPOOL_OPS(ops_stack) +#define MEMPOOL_OPS(hdl) extern void mp_hdlr_init_##hdl(void) +MEMPOOL_OPS(ops_mp_mc); +MEMPOOL_OPS(ops_sp_sc); +MEMPOOL_OPS(ops_mp_sc); +MEMPOOL_OPS(ops_sp_mc); +MEMPOOL_OPS(ops_stack);
#ifndef RTE_BUILD_SHARED_LIB /* @@ -40,7 +40,8 @@ MEMPOOL_OPS(ops_stack) * constructors of mempool handlers are linked as well. Otherwise the linker * would omit them. It's not an issue with dynamic linking. */ void refer_constructors(void); -void refer_constructors(void) { +void refer_constructors(void) +{ mp_hdlr_init_ops_mp_mc(); mp_hdlr_init_ops_sp_sc(); mp_hdlr_init_ops_mp_sc(); @@ -66,7 +67,6 @@ static void print_dpdk_env_help(void) rte_eal_init(dpdk_argc, dpdk_argv); }
- static int odp_init_dpdk(const char *cmdline) { char **dpdk_argv; @@ -116,9 +116,8 @@ static int odp_init_dpdk(const char *cmdline) cmdlen = sprintf(full_cmdline, "odpdpdk -c %s %s", mask_str, cmdline);
for (i = 0, dpdk_argc = 1; i < cmdlen; ++i) { - if (isspace(full_cmdline[i])) { + if (isspace(full_cmdline[i])) ++dpdk_argc; - } } dpdk_argv = malloc(dpdk_argc * sizeof(char *));
@@ -159,10 +158,11 @@ int odp_init_global(odp_instance_t *instance, const odp_init_t *params, const odp_platform_init_t *platform_params) { + enum init_stage stage = NO_INIT; + memset(&odp_global_data, 0, sizeof(struct odp_global_data_s)); odp_global_data.main_pid = getpid();
- enum init_stage stage = NO_INIT; odp_global_data.log_fn = odp_override_log; odp_global_data.abort_fn = odp_override_abort;
diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index 86c0314d..e0d565dc 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -257,6 +257,7 @@ uint32_t odp_packet_buf_len(odp_packet_t pkt) void *odp_packet_tail(odp_packet_t pkt) { struct rte_mbuf *mb = &(packet_hdr(pkt)->buf_hdr.mb); + mb = rte_pktmbuf_lastseg(mb); return (void *)(rte_pktmbuf_mtod(mb, char *) + mb->data_len); } @@ -264,6 +265,7 @@ void *odp_packet_tail(odp_packet_t pkt) void *odp_packet_push_head(odp_packet_t pkt, uint32_t len) { struct rte_mbuf *mb = &(packet_hdr(pkt)->buf_hdr.mb); + return (void *)rte_pktmbuf_prepend(mb, len); }
@@ -348,6 +350,7 @@ int odp_packet_extend_head(odp_packet_t *pkt, uint32_t len, void **data_ptr, void *odp_packet_pull_head(odp_packet_t pkt, uint32_t len) { struct rte_mbuf *mb = &(packet_hdr(pkt)->buf_hdr.mb); + return (void *)rte_pktmbuf_adj(mb, len); }
diff --git a/platform/linux-dpdk/odp_packet_dpdk.c b/platform/linux-dpdk/odp_packet_dpdk.c index 177251da..1c85577f 100644 --- a/platform/linux-dpdk/odp_packet_dpdk.c +++ b/platform/linux-dpdk/odp_packet_dpdk.c @@ -459,7 +459,8 @@ static int start_pkt_dpdk(pktio_entry_t *pktio_entry) .mq_mode = ETH_MQ_RX_RSS, .split_hdr_size = 0, .header_split = 0, /**< Header Split */ - .hw_ip_checksum = hw_ip_checksum, /**< IP checksum offload */ + /* IP checksum offload */ + .hw_ip_checksum = hw_ip_checksum, .hw_vlan_filter = 0, /**< VLAN filtering */ .jumbo_frame = 1, /**< Jumbo Frame Support */ .hw_strip_crc = 0, /**< CRC stripp by hardware */ diff --git a/platform/linux-dpdk/odp_pool.c b/platform/linux-dpdk/odp_pool.c index 364096e0..463d7aed 100644 --- a/platform/linux-dpdk/odp_pool.c +++ b/platform/linux-dpdk/odp_pool.c @@ -171,8 +171,8 @@ odp_dpdk_mbuf_pool_ctor(struct rte_mempool *mp,
if (mp->private_data_size < sizeof(struct mbuf_pool_ctor_arg)) { ODP_ERR("(%s) private_data_size %d < %d", - mp->name, (int) mp->private_data_size, - (int) sizeof(struct mbuf_pool_ctor_arg)); + mp->name, (int)mp->private_data_size, + (int)sizeof(struct mbuf_pool_ctor_arg)); return; } mbp_priv = rte_mempool_get_priv(mp); @@ -340,7 +340,7 @@ odp_pool_t odp_pool_create(const char *name, odp_pool_param_t *params) pool_name[ODP_POOL_NAME_LEN - 1] = 0; }
- /* Find an unused buffer pool slot and initalize it as requested */ + /* Find an unused buffer pool slot and initialize it as requested */ for (i = 0; i < ODP_CONFIG_POOLS; i++) { uint32_t num; struct rte_mempool *mp; @@ -439,7 +439,6 @@ odp_pool_t odp_pool_create(const char *name, odp_pool_param_t *params) params->type); UNLOCK(&pool->lock); return ODP_POOL_INVALID; - break; }
mb_ctor_arg.seg_buf_offset = @@ -463,7 +462,7 @@ odp_pool_t odp_pool_create(const char *name, odp_pool_param_t *params) break; } if (odp_unlikely(cache_size > RTE_MEMPOOL_CACHE_MAX_SIZE || - (uint32_t) cache_size * 1.5 > num)) { + (uint32_t)cache_size * 1.5 > num)) { ODP_ERR("cache_size calc failure: %d\n", cache_size); cache_size = 0; } @@ -521,7 +520,6 @@ odp_pool_t odp_pool_create(const char *name, odp_pool_param_t *params) return pool_hdl; }
- odp_pool_t odp_pool_lookup(const char *name) { struct rte_mempool *mp = NULL; @@ -546,7 +544,6 @@ odp_pool_t odp_pool_lookup(const char *name) return pool_hdl; }
- static inline int buffer_alloc_multi(pool_t *pool, odp_buffer_hdr_t *buf_hdr[], int num) { @@ -672,4 +669,3 @@ uint64_t odp_pool_to_u64(odp_pool_t hdl) { return _odp_pri(hdl); } - diff --git a/platform/linux-dpdk/odp_time.c b/platform/linux-dpdk/odp_time.c index 3107d24b..3cbb771d 100644 --- a/platform/linux-dpdk/odp_time.c +++ b/platform/linux-dpdk/odp_time.c @@ -373,9 +373,9 @@ int odp_time_init_global(void) global.use_hw = 1; global.hw_start = rte_get_timer_cycles(); if (global.hw_start == 0) - return -1; - else - return 0; + return -1; + else + return 0; }
global.handler.time_cur = time_cur;
commit 4a13b03a2236bc318fc9e7527ed92fbb7da8c3d7 Author: Matias Elo matias.elo@nokia.com Date: Wed Apr 4 10:59:29 2018 +0300
linux-dpdk: pool: optimize buffer alloc functions
Optimize odp_buffer_alloc() and odp_buffer_alloc_multi() implementations.
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/odp_pool.c b/platform/linux-dpdk/odp_pool.c index 36e3f0d4..364096e0 100644 --- a/platform/linux-dpdk/odp_pool.c +++ b/platform/linux-dpdk/odp_pool.c @@ -547,51 +547,54 @@ odp_pool_t odp_pool_lookup(const char *name) }
-static odp_buffer_t buffer_alloc(pool_t *pool) +static inline int buffer_alloc_multi(pool_t *pool, odp_buffer_hdr_t *buf_hdr[], + int num) { - odp_buffer_hdr_t *buf_hdr; - struct rte_mbuf *mbuf; + int i; + struct rte_mempool *mp = pool->rte_mempool;
- if (odp_unlikely(pool->params.type != ODP_POOL_BUFFER && - pool->params.type != ODP_POOL_TIMEOUT)) { - rte_errno = EINVAL; - return ODP_BUFFER_INVALID; - } + ODP_ASSERT(pool->params.type == ODP_POOL_BUFFER || + pool->params.type == ODP_POOL_TIMEOUT);
- mbuf = rte_ctrlmbuf_alloc(pool->rte_mempool); - if (odp_unlikely(mbuf == NULL)) { - rte_errno = ENOMEM; - return ODP_BUFFER_INVALID; - } + for (i = 0; i < num; i++) { + struct rte_mbuf *mbuf;
- buf_hdr = mbuf_to_buf_hdr(mbuf); + mbuf = rte_ctrlmbuf_alloc(mp); + if (odp_unlikely(mbuf == NULL)) + return i;
- return buf_from_buf_hdr(buf_hdr); + buf_hdr[i] = mbuf_to_buf_hdr(mbuf); + } + + return i; }
odp_buffer_t odp_buffer_alloc(odp_pool_t pool_hdl) { + odp_buffer_t buf; + pool_t *pool; + int ret; + ODP_ASSERT(ODP_POOL_INVALID != pool_hdl);
- pool_t *pool = pool_entry_from_hdl(pool_hdl); + pool = pool_entry_from_hdl(pool_hdl); + ret = buffer_alloc_multi(pool, (odp_buffer_hdr_t **)&buf, 1); + + if (odp_likely(ret == 1)) + return buf;
- return buffer_alloc(pool); + return ODP_BUFFER_INVALID; }
int odp_buffer_alloc_multi(odp_pool_t pool_hdl, odp_buffer_t buf[], int num) { - int i; + pool_t *pool;
ODP_ASSERT(ODP_POOL_INVALID != pool_hdl);
- pool_t *pool = pool_entry_from_hdl(pool_hdl); + pool = pool_entry_from_hdl(pool_hdl);
- for (i = 0; i < num; i++) { - buf[i] = buffer_alloc(pool); - if (buf[i] == ODP_BUFFER_INVALID) - return rte_errno == ENOMEM ? i : -EINVAL; - } - return i; + return buffer_alloc_multi(pool, (odp_buffer_hdr_t **)buf, num); }
void odp_buffer_free(odp_buffer_t buf)
commit 30cb4646306650b581cd01027fe5ff8f207fd5fe Author: Matias Elo matias.elo@nokia.com Date: Mon Mar 26 17:18:18 2018 +0300
linux-dpdk: pktio: remove unnecessary tx mtu check
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/odp_packet_dpdk.c b/platform/linux-dpdk/odp_packet_dpdk.c index a0a0a852..177251da 100644 --- a/platform/linux-dpdk/odp_packet_dpdk.c +++ b/platform/linux-dpdk/odp_packet_dpdk.c @@ -900,23 +900,17 @@ static int send_pkt_dpdk(pktio_entry_t *pktio_entry, int index, odp_pktout_config_opt_t *pktout_capa = &pktio_entry->s.capa.config.pktout; int pkts; - int i; - uint32_t mtu = pkt_dpdk->mtu; - uint16_t num_tx = 0;
- for (i = 0; i < num; i++) { - struct rte_mbuf *mbuf = pkt_to_mbuf(pkt_table[i]); + if (chksum_insert_ena) { + int i;
- if (odp_unlikely(mbuf->pkt_len > mtu)) - break; + for (i = 0; i < num; i++) { + struct rte_mbuf *mbuf = pkt_to_mbuf(pkt_table[i]);
- mbuf->ol_flags = 0; - if (chksum_insert_ena) pkt_set_ol_tx(pktout_cfg, pktout_capa, packet_hdr(pkt_table[i]), mbuf, rte_pktmbuf_mtod(mbuf, char *)); - - num_tx++; + } }
if (!pkt_dpdk->lockless_tx) @@ -925,7 +919,7 @@ static int send_pkt_dpdk(pktio_entry_t *pktio_entry, int index, #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wcast-qual" pkts = rte_eth_tx_burst(pkt_dpdk->port_id, index, - (struct rte_mbuf **)pkt_table, num_tx); + (struct rte_mbuf **)pkt_table, num); #pragma GCC diagnostic pop
if (!pkt_dpdk->lockless_tx) @@ -937,7 +931,7 @@ static int send_pkt_dpdk(pktio_entry_t *pktio_entry, int index, if (odp_unlikely(rte_errno != 0)) return -1;
- if (odp_unlikely(mbuf->pkt_len > mtu)) { + if (odp_unlikely(mbuf->pkt_len > pkt_dpdk->mtu)) { __odp_errno = EMSGSIZE; return -1; }
commit 79da79bf9d7b371c78c8a9a378f1486090eccf4b Author: Matias Elo matias.elo@nokia.com Date: Wed Apr 4 13:29:56 2018 +0300
Port 9a1d48b "odp_dpdk.m4: use correct installation directory"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/README b/platform/linux-dpdk/README index c75d94a3..71cced16 100644 --- a/platform/linux-dpdk/README +++ b/platform/linux-dpdk/README @@ -89,10 +89,10 @@ path with the --with-dpdk-path option.
The following step depends on whether ODP shared libraries are to be built. SHARED libraries (requires building DPDK with -fPIC, see above): - ./configure --with-dpdk-path=<dpdk-dir>/x86_64-native-linuxapp-gcc + ./configure --with-dpdk-path=<dpdk-dir>/install
STATIC libraries (better performance): - ./configure --with-dpdk-path=<dpdk-dir>/x86_64-native-linuxapp-gcc --disable-shared + ./configure --with-dpdk-path=<dpdk-dir>/install --disable-shared
make
commit caee81bd285095020e8aa8287f7283305108d9fa Author: Matias Elo matias.elo@nokia.com Date: Mon Mar 26 15:55:10 2018 +0300
Port 42fc5eb "linux-gen: queue: enqueue may fail"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/include/odp_pool_internal.h b/platform/linux-dpdk/include/odp_pool_internal.h index e95e590a..9b859526 100644 --- a/platform/linux-dpdk/include/odp_pool_internal.h +++ b/platform/linux-dpdk/include/odp_pool_internal.h @@ -31,6 +31,8 @@ extern "C" { #include <string.h>
/* for DPDK */ +#include <rte_config.h> +#include <rte_mbuf.h> #include <rte_mempool.h>
/* Use ticketlock instead of spinlock */ @@ -76,6 +78,14 @@ static inline pool_t *pool_entry_from_hdl(odp_pool_t pool_hdl) return &pool_tbl->pool[_odp_typeval(pool_hdl)]; }
+static inline void buffer_free_multi(odp_buffer_hdr_t *buf_hdr[], int num) +{ + int i; + + for (i = 0; i < num; i++) + rte_ctrlmbuf_free((struct rte_mbuf *)(uintptr_t)buf_hdr[i]); +} + #ifdef __cplusplus } #endif diff --git a/platform/linux-dpdk/odp_pool.c b/platform/linux-dpdk/odp_pool.c index f0effa0d..36e3f0d4 100644 --- a/platform/linux-dpdk/odp_pool.c +++ b/platform/linux-dpdk/odp_pool.c @@ -601,10 +601,7 @@ void odp_buffer_free(odp_buffer_t buf)
void odp_buffer_free_multi(const odp_buffer_t buf[], int num) { - int i; - - for (i = 0; i < num; i++) - rte_ctrlmbuf_free(buf_to_mbuf(buf[i])); + buffer_free_multi((odp_buffer_hdr_t **)(uintptr_t)buf, num); }
void odp_pool_print(odp_pool_t pool_hdl)
commit ba336a668e2f6b8bbe594201fe679d710d25ecda Author: Matias Elo matias.elo@nokia.com Date: Mon Mar 26 15:03:19 2018 +0300
Port bb8015d "linux-gen: sched: optimize atomic packet input queue throughput"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/include/odp_buffer_inlines.h b/platform/linux-dpdk/include/odp_buffer_inlines.h index 84e9c9f1..421096a7 100644 --- a/platform/linux-dpdk/include/odp_buffer_inlines.h +++ b/platform/linux-dpdk/include/odp_buffer_inlines.h @@ -39,6 +39,11 @@ static inline void _odp_buffer_event_type_set(odp_buffer_t buf, int ev) buf_hdl_to_hdr(buf)->event_type = ev; }
+static inline odp_event_t event_from_buf_hdr(odp_buffer_hdr_t *hdr) +{ + return (odp_event_t)hdr; +} + #ifdef __cplusplus } #endif diff --git a/platform/linux-dpdk/odp_queue_basic.c b/platform/linux-dpdk/odp_queue_basic.c index 0b8a304b..5df48ecc 100644 --- a/platform/linux-dpdk/odp_queue_basic.c +++ b/platform/linux-dpdk/odp_queue_basic.c @@ -8,7 +8,6 @@
#include <odp/api/queue.h> #include <odp_queue_internal.h> -#include <odp_queue_lf.h> #include <odp_queue_if.h> #include <odp/api/std_types.h> #include <odp/api/align.h> @@ -40,15 +39,7 @@ static int queue_init(queue_entry_t *queue, const char *name, const odp_queue_param_t *param);
-typedef struct queue_global_t { - queue_entry_t queue[ODP_CONFIG_QUEUES]; - uint32_t queue_lf_num; - uint32_t queue_lf_size; - queue_lf_func_t queue_lf_func; - -} queue_global_t; - -static queue_global_t *queue_glb; +queue_global_t *queue_glb;
static inline queue_entry_t *get_qentry(uint32_t queue_id) {
commit b68ba75a0b89df577326f16c8f8dc48ddddd8091 Author: Matias Elo matias.elo@nokia.com Date: Mon Mar 26 14:51:12 2018 +0300
Port 3e61be5 "linux-gen: sched: optimize packet input polling"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/odp_queue_basic.c b/platform/linux-dpdk/odp_queue_basic.c index 7359a3bb..0b8a304b 100644 --- a/platform/linux-dpdk/odp_queue_basic.c +++ b/platform/linux-dpdk/odp_queue_basic.c @@ -304,6 +304,17 @@ void sched_cb_queue_destroy_finalize(uint32_t queue_index) UNLOCK(queue); }
+void sched_cb_queue_set_status(uint32_t queue_index, int status) +{ + queue_entry_t *queue = get_qentry(queue_index); + + LOCK(queue); + + queue->s.status = status; + + UNLOCK(queue); +} + static int queue_destroy(odp_queue_t handle) { queue_entry_t *queue; @@ -475,7 +486,7 @@ static int queue_enq(odp_queue_t handle, odp_event_t ev) }
static inline int deq_multi(queue_entry_t *queue, odp_buffer_hdr_t *buf_hdr[], - int num) + int num, int update_status) { int status_sync = sched_fn->status_sync; int num_deq; @@ -493,7 +504,7 @@ static inline int deq_multi(queue_entry_t *queue, odp_buffer_hdr_t *buf_hdr[],
if (num_deq == 0) { /* Already empty queue */ - if (queue->s.status == QUEUE_STATUS_SCHED) { + if (update_status && queue->s.status == QUEUE_STATUS_SCHED) { queue->s.status = QUEUE_STATUS_NOTSCHED;
if (status_sync) @@ -518,7 +529,7 @@ static int queue_int_deq_multi(queue_t q_int, odp_buffer_hdr_t *buf_hdr[], { queue_entry_t *queue = qentry_from_int(q_int);
- return deq_multi(queue, buf_hdr, num); + return deq_multi(queue, buf_hdr, num, 0); }
static odp_buffer_hdr_t *queue_int_deq(queue_t q_int) @@ -527,7 +538,7 @@ static odp_buffer_hdr_t *queue_int_deq(queue_t q_int) odp_buffer_hdr_t *buf_hdr = NULL; int ret;
- ret = deq_multi(queue, &buf_hdr, 1); + ret = deq_multi(queue, &buf_hdr, 1, 0);
if (ret == 1) return buf_hdr; @@ -637,11 +648,12 @@ static int queue_info(odp_queue_t handle, odp_queue_info_t *info) return 0; }
-int sched_cb_queue_deq_multi(uint32_t queue_index, odp_event_t ev[], int num) +int sched_cb_queue_deq_multi(uint32_t queue_index, odp_event_t ev[], int num, + int update_status) { queue_entry_t *qe = get_qentry(queue_index);
- return deq_multi(qe, (odp_buffer_hdr_t **)ev, num); + return deq_multi(qe, (odp_buffer_hdr_t **)ev, num, update_status); }
int sched_cb_queue_empty(uint32_t queue_index)
commit cc3419c062921d4b8238f89251731b99a9bfe0f3 Author: Matias Elo matias.elo@nokia.com Date: Mon Mar 26 14:44:47 2018 +0300
Port c0da876 "linux-gen: queue: improve debug print"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/odp_queue_basic.c b/platform/linux-dpdk/odp_queue_basic.c index b30d19cc..7359a3bb 100644 --- a/platform/linux-dpdk/odp_queue_basic.c +++ b/platform/linux-dpdk/odp_queue_basic.c @@ -62,14 +62,37 @@ static inline queue_entry_t *handle_to_qentry(odp_queue_t handle) return get_qentry(queue_id); }
+static int queue_capa(odp_queue_capability_t *capa, int sched) +{ + memset(capa, 0, sizeof(odp_queue_capability_t)); + + /* Reserve some queues for internal use */ + capa->max_queues = ODP_CONFIG_QUEUES - NUM_INTERNAL_QUEUES; + capa->plain.max_num = capa->max_queues; + capa->plain.max_size = CONFIG_QUEUE_SIZE - 1; + capa->plain.lockfree.max_num = queue_glb->queue_lf_num; + capa->plain.lockfree.max_size = queue_glb->queue_lf_size; + capa->sched.max_num = capa->max_queues; + capa->sched.max_size = CONFIG_QUEUE_SIZE - 1; + + if (sched) { + capa->max_ordered_locks = sched_fn->max_ordered_locks(); + capa->max_sched_groups = sched_fn->num_grps(); + capa->sched_prios = odp_schedule_num_prio(); + } + + return 0; +} + static int queue_init_global(void) { uint32_t i; odp_shm_t shm; uint32_t lf_size = 0; queue_lf_func_t *lf_func; + odp_queue_capability_t capa;
- ODP_DBG("Queue init ... "); + ODP_DBG("Starts...\n");
shm = odp_shm_reserve("odp_queues", sizeof(queue_global_t), @@ -95,13 +118,14 @@ static int queue_init_global(void) queue_glb->queue_lf_num = queue_lf_init_global(&lf_size, lf_func); queue_glb->queue_lf_size = lf_size;
- ODP_DBG("done\n"); - ODP_DBG("Queue init global\n"); - ODP_DBG(" struct queue_entry_s size %zu\n", - sizeof(struct queue_entry_s)); - ODP_DBG(" queue_entry_t size %zu\n", - sizeof(queue_entry_t)); - ODP_DBG("\n"); + queue_capa(&capa, 0); + + ODP_DBG("... done.\n"); + ODP_DBG(" queue_entry_t size %u\n", sizeof(queue_entry_t)); + ODP_DBG(" max num queues %u\n", capa.max_queues); + ODP_DBG(" max queue size %u\n", capa.plain.max_size); + ODP_DBG(" max num lockfree %u\n", capa.plain.lockfree.max_num); + ODP_DBG(" max lockfree size %u\n\n", capa.plain.lockfree.max_size);
return 0; } @@ -146,21 +170,7 @@ static int queue_term_global(void)
static int queue_capability(odp_queue_capability_t *capa) { - memset(capa, 0, sizeof(odp_queue_capability_t)); - - /* Reserve some queues for internal use */ - capa->max_queues = ODP_CONFIG_QUEUES - NUM_INTERNAL_QUEUES; - capa->max_ordered_locks = sched_fn->max_ordered_locks(); - capa->max_sched_groups = sched_fn->num_grps(); - capa->sched_prios = odp_schedule_num_prio(); - capa->plain.max_num = capa->max_queues; - capa->plain.max_size = CONFIG_QUEUE_SIZE - 1; - capa->plain.lockfree.max_num = queue_glb->queue_lf_num; - capa->plain.lockfree.max_size = queue_glb->queue_lf_size; - capa->sched.max_num = capa->max_queues; - capa->sched.max_size = CONFIG_QUEUE_SIZE - 1; - - return 0; + return queue_capa(capa, 1); }
static odp_queue_type_t queue_type(odp_queue_t handle)
commit 76f7b4e3b8041c22d9a65d5aefa5e154cc8931a3 Author: Matias Elo matias.elo@nokia.com Date: Mon Mar 26 14:39:41 2018 +0300
Port 80b9a1e "linux-gen: version: implementation name content"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/m4/configure.m4 b/platform/linux-dpdk/m4/configure.m4 index 7c79e767..5a841997 100644 --- a/platform/linux-dpdk/m4/configure.m4 +++ b/platform/linux-dpdk/m4/configure.m4 @@ -1,4 +1,4 @@ -IMPLEMENTATION_NAME="odp-dpdk" +ODP_IMPLEMENTATION_NAME="odp-dpdk"
ODP_VISIBILITY ODP_ATOMIC
commit aedf019425b66c6308da0cdce2db3bbc17e72578 Author: Dmitry Eremin-Solenikov dmitry.ereminsolenikov@linaro.org Date: Wed Mar 28 17:14:28 2018 +0300
build: fix autoconf error caused by double-registering config item
Autoconf uses provided tag as is, when registering config command. Require platform code to pass platform argument, so that different config commands will be registered.
Signed-off-by: Dmitry Eremin-Solenikov dmitry.ereminsolenikov@linaro.org
diff --git a/m4/odp_libconfig.m4 b/m4/odp_libconfig.m4 index 632c271e..926ceca6 100644 --- a/m4/odp_libconfig.m4 +++ b/m4/odp_libconfig.m4 @@ -1,5 +1,5 @@ -# ODP_LIBCONFIG -# ------------- +# ODP_LIBCONFIG(PLATFORM) +# ----------------------- AC_DEFUN([ODP_LIBCONFIG], [dnl ########################################################################## @@ -19,10 +19,10 @@ fi # Create a header file odp_libconfig_config.h which containins null # terminated hex dump of odp-linux.conf ########################################################################## -AC_CONFIG_COMMANDS([platform/${with_platform}/include/odp_libconfig_config.h], -[mkdir -p platform/${with_platform}/include - (cd ${srcdir}/config ; xxd -i odp-${with_platform}.conf) | \ +AC_CONFIG_COMMANDS([platform/$1/include/odp_libconfig_config.h], +[mkdir -p platform/$1/include + (cd ${srcdir}/config ; xxd -i odp-$1.conf) | \ sed 's/([[0-9a-f]])$/\0, 0x00/' > \ - platform/${with_platform}/include/odp_libconfig_config.h], + platform/$1/include/odp_libconfig_config.h], [with_platform=$with_platform]) ]) # ODP_LIBCONFIG diff --git a/platform/linux-dpdk/m4/configure.m4 b/platform/linux-dpdk/m4/configure.m4 index 9f21b34a..7c79e767 100644 --- a/platform/linux-dpdk/m4/configure.m4 +++ b/platform/linux-dpdk/m4/configure.m4 @@ -10,7 +10,7 @@ AM_CONDITIONAL([PKTIO_DPDK], [false]) ODP_PTHREAD ODP_TIMER ODP_OPENSSL -ODP_LIBCONFIG +ODP_LIBCONFIG([linux-dpdk]) ODP_SCHEDULER
########################################################################## diff --git a/platform/linux-generic/m4/configure.m4 b/platform/linux-generic/m4/configure.m4 index d4aa9cd0..7cf0a9b6 100644 --- a/platform/linux-generic/m4/configure.m4 +++ b/platform/linux-generic/m4/configure.m4 @@ -6,7 +6,7 @@ ODP_ATOMIC ODP_PTHREAD ODP_TIMER ODP_OPENSSL -ODP_LIBCONFIG +ODP_LIBCONFIG([linux-generic]) m4_include([platform/linux-generic/m4/odp_pcap.m4]) m4_include([platform/linux-generic/m4/odp_netmap.m4]) m4_include([platform/linux-generic/m4/odp_dpdk.m4])
commit edd235b2e1ee71a398ed96f99886d974c277b7e4 Author: Matias Elo matias.elo@nokia.com Date: Mon Mar 26 14:37:00 2018 +0300
Port 534667d "linux-gen: add runtime configuration file"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/config/odp-linux-dpdk.conf b/config/odp-linux-dpdk.conf new file mode 100644 index 00000000..341dba0c --- /dev/null +++ b/config/odp-linux-dpdk.conf @@ -0,0 +1,32 @@ +# ODP runtime configuration options +# +# This template configuration file (odp-linux-dpdk.conf) is hardcoded +# during configure/build phase and the values defined here are used if +# optional ODP_CONFIG_FILE is not set. This configuration file MUST +# include all configuration options. +# +# ODP_CONFIG_FILE can be used to override default values and it doesn't +# have to include all available options. The missing options are +# replaced with hardcoded default values. +# +# The options defined here are implementation specific and valid option +# values should be checked from the implementation code. +# +# See libconfig syntax: https://hyperrealm.github.io/libconfig/libconfig_manual.html#Configuration-F... + +# Mandatory fields +odp_implementation = "linux-dpdk" +config_file_version = "0.0.1" + +# DPDK pktio options +pktio_dpdk: { + # Default options + num_rx_desc = 128 + num_tx_desc = 512 + rx_drop_en = 0 + + # Driver specific options (use PMD names from DPDK) + net_ixgbe: { + rx_drop_en = 1 + } +} diff --git a/platform/linux-dpdk/.gitignore b/platform/linux-dpdk/.gitignore index fd5ade7e..16e788a9 100644 --- a/platform/linux-dpdk/.gitignore +++ b/platform/linux-dpdk/.gitignore @@ -1 +1,2 @@ libodp-linux.pc +odp_libconfig_config.h diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 83af08e7..53b1dbd0 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -3,6 +3,7 @@ include $(top_srcdir)/platform/@with_platform@/Makefile.inc
AM_CPPFLAGS = $(ODP_INCLUDES) AM_CPPFLAGS += -I$(top_srcdir)/platform/$(with_platform)/include +AM_CPPFLAGS += -I$(top_builddir)/platform/$(with_platform)/include AM_CPPFLAGS += -I$(top_srcdir)/platform/linux-generic/include AM_CPPFLAGS += -I$(top_srcdir)/platform/$(with_platform)/arch AM_CPPFLAGS += -I$(top_srcdir)/platform/$(with_platform)/arch/@ARCH_DIR@ @@ -11,6 +12,12 @@ AM_CPPFLAGS += -I$(top_srcdir)/platform/$(with_platform)/arch/default AM_CPPFLAGS += $(OPENSSL_CPPFLAGS) AM_CPPFLAGS += $(DPDK_CPPFLAGS)
+AM_CFLAGS += $(LIBCONFIG_CFLAGS) + +DISTCLEANFILES = include/odp_libconfig_config.h +include/odp_libconfig_config.h: $(top_srcdir)/config/odp-$(with_platform).conf $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + if !ODP_ABI_COMPAT odpapiplatincludedir= $(includedir)/odp/api/plat odpapiplatinclude_HEADERS = \ @@ -88,6 +95,7 @@ noinst_HEADERS = \ ${top_srcdir}/platform/linux-generic/include/odp_forward_typedefs_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_ipsec_internal.h \ + ${top_srcdir}/platform/linux-generic/include/odp_libconfig_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_llqueue.h \ ${top_srcdir}/platform/linux-generic/include/odp_macros_internal.h \ include/odp_packet_dpdk.h \ @@ -121,6 +129,9 @@ noinst_HEADERS = \ include/protocols/udp.h \ Makefile.inc
+nodist_noinst_HEADERS = \ + include/odp_libconfig_config.h + __LIB__libodp_linux_la_SOURCES = \ ../linux-generic/odp_atomic.c \ ../linux-generic/odp_barrier.c \ @@ -141,6 +152,7 @@ __LIB__libodp_linux_la_SOURCES = \ ../linux-generic/odp_ipsec_events.c \ ../linux-generic/odp_ipsec_sad.c \ ../linux-generic/odp_name_table.c \ + odp_libconfig.c \ odp_packet.c \ odp_packet_dpdk.c \ odp_packet_flags.c \ @@ -256,6 +268,7 @@ endif
__LIB__libodp_linux_la_LIBADD = $(ATOMIC_LIBS) __LIB__libodp_linux_la_LIBADD += $(OPENSSL_LIBS) +__LIB__libodp_linux_la_LIBADD += $(LIBCONFIG_LIBS) __LIB__libodp_linux_la_LIBADD += $(DPDK_LIBS_LIBODP) __LIB__libodp_linux_la_LIBADD += $(PTHREAD_LIBS) __LIB__libodp_linux_la_LIBADD += $(TIMER_LIBS) diff --git a/platform/linux-dpdk/include/odp_packet_dpdk.h b/platform/linux-dpdk/include/odp_packet_dpdk.h index f8c5b3fc..a2c9132b 100644 --- a/platform/linux-dpdk/include/odp_packet_dpdk.h +++ b/platform/linux-dpdk/include/odp_packet_dpdk.h @@ -47,7 +47,4 @@ #include <rte_jhash.h> #include <rte_hash_crc.h>
-#define RTE_TEST_RX_DESC_DEFAULT 128 -#define RTE_TEST_TX_DESC_DEFAULT 512 - #endif diff --git a/platform/linux-dpdk/include/odp_packet_io_internal.h b/platform/linux-dpdk/include/odp_packet_io_internal.h index 9613c956..33ec8b81 100644 --- a/platform/linux-dpdk/include/odp_packet_io_internal.h +++ b/platform/linux-dpdk/include/odp_packet_io_internal.h @@ -50,6 +50,13 @@ typedef struct { uint8_t idx; /**< index of "loop" device */ } pkt_loop_t;
+/** DPDK runtime configuration options */ +typedef struct { + int num_rx_desc; + int num_tx_desc; + int rx_drop_en; +} dpdk_opt_t; + /** Packet socket using dpdk mmaped rings for both Rx and Tx */ typedef struct { uint16_t port_id; /**< DPDK port identifier */ @@ -63,6 +70,7 @@ typedef struct { odp_ticketlock_t tx_lock[PKTIO_MAX_QUEUES]; /**< TX queue locks */ uint8_t vdev_sysc_promisc; /**< promiscuous mode defined with system call */ + dpdk_opt_t opt; } pkt_dpdk_t;
struct pktio_entry { diff --git a/platform/linux-dpdk/libodp-linux.pc.in b/platform/linux-dpdk/libodp-linux.pc.in index 4076edea..b3e5f05f 100644 --- a/platform/linux-dpdk/libodp-linux.pc.in +++ b/platform/linux-dpdk/libodp-linux.pc.in @@ -6,6 +6,7 @@ includedir=@includedir@ Name: libodp-linux Description: The ODP packet processing engine Version: @PKGCONFIG_VERSION@ +Requires.private: libconfig Libs: -L${libdir} -lodp-linux Libs.private: @DPDK_LIBS@ @OPENSSL_STATIC_LIBS@ @PTHREAD_LIBS@ @TIMER_LIBS@ -lpthread @ATOMIC_LIBS@ Cflags: -I${includedir} @DPDK_CPPFLAGS@ diff --git a/platform/linux-dpdk/m4/configure.m4 b/platform/linux-dpdk/m4/configure.m4 index 1ec34ac7..9f21b34a 100644 --- a/platform/linux-dpdk/m4/configure.m4 +++ b/platform/linux-dpdk/m4/configure.m4 @@ -10,6 +10,7 @@ AM_CONDITIONAL([PKTIO_DPDK], [false]) ODP_PTHREAD ODP_TIMER ODP_OPENSSL +ODP_LIBCONFIG ODP_SCHEDULER
########################################################################## diff --git a/platform/linux-dpdk/odp_init.c b/platform/linux-dpdk/odp_init.c index 57a60bd9..562e0c26 100644 --- a/platform/linux-dpdk/odp_init.c +++ b/platform/linux-dpdk/odp_init.c @@ -14,6 +14,7 @@ #include <unistd.h> #include <odp_internal.h> #include <odp_schedule_if.h> +#include <odp_libconfig_internal.h> #include <odp_shm_internal.h> #include <string.h> #include <stdio.h> @@ -172,6 +173,12 @@ int odp_init_global(odp_instance_t *instance, odp_global_data.abort_fn = params->abort_fn; }
+ if (_odp_libconfig_init_global()) { + ODP_ERR("ODP runtime config init failed.\n"); + goto init_failed; + } + stage = LIBCONFIG_INIT; + if (odp_cpumask_init_global(params)) { ODP_ERR("ODP cpumask init failed.\n"); goto init_failed; @@ -425,6 +432,13 @@ int _odp_term_global(enum init_stage stage) } /* Fall through */
+ case LIBCONFIG_INIT: + if (_odp_libconfig_term_global()) { + ODP_ERR("ODP runtime config term failed.\n"); + rc = -1; + } + /* Fall through */ + case NO_INIT: ; } diff --git a/platform/linux-dpdk/odp_libconfig.c b/platform/linux-dpdk/odp_libconfig.c new file mode 100644 index 00000000..6d5ee524 --- /dev/null +++ b/platform/linux-dpdk/odp_libconfig.c @@ -0,0 +1,99 @@ +/* Copyright (c) 2018, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "config.h" + +#include <stdlib.h> +#include <string.h> +#include <libconfig.h> + +#include <odp/api/version.h> +#include <odp_internal.h> +#include <odp_debug_internal.h> +#include <odp_libconfig_internal.h> +#include <odp_libconfig_config.h> + +#define CONF_STR_NAME ((const char *)odp_linux_dpdk_conf) + +extern struct odp_global_data_s odp_global_data; + +int _odp_libconfig_init_global(void) +{ + const char *filename; + const char *vers; + const char *vers_rt; + const char *ipml; + const char *ipml_rt; + config_t *config = &odp_global_data.libconfig_default; + config_t *config_rt = &odp_global_data.libconfig_runtime; + + config_init(config); + config_init(config_rt); + + if (!config_read_string(config, CONF_STR_NAME)) { + ODP_ERR("Failed to read default config: %s(%d): %s\n", + config_error_file(config), config_error_line(config), + config_error_text(config)); + goto fail; + } + + filename = getenv("ODP_CONFIG_FILE"); + if (filename == NULL) + return 0; + + if (!config_read_file(config_rt, filename)) { + ODP_ERR("Failed to read config file: %s(%d): %s\n", + config_error_file(config_rt), + config_error_line(config_rt), + config_error_text(config_rt)); + goto fail; + } + + /* Check runtime configuration's implementation name and version */ + if (!config_lookup_string(config, "odp_implementation", &ipml) || + !config_lookup_string(config_rt, "odp_implementation", &ipml_rt)) { + ODP_ERR("Configuration missing 'odp_implementation' field\n"); + goto fail; + } + if (!config_lookup_string(config, "config_file_version", &vers) || + !config_lookup_string(config_rt, "config_file_version", &vers_rt)) { + ODP_ERR("Configuration missing 'config_file_version' field\n"); + goto fail; + } + if (strcmp(vers, vers_rt) || strcmp(ipml, ipml_rt)) { + ODP_ERR("Runtime configuration mismatch\n"); + goto fail; + } + + return 0; +fail: + config_destroy(config); + config_destroy(config_rt); + return -1; +} + +int _odp_libconfig_term_global(void) +{ + config_destroy(&odp_global_data.libconfig_default); + config_destroy(&odp_global_data.libconfig_runtime); + + return 0; +} + +int _odp_libconfig_lookup_int(const char *path, int *value) +{ + int ret_def = CONFIG_FALSE; + int ret_rt = CONFIG_FALSE; + + ret_def = config_lookup_int(&odp_global_data.libconfig_default, path, + value); + + /* Runtime option overrides default value */ + ret_rt = config_lookup_int(&odp_global_data.libconfig_runtime, path, + value); + + return (ret_def == CONFIG_TRUE || ret_rt == CONFIG_TRUE) ? 1 : 0; +} diff --git a/platform/linux-dpdk/odp_packet_dpdk.c b/platform/linux-dpdk/odp_packet_dpdk.c index 410211a6..a0a0a852 100644 --- a/platform/linux-dpdk/odp_packet_dpdk.c +++ b/platform/linux-dpdk/odp_packet_dpdk.c @@ -31,9 +31,9 @@ #include <odp_debug_internal.h> #include <odp_classification_internal.h> #include <odp_packet_io_internal.h> +#include <odp_libconfig_internal.h> #include <odp_packet_dpdk.h> #include <net/if.h> -#include <math.h>
/* DPDK poll mode drivers requiring minimum RX burst size DPDK_MIN_RX_BURST */ #define IXGBE_DRV_NAME "net_ixgbe" @@ -57,6 +57,64 @@ extern void *pktio_entry_ptr[ODP_CONFIG_PKTIO_ENTRIES];
static uint32_t mtu_get_pkt_dpdk(pktio_entry_t *pktio_entry);
+static int lookup_opt(const char *path, const char *drv_name, int *val) +{ + const char *base = "pktio_dpdk"; + char opt_path[256]; + int ret = 0; + + /* Default option */ + snprintf(opt_path, sizeof(opt_path), "%s.%s", base, path); + ret += _odp_libconfig_lookup_int(opt_path, val); + + /* Driver specific option overrides default option */ + snprintf(opt_path, sizeof(opt_path), "%s.%s.%s", base, drv_name, path); + ret += _odp_libconfig_lookup_int(opt_path, val); + + if (ret == 0) + ODP_ERR("Unable to find DPDK configuration option: %s\n", path); + return ret; +} + +static int init_options(pktio_entry_t *pktio_entry, + const struct rte_eth_dev_info *dev_info) +{ + dpdk_opt_t *opt = &pktio_entry->s.pkt_dpdk.opt; + + if (!lookup_opt("num_rx_desc", dev_info->driver_name, + &opt->num_rx_desc)) + return -1; + if (opt->num_rx_desc < dev_info->rx_desc_lim.nb_min || + opt->num_rx_desc > dev_info->rx_desc_lim.nb_max || + opt->num_rx_desc % dev_info->rx_desc_lim.nb_align) { + ODP_ERR("Invalid number of RX descriptors\n"); + return -1; + } + + if (!lookup_opt("num_tx_desc", dev_info->driver_name, + &opt->num_tx_desc)) + return -1; + if (opt->num_tx_desc < dev_info->tx_desc_lim.nb_min || + opt->num_tx_desc > dev_info->tx_desc_lim.nb_max || + opt->num_tx_desc % dev_info->tx_desc_lim.nb_align) { + ODP_ERR("Invalid number of TX descriptors\n"); + return -1; + } + + if (!lookup_opt("rx_drop_en", dev_info->driver_name, + &opt->rx_drop_en)) + return -1; + opt->rx_drop_en = !!opt->rx_drop_en; + + ODP_PRINT("DPDK interface (%s): %" PRIu16 "\n", dev_info->driver_name, + pktio_entry->s.pkt_dpdk.port_id); + ODP_PRINT(" num_rx_desc: %d\n", opt->num_rx_desc); + ODP_PRINT(" num_tx_desc: %d\n", opt->num_tx_desc); + ODP_PRINT(" rx_drop_en: %d\n", opt->rx_drop_en); + + return 0; +} + /* Test if s has only digits or not. Dpdk pktio uses only digits.*/ static int _dpdk_netdev_is_valid(const char *s) { @@ -295,6 +353,12 @@ static int setup_pkt_dpdk(odp_pktio_t pktio ODP_UNUSED, return -1; }
+ /* Initialize runtime options */ + if (init_options(pktio_entry, &dev_info)) { + ODP_ERR("Initializing runtime options failed\n"); + return -1; + } + /* Drivers requiring minimum burst size. Supports also *_vf versions * of the drivers. */ if (!strncmp(dev_info.driver_name, IXGBE_DRV_NAME, @@ -370,8 +434,6 @@ static int start_pkt_dpdk(pktio_entry_t *pktio_entry) int socket_id = sid < 0 ? 0 : sid; uint16_t nbrxq, nbtxq; pool_t *pool = pool_entry_from_hdl(pktio_entry->s.pool); - uint16_t nb_rxd = RTE_TEST_RX_DESC_DEFAULT; - uint16_t nb_txd = RTE_TEST_TX_DESC_DEFAULT; struct rte_eth_rss_conf rss_conf; uint16_t hw_ip_checksum = 0; struct rte_eth_dev_info dev_info; @@ -427,22 +489,15 @@ static int start_pkt_dpdk(pktio_entry_t *pktio_entry) return -1; }
- if (nb_rxd + nb_txd > pool->params.pkt.num / 4) { - double downrate = (double)(pool->params.pkt.num / 4) / - (double)(nb_rxd + nb_txd); - nb_rxd >>= (int)ceil(downrate); - nb_txd >>= (int)ceil(downrate); - ODP_DBG("downrate %f\n", downrate); - ODP_DBG("Descriptors scaled down. RX: %u TX: %u pool: %u\n", - nb_rxd, nb_txd, pool->params.pkt.num); - } /* init RX queues */ rte_eth_dev_info_get(port_id, &dev_info); rxconf = &dev_info.default_rxconf; - rxconf->rx_drop_en = 1; + rxconf->rx_drop_en = pkt_dpdk->opt.rx_drop_en; for (i = 0; i < nbrxq; i++) { - ret = rte_eth_rx_queue_setup(port_id, i, nb_rxd, socket_id, - rxconf, pool->rte_mempool); + ret = rte_eth_rx_queue_setup(port_id, i, + pkt_dpdk->opt.num_rx_desc, + socket_id, rxconf, + pool->rte_mempool); if (ret < 0) { ODP_ERR("rxq:err=%d, port=%" PRIu16 "\n", ret, port_id); return -1; @@ -461,8 +516,9 @@ static int start_pkt_dpdk(pktio_entry_t *pktio_entry) /* else - use the default tx queue settings*/
for (i = 0; i < nbtxq; i++) { - ret = rte_eth_tx_queue_setup(port_id, i, nb_txd, socket_id, - txconf); + ret = rte_eth_tx_queue_setup(port_id, i, + pkt_dpdk->opt.num_rx_desc, + socket_id, txconf); if (ret < 0) { ODP_ERR("txq:err=%d, port=%" PRIu16 "\n", ret, port_id); return -1;
commit cbdf41027fbc9ef19b89b9218e0b69668b493a1f Merge: ece4610e 3c5cc807 Author: Matias Elo matias.elo@nokia.com Date: Wed Apr 4 09:32:59 2018 +0300
Merge tag 'v1.18.0.1_tigermoth_rc3' of https://github.com/Linaro/odp into odp-dpdk
Tiger Moth LTS rc3
# Conflicts: # .travis.yml # configure.ac
diff --cc .travis.yml index 597a9c1c,1f5ef42e..1be920d6 --- a/.travis.yml +++ b/.travis.yml @@@ -54,7 -54,13 +55,10 @@@ env - CONF="" - CONF="--disable-abi-compat" - CONF="--enable-deprecated" - - CONF="--enable-dpdk-zero-copy" - CONF="--disable-static-applications" + - CONF="--disable-host-optimization" + - CONF="--disable-host-optimization --disable-abi-compat" + - DPDK_SHARED="y" CONF="--disable-static-applications" - - DPDK_VERS="17.11" CONF="" - - DPDK_VERS="17.11" DPDK_SHARED="y" CONF="--disable-static-applications"
compiler: - gcc @@@ -219,9 -226,23 +224,9 @@@ install rm -r ./doc ./${TARGET}/app ./${TARGET}/build popd fi - EXTRA_CONF="$EXTRA_CONF --with-dpdk-path=`pwd`/dpdk/${TARGET}" + EXTRA_CONF="$EXTRA_CONF --with-dpdk-path=`pwd`/dpdk/${TARGET}/usr/local" fi
-# Netmap pktio - - | - if [ -z "$CROSS_ARCH" ]; then - if [ ! -f "netmap/LINUX/netmap.ko" ]; then - git -c advice.detachedHead=false clone -q --depth=1 --single-branch --branch=v11.2 https://github.com/luigirizzo/netmap.git - pushd netmap/LINUX - ./configure - make -j $(nproc) - popd - fi - sudo insmod ./netmap/LINUX/netmap.ko - EXTRA_CONF="$EXTRA_CONF --with-netmap-path=`pwd`/netmap" - fi - script: - ./bootstrap - ./configure --prefix=$HOME/odp-install @@@ -233,7 -254,8 +238,7 @@@ # Run all tests only for default configuration - if [ -z "$CROSS_ARCH" ] ; then if [ -n "$CONF" ] ; then - sudo LD_LIBRARY_PATH="$HOME/cunit-install/$CROSS_ARCH/lib:$LD_LIBRARY_PATH" ODP_SHM_DIR=/dev/shm/odp make check ; - sudo ODP_CONFIG_FILE="`pwd`/config/odp-linux-generic.conf" LD_LIBRARY_PATH="$HOME/cunit-install/$CROSS_ARCH/lib:$LD_LIBRARY_PATH" ODP_SHM_DIR=/dev/shm/odp make check ; ++ sudo ODP_CONFIG_FILE="`pwd`/config/odp-linux-dpdk.conf" LD_LIBRARY_PATH="$HOME/cunit-install/$CROSS_ARCH/lib:$LD_LIBRARY_PATH" ODP_SHM_DIR=/dev/shm/odp make check ; else sudo ODP_SCHEDULER=basic LD_LIBRARY_PATH="$HOME/cunit-install/$CROSS_ARCH/lib:$LD_LIBRARY_PATH" ODP_SHM_DIR=/dev/shm/odp make check ; sudo ODP_SCHEDULER=sp LD_LIBRARY_PATH="$HOME/cunit-install/$CROSS_ARCH/lib:$LD_LIBRARY_PATH" ODP_SHM_DIR=/dev/shm/odp make check ; @@@ -260,9 -278,11 +265,11 @@@ echo "Static link.." ${CC} ${CFLAGS} ${OLDPWD}/example/hello/odp_hello.c -o odp_hello_inst_static `PKG_CONFIG_PATH=${HOME}/odp-install/lib/pkgconfig:${PKG_CONFIG_PATH} pkg-config --cflags --libs libodp-linux --static` -static || exit 1 if [ -z "$CROSS_ARCH" ] ; then - ./odp_hello_inst_static; + sudo ODP_PLATFORM_PARAMS="-n 2" ./odp_hello_inst_static; fi fi + - popd + - ccache -s
jobs: include: @@@ -274,14 -294,33 +281,16 @@@ - ./bootstrap - ./configure --prefix=$HOME/odp-install --enable-user-guides - --with-dpdk-path=`pwd`/dpdk/${TARGET} + --with-dpdk-path=`pwd`/dpdk/${TARGET}/usr/local - --with-netmap-path=`pwd`/netmap CFLAGS="-O0 -coverage" + CFLAGS="-O0 -coverage" CXXFLAGS="-O0 -coverage" LDFLAGS="--coverage" --enable-debug=full --enable-helper-linux - CCACHE_DISABLE=1 make -j $(nproc) - - sudo CCACHE_DISABLE=1 LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH" PATH=${PATH//:./node_modules/.bin/} make check + - sudo CCACHE_DISABLE=1 ODP_SCHEDULER=basic LD_LIBRARY_PATH="$HOME/cunit-install/$CROSS_ARCH/lib:$LD_LIBRARY_PATH" make check + - sudo CCACHE_DISABLE=1 ODP_SCHEDULER=sp LD_LIBRARY_PATH="$HOME/cunit-install/$CROSS_ARCH/lib:$LD_LIBRARY_PATH" make check + - sudo CCACHE_DISABLE=1 ODP_SCHEDULER=iquery LD_LIBRARY_PATH="$HOME/cunit-install/$CROSS_ARCH/lib:$LD_LIBRARY_PATH" make check - - sudo CCACHE_DISABLE=1 ODP_SCHEDULER=scalable LD_LIBRARY_PATH="$HOME/cunit-install/$CROSS_ARCH/lib:$LD_LIBRARY_PATH" make check - find . -type f -iname '*.[ch]' -not -path ".git/*" -execdir gcov {} ; ; bash <(curl -s https://codecov.io/bash) -X coveragepy - - stage: test - env: TEST=distcheck - compiler: gcc - script: - - ./bootstrap - - ./configure --prefix=$HOME/odp-install - --enable-user-guides - - sudo PATH="$PATH" LD_LIBRARY_PATH="$HOME/cunit-install/$CROSS_ARCH/lib:$LD_LIBRARY_PATH" make distcheck - - stage: test - env: TEST=distcheck-non-abi - compiler: gcc - script: - - ./bootstrap - - ./configure --prefix=$HOME/odp-install - --enable-user-guides - - sudo PATH="$PATH" LD_LIBRARY_PATH="$HOME/cunit-install/$CROSS_ARCH/lib:$LD_LIBRARY_PATH" make distcheck DISTCHECK__CONFIGURE_FLAGS=--disable-abi-compat - stage: "build only" env: TEST=doxygen compiler: gcc @@@ -300,8 -339,7 +309,7 @@@ - export PATH=$HOME/doxygen-install/bin:$PATH script: - ./bootstrap -- - ./configure - --with-dpdk-path=`pwd`/dpdk/${TARGET} ++ - ./configure $EXTRA_CONF # doxygen does not trap on warnings, check for them here. - make doxygen-doc 2>&1 |tee doxygen.log - | @@@ -314,18 -352,18 +322,16 @@@ - stage: "build only" env: CONF="" compiler: gcc - install: true script: - ./bootstrap -- - ./configure --enable-helper-linux - --with-dpdk-path=`pwd`/dpdk/${TARGET} ++ - ./configure --enable-helper-linux $EXTRA_CONF - make -j $(nproc) - stage: "build only" env: CONF="" compiler: clang-3.8 - install: true script: - ./bootstrap -- - ./configure --enable-helper-linux - --with-dpdk-path=`pwd`/dpdk/${TARGET} ++ - ./configure --enable-helper-linux $EXTRA_CONF - make -j $(nproc) - stage: "build only" env: CROSS_ARCH="i386" diff --cc configure.ac index ee675279,904e8197..152c0795 --- a/configure.ac +++ b/configure.ac @@@ -232,7 -231,17 +231,19 @@@ AC_ARG_WITH([platform] ])
AC_SUBST([with_platform]) - + ########################################################################## + # Run platform specific checks and settings + ########################################################################## + AS_IF([test "${with_platform}" = "linux-generic"], + [m4_include([./platform/linux-generic/m4/configure.m4])], ++ [test "${with_platform}" = "linux-dpdk"], ++ [m4_include([./platform/linux-dpdk/m4/configure.m4])], + [AC_MSG_ERROR([UNSUPPORTED PLATFORM: ${with_platform}])]) + + AC_DEFINE_UNQUOTED([ODP_IMPLEMENTATION_NAME], ["$ODP_IMPLEMENTATION_NAME"], + [Define to the name of the implementation]) + + ########################################################################## # Build examples/tests dynamically ##########################################################################
commit ece4610e4f895860e935fc5920fa4f9f2654a58e Author: Dmitry Eremin-Solenikov dmitry.ereminsolenikov@linaro.org Date: Sat Mar 24 06:01:42 2018 +0300
travis: enable cross-compilation testing
Signed-off-by: Dmitry Eremin-Solenikov dmitry.ereminsolenikov@linaro.org Reviewed-and-tested-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/.travis.yml b/.travis.yml index 70f152e8..597a9c1c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -54,8 +54,6 @@ env: - CONF="" - CONF="--disable-abi-compat" - CONF="--enable-deprecated" - - CONF="--enable-schedule-sp" - - CONF="--enable-schedule-iquery" - CONF="--disable-static-applications"
compiler: @@ -63,7 +61,61 @@ compiler: - clang-3.8
before_install: -# Install cunit for the validation tests because distro version is too old and fails C99 compile + + # Install cross toolchains, etc + # apt-get update may fail thanks to Ubuntu removing Packages/indices while not removing relevant parts of Release file + - if [ -n "$CROSS_ARCH" ] ; + then + BUILD_GNU_TYPE=`dpkg-architecture -a"$CROSS_ARCH" -qDEB_BUILD_GNU_TYPE` ; + CROSS_GNU_TYPE=`dpkg-architecture -a"$CROSS_ARCH" -qDEB_HOST_GNU_TYPE` ; + CROSS_MULTIARCH=`dpkg-architecture -a"$CROSS_ARCH" -qDEB_HOST_MULTIARCH` ; + CROSS="--host="$CROSS_GNU_TYPE" --build="$BUILD_GNU_TYPE"" ; + sudo dpkg --add-architecture "$CROSS_ARCH" ; + sudo -E apt-add-repository -y "deb http://ports.ubuntu.com trusty main" ; + sudo -E apt-add-repository -y "deb http://ports.ubuntu.com trusty-updates main" ; + sudo -E apt-get -y update || true ; + PKGS="build-essential libc6-dev:$CROSS_ARCH libssl-dev:$CROSS_ARCH zlib1g-dev:$CROSS_ARCH libconfig-dev:$CROSS_ARCH libstdc++-4.8-dev:$CROSS_ARCH libpcap0.8-dev:$CROSS_ARCH" ; + if [ "$CROSS_ARCH" = "i386" ] ; + then + PKGS="$PKGS g++-multilib" ; + else + PKGS="$PKGS g++-$CROSS_GNU_TYPE" ; + fi ; + if [ "$CROSS_ARCH" != "armhf" ] ; + then + PKGS="$PKGS libnuma-dev:$CROSS_ARCH" ; + fi ; + sudo -E apt-get -y --no-install-suggests --no-install-recommends --force-yes install $PKGS || exit 1 ; + export PKG_CONFIG_PATH=/usr/lib/${CROSS_MULTIARCH}/pkgconfig:/usr/${CROSS_MULTIARCH}/lib/pkgconfig ; + fi + - if [ "${CC#clang}" != "${CC}" ] ; + then + if [ -n "$CROSS_ARCH" ] ; + then + export CC="${CC} --target=$CROSS_GNU_TYPE" ; + if [ "$CROSS_ARCH" = "i386" ] ; + then + DPDK_CFLAGS="-m32" ; + else + DPDK_CROSS="$CROSS_GNU_TYPE-" ; + DPDK_CFLAGS="--target=$CROSS_GNU_TYPE" ; + fi + fi ; + export CXX="${CC/clang/clang++}"; + elif [ "$CROSS_ARCH" = "i386" ] ; + then + export CC="gcc -m32" ; + export CXX="g++ -m32" ; + DPDK_CFLAGS="-m32" ; + elif [ -n "$CROSS_ARCH" ] ; + then + export CC="$CROSS_GNU_TYPE"-gcc ; + export CXX="$CROSS_GNU_TYPE"-g++ ; + DPDK_CROSS="$CROSS_GNU_TYPE-" ; + fi + - if test ! -L /usr/lib/ccache/${CC%% *} ; then sudo ln -s -t /usr/lib/ccache/ `which ${CC%% *}` ; fi + - ccache -s + # Install cunit for the validation tests because distro version is too old and fails C99 compile - sudo apt-get remove libcunit1-dev libcunit1 - export LD_LIBRARY_PATH="$HOME/cunit-install/$CROSS_ARCH/lib:$LD_LIBRARY_PATH" - | @@ -86,8 +138,11 @@ before_install: - find $HOME/cunit-install
install: - - sudo apt-get -qq update - - sudo apt-get install linux-headers-`uname -r` + - if [ -z "$CROSS_ARCH" ] ; + then + sudo apt-get -qq update ; + sudo apt-get install linux-headers-`uname -r` ; + fi - gem install asciidoctor
# DPDK. Note that cache must be purged if dpdk version changes. @@ -96,39 +151,95 @@ install: if [ "${CACHED_DPDK_VERS}" != "${DPDK_VERS}" ]; then rm -rf dpdk fi - - TARGET="x86_64-native-linuxapp-gcc" - - DPDK_MACHINE=snb - | - if [ -n "$TARGET" -a ! -f "dpdk/${TARGET}/lib/libdpdk.a" ]; then - git -c advice.detachedHead=false clone -q --depth=1 --single-branch --branch=v${DPDK_VERS} http://dpdk.org/git/dpdk dpdk + case "$CROSS_ARCH" in + "arm64") + DPDK_TARGET="arm64-armv8a-linuxapp-" + ;; + "armhf") + DPDK_TARGET="arm-armv7a-linuxapp-" + ;; + "i386") + DPDK_TARGET="i686-native-linuxapp-" + ;; + "") + DPDK_TARGET="x86_64-native-linuxapp-" + DPDK_MACHINE=snb + ;; + esac + - | + if [ -n "$DPDK_TARGET" ] ; then + if [ "${CC#clang}" != "${CC}" ] ; then + DPDKCC=clang ; + else + DPDKCC=gcc ; + fi + if [ -n "$DPDK_SHARED" ] ; then + TARGET="${DPDK_TARGET}$DPDKCC"-shared + LIBDPDKEXT=so + export LD_LIBRARY_PATH="`pwd`/${TARGET}:$LD_LIBRARY_PATH" + echo $LD_LIBRARY_PATH + else + TARGET="${DPDK_TARGET}$DPDKCC" + LIBDPDKEXT=a + fi + DPDK_TARGET="${DPDK_TARGET}gcc" + if [ ! -f "dpdk/${TARGET}/usr/local/lib/libdpdk.$LIBDPDKEXT" ]; then + git -c advice.detachedHead=false clone -q --depth=1 --single-branch --branch=${DPDK_VERS} http://dpdk.org/git/dpdk-stable dpdk pushd dpdk git log --oneline --decorate - echo $CC - make config T=${TARGET} O=${TARGET} + # AArch64 && ARMv7 fixup + sed -i -e 's/40900/40800/g' lib/librte_eal/common/include/arch/arm/rte_vect.h + sed -i -e 's/!(/!(defined(__arm__) && defined(__clang__) || /g' lib/librte_eal/common/include/arch/arm/rte_byteorder.h + sed -i -e 's/__GNUC__/defined(__arm__) && defined(__clang__) || __GNUC__/' lib/librte_eal/common/include/generic/rte_byteorder.h + sed -i -e 's,$(CC),\0 $(EXTRA_CFLAGS),g' lib/librte_acl/Makefile + make config T=${DPDK_TARGET} O=${TARGET} pushd ${TARGET} sed -ri 's,(CONFIG_RTE_LIBRTE_PMD_PCAP=).*,\1y,' .config sed -ri 's,(CONFIG_RTE_LIBRTE_PMD_OPENSSL=).*,\1y,' .config - cat .config |grep RTE_MACHINE + # OCTEON TX driver includes ARM v8.1 instructions + sed -ri 's,(CONFIG_RTE_LIBRTE_OCTEONTX_PMD=).*,\1n,' .config + sed -ri 's,(CONFIG_RTE_LIBRTE_PMD_OCTEONTX_SSOVF=).*,\1n,' .config + sed -ri 's,(CONFIG_RTE_LIBRTE_OCTEONTX_MEMPOOL=).*,\1n,' .config if test -n "${DPDK_MACHINE}" ; then sed -ri 's,(CONFIG_RTE_MACHINE=).*,\1"'${DPDK_MACHINE}'",' .config fi + if test -n "${DPDK_SHARED}" ; then + sed -ri 's,(CONFIG_RTE_BUILD_SHARED_LIB=).*,\1y,' .config + fi + if test -n "$CROSS_ARCH" ; then + sed -ri -e 's,(CONFIG_RTE_EAL_IGB_UIO=).*,\1n,' .config + sed -ri -e 's,(CONFIG_RTE_KNI_KMOD=).*,\1n,' .config + fi + sed -ri -e 's,(CONFIG_RTE_TOOLCHAIN=).*,\1"'${DPDKCC}'",' .config + sed -ri -e '/CONFIG_RTE_TOOLCHAIN_.*/d' .config + echo CONFIG_RTE_TOOLCHAIN_${DPDKCC^^}=y >> .config popd - make install T=${TARGET} EXTRA_CFLAGS="-fPIC $DPDK_CFLAGS" + make build O=${TARGET} EXTRA_CFLAGS="-fPIC $DPDK_CFLAGS" CROSS="$DPDK_CROSS" CC="$CC" HOSTCC=gcc -j $(nproc) rm -r ./doc ./${TARGET}/app ./${TARGET}/build popd - EXTRA_CONF="$EXTRA_CONF --with-dpdk-path=`pwd`/dpdk/${TARGET}" + fi + EXTRA_CONF="$EXTRA_CONF --with-dpdk-path=`pwd`/dpdk/${TARGET}" fi
script: - ./bootstrap - ./configure --prefix=$HOME/odp-install - --with-dpdk-path=`pwd`/dpdk/${TARGET} --enable-user-guides --enable-debug=full --enable-helper-linux - $CONF + $CROSS $EXTRA_CONF $CONF - make -j $(nproc) - - sudo LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH" make check + # Run all tests only for default configuration + - if [ -z "$CROSS_ARCH" ] ; then + if [ -n "$CONF" ] ; then + sudo LD_LIBRARY_PATH="$HOME/cunit-install/$CROSS_ARCH/lib:$LD_LIBRARY_PATH" ODP_SHM_DIR=/dev/shm/odp make check ; + else + sudo ODP_SCHEDULER=basic LD_LIBRARY_PATH="$HOME/cunit-install/$CROSS_ARCH/lib:$LD_LIBRARY_PATH" ODP_SHM_DIR=/dev/shm/odp make check ; + sudo ODP_SCHEDULER=sp LD_LIBRARY_PATH="$HOME/cunit-install/$CROSS_ARCH/lib:$LD_LIBRARY_PATH" ODP_SHM_DIR=/dev/shm/odp make check ; + sudo ODP_SCHEDULER=iquery LD_LIBRARY_PATH="$HOME/cunit-install/$CROSS_ARCH/lib:$LD_LIBRARY_PATH" ODP_SHM_DIR=/dev/shm/odp make check ; + fi + fi - make install
# Wrapper-script.sh unmounts huge pages after make check @@ -140,10 +251,18 @@ script: - pushd $HOME - echo "Dynamic link.." - ${CC} ${CFLAGS} ${OLDPWD}/example/hello/odp_hello.c -o odp_hello_inst_dynamic `PKG_CONFIG_PATH=${HOME}/odp-install/lib/pkgconfig:${PKG_CONFIG_PATH} pkg-config --cflags --libs libodp-linux` - - sudo ODP_PLATFORM_PARAMS="-n 2" LD_LIBRARY_PATH="${HOME}/odp-install/lib:$LD_LIBRARY_PATH" ./odp_hello_inst_dynamic - - echo "Static link.." - - ${CC} ${CFLAGS} ${OLDPWD}/example/hello/odp_hello.c -o odp_hello_inst_static `PKG_CONFIG_PATH=${HOME}/odp-install/lib/pkgconfig:${PKG_CONFIG_PATH} pkg-config --cflags --libs libodp-linux --static` -static - - sudo ODP_PLATFORM_PARAMS="-n 2" ./odp_hello_inst_static + - if [ -z "$CROSS_ARCH" ] ; then + sudo ODP_PLATFORM_PARAMS="-n 2" LD_LIBRARY_PATH="${HOME}/odp-install/lib:$LD_LIBRARY_PATH" ./odp_hello_inst_dynamic ; + fi + - | + # it is not possible to do static linking if we only have shared DPDK library. Compiler complains about missing -ldpdk + if [ -z "$TARGET" -o -z "$DPDK_SHARED" ] ; then + echo "Static link.." + ${CC} ${CFLAGS} ${OLDPWD}/example/hello/odp_hello.c -o odp_hello_inst_static `PKG_CONFIG_PATH=${HOME}/odp-install/lib/pkgconfig:${PKG_CONFIG_PATH} pkg-config --cflags --libs libodp-linux --static` -static || exit 1 + if [ -z "$CROSS_ARCH" ] ; then + sudo ODP_PLATFORM_PARAMS="-n 2" ./odp_hello_inst_static; + fi + fi
jobs: include: @@ -208,6 +327,56 @@ jobs: - ./configure --enable-helper-linux --with-dpdk-path=`pwd`/dpdk/${TARGET} - make -j $(nproc) + - stage: "build only" + env: CROSS_ARCH="i386" + compiler: gcc + script: + - ./bootstrap + - ./configure --enable-helper-linux $CROSS $EXTRA_CONF + - make -j $(nproc) + - stage: "build only" + env: CROSS_ARCH="arm64" + compiler: gcc + script: + - ./bootstrap + - ./configure --enable-helper-linux $CROSS $EXTRA_CONF + - make -j $(nproc) + - stage: test + compiler: gcc + env: CROSS_ARCH="arm64" + - stage: test + compiler: clang-3.8 + env: CROSS_ARCH="arm64" + - stage: test + compiler: gcc + env: CROSS_ARCH="armhf" CFLAGS="-march=armv7-a -mfpu=neon" + - stage: test + compiler: clang-3.8 + env: CROSS_ARCH="armhf" CFLAGS="-march=armv7-a" + - stage: test + compiler: gcc + env: CROSS_ARCH="i386" + - stage: test + compiler: clang-3.8 + env: CROSS_ARCH="i386" + - stage: test + compiler: gcc + env: CROSS_ARCH="arm64" CONF="--disable-abi-compat" + - stage: test + compiler: clang-3.8 + env: CROSS_ARCH="arm64" CONF="--disable-abi-compat" + - stage: test + compiler: gcc + env: CROSS_ARCH="armhf" CFLAGS="-march=armv7-a -mfpu=neon" CONF="--disable-abi-compat" + - stage: test + compiler: clang-3.8 + env: CROSS_ARCH="armhf" CFLAGS="-march=armv7-a" CONF="--disable-abi-compat" + - stage: test + compiler: gcc + env: CROSS_ARCH="i386" CONF="--disable-abi-compat" + - stage: test + compiler: clang-3.8 + env: CROSS_ARCH="i386" CONF="--disable-abi-compat" - stage: test canfail: yes env: TEST=checkpatch
commit f698508095a8fabd2fb85b6752d20a16cc817c91 Author: Dmitry Eremin-Solenikov dmitry.ereminsolenikov@linaro.org Date: Sat Mar 24 05:42:25 2018 +0300
build: another DPDK-linking fix
Try our best to link with DPDK, if we are doing static linking of examples and tests and we detected shared DPDK library. Build the list of static libraries, in hope they are present on the system (like in Debian/Ubuntu DPDK packages). Linking can still fail, as we have warned during configure time.
Signed-off-by: Dmitry Eremin-Solenikov dmitry.ereminsolenikov@linaro.org Reviewed-and-tested-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/example/Makefile.inc b/example/Makefile.inc index 34145ee6..4668b0ae 100644 --- a/example/Makefile.inc +++ b/example/Makefile.inc @@ -8,6 +8,8 @@ LDADD = $(LIB)/libodp-linux.la $(LIB)/libodphelper.la
# Do not link to DPDK twice in case of dynamic linking with ODP if STATIC_APPS +LDADD += $(DPDK_LIBS_LT_STATIC) +else LDADD += $(DPDK_LIBS_LT) endif
diff --git a/m4/odp_dpdk.m4 b/m4/odp_dpdk.m4 index 0050fc4b..c613fc22 100644 --- a/m4/odp_dpdk.m4 +++ b/m4/odp_dpdk.m4 @@ -19,20 +19,22 @@ AS_VAR_APPEND([DPDK_PMDS], [--no-whole-archive]) # -------------------- # Set DPDK_LIBS/DPDK_LIBS_LT/DPDK_LIBS_LIBODP depending on DPDK setup AC_DEFUN([_ODP_DPDK_SET_LIBS], [dnl +ODP_DPDK_PMDS([$DPDK_PMD_PATH]) AS_IF([test "x$DPDK_SHARED" = "xyes"], [dnl # applications don't need to be linked to anything, just rpath DPDK_LIBS_LT="$DPDK_RPATH_LT" # static linking flags will need -ldpdk + DPDK_LIBS_LT_STATIC="$DPDK_LDFLAGS $DPDK_PMDS $DPDK_LIBS" DPDK_LIBS="-Wl,--no-as-needed,-ldpdk,--as-needed,`echo $DPDK_LIBS | sed -e 's/ /,/g'`" DPDK_LIBS="$DPDK_LDFLAGS $DPDK_RPATH $DPDK_LIBS" # link libodp-linux with -ldpdk DPDK_LIBS_LIBODP="$DPDK_LIBS" ], [dnl - ODP_DPDK_PMDS([$DPDK_PMD_PATH]) # build long list of libraries for applications, which should not be # rearranged by libtool DPDK_LIBS_LT="`echo $DPDK_LIBS | sed -e 's/^/-Wc,/' -e 's/ /,/g'`" DPDK_LIBS_LT="$DPDK_LDFLAGS $DPDK_PMDS $DPDK_LIBS_LT $DPDK_LIBS" + DPDK_LIBS_LT_STATIC="$DPDK_LIBS_LT" # static linking flags follow the suite DPDK_LIBS="$DPDK_LDFLAGS $DPDK_PMDS $DPDK_LIBS" # link libodp-linux with libtool linking flags @@ -41,6 +43,7 @@ AS_IF([test "x$DPDK_SHARED" = "xyes"], [dnl AC_SUBST([DPDK_LIBS]) AC_SUBST([DPDK_LIBS_LIBODP]) AC_SUBST([DPDK_LIBS_LT]) +AC_SUBST([DPDK_LIBS_LT_STATIC]) ])
# _ODP_DPDK_CHECK_LIB(LDFLAGS, [LIBS]) diff --git a/test/Makefile.inc b/test/Makefile.inc index 3c61dfed..aa388151 100644 --- a/test/Makefile.inc +++ b/test/Makefile.inc @@ -23,6 +23,8 @@ AM_CPPFLAGS = \
# Do not link to DPDK twice in case of dynamic linking with ODP if STATIC_APPS +LDADD += $(DPDK_LIBS_LT_STATIC) +else LDADD += $(DPDK_LIBS_LT) endif
commit b97812b3428b1b54583a488630f6b7224ee558ee Author: Dmitry Eremin-Solenikov dmitry.ereminsolenikov@linaro.org Date: Sat Mar 24 06:05:36 2018 +0300
linux-dpdk: use ODP_SCHEDULER
Signed-off-by: Dmitry Eremin-Solenikov dmitry.ereminsolenikov@linaro.org Reviewed-and-tested-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/m4/configure.m4 b/platform/linux-dpdk/m4/configure.m4 index 78bfb4d7..1ec34ac7 100644 --- a/platform/linux-dpdk/m4/configure.m4 +++ b/platform/linux-dpdk/m4/configure.m4 @@ -10,7 +10,7 @@ AM_CONDITIONAL([PKTIO_DPDK], [false]) ODP_PTHREAD ODP_TIMER ODP_OPENSSL -m4_include([platform/linux-dpdk/m4/odp_schedule.m4]) +ODP_SCHEDULER
########################################################################## # Set DPDK install path diff --git a/platform/linux-dpdk/m4/odp_schedule.m4 b/platform/linux-dpdk/m4/odp_schedule.m4 deleted file mode 100644 index 70be5a7d..00000000 --- a/platform/linux-dpdk/m4/odp_schedule.m4 +++ /dev/null @@ -1,6 +0,0 @@ -AC_ARG_ENABLE([scheduler-default], - [AS_HELP_STRING([enable-scheduler-default], - [Choose default scheduler (default is basic)])], - [], [enable_scheduler_default=basic]) -AC_DEFINE_UNQUOTED([ODP_SCHEDULE_DEFAULT], ["$enable_scheduler_default"], - [Define to name default scheduler])
commit 048d570f32a020bce1da9e26b71169346a2c0386 Author: Dmitry Eremin-Solenikov dmitry.ereminsolenikov@linaro.org Date: Sat Mar 24 04:54:37 2018 +0300
build: move odp scheduler setting to common m4 file
Signed-off-by: Dmitry Eremin-Solenikov dmitry.ereminsolenikov@linaro.org Reviewed-and-tested-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-generic/m4/odp_schedule.m4 b/m4/odp_scheduler.m4 similarity index 73% rename from platform/linux-generic/m4/odp_schedule.m4 rename to m4/odp_scheduler.m4 index 70be5a7d..23cc7da3 100644 --- a/platform/linux-generic/m4/odp_schedule.m4 +++ b/m4/odp_scheduler.m4 @@ -1,6 +1,11 @@ +# ODP_SCHEDULER +# ------------- +# Select default scheduler +AC_DEFUN([ODP_SCHEDULER], [dnl AC_ARG_ENABLE([scheduler-default], [AS_HELP_STRING([enable-scheduler-default], [Choose default scheduler (default is basic)])], [], [enable_scheduler_default=basic]) AC_DEFINE_UNQUOTED([ODP_SCHEDULE_DEFAULT], ["$enable_scheduler_default"], [Define to name default scheduler]) +]) # ODP_SCHEDULER diff --git a/platform/linux-generic/m4/configure.m4 b/platform/linux-generic/m4/configure.m4 index 7fa3652e..083a6586 100644 --- a/platform/linux-generic/m4/configure.m4 +++ b/platform/linux-generic/m4/configure.m4 @@ -9,7 +9,7 @@ ODP_OPENSSL m4_include([platform/linux-generic/m4/odp_pcap.m4]) m4_include([platform/linux-generic/m4/odp_netmap.m4]) m4_include([platform/linux-generic/m4/odp_dpdk.m4]) -m4_include([platform/linux-generic/m4/odp_schedule.m4]) +ODP_SCHEDULER
m4_include([platform/linux-generic/m4/performance.m4])
commit d82cc9860dc59109ab5bbe793d41b39fe88fe594 Author: Dmitry Eremin-Solenikov dmitry.ereminsolenikov@linaro.org Date: Sat Mar 24 06:04:01 2018 +0300
travis: switch to DPDK 17.11
Signed-off-by: Dmitry Eremin-Solenikov dmitry.ereminsolenikov@linaro.org Reviewed-and-tested-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/.travis.yml b/.travis.yml index c4ed22fd..70f152e8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -49,7 +49,7 @@ env: # for individual commit validation. But you you want to track tests history # you need generated new one at https://codecov.io specific for your repo. - CODECOV_TOKEN=8e1c0fd8-62ff-411e-a79f-5839f6662c11 - - DPDK_VERS="17.08" + - DPDK_VERS="17.11" matrix: - CONF="" - CONF="--disable-abi-compat"
commit fb3e2e1ee824b776d7c7d2231b318871fc54004e Author: Dmitry Eremin-Solenikov dmitry.ereminsolenikov@linaro.org Date: Sat Mar 24 04:54:11 2018 +0300
linux-dpdk: port to DPDK 17.11
Signed-off-by: Dmitry Eremin-Solenikov dmitry.ereminsolenikov@linaro.org Reviewed-and-tested-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/README b/platform/linux-dpdk/README index 927755f7..c75d94a3 100644 --- a/platform/linux-dpdk/README +++ b/platform/linux-dpdk/README @@ -37,7 +37,11 @@ Prerequisites and considerations:
Fetching the DPDK code: ---------------------- -Right now odp-dpdk only supports DPDK v17.08: +Right now odp-dpdk supports DPDK v17.11 and v17.08: + git clone http://dpdk.org/git/dpdk-stable --branch 17.11 --depth 1 ./<dpdk-dir> + +or + git clone http://dpdk.org/git/dpdk-stable --branch 17.08 --depth 1 ./<dpdk-dir>
Compile DPDK: diff --git a/platform/linux-dpdk/odp_pool.c b/platform/linux-dpdk/odp_pool.c index 27446346..f0effa0d 100644 --- a/platform/linux-dpdk/odp_pool.c +++ b/platform/linux-dpdk/odp_pool.c @@ -31,6 +31,7 @@
/* for DPDK */ #include <odp_packet_dpdk.h> +#include <rte_version.h>
#ifdef POOL_USE_TICKETLOCK #include <odp/api/ticketlock.h> @@ -205,8 +206,13 @@ odp_dpdk_mbuf_ctor(struct rte_mempool *mp, /* Start of buffer is just after the ODP type specific header * which contains in the very beginning the rte_mbuf struct */ mb->buf_addr = (char *)mb + mb_ctor_arg->seg_buf_offset; +#if RTE_VERSION < RTE_VERSION_NUM(17, 11, 0, 0) mb->buf_physaddr = rte_mempool_virt2phy(mp, mb) + mb_ctor_arg->seg_buf_offset; +#else + mb->buf_physaddr = rte_mempool_virt2iova(mb) + + mb_ctor_arg->seg_buf_offset; +#endif mb->buf_len = mb_ctor_arg->seg_buf_size; mb->priv_size = rte_pktmbuf_priv_size(mp);
commit 485d29d7abd32e107e72bb336bd5ff315bae7cc5 Author: Dmitry Eremin-Solenikov dmitry.ereminsolenikov@linaro.org Date: Fri Mar 30 13:32:22 2018 +0300
linux-dpdk: add missing rte_config includes
DPDK 17.11 requires inclusion of rte_config.h before including other DPDK headers. Add missing include directive.
Signed-off-by: Dmitry Eremin-Solenikov dmitry.ereminsolenikov@linaro.org Reviewed-and-tested-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h index d282670e..44fe53da 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h @@ -31,6 +31,7 @@ extern "C" { #include <string.h> /* Required by rte_mbuf.h */ #include <sys/types.h> +#include <rte_config.h> #include <rte_mbuf.h>
/** @cond _ODP_HIDE_FROM_DOXYGEN_ */ diff --git a/platform/linux-dpdk/include/odp_buffer_internal.h b/platform/linux-dpdk/include/odp_buffer_internal.h index d328f4e1..42697911 100644 --- a/platform/linux-dpdk/include/odp_buffer_internal.h +++ b/platform/linux-dpdk/include/odp_buffer_internal.h @@ -35,6 +35,7 @@ extern "C" { #include <stddef.h>
/* DPDK */ +#include <rte_config.h> #include <rte_mbuf.h>
ODP_STATIC_ASSERT(CONFIG_PACKET_SEG_LEN_MIN >= 256, diff --git a/platform/linux-dpdk/include/odp_packet_internal.h b/platform/linux-dpdk/include/odp_packet_internal.h index adcde52e..8607f0be 100644 --- a/platform/linux-dpdk/include/odp_packet_internal.h +++ b/platform/linux-dpdk/include/odp_packet_internal.h @@ -33,6 +33,7 @@ extern "C" { #include <protocols/eth.h> #include <odp_queue_if.h>
+#include <rte_config.h> #include <rte_acl_osdep.h>
/** Minimum segment length expected by packet_parse_common() */ diff --git a/platform/linux-dpdk/odp_shared_memory.c b/platform/linux-dpdk/odp_shared_memory.c index 573dddaa..1134aa23 100644 --- a/platform/linux-dpdk/odp_shared_memory.c +++ b/platform/linux-dpdk/odp_shared_memory.c @@ -19,6 +19,7 @@ #include <unistd.h> #include <inttypes.h>
+#include <rte_config.h> #include <rte_lcore.h> #include <rte_memzone.h>
diff --git a/platform/linux-dpdk/odp_thread.c b/platform/linux-dpdk/odp_thread.c index bb6718d5..bf644a98 100644 --- a/platform/linux-dpdk/odp_thread.c +++ b/platform/linux-dpdk/odp_thread.c @@ -21,6 +21,7 @@ #include <odp_schedule_if.h> #include <odp/api/plat/thread_inlines.h>
+#include <rte_config.h> #include <rte_lcore.h>
#include <string.h>
commit b5adaba04a5b36b7df9adbac80ed0cef0b3aa038 Author: Dmitry Eremin-Solenikov dmitry.ereminsolenikov@linaro.org Date: Fri Mar 23 23:14:53 2018 +0300
build: restore support for building l-generic and l-dpdk
Signed-off-by: Dmitry Eremin-Solenikov dmitry.ereminsolenikov@linaro.org Reviewed-and-tested-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/Makefile.am b/Makefile.am index 6a5d5296..6a69e85f 100644 --- a/Makefile.am +++ b/Makefile.am @@ -3,6 +3,10 @@ AM_DISTCHECK_CONFIGURE_FLAGS = --enable-user-guides \ --enable-helper-linux \ --with-testdir
+if PLATFORM_IS_LINUX_GENERIC +PLATFORM_DIR = platform/linux-generic +PLATFORM_TEST_DIR = platform/linux-generic/test +endif if PLATFORM_IS_LINUX_DPDK PLATFORM_DIR = platform/linux-dpdk PLATFORM_TEST_DIR = platform/linux-dpdk/test diff --git a/configure.ac b/configure.ac index 1c9e2497..ee675279 100644 --- a/configure.ac +++ b/configure.ac @@ -260,7 +260,9 @@ m4_include([./test/m4/configure.m4]) ########################################################################## # Run platform specific checks and settings ########################################################################## -AS_IF([test "${with_platform}" = "linux-dpdk"], +AS_IF([test "${with_platform}" = "linux-generic"], + [m4_include([./platform/linux-generic/m4/configure.m4])], + [test "${with_platform}" = "linux-dpdk"], [m4_include([./platform/linux-dpdk/m4/configure.m4])], [AC_MSG_ERROR([UNSUPPORTED PLATFORM: ${with_platform}])])
commit 3211c74f62cc103667da8dc79940b8902998665f Author: Dmitry Eremin-Solenikov dmitry.ereminsolenikov@linaro.org Date: Fri Mar 23 23:35:37 2018 +0300
linux-dpdk: use libodp-linux library name
Use ABI-defined libodp-linux name for odp-dpdk implementation.
Signed-off-by: Dmitry Eremin-Solenikov dmitry.ereminsolenikov@linaro.org Reviewed-and-tested-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/.travis.yml b/.travis.yml index 28d9dab5..c4ed22fd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -139,10 +139,10 @@ script: - echo "Checking linking and run from install..." - pushd $HOME - echo "Dynamic link.." - - ${CC} ${CFLAGS} ${OLDPWD}/example/hello/odp_hello.c -o odp_hello_inst_dynamic `PKG_CONFIG_PATH=${HOME}/odp-install/lib/pkgconfig:${PKG_CONFIG_PATH} pkg-config --cflags --libs libodp-dpdk` + - ${CC} ${CFLAGS} ${OLDPWD}/example/hello/odp_hello.c -o odp_hello_inst_dynamic `PKG_CONFIG_PATH=${HOME}/odp-install/lib/pkgconfig:${PKG_CONFIG_PATH} pkg-config --cflags --libs libodp-linux` - sudo ODP_PLATFORM_PARAMS="-n 2" LD_LIBRARY_PATH="${HOME}/odp-install/lib:$LD_LIBRARY_PATH" ./odp_hello_inst_dynamic - echo "Static link.." - - ${CC} ${CFLAGS} ${OLDPWD}/example/hello/odp_hello.c -o odp_hello_inst_static `PKG_CONFIG_PATH=${HOME}/odp-install/lib/pkgconfig:${PKG_CONFIG_PATH} pkg-config --cflags --libs libodp-dpdk --static` -static + - ${CC} ${CFLAGS} ${OLDPWD}/example/hello/odp_hello.c -o odp_hello_inst_static `PKG_CONFIG_PATH=${HOME}/odp-install/lib/pkgconfig:${PKG_CONFIG_PATH} pkg-config --cflags --libs libodp-linux --static` -static - sudo ODP_PLATFORM_PARAMS="-n 2" ./odp_hello_inst_static
jobs: diff --git a/example/Makefile.inc b/example/Makefile.inc index 0bebada9..34145ee6 100644 --- a/example/Makefile.inc +++ b/example/Makefile.inc @@ -4,7 +4,7 @@ include $(top_srcdir)/Makefile.inc
TESTS_ENVIRONMENT = EXEEXT=${EXEEXT}
-LDADD = $(LIB)/libodp-dpdk.la $(LIB)/libodphelper.la +LDADD = $(LIB)/libodp-linux.la $(LIB)/libodphelper.la
# Do not link to DPDK twice in case of dynamic linking with ODP if STATIC_APPS diff --git a/helper/Makefile.am b/helper/Makefile.am index 364e7ce5..15948cc4 100644 --- a/helper/Makefile.am +++ b/helper/Makefile.am @@ -59,6 +59,6 @@ __LIB__libodphelper_la_SOURCES += \ linux/thread.c endif
-__LIB__libodphelper_la_LIBADD = $(PTHREAD_LIBS) $(LIB)/libodp-dpdk.la +__LIB__libodphelper_la_LIBADD = $(PTHREAD_LIBS) $(LIB)/libodp-linux.la
lib_LTLIBRARIES = $(LIB)/libodphelper.la diff --git a/platform/Makefile.inc b/platform/Makefile.inc index 1d24f263..bb23a4cb 100644 --- a/platform/Makefile.inc +++ b/platform/Makefile.inc @@ -1,10 +1,10 @@ include $(top_srcdir)/Makefile.inc
pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = libodp-dpdk.pc +pkgconfig_DATA = libodp-linux.pc
VPATH = $(srcdir) $(builddir) -lib_LTLIBRARIES = $(LIB)/libodp-dpdk.la +lib_LTLIBRARIES = $(LIB)/libodp-linux.la
AM_LDFLAGS = -version-number '$(ODP_LIBSO_VERSION)'
diff --git a/platform/linux-dpdk/.gitignore b/platform/linux-dpdk/.gitignore index 4f49449a..fd5ade7e 100644 --- a/platform/linux-dpdk/.gitignore +++ b/platform/linux-dpdk/.gitignore @@ -1 +1 @@ -libodp-dpdk.pc +libodp-linux.pc diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 6abf7bb8..83af08e7 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -121,7 +121,7 @@ noinst_HEADERS = \ include/protocols/udp.h \ Makefile.inc
-__LIB__libodp_dpdk_la_SOURCES = \ +__LIB__libodp_linux_la_SOURCES = \ ../linux-generic/odp_atomic.c \ ../linux-generic/odp_barrier.c \ ../linux-generic/odp_bitmap.c \ @@ -173,7 +173,7 @@ __LIB__libodp_dpdk_la_SOURCES = \ ../linux-generic/odp_weak.c
if ODP_ABI_COMPAT -__LIB__libodp_dpdk_la_SOURCES += \ +__LIB__libodp_linux_la_SOURCES += \ ../linux-generic/odp_atomic_api.c \ ../linux-generic/odp_byteorder.c \ ../linux-generic/odp_packet_api.c \ @@ -186,7 +186,7 @@ __LIB__libodp_dpdk_la_SOURCES += \ endif
if ARCH_IS_ARM -__LIB__libodp_dpdk_la_SOURCES += arch/default/odp_cpu_cycles.c \ +__LIB__libodp_linux_la_SOURCES += arch/default/odp_cpu_cycles.c \ arch/default/odp_global_time.c \ arch/default/odp_sysinfo_parse.c if !ODP_ABI_COMPAT @@ -199,7 +199,7 @@ noinst_HEADERS += arch/arm/odp_atomic.h \ arch/arm/odp_llsc.h endif if ARCH_IS_AARCH64 -__LIB__libodp_dpdk_la_SOURCES += arch/default/odp_cpu_cycles.c \ +__LIB__libodp_linux_la_SOURCES += arch/default/odp_cpu_cycles.c \ arch/aarch64/odp_global_time.c \ arch/default/odp_sysinfo_parse.c if !ODP_ABI_COMPAT @@ -212,7 +212,7 @@ noinst_HEADERS += arch/aarch64/odp_atomic.h \ arch/aarch64/odp_llsc.h endif if ARCH_IS_DEFAULT -__LIB__libodp_dpdk_la_SOURCES += arch/default/odp_cpu_cycles.c \ +__LIB__libodp_linux_la_SOURCES += arch/default/odp_cpu_cycles.c \ arch/default/odp_global_time.c \ arch/default/odp_sysinfo_parse.c if !ODP_ABI_COMPAT @@ -222,7 +222,7 @@ noinst_HEADERS += arch/default/odp_cpu.h \ arch/default/odp_cpu_idling.h endif if ARCH_IS_MIPS64 -__LIB__libodp_dpdk_la_SOURCES += arch/mips64/odp_cpu_cycles.c \ +__LIB__libodp_linux_la_SOURCES += arch/mips64/odp_cpu_cycles.c \ arch/default/odp_global_time.c \ arch/mips64/odp_sysinfo_parse.c if !ODP_ABI_COMPAT @@ -232,7 +232,7 @@ noinst_HEADERS += arch/default/odp_cpu.h \ arch/default/odp_cpu_idling.h endif if ARCH_IS_POWERPC -__LIB__libodp_dpdk_la_SOURCES += arch/default/odp_cpu_cycles.c \ +__LIB__libodp_linux_la_SOURCES += arch/default/odp_cpu_cycles.c \ arch/default/odp_global_time.c \ arch/powerpc/odp_sysinfo_parse.c if !ODP_ABI_COMPAT @@ -242,7 +242,7 @@ noinst_HEADERS += arch/default/odp_cpu.h \ arch/default/odp_cpu_idling.h endif if ARCH_IS_X86 -__LIB__libodp_dpdk_la_SOURCES += arch/x86/cpu_flags.c \ +__LIB__libodp_linux_la_SOURCES += arch/x86/cpu_flags.c \ arch/x86/odp_cpu_cycles.c \ arch/x86/odp_global_time.c \ arch/x86/odp_sysinfo_parse.c @@ -254,8 +254,8 @@ noinst_HEADERS += arch/default/odp_cpu.h \ arch/default/odp_cpu_idling.h endif
-__LIB__libodp_dpdk_la_LIBADD = $(ATOMIC_LIBS) -__LIB__libodp_dpdk_la_LIBADD += $(OPENSSL_LIBS) -__LIB__libodp_dpdk_la_LIBADD += $(DPDK_LIBS_LIBODP) -__LIB__libodp_dpdk_la_LIBADD += $(PTHREAD_LIBS) -__LIB__libodp_dpdk_la_LIBADD += $(TIMER_LIBS) +__LIB__libodp_linux_la_LIBADD = $(ATOMIC_LIBS) +__LIB__libodp_linux_la_LIBADD += $(OPENSSL_LIBS) +__LIB__libodp_linux_la_LIBADD += $(DPDK_LIBS_LIBODP) +__LIB__libodp_linux_la_LIBADD += $(PTHREAD_LIBS) +__LIB__libodp_linux_la_LIBADD += $(TIMER_LIBS) diff --git a/platform/linux-dpdk/libodp-dpdk.pc.in b/platform/linux-dpdk/libodp-linux.pc.in similarity index 85% rename from platform/linux-dpdk/libodp-dpdk.pc.in rename to platform/linux-dpdk/libodp-linux.pc.in index 9dc7f8d9..4076edea 100644 --- a/platform/linux-dpdk/libodp-dpdk.pc.in +++ b/platform/linux-dpdk/libodp-linux.pc.in @@ -3,9 +3,9 @@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@
-Name: libodp-dpdk +Name: libodp-linux Description: The ODP packet processing engine Version: @PKGCONFIG_VERSION@ -Libs: -L${libdir} -lodp-dpdk +Libs: -L${libdir} -lodp-linux Libs.private: @DPDK_LIBS@ @OPENSSL_STATIC_LIBS@ @PTHREAD_LIBS@ @TIMER_LIBS@ -lpthread @ATOMIC_LIBS@ Cflags: -I${includedir} @DPDK_CPPFLAGS@ diff --git a/platform/linux-dpdk/m4/configure.m4 b/platform/linux-dpdk/m4/configure.m4 index 9863e384..78bfb4d7 100644 --- a/platform/linux-dpdk/m4/configure.m4 +++ b/platform/linux-dpdk/m4/configure.m4 @@ -6,6 +6,7 @@ ODP_ATOMIC # linux-generic PCAP support is not relevant as the code doesn't use # linux-generic pktio at all. And DPDK has its own PCAP support anyway AM_CONDITIONAL([HAVE_PCAP], [false]) +AM_CONDITIONAL([PKTIO_DPDK], [false]) ODP_PTHREAD ODP_TIMER ODP_OPENSSL @@ -37,7 +38,7 @@ AC_CONFIG_COMMANDS_PRE([dnl AM_CONDITIONAL([PLATFORM_IS_LINUX_DPDK], [test "${with_platform}" = "linux-dpdk"]) AC_CONFIG_FILES([platform/linux-dpdk/Makefile - platform/linux-dpdk/libodp-dpdk.pc + platform/linux-dpdk/libodp-linux.pc platform/linux-dpdk/test/Makefile platform/linux-dpdk/test/validation/api/pktio/Makefile]) ]) diff --git a/test/Makefile.inc b/test/Makefile.inc index 43262a8c..3c61dfed 100644 --- a/test/Makefile.inc +++ b/test/Makefile.inc @@ -4,7 +4,7 @@ include $(top_srcdir)/Makefile.inc
COMMON_DIR = $(top_builddir)/test/common
-LIBODP = $(LIB)/libodphelper.la $(LIB)/libodp-dpdk.la +LIBODP = $(LIB)/libodphelper.la $(LIB)/libodp-linux.la
LIBCUNIT_COMMON = $(COMMON_DIR)/libcunit_common.la LIBCPUMASK_COMMON = $(COMMON_DIR)/libcpumask_common.la
commit 64b94677637d6ac5def4e1da159fdd9286e9fccb Author: Dmitry Eremin-Solenikov dmitry.ereminsolenikov@linaro.org Date: Fri Mar 23 22:58:23 2018 +0300
linux-dpdk: default to use system-wide DPDK if none was specified
Signed-off-by: Dmitry Eremin-Solenikov dmitry.ereminsolenikov@linaro.org Reviewed-and-tested-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/m4/configure.m4 b/platform/linux-dpdk/m4/configure.m4 index f10e5920..9863e384 100644 --- a/platform/linux-dpdk/m4/configure.m4 +++ b/platform/linux-dpdk/m4/configure.m4 @@ -16,7 +16,7 @@ m4_include([platform/linux-dpdk/m4/odp_schedule.m4]) ########################################################################## AC_ARG_WITH([dpdk-path], [AS_HELP_STRING([--with-dpdk-path=DIR], [path to dpdk build directory])], - [DPDK_PATH="$withval"],[]) + [DPDK_PATH="$withval"],[DPDK_PATH=system])
########################################################################## # Check for DPDK availability
commit 770291452ff591ec0ec54bbabb75813d7915e1a0 Author: Matias Elo matias.elo@nokia.com Date: Wed Mar 28 10:46:05 2018 +0300
scripts: remove deprecated scripts
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/scripts/builddeb b/scripts/builddeb deleted file mode 100755 index e20f85c7..00000000 --- a/scripts/builddeb +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/bash - -set -e - -export ROOT_DIR=$(readlink -e $(dirname $0) | sed 's|/scripts||') - -source ${ROOT_DIR}/scripts/common_pkg_build.sh - -# debuild default options -DEB_OPTS="-us -uc" - -# Also allow the user to create just the source package (skip build process) -if [ "$1" == source ]; then - prepare_tarball archive - DEB_OPTS="-S $DEB_OPTS" -else - prepare_tarball -fi - -pushd ${ROOT_DIR}/${package}-${version} -cp -r ${ROOT_DIR}/pkg/debian . - -current=$(cat .so_version |awk -F : '{print $1}') -rename 's,(.*dpdk)(.*),${1}'"${current}"'${2},' debian/*odp*-dpdk.install - -sed -i "s:(libodp[a-zA-Z-]+dpdk)(-dbg|$| ):\1${current}\2:g" debian/control -sed -i "s:(libodp[a-zA-Z-]+dpdk)(-dbg| ):\1${current}\2:g" debian/rules - -if [ $(egrep ".([a-z0-9]{8}>|dirty)" .scmversion |wc -l) -gt 0 ]; then - export DEBFULLNAME="Donald Duck" - export DEBEMAIL="donald.duck@linaro.org" - dch --newversion ${version}-1 --urgency low "not a official release!" -fi - -debuild $DEB_OPTS -popd -popd diff --git a/scripts/devbuild.sh b/scripts/devbuild.sh deleted file mode 100755 index 2b98d84b..00000000 --- a/scripts/devbuild.sh +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/sh - -# You can overwrite most of these variables with a wrapper script -# The next 4 variables specify the directories used -export REPOS=${REPOS:-/local/repo/odp} -export CHECK_ODP_DIR=${CHECK_ODP_DIR:-$REPOS/check-odp} -export ROOT_DIR_DPDK=${ROOT_DIR_DPDK:-$REPOS/dpdk} -export GENERIC_BUILDDIR=${GENERIC_BUILDDIR:-$REPOS/odp-dpdk} -# These are passed to ODP configure -export CONFIGURE_FLAGS="${CONFIGURE_FLAGS:- --enable-debug \ ---enable-debug-print --enable-cunit-support --enable-test-vald \ ---enable-shared=yes --enable-static=yes --enable-user-guides \ ---enable-shared-dpdk}" -# where to mount huge pages -export HUGEPAGEDIR=${HUGEPAGEDIR:-/mnt/huge} -# don't build CUnit for us -export VALIDATION=0 -# Number of threads for compiling (make -j NUM_CPUS) -export NUM_CPUS=${NUM_CPUS:-3} -# Don't delete our working directories -export CLEANUP=0 -# Don't run the relocated build test -export RELOCATE_TEST=0 - -if [ -z $1 ]; then - echo "Usage: $0 [dpdk | odp | odp-check | {unit_test} ]" >&2 - echo "Build DPDK, ODP-DPDK or both. You need a successful build of" \ - "the first to build the second." >&2 - echo "odp-check runs all unit tests (make check), but you can run" \ - "them separately as well, e.g. buffer_main." >&2 - echo "The argument after the individual unit test is passed as" \ - "parameter, e.g "odp_pktio_run setup"" >&2 - exit 1 -fi - -while [ "$1" != "" ]; -do -case $1 in - dpdk) - cd $CHECK_ODP_DIR - # Build only DPDK - export BUILD_DEPS=2 - ./build-dpdk.sh - if [ $? -ne 0 ]; then - exit 1 - fi - ;; - odp) - cd $CHECK_ODP_DIR - git clean -xfd - # That prevents make check to run - export ARCH=nocheck - # Don't build DPDK - export BUILD_DEPS=0 - ./build-dpdk.sh - if [ $? -ne 0 ]; then - exit 1 - fi - ;; - odp-check) - cd $GENERIC_BUILDDIR - ODP_PLATFORM_PARAMS="-n 3" make check && make doxygen-run && \ - make -C doc - ;; - *) - export TEST=$1 - shift - sudo ODP_PLATFORM_PARAMS="-n 3" ODP_GDB=$ODP_GDB\ - $GENERIC_BUILDDIR/test/linux-dpdk/wrapper-script.sh \ - $CHECK_ODP_DIR/new-build/bin/$TEST $1 - if [ "$1" = "" ]; then - exit - fi - ;; -esac -shift -done
commit 002161535f9deb03d65d5c85bd070c1f16a6ca0a Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 23:08:53 2018 +0200
Port f737af0 "linux-gen: queue: ring based queue implementation"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 810aedb7..6abf7bb8 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -106,7 +106,7 @@ noinst_HEADERS = \ ${top_srcdir}/platform/linux-generic/include/odp_queue_if.h \ ${top_srcdir}/platform/linux-generic/include/odp_queue_lf.h \ ${top_srcdir}/platform/linux-generic/include/odp_ring_internal.h \ - ${top_srcdir}/platform/linux-generic/include/odp_ring_st_internal.h \ + include/odp_ring_st_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_schedule_if.h \ ${top_srcdir}/platform/linux-generic/include/odp_sorted_list_internal.h \ include/odp_shm_internal.h \ @@ -149,7 +149,7 @@ __LIB__libodp_dpdk_la_SOURCES = \ ../linux-generic/pktio/null.c \ ../linux-generic/odp_pkt_queue.c \ odp_pool.c \ - ../linux-generic/odp_queue_basic.c \ + odp_queue_basic.c \ odp_queue_if.c \ ../linux-generic/odp_queue_lf.c \ ../linux-generic/odp_rwlock.c \ diff --git a/platform/linux-dpdk/include/odp_buffer_internal.h b/platform/linux-dpdk/include/odp_buffer_internal.h index cccab51f..d328f4e1 100644 --- a/platform/linux-dpdk/include/odp_buffer_internal.h +++ b/platform/linux-dpdk/include/odp_buffer_internal.h @@ -43,8 +43,6 @@ ODP_STATIC_ASSERT(CONFIG_PACKET_SEG_LEN_MIN >= 256, ODP_STATIC_ASSERT(CONFIG_PACKET_MAX_SEGS < 256, "Maximum of 255 segments supported");
-#define BUFFER_BURST_SIZE CONFIG_BURST_SIZE - struct odp_buffer_hdr_t { /* Underlying DPDK rte_mbuf */ struct rte_mbuf mb; @@ -61,16 +59,6 @@ struct odp_buffer_hdr_t { /* Event type. Maybe different than pool type (crypto compl event) */ int8_t event_type;
- /* Burst counts */ - uint8_t burst_num; - uint8_t burst_first; - - /* Next buf in a list */ - struct odp_buffer_hdr_t *next; - - /* Burst table */ - struct odp_buffer_hdr_t *burst[BUFFER_BURST_SIZE]; - /* --- Mostly read only data --- */ const void *user_ptr;
@@ -78,8 +66,6 @@ struct odp_buffer_hdr_t { void *pool_ptr; };
-ODP_STATIC_ASSERT(BUFFER_BURST_SIZE < 256, "BUFFER_BURST_SIZE_TOO_LARGE"); - int odp_buffer_snprint(char *str, uint32_t n, odp_buffer_t buf);
/* diff --git a/platform/linux-dpdk/include/odp_ring_st_internal.h b/platform/linux-dpdk/include/odp_ring_st_internal.h new file mode 100644 index 00000000..1a92aa0b --- /dev/null +++ b/platform/linux-dpdk/include/odp_ring_st_internal.h @@ -0,0 +1,90 @@ +/* Copyright (c) 2018, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef ODP_RING_ST_INTERNAL_H_ +#define ODP_RING_ST_INTERNAL_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "config.h" + +#include <odp/api/queue.h> + +#include <odp_debug_internal.h> + +#include <rte_config.h> +#include <rte_ring.h> +#include <rte_errno.h> + +typedef struct rte_ring *ring_st_t; + +/* Basic ring for single thread usage. Operations must be synchronized by using + * locks (or other means), when multiple threads use the same ring. */ + +static void name_to_mz_name(const char *name, char *ring_name) +{ + int i = 0; + int max_len = ODP_QUEUE_NAME_LEN < RTE_RING_NAMESIZE ? + ODP_QUEUE_NAME_LEN : RTE_RING_NAMESIZE; + + do { + snprintf(ring_name, max_len, "%d-%s", i++, name); + ring_name[max_len - 1] = 0; + } while (rte_ring_lookup(ring_name) != NULL); +} + +/* Initialize ring. Ring size must be a power of two. */ +static inline ring_st_t ring_st_create(const char *name, uint32_t size) +{ + struct rte_ring *rte_ring; + char ring_name[RTE_RING_NAMESIZE]; + + /* Ring name must be unique */ + name_to_mz_name(name, ring_name); + + rte_ring = rte_ring_create(ring_name, size, rte_socket_id(), + RING_F_SP_ENQ | RING_F_SC_DEQ); + if (rte_ring == NULL) { + ODP_ERR("Creating DPDK ring failed: %s\n", + rte_strerror(rte_errno)); + return NULL; + } + + return rte_ring; +} + +static inline void ring_st_free(ring_st_t ring) +{ + rte_ring_free(ring); +} + +/* Dequeue data from the ring head. Max_num is smaller than ring size.*/ +static inline uint32_t ring_st_deq_multi(ring_st_t ring, void **data, + uint32_t max_num) +{ + return rte_ring_dequeue_burst(ring, data, max_num, NULL); +} + +/* Enqueue data into the ring tail. Num_data is smaller than ring size. */ +static inline uint32_t ring_st_enq_multi(ring_st_t ring, void **data, + uint32_t num_data) +{ + return rte_ring_enqueue_burst(ring, data, num_data, NULL); +} + +/* Check if ring is empty */ +static inline int ring_st_is_empty(ring_st_t ring) +{ + return rte_ring_empty(ring); +} + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index c685b7c3..86c0314d 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -200,8 +200,6 @@ int odp_packet_reset(odp_packet_t pkt, uint32_t len) pkt_hdr->p.l3_offset = ODP_PACKET_OFFSET_INVALID; pkt_hdr->p.l4_offset = ODP_PACKET_OFFSET_INVALID;
- pkt_hdr->buf_hdr.next = NULL; - pkt_hdr->input = ODP_PKTIO_INVALID; pkt_hdr->subtype = ODP_EVENT_PACKET_BASIC;
diff --git a/platform/linux-dpdk/odp_pool.c b/platform/linux-dpdk/odp_pool.c index 07de5b34..27446346 100644 --- a/platform/linux-dpdk/odp_pool.c +++ b/platform/linux-dpdk/odp_pool.c @@ -559,7 +559,6 @@ static odp_buffer_t buffer_alloc(pool_t *pool) }
buf_hdr = mbuf_to_buf_hdr(mbuf); - buf_hdr->next = NULL;
return buf_from_buf_hdr(buf_hdr); } diff --git a/platform/linux-dpdk/odp_queue_basic.c b/platform/linux-dpdk/odp_queue_basic.c new file mode 100644 index 00000000..b30d19cc --- /dev/null +++ b/platform/linux-dpdk/odp_queue_basic.c @@ -0,0 +1,764 @@ +/* Copyright (c) 2013-2018, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "config.h" + +#include <odp/api/queue.h> +#include <odp_queue_internal.h> +#include <odp_queue_lf.h> +#include <odp_queue_if.h> +#include <odp/api/std_types.h> +#include <odp/api/align.h> +#include <odp/api/buffer.h> +#include <odp_buffer_internal.h> +#include <odp_pool_internal.h> +#include <odp_buffer_inlines.h> +#include <odp_internal.h> +#include <odp/api/shared_memory.h> +#include <odp/api/schedule.h> +#include <odp_schedule_if.h> +#include <odp_config_internal.h> +#include <odp_packet_io_internal.h> +#include <odp_debug_internal.h> +#include <odp/api/hints.h> +#include <odp/api/sync.h> +#include <odp/api/traffic_mngr.h> + +#define NUM_INTERNAL_QUEUES 64 + +#include <odp/api/plat/ticketlock_inlines.h> +#define LOCK(queue_ptr) _odp_ticketlock_lock(&((queue_ptr)->s.lock)) +#define UNLOCK(queue_ptr) _odp_ticketlock_unlock(&((queue_ptr)->s.lock)) +#define LOCK_INIT(queue_ptr) odp_ticketlock_init(&((queue_ptr)->s.lock)) + +#include <string.h> +#include <inttypes.h> + +static int queue_init(queue_entry_t *queue, const char *name, + const odp_queue_param_t *param); + +typedef struct queue_global_t { + queue_entry_t queue[ODP_CONFIG_QUEUES]; + uint32_t queue_lf_num; + uint32_t queue_lf_size; + queue_lf_func_t queue_lf_func; + +} queue_global_t; + +static queue_global_t *queue_glb; + +static inline queue_entry_t *get_qentry(uint32_t queue_id) +{ + return &queue_glb->queue[queue_id]; +} + +static inline queue_entry_t *handle_to_qentry(odp_queue_t handle) +{ + uint32_t queue_id = queue_to_index(handle); + + return get_qentry(queue_id); +} + +static int queue_init_global(void) +{ + uint32_t i; + odp_shm_t shm; + uint32_t lf_size = 0; + queue_lf_func_t *lf_func; + + ODP_DBG("Queue init ... "); + + shm = odp_shm_reserve("odp_queues", + sizeof(queue_global_t), + sizeof(queue_entry_t), 0); + + queue_glb = odp_shm_addr(shm); + + if (queue_glb == NULL) + return -1; + + memset(queue_glb, 0, sizeof(queue_global_t)); + + for (i = 0; i < ODP_CONFIG_QUEUES; i++) { + /* init locks */ + queue_entry_t *queue = get_qentry(i); + + LOCK_INIT(queue); + queue->s.index = i; + queue->s.handle = queue_from_index(i); + } + + lf_func = &queue_glb->queue_lf_func; + queue_glb->queue_lf_num = queue_lf_init_global(&lf_size, lf_func); + queue_glb->queue_lf_size = lf_size; + + ODP_DBG("done\n"); + ODP_DBG("Queue init global\n"); + ODP_DBG(" struct queue_entry_s size %zu\n", + sizeof(struct queue_entry_s)); + ODP_DBG(" queue_entry_t size %zu\n", + sizeof(queue_entry_t)); + ODP_DBG("\n"); + + return 0; +} + +static int queue_init_local(void) +{ + return 0; +} + +static int queue_term_local(void) +{ + return 0; +} + +static int queue_term_global(void) +{ + int ret = 0; + int rc = 0; + queue_entry_t *queue; + int i; + + for (i = 0; i < ODP_CONFIG_QUEUES; i++) { + queue = &queue_glb->queue[i]; + LOCK(queue); + if (queue->s.status != QUEUE_STATUS_FREE) { + ODP_ERR("Not destroyed queue: %s\n", queue->s.name); + rc = -1; + } + UNLOCK(queue); + } + + queue_lf_term_global(); + + ret = odp_shm_free(odp_shm_lookup("odp_queues")); + if (ret < 0) { + ODP_ERR("shm free failed for odp_queues"); + rc = -1; + } + + return rc; +} + +static int queue_capability(odp_queue_capability_t *capa) +{ + memset(capa, 0, sizeof(odp_queue_capability_t)); + + /* Reserve some queues for internal use */ + capa->max_queues = ODP_CONFIG_QUEUES - NUM_INTERNAL_QUEUES; + capa->max_ordered_locks = sched_fn->max_ordered_locks(); + capa->max_sched_groups = sched_fn->num_grps(); + capa->sched_prios = odp_schedule_num_prio(); + capa->plain.max_num = capa->max_queues; + capa->plain.max_size = CONFIG_QUEUE_SIZE - 1; + capa->plain.lockfree.max_num = queue_glb->queue_lf_num; + capa->plain.lockfree.max_size = queue_glb->queue_lf_size; + capa->sched.max_num = capa->max_queues; + capa->sched.max_size = CONFIG_QUEUE_SIZE - 1; + + return 0; +} + +static odp_queue_type_t queue_type(odp_queue_t handle) +{ + return handle_to_qentry(handle)->s.type; +} + +static odp_schedule_sync_t queue_sched_type(odp_queue_t handle) +{ + return handle_to_qentry(handle)->s.param.sched.sync; +} + +static odp_schedule_prio_t queue_sched_prio(odp_queue_t handle) +{ + return handle_to_qentry(handle)->s.param.sched.prio; +} + +static odp_schedule_group_t queue_sched_group(odp_queue_t handle) +{ + return handle_to_qentry(handle)->s.param.sched.group; +} + +static uint32_t queue_lock_count(odp_queue_t handle) +{ + queue_entry_t *queue = handle_to_qentry(handle); + + return queue->s.param.sched.sync == ODP_SCHED_SYNC_ORDERED ? + queue->s.param.sched.lock_count : 0; +} + +static odp_queue_t queue_create(const char *name, + const odp_queue_param_t *param) +{ + uint32_t i; + queue_entry_t *queue; + void *queue_lf; + odp_queue_t handle = ODP_QUEUE_INVALID; + odp_queue_type_t type = ODP_QUEUE_TYPE_PLAIN; + odp_queue_param_t default_param; + + if (param == NULL) { + odp_queue_param_init(&default_param); + param = &default_param; + } + + if (param->nonblocking == ODP_BLOCKING) { + if (param->size > CONFIG_QUEUE_SIZE) + return ODP_QUEUE_INVALID; + } else if (param->nonblocking == ODP_NONBLOCKING_LF) { + /* Only plain type lock-free queues supported */ + if (param->type != ODP_QUEUE_TYPE_PLAIN) + return ODP_QUEUE_INVALID; + if (param->size > queue_glb->queue_lf_size) + return ODP_QUEUE_INVALID; + } else { + /* Wait-free queues not supported */ + return ODP_QUEUE_INVALID; + } + + for (i = 0; i < ODP_CONFIG_QUEUES; i++) { + queue = &queue_glb->queue[i]; + + if (queue->s.status != QUEUE_STATUS_FREE) + continue; + + LOCK(queue); + if (queue->s.status == QUEUE_STATUS_FREE) { + if (queue_init(queue, name, param)) { + UNLOCK(queue); + return ODP_QUEUE_INVALID; + } + + if (param->nonblocking == ODP_NONBLOCKING_LF) { + queue_lf_func_t *lf_func; + + lf_func = &queue_glb->queue_lf_func; + + queue_lf = queue_lf_create(queue); + + if (queue_lf == NULL) { + UNLOCK(queue); + return ODP_QUEUE_INVALID; + } + queue->s.queue_lf = queue_lf; + + queue->s.enqueue = lf_func->enq; + queue->s.enqueue_multi = lf_func->enq_multi; + queue->s.dequeue = lf_func->deq; + queue->s.dequeue_multi = lf_func->deq_multi; + } + + type = queue->s.type; + + if (type == ODP_QUEUE_TYPE_SCHED) + queue->s.status = QUEUE_STATUS_NOTSCHED; + else + queue->s.status = QUEUE_STATUS_READY; + + handle = queue->s.handle; + UNLOCK(queue); + break; + } + UNLOCK(queue); + } + + if (handle == ODP_QUEUE_INVALID) + return ODP_QUEUE_INVALID; + + if (type == ODP_QUEUE_TYPE_SCHED) { + if (sched_fn->init_queue(queue->s.index, + &queue->s.param.sched)) { + queue->s.status = QUEUE_STATUS_FREE; + ODP_ERR("schedule queue init failed\n"); + return ODP_QUEUE_INVALID; + } + } + + return handle; +} + +void sched_cb_queue_destroy_finalize(uint32_t queue_index) +{ + queue_entry_t *queue = get_qentry(queue_index); + + LOCK(queue); + + if (queue->s.status == QUEUE_STATUS_DESTROYED) { + queue->s.status = QUEUE_STATUS_FREE; + sched_fn->destroy_queue(queue_index); + } + UNLOCK(queue); +} + +static int queue_destroy(odp_queue_t handle) +{ + queue_entry_t *queue; + + queue = handle_to_qentry(handle); + + if (handle == ODP_QUEUE_INVALID) + return -1; + + LOCK(queue); + if (queue->s.status == QUEUE_STATUS_FREE) { + UNLOCK(queue); + ODP_ERR("queue "%s" already free\n", queue->s.name); + return -1; + } + if (queue->s.status == QUEUE_STATUS_DESTROYED) { + UNLOCK(queue); + ODP_ERR("queue "%s" already destroyed\n", queue->s.name); + return -1; + } + if (ring_st_is_empty(queue->s.ring_st) == 0) { + UNLOCK(queue); + ODP_ERR("queue "%s" not empty\n", queue->s.name); + return -1; + } + ring_st_free(queue->s.ring_st); + + switch (queue->s.status) { + case QUEUE_STATUS_READY: + queue->s.status = QUEUE_STATUS_FREE; + break; + case QUEUE_STATUS_NOTSCHED: + queue->s.status = QUEUE_STATUS_FREE; + sched_fn->destroy_queue(queue->s.index); + break; + case QUEUE_STATUS_SCHED: + /* Queue is still in scheduling */ + queue->s.status = QUEUE_STATUS_DESTROYED; + break; + default: + ODP_ABORT("Unexpected queue status\n"); + } + + if (queue->s.param.nonblocking == ODP_NONBLOCKING_LF) + queue_lf_destroy(queue->s.queue_lf); + + UNLOCK(queue); + + return 0; +} + +static int queue_context_set(odp_queue_t handle, void *context, + uint32_t len ODP_UNUSED) +{ + odp_mb_full(); + handle_to_qentry(handle)->s.param.context = context; + odp_mb_full(); + return 0; +} + +static void *queue_context(odp_queue_t handle) +{ + return handle_to_qentry(handle)->s.param.context; +} + +static odp_queue_t queue_lookup(const char *name) +{ + uint32_t i; + + for (i = 0; i < ODP_CONFIG_QUEUES; i++) { + queue_entry_t *queue = &queue_glb->queue[i]; + + if (queue->s.status == QUEUE_STATUS_FREE || + queue->s.status == QUEUE_STATUS_DESTROYED) + continue; + + LOCK(queue); + if (strcmp(name, queue->s.name) == 0) { + /* found it */ + UNLOCK(queue); + return queue->s.handle; + } + UNLOCK(queue); + } + + return ODP_QUEUE_INVALID; +} + +static inline int enq_multi(queue_t q_int, odp_buffer_hdr_t *buf_hdr[], + int num) +{ + int sched = 0; + int ret; + queue_entry_t *queue; + int num_enq; + + queue = qentry_from_int(q_int); + + if (sched_fn->ord_enq_multi(q_int, (void **)buf_hdr, num, &ret)) + return ret; + + LOCK(queue); + + if (odp_unlikely(queue->s.status < QUEUE_STATUS_READY)) { + UNLOCK(queue); + ODP_ERR("Bad queue status\n"); + return -1; + } + + num_enq = ring_st_enq_multi(queue->s.ring_st, (void **)buf_hdr, num); + + if (odp_unlikely(num_enq == 0)) { + UNLOCK(queue); + return 0; + } + + if (queue->s.status == QUEUE_STATUS_NOTSCHED) { + queue->s.status = QUEUE_STATUS_SCHED; + sched = 1; + } + + UNLOCK(queue); + + /* Add queue to scheduling */ + if (sched && sched_fn->sched_queue(queue->s.index)) + ODP_ABORT("schedule_queue failed\n"); + + return num_enq; +} + +static int queue_int_enq_multi(queue_t q_int, odp_buffer_hdr_t *buf_hdr[], + int num) +{ + return enq_multi(q_int, buf_hdr, num); +} + +static int queue_int_enq(queue_t q_int, odp_buffer_hdr_t *buf_hdr) +{ + int ret; + + ret = enq_multi(q_int, &buf_hdr, 1); + + if (ret == 1) + return 0; + else + return -1; +} + +static int queue_enq_multi(odp_queue_t handle, const odp_event_t ev[], int num) +{ + queue_entry_t *queue = handle_to_qentry(handle); + + if (odp_unlikely(num == 0)) + return 0; + + if (num > QUEUE_MULTI_MAX) + num = QUEUE_MULTI_MAX; + + return queue->s.enqueue_multi(qentry_to_int(queue), + (odp_buffer_hdr_t **)(uintptr_t)ev, num); +} + +static int queue_enq(odp_queue_t handle, odp_event_t ev) +{ + queue_entry_t *queue = handle_to_qentry(handle); + + return queue->s.enqueue(qentry_to_int(queue), + (odp_buffer_hdr_t *)(uintptr_t)ev); +} + +static inline int deq_multi(queue_entry_t *queue, odp_buffer_hdr_t *buf_hdr[], + int num) +{ + int status_sync = sched_fn->status_sync; + int num_deq; + + LOCK(queue); + + if (odp_unlikely(queue->s.status < QUEUE_STATUS_READY)) { + /* Bad queue, or queue has been destroyed. + * Scheduler finalizes queue destroy after this. */ + UNLOCK(queue); + return -1; + } + + num_deq = ring_st_deq_multi(queue->s.ring_st, (void **)buf_hdr, num); + + if (num_deq == 0) { + /* Already empty queue */ + if (queue->s.status == QUEUE_STATUS_SCHED) { + queue->s.status = QUEUE_STATUS_NOTSCHED; + + if (status_sync) + sched_fn->unsched_queue(queue->s.index); + } + + UNLOCK(queue); + + return 0; + } + + if (status_sync && queue->s.type == ODP_QUEUE_TYPE_SCHED) + sched_fn->save_context(queue->s.index); + + UNLOCK(queue); + + return num_deq; +} + +static int queue_int_deq_multi(queue_t q_int, odp_buffer_hdr_t *buf_hdr[], + int num) +{ + queue_entry_t *queue = qentry_from_int(q_int); + + return deq_multi(queue, buf_hdr, num); +} + +static odp_buffer_hdr_t *queue_int_deq(queue_t q_int) +{ + queue_entry_t *queue = qentry_from_int(q_int); + odp_buffer_hdr_t *buf_hdr = NULL; + int ret; + + ret = deq_multi(queue, &buf_hdr, 1); + + if (ret == 1) + return buf_hdr; + else + return NULL; +} + +static int queue_deq_multi(odp_queue_t handle, odp_event_t ev[], int num) +{ + queue_entry_t *queue = handle_to_qentry(handle); + + if (num > QUEUE_MULTI_MAX) + num = QUEUE_MULTI_MAX; + + return queue->s.dequeue_multi(qentry_to_int(queue), + (odp_buffer_hdr_t **)ev, num); +} + +static odp_event_t queue_deq(odp_queue_t handle) +{ + queue_entry_t *queue = handle_to_qentry(handle); + + return (odp_event_t)queue->s.dequeue(qentry_to_int(queue)); +} + +static int queue_init(queue_entry_t *queue, const char *name, + const odp_queue_param_t *param) +{ + if (name == NULL) { + queue->s.name[0] = 0; + } else { + strncpy(queue->s.name, name, ODP_QUEUE_NAME_LEN - 1); + queue->s.name[ODP_QUEUE_NAME_LEN - 1] = 0; + } + memcpy(&queue->s.param, param, sizeof(odp_queue_param_t)); + if (queue->s.param.sched.lock_count > sched_fn->max_ordered_locks()) + return -1; + + if (param->type == ODP_QUEUE_TYPE_SCHED) + queue->s.param.deq_mode = ODP_QUEUE_OP_DISABLED; + + queue->s.type = queue->s.param.type; + + queue->s.enqueue = queue_int_enq; + queue->s.dequeue = queue_int_deq; + queue->s.enqueue_multi = queue_int_enq_multi; + queue->s.dequeue_multi = queue_int_deq_multi; + + queue->s.pktin = PKTIN_INVALID; + queue->s.pktout = PKTOUT_INVALID; + + queue->s.ring_st = ring_st_create(queue->s.name, CONFIG_QUEUE_SIZE); + if (queue->s.ring_st == NULL) + return -1; + + return 0; +} + +static void queue_param_init(odp_queue_param_t *params) +{ + memset(params, 0, sizeof(odp_queue_param_t)); + params->type = ODP_QUEUE_TYPE_PLAIN; + params->enq_mode = ODP_QUEUE_OP_MT; + params->deq_mode = ODP_QUEUE_OP_MT; + params->nonblocking = ODP_BLOCKING; + params->sched.prio = ODP_SCHED_PRIO_DEFAULT; + params->sched.sync = ODP_SCHED_SYNC_PARALLEL; + params->sched.group = ODP_SCHED_GROUP_ALL; +} + +static int queue_info(odp_queue_t handle, odp_queue_info_t *info) +{ + uint32_t queue_id; + queue_entry_t *queue; + int status; + + if (odp_unlikely(info == NULL)) { + ODP_ERR("Unable to store info, NULL ptr given\n"); + return -1; + } + + queue_id = queue_to_index(handle); + + if (odp_unlikely(queue_id >= ODP_CONFIG_QUEUES)) { + ODP_ERR("Invalid queue handle:%" PRIu64 "\n", + odp_queue_to_u64(handle)); + return -1; + } + + queue = get_qentry(queue_id); + + LOCK(queue); + status = queue->s.status; + + if (odp_unlikely(status == QUEUE_STATUS_FREE || + status == QUEUE_STATUS_DESTROYED)) { + UNLOCK(queue); + ODP_ERR("Invalid queue status:%d\n", status); + return -1; + } + + info->name = queue->s.name; + info->param = queue->s.param; + + UNLOCK(queue); + + return 0; +} + +int sched_cb_queue_deq_multi(uint32_t queue_index, odp_event_t ev[], int num) +{ + queue_entry_t *qe = get_qentry(queue_index); + + return deq_multi(qe, (odp_buffer_hdr_t **)ev, num); +} + +int sched_cb_queue_empty(uint32_t queue_index) +{ + queue_entry_t *queue = get_qentry(queue_index); + int ret = 0; + + LOCK(queue); + + if (odp_unlikely(queue->s.status < QUEUE_STATUS_READY)) { + /* Bad queue, or queue has been destroyed. */ + UNLOCK(queue); + return -1; + } + + if (ring_st_is_empty(queue->s.ring_st)) { + /* Already empty queue. Update status. */ + if (queue->s.status == QUEUE_STATUS_SCHED) + queue->s.status = QUEUE_STATUS_NOTSCHED; + + ret = 1; + } + + UNLOCK(queue); + + return ret; +} + +static uint64_t queue_to_u64(odp_queue_t hdl) +{ + return _odp_pri(hdl); +} + +static odp_pktout_queue_t queue_get_pktout(queue_t q_int) +{ + return qentry_from_int(q_int)->s.pktout; +} + +static void queue_set_pktout(queue_t q_int, odp_pktio_t pktio, int index) +{ + queue_entry_t *qentry = qentry_from_int(q_int); + + qentry->s.pktout.pktio = pktio; + qentry->s.pktout.index = index; +} + +static odp_pktin_queue_t queue_get_pktin(queue_t q_int) +{ + return qentry_from_int(q_int)->s.pktin; +} + +static void queue_set_pktin(queue_t q_int, odp_pktio_t pktio, int index) +{ + queue_entry_t *qentry = qentry_from_int(q_int); + + qentry->s.pktin.pktio = pktio; + qentry->s.pktin.index = index; +} + +static void queue_set_enq_deq_func(queue_t q_int, + queue_enq_fn_t enq, + queue_enq_multi_fn_t enq_multi, + queue_deq_fn_t deq, + queue_deq_multi_fn_t deq_multi) +{ + queue_entry_t *qentry = qentry_from_int(q_int); + + if (enq) + qentry->s.enqueue = enq; + + if (enq_multi) + qentry->s.enqueue_multi = enq_multi; + + if (deq) + qentry->s.dequeue = deq; + + if (deq_multi) + qentry->s.dequeue_multi = deq_multi; +} + +static queue_t queue_from_ext(odp_queue_t handle) +{ + return qentry_to_int(handle_to_qentry(handle)); +} + +static odp_queue_t queue_to_ext(queue_t q_int) +{ + return qentry_from_int(q_int)->s.handle; +} + +/* API functions */ +queue_api_t queue_basic_api = { + .queue_create = queue_create, + .queue_destroy = queue_destroy, + .queue_lookup = queue_lookup, + .queue_capability = queue_capability, + .queue_context_set = queue_context_set, + .queue_context = queue_context, + .queue_enq = queue_enq, + .queue_enq_multi = queue_enq_multi, + .queue_deq = queue_deq, + .queue_deq_multi = queue_deq_multi, + .queue_type = queue_type, + .queue_sched_type = queue_sched_type, + .queue_sched_prio = queue_sched_prio, + .queue_sched_group = queue_sched_group, + .queue_lock_count = queue_lock_count, + .queue_to_u64 = queue_to_u64, + .queue_param_init = queue_param_init, + .queue_info = queue_info +}; + +/* Functions towards internal components */ +queue_fn_t queue_basic_fn = { + .init_global = queue_init_global, + .term_global = queue_term_global, + .init_local = queue_init_local, + .term_local = queue_term_local, + .from_ext = queue_from_ext, + .to_ext = queue_to_ext, + .enq = queue_int_enq, + .enq_multi = queue_int_enq_multi, + .deq = queue_int_deq, + .deq_multi = queue_int_deq_multi, + .get_pktout = queue_get_pktout, + .set_pktout = queue_set_pktout, + .get_pktin = queue_get_pktin, + .set_pktin = queue_set_pktin, + .set_enq_deq_fn = queue_set_enq_deq_func +};
commit 7fa5521584d2141e1696cc2b8bc8e89560bf2043 Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 19:07:19 2018 +0200
linux-dpdk: time: use common linux-generic functions where possible
Fixes time overflow caused by double/uint64_t multiplication.
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_time.c b/platform/linux-dpdk/odp_time.c index b5fd2419..3107d24b 100644 --- a/platform/linux-dpdk/odp_time.c +++ b/platform/linux-dpdk/odp_time.c @@ -21,9 +21,7 @@ typedef odp_time_t (*time_from_ns_fn) (uint64_t ns); typedef uint64_t (*time_res_fn)(void);
typedef struct time_handler_ { - time_to_ns_fn time_to_ns; time_cur_fn time_cur; - time_from_ns_fn time_from_ns; time_res_fn time_res; } time_handler_t;
@@ -34,8 +32,6 @@ typedef struct time_global_t { uint64_t hw_freq_hz; /* DPDK specific */ time_handler_t handler; - double tick_per_nsec; - double nsec_per_tick; } time_global_t;
static time_global_t global; @@ -220,11 +216,6 @@ static inline uint64_t time_res_dpdk(void) return rte_get_timer_hz(); }
-static inline uint64_t time_to_ns_dpdk(odp_time_t time) -{ - return (time.u64 * global.nsec_per_tick); -} - static inline odp_time_t time_cur_dpdk(void) { odp_time_t time; @@ -234,15 +225,6 @@ static inline odp_time_t time_cur_dpdk(void) return time; }
-static inline odp_time_t time_from_ns_dpdk(uint64_t ns) -{ - odp_time_t time; - - time.u64 = ns * global.tick_per_nsec; - - return time; -} - static inline odp_time_t time_local(void) { return global.handler.time_cur(); @@ -282,22 +264,22 @@ uint64_t odp_time_diff_ns(odp_time_t t2, odp_time_t t1)
time.u64 = t2.u64 - t1.u64;
- return global.handler.time_to_ns(time); + return time_to_ns(time); }
uint64_t odp_time_to_ns(odp_time_t time) { - return global.handler.time_to_ns(time); + return time_to_ns(time); }
odp_time_t odp_time_local_from_ns(uint64_t ns) { - return global.handler.time_from_ns(ns); + return time_from_ns(ns); }
odp_time_t odp_time_global_from_ns(uint64_t ns) { - return global.handler.time_from_ns(ns); + return time_from_ns(ns); }
int odp_time_cmp(odp_time_t t2, odp_time_t t1) @@ -323,7 +305,7 @@ uint64_t odp_time_global_res(void) void odp_time_wait_ns(uint64_t ns) { odp_time_t cur = time_local(); - odp_time_t wait = global.handler.time_from_ns(ns); + odp_time_t wait = time_from_ns(ns); odp_time_t end_time = time_sum(cur, wait);
time_wait_until(end_time); @@ -385,15 +367,10 @@ int odp_time_init_global(void) memset(&global, 0, sizeof(time_global_t));
if (is_dpdk_timer_cycles_support()) { - global.handler.time_to_ns = time_to_ns_dpdk; global.handler.time_cur = time_cur_dpdk; - global.handler.time_from_ns = time_from_ns_dpdk; global.handler.time_res = time_res_dpdk; - global.tick_per_nsec = (double)time_res_dpdk() / - (double)ODP_TIME_SEC_IN_NS; - global.nsec_per_tick = (double)ODP_TIME_SEC_IN_NS / - (double)time_res_dpdk(); - + global.hw_freq_hz = time_res_dpdk(); + global.use_hw = 1; global.hw_start = rte_get_timer_cycles(); if (global.hw_start == 0) return -1; @@ -401,9 +378,7 @@ int odp_time_init_global(void) return 0; }
- global.handler.time_to_ns = time_to_ns; global.handler.time_cur = time_cur; - global.handler.time_from_ns = time_from_ns; global.handler.time_res = time_res;
if (cpu_has_global_time()) {
commit 1c81d1862c46e05a87fcd67a29f647aa62377c33 Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 21:56:04 2018 +0200
Port 14aed76 "linux-gen: packet: support L4 type No Next Header"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_inline_types.h b/platform/linux-dpdk/include/odp/api/plat/packet_inline_types.h index c30ba944..9e89f920 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_inline_types.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_inline_types.h @@ -90,6 +90,7 @@ typedef union { uint64_t tcp:1; /* TCP */ uint64_t sctp:1; /* SCTP */ uint64_t icmp:1; /* ICMP */ + uint64_t no_next_hdr:1; /* No Next Header */
uint64_t color:2; /* Packet color for traffic mgmt */ uint64_t nodrop:1; /* Drop eligibility status */ diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index 1034d5c0..c685b7c3 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -1454,6 +1454,10 @@ int packet_parse_common_l3_l4(packet_parser_t *prs, const uint8_t *parseptr, prs->input_flags.sctp = 1; break;
+ case _ODP_IPPROTO_NO_NEXT: + prs->input_flags.no_next_hdr = 1; + break; + default: prs->input_flags.l4 = 0; break; @@ -1683,6 +1687,8 @@ odp_proto_l4_type_t odp_packet_l4_type(odp_packet_t pkt) else if (pkt_hdr->p.input_flags.icmp && pkt_hdr->p.input_flags.ipv6) return ODP_PROTO_L4_TYPE_ICMPV6; + else if (pkt_hdr->p.input_flags.no_next_hdr) + return ODP_PROTO_L4_TYPE_NO_NEXT;
return ODP_PROTO_L4_TYPE_NONE; }
commit 71326f886c708b564508846bd0cb3e0489cf4949 Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 21:51:32 2018 +0200
Port d19651e "linux-gen: ipsec: provide global init/term functions"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_init.c b/platform/linux-dpdk/odp_init.c index b9082873..57a60bd9 100644 --- a/platform/linux-dpdk/odp_init.c +++ b/platform/linux-dpdk/odp_init.c @@ -273,6 +273,12 @@ int odp_init_global(odp_instance_t *instance, } stage = IPSEC_SAD_INIT;
+ if (_odp_ipsec_init_global()) { + ODP_ERR("ODP IPsec init failed.\n"); + goto init_failed; + } + stage = IPSEC_INIT; + /* Dummy support for single instance */ *instance = (odp_instance_t)odp_global_data.main_pid;
@@ -298,6 +304,13 @@ int _odp_term_global(enum init_stage stage)
switch (stage) { case ALL_INIT: + case IPSEC_INIT: + if (_odp_ipsec_term_global()) { + ODP_ERR("ODP IPsec term failed.\n"); + rc = -1; + } + /* Fall through */ + case IPSEC_SAD_INIT: if (_odp_ipsec_sad_term_global()) { ODP_ERR("ODP IPsec SAD term failed.\n");
commit fa671a12b96f4f6fa029e3269b74103795cdffbe Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 21:47:56 2018 +0200
Port 3706356 "linux-gen: packet: add odp_packet_l2_type() implementation"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index 7e1cb0a7..1034d5c0 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -1639,6 +1639,16 @@ int odp_packet_has_ref(odp_packet_t pkt) return 0; }
+odp_proto_l2_type_t odp_packet_l2_type(odp_packet_t pkt) +{ + odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt); + + if (pkt_hdr->p.input_flags.eth) + return ODP_PROTO_L2_TYPE_ETH; + + return ODP_PROTO_L2_TYPE_NONE; +} + odp_proto_l3_type_t odp_packet_l3_type(odp_packet_t pkt) { odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt);
commit 8ae8b5ffde0d4ab9f46b8a7a8421690f41257063 Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 21:46:31 2018 +0200
Port 1027502 "linux-gen: packet: implement packet l3/l4 proto types"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index 365a6ecf..7e1cb0a7 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -1638,3 +1638,41 @@ int odp_packet_has_ref(odp_packet_t pkt)
return 0; } + +odp_proto_l3_type_t odp_packet_l3_type(odp_packet_t pkt) +{ + odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt); + + if (pkt_hdr->p.input_flags.ipv4) + return ODP_PROTO_L3_TYPE_IPV4; + else if (pkt_hdr->p.input_flags.ipv6) + return ODP_PROTO_L3_TYPE_IPV6; + else if (pkt_hdr->p.input_flags.arp) + return ODP_PROTO_L3_TYPE_ARP; + + return ODP_PROTO_L3_TYPE_NONE; +} + +odp_proto_l4_type_t odp_packet_l4_type(odp_packet_t pkt) +{ + odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt); + + if (pkt_hdr->p.input_flags.tcp) + return ODP_PROTO_L4_TYPE_TCP; + else if (pkt_hdr->p.input_flags.udp) + return ODP_PROTO_L4_TYPE_UDP; + else if (pkt_hdr->p.input_flags.sctp) + return ODP_PROTO_L4_TYPE_SCTP; + else if (pkt_hdr->p.input_flags.ipsec_ah) + return ODP_PROTO_L4_TYPE_AH; + else if (pkt_hdr->p.input_flags.ipsec_esp) + return ODP_PROTO_L4_TYPE_ESP; + else if (pkt_hdr->p.input_flags.icmp && + pkt_hdr->p.input_flags.ipv4) + return ODP_PROTO_L4_TYPE_ICMPV4; + else if (pkt_hdr->p.input_flags.icmp && + pkt_hdr->p.input_flags.ipv6) + return ODP_PROTO_L4_TYPE_ICMPV6; + + return ODP_PROTO_L4_TYPE_NONE; +}
commit d8dfea4d963c8bca46417ce5a3cbac7f7996fd73 Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 21:40:44 2018 +0200
Port c51871c "example: generator: move script back to example directory"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/m4/configure.m4 b/platform/linux-dpdk/m4/configure.m4 index b4d7acc5..f10e5920 100644 --- a/platform/linux-dpdk/m4/configure.m4 +++ b/platform/linux-dpdk/m4/configure.m4 @@ -38,8 +38,6 @@ AM_CONDITIONAL([PLATFORM_IS_LINUX_DPDK], [test "${with_platform}" = "linux-dpdk"]) AC_CONFIG_FILES([platform/linux-dpdk/Makefile platform/linux-dpdk/libodp-dpdk.pc - platform/linux-dpdk/test/example/Makefile - platform/linux-dpdk/test/example/generator/Makefile platform/linux-dpdk/test/Makefile platform/linux-dpdk/test/validation/api/pktio/Makefile]) ]) diff --git a/platform/linux-dpdk/test/Makefile.am b/platform/linux-dpdk/test/Makefile.am index 6324d779..a872400e 100644 --- a/platform/linux-dpdk/test/Makefile.am +++ b/platform/linux-dpdk/test/Makefile.am @@ -3,10 +3,6 @@ TESTS_ENVIRONMENT += TEST_DIR=${top_builddir}/test/validation
SUBDIRS =
-if test_example -SUBDIRS += example -endif - if test_vald TESTS = validation/api/pktio/pktio_run.sh
diff --git a/platform/linux-dpdk/test/example/Makefile.am b/platform/linux-dpdk/test/example/Makefile.am deleted file mode 100644 index 41d28752..00000000 --- a/platform/linux-dpdk/test/example/Makefile.am +++ /dev/null @@ -1 +0,0 @@ -SUBDIRS = generator diff --git a/platform/linux-dpdk/test/example/generator b/platform/linux-dpdk/test/example/generator deleted file mode 120000 index 6f543c37..00000000 --- a/platform/linux-dpdk/test/example/generator +++ /dev/null @@ -1 +0,0 @@ -../../../linux-generic/test/example/generator/ \ No newline at end of file
commit 8162e09d5f6f2a727873bca82a0bb2446ff80e87 Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 21:02:22 2018 +0200
Port e0934ef "linux-gen: ring_st: ring for single thread usage"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 73347363..810aedb7 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -103,9 +103,10 @@ noinst_HEADERS = \ include/odp_pool_internal.h \ include/odp_posix_extensions.h \ ${top_srcdir}/platform/linux-generic/include/odp_queue_internal.h \ - ${top_srcdir}/platform/linux-generic/include/odp_ring_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_queue_if.h \ ${top_srcdir}/platform/linux-generic/include/odp_queue_lf.h \ + ${top_srcdir}/platform/linux-generic/include/odp_ring_internal.h \ + ${top_srcdir}/platform/linux-generic/include/odp_ring_st_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_schedule_if.h \ ${top_srcdir}/platform/linux-generic/include/odp_sorted_list_internal.h \ include/odp_shm_internal.h \
commit e3c0dd960475f308365bb88eff215bbc3fab1a62 Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 20:56:18 2018 +0200
Port 6c1aa43 "linux-gen: schedule, queue: select scheduler/queue via environment"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 1bf92374..73347363 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -149,12 +149,12 @@ __LIB__libodp_dpdk_la_SOURCES = \ ../linux-generic/odp_pkt_queue.c \ odp_pool.c \ ../linux-generic/odp_queue_basic.c \ - ../linux-generic/odp_queue_if.c \ + odp_queue_if.c \ ../linux-generic/odp_queue_lf.c \ ../linux-generic/odp_rwlock.c \ ../linux-generic/odp_rwlock_recursive.c \ ../linux-generic/odp_schedule_basic.c \ - ../linux-generic/odp_schedule_if.c \ + odp_schedule_if.c \ ../linux-generic/odp_schedule_sp.c \ ../linux-generic/odp_schedule_iquery.c \ odp_shared_memory.c \ diff --git a/platform/linux-dpdk/m4/odp_schedule.m4 b/platform/linux-dpdk/m4/odp_schedule.m4 index bb3980ca..70be5a7d 100644 --- a/platform/linux-dpdk/m4/odp_schedule.m4 +++ b/platform/linux-dpdk/m4/odp_schedule.m4 @@ -1,15 +1,6 @@ -AC_ARG_ENABLE([schedule-sp], - [ --enable-schedule-sp enable strict priority scheduler], - [if test x$enableval = xyes; then - schedule_sp_enabled=yes - AC_DEFINE([ODP_SCHEDULE_SP], [1], - [Define to 1 to enable strict priority scheduler]) - fi]) - -AC_ARG_ENABLE([schedule-iquery], - [ --enable-schedule-iquery enable interests query (sparse bitmap) scheduler], - [if test x$enableval = xyes; then - schedule_iquery_enabled=yes - AC_DEFINE([ODP_SCHEDULE_IQUERY], [1], - [Define to 1 to enable interests query scheduler]) - fi]) +AC_ARG_ENABLE([scheduler-default], + [AS_HELP_STRING([enable-scheduler-default], + [Choose default scheduler (default is basic)])], + [], [enable_scheduler_default=basic]) +AC_DEFINE_UNQUOTED([ODP_SCHEDULE_DEFAULT], ["$enable_scheduler_default"], + [Define to name default scheduler]) diff --git a/platform/linux-dpdk/odp_queue_if.c b/platform/linux-dpdk/odp_queue_if.c new file mode 100644 index 00000000..efda1760 --- /dev/null +++ b/platform/linux-dpdk/odp_queue_if.c @@ -0,0 +1,135 @@ +/* Copyright (c) 2018, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "config.h" + +#include <odp_queue_if.h> +#include <odp_internal.h> +#include <odp_debug_internal.h> + +#include <stdlib.h> +#include <string.h> + +extern const queue_api_t queue_basic_api; +extern const queue_fn_t queue_basic_fn; + +const queue_api_t *queue_api; +const queue_fn_t *queue_fn; + +odp_queue_t odp_queue_create(const char *name, const odp_queue_param_t *param) +{ + return queue_api->queue_create(name, param); +} + +int odp_queue_destroy(odp_queue_t queue) +{ + return queue_api->queue_destroy(queue); +} + +odp_queue_t odp_queue_lookup(const char *name) +{ + return queue_api->queue_lookup(name); +} + +int odp_queue_capability(odp_queue_capability_t *capa) +{ + return queue_api->queue_capability(capa); +} + +int odp_queue_context_set(odp_queue_t queue, void *context, uint32_t len) +{ + return queue_api->queue_context_set(queue, context, len); +} + +void *odp_queue_context(odp_queue_t queue) +{ + return queue_api->queue_context(queue); +} + +int odp_queue_enq(odp_queue_t queue, odp_event_t ev) +{ + return queue_api->queue_enq(queue, ev); +} + +int odp_queue_enq_multi(odp_queue_t queue, const odp_event_t events[], int num) +{ + return queue_api->queue_enq_multi(queue, events, num); +} + +odp_event_t odp_queue_deq(odp_queue_t queue) +{ + return queue_api->queue_deq(queue); +} + +int odp_queue_deq_multi(odp_queue_t queue, odp_event_t events[], int num) +{ + return queue_api->queue_deq_multi(queue, events, num); +} + +odp_queue_type_t odp_queue_type(odp_queue_t queue) +{ + return queue_api->queue_type(queue); +} + +odp_schedule_sync_t odp_queue_sched_type(odp_queue_t queue) +{ + return queue_api->queue_sched_type(queue); +} + +odp_schedule_prio_t odp_queue_sched_prio(odp_queue_t queue) +{ + return queue_api->queue_sched_prio(queue); +} + +odp_schedule_group_t odp_queue_sched_group(odp_queue_t queue) +{ + return queue_api->queue_sched_group(queue); +} + +uint32_t odp_queue_lock_count(odp_queue_t queue) +{ + return queue_api->queue_lock_count(queue); +} + +uint64_t odp_queue_to_u64(odp_queue_t hdl) +{ + return queue_api->queue_to_u64(hdl); +} + +void odp_queue_param_init(odp_queue_param_t *param) +{ + return queue_api->queue_param_init(param); +} + +int odp_queue_info(odp_queue_t queue, odp_queue_info_t *info) +{ + return queue_api->queue_info(queue, info); +} + +int _odp_queue_init_global(void) +{ + const char *sched = getenv("ODP_SCHEDULER"); + + if (sched == NULL || !strcmp(sched, "default")) + sched = ODP_SCHEDULE_DEFAULT; + + if (!strcmp(sched, "basic") || + !strcmp(sched, "sp") || + !strcmp(sched, "iquery")) { + queue_fn = &queue_basic_fn; + queue_api = &queue_basic_api; + } else { + ODP_ABORT("Unknown scheduler specified via ODP_SCHEDULER\n"); + return -1; + } + + return queue_fn->init_global(); +} + +int _odp_queue_term_global(void) +{ + return queue_fn->term_global(); +} diff --git a/platform/linux-dpdk/odp_schedule_if.c b/platform/linux-dpdk/odp_schedule_if.c new file mode 100644 index 00000000..c35a7101 --- /dev/null +++ b/platform/linux-dpdk/odp_schedule_if.c @@ -0,0 +1,168 @@ +/* Copyright (c) 2018, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "config.h" + +#include <odp_schedule_if.h> +#include <odp_internal.h> +#include <odp_debug_internal.h> + +#include <stdlib.h> +#include <string.h> + +extern const schedule_fn_t schedule_sp_fn; +extern const schedule_api_t schedule_sp_api; + +extern const schedule_fn_t schedule_basic_fn; +extern const schedule_api_t schedule_basic_api; + +extern const schedule_fn_t schedule_iquery_fn; +extern const schedule_api_t schedule_iquery_api; + +const schedule_fn_t *sched_fn; +const schedule_api_t *sched_api; + +uint64_t odp_schedule_wait_time(uint64_t ns) +{ + return sched_api->schedule_wait_time(ns); +} + +odp_event_t odp_schedule(odp_queue_t *from, uint64_t wait) +{ + return sched_api->schedule(from, wait); +} + +int odp_schedule_multi(odp_queue_t *from, uint64_t wait, odp_event_t events[], + int num) +{ + return sched_api->schedule_multi(from, wait, events, num); +} + +void odp_schedule_pause(void) +{ + return sched_api->schedule_pause(); +} + +void odp_schedule_resume(void) +{ + return sched_api->schedule_resume(); +} + +void odp_schedule_release_atomic(void) +{ + return sched_api->schedule_release_atomic(); +} + +void odp_schedule_release_ordered(void) +{ + return sched_api->schedule_release_ordered(); +} + +void odp_schedule_prefetch(int num) +{ + return sched_api->schedule_prefetch(num); +} + +int odp_schedule_num_prio(void) +{ + return sched_api->schedule_num_prio(); +} + +odp_schedule_group_t odp_schedule_group_create(const char *name, + const odp_thrmask_t *mask) +{ + return sched_api->schedule_group_create(name, mask); +} + +int odp_schedule_group_destroy(odp_schedule_group_t group) +{ + return sched_api->schedule_group_destroy(group); +} + +odp_schedule_group_t odp_schedule_group_lookup(const char *name) +{ + return sched_api->schedule_group_lookup(name); +} + +int odp_schedule_group_join(odp_schedule_group_t group, + const odp_thrmask_t *mask) +{ + return sched_api->schedule_group_join(group, mask); +} + +int odp_schedule_group_leave(odp_schedule_group_t group, + const odp_thrmask_t *mask) +{ + return sched_api->schedule_group_leave(group, mask); +} + +int odp_schedule_group_thrmask(odp_schedule_group_t group, + odp_thrmask_t *thrmask) +{ + return sched_api->schedule_group_thrmask(group, thrmask); +} + +int odp_schedule_group_info(odp_schedule_group_t group, + odp_schedule_group_info_t *info) +{ + return sched_api->schedule_group_info(group, info); +} + +void odp_schedule_order_lock(uint32_t lock_index) +{ + return sched_api->schedule_order_lock(lock_index); +} + +void odp_schedule_order_unlock(uint32_t lock_index) +{ + return sched_api->schedule_order_unlock(lock_index); +} + +void odp_schedule_order_unlock_lock(uint32_t unlock_index, uint32_t lock_index) +{ + sched_api->schedule_order_unlock_lock(unlock_index, lock_index); +} + +void odp_schedule_order_lock_start(uint32_t lock_index) +{ + sched_api->schedule_order_lock_start(lock_index); +} + +void odp_schedule_order_lock_wait(uint32_t lock_index) +{ + sched_api->schedule_order_lock_wait(lock_index); +} + +int _odp_schedule_init_global(void) +{ + const char *sched = getenv("ODP_SCHEDULER"); + + if (sched == NULL || !strcmp(sched, "default")) + sched = ODP_SCHEDULE_DEFAULT; + + ODP_PRINT("Using scheduler '%s'\n", sched); + + if (!strcmp(sched, "basic")) { + sched_fn = &schedule_basic_fn; + sched_api = &schedule_basic_api; + } else if (!strcmp(sched, "sp")) { + sched_fn = &schedule_sp_fn; + sched_api = &schedule_sp_api; + } else if (!strcmp(sched, "iquery")) { + sched_fn = &schedule_iquery_fn; + sched_api = &schedule_iquery_api; + } else { + ODP_ABORT("Unknown scheduler specified via ODP_SCHEDULER\n"); + return -1; + } + + return sched_fn->init_global(); +} + +int _odp_schedule_term_global(void) +{ + return sched_fn->term_global(); +}
commit cbb2f2c2fa7f5ec0f430fe776b01049192d53de5 Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 20:52:35 2018 +0200
Port 5934c2c "linux-gen: rename traditional scheduler and queue to basic"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 2f69da7e..1bf92374 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -148,12 +148,12 @@ __LIB__libodp_dpdk_la_SOURCES = \ ../linux-generic/pktio/null.c \ ../linux-generic/odp_pkt_queue.c \ odp_pool.c \ - ../linux-generic/odp_queue.c \ + ../linux-generic/odp_queue_basic.c \ ../linux-generic/odp_queue_if.c \ ../linux-generic/odp_queue_lf.c \ ../linux-generic/odp_rwlock.c \ ../linux-generic/odp_rwlock_recursive.c \ - ../linux-generic/odp_schedule.c \ + ../linux-generic/odp_schedule_basic.c \ ../linux-generic/odp_schedule_if.c \ ../linux-generic/odp_schedule_sp.c \ ../linux-generic/odp_schedule_iquery.c \
commit 97d6e3be58ce99f8c8d00167851204eed5f32dd8 Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 20:49:59 2018 +0200
Port a8d1ed5 "linux-gen: sched: encapsulate sched init/term_global functions"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_init.c b/platform/linux-dpdk/odp_init.c index 049f87a7..b9082873 100644 --- a/platform/linux-dpdk/odp_init.c +++ b/platform/linux-dpdk/odp_init.c @@ -219,7 +219,7 @@ int odp_init_global(odp_instance_t *instance, } stage = QUEUE_INIT;
- if (sched_fn->init_global()) { + if (_odp_schedule_init_global()) { ODP_ERR("ODP schedule init failed.\n"); goto init_failed; } @@ -355,7 +355,7 @@ int _odp_term_global(enum init_stage stage) /* Fall through */
case SCHED_INIT: - if (sched_fn->term_global()) { + if (_odp_schedule_term_global()) { ODP_ERR("ODP schedule term failed.\n"); rc = -1; }
commit 29244cdd30f8f77d37ddd1154e4023803156dff2 Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 20:46:22 2018 +0200
Port a924494 "linux-gen: queue: encapsulate queue init/term_global functions"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_init.c b/platform/linux-dpdk/odp_init.c index 7a0ae475..049f87a7 100644 --- a/platform/linux-dpdk/odp_init.c +++ b/platform/linux-dpdk/odp_init.c @@ -213,7 +213,7 @@ int odp_init_global(odp_instance_t *instance, } stage = POOL_INIT;
- if (queue_fn->init_global()) { + if (_odp_queue_init_global()) { ODP_ERR("ODP queue init failed.\n"); goto init_failed; } @@ -362,7 +362,7 @@ int _odp_term_global(enum init_stage stage) /* Fall through */
case QUEUE_INIT: - if (queue_fn->term_global()) { + if (_odp_queue_term_global()) { ODP_ERR("ODP queue term failed.\n"); rc = -1; }
commit dffb865b8d02a7fc4dd3c8df062eb11a91d00bd0 Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 17:41:05 2018 +0200
Port 9b1578f "linux-gen: packet: implement packet_data_seg_len"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h index 63210028..d282670e 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h @@ -87,6 +87,13 @@ static inline uint32_t _odp_packet_len(odp_packet_t pkt) return _odp_pkt_get(pkt, uint32_t, pkt_len); }
+static inline void *_odp_packet_data_seg_len(odp_packet_t pkt, + uint32_t *seg_len) +{ + *seg_len = _odp_packet_seg_len(pkt); + return _odp_packet_data(pkt); +} + static inline uint32_t _odp_packet_headroom(odp_packet_t pkt) { return rte_pktmbuf_headroom(&_odp_pkt_get(pkt, struct rte_mbuf, mb)); diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_inlines_api.h b/platform/linux-dpdk/include/odp/api/plat/packet_inlines_api.h index f362c4ef..3d373a47 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_inlines_api.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_inlines_api.h @@ -23,6 +23,11 @@ _ODP_INLINE uint32_t odp_packet_seg_len(odp_packet_t pkt) return _odp_packet_seg_len(pkt); }
+_ODP_INLINE void *odp_packet_data_seg_len(odp_packet_t pkt, uint32_t *seg_len) +{ + return _odp_packet_data_seg_len(pkt, seg_len); +} + _ODP_INLINE uint32_t odp_packet_len(odp_packet_t pkt) { return _odp_packet_len(pkt);
commit 29f908a7fd445796fc0f7a34d729c43af2a3d0a6 Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 17:27:38 2018 +0200
Port bf7b5c1 "linux-gen: add L2 type support for non-ABI-compat mode"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/packet.h b/platform/linux-dpdk/include-abi/odp/api/abi/packet.h index d4c49708..6e46b875 100644 --- a/platform/linux-dpdk/include-abi/odp/api/abi/packet.h +++ b/platform/linux-dpdk/include-abi/odp/api/abi/packet.h @@ -35,6 +35,11 @@ typedef ODP_HANDLE_T(odp_packet_seg_t);
#define ODP_PACKET_SEG_INVALID _odp_cast_scalar(odp_packet_seg_t, NULL)
+typedef uint8_t odp_proto_l2_type_t; + +#define ODP_PROTO_L2_TYPE_NONE 0 +#define ODP_PROTO_L2_TYPE_ETH 1 + typedef uint8_t odp_proto_l3_type_t;
#define ODP_PROTO_L3_TYPE_NONE 0
commit d8b6f93bec370873246842ce570cd5c0c1c3ac8b Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 17:25:50 2018 +0200
Port b5cb45b "api: packet: add protocol type enumeration"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/packet.h b/platform/linux-dpdk/include-abi/odp/api/abi/packet.h index b2f2c6e9..d4c49708 100644 --- a/platform/linux-dpdk/include-abi/odp/api/abi/packet.h +++ b/platform/linux-dpdk/include-abi/odp/api/abi/packet.h @@ -35,6 +35,34 @@ typedef ODP_HANDLE_T(odp_packet_seg_t);
#define ODP_PACKET_SEG_INVALID _odp_cast_scalar(odp_packet_seg_t, NULL)
+typedef uint8_t odp_proto_l3_type_t; + +#define ODP_PROTO_L3_TYPE_NONE 0 +#define ODP_PROTO_L3_TYPE_ARP 1 +#define ODP_PROTO_L3_TYPE_RARP 2 +#define ODP_PROTO_L3_TYPE_MPLS 3 +#define ODP_PROTO_L3_TYPE_IPV4 4 +#define ODP_PROTO_L3_TYPE_IPV6 6 + +typedef uint8_t odp_proto_l4_type_t; + +/* Numbers from IANA Assigned Internet Protocol Numbers list */ +#define ODP_PROTO_L4_TYPE_NONE 0 +#define ODP_PROTO_L4_TYPE_ICMPV4 1 +#define ODP_PROTO_L4_TYPE_IGMP 2 +#define ODP_PROTO_L4_TYPE_IPV4 4 +#define ODP_PROTO_L4_TYPE_TCP 6 +#define ODP_PROTO_L4_TYPE_UDP 17 +#define ODP_PROTO_L4_TYPE_IPV6 41 +#define ODP_PROTO_L4_TYPE_GRE 47 +#define ODP_PROTO_L4_TYPE_ESP 50 +#define ODP_PROTO_L4_TYPE_AH 51 +#define ODP_PROTO_L4_TYPE_ICMPV6 58 +#define ODP_PROTO_L4_TYPE_NO_NEXT 59 +#define ODP_PROTO_L4_TYPE_IPCOMP 108 +#define ODP_PROTO_L4_TYPE_SCTP 132 +#define ODP_PROTO_L4_TYPE_ROHC 142 + typedef enum { ODP_PACKET_GREEN = 0, ODP_PACKET_YELLOW = 1,
commit 18e7c597a26e2a2231042e02214fb6abd6f868e5 Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 17:21:39 2018 +0200
Port 1c8ed0b "linux-gen: packet: initialize user ptr to NULL"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_inline_types.h b/platform/linux-dpdk/include/odp/api/plat/packet_inline_types.h index 3e05098e..c30ba944 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_inline_types.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_inline_types.h @@ -36,6 +36,7 @@ typedef struct _odp_packet_inline_offset_t { uint16_t l4_offset; uint16_t timestamp; uint16_t input_flags; + uint16_t flags; uint16_t buf_addr; uint16_t data; uint16_t pkt_len; @@ -107,7 +108,12 @@ typedef union { uint32_t all_flags;
struct { - uint32_t reserved1: 12; + uint32_t reserved1: 11; + + /* + * Init flags + */ + uint32_t user_ptr_set: 1; /* User has set a non-NULL value */
/* * Packet output flags @@ -133,8 +139,8 @@ typedef union {
/* Flag groups */ struct { - uint32_t reserved2: 12; - uint32_t other: 12; /* All other flags */ + uint32_t reserved2: 11; + uint32_t other: 13; /* All other flags */ uint32_t error: 8; /* All error flags */ } all;
diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h index 2096e62e..63210028 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h @@ -125,6 +125,13 @@ static inline int _odp_packet_num_segs(odp_packet_t pkt)
static inline void *_odp_packet_user_ptr(odp_packet_t pkt) { + _odp_packet_flags_t flags; + + flags.all_flags = _odp_pkt_get(pkt, uint32_t, flags); + + if (flags.user_ptr_set == 0) + return NULL; + return _odp_pkt_get(pkt, void *, user_ptr); }
diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index a4631560..365a6ecf 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -40,6 +40,7 @@ const _odp_packet_inline_offset_t ODP_ALIGNED_CACHE _odp_packet_inline = { .l4_offset = offsetof(odp_packet_hdr_t, p.l4_offset), .timestamp = offsetof(odp_packet_hdr_t, timestamp), .input_flags = offsetof(odp_packet_hdr_t, p.input_flags), + .flags = offsetof(odp_packet_hdr_t, p.flags), .buf_addr = offsetof(odp_packet_hdr_t, buf_hdr.mb.buf_addr), .data = offsetof(odp_packet_hdr_t, buf_hdr.mb.data_off), .pkt_len = offsetof(odp_packet_hdr_t, buf_hdr.mb.pkt_len), @@ -525,7 +526,15 @@ int odp_packet_trunc_tail(odp_packet_t *pkt, uint32_t len, void **tail_ptr,
void odp_packet_user_ptr_set(odp_packet_t pkt, const void *ptr) { - packet_hdr(pkt)->buf_hdr.user_ptr = ptr; + odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt); + + if (odp_unlikely(ptr == NULL)) { + pkt_hdr->p.flags.user_ptr_set = 0; + return; + } + + pkt_hdr->buf_hdr.user_ptr = ptr; + pkt_hdr->p.flags.user_ptr_set = 1; }
int odp_packet_l2_offset_set(odp_packet_t pkt, uint32_t offset)
commit 9bd8bba34adb3e78dd7f2412b7f0b617d07fb209 Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 17:16:13 2018 +0200
Port 5e01519 "linux-gen: packet: clean up error and output flags"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_inline_types.h b/platform/linux-dpdk/include/odp/api/plat/packet_inline_types.h index 691560d3..3e05098e 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_inline_types.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_inline_types.h @@ -99,6 +99,47 @@ typedef union { }; } _odp_packet_input_flags_t;
+/* + * Additional packet flags + */ +typedef union { + /* All flags */ + uint32_t all_flags; + + struct { + uint32_t reserved1: 12; + + /* + * Packet output flags + */ + uint32_t l3_chksum_set: 1; /* L3 chksum bit is valid */ + uint32_t l3_chksum: 1; /* L3 chksum override */ + uint32_t l4_chksum_set: 1; /* L4 chksum bit is valid */ + uint32_t l4_chksum: 1; /* L4 chksum override */ + uint32_t shaper_len_adj: 8; /* Adjustment for traffic mgr */ + + /* + * Error flags + */ + uint32_t snap_len_err: 1; /* Snap length error */ + uint32_t ip_err: 1; /* IP error */ + uint32_t l3_chksum_err: 1; /* L3 checksum error */ + uint32_t tcp_err: 1; /* TCP error */ + uint32_t udp_err: 1; /* UDP error */ + uint32_t l4_chksum_err: 1; /* L4 checksum error */ + uint32_t ipsec_err: 1; /* IPsec error */ + uint32_t crypto_err: 1; /* Crypto packet operation error */ + }; + + /* Flag groups */ + struct { + uint32_t reserved2: 12; + uint32_t other: 12; /* All other flags */ + uint32_t error: 8; /* All error flags */ + } all; + +} _odp_packet_flags_t; + /** @endcond */
#ifdef __cplusplus diff --git a/platform/linux-dpdk/include/odp_packet_internal.h b/platform/linux-dpdk/include/odp_packet_internal.h index 124ffbc7..adcde52e 100644 --- a/platform/linux-dpdk/include/odp_packet_internal.h +++ b/platform/linux-dpdk/include/odp_packet_internal.h @@ -41,31 +41,8 @@ extern "C" { ODP_STATIC_ASSERT(sizeof(_odp_packet_input_flags_t) == sizeof(uint64_t), "INPUT_FLAGS_SIZE_ERROR");
-/** - * Packet error flags - */ -typedef union { - /* All error flags */ - uint32_t all; - - struct { - /* Bitfield flags for each detected error */ - uint32_t app_error:1; /**< Error bit for application use */ - uint32_t frame_len:1; /**< Frame length error */ - uint32_t snap_len:1; /**< Snap length error */ - uint32_t l2_chksum:1; /**< L2 checksum error, checks TBD */ - uint32_t ip_err:1; /**< IP error, checks TBD */ - uint32_t l3_chksum:1; /**< L3 checksum error */ - uint32_t tcp_err:1; /**< TCP error, checks TBD */ - uint32_t udp_err:1; /**< UDP error, checks TBD */ - uint32_t ipsec_err:1; /**< IPsec error */ - uint32_t crypto_err:1; /**< Crypto packet operation error */ - uint32_t l4_chksum:1; /**< L4 checksum error */ - }; -} error_flags_t; - -ODP_STATIC_ASSERT(sizeof(error_flags_t) == sizeof(uint32_t), - "ERROR_FLAGS_SIZE_ERROR"); +ODP_STATIC_ASSERT(sizeof(_odp_packet_flags_t) == sizeof(uint32_t), + "PACKET_FLAGS_SIZE_ERROR");
/** * Packet output flags @@ -93,9 +70,11 @@ ODP_STATIC_ASSERT(sizeof(output_flags_t) == sizeof(uint32_t), * Packet parser metadata */ typedef struct { + /* Packet input flags */ _odp_packet_input_flags_t input_flags; - error_flags_t error_flags; - output_flags_t output_flags; + + /* Other flags */ + _odp_packet_flags_t flags;
/* offset to L2 hdr, e.g. Eth */ uint16_t l2_offset; @@ -186,8 +165,7 @@ static inline void packet_subtype_set(odp_packet_t pkt, int ev) static inline void packet_init(odp_packet_hdr_t *pkt_hdr) { pkt_hdr->p.input_flags.all = 0; - pkt_hdr->p.output_flags.all = 0; - pkt_hdr->p.error_flags.all = 0; + pkt_hdr->p.flags.all_flags = 0;
pkt_hdr->p.l2_offset = 0; pkt_hdr->p.l3_offset = ODP_PACKET_OFFSET_INVALID; diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index 91378b69..a4631560 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -85,9 +85,8 @@ static inline odp_buffer_t packet_to_buffer(odp_packet_t pkt) void packet_parse_reset(odp_packet_hdr_t *pkt_hdr) { /* Reset parser metadata before new parse */ - pkt_hdr->p.error_flags.all = 0; pkt_hdr->p.input_flags.all = 0; - pkt_hdr->p.output_flags.all = 0; + pkt_hdr->p.flags.all.error = 0; pkt_hdr->p.l2_offset = ODP_PACKET_OFFSET_INVALID; pkt_hdr->p.l3_offset = ODP_PACKET_OFFSET_INVALID; pkt_hdr->p.l4_offset = ODP_PACKET_OFFSET_INVALID; @@ -194,8 +193,7 @@ int odp_packet_reset(odp_packet_t pkt, uint32_t len) }
pkt_hdr->p.input_flags.all = 0; - pkt_hdr->p.output_flags.all = 0; - pkt_hdr->p.error_flags.all = 0; + pkt_hdr->p.flags.all_flags = 0;
pkt_hdr->p.l2_offset = 0; pkt_hdr->p.l3_offset = ODP_PACKET_OFFSET_INVALID; @@ -576,16 +574,16 @@ void odp_packet_l3_chksum_insert(odp_packet_t pkt, int insert) { odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt);
- pkt_hdr->p.output_flags.l3_chksum_set = 1; - pkt_hdr->p.output_flags.l3_chksum = insert; + pkt_hdr->p.flags.l3_chksum_set = 1; + pkt_hdr->p.flags.l3_chksum = insert; }
void odp_packet_l4_chksum_insert(odp_packet_t pkt, int insert) { odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt);
- pkt_hdr->p.output_flags.l4_chksum_set = 1; - pkt_hdr->p.output_flags.l4_chksum = insert; + pkt_hdr->p.flags.l4_chksum_set = 1; + pkt_hdr->p.flags.l4_chksum = insert; }
odp_packet_chksum_status_t odp_packet_l3_chksum_status(odp_packet_t pkt) @@ -595,7 +593,7 @@ odp_packet_chksum_status_t odp_packet_l3_chksum_status(odp_packet_t pkt) if (!pkt_hdr->p.input_flags.l3_chksum_done) return ODP_PACKET_CHKSUM_UNKNOWN;
- if (pkt_hdr->p.error_flags.l3_chksum) + if (pkt_hdr->p.flags.l3_chksum_err) return ODP_PACKET_CHKSUM_BAD;
return ODP_PACKET_CHKSUM_OK; @@ -608,7 +606,7 @@ odp_packet_chksum_status_t odp_packet_l4_chksum_status(odp_packet_t pkt) if (!pkt_hdr->p.input_flags.l4_chksum_done) return ODP_PACKET_CHKSUM_UNKNOWN;
- if (pkt_hdr->p.error_flags.l4_chksum) + if (pkt_hdr->p.flags.l4_chksum_err) return ODP_PACKET_CHKSUM_BAD;
return ODP_PACKET_CHKSUM_OK; @@ -980,10 +978,8 @@ void odp_packet_print(odp_packet_t pkt) len += odp_buffer_snprint(&str[len], n - len, buf); len += snprintf(&str[len], n - len, " input_flags 0x%" PRIx64 "\n", hdr->p.input_flags.all); - len += snprintf(&str[len], n - len, " error_flags 0x%" PRIx32 "\n", - hdr->p.error_flags.all); - len += snprintf(&str[len], n - len, " output_flags 0x%" PRIx32 "\n", - hdr->p.output_flags.all); + len += snprintf(&str[len], n - len, " flags 0x%" PRIx32 "\n", + hdr->p.flags.all_flags); len += snprintf(&str[len], n - len, " l2_offset %" PRIu32 "\n", hdr->p.l2_offset); len += snprintf(&str[len], n - len, @@ -1180,7 +1176,7 @@ static inline uint16_t parse_eth(packet_parser_t *prs, const uint8_t **parseptr, if (odp_unlikely(ethtype < _ODP_ETH_LEN_MAX)) { input_flags.snap = 1; if (ethtype > frame_len - *offset) { - prs->error_flags.snap_len = 1; + prs->flags.snap_len_err = 1; ethtype = 0; goto error; } @@ -1231,8 +1227,7 @@ static inline uint8_t parse_ipv4(packet_parser_t *prs, const uint8_t **parseptr, if (odp_unlikely(ihl < _ODP_IPV4HDR_IHL_MIN || ver != 4 || (l3_len > frame_len - *offset))) { - - prs->error_flags.ip_err = 1; + prs->flags.ip_err = 1; return 0; }
@@ -1276,7 +1271,7 @@ static inline uint8_t parse_ipv6(packet_parser_t *prs, const uint8_t **parseptr, /* Basic sanity checks on IPv6 header */ if ((_odp_be_to_cpu_32(ipv6->ver_tc_flow) >> 28) != 6 || l3_len > frame_len - *offset) { - prs->error_flags.ip_err = 1; + prs->flags.ip_err = 1; return 0; }
@@ -1305,7 +1300,7 @@ static inline uint8_t parse_ipv6(packet_parser_t *prs, const uint8_t **parseptr,
if (*offset >= prs->l3_offset + _odp_be_to_cpu_16(ipv6->payload_len)) { - prs->error_flags.ip_err = 1; + prs->flags.ip_err = 1; return 0; }
@@ -1332,7 +1327,7 @@ static inline void parse_tcp(packet_parser_t *prs, const uint8_t **parseptr) uint32_t len = tcp->hl * 4;
if (odp_unlikely(tcp->hl < sizeof(_odp_tcphdr_t) / sizeof(uint32_t))) - prs->error_flags.tcp_err = 1; + prs->flags.tcp_err = 1;
*parseptr += len; } @@ -1347,7 +1342,7 @@ static inline void parse_udp(packet_parser_t *prs, const uint8_t **parseptr) uint16_t ipsec_port = _odp_cpu_to_be_16(_ODP_UDP_IPSEC_PORT);
if (odp_unlikely(udplen < sizeof(_odp_udphdr_t))) - prs->error_flags.udp_err = 1; + prs->flags.udp_err = 1;
if (odp_unlikely(ipsec_port == udp->dst_port && udplen > 4)) { uint32_t val; @@ -1373,7 +1368,7 @@ int packet_parse_common_l3_l4(packet_parser_t *prs, const uint8_t *parseptr, prs->l3_offset = offset;
if (odp_unlikely(layer <= ODP_PROTO_LAYER_L2)) - return prs->error_flags.all != 0; + return prs->flags.all.error != 0;
/* Set l3 flag only for known ethtypes */ prs->input_flags.l3 = 1; @@ -1404,7 +1399,7 @@ int packet_parse_common_l3_l4(packet_parser_t *prs, const uint8_t *parseptr, }
if (layer == ODP_PROTO_LAYER_L3) - return prs->error_flags.all != 0; + return prs->flags.all.error != 0;
/* Set l4 flag only for known ip_proto */ prs->input_flags.l4 = 1; @@ -1455,7 +1450,7 @@ int packet_parse_common_l3_l4(packet_parser_t *prs, const uint8_t *parseptr, break; }
- return prs->error_flags.all != 0; + return prs->flags.all.error != 0; }
/** diff --git a/platform/linux-dpdk/odp_packet_dpdk.c b/platform/linux-dpdk/odp_packet_dpdk.c index dd73b21c..410211a6 100644 --- a/platform/linux-dpdk/odp_packet_dpdk.c +++ b/platform/linux-dpdk/odp_packet_dpdk.c @@ -553,8 +553,8 @@ static inline int pkt_set_ol_rx(odp_pktin_config_opt_t *pktin_cfg, return -1;
pkt_hdr->p.input_flags.l3_chksum_done = 1; - pkt_hdr->p.error_flags.ip_err = 1; - pkt_hdr->p.error_flags.l3_chksum = 1; + pkt_hdr->p.flags.ip_err = 1; + pkt_hdr->p.flags.l3_chksum_err = 1; } }
@@ -569,8 +569,8 @@ static inline int pkt_set_ol_rx(odp_pktin_config_opt_t *pktin_cfg, return -1;
pkt_hdr->p.input_flags.l4_chksum_done = 1; - pkt_hdr->p.error_flags.udp_err = 1; - pkt_hdr->p.error_flags.l4_chksum = 1; + pkt_hdr->p.flags.udp_err = 1; + pkt_hdr->p.flags.l4_chksum_err = 1; } } else if (pktin_cfg->bit.tcp_chksum && HAS_L4_PROTO(mbuf, RTE_PTYPE_L4_TCP)) { @@ -583,8 +583,8 @@ static inline int pkt_set_ol_rx(odp_pktin_config_opt_t *pktin_cfg, return -1;
pkt_hdr->p.input_flags.l4_chksum_done = 1; - pkt_hdr->p.error_flags.tcp_err = 1; - pkt_hdr->p.error_flags.l4_chksum = 1; + pkt_hdr->p.flags.tcp_err = 1; + pkt_hdr->p.flags.l4_chksum_err = 1; } }
@@ -787,18 +787,18 @@ static inline void pkt_set_ol_tx(odp_pktout_config_opt_t *pktout_cfg, ipv4_chksum_pkt = OL_TX_CHKSUM_PKT(pktout_cfg->bit.ipv4_chksum, pktout_capa->bit.ipv4_chksum, l3_proto_v4, - pkt_p->output_flags.l3_chksum_set, - pkt_p->output_flags.l3_chksum); + pkt_p->flags.l3_chksum_set, + pkt_p->flags.l3_chksum); udp_chksum_pkt = OL_TX_CHKSUM_PKT(pktout_cfg->bit.udp_chksum, pktout_capa->bit.udp_chksum, (l4_proto == _ODP_IPPROTO_UDP), - pkt_p->output_flags.l4_chksum_set, - pkt_p->output_flags.l4_chksum); + pkt_p->flags.l4_chksum_set, + pkt_p->flags.l4_chksum); tcp_chksum_pkt = OL_TX_CHKSUM_PKT(pktout_cfg->bit.tcp_chksum, pktout_capa->bit.tcp_chksum, (l4_proto == _ODP_IPPROTO_TCP), - pkt_p->output_flags.l4_chksum_set, - pkt_p->output_flags.l4_chksum); + pkt_p->flags.l4_chksum_set, + pkt_p->flags.l4_chksum);
if (!ipv4_chksum_pkt && !udp_chksum_pkt && !tcp_chksum_pkt) return; diff --git a/platform/linux-dpdk/odp_packet_flags.c b/platform/linux-dpdk/odp_packet_flags.c index 6c404423..251136e0 100644 --- a/platform/linux-dpdk/odp_packet_flags.c +++ b/platform/linux-dpdk/odp_packet_flags.c @@ -22,7 +22,7 @@ int odp_packet_has_error(odp_packet_t pkt) { odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt);
- return pkt_hdr->p.error_flags.all != 0; + return pkt_hdr->p.flags.all.error != 0; }
/* Get Input Flags */ @@ -32,9 +32,7 @@ int odp_packet_has_l2_error(odp_packet_t pkt) odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt); /* L2 parsing is always done by default and hence no additional check is required */ - return pkt_hdr->p.error_flags.frame_len - | pkt_hdr->p.error_flags.snap_len - | pkt_hdr->p.error_flags.l2_chksum; + return pkt_hdr->p.flags.snap_len_err; }
int odp_packet_has_l3(odp_packet_t pkt) @@ -46,7 +44,7 @@ int odp_packet_has_l3_error(odp_packet_t pkt) { odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt);
- return pkt_hdr->p.error_flags.ip_err; + return pkt_hdr->p.flags.ip_err; }
int odp_packet_has_l4(odp_packet_t pkt) @@ -58,7 +56,7 @@ int odp_packet_has_l4_error(odp_packet_t pkt) { odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt);
- return pkt_hdr->p.error_flags.tcp_err | pkt_hdr->p.error_flags.udp_err; + return pkt_hdr->p.flags.tcp_err | pkt_hdr->p.flags.udp_err; }
int odp_packet_has_eth_bcast(odp_packet_t pkt) @@ -162,14 +160,14 @@ void odp_packet_drop_eligible_set(odp_packet_t pkt, odp_bool_t drop)
int8_t odp_packet_shaper_len_adjust(odp_packet_t pkt) { - retflag(pkt, output_flags.shaper_len_adj); + retflag(pkt, flags.shaper_len_adj); }
void odp_packet_shaper_len_adjust_set(odp_packet_t pkt, int8_t adj) { odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt);
- pkt_hdr->p.output_flags.shaper_len_adj = adj; + pkt_hdr->p.flags.shaper_len_adj = adj; }
/* Set Input Flags */
commit cf70e9d14e3e78638434c0848c83708c157b49dc Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 16:13:43 2018 +0200
Port f38055d "linux-gen: packet: hide internal definitions from Doxygen"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_inline_types.h b/platform/linux-dpdk/include/odp/api/plat/packet_inline_types.h index de6614a2..691560d3 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_inline_types.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_inline_types.h @@ -19,102 +19,88 @@ extern "C" {
#include <stdint.h>
-/** @internal Packet field accessor */ +/** @cond _ODP_HIDE_FROM_DOXYGEN_ */ + +/* Packet field accessor */ #define _odp_pkt_get(pkt, cast, field) \ (*(cast *)(uintptr_t)((uint8_t *)pkt + _odp_packet_inline.field))
-/** @internal Packet header field offsets for inline functions */ +/* Packet header field offsets for inline functions */ typedef struct _odp_packet_inline_offset_t { - /** @internal field offset */ uint16_t mb; - /** @internal field offset */ uint16_t pool; - /** @internal field offset */ uint16_t input; - /** @internal field offset */ uint16_t user_ptr; - /** @internal field offset */ uint16_t l2_offset; - /** @internal field offset */ uint16_t l3_offset; - /** @internal field offset */ uint16_t l4_offset; - /** @internal field offset */ uint16_t timestamp; - /** @internal field offset */ uint16_t input_flags; - /** @internal field offset */ uint16_t buf_addr; - /** @internal field offset */ uint16_t data; - /** @internal field offset */ uint16_t pkt_len; - /** @internal field offset */ uint16_t seg_len; - /** @internal field offset */ uint16_t nb_segs; - /** @internal offset */ uint16_t udata; - /** @internal field offset */ uint16_t rss; - /** @internal field offset */ uint16_t ol_flags; - /** @internal rss hash result set */ uint64_t rss_flag;
} _odp_packet_inline_offset_t;
-/** @internal Packet input & protocol flags */ +/* Packet input & protocol flags */ typedef union { - /** All input flags */ + /* All input flags */ uint64_t all;
- /** Individual input flags */ + /* Individual input flags */ struct { - uint64_t dst_queue:1; /**< Dst queue present */ - - uint64_t timestamp:1; /**< Timestamp present */ - - uint64_t l2:1; /**< known L2 protocol present */ - uint64_t l3:1; /**< known L3 protocol present */ - uint64_t l4:1; /**< known L4 protocol present */ - - uint64_t eth:1; /**< Ethernet */ - uint64_t eth_bcast:1; /**< Ethernet broadcast */ - uint64_t eth_mcast:1; /**< Ethernet multicast */ - uint64_t jumbo:1; /**< Jumbo frame */ - uint64_t vlan:1; /**< VLAN hdr found */ - uint64_t vlan_qinq:1; /**< Stacked VLAN found, QinQ */ - - uint64_t snap:1; /**< SNAP */ - uint64_t arp:1; /**< ARP */ - - uint64_t ipv4:1; /**< IPv4 */ - uint64_t ipv6:1; /**< IPv6 */ - uint64_t ip_bcast:1; /**< IP broadcast */ - uint64_t ip_mcast:1; /**< IP multicast */ - uint64_t ipfrag:1; /**< IP fragment */ - uint64_t ipopt:1; /**< IP optional headers */ - - uint64_t ipsec:1; /**< IPSec packet. Required by the - odp_packet_has_ipsec_set() func. */ - uint64_t ipsec_ah:1; /**< IPSec authentication header */ - uint64_t ipsec_esp:1; /**< IPSec encapsulating security - payload */ - uint64_t udp:1; /**< UDP */ - uint64_t tcp:1; /**< TCP */ - uint64_t sctp:1; /**< SCTP */ - uint64_t icmp:1; /**< ICMP */ - - uint64_t color:2; /**< Packet color for traffic mgmt */ - uint64_t nodrop:1; /**< Drop eligibility status */ - - uint64_t l3_chksum_done:1; /**< L3 checksum validation done */ - uint64_t l4_chksum_done:1; /**< L4 checksum validation done */ - uint64_t ipsec_udp:1; /**< UDP-encapsulated IPsec packet */ + uint64_t dst_queue:1; /* Dst queue present */ + + uint64_t timestamp:1; /* Timestamp present */ + + uint64_t l2:1; /* known L2 protocol present */ + uint64_t l3:1; /* known L3 protocol present */ + uint64_t l4:1; /* known L4 protocol present */ + + uint64_t eth:1; /* Ethernet */ + uint64_t eth_bcast:1; /* Ethernet broadcast */ + uint64_t eth_mcast:1; /* Ethernet multicast */ + uint64_t jumbo:1; /* Jumbo frame */ + uint64_t vlan:1; /* VLAN hdr found */ + uint64_t vlan_qinq:1; /* Stacked VLAN found, QinQ */ + + uint64_t snap:1; /* SNAP */ + uint64_t arp:1; /* ARP */ + + uint64_t ipv4:1; /* IPv4 */ + uint64_t ipv6:1; /* IPv6 */ + uint64_t ip_bcast:1; /* IP broadcast */ + uint64_t ip_mcast:1; /* IP multicast */ + uint64_t ipfrag:1; /* IP fragment */ + uint64_t ipopt:1; /* IP optional headers */ + + uint64_t ipsec:1; /* IPSec packet. Required by the + odp_packet_has_ipsec_set() func. */ + uint64_t ipsec_ah:1; /* IPSec authentication header */ + uint64_t ipsec_esp:1; /* IPSec encapsulating security + payload */ + uint64_t udp:1; /* UDP */ + uint64_t tcp:1; /* TCP */ + uint64_t sctp:1; /* SCTP */ + uint64_t icmp:1; /* ICMP */ + + uint64_t color:2; /* Packet color for traffic mgmt */ + uint64_t nodrop:1; /* Drop eligibility status */ + + uint64_t l3_chksum_done:1; /* L3 checksum validation done */ + uint64_t l4_chksum_done:1; /* L4 checksum validation done */ + uint64_t ipsec_udp:1; /* UDP-encapsulated IPsec packet */ }; } _odp_packet_input_flags_t;
+/** @endcond */ + #ifdef __cplusplus } #endif
commit 34a645564eba87d8609caab242bbc1bc8db4c890 Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 16:07:37 2018 +0200
Port 8d29737 "linux-gen: packet: single user ptr field"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp_buffer_internal.h b/platform/linux-dpdk/include/odp_buffer_internal.h index 4e75a05a..cccab51f 100644 --- a/platform/linux-dpdk/include/odp_buffer_internal.h +++ b/platform/linux-dpdk/include/odp_buffer_internal.h @@ -72,13 +72,7 @@ struct odp_buffer_hdr_t { struct odp_buffer_hdr_t *burst[BUFFER_BURST_SIZE];
/* --- Mostly read only data --- */ - - /* User context pointer or u64 */ - union { - uint64_t buf_u64; - void *buf_ctx; - const void *buf_cctx; /* const alias for ctx */ - }; + const void *user_ptr;
/* Pool pointer */ void *pool_ptr; diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index 26f225d6..91378b69 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -34,7 +34,7 @@ const _odp_packet_inline_offset_t ODP_ALIGNED_CACHE _odp_packet_inline = { .mb = offsetof(odp_packet_hdr_t, buf_hdr.mb), .pool = offsetof(odp_packet_hdr_t, buf_hdr.pool_ptr), .input = offsetof(odp_packet_hdr_t, input), - .user_ptr = offsetof(odp_packet_hdr_t, buf_hdr.buf_ctx), + .user_ptr = offsetof(odp_packet_hdr_t, buf_hdr.user_ptr), .l2_offset = offsetof(odp_packet_hdr_t, p.l2_offset), .l3_offset = offsetof(odp_packet_hdr_t, p.l3_offset), .l4_offset = offsetof(odp_packet_hdr_t, p.l4_offset), @@ -525,9 +525,9 @@ int odp_packet_trunc_tail(odp_packet_t *pkt, uint32_t len, void **tail_ptr, * */
-void odp_packet_user_ptr_set(odp_packet_t pkt, const void *ctx) +void odp_packet_user_ptr_set(odp_packet_t pkt, const void *ptr) { - packet_hdr(pkt)->buf_hdr.buf_cctx = ctx; + packet_hdr(pkt)->buf_hdr.user_ptr = ptr; }
int odp_packet_l2_offset_set(odp_packet_t pkt, uint32_t offset) @@ -1110,7 +1110,7 @@ int _odp_packet_copy_md_to_packet(odp_packet_t srcpkt, odp_packet_t dstpkt)
dsthdr->input = srchdr->input; dsthdr->dst_queue = srchdr->dst_queue; - dsthdr->buf_hdr.buf_u64 = srchdr->buf_hdr.buf_u64; + dsthdr->buf_hdr.user_ptr = srchdr->buf_hdr.user_ptr;
dsthdr->buf_hdr.mb.port = srchdr->buf_hdr.mb.port; dsthdr->buf_hdr.mb.ol_flags = srchdr->buf_hdr.mb.ol_flags;
commit 3100810bdd8b17ff77f61bdd2e4795d19cbe3bde Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 15:59:20 2018 +0200
Port 733ab61 "update Linaro Copyrights to 2018 year"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/.travis.yml b/.travis.yml index c2bc4565..28d9dab5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,4 @@ -# Copyright (c) 2016, Linaro Limited +# Copyright (c) 2016-2018, Linaro Limited # All rights reserved. # SPDX-License-Identifier: BSD-3-Clause # diff --git a/platform/linux-dpdk/doc/platform_specific.dox b/platform/linux-dpdk/doc/platform_specific.dox index 18e3d061..ad3126e2 100644 --- a/platform/linux-dpdk/doc/platform_specific.dox +++ b/platform/linux-dpdk/doc/platform_specific.dox @@ -1,4 +1,4 @@ -/* Copyright (c) 2016, Linaro Limited +/* Copyright (c) 2016-2018, Linaro Limited * All rights reserved * * SPDX-License-Identifier: BSD-3-Clause diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/packet.h b/platform/linux-dpdk/include-abi/odp/api/abi/packet.h index 7daed989..b2f2c6e9 100644 --- a/platform/linux-dpdk/include-abi/odp/api/abi/packet.h +++ b/platform/linux-dpdk/include-abi/odp/api/abi/packet.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, Linaro Limited +/* Copyright (c) 2015-2018, Linaro Limited * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_flag_inlines.h b/platform/linux-dpdk/include/odp/api/plat/packet_flag_inlines.h index 5913493b..52e272f2 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_flag_inlines.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_flag_inlines.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2017, Linaro Limited +/* Copyright (c) 2017-2018, Linaro Limited * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_flag_inlines_api.h b/platform/linux-dpdk/include/odp/api/plat/packet_flag_inlines_api.h index 8b4dbe6e..1556ea32 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_flag_inlines_api.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_flag_inlines_api.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2017, Linaro Limited +/* Copyright (c) 2017-2018, Linaro Limited * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h index d15e56a4..2096e62e 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2016, Linaro Limited +/* Copyright (c) 2016-2018, Linaro Limited * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_inlines_api.h b/platform/linux-dpdk/include/odp/api/plat/packet_inlines_api.h index ed41f2ae..f362c4ef 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_inlines_api.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_inlines_api.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2017, Linaro Limited +/* Copyright (c) 2017-2018, Linaro Limited * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause diff --git a/platform/linux-dpdk/include/odp/api/plat/std_clib_inlines.h b/platform/linux-dpdk/include/odp/api/plat/std_clib_inlines.h index 2b3f3c93..cf556e04 100644 --- a/platform/linux-dpdk/include/odp/api/plat/std_clib_inlines.h +++ b/platform/linux-dpdk/include/odp/api/plat/std_clib_inlines.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2016, Linaro Limited +/* Copyright (c) 2016-2018, Linaro Limited * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause diff --git a/platform/linux-dpdk/include/odp_buffer_inlines.h b/platform/linux-dpdk/include/odp_buffer_inlines.h index c28528bb..84e9c9f1 100644 --- a/platform/linux-dpdk/include/odp_buffer_inlines.h +++ b/platform/linux-dpdk/include/odp_buffer_inlines.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2014, Linaro Limited +/* Copyright (c) 2014-2018, Linaro Limited * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause diff --git a/platform/linux-dpdk/include/odp_buffer_internal.h b/platform/linux-dpdk/include/odp_buffer_internal.h index 56974e6b..4e75a05a 100644 --- a/platform/linux-dpdk/include/odp_buffer_internal.h +++ b/platform/linux-dpdk/include/odp_buffer_internal.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2013, Linaro Limited +/* Copyright (c) 2013-2018, Linaro Limited * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause diff --git a/platform/linux-dpdk/include/odp_config_internal.h b/platform/linux-dpdk/include/odp_config_internal.h index 8eccc280..db24e6e2 100644 --- a/platform/linux-dpdk/include/odp_config_internal.h +++ b/platform/linux-dpdk/include/odp_config_internal.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2016, Linaro Limited +/* Copyright (c) 2016-2018, Linaro Limited * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause diff --git a/platform/linux-dpdk/include/odp_packet_dpdk.h b/platform/linux-dpdk/include/odp_packet_dpdk.h index 4e9a144d..f8c5b3fc 100644 --- a/platform/linux-dpdk/include/odp_packet_dpdk.h +++ b/platform/linux-dpdk/include/odp_packet_dpdk.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2013, Linaro Limited +/* Copyright (c) 2013-2018, Linaro Limited * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause diff --git a/platform/linux-dpdk/include/odp_packet_internal.h b/platform/linux-dpdk/include/odp_packet_internal.h index 0478e73e..124ffbc7 100644 --- a/platform/linux-dpdk/include/odp_packet_internal.h +++ b/platform/linux-dpdk/include/odp_packet_internal.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2014, Linaro Limited +/* Copyright (c) 2014-2018, Linaro Limited * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause diff --git a/platform/linux-dpdk/include/odp_packet_io_internal.h b/platform/linux-dpdk/include/odp_packet_io_internal.h index b7590597..9613c956 100644 --- a/platform/linux-dpdk/include/odp_packet_io_internal.h +++ b/platform/linux-dpdk/include/odp_packet_io_internal.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2013, Linaro Limited +/* Copyright (c) 2013-2018, Linaro Limited * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause diff --git a/platform/linux-dpdk/include/odp_pool_internal.h b/platform/linux-dpdk/include/odp_pool_internal.h index 2feae883..e95e590a 100644 --- a/platform/linux-dpdk/include/odp_pool_internal.h +++ b/platform/linux-dpdk/include/odp_pool_internal.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2013, Linaro Limited +/* Copyright (c) 2013-2018, Linaro Limited * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause diff --git a/platform/linux-dpdk/include/odp_shm_internal.h b/platform/linux-dpdk/include/odp_shm_internal.h index 5dd6cee1..b83b63a9 100644 --- a/platform/linux-dpdk/include/odp_shm_internal.h +++ b/platform/linux-dpdk/include/odp_shm_internal.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2017, Linaro Limited +/* Copyright (c) 2017-2018, Linaro Limited * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause diff --git a/platform/linux-dpdk/odp_buffer.c b/platform/linux-dpdk/odp_buffer.c index 4514e721..6e19c74e 100644 --- a/platform/linux-dpdk/odp_buffer.c +++ b/platform/linux-dpdk/odp_buffer.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2013, Linaro Limited +/* Copyright (c) 2013-2018, Linaro Limited * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause diff --git a/platform/linux-dpdk/odp_crypto.c b/platform/linux-dpdk/odp_crypto.c index ed7e29c1..c4d04e54 100644 --- a/platform/linux-dpdk/odp_crypto.c +++ b/platform/linux-dpdk/odp_crypto.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2017, Linaro Limited +/* Copyright (c) 2017-2018, Linaro Limited * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause diff --git a/platform/linux-dpdk/odp_errno.c b/platform/linux-dpdk/odp_errno.c index 5fb698f2..eab3fa1e 100644 --- a/platform/linux-dpdk/odp_errno.c +++ b/platform/linux-dpdk/odp_errno.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, Linaro Limited +/* Copyright (c) 2015-2018, Linaro Limited * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause diff --git a/platform/linux-dpdk/odp_init.c b/platform/linux-dpdk/odp_init.c index 1a22f9ff..7a0ae475 100644 --- a/platform/linux-dpdk/odp_init.c +++ b/platform/linux-dpdk/odp_init.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2013, Linaro Limited +/* Copyright (c) 2013-2018, Linaro Limited * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index 303395f2..26f225d6 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2013, Linaro Limited +/* Copyright (c) 2013-2018, Linaro Limited * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause diff --git a/platform/linux-dpdk/odp_packet_dpdk.c b/platform/linux-dpdk/odp_packet_dpdk.c index e275f6db..dd73b21c 100644 --- a/platform/linux-dpdk/odp_packet_dpdk.c +++ b/platform/linux-dpdk/odp_packet_dpdk.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2013, Linaro Limited +/* Copyright (c) 2013-2018, Linaro Limited * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause diff --git a/platform/linux-dpdk/odp_packet_flags.c b/platform/linux-dpdk/odp_packet_flags.c index d35d0591..6c404423 100644 --- a/platform/linux-dpdk/odp_packet_flags.c +++ b/platform/linux-dpdk/odp_packet_flags.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2014, Linaro Limited +/* Copyright (c) 2014-2018, Linaro Limited * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause diff --git a/platform/linux-dpdk/odp_pool.c b/platform/linux-dpdk/odp_pool.c index b429a051..07de5b34 100644 --- a/platform/linux-dpdk/odp_pool.c +++ b/platform/linux-dpdk/odp_pool.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2013, Linaro Limited +/* Copyright (c) 2013-2018, Linaro Limited * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause diff --git a/platform/linux-dpdk/odp_shared_memory.c b/platform/linux-dpdk/odp_shared_memory.c index cb86aa39..573dddaa 100644 --- a/platform/linux-dpdk/odp_shared_memory.c +++ b/platform/linux-dpdk/odp_shared_memory.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2017, Linaro Limited +/* Copyright (c) 2017-2018, Linaro Limited * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause diff --git a/platform/linux-dpdk/odp_std_clib.c b/platform/linux-dpdk/odp_std_clib.c index 155e73d4..07a71ec4 100644 --- a/platform/linux-dpdk/odp_std_clib.c +++ b/platform/linux-dpdk/odp_std_clib.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, Linaro Limited +/* Copyright (c) 2015-2018, Linaro Limited * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause diff --git a/platform/linux-dpdk/odp_thread.c b/platform/linux-dpdk/odp_thread.c index ebc0f407..bb6718d5 100644 --- a/platform/linux-dpdk/odp_thread.c +++ b/platform/linux-dpdk/odp_thread.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2013, Linaro Limited +/* Copyright (c) 2013-2018, Linaro Limited * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause diff --git a/platform/linux-dpdk/odp_time.c b/platform/linux-dpdk/odp_time.c index 768dd6b8..b5fd2419 100644 --- a/platform/linux-dpdk/odp_time.c +++ b/platform/linux-dpdk/odp_time.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2013, Linaro Limited +/* Copyright (c) 2013-2018, Linaro Limited * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause diff --git a/platform/linux-dpdk/test/validation/api/pktio/pktio_run.sh b/platform/linux-dpdk/test/validation/api/pktio/pktio_run.sh index e4964f52..6007195e 100755 --- a/platform/linux-dpdk/test/validation/api/pktio/pktio_run.sh +++ b/platform/linux-dpdk/test/validation/api/pktio/pktio_run.sh @@ -1,6 +1,6 @@ #!/bin/sh # -# Copyright (c) 2015, Linaro Limited +# Copyright (c) 2015-2018, Linaro Limited # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/scripts/git-transplant.py b/scripts/git-transplant.py index aeb29be3..4de62c3c 100755 --- a/scripts/git-transplant.py +++ b/scripts/git-transplant.py @@ -1,6 +1,6 @@ #!/usr/bin/python
-# Copyright (c) 2015, Linaro Limited +# Copyright (c) 2015-2018, Linaro Limited # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause
commit d5ca8a2b70998bf082989b1bcee65dc927a2b045 Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 15:43:25 2018 +0200
Port a4f2c5f "linux-gen: queue: lock-free implementation"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 1512339f..2f69da7e 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -105,6 +105,7 @@ noinst_HEADERS = \ ${top_srcdir}/platform/linux-generic/include/odp_queue_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_ring_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_queue_if.h \ + ${top_srcdir}/platform/linux-generic/include/odp_queue_lf.h \ ${top_srcdir}/platform/linux-generic/include/odp_schedule_if.h \ ${top_srcdir}/platform/linux-generic/include/odp_sorted_list_internal.h \ include/odp_shm_internal.h \ @@ -149,6 +150,7 @@ __LIB__libodp_dpdk_la_SOURCES = \ odp_pool.c \ ../linux-generic/odp_queue.c \ ../linux-generic/odp_queue_if.c \ + ../linux-generic/odp_queue_lf.c \ ../linux-generic/odp_rwlock.c \ ../linux-generic/odp_rwlock_recursive.c \ ../linux-generic/odp_schedule.c \
commit b6f6058582736cdae3739a1b336419ed491d4fb7 Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 15:32:58 2018 +0200
Port 5a58bbf "example: generator move to platform tests"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/m4/configure.m4 b/platform/linux-dpdk/m4/configure.m4 index f10e5920..b4d7acc5 100644 --- a/platform/linux-dpdk/m4/configure.m4 +++ b/platform/linux-dpdk/m4/configure.m4 @@ -38,6 +38,8 @@ AM_CONDITIONAL([PLATFORM_IS_LINUX_DPDK], [test "${with_platform}" = "linux-dpdk"]) AC_CONFIG_FILES([platform/linux-dpdk/Makefile platform/linux-dpdk/libodp-dpdk.pc + platform/linux-dpdk/test/example/Makefile + platform/linux-dpdk/test/example/generator/Makefile platform/linux-dpdk/test/Makefile platform/linux-dpdk/test/validation/api/pktio/Makefile]) ]) diff --git a/platform/linux-dpdk/test/Makefile.am b/platform/linux-dpdk/test/Makefile.am index a872400e..6324d779 100644 --- a/platform/linux-dpdk/test/Makefile.am +++ b/platform/linux-dpdk/test/Makefile.am @@ -3,6 +3,10 @@ TESTS_ENVIRONMENT += TEST_DIR=${top_builddir}/test/validation
SUBDIRS =
+if test_example +SUBDIRS += example +endif + if test_vald TESTS = validation/api/pktio/pktio_run.sh
diff --git a/platform/linux-dpdk/test/example/Makefile.am b/platform/linux-dpdk/test/example/Makefile.am new file mode 100644 index 00000000..41d28752 --- /dev/null +++ b/platform/linux-dpdk/test/example/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = generator diff --git a/platform/linux-dpdk/test/example/generator b/platform/linux-dpdk/test/example/generator new file mode 120000 index 00000000..6f543c37 --- /dev/null +++ b/platform/linux-dpdk/test/example/generator @@ -0,0 +1 @@ +../../../linux-generic/test/example/generator/ \ No newline at end of file
commit dba517a2b7e1db090867d4b154ab610ca4c48531 Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 15:21:02 2018 +0200
Port 7b98d4d "linux-gen: set DPDK's -msse4.2 flag during configure"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/m4/configure.m4 b/platform/linux-dpdk/m4/configure.m4 index 6aefc1f7..f10e5920 100644 --- a/platform/linux-dpdk/m4/configure.m4 +++ b/platform/linux-dpdk/m4/configure.m4 @@ -27,8 +27,11 @@ AC_ARG_WITH([dpdk-path], ODP_DPDK([$DPDK_PATH], [], [AC_MSG_FAILURE([can't find DPDK])])
-AS_CASE($host_cpu, [x86_64], - [AS_VAR_APPEND([DPDK_CPPFLAGS], [" -msse4.2"])]) +case "${host}" in + i?86* | x86*) + DPDK_CPPFLAGS="${DPDK_CPPFLAGS} -msse4.2" + ;; +esac
AC_CONFIG_COMMANDS_PRE([dnl AM_CONDITIONAL([PLATFORM_IS_LINUX_DPDK],
commit 6e6dec376bc611538a242dacfa17800d1c205ce1 Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 15:16:50 2018 +0200
Port b6ac02a "build: support building for generic arch"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 2f7e7fcc..1512339f 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -208,6 +208,16 @@ noinst_HEADERS += arch/aarch64/odp_atomic.h \ arch/default/odp_cpu_idling.h \ arch/aarch64/odp_llsc.h endif +if ARCH_IS_DEFAULT +__LIB__libodp_dpdk_la_SOURCES += arch/default/odp_cpu_cycles.c \ + arch/default/odp_global_time.c \ + arch/default/odp_sysinfo_parse.c +if !ODP_ABI_COMPAT +odpapiabiarchinclude_HEADERS += arch/default/odp/api/abi/cpu.h +endif +noinst_HEADERS += arch/default/odp_cpu.h \ + arch/default/odp_cpu_idling.h +endif if ARCH_IS_MIPS64 __LIB__libodp_dpdk_la_SOURCES += arch/mips64/odp_cpu_cycles.c \ arch/default/odp_global_time.c \
commit fb097ce4d568634869ac2f8cd2e6189f7dd497b8 Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 14:51:33 2018 +0200
Port ea529e1 "linux-gen: packet: remove duplicate conversion"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp_packet_internal.h b/platform/linux-dpdk/include/odp_packet_internal.h index 044980f7..0478e73e 100644 --- a/platform/linux-dpdk/include/odp_packet_internal.h +++ b/platform/linux-dpdk/include/odp_packet_internal.h @@ -233,9 +233,6 @@ int packet_parse_layer(odp_packet_hdr_t *pkt_hdr, /* Reset parser metadata for a new parse */ void packet_parse_reset(odp_packet_hdr_t *pkt_hdr);
-/* Convert a buffer handle to a packet handle */ -odp_packet_t _odp_packet_from_buf_hdr(odp_buffer_hdr_t *buf_hdr); - static inline int packet_hdr_has_l2(odp_packet_hdr_t *pkt_hdr) { return pkt_hdr->p.input_flags.l2; diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index ae9be335..303395f2 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -77,11 +77,6 @@ ODP_STATIC_ASSERT(ODP_BUFFER_INVALID == 0, "Buffer invalid not 0"); ODP_STATIC_ASSERT(ODP_EVENT_INVALID == 0, "Event invalid not 0"); #endif
-odp_packet_t _odp_packet_from_buf_hdr(odp_buffer_hdr_t *buf_hdr) -{ - return (odp_packet_t)buf_hdr; -} - static inline odp_buffer_t packet_to_buffer(odp_packet_t pkt) { return (odp_buffer_t)pkt;
commit 26fa3a7d35580728239b001f54fe975e49ce6e07 Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 14:48:16 2018 +0200
Port 2f8d049 "linux-gen: packet: remove unused function"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp_packet_internal.h b/platform/linux-dpdk/include/odp_packet_internal.h index fb5431cf..044980f7 100644 --- a/platform/linux-dpdk/include/odp_packet_internal.h +++ b/platform/linux-dpdk/include/odp_packet_internal.h @@ -230,12 +230,6 @@ int _odp_packet_copy_md_to_packet(odp_packet_t srcpkt, odp_packet_t dstpkt); int packet_parse_layer(odp_packet_hdr_t *pkt_hdr, odp_proto_layer_t layer);
-/* Perform L3 and L4 parsing up to a given protocol layer */ -int packet_parse_l3_l4(odp_packet_hdr_t *pkt_hdr, - odp_proto_layer_t layer, - uint32_t l3_offset, - uint16_t ethtype); - /* Reset parser metadata for a new parse */ void packet_parse_reset(odp_packet_hdr_t *pkt_hdr);
diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index b22ac8ba..ae9be335 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -1505,23 +1505,6 @@ int packet_parse_layer(odp_packet_hdr_t *pkt_hdr, return packet_parse_common(&pkt_hdr->p, base, len, seg_len, layer); }
-int packet_parse_l3_l4(odp_packet_hdr_t *pkt_hdr, - odp_proto_layer_t layer, - uint32_t l3_offset, - uint16_t ethtype) -{ - uint32_t seg_len = 0; - void *base = _odp_packet_offset((odp_packet_t)pkt_hdr, l3_offset, - &seg_len, NULL); - - if (seg_len == 0) - return -1; - - return packet_parse_common_l3_l4(&pkt_hdr->p, base, l3_offset, - packet_len(pkt_hdr), seg_len, - layer, ethtype); -} - int odp_packet_parse(odp_packet_t pkt, uint32_t offset, const odp_packet_parse_param_t *param) {
commit c0170949e932e6b87813f9ead4f1c09e50ec8509 Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 14:45:33 2018 +0200
Port 0f0d381 "linux-gen: move common macros to odp_macros_internal.h"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 48f7da39..2f7e7fcc 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -89,6 +89,7 @@ noinst_HEADERS = \ ${top_srcdir}/platform/linux-generic/include/odp_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_ipsec_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_llqueue.h \ + ${top_srcdir}/platform/linux-generic/include/odp_macros_internal.h \ include/odp_packet_dpdk.h \ include/odp_packet_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_name_table_internal.h \
commit 8bf533194136de14cf1cf30a99759c36979f7852 Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 14:39:59 2018 +0200
Port d905533 "linux-gen: shm: use global init max memory"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp_shm_internal.h b/platform/linux-dpdk/include/odp_shm_internal.h index 072a4f1c..5dd6cee1 100644 --- a/platform/linux-dpdk/include/odp_shm_internal.h +++ b/platform/linux-dpdk/include/odp_shm_internal.h @@ -17,7 +17,9 @@ extern "C" { #endif
-int _odp_shm_init_global(void); +#include <odp/api/init.h> + +int _odp_shm_init_global(const odp_init_t *init);
int _odp_shm_init_local(void);
diff --git a/platform/linux-dpdk/odp_init.c b/platform/linux-dpdk/odp_init.c index bbb74665..1a22f9ff 100644 --- a/platform/linux-dpdk/odp_init.c +++ b/platform/linux-dpdk/odp_init.c @@ -195,7 +195,7 @@ int odp_init_global(odp_instance_t *instance, } stage = SYSINFO_INIT;
- if (_odp_shm_init_global()) { + if (_odp_shm_init_global(params)) { ODP_ERR("ODP shm init failed.\n"); goto init_failed; } diff --git a/platform/linux-dpdk/odp_shared_memory.c b/platform/linux-dpdk/odp_shared_memory.c index aa566ca1..cb86aa39 100644 --- a/platform/linux-dpdk/odp_shared_memory.c +++ b/platform/linux-dpdk/odp_shared_memory.c @@ -153,7 +153,7 @@ static inline odp_bool_t handle_is_valid(odp_shm_t shm) return 1; }
-int _odp_shm_init_global(void) +int _odp_shm_init_global(const odp_init_t *init ODP_UNUSED) { void *addr;
commit a388128eee56cdf391b582ea9f09ccbb26869579 Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 14:24:52 2018 +0200
Port f78fe47 "linux-gen: dpdk: optimize mbuf_to_pkt"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_packet_dpdk.c b/platform/linux-dpdk/odp_packet_dpdk.c index 7496e841..e275f6db 100644 --- a/platform/linux-dpdk/odp_packet_dpdk.c +++ b/platform/linux-dpdk/odp_packet_dpdk.c @@ -598,6 +598,8 @@ static int recv_pkt_dpdk(pktio_entry_t *pktio_entry, int index, odp_packet_t *saved_pkt_table; pkt_dpdk_t * const pkt_dpdk = &pktio_entry->s.pkt_dpdk; odp_pktin_config_opt_t *pktin_cfg = &pktio_entry->s.config.pktin; + odp_proto_layer_t parse_layer = pktio_entry->s.config.parser.layer; + odp_pktio_t input = pktio_entry->s.handle; uint8_t min = pkt_dpdk->min_rx_burst; odp_time_t ts_val; odp_time_t *ts = NULL; @@ -638,12 +640,11 @@ static int recv_pkt_dpdk(pktio_entry_t *pktio_entry, int index, odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt_table[i]);
packet_init(pkt_hdr); - pkt_hdr->input = pktio_entry->s.handle; + pkt_hdr->input = input;
if (!pktio_cls_enabled(pktio_entry) && - pktio_entry->s.config.parser.layer) - packet_parse_layer(pkt_hdr, - pktio_entry->s.config.parser.layer); + parse_layer != ODP_PROTO_LAYER_NONE) + packet_parse_layer(pkt_hdr, parse_layer); packet_set_ts(pkt_hdr, ts); }
commit 09bbc4a3dd3d32c10095c7638950aedb441098a9 Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 14:18:23 2018 +0200
Port 7f77562 "linux-gen: packet: optimize parse eth"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index 2d83a94a..b22ac8ba 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -1147,28 +1147,33 @@ static inline uint16_t parse_eth(packet_parser_t *prs, const uint8_t **parseptr, const _odp_ethhdr_t *eth; uint16_t macaddr0, macaddr2, macaddr4; const _odp_vlanhdr_t *vlan; + _odp_packet_input_flags_t input_flags;
- /* Detect jumbo frames */ - if (frame_len > _ODP_ETH_LEN_MAX) - prs->input_flags.jumbo = 1; + input_flags.all = 0; + input_flags.l2 = 1; + input_flags.eth = 1;
eth = (const _odp_ethhdr_t *)*parseptr;
+ /* Detect jumbo frames */ + if (odp_unlikely(frame_len > _ODP_ETH_LEN_MAX)) + input_flags.jumbo = 1; + /* Handle Ethernet broadcast/multicast addresses */ macaddr0 = _odp_be_to_cpu_16(*((const uint16_t *)(const void *)eth)); - prs->input_flags.eth_mcast = (macaddr0 & 0x0100) == 0x0100; + if (odp_unlikely((macaddr0 & 0x0100) == 0x0100)) + input_flags.eth_mcast = 1;
- if (macaddr0 == 0xffff) { + if (odp_unlikely(macaddr0 == 0xffff)) { macaddr2 = _odp_be_to_cpu_16(*((const uint16_t *) - (const void *)eth + 1)); + (const void *)eth + 1)); macaddr4 = _odp_be_to_cpu_16(*((const uint16_t *) - (const void *)eth + 2)); - prs->input_flags.eth_bcast = - (macaddr2 == 0xffff) && (macaddr4 == 0xffff); - } else { - prs->input_flags.eth_bcast = 0; + (const void *)eth + 2)); + + if ((macaddr2 == 0xffff) && (macaddr4 == 0xffff)) + input_flags.eth_bcast = 1; }
/* Get Ethertype */ @@ -1177,22 +1182,23 @@ static inline uint16_t parse_eth(packet_parser_t *prs, const uint8_t **parseptr, *parseptr += sizeof(*eth);
/* Check for SNAP vs. DIX */ - if (ethtype < _ODP_ETH_LEN_MAX) { - prs->input_flags.snap = 1; + if (odp_unlikely(ethtype < _ODP_ETH_LEN_MAX)) { + input_flags.snap = 1; if (ethtype > frame_len - *offset) { prs->error_flags.snap_len = 1; - return 0; + ethtype = 0; + goto error; } ethtype = _odp_be_to_cpu_16(*((const uint16_t *)(uintptr_t) - (parseptr + 6))); + (parseptr + 6))); *offset += 8; *parseptr += 8; }
/* Parse the VLAN header(s), if present */ - if (ethtype == _ODP_ETHTYPE_VLAN_OUTER) { - prs->input_flags.vlan_qinq = 1; - prs->input_flags.vlan = 1; + if (odp_unlikely(ethtype == _ODP_ETHTYPE_VLAN_OUTER)) { + input_flags.vlan_qinq = 1; + input_flags.vlan = 1;
vlan = (const _odp_vlanhdr_t *)*parseptr; ethtype = _odp_be_to_cpu_16(vlan->type); @@ -1201,13 +1207,16 @@ static inline uint16_t parse_eth(packet_parser_t *prs, const uint8_t **parseptr, }
if (ethtype == _ODP_ETHTYPE_VLAN) { - prs->input_flags.vlan = 1; + input_flags.vlan = 1; vlan = (const _odp_vlanhdr_t *)*parseptr; ethtype = _odp_be_to_cpu_16(vlan->type); *offset += sizeof(_odp_vlanhdr_t); *parseptr += sizeof(_odp_vlanhdr_t); }
+error: + prs->input_flags.all |= input_flags.all; + return ethtype; }
@@ -1471,14 +1480,11 @@ int packet_parse_common(packet_parser_t *prs, const uint8_t *ptr, parseptr = ptr; offset = 0;
- if (layer == ODP_PROTO_LAYER_NONE) + if (odp_unlikely(layer == ODP_PROTO_LAYER_NONE)) return 0;
/* Assume valid L2 header, no CRC/FCS check in SW */ prs->l2_offset = offset; - prs->input_flags.l2 = 1; - /* We only support Ethernet for now */ - prs->input_flags.eth = 1;
ethtype = parse_eth(prs, &parseptr, &offset, frame_len);
commit 590f1120d7642b924a446676a2b5d2791a10de17 Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 14:14:43 2018 +0200
Port 74ff9da "linux-gen: packet: optimize tcp parse"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_inline_types.h b/platform/linux-dpdk/include/odp/api/plat/packet_inline_types.h index aa50ac5f..de6614a2 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_inline_types.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_inline_types.h @@ -103,7 +103,6 @@ typedef union { payload */ uint64_t udp:1; /**< UDP */ uint64_t tcp:1; /**< TCP */ - uint64_t tcpopt:1; /**< TCP options present */ uint64_t sctp:1; /**< SCTP */ uint64_t icmp:1; /**< ICMP */
diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index b0353694..2d83a94a 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -1322,19 +1322,15 @@ static inline uint8_t parse_ipv6(packet_parser_t *prs, const uint8_t **parseptr, /** * Parser helper function for TCP */ -static inline void parse_tcp(packet_parser_t *prs, - const uint8_t **parseptr, uint32_t *offset) +static inline void parse_tcp(packet_parser_t *prs, const uint8_t **parseptr) { const _odp_tcphdr_t *tcp = (const _odp_tcphdr_t *)*parseptr; + uint32_t len = tcp->hl * 4;
- if (tcp->hl < sizeof(_odp_tcphdr_t) / sizeof(uint32_t)) + if (odp_unlikely(tcp->hl < sizeof(_odp_tcphdr_t) / sizeof(uint32_t))) prs->error_flags.tcp_err = 1; - else if ((uint32_t)tcp->hl * 4 > sizeof(_odp_tcphdr_t)) - prs->input_flags.tcpopt = 1;
- if (offset) - *offset += (uint32_t)tcp->hl * 4; - *parseptr += (uint32_t)tcp->hl * 4; + *parseptr += len; }
/** @@ -1426,7 +1422,7 @@ int packet_parse_common_l3_l4(packet_parser_t *prs, const uint8_t *parseptr, if (odp_unlikely(offset + _ODP_TCPHDR_LEN > seg_len)) return -1; prs->input_flags.tcp = 1; - parse_tcp(prs, &parseptr, NULL); + parse_tcp(prs, &parseptr); break;
case _ODP_IPPROTO_UDP:
commit b8cb2ce41182440795f2291a4dea57eac1856b4e Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 14:11:28 2018 +0200
Port 1846217 "linux-gen: packet: fix IP multicast parse"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index 58a16bd1..b0353694 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -1250,7 +1250,7 @@ static inline uint8_t parse_ipv4(packet_parser_t *prs, const uint8_t **parseptr, if (odp_unlikely(dstaddr == 0xffffffff)) prs->input_flags.ip_bcast = 1;
- if (odp_unlikely((dstaddr >> 28) == 0xd)) + if (odp_unlikely((dstaddr >> 28) == 0xe)) prs->input_flags.ip_mcast = 1;
return ipv4->proto;
commit 7a7c464be42f73296055cfd6a1901750ec4349ff Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 14:09:06 2018 +0200
Port 994e954 "linux-gen: packet: optimize parse ipv4 and udp"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index b356234d..58a16bd1 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -1218,15 +1218,16 @@ static inline uint8_t parse_ipv4(packet_parser_t *prs, const uint8_t **parseptr, uint32_t *offset, uint32_t frame_len) { const _odp_ipv4hdr_t *ipv4 = (const _odp_ipv4hdr_t *)*parseptr; - uint8_t ver = _ODP_IPV4HDR_VER(ipv4->ver_ihl); - uint8_t ihl = _ODP_IPV4HDR_IHL(ipv4->ver_ihl); - uint16_t frag_offset; uint32_t dstaddr = _odp_be_to_cpu_32(ipv4->dst_addr); uint32_t l3_len = _odp_be_to_cpu_16(ipv4->tot_len); + uint16_t frag_offset = _odp_be_to_cpu_16(ipv4->frag_offset); + uint8_t ver = _ODP_IPV4HDR_VER(ipv4->ver_ihl); + uint8_t ihl = _ODP_IPV4HDR_IHL(ipv4->ver_ihl); + + if (odp_unlikely(ihl < _ODP_IPV4HDR_IHL_MIN || + ver != 4 || + (l3_len > frame_len - *offset))) {
- if (odp_unlikely(ihl < _ODP_IPV4HDR_IHL_MIN) || - odp_unlikely(ver != 4) || - (l3_len > frame_len - *offset)) { prs->error_flags.ip_err = 1; return 0; } @@ -1242,13 +1243,15 @@ static inline uint8_t parse_ipv4(packet_parser_t *prs, const uint8_t **parseptr, * OR * "fragment offset" field is nonzero (all fragments except the first) */ - frag_offset = _odp_be_to_cpu_16(ipv4->frag_offset); if (odp_unlikely(_ODP_IPV4HDR_IS_FRAGMENT(frag_offset))) prs->input_flags.ipfrag = 1;
/* Handle IPv4 broadcast / multicast */ - prs->input_flags.ip_bcast = (dstaddr == 0xffffffff); - prs->input_flags.ip_mcast = (dstaddr >> 28) == 0xd; + if (odp_unlikely(dstaddr == 0xffffffff)) + prs->input_flags.ip_bcast = 1; + + if (odp_unlikely((dstaddr >> 28) == 0xd)) + prs->input_flags.ip_mcast = 1;
return ipv4->proto; } @@ -1337,17 +1340,16 @@ static inline void parse_tcp(packet_parser_t *prs, /** * Parser helper function for UDP */ -static inline void parse_udp(packet_parser_t *prs, - const uint8_t **parseptr, uint32_t *offset) +static inline void parse_udp(packet_parser_t *prs, const uint8_t **parseptr) { const _odp_udphdr_t *udp = (const _odp_udphdr_t *)*parseptr; uint32_t udplen = _odp_be_to_cpu_16(udp->length); + uint16_t ipsec_port = _odp_cpu_to_be_16(_ODP_UDP_IPSEC_PORT);
if (odp_unlikely(udplen < sizeof(_odp_udphdr_t))) prs->error_flags.udp_err = 1;
- if (_odp_cpu_to_be_16(_ODP_UDP_IPSEC_PORT) == udp->dst_port && - udplen > 4) { + if (odp_unlikely(ipsec_port == udp->dst_port && udplen > 4)) { uint32_t val;
memcpy(&val, udp + 1, 4); @@ -1357,8 +1359,6 @@ static inline void parse_udp(packet_parser_t *prs, } }
- if (offset) - *offset += sizeof(_odp_udphdr_t); *parseptr += sizeof(_odp_udphdr_t); }
@@ -1372,7 +1372,7 @@ int packet_parse_common_l3_l4(packet_parser_t *prs, const uint8_t *parseptr,
prs->l3_offset = offset;
- if (layer <= ODP_PROTO_LAYER_L2) + if (odp_unlikely(layer <= ODP_PROTO_LAYER_L2)) return prs->error_flags.all != 0;
/* Set l3 flag only for known ethtypes */ @@ -1433,7 +1433,7 @@ int packet_parse_common_l3_l4(packet_parser_t *prs, const uint8_t *parseptr, if (odp_unlikely(offset + _ODP_UDPHDR_LEN > seg_len)) return -1; prs->input_flags.udp = 1; - parse_udp(prs, &parseptr, NULL); + parse_udp(prs, &parseptr); break;
case _ODP_IPPROTO_AH: @@ -1462,7 +1462,7 @@ int packet_parse_common_l3_l4(packet_parser_t *prs, const uint8_t *parseptr, * Parse common packet headers up to given layer * * The function expects at least PACKET_PARSE_SEG_LEN bytes of data to be - * available from the ptr. + * available from the ptr. Also parse metadata must be already initialized. */ int packet_parse_common(packet_parser_t *prs, const uint8_t *ptr, uint32_t frame_len, uint32_t seg_len,
commit ebd0e3f98c55ecd56c91525f5a5a728f233d55b3 Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 13:53:42 2018 +0200
Port d912f56 "linux-gen: ptkio: loop: inline odp_packet_has_ipsec"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_flag_inlines.h b/platform/linux-dpdk/include/odp/api/plat/packet_flag_inlines.h index f33e4461..5913493b 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_flag_inlines.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_flag_inlines.h @@ -80,6 +80,15 @@ static inline int _odp_packet_has_ts(odp_packet_t pkt) return flags.timestamp; }
+/** @internal Inline function @param pkt @return */ +static inline int _odp_packet_has_ipsec(odp_packet_t pkt) +{ + _odp_packet_input_flags_t flags; + + flags.all = _odp_packet_input_flags(pkt); + return flags.ipsec; +} + #ifdef __cplusplus } #endif diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_flag_inlines_api.h b/platform/linux-dpdk/include/odp/api/plat/packet_flag_inlines_api.h index 24062bf2..8b4dbe6e 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_flag_inlines_api.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_flag_inlines_api.h @@ -43,4 +43,9 @@ _ODP_INLINE int odp_packet_has_ts(odp_packet_t pkt) return _odp_packet_has_ts(pkt); }
+_ODP_INLINE int odp_packet_has_ipsec(odp_packet_t pkt) +{ + return _odp_packet_has_ipsec(pkt); +} + #endif diff --git a/platform/linux-dpdk/odp_packet_flags.c b/platform/linux-dpdk/odp_packet_flags.c index a5519732..d35d0591 100644 --- a/platform/linux-dpdk/odp_packet_flags.c +++ b/platform/linux-dpdk/odp_packet_flags.c @@ -116,11 +116,6 @@ int odp_packet_has_ipopt(odp_packet_t pkt) retflag(pkt, input_flags.ipopt); }
-int odp_packet_has_ipsec(odp_packet_t pkt) -{ - retflag(pkt, input_flags.ipsec); -} - int odp_packet_has_udp(odp_packet_t pkt) { retflag(pkt, input_flags.udp);
commit d69d4b4c19a6cd80046aafc1389e23e7f6eeab2c Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 11:28:49 2018 +0200
Port 27a7923 "linux-gen: packet: inline packet input index function"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h index f6d75009..d15e56a4 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h @@ -26,6 +26,7 @@ extern "C" {
#include <odp/api/plat/packet_inline_types.h> #include <odp/api/plat/pool_inline_types.h> +#include <odp/api/plat/pktio_inlines.h>
#include <string.h> /* Required by rte_mbuf.h */ @@ -110,6 +111,13 @@ static inline odp_pktio_t _odp_packet_input(odp_packet_t pkt) return _odp_pkt_get(pkt, odp_pktio_t, input); }
+static inline int _odp_packet_input_index(odp_packet_t pkt) +{ + odp_pktio_t pktio = _odp_packet_input(pkt); + + return _odp_pktio_index(pktio); +} + static inline int _odp_packet_num_segs(odp_packet_t pkt) { return _odp_pkt_get(pkt, uint16_t, nb_segs); diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_inlines_api.h b/platform/linux-dpdk/include/odp/api/plat/packet_inlines_api.h index 6555b5ac..ed41f2ae 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_inlines_api.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_inlines_api.h @@ -54,6 +54,11 @@ _ODP_INLINE odp_pktio_t odp_packet_input(odp_packet_t pkt) return _odp_packet_input(pkt); }
+_ODP_INLINE int odp_packet_input_index(odp_packet_t pkt) +{ + return _odp_packet_input_index(pkt); +} + _ODP_INLINE int odp_packet_num_segs(odp_packet_t pkt) { return _odp_packet_num_segs(pkt); diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index 8ad2d0dc..b356234d 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -530,11 +530,6 @@ int odp_packet_trunc_tail(odp_packet_t *pkt, uint32_t len, void **tail_ptr, * */
-int odp_packet_input_index(odp_packet_t pkt) -{ - return _odp_pktio_index(packet_hdr(pkt)->input); -} - void odp_packet_user_ptr_set(odp_packet_t pkt, const void *ctx) { packet_hdr(pkt)->buf_hdr.buf_cctx = ctx;
commit 7cf851df4e72972a620de4b820496a4afb6edc8e Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 11:25:21 2018 +0200
Port bfa24c0 "linux-gen: pktio: inline pktio index function"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 7fc2c381..48f7da39 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -22,6 +22,8 @@ odpapiplatinclude_HEADERS = \ include/odp/api/plat/packet_inline_types.h \ include/odp/api/plat/packet_inlines.h \ include/odp/api/plat/packet_inlines_api.h \ + include/odp/api/plat/pktio_inlines.h \ + include/odp/api/plat/pktio_inlines_api.h \ include/odp/api/plat/pool_inline_types.h \ include/odp/api/plat/std_clib_inlines.h \ include/odp/api/plat/strong_types.h \ @@ -172,6 +174,7 @@ __LIB__libodp_dpdk_la_SOURCES += \ ../linux-generic/odp_byteorder.c \ ../linux-generic/odp_packet_api.c \ ../linux-generic/odp_packet_flags_api.c \ + ../linux-generic/odp_pktio_api.c \ odp_std_clib.c \ ../linux-generic/odp_sync.c \ ../linux-generic/odp_thread_api.c \ diff --git a/platform/linux-dpdk/include/odp/api/plat/pktio_inlines.h b/platform/linux-dpdk/include/odp/api/plat/pktio_inlines.h new file mode 120000 index 00000000..c0c7cad0 --- /dev/null +++ b/platform/linux-dpdk/include/odp/api/plat/pktio_inlines.h @@ -0,0 +1 @@ +../../../../../linux-generic/include/odp/api/plat/pktio_inlines.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/plat/pktio_inlines_api.h b/platform/linux-dpdk/include/odp/api/plat/pktio_inlines_api.h new file mode 120000 index 00000000..f96231dc --- /dev/null +++ b/platform/linux-dpdk/include/odp/api/plat/pktio_inlines_api.h @@ -0,0 +1 @@ +../../../../../linux-generic/include/odp/api/plat/pktio_inlines_api.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp_packet_io_internal.h b/platform/linux-dpdk/include/odp_packet_io_internal.h index 3c3bcc47..b7590597 100644 --- a/platform/linux-dpdk/include/odp_packet_io_internal.h +++ b/platform/linux-dpdk/include/odp_packet_io_internal.h @@ -18,6 +18,8 @@ extern "C" { #endif
+#include <odp/api/packet_io.h> +#include <odp/api/plat/pktio_inlines.h> #include <odp/api/spinlock.h> #include <odp/api/ticketlock.h> #include <odp_classification_datamodel.h> @@ -173,13 +175,10 @@ typedef struct pktio_if_ops {
extern void *pktio_entry_ptr[];
-static inline int pktio_to_id(odp_pktio_t pktio) -{ - return _odp_typeval(pktio) - 1; -} - static inline pktio_entry_t *get_pktio_entry(odp_pktio_t pktio) { + int idx; + if (odp_unlikely(pktio == ODP_PKTIO_INVALID)) return NULL;
@@ -189,7 +188,9 @@ static inline pktio_entry_t *get_pktio_entry(odp_pktio_t pktio) return NULL; }
- return pktio_entry_ptr[pktio_to_id(pktio)]; + idx = _odp_pktio_index(pktio); + + return pktio_entry_ptr[idx]; }
static inline int pktio_cls_enabled(pktio_entry_t *entry) diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index 360b31c9..8ad2d0dc 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -13,6 +13,8 @@ #include <odp/api/hints.h> #include <odp/api/byteorder.h> #include <odp/api/plat/byteorder_inlines.h> +#include <odp/api/packet_io.h> +#include <odp/api/plat/pktio_inlines.h>
#include <protocols/eth.h> #include <protocols/ip.h> @@ -530,7 +532,7 @@ int odp_packet_trunc_tail(odp_packet_t *pkt, uint32_t len, void **tail_ptr,
int odp_packet_input_index(odp_packet_t pkt) { - return odp_pktio_index(packet_hdr(pkt)->input); + return _odp_pktio_index(packet_hdr(pkt)->input); }
void odp_packet_user_ptr_set(odp_packet_t pkt, const void *ctx)
commit d0e6679b7b3aec6e8ce0615ce764c76ca76b5d90 Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 11:16:58 2018 +0200
Port eeb0984 "linux-gen: packet: inline conversions between packet and event"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/packet.h b/platform/linux-dpdk/include-abi/odp/api/abi/packet.h index ea8a7ecd..7daed989 100644 --- a/platform/linux-dpdk/include-abi/odp/api/abi/packet.h +++ b/platform/linux-dpdk/include-abi/odp/api/abi/packet.h @@ -27,7 +27,7 @@ extern "C" {
typedef ODP_HANDLE_T(odp_packet_t);
-#define ODP_PACKET_INVALID _odp_cast_scalar(odp_packet_t, NULL) +#define ODP_PACKET_INVALID _odp_cast_scalar(odp_packet_t, 0)
#define ODP_PACKET_OFFSET_INVALID 0xffff
diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h index 2013557f..f6d75009 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h @@ -275,6 +275,35 @@ static inline int _odp_packet_copy_from_mem(odp_packet_t pkt, uint32_t offset, return 0; }
+static inline odp_packet_t _odp_packet_from_event(odp_event_t ev) +{ + return (odp_packet_t)ev; +} + +static inline odp_event_t _odp_packet_to_event(odp_packet_t pkt) +{ + return (odp_event_t)pkt; +} + +static inline void _odp_packet_from_event_multi(odp_packet_t pkt[], + const odp_event_t ev[], + int num) +{ + int i; + + for (i = 0; i < num; i++) + pkt[i] = _odp_packet_from_event(ev[i]); +} + +static inline void _odp_packet_to_event_multi(const odp_packet_t pkt[], + odp_event_t ev[], int num) +{ + int i; + + for (i = 0; i < num; i++) + ev[i] = _odp_packet_to_event(pkt[i]); +} + #ifdef __cplusplus } #endif diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_inlines_api.h b/platform/linux-dpdk/include/odp/api/plat/packet_inlines_api.h index d303a1e8..6555b5ac 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_inlines_api.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_inlines_api.h @@ -163,4 +163,26 @@ _ODP_INLINE int odp_packet_copy_to_mem(odp_packet_t pkt, uint32_t offset, return _odp_packet_copy_to_mem(pkt, offset, len, dst); }
+_ODP_INLINE odp_packet_t odp_packet_from_event(odp_event_t ev) +{ + return _odp_packet_from_event(ev); +} + +_ODP_INLINE odp_event_t odp_packet_to_event(odp_packet_t pkt) +{ + return _odp_packet_to_event(pkt); +} + +_ODP_INLINE void odp_packet_from_event_multi(odp_packet_t pkt[], + const odp_event_t ev[], int num) +{ + return _odp_packet_from_event_multi(pkt, ev, num); +} + +_ODP_INLINE void odp_packet_to_event_multi(const odp_packet_t pkt[], + odp_event_t ev[], int num) +{ + return _odp_packet_to_event_multi(pkt, ev, num); +} + #endif diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index 1c45ed7d..360b31c9 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -66,15 +66,14 @@ ODP_STATIC_ASSERT(sizeof(dummy.hash.rss) == sizeof(uint32_t), ODP_STATIC_ASSERT(sizeof(dummy.ol_flags) == sizeof(uint64_t), "ol_flags should be uint64_t");
-static inline odp_buffer_t buffer_handle(odp_packet_hdr_t *pkt_hdr) -{ - return (odp_buffer_t)pkt_hdr; -} - -static inline odp_packet_hdr_t *buf_to_packet_hdr(odp_buffer_t buf) -{ - return (odp_packet_hdr_t *)buf_hdl_to_hdr(buf); -} +/* Check that invalid values are the same. Some versions of Clang have trouble + * with the strong type casting, and complain that these invalid values are not + * integral constants. */ +#ifndef __clang__ +ODP_STATIC_ASSERT(ODP_PACKET_INVALID == 0, "Packet invalid not 0"); +ODP_STATIC_ASSERT(ODP_BUFFER_INVALID == 0, "Buffer invalid not 0"); +ODP_STATIC_ASSERT(ODP_EVENT_INVALID == 0, "Event invalid not 0"); +#endif
odp_packet_t _odp_packet_from_buf_hdr(odp_buffer_hdr_t *buf_hdr) { @@ -235,40 +234,6 @@ int odp_packet_reset(odp_packet_t pkt, uint32_t len) return 0; }
-odp_packet_t odp_packet_from_event(odp_event_t ev) -{ - if (odp_unlikely(ev == ODP_EVENT_INVALID)) - return ODP_PACKET_INVALID; - - return (odp_packet_t)buf_to_packet_hdr((odp_buffer_t)ev); -} - -odp_event_t odp_packet_to_event(odp_packet_t pkt) -{ - if (odp_unlikely(pkt == ODP_PACKET_INVALID)) - return ODP_EVENT_INVALID; - - return (odp_event_t)buffer_handle(packet_hdr(pkt)); -} - -void odp_packet_from_event_multi(odp_packet_t pkt[], const odp_event_t ev[], - int num) -{ - int i; - - for (i = 0; i < num; i++) - pkt[i] = odp_packet_from_event(ev[i]); -} - -void odp_packet_to_event_multi(const odp_packet_t pkt[], odp_event_t ev[], - int num) -{ - int i; - - for (i = 0; i < num; i++) - ev[i] = odp_packet_to_event(pkt[i]); -} - int odp_event_filter_packet(const odp_event_t event[], odp_packet_t packet[], odp_event_t remain[], int num)
commit f3c999a995792ce51eacfc5be26c74f16002047b Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 10:56:56 2018 +0200
Port 637a332 "linux-gen: packet: remove odp_packet_hdr function"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h index 87ab72b8..2013557f 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h @@ -229,11 +229,6 @@ static inline void _odp_packet_prefetch(odp_packet_t pkt, uint32_t offset, uint3 rte_prefetch0(addr + ofs); }
-static inline odp_buffer_t packet_to_buffer(odp_packet_t pkt) -{ - return (odp_buffer_t)pkt; -} - static inline int _odp_packet_copy_to_mem(odp_packet_t pkt, uint32_t offset, uint32_t len, void *dst) { diff --git a/platform/linux-dpdk/include/odp_packet_internal.h b/platform/linux-dpdk/include/odp_packet_internal.h index bcc4e7b4..fb5431cf 100644 --- a/platform/linux-dpdk/include/odp_packet_internal.h +++ b/platform/linux-dpdk/include/odp_packet_internal.h @@ -150,7 +150,7 @@ typedef struct { /** * Return the packet header */ -static inline odp_packet_hdr_t *odp_packet_hdr(odp_packet_t pkt) +static inline odp_packet_hdr_t *packet_hdr(odp_packet_t pkt) { return (odp_packet_hdr_t *)(uintptr_t)pkt; } @@ -162,7 +162,7 @@ static inline struct rte_mbuf *pkt_to_mbuf(odp_packet_t pkt)
static inline odp_buffer_hdr_t *packet_to_buf_hdr(odp_packet_t pkt) { - return &odp_packet_hdr(pkt)->buf_hdr; + return &packet_hdr(pkt)->buf_hdr; }
static inline odp_packet_t packet_from_buf_hdr(odp_buffer_hdr_t *buf_hdr) @@ -172,12 +172,12 @@ static inline odp_packet_t packet_from_buf_hdr(odp_buffer_hdr_t *buf_hdr)
static inline odp_event_subtype_t packet_subtype(odp_packet_t pkt) { - return odp_packet_hdr(pkt)->subtype; + return packet_hdr(pkt)->subtype; }
static inline void packet_subtype_set(odp_packet_t pkt, int ev) { - odp_packet_hdr(pkt)->subtype = ev; + packet_hdr(pkt)->subtype = ev; }
/** diff --git a/platform/linux-dpdk/odp_crypto.c b/platform/linux-dpdk/odp_crypto.c index 9e592b82..ed7e29c1 100644 --- a/platform/linux-dpdk/odp_crypto.c +++ b/platform/linux-dpdk/odp_crypto.c @@ -1291,7 +1291,7 @@ odp_event_t odp_crypto_packet_to_event(odp_packet_t pkt) static odp_crypto_packet_result_t *get_op_result_from_packet(odp_packet_t pkt) { - odp_packet_hdr_t *hdr = odp_packet_hdr(pkt); + odp_packet_hdr_t *hdr = packet_hdr(pkt);
return &hdr->crypto_op_result; } @@ -1375,7 +1375,7 @@ int odp_crypto_int(odp_packet_t pkt_in, (rc_cipher == ODP_CRYPTO_ALG_ERR_NONE) && (rc_auth == ODP_CRYPTO_ALG_ERR_NONE);
- pkt_hdr = odp_packet_hdr(out_pkt); + pkt_hdr = packet_hdr(out_pkt); pkt_hdr->p.error_flags.crypto_err = !op_result->ok;
/* Synchronous, simply return results */ diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index a57e963d..1c45ed7d 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -81,6 +81,11 @@ odp_packet_t _odp_packet_from_buf_hdr(odp_buffer_hdr_t *buf_hdr) return (odp_packet_t)buf_hdr; }
+static inline odp_buffer_t packet_to_buffer(odp_packet_t pkt) +{ + return (odp_buffer_t)pkt; +} + void packet_parse_reset(odp_packet_hdr_t *pkt_hdr) { /* Reset parser metadata before new parse */ @@ -180,7 +185,7 @@ void odp_packet_free_sp(const odp_packet_t pkt[], int num)
int odp_packet_reset(odp_packet_t pkt, uint32_t len) { - odp_packet_hdr_t *const pkt_hdr = odp_packet_hdr(pkt); + odp_packet_hdr_t *const pkt_hdr = packet_hdr(pkt); struct rte_mbuf *ms, *mb = &pkt_hdr->buf_hdr.mb; uint8_t nb_segs = 0; int32_t lenleft = len; @@ -243,7 +248,7 @@ odp_event_t odp_packet_to_event(odp_packet_t pkt) if (odp_unlikely(pkt == ODP_PACKET_INVALID)) return ODP_EVENT_INVALID;
- return (odp_event_t)buffer_handle(odp_packet_hdr(pkt)); + return (odp_event_t)buffer_handle(packet_hdr(pkt)); }
void odp_packet_from_event_multi(odp_packet_t pkt[], const odp_event_t ev[], @@ -287,19 +292,19 @@ int odp_event_filter_packet(const odp_event_t event[],
uint32_t odp_packet_buf_len(odp_packet_t pkt) { - return odp_packet_hdr(pkt)->buf_hdr.totsize; + return packet_hdr(pkt)->buf_hdr.totsize; }
void *odp_packet_tail(odp_packet_t pkt) { - struct rte_mbuf *mb = &(odp_packet_hdr(pkt)->buf_hdr.mb); + struct rte_mbuf *mb = &(packet_hdr(pkt)->buf_hdr.mb); mb = rte_pktmbuf_lastseg(mb); return (void *)(rte_pktmbuf_mtod(mb, char *) + mb->data_len); }
void *odp_packet_push_head(odp_packet_t pkt, uint32_t len) { - struct rte_mbuf *mb = &(odp_packet_hdr(pkt)->buf_hdr.mb); + struct rte_mbuf *mb = &(packet_hdr(pkt)->buf_hdr.mb); return (void *)rte_pktmbuf_prepend(mb, len); }
@@ -307,7 +312,7 @@ static void _copy_head_metadata(struct rte_mbuf *newhead, struct rte_mbuf *oldhead) { odp_packet_t pkt = (odp_packet_t)newhead; - uint32_t saved_index = odp_packet_hdr(pkt)->buf_hdr.index; + uint32_t saved_index = packet_hdr(pkt)->buf_hdr.index;
rte_mbuf_refcnt_set(newhead, rte_mbuf_refcnt_read(oldhead)); newhead->port = oldhead->port; @@ -321,13 +326,13 @@ static void _copy_head_metadata(struct rte_mbuf *newhead, memcpy(&newhead->tx_offload, &oldhead->tx_offload, sizeof(odp_packet_hdr_t) - offsetof(struct rte_mbuf, tx_offload)); - odp_packet_hdr(pkt)->buf_hdr.index = saved_index; + packet_hdr(pkt)->buf_hdr.index = saved_index; }
int odp_packet_extend_head(odp_packet_t *pkt, uint32_t len, void **data_ptr, uint32_t *seg_len) { - struct rte_mbuf *mb = &(odp_packet_hdr(*pkt)->buf_hdr.mb); + struct rte_mbuf *mb = &(packet_hdr(*pkt)->buf_hdr.mb); int addheadsize = len - rte_pktmbuf_headroom(mb);
if (addheadsize > 0) { @@ -368,7 +373,7 @@ int odp_packet_extend_head(odp_packet_t *pkt, uint32_t len, void **data_ptr, _copy_head_metadata(newhead, mb); mb = newhead; *pkt = (odp_packet_t)newhead; - odp_packet_hdr(*pkt)->buf_hdr.totsize += totsize_change; + packet_hdr(*pkt)->buf_hdr.totsize += totsize_change; } else { rte_pktmbuf_prepend(mb, len); } @@ -383,14 +388,14 @@ int odp_packet_extend_head(odp_packet_t *pkt, uint32_t len, void **data_ptr,
void *odp_packet_pull_head(odp_packet_t pkt, uint32_t len) { - struct rte_mbuf *mb = &(odp_packet_hdr(pkt)->buf_hdr.mb); + struct rte_mbuf *mb = &(packet_hdr(pkt)->buf_hdr.mb); return (void *)rte_pktmbuf_adj(mb, len); }
int odp_packet_trunc_head(odp_packet_t *pkt, uint32_t len, void **data_ptr, uint32_t *seg_len) { - struct rte_mbuf *mb = &(odp_packet_hdr(*pkt)->buf_hdr.mb); + struct rte_mbuf *mb = &(packet_hdr(*pkt)->buf_hdr.mb);
if (odp_packet_len(*pkt) < len) return -1; @@ -417,7 +422,7 @@ int odp_packet_trunc_head(odp_packet_t *pkt, uint32_t len, void **data_ptr, prev->next = NULL; rte_pktmbuf_free(mb); *pkt = (odp_packet_t)newhead; - odp_packet_hdr(*pkt)->buf_hdr.totsize -= totsize_change; + packet_hdr(*pkt)->buf_hdr.totsize -= totsize_change; } else { rte_pktmbuf_adj(mb, len); } @@ -432,7 +437,7 @@ int odp_packet_trunc_head(odp_packet_t *pkt, uint32_t len, void **data_ptr,
void *odp_packet_push_tail(odp_packet_t pkt, uint32_t len) { - struct rte_mbuf *mb = &(odp_packet_hdr(pkt)->buf_hdr.mb); + struct rte_mbuf *mb = &(packet_hdr(pkt)->buf_hdr.mb);
return (void *)rte_pktmbuf_append(mb, len); } @@ -440,7 +445,7 @@ void *odp_packet_push_tail(odp_packet_t pkt, uint32_t len) int odp_packet_extend_tail(odp_packet_t *pkt, uint32_t len, void **data_ptr, uint32_t *seg_len) { - struct rte_mbuf *mb = &(odp_packet_hdr(*pkt)->buf_hdr.mb); + struct rte_mbuf *mb = &(packet_hdr(*pkt)->buf_hdr.mb); int newtailsize = len - odp_packet_tailroom(*pkt); uint32_t old_pkt_len = odp_packet_len(*pkt);
@@ -485,7 +490,7 @@ int odp_packet_extend_tail(odp_packet_t *pkt, uint32_t len, void **data_ptr, /* Expand the original tail */ m_last->data_len = m_last->buf_len - m_last->data_off; mb->pkt_len += len - newtailsize; - odp_packet_hdr(*pkt)->buf_hdr.totsize += + packet_hdr(*pkt)->buf_hdr.totsize += newtail->nb_segs * newtail->buf_len; } else { rte_pktmbuf_append(mb, len); @@ -499,7 +504,7 @@ int odp_packet_extend_tail(odp_packet_t *pkt, uint32_t len, void **data_ptr,
void *odp_packet_pull_tail(odp_packet_t pkt, uint32_t len) { - struct rte_mbuf *mb = &(odp_packet_hdr(pkt)->buf_hdr.mb); + struct rte_mbuf *mb = &(packet_hdr(pkt)->buf_hdr.mb);
if (rte_pktmbuf_trim(mb, len)) return NULL; @@ -510,7 +515,7 @@ void *odp_packet_pull_tail(odp_packet_t pkt, uint32_t len) int odp_packet_trunc_tail(odp_packet_t *pkt, uint32_t len, void **tail_ptr, uint32_t *tailroom) { - struct rte_mbuf *mb = &(odp_packet_hdr(*pkt)->buf_hdr.mb); + struct rte_mbuf *mb = &(packet_hdr(*pkt)->buf_hdr.mb);
if (odp_packet_len(*pkt) < len) return -1; @@ -560,17 +565,17 @@ int odp_packet_trunc_tail(odp_packet_t *pkt, uint32_t len, void **tail_ptr,
int odp_packet_input_index(odp_packet_t pkt) { - return odp_pktio_index(odp_packet_hdr(pkt)->input); + return odp_pktio_index(packet_hdr(pkt)->input); }
void odp_packet_user_ptr_set(odp_packet_t pkt, const void *ctx) { - odp_packet_hdr(pkt)->buf_hdr.buf_cctx = ctx; + packet_hdr(pkt)->buf_hdr.buf_cctx = ctx; }
int odp_packet_l2_offset_set(odp_packet_t pkt, uint32_t offset) { - odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); + odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt);
if (odp_unlikely(offset >= (odp_packet_len(pkt) - 1))) return -1; @@ -582,7 +587,7 @@ int odp_packet_l2_offset_set(odp_packet_t pkt, uint32_t offset)
int odp_packet_l3_offset_set(odp_packet_t pkt, uint32_t offset) { - odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); + odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt);
if (odp_unlikely(offset >= (odp_packet_len(pkt) - 1))) return -1; @@ -593,7 +598,7 @@ int odp_packet_l3_offset_set(odp_packet_t pkt, uint32_t offset)
int odp_packet_l4_offset_set(odp_packet_t pkt, uint32_t offset) { - odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); + odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt);
if (odp_unlikely(offset >= (odp_packet_len(pkt) - 1))) return -1; @@ -612,7 +617,7 @@ uint16_t odp_packet_ones_comp(odp_packet_t pkt, odp_packet_data_range_t *range)
void odp_packet_l3_chksum_insert(odp_packet_t pkt, int insert) { - odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); + odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt);
pkt_hdr->p.output_flags.l3_chksum_set = 1; pkt_hdr->p.output_flags.l3_chksum = insert; @@ -620,7 +625,7 @@ void odp_packet_l3_chksum_insert(odp_packet_t pkt, int insert)
void odp_packet_l4_chksum_insert(odp_packet_t pkt, int insert) { - odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); + odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt);
pkt_hdr->p.output_flags.l4_chksum_set = 1; pkt_hdr->p.output_flags.l4_chksum = insert; @@ -628,7 +633,7 @@ void odp_packet_l4_chksum_insert(odp_packet_t pkt, int insert)
odp_packet_chksum_status_t odp_packet_l3_chksum_status(odp_packet_t pkt) { - odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); + odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt);
if (!pkt_hdr->p.input_flags.l3_chksum_done) return ODP_PACKET_CHKSUM_UNKNOWN; @@ -641,7 +646,7 @@ odp_packet_chksum_status_t odp_packet_l3_chksum_status(odp_packet_t pkt)
odp_packet_chksum_status_t odp_packet_l4_chksum_status(odp_packet_t pkt) { - odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); + odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt);
if (!pkt_hdr->p.input_flags.l4_chksum_done) return ODP_PACKET_CHKSUM_UNKNOWN; @@ -654,7 +659,7 @@ odp_packet_chksum_status_t odp_packet_l4_chksum_status(odp_packet_t pkt)
void odp_packet_ts_set(odp_packet_t pkt, odp_time_t timestamp) { - odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); + odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt);
packet_set_ts(pkt_hdr, ×tamp); } @@ -687,7 +692,7 @@ uint32_t odp_packet_seg_data_len(odp_packet_t pkt ODP_UNUSED, int odp_packet_add_data(odp_packet_t *pkt_ptr, uint32_t offset, uint32_t len) { odp_packet_t pkt = *pkt_ptr; - odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); + odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt); uint32_t pktlen = odp_packet_len(pkt); pool_t *pool = pkt_hdr->buf_hdr.pool_ptr; odp_packet_t newpkt; @@ -717,7 +722,7 @@ int odp_packet_add_data(odp_packet_t *pkt_ptr, uint32_t offset, uint32_t len) int odp_packet_rem_data(odp_packet_t *pkt_ptr, uint32_t offset, uint32_t len) { odp_packet_t pkt = *pkt_ptr; - odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); + odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt); uint32_t pktlen = odp_packet_len(pkt); pool_t *pool = pkt_hdr->buf_hdr.pool_ptr; odp_packet_t newpkt; @@ -787,8 +792,8 @@ int odp_packet_align(odp_packet_t *pkt, uint32_t offset, uint32_t len,
int odp_packet_concat(odp_packet_t *dst, odp_packet_t src) { - odp_packet_hdr_t *dst_hdr = odp_packet_hdr(*dst); - odp_packet_hdr_t *src_hdr = odp_packet_hdr(src); + odp_packet_hdr_t *dst_hdr = packet_hdr(*dst); + odp_packet_hdr_t *src_hdr = packet_hdr(src); struct rte_mbuf *mb_dst = pkt_to_mbuf(*dst); struct rte_mbuf *mb_src = pkt_to_mbuf(src); odp_packet_t new_dst; @@ -883,8 +888,8 @@ int odp_packet_copy_from_pkt(odp_packet_t dst, uint32_t dst_offset, odp_packet_t src, uint32_t src_offset, uint32_t len) { - odp_packet_hdr_t *dst_hdr = odp_packet_hdr(dst); - odp_packet_hdr_t *src_hdr = odp_packet_hdr(src); + odp_packet_hdr_t *dst_hdr = packet_hdr(dst); + odp_packet_hdr_t *src_hdr = packet_hdr(src); void *dst_map; void *src_map; uint32_t cpylen, minseg; @@ -953,7 +958,7 @@ int _odp_packet_set_data(odp_packet_t pkt, uint32_t offset, void *mapaddr; uint32_t seglen = 0; /* GCC */ uint32_t setlen; - odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); + odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt);
if (offset + len > packet_len(pkt_hdr)) return -1; @@ -979,7 +984,7 @@ int _odp_packet_cmp_data(odp_packet_t pkt, uint32_t offset, uint32_t seglen = 0; /* GCC */ uint32_t cmplen; int ret; - odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); + odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt);
ODP_ASSERT(offset + len <= packet_len(pkt_hdr));
@@ -1011,7 +1016,7 @@ void odp_packet_print(odp_packet_t pkt) char str[max_len]; int len = 0; int n = max_len - 1; - odp_packet_hdr_t *hdr = odp_packet_hdr(pkt); + odp_packet_hdr_t *hdr = packet_hdr(pkt); odp_buffer_t buf = packet_to_buffer(pkt);
len += snprintf(&str[len], n - len, "Packet "); @@ -1062,7 +1067,7 @@ void odp_packet_print(odp_packet_t pkt) void odp_packet_print_data(odp_packet_t pkt, uint32_t offset, uint32_t byte_len) { - odp_packet_hdr_t *hdr = odp_packet_hdr(pkt); + odp_packet_hdr_t *hdr = packet_hdr(pkt); uint32_t bytes_per_row = 16; int num_rows = (byte_len + bytes_per_row - 1) / bytes_per_row; int max_len = 256 + (3 * byte_len) + (3 * num_rows); @@ -1141,8 +1146,8 @@ int odp_packet_is_valid(odp_packet_t pkt)
int _odp_packet_copy_md_to_packet(odp_packet_t srcpkt, odp_packet_t dstpkt) { - odp_packet_hdr_t *srchdr = odp_packet_hdr(srcpkt); - odp_packet_hdr_t *dsthdr = odp_packet_hdr(dstpkt); + odp_packet_hdr_t *srchdr = packet_hdr(srcpkt); + odp_packet_hdr_t *dsthdr = packet_hdr(dstpkt); uint32_t src_size = odp_packet_user_area_size(srcpkt); uint32_t dst_size = odp_packet_user_area_size(dstpkt);
@@ -1556,7 +1561,7 @@ int packet_parse_l3_l4(odp_packet_hdr_t *pkt_hdr, int odp_packet_parse(odp_packet_t pkt, uint32_t offset, const odp_packet_parse_param_t *param) { - odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); + odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt); void *data; uint32_t seg_len; uint32_t len = packet_len(pkt_hdr); diff --git a/platform/linux-dpdk/odp_packet_dpdk.c b/platform/linux-dpdk/odp_packet_dpdk.c index a167e5a0..7496e841 100644 --- a/platform/linux-dpdk/odp_packet_dpdk.c +++ b/platform/linux-dpdk/odp_packet_dpdk.c @@ -635,7 +635,7 @@ static int recv_pkt_dpdk(pktio_entry_t *pktio_entry, int index, odp_ticketlock_unlock(&pkt_dpdk->rx_lock[index]);
for (i = 0; i < nb_rx; ++i) { - odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt_table[i]); + odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt_table[i]);
packet_init(pkt_hdr); pkt_hdr->input = pktio_entry->s.handle; @@ -667,8 +667,7 @@ static int recv_pkt_dpdk(pktio_entry_t *pktio_entry, int index, uint8_t *pkt_addr; odp_packet_hdr_t parsed_hdr; int ret; - odp_packet_hdr_t *pkt_hdr = - odp_packet_hdr(pkt_table[i]); + odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt_table[i]);
pkt_addr = odp_packet_data(pkt_table[i]); ret = cls_classify_packet(pktio_entry, pkt_addr, @@ -711,8 +710,7 @@ static int recv_pkt_dpdk(pktio_entry_t *pktio_entry, int index, for (i = 0, j = 0; i < nb_rx; i++) { pkt = pkt_table[i];
- if (pkt_set_ol_rx(pktin_cfg, - odp_packet_hdr(pkt), + if (pkt_set_ol_rx(pktin_cfg, packet_hdr(pkt), pkt_to_mbuf(pkt))) { rte_pktmbuf_free(pkt_to_mbuf(pkt)); continue; @@ -858,7 +856,7 @@ static int send_pkt_dpdk(pktio_entry_t *pktio_entry, int index, mbuf->ol_flags = 0; if (chksum_insert_ena) pkt_set_ol_tx(pktout_cfg, pktout_capa, - odp_packet_hdr(pkt_table[i]), mbuf, + packet_hdr(pkt_table[i]), mbuf, rte_pktmbuf_mtod(mbuf, char *));
num_tx++; diff --git a/platform/linux-dpdk/odp_packet_flags.c b/platform/linux-dpdk/odp_packet_flags.c index 52dc9bf3..a5519732 100644 --- a/platform/linux-dpdk/odp_packet_flags.c +++ b/platform/linux-dpdk/odp_packet_flags.c @@ -9,18 +9,18 @@ #include <odp_packet_internal.h>
#define retflag(pkt, x) do { \ - odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); \ + odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt); \ return pkt_hdr->p.x; \ } while (0)
#define setflag(pkt, x, v) do { \ - odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); \ + odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt); \ pkt_hdr->p.x = (v) & 1; \ } while (0)
int odp_packet_has_error(odp_packet_t pkt) { - odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); + odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt);
return pkt_hdr->p.error_flags.all != 0; } @@ -29,7 +29,7 @@ int odp_packet_has_error(odp_packet_t pkt)
int odp_packet_has_l2_error(odp_packet_t pkt) { - odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); + odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt); /* L2 parsing is always done by default and hence no additional check is required */ return pkt_hdr->p.error_flags.frame_len @@ -44,7 +44,7 @@ int odp_packet_has_l3(odp_packet_t pkt)
int odp_packet_has_l3_error(odp_packet_t pkt) { - odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); + odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt);
return pkt_hdr->p.error_flags.ip_err; } @@ -56,7 +56,7 @@ int odp_packet_has_l4(odp_packet_t pkt)
int odp_packet_has_l4_error(odp_packet_t pkt) { - odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); + odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt);
return pkt_hdr->p.error_flags.tcp_err | pkt_hdr->p.error_flags.udp_err; } @@ -148,14 +148,14 @@ odp_packet_color_t odp_packet_color(odp_packet_t pkt)
void odp_packet_color_set(odp_packet_t pkt, odp_packet_color_t color) { - odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); + odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt);
pkt_hdr->p.input_flags.color = color; }
odp_bool_t odp_packet_drop_eligible(odp_packet_t pkt) { - odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); + odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt);
return !pkt_hdr->p.input_flags.nodrop; } @@ -172,7 +172,7 @@ int8_t odp_packet_shaper_len_adjust(odp_packet_t pkt)
void odp_packet_shaper_len_adjust_set(odp_packet_t pkt, int8_t adj) { - odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); + odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt);
pkt_hdr->p.output_flags.shaper_len_adj = adj; } @@ -286,7 +286,7 @@ void odp_packet_has_icmp_set(odp_packet_t pkt, int val)
void odp_packet_has_ts_clr(odp_packet_t pkt) { - odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); + odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt);
pkt_hdr->p.input_flags.timestamp = 0; }
commit 53d5deca111c9e9a196f11c990868ed31131618e Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 10:46:31 2018 +0200
Port 24847c0 "linux-gen: packet: use inlined copy functions"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index 8e219117..a57e963d 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -1105,7 +1105,7 @@ void odp_packet_print_data(odp_packet_t pkt, uint32_t offset, else copy_len = byte_len;
- odp_packet_copy_to_mem(pkt, offset, copy_len, data); + _odp_packet_copy_to_mem(pkt, offset, copy_len, data);
len += snprintf(&str[len], n - len, " ");
commit 2145bbedde86dd1836bcfb40cb7683ba01c43641 Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 10:43:02 2018 +0200
Port 70217ce "linux-gen: packet: inline copy functions"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h index 8e732590..87ab72b8 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h @@ -27,6 +27,7 @@ extern "C" { #include <odp/api/plat/packet_inline_types.h> #include <odp/api/plat/pool_inline_types.h>
+#include <string.h> /* Required by rte_mbuf.h */ #include <sys/types.h> #include <rte_mbuf.h> @@ -233,6 +234,52 @@ static inline odp_buffer_t packet_to_buffer(odp_packet_t pkt) return (odp_buffer_t)pkt; }
+static inline int _odp_packet_copy_to_mem(odp_packet_t pkt, uint32_t offset, + uint32_t len, void *dst) +{ + void *mapaddr; + uint32_t seglen = 0; /* GCC */ + uint32_t cpylen; + uint8_t *dstaddr = (uint8_t *)dst; + + if (offset + len > _odp_packet_len(pkt)) + return -1; + + while (len > 0) { + mapaddr = _odp_packet_offset(pkt, offset, &seglen, NULL); + cpylen = len > seglen ? seglen : len; + memcpy(dstaddr, mapaddr, cpylen); + offset += cpylen; + dstaddr += cpylen; + len -= cpylen; + } + + return 0; +} + +static inline int _odp_packet_copy_from_mem(odp_packet_t pkt, uint32_t offset, + uint32_t len, const void *src) +{ + void *mapaddr; + uint32_t seglen = 0; /* GCC */ + uint32_t cpylen; + const uint8_t *srcaddr = (const uint8_t *)src; + + if (offset + len > _odp_packet_len(pkt)) + return -1; + + while (len > 0) { + mapaddr = _odp_packet_offset(pkt, offset, &seglen, NULL); + cpylen = len > seglen ? seglen : len; + memcpy(mapaddr, srcaddr, cpylen); + offset += cpylen; + srcaddr += cpylen; + len -= cpylen; + } + + return 0; +} + #ifdef __cplusplus } #endif diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_inlines_api.h b/platform/linux-dpdk/include/odp/api/plat/packet_inlines_api.h index 41cfc0fb..d303a1e8 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_inlines_api.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_inlines_api.h @@ -151,4 +151,16 @@ _ODP_INLINE void odp_packet_prefetch(odp_packet_t pkt, uint32_t offset, return _odp_packet_prefetch(pkt, offset, len); }
+_ODP_INLINE int odp_packet_copy_from_mem(odp_packet_t pkt, uint32_t offset, + uint32_t len, const void *src) +{ + return _odp_packet_copy_from_mem(pkt, offset, len, src); +} + +_ODP_INLINE int odp_packet_copy_to_mem(odp_packet_t pkt, uint32_t offset, + uint32_t len, void *dst) +{ + return _odp_packet_copy_to_mem(pkt, offset, len, dst); +} + #endif diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index b1e1a023..8e219117 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -879,52 +879,6 @@ odp_packet_t odp_packet_copy_part(odp_packet_t pkt, uint32_t offset, return newpkt; }
-int odp_packet_copy_to_mem(odp_packet_t pkt, uint32_t offset, - uint32_t len, void *dst) -{ - void *mapaddr; - uint32_t seglen = 0; /* GCC */ - uint32_t cpylen; - uint8_t *dstaddr = (uint8_t *)dst; - - if (offset + len > odp_packet_len(pkt)) - return -1; - - while (len > 0) { - mapaddr = odp_packet_offset(pkt, offset, &seglen, NULL); - cpylen = len > seglen ? seglen : len; - memcpy(dstaddr, mapaddr, cpylen); - offset += cpylen; - dstaddr += cpylen; - len -= cpylen; - } - - return 0; -} - -int odp_packet_copy_from_mem(odp_packet_t pkt, uint32_t offset, - uint32_t len, const void *src) -{ - void *mapaddr; - uint32_t seglen = 0; /* GCC */ - uint32_t cpylen; - const uint8_t *srcaddr = (const uint8_t *)src; - - if (offset + len > odp_packet_len(pkt)) - return -1; - - while (len > 0) { - mapaddr = odp_packet_offset(pkt, offset, &seglen, NULL); - cpylen = len > seglen ? seglen : len; - memcpy(mapaddr, srcaddr, cpylen); - offset += cpylen; - srcaddr += cpylen; - len -= cpylen; - } - - return 0; -} - int odp_packet_copy_from_pkt(odp_packet_t dst, uint32_t dst_offset, odp_packet_t src, uint32_t src_offset, uint32_t len)
commit c2ebe4e9de1e4f04acaea56b53e0bcfaba3b5ebb Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 10:33:15 2018 +0200
Port e2023d4 "linux-gen: packet: remove dummy doxygen documentation"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h index 1ccc9fb1..8e732590 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h @@ -31,14 +31,12 @@ extern "C" { #include <sys/types.h> #include <rte_mbuf.h>
-/** @internal Inline function offsets */ +/** @cond _ODP_HIDE_FROM_DOXYGEN_ */ + extern const _odp_packet_inline_offset_t _odp_packet_inline;
-/** @internal Pool inline function offsets */ extern const _odp_pool_inline_offset_t _odp_pool_inline;
-/** @internal Inline function @param pkt @param offset @param len @param seg - * @return */ static inline void *_odp_packet_offset(odp_packet_t pkt, uint32_t offset, uint32_t *len, odp_packet_seg_t *seg) { @@ -69,7 +67,6 @@ err: return NULL; }
-/** @internal Inline function @param pkt @return */ static inline void *_odp_packet_data(odp_packet_t pkt) { uint8_t *buf_addr = (uint8_t *)_odp_pkt_get(pkt, void *, buf_addr); @@ -78,25 +75,21 @@ static inline void *_odp_packet_data(odp_packet_t pkt) return (void *)(buf_addr + data_off); }
-/** @internal Inline function @param pkt @return */ static inline uint32_t _odp_packet_seg_len(odp_packet_t pkt) { return _odp_pkt_get(pkt, uint16_t, seg_len); }
-/** @internal Inline function @param pkt @return */ static inline uint32_t _odp_packet_len(odp_packet_t pkt) { return _odp_pkt_get(pkt, uint32_t, pkt_len); }
-/** @internal Inline function @param pkt @return */ static inline uint32_t _odp_packet_headroom(odp_packet_t pkt) { return rte_pktmbuf_headroom(&_odp_pkt_get(pkt, struct rte_mbuf, mb)); }
-/** @internal Inline function @param pkt @return */ static inline uint32_t _odp_packet_tailroom(odp_packet_t pkt) { struct rte_mbuf *mb = &_odp_pkt_get(pkt, struct rte_mbuf, mb); @@ -104,7 +97,6 @@ static inline uint32_t _odp_packet_tailroom(odp_packet_t pkt) return rte_pktmbuf_tailroom(rte_pktmbuf_lastseg(mb)); }
-/** @internal Inline function @param pkt @return */ static inline odp_pool_t _odp_packet_pool(odp_packet_t pkt) { void *pool = _odp_pkt_get(pkt, void *, pool); @@ -112,31 +104,26 @@ static inline odp_pool_t _odp_packet_pool(odp_packet_t pkt) return _odp_pool_get(pool, odp_pool_t, pool_hdl); }
-/** @internal Inline function @param pkt @return */ static inline odp_pktio_t _odp_packet_input(odp_packet_t pkt) { return _odp_pkt_get(pkt, odp_pktio_t, input); }
-/** @internal Inline function @param pkt @return */ static inline int _odp_packet_num_segs(odp_packet_t pkt) { return _odp_pkt_get(pkt, uint16_t, nb_segs); }
-/** @internal Inline function @param pkt @return */ static inline void *_odp_packet_user_ptr(odp_packet_t pkt) { return _odp_pkt_get(pkt, void *, user_ptr); }
-/** @internal Inline function @param pkt @return */ static inline void *_odp_packet_user_area(odp_packet_t pkt) { return (void *)((char *)pkt + _odp_packet_inline.udata); }
-/** @internal Inline function @param pkt @return */ static inline uint32_t _odp_packet_user_area_size(odp_packet_t pkt) { void *pool = _odp_pkt_get(pkt, void *, pool); @@ -144,52 +131,44 @@ static inline uint32_t _odp_packet_user_area_size(odp_packet_t pkt) return _odp_pool_get(pool, uint32_t, uarea_size); }
-/** @internal Inline function @param pkt @return */ static inline uint32_t _odp_packet_l2_offset(odp_packet_t pkt) { return _odp_pkt_get(pkt, uint16_t, l2_offset); }
-/** @internal Inline function @param pkt @return */ static inline uint32_t _odp_packet_l3_offset(odp_packet_t pkt) { return _odp_pkt_get(pkt, uint16_t, l3_offset); }
-/** @internal Inline function @param pkt @return */ static inline uint32_t _odp_packet_l4_offset(odp_packet_t pkt) { return _odp_pkt_get(pkt, uint16_t, l4_offset); }
-/** @internal Inline function @param pkt @param len @return */ static inline void *_odp_packet_l2_ptr(odp_packet_t pkt, uint32_t *len) { return _odp_packet_offset(pkt, _odp_pkt_get(pkt, uint16_t, l2_offset), len, NULL); }
-/** @internal Inline function @param pkt @param len @return */ static inline void *_odp_packet_l3_ptr(odp_packet_t pkt, uint32_t *len) { return _odp_packet_offset(pkt, _odp_pkt_get(pkt, uint16_t, l3_offset), len, NULL); }
-/** @internal Inline function @param pkt @param len @return */ static inline void *_odp_packet_l4_ptr(odp_packet_t pkt, uint32_t *len) { return _odp_packet_offset(pkt, _odp_pkt_get(pkt, uint16_t, l4_offset), len, NULL); }
-/** @internal Inline function @param pkt @return */ static inline uint32_t _odp_packet_flow_hash(odp_packet_t pkt) { return _odp_pkt_get(pkt, uint32_t, rss); }
-/** @internal Inline function @param pkt @param flow_hash */ static inline void _odp_packet_flow_hash_set(odp_packet_t pkt, uint32_t flow_hash) { uint32_t *rss = &_odp_pkt_get(pkt, uint32_t, rss); @@ -199,19 +178,16 @@ static inline void _odp_packet_flow_hash_set(odp_packet_t pkt, uint32_t flow_has *ol_flags |= _odp_packet_inline.rss_flag; }
-/** @internal Inline function @param pkt @return */ static inline odp_time_t _odp_packet_ts(odp_packet_t pkt) { return _odp_pkt_get(pkt, odp_time_t, timestamp); }
-/** @internal Inline function @param pkt @return */ static inline void *_odp_packet_head(odp_packet_t pkt) { return (uint8_t *)_odp_packet_data(pkt) - _odp_packet_headroom(pkt); }
-/** @internal Inline function @param pkt @return */ static inline int _odp_packet_is_segmented(odp_packet_t pkt) { struct rte_mbuf *mb = &_odp_pkt_get(pkt, struct rte_mbuf, mb); @@ -219,13 +195,11 @@ static inline int _odp_packet_is_segmented(odp_packet_t pkt) return !rte_pktmbuf_is_contiguous(mb); }
-/** @internal Inline function @param pkt @return */ static inline odp_packet_seg_t _odp_packet_first_seg(odp_packet_t pkt) { return (odp_packet_seg_t)(uintptr_t)pkt; }
-/** @internal Inline function @param pkt @return */ static inline odp_packet_seg_t _odp_packet_last_seg(odp_packet_t pkt) { struct rte_mbuf *mb = &_odp_pkt_get(pkt, struct rte_mbuf, mb); @@ -233,7 +207,6 @@ static inline odp_packet_seg_t _odp_packet_last_seg(odp_packet_t pkt) return (odp_packet_seg_t)(uintptr_t)rte_pktmbuf_lastseg(mb); }
-/** @internal Inline function @param pkt @param seg @return */ static inline odp_packet_seg_t _odp_packet_next_seg(odp_packet_t pkt, odp_packet_seg_t seg) { @@ -246,7 +219,6 @@ static inline odp_packet_seg_t _odp_packet_next_seg(odp_packet_t pkt, return (odp_packet_seg_t)(uintptr_t)mb->next; }
-/** @internal Inline function @param pkt @param offset @param len */ static inline void _odp_packet_prefetch(odp_packet_t pkt, uint32_t offset, uint32_t len) { const char *addr = (char *)_odp_packet_data(pkt) + offset; @@ -256,7 +228,6 @@ static inline void _odp_packet_prefetch(odp_packet_t pkt, uint32_t offset, uint3 rte_prefetch0(addr + ofs); }
-/** @internal Inline function @param pkt @return */ static inline odp_buffer_t packet_to_buffer(odp_packet_t pkt) { return (odp_buffer_t)pkt; @@ -266,4 +237,6 @@ static inline odp_buffer_t packet_to_buffer(odp_packet_t pkt) } #endif
+/** @endcond */ + #endif /* ODP_PLAT_PACKET_INLINES_H_ */
commit 2a26805eb348dbbdc1e2c6bafa563c1e50c6763a Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 10:28:20 2018 +0200
Port 72aa3ae "linux-gen: packet: use inlined flow hash and ts set"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index fefc79e1..b1e1a023 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -656,8 +656,7 @@ void odp_packet_ts_set(odp_packet_t pkt, odp_time_t timestamp) { odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt);
- pkt_hdr->timestamp = timestamp; - pkt_hdr->p.input_flags.timestamp = 1; + packet_set_ts(pkt_hdr, ×tamp); }
/*
commit fa52c46b7b29f0eb94d82b13bcf3edc47ce9da31 Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 10:21:02 2018 +0200
Port 84c37a0 "travis: allow to fail checkpatch.pl"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/.travis.yml b/.travis.yml index 2031f26f..c2bc4565 100644 --- a/.travis.yml +++ b/.travis.yml @@ -209,6 +209,7 @@ jobs: --with-dpdk-path=`pwd`/dpdk/${TARGET} - make -j $(nproc) - stage: test + canfail: yes env: TEST=checkpatch compiler: gcc install: @@ -217,6 +218,8 @@ jobs: - echo ${TRAVIS_COMMIT_RANGE}; - ODP_PATCHES=`echo ${TRAVIS_COMMIT_RANGE} | sed 's/.//'`; - ./scripts/ci-checkpatches.sh ${ODP_PATCHES}; + allow_failures: + - canfail: yes
after_failure: - cat config.log
commit fe66deb39f8d7dcffaf3a53cefa428df9c879d4d Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 09:59:55 2018 +0200
Port fdae7a0 "linux-gen: thread: inline thread and cpu id"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index eebbc426..7fc2c381 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -26,6 +26,8 @@ odpapiplatinclude_HEADERS = \ include/odp/api/plat/std_clib_inlines.h \ include/odp/api/plat/strong_types.h \ include/odp/api/plat/sync_inlines.h \ + include/odp/api/plat/thread_inlines.h \ + include/odp/api/plat/thread_inlines_api.h \ include/odp/api/plat/ticketlock_inlines.h \ include/odp/api/plat/ticketlock_inlines_api.h
@@ -172,6 +174,7 @@ __LIB__libodp_dpdk_la_SOURCES += \ ../linux-generic/odp_packet_flags_api.c \ odp_std_clib.c \ ../linux-generic/odp_sync.c \ + ../linux-generic/odp_thread_api.c \ ../linux-generic/odp_ticketlock.c endif
diff --git a/platform/linux-dpdk/include/odp/api/plat/thread_inlines.h b/platform/linux-dpdk/include/odp/api/plat/thread_inlines.h new file mode 120000 index 00000000..059b069c --- /dev/null +++ b/platform/linux-dpdk/include/odp/api/plat/thread_inlines.h @@ -0,0 +1 @@ +../../../../../linux-generic/include/odp/api/plat/thread_inlines.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/plat/thread_inlines_api.h b/platform/linux-dpdk/include/odp/api/plat/thread_inlines_api.h new file mode 120000 index 00000000..801100eb --- /dev/null +++ b/platform/linux-dpdk/include/odp/api/plat/thread_inlines_api.h @@ -0,0 +1 @@ +../../../../../linux-generic/include/odp/api/plat/thread_inlines_api.h \ No newline at end of file diff --git a/platform/linux-dpdk/odp_thread.c b/platform/linux-dpdk/odp_thread.c index b9a811e4..ebc0f407 100644 --- a/platform/linux-dpdk/odp_thread.c +++ b/platform/linux-dpdk/odp_thread.c @@ -4,6 +4,8 @@ * SPDX-License-Identifier: BSD-3-Clause */
+#include "config.h" + #include <odp_posix_extensions.h>
#include <sched.h> @@ -17,6 +19,8 @@ #include <odp/api/align.h> #include <odp/api/cpu.h> #include <odp_schedule_if.h> +#include <odp/api/plat/thread_inlines.h> + #include <rte_lcore.h>
#include <string.h> @@ -24,14 +28,7 @@ #include <stdlib.h>
typedef struct { - int thr; - int cpu; - odp_thread_type_t type; -} thread_state_t; - - -typedef struct { - thread_state_t thr[ODP_THREAD_COUNT_MAX]; + _odp_thread_state_t thr[ODP_THREAD_COUNT_MAX];
struct { odp_thrmask_t all; @@ -45,14 +42,15 @@ typedef struct { odp_spinlock_t lock; } thread_globals_t;
- /* Globals */ static thread_globals_t *thread_globals;
+#include <odp/visibility_begin.h>
/* Thread local */ -static __thread thread_state_t *this_thread; +__thread _odp_thread_state_t *_odp_this_thread;
+#include <odp/visibility_end.h>
int odp_thread_init_global(void) { @@ -166,7 +164,7 @@ int odp_thread_init_local(odp_thread_type_t type) ODP_ERR("There is a thread already running on core %d\n", cpu); cfg->lcore_role[cpu] = ROLE_RTE;
- this_thread = &thread_globals->thr[id]; + _odp_this_thread = &thread_globals->thr[id];
sched_fn->thr_add(ODP_SCHED_GROUP_ALL, id);
@@ -181,8 +179,8 @@ int odp_thread_init_local(odp_thread_type_t type) int odp_thread_term_local(void) { int num; - int id = this_thread->thr; - odp_thread_type_t type = this_thread->type; + int id = _odp_this_thread->thr; + odp_thread_type_t type = _odp_this_thread->type;
sched_fn->thr_rem(ODP_SCHED_GROUP_ALL, id);
@@ -203,11 +201,6 @@ int odp_thread_term_local(void) return num; /* return a number of threads left */ }
-int odp_thread_id(void) -{ - return this_thread->thr; -} - int odp_thread_count(void) { return thread_globals->num; @@ -218,16 +211,6 @@ int odp_thread_count_max(void) return ODP_THREAD_COUNT_MAX; }
-odp_thread_type_t odp_thread_type(void) -{ - return this_thread->type; -} - -int odp_cpu_id(void) -{ - return this_thread->cpu; -} - int odp_thrmask_worker(odp_thrmask_t *mask) { odp_thrmask_copy(mask, &thread_globals->worker);
commit 4791830a60d05ba5f017924dc430fc064a553739 Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 10:03:21 2018 +0200
Port b72a575 "configure: move pthreads check to properly defined macro"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/m4/configure.m4 b/platform/linux-dpdk/m4/configure.m4 index 180ab386..6aefc1f7 100644 --- a/platform/linux-dpdk/m4/configure.m4 +++ b/platform/linux-dpdk/m4/configure.m4 @@ -6,7 +6,7 @@ ODP_ATOMIC # linux-generic PCAP support is not relevant as the code doesn't use # linux-generic pktio at all. And DPDK has its own PCAP support anyway AM_CONDITIONAL([HAVE_PCAP], [false]) -m4_include([platform/linux-dpdk/m4/odp_pthread.m4]) +ODP_PTHREAD ODP_TIMER ODP_OPENSSL m4_include([platform/linux-dpdk/m4/odp_schedule.m4])
commit 16afe7377209b882017e2388641c72dd0191dbd2 Author: Matias Elo matias.elo@nokia.com Date: Thu Mar 15 17:26:10 2018 +0200
Port e98c15a "linux-gen: crypto: significant speedup of all operations"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_init.c b/platform/linux-dpdk/odp_init.c index d16f6d99..bbb74665 100644 --- a/platform/linux-dpdk/odp_init.c +++ b/platform/linux-dpdk/odp_init.c @@ -446,6 +446,12 @@ int odp_init_local(odp_instance_t instance, odp_thread_type_t thr_type) } stage = PKTIO_INIT;
+ if (_odp_crypto_init_local()) { + ODP_ERR("ODP crypto local init failed.\n"); + goto init_fail; + } + stage = CRYPTO_INIT; + if (odp_pool_init_local()) { ODP_ERR("ODP pool local init failed.\n"); goto init_fail; @@ -498,6 +504,13 @@ int _odp_term_local(enum init_stage stage) } /* Fall through */
+ case CRYPTO_INIT: + if (_odp_crypto_term_local()) { + ODP_ERR("ODP crypto local term failed.\n"); + rc = -1; + } + /* Fall through */ + case POOL_INIT: if (odp_pool_term_local()) { ODP_ERR("ODP buffer pool local term failed.\n");
commit 06bc18d139485ed42a04c9390791d6157aaef5b8 Author: Matias Elo matias.elo@nokia.com Date: Thu Mar 15 17:23:23 2018 +0200
Port 6be7ada "linux-gen: test: update gitignore"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/test/.gitignore b/platform/linux-dpdk/test/.gitignore index 9dc564f7..88eb4dce 100644 --- a/platform/linux-dpdk/test/.gitignore +++ b/platform/linux-dpdk/test/.gitignore @@ -1,4 +1,3 @@ *.log *.trs -tests-linux-dpdk.env -tests-validation.env +*.env
commit d134c3e2f22138aa7d21820c016c28f704989058 Author: Matias Elo matias.elo@nokia.com Date: Thu Mar 15 17:21:36 2018 +0200
Port 99300f9 "build: odp_dpdk: another fix for linking with shared libdpdk"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 48a5204e..eebbc426 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -236,6 +236,6 @@ endif
__LIB__libodp_dpdk_la_LIBADD = $(ATOMIC_LIBS) __LIB__libodp_dpdk_la_LIBADD += $(OPENSSL_LIBS) -__LIB__libodp_dpdk_la_LIBADD += $(DPDK_LIBS_LT) +__LIB__libodp_dpdk_la_LIBADD += $(DPDK_LIBS_LIBODP) __LIB__libodp_dpdk_la_LIBADD += $(PTHREAD_LIBS) __LIB__libodp_dpdk_la_LIBADD += $(TIMER_LIBS)
commit d1328faa6d068330d6c5de383ec7e1b554b159bc Author: Matias Elo matias.elo@nokia.com Date: Thu Mar 15 17:19:30 2018 +0200
Port 91b127d "linux-generic: pktio: add null pktio support"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 341ed5cf..48a5204e 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -93,6 +93,7 @@ noinst_HEADERS = \ ${top_srcdir}/platform/linux-generic/include/odp_packet_io_ipc_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_packet_io_ring_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_packet_socket.h \ + ${top_srcdir}/platform/linux-generic/include/odp_packet_null.h \ ${top_srcdir}/platform/linux-generic/include/odp_pkt_queue_internal.h \ include/odp_pool_internal.h \ include/odp_posix_extensions.h \ @@ -138,6 +139,7 @@ __LIB__libodp_dpdk_la_SOURCES = \ odp_packet_flags.c \ ../linux-generic/odp_packet_io.c \ ../linux-generic/pktio/loop.c \ + ../linux-generic/pktio/null.c \ ../linux-generic/odp_pkt_queue.c \ odp_pool.c \ ../linux-generic/odp_queue.c \ diff --git a/platform/linux-dpdk/include/odp_packet_io_internal.h b/platform/linux-dpdk/include/odp_packet_io_internal.h index 081e5f0a..3c3bcc47 100644 --- a/platform/linux-dpdk/include/odp_packet_io_internal.h +++ b/platform/linux-dpdk/include/odp_packet_io_internal.h @@ -31,6 +31,7 @@ extern "C" { #define PKTIO_MAX_QUEUES 64 #include <linux/if_ether.h> #include <odp_packet_dpdk.h> +#include <odp_packet_null.h>
#define PKTIO_NAME_LEN 256
@@ -73,6 +74,7 @@ struct pktio_entry { union { pkt_loop_t pkt_loop; /**< Using loopback for IO */ pkt_dpdk_t pkt_dpdk; /**< using DPDK API for IO */ + pkt_null_t pkt_null; /**< using null for IO */ }; enum { /* Not allocated */ @@ -201,6 +203,7 @@ static inline void pktio_cls_enabled_set(pktio_entry_t *entry, int ena) }
extern const pktio_if_ops_t loopback_pktio_ops; +extern const pktio_if_ops_t null_pktio_ops; extern const pktio_if_ops_t dpdk_pktio_ops; extern const pktio_if_ops_t * const pktio_if_ops[];
diff --git a/platform/linux-dpdk/odp_packet_dpdk.c b/platform/linux-dpdk/odp_packet_dpdk.c index 431f04fa..a167e5a0 100644 --- a/platform/linux-dpdk/odp_packet_dpdk.c +++ b/platform/linux-dpdk/odp_packet_dpdk.c @@ -49,6 +49,7 @@ const pktio_if_ops_t * const pktio_if_ops[] = { &loopback_pktio_ops, &dpdk_pktio_ops, + &null_pktio_ops, NULL };
commit fe1bddbecfdad23c329f56436c3172b841e58836 Author: Matias Elo matias.elo@nokia.com Date: Thu Mar 15 17:05:41 2018 +0200
Port 1f4a5f7 "linux-gen: crypto: move session type to odp_crypto module"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index dde4a398..341ed5cf 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -81,7 +81,6 @@ noinst_HEADERS = \ ${top_srcdir}/platform/linux-generic/include/odp_classification_datamodel.h \ ${top_srcdir}/platform/linux-generic/include/odp_classification_inlines.h \ ${top_srcdir}/platform/linux-generic/include/odp_classification_internal.h \ - ${top_srcdir}/platform/linux-generic/include/odp_crypto_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_forward_typedefs_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_ipsec_internal.h \
commit 9c5dea2f9fe8623766127099dbb4bebf79e5c5b4 Author: Matias Elo matias.elo@nokia.com Date: Thu Mar 15 17:03:16 2018 +0200
Port b122176 "linux-gen: pktio: unify send/recv function argument naming"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_packet_dpdk.c b/platform/linux-dpdk/odp_packet_dpdk.c index 787ffa47..431f04fa 100644 --- a/platform/linux-dpdk/odp_packet_dpdk.c +++ b/platform/linux-dpdk/odp_packet_dpdk.c @@ -272,8 +272,9 @@ static int dpdk_init_capability(pktio_entry_t *pktio_entry, return 0; }
-static int setup_pkt_dpdk(odp_pktio_t pktio ODP_UNUSED, pktio_entry_t *pktio_entry, - const char *netdev, odp_pool_t pool ODP_UNUSED) +static int setup_pkt_dpdk(odp_pktio_t pktio ODP_UNUSED, + pktio_entry_t *pktio_entry, + const char *netdev, odp_pool_t pool ODP_UNUSED) { uint32_t mtu; struct rte_eth_dev_info dev_info; @@ -526,8 +527,6 @@ static void _odp_pktio_send_completion(pktio_entry_t *pktio_entry) odp_ticketlock_unlock(&entry->s.txl); } } - - return; }
#define IP4_CSUM_RESULT(m) (m->ol_flags & PKT_RX_IP_CKSUM_MASK) @@ -592,7 +591,7 @@ static inline int pkt_set_ol_rx(odp_pktin_config_opt_t *pktin_cfg, }
static int recv_pkt_dpdk(pktio_entry_t *pktio_entry, int index, - odp_packet_t pkt_table[], int len) + odp_packet_t pkt_table[], int num) { uint16_t nb_rx, i; odp_packet_t *saved_pkt_table; @@ -602,9 +601,9 @@ static int recv_pkt_dpdk(pktio_entry_t *pktio_entry, int index, odp_time_t ts_val; odp_time_t *ts = NULL;
- if (odp_unlikely(min > len)) { + if (odp_unlikely(min > num)) { ODP_DBG("PMD requires >%d buffers burst. " - "Current %d, dropped %d\n", min, len, min - len); + "Current %d, dropped %d\n", min, num, min - num); saved_pkt_table = pkt_table; pkt_table = malloc(min * sizeof(odp_packet_t)); } @@ -615,7 +614,7 @@ static int recv_pkt_dpdk(pktio_entry_t *pktio_entry, int index, nb_rx = rte_eth_rx_burst(pkt_dpdk->port_id, (uint16_t)index, (struct rte_mbuf **)pkt_table, - (uint16_t)RTE_MAX(len, min)); + (uint16_t)RTE_MAX(num, min));
if (pktio_entry->s.config.pktin.bit.ts_all || pktio_entry->s.config.pktin.bit.ts_ptp) { @@ -626,6 +625,7 @@ static int recv_pkt_dpdk(pktio_entry_t *pktio_entry, int index, if (nb_rx == 0 && !pkt_dpdk->lockless_tx) { pool_t *pool = pool_entry_from_hdl(pktio_entry->s.pool); struct rte_mempool *rte_mempool = pool->rte_mempool; + if (rte_mempool_avail_count(rte_mempool) == 0) _odp_pktio_send_completion(pktio_entry); } @@ -646,14 +646,14 @@ static int recv_pkt_dpdk(pktio_entry_t *pktio_entry, int index, packet_set_ts(pkt_hdr, ts); }
- if (odp_unlikely(min > len)) { + if (odp_unlikely(min > num)) { memcpy(saved_pkt_table, pkt_table, - len * sizeof(odp_packet_t)); - for (i = len; i < nb_rx; i++) + num * sizeof(odp_packet_t)); + for (i = num; i < nb_rx; i++) odp_packet_free(pkt_table[i]); - nb_rx = RTE_MIN(len, nb_rx); + nb_rx = RTE_MIN(num, nb_rx); free(pkt_table); - pktio_entry->s.stats.in_discards += min - len; + pktio_entry->s.stats.in_discards += min - num; pkt_table = saved_pkt_table; }
@@ -836,7 +836,7 @@ static inline void pkt_set_ol_tx(odp_pktout_config_opt_t *pktout_cfg, }
static int send_pkt_dpdk(pktio_entry_t *pktio_entry, int index, - const odp_packet_t pkt_table[], int len) + const odp_packet_t pkt_table[], int num) { pkt_dpdk_t * const pkt_dpdk = &pktio_entry->s.pkt_dpdk; uint8_t chksum_insert_ena = pktio_entry->s.chksum_insert_ena; @@ -848,7 +848,7 @@ static int send_pkt_dpdk(pktio_entry_t *pktio_entry, int index, uint32_t mtu = pkt_dpdk->mtu; uint16_t num_tx = 0;
- for (i = 0; i < len; i++) { + for (i = 0; i < num; i++) { struct rte_mbuf *mbuf = pkt_to_mbuf(pkt_table[i]);
if (odp_unlikely(mbuf->pkt_len > mtu)) @@ -987,6 +987,7 @@ static int promisc_mode_set_pkt_dpdk(pktio_entry_t *pktio_entry, int enable)
if (pktio_entry->s.pkt_dpdk.vdev_sysc_promisc) { int ret = _dpdk_vdev_promisc_mode_set(port_id, enable); + if (ret < 0) ODP_DBG("vdev promisc mode fail\n"); } @@ -1014,18 +1015,19 @@ static int _dpdk_vdev_promisc_mode(uint16_t port_id) if (ifr.ifr_flags & IFF_PROMISC) { ODP_DBG("promisc is 1\n"); return 1; - } else + } else { return 0; + } }
static int promisc_mode_get_pkt_dpdk(pktio_entry_t *pktio_entry) { uint16_t port_id = pktio_entry->s.pkt_dpdk.port_id; + if (pktio_entry->s.pkt_dpdk.vdev_sysc_promisc) return _dpdk_vdev_promisc_mode(port_id); else return rte_eth_promiscuous_get(port_id); - }
static int mac_get_pkt_dpdk(pktio_entry_t *pktio_entry, void *mac_addr) @@ -1049,6 +1051,7 @@ static int capability_pkt_dpdk(pktio_entry_t *pktio_entry, *capa = pktio_entry->s.capa; return 0; } + static int link_status_pkt_dpdk(pktio_entry_t *pktio_entry) { struct rte_eth_link link; @@ -1081,12 +1084,12 @@ static int stats_pkt_dpdk(pktio_entry_t *pktio_entry, odp_pktio_stats_t *stats) if (ret == 0) { stats_convert(&rte_stats, stats); return 0; - } else { - if (ret > 0) - return -ret; - else - return ret; } + + if (ret > 0) + return -ret; + else + return ret; }
static int stats_reset_pkt_dpdk(pktio_entry_t *pktio_entry)
commit a0114a56b343c0c77576a8966994ce24f080e87d Author: Matias Elo matias.elo@nokia.com Date: Thu Mar 15 16:47:13 2018 +0200
Port d7ec85b "linux-gen: byteorder: use inlined version internally"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index c971886f..fefc79e1 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -12,6 +12,7 @@ #include <odp_debug_internal.h> #include <odp/api/hints.h> #include <odp/api/byteorder.h> +#include <odp/api/plat/byteorder_inlines.h>
#include <protocols/eth.h> #include <protocols/ip.h> @@ -1234,15 +1235,15 @@ static inline uint16_t parse_eth(packet_parser_t *prs, const uint8_t **parseptr, eth = (const _odp_ethhdr_t *)*parseptr;
/* Handle Ethernet broadcast/multicast addresses */ - macaddr0 = odp_be_to_cpu_16(*((const uint16_t *)(const void *)eth)); + macaddr0 = _odp_be_to_cpu_16(*((const uint16_t *)(const void *)eth)); prs->input_flags.eth_mcast = (macaddr0 & 0x0100) == 0x0100;
if (macaddr0 == 0xffff) { macaddr2 = - odp_be_to_cpu_16(*((const uint16_t *) + _odp_be_to_cpu_16(*((const uint16_t *) (const void *)eth + 1)); macaddr4 = - odp_be_to_cpu_16(*((const uint16_t *) + _odp_be_to_cpu_16(*((const uint16_t *) (const void *)eth + 2)); prs->input_flags.eth_bcast = (macaddr2 == 0xffff) && (macaddr4 == 0xffff); @@ -1251,7 +1252,7 @@ static inline uint16_t parse_eth(packet_parser_t *prs, const uint8_t **parseptr, }
/* Get Ethertype */ - ethtype = odp_be_to_cpu_16(eth->type); + ethtype = _odp_be_to_cpu_16(eth->type); *offset += sizeof(*eth); *parseptr += sizeof(*eth);
@@ -1262,7 +1263,7 @@ static inline uint16_t parse_eth(packet_parser_t *prs, const uint8_t **parseptr, prs->error_flags.snap_len = 1; return 0; } - ethtype = odp_be_to_cpu_16(*((const uint16_t *)(uintptr_t) + ethtype = _odp_be_to_cpu_16(*((const uint16_t *)(uintptr_t) (parseptr + 6))); *offset += 8; *parseptr += 8; @@ -1274,7 +1275,7 @@ static inline uint16_t parse_eth(packet_parser_t *prs, const uint8_t **parseptr, prs->input_flags.vlan = 1;
vlan = (const _odp_vlanhdr_t *)*parseptr; - ethtype = odp_be_to_cpu_16(vlan->type); + ethtype = _odp_be_to_cpu_16(vlan->type); *offset += sizeof(_odp_vlanhdr_t); *parseptr += sizeof(_odp_vlanhdr_t); } @@ -1282,7 +1283,7 @@ static inline uint16_t parse_eth(packet_parser_t *prs, const uint8_t **parseptr, if (ethtype == _ODP_ETHTYPE_VLAN) { prs->input_flags.vlan = 1; vlan = (const _odp_vlanhdr_t *)*parseptr; - ethtype = odp_be_to_cpu_16(vlan->type); + ethtype = _odp_be_to_cpu_16(vlan->type); *offset += sizeof(_odp_vlanhdr_t); *parseptr += sizeof(_odp_vlanhdr_t); } @@ -1300,8 +1301,8 @@ static inline uint8_t parse_ipv4(packet_parser_t *prs, const uint8_t **parseptr, uint8_t ver = _ODP_IPV4HDR_VER(ipv4->ver_ihl); uint8_t ihl = _ODP_IPV4HDR_IHL(ipv4->ver_ihl); uint16_t frag_offset; - uint32_t dstaddr = odp_be_to_cpu_32(ipv4->dst_addr); - uint32_t l3_len = odp_be_to_cpu_16(ipv4->tot_len); + uint32_t dstaddr = _odp_be_to_cpu_32(ipv4->dst_addr); + uint32_t l3_len = _odp_be_to_cpu_16(ipv4->tot_len);
if (odp_unlikely(ihl < _ODP_IPV4HDR_IHL_MIN) || odp_unlikely(ver != 4) || @@ -1321,7 +1322,7 @@ static inline uint8_t parse_ipv4(packet_parser_t *prs, const uint8_t **parseptr, * OR * "fragment offset" field is nonzero (all fragments except the first) */ - frag_offset = odp_be_to_cpu_16(ipv4->frag_offset); + frag_offset = _odp_be_to_cpu_16(ipv4->frag_offset); if (odp_unlikely(_ODP_IPV4HDR_IS_FRAGMENT(frag_offset))) prs->input_flags.ipfrag = 1;
@@ -1341,12 +1342,12 @@ static inline uint8_t parse_ipv6(packet_parser_t *prs, const uint8_t **parseptr, { const _odp_ipv6hdr_t *ipv6 = (const _odp_ipv6hdr_t *)*parseptr; const _odp_ipv6hdr_ext_t *ipv6ext; - uint32_t dstaddr0 = odp_be_to_cpu_32(ipv6->dst_addr.u8[0]); - uint32_t l3_len = odp_be_to_cpu_16(ipv6->payload_len) + + uint32_t dstaddr0 = _odp_be_to_cpu_32(ipv6->dst_addr.u8[0]); + uint32_t l3_len = _odp_be_to_cpu_16(ipv6->payload_len) + _ODP_IPV6HDR_LEN;
/* Basic sanity checks on IPv6 header */ - if ((odp_be_to_cpu_32(ipv6->ver_tc_flow) >> 28) != 6 || + if ((_odp_be_to_cpu_32(ipv6->ver_tc_flow) >> 28) != 6 || l3_len > frame_len - *offset) { prs->error_flags.ip_err = 1; return 0; @@ -1376,7 +1377,7 @@ static inline uint8_t parse_ipv6(packet_parser_t *prs, const uint8_t **parseptr, *offset < seg_len);
if (*offset >= prs->l3_offset + - odp_be_to_cpu_16(ipv6->payload_len)) { + _odp_be_to_cpu_16(ipv6->payload_len)) { prs->error_flags.ip_err = 1; return 0; } @@ -1420,12 +1421,12 @@ static inline void parse_udp(packet_parser_t *prs, const uint8_t **parseptr, uint32_t *offset) { const _odp_udphdr_t *udp = (const _odp_udphdr_t *)*parseptr; - uint32_t udplen = odp_be_to_cpu_16(udp->length); + uint32_t udplen = _odp_be_to_cpu_16(udp->length);
if (odp_unlikely(udplen < sizeof(_odp_udphdr_t))) prs->error_flags.udp_err = 1;
- if (odp_cpu_to_be_16(_ODP_UDP_IPSEC_PORT) == udp->dst_port && + if (_odp_cpu_to_be_16(_ODP_UDP_IPSEC_PORT) == udp->dst_port && udplen > 4) { uint32_t val;
commit 2ac9e718bccdf818838bbfb8a61fdcccaf297d25 Author: Matias Elo matias.elo@nokia.com Date: Thu Mar 15 16:35:56 2018 +0200
Port a001621 "linux-gen: byteorder: internal inline functions"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index c42b3b2e..dde4a398 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -16,6 +16,7 @@ odpapiplatincludedir= $(includedir)/odp/api/plat odpapiplatinclude_HEADERS = \ include/odp/api/plat/atomic_inlines.h \ include/odp/api/plat/byteorder_inlines.h \ + include/odp/api/plat/byteorder_inlines_api.h \ include/odp/api/plat/packet_flag_inlines.h \ include/odp/api/plat/packet_flag_inlines_api.h \ include/odp/api/plat/packet_inline_types.h \ diff --git a/platform/linux-dpdk/include/odp/api/plat/byteorder_inlines_api.h b/platform/linux-dpdk/include/odp/api/plat/byteorder_inlines_api.h new file mode 120000 index 00000000..b750acc8 --- /dev/null +++ b/platform/linux-dpdk/include/odp/api/plat/byteorder_inlines_api.h @@ -0,0 +1 @@ +../../../../../linux-generic/include/odp/api/plat/byteorder_inlines_api.h \ No newline at end of file
commit cb55d339ca97af4799a7ac83a07a39b95c22fc22 Author: Matias Elo matias.elo@nokia.com Date: Thu Mar 15 16:29:14 2018 +0200
Port 5a4502fc "linux-gen: align: Fix alignment for typedef definitions"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp_pool_internal.h b/platform/linux-dpdk/include/odp_pool_internal.h index e666653f..2feae883 100644 --- a/platform/linux-dpdk/include/odp_pool_internal.h +++ b/platform/linux-dpdk/include/odp_pool_internal.h @@ -48,9 +48,9 @@ extern "C" {
typedef struct ODP_ALIGNED_CACHE { #ifdef POOL_USE_TICKETLOCK - odp_ticketlock_t lock ODP_ALIGNED_CACHE; + odp_ticketlock_t ODP_ALIGNED_CACHE lock; #else - odp_spinlock_t lock ODP_ALIGNED_CACHE; + odp_spinlock_t ODP_ALIGNED_CACHE lock ; #endif char name[ODP_POOL_NAME_LEN]; odp_pool_param_t params; diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index 2145d6df..c971886f 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -27,7 +27,7 @@
/* Fill in packet header field offsets for inline functions */
-const _odp_packet_inline_offset_t _odp_packet_inline ODP_ALIGNED_CACHE = { +const _odp_packet_inline_offset_t ODP_ALIGNED_CACHE _odp_packet_inline = { .mb = offsetof(odp_packet_hdr_t, buf_hdr.mb), .pool = offsetof(odp_packet_hdr_t, buf_hdr.pool_ptr), .input = offsetof(odp_packet_hdr_t, input), diff --git a/platform/linux-dpdk/odp_pool.c b/platform/linux-dpdk/odp_pool.c index 32a794c4..b429a051 100644 --- a/platform/linux-dpdk/odp_pool.c +++ b/platform/linux-dpdk/odp_pool.c @@ -53,7 +53,7 @@ pool_table_t *pool_tbl; #include <odp/visibility_begin.h>
/* Fill in pool header field offsets for inline functions */ -const _odp_pool_inline_offset_t _odp_pool_inline ODP_ALIGNED_CACHE = { +const _odp_pool_inline_offset_t ODP_ALIGNED_CACHE _odp_pool_inline = { .pool_hdl = offsetof(pool_t, pool_hdl), .uarea_size = offsetof(pool_t, params.pkt.uarea_size) };
commit db4968941f49440858f690486cd59bd19392ebdc Author: Matias Elo matias.elo@nokia.com Date: Thu Mar 15 09:54:42 2018 +0200
linux-dpdk: cleanup build system
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 7a8faeb6..c42b3b2e 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -1,8 +1,6 @@ include $(top_srcdir)/platform/Makefile.inc include $(top_srcdir)/platform/@with_platform@/Makefile.inc
-AM_CFLAGS += $(DPDK_CFLAGS) - AM_CPPFLAGS = $(ODP_INCLUDES) AM_CPPFLAGS += -I$(top_srcdir)/platform/$(with_platform)/include AM_CPPFLAGS += -I$(top_srcdir)/platform/linux-generic/include @@ -13,10 +11,6 @@ AM_CPPFLAGS += -I$(top_srcdir)/platform/$(with_platform)/arch/default AM_CPPFLAGS += $(OPENSSL_CPPFLAGS) AM_CPPFLAGS += $(DPDK_CPPFLAGS)
-if ARCH_IS_X86 -AM_CFLAGS += -msse4.2 -endif - if !ODP_ABI_COMPAT odpapiplatincludedir= $(includedir)/odp/api/plat odpapiplatinclude_HEADERS = \ diff --git a/platform/linux-dpdk/Makefile.inc b/platform/linux-dpdk/Makefile.inc index 5d761dfb..e0254c5d 100644 --- a/platform/linux-dpdk/Makefile.inc +++ b/platform/linux-dpdk/Makefile.inc @@ -1,6 +1,4 @@ -AM_CFLAGS += -I$(top_srcdir)/platform/$(with_platform)/arch/$(ARCH_DIR) -AM_CXXFLAGS += -I$(top_srcdir)/platform/$(with_platform)/arch/$(ARCH_DIR) AM_CPPFLAGS += $(DPDK_CPPFLAGS) -AM_LDFLAGS += $(DPDK_LDFLAGS) + LOG_COMPILER = $(top_srcdir)/platform/linux-dpdk/test/wrapper-script.sh SH_LOG_COMPILER = $(LOG_COMPILER) diff --git a/platform/linux-dpdk/libodp-dpdk.pc.in b/platform/linux-dpdk/libodp-dpdk.pc.in index 06a35367..9dc7f8d9 100644 --- a/platform/linux-dpdk/libodp-dpdk.pc.in +++ b/platform/linux-dpdk/libodp-dpdk.pc.in @@ -6,6 +6,6 @@ includedir=@includedir@ Name: libodp-dpdk Description: The ODP packet processing engine Version: @PKGCONFIG_VERSION@ -Libs: -L${libdir} -lodp-dpdk @DPDK_LIBS@ -Libs.private: @OPENSSL_STATIC_LIBS@ @DPDK_LIBS@ @PTHREAD_LIBS@ @TIMER_LIBS@ -lpthread @ATOMIC_LIBS@ +Libs: -L${libdir} -lodp-dpdk +Libs.private: @DPDK_LIBS@ @OPENSSL_STATIC_LIBS@ @PTHREAD_LIBS@ @TIMER_LIBS@ -lpthread @ATOMIC_LIBS@ Cflags: -I${includedir} @DPDK_CPPFLAGS@ diff --git a/platform/linux-dpdk/m4/configure.m4 b/platform/linux-dpdk/m4/configure.m4 index 82b42873..180ab386 100644 --- a/platform/linux-dpdk/m4/configure.m4 +++ b/platform/linux-dpdk/m4/configure.m4 @@ -16,19 +16,7 @@ m4_include([platform/linux-dpdk/m4/odp_schedule.m4]) ########################################################################## AC_ARG_WITH([dpdk-path], [AS_HELP_STRING([--with-dpdk-path=DIR], [path to dpdk build directory])], - [DPDK_PATH="$withval"], - [DPDK_PATH=system]) - -AS_IF([test "x$DPDK_PATH" = "xsystem"], - [DPDK_CPPFLAGS="$DPDK_CPPFLAGS -isystem/usr/include/dpdk" - DPDK_LDFLAGS="" - DPDK_PMD_PATH="`$CC --print-file-name=librte_pmd_null.a`" - DPDK_PMD_PATH="`dirname "$DPDK_PMD_PATH"`" - AS_IF([test "x$DPDK_PMD_PATH" = "x"], - [AC_MSG_FAILURE([Could not locate system DPDK PMD directory])])], - [DPDK_CPPFLAGS="$DPDK_CPPFLAGS -isystem $DPDK_PATH/include" - DPDK_LDFLAGS="-L$DPDK_PATH/lib" - DPDK_PMD_PATH="$DPDK_PATH/lib"]) + [DPDK_PATH="$withval"],[])
########################################################################## # Check for DPDK availability @@ -39,19 +27,8 @@ AS_IF([test "x$DPDK_PATH" = "xsystem"], ODP_DPDK([$DPDK_PATH], [], [AC_MSG_FAILURE([can't find DPDK])])
-AC_DEFINE([ODP_PKTIO_DPDK], [1], - [Define to 1 to enable DPDK packet I/O support]) -AC_DEFINE_UNQUOTED([ODP_DPDK_ZERO_COPY], [$zero_copy], - [Define to 1 to enable DPDK zero copy support]) - -if test -r "$DPDK_PMD_PATH/librte_pmd_pcap.a" && - ! test -r "$DPDK_PMD_PATH/librte_pmd_pcap.so" ; then - DPDK_LIBS="$DPDK_LIBS -lpcap" -fi - -AC_SUBST([DPDK_LDFLAGS]) -AC_SUBST([DPDK_CPPFLAGS]) -AC_SUBST([DPDK_LIBS]) +AS_CASE($host_cpu, [x86_64], + [AS_VAR_APPEND([DPDK_CPPFLAGS], [" -msse4.2"])])
AC_CONFIG_COMMANDS_PRE([dnl AM_CONDITIONAL([PLATFORM_IS_LINUX_DPDK], diff --git a/platform/linux-dpdk/test/Makefile.inc b/platform/linux-dpdk/test/Makefile.inc deleted file mode 100644 index 60f52b89..00000000 --- a/platform/linux-dpdk/test/Makefile.inc +++ /dev/null @@ -1,21 +0,0 @@ -# The following definitions may be used by platform tests that wish to -# build specific ODP applications, (i.e those whose do more than validation -# test wrapping) - -AM_LDFLAGS = -static - -AM_CFLAGS = $(CUNIT_CFLAGS) - -LIBCUNIT_COMMON = $(top_builddir)/test/common/libcunit_common.la -LIB = $(top_builddir)/lib -LIBODP = $(LIB)/libodphelper.la $(LIB)/libodp-dpdk.la $(DPDK_PMDS) - -INCCUNIT_COMMON = -I$(top_srcdir)/test/common -INCODP = -I$(top_builddir)/platform/@with_platform@/include \ - -I$(top_builddir)/include \ - -I$(top_srcdir)/helper/include \ - -I$(top_srcdir)/include \ - -I$(top_srcdir)/include/odp/arch/@ARCH_ABI@ \ - -I$(top_srcdir)/platform/@with_platform@/arch/$(ARCH_DIR) \ - -I$(top_srcdir)/platform/@with_platform@/include \ - -I$(top_srcdir)/test diff --git a/platform/linux-dpdk/test/validation/Makefile.inc b/platform/linux-dpdk/test/validation/Makefile.inc deleted file mode 100644 index 9a9cdca0..00000000 --- a/platform/linux-dpdk/test/validation/Makefile.inc +++ /dev/null @@ -1 +0,0 @@ -include $(top_srcdir)/platform/linux-dpdk/test/Makefile.inc diff --git a/platform/linux-dpdk/test/validation/api/Makefile.inc b/platform/linux-dpdk/test/validation/api/Makefile.inc index 90ab675c..cda6237e 100644 --- a/platform/linux-dpdk/test/validation/api/Makefile.inc +++ b/platform/linux-dpdk/test/validation/api/Makefile.inc @@ -1 +1 @@ -include $(top_srcdir)/platform/linux-dpdk/test/validation/Makefile.inc +include $(top_srcdir)/test/validation/api/Makefile.inc
commit a35a3fb99e9d1014bb2b5056ac000bd31068f09e Author: Matias Elo matias.elo@nokia.com Date: Wed Mar 14 17:31:11 2018 +0200
Port f3b6be2 "include: move visibility headers to generic place"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 985ebc44..7a8faeb6 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -4,6 +4,7 @@ include $(top_srcdir)/platform/@with_platform@/Makefile.inc AM_CFLAGS += $(DPDK_CFLAGS)
AM_CPPFLAGS = $(ODP_INCLUDES) +AM_CPPFLAGS += -I$(top_srcdir)/platform/$(with_platform)/include AM_CPPFLAGS += -I$(top_srcdir)/platform/linux-generic/include AM_CPPFLAGS += -I$(top_srcdir)/platform/$(with_platform)/arch AM_CPPFLAGS += -I$(top_srcdir)/platform/$(with_platform)/arch/@ARCH_DIR@ @@ -16,11 +17,6 @@ if ARCH_IS_X86 AM_CFLAGS += -msse4.2 endif
-odpincludedir= $(includedir)/odp -odpinclude_HEADERS = \ - include/odp/visibility_begin.h \ - include/odp/visibility_end.h - if !ODP_ABI_COMPAT odpapiplatincludedir= $(includedir)/odp/api/plat odpapiplatinclude_HEADERS = \
commit 15d143ef66be6c8b308b00dfe6aa07eae5838bdd Author: Matias Elo matias.elo@nokia.com Date: Wed Mar 14 17:29:15 2018 +0200
Port 39730f7 "linux-gen: don't install inline headers in ABI-compat mode"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index acfdf110..985ebc44 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -21,6 +21,7 @@ odpinclude_HEADERS = \ include/odp/visibility_begin.h \ include/odp/visibility_end.h
+if !ODP_ABI_COMPAT odpapiplatincludedir= $(includedir)/odp/api/plat odpapiplatinclude_HEADERS = \ include/odp/api/plat/atomic_inlines.h \ @@ -37,7 +38,6 @@ odpapiplatinclude_HEADERS = \ include/odp/api/plat/ticketlock_inlines.h \ include/odp/api/plat/ticketlock_inlines_api.h
-if !ODP_ABI_COMPAT odpapiabiarchincludedir = $(archincludedir)/odp/api/abi odpapiabiarchinclude_HEADERS = \ include-abi/odp/api/abi/align.h \
commit 15e24210a8e80fa34730b1cb6883787337a08e7b Author: Matias Elo matias.elo@nokia.com Date: Wed Mar 14 16:12:19 2018 +0200
Port 2c92ee7 "linux-gen: remove static_inline.h header
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/.gitignore b/platform/linux-dpdk/.gitignore index b747a279..4f49449a 100644 --- a/platform/linux-dpdk/.gitignore +++ b/platform/linux-dpdk/.gitignore @@ -1,2 +1 @@ -include/odp/api/plat/static_inline.h libodp-dpdk.pc diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index bbaf3150..acfdf110 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -37,9 +37,6 @@ odpapiplatinclude_HEADERS = \ include/odp/api/plat/ticketlock_inlines.h \ include/odp/api/plat/ticketlock_inlines_api.h
-nodist_odpapiplatinclude_HEADERS = \ - include/odp/api/plat/static_inline.h - if !ODP_ABI_COMPAT odpapiabiarchincludedir = $(archincludedir)/odp/api/abi odpapiabiarchinclude_HEADERS = \ diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/packet.h b/platform/linux-dpdk/include-abi/odp/api/abi/packet.h index bd60d4a5..ea8a7ecd 100644 --- a/platform/linux-dpdk/include-abi/odp/api/abi/packet.h +++ b/platform/linux-dpdk/include-abi/odp/api/abi/packet.h @@ -18,13 +18,6 @@ extern "C" { #endif
-#include <stddef.h> - -#include <odp/api/plat/static_inline.h> -#if ODP_ABI_COMPAT == 1 -#include <odp/api/abi/packet.h> -#else - #include <odp/api/std_types.h> #include <odp/api/plat/strong_types.h>
@@ -51,12 +44,14 @@ typedef enum {
#define ODP_NUM_PACKET_COLORS 3
+#define _ODP_INLINE static inline +#include <odp/api/plat/packet_inlines.h> +#include <odp/api/plat/packet_inlines_api.h> + /** * @} */
-#endif - #ifdef __cplusplus } #endif diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_flag_inlines.h b/platform/linux-dpdk/include/odp/api/plat/packet_flag_inlines.h index 8cd23fcc..f33e4461 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_flag_inlines.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_flag_inlines.h @@ -80,22 +80,6 @@ static inline int _odp_packet_has_ts(odp_packet_t pkt) return flags.timestamp; }
-/* Include inlined versions of API functions */ -#include <odp/api/plat/static_inline.h> -#if ODP_ABI_COMPAT == 0 - -/** @ingroup odp_packet - * @{ - */ - -#include <odp/api/plat/packet_flag_inlines_api.h> - -/** - * @} - */ - -#endif - #ifdef __cplusplus } #endif diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h index 25c4c628..1ccc9fb1 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h @@ -262,15 +262,6 @@ static inline odp_buffer_t packet_to_buffer(odp_packet_t pkt) return (odp_buffer_t)pkt; }
-/* Include inlined versions of API functions */ -#include <odp/api/plat/static_inline.h> - -#if ODP_ABI_COMPAT == 0 - -#include <odp/api/plat/packet_inlines_api.h> - -#endif /* ODP_ABI_COMPAT */ - #ifdef __cplusplus } #endif diff --git a/platform/linux-dpdk/include/odp/api/plat/static_inline.h.in b/platform/linux-dpdk/include/odp/api/plat/static_inline.h.in deleted file mode 100644 index 3cf00434..00000000 --- a/platform/linux-dpdk/include/odp/api/plat/static_inline.h.in +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (c) 2016, Linaro Limited - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -/** - * @file - * - * Macro for static inline functions - */ - -#ifndef ODP_PLAT_STATIC_INLINE_H_ -#define ODP_PLAT_STATIC_INLINE_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @internal - * @def ODP_ABI_COMPAT - * Control ABI compatibility - */ - -/** - * @internal - * @def _ODP_INLINE - * Define a function as inlined or not inlined (for ABI compatibility) - */ -#if @ODP_ABI_COMPAT@ -#define ODP_ABI_COMPAT 1 -#define _ODP_INLINE -#else -#define ODP_ABI_COMPAT 0 -#define _ODP_INLINE static inline -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/platform/linux-dpdk/m4/configure.m4 b/platform/linux-dpdk/m4/configure.m4 index c510a5d2..82b42873 100644 --- a/platform/linux-dpdk/m4/configure.m4 +++ b/platform/linux-dpdk/m4/configure.m4 @@ -58,7 +58,6 @@ AM_CONDITIONAL([PLATFORM_IS_LINUX_DPDK], [test "${with_platform}" = "linux-dpdk"]) AC_CONFIG_FILES([platform/linux-dpdk/Makefile platform/linux-dpdk/libodp-dpdk.pc - platform/linux-dpdk/include/odp/api/plat/static_inline.h platform/linux-dpdk/test/Makefile platform/linux-dpdk/test/validation/api/pktio/Makefile]) ])
commit 3bfee42721786fa63bc4016538803da9b967b265 Author: Matias Elo matias.elo@nokia.com Date: Wed Mar 14 15:55:08 2018 +0200
Port d35f27a "linux-gen: split odp_packet/odp_packet_flags"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 3515bf66..bbaf3150 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -179,6 +179,8 @@ if ODP_ABI_COMPAT __LIB__libodp_dpdk_la_SOURCES += \ ../linux-generic/odp_atomic_api.c \ ../linux-generic/odp_byteorder.c \ + ../linux-generic/odp_packet_api.c \ + ../linux-generic/odp_packet_flags_api.c \ odp_std_clib.c \ ../linux-generic/odp_sync.c \ ../linux-generic/odp_ticketlock.c diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index a3c92602..2145d6df 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -1733,8 +1733,3 @@ int odp_packet_has_ref(odp_packet_t pkt)
return 0; } - -/* Include non-inlined versions of API functions */ -#if ODP_ABI_COMPAT == 1 -#include <odp/api/plat/packet_inlines_api.h> -#endif diff --git a/platform/linux-dpdk/odp_packet_flags.c b/platform/linux-dpdk/odp_packet_flags.c index d8c68f02..52dc9bf3 100644 --- a/platform/linux-dpdk/odp_packet_flags.c +++ b/platform/linux-dpdk/odp_packet_flags.c @@ -290,8 +290,3 @@ void odp_packet_has_ts_clr(odp_packet_t pkt)
pkt_hdr->p.input_flags.timestamp = 0; } - -/* Include non-inlined versions of API functions */ -#if ODP_ABI_COMPAT == 1 -#include <odp/api/plat/packet_flag_inlines_api.h> -#endif
commit 07912a406a6e9d689da1d3eec1367476a343d6ea Author: Matias Elo matias.elo@nokia.com Date: Wed Mar 14 15:50:26 2018 +0200
Port db2587a "linux-gen: move several files under ODP_ABI_COMPAT condition"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index a2f996fb..3515bf66 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -131,7 +131,6 @@ __LIB__libodp_dpdk_la_SOURCES = \ ../linux-generic/odp_barrier.c \ ../linux-generic/odp_bitmap.c \ odp_buffer.c \ - ../linux-generic/odp_byteorder.c \ ../linux-generic/odp_chksum.c \ ../linux-generic/odp_classification.c \ ../linux-generic/odp_cpu.c \ @@ -166,12 +165,9 @@ __LIB__libodp_dpdk_la_SOURCES = \ ../linux-generic/odp_sorted_list.c \ ../linux-generic/odp_spinlock.c \ ../linux-generic/odp_spinlock_recursive.c \ - odp_std_clib.c \ - ../linux-generic/odp_sync.c \ ../linux-generic/odp_system_info.c \ odp_thread.c \ ../linux-generic/odp_thrmask.c \ - ../linux-generic/odp_ticketlock.c \ odp_time.c \ ../linux-generic/odp_timer.c \ ../linux-generic/odp_timer_wheel.c \ @@ -179,6 +175,15 @@ __LIB__libodp_dpdk_la_SOURCES = \ ../linux-generic/odp_version.c \ ../linux-generic/odp_weak.c
+if ODP_ABI_COMPAT +__LIB__libodp_dpdk_la_SOURCES += \ + ../linux-generic/odp_atomic_api.c \ + ../linux-generic/odp_byteorder.c \ + odp_std_clib.c \ + ../linux-generic/odp_sync.c \ + ../linux-generic/odp_ticketlock.c +endif + if ARCH_IS_ARM __LIB__libodp_dpdk_la_SOURCES += arch/default/odp_cpu_cycles.c \ arch/default/odp_global_time.c \
commit 12c8f4105843469e40823c23dd37c515f07ef52d Author: Matias Elo matias.elo@nokia.com Date: Wed Mar 14 15:33:43 2018 +0200
Port 0f628d4 "include, linux-gen: move API files into generic location"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 13fc407f..a2f996fb 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -21,56 +21,6 @@ odpinclude_HEADERS = \ include/odp/visibility_begin.h \ include/odp/visibility_end.h
-odpapiincludedir= $(includedir)/odp/api -odpapiinclude_HEADERS = \ - include/odp/api/align.h \ - include/odp/api/atomic.h \ - include/odp/api/barrier.h \ - include/odp/api/buffer.h \ - include/odp/api/byteorder.h \ - include/odp/api/chksum.h \ - include/odp/api/classification.h \ - include/odp/api/compiler.h \ - include/odp/api/cpu.h \ - include/odp/api/cpumask.h \ - include/odp/api/crypto.h \ - include/odp/api/debug.h \ - include/odp/api/deprecated.h \ - include/odp/api/errno.h \ - include/odp/api/event.h \ - include/odp/api/feature.h \ - include/odp/api/hash.h \ - include/odp/api/hints.h \ - include/odp/api/init.h \ - include/odp/api/ipsec.h \ - include/odp/api/packet_flags.h \ - include/odp/api/packet.h \ - include/odp/api/packet_io.h \ - include/odp/api/packet_io_stats.h \ - include/odp/api/pool.h \ - include/odp/api/queue.h \ - include/odp/api/random.h \ - include/odp/api/rwlock.h \ - include/odp/api/rwlock_recursive.h \ - include/odp/api/schedule.h \ - include/odp/api/schedule_types.h \ - include/odp/api/shared_memory.h \ - include/odp/api/spinlock.h \ - include/odp/api/spinlock_recursive.h \ - include/odp/api/std_clib.h \ - include/odp/api/std_types.h \ - include/odp/api/support.h \ - include/odp/api/sync.h \ - include/odp/api/system_info.h \ - include/odp/api/thread.h \ - include/odp/api/threshold.h \ - include/odp/api/thrmask.h \ - include/odp/api/ticketlock.h \ - include/odp/api/time.h \ - include/odp/api/timer.h \ - include/odp/api/traffic_mngr.h \ - include/odp/api/version.h - odpapiplatincludedir= $(includedir)/odp/api/plat odpapiplatinclude_HEADERS = \ include/odp/api/plat/atomic_inlines.h \
commit 0cf47204fb0b169f5ef0fa9b802697473cf51d46 Author: Matias Elo matias.elo@nokia.com Date: Wed Mar 14 15:13:18 2018 +0200
Port linux-gen, include: switch X.h to api+abi patches
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index afe02716..13fc407f 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -6,6 +6,7 @@ AM_CFLAGS += $(DPDK_CFLAGS) AM_CPPFLAGS = $(ODP_INCLUDES) AM_CPPFLAGS += -I$(top_srcdir)/platform/linux-generic/include AM_CPPFLAGS += -I$(top_srcdir)/platform/$(with_platform)/arch +AM_CPPFLAGS += -I$(top_srcdir)/platform/$(with_platform)/arch/@ARCH_DIR@ AM_CPPFLAGS += -I$(top_srcdir)/platform/$(with_platform)/arch/default
AM_CPPFLAGS += $(OPENSSL_CPPFLAGS) @@ -73,49 +74,59 @@ odpapiinclude_HEADERS = \ odpapiplatincludedir= $(includedir)/odp/api/plat odpapiplatinclude_HEADERS = \ include/odp/api/plat/atomic_inlines.h \ - include/odp/api/plat/atomic_types.h \ - include/odp/api/plat/barrier_types.h \ - include/odp/api/plat/buffer_types.h \ include/odp/api/plat/byteorder_inlines.h \ - include/odp/api/plat/byteorder_types.h \ - include/odp/api/plat/classification_types.h \ - include/odp/api/plat/cpumask_types.h \ - include/odp/api/plat/crypto_types.h \ - include/odp/api/plat/event_types.h \ - include/odp/api/plat/init_types.h \ - include/odp/api/plat/ipsec_types.h \ include/odp/api/plat/packet_flag_inlines.h \ include/odp/api/plat/packet_flag_inlines_api.h \ + include/odp/api/plat/packet_inline_types.h \ include/odp/api/plat/packet_inlines.h \ include/odp/api/plat/packet_inlines_api.h \ - include/odp/api/plat/packet_io_types.h \ - include/odp/api/plat/packet_types.h \ - include/odp/api/plat/pool_types.h \ - include/odp/api/plat/queue_types.h \ - include/odp/api/plat/rwlock_types.h \ - include/odp/api/plat/rwlock_recursive_types.h \ - include/odp/api/plat/schedule_types.h \ - include/odp/api/plat/shared_memory_types.h \ - include/odp/api/plat/spinlock_types.h \ - include/odp/api/plat/spinlock_recursive_types.h \ + include/odp/api/plat/pool_inline_types.h \ include/odp/api/plat/std_clib_inlines.h \ include/odp/api/plat/strong_types.h \ include/odp/api/plat/sync_inlines.h \ - include/odp/api/plat/thread_types.h \ - include/odp/api/plat/thrmask_types.h \ include/odp/api/plat/ticketlock_inlines.h \ - include/odp/api/plat/ticketlock_inlines_api.h \ - include/odp/api/plat/ticketlock_types.h \ - include/odp/api/plat/time_types.h \ - include/odp/api/plat/timer_types.h \ - include/odp/api/plat/traffic_mngr_types.h \ - include/odp/api/plat/version_types.h + include/odp/api/plat/ticketlock_inlines_api.h
nodist_odpapiplatinclude_HEADERS = \ include/odp/api/plat/static_inline.h
if !ODP_ABI_COMPAT odpapiabiarchincludedir = $(archincludedir)/odp/api/abi +odpapiabiarchinclude_HEADERS = \ + include-abi/odp/api/abi/align.h \ + include-abi/odp/api/abi/atomic.h \ + include-abi/odp/api/abi/barrier.h \ + include-abi/odp/api/abi/buffer.h \ + include-abi/odp/api/abi/byteorder.h \ + include-abi/odp/api/abi/classification.h \ + include-abi/odp/api/abi/cpumask.h \ + include-abi/odp/api/abi/crypto.h \ + include-abi/odp/api/abi/debug.h \ + include-abi/odp/api/abi/event.h \ + include-abi/odp/api/abi/init.h \ + include-abi/odp/api/abi/ipsec.h \ + include-abi/odp/api/abi/packet.h \ + include-abi/odp/api/abi/packet_flags.h \ + include-abi/odp/api/abi/packet_io.h \ + include-abi/odp/api/abi/pool.h \ + include-abi/odp/api/abi/queue.h \ + include-abi/odp/api/abi/rwlock.h \ + include-abi/odp/api/abi/rwlock_recursive.h \ + include-abi/odp/api/abi/schedule.h \ + include-abi/odp/api/abi/schedule_types.h \ + include-abi/odp/api/abi/shared_memory.h \ + include-abi/odp/api/abi/spinlock.h \ + include-abi/odp/api/abi/spinlock_recursive.h \ + include-abi/odp/api/abi/std_clib.h \ + include-abi/odp/api/abi/std_types.h \ + include-abi/odp/api/abi/sync.h \ + include-abi/odp/api/abi/thread.h \ + include-abi/odp/api/abi/thrmask.h \ + include-abi/odp/api/abi/ticketlock.h \ + include-abi/odp/api/abi/time.h \ + include-abi/odp/api/abi/timer.h \ + include-abi/odp/api/abi/traffic_mngr.h \ + include-abi/odp/api/abi/version.h endif
noinst_HEADERS = \ @@ -222,7 +233,9 @@ if ARCH_IS_ARM __LIB__libodp_dpdk_la_SOURCES += arch/default/odp_cpu_cycles.c \ arch/default/odp_global_time.c \ arch/default/odp_sysinfo_parse.c -arch_odp_headers = arch/arm/odp/api/cpu_arch.h +if !ODP_ABI_COMPAT +odpapiabiarchinclude_HEADERS += arch/arm/odp/api/abi/cpu.h +endif noinst_HEADERS += arch/arm/odp_atomic.h \ arch/arm/odp_cpu.h \ arch/arm/odp_cpu_idling.h \ @@ -233,7 +246,9 @@ if ARCH_IS_AARCH64 __LIB__libodp_dpdk_la_SOURCES += arch/default/odp_cpu_cycles.c \ arch/aarch64/odp_global_time.c \ arch/default/odp_sysinfo_parse.c -arch_odp_headers = arch/aarch64/odp/api/cpu_arch.h +if !ODP_ABI_COMPAT +odpapiabiarchinclude_HEADERS += arch/aarch64/odp/api/abi/cpu.h +endif noinst_HEADERS += arch/aarch64/odp_atomic.h \ arch/aarch64/odp_cpu.h \ arch/aarch64/odp_cpu_idling.h \ @@ -244,7 +259,9 @@ if ARCH_IS_MIPS64 __LIB__libodp_dpdk_la_SOURCES += arch/mips64/odp_cpu_cycles.c \ arch/default/odp_global_time.c \ arch/mips64/odp_sysinfo_parse.c -arch_odp_headers = arch/mips64/odp/api/cpu_arch.h +if !ODP_ABI_COMPAT +odpapiabiarchinclude_HEADERS += arch/mips64/odp/api/abi/cpu.h +endif noinst_HEADERS += arch/default/odp_cpu.h \ arch/default/odp_cpu_idling.h endif @@ -252,7 +269,9 @@ if ARCH_IS_POWERPC __LIB__libodp_dpdk_la_SOURCES += arch/default/odp_cpu_cycles.c \ arch/default/odp_global_time.c \ arch/powerpc/odp_sysinfo_parse.c -arch_odp_headers = arch/powerpc/odp/api/cpu_arch.h +if !ODP_ABI_COMPAT +odpapiabiarchinclude_HEADERS += arch/powerpc/odp/api/abi/cpu.h +endif noinst_HEADERS += arch/default/odp_cpu.h \ arch/default/odp_cpu_idling.h endif @@ -261,17 +280,14 @@ __LIB__libodp_dpdk_la_SOURCES += arch/x86/cpu_flags.c \ arch/x86/odp_cpu_cycles.c \ arch/x86/odp_global_time.c \ arch/x86/odp_sysinfo_parse.c -arch_odp_headers = arch/x86/odp/api/cpu_arch.h +if !ODP_ABI_COMPAT +odpapiabiarchinclude_HEADERS += arch/x86/odp/api/abi/cpu.h +endif noinst_HEADERS += arch/x86/cpu_flags.h noinst_HEADERS += arch/default/odp_cpu.h \ arch/default/odp_cpu_idling.h endif
-noinst_HEADERS += arch/default/odp/api/cpu_arch.h - -odpapiarchincludedir = $(archincludedir)/odp/api -odpapiarchinclude_HEADERS = $(arch_odp_headers) - __LIB__libodp_dpdk_la_LIBADD = $(ATOMIC_LIBS) __LIB__libodp_dpdk_la_LIBADD += $(OPENSSL_LIBS) __LIB__libodp_dpdk_la_LIBADD += $(DPDK_LIBS_LT) diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/align.h b/platform/linux-dpdk/include-abi/odp/api/abi/align.h new file mode 120000 index 00000000..d23c3a33 --- /dev/null +++ b/platform/linux-dpdk/include-abi/odp/api/abi/align.h @@ -0,0 +1 @@ +../../../../../linux-generic/include-abi/odp/api/abi/align.h \ No newline at end of file diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/atomic.h b/platform/linux-dpdk/include-abi/odp/api/abi/atomic.h new file mode 120000 index 00000000..694a8b06 --- /dev/null +++ b/platform/linux-dpdk/include-abi/odp/api/abi/atomic.h @@ -0,0 +1 @@ +../../../../../linux-generic/include-abi/odp/api/abi/atomic.h \ No newline at end of file diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/barrier.h b/platform/linux-dpdk/include-abi/odp/api/abi/barrier.h new file mode 120000 index 00000000..7fd29520 --- /dev/null +++ b/platform/linux-dpdk/include-abi/odp/api/abi/barrier.h @@ -0,0 +1 @@ +../../../../../linux-generic/include-abi/odp/api/abi/barrier.h \ No newline at end of file diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/buffer.h b/platform/linux-dpdk/include-abi/odp/api/abi/buffer.h new file mode 120000 index 00000000..06a66d30 --- /dev/null +++ b/platform/linux-dpdk/include-abi/odp/api/abi/buffer.h @@ -0,0 +1 @@ +../../../../../linux-generic/include-abi/odp/api/abi/buffer.h \ No newline at end of file diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/byteorder.h b/platform/linux-dpdk/include-abi/odp/api/abi/byteorder.h new file mode 120000 index 00000000..f5ff5808 --- /dev/null +++ b/platform/linux-dpdk/include-abi/odp/api/abi/byteorder.h @@ -0,0 +1 @@ +../../../../../linux-generic/include-abi/odp/api/abi/byteorder.h \ No newline at end of file diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/classification.h b/platform/linux-dpdk/include-abi/odp/api/abi/classification.h new file mode 120000 index 00000000..8610c56a --- /dev/null +++ b/platform/linux-dpdk/include-abi/odp/api/abi/classification.h @@ -0,0 +1 @@ +../../../../../linux-generic/include-abi/odp/api/abi/classification.h \ No newline at end of file diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/cpumask.h b/platform/linux-dpdk/include-abi/odp/api/abi/cpumask.h new file mode 120000 index 00000000..23b4f40e --- /dev/null +++ b/platform/linux-dpdk/include-abi/odp/api/abi/cpumask.h @@ -0,0 +1 @@ +../../../../../linux-generic/include-abi/odp/api/abi/cpumask.h \ No newline at end of file diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/crypto.h b/platform/linux-dpdk/include-abi/odp/api/abi/crypto.h new file mode 120000 index 00000000..3fb47a4c --- /dev/null +++ b/platform/linux-dpdk/include-abi/odp/api/abi/crypto.h @@ -0,0 +1 @@ +../../../../../linux-generic/include-abi/odp/api/abi/crypto.h \ No newline at end of file diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/debug.h b/platform/linux-dpdk/include-abi/odp/api/abi/debug.h new file mode 120000 index 00000000..7f59ed93 --- /dev/null +++ b/platform/linux-dpdk/include-abi/odp/api/abi/debug.h @@ -0,0 +1 @@ +../../../../../linux-generic/include-abi/odp/api/abi/debug.h \ No newline at end of file diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/event.h b/platform/linux-dpdk/include-abi/odp/api/abi/event.h new file mode 120000 index 00000000..91dd1ebc --- /dev/null +++ b/platform/linux-dpdk/include-abi/odp/api/abi/event.h @@ -0,0 +1 @@ +../../../../../linux-generic/include-abi/odp/api/abi/event.h \ No newline at end of file diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/init.h b/platform/linux-dpdk/include-abi/odp/api/abi/init.h new file mode 120000 index 00000000..b147ed64 --- /dev/null +++ b/platform/linux-dpdk/include-abi/odp/api/abi/init.h @@ -0,0 +1 @@ +../../../../../linux-generic/include-abi/odp/api/abi/init.h \ No newline at end of file diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/ipsec.h b/platform/linux-dpdk/include-abi/odp/api/abi/ipsec.h new file mode 120000 index 00000000..d4775452 --- /dev/null +++ b/platform/linux-dpdk/include-abi/odp/api/abi/ipsec.h @@ -0,0 +1 @@ +../../../../../linux-generic/include-abi/odp/api/abi/ipsec.h \ No newline at end of file diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/packet.h b/platform/linux-dpdk/include-abi/odp/api/abi/packet.h new file mode 100644 index 00000000..bd60d4a5 --- /dev/null +++ b/platform/linux-dpdk/include-abi/odp/api/abi/packet.h @@ -0,0 +1,64 @@ +/* Copyright (c) 2015, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + + +/** + * @file + * + * ODP packet descriptor + */ + +#ifndef ODP_API_ABI_PACKET_H_ +#define ODP_API_ABI_PACKET_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include <stddef.h> + +#include <odp/api/plat/static_inline.h> +#if ODP_ABI_COMPAT == 1 +#include <odp/api/abi/packet.h> +#else + +#include <odp/api/std_types.h> +#include <odp/api/plat/strong_types.h> + +/** @ingroup odp_packet + * @{ + */ + +typedef ODP_HANDLE_T(odp_packet_t); + +#define ODP_PACKET_INVALID _odp_cast_scalar(odp_packet_t, NULL) + +#define ODP_PACKET_OFFSET_INVALID 0xffff + +typedef ODP_HANDLE_T(odp_packet_seg_t); + +#define ODP_PACKET_SEG_INVALID _odp_cast_scalar(odp_packet_seg_t, NULL) + +typedef enum { + ODP_PACKET_GREEN = 0, + ODP_PACKET_YELLOW = 1, + ODP_PACKET_RED = 2, + ODP_PACKET_ALL_COLORS = 3, +} odp_packet_color_t; + +#define ODP_NUM_PACKET_COLORS 3 + +/** + * @} + */ + +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/packet_flags.h b/platform/linux-dpdk/include-abi/odp/api/abi/packet_flags.h new file mode 120000 index 00000000..82d4e000 --- /dev/null +++ b/platform/linux-dpdk/include-abi/odp/api/abi/packet_flags.h @@ -0,0 +1 @@ +../../../../../linux-generic/include-abi/odp/api/abi/packet_flags.h \ No newline at end of file diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/packet_io.h b/platform/linux-dpdk/include-abi/odp/api/abi/packet_io.h new file mode 120000 index 00000000..79a8fc3f --- /dev/null +++ b/platform/linux-dpdk/include-abi/odp/api/abi/packet_io.h @@ -0,0 +1 @@ +../../../../../linux-generic/include-abi/odp/api/abi/packet_io.h \ No newline at end of file diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/pool.h b/platform/linux-dpdk/include-abi/odp/api/abi/pool.h new file mode 120000 index 00000000..87cbcd21 --- /dev/null +++ b/platform/linux-dpdk/include-abi/odp/api/abi/pool.h @@ -0,0 +1 @@ +../../../../../linux-generic/include-abi/odp/api/abi/pool.h \ No newline at end of file diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/queue.h b/platform/linux-dpdk/include-abi/odp/api/abi/queue.h new file mode 120000 index 00000000..5d40402f --- /dev/null +++ b/platform/linux-dpdk/include-abi/odp/api/abi/queue.h @@ -0,0 +1 @@ +../../../../../linux-generic/include-abi/odp/api/abi/queue.h \ No newline at end of file diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/rwlock.h b/platform/linux-dpdk/include-abi/odp/api/abi/rwlock.h new file mode 120000 index 00000000..4d0fbd04 --- /dev/null +++ b/platform/linux-dpdk/include-abi/odp/api/abi/rwlock.h @@ -0,0 +1 @@ +../../../../../linux-generic/include-abi/odp/api/abi/rwlock.h \ No newline at end of file diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/rwlock_recursive.h b/platform/linux-dpdk/include-abi/odp/api/abi/rwlock_recursive.h new file mode 120000 index 00000000..e9a7f270 --- /dev/null +++ b/platform/linux-dpdk/include-abi/odp/api/abi/rwlock_recursive.h @@ -0,0 +1 @@ +../../../../../linux-generic/include-abi/odp/api/abi/rwlock_recursive.h \ No newline at end of file diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/schedule.h b/platform/linux-dpdk/include-abi/odp/api/abi/schedule.h new file mode 120000 index 00000000..8dc7cced --- /dev/null +++ b/platform/linux-dpdk/include-abi/odp/api/abi/schedule.h @@ -0,0 +1 @@ +../../../../../linux-generic/include-abi/odp/api/abi/schedule.h \ No newline at end of file diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/schedule_types.h b/platform/linux-dpdk/include-abi/odp/api/abi/schedule_types.h new file mode 120000 index 00000000..88811beb --- /dev/null +++ b/platform/linux-dpdk/include-abi/odp/api/abi/schedule_types.h @@ -0,0 +1 @@ +../../../../../linux-generic/include-abi/odp/api/abi/schedule_types.h \ No newline at end of file diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/shared_memory.h b/platform/linux-dpdk/include-abi/odp/api/abi/shared_memory.h new file mode 120000 index 00000000..17d60f74 --- /dev/null +++ b/platform/linux-dpdk/include-abi/odp/api/abi/shared_memory.h @@ -0,0 +1 @@ +../../../../../linux-generic/include-abi/odp/api/abi/shared_memory.h \ No newline at end of file diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/spinlock.h b/platform/linux-dpdk/include-abi/odp/api/abi/spinlock.h new file mode 120000 index 00000000..cafab663 --- /dev/null +++ b/platform/linux-dpdk/include-abi/odp/api/abi/spinlock.h @@ -0,0 +1 @@ +../../../../../linux-generic/include-abi/odp/api/abi/spinlock.h \ No newline at end of file diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/spinlock_recursive.h b/platform/linux-dpdk/include-abi/odp/api/abi/spinlock_recursive.h new file mode 120000 index 00000000..7857beed --- /dev/null +++ b/platform/linux-dpdk/include-abi/odp/api/abi/spinlock_recursive.h @@ -0,0 +1 @@ +../../../../../linux-generic/include-abi/odp/api/abi/spinlock_recursive.h \ No newline at end of file diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/std_clib.h b/platform/linux-dpdk/include-abi/odp/api/abi/std_clib.h new file mode 120000 index 00000000..01f60436 --- /dev/null +++ b/platform/linux-dpdk/include-abi/odp/api/abi/std_clib.h @@ -0,0 +1 @@ +../../../../../linux-generic/include-abi/odp/api/abi/std_clib.h \ No newline at end of file diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/std_types.h b/platform/linux-dpdk/include-abi/odp/api/abi/std_types.h new file mode 120000 index 00000000..dbc3f316 --- /dev/null +++ b/platform/linux-dpdk/include-abi/odp/api/abi/std_types.h @@ -0,0 +1 @@ +../../../../../linux-generic/include-abi/odp/api/abi/std_types.h \ No newline at end of file diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/sync.h b/platform/linux-dpdk/include-abi/odp/api/abi/sync.h new file mode 120000 index 00000000..def6e53f --- /dev/null +++ b/platform/linux-dpdk/include-abi/odp/api/abi/sync.h @@ -0,0 +1 @@ +../../../../../linux-generic/include-abi/odp/api/abi/sync.h \ No newline at end of file diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/thread.h b/platform/linux-dpdk/include-abi/odp/api/abi/thread.h new file mode 120000 index 00000000..db34e297 --- /dev/null +++ b/platform/linux-dpdk/include-abi/odp/api/abi/thread.h @@ -0,0 +1 @@ +../../../../../linux-generic/include-abi/odp/api/abi/thread.h \ No newline at end of file diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/thrmask.h b/platform/linux-dpdk/include-abi/odp/api/abi/thrmask.h new file mode 120000 index 00000000..4c99d9d9 --- /dev/null +++ b/platform/linux-dpdk/include-abi/odp/api/abi/thrmask.h @@ -0,0 +1 @@ +../../../../../linux-generic/include-abi/odp/api/abi/thrmask.h \ No newline at end of file diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/ticketlock.h b/platform/linux-dpdk/include-abi/odp/api/abi/ticketlock.h new file mode 120000 index 00000000..c4eb3629 --- /dev/null +++ b/platform/linux-dpdk/include-abi/odp/api/abi/ticketlock.h @@ -0,0 +1 @@ +../../../../../linux-generic/include-abi/odp/api/abi/ticketlock.h \ No newline at end of file diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/time.h b/platform/linux-dpdk/include-abi/odp/api/abi/time.h new file mode 120000 index 00000000..31f85b0e --- /dev/null +++ b/platform/linux-dpdk/include-abi/odp/api/abi/time.h @@ -0,0 +1 @@ +../../../../../linux-generic/include-abi/odp/api/abi/time.h \ No newline at end of file diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/timer.h b/platform/linux-dpdk/include-abi/odp/api/abi/timer.h new file mode 120000 index 00000000..e65d4faf --- /dev/null +++ b/platform/linux-dpdk/include-abi/odp/api/abi/timer.h @@ -0,0 +1 @@ +../../../../../linux-generic/include-abi/odp/api/abi/timer.h \ No newline at end of file diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/traffic_mngr.h b/platform/linux-dpdk/include-abi/odp/api/abi/traffic_mngr.h new file mode 120000 index 00000000..94b0862a --- /dev/null +++ b/platform/linux-dpdk/include-abi/odp/api/abi/traffic_mngr.h @@ -0,0 +1 @@ +../../../../../linux-generic/include-abi/odp/api/abi/traffic_mngr.h \ No newline at end of file diff --git a/platform/linux-dpdk/include-abi/odp/api/abi/version.h b/platform/linux-dpdk/include-abi/odp/api/abi/version.h new file mode 120000 index 00000000..4a999ae5 --- /dev/null +++ b/platform/linux-dpdk/include-abi/odp/api/abi/version.h @@ -0,0 +1 @@ +../../../../../linux-generic/include-abi/odp/api/abi/version.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/align.h b/platform/linux-dpdk/include/odp/api/align.h deleted file mode 120000 index 10c13402..00000000 --- a/platform/linux-dpdk/include/odp/api/align.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/align.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/atomic.h b/platform/linux-dpdk/include/odp/api/atomic.h deleted file mode 120000 index e6d28fdf..00000000 --- a/platform/linux-dpdk/include/odp/api/atomic.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/atomic.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/barrier.h b/platform/linux-dpdk/include/odp/api/barrier.h deleted file mode 120000 index 72a22f10..00000000 --- a/platform/linux-dpdk/include/odp/api/barrier.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/barrier.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/buffer.h b/platform/linux-dpdk/include/odp/api/buffer.h deleted file mode 120000 index 6587bdcb..00000000 --- a/platform/linux-dpdk/include/odp/api/buffer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/buffer.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/byteorder.h b/platform/linux-dpdk/include/odp/api/byteorder.h deleted file mode 120000 index cef6d89b..00000000 --- a/platform/linux-dpdk/include/odp/api/byteorder.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/byteorder.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/chksum.h b/platform/linux-dpdk/include/odp/api/chksum.h deleted file mode 120000 index a7f33328..00000000 --- a/platform/linux-dpdk/include/odp/api/chksum.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/chksum.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/classification.h b/platform/linux-dpdk/include/odp/api/classification.h deleted file mode 120000 index 43cf9362..00000000 --- a/platform/linux-dpdk/include/odp/api/classification.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/classification.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/compiler.h b/platform/linux-dpdk/include/odp/api/compiler.h deleted file mode 120000 index 6b99f796..00000000 --- a/platform/linux-dpdk/include/odp/api/compiler.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/compiler.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/cpu.h b/platform/linux-dpdk/include/odp/api/cpu.h deleted file mode 120000 index eb6a69f8..00000000 --- a/platform/linux-dpdk/include/odp/api/cpu.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/cpu.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/cpumask.h b/platform/linux-dpdk/include/odp/api/cpumask.h deleted file mode 120000 index 49ca0f2c..00000000 --- a/platform/linux-dpdk/include/odp/api/cpumask.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/cpumask.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/crypto.h b/platform/linux-dpdk/include/odp/api/crypto.h deleted file mode 120000 index d69e8a0e..00000000 --- a/platform/linux-dpdk/include/odp/api/crypto.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/crypto.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/debug.h b/platform/linux-dpdk/include/odp/api/debug.h deleted file mode 120000 index 2814f8f5..00000000 --- a/platform/linux-dpdk/include/odp/api/debug.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/debug.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/deprecated.h b/platform/linux-dpdk/include/odp/api/deprecated.h deleted file mode 120000 index 42bc7ef1..00000000 --- a/platform/linux-dpdk/include/odp/api/deprecated.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/deprecated.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/errno.h b/platform/linux-dpdk/include/odp/api/errno.h deleted file mode 120000 index f274d6a7..00000000 --- a/platform/linux-dpdk/include/odp/api/errno.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/errno.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/event.h b/platform/linux-dpdk/include/odp/api/event.h deleted file mode 120000 index 674d3539..00000000 --- a/platform/linux-dpdk/include/odp/api/event.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/event.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/feature.h b/platform/linux-dpdk/include/odp/api/feature.h deleted file mode 120000 index aa1c547f..00000000 --- a/platform/linux-dpdk/include/odp/api/feature.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/feature.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/hash.h b/platform/linux-dpdk/include/odp/api/hash.h deleted file mode 120000 index 80cbce72..00000000 --- a/platform/linux-dpdk/include/odp/api/hash.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/hash.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/hints.h b/platform/linux-dpdk/include/odp/api/hints.h deleted file mode 120000 index 60a8912b..00000000 --- a/platform/linux-dpdk/include/odp/api/hints.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/hints.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/init.h b/platform/linux-dpdk/include/odp/api/init.h deleted file mode 120000 index 0f4bd6c0..00000000 --- a/platform/linux-dpdk/include/odp/api/init.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/init.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/ipsec.h b/platform/linux-dpdk/include/odp/api/ipsec.h deleted file mode 120000 index eaf507cf..00000000 --- a/platform/linux-dpdk/include/odp/api/ipsec.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/ipsec.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/packet.h b/platform/linux-dpdk/include/odp/api/packet.h deleted file mode 120000 index 2d49844e..00000000 --- a/platform/linux-dpdk/include/odp/api/packet.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/packet.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/packet_flags.h b/platform/linux-dpdk/include/odp/api/packet_flags.h deleted file mode 120000 index 01283934..00000000 --- a/platform/linux-dpdk/include/odp/api/packet_flags.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/packet_flags.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/packet_io.h b/platform/linux-dpdk/include/odp/api/packet_io.h deleted file mode 120000 index 1e0d9e41..00000000 --- a/platform/linux-dpdk/include/odp/api/packet_io.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/packet_io.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/packet_io_stats.h b/platform/linux-dpdk/include/odp/api/packet_io_stats.h deleted file mode 120000 index 58fdde2d..00000000 --- a/platform/linux-dpdk/include/odp/api/packet_io_stats.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/packet_io_stats.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/plat/atomic_types.h b/platform/linux-dpdk/include/odp/api/plat/atomic_types.h deleted file mode 120000 index 2febdca9..00000000 --- a/platform/linux-dpdk/include/odp/api/plat/atomic_types.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../linux-generic/include/odp/api/plat/atomic_types.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/plat/barrier_types.h b/platform/linux-dpdk/include/odp/api/plat/barrier_types.h deleted file mode 120000 index 8869ae8c..00000000 --- a/platform/linux-dpdk/include/odp/api/plat/barrier_types.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../linux-generic/include/odp/api/plat/barrier_types.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/plat/buffer_types.h b/platform/linux-dpdk/include/odp/api/plat/buffer_types.h deleted file mode 120000 index 2b734a1f..00000000 --- a/platform/linux-dpdk/include/odp/api/plat/buffer_types.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../linux-generic/include/odp/api/plat/buffer_types.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/plat/byteorder_types.h b/platform/linux-dpdk/include/odp/api/plat/byteorder_types.h deleted file mode 120000 index 13d0058a..00000000 --- a/platform/linux-dpdk/include/odp/api/plat/byteorder_types.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../linux-generic/include/odp/api/plat/byteorder_types.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/plat/classification_types.h b/platform/linux-dpdk/include/odp/api/plat/classification_types.h deleted file mode 120000 index 1d1183de..00000000 --- a/platform/linux-dpdk/include/odp/api/plat/classification_types.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../linux-generic/include/odp/api/plat/classification_types.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/plat/cpumask_types.h b/platform/linux-dpdk/include/odp/api/plat/cpumask_types.h deleted file mode 120000 index cdf1f996..00000000 --- a/platform/linux-dpdk/include/odp/api/plat/cpumask_types.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../linux-generic/include/odp/api/plat/cpumask_types.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/plat/crypto_types.h b/platform/linux-dpdk/include/odp/api/plat/crypto_types.h deleted file mode 120000 index 36d39fdc..00000000 --- a/platform/linux-dpdk/include/odp/api/plat/crypto_types.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../linux-generic/include/odp/api/plat/crypto_types.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/plat/event_types.h b/platform/linux-dpdk/include/odp/api/plat/event_types.h deleted file mode 120000 index 9bff0f6a..00000000 --- a/platform/linux-dpdk/include/odp/api/plat/event_types.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../linux-generic/include/odp/api/plat/event_types.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/plat/init_types.h b/platform/linux-dpdk/include/odp/api/plat/init_types.h deleted file mode 120000 index 6b19ee41..00000000 --- a/platform/linux-dpdk/include/odp/api/plat/init_types.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../linux-generic/include/odp/api/plat/init_types.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/plat/ipsec_types.h b/platform/linux-dpdk/include/odp/api/plat/ipsec_types.h deleted file mode 120000 index 86fdb184..00000000 --- a/platform/linux-dpdk/include/odp/api/plat/ipsec_types.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../linux-generic/include/odp/api/plat/ipsec_types.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_flag_inlines.h b/platform/linux-dpdk/include/odp/api/plat/packet_flag_inlines.h index 285b943f..8cd23fcc 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_flag_inlines.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_flag_inlines.h @@ -13,7 +13,12 @@ #ifndef _ODP_PLAT_PACKET_FLAG_INLINES_H_ #define _ODP_PLAT_PACKET_FLAG_INLINES_H_
-#include <odp/api/plat/packet_types.h> +#ifdef __cplusplus +extern "C" { +#endif + +#include <odp/api/abi/packet.h> +#include <odp/api/plat/packet_inlines.h>
/** @internal Inline function offsets */ extern const _odp_packet_inline_offset_t _odp_packet_inline; @@ -91,4 +96,8 @@ static inline int _odp_packet_has_ts(odp_packet_t pkt)
#endif
+#ifdef __cplusplus +} +#endif + #endif diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_types.h b/platform/linux-dpdk/include/odp/api/plat/packet_inline_types.h similarity index 80% rename from platform/linux-dpdk/include/odp/api/plat/packet_types.h rename to platform/linux-dpdk/include/odp/api/plat/packet_inline_types.h index 1c90304b..aa50ac5f 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_types.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_inline_types.h @@ -1,61 +1,23 @@ -/* Copyright (c) 2015, Linaro Limited +/* Copyright (c) 2018, Linaro Limited * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */
- /** * @file * * ODP packet descriptor */
-#ifndef ODP_PACKET_TYPES_H_ -#define ODP_PACKET_TYPES_H_ +#ifndef ODP_PACKET_INLINE_TYPES_H_ +#define ODP_PACKET_INLINE_TYPES_H_
#ifdef __cplusplus extern "C" { #endif
-#include <stddef.h> - -#include <odp/api/plat/static_inline.h> -#if ODP_ABI_COMPAT == 1 -#include <odp/api/abi/packet.h> -#else - -#include <odp/api/std_types.h> -#include <odp/api/plat/strong_types.h> - -/** @ingroup odp_packet - * @{ - */ - -typedef ODP_HANDLE_T(odp_packet_t); - -#define ODP_PACKET_INVALID _odp_cast_scalar(odp_packet_t, NULL) - -#define ODP_PACKET_OFFSET_INVALID 0xffff - -typedef ODP_HANDLE_T(odp_packet_seg_t); - -#define ODP_PACKET_SEG_INVALID _odp_cast_scalar(odp_packet_seg_t, NULL) - -typedef enum { - ODP_PACKET_GREEN = 0, - ODP_PACKET_YELLOW = 1, - ODP_PACKET_RED = 2, - ODP_PACKET_ALL_COLORS = 3, -} odp_packet_color_t; - -#define ODP_NUM_PACKET_COLORS 3 - -/** - * @} - */ - -#endif +#include <stdint.h>
/** @internal Packet field accessor */ #define _odp_pkt_get(pkt, cast, field) \ diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h index f96fdd81..25c4c628 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h @@ -17,12 +17,15 @@ extern "C" { #endif
-#include <odp/api/plat/packet_types.h> +#include <odp/api/abi/packet.h> #include <odp/api/pool.h> -#include <odp/api/time.h> -#include <odp/api/plat/packet_io_types.h> -#include <odp/api/plat/buffer_types.h> +#include <odp/api/abi/packet_io.h> #include <odp/api/hints.h> +#include <odp/api/time.h> +#include <odp/api/abi/buffer.h> + +#include <odp/api/plat/packet_inline_types.h> +#include <odp/api/plat/pool_inline_types.h>
/* Required by rte_mbuf.h */ #include <sys/types.h> diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_io_types.h b/platform/linux-dpdk/include/odp/api/plat/packet_io_types.h deleted file mode 120000 index 9ff4d49d..00000000 --- a/platform/linux-dpdk/include/odp/api/plat/packet_io_types.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../linux-generic/include/odp/api/plat/packet_io_types.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/plat/pool_inline_types.h b/platform/linux-dpdk/include/odp/api/plat/pool_inline_types.h new file mode 120000 index 00000000..ef34e573 --- /dev/null +++ b/platform/linux-dpdk/include/odp/api/plat/pool_inline_types.h @@ -0,0 +1 @@ +../../../../../linux-generic/include/odp/api/plat/pool_inline_types.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/plat/pool_types.h b/platform/linux-dpdk/include/odp/api/plat/pool_types.h deleted file mode 120000 index 1ea2b43b..00000000 --- a/platform/linux-dpdk/include/odp/api/plat/pool_types.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../linux-generic/include/odp/api/plat/pool_types.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/plat/queue_types.h b/platform/linux-dpdk/include/odp/api/plat/queue_types.h deleted file mode 120000 index a47d16b0..00000000 --- a/platform/linux-dpdk/include/odp/api/plat/queue_types.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../linux-generic/include/odp/api/plat/queue_types.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/plat/rwlock_recursive_types.h b/platform/linux-dpdk/include/odp/api/plat/rwlock_recursive_types.h deleted file mode 120000 index 516efcdd..00000000 --- a/platform/linux-dpdk/include/odp/api/plat/rwlock_recursive_types.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../linux-generic/include/odp/api/plat/rwlock_recursive_types.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/plat/rwlock_types.h b/platform/linux-dpdk/include/odp/api/plat/rwlock_types.h deleted file mode 120000 index 286e6ea8..00000000 --- a/platform/linux-dpdk/include/odp/api/plat/rwlock_types.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../linux-generic/include/odp/api/plat/rwlock_types.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/plat/schedule_types.h b/platform/linux-dpdk/include/odp/api/plat/schedule_types.h deleted file mode 120000 index 8d6af9b3..00000000 --- a/platform/linux-dpdk/include/odp/api/plat/schedule_types.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../linux-generic/include/odp/api/plat/schedule_types.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/plat/shared_memory_types.h b/platform/linux-dpdk/include/odp/api/plat/shared_memory_types.h deleted file mode 120000 index 936573e4..00000000 --- a/platform/linux-dpdk/include/odp/api/plat/shared_memory_types.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../linux-generic/include/odp/api/plat/shared_memory_types.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/plat/spinlock_recursive_types.h b/platform/linux-dpdk/include/odp/api/plat/spinlock_recursive_types.h deleted file mode 120000 index 6c7dc468..00000000 --- a/platform/linux-dpdk/include/odp/api/plat/spinlock_recursive_types.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../linux-generic/include/odp/api/plat/spinlock_recursive_types.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/plat/spinlock_types.h b/platform/linux-dpdk/include/odp/api/plat/spinlock_types.h deleted file mode 120000 index 30ef7c85..00000000 --- a/platform/linux-dpdk/include/odp/api/plat/spinlock_types.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../linux-generic/include/odp/api/plat/spinlock_types.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/plat/std_clib_inlines.h b/platform/linux-dpdk/include/odp/api/plat/std_clib_inlines.h index b305fe8a..2b3f3c93 100644 --- a/platform/linux-dpdk/include/odp/api/plat/std_clib_inlines.h +++ b/platform/linux-dpdk/include/odp/api/plat/std_clib_inlines.h @@ -11,14 +11,12 @@ extern "C" { #endif
-#include <odp/api/spec/std_types.h> #include <string.h> - -extern void* (*const dpdk_memcpy)(void*, const void*, size_t); +#include <rte_memcpy.h>
_ODP_INLINE void *odp_memcpy(void *dst, const void *src, size_t num) { - return (*dpdk_memcpy)(dst, src, num); + return rte_memcpy(dst, src, num); }
_ODP_INLINE void *odp_memset(void *ptr, int value, size_t num) diff --git a/platform/linux-dpdk/include/odp/api/plat/thread_types.h b/platform/linux-dpdk/include/odp/api/plat/thread_types.h deleted file mode 120000 index a05d8790..00000000 --- a/platform/linux-dpdk/include/odp/api/plat/thread_types.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../linux-generic/include/odp/api/plat/thread_types.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/plat/thrmask_types.h b/platform/linux-dpdk/include/odp/api/plat/thrmask_types.h deleted file mode 120000 index bf40ebb5..00000000 --- a/platform/linux-dpdk/include/odp/api/plat/thrmask_types.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../linux-generic/include/odp/api/plat/thrmask_types.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/plat/ticketlock_types.h b/platform/linux-dpdk/include/odp/api/plat/ticketlock_types.h deleted file mode 120000 index 885299b9..00000000 --- a/platform/linux-dpdk/include/odp/api/plat/ticketlock_types.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../linux-generic/include/odp/api/plat/ticketlock_types.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/plat/time_types.h b/platform/linux-dpdk/include/odp/api/plat/time_types.h deleted file mode 120000 index b42bc83c..00000000 --- a/platform/linux-dpdk/include/odp/api/plat/time_types.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../linux-generic/include/odp/api/plat/time_types.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/plat/timer_types.h b/platform/linux-dpdk/include/odp/api/plat/timer_types.h deleted file mode 120000 index a6699df9..00000000 --- a/platform/linux-dpdk/include/odp/api/plat/timer_types.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../linux-generic/include/odp/api/plat/timer_types.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/plat/traffic_mngr_types.h b/platform/linux-dpdk/include/odp/api/plat/traffic_mngr_types.h deleted file mode 120000 index 708f8ae5..00000000 --- a/platform/linux-dpdk/include/odp/api/plat/traffic_mngr_types.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../linux-generic/include/odp/api/plat/traffic_mngr_types.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/plat/version_types.h b/platform/linux-dpdk/include/odp/api/plat/version_types.h deleted file mode 120000 index 5c41e461..00000000 --- a/platform/linux-dpdk/include/odp/api/plat/version_types.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../linux-generic/include/odp/api/plat/version_types.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/pool.h b/platform/linux-dpdk/include/odp/api/pool.h deleted file mode 120000 index dc61addf..00000000 --- a/platform/linux-dpdk/include/odp/api/pool.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/pool.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/queue.h b/platform/linux-dpdk/include/odp/api/queue.h deleted file mode 120000 index de33df69..00000000 --- a/platform/linux-dpdk/include/odp/api/queue.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/queue.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/random.h b/platform/linux-dpdk/include/odp/api/random.h deleted file mode 120000 index f686acb8..00000000 --- a/platform/linux-dpdk/include/odp/api/random.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/random.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/rwlock.h b/platform/linux-dpdk/include/odp/api/rwlock.h deleted file mode 120000 index 8730e75e..00000000 --- a/platform/linux-dpdk/include/odp/api/rwlock.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/rwlock.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/rwlock_recursive.h b/platform/linux-dpdk/include/odp/api/rwlock_recursive.h deleted file mode 120000 index 7e8ef995..00000000 --- a/platform/linux-dpdk/include/odp/api/rwlock_recursive.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/rwlock_recursive.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/schedule.h b/platform/linux-dpdk/include/odp/api/schedule.h deleted file mode 120000 index 144acd72..00000000 --- a/platform/linux-dpdk/include/odp/api/schedule.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/schedule.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/schedule_types.h b/platform/linux-dpdk/include/odp/api/schedule_types.h deleted file mode 120000 index 4fcc5907..00000000 --- a/platform/linux-dpdk/include/odp/api/schedule_types.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/schedule_types.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/shared_memory.h b/platform/linux-dpdk/include/odp/api/shared_memory.h deleted file mode 120000 index 2f79b276..00000000 --- a/platform/linux-dpdk/include/odp/api/shared_memory.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/shared_memory.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/spinlock.h b/platform/linux-dpdk/include/odp/api/spinlock.h deleted file mode 120000 index 276271a1..00000000 --- a/platform/linux-dpdk/include/odp/api/spinlock.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/spinlock.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/spinlock_recursive.h b/platform/linux-dpdk/include/odp/api/spinlock_recursive.h deleted file mode 120000 index b738f8b1..00000000 --- a/platform/linux-dpdk/include/odp/api/spinlock_recursive.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/spinlock_recursive.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/std_clib.h b/platform/linux-dpdk/include/odp/api/std_clib.h deleted file mode 120000 index e7abec8e..00000000 --- a/platform/linux-dpdk/include/odp/api/std_clib.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/std_clib.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/std_types.h b/platform/linux-dpdk/include/odp/api/std_types.h deleted file mode 120000 index 2cc6bb77..00000000 --- a/platform/linux-dpdk/include/odp/api/std_types.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/std_types.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/support.h b/platform/linux-dpdk/include/odp/api/support.h deleted file mode 120000 index e6196271..00000000 --- a/platform/linux-dpdk/include/odp/api/support.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/support.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/sync.h b/platform/linux-dpdk/include/odp/api/sync.h deleted file mode 120000 index 06b6852f..00000000 --- a/platform/linux-dpdk/include/odp/api/sync.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/sync.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/system_info.h b/platform/linux-dpdk/include/odp/api/system_info.h deleted file mode 120000 index ce04866e..00000000 --- a/platform/linux-dpdk/include/odp/api/system_info.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/system_info.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/thread.h b/platform/linux-dpdk/include/odp/api/thread.h deleted file mode 120000 index f3f731ed..00000000 --- a/platform/linux-dpdk/include/odp/api/thread.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/thread.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/threshold.h b/platform/linux-dpdk/include/odp/api/threshold.h deleted file mode 120000 index f470f0aa..00000000 --- a/platform/linux-dpdk/include/odp/api/threshold.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/threshold.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/thrmask.h b/platform/linux-dpdk/include/odp/api/thrmask.h deleted file mode 120000 index 709adaaf..00000000 --- a/platform/linux-dpdk/include/odp/api/thrmask.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/thrmask.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/ticketlock.h b/platform/linux-dpdk/include/odp/api/ticketlock.h deleted file mode 120000 index a8a5d832..00000000 --- a/platform/linux-dpdk/include/odp/api/ticketlock.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/ticketlock.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/time.h b/platform/linux-dpdk/include/odp/api/time.h deleted file mode 120000 index c0743d88..00000000 --- a/platform/linux-dpdk/include/odp/api/time.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/time.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/timer.h b/platform/linux-dpdk/include/odp/api/timer.h deleted file mode 120000 index c81bfbed..00000000 --- a/platform/linux-dpdk/include/odp/api/timer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/timer.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/traffic_mngr.h b/platform/linux-dpdk/include/odp/api/traffic_mngr.h deleted file mode 120000 index e9faa26d..00000000 --- a/platform/linux-dpdk/include/odp/api/traffic_mngr.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/traffic_mngr.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/version.h b/platform/linux-dpdk/include/odp/api/version.h deleted file mode 120000 index da44655a..00000000 --- a/platform/linux-dpdk/include/odp/api/version.h +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/include/odp/api/version.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/drv b/platform/linux-dpdk/include/odp/drv deleted file mode 120000 index cdf2348b..00000000 --- a/platform/linux-dpdk/include/odp/drv +++ /dev/null @@ -1 +0,0 @@ -../../../linux-generic/include/odp/drv \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/visibility_begin.h b/platform/linux-dpdk/include/odp/visibility_begin.h deleted file mode 120000 index 1ee97117..00000000 --- a/platform/linux-dpdk/include/odp/visibility_begin.h +++ /dev/null @@ -1 +0,0 @@ -../../../linux-generic/include/odp/visibility_begin.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/visibility_end.h b/platform/linux-dpdk/include/odp/visibility_end.h deleted file mode 120000 index 9628087c..00000000 --- a/platform/linux-dpdk/include/odp/visibility_end.h +++ /dev/null @@ -1 +0,0 @@ -../../../linux-generic/include/odp/visibility_end.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp_packet_internal.h b/platform/linux-dpdk/include/odp_packet_internal.h index 74e7ac55..bcc4e7b4 100644 --- a/platform/linux-dpdk/include/odp_packet_internal.h +++ b/platform/linux-dpdk/include/odp_packet_internal.h @@ -25,11 +25,12 @@ extern "C" { #include <odp_buffer_inlines.h> #include <odp_pool_internal.h> #include <odp/api/packet.h> +#include <odp/api/plat/packet_inline_types.h> #include <odp/api/packet_io.h> #include <odp/api/crypto.h> -#include <odp/api/ipsec.h> +#include <odp_ipsec_internal.h> +#include <odp/api/abi/packet.h> #include <protocols/eth.h> -#include <odp/api/plat/packet_types.h> #include <odp_queue_if.h>
#include <rte_acl_osdep.h> diff --git a/platform/linux-dpdk/odp_crypto.c b/platform/linux-dpdk/odp_crypto.c index 5ed84bc8..9e592b82 100644 --- a/platform/linux-dpdk/odp_crypto.c +++ b/platform/linux-dpdk/odp_crypto.c @@ -19,6 +19,7 @@ #include <odp_debug_internal.h> #include <odp/api/hints.h> #include <odp/api/random.h> +#include <odp/api/packet.h> #include <odp/api/plat/packet_inlines.h> #include <odp_packet_internal.h> #include <rte_crypto.h> diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index d23b3fd3..a3c92602 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -6,8 +6,8 @@
#include "config.h"
-#include <odp/api/plat/packet_inlines.h> #include <odp/api/packet.h> +#include <odp/api/plat/packet_inlines.h> #include <odp_packet_internal.h> #include <odp_debug_internal.h> #include <odp/api/hints.h> diff --git a/platform/linux-dpdk/odp_pool.c b/platform/linux-dpdk/odp_pool.c index 1573c347..32a794c4 100644 --- a/platform/linux-dpdk/odp_pool.c +++ b/platform/linux-dpdk/odp_pool.c @@ -27,6 +27,8 @@ #include <math.h> #include <inttypes.h>
+#include <odp/api/plat/pool_inline_types.h> + /* for DPDK */ #include <odp_packet_dpdk.h>
diff --git a/platform/linux-dpdk/odp_std_clib.c b/platform/linux-dpdk/odp_std_clib.c index 3f52c3a9..155e73d4 100644 --- a/platform/linux-dpdk/odp_std_clib.c +++ b/platform/linux-dpdk/odp_std_clib.c @@ -4,35 +4,10 @@ * SPDX-License-Identifier: BSD-3-Clause */
-#ifdef __cplusplus -extern "C" { -#endif - -#include <rte_memcpy.h> +#include "config.h"
#include <odp/api/std_clib.h>
-#if ODP_ABI_COMPAT == 0 -#include <odp/visibility_begin.h> -#endif - -#if defined(__arm__) || defined(__aarch64__) -static void *_rte_memcpy(void *dst, const void *src, size_t n) -{ - return rte_memcpy(dst, src, n); -} - -void* (*const dpdk_memcpy)(void*, const void*, size_t) = &_rte_memcpy; -#else -void* (*const dpdk_memcpy)(void*, const void*, size_t) = &rte_memcpy; -#endif - -#if ODP_ABI_COMPAT == 0 -#include <odp/visibility_end.h> -#else +/* Include non-inlined versions of API functions */ +#define _ODP_INLINE #include <odp/api/plat/std_clib_inlines.h> -#endif - -#ifdef __cplusplus -} -#endif
commit fc0c161a1ffe14b22e4ac5f449477c2dfc949f04 Author: Matias Elo matias.elo@nokia.com Date: Wed Mar 14 15:06:24 2018 +0200
Port 60feb6a "build, linux-gen: provide optional dir for arch includes"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index b4e3062f..afe02716 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -115,7 +115,7 @@ nodist_odpapiplatinclude_HEADERS = \ include/odp/api/plat/static_inline.h
if !ODP_ABI_COMPAT -odpapiabiarchincludedir= $(includedir)/odp/api/abi +odpapiabiarchincludedir = $(archincludedir)/odp/api/abi endif
noinst_HEADERS = \ @@ -269,7 +269,8 @@ endif
noinst_HEADERS += arch/default/odp/api/cpu_arch.h
-odpapiinclude_HEADERS += $(arch_odp_headers) +odpapiarchincludedir = $(archincludedir)/odp/api +odpapiarchinclude_HEADERS = $(arch_odp_headers)
__LIB__libodp_dpdk_la_LIBADD = $(ATOMIC_LIBS) __LIB__libodp_dpdk_la_LIBADD += $(OPENSSL_LIBS)
commit ba9ba1ce21bf0366b6decebf2b505b9c7baaba0c Author: Matias Elo matias.elo@nokia.com Date: Wed Mar 14 15:04:15 2018 +0200
Port 503bc79 "build: add platform dir for non-ABI-compat headers"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 97bbfa75..b4e3062f 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -114,6 +114,10 @@ odpapiplatinclude_HEADERS = \ nodist_odpapiplatinclude_HEADERS = \ include/odp/api/plat/static_inline.h
+if !ODP_ABI_COMPAT +odpapiabiarchincludedir= $(includedir)/odp/api/abi +endif + noinst_HEADERS = \ arch/odp_arch_time_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_align_internal.h \
commit ac95ab24e59e3fa5c05d7aafbc836fdb5c9600d6 Author: Matias Elo matias.elo@nokia.com Date: Wed Mar 14 15:01:59 2018 +0200
Port 7f1ea37 "build: move ODP include path to common Makefile.inc"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index a4bda1f6..97bbfa75 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -3,14 +3,9 @@ include $(top_srcdir)/platform/@with_platform@/Makefile.inc
AM_CFLAGS += $(DPDK_CFLAGS)
-AM_CPPFLAGS = -I$(srcdir)/include +AM_CPPFLAGS = $(ODP_INCLUDES) AM_CPPFLAGS += -I$(top_srcdir)/platform/linux-generic/include -AM_CPPFLAGS += -I$(top_srcdir)/include AM_CPPFLAGS += -I$(top_srcdir)/platform/$(with_platform)/arch -AM_CPPFLAGS += -I$(top_srcdir)/include/odp/arch/@ARCH_ABI@ -AM_CPPFLAGS += -I$(top_builddir)/include -AM_CPPFLAGS += -Iinclude -AM_CPPFLAGS += -I$(top_srcdir)/platform/$(with_platform)/arch/$(ARCH_DIR) AM_CPPFLAGS += -I$(top_srcdir)/platform/$(with_platform)/arch/default
AM_CPPFLAGS += $(OPENSSL_CPPFLAGS)
commit 89aa8a0eb8bb389788f4fec2945d8c2bbf37c5d3 Author: Matias Elo matias.elo@nokia.com Date: Wed Mar 14 14:33:00 2018 +0200
Port 5e064cd "linux-generic: pktio: genuinely sleep in timeout receive"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp_packet_io_internal.h b/platform/linux-dpdk/include/odp_packet_io_internal.h index 83a84a1e..081e5f0a 100644 --- a/platform/linux-dpdk/include/odp_packet_io_internal.h +++ b/platform/linux-dpdk/include/odp_packet_io_internal.h @@ -145,6 +145,12 @@ typedef struct pktio_if_ops { odp_time_t (*pktin_ts_from_ns)(pktio_entry_t *pktio_entry, uint64_t ns); int (*recv)(pktio_entry_t *entry, int index, odp_packet_t packets[], int num); + int (*recv_tmo)(pktio_entry_t *entry, int index, odp_packet_t packets[], + int num, uint64_t wait_usecs); + int (*recv_mq_tmo)(pktio_entry_t *entry[], int index[], int num_q, + odp_packet_t packets[], int num, unsigned *from, + uint64_t wait_usecs); + int (*fd_set)(pktio_entry_t *entry, int index, fd_set *readfds); int (*send)(pktio_entry_t *entry, int index, const odp_packet_t packets[], int num); uint32_t (*mtu_get)(pktio_entry_t *pktio_entry); @@ -198,6 +204,21 @@ extern const pktio_if_ops_t loopback_pktio_ops; extern const pktio_if_ops_t dpdk_pktio_ops; extern const pktio_if_ops_t * const pktio_if_ops[];
+/* Dummy function required by odp_pktin_recv_mq_tmo() */ +static inline int +sock_recv_mq_tmo_try_int_driven(const struct odp_pktin_queue_t queues[], + unsigned num_q ODP_UNUSED, + unsigned *from ODP_UNUSED, + odp_packet_t packets[] ODP_UNUSED, + int num ODP_UNUSED, + uint64_t usecs ODP_UNUSED, + int *trial_successful) { + (void)queues; + + *trial_successful = 0; + return 0; +} + #ifdef __cplusplus } #endif
commit 9e2ddd56caf943804fe94ff14714c8a9a5ce8a05 Author: Matias Elo matias.elo@nokia.com Date: Wed Mar 14 13:37:56 2018 +0200
Port 4b06ab1 "linux-gen: dpdk: simplify linking with shared libdpdk"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 80b519e4..a4bda1f6 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -16,6 +16,10 @@ AM_CPPFLAGS += -I$(top_srcdir)/platform/$(with_platform)/arch/default AM_CPPFLAGS += $(OPENSSL_CPPFLAGS) AM_CPPFLAGS += $(DPDK_CPPFLAGS)
+if ARCH_IS_X86 +AM_CFLAGS += -msse4.2 +endif + odpincludedir= $(includedir)/odp odpinclude_HEADERS = \ include/odp/visibility_begin.h \ @@ -270,6 +274,6 @@ odpapiinclude_HEADERS += $(arch_odp_headers)
__LIB__libodp_dpdk_la_LIBADD = $(ATOMIC_LIBS) __LIB__libodp_dpdk_la_LIBADD += $(OPENSSL_LIBS) -__LIB__libodp_dpdk_la_LIBADD += $(DPDK_LIBS) $(DPDK_PMDS) +__LIB__libodp_dpdk_la_LIBADD += $(DPDK_LIBS_LT) __LIB__libodp_dpdk_la_LIBADD += $(PTHREAD_LIBS) __LIB__libodp_dpdk_la_LIBADD += $(TIMER_LIBS) diff --git a/platform/linux-dpdk/libodp-dpdk.pc.in b/platform/linux-dpdk/libodp-dpdk.pc.in index 6ce052c7..06a35367 100644 --- a/platform/linux-dpdk/libodp-dpdk.pc.in +++ b/platform/linux-dpdk/libodp-dpdk.pc.in @@ -7,5 +7,5 @@ Name: libodp-dpdk Description: The ODP packet processing engine Version: @PKGCONFIG_VERSION@ Libs: -L${libdir} -lodp-dpdk @DPDK_LIBS@ -Libs.private: @OPENSSL_STATIC_LIBS@ @DPDK_PMDS@ @DPDK_LIBS@ @PTHREAD_LIBS@ @TIMER_LIBS@ -lpthread @ATOMIC_LIBS@ +Libs.private: @OPENSSL_STATIC_LIBS@ @DPDK_LIBS@ @PTHREAD_LIBS@ @TIMER_LIBS@ -lpthread @ATOMIC_LIBS@ Cflags: -I${includedir} @DPDK_CPPFLAGS@ diff --git a/platform/linux-dpdk/m4/configure.m4 b/platform/linux-dpdk/m4/configure.m4 index 66c4d320..c510a5d2 100644 --- a/platform/linux-dpdk/m4/configure.m4 +++ b/platform/linux-dpdk/m4/configure.m4 @@ -19,8 +19,6 @@ AC_ARG_WITH([dpdk-path], [DPDK_PATH="$withval"], [DPDK_PATH=system])
- -AS_CASE($host_cpu, [x86_64], [DPDK_CPPFLAGS="-msse4.2"]) AS_IF([test "x$DPDK_PATH" = "xsystem"], [DPDK_CPPFLAGS="$DPDK_CPPFLAGS -isystem/usr/include/dpdk" DPDK_LDFLAGS="" @@ -38,11 +36,8 @@ AS_IF([test "x$DPDK_PATH" = "xsystem"], # DPDK pmd drivers are not linked unless the --whole-archive option is # used. No spaces are allowed between the --whole-arhive flags. ########################################################################## - -ODP_DPDK_CHECK([$DPDK_CPPFLAGS], [$DPDK_LDFLAGS], [], - [AC_MSG_FAILURE([can't find DPDK])]) - -ODP_DPDK_PMDS([$DPDK_PMD_PATH]) +ODP_DPDK([$DPDK_PATH], [], + [AC_MSG_FAILURE([can't find DPDK])])
AC_DEFINE([ODP_PKTIO_DPDK], [1], [Define to 1 to enable DPDK packet I/O support])
commit 36aff3098872658ea1d8f6ba9420c81d5a03cb64 Author: Matias Elo matias.elo@nokia.com Date: Wed Mar 14 13:47:11 2018 +0200
Port fac80a8 "linux-gen: don't use SYSCONFDIR"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index c780b25c..80b519e4 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -12,7 +12,6 @@ AM_CPPFLAGS += -I$(top_builddir)/include AM_CPPFLAGS += -Iinclude AM_CPPFLAGS += -I$(top_srcdir)/platform/$(with_platform)/arch/$(ARCH_DIR) AM_CPPFLAGS += -I$(top_srcdir)/platform/$(with_platform)/arch/default -AM_CPPFLAGS += -DSYSCONFDIR="@sysconfdir@"
AM_CPPFLAGS += $(OPENSSL_CPPFLAGS) AM_CPPFLAGS += $(DPDK_CPPFLAGS)
commit 464e87faa56311bf65b63705a6c68a42ad85bcff Author: Matias Elo matias.elo@nokia.com Date: Wed Mar 14 09:31:27 2018 +0200
Port 2503425 "linux-generic: remove camelcase from icmp protocol"
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index 908ee924..d23b3fd3 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -1490,10 +1490,10 @@ int packet_parse_common_l3_l4(packet_parser_t *prs, const uint8_t *parseptr,
/* Parse Layer 4 headers */ switch (ip_proto) { - case _ODP_IPPROTO_ICMPv4: + case _ODP_IPPROTO_ICMPV4: /* Fall through */
- case _ODP_IPPROTO_ICMPv6: + case _ODP_IPPROTO_ICMPV6: prs->input_flags.icmp = 1; break;
commit a1d2290ff7aa102df3f49f3f0197a9806cc432f0 Merge: 452b0aab 14a338c7 Author: Matias Elo matias.elo@nokia.com Date: Fri Mar 16 19:29:20 2018 +0200
Merge tag 'v1.18.0.0' of https://github.com/Linaro/odp into odp-dpdk
== OpenDataPlane (1.18.0.0) === New Features ODP v1.18.0.0 is Tiger Moth Release Candidate 2 (RC 2). It completes the new APIs that are part of the Tiger Moth Long Term Support (LTS) release of ODP as well as various performance refinements and bug fixes. As of RC2 the ODP API is now frozen for the Tiger Moth development series.
==== APIs The following new and changed APIs are included in this release:
===== Addition of Shared Memory (SHM) Initialization Parameters The `odp_init_t` struct used as the argument to the `odp_init_global()` API has been expanded to include a `max_memory` field that specifies the maximum amount of shared memory (shm) that the application will use. This is to better enable ODP implementations to optimize their use of shared memory in support of the application. If left as (or defaulted) to 0, the implementation may choose a default limit for the application.
===== Crypto Changes A number of crypto refinements are included in this release:
* The single initialization vector (`iv`) in the `odp_crypto_session_param_t` is replaced by a separate `cipher_iv` and `auth_iv` fields.
* The single initialization vector (`override_iv_ptr`) in the `odp_crypto_op_param_t` is replaced by a separate `cipher_iv_ptr` and `auth_iv_ptr` fields.
* The special nature of GCM and GMAC authenticated encryption modes is clarified in that these ciphers always combine ciphering with authentication and hence require both to be specified when used. This is simply a documentation change as this requirement has always existed.
* Enumerations for AES_CCM (`ODP_CIPHER_ALG_AES_CCM` and `ODP_AUTH_ALG_AES_CCM`) authenticated encryption modes are added.
* Enumeration for the AES_CMAC authenticated encryption mode (`ODP_AUTH_ALG_AES_CMAC`) is added.
* Enumerations for the ChaCha20-Poly1305 (`ODP_CIPHER_ALG_CHACHA20_POLY1305` and `ODP_AUTH_ALG_CHACHA20_POLY1305`) authenticated encryption modes are added.
* Enumeration for the SHA-384 authentication algorithm (`ODP_AUTH_ALG_SHA384_HMAC`) is added.
* Enumeration for the AES-XCBC-MAC authentication algorithm (`ODP_AUTH_ALG_AES_XCBC_MAC`) is added.
===== Lock-free and block-free queues The `odp_nonblocking_t` enums introduced in ODP v1.17.0.0 are now returned as separate `odp_queue_capability()` limits for plain and scheduled queues. The ODP reference implementations now support `ODP_NONBLOCKING_LF` queues.
===== User pointer initialized to NULL The specification for `odp_packet_user_ptr()` is clarified that unless overridden by `odp_packet_user_ptr_set()` the value of NULL will be returned.
===== Removal of `ODP_PKTIN_WAIT` option The `ODP_PKTIN_WAIT` option on `odp_pktin_recv_tmo()` and `odp_pktin_recv_mq_tmo()` is removed. Timeout options now consist of `ODP_PKTIN_NO_WAIT` and a user-supplied timeout value. Since this timeout value can be specified to be arbitrarily long, there is no need for an indefinite wait capability as provision of such a capability proved problematic for some ODP implementations.
===== Addition of packet protocol APIs The APIs `odp_packet_l2_type()`, `odp_packet_l3_type()`, and `odp_packet_l4_type()` are added to return the Layer 2, 3, and 4 protocols, respectively, associated with packets that have been parsed to the corresponding layer. If the packet was not parsed to the associated layer these return `ODP_PROTO_Ln_TYPE_NONE`.
===== Packet addressability improvements The documentation of `odp_packet_data()` is clarified to indicated when this shortcut may be used safely and a new API, `odp_packet_data_seg_len()`, is added that returns both the address of the start of packet data as well as the number of bytes addressable from that pointer.
===== Asynchronous ordered locks Two new APIs, `odp_schedule_order_lock_start()` and `odp_schedule_order_lock_wait()` are added to allow for asynchronous ordered lock acquisition in addition to the existing synchronous `odp_schedule_order_lock()` API. In some implementations and applications, there may be a performance advantage to indicating the intent to acquire an ordered lock to allow the implementation to prepare for this while the application continues parallel processing and then enter the critical section protected by the ordered lock at a later time. In this case ordered lock protection is not guaranteed until the `odp_schedule_order_lock_wait()` call returns.
===== IPsec API miscellaneous changes and enhancements IPsec support is further enhanced with the following:
* The `odp_ipsec_ipv4_param_t` and `odp_ipsec_ipv6_param_t` structures are added to formalize the specification of IPv4 and IPv6 options in the `odp_ipsec_tunnel_param_t` configuration.
* The `mode` field of the `odp_ipsec_out_t` is renamed to `frag_mode` for better clarity. In addition the `flag.frag-mode` option bit in the `odp_ipsec_out_opt_t` struct is defined to hold per-operation options for the `odp_ipsec_out_param_t` struct.
* The `odp_ipsec_capability_t` struct returned by the `odp_ipsec_capability()` API is expanded to include the `odp_proto_chksums_t` available on inbound IPsec traffic. This indicates whether and how inbound packet checksums may be validated for decrypted IPsec traffic.
===== IPsec Traffic Flow Confidentiality (TFC) support Traffic Flow Confidentiality (TFC) allows applications to defend against traffic analysis attacks by inserting dummy packets as well as add pad bytes to packets traversing IPsec flows.
Dummy packets have an L3 type of `ODP_PROTO_L3_TYPE_NONE` in tunnel mode and `ODP_PROTO_L4_TYPE_NO_NEXT` in transport mode. Padded packets have additional data suffixed to them that extends beyond the L3 or L4 packet lengths.
For RX processing, inline dummy packets may or may not be dropped from the inbound packet stream. For lookaside processing they are always visible. For TX processing, the `odp_ipsec_out_opt_t` struct specifies the `tfc_pad` bit if the packet is to be padded or the `tfc_dummy` bit if a dummy packet is to be inserted. The dummy packet length is specified by the `tfc_pad_len` option.
=== Streamlined ABI Support ABI support has been reorganized to make it more modular and to omit headers and related ABI files when configure to disable this support.
=== Reference Implementation Fixes and Improvements The ODP Reference Implementation corporates a number of improvements that result in better code organization as well as improved processing efficiency.
==== Pktio null device support In the LNG Reference Implemenations of ODP, the `odp_pktio_open()` API may now specify devices of class `null` to indicate the PktIO is treated as a dummy device. Null devices behave just like Linux `/dev/null` in that they never receive packets and simply discard any packets sent to them.
Note that not all ODP implementations may support this device class. The specific device classes supported by each ODP implementation may vary and are listed in their own documentation.
==== Runtime Scheduler Selection The ODP Reference Implementation offers both a default and a number of alternate scheduler implementations. Previously these were selectable only at `configure` time. They can now be dynamically selected at runtime by the use of the `ODP_SCHEDULER` environment variable. If this environment variable is not set, the default (basic) scheduler is used. It can be set to select alternate schedulers:
* `ODP_SCHEDULER=basic` Explicitly selects the default scheduler * `ODP_SCHEDULER=sp` Selects the strict priority scheduler * `ODP_SCHEDULER=iquery` Selects the iQuery scheduler * `ODP_SCHEDULER=scalable` Selects the scalable scheduler
==== Streamlined Queue Implementation The ODP Reference Implementation now uses a ring model for implementing ODP queues. This results in greatly improved efficiency for queue operations. The default maximum queue depth used is 4096 elements, and this information is returned via the `odp_queue_capability()` API.
==== Validation Test Simplification The tests that are part of the validation test suite are reorganized and simplified by having a single test file for each API rather than separate CUnit driver files and test files.
=== Test/Example Improvements
==== Crypto Test Improvements The `crypto` validation test suite now offers better information on which crypto algorithms were skipped because they are not available. Testing of full HMAC lengths is now added
==== ODP Generator Improvements The `odp_generator` example now offers configurable RX burst size, selectable packet handling (Direct I/O or Scheduled I/O), as well as streamlined packet processing.
==== `l2fwd` Example Improvements The `l2fwd` example offers improved efficiency via better cache usage.
=== Bug Fixes
==== https://bugs.linaro.org/show_bug.cgi?id=3517%5BBug 3517] timer test might fail
==== https://bugs.linaro.org/show_bug.cgi?id=3572%5BBug 3572] time_main test fails if run under heavy load
==== https://bugs.linaro.org/show_bug.cgi?id=3576%5BBug 3576] classification: CoS queues in invalid table index
==== https://bugs.linaro.org/show_bug.cgi?id=3577%5BBug 3577] classification: multiqueue CoS will always fail
==== https://bugs.linaro.org/show_bug.cgi?id=3578%5BBug 3578] classification: requested number of queues is ignored in multiqueue CoS
==== https://bugs.linaro.org/show_bug.cgi?id=3579%5BBug 3579] cls: capability to return max hash queues
==== https://bugs.linaro.org/show_bug.cgi?id=3581%5BBug 3581] classification: invalid memory access in RSS hash
==== https://bugs.linaro.org/show_bug.cgi?id=3582%5BBug 3582] classification: incorrect IPv6 RSS hash
==== https://bugs.linaro.org/show_bug.cgi?id=3594%5BBug 3594] IPsec SA may be used before fully initialized
==== https://bugs.linaro.org/show_bug.cgi?id=3595%5BBug 3595] IPsec SA lookup may leave extra SAs locked
==== https://bugs.linaro.org/show_bug.cgi?id=3597%5BBug 3597] new generator test assumes that null:0 pktio is always present
==== https://bugs.linaro.org/show_bug.cgi?id=3613%5BBug 3613] packet_main test can fail
==== https://bugs.linaro.org/show_bug.cgi?id=3618%5BBug 3618] DPDK pktio stops receiving packets if all configured RX queues are not used
==== https://bugs.linaro.org/show_bug.cgi?id=3628%5BBug 3628] Another timer_main failure
==== https://bugs.linaro.org/show_bug.cgi?id=3632%5BBug 3632] Creating a pool with total size over 4.29GB (UINT32_MAX) leads to undefined behavior
=== Known Issues
==== https://bugs.linaro.org/show_bug.cgi?id=2988%5BBug 2988] ODP exposes symbols outside of odp*/_odp* namespace
==== https://bugs.linaro.org/show_bug.cgi?id=3611%5BBug 3611] ODP linux-generic fails on AArch64 in non-ABI-compat mode
Signed-off-by: Matias Elo matias.elo@nokia.com
# Conflicts: # .travis.yml # configure.ac # example/Makefile.inc # helper/Makefile.am # helper/test/Makefile.am # test/Makefile.inc # test/validation/api/Makefile.inc
diff --cc configure.ac index 42c20403,f9e7f73b..1c9e2497 --- a/configure.ac +++ b/configure.ac @@@ -162,6 -233,32 +233,22 @@@ AC_ARG_WITH([platform]
AC_SUBST([with_platform])
-########################################################################## -# Run platform specific checks and settings -########################################################################## -AS_IF([test "${with_platform}" = "linux-generic"], - [m4_include([./platform/linux-generic/m4/configure.m4])], - [AC_MSG_ERROR([UNSUPPORTED PLATFORM: ${with_platform}])]) - -AC_DEFINE_UNQUOTED([IMPLEMENTATION_NAME], ["$IMPLEMENTATION_NAME"], - [Define to the name of the implementation]) - + ########################################################################## + # Build examples/tests dynamically + ########################################################################## + AC_ARG_ENABLE([static-applications], + [AS_HELP_STRING([--disable-static-applications], + [disable static linking of examples and tests] + [ with ODP])], [], + [enable_static_applications=yes]) + AM_CONDITIONAL([STATIC_APPS], [test "x$enable_static_applications" != "xno"]) + if test "x$DPDK_SHARED" = "xyes" -a "x$enable_static_applications" != "xno" ; + then + AC_MSG_WARN([Static linking of examples and tests might fail when ] + [shared DPDK is detected. If build fails please retry with ] + [--disable-static-applications]) + fi + ########################################################################## # Include m4 files ########################################################################## diff --cc example/Makefile.inc index 34595a7a,3c8060da..0bebada9 --- a/example/Makefile.inc +++ b/example/Makefile.inc @@@ -1,9 -1,14 +1,16 @@@ +include $(top_srcdir)/platform/@with_platform@/Makefile.inc + + include $(top_srcdir)/Makefile.inc + TESTS_ENVIRONMENT = EXEEXT=${EXEEXT}
- LIB = $(top_builddir)/lib - LDADD = $(LIB)/libodp-dpdk.la $(LIB)/libodphelper.la $(DPDK_PMDS) -LDADD = $(LIB)/libodp-linux.la $(LIB)/libodphelper.la ++LDADD = $(LIB)/libodp-dpdk.la $(LIB)/libodphelper.la + + # Do not link to DPDK twice in case of dynamic linking with ODP + if STATIC_APPS + LDADD += $(DPDK_LIBS_LT) + endif + AM_CFLAGS = \ -I$(srcdir) \ -I$(top_srcdir)/example \ diff --cc helper/Makefile.am index 5d030731,d1b0359c..364e7ce5 --- a/helper/Makefile.am +++ b/helper/Makefile.am @@@ -1,5 -1,5 +1,7 @@@ +include $(top_srcdir)/platform/@with_platform@/Makefile.inc + + include $(top_srcdir)/Makefile.inc + pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = libodphelper.pc
@@@ -62,4 -57,6 +59,6 @@@ __LIB__libodphelper_la_SOURCES += linux/thread.c endif
-__LIB__libodphelper_la_LIBADD = $(PTHREAD_LIBS) $(LIB)/libodp-linux.la ++__LIB__libodphelper_la_LIBADD = $(PTHREAD_LIBS) $(LIB)/libodp-dpdk.la + lib_LTLIBRARIES = $(LIB)/libodphelper.la diff --cc platform/Makefile.inc index bf5c4fa3,bb23a4cb..1d24f263 --- a/platform/Makefile.inc +++ b/platform/Makefile.inc @@@ -1,10 -1,10 +1,10 @@@ - LIB = $(top_builddir)/lib + include $(top_srcdir)/Makefile.inc
pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = libodp-linux.pc +pkgconfig_DATA = libodp-dpdk.pc
VPATH = $(srcdir) $(builddir) -lib_LTLIBRARIES = $(LIB)/libodp-linux.la +lib_LTLIBRARIES = $(LIB)/libodp-dpdk.la
AM_LDFLAGS = -version-number '$(ODP_LIBSO_VERSION)'
diff --cc test/Makefile.inc index 8d22aecf,55a493a8..43262a8c --- a/test/Makefile.inc +++ b/test/Makefile.inc @@@ -1,6 -1,12 +1,14 @@@ +include $(top_srcdir)/platform/@with_platform@/Makefile.inc + - LIB = $(top_builddir)/lib + include $(top_srcdir)/Makefile.inc + + COMMON_DIR = $(top_builddir)/test/common + -LIBODP = $(LIB)/libodphelper.la $(LIB)/libodp-linux.la ++LIBODP = $(LIB)/libodphelper.la $(LIB)/libodp-dpdk.la + + LIBCUNIT_COMMON = $(COMMON_DIR)/libcunit_common.la + LIBCPUMASK_COMMON = $(COMMON_DIR)/libcpumask_common.la + LIBTHRMASK_COMMON = $(COMMON_DIR)/libthrmask_common.la
#in the following line, the libs using the symbols should come before #the libs containing them! The includer is given a chance to add things
commit 452b0aab9fd6315fa3d13cd8ffe1467e34ae6951 Author: Josep Puigdemont josep.puigdemont@linaro.org Date: Thu Mar 15 10:54:39 2018 +0100
README.DPDK: updated
Reference Linaro's github repository instead of the one hosted at Linaro.
Use dpdk-stable git repo for DPDK, simplify cloning instructions, and clarify when to build DPDK with -fPIC flag.
Remove section referencing devbuild.sh, as check-odp it is not maintained anymore.
Signed-off-by: Josep Puigdemont josep.puigdemont@linaro.org Reviewed-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/README b/platform/linux-dpdk/README index 1873eb13..927755f7 100644 --- a/platform/linux-dpdk/README +++ b/platform/linux-dpdk/README @@ -37,12 +37,8 @@ Prerequisites and considerations:
Fetching the DPDK code: ---------------------- - git clone http://dpdk.org/git/dpdk ./<dpdk-dir> - Right now odp-dpdk only supports DPDK v17.08: - cd <dpdk-dir> - git tag -l -- will list all the tags available - git checkout -b 17.08 tags/v17.08 + git clone http://dpdk.org/git/dpdk-stable --branch 17.08 --depth 1 ./<dpdk-dir>
Compile DPDK: ------------ @@ -67,7 +63,8 @@ Enable openssl crypto pmd to use openssl with odp-dpdk: Now return to parent directory and build DPDK: cd ..
-The last step depends on if shared libraries are required. +The last step depends on whether ODP shared libraries will be built with this +deployment of DPDK: SHARED libraries: make install T=x86_64-native-linuxapp-gcc DESTDIR=./install EXTRA_CFLAGS="-fPIC"
@@ -86,8 +83,8 @@ path with the --with-dpdk-path option. cd <odp-dir> ./bootstrap
-The following step depends on if shared libraries are required. -SHARED libraries: +The following step depends on whether ODP shared libraries are to be built. +SHARED libraries (requires building DPDK with -fPIC, see above): ./configure --with-dpdk-path=<dpdk-dir>/x86_64-native-linuxapp-gcc
STATIC libraries (better performance): @@ -235,38 +232,7 @@ CONFIG_RTE_LIBRTE_PMD_PCAP=y Finally give l2fwd fake devices: ./l2fwd -c '0xf' -n 4 --vdev "eth_pcap0,iface=veth2-1" --vdev="eth_pcap1,iface=veth2-3" -- -p 3
-7. Build with devbuild.sh -================================================= - -scripts/devbuild.sh contains an example script aimed for developers. It uses -the CI scripts from https://git.linaro.org/lng/check-odp.git to build DPDK and -ODP-DPDK. It can also run "make check" or individual unit tests, but you need to -install CUnit as a prerequisite. -If you have build problems, try to run it and see if it works. An example: - export REPOS=${PWD} - git clone https://git.linaro.org/lng/check-odp.git - git clone https://git.linaro.org/lng/odp-dpdk.git - odp-dpdk/scripts/devbuild.sh dpdk - odp-dpdk/scripts/devbuild.sh odp - odp-dpdk/scripts/devbuild.sh odp-check - -It can also run unit tests individually, optionally with gdb. If the first -parameter is not dpdk, odp or odp-check, it tries to run it in -"$CHECK_ODP_DIR/new-build/bin/", with the help of the wrapper script. That's -where example programs are, but you can also use it to run the unit tests, by -traversing the directories: - - odp-dpdk/scripts/devbuild.sh \ - ../../../odp-dpdk/test/common_plat/validation/api/atomic/atomic_main - odp-dpdk/scripts/devbuild.sh \ - ../../../odp-dpdk/test/linux-dpdk/validation/api/pktio/pktio_run.sh - -The wrapper will prepend the executable with ODP_GDB env. variable, or pass it -down if its name ends ".sh". With prepending your command line with ODP_GDB=gdb -you can run the tests in GDB. If the unit test is wrapped into yet another -shell script (like pktio), it has to do the prepending itself! - -8. Upgrading ODP-DPDK to newer ODP API level +7. Upgrading ODP-DPDK to newer ODP API level =================================================
This repository is based on odp.git, it also retains the history of that. There @@ -275,7 +241,7 @@ changes are in platform/linux-dpdk. That directory's Makefile.am builds our code and the required parts from platform/linux-generic. This allows us to easily pull the necessary changes from odp.git with git:
-git remote add odp_base https://git.linaro.org/lng/odp.git +git remote add odp_base https://github.com/Linaro/odp.git git pull odp_base master
This will result in a merge commit, and possibly some conflict resolving if @@ -291,7 +257,7 @@ scripts/git-transplant.py platform/linux-generic/ platform/linux-dpdk/ \ It prints the list of prospective patches to be ported. See its comments about what it does.
-9. Building odp-dpdk with dpdk crypto PMD's +8. Building odp-dpdk with dpdk crypto PMD's ======================================================
Refer to dpdk crypto documentation for detailed building of crypto PMD's:
commit e194b1dd6ad06b1804ba955fd2ffe4400cae5d36 Author: Bogdan Pricope bogdan.pricope@linaro.org Date: Thu Mar 15 11:23:30 2018 +0200
linux-dpdk: pktio: dpdk: move tx queue flags calculation to new function
Restructure dpdk pktio start function to improve code clarity.
Signed-off-by: Bogdan Pricope bogdan.pricope@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_packet_dpdk.c b/platform/linux-dpdk/odp_packet_dpdk.c index f1d74366..787ffa47 100644 --- a/platform/linux-dpdk/odp_packet_dpdk.c +++ b/platform/linux-dpdk/odp_packet_dpdk.c @@ -324,6 +324,41 @@ static int close_pkt_dpdk(pktio_entry_t *pktio_entry ODP_UNUSED) return 0; }
+static odp_bool_t tx_checksum(pktio_entry_t *pktio_entry, uint32_t *txq_flags) +{ + unsigned ip_ena = pktio_entry->s.config.pktout.bit.ipv4_chksum_ena; + unsigned udp_ena = pktio_entry->s.config.pktout.bit.udp_chksum_ena; + unsigned tcp_ena = pktio_entry->s.config.pktout.bit.tcp_chksum_ena; + unsigned sctp_ena = pktio_entry->s.config.pktout.bit.sctp_chksum_ena; + + *txq_flags = 0; + + if (!(ip_ena | udp_ena | tcp_ena | sctp_ena)) + return false; + + if (udp_ena == 0) + *txq_flags |= ETH_TXQ_FLAGS_NOXSUMUDP; + + if (tcp_ena == 0) + *txq_flags |= ETH_TXQ_FLAGS_NOXSUMTCP; + + if (sctp_ena == 0) + *txq_flags |= ETH_TXQ_FLAGS_NOXSUMSCTP; + + /* When IP checksum is requested alone, enable UDP + * offload. DPDK IP checksum offload is enabled only + * when one of the L4 checksum offloads is requested.*/ + if ((udp_ena == 0) && (tcp_ena == 0) && (sctp_ena == 0)) + *txq_flags = ETH_TXQ_FLAGS_NOXSUMTCP | ETH_TXQ_FLAGS_NOXSUMSCTP; + + *txq_flags |= ETH_TXQ_FLAGS_NOMULTSEGS | + ETH_TXQ_FLAGS_NOREFCOUNT | + ETH_TXQ_FLAGS_NOMULTMEMP | + ETH_TXQ_FLAGS_NOVLANOFFL; + + return true; +} + static int start_pkt_dpdk(pktio_entry_t *pktio_entry) { int ret, i; @@ -339,6 +374,8 @@ static int start_pkt_dpdk(pktio_entry_t *pktio_entry) uint16_t hw_ip_checksum = 0; struct rte_eth_dev_info dev_info; struct rte_eth_rxconf *rxconf = NULL; + struct rte_eth_txconf *txconf = NULL; + uint32_t txq_flags = 0;
/* DPDK doesn't support nb_rx_q/nb_tx_q being 0 */ if (!pktio_entry->s.num_in_queue) @@ -410,48 +447,18 @@ static int start_pkt_dpdk(pktio_entry_t *pktio_entry) } }
+ /* init TX queues */ + txconf = NULL; pktio_entry->s.chksum_insert_ena = 0;
- /* init one TX queue on each port */ - for (i = 0; i < nbtxq; i++) { - const struct rte_eth_txconf *txconf = NULL; - int ip_ena = pktio_entry->s.config.pktout.bit.ipv4_chksum_ena; - int udp_ena = pktio_entry->s.config.pktout.bit.udp_chksum_ena; - int tcp_ena = pktio_entry->s.config.pktout.bit.tcp_chksum_ena; - int sctp_ena = pktio_entry->s.config.pktout.bit.sctp_chksum_ena; - int chksum_ena = ip_ena | udp_ena | tcp_ena | sctp_ena; - - if (chksum_ena) { - /* Enable UDP, TCP, STCP checksum offload */ - uint32_t txq_flags = 0; - - if (udp_ena == 0) - txq_flags |= ETH_TXQ_FLAGS_NOXSUMUDP; - - if (tcp_ena == 0) - txq_flags |= ETH_TXQ_FLAGS_NOXSUMTCP; - - if (sctp_ena == 0) - txq_flags |= ETH_TXQ_FLAGS_NOXSUMSCTP; - - /* When IP checksum is requested alone, enable UDP - * offload. DPDK IP checksum offload is enabled only - * when one of the L4 checksum offloads is requested.*/ - if ((udp_ena == 0) && (tcp_ena == 0) && (sctp_ena == 0)) - txq_flags = ETH_TXQ_FLAGS_NOXSUMTCP | - ETH_TXQ_FLAGS_NOXSUMSCTP; - - txq_flags |= ETH_TXQ_FLAGS_NOMULTSEGS | - ETH_TXQ_FLAGS_NOREFCOUNT | - ETH_TXQ_FLAGS_NOMULTMEMP | - ETH_TXQ_FLAGS_NOVLANOFFL; - - rte_eth_dev_info_get(port_id, &dev_info); - dev_info.default_txconf.txq_flags = txq_flags; - txconf = &dev_info.default_txconf; - pktio_entry->s.chksum_insert_ena = 1; - } + if (tx_checksum(pktio_entry, &txq_flags)) { + txconf = &dev_info.default_txconf; + txconf->txq_flags = txq_flags; + pktio_entry->s.chksum_insert_ena = 1; + } + /* else - use the default tx queue settings*/
+ for (i = 0; i < nbtxq; i++) { ret = rte_eth_tx_queue_setup(port_id, i, nb_txd, socket_id, txconf); if (ret < 0) {
commit d61b347dabb3e1ec6bed53506eef41cf572b3a91 Author: Bogdan Pricope bogdan.pricope@linaro.org Date: Thu Mar 15 10:14:31 2018 +0200
linux-dpdk: pktio: dpdk: conf NICs to drop packets if no descriptors
Configure DPDK NIC RX rings to automatically drop packets if no free descriptors are available. Without this option being set, some NICs (e.g. 82599, X540) will stop receiving packets from all RX queues if any of the RX queues is not emptied fast enough.
Signed-off-by: Bogdan Pricope bogdan.pricope@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_packet_dpdk.c b/platform/linux-dpdk/odp_packet_dpdk.c index 2c241f91..f1d74366 100644 --- a/platform/linux-dpdk/odp_packet_dpdk.c +++ b/platform/linux-dpdk/odp_packet_dpdk.c @@ -337,6 +337,8 @@ static int start_pkt_dpdk(pktio_entry_t *pktio_entry) uint16_t nb_txd = RTE_TEST_TX_DESC_DEFAULT; struct rte_eth_rss_conf rss_conf; uint16_t hw_ip_checksum = 0; + struct rte_eth_dev_info dev_info; + struct rte_eth_rxconf *rxconf = NULL;
/* DPDK doesn't support nb_rx_q/nb_tx_q being 0 */ if (!pktio_entry->s.num_in_queue) @@ -395,10 +397,13 @@ static int start_pkt_dpdk(pktio_entry_t *pktio_entry) ODP_DBG("Descriptors scaled down. RX: %u TX: %u pool: %u\n", nb_rxd, nb_txd, pool->params.pkt.num); } - /* init one RX queue on each port */ + /* init RX queues */ + rte_eth_dev_info_get(port_id, &dev_info); + rxconf = &dev_info.default_rxconf; + rxconf->rx_drop_en = 1; for (i = 0; i < nbrxq; i++) { ret = rte_eth_rx_queue_setup(port_id, i, nb_rxd, socket_id, - NULL, pool->rte_mempool); + rxconf, pool->rte_mempool); if (ret < 0) { ODP_ERR("rxq:err=%d, port=%" PRIu16 "\n", ret, port_id); return -1; @@ -409,7 +414,6 @@ static int start_pkt_dpdk(pktio_entry_t *pktio_entry)
/* init one TX queue on each port */ for (i = 0; i < nbtxq; i++) { - struct rte_eth_dev_info dev_info; const struct rte_eth_txconf *txconf = NULL; int ip_ena = pktio_entry->s.config.pktout.bit.ipv4_chksum_ena; int udp_ena = pktio_entry->s.config.pktout.bit.udp_chksum_ena;
commit ae8761485c8e3eb8d02d722021fe969bb8c4cf15 Author: Matias Elo matias.elo@nokia.com Date: Wed Feb 28 14:01:02 2018 +0200
README.DPDK: update supported dpdk version
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/README b/platform/linux-dpdk/README index 6e631ab4..1873eb13 100644 --- a/platform/linux-dpdk/README +++ b/platform/linux-dpdk/README @@ -29,7 +29,7 @@ Prerequisites and considerations: (4.4.0 kernel). - DPDK only works on a selected range of network cards. The list of known and supported devices can be found in the DPDK documentation: - http://dpdk.org/doc/guides-17.02/nics/index.html + http://dpdk.org/doc/guides-17.08/nics/index.html
2. Preparing DPDK @@ -39,10 +39,10 @@ Fetching the DPDK code: ---------------------- git clone http://dpdk.org/git/dpdk ./<dpdk-dir>
-Right now odp-dpdk only supports DPDK v17.02: +Right now odp-dpdk only supports DPDK v17.08: cd <dpdk-dir> git tag -l -- will list all the tags available - git checkout -b 17.02 tags/v17.02 + git checkout -b 17.08 tags/v17.08
Compile DPDK: ------------
commit 8b6012a870a8c1de76ea112df232852c74b02636 Author: Bogdan Pricope bogdan.pricope@linaro.org Date: Fri Mar 2 14:18:51 2018 +0200
linux-dpdk: pktio: dpdk: add csum support on TX side
Get checksum capabilities on TX side and set dpdk flags per packet.
Signed-off-by: Bogdan Pricope bogdan.pricope@linaro.org Reviewed-by: Josep Puigdemont josep.puigdemont@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp_packet_dpdk.h b/platform/linux-dpdk/include/odp_packet_dpdk.h index 495d5e6f..4e9a144d 100644 --- a/platform/linux-dpdk/include/odp_packet_dpdk.h +++ b/platform/linux-dpdk/include/odp_packet_dpdk.h @@ -39,6 +39,10 @@ #include <rte_random.h> #include <rte_ether.h> #include <rte_ethdev.h> +#include <rte_ip.h> +#include <rte_ip_frag.h> +#include <rte_udp.h> +#include <rte_tcp.h> #include <rte_hash.h> #include <rte_jhash.h> #include <rte_hash_crc.h> diff --git a/platform/linux-dpdk/odp_packet_dpdk.c b/platform/linux-dpdk/odp_packet_dpdk.c index f6e95204..2c241f91 100644 --- a/platform/linux-dpdk/odp_packet_dpdk.c +++ b/platform/linux-dpdk/odp_packet_dpdk.c @@ -254,6 +254,21 @@ static int dpdk_init_capability(pktio_entry_t *pktio_entry, if (capa->config.pktin.bit.tcp_chksum) capa->config.pktin.bit.drop_tcp_err = 1;
+ /* CSUM TX capabilities*/ + capa->config.pktout.bit.ipv4_chksum = + (dev_info->tx_offload_capa & DEV_TX_OFFLOAD_IPV4_CKSUM) ? 1 : 0; + capa->config.pktout.bit.udp_chksum = + (dev_info->tx_offload_capa & DEV_TX_OFFLOAD_UDP_CKSUM) ? 1 : 0; + capa->config.pktout.bit.tcp_chksum = + (dev_info->tx_offload_capa & DEV_TX_OFFLOAD_TCP_CKSUM) ? 1 : 0; + + capa->config.pktout.bit.ipv4_chksum_ena = + capa->config.pktout.bit.ipv4_chksum; + capa->config.pktout.bit.udp_chksum_ena = + capa->config.pktout.bit.udp_chksum; + capa->config.pktout.bit.tcp_chksum_ena = + capa->config.pktout.bit.tcp_chksum; + return 0; }
@@ -390,10 +405,51 @@ static int start_pkt_dpdk(pktio_entry_t *pktio_entry) } }
+ pktio_entry->s.chksum_insert_ena = 0; + /* init one TX queue on each port */ for (i = 0; i < nbtxq; i++) { + struct rte_eth_dev_info dev_info; + const struct rte_eth_txconf *txconf = NULL; + int ip_ena = pktio_entry->s.config.pktout.bit.ipv4_chksum_ena; + int udp_ena = pktio_entry->s.config.pktout.bit.udp_chksum_ena; + int tcp_ena = pktio_entry->s.config.pktout.bit.tcp_chksum_ena; + int sctp_ena = pktio_entry->s.config.pktout.bit.sctp_chksum_ena; + int chksum_ena = ip_ena | udp_ena | tcp_ena | sctp_ena; + + if (chksum_ena) { + /* Enable UDP, TCP, STCP checksum offload */ + uint32_t txq_flags = 0; + + if (udp_ena == 0) + txq_flags |= ETH_TXQ_FLAGS_NOXSUMUDP; + + if (tcp_ena == 0) + txq_flags |= ETH_TXQ_FLAGS_NOXSUMTCP; + + if (sctp_ena == 0) + txq_flags |= ETH_TXQ_FLAGS_NOXSUMSCTP; + + /* When IP checksum is requested alone, enable UDP + * offload. DPDK IP checksum offload is enabled only + * when one of the L4 checksum offloads is requested.*/ + if ((udp_ena == 0) && (tcp_ena == 0) && (sctp_ena == 0)) + txq_flags = ETH_TXQ_FLAGS_NOXSUMTCP | + ETH_TXQ_FLAGS_NOXSUMSCTP; + + txq_flags |= ETH_TXQ_FLAGS_NOMULTSEGS | + ETH_TXQ_FLAGS_NOREFCOUNT | + ETH_TXQ_FLAGS_NOMULTMEMP | + ETH_TXQ_FLAGS_NOVLANOFFL; + + rte_eth_dev_info_get(port_id, &dev_info); + dev_info.default_txconf.txq_flags = txq_flags; + txconf = &dev_info.default_txconf; + pktio_entry->s.chksum_insert_ena = 1; + } + ret = rte_eth_tx_queue_setup(port_id, i, nb_txd, socket_id, - NULL); + txconf); if (ret < 0) { ODP_ERR("txq:err=%d, port=%" PRIu16 "\n", ret, port_id); return -1; @@ -659,10 +715,123 @@ static int recv_pkt_dpdk(pktio_entry_t *pktio_entry, int index, return nb_rx; }
+static inline int check_proto(void *l3_hdr, odp_bool_t *l3_proto_v4, + uint8_t *l4_proto) +{ + uint8_t l3_proto_ver = _ODP_IPV4HDR_VER(*(uint8_t *)l3_hdr); + + if (l3_proto_ver == _ODP_IPV4) { + struct ipv4_hdr *ip = (struct ipv4_hdr *)l3_hdr; + + *l3_proto_v4 = 1; + if (!rte_ipv4_frag_pkt_is_fragmented(ip)) + *l4_proto = ip->next_proto_id; + else + *l4_proto = 0; + + return 0; + } else if (l3_proto_ver == _ODP_IPV6) { + struct ipv6_hdr *ipv6 = (struct ipv6_hdr *)l3_hdr; + + *l3_proto_v4 = 0; + *l4_proto = ipv6->proto; + return 0; + } + + return -1; +} + +static inline uint16_t phdr_csum(odp_bool_t ipv4, void *l3_hdr, + uint64_t ol_flags) +{ + if (ipv4) + return rte_ipv4_phdr_cksum(l3_hdr, ol_flags); + else /*ipv6*/ + return rte_ipv6_phdr_cksum(l3_hdr, ol_flags); +} + +#define OL_TX_CHKSUM_PKT(_cfg, _capa, _proto, _ovr_set, _ovr) \ + (_capa && _proto && (_ovr_set ? _ovr : _cfg)) + +static inline void pkt_set_ol_tx(odp_pktout_config_opt_t *pktout_cfg, + odp_pktout_config_opt_t *pktout_capa, + odp_packet_hdr_t *pkt_hdr, + struct rte_mbuf *mbuf, + char *mbuf_data) +{ + void *l3_hdr, *l4_hdr; + uint8_t l4_proto; + odp_bool_t l3_proto_v4; + odp_bool_t ipv4_chksum_pkt, udp_chksum_pkt, tcp_chksum_pkt; + packet_parser_t *pkt_p = &pkt_hdr->p; + + if (pkt_p->l3_offset == ODP_PACKET_OFFSET_INVALID) + return; + + l3_hdr = (void *)(mbuf_data + pkt_p->l3_offset); + + if (check_proto(l3_hdr, &l3_proto_v4, &l4_proto)) + return; + + ipv4_chksum_pkt = OL_TX_CHKSUM_PKT(pktout_cfg->bit.ipv4_chksum, + pktout_capa->bit.ipv4_chksum, + l3_proto_v4, + pkt_p->output_flags.l3_chksum_set, + pkt_p->output_flags.l3_chksum); + udp_chksum_pkt = OL_TX_CHKSUM_PKT(pktout_cfg->bit.udp_chksum, + pktout_capa->bit.udp_chksum, + (l4_proto == _ODP_IPPROTO_UDP), + pkt_p->output_flags.l4_chksum_set, + pkt_p->output_flags.l4_chksum); + tcp_chksum_pkt = OL_TX_CHKSUM_PKT(pktout_cfg->bit.tcp_chksum, + pktout_capa->bit.tcp_chksum, + (l4_proto == _ODP_IPPROTO_TCP), + pkt_p->output_flags.l4_chksum_set, + pkt_p->output_flags.l4_chksum); + + if (!ipv4_chksum_pkt && !udp_chksum_pkt && !tcp_chksum_pkt) + return; + + if (pkt_p->l4_offset == ODP_PACKET_OFFSET_INVALID) + return; + + mbuf->l2_len = pkt_p->l3_offset - pkt_p->l2_offset; + mbuf->l3_len = pkt_p->l4_offset - pkt_p->l3_offset; + + if (l3_proto_v4) + mbuf->ol_flags = PKT_TX_IPV4; + else + mbuf->ol_flags = PKT_TX_IPV6; + + if (ipv4_chksum_pkt) { + mbuf->ol_flags |= PKT_TX_IP_CKSUM; + + ((struct ipv4_hdr *)l3_hdr)->hdr_checksum = 0; + } + + l4_hdr = (void *)(mbuf_data + pkt_p->l4_offset); + + if (udp_chksum_pkt) { + mbuf->ol_flags |= PKT_TX_UDP_CKSUM; + + ((struct udp_hdr *)l4_hdr)->dgram_cksum = + phdr_csum(l3_proto_v4, l3_hdr, mbuf->ol_flags); + } else if (tcp_chksum_pkt) { + mbuf->ol_flags |= PKT_TX_TCP_CKSUM; + + ((struct tcp_hdr *)l4_hdr)->cksum = + phdr_csum(l3_proto_v4, l3_hdr, mbuf->ol_flags); + } +} + static int send_pkt_dpdk(pktio_entry_t *pktio_entry, int index, const odp_packet_t pkt_table[], int len) { pkt_dpdk_t * const pkt_dpdk = &pktio_entry->s.pkt_dpdk; + uint8_t chksum_insert_ena = pktio_entry->s.chksum_insert_ena; + odp_pktout_config_opt_t *pktout_cfg = &pktio_entry->s.config.pktout; + odp_pktout_config_opt_t *pktout_capa = + &pktio_entry->s.capa.config.pktout; int pkts; int i; uint32_t mtu = pkt_dpdk->mtu; @@ -673,6 +842,13 @@ static int send_pkt_dpdk(pktio_entry_t *pktio_entry, int index,
if (odp_unlikely(mbuf->pkt_len > mtu)) break; + + mbuf->ol_flags = 0; + if (chksum_insert_ena) + pkt_set_ol_tx(pktout_cfg, pktout_capa, + odp_packet_hdr(pkt_table[i]), mbuf, + rte_pktmbuf_mtod(mbuf, char *)); + num_tx++; }
commit a30953543eaaf279dc7faac135f37544ebdd84c8 Author: Bogdan Pricope bogdan.pricope@linaro.org Date: Thu Mar 1 14:48:27 2018 +0200
linux-dpdk: pktio: dpdk: add csum support on RX side
Get checksum capabilities on RX side and retrieve csum results reported by dpdk.
Signed-off-by: Bogdan Pricope bogdan.pricope@linaro.org Reviewed-by: Josep Puigdemont josep.puigdemont@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_packet_dpdk.c b/platform/linux-dpdk/odp_packet_dpdk.c index 7476064c..f6e95204 100644 --- a/platform/linux-dpdk/odp_packet_dpdk.c +++ b/platform/linux-dpdk/odp_packet_dpdk.c @@ -170,6 +170,11 @@ static int dpdk_init_capability(pktio_entry_t *pktio_entry, unsigned max_rx_queues; struct ether_addr mac_addr; int ret; + int ptype_cnt; + int ptype_l3_ipv4 = 0; + int ptype_l4_tcp = 0; + int ptype_l4_udp = 0; + uint32_t ptype_mask = RTE_PTYPE_L3_MASK | RTE_PTYPE_L4_MASK;
memset(dev_info, 0, sizeof(struct rte_eth_dev_info)); memset(capa, 0, sizeof(odp_pktio_capability_t)); @@ -201,6 +206,54 @@ static int dpdk_init_capability(pktio_entry_t *pktio_entry, return -1; }
+ /* Check supported pktio configuration options */ + odp_pktio_config_init(&capa->config); + capa->config.pktin.bit.ts_all = 1; + capa->config.pktin.bit.ts_ptp = 1; + + /* CSUM RX capabilities*/ + ptype_cnt = rte_eth_dev_get_supported_ptypes(pkt_dpdk->port_id, + ptype_mask, NULL, 0); + if (ptype_cnt > 0) { + uint32_t ptypes[ptype_cnt]; + int i; + + ptype_cnt = rte_eth_dev_get_supported_ptypes(pkt_dpdk->port_id, + ptype_mask, ptypes, + ptype_cnt); + for (i = 0; i < ptype_cnt; i++) + switch (ptypes[i]) { + case RTE_PTYPE_L3_IPV4: + /* Fall through */ + case RTE_PTYPE_L3_IPV4_EXT_UNKNOWN: + /* Fall through */ + case RTE_PTYPE_L3_IPV4_EXT: + ptype_l3_ipv4 = 1; + break; + case RTE_PTYPE_L4_TCP: + ptype_l4_tcp = 1; + break; + case RTE_PTYPE_L4_UDP: + ptype_l4_udp = 1; + break; + } + } + + capa->config.pktin.bit.ipv4_chksum = ptype_l3_ipv4 && + (dev_info->rx_offload_capa & DEV_RX_OFFLOAD_IPV4_CKSUM) ? 1 : 0; + if (capa->config.pktin.bit.ipv4_chksum) + capa->config.pktin.bit.drop_ipv4_err = 1; + + capa->config.pktin.bit.udp_chksum = ptype_l4_udp && + (dev_info->rx_offload_capa & DEV_RX_OFFLOAD_UDP_CKSUM) ? 1 : 0; + if (capa->config.pktin.bit.udp_chksum) + capa->config.pktin.bit.drop_udp_err = 1; + + capa->config.pktin.bit.tcp_chksum = ptype_l4_tcp && + (dev_info->rx_offload_capa & DEV_RX_OFFLOAD_TCP_CKSUM) ? 1 : 0; + if (capa->config.pktin.bit.tcp_chksum) + capa->config.pktin.bit.drop_tcp_err = 1; + return 0; }
@@ -268,6 +321,7 @@ static int start_pkt_dpdk(pktio_entry_t *pktio_entry) uint16_t nb_rxd = RTE_TEST_RX_DESC_DEFAULT; uint16_t nb_txd = RTE_TEST_TX_DESC_DEFAULT; struct rte_eth_rss_conf rss_conf; + uint16_t hw_ip_checksum = 0;
/* DPDK doesn't support nb_rx_q/nb_tx_q being 0 */ if (!pktio_entry->s.num_in_queue) @@ -277,12 +331,17 @@ static int start_pkt_dpdk(pktio_entry_t *pktio_entry)
rss_conf_to_hash_proto(&rss_conf, &pkt_dpdk->hash);
+ if (pktio_entry->s.config.pktin.bit.ipv4_chksum || + pktio_entry->s.config.pktin.bit.udp_chksum || + pktio_entry->s.config.pktin.bit.tcp_chksum) + hw_ip_checksum = 1; + struct rte_eth_conf port_conf = { .rxmode = { .mq_mode = ETH_MQ_RX_RSS, .split_hdr_size = 0, .header_split = 0, /**< Header Split */ - .hw_ip_checksum = 0, /**< IP checksum offload */ + .hw_ip_checksum = hw_ip_checksum, /**< IP checksum offload */ .hw_vlan_filter = 0, /**< VLAN filtering */ .jumbo_frame = 1, /**< Jumbo Frame Support */ .hw_strip_crc = 0, /**< CRC stripp by hardware */ @@ -404,12 +463,74 @@ static void _odp_pktio_send_completion(pktio_entry_t *pktio_entry) return; }
+#define IP4_CSUM_RESULT(m) (m->ol_flags & PKT_RX_IP_CKSUM_MASK) +#define L4_CSUM_RESULT(m) (m->ol_flags & PKT_RX_L4_CKSUM_MASK) +#define HAS_L4_PROTO(m, proto) ((m->packet_type & RTE_PTYPE_L4_MASK) == proto) + +#define PKTIN_CSUM_BITS 0x1C + +static inline int pkt_set_ol_rx(odp_pktin_config_opt_t *pktin_cfg, + odp_packet_hdr_t *pkt_hdr, + struct rte_mbuf *mbuf) +{ + uint64_t packet_csum_result; + + if (pktin_cfg->bit.ipv4_chksum && + RTE_ETH_IS_IPV4_HDR(mbuf->packet_type)) { + packet_csum_result = IP4_CSUM_RESULT(mbuf); + + if (packet_csum_result == PKT_RX_IP_CKSUM_GOOD) { + pkt_hdr->p.input_flags.l3_chksum_done = 1; + } else if (packet_csum_result != PKT_RX_IP_CKSUM_UNKNOWN) { + if (pktin_cfg->bit.drop_ipv4_err) + return -1; + + pkt_hdr->p.input_flags.l3_chksum_done = 1; + pkt_hdr->p.error_flags.ip_err = 1; + pkt_hdr->p.error_flags.l3_chksum = 1; + } + } + + if (pktin_cfg->bit.udp_chksum && + HAS_L4_PROTO(mbuf, RTE_PTYPE_L4_UDP)) { + packet_csum_result = L4_CSUM_RESULT(mbuf); + + if (packet_csum_result == PKT_RX_L4_CKSUM_GOOD) { + pkt_hdr->p.input_flags.l4_chksum_done = 1; + } else if (packet_csum_result != PKT_RX_L4_CKSUM_UNKNOWN) { + if (pktin_cfg->bit.drop_udp_err) + return -1; + + pkt_hdr->p.input_flags.l4_chksum_done = 1; + pkt_hdr->p.error_flags.udp_err = 1; + pkt_hdr->p.error_flags.l4_chksum = 1; + } + } else if (pktin_cfg->bit.tcp_chksum && + HAS_L4_PROTO(mbuf, RTE_PTYPE_L4_TCP)) { + packet_csum_result = L4_CSUM_RESULT(mbuf); + + if (packet_csum_result == PKT_RX_L4_CKSUM_GOOD) { + pkt_hdr->p.input_flags.l4_chksum_done = 1; + } else if (packet_csum_result != PKT_RX_L4_CKSUM_UNKNOWN) { + if (pktin_cfg->bit.drop_tcp_err) + return -1; + + pkt_hdr->p.input_flags.l4_chksum_done = 1; + pkt_hdr->p.error_flags.tcp_err = 1; + pkt_hdr->p.error_flags.l4_chksum = 1; + } + } + + return 0; +} + static int recv_pkt_dpdk(pktio_entry_t *pktio_entry, int index, odp_packet_t pkt_table[], int len) { uint16_t nb_rx, i; odp_packet_t *saved_pkt_table; pkt_dpdk_t * const pkt_dpdk = &pktio_entry->s.pkt_dpdk; + odp_pktin_config_opt_t *pktin_cfg = &pktio_entry->s.config.pktin; uint8_t min = pkt_dpdk->min_rx_burst; odp_time_t ts_val; odp_time_t *ts = NULL; @@ -515,6 +636,26 @@ static int recv_pkt_dpdk(pktio_entry_t *pktio_entry, int index, nb_rx = success; }
+ if (pktin_cfg->all_bits & PKTIN_CSUM_BITS) { + int j; + odp_packet_t pkt; + + for (i = 0, j = 0; i < nb_rx; i++) { + pkt = pkt_table[i]; + + if (pkt_set_ol_rx(pktin_cfg, + odp_packet_hdr(pkt), + pkt_to_mbuf(pkt))) { + rte_pktmbuf_free(pkt_to_mbuf(pkt)); + continue; + } + if (i != j) + pkt_table[j] = pkt; + j++; + } + + nb_rx = j; + } return nb_rx; }
commit 062e90350b6c80bdd2de39f7a74e504087458280 Author: Bogdan Pricope bogdan.pricope@linaro.org Date: Thu Mar 1 11:20:29 2018 +0200
linux-dpdk: pktio: dpdk: move capability settings to a separate function
Restructure dpdk pktio open function to improve code clarity.
Signed-off-by: Bogdan Pricope bogdan.pricope@linaro.org Reviewed-by: Josep Puigdemont josep.puigdemont@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_packet_dpdk.c b/platform/linux-dpdk/odp_packet_dpdk.c index d814a897..7476064c 100644 --- a/platform/linux-dpdk/odp_packet_dpdk.c +++ b/platform/linux-dpdk/odp_packet_dpdk.c @@ -162,31 +162,69 @@ static int term_pkt_dpdk(void) return 0; }
+static int dpdk_init_capability(pktio_entry_t *pktio_entry, + struct rte_eth_dev_info *dev_info) +{ + pkt_dpdk_t *pkt_dpdk = &pktio_entry->s.pkt_dpdk; + odp_pktio_capability_t *capa = &pktio_entry->s.capa; + unsigned max_rx_queues; + struct ether_addr mac_addr; + int ret; + + memset(dev_info, 0, sizeof(struct rte_eth_dev_info)); + memset(capa, 0, sizeof(odp_pktio_capability_t)); + + rte_eth_dev_info_get(pkt_dpdk->port_id, dev_info); + if (dev_info->driver_name == NULL) { + ODP_DBG("No driver found for interface: %d\n", + pkt_dpdk->port_id); + return -1; + } + + /* Set maximum input/output queues number*/ + max_rx_queues = RTE_MIN(dev_info->max_rx_queues, PKTIO_MAX_QUEUES); + /* ixgbe devices support only 16 RX queues in RSS mode */ + if (!strncmp(dev_info->driver_name, IXGBE_DRV_NAME, + strlen(IXGBE_DRV_NAME))) + max_rx_queues = RTE_MIN((unsigned)16, max_rx_queues); + capa->max_input_queues = max_rx_queues; + capa->max_output_queues = RTE_MIN(dev_info->max_tx_queues, + PKTIO_MAX_QUEUES); + + /* Check if setting default MAC address is supporter */ + rte_eth_macaddr_get(pkt_dpdk->port_id, &mac_addr); + ret = rte_eth_dev_default_mac_addr_set(pkt_dpdk->port_id, &mac_addr); + if (ret == 0) { + capa->set_op.op.mac_addr = 1; + } else if (ret != -ENOTSUP) { + ODP_ERR("Failed to set interface default MAC\n"); + return -1; + } + + return 0; +} + static int setup_pkt_dpdk(odp_pktio_t pktio ODP_UNUSED, pktio_entry_t *pktio_entry, const char *netdev, odp_pool_t pool ODP_UNUSED) { - uint16_t port_id = 0; uint32_t mtu; struct rte_eth_dev_info dev_info; - struct ether_addr mac_addr; pkt_dpdk_t * const pkt_dpdk = &pktio_entry->s.pkt_dpdk; int i; - int ret; - unsigned max_queues;
if (!_dpdk_netdev_is_valid(netdev)) { ODP_DBG("Interface name should only contain numbers!: %s\n", netdev); return -1; } + pkt_dpdk->port_id = atoi(netdev);
- port_id = atoi(netdev); - pkt_dpdk->port_id = port_id; - rte_eth_dev_info_get(port_id, &dev_info); - if (dev_info.driver_name == NULL) { - ODP_DBG("No driver found for interface: %s\n", netdev); + if (dpdk_init_capability(pktio_entry, &dev_info)) { + ODP_DBG("Failed to initialize capabilities for interface: %s\n", + netdev); return -1; } + /* Drivers requiring minimum burst size. Supports also *_vf versions * of the drivers. */ if (!strncmp(dev_info.driver_name, IXGBE_DRV_NAME, @@ -197,26 +235,7 @@ static int setup_pkt_dpdk(odp_pktio_t pktio ODP_UNUSED, pktio_entry_t *pktio_ent else pkt_dpdk->min_rx_burst = 0;
- _dpdk_print_port_mac(port_id); - - /* Check if setting default MAC address is supporter */ - rte_eth_macaddr_get(port_id, &mac_addr); - ret = rte_eth_dev_default_mac_addr_set(port_id, &mac_addr); - if (ret == 0) { - pktio_entry->s.capa.set_op.op.mac_addr = 1; - } else if (ret != -ENOTSUP) { - ODP_ERR("Failed to set interface default MAC\n"); - return -1; - } - - max_queues = RTE_MIN(dev_info.max_rx_queues, PKTIO_MAX_QUEUES); - /* ixgbe devices support only 16 RX queues in RSS mode */ - if (!strncmp(dev_info.driver_name, IXGBE_DRV_NAME, - strlen(IXGBE_DRV_NAME))) - max_queues = RTE_MIN((unsigned)16, max_queues); - pktio_entry->s.capa.max_input_queues = max_queues; - pktio_entry->s.capa.max_output_queues = RTE_MIN(dev_info.max_tx_queues, - PKTIO_MAX_QUEUES); + _dpdk_print_port_mac(pkt_dpdk->port_id);
mtu = mtu_get_pkt_dpdk(pktio_entry); if (mtu == 0) {
commit b1c43018a834a1cc6c182d9677083b068508a5b5 Author: Michal Mazur mkm@semihalf.com Date: Wed Feb 21 21:58:17 2018 +0100
validation: pool: verify pool data range
Allocate maximum number of packets from pool and verify that packet data are located inside range returned by odp_pool_info.
Signed-off-by: Michal Mazur mkm@semihalf.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/test/validation/api/pool/pool.c b/test/validation/api/pool/pool.c index 84c17720..29db0508 100644 --- a/test/validation/api/pool/pool.c +++ b/test/validation/api/pool/pool.c @@ -218,6 +218,59 @@ void pool_test_info_packet(void) CU_ASSERT(odp_pool_destroy(pool) == 0); }
+static void pool_test_info_data_range(void) +{ + odp_pool_t pool; + odp_pool_info_t info; + odp_pool_param_t param; + odp_packet_t pkt[PKT_NUM]; + uint32_t i, num; + uintptr_t pool_len; + + odp_pool_param_init(¶m); + + param.type = ODP_POOL_PACKET; + param.pkt.num = PKT_NUM; + param.pkt.len = PKT_LEN; + + pool = odp_pool_create(NULL, ¶m); + CU_ASSERT_FATAL(pool != ODP_POOL_INVALID); + + CU_ASSERT_FATAL(odp_pool_info(pool, &info) == 0); + + pool_len = info.max_data_addr - info.min_data_addr + 1; + CU_ASSERT(pool_len >= PKT_NUM * PKT_LEN); + + num = 0; + + for (i = 0; i < PKT_NUM; i++) { + pkt[num] = odp_packet_alloc(pool, PKT_LEN); + CU_ASSERT(pkt[num] != ODP_PACKET_INVALID); + + if (pkt[num] != ODP_PACKET_INVALID) + num++; + } + + for (i = 0; i < num; i++) { + uintptr_t pkt_data, pkt_data_end; + uint32_t offset = 0, seg_len; + uint32_t pkt_len = odp_packet_len(pkt[i]); + + while (offset < pkt_len) { + pkt_data = (uintptr_t)odp_packet_offset(pkt[i], offset, + &seg_len, NULL); + pkt_data_end = pkt_data + seg_len - 1; + CU_ASSERT((pkt_data >= info.min_data_addr) && + (pkt_data_end <= info.max_data_addr)); + offset += seg_len; + } + + odp_packet_free(pkt[i]); + } + + CU_ASSERT(odp_pool_destroy(pool) == 0); +} + odp_testinfo_t pool_suite[] = { ODP_TEST_INFO(pool_test_create_destroy_buffer), ODP_TEST_INFO(pool_test_create_destroy_packet), @@ -226,6 +279,7 @@ odp_testinfo_t pool_suite[] = { ODP_TEST_INFO(pool_test_alloc_packet_subparam), ODP_TEST_INFO(pool_test_info_packet), ODP_TEST_INFO(pool_test_lookup_info_print), + ODP_TEST_INFO(pool_test_info_data_range), ODP_TEST_INFO_NULL, };
commit d6716eb5e041e02794fae6a37f3d268b2290bf3a Author: Michal Mazur mkm@semihalf.com Date: Fri Jan 12 19:36:58 2018 +0100
linux-dpdk: pool: Return address range in pool info
Implement support in odp_pool_info function to provide address range of pool data available for application.
Pull request of related API change: https://github.com/Linaro/odp/pull/200
Signed-off-by: Michal Mazur mkm@semihalf.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_pool.c b/platform/linux-dpdk/odp_pool.c index 6ea25bd0..1573c347 100644 --- a/platform/linux-dpdk/odp_pool.c +++ b/platform/linux-dpdk/odp_pool.c @@ -610,6 +610,7 @@ void odp_pool_print(odp_pool_t pool_hdl) int odp_pool_info(odp_pool_t pool_hdl, odp_pool_info_t *info) { pool_t *pool = pool_entry_from_hdl(pool_hdl); + struct rte_mempool_memhdr *hdr;
if (pool == NULL || info == NULL) return -1; @@ -620,6 +621,10 @@ int odp_pool_info(odp_pool_t pool_hdl, odp_pool_info_t *info) if (pool->params.type == ODP_POOL_PACKET) info->pkt.max_num = pool->rte_mempool->size;
+ hdr = STAILQ_FIRST(&pool->rte_mempool->mem_list); + info->min_data_addr = (uintptr_t)hdr->addr; + info->max_data_addr = (uintptr_t)hdr->addr + hdr->len - 1; + return 0; }
commit 01c7a2e7c0e98cdeea65e45f6d43b64db0ca0cfa Author: Matias Elo matias.elo@nokia.com Date: Tue Feb 20 14:20:12 2018 +0200
linux-dpdk: use rte_eth_tx_done_cleanup() instead of dummy send
Use rte_eth_tx_done_cleanup() function to release mbufs cached by the pmd driver.
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_packet_dpdk.c b/platform/linux-dpdk/odp_packet_dpdk.c index 6216c6f8..d814a897 100644 --- a/platform/linux-dpdk/odp_packet_dpdk.c +++ b/platform/linux-dpdk/odp_packet_dpdk.c @@ -348,25 +348,23 @@ static int stop_pkt_dpdk(pktio_entry_t *pktio_entry) return 0; }
-/* Forward declaration */ -static int send_pkt_dpdk(pktio_entry_t *pktio_entry, int index, - const odp_packet_t pkt_table[], int len); - /* This function can't be called if pkt_dpdk->lockless_tx is true */ static void _odp_pktio_send_completion(pktio_entry_t *pktio_entry) { int i; unsigned j; - odp_packet_t dummy; pool_t *pool = pool_entry_from_hdl(pktio_entry->s.pool); struct rte_mempool *rte_mempool = pool->rte_mempool; + uint16_t port_id = pktio_entry->s.pkt_dpdk.port_id;
for (j = 0; j < pktio_entry->s.num_out_queue; j++) - send_pkt_dpdk(pktio_entry, j, &dummy, 0); + rte_eth_tx_done_cleanup(port_id, j, 0);
for (i = 0; i < ODP_CONFIG_PKTIO_ENTRIES; ++i) { pktio_entry_t *entry = pktio_entry_ptr[i];
+ port_id = entry->s.pkt_dpdk.port_id; + if (rte_mempool_avail_count(rte_mempool) != 0) return;
@@ -378,8 +376,7 @@ static void _odp_pktio_send_completion(pktio_entry_t *pktio_entry) entry->s.ops == &dpdk_pktio_ops) { for (j = 0; j < pktio_entry->s.num_out_queue; j++) - send_pkt_dpdk(pktio_entry, j, - &dummy, 0); + rte_eth_tx_done_cleanup(port_id, j, 0); } odp_ticketlock_unlock(&entry->s.txl); }
commit 62d1a351dc2c8c27d10bc7da809f85ef5400e30d Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 15 15:24:43 2018 +0200
travis: improve testing coverage
Bring travis configuration closer to the one of linux-generic and run tests with clang.
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/.travis.yml b/.travis.yml index f52a4e86..2031f26f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,66 +13,77 @@ dist: trusty group: deprecated-2017Q2 notifications: email: false -env: - global: - # COVERITY_SCAN_TOKEN - # ** specific to your project ** - # Note: - # You should have a github account and travis linked travis account. - # The secure key to be filled below is the 685 character long encrypted - # token you can find as follow from your coverity dashboard - # (at https://scan.coverity.com/dashboard): - # Click on the github project (<you>/odp-dpdk) - # Click on "submit build" - # Click on "Configure Travis CI" - # Look at the COVERITY_SCAN_TOKEN in the env: global: section - # of the configuration example. - # copy the secure:<key> below - # - - secure: "xxxx" - # - # By default Linaro CODECOV_TOKEN token is used. It's ok to use it to see - # for individual commit validation. But you you want to track tests history - # you need generated new one at https://codecov.io specific for your repo. - - CODECOV_TOKEN=8e1c0fd8-62ff-411e-a79f-5839f6662c11 +stages: + - "build only" + - test
addons: apt: packages: - gcc - - automake autoconf libtool graphviz mscgen doxygen + - clang-3.8 + - automake autoconf libtool libssl-dev graphviz mscgen - codespell - - libssl-dev - libpcap-dev - libnuma-dev # coverity_scan: # project: # name: "$TRAVIS_REPO_SLUG" # notification_email: xxxx -# build_command_prepend: "./bootstrap && ./configure --enable-test-cpp --enable-test-vald --enable-test-helper --enable-test-perf --enable-user-guides --enable-test-example" +# build_command_prepend: "./bootstrap && ./configure --enable-test-cpp --enable-test-vald --enable-test-helper --enable-test-perf --enable-user-guides --enable-test-perf-proc --enable-test-example" # build_command: "make" # branch_pattern: coverity_scan
-compiler: - - gcc - cache: + ccache: true pip: true directories: - dpdk + - $HOME/cunit-install + - $HOME/doxygen-install
env: + global: + # + # By default Linaro CODECOV_TOKEN token is used. It's ok to use it to see + # for individual commit validation. But you you want to track tests history + # you need generated new one at https://codecov.io specific for your repo. + - CODECOV_TOKEN=8e1c0fd8-62ff-411e-a79f-5839f6662c11 + - DPDK_VERS="17.08" + matrix: - CONF="" - CONF="--disable-abi-compat" + - CONF="--enable-deprecated" - CONF="--enable-schedule-sp" - CONF="--enable-schedule-iquery" + - CONF="--disable-static-applications" + +compiler: + - gcc + - clang-3.8
before_install: # Install cunit for the validation tests because distro version is too old and fails C99 compile - sudo apt-get remove libcunit1-dev libcunit1 - - wget http://ftp.debian.org/debian/pool/main/c/cunit/libcunit1_2.1-3-dfsg-2_amd64.... - - wget http://ftp.debian.org/debian/pool/main/c/cunit/libcunit1-dev_2.1-3-dfsg-2_am... - - sudo dpkg -i libcunit1_2.1-3-dfsg-2_amd64.deb libcunit1-dev_2.1-3-dfsg-2_amd64.deb + - export LD_LIBRARY_PATH="$HOME/cunit-install/$CROSS_ARCH/lib:$LD_LIBRARY_PATH" + - | + if [ ! -f "$HOME/cunit-install/$CROSS_ARCH/lib/libcunit.a" ]; then + export CUNIT_VERSION=2.1-3 + curl -sSOL https://github.com/Linaro/libcunit/releases/download/%24%7BCUNIT_VERSION%7D/... + tar -jxf *.bz2 + pushd CUnit* + libtoolize --force --copy + aclocal + autoheader + automake --add-missing --include-deps --copy + autoconf + ./configure --prefix=$HOME/cunit-install/$CROSS_ARCH --enable-debug --enable-automated --enable-basic --enable-console --enable-examples --enable-test $CROSS || cat config.log + make -j $(nproc) + sudo make install + popd + fi + - export PKG_CONFIG_PATH="$HOME/cunit-install/$CROSS_ARCH/lib/pkgconfig:${PKG_CONFIG_PATH}" + - find $HOME/cunit-install
install: - sudo apt-get -qq update @@ -80,7 +91,6 @@ install: - gem install asciidoctor
# DPDK. Note that cache must be purged if dpdk version changes. - - DPDK_VERS="17.08" - | CACHED_DPDK_VERS=`fgrep Version dpdk/pkg/dpdk.spec | cut -d " " -f 2` if [ "${CACHED_DPDK_VERS}" != "${DPDK_VERS}" ]; then @@ -111,7 +121,12 @@ install:
script: - ./bootstrap - - ./configure --prefix=$HOME/odp-install --enable-test-cpp --enable-test-vald --enable-test-helper --enable-test-perf --enable-user-guides --enable-test-example --with-dpdk-path=`pwd`/dpdk/${TARGET} $CONF + - ./configure --prefix=$HOME/odp-install + --with-dpdk-path=`pwd`/dpdk/${TARGET} + --enable-user-guides + --enable-debug=full + --enable-helper-linux + $CONF - make -j $(nproc) - sudo LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH" make check - make install @@ -124,11 +139,11 @@ script: - echo "Checking linking and run from install..." - pushd $HOME - echo "Dynamic link.." - - ${CC} ${OLDPWD}/example/hello/odp_hello.c -o odp_hello_inst `PKG_CONFIG_PATH=${HOME}/odp-install/lib/pkgconfig pkg-config --cflags --libs libodp-dpdk` - - sudo ODP_PLATFORM_PARAMS="-n 2" LD_LIBRARY_PATH="${HOME}/odp-install/lib:$LD_LIBRARY_PATH" ./odp_hello_inst + - ${CC} ${CFLAGS} ${OLDPWD}/example/hello/odp_hello.c -o odp_hello_inst_dynamic `PKG_CONFIG_PATH=${HOME}/odp-install/lib/pkgconfig:${PKG_CONFIG_PATH} pkg-config --cflags --libs libodp-dpdk` + - sudo ODP_PLATFORM_PARAMS="-n 2" LD_LIBRARY_PATH="${HOME}/odp-install/lib:$LD_LIBRARY_PATH" ./odp_hello_inst_dynamic - echo "Static link.." - - ${CC} ${OLDPWD}/example/hello/odp_hello.c -o odp_hello_inst `PKG_CONFIG_PATH=${HOME}/odp-install/lib/pkgconfig pkg-config --cflags --libs libodp-dpdk --static` -static - - sudo ODP_PLATFORM_PARAMS="-n 2" ./odp_hello_inst + - ${CC} ${CFLAGS} ${OLDPWD}/example/hello/odp_hello.c -o odp_hello_inst_static `PKG_CONFIG_PATH=${HOME}/odp-install/lib/pkgconfig:${PKG_CONFIG_PATH} pkg-config --cflags --libs libodp-dpdk --static` -static + - sudo ODP_PLATFORM_PARAMS="-n 2" ./odp_hello_inst_static
jobs: include: @@ -138,15 +153,36 @@ jobs: script: - sudo -H pip install coverage - ./bootstrap - - ./configure --prefix=$HOME/odp-install --enable-test-cpp --enable-test-vald --enable-test-helper --enable-test-perf --enable-user-guides --enable-test-example --with-dpdk-path=`pwd`/dpdk/${TARGET} CFLAGS="-O0 -coverage" CXXFLAGS="-O0 -coverage" LDFLAGS="--coverage" - - sudo LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH" PATH=${PATH//:./node_modules/.bin/} make check + - ./configure --prefix=$HOME/odp-install + --enable-user-guides + --with-dpdk-path=`pwd`/dpdk/${TARGET} + CFLAGS="-O0 -coverage" + CXXFLAGS="-O0 -coverage" LDFLAGS="--coverage" + --enable-debug=full + --enable-helper-linux + - CCACHE_DISABLE=1 make -j $(nproc) + - sudo CCACHE_DISABLE=1 LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH" PATH=${PATH//:./node_modules/.bin/} make check - find . -type f -iname '*.[ch]' -not -path ".git/*" -execdir gcov {} ; ; bash <(curl -s https://codecov.io/bash) -X coveragepy - - stage: test + - stage: "build only" env: TEST=doxygen compiler: gcc + before_install: + # Updated Doxygen + - | + if [ ! -f "$HOME/doxygen-install/bin/doxygen" ]; then + wget https://github.com/doxygen/doxygen/archive/Release_1_8_13.tar.gz + tar xpvf Release_1_8_13.tar.gz + pushd doxygen-Release_1_8_13 + cmake -DCMAKE_INSTALL_PREFIX=$HOME/doxygen-install . + make -j $(nproc) + make install + popd + fi + - export PATH=$HOME/doxygen-install/bin:$PATH script: - ./bootstrap - - ./configure --with-dpdk-path=`pwd`/dpdk/${TARGET} + - ./configure + --with-dpdk-path=`pwd`/dpdk/${TARGET} # doxygen does not trap on warnings, check for them here. - make doxygen-doc 2>&1 |tee doxygen.log - | @@ -156,6 +192,22 @@ jobs: else true fi + - stage: "build only" + env: CONF="" + compiler: gcc + script: + - ./bootstrap + - ./configure --enable-helper-linux + --with-dpdk-path=`pwd`/dpdk/${TARGET} + - make -j $(nproc) + - stage: "build only" + env: CONF="" + compiler: clang-3.8 + script: + - ./bootstrap + - ./configure --enable-helper-linux + --with-dpdk-path=`pwd`/dpdk/${TARGET} + - make -j $(nproc) - stage: test env: TEST=checkpatch compiler: gcc
commit 19e4c5d19b8235900930ef08e8a8f0401b2fd0a5 Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 15 17:00:45 2018 +0200
linux-dpdk: clean type conversions
Use type conversion inline functions instead of casts. Fixes clang errors about increased alignment requirements.
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp_buffer_internal.h b/platform/linux-dpdk/include/odp_buffer_internal.h index 1c88cdd1..56974e6b 100644 --- a/platform/linux-dpdk/include/odp_buffer_internal.h +++ b/platform/linux-dpdk/include/odp_buffer_internal.h @@ -106,6 +106,16 @@ int _odp_buffer_type(odp_buffer_t buf); */ void _odp_buffer_type_set(odp_buffer_t buf, int type);
+static inline struct rte_mbuf *buf_to_mbuf(odp_buffer_t buf) +{ + return (struct rte_mbuf *)(uintptr_t)buf; +} + +static inline odp_buffer_hdr_t *mbuf_to_buf_hdr(struct rte_mbuf *mbuf) +{ + return (odp_buffer_hdr_t *)(uintptr_t)mbuf; +} + #ifdef __cplusplus } #endif diff --git a/platform/linux-dpdk/include/odp_packet_internal.h b/platform/linux-dpdk/include/odp_packet_internal.h index 2a545d79..74e7ac55 100644 --- a/platform/linux-dpdk/include/odp_packet_internal.h +++ b/platform/linux-dpdk/include/odp_packet_internal.h @@ -154,9 +154,9 @@ static inline odp_packet_hdr_t *odp_packet_hdr(odp_packet_t pkt) return (odp_packet_hdr_t *)(uintptr_t)pkt; }
-static inline struct rte_mbuf *pkt_to_mbuf(odp_packet_hdr_t *pkt_hdr) +static inline struct rte_mbuf *pkt_to_mbuf(odp_packet_t pkt) { - return &pkt_hdr->buf_hdr.mb; + return (struct rte_mbuf *)(uintptr_t)pkt; }
static inline odp_buffer_hdr_t *packet_to_buf_hdr(odp_packet_t pkt) diff --git a/platform/linux-dpdk/odp_buffer.c b/platform/linux-dpdk/odp_buffer.c index 7553fcfc..4514e721 100644 --- a/platform/linux-dpdk/odp_buffer.c +++ b/platform/linux-dpdk/odp_buffer.c @@ -33,8 +33,7 @@ void *odp_buffer_addr(odp_buffer_t buf)
uint32_t odp_buffer_size(odp_buffer_t buf) { - odp_buffer_hdr_t *hdr = buf_hdl_to_hdr(buf); - struct rte_mbuf *mbuf = (struct rte_mbuf *)hdr; + struct rte_mbuf *mbuf = buf_to_mbuf(buf);
return mbuf->buf_len; } diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index 14ef3c06..908ee924 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -161,19 +161,15 @@ int odp_packet_alloc_multi(odp_pool_t pool_hdl, uint32_t len,
void odp_packet_free(odp_packet_t pkt) { - struct rte_mbuf *mbuf = (struct rte_mbuf *)pkt; - rte_pktmbuf_free(mbuf); + rte_pktmbuf_free(pkt_to_mbuf(pkt)); }
void odp_packet_free_multi(const odp_packet_t pkt[], int num) { int i;
- for (i = 0; i < num; i++) { - struct rte_mbuf *mbuf = (struct rte_mbuf *)pkt[i]; - - rte_pktmbuf_free(mbuf); - } + for (i = 0; i < num; i++) + rte_pktmbuf_free(pkt_to_mbuf(pkt[i])); }
void odp_packet_free_sp(const odp_packet_t pkt[], int num) @@ -793,8 +789,8 @@ int odp_packet_concat(odp_packet_t *dst, odp_packet_t src) { odp_packet_hdr_t *dst_hdr = odp_packet_hdr(*dst); odp_packet_hdr_t *src_hdr = odp_packet_hdr(src); - struct rte_mbuf *mb_dst = pkt_to_mbuf(dst_hdr); - struct rte_mbuf *mb_src = pkt_to_mbuf(src_hdr); + struct rte_mbuf *mb_dst = pkt_to_mbuf(*dst); + struct rte_mbuf *mb_src = pkt_to_mbuf(src); odp_packet_t new_dst; odp_pool_t pool; uint32_t dst_len; diff --git a/platform/linux-dpdk/odp_packet_dpdk.c b/platform/linux-dpdk/odp_packet_dpdk.c index c7a19322..6216c6f8 100644 --- a/platform/linux-dpdk/odp_packet_dpdk.c +++ b/platform/linux-dpdk/odp_packet_dpdk.c @@ -512,7 +512,7 @@ static int send_pkt_dpdk(pktio_entry_t *pktio_entry, int index, uint16_t num_tx = 0;
for (i = 0; i < len; i++) { - struct rte_mbuf *mbuf = (struct rte_mbuf *)pkt_table[i]; + struct rte_mbuf *mbuf = pkt_to_mbuf(pkt_table[i]);
if (odp_unlikely(mbuf->pkt_len > mtu)) break; @@ -532,7 +532,7 @@ static int send_pkt_dpdk(pktio_entry_t *pktio_entry, int index, odp_ticketlock_unlock(&pkt_dpdk->tx_lock[index]);
if (pkts == 0) { - struct rte_mbuf *mbuf = (struct rte_mbuf *)pkt_table[0]; + struct rte_mbuf *mbuf = pkt_to_mbuf(pkt_table[0]);
if (odp_unlikely(rte_errno != 0)) return -1; diff --git a/platform/linux-dpdk/odp_pool.c b/platform/linux-dpdk/odp_pool.c index ee4a099f..6ea25bd0 100644 --- a/platform/linux-dpdk/odp_pool.c +++ b/platform/linux-dpdk/odp_pool.c @@ -541,7 +541,8 @@ odp_pool_t odp_pool_lookup(const char *name)
static odp_buffer_t buffer_alloc(pool_t *pool) { - odp_buffer_t buffer; + odp_buffer_hdr_t *buf_hdr; + struct rte_mbuf *mbuf;
if (odp_unlikely(pool->params.type != ODP_POOL_BUFFER && pool->params.type != ODP_POOL_TIMEOUT)) { @@ -549,15 +550,16 @@ static odp_buffer_t buffer_alloc(pool_t *pool) return ODP_BUFFER_INVALID; }
- buffer = (odp_buffer_t)rte_ctrlmbuf_alloc(pool->rte_mempool); - - if ((struct rte_mbuf *)buffer == NULL) { + mbuf = rte_ctrlmbuf_alloc(pool->rte_mempool); + if (odp_unlikely(mbuf == NULL)) { rte_errno = ENOMEM; return ODP_BUFFER_INVALID; - } else { - buf_hdl_to_hdr(buffer)->next = NULL; - return buffer; } + + buf_hdr = mbuf_to_buf_hdr(mbuf); + buf_hdr->next = NULL; + + return buf_from_buf_hdr(buf_hdr); }
odp_buffer_t odp_buffer_alloc(odp_pool_t pool_hdl) @@ -587,20 +589,15 @@ int odp_buffer_alloc_multi(odp_pool_t pool_hdl, odp_buffer_t buf[], int num)
void odp_buffer_free(odp_buffer_t buf) { - struct rte_mbuf *mbuf = (struct rte_mbuf *)buf; - - rte_ctrlmbuf_free(mbuf); + rte_ctrlmbuf_free(buf_to_mbuf(buf)); }
void odp_buffer_free_multi(const odp_buffer_t buf[], int num) { int i;
- for (i = 0; i < num; i++) { - struct rte_mbuf *mbuf = (struct rte_mbuf *)buf[i]; - - rte_ctrlmbuf_free(mbuf); - } + for (i = 0; i < num; i++) + rte_ctrlmbuf_free(buf_to_mbuf(buf[i])); }
void odp_pool_print(odp_pool_t pool_hdl) diff --git a/platform/linux-dpdk/odp_shared_memory.c b/platform/linux-dpdk/odp_shared_memory.c index 91a7793d..aa566ca1 100644 --- a/platform/linux-dpdk/odp_shared_memory.c +++ b/platform/linux-dpdk/odp_shared_memory.c @@ -116,7 +116,7 @@ static uint64_t shm_size(const struct rte_memzone *mz) */ static shm_zone_t *shm_zone(const struct rte_memzone *mz) { - return (shm_zone_t *)((uint8_t *)mz->addr + shm_size(mz)); + return (shm_zone_t *)(uintptr_t)((uint8_t *)mz->addr + shm_size(mz)); }
static int find_free_block(void)
commit df2d6a1f4b081ccb4de0ed3f2e3902a58b86014c Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 15 17:04:24 2018 +0200
linux-dpdk: fix clang error about missing field initializer
rte_eth_dev_info struct is initialized by rte_eth_dev_info_get().
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_packet_dpdk.c b/platform/linux-dpdk/odp_packet_dpdk.c index a660fe30..c7a19322 100644 --- a/platform/linux-dpdk/odp_packet_dpdk.c +++ b/platform/linux-dpdk/odp_packet_dpdk.c @@ -182,7 +182,6 @@ static int setup_pkt_dpdk(odp_pktio_t pktio ODP_UNUSED, pktio_entry_t *pktio_ent
port_id = atoi(netdev); pkt_dpdk->port_id = port_id; - memset(&dev_info, 0, sizeof(struct rte_eth_dev_info)); rte_eth_dev_info_get(port_id, &dev_info); if (dev_info.driver_name == NULL) { ODP_DBG("No driver found for interface: %s\n", netdev); @@ -549,7 +548,7 @@ static int send_pkt_dpdk(pktio_entry_t *pktio_entry, int index,
static uint32_t _dpdk_vdev_mtu(uint16_t port_id) { - struct rte_eth_dev_info dev_info = {0}; + struct rte_eth_dev_info dev_info; struct ifreq ifr; int ret; int sockfd; @@ -593,7 +592,7 @@ static uint32_t dpdk_frame_maxlen(pktio_entry_t *pktio_entry)
static int _dpdk_vdev_promisc_mode_set(uint16_t port_id, int enable) { - struct rte_eth_dev_info dev_info = {0}; + struct rte_eth_dev_info dev_info; struct ifreq ifr; int ret; int sockfd; @@ -653,7 +652,7 @@ static int promisc_mode_set_pkt_dpdk(pktio_entry_t *pktio_entry, int enable)
static int _dpdk_vdev_promisc_mode(uint16_t port_id) { - struct rte_eth_dev_info dev_info = {0}; + struct rte_eth_dev_info dev_info; struct ifreq ifr; int ret; int sockfd;
commit 2e89f0e01a04c709150d91984bedded517627eb9 Author: Josep Puigdemont josep.puigdemont@linaro.org Date: Mon Feb 19 16:19:48 2018 +0100
config: check for DPDK system libs by default
Signed-off-by: Josep Puigdemont josep.puigdemont@linaro.org Reviewed-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/m4/configure.m4 b/platform/linux-dpdk/m4/configure.m4 index 0f67b857..66c4d320 100644 --- a/platform/linux-dpdk/m4/configure.m4 +++ b/platform/linux-dpdk/m4/configure.m4 @@ -16,8 +16,8 @@ m4_include([platform/linux-dpdk/m4/odp_schedule.m4]) ########################################################################## AC_ARG_WITH([dpdk-path], [AS_HELP_STRING([--with-dpdk-path=DIR], [path to dpdk build directory])], - [DPDK_PATH="$withval" - pktio_dpdk_support=yes],[]) + [DPDK_PATH="$withval"], + [DPDK_PATH=system])
AS_CASE($host_cpu, [x86_64], [DPDK_CPPFLAGS="-msse4.2"])
commit e78e28ea32d5f3fbbe222f5575daa76b2f512c28 Author: Josep Puigdemont josep.puigdemont@linaro.org Date: Tue Feb 6 10:59:24 2018 +0100
README.DPDK: configure takes --with-dpdk-path now
Signed-off-by: Josep Puigdemont josep.puigdemont@linaro.org Reviewed-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/README b/platform/linux-dpdk/README index 5a82257e..6e631ab4 100644 --- a/platform/linux-dpdk/README +++ b/platform/linux-dpdk/README @@ -1,4 +1,4 @@ -Copyright (c) 2014, Linaro Limited +Copyright (c) 2018, Linaro Limited All rights reserved.
SPDX-License-Identifier: BSD-3-Clause @@ -81,17 +81,17 @@ This only ensures building DPDK, but traffic is not tested with this build yet. =================================================
Build dependencies are listed in DEPENDENCIES. Use absolute DPDK directory -path with the --with-sdk-install-path option. +path with the --with-dpdk-path option.
cd <odp-dir> ./bootstrap
The following step depends on if shared libraries are required. SHARED libraries: - ./configure --with-sdk-install-path=<dpdk-dir>/x86_64-native-linuxapp-gcc + ./configure --with-dpdk-path=<dpdk-dir>/x86_64-native-linuxapp-gcc
STATIC libraries (better performance): - ./configure --with-sdk-install-path=<dpdk-dir>/x86_64-native-linuxapp-gcc --disable-shared + ./configure --with-dpdk-path=<dpdk-dir>/x86_64-native-linuxapp-gcc --disable-shared
make
commit f44ea00700f861bfc12e1eb26b323555e707461d Author: Matias Elo matias.elo@nokia.com Date: Wed Feb 14 09:36:42 2018 +0200
linux-dpdk: port ID is 2 bytes long
Starting from DPDK v17.05 port ID is 2 bytes long. Also, unify port ID variable naming.
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp_packet_io_internal.h b/platform/linux-dpdk/include/odp_packet_io_internal.h index c5718f73..83a84a1e 100644 --- a/platform/linux-dpdk/include/odp_packet_io_internal.h +++ b/platform/linux-dpdk/include/odp_packet_io_internal.h @@ -49,12 +49,12 @@ typedef struct {
/** Packet socket using dpdk mmaped rings for both Rx and Tx */ typedef struct { - uint8_t portid; /**< DPDK port identifier */ + uint16_t port_id; /**< DPDK port identifier */ + uint16_t mtu; /**< maximum transmission unit */ uint8_t lockless_rx; /**< no locking for rx */ uint8_t lockless_tx; /**< no locking for tx */ uint8_t min_rx_burst; /**< minimum RX burst size */ odp_pktin_hash_proto_t hash; /**< Packet input hash protocol */ - uint16_t mtu; /**< maximum transmission unit */ char ifname[32]; odp_ticketlock_t rx_lock[PKTIO_MAX_QUEUES]; /**< RX queue locks */ odp_ticketlock_t tx_lock[PKTIO_MAX_QUEUES]; /**< TX queue locks */ diff --git a/platform/linux-dpdk/odp_packet_dpdk.c b/platform/linux-dpdk/odp_packet_dpdk.c index 57cbedfa..a660fe30 100644 --- a/platform/linux-dpdk/odp_packet_dpdk.c +++ b/platform/linux-dpdk/odp_packet_dpdk.c @@ -18,6 +18,7 @@ #include <fcntl.h> #include <string.h> #include <stdlib.h> +#include <inttypes.h>
#include <linux/ethtool.h> #include <linux/sockios.h> @@ -92,14 +93,15 @@ static void rss_conf_to_hash_proto(struct rte_eth_rss_conf *rss_conf, rss_conf->rss_key = NULL; }
-static void _dpdk_print_port_mac(uint8_t portid) +static void _dpdk_print_port_mac(uint16_t port_id) { struct ether_addr eth_addr;
memset(ð_addr, 0, sizeof(eth_addr)); - rte_eth_macaddr_get(portid, ð_addr); - ODP_DBG("Port %u, MAC address: %02X:%02X:%02X:%02X:%02X:%02X\n", - (unsigned)portid, + rte_eth_macaddr_get(port_id, ð_addr); + ODP_DBG("Port %" PRIu16 ", " + "MAC address: %02X:%02X:%02X:%02X:%02X:%02X\n", + port_id, eth_addr.addr_bytes[0], eth_addr.addr_bytes[1], eth_addr.addr_bytes[2], @@ -151,7 +153,7 @@ static int output_queues_config_pkt_dpdk(pktio_entry_t *pktio_entry,
static int term_pkt_dpdk(void) { - uint8_t port_id; + uint16_t port_id;
RTE_ETH_FOREACH_DEV(port_id) { rte_eth_dev_close(port_id); @@ -163,7 +165,7 @@ static int term_pkt_dpdk(void) static int setup_pkt_dpdk(odp_pktio_t pktio ODP_UNUSED, pktio_entry_t *pktio_entry, const char *netdev, odp_pool_t pool ODP_UNUSED) { - uint8_t portid = 0; + uint16_t port_id = 0; uint32_t mtu; struct rte_eth_dev_info dev_info; struct ether_addr mac_addr; @@ -178,10 +180,10 @@ static int setup_pkt_dpdk(odp_pktio_t pktio ODP_UNUSED, pktio_entry_t *pktio_ent return -1; }
- portid = atoi(netdev); - pkt_dpdk->portid = portid; + port_id = atoi(netdev); + pkt_dpdk->port_id = port_id; memset(&dev_info, 0, sizeof(struct rte_eth_dev_info)); - rte_eth_dev_info_get(portid, &dev_info); + rte_eth_dev_info_get(port_id, &dev_info); if (dev_info.driver_name == NULL) { ODP_DBG("No driver found for interface: %s\n", netdev); return -1; @@ -196,11 +198,11 @@ static int setup_pkt_dpdk(odp_pktio_t pktio ODP_UNUSED, pktio_entry_t *pktio_ent else pkt_dpdk->min_rx_burst = 0;
- _dpdk_print_port_mac(portid); + _dpdk_print_port_mac(port_id);
/* Check if setting default MAC address is supporter */ - rte_eth_macaddr_get(portid, &mac_addr); - ret = rte_eth_dev_default_mac_addr_set(portid, &mac_addr); + rte_eth_macaddr_get(port_id, &mac_addr); + ret = rte_eth_dev_default_mac_addr_set(port_id, &mac_addr); if (ret == 0) { pktio_entry->s.capa.set_op.op.mac_addr = 1; } else if (ret != -ENOTSUP) { @@ -240,8 +242,8 @@ static int start_pkt_dpdk(pktio_entry_t *pktio_entry) { int ret, i; pkt_dpdk_t * const pkt_dpdk = &pktio_entry->s.pkt_dpdk; - uint8_t portid = pkt_dpdk->portid; - int sid = rte_eth_dev_socket_id(pkt_dpdk->portid); + uint16_t port_id = pkt_dpdk->port_id; + int sid = rte_eth_dev_socket_id(pkt_dpdk->port_id); int socket_id = sid < 0 ? 0 : sid; uint16_t nbrxq, nbtxq; pool_t *pool = pool_entry_from_hdl(pktio_entry->s.pool); @@ -285,10 +287,10 @@ static int start_pkt_dpdk(pktio_entry_t *pktio_entry) nbtxq = pktio_entry->s.num_out_queue; nbrxq = pktio_entry->s.num_in_queue;
- ret = rte_eth_dev_configure(portid, nbrxq, nbtxq, &port_conf); + ret = rte_eth_dev_configure(port_id, nbrxq, nbtxq, &port_conf); if (ret < 0) { - ODP_ERR("Cannot configure device: err=%d, port=%u\n", - ret, (unsigned)portid); + ODP_ERR("Cannot configure device: err=%d, port=%" PRIu16 "\n", + ret, port_id); return -1; }
@@ -303,38 +305,38 @@ static int start_pkt_dpdk(pktio_entry_t *pktio_entry) } /* init one RX queue on each port */ for (i = 0; i < nbrxq; i++) { - ret = rte_eth_rx_queue_setup(portid, i, nb_rxd, socket_id, + ret = rte_eth_rx_queue_setup(port_id, i, nb_rxd, socket_id, NULL, pool->rte_mempool); if (ret < 0) { - ODP_ERR("rxq:err=%d, port=%u\n", ret, (unsigned)portid); + ODP_ERR("rxq:err=%d, port=%" PRIu16 "\n", ret, port_id); return -1; } }
/* init one TX queue on each port */ for (i = 0; i < nbtxq; i++) { - ret = rte_eth_tx_queue_setup(portid, i, nb_txd, socket_id, + ret = rte_eth_tx_queue_setup(port_id, i, nb_txd, socket_id, NULL); if (ret < 0) { - ODP_ERR("txq:err=%d, port=%u\n", ret, (unsigned)portid); + ODP_ERR("txq:err=%d, port=%" PRIu16 "\n", ret, port_id); return -1; } }
- rte_eth_promiscuous_enable(portid); + rte_eth_promiscuous_enable(port_id); /* Some DPDK PMD vdev like pcap do not support promisc mode change. Use * system call for them. */ - if (!rte_eth_promiscuous_get(portid)) + if (!rte_eth_promiscuous_get(port_id)) pkt_dpdk->vdev_sysc_promisc = 1; else pkt_dpdk->vdev_sysc_promisc = 0;
- rte_eth_allmulticast_enable(portid); + rte_eth_allmulticast_enable(port_id);
- ret = rte_eth_dev_start(portid); + ret = rte_eth_dev_start(port_id); if (ret < 0) { - ODP_ERR("rte_eth_dev_start:err=%d, port=%u\n", - ret, portid); + ODP_ERR("rte_eth_dev_start:err=%d, port=%" PRIu16 "\n", + ret, port_id); return ret; }
@@ -343,7 +345,7 @@ static int start_pkt_dpdk(pktio_entry_t *pktio_entry)
static int stop_pkt_dpdk(pktio_entry_t *pktio_entry) { - rte_eth_dev_stop(pktio_entry->s.pkt_dpdk.portid); + rte_eth_dev_stop(pktio_entry->s.pkt_dpdk.port_id); return 0; }
@@ -407,7 +409,7 @@ static int recv_pkt_dpdk(pktio_entry_t *pktio_entry, int index, if (!pkt_dpdk->lockless_rx) odp_ticketlock_lock(&pkt_dpdk->rx_lock[index]);
- nb_rx = rte_eth_rx_burst((uint8_t)pkt_dpdk->portid, + nb_rx = rte_eth_rx_burst(pkt_dpdk->port_id, (uint16_t)index, (struct rte_mbuf **)pkt_table, (uint16_t)RTE_MAX(len, min)); @@ -523,7 +525,7 @@ static int send_pkt_dpdk(pktio_entry_t *pktio_entry, int index,
#pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wcast-qual" - pkts = rte_eth_tx_burst(pkt_dpdk->portid, index, + pkts = rte_eth_tx_burst(pkt_dpdk->port_id, index, (struct rte_mbuf **)pkt_table, num_tx); #pragma GCC diagnostic pop
@@ -545,7 +547,7 @@ static int send_pkt_dpdk(pktio_entry_t *pktio_entry, int index, return pkts; }
-static uint32_t _dpdk_vdev_mtu(uint8_t port_id) +static uint32_t _dpdk_vdev_mtu(uint16_t port_id) { struct rte_eth_dev_info dev_info = {0}; struct ifreq ifr; @@ -570,7 +572,7 @@ static uint32_t mtu_get_pkt_dpdk(pktio_entry_t *pktio_entry) uint16_t mtu = 0; int ret;
- ret = rte_eth_dev_get_mtu(pktio_entry->s.pkt_dpdk.portid, &mtu); + ret = rte_eth_dev_get_mtu(pktio_entry->s.pkt_dpdk.port_id, &mtu); if (ret < 0) return 0;
@@ -578,7 +580,7 @@ static uint32_t mtu_get_pkt_dpdk(pktio_entry_t *pktio_entry) * try to use system call if dpdk cannot get mtu value. */ if (mtu == 0) - mtu = _dpdk_vdev_mtu(pktio_entry->s.pkt_dpdk.portid); + mtu = _dpdk_vdev_mtu(pktio_entry->s.pkt_dpdk.port_id); return mtu; }
@@ -589,7 +591,7 @@ static uint32_t dpdk_frame_maxlen(pktio_entry_t *pktio_entry) return pkt_dpdk->mtu; }
-static int _dpdk_vdev_promisc_mode_set(uint8_t port_id, int enable) +static int _dpdk_vdev_promisc_mode_set(uint16_t port_id, int enable) { struct rte_eth_dev_info dev_info = {0}; struct ifreq ifr; @@ -633,14 +635,15 @@ static int _dpdk_vdev_promisc_mode_set(uint8_t port_id, int enable)
static int promisc_mode_set_pkt_dpdk(pktio_entry_t *pktio_entry, int enable) { - uint8_t portid = pktio_entry->s.pkt_dpdk.portid; + uint16_t port_id = pktio_entry->s.pkt_dpdk.port_id; + if (enable) - rte_eth_promiscuous_enable(portid); + rte_eth_promiscuous_enable(port_id); else - rte_eth_promiscuous_disable(portid); + rte_eth_promiscuous_disable(port_id);
if (pktio_entry->s.pkt_dpdk.vdev_sysc_promisc) { - int ret = _dpdk_vdev_promisc_mode_set(portid, enable); + int ret = _dpdk_vdev_promisc_mode_set(port_id, enable); if (ret < 0) ODP_DBG("vdev promisc mode fail\n"); } @@ -648,7 +651,7 @@ static int promisc_mode_set_pkt_dpdk(pktio_entry_t *pktio_entry, int enable) return 0; }
-static int _dpdk_vdev_promisc_mode(uint8_t port_id) +static int _dpdk_vdev_promisc_mode(uint16_t port_id) { struct rte_eth_dev_info dev_info = {0}; struct ifreq ifr; @@ -674,17 +677,17 @@ static int _dpdk_vdev_promisc_mode(uint8_t port_id)
static int promisc_mode_get_pkt_dpdk(pktio_entry_t *pktio_entry) { - uint8_t portid = pktio_entry->s.pkt_dpdk.portid; + uint16_t port_id = pktio_entry->s.pkt_dpdk.port_id; if (pktio_entry->s.pkt_dpdk.vdev_sysc_promisc) - return _dpdk_vdev_promisc_mode(portid); + return _dpdk_vdev_promisc_mode(port_id); else - return rte_eth_promiscuous_get(portid); + return rte_eth_promiscuous_get(port_id);
}
static int mac_get_pkt_dpdk(pktio_entry_t *pktio_entry, void *mac_addr) { - rte_eth_macaddr_get(pktio_entry->s.pkt_dpdk.portid, + rte_eth_macaddr_get(pktio_entry->s.pkt_dpdk.port_id, (struct ether_addr *)mac_addr); return ETH_ALEN; } @@ -693,7 +696,7 @@ static int mac_set_pkt_dpdk(pktio_entry_t *pktio_entry, const void *mac_addr) { struct ether_addr addr = *(const struct ether_addr *)mac_addr;
- return rte_eth_dev_default_mac_addr_set(pktio_entry->s.pkt_dpdk.portid, + return rte_eth_dev_default_mac_addr_set(pktio_entry->s.pkt_dpdk.port_id, &addr); }
@@ -707,7 +710,7 @@ static int link_status_pkt_dpdk(pktio_entry_t *pktio_entry) { struct rte_eth_link link;
- rte_eth_link_get(pktio_entry->s.pkt_dpdk.portid, &link); + rte_eth_link_get(pktio_entry->s.pkt_dpdk.port_id, &link); return link.link_status; }
@@ -730,7 +733,7 @@ static int stats_pkt_dpdk(pktio_entry_t *pktio_entry, odp_pktio_stats_t *stats) int ret; struct rte_eth_stats rte_stats;
- ret = rte_eth_stats_get(pktio_entry->s.pkt_dpdk.portid, &rte_stats); + ret = rte_eth_stats_get(pktio_entry->s.pkt_dpdk.port_id, &rte_stats);
if (ret == 0) { stats_convert(&rte_stats, stats); @@ -745,7 +748,7 @@ static int stats_pkt_dpdk(pktio_entry_t *pktio_entry, odp_pktio_stats_t *stats)
static int stats_reset_pkt_dpdk(pktio_entry_t *pktio_entry) { - rte_eth_stats_reset(pktio_entry->s.pkt_dpdk.portid); + rte_eth_stats_reset(pktio_entry->s.pkt_dpdk.port_id); return 0; }
commit 27734c0e9b23a161cdcb433035fd0582fe9f66ae Author: Matias Elo matias.elo@nokia.com Date: Tue Feb 13 13:09:09 2018 +0200
linux-dpdk: bump target dpdk version to 17.08
Changes: - Pcap-based virtual devices are renamed to net_pcap. - DPDK pktio devices cannot be restarted after calling rte_eth_dev_close(). Move rte_eth_dev_close() calls to global terminate from odp_pktio_close().
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/.travis.yml b/.travis.yml index c6b71adc..f52a4e86 100644 --- a/.travis.yml +++ b/.travis.yml @@ -80,7 +80,7 @@ install: - gem install asciidoctor
# DPDK. Note that cache must be purged if dpdk version changes. - - DPDK_VERS="17.02" + - DPDK_VERS="17.08" - | CACHED_DPDK_VERS=`fgrep Version dpdk/pkg/dpdk.spec | cut -d " " -f 2` if [ "${CACHED_DPDK_VERS}" != "${DPDK_VERS}" ]; then diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h index e5458a4f..f96fdd81 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h @@ -118,7 +118,7 @@ static inline odp_pktio_t _odp_packet_input(odp_packet_t pkt) /** @internal Inline function @param pkt @return */ static inline int _odp_packet_num_segs(odp_packet_t pkt) { - return _odp_pkt_get(pkt, uint8_t, nb_segs); + return _odp_pkt_get(pkt, uint16_t, nb_segs); }
/** @internal Inline function @param pkt @return */ diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index ab8c4841..14ef3c06 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -50,6 +50,7 @@ const _odp_packet_inline_offset_t _odp_packet_inline ODP_ALIGNED_CACHE = {
#include <odp/visibility_end.h>
+/* Catch if DPDK mbuf members sizes have changed */ struct rte_mbuf dummy; ODP_STATIC_ASSERT(sizeof(dummy.data_off) == sizeof(uint16_t), "data_off should be uint16_t"); @@ -57,6 +58,8 @@ ODP_STATIC_ASSERT(sizeof(dummy.pkt_len) == sizeof(uint32_t), "pkt_len should be uint32_t"); ODP_STATIC_ASSERT(sizeof(dummy.data_len) == sizeof(uint16_t), "data_len should be uint16_t"); +ODP_STATIC_ASSERT(sizeof(dummy.nb_segs) == sizeof(uint16_t), + "nb_segs should be uint16_t"); ODP_STATIC_ASSERT(sizeof(dummy.hash.rss) == sizeof(uint32_t), "hash.rss should be uint32_t"); ODP_STATIC_ASSERT(sizeof(dummy.ol_flags) == sizeof(uint64_t), diff --git a/platform/linux-dpdk/odp_packet_dpdk.c b/platform/linux-dpdk/odp_packet_dpdk.c index 243ae876..57cbedfa 100644 --- a/platform/linux-dpdk/odp_packet_dpdk.c +++ b/platform/linux-dpdk/odp_packet_dpdk.c @@ -149,6 +149,17 @@ static int output_queues_config_pkt_dpdk(pktio_entry_t *pktio_entry, return 0; }
+static int term_pkt_dpdk(void) +{ + uint8_t port_id; + + RTE_ETH_FOREACH_DEV(port_id) { + rte_eth_dev_close(port_id); + } + + return 0; +} + static int setup_pkt_dpdk(odp_pktio_t pktio ODP_UNUSED, pktio_entry_t *pktio_entry, const char *netdev, odp_pool_t pool ODP_UNUSED) { @@ -220,12 +231,8 @@ static int setup_pkt_dpdk(odp_pktio_t pktio ODP_UNUSED, pktio_entry_t *pktio_ent return 0; }
-static int close_pkt_dpdk(pktio_entry_t *pktio_entry) +static int close_pkt_dpdk(pktio_entry_t *pktio_entry ODP_UNUSED) { - pkt_dpdk_t * const pkt_dpdk = &pktio_entry->s.pkt_dpdk; - - if (pktio_entry->s.state == PKTIO_STATE_STOPPED) - rte_eth_dev_close(pkt_dpdk->portid); return 0; }
@@ -747,7 +754,7 @@ const pktio_if_ops_t dpdk_pktio_ops = { .print = NULL, .init_global = NULL, .init_local = NULL, - .term = NULL, + .term = term_pkt_dpdk, .open = setup_pkt_dpdk, .close = close_pkt_dpdk, .start = start_pkt_dpdk, diff --git a/platform/linux-dpdk/odp_pool.c b/platform/linux-dpdk/odp_pool.c index 7a532048..ee4a099f 100644 --- a/platform/linux-dpdk/odp_pool.c +++ b/platform/linux-dpdk/odp_pool.c @@ -211,7 +211,6 @@ odp_dpdk_mbuf_ctor(struct rte_mempool *mp, /* keep some headroom between start of buffer and data */ if (mb_ctor_arg->type == ODP_POOL_PACKET) { mb->data_off = RTE_PKTMBUF_HEADROOM; - mb->nb_segs = 1; mb->port = 0xff; mb->vlan_tci = 0; } else { @@ -219,8 +218,11 @@ odp_dpdk_mbuf_ctor(struct rte_mempool *mp, }
/* init some constant fields */ - mb->pool = mp; - mb->ol_flags = 0; + mb->pool = mp; + mb->nb_segs = 1; + mb->ol_flags = 0; + rte_mbuf_refcnt_set(mb, 1); + mb->next = NULL;
/* Save index, might be useful for debugging purposes */ buf_hdr = (struct odp_buffer_hdr_t *)raw_mbuf; diff --git a/platform/linux-dpdk/test/validation/api/pktio/pktio_run.sh b/platform/linux-dpdk/test/validation/api/pktio/pktio_run.sh index a08256a6..e4964f52 100755 --- a/platform/linux-dpdk/test/validation/api/pktio/pktio_run.sh +++ b/platform/linux-dpdk/test/validation/api/pktio/pktio_run.sh @@ -85,7 +85,7 @@ run() echo "Failed to setup test environment, skipping test." exit $TEST_SKIPPED fi - export ODP_PLATFORM_PARAMS="-n 4 --no-pci --vdev eth_pcap0,iface=$IF0 --vdev eth_pcap1,iface=$IF1" + export ODP_PLATFORM_PARAMS="-n 4 --no-pci --vdev net_pcap0,iface=$IF0 --vdev net_pcap1,iface=$IF1" export ODP_PKTIO_IF0=0 export ODP_PKTIO_IF1=1 fi
commit d406bd63400075c389785d78d08219dfb4eff243 Author: Matias Elo matias.elo@nokia.com Date: Wed Feb 14 09:03:39 2018 +0200
linux-dpdk: check that packets obey MTU in transmit
Some PMDs don't automatically drop packets which exceed MTU.
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_packet_dpdk.c b/platform/linux-dpdk/odp_packet_dpdk.c index 90b33e8e..243ae876 100644 --- a/platform/linux-dpdk/odp_packet_dpdk.c +++ b/platform/linux-dpdk/odp_packet_dpdk.c @@ -497,8 +497,19 @@ static int recv_pkt_dpdk(pktio_entry_t *pktio_entry, int index, static int send_pkt_dpdk(pktio_entry_t *pktio_entry, int index, const odp_packet_t pkt_table[], int len) { - int pkts; pkt_dpdk_t * const pkt_dpdk = &pktio_entry->s.pkt_dpdk; + int pkts; + int i; + uint32_t mtu = pkt_dpdk->mtu; + uint16_t num_tx = 0; + + for (i = 0; i < len; i++) { + struct rte_mbuf *mbuf = (struct rte_mbuf *)pkt_table[i]; + + if (odp_unlikely(mbuf->pkt_len > mtu)) + break; + num_tx++; + }
if (!pkt_dpdk->lockless_tx) odp_ticketlock_lock(&pkt_dpdk->tx_lock[index]); @@ -506,20 +517,19 @@ static int send_pkt_dpdk(pktio_entry_t *pktio_entry, int index, #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wcast-qual" pkts = rte_eth_tx_burst(pkt_dpdk->portid, index, - (struct rte_mbuf **)pkt_table, len); + (struct rte_mbuf **)pkt_table, num_tx); #pragma GCC diagnostic pop
if (!pkt_dpdk->lockless_tx) odp_ticketlock_unlock(&pkt_dpdk->tx_lock[index]);
if (pkts == 0) { - uint32_t mtu; + struct rte_mbuf *mbuf = (struct rte_mbuf *)pkt_table[0];
if (odp_unlikely(rte_errno != 0)) return -1;
- mtu = pktio_entry->s.pkt_dpdk.mtu; - if (odp_unlikely(odp_packet_len(pkt_table[0]) > mtu)) { + if (odp_unlikely(mbuf->pkt_len > mtu)) { __odp_errno = EMSGSIZE; return -1; }
commit 103e201fc9f114e042765e21f205177a331d3759 Author: Matias Elo matias.elo@nokia.com Date: Tue Feb 13 17:28:52 2018 +0200
linux-dpdk: remove scalable scheduler
Drop scalable scheduler since it has dependencies to linux-generic ishm implementation which is not available in odp-dpdk.
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 061e690d..c780b25c 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -147,13 +147,9 @@ noinst_HEADERS = \ include/odp_pool_internal.h \ include/odp_posix_extensions.h \ ${top_srcdir}/platform/linux-generic/include/odp_queue_internal.h \ - ${top_srcdir}/platform/linux-generic/include/odp_queue_scalable_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_ring_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_queue_if.h \ ${top_srcdir}/platform/linux-generic/include/odp_schedule_if.h \ - ${top_srcdir}/platform/linux-generic/include/odp_schedule_scalable.h \ - ${top_srcdir}/platform/linux-generic/include/odp_schedule_scalable_config.h \ - ${top_srcdir}/platform/linux-generic/include/odp_schedule_scalable_ordered.h \ ${top_srcdir}/platform/linux-generic/include/odp_sorted_list_internal.h \ include/odp_shm_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_timer_internal.h \ @@ -197,15 +193,12 @@ __LIB__libodp_dpdk_la_SOURCES = \ odp_pool.c \ ../linux-generic/odp_queue.c \ ../linux-generic/odp_queue_if.c \ - ../linux-generic/odp_queue_scalable.c \ ../linux-generic/odp_rwlock.c \ ../linux-generic/odp_rwlock_recursive.c \ ../linux-generic/odp_schedule.c \ ../linux-generic/odp_schedule_if.c \ ../linux-generic/odp_schedule_sp.c \ ../linux-generic/odp_schedule_iquery.c \ - ../linux-generic/odp_schedule_scalable.c \ - ../linux-generic/odp_schedule_scalable_ordered.c \ odp_shared_memory.c \ ../linux-generic/odp_sorted_list.c \ ../linux-generic/odp_spinlock.c \ diff --git a/platform/linux-dpdk/m4/odp_schedule.m4 b/platform/linux-dpdk/m4/odp_schedule.m4 deleted file mode 120000 index 7b211bd8..00000000 --- a/platform/linux-dpdk/m4/odp_schedule.m4 +++ /dev/null @@ -1 +0,0 @@ -../../linux-generic/m4/odp_schedule.m4 \ No newline at end of file diff --git a/platform/linux-dpdk/m4/odp_schedule.m4 b/platform/linux-dpdk/m4/odp_schedule.m4 new file mode 100644 index 00000000..bb3980ca --- /dev/null +++ b/platform/linux-dpdk/m4/odp_schedule.m4 @@ -0,0 +1,15 @@ +AC_ARG_ENABLE([schedule-sp], + [ --enable-schedule-sp enable strict priority scheduler], + [if test x$enableval = xyes; then + schedule_sp_enabled=yes + AC_DEFINE([ODP_SCHEDULE_SP], [1], + [Define to 1 to enable strict priority scheduler]) + fi]) + +AC_ARG_ENABLE([schedule-iquery], + [ --enable-schedule-iquery enable interests query (sparse bitmap) scheduler], + [if test x$enableval = xyes; then + schedule_iquery_enabled=yes + AC_DEFINE([ODP_SCHEDULE_IQUERY], [1], + [Define to 1 to enable interests query scheduler]) + fi])
commit b0889a12ae054fe34b8380a38d0546b4cdc9cb42 Author: Matias Elo matias.elo@nokia.com Date: Tue Feb 13 10:50:54 2018 +0200
linux-dpdk: crypto: switch back to linux-generic implementation
Switch temporarily back to linux-generic crypto implementation until the crypto implementation is updated to use the new dpdk crypto api.
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 15c962ff..061e690d 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -178,7 +178,7 @@ __LIB__libodp_dpdk_la_SOURCES = \ ../linux-generic/odp_cpu.c \ ../linux-generic/odp_cpumask.c \ ../linux-generic/odp_cpumask_task.c \ - odp_crypto.c \ + ../linux-generic/odp_crypto.c \ odp_errno.c \ ../linux-generic/odp_event.c \ ../linux-generic/odp_hash.c \
commit d565489daf3910daa5f5fa4d67c1da5531d5230e Author: Matias Elo matias.elo@nokia.com Date: Tue Feb 13 10:11:58 2018 +0200
Port 4e283f8 "linux-gen: more unification of arch-specific code"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 9f52a1f5..15c962ff 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -231,6 +231,7 @@ arch_odp_headers = arch/arm/odp/api/cpu_arch.h noinst_HEADERS += arch/arm/odp_atomic.h \ arch/arm/odp_cpu.h \ arch/arm/odp_cpu_idling.h \ + arch/default/odp_cpu_idling.h \ arch/arm/odp_llsc.h endif if ARCH_IS_AARCH64 @@ -241,6 +242,7 @@ arch_odp_headers = arch/aarch64/odp/api/cpu_arch.h noinst_HEADERS += arch/aarch64/odp_atomic.h \ arch/aarch64/odp_cpu.h \ arch/aarch64/odp_cpu_idling.h \ + arch/default/odp_cpu_idling.h \ arch/aarch64/odp_llsc.h endif if ARCH_IS_MIPS64 @@ -248,14 +250,16 @@ __LIB__libodp_dpdk_la_SOURCES += arch/mips64/odp_cpu_cycles.c \ arch/default/odp_global_time.c \ arch/mips64/odp_sysinfo_parse.c arch_odp_headers = arch/mips64/odp/api/cpu_arch.h -noinst_HEADERS += arch/mips64/odp_cpu.h +noinst_HEADERS += arch/default/odp_cpu.h \ + arch/default/odp_cpu_idling.h endif if ARCH_IS_POWERPC __LIB__libodp_dpdk_la_SOURCES += arch/default/odp_cpu_cycles.c \ arch/default/odp_global_time.c \ arch/powerpc/odp_sysinfo_parse.c arch_odp_headers = arch/powerpc/odp/api/cpu_arch.h -noinst_HEADERS += arch/powerpc/odp_cpu.h +noinst_HEADERS += arch/default/odp_cpu.h \ + arch/default/odp_cpu_idling.h endif if ARCH_IS_X86 __LIB__libodp_dpdk_la_SOURCES += arch/x86/cpu_flags.c \ @@ -264,7 +268,8 @@ __LIB__libodp_dpdk_la_SOURCES += arch/x86/cpu_flags.c \ arch/x86/odp_sysinfo_parse.c arch_odp_headers = arch/x86/odp/api/cpu_arch.h noinst_HEADERS += arch/x86/cpu_flags.h -noinst_HEADERS += arch/x86/odp_cpu.h +noinst_HEADERS += arch/default/odp_cpu.h \ + arch/default/odp_cpu_idling.h endif
noinst_HEADERS += arch/default/odp/api/cpu_arch.h
commit f8c136fea8d68f9506bef8c4afcf54374873bd84 Author: Matias Elo matias.elo@nokia.com Date: Tue Feb 13 09:50:17 2018 +0200
Port 7c10aec "linux-gen: update api-next to follow merged changes"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index eead8732..9f52a1f5 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -12,6 +12,7 @@ AM_CPPFLAGS += -I$(top_builddir)/include AM_CPPFLAGS += -Iinclude AM_CPPFLAGS += -I$(top_srcdir)/platform/$(with_platform)/arch/$(ARCH_DIR) AM_CPPFLAGS += -I$(top_srcdir)/platform/$(with_platform)/arch/default +AM_CPPFLAGS += -DSYSCONFDIR="@sysconfdir@"
AM_CPPFLAGS += $(OPENSSL_CPPFLAGS) AM_CPPFLAGS += $(DPDK_CPPFLAGS) @@ -237,6 +238,10 @@ __LIB__libodp_dpdk_la_SOURCES += arch/default/odp_cpu_cycles.c \ arch/aarch64/odp_global_time.c \ arch/default/odp_sysinfo_parse.c arch_odp_headers = arch/aarch64/odp/api/cpu_arch.h +noinst_HEADERS += arch/aarch64/odp_atomic.h \ + arch/aarch64/odp_cpu.h \ + arch/aarch64/odp_cpu_idling.h \ + arch/aarch64/odp_llsc.h endif if ARCH_IS_MIPS64 __LIB__libodp_dpdk_la_SOURCES += arch/mips64/odp_cpu_cycles.c \
commit 110f18dfa634511f92d3d284b959b6dff5e0ddbf Author: Matias Elo matias.elo@nokia.com Date: Tue Feb 13 09:34:54 2018 +0200
Port ca75ed6 "linux-gen: sched scalable: add scalable scheduler"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index f02bdcb5..eead8732 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -146,9 +146,13 @@ noinst_HEADERS = \ include/odp_pool_internal.h \ include/odp_posix_extensions.h \ ${top_srcdir}/platform/linux-generic/include/odp_queue_internal.h \ + ${top_srcdir}/platform/linux-generic/include/odp_queue_scalable_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_ring_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_queue_if.h \ ${top_srcdir}/platform/linux-generic/include/odp_schedule_if.h \ + ${top_srcdir}/platform/linux-generic/include/odp_schedule_scalable.h \ + ${top_srcdir}/platform/linux-generic/include/odp_schedule_scalable_config.h \ + ${top_srcdir}/platform/linux-generic/include/odp_schedule_scalable_ordered.h \ ${top_srcdir}/platform/linux-generic/include/odp_sorted_list_internal.h \ include/odp_shm_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_timer_internal.h \ @@ -192,12 +196,15 @@ __LIB__libodp_dpdk_la_SOURCES = \ odp_pool.c \ ../linux-generic/odp_queue.c \ ../linux-generic/odp_queue_if.c \ + ../linux-generic/odp_queue_scalable.c \ ../linux-generic/odp_rwlock.c \ ../linux-generic/odp_rwlock_recursive.c \ ../linux-generic/odp_schedule.c \ ../linux-generic/odp_schedule_if.c \ ../linux-generic/odp_schedule_sp.c \ ../linux-generic/odp_schedule_iquery.c \ + ../linux-generic/odp_schedule_scalable.c \ + ../linux-generic/odp_schedule_scalable_ordered.c \ odp_shared_memory.c \ ../linux-generic/odp_sorted_list.c \ ../linux-generic/odp_spinlock.c \ diff --git a/platform/linux-dpdk/include/odp_config_internal.h b/platform/linux-dpdk/include/odp_config_internal.h index 65f1eac6..8eccc280 100644 --- a/platform/linux-dpdk/include/odp_config_internal.h +++ b/platform/linux-dpdk/include/odp_config_internal.h @@ -21,6 +21,13 @@ extern "C" { */ #define ODP_CONFIG_QUEUES 1024
+/* + * Maximum queue depth. Maximum number of elements that can be stored in a + * queue. This value is used only when the size is not explicitly provided + * during queue creation. + */ +#define CONFIG_QUEUE_SIZE 4096 + /* * Maximum number of ordered locks per queue */ @@ -122,16 +129,6 @@ extern "C" { */ #define CONFIG_POOL_CACHE_SIZE 256
-/* - * Size of the virtual address space pre-reserver for ISHM - * - * This is just virtual space preallocation size, not memory allocation. - * This address space is used by ISHM to map things at a common address in - * all ODP threads (when the _ODP_ISHM_SINGLE_VA flag is used). - * In bytes. - */ -#define ODP_CONFIG_ISHM_VA_PREALLOC_SZ (536870912L) - #ifdef __cplusplus } #endif
commit 72c11161cb01e879b2fbea32cc2cbdc050b350c4 Author: Matias Elo matias.elo@nokia.com Date: Tue Feb 13 09:28:16 2018 +0200
Port c93a573 "linux-gen: sched scalable: add a concurrent queue"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 87bb6b0a..f02bdcb5 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -133,6 +133,7 @@ noinst_HEADERS = \ ${top_srcdir}/platform/linux-generic/include/odp_forward_typedefs_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_ipsec_internal.h \ + ${top_srcdir}/platform/linux-generic/include/odp_llqueue.h \ include/odp_packet_dpdk.h \ include/odp_packet_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_name_table_internal.h \
commit 54ba959bff97efaef1f9ad789acd26b3a5877a47 Author: Matias Elo matias.elo@nokia.com Date: Tue Feb 13 09:27:19 2018 +0200
Port b65bae9 "linux-gen: sched scalable: add a bitset"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index b884799c..87bb6b0a 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -122,6 +122,7 @@ noinst_HEADERS = \ include/odp_buffer_inlines.h \ include/odp_buffer_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_bitmap_internal.h \ + ${top_srcdir}/platform/linux-generic/include/odp_bitset.h \ ${top_srcdir}/platform/linux-generic/include/odp_classification_internal.h \ include/odp_config_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_debug_internal.h \
commit f4e266977cebce35ded91b94b74763cb224e2875 Author: Matias Elo matias.elo@nokia.com Date: Tue Feb 13 09:24:07 2018 +0200
Port a8e5f4e "linux-gen: sched scalable: add arch files"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 25c17154..b884799c 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -11,6 +11,7 @@ AM_CPPFLAGS += -I$(top_srcdir)/include/odp/arch/@ARCH_ABI@ AM_CPPFLAGS += -I$(top_builddir)/include AM_CPPFLAGS += -Iinclude AM_CPPFLAGS += -I$(top_srcdir)/platform/$(with_platform)/arch/$(ARCH_DIR) +AM_CPPFLAGS += -I$(top_srcdir)/platform/$(with_platform)/arch/default
AM_CPPFLAGS += $(OPENSSL_CPPFLAGS) AM_CPPFLAGS += $(DPDK_CPPFLAGS) @@ -217,6 +218,10 @@ __LIB__libodp_dpdk_la_SOURCES += arch/default/odp_cpu_cycles.c \ arch/default/odp_global_time.c \ arch/default/odp_sysinfo_parse.c arch_odp_headers = arch/arm/odp/api/cpu_arch.h +noinst_HEADERS += arch/arm/odp_atomic.h \ + arch/arm/odp_cpu.h \ + arch/arm/odp_cpu_idling.h \ + arch/arm/odp_llsc.h endif if ARCH_IS_AARCH64 __LIB__libodp_dpdk_la_SOURCES += arch/default/odp_cpu_cycles.c \ @@ -229,12 +234,14 @@ __LIB__libodp_dpdk_la_SOURCES += arch/mips64/odp_cpu_cycles.c \ arch/default/odp_global_time.c \ arch/mips64/odp_sysinfo_parse.c arch_odp_headers = arch/mips64/odp/api/cpu_arch.h +noinst_HEADERS += arch/mips64/odp_cpu.h endif if ARCH_IS_POWERPC __LIB__libodp_dpdk_la_SOURCES += arch/default/odp_cpu_cycles.c \ arch/default/odp_global_time.c \ arch/powerpc/odp_sysinfo_parse.c arch_odp_headers = arch/powerpc/odp/api/cpu_arch.h +noinst_HEADERS += arch/powerpc/odp_cpu.h endif if ARCH_IS_X86 __LIB__libodp_dpdk_la_SOURCES += arch/x86/cpu_flags.c \ @@ -243,6 +250,7 @@ __LIB__libodp_dpdk_la_SOURCES += arch/x86/cpu_flags.c \ arch/x86/odp_sysinfo_parse.c arch_odp_headers = arch/x86/odp/api/cpu_arch.h noinst_HEADERS += arch/x86/cpu_flags.h +noinst_HEADERS += arch/x86/odp_cpu.h endif
noinst_HEADERS += arch/default/odp/api/cpu_arch.h
commit d76aebd20d9331ac0069850a6fee91b7c2808a25 Author: Matias Elo matias.elo@nokia.com Date: Tue Feb 13 09:18:45 2018 +0200
Port 9531b4a "linux-gen: packet: implement event filter packet"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index ce2d0c42..ab8c4841 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -264,6 +264,27 @@ void odp_packet_to_event_multi(const odp_packet_t pkt[], odp_event_t ev[], ev[i] = odp_packet_to_event(pkt[i]); }
+int odp_event_filter_packet(const odp_event_t event[], + odp_packet_t packet[], + odp_event_t remain[], int num) +{ + int i; + int num_pkt = 0; + int num_rem = 0; + + for (i = 0; i < num; i++) { + if (odp_event_type(event[i]) == ODP_EVENT_PACKET) { + packet[num_pkt] = odp_packet_from_event(event[i]); + num_pkt++; + } else { + remain[num_rem] = event[i]; + num_rem++; + } + } + + return num_pkt; +} + uint32_t odp_packet_buf_len(odp_packet_t pkt) { return odp_packet_hdr(pkt)->buf_hdr.totsize;
commit 557049e9fe2658cd9a72e92efb71e4957ca8852e Author: Matias Elo matias.elo@nokia.com Date: Tue Feb 13 09:17:05 2018 +0200
Port 538a3db "linux-gen: packet: multi converts and single pool free"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index f07da1b8..ce2d0c42 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -173,6 +173,11 @@ void odp_packet_free_multi(const odp_packet_t pkt[], int num) } }
+void odp_packet_free_sp(const odp_packet_t pkt[], int num) +{ + odp_packet_free_multi(pkt, num); +} + int odp_packet_reset(odp_packet_t pkt, uint32_t len) { odp_packet_hdr_t *const pkt_hdr = odp_packet_hdr(pkt); @@ -241,6 +246,24 @@ odp_event_t odp_packet_to_event(odp_packet_t pkt) return (odp_event_t)buffer_handle(odp_packet_hdr(pkt)); }
+void odp_packet_from_event_multi(odp_packet_t pkt[], const odp_event_t ev[], + int num) +{ + int i; + + for (i = 0; i < num; i++) + pkt[i] = odp_packet_from_event(ev[i]); +} + +void odp_packet_to_event_multi(const odp_packet_t pkt[], odp_event_t ev[], + int num) +{ + int i; + + for (i = 0; i < num; i++) + ev[i] = odp_packet_to_event(pkt[i]); +} + uint32_t odp_packet_buf_len(odp_packet_t pkt) { return odp_packet_hdr(pkt)->buf_hdr.totsize;
commit 5bda012d87217d6b5cb09d02eb3cd14f412a8579 Author: Matias Elo matias.elo@nokia.com Date: Mon Feb 12 14:46:08 2018 +0200
linux-dpdk: pktio: implement MAC address set function
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp_packet_io_internal.h b/platform/linux-dpdk/include/odp_packet_io_internal.h index 8ee00f59..c5718f73 100644 --- a/platform/linux-dpdk/include/odp_packet_io_internal.h +++ b/platform/linux-dpdk/include/odp_packet_io_internal.h @@ -151,6 +151,7 @@ typedef struct pktio_if_ops { int (*promisc_mode_set)(pktio_entry_t *pktio_entry, int enable); int (*promisc_mode_get)(pktio_entry_t *pktio_entry); int (*mac_get)(pktio_entry_t *pktio_entry, void *mac_addr); + int (*mac_set)(pktio_entry_t *pktio_entry, const void *mac_addr); int (*link_status)(pktio_entry_t *pktio_entry); int (*capability)(pktio_entry_t *pktio_entry, odp_pktio_capability_t *capa); diff --git a/platform/linux-dpdk/odp_packet_dpdk.c b/platform/linux-dpdk/odp_packet_dpdk.c index b000a8a2..90b33e8e 100644 --- a/platform/linux-dpdk/odp_packet_dpdk.c +++ b/platform/linux-dpdk/odp_packet_dpdk.c @@ -155,8 +155,10 @@ static int setup_pkt_dpdk(odp_pktio_t pktio ODP_UNUSED, pktio_entry_t *pktio_ent uint8_t portid = 0; uint32_t mtu; struct rte_eth_dev_info dev_info; + struct ether_addr mac_addr; pkt_dpdk_t * const pkt_dpdk = &pktio_entry->s.pkt_dpdk; int i; + int ret; unsigned max_queues;
if (!_dpdk_netdev_is_valid(netdev)) { @@ -185,6 +187,16 @@ static int setup_pkt_dpdk(odp_pktio_t pktio ODP_UNUSED, pktio_entry_t *pktio_ent
_dpdk_print_port_mac(portid);
+ /* Check if setting default MAC address is supporter */ + rte_eth_macaddr_get(portid, &mac_addr); + ret = rte_eth_dev_default_mac_addr_set(portid, &mac_addr); + if (ret == 0) { + pktio_entry->s.capa.set_op.op.mac_addr = 1; + } else if (ret != -ENOTSUP) { + ODP_ERR("Failed to set interface default MAC\n"); + return -1; + } + max_queues = RTE_MIN(dev_info.max_rx_queues, PKTIO_MAX_QUEUES); /* ixgbe devices support only 16 RX queues in RSS mode */ if (!strncmp(dev_info.driver_name, IXGBE_DRV_NAME, @@ -660,6 +672,13 @@ static int mac_get_pkt_dpdk(pktio_entry_t *pktio_entry, void *mac_addr) return ETH_ALEN; }
+static int mac_set_pkt_dpdk(pktio_entry_t *pktio_entry, const void *mac_addr) +{ + struct ether_addr addr = *(const struct ether_addr *)mac_addr; + + return rte_eth_dev_default_mac_addr_set(pktio_entry->s.pkt_dpdk.portid, + &addr); +}
static int capability_pkt_dpdk(pktio_entry_t *pktio_entry, odp_pktio_capability_t *capa) @@ -731,6 +750,7 @@ const pktio_if_ops_t dpdk_pktio_ops = { .promisc_mode_set = promisc_mode_set_pkt_dpdk, .promisc_mode_get = promisc_mode_get_pkt_dpdk, .mac_get = mac_get_pkt_dpdk, + .mac_set = mac_set_pkt_dpdk, .link_status = link_status_pkt_dpdk, .capability = capability_pkt_dpdk, .config = NULL,
commit a6df2bd39d271e52be0bf01814f8502c53b9f5e1 Author: Matias Elo matias.elo@nokia.com Date: Mon Feb 12 15:36:33 2018 +0200
Port b041ee9 "linux-gen: dpdk: checksum insert enabled flag"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp_packet_io_internal.h b/platform/linux-dpdk/include/odp_packet_io_internal.h index 666cb8df..8ee00f59 100644 --- a/platform/linux-dpdk/include/odp_packet_io_internal.h +++ b/platform/linux-dpdk/include/odp_packet_io_internal.h @@ -67,7 +67,8 @@ struct pktio_entry { /* These two locks together lock the whole pktio device */ odp_ticketlock_t rxl; /**< RX ticketlock */ odp_ticketlock_t txl; /**< TX ticketlock */ - int cls_enabled; /**< is classifier enabled */ + uint8_t cls_enabled; /**< classifier enabled */ + uint8_t chksum_insert_ena; /**< pktout checksum offload enabled */ odp_pktio_t handle; /**< pktio handle */ union { pkt_loop_t pkt_loop; /**< Using loopback for IO */
commit 3f45b65b2f145acc8d8ee5a687d0c67b4cbaf3d3 Author: Matias Elo matias.elo@nokia.com Date: Mon Feb 12 15:33:59 2018 +0200
Port fb80eb7 "linux-gen: pool: implement max_num info"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_pool.c b/platform/linux-dpdk/odp_pool.c index 01670940..7a532048 100644 --- a/platform/linux-dpdk/odp_pool.c +++ b/platform/linux-dpdk/odp_pool.c @@ -618,6 +618,9 @@ int odp_pool_info(odp_pool_t pool_hdl, odp_pool_info_t *info) info->name = pool->name; info->params = pool->params;
+ if (pool->params.type == ODP_POOL_PACKET) + info->pkt.max_num = pool->rte_mempool->size; + return 0; }
commit 5af199c09a583303b2101540a9af3919f9881411 Author: Matias Elo matias.elo@nokia.com Date: Mon Feb 12 15:31:25 2018 +0200
Port 1af98e5 "linux-gen: dpdk: fix maximum frame length value"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp_packet_io_internal.h b/platform/linux-dpdk/include/odp_packet_io_internal.h index 8e4e6cfe..666cb8df 100644 --- a/platform/linux-dpdk/include/odp_packet_io_internal.h +++ b/platform/linux-dpdk/include/odp_packet_io_internal.h @@ -54,6 +54,7 @@ typedef struct { uint8_t lockless_tx; /**< no locking for tx */ uint8_t min_rx_burst; /**< minimum RX burst size */ odp_pktin_hash_proto_t hash; /**< Packet input hash protocol */ + uint16_t mtu; /**< maximum transmission unit */ char ifname[32]; odp_ticketlock_t rx_lock[PKTIO_MAX_QUEUES]; /**< RX queue locks */ odp_ticketlock_t tx_lock[PKTIO_MAX_QUEUES]; /**< TX queue locks */ diff --git a/platform/linux-dpdk/odp_packet_dpdk.c b/platform/linux-dpdk/odp_packet_dpdk.c index 8fb18157..b000a8a2 100644 --- a/platform/linux-dpdk/odp_packet_dpdk.c +++ b/platform/linux-dpdk/odp_packet_dpdk.c @@ -153,6 +153,7 @@ static int setup_pkt_dpdk(odp_pktio_t pktio ODP_UNUSED, pktio_entry_t *pktio_ent const char *netdev, odp_pool_t pool ODP_UNUSED) { uint8_t portid = 0; + uint32_t mtu; struct rte_eth_dev_info dev_info; pkt_dpdk_t * const pkt_dpdk = &pktio_entry->s.pkt_dpdk; int i; @@ -193,6 +194,13 @@ static int setup_pkt_dpdk(odp_pktio_t pktio ODP_UNUSED, pktio_entry_t *pktio_ent pktio_entry->s.capa.max_output_queues = RTE_MIN(dev_info.max_tx_queues, PKTIO_MAX_QUEUES);
+ mtu = mtu_get_pkt_dpdk(pktio_entry); + if (mtu == 0) { + ODP_ERR("Failed to read interface MTU\n"); + return -1; + } + pkt_dpdk->mtu = mtu + _ODP_ETHHDR_LEN; + for (i = 0; i < PKTIO_MAX_QUEUES; i++) { odp_ticketlock_init(&pkt_dpdk->rx_lock[i]); odp_ticketlock_init(&pkt_dpdk->tx_lock[i]); @@ -498,7 +506,7 @@ static int send_pkt_dpdk(pktio_entry_t *pktio_entry, int index, if (odp_unlikely(rte_errno != 0)) return -1;
- mtu = mtu_get_pkt_dpdk(pktio_entry); + mtu = pktio_entry->s.pkt_dpdk.mtu; if (odp_unlikely(odp_packet_len(pkt_table[0]) > mtu)) { __odp_errno = EMSGSIZE; return -1; @@ -545,6 +553,13 @@ static uint32_t mtu_get_pkt_dpdk(pktio_entry_t *pktio_entry) return mtu; }
+static uint32_t dpdk_frame_maxlen(pktio_entry_t *pktio_entry) +{ + pkt_dpdk_t *pkt_dpdk = &pktio_entry->s.pkt_dpdk; + + return pkt_dpdk->mtu; +} + static int _dpdk_vdev_promisc_mode_set(uint8_t port_id, int enable) { struct rte_eth_dev_info dev_info = {0}; @@ -712,7 +727,7 @@ const pktio_if_ops_t dpdk_pktio_ops = { .stats_reset = stats_reset_pkt_dpdk, .pktin_ts_res = NULL, .pktin_ts_from_ns = NULL, - .mtu_get = mtu_get_pkt_dpdk, + .mtu_get = dpdk_frame_maxlen, .promisc_mode_set = promisc_mode_set_pkt_dpdk, .promisc_mode_get = promisc_mode_get_pkt_dpdk, .mac_get = mac_get_pkt_dpdk,
commit 29444086bc560667b08bcfaf3ff1cd96a0f3d1d9 Author: Matias Elo matias.elo@nokia.com Date: Mon Feb 12 15:11:31 2018 +0200
Port 9e3484a "linux-gen: time: implement odp_time_diff_ns"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_time.c b/platform/linux-dpdk/odp_time.c index 17125518..768dd6b8 100644 --- a/platform/linux-dpdk/odp_time.c +++ b/platform/linux-dpdk/odp_time.c @@ -276,6 +276,15 @@ odp_time_t odp_time_diff(odp_time_t t2, odp_time_t t1) return time; }
+uint64_t odp_time_diff_ns(odp_time_t t2, odp_time_t t1) +{ + odp_time_t time; + + time.u64 = t2.u64 - t1.u64; + + return global.handler.time_to_ns(time); +} + uint64_t odp_time_to_ns(odp_time_t time) { return global.handler.time_to_ns(time);
commit 0ab0d895fde82e8ecf70eb3b4860571a42927654 Author: Matias Elo matias.elo@nokia.com Date: Mon Feb 12 15:04:32 2018 +0200
Port 28ece47 "linux-gen: chksum: implement checksum insertion override functions"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index f5bafedd..f07da1b8 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -566,6 +566,22 @@ uint16_t odp_packet_ones_comp(odp_packet_t pkt, odp_packet_data_range_t *range) return 0; }
+void odp_packet_l3_chksum_insert(odp_packet_t pkt, int insert) +{ + odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); + + pkt_hdr->p.output_flags.l3_chksum_set = 1; + pkt_hdr->p.output_flags.l3_chksum = insert; +} + +void odp_packet_l4_chksum_insert(odp_packet_t pkt, int insert) +{ + odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); + + pkt_hdr->p.output_flags.l4_chksum_set = 1; + pkt_hdr->p.output_flags.l4_chksum = insert; +} + odp_packet_chksum_status_t odp_packet_l3_chksum_status(odp_packet_t pkt) { odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt);
commit 76543707d74b7566d7fa8b609462f12f228c808d Author: Matias Elo matias.elo@nokia.com Date: Mon Feb 12 14:58:45 2018 +0200
Port 83602dd "linux-gen: packet: implement checksum validation status functions"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index 4bc7518a..f5bafedd 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -566,6 +566,32 @@ uint16_t odp_packet_ones_comp(odp_packet_t pkt, odp_packet_data_range_t *range) return 0; }
+odp_packet_chksum_status_t odp_packet_l3_chksum_status(odp_packet_t pkt) +{ + odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); + + if (!pkt_hdr->p.input_flags.l3_chksum_done) + return ODP_PACKET_CHKSUM_UNKNOWN; + + if (pkt_hdr->p.error_flags.l3_chksum) + return ODP_PACKET_CHKSUM_BAD; + + return ODP_PACKET_CHKSUM_OK; +} + +odp_packet_chksum_status_t odp_packet_l4_chksum_status(odp_packet_t pkt) +{ + odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); + + if (!pkt_hdr->p.input_flags.l4_chksum_done) + return ODP_PACKET_CHKSUM_UNKNOWN; + + if (pkt_hdr->p.error_flags.l4_chksum) + return ODP_PACKET_CHKSUM_BAD; + + return ODP_PACKET_CHKSUM_OK; +} + void odp_packet_ts_set(odp_packet_t pkt, odp_time_t timestamp) { odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt);
commit 3043b34e38267506943cb38d3822cb0ffb4a4510 Author: Matias Elo matias.elo@nokia.com Date: Mon Feb 12 14:55:22 2018 +0200
Port c203135 "linux-gen: packet: add L3/L4 checksum validation flags"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_types.h b/platform/linux-dpdk/include/odp/api/plat/packet_types.h index e3d809cc..1c90304b 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_types.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_types.h @@ -147,6 +147,9 @@ typedef union {
uint64_t color:2; /**< Packet color for traffic mgmt */ uint64_t nodrop:1; /**< Drop eligibility status */ + + uint64_t l3_chksum_done:1; /**< L3 checksum validation done */ + uint64_t l4_chksum_done:1; /**< L4 checksum validation done */ uint64_t ipsec_udp:1; /**< UDP-encapsulated IPsec packet */ }; } _odp_packet_input_flags_t; diff --git a/platform/linux-dpdk/include/odp_packet_internal.h b/platform/linux-dpdk/include/odp_packet_internal.h index cac18d94..2a545d79 100644 --- a/platform/linux-dpdk/include/odp_packet_internal.h +++ b/platform/linux-dpdk/include/odp_packet_internal.h @@ -54,10 +54,12 @@ typedef union { uint32_t snap_len:1; /**< Snap length error */ uint32_t l2_chksum:1; /**< L2 checksum error, checks TBD */ uint32_t ip_err:1; /**< IP error, checks TBD */ + uint32_t l3_chksum:1; /**< L3 checksum error */ uint32_t tcp_err:1; /**< TCP error, checks TBD */ uint32_t udp_err:1; /**< UDP error, checks TBD */ uint32_t ipsec_err:1; /**< IPsec error */ uint32_t crypto_err:1; /**< Crypto packet operation error */ + uint32_t l4_chksum:1; /**< L4 checksum error */ }; } error_flags_t;
commit 8808863abe5caa521c470cab26c67554c909e047 Author: Matias Elo matias.elo@nokia.com Date: Mon Feb 12 14:51:58 2018 +0200
Port 9c6c0e2 "linux-gen: packet: dummy ones complement implementation"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index 32f46efd..4bc7518a 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -558,6 +558,14 @@ int odp_packet_l4_offset_set(odp_packet_t pkt, uint32_t offset) return 0; }
+uint16_t odp_packet_ones_comp(odp_packet_t pkt, odp_packet_data_range_t *range) +{ + (void)pkt; + range->length = 0; + range->offset = 0; + return 0; +} + void odp_packet_ts_set(odp_packet_t pkt, odp_time_t timestamp) { odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt);
commit 925fe7a78aee4a56c062352325b001e5ea8b1a24 Author: Matias Elo matias.elo@nokia.com Date: Mon Feb 12 14:49:27 2018 +0200
Port 76a066b "api: threshold: add odp_threshold_t parameter"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index aa75d177..25c17154 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -62,6 +62,7 @@ odpapiinclude_HEADERS = \ include/odp/api/sync.h \ include/odp/api/system_info.h \ include/odp/api/thread.h \ + include/odp/api/threshold.h \ include/odp/api/thrmask.h \ include/odp/api/ticketlock.h \ include/odp/api/time.h \ diff --git a/platform/linux-dpdk/include/odp/api/threshold.h b/platform/linux-dpdk/include/odp/api/threshold.h new file mode 120000 index 00000000..f470f0aa --- /dev/null +++ b/platform/linux-dpdk/include/odp/api/threshold.h @@ -0,0 +1 @@ +../../../../linux-generic/include/odp/api/threshold.h \ No newline at end of file
commit f167dfd2ea55731dc2c330a452c49b02b092ff57 Author: Matias Elo matias.elo@nokia.com Date: Mon Feb 12 14:16:05 2018 +0200
Port 999cbfb "linux-generic: pool: implementation for min and max headroom configuration"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_pool.c b/platform/linux-dpdk/odp_pool.c index b99b4501..01670940 100644 --- a/platform/linux-dpdk/odp_pool.c +++ b/platform/linux-dpdk/odp_pool.c @@ -133,6 +133,7 @@ int odp_pool_capability(odp_pool_capability_t *capa) capa->pkt.max_len = 0; capa->pkt.max_num = CONFIG_POOL_MAX_NUM; capa->pkt.min_headroom = CONFIG_PACKET_HEADROOM; + capa->pkt.max_headroom = CONFIG_PACKET_HEADROOM; capa->pkt.min_tailroom = CONFIG_PACKET_TAILROOM; capa->pkt.max_segs_per_pkt = CONFIG_PACKET_MAX_SEGS; capa->pkt.min_seg_len = CONFIG_PACKET_SEG_LEN_MIN; @@ -281,6 +282,11 @@ static int check_params(odp_pool_param_t *params) return -1; }
+ if (params->pkt.headroom > CONFIG_PACKET_HEADROOM) { + ODP_ERR("Packet headroom size not supported."); + return -1; + } + break;
case ODP_POOL_TIMEOUT: @@ -645,6 +651,7 @@ odp_pool_t odp_buffer_pool(odp_buffer_t buf) void odp_pool_param_init(odp_pool_param_t *params) { memset(params, 0, sizeof(odp_pool_param_t)); + params->pkt.headroom = CONFIG_PACKET_HEADROOM; }
uint64_t odp_pool_to_u64(odp_pool_t hdl)
commit 2d6fe1c5cc21d8eb03130fbceed8238806dd39a0 Author: Matias Elo matias.elo@nokia.com Date: Mon Feb 12 13:52:44 2018 +0200
linux-dpdk: shm: fix copying shm and memzone names
Previously the last character of a maximum length name was not saved.
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_shared_memory.c b/platform/linux-dpdk/odp_shared_memory.c index 31096fb8..91a7793d 100644 --- a/platform/linux-dpdk/odp_shared_memory.c +++ b/platform/linux-dpdk/odp_shared_memory.c @@ -97,7 +97,7 @@ static void name_to_mz_name(const char *name, char *mz_name)
/* Use pid and counter to make name unique */ do { - snprintf(mz_name, RTE_MEMZONE_NAMESIZE - 1, SHM_BLOCK_NAME, + snprintf(mz_name, RTE_MEMZONE_NAMESIZE, SHM_BLOCK_NAME, (odp_instance_t)odp_global_data.main_pid, i++, name); mz_name[RTE_MEMZONE_NAMESIZE - 1] = 0; } while (mz_name_used(mz_name)); @@ -270,7 +270,7 @@ odp_shm_t odp_shm_reserve(const char *name, uint64_t size, uint64_t align, }
block->mz = mz; - snprintf(block->name, ODP_SHM_NAME_LEN - 1, "%s", name); + snprintf(block->name, ODP_SHM_NAME_LEN, "%s", name); block->name[ODP_SHM_NAME_LEN - 1] = 0; block->type = SHM_TYPE_LOCAL; /* Note: ODP_SHM_SW_ONLY/ODP_SHM_PROC/ODP_SHM_SINGLE_VA flags are @@ -290,7 +290,7 @@ odp_shm_t odp_shm_import(const char *remote_name, odp_instance_t odp_inst, char mz_name[RTE_MEMZONE_NAMESIZE]; int idx;
- snprintf(mz_name, RTE_MEMZONE_NAMESIZE - 1, SHM_BLOCK_NAME, odp_inst, 0, + snprintf(mz_name, RTE_MEMZONE_NAMESIZE, SHM_BLOCK_NAME, odp_inst, 0, remote_name); mz_name[RTE_MEMZONE_NAMESIZE - 1] = 0;
@@ -316,7 +316,7 @@ odp_shm_t odp_shm_import(const char *remote_name, odp_instance_t odp_inst, block = &shm_tbl->block[idx];
block->mz = mz; - snprintf(block->name, ODP_SHM_NAME_LEN - 1, "%s", local_name); + snprintf(block->name, ODP_SHM_NAME_LEN, "%s", local_name); block->name[ODP_SHM_NAME_LEN - 1] = 0; block->type = SHM_TYPE_REMOTE;
commit a6a0a85f694216019a1e79ff78acf8dd40ce928c Author: Matias Elo matias.elo@nokia.com Date: Mon Feb 12 12:25:33 2018 +0200
Port 6fe2ad1 "linux-generic: add toeplitz hash algorithm"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index dd8d6ffd..aa75d177 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -154,6 +154,7 @@ noinst_HEADERS = \ include/protocols/ip.h \ include/protocols/ipsec.h \ include/protocols/tcp.h \ + include/protocols/thash.h \ include/protocols/udp.h \ Makefile.inc
commit c0c0c9541bfe135888cf869b53343e07021e40cb Author: Matias Elo matias.elo@nokia.com Date: Mon Feb 12 12:18:06 2018 +0200
Port 4fe8cc1 "timer: allow timer processing to run on worker cores"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_init.c b/platform/linux-dpdk/odp_init.c index ed6f711b..d16f6d99 100644 --- a/platform/linux-dpdk/odp_init.c +++ b/platform/linux-dpdk/odp_init.c @@ -231,7 +231,7 @@ int odp_init_global(odp_instance_t *instance, } stage = PKTIO_INIT;
- if (odp_timer_init_global()) { + if (odp_timer_init_global(params)) { ODP_ERR("ODP timer init failed.\n"); goto init_failed; }
commit 9f1f212d50d2acbda7919d5bc4b74ea8bcb2ad1b Author: Matias Elo matias.elo@nokia.com Date: Mon Feb 12 12:13:54 2018 +0200
linux-dpdk: shm: implement odp_shm_print()
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_shared_memory.c b/platform/linux-dpdk/odp_shared_memory.c index 8cb2b72c..31096fb8 100644 --- a/platform/linux-dpdk/odp_shared_memory.c +++ b/platform/linux-dpdk/odp_shared_memory.c @@ -436,6 +436,34 @@ void odp_shm_print_all(void) odp_spinlock_unlock(&shm_tbl->lock); }
+void odp_shm_print(odp_shm_t shm) +{ + shm_block_t *block; + int idx = handle_to_idx(shm); + + odp_spinlock_lock(&shm_tbl->lock); + + if (!handle_is_valid(shm)) { + odp_spinlock_unlock(&shm_tbl->lock); + return; + } + + block = &shm_tbl->block[idx]; + + ODP_PRINT("\nSHM block info\n--------------\n"); + ODP_PRINT(" name: %s\n", block->name); + ODP_PRINT(" type: %s\n", block->type == SHM_TYPE_LOCAL ? "local" + : "remote"); + ODP_PRINT(" flags: 0x%x\n", shm_zone(block->mz)->flags); + ODP_PRINT(" start: %p\n", block->mz->addr); + ODP_PRINT(" len: %" PRIu64 "\n", shm_size(block->mz)); + ODP_PRINT(" page size: %" PRIu64 "\n", block->mz->hugepage_sz); + ODP_PRINT(" NUMA ID: %" PRIi32 "\n", block->mz->socket_id); + ODP_PRINT("\n"); + + odp_spinlock_unlock(&shm_tbl->lock); +} + uint64_t odp_shm_to_u64(odp_shm_t hdl) { return _odp_pri(hdl);
commit f88b7beb810232609018396d81d46b0b59ee6946 Author: Matias Elo matias.elo@nokia.com Date: Mon Feb 12 10:54:04 2018 +0200
Port a7b3fbd "linux-gen: loop: support multiple loop devices"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp_packet_io_internal.h b/platform/linux-dpdk/include/odp_packet_io_internal.h index 4b32ce94..8e4e6cfe 100644 --- a/platform/linux-dpdk/include/odp_packet_io_internal.h +++ b/platform/linux-dpdk/include/odp_packet_io_internal.h @@ -44,6 +44,7 @@ struct pkt_dpdk_t; typedef struct { odp_queue_t loopq; /**< loopback queue for "loop" device */ odp_bool_t promisc; /**< promiscuous mode state */ + uint8_t idx; /**< index of "loop" device */ } pkt_loop_t;
/** Packet socket using dpdk mmaped rings for both Rx and Tx */
commit d5e3d4e6a3d0262385e2c65a5114045628423358 Author: Matias Elo matias.elo@nokia.com Date: Mon Feb 12 10:51:39 2018 +0200
Port 5cfc049 "linux-gen: crypto: populate sync/async_mode caps"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_crypto.c b/platform/linux-dpdk/odp_crypto.c index b2e29e33..5ed84bc8 100644 --- a/platform/linux-dpdk/odp_crypto.c +++ b/platform/linux-dpdk/odp_crypto.c @@ -337,6 +337,9 @@ int odp_crypto_capability(odp_crypto_capability_t *capability) /* Initialize crypto capability structure */ memset(capability, 0, sizeof(odp_crypto_capability_t));
+ capability->sync_mode = ODP_SUPPORT_YES; + capability->async_mode = ODP_SUPPORT_PREFERRED; + cdev_count = rte_cryptodev_count(); if (cdev_count == 0) { ODP_ERR("No crypto devices available\n");
commit 12158fe28e0cd98d982056744611c88a6bf5bd35 Author: Matias Elo matias.elo@nokia.com Date: Mon Feb 12 10:22:42 2018 +0200
Port da7dd62 "api: crypto: change aad.ptr to aad_ptr in packet params"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_crypto.c b/platform/linux-dpdk/odp_crypto.c index c887c472..b2e29e33 100644 --- a/platform/linux-dpdk/odp_crypto.c +++ b/platform/linux-dpdk/odp_crypto.c @@ -1039,7 +1039,7 @@ int odp_crypto_operation(odp_crypto_op_param_t *param, op->sym->auth.data.length = param->auth_range.length; }
- aad_head = param->aad.ptr; + aad_head = param->aad_ptr; aad_len = entry->p.auth_aad_len;
if (aad_len > 0) {
commit 685622e53f9f4b20ffe13184bcb85ba2b8327e1d Author: Matias Elo matias.elo@nokia.com Date: Mon Feb 12 10:39:40 2018 +0200
Port bdcea40 "linux-gen: adapt to odp_pktio_parser_layer_t removal"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp_packet_internal.h b/platform/linux-dpdk/include/odp_packet_internal.h index 2e28e0b0..cac18d94 100644 --- a/platform/linux-dpdk/include/odp_packet_internal.h +++ b/platform/linux-dpdk/include/odp_packet_internal.h @@ -225,11 +225,11 @@ int _odp_packet_copy_md_to_packet(odp_packet_t srcpkt, odp_packet_t dstpkt);
/* Perform packet parse up to a given protocol layer */ int packet_parse_layer(odp_packet_hdr_t *pkt_hdr, - odp_pktio_parser_layer_t layer); + odp_proto_layer_t layer);
/* Perform L3 and L4 parsing up to a given protocol layer */ int packet_parse_l3_l4(odp_packet_hdr_t *pkt_hdr, - odp_pktio_parser_layer_t layer, + odp_proto_layer_t layer, uint32_t l3_offset, uint16_t ethtype);
diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index 5c0b5da0..32f46efd 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -1358,7 +1358,7 @@ int packet_parse_common_l3_l4(packet_parser_t *prs, const uint8_t *parseptr,
prs->l3_offset = offset;
- if (layer <= ODP_PKTIO_PARSER_LAYER_L2) + if (layer <= ODP_PROTO_LAYER_L2) return prs->error_flags.all != 0;
/* Set l3 flag only for known ethtypes */ @@ -1389,7 +1389,7 @@ int packet_parse_common_l3_l4(packet_parser_t *prs, const uint8_t *parseptr, ip_proto = 255; /* Reserved invalid by IANA */ }
- if (layer == ODP_PKTIO_PARSER_LAYER_L3) + if (layer == ODP_PROTO_LAYER_L3) return prs->error_flags.all != 0;
/* Set l4 flag only for known ip_proto */ @@ -1461,7 +1461,7 @@ int packet_parse_common(packet_parser_t *prs, const uint8_t *ptr, parseptr = ptr; offset = 0;
- if (layer == ODP_PKTIO_PARSER_LAYER_NONE) + if (layer == ODP_PROTO_LAYER_NONE) return 0;
/* Assume valid L2 header, no CRC/FCS check in SW */ @@ -1480,7 +1480,7 @@ int packet_parse_common(packet_parser_t *prs, const uint8_t *ptr, * Simple packet parser */ int packet_parse_layer(odp_packet_hdr_t *pkt_hdr, - odp_pktio_parser_layer_t layer) + odp_proto_layer_t layer) { uint32_t seg_len = odp_packet_seg_len((odp_packet_t)pkt_hdr); uint32_t len = packet_len(pkt_hdr); @@ -1490,7 +1490,7 @@ int packet_parse_layer(odp_packet_hdr_t *pkt_hdr, }
int packet_parse_l3_l4(odp_packet_hdr_t *pkt_hdr, - odp_pktio_parser_layer_t layer, + odp_proto_layer_t layer, uint32_t l3_offset, uint16_t ethtype) {
commit a52e7f05e848ac6b1d984e2dab9e2dbb6b70be9a Author: Matias Elo matias.elo@nokia.com Date: Mon Feb 12 10:34:42 2018 +0200
Port 884d007 "linux-gen: packet: add flag for UDP-encapsulated IPsec packets"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_types.h b/platform/linux-dpdk/include/odp/api/plat/packet_types.h index 434f9225..e3d809cc 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_types.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_types.h @@ -147,6 +147,7 @@ typedef union {
uint64_t color:2; /**< Packet color for traffic mgmt */ uint64_t nodrop:1; /**< Drop eligibility status */ + uint64_t ipsec_udp:1; /**< UDP-encapsulated IPsec packet */ }; } _odp_packet_input_flags_t;
diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index 005288ca..5c0b5da0 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -1332,6 +1332,17 @@ static inline void parse_udp(packet_parser_t *prs, if (odp_unlikely(udplen < sizeof(_odp_udphdr_t))) prs->error_flags.udp_err = 1;
+ if (odp_cpu_to_be_16(_ODP_UDP_IPSEC_PORT) == udp->dst_port && + udplen > 4) { + uint32_t val; + + memcpy(&val, udp + 1, 4); + if (val != 0) { + prs->input_flags.ipsec = 1; + prs->input_flags.ipsec_udp = 1; + } + } + if (offset) *offset += sizeof(_odp_udphdr_t); *parseptr += sizeof(_odp_udphdr_t);
commit cc89d2303a6bb15b521e9be0fe56de896b33e496 Author: Matias Elo matias.elo@nokia.com Date: Mon Feb 12 10:31:37 2018 +0200
Port ecfb870 "linux-gen: don't include odp_ipsec_internal.h in odp_packet_internal.h"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp_packet_internal.h b/platform/linux-dpdk/include/odp_packet_internal.h index e4e30404..2e28e0b0 100644 --- a/platform/linux-dpdk/include/odp_packet_internal.h +++ b/platform/linux-dpdk/include/odp_packet_internal.h @@ -27,7 +27,7 @@ extern "C" { #include <odp/api/packet.h> #include <odp/api/packet_io.h> #include <odp/api/crypto.h> -#include <odp_ipsec_internal.h> +#include <odp/api/ipsec.h> #include <protocols/eth.h> #include <odp/api/plat/packet_types.h> #include <odp_queue_if.h>
commit a2ceab93262ac3eaffc15f3fd23121ea5ac8e71c Author: Matias Elo matias.elo@nokia.com Date: Mon Feb 12 10:30:01 2018 +0200
Port b35e2e7 "linux-gen: packet: set next layer offsets allways"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index 8093dca4..005288ca 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -1345,11 +1345,12 @@ int packet_parse_common_l3_l4(packet_parser_t *prs, const uint8_t *parseptr, { uint8_t ip_proto;
+ prs->l3_offset = offset; + if (layer <= ODP_PKTIO_PARSER_LAYER_L2) return prs->error_flags.all != 0;
- /* Set l3_offset+flag only for known ethtypes */ - prs->l3_offset = offset; + /* Set l3 flag only for known ethtypes */ prs->input_flags.l3 = 1;
/* Parse Layer 3 headers */ @@ -1357,12 +1358,14 @@ int packet_parse_common_l3_l4(packet_parser_t *prs, const uint8_t *parseptr, case _ODP_ETHTYPE_IPV4: prs->input_flags.ipv4 = 1; ip_proto = parse_ipv4(prs, &parseptr, &offset, frame_len); + prs->l4_offset = offset; break;
case _ODP_ETHTYPE_IPV6: prs->input_flags.ipv6 = 1; ip_proto = parse_ipv6(prs, &parseptr, &offset, frame_len, seg_len); + prs->l4_offset = offset; break;
case _ODP_ETHTYPE_ARP: @@ -1372,15 +1375,13 @@ int packet_parse_common_l3_l4(packet_parser_t *prs, const uint8_t *parseptr,
default: prs->input_flags.l3 = 0; - prs->l3_offset = ODP_PACKET_OFFSET_INVALID; ip_proto = 255; /* Reserved invalid by IANA */ }
if (layer == ODP_PKTIO_PARSER_LAYER_L3) return prs->error_flags.all != 0;
- /* Set l4_offset+flag only for known ip_proto */ - prs->l4_offset = offset; + /* Set l4 flag only for known ip_proto */ prs->input_flags.l4 = 1;
/* Parse Layer 4 headers */ @@ -1426,7 +1427,6 @@ int packet_parse_common_l3_l4(packet_parser_t *prs, const uint8_t *parseptr,
default: prs->input_flags.l4 = 0; - prs->l4_offset = ODP_PACKET_OFFSET_INVALID; break; }
commit d6e6ae2a506ba554115c22d282fc64f44abaa763 Author: Matias Elo matias.elo@nokia.com Date: Mon Feb 12 10:03:32 2018 +0200
Port 4fe49b7 "api: parse: set next layer offset"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index 53784a40..8093dca4 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -1503,7 +1503,7 @@ int odp_packet_parse(odp_packet_t pkt, uint32_t offset, uint32_t seg_len; uint32_t len = packet_len(pkt_hdr); odp_proto_t proto = param->proto; - odp_proto_layer_t layer = param->layer; + odp_proto_layer_t layer = param->last_layer; int ret; uint16_t ethtype;
commit 8459fd0292d5f056d30bb8ffe5b3e265f631ba16 Author: Matias Elo matias.elo@nokia.com Date: Fri Feb 9 14:27:22 2018 +0200
Port 4ed1ca5 "linux-gen: event: move event subtype to packet header"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp_buffer_inlines.h b/platform/linux-dpdk/include/odp_buffer_inlines.h index ab26554b..c28528bb 100644 --- a/platform/linux-dpdk/include/odp_buffer_inlines.h +++ b/platform/linux-dpdk/include/odp_buffer_inlines.h @@ -39,16 +39,6 @@ static inline void _odp_buffer_event_type_set(odp_buffer_t buf, int ev) buf_hdl_to_hdr(buf)->event_type = ev; }
-static inline odp_event_subtype_t _odp_buffer_event_subtype(odp_buffer_t buf) -{ - return buf_hdl_to_hdr(buf)->event_subtype; -} - -static inline void _odp_buffer_event_subtype_set(odp_buffer_t buf, int ev) -{ - buf_hdl_to_hdr(buf)->event_subtype = ev; -} - #ifdef __cplusplus } #endif diff --git a/platform/linux-dpdk/include/odp_buffer_internal.h b/platform/linux-dpdk/include/odp_buffer_internal.h index 99f400ae..1c88cdd1 100644 --- a/platform/linux-dpdk/include/odp_buffer_internal.h +++ b/platform/linux-dpdk/include/odp_buffer_internal.h @@ -65,9 +65,6 @@ struct odp_buffer_hdr_t { uint8_t burst_num; uint8_t burst_first;
- /* Event subtype. Should be ODP_EVENT_NO_SUBTYPE except packets. */ - int8_t event_subtype; - /* Next buf in a list */ struct odp_buffer_hdr_t *next;
diff --git a/platform/linux-dpdk/include/odp_packet_internal.h b/platform/linux-dpdk/include/odp_packet_internal.h index 86a5d17d..e4e30404 100644 --- a/platform/linux-dpdk/include/odp_packet_internal.h +++ b/platform/linux-dpdk/include/odp_packet_internal.h @@ -123,6 +123,9 @@ typedef struct {
odp_pktio_t input;
+ /* Event subtype */ + int8_t subtype; + /* * Members below are not initialized by packet_init() */ @@ -164,6 +167,16 @@ static inline odp_packet_t packet_from_buf_hdr(odp_buffer_hdr_t *buf_hdr) return (odp_packet_t)(odp_packet_hdr_t *)buf_hdr; }
+static inline odp_event_subtype_t packet_subtype(odp_packet_t pkt) +{ + return odp_packet_hdr(pkt)->subtype; +} + +static inline void packet_subtype_set(odp_packet_t pkt, int ev) +{ + odp_packet_hdr(pkt)->subtype = ev; +} + /** * Initialize ODP headers */ @@ -177,9 +190,8 @@ static inline void packet_init(odp_packet_hdr_t *pkt_hdr) pkt_hdr->p.l3_offset = ODP_PACKET_OFFSET_INVALID; pkt_hdr->p.l4_offset = ODP_PACKET_OFFSET_INVALID;
- if (odp_unlikely(pkt_hdr->buf_hdr.event_subtype != - ODP_EVENT_PACKET_BASIC)) - pkt_hdr->buf_hdr.event_subtype = ODP_EVENT_PACKET_BASIC; + if (odp_unlikely(pkt_hdr->subtype != ODP_EVENT_PACKET_BASIC)) + pkt_hdr->subtype = ODP_EVENT_PACKET_BASIC;
pkt_hdr->input = ODP_PKTIO_INVALID; } diff --git a/platform/linux-dpdk/odp_crypto.c b/platform/linux-dpdk/odp_crypto.c index 240acda2..c887c472 100644 --- a/platform/linux-dpdk/odp_crypto.c +++ b/platform/linux-dpdk/odp_crypto.c @@ -1361,8 +1361,7 @@ int odp_crypto_int(odp_packet_t pkt_in, }
/* Fill in result */ - _odp_buffer_event_subtype_set(packet_to_buffer(out_pkt), - ODP_EVENT_PACKET_CRYPTO); + packet_subtype_set(out_pkt, ODP_EVENT_PACKET_BASIC); op_result = get_op_result_from_packet(out_pkt); op_result->cipher_status.alg_err = rc_cipher; op_result->cipher_status.hw_err = ODP_CRYPTO_HW_ERR_NONE; diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index 17c0354c..53784a40 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -198,7 +198,7 @@ int odp_packet_reset(odp_packet_t pkt, uint32_t len) pkt_hdr->buf_hdr.next = NULL;
pkt_hdr->input = ODP_PKTIO_INVALID; - pkt_hdr->buf_hdr.event_subtype = ODP_EVENT_PACKET_BASIC; + pkt_hdr->subtype = ODP_EVENT_PACKET_BASIC;
mb->port = 0xff; mb->pkt_len = len; diff --git a/platform/linux-dpdk/odp_pool.c b/platform/linux-dpdk/odp_pool.c index 06d4d6a8..b99b4501 100644 --- a/platform/linux-dpdk/odp_pool.c +++ b/platform/linux-dpdk/odp_pool.c @@ -227,7 +227,6 @@ odp_dpdk_mbuf_ctor(struct rte_mempool *mp, buf_hdr->pool_ptr = pool; buf_hdr->type = mb_ctor_arg->type; buf_hdr->event_type = mb_ctor_arg->type; - buf_hdr->event_subtype = ODP_EVENT_NO_SUBTYPE; }
#define CHECK_U16_OVERFLOW(X) do { \
commit 4e071bb6167bf1fc196cf1576495858d96821183 Author: Matias Elo matias.elo@nokia.com Date: Fri Feb 9 14:17:03 2018 +0200
Port 69de1a1 "api: crypto: move AAD length to session param"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_crypto.c b/platform/linux-dpdk/odp_crypto.c index 8770356f..240acda2 100644 --- a/platform/linux-dpdk/odp_crypto.c +++ b/platform/linux-dpdk/odp_crypto.c @@ -36,6 +36,10 @@ typedef struct crypto_session_entry_s crypto_session_entry_t; struct crypto_session_entry_s { struct crypto_session_entry_s *next; + + /* Session creation parameters */ + odp_crypto_session_param_t p; + uint64_t rte_session; odp_bool_t do_cipher_first; struct rte_crypto_sym_xform cipher_xform; @@ -810,6 +814,9 @@ int odp_crypto_session_create(odp_crypto_session_param_t *param, goto err; }
+ /* Copy parameters */ + session->p = *param; + /* Cipher Data */ cipher_xform.cipher.key.data = rte_malloc("crypto key", param->cipher_key.length, 0); @@ -1033,7 +1040,7 @@ int odp_crypto_operation(odp_crypto_op_param_t *param, }
aad_head = param->aad.ptr; - aad_len = param->aad.length; + aad_len = entry->p.auth_aad_len;
if (aad_len > 0) { op->sym->auth.aad.data = rte_malloc("aad", aad_len, 0);
commit 1a223e327f2cddfb3358c09f010bded824c1385a Author: Matias Elo matias.elo@nokia.com Date: Fri Feb 9 14:01:38 2018 +0200
Port 21f60ee "linux-gen: crypto: set packet error flag depending on crypto result operation"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp_packet_internal.h b/platform/linux-dpdk/include/odp_packet_internal.h index 9c907a44..86a5d17d 100644 --- a/platform/linux-dpdk/include/odp_packet_internal.h +++ b/platform/linux-dpdk/include/odp_packet_internal.h @@ -57,6 +57,7 @@ typedef union { uint32_t tcp_err:1; /**< TCP error, checks TBD */ uint32_t udp_err:1; /**< UDP error, checks TBD */ uint32_t ipsec_err:1; /**< IPsec error */ + uint32_t crypto_err:1; /**< Crypto packet operation error */ }; } error_flags_t;
diff --git a/platform/linux-dpdk/odp_crypto.c b/platform/linux-dpdk/odp_crypto.c index a3fb44e2..8770356f 100644 --- a/platform/linux-dpdk/odp_crypto.c +++ b/platform/linux-dpdk/odp_crypto.c @@ -1311,6 +1311,7 @@ int odp_crypto_int(odp_packet_t pkt_in, odp_bool_t allocated = false; odp_packet_t out_pkt = *pkt_out; odp_crypto_packet_result_t *op_result; + odp_packet_hdr_t *pkt_hdr;
session = (odp_crypto_generic_session_t *)(intptr_t)param->session;
@@ -1364,6 +1365,9 @@ int odp_crypto_int(odp_packet_t pkt_in, (rc_cipher == ODP_CRYPTO_ALG_ERR_NONE) && (rc_auth == ODP_CRYPTO_ALG_ERR_NONE);
+ pkt_hdr = odp_packet_hdr(out_pkt); + pkt_hdr->p.error_flags.crypto_err = !op_result->ok; + /* Synchronous, simply return results */ *pkt_out = out_pkt;
commit 58fa1f016f6732c12b3c9da8513307a0469a1521 Author: Matias Elo matias.elo@nokia.com Date: Fri Feb 9 13:59:26 2018 +0200
Port 9754556 "linux-gen: crypto: drop extra memcpy on result return"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_crypto.c b/platform/linux-dpdk/odp_crypto.c index 0084a6e5..a3fb44e2 100644 --- a/platform/linux-dpdk/odp_crypto.c +++ b/platform/linux-dpdk/odp_crypto.c @@ -1308,7 +1308,6 @@ int odp_crypto_int(odp_packet_t pkt_in, odp_crypto_alg_err_t rc_cipher = ODP_CRYPTO_ALG_ERR_NONE; odp_crypto_alg_err_t rc_auth = ODP_CRYPTO_ALG_ERR_NONE; odp_crypto_generic_session_t *session; - odp_crypto_packet_result_t local_result; odp_bool_t allocated = false; odp_packet_t out_pkt = *pkt_out; odp_crypto_packet_result_t *op_result; @@ -1354,18 +1353,16 @@ int odp_crypto_int(odp_packet_t pkt_in, }
/* Fill in result */ - local_result.cipher_status.alg_err = rc_cipher; - local_result.cipher_status.hw_err = ODP_CRYPTO_HW_ERR_NONE; - local_result.auth_status.alg_err = rc_auth; - local_result.auth_status.hw_err = ODP_CRYPTO_HW_ERR_NONE; - local_result.ok = - (rc_cipher == ODP_CRYPTO_ALG_ERR_NONE) && - (rc_auth == ODP_CRYPTO_ALG_ERR_NONE); - _odp_buffer_event_subtype_set(packet_to_buffer(out_pkt), ODP_EVENT_PACKET_CRYPTO); op_result = get_op_result_from_packet(out_pkt); - *op_result = local_result; + op_result->cipher_status.alg_err = rc_cipher; + op_result->cipher_status.hw_err = ODP_CRYPTO_HW_ERR_NONE; + op_result->auth_status.alg_err = rc_auth; + op_result->auth_status.hw_err = ODP_CRYPTO_HW_ERR_NONE; + op_result->ok = + (rc_cipher == ODP_CRYPTO_ALG_ERR_NONE) && + (rc_auth == ODP_CRYPTO_ALG_ERR_NONE);
/* Synchronous, simply return results */ *pkt_out = out_pkt;
commit d3501168b73cd50678a811d9851e496817086d2b Author: Matias Elo matias.elo@nokia.com Date: Fri Feb 9 13:56:11 2018 +0200
Port 3233e07 "linux-gen: drop unnecessary odp_crypto_internal include"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp_packet_internal.h b/platform/linux-dpdk/include/odp_packet_internal.h index b6e6a5b4..9c907a44 100644 --- a/platform/linux-dpdk/include/odp_packet_internal.h +++ b/platform/linux-dpdk/include/odp_packet_internal.h @@ -27,7 +27,6 @@ extern "C" { #include <odp/api/packet.h> #include <odp/api/packet_io.h> #include <odp/api/crypto.h> -#include <odp_crypto_internal.h> #include <odp_ipsec_internal.h> #include <protocols/eth.h> #include <odp/api/plat/packet_types.h>
commit 1af64d372690672d7291f8b7ee5af941a6f4bf99 Author: Matias Elo matias.elo@nokia.com Date: Fri Feb 9 13:52:13 2018 +0200
Port 56432c4 "linux-gen: ipsec: mark IPsec packets with errors with error flag"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp_packet_internal.h b/platform/linux-dpdk/include/odp_packet_internal.h index daf57e9d..b6e6a5b4 100644 --- a/platform/linux-dpdk/include/odp_packet_internal.h +++ b/platform/linux-dpdk/include/odp_packet_internal.h @@ -57,6 +57,7 @@ typedef union { uint32_t ip_err:1; /**< IP error, checks TBD */ uint32_t tcp_err:1; /**< TCP error, checks TBD */ uint32_t udp_err:1; /**< UDP error, checks TBD */ + uint32_t ipsec_err:1; /**< IPsec error */ }; } error_flags_t;
commit 9b9f99344f8bd6c953d96ac8088992a160ba40cb Author: Matias Elo matias.elo@nokia.com Date: Fri Feb 9 13:49:27 2018 +0200
Port 4cb508a "linux-gen: packet: add parse API"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp_packet_internal.h b/platform/linux-dpdk/include/odp_packet_internal.h index e1bb510f..daf57e9d 100644 --- a/platform/linux-dpdk/include/odp_packet_internal.h +++ b/platform/linux-dpdk/include/odp_packet_internal.h @@ -255,8 +255,7 @@ static inline void packet_set_ts(odp_packet_hdr_t *pkt_hdr, odp_time_t *ts) }
int packet_parse_common(packet_parser_t *pkt_hdr, const uint8_t *ptr, - uint32_t pkt_len, uint32_t seg_len, - odp_pktio_parser_layer_t layer); + uint32_t pkt_len, uint32_t seg_len, int layer);
int _odp_packet_set_data(odp_packet_t pkt, uint32_t offset, uint8_t c, uint32_t len); diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index 3bd7e79b..17c0354c 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -1341,8 +1341,7 @@ static inline int packet_parse_common_l3_l4(packet_parser_t *prs, const uint8_t *parseptr, uint32_t offset, uint32_t frame_len, uint32_t seg_len, - odp_pktio_parser_layer_t layer, - uint16_t ethtype) + int layer, uint16_t ethtype) { uint8_t ip_proto;
@@ -1442,7 +1441,7 @@ int packet_parse_common_l3_l4(packet_parser_t *prs, const uint8_t *parseptr, */ int packet_parse_common(packet_parser_t *prs, const uint8_t *ptr, uint32_t frame_len, uint32_t seg_len, - odp_pktio_parser_layer_t layer) + int layer) { uint32_t offset; uint16_t ethtype; @@ -1496,6 +1495,62 @@ int packet_parse_l3_l4(odp_packet_hdr_t *pkt_hdr, layer, ethtype); }
+int odp_packet_parse(odp_packet_t pkt, uint32_t offset, + const odp_packet_parse_param_t *param) +{ + odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); + void *data; + uint32_t seg_len; + uint32_t len = packet_len(pkt_hdr); + odp_proto_t proto = param->proto; + odp_proto_layer_t layer = param->layer; + int ret; + uint16_t ethtype; + + if (proto == ODP_PROTO_NONE || layer == ODP_PROTO_LAYER_NONE) + return -1; + + data = _odp_packet_offset(pkt, offset, &seg_len, NULL); + + if (data == NULL) + return -1; + + packet_parse_reset(pkt_hdr); + + if (proto == ODP_PROTO_ETH) { + ret = packet_parse_common(&pkt_hdr->p, data, len, seg_len, + layer); + + if (ret) + return -1; + } else { + if (proto == ODP_PROTO_IPV4) + ethtype = _ODP_ETHTYPE_IPV4; + else + ethtype = _ODP_ETHTYPE_IPV6; + + ret = packet_parse_common_l3_l4(&pkt_hdr->p, data, offset, + len, seg_len, layer, ethtype); + + if (ret) + return -1; + } + + return 0; +} + +int odp_packet_parse_multi(const odp_packet_t pkt[], const uint32_t offset[], + int num, const odp_packet_parse_param_t *param) +{ + int i; + + for (i = 0; i < num; i++) + if (odp_packet_parse(pkt[i], offset[i], param)) + return i; + + return num; +} + uint64_t odp_packet_to_u64(odp_packet_t hdl) { return _odp_pri(hdl);
commit ba4424c1a024395fe719ff3648cc257f8ba45a57 Author: Matias Elo matias.elo@nokia.com Date: Fri Feb 9 13:29:56 2018 +0200
Port b3aa07b "api: pktio: use common protocol layer enum"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h index 997354f8..e5458a4f 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h @@ -19,7 +19,9 @@ extern "C" {
#include <odp/api/plat/packet_types.h> #include <odp/api/pool.h> -#include <odp/api/packet_io.h> +#include <odp/api/time.h> +#include <odp/api/plat/packet_io_types.h> +#include <odp/api/plat/buffer_types.h> #include <odp/api/hints.h>
/* Required by rte_mbuf.h */
commit f9af9740d0115934e509be2cf6ddf023f54b19b4 Author: Matias Elo matias.elo@nokia.com Date: Fri Feb 9 13:21:42 2018 +0200
Port cff3e6c "linux-generic: ipsec: draft IPsec implementation"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp_packet_internal.h b/platform/linux-dpdk/include/odp_packet_internal.h index 2db3094b..e1bb510f 100644 --- a/platform/linux-dpdk/include/odp_packet_internal.h +++ b/platform/linux-dpdk/include/odp_packet_internal.h @@ -28,6 +28,7 @@ extern "C" { #include <odp/api/packet_io.h> #include <odp/api/crypto.h> #include <odp_crypto_internal.h> +#include <odp_ipsec_internal.h> #include <protocols/eth.h> #include <odp/api/plat/packet_types.h> #include <odp_queue_if.h> @@ -134,6 +135,9 @@ typedef struct { /* Result for crypto packet op */ odp_crypto_packet_result_t crypto_op_result;
+ /* Context for IPsec */ + odp_ipsec_packet_result_t ipsec_ctx; + } odp_packet_hdr_t __rte_cache_aligned;
/**
commit 050107b62db751794d06f236ed1217a67a322340 Author: Matias Elo matias.elo@nokia.com Date: Fri Feb 9 13:18:29 2018 +0200
Port 34bdbfe "linux-generic: ipsec: implement IPsec SAD"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index abb88d3d..dd8d6ffd 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -176,6 +176,7 @@ __LIB__libodp_dpdk_la_SOURCES = \ ../linux-generic/odp_impl.c \ ../linux-generic/odp_ipsec.c \ ../linux-generic/odp_ipsec_events.c \ + ../linux-generic/odp_ipsec_sad.c \ ../linux-generic/odp_name_table.c \ odp_packet.c \ odp_packet_dpdk.c \ diff --git a/platform/linux-dpdk/odp_init.c b/platform/linux-dpdk/odp_init.c index 28839fd3..ed6f711b 100644 --- a/platform/linux-dpdk/odp_init.c +++ b/platform/linux-dpdk/odp_init.c @@ -267,6 +267,12 @@ int odp_init_global(odp_instance_t *instance, } stage = IPSEC_EVENTS_INIT;
+ if (_odp_ipsec_sad_init_global()) { + ODP_ERR("ODP IPsec SAD init failed.\n"); + goto init_failed; + } + stage = IPSEC_SAD_INIT; + /* Dummy support for single instance */ *instance = (odp_instance_t)odp_global_data.main_pid;
@@ -292,6 +298,13 @@ int _odp_term_global(enum init_stage stage)
switch (stage) { case ALL_INIT: + case IPSEC_SAD_INIT: + if (_odp_ipsec_sad_term_global()) { + ODP_ERR("ODP IPsec SAD term failed.\n"); + rc = -1; + } + /* Fall through */ + case IPSEC_EVENTS_INIT: if (_odp_ipsec_events_term_global()) { ODP_ERR("ODP IPsec events term failed.\n");
commit 6c6bc5ae64970e333b1a7c2fc3953a4b42ad5b6b Author: Matias Elo matias.elo@nokia.com Date: Fri Feb 9 13:16:15 2018 +0200
Port 3295325 "linux-generic: ipsec: implement events handling"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 7ef3f0a7..abb88d3d 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -129,6 +129,7 @@ noinst_HEADERS = \ ${top_srcdir}/platform/linux-generic/include/odp_crypto_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_forward_typedefs_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_internal.h \ + ${top_srcdir}/platform/linux-generic/include/odp_ipsec_internal.h \ include/odp_packet_dpdk.h \ include/odp_packet_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_name_table_internal.h \ @@ -174,6 +175,7 @@ __LIB__libodp_dpdk_la_SOURCES = \ odp_init.c \ ../linux-generic/odp_impl.c \ ../linux-generic/odp_ipsec.c \ + ../linux-generic/odp_ipsec_events.c \ ../linux-generic/odp_name_table.c \ odp_packet.c \ odp_packet_dpdk.c \ diff --git a/platform/linux-dpdk/odp_init.c b/platform/linux-dpdk/odp_init.c index eb888c8f..28839fd3 100644 --- a/platform/linux-dpdk/odp_init.c +++ b/platform/linux-dpdk/odp_init.c @@ -259,6 +259,13 @@ int odp_init_global(odp_instance_t *instance, ODP_ERR("ODP name table init failed\n"); goto init_failed; } + stage = NAME_TABLE_INIT; + + if (_odp_ipsec_events_init_global()) { + ODP_ERR("ODP IPsec events init failed.\n"); + goto init_failed; + } + stage = IPSEC_EVENTS_INIT;
/* Dummy support for single instance */ *instance = (odp_instance_t)odp_global_data.main_pid; @@ -285,6 +292,13 @@ int _odp_term_global(enum init_stage stage)
switch (stage) { case ALL_INIT: + case IPSEC_EVENTS_INIT: + if (_odp_ipsec_events_term_global()) { + ODP_ERR("ODP IPsec events term failed.\n"); + rc = -1; + } + /* Fall through */ + case NAME_TABLE_INIT: if (_odp_int_name_tbl_term_global()) { ODP_ERR("Name table term failed.\n");
commit 2b70047e1532830d0d1a307f86b13e3285531dd3 Author: Matias Elo matias.elo@nokia.com Date: Fri Feb 9 13:11:34 2018 +0200
Port 0344270 "linux-generic: packet: add functions to optimize memset and memcmp paths"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp_packet_internal.h b/platform/linux-dpdk/include/odp_packet_internal.h index 61b9231a..2db3094b 100644 --- a/platform/linux-dpdk/include/odp_packet_internal.h +++ b/platform/linux-dpdk/include/odp_packet_internal.h @@ -254,6 +254,11 @@ int packet_parse_common(packet_parser_t *pkt_hdr, const uint8_t *ptr, uint32_t pkt_len, uint32_t seg_len, odp_pktio_parser_layer_t layer);
+int _odp_packet_set_data(odp_packet_t pkt, uint32_t offset, + uint8_t c, uint32_t len); + +int _odp_packet_cmp_data(odp_packet_t pkt, uint32_t offset, + const void *s, uint32_t len);
/* We can't enforce tailroom reservation for received packets */ ODP_STATIC_ASSERT(CONFIG_PACKET_TAILROOM == 0, diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index 1945f6d4..3bd7e79b 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -900,6 +900,56 @@ int odp_packet_move_data(odp_packet_t pkt, uint32_t dst_offset, pkt, src_offset, len); }
+int _odp_packet_set_data(odp_packet_t pkt, uint32_t offset, + uint8_t c, uint32_t len) +{ + void *mapaddr; + uint32_t seglen = 0; /* GCC */ + uint32_t setlen; + odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); + + if (offset + len > packet_len(pkt_hdr)) + return -1; + + while (len > 0) { + mapaddr = _odp_packet_offset(pkt, offset, &seglen, NULL); + setlen = len > seglen ? seglen : len; + if (odp_unlikely(setlen == 0)) + return -1; + memset(mapaddr, c, setlen); + offset += setlen; + len -= setlen; + } + + return 0; +} + +int _odp_packet_cmp_data(odp_packet_t pkt, uint32_t offset, + const void *s, uint32_t len) +{ + const uint8_t *ptr = s; + void *mapaddr; + uint32_t seglen = 0; /* GCC */ + uint32_t cmplen; + int ret; + odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); + + ODP_ASSERT(offset + len <= packet_len(pkt_hdr)); + + while (len > 0) { + mapaddr = _odp_packet_offset(pkt, offset, &seglen, NULL); + cmplen = len > seglen ? seglen : len; + ret = memcmp(mapaddr, ptr, cmplen); + if (ret != 0) + return ret; + offset += cmplen; + len -= cmplen; + ptr += cmplen; + } + + return 0; +} + /* * * Debugging
commit c663543d8c7f14c2ef123aae2c294d209a55dda5 Author: Matias Elo matias.elo@nokia.com Date: Fri Feb 9 11:56:05 2018 +0200
Port 95e770e "linux-gen: packet: add support for IP-in-IP (RFC 2003) encap"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index 430e4fff..1945f6d4 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -1343,6 +1343,10 @@ int packet_parse_common_l3_l4(packet_parser_t *prs, const uint8_t *parseptr, prs->input_flags.icmp = 1; break;
+ case _ODP_IPPROTO_IPIP: + /* Do nothing */ + break; + case _ODP_IPPROTO_TCP: if (odp_unlikely(offset + _ODP_TCPHDR_LEN > seg_len)) return -1;
commit 318f03624bf35ef587891533bd8f0578fcbbb985 Author: Matias Elo matias.elo@nokia.com Date: Fri Feb 9 10:50:05 2018 +0200
Port 99f8355 "linux-gen: packet: support parsing of just L3/L4 headers"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp_packet_internal.h b/platform/linux-dpdk/include/odp_packet_internal.h index c7ada23a..61b9231a 100644 --- a/platform/linux-dpdk/include/odp_packet_internal.h +++ b/platform/linux-dpdk/include/odp_packet_internal.h @@ -210,6 +210,12 @@ int _odp_packet_copy_md_to_packet(odp_packet_t srcpkt, odp_packet_t dstpkt); int packet_parse_layer(odp_packet_hdr_t *pkt_hdr, odp_pktio_parser_layer_t layer);
+/* Perform L3 and L4 parsing up to a given protocol layer */ +int packet_parse_l3_l4(odp_packet_hdr_t *pkt_hdr, + odp_pktio_parser_layer_t layer, + uint32_t l3_offset, + uint16_t ethtype); + /* Reset parser metadata for a new parse */ void packet_parse_reset(odp_packet_hdr_t *pkt_hdr);
diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index 2c851fc0..430e4fff 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -83,7 +83,7 @@ void packet_parse_reset(odp_packet_hdr_t *pkt_hdr) pkt_hdr->p.error_flags.all = 0; pkt_hdr->p.input_flags.all = 0; pkt_hdr->p.output_flags.all = 0; - pkt_hdr->p.l2_offset = 0; + pkt_hdr->p.l2_offset = ODP_PACKET_OFFSET_INVALID; pkt_hdr->p.l3_offset = ODP_PACKET_OFFSET_INVALID; pkt_hdr->p.l4_offset = ODP_PACKET_OFFSET_INVALID; } @@ -1287,35 +1287,16 @@ static inline void parse_udp(packet_parser_t *prs, *parseptr += sizeof(_odp_udphdr_t); }
-/** - * Parse common packet headers up to given layer - * - * The function expects at least PACKET_PARSE_SEG_LEN bytes of data to be - * available from the ptr. - */ -int packet_parse_common(packet_parser_t *prs, const uint8_t *ptr, - uint32_t frame_len, uint32_t seg_len, - odp_pktio_parser_layer_t layer) +static inline +int packet_parse_common_l3_l4(packet_parser_t *prs, const uint8_t *parseptr, + uint32_t offset, + uint32_t frame_len, uint32_t seg_len, + odp_pktio_parser_layer_t layer, + uint16_t ethtype) { - uint32_t offset; - uint16_t ethtype; - const uint8_t *parseptr; uint8_t ip_proto;
- parseptr = ptr; - offset = 0; - - if (layer == ODP_PKTIO_PARSER_LAYER_NONE) - return 0; - - /* We only support Ethernet for now */ - prs->input_flags.eth = 1; - /* Assume valid L2 header, no CRC/FCS check in SW */ - prs->input_flags.l2 = 1; - - ethtype = parse_eth(prs, &parseptr, &offset, frame_len); - - if (layer == ODP_PKTIO_PARSER_LAYER_L2) + if (layer <= ODP_PKTIO_PARSER_LAYER_L2) return prs->error_flags.all != 0;
/* Set l3_offset+flag only for known ethtypes */ @@ -1398,6 +1379,39 @@ int packet_parse_common(packet_parser_t *prs, const uint8_t *ptr,
return prs->error_flags.all != 0; } + +/** + * Parse common packet headers up to given layer + * + * The function expects at least PACKET_PARSE_SEG_LEN bytes of data to be + * available from the ptr. + */ +int packet_parse_common(packet_parser_t *prs, const uint8_t *ptr, + uint32_t frame_len, uint32_t seg_len, + odp_pktio_parser_layer_t layer) +{ + uint32_t offset; + uint16_t ethtype; + const uint8_t *parseptr; + + parseptr = ptr; + offset = 0; + + if (layer == ODP_PKTIO_PARSER_LAYER_NONE) + return 0; + + /* Assume valid L2 header, no CRC/FCS check in SW */ + prs->l2_offset = offset; + prs->input_flags.l2 = 1; + /* We only support Ethernet for now */ + prs->input_flags.eth = 1; + + ethtype = parse_eth(prs, &parseptr, &offset, frame_len); + + return packet_parse_common_l3_l4(prs, parseptr, offset, frame_len, + seg_len, layer, ethtype); +} + /** * Simple packet parser */ @@ -1411,6 +1425,23 @@ int packet_parse_layer(odp_packet_hdr_t *pkt_hdr, return packet_parse_common(&pkt_hdr->p, base, len, seg_len, layer); }
+int packet_parse_l3_l4(odp_packet_hdr_t *pkt_hdr, + odp_pktio_parser_layer_t layer, + uint32_t l3_offset, + uint16_t ethtype) +{ + uint32_t seg_len = 0; + void *base = _odp_packet_offset((odp_packet_t)pkt_hdr, l3_offset, + &seg_len, NULL); + + if (seg_len == 0) + return -1; + + return packet_parse_common_l3_l4(&pkt_hdr->p, base, l3_offset, + packet_len(pkt_hdr), seg_len, + layer, ethtype); +} + uint64_t odp_packet_to_u64(odp_packet_t hdl) { return _odp_pri(hdl);
commit d8da667b502401fece798c6953fd923bf737c349 Author: Matias Elo matias.elo@nokia.com Date: Fri Feb 9 10:28:03 2018 +0200
linux-dpdk: packet: add function for initializing incoming packets
Add separate packet_init() function for initializing received packets. Move packet_parse_reset() back to odp_packet.c to reduce future merge conflicts.
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp_packet_internal.h b/platform/linux-dpdk/include/odp_packet_internal.h index 76516530..c7ada23a 100644 --- a/platform/linux-dpdk/include/odp_packet_internal.h +++ b/platform/linux-dpdk/include/odp_packet_internal.h @@ -159,6 +159,26 @@ static inline odp_packet_t packet_from_buf_hdr(odp_buffer_hdr_t *buf_hdr) return (odp_packet_t)(odp_packet_hdr_t *)buf_hdr; }
+/** + * Initialize ODP headers + */ +static inline void packet_init(odp_packet_hdr_t *pkt_hdr) +{ + pkt_hdr->p.input_flags.all = 0; + pkt_hdr->p.output_flags.all = 0; + pkt_hdr->p.error_flags.all = 0; + + pkt_hdr->p.l2_offset = 0; + pkt_hdr->p.l3_offset = ODP_PACKET_OFFSET_INVALID; + pkt_hdr->p.l4_offset = ODP_PACKET_OFFSET_INVALID; + + if (odp_unlikely(pkt_hdr->buf_hdr.event_subtype != + ODP_EVENT_PACKET_BASIC)) + pkt_hdr->buf_hdr.event_subtype = ODP_EVENT_PACKET_BASIC; + + pkt_hdr->input = ODP_PKTIO_INVALID; +} + static inline void copy_packet_parser_metadata(odp_packet_hdr_t *src_hdr, odp_packet_hdr_t *dst_hdr) { @@ -191,16 +211,7 @@ int packet_parse_layer(odp_packet_hdr_t *pkt_hdr, odp_pktio_parser_layer_t layer);
/* Reset parser metadata for a new parse */ -static inline void packet_parse_reset(odp_packet_hdr_t *pkt_hdr) -{ - /* Reset parser metadata before new parse */ - pkt_hdr->p.error_flags.all = 0; - pkt_hdr->p.input_flags.all = 0; - pkt_hdr->p.output_flags.all = 0; - pkt_hdr->p.l2_offset = 0; - pkt_hdr->p.l3_offset = ODP_PACKET_OFFSET_INVALID; - pkt_hdr->p.l4_offset = ODP_PACKET_OFFSET_INVALID; -} +void packet_parse_reset(odp_packet_hdr_t *pkt_hdr);
/* Convert a buffer handle to a packet handle */ odp_packet_t _odp_packet_from_buf_hdr(odp_buffer_hdr_t *buf_hdr); diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index c0de7498..2c851fc0 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -61,12 +61,6 @@ ODP_STATIC_ASSERT(sizeof(dummy.hash.rss) == sizeof(uint32_t), "hash.rss should be uint32_t"); ODP_STATIC_ASSERT(sizeof(dummy.ol_flags) == sizeof(uint64_t), "ol_flags should be uint64_t"); -/* - * - * Alloc and free - * ******************************************************** - * - */
static inline odp_buffer_t buffer_handle(odp_packet_hdr_t *pkt_hdr) { @@ -83,6 +77,17 @@ odp_packet_t _odp_packet_from_buf_hdr(odp_buffer_hdr_t *buf_hdr) return (odp_packet_t)buf_hdr; }
+void packet_parse_reset(odp_packet_hdr_t *pkt_hdr) +{ + /* Reset parser metadata before new parse */ + pkt_hdr->p.error_flags.all = 0; + pkt_hdr->p.input_flags.all = 0; + pkt_hdr->p.output_flags.all = 0; + pkt_hdr->p.l2_offset = 0; + pkt_hdr->p.l3_offset = ODP_PACKET_OFFSET_INVALID; + pkt_hdr->p.l4_offset = ODP_PACKET_OFFSET_INVALID; +} + static odp_packet_t packet_alloc(pool_t *pool, uint32_t len) { odp_packet_t pkt; diff --git a/platform/linux-dpdk/odp_packet_dpdk.c b/platform/linux-dpdk/odp_packet_dpdk.c index c8dc3835..8fb18157 100644 --- a/platform/linux-dpdk/odp_packet_dpdk.c +++ b/platform/linux-dpdk/odp_packet_dpdk.c @@ -404,9 +404,8 @@ static int recv_pkt_dpdk(pktio_entry_t *pktio_entry, int index, for (i = 0; i < nb_rx; ++i) { odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt_table[i]);
- packet_parse_reset(pkt_hdr); + packet_init(pkt_hdr); pkt_hdr->input = pktio_entry->s.handle; - pkt_hdr->buf_hdr.event_subtype = ODP_EVENT_PACKET_BASIC;
if (!pktio_cls_enabled(pktio_entry) && pktio_entry->s.config.parser.layer)
commit 5dc1e15add904cde0a272d9c5d1a4175f3f1b1b6 Author: Matias Elo matias.elo@nokia.com Date: Fri Feb 9 10:04:54 2018 +0200
Port 1a4828a "linux-gen: packet: factor out L2 header parsing"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index 9d21598b..c0de7498 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -1070,6 +1070,78 @@ int _odp_packet_copy_md_to_packet(odp_packet_t srcpkt, odp_packet_t dstpkt) return dst_size < src_size; }
+/** Parser helper function for Ethernet packets */ +static inline uint16_t parse_eth(packet_parser_t *prs, const uint8_t **parseptr, + uint32_t *offset, uint32_t frame_len) +{ + uint16_t ethtype; + const _odp_ethhdr_t *eth; + uint16_t macaddr0, macaddr2, macaddr4; + const _odp_vlanhdr_t *vlan; + + /* Detect jumbo frames */ + if (frame_len > _ODP_ETH_LEN_MAX) + prs->input_flags.jumbo = 1; + + eth = (const _odp_ethhdr_t *)*parseptr; + + /* Handle Ethernet broadcast/multicast addresses */ + macaddr0 = odp_be_to_cpu_16(*((const uint16_t *)(const void *)eth)); + prs->input_flags.eth_mcast = (macaddr0 & 0x0100) == 0x0100; + + if (macaddr0 == 0xffff) { + macaddr2 = + odp_be_to_cpu_16(*((const uint16_t *) + (const void *)eth + 1)); + macaddr4 = + odp_be_to_cpu_16(*((const uint16_t *) + (const void *)eth + 2)); + prs->input_flags.eth_bcast = + (macaddr2 == 0xffff) && (macaddr4 == 0xffff); + } else { + prs->input_flags.eth_bcast = 0; + } + + /* Get Ethertype */ + ethtype = odp_be_to_cpu_16(eth->type); + *offset += sizeof(*eth); + *parseptr += sizeof(*eth); + + /* Check for SNAP vs. DIX */ + if (ethtype < _ODP_ETH_LEN_MAX) { + prs->input_flags.snap = 1; + if (ethtype > frame_len - *offset) { + prs->error_flags.snap_len = 1; + return 0; + } + ethtype = odp_be_to_cpu_16(*((const uint16_t *)(uintptr_t) + (parseptr + 6))); + *offset += 8; + *parseptr += 8; + } + + /* Parse the VLAN header(s), if present */ + if (ethtype == _ODP_ETHTYPE_VLAN_OUTER) { + prs->input_flags.vlan_qinq = 1; + prs->input_flags.vlan = 1; + + vlan = (const _odp_vlanhdr_t *)*parseptr; + ethtype = odp_be_to_cpu_16(vlan->type); + *offset += sizeof(_odp_vlanhdr_t); + *parseptr += sizeof(_odp_vlanhdr_t); + } + + if (ethtype == _ODP_ETHTYPE_VLAN) { + prs->input_flags.vlan = 1; + vlan = (const _odp_vlanhdr_t *)*parseptr; + ethtype = odp_be_to_cpu_16(vlan->type); + *offset += sizeof(_odp_vlanhdr_t); + *parseptr += sizeof(_odp_vlanhdr_t); + } + + return ethtype; +} + /** * Parser helper function for IPv4 */ @@ -1224,9 +1296,9 @@ int packet_parse_common(packet_parser_t *prs, const uint8_t *ptr, uint16_t ethtype; const uint8_t *parseptr; uint8_t ip_proto; - const _odp_ethhdr_t *eth; - uint16_t macaddr0, macaddr2, macaddr4; - const _odp_vlanhdr_t *vlan; + + parseptr = ptr; + offset = 0;
if (layer == ODP_PKTIO_PARSER_LAYER_NONE) return 0; @@ -1235,65 +1307,8 @@ int packet_parse_common(packet_parser_t *prs, const uint8_t *ptr, prs->input_flags.eth = 1; /* Assume valid L2 header, no CRC/FCS check in SW */ prs->input_flags.l2 = 1; - /* Detect jumbo frames */ - if (frame_len > _ODP_ETH_LEN_MAX) - prs->input_flags.jumbo = 1; - - offset = sizeof(_odp_ethhdr_t); - eth = (const _odp_ethhdr_t *)ptr;
- /* Handle Ethernet broadcast/multicast addresses */ - macaddr0 = odp_be_to_cpu_16(*((const uint16_t *)(const void *)eth)); - prs->input_flags.eth_mcast = (macaddr0 & 0x0100) == 0x0100; - - if (macaddr0 == 0xffff) { - macaddr2 = - odp_be_to_cpu_16(*((const uint16_t *) - (const void *)eth + 1)); - macaddr4 = - odp_be_to_cpu_16(*((const uint16_t *) - (const void *)eth + 2)); - prs->input_flags.eth_bcast = - (macaddr2 == 0xffff) && (macaddr4 == 0xffff); - } else { - prs->input_flags.eth_bcast = 0; - } - - /* Get Ethertype */ - ethtype = odp_be_to_cpu_16(eth->type); - parseptr = (const uint8_t *)(eth + 1); - - /* Check for SNAP vs. DIX */ - if (ethtype < _ODP_ETH_LEN_MAX) { - prs->input_flags.snap = 1; - if (ethtype > frame_len - offset) { - prs->error_flags.snap_len = 1; - goto parse_exit; - } - ethtype = odp_be_to_cpu_16(*((const uint16_t *)(uintptr_t) - (parseptr + 6))); - offset += 8; - parseptr += 8; - } - - /* Parse the VLAN header(s), if present */ - if (ethtype == _ODP_ETHTYPE_VLAN_OUTER) { - prs->input_flags.vlan_qinq = 1; - prs->input_flags.vlan = 1; - - vlan = (const _odp_vlanhdr_t *)parseptr; - ethtype = odp_be_to_cpu_16(vlan->type); - offset += sizeof(_odp_vlanhdr_t); - parseptr += sizeof(_odp_vlanhdr_t); - } - - if (ethtype == _ODP_ETHTYPE_VLAN) { - prs->input_flags.vlan = 1; - vlan = (const _odp_vlanhdr_t *)parseptr; - ethtype = odp_be_to_cpu_16(vlan->type); - offset += sizeof(_odp_vlanhdr_t); - parseptr += sizeof(_odp_vlanhdr_t); - } + ethtype = parse_eth(prs, &parseptr, &offset, frame_len);
if (layer == ODP_PKTIO_PARSER_LAYER_L2) return prs->error_flags.all != 0; @@ -1375,7 +1390,7 @@ int packet_parse_common(packet_parser_t *prs, const uint8_t *ptr, prs->l4_offset = ODP_PACKET_OFFSET_INVALID; break; } -parse_exit: + return prs->error_flags.all != 0; } /**
commit 319d83812fd906aa0ee6f37a7d56186bf6c20787 Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 8 17:45:27 2018 +0200
Port 40e85bc "linux-gen: chksum: implement ones complement sum"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 4495af3e..7ef3f0a7 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -162,6 +162,7 @@ __LIB__libodp_dpdk_la_SOURCES = \ ../linux-generic/odp_bitmap.c \ odp_buffer.c \ ../linux-generic/odp_byteorder.c \ + ../linux-generic/odp_chksum.c \ ../linux-generic/odp_classification.c \ ../linux-generic/odp_cpu.c \ ../linux-generic/odp_cpumask.c \
commit f24c3ce9a7bba884e67b0f786d0b6253e7030e29 Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 8 17:43:56 2018 +0200
Port d95e91d "api: chksum: add ones complement sum function"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index e7820680..4495af3e 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -27,6 +27,7 @@ odpapiinclude_HEADERS = \ include/odp/api/barrier.h \ include/odp/api/buffer.h \ include/odp/api/byteorder.h \ + include/odp/api/chksum.h \ include/odp/api/classification.h \ include/odp/api/compiler.h \ include/odp/api/cpu.h \ diff --git a/platform/linux-dpdk/include/odp/api/chksum.h b/platform/linux-dpdk/include/odp/api/chksum.h new file mode 120000 index 00000000..a7f33328 --- /dev/null +++ b/platform/linux-dpdk/include/odp/api/chksum.h @@ -0,0 +1 @@ +../../../../linux-generic/include/odp/api/chksum.h \ No newline at end of file
commit 4965980e02fcc3b974ef8f7b50fbde2e6d3a9426 Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 8 17:37:47 2018 +0200
Port 2ca10a6 "linux-gen: crypto: unify odp_crypto_session_create error path"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_crypto.c b/platform/linux-dpdk/odp_crypto.c index 1f9a6b49..0084a6e5 100644 --- a/platform/linux-dpdk/odp_crypto.c +++ b/platform/linux-dpdk/odp_crypto.c @@ -792,35 +792,31 @@ int odp_crypto_session_create(odp_crypto_session_param_t *param, struct rte_crypto_sym_xform cipher_xform; struct rte_crypto_sym_xform auth_xform; struct rte_crypto_sym_xform *first_xform; - struct rte_cryptodev_sym_session *session; - crypto_session_entry_t *entry; + struct rte_cryptodev_sym_session *rte_session; + crypto_session_entry_t *session = NULL;
*session_out = ODP_CRYPTO_SESSION_INVALID;
if (rte_cryptodev_count() == 0) { ODP_ERR("No crypto devices available\n"); - return -1; + *status = ODP_CRYPTO_SES_CREATE_ERR_ENOMEM; + goto err; }
/* Allocate memory for this session */ - entry = alloc_session(); - if (entry == NULL) { - ODP_ERR("Failed to allocate a session entry"); - return -1; + session = alloc_session(); + if (session == NULL) { + *status = ODP_CRYPTO_SES_CREATE_ERR_ENOMEM; + goto err; }
- /* Default to successful result */ - *status = ODP_CRYPTO_SES_CREATE_ERR_NONE; - /* Cipher Data */ cipher_xform.cipher.key.data = rte_malloc("crypto key", param->cipher_key.length, 0); if (cipher_xform.cipher.key.data == NULL) { ODP_ERR("Failed to allocate memory for cipher key\n"); - /* remove the crypto_session_entry_t */ - memset(entry, 0, sizeof(*entry)); - free_session(entry); - return -1; + *status = ODP_CRYPTO_SES_CREATE_ERR_ENOMEM; + goto err; }
cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER; @@ -835,10 +831,8 @@ int odp_crypto_session_create(odp_crypto_session_param_t *param, param->auth_key.length, 0); if (auth_xform.auth.key.data == NULL) { ODP_ERR("Failed to allocate memory for auth key\n"); - /* remove the crypto_session_entry_t */ - memset(entry, 0, sizeof(*entry)); - free_session(entry); - return -1; + *status = ODP_CRYPTO_SES_CREATE_ERR_ENOMEM; + goto err; } auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH; auth_xform.next = NULL; @@ -849,13 +843,13 @@ int odp_crypto_session_create(odp_crypto_session_param_t *param,
/* Derive order */ if (ODP_CRYPTO_OP_ENCODE == param->op) - entry->do_cipher_first = param->auth_cipher_text; + session->do_cipher_first = param->auth_cipher_text; else - entry->do_cipher_first = !param->auth_cipher_text; + session->do_cipher_first = !param->auth_cipher_text;
/* Process based on cipher */ /* Derive order */ - if (entry->do_cipher_first) { + if (session->do_cipher_first) { cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT; auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE; first_xform = &cipher_xform; @@ -872,7 +866,7 @@ int odp_crypto_session_create(odp_crypto_session_param_t *param, /* Check result */ if (rc) { *status = ODP_CRYPTO_SES_CREATE_ERR_INV_CIPHER; - return -1; + goto err; }
rc = auth_alg_odp_to_rte(param->auth_alg, &auth_xform); @@ -880,10 +874,7 @@ int odp_crypto_session_create(odp_crypto_session_param_t *param, /* Check result */ if (rc) { *status = ODP_CRYPTO_SES_CREATE_ERR_INV_AUTH; - /* remove the crypto_session_entry_t */ - memset(entry, 0, sizeof(*entry)); - free_session(entry); - return -1; + goto err; }
rc = get_crypto_dev(&cipher_xform, @@ -893,34 +884,38 @@ int odp_crypto_session_create(odp_crypto_session_param_t *param,
if (rc) { ODP_ERR("Couldn't find a crypto device"); - /* remove the crypto_session_entry_t */ - memset(entry, 0, sizeof(*entry)); - free_session(entry); - return -1; + *status = ODP_CRYPTO_SES_CREATE_ERR_ENOMEM; + goto err; }
/* Setup session */ - session = rte_cryptodev_sym_session_create(cdev_id, first_xform); - - if (session == NULL) { - /* remove the crypto_session_entry_t */ - memset(entry, 0, sizeof(*entry)); - free_session(entry); - return -1; + rte_session = rte_cryptodev_sym_session_create(cdev_id, first_xform); + if (rte_session == NULL) { + *status = ODP_CRYPTO_SES_CREATE_ERR_ENOMEM; + goto err; }
- entry->rte_session = (intptr_t)session; - entry->cipher_xform = cipher_xform; - entry->auth_xform = auth_xform; - entry->iv.length = param->iv.length; - entry->iv.data = param->iv.data; - entry->output_pool = param->output_pool; - entry->compl_queue = param->compl_queue; + session->rte_session = (intptr_t)rte_session; + session->cipher_xform = cipher_xform; + session->auth_xform = auth_xform; + session->iv.length = param->iv.length; + session->iv.data = param->iv.data; + session->output_pool = param->output_pool; + session->compl_queue = param->compl_queue;
/* We're happy */ - *session_out = (intptr_t)entry; - + *session_out = (intptr_t)session; + *status = ODP_CRYPTO_SES_CREATE_ERR_NONE; return 0; + +err: + /* error status should be set at this moment */ + if (session != NULL) { + memset(session, 0, sizeof(*session)); + free_session(session); + } + *session_out = ODP_CRYPTO_SESSION_INVALID; + return -1; }
int odp_crypto_session_destroy(odp_crypto_session_t session)
commit 6cc3b5cc89e01396cd55091790b9d77187f7cbb7 Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 8 15:12:41 2018 +0200
Port 7b9d96d "api: crypto: replace redundant packet_ prefixes from definitions"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_crypto.c b/platform/linux-dpdk/odp_crypto.c index 6c776555..1f9a6b49 100644 --- a/platform/linux-dpdk/odp_crypto.c +++ b/platform/linux-dpdk/odp_crypto.c @@ -1290,8 +1290,8 @@ odp_crypto_packet_result_t *get_op_result_from_packet(odp_packet_t pkt) return &hdr->crypto_op_result; }
-int odp_crypto_packet_result(odp_crypto_packet_result_t *result, - odp_packet_t packet) +int odp_crypto_result(odp_crypto_packet_result_t *result, + odp_packet_t packet) { odp_crypto_packet_result_t *op_result;
@@ -1306,9 +1306,9 @@ int odp_crypto_packet_result(odp_crypto_packet_result_t *result, }
static -int odp_crypto_op(odp_packet_t pkt_in, - odp_packet_t *pkt_out, - const odp_crypto_packet_op_param_t *param) +int odp_crypto_int(odp_packet_t pkt_in, + odp_packet_t *pkt_out, + const odp_crypto_packet_op_param_t *param) { odp_crypto_alg_err_t rc_cipher = ODP_CRYPTO_ALG_ERR_NONE; odp_crypto_alg_err_t rc_auth = ODP_CRYPTO_ALG_ERR_NONE; @@ -1386,19 +1386,19 @@ err: return -1; }
-int odp_crypto_packet_op(const odp_packet_t pkt_in[], - odp_packet_t pkt_out[], - const odp_crypto_packet_op_param_t param[], - int num_pkt) +int odp_crypto_op(const odp_packet_t pkt_in[], + odp_packet_t pkt_out[], + const odp_crypto_packet_op_param_t param[], + int num_pkt) { int i, rc; odp_crypto_generic_session_t *session;
session = (odp_crypto_generic_session_t *)(intptr_t)param->session; - ODP_ASSERT(ODP_CRYPTO_SYNC == session->p.packet_op_mode); + ODP_ASSERT(ODP_CRYPTO_SYNC == session->p.op_mode);
for (i = 0; i < num_pkt; i++) { - rc = odp_crypto_op(pkt_in[i], &pkt_out[i], ¶m[i]); + rc = odp_crypto_int(pkt_in[i], &pkt_out[i], ¶m[i]); if (rc < 0) break; } @@ -1406,10 +1406,10 @@ int odp_crypto_packet_op(const odp_packet_t pkt_in[], return i; }
-int odp_crypto_packet_op_enq(const odp_packet_t pkt_in[], - const odp_packet_t pkt_out[], - const odp_crypto_packet_op_param_t param[], - int num_pkt) +int odp_crypto_op_enq(const odp_packet_t pkt_in[], + const odp_packet_t pkt_out[], + const odp_crypto_packet_op_param_t param[], + int num_pkt) { odp_packet_t pkt; odp_event_t event; @@ -1417,12 +1417,12 @@ int odp_crypto_packet_op_enq(const odp_packet_t pkt_in[], int i, rc;
session = (odp_crypto_generic_session_t *)(intptr_t)param->session; - ODP_ASSERT(ODP_CRYPTO_ASYNC == session->p.packet_op_mode); + ODP_ASSERT(ODP_CRYPTO_ASYNC == session->p.op_mode); ODP_ASSERT(ODP_QUEUE_INVALID != session->p.compl_queue);
for (i = 0; i < num_pkt; i++) { pkt = pkt_out[i]; - rc = odp_crypto_op(pkt_in[i], &pkt, ¶m[i]); + rc = odp_crypto_int(pkt_in[i], &pkt, ¶m[i]); if (rc < 0) break;
commit ef9979fb951a715010c379e23709313201c9423d Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 8 14:48:33 2018 +0200
Port d52ad54 "linux-gen: crypto: provide packet API implementation"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp_packet_internal.h b/platform/linux-dpdk/include/odp_packet_internal.h index 02152a46..76516530 100644 --- a/platform/linux-dpdk/include/odp_packet_internal.h +++ b/platform/linux-dpdk/include/odp_packet_internal.h @@ -131,6 +131,9 @@ typedef struct { /* Classifier destination queue */ queue_t dst_queue;
+ /* Result for crypto packet op */ + odp_crypto_packet_result_t crypto_op_result; + } odp_packet_hdr_t __rte_cache_aligned;
/** diff --git a/platform/linux-dpdk/odp_crypto.c b/platform/linux-dpdk/odp_crypto.c index 02ee89bc..6c776555 100644 --- a/platform/linux-dpdk/odp_crypto.c +++ b/platform/linux-dpdk/odp_crypto.c @@ -1267,3 +1267,171 @@ uint64_t odp_crypto_session_to_u64(odp_crypto_session_t hdl) { return (uint64_t)hdl; } + +odp_packet_t odp_crypto_packet_from_event(odp_event_t ev) +{ + /* This check not mandated by the API specification */ + ODP_ASSERT(odp_event_type(ev) == ODP_EVENT_PACKET); + ODP_ASSERT(odp_event_subtype(ev) == ODP_EVENT_PACKET_CRYPTO); + + return odp_packet_from_event(ev); +} + +odp_event_t odp_crypto_packet_to_event(odp_packet_t pkt) +{ + return odp_packet_to_event(pkt); +} + +static +odp_crypto_packet_result_t *get_op_result_from_packet(odp_packet_t pkt) +{ + odp_packet_hdr_t *hdr = odp_packet_hdr(pkt); + + return &hdr->crypto_op_result; +} + +int odp_crypto_packet_result(odp_crypto_packet_result_t *result, + odp_packet_t packet) +{ + odp_crypto_packet_result_t *op_result; + + ODP_ASSERT(odp_event_subtype(odp_packet_to_event(packet)) == + ODP_EVENT_PACKET_CRYPTO); + + op_result = get_op_result_from_packet(packet); + + memcpy(result, op_result, sizeof(*result)); + + return 0; +} + +static +int odp_crypto_op(odp_packet_t pkt_in, + odp_packet_t *pkt_out, + const odp_crypto_packet_op_param_t *param) +{ + odp_crypto_alg_err_t rc_cipher = ODP_CRYPTO_ALG_ERR_NONE; + odp_crypto_alg_err_t rc_auth = ODP_CRYPTO_ALG_ERR_NONE; + odp_crypto_generic_session_t *session; + odp_crypto_packet_result_t local_result; + odp_bool_t allocated = false; + odp_packet_t out_pkt = *pkt_out; + odp_crypto_packet_result_t *op_result; + + session = (odp_crypto_generic_session_t *)(intptr_t)param->session; + + /* Resolve output buffer */ + if (ODP_PACKET_INVALID == out_pkt && + ODP_POOL_INVALID != session->p.output_pool) { + out_pkt = odp_packet_alloc(session->p.output_pool, + odp_packet_len(pkt_in)); + allocated = true; + } + + if (odp_unlikely(ODP_PACKET_INVALID == out_pkt)) { + ODP_DBG("Alloc failed.\n"); + return -1; + } + + if (pkt_in != out_pkt) { + int ret; + + ret = odp_packet_copy_from_pkt(out_pkt, + 0, + pkt_in, + 0, + odp_packet_len(pkt_in)); + if (odp_unlikely(ret < 0)) + goto err; + + _odp_packet_copy_md_to_packet(pkt_in, out_pkt); + odp_packet_free(pkt_in); + pkt_in = ODP_PACKET_INVALID; + } + + /* Invoke the functions */ + if (session->do_cipher_first) { + rc_cipher = session->cipher.func(out_pkt, param, session); + rc_auth = session->auth.func(out_pkt, param, session); + } else { + rc_auth = session->auth.func(out_pkt, param, session); + rc_cipher = session->cipher.func(out_pkt, param, session); + } + + /* Fill in result */ + local_result.cipher_status.alg_err = rc_cipher; + local_result.cipher_status.hw_err = ODP_CRYPTO_HW_ERR_NONE; + local_result.auth_status.alg_err = rc_auth; + local_result.auth_status.hw_err = ODP_CRYPTO_HW_ERR_NONE; + local_result.ok = + (rc_cipher == ODP_CRYPTO_ALG_ERR_NONE) && + (rc_auth == ODP_CRYPTO_ALG_ERR_NONE); + + _odp_buffer_event_subtype_set(packet_to_buffer(out_pkt), + ODP_EVENT_PACKET_CRYPTO); + op_result = get_op_result_from_packet(out_pkt); + *op_result = local_result; + + /* Synchronous, simply return results */ + *pkt_out = out_pkt; + + return 0; + +err: + if (allocated) { + odp_packet_free(out_pkt); + out_pkt = ODP_PACKET_INVALID; + } + + return -1; +} + +int odp_crypto_packet_op(const odp_packet_t pkt_in[], + odp_packet_t pkt_out[], + const odp_crypto_packet_op_param_t param[], + int num_pkt) +{ + int i, rc; + odp_crypto_generic_session_t *session; + + session = (odp_crypto_generic_session_t *)(intptr_t)param->session; + ODP_ASSERT(ODP_CRYPTO_SYNC == session->p.packet_op_mode); + + for (i = 0; i < num_pkt; i++) { + rc = odp_crypto_op(pkt_in[i], &pkt_out[i], ¶m[i]); + if (rc < 0) + break; + } + + return i; +} + +int odp_crypto_packet_op_enq(const odp_packet_t pkt_in[], + const odp_packet_t pkt_out[], + const odp_crypto_packet_op_param_t param[], + int num_pkt) +{ + odp_packet_t pkt; + odp_event_t event; + odp_crypto_generic_session_t *session; + int i, rc; + + session = (odp_crypto_generic_session_t *)(intptr_t)param->session; + ODP_ASSERT(ODP_CRYPTO_ASYNC == session->p.packet_op_mode); + ODP_ASSERT(ODP_QUEUE_INVALID != session->p.compl_queue); + + for (i = 0; i < num_pkt; i++) { + pkt = pkt_out[i]; + rc = odp_crypto_op(pkt_in[i], &pkt, ¶m[i]); + if (rc < 0) + break; + + event = odp_packet_to_event(pkt); + if (odp_queue_enq(session->p.compl_queue, event)) { + odp_event_free(event); + break; + } + } + + return i; +}
commit 0c897c3a8ea85956c98dad03814b786f040e5793 Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 8 15:09:15 2018 +0200
Port moving of packet_to_buffer() function
Port a38ea82 "linux-gen: move packet_to_buffer to packet_inlines.h" Port 886e541 "linux-generic: packet: add missing doxygen from inline func"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h index 4ce14e9e..997354f8 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h @@ -251,6 +251,12 @@ static inline void _odp_packet_prefetch(odp_packet_t pkt, uint32_t offset, uint3 rte_prefetch0(addr + ofs); }
+/** @internal Inline function @param pkt @return */ +static inline odp_buffer_t packet_to_buffer(odp_packet_t pkt) +{ + return (odp_buffer_t)pkt; +} + /* Include inlined versions of API functions */ #include <odp/api/plat/static_inline.h>
diff --git a/platform/linux-dpdk/odp_crypto.c b/platform/linux-dpdk/odp_crypto.c index d311e6c9..02ee89bc 100644 --- a/platform/linux-dpdk/odp_crypto.c +++ b/platform/linux-dpdk/odp_crypto.c @@ -19,6 +19,7 @@ #include <odp_debug_internal.h> #include <odp/api/hints.h> #include <odp/api/random.h> +#include <odp/api/plat/packet_inlines.h> #include <odp_packet_internal.h> #include <rte_crypto.h> #include <rte_cryptodev.h> diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index 55991df3..9d21598b 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -83,11 +83,6 @@ odp_packet_t _odp_packet_from_buf_hdr(odp_buffer_hdr_t *buf_hdr) return (odp_packet_t)buf_hdr; }
-static inline odp_buffer_t packet_to_buffer(odp_packet_t pkt) -{ - return (odp_buffer_t)pkt; -} - static odp_packet_t packet_alloc(pool_t *pool, uint32_t len) { odp_packet_t pkt;
commit 6a5c1870c690382b361e89c4de2b659c05dde9d6 Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 8 14:12:52 2018 +0200
Port e9d60da "api: crypto: deprecate ASYNC mode and odp_crypto_compl_t"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_crypto.c b/platform/linux-dpdk/odp_crypto.c index 53fc24a7..d311e6c9 100644 --- a/platform/linux-dpdk/odp_crypto.c +++ b/platform/linux-dpdk/odp_crypto.c @@ -1252,6 +1252,11 @@ void odp_crypto_compl_free(odp_crypto_compl_t completion_event) odp_buffer_free(odp_buffer_from_event(ev)); }
+uint64_t odp_crypto_compl_to_u64(odp_crypto_compl_t hdl) +{ + return _odp_pri(hdl); +} + void odp_crypto_session_param_init(odp_crypto_session_param_t *param) { memset(param, 0, sizeof(odp_crypto_session_param_t)); @@ -1261,8 +1266,3 @@ uint64_t odp_crypto_session_to_u64(odp_crypto_session_t hdl) { return (uint64_t)hdl; } - -uint64_t odp_crypto_compl_to_u64(odp_crypto_compl_t hdl) -{ - return _odp_pri(hdl); -}
commit 631d2cb64778f6ad25c178075b8af0e294f3200d Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 8 14:05:52 2018 +0200
Port 9cb761f "linux-gen: drop crypto async mode implementation"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp_packet_internal.h b/platform/linux-dpdk/include/odp_packet_internal.h index 6a4254ca..02152a46 100644 --- a/platform/linux-dpdk/include/odp_packet_internal.h +++ b/platform/linux-dpdk/include/odp_packet_internal.h @@ -131,8 +131,6 @@ typedef struct { /* Classifier destination queue */ queue_t dst_queue;
- /* Result for crypto */ - odp_crypto_generic_op_result_t op_result; } odp_packet_hdr_t __rte_cache_aligned;
/** @@ -170,7 +168,6 @@ static inline void copy_packet_cls_metadata(odp_packet_hdr_t *src_hdr, dst_hdr->p = src_hdr->p; dst_hdr->dst_queue = src_hdr->dst_queue; dst_hdr->timestamp = src_hdr->timestamp; - dst_hdr->op_result = src_hdr->op_result; }
static inline uint32_t packet_len(odp_packet_hdr_t *pkt_hdr) diff --git a/platform/linux-dpdk/odp_crypto.c b/platform/linux-dpdk/odp_crypto.c index 3d5926fa..53fc24a7 100644 --- a/platform/linux-dpdk/odp_crypto.c +++ b/platform/linux-dpdk/odp_crypto.c @@ -4,6 +4,8 @@ * SPDX-License-Identifier: BSD-3-Clause */
+#include "config.h" + #include <odp_posix_extensions.h> #include <odp/api/crypto.h> #include <odp_internal.h> @@ -60,11 +62,6 @@ typedef struct crypto_global_s crypto_global_t; static crypto_global_t *global; static odp_shm_t crypto_global_shm;
-static odp_crypto_generic_op_result_t *get_op_result_from_event(odp_event_t ev) -{ - return &(odp_packet_hdr(odp_packet_from_event(ev))->op_result); -} - static inline int is_valid_size(uint16_t length, uint16_t min, uint16_t max, uint16_t increment) { @@ -1130,36 +1127,14 @@ int odp_crypto_operation(odp_crypto_op_param_t *param, rte_free(op->sym->auth.aad.data); rte_crypto_op_free(op);
- /* If specified during creation post event to completion queue */ - if (ODP_QUEUE_INVALID != entry->compl_queue) { - odp_event_t completion_event; - odp_crypto_generic_op_result_t *op_result; - odp_buffer_t buf; - - completion_event = odp_packet_to_event(param->out_pkt); - buf = odp_buffer_from_event(completion_event); - _odp_buffer_event_type_set(buf, ODP_EVENT_CRYPTO_COMPL); - _odp_buffer_event_subtype_set(buf, ODP_EVENT_NO_SUBTYPE); - /* Asynchronous, build result (no HW so no errors) and send it*/ - op_result = get_op_result_from_event(completion_event); - op_result->magic = OP_RESULT_MAGIC; - op_result->result = local_result; - if (odp_queue_enq(entry->compl_queue, completion_event)) { - odp_event_free(completion_event); - goto err; - } + /* Synchronous, simply return results */ + if (!result) + goto err; + *result = local_result;
- /* Indicate to caller operation was async */ - *posted = 1; - } else { - /* Synchronous, simply return results */ - if (!result) - goto err; - *result = local_result; + /* Indicate to caller operation was sync */ + *posted = 0;
- /* Indicate to caller operation was sync */ - *posted = 0; - } return 0;
err_op_free: @@ -1263,24 +1238,18 @@ odp_event_t odp_crypto_compl_to_event(odp_crypto_compl_t completion_event) void odp_crypto_compl_result(odp_crypto_compl_t completion_event, odp_crypto_op_result_t *result) { - odp_event_t ev = odp_crypto_compl_to_event(completion_event); - odp_crypto_generic_op_result_t *op_result; + (void)completion_event; + (void)result;
- op_result = get_op_result_from_event(ev); - - if (OP_RESULT_MAGIC != op_result->magic) - ODP_ABORT(); - - memcpy(result, &op_result->result, sizeof(*result)); + /* We won't get such events anyway, so there can be no result */ + ODP_ASSERT(0); }
void odp_crypto_compl_free(odp_crypto_compl_t completion_event) { - odp_buffer_t buf = - odp_buffer_from_event((odp_event_t)completion_event); + odp_event_t ev = odp_crypto_compl_to_event(completion_event);
- _odp_buffer_event_type_set(buf, ODP_EVENT_PACKET); - _odp_buffer_event_subtype_set(buf, ODP_EVENT_PACKET_BASIC); + odp_buffer_free(odp_buffer_from_event(ev)); }
void odp_crypto_session_param_init(odp_crypto_session_param_t *param)
commit 121d5b8caf78fb90181a29b4cedabb121f9dc2ff Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 8 13:53:57 2018 +0200
Port 342c869 "linux-generic: events subtype implementation"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp_buffer_inlines.h b/platform/linux-dpdk/include/odp_buffer_inlines.h index c28528bb..ab26554b 100644 --- a/platform/linux-dpdk/include/odp_buffer_inlines.h +++ b/platform/linux-dpdk/include/odp_buffer_inlines.h @@ -39,6 +39,16 @@ static inline void _odp_buffer_event_type_set(odp_buffer_t buf, int ev) buf_hdl_to_hdr(buf)->event_type = ev; }
+static inline odp_event_subtype_t _odp_buffer_event_subtype(odp_buffer_t buf) +{ + return buf_hdl_to_hdr(buf)->event_subtype; +} + +static inline void _odp_buffer_event_subtype_set(odp_buffer_t buf, int ev) +{ + buf_hdl_to_hdr(buf)->event_subtype = ev; +} + #ifdef __cplusplus } #endif diff --git a/platform/linux-dpdk/include/odp_buffer_internal.h b/platform/linux-dpdk/include/odp_buffer_internal.h index 1c88cdd1..99f400ae 100644 --- a/platform/linux-dpdk/include/odp_buffer_internal.h +++ b/platform/linux-dpdk/include/odp_buffer_internal.h @@ -65,6 +65,9 @@ struct odp_buffer_hdr_t { uint8_t burst_num; uint8_t burst_first;
+ /* Event subtype. Should be ODP_EVENT_NO_SUBTYPE except packets. */ + int8_t event_subtype; + /* Next buf in a list */ struct odp_buffer_hdr_t *next;
diff --git a/platform/linux-dpdk/odp_crypto.c b/platform/linux-dpdk/odp_crypto.c index 466df88b..3d5926fa 100644 --- a/platform/linux-dpdk/odp_crypto.c +++ b/platform/linux-dpdk/odp_crypto.c @@ -1134,11 +1134,12 @@ int odp_crypto_operation(odp_crypto_op_param_t *param, if (ODP_QUEUE_INVALID != entry->compl_queue) { odp_event_t completion_event; odp_crypto_generic_op_result_t *op_result; + odp_buffer_t buf;
completion_event = odp_packet_to_event(param->out_pkt); - _odp_buffer_event_type_set( - odp_buffer_from_event(completion_event), - ODP_EVENT_CRYPTO_COMPL); + buf = odp_buffer_from_event(completion_event); + _odp_buffer_event_type_set(buf, ODP_EVENT_CRYPTO_COMPL); + _odp_buffer_event_subtype_set(buf, ODP_EVENT_NO_SUBTYPE); /* Asynchronous, build result (no HW so no errors) and send it*/ op_result = get_op_result_from_event(completion_event); op_result->magic = OP_RESULT_MAGIC; @@ -1275,9 +1276,11 @@ void odp_crypto_compl_result(odp_crypto_compl_t completion_event,
void odp_crypto_compl_free(odp_crypto_compl_t completion_event) { - _odp_buffer_event_type_set( - odp_buffer_from_event((odp_event_t)completion_event), - ODP_EVENT_PACKET); + odp_buffer_t buf = + odp_buffer_from_event((odp_event_t)completion_event); + + _odp_buffer_event_type_set(buf, ODP_EVENT_PACKET); + _odp_buffer_event_subtype_set(buf, ODP_EVENT_PACKET_BASIC); }
void odp_crypto_session_param_init(odp_crypto_session_param_t *param) diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index d3d37126..55991df3 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -198,6 +198,7 @@ int odp_packet_reset(odp_packet_t pkt, uint32_t len) pkt_hdr->buf_hdr.next = NULL;
pkt_hdr->input = ODP_PKTIO_INVALID; + pkt_hdr->buf_hdr.event_subtype = ODP_EVENT_PACKET_BASIC;
mb->port = 0xff; mb->pkt_len = len; diff --git a/platform/linux-dpdk/odp_packet_dpdk.c b/platform/linux-dpdk/odp_packet_dpdk.c index 5c323196..c8dc3835 100644 --- a/platform/linux-dpdk/odp_packet_dpdk.c +++ b/platform/linux-dpdk/odp_packet_dpdk.c @@ -406,6 +406,7 @@ static int recv_pkt_dpdk(pktio_entry_t *pktio_entry, int index,
packet_parse_reset(pkt_hdr); pkt_hdr->input = pktio_entry->s.handle; + pkt_hdr->buf_hdr.event_subtype = ODP_EVENT_PACKET_BASIC;
if (!pktio_cls_enabled(pktio_entry) && pktio_entry->s.config.parser.layer) diff --git a/platform/linux-dpdk/odp_pool.c b/platform/linux-dpdk/odp_pool.c index b99b4501..06d4d6a8 100644 --- a/platform/linux-dpdk/odp_pool.c +++ b/platform/linux-dpdk/odp_pool.c @@ -227,6 +227,7 @@ odp_dpdk_mbuf_ctor(struct rte_mempool *mp, buf_hdr->pool_ptr = pool; buf_hdr->type = mb_ctor_arg->type; buf_hdr->event_type = mb_ctor_arg->type; + buf_hdr->event_subtype = ODP_EVENT_NO_SUBTYPE; }
#define CHECK_U16_OVERFLOW(X) do { \
commit a4ff087a0efdb3dadf102b5a3662e9932bb46558 Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 8 11:51:38 2018 +0200
Port 5e1170e "api: ipsec: factor out definitions for feature support levels"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 5b130754..e7820680 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -57,6 +57,7 @@ odpapiinclude_HEADERS = \ include/odp/api/spinlock_recursive.h \ include/odp/api/std_clib.h \ include/odp/api/std_types.h \ + include/odp/api/support.h \ include/odp/api/sync.h \ include/odp/api/system_info.h \ include/odp/api/thread.h \ diff --git a/platform/linux-dpdk/include/odp/api/support.h b/platform/linux-dpdk/include/odp/api/support.h new file mode 120000 index 00000000..e6196271 --- /dev/null +++ b/platform/linux-dpdk/include/odp/api/support.h @@ -0,0 +1 @@ +../../../../linux-generic/include/odp/api/support.h \ No newline at end of file
commit f80ea94fe7302c43fd489cdb9cdebc62e5d814b6 Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 8 11:48:10 2018 +0200
Port 2f89dc6 "linux-gen: ipsec: add capability function"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 728a8629..5b130754 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -170,6 +170,7 @@ __LIB__libodp_dpdk_la_SOURCES = \ ../linux-generic/odp_hash.c \ odp_init.c \ ../linux-generic/odp_impl.c \ + ../linux-generic/odp_ipsec.c \ ../linux-generic/odp_name_table.c \ odp_packet.c \ odp_packet_dpdk.c \
commit d0ed4ba3a3e5539b47b1db63676a30a20584ff03 Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 8 11:46:40 2018 +0200
Port 712796c "api: ipsec: added IPSEC API"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 0bf50dd2..728a8629 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -40,6 +40,7 @@ odpapiinclude_HEADERS = \ include/odp/api/hash.h \ include/odp/api/hints.h \ include/odp/api/init.h \ + include/odp/api/ipsec.h \ include/odp/api/packet_flags.h \ include/odp/api/packet.h \ include/odp/api/packet_io.h \ @@ -79,6 +80,7 @@ odpapiplatinclude_HEADERS = \ include/odp/api/plat/crypto_types.h \ include/odp/api/plat/event_types.h \ include/odp/api/plat/init_types.h \ + include/odp/api/plat/ipsec_types.h \ include/odp/api/plat/packet_flag_inlines.h \ include/odp/api/plat/packet_flag_inlines_api.h \ include/odp/api/plat/packet_inlines.h \ diff --git a/platform/linux-dpdk/include/odp/api/ipsec.h b/platform/linux-dpdk/include/odp/api/ipsec.h new file mode 120000 index 00000000..eaf507cf --- /dev/null +++ b/platform/linux-dpdk/include/odp/api/ipsec.h @@ -0,0 +1 @@ +../../../../linux-generic/include/odp/api/ipsec.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/plat/ipsec_types.h b/platform/linux-dpdk/include/odp/api/plat/ipsec_types.h new file mode 120000 index 00000000..86fdb184 --- /dev/null +++ b/platform/linux-dpdk/include/odp/api/plat/ipsec_types.h @@ -0,0 +1 @@ +../../../../../linux-generic/include/odp/api/plat/ipsec_types.h \ No newline at end of file
commit ffcdb18d443b1a58b12174008c78f66df2f8eab3 Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 8 11:39:39 2018 +0200
Port 4f2ebb2 "linux-gen: arch: single cpu cycles file"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 9dcc86c9..0bf50dd2 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -202,39 +202,34 @@ __LIB__libodp_dpdk_la_SOURCES = \ ../linux-generic/odp_weak.c
if ARCH_IS_ARM -__LIB__libodp_dpdk_la_SOURCES += arch/default/odp_cpu_arch.c \ - arch/default/odp_cpu_cycles.c \ - arch/default/odp_global_time.c \ - arch/default/odp_sysinfo_parse.c +__LIB__libodp_dpdk_la_SOURCES += arch/default/odp_cpu_cycles.c \ + arch/default/odp_global_time.c \ + arch/default/odp_sysinfo_parse.c arch_odp_headers = arch/arm/odp/api/cpu_arch.h endif if ARCH_IS_AARCH64 -__LIB__libodp_dpdk_la_SOURCES += arch/default/odp_cpu_arch.c \ - arch/default/odp_cpu_cycles.c \ - arch/aarch64/odp_global_time.c \ - arch/default/odp_sysinfo_parse.c +__LIB__libodp_dpdk_la_SOURCES += arch/default/odp_cpu_cycles.c \ + arch/aarch64/odp_global_time.c \ + arch/default/odp_sysinfo_parse.c arch_odp_headers = arch/aarch64/odp/api/cpu_arch.h endif if ARCH_IS_MIPS64 -__LIB__libodp_dpdk_la_SOURCES += arch/mips64/odp_cpu_arch.c \ - arch/default/odp_cpu_cycles.c \ - arch/default/odp_global_time.c \ - arch/mips64/odp_sysinfo_parse.c +__LIB__libodp_dpdk_la_SOURCES += arch/mips64/odp_cpu_cycles.c \ + arch/default/odp_global_time.c \ + arch/mips64/odp_sysinfo_parse.c arch_odp_headers = arch/mips64/odp/api/cpu_arch.h endif if ARCH_IS_POWERPC -__LIB__libodp_dpdk_la_SOURCES += arch/default/odp_cpu_arch.c \ - arch/default/odp_cpu_cycles.c \ - arch/default/odp_global_time.c \ - arch/powerpc/odp_sysinfo_parse.c +__LIB__libodp_dpdk_la_SOURCES += arch/default/odp_cpu_cycles.c \ + arch/default/odp_global_time.c \ + arch/powerpc/odp_sysinfo_parse.c arch_odp_headers = arch/powerpc/odp/api/cpu_arch.h endif if ARCH_IS_X86 __LIB__libodp_dpdk_la_SOURCES += arch/x86/cpu_flags.c \ - arch/x86/odp_cpu_arch.c \ - arch/default/odp_cpu_cycles.c \ - arch/x86/odp_global_time.c \ - arch/x86/odp_sysinfo_parse.c + arch/x86/odp_cpu_cycles.c \ + arch/x86/odp_global_time.c \ + arch/x86/odp_sysinfo_parse.c arch_odp_headers = arch/x86/odp/api/cpu_arch.h noinst_HEADERS += arch/x86/cpu_flags.h endif
commit a738b2081ca97775a4d3d4894b24d66deabefe5b Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 8 11:34:34 2018 +0200
Port 1f2bfb1 "linux-gen: arch: cpu arch specific time header"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 7f44f83d..9dcc86c9 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -6,6 +6,7 @@ AM_CFLAGS += $(DPDK_CFLAGS) AM_CPPFLAGS = -I$(srcdir)/include AM_CPPFLAGS += -I$(top_srcdir)/platform/linux-generic/include AM_CPPFLAGS += -I$(top_srcdir)/include +AM_CPPFLAGS += -I$(top_srcdir)/platform/$(with_platform)/arch AM_CPPFLAGS += -I$(top_srcdir)/include/odp/arch/@ARCH_ABI@ AM_CPPFLAGS += -I$(top_builddir)/include AM_CPPFLAGS += -Iinclude @@ -109,6 +110,7 @@ nodist_odpapiplatinclude_HEADERS = \ include/odp/api/plat/static_inline.h
noinst_HEADERS = \ + arch/odp_arch_time_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_align_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_atomic_internal.h \ include/odp_buffer_inlines.h \ @@ -140,7 +142,6 @@ noinst_HEADERS = \ ${top_srcdir}/platform/linux-generic/include/odp_schedule_if.h \ ${top_srcdir}/platform/linux-generic/include/odp_sorted_list_internal.h \ include/odp_shm_internal.h \ - ${top_srcdir}/platform/linux-generic/include/odp_time_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_timer_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_timer_wheel_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_traffic_mngr_internal.h \ diff --git a/platform/linux-dpdk/odp_time.c b/platform/linux-dpdk/odp_time.c index 2a699a03..17125518 100644 --- a/platform/linux-dpdk/odp_time.c +++ b/platform/linux-dpdk/odp_time.c @@ -10,7 +10,7 @@ #include <odp/api/time.h> #include <odp/api/hints.h> #include <odp_debug_internal.h> -#include <odp_time_internal.h> +#include <odp_arch_time_internal.h> #include <rte_cycles.h> #include <string.h> #include <inttypes.h>
commit 335dccf9fbd4854e9f093a1d5456f00b28b29b45 Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 8 11:28:45 2018 +0200
Port cd28998 "linux-gen: packet: inline layer pointers"
Also inlines odp_packet_offset() function.
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h index 60bece88..4ce14e9e 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h @@ -32,6 +32,38 @@ extern const _odp_packet_inline_offset_t _odp_packet_inline; /** @internal Pool inline function offsets */ extern const _odp_pool_inline_offset_t _odp_pool_inline;
+/** @internal Inline function @param pkt @param offset @param len @param seg + * @return */ +static inline void *_odp_packet_offset(odp_packet_t pkt, uint32_t offset, + uint32_t *len, odp_packet_seg_t *seg) +{ + struct rte_mbuf *mb = &_odp_pkt_get(pkt, struct rte_mbuf, mb); + + if (odp_unlikely(offset == ODP_PACKET_OFFSET_INVALID)) + goto err; + + do { + if (mb->data_len > offset) + break; + offset -= mb->data_len; + mb = mb->next; + } while (mb); + + if (mb) { + if (len) + *len = mb->data_len - offset; + if (seg) + *seg = (odp_packet_seg_t)(uintptr_t)mb; + return (void *)(rte_pktmbuf_mtod(mb, char *) + offset); + } +err: + if (len) + *len = 0; + if (seg) + *seg = NULL; + return NULL; +} + /** @internal Inline function @param pkt @return */ static inline void *_odp_packet_data(odp_packet_t pkt) { @@ -125,6 +157,27 @@ static inline uint32_t _odp_packet_l4_offset(odp_packet_t pkt) return _odp_pkt_get(pkt, uint16_t, l4_offset); }
+/** @internal Inline function @param pkt @param len @return */ +static inline void *_odp_packet_l2_ptr(odp_packet_t pkt, uint32_t *len) +{ + return _odp_packet_offset(pkt, _odp_pkt_get(pkt, uint16_t, l2_offset), + len, NULL); +} + +/** @internal Inline function @param pkt @param len @return */ +static inline void *_odp_packet_l3_ptr(odp_packet_t pkt, uint32_t *len) +{ + return _odp_packet_offset(pkt, _odp_pkt_get(pkt, uint16_t, l3_offset), + len, NULL); +} + +/** @internal Inline function @param pkt @param len @return */ +static inline void *_odp_packet_l4_ptr(odp_packet_t pkt, uint32_t *len) +{ + return _odp_packet_offset(pkt, _odp_pkt_get(pkt, uint16_t, l4_offset), + len, NULL); +} + /** @internal Inline function @param pkt @return */ static inline uint32_t _odp_packet_flow_hash(odp_packet_t pkt) { diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_inlines_api.h b/platform/linux-dpdk/include/odp/api/plat/packet_inlines_api.h index 2f26a848..41cfc0fb 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_inlines_api.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_inlines_api.h @@ -38,6 +38,12 @@ _ODP_INLINE uint32_t odp_packet_tailroom(odp_packet_t pkt) return _odp_packet_tailroom(pkt); }
+_ODP_INLINE void *odp_packet_offset(odp_packet_t pkt, uint32_t offset, + uint32_t *len, odp_packet_seg_t *seg) +{ + return _odp_packet_offset(pkt, offset, len, seg); +} + _ODP_INLINE odp_pool_t odp_packet_pool(odp_packet_t pkt) { return _odp_packet_pool(pkt); @@ -83,6 +89,21 @@ _ODP_INLINE uint32_t odp_packet_l4_offset(odp_packet_t pkt) return _odp_packet_l4_offset(pkt); }
+_ODP_INLINE void *odp_packet_l2_ptr(odp_packet_t pkt, uint32_t *len) +{ + return _odp_packet_l2_ptr(pkt, len); +} + +_ODP_INLINE void *odp_packet_l3_ptr(odp_packet_t pkt, uint32_t *len) +{ + return _odp_packet_l3_ptr(pkt, len); +} + +_ODP_INLINE void *odp_packet_l4_ptr(odp_packet_t pkt, uint32_t *len) +{ + return _odp_packet_l4_ptr(pkt, len); +} + _ODP_INLINE uint32_t odp_packet_flow_hash(odp_packet_t pkt) { return _odp_packet_flow_hash(pkt); diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index b1521fe5..d3d37126 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -506,31 +506,6 @@ int odp_packet_trunc_tail(odp_packet_t *pkt, uint32_t len, void **tail_ptr, return 0; }
-void *odp_packet_offset(odp_packet_t pkt, uint32_t offset, uint32_t *len, - odp_packet_seg_t *seg) -{ - struct rte_mbuf *mb = &(odp_packet_hdr(pkt)->buf_hdr.mb); - - do { - if (mb->data_len > offset) { - break; - } else { - offset -= mb->data_len; - mb = mb->next; - } - } while (mb); - - if (mb) { - if (len) - *len = mb->data_len - offset; - if (seg) - *seg = (odp_packet_seg_t)(uintptr_t)mb; - return (void *)(rte_pktmbuf_mtod(mb, char *) + offset); - } else { - return NULL; - } -} - /* * * Meta-data @@ -548,27 +523,6 @@ void odp_packet_user_ptr_set(odp_packet_t pkt, const void *ctx) odp_packet_hdr(pkt)->buf_hdr.buf_cctx = ctx; }
-static inline void *packet_offset_to_ptr(odp_packet_t pkt, uint32_t *len, - const size_t offset) -{ - if (odp_unlikely(offset == ODP_PACKET_OFFSET_INVALID)) - return NULL; - - if (len) - return odp_packet_offset(pkt, offset, len, NULL); - else - return odp_packet_offset(pkt, offset, NULL, NULL); -} - -void *odp_packet_l2_ptr(odp_packet_t pkt, uint32_t *len) -{ - odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); - - if (!packet_hdr_has_l2(pkt_hdr)) - return NULL; - return packet_offset_to_ptr(pkt, len, pkt_hdr->p.l2_offset); -} - int odp_packet_l2_offset_set(odp_packet_t pkt, uint32_t offset) { odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); @@ -581,13 +535,6 @@ int odp_packet_l2_offset_set(odp_packet_t pkt, uint32_t offset) return 0; }
-void *odp_packet_l3_ptr(odp_packet_t pkt, uint32_t *len) -{ - odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); - - return packet_offset_to_ptr(pkt, len, pkt_hdr->p.l3_offset); -} - int odp_packet_l3_offset_set(odp_packet_t pkt, uint32_t offset) { odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); @@ -599,13 +546,6 @@ int odp_packet_l3_offset_set(odp_packet_t pkt, uint32_t offset) return 0; }
-void *odp_packet_l4_ptr(odp_packet_t pkt, uint32_t *len) -{ - odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); - - return packet_offset_to_ptr(pkt, len, pkt_hdr->p.l4_offset); -} - int odp_packet_l4_offset_set(odp_packet_t pkt, uint32_t offset) { odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt);
commit 741c5545623f3f37b8c43ab646615ef8c8ba4212 Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 8 10:01:17 2018 +0200
Port 38fb73d "linux-gen: packet: inline layer offsets"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h index 023d16ab..60bece88 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h @@ -107,6 +107,24 @@ static inline uint32_t _odp_packet_user_area_size(odp_packet_t pkt) return _odp_pool_get(pool, uint32_t, uarea_size); }
+/** @internal Inline function @param pkt @return */ +static inline uint32_t _odp_packet_l2_offset(odp_packet_t pkt) +{ + return _odp_pkt_get(pkt, uint16_t, l2_offset); +} + +/** @internal Inline function @param pkt @return */ +static inline uint32_t _odp_packet_l3_offset(odp_packet_t pkt) +{ + return _odp_pkt_get(pkt, uint16_t, l3_offset); +} + +/** @internal Inline function @param pkt @return */ +static inline uint32_t _odp_packet_l4_offset(odp_packet_t pkt) +{ + return _odp_pkt_get(pkt, uint16_t, l4_offset); +} + /** @internal Inline function @param pkt @return */ static inline uint32_t _odp_packet_flow_hash(odp_packet_t pkt) { diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_inlines_api.h b/platform/linux-dpdk/include/odp/api/plat/packet_inlines_api.h index 16a445a1..2f26a848 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_inlines_api.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_inlines_api.h @@ -68,6 +68,21 @@ _ODP_INLINE uint32_t odp_packet_user_area_size(odp_packet_t pkt) return _odp_packet_user_area_size(pkt); }
+_ODP_INLINE uint32_t odp_packet_l2_offset(odp_packet_t pkt) +{ + return _odp_packet_l2_offset(pkt); +} + +_ODP_INLINE uint32_t odp_packet_l3_offset(odp_packet_t pkt) +{ + return _odp_packet_l3_offset(pkt); +} + +_ODP_INLINE uint32_t odp_packet_l4_offset(odp_packet_t pkt) +{ + return _odp_packet_l4_offset(pkt); +} + _ODP_INLINE uint32_t odp_packet_flow_hash(odp_packet_t pkt) { return _odp_packet_flow_hash(pkt); diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_types.h b/platform/linux-dpdk/include/odp/api/plat/packet_types.h index 75bec442..434f9225 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_types.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_types.h @@ -72,6 +72,12 @@ typedef struct _odp_packet_inline_offset_t { /** @internal field offset */ uint16_t user_ptr; /** @internal field offset */ + uint16_t l2_offset; + /** @internal field offset */ + uint16_t l3_offset; + /** @internal field offset */ + uint16_t l4_offset; + /** @internal field offset */ uint16_t timestamp; /** @internal field offset */ uint16_t input_flags; diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index d2fea01a..b1521fe5 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -32,6 +32,9 @@ const _odp_packet_inline_offset_t _odp_packet_inline ODP_ALIGNED_CACHE = { .pool = offsetof(odp_packet_hdr_t, buf_hdr.pool_ptr), .input = offsetof(odp_packet_hdr_t, input), .user_ptr = offsetof(odp_packet_hdr_t, buf_hdr.buf_ctx), + .l2_offset = offsetof(odp_packet_hdr_t, p.l2_offset), + .l3_offset = offsetof(odp_packet_hdr_t, p.l3_offset), + .l4_offset = offsetof(odp_packet_hdr_t, p.l4_offset), .timestamp = offsetof(odp_packet_hdr_t, timestamp), .input_flags = offsetof(odp_packet_hdr_t, p.input_flags), .buf_addr = offsetof(odp_packet_hdr_t, buf_hdr.mb.buf_addr), @@ -566,15 +569,6 @@ void *odp_packet_l2_ptr(odp_packet_t pkt, uint32_t *len) return packet_offset_to_ptr(pkt, len, pkt_hdr->p.l2_offset); }
-uint32_t odp_packet_l2_offset(odp_packet_t pkt) -{ - odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); - - if (!packet_hdr_has_l2(pkt_hdr)) - return ODP_PACKET_OFFSET_INVALID; - return pkt_hdr->p.l2_offset; -} - int odp_packet_l2_offset_set(odp_packet_t pkt, uint32_t offset) { odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); @@ -594,13 +588,6 @@ void *odp_packet_l3_ptr(odp_packet_t pkt, uint32_t *len) return packet_offset_to_ptr(pkt, len, pkt_hdr->p.l3_offset); }
-uint32_t odp_packet_l3_offset(odp_packet_t pkt) -{ - odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); - - return pkt_hdr->p.l3_offset; -} - int odp_packet_l3_offset_set(odp_packet_t pkt, uint32_t offset) { odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); @@ -619,13 +606,6 @@ void *odp_packet_l4_ptr(odp_packet_t pkt, uint32_t *len) return packet_offset_to_ptr(pkt, len, pkt_hdr->p.l4_offset); }
-uint32_t odp_packet_l4_offset(odp_packet_t pkt) -{ - odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); - - return pkt_hdr->p.l4_offset; -} - int odp_packet_l4_offset_set(odp_packet_t pkt, uint32_t offset) { odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt);
commit ba20fb859d7ff4c22f01267b6b60e524fd1cb585 Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 8 09:32:40 2018 +0200
Port bb0ec2f "linux-generic: pool: avoid direct use of printf() in check_params"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_pool.c b/platform/linux-dpdk/odp_pool.c index ebdc700a..b99b4501 100644 --- a/platform/linux-dpdk/odp_pool.c +++ b/platform/linux-dpdk/odp_pool.c @@ -247,17 +247,17 @@ static int check_params(odp_pool_param_t *params) switch (params->type) { case ODP_POOL_BUFFER: if (params->buf.num > capa.buf.max_num) { - printf("buf.num too large %u\n", params->buf.num); + ODP_DBG("buf.num too large %u\n", params->buf.num); return -1; }
if (params->buf.size > capa.buf.max_size) { - printf("buf.size too large %u\n", params->buf.size); + ODP_DBG("buf.size too large %u\n", params->buf.size); return -1; }
if (params->buf.align > capa.buf.max_align) { - printf("buf.align too large %u\n", params->buf.align); + ODP_DBG("buf.align too large %u\n", params->buf.align); return -1; }
@@ -265,20 +265,19 @@ static int check_params(odp_pool_param_t *params)
case ODP_POOL_PACKET: if (params->pkt.num > capa.pkt.max_num) { - printf("pkt.num too large %u\n", params->pkt.num); - + ODP_DBG("pkt.num too large %u\n", params->pkt.num); return -1; }
if (params->pkt.seg_len > capa.pkt.max_seg_len) { - printf("pkt.seg_len too large %u\n", - params->pkt.seg_len); + ODP_DBG("pkt.seg_len too large %u\n", + params->pkt.seg_len); return -1; }
if (params->pkt.uarea_size > capa.pkt.max_uarea_size) { - printf("pkt.uarea_size too large %u\n", - params->pkt.uarea_size); + ODP_DBG("pkt.uarea_size too large %u\n", + params->pkt.uarea_size); return -1; }
@@ -286,13 +285,13 @@ static int check_params(odp_pool_param_t *params)
case ODP_POOL_TIMEOUT: if (params->tmo.num > capa.tmo.max_num) { - printf("tmo.num too large %u\n", params->tmo.num); + ODP_DBG("tmo.num too large %u\n", params->tmo.num); return -1; } break;
default: - printf("bad pool type %i\n", params->type); + ODP_DBG("bad pool type %i\n", params->type); return -1; }
commit ecd9ae8a5cd4584e3fdb5f720051e44ef619a5e3 Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 8 09:23:06 2018 +0200
Port ffcd799 "linux-generic: pool: validate params before creating pool"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_pool.c b/platform/linux-dpdk/odp_pool.c index 31294a0d..ebdc700a 100644 --- a/platform/linux-dpdk/odp_pool.c +++ b/platform/linux-dpdk/odp_pool.c @@ -241,7 +241,7 @@ static int check_params(odp_pool_param_t *params) { odp_pool_capability_t capa;
- if (odp_pool_capability(&capa) < 0) + if (!params || odp_pool_capability(&capa) < 0) return -1;
switch (params->type) {
commit 4e318caee6b10b6014881770f554ee960a22172d Author: Matias Elo matias.elo@nokia.com Date: Tue Feb 6 17:19:02 2018 +0200
Port dpdk build improvements
Port aab8ff7 "configure: separate common DPDK check to odp_dpdk.m4" Port c6573eb "linux-gen: apply -msse4.2 only in x86 case" Port 442638d "linux-gen: add support for using system-wide DPDK"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.inc b/platform/linux-dpdk/Makefile.inc index deb78066..5d761dfb 100644 --- a/platform/linux-dpdk/Makefile.inc +++ b/platform/linux-dpdk/Makefile.inc @@ -1,6 +1,6 @@ AM_CFLAGS += -I$(top_srcdir)/platform/$(with_platform)/arch/$(ARCH_DIR) AM_CXXFLAGS += -I$(top_srcdir)/platform/$(with_platform)/arch/$(ARCH_DIR) AM_CPPFLAGS += $(DPDK_CPPFLAGS) -AM_LDFLAGS += -R$(SDK_INSTALL_PATH)/lib +AM_LDFLAGS += $(DPDK_LDFLAGS) LOG_COMPILER = $(top_srcdir)/platform/linux-dpdk/test/wrapper-script.sh SH_LOG_COMPILER = $(LOG_COMPILER) diff --git a/platform/linux-dpdk/m4/configure.m4 b/platform/linux-dpdk/m4/configure.m4 index b9e03fd7..0f67b857 100644 --- a/platform/linux-dpdk/m4/configure.m4 +++ b/platform/linux-dpdk/m4/configure.m4 @@ -14,78 +14,49 @@ m4_include([platform/linux-dpdk/m4/odp_schedule.m4]) ########################################################################## # Set DPDK install path ########################################################################## -dpdk_default_dir=yes AC_ARG_WITH([dpdk-path], -AS_HELP_STRING([--with-dpdk-path=DIR path to dpdk build directory]), - [DPDK_PATH=$withval - dpdk_default_dir=no], - [dpdk_default_dir=yes]) +[AS_HELP_STRING([--with-dpdk-path=DIR], [path to dpdk build directory])], + [DPDK_PATH="$withval" + pktio_dpdk_support=yes],[])
-########################################################################## -# DPDK build variables -########################################################################## -DPDK_DRIVER_DIR=/usr/lib/$(uname -m)-linux-gnu -AS_CASE($host_cpu, [x86_64], [DPDK_CPPFLAGS="-msse4.2"]) -if test x$dpdk_default_dir = xyes; then - DPDK_CFLAGS="-include /usr/include/dpdk/rte_config.h" - DPDK_CPPFLAGS="$DPDK_CPPFLAGS -I/usr/include/dpdk" -else - DPDK_DRIVER_DIR=$DPDK_PATH/lib - DPDK_CFLAGS="-include $DPDK_PATH/include/rte_config.h" - DPDK_CPPFLAGS="$DPDK_CPPFLAGS -I$DPDK_PATH/include" -fi
-# Check if we should link against the static or dynamic DPDK library -AC_ARG_ENABLE([shared-dpdk], - [ --enable-shared-dpdk link against the shared DPDK library], - [if test "x$enableval" = "xyes"; then - shared_dpdk=true - fi]) -AM_CONDITIONAL([SHARED_DPDK], [test x$shared_dpdk = xtrue]) - -########################################################################## -# Save and set temporary compilation flags -########################################################################## -OLD_CPPFLAGS="$CPPFLAGS" -CPPFLAGS="$DPDK_CPPFLAGS $CPPFLAGS" +AS_CASE($host_cpu, [x86_64], [DPDK_CPPFLAGS="-msse4.2"]) +AS_IF([test "x$DPDK_PATH" = "xsystem"], + [DPDK_CPPFLAGS="$DPDK_CPPFLAGS -isystem/usr/include/dpdk" + DPDK_LDFLAGS="" + DPDK_PMD_PATH="`$CC --print-file-name=librte_pmd_null.a`" + DPDK_PMD_PATH="`dirname "$DPDK_PMD_PATH"`" + AS_IF([test "x$DPDK_PMD_PATH" = "x"], + [AC_MSG_FAILURE([Could not locate system DPDK PMD directory])])], + [DPDK_CPPFLAGS="$DPDK_CPPFLAGS -isystem $DPDK_PATH/include" + DPDK_LDFLAGS="-L$DPDK_PATH/lib" + DPDK_PMD_PATH="$DPDK_PATH/lib"])
########################################################################## # Check for DPDK availability +# +# DPDK pmd drivers are not linked unless the --whole-archive option is +# used. No spaces are allowed between the --whole-arhive flags. ########################################################################## -AC_CHECK_HEADERS([rte_config.h], [], - [AC_MSG_FAILURE(["can't find DPDK headers"])])
-########################################################################## -# In case of static linking DPDK pmd drivers are not linked unless the -# --whole-archive option is used. No spaces are allowed between the -# --whole-arhive flags. -########################################################################## -if test "x$shared_dpdk" = "xtrue"; then - DPDK_LIBS="-Wl,--no-as-needed,-ldpdk,-as-needed -ldl -lm -lpcap" -else - AS_VAR_SET([DPDK_PMDS], [-Wl,--whole-archive,]) - for filename in "$DPDK_DRIVER_DIR"/librte_pmd_*.a; do - cur_driver=`basename "$filename" .a | sed -e 's/^lib//'` - # rte_pmd_nfp has external dependencies which break linking - if test "$cur_driver" = "rte_pmd_nfp"; then - echo "skip linking rte_pmd_nfp" - else - AS_VAR_APPEND([DPDK_PMDS], [-l$cur_driver,]) - fi - done - AS_VAR_APPEND([DPDK_PMDS], [--no-whole-archive]) - DPDK_LIBS="-L$DPDK_DRIVER_DIR/ -ldpdk -lpthread -ldl -lm -lpcap" +ODP_DPDK_CHECK([$DPDK_CPPFLAGS], [$DPDK_LDFLAGS], [], + [AC_MSG_FAILURE([can't find DPDK])]) + +ODP_DPDK_PMDS([$DPDK_PMD_PATH]) + +AC_DEFINE([ODP_PKTIO_DPDK], [1], + [Define to 1 to enable DPDK packet I/O support]) +AC_DEFINE_UNQUOTED([ODP_DPDK_ZERO_COPY], [$zero_copy], + [Define to 1 to enable DPDK zero copy support]) + +if test -r "$DPDK_PMD_PATH/librte_pmd_pcap.a" && + ! test -r "$DPDK_PMD_PATH/librte_pmd_pcap.so" ; then + DPDK_LIBS="$DPDK_LIBS -lpcap" fi
-AC_SUBST([DPDK_CFLAGS]) +AC_SUBST([DPDK_LDFLAGS]) AC_SUBST([DPDK_CPPFLAGS]) AC_SUBST([DPDK_LIBS]) -AC_SUBST([DPDK_PMDS]) - -########################################################################## -# Restore old saved variables -########################################################################## -CPPFLAGS=$OLD_CPPFLAGS
AC_CONFIG_COMMANDS_PRE([dnl AM_CONDITIONAL([PLATFORM_IS_LINUX_DPDK],
commit 5dd51af507d6ec0c2c3729397d120fa00e35deed Author: Matias Elo matias.elo@nokia.com Date: Tue Feb 6 16:36:47 2018 +0200
Port 5329e52 "linux-gen: pktio: add pktio capability to pktio_entry_t"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp_packet_io_internal.h b/platform/linux-dpdk/include/odp_packet_io_internal.h index 364836c5..4b32ce94 100644 --- a/platform/linux-dpdk/include/odp_packet_io_internal.h +++ b/platform/linux-dpdk/include/odp_packet_io_internal.h @@ -53,7 +53,6 @@ typedef struct { uint8_t lockless_tx; /**< no locking for tx */ uint8_t min_rx_burst; /**< minimum RX burst size */ odp_pktin_hash_proto_t hash; /**< Packet input hash protocol */ - odp_pktio_capability_t capa; /**< interface capabilities */ char ifname[32]; odp_ticketlock_t rx_lock[PKTIO_MAX_QUEUES]; /**< RX queue locks */ odp_ticketlock_t tx_lock[PKTIO_MAX_QUEUES]; /**< TX queue locks */ @@ -97,6 +96,7 @@ struct pktio_entry { pktio_open() */ odp_pool_t pool; odp_pktio_param_t param; + odp_pktio_capability_t capa; /**< Packet IO capabilities */
/* Storage for queue handles * Multi-queue support is pktio driver specific */ diff --git a/platform/linux-dpdk/odp_packet_dpdk.c b/platform/linux-dpdk/odp_packet_dpdk.c index 2d211076..5c323196 100644 --- a/platform/linux-dpdk/odp_packet_dpdk.c +++ b/platform/linux-dpdk/odp_packet_dpdk.c @@ -189,9 +189,9 @@ static int setup_pkt_dpdk(odp_pktio_t pktio ODP_UNUSED, pktio_entry_t *pktio_ent if (!strncmp(dev_info.driver_name, IXGBE_DRV_NAME, strlen(IXGBE_DRV_NAME))) max_queues = RTE_MIN((unsigned)16, max_queues); - pkt_dpdk->capa.max_input_queues = max_queues; - pkt_dpdk->capa.max_output_queues = RTE_MIN(dev_info.max_tx_queues, - PKTIO_MAX_QUEUES); + pktio_entry->s.capa.max_input_queues = max_queues; + pktio_entry->s.capa.max_output_queues = RTE_MIN(dev_info.max_tx_queues, + PKTIO_MAX_QUEUES);
for (i = 0; i < PKTIO_MAX_QUEUES; i++) { odp_ticketlock_init(&pkt_dpdk->rx_lock[i]); @@ -649,7 +649,7 @@ static int mac_get_pkt_dpdk(pktio_entry_t *pktio_entry, void *mac_addr) static int capability_pkt_dpdk(pktio_entry_t *pktio_entry, odp_pktio_capability_t *capa) { - *capa = pktio_entry->s.pkt_dpdk.capa; + *capa = pktio_entry->s.capa; return 0; } static int link_status_pkt_dpdk(pktio_entry_t *pktio_entry)
commit eff372726ba936f16698ef4fcea4498b3fab2db5 Author: Matias Elo matias.elo@nokia.com Date: Tue Feb 6 16:32:01 2018 +0200
Port ce058b8 "linux-gen: pool: add inlined accessors for selected pool parameters"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h index b8708021..023d16ab 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h @@ -29,6 +29,9 @@ extern "C" { /** @internal Inline function offsets */ extern const _odp_packet_inline_offset_t _odp_packet_inline;
+/** @internal Pool inline function offsets */ +extern const _odp_pool_inline_offset_t _odp_pool_inline; + /** @internal Inline function @param pkt @return */ static inline void *_odp_packet_data(odp_packet_t pkt) { @@ -67,7 +70,9 @@ static inline uint32_t _odp_packet_tailroom(odp_packet_t pkt) /** @internal Inline function @param pkt @return */ static inline odp_pool_t _odp_packet_pool(odp_packet_t pkt) { - return _odp_pkt_get(pkt, odp_pool_t, pool); + void *pool = _odp_pkt_get(pkt, void *, pool); + + return _odp_pool_get(pool, odp_pool_t, pool_hdl); }
/** @internal Inline function @param pkt @return */ @@ -97,7 +102,9 @@ static inline void *_odp_packet_user_area(odp_packet_t pkt) /** @internal Inline function @param pkt @return */ static inline uint32_t _odp_packet_user_area_size(odp_packet_t pkt) { - return _odp_pkt_get(pkt, uint32_t, udata_len); + void *pool = _odp_pkt_get(pkt, void *, pool); + + return _odp_pool_get(pool, uint32_t, uarea_size); }
/** @internal Inline function @param pkt @return */ diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_types.h b/platform/linux-dpdk/include/odp/api/plat/packet_types.h index a75a9a15..75bec442 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_types.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_types.h @@ -85,8 +85,6 @@ typedef struct _odp_packet_inline_offset_t { uint16_t seg_len; /** @internal field offset */ uint16_t nb_segs; - /** @internal field offset */ - uint16_t udata_len; /** @internal offset */ uint16_t udata; /** @internal field offset */ diff --git a/platform/linux-dpdk/include/odp_buffer_internal.h b/platform/linux-dpdk/include/odp_buffer_internal.h index d7673e1c..1c88cdd1 100644 --- a/platform/linux-dpdk/include/odp_buffer_internal.h +++ b/platform/linux-dpdk/include/odp_buffer_internal.h @@ -82,10 +82,6 @@ struct odp_buffer_hdr_t {
/* Pool pointer */ void *pool_ptr; - - /* Pool handle: will be removed, used only for odp_packet_pool() - * inlining */ - odp_pool_t pool_hdl; };
ODP_STATIC_ASSERT(BUFFER_BURST_SIZE < 256, "BUFFER_BURST_SIZE_TOO_LARGE"); diff --git a/platform/linux-dpdk/include/odp_packet_internal.h b/platform/linux-dpdk/include/odp_packet_internal.h index ce4e754c..6a4254ca 100644 --- a/platform/linux-dpdk/include/odp_packet_internal.h +++ b/platform/linux-dpdk/include/odp_packet_internal.h @@ -125,9 +125,6 @@ typedef struct { * Members below are not initialized by packet_init() */
- /* User metadata size, it's right after odp_packet_hdr_t */ - uint32_t uarea_size; - /* Timestamp value */ odp_time_t timestamp;
diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index 40f2d324..d2fea01a 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -29,7 +29,7 @@
const _odp_packet_inline_offset_t _odp_packet_inline ODP_ALIGNED_CACHE = { .mb = offsetof(odp_packet_hdr_t, buf_hdr.mb), - .pool = offsetof(odp_packet_hdr_t, buf_hdr.pool_hdl), + .pool = offsetof(odp_packet_hdr_t, buf_hdr.pool_ptr), .input = offsetof(odp_packet_hdr_t, input), .user_ptr = offsetof(odp_packet_hdr_t, buf_hdr.buf_ctx), .timestamp = offsetof(odp_packet_hdr_t, timestamp), @@ -39,7 +39,6 @@ const _odp_packet_inline_offset_t _odp_packet_inline ODP_ALIGNED_CACHE = { .pkt_len = offsetof(odp_packet_hdr_t, buf_hdr.mb.pkt_len), .seg_len = offsetof(odp_packet_hdr_t, buf_hdr.mb.data_len), .nb_segs = offsetof(odp_packet_hdr_t, buf_hdr.mb.nb_segs), - .udata_len = offsetof(odp_packet_hdr_t, uarea_size), .udata = sizeof(odp_packet_hdr_t), .rss = offsetof(odp_packet_hdr_t, buf_hdr.mb.hash.rss), .ol_flags = offsetof(odp_packet_hdr_t, buf_hdr.mb.ol_flags), diff --git a/platform/linux-dpdk/odp_pool.c b/platform/linux-dpdk/odp_pool.c index 16f433fa..31294a0d 100644 --- a/platform/linux-dpdk/odp_pool.c +++ b/platform/linux-dpdk/odp_pool.c @@ -48,6 +48,16 @@ /* The pool table ptr - resides in shared memory */ pool_table_t *pool_tbl;
+#include <odp/visibility_begin.h> + +/* Fill in pool header field offsets for inline functions */ +const _odp_pool_inline_offset_t _odp_pool_inline ODP_ALIGNED_CACHE = { + .pool_hdl = offsetof(pool_t, pool_hdl), + .uarea_size = offsetof(pool_t, params.pkt.uarea_size) +}; + +#include <odp/visibility_end.h> + static inline odp_pool_t pool_index_to_handle(uint32_t pool_idx) { return _odp_cast_scalar(odp_pool_t, pool_idx); @@ -199,13 +209,10 @@ odp_dpdk_mbuf_ctor(struct rte_mempool *mp,
/* keep some headroom between start of buffer and data */ if (mb_ctor_arg->type == ODP_POOL_PACKET) { - odp_packet_hdr_t *pkt_hdr; mb->data_off = RTE_PKTMBUF_HEADROOM; mb->nb_segs = 1; mb->port = 0xff; mb->vlan_tci = 0; - pkt_hdr = (odp_packet_hdr_t *)raw_mbuf; - pkt_hdr->uarea_size = mb_ctor_arg->pkt_uarea_size; } else { mb->data_off = 0; } @@ -217,7 +224,6 @@ odp_dpdk_mbuf_ctor(struct rte_mempool *mp, /* Save index, might be useful for debugging purposes */ buf_hdr = (struct odp_buffer_hdr_t *)raw_mbuf; buf_hdr->index = i; - buf_hdr->pool_hdl = pool->pool_hdl; buf_hdr->pool_ptr = pool; buf_hdr->type = mb_ctor_arg->type; buf_hdr->event_type = mb_ctor_arg->type; @@ -632,7 +638,9 @@ int odp_pool_destroy(odp_pool_t pool_hdl)
odp_pool_t odp_buffer_pool(odp_buffer_t buf) { - return buf_hdl_to_hdr(buf)->pool_hdl; + pool_t *pool = buf_hdl_to_hdr(buf)->pool_ptr; + + return pool->pool_hdl; }
void odp_pool_param_init(odp_pool_param_t *params)
commit f5c0532064a15405de0ddfe9f5d33300cb76e85b Author: Matias Elo matias.elo@nokia.com Date: Tue Feb 6 16:03:43 2018 +0200
Port 163f57d "linux-gen: dpdk: reorganize pkt_dpdk_t struct"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/include/odp_packet_io_internal.h b/platform/linux-dpdk/include/odp_packet_io_internal.h index 17ca1297..364836c5 100644 --- a/platform/linux-dpdk/include/odp_packet_io_internal.h +++ b/platform/linux-dpdk/include/odp_packet_io_internal.h @@ -48,19 +48,17 @@ typedef struct {
/** Packet socket using dpdk mmaped rings for both Rx and Tx */ typedef struct { + uint8_t portid; /**< DPDK port identifier */ + uint8_t lockless_rx; /**< no locking for rx */ + uint8_t lockless_tx; /**< no locking for tx */ + uint8_t min_rx_burst; /**< minimum RX burst size */ + odp_pktin_hash_proto_t hash; /**< Packet input hash protocol */ odp_pktio_capability_t capa; /**< interface capabilities */ - - /********************************/ char ifname[32]; - uint8_t min_rx_burst; - uint8_t portid; - odp_bool_t vdev_sysc_promisc; /**< promiscuous mode defined with - system call */ - odp_pktin_hash_proto_t hash; /**< Packet input hash protocol */ - odp_bool_t lockless_rx; /**< no locking for rx */ - odp_bool_t lockless_tx; /**< no locking for tx */ odp_ticketlock_t rx_lock[PKTIO_MAX_QUEUES]; /**< RX queue locks */ odp_ticketlock_t tx_lock[PKTIO_MAX_QUEUES]; /**< TX queue locks */ + uint8_t vdev_sysc_promisc; /**< promiscuous mode defined with + system call */ } pkt_dpdk_t;
struct pktio_entry {
commit 84d428191111706474e897643e7119d8b1d84a95 Author: Matias Elo matias.elo@nokia.com Date: Tue Feb 6 15:05:08 2018 +0200
Port d593398 "linux-gen: dpdk: fix max_input_queues value for ixgbe devices"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_packet_dpdk.c b/platform/linux-dpdk/odp_packet_dpdk.c index ae9da479..2d211076 100644 --- a/platform/linux-dpdk/odp_packet_dpdk.c +++ b/platform/linux-dpdk/odp_packet_dpdk.c @@ -156,6 +156,7 @@ static int setup_pkt_dpdk(odp_pktio_t pktio ODP_UNUSED, pktio_entry_t *pktio_ent struct rte_eth_dev_info dev_info; pkt_dpdk_t * const pkt_dpdk = &pktio_entry->s.pkt_dpdk; int i; + unsigned max_queues;
if (!_dpdk_netdev_is_valid(netdev)) { ODP_DBG("Interface name should only contain numbers!: %s\n", @@ -183,8 +184,12 @@ static int setup_pkt_dpdk(odp_pktio_t pktio ODP_UNUSED, pktio_entry_t *pktio_ent
_dpdk_print_port_mac(portid);
- pkt_dpdk->capa.max_input_queues = RTE_MIN(dev_info.max_rx_queues, - PKTIO_MAX_QUEUES); + max_queues = RTE_MIN(dev_info.max_rx_queues, PKTIO_MAX_QUEUES); + /* ixgbe devices support only 16 RX queues in RSS mode */ + if (!strncmp(dev_info.driver_name, IXGBE_DRV_NAME, + strlen(IXGBE_DRV_NAME))) + max_queues = RTE_MIN((unsigned)16, max_queues); + pkt_dpdk->capa.max_input_queues = max_queues; pkt_dpdk->capa.max_output_queues = RTE_MIN(dev_info.max_tx_queues, PKTIO_MAX_QUEUES);
commit 8fd0a71f9edb0379a0e59374cdb7be7f99b34fbc Author: Matias Elo matias.elo@nokia.com Date: Tue Feb 6 14:52:20 2018 +0200
Port 4af5396 "linux-gen: dpdk: handle minimum rx burst size"
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_packet_dpdk.c b/platform/linux-dpdk/odp_packet_dpdk.c index e40332e2..ae9da479 100644 --- a/platform/linux-dpdk/odp_packet_dpdk.c +++ b/platform/linux-dpdk/odp_packet_dpdk.c @@ -34,6 +34,13 @@ #include <net/if.h> #include <math.h>
+/* DPDK poll mode drivers requiring minimum RX burst size DPDK_MIN_RX_BURST */ +#define IXGBE_DRV_NAME "net_ixgbe" +#define I40E_DRV_NAME "net_i40e" + +/* Minimum RX burst size */ +#define DPDK_MIN_RX_BURST 4 + /* Ops for all implementation of pktio. * Order matters. The first implementation to setup successfully * will be picked. @@ -164,8 +171,13 @@ static int setup_pkt_dpdk(odp_pktio_t pktio ODP_UNUSED, pktio_entry_t *pktio_ent ODP_DBG("No driver found for interface: %s\n", netdev); return -1; } - if (!strcmp(dev_info.driver_name, "rte_ixgbe_pmd")) - pkt_dpdk->min_rx_burst = 4; + /* Drivers requiring minimum burst size. Supports also *_vf versions + * of the drivers. */ + if (!strncmp(dev_info.driver_name, IXGBE_DRV_NAME, + strlen(IXGBE_DRV_NAME)) || + !strncmp(dev_info.driver_name, I40E_DRV_NAME, + strlen(I40E_DRV_NAME))) + pkt_dpdk->min_rx_burst = DPDK_MIN_RX_BURST; else pkt_dpdk->min_rx_burst = 0;
commit 3f2f63a3430c932cf65795b8e15a1c4ba72a199c Merge: 46b3da57 49ebafae Author: Matias Elo matias.elo@nokia.com Date: Tue Feb 13 08:50:45 2018 +0200
Merge tag 'v1.17.0.0' of https://github.com/Linaro/odp into odp-dpdk
== OpenDataPlane (1.17.0.0) === New Features ODP v1.17.0.0 is Tiger Moth Release Candidate 1 (RC 1). It introduces significant new API support as well as functional refinements that expand ODP offload support to cover IPsec, as well as other improvements.
==== APIs The following new and changed APIs are included in this release:
===== Event Extensions The ODP event model has been expanded to include new types as well as event subtypes. Subtypes are used to qualify an event by indicating that the event carries additional metadata relating to specific usage or operations.
New event `ODP_EVENT_IPSEC_STATUS` (to be discussed below) is added. The initial subtypes defined are: `ODP_EVENT_PACKET_BASIC`, `ODP_EVENT_PACKET_CRYPTO`, `ODP_EVENT_PACKET_IPSEC`, and `ODP_EVENT_NO_SUBTYPE`, which are also discussed below.
Associated with this support, new event APIs are added:
* `odp_event_subtype()` extracts the `odp_event_subtype_t` from an `odp_event_t`.
* `odp_event_types()` returns the `odp_event_type_t` and `odp_event_subtype_t` of an `odp_event_t` in a single call.
* `odp_event_type_multi()` scans a list of `odp_event_t` objects and returns the number that share the same indicated `odp_event_type_t`. This allows multiple events to be processed by groups of the same event type.
* `odp_event_filter_packet()` scans a list of `odp_event_t` objects and partitions them into a returned array of `odp_packet_t` objects and a remaining array of non-packet events.
* `odp_event_free_multi()` frees multiple events in a single call.
* `odp_event_free_sp()` frees multiple events originating from the same pool in a single call. The caller must assure that the input events are from the same pool.
===== IPsec support ODP Tiger Moth introduces comprehensive protocol offload support for IPsec, allowing applications to leverage the IPsec acceleration capabilities of many SoCs. Support includes APIs for Security Association (SA) creation and lifecycle management, as well as IPsec packet operations for inbound (RX) and outbound (TX) processing. Packet operations are further divided into lookaside and inline support.
====== Lookaside Support Lookaside processing enables IPsec packets to be decrypted into plain packets or plain packets to be encrypted into IPsec packets in a single operation under explicit application control. This is useful for packets that need pre- or post-processing, or to better fit with existing application design.
Two forms of lookaside processing are provided: the `odp_ipsec_in()` and `odp_ipsec_out()` APIs provide synchronous decrypt and encrypt support, respectively. The corresponding `odp_ipsec_in_enq()` and `odp_ipsec_out_enq()` APIs provide these same services in asynchronous form where operations can be launched and completed later.
====== Inline Support In contrast to lookaside support, IPsec inline support permits applications to fully leverage the offload capabilities found in many SoCs by allowing inbound IPsec packets to be recognized and decrypted automatically before they are presented to the application for processing. This is done by configuring a Security Association (SA) and its associated PktIO to operate in inline mode.
Similarly, following output SA and PktIO configuration, the `odp_ipsec_out_inline()` API permits a packet to be encrypted into an IPsec packet and automatically scheduled for TX processing in a single operation. Such "fire and forget" processing enables applications to leverage IPsec HW support for such processing in a portable manner.
Applications using IPsec inline support need only "touch" a packet once compared to three times when using lookaside processing, leading to greater processing efficiency.
====== IPsec Events New event types and subtypes are introduced to provide support for IPsec processing. The `ODP_EVENT_PACKET` type has a new subtype: `ODP_EVENT_PACKET_IPSEC` that provides extended metadata associated with IPsec packets that have been processed. The new `ODP_EVENT_IPSEC_STATUS` event, in turn, is used to report IPsec status events such as completion notifications associated with `odp_ipsec_sa_disable()` calls.
The `odp_ipsec_result()` API is used to obtain IPsec result metadata from a packet that has event subtype `ODP_EVENT_PACKET_IPSEC`, while the `odp_ipsec_status()` API is used to obtain IPsec status metadata from an `ODP_EVENT_IPSEC_STATUS` event.
===== Parser APIs Packet parsing has been overhauled with the introduction of two new APIs:
* `odp_packet_parse()` * `odp_packet_parse_multi()`
These use an `odp_packet_parse_param_t` struct to control the type and depth of parsing to be performed. These routines are intended to be used to process packets that have been decapsulated following IPsec decryption or other tunneling or on IP fragments after they have been reassembled.
Associated with this improved parse support, the `odp_parser_layer_t` struct is deprecated and replaced with a more general `odp_proto_layer_t` struct that is used both in PktIO configuration as well as the new parser APIs.
===== Crypto AES-CTR and AES-GMAC Support The ODP crypto APIs are extended to provide support for AES-CTR cipher and AES-GMAC authentication modes, reflecting the growing availability of accelerated support for these.
===== Crypto removal of DES-CBC DES-CBC is no longer considered secure and support for it is removed in ODP.
===== Crypto move AAD length to sessions The Additional Authentication Data (AAD) length is now part of the `odp_crypto_session_t` rather than individual crypto operations. This provides better compatibility with DPDK, which made a similar API adjustment in it's 17.08 release.
===== Crypto Packet APIs While the `odp_crypto_operation()` API is retained for compatibility, new packet-oriented variants are introduced that provide additional capabilities and flexibility. These APIs are:
* `odp_crypto_op()` Performs synchronous crypto operations on one or more input packets under the control of an associated `odp_crypto_packet_op_param_t` struct.
* `odp_crypto_op_enq()` Performs asynchronous crypto operations on or or more input packets under the control of an associated `odp_crypto_packet_op_param_t` struct.
While `odp_crypto_operation()` calls result in `ODP_EVENT_CRYPTO_COMPL` events for compatibility, the new packet-oriented APIs result in `ODP_EVENT_PACKET` events that carry the new event subtype `ODP_EVENT_PACKET_CRYPTO`. These packets contain additional metadata associated with the crypto operation. New APIs added for manipulating this metadata include:
* `odp_crypto_packet_from_event()` converts an `odp_event_t` of type `ODP_EVENT_PACKET` and subtype `ODP_EVENT_PACKET_CRYPTO` to an `odp_packet_t`.
* `odp_crypto_packet_to_event()` converts an `odp_packet_t` crypto packet back into an `odp_event_t`.
* `odp_crypto_result()` extracts the `odp_crypto_packet_result_t` struct that contains the crypto metadata associated with an `odp_packet_t` of event subtype `ODP_EVENT_PACKET_CRYPTO`. This struct provides a summary bit that says whether the operation completed successfully as well as `odp_crypto_op_status_t` fields for the `cipher_status` and `auth_status` if a problem was detected.
===== Classification Random Early Detection (RED) Support Random Early Detection (RED) provides a means for input HW to ensure that traffic is treated fairly under conditions of temporary resource overload due to excessive inbound traffic. ODP RED support provides the ability to measure and respond to resource pressure on either pools or queues, and only provides flexibility in how such conditions are to be processed. They can result in input packet drops or backpressure being indicated by transmitting pause frames, depending on the underlying platform capabilities.
The `odp_cls_capability_t` struct returned by the `odp_cls_capability()` API has been expanded to cover this support.
===== Time difference in nanoseconds The new `odp_time_diff_ns()` API permits the delta between two `odp_time_t` values to be computed in a single call.
===== PktIO API Changes ====== PktIO Maximum Frame Lengths The `odp_pktio_mtu()` API is deprecated and replaced by two new APIs: `odp_pktin_maxlen()` and `odp_pktout_maxlen()`. These return the maximum sized packets that are supported for RX and TX processing, respectively, on a given `odp_pktio_t`.
====== PktIO settable MAC address The `odp_pktio_mac_addr_set()` API is added to allow setting of the MAC address associated with an `odp_pktio_t`. The `odp_pktio_set_op_t` field of the `odp_pktio_capability_t` returned by the `odp_pktio_capability()` API now includes the `mac_addr`` field to indicate that this `odp_ptkio_t` supports setting its MAC address.
====== Multiple loop devices The reserved device name `loop` is now extended to `loopX` where X == integer (_e.g.,_ `loop1`, `loop2`, etc.). For compatibility, `loop` is a synonym for `loop0`.
===== Pool API Changes ====== Pool extent info The `odp_pool_info()` API is extended to return the `min_data_addr` and `max_data_addr` fields. These provide information about the minimum and maximum application-visible addresses that may be seen in objects allocated from a particular `odp_pool_t`. Some applications use this information to enable them to store buffer addresses in compressed format. For example, if the "span" of valid addresses is less than 4GB this allows a 64-bit buffer address to be stored as a 32-bit offset.
Since this is purely informational, ODP implementations are under no constraint as to what addresses may be returned for these fields. 0 and `UNINTPTR_MAX` may be used if there are no limits on pool extents.
====== Pool subparameter support The `odp_pool_param_t` structure has been expanded to provide more flexibility to support platforms that are able to offer multiple segment sizes within a single pool. This can lead to greater storage efficiency. These are called subparameters and implementations supporting up to 7 of these are accommodated with these extensions.
The `odp_pool_capability_t` structure is expanded to return the number of subparameters supported by this implementation. The application, in turn, specifies its expected packet size and number distribution in the `odp_pool_pkt_subparam_t` structure that is part of the `odp_pool_param_t` used to define the characteristics of `ODP_POOL_PACKET` pools.
This is fully compatible with previous packet pool support since ODP implementations are under no obligation to support pool subparameters and these, when present, are advisory in nature. They simply serve to allow the application to better communicate its expected packet distribution within a pool so that the ODP implementation may better optimize storage use in the pool.
===== Checksum support Checksum processing support has been formalized with the addition of APIs for determining packet checksum status, controlling packet checksum processing, retrieving partially computed checksums on packets, and computing checksum partial sums for memory areas.
====== Checksum status The APIs `odp_packet_l3_chksum_status()` and `odp_packet_l4_status()` are added to allow the results of packet input checksum processing to be queried. These APIs return an `odp_packet_chksum_status_t` enum that indicates whether checksum validation processing was performed and if so whether the layer 3 or 4 checksum was found to be valid. This is applicable to both normal packet input as well as those processed via IPsec.
====== Checksum insertion PktIOs output checksum processing is configured as part of the `odp_pktout_config_opt_t` struct used as input to `odp_pktio_config()` API. These control whether L3 and/or L4 checksums are to be inserted by default as part of packet TX processing.
Individual packets may override these defaults via the new `odp_packet_l3_chksum_insert()` and `odp_packet_l4_chksum_insert()` APIs. These take precedence over the PktIO default, allowing checksums to be inserted when the PktIO default is to not insert checksums or to suppress checksum insertion if when the PktIO default is to insert checksums.
====== One's complement sums Two new APIs: `odp_packet_ones_comp()` and `odp_chksum_ones_comp16()` are added to assist in application-managed checksum processing. If an implementation has computed a partial checksum as part of the receive processing for an IP fragment, for example, then `odp_packet_ones_comp()` can be used to retrieve this computed value, as well as the byte range over which it was computed. The `odp_chksum_ones_comp16()` API, by contrast, allows the application to perform a 16-bit ones-complement sum over a range of in-memory bytes. Together these can be used to calculate IPv4, TCP, and UDP checksums.
===== Packet multi-event conversion and single pool support New packet APIs have been added to streamline packet processing:
* `odp_packet_free_sp()` is the same as `odp_packet_free_multi()` except that the application guarantees that all packets come from the same pool.
* `odp_packet_from_event_multi()` allows multiple events to be converted from `odp_event_t` to `odp_packet_t` objects in a single call. The caller guarantees that all input `odp_event_t` objects are of type `ODP_EVENT_PACKET`.
* `odp_packet_to_event_multi()` converts multiple `odp_packet_t` objects to corresponding `odp_event_t` objects in a single call.
===== Shared Memory API changes Several changes have been made to the ODP shared memory APIs:
* The `name` field used as input to `odp_shm_reserve()` is now optional. If specified as `NULL` the shared memory area is anonymous and cannot be looked up with `odp_shm_lookup()`. There is also no requirement that names be unique. Duplicate names result in indeterminate output from `odp_shm_lookup()`.
* The `odp_shm_info_t` now includes the `page_size` of the shared memory block and it's (optional) name.
* `odp_shm_print()` API is added to print implementation-defined information associated with the `odp_shm_t` to the ODP log for diagnostic purposes.
===== Add support for non-blocking Queues New queue attributes are introduced to characterize queue behavior as blocking or non-blocking. A blocking queue may stall other threads if a thread is interrupted or suspending during an enqueue or dequeue operation. Nonblocking queues may be either lock free or wait free and provide progress and fairness guarantees to all threads regardless of interruptions or stalls on the part of threads performing queue operations.
The various `odp_nonblocking_t` attributes available are returned by the `odp_queue_capability()` API for both plain and scheduled queues and are in turn requested as part of the `odp_queue_param_t` struct passed to the `odp_queue_create()` API. The intent is to allow applications that have realtime response requirements to better express these needs and utilize platform-specific capabilities in this area.
===== Scheduler ordered lock API changes The following changes have been made to the scheduler APIs:
* Documentation clarifies that an ordered context may only hold one ordered lock at a time. Results are undefined if a second ordered lock is attempted to be acquired while already holding one.
* The `odp_schedule_order_unlock_lock()` API is added to permit an ordered context to switch from one ordered lock to another in a single operation.
===== Timer Capabilities The `odp_timer_capability()` API is added to return an `odp_timer_capability_t` struct that details platform-specific timer capabilities for application use. The only capability currently defined is `highest_res_ns`, which indicates the highest supported resolution supported by a timer. This is the minimum valid value for the `res_ns` timer pool parameter.
=== Scalable Scheduler The `odp-linux` reference implementation adds a new _scalable scheduler_ to the existing default, strict priority, and iquery schedulers. This is enabled by:
`./configure --enable-schedule-scalable`
The scalable scheduler is designed to offer superior scalability in many core environments, especially on AArch64 platforms.
=== Miscellaneous Fixes and Improvements The following miscellaneous improvements have been made to the `linux-generic` reference implementation of ODP.
==== Additional packet inline functions When compiling with `--enable-abi-compat=no` the following additional packet functions are inlined:
* `odp_packet_l2_offset()` * `odp_packet_l2_ptr()` * `odp_packet_l3_offset()` * `odp_packet_l3_ptr()` * `odp_packet_l4_offset()` * `odp_packet_l4_ptr()`
==== Dependencies The ODP test suite now automatically skips C++ tests if no C++ compiler is available.
The odp_pktio_ordered tests are only performed if PCAP is available.
The DEPENDENCIES file has been updated to reflect build/test requirements for running under Red Hat Linux distributions.
==== DPDK 17.08 Support PktIO DPDK support has been upgraded to DPDK 17.08.
=== Test/Example improvements === l2fwd Example A verbose option is added to provide more detail on test runs.
=== ODP generator Numerous performance improvements have been made that results in significantly better I/O rates. This includes a configuration option to control checksum usage.
=== Bug Fixes ==== https://bugs.linaro.org/show_bug.cgi?id=3465%5BBug 3465] CID 1461688: odp_pool_create: Dereference before null check
==== https://bugs.linaro.org/show_bug.cgi?id=3466%5BBug 3466] CID 1396968: buggy check
==== https://bugs.linaro.org/show_bug.cgi?id=3491%5BBug 3491] l2fwd segfaults on api-next with dpdk checksum insertion override
=== Known Issues ==== https://bugs.linaro.org/show_bug.cgi?id=3210%5BBug 3210] packet header parsing routines should verify header checksums
==== https://bugs.linaro.org/show_bug.cgi?id=3517%5BBug 3517] timer test might fail
Signed-off-by: Matias Elo matias.elo@nokia.com
# Conflicts: # .travis.yml # test/validation/api/shmem/shmem.c
commit 46b3da57b150c2f087aaf0ccb12437aa32a9cf11 Merge: 4e156391 d169d0cb Author: Maxim Uvarov maxim.uvarov@linaro.org Date: Mon Feb 5 22:00:14 2018 +0300
Merge pr 16 odp-linux patches up to v16.0.0
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
commit d169d0cb25f614bd07a6cc5ed288bd5c9f48410b Author: Matias Elo matias.elo@nokia.com Date: Fri Feb 2 14:17:28 2018 +0200
linux-dpdk: enable running performance tests
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/Makefile.inc b/platform/linux-dpdk/Makefile.inc index 82962e5a..deb78066 100644 --- a/platform/linux-dpdk/Makefile.inc +++ b/platform/linux-dpdk/Makefile.inc @@ -3,3 +3,4 @@ AM_CXXFLAGS += -I$(top_srcdir)/platform/$(with_platform)/arch/$(ARCH_DIR) AM_CPPFLAGS += $(DPDK_CPPFLAGS) AM_LDFLAGS += -R$(SDK_INSTALL_PATH)/lib LOG_COMPILER = $(top_srcdir)/platform/linux-dpdk/test/wrapper-script.sh +SH_LOG_COMPILER = $(LOG_COMPILER) diff --git a/platform/linux-dpdk/test/Makefile.am b/platform/linux-dpdk/test/Makefile.am index 8cb27b14..a872400e 100644 --- a/platform/linux-dpdk/test/Makefile.am +++ b/platform/linux-dpdk/test/Makefile.am @@ -14,6 +14,8 @@ SUBDIRS += validation/api/pktio endif endif
+TEST_EXTENSIONS = .sh + TESTNAME = linux-dpdk
TESTENV = tests-$(TESTNAME).env diff --git a/platform/linux-dpdk/test/wrapper-script.sh b/platform/linux-dpdk/test/wrapper-script.sh index 0dc2d23c..b0596291 100755 --- a/platform/linux-dpdk/test/wrapper-script.sh +++ b/platform/linux-dpdk/test/wrapper-script.sh @@ -3,6 +3,8 @@ export ODP_PLATFORM_PARAMS=${ODP_PLATFORM_PARAMS:--n 4 --vdev "crypto_openssl"} # where to mount huge pages export HUGEPAGEDIR=${HUGEPAGEDIR:-/mnt/huge} +# exit codes expected by automake for skipped tests +TEST_SKIPPED=77
# Make sure huge pages are released when a unit test crashes "make check" trap ctrl_c INT @@ -42,6 +44,13 @@ function mount_and_reserve() { if [ ! -d $HUGEPAGEDIR ]; then sudo mkdir -p $HUGEPAGEDIR fi + +# Need to be root to use DPDK +if [ "$(id -u)" != "0" ]; then + echo "DPDK needs root privileges" + exit $TEST_SKIPPED +fi + echo "Mounting hugetlbfs" export SIZE=1G export SIZE_KB=1048576 @@ -60,15 +69,7 @@ if [ $res -ne 0 ]; then fi fi echo "running $1!" -if [ ${1: -3} == ".sh" ] -then - sudo TEST_DIR=${TEST_DIR} \ - ODP_PLATFORM_PARAMS="$ODP_PLATFORM_PARAMS" \ - ODP_GDB=$ODP_GDB $1 -else - sudo TEST_DIR=${TEST_DIR} ODP_PLATFORM_PARAMS="$ODP_PLATFORM_PARAMS" \ - $ODP_GDB $1 -fi +$1 res=$? echo "Unmounting hugetlbfs" sleep 0.3 && sudo umount -a -t hugetlbfs diff --git a/test/performance/Makefile.am b/test/performance/Makefile.am index 1dccd82e..9c709e79 100644 --- a/test/performance/Makefile.am +++ b/test/performance/Makefile.am @@ -12,10 +12,13 @@ COMPILE_ONLY = odp_l2fwd \ odp_scheduling
TESTSCRIPTS = odp_l2fwd_run.sh \ - odp_pktio_ordered_run.sh \ odp_sched_latency_run.sh \ odp_scheduling_run.sh
+if HAVE_PCAP +TESTSCRIPTS += odp_pktio_ordered_run.sh +endif + TEST_EXTENSIONS = .sh
if test_perf
commit fb6a1bdc107c576d1ca64271bda6fe2691ca6a97 Author: Matias Elo matias.elo@nokia.com Date: Fri Feb 2 13:12:34 2018 +0200
linux-dpdk: errno: add missing copyright and include guards
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/include/odp_errno_define.h b/platform/linux-dpdk/include/odp_errno_define.h index 914d41b4..4af5e1b9 100644 --- a/platform/linux-dpdk/include/odp_errno_define.h +++ b/platform/linux-dpdk/include/odp_errno_define.h @@ -1,4 +1,28 @@ +/* Copyright (c) 2018, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/** + * @file + * + * ODP error number define + */ + +#ifndef ODP_ERRNO_DEFINE_H_ +#define ODP_ERRNO_DEFINE_H_ + +#ifdef __cplusplus +extern "C" { +#endif
#include <rte_errno.h>
#define __odp_errno (rte_errno) + +#ifdef __cplusplus +} +#endif + +#endif
commit a46f6251b216b8b2d352dff7c5fab7cbcf269ac2 Author: Matias Elo matias.elo@nokia.com Date: Fri Feb 2 12:51:58 2018 +0200
linux-dpdk: replace unmodified headers with symbolic links
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/include/odp/api/packet.h b/platform/linux-dpdk/include/odp/api/packet.h deleted file mode 100644 index 9df56021..00000000 --- a/platform/linux-dpdk/include/odp/api/packet.h +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (c) 2015, Linaro Limited - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -/** - * @file - * - * ODP packet descriptor - */ - -#ifndef ODP_PLAT_PACKET_H_ -#define ODP_PLAT_PACKET_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include <odp/api/std_types.h> -#include <odp/api/plat/event_types.h> -#include <odp/api/plat/packet_io_types.h> -#include <odp/api/plat/packet_types.h> -#include <odp/api/plat/buffer_types.h> -#include <odp/api/plat/pool_types.h> - -/** @ingroup odp_packet - * @{ - */ - -#include <odp/api/plat/static_inline.h> -#if ODP_ABI_COMPAT == 0 -#include <odp/api/plat/packet_inlines.h> -#endif - -/** - * @} - */ - -#include <odp/api/spec/packet.h> - -#ifdef __cplusplus -} -#endif - -#endif /* ODP_PLAT_PACKET_H_ */ diff --git a/platform/linux-dpdk/include/odp/api/packet.h b/platform/linux-dpdk/include/odp/api/packet.h new file mode 120000 index 00000000..2d49844e --- /dev/null +++ b/platform/linux-dpdk/include/odp/api/packet.h @@ -0,0 +1 @@ +../../../../linux-generic/include/odp/api/packet.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/packet_flags.h b/platform/linux-dpdk/include/odp/api/packet_flags.h deleted file mode 100644 index e3725a60..00000000 --- a/platform/linux-dpdk/include/odp/api/packet_flags.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (c) 2015, Linaro Limited - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -/** - * @file - * - * ODP packet flags - */ - -#ifndef ODP_PLAT_PACKET_FLAGS_H_ -#define ODP_PLAT_PACKET_FLAGS_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include <odp/api/plat/static_inline.h> -#if ODP_ABI_COMPAT == 0 -#include <odp/api/plat/packet_flag_inlines.h> -#endif - -#include <odp/api/spec/packet_flags.h> - -#ifdef __cplusplus -} -#endif - -#endif /* ODP_PLAT_PACKET_FLAGS_H_ */ diff --git a/platform/linux-dpdk/include/odp/api/packet_flags.h b/platform/linux-dpdk/include/odp/api/packet_flags.h new file mode 120000 index 00000000..01283934 --- /dev/null +++ b/platform/linux-dpdk/include/odp/api/packet_flags.h @@ -0,0 +1 @@ +../../../../linux-generic/include/odp/api/packet_flags.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/plat/buffer_types.h b/platform/linux-dpdk/include/odp/api/plat/buffer_types.h deleted file mode 100644 index 8b79bb52..00000000 --- a/platform/linux-dpdk/include/odp/api/plat/buffer_types.h +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (c) 2015, Linaro Limited - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -/** - * @file - * - * ODP buffer descriptor - */ - -#ifndef ODP_BUFFER_TYPES_H_ -#define ODP_BUFFER_TYPES_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include <odp/api/plat/static_inline.h> -#if ODP_ABI_COMPAT == 1 -#include <odp/api/abi/buffer.h> -#else - -#include <odp/api/std_types.h> -#include <odp/api/plat/strong_types.h> - -/** @ingroup odp_buffer - * @{ - */ - -typedef ODP_HANDLE_T(odp_buffer_t); - -#define ODP_BUFFER_INVALID _odp_cast_scalar(odp_buffer_t, NULL) - -/** - * @} - */ - -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/platform/linux-dpdk/include/odp/api/plat/buffer_types.h b/platform/linux-dpdk/include/odp/api/plat/buffer_types.h new file mode 120000 index 00000000..2b734a1f --- /dev/null +++ b/platform/linux-dpdk/include/odp/api/plat/buffer_types.h @@ -0,0 +1 @@ +../../../../../linux-generic/include/odp/api/plat/buffer_types.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/plat/event_types.h b/platform/linux-dpdk/include/odp/api/plat/event_types.h deleted file mode 100644 index b6349c69..00000000 --- a/platform/linux-dpdk/include/odp/api/plat/event_types.h +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (c) 2015, Linaro Limited - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - - -/** - * @file - * - * ODP event - */ - -#ifndef ODP_EVENT_TYPES_H_ -#define ODP_EVENT_TYPES_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include <odp/api/plat/static_inline.h> -#if ODP_ABI_COMPAT == 1 -#include <odp/api/abi/event.h> -#else - -#include <odp/api/std_types.h> -#include <odp/api/plat/strong_types.h> - -/** @ingroup odp_event - * @{ - */ - -typedef ODP_HANDLE_T(odp_event_t); - -#define ODP_EVENT_INVALID _odp_cast_scalar(odp_event_t, NULL) - -/** - * Event types - */ -typedef enum odp_event_type_t { - ODP_EVENT_BUFFER = 1, - ODP_EVENT_PACKET = 2, - ODP_EVENT_TIMEOUT = 3, - ODP_EVENT_CRYPTO_COMPL = 4, -} odp_event_type_t; - -/** - * @} - */ - -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/platform/linux-dpdk/include/odp/api/plat/event_types.h b/platform/linux-dpdk/include/odp/api/plat/event_types.h new file mode 120000 index 00000000..9bff0f6a --- /dev/null +++ b/platform/linux-dpdk/include/odp/api/plat/event_types.h @@ -0,0 +1 @@ +../../../../../linux-generic/include/odp/api/plat/event_types.h \ No newline at end of file diff --git a/platform/linux-dpdk/include/odp/api/std_clib.h b/platform/linux-dpdk/include/odp/api/std_clib.h deleted file mode 100644 index fea47254..00000000 --- a/platform/linux-dpdk/include/odp/api/std_clib.h +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (c) 2015, Linaro Limited - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -#ifndef ODP_PLAT_STD_CLIB_H_ -#define ODP_PLAT_STD_CLIB_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include <odp/api/spec/std_types.h> -#include <string.h> - -#include <odp/api/plat/static_inline.h> -#if ODP_ABI_COMPAT == 0 -#include <odp/api/plat/std_clib_inlines.h> -#endif - -#include <odp/api/spec/std_clib.h> - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/platform/linux-dpdk/include/odp/api/std_clib.h b/platform/linux-dpdk/include/odp/api/std_clib.h new file mode 120000 index 00000000..e7abec8e --- /dev/null +++ b/platform/linux-dpdk/include/odp/api/std_clib.h @@ -0,0 +1 @@ +../../../../linux-generic/include/odp/api/std_clib.h \ No newline at end of file
commit 7a2a3c7a9005702963a2c4bca609a5f45523901c Author: Matias Elo matias.elo@nokia.com Date: Fri Feb 2 12:23:23 2018 +0200
Port 614161c "linux-generic: init: implement odp_init_param_init()"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/odp_init.c b/platform/linux-dpdk/odp_init.c index 96383b3c..eb888c8f 100644 --- a/platform/linux-dpdk/odp_init.c +++ b/platform/linux-dpdk/odp_init.c @@ -149,6 +149,11 @@ static int odp_init_dpdk(const char *cmdline)
struct odp_global_data_s odp_global_data;
+void odp_init_param_init(odp_init_t *param) +{ + memset(param, 0, sizeof(odp_init_t)); +} + int odp_init_global(odp_instance_t *instance, const odp_init_t *params, const odp_platform_init_t *platform_params)
commit c6dad9258ed9bc7e74c798ec8b9aca36ec58a89e Author: Matias Elo matias.elo@nokia.com Date: Fri Feb 2 12:21:21 2018 +0200
Port 29195af "api: feature: add odp feature bits"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index bda7b9f9..7f44f83d 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -35,6 +35,7 @@ odpapiinclude_HEADERS = \ include/odp/api/deprecated.h \ include/odp/api/errno.h \ include/odp/api/event.h \ + include/odp/api/feature.h \ include/odp/api/hash.h \ include/odp/api/hints.h \ include/odp/api/init.h \ diff --git a/platform/linux-dpdk/include/odp/api/feature.h b/platform/linux-dpdk/include/odp/api/feature.h new file mode 120000 index 00000000..aa1c547f --- /dev/null +++ b/platform/linux-dpdk/include/odp/api/feature.h @@ -0,0 +1 @@ +../../../../linux-generic/include/odp/api/feature.h \ No newline at end of file
commit 5c12da04f4d3225727c98ced6c230f628d9bd685 Author: Matias Elo matias.elo@nokia.com Date: Fri Feb 2 12:15:24 2018 +0200
Port 8999344 "linux-generic: packet: remove odp_packet_unshared_len() implementation"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index 28a7326a..40f2d324 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -1555,11 +1555,6 @@ int odp_packet_has_ref(odp_packet_t pkt) return 0; }
-uint32_t odp_packet_unshared_len(odp_packet_t pkt) -{ - return odp_packet_len(pkt); -} - /* Include non-inlined versions of API functions */ #if ODP_ABI_COMPAT == 1 #include <odp/api/plat/packet_inlines_api.h>
commit bd7d24cb10d770da40e2608b336dbbbcfc167d55 Author: Matias Elo matias.elo@nokia.com Date: Fri Feb 2 12:13:27 2018 +0200
Port da0198f "linux-gen: packet: implement odp_packet_data_print"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index 243173c5..28a7326a 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -992,7 +992,6 @@ void odp_packet_print(odp_packet_t pkt) odp_packet_seg_t seg; int max_len = 1024; char str[max_len]; - uint8_t *p; int len = 0; int n = max_len - 1; odp_packet_hdr_t *hdr = odp_packet_hdr(pkt); @@ -1031,7 +1030,7 @@ void odp_packet_print(odp_packet_t pkt)
while (seg != ODP_PACKET_SEG_INVALID) { len += snprintf(&str[len], n - len, - " seg_len %-4" PRIu32 " seg_data %p ", + " seg_len %-4" PRIu32 " seg_data %p\n", odp_packet_seg_data_len(pkt, seg), odp_packet_seg_data(pkt, seg));
@@ -1041,13 +1040,68 @@ void odp_packet_print(odp_packet_t pkt) str[len] = '\0';
ODP_PRINT("\n%s\n", str); - rte_pktmbuf_dump(stdout, &hdr->buf_hdr.mb, 32); +} + +void odp_packet_print_data(odp_packet_t pkt, uint32_t offset, + uint32_t byte_len) +{ + odp_packet_hdr_t *hdr = odp_packet_hdr(pkt); + uint32_t bytes_per_row = 16; + int num_rows = (byte_len + bytes_per_row - 1) / bytes_per_row; + int max_len = 256 + (3 * byte_len) + (3 * num_rows); + char str[max_len]; + int len = 0; + int n = max_len - 1; + uint32_t data_len = odp_packet_len(pkt); + pool_t *pool = hdr->buf_hdr.pool_ptr; + + len += snprintf(&str[len], n - len, "Packet\n------\n"); + len += snprintf(&str[len], n - len, + " pool name %s\n", pool->name); + len += snprintf(&str[len], n - len, + " buf index %" PRIu32 "\n", hdr->buf_hdr.index); + len += snprintf(&str[len], n - len, + " segcount %" PRIu8 "\n", + hdr->buf_hdr.mb.nb_segs); + len += snprintf(&str[len], n - len, + " data len %" PRIu32 "\n", data_len); + len += snprintf(&str[len], n - len, + " data ptr %p\n", odp_packet_data(pkt)); + len += snprintf(&str[len], n - len, + " print offset %" PRIu32 "\n", offset); + len += snprintf(&str[len], n - len, + " print length %" PRIu32 "\n", byte_len); + + if (offset + byte_len > data_len) { + len += snprintf(&str[len], n - len, " BAD OFFSET OR LEN\n"); + ODP_PRINT("%s\n", str); + return; + } + + while (byte_len) { + uint32_t copy_len; + uint8_t data[bytes_per_row]; + uint32_t i; + + if (byte_len > bytes_per_row) + copy_len = bytes_per_row; + else + copy_len = byte_len; + + odp_packet_copy_to_mem(pkt, offset, copy_len, data); + + len += snprintf(&str[len], n - len, " "); + + for (i = 0; i < copy_len; i++) + len += snprintf(&str[len], n - len, " %02x", data[i]); + + len += snprintf(&str[len], n - len, "\n"); + + byte_len -= copy_len; + offset += copy_len; + }
- p = odp_packet_data(pkt); - ODP_ERR("00000000: %02X %02X %02X %02X %02X %02X %02X %02X\n", - p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7]); - ODP_ERR("00000008: %02X %02X %02X %02X %02X %02X %02X %02X\n", - p[8], p[9], p[10], p[11], p[12], p[13], p[14], p[15]); + ODP_PRINT("%s\n", str); }
int odp_packet_is_valid(odp_packet_t pkt)
commit 058b7736ace07d4b6c0c596536741d19d274f84c Author: Matias Elo matias.elo@nokia.com Date: Fri Feb 2 10:49:39 2018 +0200
Port 5e840b8 "drv: doc, linux-gen, include: drop incomplete drv interface"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 519fe16c..bda7b9f9 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -107,10 +107,6 @@ odpapiplatinclude_HEADERS = \ nodist_odpapiplatinclude_HEADERS = \ include/odp/api/plat/static_inline.h
-odpdrvincludedir = $(includedir)/odp/drv -odpdrvinclude_HEADERS = \ - include/odp/drv/compiler.h - noinst_HEADERS = \ ${top_srcdir}/platform/linux-generic/include/odp_align_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_atomic_internal.h \
commit 2db2e32108e370c259923f4b435f3d91ba11dbf0 Author: Matias Elo matias.elo@nokia.com Date: Fri Feb 2 10:39:13 2018 +0200
Port e826613 "linux-generic: test: add missing file to .gitignore"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/test/.gitignore b/platform/linux-dpdk/test/.gitignore new file mode 100644 index 00000000..9dc564f7 --- /dev/null +++ b/platform/linux-dpdk/test/.gitignore @@ -0,0 +1,4 @@ +*.log +*.trs +tests-linux-dpdk.env +tests-validation.env
commit bab38ba55cadae5f820304f9ca2867b417398bc4 Author: Matias Elo matias.elo@nokia.com Date: Fri Feb 2 10:33:32 2018 +0200
Port f512035 ".gitinore: ignore moved .pc files"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/.gitignore b/platform/linux-dpdk/.gitignore index 909756a1..b747a279 100644 --- a/platform/linux-dpdk/.gitignore +++ b/platform/linux-dpdk/.gitignore @@ -1 +1,2 @@ include/odp/api/plat/static_inline.h +libodp-dpdk.pc
commit 6e749c67bece365f99728e812c5de0fcdec00553 Merge: aa244ee0 2cfe1168 Author: Matias Elo matias.elo@nokia.com Date: Fri Feb 2 10:08:45 2018 +0200
Merge commit '2cfe11680ecc2186339183e94f291ce586740f8b' of https://github.com/Linaro/odp into odp-dpdk
# Conflicts: # .travis.yml
diff --cc .travis.yml index 1221c515,6bd03a0c..c6b71adc --- a/.travis.yml +++ b/.travis.yml @@@ -40,10 -38,10 +40,11 @@@ addons apt: packages: - gcc - - clang-3.8 - - automake autoconf libtool libssl-dev graphviz mscgen + - automake autoconf libtool graphviz mscgen doxygen + - codespell + - libssl-dev - libpcap-dev + - libnuma-dev # coverity_scan: # project: # name: "$TRAVIS_REPO_SLUG"
commit aa244ee092f7293971211fd9a95701d5343ecd25 Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 1 18:15:49 2018 +0200
Port 1217fba "configure: drop SDK_INSTALL_PATH variable"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/.travis.yml b/.travis.yml index 00e42577..1221c515 100644 --- a/.travis.yml +++ b/.travis.yml @@ -110,7 +110,7 @@ install:
script: - ./bootstrap - - ./configure --prefix=$HOME/odp-install --enable-test-cpp --enable-test-vald --enable-test-helper --enable-test-perf --enable-user-guides --enable-test-example --with-sdk-install-path=`pwd`/dpdk/${TARGET} $CONF + - ./configure --prefix=$HOME/odp-install --enable-test-cpp --enable-test-vald --enable-test-helper --enable-test-perf --enable-user-guides --enable-test-example --with-dpdk-path=`pwd`/dpdk/${TARGET} $CONF - make -j $(nproc) - sudo LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH" make check - make install @@ -137,7 +137,7 @@ jobs: script: - sudo -H pip install coverage - ./bootstrap - - ./configure --prefix=$HOME/odp-install --enable-test-cpp --enable-test-vald --enable-test-helper --enable-test-perf --enable-user-guides --enable-test-example --with-sdk-install-path=`pwd`/dpdk/${TARGET} CFLAGS="-O0 -coverage" CXXFLAGS="-O0 -coverage" LDFLAGS="--coverage" + - ./configure --prefix=$HOME/odp-install --enable-test-cpp --enable-test-vald --enable-test-helper --enable-test-perf --enable-user-guides --enable-test-example --with-dpdk-path=`pwd`/dpdk/${TARGET} CFLAGS="-O0 -coverage" CXXFLAGS="-O0 -coverage" LDFLAGS="--coverage" - sudo LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH" PATH=${PATH//:./node_modules/.bin/} make check - find . -type f -iname '*.[ch]' -not -path ".git/*" -execdir gcov {} ; ; bash <(curl -s https://codecov.io/bash) -X coveragepy - stage: test @@ -145,7 +145,7 @@ jobs: compiler: gcc script: - ./bootstrap - - ./configure --with-sdk-install-path=`pwd`/dpdk/${TARGET} + - ./configure --with-dpdk-path=`pwd`/dpdk/${TARGET} # doxygen does not trap on warnings, check for them here. - make doxygen-doc 2>&1 |tee doxygen.log - | diff --git a/configure.ac b/configure.ac index 4298bde7..fcdc1908 100644 --- a/configure.ac +++ b/configure.ac @@ -170,19 +170,6 @@ m4_include([./example/m4/configure.m4]) m4_include([./helper/m4/configure.m4]) m4_include([./test/m4/configure.m4])
-########################################################################## -# Set SDK install path -########################################################################## -AC_ARG_WITH([sdk-install-path], -AC_HELP_STRING([--with-sdk-install-path=DIR path to external libs and headers], - [(or in the default path if not specified).]), - [SDK_INSTALL_PATH=$withval SDK_INSTALL_PATH_=1 - DPDK_DEFAULT_DIR=0], - [DPDK_DEFAULT_DIR=1 SDK_INSTALL_PATH_=]) - -AC_SUBST(DPDK_DEFAULT_DIR) -AC_SUBST(SDK_INSTALL_PATH) - ########################################################################## # Run platform specific checks and settings ########################################################################## @@ -208,8 +195,6 @@ AM_CONDITIONAL([test_installdir], [test "x$testdir" != "xno"]) ########################################################################## # Set conditionals as computed within platform specific files ########################################################################## -AM_CONDITIONAL([DPDK_DEFAULT_DIR], [test "x${DPDK_DEFAULT_DIR}" = "x1"]) -AM_CONDITIONAL([SDK_INSTALL_PATH_], [test "x${SDK_INSTALL_PATH_}" = "x1"]) AM_CONDITIONAL([HAVE_DOXYGEN], [test "x${DOXYGEN}" = "xdoxygen"]) AM_CONDITIONAL([user_guide], [test "x${user_guides}" = "xyes" ]) AM_CONDITIONAL([HAVE_MSCGEN], [test "x${MSCGEN}" = "xmscgen"]) diff --git a/platform/linux-dpdk/m4/configure.m4 b/platform/linux-dpdk/m4/configure.m4 index e82dbdcf..b9e03fd7 100644 --- a/platform/linux-dpdk/m4/configure.m4 +++ b/platform/linux-dpdk/m4/configure.m4 @@ -11,18 +11,28 @@ ODP_TIMER ODP_OPENSSL m4_include([platform/linux-dpdk/m4/odp_schedule.m4])
+########################################################################## +# Set DPDK install path +########################################################################## +dpdk_default_dir=yes +AC_ARG_WITH([dpdk-path], +AS_HELP_STRING([--with-dpdk-path=DIR path to dpdk build directory]), + [DPDK_PATH=$withval + dpdk_default_dir=no], + [dpdk_default_dir=yes]) + ########################################################################## # DPDK build variables ########################################################################## DPDK_DRIVER_DIR=/usr/lib/$(uname -m)-linux-gnu AS_CASE($host_cpu, [x86_64], [DPDK_CPPFLAGS="-msse4.2"]) -if test ${DPDK_DEFAULT_DIR} = 1; then +if test x$dpdk_default_dir = xyes; then DPDK_CFLAGS="-include /usr/include/dpdk/rte_config.h" DPDK_CPPFLAGS="$DPDK_CPPFLAGS -I/usr/include/dpdk" else - DPDK_DRIVER_DIR=$SDK_INSTALL_PATH/lib - DPDK_CFLAGS="-include $SDK_INSTALL_PATH/include/rte_config.h" - DPDK_CPPFLAGS="$DPDK_CPPFLAGS -I$SDK_INSTALL_PATH/include" + DPDK_DRIVER_DIR=$DPDK_PATH/lib + DPDK_CFLAGS="-include $DPDK_PATH/include/rte_config.h" + DPDK_CPPFLAGS="$DPDK_CPPFLAGS -I$DPDK_PATH/include" fi
# Check if we should link against the static or dynamic DPDK library
commit a8a201a93c87d09f36f14df6487dafe17e00c182 Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 1 13:01:06 2018 +0200
Port cbced85 "configure: cleanup per-platform if"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/m4/configure.m4 b/platform/linux-dpdk/m4/configure.m4 index 92857a1d..e82dbdcf 100644 --- a/platform/linux-dpdk/m4/configure.m4 +++ b/platform/linux-dpdk/m4/configure.m4 @@ -1,3 +1,5 @@ +IMPLEMENTATION_NAME="odp-dpdk" + ODP_VISIBILITY ODP_ATOMIC
commit bb933a3498614fc71c6e3b2593e768255fd0730e Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 1 12:56:23 2018 +0200
Port 927b57f "configure: use AC_CONFIG_COMMANDS_PRE to set conditionals"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/m4/configure.m4 b/platform/linux-dpdk/m4/configure.m4 index ff9f0725..92857a1d 100644 --- a/platform/linux-dpdk/m4/configure.m4 +++ b/platform/linux-dpdk/m4/configure.m4 @@ -75,8 +75,12 @@ AC_SUBST([DPDK_PMDS]) ########################################################################## CPPFLAGS=$OLD_CPPFLAGS
+AC_CONFIG_COMMANDS_PRE([dnl +AM_CONDITIONAL([PLATFORM_IS_LINUX_DPDK], + [test "${with_platform}" = "linux-dpdk"]) AC_CONFIG_FILES([platform/linux-dpdk/Makefile platform/linux-dpdk/libodp-dpdk.pc platform/linux-dpdk/include/odp/api/plat/static_inline.h platform/linux-dpdk/test/Makefile platform/linux-dpdk/test/validation/api/pktio/Makefile]) +])
commit d0ce5e335fda536d73b3eff6d10e2d1bd5890683 Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 1 12:43:09 2018 +0200
Port 77f9451 "linux-gen: stop including autogenerated header into distribution"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 363df76a..519fe16c 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -66,7 +66,6 @@ odpapiinclude_HEADERS = \
odpapiplatincludedir= $(includedir)/odp/api/plat odpapiplatinclude_HEADERS = \ - $(builddir)/include/odp/api/plat/static_inline.h \ include/odp/api/plat/atomic_inlines.h \ include/odp/api/plat/atomic_types.h \ include/odp/api/plat/barrier_types.h \ @@ -105,6 +104,9 @@ odpapiplatinclude_HEADERS = \ include/odp/api/plat/traffic_mngr_types.h \ include/odp/api/plat/version_types.h
+nodist_odpapiplatinclude_HEADERS = \ + include/odp/api/plat/static_inline.h + odpdrvincludedir = $(includedir)/odp/drv odpdrvinclude_HEADERS = \ include/odp/drv/compiler.h
commit ae21c3d9081380a78a895abca6a072d76c0f49a2 Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 1 12:41:38 2018 +0200
Port fce14d1 "linux-gen: drop unnecessary srcdir from Makefile.am"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index cc44602b..363df76a 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -16,107 +16,107 @@ AM_CPPFLAGS += $(DPDK_CPPFLAGS)
odpincludedir= $(includedir)/odp odpinclude_HEADERS = \ - $(srcdir)/include/odp/visibility_begin.h \ - $(srcdir)/include/odp/visibility_end.h + include/odp/visibility_begin.h \ + include/odp/visibility_end.h
odpapiincludedir= $(includedir)/odp/api odpapiinclude_HEADERS = \ - $(srcdir)/include/odp/api/align.h \ - $(srcdir)/include/odp/api/atomic.h \ - $(srcdir)/include/odp/api/barrier.h \ - $(srcdir)/include/odp/api/buffer.h \ - $(srcdir)/include/odp/api/byteorder.h \ - $(srcdir)/include/odp/api/classification.h \ - $(srcdir)/include/odp/api/compiler.h \ - $(srcdir)/include/odp/api/cpu.h \ - $(srcdir)/include/odp/api/cpumask.h \ - $(srcdir)/include/odp/api/crypto.h \ - $(srcdir)/include/odp/api/debug.h \ - $(srcdir)/include/odp/api/deprecated.h \ - $(srcdir)/include/odp/api/errno.h \ - $(srcdir)/include/odp/api/event.h \ - $(srcdir)/include/odp/api/hash.h \ - $(srcdir)/include/odp/api/hints.h \ - $(srcdir)/include/odp/api/init.h \ - $(srcdir)/include/odp/api/packet_flags.h \ - $(srcdir)/include/odp/api/packet.h \ - $(srcdir)/include/odp/api/packet_io.h \ - $(srcdir)/include/odp/api/packet_io_stats.h \ - $(srcdir)/include/odp/api/pool.h \ - $(srcdir)/include/odp/api/queue.h \ - $(srcdir)/include/odp/api/random.h \ - $(srcdir)/include/odp/api/rwlock.h \ - $(srcdir)/include/odp/api/rwlock_recursive.h \ - $(srcdir)/include/odp/api/schedule.h \ - $(srcdir)/include/odp/api/schedule_types.h \ - $(srcdir)/include/odp/api/shared_memory.h \ - $(srcdir)/include/odp/api/spinlock.h \ - $(srcdir)/include/odp/api/spinlock_recursive.h \ - $(srcdir)/include/odp/api/std_clib.h \ - $(srcdir)/include/odp/api/std_types.h \ - $(srcdir)/include/odp/api/sync.h \ - $(srcdir)/include/odp/api/system_info.h \ - $(srcdir)/include/odp/api/thread.h \ - $(srcdir)/include/odp/api/thrmask.h \ - $(srcdir)/include/odp/api/ticketlock.h \ - $(srcdir)/include/odp/api/time.h \ - $(srcdir)/include/odp/api/timer.h \ - $(srcdir)/include/odp/api/traffic_mngr.h \ - $(srcdir)/include/odp/api/version.h + include/odp/api/align.h \ + include/odp/api/atomic.h \ + include/odp/api/barrier.h \ + include/odp/api/buffer.h \ + include/odp/api/byteorder.h \ + include/odp/api/classification.h \ + include/odp/api/compiler.h \ + include/odp/api/cpu.h \ + include/odp/api/cpumask.h \ + include/odp/api/crypto.h \ + include/odp/api/debug.h \ + include/odp/api/deprecated.h \ + include/odp/api/errno.h \ + include/odp/api/event.h \ + include/odp/api/hash.h \ + include/odp/api/hints.h \ + include/odp/api/init.h \ + include/odp/api/packet_flags.h \ + include/odp/api/packet.h \ + include/odp/api/packet_io.h \ + include/odp/api/packet_io_stats.h \ + include/odp/api/pool.h \ + include/odp/api/queue.h \ + include/odp/api/random.h \ + include/odp/api/rwlock.h \ + include/odp/api/rwlock_recursive.h \ + include/odp/api/schedule.h \ + include/odp/api/schedule_types.h \ + include/odp/api/shared_memory.h \ + include/odp/api/spinlock.h \ + include/odp/api/spinlock_recursive.h \ + include/odp/api/std_clib.h \ + include/odp/api/std_types.h \ + include/odp/api/sync.h \ + include/odp/api/system_info.h \ + include/odp/api/thread.h \ + include/odp/api/thrmask.h \ + include/odp/api/ticketlock.h \ + include/odp/api/time.h \ + include/odp/api/timer.h \ + include/odp/api/traffic_mngr.h \ + include/odp/api/version.h
odpapiplatincludedir= $(includedir)/odp/api/plat odpapiplatinclude_HEADERS = \ $(builddir)/include/odp/api/plat/static_inline.h \ - $(srcdir)/include/odp/api/plat/atomic_inlines.h \ - $(srcdir)/include/odp/api/plat/atomic_types.h \ - $(srcdir)/include/odp/api/plat/barrier_types.h \ - $(srcdir)/include/odp/api/plat/buffer_types.h \ - $(srcdir)/include/odp/api/plat/byteorder_inlines.h \ - $(srcdir)/include/odp/api/plat/byteorder_types.h \ - $(srcdir)/include/odp/api/plat/classification_types.h \ - $(srcdir)/include/odp/api/plat/cpumask_types.h \ - $(srcdir)/include/odp/api/plat/crypto_types.h \ - $(srcdir)/include/odp/api/plat/event_types.h \ - $(srcdir)/include/odp/api/plat/init_types.h \ - $(srcdir)/include/odp/api/plat/packet_flag_inlines.h \ - $(srcdir)/include/odp/api/plat/packet_flag_inlines_api.h \ - $(srcdir)/include/odp/api/plat/packet_inlines.h \ - $(srcdir)/include/odp/api/plat/packet_inlines_api.h \ - $(srcdir)/include/odp/api/plat/packet_io_types.h \ - $(srcdir)/include/odp/api/plat/packet_types.h \ - $(srcdir)/include/odp/api/plat/pool_types.h \ - $(srcdir)/include/odp/api/plat/queue_types.h \ - $(srcdir)/include/odp/api/plat/rwlock_types.h \ - $(srcdir)/include/odp/api/plat/rwlock_recursive_types.h \ - $(srcdir)/include/odp/api/plat/schedule_types.h \ - $(srcdir)/include/odp/api/plat/shared_memory_types.h \ - $(srcdir)/include/odp/api/plat/spinlock_types.h \ - $(srcdir)/include/odp/api/plat/spinlock_recursive_types.h \ - $(srcdir)/include/odp/api/plat/std_clib_inlines.h \ - $(srcdir)/include/odp/api/plat/strong_types.h \ - $(srcdir)/include/odp/api/plat/sync_inlines.h \ - $(srcdir)/include/odp/api/plat/thread_types.h \ - $(srcdir)/include/odp/api/plat/thrmask_types.h \ - $(srcdir)/include/odp/api/plat/ticketlock_inlines.h \ - $(srcdir)/include/odp/api/plat/ticketlock_inlines_api.h \ - $(srcdir)/include/odp/api/plat/ticketlock_types.h \ - $(srcdir)/include/odp/api/plat/time_types.h \ - $(srcdir)/include/odp/api/plat/timer_types.h \ - $(srcdir)/include/odp/api/plat/traffic_mngr_types.h \ - $(srcdir)/include/odp/api/plat/version_types.h + include/odp/api/plat/atomic_inlines.h \ + include/odp/api/plat/atomic_types.h \ + include/odp/api/plat/barrier_types.h \ + include/odp/api/plat/buffer_types.h \ + include/odp/api/plat/byteorder_inlines.h \ + include/odp/api/plat/byteorder_types.h \ + include/odp/api/plat/classification_types.h \ + include/odp/api/plat/cpumask_types.h \ + include/odp/api/plat/crypto_types.h \ + include/odp/api/plat/event_types.h \ + include/odp/api/plat/init_types.h \ + include/odp/api/plat/packet_flag_inlines.h \ + include/odp/api/plat/packet_flag_inlines_api.h \ + include/odp/api/plat/packet_inlines.h \ + include/odp/api/plat/packet_inlines_api.h \ + include/odp/api/plat/packet_io_types.h \ + include/odp/api/plat/packet_types.h \ + include/odp/api/plat/pool_types.h \ + include/odp/api/plat/queue_types.h \ + include/odp/api/plat/rwlock_types.h \ + include/odp/api/plat/rwlock_recursive_types.h \ + include/odp/api/plat/schedule_types.h \ + include/odp/api/plat/shared_memory_types.h \ + include/odp/api/plat/spinlock_types.h \ + include/odp/api/plat/spinlock_recursive_types.h \ + include/odp/api/plat/std_clib_inlines.h \ + include/odp/api/plat/strong_types.h \ + include/odp/api/plat/sync_inlines.h \ + include/odp/api/plat/thread_types.h \ + include/odp/api/plat/thrmask_types.h \ + include/odp/api/plat/ticketlock_inlines.h \ + include/odp/api/plat/ticketlock_inlines_api.h \ + include/odp/api/plat/ticketlock_types.h \ + include/odp/api/plat/time_types.h \ + include/odp/api/plat/timer_types.h \ + include/odp/api/plat/traffic_mngr_types.h \ + include/odp/api/plat/version_types.h
odpdrvincludedir = $(includedir)/odp/drv odpdrvinclude_HEADERS = \ - $(srcdir)/include/odp/drv/compiler.h + include/odp/drv/compiler.h
noinst_HEADERS = \ ${top_srcdir}/platform/linux-generic/include/odp_align_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_atomic_internal.h \ - ${srcdir}/include/odp_buffer_inlines.h \ - ${srcdir}/include/odp_buffer_internal.h \ + include/odp_buffer_inlines.h \ + include/odp_buffer_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_bitmap_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_classification_internal.h \ - ${srcdir}/include/odp_config_internal.h \ + include/odp_config_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_debug_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_classification_datamodel.h \ ${top_srcdir}/platform/linux-generic/include/odp_classification_inlines.h \ @@ -124,33 +124,33 @@ noinst_HEADERS = \ ${top_srcdir}/platform/linux-generic/include/odp_crypto_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_forward_typedefs_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_internal.h \ - ${srcdir}/include/odp_packet_dpdk.h \ - ${srcdir}/include/odp_packet_internal.h \ + include/odp_packet_dpdk.h \ + include/odp_packet_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_name_table_internal.h \ - ${srcdir}/include/odp_packet_io_internal.h \ - ${srcdir}/include/odp_errno_define.h \ + include/odp_packet_io_internal.h \ + include/odp_errno_define.h \ ${top_srcdir}/platform/linux-generic/include/odp_packet_io_ipc_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_packet_io_ring_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_packet_socket.h \ ${top_srcdir}/platform/linux-generic/include/odp_pkt_queue_internal.h \ - ${srcdir}/include/odp_pool_internal.h \ - ${srcdir}/include/odp_posix_extensions.h \ + include/odp_pool_internal.h \ + include/odp_posix_extensions.h \ ${top_srcdir}/platform/linux-generic/include/odp_queue_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_ring_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_queue_if.h \ ${top_srcdir}/platform/linux-generic/include/odp_schedule_if.h \ ${top_srcdir}/platform/linux-generic/include/odp_sorted_list_internal.h \ - ${srcdir}/include/odp_shm_internal.h \ + include/odp_shm_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_time_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_timer_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_timer_wheel_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_traffic_mngr_internal.h \ - ${srcdir}/include/protocols/eth.h \ - ${srcdir}/include/protocols/ip.h \ - ${srcdir}/include/protocols/ipsec.h \ - ${srcdir}/include/protocols/tcp.h \ - ${srcdir}/include/protocols/udp.h \ - ${srcdir}/Makefile.inc + include/protocols/eth.h \ + include/protocols/ip.h \ + include/protocols/ipsec.h \ + include/protocols/tcp.h \ + include/protocols/udp.h \ + Makefile.inc
__LIB__libodp_dpdk_la_SOURCES = \ ../linux-generic/odp_atomic.c \ @@ -206,28 +206,28 @@ __LIB__libodp_dpdk_la_SOURCES += arch/default/odp_cpu_arch.c \ arch/default/odp_cpu_cycles.c \ arch/default/odp_global_time.c \ arch/default/odp_sysinfo_parse.c -arch_odp_headers = $(srcdir)/arch/arm/odp/api/cpu_arch.h +arch_odp_headers = arch/arm/odp/api/cpu_arch.h endif if ARCH_IS_AARCH64 __LIB__libodp_dpdk_la_SOURCES += arch/default/odp_cpu_arch.c \ arch/default/odp_cpu_cycles.c \ arch/aarch64/odp_global_time.c \ arch/default/odp_sysinfo_parse.c -arch_odp_headers = $(srcdir)/arch/aarch64/odp/api/cpu_arch.h +arch_odp_headers = arch/aarch64/odp/api/cpu_arch.h endif if ARCH_IS_MIPS64 __LIB__libodp_dpdk_la_SOURCES += arch/mips64/odp_cpu_arch.c \ arch/default/odp_cpu_cycles.c \ arch/default/odp_global_time.c \ arch/mips64/odp_sysinfo_parse.c -arch_odp_headers = $(srcdir)/arch/mips64/odp/api/cpu_arch.h +arch_odp_headers = arch/mips64/odp/api/cpu_arch.h endif if ARCH_IS_POWERPC __LIB__libodp_dpdk_la_SOURCES += arch/default/odp_cpu_arch.c \ arch/default/odp_cpu_cycles.c \ arch/default/odp_global_time.c \ arch/powerpc/odp_sysinfo_parse.c -arch_odp_headers = $(srcdir)/arch/powerpc/odp/api/cpu_arch.h +arch_odp_headers = arch/powerpc/odp/api/cpu_arch.h endif if ARCH_IS_X86 __LIB__libodp_dpdk_la_SOURCES += arch/x86/cpu_flags.c \ @@ -235,11 +235,11 @@ __LIB__libodp_dpdk_la_SOURCES += arch/x86/cpu_flags.c \ arch/default/odp_cpu_cycles.c \ arch/x86/odp_global_time.c \ arch/x86/odp_sysinfo_parse.c -arch_odp_headers = $(srcdir)/arch/x86/odp/api/cpu_arch.h -noinst_HEADERS += $(srcdir)/arch/x86/cpu_flags.h +arch_odp_headers = arch/x86/odp/api/cpu_arch.h +noinst_HEADERS += arch/x86/cpu_flags.h endif
-noinst_HEADERS += $(srcdir)/arch/default/odp/api/cpu_arch.h +noinst_HEADERS += arch/default/odp/api/cpu_arch.h
odpapiinclude_HEADERS += $(arch_odp_headers)
commit 50914f9bff17613992b0943967de7d47764fe8fd Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 1 12:33:35 2018 +0200
Port 4ab7a7b "build: move handling of include files to include dir"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index b634d735..cc44602b 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -14,10 +14,6 @@ AM_CPPFLAGS += -I$(top_srcdir)/platform/$(with_platform)/arch/$(ARCH_DIR) AM_CPPFLAGS += $(OPENSSL_CPPFLAGS) AM_CPPFLAGS += $(DPDK_CPPFLAGS)
-include_HEADERS = \ - $(top_srcdir)/include/odp.h \ - $(top_srcdir)/include/odp_api.h - odpincludedir= $(includedir)/odp odpinclude_HEADERS = \ $(srcdir)/include/odp/visibility_begin.h \ @@ -252,13 +248,3 @@ __LIB__libodp_dpdk_la_LIBADD += $(OPENSSL_LIBS) __LIB__libodp_dpdk_la_LIBADD += $(DPDK_LIBS) $(DPDK_PMDS) __LIB__libodp_dpdk_la_LIBADD += $(PTHREAD_LIBS) __LIB__libodp_dpdk_la_LIBADD += $(TIMER_LIBS) - -# Create symlink for ABI header files. Application does not need to use the arch -# specific include path for installed files. -install-data-hook: - if [ -h $(DESTDIR)$(prefix)/include/odp/api/abi ]; then \ - : ; \ - else \ - $(LN_S) -rf $(DESTDIR)$(prefix)/include/odp/arch/@ARCH_ABI@/odp/api/abi \ - $(DESTDIR)$(prefix)/include/odp/api/abi; \ - fi
commit 55b442886894166511a52219b23e5bb02ef335d0 Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 1 12:30:28 2018 +0200
Port 4df71d3 "linux-gen: move libodp-linux.pc.in to platform directory"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/pkgconfig/libodp-dpdk.pc.in b/platform/linux-dpdk/libodp-dpdk.pc.in similarity index 100% rename from pkgconfig/libodp-dpdk.pc.in rename to platform/linux-dpdk/libodp-dpdk.pc.in diff --git a/platform/linux-dpdk/m4/configure.m4 b/platform/linux-dpdk/m4/configure.m4 index fe2abe81..ff9f0725 100644 --- a/platform/linux-dpdk/m4/configure.m4 +++ b/platform/linux-dpdk/m4/configure.m4 @@ -76,6 +76,7 @@ AC_SUBST([DPDK_PMDS]) CPPFLAGS=$OLD_CPPFLAGS
AC_CONFIG_FILES([platform/linux-dpdk/Makefile + platform/linux-dpdk/libodp-dpdk.pc platform/linux-dpdk/include/odp/api/plat/static_inline.h platform/linux-dpdk/test/Makefile platform/linux-dpdk/test/validation/api/pktio/Makefile])
commit 04cc3fc4ec76ea84638133f12b106f5850f81f3b Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 1 11:28:28 2018 +0200
Port 326192c "test: drop now-unused common_plat directory"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/test/Makefile.am b/platform/linux-dpdk/test/Makefile.am index 4e9333b3..8cb27b14 100644 --- a/platform/linux-dpdk/test/Makefile.am +++ b/platform/linux-dpdk/test/Makefile.am @@ -1,5 +1,5 @@ include $(top_srcdir)/test/Makefile.inc -TESTS_ENVIRONMENT += TEST_DIR=${top_builddir}/test/common_plat/validation +TESTS_ENVIRONMENT += TEST_DIR=${top_builddir}/test/validation
SUBDIRS =
diff --git a/platform/linux-dpdk/test/Makefile.inc b/platform/linux-dpdk/test/Makefile.inc index 7f1e2f2b..60f52b89 100644 --- a/platform/linux-dpdk/test/Makefile.inc +++ b/platform/linux-dpdk/test/Makefile.inc @@ -6,11 +6,11 @@ AM_LDFLAGS = -static
AM_CFLAGS = $(CUNIT_CFLAGS)
-LIBCUNIT_COMMON = $(top_builddir)/test/common_plat/common/libcunit_common.la +LIBCUNIT_COMMON = $(top_builddir)/test/common/libcunit_common.la LIB = $(top_builddir)/lib LIBODP = $(LIB)/libodphelper.la $(LIB)/libodp-dpdk.la $(DPDK_PMDS)
-INCCUNIT_COMMON = -I$(top_srcdir)/test/common_plat/common +INCCUNIT_COMMON = -I$(top_srcdir)/test/common INCODP = -I$(top_builddir)/platform/@with_platform@/include \ -I$(top_builddir)/include \ -I$(top_srcdir)/helper/include \ diff --git a/platform/linux-dpdk/test/validation/api/pktio/pktio_run.sh b/platform/linux-dpdk/test/validation/api/pktio/pktio_run.sh index 538c87d0..a08256a6 100755 --- a/platform/linux-dpdk/test/validation/api/pktio/pktio_run.sh +++ b/platform/linux-dpdk/test/validation/api/pktio/pktio_run.sh @@ -23,7 +23,7 @@ # running stand alone out of tree requires setting PATH PATH=${TEST_DIR}/api/pktio:$PATH PATH=$(dirname $0):$PATH -PATH=$(dirname $0)/../../../../common_plat/validation/api/pktio:$PATH +PATH=$(dirname $0)/../../../../../../test/validation/api/pktio:$PATH PATH=.:$PATH
pktio_main_path=$(which pktio_main${EXEEXT})
commit bab7aca5880bf759e54ce4c4a6f5d4cb3bbc278f Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 1 11:23:28 2018 +0200
Port ff51f63 "test: linux-gen: move platform-specific tests to platform directory"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/Makefile.am b/Makefile.am index c28b0229..dbf735dc 100644 --- a/Makefile.am +++ b/Makefile.am @@ -3,9 +3,9 @@ AM_DISTCHECK_CONFIGURE_FLAGS = --enable-user-guides \ --enable-helper-linux \ --with-testdir
-if PLATFORM_IS_LINUX_GENERIC -PLATFORM_DIR = platform/linux-generic -PLATFORM_TEST_DIR = platform/linux-generic/test +if PLATFORM_IS_LINUX_DPDK +PLATFORM_DIR = platform/linux-dpdk +PLATFORM_TEST_DIR = platform/linux-dpdk/test endif
SUBDIRS = \ diff --git a/platform/linux-dpdk/Makefile.inc b/platform/linux-dpdk/Makefile.inc index b20132b1..82962e5a 100644 --- a/platform/linux-dpdk/Makefile.inc +++ b/platform/linux-dpdk/Makefile.inc @@ -2,4 +2,4 @@ AM_CFLAGS += -I$(top_srcdir)/platform/$(with_platform)/arch/$(ARCH_DIR) AM_CXXFLAGS += -I$(top_srcdir)/platform/$(with_platform)/arch/$(ARCH_DIR) AM_CPPFLAGS += $(DPDK_CPPFLAGS) AM_LDFLAGS += -R$(SDK_INSTALL_PATH)/lib -LOG_COMPILER = $(top_srcdir)/test/linux-dpdk/wrapper-script.sh +LOG_COMPILER = $(top_srcdir)/platform/linux-dpdk/test/wrapper-script.sh diff --git a/platform/linux-dpdk/m4/configure.m4 b/platform/linux-dpdk/m4/configure.m4 index 5bc22e4d..fe2abe81 100644 --- a/platform/linux-dpdk/m4/configure.m4 +++ b/platform/linux-dpdk/m4/configure.m4 @@ -76,4 +76,6 @@ AC_SUBST([DPDK_PMDS]) CPPFLAGS=$OLD_CPPFLAGS
AC_CONFIG_FILES([platform/linux-dpdk/Makefile - platform/linux-dpdk/include/odp/api/plat/static_inline.h]) + platform/linux-dpdk/include/odp/api/plat/static_inline.h + platform/linux-dpdk/test/Makefile + platform/linux-dpdk/test/validation/api/pktio/Makefile]) diff --git a/test/linux-dpdk/Makefile.am b/platform/linux-dpdk/test/Makefile.am similarity index 100% rename from test/linux-dpdk/Makefile.am rename to platform/linux-dpdk/test/Makefile.am diff --git a/test/linux-dpdk/Makefile.inc b/platform/linux-dpdk/test/Makefile.inc similarity index 100% rename from test/linux-dpdk/Makefile.inc rename to platform/linux-dpdk/test/Makefile.inc diff --git a/platform/linux-dpdk/test/validation/Makefile.inc b/platform/linux-dpdk/test/validation/Makefile.inc new file mode 100644 index 00000000..9a9cdca0 --- /dev/null +++ b/platform/linux-dpdk/test/validation/Makefile.inc @@ -0,0 +1 @@ +include $(top_srcdir)/platform/linux-dpdk/test/Makefile.inc diff --git a/platform/linux-dpdk/test/validation/api/Makefile.inc b/platform/linux-dpdk/test/validation/api/Makefile.inc new file mode 100644 index 00000000..90ab675c --- /dev/null +++ b/platform/linux-dpdk/test/validation/api/Makefile.inc @@ -0,0 +1 @@ +include $(top_srcdir)/platform/linux-dpdk/test/validation/Makefile.inc diff --git a/platform/linux-dpdk/test/validation/api/pktio/.gitignore b/platform/linux-dpdk/test/validation/api/pktio/.gitignore new file mode 120000 index 00000000..42a9f364 --- /dev/null +++ b/platform/linux-dpdk/test/validation/api/pktio/.gitignore @@ -0,0 +1 @@ +../../../../../linux-generic/test/validation/api/pktio/.gitignore \ No newline at end of file diff --git a/test/linux-dpdk/validation/api/pktio/Makefile.am b/platform/linux-dpdk/test/validation/api/pktio/Makefile.am similarity index 100% rename from test/linux-dpdk/validation/api/pktio/Makefile.am rename to platform/linux-dpdk/test/validation/api/pktio/Makefile.am diff --git a/platform/linux-dpdk/test/validation/api/pktio/pktio_env b/platform/linux-dpdk/test/validation/api/pktio/pktio_env new file mode 120000 index 00000000..161505ff --- /dev/null +++ b/platform/linux-dpdk/test/validation/api/pktio/pktio_env @@ -0,0 +1 @@ +../../../../../linux-generic/test/validation/api/pktio/pktio_env \ No newline at end of file diff --git a/test/linux-dpdk/validation/api/pktio/pktio_run.sh b/platform/linux-dpdk/test/validation/api/pktio/pktio_run.sh similarity index 100% rename from test/linux-dpdk/validation/api/pktio/pktio_run.sh rename to platform/linux-dpdk/test/validation/api/pktio/pktio_run.sh diff --git a/test/linux-dpdk/wrapper-script.sh b/platform/linux-dpdk/test/wrapper-script.sh similarity index 100% rename from test/linux-dpdk/wrapper-script.sh rename to platform/linux-dpdk/test/wrapper-script.sh diff --git a/test/linux-dpdk/.gitignore b/test/linux-dpdk/.gitignore deleted file mode 100644 index 5dabf91c..00000000 --- a/test/linux-dpdk/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -*.log -*.trs -tests-validation.env diff --git a/test/linux-dpdk/m4/configure.m4 b/test/linux-dpdk/m4/configure.m4 deleted file mode 100644 index ff6caf97..00000000 --- a/test/linux-dpdk/m4/configure.m4 +++ /dev/null @@ -1,2 +0,0 @@ -AC_CONFIG_FILES([test/linux-dpdk/Makefile - test/linux-dpdk/validation/api/pktio/Makefile]) diff --git a/test/linux-dpdk/run-test b/test/linux-dpdk/run-test deleted file mode 120000 index 332cf3fe..00000000 --- a/test/linux-dpdk/run-test +++ /dev/null @@ -1 +0,0 @@ -../linux-generic/run-test \ No newline at end of file diff --git a/test/linux-dpdk/validation/api/pktio/.gitignore b/test/linux-dpdk/validation/api/pktio/.gitignore deleted file mode 120000 index 559053e1..00000000 --- a/test/linux-dpdk/validation/api/pktio/.gitignore +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/validation/api/pktio/.gitignore \ No newline at end of file diff --git a/test/linux-dpdk/validation/api/pktio/pktio_env b/test/linux-dpdk/validation/api/pktio/pktio_env deleted file mode 120000 index 271cefee..00000000 --- a/test/linux-dpdk/validation/api/pktio/pktio_env +++ /dev/null @@ -1 +0,0 @@ -../../../../linux-generic/validation/api/pktio/pktio_env \ No newline at end of file
commit e740a84df538bc7f973815b7125929c397a4599a Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 1 10:44:41 2018 +0200
Port 6a119c7 "test: move common validation tests handling to theirs own Makefile.am"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/test/linux-dpdk/Makefile.am b/test/linux-dpdk/Makefile.am index 8136a195..4e9333b3 100644 --- a/test/linux-dpdk/Makefile.am +++ b/test/linux-dpdk/Makefile.am @@ -1,36 +1,10 @@ include $(top_srcdir)/test/Makefile.inc TESTS_ENVIRONMENT += TEST_DIR=${top_builddir}/test/common_plat/validation
-ALL_API_VALIDATION_DIR = ${top_builddir}/test/common_plat/validation/api - SUBDIRS =
if test_vald -TESTS = validation/api/pktio/pktio_run.sh \ - $(ALL_API_VALIDATION_DIR)/atomic/atomic_main$(EXEEXT) \ - $(ALL_API_VALIDATION_DIR)/barrier/barrier_main$(EXEEXT) \ - $(ALL_API_VALIDATION_DIR)/buffer/buffer_main$(EXEEXT) \ - $(ALL_API_VALIDATION_DIR)/classification/classification_main$(EXEEXT) \ - $(ALL_API_VALIDATION_DIR)/cpumask/cpumask_main$(EXEEXT) \ - $(ALL_API_VALIDATION_DIR)/crypto/crypto_main$(EXEEXT) \ - $(ALL_API_VALIDATION_DIR)/errno/errno_main$(EXEEXT) \ - $(ALL_API_VALIDATION_DIR)/hash/hash_main$(EXEEXT) \ - $(ALL_API_VALIDATION_DIR)/init/init_main_ok$(EXEEXT) \ - $(ALL_API_VALIDATION_DIR)/init/init_main_abort$(EXEEXT) \ - $(ALL_API_VALIDATION_DIR)/init/init_main_log$(EXEEXT) \ - $(ALL_API_VALIDATION_DIR)/lock/lock_main$(EXEEXT) \ - $(ALL_API_VALIDATION_DIR)/packet/packet_main$(EXEEXT) \ - $(ALL_API_VALIDATION_DIR)/pool/pool_main$(EXEEXT) \ - $(ALL_API_VALIDATION_DIR)/queue/queue_main$(EXEEXT) \ - $(ALL_API_VALIDATION_DIR)/random/random_main$(EXEEXT) \ - $(ALL_API_VALIDATION_DIR)/scheduler/scheduler_main$(EXEEXT) \ - $(ALL_API_VALIDATION_DIR)/std_clib/std_clib_main$(EXEEXT) \ - $(ALL_API_VALIDATION_DIR)/thread/thread_main$(EXEEXT) \ - $(ALL_API_VALIDATION_DIR)/time/time_main$(EXEEXT) \ - $(ALL_API_VALIDATION_DIR)/timer/timer_main$(EXEEXT) \ - $(ALL_API_VALIDATION_DIR)/traffic_mngr/traffic_mngr_main$(EXEEXT) \ - $(ALL_API_VALIDATION_DIR)/shmem/shmem_main$(EXEEXT) \ - $(ALL_API_VALIDATION_DIR)/system/system_main$(EXEEXT) +TESTS = validation/api/pktio/pktio_run.sh
SUBDIRS += validation/api/pktio else @@ -40,17 +14,20 @@ SUBDIRS += validation/api/pktio endif endif
-dist_check_SCRIPTS = tests-validation.env $(LOG_COMPILER) +TESTNAME = linux-dpdk + +TESTENV = tests-$(TESTNAME).env
-test_SCRIPTS = $(dist_check_SCRIPTS) +test_DATA = $(TESTENV)
-tests-validation.env: +DISTCLEANFILES = $(TESTENV) +.PHONY: $(TESTENV) +$(TESTENV): echo "TESTS="$(TESTS)"" > $@ echo "$(TESTS_ENVIRONMENT)" >> $@ echo "$(LOG_COMPILER)" >> $@
if test_installdir installcheck-local: - $(DESTDIR)/$(testdir)/run-test.sh + $(DESTDIR)/$(testdir)/run-test.sh $(TESTNAME) endif -
commit 080581e904d92fac403236898aac078e6cd4f4bc Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 1 10:34:46 2018 +0200
Port 7d162de "test: move run-test script to test_common dir"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/test/linux-dpdk/Makefile.am b/test/linux-dpdk/Makefile.am index fab35c62..8136a195 100644 --- a/test/linux-dpdk/Makefile.am +++ b/test/linux-dpdk/Makefile.am @@ -40,7 +40,7 @@ SUBDIRS += validation/api/pktio endif endif
-dist_check_SCRIPTS = run-test tests-validation.env $(LOG_COMPILER) +dist_check_SCRIPTS = tests-validation.env $(LOG_COMPILER)
test_SCRIPTS = $(dist_check_SCRIPTS)
@@ -51,6 +51,6 @@ tests-validation.env:
if test_installdir installcheck-local: - $(DESTDIR)/$(testdir)/run-test + $(DESTDIR)/$(testdir)/run-test.sh endif
commit 41664c42ed724baa595113c30dacdad635b6724a Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 1 10:23:44 2018 +0200
Port c657f3f "m4: move atomic checks to separate file"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/m4/configure.m4 b/platform/linux-dpdk/m4/configure.m4 index 6223bcbd..5bc22e4d 100644 --- a/platform/linux-dpdk/m4/configure.m4 +++ b/platform/linux-dpdk/m4/configure.m4 @@ -1,68 +1,5 @@ ODP_VISIBILITY - -AC_MSG_CHECKING(for GCC atomic builtins) -AC_LINK_IFELSE( - [AC_LANG_SOURCE( - [[int main() { - int v = 1; - __atomic_fetch_add(&v, 1, __ATOMIC_RELAXED); - __atomic_fetch_sub(&v, 1, __ATOMIC_RELAXED); - __atomic_store_n(&v, 1, __ATOMIC_RELAXED); - __atomic_load_n(&v, __ATOMIC_RELAXED); - return 0; - } - ]])], - AC_MSG_RESULT(yes), - AC_MSG_RESULT(no) - echo "GCC-style __atomic builtins not supported by the compiler." - echo "Use newer version. For gcc > 4.7.0" - exit -1) - -dnl Check whether -latomic is needed -use_libatomic=no - -AC_MSG_CHECKING(whether -latomic is needed for 64-bit atomic built-ins) -AC_LINK_IFELSE( - [AC_LANG_SOURCE([[ - #include <stdint.h> - static uint64_t loc; - int main(void) - { - uint64_t prev = __atomic_exchange_n(&loc, 7, __ATOMIC_RELAXED); - return 0; - } - ]])], - [AC_MSG_RESULT(no)], - [AC_MSG_RESULT(yes) - AC_CHECK_LIB( - [atomic], [__atomic_exchange_8], - [use_libatomic=yes], - [AC_MSG_FAILURE([__atomic_exchange_8 is not available])]) - ]) - -AC_MSG_CHECKING(whether -latomic is needed for 128-bit atomic built-ins) -AC_LINK_IFELSE( - [AC_LANG_SOURCE([[ - static __int128 loc; - int main(void) - { - __int128 prev; - prev = __atomic_exchange_n(&loc, 7, __ATOMIC_RELAXED); - return 0; - } - ]])], - [AC_MSG_RESULT(no)], - [AC_MSG_RESULT(yes) - AC_CHECK_LIB( - [atomic], [__atomic_exchange_16], - [use_libatomic=yes], - [AC_MSG_CHECKING([cannot detect support for 128-bit atomics])]) - ]) - -if test "x$use_libatomic" = "xyes"; then - ATOMIC_LIBS="-latomic" -fi -AC_SUBST([ATOMIC_LIBS]) +ODP_ATOMIC
# linux-generic PCAP support is not relevant as the code doesn't use # linux-generic pktio at all. And DPDK has its own PCAP support anyway
commit 63d7ac9d9e2dd81c1f5b2efb8eeeef9bff1ffa68 Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 1 10:22:39 2018 +0200
Port e02f554 "m4: move -fvisibility=hidden check to separate file"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/m4/configure.m4 b/platform/linux-dpdk/m4/configure.m4 index a36dc1b9..6223bcbd 100644 --- a/platform/linux-dpdk/m4/configure.m4 +++ b/platform/linux-dpdk/m4/configure.m4 @@ -1,14 +1,4 @@ -# Enable -fvisibility=hidden if using a gcc that supports it -OLD_CFLAGS="$CFLAGS" -AC_MSG_CHECKING([whether $CC supports -fvisibility=hidden]) -VISIBILITY_CFLAGS="-fvisibility=hidden" -CFLAGS="$CFLAGS $VISIBILITY_CFLAGS" -AC_LINK_IFELSE([AC_LANG_PROGRAM()], AC_MSG_RESULT([yes]), - [VISIBILITY_CFLAGS=""; AC_MSG_RESULT([no])]); - -AC_SUBST(VISIBILITY_CFLAGS) -# Restore CFLAGS; VISIBILITY_CFLAGS are added to it where needed. -CFLAGS=$OLD_CFLAGS +ODP_VISIBILITY
AC_MSG_CHECKING(for GCC atomic builtins) AC_LINK_IFELSE(
commit 41698708fbc7a856d440d352be91ddf97a04d2bf Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 1 10:20:45 2018 +0200
Port d0d0bd9 "m4: move timer_create check to common place"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/m4/configure.m4 b/platform/linux-dpdk/m4/configure.m4 index b0c5965c..a36dc1b9 100644 --- a/platform/linux-dpdk/m4/configure.m4 +++ b/platform/linux-dpdk/m4/configure.m4 @@ -78,7 +78,7 @@ AC_SUBST([ATOMIC_LIBS]) # linux-generic pktio at all. And DPDK has its own PCAP support anyway AM_CONDITIONAL([HAVE_PCAP], [false]) m4_include([platform/linux-dpdk/m4/odp_pthread.m4]) -m4_include([platform/linux-dpdk/m4/odp_timer.m4]) +ODP_TIMER ODP_OPENSSL m4_include([platform/linux-dpdk/m4/odp_schedule.m4])
commit c20090f57bc1991559a3e111416e1ae0aa0fe57f Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 1 10:19:33 2018 +0200
Port 7dc5f21 "m4: move openssl check to common place"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/m4/configure.m4 b/platform/linux-dpdk/m4/configure.m4 index c61dae4b..b0c5965c 100644 --- a/platform/linux-dpdk/m4/configure.m4 +++ b/platform/linux-dpdk/m4/configure.m4 @@ -79,7 +79,7 @@ AC_SUBST([ATOMIC_LIBS]) AM_CONDITIONAL([HAVE_PCAP], [false]) m4_include([platform/linux-dpdk/m4/odp_pthread.m4]) m4_include([platform/linux-dpdk/m4/odp_timer.m4]) -m4_include([platform/linux-dpdk/m4/odp_openssl.m4]) +ODP_OPENSSL m4_include([platform/linux-dpdk/m4/odp_schedule.m4])
##########################################################################
commit e79db7d5662a3b83a39baad69aecc346b4ea4065 Merge: 9c8e5413 482eeee3 Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 1 10:16:37 2018 +0200
Merge commit '482eeee380d40596131826c1103ed89247bd17e5' of https://github.com/Linaro/odp into odp-dpdk
Signed-off-by: Matias Elo matias.elo@nokia.com
# Conflicts: # configure.ac # example/Makefile.inc # helper/test/Makefile.am # platform/Makefile.inc # platform/linux-generic/libodp-linux.pc.in
diff --cc configure.ac index 9da4806a,4bce0534..4298bde7 --- a/configure.ac +++ b/configure.ac @@@ -165,8 -161,17 +161,7 @@@ AC_ARG_WITH([platform] ])
AC_SUBST([with_platform]) - AC_SUBST([platform_with_platform], ["platform/${with_platform}"])
-########################################################################## -# Run platform specific checks and settings -########################################################################## -AS_IF([test "${with_platform}" = "linux-generic"], - [m4_include([./platform/linux-generic/m4/configure.m4])], - [AC_MSG_ERROR([UNSUPPORTED PLATFORM: ${with_platform}])]) - -AC_DEFINE_UNQUOTED([IMPLEMENTATION_NAME], ["$IMPLEMENTATION_NAME"], - [Define to the name of the implementation]) - ########################################################################## # Include m4 files ########################################################################## @@@ -175,36 -180,6 +170,29 @@@ m4_include([./example/m4/configure.m4] m4_include([./helper/m4/configure.m4]) m4_include([./test/m4/configure.m4])
+########################################################################## +# Set SDK install path +########################################################################## +AC_ARG_WITH([sdk-install-path], +AC_HELP_STRING([--with-sdk-install-path=DIR path to external libs and headers], + [(or in the default path if not specified).]), + [SDK_INSTALL_PATH=$withval SDK_INSTALL_PATH_=1 + DPDK_DEFAULT_DIR=0], + [DPDK_DEFAULT_DIR=1 SDK_INSTALL_PATH_=]) + +AC_SUBST(DPDK_DEFAULT_DIR) +AC_SUBST(SDK_INSTALL_PATH) + +########################################################################## +# Run platform specific checks and settings +########################################################################## - IMPLEMENTATION_NAME="" - if test "${with_platform}" = "linux-dpdk"; - then - m4_include([./platform/linux-dpdk/m4/configure.m4]) - m4_include([./test/linux-dpdk/m4/configure.m4]) - IMPLEMENTATION_NAME="odp-dpdk" - else - echo "UNSUPPORTED PLATFORM: ${with_platform}" - exit 1 - fi ++AS_IF([test "${with_platform}" = "linux-dpdk"], ++ [m4_include([./platform/linux-dpdk/m4/configure.m4])], ++ [AC_MSG_ERROR([UNSUPPORTED PLATFORM: ${with_platform}])]) + +AC_DEFINE_UNQUOTED([IMPLEMENTATION_NAME], ["$IMPLEMENTATION_NAME"], + [Define to the name of the implementation]) + ########################################################################## # Set the install directory for test binaries/scripts ########################################################################## diff --cc example/Makefile.inc index fc1b787f,1609066e..34595a7a --- a/example/Makefile.inc +++ b/example/Makefile.inc @@@ -1,7 -1,7 +1,9 @@@ +include $(top_srcdir)/platform/@with_platform@/Makefile.inc + + TESTS_ENVIRONMENT = EXEEXT=${EXEEXT} + LIB = $(top_builddir)/lib -LDADD = $(LIB)/libodp-linux.la $(LIB)/libodphelper.la $(DPDK_PMDS) +LDADD = $(LIB)/libodp-dpdk.la $(LIB)/libodphelper.la $(DPDK_PMDS) AM_CFLAGS = \ -I$(srcdir) \ -I$(top_srcdir)/example \ diff --cc helper/Makefile.am index b34d0d5d,ee1c17d6..5d030731 --- a/helper/Makefile.am +++ b/helper/Makefile.am @@@ -1,16 -1,15 +1,17 @@@ +include $(top_srcdir)/platform/@with_platform@/Makefile.inc + pkgconfigdir = $(libdir)/pkgconfig - pkgconfig_DATA = $(top_builddir)/pkgconfig/libodphelper.pc + pkgconfig_DATA = libodphelper.pc
LIB = $(top_builddir)/lib - AM_CPPFLAGS = -I$(srcdir)/include - AM_CPPFLAGS += -I$(top_srcdir)/platform/@with_platform@/include - AM_CPPFLAGS += -I$(top_srcdir)/include - AM_CPPFLAGS += -I$(top_srcdir)/include/odp/arch/@ARCH_ABI@ - AM_CPPFLAGS += -I$(top_builddir)/platform/@with_platform@/include - AM_CPPFLAGS += -I$(top_srcdir)/platform/@with_platform@/arch/@ARCH_DIR@ - AM_CPPFLAGS += -I$(top_builddir)/include + AM_CPPFLAGS = \ + -I$(top_builddir)/platform/@with_platform@/include \ + -I$(top_srcdir)/helper/include \ + -I$(top_srcdir)/include \ + -I$(top_srcdir)/include/odp/arch/@ARCH_ABI@ \ + -I$(top_srcdir)/platform/@with_platform@/include \ + -I$(top_srcdir)/platform/@with_platform@/arch/@ARCH_DIR@ \ + -I$(top_builddir)/include
AM_LDFLAGS = -version-number '$(ODPHELPER_LIBSO_VERSION)'
diff --cc helper/test/Makefile.am index 4747959f,8eee643b..f71294ef --- a/helper/test/Makefile.am +++ b/helper/test/Makefile.am @@@ -1,5 -1,5 +1,7 @@@ +include $(top_srcdir)/platform/@with_platform@/Makefile.inc + + TESTS_ENVIRONMENT = EXEEXT=${EXEEXT} + LIB = $(top_builddir)/lib
#in the following line, the libs using the symbols should come before diff --cc platform/Makefile.inc index d330fcb1,0086db77..bf5c4fa3 --- a/platform/Makefile.inc +++ b/platform/Makefile.inc @@@ -1,12 -1,10 +1,10 @@@ LIB = $(top_builddir)/lib
pkgconfigdir = $(libdir)/pkgconfig - pkgconfig_DATA = $(top_builddir)/pkgconfig/libodp-dpdk.pc - - .PHONY: pkgconfig/libodp-dpdk.pc -pkgconfig_DATA = libodp-linux.pc ++pkgconfig_DATA = libodp-dpdk.pc
VPATH = $(srcdir) $(builddir) -lib_LTLIBRARIES = $(LIB)/libodp-linux.la +lib_LTLIBRARIES = $(LIB)/libodp-dpdk.la
AM_LDFLAGS = -version-number '$(ODP_LIBSO_VERSION)'
commit 9c8e5413f78c21039434111100bbb857b28b3bdb Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 1 09:40:22 2018 +0200
Port 3f3d765 "linux-gen: timer: drop odp prefix from odp_timer_pool_s"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/include/odp/api/plat/timer_types.h b/platform/linux-dpdk/include/odp/api/plat/timer_types.h deleted file mode 100644 index a8891f11..00000000 --- a/platform/linux-dpdk/include/odp/api/plat/timer_types.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (c) 2013, Linaro Limited - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - - -/** - * @file - * - * ODP timer service - */ - -#ifndef ODP_TIMER_TYPES_H_ -#define ODP_TIMER_TYPES_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include <odp/api/plat/strong_types.h> - -/** @addtogroup odp_timer - * @{ - **/ - -struct odp_timer_pool_s; /**< Forward declaration */ - -typedef struct odp_timer_pool_s *odp_timer_pool_t; - -#define ODP_TIMER_POOL_INVALID NULL - -#define ODP_TIMER_POOL_NAME_LEN 32 - -typedef ODP_HANDLE_T(odp_timer_t); - -#define ODP_TIMER_INVALID _odp_cast_scalar(odp_timer_t, 0xffffffff) - -typedef ODP_HANDLE_T(odp_timeout_t); - -#define ODP_TIMEOUT_INVALID _odp_cast_scalar(odp_timeout_t, NULL) - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/platform/linux-dpdk/include/odp/api/plat/timer_types.h b/platform/linux-dpdk/include/odp/api/plat/timer_types.h new file mode 120000 index 00000000..a6699df9 --- /dev/null +++ b/platform/linux-dpdk/include/odp/api/plat/timer_types.h @@ -0,0 +1 @@ +../../../../../linux-generic/include/odp/api/plat/timer_types.h \ No newline at end of file
commit 71f3da57f5360176b81bdbe7d30ac356078d25a0 Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 1 09:35:47 2018 +0200
Port 34884aa "linux-gen: fixing typos"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/doc/platform_specific.dox b/platform/linux-dpdk/doc/platform_specific.dox index bdab6564..18e3d061 100644 --- a/platform/linux-dpdk/doc/platform_specific.dox +++ b/platform/linux-dpdk/doc/platform_specific.dox @@ -28,5 +28,5 @@ * to odp_init_local() is actually fully defined by these * requirements: It has to be the value returned by the * unique call to odp_init_global() made by one single - * ascendant of the current process. + * ancestor of the current process. */
commit 5afb7d94afc622f18b2fdc079aeac968feb4975c Author: Matias Elo matias.elo@nokia.com Date: Thu Feb 1 09:34:04 2018 +0200
Port 052d268 "linux-gen: deduplicate arch-specific files"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 2987fd40..b634d735 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -68,22 +68,6 @@ odpapiinclude_HEADERS = \ $(srcdir)/include/odp/api/traffic_mngr.h \ $(srcdir)/include/odp/api/version.h
-if ARCH_IS_ARM -odpapiinclude_HEADERS += $(srcdir)/arch/arm/odp/api/cpu_arch.h -endif -if ARCH_IS_AARCH64 -odpapiinclude_HEADERS += $(srcdir)/arch/aarch64/odp/api/cpu_arch.h -endif -if ARCH_IS_MIPS64 -odpapiinclude_HEADERS += $(srcdir)/arch/mips64/odp/api/cpu_arch.h -endif -if ARCH_IS_POWERPC -odpapiinclude_HEADERS += $(srcdir)/arch/powerpc/odp/api/cpu_arch.h -endif -if ARCH_IS_X86 -odpapiinclude_HEADERS += $(srcdir)/arch/x86/odp/api/cpu_arch.h -endif - odpapiplatincludedir= $(includedir)/odp/api/plat odpapiplatinclude_HEADERS = \ $(builddir)/include/odp/api/plat/static_inline.h \ @@ -222,27 +206,47 @@ __LIB__libodp_dpdk_la_SOURCES = \ ../linux-generic/odp_weak.c
if ARCH_IS_ARM -__LIB__libodp_dpdk_la_SOURCES += arch/arm/odp_cpu_arch.c \ - arch/arm/odp_sysinfo_parse.c +__LIB__libodp_dpdk_la_SOURCES += arch/default/odp_cpu_arch.c \ + arch/default/odp_cpu_cycles.c \ + arch/default/odp_global_time.c \ + arch/default/odp_sysinfo_parse.c +arch_odp_headers = $(srcdir)/arch/arm/odp/api/cpu_arch.h endif if ARCH_IS_AARCH64 -__LIB__libodp_linux_la_SOURCES += arch/aarch64/odp_cpu_arch.c \ - arch/aarch64/odp_sysinfo_parse.c +__LIB__libodp_dpdk_la_SOURCES += arch/default/odp_cpu_arch.c \ + arch/default/odp_cpu_cycles.c \ + arch/aarch64/odp_global_time.c \ + arch/default/odp_sysinfo_parse.c +arch_odp_headers = $(srcdir)/arch/aarch64/odp/api/cpu_arch.h endif if ARCH_IS_MIPS64 __LIB__libodp_dpdk_la_SOURCES += arch/mips64/odp_cpu_arch.c \ + arch/default/odp_cpu_cycles.c \ + arch/default/odp_global_time.c \ arch/mips64/odp_sysinfo_parse.c +arch_odp_headers = $(srcdir)/arch/mips64/odp/api/cpu_arch.h endif if ARCH_IS_POWERPC -__LIB__libodp_dpdk_la_SOURCES += arch/powerpc/odp_cpu_arch.c \ +__LIB__libodp_dpdk_la_SOURCES += arch/default/odp_cpu_arch.c \ + arch/default/odp_cpu_cycles.c \ + arch/default/odp_global_time.c \ arch/powerpc/odp_sysinfo_parse.c +arch_odp_headers = $(srcdir)/arch/powerpc/odp/api/cpu_arch.h endif if ARCH_IS_X86 __LIB__libodp_dpdk_la_SOURCES += arch/x86/cpu_flags.c \ arch/x86/odp_cpu_arch.c \ + arch/default/odp_cpu_cycles.c \ + arch/x86/odp_global_time.c \ arch/x86/odp_sysinfo_parse.c +arch_odp_headers = $(srcdir)/arch/x86/odp/api/cpu_arch.h +noinst_HEADERS += $(srcdir)/arch/x86/cpu_flags.h endif
+noinst_HEADERS += $(srcdir)/arch/default/odp/api/cpu_arch.h + +odpapiinclude_HEADERS += $(arch_odp_headers) + __LIB__libodp_dpdk_la_LIBADD = $(ATOMIC_LIBS) __LIB__libodp_dpdk_la_LIBADD += $(OPENSSL_LIBS) __LIB__libodp_dpdk_la_LIBADD += $(DPDK_LIBS) $(DPDK_PMDS)
commit 95971a4aafab53d4673a0ba07fbee81871c0e2c8 Author: Matias Elo matias.elo@nokia.com Date: Wed Jan 31 18:02:46 2018 +0200
Port 0ff7861 "linux-gen: split arm into arm and aarch64"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 4cb948db..2987fd40 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -71,6 +71,9 @@ odpapiinclude_HEADERS = \ if ARCH_IS_ARM odpapiinclude_HEADERS += $(srcdir)/arch/arm/odp/api/cpu_arch.h endif +if ARCH_IS_AARCH64 +odpapiinclude_HEADERS += $(srcdir)/arch/aarch64/odp/api/cpu_arch.h +endif if ARCH_IS_MIPS64 odpapiinclude_HEADERS += $(srcdir)/arch/mips64/odp/api/cpu_arch.h endif @@ -222,6 +225,10 @@ if ARCH_IS_ARM __LIB__libodp_dpdk_la_SOURCES += arch/arm/odp_cpu_arch.c \ arch/arm/odp_sysinfo_parse.c endif +if ARCH_IS_AARCH64 +__LIB__libodp_linux_la_SOURCES += arch/aarch64/odp_cpu_arch.c \ + arch/aarch64/odp_sysinfo_parse.c +endif if ARCH_IS_MIPS64 __LIB__libodp_dpdk_la_SOURCES += arch/mips64/odp_cpu_arch.c \ arch/mips64/odp_sysinfo_parse.c
commit 0ba5deeb778eac95ebd9798ed5b9e17b314fe32d Merge: a9427d71 ae4f1d82 Author: Matias Elo matias.elo@nokia.com Date: Wed Jan 31 17:51:33 2018 +0200
Merge commit 'ae4f1d82ed704992c1d8284c23795b9e076b33b9' of https://github.com/Linaro/odp into odp-dpdk
Signed-off-by: Matias Elo matias.elo@nokia.com # Conflicts: # .travis.yml
commit a9427d718a17329a3c4982529a4d219b928d7fe5 Author: Matias Elo matias.elo@nokia.com Date: Wed Jan 31 17:28:46 2018 +0200
Port 91ef9f7 "linux-gen: packet: optimize header layout"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_types.h b/platform/linux-dpdk/include/odp/api/plat/packet_types.h index d96f6b5f..a75a9a15 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_types.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_types.h @@ -36,7 +36,7 @@ typedef ODP_HANDLE_T(odp_packet_t);
#define ODP_PACKET_INVALID _odp_cast_scalar(odp_packet_t, NULL)
-#define ODP_PACKET_OFFSET_INVALID (0x0fffffff) +#define ODP_PACKET_OFFSET_INVALID 0xffff
typedef ODP_HANDLE_T(odp_packet_seg_t);
diff --git a/platform/linux-dpdk/include/odp_packet_internal.h b/platform/linux-dpdk/include/odp_packet_internal.h index f8f00521..ce4e754c 100644 --- a/platform/linux-dpdk/include/odp_packet_internal.h +++ b/platform/linux-dpdk/include/odp_packet_internal.h @@ -92,9 +92,14 @@ typedef struct { error_flags_t error_flags; output_flags_t output_flags;
- uint32_t l2_offset; /**< offset to L2 hdr, e.g. Eth */ - uint32_t l3_offset; /**< offset to L3 hdr, e.g. IPv4, IPv6 */ - uint32_t l4_offset; /**< offset to L4 hdr (TCP, UDP, SCTP, also ICMP) */ + /* offset to L2 hdr, e.g. Eth */ + uint16_t l2_offset; + + /* offset to L3 hdr, e.g. IPv4, IPv6 */ + uint16_t l3_offset; + + /* offset to L4 hdr (TCP, UDP, SCTP, also ICMP) */ + uint16_t l4_offset; } packet_parser_t;
/**
commit 85a9feb6885c46558297a97f5c0810110ac91cdc Author: Matias Elo matias.elo@nokia.com Date: Wed Jan 31 17:14:00 2018 +0200
Port 69a1179 "linux-gen: packet: compress packet offset table"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_types.h b/platform/linux-dpdk/include/odp/api/plat/packet_types.h index 4e2a7b48..d96f6b5f 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_types.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_types.h @@ -64,35 +64,35 @@ typedef enum { /** @internal Packet header field offsets for inline functions */ typedef struct _odp_packet_inline_offset_t { /** @internal field offset */ - size_t mb; + uint16_t mb; /** @internal field offset */ - size_t pool; + uint16_t pool; /** @internal field offset */ - size_t input; + uint16_t input; /** @internal field offset */ - size_t user_ptr; + uint16_t user_ptr; /** @internal field offset */ - size_t timestamp; + uint16_t timestamp; /** @internal field offset */ - size_t input_flags; + uint16_t input_flags; /** @internal field offset */ - size_t buf_addr; + uint16_t buf_addr; /** @internal field offset */ - size_t data; + uint16_t data; /** @internal field offset */ - size_t pkt_len; + uint16_t pkt_len; /** @internal field offset */ - size_t seg_len; + uint16_t seg_len; /** @internal field offset */ - size_t nb_segs; + uint16_t nb_segs; /** @internal field offset */ - size_t udata_len; + uint16_t udata_len; /** @internal offset */ - size_t udata; + uint16_t udata; /** @internal field offset */ - size_t rss; + uint16_t rss; /** @internal field offset */ - size_t ol_flags; + uint16_t ol_flags; /** @internal rss hash result set */ uint64_t rss_flag;
commit aa44ba190977f7c3388f98882d6249150adac2c0 Author: Matias Elo matias.elo@nokia.com Date: Wed Jan 31 17:11:05 2018 +0200
Port 6efe7d9 "linux-gen: packet: enhance segment prints"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index d9b1c7b4..243173c5 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -990,7 +990,7 @@ int odp_packet_move_data(odp_packet_t pkt, uint32_t dst_offset, void odp_packet_print(odp_packet_t pkt) { odp_packet_seg_t seg; - int max_len = 512; + int max_len = 1024; char str[max_len]; uint8_t *p; int len = 0; @@ -1031,8 +1031,9 @@ void odp_packet_print(odp_packet_t pkt)
while (seg != ODP_PACKET_SEG_INVALID) { len += snprintf(&str[len], n - len, - " seg_len %" PRIu32 "\n", - odp_packet_seg_data_len(pkt, seg)); + " seg_len %-4" PRIu32 " seg_data %p ", + odp_packet_seg_data_len(pkt, seg), + odp_packet_seg_data(pkt, seg));
seg = odp_packet_next_seg(pkt, seg); }
commit 945e1eb3e643d96de5422cc37b0d51658b5e107c Author: Matias Elo matias.elo@nokia.com Date: Wed Jan 31 16:54:23 2018 +0200
Port e4289ab "linux-gen: buffer: optimize header layout"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/include/odp_buffer_internal.h b/platform/linux-dpdk/include/odp_buffer_internal.h index 9e3d4bd2..d7673e1c 100644 --- a/platform/linux-dpdk/include/odp_buffer_internal.h +++ b/platform/linux-dpdk/include/odp_buffer_internal.h @@ -48,19 +48,31 @@ ODP_STATIC_ASSERT(CONFIG_PACKET_MAX_SEGS < 256, struct odp_buffer_hdr_t { /* Underlying DPDK rte_mbuf */ struct rte_mbuf mb; + /* Buffer index in the pool */ - uint32_t index; + uint32_t index; + + /* Total size of all allocated segs */ + uint32_t totsize;
- /* ODP buffer type, not DPDK buf type */ - int type; + /* Pool type */ + int8_t type; + + /* Event type. Maybe different than pool type (crypto compl event) */ + int8_t event_type;
/* Burst counts */ - int burst_num; - int burst_first; + uint8_t burst_num; + uint8_t burst_first;
/* Next buf in a list */ struct odp_buffer_hdr_t *next;
+ /* Burst table */ + struct odp_buffer_hdr_t *burst[BUFFER_BURST_SIZE]; + + /* --- Mostly read only data --- */ + /* User context pointer or u64 */ union { uint64_t buf_u64; @@ -68,21 +80,12 @@ struct odp_buffer_hdr_t { const void *buf_cctx; /* const alias for ctx */ };
- /* Event type. Maybe different than pool type (crypto compl event) */ - odp_event_type_t event_type; - - /* Burst table */ - struct odp_buffer_hdr_t *burst[BUFFER_BURST_SIZE]; + /* Pool pointer */ + void *pool_ptr;
/* Pool handle: will be removed, used only for odp_packet_pool() * inlining */ odp_pool_t pool_hdl; - - /* Pool pointer */ - void *pool_ptr; - - /* Total size of all allocated segs */ - uint32_t totsize; };
ODP_STATIC_ASSERT(BUFFER_BURST_SIZE < 256, "BUFFER_BURST_SIZE_TOO_LARGE");
commit a3dfc5eee02c96fbb63c06a8b9b4f534b0736e5d Merge: fda37c20 614399fa Author: Matias Elo matias.elo@nokia.com Date: Wed Jan 31 16:04:15 2018 +0200
Merge commit '614399faccde551f7ee473e3763254bce96e3444' of https://github.com/Linaro/odp into odp-linux
Signed-off-by: Matias Elo matias.elo@nokia.com
# Conflicts: # .travis.yml
diff --cc configure.ac index fa91bb4b,f7da75ec..b2fd0f34 --- a/configure.ac +++ b/configure.ac @@@ -217,9 -213,7 +217,8 @@@ AM_CONDITIONAL([test_installdir], [tes ########################################################################## # Set conditionals as computed within platform specific files ########################################################################## +AM_CONDITIONAL([DPDK_DEFAULT_DIR], [test "x${DPDK_DEFAULT_DIR}" = "x1"]) AM_CONDITIONAL([SDK_INSTALL_PATH_], [test "x${SDK_INSTALL_PATH_}" = "x1"]) - AM_CONDITIONAL([cunit_support], [test x$cunit_support = xyes ]) AM_CONDITIONAL([HAVE_DOXYGEN], [test "x${DOXYGEN}" = "xdoxygen"]) AM_CONDITIONAL([user_guide], [test "x${user_guides}" = "xyes" ]) AM_CONDITIONAL([HAVE_MSCGEN], [test "x${MSCGEN}" = "xmscgen"])
commit fda37c206ba99a3555b1314e567336f880df6633 Author: Matias Elo matias.elo@nokia.com Date: Wed Jan 31 14:05:06 2018 +0200
Port 3be7ab9 "build: drop platorm/linux-generic/Makefile.inc"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/example/Makefile.inc b/example/Makefile.inc index 848c1b2e..fc1b787f 100644 --- a/example/Makefile.inc +++ b/example/Makefile.inc @@ -1,3 +1,5 @@ +include $(top_srcdir)/platform/@with_platform@/Makefile.inc + LIB = $(top_builddir)/lib LDADD = $(LIB)/libodp-dpdk.la $(LIB)/libodphelper.la $(DPDK_PMDS) AM_CFLAGS = \ diff --git a/helper/Makefile.am b/helper/Makefile.am index bf75b467..b34d0d5d 100644 --- a/helper/Makefile.am +++ b/helper/Makefile.am @@ -1,3 +1,5 @@ +include $(top_srcdir)/platform/@with_platform@/Makefile.inc + pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = $(top_builddir)/pkgconfig/libodphelper.pc
diff --git a/helper/test/Makefile.am b/helper/test/Makefile.am index f3db6b70..4747959f 100644 --- a/helper/test/Makefile.am +++ b/helper/test/Makefile.am @@ -1,3 +1,5 @@ +include $(top_srcdir)/platform/@with_platform@/Makefile.inc + LIB = $(top_builddir)/lib
#in the following line, the libs using the symbols should come before diff --git a/test/Makefile.inc b/test/Makefile.inc index a88e3f43..97453037 100644 --- a/test/Makefile.inc +++ b/test/Makefile.inc @@ -1,3 +1,5 @@ +include $(top_srcdir)/platform/@with_platform@/Makefile.inc + LIB = $(top_builddir)/lib
#in the following line, the libs using the symbols should come before
commit 7219ea695ab4e32be8738519b268eca02452ed85 Author: Matias Elo matias.elo@nokia.com Date: Wed Jan 31 14:14:01 2018 +0200
Port 5581eaa "configure: stop setting AM_* variables"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index f9b7c729..4cb948db 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -3,7 +3,7 @@ include $(top_srcdir)/platform/@with_platform@/Makefile.inc
AM_CFLAGS += $(DPDK_CFLAGS)
-AM_CPPFLAGS += -I$(srcdir)/include +AM_CPPFLAGS = -I$(srcdir)/include AM_CPPFLAGS += -I$(top_srcdir)/platform/linux-generic/include AM_CPPFLAGS += -I$(top_srcdir)/include AM_CPPFLAGS += -I$(top_srcdir)/include/odp/arch/@ARCH_ABI@ diff --git a/test/linux-dpdk/Makefile.inc b/test/linux-dpdk/Makefile.inc index f91540d2..7f1e2f2b 100644 --- a/test/linux-dpdk/Makefile.inc +++ b/test/linux-dpdk/Makefile.inc @@ -2,9 +2,9 @@ # build specific ODP applications, (i.e those whose do more than validation # test wrapping)
-AM_LDFLAGS += -static +AM_LDFLAGS = -static
-AM_CFLAGS += $(CUNIT_CFLAGS) +AM_CFLAGS = $(CUNIT_CFLAGS)
LIBCUNIT_COMMON = $(top_builddir)/test/common_plat/common/libcunit_common.la LIB = $(top_builddir)/lib
commit 7dda78c3698978afa6a97d50a8d9e8507d1a979b Author: Matias Elo matias.elo@nokia.com Date: Wed Jan 31 14:08:53 2018 +0200
Port 71e078e "build: use AM_CPPFLAGS to set include paths, rather than AM_CFLAGS"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index e332e6b4..f9b7c729 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -2,12 +2,14 @@ include $(top_srcdir)/platform/Makefile.inc include $(top_srcdir)/platform/@with_platform@/Makefile.inc
AM_CFLAGS += $(DPDK_CFLAGS) -AM_CFLAGS += -I$(srcdir)/include -AM_CFLAGS += -I$(top_srcdir)/platform/linux-generic/include -AM_CFLAGS += -I$(top_srcdir)/include/odp/arch/@ARCH_ABI@ -AM_CFLAGS += -I$(top_srcdir)/include -AM_CFLAGS += -I$(top_builddir)/include -AM_CFLAGS += -Iinclude + +AM_CPPFLAGS += -I$(srcdir)/include +AM_CPPFLAGS += -I$(top_srcdir)/platform/linux-generic/include +AM_CPPFLAGS += -I$(top_srcdir)/include +AM_CPPFLAGS += -I$(top_srcdir)/include/odp/arch/@ARCH_ABI@ +AM_CPPFLAGS += -I$(top_builddir)/include +AM_CPPFLAGS += -Iinclude +AM_CPPFLAGS += -I$(top_srcdir)/platform/$(with_platform)/arch/$(ARCH_DIR)
AM_CPPFLAGS += $(OPENSSL_CPPFLAGS) AM_CPPFLAGS += $(DPDK_CPPFLAGS)
commit ab83e5b637bfbd445e28e7c61c9983eee1b6b483 Author: Matias Elo matias.elo@nokia.com Date: Wed Jan 31 13:55:22 2018 +0200
Port 863f2ca "linux-gen: crypto: stop using RAND_pseudo_bytes()"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/odp_crypto.c b/platform/linux-dpdk/odp_crypto.c index 16ac24d3..466df88b 100644 --- a/platform/linux-dpdk/odp_crypto.c +++ b/platform/linux-dpdk/odp_crypto.c @@ -1216,9 +1216,6 @@ int32_t odp_random_data(uint8_t *buf, uint32_t len, odp_random_kind_t kind)
switch (kind) { case ODP_RANDOM_BASIC: - RAND_pseudo_bytes(buf, len); - return len; - case ODP_RANDOM_CRYPTO: rc = RAND_bytes(buf, len); return (1 == rc) ? (int)len /*success*/: -1 /*failure*/;
commit e09aa1f06048be2388a16ea2f3d923f78a9d86e9 Author: Matias Elo matias.elo@nokia.com Date: Wed Jan 31 13:52:12 2018 +0200
Port 120e914 "configure, travis: switch to pkg-config to locate CUnit"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/test/linux-dpdk/Makefile.inc b/test/linux-dpdk/Makefile.inc index baf6dadc..f91540d2 100644 --- a/test/linux-dpdk/Makefile.inc +++ b/test/linux-dpdk/Makefile.inc @@ -4,7 +4,7 @@
AM_LDFLAGS += -static
-AM_CPPFLAGS += $(CUNIT_CPPFLAGS) +AM_CFLAGS += $(CUNIT_CFLAGS)
LIBCUNIT_COMMON = $(top_builddir)/test/common_plat/common/libcunit_common.la LIB = $(top_builddir)/lib
commit de3cbb42dcf3fd115d6ff51888b3a405a583f99f Merge: b376cb54 f7c5f3e9 Author: Matias Elo matias.elo@nokia.com Date: Wed Jan 31 13:47:12 2018 +0200
Merge commit 'f7c5f3e973814e0fc9211e008a37080b1c7d4a76' of https://github.com/Linaro/odp into odp-dpdk
Signed-off-by: Matias Elo matias.elo@nokia.com
# Conflicts: # .travis.yml # example/Makefile.inc
diff --cc configure.ac index 3209682a,4af2c7c7..fa91bb4b --- a/configure.ac +++ b/configure.ac @@@ -362,11 -350,11 +356,11 @@@ esa ########################################################################## # Default include setup ########################################################################## - AM_CFLAGS="$AM_CFLAGS $ODP_CFLAGS" - AM_CXXFLAGS="-std=c++11" + CFLAGS="$CFLAGS $ODP_CFLAGS" + CXXFLAGS="$CXXFLAGS $ODP_CXXFLAGS"
AC_CONFIG_FILES([Makefile - pkgconfig/libodp-linux.pc + pkgconfig/libodp-dpdk.pc pkgconfig/libodphelper.pc ])
diff --cc example/Makefile.inc index 3a2c72d1,cba385b7..848c1b2e --- a/example/Makefile.inc +++ b/example/Makefile.inc @@@ -1,7 -1,6 +1,6 @@@ - include $(top_srcdir)/platform/@with_platform@/Makefile.inc LIB = $(top_builddir)/lib -LDADD = $(LIB)/libodp-linux.la $(LIB)/libodphelper.la $(DPDK_PMDS) +LDADD = $(LIB)/libodp-dpdk.la $(LIB)/libodphelper.la $(DPDK_PMDS) - AM_CFLAGS += \ + AM_CFLAGS = \ -I$(srcdir) \ -I$(top_srcdir)/example \ -I$(top_srcdir)/platform/@with_platform@/include \ diff --cc platform/Makefile.inc index 02d3c030,f6722560..8870452d --- a/platform/Makefile.inc +++ b/platform/Makefile.inc @@@ -1,21 -1,18 +1,18 @@@ LIB = $(top_builddir)/lib
pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = $(top_builddir)/pkgconfig/libodp-linux.pc +pkgconfig_DATA = $(top_builddir)/pkgconfig/libodp-dpdk.pc
-.PHONY: pkgconfig/libodp-linux.pc +.PHONY: pkgconfig/libodp-dpdk.pc
VPATH = $(srcdir) $(builddir) -lib_LTLIBRARIES = $(LIB)/libodp-linux.la +lib_LTLIBRARIES = $(LIB)/libodp-dpdk.la
- AM_LDFLAGS += -version-number '$(ODP_LIBSO_VERSION)' + AM_LDFLAGS = -version-number '$(ODP_LIBSO_VERSION)'
- AM_CFLAGS += "-DGIT_HASH=$(VERSION)" + AM_CFLAGS = "-DGIT_HASH=$(VERSION)" AM_CFLAGS += $(VISIBILITY_CFLAGS)
- #The implementation will need to retain the deprecated implementation - AM_CFLAGS += -Wno-deprecated-declarations - AM_CFLAGS += @PTHREAD_CFLAGS@
odpapispecincludedir= $(includedir)/odp/api/spec
commit b376cb54a146564dccf6a69ce3334b6807d2b132 Author: Matias Elo matias.elo@nokia.com Date: Wed Jan 31 10:48:36 2018 +0200
Port 0a7686e "linux-gen: use config.h header"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/odp_init.c b/platform/linux-dpdk/odp_init.c index 3c6f9230..96383b3c 100644 --- a/platform/linux-dpdk/odp_init.c +++ b/platform/linux-dpdk/odp_init.c @@ -4,6 +4,8 @@ * SPDX-License-Identifier: BSD-3-Clause */
+#include "config.h" + #include <odp_posix_extensions.h> #include <odp_packet_dpdk.h> #include <odp/api/init.h> diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index e34f6071..d9b1c7b4 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -4,6 +4,8 @@ * SPDX-License-Identifier: BSD-3-Clause */
+#include "config.h" + #include <odp/api/plat/packet_inlines.h> #include <odp/api/packet.h> #include <odp_packet_internal.h> diff --git a/platform/linux-dpdk/odp_packet_dpdk.c b/platform/linux-dpdk/odp_packet_dpdk.c index 4b8fda0e..e40332e2 100644 --- a/platform/linux-dpdk/odp_packet_dpdk.c +++ b/platform/linux-dpdk/odp_packet_dpdk.c @@ -4,6 +4,8 @@ * SPDX-License-Identifier: BSD-3-Clause */
+#include "config.h" + #include <odp_posix_extensions.h> #include <stdio.h> #include <errno.h> diff --git a/platform/linux-dpdk/odp_pool.c b/platform/linux-dpdk/odp_pool.c index 9569dd79..16f433fa 100644 --- a/platform/linux-dpdk/odp_pool.c +++ b/platform/linux-dpdk/odp_pool.c @@ -4,6 +4,8 @@ * SPDX-License-Identifier: BSD-3-Clause */
+#include "config.h" + #include <odp/api/std_types.h> #include <odp/api/pool.h> #include <odp_pool_internal.h>
commit 475b0981b2b65122036df3217095a228d5558c4e Author: Matias Elo matias.elo@nokia.com Date: Wed Jan 31 12:43:19 2018 +0200
linux-dpdk: add missing includes
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h index a25def0d..b8708021 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h @@ -22,6 +22,8 @@ extern "C" { #include <odp/api/packet_io.h> #include <odp/api/hints.h>
+/* Required by rte_mbuf.h */ +#include <sys/types.h> #include <rte_mbuf.h>
/** @internal Inline function offsets */ diff --git a/platform/linux-dpdk/odp_crypto.c b/platform/linux-dpdk/odp_crypto.c index ac8aee95..16ac24d3 100644 --- a/platform/linux-dpdk/odp_crypto.c +++ b/platform/linux-dpdk/odp_crypto.c @@ -4,6 +4,7 @@ * SPDX-License-Identifier: BSD-3-Clause */
+#include <odp_posix_extensions.h> #include <odp/api/crypto.h> #include <odp_internal.h> #include <odp/api/atomic.h> diff --git a/platform/linux-dpdk/odp_shared_memory.c b/platform/linux-dpdk/odp_shared_memory.c index 5af02f42..8cb2b72c 100644 --- a/platform/linux-dpdk/odp_shared_memory.c +++ b/platform/linux-dpdk/odp_shared_memory.c @@ -4,6 +4,7 @@ * SPDX-License-Identifier: BSD-3-Clause */
+#include <odp_posix_extensions.h> #include <odp_align_internal.h> #include <odp_config_internal.h> #include <odp/api/debug.h>
commit 29f72dbbee42d7471985637fbd0db9a8269985a0 Merge: 4bdb6874 60105f07 Author: Matias Elo matias.elo@nokia.com Date: Wed Jan 31 10:26:22 2018 +0200
Merge commit '60105f079350405920462a4b0d59c7e78d9a8492' of https://github.com/Linaro/odp into odp-dpdk
Signed-off-by: Matias Elo matias.elo@nokia.com
# Conflicts: # .travis.yml # configure.ac
diff --cc .travis.yml index 127ff9c3,245ade2a..64de6b85 --- a/.travis.yml +++ b/.travis.yml @@@ -10,8 -10,7 +10,9 @@@ language: c sudo: required dist: trusty + group: deprecated-2017Q2 +notifications: + email: false env: global: # COVERITY_SCAN_TOKEN diff --cc configure.ac index 2b14f04b,df0a0f61..3209682a --- a/configure.ac +++ b/configure.ac @@@ -174,30 -191,11 +175,31 @@@ m4_include([./test/m4/configure.m4] ########################################################################## AC_ARG_WITH([sdk-install-path], AC_HELP_STRING([--with-sdk-install-path=DIR path to external libs and headers], - [(or in the default path if not specified).]), -[SDK_INSTALL_PATH=$withval SDK_INSTALL_PATH_=1],[SDK_INSTALL_PATH_=]) + [(or in the default path if not specified).]), + [SDK_INSTALL_PATH=$withval SDK_INSTALL_PATH_=1 + DPDK_DEFAULT_DIR=0], + [DPDK_DEFAULT_DIR=1 SDK_INSTALL_PATH_=])
+AC_SUBST(DPDK_DEFAULT_DIR) AC_SUBST(SDK_INSTALL_PATH)
+########################################################################## +# Run platform specific checks and settings +########################################################################## +IMPLEMENTATION_NAME="" +if test "${with_platform}" = "linux-dpdk"; +then + m4_include([./platform/linux-dpdk/m4/configure.m4]) + m4_include([./test/linux-dpdk/m4/configure.m4]) + IMPLEMENTATION_NAME="odp-dpdk" +else + echo "UNSUPPORTED PLATFORM: ${with_platform}" + exit 1 +fi + - ODP_CFLAGS="$ODP_CFLAGS -DIMPLEMENTATION_NAME=$IMPLEMENTATION_NAME" ++AC_DEFINE_UNQUOTED([IMPLEMENTATION_NAME], ["$IMPLEMENTATION_NAME"], ++ [Define to the name of the implementation]) + ########################################################################## # Set the install directory for test binaries/scripts ########################################################################## @@@ -213,16 -211,8 +215,9 @@@ AM_CONDITIONAL([test_installdir], [tes ########################################################################## # Set conditionals as computed within platform specific files ########################################################################## +AM_CONDITIONAL([DPDK_DEFAULT_DIR], [test "x${DPDK_DEFAULT_DIR}" = "x1"]) AM_CONDITIONAL([SDK_INSTALL_PATH_], [test "x${SDK_INSTALL_PATH_}" = "x1"]) - AM_CONDITIONAL([test_installdir], [test "$testdir" != ""]) AM_CONDITIONAL([cunit_support], [test x$cunit_support = xyes ]) - AM_CONDITIONAL([test_vald], [test x$test_vald = xyes ]) - AM_CONDITIONAL([test_perf], [test x$test_perf = xyes ]) - AM_CONDITIONAL([test_perf_proc], [test x$test_perf_proc = xyes ]) - AM_CONDITIONAL([test_cpp], [test x$test_cpp = xyes ]) - AM_CONDITIONAL([test_helper], [test x$test_helper = xyes ]) - AM_CONDITIONAL([test_example], [test x$test_example = xyes ]) AM_CONDITIONAL([HAVE_DOXYGEN], [test "x${DOXYGEN}" = "xdoxygen"]) AM_CONDITIONAL([user_guide], [test "x${user_guides}" = "xyes" ]) AM_CONDITIONAL([HAVE_MSCGEN], [test "x${MSCGEN}" = "xmscgen"]) @@@ -315,11 -303,7 +308,8 @@@ AC_SUBST(ODP_DEPRECATED_API ########################################################################## # Default warning setup ########################################################################## - ODP_CFLAGS="$ODP_CFLAGS -W -Wall -Werror -Wstrict-prototypes -Wmissing-prototypes" - ODP_CFLAGS="$ODP_CFLAGS -Wmissing-declarations -Wold-style-definition -Wpointer-arith" - ODP_CFLAGS="$ODP_CFLAGS -Wcast-align -Wnested-externs -Wcast-qual -Wformat-nonliteral" - ODP_CFLAGS="$ODP_CFLAGS -Wformat-security -Wundef -Wwrite-strings" - ODP_CFLAGS="$ODP_CFLAGS -std=gnu99" + ODP_CFLAGS="$ODP_CFLAGS -W -Wall -Werror" ++ODP_CFLAGS="$ODP_CFLAGS -std=c99"
dnl Use -Werror in the checks below since Clang emits a warning instead of dnl an error when it encounters an unknown warning option.
commit 4bdb68742385cbf2439b08398bbcdadec5120ad2 Author: Matias Elo matias.elo@nokia.com Date: Wed Jan 31 10:09:20 2018 +0200
Port 03aa7c3 linux-gen: pktio: mark pktio_tbl as static
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/odp_packet_dpdk.c b/platform/linux-dpdk/odp_packet_dpdk.c index 774fa31d..4b8fda0e 100644 --- a/platform/linux-dpdk/odp_packet_dpdk.c +++ b/platform/linux-dpdk/odp_packet_dpdk.c @@ -42,7 +42,7 @@ const pktio_if_ops_t * const pktio_if_ops[] = { NULL };
-extern pktio_table_t *pktio_tbl; +extern void *pktio_entry_ptr[ODP_CONFIG_PKTIO_ENTRIES];
static uint32_t mtu_get_pkt_dpdk(pktio_entry_t *pktio_entry);
@@ -318,7 +318,7 @@ static void _odp_pktio_send_completion(pktio_entry_t *pktio_entry) send_pkt_dpdk(pktio_entry, j, &dummy, 0);
for (i = 0; i < ODP_CONFIG_PKTIO_ENTRIES; ++i) { - pktio_entry_t *entry = &pktio_tbl->entries[i]; + pktio_entry_t *entry = pktio_entry_ptr[i];
if (rte_mempool_avail_count(rte_mempool) != 0) return;
commit 4e156391d677340ae095f7e04cf4d22c3531f60b Merge: 47d2af14 68bc4b3b Author: Maxim Uvarov maxim.uvarov@linaro.org Date: Wed Jan 31 10:07:40 2018 +0300
Merge remote-tracking branch 'git.linaro.org/lng/odp-dpdk/master'
commit 1bc9df16d7d7af19c127a7e8fdf94fecdccde1c0 Author: Matias Elo matias.elo@nokia.com Date: Tue Jan 30 17:21:04 2018 +0200
Port dca4f5b "linux-gen: pktio: drop/staticize leftovers from single queue shim"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/include/odp_packet_io_internal.h b/platform/linux-dpdk/include/odp_packet_io_internal.h index b77b2bbc..17ca1297 100644 --- a/platform/linux-dpdk/include/odp_packet_io_internal.h +++ b/platform/linux-dpdk/include/odp_packet_io_internal.h @@ -192,19 +192,6 @@ static inline void pktio_cls_enabled_set(pktio_entry_t *entry, int ena) entry->s.cls_enabled = ena; }
-/* - * Dummy single queue implementations of multi-queue API - */ -int single_capability(odp_pktio_capability_t *capa); -int single_input_queues_config(pktio_entry_t *entry, - const odp_pktin_queue_param_t *param); -int single_output_queues_config(pktio_entry_t *entry, - const odp_pktout_queue_param_t *param); -int single_recv_queue(pktio_entry_t *entry, int index, odp_packet_t packets[], - int num); -int single_send_queue(pktio_entry_t *entry, int index, - const odp_packet_t packets[], int num); - extern const pktio_if_ops_t loopback_pktio_ops; extern const pktio_if_ops_t dpdk_pktio_ops; extern const pktio_if_ops_t * const pktio_if_ops[];
commit 2a180cde62ec990653d6096f1c2dad05ae9ef776 Merge: 35896c42 8705e548 Author: Matias Elo matias.elo@nokia.com Date: Tue Jan 30 17:13:40 2018 +0200
Merge commit '8705e548f330d23173283fcca62f4afb835a6380' of https://github.com/Linaro/odp into odp-dpdk
Signed-off-by: Matias Elo matias.elo@nokia.com
# Conflicts: # .travis.yml
commit 35896c42d29838a8767d7a1fbb396e305c14cdbc Author: Matias Elo matias.elo@nokia.com Date: Tue Jan 30 14:02:12 2018 +0200
Port a4afaf9 "linux-generic: packet: restructure inline routines to use macros"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_flag_inlines.h b/platform/linux-dpdk/include/odp/api/plat/packet_flag_inlines.h index fef6ff97..285b943f 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_flag_inlines.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_flag_inlines.h @@ -21,8 +21,7 @@ extern const _odp_packet_inline_offset_t _odp_packet_inline; /** @internal Inline function @param pkt @return */ static inline uint64_t _odp_packet_input_flags(odp_packet_t pkt) { - return *(uint64_t *)(uintptr_t)((uint8_t *)pkt + - _odp_packet_inline.input_flags); + return _odp_pkt_get(pkt, uint64_t, input_flags); }
/** @internal Inline function @param pkt @return */ @@ -55,15 +54,16 @@ static inline int _odp_packet_has_jumbo(odp_packet_t pkt) /** @internal Inline function @param pkt @return */ static inline int _odp_packet_has_flow_hash(odp_packet_t pkt) { - return *(uint64_t *)((char *)pkt + _odp_packet_inline.ol_flags) & - _odp_packet_inline.rss_flag; + return _odp_pkt_get(pkt, uint64_t, ol_flags) & + _odp_packet_inline.rss_flag; }
/** @internal Inline function @param pkt */ static inline void _odp_packet_has_flow_hash_clr(odp_packet_t pkt) { - *(uint64_t *)((char *)pkt + _odp_packet_inline.ol_flags) &= - ~_odp_packet_inline.rss_flag; + uint64_t *ol_flags = &_odp_pkt_get(pkt, uint64_t, ol_flags); + + *ol_flags &= ~_odp_packet_inline.rss_flag; }
/** @internal Inline function @param pkt @return */ diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h index 93102974..a25def0d 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_inlines.h @@ -30,40 +30,34 @@ extern const _odp_packet_inline_offset_t _odp_packet_inline; /** @internal Inline function @param pkt @return */ static inline void *_odp_packet_data(odp_packet_t pkt) { - char **buf_addr = (char **)(void *)((char *)pkt + - _odp_packet_inline.buf_addr); - uint16_t data_off = *(uint16_t *)(void *)((char *)pkt + - _odp_packet_inline.data); + uint8_t *buf_addr = (uint8_t *)_odp_pkt_get(pkt, void *, buf_addr); + uint16_t data_off = _odp_pkt_get(pkt, uint16_t, data);
- return (void *)(*buf_addr + data_off); + return (void *)(buf_addr + data_off); }
/** @internal Inline function @param pkt @return */ static inline uint32_t _odp_packet_seg_len(odp_packet_t pkt) { - return *(uint16_t *)(void *)((char *)pkt + _odp_packet_inline.seg_len); + return _odp_pkt_get(pkt, uint16_t, seg_len); }
/** @internal Inline function @param pkt @return */ static inline uint32_t _odp_packet_len(odp_packet_t pkt) { - return *(uint32_t *)(void *)((char *)pkt + _odp_packet_inline.pkt_len); + return _odp_pkt_get(pkt, uint32_t, pkt_len); }
/** @internal Inline function @param pkt @return */ static inline uint32_t _odp_packet_headroom(odp_packet_t pkt) { - struct rte_mbuf *mb = (struct rte_mbuf *)((uint8_t *)pkt + - _odp_packet_inline.mb); - - return rte_pktmbuf_headroom(mb); + return rte_pktmbuf_headroom(&_odp_pkt_get(pkt, struct rte_mbuf, mb)); }
/** @internal Inline function @param pkt @return */ static inline uint32_t _odp_packet_tailroom(odp_packet_t pkt) { - struct rte_mbuf *mb = (struct rte_mbuf *)((uint8_t *)pkt + - _odp_packet_inline.mb); + struct rte_mbuf *mb = &_odp_pkt_get(pkt, struct rte_mbuf, mb);
return rte_pktmbuf_tailroom(rte_pktmbuf_lastseg(mb)); } @@ -71,29 +65,25 @@ static inline uint32_t _odp_packet_tailroom(odp_packet_t pkt) /** @internal Inline function @param pkt @return */ static inline odp_pool_t _odp_packet_pool(odp_packet_t pkt) { - return *(odp_pool_t *)(uintptr_t)((uint8_t *)pkt + - _odp_packet_inline.pool); + return _odp_pkt_get(pkt, odp_pool_t, pool); }
/** @internal Inline function @param pkt @return */ static inline odp_pktio_t _odp_packet_input(odp_packet_t pkt) { - return *(odp_pktio_t *)(uintptr_t)((uint8_t *)pkt + - _odp_packet_inline.input); + return _odp_pkt_get(pkt, odp_pktio_t, input); }
/** @internal Inline function @param pkt @return */ static inline int _odp_packet_num_segs(odp_packet_t pkt) { - return *(uint8_t *)(uintptr_t)((uint8_t *)pkt + - _odp_packet_inline.nb_segs); + return _odp_pkt_get(pkt, uint8_t, nb_segs); }
/** @internal Inline function @param pkt @return */ static inline void *_odp_packet_user_ptr(odp_packet_t pkt) { - return *(void **)(uintptr_t)((uint8_t *)pkt + - _odp_packet_inline.user_ptr); + return _odp_pkt_get(pkt, void *, user_ptr); }
/** @internal Inline function @param pkt @return */ @@ -105,30 +95,29 @@ static inline void *_odp_packet_user_area(odp_packet_t pkt) /** @internal Inline function @param pkt @return */ static inline uint32_t _odp_packet_user_area_size(odp_packet_t pkt) { - return *(uint32_t *)(void *)((char *)pkt + - _odp_packet_inline.udata_len); + return _odp_pkt_get(pkt, uint32_t, udata_len); }
/** @internal Inline function @param pkt @return */ static inline uint32_t _odp_packet_flow_hash(odp_packet_t pkt) { - return *(uint32_t *)(void *)((char *)pkt + _odp_packet_inline.rss); + return _odp_pkt_get(pkt, uint32_t, rss); }
/** @internal Inline function @param pkt @param flow_hash */ static inline void _odp_packet_flow_hash_set(odp_packet_t pkt, uint32_t flow_hash) { - *(uint32_t *)(void *)((char *)pkt + _odp_packet_inline.rss) - = flow_hash; - *(uint64_t *)(void *)((char *)pkt + _odp_packet_inline.ol_flags) - |= _odp_packet_inline.rss_flag; + uint32_t *rss = &_odp_pkt_get(pkt, uint32_t, rss); + uint64_t *ol_flags = &_odp_pkt_get(pkt, uint64_t, ol_flags); + + *rss = flow_hash; + *ol_flags |= _odp_packet_inline.rss_flag; }
/** @internal Inline function @param pkt @return */ static inline odp_time_t _odp_packet_ts(odp_packet_t pkt) { - return *(odp_time_t *)(uintptr_t)((uint8_t *)pkt + - _odp_packet_inline.timestamp); + return _odp_pkt_get(pkt, odp_time_t, timestamp); }
/** @internal Inline function @param pkt @return */ @@ -140,8 +129,9 @@ static inline void *_odp_packet_head(odp_packet_t pkt) /** @internal Inline function @param pkt @return */ static inline int _odp_packet_is_segmented(odp_packet_t pkt) { - return !rte_pktmbuf_is_contiguous((struct rte_mbuf *)((uint8_t *)pkt + - _odp_packet_inline.mb)); + struct rte_mbuf *mb = &_odp_pkt_get(pkt, struct rte_mbuf, mb); + + return !rte_pktmbuf_is_contiguous(mb); }
/** @internal Inline function @param pkt @return */ @@ -153,8 +143,7 @@ static inline odp_packet_seg_t _odp_packet_first_seg(odp_packet_t pkt) /** @internal Inline function @param pkt @return */ static inline odp_packet_seg_t _odp_packet_last_seg(odp_packet_t pkt) { - struct rte_mbuf *mb = (struct rte_mbuf *)((uint8_t *)pkt + - _odp_packet_inline.mb); + struct rte_mbuf *mb = &_odp_pkt_get(pkt, struct rte_mbuf, mb);
return (odp_packet_seg_t)(uintptr_t)rte_pktmbuf_lastseg(mb); } diff --git a/platform/linux-dpdk/include/odp/api/plat/packet_types.h b/platform/linux-dpdk/include/odp/api/plat/packet_types.h index 5df0a41e..4e2a7b48 100644 --- a/platform/linux-dpdk/include/odp/api/plat/packet_types.h +++ b/platform/linux-dpdk/include/odp/api/plat/packet_types.h @@ -57,6 +57,10 @@ typedef enum {
#endif
+/** @internal Packet field accessor */ +#define _odp_pkt_get(pkt, cast, field) \ + (*(cast *)(uintptr_t)((uint8_t *)pkt + _odp_packet_inline.field)) + /** @internal Packet header field offsets for inline functions */ typedef struct _odp_packet_inline_offset_t { /** @internal field offset */ @@ -72,24 +76,24 @@ typedef struct _odp_packet_inline_offset_t { /** @internal field offset */ size_t input_flags; /** @internal field offset */ - unsigned int buf_addr; - /** @internal field offset */ - unsigned int data; - /** @internal field offset */ - unsigned int pkt_len; + size_t buf_addr; /** @internal field offset */ - unsigned int seg_len; + size_t data; /** @internal field offset */ - unsigned int nb_segs; + size_t pkt_len; /** @internal field offset */ - unsigned int udata_len; + size_t seg_len; /** @internal field offset */ - unsigned int udata; + size_t nb_segs; /** @internal field offset */ - unsigned int rss; + size_t udata_len; + /** @internal offset */ + size_t udata; /** @internal field offset */ - unsigned int ol_flags; + size_t rss; /** @internal field offset */ + size_t ol_flags; + /** @internal rss hash result set */ uint64_t rss_flag;
} _odp_packet_inline_offset_t; diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index da670bb5..e34f6071 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -32,22 +32,15 @@ const _odp_packet_inline_offset_t _odp_packet_inline ODP_ALIGNED_CACHE = { .user_ptr = offsetof(odp_packet_hdr_t, buf_hdr.buf_ctx), .timestamp = offsetof(odp_packet_hdr_t, timestamp), .input_flags = offsetof(odp_packet_hdr_t, p.input_flags), - .buf_addr = offsetof(odp_packet_hdr_t, buf_hdr.mb) + - offsetof(const struct rte_mbuf, buf_addr), - .data = offsetof(odp_packet_hdr_t, buf_hdr.mb) + - offsetof(struct rte_mbuf, data_off), - .pkt_len = offsetof(odp_packet_hdr_t, buf_hdr.mb) + - (size_t)&rte_pktmbuf_pkt_len((struct rte_mbuf *)0), - .seg_len = offsetof(odp_packet_hdr_t, buf_hdr.mb) + - (size_t)&rte_pktmbuf_data_len((struct rte_mbuf *)0), - .nb_segs = offsetof(odp_packet_hdr_t, buf_hdr.mb) + - offsetof(struct rte_mbuf, nb_segs), + .buf_addr = offsetof(odp_packet_hdr_t, buf_hdr.mb.buf_addr), + .data = offsetof(odp_packet_hdr_t, buf_hdr.mb.data_off), + .pkt_len = offsetof(odp_packet_hdr_t, buf_hdr.mb.pkt_len), + .seg_len = offsetof(odp_packet_hdr_t, buf_hdr.mb.data_len), + .nb_segs = offsetof(odp_packet_hdr_t, buf_hdr.mb.nb_segs), .udata_len = offsetof(odp_packet_hdr_t, uarea_size), .udata = sizeof(odp_packet_hdr_t), - .rss = offsetof(odp_packet_hdr_t, buf_hdr.mb) + - offsetof(struct rte_mbuf, hash.rss), - .ol_flags = offsetof(odp_packet_hdr_t, buf_hdr.mb) + - offsetof(struct rte_mbuf, ol_flags), + .rss = offsetof(odp_packet_hdr_t, buf_hdr.mb.hash.rss), + .ol_flags = offsetof(odp_packet_hdr_t, buf_hdr.mb.ol_flags), .rss_flag = PKT_RX_RSS_HASH };
commit 675c5532ad3ca6d143d67de13f348775b22ccdfc Merge: 866ba5c9 2050915d Author: Matias Elo matias.elo@nokia.com Date: Tue Jan 30 12:56:44 2018 +0200
Merge commit '2050915d34995f4be695a88dd99e9275f346733b' of https://github.com/Linaro/odp into odp-dpdk
Signed-off-by: Matias Elo matias.elo@nokia.com
# Conflicts: # .travis.yml
commit 866ba5c95ec60bd1bda90d5700bb95ec66dae841 Author: Matias Elo matias.elo@nokia.com Date: Tue Jan 30 10:00:29 2018 +0200
Port c444e19 "linux-gen: fdserver: fix fdserver work if ODP_SHM_DIR is exported"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/odp_init.c b/platform/linux-dpdk/odp_init.c index d0685661..3c6f9230 100644 --- a/platform/linux-dpdk/odp_init.c +++ b/platform/linux-dpdk/odp_init.c @@ -348,14 +348,15 @@ int _odp_term_global(enum init_stage stage) } /* Fall through */
+ /* Needed to prevent compiler warning */ + case FDSERVER_INIT: case ISHM_INIT: if (_odp_shm_term_global()) { ODP_ERR("ODP shm term failed.\n"); rc = -1; } /* Fall through */ - /* Needed to prevent compiler warning */ - case FDSERVER_INIT: + case SYSINFO_INIT: if (odp_system_info_term()) { ODP_ERR("ODP system info term failed.\n");
commit 28e9406621d7b84511105156b664f295ed9273b6 Author: Matias Elo matias.elo@nokia.com Date: Mon Jan 29 17:45:46 2018 +0200
Port 43bfbbf "linux-gen: packet: increase default headroom"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/include/odp_config_internal.h b/platform/linux-dpdk/include/odp_config_internal.h index 2adc9081..65f1eac6 100644 --- a/platform/linux-dpdk/include/odp_config_internal.h +++ b/platform/linux-dpdk/include/odp_config_internal.h @@ -55,9 +55,9 @@ extern "C" { * allocated packets. Implementations may reserve a larger than minimum headroom * size e.g. due to HW or a protocol specific alignment requirement. * - * @internal In odp-linux implementation: - * The default value (66) allows a 1500-byte packet to be received into a single - * segment with Ethernet offset alignment and room for some header expansion. + * @internal In odp-dpdk implementation: + * The default value (128) allows a 1500-byte packet to be received into a + * single segment with room for some header expansion. */ #define CONFIG_PACKET_HEADROOM 128
commit 6b9151cd205f8c0f6dd8ad1b40173359b4333d9b Author: Matias Elo matias.elo@nokia.com Date: Mon Jan 29 16:53:58 2018 +0200
Port 77f1b67 "linux-gen: queue: avoid extra conversions"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/include/odp_buffer_inlines.h b/platform/linux-dpdk/include/odp_buffer_inlines.h index 2179ec9e..c28528bb 100644 --- a/platform/linux-dpdk/include/odp_buffer_inlines.h +++ b/platform/linux-dpdk/include/odp_buffer_inlines.h @@ -24,11 +24,6 @@ static inline odp_buffer_t buf_from_buf_hdr(odp_buffer_hdr_t *hdr) return (odp_buffer_t)hdr; }
-static inline odp_event_t event_from_buf_hdr(odp_buffer_hdr_t *hdr) -{ - return (odp_event_t)hdr; -} - static inline odp_buffer_hdr_t *buf_hdl_to_hdr(odp_buffer_t buf) { return (odp_buffer_hdr_t *)(uintptr_t)buf;
commit d494b27ffa13a92638b15480b5d26b3ca28ccb6b Author: Matias Elo matias.elo@nokia.com Date: Mon Jan 29 16:12:53 2018 +0200
Port dcea50f "linux-gen: buffer: change buffer handle to pointer"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/include/odp/api/plat/buffer_types.h b/platform/linux-dpdk/include/odp/api/plat/buffer_types.h index 809768f3..8b79bb52 100644 --- a/platform/linux-dpdk/include/odp/api/plat/buffer_types.h +++ b/platform/linux-dpdk/include/odp/api/plat/buffer_types.h @@ -31,11 +31,7 @@ extern "C" {
typedef ODP_HANDLE_T(odp_buffer_t);
-#define ODP_BUFFER_INVALID _odp_cast_scalar(odp_buffer_t, 0xffffffff) - -typedef ODP_HANDLE_T(odp_buffer_seg_t); - -#define ODP_SEGMENT_INVALID ((odp_buffer_seg_t)ODP_BUFFER_INVALID) +#define ODP_BUFFER_INVALID _odp_cast_scalar(odp_buffer_t, NULL)
/** * @} diff --git a/platform/linux-dpdk/include/odp/api/plat/event_types.h b/platform/linux-dpdk/include/odp/api/plat/event_types.h index 086e83d5..b6349c69 100644 --- a/platform/linux-dpdk/include/odp/api/plat/event_types.h +++ b/platform/linux-dpdk/include/odp/api/plat/event_types.h @@ -32,7 +32,7 @@ extern "C" {
typedef ODP_HANDLE_T(odp_event_t);
-#define ODP_EVENT_INVALID _odp_cast_scalar(odp_event_t, 0xffffffff) +#define ODP_EVENT_INVALID _odp_cast_scalar(odp_event_t, NULL)
/** * Event types diff --git a/platform/linux-dpdk/include/odp/api/plat/timer_types.h b/platform/linux-dpdk/include/odp/api/plat/timer_types.h index 8821bed6..a8891f11 100644 --- a/platform/linux-dpdk/include/odp/api/plat/timer_types.h +++ b/platform/linux-dpdk/include/odp/api/plat/timer_types.h @@ -38,7 +38,7 @@ typedef ODP_HANDLE_T(odp_timer_t);
typedef ODP_HANDLE_T(odp_timeout_t);
-#define ODP_TIMEOUT_INVALID _odp_cast_scalar(odp_timeout_t, 0xffffffff) +#define ODP_TIMEOUT_INVALID _odp_cast_scalar(odp_timeout_t, NULL)
/** * @} diff --git a/platform/linux-dpdk/include/odp_buffer_inlines.h b/platform/linux-dpdk/include/odp_buffer_inlines.h index c481390b..2179ec9e 100644 --- a/platform/linux-dpdk/include/odp_buffer_inlines.h +++ b/platform/linux-dpdk/include/odp_buffer_inlines.h @@ -19,14 +19,19 @@ extern "C" {
#include <odp_buffer_internal.h>
-static inline odp_buffer_t odp_hdr_to_buf(odp_buffer_hdr_t *hdr) +static inline odp_buffer_t buf_from_buf_hdr(odp_buffer_hdr_t *hdr) { return (odp_buffer_t)hdr; }
+static inline odp_event_t event_from_buf_hdr(odp_buffer_hdr_t *hdr) +{ + return (odp_event_t)hdr; +} + static inline odp_buffer_hdr_t *buf_hdl_to_hdr(odp_buffer_t buf) { - return (odp_buffer_hdr_t *)(void *)buf; + return (odp_buffer_hdr_t *)(uintptr_t)buf; }
static inline odp_event_type_t _odp_buffer_event_type(odp_buffer_t buf) diff --git a/platform/linux-dpdk/include/odp_buffer_internal.h b/platform/linux-dpdk/include/odp_buffer_internal.h index b33a30da..9e3d4bd2 100644 --- a/platform/linux-dpdk/include/odp_buffer_internal.h +++ b/platform/linux-dpdk/include/odp_buffer_internal.h @@ -43,17 +43,13 @@ ODP_STATIC_ASSERT(CONFIG_PACKET_SEG_LEN_MIN >= 256, ODP_STATIC_ASSERT(CONFIG_PACKET_MAX_SEGS < 256, "Maximum of 255 segments supported");
-typedef union odp_buffer_bits_t { - odp_buffer_t handle; -} odp_buffer_bits_t; - #define BUFFER_BURST_SIZE CONFIG_BURST_SIZE
struct odp_buffer_hdr_t { /* Underlying DPDK rte_mbuf */ struct rte_mbuf mb; - /* Handle union */ - odp_buffer_bits_t handle; + /* Buffer index in the pool */ + uint32_t index;
/* ODP buffer type, not DPDK buf type */ int type; @@ -78,13 +74,15 @@ struct odp_buffer_hdr_t { /* Burst table */ struct odp_buffer_hdr_t *burst[BUFFER_BURST_SIZE];
- /* Pool handle */ + /* Pool handle: will be removed, used only for odp_packet_pool() + * inlining */ odp_pool_t pool_hdl;
+ /* Pool pointer */ + void *pool_ptr; + /* Total size of all allocated segs */ uint32_t totsize; - /* Index in the rte_mempool */ - uint32_t index; };
ODP_STATIC_ASSERT(BUFFER_BURST_SIZE < 256, "BUFFER_BURST_SIZE_TOO_LARGE"); diff --git a/platform/linux-dpdk/include/odp_packet_internal.h b/platform/linux-dpdk/include/odp_packet_internal.h index 69563fc9..f8f00521 100644 --- a/platform/linux-dpdk/include/odp_packet_internal.h +++ b/platform/linux-dpdk/include/odp_packet_internal.h @@ -200,11 +200,8 @@ static inline void packet_parse_reset(odp_packet_hdr_t *pkt_hdr) pkt_hdr->p.l4_offset = ODP_PACKET_OFFSET_INVALID; }
-/* Convert a packet handle to a buffer handle */ -odp_buffer_t _odp_packet_to_buffer(odp_packet_t pkt); - /* Convert a buffer handle to a packet handle */ -odp_packet_t _odp_packet_from_buffer(odp_buffer_t buf); +odp_packet_t _odp_packet_from_buf_hdr(odp_buffer_hdr_t *buf_hdr);
static inline int packet_hdr_has_l2(odp_packet_hdr_t *pkt_hdr) { diff --git a/platform/linux-dpdk/include/odp_pool_internal.h b/platform/linux-dpdk/include/odp_pool_internal.h index 0c157592..e666653f 100644 --- a/platform/linux-dpdk/include/odp_pool_internal.h +++ b/platform/linux-dpdk/include/odp_pool_internal.h @@ -46,8 +46,7 @@ extern "C" { #include <odp/api/spinlock.h> #endif
- -struct pool_entry_s { +typedef struct ODP_ALIGNED_CACHE { #ifdef POOL_USE_TICKETLOCK odp_ticketlock_t lock ODP_ALIGNED_CACHE; #else @@ -57,35 +56,24 @@ struct pool_entry_s { odp_pool_param_t params; odp_pool_t pool_hdl; struct rte_mempool *rte_mempool; -}; - -typedef union pool_entry_u { - struct pool_entry_s s; - - uint8_t pad[ROUNDUP_CACHE_LINE(sizeof(struct pool_entry_s))]; - -} pool_entry_t;
-extern void *pool_entry_ptr[]; +} pool_t;
-static inline uint32_t pool_handle_to_index(odp_pool_t pool_hdl) -{ - return _odp_typeval(pool_hdl); -} +typedef struct pool_table_t { + pool_t pool[ODP_CONFIG_POOLS]; + odp_shm_t shm; +} pool_table_t;
-static inline void *get_pool_entry(uint32_t pool_id) -{ - return pool_entry_ptr[pool_id]; -} +extern pool_table_t *pool_tbl;
-static inline pool_entry_t *odp_pool_to_entry(odp_pool_t pool) +static inline pool_t *pool_entry(uint32_t pool_idx) { - return (pool_entry_t *)get_pool_entry(pool_handle_to_index(pool)); + return &pool_tbl->pool[pool_idx]; }
-static inline odp_pool_t pool_index_to_handle(uint32_t pool_id) +static inline pool_t *pool_entry_from_hdl(odp_pool_t pool_hdl) { - return _odp_cast_scalar(odp_pool_t, pool_id); + return &pool_tbl->pool[_odp_typeval(pool_hdl)]; }
#ifdef __cplusplus diff --git a/platform/linux-dpdk/odp_buffer.c b/platform/linux-dpdk/odp_buffer.c index 5207f253..7553fcfc 100644 --- a/platform/linux-dpdk/odp_buffer.c +++ b/platform/linux-dpdk/odp_buffer.c @@ -8,6 +8,7 @@ #include <odp_buffer_internal.h> #include <odp_buffer_inlines.h> #include <odp_debug_internal.h> +#include <odp_pool_internal.h>
#include <string.h> #include <stdio.h> @@ -62,6 +63,7 @@ int odp_buffer_is_valid(odp_buffer_t buf) int odp_buffer_snprint(char *str, uint32_t n, odp_buffer_t buf) { odp_buffer_hdr_t *hdr; + pool_t *pool; int len = 0;
if (!odp_buffer_is_valid(buf)) { @@ -70,11 +72,13 @@ int odp_buffer_snprint(char *str, uint32_t n, odp_buffer_t buf) }
hdr = buf_hdl_to_hdr(buf); + pool = hdr->pool_ptr;
len += snprintf(&str[len], n-len, "Buffer\n"); len += snprintf(&str[len], n-len, - " pool %p\n", hdr->mb.pool); + " pool %" PRIu64 "\n", + odp_pool_to_u64(pool->pool_hdl)); len += snprintf(&str[len], n-len, " phy_addr %"PRIu64"\n", hdr->mb.buf_physaddr); len += snprintf(&str[len], n-len, diff --git a/platform/linux-dpdk/odp_packet.c b/platform/linux-dpdk/odp_packet.c index 0d05e23f..da670bb5 100644 --- a/platform/linux-dpdk/odp_packet.c +++ b/platform/linux-dpdk/odp_packet.c @@ -73,7 +73,7 @@ ODP_STATIC_ASSERT(sizeof(dummy.ol_flags) == sizeof(uint64_t),
static inline odp_buffer_t buffer_handle(odp_packet_hdr_t *pkt_hdr) { - return pkt_hdr->buf_hdr.handle.handle; + return (odp_buffer_t)pkt_hdr; }
static inline odp_packet_hdr_t *buf_to_packet_hdr(odp_buffer_t buf) @@ -81,17 +81,27 @@ static inline odp_packet_hdr_t *buf_to_packet_hdr(odp_buffer_t buf) return (odp_packet_hdr_t *)buf_hdl_to_hdr(buf); }
-static odp_packet_t packet_alloc(pool_entry_t* pool, uint32_t len) +odp_packet_t _odp_packet_from_buf_hdr(odp_buffer_hdr_t *buf_hdr) +{ + return (odp_packet_t)buf_hdr; +} + +static inline odp_buffer_t packet_to_buffer(odp_packet_t pkt) +{ + return (odp_buffer_t)pkt; +} + +static odp_packet_t packet_alloc(pool_t *pool, uint32_t len) { odp_packet_t pkt; uintmax_t totsize = RTE_PKTMBUF_HEADROOM + len; odp_packet_hdr_t *pkt_hdr; struct rte_mbuf *mbuf;
- if (pool->s.params.type != ODP_POOL_PACKET) + if (pool->params.type != ODP_POOL_PACKET) return ODP_PACKET_INVALID;
- mbuf = rte_pktmbuf_alloc(pool->s.rte_mempool); + mbuf = rte_pktmbuf_alloc(pool->rte_mempool); if (mbuf == NULL) { rte_errno = ENOMEM; return ODP_PACKET_INVALID; @@ -105,7 +115,7 @@ static odp_packet_t packet_alloc(pool_entry_t* pool, uint32_t len)
do { struct rte_mbuf *nextseg = - rte_pktmbuf_alloc(pool->s.rte_mempool); + rte_pktmbuf_alloc(pool->rte_mempool);
if (nextseg == NULL) { rte_pktmbuf_free(mbuf); @@ -130,7 +140,7 @@ static odp_packet_t packet_alloc(pool_entry_t* pool, uint32_t len)
odp_packet_t odp_packet_alloc(odp_pool_t pool_hdl, uint32_t len) { - pool_entry_t *pool = odp_pool_to_entry(pool_hdl); + pool_t *pool = pool_entry_from_hdl(pool_hdl);
return packet_alloc(pool, len); } @@ -139,7 +149,7 @@ int odp_packet_alloc_multi(odp_pool_t pool_hdl, uint32_t len, odp_packet_t pkt[], int num) { int i; - pool_entry_t *pool = odp_pool_to_entry(pool_hdl); + pool_t *pool = pool_entry_from_hdl(pool_hdl);
for (i = 0; i < num; i++) { pkt[i] = packet_alloc(pool, len); @@ -217,22 +227,6 @@ int odp_packet_reset(odp_packet_t pkt, uint32_t len) return 0; }
-odp_packet_t _odp_packet_from_buffer(odp_buffer_t buf) -{ - if (odp_unlikely(buf == ODP_BUFFER_INVALID)) - return ODP_PACKET_INVALID; - - return (odp_packet_t)buf_to_packet_hdr(buf); -} - -odp_buffer_t _odp_packet_to_buffer(odp_packet_t pkt) -{ - if (odp_unlikely(pkt == ODP_PACKET_INVALID)) - return ODP_BUFFER_INVALID; - - return buffer_handle(odp_packet_hdr(pkt)); -} - odp_packet_t odp_packet_from_event(odp_event_t ev) { if (odp_unlikely(ev == ODP_EVENT_INVALID)) @@ -285,8 +279,6 @@ static void _copy_head_metadata(struct rte_mbuf *newhead, memcpy(&newhead->tx_offload, &oldhead->tx_offload, sizeof(odp_packet_hdr_t) - offsetof(struct rte_mbuf, tx_offload)); - odp_packet_hdr(pkt)->buf_hdr.handle.handle = - (odp_buffer_t)newhead; odp_packet_hdr(pkt)->buf_hdr.index = saved_index; }
@@ -689,12 +681,13 @@ int odp_packet_add_data(odp_packet_t *pkt_ptr, uint32_t offset, uint32_t len) odp_packet_t pkt = *pkt_ptr; odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); uint32_t pktlen = odp_packet_len(pkt); + pool_t *pool = pkt_hdr->buf_hdr.pool_ptr; odp_packet_t newpkt;
if (offset > pktlen) return -1;
- newpkt = odp_packet_alloc(pkt_hdr->buf_hdr.pool_hdl, pktlen + len); + newpkt = odp_packet_alloc(pool->pool_hdl, pktlen + len);
if (newpkt == ODP_PACKET_INVALID) return -1; @@ -718,12 +711,13 @@ int odp_packet_rem_data(odp_packet_t *pkt_ptr, uint32_t offset, uint32_t len) odp_packet_t pkt = *pkt_ptr; odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); uint32_t pktlen = odp_packet_len(pkt); + pool_t *pool = pkt_hdr->buf_hdr.pool_ptr; odp_packet_t newpkt;
if (offset > pktlen || offset + len > pktlen) return -1;
- newpkt = odp_packet_alloc(pkt_hdr->buf_hdr.pool_hdl, pktlen - len); + newpkt = odp_packet_alloc(pool->pool_hdl, pktlen - len);
if (newpkt == ODP_PACKET_INVALID) return -1; @@ -1007,7 +1001,7 @@ void odp_packet_print(odp_packet_t pkt) int len = 0; int n = max_len - 1; odp_packet_hdr_t *hdr = odp_packet_hdr(pkt); - odp_buffer_t buf = _odp_packet_to_buffer(pkt); + odp_buffer_t buf = packet_to_buffer(pkt);
len += snprintf(&str[len], n - len, "Packet "); len += odp_buffer_snprint(&str[len], n - len, buf); @@ -1062,9 +1056,13 @@ void odp_packet_print(odp_packet_t pkt)
int odp_packet_is_valid(odp_packet_t pkt) { - odp_buffer_t buf = _odp_packet_to_buffer(pkt); + if (odp_buffer_is_valid(packet_to_buffer(pkt)) == 0) + return 0;
- return odp_buffer_is_valid(buf); + if (odp_event_type(odp_packet_to_event(pkt)) != ODP_EVENT_PACKET) + return 0; + + return 1; }
/* diff --git a/platform/linux-dpdk/odp_packet_dpdk.c b/platform/linux-dpdk/odp_packet_dpdk.c index d056a824..774fa31d 100644 --- a/platform/linux-dpdk/odp_packet_dpdk.c +++ b/platform/linux-dpdk/odp_packet_dpdk.c @@ -198,8 +198,7 @@ static int start_pkt_dpdk(pktio_entry_t *pktio_entry) int sid = rte_eth_dev_socket_id(pkt_dpdk->portid); int socket_id = sid < 0 ? 0 : sid; uint16_t nbrxq, nbtxq; - pool_entry_t *pool_entry = - get_pool_entry(_odp_typeval(pktio_entry->s.pool)); + pool_t *pool = pool_entry_from_hdl(pktio_entry->s.pool); uint16_t nb_rxd = RTE_TEST_RX_DESC_DEFAULT; uint16_t nb_txd = RTE_TEST_TX_DESC_DEFAULT; struct rte_eth_rss_conf rss_conf; @@ -234,7 +233,7 @@ static int start_pkt_dpdk(pktio_entry_t *pktio_entry) * VLAN tag */ port_conf.rxmode.max_rx_pkt_len = - rte_pktmbuf_data_room_size(pool_entry->s.rte_mempool) - + rte_pktmbuf_data_room_size(pool->rte_mempool) - 2 * 4 - RTE_PKTMBUF_HEADROOM;
nbtxq = pktio_entry->s.num_out_queue; @@ -247,20 +246,19 @@ static int start_pkt_dpdk(pktio_entry_t *pktio_entry) return -1; }
- if (nb_rxd + nb_txd > pool_entry->s.params.pkt.num / 4) { - double downrate = (double)(pool_entry->s.params.pkt.num / 4) / + if (nb_rxd + nb_txd > pool->params.pkt.num / 4) { + double downrate = (double)(pool->params.pkt.num / 4) / (double)(nb_rxd + nb_txd); nb_rxd >>= (int)ceil(downrate); nb_txd >>= (int)ceil(downrate); ODP_DBG("downrate %f\n", downrate); ODP_DBG("Descriptors scaled down. RX: %u TX: %u pool: %u\n", - nb_rxd, nb_txd, pool_entry->s.params.pkt.num); + nb_rxd, nb_txd, pool->params.pkt.num); } /* init one RX queue on each port */ for (i = 0; i < nbrxq; i++) { ret = rte_eth_rx_queue_setup(portid, i, nb_rxd, socket_id, - NULL, - pool_entry->s.rte_mempool); + NULL, pool->rte_mempool); if (ret < 0) { ODP_ERR("rxq:err=%d, port=%u\n", ret, (unsigned)portid); return -1; @@ -313,9 +311,8 @@ static void _odp_pktio_send_completion(pktio_entry_t *pktio_entry) int i; unsigned j; odp_packet_t dummy; - pool_entry_t *pool_entry = - get_pool_entry(_odp_typeval(pktio_entry->s.pool)); - struct rte_mempool *rte_mempool = pool_entry->s.rte_mempool; + pool_t *pool = pool_entry_from_hdl(pktio_entry->s.pool); + struct rte_mempool *rte_mempool = pool->rte_mempool;
for (j = 0; j < pktio_entry->s.num_out_queue; j++) send_pkt_dpdk(pktio_entry, j, &dummy, 0); @@ -376,10 +373,8 @@ static int recv_pkt_dpdk(pktio_entry_t *pktio_entry, int index, }
if (nb_rx == 0 && !pkt_dpdk->lockless_tx) { - pool_entry_t *pool_entry = - get_pool_entry(_odp_typeval(pktio_entry->s.pool)); - struct rte_mempool *rte_mempool = - pool_entry->s.rte_mempool; + pool_t *pool = pool_entry_from_hdl(pktio_entry->s.pool); + struct rte_mempool *rte_mempool = pool->rte_mempool; if (rte_mempool_avail_count(rte_mempool) == 0) _odp_pktio_send_completion(pktio_entry); } diff --git a/platform/linux-dpdk/odp_pool.c b/platform/linux-dpdk/odp_pool.c index 0821cdca..9569dd79 100644 --- a/platform/linux-dpdk/odp_pool.c +++ b/platform/linux-dpdk/odp_pool.c @@ -43,27 +43,22 @@ /* Define a practical limit for contiguous memory allocations */ #define MAX_SIZE (10 * 1024 * 1024)
-typedef struct pool_table_t { - pool_entry_t pool[ODP_CONFIG_POOLS]; - odp_shm_t shm; -} pool_table_t; - - /* The pool table ptr - resides in shared memory */ -static pool_table_t *pool_tbl; - -/* Pool entry pointers (for inlining) */ -void *pool_entry_ptr[ODP_CONFIG_POOLS]; +pool_table_t *pool_tbl;
+static inline odp_pool_t pool_index_to_handle(uint32_t pool_idx) +{ + return _odp_cast_scalar(odp_pool_t, pool_idx); +}
int odp_pool_init_global(void) { uint32_t i; odp_shm_t shm;
- shm = odp_shm_reserve("odp_pools", + shm = odp_shm_reserve("_odp_pool_table", sizeof(pool_table_t), - sizeof(pool_entry_t), 0); + ODP_CACHE_LINE_SIZE, 0);
pool_tbl = odp_shm_addr(shm);
@@ -74,18 +69,15 @@ int odp_pool_init_global(void) pool_tbl->shm = shm;
for (i = 0; i < ODP_CONFIG_POOLS; i++) { - /* init locks */ - pool_entry_t *pool = &pool_tbl->pool[i]; - LOCK_INIT(&pool->s.lock); - pool->s.pool_hdl = pool_index_to_handle(i); + pool_t *pool = pool_entry(i);
- pool_entry_ptr[i] = pool; + LOCK_INIT(&pool->lock); + pool->pool_hdl = pool_index_to_handle(i); }
ODP_DBG("\nPool init global\n"); - ODP_DBG(" pool_entry_s size %zu\n", sizeof(struct pool_entry_s)); - ODP_DBG(" pool_entry_t size %zu\n", sizeof(pool_entry_t)); ODP_DBG(" odp_buffer_hdr_t size %zu\n", sizeof(odp_buffer_hdr_t)); + ODP_DBG(" odp_packet_hdr_t size %zu\n", sizeof(odp_packet_hdr_t)); ODP_DBG("\n");
return 0; @@ -152,7 +144,7 @@ struct mbuf_ctor_arg { struct mbuf_pool_ctor_arg { /* This has to be the first member */ struct rte_pktmbuf_pool_private pkt; - odp_pool_t pool_hdl; + pool_t *pool; };
static void @@ -185,6 +177,7 @@ odp_dpdk_mbuf_ctor(struct rte_mempool *mp, struct rte_mbuf *mb = raw_mbuf; struct odp_buffer_hdr_t *buf_hdr; struct mbuf_pool_ctor_arg *mbp_ctor_arg = rte_mempool_get_priv(mp); + pool_t *pool = mbp_ctor_arg->pool;
/* The rte_mbuf is at the begninning in all cases */ mb_ctor_arg = (struct mbuf_ctor_arg *)opaque_arg; @@ -222,8 +215,8 @@ odp_dpdk_mbuf_ctor(struct rte_mempool *mp, /* Save index, might be useful for debugging purposes */ buf_hdr = (struct odp_buffer_hdr_t *)raw_mbuf; buf_hdr->index = i; - buf_hdr->handle.handle = (odp_buffer_t)buf_hdr; - buf_hdr->pool_hdl = mbp_ctor_arg->pool_hdl; + buf_hdr->pool_hdl = pool->pool_hdl; + buf_hdr->pool_ptr = pool; buf_hdr->type = mb_ctor_arg->type; buf_hdr->event_type = mb_ctor_arg->type; } @@ -231,7 +224,7 @@ odp_dpdk_mbuf_ctor(struct rte_mempool *mp, #define CHECK_U16_OVERFLOW(X) do { \ if (odp_unlikely(X > UINT16_MAX)) { \ ODP_ERR("Invalid size: %d", X); \ - UNLOCK(&pool->s.lock); \ + UNLOCK(&pool->lock); \ return ODP_POOL_INVALID; \ } \ } while (0) @@ -305,7 +298,7 @@ odp_pool_t odp_pool_create(const char *name, odp_pool_param_t *params) odp_pool_t pool_hdl = ODP_POOL_INVALID; unsigned mb_size, i, cache_size; size_t hdr_size; - pool_entry_t *pool; + pool_t *pool; uint32_t buf_align, blk_size, headroom, tailroom, min_seg_len; uint32_t max_len, min_align; char pool_name[ODP_POOL_NAME_LEN]; @@ -329,11 +322,11 @@ odp_pool_t odp_pool_create(const char *name, odp_pool_param_t *params) uint32_t num; struct rte_mempool *mp;
- pool = get_pool_entry(i); + pool = pool_entry(i);
- LOCK(&pool->s.lock); - if (pool->s.rte_mempool != NULL) { - UNLOCK(&pool->s.lock); + LOCK(&pool->lock); + if (pool->rte_mempool != NULL) { + UNLOCK(&pool->lock); continue; }
@@ -346,7 +339,7 @@ odp_pool_t odp_pool_create(const char *name, odp_pool_param_t *params) if (buf_align > ODP_CONFIG_BUFFER_ALIGN_MAX || buf_align != ROUNDDOWN_POWER2(buf_align, buf_align)) { - UNLOCK(&pool->s.lock); + UNLOCK(&pool->lock); return ODP_POOL_INVALID; }
@@ -421,7 +414,7 @@ odp_pool_t odp_pool_create(const char *name, odp_pool_param_t *params) default: ODP_ERR("Bad type %i\n", params->type); - UNLOCK(&pool->s.lock); + UNLOCK(&pool->lock); return ODP_POOL_INVALID; break; } @@ -431,7 +424,7 @@ odp_pool_t odp_pool_create(const char *name, odp_pool_param_t *params) mb_ctor_arg.seg_buf_size = mbp_ctor_arg.pkt.mbuf_data_room_size; mb_ctor_arg.type = params->type; mb_size = mb_ctor_arg.seg_buf_offset + mb_ctor_arg.seg_buf_size; - mbp_ctor_arg.pool_hdl = pool->s.pool_hdl; + mbp_ctor_arg.pool = pool; mbp_ctor_arg.pkt.mbuf_priv_size = mb_ctor_arg.seg_buf_offset - sizeof(struct rte_mbuf);
@@ -462,7 +455,7 @@ odp_pool_t odp_pool_create(const char *name, odp_pool_param_t *params) pool_name); }
- pool->s.rte_mempool = + pool->rte_mempool = rte_mempool_create(rte_name ? rte_name : pool_name, num, mb_size, @@ -475,30 +468,30 @@ odp_pool_t odp_pool_create(const char *name, odp_pool_param_t *params) rte_socket_id(), 0); free(rte_name); - if (pool->s.rte_mempool == NULL) { + if (pool->rte_mempool == NULL) { ODP_ERR("Cannot init DPDK mbuf pool: %s\n", rte_strerror(rte_errno)); - UNLOCK(&pool->s.lock); + UNLOCK(&pool->lock); return ODP_POOL_INVALID; } /* found free pool */ if (name == NULL) { - pool->s.name[0] = 0; + pool->name[0] = 0; } else { - strncpy(pool->s.name, name, + strncpy(pool->name, name, ODP_POOL_NAME_LEN - 1); - pool->s.name[ODP_POOL_NAME_LEN - 1] = 0; + pool->name[ODP_POOL_NAME_LEN - 1] = 0; }
- pool->s.params = *params; - mp = pool->s.rte_mempool; + pool->params = *params; + mp = pool->rte_mempool; ODP_DBG("Header/element/trailer size: %u/%u/%u, " "total pool size: %lu\n", mp->header_size, mp->elt_size, mp->trailer_size, (unsigned long)((mp->header_size + mp->elt_size + mp->trailer_size) * num)); - UNLOCK(&pool->s.lock); - pool_hdl = pool->s.pool_hdl; + UNLOCK(&pool->lock); + pool_hdl = pool->pool_hdl; break; }
@@ -517,30 +510,31 @@ odp_pool_t odp_pool_lookup(const char *name) return ODP_POOL_INVALID;
for (i = 0; i < ODP_CONFIG_POOLS; i++) { - pool_entry_t *pool = get_pool_entry(i); - LOCK(&pool->s.lock); - if (pool->s.rte_mempool != mp) { - UNLOCK(&pool->s.lock); + pool_t *pool = pool_entry(i); + + LOCK(&pool->lock); + if (pool->rte_mempool != mp) { + UNLOCK(&pool->lock); continue; } - UNLOCK(&pool->s.lock); - pool_hdl = pool->s.pool_hdl; + UNLOCK(&pool->lock); + pool_hdl = pool->pool_hdl; } return pool_hdl; }
-static odp_buffer_t buffer_alloc(pool_entry_t *pool) +static odp_buffer_t buffer_alloc(pool_t *pool) { odp_buffer_t buffer;
- if (odp_unlikely(pool->s.params.type != ODP_POOL_BUFFER && - pool->s.params.type != ODP_POOL_TIMEOUT)) { + if (odp_unlikely(pool->params.type != ODP_POOL_BUFFER && + pool->params.type != ODP_POOL_TIMEOUT)) { rte_errno = EINVAL; return ODP_BUFFER_INVALID; }
- buffer = (odp_buffer_t)rte_ctrlmbuf_alloc(pool->s.rte_mempool); + buffer = (odp_buffer_t)rte_ctrlmbuf_alloc(pool->rte_mempool);
if ((struct rte_mbuf *)buffer == NULL) { rte_errno = ENOMEM; @@ -555,7 +549,7 @@ odp_buffer_t odp_buffer_alloc(odp_pool_t pool_hdl) { ODP_ASSERT(ODP_POOL_INVALID != pool_hdl);
- pool_entry_t *pool = odp_pool_to_entry(pool_hdl); + pool_t *pool = pool_entry_from_hdl(pool_hdl);
return buffer_alloc(pool); } @@ -566,7 +560,7 @@ int odp_buffer_alloc_multi(odp_pool_t pool_hdl, odp_buffer_t buf[], int num)
ODP_ASSERT(ODP_POOL_INVALID != pool_hdl);
- pool_entry_t *pool = odp_pool_to_entry(pool_hdl); + pool_t *pool = pool_entry_from_hdl(pool_hdl);
for (i = 0; i < num; i++) { buf[i] = buffer_alloc(pool); @@ -596,21 +590,20 @@ void odp_buffer_free_multi(const odp_buffer_t buf[], int num)
void odp_pool_print(odp_pool_t pool_hdl) { - uint32_t pool_id = pool_handle_to_index(pool_hdl); - pool_entry_t *pool = get_pool_entry(pool_id); - rte_mempool_dump(stdout, pool->s.rte_mempool); + pool_t *pool = pool_entry_from_hdl(pool_hdl); + + rte_mempool_dump(stdout, pool->rte_mempool); }
int odp_pool_info(odp_pool_t pool_hdl, odp_pool_info_t *info) { - uint32_t pool_id = pool_handle_to_index(pool_hdl); - pool_entry_t *pool = get_pool_entry(pool_id); + pool_t *pool = pool_entry_from_hdl(pool_hdl);
if (pool == NULL || info == NULL) return -1;
- info->name = pool->s.name; - info->params = pool->s.params; + info->name = pool->name; + info->params = pool->params;
return 0; } @@ -621,17 +614,16 @@ int odp_pool_info(odp_pool_t pool_hdl, odp_pool_info_t *info) */ int odp_pool_destroy(odp_pool_t pool_hdl) { - uint32_t pool_id = pool_handle_to_index(pool_hdl); - pool_entry_t *pool = get_pool_entry(pool_id); - struct rte_mempool *mp; + pool_t *pool = pool_entry_from_hdl(pool_hdl); + struct rte_mempool *mp = rte_mempool_lookup(pool->name);
- if ((mp = rte_mempool_lookup(pool->s.name)) == NULL) { + if (mp == NULL) { ODP_ERR("Can't find pool with this name!\n"); return -1; }
rte_mempool_free(mp); - pool->s.rte_mempool = NULL; + pool->rte_mempool = NULL; /* The pktio supposed to be closed by now */ return 0; }
commit f2c924ea7fbbfe8ce3a65193f8461c38c5f70968 Author: Matias Elo matias.elo@nokia.com Date: Fri Jan 26 17:05:30 2018 +0200
Port 3a2864a "linux-gen: sched: use config max ordered locks"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/include/odp_config_internal.h b/platform/linux-dpdk/include/odp_config_internal.h index 21db09b8..2adc9081 100644 --- a/platform/linux-dpdk/include/odp_config_internal.h +++ b/platform/linux-dpdk/include/odp_config_internal.h @@ -24,7 +24,7 @@ extern "C" { /* * Maximum number of ordered locks per queue */ -#define CONFIG_QUEUE_MAX_ORD_LOCKS 4 +#define CONFIG_QUEUE_MAX_ORD_LOCKS 2
/* * Maximum number of packet IO resources
commit 46c26b39b7bc23a420f02d5a486f573c7a1e150a Author: Matias Elo matias.elo@nokia.com Date: Thu Jan 25 13:52:22 2018 +0200
Port 89b7caa "linux-gen: stop poisoning CPPFLAGS/LDFLAGS with DPDK flags"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/helper/test/Makefile.am b/helper/test/Makefile.am index 1cff7afb..4866e093 100644 --- a/helper/test/Makefile.am +++ b/helper/test/Makefile.am @@ -5,7 +5,7 @@ LIB = $(top_builddir)/lib #in the following line, the libs using the symbols should come before #the libs containing them! The includer is given a chance to add things #before libodp by setting PRE_LDADD before the inclusion. -LDADD = $(PRE_LDADD) $(LIB)/libodphelper.la $(LIB)/libodp-dpdk.la +LDADD = $(PRE_LDADD) $(LIB)/libodphelper.la $(LIB)/libodp-dpdk.la $(DPDK_PMDS)
INCFLAGS = \ -I$(top_builddir)/platform/@with_platform@/include \ diff --git a/pkgconfig/libodp-dpdk.pc.in b/pkgconfig/libodp-dpdk.pc.in index 2b9c5e21..6ce052c7 100644 --- a/pkgconfig/libodp-dpdk.pc.in +++ b/pkgconfig/libodp-dpdk.pc.in @@ -8,4 +8,4 @@ Description: The ODP packet processing engine Version: @PKGCONFIG_VERSION@ Libs: -L${libdir} -lodp-dpdk @DPDK_LIBS@ Libs.private: @OPENSSL_STATIC_LIBS@ @DPDK_PMDS@ @DPDK_LIBS@ @PTHREAD_LIBS@ @TIMER_LIBS@ -lpthread @ATOMIC_LIBS@ -Cflags: -I${includedir} +Cflags: -I${includedir} @DPDK_CPPFLAGS@ diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 91ac90db..e332e6b4 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -1,18 +1,7 @@ include $(top_srcdir)/platform/Makefile.inc include $(top_srcdir)/platform/@with_platform@/Makefile.inc
-PLAT_CFLAGS = -if ARCH_X86 -PLAT_CFLAGS += -msse4.2 -endif - -if DPDK_DEFAULT_DIR -PLAT_CFLAGS += -include /usr/include/dpdk/rte_config.h -else -PLAT_CFLAGS += -include $(SDK_INSTALL_PATH)/include/rte_config.h -endif - -AM_CFLAGS += $(PLAT_CFLAGS) +AM_CFLAGS += $(DPDK_CFLAGS) AM_CFLAGS += -I$(srcdir)/include AM_CFLAGS += -I$(top_srcdir)/platform/linux-generic/include AM_CFLAGS += -I$(top_srcdir)/include/odp/arch/@ARCH_ABI@ @@ -21,6 +10,7 @@ AM_CFLAGS += -I$(top_builddir)/include AM_CFLAGS += -Iinclude
AM_CPPFLAGS += $(OPENSSL_CPPFLAGS) +AM_CPPFLAGS += $(DPDK_CPPFLAGS)
include_HEADERS = \ $(top_srcdir)/include/odp.h \ @@ -246,6 +236,7 @@ endif
__LIB__libodp_dpdk_la_LIBADD = $(ATOMIC_LIBS) __LIB__libodp_dpdk_la_LIBADD += $(OPENSSL_LIBS) +__LIB__libodp_dpdk_la_LIBADD += $(DPDK_LIBS) $(DPDK_PMDS) __LIB__libodp_dpdk_la_LIBADD += $(PTHREAD_LIBS) __LIB__libodp_dpdk_la_LIBADD += $(TIMER_LIBS)
diff --git a/platform/linux-dpdk/Makefile.inc b/platform/linux-dpdk/Makefile.inc index d26b2cc8..b20132b1 100644 --- a/platform/linux-dpdk/Makefile.inc +++ b/platform/linux-dpdk/Makefile.inc @@ -1,4 +1,5 @@ AM_CFLAGS += -I$(top_srcdir)/platform/$(with_platform)/arch/$(ARCH_DIR) AM_CXXFLAGS += -I$(top_srcdir)/platform/$(with_platform)/arch/$(ARCH_DIR) +AM_CPPFLAGS += $(DPDK_CPPFLAGS) AM_LDFLAGS += -R$(SDK_INSTALL_PATH)/lib LOG_COMPILER = $(top_srcdir)/test/linux-dpdk/wrapper-script.sh diff --git a/platform/linux-dpdk/m4/configure.m4 b/platform/linux-dpdk/m4/configure.m4 index 25e5c62f..c61dae4b 100644 --- a/platform/linux-dpdk/m4/configure.m4 +++ b/platform/linux-dpdk/m4/configure.m4 @@ -86,13 +86,14 @@ m4_include([platform/linux-dpdk/m4/odp_schedule.m4]) # DPDK build variables ########################################################################## DPDK_DRIVER_DIR=/usr/lib/$(uname -m)-linux-gnu -AS_CASE($host_cpu, [x86_64], [AM_CPPFLAGS="$AM_CPPFLAGS -msse4.2"]) +AS_CASE($host_cpu, [x86_64], [DPDK_CPPFLAGS="-msse4.2"]) if test ${DPDK_DEFAULT_DIR} = 1; then - AM_CPPFLAGS="$AM_CPPFLAGS -I/usr/include/dpdk" + DPDK_CFLAGS="-include /usr/include/dpdk/rte_config.h" + DPDK_CPPFLAGS="$DPDK_CPPFLAGS -I/usr/include/dpdk" else DPDK_DRIVER_DIR=$SDK_INSTALL_PATH/lib - AM_CPPFLAGS="$AM_CPPFLAGS -I$SDK_INSTALL_PATH/include" - AM_LDFLAGS="$AM_LDFLAGS -L$SDK_INSTALL_PATH/lib" + DPDK_CFLAGS="-include $SDK_INSTALL_PATH/include/rte_config.h" + DPDK_CPPFLAGS="$DPDK_CPPFLAGS -I$SDK_INSTALL_PATH/include" fi
# Check if we should link against the static or dynamic DPDK library @@ -106,10 +107,8 @@ AM_CONDITIONAL([SHARED_DPDK], [test x$shared_dpdk = xtrue]) ########################################################################## # Save and set temporary compilation flags ########################################################################## -OLD_LDFLAGS=$LDFLAGS -OLD_CPPFLAGS=$CPPFLAGS -LDFLAGS="$AM_LDFLAGS $LDFLAGS" -CPPFLAGS="$AM_CPPFLAGS $CPPFLAGS" +OLD_CPPFLAGS="$CPPFLAGS" +CPPFLAGS="$DPDK_CPPFLAGS $CPPFLAGS"
########################################################################## # Check for DPDK availability @@ -117,38 +116,36 @@ CPPFLAGS="$AM_CPPFLAGS $CPPFLAGS" AC_CHECK_HEADERS([rte_config.h], [], [AC_MSG_FAILURE(["can't find DPDK headers"])])
-AC_SEARCH_LIBS([rte_eal_init], [dpdk], [], - [AC_MSG_ERROR([DPDK libraries required])], [-ldl]) - ########################################################################## # In case of static linking DPDK pmd drivers are not linked unless the # --whole-archive option is used. No spaces are allowed between the # --whole-arhive flags. ########################################################################## if test "x$shared_dpdk" = "xtrue"; then - LIBS="$LIBS -Wl,--no-as-needed,-ldpdk,-as-needed -ldl -lm -lpcap" + DPDK_LIBS="-Wl,--no-as-needed,-ldpdk,-as-needed -ldl -lm -lpcap" else - DPDK_PMD=--whole-archive, - for filename in $DPDK_DRIVER_DIR/*.a; do - cur_driver=`echo $(basename "$filename" .a) | \ - sed -n 's/^(librte_pmd_)/-lrte_pmd_/p' | sed -n 's/$/,/p'` + AS_VAR_SET([DPDK_PMDS], [-Wl,--whole-archive,]) + for filename in "$DPDK_DRIVER_DIR"/librte_pmd_*.a; do + cur_driver=`basename "$filename" .a | sed -e 's/^lib//'` # rte_pmd_nfp has external dependencies which break linking - if test "$cur_driver" = "-lrte_pmd_nfp,"; then + if test "$cur_driver" = "rte_pmd_nfp"; then echo "skip linking rte_pmd_nfp" else - DPDK_PMD+=$cur_driver + AS_VAR_APPEND([DPDK_PMDS], [-l$cur_driver,]) fi done - DPDK_PMD+=--no-whole-archive - - LIBS="$LIBS -ldpdk -ldl -lm -lpcap" - AM_LDFLAGS="$AM_LDFLAGS -Wl,$DPDK_PMD" + AS_VAR_APPEND([DPDK_PMDS], [--no-whole-archive]) + DPDK_LIBS="-L$DPDK_DRIVER_DIR/ -ldpdk -lpthread -ldl -lm -lpcap" fi
+AC_SUBST([DPDK_CFLAGS]) +AC_SUBST([DPDK_CPPFLAGS]) +AC_SUBST([DPDK_LIBS]) +AC_SUBST([DPDK_PMDS]) + ########################################################################## # Restore old saved variables ########################################################################## -LDFLAGS=$OLD_LDFLAGS CPPFLAGS=$OLD_CPPFLAGS
AC_CONFIG_FILES([platform/linux-dpdk/Makefile diff --git a/test/linux-dpdk/Makefile.inc b/test/linux-dpdk/Makefile.inc index 25493d86..baf6dadc 100644 --- a/test/linux-dpdk/Makefile.inc +++ b/test/linux-dpdk/Makefile.inc @@ -8,7 +8,7 @@ AM_CPPFLAGS += $(CUNIT_CPPFLAGS)
LIBCUNIT_COMMON = $(top_builddir)/test/common_plat/common/libcunit_common.la LIB = $(top_builddir)/lib -LIBODP = $(LIB)/libodphelper.la $(LIB)/libodp-dpdk.la +LIBODP = $(LIB)/libodphelper.la $(LIB)/libodp-dpdk.la $(DPDK_PMDS)
INCCUNIT_COMMON = -I$(top_srcdir)/test/common_plat/common INCODP = -I$(top_builddir)/platform/@with_platform@/include \
commit 0dc1b8642436481a2c8d8808902ded2f2da09b04 Author: Matias Elo matias.elo@nokia.com Date: Thu Jan 25 13:29:50 2018 +0200
Port 7fc6d27 "travis: use pkg-config to discover ODP flags"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/.travis.yml b/.travis.yml index 09645a13..127ff9c3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -39,7 +39,7 @@ addons: apt: packages: - gcc - - automake autoconf autoconf-archive libtool graphviz mscgen doxygen + - automake autoconf libtool graphviz mscgen doxygen - codespell - libssl-dev - libpcap-dev @@ -122,10 +122,10 @@ script: - echo "Checking linking and run from install..." - pushd $HOME - echo "Dynamic link.." - - ${CC} ${OLDPWD}/example/hello/odp_hello.c -o odp_hello_inst -I${OLDPWD}/dpdk/x86_64-native-linuxapp-gcc/include -I${HOME}/odp-install/include -L${HOME}/odp-install/lib -lodp-dpdk -L${OLDPWD}/dpdk/x86_64-native-linuxapp-gcc/lib -lrt -msse4.2 -ldpdk -lpthread -lcrypto -lpcap -ldl + - ${CC} ${OLDPWD}/example/hello/odp_hello.c -o odp_hello_inst `PKG_CONFIG_PATH=${HOME}/odp-install/lib/pkgconfig pkg-config --cflags --libs libodp-dpdk` - sudo ODP_PLATFORM_PARAMS="-n 2" LD_LIBRARY_PATH="${HOME}/odp-install/lib:$LD_LIBRARY_PATH" ./odp_hello_inst - echo "Static link.." - - ${CC} ${OLDPWD}/example/hello/odp_hello.c -o odp_hello_inst -I${OLDPWD}/dpdk/x86_64-native-linuxapp-gcc/include -I${HOME}/odp-install/include -L${HOME}/odp-install/lib -lodp-dpdk -L${OLDPWD}/dpdk/x86_64-native-linuxapp-gcc/lib -lrt -msse4.2 -ldpdk -lpthread -lcrypto -lpcap -ldl -lm -static + - ${CC} ${OLDPWD}/example/hello/odp_hello.c -o odp_hello_inst `PKG_CONFIG_PATH=${HOME}/odp-install/lib/pkgconfig pkg-config --cflags --libs libodp-dpdk --static` -static - sudo ODP_PLATFORM_PARAMS="-n 2" ./odp_hello_inst
jobs:
commit 2e9cb0e209fd05e876d13e753792ae6d2239cfb2 Author: Matias Elo matias.elo@nokia.com Date: Thu Jan 25 11:25:18 2018 +0200
Port c6dc505 "linux-gen: move timer_create check to platform directory"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 2ba3bfa8..91ac90db 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -247,6 +247,7 @@ endif __LIB__libodp_dpdk_la_LIBADD = $(ATOMIC_LIBS) __LIB__libodp_dpdk_la_LIBADD += $(OPENSSL_LIBS) __LIB__libodp_dpdk_la_LIBADD += $(PTHREAD_LIBS) +__LIB__libodp_dpdk_la_LIBADD += $(TIMER_LIBS)
# Create symlink for ABI header files. Application does not need to use the arch # specific include path for installed files. diff --git a/platform/linux-dpdk/m4/configure.m4 b/platform/linux-dpdk/m4/configure.m4 index 526089af..25e5c62f 100644 --- a/platform/linux-dpdk/m4/configure.m4 +++ b/platform/linux-dpdk/m4/configure.m4 @@ -78,6 +78,7 @@ AC_SUBST([ATOMIC_LIBS]) # linux-generic pktio at all. And DPDK has its own PCAP support anyway AM_CONDITIONAL([HAVE_PCAP], [false]) m4_include([platform/linux-dpdk/m4/odp_pthread.m4]) +m4_include([platform/linux-dpdk/m4/odp_timer.m4]) m4_include([platform/linux-dpdk/m4/odp_openssl.m4]) m4_include([platform/linux-dpdk/m4/odp_schedule.m4])
diff --git a/platform/linux-dpdk/m4/odp_timer.m4 b/platform/linux-dpdk/m4/odp_timer.m4 new file mode 120000 index 00000000..2a909824 --- /dev/null +++ b/platform/linux-dpdk/m4/odp_timer.m4 @@ -0,0 +1 @@ +../../linux-generic/m4/odp_timer.m4 \ No newline at end of file
commit 00e977fc04eb5f2fe1bd75b1d9612c7b59b8a339 Author: Matias Elo matias.elo@nokia.com Date: Thu Jan 25 11:20:15 2018 +0200
Port 66898d9 "linux-gen: stop poisoning CFLAGS/LDFLAGS with threading flags"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 7ecc949c..2ba3bfa8 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -246,6 +246,7 @@ endif
__LIB__libodp_dpdk_la_LIBADD = $(ATOMIC_LIBS) __LIB__libodp_dpdk_la_LIBADD += $(OPENSSL_LIBS) +__LIB__libodp_dpdk_la_LIBADD += $(PTHREAD_LIBS)
# Create symlink for ABI header files. Application does not need to use the arch # specific include path for installed files.
commit 634ed5220aabdbe753e65af119ede23cd94f248a Author: Matias Elo matias.elo@nokia.com Date: Thu Jan 25 11:16:51 2018 +0200
Port 51dc837 "linux-gen: stop poisoning CPPFLAGS/LDFLAGS with CUnit flags"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/test/linux-dpdk/Makefile.inc b/test/linux-dpdk/Makefile.inc index a24b9362..25493d86 100644 --- a/test/linux-dpdk/Makefile.inc +++ b/test/linux-dpdk/Makefile.inc @@ -4,6 +4,8 @@
AM_LDFLAGS += -static
+AM_CPPFLAGS += $(CUNIT_CPPFLAGS) + LIBCUNIT_COMMON = $(top_builddir)/test/common_plat/common/libcunit_common.la LIB = $(top_builddir)/lib LIBODP = $(LIB)/libodphelper.la $(LIB)/libodp-dpdk.la
commit acc0bdcebead208c00fc013ad18e29c3986d357e Author: Matias Elo matias.elo@nokia.com Date: Thu Jan 25 09:21:47 2018 +0200
Port ce8c72b "linux-gen: stop poisoning CPPFLAGS/LDFLAGS with OpenSSL flags"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index e367a28f..7ecc949c 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -20,6 +20,8 @@ AM_CFLAGS += -I$(top_srcdir)/include AM_CFLAGS += -I$(top_builddir)/include AM_CFLAGS += -Iinclude
+AM_CPPFLAGS += $(OPENSSL_CPPFLAGS) + include_HEADERS = \ $(top_srcdir)/include/odp.h \ $(top_srcdir)/include/odp_api.h @@ -243,6 +245,7 @@ __LIB__libodp_dpdk_la_SOURCES += arch/x86/cpu_flags.c \ endif
__LIB__libodp_dpdk_la_LIBADD = $(ATOMIC_LIBS) +__LIB__libodp_dpdk_la_LIBADD += $(OPENSSL_LIBS)
# Create symlink for ABI header files. Application does not need to use the arch # specific include path for installed files.
commit 5d047aef5acfc188a96895554d9f9d2f0b5c611f Author: Matias Elo matias.elo@nokia.com Date: Wed Jan 24 18:04:06 2018 +0200
Port 4c4bca3 "linux-generic: sched: add skeleton for strict priority"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 4e24abca..e367a28f 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -205,6 +205,7 @@ __LIB__libodp_dpdk_la_SOURCES = \ ../linux-generic/odp_rwlock_recursive.c \ ../linux-generic/odp_schedule.c \ ../linux-generic/odp_schedule_if.c \ + ../linux-generic/odp_schedule_sp.c \ ../linux-generic/odp_schedule_iquery.c \ odp_shared_memory.c \ ../linux-generic/odp_sorted_list.c \ diff --git a/platform/linux-dpdk/m4/configure.m4 b/platform/linux-dpdk/m4/configure.m4 index fd00e0c0..526089af 100644 --- a/platform/linux-dpdk/m4/configure.m4 +++ b/platform/linux-dpdk/m4/configure.m4 @@ -47,7 +47,7 @@ AC_LINK_IFELSE( AC_CHECK_LIB( [atomic], [__atomic_exchange_8], [use_libatomic=yes], - [AC_MSG_CHECKING([__atomic_exchange_8 is not available])]) + [AC_MSG_FAILURE([__atomic_exchange_8 is not available])]) ])
AC_MSG_CHECKING(whether -latomic is needed for 128-bit atomic built-ins) @@ -79,6 +79,7 @@ AC_SUBST([ATOMIC_LIBS]) AM_CONDITIONAL([HAVE_PCAP], [false]) m4_include([platform/linux-dpdk/m4/odp_pthread.m4]) m4_include([platform/linux-dpdk/m4/odp_openssl.m4]) +m4_include([platform/linux-dpdk/m4/odp_schedule.m4])
########################################################################## # DPDK build variables diff --git a/platform/linux-dpdk/m4/odp_schedule.m4 b/platform/linux-dpdk/m4/odp_schedule.m4 new file mode 120000 index 00000000..7b211bd8 --- /dev/null +++ b/platform/linux-dpdk/m4/odp_schedule.m4 @@ -0,0 +1 @@ +../../linux-generic/m4/odp_schedule.m4 \ No newline at end of file
commit 7deefdd638532b523228fb4ea001a0e1c209a3d7 Author: Matias Elo matias.elo@nokia.com Date: Wed Jan 24 17:24:15 2018 +0200
Port f72ae9c "linux-gen: pktio: remove unused header file"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 14b377a9..4e24abca 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -153,7 +153,6 @@ noinst_HEADERS = \ ${srcdir}/include/odp_packet_io_internal.h \ ${srcdir}/include/odp_errno_define.h \ ${top_srcdir}/platform/linux-generic/include/odp_packet_io_ipc_internal.h \ - ${top_srcdir}/platform/linux-generic/include/odp_packet_io_queue.h \ ${top_srcdir}/platform/linux-generic/include/odp_packet_io_ring_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_packet_socket.h \ ${top_srcdir}/platform/linux-generic/include/odp_pkt_queue_internal.h \
commit a838d7c26c81d4053a806cb4ca72e697707223b3 Author: Matias Elo matias.elo@nokia.com Date: Wed Jan 24 17:43:06 2018 +0200
Port 08863bb "linux-gen: pktio: convert queue handle only once"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/include/odp_packet_io_internal.h b/platform/linux-dpdk/include/odp_packet_io_internal.h index 9dc420c4..b77b2bbc 100644 --- a/platform/linux-dpdk/include/odp_packet_io_internal.h +++ b/platform/linux-dpdk/include/odp_packet_io_internal.h @@ -23,6 +23,7 @@ extern "C" { #include <odp_classification_datamodel.h> #include <odp_align_internal.h> #include <odp_debug_internal.h> +#include <odp_queue_if.h>
#include <odp_config_internal.h> #include <odp/api/hints.h> @@ -106,6 +107,7 @@ struct pktio_entry {
struct { odp_queue_t queue; + queue_t queue_int; odp_pktin_queue_t pktin; } in_queue[PKTIO_MAX_QUEUES];
commit 54931a27e07feb2b07f85105ce609459e7228819 Author: Matias Elo matias.elo@nokia.com Date: Wed Jan 24 17:22:12 2018 +0200
Port 1239cc0 "linux-gen: cls: avoid queue conversions"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/include/odp_packet_internal.h b/platform/linux-dpdk/include/odp_packet_internal.h index 0b8b04d6..69563fc9 100644 --- a/platform/linux-dpdk/include/odp_packet_internal.h +++ b/platform/linux-dpdk/include/odp_packet_internal.h @@ -30,6 +30,7 @@ extern "C" { #include <odp_crypto_internal.h> #include <protocols/eth.h> #include <odp/api/plat/packet_types.h> +#include <odp_queue_if.h>
#include <rte_acl_osdep.h>
@@ -126,7 +127,7 @@ typedef struct { odp_time_t timestamp;
/* Classifier destination queue */ - odp_queue_t dst_queue; + queue_t dst_queue;
/* Result for crypto */ odp_crypto_generic_op_result_t op_result;
commit b86a761e8befebacb8b1d2d76489a28ab11fae5c Author: Matias Elo matias.elo@nokia.com Date: Wed Jan 24 17:12:35 2018 +0200
Port 200782c "linux-generic: queue: modular queue interface"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index 7e0f381b..14b377a9 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -161,6 +161,7 @@ noinst_HEADERS = \ ${srcdir}/include/odp_posix_extensions.h \ ${top_srcdir}/platform/linux-generic/include/odp_queue_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_ring_internal.h \ + ${top_srcdir}/platform/linux-generic/include/odp_queue_if.h \ ${top_srcdir}/platform/linux-generic/include/odp_schedule_if.h \ ${top_srcdir}/platform/linux-generic/include/odp_sorted_list_internal.h \ ${srcdir}/include/odp_shm_internal.h \ @@ -200,6 +201,7 @@ __LIB__libodp_dpdk_la_SOURCES = \ ../linux-generic/odp_pkt_queue.c \ odp_pool.c \ ../linux-generic/odp_queue.c \ + ../linux-generic/odp_queue_if.c \ ../linux-generic/odp_rwlock.c \ ../linux-generic/odp_rwlock_recursive.c \ ../linux-generic/odp_schedule.c \ diff --git a/platform/linux-dpdk/odp_init.c b/platform/linux-dpdk/odp_init.c index fa4e204e..d0685661 100644 --- a/platform/linux-dpdk/odp_init.c +++ b/platform/linux-dpdk/odp_init.c @@ -206,7 +206,7 @@ int odp_init_global(odp_instance_t *instance, } stage = POOL_INIT;
- if (odp_queue_init_global()) { + if (queue_fn->init_global()) { ODP_ERR("ODP queue init failed.\n"); goto init_failed; } @@ -328,7 +328,7 @@ int _odp_term_global(enum init_stage stage) /* Fall through */
case QUEUE_INIT: - if (odp_queue_term_global()) { + if (queue_fn->term_global()) { ODP_ERR("ODP queue term failed.\n"); rc = -1; } @@ -417,6 +417,12 @@ int odp_init_local(odp_instance_t instance, odp_thread_type_t thr_type) } stage = POOL_INIT;
+ if (queue_fn->init_local()) { + ODP_ERR("ODP queue local init failed.\n"); + goto init_fail; + } + stage = QUEUE_INIT; + if (sched_fn->init_local()) { ODP_ERR("ODP schedule local init failed.\n"); goto init_fail; @@ -450,6 +456,13 @@ int _odp_term_local(enum init_stage stage) } /* Fall through */
+ case QUEUE_INIT: + if (queue_fn->term_local()) { + ODP_ERR("ODP queue local term failed.\n"); + rc = -1; + } + /* Fall through */ + case POOL_INIT: if (odp_pool_term_local()) { ODP_ERR("ODP buffer pool local term failed.\n");
commit e5593fe741920d8a9f6659516dee4bd414414ea4 Author: Matias Elo matias.elo@nokia.com Date: Wed Jan 24 16:45:11 2018 +0200
Port 2541e86 "linux-gen: shm: user can define place for shm files"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/odp_init.c b/platform/linux-dpdk/odp_init.c index 4e795642..fa4e204e 100644 --- a/platform/linux-dpdk/odp_init.c +++ b/platform/linux-dpdk/odp_init.c @@ -23,9 +23,6 @@ #include <sys/types.h> #include <pwd.h>
-#define _ODP_FILES_FMT "odp-%d-" -#define _ODP_TMPDIR "/dev/shm" - #define MEMPOOL_OPS(hdl) extern void mp_hdlr_init_##hdl(void); MEMPOOL_OPS(ops_mp_mc) MEMPOOL_OPS(ops_sp_sc) @@ -150,65 +147,13 @@ static int odp_init_dpdk(const char *cmdline)
struct odp_global_data_s odp_global_data;
-/* remove all files staring with "odp-<pid>" from a directory "dir" */ -static int cleanup_files(const char *dirpath, int odp_pid) -{ - struct dirent *e; - DIR *dir; - char userdir[PATH_MAX]; - char prefix[PATH_MAX]; - char *fullpath; - int d_len = strlen(dirpath); - int p_len; - int f_len; - - snprintf(userdir, PATH_MAX, "%s/%s", dirpath, odp_global_data.uid); - - dir = opendir(userdir); - if (!dir) { - /* ok if the dir does not exist. no much to delete then! */ - ODP_DBG("opendir failed for %s: %s\n", - dirpath, strerror(errno)); - return 0; - } - snprintf(prefix, PATH_MAX, _ODP_FILES_FMT, odp_pid); - p_len = strlen(prefix); - while ((e = readdir(dir)) != NULL) { - if (strncmp(e->d_name, prefix, p_len) == 0) { - f_len = strlen(e->d_name); - fullpath = malloc(d_len + f_len + 2); - if (fullpath == NULL) { - closedir(dir); - return -1; - } - snprintf(fullpath, PATH_MAX, "%s/%s", - dirpath, e->d_name); - ODP_DBG("deleting obsolete file: %s\n", fullpath); - if (unlink(fullpath)) - ODP_ERR("unlink failed for %s: %s\n", - fullpath, strerror(errno)); - free(fullpath); - } - } - closedir(dir); - - return 0; -} - int odp_init_global(odp_instance_t *instance, const odp_init_t *params, const odp_platform_init_t *platform_params) { - char *hpdir; - uid_t uid; - memset(&odp_global_data, 0, sizeof(struct odp_global_data_s)); odp_global_data.main_pid = getpid();
- uid = getuid(); - snprintf(odp_global_data.uid, UID_MAXLEN, "%d", - uid); - enum init_stage stage = NO_INIT; odp_global_data.log_fn = odp_override_log; odp_global_data.abort_fn = odp_override_abort; @@ -220,8 +165,6 @@ int odp_init_global(odp_instance_t *instance, odp_global_data.abort_fn = params->abort_fn; }
- cleanup_files(_ODP_TMPDIR, odp_global_data.main_pid); - if (odp_cpumask_init_global(params)) { ODP_ERR("ODP cpumask init failed.\n"); goto init_failed; @@ -243,10 +186,6 @@ int odp_init_global(odp_instance_t *instance, ODP_ERR("ODP system_info init failed.\n"); goto init_failed; } - hpdir = odp_global_data.hugepage_info.default_huge_page_dir; - /* cleanup obsolete huge page files, if any */ - if (hpdir) - cleanup_files(hpdir, odp_global_data.main_pid); stage = SYSINFO_INIT;
if (_odp_shm_init_global()) {
commit dd0e9eb3538607e6c5480dd7a76291b5f94e3b8b Author: Matias Elo matias.elo@nokia.com Date: Wed Jan 24 16:38:46 2018 +0200
Port b2b516c "linux-gen: shm: add uid to shm files"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/odp_init.c b/platform/linux-dpdk/odp_init.c index 283ca599..4e795642 100644 --- a/platform/linux-dpdk/odp_init.c +++ b/platform/linux-dpdk/odp_init.c @@ -20,6 +20,8 @@ #include <unistd.h> #include <stdlib.h> #include <errno.h> +#include <sys/types.h> +#include <pwd.h>
#define _ODP_FILES_FMT "odp-%d-" #define _ODP_TMPDIR "/dev/shm" @@ -153,13 +155,16 @@ static int cleanup_files(const char *dirpath, int odp_pid) { struct dirent *e; DIR *dir; + char userdir[PATH_MAX]; char prefix[PATH_MAX]; char *fullpath; int d_len = strlen(dirpath); int p_len; int f_len;
- dir = opendir(dirpath); + snprintf(userdir, PATH_MAX, "%s/%s", dirpath, odp_global_data.uid); + + dir = opendir(userdir); if (!dir) { /* ok if the dir does not exist. no much to delete then! */ ODP_DBG("opendir failed for %s: %s\n", @@ -195,10 +200,15 @@ int odp_init_global(odp_instance_t *instance, const odp_platform_init_t *platform_params) { char *hpdir; + uid_t uid;
memset(&odp_global_data, 0, sizeof(struct odp_global_data_s)); odp_global_data.main_pid = getpid();
+ uid = getuid(); + snprintf(odp_global_data.uid, UID_MAXLEN, "%d", + uid); + enum init_stage stage = NO_INIT; odp_global_data.log_fn = odp_override_log; odp_global_data.abort_fn = odp_override_abort;
commit 169eb906840b00db23dcebc037255546aadd6531 Author: Matias Elo matias.elo@nokia.com Date: Wed Jan 24 16:31:26 2018 +0200
Port d5d52b6 "linux-gen: shm: use shm in /dev/shm instead of /tmp"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/odp_init.c b/platform/linux-dpdk/odp_init.c index fdd9d438..283ca599 100644 --- a/platform/linux-dpdk/odp_init.c +++ b/platform/linux-dpdk/odp_init.c @@ -22,7 +22,7 @@ #include <errno.h>
#define _ODP_FILES_FMT "odp-%d-" -#define _ODP_TMPDIR "/tmp" +#define _ODP_TMPDIR "/dev/shm"
#define MEMPOOL_OPS(hdl) extern void mp_hdlr_init_##hdl(void); MEMPOOL_OPS(ops_mp_mc)
commit a52867efee17b1dc79fc17e5c7f362658e5e67f0 Author: Matias Elo matias.elo@nokia.com Date: Wed Jan 24 16:28:42 2018 +0200
Port 689145b "linux-gen: time: use true hz"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/odp_time.c b/platform/linux-dpdk/odp_time.c index 6c066a5b..2a699a03 100644 --- a/platform/linux-dpdk/odp_time.c +++ b/platform/linux-dpdk/odp_time.c @@ -119,9 +119,7 @@ static inline odp_time_t time_hw_cur(void)
static inline uint64_t time_hw_res(void) { - /* Promise a bit lower resolution than average cycle counter - * frequency */ - return global.hw_freq_hz / 10; + return global.hw_freq_hz; }
static inline uint64_t time_hw_to_ns(odp_time_t time)
commit 7ce7e25cc5e0cc748c67e7d284aa76cd80212eaf Author: Matias Elo matias.elo@nokia.com Date: Wed Jan 24 17:02:05 2018 +0200
Port 9b78da8 "build: fix 64-bit atomics detection"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/m4/configure.m4 b/platform/linux-dpdk/m4/configure.m4 index 230ef6ef..fd00e0c0 100644 --- a/platform/linux-dpdk/m4/configure.m4 +++ b/platform/linux-dpdk/m4/configure.m4 @@ -34,10 +34,11 @@ use_libatomic=no AC_MSG_CHECKING(whether -latomic is needed for 64-bit atomic built-ins) AC_LINK_IFELSE( [AC_LANG_SOURCE([[ - static int loc; + #include <stdint.h> + static uint64_t loc; int main(void) { - int prev = __atomic_exchange_n(&loc, 7, __ATOMIC_RELAXED); + uint64_t prev = __atomic_exchange_n(&loc, 7, __ATOMIC_RELAXED); return 0; } ]])],
commit 93cd75209c70c59e7469eab4f2c52085e6547854 Author: Matias Elo matias.elo@nokia.com Date: Wed Jan 24 15:34:07 2018 +0200
Port e7e9203 "build: fix conditional compilation of sources"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index ec695b98..7e0f381b 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -72,8 +72,20 @@ odpapiinclude_HEADERS = \ $(srcdir)/include/odp/api/time.h \ $(srcdir)/include/odp/api/timer.h \ $(srcdir)/include/odp/api/traffic_mngr.h \ - $(srcdir)/include/odp/api/version.h \ - $(srcdir)/arch/@ARCH_DIR@/odp/api/cpu_arch.h + $(srcdir)/include/odp/api/version.h + +if ARCH_IS_ARM +odpapiinclude_HEADERS += $(srcdir)/arch/arm/odp/api/cpu_arch.h +endif +if ARCH_IS_MIPS64 +odpapiinclude_HEADERS += $(srcdir)/arch/mips64/odp/api/cpu_arch.h +endif +if ARCH_IS_POWERPC +odpapiinclude_HEADERS += $(srcdir)/arch/powerpc/odp/api/cpu_arch.h +endif +if ARCH_IS_X86 +odpapiinclude_HEADERS += $(srcdir)/arch/x86/odp/api/cpu_arch.h +endif
odpapiplatincludedir= $(includedir)/odp/api/plat odpapiplatinclude_HEADERS = \ @@ -208,16 +220,28 @@ __LIB__libodp_dpdk_la_SOURCES = \ ../linux-generic/odp_timer_wheel.c \ ../linux-generic/odp_traffic_mngr.c \ ../linux-generic/odp_version.c \ - ../linux-generic/odp_weak.c \ - arch/@ARCH_DIR@/odp_cpu_arch.c \ - arch/@ARCH_DIR@/odp_sysinfo_parse.c - -__LIB__libodp_dpdk_la_LIBADD = $(ATOMIC_LIBS) + ../linux-generic/odp_weak.c
+if ARCH_IS_ARM +__LIB__libodp_dpdk_la_SOURCES += arch/arm/odp_cpu_arch.c \ + arch/arm/odp_sysinfo_parse.c +endif +if ARCH_IS_MIPS64 +__LIB__libodp_dpdk_la_SOURCES += arch/mips64/odp_cpu_arch.c \ + arch/mips64/odp_sysinfo_parse.c +endif +if ARCH_IS_POWERPC +__LIB__libodp_dpdk_la_SOURCES += arch/powerpc/odp_cpu_arch.c \ + arch/powerpc/odp_sysinfo_parse.c +endif if ARCH_IS_X86 -__LIB__libodp_dpdk_la_SOURCES += arch/@ARCH_DIR@/cpu_flags.c +__LIB__libodp_dpdk_la_SOURCES += arch/x86/cpu_flags.c \ + arch/x86/odp_cpu_arch.c \ + arch/x86/odp_sysinfo_parse.c endif
+__LIB__libodp_dpdk_la_LIBADD = $(ATOMIC_LIBS) + # Create symlink for ABI header files. Application does not need to use the arch # specific include path for installed files. install-data-hook:
commit 931dc39bf5e04583badc43e77ac5cd011075d83c Author: Matias Elo matias.elo@nokia.com Date: Wed Jan 24 15:14:40 2018 +0200
Port cd1f187 "linux-gen: improve conversion between buf_hdr_t and packet_t"
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/include/odp_packet_internal.h b/platform/linux-dpdk/include/odp_packet_internal.h index 481e4afb..0b8b04d6 100644 --- a/platform/linux-dpdk/include/odp_packet_internal.h +++ b/platform/linux-dpdk/include/odp_packet_internal.h @@ -145,6 +145,16 @@ static inline struct rte_mbuf *pkt_to_mbuf(odp_packet_hdr_t *pkt_hdr) return &pkt_hdr->buf_hdr.mb; }
+static inline odp_buffer_hdr_t *packet_to_buf_hdr(odp_packet_t pkt) +{ + return &odp_packet_hdr(pkt)->buf_hdr; +} + +static inline odp_packet_t packet_from_buf_hdr(odp_buffer_hdr_t *buf_hdr) +{ + return (odp_packet_t)(odp_packet_hdr_t *)buf_hdr; +} + static inline void copy_packet_parser_metadata(odp_packet_hdr_t *src_hdr, odp_packet_hdr_t *dst_hdr) {
commit 550aaa4de7928c31fd0cfe671cf0796e8626ae3c Merge: 47d2af14 bb0ca193 Author: Matias Elo matias.elo@nokia.com Date: Tue Jan 30 12:06:46 2018 +0200
Merge commit 'bb0ca193f8c28036fdf8b3d6c8aa5d4f11980e6c' of https://github.com/Linaro/odp into odp-dpdk
Signed-off-by: Matias Elo matias.elo@nokia.com
# Conflicts: # .travis.yml # configure.ac # example/Makefile.inc # pkgconfig/libodp-dpdk.pc.in # platform/linux-generic/odp_queue.c # test/Makefile.inc
diff --cc configure.ac index 001ebfc2,51dd9352..2b14f04b --- a/configure.ac +++ b/configure.ac @@@ -174,30 -189,11 +174,30 @@@ m4_include([./test/m4/configure.m4] ########################################################################## AC_ARG_WITH([sdk-install-path], AC_HELP_STRING([--with-sdk-install-path=DIR path to external libs and headers], - [(or in the default path if not specified).]), -[SDK_INSTALL_PATH=$withval SDK_INSTALL_PATH_=1],[SDK_INSTALL_PATH_=]) + [(or in the default path if not specified).]), - [SDK_INSTALL_PATH=$withval ++ [SDK_INSTALL_PATH=$withval SDK_INSTALL_PATH_=1 + DPDK_DEFAULT_DIR=0], - [DPDK_DEFAULT_DIR=1]) ++ [DPDK_DEFAULT_DIR=1 SDK_INSTALL_PATH_=])
+AC_SUBST(DPDK_DEFAULT_DIR) AC_SUBST(SDK_INSTALL_PATH)
+########################################################################## +# Run platform specific checks and settings +########################################################################## +IMPLEMENTATION_NAME="" - if test "${with_platform}" == "linux-dpdk"; ++if test "${with_platform}" = "linux-dpdk"; +then + m4_include([./platform/linux-dpdk/m4/configure.m4]) + m4_include([./test/linux-dpdk/m4/configure.m4]) + IMPLEMENTATION_NAME="odp-dpdk" +else + echo "UNSUPPORTED PLATFORM: ${with_platform}" + exit 1 +fi + +ODP_CFLAGS="$ODP_CFLAGS -DIMPLEMENTATION_NAME=$IMPLEMENTATION_NAME" + ########################################################################## # Set the install directory for test binaries/scripts ########################################################################## @@@ -213,10 -209,7 +213,8 @@@ AC_SUBST([testdir] ########################################################################## # Set conditionals as computed within platform specific files ########################################################################## - AM_CONDITIONAL([netmap_support], [test x$netmap_support = xyes ]) - AM_CONDITIONAL([PKTIO_DPDK], [test x$pktio_dpdk_support = xyes ]) - AM_CONDITIONAL([HAVE_PCAP], [test $have_pcap = yes]) +AM_CONDITIONAL([DPDK_DEFAULT_DIR], [test "x${DPDK_DEFAULT_DIR}" = "x1"]) + AM_CONDITIONAL([SDK_INSTALL_PATH_], [test "x${SDK_INSTALL_PATH_}" = "x1"]) AM_CONDITIONAL([test_installdir], [test "$testdir" != ""]) AM_CONDITIONAL([cunit_support], [test x$cunit_support = xyes ]) AM_CONDITIONAL([test_vald], [test x$test_vald = xyes ]) diff --cc example/Makefile.inc index bdbeb82a,c6d7ff5f..3a2c72d1 --- a/example/Makefile.inc +++ b/example/Makefile.inc @@@ -1,6 -1,6 +1,6 @@@ include $(top_srcdir)/platform/@with_platform@/Makefile.inc LIB = $(top_builddir)/lib - LDADD = $(LIB)/libodp-dpdk.la $(LIB)/libodphelper.la -LDADD = $(LIB)/libodp-linux.la $(LIB)/libodphelper.la $(DPDK_PMDS) ++LDADD = $(LIB)/libodp-dpdk.la $(LIB)/libodphelper.la $(DPDK_PMDS) AM_CFLAGS += \ -I$(srcdir) \ -I$(top_srcdir)/example \ diff --cc pkgconfig/libodp-dpdk.pc.in index 23804b0f,00000000..2b9c5e21 mode 100644,000000..100644 --- a/pkgconfig/libodp-dpdk.pc.in +++ b/pkgconfig/libodp-dpdk.pc.in @@@ -1,11 -1,0 +1,11 @@@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: libodp-dpdk +Description: The ODP packet processing engine +Version: @PKGCONFIG_VERSION@ - Libs: -L${libdir} -lodp-dpdk - Libs.private: @ATOMIC_LIBS@ ++Libs: -L${libdir} -lodp-dpdk @DPDK_LIBS@ ++Libs.private: @OPENSSL_STATIC_LIBS@ @DPDK_PMDS@ @DPDK_LIBS@ @PTHREAD_LIBS@ @TIMER_LIBS@ -lpthread @ATOMIC_LIBS@ +Cflags: -I${includedir} diff --cc test/Makefile.inc index 063b04b0,0fbc3c42..b39e5300 --- a/test/Makefile.inc +++ b/test/Makefile.inc @@@ -4,7 -4,7 +4,7 @@@ LIB = $(top_builddir)/li #in the following line, the libs using the symbols should come before #the libs containing them! The includer is given a chance to add things #before libodp by setting PRE_LDADD before the inclusion. - LDADD = $(PRE_LDADD) $(LIB)/libodphelper.la $(LIB)/libodp-dpdk.la -LDADD = $(PRE_LDADD) $(LIB)/libodphelper.la $(LIB)/libodp-linux.la $(DPDK_PMDS) ++LDADD = $(PRE_LDADD) $(LIB)/libodphelper.la $(LIB)/libodp-dpdk.la $(DPDK_PMDS)
INCFLAGS = \ -I$(top_builddir)/platform/@with_platform@/include \
commit 47d2af149156e3918ec97f414769b5710f8e60d2 Author: Matias Elo matias.elo@nokia.com Date: Tue Jan 23 17:03:49 2018 +0200
travis: enable testing with odp-dpdk
Modify configuration file to enable running Travis tests. Distcheck is not yet supported.
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/.travis.yml b/.travis.yml index 50b3b9c2..09645a13 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,6 +10,8 @@ language: c sudo: required dist: trusty +notifications: + email: false env: global: # COVERITY_SCAN_TOKEN @@ -19,7 +21,7 @@ env: # The secure key to be filled below is the 685 character long encrypted # token you can find as follow from your coverity dashboard # (at https://scan.coverity.com/dashboard): - # Click on the github project (<you>/odp) + # Click on the github project (<you>/odp-dpdk) # Click on "submit build" # Click on "Configure Travis CI" # Look at the COVERITY_SCAN_TOKEN in the env: global: section @@ -35,25 +37,27 @@ env:
addons: apt: - sources: - - ubuntu-toolchain-r-test - - llvm-toolchain-precise-3.8 packages: - gcc - - clang-3.8 - - automake autoconf autoconf-archive libtool libssl-dev graphviz mscgen doxygen + - automake autoconf autoconf-archive libtool graphviz mscgen doxygen + - codespell + - libssl-dev - libpcap-dev # coverity_scan: # project: # name: "$TRAVIS_REPO_SLUG" # notification_email: xxxx -# build_command_prepend: "./bootstrap && ./configure --enable-test-cpp --enable-test-vald --enable-test-helper --enable-test-perf --enable-user-guides --enable-test-perf-proc --enable-test-example" +# build_command_prepend: "./bootstrap && ./configure --enable-test-cpp --enable-test-vald --enable-test-helper --enable-test-perf --enable-user-guides --enable-test-example" # build_command: "make" # branch_pattern: coverity_scan
compiler: - gcc - - clang-3.8 + +cache: + pip: true + directories: + - dpdk
env: - CONF="" @@ -61,65 +65,68 @@ env: - CONF="--enable-schedule-sp" - CONF="--enable-schedule-iquery"
-install: - - echo 1000 | sudo tee /proc/sys/vm/nr_hugepages - - sudo mkdir -p /mnt/huge - - sudo mount -t hugetlbfs nodev /mnt/huge +before_install: +# Install cunit for the validation tests because distro version is too old and fails C99 compile + - sudo apt-get remove libcunit1-dev libcunit1 + - wget http://ftp.debian.org/debian/pool/main/c/cunit/libcunit1_2.1-3-dfsg-2_amd64.... + - wget http://ftp.debian.org/debian/pool/main/c/cunit/libcunit1-dev_2.1-3-dfsg-2_am... + - sudo dpkg -i libcunit1_2.1-3-dfsg-2_amd64.deb libcunit1-dev_2.1-3-dfsg-2_amd64.deb
+install: - sudo apt-get -qq update - sudo apt-get install linux-headers-`uname -r` - - sudo pip install coverage - gem install asciidoctor - - PATH=${PATH//:./node_modules/.bin/} - -# Install cunit for the validation tests because distro version is too old and fails C99 compile - - sudo apt-get remove libcunit1-dev libcunit1 - - export CUNIT_VERSION=2.1-3 - - curl -sSOL https://github.com/Linaro/libcunit/releases/download/%24%7BCUNIT_VERSION%7D/... - - tar -jxf *.bz2 - - pushd CUnit* - - ./bootstrap - - ./configure --enable-debug --enable-automated --enable-basic --enable-console --enable-examples --enable-test - - make - - sudo make install - - popd - - export LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH"
-# DPDK pktio - - TARGET=${TARGET:-"x86_64-native-linuxapp-gcc"} - - git -c advice.detachedHead=false clone -q --depth=1 --single-branch --branch=v17.02 http://dpdk.org/git/dpdk dpdk - - pushd dpdk - - git log --oneline --decorate - - make config T=${TARGET} O=${TARGET} - - pushd ${TARGET} - - sed -ri 's,(CONFIG_RTE_LIBRTE_PMD_PCAP=).*,\1y,' .config - - popd - - make install T=${TARGET} EXTRA_CFLAGS="-fPIC" - - popd - -# Netmap pktio - - git -c advice.detachedHead=false clone -q --depth=1 --single-branch --branch=v11.2 https://github.com/luigirizzo/netmap.git - - pushd netmap/LINUX - - ./configure - - make - - sudo insmod ./netmap.ko - - popd + # DPDK. Note that cache must be purged if dpdk version changes. + - DPDK_VERS="17.02" + - | + CACHED_DPDK_VERS=`fgrep Version dpdk/pkg/dpdk.spec | cut -d " " -f 2` + if [ "${CACHED_DPDK_VERS}" != "${DPDK_VERS}" ]; then + rm -rf dpdk + fi + - TARGET="x86_64-native-linuxapp-gcc" + - DPDK_MACHINE=snb + - | + if [ -n "$TARGET" -a ! -f "dpdk/${TARGET}/lib/libdpdk.a" ]; then + git -c advice.detachedHead=false clone -q --depth=1 --single-branch --branch=v${DPDK_VERS} http://dpdk.org/git/dpdk dpdk + pushd dpdk + git log --oneline --decorate + echo $CC + make config T=${TARGET} O=${TARGET} + pushd ${TARGET} + sed -ri 's,(CONFIG_RTE_LIBRTE_PMD_PCAP=).*,\1y,' .config + sed -ri 's,(CONFIG_RTE_LIBRTE_PMD_OPENSSL=).*,\1y,' .config + cat .config |grep RTE_MACHINE + if test -n "${DPDK_MACHINE}" ; then + sed -ri 's,(CONFIG_RTE_MACHINE=).*,\1"'${DPDK_MACHINE}'",' .config + fi + popd + make install T=${TARGET} EXTRA_CFLAGS="-fPIC $DPDK_CFLAGS" + rm -r ./doc ./${TARGET}/app ./${TARGET}/build + popd + EXTRA_CONF="$EXTRA_CONF --with-dpdk-path=`pwd`/dpdk/${TARGET}" + fi
script: - ./bootstrap - - ./configure --prefix=$HOME/odp-install --enable-test-cpp --enable-test-vald --enable-test-helper --enable-test-perf --enable-user-guides --enable-test-perf-proc --enable-test-example --with-dpdk-path=`pwd`/dpdk/${TARGET} --with-netmap-path=`pwd`/netmap $CONF + - ./configure --prefix=$HOME/odp-install --enable-test-cpp --enable-test-vald --enable-test-helper --enable-test-perf --enable-user-guides --enable-test-example --with-sdk-install-path=`pwd`/dpdk/${TARGET} $CONF - make -j $(nproc) - sudo LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH" make check - make install
+ # Wrapper-script.sh unmounts huge pages after make check + - echo 1000 | sudo tee /proc/sys/vm/nr_hugepages + - sudo mkdir -p /mnt/huge + - sudo mount -t hugetlbfs nodev /mnt/huge + - echo "Checking linking and run from install..." - pushd $HOME - echo "Dynamic link.." - - ${CC} ${OLDPWD}/example/hello/odp_hello.c -o odp_hello_inst -I${HOME}/odp-install/include -L${HOME}/odp-install/lib -lodp-linux -L${OLDPWD}/dpdk/x86_64-native-linuxapp-gcc/lib -lrt -ldpdk -lpthread -lcrypto -lpcap -ldl - - LD_LIBRARY_PATH="${HOME}/odp-install/lib:$LD_LIBRARY_PATH" ./odp_hello_inst + - ${CC} ${OLDPWD}/example/hello/odp_hello.c -o odp_hello_inst -I${OLDPWD}/dpdk/x86_64-native-linuxapp-gcc/include -I${HOME}/odp-install/include -L${HOME}/odp-install/lib -lodp-dpdk -L${OLDPWD}/dpdk/x86_64-native-linuxapp-gcc/lib -lrt -msse4.2 -ldpdk -lpthread -lcrypto -lpcap -ldl + - sudo ODP_PLATFORM_PARAMS="-n 2" LD_LIBRARY_PATH="${HOME}/odp-install/lib:$LD_LIBRARY_PATH" ./odp_hello_inst - echo "Static link.." - - ${CC} ${OLDPWD}/example/hello/odp_hello.c -o odp_hello_inst -I${HOME}/odp-install/include -L${HOME}/odp-install/lib -lodp-linux -L${OLDPWD}/dpdk/x86_64-native-linuxapp-gcc/lib -lrt -ldpdk -lpthread -lcrypto -lpcap -ldl -static - - ./odp_hello_inst + - ${CC} ${OLDPWD}/example/hello/odp_hello.c -o odp_hello_inst -I${OLDPWD}/dpdk/x86_64-native-linuxapp-gcc/include -I${HOME}/odp-install/include -L${HOME}/odp-install/lib -lodp-dpdk -L${OLDPWD}/dpdk/x86_64-native-linuxapp-gcc/lib -lrt -msse4.2 -ldpdk -lpthread -lcrypto -lpcap -ldl -lm -static + - sudo ODP_PLATFORM_PARAMS="-n 2" ./odp_hello_inst
jobs: include: @@ -127,34 +134,36 @@ jobs: env: TEST=coverage compiler: gcc script: + - sudo -H pip install coverage - ./bootstrap - - ./configure --prefix=$HOME/odp-install --enable-test-cpp --enable-test-vald --enable-test-helper --enable-test-perf --enable-user-guides --enable-test-perf-proc --enable-test-example --with-dpdk-path=`pwd`/dpdk/${TARGET} --with-netmap-path=`pwd`/netmap CFLAGS="-O0 -coverage" CXXFLAGS="-O0 -coverage" LDFLAGS="--coverage" + - ./configure --prefix=$HOME/odp-install --enable-test-cpp --enable-test-vald --enable-test-helper --enable-test-perf --enable-user-guides --enable-test-example --with-sdk-install-path=`pwd`/dpdk/${TARGET} CFLAGS="-O0 -coverage" CXXFLAGS="-O0 -coverage" LDFLAGS="--coverage" - sudo LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH" PATH=${PATH//:./node_modules/.bin/} make check - find . -type f -iname '*.[ch]' -not -path ".git/*" -execdir gcov {} ; ; bash <(curl -s https://codecov.io/bash) -X coveragepy - - stage: test - env: TEST=distcheck - compiler: gcc - script: - - ./bootstrap - - ./configure - - sudo LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH" make distcheck - stage: test env: TEST=doxygen compiler: gcc script: - # doxygen does not trap on warnings, check for them here. - ./bootstrap - - ./configure - - make doxygen-doc |tee doxygen.log - - fgrep -rvq warning ./doxygen.log + - ./configure --with-sdk-install-path=`pwd`/dpdk/${TARGET} + # doxygen does not trap on warnings, check for them here. + - make doxygen-doc 2>&1 |tee doxygen.log + - | + fgrep -rq warning ./doxygen.log + if [ $? -eq 0 ]; then + false + else + true + fi - stage: test env: TEST=checkpatch compiler: gcc + install: + - true script: - echo ${TRAVIS_COMMIT_RANGE}; - ODP_PATCHES=`echo ${TRAVIS_COMMIT_RANGE} | sed 's/.//'`; - - if [ -z "${ODP_PATCHES}" ]; then env; exit 1; fi; - ./scripts/ci-checkpatches.sh ${ODP_PATCHES};
after_failure: + - cat config.log - find . -name 'test-suite.log' -execdir grep -il "FAILED" {} ; -exec echo {} ; -exec cat {} ;
commit 99aac866619b6ee565ee219f3224d86be125a7df Author: Szymon Sliwa szymon.sliwa@linaro.org Date: Fri Jan 5 14:38:55 2018 +0100
linux-dpdk: crypto: fix typo in auth capability
Signed-off-by: Szymon Sliwa szymon.sliwa@linaro.org Reviewed-by: Balakrishna Garapati balakrishna.garapati@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_crypto.c b/platform/linux-dpdk/odp_crypto.c index a0848e43..ac8aee95 100644 --- a/platform/linux-dpdk/odp_crypto.c +++ b/platform/linux-dpdk/odp_crypto.c @@ -623,7 +623,7 @@ int odp_crypto_auth_capability(odp_auth_alg_t auth, while (cap->op != RTE_CRYPTO_OP_TYPE_UNDEFINED) { cap_auth_algo = cap->sym.auth.algo; if (cap->sym.xform_type == - RTE_CRYPTO_SYM_XFORM_CIPHER) { + RTE_CRYPTO_SYM_XFORM_AUTH) { if (cap_auth_algo == auth_xform.auth.algo) break; }
commit 27045174f3aa717d9d1a055950cb138caccb9cfd Author: Szymon Sliwa szymon.sliwa@linaro.org Date: Fri Jan 5 14:11:08 2018 +0100
linux-dpdk: crypto: fix infinite loop
In odp_crypto.c, if increment == 0, is_valid_size loops indefinitely
Signed-off-by: Szymon Sliwa szymon.sliwa@linaro.org Reviewed-by: Balakrishna Garapati balakrishna.garapati@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/odp_crypto.c b/platform/linux-dpdk/odp_crypto.c index 1126a790..a0848e43 100644 --- a/platform/linux-dpdk/odp_crypto.c +++ b/platform/linux-dpdk/odp_crypto.c @@ -72,6 +72,9 @@ static inline int is_valid_size(uint16_t length, uint16_t min, if (length < supp_size) return -1;
+ if (supp_size != length && increment == 0) + return -1; + for (; supp_size <= max; supp_size += increment) { if (length == supp_size) return 0;
commit e28bb9519b1bfeee78b26170c64eeb0a5aef9a51 Author: Matias Elo matias.elo@nokia.com Date: Mon Oct 30 15:39:50 2017 +0200
linux-dpdk: shm: use native dpdk memzones
Replace odp-linux shared memory implementation with native DPDK memzones.
Signed-off-by: Matias Elo matias.elo@nokia.com Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index c1497f0f..ec695b98 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -121,9 +121,6 @@ odpdrvinclude_HEADERS = \ $(srcdir)/include/odp/drv/compiler.h
noinst_HEADERS = \ - ${top_srcdir}/platform/linux-generic/include/_fdserver_internal.h \ - ${top_srcdir}/platform/linux-generic/include/_ishm_internal.h \ - ${top_srcdir}/platform/linux-generic/include/_ishmphy_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_align_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_atomic_internal.h \ ${srcdir}/include/odp_buffer_inlines.h \ @@ -154,7 +151,7 @@ noinst_HEADERS = \ ${top_srcdir}/platform/linux-generic/include/odp_ring_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_schedule_if.h \ ${top_srcdir}/platform/linux-generic/include/odp_sorted_list_internal.h \ - ${top_srcdir}/platform/linux-generic/include/odp_shm_internal.h \ + ${srcdir}/include/odp_shm_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_time_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_timer_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_timer_wheel_internal.h \ @@ -167,9 +164,6 @@ noinst_HEADERS = \ ${srcdir}/Makefile.inc
__LIB__libodp_dpdk_la_SOURCES = \ - ../linux-generic/_fdserver.c \ - ../linux-generic/_ishm.c \ - ../linux-generic/_ishmphy.c \ ../linux-generic/odp_atomic.c \ ../linux-generic/odp_barrier.c \ ../linux-generic/odp_bitmap.c \ @@ -199,7 +193,7 @@ __LIB__libodp_dpdk_la_SOURCES = \ ../linux-generic/odp_schedule.c \ ../linux-generic/odp_schedule_if.c \ ../linux-generic/odp_schedule_iquery.c \ - ../linux-generic/odp_shared_memory.c \ + odp_shared_memory.c \ ../linux-generic/odp_sorted_list.c \ ../linux-generic/odp_spinlock.c \ ../linux-generic/odp_spinlock_recursive.c \ diff --git a/platform/linux-dpdk/include/odp_shm_internal.h b/platform/linux-dpdk/include/odp_shm_internal.h new file mode 100644 index 00000000..072a4f1c --- /dev/null +++ b/platform/linux-dpdk/include/odp_shm_internal.h @@ -0,0 +1,32 @@ +/* Copyright (c) 2017, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/** + * @file + * + * ODP shared memory - implementation internal + */ + +#ifndef ODP_SHM_INTERNAL_H_ +#define ODP_SHM_INTERNAL_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +int _odp_shm_init_global(void); + +int _odp_shm_init_local(void); + +int _odp_shm_term_global(void); + +int _odp_shm_term_local(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/platform/linux-dpdk/odp_init.c b/platform/linux-dpdk/odp_init.c index 6cea393b..fdd9d438 100644 --- a/platform/linux-dpdk/odp_init.c +++ b/platform/linux-dpdk/odp_init.c @@ -12,6 +12,7 @@ #include <unistd.h> #include <odp_internal.h> #include <odp_schedule_if.h> +#include <odp_shm_internal.h> #include <string.h> #include <stdio.h> #include <linux/limits.h> @@ -238,14 +239,8 @@ int odp_init_global(odp_instance_t *instance, cleanup_files(hpdir, odp_global_data.main_pid); stage = SYSINFO_INIT;
- if (_odp_fdserver_init_global()) { - ODP_ERR("ODP fdserver init failed.\n"); - goto init_failed; - } - stage = FDSERVER_INIT; - - if (_odp_ishm_init_global()) { - ODP_ERR("ODP ishm init failed.\n"); + if (_odp_shm_init_global()) { + ODP_ERR("ODP shm init failed.\n"); goto init_failed; } stage = ISHM_INIT; @@ -405,19 +400,13 @@ int _odp_term_global(enum init_stage stage) /* Fall through */
case ISHM_INIT: - if (_odp_ishm_term_global()) { - ODP_ERR("ODP ishm term failed.\n"); + if (_odp_shm_term_global()) { + ODP_ERR("ODP shm term failed.\n"); rc = -1; } /* Fall through */ - + /* Needed to prevent compiler warning */ case FDSERVER_INIT: - if (_odp_fdserver_term_global()) { - ODP_ERR("ODP fdserver term failed.\n"); - rc = -1; - } - /* Fall through */ - case SYSINFO_INIT: if (odp_system_info_term()) { ODP_ERR("ODP system info term failed.\n"); @@ -455,8 +444,8 @@ int odp_init_local(odp_instance_t instance, odp_thread_type_t thr_type) goto init_fail; }
- if (_odp_ishm_init_local()) { - ODP_ERR("ODP ishm local init failed.\n"); + if (_odp_shm_init_local()) { + ODP_ERR("ODP shm local init failed.\n"); goto init_fail; } stage = ISHM_INIT; @@ -531,8 +520,8 @@ int _odp_term_local(enum init_stage stage) /* Fall through */
case ISHM_INIT: - if (_odp_ishm_term_local()) { - ODP_ERR("ODP ishm local term failed.\n"); + if (_odp_shm_term_local()) { + ODP_ERR("ODP shm local term failed.\n"); rc = -1; } /* Fall through */ diff --git a/platform/linux-dpdk/odp_shared_memory.c b/platform/linux-dpdk/odp_shared_memory.c new file mode 100644 index 00000000..5af02f42 --- /dev/null +++ b/platform/linux-dpdk/odp_shared_memory.c @@ -0,0 +1,441 @@ +/* Copyright (c) 2017, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include <odp_align_internal.h> +#include <odp_config_internal.h> +#include <odp/api/debug.h> +#include <odp_debug_internal.h> +#include <odp/api/shared_memory.h> +#include <odp/api/spinlock.h> +#include <odp/api/plat/strong_types.h> +#include <odp_shm_internal.h> +#include <string.h> +#include <sys/mman.h> +#include <sys/syscall.h> +#include <unistd.h> +#include <inttypes.h> + +#include <rte_lcore.h> +#include <rte_memzone.h> + +#define SHM_MAX_ALIGN (0x80000000) +#define SHM_BLOCK_NAME "%" PRIu64 "-%d-%s" + +ODP_STATIC_ASSERT(ODP_CONFIG_SHM_BLOCKS >= ODP_CONFIG_POOLS, + "ODP_CONFIG_SHM_BLOCKS < ODP_CONFIG_POOLS"); + +ODP_STATIC_ASSERT(ODP_SHM_NAME_LEN >= RTE_MEMZONE_NAMESIZE, + "ODP_SHM_NAME_LEN < RTE_MEMZONE_NAMESIZE"); + +typedef enum { + SHM_TYPE_LOCAL = 0, + SHM_TYPE_REMOTE +} shm_type_t; + +/** + * Memory zone descriptor + * + * This struct is stored inside DPDK memzone to make it available for + * odp_shm_import(). + */ +typedef struct { + /* Shared memory flags */ + uint32_t flags; +} shm_zone_t; + +/** + * Memory block descriptor + */ +typedef struct { + /* Memory block type */ + shm_type_t type; + /* Memory block name */ + char name[ODP_SHM_NAME_LEN]; + /* DPDK memzone. If this pointer != NULL, the shm block is interpreted + * as reserved. */ + const struct rte_memzone *mz; +} shm_block_t; + +/** + * Table of blocks describing allocated shared memory. This table is visible to + * every ODP thread (linux process or pthreads). It is allocated shared at odp + * init time and is therefore inherited by all. + */ +typedef struct { + odp_spinlock_t lock; + shm_block_t block[ODP_CONFIG_SHM_BLOCKS]; +} shm_table_t; + +static shm_table_t *shm_tbl; + +/** + * Check if DPDK memzone name has been used already + */ +static odp_bool_t mz_name_used(const char *name) +{ + int idx; + + for (idx = 0; idx < ODP_CONFIG_SHM_BLOCKS; idx++) { + if (shm_tbl->block[idx].mz && + strncmp(name, shm_tbl->block[idx].mz->name, + RTE_MEMZONE_NAMESIZE) == 0) + return 1; + } + return 0; +} + +/** + * Convert ODP shm name into unique DPDK memzone name + */ +static void name_to_mz_name(const char *name, char *mz_name) +{ + int i = 0; + + /* Use pid and counter to make name unique */ + do { + snprintf(mz_name, RTE_MEMZONE_NAMESIZE - 1, SHM_BLOCK_NAME, + (odp_instance_t)odp_global_data.main_pid, i++, name); + mz_name[RTE_MEMZONE_NAMESIZE - 1] = 0; + } while (mz_name_used(mz_name)); +} + +/** + * Convert DPDK memzone length into ODP shm block size + */ +static uint64_t shm_size(const struct rte_memzone *mz) +{ + return mz->len - sizeof(shm_zone_t); +} + +/** + * Return a pointer to shm zone descriptor stored at the end of DPDK memzone + */ +static shm_zone_t *shm_zone(const struct rte_memzone *mz) +{ + return (shm_zone_t *)((uint8_t *)mz->addr + shm_size(mz)); +} + +static int find_free_block(void) +{ + int idx; + + for (idx = 0; idx < ODP_CONFIG_SHM_BLOCKS; idx++) { + if (shm_tbl->block[idx].mz == NULL) + return idx; + } + return -1; +} + +static inline uint32_t handle_to_idx(odp_shm_t shm) +{ + return _odp_typeval(shm) - 1; +} + +static inline odp_shm_t idx_to_handle(uint32_t idx) +{ + return _odp_cast_scalar(odp_shm_t, idx + 1); +} + +static inline odp_bool_t handle_is_valid(odp_shm_t shm) +{ + int idx = handle_to_idx(shm); + + if (idx < 0 || idx >= ODP_CONFIG_SHM_BLOCKS || + shm_tbl->block[idx].mz == NULL) { + ODP_ERR("Invalid odp_shm_t handle: %" PRIu64 "\n", + odp_shm_to_u64(shm)); + return 0; + } + return 1; +} + +int _odp_shm_init_global(void) +{ + void *addr; + + if ((getpid() != odp_global_data.main_pid) || + (syscall(SYS_gettid) != getpid())) { + ODP_ERR("shm_init_global() must be performed by the main " + "ODP process!\n."); + return -1; + } + + /* Allocate space for the internal shared mem block table */ + addr = mmap(NULL, sizeof(shm_table_t), PROT_READ | PROT_WRITE, + MAP_SHARED | MAP_ANONYMOUS, -1, 0); + if (addr == MAP_FAILED) { + ODP_ERR("Unable to mmap the shm block table\n"); + return -1; + } + + shm_tbl = addr; + memset(shm_tbl, 0, sizeof(shm_table_t)); + + odp_spinlock_init(&shm_tbl->lock); + + return 0; +} + +int _odp_shm_init_local(void) +{ + return 0; +} + +int _odp_shm_term_global(void) +{ + shm_block_t *block; + int idx; + + if ((getpid() != odp_global_data.main_pid) || + (syscall(SYS_gettid) != getpid())) { + ODP_ERR("shm_term_global() must be performed by the main " + "ODP process!\n."); + return -1; + } + + /* Cleanup possibly non freed memory (and complain a bit) */ + for (idx = 0; idx < ODP_CONFIG_SHM_BLOCKS; idx++) { + block = &shm_tbl->block[idx]; + if (block->mz) { + ODP_ERR("block '%s' was never freed (cleaning up...)\n", + block->name); + rte_memzone_free(block->mz); + } + } + /* Free the shared memory block table */ + if (munmap(shm_tbl, sizeof(shm_table_t)) < 0) { + ODP_ERR("Unable to munmap the shm block table\n"); + return -1; + } + return 0; +} + +int _odp_shm_term_local(void) +{ + return 0; +} + +int odp_shm_capability(odp_shm_capability_t *capa) +{ + memset(capa, 0, sizeof(odp_shm_capability_t)); + + capa->max_blocks = ODP_CONFIG_SHM_BLOCKS; + capa->max_size = 0; + capa->max_align = SHM_MAX_ALIGN; + + return 0; +} + +odp_shm_t odp_shm_reserve(const char *name, uint64_t size, uint64_t align, + uint32_t flags) +{ + shm_block_t *block; + const struct rte_memzone *mz; + char mz_name[RTE_MEMZONE_NAMESIZE]; + uint32_t mz_flags = RTE_MEMZONE_1GB | RTE_MEMZONE_SIZE_HINT_ONLY; + int idx; + + if (align > SHM_MAX_ALIGN) { + ODP_ERR("Align too large: %" PRIu64 "\n", align); + return ODP_SHM_INVALID; + } + + /* DPDK requires alignment to be power of two */ + if (!rte_is_power_of_2(align)) + align = ROUNDUP_POWER2_U32(align); + + odp_spinlock_lock(&shm_tbl->lock); + + idx = find_free_block(); + if (idx < 0) { + odp_spinlock_unlock(&shm_tbl->lock); + ODP_ERR("No free SHM blocks left\n"); + return ODP_SHM_INVALID; + } + block = &shm_tbl->block[idx]; + + /* DPDK requires unique memzone names */ + name_to_mz_name(name, mz_name); + /* Reserve extra space for storing shm zone descriptor */ + mz = rte_memzone_reserve_aligned(mz_name, size + sizeof(shm_zone_t), + rte_socket_id(), mz_flags, align); + if (mz == NULL) { + odp_spinlock_unlock(&shm_tbl->lock); + ODP_ERR("Reserving DPDK memzone failed\n"); + return ODP_SHM_INVALID; + } + + block->mz = mz; + snprintf(block->name, ODP_SHM_NAME_LEN - 1, "%s", name); + block->name[ODP_SHM_NAME_LEN - 1] = 0; + block->type = SHM_TYPE_LOCAL; + /* Note: ODP_SHM_SW_ONLY/ODP_SHM_PROC/ODP_SHM_SINGLE_VA flags are + * currently ignored. */ + shm_zone(mz)->flags = flags; + + odp_spinlock_unlock(&shm_tbl->lock); + + return idx_to_handle(idx); +} + +odp_shm_t odp_shm_import(const char *remote_name, odp_instance_t odp_inst, + const char *local_name) +{ + shm_block_t *block; + const struct rte_memzone *mz; + char mz_name[RTE_MEMZONE_NAMESIZE]; + int idx; + + snprintf(mz_name, RTE_MEMZONE_NAMESIZE - 1, SHM_BLOCK_NAME, odp_inst, 0, + remote_name); + mz_name[RTE_MEMZONE_NAMESIZE - 1] = 0; + + mz = rte_memzone_lookup(mz_name); + if (mz == NULL) { + ODP_ERR("Unable to find remote SHM block: %s\n", remote_name); + return ODP_SHM_INVALID; + } + + if (!(shm_zone(mz)->flags & ODP_SHM_EXPORT)) { + ODP_ERR("Not exported SHM block!\n"); + return ODP_SHM_INVALID; + } + + odp_spinlock_lock(&shm_tbl->lock); + + idx = find_free_block(); + if (idx < 0) { + odp_spinlock_unlock(&shm_tbl->lock); + ODP_ERR("No free SHM blocks left\n"); + return ODP_SHM_INVALID; + } + block = &shm_tbl->block[idx]; + + block->mz = mz; + snprintf(block->name, ODP_SHM_NAME_LEN - 1, "%s", local_name); + block->name[ODP_SHM_NAME_LEN - 1] = 0; + block->type = SHM_TYPE_REMOTE; + + odp_spinlock_unlock(&shm_tbl->lock); + + return idx_to_handle(idx); +} + +int odp_shm_free(odp_shm_t shm) +{ + shm_block_t *block; + int ret = 0; + + odp_spinlock_lock(&shm_tbl->lock); + + if (!handle_is_valid(shm)) { + odp_spinlock_unlock(&shm_tbl->lock); + return -1; + } + + block = &shm_tbl->block[handle_to_idx(shm)]; + + /* Only the creator of memzone can free it */ + if (block->type == SHM_TYPE_LOCAL) + ret = rte_memzone_free(block->mz); + + block->mz = NULL; + + odp_spinlock_unlock(&shm_tbl->lock); + + return ret; +} + +odp_shm_t odp_shm_lookup(const char *name) +{ + int idx; + + odp_spinlock_lock(&shm_tbl->lock); + + for (idx = 0; idx < ODP_CONFIG_SHM_BLOCKS; idx++) { + if (shm_tbl->block[idx].mz && + strncmp(name, shm_tbl->block[idx].name, + ODP_SHM_NAME_LEN) == 0) { + odp_spinlock_unlock(&shm_tbl->lock); + return idx_to_handle(idx); + } + } + + odp_spinlock_unlock(&shm_tbl->lock); + + return ODP_SHM_INVALID; +} + +void *odp_shm_addr(odp_shm_t shm) +{ + void *addr; + + odp_spinlock_lock(&shm_tbl->lock); + + if (!handle_is_valid(shm)) { + odp_spinlock_unlock(&shm_tbl->lock); + return NULL; + } + + addr = shm_tbl->block[handle_to_idx(shm)].mz->addr; + + odp_spinlock_unlock(&shm_tbl->lock); + + return addr; +} + +int odp_shm_info(odp_shm_t shm, odp_shm_info_t *info) +{ + shm_block_t *block; + int idx = handle_to_idx(shm); + + odp_spinlock_lock(&shm_tbl->lock); + + if (!handle_is_valid(shm)) { + odp_spinlock_unlock(&shm_tbl->lock); + return -1; + } + + block = &shm_tbl->block[idx]; + + memset(info, 0, sizeof(odp_shm_info_t)); + + info->name = block->name; + info->addr = block->mz->addr; + info->size = shm_size(block->mz); + info->page_size = block->mz->hugepage_sz; + info->flags = shm_zone(block->mz)->flags; + + odp_spinlock_unlock(&shm_tbl->lock); + + return 0; +} + +void odp_shm_print_all(void) +{ + shm_block_t *block; + int idx; + + odp_spinlock_lock(&shm_tbl->lock); + + printf("\nShared memory blocks\n--------------------\n"); + + for (idx = 0; idx < ODP_CONFIG_SHM_BLOCKS; idx++) { + block = &shm_tbl->block[idx]; + if (block->mz == NULL) + continue; + printf(" %s: addr: %p, len: %" PRIu64 " page size: " + "%" PRIu64 "\n", block->name, block->mz->addr, + shm_size(block->mz), block->mz->hugepage_sz); + } + + odp_spinlock_unlock(&shm_tbl->lock); +} + +uint64_t odp_shm_to_u64(odp_shm_t hdl) +{ + return _odp_pri(hdl); +} diff --git a/test/common_plat/validation/api/shmem/shmem.c b/test/common_plat/validation/api/shmem/shmem.c index 0e757a70..9a54ecc2 100644 --- a/test/common_plat/validation/api/shmem/shmem.c +++ b/test/common_plat/validation/api/shmem/shmem.c @@ -96,8 +96,8 @@ static int run_test_basic_thread(void *arg ODP_UNUSED) CU_ASSERT(0 == info.flags); CU_ASSERT(shared_test_data == info.addr); CU_ASSERT(sizeof(shared_test_data_t) <= info.size); - CU_ASSERT((info.page_size == odp_sys_huge_page_size()) || - (info.page_size == odp_sys_page_size())) + CU_ASSERT(info.page_size > 0); + odp_shm_print_all();
fflush(stdout);
commit 68bc4b3b9a3589c556d6d04a442dda057eb02853 Author: Szymon Sliwa szymon.sliwa@linaro.org Date: Fri Jan 5 14:38:55 2018 +0100
linux-dpdk: crypto: Fix typo in auth capability
Signed-off-by: Szymon Sliwa szymon.sliwa@linaro.org Reviewed-by: Balakrishna Garapati balakrishna.garapati@linaro.org
diff --git a/platform/linux-dpdk/odp_crypto.c b/platform/linux-dpdk/odp_crypto.c index a0848e43..ac8aee95 100644 --- a/platform/linux-dpdk/odp_crypto.c +++ b/platform/linux-dpdk/odp_crypto.c @@ -623,7 +623,7 @@ int odp_crypto_auth_capability(odp_auth_alg_t auth, while (cap->op != RTE_CRYPTO_OP_TYPE_UNDEFINED) { cap_auth_algo = cap->sym.auth.algo; if (cap->sym.xform_type == - RTE_CRYPTO_SYM_XFORM_CIPHER) { + RTE_CRYPTO_SYM_XFORM_AUTH) { if (cap_auth_algo == auth_xform.auth.algo) break; }
commit 109650ed3d939dad74fbfd0fdfbb5bbcea076b6c Author: Szymon Sliwa szymon.sliwa@linaro.org Date: Fri Jan 5 14:11:08 2018 +0100
linux-dpdk: crypto: Fix infinite loop
In odp_crypto.c, if increment == 0, is_valid_size loops indefinitely
Signed-off-by: Szymon Sliwa szymon.sliwa@linaro.org Reviewed-by: Balakrishna Garapati balakrishna.garapati@linaro.org
diff --git a/platform/linux-dpdk/odp_crypto.c b/platform/linux-dpdk/odp_crypto.c index 1126a790..a0848e43 100644 --- a/platform/linux-dpdk/odp_crypto.c +++ b/platform/linux-dpdk/odp_crypto.c @@ -72,6 +72,9 @@ static inline int is_valid_size(uint16_t length, uint16_t min, if (length < supp_size) return -1;
+ if (supp_size != length && increment == 0) + return -1; + for (; supp_size <= max; supp_size += increment) { if (length == supp_size) return 0;
commit a65ece22d0aec860fbbdc63266d75d6794a132e1 Author: Matias Elo matias.elo@nokia.com Date: Mon Oct 30 15:39:50 2017 +0200
linux-dpdk: shm: use native dpdk memzones
Replace odp-linux shared memory implementation with native DPDK memzones.
Signed-off-by: Matias Elo matias.elo@nokia.com
diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index c1497f0f..ec695b98 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -121,9 +121,6 @@ odpdrvinclude_HEADERS = \ $(srcdir)/include/odp/drv/compiler.h
noinst_HEADERS = \ - ${top_srcdir}/platform/linux-generic/include/_fdserver_internal.h \ - ${top_srcdir}/platform/linux-generic/include/_ishm_internal.h \ - ${top_srcdir}/platform/linux-generic/include/_ishmphy_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_align_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_atomic_internal.h \ ${srcdir}/include/odp_buffer_inlines.h \ @@ -154,7 +151,7 @@ noinst_HEADERS = \ ${top_srcdir}/platform/linux-generic/include/odp_ring_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_schedule_if.h \ ${top_srcdir}/platform/linux-generic/include/odp_sorted_list_internal.h \ - ${top_srcdir}/platform/linux-generic/include/odp_shm_internal.h \ + ${srcdir}/include/odp_shm_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_time_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_timer_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_timer_wheel_internal.h \ @@ -167,9 +164,6 @@ noinst_HEADERS = \ ${srcdir}/Makefile.inc
__LIB__libodp_dpdk_la_SOURCES = \ - ../linux-generic/_fdserver.c \ - ../linux-generic/_ishm.c \ - ../linux-generic/_ishmphy.c \ ../linux-generic/odp_atomic.c \ ../linux-generic/odp_barrier.c \ ../linux-generic/odp_bitmap.c \ @@ -199,7 +193,7 @@ __LIB__libodp_dpdk_la_SOURCES = \ ../linux-generic/odp_schedule.c \ ../linux-generic/odp_schedule_if.c \ ../linux-generic/odp_schedule_iquery.c \ - ../linux-generic/odp_shared_memory.c \ + odp_shared_memory.c \ ../linux-generic/odp_sorted_list.c \ ../linux-generic/odp_spinlock.c \ ../linux-generic/odp_spinlock_recursive.c \ diff --git a/platform/linux-dpdk/include/odp_shm_internal.h b/platform/linux-dpdk/include/odp_shm_internal.h new file mode 100644 index 00000000..072a4f1c --- /dev/null +++ b/platform/linux-dpdk/include/odp_shm_internal.h @@ -0,0 +1,32 @@ +/* Copyright (c) 2017, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/** + * @file + * + * ODP shared memory - implementation internal + */ + +#ifndef ODP_SHM_INTERNAL_H_ +#define ODP_SHM_INTERNAL_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +int _odp_shm_init_global(void); + +int _odp_shm_init_local(void); + +int _odp_shm_term_global(void); + +int _odp_shm_term_local(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/platform/linux-dpdk/odp_init.c b/platform/linux-dpdk/odp_init.c index 6cea393b..fdd9d438 100644 --- a/platform/linux-dpdk/odp_init.c +++ b/platform/linux-dpdk/odp_init.c @@ -12,6 +12,7 @@ #include <unistd.h> #include <odp_internal.h> #include <odp_schedule_if.h> +#include <odp_shm_internal.h> #include <string.h> #include <stdio.h> #include <linux/limits.h> @@ -238,14 +239,8 @@ int odp_init_global(odp_instance_t *instance, cleanup_files(hpdir, odp_global_data.main_pid); stage = SYSINFO_INIT;
- if (_odp_fdserver_init_global()) { - ODP_ERR("ODP fdserver init failed.\n"); - goto init_failed; - } - stage = FDSERVER_INIT; - - if (_odp_ishm_init_global()) { - ODP_ERR("ODP ishm init failed.\n"); + if (_odp_shm_init_global()) { + ODP_ERR("ODP shm init failed.\n"); goto init_failed; } stage = ISHM_INIT; @@ -405,19 +400,13 @@ int _odp_term_global(enum init_stage stage) /* Fall through */
case ISHM_INIT: - if (_odp_ishm_term_global()) { - ODP_ERR("ODP ishm term failed.\n"); + if (_odp_shm_term_global()) { + ODP_ERR("ODP shm term failed.\n"); rc = -1; } /* Fall through */ - + /* Needed to prevent compiler warning */ case FDSERVER_INIT: - if (_odp_fdserver_term_global()) { - ODP_ERR("ODP fdserver term failed.\n"); - rc = -1; - } - /* Fall through */ - case SYSINFO_INIT: if (odp_system_info_term()) { ODP_ERR("ODP system info term failed.\n"); @@ -455,8 +444,8 @@ int odp_init_local(odp_instance_t instance, odp_thread_type_t thr_type) goto init_fail; }
- if (_odp_ishm_init_local()) { - ODP_ERR("ODP ishm local init failed.\n"); + if (_odp_shm_init_local()) { + ODP_ERR("ODP shm local init failed.\n"); goto init_fail; } stage = ISHM_INIT; @@ -531,8 +520,8 @@ int _odp_term_local(enum init_stage stage) /* Fall through */
case ISHM_INIT: - if (_odp_ishm_term_local()) { - ODP_ERR("ODP ishm local term failed.\n"); + if (_odp_shm_term_local()) { + ODP_ERR("ODP shm local term failed.\n"); rc = -1; } /* Fall through */ diff --git a/platform/linux-dpdk/odp_shared_memory.c b/platform/linux-dpdk/odp_shared_memory.c new file mode 100644 index 00000000..5af02f42 --- /dev/null +++ b/platform/linux-dpdk/odp_shared_memory.c @@ -0,0 +1,441 @@ +/* Copyright (c) 2017, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include <odp_align_internal.h> +#include <odp_config_internal.h> +#include <odp/api/debug.h> +#include <odp_debug_internal.h> +#include <odp/api/shared_memory.h> +#include <odp/api/spinlock.h> +#include <odp/api/plat/strong_types.h> +#include <odp_shm_internal.h> +#include <string.h> +#include <sys/mman.h> +#include <sys/syscall.h> +#include <unistd.h> +#include <inttypes.h> + +#include <rte_lcore.h> +#include <rte_memzone.h> + +#define SHM_MAX_ALIGN (0x80000000) +#define SHM_BLOCK_NAME "%" PRIu64 "-%d-%s" + +ODP_STATIC_ASSERT(ODP_CONFIG_SHM_BLOCKS >= ODP_CONFIG_POOLS, + "ODP_CONFIG_SHM_BLOCKS < ODP_CONFIG_POOLS"); + +ODP_STATIC_ASSERT(ODP_SHM_NAME_LEN >= RTE_MEMZONE_NAMESIZE, + "ODP_SHM_NAME_LEN < RTE_MEMZONE_NAMESIZE"); + +typedef enum { + SHM_TYPE_LOCAL = 0, + SHM_TYPE_REMOTE +} shm_type_t; + +/** + * Memory zone descriptor + * + * This struct is stored inside DPDK memzone to make it available for + * odp_shm_import(). + */ +typedef struct { + /* Shared memory flags */ + uint32_t flags; +} shm_zone_t; + +/** + * Memory block descriptor + */ +typedef struct { + /* Memory block type */ + shm_type_t type; + /* Memory block name */ + char name[ODP_SHM_NAME_LEN]; + /* DPDK memzone. If this pointer != NULL, the shm block is interpreted + * as reserved. */ + const struct rte_memzone *mz; +} shm_block_t; + +/** + * Table of blocks describing allocated shared memory. This table is visible to + * every ODP thread (linux process or pthreads). It is allocated shared at odp + * init time and is therefore inherited by all. + */ +typedef struct { + odp_spinlock_t lock; + shm_block_t block[ODP_CONFIG_SHM_BLOCKS]; +} shm_table_t; + +static shm_table_t *shm_tbl; + +/** + * Check if DPDK memzone name has been used already + */ +static odp_bool_t mz_name_used(const char *name) +{ + int idx; + + for (idx = 0; idx < ODP_CONFIG_SHM_BLOCKS; idx++) { + if (shm_tbl->block[idx].mz && + strncmp(name, shm_tbl->block[idx].mz->name, + RTE_MEMZONE_NAMESIZE) == 0) + return 1; + } + return 0; +} + +/** + * Convert ODP shm name into unique DPDK memzone name + */ +static void name_to_mz_name(const char *name, char *mz_name) +{ + int i = 0; + + /* Use pid and counter to make name unique */ + do { + snprintf(mz_name, RTE_MEMZONE_NAMESIZE - 1, SHM_BLOCK_NAME, + (odp_instance_t)odp_global_data.main_pid, i++, name); + mz_name[RTE_MEMZONE_NAMESIZE - 1] = 0; + } while (mz_name_used(mz_name)); +} + +/** + * Convert DPDK memzone length into ODP shm block size + */ +static uint64_t shm_size(const struct rte_memzone *mz) +{ + return mz->len - sizeof(shm_zone_t); +} + +/** + * Return a pointer to shm zone descriptor stored at the end of DPDK memzone + */ +static shm_zone_t *shm_zone(const struct rte_memzone *mz) +{ + return (shm_zone_t *)((uint8_t *)mz->addr + shm_size(mz)); +} + +static int find_free_block(void) +{ + int idx; + + for (idx = 0; idx < ODP_CONFIG_SHM_BLOCKS; idx++) { + if (shm_tbl->block[idx].mz == NULL) + return idx; + } + return -1; +} + +static inline uint32_t handle_to_idx(odp_shm_t shm) +{ + return _odp_typeval(shm) - 1; +} + +static inline odp_shm_t idx_to_handle(uint32_t idx) +{ + return _odp_cast_scalar(odp_shm_t, idx + 1); +} + +static inline odp_bool_t handle_is_valid(odp_shm_t shm) +{ + int idx = handle_to_idx(shm); + + if (idx < 0 || idx >= ODP_CONFIG_SHM_BLOCKS || + shm_tbl->block[idx].mz == NULL) { + ODP_ERR("Invalid odp_shm_t handle: %" PRIu64 "\n", + odp_shm_to_u64(shm)); + return 0; + } + return 1; +} + +int _odp_shm_init_global(void) +{ + void *addr; + + if ((getpid() != odp_global_data.main_pid) || + (syscall(SYS_gettid) != getpid())) { + ODP_ERR("shm_init_global() must be performed by the main " + "ODP process!\n."); + return -1; + } + + /* Allocate space for the internal shared mem block table */ + addr = mmap(NULL, sizeof(shm_table_t), PROT_READ | PROT_WRITE, + MAP_SHARED | MAP_ANONYMOUS, -1, 0); + if (addr == MAP_FAILED) { + ODP_ERR("Unable to mmap the shm block table\n"); + return -1; + } + + shm_tbl = addr; + memset(shm_tbl, 0, sizeof(shm_table_t)); + + odp_spinlock_init(&shm_tbl->lock); + + return 0; +} + +int _odp_shm_init_local(void) +{ + return 0; +} + +int _odp_shm_term_global(void) +{ + shm_block_t *block; + int idx; + + if ((getpid() != odp_global_data.main_pid) || + (syscall(SYS_gettid) != getpid())) { + ODP_ERR("shm_term_global() must be performed by the main " + "ODP process!\n."); + return -1; + } + + /* Cleanup possibly non freed memory (and complain a bit) */ + for (idx = 0; idx < ODP_CONFIG_SHM_BLOCKS; idx++) { + block = &shm_tbl->block[idx]; + if (block->mz) { + ODP_ERR("block '%s' was never freed (cleaning up...)\n", + block->name); + rte_memzone_free(block->mz); + } + } + /* Free the shared memory block table */ + if (munmap(shm_tbl, sizeof(shm_table_t)) < 0) { + ODP_ERR("Unable to munmap the shm block table\n"); + return -1; + } + return 0; +} + +int _odp_shm_term_local(void) +{ + return 0; +} + +int odp_shm_capability(odp_shm_capability_t *capa) +{ + memset(capa, 0, sizeof(odp_shm_capability_t)); + + capa->max_blocks = ODP_CONFIG_SHM_BLOCKS; + capa->max_size = 0; + capa->max_align = SHM_MAX_ALIGN; + + return 0; +} + +odp_shm_t odp_shm_reserve(const char *name, uint64_t size, uint64_t align, + uint32_t flags) +{ + shm_block_t *block; + const struct rte_memzone *mz; + char mz_name[RTE_MEMZONE_NAMESIZE]; + uint32_t mz_flags = RTE_MEMZONE_1GB | RTE_MEMZONE_SIZE_HINT_ONLY; + int idx; + + if (align > SHM_MAX_ALIGN) { + ODP_ERR("Align too large: %" PRIu64 "\n", align); + return ODP_SHM_INVALID; + } + + /* DPDK requires alignment to be power of two */ + if (!rte_is_power_of_2(align)) + align = ROUNDUP_POWER2_U32(align); + + odp_spinlock_lock(&shm_tbl->lock); + + idx = find_free_block(); + if (idx < 0) { + odp_spinlock_unlock(&shm_tbl->lock); + ODP_ERR("No free SHM blocks left\n"); + return ODP_SHM_INVALID; + } + block = &shm_tbl->block[idx]; + + /* DPDK requires unique memzone names */ + name_to_mz_name(name, mz_name); + /* Reserve extra space for storing shm zone descriptor */ + mz = rte_memzone_reserve_aligned(mz_name, size + sizeof(shm_zone_t), + rte_socket_id(), mz_flags, align); + if (mz == NULL) { + odp_spinlock_unlock(&shm_tbl->lock); + ODP_ERR("Reserving DPDK memzone failed\n"); + return ODP_SHM_INVALID; + } + + block->mz = mz; + snprintf(block->name, ODP_SHM_NAME_LEN - 1, "%s", name); + block->name[ODP_SHM_NAME_LEN - 1] = 0; + block->type = SHM_TYPE_LOCAL; + /* Note: ODP_SHM_SW_ONLY/ODP_SHM_PROC/ODP_SHM_SINGLE_VA flags are + * currently ignored. */ + shm_zone(mz)->flags = flags; + + odp_spinlock_unlock(&shm_tbl->lock); + + return idx_to_handle(idx); +} + +odp_shm_t odp_shm_import(const char *remote_name, odp_instance_t odp_inst, + const char *local_name) +{ + shm_block_t *block; + const struct rte_memzone *mz; + char mz_name[RTE_MEMZONE_NAMESIZE]; + int idx; + + snprintf(mz_name, RTE_MEMZONE_NAMESIZE - 1, SHM_BLOCK_NAME, odp_inst, 0, + remote_name); + mz_name[RTE_MEMZONE_NAMESIZE - 1] = 0; + + mz = rte_memzone_lookup(mz_name); + if (mz == NULL) { + ODP_ERR("Unable to find remote SHM block: %s\n", remote_name); + return ODP_SHM_INVALID; + } + + if (!(shm_zone(mz)->flags & ODP_SHM_EXPORT)) { + ODP_ERR("Not exported SHM block!\n"); + return ODP_SHM_INVALID; + } + + odp_spinlock_lock(&shm_tbl->lock); + + idx = find_free_block(); + if (idx < 0) { + odp_spinlock_unlock(&shm_tbl->lock); + ODP_ERR("No free SHM blocks left\n"); + return ODP_SHM_INVALID; + } + block = &shm_tbl->block[idx]; + + block->mz = mz; + snprintf(block->name, ODP_SHM_NAME_LEN - 1, "%s", local_name); + block->name[ODP_SHM_NAME_LEN - 1] = 0; + block->type = SHM_TYPE_REMOTE; + + odp_spinlock_unlock(&shm_tbl->lock); + + return idx_to_handle(idx); +} + +int odp_shm_free(odp_shm_t shm) +{ + shm_block_t *block; + int ret = 0; + + odp_spinlock_lock(&shm_tbl->lock); + + if (!handle_is_valid(shm)) { + odp_spinlock_unlock(&shm_tbl->lock); + return -1; + } + + block = &shm_tbl->block[handle_to_idx(shm)]; + + /* Only the creator of memzone can free it */ + if (block->type == SHM_TYPE_LOCAL) + ret = rte_memzone_free(block->mz); + + block->mz = NULL; + + odp_spinlock_unlock(&shm_tbl->lock); + + return ret; +} + +odp_shm_t odp_shm_lookup(const char *name) +{ + int idx; + + odp_spinlock_lock(&shm_tbl->lock); + + for (idx = 0; idx < ODP_CONFIG_SHM_BLOCKS; idx++) { + if (shm_tbl->block[idx].mz && + strncmp(name, shm_tbl->block[idx].name, + ODP_SHM_NAME_LEN) == 0) { + odp_spinlock_unlock(&shm_tbl->lock); + return idx_to_handle(idx); + } + } + + odp_spinlock_unlock(&shm_tbl->lock); + + return ODP_SHM_INVALID; +} + +void *odp_shm_addr(odp_shm_t shm) +{ + void *addr; + + odp_spinlock_lock(&shm_tbl->lock); + + if (!handle_is_valid(shm)) { + odp_spinlock_unlock(&shm_tbl->lock); + return NULL; + } + + addr = shm_tbl->block[handle_to_idx(shm)].mz->addr; + + odp_spinlock_unlock(&shm_tbl->lock); + + return addr; +} + +int odp_shm_info(odp_shm_t shm, odp_shm_info_t *info) +{ + shm_block_t *block; + int idx = handle_to_idx(shm); + + odp_spinlock_lock(&shm_tbl->lock); + + if (!handle_is_valid(shm)) { + odp_spinlock_unlock(&shm_tbl->lock); + return -1; + } + + block = &shm_tbl->block[idx]; + + memset(info, 0, sizeof(odp_shm_info_t)); + + info->name = block->name; + info->addr = block->mz->addr; + info->size = shm_size(block->mz); + info->page_size = block->mz->hugepage_sz; + info->flags = shm_zone(block->mz)->flags; + + odp_spinlock_unlock(&shm_tbl->lock); + + return 0; +} + +void odp_shm_print_all(void) +{ + shm_block_t *block; + int idx; + + odp_spinlock_lock(&shm_tbl->lock); + + printf("\nShared memory blocks\n--------------------\n"); + + for (idx = 0; idx < ODP_CONFIG_SHM_BLOCKS; idx++) { + block = &shm_tbl->block[idx]; + if (block->mz == NULL) + continue; + printf(" %s: addr: %p, len: %" PRIu64 " page size: " + "%" PRIu64 "\n", block->name, block->mz->addr, + shm_size(block->mz), block->mz->hugepage_sz); + } + + odp_spinlock_unlock(&shm_tbl->lock); +} + +uint64_t odp_shm_to_u64(odp_shm_t hdl) +{ + return _odp_pri(hdl); +} diff --git a/test/common_plat/validation/api/shmem/shmem.c b/test/common_plat/validation/api/shmem/shmem.c index 0e757a70..9a54ecc2 100644 --- a/test/common_plat/validation/api/shmem/shmem.c +++ b/test/common_plat/validation/api/shmem/shmem.c @@ -96,8 +96,8 @@ static int run_test_basic_thread(void *arg ODP_UNUSED) CU_ASSERT(0 == info.flags); CU_ASSERT(shared_test_data == info.addr); CU_ASSERT(sizeof(shared_test_data_t) <= info.size); - CU_ASSERT((info.page_size == odp_sys_huge_page_size()) || - (info.page_size == odp_sys_page_size())) + CU_ASSERT(info.page_size > 0); + odp_shm_print_all();
fflush(stdout);
commit afdf175a5ea644ce599fe4843bb26c7a984989f9 Author: Szymon Sliwa szs@semihalf.com Date: Mon Sep 11 12:30:26 2017 +0200
linux-dpdk: Changes which are needed for odp_crypto to work.
All the changes are within the linux-dpdk/odp_crypto.c file: 1) Added missing brackets which made it impossible to to create a crypto session 2) Increased the number of queues created, from nb_queue_pairs - 1 to nb_queue_pairs, what seems to work better 3) Removed a memory leak - the memory allocated for iv and aad were not freed
Signed-off-by: Szymon Sliwa szs@semihalf.com Reviewed-by: Balakrishna Garapati balakrishna.garapati@linaro.org
diff --git a/platform/linux-dpdk/odp_crypto.c b/platform/linux-dpdk/odp_crypto.c index d95b1578..1126a790 100644 --- a/platform/linux-dpdk/odp_crypto.c +++ b/platform/linux-dpdk/odp_crypto.c @@ -276,7 +276,7 @@ int odp_crypto_init_global(void)
qp_conf.nb_descriptors = NB_MBUF;
- for (queue_pair = 0; queue_pair < nb_queue_pairs - 1; + for (queue_pair = 0; queue_pair < nb_queue_pairs; queue_pair++) { rc = rte_cryptodev_queue_pair_setup(cdev_id, queue_pair, @@ -900,11 +900,12 @@ int odp_crypto_session_create(odp_crypto_session_param_t *param, /* Setup session */ session = rte_cryptodev_sym_session_create(cdev_id, first_xform);
- if (session == NULL) + if (session == NULL) { /* remove the crypto_session_entry_t */ memset(entry, 0, sizeof(*entry)); free_session(entry); return -1; + }
entry->rte_session = (intptr_t)session; entry->cipher_xform = cipher_xform; @@ -1011,6 +1012,8 @@ int odp_crypto_operation(odp_crypto_op_param_t *param, ODP_ERR("Failed to allocate crypto operation"); goto err; } + op->sym->auth.aad.data = NULL; + op->sym->cipher.iv.data = NULL;
odp_spinlock_unlock(&global->lock);
@@ -1038,9 +1041,8 @@ int odp_crypto_operation(odp_crypto_op_param_t *param, if (aad_len > 0) { op->sym->auth.aad.data = rte_malloc("aad", aad_len, 0); if (op->sym->auth.aad.data == NULL) { - rte_crypto_op_free(op); ODP_ERR("Failed to allocate memory for AAD"); - goto err; + goto err_op_free; }
memcpy(op->sym->auth.aad.data, aad_head, aad_len); @@ -1050,16 +1052,14 @@ int odp_crypto_operation(odp_crypto_op_param_t *param, }
if (entry->iv.length == 0) { - rte_crypto_op_free(op); ODP_ERR("Wrong IV length"); - goto err; + goto err_op_free; }
op->sym->cipher.iv.data = rte_malloc("iv", entry->iv.length, 0); if (op->sym->cipher.iv.data == NULL) { - rte_crypto_op_free(op); ODP_ERR("Failed to allocate memory for IV"); - goto err; + goto err_op_free; }
if (param->override_iv_ptr) { @@ -1096,18 +1096,16 @@ int odp_crypto_operation(odp_crypto_op_param_t *param, rc = rte_cryptodev_enqueue_burst(rte_session->dev_id, queue_pair, &op, 1); if (rc == 0) { - rte_crypto_op_free(op); ODP_ERR("Failed to enqueue packet"); - goto err; + goto err_op_free; }
rc = rte_cryptodev_dequeue_burst(rte_session->dev_id, queue_pair, &op, 1);
if (rc == 0) { - rte_crypto_op_free(op); ODP_ERR("Failed to dequeue packet"); - goto err; + goto err_op_free; }
param->out_pkt = (odp_packet_t)op->sym->m_src; @@ -1124,6 +1122,8 @@ int odp_crypto_operation(odp_crypto_op_param_t *param, (rc_cipher == ODP_CRYPTO_ALG_ERR_NONE) && (rc_auth == ODP_CRYPTO_ALG_ERR_NONE);
+ rte_free(op->sym->cipher.iv.data); + rte_free(op->sym->auth.aad.data); rte_crypto_op_free(op);
/* If specified during creation post event to completion queue */ @@ -1157,6 +1157,11 @@ int odp_crypto_operation(odp_crypto_op_param_t *param, } return 0;
+err_op_free: + rte_free(op->sym->cipher.iv.data); + rte_free(op->sym->auth.aad.data); + rte_crypto_op_free(op); + err: if (allocated) { odp_packet_free(param->out_pkt);
-----------------------------------------------------------------------
Summary of changes: .travis.yml | 92 +- Makefile.am | 4 + README.DPDK | 1 + ...{odp-linux-generic.conf => odp-linux-dpdk.conf} | 21 +- configure.ac | 8 +- example/Makefile.inc | 2 + helper/Makefile.am | 2 + platform/{linux-generic => linux-dpdk}/.gitignore | 0 platform/{linux-generic => linux-dpdk}/Makefile.am | 223 ++- platform/linux-dpdk/Makefile.inc | 4 + platform/linux-dpdk/README | 298 ++++ platform/linux-dpdk/arch | 1 + .../doc/platform_specific.dox | 20 +- .../linux-dpdk/include-abi/odp/api/abi/align.h | 1 + .../linux-dpdk/include-abi/odp/api/abi/atomic.h | 1 + .../linux-dpdk/include-abi/odp/api/abi/barrier.h | 1 + .../linux-dpdk/include-abi/odp/api/abi/buffer.h | 1 + .../linux-dpdk/include-abi/odp/api/abi/byteorder.h | 1 + .../include-abi/odp/api/abi/classification.h | 1 + .../linux-dpdk/include-abi/odp/api/abi/cpumask.h | 1 + .../linux-dpdk/include-abi/odp/api/abi/crypto.h | 1 + .../linux-dpdk/include-abi/odp/api/abi/debug.h | 1 + .../linux-dpdk/include-abi/odp/api/abi/event.h | 1 + platform/linux-dpdk/include-abi/odp/api/abi/init.h | 1 + .../linux-dpdk/include-abi/odp/api/abi/ipsec.h | 1 + .../include-abi/odp/api/abi/packet.h | 17 +- .../include-abi/odp/api/abi/packet_flags.h | 1 + .../linux-dpdk/include-abi/odp/api/abi/packet_io.h | 1 + platform/linux-dpdk/include-abi/odp/api/abi/pool.h | 1 + .../linux-dpdk/include-abi/odp/api/abi/queue.h | 1 + .../linux-dpdk/include-abi/odp/api/abi/rwlock.h | 1 + .../include-abi/odp/api/abi/rwlock_recursive.h | 1 + .../linux-dpdk/include-abi/odp/api/abi/schedule.h | 1 + .../include-abi/odp/api/abi/schedule_types.h | 1 + .../include-abi/odp/api/abi/shared_memory.h | 1 + .../linux-dpdk/include-abi/odp/api/abi/spinlock.h | 1 + .../include-abi/odp/api/abi/spinlock_recursive.h | 1 + .../linux-dpdk/include-abi/odp/api/abi/std_clib.h | 1 + .../linux-dpdk/include-abi/odp/api/abi/std_types.h | 1 + platform/linux-dpdk/include-abi/odp/api/abi/sync.h | 1 + .../linux-dpdk/include-abi/odp/api/abi/thread.h | 1 + .../linux-dpdk/include-abi/odp/api/abi/thrmask.h | 1 + .../include-abi/odp/api/abi/ticketlock.h | 1 + platform/linux-dpdk/include-abi/odp/api/abi/time.h | 1 + .../linux-dpdk/include-abi/odp/api/abi/timer.h | 1 + .../include-abi/odp/api/abi/traffic_mngr.h | 1 + .../linux-dpdk/include-abi/odp/api/abi/version.h | 1 + .../include/odp/api/plat/atomic_inlines.h | 1 + .../include/odp/api/plat/byteorder_inlines.h | 1 + .../include/odp/api/plat/byteorder_inlines_api.h | 1 + .../include/odp/api/plat/packet_flag_inlines.h | 23 +- .../include/odp/api/plat/packet_flag_inlines_api.h | 12 +- .../include/odp/api/plat/packet_inline_types.h | 27 +- .../include/odp/api/plat/packet_inlines.h | 237 +-- .../include/odp/api/plat/packet_inlines_api.h | 12 + .../include/odp/api/plat/pktio_inlines.h | 1 + .../include/odp/api/plat/pktio_inlines_api.h | 1 + .../include/odp/api/plat/pool_inline_types.h | 1 + .../include/odp/api/plat/std_clib_inlines.h | 3 +- .../linux-dpdk/include/odp/api/plat/strong_types.h | 1 + .../linux-dpdk/include/odp/api/plat/sync_inlines.h | 1 + .../include/odp/api/plat/thread_inlines.h | 1 + .../include/odp/api/plat/thread_inlines_api.h | 1 + .../include/odp/api/plat/ticketlock_inlines.h | 1 + .../include/odp/api/plat/ticketlock_inlines_api.h | 1 + .../include/odp_buffer_inlines.h | 19 +- platform/linux-dpdk/include/odp_buffer_internal.h | 103 ++ .../include/odp_config_internal.h | 63 +- .../include/odp_errno_define.h | 6 +- platform/linux-dpdk/include/odp_packet_dpdk.h | 50 + .../include/odp_packet_internal.h | 137 +- .../include/odp_packet_io_internal.h | 157 +- platform/linux-dpdk/include/odp_pool_internal.h | 91 ++ platform/linux-dpdk/include/odp_posix_extensions.h | 1 + platform/linux-dpdk/include/odp_ring_st_internal.h | 90 ++ platform/linux-dpdk/include/odp_shm_internal.h | 34 + platform/linux-dpdk/include/protocols | 1 + .../libodp-linux.pc.in | 4 +- platform/linux-dpdk/m4/configure.m4 | 45 + platform/linux-dpdk/m4/odp_openssl.m4 | 1 + platform/linux-dpdk/m4/odp_pthread.m4 | 1 + platform/linux-dpdk/m4/odp_timer.m4 | 1 + .../{linux-generic => linux-dpdk}/odp_buffer.c | 53 +- platform/linux-dpdk/odp_crypto.c | 1443 +++++++++++++++++ platform/{linux-generic => linux-dpdk}/odp_errno.c | 11 +- platform/{linux-generic => linux-dpdk}/odp_init.c | 165 +- .../{linux-generic => linux-dpdk}/odp_libconfig.c | 42 +- platform/linux-dpdk/odp_packet.c | 1695 ++++++++++++++++++++ platform/linux-dpdk/odp_packet_dpdk.c | 1178 ++++++++++++++ .../odp_packet_flags.c | 18 +- platform/linux-dpdk/odp_pool.c | 671 ++++++++ .../odp_queue_basic.c | 160 +- .../{linux-generic => linux-dpdk}/odp_queue_if.c | 8 +- .../odp_schedule_if.c | 8 +- platform/linux-dpdk/odp_shared_memory.c | 471 ++++++ .../{linux-generic => linux-dpdk}/odp_std_clib.c | 2 +- .../{linux-generic => linux-dpdk}/odp_thread.c | 8 + platform/{linux-generic => linux-dpdk}/odp_time.c | 105 +- .../{linux-generic => linux-dpdk}/test/.gitignore | 0 platform/linux-dpdk/test/Makefile.am | 35 + .../test/validation/api/Makefile.inc | 0 .../test/validation/api/pktio/.gitignore | 1 + .../test/validation/api/pktio/Makefile.am | 4 + .../linux-dpdk/test/validation/api/pktio/pktio_env | 1 + .../test/validation/api/pktio/pktio_run.sh | 31 +- platform/linux-dpdk/test/wrapper-script.sh | 77 + scripts/git-transplant.py | 94 ++ test/Makefile.inc | 2 + 108 files changed, 7207 insertions(+), 932 deletions(-) create mode 120000 README.DPDK copy config/{odp-linux-generic.conf => odp-linux-dpdk.conf} (57%) copy platform/{linux-generic => linux-dpdk}/.gitignore (100%) copy platform/{linux-generic => linux-dpdk}/Makefile.am (57%) create mode 100644 platform/linux-dpdk/Makefile.inc create mode 100644 platform/linux-dpdk/README create mode 120000 platform/linux-dpdk/arch copy platform/{linux-generic => linux-dpdk}/doc/platform_specific.dox (56%) create mode 120000 platform/linux-dpdk/include-abi/odp/api/abi/align.h create mode 120000 platform/linux-dpdk/include-abi/odp/api/abi/atomic.h create mode 120000 platform/linux-dpdk/include-abi/odp/api/abi/barrier.h create mode 120000 platform/linux-dpdk/include-abi/odp/api/abi/buffer.h create mode 120000 platform/linux-dpdk/include-abi/odp/api/abi/byteorder.h create mode 120000 platform/linux-dpdk/include-abi/odp/api/abi/classification.h create mode 120000 platform/linux-dpdk/include-abi/odp/api/abi/cpumask.h create mode 120000 platform/linux-dpdk/include-abi/odp/api/abi/crypto.h create mode 120000 platform/linux-dpdk/include-abi/odp/api/abi/debug.h create mode 120000 platform/linux-dpdk/include-abi/odp/api/abi/event.h create mode 120000 platform/linux-dpdk/include-abi/odp/api/abi/init.h create mode 120000 platform/linux-dpdk/include-abi/odp/api/abi/ipsec.h copy platform/{linux-generic => linux-dpdk}/include-abi/odp/api/abi/packet.h (83%) create mode 120000 platform/linux-dpdk/include-abi/odp/api/abi/packet_flags.h create mode 120000 platform/linux-dpdk/include-abi/odp/api/abi/packet_io.h create mode 120000 platform/linux-dpdk/include-abi/odp/api/abi/pool.h create mode 120000 platform/linux-dpdk/include-abi/odp/api/abi/queue.h create mode 120000 platform/linux-dpdk/include-abi/odp/api/abi/rwlock.h create mode 120000 platform/linux-dpdk/include-abi/odp/api/abi/rwlock_recursive.h create mode 120000 platform/linux-dpdk/include-abi/odp/api/abi/schedule.h create mode 120000 platform/linux-dpdk/include-abi/odp/api/abi/schedule_types.h create mode 120000 platform/linux-dpdk/include-abi/odp/api/abi/shared_memory.h create mode 120000 platform/linux-dpdk/include-abi/odp/api/abi/spinlock.h create mode 120000 platform/linux-dpdk/include-abi/odp/api/abi/spinlock_recursive.h create mode 120000 platform/linux-dpdk/include-abi/odp/api/abi/std_clib.h create mode 120000 platform/linux-dpdk/include-abi/odp/api/abi/std_types.h create mode 120000 platform/linux-dpdk/include-abi/odp/api/abi/sync.h create mode 120000 platform/linux-dpdk/include-abi/odp/api/abi/thread.h create mode 120000 platform/linux-dpdk/include-abi/odp/api/abi/thrmask.h create mode 120000 platform/linux-dpdk/include-abi/odp/api/abi/ticketlock.h create mode 120000 platform/linux-dpdk/include-abi/odp/api/abi/time.h create mode 120000 platform/linux-dpdk/include-abi/odp/api/abi/timer.h create mode 120000 platform/linux-dpdk/include-abi/odp/api/abi/traffic_mngr.h create mode 120000 platform/linux-dpdk/include-abi/odp/api/abi/version.h create mode 120000 platform/linux-dpdk/include/odp/api/plat/atomic_inlines.h create mode 120000 platform/linux-dpdk/include/odp/api/plat/byteorder_inlines.h create mode 120000 platform/linux-dpdk/include/odp/api/plat/byteorder_inlines_api.h copy platform/{linux-generic => linux-dpdk}/include/odp/api/plat/packet_flag_inlines.h (81%) copy platform/{linux-generic => linux-dpdk}/include/odp/api/plat/packet_flag_inlines_api.h (75%) copy platform/{linux-generic => linux-dpdk}/include/odp/api/plat/packet_inline_types.h (92%) copy platform/{linux-generic => linux-dpdk}/include/odp/api/plat/packet_inlines.h (56%) copy platform/{linux-generic => linux-dpdk}/include/odp/api/plat/packet_inlines_api.h (92%) create mode 120000 platform/linux-dpdk/include/odp/api/plat/pktio_inlines.h create mode 120000 platform/linux-dpdk/include/odp/api/plat/pktio_inlines_api.h create mode 120000 platform/linux-dpdk/include/odp/api/plat/pool_inline_types.h copy platform/{linux-generic => linux-dpdk}/include/odp/api/plat/std_clib_inlines.h (90%) create mode 120000 platform/linux-dpdk/include/odp/api/plat/strong_types.h create mode 120000 platform/linux-dpdk/include/odp/api/plat/sync_inlines.h create mode 120000 platform/linux-dpdk/include/odp/api/plat/thread_inlines.h create mode 120000 platform/linux-dpdk/include/odp/api/plat/thread_inlines_api.h create mode 120000 platform/linux-dpdk/include/odp/api/plat/ticketlock_inlines.h create mode 120000 platform/linux-dpdk/include/odp/api/plat/ticketlock_inlines_api.h copy platform/{linux-generic => linux-dpdk}/include/odp_buffer_inlines.h (62%) create mode 100644 platform/linux-dpdk/include/odp_buffer_internal.h copy platform/{linux-generic => linux-dpdk}/include/odp_config_internal.h (70%) copy platform/{linux-generic => linux-dpdk}/include/odp_errno_define.h (73%) create mode 100644 platform/linux-dpdk/include/odp_packet_dpdk.h copy platform/{linux-generic => linux-dpdk}/include/odp_packet_internal.h (65%) copy platform/{linux-generic => linux-dpdk}/include/odp_packet_io_internal.h (58%) create mode 100644 platform/linux-dpdk/include/odp_pool_internal.h create mode 120000 platform/linux-dpdk/include/odp_posix_extensions.h create mode 100644 platform/linux-dpdk/include/odp_ring_st_internal.h create mode 100644 platform/linux-dpdk/include/odp_shm_internal.h create mode 120000 platform/linux-dpdk/include/protocols copy platform/{linux-generic => linux-dpdk}/libodp-linux.pc.in (62%) create mode 100644 platform/linux-dpdk/m4/configure.m4 create mode 120000 platform/linux-dpdk/m4/odp_openssl.m4 create mode 120000 platform/linux-dpdk/m4/odp_pthread.m4 create mode 120000 platform/linux-dpdk/m4/odp_timer.m4 copy platform/{linux-generic => linux-dpdk}/odp_buffer.c (55%) create mode 100644 platform/linux-dpdk/odp_crypto.c copy platform/{linux-generic => linux-dpdk}/odp_errno.c (77%) copy platform/{linux-generic => linux-dpdk}/odp_init.c (67%) copy platform/{linux-generic => linux-dpdk}/odp_libconfig.c (73%) create mode 100644 platform/linux-dpdk/odp_packet.c create mode 100644 platform/linux-dpdk/odp_packet_dpdk.c copy platform/{linux-generic => linux-dpdk}/odp_packet_flags.c (94%) create mode 100644 platform/linux-dpdk/odp_pool.c copy platform/{linux-generic => linux-dpdk}/odp_queue_basic.c (82%) copy platform/{linux-generic => linux-dpdk}/odp_queue_if.c (92%) copy platform/{linux-generic => linux-dpdk}/odp_schedule_if.c (93%) create mode 100644 platform/linux-dpdk/odp_shared_memory.c copy platform/{linux-generic => linux-dpdk}/odp_std_clib.c (85%) copy platform/{linux-generic => linux-dpdk}/odp_thread.c (94%) copy platform/{linux-generic => linux-dpdk}/odp_time.c (71%) copy platform/{linux-generic => linux-dpdk}/test/.gitignore (100%) create mode 100644 platform/linux-dpdk/test/Makefile.am copy platform/{linux-generic => linux-dpdk}/test/validation/api/Makefile.inc (100%) create mode 120000 platform/linux-dpdk/test/validation/api/pktio/.gitignore create mode 100644 platform/linux-dpdk/test/validation/api/pktio/Makefile.am create mode 120000 platform/linux-dpdk/test/validation/api/pktio/pktio_env copy platform/{linux-generic => linux-dpdk}/test/validation/api/pktio/pktio_run.sh (81%) create mode 100755 platform/linux-dpdk/test/wrapper-script.sh create mode 100755 scripts/git-transplant.py
hooks/post-receive