From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id E69CEC55184 for ; Tue, 4 Aug 2026 17:01:04 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wrIVM-00006s-4P; Tue, 04 Aug 2026 13:00:40 -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 1wrIVK-00006A-O3 for qemu-devel@nongnu.org; Tue, 04 Aug 2026 13:00:38 -0400 Received: from mail-wr1-x42e.google.com ([2a00:1450:4864:20::42e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wrIVI-0000ii-Kj for qemu-devel@nongnu.org; Tue, 04 Aug 2026 13:00:38 -0400 Received: by mail-wr1-x42e.google.com with SMTP id ffacd0b85a97d-47fe89fb333so16868f8f.3 for ; Tue, 04 Aug 2026 10:00:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1785862835; x=1786467635; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=0oNDH01FbQte7UkYHPhvNcB6113WA9wPSR1l+l/ks+A=; b=Xv9eARI5x6MHTER8wpyJKJ4MANuGRlkshUC2ZvHmMDxpGhBClW0rxLrNuCHe41YYsz 1gy631tLsOV36a4wcaTnFbuPBNvpDsTZsV7xrIK421C+/exGLVFXPJ6ioG7NZdl+IM+Q ++HnCcH6dVxdvfykfj1oA5JDhhr3ZvXE31Z0yLIGU53bOnkrFGnwR0anyYGBUIQPl2Lj Zfn90o9xCayLSRfujyxUmbMka0BqomxYyEmoC3pxazE3DENT/phDhsneV886UkGxv+/W BAZoRh+xYZsoTtNkZ/nO5bj/Nhewyqsn19Lh0xbEJg1pi+cGEKyFgbEynXGYRXRJz+yj qUbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785862835; x=1786467635; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=0oNDH01FbQte7UkYHPhvNcB6113WA9wPSR1l+l/ks+A=; b=Kxh/+Lku22SYDVbT6T+7l1CHCckwbZYagn9me5sjN8P7Yaiop8E9ofRMyy1m53ZWR2 fEEqegDmDfbkIMqTtR+u/kmm8q4ggqJP9dJQlb2tJsV/IEnhgn8Z3hSxNZ6PiFJvSCEP Rq+2cSz4tuOpYmWW2MVvOjlzRdX3A8DBrxPS538v2RVt74/lxK94R9al1w2VdAfb9fuM Tr21NmOwUEJo6ORuCl7ZihkPUorS+dgsoARyw9U/q2wKwvRzQ6Uz2lUjoa0wNcJ4aL7X galzMoK1CybrRLAxJ+iSfaqLt6i6FpTNjpHM/eCe+VnAab/6m4NDLNZAKeTVaMdu/F4J 4Hsg== X-Gm-Message-State: AOJu0YxIdEZ+76d3Wi2A5YggcoH64oG+dFyUEiJs2BLmSUAN/n2Uf7Nz 5YI3AVWuGb97cmr9DVn8FAhTFDUjCJe/lT72sC66sYs1JRHqu3E+N/i7rPU98v6pAAlQ6kdYu8d m1UkI X-Gm-Gg: AR+sD12Eemp/0RRrrmK2k8lF2COGFt7uRnPRhq6YeWMLHcAkR/LEA+bWG1qZCqsOIP3 aQPeT+tmEEDTYAjfOEg7chGyE0LhnBHysfQlF3XmK2KQh9eyzn5rA/Bh1Mgxca++MMrAC3GZejE BX/eqxibQ08SAh+Qlq1FAYa+2Ct4a6GlqukdHtrUotiJ656yqxfIZv/QoKeoRVMC8lNtll+3R7i hZYvzbOmp++aOv+MeGbTwg9WxVCVfJ2DF0mQHUHN1Ar4lpqMTswgnNgxlhcn7DK2rNLvzBA/ps6 cy13st85kNKTnotfTbsi/1gd0zRCY1tAXrkdCzNdSEA+2UkJcIb+ctWakqqht71WLr7L6EyA1J0 8zRfcCDuJsl75VyuyR77PD42Ap8cLAoLjMOVKGvHWBD4hp7j2A7wIUVrH+V5OcXDsJAMo5qO8Lz fO513bCox+hviGwmBA0yul/IPnOjFSnJtuRFJNeqi96Zipuw== X-Received: by 2002:a05:6000:299b:20b0:462:e086:35f with SMTP id ffacd0b85a97d-47fec52b1aamr1021141f8f.21.1785862835001; Tue, 04 Aug 2026 10:00:35 -0700 (PDT) Received: from athena ([213.133.28.44]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-47fec23ec3asm1234116f8f.31.2026.08.04.10.00.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Aug 2026 10:00:34 -0700 (PDT) From: "Denis V. Lunev" To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, John Snow , "Denis V. Lunev" , Stefan Hajnoczi , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL v2 5/7] tests/qtest/ahci: cover raw (2352-byte) ATAPI CD reads Date: Tue, 4 Aug 2026 19:00:12 +0200 Message-ID: <20260804170015.3128363-6-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260804170015.3128363-1-den@openvz.org> References: <20260804170015.3128363-1-den@openvz.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=2a00:1450:4864:20::42e; envelope-from=den@openvz.org; helo=mail-wr1-x42e.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Add /ahci/cdrom/{pio,dma}/raw: read several sectors with READ CD in raw mode (atapi_raw), so the ATAPI 2352-byte unpack path is exercised through the AHCI delivery, which IDE coverage does not reach. Each sector's 2048-byte payload is verified at its in-sector offset. The PIO case uses a byte-count limit of one raw sector per DRQ burst: libqos asserts a one-sector PIO transfer, and the multi-sector unpack loop is already covered by the IDE raw test. Signed-off-by: Denis V. Lunev CC: Stefan Hajnoczi CC: Philippe Mathieu-Daudé --- tests/qtest/ahci-test.c | 68 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/tests/qtest/ahci-test.c b/tests/qtest/ahci-test.c index 44799eea15..58bc04b3ef 100644 --- a/tests/qtest/ahci-test.c +++ b/tests/qtest/ahci-test.c @@ -1565,6 +1565,31 @@ static int ahci_cb_cmp_buff(AHCIQState *ahci, AHCICommand *cmd, return 0; } +static int ahci_cb_cmp_raw(AHCIQState *ahci, AHCICommand *cmd, + const AHCIOpts *opts) +{ + unsigned char *tx = opts->opaque; + unsigned char *rx; + unsigned i, nsectors; + + if (!opts->size) { + return 0; + } + + nsectors = opts->size / ATAPI_RAW_SECTOR_SIZE; + rx = g_malloc0(opts->size); + qtest_bufread(ahci->parent->qts, opts->buffer, rx, opts->size); + /* Each raw sector carries its 2048-byte payload past a 16-byte header. */ + for (i = 0; i < nsectors; i++) { + g_assert_cmphex(memcmp(rx + i * ATAPI_RAW_SECTOR_SIZE + 16, + tx + i * ATAPI_SECTOR_SIZE, + ATAPI_SECTOR_SIZE), ==, 0); + } + g_free(rx); + + return 0; +} + static void ahci_test_cdrom(int nsectors, bool dma, uint8_t cmd, bool override_bcl, uint16_t bcl) { @@ -1625,6 +1650,47 @@ static void test_cdrom_pio_multi(void) ahci_test_cdrom_read10(3, false); } +static void ahci_test_cdrom_raw(int nsectors, bool dma) +{ + AHCIQState *ahci; + unsigned char *tx; + char *iso; + int fd; + AHCIOpts opts = { + .size = (uint64_t)ATAPI_RAW_SECTOR_SIZE * nsectors, + .atapi = true, + .atapi_dma = dma, + .atapi_raw = true, + .set_bcl = true, + .bcl = ATAPI_RAW_SECTOR_SIZE, /* one raw sector per DRQ burst */ + .post_cb = ahci_cb_cmp_raw, + }; + uint64_t iso_size = (uint64_t)ATAPI_SECTOR_SIZE * (nsectors + 1); + + fd = prepare_iso(iso_size, &tx, &iso); + opts.opaque = tx; + + ahci = ahci_boot_and_enable("-drive if=none,id=drive0,file=%s,format=raw " + "-M q35 " + "-device ide-cd,drive=drive0 ", iso); + + ahci_exec(ahci, ahci_port_select(ahci), CMD_ATAPI_READ_CD, &opts); + + g_free(tx); + ahci_shutdown(ahci); + remove_iso(fd, iso); +} + +static void test_cdrom_dma_raw(void) +{ + ahci_test_cdrom_raw(3, true); +} + +static void test_cdrom_pio_raw(void) +{ + ahci_test_cdrom_raw(3, false); +} + /* * Regression test: a buffered ATAPI read completing after a command * engine restart must not dereference the cleared cur_cmd. Cover both @@ -2100,8 +2166,10 @@ int main(int argc, char **argv) qtest_add_func("/ahci/cdrom/dma/single", test_cdrom_dma); qtest_add_func("/ahci/cdrom/dma/multi", test_cdrom_dma_multi); + qtest_add_func("/ahci/cdrom/dma/raw", test_cdrom_dma_raw); qtest_add_func("/ahci/cdrom/pio/single", test_cdrom_pio); qtest_add_func("/ahci/cdrom/pio/multi", test_cdrom_pio_multi); + qtest_add_func("/ahci/cdrom/pio/raw", test_cdrom_pio_raw); qtest_add_func("/ahci/cdrom/pio/bcl", test_atapi_bcl); qtest_add_func("/ahci/cdrom/eject", test_atapi_tray); -- 2.53.0