From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ben Hutchings Subject: Re: [PATCH net-next 2/2] reciprocal_divide: correction/update of the algorithm Date: Thu, 16 Jan 2014 00:17:50 +0000 Message-ID: <1389831470.11912.40.camel@bwh-desktop.uk.level5networks.com> References: <1389828228-30312-1-git-send-email-dborkman@redhat.com> <1389828228-30312-3-git-send-email-dborkman@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit Cc: , , , Hannes Frederic Sowa , Eric Dumazet , "Austin S Hemmelgarn" , Jesse Gross , "Jamal Hadi Salim" , Stephen Hemminger , Matt Mackall , Pekka Enberg , Christoph Lameter , "Andy Gospodarek" , Veaceslav Falico , "Jay Vosburgh" , Jakub Zawadzki To: Daniel Borkmann Return-path: Received: from webmail.solarflare.com ([12.187.104.25]:23817 "EHLO webmail.solarflare.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751965AbaAPAR5 (ORCPT ); Wed, 15 Jan 2014 19:17:57 -0500 In-Reply-To: <1389828228-30312-3-git-send-email-dborkman@redhat.com> Sender: netdev-owner@vger.kernel.org List-ID: On Thu, 2014-01-16 at 00:23 +0100, Daniel Borkmann wrote: [...] > --- a/include/linux/reciprocal_div.h > +++ b/include/linux/reciprocal_div.h [...] > + * RECIPROCAL_VALUE_TO_ZERO can be used to express an element, which > + * used as the argument to reciprocal_divide always yields zero. > */ [...] > +#define RECIPROCAL_VALUE_RESULT_TO_ZERO ((struct reciprocal_value){.sh1 = 32}) [...] > +static inline u32 reciprocal_divide(u32 a, struct reciprocal_value R) > { > - return (u32)(((u64)A * R) >> 32); > + u32 t = (u32)(((u64)a * R.m) >> 32); > + return (t + ((a - t) >> R.sh1)) >> R.sh2; [...] (a - t) has type u32. So (a - t) >> 32 has undefined behaviour. Ben. -- Ben Hutchings, Staff Engineer, Solarflare Not speaking for my employer; that's the marketing department's job. They asked us to note that Solarflare product names are trademarked.