|
@@ -525,6 +525,9 @@ extern void slb_set_size(u16 size);
|
|
|
#define ESID_BITS 18
|
|
|
#define ESID_BITS_1T 6
|
|
|
|
|
|
+#define ESID_BITS_MASK ((1 << ESID_BITS) - 1)
|
|
|
+#define ESID_BITS_1T_MASK ((1 << ESID_BITS_1T) - 1)
|
|
|
+
|
|
|
/*
|
|
|
* 256MB segment
|
|
|
* The proto-VSID space has 2^(CONTEX_BITS + ESID_BITS) - 1 segments
|
|
@@ -660,9 +663,9 @@ static inline unsigned long get_vsid(unsigned long context, unsigned long ea,
|
|
|
|
|
|
if (ssize == MMU_SEGSIZE_256M)
|
|
|
return vsid_scramble((context << ESID_BITS)
|
|
|
- | (ea >> SID_SHIFT), 256M);
|
|
|
+ | ((ea >> SID_SHIFT) & ESID_BITS_MASK), 256M);
|
|
|
return vsid_scramble((context << ESID_BITS_1T)
|
|
|
- | (ea >> SID_SHIFT_1T), 1T);
|
|
|
+ | ((ea >> SID_SHIFT_1T) & ESID_BITS_1T_MASK), 1T);
|
|
|
}
|
|
|
|
|
|
/*
|