From nobody Sat Sep 26 23:53:30 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=1787000033; cv=none; d=zohomail.com; s=zohoarc; b=QFkpjli6VZ2t0seFZelaY3HQTPwUNjK86tml7kLgIrAr162Siql0dZ4pbaUoIWtbU1fAVuAOZMMJfFE+wD7uYuqedmmBVGLSv4SoGM4PhcJwN+F5dJcsiGmm2a41t1DzXq6J7peE0lZ3xLuNxU2olUX5qsNav9spZAKNk5PHCrw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787000033; h=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=L+gW1wiFrC5AU2FvtCfTO+raYkF74Y7Owuy0sVGpL5Q=; b=mjyS89Lg8UKfPhDTGklfkXl96saIciKOHjZBvidTiYFUOYv4sVPSMzVePtyfL2NUjWyadVTki5OKZOhJwUPwlUu6POXuz2IiK1brGS37SvpBqmTc+P2vX3w2J7RYMePRFy0zCSRSSUraXc9ANjqgArR6r8MCEQISRycg16a1JDU= 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 1787000033266467.84259672717576; Mon, 17 Aug 2026 13:53:53 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ww4KN-0006Yj-O6; Mon, 17 Aug 2026 16:53:03 -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 1ww4KE-0006Vm-8n for qemu-devel@nongnu.org; Mon, 17 Aug 2026 16:52:55 -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 1ww4K9-0006eE-Hx for qemu-devel@nongnu.org; Mon, 17 Aug 2026 16:52:52 -0400 Received: by mail-wm1-x330.google.com with SMTP id 5b1f17b1804b1-49554ebb87dso39085705e9.3 for ; Mon, 17 Aug 2026 13:52:48 -0700 (PDT) Received: from athena ([2a06:5b06:b600:300:f6f8:884c:b162:eaeb]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-499961098cdsm202573365e9.6.2026.08.17.13.52.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Aug 2026 13:52:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1786999967; x=1787604767; darn=nongnu.org; h=content-transfer-encoding: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=L+gW1wiFrC5AU2FvtCfTO+raYkF74Y7Owuy0sVGpL5Q=; b=Ij/PxbZ+BDcKuMmgAg9aBHAhWpLL8OTO7Gzlttcf52mNIi9hhOowv06SqpAx8blgsF 157GHZAsCp3+A3xPkbSdC0hIJwiuCO1NDk9QRBF6oZSt6nu5SgDGmMi5+5U/CP/ebFZl 0A28q/kP3SQlzXcrAFr5EnzC+YpbErrjpA/vs1BIMq0tmGwcD1cjqbe8fVcnIlKULYQ9 DEQAWIWGLATLLYuDLgKylHa4h8wn2u5iU0SVYn9cgfDYC2ng/Dn7HYmvMzhtVMS/bmZ3 s8YRCIVal/KeyXnIliQ7ppSPXDDBZA2mk48K14SiUiJvWj6x2p8YTeW8U0EjJ2ObuBy2 DXzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786999967; x=1787604767; h=content-transfer-encoding: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=L+gW1wiFrC5AU2FvtCfTO+raYkF74Y7Owuy0sVGpL5Q=; b=hf6KkwX2ILSt0HqnVYDjMOSLrIAYRn9ze67w50VUmAdatREFtq1so0peJCCDHXeEet nFY3FnJTRAQ06Gc4niLlTYjwgUXBk29Q3NBmLQMfT0OQAgxLLMK1T4VUrj6YMdHZPrGo LwfHK8usD2h1wZo2TnfMo4bsAXRh+uiF7qW/0WZGmFt6uRzee8z3xrCj2g5C93XS7gOT wp1uDUpZvBIrosacBl8ny4tDF1aDdLk/VgMNNWy8UJujBFTpq68C5kbjAZMhPgKCiKwP zNPyqVMU+ZL3JhoZWMbT1zTQHPCV7oWwp8eq7TGdCVVLXMbjlY0L9U1bMAIROxnHkCAu CZug== X-Gm-Message-State: AOJu0YwznlyeR0xRti9eIb6zWz3FtVvfF17RohDCZ6UBEyAZwjGUKR2n cdGrEuvZwLtPBzsw/QA3d3GXAeJk6UNne4NeIXPSqk8yBW5XHncc19KyWDpv6opG/SIN9HKH48b L5jUt X-Gm-Gg: AR+sD13OCC51EvbAJTBjmQvIcM07HTtI8kIqCZNUSddhKNQCu1tkqaTcwyPEH+kj+GG x/riQVrnDzoNjXJS807mSb1VlGXjU1KVjI8M4MtmL6cJ0Dic2/xmz+8ttE7u7IaHqltn8o35fCq toZKech9nfE4ikYcaiVdHxmwz76V81kgVC6tjoJhh6HFej0IZved3qZ1Jor1t2+/TDhtRRK136n WrAr/zwf6mtattlVgZv4yjwEDztvVC62HweJbWieC0eb/1FClUPJ+WfR1hysEXjlpPVfaVdK9tN IONg2gBfbJ3ZlL5N9jRNwC2aZMYZYqzSaFf3Y2w6c7rft5E/scgbFz78s6Z5CPXNMZQqQJHdViA Fe92vWvmCKx3npHLEH6pbhiYPDunMoGF4v4HOffdpphrRRWxYClHdlrh1bMk01nK4KgvIB/nEUJ GGBDZEof2sLo0FeZA37x5GNraCkADy0mnjTomGmQUyTUVUBbMNcik= X-Received: by 2002:a05:600c:3596:b0:499:8ed2:8234 with SMTP id 5b1f17b1804b1-4998ed286c1mr336939505e9.0.1786999966993; Mon, 17 Aug 2026 13:52:46 -0700 (PDT) From: "Denis V. Lunev" To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, "Denis V. Lunev" , John Snow , Peter Maydell , Zheyu Ma Subject: [PATCH 01/15] hw/ide: reject an unsupported CHS translation Date: Mon, 17 Aug 2026 22:52:28 +0200 Message-ID: <20260817205242.1199851-2-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260817205242.1199851-1-den@openvz.org> References: <20260817205242.1199851-1-den@openvz.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=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=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: 1787000035543158500 Content-Type: text/plain; charset="utf-8" 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 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 Sat Sep 26 23:53:30 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=1787000033; cv=none; d=zohomail.com; s=zohoarc; b=g9eF9OPuoiS/nnvp2lGmlw3lSzVSXMVQPG1vFHHBGZuloED4Nvk5LpomCHVxNKZDlTUDRPQLNUROMCYjxwUnF65HQFzn/RNjtmzeMjoIm7pGJ5b0WbbSaJoWGcbQ0aICNyPRwP1dxpJIWvAOqEUTxq8GuXh52Nl3xd+Ew643kAw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787000033; h=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=naDIb4FK/KvbgaMRnDaVmLTTTNzOICwYxY4JYTI+MY4=; b=WxwFcVdob7ztJAY8YayFVFbS6Pi0/PBv2s4ko0CRE4iF7vRRqTwL7ELCNwMW7Q31xX8eau7n3xBX4pnr53s4kEDbwUS+AzBQDbN++GeELJVifeljV+8VsXLYVMQDQJJfZqbrO7k+rcjKK+H6GWMpXIk56sxpFxnOoTvxqTzM0O4= 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 1787000033198981.8892874310833; Mon, 17 Aug 2026 13:53:53 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ww4KL-0006YE-JN; Mon, 17 Aug 2026 16:53: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 1ww4KE-0006Vo-9Z for qemu-devel@nongnu.org; Mon, 17 Aug 2026 16:52:55 -0400 Received: from mail-wm1-x32f.google.com ([2a00:1450:4864:20::32f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ww4K9-0006eO-Hi for qemu-devel@nongnu.org; Mon, 17 Aug 2026 16:52:51 -0400 Received: by mail-wm1-x32f.google.com with SMTP id 5b1f17b1804b1-4994c49f588so3538015e9.0 for ; Mon, 17 Aug 2026 13:52:49 -0700 (PDT) Received: from athena ([2a06:5b06:b600:300:f6f8:884c:b162:eaeb]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-499961098cdsm202573365e9.6.2026.08.17.13.52.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Aug 2026 13:52:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1786999968; x=1787604768; darn=nongnu.org; h=content-transfer-encoding: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=naDIb4FK/KvbgaMRnDaVmLTTTNzOICwYxY4JYTI+MY4=; b=Fw9v/Bqk/wgjvtZfPzDjCQbtQsyE9kc06XB5Hc4R5DEGkIKvh8bpEHDS6jk6QU7Cx2 dmcW8nLuiQyTj+HRdmTvzC/HgHWPSXy/XPyiV9WybjvVvImMu0cPXNlvtNkphBCLEt0y 471wI3vCTk3PBiBI+iOS+e6np8+b1IkCm+NqN5HiOIYesQkJwu/5kTKn6INTS6SiFIiV i4CGjlwwnGbR5E/EZcyPIJpBzcW4MTUi+P9B5uq375gAWcx58/Npx/VtXP9gpmkHYaUr QFnDWjTpsTO4TSGSABID/7wTr5I9ejQSM31R9rJA8aeUK1x4qum3dN3fqIaCdDN5NtHO od7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786999968; x=1787604768; h=content-transfer-encoding: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=naDIb4FK/KvbgaMRnDaVmLTTTNzOICwYxY4JYTI+MY4=; b=IFLAclJaGrD7ePPaJF5mvJcw8hPJTsDk6MZsIzIQ85W/Ci5tZPAzf0JGSWm9oZPdm2 16qhcVFxQycLEbPMvqetZ8jfxpWHSj2t2zOa4X++zS+FiXosHH+xab4hWAN8n5l01zUz AyA3ZrXFagasMQ5I7f1daTupI5k8HTMC46I5Dthz9qGn0hT90VMVgolD+i6/vSX424BJ uC5aim/uatu0z/MWvXYsgsVVDR5tQpWXBI16dY9+aTcSec6YEEpdV7YfvM6P+JTb44EC tXihy8tecpLz8TGLFKBjlEnlsaEaUwT5I2kFzUpnRlyTpuPPGuiCGlxK5uJYwklSFiUg iQWg== X-Gm-Message-State: AOJu0Ywwvbaa4ipWPznWiksat7EfAIIQmelsIEvVdEpbGBpANVo0Y0ok 7WkbV7P/NiA2qGnuoFbyeC9KRQ4w1HzrM2Bv2YJcgDIZ1yL9avOlnFHD0KZMJiN0zGJ0rtLOesY A8n7E X-Gm-Gg: AR+sD12ifgZzQ2E3cG4ZeriKequuhz6JTYBGvRZM+38vLieaTlZElkzvCBX1L7Cyp83 8P9W6AS43SePrpYdnzdRFimEzbzb3m1SmTVzu2pBjEmI/+X4dIZgy9IfUOuNBT5hGsgxDPmDfKJ j5jF14a1mEuJ/j13gsbyf8O9p1o2eV/wPCSIZdugkpcJPfJvzSebbbHf77dTJvxJ+viFA+f5r/J kpfbUYm/K2tyVERCDOKEAtWtOEXUGiW08aVOCY2C/HVa0VQVJEOvtSsTVGeZx0DMq3zY6sUA2Mr IgCnjzHEoh2vq3MmytST2yCJDDdIAcc7AWa2V1QUFJmpUtrIimj14cLp7IybSQpp6CslmU28ddT d+geCTv2DeQkGonkNzP8WoYp6XtGCptZDQ4Hrq6ArKbFCCbd+6EO8npq1vwlChAgV2Fy5HUpIO8 BnVZZJXNGuNTwAlT6VOl/ZVSJB9vjTsLGl8f3vTsogHiKE57lVog== X-Received: by 2002:a05:600c:468a:b0:499:596b:2e91 with SMTP id 5b1f17b1804b1-499a205b082mr5811025e9.3.1786999968146; Mon, 17 Aug 2026 13:52:48 -0700 (PDT) From: "Denis V. Lunev" To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, "Denis V. Lunev" , John Snow , Peter Maydell Subject: [PATCH 02/15] tests/qtest/ide-test: cover a CHS translation with zero sectors Date: Mon, 17 Aug 2026 22:52:29 +0200 Message-ID: <20260817205242.1199851-3-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260817205242.1199851-1-den@openvz.org> References: <20260817205242.1199851-1-den@openvz.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::32f; envelope-from=den@openvz.org; helo=mail-wm1-x32f.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: 1787000035512158500 Content-Type: text/plain; charset="utf-8" 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 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 Sat Sep 26 23:53:30 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=1787000033; cv=none; d=zohomail.com; s=zohoarc; b=HpkII7OS6JZYOdmQFhqs7UQBzRbsQjn9+gIngDRCnDCf2Vclfn2E37Se1SM+iJlH7tG7t3jN4/Nsv2L2qzzU4CMHhWRNh3lbDQuj35aY28MoXBBJJI0oS8oBowAAEctvBTWbUyOn9rxMtzrpF90EtQ1BuCKRWqGm+kl7jxQJZPI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787000033; h=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=vpkq/G5Q4hMxPZhmoLn1PK51Ug+tQDlDEmy5ber/qUE=; b=Z2XWwsG3kUZpE9VicgEy+d41TiIAVndYr0P6Gh71MTRpUNnfeCvlR/Ol/agnlmf7bC/DjCfN/2SW4YRyUQqAJR4hyWGKvd4JnPULJjrIHE3f0NJ2p3dp99boK1PgVJ+wv3klui5c1eGDsHREkseT63wtY/0u3aib7xRcG0CZVpw= 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 1787000033371581.2380307470916; Mon, 17 Aug 2026 13:53:53 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ww4KS-0006a7-II; Mon, 17 Aug 2026 16:53:08 -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 1ww4KG-0006W6-BW for qemu-devel@nongnu.org; Mon, 17 Aug 2026 16:52:57 -0400 Received: from mail-wm1-x333.google.com ([2a00:1450:4864:20::333]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ww4KE-0006ee-09 for qemu-devel@nongnu.org; Mon, 17 Aug 2026 16:52:55 -0400 Received: by mail-wm1-x333.google.com with SMTP id 5b1f17b1804b1-490cf322ed0so36202025e9.1 for ; Mon, 17 Aug 2026 13:52:50 -0700 (PDT) Received: from athena ([2a06:5b06:b600:300:f6f8:884c:b162:eaeb]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-499961098cdsm202573365e9.6.2026.08.17.13.52.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Aug 2026 13:52:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1786999969; x=1787604769; darn=nongnu.org; h=content-transfer-encoding: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=vpkq/G5Q4hMxPZhmoLn1PK51Ug+tQDlDEmy5ber/qUE=; b=fH3UVD9xOhBxp3WMCrg8HGL/4gvHrfJtZY7CM9t/3B5v7iUm7UFevpkq9dBk8ExopJ aqj1KybeQ7IiAq2YoABdmcjn9gX0soQ1ZuRNI4lEsKehjOvw4qDYannlDY8cXQZ8DuMm PBQ0PiPz6n+4q41ik8rEAFtv36REmFIonkldsCJUUwv3b0UZC0QhCJ+t9cp8Wlfxbgds bAVaTu+Q4OHaXW9FN1ZKIw8FLtVsD41oRb+dZ4rmEJplENml0n9+ynPipCPwXu9L90l9 NiDs3+AIJAAKaLZ4ZA3LFY9uWZH1ovultawrvfbHZ0KDByH3nyMnybEnm3G4GdC0s0u6 VBmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786999969; x=1787604769; h=content-transfer-encoding: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=vpkq/G5Q4hMxPZhmoLn1PK51Ug+tQDlDEmy5ber/qUE=; b=grHynTp9vIibm5OdoRER4iwpFp+22thM07BFutJSOeXNe2AUUFFJ7wUAGwrhNCbWOW piBkjXOpcErSi/9/P6niA0lABTKMPkgyGzPgRTi0ZQjpGNdA9E2Iiuvq+uKAgSqz3vca Czu3/nzhyjko7Hfr/WRiNmb41j36J9IBnrCeUQTjvG0mGM2GnbR2GpR9MZlyp0fWDAR1 PKCkAyQpwR6uw21kLUtBLZXatity50i6TsTdt/5sccj9p6Wqb6dW+Zv/7TcWz1MTHCGQ 5ULxzl2nsOOsy9XAkK7jELZkmPj3YYtkSvtv9kkrYZhauGOyZnU9u91nF9r5yRoj6CXH oo/A== X-Gm-Message-State: AOJu0YyomInx7HgpphX2p8l3sfDqg/7arhLN4PdselKLVmrcQhby5vn6 6hDm4u+pHI3W0ilR59s1+z3dnrObWus+0bPn/ctFxrGhRujBxBcPS6cCvRYngWseIyATSyff5lE Zj+J5 X-Gm-Gg: AR+sD11ZRKX3jhMOGJEUVbHi45oJU3dPuHifIaLFi78ydfn1d9BYD9lfT02YtLwjHWi ztwXSdEwuPL4JkTYDi/U41vvtGNyYqxVy0YKFzqPdC+KTR9o3DNQ6MmoIYFY2CBczjH3E9ML76l POC8+qGnlHvm7RdMm2KMHa4FiVzEUzIvEcMIjedXg+F42/6mL1cGY2fJe21F9JbYwn+Zq8x4xi4 mXVNb7rvnW7WiwrmaG69AVfpK/trvjOZqjErrQTdvnwwUG7gga0KC0/TDLW2dcWNRbUjJTGXmgt 0nfU8qp6vDDhRwH1X+gU6p2VFDWgoSS2F9D1l8Z2FMISTxxngDsV/+y1WtHPkr5Jfs6NIyvBGAT 53ipymd7qGDiWjn092EVn7FyVZWAZ7yb4epJ2nNa/717HO2j3lvyPUqgp9adXiI00L9HTVSrSyn b534FKiLpGIc+T04e11qbHklWWy4+SOjahB1tbg6pVHNb+LzywXA== X-Received: by 2002:a05:600c:3acf:b0:499:728c:4704 with SMTP id 5b1f17b1804b1-49987979c41mr466104425e9.12.1786999969196; Mon, 17 Aug 2026 13:52:49 -0700 (PDT) From: "Denis V. Lunev" To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, "Denis V. Lunev" , John Snow , Peter Maydell Subject: [PATCH 03/15] tests/qtest/libqos/ahci: allow a count and an expected error Date: Mon, 17 Aug 2026 22:52:30 +0200 Message-ID: <20260817205242.1199851-4-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260817205242.1199851-1-den@openvz.org> References: <20260817205242.1199851-1-den@openvz.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::333; envelope-from=den@openvz.org; helo=mail-wm1-x333.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: 1787000035543158501 Content-Type: text/plain; charset="utf-8" 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 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 Sat Sep 26 23:53:30 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=1787000106; cv=none; d=zohomail.com; s=zohoarc; b=cnlbwDLecRR2fV/G2jpO6ufIzsb/8vyIW79lRVjdCMUoi0z7XKoy77sgYADqWT2pSDpNC1UELG13glt99xzm9x2jrXK5J1PEC2OAc7V+lpN0dBYNe1iYZTHtPVtSOlq8qs96OscUi0+oJPsoJg3gvNKc9vrLSdlUUN90oNPeziE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787000106; h=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=tV4WIYxXJUBI3Dbou01c42prXSCR/C3ZLm99S9w6d1c=; b=kHHbfOw+LoUrbgjQxRmCRMXhS3nuu9Btue9oyoXD5Q3B9bjGWXDv2F204y7F0twJI9IkDA5oI1FJyXpSHeezQ17P6fti6b60U5HRz0bdFfOctXvKCvyzeP5I+px+ctoVr3YyQlekpBY5Q+DSY6Vk8nSsKIEJSnqWDC5GgU0/UsU= 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 1787000106877827.8149999535009; Mon, 17 Aug 2026 13:55:06 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ww4Kb-0006cQ-7Z; Mon, 17 Aug 2026 16:53:19 -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 1ww4KI-0006X0-Gx for qemu-devel@nongnu.org; Mon, 17 Aug 2026 16:52:59 -0400 Received: from mail-wm1-x32e.google.com ([2a00:1450:4864:20::32e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ww4KE-0006et-0i for qemu-devel@nongnu.org; Mon, 17 Aug 2026 16:52:56 -0400 Received: by mail-wm1-x32e.google.com with SMTP id 5b1f17b1804b1-4980fe6b3beso2297635e9.0 for ; Mon, 17 Aug 2026 13:52:51 -0700 (PDT) Received: from athena ([2a06:5b06:b600:300:f6f8:884c:b162:eaeb]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-499961098cdsm202573365e9.6.2026.08.17.13.52.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Aug 2026 13:52:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1786999970; x=1787604770; darn=nongnu.org; h=content-transfer-encoding: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=tV4WIYxXJUBI3Dbou01c42prXSCR/C3ZLm99S9w6d1c=; b=jUaWfZQrpWSz8aY3jVcdruh4pfENyAX6RXIkUbSZOOa4DFCFt+EFELpWQKGsPk9364 VoKqBGL0li2k63GpJ8u/lQf5bk3xe3mY+3Yyy8DYQRnd8IHPnYvqC5gseNH+7jXQYYG5 qj/uH4TR+QrGP1n68W15Uv2EehhjUnaL8LSAmRplFQxwrBpqqvv5LjKbJi5smJDXAD7C 3oBaW/4+f8oY7Md/p0+3soNs92AdcmhXCl/JLosU32g3iePDTG9b1/Szh+uWnUvytdPQ iviQSwXRiYnTZ3FzHcgfTWJVtiO2kMAMT8ILedCbQqSPsFhirsLLr5GiCbJ3t0oG8JnJ v1qQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786999970; x=1787604770; h=content-transfer-encoding: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=tV4WIYxXJUBI3Dbou01c42prXSCR/C3ZLm99S9w6d1c=; b=nukcy2o7RVT3dFS/7RTuTBSZ87eqw9ZtyofRZICKrnbkjYFjJh6Sr+A/6q7y1gBldR o2aE/+ky7mMsZ9OSt70nirZ7/loYH7VOB/JtPRbX7qo4G6DBmgrlz+i9QygxqL14How2 aE+1hItGEj8DzQtpQPBKRr8ApMDQgZnTNCWBQCs0wWw94nb4tCHbcVyrLxc2p5ufqhpS oSCAGFVGfGAnu1W/yFAsSJobihZDTa2AI3ZKdMQwjQjH1PuLnm3hXL0yWd5fEnDNXz70 S9kokyRa27cyOYyht5KFXOKeWTqGoK8RpNkppBKz+56T1WNvYb6MBJLNjI5Gy5jj7aSR a8kQ== X-Gm-Message-State: AOJu0Yx3dwWJ5LDhhAuKKSjUO6O8Wb+RKnU+SokvnCjMgz8MALVkcaL5 po5MUgCD54nm84Ez3f+JsWd4nZm7plRRlJJYe6mUI6MpMJ4oTQ+Rg7pALp1V9Veb9MHgRjP4ojK F/fhb X-Gm-Gg: AR+sD13WcQfy/d9HSs8dfW71OCujISA2ZB0A8KpcVUp47D12tEL65WdiTaQQXcEh0bP 1jz4xvn53IEqglb1weHHVEiTx0DeB12gIVsdY5UknP1pthZO/Gb6vX4iylxsglhTS4D8UfiT8MR py1m0k4GIZpGT18V7jbtcHhippCPqxmhvzz5Ygwsup78764+82cE8h9Hfnayr1si9jIjBCf9K3N 7lNPej9V2ZQtFNIQnYHpp6k83Z0H+htyQSfWOCHVDHfPratFBZQ5oP6dbOdal0Sl2FoserYEw7d sIvcJG2bFzk4ZJya+SbIBQs5dI0b9bs5vwsH29ZF+yZnw+diRgGWOmp4vTOlffxU4Wa8gbbCVGZ 3lmiZFHo9wijck3IikvADB7s+rePw4r6+VfrPKLRLwxpCjmqymBfodf18haoiRKWQyBUV5kIdC4 rDfQcoaW70PB4o6PKBWBb/DLLD9M7vUfaJg62Xsf7UxhYCc/xygQ== X-Received: by 2002:a05:600c:1394:b0:499:8d9b:832c with SMTP id 5b1f17b1804b1-499a2060a14mr4684175e9.4.1786999970205; Mon, 17 Aug 2026 13:52:50 -0700 (PDT) From: "Denis V. Lunev" To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, "Denis V. Lunev" , John Snow , Peter Maydell Subject: [PATCH 04/15] tests/qtest/ahci: cover the sector count of INITIALIZE DEVICE PARAMETERS Date: Mon, 17 Aug 2026 22:52:31 +0200 Message-ID: <20260817205242.1199851-5-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260817205242.1199851-1-den@openvz.org> References: <20260817205242.1199851-1-den@openvz.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::32e; envelope-from=den@openvz.org; helo=mail-wm1-x32e.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: 1787000107869158500 Content-Type: text/plain; charset="utf-8" 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 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 Sat Sep 26 23:53:30 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=1787000096; cv=none; d=zohomail.com; s=zohoarc; b=O9YAYh4VE7QtXlJKe9AUAtLIHEPzJkQMysFKTrPosg33A0imbjeiujdamxA9ZfjJ5zQJixT3kuNs4GhORPt/NxE1R4NBTq2KjToI0lKVnTPKdJhHm075h/RLS+CQ/nT4XZbto5cQhPe2m9Ym0AQfshwMfGiuXhXgIMJGlfvJ1Nc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787000096; h=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=jfEtcL003Vrun0MO0uyBo2c3FO9pifWtza7WvadbGZw=; b=Z3h8rb7RIf5AWDN+nfmhTk/9rja5RECQ23hAMc6UiZLqnGetfCWqYJx0dAHO+qvPk5ABQL4i4kcMRmDEmw+uugZQJgHPM4m+uWpv+JUXlwPALI+K77GXHyEThjwugAQUtpUfKHJJ5m1W6GcMFfTcoR+stpXMbH20qJXqV9Hf1Jc= 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 178700009693092.82748800735612; Mon, 17 Aug 2026 13:54:56 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ww4KZ-0006bj-95; Mon, 17 Aug 2026 16:53:15 -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 1ww4KI-0006X3-Jl for qemu-devel@nongnu.org; Mon, 17 Aug 2026 16:52:59 -0400 Received: from mail-wr1-x434.google.com ([2a00:1450:4864:20::434]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ww4KE-0006fi-1i for qemu-devel@nongnu.org; Mon, 17 Aug 2026 16:52:56 -0400 Received: by mail-wr1-x434.google.com with SMTP id ffacd0b85a97d-47f904e80eeso3838285f8f.1 for ; Mon, 17 Aug 2026 13:52:53 -0700 (PDT) Received: from athena ([2a06:5b06:b600:300:f6f8:884c:b162:eaeb]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-499961098cdsm202573365e9.6.2026.08.17.13.52.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Aug 2026 13:52:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1786999972; x=1787604772; darn=nongnu.org; h=content-transfer-encoding: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=jfEtcL003Vrun0MO0uyBo2c3FO9pifWtza7WvadbGZw=; b=kAKq1xg6A4SLDhW9OcXFTZAH7GgEljSBLUiAN8p1wmmOXG+f+xg/OeQYo5+QeKnjWj KvO9f7VRADyIa12628kiTjv0bz2B3YToW3ncYFXx2tz7UEt9/u8G5QrbOFUN0u6w0cQq 2ZrioQncIxpXqQK1Fm0tbvprAYLbMv8dnnR8HGuWdMMl3ss7NILX/wautST7eagD3lke /Rve2fGPJ6v8A86C19ILQ9FEfFjiTxoC1BepDx+btN4Z/jP5WaIlxsQ4pdSMppE0wA6M ylmGI0TWRPS2FVKR2gH9UHlYQSNg28M0VzbzNjsxbygKUDseC11cqmj93vDxP6JRqa3R 83+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786999972; x=1787604772; h=content-transfer-encoding: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=jfEtcL003Vrun0MO0uyBo2c3FO9pifWtza7WvadbGZw=; b=A8TtTrOPwG7rLiJ344XGmLksIM3prUqNPU61nwsyPXfPrKyPcj5Saq3VVqDUc08oMo kNhzorPQba9mKLogka5w6ys+u0/zIqAz/+oZ7Ejgn7EJtCqUqLZoxipq+/uWszFx9Iry QHmg+3EsbRPz8ldtsf4ZtmbgH1ZpU5qlf4fkVJX3WzX0fRv5MxcAbgcH/xyxfuzB+yW9 WbOJomd5WfPqbBCqH5X0X9S/3XqzGppxNl4KUZURRwDpPuRc9xBD7vPWGa4C95PVworG 7O+9aZupKD8E/POMQXRg0YRWC47hNOA4o6GS2uGqLNPpTjR7vz4pyvuOLuPOPngmsqKR G5uw== X-Gm-Message-State: AOJu0Yx+bRcpBXOmXkrbNPx1bFlCqUF82LI2rTkHdTZsa6LLI4aeNxaC lTSnH0lKY/nsuTo06QTVNKmzn7A7UkVVyXJtdrMfz27utyAXyxbsgCfmY8Q1/joNsIWKv33mqpi 8wMsg X-Gm-Gg: AR+sD114h7CEuDu2QLAwLaOFmgX5k2pFqloMGyqC3or10HFsYWo2DJm1Do/urC2sPTc a3Nu9r4iDhGAHMAT7kdme2xNfYpkTCBx8xTRLqIr7FJfjWPJvd+SPuDgxKxr8LJD0JIJIBSYkaD ILgt5ZTHwEhoWTeh/1ERYUMtoNs0gY+Ry4HI0weCdp/xfJgEeo5UFb8uKqcLI75w6Xjg1TNW3ry ZDaaYAmtu1NiSFrAZp3TLour9VREy9CeH81DriMlaqwW/VPsPpp48dMGoE4x2RK1DYEnaC9S3vi ls/rlT0bq+tDYkQ+YeJIci15O4joSbOruBDb+Z4qd/KWZ2PwI1VwSEIg0V+KzYdcN30Gl6oR+Az /Z4cTIGykornK0aO0AhGFQDAwagVnoNjmaTA0/Y/5hQtHAHixIsWQ5riCtamJd3PU9N1rPmnAr9 iiHvXOvkLZmWzZ/UhwtksxUCrQiJUnZgnupqqxuqJhW6QhFj10mA== X-Received: by 2002:a05:600c:c3cd:20b0:499:a277:e8b5 with SMTP id 5b1f17b1804b1-499a277e9bbmr638105e9.3.1786999971915; Mon, 17 Aug 2026 13:52:51 -0700 (PDT) From: "Denis V. Lunev" To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, "Denis V. Lunev" , John Snow , Peter Maydell Subject: [PATCH 05/15] hw/ide: report the default CHS translation in IDENTIFY DEVICE Date: Mon, 17 Aug 2026 22:52:32 +0200 Message-ID: <20260817205242.1199851-6-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260817205242.1199851-1-den@openvz.org> References: <20260817205242.1199851-1-den@openvz.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::434; envelope-from=den@openvz.org; helo=mail-wr1-x434.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: 1787000097732158500 Content-Type: text/plain; charset="utf-8" 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 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 Sat Sep 26 23:53:30 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=1787000120; cv=none; d=zohomail.com; s=zohoarc; b=I3F+MYsH1Kr+nZH2/zRISdHrGnceSbBa3qL/BigDAufl0NgaVjYBiS2EnaF2hhVy+NekKqjqjgX9jvI+cIaE7z8n1qda89/YTo59fXLQvlvnbV3QpNg/+Uewn3jEEGrOBaL++VNx7m1kLjoM7t9Qpies66jYFDJ1uzU+mMOoY64= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787000120; h=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=lVttNXKS42d+wwl+Slu+idpuvTC5n4P/eF4nwzzHM7E=; b=hhHvbpECYObT5dNq0Vkgjj46Z2Tk/3Ra89ENHVpuB1gl4eLCpOg5ClKJIlNhhlkuVnFfoWErIBH6cgjaRrJJOrWDWfpN+rZbdXyq0giQsxgCmb3IYu/SfmDWEXnd8IA1w8N3c6R6vtLzwnNsSTA9gGwvRPuQ5e9XlDXF4DloZew= 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 1787000120091129.71601489298382; Mon, 17 Aug 2026 13:55:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ww4KT-0006aO-41; Mon, 17 Aug 2026 16:53:09 -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 1ww4KI-0006Wz-H8 for qemu-devel@nongnu.org; Mon, 17 Aug 2026 16:52:59 -0400 Received: from mail-wm1-x32d.google.com ([2a00:1450:4864:20::32d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ww4KE-0006fw-HR for qemu-devel@nongnu.org; Mon, 17 Aug 2026 16:52:57 -0400 Received: by mail-wm1-x32d.google.com with SMTP id 5b1f17b1804b1-49987fb18c0so20346505e9.3 for ; Mon, 17 Aug 2026 13:52:54 -0700 (PDT) Received: from athena ([2a06:5b06:b600:300:f6f8:884c:b162:eaeb]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-499961098cdsm202573365e9.6.2026.08.17.13.52.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Aug 2026 13:52:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1786999973; x=1787604773; darn=nongnu.org; h=content-transfer-encoding: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=lVttNXKS42d+wwl+Slu+idpuvTC5n4P/eF4nwzzHM7E=; b=iZt6tHwABdPxowQcEwJkSUSpHNkw5ocBKWwBFsp/PKbGYVA4CTxrqQ5bvFcvPBWwh5 CVKPlM4MA3nemh1IPuackndz5msEHWCl81gFclv3aJXLbDQnP0irpWz13FT11Gc8vmdq 2Yj7tdEwD2qNXmW2b5M1p7n57JnAFzvEZ6RIXX9CMm3VOSORdZ3rVk59w3cooPriNmpx q/GWnkewDWf4y+Re6WBJQP8ncPrJUUuIczsdLO0dY8mPF2QbfUMw3Dq+senjwTdN8pg3 rkDA0YFg6MT3Q+Lw/cB0hcGuMTLfBTntbgP/cnxQmzkZmCyMbNxmOqTFzaU/KhMvv3So RPwg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786999973; x=1787604773; h=content-transfer-encoding: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=lVttNXKS42d+wwl+Slu+idpuvTC5n4P/eF4nwzzHM7E=; b=aNFa5fbCR3H+PhI91PsSdSHmex+SmPIIK2+HY+PACeIoYUD0NtCdoBK/lVxnGv79a3 t8Zm4TVgRoKCbDoKmvuz67HTjhTc+xN/hhUx/HBSG0LJbMrc5LRQ9EP++QjijcP5CpZC JAsCuLsebkKFNqDioYSw0pXSS3benUEt9HJcCx00svmxZziCSC8Q9eCpf8V8OW7cQtFR GHNm8m2fF6/zAelKgGxg33WRjZrKKig/M5lInMIfzpJpi7eI3ZQyG/SXJPt0uWTVUiMV iu7eKJoR0gi7/Kq/HWBTlB3AB7/wYSXO7+PanADGSaCO6M4M4huKRWeJFvQVLUW+mXed PNqw== X-Gm-Message-State: AOJu0YwbiUfuM61loA2qyM7xh3QbqIFszj+5t2gO78X7YBa1TBO5FEla /5HUhr6kPopyBLnuvj6gqhfcieYO43Um5KuWLpEhtYYyJCtSjIQOzqLZZtLYvctzbLlHLoYlYwd aNeKQ X-Gm-Gg: AR+sD13arxwa2AWxXEobVSXMb2zd50PnXpZ0MWVm1FlDsiGZM04RHMlLva2GvON6cCo oeaZ7S/LgW4j1a7eM9rpDoDwzT2gXP0EMwsoIJmXFKeHwFhiPBLKkCNdyht4yua+8vArJY2uLBo +A3PEbePo8hnsXV810m+GkP4dYNWSkA+J9UFIz+upumO7EXupEHvZk2NRlZOsBg9yp1Y7EywocO fMmkESNcF05P0P5N3fu8UNuUhDg+zBni9NeU7CZrrXctMp2LnTJF5zVic4MGqR927GQg/X/OpbU JCkNA01rWhOfPCxUkF+XH+QnqWhMZ+M/dO8gS9bdlgoagvJG8icSR+w/VDzvrDWhp3hVv/qmBMo BsVe+yPUZaEDEUGbROLDxQslqj9j3VdAUr4lgM7bab6LbYgsHkcaWGjXuxSLBh/d3Oj7kBdvzdx BEIq8aIE+Cchrn7ZoUoQmrI6Y0fwESPWqVO+XmWLP8JIL+Iht72w== X-Received: by 2002:a05:600c:3b2a:b0:499:9240:9a1c with SMTP id 5b1f17b1804b1-4999fb4f219mr46730245e9.15.1786999973071; Mon, 17 Aug 2026 13:52:53 -0700 (PDT) From: "Denis V. Lunev" To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, "Denis V. Lunev" , John Snow , Peter Maydell Subject: [PATCH 06/15] hw/ide: keep the IDENTIFY DEVICE current geometry in sync Date: Mon, 17 Aug 2026 22:52:33 +0200 Message-ID: <20260817205242.1199851-7-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260817205242.1199851-1-den@openvz.org> References: <20260817205242.1199851-1-den@openvz.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::32d; envelope-from=den@openvz.org; helo=mail-wm1-x32d.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: 1787000121926158500 Content-Type: text/plain; charset="utf-8" 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. Update the affected words in place instead, the way ide_identify_size() does for the capacity words, and share the code with the two places that build the data. 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 Fixes: 176e4961bb33 ("hw/ide/core.c: Implement ATA INITIALIZE_DEVICE_PARAME= TERS command") Signed-off-by: Denis V. Lunev --- hw/ide/core.c | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/hw/ide/core.c b/hw/ide/core.c index befbab9486..9959437a63 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 */ @@ -1361,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; @@ -1669,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 Sat Sep 26 23:53:30 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=1787000125; cv=none; d=zohomail.com; s=zohoarc; b=iXIj5eYFxDrVmBN2fxpm8scBVvYj1JSX7bul0Beu6or9V3eWya0Py7EYJk7x6qPlV9GenN37KkyDbQpIvfnt9CJCx0VP5Q1ygWkx4aGOGz977vrCxCw3KQG4BNJuF+qhAME/vtDpZjQGOPKXL5nEZY0tLlrgHoXuD6wWnpnHrec= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787000125; h=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=8CWVKBQSL5ewcOP0DFBT4Key4Rx+wNU5OMEqLgfB9Bw=; b=CgZ8KcEW1fRlFU5N7VSbiUJEJRCP6DXcgMmwx9PkdB77Tr5zDfArAUdTLQCZWIwoj2phB+in89fqjj3ZyZ/B14eFbl/WTXEcAwqcsB1uxTr48hVb7Qgr2piCH0MLs9WWypLx/HjitqsFhoelQ01mhq5VgiQCZWiYENrBSuU/zww= 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 1787000125517468.83291715320456; Mon, 17 Aug 2026 13:55:25 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ww4KR-0006ZR-G2; Mon, 17 Aug 2026 16:53: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 1ww4KI-0006X2-I9 for qemu-devel@nongnu.org; Mon, 17 Aug 2026 16:52:59 -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 1ww4KG-0006hC-6g for qemu-devel@nongnu.org; Mon, 17 Aug 2026 16:52:57 -0400 Received: by mail-wm1-x335.google.com with SMTP id 5b1f17b1804b1-4998590d392so41044295e9.0 for ; Mon, 17 Aug 2026 13:52:55 -0700 (PDT) Received: from athena ([2a06:5b06:b600:300:f6f8:884c:b162:eaeb]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-499961098cdsm202573365e9.6.2026.08.17.13.52.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Aug 2026 13:52:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1786999975; x=1787604775; darn=nongnu.org; h=content-transfer-encoding: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=8CWVKBQSL5ewcOP0DFBT4Key4Rx+wNU5OMEqLgfB9Bw=; b=GTUFcBQyP2O5oWA1LAST09ADpNCe7EeLqlfyyjr0GKt3ytqvkq3hLq92rDqEqcjxuK zvZx5oKYCyqEk5kFdgxILU+VIqU8vmrJj9kMu8A74PI5kLnAMdbOFzCyKEwiXcPFm/TD v83CXYjlS5SJL+e2pj3ON9cYIM75mFk0K1o5e+Uyco2pqF+Mgzl39b/y8okF2EU3dZCV uR8Czw8UnJaTiwVBQhXFMYrXZZIgtmtb6frEG96SjLQKPsMQbCuBkFA5KUGwjaFrCq7V Y2L9MXiYEJfxZwH+O5tQYDyTY3THmuXXJaQnwtwWjZShzNvAqWXp+OnlhAHM/mI51fhh Q/nA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786999975; x=1787604775; h=content-transfer-encoding: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=8CWVKBQSL5ewcOP0DFBT4Key4Rx+wNU5OMEqLgfB9Bw=; b=JHVTXDiWszC0xwHBa+hbpBW2qo0JfmCFwjkKBJ6bbXO+NzY7PdNMD/v/KWjAEL6jR3 UTyII/TFvFDVg9DclyNosvIS21ClKyY3zC2T/KmUQLjOLrQF15ROUckP4wvaN5SBRIi8 FgK8PK8ktQdAMNIjhOYL7AilOo8ZPtiV59nrcp0tlV2JID0z+Me4vthkyEAvpbUKlC6p /88QZR1c4P5cV3kLeyxOHQdD6Vkca47cxvk92bXDkhfomPjbrZeG8QrC66+774RuE1YS k6Z77PHSJ4V6FqPPzDLTV7PXQfXLo9J/WRNFE80JI1uB8ixIvhjiotR5rHWtoSBDd5AG kEJg== X-Gm-Message-State: AOJu0YzqZFc+yC2adtBcsstYeBPjYCzIWSTrEKH651YHrhCGWwjwazHN y3ewY757eAaZM6tNM2/bA0FjEscvAanSm34+cf6Vc+rrnSjL3+830NveoCokAkx9T1Sw35H+DKE Ov01z X-Gm-Gg: AR+sD10TMOx6lwlcyE8IkQ+godwzMPCCU88DCd4s2ShT+EHnULXiz4u2nkTjzlgOGhB K5cTAIVYNqSr8ANJ7JPQWj7TlfNqvMJLq1kf6a5BVe2H1csYV46ahGorlU7SjQhXSxyqVRPHPPj +ypGm9oO3SGfFxy82fG6NcdIYjB309h9OpYomMeQCZZ6zWsk0jERo2MrW6YjYkMUjh7xgrjMBB7 BwkmRlh3Q3fcrPK9R1+YEBZ4EBEf+UZDLGrgPzXOMyWSkfVMN6e57uBS75+Rgi6N79FUqHgq47/ +BNriX5bI+u5olUn5T93/xmg/chpFE7RYUeSw3v8ko+zsHUo5SRoUHd0k6ygFl1KOC7cr5XImSz KsXCzDE9g0XFQxBUTIfRyecvWFH2B5swAv/I2maEu1WwoOy/s4rX9OcYPHYSWR6ON2G3PaEwD8a oSAkLoXG/QJQskoLSpJDHS7mNzsOYLIE0WY55gGHor62ZDLlm/sA== X-Received: by 2002:a05:600c:528d:b0:499:48be:3189 with SMTP id 5b1f17b1804b1-4999fa84b7dmr57341815e9.0.1786999974703; Mon, 17 Aug 2026 13:52:54 -0700 (PDT) From: "Denis V. Lunev" To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, "Denis V. Lunev" , John Snow , Peter Maydell Subject: [PATCH 07/15] hw/ide: restore the power-on device state before loading Date: Mon, 17 Aug 2026 22:52:34 +0200 Message-ID: <20260817205242.1199851-8-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260817205242.1199851-1-den@openvz.org> References: <20260817205242.1199851-1-den@openvz.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=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: 1787000126034158500 Content-Type: text/plain; charset="utf-8" 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 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 9959437a63..3b67409eb4 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 Sat Sep 26 23:53:30 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=1787000109; cv=none; d=zohomail.com; s=zohoarc; b=aIi87T6WrbOz3IROGdLc9Ul50v/C1ceQDBSVOcA8FJUUOnckd817hjppGzo9OTD+4T3OKT6IYF3D8M8M2LKBcDKGN/rrdzoyNIfEsdmWr7rPhadIX9zwdS29rg3a39aGgRsA9DRdMHMGOzJmketlKe8AcfEhswgaU0XCQIclsVM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787000109; h=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=si+YseqNQY0eMz7hqP//9pL06dURzQ3fH0WqmuMmqXU=; b=R+Q1nS7WxCLa9XG6HTS8y62knrOWwbk6Plh07Gj0NtoG6RWkqXGh8nto9s+rFjDyycjgpIAuVubFuvoPH5SdfBR209rFK+S217NZrek+REf1J55N08gpANbS/Mq6wF3QXzQmhkgFZqNc5Y7dHttgmfi+D4LKcqALOC9KLnCu5nM= 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 1787000109425469.9539667864766; Mon, 17 Aug 2026 13:55:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ww4Kh-0006dc-5M; Mon, 17 Aug 2026 16:53:23 -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 1ww4KL-0006YJ-Mj for qemu-devel@nongnu.org; Mon, 17 Aug 2026 16:53:01 -0400 Received: from mail-wm1-x32b.google.com ([2a00:1450:4864:20::32b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ww4KI-0006ho-71 for qemu-devel@nongnu.org; Mon, 17 Aug 2026 16:53:00 -0400 Received: by mail-wm1-x32b.google.com with SMTP id 5b1f17b1804b1-4995b0343c1so36653985e9.3 for ; Mon, 17 Aug 2026 13:52:57 -0700 (PDT) Received: from athena ([2a06:5b06:b600:300:f6f8:884c:b162:eaeb]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-499961098cdsm202573365e9.6.2026.08.17.13.52.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Aug 2026 13:52:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1786999976; x=1787604776; darn=nongnu.org; h=content-transfer-encoding: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=si+YseqNQY0eMz7hqP//9pL06dURzQ3fH0WqmuMmqXU=; b=qQqpDb3SrnZG5FzRU6A1zqO1T0ZURIiltkoWjjQBVLzmSc1p4ZbNGRkqn6+pGw8C8p WH/HnTq7mvEn93vaGpcsMNJiMshd/yqbB2lAEGO/QqxpkWjnmq0EQK+ZLIANGCGmHF0j 80ZNQZHrVrv3ucPglvDF8d764ysHE52ARJzmMzzg6uZJHkFEYBzZM7EVb9Er+UC9nuvo S/svwHTLsYcnFPeKLwjr+gDLs3tQOUH7Zd158oG/jRC8UHR2fakc67TG5wOlOQERQ6px S6EJWCMgtRQJjxDMoKqv7CoMYJTLdhWejpYNyaZMQ/HxzJTa8jcB13/XrOgNt4CXVbKJ IGZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786999976; x=1787604776; h=content-transfer-encoding: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=si+YseqNQY0eMz7hqP//9pL06dURzQ3fH0WqmuMmqXU=; b=mOcQRmOpMn6ZFKe9GlI4Ix7t/aJLUyPbrcF2AcXxBHlgXF+ZAkdWeuO8TZ6XRHs0T7 /jjDgic9A7BjFNLuA+MafH6qf5o68kHPNfq0qd/QnjTrqoqBtG8rhptPiitgoAmqaqjo uHtNfdySuAwOh8If/oWC5i34K+bIrnDOULzNZGLFWyTdyoTZe55UQNgOGGl81Wgym+Pv f89gTvm0UaP9Z1Lki05dztiVGY4JWNQ6gp99ESXVJBEw2nh9K+kVv4fmpfAm3dx+Q1vD DD+CKp9tRUWtTSikN/plvfeRYfkDkybeC+u1PIjelSG7AG+QYpg5z/CD+WtUnhny+jyG Qmgw== X-Gm-Message-State: AOJu0YxJ31JIDUYsoLvnIXWzEONFirF7CvRZ/eaLKNf3yNv/DeQwWbsf f+J0m1F7tDCfvmdrNvj/RCeN6Hn2f+Cxb3isL8x450R1G9K74k8dIX8DUVnbsuzNJ2VQXbDvWR4 NDWoB X-Gm-Gg: AR+sD13NEAtD2oKi1xzms4FG5EBW6ewiBoFxSKAWzZ6Rzl1LD1/YjvPaCRy7xciIwth N//LX75u/XBY4d6dk5XLB3sqvnrilNoezETc829sdVRu4ZpGPPeNWQUu0dHbT3aOmJs+NtP91ke 7fyEbVu83LWGZsTzn/eHOgBuKIhSsB4je0bgNK1VJ3jbHWeaFWGeEDCanomli904F7RqrSlfSJU Q5S+9+yi8Y39O7WsFhcRtOXh8Rjw0ma5vCzPzRsh8mHaxgmGhjrs6mnpy3945hz+g48I01kQxtC 7h54TZZKsDnlabLhNBzePJKHCUFko6OzQiZhhw92pEBqV4fBWaSmmEyhIptQ97Y8kBtKhdRqnwD Hphnh70yMvG6ixnNf4P+nCGjocPhEPUJqVwaWsmKoK3pH4TRd/tti1UPFht3BKltOvXD3we6Zw/ IkO5ALWL+hTTGUqO3P/004Rzku2sZjQezneK+B7czQ64ypyacj6g== X-Received: by 2002:a05:600c:3398:b0:499:52dd:c1f0 with SMTP id 5b1f17b1804b1-499879298c4mr286625005e9.1.1786999975953; Mon, 17 Aug 2026 13:52:55 -0700 (PDT) From: "Denis V. Lunev" To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, "Denis V. Lunev" , John Snow , Peter Maydell Subject: [PATCH 08/15] hw/ide: migrate the logical CHS translation Date: Mon, 17 Aug 2026 22:52:35 +0200 Message-ID: <20260817205242.1199851-9-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260817205242.1199851-1-den@openvz.org> References: <20260817205242.1199851-1-den@openvz.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::32b; envelope-from=den@openvz.org; helo=mail-wm1-x32b.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: 1787000109825158501 Content-Type: text/plain; charset="utf-8" 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 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 3b67409eb4..ab8c23e5b9 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 Sat Sep 26 23:53:30 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=1787000052; cv=none; d=zohomail.com; s=zohoarc; b=R4drLhxGKowezC2VR/FwzuxY3kr1DoIjpOmc5z8rB3UmP/mhyWkCCHdqLSiNyhHY4Kqumi135VyRuD6SD0HT/4PYTY/99bHZPDORMy3jCYBmdggkA8Vk3ZYSdH+VWShbh67fJO79fuO9irsU7+WzyhXKOnckcro25YyZs3WPEbs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787000052; h=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=pBZWsIiOBzxNYtURp7PYiUCHB7BOW6Efn63eFgp73h0=; b=BxDNatI3237b2QPnp8O0V5WjM2jEtJIjsQvRbfXwVnPicTAmJ5HnmpOt7gbmdKI5VxdFvS535kc5PwDJS8u0JFvx12jMcYnBTRay/CsxYAFVtfzQap81qDqZ/pziR+2tYA2fwK8qLY4nvVOPyzzfiuMT1pRYP4OxhQz5+nglGlM= 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 1787000052735281.75977366486984; Mon, 17 Aug 2026 13:54:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ww4KT-0006aN-2m; Mon, 17 Aug 2026 16:53:09 -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 1ww4KL-0006YM-PK for qemu-devel@nongnu.org; Mon, 17 Aug 2026 16:53:01 -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 1ww4KJ-0006i0-KA for qemu-devel@nongnu.org; Mon, 17 Aug 2026 16:53:01 -0400 Received: by mail-wm1-x32a.google.com with SMTP id 5b1f17b1804b1-496bb7cdf51so48311425e9.2 for ; Mon, 17 Aug 2026 13:52:58 -0700 (PDT) Received: from athena ([2a06:5b06:b600:300:f6f8:884c:b162:eaeb]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-499961098cdsm202573365e9.6.2026.08.17.13.52.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Aug 2026 13:52:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1786999977; x=1787604777; darn=nongnu.org; h=content-transfer-encoding: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=pBZWsIiOBzxNYtURp7PYiUCHB7BOW6Efn63eFgp73h0=; b=Ut3cueUtIhUVP4SagyumaNzI9qc3scg8ZtG+oBu1OOI4HawRnuVuMGL/2p2J8ZeSpd ZssbmlqKytUItca86+NfeeblG9sffO3MLCEPu2D4gARTpah6bcb3Bg51nvPuF2fWeSjT TwuIsttt1xOGqvCE5kEzZpZHiIjzicNXTAh9gYOlqO4ylAIEr/ifku8jLNM9ZunX67Oy RFNv5iD0OL/6T2xlv3LNAF9CdUBofWp7x7tHtubi/F3n32qKRzJS2dFwxRsMv/1uBocm LUXxP6XUCnow9W9ixDhtFIy2O4opstgZzduZ61g4eu008CSQXplB/Ml57b54lr/mltN+ TSKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786999977; x=1787604777; h=content-transfer-encoding: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=pBZWsIiOBzxNYtURp7PYiUCHB7BOW6Efn63eFgp73h0=; b=ljnb8Oqxx13o2+yKCNvsSfM1h0rwUriBtO3haYFJf937z9Lw/LPzRWQatJ+nRbzi0g kdUPJOhsSNWl1d7bv/RnMM1q3vqZVX7v0JHD8UWyYHiEz+yoiqKNemw8zRpY1li/boDq VE0ionQ3UKiNX5qi2VLGvDs1/aOjcWUO7GBOfiHq9p+nULfKHewnljPVg3IuEiyW5dS5 V+shIlqlRvRhdP4BU0Geu9bgTsWPTdIldMU2pGo5aCktse0sHws2ZdZqn47dzFvxus8d sKKGQZwzcZGusFzxijW4ZPw+X3t6sla8XkpXbOVujkkwHBFjgziuAvQsknQSSfy/13MY YTaw== X-Gm-Message-State: AOJu0YzxRkWg/nO3nRVV11417gr8JUhRmfJAqVo7shUquA0ZCFrs0/XV +iFwVgBfMLUERjVdY2tedIg2MXWqzDDhSrS7+xdo9+o5lbANpLhA/hF4gfrzOu6HSOa5PaOJBuM 1FQKQ X-Gm-Gg: AR+sD10s8BdtEQcSo4ZG72r0ifA4Ew1WeUy6vFUjh/ukqQPflNJzKH2DbXR3MVKikn5 dyWQXFFDyGaTi7jbRoPG7vUwQfWkiUILLzkWKwDOBX8XRweP6zwYn8d1rOjiW06u7/3YxQuBkv0 ctH9HAm5u40nN8vHKVbq8pGLdw1sNp7V3VniIY/V3z5VRkM5UzAxaUOIxhGcvVO3VJ/MkA+jPPg HHNj9NWwph757QA+oVexvoJtZG4a0i4QIpDgc/trhFtt1QIPg5DuaG8p7r91QaQWVasmNSjbZaS JFGeIGHKHXG5OS+33vNy/MljuSe3XxFrP6VzEVuK3SptWET8xpA5eg7JH/5TBa3phRjvsWYFMX3 k0kPAD0beetIIdXy/FuWC/NwaMjZadCapzCjrVycyXVPAOSSKB964tXUM8VvEFvWSrY+rkGffnI f0AvBqpeZwdlnv1rxOL0g84zNug8rytYBu4p2beylQudNcAMcowQ== X-Received: by 2002:a05:600c:3b8b:b0:495:4fd4:619b with SMTP id 5b1f17b1804b1-4999fb04106mr56682945e9.1.1786999977111; Mon, 17 Aug 2026 13:52:57 -0700 (PDT) From: "Denis V. Lunev" To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, "Denis V. Lunev" , John Snow , Peter Maydell Subject: [PATCH 09/15] hw/ide: migrate the power-on defaults revert flag Date: Mon, 17 Aug 2026 22:52:36 +0200 Message-ID: <20260817205242.1199851-10-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260817205242.1199851-1-den@openvz.org> References: <20260817205242.1199851-1-den@openvz.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=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=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: 1787000053614158500 Content-Type: text/plain; charset="utf-8" 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 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 ab8c23e5b9..c330508128 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 Sat Sep 26 23:53:30 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=1787000098; cv=none; d=zohomail.com; s=zohoarc; b=eAOiqSo6T1rPCGZGmh8+hRQlsx4VG+NN58nWCSV2PCKvANEdCOKSgIzxrsl0w30SWV+OZzPxQDqfHuNduUAAxWZkbpugQNekmx+7pOwo3XLOKKkY4qJRBmOM5DVNvZkTYgPenWgRNHms53dW3s0lxCM61sLCyRLoABwfgGFHyPE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787000098; h=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=lMuvMry7Ps/r1w12vYpWrVoPtL5X/2550p5Jar2Gi7M=; b=kVL+5eQ1z50BKbDCWEwY0uDdFKo0+mi88W9NjVmshhOOi7K9RjtmvdpLBlDOc0ii7TWBdAKNoSadZU+n5x8EPYiZk159Qq/iFYE04b5yMRmWlSu8JVXQsFHWlzsyEDmmFbTULqgDZm54ka3RLocSjCerYQhF+vQ7d2XQ1Ln1MPw= 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 178700009873817.681527335859414; Mon, 17 Aug 2026 13:54:58 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ww4Kh-0006dh-7V; Mon, 17 Aug 2026 16:53:24 -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 1ww4KN-0006Yt-Sv for qemu-devel@nongnu.org; Mon, 17 Aug 2026 16:53:05 -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 1ww4KL-0006in-G2 for qemu-devel@nongnu.org; Mon, 17 Aug 2026 16:53:03 -0400 Received: by mail-wm1-x329.google.com with SMTP id 5b1f17b1804b1-4954f5e8020so20397425e9.2 for ; Mon, 17 Aug 2026 13:53:00 -0700 (PDT) Received: from athena ([2a06:5b06:b600:300:f6f8:884c:b162:eaeb]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-499961098cdsm202573365e9.6.2026.08.17.13.52.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Aug 2026 13:52:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1786999979; x=1787604779; darn=nongnu.org; h=content-transfer-encoding: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=lMuvMry7Ps/r1w12vYpWrVoPtL5X/2550p5Jar2Gi7M=; b=Aafgq+U8eEClsD7V+atCeECsncEw3n6DzCnl0VhaAZwaN6EYz1SzV2pSLT4gCxUw1V 4whixXJ80KzqvnuXtCGCzUUB48myp8FMceJ6ba9Icf3N1BevWAYLCwqauYYkPnK6p6oW 64ZKFwvwMzG8tVPqqqV3UeG+VC9CVx8YsU3Cpl/x2vrdqCUxDBx/4oU/TyutEw/wzRN+ 8v8kvAPklLF99NAtn8GMlTS7RP5yiIpEAQtRhvnwM+UR+Ld02u+FbrGRNcSiZyiqfT9H re+1dG0gWgMvRCaEt34+CT6wVZ6S2zr4sT+S/6sCQIUblZ2UG7cQ5SYOW/wMTPesY9Do OCEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786999979; x=1787604779; h=content-transfer-encoding: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=lMuvMry7Ps/r1w12vYpWrVoPtL5X/2550p5Jar2Gi7M=; b=cTQKYsIvuDgbRNgl8AqljjWySsplHozFT0GNjq5TOQQMMtgTtdYuaSXFwbSBiNS+4w UPU37HhGTL2xHKwPVSRJyJvvNIBrifw3S1gxi8Oso3MsGQxUturslvO6ireWBOGNvC1v GPq/KiD15/mBgMT68eQ/ncfOf5PFT0qzYm4I7WD5sENHBrgsydSDxK+6gK+X4eHS1GqR TZmISIdYulzSeLGfcirjfEwfq39PYrgl5XKAJrU1fCc33xxU2uECjh+G+N6GocClCzn3 YH+WnthyNXQwrHnhNW/IOeGOUuucoZW2fCd66EUwW+2IeqRAclWM0aUAXi5+NoPc4bBc gyNw== X-Gm-Message-State: AOJu0YxiICVr5He/42xglr8d8uJhyP+qEtysZnINIEG/BlTfnBHHc+5Z fhWQ3O9vl7X5bfvG+Y7Q9bmleV3IE6yMLuOsA8I63f4Kd/70B36jlF9BpfbLG5ZS/GpE1QzsArS 7NxPd X-Gm-Gg: AR+sD12SSdK2rEejLRXQpnsWNEND9aeMYIqyVEbmxohuUF5N7TUjVLmtswz1gLNo/mt qwd3oxf8TxHRA5YXEVHn3iJps9mQD6/Ie108tZjkew3TRRcs9tM1CrgdwGVZKqadITqdRPZGSfS Sl9QjF8sDRkxKTqH8u8NONI2cnJ8Tf3bJ8J86qhnYVF3rVM3k/RYY17sKNNnE4G8qvERt+8pEta cOkARRjEroNq/AFpacCjmWnvdKXXtJMexOkf29ojWEOEx7YCBmkoLICHvM+58lb8e4Lp9xv1LRj xZgau7pKcZbXaBdhXrKMs/rbvvMg+e6s6zBk+MC7FLSwFRaPD9fXLY8D4FmOA0FmcXGZClbJ29V WpV0Kqw+rAZScwXJ+zMh0pfWDtfCIPqPkDDa9cmFDzIQD9tJ5CEja30WA6Kw/nr0aBF5cnUPplT JH90o1Yh6/v3Hgi8b56Z3c4R8H3XoBjFPCIxg7lcIXhnR4QMRSVd9ZbgrdwSKa X-Received: by 2002:a05:600c:8509:b0:496:c9cd:e7ab with SMTP id 5b1f17b1804b1-499879337acmr498167715e9.5.1786999979229; Mon, 17 Aug 2026 13:52:59 -0700 (PDT) From: "Denis V. Lunev" To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, "Denis V. Lunev" , John Snow , Peter Maydell Subject: [PATCH 10/15] tests/qtest/ide-test: cover the CHS translation across migration Date: Mon, 17 Aug 2026 22:52:37 +0200 Message-ID: <20260817205242.1199851-11-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260817205242.1199851-1-den@openvz.org> References: <20260817205242.1199851-1-den@openvz.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=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=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: 1787000099824158500 Content-Type: text/plain; charset="utf-8" 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 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 Sat Sep 26 23:53:30 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=1787000120; cv=none; d=zohomail.com; s=zohoarc; b=kVGLnfFlspMldNEYsW7zIt+Bz45SQ/LHKxuuk8IxmWWj+kPgMHFPd3HL9Rd9khLWYSX3m+12w59DzEiAnrVs4MV1hl5990CdrViegZQ7JLtH0NQQB8RU08Q7AE1RGFlfwoTsXsvL9MxpblAdZXys0bZi7SvUmtbMSiVmRFFA1yM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787000120; h=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=ih6WBmLbxMIFAynHL/+kBFl+c1Otlb088ghzMEF0/zk=; b=Z4xlcDfHydWtRzHbt4dot82V7Sfk+wbJnv1g9Rl/9QCX0fwu+oLqB9at2dEZOmXoyodPeotnk7BO8JAETVMZSYWdFDrWoEEmrkdCYtppnXr40mZn58cxk9ia9d9zRQ8RPt+p9atez1DasaaxepXi7nEc3nyWs+5vHQP4GVE0G1Q= 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 1787000120958533.8588024085761; Mon, 17 Aug 2026 13:55:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ww4Kn-0006jb-5I; Mon, 17 Aug 2026 16:53:29 -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 1ww4KP-0006ZU-QQ for qemu-devel@nongnu.org; Mon, 17 Aug 2026 16:53:07 -0400 Received: from mail-wm1-x32d.google.com ([2a00:1450:4864:20::32d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ww4KL-0006jD-PW for qemu-devel@nongnu.org; Mon, 17 Aug 2026 16:53:04 -0400 Received: by mail-wm1-x32d.google.com with SMTP id 5b1f17b1804b1-499840a2575so29443925e9.3 for ; Mon, 17 Aug 2026 13:53:01 -0700 (PDT) Received: from athena ([2a06:5b06:b600:300:f6f8:884c:b162:eaeb]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-499961098cdsm202573365e9.6.2026.08.17.13.52.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Aug 2026 13:52:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1786999980; x=1787604780; darn=nongnu.org; h=content-transfer-encoding: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=ih6WBmLbxMIFAynHL/+kBFl+c1Otlb088ghzMEF0/zk=; b=jqjtm98pa6ffER54ulPp7UEcn9AxJX/9FCCRls5MKmXTrduCL42adBhrsAPV036Ctg g89BKAHEaIoMg8IoLbojdcXU9c/laZtJ/4NbTciQcIVezk0Gz/zWc6FUhwXgWpXwQjjK g3pUAzYL2FM2KsvYo4yi9QcZiDVKBJaEFPsvGcI1hOspNu7AuycU7OoLW9YccfKI9nyx IWPk/gBA2d+ucyT/k65a7jipf3o894hf64kvuv0OTnKzFiTDLupeyT/48DHWdPTOzqFf 0+6VG7yxoaLUrbzEHEseGdv5BpT6i/TtWdbGFtmlTz1KGQXTR/MBj5hOjQXhaRNMpzrz NPmw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786999980; x=1787604780; h=content-transfer-encoding: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=ih6WBmLbxMIFAynHL/+kBFl+c1Otlb088ghzMEF0/zk=; b=etdDg9j4CBHhmjRxnVlmzr9n4oCdFIqkPHyfxieqzXfPyT29X6V2pY9mpmAKlccftW 3GECdKuSvGbgYDMSSEtWQU6837zQH7I5FaMIVeD45zeAcW0u1miAmFCT+kSfe9PW6x1c fI9D8OJCbmNt3fO/vBFDr32UbDJWXDnH7dCKwiz/WNJXSVgf2JKrBKk6iS8GftmpBaOx Xqmh/cDL7U+gYS26oIoYbbvBEDKlMuM/eMUIWnAd6TizOJrAkkclKglwMQ717GyfnVJt 76IADjVVovtv+aEoB7wPUUdBV2R34v0xUpXhlDDG3DyNqMXECpBEGQsKfYBe1unt+Yr5 mmNQ== X-Gm-Message-State: AOJu0Yy6CAunaB/Zc86f5ciFbrfyS10xV9wK9mVCrRAOuexCEt04rPPx en8JY627K/Rfx+c/g+pfiF73kEz2W7XPg/SpxUwxOoZ559Ry0nP2q0Z+mE3ILBNlZikJNqdhMZ2 XC4Lv X-Gm-Gg: AR+sD10zd5/EU7+cFPb00Hibu0Ei4g/MTa7aCkcQisihoaPGbpO1dB1fROM9PWteOl6 Lp5P4M7el/uuHKinSUVPNQG9SI4nVyrT5dFdRbWgknpHgZUwo0uJQ0qP0fa2DPh4jgwUSvqw9Mf VXv2nWlW8ySHL1s1fIqDNcDFqwa+mQ5IxstTcmOe3ovWzvL64te6HbnEqZ++TaMvlZEyr2eao2f fmKK+wFDWbz4lopaocm2TeF1yZJQYl15r66URgVHKr61hySWHGLAm+DXldsCbxbx34g2i63Za32 wtkUV2gkjxotZ4zzFSwi7N52xyU3gWCYdkiupk9Bfckx1Nqx9JNtbJ5VATrB/u+6x8k/dlUOnud Qk4cm6ejdolnBoP+tarA+XTh0yI2BV92ACUOO9ElhWbaRsF0JlYryAvnhfh3U+KrOST69q0qgTy JHz/b+7C/9y4CfVVx2zna384HFjh2Bs0XrDroNcwe3hdevyyMU0w== X-Received: by 2002:a05:600c:608a:b0:493:bd2a:93be with SMTP id 5b1f17b1804b1-499a202cb4cmr8589945e9.6.1786999980385; Mon, 17 Aug 2026 13:53:00 -0700 (PDT) From: "Denis V. Lunev" To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, "Denis V. Lunev" , John Snow , Peter Maydell Subject: [PATCH 11/15] tests/qtest/ide-test: cover a rejected CHS translation in the stream Date: Mon, 17 Aug 2026 22:52:38 +0200 Message-ID: <20260817205242.1199851-12-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260817205242.1199851-1-den@openvz.org> References: <20260817205242.1199851-1-den@openvz.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::32d; envelope-from=den@openvz.org; helo=mail-wm1-x32d.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: 1787000121900158500 Content-Type: text/plain; charset="utf-8" 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 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 Sat Sep 26 23:53:30 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=1787000170; cv=none; d=zohomail.com; s=zohoarc; b=QQV0kwUaiiZ9rqcttLVMJqz4+yBSgUfhvmpcxm5OKx9ci36VkGXBWpHF8qrUAa+509CeULb9xALUtOLyQvtaoofKE3kG6Q/o4yzb1LWxsotESeQ7ycwjPFvPOf4rcJZJP6NLagCA0jyLg6bBPFyGo/1MHfTU8+S2RnyXOqtrAvI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787000170; h=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=lSm5NQKqDy0ps9/xCTmRAIukRHsQCl6pvMOawl5AhM8=; b=WILYdZskeyj0skrYT60ja7fbyM3T2Ps7PG9vSDvRhwhJOXritJZG01vK4Xh5eL5co856T8kSEt0aBUdT1rC4h5hGVRlUoe9Jh1U1JIbeNbKvvv900E3tbN5N/hfRoBigx+Z5lEBKMm+OygVm4bMoLH6L6TMAhZut5249i+c6Lqo= 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 1787000170750728.4148585652927; Mon, 17 Aug 2026 13:56:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ww4Ko-0006kN-K8; Mon, 17 Aug 2026 16:53:30 -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 1ww4KR-0006Zk-R7 for qemu-devel@nongnu.org; Mon, 17 Aug 2026 16:53:07 -0400 Received: from mail-wm1-x32c.google.com ([2a00:1450:4864:20::32c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ww4KN-0006je-Kf for qemu-devel@nongnu.org; Mon, 17 Aug 2026 16:53:07 -0400 Received: by mail-wm1-x32c.google.com with SMTP id 5b1f17b1804b1-4996f1ee4a4so31683665e9.2 for ; Mon, 17 Aug 2026 13:53:02 -0700 (PDT) Received: from athena ([2a06:5b06:b600:300:f6f8:884c:b162:eaeb]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-499961098cdsm202573365e9.6.2026.08.17.13.53.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Aug 2026 13:53:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1786999981; x=1787604781; darn=nongnu.org; h=content-transfer-encoding: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=lSm5NQKqDy0ps9/xCTmRAIukRHsQCl6pvMOawl5AhM8=; b=l+CWZ5DbqKzZ8v1xnNxqt9QmQwWC1byFrCFd005VI/5QSbCoHj61Xl0ltH2GoPw7PT IqWWQCtHIjJXKtkBnzAaOj3CF9cUiuJqdJ1qzN2wTf8XIPthx1eFOdJ9knf8K5fBcVIA U/pScDoTsVCDBR2z2jsCXXN6Q3a4rTuLl+o0wXfGpc/qe5r0NaMdIv3SuloKO58kKtt4 uBWc4Ld6wWTF8V+EkopzkFY9F9wtC8LYm4JZbMRNkCLRiNXvRgwDCApTNFxGblNEhU0k JfCYzNXpjTaqywNMSMOy1Ba7DPgeRgBz0vrL4yZXRiSWiwx47Z2ZR0GMFPRdSPcZ08cM 2PSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786999981; x=1787604781; h=content-transfer-encoding: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=lSm5NQKqDy0ps9/xCTmRAIukRHsQCl6pvMOawl5AhM8=; b=Bi+U03bo+/QISHgPmd7hMjf6W6twX6yemP+j7CCWje3ovDYLSyyEQ6c4x+rI2oUJYr g/pY0tBmnnZ5Ss4fhtn6uLYeyg+zjJsE3Wu8kHcpDNtiMaYwQnTJOHkLjSo1Pfyhm5lS ywCQy4ac051gddtx2hrcXcN2rZy8LLie7SGGmsq1vdKrmb+Et39C2sFfylO7IMB/0Tp6 XvjDs6cpUPo6hjOiaSTIc8OrR0R8eHVL5jFevGzcDBDV4kGT+AJf1ARYp/Uc2kukO2hU smStprdXlLwF45TZ9AO7VfXfgZX8K9Xbt5Njs+y9rk8Tdvbg24QZMvJdaO2j84Cu33ma tvBQ== X-Gm-Message-State: AOJu0YwxiDumZNIfkjwO/mzSfHsGSi2UG9PNn0fQMRUqdxVCfRGx/9Et kFYS6NLWVLqP9lmSPh1ziwt6RuaZ1Tj/sEg9ve/dQyX/0jUB63b7scaAS2TTlokqYe6nFzTUxSn 0tFgZ X-Gm-Gg: AR+sD10DQzWw8NKDEBf3he6SnZ6s36gHh9oizM9gIwKJTaQdauA/G8CPR7EkJhPd0aP tQLXghTInvwM0tXUUWwbfAoIzg32VFDztD8vmKjbx9HIboA9y2qPrCEYdDBjvg+lHeu03JpFdZY kmwRKaE1oJv7DyRp8sj7galHwppGH51RKu9aKmPfTw/9x1vzmE6fNla7huttPYmq4gH37jhT2Sc 3u2xcV5bgCC3XZ27rMU8aAdPedpcAxfq5wpThkkQYbS8bKPGThrmdfRo59h8Zh9QaqOjF7fWWGl uJwbT0H+ePHSIHnEJrLGnd0ctCYBrSxH29fxF/gSXEWd2oBCX4kcK0/PuqPyzgBxyJtP97PnEFv sQxTCZFmKoVA+CQKvsg1dzfttV8aawSGZRcsEusiMSzfBuXWoBGMewuFA29R39BQiHkRvuxJvIu P6x7VbpMTRIsP0mkm+WhJQ4R6JHR4BHTZSI5g5eHDPtK/afEs46w== X-Received: by 2002:a05:600c:3491:b0:493:e365:ace9 with SMTP id 5b1f17b1804b1-4999fb3be75mr54853995e9.11.1786999981567; Mon, 17 Aug 2026 13:53:01 -0700 (PDT) From: "Denis V. Lunev" To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, "Denis V. Lunev" , John Snow , Peter Maydell Subject: [PATCH 12/15] tests/qtest/ide-test: cover the IDENTIFY DEVICE geometry words Date: Mon, 17 Aug 2026 22:52:39 +0200 Message-ID: <20260817205242.1199851-13-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260817205242.1199851-1-den@openvz.org> References: <20260817205242.1199851-1-den@openvz.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::32c; envelope-from=den@openvz.org; helo=mail-wm1-x32c.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: 1787000172129158500 Content-Type: text/plain; charset="utf-8" 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 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 Sat Sep 26 23:53:30 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=1787000072; cv=none; d=zohomail.com; s=zohoarc; b=Qjdx2FXMdhB3vfKufrNHTxDWoITSsqEy46uFsm6FiqgJ2LWomqE/+lrmtxyrYL5DE4eKpyCu34/uhy2Q3gBwgqF1F7aYykarh5RHZx1Z+b3/MNmFxV7TatiyVYhZNEoReP3BS1NBON0lUVvuDC3D46CbVXkqemeJE2qH0UtXIg0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787000072; h=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=KPKW9brU9QG3yp36XoComUMPbLjwcwFlccNfku7ssMI=; b=kEYNKxMexwUMYsMaUqrVEVM4f/GEj7JXbVmE2qXeWfOt+HNDfI/5WJUvYLn4K7P8y7Pnq5d2xFVN+Pz7kovQI7sWuBvOKKOYKs1TtmWaxntxieTNBAiJpBFB1/IMzKB8tfC7JLvbz1J5wL6xMdods00xugJzIKoslbG3eZKrVhQ= 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 1787000072563819.8989835458302; Mon, 17 Aug 2026 13:54:32 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ww4Kk-0006gH-41; Mon, 17 Aug 2026 16:53: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 1ww4KT-0006ad-1J for qemu-devel@nongnu.org; Mon, 17 Aug 2026 16:53:09 -0400 Received: from mail-wm1-x332.google.com ([2a00:1450:4864:20::332]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ww4KO-0006js-0w for qemu-devel@nongnu.org; Mon, 17 Aug 2026 16:53:08 -0400 Received: by mail-wm1-x332.google.com with SMTP id 5b1f17b1804b1-4955aa106b1so34743595e9.0 for ; Mon, 17 Aug 2026 13:53:03 -0700 (PDT) Received: from athena ([2a06:5b06:b600:300:f6f8:884c:b162:eaeb]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-499961098cdsm202573365e9.6.2026.08.17.13.53.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Aug 2026 13:53:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1786999982; x=1787604782; darn=nongnu.org; h=content-transfer-encoding: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=KPKW9brU9QG3yp36XoComUMPbLjwcwFlccNfku7ssMI=; b=O5Jma5r1m7LB/VnZw5rjl4bjg5/c8W82ctP5tLO8lsYVwxZxuFbxgxRM3w0TnpxA9S y4CJC1BbZLMIZGeciu7hitxHMk90TEXDUX3LSBgXzDMsQSNUIR0hHeEUilC+XMgmfx3d guf4Jl0Q5xrW3V5hfZaKOTvdXLUdL6RzPvhJbLRdhKucjxpW14lYR5qaIGD5hrPnIpWz t9Lf2wON2chOCqrql8NgVq70hXXFczzFgFJ69Z9UDuYu04Nje2uNQKwhDJ3G2H79Kgmq gTXsdkTJQpqj9yM6Vc83xdt7+QPhbUgY/l27us3DMxWN++roJndxqM0wr5/lU4rhr6xN 2lCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786999982; x=1787604782; h=content-transfer-encoding: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=KPKW9brU9QG3yp36XoComUMPbLjwcwFlccNfku7ssMI=; b=Ji2LPF34/zmMpM8z/7GYGwg+yYKCJmDR0IbL38oGzpm5oTalRWgirTMb+eR+XVBxuJ BwcfPkseU2T/TnW2F/mvG094xDcaKEvIfJ4qHfezMxo5t9IfoPYXnQXIbUe7jyjiMU+q QakbwELdyrGzRUzkt8nNyptMxsPACMFpgyF13/XyURKI4C5/iahGSNfAdoneKaHz9jAM qoxh9icB+dBrwqDPy9sXB2h8vBYaUTNIDudyzc8Ck+n24RUi4wbNt9yVzs9T+vcg6vAL nWCjn2ewcYYgWsdH/e13K/Xp0rqWYG5eM6the/B1J4aYJ8ymuIO4FJHWfGKq/muTme8Z QP2Q== X-Gm-Message-State: AOJu0Yw6WR7VE5Nwxq6PRQub//FZAmj8MWK4HudRTqkZxh8Pszy6dZ/T yPH2/p5sqy+lMe7Gif+o2ynFoX1DamiboFey9gWKVd0l6L8kEL4NzhObgERQiWICQtMklCT2sKx lgdcN X-Gm-Gg: AR+sD13n7rr0Mz5MLKAZ84FGFRWf49a4JoCf8f0xLFUGyWMniVv0JalaqsgJvQMpeh5 TIIhR6oNmkFPJWruPi3doF/BH4wtCquo9VQXQL2ib/MpaTNWSI/MVcjx61KAgf3hQJr3J3T+2m+ hnAJi3eT8BvByQavPvEC0e8e9J9d5ZLandVU7BYAgMpoHBdTnCYSDE9NU3VRPK8cwIR8jkUFcJU 7Zhgal72lucoAuHybHjppLdusCxLpNmAVn8GPsQf3laaJ8yBfy6jPvPVZuXq4DxTdSAIwWzOkgW AqPrn71HGeNT1s4b+fcHFinaiaMZdXaMGImz31bI1MnAEuQtxX7by/Y5eZCDezzyt8Mpo3Ou7H1 6Ek9mTG12GBGMvsYB8uzusY2btH/9r6V9WAMl1lqDicdmYPFPtH6EriKYBma/xty/vLBGY6oV+X e5ZoJsF2HUs37w4vgn6Xh7YHQjgCB2hwBvzyOOtJkFt3jXog2Q0N5MWLgttKlX4eqTyIvVFD+z X-Received: by 2002:a05:600c:5286:b0:499:621a:2ec2 with SMTP id 5b1f17b1804b1-4998933fd79mr469158995e9.3.1786999982581; Mon, 17 Aug 2026 13:53:02 -0700 (PDT) From: "Denis V. Lunev" To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, "Denis V. Lunev" , John Snow , Peter Maydell Subject: [PATCH 13/15] hw/ide: revert the CHS translation on a hardware reset Date: Mon, 17 Aug 2026 22:52:40 +0200 Message-ID: <20260817205242.1199851-14-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260817205242.1199851-1-den@openvz.org> References: <20260817205242.1199851-1-den@openvz.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::332; envelope-from=den@openvz.org; helo=mail-wm1-x332.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: 1787000073691158500 Content-Type: text/plain; charset="utf-8" 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 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 c330508128..bd155f8d3a 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 Sat Sep 26 23:53:30 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=1787000123; cv=none; d=zohomail.com; s=zohoarc; b=SC/2cQuwqBQQpHo5Q4Fnauyywls2PZMu2ODKxRyuug5fttujsdOJQ43Q50QwQtHWRuObg8KmJv5dG7VbwRB7+pUOcO9wO36Vwb+z7md3dy6xj6xM9oY5AWsCelKA7g9RfJ7NH8cnv0JJUvHFfux64KlNgUcLd9Rm+bK1oNrFL5o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787000123; h=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=lHXpzZRkIeCsmDYCvmaEnMukQmAiI91OuLyzWCMD7vo=; b=fgxnD8RUoSgi07Ho5OBVlOMMGgebDlq2QzfJ7Qo9tXWYU9FXvZXc5/Z9007CokixCJVY6Mnb6pRCGBq+pqsOiuVZStT4qC6Rto3akFTv31Y5LFjGqIqGcYGnWucQCGL0uSIM3MhTHYDLyzAD6FmU8Z8kDPQjoCHeSX1wI3NUUNs= 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 1787000118006420.3128030660753; Mon, 17 Aug 2026 13:55:18 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ww4Kp-0006kT-23; Mon, 17 Aug 2026 16:53:31 -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 1ww4KT-0006aV-0n for qemu-devel@nongnu.org; Mon, 17 Aug 2026 16:53:09 -0400 Received: from mail-wm1-x332.google.com ([2a00:1450:4864:20::332]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ww4KR-0006kF-3m for qemu-devel@nongnu.org; Mon, 17 Aug 2026 16:53:08 -0400 Received: by mail-wm1-x332.google.com with SMTP id 5b1f17b1804b1-49800c6a846so46061735e9.3 for ; Mon, 17 Aug 2026 13:53:05 -0700 (PDT) Received: from athena ([2a06:5b06:b600:300:f6f8:884c:b162:eaeb]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-499961098cdsm202573365e9.6.2026.08.17.13.53.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Aug 2026 13:53:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1786999984; x=1787604784; darn=nongnu.org; h=content-transfer-encoding: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=lHXpzZRkIeCsmDYCvmaEnMukQmAiI91OuLyzWCMD7vo=; b=Ce7ODTsZ2FxDurKM0kSEnF4isiVcWeCNYpjYucPxIPUD3AiAgEgqi0n1X2hkTMJujO Bsp3iwFRVQmNlPSX+1IgSa2ExnwjLbovrmHJCZ6rNe5xJrf+d4eYayzeMiII5r0xeAKy dXDSy2RrHxkXHjrsx2jToLBQQ2fj8cRJJQWozQoWHeoL80vtfSEn8pk38mZgzHQDjUJ/ xh/8RcTEYD7a9iec/eNHoGTGC0GECLL7I43e7cD2x5hO05SpxlOaG/8DFC2OYz6wdCTT Yj0GY88ryRJnAvm5m4iLn/ZHXXwpDCxDFbhPAjygssHzPGEsE/Cc5sijlgAEhdlJy2/f MNfw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786999984; x=1787604784; h=content-transfer-encoding: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=lHXpzZRkIeCsmDYCvmaEnMukQmAiI91OuLyzWCMD7vo=; b=S1x64GsJBv1B3azYc93oKaRSBrVHKd2xaeo4aK5h/ndacrr4Ej0yfilWuFaMVCVbTf QGS1AUy3iNCTlNbXnyQxs1iR1NbVDVF4qQu1No2mwSb2sKjJlr/dTm2mEaytiOfoUH/Q X6jycwuWVAsB1z5ke5dDopOWMtjYMgNmB75mPJ17oJ+TluAU1N9DJ/OgKzDl3stt6frD BrwVOVqOdXPU43zvXf8xa2TxFOpwx0AwrnO/XumhDMYJ8VoBxeOwXSZLqC5sg95nnUdk 426AYsiZeTa2hr6nI8NkkxCVTu6Vmf8YuJaEkRg2MLIXPlQ5x6alDN1WqMG29wTs0Icw EVpg== X-Gm-Message-State: AOJu0YyQglJ1sLBn6NsGhNAn3YsPAjSVnzuJFHMr451ugpauADNOTnRj FiYOEUOMCXkHGKdW0vCT12q4KYMwYCoKm8t00EeNhkmZ7qxSHYypLz7U+oay0Qjc8uMkr5MYxUb dKR5w X-Gm-Gg: AR+sD12gLD7cUiLhJYwh3NssJbcbD0dhm7OQLGkemonuI7+8ZOABrvEorCV5DrkFE7e +fIUSq9M7hYcshBuvoqZn0qUOINtqbe0NqPCStRd5286yCoN/qw8umGTeQlCZ1eRCrLN1LXLtkx JLf0Q8jFAzOCu9qTTAuDfNdn93C3vg+qTMtsfBfq5M2LVCwt2x6ZN8khgfUOROd56nrQgrQi6cr 5Yt9pvi1nmPPpybYqbyfLcztYviHWbpZcBeZgGye6PA/JvmlsFA8+f3wvB1KuE3Nzn6R1If1VhW EWN0tjdPPNcJpF9VzCp/zy1VGf07bjQsLFxbhG/wEZFpYFtC+caN8MdS2OsFmiYfm/OSvfcWlky IozpFvzTnrw4qvjjrG0HirR9LVR/ikuw9usVxuTx8Fbt0Gf1srCBl7sZ+ByZR0KCFP7mLjLrP26 4vjIm6A9vKnTTdtQ4iAGihhTCNE1oeNMvu8PTspZkJ5WKPG3xgeyPCScyJt9sy X-Received: by 2002:a05:600c:8714:b0:499:8704:242c with SMTP id 5b1f17b1804b1-499878ca13bmr499428345e9.0.1786999984527; Mon, 17 Aug 2026 13:53:04 -0700 (PDT) From: "Denis V. Lunev" To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, "Denis V. Lunev" , John Snow , Peter Maydell Subject: [PATCH 14/15] tests/qtest/ide-test: cover the CHS translation across resets Date: Mon, 17 Aug 2026 22:52:41 +0200 Message-ID: <20260817205242.1199851-15-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260817205242.1199851-1-den@openvz.org> References: <20260817205242.1199851-1-den@openvz.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::332; envelope-from=den@openvz.org; helo=mail-wm1-x332.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: 1787000123824158500 Content-Type: text/plain; charset="utf-8" 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 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 Sat Sep 26 23:53:30 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=1787000112; cv=none; d=zohomail.com; s=zohoarc; b=Bpm7jcd+EKn0SlBOh+/QhGWI3Flq++OGwuEC2eS5xs7MbJrBVWV0kTmxblQB7nhriMMq2U1cmi3lWR+8WS2TzMY69vs3/iTI/3Hx34SPB+I/OuCTGytX7sRI13fAKIX2FTvxAEPBuA8sY6OGcpuwgcxKpFE09EY3F/X77YZOZzg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787000112; h=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=ywlkrEZ3c9Jf0YAOLGjGWCEeFiOhos4YHtOtMUf8ShY=; b=F40tBRCpQub3s6Eri72cS2LVC5eG2SolvMiVWHHmyx9XW9H0zX3rLFJnw+iwVwJWFt35c3ukCvUnGRj4M/OFv6o+6JCSrA7FtA3C7AZdT5y9jbq90fJbNLFyGuVUCekpE2gvJ1PPYCcw7uH3BIIoOse7CzVDk3fUjXA+v0dBFmE= 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 1787000112503538.0215917455562; Mon, 17 Aug 2026 13:55:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ww4Kk-0006gi-8s; Mon, 17 Aug 2026 16:53: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 1ww4KT-0006av-EP for qemu-devel@nongnu.org; Mon, 17 Aug 2026 16:53:11 -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 1ww4KR-0006kb-4M for qemu-devel@nongnu.org; Mon, 17 Aug 2026 16:53:09 -0400 Received: by mail-wm1-x335.google.com with SMTP id 5b1f17b1804b1-4996f1ee4a4so31684125e9.2 for ; Mon, 17 Aug 2026 13:53:06 -0700 (PDT) Received: from athena ([2a06:5b06:b600:300:f6f8:884c:b162:eaeb]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-499961098cdsm202573365e9.6.2026.08.17.13.53.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Aug 2026 13:53:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1786999986; x=1787604786; darn=nongnu.org; h=content-transfer-encoding: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=ywlkrEZ3c9Jf0YAOLGjGWCEeFiOhos4YHtOtMUf8ShY=; b=Qw/cCpLwMK3RD3rGCroGpvHxZXq2usgPiyItsLzENbeSCDiVcQtU7zNXUF5EBjB2Hl it9m9r9WsIrUF+L1oEHFkYD15POysVi/wArDGAf5BQudHTHOx0QthdNzKFzJxRi9Xiy1 hisojwnVDz6k2aU0uPTHt/aFR6SLSTpBXAK8huDLKyFmWla0Ju879e0wIoTfN1ID0mXl qqdI0h1LB+D+b8sWA6XiKlZo77Fw0aqqJJu1rNMMUq8olhVhv/isVuLBZuDBlfxzm9tr u/gNgk6H7OjceJ4682vtaeR0JIG99u/jOQBCKswOwV11Yob/S2WIEijrPF4YhxWrNd+k pTsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786999986; x=1787604786; h=content-transfer-encoding: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=ywlkrEZ3c9Jf0YAOLGjGWCEeFiOhos4YHtOtMUf8ShY=; b=iVj4yPh8GeCrdU8evfZmnOf6t6K+YCL3cqGp0NmndFniUuUOF8lVQRzpAnM9M5tqJq 40CDmZIa9EEsszrxXDMBNxyFV4CnK5LYK7znT0ksiO6vB3nEXI+DGWAztGxKMpjczdXQ Nlw3h0ecunuWsmdEzi6HHDaBIajeWyr8I/uhzIQHUFsV14D5iJpPCf5ktQj7jKnCp3gV olvi010JUBNt7T6L+u5mnrRZji1rfy1BRNds25bK7gw4VmnRVNkqRCYKd1uNSH641e5O lHKBMP3opB6zRU/d1F1qhQXvIUEAPPH2NVNPLfwTFRLeuJ/M5x6sIqnD42BG+SGZCku4 TGlw== X-Gm-Message-State: AOJu0YyNH+R+zzKCFHq6OC5ibYf0dVBd1dfeSCjjg7n5WU3LCi8j2C+b oDqZcF6kk8Rxs12YZhJ0Bqcbgcsv+J0eBD4jwGG8RkSTOqgXUka37u9GwXyH4DeflIoALsrsePO jJy/S X-Gm-Gg: AR+sD12R8stuJigAB6DpLxpNpzvsh2w86vs9ZXWPZxbRKkbhCDSSxmYy3+CRacf+9Xm BojqdydlsFT9dbtZ6XVYJGCMjxaAzu+ZEFVutJpc6qVnF0fIAY1DuVhePipxvP4YXh96CGHusZw Gvlsk3SWJP2us9RJDtDZjsHjS43QV2ag2AFkkmqcxBc9mtx5b5sbmsRarYLOAacEFt4Nkui10Ax K4Aq6OjrHQ6Eg2WlILlB9bGJkU/OJL17Wwd8Jg9+BjPmNgdhDK0vE9+y+859LbTo1A1A7QefPkU NqJoK/3w67zc8jPhZYX80QIArFL92adwN9kTyM7qKT7xZk9iGm3qO6PBtG3RKhkIWgOyy0HnI0X SmKywgj8fdFyBflr2iFv3Pdulc/Bn27v1t0D+Fw5LIM8ZVlUYqM0iXTIj1LdDdlRwGTPWkdL5uN LvRhLUONGfU6hcGzRy2Rhd2vNqlQCrv8h+zzq6DOy6hemOZKQM/Q== X-Received: by 2002:a05:600c:870c:b0:497:fecd:5b00 with SMTP id 5b1f17b1804b1-4999fb3be85mr52789335e9.9.1786999985699; Mon, 17 Aug 2026 13:53:05 -0700 (PDT) From: "Denis V. Lunev" To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, "Denis V. Lunev" , John Snow , Peter Maydell Subject: [PATCH 15/15] hw/ide: drop a redundant interrupt from INITIALIZE DEVICE PARAMETERS Date: Mon, 17 Aug 2026 22:52:42 +0200 Message-ID: <20260817205242.1199851-16-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260817205242.1199851-1-den@openvz.org> References: <20260817205242.1199851-1-den@openvz.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=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: 1787000113871158500 Content-Type: text/plain; charset="utf-8" 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 Signed-off-by: Denis V. Lunev --- hw/ide/core.c | 1 - 1 file changed, 1 deletion(-) diff --git a/hw/ide/core.c b/hw/ide/core.c index bd155f8d3a..1b86826e2e 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