From nobody Sun Jun 7 22:20:10 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=kernel.org ARC-Seal: i=1; a=rsa-sha256; t=1780671243; cv=none; d=zohomail.com; s=zohoarc; b=RqjTH/SjnLHI6Qvjno6mBZVw6CSmNIq8o6xyS/97byDYcctrYTNo5JZX8usg6EWCTS2SJcRVf4qvpuaTVrBODHgfSn41labCwGf/HagGLjGa5cKuc/EP4BqQdZBwhvFUEIDHqL/xppj3SPYdRnm809pKMU/xy5LjPZHuWS6GyYY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780671243; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:Sender:Subject:Subject:To:To:Message-Id; bh=U2qlpKG0UFcr6W+OKkyqhjWAIs2KeBoMzrXtWjSDHK8=; b=Dl+ESfQiJ4nFE8DOxVckkIMuRKOeyvG/9D986Y1W6BhumJlVifL5vGH67o0eyA6wjXjEoN+9DCLiFVHYs8xRU4GGJ7QDjcFn+9JbWUgTTwuc9gzA6Qeh5/HfubULyVReRHlDGMXhL+t6RrXaZMsMrk6bVvM1Vr3ueSo7rRKVMVg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780671243452934.854458871613; Fri, 5 Jun 2026 07:54:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wVVvc-0000gV-9M; Fri, 05 Jun 2026 10:53:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wVUaz-000895-VR for qemu-devel@nongnu.org; Fri, 05 Jun 2026 09:28:22 -0400 Received: from sea.source.kernel.org ([2600:3c0a:e001:78e:0:1991:8:25]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wVUay-0003Cj-3B for qemu-devel@nongnu.org; Fri, 05 Jun 2026 09:28:21 -0400 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sea.source.kernel.org (Postfix) with ESMTP id E2BBF401FE; Fri, 5 Jun 2026 13:28:11 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPS id C4D57C2BCB4; Fri, 5 Jun 2026 13:28:11 +0000 (UTC) Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id AB98FCD6E79; Fri, 5 Jun 2026 13:28:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1780666091; bh=K9Opf8T8QjXRB86i6iPuDMKbf8Ts5MbqIA8Eo2USS0U=; h=From:Date:Subject:To:Cc:Reply-To:From; b=puVK0HquRoVkaOvm0tSr9GuzCEpVWVibD3PfbFuo8TWXFYLQSlUveKnzZ0BRjn9Gg 7alDyEHPwVDcP3dNe6KnW3byTZEv/C2LcbllxnOOv/MwgvIJtKrKDVg5ZITYazpks+ dogvXkd9yWqT71wepZhbuQptMwu9TJI0z2PaZ9Dpp+1I3Nl6vvbEsY69sbS8YFCw6j GfFV4N5bJZebSfqxO0zpJmuDdlpP7oKQ7RoSJTaeFivgSEHIRbN9gLeu2LGMUzmaLx uPzwKRuP2x70+8y4yTkr68Zzc5alprMslO4LjEK3D50XAESkzJIkVmT+dninyu2ZBl caDExuuWujvOA== From: Miao Wang via B4 Relay Date: Fri, 05 Jun 2026 21:27:56 +0800 Subject: [PATCH] pvscsi: translate data endianness MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260605-pvscsi-endianness-v1-1-b0bf472b0f59@gmail.com> X-B4-Tracking: v=1; b=H4sIANvOImoC/x3MPQqAMAxA4atIZgO1av25ijiUNmqWKA2IULy7x fEb3suglJgU5ipDopuVTylo6grC4WUn5FgM1lhnnOnxujUoI0lkL0KqGExsxymOdugISncl2vj 5n8v6vh+FHf2KYwAAAA== X-Change-ID: 20260605-pvscsi-endianness-c0d389d8274e To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Fam Zheng , Dmitry Fleytman , b4-sent@kernel.org, Miao Wang X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5870; i=shankerwangmiao@gmail.com; s=20250715; h=from:subject:message-id; bh=IDD6ngFrpnNwjIvo7mlAG2CQIH9yKzKqEbqAPfV7ac0=; b=owEBbQKS/ZANAwAKAbAx48p7/tluAcsmYgBqIs7iFHWdvYvQ+eHP9PcejZHcy/LnvqNiXlcWM e7YklLHYPWJAjMEAAEKAB0WIQREqPWPgPJBxluezBOwMePKe/7ZbgUCaiLO4gAKCRCwMePKe/7Z bvS4D/wKIdrGYEL3DI3HZCBXXOk9aU2wsxAtYO5cbqjZ8vLFHR0ATWwCdoaCO70tUyUgBkCO/VW vRqEPJBuyFhwhaYLkng7MvnzuvJHMmI9/e2OHtDNMc18nKVv5Mwd9lJ+Se3e3NOCkTSWATS1Jq7 IZd3jy7YiYzLA7U5N1smRHPGj2ilQG5Mrv6Bej3THc9rHqPwhOZG/Od6KC1PagRZXCRVNcMGqOS jkArL8MTqhkD4APNBZGBBaHn7/qjsfq42qrQzAwPMuhqzrtP24OUtkM84RJiskmm1ocQOVs5V3+ EUp7ogXcFip1xzfLD6DDy0kW4cZAe4/hKvQt5nK6dx+y2ksbez7RXc3w8Q7ecYBVvgZ1AyRNtxd JldOH2p+XHWvQiWck8jyhEyNQ3RwREi+qRviNMidpXR9TtJCzdqPtJeU79FkzoLnPzaiyFV4/ja eVFc3jlswCd6WrMNH3k6Ob/nKjZbtECWJe8CTd8IGuNyyxwIBoMkk62blKM2HAf6F67wZBgDpn2 GFRQvWUoyrTHX5Yh7iaFJzRksnTmumoZT/VcdbdFgDZV362qwr0VT30+d1xwqN5a2V/Fmct9N+Z qFSAs0oPM7x2xnEUjwVaiVvOSAsQt3otfnFDN42+2AKPn5PAkVV2LU9XVNi/s4w2T52h9xLbTT9 0W8OUxDTk5ei9hg== X-Developer-Key: i=shankerwangmiao@gmail.com; a=openpgp; fpr=6FAEFF06B7D212A774C60BFDFA0D166D6632EF4A X-Endpoint-Received: by B4 Relay for shankerwangmiao@gmail.com/20250715 with auth_id=462 X-Original-From: Miao Wang Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2600:3c0a:e001:78e:0:1991:8:25; envelope-from=devnull+shankerwangmiao.gmail.com@kernel.org; helo=sea.source.kernel.org X-Spam_score_int: 0 X-Spam_score: -0.0 X-Spam_bar: / X-Spam_report: (-0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_REPLYTO=2.095, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Fri, 05 Jun 2026 10:53:42 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: shankerwangmiao@gmail.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @kernel.org) X-ZM-MESSAGEID: 1780671247336154100 From: Miao Wang This patch improves the implementation of the pvscsi device by translating the endianness of the data sent or received from the guest. This ensures pvscsi can work on big-endian hosts with little-endian guests. Signed-off-by: Miao Wang --- hw/scsi/vmw_pvscsi.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++= +++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/hw/scsi/vmw_pvscsi.c b/hw/scsi/vmw_pvscsi.c index 11ae6b9b7474b9bc87621137eb7911361b5fd721..883dfe9b6b5dc687737de356da0= 2fe5f68aea7ad 100644 --- a/hw/scsi/vmw_pvscsi.c +++ b/hw/scsi/vmw_pvscsi.c @@ -35,6 +35,7 @@ #include "hw/pci/msi.h" #include "hw/core/qdev-properties.h" #include "exec/cpu-common.h" +#include "exec/tswap.h" #include "vmw_pvscsi.h" #include "trace.h" #include "qom/object.h" @@ -392,9 +393,18 @@ static void pvscsi_cmp_ring_put(PVSCSIState *s, struct PVSCSIRingCmpDesc *cmp_desc) { hwaddr cmp_descr_pa; + struct PVSCSIRingCmpDesc cmp_desc_conv; =20 cmp_descr_pa =3D pvscsi_ring_pop_cmp_descr(&s->rings); trace_pvscsi_cmp_ring_put(cmp_descr_pa); + cmp_desc_conv =3D (struct PVSCSIRingCmpDesc) { + .context =3D tswap64(cmp_desc->context), + .dataLen =3D tswap64(cmp_desc->dataLen), + .senseLen =3D tswap32(cmp_desc->senseLen), + .hostStatus =3D tswap16(cmp_desc->hostStatus), + .scsiStatus =3D tswap16(cmp_desc->scsiStatus), + }; + cmp_desc =3D &cmp_desc_conv; cpu_physical_memory_write(cmp_descr_pa, cmp_desc, sizeof(*cmp_desc)); } =20 @@ -402,9 +412,18 @@ static void pvscsi_msg_ring_put(PVSCSIState *s, struct PVSCSIRingMsgDesc *msg_desc) { hwaddr msg_descr_pa; + struct PVSCSIRingMsgDesc msg_desc_conv; + int i; =20 msg_descr_pa =3D pvscsi_ring_pop_msg_descr(&s->rings); trace_pvscsi_msg_ring_put(msg_descr_pa); + msg_desc_conv =3D (struct PVSCSIRingMsgDesc) { + .type =3D tswap32(msg_desc->type), + }; + for (i =3D 0; i < ARRAY_SIZE(msg_desc->args); i++) { + msg_desc_conv.args[i] =3D tswap32(msg_desc->args[i]); + } + msg_desc =3D &msg_desc_conv; cpu_physical_memory_write(msg_descr_pa, msg_desc, sizeof(*msg_desc)); } =20 @@ -481,6 +500,9 @@ pvscsi_get_next_sg_elem(PVSCSISGState *sg) struct PVSCSISGElement elem; =20 cpu_physical_memory_read(sg->elemAddr, &elem, sizeof(elem)); + elem.addr =3D tswap64(elem.addr); + elem.length =3D tswap32(elem.length); + elem.flags =3D tswap32(elem.flags); if ((elem.flags & ~PVSCSI_KNOWN_FLAGS) !=3D 0) { /* * There is PVSCSI_SGE_FLAG_CHAIN_ELEMENT flag described in @@ -759,6 +781,12 @@ pvscsi_process_io(PVSCSIState *s) =20 trace_pvscsi_process_io(next_descr_pa); cpu_physical_memory_read(next_descr_pa, &descr, sizeof(descr)); + descr.context =3D tswap64(descr.context); + descr.dataAddr =3D tswap64(descr.dataAddr); + descr.dataLen =3D tswap64(descr.dataLen); + descr.senseAddr =3D tswap64(descr.senseAddr); + descr.senseLen =3D tswap32(descr.senseLen); + descr.flags =3D tswap32(descr.flags); pvscsi_process_request_descriptor(s, &descr); } =20 @@ -808,6 +836,17 @@ pvscsi_on_cmd_setup_rings(PVSCSIState *s) { PVSCSICmdDescSetupRings *rc =3D (PVSCSICmdDescSetupRings *) s->curr_cmd_data; + PVSCSICmdDescSetupRings translated; + int i; + + translated.reqRingNumPages =3D tswap32(rc->reqRingNumPages); + translated.cmpRingNumPages =3D tswap32(rc->cmpRingNumPages); + translated.ringsStatePPN =3D tswap64(rc->ringsStatePPN); + for (i =3D 0; i < PVSCSI_SETUP_RINGS_MAX_NUM_PAGES; i++) { + translated.reqRingPPNs[i] =3D tswap64(rc->reqRingPPNs[i]); + translated.cmpRingPPNs[i] =3D tswap64(rc->cmpRingPPNs[i]); + } + rc =3D &translated; =20 trace_pvscsi_on_cmd_arrived("PVSCSI_CMD_SETUP_RINGS"); =20 @@ -831,6 +870,11 @@ pvscsi_on_cmd_abort(PVSCSIState *s) PVSCSICmdDescAbortCmd *cmd =3D (PVSCSICmdDescAbortCmd *) s->curr_cmd_d= ata; PVSCSIRequest *r, *next; =20 + PVSCSICmdDescAbortCmd translated =3D *cmd; + translated.context =3D tswap32(cmd->context); + translated.target =3D tswap32(cmd->target); + cmd =3D &translated; + trace_pvscsi_on_cmd_abort(cmd->context, cmd->target); =20 QTAILQ_FOREACH_SAFE(r, &s->pending_queue, next, next) { @@ -862,6 +906,10 @@ pvscsi_on_cmd_reset_device(PVSCSIState *s) (struct PVSCSICmdDescResetDevice *) s->curr_cmd_data; SCSIDevice *sdev; =20 + PVSCSICmdDescResetDevice translated =3D *cmd; + translated.target =3D tswap32(cmd->target); + cmd =3D &translated; + sdev =3D pvscsi_device_find(s, 0, cmd->target, cmd->lun, &target_lun); =20 trace_pvscsi_on_cmd_reset_dev(cmd->target, (int) target_lun, sdev); @@ -892,6 +940,14 @@ pvscsi_on_cmd_setup_msg_ring(PVSCSIState *s) { PVSCSICmdDescSetupMsgRing *rc =3D (PVSCSICmdDescSetupMsgRing *) s->curr_cmd_data; + PVSCSICmdDescSetupMsgRing translated =3D *rc; + int i; + + translated.numPages =3D tswap32(rc->numPages); + for (i =3D 0; i < PVSCSI_SETUP_MSG_RING_MAX_NUM_PAGES; i++) { + translated.ringPPNs[i] =3D tswap64(rc->ringPPNs[i]); + } + rc =3D &translated; =20 trace_pvscsi_on_cmd_arrived("PVSCSI_CMD_SETUP_MSG_RING"); =20 @@ -994,7 +1050,7 @@ pvscsi_on_command_data(PVSCSIState *s, uint32_t value) size_t bytes_arrived =3D s->curr_cmd_data_cntr * sizeof(uint32_t); =20 assert(bytes_arrived < sizeof(s->curr_cmd_data)); - s->curr_cmd_data[s->curr_cmd_data_cntr++] =3D value; + s->curr_cmd_data[s->curr_cmd_data_cntr++] =3D tswap32(value); =20 pvscsi_do_command_processing(s); } --- base-commit: 29c042c6e9d4a09d4a0ac3fa54aeb7ee08ce0bdc change-id: 20260605-pvscsi-endianness-c0d389d8274e Best regards, --=20 Miao Wang