Kernel: Fix remote TLB shootdown for <= 32 pages

I was modifying the `vaddr` argument while invalidating which lead to
the smp message containing wrong virtual address. This showed up in
really weird bugs from invalid TLB
This commit is contained in:
2026-05-06 15:02:38 +03:00
parent 3ac955714b
commit 443be800b7
2 changed files with 4 additions and 4 deletions

View File

@@ -343,8 +343,8 @@ namespace Kernel
; ;
else if (pages <= 32 || !s_is_initialized) else if (pages <= 32 || !s_is_initialized)
{ {
for (size_t i = 0; i < pages; i++, vaddr += PAGE_SIZE) for (size_t i = 0; i < pages; i++)
asm volatile("invlpg (%0)" :: "r"(vaddr)); asm volatile("invlpg (%0)" :: "r"(vaddr + i * PAGE_SIZE));
} }
else if (is_userspace || !s_has_pge) else if (is_userspace || !s_has_pge)
{ {

View File

@@ -472,8 +472,8 @@ namespace Kernel
; ;
else if (pages <= 32 || !s_is_initialized) else if (pages <= 32 || !s_is_initialized)
{ {
for (size_t i = 0; i < pages; i++, vaddr += PAGE_SIZE) for (size_t i = 0; i < pages; i++)
asm volatile("invlpg (%0)" :: "r"(vaddr)); asm volatile("invlpg (%0)" :: "r"(vaddr + i * PAGE_SIZE));
} }
else if (is_userspace || !s_has_pge) else if (is_userspace || !s_has_pge)
{ {