Cover Letter Detail
Show a cover letter.
GET /api/1.2/covers/2224338/?format=api
{ "id": 2224338, "url": "http://patchwork.ozlabs.org/api/1.2/covers/2224338/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/cover/20260417-sdcard-performance-b4-v4-0-119e66be10c2@avm.de/", "project": { "id": 14, "url": "http://patchwork.ozlabs.org/api/1.2/projects/14/?format=api", "name": "QEMU Development", "link_name": "qemu-devel", "list_id": "qemu-devel.nongnu.org", "list_email": "qemu-devel@nongnu.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20260417-sdcard-performance-b4-v4-0-119e66be10c2@avm.de>", "list_archive_url": null, "date": "2026-04-17T09:51:33", "name": "[v4,0/7] hw/sd: Improve performance of read/write/erase", "submitter": { "id": 91343, "url": "http://patchwork.ozlabs.org/api/1.2/people/91343/?format=api", "name": "Christian Speich", "email": "c.speich@avm.de" }, "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/cover/20260417-sdcard-performance-b4-v4-0-119e66be10c2@avm.de/mbox/", "series": [ { "id": 500297, "url": "http://patchwork.ozlabs.org/api/1.2/series/500297/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=500297", "date": "2026-04-17T09:51:34", "name": "hw/sd: Improve performance of read/write/erase", "version": 4, "mbox": "http://patchwork.ozlabs.org/series/500297/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/covers/2224338/comments/", "headers": { "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=avm.de header.i=@avm.de header.a=rsa-sha256\n header.s=mail header.b=aXmWWnx4;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists1p.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)" ], "Received": [ "from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fxr1v6NBSz1yDF\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 17 Apr 2026 19:58:59 +1000 (AEST)", "from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists1p.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wDfxE-0002tq-3k; Fri, 17 Apr 2026 05:57:40 -0400", "from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <c.speich@avm.de>)\n id 1wDfx9-0002jU-EZ; Fri, 17 Apr 2026 05:57:35 -0400", "from mail.avm.de ([2001:bf0:244:244::119])\n by eggs.gnu.org with esmtps (TLS1.2:DHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <c.speich@avm.de>)\n id 1wDfx5-0002zL-HP; Fri, 17 Apr 2026 05:57:33 -0400", "from [172.16.0.1] (helo=mail.avm.de)\n by mail.avm.de with ESMTP (eXpurgate 4.55.2)\n (envelope-from <c.speich@avm.de>)\n id 69e20405-1e6c-7f0000032729-7f000001c50a-1\n for <multiple-recipients>; Fri, 17 Apr 2026 11:57:25 +0200", "from mail-notes.avm.de (mail-notes.avm.de [172.16.0.1])\n by mail.avm.de (Postfix) with ESMTP;\n Fri, 17 Apr 2026 11:57:25 +0200 (CEST)", "from [127.0.1.1] ([172.17.89.139])\n by mail-notes.avm.de (HCL Domino Release 14.0FP4)\n with ESMTP id 2026041711572441-2973 ;\n Fri, 17 Apr 2026 11:57:24 +0200" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=avm.de; s=mail;\n t=1776419845; bh=hMZI9Of630JExhvUar0FTq2FjOJ5OfP7PFDSsZ5OJ8A=;\n h=From:Subject:Date:To:Cc:From;\n b=aXmWWnx4XW4wW5naiW2n26WFxN8IrFiZ2QMNjVeuSQzSxMqGuN7FL5LTS4Z7tth2V\n cLgk5eR68hl0fK6/LwuxlVhGtFlPlvxKvbb5dUme80MVIrik5RLk5YOXqUqkDfzM8S\n MeiFGlJB61IjdB47lipUx9jy+Ux1iuYKtun4C9qE=", "From": "Christian Speich <c.speich@avm.de>", "Subject": "[PATCH v4 0/7] hw/sd: Improve performance of read/write/erase", "Date": "Fri, 17 Apr 2026 11:51:33 +0200", "Message-Id": "<20260417-sdcard-performance-b4-v4-0-119e66be10c2@avm.de>", "MIME-Version": "1.0", "X-B4-Tracking": "v=1; b=H4sIAKUC4mkC/3XNzQrCMAzA8VeRnq0kWeesJ99DPPQjcz3sg1aKM\n vbudoKCh10C/0B+mUXiGDiJ824WkXNIYRxKqP1OuM4Md5bBlxYEVINGksk7E72cOLZj7M3gWFo\n lvYaTtbY2AEqU2ylyG54f93or3YX0GOPr8ybjuv2KekPMKEEyQtWwOqFBfTG5P3gWK5fpR2AZW\n wQVwitSGixiRfRHVF/iCARqi6hWwqFrsSHmuvkRy7K8Afyn7Ek9AQAA", "X-Change-ID": "20250912-sdcard-performance-b4-d908bbb5a004", "To": "qemu-devel@nongnu.org", "Cc": "=?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= <philmd@linaro.org>,\n Bin Meng <bmeng.cn@gmail.com>, qemu-block@nongnu.org,\n Marcel Apfelbaum <marcel.apfelbaum@gmail.com>,\n Yanan Wang <wangyanan55@huawei.com>, Zhao Liu <zhao1.liu@intel.com>,\n Christian Speich <c.speich@avm.de>", "X-Mailer": "b4 0.14.2", "X-MIMETrack": "Itemize by SMTP Server on ANIS1/AVM(Release 14.0FP4|March 10,\n 2025) at 17.04.2026 11:57:24,\n Serialize by Router on ANIS1/AVM(Release 14.0FP4|March 10, 2025) at\n 17.04.2026 11:57:24, Serialize complete at 17.04.2026 11:57:24", "X-TNEFEvaluated": "1", "Content-Transfer-Encoding": "7bit", "Content-Type": "text/plain; charset=\"utf-8\"", "X-purgate-ID": "149429::1776419845-8E72B373-383F0CAF/0/0", "X-purgate-type": "clean", "X-purgate-size": "3153", "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\n further information)", "clean" ], "Received-SPF": "pass client-ip=2001:bf0:244:244::119;\n envelope-from=c.speich@avm.de; helo=mail.avm.de", "X-Spam_score_int": "-25", "X-Spam_score": "-2.6", "X-Spam_bar": "--", "X-Spam_report": "(-2.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.54,\n DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n 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 <qemu-devel.nongnu.org>", "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>", "List-Archive": "<https://lists.nongnu.org/archive/html/qemu-devel>", "List-Post": "<mailto:qemu-devel@nongnu.org>", "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>", "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>", "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org", "Sender": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org" }, "content": "This patch series improves the performance of read/write/erase operations\non sdcards.\n\nThis is done by increasing the maximum buffer size that is worked on.\nFrom 1 byte (master) to 512 bytes (commit 1-3) to larger than 512\n(adma commit).\n\nTesting on my system with fio I see the following rough performance\nvalues in MiB/s.\n\n read write readwrite\n master: 6 6 3/ 3\n first commit: 51 43 23/ 23\nsecond commit: 392 180 144/143\n\nTested on a 2GiB raw image with:\n fio --filename=/dev/mmcblk0 --direct=1 --runtime=60 --time_based --bs=128k --rw={mode}\n\nThe adma values are somewhat unstable but always >100MiB/s, I'm not sure\nwhy but I guess it has something to do with the host side caching.\n\nThe fifth commit fixes the DATA_STAT_AFTER_ERASE bit in SCR and\nintroduces an option to allow to erase blocks to 0x00.\n\nThe sixth commit optimizes block erase when erase-blocks-as-zero=true\nis used, by passing the zeroing request down the to the block device.\nErasing 2GiB now takes 0.1s instead of 26s.\n\nSigned-off-by: Christian Speich <c.speich@avm.de>\n---\nChanges in v4:\n- Rebase onto master, no changes needed.\n- Renames:\n - sd_blk_{read,write} -> sd_blk_{read,write}_bounce_buffer\n - sd_blk_{read,write}_direct -> sd_blk_{read,write}\n - to_erase -> erase_len\n- Extract erase logic into sd_blk_erase helper\n- Enable erase-blocks-as-zero by default. Add compat for 11.0 and below\n to keep it disabled.\n- Add cleanup commit to update trace events.\n- Link to v3: https://lore.kernel.org/qemu-devel/20260204-sdcard-performance-b4-v3-0-dc1cf172ee57@avm.de\n\nChanges in v3:\n- Rebase onto master, updating read/write path for newly added RBMP\n- Split up commit 1 into multiple commits\n - change interface to allow \"short\" read/writes that are continued\n by the core later by calling again\n- Link to v2: https://lore.kernel.org/qemu-devel/20251202-sdcard-performance-b4-v2-0-d42490b11322@avm.de\n\nChanges in v2:\n- Properly set DATA_STAT_AFTER_ERASE in SCR\n- Add erase-blocks-as-zero option to allow the user to switch between\n 0x00 and 0xFF for erased blocks.\n- Link to v1: https://lore.kernel.org/qemu-devel/20250919-sdcard-performance-b4-v1-0-e1037e481a19@avm.de\n\n---\nChristian Speich (7):\n hw/sd: Switch read/write primitive to buf+len\n hw/sd/sd: Allow multi-byte read/write for generic paths\n hw/sd/sd: Use multi-byte/block writes for block path\n hw/sd/sdhci: Don't use bounce buffer for ADMA\n hw/sd/sdcard: Add erase-blocks-as-zero option.\n hw/sd/sdcard: Optimize erase blocks as zero.\n hw/sd: Update trace events for buf+len data\n\n hw/core/machine.c | 5 +\n hw/sd/core.c | 53 ++++++--\n hw/sd/sd.c | 353 ++++++++++++++++++++++++++++++++++++++++-------------\n hw/sd/sdhci.c | 102 +++++++++-------\n hw/sd/trace-events | 6 +-\n include/hw/sd/sd.h | 22 ++--\n 6 files changed, 389 insertions(+), 152 deletions(-)\n---\nbase-commit: da6c4fe60fee30dd77267764d55b38af9cb89d4b\nchange-id: 20250912-sdcard-performance-b4-d908bbb5a004\n\nBest regards," }