|
@@ -723,11 +723,23 @@ static unsigned long mpx_get_bt_entry_offset_bytes(struct mm_struct *mm,
|
|
|
*/
|
|
|
static inline unsigned long bd_entry_virt_space(struct mm_struct *mm)
|
|
|
{
|
|
|
- unsigned long long virt_space = (1ULL << boot_cpu_data.x86_virt_bits);
|
|
|
- if (is_64bit_mm(mm))
|
|
|
- return virt_space / MPX_BD_NR_ENTRIES_64;
|
|
|
- else
|
|
|
- return virt_space / MPX_BD_NR_ENTRIES_32;
|
|
|
+ unsigned long long virt_space;
|
|
|
+ unsigned long long GB = (1ULL << 30);
|
|
|
+
|
|
|
+ /*
|
|
|
+ * This covers 32-bit emulation as well as 32-bit kernels
|
|
|
+ * running on 64-bit harware.
|
|
|
+ */
|
|
|
+ if (!is_64bit_mm(mm))
|
|
|
+ return (4ULL * GB) / MPX_BD_NR_ENTRIES_32;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * 'x86_virt_bits' returns what the hardware is capable
|
|
|
+ * of, and returns the full >32-bit adddress space when
|
|
|
+ * running 32-bit kernels on 64-bit hardware.
|
|
|
+ */
|
|
|
+ virt_space = (1ULL << boot_cpu_data.x86_virt_bits);
|
|
|
+ return virt_space / MPX_BD_NR_ENTRIES_64;
|
|
|
}
|
|
|
|
|
|
/*
|