From nobody Mon Sep 21 01:50:27 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=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1784057773; cv=none; d=zohomail.com; s=zohoarc; b=i3JhO/jd+kLWOd8ewMRuvQWvLMBkplay+TCX5r4ldBmsctvt+i5qr/i9o2C0X1tpd92sFaEj0mFNyQHxW1VxMwRjH5eMTIfD4uVSOCK0QLMNPeo8fjMZFyKksztEVw9x8eRUYhH9/gxTbwOYd9kqn8xe3ZxTiBYQFaGfrmXi9Ks= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1784057773; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=Wi/yH2BAkmWSY8q/5WbL83633G2Lv6HztDay1MN7yEE=; b=A33QsI37275YOJOqp40zNgGo9c6KONWf6Xb5JcMW6CIe5Ng0dhvjmRIDcLMhweUGQ8uylzhBZN84qsleMtLH/U5gBZWt6oua+gZUnFUg83pIsCGuH68/4qhkPhsRBStWBnoo6s5goAwGpG+8CT/1z2xisioh0oMHhMNwtnWeP90= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1784057773619365.55094525164327; Tue, 14 Jul 2026 12:36:13 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wjiv5-0001ZE-Oy; Tue, 14 Jul 2026 15:35:55 -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 1wjiv4-0001Z6-V0 for qemu-devel@nongnu.org; Tue, 14 Jul 2026 15:35:54 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wjiv3-00055l-2x for qemu-devel@nongnu.org; Tue, 14 Jul 2026 15:35:54 -0400 Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66EIxKaF1481546 for ; Tue, 14 Jul 2026 19:35:52 GMT Received: from mail-qt1-f198.google.com (mail-qt1-f198.google.com [209.85.160.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fdgudjt14-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 14 Jul 2026 19:35:51 +0000 (GMT) Received: by mail-qt1-f198.google.com with SMTP id d75a77b69052e-51c0d6a2f4cso73393831cf.3 for ; Tue, 14 Jul 2026 12:35:51 -0700 (PDT) Received: from localhost.localdomain (88-187-86-199.subs.proxad.net. [88.187.86.199]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4950873270esm89620715e9.6.2026.07.14.12.35.49 for (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Tue, 14 Jul 2026 12:35:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= Wi/yH2BAkmWSY8q/5WbL83633G2Lv6HztDay1MN7yEE=; b=Z/6heRxQMkB5oRYY 1CiCqcVIVKK7uH+M6nnS6pazAL5wVgVYwFDoUzIRM0fIO05lYvNT1xy3GCkK5ew1 g2MR7gmo7Fr1NQqmzmDnUj9/iy4JQDrlM8BL6iFyIw28Rl9yFKIV8x8tvh2sfnhQ qBijrInN/Jl5++cMLlnPDBjwAzstTFhCpP5x3iShIjuJ8XDX8uxWqlEFzaMP58EK wMP2GSMKGg28+AU6eieFKgnIKug457eTXQ/ubNjY+K9vU9nZ7ghrAhyQfRCWsyJf PXqu0nWj2PBJvWHge4cl6GPXeMTk4UKkCBQW6FhsWTVDeFWsJw1hef75EO8n08nE aJaptQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784057751; x=1784662551; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Wi/yH2BAkmWSY8q/5WbL83633G2Lv6HztDay1MN7yEE=; b=jW1flvxqCqVIX4Ge1qWaiP91Sxu11F+Pq+VWtkPTOGxM7Vpu08zuqvzSX8ikaOwIeI 3MAYKx7yJqWkYKbpc6H6l7y4k/3nTllQoKxJZkpPEgNJEHz0Izq16ZF9F7wiRNg0oeeJ E9rg7NuNR+bnNBgzRU1fBTtn4VRd7KpTDVk2oh5Ps+FncH2OEx7crv2aqRfidsqyOwPR rT/DOPp0MwZMfQMXD/oZCHYrP/7Ze99e26rlfnvxZjnC4YJFGyUp9cDz3CBeAL117Iqo YFrzJLT7WJb3wbmfFW3sdd9Db5fMEE7cJvDBO6juvUuXUWmEAdzpHAoT0sDIQcJtI0KH pYKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784057751; x=1784662551; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Wi/yH2BAkmWSY8q/5WbL83633G2Lv6HztDay1MN7yEE=; b=SqI9UiW3Tpnov1c9pTCbpCL3Ddue/fn/NEctmwGh41QRDdugjEwJBPh13BQ120iL/C wtWIHa4CsulIq1uOv/2zwHjdkFrFMkbGGV2EqkT9hETNvcUXngjJnpgq9iFdK7ZAf1tY IYAoN5IfD6d5VGGBVxe94ZXHizvQYR5X/dCW7k1GsuKv4PDU9eQgXrOoiUaOGM1KZ8Ue NcHUNSN+gizD2pbSZzrW2K1LIEatbSbfoL9WikySMhHJd69ze37cQIjW2szJsjrKiz8o fV35g5exYkF9jor0PMTuqwuXJxp8NOPtzLXMeEx89bpFDfr9OKniva/Cm49y9TqcLb8n ao4A== X-Gm-Message-State: AOJu0YwTj4Sk38rtEzAx2FhKXHEVWa+2oMmOMUPMyD2wYqqCRyG22WTy lbFGRHidihT83WO06itZMV4AOAgpk0kVN5c7JBik1VFdEj6AykyrF9hOs1GbTNNz1PeR0eNZIYF Kczcd/YL/pcXAgYFCO1ePCRxCQ/keTncFw704J2N8s9i7UdhTFBTWUKhQiPNctilFow== X-Gm-Gg: AfdE7cm0SRTP5tUW/glrCBpDlPpMe5pDfhZGQRMvHlxF5bldC3eGR7Mpj5eEHsDQPD5 jAbjlxePWJHE/WKU8SqgSINm/OjeI6It/i3QGuHFu3dUJveU0npyExNsAfJouIapxCebmTKXErW G9rB0AbP/Irwh2IoEgDTjCIJgdZZVlHYwfL+ZaaTusHWHvLnHRp+7mZ+V1mS0iz3dDmi/WIncev N7FhyY7dFSZ6fJIRCFGydTIqvCWcbiGT906+q6zSxr64sVjUU6f5KbkIV2J4Mgg8SKdRlJ7dd1j ppHMO8LFN0Uli+WuM0uZfIQgvpDyN7JI+Vdy8t1K8FUKlmFDDq/KR9S6rhfZr6sKxv6p+5L5PgH RVMC+I/5tWwRiVjs6SC+iMBVxLfhixpW+nGEKUTX65taCvVjNCLlQU9LxaURVlZVJapkk X-Received: by 2002:a05:622a:1c18:b0:51c:7b12:6000 with SMTP id d75a77b69052e-51e4f22de1fmr204061cf.76.1784057751247; Tue, 14 Jul 2026 12:35:51 -0700 (PDT) X-Received: by 2002:a05:622a:1c18:b0:51c:7b12:6000 with SMTP id d75a77b69052e-51e4f22de1fmr203671cf.76.1784057750475; Tue, 14 Jul 2026 12:35:50 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Subject: [PULL 04/13] hw/scsi/vmw_pvscsi: translate data endianness Date: Tue, 14 Jul 2026 21:35:08 +0200 Message-ID: <20260714193517.60708-5-philmd@oss.qualcomm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260714193517.60708-1-philmd@oss.qualcomm.com> References: <20260714193517.60708-1-philmd@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: UGqz76woKj9P9O-5XoTnNlrvPo6Nm1wP X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzE0MDIwMiBTYWx0ZWRfX3EdIwhDXHxBm thXJYykuU/I+W2qEke8/3wNyYbXPmBF4ChlazK4XjOOu9eNHIpeND/HUR6ymn1dOVSWyCWET1U3 x5yq4SADWJqp5Ir93OVGBddDSLuBLqqPTnZX/321ylvqTG5SUI3RZI33+rvgWYsfAyMsumI5nkj jhWx5n0yNEbUconf5r0sW1lUagJnQq+BmJ22aKeTashVcx2thWANTZC4DbGyjYYdgyZcgC/b3+j a3z9loZQW+dmKEtnQSfSj52oUjDKquPwrFg9sSsdbXyGr6cs5Mi2V7dzrNXwJ7HGB2wQaq36sek OCaDRFksUjRHqMgP5ajAt6/Uq/TJbXWP46s217WDfqaDiUG0MraHQREo3RzmuzbdyLqhdh6wKSD HT1k13Rc0lAhXRbRlXA2zEOWvA9j2woTRuzLp2cK1yWFWWxey3tLHzcQLdmm4RGClWkGp1UtrcO fk+Xt8DyHSn9AOAtMpg== X-Authority-Analysis: v=2.4 cv=T/O8ifKQ c=1 sm=1 tr=0 ts=6a568f98 cx=c_pps a=mPf7EqFMSY9/WdsSgAYMbA==:117 a=4s3hRJSeHn4rkQlkrse1kQ==:17 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=M51BFTxLslgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=3WHJM1ZQz_JShphwDgj5:22 a=pGLkceISAAAA:8 a=EUspDBNiAAAA:8 a=bo06jjfrt4HcdEXMXB8A:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=dawVfQjAaf238kedN5IG:22 X-Proofpoint-Spam-Info: AW1haW4tMjYwNzE0MDIwMiBTYWx0ZWRfX3pgsqJ019/Fe TqZ9ih24ChMdj1FsLMhcKDoiwWSb+EQbEyVBgiuTX+pOBV5+85EdfackqWIGG2HTiBhCrPLyZeW V2fHqC31ieoiwry7jgdEkAgDGjJzkxo= X-Proofpoint-ORIG-GUID: UGqz76woKj9P9O-5XoTnNlrvPo6Nm1wP X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-14_05,2026-07-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 malwarescore=0 adultscore=0 spamscore=0 phishscore=0 clxscore=1015 bulkscore=0 suspectscore=0 impostorscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607140202 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=205.220.180.131; envelope-from=philmd@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1784057775760158500 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. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Miao Wang Message-ID: <20260710-pvscsi-endianness-v3-1-27fe1c4d1f6e@gmail.com> [PMD: Rebased on top of commit cb30b8758d4 physmem API conversion] Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- 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 4398aa54990..05f93171cd7 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; + 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; 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; + 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 (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; 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 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); 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); } --=20 2.53.0