{"id":2225246,"url":"http://patchwork.ozlabs.org/api/1.1/patches/2225246/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20260420173816.63673-1-danielpaziyski@gmail.com/","project":{"id":14,"url":"http://patchwork.ozlabs.org/api/1.1/projects/14/?format=json","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":""},"msgid":"<20260420173816.63673-1-danielpaziyski@gmail.com>","date":"2026-04-20T17:38:16","name":"[v2] hw/intc/apic: mask LVTs when software disabling the APIC","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"a9ba6bc80954e977eb72a7c095a821dee1768b8c","submitter":{"id":92713,"url":"http://patchwork.ozlabs.org/api/1.1/people/92713/?format=json","name":"Daniel Paziyski","email":"danielpaziyski@gmail.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20260420173816.63673-1-danielpaziyski@gmail.com/mbox/","series":[{"id":500650,"url":"http://patchwork.ozlabs.org/api/1.1/series/500650/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/list/?series=500650","date":"2026-04-20T17:38:16","name":"[v2] hw/intc/apic: mask LVTs when software disabling the APIC","version":2,"mbox":"http://patchwork.ozlabs.org/series/500650/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2225246/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2225246/checks/","tags":{},"headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256\n header.s=20251104 header.b=G1lDGutI;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists1p.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fzt5Z3h6xz1yGs\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 21 Apr 2026 03:39:14 +1000 (AEST)","from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists1p.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wEsaI-0005Pa-SP; Mon, 20 Apr 2026 13:38:59 -0400","from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <danielpaziyski@gmail.com>)\n id 1wEsZr-0005P7-54\n for qemu-devel@nongnu.org; Mon, 20 Apr 2026 13:38:36 -0400","from mail-wm1-x333.google.com ([2a00:1450:4864:20::333])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <danielpaziyski@gmail.com>)\n id 1wEsZp-0005wb-7D\n for qemu-devel@nongnu.org; Mon, 20 Apr 2026 13:38:30 -0400","by mail-wm1-x333.google.com with SMTP id\n 5b1f17b1804b1-48a525dd2b5so813835e9.2\n for <qemu-devel@nongnu.org>; Mon, 20 Apr 2026 10:38:23 -0700 (PDT)","from AtiePC ([79.112.87.29]) by smtp.gmail.com with ESMTPSA id\n ffacd0b85a97d-43fe4e4d6casm28805107f8f.32.2026.04.20.10.38.20\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Mon, 20 Apr 2026 10:38:21 -0700 (PDT)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=gmail.com; s=20251104; t=1776706702; x=1777311502; darn=nongnu.org;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:from:to:cc:subject:date\n :message-id:reply-to;\n bh=OIqtbZxzFQLgVv222Rh4aZ/y21/2E+5v9iu3Pny8Ckc=;\n b=G1lDGutIWVfsfTEDFhVkhkoPxtH9bfa4Imc+9rIMPQGkEhGDzHSK4iWKLTCAzbZ36R\n LYMAndzUhYpv7O08HWSwEf+BeyDcEZecLXCigIUB5mmestjWA3KdzlMKga6Z15NLHgho\n dSKsaI9DnBm1eqM45rvEyPTTd9BMY7D+nyQKtzLjdJ8rZnGT8zGdHe3EXudipdkToIDs\n dFHAO9KurExTxZ+RXvNWZ66Gx9gwSJGKSzyWw7srf5kWOlrf1L+8Z4BM2et/R8g4U8V0\n zf5+EFboSO2C0m0601auqxfcoYqnG4X/C4ioM3N6a05utQMqZ613+8NcLaLIi+oVQnSU\n S84A==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1776706702; x=1777311502;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from\n :to:cc:subject:date:message-id:reply-to;\n bh=OIqtbZxzFQLgVv222Rh4aZ/y21/2E+5v9iu3Pny8Ckc=;\n b=Uv4RXXdT5Uu90RI5Y/cHxIaSYMdiFSZDRnHCRlKvgoZ0mqK6r11P0TucELTI02YaMy\n D7o6rMPVVNKTs0PoOMK2TnkuCHVV7I6sTdgKctzbRqf/ya5Jb94z3WQMa8OKlom9XQ4g\n hoPH75HFcea1/t9BrrHRx/AZuukqBGePDW4rUr7M8sE2J26LeCj3KGH83ygzvA42hvKi\n adLx3Wn17yp/O/wSTr7Gu2FjOoxfFniaO0gnKyzM0y5af5Y5PvRJy1EkmaBp8EPLtaaV\n Ac9YzYoAY7CT0J+6kQHqhom5Y7YMfXe+DNzAsDEPOGo/W0Kt5SXtE3Xf5f/Qmc1K3I0m\n 7I+g==","X-Gm-Message-State":"AOJu0YzqRbsSUTJoAMXozFteYrqbD0Mv3CDTeETIeXGqvJp/VBqMX+fp\n vkgM2WfA18VJb7/djw8jFTqlYanUa5U3NS65+NYJ2Nv49BRtIprVONQC","X-Gm-Gg":"AeBDievGz8wgatP5vCMuKANXh1wecJcbGVO2XgP8qAw4FaIq3gfdo+IL5W+UC01Pe4X\n YMGYcFVVooCli0knqQpiy2v+S+bfWmP+l66jz0YaHtfaiH5QjQp//2PkgLR0D1Ne/H6BgHTqTn9\n BsvZ6O0q+be0KX1N0+xAGXl2IZ5UZ7g68rwekAiqFLx+rzJsfhJHaBgZnA0D4Vb7wneSOjH0/d2\n EJCNMvi9au6jl7HUGF6OAlCsTA94au3mfZuyK5NJ0YgQcskk3PaPoYELA9az8wybI/kHV0ZYlz1\n +WD6pQ+usyPYHdtZtQ0L3t1/F4Lc1yw+lEBM9VxIUZattsOe0r96vAhqONn5U0mkoMvQXq8WI3m\n MxrlRktXmmhBZVqVa1sITNpOOFfeiCFHY+FlLiBtIf1O5E9dxswrsiBeDO4dIQhBfQVHdZQYpXX\n t/LGfM3pyByDq6BovklMaOWKzZ9Hl+qpksXapgIBD+Cw==","X-Received":"by 2002:a05:600c:3b20:b0:488:afb4:b98c with SMTP id\n 5b1f17b1804b1-488fb7864e7mr120780605e9.3.1776706701769;\n Mon, 20 Apr 2026 10:38:21 -0700 (PDT)","From":"Daniel Paziyski <danielpaziyski@gmail.com>","To":"mst@redhat.com,\n\tpbonzini@redhat.com","Cc":"qemu-devel@nongnu.org,\n\tDaniel Paziyski <danielpaziyski@gmail.com>","Subject":"[PATCH v2] hw/intc/apic: mask LVTs when software disabling the APIC","Date":"Mon, 20 Apr 2026 19:38:16 +0200","Message-ID":"<20260420173816.63673-1-danielpaziyski@gmail.com>","X-Mailer":"git-send-email 2.53.0","In-Reply-To":"<20260225180555.154428-1-danielpaziyski@gmail.com>","References":"<20260225180555.154428-1-danielpaziyski@gmail.com>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","Received-SPF":"pass client-ip=2a00:1450:4864:20::333;\n envelope-from=danielpaziyski@gmail.com; helo=mail-wm1-x333.google.com","X-Spam_score_int":"-20","X-Spam_score":"-2.1","X-Spam_bar":"--","X-Spam_report":"(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001,\n RCVD_IN_DNSWL_NONE=-0.0001, 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.29","Precedence":"list","List-Id":"qemu development <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>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"},"content":"According to the Intel SDM Vol. 3 and the AMD64 Programmer's Manual Vol. 2, when\nthe APIC is software disabled, doing so by clearing the software enable bit from\nthe spurious interrupt register, the LVT entries must then have their mask bit\nset, and any attempts to clear them must be ignored until the APIC is software\nenabled again. This patch implements that behavior.\n\nSigned-off-by: Daniel Paziyski <danielpaziyski@gmail.com>\n---\n hw/intc/apic.c | 15 +++++++++++++++\n 1 file changed, 15 insertions(+)","diff":"diff --git a/hw/intc/apic.c b/hw/intc/apic.c\nindex 8766ed0..c23aef0 100644\n--- a/hw/intc/apic.c\n+++ b/hw/intc/apic.c\n@@ -919,6 +919,13 @@ static void apic_send_msi(MSIMessage *msi)\n     apic_deliver_irq(dest, dest_mode, delivery, vector, trigger_mode);\n }\n \n+static void apic_mask_lvts(APICCommonState *s)\n+{\n+    for (int i = 0; i < APIC_LVT_NB; i++) {\n+        s->lvt[i] |= APIC_LVT_MASKED;\n+    }\n+}\n+\n static int apic_register_write(APICCommonState *s, int index, uint64_t val)\n {\n     trace_apic_register_write(index, val);\n@@ -963,6 +970,11 @@ static int apic_register_write(APICCommonState *s, int index, uint64_t val)\n         break;\n     case 0x0f:\n         s->spurious_vec = val & 0x1ff;\n+\n+        if (!(val & APIC_SV_ENABLE)) {\n+            apic_mask_lvts(s);\n+        }\n+\n         apic_update_irq(s);\n         break;\n     case 0x10 ... 0x17:\n@@ -997,6 +1009,9 @@ static int apic_register_write(APICCommonState *s, int index, uint64_t val)\n         {\n             int n = index - 0x32;\n             s->lvt[n] = val;\n+            if (!(s->spurious_vec & APIC_SV_ENABLE)) {\n+                s->lvt[n] |= APIC_LVT_MASKED;\n+            }\n             if (n == APIC_LVT_TIMER) {\n                 apic_timer_update(s, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL));\n             } else if (n == APIC_LVT_LINT0 && apic_check_pic(s)) {\n","prefixes":["v2"]}