get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/1.0/patches/2196687/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2196687,
    "url": "http://patchwork.ozlabs.org/api/1.0/patches/2196687/?format=api",
    "project": {
        "id": 14,
        "url": "http://patchwork.ozlabs.org/api/1.0/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": ""
    },
    "msgid": "<20260216034432.23912-10-richard.henderson@linaro.org>",
    "date": "2026-02-16T03:44:28",
    "name": "[RFC,09/13] target/arm: Detect SME in kvm_arm_get_host_cpu_features",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "180590e430977fb293445bb480c0f411696ef0e4",
    "submitter": {
        "id": 72104,
        "url": "http://patchwork.ozlabs.org/api/1.0/people/72104/?format=api",
        "name": "Richard Henderson",
        "email": "richard.henderson@linaro.org"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260216034432.23912-10-richard.henderson@linaro.org/mbox/",
    "series": [
        {
            "id": 492243,
            "url": "http://patchwork.ozlabs.org/api/1.0/series/492243/?format=api",
            "date": "2026-02-16T03:44:19",
            "name": "target/arm: Support SME for KVM",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/492243/mbox/"
        }
    ],
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2196687/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=linaro.org header.i=@linaro.org header.a=rsa-sha256\n header.s=google header.b=rK7foNSm;\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=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"
        ],
        "Received": [
            "from lists.gnu.org (lists.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 4fDpb72GNfz1xpl\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 16 Feb 2026 14:45:55 +1100 (AEDT)",
            "from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1vrpXi-0002ZZ-Lj; Sun, 15 Feb 2026 22:45:02 -0500",
            "from eggs.gnu.org ([2001:470:142:3::10])\n by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)\n id 1vrpXg-0002Z7-8H\n for qemu-devel@nongnu.org; Sun, 15 Feb 2026 22:45:00 -0500",
            "from mail-pf1-x42d.google.com ([2607:f8b0:4864:20::42d])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)\n id 1vrpXe-0002SA-9a\n for qemu-devel@nongnu.org; Sun, 15 Feb 2026 22:44:59 -0500",
            "by mail-pf1-x42d.google.com with SMTP id\n d2e1a72fcca58-824a3ba5222so1458308b3a.2\n for <qemu-devel@nongnu.org>; Sun, 15 Feb 2026 19:44:57 -0800 (PST)",
            "from stoup.. ([2401:d002:dc0f:2100:4a1:428a:70f2:5844])\n by smtp.gmail.com with ESMTPSA id\n d9443c01a7336-2ad1aadca84sm53294155ad.70.2026.02.15.19.44.55\n for <qemu-devel@nongnu.org>\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Sun, 15 Feb 2026 19:44:56 -0800 (PST)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=linaro.org; s=google; t=1771213497; x=1771818297; darn=nongnu.org;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:to:from:from:to:cc:subject:date:message-id\n :reply-to; bh=Nr30QrVHuiZUYlgVuaIXnVQfwgC+Xsfy6MjmOV0NUmo=;\n b=rK7foNSmxhZ/btc9aSsGQecveeEJpag92txQ8F4jYGwUZfuxHTsVmXg/7zavIwcMog\n LIxxa3YM9XwnTXG9f8bLntldSLxBVrjRgb+w1b55HdylLyYnpjElICobzQvOY/vtqyXE\n SqBECBuunnn6/yQwed3q82zjbFkt+LrVej7NUSe7yjflHG12DPOUxMilQJmpwfrb32HE\n bOB61ZcphQfoM94hlKmpnfcRLTx8nk1xPOYb6MkWcr7hGm2j2eThPVv6OnoI+8R8L/P+\n Z+iBTorQKdYlePprk0zhIgY3MzPux9WzWQd52N2Lj6a7AKZyecyr8ij85Ns+R7qMOEd0\n dD3w==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20230601; t=1771213497; x=1771818297;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to\n :cc:subject:date:message-id:reply-to;\n bh=Nr30QrVHuiZUYlgVuaIXnVQfwgC+Xsfy6MjmOV0NUmo=;\n b=Pel835DFBztMYqJBBCVIdXjYwD8HxaeAHR6uimRJKthVRlJ48PcTk8ELLDp+jF5yVG\n Y6W9S2evScS9Zx+Eon1hOjf875vg4X2zAfXInYB2Mo0q63aSFVWuOFTgehsUG64tiOWR\n /x6FVsrlJEnptwjAGEWIwIWezLcAFzAzv+212lLDfHMvR0gAysK8BT7mRtFecfWTHgKo\n kmbD3FYp2r/OK82ro4fztJ0eBAEoRKGCBshwyJPSgZCUtxxh7R8ynPZiGtNy5WB7qnsi\n AxgeDSNMhw2ih2x2vCPFXUoAuOPcfBCmiiBneuogxbB2dJPagnPzA+n0BsckqCHiMpcE\n DxlA==",
        "X-Gm-Message-State": "AOJu0YxVW15muELUGbf1kw6WQ9O9mU04BumvanbZwlUanDKUBGPZP2Vw\n 16PDevxOCqAaY8LD1VfW904eynpbQ1TPSubEaW451oZRmJTcpL2g+UDtzTuSAoMubQvP/1Q7jyZ\n LeYHPbJ4=",
        "X-Gm-Gg": "AZuq6aLm5GYW3oJZt7FHeEjc/+GQ4c+Z+AuXD5dxQ9Ixg1CSu3SLmil1Tw0NDPdKOjY\n RcB2Rw3rjcN8JTdtXVN2s1M+vpW5REt/lQD0/vVleUiqmd6nZSOS0ZmorJYiTUIfWm1gM7F98r3\n mQk3CO/bdash1AJjpQ32npIewW9EAPZWkCQvjqG4qSXZnconvwZ2/ZagbMeh5q0EK4ZToYad9ep\n J3GLPX03X2I2/mQlm9wZout+RPxB06CrdjM52V9OqLRPOMMYUK+Ps00YTuU4Evn0Uni2J4nIt5z\n 53RDBp4q0EmGgf86hS0bipmfIlukBvEsdsAQr4ci6+TU2rB3LcXSw6NaUXnXXN9wa97iDzQD6HA\n Iktaw6qXyaigMPPr1/tB+UbKhavr6OSEk/CZ3WwEx2HltlHE1iJX/m8eW3BR9kB4K8x7VTfRrvb\n HvpO/lGEMnPpeq5a9YXeWFQMhs4ipMUrgo",
        "X-Received": "by 2002:a05:6a21:4d8d:b0:35d:7f7:4aac with SMTP id\n adf61e73a8af0-3948398f0b5mr5536808637.47.1771213496754;\n Sun, 15 Feb 2026 19:44:56 -0800 (PST)",
        "From": "Richard Henderson <richard.henderson@linaro.org>",
        "To": "qemu-devel@nongnu.org",
        "Subject": "[RFC PATCH 09/13] target/arm: Detect SME in\n kvm_arm_get_host_cpu_features",
        "Date": "Mon, 16 Feb 2026 13:44:28 +1000",
        "Message-ID": "<20260216034432.23912-10-richard.henderson@linaro.org>",
        "X-Mailer": "git-send-email 2.43.0",
        "In-Reply-To": "<20260216034432.23912-1-richard.henderson@linaro.org>",
        "References": "<20260216034432.23912-1-richard.henderson@linaro.org>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Received-SPF": "pass client-ip=2607:f8b0:4864:20::42d;\n envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42d.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,\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": "Signed-off-by: Richard Henderson <richard.henderson@linaro.org>\n---\n target/arm/kvm.c | 54 +++++++++++++++++++++++++++++++++++++++++++++---\n 1 file changed, 51 insertions(+), 3 deletions(-)",
    "diff": "diff --git a/target/arm/kvm.c b/target/arm/kvm.c\nindex ccffa40900..979265a810 100644\n--- a/target/arm/kvm.c\n+++ b/target/arm/kvm.c\n@@ -61,6 +61,7 @@ typedef struct ARMHostCPUFeatures {\n     uint64_t features;\n     uint32_t target;\n     uint32_t sve_vq_supported;\n+    uint32_t sme_vq_supported;\n     const char *dtb_compatible;\n } ARMHostCPUFeatures;\n \n@@ -273,6 +274,36 @@ static uint32_t kvm_arm_sve_get_vls(int fd)\n     return vls[0] & MAKE_64BIT_MASK(0, ARM_MAX_VQ);\n }\n \n+static uint32_t kvm_arm_sme_get_vls(int fd)\n+{\n+    uint64_t vls[KVM_ARM64_SME_VLS_WORDS];\n+    struct kvm_one_reg reg = {\n+        .id = KVM_REG_ARM64_SME_VLS,\n+        .addr = (uint64_t)&vls[0],\n+    };\n+    uint32_t vq = 0;\n+    int ret;\n+\n+    ret = ioctl(fd, KVM_GET_ONE_REG, &reg);\n+    if (ret) {\n+        error_report(\"failed to get KVM_REG_ARM64_SME_VLS: %s\",\n+                     strerror(errno));\n+        abort();\n+    }\n+\n+    for (int i = KVM_ARM64_SME_VLS_WORDS - 1; i >= 0; --i) {\n+        if (vls[i]) {\n+            vq = 64 - clz64(vls[i]) + i * 64;\n+            break;\n+        }\n+    }\n+    if (vq > ARM_MAX_VQ) {\n+        warn_report(\"KVM supports vector lengths larger than QEMU can enable\");\n+    }\n+    return vls[0] & MAKE_64BIT_MASK(0, ARM_MAX_VQ);\n+}\n+\n+\n static bool kvm_arm_get_host_cpu_features(ARMHostCPUFeatures *ahcf)\n {\n     /* Identify the feature bits corresponding to the host CPU, and\n@@ -282,6 +313,7 @@ static bool kvm_arm_get_host_cpu_features(ARMHostCPUFeatures *ahcf)\n      */\n     int fdarray[3];\n     bool sve_supported;\n+    bool sme_supported;\n     bool el2_supported;\n     bool pmu_supported = false;\n     uint64_t features = 0;\n@@ -302,9 +334,13 @@ static bool kvm_arm_get_host_cpu_features(ARMHostCPUFeatures *ahcf)\n         init.features[0] |= 1 << KVM_ARM_VCPU_SVE;\n     }\n \n-    /*\n-     * Ask for EL2 if supported.\n-     */\n+    /* Similarly for SME... */\n+    sme_supported = kvm_check_extension(kvm_state, KVM_CAP_ARM_SME);\n+    if (sme_supported) {\n+        init.features[0] |= 1 << KVM_ARM_VCPU_SME;\n+    }\n+\n+    /* ... and EL2. */\n     el2_supported = kvm_arm_el2_supported();\n     if (el2_supported) {\n         init.features[0] |= 1 << KVM_ARM_VCPU_HAS_EL2;\n@@ -449,6 +485,17 @@ static bool kvm_arm_get_host_cpu_features(ARMHostCPUFeatures *ahcf)\n             /* Read the set of supported vector lengths. */\n             arm_host_cpu_features.sve_vq_supported = kvm_arm_sve_get_vls(fd);\n         }\n+\n+\tif (sme_supported) {\n+            /*\n+\t     * While ID_AA64SMFR0_EL1 is always accessible, if RAZ,\n+\t     * it's unused if !sme_supported.\n+\t     */\n+            err |= get_host_cpu_reg(fd, ahcf, ID_AA64SMFR0_EL1_IDX);\n+\n+            /* Read the set of supported vector lengths. */\n+            arm_host_cpu_features.sme_vq_supported = kvm_arm_sme_get_vls(fd);\n+        }\n     }\n \n     kvm_arm_destroy_scratch_host_vcpu(fdarray);\n@@ -496,6 +543,7 @@ void kvm_arm_set_cpu_features_from_host(ARMCPU *cpu)\n     cpu->dtb_compatible = arm_host_cpu_features.dtb_compatible;\n     cpu->isar = arm_host_cpu_features.isar;\n     cpu->sve_vq.supported = arm_host_cpu_features.sve_vq_supported;\n+    cpu->sme_vq.supported = arm_host_cpu_features.sme_vq_supported;\n     env->features = arm_host_cpu_features.features;\n }\n \n",
    "prefixes": [
        "RFC",
        "09/13"
    ]
}