From nobody Tue Feb 10 05:14:33 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=samsung.com ARC-Seal: i=1; a=rsa-sha256; t=1621912117; cv=none; d=zohomail.com; s=zohoarc; b=c5iEXIoi8sSJE0i+X71lwLQU9n6CvTd3dq+GCL9W5hCd15srDx7oiM6n63NuFeLEX6Sy7ikS4fBtvgjIGeD1TcMEIuzyPAjA4FyFFXt7bIz3BMDGuJhgUrB4/pxcx880mMD0clv21BoB/0Ll5uUBjKjyPqh/1s3K0d8ZmPHawh4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1621912117; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=aUuX7RWDWcOU7t85eMlP/aQ7+cbnNpTbI7wdp2DZtxA=; b=i8j95fBWBKeWX6VCWzD8milSnMW2INcVk/5dKYSLPS4Z7CSCDu9xA48Ij9bgG2OO6c4FFConEYhqt86JYfXUzTQEQa90WMw7OmR0jCPAQ5HiSurcXSzDYT2M8R4LuhrTZWleA52QostKoFVdvSIvJDN0Mvav9+p+DbbGvV4v9ro= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1621912117618351.25357271000564; Mon, 24 May 2021 20:08:37 -0700 (PDT) Received: from localhost ([::1]:38576 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1llNQq-0001bK-FJ for importer@patchew.org; Mon, 24 May 2021 23:08:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50808) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1llNOh-0007FJ-Qu for qemu-devel@nongnu.org; Mon, 24 May 2021 23:06:23 -0400 Received: from mailout3.samsung.com ([203.254.224.33]:31474) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1llNOf-0001ru-18 for qemu-devel@nongnu.org; Mon, 24 May 2021 23:06:23 -0400 Received: from epcas5p4.samsung.com (unknown [182.195.41.42]) by mailout3.samsung.com (KnoxPortal) with ESMTP id 20210525030617epoutp03871a7627442554ef5e906080d2655bd3~CMFmkETsT1831618316epoutp03o for ; Tue, 25 May 2021 03:06:17 +0000 (GMT) Received: from epsmges5p2new.samsung.com (unknown [182.195.42.74]) by epcas5p2.samsung.com (KnoxPortal) with ESMTP id 20210525030616epcas5p2ab10f5c9b07b455cd4b0827540acc706~CMFmHsgw90270602706epcas5p2C; Tue, 25 May 2021 03:06:16 +0000 (GMT) Received: from epcas5p1.samsung.com ( [182.195.41.39]) by epsmges5p2new.samsung.com (Symantec Messaging Gateway) with SMTP id B3.63.09697.8A96CA06; Tue, 25 May 2021 12:06:16 +0900 (KST) Received: from epsmtrp2.samsung.com (unknown [182.195.40.14]) by epcas5p1.samsung.com (KnoxPortal) with ESMTPA id 20210524212845epcas5p18d606ec98a28aaf6086b84d19b3dc47f~CHe5TQ8Qd1906619066epcas5p17; Mon, 24 May 2021 21:28:45 +0000 (GMT) Received: from epsmgms1p2.samsung.com (unknown [182.195.42.42]) by epsmtrp2.samsung.com (KnoxPortal) with ESMTP id 20210524212845epsmtrp2bbaf27ecc4157a78fc6a946f9f106479~CHe5SfzSv2698226982epsmtrp2E; Mon, 24 May 2021 21:28:45 +0000 (GMT) Received: from epsmtip1.samsung.com ( [182.195.34.30]) by epsmgms1p2.samsung.com (Symantec Messaging Gateway) with SMTP id CE.CE.08163.D8A1CA06; Tue, 25 May 2021 06:28:45 +0900 (KST) Received: from 2030045822.sa.corp.samsungelectronics.net (unknown [107.108.221.178]) by epsmtip1.samsung.com (KnoxPortal) with ESMTPA id 20210524212843epsmtip1fe47481ea59542b30fa681aa64382b6d~CHe36_4wr0279302793epsmtip1p; Mon, 24 May 2021 21:28:43 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout3.samsung.com 20210525030617epoutp03871a7627442554ef5e906080d2655bd3~CMFmkETsT1831618316epoutp03o DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1621911977; bh=aUuX7RWDWcOU7t85eMlP/aQ7+cbnNpTbI7wdp2DZtxA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kpouVvcRc3xezBCuwlw0LfzxHOSUUktPHl45TwnJAhNUVwwggbvKgpbMamdI4du2B 7c0zECtId507q39mBbghstiktMxF0lMBJGSLsFBPL2gEU8fH1e/WcvDVat36TM5WyO WZ1YawlK38DGhEAEbcxzbHFwj3TfkK3P5ZAvEGqs= X-AuditID: b6c32a4a-639ff700000025e1-7d-60ac69a8aeba From: Gollu Appalanaidu To: qemu-devel@nongnu.org Subject: [PATCH 2/2] tests/qtest/nvme-test: add boot partition read test Date: Tue, 25 May 2021 02:54:16 +0530 Message-Id: <20210524212416.26652-3-anaidu.gollu@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210524212416.26652-1-anaidu.gollu@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrAIsWRmVeSWpSXmKPExsWy7bCmuu6KzDUJBpduGVi83nmc2eLK/vOM FvsPfmO1mHToGqPFkoupFvNuKVvMetfOZnG8dweLxetJ/1kdOD1+nGtn8zi34zy7x6ZVnWwe T65tZvJ4v+8qm0ffllWMAWxRXDYpqTmZZalF+nYJXBn7ji5mKZioVdF55QxrA+MuhS5GDg4J AROJL+8Nuhi5OIQEdjNKTDy1jA3C+cQosf7iddYuRk4g5zOjxOEnASA2SMO2f09ZIIp2MUrc +P+JHcLpZJJ439XLBlLFJmAkMfvtG0YQW0RAUuJ312lmEJsZZMe3uTogtrCAh8T3J3OZQGwW AVWJlo5rLCA2r4CtxJTrLUwQ2+QlVm84ANbLKWAnsa1rAtgyCYFb7BLb1r5nhvjBRWLTFE2I emGJV8e3sEPYUhKf3+0FuocdyK6WOFwE0dnBKHHs8gY2iBJ7iX/PpjGCTGEW0JRYv0sfIiwr MfXUOiaIi/kken8/gbqGV2LHPBhbTWLBre9Qm2QkZv65zQphe0hMaGmChs9EoF0rf7FMYJSb hbBiASPjKkbJ1ILi3PTUYtMCo7zUcr3ixNzi0rx0veT83E2M4ESh5bWD8eGDD3qHGJk4GA8x SnAwK4nw/u1bmSDEm5JYWZValB9fVJqTWnyIUZqDRUmcd8XDyQlCAumJJanZqakFqUUwWSYO TqkGJt7q0yyOHe9rWVQWVE8JN25pZfVkuDxl5dyQt/s9dk3d+jRrQrwzWxtbhLtyV98N/YjD 3Gu3Jb7I9brLnCgowviSTejms/tlq6ulZgZ+36An3KHMH3NCdO6addPK6h3Yl1RsbHiVZB8d 881QyzI0JerLYt/vocmle9+LGgqzhBj/fjXfl8eN2bNy+R5XKR3hmWu2N7xtV3+Toa8+6bvp 0wi5qrMWGvmWjRxl02asdNBevi0nTE/yvsYKl9nWJh4tv3X+68hqBAuX5Abk+6/+xvWLycLD r1nblW+yqdim/yc9PdNdXn679OjHKpGqFyo9DBs0fCbM/n76x7TJO/Y/3Vz79sHRhTsDebIk lNSUWIozEg21mIuKEwFaJ6/YgwMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrKLMWRmVeSWpSXmKPExsWy7bCSnG6v1JoEg30fWS1e7zzObHFl/3lG i/0Hv7FaTDp0jdFiycVUi3m3lC1mvWtnszjeu4PF4vWk/6wOnB4/zrWzeZzbcZ7dY9OqTjaP J9c2M3m833eVzaNvyyrGALYoLpuU1JzMstQifbsErox9RxezFEzUqui8coa1gXGXQhcjJ4eE gInEtn9PWUBsIYEdjBIfXyVBxGUkfp2aygxhC0us/PecvYuRC6imnUliT/9JNpAEm4CRxOy3 bxhBbBEBSYnfXaeZQYqYBY4ySlxunww2VVjAQ+L7k7lMIDaLgKpES8c1sDivgK3ElOstTBAb 5CVWbzgAto1TwE5iW9cEdoiLbCVOLj7KPIGRbwEjwypGydSC4tz03GLDAqO81HK94sTc4tK8 dL3k/NxNjOCQ1NLawbhn1Qe9Q4xMHIyHGCU4mJVEeP/2rUwQ4k1JrKxKLcqPLyrNSS0+xCjN waIkznuh62S8kEB6YklqdmpqQWoRTJaJg1OqgekoX2Tsjv8Zy3T+fD4p4FEfoR40tyt1goeZ C/PsC4sX3GScEceV/uBPsp/kXzVF42rRr40SqwU085lP1ih2h/Yu/uoR/tFnpazrFNNfX50O Pk2Ys/utiNoalqf14tZJiXcMJe1iF68zmcn/Scvr9sF6ly1L9vHfdZD9nhyY5zF1T5J2ccb9 50zZ6wVvCCi0py7atm6y+zwNYYHVl/9eyu3J7vCue2XjesgoJrZUvkbhwvODTq+slC72TyzY /8nw86J/jZzz1ZwfMAs+LmOzvHT6n4TCowDJgpS0t39qZsd7fH2SP7fR4x3zZL6lZwVWsV3Y MTEq9tnRR4Ua9jtrbv+zfHX2XUNm7/fgvDQhfiWW4oxEQy3mouJEAK7JcPC4AgAA X-CMS-MailID: 20210524212845epcas5p18d606ec98a28aaf6086b84d19b3dc47f X-Msg-Generator: CA Content-Type: text/plain; charset="utf-8" X-Sendblock-Type: REQ_APPROVE CMS-TYPE: 105P X-CMS-RootMailID: 20210524212845epcas5p18d606ec98a28aaf6086b84d19b3dc47f References: <20210524212416.26652-1-anaidu.gollu@samsung.com> Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=203.254.224.33; envelope-from=anaidu.gollu@samsung.com; helo=mailout3.samsung.com X-Spam_score_int: -74 X-Spam_score: -7.5 X-Spam_bar: ------- X-Spam_report: (-7.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.371, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_HI=-5, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: fam@euphon.net, kwolf@redhat.com, qemu-block@nongnu.org, Gollu Appalanaidu , mreitz@redhat.com, its@irrelevant.dk, stefanha@redhat.com, kbusch@kernel.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Add a test case for reading an NVMe Boot Partition without enabling the controller. Signed-off-by: Gollu Appalanaidu --- tests/qtest/nvme-test.c | 118 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 117 insertions(+), 1 deletion(-) diff --git a/tests/qtest/nvme-test.c b/tests/qtest/nvme-test.c index d32c953a38..8409adac04 100644 --- a/tests/qtest/nvme-test.c +++ b/tests/qtest/nvme-test.c @@ -13,6 +13,19 @@ #include "libqos/libqtest.h" #include "libqos/qgraph.h" #include "libqos/pci.h" +#include "libqos/pci-pc.h" +#include "libqos/malloc-pc.h" +#include "libqos/malloc.h" +#include "libqos/libqos.h" +#include "include/block/nvme.h" +#include "include/hw/pci/pci.h" + +#define NVME_BPINFO_BPSZ_UNITS (128 * KiB) +#define NVME_BRS_BPSZ_UNITS (4 * KiB) +#define NVME_BRS_READ_MAX_TIME 1000000 +#define TEST_IMAGE_SIZE (2 * 128 * KiB) + +static char *t_path; =20 typedef struct QNvme QNvme; =20 @@ -44,6 +57,13 @@ static void *nvme_create(void *pci_bus, QGuestAllocator = *alloc, void *addr) return &nvme->obj; } =20 +static void drive_destroy(void *path) +{ + unlink(path); + g_free(path); + qos_invalidate_command_line(); +} + /* This used to cause a NULL pointer dereference. */ static void nvmetest_oob_cmb_test(void *obj, void *data, QGuestAllocator *= alloc) { @@ -66,12 +86,100 @@ static void nvmetest_oob_cmb_test(void *obj, void *dat= a, QGuestAllocator *alloc) g_assert_cmpint(qpci_io_readl(pdev, bar, cmb_bar_size - 1), !=3D, 0x44= 332211); } =20 +static void nvmetest_bp_read_test(void *obj, void *data, QGuestAllocator *= alloc) +{ + uint16_t test_size =3D 32; + size_t bp_test_len =3D test_size * NVME_BRS_BPSZ_UNITS; + uint8_t *read_buf =3D g_malloc(bp_test_len); + uint8_t *cmp_buf =3D g_malloc(bp_test_len); + QNvme *nvme =3D obj; + QPCIDevice *pdev =3D &nvme->dev; + QPCIBar nvme_bar; + uint8_t brs =3D 0; + uint64_t sleep_time =3D 0; + uintptr_t guest_buf; + uint64_t buf_addr; + + memset(cmp_buf, 0x42, bp_test_len); + + guest_buf =3D guest_alloc(alloc, bp_test_len); + buf_addr =3D cpu_to_le64(guest_buf); + + qpci_device_enable(pdev); + nvme_bar =3D qpci_iomap(pdev, 0, NULL); + + /* BPINFO */ + uint32_t bpinfo =3D qpci_io_readl(pdev, nvme_bar, 0x40); + uint16_t single_bp_size =3D bpinfo & BPINFO_BPSZ_MASK; + uint8_t active_bpid =3D bpinfo >> BPINFO_ABPID_SHIFT; + uint8_t read_select =3D (bpinfo >> BPINFO_BRS_SHIFT) & BPINFO_BRS_MASK; + + g_assert_cmpint(single_bp_size, =3D=3D, 0x1); + g_assert_cmpint(active_bpid, =3D=3D, 0x1); + g_assert_cmpint(read_select, =3D=3D, NVME_BPINFO_BRS_NOREAD); + + /* BPMBL */ + uint64_t bpmbl =3D buf_addr; + uint32_t bpmbl_low =3D bpmbl & 0xffffffff; + uint32_t bpmbl_hi =3D (bpmbl >> 32) & 0xffffffff; + qpci_io_writel(pdev, nvme_bar, 0x48, bpmbl_low); + qpci_io_writel(pdev, nvme_bar, 0x4B, bpmbl_hi); + + /* BPRSEL */ + qpci_io_writel(pdev, nvme_bar, 0x44, 32); + + while (true) { + usleep(1000); + sleep_time +=3D 1000; + brs =3D qpci_io_readb(pdev, nvme_bar, 0x43) & BPINFO_BRS_MASK; + if (brs =3D=3D NVME_BPINFO_BRS_SUCCESS || brs =3D=3D NVME_BPINFO_B= RS_ERROR || + sleep_time =3D=3D NVME_BRS_READ_MAX_TIME) { + break; + } + } + g_assert_cmpint(brs, =3D=3D, NVME_BPINFO_BRS_SUCCESS); + + qtest_memread(pdev->bus->qts, guest_buf, read_buf, bp_test_len); + g_assert_cmpint(memcmp(cmp_buf, read_buf, bp_test_len), =3D=3D, 0); + + g_free(cmp_buf); + g_free(read_buf); + g_test_queue_destroy(drive_destroy, t_path); +} + static void nvme_register_nodes(void) { + int fd; + FILE *fh; + uint16_t bpsz =3D 2; + size_t bp_len =3D NVME_BPINFO_BPSZ_UNITS * bpsz; + size_t ret; + uint8_t *pattern =3D g_malloc(bp_len); + + t_path =3D g_strdup("/tmp/qtest.XXXXXX"); + + /* Create a temporary raw image */ + fd =3D mkstemp(t_path); + g_assert_cmpint(fd, >=3D, 0); + ret =3D ftruncate(fd, TEST_IMAGE_SIZE); + g_assert_cmpint(ret, =3D=3D, 0); + close(fd); + + memset(pattern, 0x42, bp_len); + + fh =3D fopen(t_path, "w+"); + ret =3D fwrite(pattern, NVME_BPINFO_BPSZ_UNITS, bpsz, fh); + g_assert_cmpint(ret, =3D=3D, bpsz); + fclose(fh); + + char *bp_cmd_line =3D g_strdup_printf("-drive id=3Dbp0,file=3D%s,if=3D= none," + "format=3Draw", t_path); + QOSGraphEdgeOptions opts =3D { .extra_device_opts =3D "addr=3D04.0,drive=3Ddrv0,serial=3Dfoo", .before_cmd_line =3D "-drive id=3Ddrv0,if=3Dnone,file=3Dnull-co://= ," - "file.read-zeroes=3Don,format=3Draw", + "file.read-zeroes=3Don,format=3Draw ", + bp_cmd_line, }; =20 add_qpci_address(&opts, &(QPCIAddress) { .devfn =3D QPCI_DEVFN(4, 0) }= ); @@ -83,6 +191,14 @@ static void nvme_register_nodes(void) qos_add_test("oob-cmb-access", "nvme", nvmetest_oob_cmb_test, &(QOSGra= phTestOptions) { .edge.extra_device_opts =3D "cmb_size_mb=3D2" }); + + qos_add_test("bp-read-access", "nvme", nvmetest_bp_read_test, + &(QOSGraphTestOptions) { + .edge.extra_device_opts =3D "bootpart=3Dbp0" + }); + + /* Clean Up */ + g_free(pattern); } =20 libqos_init(nvme_register_nodes); --=20 2.17.1