From nobody Sun Jul 26 02:30:03 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=1783622208; cv=none; d=zohomail.com; s=zohoarc; b=HrJESUqWDrnwTItEVcnjbJqf1caw9x9qiLPMmFcpRuPQwRRZEyQ4fa9ETS46Oj0qp0Hhvbk6txooSSuCl1guIiXJHLc+H29AQKXPw5i7ZnQn/UWVFypJLHgIszmwP9PH+5rU/ThVgCr1fdij9HDM/8CDWYDsVqR7pKaqEXLZiS4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783622208; 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=yO2S42cFthZJgrKDQLugp2giFAr7GQWJiSh2jtptKIw=; b=GsipvTNZauM2MfMAS44FoTcOtLY292MwuN8g9is8aYQBrlrHdk9gJZNef3O706ED80PNiew2L9B27PHmsq4EfkaUS0Ty0PWsnZILIf62QL0ynEqxV3EoFdKfOW7r7FLKJlqLqOsMBNWAzp9D45yzvW02qM8fa3BvDwUUgNYsdmE= 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 1783622208428374.08011028829173; Thu, 9 Jul 2026 11:36:48 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1whtbO-0007y6-Ro; Thu, 09 Jul 2026 14:36:02 -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 1whtbF-0007vv-Ph for qemu-devel@nongnu.org; Thu, 09 Jul 2026 14:35:54 -0400 Received: from tor.source.kernel.org ([2600:3c04:e001:324: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 1whtbD-0006XV-Sz for qemu-devel@nongnu.org; Thu, 09 Jul 2026 14:35:53 -0400 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by tor.source.kernel.org (Postfix) with ESMTP id D3866600C3; Thu, 9 Jul 2026 18:35:42 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPS id 8866BC2BCB7; Thu, 9 Jul 2026 18:35:42 +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 66035C43458; Thu, 9 Jul 2026 18:35:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1783622142; bh=4OmZ+DOOtLwDSDxJFxIClGwVRChMACQ0X/sUf+W/xCU=; h=From:Date:Subject:To:Cc:Reply-To:From; b=laf9MzK0QPX8Kiu200Jd6+C+TzaHg5Z/Nw3DjvNFBRVKs1QTlSnpmcgdaWTsDtxnu dkIM2zfbbTyYzv5axp2chg0weXzPDaFEOaAwxJgnXnkZoNpIdFNlxbvkP0+rSGZ2q2 evXI0GhgjnDh72HdW+0XLP+NmrOrb7F7p6buSUN7RC4q2Z+Bs4EMxWqwLgZ+PTISY3 nRHJFmjE7hg1EaQF6Q+BoEkYrA3JWtHjx1fIw9evK/4A6YDOJ02jh7mqJkjCzQVhKV zYiRwtfPthnTHguKhF1Z9TWEh9ieggJEw2OGdvh5bVTlO8lDo9nYYSIduXFthdpfdg WbVfCWevs3iQA== From: Miao Wang via B4 Relay Date: Fri, 10 Jul 2026 02:35:31 +0800 Subject: [PATCH v2] pvscsi: translate data endianness MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260710-pvscsi-endianness-v2-1-c512e6c8849b@gmail.com> X-B4-Tracking: v=1; b=H4sIAPLpT2oC/32NTQrDIBBGrxJmXYva/K96j5JFomMy0GhwirSE3 L02B+jyPfjetwNjJGToix0iJmIKPoO+FGCW0c8oyGYGLXUta1mJLbFhEugtjd4jszDS3trOtro pEfJui+jofTYfQ+aF+BXi57xI6mf/1ZISSkxycmWjJ+mq7j6vIz2vJqwwHMfxBTiCJZWyAAAA X-Change-ID: 20260605-pvscsi-endianness-c0d389d8274e To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Fam Zheng , Dmitry Fleytman , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Peter Maydell , Michael Tokarev , b4-sent@kernel.org, Miao Wang X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=6283; i=shankerwangmiao@gmail.com; s=20250715; h=from:subject:message-id; bh=DL30zIks6In3NDYGK7v7j3XM1TzYPDzc1gG49FgIrI0=; b=owEBbQKS/ZANAwAKAbAx48p7/tluAcsmYgBqT+n1k6mjcpdPM0IlrnBEXRN0hCrQBshzNRlLr hQkpXRmH6GJAjMEAAEKAB0WIQREqPWPgPJBxluezBOwMePKe/7ZbgUCak/p9QAKCRCwMePKe/7Z bhe7EACLlb33eiVmqoqiv5GydEbatzEGmZI+A7y96ed6o48TWJ7Hywzk5NO/j3A7VbXGHHifr34 GT3278iK76R3P5NRgr8W18HdZXYUobb24WPImIr3R06ibphM+x/VF2nGLIFewuI7WvylbQmFqyd vBvyMGJ9raLqfpBPjkLw4TiSRL6874A9yLenksBaPHXlXtqVY3sp/zGEP7qj1Es2k55zy77GaZv Nuy+hNOmV344pgsdZlAePYbLsvGqmSH6KLBHGlDoE/4/O5kyjjsj9yGL5V5McHWAW7P9jVAsZp2 u11N7/13AxNCX2r3teuwYSIwbfW5NEBbSp63k0u2hT3PopWK8xo04vK5A1/K2DaqoXSVNo4nBIh eTQ8XDP35rYj5bU2pnmK3w4YU0ctg8ZdQ2DCd/qBwhMYIdj+jdRYKRdvKdZeVn7Ywp66yYrdFTB cz6hsWFYtAHNmFcXByTpPtmic8alfnLPozR0XmkbTefjcrM9lPcX9RSZ1HhiIolMMVwbZgc3aL+ Y5ilZq6DGNsBmVkA+MmCFoXzWQLht3w22oKYqoRW+xmAAgpGCqQixD9yX1/GDKF9tCI0x2Y8Oh1 CvkIevoRbd+hpdAqOI0AwYCoKOyYOGcjDzxkdfB/WRVOffr2vJ/Dz5IJ6XVWpKNaDSuPjR9IMIH zzcPTixpn89IFQw== 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:3c04:e001:324:0:1991:8:25; envelope-from=devnull+shankerwangmiao.gmail.com@kernel.org; helo=tor.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-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: 1783622209082158500 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. This patch assumes, although not having found any specifications, that the pvscsi device is little-endian, since pvscsi seems to be used only on x86 platforms, which are little-endian. Signed-off-by: Miao Wang Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- Changes in v2: - Assume pvscsi is little-endian instead of native-endian, and thus replace tswap*() with le*_to_cpu() and cpu_to_le*() to convert the endianness of pvscsi data structures to/from CPU endianness. - Link to v1: https://lore.kernel.org/qemu-devel/20260605-pvscsi-endianness= -v1-1-b0bf472b0f59@gmail.com --- hw/scsi/vmw_pvscsi.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++++= +++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/hw/scsi/vmw_pvscsi.c b/hw/scsi/vmw_pvscsi.c index 11ae6b9b7474b9bc87621137eb7911361b5fd721..e6befe9be2c49d1dc04e6e6384f= 9d24f7a6a4273 100644 --- a/hw/scsi/vmw_pvscsi.c +++ b/hw/scsi/vmw_pvscsi.c @@ -392,9 +392,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 cpu_to_le64(cmp_desc->context), + .dataLen =3D cpu_to_le64(cmp_desc->dataLen), + .senseLen =3D cpu_to_le32(cmp_desc->senseLen), + .hostStatus =3D cpu_to_le16(cmp_desc->hostStatus), + .scsiStatus =3D cpu_to_le16(cmp_desc->scsiStatus), + }; + cmp_desc =3D &cmp_desc_conv; cpu_physical_memory_write(cmp_descr_pa, cmp_desc, sizeof(*cmp_desc)); } =20 @@ -402,9 +411,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 cpu_to_le32(msg_desc->type), + }; + for (i =3D 0; i < ARRAY_SIZE(msg_desc->args); i++) { + msg_desc_conv.args[i] =3D cpu_to_le32(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 +499,9 @@ pvscsi_get_next_sg_elem(PVSCSISGState *sg) struct PVSCSISGElement elem; =20 cpu_physical_memory_read(sg->elemAddr, &elem, sizeof(elem)); + elem.addr =3D le64_to_cpu(elem.addr); + elem.length =3D le32_to_cpu(elem.length); + elem.flags =3D le32_to_cpu(elem.flags); if ((elem.flags & ~PVSCSI_KNOWN_FLAGS) !=3D 0) { /* * There is PVSCSI_SGE_FLAG_CHAIN_ELEMENT flag described in @@ -759,6 +780,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 le64_to_cpu(descr.context); + descr.dataAddr =3D le64_to_cpu(descr.dataAddr); + descr.dataLen =3D le64_to_cpu(descr.dataLen); + descr.senseAddr =3D le64_to_cpu(descr.senseAddr); + descr.senseLen =3D le32_to_cpu(descr.senseLen); + descr.flags =3D le32_to_cpu(descr.flags); pvscsi_process_request_descriptor(s, &descr); } =20 @@ -808,6 +835,17 @@ pvscsi_on_cmd_setup_rings(PVSCSIState *s) { PVSCSICmdDescSetupRings *rc =3D (PVSCSICmdDescSetupRings *) s->curr_cmd_data; + PVSCSICmdDescSetupRings translated; + int i; + + translated.reqRingNumPages =3D le32_to_cpu(rc->reqRingNumPages); + translated.cmpRingNumPages =3D le32_to_cpu(rc->cmpRingNumPages); + translated.ringsStatePPN =3D le64_to_cpu(rc->ringsStatePPN); + for (i =3D 0; i < PVSCSI_SETUP_RINGS_MAX_NUM_PAGES; i++) { + translated.reqRingPPNs[i] =3D le64_to_cpu(rc->reqRingPPNs[i]); + translated.cmpRingPPNs[i] =3D le64_to_cpu(rc->cmpRingPPNs[i]); + } + rc =3D &translated; =20 trace_pvscsi_on_cmd_arrived("PVSCSI_CMD_SETUP_RINGS"); =20 @@ -831,6 +869,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 le32_to_cpu(cmd->context); + translated.target =3D le32_to_cpu(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 +905,10 @@ pvscsi_on_cmd_reset_device(PVSCSIState *s) (struct PVSCSICmdDescResetDevice *) s->curr_cmd_data; SCSIDevice *sdev; =20 + PVSCSICmdDescResetDevice translated =3D *cmd; + translated.target =3D le32_to_cpu(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 +939,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 le32_to_cpu(rc->numPages); + for (i =3D 0; i < PVSCSI_SETUP_MSG_RING_MAX_NUM_PAGES; i++) { + translated.ringPPNs[i] =3D le64_to_cpu(rc->ringPPNs[i]); + } + rc =3D &translated; =20 trace_pvscsi_on_cmd_arrived("PVSCSI_CMD_SETUP_MSG_RING"); =20 @@ -994,7 +1049,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 cpu_to_le32(value); =20 pvscsi_do_command_processing(s); } --- base-commit: 29c042c6e9d4a09d4a0ac3fa54aeb7ee08ce0bdc change-id: 20260605-pvscsi-endianness-c0d389d8274e Best regards, --=20 Miao Wang