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:
@@ -343,8 +343,8 @@ namespace Kernel
|
||||
;
|
||||
else if (pages <= 32 || !s_is_initialized)
|
||||
{
|
||||
for (size_t i = 0; i < pages; i++, vaddr += PAGE_SIZE)
|
||||
asm volatile("invlpg (%0)" :: "r"(vaddr));
|
||||
for (size_t i = 0; i < pages; i++)
|
||||
asm volatile("invlpg (%0)" :: "r"(vaddr + i * PAGE_SIZE));
|
||||
}
|
||||
else if (is_userspace || !s_has_pge)
|
||||
{
|
||||
|
||||
@@ -472,8 +472,8 @@ namespace Kernel
|
||||
;
|
||||
else if (pages <= 32 || !s_is_initialized)
|
||||
{
|
||||
for (size_t i = 0; i < pages; i++, vaddr += PAGE_SIZE)
|
||||
asm volatile("invlpg (%0)" :: "r"(vaddr));
|
||||
for (size_t i = 0; i < pages; i++)
|
||||
asm volatile("invlpg (%0)" :: "r"(vaddr + i * PAGE_SIZE));
|
||||
}
|
||||
else if (is_userspace || !s_has_pge)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user