From nobody Mon Sep 22 03:38:13 2025 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=avm.de ARC-Seal: i=1; a=rsa-sha256; t=1758290354; cv=none; d=zohomail.com; s=zohoarc; b=BPYitA1XL87BinT1iX8VlIzZEI0l+v5TPoXjnKtUCqSdadjRwar4XxBdHefm7peRvgqHyqHqCDTtqmvlsJGbH4MC0hdqx3nPvYJdT4n+6RPwpCz4vY76jM9HAkbeithqf8TAKVvvkoH5qie8ZwCvpvGbycdyTUAfGOe2tM0n1Wo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758290354; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=yChbkDumJBCZ70Luai6I6f6ueACjlh3MGYverr5t/DU=; b=eeC6IGk734yZu4F36DUkyrBnN4poiPGXUmLw7rlzusvI5z9/U2RIi+gNLRu8Oyenj0zjShhV0e60Se2UCFD1B8gkdVMxzx+leKkaIstaPL8S5YoiZ3HC0CVlJZqijka1CEsCnPrM0ofYLR0TFq9TEmxIYqJ87swDxMygBf5p4J8= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1758290354258575.0353690827465; Fri, 19 Sep 2025 06:59:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uzbcJ-0004WV-DB; Fri, 19 Sep 2025 09:57:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uzaKq-0001xu-Lp; Fri, 19 Sep 2025 08:35:32 -0400 Received: from mail.avm.de ([212.42.244.120]) by eggs.gnu.org with esmtps (TLS1.2:DHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uzaKh-00005R-T4; Fri, 19 Sep 2025 08:35:31 -0400 Received: from [172.16.0.1] (helo=mail.avm.de) by mail.avm.de with ESMTP (eXpurgate 4.53.4) (envelope-from ) id 68cd4dfe-c042-7f0000032729-7f000001888a-1 for ; Fri, 19 Sep 2025 14:35:10 +0200 Received: from mail-notes.avm.de (mail-notes.avm.de [172.16.0.1]) by mail.avm.de (Postfix) with ESMTP; Fri, 19 Sep 2025 14:35:10 +0200 (CEST) Received: from [127.0.1.1] ([172.17.89.139]) by mail-notes.avm.de (HCL Domino Release 14.0FP4) with ESMTP id 2025091914351039-13018 ; Fri, 19 Sep 2025 14:35:10 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=avm.de; s=mail; t=1758285310; bh=+xeUtlXnOkzvUlUWqkuBl6HavCwXzUB2iouZMxnO2Xc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=HfDCIJZDLoZ2gxExc0bZa0v/Xx+bghyCTUJK9eQa8g6cBYYpKrOYvOXyY0xkT4L3r sfUtoL7Nlv2vovmU5Diiu1XTPrROimCpdnS6+6/bt1FDtYUqKGYliH0ehS/8CDn6M9 14GCWOFIGS1G+Vwtiiw5xWfctQ2nuHZcLdJON3Lw= From: Christian Speich Date: Fri, 19 Sep 2025 14:34:43 +0200 Subject: [PATCH 4/4] hw/sd/sdcard: Erase in large blocks MIME-Version: 1.0 Message-Id: <20250919-sdcard-performance-b4-v1-4-e1037e481a19@avm.de> References: <20250919-sdcard-performance-b4-v1-0-e1037e481a19@avm.de> In-Reply-To: <20250919-sdcard-performance-b4-v1-0-e1037e481a19@avm.de> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Bin Meng , qemu-block@nongnu.org, Christian Speich X-Mailer: b4 0.14.2 X-MIMETrack: Itemize by SMTP Server on ANIS1/AVM(Release 14.0FP4|March 10, 2025) at 19.09.2025 14:35:10, Serialize by Router on ANIS1/AVM(Release 14.0FP4|March 10, 2025) at 19.09.2025 14:35:11, Serialize complete at 19.09.2025 14:35:11 X-TNEFEvaluated: 1 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" X-purgate-ID: 149429::1758285310-16E67DB6-1A0AF395/0/0 X-purgate-type: clean X-purgate-size: 2076 X-purgate-Ad: Categorized by eleven eXpurgate (R) https://www.eleven.de X-purgate: This mail is considered clean (visit https://www.eleven.de for further information) X-purgate: clean 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=212.42.244.120; envelope-from=c.speich@avm.de; helo=mail.avm.de X-Spam_score_int: -44 X-Spam_score: -4.5 X-Spam_bar: ---- X-Spam_report: (-4.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.105, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Fri, 19 Sep 2025 09:57:37 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: 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 @avm.de) X-ZM-MESSAGEID: 1758290356962116600 Erasing each block individually is slow, so this patch reworks the logic to erase as much as possible in one go. Signed-off-by: Christian Speich --- hw/sd/sd.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/hw/sd/sd.c b/hw/sd/sd.c index 94ef3cc62582717ee044c4b114b7f22bd1b4a256..42870fa19414be61e43d2e07619= ed193cc514319 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -1086,7 +1086,6 @@ static void sd_erase(SDState *sd) bool sdsc =3D true; uint64_t wpnum; uint64_t erase_addr; - int erase_len =3D 1 << HWBLOCK_SHIFT; =20 trace_sdcard_erase(sd->erase_start, sd->erase_end); if (sd->erase_start =3D=3D INVALID_ADDRESS @@ -1115,19 +1114,26 @@ static void sd_erase(SDState *sd) sd->erase_end =3D INVALID_ADDRESS; sd->csd[14] |=3D 0x40; =20 - for (erase_addr =3D erase_start; erase_addr <=3D erase_end; - erase_addr +=3D erase_len) { - if (sdsc) { - /* Only SDSC cards support write protect groups */ + /* Only SDSC cards support write protect groups */ + if (sdsc) { + for (erase_addr =3D erase_start; erase_addr <=3D erase_end; + erase_addr =3D ROUND_UP(erase_addr + 1, WPGROUP_SIZE)) { + uint64_t wp_group_end =3D ROUND_UP(erase_addr + 1, WPGROUP_SIZ= E) - 1; + size_t to_erase =3D MIN(erase_end, wp_group_end) - erase_addr; + wpnum =3D sd_addr_to_wpnum(erase_addr); assert(wpnum < sd->wp_group_bits); if (test_bit(wpnum, sd->wp_group_bmap)) { sd->card_status |=3D WP_ERASE_SKIP; continue; } + + blk_pwrite_zeroes(sd->blk, erase_addr + sd_part_offset(sd), + to_erase, 0); } - blk_pwrite_zeroes(sd->blk, erase_addr + sd_part_offset(sd), - erase_len, 0); + } else { + blk_pwrite_zeroes(sd->blk, erase_start + sd_part_offset(sd), + erase_end - erase_start, 0); } } =20 --=20 2.43.0