- thread-pool: optimize scheduling of completion bottom half - migration/rdma: zore out head.repeat to make the error more clear - vhost-user-fs: Back up vqs before cleaning up vhost_dev - hw/vfio/pci-quirks: Sanitize capability pointer - hw/vfio/pci-quirks: Support alternate offset for GPUDirect Cliques - replay: fix event queue flush for qemu shutdown - hw/net: Fix read of uninitialized memory in ftgmac100 - target/ppc: Fix tlbie - target/i386: fix INVD vmexit - qtest/npcm7xx_pwm-test: Fix memory leak in mft_qom_set - aio-posix: zero out io_uring sqe user_data Signed-off-by: Jiabo Feng <fengjiabo1@huawei.com>
48 lines
1.9 KiB
Diff
48 lines
1.9 KiB
Diff
From aba3dd63d054cd21054e295d5a9d493cb9d7a75f Mon Sep 17 00:00:00 2001
|
|
From: tangbinzy <tangbin_yewu@cmss.chinamobile.com>
|
|
Date: Tue, 26 Sep 2023 06:25:04 +0000
|
|
Subject: [PATCH] target/ppc: Fix tlbie mainline inclusion commit
|
|
4ddc104689b186c4e4ed30be59a54463501761cf category: bugfix
|
|
|
|
---------------------------------------------------------------
|
|
|
|
Commit 74c4912f097bab98 changed check_tlb_flush() to use
|
|
tlb_flush_all_cpus_synced() instead of calling tlb_flush() on each
|
|
CPU. However, as side effect of this, a CPU executing a ptesync
|
|
after a tlbie will have its TLB flushed only after exiting its
|
|
current Translation Block (TB).
|
|
|
|
This causes memory accesses to invalid pages to succeed, if they
|
|
happen to be on the same TB as the ptesync.
|
|
|
|
To fix this, use tlb_flush_all_cpus() instead, that immediately
|
|
flushes the TLB of the CPU executing the ptesync instruction.
|
|
|
|
Fixes: 74c4912f097bab98 ("target/ppc: Fix synchronization of mttcg with broadcast TLB flushes")
|
|
Signed-off-by: Leandro Lupori <leandro.lupori@eldorado.org.br>
|
|
Reviewed-by: Fabiano Rosas <farosas@linux.ibm.com>
|
|
Message-Id: <20220503163904.22575-1-leandro.lupori@eldorado.org.br>
|
|
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
|
|
|
|
Signed-off-by: tangbinzy <tangbin_yewu@cmss.chinamobile.com>
|
|
---
|
|
target/ppc/helper_regs.c | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/target/ppc/helper_regs.c b/target/ppc/helper_regs.c
|
|
index 99562edd57..e97d25e9ab 100644
|
|
--- a/target/ppc/helper_regs.c
|
|
+++ b/target/ppc/helper_regs.c
|
|
@@ -288,7 +288,7 @@ void check_tlb_flush(CPUPPCState *env, bool global)
|
|
if (global && (env->tlb_need_flush & TLB_NEED_GLOBAL_FLUSH)) {
|
|
env->tlb_need_flush &= ~TLB_NEED_GLOBAL_FLUSH;
|
|
env->tlb_need_flush &= ~TLB_NEED_LOCAL_FLUSH;
|
|
- tlb_flush_all_cpus_synced(cs);
|
|
+ tlb_flush_all_cpus(cs);
|
|
return;
|
|
}
|
|
|
|
--
|
|
2.41.0.windows.1
|
|
|