get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2216137,
    "url": "http://patchwork.ozlabs.org/api/patches/2216137/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260325215222.3678982-2-pierrick.bouvier@linaro.org/",
    "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": "<20260325215222.3678982-2-pierrick.bouvier@linaro.org>",
    "list_archive_url": null,
    "date": "2026-03-25T21:52:20",
    "name": "[PULL,1/3] tcg: Pass host-endian values to plugin_gen_mem_callbacks_*",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "75f195233d82998c10a33e16629bf3c6bbadbc68",
    "submitter": {
        "id": 85798,
        "url": "http://patchwork.ozlabs.org/api/people/85798/?format=api",
        "name": "Pierrick Bouvier",
        "email": "pierrick.bouvier@linaro.org"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260325215222.3678982-2-pierrick.bouvier@linaro.org/mbox/",
    "series": [
        {
            "id": 497516,
            "url": "http://patchwork.ozlabs.org/api/series/497516/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=497516",
            "date": "2026-03-25T21:52:20",
            "name": "[PULL,1/3] tcg: Pass host-endian values to plugin_gen_mem_callbacks_*",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/497516/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2216137/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2216137/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@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=U6aIz36U;\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 4fh0xz2B9Dz1xy1\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 26 Mar 2026 08:52:39 +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 1w5W9S-0000wV-4Y; Wed, 25 Mar 2026 17:52:34 -0400",
            "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 <pierrick.bouvier@linaro.org>)\n id 1w5W9Q-0000vW-Py\n for qemu-devel@nongnu.org; Wed, 25 Mar 2026 17:52:32 -0400",
            "from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <pierrick.bouvier@linaro.org>)\n id 1w5W9P-000341-1j\n for qemu-devel@nongnu.org; Wed, 25 Mar 2026 17:52:32 -0400",
            "by mail-pj1-x102a.google.com with SMTP id\n 98e67ed59e1d1-35a02f3b8feso136800a91.3\n for <qemu-devel@nongnu.org>; Wed, 25 Mar 2026 14:52:30 -0700 (PDT)",
            "from pc.taild8403c.ts.net (216-71-219-44.dyn.novuscom.net.\n [216.71.219.44]) by smtp.gmail.com with ESMTPSA id\n 98e67ed59e1d1-35c0313eedasm6402987a91.5.2026.03.25.14.52.28\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Wed, 25 Mar 2026 14:52:29 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=linaro.org; s=google; t=1774475549; x=1775080349; 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=fbUGtCfoCGCVolSue1QmNHvxDOUS5kWpaU84SjRz1q8=;\n b=U6aIz36UABLnsY3/rozXdIdcSFOU5ApkFspDNfqml9ZbFcptvqstLZAvOaRlFUAonW\n kZo3tm3vvpzmFUoXeZoXdm/fq5m79ekJw5uLLGQNhbFAeV7oK8v+uv3OD3ZxqwBbHD4A\n VkALTg9XoaNPUCfFyYH1na/i0++XHdl50LoEvUpfW9guMg0JNxSeYir0fjolzWDHkQ+z\n Ja50uCSLNg+bF96CmMpbMEUYrxXGYlNOBxzHPCjnwpjcVg2GlQHJfnFpLUWpivIBRviL\n qWk/fZo4avx8AjnJmsesyvQzCuinDwBRz6wBMnYRK6elm0w6jda0EVXULxTYDIqFLW8O\n l/VA==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1774475549; x=1775080349;\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=fbUGtCfoCGCVolSue1QmNHvxDOUS5kWpaU84SjRz1q8=;\n b=EwNrmwSuJdWOaasJfRUqxT9M/NLR76YK4Tu/dY2n+5PIGxwRReNTem+gJC4PE7zeys\n peY1iuzwdD5+wdG1sADKhBbOtvc06WfxAy/skJ1uO1xOZ9+SU2pnmZZKEx05e8TUxSz5\n uOmB01NS4TPhQKTFFyj3nXs+zO/japPBebjPvukhOdlTtub5gDPeh4bawHH07uhRjuS5\n LOXsHi0F4r85QK7T7S2Ko0O2qB9BGuY9Zo8L/oR37GHs4m+iLCBD1H/gqSKZNgpRRfaC\n 7tadEtLFu39FgsMQZLIhgGmv+zUjLGG6Xpe8W4wb+kVzhyQbCD30KQ3dfwXlZfLvwnls\n MS0w==",
        "X-Gm-Message-State": "AOJu0Yz39Jhd4epNFvNnFWLUyRyKPaRanGiZdNSwbfh1rdzZC/tSiBJR\n ztas5sp2X290xKOZZO+ASm3nieUiUSZ9MP3HM35bJXMxds8aCAIEFb2x/YbP5t76evedo/0ri9Z\n 3dC+Vkw4=",
        "X-Gm-Gg": "ATEYQzwCrAo4kxL7E3WX6Mm1QhF5RUB2e5p73mNouRyGb0OlAI6yFqaR1IJQPWQ+vE+\n lA/P98WYGzEes1Rze35IYQwOZC1I7zV844VR4VNQHT91mJKQ1494/Itf/q12Ovc1UzuE3qxw4L8\n x9MjGz19TlM2ocdGItTqzt9c03cOfZyXRnJ8XI0PtAoXjfQ4QT8jG2kxtsD8rPE9HXzwe6eg4Ot\n QMVYSsKlhVR9+LITrNyvZm3NqRYTuOJwIkyAm3XNBtnR2NfKJXbaZza9b7Y/WWnOTdQ3gzFDu2+\n gY5lzDjJ0R+An+YL6XOfptpUEROMgpTKrPUJsvV0uh7dC6a0dEZ3ZCEOWLVoFThiCzZweb8dFL8\n k4Re4TdBqGdV20ZPetpibMF9HExaPAvrNsv5cN8XhlN11+EWNRgRgwbgr/f8sucrmxZKfbVuluO\n 8MatGTq7kSYdlRWMJIRjqO7Am15c7SqQ3QhZ7GLZCpPpR3GX0tkBBo0gyx1ebG4iqazXcp7AItO\n YQ4",
        "X-Received": "by 2002:a17:90a:d408:b0:35b:a8cf:7969 with SMTP id\n 98e67ed59e1d1-35c0dd0d076mr4250175a91.11.1774475549442;\n Wed, 25 Mar 2026 14:52:29 -0700 (PDT)",
        "From": "Pierrick Bouvier <pierrick.bouvier@linaro.org>",
        "To": "qemu-devel@nongnu.org, peter.maydell@linaro.org,\n richard.henderson@linaro.org, pbonzini@redhat.com, stefanha@redhat.com",
        "Cc": "pierrick.bouvier@linaro.org",
        "Subject": "[PULL 1/3] tcg: Pass host-endian values to plugin_gen_mem_callbacks_*",
        "Date": "Wed, 25 Mar 2026 14:52:20 -0700",
        "Message-ID": "<20260325215222.3678982-2-pierrick.bouvier@linaro.org>",
        "X-Mailer": "git-send-email 2.47.3",
        "In-Reply-To": "<20260325215222.3678982-1-pierrick.bouvier@linaro.org>",
        "References": "<20260325215222.3678982-1-pierrick.bouvier@linaro.org>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Received-SPF": "pass client-ip=2607:f8b0:4864:20::102a;\n envelope-from=pierrick.bouvier@linaro.org; helo=mail-pj1-x102a.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": "From: Richard Henderson <richard.henderson@linaro.org>\n\nIf the host does not support swapped-endian loads and stores,\nthen we emulate those within the tcg expanders with explicit\nbswap operations.\n\nHowever, we were passing values to the plugin interface in\nthe middle of those bswap operations, which meant that we\nwould pass values of the wrong endianness to plugins when\nrunning on hosts without swapped-endian loads and stores.\n\nResolves: https://gitlab.com/qemu-project/qemu/-/work_items/3351\nSigned-off-by: Richard Henderson <richard.henderson@linaro.org>\nReviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>\nTested-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>\nLink: https://lore.kernel.org/qemu-devel/20260325024252.3369186-2-pierrick.bouvier@linaro.org\nSigned-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>\n---\n tcg/tcg-op-ldst.c | 52 ++++++++++++++++++++++++-----------------------\n 1 file changed, 27 insertions(+), 25 deletions(-)",
    "diff": "diff --git a/tcg/tcg-op-ldst.c b/tcg/tcg-op-ldst.c\nindex 354d9968f92..22211ccb452 100644\n--- a/tcg/tcg-op-ldst.c\n+++ b/tcg/tcg-op-ldst.c\n@@ -262,9 +262,6 @@ static void tcg_gen_qemu_ld_i32_int(TCGv_i32 val, TCGTemp *addr,\n     addr_new = tci_extend_addr(addr);\n     copy_addr = plugin_maybe_preserve_addr(addr);\n     gen_ldst1(INDEX_op_qemu_ld, TCG_TYPE_I32, tcgv_i32_temp(val), addr_new, oi);\n-    plugin_gen_mem_callbacks_i32(val, copy_addr, addr, orig_oi,\n-                                 QEMU_PLUGIN_MEM_R);\n-    maybe_free_addr(addr, addr_new);\n \n     if ((orig_memop ^ memop) & MO_BSWAP) {\n         switch (orig_memop & MO_SIZE) {\n@@ -280,6 +277,10 @@ static void tcg_gen_qemu_ld_i32_int(TCGv_i32 val, TCGTemp *addr,\n             g_assert_not_reached();\n         }\n     }\n+\n+    plugin_gen_mem_callbacks_i32(val, copy_addr, addr, orig_oi,\n+                                 QEMU_PLUGIN_MEM_R);\n+    maybe_free_addr(addr, addr_new);\n }\n \n void tcg_gen_qemu_ld_i32_chk(TCGv_i32 val, TCGTemp *addr, TCGArg idx,\n@@ -290,10 +291,10 @@ void tcg_gen_qemu_ld_i32_chk(TCGv_i32 val, TCGTemp *addr, TCGArg idx,\n     tcg_gen_qemu_ld_i32_int(val, addr, idx, memop);\n }\n \n-static void tcg_gen_qemu_st_i32_int(TCGv_i32 val, TCGTemp *addr,\n+static void tcg_gen_qemu_st_i32_int(TCGv_i32 orig_val, TCGTemp *addr,\n                                     TCGArg idx, MemOp memop)\n {\n-    TCGv_i32 swap = NULL;\n+    TCGv_i32 val = orig_val;\n     MemOpIdx orig_oi, oi;\n     TCGTemp *addr_new;\n \n@@ -302,29 +303,29 @@ static void tcg_gen_qemu_st_i32_int(TCGv_i32 val, TCGTemp *addr,\n     orig_oi = oi = make_memop_idx(memop, idx);\n \n     if ((memop & MO_BSWAP) && !tcg_target_has_memory_bswap(memop)) {\n-        swap = tcg_temp_ebb_new_i32();\n+        val = tcg_temp_ebb_new_i32();\n         switch (memop & MO_SIZE) {\n         case MO_16:\n-            tcg_gen_bswap16_i32(swap, val, 0);\n+            tcg_gen_bswap16_i32(val, orig_val, 0);\n             break;\n         case MO_32:\n-            tcg_gen_bswap32_i32(swap, val);\n+            tcg_gen_bswap32_i32(val, orig_val);\n             break;\n         default:\n             g_assert_not_reached();\n         }\n-        val = swap;\n         memop &= ~MO_BSWAP;\n         oi = make_memop_idx(memop, idx);\n     }\n \n     addr_new = tci_extend_addr(addr);\n     gen_ldst1(INDEX_op_qemu_st, TCG_TYPE_I32, tcgv_i32_temp(val), addr_new, oi);\n-    plugin_gen_mem_callbacks_i32(val, NULL, addr, orig_oi, QEMU_PLUGIN_MEM_W);\n+    plugin_gen_mem_callbacks_i32(orig_val, NULL, addr, orig_oi,\n+                                 QEMU_PLUGIN_MEM_W);\n     maybe_free_addr(addr, addr_new);\n \n-    if (swap) {\n-        tcg_temp_free_i32(swap);\n+    if (val != orig_val) {\n+        tcg_temp_free_i32(val);\n     }\n }\n \n@@ -360,9 +361,6 @@ static void tcg_gen_qemu_ld_i64_int(TCGv_i64 val, TCGTemp *addr,\n     addr_new = tci_extend_addr(addr);\n     copy_addr = plugin_maybe_preserve_addr(addr);\n     gen_ld_i64(val, addr_new, oi);\n-    plugin_gen_mem_callbacks_i64(val, copy_addr, addr, orig_oi,\n-                                 QEMU_PLUGIN_MEM_R);\n-    maybe_free_addr(addr, addr_new);\n \n     if ((orig_memop ^ memop) & MO_BSWAP) {\n         int flags = (orig_memop & MO_SIGN\n@@ -382,6 +380,10 @@ static void tcg_gen_qemu_ld_i64_int(TCGv_i64 val, TCGTemp *addr,\n             g_assert_not_reached();\n         }\n     }\n+\n+    plugin_gen_mem_callbacks_i64(val, copy_addr, addr, orig_oi,\n+                                 QEMU_PLUGIN_MEM_R);\n+    maybe_free_addr(addr, addr_new);\n }\n \n void tcg_gen_qemu_ld_i64_chk(TCGv_i64 val, TCGTemp *addr, TCGArg idx,\n@@ -392,10 +394,10 @@ void tcg_gen_qemu_ld_i64_chk(TCGv_i64 val, TCGTemp *addr, TCGArg idx,\n     tcg_gen_qemu_ld_i64_int(val, addr, idx, memop);\n }\n \n-static void tcg_gen_qemu_st_i64_int(TCGv_i64 val, TCGTemp *addr,\n+static void tcg_gen_qemu_st_i64_int(TCGv_i64 orig_val, TCGTemp *addr,\n                                     TCGArg idx, MemOp memop)\n {\n-    TCGv_i64 swap = NULL;\n+    TCGv_i64 val = orig_val;\n     MemOpIdx orig_oi, oi;\n     TCGTemp *addr_new;\n \n@@ -404,32 +406,32 @@ static void tcg_gen_qemu_st_i64_int(TCGv_i64 val, TCGTemp *addr,\n     orig_oi = oi = make_memop_idx(memop, idx);\n \n     if ((memop & MO_BSWAP) && !tcg_target_has_memory_bswap(memop)) {\n-        swap = tcg_temp_ebb_new_i64();\n+        val = tcg_temp_ebb_new_i64();\n         switch (memop & MO_SIZE) {\n         case MO_16:\n-            tcg_gen_bswap16_i64(swap, val, 0);\n+            tcg_gen_bswap16_i64(val, orig_val, 0);\n             break;\n         case MO_32:\n-            tcg_gen_bswap32_i64(swap, val, 0);\n+            tcg_gen_bswap32_i64(val, orig_val, 0);\n             break;\n         case MO_64:\n-            tcg_gen_bswap64_i64(swap, val);\n+            tcg_gen_bswap64_i64(val, orig_val);\n             break;\n         default:\n             g_assert_not_reached();\n         }\n-        val = swap;\n         memop &= ~MO_BSWAP;\n         oi = make_memop_idx(memop, idx);\n     }\n \n     addr_new = tci_extend_addr(addr);\n     gen_st_i64(val, addr_new, oi);\n-    plugin_gen_mem_callbacks_i64(val, NULL, addr, orig_oi, QEMU_PLUGIN_MEM_W);\n+    plugin_gen_mem_callbacks_i64(orig_val, NULL, addr, orig_oi,\n+                                 QEMU_PLUGIN_MEM_W);\n     maybe_free_addr(addr, addr_new);\n \n-    if (swap) {\n-        tcg_temp_free_i64(swap);\n+    if (val != orig_val) {\n+        tcg_temp_free_i64(val);\n     }\n }\n \n",
    "prefixes": [
        "PULL",
        "1/3"
    ]
}