mask = ((1ull << desc[i].size_bits) - 1) << shift; 
mask = (~0ull >> (64 - desc[i].size_bits)) << shift; 
void ib_unpack(const struct ib_field        *desc,	       int                           desc_len,	       void                         *buf,	       void                         *structure){	int i;	for (i = 0; i < desc_len; ++i) {		if (!desc[i].struct_size_bytes)			continue;		if (desc[i].size_bits <= 32) {			int shift;			u32  val;			u32  mask;			__be32 *addr;			shift = 32 - desc[i].offset_bits - desc[i].size_bits;			mask = ((1ull << desc[i].size_bits) - 1) << shift;			addr = (__be32 *) buf + desc[i].offset_words;			val = (be32_to_cpup(addr) & mask) >> shift;			value_write(desc[i].struct_offset_bytes,				    desc[i].struct_size_bytes,				    val,				    structure);		} else if (desc[i].size_bits <= 64) {			int shift;			u64  val;			u64  mask;			__be64 *addr;			shift = 64 - desc[i].offset_bits - desc[i].size_bits;			mask = ((1ull << desc[i].size_bits) - 1) << shift;			addr = (__be64 *) buf + desc[i].offset_words;			val = (be64_to_cpup(addr) & mask) >> shift;			value_write(desc[i].struct_offset_bytes,				    desc[i].struct_size_bytes,				    val,				    structure);		} else {			if (desc[i].offset_bits % 8 ||			    desc[i].size_bits   % 8) {				printk(KERN_WARNING "Structure field %s of size %d "				       "bits is not byte-aligned\n",				       desc[i].field_name, desc[i].size_bits);			}			memcpy(structure + desc[i].struct_offset_bytes,			       buf + desc[i].offset_words * 4 +			       desc[i].offset_bits / 8,			       desc[i].size_bits / 8);		}	}}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/48442962ebccec92d8a65f465420423cd2ce0bc8/packer.c/buggy/drivers/infiniband/core/packer.c