Fixed minor issues for x86_64 target. 71/275171/1
authorvarinder.p <varinder.p@samsung.com>
Mon, 16 May 2022 12:29:54 +0000 (17:59 +0530)
committerVarinder Pratap Singh <varinder.p@samsung.com>
Tue, 17 May 2022 17:31:51 +0000 (23:01 +0530)
Change-Id: Ia852ef69a388262a08c01bf95a830cd9cb264a5c
Signed-off-by: varinder.p <varinder.p@samsung.com>
accel/tcg/cpu-exec.c
accel/tcg/translate-all.c
contrib/vhost-user-gpu/virgl.c

index d95c4848a47bcc1e82372deb3f9488736c7ccb95..3a4cc97a04e1d786ed90a56b9245ebf774271e3e 100644 (file)
@@ -662,7 +662,7 @@ static inline void cpu_loop_exec_tb(CPUState *cpu, TranslationBlock *tb,
 int cpu_exec(CPUState *cpu)
 {
     CPUClass *cc = CPU_GET_CLASS(cpu);
-    int ret;
+    int ret = 0;
     SyncClocks sc = { 0 };
 
     /* replay_interrupt may need current_cpu */
index 9924e66d1f7724aaccf6fcedf2fcd70ff85ec2a0..16c6da209e01465f2a46b1243df5185d69a18647 100644 (file)
@@ -29,6 +29,9 @@
 #include "tcg/tcg.h"
 #if defined(CONFIG_USER_ONLY)
 #include "qemu.h"
+#if defined(TARGET_X86_64)
+#include "vsyscall.h"
+#endif
 #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
 #include <sys/param.h>
 #if __FreeBSD_version >= 700104
@@ -1821,6 +1824,14 @@ TranslationBlock *tb_gen_code(CPUState *cpu,
         ROUND_UP((uintptr_t)gen_code_buf + gen_code_size + search_size,
                  CODE_GEN_ALIGN));
 
+#if defined(CONFIG_USER_ONLY) && defined(TARGET_X86_64)
+    /* if we are doing vsyscall don't link the page as it lies in high memory
+       and tb_alloc_page will abort due to page_l1_map returning NULL */
+    if (unlikely(phys_pc >= TARGET_VSYSCALL_START
+                 && phys_pc < TARGET_VSYSCALL_END))
+        return tb;
+#endif
+
     /* init jump list */
     qemu_spin_init(&tb->jmp_lock);
     tb->jmp_list_head = (uintptr_t)NULL;
index b0bc22c3c13db0e8b0b450dac19df5390afbca26..43413e29df9d46739c09d2d501df7859222cca4d 100644 (file)
@@ -519,7 +519,7 @@ virgl_write_fence(void *opaque, uint32_t fence)
         g_debug("FENCE %" PRIu64, cmd->cmd_hdr.fence_id);
         vg_ctrl_response_nodata(g, cmd, VIRTIO_GPU_RESP_OK_NODATA);
         QTAILQ_REMOVE(&g->fenceq, cmd, next);
-        free(cmd);
+        g_free(cmd);
         g->inflight--;
     }
 }