@@ -99,13 +99,13 @@ static struct kobject *mokvar_kobj;
99
99
*/
100
100
void __init efi_mokvar_table_init (void )
101
101
{
102
+ struct efi_mokvar_table_entry __aligned (1 ) * mokvar_entry , * next_entry ;
102
103
efi_memory_desc_t md ;
103
104
void * va = NULL ;
104
105
unsigned long cur_offset = 0 ;
105
106
unsigned long offset_limit ;
106
107
unsigned long map_size_needed = 0 ;
107
108
unsigned long size ;
108
- struct efi_mokvar_table_entry * mokvar_entry ;
109
109
int err ;
110
110
111
111
if (!efi_enabled (EFI_MEMMAP ))
@@ -142,7 +142,7 @@ void __init efi_mokvar_table_init(void)
142
142
return ;
143
143
}
144
144
mokvar_entry = va ;
145
-
145
+ next :
146
146
/* Check for last sentinel entry */
147
147
if (mokvar_entry -> name [0 ] == '\0' ) {
148
148
if (mokvar_entry -> data_size != 0 )
@@ -156,7 +156,19 @@ void __init efi_mokvar_table_init(void)
156
156
mokvar_entry -> name [sizeof (mokvar_entry -> name ) - 1 ] = '\0' ;
157
157
158
158
/* Advance to the next entry */
159
- cur_offset += sizeof (* mokvar_entry ) + mokvar_entry -> data_size ;
159
+ size = sizeof (* mokvar_entry ) + mokvar_entry -> data_size ;
160
+ cur_offset += size ;
161
+
162
+ /*
163
+ * Don't bother remapping if the current entry header and the
164
+ * next one end on the same page.
165
+ */
166
+ next_entry = (void * )((unsigned long )mokvar_entry + size );
167
+ if (((((unsigned long )(mokvar_entry + 1 ) - 1 ) ^
168
+ ((unsigned long )(next_entry + 1 ) - 1 )) & PAGE_MASK ) == 0 ) {
169
+ mokvar_entry = next_entry ;
170
+ goto next ;
171
+ }
160
172
}
161
173
162
174
if (va )
0 commit comments