mask = cpu_to_be64(((1ull << desc[i].size_bits) - 1) << shift); 
mask = cpu_to_be64((~0ull >> (64 - desc[i].size_bits)) << shift); 
void ib_pack(const struct ib_field        *desc,	     int                           desc_len,	     void                         *structure,	     void                         *buf){	int i;	for (i = 0; i < desc_len; ++i) {		if (desc[i].size_bits <= 32) {			int shift;			u32 val;			__be32 mask;			__be32 *addr;			shift = 32 - desc[i].offset_bits - desc[i].size_bits;			if (desc[i].struct_size_bytes)				val = value_read(desc[i].struct_offset_bytes,						 desc[i].struct_size_bytes,						 structure) << shift;			else				val = 0;			mask = cpu_to_be32(((1ull << desc[i].size_bits) - 1) << shift);			addr = (__be32 *) buf + desc[i].offset_words;			*addr = (*addr & ~mask) | (cpu_to_be32(val) & mask);		} else if (desc[i].size_bits <= 64) {			int shift;			u64 val;			__be64 mask;			__be64 *addr;			shift = 64 - desc[i].offset_bits - desc[i].size_bits;			if (desc[i].struct_size_bytes)				val = value_read(desc[i].struct_offset_bytes,						 desc[i].struct_size_bytes,						 structure) << shift;			else				val = 0;			mask = cpu_to_be64(((1ull << desc[i].size_bits) - 1) << shift);			addr = (__be64 *) ((__be32 *) buf + desc[i].offset_words);			*addr = (*addr & ~mask) | (cpu_to_be64(val) & mask);		} 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);			}			if (desc[i].struct_size_bytes)				memcpy(buf + desc[i].offset_words * 4 +				       desc[i].offset_bits / 8,				       structure + desc[i].struct_offset_bytes,				       desc[i].size_bits / 8);			else				memset(buf + desc[i].offset_words * 4 +				       desc[i].offset_bits / 8,				       0,				       desc[i].size_bits / 8);		}	}}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/48442962ebccec92d8a65f465420423cd2ce0bc8/packer.c/clean/drivers/infiniband/core/packer.c