Re: [PATCH 2/5] powerpc: ftrace, convert to new dynamic ftracearch API

From: Michael Ellerman
Date: Sun Nov 23 2008 - 21:49:59 EST


On Mon, 2008-11-24 at 12:43 +1100, Paul Mackerras wrote:
> Steven Rostedt writes:
>
> > Thanks to Paul Mackennas for pointing out the mistakes of my original
>
> Mackerras
>
> > +static int test_24bit_addr(unsigned long ip, unsigned long addr)
> > +{
> > + long diff;
> > +
> > + /*
> > + * Can we get to addr from ip in 24 bits?
> > + * (26 really, since we mulitply by 4 for 4 byte alignment)
> > + */
> > + diff = addr - ip;
> > +
> > + /*
> > + * Return true if diff is less than 1 << 25
> > + * and greater than -1 << 26.
> > + */
> > + return (diff < (1 << 25)) && (diff > (-1 << 26));
>
> I think this still isn't right, and the comment is one of those ones
> that is only useful to people who can't read C, as it's just a
> transliteration of the code.
>
> The comment should say something like "Return true if diff can be
> represented as a 26-bit twos-complement binary number" and the second
> part of the test should be (diff >= (-1 << 25)). However, since you
> define a test_offset() function in patch 4/5 that does the same test
> but using only one comparison instead of two, why don't you just say:
>
> return !test_offset(diff);
>
> (having first moved test_offset() before test_24bit_addr)?

Or better still, split out and use the code from create_branch() in
arch/powerpc/lib/code-patching.c .. which is hopefully correct :)

cheers

--
Michael Ellerman
OzLabs, IBM Australia Development Lab

wwweb: http://michael.ellerman.id.au
phone: +61 2 6212 1183 (tie line 70 21183)

We do not inherit the earth from our ancestors,
we borrow it from our children. - S.M.A.R.T Person

Attachment: signature.asc
Description: This is a digitally signed message part