Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/1429472/?format=api
{ "id": 1429472, "url": "http://patchwork.ozlabs.org/api/patches/1429472/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20210120224444.71840-7-agraf@csgraf.de/", "project": { "id": 14, "url": "http://patchwork.ozlabs.org/api/projects/14/?format=api", "name": "QEMU Development", "link_name": "qemu-devel", "list_id": "qemu-devel.nongnu.org", "list_email": "qemu-devel@nongnu.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20210120224444.71840-7-agraf@csgraf.de>", "list_archive_url": null, "date": "2021-01-20T22:44:39", "name": "[v6,06/11] hvf: Simplify post reset/init/loadvm hooks", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "7388ac66b2c8f4cfcb2a33f909f3f2ba190ecce2", "submitter": { "id": 65661, "url": "http://patchwork.ozlabs.org/api/people/65661/?format=api", "name": "Alexander Graf", "email": "agraf@csgraf.de" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20210120224444.71840-7-agraf@csgraf.de/mbox/", "series": [ { "id": 225556, "url": "http://patchwork.ozlabs.org/api/series/225556/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=225556", "date": "2021-01-20T22:44:33", "name": "hvf: Implement Apple Silicon Support", "version": 6, "mbox": "http://patchwork.ozlabs.org/series/225556/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/1429472/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/1429472/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@bilbo.ozlabs.org", "Authentication-Results": "ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=<UNKNOWN>)", "Received": [ "from lists.gnu.org (lists.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 4DLgjG1sbfz9sT6\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 21 Jan 2021 09:50:42 +1100 (AEDT)", "from localhost ([::1]:48804 helo=lists1p.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1l2MJE-0001b4-7V\n\tfor incoming@patchwork.ozlabs.org; Wed, 20 Jan 2021 17:50:40 -0500", "from eggs.gnu.org ([2001:470:142:3::10]:56580)\n by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <agraf@csgraf.de>)\n id 1l2MDf-0003sm-Nr; Wed, 20 Jan 2021 17:44:56 -0500", "from mail.csgraf.de ([188.138.100.120]:45200\n helo=zulu616.server4you.de) by eggs.gnu.org with esmtp (Exim 4.90_1)\n (envelope-from <agraf@csgraf.de>)\n id 1l2MDd-0001V5-MB; Wed, 20 Jan 2021 17:44:55 -0500", "from localhost.localdomain\n (dynamic-077-002-091-253.77.2.pool.telefonica.de [77.2.91.253])\n by csgraf.de (Postfix) with ESMTPSA id BCA273900565;\n Wed, 20 Jan 2021 23:44:49 +0100 (CET)" ], "From": "Alexander Graf <agraf@csgraf.de>", "To": "qemu-devel@nongnu.org", "Subject": "[PATCH v6 06/11] hvf: Simplify post reset/init/loadvm hooks", "Date": "Wed, 20 Jan 2021 23:44:39 +0100", "Message-Id": "<20210120224444.71840-7-agraf@csgraf.de>", "X-Mailer": "git-send-email 2.24.3 (Apple Git-128)", "In-Reply-To": "<20210120224444.71840-1-agraf@csgraf.de>", "References": "<20210120224444.71840-1-agraf@csgraf.de>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Received-SPF": "pass client-ip=188.138.100.120; envelope-from=agraf@csgraf.de;\n helo=zulu616.server4you.de", "X-Spam_score_int": "-18", "X-Spam_score": "-1.9", "X-Spam_bar": "-", "X-Spam_report": "(-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001,\n SPF_PASS=-0.001 autolearn=ham autolearn_force=no", "X-Spam_action": "no action", "X-BeenThere": "qemu-devel@nongnu.org", "X-Mailman-Version": "2.1.23", "Precedence": "list", "List-Id": "<qemu-devel.nongnu.org>", "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>", "List-Archive": "<https://lists.nongnu.org/archive/html/qemu-devel>", "List-Post": "<mailto:qemu-devel@nongnu.org>", "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>", "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>", "Cc": "Peter Maydell <peter.maydell@linaro.org>,\n Eduardo Habkost <ehabkost@redhat.com>,\n Richard Henderson <richard.henderson@linaro.org>,\n Cameron Esfahani <dirty@apple.com>, Roman Bolshakov <r.bolshakov@yadro.com>,\n qemu-arm@nongnu.org, Frank Yang <lfy@google.com>,\n Paolo Bonzini <pbonzini@redhat.com>, Peter Collingbourne <pcc@google.com>", "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org", "Sender": "\"Qemu-devel\"\n <qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>" }, "content": "The hooks we have that call us after reset, init and loadvm really all\njust want to say \"The reference of all register state is in the QEMU\nvcpu struct, please push it\".\n\nWe already have a working pushing mechanism though called cpu->vcpu_dirty,\nso we can just reuse that for all of the above, syncing state properly the\nnext time we actually execute a vCPU.\n\nThis fixes PSCI resets on ARM, as they modify CPU state even after the\npost init call has completed, but before we execute the vCPU again.\n\nTo also make the scheme work for x86, we have to make sure we don't\nmove stale eflags into our env when the vcpu state is dirty.\n\nSigned-off-by: Alexander Graf <agraf@csgraf.de>\nReviewed-by: Roman Bolshakov <r.bolshakov@yadro.com>\nTested-by: Roman Bolshakov <r.bolshakov@yadro.com>\n---\n accel/hvf/hvf-cpus.c | 27 +++++++--------------------\n target/i386/hvf/x86hvf.c | 5 ++++-\n 2 files changed, 11 insertions(+), 21 deletions(-)", "diff": "diff --git a/accel/hvf/hvf-cpus.c b/accel/hvf/hvf-cpus.c\nindex 2c6796604a..a324da2757 100644\n--- a/accel/hvf/hvf-cpus.c\n+++ b/accel/hvf/hvf-cpus.c\n@@ -275,39 +275,26 @@ static void hvf_cpu_synchronize_state(CPUState *cpu)\n }\n }\n \n-static void do_hvf_cpu_synchronize_post_reset(CPUState *cpu,\n- run_on_cpu_data arg)\n+static void do_hvf_cpu_synchronize_set_dirty(CPUState *cpu,\n+ run_on_cpu_data arg)\n {\n- hvf_put_registers(cpu);\n- cpu->vcpu_dirty = false;\n+ /* QEMU state is the reference, push it to HVF now and on next entry */\n+ cpu->vcpu_dirty = true;\n }\n \n static void hvf_cpu_synchronize_post_reset(CPUState *cpu)\n {\n- run_on_cpu(cpu, do_hvf_cpu_synchronize_post_reset, RUN_ON_CPU_NULL);\n-}\n-\n-static void do_hvf_cpu_synchronize_post_init(CPUState *cpu,\n- run_on_cpu_data arg)\n-{\n- hvf_put_registers(cpu);\n- cpu->vcpu_dirty = false;\n+ run_on_cpu(cpu, do_hvf_cpu_synchronize_set_dirty, RUN_ON_CPU_NULL);\n }\n \n static void hvf_cpu_synchronize_post_init(CPUState *cpu)\n {\n- run_on_cpu(cpu, do_hvf_cpu_synchronize_post_init, RUN_ON_CPU_NULL);\n-}\n-\n-static void do_hvf_cpu_synchronize_pre_loadvm(CPUState *cpu,\n- run_on_cpu_data arg)\n-{\n- cpu->vcpu_dirty = true;\n+ run_on_cpu(cpu, do_hvf_cpu_synchronize_set_dirty, RUN_ON_CPU_NULL);\n }\n \n static void hvf_cpu_synchronize_pre_loadvm(CPUState *cpu)\n {\n- run_on_cpu(cpu, do_hvf_cpu_synchronize_pre_loadvm, RUN_ON_CPU_NULL);\n+ run_on_cpu(cpu, do_hvf_cpu_synchronize_set_dirty, RUN_ON_CPU_NULL);\n }\n \n static void hvf_vcpu_destroy(CPUState *cpu)\ndiff --git a/target/i386/hvf/x86hvf.c b/target/i386/hvf/x86hvf.c\nindex 0f2aeb1cf8..3111c0be4c 100644\n--- a/target/i386/hvf/x86hvf.c\n+++ b/target/i386/hvf/x86hvf.c\n@@ -435,7 +435,10 @@ int hvf_process_events(CPUState *cpu_state)\n X86CPU *cpu = X86_CPU(cpu_state);\n CPUX86State *env = &cpu->env;\n \n- env->eflags = rreg(cpu_state->hvf->fd, HV_X86_RFLAGS);\n+ if (!cpu_state->vcpu_dirty) {\n+ /* light weight sync for CPU_INTERRUPT_HARD and IF_MASK */\n+ env->eflags = rreg(cpu_state->hvf->fd, HV_X86_RFLAGS);\n+ }\n \n if (cpu_state->interrupt_request & CPU_INTERRUPT_INIT) {\n cpu_synchronize_state(cpu_state);\n", "prefixes": [ "v6", "06/11" ] }