From nobody Fri Aug 21 21:27:02 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=openvz.org ARC-Seal: i=1; a=rsa-sha256; t=1787220668; cv=none; d=zohomail.com; s=zohoarc; b=Vz3oNAAQZBOww5Xo0f+skLVIYlm7cw+7U+rvh7EVq/AP0LkCbr80mo7kBmU/lvXuvc/c+qaPo+Hh4tUlYrtqBkqRLqw5gZdWNYMDyhA/6QaDJVKerIHTWpThj8ytPOF3JV/whKpfjQC7Htrqo2zstEmUnRqRZ+/K5ulpp33hkJ0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787220668; h=Content-Type:Content-Transfer-Encoding:Cc:Cc: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; bh=XyPzbjMy6v/JTvTk8bqzZDyIH2YLdq6RbLehiJKH+ZA=; b=k1osGYR4I5e1aqQCNgnYzbYpjY5sJbKk/vsDdIQTRoy1ZqghF/gFqN9duACoOeSdSellFCtc1pG/AqK0J1XJieB/GfZtppSc7HjZ7R0OuJqML5umcGRkgC+WUVAKZGoV9B35H03qtgYyW7cumI+Xk3f/QnCNX0Hc8F3YpdhZJmY= 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 1787220668325566.8158894649928; Thu, 20 Aug 2026 03:11:08 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwzhk-0006oU-2h; Thu, 20 Aug 2026 06:09:00 -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 1wwzhh-0006n9-B9 for qemu-devel@nongnu.org; Thu, 20 Aug 2026 06:08:57 -0400 Received: from mail-wr1-x42e.google.com ([2a00:1450:4864:20::42e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwzhd-0008Io-Hg for qemu-devel@nongnu.org; Thu, 20 Aug 2026 06:08:56 -0400 Received: by mail-wr1-x42e.google.com with SMTP id ffacd0b85a97d-47de0093c42so1956785f8f.3 for ; Thu, 20 Aug 2026 03:08:53 -0700 (PDT) Received: from athena.sw.ru ([2a06:5b06:b600:300:a123:7b43:afd8:8b47]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482b1441b0fsm11678929f8f.4.2026.08.20.03.08.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Aug 2026 03:08:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1787220532; x=1787825332; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=XyPzbjMy6v/JTvTk8bqzZDyIH2YLdq6RbLehiJKH+ZA=; b=qZ+wMUfsgYrHA32BzNkphZRBKchGA4lBKY99Cukq7KF8ScarcwnTKb1/ce+lCqZdv6 p0B0Ba8Flzlgk/7hUgkZPEY9D+WBb3GbvBB2zs2UTat7rPhRAL0JkUnRTuKW5tvYchnm W5lQW4H9oCoeTDNkQNcycJkQcgt5NuKE+rBfYXsrgq3eX6/fsNiKXfK8PUU94Kl7uci+ ch6NWnmuh+42fzMzxlrpY3QNdiIkJFN2D1Bviy2LE0bQfTmEmCkRZvdY57LQBJZHbHz0 U+B8BcrT4ypwwuOpi9cJoasl2z5BB3UUzJT/pCCm6VWltZDV4flD7gQd1huApdyXXi/M Qevg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787220532; x=1787825332; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=XyPzbjMy6v/JTvTk8bqzZDyIH2YLdq6RbLehiJKH+ZA=; b=ZzLr/4T09HNHQXERUb03CpvB33ovp8cx8EmS27h1mlWiQsiv+jnTVwB8rq5sdgtYYP UTGzhpZ7mFiub54NGnXr4eZWeSn70rwYp8X0oQpPjMaOsaPulOtSxyK0c3ZcagvqmFnZ bnqXZ3MaurI+maj0rdAZdUVXGJ4Of+bkNfv5VWgOQHNPvSPTiBohQ+vZzKNK7b/TrH+e EQQMHtoQ52aCXqT0si+M23Dyj7/KOaUrXs0Xk5koB+MoloZLpidZAyIuupoJIN5XFQvj zkXTv0+k5yVqePOfPdONuh2JxJn7z08EIW360fyyGTQXVSIqbLVGyEocdi3JcoAO3r1M NOsw== X-Gm-Message-State: AFuF++lQbtJw9/FHk9Wqh5FErE3zGOcOvfkZ94PCU5/DwJrMr4MpL+HI 7GthJbISCBMBrAWxATrFYyZJPshU0TpJZvsWc8litMcYnyaLjWFxmvOnKVsbkqbG5mtyIp/XLou sGN9O X-Gm-Gg: AR+sD123VhHkr3J/3BAtWd6Ugfezou+hfeTLG8p0AXs5Tnx3od7FM0EGpkMw1uK5t1B mxCGtYAhp8nj1reIoRZlT1goCg9ABLigjXLgPdVc8TkNQaBMLBT5Rphs+08DWpkPdViDpkyAr3X CrLV8b8vZf0d6bkNza+uRW2a88xOKLk/oMEQWzoaH8JFQ+yQnu2Nq7zdGEwU6O0d++XG2tVp4N7 2ddu5OcmeglW6wV5cfq5dkL0AMdrlMwU3wp39S8oxTuQ3XvK4A9vBeSeelNbK68jJaaIcV5eBjj RsLnzsehgOHnE/juFtsmmTwtWrxsSAfdChA+paCBGAgdwVARLg1evIJVNzPoSepDWv2mPsmtp1s Bco2NTr41Ndn64DSVjDyGpdK21IsWtzklmE/qhiJIs4Kgq3+JHUIgR+lhBUJ+Xs0RVkzDXUi5Cr 7Adk00fVr68h9lvcyZBoayz8nZu8sI0uMfDmFBsBPBP2dhFPw5oa7kHRh60wZob32IBz1N X-Received: by 2002:a5d:59a7:0:b0:481:511c:8d45 with SMTP id ffacd0b85a97d-482b1ff5789mr22005353f8f.20.1787220532118; Thu, 20 Aug 2026 03:08:52 -0700 (PDT) From: "Denis V. Lunev" To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, "Denis V. Lunev" , John Snow , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , qemu-stable@nongnu.org, Zheyu Ma Subject: [PATCH v2 01/17] hw/ide: reject an unsupported CHS translation Date: Thu, 20 Aug 2026 12:08:28 +0200 Message-ID: <20260820100844.411717-2-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260820100844.411717-1-den@openvz.org> References: <20260820100844.411717-1-den@openvz.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::42e; envelope-from=den@openvz.org; helo=mail-wr1-x42e.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, 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 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 @openvz.org) X-ZM-MESSAGEID: 1787220669056158500 From: Denis V. Lunev ide_set_sector() divides by (s->heads * s->sectors) when the drive is addressed in CHS mode. Both come from the guest via INITIALIZE DEVICE PARAMETERS, and cmd_specify() stored them without any check, so a guest asking for zero sectors per logical track killed QEMU with SIGFPE on the completion of the first CHS read or write. s->heads is safe, as the command passes a heads-1 value. The count has an upper bound as well. The legacy sector count register is eight bits wide, but handle_cmd() takes the count from a 16 bit field of the register FIS, so an AHCI guest can ask for up to 65535 sectors per track, and the CHS branch of ide_get_sector() then overflows the int it multiplies cylinder, heads and sectors in. ATA-5 6.2 numbers CHS sectors from one and ATA-2 D.2.8 limits IDENTIFY DEVICE word 56 to 1 through 255, so neither end is a translation a device may accept. ATA-5 8.16.6 requires an unsupported one to be reported as an aborted command: do that, leave the translation in effect alone, and refuse the value rather than checking it at every use. Cc: John Snow Cc: Peter Maydell Cc: Philippe Mathieu-Daud=C3=A9 Cc: qemu-stable@nongnu.org Fixes: 176e4961bb33 ("hw/ide/core.c: Implement ATA INITIALIZE_DEVICE_PARAME= TERS command") Reported-by: Zheyu Ma Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2399 Signed-off-by: Denis V. Lunev Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/ide/core.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/hw/ide/core.c b/hw/ide/core.c index fb9bf11b45..747fa71677 100644 --- a/hw/ide/core.c +++ b/hw/ide/core.c @@ -1655,14 +1655,21 @@ static bool cmd_check_power_mode(IDEState *s, uint8= _t cmd) /* INITIALIZE DEVICE PARAMETERS */ static bool cmd_specify(IDEState *s, uint8_t cmd) { - if (s->blk && s->drive_kind !=3D IDE_CD) { - s->heads =3D (s->select & (ATA_DEV_HS)) + 1; - s->sectors =3D s->nsector; - ide_bus_set_irq(s->bus); - } else { + if (!s->blk || s->drive_kind =3D=3D IDE_CD) { + ide_abort_command(s); + return true; + } + + /* ATA-2 D.2.8 limits IDENTIFY DEVICE word 56, and the count, to 1..25= 5 */ + if (s->nsector =3D=3D 0 || s->nsector > 255) { ide_abort_command(s); + return true; } =20 + s->heads =3D (s->select & (ATA_DEV_HS)) + 1; + s->sectors =3D s->nsector; + ide_bus_set_irq(s->bus); + return true; } =20 --=20 2.53.0 From nobody Fri Aug 21 21:27:02 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=openvz.org ARC-Seal: i=1; a=rsa-sha256; t=1787220679; cv=none; d=zohomail.com; s=zohoarc; b=UPle6dfFMi4x3NnnPxSlyWAU82dagdJ3faQxjFiIHRH1TB9qYNlpupRJ3TNwftLeHDBj4F5lhefRBFdA7TF4wPghrxi8dCzARQmON7MFN+iBD9GnEUTaW9CsGvDyPHY23WjDCct9uBUnQzPTgRIHOhi/jP8aeQy0wIo3/PQUxQM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787220679; h=Content-Type:Content-Transfer-Encoding:Cc:Cc: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; bh=G3bEotXoyZUPJjhBzMNz6MRMIWj1lqgebE/pPqEgtUU=; b=iw0dT4gjhPLYA9p5+srJacggh5/QIanYcXhf+kgnyGnAovto1YrT9ckwXCg+JaJ5oZ6St27blVOh9JNEsyk0fnRefJ0lfyCBmndCnqpxgB54ow1ZQCgbJD0nTvXTJraquXwQpWqAmoj/9CQJFzHH+bX5XOGbWzfOEDzJQ0A9oaE= 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 1787220679208184.55746955954032; Thu, 20 Aug 2026 03:11:19 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwzhq-0006ri-6Z; Thu, 20 Aug 2026 06:09:06 -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 1wwzhi-0006ny-ON for qemu-devel@nongnu.org; Thu, 20 Aug 2026 06:08:59 -0400 Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwzhe-0008JA-OK for qemu-devel@nongnu.org; Thu, 20 Aug 2026 06:08:57 -0400 Received: by mail-wr1-x431.google.com with SMTP id ffacd0b85a97d-471eeac43bfso1639982f8f.3 for ; Thu, 20 Aug 2026 03:08:54 -0700 (PDT) Received: from athena.sw.ru ([2a06:5b06:b600:300:a123:7b43:afd8:8b47]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482b1441b0fsm11678929f8f.4.2026.08.20.03.08.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Aug 2026 03:08:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1787220533; x=1787825333; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=G3bEotXoyZUPJjhBzMNz6MRMIWj1lqgebE/pPqEgtUU=; b=mpkFWUsgaZ8rki0Sl8B1N/CPc9/diQoBGTIbwXJ4Lt+3guv0XfhKm9K09+Y8VxbrGu +b3jN69z7VJ6+G4De8uDduIykGhTrvXMtHYoyT4dStsLgCQb491VsmQ6lYZdlfVgz20N QkqKi+ZXTHROHfEtz1DMibzj/GV+j7ZG0AzDgi1CPGokzGUKOKwRdA5pTfzL0mWJ+ks/ U9XM35QQMzrNT09EMeANkR4/+dITBU+U0Pv4LsONtzOtkVJtVFkTb+AojanyhgY3cUaa 4b895BOYFAqzHsLfMO8Z9t+CN/fGYJP8UZPqK3Z197wNKTFtwi/KU4pnq79x2G+Uev6E PIaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787220533; x=1787825333; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=G3bEotXoyZUPJjhBzMNz6MRMIWj1lqgebE/pPqEgtUU=; b=en1HIWyH9IfRmpaYsW2QRGZFtCOVUxJ1rpAAOqgcuRhfokvje97Pb7Ajh/friYSa/r NykvzAYamm0WEsF3rN2QJrziiQkd+wlQ41WMHIcD3CS2aqEy/uWYPlsBO8kQQg6m92xf i49HB7vgtgUUWQ7OSt0J/XIc6UaGyZ28yT/Sw5Az4L/ECnwN+uPyplhXiAkb8GZ485bK eFL8ZVGgYDgSLkfqwn5xX9XAP7E/8pe1bp6LjaqM4TfFvYmetWXG99e7y6W9NxzLuP7j DWjQLHjtr5/6DnQeIY/ErWraBMgF9Tqbv/T1qwTHc7SulpyrdiibZwM7x2jz2A5s1Idr phZQ== X-Gm-Message-State: AFuF++lJfI6NILKyInv1QTecdB4shUIy58dV6wQCPUVfu/s6JXZyHJsM Znynz9mjYsQB3Y/h0MnuVJlhLNSNunsKmHNO09VafkfYgqckOLKzhBNSJBbXnIzYgtJhX8VgynK ByQ3u X-Gm-Gg: AR+sD10JccESlrCMYSssudljNDYodO5g6dGUejAKBiMO0QDGfwZxp/FVjJeu5yxHpgT NLpVLT3wI0BsGcsIAAtFEWXLRMb/Z7enMUMD03FnVjgSSddYgxnbw43Blpl5ctUIo8l0MhrKtr3 Ba9YFOpUKsm9mE9Gc2fIMyuNveB29NovksWZuvXfnawTak3LhVa18tSP5QF1+JCpnWoS6V289ef QU7AFxb7XJXsBTEnQzhbA8n/U7elQFiuMqSdq9OyIDVzj1QViarJ0oT+uru9cYKCc0y3hypQ1SW g/IOEcIcYAUrtrahapZfZmkiuOQvlWT7TKl9+u5ipjTubn0X0/CL6GLRrNdacYaRMRDQP75Fux2 9JPvxL8phr3kojHnTV3a5CN7bn13pdugcsQy5zbd1kleFJRD3JOpCAq6xV2XH54X+0MaknSSZmz xF1OzfDW419XVVtcrZ+hZqJHUtd0tbmBMKjutz55AUtKQlro60nFGkgMCX6yS23ocig5p5 X-Received: by 2002:a05:6000:41f6:b0:47d:eedb:ee62 with SMTP id ffacd0b85a97d-482b1fd3b69mr22543004f8f.14.1787220533261; Thu, 20 Aug 2026 03:08:53 -0700 (PDT) From: "Denis V. Lunev" To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, "Denis V. Lunev" , John Snow , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v2 02/17] tests/qtest/ide-test: cover a CHS translation with zero sectors Date: Thu, 20 Aug 2026 12:08:29 +0200 Message-ID: <20260820100844.411717-3-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260820100844.411717-1-den@openvz.org> References: <20260820100844.411717-1-den@openvz.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::431; envelope-from=den@openvz.org; helo=mail-wr1-x431.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, 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 autolearn=unavailable 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 @openvz.org) X-ZM-MESSAGEID: 1787220681052158500 From: Denis V. Lunev Ask for zero sectors per logical track via INITIALIZE DEVICE PARAMETERS and check that the command is aborted, that IDENTIFY DEVICE still reports the translation that was in effect before, and that a CHS read then completes normally rather than killing QEMU with SIGFPE. Cc: John Snow Cc: Peter Maydell Cc: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Denis V. Lunev --- tests/qtest/ide-test.c | 62 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/tests/qtest/ide-test.c b/tests/qtest/ide-test.c index b36b0f8875..99aa5e039c 100644 --- a/tests/qtest/ide-test.c +++ b/tests/qtest/ide-test.c @@ -95,6 +95,7 @@ enum { =20 enum { CMD_DSM =3D 0x06, + CMD_READ =3D 0x20, /* READ SECTOR(S) */ CMD_DIAGNOSE =3D 0x90, CMD_INIT_DP =3D 0x91, /* INITIALIZE DEVICE PARAMETERS */ CMD_READ_DMA =3D 0xc8, @@ -1194,6 +1195,66 @@ static void cdrom_read_impl(int nblocks, unsigned fl= ags) free_pci_device(dev); } =20 +/* Zero sectors per track has to abort (ATA-5 8.16.6), not divide by zero = */ +static void test_specify_zero_sectors(void) +{ + QTestState *qts; + QPCIDevice *dev; + QPCIBar bmdma_bar, ide_bar; + uint16_t buf[256]; + uint8_t data; + int i; + + qts =3D ide_test_start( + "-blockdev driver=3Dfile,node-name=3Dhda,filename=3D%s " + "-device ide-hd,drive=3Dhda,bus=3Dide.0,unit=3D0 ", + tmp_path[0]); + + dev =3D get_pci_device(qts, &bmdma_bar, &ide_bar); + + qpci_io_writeb(dev, ide_bar, reg_nsectors, 0); + qpci_io_writeb(dev, ide_bar, reg_device, 0); + qpci_io_writeb(dev, ide_bar, reg_command, CMD_INIT_DP); + + assert_bit_set(qpci_io_readb(dev, ide_bar, reg_status), ERR); + assert_bit_set(qpci_io_readb(dev, ide_bar, reg_error), ABRT); + + /* The refused request has to leave the default translation in effect = */ + qpci_io_writeb(dev, ide_bar, reg_device, 0); + qpci_io_writeb(dev, ide_bar, reg_command, CMD_IDENTIFY); + for (i =3D 0; i < 256; i++) { + buf[i] =3D qpci_io_readw(dev, ide_bar, reg_data); + } + g_assert_cmpint(buf[55], =3D=3D, 16); + g_assert_cmpint(buf[56], =3D=3D, 63); + + /* READ SECTOR(S) of CHS 0/0/1, which used to crash QEMU */ + qpci_io_writeb(dev, ide_bar, reg_nsectors, 1); + qpci_io_writeb(dev, ide_bar, reg_lba_low, 1); + qpci_io_writeb(dev, ide_bar, reg_lba_middle, 0); + qpci_io_writeb(dev, ide_bar, reg_lba_high, 0); + qpci_io_writeb(dev, ide_bar, reg_device, 0); + qpci_io_writeb(dev, ide_bar, reg_command, CMD_READ); + + data =3D ide_wait_clear(qts, BSY); + assert_bit_set(data, DRQ); + assert_bit_clear(data, ERR | DF); + for (i =3D 0; i < 256; i++) { + buf[i] =3D qpci_io_readw(dev, ide_bar, reg_data); + } + assert_bit_clear(qpci_io_readb(dev, ide_bar, reg_status), ERR | DF | D= RQ); + + /* A supported translation is still accepted */ + qpci_io_writeb(dev, ide_bar, reg_nsectors, 32); + qpci_io_writeb(dev, ide_bar, reg_device, 7); + qpci_io_writeb(dev, ide_bar, reg_command, CMD_INIT_DP); + + assert_bit_clear(qpci_io_readb(dev, ide_bar, reg_status), ERR); + + ide_test_quit(qts); + free_pci_device(dev); +} + static void test_cdrom_pio(void) { cdrom_read_impl(1, CDROM_PIO); @@ -1265,6 +1326,7 @@ int main(int argc, char **argv) g_test_init(&argc, &argv, NULL); =20 qtest_add_func("/ide/read_native", test_specify); + qtest_add_func("/ide/specify/zero_sectors", test_specify_zero_sectors); =20 qtest_add_func("/ide/identify", test_identify); =20 --=20 2.53.0 From nobody Fri Aug 21 21:27:02 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=openvz.org ARC-Seal: i=1; a=rsa-sha256; t=1787220698; cv=none; d=zohomail.com; s=zohoarc; b=LYbNz9Q+Hu8oFVpJTrc1+HsD9acJnSyJdT5YQXCgEBLTrHDVnGWhwqG92enVAsLu9hh8OlHt1UMVoyPv7GThPtm+O2s5xwebxnyQmrlTscEAziRDrgZewZ1OFF8prW8uan1Sda5zdoWKRfgOdbAy4RT8vGaXFML8vOo/AHJRrh4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787220698; h=Content-Type:Content-Transfer-Encoding:Cc:Cc: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; bh=4OvjEK79iipyYsErass3i3smJBr1fz2J2WXOxSNzKOM=; b=l5suaDFbkr/4l0ptuESXxd+qBA/9BUSRcMxL2seoguEIRwhjofNSoBsnZ0ZVYIhyABK8fKYGaCRFO/6fixJfS0qI5CWTNi4ZWDr7ThjvlzpdVB6BYJDwVaiFAnqOZHxu67HfU/QuMTydVqgP00C3kThtd2sPMKbPcrinVrLBBos= 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 1787220698181756.2103327147476; Thu, 20 Aug 2026 03:11:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwzhl-0006pf-7C; Thu, 20 Aug 2026 06:09:01 -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 1wwzhi-0006nz-OQ for qemu-devel@nongnu.org; Thu, 20 Aug 2026 06:08:59 -0400 Received: from mail-wr1-x436.google.com ([2a00:1450:4864:20::436]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwzhg-0008JV-77 for qemu-devel@nongnu.org; Thu, 20 Aug 2026 06:08:57 -0400 Received: by mail-wr1-x436.google.com with SMTP id ffacd0b85a97d-476a130c138so2273399f8f.0 for ; Thu, 20 Aug 2026 03:08:55 -0700 (PDT) Received: from athena.sw.ru ([2a06:5b06:b600:300:a123:7b43:afd8:8b47]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482b1441b0fsm11678929f8f.4.2026.08.20.03.08.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Aug 2026 03:08:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1787220534; x=1787825334; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=4OvjEK79iipyYsErass3i3smJBr1fz2J2WXOxSNzKOM=; b=cmWNdYDbFq+GPijd2GB+D+QWTcvjyNSjdigt6eVmbg0cqJpdKJfNbBJUEZLtuoZ+ms jUYwEhVZmv9yzPgVD0CzqX4N0BcyvsRIR3XZxBHCTK1Llt8ZIMCtD8W24/82PLJ6lYcn fi+YAa6nOOWWx0aDcCzrCGep4OrltqLt0OIZRkuxlZT6No4D7mAOK8o8/EGUGyofNeDQ T2xUP/uJR4C8XAu1Ml9TVqUSDJYMbLEOCfnlOYU7uDkzVUpymdQ/2pnPSgnmKt9P8oC5 X4zEt3j4fOUBzwsdHWKGFvzbCE9YAzBAM/sraGZ4X4HbLyhlwb6iSG0JNHTFeL70Heg8 mCAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787220534; x=1787825334; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=4OvjEK79iipyYsErass3i3smJBr1fz2J2WXOxSNzKOM=; b=NWbmVmQW/ASHb6DIBR3HZ/2HNoDTKKLzB4IWrFY0NAgT62y7NfTtI8wZfmHS3dveS+ FoIWITBTQwYP2l1c8FV/1BxLcSpkdY2KpDnru8X/tyYBzPRFwW9j0Hw+0fiLnboV2omh ats44ZkDoTCU9NXyHHnQOFP08mXcclBdonApOl3r9olFZ2ZsfdSJqqN6YPjAdvbwMg5v bJD+sAlW0sStPzJx9pEFUr4n2T9x2nsOuS8NyYkeT53QSoh7JC3EPmuaoogvdGtgxxt7 oK/00wdE44f9xWKuCqufQ3RCGd/+TNl25hIU2WR6LrZn3HPoH15/bqvu3/OsLSN1Qji+ CRsw== X-Gm-Message-State: AFuF++megy/JrrgXpsWOFLOo5EoU6axMP9mKLfLjeJgyAiR4fk3OTJ4q eba91vTEIDLe2rGuDE87jUObhECuDbHZdpiLQ6YdK2dUVSAkxC87LXClzImMwvquOOwSUu35jpT /8wHL X-Gm-Gg: AR+sD12lPP4pKO0BGZYxbOnETkewcE5sJplL/2jHuDFnagd86777eWulyfbzR6QxKEh 1BfMuY615J+SioK9hVWM+w8oyfvZ2P2NTWlBsiKgSBMoF8koslI7zRsYuHbizNW073SXgAdbZAQ ihQEhwBcaVISjSIIIrYbj967c2aPnb0YuJuJlTNkmkM6qnPUgZvEs8eidT0COJ30kBlRLKyLr61 nY6KzF4+/cguyr/24EXeYMUHaqR2vrxUz6oIW8Cxi/84dMV5/O1pxTt6pCk34850jrXHc2VSIu9 WaeiM160K+dTgfK+mRYyWLCRduoYOqRlTsou6Fib0YZVQq/cS3rR9Dtu11oTtO+uSQm7f9gmYhA ZAV7uht1rmINI4SYzZvZELHZBbAnEPJct2Jhu7kNHbp97mHi+hetfe4+AyzNQ3GTm1VYzoFqMqJ O9VUcxJtQ2a5Uwvd20Mn3YaqBsPBXSMA6ufC46S1o8ohFY/1/j1m48ChbDUQ== X-Received: by 2002:a05:6000:41da:b0:47f:9557:8d77 with SMTP id ffacd0b85a97d-482b1e94d3emr21805108f8f.10.1787220534560; Thu, 20 Aug 2026 03:08:54 -0700 (PDT) From: "Denis V. Lunev" To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, "Denis V. Lunev" , John Snow , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v2 03/17] tests/qtest/libqos/ahci: allow a count and an expected error Date: Thu, 20 Aug 2026 12:08:30 +0200 Message-ID: <20260820100844.411717-4-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260820100844.411717-1-den@openvz.org> References: <20260820100844.411717-1-den@openvz.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::436; envelope-from=den@openvz.org; helo=mail-wr1-x436.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, 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 autolearn=unavailable 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 @openvz.org) X-ZM-MESSAGEID: 1787220699301158500 From: Denis V. Lunev A command that transfers no data can still take an argument in the count register of the register FIS, and a test may well expect such a command to be aborted. AHCICommand is private to the library, so add two setters: ahci_command_set_count() writes the count of a non-data command, and ahci_command_expect_error() records the error register bits the command is expected to complete with, which is what ahci_atapi_test_ready() does inline for a sense key today. INITIALIZE DEVICE PARAMETERS is the first user of both, so describe it in the command properties table as well. Cc: John Snow Cc: Peter Maydell Cc: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Denis V. Lunev --- tests/qtest/libqos/ahci.c | 14 ++++++++++++++ tests/qtest/libqos/ahci.h | 6 ++++++ 2 files changed, 20 insertions(+) diff --git a/tests/qtest/libqos/ahci.c b/tests/qtest/libqos/ahci.c index e3019a1eca..50b63239c2 100644 --- a/tests/qtest/libqos/ahci.c +++ b/tests/qtest/libqos/ahci.c @@ -74,6 +74,7 @@ AHCICommandProp ahci_command_properties[] =3D { { .cmd =3D CMD_READ_MAX, .lba28 =3D true }, { .cmd =3D CMD_READ_MAX_EXT, .lba48 =3D true }, { .cmd =3D CMD_FLUSH_CACHE, .data =3D false }, + { .cmd =3D CMD_INIT_DP, .data =3D false }, { .cmd =3D CMD_PACKET, .data =3D true, .size =3D 16, .atapi =3D true, .pio =3D true }, { .cmd =3D CMD_PACKET_ID, .data =3D true, .pio =3D true, @@ -1180,6 +1181,19 @@ void ahci_command_set_prd_size(AHCICommand *cmd, uns= igned prd_size) ahci_command_set_sizes(cmd, cmd->xbytes, prd_size); } =20 +/* For a no-data command, whose count carries an argument of its own */ +void ahci_command_set_count(AHCICommand *cmd, uint16_t count) +{ + g_assert(!cmd->props->data); + cmd->fis.count =3D count; +} + +void ahci_command_expect_error(AHCICommand *cmd, uint8_t err) +{ + cmd->interrupts |=3D AHCI_PX_IS_TFES; + cmd->errors |=3D err; +} + void ahci_command_adjust(AHCICommand *cmd, uint64_t offset, uint64_t buffe= r, uint64_t xbytes, unsigned prd_size) { diff --git a/tests/qtest/libqos/ahci.h b/tests/qtest/libqos/ahci.h index 2a48a7523d..6d861c79ee 100644 --- a/tests/qtest/libqos/ahci.h +++ b/tests/qtest/libqos/ahci.h @@ -278,6 +278,7 @@ enum { CMD_READ_MAX =3D 0xF8, CMD_READ_MAX_EXT =3D 0x27, CMD_FLUSH_CACHE =3D 0xE7, + CMD_INIT_DP =3D 0x91, /* INITIALIZE DEVICE PARAMETERS */ CMD_IDENTIFY =3D 0xEC, CMD_PACKET =3D 0xA0, CMD_PACKET_ID =3D 0xA1, @@ -324,6 +325,9 @@ enum { #define ATA_DEVICE_DRIVE 0x10 #define ATA_DEVICE_HEAD 0x0F =20 +/* ATA error register bits */ +#define ATA_ERR_ABRT 0x04 + /*** Structures ***/ =20 typedef struct AHCIPortQState { @@ -638,6 +642,8 @@ void ahci_command_set_size(AHCICommand *cmd, uint64_t x= bytes); void ahci_command_set_prd_size(AHCICommand *cmd, unsigned prd_size); void ahci_command_set_sizes(AHCICommand *cmd, uint64_t xbytes, unsigned prd_size); +void ahci_command_set_count(AHCICommand *cmd, uint16_t count); +void ahci_command_expect_error(AHCICommand *cmd, uint8_t err); void ahci_command_set_acmd(AHCICommand *cmd, void *acmd); void ahci_command_enable_atapi_dma(AHCICommand *cmd); void ahci_command_adjust(AHCICommand *cmd, uint64_t lba_sect, uint64_t gbu= ffer, --=20 2.53.0 From nobody Fri Aug 21 21:27:02 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=openvz.org ARC-Seal: i=1; a=rsa-sha256; t=1787220658; cv=none; d=zohomail.com; s=zohoarc; b=bd19/EDJ4DvbfHlF9+X1av4w5KM/aIMCZG7Pp5Jdb165p3a0vCrZrrQt8RT1ZSLGxtV7uiPyz01ghdm6XvXfq7nP5XmFfOzJLgd8THh8QWK8w89kSHwulzfx15HKpcl1Z+4T2zswKUnb47CuKhfNNyEC+YmXdF74f+kOL1+BIiQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787220658; h=Content-Type:Content-Transfer-Encoding:Cc:Cc: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; bh=YFE/K/4vNyqzMwiTk1xBUvuX5IsKmMx8aQ0HWwkIsCk=; b=S7y+7Ijv91tQ6jXVQCSTko73L9qg04D5xMqKn8bZpC1ktAHM8Y9UnI2qX+lM+KsJFZKCAVCsYEbpEAyIZTa+6OSY0pz5bQXt5yVUVSOc1kMO2xb/4qa4wpMiY20yRdToHcc80WzspytvDHGtZ+5ljGO2Y1Cxxz9HAwk0yYI2YaU= 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 1787220658809197.6794152029711; Thu, 20 Aug 2026 03:10:58 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwzhr-0006tG-CX; Thu, 20 Aug 2026 06:09:07 -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 1wwzhk-0006od-53 for qemu-devel@nongnu.org; Thu, 20 Aug 2026 06:09:00 -0400 Received: from mail-wr1-x42a.google.com ([2a00:1450:4864:20::42a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwzhh-0008K7-LP for qemu-devel@nongnu.org; Thu, 20 Aug 2026 06:08:59 -0400 Received: by mail-wr1-x42a.google.com with SMTP id ffacd0b85a97d-4799b3f7c83so1397877f8f.2 for ; Thu, 20 Aug 2026 03:08:57 -0700 (PDT) Received: from athena.sw.ru ([2a06:5b06:b600:300:a123:7b43:afd8:8b47]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482b1441b0fsm11678929f8f.4.2026.08.20.03.08.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Aug 2026 03:08:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1787220536; x=1787825336; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=YFE/K/4vNyqzMwiTk1xBUvuX5IsKmMx8aQ0HWwkIsCk=; b=srlAXIen+m5G8S1ieKG+avjEfmC5DaMsg+oM7ajDBNhJUHiELaNGvs+QtTpVCa/3ft 91v0ud6cMcz/YbdmoCQTri3o2p4pG7CbJyCwOgesRVr5gfMbFp4dlZtdRaueLlctTFS9 ylnL5+/JU9Gm1E34nv/ARlCGDWRCs/WSdO89OKZb9BVThE1c10LU8+QZxUZDswOOeuLf QuyPvc8y6SvPxFndfuzbkJyPVtTrUbF/dSxEGyrSwX501dIc6Sj0rIYx76NM6TFhhuUC dRu7qW7lIc6GCYVkjZROg3w4QBdgt6PkhbRyBVYuXPw9fyNELCOHcxHEsR3vsYr/S/aL HvKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787220536; x=1787825336; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=YFE/K/4vNyqzMwiTk1xBUvuX5IsKmMx8aQ0HWwkIsCk=; b=Ye+JyRjtnnJ0+CaA40Rq3/LyOmFKSO1BxbelSVtPA74LCaLpUeqfhRHrGAdiJ42Tj2 silBOp5PF2Mp5sTjgAUB1hnHvoYZQ4nxuCbGZoM4KgCxQCtYW98bNbCIH7yg3QqhZVuX ZrPomrIIJ1b1A5+cn3mD31LNXgH16n3SIUcPkaKLkczHRyxpn9vOc7ePLNM0cHVnc6NO eHQezowsgPK1zYPJ8Oc2o6BpHzn5rENw85Qw3JxjWJ9Wr5zlctxO1VuRd5MxYfXMG15P xKw+3ykOiyKQU4GuDtma57MM8gXPe+ndayN7Yjq2CbB2QKsLPH8NLsF2/4Ish9qIZz1U Rk0w== X-Gm-Message-State: AFuF++kTXmJvj0OI5eeNfs49GqNhogVEJ4DK71BGmWETRigP4WYqRJlt Udq+NdQfESBzi6IIKUDQQNZmn1QjeXY5zoGnJsg/rEYo64gy6rVFwGJ0uw7nEIlMKR+2s7ACMKa M/4aZ X-Gm-Gg: AR+sD12sApqETts02fKGxv7HaupfGT0m0hra99AXA4nVvnz6ynwmpcPIfecOyyTF4fJ qsqxEmDgePoXEINFVxqYS4QZEMJtTmiOsdRDM+lMPyveCOPONvgAcEmWH9mvMMUOq7zUL4GHxHy mCf4CbFtBB5iPPpc9Fw4wqF5qzauPV1ekWOqr8OJvhY049cfnMiWX7Yop/56JheD0r4z4vnUgKk N/bYYt3EwL+vSp9NsP+ljT61DoCsiXQiXsXXwyC+/EocPJWqmOtq1tD6bvl/ovIMiHD11zgp2oQ 0TjleXBeeT5gtP4CowhPwnkFn9/YfuJ6vvt8xjqsQqOhzTs3MrV73ZS2pve67IHYUTmNeQjLAwx Sc+GoE72r7yv6bS90cWKVQmtouFqQ7tuMLZvv7O2MRwb+u1nVGqNktEfZkbfGZYSpoCk6aXEom3 UmwmyAnMgw9xvvStZ2YuvGiSU1uActN4oogbE5sztXDCgElLnhWi6gYEKRVw== X-Received: by 2002:a5d:5c83:0:b0:47f:ec8a:214f with SMTP id ffacd0b85a97d-482b1fd4d2amr20898822f8f.15.1787220536145; Thu, 20 Aug 2026 03:08:56 -0700 (PDT) From: "Denis V. Lunev" To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, "Denis V. Lunev" , John Snow , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v2 04/17] tests/qtest/ahci: cover the sector count of INITIALIZE DEVICE PARAMETERS Date: Thu, 20 Aug 2026 12:08:31 +0200 Message-ID: <20260820100844.411717-5-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260820100844.411717-1-den@openvz.org> References: <20260820100844.411717-1-den@openvz.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::42a; envelope-from=den@openvz.org; helo=mail-wr1-x42a.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, 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 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 @openvz.org) X-ZM-MESSAGEID: 1787220661051158500 From: Denis V. Lunev The sector count register of a legacy port is eight bits wide, so ide-test can only reach the lower end of the range the command has to refuse. A register FIS carries a 16 bit count, which leaves AHCI as the only way to ask for a translation of 256 sectors per logical track or more. Ask for 0, 256 and 65535 sectors and expect each to be aborted, then ask for 32 and expect it to be accepted, so that the check cannot pass by refusing everything. Cc: John Snow Cc: Peter Maydell Cc: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Denis V. Lunev --- tests/qtest/ahci-test.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/tests/qtest/ahci-test.c b/tests/qtest/ahci-test.c index 71d23fe56a..30d7005626 100644 --- a/tests/qtest/ahci-test.c +++ b/tests/qtest/ahci-test.c @@ -905,6 +905,30 @@ static void ahci_test_flush(AHCIQState *ahci) ahci_test_nondata(ahci, CMD_FLUSH_CACHE); } =20 +static void ahci_test_specify(AHCIQState *ahci, uint16_t sectors, + bool supported) +{ + AHCICommand *cmd; + uint8_t port; + + port =3D ahci_port_select(ahci); + ahci_port_clear(ahci, port); + + cmd =3D ahci_command_create(CMD_INIT_DP); + ahci_command_set_count(cmd, sectors); + if (!supported) { + ahci_command_expect_error(cmd, ATA_ERR_ABRT); + } + ahci_command_commit(ahci, cmd, port); + ahci_command_issue(ahci, cmd); + if (!supported) { + ASSERT_BIT_SET(ahci_px_rreg(ahci, port, AHCI_PX_TFD), + AHCI_PX_TFD_STS_ERR); + } + ahci_command_verify(ahci, cmd); + ahci_command_free(cmd); +} + static void ahci_test_max(AHCIQState *ahci) { RegD2HFIS *d2h =3D g_malloc0(0x20); @@ -1012,6 +1036,21 @@ static void test_identify(void) ahci_shutdown(ahci); } =20 +static void test_specify(void) +{ + AHCIQState *ahci; + + ahci =3D ahci_boot_and_enable(NULL); + + /* A register FIS carries 16 bits of count, the legacy ports only eigh= t */ + ahci_test_specify(ahci, 0, false); + ahci_test_specify(ahci, 256, false); + ahci_test_specify(ahci, 0xffff, false); + ahci_test_specify(ahci, 32, true); + + ahci_shutdown(ahci); +} + /** * Fragmented DMA test: Perform a standard 4K DMA read/write * test, but make sure the physical regions are fragmented to @@ -2220,6 +2259,7 @@ int main(int argc, char **argv) qtest_add_func("/ahci/migrate/dma/halted", test_migrate_halted_dma); =20 qtest_add_func("/ahci/max", test_max); + qtest_add_func("/ahci/specify", test_specify); qtest_add_func("/ahci/reset/simple", test_reset); qtest_add_func("/ahci/reset/pending_callback", test_reset_pending_call= back); =20 --=20 2.53.0 From nobody Fri Aug 21 21:27:02 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=openvz.org ARC-Seal: i=1; a=rsa-sha256; t=1787220755; cv=none; d=zohomail.com; s=zohoarc; b=DQXWngoKW47RBKtWvEgfEc1RgWKe0wTcucZAGuFSVbA15VKlRCLg4mu/UBNZhhcl55IBaQXtHuToAPtps3lpFB0OzBkiWb370kMQYu/Zh3uXuJlBkksi329zeBYT9SDofUmyCrWHppQryM/aZPwl1L7eKsM3E8ZoleyZyjw3EKg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787220755; h=Content-Type:Content-Transfer-Encoding:Cc:Cc: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; bh=5m9uheqn5F5pEee9Tp/EbVvueEOqVOsxBiATdriU+vo=; b=eWirD2kYXbVTuvqOCNtFGC/ZbzL+PwxXuPKSondcn0geh65sznrjBXs2MqaRMGNDZmR3+Rk3Nz1cyf7r/G9cwdl2k8w08UmKBl5ItVZuHGxvXOikMaEMt3DED/H/NrveuRq3TXoTiFMKYrhHxDYj74QS1CytXuYzuTA6w/cPpVc= 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 1787220755651410.0822091230456; Thu, 20 Aug 2026 03:12:35 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwzhu-0006uV-8t; Thu, 20 Aug 2026 06:09:10 -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 1wwzhl-0006pm-Kg for qemu-devel@nongnu.org; Thu, 20 Aug 2026 06:09:02 -0400 Received: from mail-wm1-x335.google.com ([2a00:1450:4864:20::335]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwzhj-0008Kt-Gt for qemu-devel@nongnu.org; Thu, 20 Aug 2026 06:09:01 -0400 Received: by mail-wm1-x335.google.com with SMTP id 5b1f17b1804b1-4954df200ddso16037005e9.0 for ; Thu, 20 Aug 2026 03:08:58 -0700 (PDT) Received: from athena.sw.ru ([2a06:5b06:b600:300:a123:7b43:afd8:8b47]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482b1441b0fsm11678929f8f.4.2026.08.20.03.08.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Aug 2026 03:08:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1787220538; x=1787825338; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=5m9uheqn5F5pEee9Tp/EbVvueEOqVOsxBiATdriU+vo=; b=jDArqZD84KJf/T8B64HqodvjHAHHeXyo/syTDSI966J2ewgmjpQh3euHIHGXdWf767 4zG1210twm8cp++LUmt1+RLx6Vya+IztWSav7KeeYxy72Xnw7H6QX6TBxUjYQOz07dYu wf3kl6TZbGHDfvtu4UwjorROWv6skQQX05gIJyDY38fdkBqfEP8o+Qm8lO/f4zACNP14 sUU/LsXLZURyUkIApwsylZ6CmtYJ3hIVNLnBqfGMNQCEAo561uRAy7ksfxOBQk65u1il n7wksN2MENJdJtbVRRAciJZGlj+L2WqjL2pfZXpLH7wfwlp+tWlAn3JfV2knaZ3bmw0Y O4fw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787220538; x=1787825338; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=5m9uheqn5F5pEee9Tp/EbVvueEOqVOsxBiATdriU+vo=; b=MxCxGOZjLxvJzuLrhu4O6be9U7fcuFZESaQuCzVIu17CmS/8HwvQaztXhnbxvVkYKc 4watFn2GtvORqgyup+yCZujWsrUsaPOJ/3h52xzs5p2I5XXeS4cAnG13epnca+yVQLGK vutVFJ72nu5PYTrY3NRjGVy+73shZ92IFgEG13USrnlF5s9C4LFTwUNP43x6tjLNOw0J t6YJ06DUFD3DNoSrxKYdHck9P+6iMEr/sw/WIQEIIqwxSkokG6swWxwkfn67JuMvVFw2 H5QBgt3aekaz0Dw++/eCmzTiC4Exz2IIuw/HJff9eaPYudiR+c4LKeedFL0kcQoQ+8B9 91Ug== X-Gm-Message-State: AOJu0YzUz7d5xtsV4HuI7s9BA8Yl7QgqoNuzgHz2Y/tKCz2SWiWPC3+F OVBOW+hzElO/nN+vjoEaER9XyZa90kr3+RkRQcVCGC6NBcY6C08HV8HUj9e8WGnB/fGJeJL9V2m 7S1+N X-Gm-Gg: AR+sD11EL3q4LbEiAqHDn8bR+/1f3i3xO8XyJI3bCODuWkIrCVxIm9FdNwQjuVBxBVH NDAgtuy49Tlv53fnynGOz1QrBx7MlmW2jgeTMf/hWnjsasap5c+p596xeXGU0rQHsV2L7o5rGR+ rtZ496PUTG295Ty9ROePDu/Jry5uMVXIDswWUI5Vt/1BVL2N+WpnRhR1IfuGb0qFXXdxLFWf/qo S6TjvMsKWDLZivIBEQ20LsMWeWe/IqlDzjUJinxVfqm3jeU5bcC+94xciul2xHrQhQMNvGwY4nF mXUnvah1LlYiUJgztIWjeQdnb6vTr040lK0fiAY4ng5W/BUNamY7dlxE+ztjifF6t/SV20gwL36 XlopI4QPiQbKltQhCtJs3/4HTSEl77hMjY6Ao/yvvu1DSArrWLX/zS4Rwi268qJ4RdrAmJT8CHo bhIniRpP0Vi8JLJsDhwWY1MeXaLv1DedxcC0ItquYWjLfZCI4ICzhq1OurQg== X-Received: by 2002:a05:600c:46cb:b0:499:781e:25fc with SMTP id 5b1f17b1804b1-499aa17d75bmr162099335e9.3.1787220537682; Thu, 20 Aug 2026 03:08:57 -0700 (PDT) From: "Denis V. Lunev" To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, "Denis V. Lunev" , John Snow , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , qemu-stable@nongnu.org Subject: [PATCH v2 05/17] hw/ide: report the default CHS translation in IDENTIFY DEVICE Date: Thu, 20 Aug 2026 12:08:32 +0200 Message-ID: <20260820100844.411717-6-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260820100844.411717-1-den@openvz.org> References: <20260820100844.411717-1-den@openvz.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::335; envelope-from=den@openvz.org; helo=mail-wm1-x335.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, 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 autolearn=unavailable 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 @openvz.org) X-ZM-MESSAGEID: 1787220757428158500 From: Denis V. Lunev IDENTIFY DEVICE words 1, 3 and 6 describe the default CHS translation, and ATA-5 8.16.8 requires INITIALIZE DEVICE PARAMETERS to leave them alone; the translation in effect is described by words 54 to 56 instead. Words 3 and 6 were filled from s->heads and s->sectors, which the command replaces, so a guest that selected a translation of its own was told that its choice was what the drive came with, and could no longer find out the default. Word 1 is already right, as no command changes s->cylinders. Report s->drive_heads and s->drive_sectors, which ide_init_drive() keeps for exactly this, along with the retired word 4 derived from them. The CompactFlash data labels those words as the default geometry too, and INITIALIZE DEVICE PARAMETERS is accepted for CFA drives, so fix both. Cc: John Snow Cc: Peter Maydell Cc: Philippe Mathieu-Daud=C3=A9 Cc: qemu-stable@nongnu.org Fixes: 176e4961bb33 ("hw/ide/core.c: Implement ATA INITIALIZE_DEVICE_PARAME= TERS command") Signed-off-by: Denis V. Lunev Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/ide/core.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/hw/ide/core.c b/hw/ide/core.c index 747fa71677..befbab9486 100644 --- a/hw/ide/core.c +++ b/hw/ide/core.c @@ -138,11 +138,12 @@ static void ide_identify(IDEState *s) memset(p, 0, sizeof(s->identify_data)); =20 put_le16(p + 0, 0x0040); + /* Words 1, 3 and 6 describe the default translation (ATA-5 8.16.8) */ put_le16(p + 1, s->cylinders); - put_le16(p + 3, s->heads); - put_le16(p + 4, 512 * s->sectors); /* XXX: retired, remove ? */ + put_le16(p + 3, s->drive_heads); + put_le16(p + 4, 512 * s->drive_sectors); /* XXX: retired, remove ? */ put_le16(p + 5, 512); /* XXX: retired, remove ? */ - put_le16(p + 6, s->sectors); + put_le16(p + 6, s->drive_sectors); padstr((char *)(p + 10), s->drive_serial_str, 20); /* serial number */ put_le16(p + 20, 3); /* XXX: retired, remove ? */ put_le16(p + 21, 512); /* cache size in sectors */ @@ -332,8 +333,8 @@ static void ide_cfata_identify(IDEState *s) =20 put_le16(p + 0, 0x848a); /* CF Storage Card signatu= re */ put_le16(p + 1, s->cylinders); /* Default cylinders */ - put_le16(p + 3, s->heads); /* Default heads */ - put_le16(p + 6, s->sectors); /* Default sectors per tra= ck */ + put_le16(p + 3, s->drive_heads); /* Default heads */ + put_le16(p + 6, s->drive_sectors); /* Default sectors per tra= ck */ /* *(p + 7) :=3D nb_sectors >> 16 -- see ide_cfata_identify_size */ /* *(p + 8) :=3D nb_sectors -- see ide_cfata_identify_size */ padstr((char *)(p + 10), s->drive_serial_str, 20); /* serial number */ --=20 2.53.0 From nobody Fri Aug 21 21:27:02 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=openvz.org ARC-Seal: i=1; a=rsa-sha256; t=1787220632; cv=none; d=zohomail.com; s=zohoarc; b=f8pE1v6ecJXfkN/lx/8xSI+GmH7DIc9fszDZZ6EmamdlLV4ICrKLFs3YADNV346KFXrkVConu+quq4S/Ro2YHvip58pfu1EnT2k249plpBjpNP3U2Cwds5Z8F79xkTB3d0xSZlpyMtzeKcDrNkVsPjw1eLg4BdCBvYfH7+daXj0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787220632; h=Content-Type:Content-Transfer-Encoding:Cc:Cc: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; bh=PGxOxbJCTHpjzoR3+U5OxJn0dZ4GKFvitmqy32ujxR0=; b=W35wyxB1NoAjPQBj/i5QlmacE6r1CtuFdIpUKrelskc3OqMNWP9QjKj2k1JwIE/2ggmV9hL72VhuzCuEyBoybNRMnTJlfuAKenF1CUI0tXw9dnGl54eIhGqchD+Smvpmu2rJZvzkX7IIuIhyNihuBln2PK4bsoJvA9rgx1HsxWM= 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 1787220632014552.781648875702; Thu, 20 Aug 2026 03:10:32 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwzi6-0006xn-QF; Thu, 20 Aug 2026 06:09:25 -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 1wwzhn-0006pz-3z for qemu-devel@nongnu.org; Thu, 20 Aug 2026 06:09:03 -0400 Received: from mail-wr1-x42e.google.com ([2a00:1450:4864:20::42e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwzhl-0008Lx-9V for qemu-devel@nongnu.org; Thu, 20 Aug 2026 06:09:02 -0400 Received: by mail-wr1-x42e.google.com with SMTP id ffacd0b85a97d-480001972b8so742129f8f.2 for ; Thu, 20 Aug 2026 03:09:00 -0700 (PDT) Received: from athena.sw.ru ([2a06:5b06:b600:300:a123:7b43:afd8:8b47]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482b1441b0fsm11678929f8f.4.2026.08.20.03.08.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Aug 2026 03:08:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1787220539; x=1787825339; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=PGxOxbJCTHpjzoR3+U5OxJn0dZ4GKFvitmqy32ujxR0=; b=eoY5GgFtL85JNpX1SGZaYBeWKn0JVUjnUu6P3GRhud/UUIQPervRRKslkfivK0na+f wNp0uAXXq1rPtiVWrNcFAp1CWv3Lqt6/VG7nPAlhxAXspdSGGlEoMkbwrTzfewzHtsUA bpdh6wSjWMLWBs2ZAGlqqO43olm1el9HD9VN6wGSKy2wWKIsTRIs1MnLyGhd3LHLunJa 6gxzUH+gid3QbVZhBmAzxp+jJ1LfoTBoiMrshYrvK57zjZRvrlH6ItYzPTZbPD/YxL86 4x6FGBqf+9RlEqoZSB7Y3M4yCAn6wFbDK1NTcTWwBkfz86qkHxTq6t3g6IAtyY60CWKf 0L/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787220539; x=1787825339; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=PGxOxbJCTHpjzoR3+U5OxJn0dZ4GKFvitmqy32ujxR0=; b=Wgm6kaF7F4nSK3UT6WRhw4FAmpnwa9STKVwa1zgU6PsOXr4+YODemmim58eeZuHiUC vWgWlUf9VxZWM150vzTVDa+BBoQtrwoEDZAigMJogruteS2S8LSNyZnk4Gf7Mtxb0VaQ bN9CDCzokVF/oDLGzzBGKdf2nm7c+tnMgiFz3LHa2kzbIZZeYVb6yyxM/fd+cgDuRt/U 9GUs9ZXmjicVopu4AATagnkRgz9IYKp7HyEQ7ZCqW0utR4sBTF0afedeKdl3m/4NnBTq clVwcx8zKOrXDJTDehWOo7golrH3LuvvwRGVeCo1m4KI2KMzVvIKKU/FqLU5asFSC+OH tNjw== X-Gm-Message-State: AFuF++kfPb8S1Ze49fgD4M6epmujNp8QUe1UCZJtoIoynSU52+se+tQ9 5cFTs77PXY5MdBZqsMlfQDdoL9bL5jWFqesNF/y6rD1nPosQPdGAv8AcrjxlEP8qhW6jl/RlXIu bijni X-Gm-Gg: AR+sD13VVDE2PUhMnwSDVUOJsU0zatvs0wGiRqorEpP9uiQvYJD+8gPuxpFbY+Or6TA okxwr3FSgSmfnC3pLFHJitevWXK8EPfjchXnYujNjFhffkgkoEjFi55zEz09zG702ZmNTdm0BOz a6UYRE7jdgSczA7ZRN0mkcLgEsSgJ46+jbsFMSUxM7aDhN2Sl+qSL8KA+QGw7UsI5qvRpTozd7F p3eu8ctoW4lLQ2cUX+I4hdhQ4L13Kke5zYT3YnbtuiPsaIS/N8gAcTopsDrbo8nvnqwkvLM7vzO ZI00MZP0tJ5DcQWW9ONS3vLGhHRt6ndHUI2F2ZH3K0cqDJOV//KMoW3f9B8PjE9aY7sltqAMvOu 8ACPz8vyqTTIE0fDOfx/OhJVPV8k/f+7MRodVQlQAVoG8Y4nqblvv+i5urpL6MLVqHJuQ+hzR2w xoef/2w4gbR4KPcAy83xhBU5yY+dFZl0aGYJ71xuVP5hM/6CPcVZd9l+Lv3g== X-Received: by 2002:a5d:5f95:0:b0:481:4dcd:aefa with SMTP id ffacd0b85a97d-482b1e95522mr16472987f8f.6.1787220539574; Thu, 20 Aug 2026 03:08:59 -0700 (PDT) From: "Denis V. Lunev" To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, "Denis V. Lunev" , John Snow , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v2 06/17] hw/ide: name the retired IDENTIFY DEVICE words the device fills in Date: Thu, 20 Aug 2026 12:08:33 +0200 Message-ID: <20260820100844.411717-7-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260820100844.411717-1-den@openvz.org> References: <20260820100844.411717-1-den@openvz.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::42e; envelope-from=den@openvz.org; helo=mail-wr1-x42e.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, 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 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 @openvz.org) X-ZM-MESSAGEID: 1787220632969158500 From: Denis V. Lunev Words 4, 5 and 20 have carried an "XXX: retired, remove ?" since the device was written, and word 21 is labelled a cache size when it is a buffer size. ATA-4 8.12.13 retired words 4 and 5, 8.12.17 retired words 20 and 21, and ATA-5 keeps all four that way. Retired is not a reason to drop them. ATA-5 3.2.3.6 says a retired word that is still used shall have "the meaning or functionality as described in previous standards", and that is what these carry: ATA-1 9.9.3, 9.9.4 and 9.9.7 define the unformatted bytes per track and per sector and the buffer type, and the ATA-1 IDENTIFY table gives word 21 as the buffer size in 512 byte increments. Software old enough to read them gets what it expects, so answer the question rather than leave it open. Word 22 is obsolete rather than retired (ATA-4 8.12.18) and already carries its ATA-1 9.9.8 name, so leave it alone. Cc: John Snow Cc: Peter Maydell Cc: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Denis V. Lunev --- hw/ide/core.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hw/ide/core.c b/hw/ide/core.c index befbab9486..292908fb1c 100644 --- a/hw/ide/core.c +++ b/hw/ide/core.c @@ -141,12 +141,12 @@ static void ide_identify(IDEState *s) /* Words 1, 3 and 6 describe the default translation (ATA-5 8.16.8) */ put_le16(p + 1, s->cylinders); put_le16(p + 3, s->drive_heads); - put_le16(p + 4, 512 * s->drive_sectors); /* XXX: retired, remove ? */ - put_le16(p + 5, 512); /* XXX: retired, remove ? */ + put_le16(p + 4, 512 * s->drive_sectors); /* ATA-1 unformatted bytes/tr= k */ + put_le16(p + 5, 512); /* ATA-1 unformatted bytes per sector */ put_le16(p + 6, s->drive_sectors); padstr((char *)(p + 10), s->drive_serial_str, 20); /* serial number */ - put_le16(p + 20, 3); /* XXX: retired, remove ? */ - put_le16(p + 21, 512); /* cache size in sectors */ + put_le16(p + 20, 3); /* ATA-1 buffer type: dual ported, read caching */ + put_le16(p + 21, 512); /* ATA-1 buffer size in 512 byte increments */ put_le16(p + 22, 4); /* ecc bytes */ padstr((char *)(p + 23), s->version, 8); /* firmware version */ padstr((char *)(p + 27), s->drive_model_str, 40); /* model */ --=20 2.53.0 From nobody Fri Aug 21 21:27:02 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=openvz.org ARC-Seal: i=1; a=rsa-sha256; t=1787220758; cv=none; d=zohomail.com; s=zohoarc; b=CxYzbDsq5ayKifItzgY8ISGYfPe1gVt7BlbJGea86YJn5887zExH1hp6dcoaZEzGHYEuoUIaxnizMLlnpdKkKt07N8KULTIoskuu+NeJ7U9uVMWSeM9Gy56+xCkC0eY0nu5Y2pSVBaZc99MfWLFRDozUmstRNwaollaUawvDdCo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787220758; h=Content-Type:Content-Transfer-Encoding:Cc:Cc: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; bh=QChQ+CxzTsz1lHSirgNALaNLeAgh/SinPCaywT1bKt8=; b=CFPFaKpb/9D/vVdr4wXabxXlEDowSFu0ZdPsi5u2pU9eKfI481CTEciYa9QGYpE77jtcYdJpwFCFfiXjVylARwMJQC7boot1gmNIpCzjMu8kqFdXTjAmvfVPe89HRtwwP/e4UVZo9fff85WJMa81Ywwif8SYNNoeKr5hK5UrfGI= 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 17872207583781013.0568817467047; Thu, 20 Aug 2026 03:12:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwzhu-0006tq-3e; Thu, 20 Aug 2026 06:09:10 -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 1wwzho-0006rL-O9 for qemu-devel@nongnu.org; Thu, 20 Aug 2026 06:09:04 -0400 Received: from mail-wr1-x433.google.com ([2a00:1450:4864:20::433]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwzhm-0008MU-RU for qemu-devel@nongnu.org; Thu, 20 Aug 2026 06:09:04 -0400 Received: by mail-wr1-x433.google.com with SMTP id ffacd0b85a97d-480033bdcf4so1263856f8f.2 for ; Thu, 20 Aug 2026 03:09:02 -0700 (PDT) Received: from athena.sw.ru ([2a06:5b06:b600:300:a123:7b43:afd8:8b47]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482b1441b0fsm11678929f8f.4.2026.08.20.03.08.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Aug 2026 03:09:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1787220541; x=1787825341; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=QChQ+CxzTsz1lHSirgNALaNLeAgh/SinPCaywT1bKt8=; b=H7vuxUuBHAQ7PtsRk5gbi9LHNVcebOYYS3k5HKnWYzfjTRJu2WDuB4HgIhZNXkYR9b pzFt32NCwUUj8iv/RURTR6FhriThw3X5qqyZr80gcl+6HINQA617bZ+zmeFSECoQ191j RuaPm8tmLap6r8onl91jIjKfIYeYyKzr5SQ1TwpxRP2CgilZ9nfze6Up6vLPP1nY2aJy P28nj43PugMgM22VbLkApgHzRpe3Rhut9DtUnI7NNc73dQEXRcUFIAQ/S9h/kT3EQfQI 1psTwHunR6ZIBpNW8gNQu8nFygODZVO1pH+HxE72OuStqASXD6SvvV6OFOzl42EV0wnU N0gA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787220541; x=1787825341; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=QChQ+CxzTsz1lHSirgNALaNLeAgh/SinPCaywT1bKt8=; b=k/cyNDEQ4P++VGab/xAqZesQ1vh7URMW5HUF3ZsxO1pdgKxd6pCYVzh1woEtBMdyz5 9PHjKmsuROgjj/83U8KESo2Lb6cs9kE3/fq6//wiBpd8Fq+oNmHmjQaA6ISU71Y604Sq gNcHJi9/p6pGk2OHz7zXcDseolWUNgA+9iQhTOcD9GoTFVC8EtxiHIi5EuMAstuCb9aP 18rScfcXBHzN4Fvw73+HFIrC5x70a+7umimUEz2oGZRjplnYDeIjNSnGXaCUdoNO99sa aqCbGK81lDJ3uHZ5WICOtQZ9YyT2sUSuoz2qf3/IodZRL4m/fgTUePmRJksvDIbLe70d YqfQ== X-Gm-Message-State: AFuF++mLdfSHWIZmFzmtNWrC9EXdLP91ZeaJYXZkx71PTl69kviOscZt Vxm2WXTTngZHv52fiRYw6zlvrKd3TbUiHW4WhxfZ11ab9QW7LFWedD6NGVlpjrfd4ur9n1Dc1wG CjgDV X-Gm-Gg: AR+sD11kkYDslQD7+O5GFxZwqtdpBAMVhCTm5VHoegCH2b4mQyWt7DUkQLNfLYMYJuf uZz8akanmYEseDkySq8+icwZazJxSi431gZ2p5j2e2fFyT9KcQJRy7GrPFUeQF2733soP8qv7C+ TTZBdXJf55rxBCx/xE36zl8lQVkAqNhwmogWNPRzDV5z5kOhVQQCUWxhv3oaInqw0xXmpjJJfs+ rEHPo8iof+qjtKBhVfv7/WE+FHUp7RKsCekww3wAq5xB5Ei77SlC/LnCVZV8uIJTGpHLP7Kjpe3 mKjJ8JqL+rGnaeE7GoCKM1YqsGFTLRWnac2aTk5OedQ10YEb/2omOb3IOniv9Nm9LEpD9Bdj3QT 4buYPoH4ZEi3SLXYdbOXHPEDsNnOzUEM6n1d18UmjKx4hirL3W++8XISHEC+gHrEpJjYTjEORIo EfhAYGywDUT2dXcR4VTOX/GhEM2N5zUiBVo42FKPtoHTgxxMHl86Nd62120w== X-Received: by 2002:a5d:64e6:0:b0:474:530:9d with SMTP id ffacd0b85a97d-482b1fd894bmr19893867f8f.13.1787220541035; Thu, 20 Aug 2026 03:09:01 -0700 (PDT) From: "Denis V. Lunev" To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, "Denis V. Lunev" , John Snow , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v2 07/17] hw/ide: factor out the IDENTIFY DEVICE current geometry words Date: Thu, 20 Aug 2026 12:08:34 +0200 Message-ID: <20260820100844.411717-8-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260820100844.411717-1-den@openvz.org> References: <20260820100844.411717-1-den@openvz.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::433; envelope-from=den@openvz.org; helo=mail-wr1-x433.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, 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 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 @openvz.org) X-ZM-MESSAGEID: 1787220759421158500 From: Denis V. Lunev Words 54 to 58 of IDENTIFY DEVICE describe the CHS translation in effect and the capacity it addresses. Both ide_identify() and ide_cfata_identify() fill them the same way while building their cached data. Move them into ide_identify_chs(), so that the next change can refresh them in place once the translation changes, the way ide_identify_size() does for the capacity words. No functional change. Cc: John Snow Cc: Peter Maydell Cc: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Denis V. Lunev Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/ide/core.c | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/hw/ide/core.c b/hw/ide/core.c index 292908fb1c..e5fd570575 100644 --- a/hw/ide/core.c +++ b/hw/ide/core.c @@ -110,6 +110,18 @@ static void put_le16(uint16_t *p, unsigned int v) *p =3D cpu_to_le16(v); } =20 +static void ide_identify_chs(IDEState *s) +{ + uint16_t *p =3D (uint16_t *)s->identify_data; + unsigned int cur_sec =3D s->cylinders * s->heads * s->sectors; + + put_le16(p + 54, s->cylinders); + put_le16(p + 55, s->heads); + put_le16(p + 56, s->sectors); + put_le16(p + 57, cur_sec); + put_le16(p + 58, cur_sec >> 16); +} + static void ide_identify_size(IDEState *s) { uint16_t *p =3D (uint16_t *)s->identify_data; @@ -128,7 +140,6 @@ static void ide_identify_size(IDEState *s) static void ide_identify(IDEState *s) { uint16_t *p; - unsigned int oldsize; IDEDevice *dev =3D s->unit ? s->bus->slave : s->bus->master; =20 p =3D (uint16_t *)s->identify_data; @@ -158,12 +169,7 @@ static void ide_identify(IDEState *s) put_le16(p + 51, 0x200); /* PIO transfer cycle */ put_le16(p + 52, 0x200); /* DMA transfer cycle */ put_le16(p + 53, 1 | (1 << 1) | (1 << 2)); /* words 54-58,64-70,88 are= valid */ - put_le16(p + 54, s->cylinders); - put_le16(p + 55, s->heads); - put_le16(p + 56, s->sectors); - oldsize =3D s->cylinders * s->heads * s->sectors; - put_le16(p + 57, oldsize); - put_le16(p + 58, oldsize >> 16); + ide_identify_chs(s); if (s->mult_sectors) put_le16(p + 59, 0x100 | s->mult_sectors); /* *(p + 60) :=3D nb_sectors -- see ide_identify_size */ @@ -321,7 +327,6 @@ static void ide_cfata_identify_size(IDEState *s) static void ide_cfata_identify(IDEState *s) { uint16_t *p; - uint32_t cur_sec; =20 p =3D (uint16_t *)s->identify_data; if (s->identify_set) { @@ -329,8 +334,6 @@ static void ide_cfata_identify(IDEState *s) } memset(p, 0, sizeof(s->identify_data)); =20 - cur_sec =3D s->cylinders * s->heads * s->sectors; - put_le16(p + 0, 0x848a); /* CF Storage Card signatu= re */ put_le16(p + 1, s->cylinders); /* Default cylinders */ put_le16(p + 3, s->drive_heads); /* Default heads */ @@ -350,11 +353,7 @@ static void ide_cfata_identify(IDEState *s) put_le16(p + 51, 0x0002); /* PIO cycle timing mode */ put_le16(p + 52, 0x0001); /* DMA cycle timing mode */ put_le16(p + 53, 0x0003); /* Translation params vali= d */ - put_le16(p + 54, s->cylinders); /* Current cylinders */ - put_le16(p + 55, s->heads); /* Current heads */ - put_le16(p + 56, s->sectors); /* Current sectors */ - put_le16(p + 57, cur_sec); /* Current capacity */ - put_le16(p + 58, cur_sec >> 16); /* Current capacity */ + ide_identify_chs(s); /* Current C/H/S and capac= ity */ if (s->mult_sectors) /* Multiple sector setting= */ put_le16(p + 59, 0x100 | s->mult_sectors); /* *(p + 60) :=3D nb_sectors -- see ide_cfata_identify_size */ --=20 2.53.0 From nobody Fri Aug 21 21:27:02 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=openvz.org ARC-Seal: i=1; a=rsa-sha256; t=1787220620; cv=none; d=zohomail.com; s=zohoarc; b=avmCt3yWSv5NCHe5Knjzxt50JYXQZqGDB5NUNprjBDcr4efRg0RIYhPcAVquvB+w/dKcO7hOW2iYAPxBnMBtdm27G4I6VG08zJ0sdX7v5fbePugDB5pOhYpQHUt6zOnBof50fAKxoVdiIsCPchMbYyZUHDqJjGBpgaKrsVUbTDg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787220620; h=Content-Type:Content-Transfer-Encoding:Cc:Cc: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; bh=fbFPcumdwqQtTm/8eCl+Gz40GixriWu5Kdq29TJDuH0=; b=bTxfdahpDQvML2jTPDa6i6Zbffxau8k7RvQVX4yJ7t/SoWLgXPtVB1IXCpK3ZCmSg5BG7xrF1wfPjCyGp28N8Cyu/nHCkLsTaUIFwuMxTdFPVvcWtmr81/UGPB/WUtrzlNgbhJGihdygSzl3IWnCPhTEq+eKYUX8IrYX4qFMj78= 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 1787220620747179.26383297561313; Thu, 20 Aug 2026 03:10:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwziM-00074p-Fx; Thu, 20 Aug 2026 06:09:42 -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 1wwzhq-0006sF-Dh for qemu-devel@nongnu.org; Thu, 20 Aug 2026 06:09:06 -0400 Received: from mail-wr1-x436.google.com ([2a00:1450:4864:20::436]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwzhn-0008Mo-OK for qemu-devel@nongnu.org; Thu, 20 Aug 2026 06:09:05 -0400 Received: by mail-wr1-x436.google.com with SMTP id ffacd0b85a97d-47f703a9d05so1312693f8f.0 for ; Thu, 20 Aug 2026 03:09:03 -0700 (PDT) Received: from athena.sw.ru ([2a06:5b06:b600:300:a123:7b43:afd8:8b47]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482b1441b0fsm11678929f8f.4.2026.08.20.03.09.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Aug 2026 03:09:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1787220542; x=1787825342; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=fbFPcumdwqQtTm/8eCl+Gz40GixriWu5Kdq29TJDuH0=; b=hIoHHd8UWxWZuuZYpz2DiW3XEXXPIF6SW45m2LZwic6mUFj/5+VZeiBoxscBXUCmuw zZZyglNom57iKieQfxbbgykfXtY1S1jtRp5WWCK0cpPqHEDAe39hoXn7GKKI/fweS84M v+YB8U/fTH+lJxZQA5MaxK5NFyV6GjjTzxMdXbv+a5kUM/3Im0tGqsiP04zuc02RQalN DViOosDwQWwIhYCDAeFbpEMA/8+VFTdtCdzCyEENDy2sR4hE4u8PI/bM5faxbrAkEezi FIiYbYv9D6FhjXSEGJmw8xI9hEX0RegcjpIZ9IpxOqQXLYMIZRt7BnMgMFIzQm4Araa9 39+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787220542; x=1787825342; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=fbFPcumdwqQtTm/8eCl+Gz40GixriWu5Kdq29TJDuH0=; b=GuVmNyCrlPcLONwN7XF8NQvEIvBhshI5QsdHieA/I12QE3ByqbjwAxZgwIPmO88GH5 V61VPcrz0QHoQSdOuuRBjUHIQAfZ8gGKms59e+fNBtwRsxHvY7zG8ejfMsMIlE6sia5i 4gHCAjgdfWIMeSJSpd70qx0Bo1bwWs1m8S4LsBqKSPKJGFiJgYF95FuSOtLMAH0GAMMG hzpPaREZgAjkWYa4KLiHDU8zLk0UyBViyVSqgNwNFFwunniLv0WXeFI2OYpx++ttPipC bklbYwdCrNAxmDjr9iLMZOEBLCWAlakwC4Wc1NKLY0UDWqQVZkU8t1rbjEI/498Qqiy9 tZZQ== X-Gm-Message-State: AFuF++nG6BqtfvU3FTlJDfUARXgwJXbLDhnv7UR+2gCHmF5Q+Dn8fN0e OOkM+cU3nnWeHIUGQyScyWpQNTYWAs6oTPIpy3teyOdXGiseSR5XJwccVS3HkyPM3Q+Aq5gCIgi DYqmj X-Gm-Gg: AR+sD13sog88fN2EOh6Vcj1daevpq+fGGZyo9QtaSiWjGwTzl0X7BaMU8aWQk6Pyh9z cAYjm/HLr54kNzSsOIRsGldc/A9yZSywUAP6cuqQmAmeE3qReUjWiU5Utbo3fGvPPhYnsqV60tu gFOXt7J1Wb2Lph11JgYQ6PTIb47FvvWpFDDaW9h7gZrqfydfzh5mKhaJszs+9DkM3eeSEU+PanP FGqARpqMlSEqvw8uS5lETMd6qu0SQ2OwSuitCHkwydMCklcRl+IsE8KhsFb4Lu7ijkse7N1RjI2 E0g/aev2J55eGegGRgc/T0AtQoyIsxRQlQGp8lsVr4MKs3MxczXrLrGx6FeA2se4fiAzuBlfU5G +WSvMvmgiq0XjrapbHM+x5WsxfG5lmKFFegycCdSnw1mMvLLCWEYT5RtkLM/gfbVE6WQ9rfRjSp 0sKqPxbpuZAVNuwzUv91P4GeEQKZ17knq4BGHkw/MNyhfnhBGxLT0MyhdR8A== X-Received: by 2002:a05:6000:613:b0:47f:f31d:27a4 with SMTP id ffacd0b85a97d-482b1fd9bf6mr18659863f8f.13.1787220542266; Thu, 20 Aug 2026 03:09:02 -0700 (PDT) From: "Denis V. Lunev" To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, "Denis V. Lunev" , John Snow , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v2 08/17] hw/ide: keep the IDENTIFY DEVICE current geometry in sync Date: Thu, 20 Aug 2026 12:08:35 +0200 Message-ID: <20260820100844.411717-9-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260820100844.411717-1-den@openvz.org> References: <20260820100844.411717-1-den@openvz.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::436; envelope-from=den@openvz.org; helo=mail-wr1-x436.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, 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 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 @openvz.org) X-ZM-MESSAGEID: 1787220622986158500 From: Denis V. Lunev Bit 0 of IDENTIFY DEVICE word 53 says that words 54 to 58 describe the CHS translation in effect, and ATA-5 8.16.8 has INITIALIZE DEVICE PARAMETERS set words 55 and 56 to the heads and sectors per track it was given. The data is built once and then cached, so those words kept describing whatever was in effect when a guest first asked for IDENTIFY DEVICE: the device reported one geometry while addressing the medium with another, and nothing reported an error. The revert SET FEATURES 0xCC asks for on the next reset left the same disagreement. Do not drop the cached data on a change, as parts of it are guest state rather than a description of the drive: SET FEATURES records the write cache setting in word 85, which ide_drive_post_load() reads back after migration. Refresh the affected words in place instead, the way ide_identify_size() does for the capacity words. An ATAPI device has no translation but does take SET FEATURES 0xCC, so leave its IDENTIFY PACKET DEVICE data alone, where those words differ. Cc: John Snow Cc: Peter Maydell Cc: Philippe Mathieu-Daud=C3=A9 Fixes: 176e4961bb33 ("hw/ide/core.c: Implement ATA INITIALIZE_DEVICE_PARAME= TERS command") Signed-off-by: Denis V. Lunev --- hw/ide/core.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/hw/ide/core.c b/hw/ide/core.c index e5fd570575..048655b2d0 100644 --- a/hw/ide/core.c +++ b/hw/ide/core.c @@ -1360,6 +1360,10 @@ static void ide_reset(IDEState *s) s->reset_reverts =3D false; s->heads =3D s->drive_heads; s->sectors =3D s->drive_sectors; + /* An ATAPI device takes SET FEATURES 0xCC but has no translation = */ + if (s->identify_set && s->drive_kind !=3D IDE_CD) { + ide_identify_chs(s); + } } if (s->drive_kind =3D=3D IDE_CFATA) s->mult_sectors =3D 0; @@ -1668,6 +1672,9 @@ static bool cmd_specify(IDEState *s, uint8_t cmd) =20 s->heads =3D (s->select & (ATA_DEV_HS)) + 1; s->sectors =3D s->nsector; + if (s->identify_set) { + ide_identify_chs(s); + } ide_bus_set_irq(s->bus); =20 return true; --=20 2.53.0 From nobody Fri Aug 21 21:27:02 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=openvz.org ARC-Seal: i=1; a=rsa-sha256; t=1787220751; cv=none; d=zohomail.com; s=zohoarc; b=huSaU+NPReiPH6AcepsWyVHQGQf5cVuwZ0F3svc7IIzKMdCUgQfkv0OKXj2cUvqId4M3z6u5fUgxT0AnDhQflgmKfVhRKAAcg5fFtr67B1o4i7b5c5APNcwUD3Q6cLV4J8to7kTtg25pdu08S4VNsfEqamLxGRnuISHgwZr12zQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787220751; h=Content-Type:Content-Transfer-Encoding:Cc:Cc: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; bh=GiST71Yts4LfFL9lI6doSLjjmUxdiZhCirIUAPAqYHk=; b=ezGk2+PYWRgspomPtotZsCoRQRz53UeYzfFxBevTjl/S2OZxBPqDiCy9RmpKmeVnJD3Nqt8MDj5nre2etfPS1nfC9npHjTxwgGd2tjlgbLp6tmaXKMJyBJ6EnAslhSxjsDizgCgBJwsWFGH0Aa2ZGCGWHybAOdpK9wHPVVx+d/U= 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 178722075187287.66407572083654; Thu, 20 Aug 2026 03:12:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwzhu-0006uW-Dx; Thu, 20 Aug 2026 06:09:10 -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 1wwzhq-0006sH-Li for qemu-devel@nongnu.org; Thu, 20 Aug 2026 06:09:06 -0400 Received: from mail-wm1-x329.google.com ([2a00:1450:4864:20::329]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwzho-0008NI-Rz for qemu-devel@nongnu.org; Thu, 20 Aug 2026 06:09:06 -0400 Received: by mail-wm1-x329.google.com with SMTP id 5b1f17b1804b1-4956869750eso13229845e9.2 for ; Thu, 20 Aug 2026 03:09:04 -0700 (PDT) Received: from athena.sw.ru ([2a06:5b06:b600:300:a123:7b43:afd8:8b47]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482b1441b0fsm11678929f8f.4.2026.08.20.03.09.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Aug 2026 03:09:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1787220543; x=1787825343; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=GiST71Yts4LfFL9lI6doSLjjmUxdiZhCirIUAPAqYHk=; b=c1TlBH+mgED15qwF47cia/aBcxGutdGGKMylyaOZ1AGKNOsJiRLxiJynb1NkO25p+k DkkecFrAZG+peTlfQ0yxjXoqsTdDVSOBF7CHgbQaKgIOEK2sO7h8sxFscZ/CT+x/XZy5 KTlJsNG5I5s7o9yHf0CwlsQOUIqRHNKSX2Rldn/8DOEqkT9psEyP9PSrYxMSoflHvKiA +bZ4UHyf73v1V1MZmqewX+Gf1DLWACrKJ9XsaZhRNjaj7Zo6x6eR3Wle+//lfbzC4q8d 1w62skBEXpZTuCamEdd5wJ3SswVYFhnYJr+W61Kz5Gev0L3X3XinkMyl/7CfNGkHwUTM rP8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787220543; x=1787825343; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=GiST71Yts4LfFL9lI6doSLjjmUxdiZhCirIUAPAqYHk=; b=BtdeE6C18fvbfH3zWmkIZVhWN81qZymp5tWHWxNN//ZDSfSSvapKW8nwcNFwRDoPxW Sc4UzC7OcxTqPNxp4PicgEOLEwJuMo8KAGSdBuuFQlQ7p0vwbeHsxqnT4PtBCUh+4L/f /6Qn4HNnVkQ4JCa4l79NNuAQxbv5SYYU/zF9M3fLoy34w5RUsKZLo66O4dh594DB6Boo A8sGTk8oC1PH+KVWEFZqhMGnZbo0KzQG4Ow+n2/PZGMyGjFH8CN7GzAjJ3Blv/BRbhwT AharrtHySl/Lr97BjeFBmuWH66yinnJxVgUdSsDfeVxI0KVXC7UGd1VPnojlQbBmrjsM 38og== X-Gm-Message-State: AOJu0YwOH6JYAKOMNZbh7pudRerswu8qOg3qq2CMpFQSMzOmCBln6GIP YNZbWKvsdaVldi/Js03c1Sm3eKxbC7QZhruaV+sJ7jC6G63a4OOGZ4UmoZbBnEwl8HQs9JaojQJ 43eoo X-Gm-Gg: AR+sD13wj3ARYk8gKvGPmH/tbWgVI4DWG45PvRcxxNohqJ7wLy18+RX6BZ4+T57PuF/ pyAAlcaAmg8NM9hddIjhXPmBHpnvu9L15VnEeBcoswpLbwqXEDLOS5Hng1FlGtjp3FZVyqeu6PJ cy3j0KX0GmNXim6O5KPQXHhKGfUdZOGTx9G6H2Fh4YXO0FuBl4SkRHbPpxH5djWxRiMiuwbK7Vw 1g7jOd3PPcF9CbewTOUo4Be75oWRq2OgcOTAu0GSYW6qf58JLWVZrFeeeDgEXpi57j0JufO7AsW NsATSgX2SO/F5e26VnV8Mo92jsx6KsQ5rhDEap6C5QmixcTFfNrLIU4Yi8RTwqeR0GK3R+B/l1S uVYb5MuDpXgVpOHJpMpjtpkF0FOxN48XvAa7NRiLa52o0wxEMGj4xRZGN8giwysOvMQClppj/+f dKssdhfEXgvCH8D+k8kre1zlkNtkKv0LBqslpRwua3fN+qTtPjKV+NPAGCGxTbo/skK1Fs X-Received: by 2002:a05:600c:1387:b0:493:f5bf:4dc6 with SMTP id 5b1f17b1804b1-499aa1a47cfmr160947685e9.7.1787220543396; Thu, 20 Aug 2026 03:09:03 -0700 (PDT) From: "Denis V. Lunev" To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, "Denis V. Lunev" , John Snow , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v2 09/17] hw/ide: restore the power-on device state before loading Date: Thu, 20 Aug 2026 12:08:36 +0200 Message-ID: <20260820100844.411717-10-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260820100844.411717-1-den@openvz.org> References: <20260820100844.411717-1-den@openvz.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::329; envelope-from=den@openvz.org; helo=mail-wm1-x329.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, 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 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 @openvz.org) X-ZM-MESSAGEID: 1787220753434158500 From: Denis V. Lunev Loading a snapshot reuses the IDEState of the machine it is loaded into: load_snapshot() resets the machine and then feeds the stream into the existing devices. The reset does not help, as ide_reset() restores the logical CHS translation only when the guest asked for power-on defaults to be reverted with SET FEATURES 0xCC. A guest that replaced the translation with INITIALIZE DEVICE PARAMETERS therefore keeps it across the load of a snapshot taken before it did, while the restored guest expects the geometry of that moment. Every CHS access then lands on a sector other than the one asked for, with no error reported. s->reset_reverts survives a load the same way. Add a pre_load restoring the defaults, which docs/devel/migration/main.rst recommends for state a stream need not carry, and which the following subsections rely on. The RESET_TYPE_SNAPSHOT_LOAD marking that reset would be another way to recognise the case, but no IDE controller can see it while they all use device_class_set_legacy_reset(). Cc: John Snow Cc: Peter Maydell Cc: Philippe Mathieu-Daud=C3=A9 Fixes: 176e4961bb33 ("hw/ide/core.c: Implement ATA INITIALIZE_DEVICE_PARAME= TERS command") Signed-off-by: Denis V. Lunev --- hw/ide/core.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/hw/ide/core.c b/hw/ide/core.c index 048655b2d0..28219f5ef8 100644 --- a/hw/ide/core.c +++ b/hw/ide/core.c @@ -2863,6 +2863,18 @@ static int transfer_end_table_idx(EndTransferFunc *f= n) return -1; } =20 +static int ide_drive_pre_load(void *opaque) +{ + IDEState *s =3D opaque; + + /* The subsections below are sent only where the guest replaced these = */ + s->heads =3D s->drive_heads; + s->sectors =3D s->drive_sectors; + s->reset_reverts =3D false; + + return 0; +} + static int ide_drive_post_load(void *opaque, int version_id) { IDEState *s =3D opaque; @@ -2986,6 +2998,7 @@ const VMStateDescription vmstate_ide_drive =3D { .name =3D "ide_drive", .version_id =3D 3, .minimum_version_id =3D 0, + .pre_load =3D ide_drive_pre_load, .post_load =3D ide_drive_post_load, .fields =3D (const VMStateField[]) { VMSTATE_INT32(mult_sectors, IDEState), --=20 2.53.0 From nobody Fri Aug 21 21:27:02 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=openvz.org ARC-Seal: i=1; a=rsa-sha256; t=1787220616; cv=none; d=zohomail.com; s=zohoarc; b=lpOBDc8Rldq5xU6SGgiF245ZJuafckK6vSxU5IDpmQDdtFDm/ZlF6MW2qzTCdrA+OBv+sNWObtDKOH8UetUh1BTlFq9H7XKNgJsyaXIMZrd92b4gaU+iQWFB2GlqT9GlfifYF4y6Fk4HgUIMXqwf0QQprfGO6LpjR3sB0ZDGHCU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787220616; h=Content-Type:Content-Transfer-Encoding:Cc:Cc: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; bh=mvbyu72RNCBKA30dtO0psq+nr2zGhTtycdQqI3vt+Gw=; b=DMUiWUV+a62zQAc5OanUjXy35fDtUHcFDgsZIimsQFNx+AP8WvngFmOHFmuTkj1o4JVNP8dF+xlHWYGFqG7fJoQa7d2HbUvTDUR3dTifpvLEf2BF9AZmxJRVgpXGmRpIru0B0goiTZBw2ekOJL0m4uQ7Jqnz9pVEapl51VeaQHg= 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 1787220616038707.4171573042728; Thu, 20 Aug 2026 03:10:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwzi0-0006w0-L9; Thu, 20 Aug 2026 06:09:20 -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 1wwzhs-0006td-6i for qemu-devel@nongnu.org; Thu, 20 Aug 2026 06:09:09 -0400 Received: from mail-wm1-x330.google.com ([2a00:1450:4864:20::330]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwzhq-0008Nn-5e for qemu-devel@nongnu.org; Thu, 20 Aug 2026 06:09:07 -0400 Received: by mail-wm1-x330.google.com with SMTP id 5b1f17b1804b1-49954b88fffso20744575e9.0 for ; Thu, 20 Aug 2026 03:09:05 -0700 (PDT) Received: from athena.sw.ru ([2a06:5b06:b600:300:a123:7b43:afd8:8b47]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482b1441b0fsm11678929f8f.4.2026.08.20.03.09.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Aug 2026 03:09:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1787220544; x=1787825344; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=mvbyu72RNCBKA30dtO0psq+nr2zGhTtycdQqI3vt+Gw=; b=egibajmtfmpvPdDxTh/OBfavbjozrOrsnzlNIvnqvzS5QcwBC74G/SFWIT4A8HdVK0 QSK+KnWPZyV49vgTVZEcLhWl3ls27Uu1ZAkLQizjOmeTZsOqR6enUMaWrrgWcd5BUJz9 WgFRdCx5L04PBX7ZWPmdF7xpUsaJJRDAFkO1+gxzWcVz/S5JRCJBo4U54phQTIsTaFKk s801wSB5mzO8JfJI02xD0vuJjZ2rMWloqyhSbF8HkbkWw3bDUpiP34DHTzzkq2Y14Y14 qS7A14pSaCklBMLU1QglLk3ga5R67Mo43/5w9etzyCBK+I0hcNrBnMD1DqKB86HahkPt aaSw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787220544; x=1787825344; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=mvbyu72RNCBKA30dtO0psq+nr2zGhTtycdQqI3vt+Gw=; b=XW8Cgqe2sn0VjTf4KM8TJvof6yfrsik32/8ciFeH3UiD8GUkGa3+KCe4HF86hTH6Iz JGseLtI+th1J/fqoY3Ymv98jcpAiHcEMU1+8lYnZMQxY3Kd/TFDOF4E0NvOVtDGV2uJG IKgbwRgLWmrh7y+kQVknjwsjXvz4INybtB40cFVpbqrREb8YWA3IqV9JuBE6JH6b/WHl iJBAkF3bcs76SVyidyfuXl4x11cJD+/WF5zSV+v3nXb+fbJfSu5ppCqsCiqzjh+UFd2r e5s+fRaE/DiNmcFhgd5xR4MXB6+pCk5di0Xf+wKFfweCxFWVbuC8j2UIVM2N5JdCDQQV tEfw== X-Gm-Message-State: AOJu0YzrLZEaSKzJ11tf5jKuLhhmlMbrtiBamyNvBcQYDdqroqpaB1u4 /34p91OHrX03uvx3iGn5pof4oo91GsfF2JhLZ/mJNYnMmkspeM8ITRg6pVyKfirIq23aJoqzPY+ xvxG7 X-Gm-Gg: AR+sD13mol90eJcN8TgNtpTjw+304dd3PhBcJuqcj+2ozGQxSuIvkN/EYLmzm5KrDru dEbyNY932gRT8WwX4a0PwVAJZ7KbQEDRJWGpQOwuyqarySCyARsFIehRQ/clQ0Yal7WpUWPHbv0 +yYP3382qBVkXHhUFBOQUP720BkvKXlhgaHIyRSgStXSiGAp99BBZ7IGTq+yQWc7JAQMwZUadkg YYZ9Sj7Pu6UuQTdM90Vqv0/c4JpgvYcxPOrH7e8m6E7Y7p0GM8PJ7EykAdQYRucW9xUMMiWi6J4 gXoZ5hRxauyM4q/H+RdB34E6ce5vt97LKxsHqeOn4Y0KF7kZt2juPGUXvdd3DgvSTkD3EouRwLQ l75qdyHcCK2/k/mNSIAPLdI++mjess0w6TpRO38lvRU2Fp3uiIY2EwyE/AU43LJzHcHOhNTyZ5F nJxtUg8MQ1+DXzh+OURUHJDmQ+9je097ptm/nCijh8dbC29uRnv8B7pGbQ1g== X-Received: by 2002:a05:600c:37c6:b0:499:87f3:a2a3 with SMTP id 5b1f17b1804b1-499aa1c7bafmr208408085e9.15.1787220544337; Thu, 20 Aug 2026 03:09:04 -0700 (PDT) From: "Denis V. Lunev" To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, "Denis V. Lunev" , John Snow , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v2 10/17] hw/ide: migrate the logical CHS translation Date: Thu, 20 Aug 2026 12:08:37 +0200 Message-ID: <20260820100844.411717-11-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260820100844.411717-1-den@openvz.org> References: <20260820100844.411717-1-den@openvz.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::330; envelope-from=den@openvz.org; helo=mail-wm1-x330.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, 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 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 @openvz.org) X-ZM-MESSAGEID: 1787220617033158500 From: Denis V. Lunev INITIALIZE DEVICE PARAMETERS lets a guest replace the logical CHS translation used to turn the CHS registers into an LBA, but s->heads and s->sectors were in no VMStateDescription. The destination rebuilt them from the drive configuration, so a guest that had selected one of its own kept addressing the disk in it while the device translated with the default, landing on sectors nobody asked for. Add a subsection for it, sent only when the guest replaced the default, so that migration to an older QEMU keeps working for every other guest. s->cylinders is left out, as no command changes it. Validate what is loaded in the existing post_load: ide_get_sector() multiplies by these fields and ide_set_sector() divides by them. Cc: John Snow Cc: Peter Maydell Cc: Philippe Mathieu-Daud=C3=A9 Fixes: 176e4961bb33 ("hw/ide/core.c: Implement ATA INITIALIZE_DEVICE_PARAME= TERS command") Signed-off-by: Denis V. Lunev --- hw/ide/core.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/hw/ide/core.c b/hw/ide/core.c index 28219f5ef8..b074325afa 100644 --- a/hw/ide/core.c +++ b/hw/ide/core.c @@ -2879,6 +2879,13 @@ static int ide_drive_post_load(void *opaque, int ver= sion_id) { IDEState *s =3D opaque; =20 + /* Only a disk has a translation; an empty slot and ATAPI keep these z= ero */ + if (s->blk && s->drive_kind !=3D IDE_CD && + (s->heads < 1 || s->heads > 16 || + s->sectors < 1 || s->sectors > 255)) { + return -EINVAL; + } + if (s->blk && s->identify_set) { blk_set_enable_write_cache(s->blk, !!(s->identify_data[85] & (1 <<= 5))); } @@ -2962,6 +2969,25 @@ static const VMStateDescription vmstate_ide_atapi_ge= sn_state =3D { } }; =20 +static bool ide_chs_translation_needed(void *opaque) +{ + IDEState *s =3D opaque; + + return s->heads !=3D s->drive_heads || s->sectors !=3D s->drive_sector= s; +} + +static const VMStateDescription vmstate_ide_drive_chs_translation =3D { + .name =3D "ide_drive/chs_translation", + .version_id =3D 1, + .minimum_version_id =3D 1, + .needed =3D ide_chs_translation_needed, + .fields =3D (const VMStateField[]) { + VMSTATE_INT32(heads, IDEState), + VMSTATE_INT32(sectors, IDEState), + VMSTATE_END_OF_LIST() + } +}; + static const VMStateDescription vmstate_ide_tray_state =3D { .name =3D "ide_drive/tray_state", .version_id =3D 1, @@ -3025,6 +3051,7 @@ const VMStateDescription vmstate_ide_drive =3D { }, .subsections =3D (const VMStateDescription * const []) { &vmstate_ide_drive_pio_state, + &vmstate_ide_drive_chs_translation, &vmstate_ide_tray_state, &vmstate_ide_atapi_gesn_state, NULL --=20 2.53.0 From nobody Fri Aug 21 21:27:02 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=openvz.org ARC-Seal: i=1; a=rsa-sha256; t=1787220639; cv=none; d=zohomail.com; s=zohoarc; b=fb/kj9R9Wt/ei27qrta9eaJ4M9ubqw0Cz/vY933Qrj0WKl5BwKheebGK5Mlpoe60yibO1EZVqpV1jcv/u7tmn4nLxLgAYIc+9LzO6QHuHsAm80BQVNlToYWvdI6dOtsIJ848wb7tIGFWXq7qhc1r5y1dt9YwD2AoYf6lY6ihAoM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787220639; h=Content-Type:Content-Transfer-Encoding:Cc:Cc: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; bh=5cfoTqeUfsT7GA5iC2nqqY7WKdSsJfkybOKIrlz+Kvg=; b=Rku1yrONgYZE1xm5le7ZesLnz9iPp/oj0hYclTbq5leETUfq/UbaX8ARhakRY0oAHg/u806RUcXfMsbqmQYcMoJcKgdtRpoSdM2QQsUMvdRF1SnlPANnWxeqAgJdd7bMz+jrTCE/TdGxhkCVWzx3OLFhUx5AuzelvvAj5m00Eks= 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 178722063971459.06212975874655; Thu, 20 Aug 2026 03:10:39 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwziA-0006zH-P5; Thu, 20 Aug 2026 06:09:26 -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 1wwzhs-0006th-Us for qemu-devel@nongnu.org; Thu, 20 Aug 2026 06:09:09 -0400 Received: from mail-wm1-x32a.google.com ([2a00:1450:4864:20::32a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwzhq-0008O3-PN for qemu-devel@nongnu.org; Thu, 20 Aug 2026 06:09:08 -0400 Received: by mail-wm1-x32a.google.com with SMTP id 5b1f17b1804b1-49554ebb87dso21321285e9.3 for ; Thu, 20 Aug 2026 03:09:06 -0700 (PDT) Received: from athena.sw.ru ([2a06:5b06:b600:300:a123:7b43:afd8:8b47]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482b1441b0fsm11678929f8f.4.2026.08.20.03.09.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Aug 2026 03:09:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1787220545; x=1787825345; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=5cfoTqeUfsT7GA5iC2nqqY7WKdSsJfkybOKIrlz+Kvg=; b=Z0tgKAfQe6hCnjQYy0+AC6NidiyowIpJftMlZ5OTVeTgHMj50jyiizdbEk910fg+Ra GFgn1DJneR2bEO+gMuNQx3TYs5YC9VWKm7g5V+HOjPEjGaL4Lw7S+lNjEOt4eWg2GxVL qpIJ/RGZo48Y38v+JL970scmeggi0qu3tKaWOkRrATF/XfBOHHJbPA40m9yETOy7vO1X exNjBpS+UtLw/t1KyUAgArEWlFbqpl51OWyuqaNQkmAZNam528/Mugt/o0dsFY3bbixc 0hvT3zILEL2oMNNnh1PdmBg7vXoUpkGXwrPdHOQ3K+76IRZZUMveMsJtJydU+SIEMRRN eTGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787220545; x=1787825345; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=5cfoTqeUfsT7GA5iC2nqqY7WKdSsJfkybOKIrlz+Kvg=; b=S+9EC1aPtG+1D07UblSYpmdup00MQBtGZaivhqWzUXgznIxzPatQMiglJ9q4WBBFI7 YRPe6o81DmyUqI6tzpZpvqAno/wCyps3hbcfUFxuXtVZf6S/F/zwlPI45Z3a0jFvj/9v kPKuL+6HrKuRUHCopUgz057qwRMhNsAAD8ap9Vk16r6ie5aaC135nms7f5kQzNgRAnQv ALZqiZ7EAq+XWaPXAw/Bt2CHXh9eZNx+jmV+n272WyF1a+R1ByNQxQhl1mpU2kN/d8go YJjMX30cDiYITCkoaHNKH0q9Kjcggl6SpSssxA2mBAxCXzXASpZpa2lK0eLGVTiep9m2 B8iw== X-Gm-Message-State: AOJu0YzAc99UjU7ypmi8UhfSynZRxMwI1dfghoDf326Pi5+hZ3BX4JP/ PnkK5+5Ag1ud6t/PN/Z6pAKD75XMq+s8e0FWzBeGVPpjLKLcvBC69CXGPVni3qUs498KgTYSaT4 hGU3I X-Gm-Gg: AR+sD13Hs36yfpIq5Oz9uut7xvorfIgZuE3OgWed1mOcOvInhTAr1YV6ihctmLGK35t xP/KQ9AjMSUbz1E6maNjZIQAefFhqN5HN2IqUobtCB4+N/VyFVTbLjJHY6B+qiQFzAaCsuSYHvF opNSOvyDll2QGanJsPYumiDgueq397HKTTN9fqSRYxl/Hhe+4JZRSbNki0zXIEZsd17v9VvyCXg J7wQfieNIaiF2UU2Hx5szLTxq2lnq6fd2KsRv7YVJGY+NjCfgUt2zAUvta+lUgUzZhDrVOR1zSP joqFXYPeC+Esvo91PzQVJPTT1d5c8UFrq5Nw+etse7NybEENBPjG5VGBGPwHzUqY1gRWfr/9heo lrQgBJYOmmiXRfNe5H1TY9GyMqHlnpuXXztzIPJ4Y90FuOZYybwv2I7/yGjwqWeMya4XOBMZ49c YKXyhTAp4lDF6ZHSdECjGvCTNm6TotgavzDtqkbBuMgBld4WSCAM+rYJOXN67DwHe9KfMR X-Received: by 2002:a05:600c:3596:b0:495:4749:16a7 with SMTP id 5b1f17b1804b1-499aa1e269emr199503515e9.14.1787220545340; Thu, 20 Aug 2026 03:09:05 -0700 (PDT) From: "Denis V. Lunev" To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, "Denis V. Lunev" , John Snow , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v2 11/17] hw/ide: migrate the power-on defaults revert flag Date: Thu, 20 Aug 2026 12:08:38 +0200 Message-ID: <20260820100844.411717-12-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260820100844.411717-1-den@openvz.org> References: <20260820100844.411717-1-den@openvz.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::32a; envelope-from=den@openvz.org; helo=mail-wm1-x32a.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, 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 autolearn=unavailable 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 @openvz.org) X-ZM-MESSAGEID: 1787220640978158500 From: Denis V. Lunev SET FEATURES 0xCC asks for the next reset to revert to the power-on defaults, and 0x66 cancels that; ide_reset() restores the default CHS translation only when the flag is set. It was in no VMStateDescription, so it always arrived cleared. That was invisible while the destination had the default translation anyway. Now that the translation is migrated, the flag decides how long it stays in effect: without it, a reset after the migration reverts the geometry on the source and keeps it on the destination. Send it only alongside a translation the guest replaced. On the default geometry it reverts to what is already in effect, so such a guest need not lose its migration to an older QEMU over a subsection that changes nothing. Cc: John Snow Cc: Peter Maydell Cc: Philippe Mathieu-Daud=C3=A9 Fixes: 176e4961bb33 ("hw/ide/core.c: Implement ATA INITIALIZE_DEVICE_PARAME= TERS command") Signed-off-by: Denis V. Lunev --- hw/ide/core.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/hw/ide/core.c b/hw/ide/core.c index b074325afa..5a5f072630 100644 --- a/hw/ide/core.c +++ b/hw/ide/core.c @@ -2988,6 +2988,25 @@ static const VMStateDescription vmstate_ide_drive_ch= s_translation =3D { } }; =20 +static bool ide_reset_reverts_needed(void *opaque) +{ + IDEState *s =3D opaque; + + return s->reset_reverts && ide_chs_translation_needed(opaque); +} + +/* The flag decides nothing on the default geometry, so it travels with on= e */ +static const VMStateDescription vmstate_ide_drive_reset_reverts =3D { + .name =3D "ide_drive/reset_reverts", + .version_id =3D 1, + .minimum_version_id =3D 1, + .needed =3D ide_reset_reverts_needed, + .fields =3D (const VMStateField[]) { + VMSTATE_BOOL(reset_reverts, IDEState), + VMSTATE_END_OF_LIST() + } +}; + static const VMStateDescription vmstate_ide_tray_state =3D { .name =3D "ide_drive/tray_state", .version_id =3D 1, @@ -3052,6 +3071,7 @@ const VMStateDescription vmstate_ide_drive =3D { .subsections =3D (const VMStateDescription * const []) { &vmstate_ide_drive_pio_state, &vmstate_ide_drive_chs_translation, + &vmstate_ide_drive_reset_reverts, &vmstate_ide_tray_state, &vmstate_ide_atapi_gesn_state, NULL --=20 2.53.0 From nobody Fri Aug 21 21:27:02 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=openvz.org ARC-Seal: i=1; a=rsa-sha256; t=1787220616; cv=none; d=zohomail.com; s=zohoarc; b=J8A7tAycbVSXwwq0ldKblQ3wuOxERwj5S1IXQBLYI6nCk+qZXOuxz7vNIYwexmg9iLcE1Erx8VWuPVxf0mLUH4bMbQB+IfHD1/y+2veCZj6g01QdN8LxtFr4+A00OuDHkkk3W9Jwy6AkygshYMARXDBaJ9GOUyUIVLo1RoIrvKE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787220616; h=Content-Type:Content-Transfer-Encoding:Cc:Cc: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; bh=oGUR0cenTpNa60oyZashSxoxcA0EDHIVX1H0+0f+Yow=; b=kAAtYwwtVmBoEwU08MGiSUjAm1ZhhZBIGkeaGovXGs/7P11pM3uPKRC/i5Ge57mgKt2OdVZHWQFgQ0dZdMdG1hPHlaPsQdaDY2/LKx8fvYJ8lniZCgj9SCVvS9EVCQGgKf1rhrA7ltw8qvfF4GY+Lrfvf3dGO8M5M8UJHDGyP9E= 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 1787220616024118.0488871375145; Thu, 20 Aug 2026 03:10:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwzib-0007AH-4Y; Thu, 20 Aug 2026 06:09:53 -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 1wwzhv-0006uu-DK for qemu-devel@nongnu.org; Thu, 20 Aug 2026 06:09:11 -0400 Received: from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwzhs-0008Op-Mc for qemu-devel@nongnu.org; Thu, 20 Aug 2026 06:09:10 -0400 Received: by mail-wr1-x42c.google.com with SMTP id ffacd0b85a97d-47f633e6058so1704806f8f.0 for ; Thu, 20 Aug 2026 03:09:08 -0700 (PDT) Received: from athena.sw.ru ([2a06:5b06:b600:300:a123:7b43:afd8:8b47]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482b1441b0fsm11678929f8f.4.2026.08.20.03.09.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Aug 2026 03:09:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1787220547; x=1787825347; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=oGUR0cenTpNa60oyZashSxoxcA0EDHIVX1H0+0f+Yow=; b=SIMV41uc9noMqW0QP+udSeva6ylPftLcYAAb9CpAW/nfo56dZUVesKAQU1Pw5qZs8r LJMGvACyVydzcqL1dnLyWvL9LHWiJanooEcVtIBj39Lomm1XYIpRvw+nRpZTTtcdhn1q vdXXstSgSkc1saJhL4Zutmpn8jW0sCPGYrKALYJkS5PzjfHDf/jm6abt6IBUkvLSkvfs gMGUl33JT8+EMQJDHQbO8rqqhg6Vcg+VPQZcWi3f8VkUtXdUdzKE3fqr2Hw5XihQZflf CuUuCyH/O43VQ8yY73VvCoRAyp9oAr45B2qaXQ3UZGC4JCI7diJi8AF/hpNgTqsyWHvl fkIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787220547; x=1787825347; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=oGUR0cenTpNa60oyZashSxoxcA0EDHIVX1H0+0f+Yow=; b=rvzVGI3E8EgmopabMzwPkzH7QYpJ6Quv3QZ/Wh7T4Fn0T+97nG90N0+yBGZKwQWWmb D9XyrCCkda5eq2gkPmfnUxQpPtxyqMJYB2c0zHZQ9ztTSTcEiWBYEYtmabehTaZWpkjG PtkUCG3Kq9zEqJLT/qvk9ahuK0qYPxK4Tv2oq3mb/zIVZlQ95+/gNxOxjZnd6Fa+qRjn pwsf67YN/Qu8mfRYT9dP+10TrGkTlrNJ/ShKoSBax5J1wctY796qjvLftnyyyWFXccJr 17uegNQV6J//ff5yw7keGTUzaExFv1/CPguozh8fMZa7ePMEZctwp6FilvU6IEJ8Zq9f Wmtg== X-Gm-Message-State: AFuF++ntLXWQzMSAPCZA3s0Rk6g9WUGV5ThWyURJrINiGss3aNyK+AO7 MCxHhPPweKE8Bh69WiceW7hPZGacAYsGZQgByKpFNb2czr0ZtQz2xQF9qFVAO43oDvrRsT1D31I bf69X X-Gm-Gg: AR+sD10+8JQUZ0JDnmB57isbkUzh8bqGryH/wM6C949Lpu3/FB3LmyzPURP+0TRIkB0 EV1VyCRym8DXPYprMDn/8l4Yun992FrQIWYG343lDC43QmTHWQL0KsHtcD7AhVthXbwJNgKR75Z a/ArkMQ90xdLKCo6I20Js1/moTdUdTf02HcVSUKlG6AlvOGYX9+EVZys318K1sZ1xqkx5mrS+bb AWMpsYD4Dt1u+99ZOb+aaWf3vNWtuJXpG4Yx5BR/UMxrCSdn/88GDFLuVaMddHwbjC5NCMygXC7 8T8+yz1AI0jhOjV/2TbbZxghMe4ph7S+BArxctdr6DutAmW174QYeiRUl6+5jGkU1j/pwcxskiH 4/0JvcxA6v/oTlFTw9eEgB3W3vHlkWBWIkenVlGOevY8FdrIqv3OLwXR58mXDEWJ1S8xSsFwZh5 nVRmiGDSVCZ7tlBEaGFagxXc5VDq8U3Vx7hOTmILoeVPDx7J1q7k1ttt4cTw== X-Received: by 2002:a05:6000:26cb:b0:47f:c62e:9cca with SMTP id ffacd0b85a97d-482b1fed744mr19145271f8f.22.1787220547001; Thu, 20 Aug 2026 03:09:07 -0700 (PDT) From: "Denis V. Lunev" To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, "Denis V. Lunev" , John Snow , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v2 12/17] tests/qtest/ide-test: cover the CHS translation across migration Date: Thu, 20 Aug 2026 12:08:39 +0200 Message-ID: <20260820100844.411717-13-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260820100844.411717-1-den@openvz.org> References: <20260820100844.411717-1-den@openvz.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::42c; envelope-from=den@openvz.org; helo=mail-wr1-x42c.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, 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 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 @openvz.org) X-ZM-MESSAGEID: 1787220617167158500 From: Denis V. Lunev Both defects here are silent: the guest addresses the disk in the translation it selected while the device translates with another, so reads and writes land on a sector nobody asked for. Put a marker in each of the two candidate sectors and name the one the translation picked. CHS 0/1/1 is LBA 32 under 8 heads and 32 sectors per track and LBA 63 under the 16/63 the test drive is configured with; both markers are written by LBA, which no translation can influence. A translation the guest selected has to survive migration, and one it selected after a snapshot was taken must not outlive loading that snapshot back. The second needs a qcow2 image, so it is skipped without qemu-img. Cc: John Snow Cc: Peter Maydell Cc: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Denis V. Lunev --- tests/qtest/ide-test.c | 231 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 231 insertions(+) diff --git a/tests/qtest/ide-test.c b/tests/qtest/ide-test.c index 99aa5e039c..19e9734d3c 100644 --- a/tests/qtest/ide-test.c +++ b/tests/qtest/ide-test.c @@ -96,6 +96,7 @@ enum { enum { CMD_DSM =3D 0x06, CMD_READ =3D 0x20, /* READ SECTOR(S) */ + CMD_WRITE =3D 0x30, /* WRITE SECTOR(S) */ CMD_DIAGNOSE =3D 0x90, CMD_INIT_DP =3D 0x91, /* INITIALIZE DEVICE PARAMETERS */ CMD_READ_DMA =3D 0xc8, @@ -1255,6 +1256,233 @@ static void test_specify_zero_sectors(void) free_pci_device(dev); } =20 +/* Addressed by LBA, so no translation can influence where it lands */ +static void ide_write_marker(QTestState *qts, QPCIDevice *dev, QPCIBar ide= _bar, + uint32_t lba, const char *marker) +{ + uint16_t buf[256]; + uint8_t data; + int i; + + memset(buf, 0, sizeof(buf)); + memcpy(buf, marker, strlen(marker)); + + qpci_io_writeb(dev, ide_bar, reg_nsectors, 1); + qpci_io_writeb(dev, ide_bar, reg_lba_low, lba & 0xff); + qpci_io_writeb(dev, ide_bar, reg_lba_middle, (lba >> 8) & 0xff); + qpci_io_writeb(dev, ide_bar, reg_lba_high, (lba >> 16) & 0xff); + qpci_io_writeb(dev, ide_bar, reg_device, LBA | ((lba >> 24) & 0xf)); + qpci_io_writeb(dev, ide_bar, reg_command, CMD_WRITE); + + data =3D ide_wait_clear(qts, BSY); + assert_bit_set(data, DRQ); + for (i =3D 0; i < 256; i++) { + qpci_io_writew(dev, ide_bar, reg_data, buf[i]); + } + data =3D ide_wait_clear(qts, BSY); + assert_bit_clear(data, ERR | DF | DRQ); + + qpci_io_writeb(dev, ide_bar, reg_command, CMD_FLUSH_CACHE); + data =3D ide_wait_clear(qts, BSY); + assert_bit_clear(data, ERR | DF); +} + +/* The marker read back names the sector the translation selected */ +static void ide_read_chs_marker(QTestState *qts, QPCIDevice *dev, + QPCIBar ide_bar, uint8_t cyl_lo, uint8_t h= ead, + uint8_t sector, char out[9]) +{ + uint16_t buf[256]; + uint8_t data; + int i; + + qpci_io_writeb(dev, ide_bar, reg_nsectors, 1); + qpci_io_writeb(dev, ide_bar, reg_lba_low, sector); + qpci_io_writeb(dev, ide_bar, reg_lba_middle, cyl_lo); + qpci_io_writeb(dev, ide_bar, reg_lba_high, 0); + qpci_io_writeb(dev, ide_bar, reg_device, head & 0xf); + qpci_io_writeb(dev, ide_bar, reg_command, CMD_READ); + + data =3D ide_wait_clear(qts, BSY); + assert_bit_set(data, DRQ); + assert_bit_clear(data, ERR | DF); + for (i =3D 0; i < 256; i++) { + buf[i] =3D qpci_io_readw(dev, ide_bar, reg_data); + } + data =3D ide_wait_clear(qts, BSY); + assert_bit_clear(data, ERR | DF | DRQ); + + memcpy(out, buf, 8); + out[8] =3D '\0'; +} + +static void ide_set_translation(QPCIDevice *dev, QPCIBar ide_bar, + uint8_t heads, uint8_t sectors) +{ + qpci_io_writeb(dev, ide_bar, reg_nsectors, sectors); + qpci_io_writeb(dev, ide_bar, reg_device, heads - 1); + qpci_io_writeb(dev, ide_bar, reg_command, CMD_INIT_DP); + assert_bit_clear(qpci_io_readb(dev, ide_bar, reg_status), ERR); +} + +/* CHS 0/1/1 is LBA 32 under 8/32, and LBA 63 under the drive's own 16/63 = */ +#define CHS_MARKER_CUSTOM "CUSTOM__" +#define CHS_MARKER_DEFAULT "DEFAULT_" + +static void ide_prepare_markers(QTestState *qts, QPCIDevice *dev, + QPCIBar ide_bar) +{ + ide_write_marker(qts, dev, ide_bar, 32, CHS_MARKER_CUSTOM); + ide_write_marker(qts, dev, ide_bar, 63, CHS_MARKER_DEFAULT); +} + +static void ide_hmp_quiet(QTestState *qts, const char *command) +{ + g_autofree char *out =3D qtest_hmp(qts, "%s", command); + + g_assert_cmpstr(out, =3D=3D, ""); +} + +static char *ide_migration_status(QTestState *qts) +{ + QDict *ret; + char *status; + + ret =3D qtest_qmp_assert_success_ref(qts, "{ 'execute': 'query-migrate= ' }"); + g_assert(qdict_haskey(ret, "status")); + status =3D g_strdup(qdict_get_str(ret, "status")); + qobject_unref(ret); + + return status; +} + +/* Waiting for the other side's event would hang if it refuses the stream = */ +static void ide_migration_wait(QTestState *qts, const char *expected) +{ + while (true) { + g_autofree char *status =3D ide_migration_status(qts); + + if (g_str_equal(status, expected)) { + return; + } + if (!g_str_equal(status, "setup") && !g_str_equal(status, "active"= ) && + !g_str_equal(status, "device")) { + fprintf(stderr, "Migration status is %s, expected %s\n", + status, expected); + g_assert_not_reached(); + } + g_usleep(5000); + } +} + +static void ide_migrate(QTestState *src, QTestState *dst, const char *uri) +{ + qtest_qmp_assert_success(src, "{ 'execute': 'migrate'," + " 'arguments': { 'uri': %s } }", uri); + qtest_qmp_eventwait(src, "STOP"); + ide_migration_wait(src, "completed"); + qtest_qmp_eventwait(dst, "RESUME"); +} + +/* A translation the guest selected has to survive migration */ +static void test_migrate_chs_translation(void) +{ + QTestState *src, *dst; + QPCIDevice *dev; + QPCIBar bmdma_bar, ide_bar; + g_autofree char *mig_path =3D NULL; + g_autofree char *uri =3D NULL; + g_autofree char *dst_args =3D NULL; + char marker[9]; + int fd; + + fd =3D g_file_open_tmp("qtest-ide-migration.XXXXXX", &mig_path, NULL); + g_assert(fd >=3D 0); + close(fd); + uri =3D g_strdup_printf("unix:%s", mig_path); + + src =3D ide_test_start( + "-blockdev driver=3Dfile,node-name=3Dhda,filename=3D%s,locking=3Do= ff " + "-device ide-hd,drive=3Dhda,bus=3Dide.0,unit=3D0 ", + tmp_path[0]); + dev =3D get_pci_device(src, &bmdma_bar, &ide_bar); + + ide_prepare_markers(src, dev, ide_bar); + ide_set_translation(dev, ide_bar, 8, 32); + ide_read_chs_marker(src, dev, ide_bar, 0, 1, 1, marker); + g_assert_cmpstr(marker, =3D=3D, CHS_MARKER_CUSTOM); + + dst_args =3D g_strdup_printf( + "-machine pc " + "-blockdev driver=3Dfile,node-name=3Dhda,filename=3D%s,locking=3Do= ff " + "-device ide-hd,drive=3Dhda,bus=3Dide.0,unit=3D0 -incoming %s", + tmp_path[0], uri); + dst =3D qtest_init(dst_args); + + ide_migrate(src, dst, uri); + + /* Talk to the destination instead of the source */ + qpci_free_pc(pcibus); + pcibus =3D NULL; + free_pci_device(dev); + dev =3D get_pci_device(dst, &bmdma_bar, &ide_bar); + + ide_read_chs_marker(dst, dev, ide_bar, 0, 1, 1, marker); + g_assert_cmpstr(marker, =3D=3D, CHS_MARKER_CUSTOM); + + free_pci_device(dev); + qtest_quit(dst); + ide_test_quit(src); + unlink(mig_path); +} + +/* A translation selected after the snapshot must not outlive loading it */ +static void test_migrate_chs_snapshot(void) +{ + QTestState *qts; + QPCIDevice *dev; + QPCIBar bmdma_bar, ide_bar; + g_autofree char *img =3D NULL; + char marker[9]; + int fd; + + if (!have_qemu_img()) { + g_test_skip("QTEST_QEMU_IMG not set, snapshots need a qcow2 image"= ); + return; + } + + fd =3D g_file_open_tmp("qtest-ide-snapshot.XXXXXX", &img, NULL); + g_assert(fd >=3D 0); + close(fd); + g_assert(mkimg(img, "qcow2", TEST_IMAGE_SIZE / (1024 * 1024))); + + qts =3D ide_test_start( + "-blockdev driver=3Dqcow2,node-name=3Dhda,file.driver=3Dfile," + "file.filename=3D%s " + "-device ide-hd,drive=3Dhda,bus=3Dide.0,unit=3D0 ", img); + dev =3D get_pci_device(qts, &bmdma_bar, &ide_bar); + + ide_prepare_markers(qts, dev, ide_bar); + + /* Snapshot taken while the default translation is in effect */ + ide_read_chs_marker(qts, dev, ide_bar, 0, 1, 1, marker); + g_assert_cmpstr(marker, =3D=3D, CHS_MARKER_DEFAULT); + ide_hmp_quiet(qts, "savevm s0"); + + ide_set_translation(dev, ide_bar, 8, 32); + ide_read_chs_marker(qts, dev, ide_bar, 0, 1, 1, marker); + g_assert_cmpstr(marker, =3D=3D, CHS_MARKER_CUSTOM); + + ide_hmp_quiet(qts, "loadvm s0"); + + ide_read_chs_marker(qts, dev, ide_bar, 0, 1, 1, marker); + g_assert_cmpstr(marker, =3D=3D, CHS_MARKER_DEFAULT); + + free_pci_device(dev); + ide_test_quit(qts); + unlink(img); +} + static void test_cdrom_pio(void) { cdrom_read_impl(1, CDROM_PIO); @@ -1327,6 +1555,9 @@ int main(int argc, char **argv) =20 qtest_add_func("/ide/read_native", test_specify); qtest_add_func("/ide/specify/zero_sectors", test_specify_zero_sectors); + qtest_add_func("/ide/migration/chs_translation", + test_migrate_chs_translation); + qtest_add_func("/ide/migration/chs_snapshot", test_migrate_chs_snapsho= t); =20 qtest_add_func("/ide/identify", test_identify); =20 --=20 2.53.0 From nobody Fri Aug 21 21:27:02 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=openvz.org ARC-Seal: i=1; a=rsa-sha256; t=1787220616; cv=none; d=zohomail.com; s=zohoarc; b=iclAGVimHeqYbF+w3Zlai+a/Sn7lOXKqKtZoXEeWwp5mdwmcCKLKlRqKjQnfUt9N3B0LIbkuZaGXMz2Ntf8tyQfFzGvv1N1u3WusQFDN+1M0v2SE89A2etBJlIY/LCwtSEJf8BDQAPjJJmoWBwUDNmkrSg4oGVM5xMm9YBc7eeU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787220616; h=Content-Type:Content-Transfer-Encoding:Cc:Cc: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; bh=nkj2k6nchMuIJVjh47utAhxnpSusPJpE2MYttsvWBKI=; b=UHkb4Wr4pzOdZJ/mdArj/6JzDaan8mpcC4DODFG/MGIlv/VYxF+v6KXEhAiuIfSl6o9XWUWkWkv4GNhI+3cncizg8aXDTFLYIv+mb7pDcKSZQ49xcmH7nQRVebRvY1udXhPrASIy4XOxn3RpRugbOICSFEnuWEde9haopGyMyjQ= 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 178722061595286.0648429461661; Thu, 20 Aug 2026 03:10:15 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwziI-00071b-3I; Thu, 20 Aug 2026 06:09:34 -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 1wwzhv-0006ux-Lr for qemu-devel@nongnu.org; Thu, 20 Aug 2026 06:09:12 -0400 Received: from mail-wr1-x42b.google.com ([2a00:1450:4864:20::42b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwzht-0008PN-Hz for qemu-devel@nongnu.org; Thu, 20 Aug 2026 06:09:11 -0400 Received: by mail-wr1-x42b.google.com with SMTP id ffacd0b85a97d-47f6609c657so971338f8f.2 for ; Thu, 20 Aug 2026 03:09:09 -0700 (PDT) Received: from athena.sw.ru ([2a06:5b06:b600:300:a123:7b43:afd8:8b47]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482b1441b0fsm11678929f8f.4.2026.08.20.03.09.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Aug 2026 03:09:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1787220548; x=1787825348; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=nkj2k6nchMuIJVjh47utAhxnpSusPJpE2MYttsvWBKI=; b=qra7BUBruBUQ1qoJNAzV+ejEkB5K+5xmm6nbyl6LAhUjQvNUiUgUb0Rrf6OnMvRXsZ ll5D1lFqNiWvoVDqstQusmL1f0DC/0Vykia9A9b7dRWppxsQI/vnOPo6BzbVvuuHVK0G bqUDEHzEs4MMmK5TZ56s1lMQSwm3ujnaMY0s+ndcRSuTBVe8Wwt1bJh1rUb1uDszoXQw tP97bYG7Fbd03LudWY/wOE4WxhRyJ9CBQQQCpL5huCK0QEPYpy6IaadlYqUs71DfXhxJ lXU9WNd/IQ0KSRpjXgYCeKTwTyebyoXZZebIky9HhKDE1qbszfnpP80AQFPP95cs732+ D+5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787220548; x=1787825348; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=nkj2k6nchMuIJVjh47utAhxnpSusPJpE2MYttsvWBKI=; b=O9aGsKwBSG3lPPBHNRC7YGnqsfA7rduJ+hmNbdlGkrzjoEoQsAZD3Qx/ZN7qlt0jTP DidIzNNwqAULu3jKVDHn8aZA+iMHNocP8AcBdR/8B15Cpj7hRAga3pbdpbrBPbYXO6eV lGFIwFGznuAub+0KWMhGSN8SbwFsAGHYyaI7pxRBJ7yV8xWhBM/OfBjHdo9EcEfQg/bu 4CkB0gGuTbM9K4eDOhHZAlQYNmqk5FORj8Qz/2FCm2a9OpCiglvv/zUGuxEaIgrkJLDP ShmkZDMBlu+iqJ+F5Em21x9E37U6HcjXgxeGkQJc/QmrdXk1cOqQYZcvOqw0H2bBLjaY RHhA== X-Gm-Message-State: AFuF++kvo8lwjWND9fW0+jDvEgk/ATmPoYdFkB+aSVAaiMGZAVCAMOZ1 tYw1KX8fGyTpweP1Ej4BR4lQnCzuFTHgjn2RJiA1Ei/mQpY62D0L0mTp1Kt6K+lexSJFK1XRp3q pHSQp X-Gm-Gg: AR+sD1042hFY4qRbstZfw42PqxsrUruCN8ok9oU+aOG6NjEcmTG3JO6rNJEMODFnaUH kIM0pBYhFz4STsBmTv8uxs/unXDMcR9c0atxMGyI37oAcTWbFwBbA68vMlRg3N0C+E79B0uLWOv Y4qYIjgFJOhmfawYRegtJqAsqA/dw5PPNF/1VlrSCNAs3tK5Z/RFF9NC/tjRyfBq6fkOzYdE9LW T8yefRxT1QbouCS3Q/k+6t1Mvt4rB9ij8woJ4FZ64QCox1SIsJu6S35aPo7FemUSBGYgB03+0ln XeOZK/d3wF4Gi7OfNCApllxjPKX8/TTBC0j9oGx5aWmHy9vJ3cGinBXeGtx5KcfBIPBe7IdAC6m q3nj90oFG3SstpJHv2Ui/DVXaJtL4g4LQCWm0jgMVVnIGJWKie4hFkFktAaXT0mL8kqFxyFru2/ 1X/vOJ/4w50Yy/6+R6y21gTB2W9aGWMAEomvvPVGtUQlHXOuycwug8pE1cug== X-Received: by 2002:a05:6000:4619:b0:47f:5b52:5579 with SMTP id ffacd0b85a97d-482b1fe8a4bmr21190909f8f.18.1787220548147; Thu, 20 Aug 2026 03:09:08 -0700 (PDT) From: "Denis V. Lunev" To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, "Denis V. Lunev" , John Snow , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v2 13/17] tests/qtest/ide-test: cover a rejected CHS translation in the stream Date: Thu, 20 Aug 2026 12:08:40 +0200 Message-ID: <20260820100844.411717-14-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260820100844.411717-1-den@openvz.org> References: <20260820100844.411717-1-den@openvz.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::42b; envelope-from=den@openvz.org; helo=mail-wr1-x42b.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, 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 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 @openvz.org) X-ZM-MESSAGEID: 1787220619001158500 From: Denis V. Lunev ide_drive_post_load() refuses a logical CHS translation that no command could have selected, as the fields are a divisor in ide_set_sector() and a factor in ide_get_sector(). Nothing exercised that, a fixed QEMU having no way to produce such a stream. Migrate a guest that selected a translation to a file, replace the number of sectors per logical track in the subsection with a zero, and let a destination read the result back. The load has to fail rather than take the value, so the destination is asked not to exit on a failed incoming migration and its migration status is what the test looks at. Cc: John Snow Cc: Peter Maydell Cc: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Denis V. Lunev --- tests/qtest/ide-test.c | 81 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/tests/qtest/ide-test.c b/tests/qtest/ide-test.c index 19e9734d3c..4fa58ac525 100644 --- a/tests/qtest/ide-test.c +++ b/tests/qtest/ide-test.c @@ -1483,6 +1483,86 @@ static void test_migrate_chs_snapshot(void) unlink(img); } =20 +/* A migration stream holds NUL bytes, so this cannot be a string search */ +static char *ide_stream_find(char *stream, gsize len, const char *name) +{ + gsize name_len =3D strlen(name); + gsize i; + + if (len < name_len) { + return NULL; + } + for (i =3D 0; i <=3D len - name_len; i++) { + if (memcmp(stream + i, name, name_len) =3D=3D 0) { + return stream + i; + } + } + + return NULL; +} + +/* A translation no command could have selected has to be refused on load = */ +static void test_migrate_chs_rejected(void) +{ + const char *name =3D "ide_drive/chs_translation"; + QTestState *src, *dst; + QPCIDevice *dev; + QPCIBar bmdma_bar, ide_bar; + g_autofree char *path =3D NULL; + g_autofree char *uri =3D NULL; + g_autofree char *dst_args =3D NULL; + g_autofree char *stream =3D NULL; + char *subsection; + gsize len; + int fd; + + fd =3D g_file_open_tmp("qtest-ide-stream.XXXXXX", &path, NULL); + g_assert(fd >=3D 0); + close(fd); + uri =3D g_strdup_printf("file:%s", path); + + src =3D ide_test_start( + "-blockdev driver=3Dfile,node-name=3Dhda,filename=3D%s " + "-device ide-hd,drive=3Dhda,bus=3Dide.0,unit=3D0 ", + tmp_path[0]); + dev =3D get_pci_device(src, &bmdma_bar, &ide_bar); + + ide_set_translation(dev, ide_bar, 8, 32); + qtest_qmp_assert_success(src, "{ 'execute': 'migrate'," + " 'arguments': { 'uri': %s } }", uri); + qtest_qmp_eventwait(src, "STOP"); + ide_migration_wait(src, "completed"); + free_pci_device(dev); + ide_test_quit(src); + + /* + * Behind the name come version, heads and sectors, each big endian 32= bit. + * The name recurs in the description at the end of the stream, so the + * first match is the one carrying data. + */ + g_assert(g_file_get_contents(path, &stream, &len, NULL)); + subsection =3D ide_stream_find(stream, len, name); + g_assert(subsection); + g_assert_cmpint(subsection - stream + strlen(name) + 12, <=3D, len); + memset(subsection + strlen(name) + 8, 0, 4); + g_assert(g_file_set_contents(path, stream, len, NULL)); + + dst_args =3D g_strdup_printf( + "-machine pc " + "-blockdev driver=3Dfile,node-name=3Dhda,filename=3D%s " + "-device ide-hd,drive=3Dhda,bus=3Dide.0,unit=3D0 -incoming defer", + tmp_path[0]); + dst =3D qtest_init(dst_args); + + qtest_qmp_assert_success(dst, "{ 'execute': 'migrate-incoming'," + " 'arguments': { 'uri': %s," + " 'exit-on-error': false } }", uri); + ide_migration_wait(dst, "failed"); + + qtest_quit(dst); + unlink(path); +} + static void test_cdrom_pio(void) { cdrom_read_impl(1, CDROM_PIO); @@ -1558,6 +1638,7 @@ int main(int argc, char **argv) qtest_add_func("/ide/migration/chs_translation", test_migrate_chs_translation); qtest_add_func("/ide/migration/chs_snapshot", test_migrate_chs_snapsho= t); + qtest_add_func("/ide/migration/chs_rejected", test_migrate_chs_rejecte= d); =20 qtest_add_func("/ide/identify", test_identify); =20 --=20 2.53.0 From nobody Fri Aug 21 21:27:02 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=openvz.org ARC-Seal: i=1; a=rsa-sha256; t=1787220753; cv=none; d=zohomail.com; s=zohoarc; b=X2/8sHojBp1hxLXQyrc4bkbOhSXq4q4BwmsEZgu6NO1mSk+NdtMAKzRwT4fLMrDzE5f8rn4hH65QVuZNlvqM76nRBL4Q8ONIDJi/4oNUa3MVshtXJ5b1zc3X37X7ZG8uACSRSBwA1cSpy2JT+ST8w1Rn0JNnS99aSB5D3XrJXpQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787220753; h=Content-Type:Content-Transfer-Encoding:Cc:Cc: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; bh=fDm9ZpUciP0grPAB9hW7JUEStxBgYv9yYQDvW3aVEbQ=; b=kf2ofb3Zk28xBwOcOWbaVgM+kRFsZeLW+YKZj0enjl/XJDJxlJe+xzxktoggnNdAJP4drruh1ZQyFTXmZt8RArFHOjNzcJfsEYvpSIevCXWRG+a7VDWA1QbcuCXu1R8grMWiekSSa1qoNZHw8pOwW4pDGNA0sKRAv0OMXzM0V6U= 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 1787220753145533.5491351530243; Thu, 20 Aug 2026 03:12:33 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwzif-0007GN-Q9; Thu, 20 Aug 2026 06:09:58 -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 1wwzhx-0006w2-9O for qemu-devel@nongnu.org; Thu, 20 Aug 2026 06:09:16 -0400 Received: from mail-wr1-x433.google.com ([2a00:1450:4864:20::433]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwzhv-0008Pl-5n for qemu-devel@nongnu.org; Thu, 20 Aug 2026 06:09:12 -0400 Received: by mail-wr1-x433.google.com with SMTP id ffacd0b85a97d-47fd66a094eso737748f8f.3 for ; Thu, 20 Aug 2026 03:09:10 -0700 (PDT) Received: from athena.sw.ru ([2a06:5b06:b600:300:a123:7b43:afd8:8b47]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482b1441b0fsm11678929f8f.4.2026.08.20.03.09.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Aug 2026 03:09:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1787220549; x=1787825349; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=fDm9ZpUciP0grPAB9hW7JUEStxBgYv9yYQDvW3aVEbQ=; b=EN5MzEWsOWSoFHzDdmkU6oUyFXFLoU4oTHiWr1rMZRogXDyyB/IH9c8ssJctN6sJIR Vqf9Bs2P9kL1jm+c272fZeeT7PxT/hRyBewbM2RgQWrOwCVKaNOYjmwi9eSuEqaVO8ku PoIjy2o+Uh7Sa5B98ArzcJiIYhWfsqGIw4pZvpBrWAM9UtyDLT2fNsdwHHKGSDsm84Dy 9LjeP9xhmcpld+/OQt9/J7fmrlF5iXw1zh9UCvdc0JXyOgZmJ/+2OD/0pGAmGI10SrrY WXsb448IYJX1irX94HBE0AVNJyxsAHLIPNcIgApCBBOYAno9mPlDpUkZYCgecwIKDOpx miYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787220549; x=1787825349; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=fDm9ZpUciP0grPAB9hW7JUEStxBgYv9yYQDvW3aVEbQ=; b=pFPgpmBNGSDbWPh+NAqVES0kCATyB8lz9KLAUAitKJSlFZ+vtrIFkCXeMtcvLE3n0d s0KfXdfnDwugul5SYWKguEmdz+G280PzedshltkOfNiAYFg1QQVWB2nAzQ2voHOS9ZTB PPeMKJZ3EnixSV4GC4cEECt1Vm9QtMZy+8TdHDPuCjSRVvCUFUbtE5J/ppcgg7D+l+/H GxWQ4Q1G5o26PGZt2G0iLbNvFrmaQPMwbrQzqXVDsrY5UQgHE6qL4J0TzzujciMPLHEo gXni2zpDNL3k/Tt2B5Dx2lqE8HjbEs6YS+Qt+DcNYKz8JhtYLEsWBEIz5lS3WUnnHumY HNYA== X-Gm-Message-State: AFuF++lXD0AEr8OFuLf8FkwjKehRwIiQee4K4KzWfwjW54Bgs5J8mMX7 CtMVGiu7MDg+cvbOirHJ1D8Qt00Iax1ZKT1HXfFAjSNm0AwPWlXXISu1qpmkG7lK2/+XOCNkR5h 58j2u X-Gm-Gg: AR+sD13mKVDwRn4sLlwWpQ7ksc2TSFZqbW60gaW8/yv/fK93R9rBUOdL4YuzuiWB+Hc 2u/LgPLRA4mCSJqkdq0sS8+xkv7nfr8j5NophSxSypVrwBl2FO48MmOZoJrociWy4Ydp9SOV0Z1 7nD4aFuRr3FIpjQDmetaPD7y6NjnJ8Jh0ZmryLh6xBwPsDqDZbORdWVHX+NwB1A0RyrN9wFHCH0 ftvs9prm2m+Gm6kMiEmWi5fxW+zR1l+95ADV6ipi6Hj3+NF+Vg7aX72UNTCPUXj9vFuACOZFG28 vGhexh6J3vS9WaUhXsQGxxjeI76gBR9U/A8NoohdQLhXC5R4QNOCNFaqkqhogELz91FvEPz/gGI Qy99++rusMV0sKQS12LCSB8MmpKj+M3CUdHTKHp6rG37sG3EWbXwSSWaGMoP/uv9rLWDHZBWGFm azwIsbl8ASaLB+7y1Cr1hXwHGWxekf8+hJEckRZnmLY5pkEUsjTPB7KJe+hg== X-Received: by 2002:a05:6000:144d:b0:47f:8fc9:6eaa with SMTP id ffacd0b85a97d-482b1ea2c22mr18216319f8f.8.1787220549244; Thu, 20 Aug 2026 03:09:09 -0700 (PDT) From: "Denis V. Lunev" To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, "Denis V. Lunev" , John Snow , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v2 14/17] tests/qtest/ide-test: cover the IDENTIFY DEVICE geometry words Date: Thu, 20 Aug 2026 12:08:41 +0200 Message-ID: <20260820100844.411717-15-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260820100844.411717-1-den@openvz.org> References: <20260820100844.411717-1-den@openvz.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::433; envelope-from=den@openvz.org; helo=mail-wr1-x433.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, 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 autolearn=unavailable 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 @openvz.org) X-ZM-MESSAGEID: 1787220753498158500 From: Denis V. Lunev INITIALIZE DEVICE PARAMETERS has to leave the geometry the drive came with in words 3 and 6 and describe the translation it selected in words 54 to 58, and the data is cached, so which of the two a guest is told depends on when it first asked. Cover both orders, as each alone leaves half of it untested: one test has the data built while the default is in effect and then replaces the translation, which the cached copy has to follow, the other replaces it before the first IDENTIFY DEVICE, where the words describing the default have to keep doing so. Factor the reading of the data out of test_specify_zero_sectors() for the three of them to share. Cc: John Snow Cc: Peter Maydell Cc: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Denis V. Lunev --- tests/qtest/ide-test.c | 89 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 84 insertions(+), 5 deletions(-) diff --git a/tests/qtest/ide-test.c b/tests/qtest/ide-test.c index 4fa58ac525..e7a56e0710 100644 --- a/tests/qtest/ide-test.c +++ b/tests/qtest/ide-test.c @@ -1196,6 +1196,18 @@ static void cdrom_read_impl(int nblocks, unsigned fl= ags) free_pci_device(dev); } =20 +static void ide_identify_words(QPCIDevice *dev, QPCIBar ide_bar, + uint16_t buf[256]) +{ + int i; + + qpci_io_writeb(dev, ide_bar, reg_device, 0); + qpci_io_writeb(dev, ide_bar, reg_command, CMD_IDENTIFY); + for (i =3D 0; i < 256; i++) { + buf[i] =3D qpci_io_readw(dev, ide_bar, reg_data); + } +} + /* Zero sectors per track has to abort (ATA-5 8.16.6), not divide by zero = */ static void test_specify_zero_sectors(void) { @@ -1221,11 +1233,7 @@ static void test_specify_zero_sectors(void) assert_bit_set(qpci_io_readb(dev, ide_bar, reg_error), ABRT); =20 /* The refused request has to leave the default translation in effect = */ - qpci_io_writeb(dev, ide_bar, reg_device, 0); - qpci_io_writeb(dev, ide_bar, reg_command, CMD_IDENTIFY); - for (i =3D 0; i < 256; i++) { - buf[i] =3D qpci_io_readw(dev, ide_bar, reg_data); - } + ide_identify_words(dev, ide_bar, buf); g_assert_cmpint(buf[55], =3D=3D, 16); g_assert_cmpint(buf[56], =3D=3D, 63); =20 @@ -1563,6 +1571,74 @@ static void test_migrate_chs_rejected(void) unlink(path); } =20 +/* Words 54 to 58 follow the translation even when the data was cached fir= st */ +static void test_specify_identify(void) +{ + QTestState *qts; + QPCIDevice *dev; + QPCIBar bmdma_bar, ide_bar; + uint16_t buf[256]; + unsigned int cyls; + + qts =3D ide_test_start( + "-blockdev driver=3Dfile,node-name=3Dhda,filename=3D%s " + "-device ide-hd,drive=3Dhda,bus=3Dide.0,unit=3D0 ", + tmp_path[0]); + dev =3D get_pci_device(qts, &bmdma_bar, &ide_bar); + + /* Have the data built while the default translation is still in effec= t */ + ide_identify_words(dev, ide_bar, buf); + cyls =3D buf[1]; + g_assert_cmpint(buf[3], =3D=3D, 16); + g_assert_cmpint(buf[6], =3D=3D, 63); + g_assert_cmpint(buf[53] & 1, =3D=3D, 1); + g_assert_cmpint(buf[55], =3D=3D, 16); + g_assert_cmpint(buf[56], =3D=3D, 63); + g_assert_cmpint(buf[57] | (buf[58] << 16), =3D=3D, cyls * 16 * 63); + + ide_set_translation(dev, ide_bar, 8, 32); + + ide_identify_words(dev, ide_bar, buf); + g_assert_cmpint(buf[1], =3D=3D, cyls); + g_assert_cmpint(buf[3], =3D=3D, 16); + g_assert_cmpint(buf[4], =3D=3D, 512 * 63); + g_assert_cmpint(buf[6], =3D=3D, 63); + g_assert_cmpint(buf[55], =3D=3D, 8); + g_assert_cmpint(buf[56], =3D=3D, 32); + g_assert_cmpint(buf[57] | (buf[58] << 16), =3D=3D, cyls * 8 * 32); + + free_pci_device(dev); + ide_test_quit(qts); +} + +/* Words 3 and 6 keep the drive's own geometry even if built after a chang= e */ +static void test_specify_identify_default(void) +{ + QTestState *qts; + QPCIDevice *dev; + QPCIBar bmdma_bar, ide_bar; + uint16_t buf[256]; + + qts =3D ide_test_start( + "-blockdev driver=3Dfile,node-name=3Dhda,filename=3D%s " + "-device ide-hd,drive=3Dhda,bus=3Dide.0,unit=3D0 ", + tmp_path[0]); + dev =3D get_pci_device(qts, &bmdma_bar, &ide_bar); + + /* No IDENTIFY DEVICE before this one, so nothing was cached yet */ + ide_set_translation(dev, ide_bar, 8, 32); + ide_identify_words(dev, ide_bar, buf); + g_assert_cmpint(buf[3], =3D=3D, 16); + g_assert_cmpint(buf[4], =3D=3D, 512 * 63); + g_assert_cmpint(buf[6], =3D=3D, 63); + g_assert_cmpint(buf[55], =3D=3D, 8); + g_assert_cmpint(buf[56], =3D=3D, 32); + g_assert_cmpint(buf[57] | (buf[58] << 16), =3D=3D, buf[1] * 8 * 32); + + free_pci_device(dev); + ide_test_quit(qts); +} + static void test_cdrom_pio(void) { cdrom_read_impl(1, CDROM_PIO); @@ -1635,6 +1711,9 @@ int main(int argc, char **argv) =20 qtest_add_func("/ide/read_native", test_specify); qtest_add_func("/ide/specify/zero_sectors", test_specify_zero_sectors); + qtest_add_func("/ide/specify/identify", test_specify_identify); + qtest_add_func("/ide/specify/identify_default", + test_specify_identify_default); qtest_add_func("/ide/migration/chs_translation", test_migrate_chs_translation); qtest_add_func("/ide/migration/chs_snapshot", test_migrate_chs_snapsho= t); --=20 2.53.0 From nobody Fri Aug 21 21:27:02 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=openvz.org ARC-Seal: i=1; a=rsa-sha256; t=1787220663; cv=none; d=zohomail.com; s=zohoarc; b=DmhX+7CDZhhm9bRGNmPoStgn+l3AGXFH5dF73FxpRVh1q3r1B9FtJAyDHmgnMeAqIyQh4eAQ4rdqWi6IBb9dTWsNKCMVJtpfM/GP1oFW51gq5nsFY8Cq5DDRGxl3oi0IJNOurPnUL/SygCR2bIxK6ppAemYsMPW6NE9/N3c/ZPs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787220663; h=Content-Type:Content-Transfer-Encoding:Cc:Cc: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; bh=LuCcXjHXrf83mUUXD5w1NFE3wBY+3o2UhexvMEmhWRE=; b=mGJMec6lCB+AiVP5l+VA1CQxRf/o/rWeyB0x8+slxdDUUZOqqlSA8JCCe8HQb5CbCK9/FI/F8eNkqFzL/5lLSlX4iATHJ7GJIOaoXPtH8jzxQImErETYCYI3FP4VmSy0ryUFYbFNFMs/u25U0ieAjpXQkCjg6bA3uTX9xksoebo= 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 1787220663882966.5120279177785; Thu, 20 Aug 2026 03:11:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwzic-0007C0-0Y; Thu, 20 Aug 2026 06:09:54 -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 1wwzhz-0006w9-3C for qemu-devel@nongnu.org; Thu, 20 Aug 2026 06:09:16 -0400 Received: from mail-wr1-x42f.google.com ([2a00:1450:4864:20::42f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwzhw-0008Q9-0T for qemu-devel@nongnu.org; Thu, 20 Aug 2026 06:09:14 -0400 Received: by mail-wr1-x42f.google.com with SMTP id ffacd0b85a97d-47f59f25ec4so1060394f8f.2 for ; Thu, 20 Aug 2026 03:09:11 -0700 (PDT) Received: from athena.sw.ru ([2a06:5b06:b600:300:a123:7b43:afd8:8b47]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482b1441b0fsm11678929f8f.4.2026.08.20.03.09.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Aug 2026 03:09:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1787220551; x=1787825351; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=LuCcXjHXrf83mUUXD5w1NFE3wBY+3o2UhexvMEmhWRE=; b=Cfu4B+duTNOB9PGLG7dX3aA/mrHxKbwx3Opz0qP1ciA96O23Erx9AuLEZyTmqYs+dV rQ68OcEaZzRXnWBOrJBWTPo2SWL/HzLCd/L/l51LLfPa5mELrY0TRJijPUHYOfDhC5pH RTbJlwGl/UEnEQ/Eg2wnyBMzJnZSAVBNy4cqCAfNREtijXOAXCw223Rfk4vOjqy5B0uK ObpmSfx2KVTFFj2JvTo9bjHPd+2wm1vhbZzxjI+QKDDV7TBMbg+GOuzsFuZlTil8RUPF l3Aysq7ZHoCwRGX0HFrUz1U7i6I2m8LjFYdHj77daxOxe+sSQUQ/X0y8Ag4PAeE7g8PM f/lw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787220551; x=1787825351; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=LuCcXjHXrf83mUUXD5w1NFE3wBY+3o2UhexvMEmhWRE=; b=IMToaVLyA8OHZZCcZtSzX/rEiErRifJEXcevDVSq9G8fxO/qHJm0hQt+eD2kCUNge1 dbXN63Z36y6DPbDA0mql+iHQkac1Yv/i7OjoNpFoMXylYuO6Ybk613wKVOkxm9XGFqP7 Vuz+4JrWzPbawJ5Id8uKmIPylFJvRFdW7gOlmmocHKEr6GvI25yQYsjpcTPEe/FNG58/ 4OPAUJhPu/z2AwlngSYdKi2NR4x4pXglaA0l51StBYy8K4olGO83GqnnpiIjzd8bNJ5p oCd6Iz5JQ6JBmylZq27Yk8FmVbdPpkjNuq2XoOIAsZIULQ3kZoy6lzoGBOOTwNl0+RsU DVyw== X-Gm-Message-State: AFuF++kduxIiRp2FOA/dtJnXIvyCiotzaYpIN9Jly9fmOVa8pbheOGAB mFLTrUfbvB27ptql5X4te+tvWnwMkSn0XgOCFdlssRJWEH7Weja5tN0e2H2Nd5Hx1ozNgHMwTHV 98YTK X-Gm-Gg: AR+sD11K5TlIC8Gxy/FB4aF4ijWpBQO47l8Oh6YmTNmuA2y7fDOtbX5n5dW+Wfy/Hn5 iBwRT4E2Wdbv2XBOVR7z8QsdfI86lU2A7KGrJ4Mem5c/0W6XloeDDwGovddaFQX/XR+9IJ1AhV0 i+ZEqDFa30GFRrJ2IfQqfasvzYmoqghWNweZod5LvejL/HEKyNb1QIYt4FrICiWF2XU6febLX6M hwEpirhKvR/t4EuTtSSmCQcP8rOJqxy0rGL2cqnv2+JEDUgtrD48HDuARsqQBnIYpqDxq691pMi IP13UhHE/tdy8ty5iv0Vhf4Kc9qj1rYs2Roeaf1FQnLz57vCsliv1h7WAG3BoEulEl/sA5WwzQi KnN4dMvw7Fq43ZL7S/6OQ+QONgSrqXT7ryT1TlJKmYfX4zIFtSbxDLXgQFVNMSsJ4VYxvEw0Ml4 3g+1Gg9A+/Q+wUUwJgA1YIbFYXmk9nZhK3rdLpZMmLlpNAn1v3bdcfSn+X9A8qriDN+Mla X-Received: by 2002:a05:6000:4a01:b0:47f:81c4:36b4 with SMTP id ffacd0b85a97d-482b1fd479bmr21567981f8f.14.1787220550607; Thu, 20 Aug 2026 03:09:10 -0700 (PDT) From: "Denis V. Lunev" To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, "Denis V. Lunev" , John Snow , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v2 15/17] hw/ide: revert the CHS translation on a hardware reset Date: Thu, 20 Aug 2026 12:08:42 +0200 Message-ID: <20260820100844.411717-16-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260820100844.411717-1-den@openvz.org> References: <20260820100844.411717-1-den@openvz.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::42f; envelope-from=den@openvz.org; helo=mail-wr1-x42f.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, 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 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 @openvz.org) X-ZM-MESSAGEID: 1787220665237158500 From: Denis V. Lunev A power on or hardware reset returns the device parameters to their power-on defaults (ATA-5 9.1). A software reset keeps them unless the guest asked with SET FEATURES 0xCC for the next reset to revert (ATA-5 9.2 and 8.16.6). ide_reset() applied the second rule to every reset, so a translation a guest selected outlived the reset of the machine it selected it on, and the guest that came up next addressed the disk through a geometry it never asked for. Neither ide_reset() nor, for AHCI, ide_bus_reset() could tell the two apart: a guest clearing SRST in the second host to device FIS of the software reset protocol lands in the same ahci_reset_port() as a COMRESET or a reset of the host adapter. Pass the kind down from the callers, which do know. ide_drive_pre_load() stays necessary: it restores the same fields, but a vmstate cannot depend on its device having been reset first. Cc: John Snow Cc: Peter Maydell Cc: Philippe Mathieu-Daud=C3=A9 Fixes: 176e4961bb33 ("hw/ide/core.c: Implement ATA INITIALIZE_DEVICE_PARAME= TERS command") Signed-off-by: Denis V. Lunev Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/ide/ahci.c | 12 ++++++------ hw/ide/cmd646.c | 2 +- hw/ide/core.c | 18 +++++++++--------- hw/ide/ide-internal.h | 7 ++++++- hw/ide/isa.c | 2 +- hw/ide/macio.c | 2 +- hw/ide/mmio.c | 2 +- hw/ide/piix.c | 2 +- hw/ide/sii3112.c | 6 +++--- hw/ide/via.c | 2 +- 10 files changed, 30 insertions(+), 25 deletions(-) diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c index 749f0efa1d..49f3047e6f 100644 --- a/hw/ide/ahci.c +++ b/hw/ide/ahci.c @@ -37,7 +37,7 @@ =20 static void check_cmd(AHCIState *s, int port); static void handle_cmd(AHCIState *s, int port, uint8_t slot); -static void ahci_reset_port(AHCIState *s, int port); +static void ahci_reset_port(AHCIState *s, int port, IDEResetKind kind); static bool ahci_write_fis_d2h(AHCIDevice *ad, bool d2h_fis_i); static void ahci_clear_cmd_issue(AHCIDevice *ad, uint8_t slot); static void ahci_init_d2h(AHCIDevice *ad); @@ -334,7 +334,7 @@ static void ahci_port_write(AHCIState *s, int port, int= offset, uint32_t val) case AHCI_PORT_REG_SCR_CTL: if (((pr->scr_ctl & AHCI_SCR_SCTL_DET) =3D=3D 1) && ((val & AHCI_SCR_SCTL_DET) =3D=3D 0)) { - ahci_reset_port(s, port); + ahci_reset_port(s, port, IDE_RESET_HARDWARE); } pr->scr_ctl =3D val; break; @@ -619,7 +619,7 @@ static void ahci_set_signature(AHCIDevice *ad, uint32_t= sig) s->lcyl, s->hcyl, sig); } =20 -static void ahci_reset_port(AHCIState *s, int port) +static void ahci_reset_port(AHCIState *s, int port, IDEResetKind kind) { AHCIDevice *d =3D &s->dev[port]; AHCIPortRegs *pr =3D &d->port_regs; @@ -628,7 +628,7 @@ static void ahci_reset_port(AHCIState *s, int port) =20 trace_ahci_reset_port(s, port); =20 - ide_bus_reset(&d->port); + ide_bus_reset(&d->port, kind); ide_state->ncq_queues =3D AHCI_MAX_CMDS; =20 pr->scr_stat =3D 0; @@ -1244,7 +1244,7 @@ static void handle_reg_h2d_fis(AHCIState *s, int port, * COMRESET or by setting and clearing the SRST bit. There= fore, * the logic for this is found in ahci_init_d2h() and not = here. */ - ahci_reset_port(s, port); + ahci_reset_port(s, port, IDE_RESET_SOFTWARE); } break; } @@ -1650,7 +1650,7 @@ void ahci_reset(AHCIState *s) pr->irq_mask =3D 0; pr->scr_ctl =3D 0; pr->cmd =3D PORT_CMD_SPIN_UP | PORT_CMD_POWER_ON; - ahci_reset_port(s, i); + ahci_reset_port(s, i, IDE_RESET_HARDWARE); } } =20 diff --git a/hw/ide/cmd646.c b/hw/ide/cmd646.c index d44a90a162..79ab65d64a 100644 --- a/hw/ide/cmd646.c +++ b/hw/ide/cmd646.c @@ -214,7 +214,7 @@ static void cmd646_reset(DeviceState *dev) unsigned int i; =20 for (i =3D 0; i < 2; i++) { - ide_bus_reset(&d->bus[i]); + ide_bus_reset(&d->bus[i], IDE_RESET_HARDWARE); } } =20 diff --git a/hw/ide/core.c b/hw/ide/core.c index 5a5f072630..3716cf1b5d 100644 --- a/hw/ide/core.c +++ b/hw/ide/core.c @@ -1347,7 +1347,7 @@ void ide_ioport_write(void *opaque, uint32_t addr, ui= nt32_t val) } } =20 -static void ide_reset(IDEState *s) +static void ide_reset(IDEState *s, IDEResetKind kind) { trace_ide_reset(s); =20 @@ -1356,7 +1356,7 @@ static void ide_reset(IDEState *s) s->pio_aiocb =3D NULL; } =20 - if (s->reset_reverts) { + if (kind =3D=3D IDE_RESET_HARDWARE || s->reset_reverts) { s->reset_reverts =3D false; s->heads =3D s->drive_heads; s->sectors =3D s->drive_sectors; @@ -1424,7 +1424,7 @@ static bool cmd_device_reset(IDEState *s, uint8_t cmd) ide_cancel_dma_sync(s); =20 /* Reset any PIO commands, reset signature, etc */ - ide_reset(s); + ide_reset(s, IDE_RESET_SOFTWARE); =20 /* RESET: ATA8-ACS3 7.10.4 "Normal Outputs"; * ATA8-ACS3 Table 184 "Device Signatures for Normal Output" */ @@ -2348,7 +2348,7 @@ static void ide_perform_srst(IDEState *s) ide_cancel_dma_sync(s); =20 /* Cancel PIO callback, reset registers/signature, etc */ - ide_reset(s); + ide_reset(s, IDE_RESET_SOFTWARE); =20 /* perform diagnostic */ cmd_exec_dev_diagnostic(s, WIN_DIAGNOSE); @@ -2553,7 +2553,7 @@ static void ide_dummy_transfer_stop(IDEState *s) s->io_buffer[3] =3D 0xff; } =20 -void ide_bus_reset(IDEBus *bus) +void ide_bus_reset(IDEBus *bus, IDEResetKind kind) { /* pending async DMA - needs the IDEState before it is reset */ if (bus->dma->aiocb) { @@ -2564,8 +2564,8 @@ void ide_bus_reset(IDEBus *bus) =20 bus->unit =3D 0; bus->cmd =3D 0; - ide_reset(&bus->ifs[0]); - ide_reset(&bus->ifs[1]); + ide_reset(&bus->ifs[0], kind); + ide_reset(&bus->ifs[1], kind); ide_clear_hob(bus); =20 /* reset dma provider too */ @@ -2679,7 +2679,7 @@ int ide_init_drive(IDEState *s, IDEDevice *dev, IDEDr= iveKind kind, Error **errp) pstrcpy(s->version, sizeof(s->version), QEMU_HW_VERSION); } =20 - ide_reset(s); + ide_reset(s, IDE_RESET_HARDWARE); blk_iostatus_enable(s->blk); return 0; } @@ -2816,7 +2816,7 @@ void ide_bus_init_output_irq(IDEBus *bus, qemu_irq ir= q_out) =20 for(i =3D 0; i < 2; i++) { ide_init1(bus, i); - ide_reset(&bus->ifs[i]); + ide_reset(&bus->ifs[i], IDE_RESET_HARDWARE); } bus->irq =3D irq_out; bus->dma =3D &ide_dma_nop; diff --git a/hw/ide/ide-internal.h b/hw/ide/ide-internal.h index 281d07c9d5..094772209d 100644 --- a/hw/ide/ide-internal.h +++ b/hw/ide/ide-internal.h @@ -393,7 +393,12 @@ extern const VMStateDescription vmstate_ide_drive; #define VMSTATE_IDE_DRIVE(_field, _state) \ VMSTATE_STRUCT(_field, _state, 1, vmstate_ide_drive, IDEState) =20 -void ide_bus_reset(IDEBus *bus); +typedef enum { + IDE_RESET_HARDWARE, /* power on, hardware reset or COMRESET, ATA-5 9.1= */ + IDE_RESET_SOFTWARE, /* SRST or DEVICE RESET, ATA-5 9.2 */ +} IDEResetKind; + +void ide_bus_reset(IDEBus *bus, IDEResetKind kind); int64_t ide_get_sector(IDEState *s); void ide_set_sector(IDEState *s, int64_t sector_num); =20 diff --git a/hw/ide/isa.c b/hw/ide/isa.c index c97b7a1ff4..30f02867b1 100644 --- a/hw/ide/isa.c +++ b/hw/ide/isa.c @@ -51,7 +51,7 @@ static void isa_ide_reset(DeviceState *d) { ISAIDEState *s =3D ISA_IDE(d); =20 - ide_bus_reset(&s->bus); + ide_bus_reset(&s->bus, IDE_RESET_HARDWARE); } =20 static const VMStateDescription vmstate_ide_isa =3D { diff --git a/hw/ide/macio.c b/hw/ide/macio.c index a7ed41fa26..40fb4f3b4f 100644 --- a/hw/ide/macio.c +++ b/hw/ide/macio.c @@ -368,7 +368,7 @@ static void macio_ide_reset(DeviceState *dev) { MACIOIDEState *d =3D MACIO_IDE(dev); =20 - ide_bus_reset(&d->bus); + ide_bus_reset(&d->bus, IDE_RESET_HARDWARE); } =20 static int ide_nop_int(const IDEDMA *dma, bool is_write) diff --git a/hw/ide/mmio.c b/hw/ide/mmio.c index 0de904ac56..00819d559d 100644 --- a/hw/ide/mmio.c +++ b/hw/ide/mmio.c @@ -55,7 +55,7 @@ static void mmio_ide_reset(DeviceState *dev) { MMIOIDEState *s =3D MMIO_IDE(dev); =20 - ide_bus_reset(&s->bus); + ide_bus_reset(&s->bus, IDE_RESET_HARDWARE); } =20 static uint64_t mmio_ide_read(void *opaque, hwaddr addr, diff --git a/hw/ide/piix.c b/hw/ide/piix.c index a0f2709c69..a8472f3e58 100644 --- a/hw/ide/piix.c +++ b/hw/ide/piix.c @@ -111,7 +111,7 @@ static void piix_ide_reset(DeviceState *dev) int i; =20 for (i =3D 0; i < 2; i++) { - ide_bus_reset(&d->bus[i]); + ide_bus_reset(&d->bus[i], IDE_RESET_HARDWARE); } =20 /* PCI command register default value (0000h) per [1, p.48]. */ diff --git a/hw/ide/sii3112.c b/hw/ide/sii3112.c index 9b28c691fd..03313eb271 100644 --- a/hw/ide/sii3112.c +++ b/hw/ide/sii3112.c @@ -185,7 +185,7 @@ static void sii3112_reg_write(void *opaque, hwaddr addr, case 0x100: d->regs[0].scontrol =3D val & 0xfff; if (val & 1) { - ide_bus_reset(&d->i.bus[0]); + ide_bus_reset(&d->i.bus[0], IDE_RESET_HARDWARE); } break; case 0x148: @@ -194,7 +194,7 @@ static void sii3112_reg_write(void *opaque, hwaddr addr, case 0x180: d->regs[1].scontrol =3D val & 0xfff; if (val & 1) { - ide_bus_reset(&d->i.bus[1]); + ide_bus_reset(&d->i.bus[1], IDE_RESET_HARDWARE); } break; case 0x1c8: @@ -243,7 +243,7 @@ static void sii3112_reset(DeviceState *dev) =20 for (i =3D 0; i < 2; i++) { s->regs[i].confstat =3D 0x6515 << 16; - ide_bus_reset(&s->i.bus[i]); + ide_bus_reset(&s->i.bus[i], IDE_RESET_HARDWARE); } } =20 diff --git a/hw/ide/via.c b/hw/ide/via.c index 3a77d744ca..6c0610ff41 100644 --- a/hw/ide/via.c +++ b/hw/ide/via.c @@ -127,7 +127,7 @@ static void via_ide_reset(DeviceState *dev) int i; =20 for (i =3D 0; i < ARRAY_SIZE(d->bus); i++) { - ide_bus_reset(&d->bus[i]); + ide_bus_reset(&d->bus[i], IDE_RESET_HARDWARE); } =20 pci_config_set_prog_interface(pci_conf, 0x8a); /* legacy mode */ --=20 2.53.0 From nobody Fri Aug 21 21:27:02 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=openvz.org ARC-Seal: i=1; a=rsa-sha256; t=1787220651; cv=none; d=zohomail.com; s=zohoarc; b=Qp96/lxG1H/KTrGYHf2XqzFS5nbeK+hfgJzKTDD7e76OOsfzUHIoezoPvLTJI9/pOX0vV/dY6PKZ3n2YGk0gjUCXade4kRNHCbqVtBfx9FNWDR30utX5eJiyxyr0rxHRLgIIYsLi4RY8gc489H3MlXQqliIT9ggYL6CZxYhN2eo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787220651; h=Content-Type:Content-Transfer-Encoding:Cc:Cc: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; bh=SUjBnBdV7pNp3OZVe/2+qT9iBjz7Jwd8aflwWQuaeZk=; b=Jq7EtisPKA/Xkxjfq3jf2k5TW0p8w1jIkzkxoNWoCeUt5U+YpOUSz6KRQrLyc5q39fTE2a7nFwmQcJk5IRnGA5pdzqKnCjOUvPBqgDMFoj3k7Fm3PGbBcp/daWDKzTRJu8b+LYo/o+wj5fDto/N6A0QR+7ijUVjEJmhdFjeUtLI= 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 1787220651028695.0720393401712; Thu, 20 Aug 2026 03:10:51 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwzie-0007FA-Pe; Thu, 20 Aug 2026 06:09:57 -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 1wwzhz-0006wB-4G for qemu-devel@nongnu.org; Thu, 20 Aug 2026 06:09:16 -0400 Received: from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwzhx-0008Qe-7h for qemu-devel@nongnu.org; Thu, 20 Aug 2026 06:09:14 -0400 Received: by mail-wr1-x42c.google.com with SMTP id ffacd0b85a97d-472326ca506so1398389f8f.2 for ; Thu, 20 Aug 2026 03:09:12 -0700 (PDT) Received: from athena.sw.ru ([2a06:5b06:b600:300:a123:7b43:afd8:8b47]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482b1441b0fsm11678929f8f.4.2026.08.20.03.09.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Aug 2026 03:09:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1787220552; x=1787825352; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=SUjBnBdV7pNp3OZVe/2+qT9iBjz7Jwd8aflwWQuaeZk=; b=raLfQ14K+Z1Z624EcKxcssWR2mVg+Bc4PczaGVAi6l977wh8ePR1eQUSXo8Bwjd1JF LDxXW/hMfSv5A4qBGR+0DnHZxfBrTAbWyFENEFFBC4kVCQSYmz9yrKz+zWgvOy6ZvWvD gXUSxYt7HfoeZw6f1qhNSU92L9rvoatCH7WeZoF8EW3ubcOBAsuJLbQEZNEjKvmtEmQE ROmqw58EH4lq1NJ4tVt2sC88ROak7K25bXl9f37HMExjcE2EJnP19pz4CGW28PIK4CGh NHGpTzeT+47wepDVf9iyguJ5CYzhfFc2IDvzW1AQJXDGfIHL+0Lt8v8IaGEUy5Dn7sRE iXAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787220552; x=1787825352; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=SUjBnBdV7pNp3OZVe/2+qT9iBjz7Jwd8aflwWQuaeZk=; b=kGP1SYnZUP+YId9ek46UlrUwhv8Oa72RGGRbJJAcsk5SOqSo84IVrMX1VMjwIdBpzI eJMvTZbMQ3oKPLLTWdovZlZ9kNISkjdXuBi/dMlrHUNCan7jn9FzCqK1/ZAfGvs0F7oN 1LbRwEs9eAMA4/7YzK4VIOOZ+OLuh05eydyCz8nYA0/rAgESDCltix894jlPo2Y2Op8P wLXc+phh4B6vaIpvCb2JoIPf9wb/Hj7lOxDROfJfkXxf61li/wP6EuI8hfrhdyQnOlc/ x+ol3L8M/L6pXD5MpW9V4ssYVqOQMFRKRXi1JVkvmRHaTLN633tzwP66HOtmj8zwD/mF uFWQ== X-Gm-Message-State: AFuF++kxeqRaW+HdeV7eBukRtAX88/5M+VRkfrNIW0gClSLmRFMwXWg+ Gag7Sa7QCy6Dv35mfB3br5y3JEYUcr68Pryla07ICwTMs2/b8j28QrzlslF1PQ6kyafqDTbsKqa Mhsx/ X-Gm-Gg: AR+sD11s3hCbzvMRWON64rMAiRw9qVA6DBWHfLKQN1Y4jgXD25RfdfSUV5/xYefjnKw QjifXCkFiS2DoIrQ3vpGKLvaXTwDKSzn1wtYe2MsDz8wmy+TVslccC6zuLVswigax+Sl5nAJbpr YJv4plzfXULX2DCTvHdnbBAvdXiXbF8qIvj132tEQHSCQMzbLAh7/J+tTxYM6bl5rYg6opnqhmF pFIjNqsUr1wsqYG9qDvVW9m8TpJ/oUBd9u7M76yngXlnXOgh4xnpN/8AK55vZTrhp3oSYQ8ptp/ MSJwlo1UcR0YJhDxZyyN5cY4AjXF9gzWaH7k+lI7Feip4sCX4piP+ZnoIGAL5rzqsA5yltH2v0T LhEXhpIp6m+4npgrlCNqy+5p2h3eYI2c90hzfQlHnurYrcygzapKzqRR1YHfMaXDlex22Is2xj3 eHz500gtlDj7s00ipkyy+ie4siOYhwuDWDfuPOvGlxvn3/gUNC53UDDPohOg== X-Received: by 2002:a05:6000:715:b0:47f:86d5:d1d7 with SMTP id ffacd0b85a97d-482b1e957b9mr22728480f8f.6.1787220551767; Thu, 20 Aug 2026 03:09:11 -0700 (PDT) From: "Denis V. Lunev" To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, "Denis V. Lunev" , John Snow , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v2 16/17] tests/qtest/ide-test: cover the CHS translation across resets Date: Thu, 20 Aug 2026 12:08:43 +0200 Message-ID: <20260820100844.411717-17-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260820100844.411717-1-den@openvz.org> References: <20260820100844.411717-1-den@openvz.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::42c; envelope-from=den@openvz.org; helo=mail-wr1-x42c.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, 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 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 @openvz.org) X-ZM-MESSAGEID: 1787220653025158500 From: Denis V. Lunev A translation the guest selected has to survive a software reset and not a hardware one, and the two arrive at the same ide_reset(), so a fix for either direction can break the other. Select a translation, put the drive through a software reset and then through a machine reset, and name the sector each translation picks along the way. The marker read says which translation the device is addressing the disk with, while IDENTIFY DEVICE words 55 and 56 say which one it reports. The machine reset leaves the PCI command register cleared, so the device has to be enabled again before the ports answer. Cc: John Snow Cc: Peter Maydell Cc: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Denis V. Lunev --- tests/qtest/ide-test.c | 46 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/tests/qtest/ide-test.c b/tests/qtest/ide-test.c index e7a56e0710..f14a0851f0 100644 --- a/tests/qtest/ide-test.c +++ b/tests/qtest/ide-test.c @@ -1639,6 +1639,51 @@ static void test_specify_identify_default(void) ide_test_quit(qts); } =20 +/* A hardware reset reverts the translation (ATA-5 9.1), SRST does not (9.= 2) */ +static void test_specify_reset(void) +{ + QTestState *qts; + QPCIDevice *dev; + QPCIBar bmdma_bar, ide_bar, ide_bar2; + uint16_t buf[256]; + char marker[9]; + + qts =3D ide_test_start( + "-blockdev driver=3Dfile,node-name=3Dhda,filename=3D%s " + "-device ide-hd,drive=3Dhda,bus=3Dide.0,unit=3D0 ", + tmp_path[0]); + dev =3D get_pci_device(qts, &bmdma_bar, &ide_bar); + ide_bar2 =3D qpci_legacy_iomap(dev, IDE_BASE2); + + ide_prepare_markers(qts, dev, ide_bar); + ide_set_translation(dev, ide_bar, 8, 32); + ide_read_chs_marker(qts, dev, ide_bar, 0, 1, 1, marker); + g_assert_cmpstr(marker, =3D=3D, CHS_MARKER_CUSTOM); + + qpci_io_writeb(dev, ide_bar2, 0, IDE_CTRL_RESET); + qpci_io_writeb(dev, ide_bar2, 0, 0); + ide_wait_clear(qts, BSY); + + ide_identify_words(dev, ide_bar, buf); + g_assert_cmpint(buf[55], =3D=3D, 8); + g_assert_cmpint(buf[56], =3D=3D, 32); + ide_read_chs_marker(qts, dev, ide_bar, 0, 1, 1, marker); + g_assert_cmpstr(marker, =3D=3D, CHS_MARKER_CUSTOM); + + qtest_qmp_assert_success(qts, "{ 'execute': 'system_reset' }"); + qtest_qmp_eventwait(qts, "RESET"); + qpci_device_enable(dev); + + ide_identify_words(dev, ide_bar, buf); + g_assert_cmpint(buf[55], =3D=3D, 16); + g_assert_cmpint(buf[56], =3D=3D, 63); + ide_read_chs_marker(qts, dev, ide_bar, 0, 1, 1, marker); + g_assert_cmpstr(marker, =3D=3D, CHS_MARKER_DEFAULT); + + free_pci_device(dev); + ide_test_quit(qts); +} + static void test_cdrom_pio(void) { cdrom_read_impl(1, CDROM_PIO); @@ -1714,6 +1759,7 @@ int main(int argc, char **argv) qtest_add_func("/ide/specify/identify", test_specify_identify); qtest_add_func("/ide/specify/identify_default", test_specify_identify_default); + qtest_add_func("/ide/specify/reset", test_specify_reset); qtest_add_func("/ide/migration/chs_translation", test_migrate_chs_translation); qtest_add_func("/ide/migration/chs_snapshot", test_migrate_chs_snapsho= t); --=20 2.53.0 From nobody Fri Aug 21 21:27:02 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=openvz.org ARC-Seal: i=1; a=rsa-sha256; t=1787220738; cv=none; d=zohomail.com; s=zohoarc; b=YUvI37A99N1hTpw+/9WTelU86LT2zl20+OuCh3WSO8Mt6UtSFjxayAGGtubaJciZOkYyMKZju0OCnq31pBJPJ+EXlvE5ZTq8+sjDzzKzvBVaMS1EvLtEWraHvcjWq60zcmqm+vLPvNUDZJjjuREaIqNubN5WTbOgMs+8kF3/lCc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787220738; h=Content-Type:Content-Transfer-Encoding:Cc:Cc: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; bh=WcmpiKwGOoXcyKKwlQmkccNObgR1BKUZnZ4d38IauyA=; b=EYUB/cYCqTiCAVsINb7IbSMg5VOqdeG4oe0kjM+RZlSK9IVwyoQ+m8kucZaTsXD9bHnt7+VOPCY6WIok2zMLNvP2oZh3B/U3BUXW1+ftmW1wAQepIu95sgqcIYzHRtpezqpridEQ5NH7CXsSEXv/llmTBlNM+HhjBVZbrOvoGls= 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 1787220738093186.87508259796266; Thu, 20 Aug 2026 03:12:18 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwzif-0007Fa-7D; Thu, 20 Aug 2026 06:09:57 -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 1wwzi0-0006xK-B3 for qemu-devel@nongnu.org; Thu, 20 Aug 2026 06:09:16 -0400 Received: from mail-wr1-x432.google.com ([2a00:1450:4864:20::432]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwzhy-0008R8-Rh for qemu-devel@nongnu.org; Thu, 20 Aug 2026 06:09:16 -0400 Received: by mail-wr1-x432.google.com with SMTP id ffacd0b85a97d-47f92e3c14bso1751213f8f.0 for ; Thu, 20 Aug 2026 03:09:14 -0700 (PDT) Received: from athena.sw.ru ([2a06:5b06:b600:300:a123:7b43:afd8:8b47]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482b1441b0fsm11678929f8f.4.2026.08.20.03.09.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Aug 2026 03:09:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1787220553; x=1787825353; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=WcmpiKwGOoXcyKKwlQmkccNObgR1BKUZnZ4d38IauyA=; b=K0tEx2E5iIpJkG3mITU3s7iJU96gXANJOSvjxa8SUYAg2ddg22WcaYhlw3SwrxzDZ9 IfqjXMDRiW7kW0MN09JOd+meW2ZZS06rkCMv/ReAh0CPwbWawYia7X/kou+J1jix1rtg 7ySpgUGk4gHqfjoYvJvzWJbUyjma5TqMOCj8M+Sd+bfchsGAFUoHwHArHGZ5Xzstx/MS MklmOYaPJ/vkjnyxCb69B0IFEUv9OuosRjVABmqnPq+THM7hdvAZPlU2X81kl0jdr12A oSrc5erxPDj0YNHYOTFNBR/DwFiL3MO1Yj6VYUWgLP8bIlHlTTz35vkDXg2kfpBO5vCZ EHEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787220553; x=1787825353; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=WcmpiKwGOoXcyKKwlQmkccNObgR1BKUZnZ4d38IauyA=; b=RNo9OSMIt2DQ1zRaHv1d3lrdQsuwPY0fQP0ymhPHEUh7TV2iNeRYA9/wFC2xWefa/n 9kY01gDDQNPuLGWN7ZdSbr7P0nYI/8u4no3JA/sHgrwwReFAHfmgn7YipsVaEUbhWP38 sIcN/TehRr2DkrIeL7hs7xJt3Ql7UVqOAmJJoLK1LP7gm5XWUhmYS3oJBpPV16zAR9cX O4YQ4rhtpaMGPVF1HYVPCiNWuG7TTYqzrchMu0FZauVo9ymZRFzaIotRmT4VHmpCvHph wBdDleKdpahCHPruj+RvJRGLrDH0OwuyYaFXMe+4y0aA1lAPn6LJunMHrBSLsk31yen4 UoRQ== X-Gm-Message-State: AFuF++kWf3GYeqjW/cGKim8GaDVJgCpSAq4qDkSELuYTUKo4MdCzxbFc F0IY9ORmpg7IkY377saGoVNrose8sjTnnYng7Cvd5yU2KbJXHcnz0skfdNQ2S1b3QWJmDD5QmeJ bpio0 X-Gm-Gg: AR+sD12jA7u4CvnyzcEeNXDC861upD5davAdt4URloM+D5IU5/2Bd7OhDwOf6cVhr2Y jxHH3ZdnA7mTdBw0/dPWd2JWab4N8reF81ZzgoXD+BtgPv996We1z4VkxVyNzJWBebJsiv1zM+D TJ0Wq+nibW1G7ghxyjqINsmnqt7TWVnvdwHJrPv1bFFB+jgajUXCBe9ZuJ2ITa1RcAP3NGTTcbb qV48yg+jNwUNEy9bmVBl0RWBPKZ6ydoHSPr5hM3yw//i47hBMr1V6E8cyTBTsjx5pI3FCod+0oF oGdUFk7PGmzSSTn6C3h5tZPPfhj8YpwLy98Ol/q77tnBkCfHhsBxU4lm0RpFyBYZqmA9RK5rfEp 5ttVOCrfPS75Stxv33NenXrMMYbU4+IxmTdZXHvsc1aXBITKUmcy7Ptpsjb1IqNjZmZed6f+TuM e2v3V8MGfVeF9lg5c8cagYiSQQ/vtZSXUsczgStoiIYOccn7pu/8rs9iq++g== X-Received: by 2002:a05:6000:2881:b0:481:5bce:4485 with SMTP id ffacd0b85a97d-482b1fdb029mr19822473f8f.13.1787220552989; Thu, 20 Aug 2026 03:09:12 -0700 (PDT) From: "Denis V. Lunev" To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, "Denis V. Lunev" , John Snow , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v2 17/17] hw/ide: drop a redundant interrupt from INITIALIZE DEVICE PARAMETERS Date: Thu, 20 Aug 2026 12:08:44 +0200 Message-ID: <20260820100844.411717-18-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260820100844.411717-1-den@openvz.org> References: <20260820100844.411717-1-den@openvz.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::432; envelope-from=den@openvz.org; helo=mail-wr1-x432.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, 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 autolearn=unavailable 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 @openvz.org) X-ZM-MESSAGEID: 1787220739361158500 From: Denis V. Lunev ide_bus_exec_cmd() raises the interrupt for every command handler that reports the command complete, which cmd_specify() does, so the request it raised itself was the first of two. The one from ide_bus_exec_cmd() is the one that belongs there, being raised after BSY is cleared and after ide_cmd_done() has let the bus master post its own completion. Cc: John Snow Cc: Peter Maydell Cc: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Denis V. Lunev Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/ide/core.c | 1 - 1 file changed, 1 deletion(-) diff --git a/hw/ide/core.c b/hw/ide/core.c index 3716cf1b5d..8190549ee8 100644 --- a/hw/ide/core.c +++ b/hw/ide/core.c @@ -1675,7 +1675,6 @@ static bool cmd_specify(IDEState *s, uint8_t cmd) if (s->identify_set) { ide_identify_chs(s); } - ide_bus_set_irq(s->bus); =20 return true; } --=20 2.53.0