|
@@ -404,17 +404,18 @@ static void __arm_lpae_free_pgtable(struct arm_lpae_io_pgtable *data, int lvl,
|
|
|
arm_lpae_iopte *start, *end;
|
|
|
unsigned long table_size;
|
|
|
|
|
|
- /* Only leaf entries at the last level */
|
|
|
- if (lvl == ARM_LPAE_MAX_LEVELS - 1)
|
|
|
- return;
|
|
|
-
|
|
|
if (lvl == ARM_LPAE_START_LVL(data))
|
|
|
table_size = data->pgd_size;
|
|
|
else
|
|
|
table_size = ARM_LPAE_GRANULE(data);
|
|
|
|
|
|
start = ptep;
|
|
|
- end = (void *)ptep + table_size;
|
|
|
+
|
|
|
+ /* Only leaf entries at the last level */
|
|
|
+ if (lvl == ARM_LPAE_MAX_LEVELS - 1)
|
|
|
+ end = ptep;
|
|
|
+ else
|
|
|
+ end = (void *)ptep + table_size;
|
|
|
|
|
|
while (ptep != end) {
|
|
|
arm_lpae_iopte pte = *ptep++;
|