"Aneesh Kumar K.V" <aneesh.ku...@linux.vnet.ibm.com> writes:
...... > /* Returns the segment size indicator for a user address */ > @@ -534,11 +544,17 @@ static inline int user_segment_size(unsigned long addr) > static inline unsigned long get_vsid(unsigned long context, unsigned long ea, > int ssize) > { > - if (ssize == MMU_SEGSIZE_256M) > - return vsid_scramble((context << USER_ESID_BITS) > - | (ea >> SID_SHIFT), 256M); > - return vsid_scramble((context << USER_ESID_BITS_1T) > - | (ea >> SID_SHIFT_1T), 1T); > + unsigned long proto_vsid; > + if (ssize == MMU_SEGSIZE_256M) { > + proto_vsid = ((context << USER_ESID_BITS) |(ea >> SID_SHIFT)); > + /* truncate this to 37 bits */ > + proto_vsid &= (1UL << (CONTEXT_BITS + USER_ESID_BITS)) - 1; > + return vsid_scramble(proto_vsid, 256M); > + } > + proto_vsid = ((context << USER_ESID_BITS_1T) | (ea >> SID_SHIFT_1T)); > + /* truncate this to 25 bits */ > + proto_vsid &= (1UL << (CONTEXT_BITS + USER_ESID_BITS_1T)) - 1; > + return vsid_scramble( proto_vsid, 1T); > } I guess we can drop this hunk and related asm, because context is guaranteed to be <= CONTEXT_BITS (via MAX_CONTEXTS ) -aneesh _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev