From nobody Mon Feb 9 23:03:35 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=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1657790821; cv=none; d=zohomail.com; s=zohoarc; b=MSL0876fuMp+r9wlvw905AegYniLxQE3ivJaixAUC6D7p3cJjbMnaOijf8d0Aa921J1xp6KaCpmIxD+BXXGCwEFwUbrQUyMh9vzy3XshN29qDij6gGIFIavM1zWXGMVAGOUpbo1bWjllBPzwMzDNVpjzdD/epbI1D8mVBLgF2o8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657790821; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ITcwNs94bqpAb2bGyOg0ZV+GYhMASrM2rJCPaUnfMr4=; b=mYqn83Zm9LoVIFEZGSjKEXp4X9eO7urIIbc2IgJ5rH+ZSzuIqjkCeDuCCux7eKC+JyRDyBmjDr79o9SifqHCfgzXVjkHtpBzI/L5FXhirYvOXTkGnLdMqLp+TPzvVSLTLobkH2ciyiuY8k6j9Bo9WzMp/hkzCei0U4Qo5xylp7w= 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=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1657790821181177.74890255882292; Thu, 14 Jul 2022 02:27:01 -0700 (PDT) Received: from localhost ([::1]:59270 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oBv7c-00084m-2l for importer@patchew.org; Thu, 14 Jul 2022 05:27:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40702) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oBuk6-0005BU-6G for qemu-devel@nongnu.org; Thu, 14 Jul 2022 05:02:43 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:51228) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oBuk4-00060V-Er for qemu-devel@nongnu.org; Thu, 14 Jul 2022 05:02:41 -0400 Received: from mail-ed1-f72.google.com (mail-ed1-f72.google.com [209.85.208.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-592-pfT4ogswNlyKCqR4y7NX7Q-1; Thu, 14 Jul 2022 05:02:38 -0400 Received: by mail-ed1-f72.google.com with SMTP id c9-20020a05640227c900b0043ad14b1fa0so1119848ede.1 for ; Thu, 14 Jul 2022 02:02:38 -0700 (PDT) Received: from goa-sendmail ([93.56.169.184]) by smtp.gmail.com with ESMTPSA id l5-20020aa7c3c5000000b0043575ae2051sm679918edr.62.2022.07.14.02.02.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 14 Jul 2022 02:02:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1657789359; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ITcwNs94bqpAb2bGyOg0ZV+GYhMASrM2rJCPaUnfMr4=; b=UjI2Do/poCqkxCaDYFHuku1oy/6a+XgKkDr7vQVCoJ+AvBrRx/obpQ73fzO1U1WFjj7nVl 29n57GpOMqeA9IQqORJ38wnQgDfmgoJWLwb9ndUm6lKS16pn8aVzFamfnvK29jCJiQOSRs foALtVKpL7dKKPKounHkIISmVwn3qHs= X-MC-Unique: pfT4ogswNlyKCqR4y7NX7Q-1 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ITcwNs94bqpAb2bGyOg0ZV+GYhMASrM2rJCPaUnfMr4=; b=HliExn+qsxtkCPv1Y7ZNvXWuqmSqb1QWDG/mOqd0HcV+igQT1m99ujsMfDxxihRelD VM60j+sDBIRtieh9PLRdzx0lR9s94/BgGHl1mZNcsw+T6Gq/uebmscX695KXlHYa7vgw 6KkPEO9QelUT3N9VuGAYd71nWXjeVzyjGXUYwHI5BlyrHiKuUeq8bdf9mlMLwFXz+i3+ S8jEOstzosG33HcuM43E+HPVoleW4rNyN8s9DLiwHyyv/kZ5aVKnP1x76vQXymsv/eXB cI2W88Vkf8tRug9dG0Vm2iKg9kgv4FVNiMTDffu460AxgDXEKyiakA6zvSdTBBFrNnKN PdDg== X-Gm-Message-State: AJIora94w6GtptveFrJPJbaesK9m3qxuRHBz/m3cWp9PoQzxRu7zE7XN /pMLlpJtNjdyJTVhAFYZXGIjUrTDq1rt0/WGtm4rXpSVzR0q8jlyxo84+Q4PxKqGKLmyY0AJv9q 7hSGxRxCch03pIA1Vuq/6eN30MqSHRZr5r0eMrcBumrZQzh60N+6wVB/8ZsmyYnizI+0= X-Received: by 2002:a17:906:49d5:b0:717:7d2f:d6ed with SMTP id w21-20020a17090649d500b007177d2fd6edmr7713423ejv.750.1657789357239; Thu, 14 Jul 2022 02:02:37 -0700 (PDT) X-Google-Smtp-Source: AGRyM1vYP7nHq+5ow94T2vjBu69qWjkJAFY9ZU+0WhxNg5DUdFTp2ZPt4JZe/eSkf6nR+eWIjbZkRg== X-Received: by 2002:a17:906:49d5:b0:717:7d2f:d6ed with SMTP id w21-20020a17090649d500b007177d2fd6edmr7713404ejv.750.1657789356894; Thu, 14 Jul 2022 02:02:36 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Cc: Mark Cave-Ayland Subject: [PULL 14/20] scsi-disk: add SCSI_DISK_QUIRK_MODE_PAGE_TRUNCATED quirk for Macintosh Date: Thu, 14 Jul 2022 11:02:05 +0200 Message-Id: <20220714090211.304305-15-pbonzini@redhat.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220714090211.304305-1-pbonzini@redhat.com> References: <20220714090211.304305-1-pbonzini@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -21 X-Spam_score: -2.2 X-Spam_bar: -- X-Spam_report: (-2.2 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.082, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1657790821983100003 Content-Type: text/plain; charset="utf-8" From: Mark Cave-Ayland When A/UX configures the CDROM device it sends a truncated MODE SELECT requ= est for page 1 (MODE_PAGE_R_W_ERROR) which is only 6 bytes in length rather than 10. This seems to be due to bug in Apple's code which calculates the CDB me= ssage length incorrectly. The work at [1] suggests that this truncated request is accepted on real hardware whereas in QEMU it generates an INVALID_PARAM_LEN sense code which causes A/UX to get stuck in a loop retrying the command in an attempt to su= cceed. Alter the mode page request length check so that truncated requests are all= owed if the SCSI_DISK_QUIRK_MODE_PAGE_TRUNCATED quirk is enabled, whilst also ad= ding a trace event to enable the condition to be detected. [1] https://68kmla.org/bb/index.php?threads/scsi2sd-project-anyone-interest= ed.29040/page-7#post-316444 Signed-off-by: Mark Cave-Ayland Message-Id: <20220622105314.802852-10-mark.cave-ayland@ilande.co.uk> Signed-off-by: Paolo Bonzini --- hw/scsi/scsi-disk.c | 7 ++++++- hw/scsi/trace-events | 1 + include/hw/scsi/scsi.h | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c index 9413b33bac..2b2e496ebd 100644 --- a/hw/scsi/scsi-disk.c +++ b/hw/scsi/scsi-disk.c @@ -1552,7 +1552,10 @@ static int mode_select_pages(SCSIDiskReq *r, uint8_t= *p, int len, bool change) goto invalid_param; } if (page_len > len) { - goto invalid_param_len; + if (!(s->quirks & SCSI_DISK_QUIRK_MODE_PAGE_TRUNCATED)) { + goto invalid_param_len; + } + trace_scsi_disk_mode_select_page_truncated(page, page_len, len= ); } =20 if (!change) { @@ -3151,6 +3154,8 @@ static Property scsi_cd_properties[] =3D { DEFINE_PROP_BIT("quirk_mode_page_vendor_specific_apple", SCSIDiskState, quirks, SCSI_DISK_QUIRK_MODE_PAGE_VENDOR_SPECIFIC_APPL= E, 0), + DEFINE_PROP_BIT("quirk_mode_page_truncated", SCSIDiskState, quirks, + SCSI_DISK_QUIRK_MODE_PAGE_TRUNCATED, 0), DEFINE_PROP_END_OF_LIST(), }; =20 diff --git a/hw/scsi/trace-events b/hw/scsi/trace-events index 03b2640934..8e927ff62d 100644 --- a/hw/scsi/trace-events +++ b/hw/scsi/trace-events @@ -339,6 +339,7 @@ scsi_disk_dma_command_READ(uint64_t lba, uint32_t len) = "Read (sector %" PRId64 " scsi_disk_dma_command_WRITE(const char *cmd, uint64_t lba, int len) "Write= %s(sector %" PRId64 ", count %u)" scsi_disk_new_request(uint32_t lun, uint32_t tag, const char *line) "Comma= nd: lun=3D%d tag=3D0x%x data=3D%s" scsi_disk_aio_sgio_command(uint32_t tag, uint8_t cmd, uint64_t lba, int le= n, uint32_t timeout) "disk aio sgio: tag=3D0x%x cmd=3D0x%x (sector %" PRId6= 4 ", count %d) timeout=3D%u" +scsi_disk_mode_select_page_truncated(int page, int len, int page_len) "pag= e %d expected length %d but received length %d" =20 # scsi-generic.c scsi_generic_command_complete_noio(void *req, uint32_t tag, int statuc) "C= ommand complete %p tag=3D0x%x status=3D%d" diff --git a/include/hw/scsi/scsi.h b/include/hw/scsi/scsi.h index 011cb84753..e284e3a4ec 100644 --- a/include/hw/scsi/scsi.h +++ b/include/hw/scsi/scsi.h @@ -230,5 +230,6 @@ extern const SCSIReqOps scsi_generic_req_ops; #define SCSI_DISK_QUIRK_MODE_PAGE_APPLE_VENDOR 0 #define SCSI_DISK_QUIRK_MODE_SENSE_ROM_USE_DBD 1 #define SCSI_DISK_QUIRK_MODE_PAGE_VENDOR_SPECIFIC_APPLE 2 +#define SCSI_DISK_QUIRK_MODE_PAGE_TRUNCATED 3 =20 #endif --=20 2.36.1