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)
|
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)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user