Received: by 2002:a05:7412:8d10:b0:f3:1519:9f41 with SMTP id bj16csp6750740rdb; Fri, 15 Dec 2023 07:27:09 -0800 (PST) X-Google-Smtp-Source: AGHT+IE1fd9wvMb1wxih4JFnPezJXtbeZF9QuAnXDd3asVGnfFTM0i79btV/kD3ALugkZk0CO6yZ X-Received: by 2002:a17:902:e5cb:b0:1d3:73a1:edf5 with SMTP id u11-20020a170902e5cb00b001d373a1edf5mr1925013plf.31.1702654028786; Fri, 15 Dec 2023 07:27:08 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702654028; cv=none; d=google.com; s=arc-20160816; b=kXszbhi0fhwyF3tXaZ/YD82VdaNiamYE85KDWn5H9W/o3MnqEDVAxhsuMzNJ7Uhiyy jMA59Auj6OHzsJfyDALraUS3O3zmQM2FbwAhmhMr4w0+61NMX6yG6SRPu4+9lM/dVDb2 jQWUvroF7AYkD1IhdBMRLfg9rPK3jbzmJRkiRlDUIAHJdmWfbr3Vl4zxjjNkLR43sXef Tr2ojuM56qD/0atueWVUOAtbPUYCI0tE7kDLxSO7k6NtFmgPh0GNU2P5ZZBHxSqrTRPB i1Ezle4j1oanH9HHKCFht5B7nHi3dq0JDTRua9H3b9U4y8GSD/9oKzQ6XcNB6LXWfyF6 yp/g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:message-id:date:subject:cc:to :from:dkim-signature; bh=JoqSVwHBQHTvXPTlBR9xLdFvJzQruBkzGcY75QnaVIY=; fh=69Jsd9k4tqBl41GIkKvEVNyMPGNO0gds4YxQl1X+tu0=; b=iyQ/gCJ5tjbVyAodX4oywXz5JIVGhgOzAeOMt7a9kYe3ZwlOdhl3w2F+Whvy4g8VWQ dbxV6sRju27Vzlllr1+xl1qsFlmRVIwMT+gDvFAVt5X+16QDhWQQknakuEHG01M7kMbA PJtwKx+1uUDEEJxZA09J3gVn1jXb4xUkSGTEY4BCq3VU/UAJ9QnZuRF3rFVf65v0xwrb ZdpnUM5ngNpfwC2gZ6RwVwUhKwE4X92gcREj3AWvIZ76EBemgS2tExsTuMslYYJiQ4PD mbx8bM+ii8dRQZ5AbFnavNjhx9lHzsnn4E9JMRGqGKfgcW1jA0MQyHrjVpUUCRh5MLlt 6/Jw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=HkGVcrol; spf=pass (google.com: domain of linux-crypto+bounces-874-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-crypto+bounces-874-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [2604:1380:45e3:2400::1]) by mx.google.com with ESMTPS id a8-20020a170902b58800b001cfdbd5fe0bsi12808865pls.551.2023.12.15.07.27.08 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Dec 2023 07:27:08 -0800 (PST) Received-SPF: pass (google.com: domain of linux-crypto+bounces-874-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) client-ip=2604:1380:45e3:2400::1; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=HkGVcrol; spf=pass (google.com: domain of linux-crypto+bounces-874-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-crypto+bounces-874-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 5C104281555 for ; Fri, 15 Dec 2023 15:27:08 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 2633139FFC; Fri, 15 Dec 2023 15:27:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="HkGVcrol" X-Original-To: linux-crypto@vger.kernel.org Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.13]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1610C39FE4; Fri, 15 Dec 2023 15:26:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1702654020; x=1734190020; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=ZbsUhfpzOlZP4HelxUN8upZJntGREJDIbiHeVV/5Dls=; b=HkGVcrolLgzXdpMT82evrSrZmC4MUlvjtQhMLCITOYcSW9NfNrL0ykOv gEgndiRKywu3lb9sMY0HaOkVAMbwWJH5thL4lWqmxcbC/3fH5LONnczlc +M+rrJkaB8swP5J9tNX7HHbEeJzUFFGaukuoJZfIeAUrq/Hi+T+JB43nz F/Kn7LhBRH/7HGuknP50vgY+9rKW2Bmmt2xVfJ5wpSv+cPWmVaiahfywj 7i50tuOnJMUguewWaCoWsA9oBV37bI6fTemICr7fJxA96+cxdWSDuv0Cq OWZadPbYXbmRTYyn5haaAPQXRNwyJgPZccH03ri0C6TDRGfvRWHYfhsKx w==; X-IronPort-AV: E=McAfee;i="6600,9927,10924"; a="2374449" X-IronPort-AV: E=Sophos;i="6.04,279,1695711600"; d="scan'208";a="2374449" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by orvoesa105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Dec 2023 07:26:59 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10924"; a="750968704" X-IronPort-AV: E=Sophos;i="6.04,279,1695711600"; d="scan'208";a="750968704" Received: from r007s007_zp31l10c01.deacluster.intel.com (HELO fedora.deacluster.intel.com) ([10.219.171.169]) by orsmga006.jf.intel.com with ESMTP; 15 Dec 2023 07:26:58 -0800 From: Lucas Segarra Fernandez To: herbert@gondor.apana.org.au Cc: linux-kernel@vger.kernel.org, linux-crypto@vger.kernel.org, qat-linux@intel.com, Lucas Segarra Fernandez , Giovanni Cabiddu , Damian Muszynski Subject: [PATCH 1/5] math.h: Add avg_array() Date: Fri, 15 Dec 2023 16:24:40 +0100 Message-ID: <20231215152440.34537-1-lucas.segarra.fernandez@intel.com> X-Mailer: git-send-email 2.41.0 Precedence: bulk X-Mailing-List: linux-crypto@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Add macro to compute average of values within an array. This patch is based on earlier work done by Wojciech Ziemba. Signed-off-by: Lucas Segarra Fernandez Reviewed-by: Giovanni Cabiddu Reviewed-by: Damian Muszynski --- include/linux/math.h | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/include/linux/math.h b/include/linux/math.h index dd4152711de7..012416c92e89 100644 --- a/include/linux/math.h +++ b/include/linux/math.h @@ -205,4 +205,37 @@ static inline u32 int_sqrt64(u64 x) } #endif +/** + * avg_array() - Return average of values within an array. + * @array: Array of values. + * @len: Number of elements. + * + * This algorithm computes average of an array without running into overflow. + * + * Return: average of values. + */ +#define avg_array(array, len) ( \ +{ \ + typeof(&(array)[0]) _array = (array); \ + __unqual_scalar_typeof(_array[0]) _x = 0; \ + __unqual_scalar_typeof(_array[0]) _y = 0; \ + __unqual_scalar_typeof(_array[0]) _a, _b; \ + typeof(len) _len = (len); \ + size_t _i; \ + \ + for (_i = 0; _i < _len; _i++) { \ + _a = _array[_i]; \ + _b = do_div(_a, _len); \ + _x += _a; \ + if (_y >= _len - _b) { \ + _x++; \ + _y -= _len - _b; \ + } else { \ + _y += _b; \ + } \ + } \ + do_div(_y, _len); \ + (_x + _y); \ +}) + #endif /* _LINUX_MATH_H */ -- 2.41.0