[IA64] tidy up return value of ip_fast_csum
authorChen, Kenneth W <kenneth.w.chen@intel.com>
Thu, 9 Nov 2006 00:29:25 +0000 (16:29 -0800)
committerTony Luck <tony.luck@intel.com>
Thu, 7 Dec 2006 19:19:59 +0000 (11:19 -0800)
While working on implementing csum_ipv6_magic, I noticed that current
version of ip_fast_csum will potentially return bits above "unsigned
short" as 1.  While no harm is done right now because all call sites
will chop off the upper bits when it uses the return value.  However,
this is still dangerous and buggy.  Here is a patch to enforce that the
function really returns unsigned short in the native register format.

The fix is free as there are plenty open slot to add one more asm instruction.

Signed-off-by: Ken Chen <kenneth.w.chen@intel.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
arch/ia64/lib/ip_fast_csum.S

index 4fb132ee207a9305711682cc7ce847ff22153db1..1f86aeb2c9485bb70054280b103fa8280bbad3dc 100644 (file)
@@ -68,8 +68,9 @@ GLOBAL_ENTRY(ip_fast_csum)
        zxt2    r20=r20
        ;;
        add     r20=ret0,r20
+       mov     r9=0xffff
        ;;
-       andcm   ret0=-1,r20
+       andcm   ret0=r9,r20
        .restore sp             // reset frame state
        br.ret.sptk.many b0
        ;;