From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752474AbbIROey (ORCPT ); Fri, 18 Sep 2015 10:34:54 -0400 Received: from mail-by2on0086.outbound.protection.outlook.com ([207.46.100.86]:15923 "EHLO na01-by2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752059AbbIROev (ORCPT ); Fri, 18 Sep 2015 10:34:51 -0400 X-Greylist: delayed 1991 seconds by postgrey-1.27 at vger.kernel.org; Fri, 18 Sep 2015 10:34:51 EDT Authentication-Results: spf=none (sender IP is 165.204.84.221) smtp.mailfrom=amd.com; arndb.de; dkim=none (message not signed) header.d=none;arndb.de; dmarc=permerror action=none header.from=amd.com; X-WSS-ID: 0NUVLMN-07-QIJ-02 X-M-MSG: Message-ID: <55FC1939.7080407@amd.com> Date: Fri, 18 Sep 2015 09:01:29 -0500 From: Tom Lendacky User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.8.0 MIME-Version: 1.0 To: LABBE Corentin , , , , , , , , , CC: , Subject: Re: [PATCH v2 5/8] lib: introduce sg_nents_len_chained References: <1442581036-23789-1-git-send-email-clabbe.montjoie@gmail.com> <1442581036-23789-6-git-send-email-clabbe.montjoie@gmail.com> In-Reply-To: <1442581036-23789-6-git-send-email-clabbe.montjoie@gmail.com> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [10.180.168.240] X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:165.204.84.221;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(2980300002)(428002)(24454002)(377454003)(479174004)(164054003)(199003)(50944005)(189002)(64706001)(87266999)(5007970100001)(23746002)(86362001)(59896002)(4000630100001)(5004730100002)(101416001)(5001770100001)(19580395003)(50986999)(80316001)(65956001)(106466001)(46102003)(83506001)(65816999)(2201001)(19580405001)(65806001)(5001830100001)(189998001)(77156002)(33656002)(5001860100001)(68736005)(92566002)(76176999)(50466002)(54356999)(11100500001)(105586002)(5001920100001)(64126003)(2950100001)(97736004)(62966003)(87936001)(36756003)(4001540100001)(47776003)(4001350100001)(77096005)(921003)(1121003)(2101003)(83996005);DIR:OUT;SFP:1101;SCL:1;SRVR:SN1PR12MB0720;H:atltwp01.amd.com;FPR:;SPF:None;PTR:InfoDomainNonexistent;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0720;2:/qk7LRl0xov1Mu36g1juAsA+ciQg4Wut8RlA3X7w8zU7rzGeT2UBjD0PCDRSRf+l43KpRgeiXC9KyzYu9Be3SLW2SD/DKNhps2kcVHhaz8evXXSDUOPpZB4KBUWjv5PDocICvzMrZFQ6BTHEuwvtHzaSIvBQ2Nt2qYSYxYIpcmk=;3:OEyv85nSgMcYzDpL62E0bdfV5O7tVgKIrXgGmwzE7jbbI63wwbE8lOWItGQX8/vW1WM5IhkyvW/QfukAsOi1XCRHjYVVFBsaaAheSlkV1nk7musL9eBD/WqIaYiFcYa5X95IQUpnZK5BeB4dhu78Xc41cuTdVj85AoxFh3baG/rHBnbfISInKtIkPG5EAg5c9SklrTJpaZljt3Qfm7ggEDdNsXtduF1Y5fMyWzIRA+x3oPuNgQ2VqP9dan4l+pdB;25:WzrWrgLjCl3NuE915NUKBZPuA1udkjvsD5mSGkSOZaS6p9A9lrmKKuKXgT2ASrKpkGt6vKZVY+uNIUKf7vQO0wIrwPwpV9XHb6YOFD4+xuEUTVlPGznQUjXB4QOsQge1/K78Cigi5nrWCmvG/RD7c8SstIZ71psVb17uNeMXmEawGp0uIXaU4Wgn01VMuoJvJ7bRFqP64Vp4aEllgDO0NSt5UzfdMVKSEnIctu5mjXCu7EulMguRdXwosUKLhv9dQstwKvGilVEUrzVubfWm7A== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:SN1PR12MB0720; X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0720;20:WiIfjyLVJGq37J5ogkw2rVGKpD2PrxgS12QEg5tdeQQSDj/AE9pkl7JB8N/5WwwDl/1Mfdm/kJ7/YM97dOSD1cWLKmzSjFUBY/5i3duslYmRkXHtyxdBZvYdH3K1WGBRp0d39jrQYGUecP/bmtz3F5RKSf5QlMZFAP8U1cNavMcowFLOIBzleLkYH3dB784OnnWLcVLQrdHkxn6BQ+wMCrN6jFupAWy+v5JkyJj46sgqydqXhwWdw5C4+gUeeOjgLcGJNHfA1DR2Vj9gqZ0M9RF3ZmN1QPFHjrP6lmPfpjkUEZKN4lH6q1fXvDtTgsvxyQt91JbWX+tr0zZI59NYd0A9TtILDCO7e76okHJVKo96wMprwQCeQpG4G5hhLJ+G8kP8W5ap+BYA7uAdsUGWfO4skT2Lqu03OBNloZ72C1o8J0tpodgZjUU92iBAZL5Uw0fHAXPVD0vd2afgH4AENDeitppIIJwXe7AC3ELn8Q5I/TZke6oSzfA6XeFdnTuN;4:7AkiiuBPV1fGgtk6O27Gu7j7SLJ5QdQ+mF5T1U4+ZaI+MCBknaPfiJ14EuevZBlxDQKwSZzWngDfrt631A25UHLoSlE3zpKdcSoGIwZmO1KCTj0kd2A9LJcZ2pxxlW5wGU2pZvrurcc2smy6+2gd2jsxe1BYqECd9OQs6nQvJFo2YE7qg3xwU2MDItKKRqDC5b84qSrMMG0kzVfBHcegr8DqgmSdBbQ25gvzhQ10JFMT8KMfidle4q5sOEV3E+UBUXxt5pVEJsRNpRNrngNiR7B5F+D7Mw6dMH30gEfdFrUUUorqmHlutfcEbr9VZDxvNdUE0MPFSZI2XoVXT+bRHgJXanDgsK82LtYMRNV7d/KtUTdiEt3sJ1r6B2+wsZBo X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(520075)(8121501046)(5005006)(520078)(520058)(3002001);SRVR:SN1PR12MB0720;BCL:0;PCL:0;RULEID:;SRVR:SN1PR12MB0720; X-Forefront-PRVS: 0703B549E4 X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;SN1PR12MB0720;23:fkJ5qOxumZciuUv9taVS49nIt9mi3B7mAkFiO?= =?Windows-1252?Q?UHkUZbEMZLCBKq28vF2HuoZuRO0GrV8X8Cfq54uH3+2UAGuvOlPfkNrz?= =?Windows-1252?Q?RHYb82/j1CONKGof35lZXKgFtcnYM4sBnFJoXf/2yHg4Hq1RN747KHEt?= =?Windows-1252?Q?cAldeO1fUezpgGFzkK9T8REtIQt/iILS86T4Pud7PjrmE078aSTIJzb3?= =?Windows-1252?Q?pYhfn+P/N1Gn8zSGiKBK2WGQRwrVj7CYBo24TQaPO1AXh/DXinXFuXFA?= =?Windows-1252?Q?WP0sb5ydjd5ZRDJZc2AUR/aeBXm0zFeSmyu5s2ScntI1EQXFplZxhIyk?= =?Windows-1252?Q?aaytVJdifwKEnc/949nqJ23hN7JQ9BpkJF0BchfRkSiRv4k6UDiSeq+P?= =?Windows-1252?Q?TsZonbdpY22IlknFuEtfqx5ctYi17uhHvknF1YqwmCZqak7D+txWnWQR?= =?Windows-1252?Q?tPYhtKo5KsoKQfE5sOwiGFy2Cp8/baVJXUoyW910O/Ieo0uSdl1vuFLr?= =?Windows-1252?Q?G1lFZDMI/tzu6yj6JwfSgpwNlnbKlYG/5p4Tf/23bv9/hga9O2nQiVQD?= =?Windows-1252?Q?nheNExUJG3uKMKMcOJwB0THw8s7qd5Fqjfaa2OVvEVtPC4lIQK/+PNIE?= =?Windows-1252?Q?LxyesVkmjCkOrXiw+1YuHOeUS08ES5d2LdD86pBbWtiyVmyP0OhSd9Ud?= =?Windows-1252?Q?plbffwvkG3UkjQZvk9PPuoJ0/waED4Sy/YCytgMIVGi87f1wxGHCzqXi?= =?Windows-1252?Q?XLcWyC5GqJNHU/Yj/jMxoWRGOCFGRDUiSuzW9gZr1geFDyVjXBGcwTp0?= =?Windows-1252?Q?Sv8BT2WSUknI5wBt1tLx5LSHUAjBVMpidt4uBwZ0oYtbiI9F0U3NkC2g?= =?Windows-1252?Q?GFMU5pH66jZmwz1sBV9kdqZhUyxvpoISItsFvAEN1I59nYCm/0UltkK3?= =?Windows-1252?Q?Nu+NN3T4kOaguPLWMPw5Wgs+82vrvfRLgaa8DNdpLvB6LA7T3uqz0JBj?= =?Windows-1252?Q?5NxBm2BZHbRfLc8R7NKFBkFTHYF9b45O6E9vQDhWDdE6+Iuce0KuX+Ln?= =?Windows-1252?Q?B1PGdHRPaUs5uUD+yV6Rsen6m3ZcQ9nu4k+0jY5QZfUi1UY3qwr76SGE?= =?Windows-1252?Q?oKyPvozzRUGdT2ujC65Js2WWeEQmXbaoBmSL3NXBrNlT2e2GoOWKeWCI?= =?Windows-1252?Q?9/5BFWMy+HBByg2E0vtlS+tjoT7MOIM/kTnGW5EgGt0bSE8eLyROKZdr?= =?Windows-1252?Q?Vhq4URltVzziOEnfA+bDa9Fi2X0vVrTZGpNV1lK9n80mmtSH9yXekt5p?= =?Windows-1252?Q?bRiWFeRoYa3c30tVk74PhBFYJiJaPRxS/jORaulzM3jCAhbf1o/cmNEd?= =?Windows-1252?Q?Jearmc2IfceCqP9SEauhDbzZTlfmiebg4/lVpPNPrpVEUxB1SYqbGreB?= =?Windows-1252?Q?itsdBYSrkNitNnpw41BDjLnztzbQt59oOM+Nn0uwxVvBB+yLE9hBWvLg?= =?Windows-1252?Q?pqcW4ytYjgPULikvZu7rjIWuHbkWGUR5yZ3aybpAfKFGSboX6Uj1u6wa?= =?Windows-1252?Q?+WJXzY5Lpq9QMFHjulma7smBJE5iXncA0tYMEHULKz4i1DMs2H2l38uu?= =?Windows-1252?Q?Za56b2Q25iNM75T1U4KnHg=3D?= X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0720;5:FrjW9AP+KmuY8Dx9GYqONMaBVmVhesXYEDtMpx8wSmbaa1GkHZGl9fr/otcXiG08wr2nN0GG7aMXU9RN8GSAWO3H+whAqrXKVO10UzCb954h/zyYw51+xcxTrAf5ixP/EgN/cOrfKm2f+qSZXCv5Zg==;24:7/D5rwT/Q8oiWvqNt5eakytzQoJHAMJyGXXbCtmjuy8DG8LspMC7sQk6wtiwt8Imq81FyysiV2YVGKepPriQvhRX7BEbtMYQQatUSNiI+lY=;20:chlGhFRwJDDkSO4ekepb1AO/WnXhWs20RkFmRRKYE6Cx+onQmMEIyAhMRYb6p7CBqy+GpaJ8mlhUDUHJ+wF9xg== SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Sep 2015 14:01:37.9014 (UTC) X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.221];Helo=[atltwp01.amd.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR12MB0720 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 09/18/2015 07:57 AM, LABBE Corentin wrote: > Some driver use a modified version of sg_nents_for_len with an > additional parameter bool *chained for knowing if the scatterlist is > chained or not. > > So, for removing duplicate code, add sg_nents_len_chained in > lib/scatterlist.c > > Signed-off-by: LABBE Corentin > --- > include/linux/scatterlist.h | 1 + > lib/scatterlist.c | 40 ++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 41 insertions(+) > > diff --git a/include/linux/scatterlist.h b/include/linux/scatterlist.h > index 556ec1e..594cdb0 100644 > --- a/include/linux/scatterlist.h > +++ b/include/linux/scatterlist.h > @@ -243,6 +243,7 @@ static inline void *sg_virt(struct scatterlist *sg) > > int sg_nents(struct scatterlist *sg); > int sg_nents_for_len(struct scatterlist *sg, u64 len); > +int sg_nents_len_chained(struct scatterlist *sg, u64 len, bool *chained); > struct scatterlist *sg_next(struct scatterlist *); > struct scatterlist *sg_last(struct scatterlist *s, unsigned int); > void sg_init_table(struct scatterlist *, unsigned int); > diff --git a/lib/scatterlist.c b/lib/scatterlist.c > index bafa993..070e396 100644 > --- a/lib/scatterlist.c > +++ b/lib/scatterlist.c > @@ -90,6 +90,46 @@ int sg_nents_for_len(struct scatterlist *sg, u64 len) > EXPORT_SYMBOL(sg_nents_for_len); > > /** > + * sg_nents_len_chained - return total count of entries in scatterlist > + * needed to satisfy the supplied length > + * @sg: The scatterlist > + * @len: The total required length > + * @chained A pointer where to store if SG is chained or not > + * > + * Description: > + * Determines the number of entries in sg that are required to meet > + * the supplied length, taking into account chaining as well > + * If the scatterlist is chained, set *chained to true. > + * > + * Returns: > + * the number of sg entries needed, negative error on failure > + * > + **/ > +int sg_nents_len_chained(struct scatterlist *sg, u64 len, bool *chained) > +{ > + int nents; > + u64 total; > + > + if (chained) > + *chained = false; > + > + if (!len) > + return 0; > + > + for (nents = 0, total = 0; sg; sg = sg_next(sg)) { > + nents++; > + total += sg->length; > + if (!sg_is_last(sg) && (sg + 1)->length == 0 && chained) Wouldn't it be better to use the sg_is_chain macro to determine if the the entry is chained instead of checking the length? Thanks, Tom > + *chained = true; > + if (total >= len) > + return nents; > + } > + > + return -EINVAL; > +} > +EXPORT_SYMBOL(sg_nents_len_chained); > + > +/** > * sg_last - return the last scatterlist entry in a list > * @sgl: First entry in the scatterlist > * @nents: Number of entries in the scatterlist >