From: Roland Dreier Fix handling of fields with size_bits == 64. Pointed out by Hal Rosenstock. Signed-off-by: Roland Dreier Signed-off-by: Andrew Morton --- drivers/infiniband/core/packer.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff -puN drivers/infiniband/core/packer.c~ib-fix-pack-unpack-when-size_bits-==-64 drivers/infiniband/core/packer.c --- 25/drivers/infiniband/core/packer.c~ib-fix-pack-unpack-when-size_bits-==-64 2005-06-24 23:40:56.000000000 -0700 +++ 25-akpm/drivers/infiniband/core/packer.c 2005-06-24 23:40:56.000000000 -0700 @@ -96,7 +96,7 @@ void ib_pack(const struct ib_field else val = 0; - mask = cpu_to_be64(((1ull << desc[i].size_bits) - 1) << shift); + mask = cpu_to_be64((~0ull >> (64 - desc[i].size_bits)) << shift); addr = (__be64 *) ((__be32 *) buf + desc[i].offset_words); *addr = (*addr & ~mask) | (cpu_to_be64(val) & mask); } else { @@ -176,7 +176,7 @@ void ib_unpack(const struct ib_field __be64 *addr; shift = 64 - desc[i].offset_bits - desc[i].size_bits; - mask = ((1ull << desc[i].size_bits) - 1) << shift; + mask = (~0ull >> (64 - desc[i].size_bits)) << shift; addr = (__be64 *) buf + desc[i].offset_words; val = (be64_to_cpup(addr) & mask) >> shift; value_write(desc[i].struct_offset_bytes, _