Cover Letter Detail
Show a cover letter.
GET /api/1.0/covers/2221320/?format=api
{ "id": 2221320, "url": "http://patchwork.ozlabs.org/api/1.0/covers/2221320/?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": "<20260409070114.11313-1-matthieu@min.io>", "date": "2026-04-09T07:01:09", "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": 499254, "url": "http://patchwork.ozlabs.org/api/1.0/series/499254/?format=api", "date": "2026-04-09T07:01:10", "name": "NVMe namespace hotplug and drive reconnection support", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/499254/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=c6M4Boml;\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 4frtCj3Wydz1yD3\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 09 Apr 2026 18:20:17 +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 1wAkbm-0006N7-JP; Thu, 09 Apr 2026 04:19:26 -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 1wAjOJ-00053v-3a\n for qemu-devel@nongnu.org; Thu, 09 Apr 2026 03:01:29 -0400", "from mail-wr1-x435.google.com ([2a00:1450:4864:20::435])\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 1wAjOG-00076F-LS\n for qemu-devel@nongnu.org; Thu, 09 Apr 2026 03:01:26 -0400", "by mail-wr1-x435.google.com with SMTP id\n ffacd0b85a97d-43b8e8e7432so424460f8f.1\n for <qemu-devel@nongnu.org>; Thu, 09 Apr 2026 00:01:17 -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 ffacd0b85a97d-43d1e4f1a99sm68622732f8f.32.2026.04.09.00.01.13\n (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);\n Thu, 09 Apr 2026 00:01:13 -0700 (PDT)" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=minio.io; s=minio; t=1775718074; x=1776322874; 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=c6M4BomlwXWzE7NIrvduNvP7bCe4GMtXEuVLE/+ml3JV6pkVKKzDrTezWR5P+cUe5T\n IJWOuiaCJx5pCJQ2o/fPlaSoSonaDw3+Kl0cBy6QD1fGZ4gaYtMgT1A7hS1myDuyztQF\n zOCbZy81aXIiA6LQCg7xJDobGB+RzhtH958tr0tDBWY7OQjHdfnwf8x6zpD/BP60TXBV\n 0uG9teVOy1UC+N1kCGc2TLEH2JrCPn8MxIITM2zX0u+m4EgtlwXrbsbk2CYB4jdyMUIa\n h/wjfQIzmSISU4zocNy0vQw3QV7Xs0PH3Fs0ic92Q00loVn49fEtlgi22HnxPuEC2fOF\n C9lw==", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1775718074; x=1776322874;\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=Drllbcgw3uG1R9YpqM5VGRTlw0Qg4YwdS5H/NxCUMpu9FvPvDviG26YupnutY1K7C3\n n0hPWi+tsEq5i784EMJ4Ro59Xn5Uuniv9i1RfRlbaCwbepQuMAlhyQCXGw0pZmoxsebJ\n /y6SHc57YbPhftSeIFGI8cohfWpnUnJfOmf0ApcNCoBVhVbca0jYTc47shw3ucFQntnA\n PNFNOjkOiwtybuB/z/ptvuUemx6xO/NGxcuqLqp0vQmNRj5AiBJkfyZzF11umxy9NmvB\n HVUXslAtdBBGoomIi3pARZImEbSgrgBb6ZvYOwWPS6W6a7sxJe9QVnQ4VUTcsGwLfDeu\n /HnQ==", "X-Gm-Message-State": "AOJu0YzxlJxcgjVsML/oTMkbHNpAeuxbBqdXFvC8Pkp9capK40BqfZcJ\n fBBfWmMoAfcLdpWkkLveIonBIsOTrZGFQyIf0zLvBzNs24GcymCvi7NizwdNuL/wCGXOiYBH5M6\n cF2rEdQ/GBObPKDEGKWFNL4FGYOpd9dCMIuJ426xqOzqohbPM+ME49qzpQOACON4r/9gi6XVubg\n JulXbayo8SF+FL3xqeDqZUG2i/TMJZeM3hXX1thFY=", "X-Gm-Gg": "AeBDieus+PCEmNJDR1tlR7MpOWhpZR8+S9DYPmRCe3SzQSbn4l8av0TEt2hpYO/mprn\n kCaIuac9hdNBZqFOOIPYptPBejeI5PlSrqy0JTI9/Hnrqw20tDDfgLZqhV8Ti3VylCkRurmjfy9\n J32hCGr8kpVghkVZfjO04avHaqgngZ84C5uhfbGcqhXYq1i3RvvrlZKKzHQ22p1VtD/F9/6zCUr\n xTR8x/9nDQmrV2KROlMlveo+y5WuKyp41fqFRbdWx1feOJ4pJWakdCWbimwsEJl5ibOgNGocNwP\n 9kQ/lx7Hx7JRXbP0Yb5Hyd6H7zgHLX55OSgyuF/C3L8YYCLBSP+55mGUFQBivZ3UIpO9QzEtxzX\n Yc1JnR48gg6F9k2cWCNYliCMsJ81uQreSKgmzjKVa8OL6o5mC+aMUql0iKme3chfApqt5m4BgiN\n hop1DOL0e+EEXCuKv/eHVPpA8bnzeyCRCts410pBEEVDP1FZV47T6W/JnN3aeHgKMSo+C9k1C1/\n KSBdtF4vZxPeiABuE+kh4Sdyn6P4XiumRwfX383TYwy9sWpAQGvex3tVrvLYA==", "X-Received": "by 2002:a05:6000:1acf:b0:43d:20e9:b0e1 with SMTP id\n ffacd0b85a97d-43d29280e6dmr33088200f8f.7.1775718074190;\n Thu, 09 Apr 2026 00:01:14 -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 09:01:09 +0200", "Message-ID": "<20260409070114.11313-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::435;\n envelope-from=matthieu@minio.io; helo=mail-wr1-x435.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:20 -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)" }