diff options
Diffstat (limited to 'arch/s390/lib/uaccess_pt.c')
-rw-r--r-- | arch/s390/lib/uaccess_pt.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/arch/s390/lib/uaccess_pt.c b/arch/s390/lib/uaccess_pt.c index 466fb3383960..50ea137a2d3c 100644 --- a/arch/s390/lib/uaccess_pt.c +++ b/arch/s390/lib/uaccess_pt.c | |||
@@ -89,16 +89,19 @@ static unsigned long follow_table(struct mm_struct *mm, | |||
89 | if (unlikely(*table & _REGION_ENTRY_INV)) | 89 | if (unlikely(*table & _REGION_ENTRY_INV)) |
90 | return -0x39UL; | 90 | return -0x39UL; |
91 | table = (unsigned long *)(*table & _REGION_ENTRY_ORIGIN); | 91 | table = (unsigned long *)(*table & _REGION_ENTRY_ORIGIN); |
92 | /* fallthrough */ | ||
92 | case _ASCE_TYPE_REGION2: | 93 | case _ASCE_TYPE_REGION2: |
93 | table = table + ((address >> 42) & 0x7ff); | 94 | table = table + ((address >> 42) & 0x7ff); |
94 | if (unlikely(*table & _REGION_ENTRY_INV)) | 95 | if (unlikely(*table & _REGION_ENTRY_INV)) |
95 | return -0x3aUL; | 96 | return -0x3aUL; |
96 | table = (unsigned long *)(*table & _REGION_ENTRY_ORIGIN); | 97 | table = (unsigned long *)(*table & _REGION_ENTRY_ORIGIN); |
98 | /* fallthrough */ | ||
97 | case _ASCE_TYPE_REGION3: | 99 | case _ASCE_TYPE_REGION3: |
98 | table = table + ((address >> 31) & 0x7ff); | 100 | table = table + ((address >> 31) & 0x7ff); |
99 | if (unlikely(*table & _REGION_ENTRY_INV)) | 101 | if (unlikely(*table & _REGION_ENTRY_INV)) |
100 | return -0x3bUL; | 102 | return -0x3bUL; |
101 | table = (unsigned long *)(*table & _REGION_ENTRY_ORIGIN); | 103 | table = (unsigned long *)(*table & _REGION_ENTRY_ORIGIN); |
104 | /* fallthrough */ | ||
102 | case _ASCE_TYPE_SEGMENT: | 105 | case _ASCE_TYPE_SEGMENT: |
103 | table = table + ((address >> 20) & 0x7ff); | 106 | table = table + ((address >> 20) & 0x7ff); |
104 | if (unlikely(*table & _SEGMENT_ENTRY_INV)) | 107 | if (unlikely(*table & _SEGMENT_ENTRY_INV)) |