From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933763AbbI3L3p (ORCPT ); Wed, 30 Sep 2015 07:29:45 -0400 Received: from mout.kundenserver.de ([212.227.126.131]:52724 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932661AbbI3L1O (ORCPT ); Wed, 30 Sep 2015 07:27:14 -0400 From: Arnd Bergmann To: netdev@vger.kernel.org Cc: y2038@lists.linaro.org, linux-kernel@vger.kernel.org, "David S. Miller" , Arnd Bergmann , Amitkumar Karwar , Nishant Sarmukadam , Kalle Valo , linux-wireless@vger.kernel.org Subject: [PATCH 05/12] mwifiex: avoid gettimeofday in ba_threshold setting Date: Wed, 30 Sep 2015 13:26:35 +0200 Message-Id: <1443612402-3000775-6-git-send-email-arnd@arndb.de> X-Mailer: git-send-email 2.1.0.rc2 In-Reply-To: <1443612402-3000775-1-git-send-email-arnd@arndb.de> References: <1443612402-3000775-1-git-send-email-arnd@arndb.de> X-Provags-ID: V03:K0:EDKEtk+n6v7x9mG9AdIpGHBV+p4HuCHGiy4Rj0+0YHbh1mbeKVA Wm0rxxFsH7sYhrSmKQIhFnhJglCFw/S4ptG7r+WQuaTAYkbYo2TWRfx4ro/Fy/8cdqOVDRm +DuuAUhwbGZL0qMBD5PpwFbHQnufsHLlnzawGvpUCHqCounfpb+GimCnEcbj5Sg+IoZ7Zbp CuMZ7sdCq1sN5G/wJLl+g== X-UI-Out-Filterresults: notjunk:1;V01:K0:ukdUJ+zNelw=:90nCDAcgySndCxcLnG8hse jiYaqC78mXZd/naoRny73d9546uiGDxYqUMEnlISAg//je8zxQMOA/9vDVboUgQlmB0S0ehZy qvDqLvowInMaQeMtL3j6Vq6xl7eIK6YpbA+mkCuVHtXsXFsEV3TSjZ93hnRAR5sthFtU41tv7 RC1LIIpxKJbm+41KlApb1o7K3UrmlkMLL6fGpbwtwcXK3O+lLLsl3HGDvRiOdIlwT2VuF1CwQ GXMA2bJDDVHyz72PZlmAXFF3Bf+PesnKaGkuksFzjhmauKZhYLXOSs7embZOvo/3gH3SDXLW2 TBOeQNRA1G0N5QNafeg/ymcoseYdkcO3zqeE1+3OH7IrjtreAPAcxkGPTGO55lMNA75muuFlq g7X86Ed9m+CZjDLI9boiPYfgbCs9nIU0aiMnh9VhXaIfj6rXFDJrNYTncZtlvYtuGqa0zoJUE o0vPVK2PUq55OcG2iHr/IBH+Vkhl77KtgZ11EHVWrcsdgSvjtdeqKftOvA+UA16/gaENUWG7E Ac2YdHwFLh7JjYrbfVDbSXOrjCUKQb20NuqtNqvcaJ7m0CY6nBdFwVJrljrdf6L4ROAkAwCq3 NDhjXZIU0mLuzSPP5d1quCvf/9njdwjo/JkRrX2mgjH5N2e5UHFwJIokTqbyg7MRcD3Ap+cau cEig+/fW/RxOtPsGEpLWxWqB5PHWxn0z7z/X4hJJfzxr1IEeBbGVAkE/e6uK3O1LYNfo= Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org mwifiex_get_random_ba_threshold() uses a complex homegrown implementation to generate a pseudo-random number from the current time as returned from do_gettimeofday(). This currently requires two 32-bit divisions plus a couple of other computations that are eventually discarded as only eight bits of the microsecond portion are used at all. We could replace this with a call to get_random_bytes(), but that might drain the entropy pool too fast if this is called for each packet. Instead, this patch converts it to use ktime_get_ns(), which is a bit faster than do_gettimeofday(), and then uses a similar algorithm as before, but in a way that takes both the nanosecond and second portion into account for slightly-more-but-still-not-very-random pseudorandom number. Signed-off-by: Arnd Bergmann Cc: Amitkumar Karwar Cc: Nishant Sarmukadam Cc: Kalle Valo Cc: linux-wireless@vger.kernel.org --- drivers/net/wireless/mwifiex/wmm.c | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/drivers/net/wireless/mwifiex/wmm.c b/drivers/net/wireless/mwifiex/wmm.c index 173d3663c2e0..878d358063dc 100644 --- a/drivers/net/wireless/mwifiex/wmm.c +++ b/drivers/net/wireless/mwifiex/wmm.c @@ -117,22 +117,15 @@ mwifiex_wmm_allocate_ralist_node(struct mwifiex_adapter *adapter, const u8 *ra) */ static u8 mwifiex_get_random_ba_threshold(void) { - u32 sec, usec; - struct timeval ba_tstamp; - u8 ba_threshold; - + u64 ns; /* setup ba_packet_threshold here random number between * [BA_SETUP_PACKET_OFFSET, * BA_SETUP_PACKET_OFFSET+BA_SETUP_MAX_PACKET_THRESHOLD-1] */ + ns = ktime_get_ns(); + ns += (ns >> 32) + (ns >> 16); - do_gettimeofday(&ba_tstamp); - sec = (ba_tstamp.tv_sec & 0xFFFF) + (ba_tstamp.tv_sec >> 16); - usec = (ba_tstamp.tv_usec & 0xFFFF) + (ba_tstamp.tv_usec >> 16); - ba_threshold = (((sec << 16) + usec) % BA_SETUP_MAX_PACKET_THRESHOLD) - + BA_SETUP_PACKET_OFFSET; - - return ba_threshold; + return ((u8)ns % BA_SETUP_MAX_PACKET_THRESHOLD) + BA_SETUP_PACKET_OFFSET; } /* -- 2.1.0.rc2