"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

Reply via email to