Cover Letter Detail
Show a cover letter.
GET /api/1.0/covers/2221318/?format=api
{ "id": 2221318, "url": "http://patchwork.ozlabs.org/api/1.0/covers/2221318/?format=api", "project": { "id": 14, "url": "http://patchwork.ozlabs.org/api/1.0/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": "" }, "msgid": "<20260409060155.94704-1-matthieu@min.io>", "date": "2026-04-09T06:01:52", "name": "[0/2] NVMe namespace hotplug and drive reconnection support", "submitter": { "id": 93098, "url": "http://patchwork.ozlabs.org/api/1.0/people/93098/?format=api", "name": "mr-083", "email": "matthieu@minio.io" }, "series": [ { "id": 499253, "url": "http://patchwork.ozlabs.org/api/1.0/series/499253/?format=api", "date": "2026-04-09T06:01:52", "name": "NVMe namespace hotplug and drive reconnection support", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/499253/mbox/" } ], "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 (2048-bit key;\n secure) header.d=minio.io header.i=@minio.io header.a=rsa-sha256\n header.s=minio header.b=XuqLuOoN;\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=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)" ], "Received": [ "from lists.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 4frtCJ4GmQz1xtJ\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 09 Apr 2026 18:19:54 +1000 (AEST)", "from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wAkbe-0006LU-7c; Thu, 09 Apr 2026 04:19:18 -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 <matthieu@minio.io>) id 1wAiSe-0005lq-Bi\n for qemu-devel@nongnu.org; Thu, 09 Apr 2026 02:01:52 -0400", "from mail-wm1-x330.google.com ([2a00:1450:4864:20::330])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <matthieu@minio.io>) id 1wAiSc-0006pI-Lo\n for qemu-devel@nongnu.org; Thu, 09 Apr 2026 02:01:52 -0400", "by mail-wm1-x330.google.com with SMTP id\n 5b1f17b1804b1-488a9033b2cso5267135e9.2\n for <qemu-devel@nongnu.org>; Wed, 08 Apr 2026 23:01:49 -0700 (PDT)", "from localhost\n (2a01cb00141148004df9ec80d3fa1cac.ipv6.abo.wanadoo.fr.\n [2a01:cb00:1411:4800:4df9:ec80:d3fa:1cac])\n by smtp.gmail.com with UTF8SMTPSA id\n 5b1f17b1804b1-488cfa75ae2sm48909875e9.14.2026.04.08.23.01.47\n (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);\n Wed, 08 Apr 2026 23:01:47 -0700 (PDT)" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=minio.io; s=minio; t=1775714508; x=1776319308; darn=nongnu.org;\n h=content-transfer-encoding:mime-version:message-id:date:subject:cc\n :to:from:from:to:cc:subject:date:message-id:reply-to;\n bh=BQIDX/WNV5Pzl0aC//tD4ssejDFf4jBgsYoG1vBrsEc=;\n b=XuqLuOoNIKtp3/yxPUHMcHk2xeBNzntD3Giza3ASjeeUZRVWxHobogqiHG9OiljI+W\n HD48iOks+JCINi1ly1yFmmA9znLsrRTz6gnAgt4k+jhE376iBtgKJe8y2zPn9x73S98L\n CFtevKlUdlKrKhMLjin8sSQiJ46R4FQmFhz/tBgSjgm6HzMbIjQILUo8XHUG2wP6alnV\n /NUJLyoRejGjh7ismiw1t/wCmhyOOc7K0R6zRxRkwLQs/TzGB4ZcWDjLXLZXG7t/iWQ8\n RiFIotC7IXqYu0q9u6H5b3DJ9Oe5pxBXQrpTfMVvosmC0wdljqoKBeOXKsQH7sTlb316\n hkhw==", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1775714508; x=1776319308;\n h=content-transfer-encoding:mime-version:message-id:date:subject:cc\n :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date\n :message-id:reply-to;\n bh=BQIDX/WNV5Pzl0aC//tD4ssejDFf4jBgsYoG1vBrsEc=;\n b=paQI95mXhoZwzIwxkLjocc8+G2T4PjOt5SPH3y6xRVY+61I5o4a4yow17FY6HegoeL\n N9aTmFkoJpSUonNiq1A9ElHvjzXDDE60gV8g2OyzqlQJu/n7tIF98lUnoKGEuMSrk1N8\n R24rBDlzjrlQD3j8/ErVy4NRalB5eil2FTrJ80cG5iHjJvddh0w/979xc45RntlyotrB\n 63J3FBN8CpmSSrzs/A2Dsk/juf/0ooPAdNdq6zB82IA8j7e4ThoP6FLSGijRp3c0yRg4\n q8SAv21nHozlQ3OBaQKBa/OZTfb76EyNcXQb+8ygVK6QsSiL+DUTpLVvDTiHFC3WtGjz\n qvsg==", "X-Gm-Message-State": "AOJu0Yw8guG6YEcxZHwrN59cKrBaTnMHJH0qYqBMx8Mr1A76zuAnAzya\n 7dTKkihZla9bemEWWm0V6nk2QV0JptkV/rXlxMd9lwpKyXx7zLHNY/seI1I12kVu5NGf0TifRdx\n k6QyNMRRNO7n/rd4Xj/5EF2mzSwsr6sleCUzULRCgJpuCDTI9uC/InFWg+Q5hxAxeIzNbhb8FLG\n qAOb4z6sDjZLONzEiFHmFhZ24N/oGleaqyvSNirqM=", "X-Gm-Gg": "AeBDieuTXm7E8ejVKWhHrTgcsLOY5nQi9oH75k7FBlhnzLxPJ7PNDUqs9rYkUpgIvVK\n m2XACMqxvyYVIk6XgiWml9KvzAPijOZUeLGpNpwVjbrd7rT4et/uvmO5LWTt4JjzHXEEvr8y98J\n J9QIKzLBBC1kcylw9LACO+IUWz1BmJ9GqEdqJA/hG0R8hya+X+et+kXcGqxH/8PmgTCvU+vomxl\n lAxrz6lZtH+arH/7RaCuKHKcHLyh7Vc5aVUDAqB5RM3S4BsXbEBDXjhhqe+BNyCzsWi5cEyj4YV\n AGAjFwaPd7oPRyizbOp7gWxMSoCKcEfEiaI0FDAuiybJt1adcwfAdxBSiKDMyzzN3dInP/EOb3Q\n 4KXSQsgtYAVGC9EFdxo+4lO2UMFfROUIe+LgCfVC0a1Vba36YjVXBGpLOZjguK+6JKf2aQVaIe1\n X3xJX4p3N/BTrcsJ3ox0mZId0xzF6hOcaqcItpEUHnWRiopCnYSvsqQAGCbesObMnr4IcK+KpvV\n +zHxRmPhg2M4JM4XBtYm8WpqRh9dhReBpz+MEwGvGwXK8OnjXyupXKG2xGWFUL1uJdlw2U/", "X-Received": "by 2002:a05:600c:358b:b0:485:4135:5c92 with SMTP id\n 5b1f17b1804b1-488995cb858mr393204295e9.0.1775714508006;\n Wed, 08 Apr 2026 23:01:48 -0700 (PDT)", "From": "mr-083 <matthieu@minio.io>", "X-Google-Original-From": "mr-083 <matthieu@min.io>", "To": "qemu-devel@nongnu.org,\n\tqemu-block@nongnu.org", "Cc": "its@irrelevant.dk, kbusch@kernel.org, stefanha@redhat.com,\n mr-083 <matthieu@min.io>", "Subject": "[PATCH 0/2] NVMe namespace hotplug and drive reconnection support", "Date": "Thu, 9 Apr 2026 08:01:52 +0200", "Message-ID": "<20260409060155.94704-1-matthieu@min.io>", "X-Mailer": "git-send-email 2.53.0", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Received-SPF": "pass client-ip=2a00:1450:4864:20::330;\n envelope-from=matthieu@minio.io; helo=mail-wm1-x330.google.com", "X-Spam_score_int": "-10", "X-Spam_score": "-1.1", "X-Spam_bar": "-", "X-Spam_report": "(-1.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n HK_NAME_MR_MRS=0.998,\n RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,\n SPF_PASS=-0.001 autolearn=no autolearn_force=no", "X-Spam_action": "no action", "X-Mailman-Approved-At": "Thu, 09 Apr 2026 04:19:17 -0400", "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 series adds two features that together enable transparent NVMe disk\nhot-swap simulation in QEMU, matching the behavior of physical NVMe\ndrives being pulled and reinserted in the same PCIe slot.\n\nProblem:\nCurrently, hot-swapping an NVMe disk in QEMU requires removing the\nentire NVMe controller via device_del, which causes the Linux guest to\nassign a new controller number on re-add (e.g. nvme2 becomes nvme4).\nThis breaks storage software that tracks drives by device name.\n\nSolution:\nPatch 1 adds hotplug support for nvme-ns devices on the NvmeBus, with\nproper Asynchronous Event Notification (AEN) so the guest kernel detects\nnamespace changes. This allows namespace-level hot-swap without removing\nthe NVMe controller.\n\nPatch 2 adds a drive_insert HMP command that reconnects a host block\ndevice file to an existing guest device after drive_del. This is the\ncounterpart to drive_del for non-removable devices where\nblockdev-change-medium cannot be used.\n\nThe recommended hot-swap sequence is:\n 1. drive_del <drive-id> # disconnect backing store\n 2. drive_insert <device> <file> # reconnect backing store\n 3. pcie_aer_inject_error <port> SDN # trigger controller reset\n\nAfter this sequence, the guest sees the same controller and namespace\nnames (e.g. /dev/nvme2n1 remains /dev/nvme2n1), and the NVMe driver\nrecovers transparently via the standard AER recovery path.\n\nTested with:\n- Linux 6.1 guest on QEMU aarch64 with HVF (macOS)\n- NVMe subsystem model with multipath disabled\n- DirectPV and MinIO AIStor storage stack\n\nmr-083 (2):\n hw/nvme: add namespace hotplug support\n block/monitor: add drive_insert HMP command\n\n block/monitor/block-hmp-cmds.c | 59 +++++++++++++++++++++++\n hmp-commands.hx | 18 +++++++\n hw/nvme/ctrl.c | 85 ++++++++++++++++++++++++++++++++++\n hw/nvme/ns.c | 1 +\n hw/nvme/subsys.c | 2 +\n include/block/block-hmp-cmds.h | 1 +\n 6 files changed, 166 insertions(+)\n\n--\n2.50.1 (Apple Git-155)" }