From nobody Fri Apr 26 06:27:24 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of seabios.org designates 78.46.105.101 as permitted sender) client-ip=78.46.105.101; envelope-from=seabios-bounces@seabios.org; helo=coreboot.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of seabios.org designates 78.46.105.101 as permitted sender) smtp.mailfrom=seabios-bounces@seabios.org; arc=fail (BodyHash is different from the expected one); dmarc=fail(p=none dis=none) header.from=nutanix.com Return-Path: Received: from coreboot.org (coreboot.org [78.46.105.101]) by mx.zohomail.com with SMTPS id 1625149282872770.5311277343881; Thu, 1 Jul 2021 07:21:22 -0700 (PDT) Received: from authenticated-user (PRIMARY_HOSTNAME [PUBLIC_IP]) by coreboot.org (Postfix) with ESMTPA id 50EA41061D08; Thu, 1 Jul 2021 14:21:18 +0000 (UTC) Received: from authenticated-user (PRIMARY_HOSTNAME [PUBLIC_IP]) by coreboot.org (Postfix) with ESMTP id EDBB01061A6F for ; Thu, 1 Jul 2021 14:21:00 +0000 (UTC) Received: from authenticated-user (PRIMARY_HOSTNAME [PUBLIC_IP]) by mx0b-002c1b01.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 161EClUW012971; Thu, 1 Jul 2021 07:20:58 -0700 Received: from authenticated-user (PRIMARY_HOSTNAME [PUBLIC_IP]) by mx0b-002c1b01.pphosted.com with ESMTP id 39gx6ft0r6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 01 Jul 2021 07:20:57 -0700 Received: from authenticated-user (PRIMARY_HOSTNAME [PUBLIC_IP]) by CH2PR02MB6647.namprd02.prod.outlook.com (2603:10b6:610:78::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.21; Thu, 1 Jul 2021 14:20:55 +0000 Received: from authenticated-user (PRIMARY_HOSTNAME [PUBLIC_IP]) ([fe80::a91d:ad88:5b1f:c981]) by CH0PR02MB7898.namprd02.prod.outlook.com ([fe80::a91d:ad88:5b1f:c981%7]) with mapi id 15.20.4264.026; Thu, 1 Jul 2021 14:20:55 +0000 Received: from authenticated-user (PRIMARY_HOSTNAME [PUBLIC_IP]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nutanix.com; h=from : to : cc : subject : date : message-id : content-transfer-encoding : content-type : mime-version; s=proofpoint20171006; bh=HwOQI1t3cz/uBukhaS3T7CK0sEs6YZSHM/+X1X6L6NA=; b=ZcpiPWdKduCej/AWqbUQ/YRWIGAqtkGYZFM9beJffd48my6cp829eOZzVWaxvm5f6GDB sn2nU/daEO0CW5TxPVWl+1+8mkT6sJqa4p0xttKsdL/XrXjtO0Kxv6HbgOOsmJ09om74 LV2XJYjdLgzorE6WgnOGDlj1UVkH4cURWrzUi+G8cMtIuwhTKicNPIjbW2LAWz/aDGpc yFXy7bQdebwn4qkJGkQY0uu8oTLZ+KTIs+mUkYvjjya4tyg2OuzvUWbujsOyIlZwNPMI 2xroUUMvpUKQ/qv3jMCeyxuAc0SFHHAkTJAHDppBYCMelDPPr078Kih/F6TD+ek+dxz1 YQ== ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ZOvdvbSPoNEvh/CG4Gm2WDNJaOm34D/zlW6e/5kXTH9fUPLQRIjrUBdZ+6bJoZh078bq6iOScBh4Wmq3nBfLvlbKUArT5MraGdx4lFQwnI70SDCB/rIjWgcuqhldBxyUU9xC/4ipLSYysLo6b2bxhXhmBJHiIgD00fEYY8EtOi4aMbaNhXbGXF5R5dKn5mWyHDaWCKwvtN+LnRdfNXqCDBSyCgEMieFX0xc/fVprV2qp+dG1vsOxt36f5i+RS+apglnJxPBARgDlroO5NgdURVUDUhKRdGf8I/yHCXKUtgNooJCb9x7PtLLLGB9RmPh+cnS9Vt+ZYCTkdnNF2iwBYg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=HwOQI1t3cz/uBukhaS3T7CK0sEs6YZSHM/+X1X6L6NA=; b=JzSWdDwIYs2raqg1pIVnn/6Nl+B+ExUOAISDyx0rW22H7oHfbrGxMpg1LBByQ11ymeqzm4pKHYuHs0600ajSSjtC2BL3EOZkXZT+vMsj2DlYxhaY8OTvllRPLE3uHH5caRt/egqgmukTJJJUT4XmTT4c5gfSWORTatETXqHczddKH90Z/F6MHWHTikbyLkGB5RUvPyLfQudOH3mGJSlKa4JHg+aO/OR4nC+g74gGV/dSX8OoZXSXidK2Hoj++eiAFFd0/l/fmPVqTtD5OxV8Jmk+6c8nAIlDdHewio/McaS9pdxP0jcF2js5zfIudB/k7f0E7voDxk6L2R28pk8Gqw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nutanix.com; dmarc=pass action=none header.from=nutanix.com; dkim=pass header.d=nutanix.com; arc=none From: Thanos Makatos To: seabios@seabios.org Date: Thu, 1 Jul 2021 14:20:47 +0000 Message-Id: <20210701142047.47892-1-thanos.makatos@nutanix.com> X-ClientProxiedBy: BYAPR05CA0080.namprd05.prod.outlook.com (2603:10b6:a03:e0::21) To CH0PR02MB7898.namprd02.prod.outlook.com (2603:10b6:610:113::5) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: fef07621-a670-4b8d-a72f-08d93c9b7054 X-MS-TrafficTypeDiagnostic: CH2PR02MB6647: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: x-proofpoint-crosstenant: true X-MS-Oob-TLC-OOBClassifiers: OLM:569; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: rYp/tYsUafOLQ/LbHtgBEkzn32GZP1b0lfuHdho/NYV7AXIifRPt1DzB2fjoKX6gXkTVZQAgNrdzbLLQ0dz+aBBXIecRAdcolwpzZzR3XLO4mPkSSjbDi95NZdoo3ObYxTxP1eFeB8tYRHF0jvtIICxPxVAgIbN2tQKZmCJtGa4/Km0mIKXYcgbeQ6OJuB0ldwV0L7677jj6hmhQmMhHx/nJjzPiXGC99JveJjTRTBZF5KHZ1yW+eoAlM5XyV8b4pOfHMA/6LjmcfF4n+Oo7JU7Bjd35pFBhz5pEduZd4H6VvERrkXIv9V8kps7nI5MY1jCIQYPOHOBdwk7iAHt1FPWA0Ut7Ra7YAsnJXl6ntAGAJwA3Nl5+IAvAx21fyBJONg5kqyrKMK+ABiyFnmjFbZN/55gsju9siTMoWOe/HtVBTQDg7OIA4eS2srdBoNFDrwYjVkggEjg9qDtf/x0zohU2YBv6pNwY9Rr0WZphU9ort8oQkd9JpAMGELNDZsdxzg8ceo8cAXdDCKEGKsQDiHJviyt3bKCGR91xemOR4ALSf0P2f28QOG8cRK0BmroMDzkHtW5VIb6krVB51VXLjS8ZKzYZLc6T0S/s6aG3gYt6pp3dkywGDqk6bh+/ObO0BsuoMPJj6Wce+/0GD4jOb7GevSFiM+aqvg2uQDw12KOY1vVssS9l+06Gy2O5V8UPwyasaTrURyOpu2iVGPJ0/Q== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH0PR02MB7898.namprd02.prod.outlook.com;PTR:;CAT:NONE;SFS:(39860400002)(376002)(396003)(136003)(346002)(366004)(6486002)(7696005)(52116002)(44832011)(1076003)(2616005)(956004)(16526019)(186003)(8676002)(8936002)(2906002)(36756003)(26005)(38350700002)(6916009)(316002)(38100700002)(83380400001)(6666004)(66476007)(66556008)(478600001)(107886003)(4326008)(66946007)(5660300002)(86362001);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?GHE71siJcoBPDr/zlc6oPHnrh18BzGnjp8i41i5F8kd1rntwO/dab9FlF41I?= =?us-ascii?Q?2uIsQa0Fy1cjBi9Yt6P3jLaPhUYcX3K2up1OHs6Kcjg0ABhtORotDHjMOdg8?= =?us-ascii?Q?2kl/g4hbhJ2vYP9fOaJesIDQgERRQfEJ+CkzqLV7zYUz9FGiM31qNzbl3cRY?= =?us-ascii?Q?wiJSIbOSbaAGK8eJTgwtksnEtf+6/eAUPhqfFPUe6Xq5yte0d35AzOgbw7L5?= =?us-ascii?Q?EzO1VJzfID1Mkm5bW8qy9ZRlEQRFi25CpK4JVhrJ4wdqV+38x+QFFIIFrMqU?= =?us-ascii?Q?Yis0UI42/9/fBOYS7wSwla00LKCzdoQuYVTkIapupgVd7w9+B40ay0yePIUK?= =?us-ascii?Q?eS3jdQHxnWONl9aA+pJoAkUDOTMbqKTl66U2BX5+9whRNeHhWSt/wMccNRTd?= =?us-ascii?Q?fCSokoNYjyY7smDYFZ9DaO2XOia5MEcizzQeIBsX0oHEJID8R6q7XGqTdShV?= =?us-ascii?Q?VgBNlfLo1Jh8OBxWGx1MmOa2jJyL2sX5L98023VVosKx+XOzXC4RtYcRsFoN?= =?us-ascii?Q?I7eSOd6Fb1tmMokGy34K4z02cEg/BpjVix2gPWDkYzw23Opk5UqP3+PyqIiW?= =?us-ascii?Q?L6q3LhD6rIHwFZCCfRLQKnh7SFHYxcvoT3eQ2FaqgBOEG02QyNr8vPG2+thf?= =?us-ascii?Q?mYH0rg15HbQL1ZBmHbxjXWapfoDG4nyTj9SbjsbImfvJ5UnNeIPXtU0jZdRn?= =?us-ascii?Q?U3Ju8PW0om0quaOpvkIxYjW5D0IbXlzo+E1FMHyH5DS/kVtzl9z2o4ChvclB?= =?us-ascii?Q?GMPE6LXx1oDqaCMat3faPgGXjCqWU570aysM84co/KEMMxwFiqbV2JOgXQg7?= =?us-ascii?Q?5qPcx/CjAIaAzyztaT6ZL97ma1ZfjWFGflq4sO/tzXNZe56rrncwz4wlZC9s?= =?us-ascii?Q?vwbwWKXx3M5GMXt2DN+2MKrYe31H1KEeOhesQpCKItxC0szBf509WKytTwQJ?= =?us-ascii?Q?RU5EirNQ6AIIWYkx5hv/p4TEXano6Tuhidkcr5liCdPdOBSWTgqJuOl067GZ?= =?us-ascii?Q?us3k8ydJLd9dDFNrQxnsyBihSyO0VZwu9dFd2C62DYHcoD7oJKwTUdzwpAbE?= =?us-ascii?Q?I4treSLIBe2r9+NY0tAfBKte89IW2gOXLIC3HevN+1+Xni9VWpU5EFtI0uV0?= =?us-ascii?Q?Za5Svo/JRC+Bn6u9lDnZOc5mih7aVav9/CNg87u5QCo5kq/fYModH/MT1d6Y?= =?us-ascii?Q?GVy6+lNxquaOoEK6p1+nzbz2VXhjHml59vbqLZOZycHpiH7VQ0VuRmlFfnEB?= =?us-ascii?Q?1X+ZZwGp8lyNgRUJ8N0ST2UwwJN30WnUUZf38yY2dqY+HC3NS4BzqgkyMOZv?= =?us-ascii?Q?Djmgo1IRZNSlZv0cPAiIzYur?= X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-Network-Message-Id: fef07621-a670-4b8d-a72f-08d93c9b7054 X-MS-Exchange-CrossTenant-AuthSource: CH0PR02MB7898.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Jul 2021 14:20:55.3163 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: bb047546-786f-4de1-bd75-24e5b6f79043 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: qNcWf/dByaev3cBhxlovSrsplUsmQ4gQtOf26Uv3CTODE05xmKlVdcVOV6OaFQjIk/op7x5VoYBRn2lePZTmeYMYLznu/ovepgkrgC+8m7M= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR02MB6647 X-Proofpoint-ORIG-GUID: urOWZfkt_vQ4SiiNH1tBNev5bEe8vSgp X-Proofpoint-GUID: urOWZfkt_vQ4SiiNH1tBNev5bEe8vSgp X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.391,18.0.790 definitions=2021-07-01_08:2021-07-01,2021-07-01 signatures=0 X-Proofpoint-Spam-Reason: safe Message-ID-Hash: TKKUCH5PYZPXZG3NA2F5SALUFUVUYDZG X-Message-ID-Hash: TKKUCH5PYZPXZG3NA2F5SALUFUVUYDZG X-MailFrom: thanos.makatos@nutanix.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-seabios.seabios.org-0; header-match-seabios.seabios.org-1; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: kraxel@redhat.com, Thanos Makatos X-Mailman-Version: 3.3.4 Precedence: list Subject: [SeaBIOS] [PATCH] nvme: don't keep probing namespaces after an active one has been found List-Id: SeaBIOS mailing list Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Content-Transfer-Encoding: quoted-printable X-Spamd-Bar: ++ X-Spam-Level: ** Authentication-Results: coreboot.org; auth=pass smtp.auth=mailman@coreboot.org smtp.mailfrom=seabios-bounces@seabios.org X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" From: Thanos Makatos The current implementation keeps probing NVMe namespaces even if an active one has been found. This is unnecessary and most importantly results in memory allocation failure if the are more than a few dozens of nmespaces. Also, not probing the remaining namespaces after having found an active one reduces boot time. I've tested with 1024 namespaces where 512 where active and it worked fined. Signed-off-by: Thanos Makatos --- src/hw/nvme.c | 51 +++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 39 insertions(+), 12 deletions(-) diff --git a/src/hw/nvme.c b/src/hw/nvme.c index 746e468..73c1a52 100644 --- a/src/hw/nvme.c +++ b/src/hw/nvme.c @@ -233,9 +233,22 @@ nvme_admin_identify_ns(struct nvme_ctrl *ctrl, u32 ns_= id) ns_id)->ns; } =20 -static void +static char* +nvme_ns_desc(const struct nvme_namespace *ns, u32 ns_id) +{ + return znprintf(MAXDESCSIZE, "NVMe NS %u: %llu MiB (%llu %u-byte " + "blocks + %u-byte metadata)\n", + ns_id, (ns->lba_count * ns->block_size) = >> 20, + ns->lba_count, ns->block_size, + ns->metadata_size); +} + +/* Returns a pointer to the namespace if it's usable, NULL otherwise. */ +struct nvme_namespace* nvme_probe_ns(struct nvme_ctrl *ctrl, u32 ns_idx, u8 mdts) { + struct nvme_namespace *ns =3D NULL; + u32 ns_id =3D ns_idx + 1; =20 struct nvme_identify_ns *id =3D nvme_admin_identify_ns(ctrl, ns_id); @@ -257,7 +270,7 @@ nvme_probe_ns(struct nvme_ctrl *ctrl, u32 ns_idx, u8 md= ts) goto free_buffer; } =20 - struct nvme_namespace *ns =3D malloc_fseg(sizeof(*ns)); + ns =3D malloc_fseg(sizeof(*ns)); if (!ns) { warn_noalloc(); goto free_buffer; @@ -277,6 +290,7 @@ nvme_probe_ns(struct nvme_ctrl *ctrl, u32 ns_idx, u8 md= ts) buffer size. */ warn_internalerror(); free(ns); + ns =3D NULL; goto free_buffer; } =20 @@ -296,16 +310,13 @@ nvme_probe_ns(struct nvme_ctrl *ctrl, u32 ns_idx, u8 = mdts) =20 ns->dma_buffer =3D zalloc_page_aligned(&ZoneHigh, NVME_PAGE_SIZE); =20 - char *desc =3D znprintf(MAXDESCSIZE, "NVMe NS %u: %llu MiB (%llu %u-by= te " - "blocks + %u-byte metadata)", - ns_id, (ns->lba_count * ns->block_size) >> 20, - ns->lba_count, ns->block_size, ns->metadata_size= ); - - dprintf(3, "%s\n", desc); - boot_add_hd(&ns->drive, desc, bootprio_find_pci_device(ctrl->pci)); + char *desc =3D nvme_ns_desc(ns, ns_id); + dprintf(3, "%s", desc); + free(desc); =20 free_buffer: free (id); + return ns; } =20 =20 @@ -560,6 +571,13 @@ nvme_wait_csts_rdy(struct nvme_ctrl *ctrl, unsigned rd= y) return 0; } =20 +static void +nvme_destroy_io_queues(struct nvme_ctrl *ctrl) +{ + nvme_destroy_sq(&ctrl->io_sq); + nvme_destroy_cq(&ctrl->io_cq); +} + /* Returns 0 on success. */ static int nvme_controller_enable(struct nvme_ctrl *ctrl) @@ -628,15 +646,24 @@ nvme_controller_enable(struct nvme_ctrl *ctrl) goto err_destroy_admin_sq; } =20 - /* Populate namespace IDs */ + /* Find first active namespace. */ int ns_idx; - for (ns_idx =3D 0; ns_idx < ctrl->ns_count; ns_idx++) { - nvme_probe_ns(ctrl, ns_idx, identify->mdts); + struct nvme_namespace *ns =3D NULL; + for (ns_idx =3D 0; ns_idx < ctrl->ns_count && !ns; ns_idx++) { + ns =3D nvme_probe_ns(ctrl, ns_idx, identify->mdts); + } + if (!ns) { + dprintf(3, "no active NVMe namespace\n"); + goto err_destroy_ioq; } + boot_add_hd(&ns->drive, nvme_ns_desc(ns, ns_idx + 1), + bootprio_find_pci_device(ctrl->pci)); =20 dprintf(3, "NVMe initialization complete!\n"); return 0; =20 + err_destroy_ioq: + nvme_destroy_io_queues(ctrl); err_destroy_admin_sq: nvme_destroy_sq(&ctrl->admin_sq); err_destroy_admin_cq: --=20 2.22.3 _______________________________________________ SeaBIOS mailing list -- seabios@seabios.org To unsubscribe send an email to seabios-leave@seabios.org