[{"id":3678300,"web_url":"http://patchwork.ozlabs.org/comment/3678300/","msgid":"<aeEicSrfbE2sZo8w@redhat.com>","list_archive_url":null,"date":"2026-04-16T17:54:57","subject":"Re: [PATCH RFC] hw/scsi: Add SCSI tape device emulation","submitter":{"id":2694,"url":"http://patchwork.ozlabs.org/api/people/2694/","name":"Daniel P. Berrangé","email":"berrange@redhat.com"},"content":"On Thu, Apr 16, 2026 at 08:34:48PM +0300, rft0 wrote:\n> Add initial emulation of SCSI tape device supporting basic\n> INQUIRY operation for now.\n> \n> Hi, I am a GSoC 2026 applicant and this is my first patch.\n> Any feedback or corrections appreciated.\n\nWhen you have any notes that are not intended for long\nterm preservation in git history, it is preferrable to\nput them after the \"---\"....\n\n> \n> Signed-off-by: rft0 <rafettaskindev@gmail.com>\n> ---\n\n...just here...\n\n>  hw/scsi/meson.build |   1 +\n>  hw/scsi/scsi-tape.c | 334 ++++++++++++++++++++++++++++++++++++++++++++\n>  2 files changed, 335 insertions(+)\n>  create mode 100644 hw/scsi/scsi-tape.c\n> \n> diff --git a/hw/scsi/meson.build b/hw/scsi/meson.build\n> index 69fde0cf84..1699b6e591 100644\n> --- a/hw/scsi/meson.build\n> +++ b/hw/scsi/meson.build\n> @@ -7,6 +7,7 @@ scsi_ss.add(files(\n>    'scsi-bus.c',\n>    'scsi-disk.c',\n>    'scsi-generic.c',\n> +  'scsi-tape.c',\n>  ))\n\nI wonder if we shold add a \"CONFIG_SCSI_TAPE\"   KConfig\nflag so that downstreams can selectively enable the tape\nemulation\n\n\n> +static int scsi_disk_emulate_vpd_page(SCSIRequest *req, uint8_t *outbuf)\n> +{\n> +    SCSITapeState *s = DO_UPCAST(SCSITapeState, qdev, req->dev);\n> +    uint8_t page_code = req->cmd.buf[2];\n> +\n> +    outbuf[0] = TYPE_TAPE;\n> +    outbuf[1] = page_code;\n> +    outbuf[2] = 0x00;\n> +    outbuf[3] = 0x00;\n> +\n> +    switch (page_code) {\n> +    case 0x00: /* Supported VPD pages */\n> +        outbuf[4] = 0x00;   /* page 0x00 (this page) */\n> +        if (s->serial) {\n> +            outbuf[5] = 0x80;   /* page 0x80 (serial number) */\n> +            outbuf[3] = 2;      /* page data length */\n> +            return 6;\n> +        }\n> +        outbuf[3] = 1;\n> +        return 5;\n> +\n> +    case 0x80: /* Unit Serial Number */\n> +        if (!s->serial) {\n> +            return -1;   /* not supported, caller sends INVALID_FIELD */\n> +        }\n> +        {\n> +            int l = strlen(s->serial);\n> +            if (l > 36) {\n> +                l = 36;\n> +            }\n\nRather than silently truncating it here, we should check the length\nin realize() and report an error at that point, so this code can\nassume the length is already within bounds.\n\n> +            outbuf[3] = l;\n> +            memcpy(&outbuf[4], s->serial, l);\n> +            return 4 + l;\n> +        }\n> +\n> +    default:\n> +        return -1;  /* unsupported VPD page */\n> +    }\n> +}\n> +\n> +static int scsi_tape_emulate_inquiry(SCSIRequest *req, uint8_t *outbuf)\n> +{\n> +    SCSITapeState *s = DO_UPCAST(SCSITapeState, qdev, req->dev);\n> +    int buflen;\n> +\n> +    if (req->cmd.buf[1] & 0x1) {\n> +        return scsi_disk_emulate_vpd_page(req, outbuf);\n> +    }\n> +\n> +    /* Standard INQUIRY, not a VPD request */\n> +    if (req->cmd.buf[2] != 0) {\n> +        return -1;\n> +    }\n> +\n> +    /* PAGE_CODE == 0 */\n> +    buflen = req->cmd.xfer;\n> +    if (buflen > SCSI_MAX_INQUIRY_LEN) {\n> +        buflen = SCSI_MAX_INQUIRY_LEN;\n> +    }\n> +\n> +    outbuf[0] = TYPE_TAPE;      /* 0x01 = Tape */\n> +    outbuf[1] = 0x80;           /* Always removable */\n> +    outbuf[2] = 0x05;           /* SPC-3 */\n> +    outbuf[3] = 0x02 | 0x10;    /* Format 2, HiSup */\n> +\n> +    if (buflen > 36) {\n> +        outbuf[4] = buflen - 5;\n> +    } else {\n> +        outbuf[4] = 36 - 5;\n> +    }\n> +\n> +    outbuf[7] = 0x10 | (req->bus->info->tcq ? 0x02 : 0);\n> +\n> +    strpadcpy((char *)&outbuf[16], 16, s->product, ' ');\n> +    strpadcpy((char *)&outbuf[8], 8, s->vendor, ' ');\n> +\n> +    memset(&outbuf[32], 0, 4);\n> +    memcpy(&outbuf[32], s->version, MIN(4, strlen(s->version)));\n\nproduct/vendor/version should be length checked too.\n\n> +\n> +    return buflen;\n> +}\n> +\n\n> +static void scsi_tape_realize(SCSIDevice *dev, Error **errp)\n> +{\n> +    SCSITapeState *s = DO_UPCAST(SCSITapeState, qdev, dev);\n> +\n> +    dev->type = TYPE_TAPE;\n> +\n> +    if (!s->qdev.conf.blk) {\n> +        error_setg(errp, \"Drive property not set\");\n> +        return;\n> +    }\n> +\n> +    if (!blk_is_inserted(s->qdev.conf.blk)) {\n> +        error_setg(errp, \"Device needs media, but drive is empty\");\n> +        return;\n> +    }\n> +\n> +    if (!s->vendor) {\n> +        s->vendor = g_strdup(\"QEMU\");\n> +    }\n> +    if (!s->product) {\n> +        s->product = g_strdup(\"QEMU TAPE\");\n> +    }\n> +    if (!s->version) {\n> +        s->version = g_strdup(QEMU_HW_VERSION);\n> +    }\n\nHere you can validate length of vendor, product, version\nand serial.\n\n> +}\n> +\n\nWith regards,\nDaniel","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=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=YCIFTbOb;\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 4fxQfr2Jclz1yG9\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 17 Apr 2026 03:56:02 +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 1wDQvp-0003dD-TV; Thu, 16 Apr 2026 13:55:13 -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 <berrange@redhat.com>)\n id 1wDQvo-0003cm-6q\n for qemu-devel@nongnu.org; Thu, 16 Apr 2026 13:55:12 -0400","from us-smtp-delivery-124.mimecast.com ([170.10.133.124])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <berrange@redhat.com>)\n id 1wDQvl-0005qF-Na\n for qemu-devel@nongnu.org; Thu, 16 Apr 2026 13:55:11 -0400","from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com\n (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by\n relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,\n cipher=TLS_AES_256_GCM_SHA384) id us-mta-376-dwS5OgpKPI6hmf6ngkq3kw-1; Thu,\n 16 Apr 2026 13:55:03 -0400","from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com\n (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n (No client certificate requested)\n by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS\n id 3D15319560B4; Thu, 16 Apr 2026 17:55:02 +0000 (UTC)","from redhat.com (headnet01.pony-001.prod.iad2.dc.redhat.com\n [10.2.32.101])\n by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with\n ESMTPS\n id 9F7221955F21; Thu, 16 Apr 2026 17:55:00 +0000 (UTC)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1776362107;\n h=from:from:reply-to:reply-to:subject:subject:date:date:\n message-id:message-id:to:to:cc:cc:mime-version:mime-version:\n content-type:content-type:in-reply-to:in-reply-to:  references:references;\n bh=jUykcpdGLuF/1bbOATdLk+f9lxYKNrCYhO6NZHKwfAU=;\n b=YCIFTbObv97EHAC0bsrNzHnXmt/7EKE5TYPJHfP2h8JV2GVD6qnpnqllU4YouUfBya5gDE\n 7znyn+EOQaTxaTOiNr86prJ1mihKTlDCQUvmNfGRPSkXRrOVPkZNOs8BsVoU8JhZn7xHJ/\n ph4wfwG1NHfsbdK8bFo442HM+PJ1G14=","X-MC-Unique":"dwS5OgpKPI6hmf6ngkq3kw-1","X-Mimecast-MFC-AGG-ID":"dwS5OgpKPI6hmf6ngkq3kw_1776362102","Date":"Thu, 16 Apr 2026 18:54:57 +0100","From":"Daniel =?utf-8?b?UC4gQmVycmFuZ8Op?= <berrange@redhat.com>","To":"rft0 <rafettaskindev@gmail.com>","Cc":"qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net, deller@gmx.de","Subject":"Re: [PATCH RFC] hw/scsi: Add SCSI tape device emulation","Message-ID":"<aeEicSrfbE2sZo8w@redhat.com>","References":"<20260416173448.88831-1-rafettaskindev@gmail.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20260416173448.88831-1-rafettaskindev@gmail.com>","User-Agent":"Mutt/2.2.14 (2025-02-20)","X-Scanned-By":"MIMEDefang 3.0 on 10.30.177.12","Received-SPF":"pass client-ip=170.10.133.124;\n envelope-from=berrange@redhat.com;\n helo=us-smtp-delivery-124.mimecast.com","X-Spam_score_int":"7","X-Spam_score":"0.7","X-Spam_bar":"/","X-Spam_report":"(0.7 / 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 RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_SBL_CSS=3.335,\n RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001,\n SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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>","Reply-To":"Daniel =?utf-8?b?UC4gQmVycmFuZ8Op?= <berrange@redhat.com>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"}},{"id":3678388,"web_url":"http://patchwork.ozlabs.org/comment/3678388/","msgid":"<c2ec0a72-8c35-44de-bd7c-cef445c646f4@gmx.de>","list_archive_url":null,"date":"2026-04-16T21:15:47","subject":"Re: [PATCH RFC] hw/scsi: Add SCSI tape device emulation","submitter":{"id":1115,"url":"http://patchwork.ozlabs.org/api/people/1115/","name":"Helge Deller","email":"deller@gmx.de"},"content":"Hello Rafet,\n\nOn 4/16/26 19:34, rft0 wrote:\n> Add initial emulation of SCSI tape device supporting basic\n> INQUIRY operation for now.\n> \n> Hi, I am a GSoC 2026 applicant and this is my first patch.\n> Any feedback or corrections appreciated.\n\nI'm really shocked that you sent this patch!\n\nYou are one (!!!) out of 8 applicants for the SCSI tape GSCO project.\nEveryone of those applicants is eager to be choosen for this project, and I think\neveryone of them would be able to send such a patch.\nAnd, I've not yet decided who will be mentored by me.\n\nSo, why did you sent this patch?\n\n\nHelge\n\n\n> \n> Signed-off-by: rft0 <rafettaskindev@gmail.com>\n> ---\n>   hw/scsi/meson.build |   1 +\n>   hw/scsi/scsi-tape.c | 334 ++++++++++++++++++++++++++++++++++++++++++++\n>   2 files changed, 335 insertions(+)\n>   create mode 100644 hw/scsi/scsi-tape.c\n> \n> diff --git a/hw/scsi/meson.build b/hw/scsi/meson.build\n> index 69fde0cf84..1699b6e591 100644\n> --- a/hw/scsi/meson.build\n> +++ b/hw/scsi/meson.build\n> @@ -7,6 +7,7 @@ scsi_ss.add(files(\n>     'scsi-bus.c',\n>     'scsi-disk.c',\n>     'scsi-generic.c',\n> +  'scsi-tape.c',\n>   ))\n>   scsi_ss.add(when: 'CONFIG_ESP', if_true: files('esp.c'))\n>   scsi_ss.add(when: 'CONFIG_ESP_PCI', if_true: files('esp-pci.c'))\n> diff --git a/hw/scsi/scsi-tape.c b/hw/scsi/scsi-tape.c\n> new file mode 100644\n> index 0000000000..e457167649\n> --- /dev/null\n> +++ b/hw/scsi/scsi-tape.c\n> @@ -0,0 +1,334 @@\n> +/*\n> + * SCSI Tape Device emulation\n> + *\n> + * SPDX-License-Identifier: GPL-2.0-or-later\n> + *\n> + * Written by Rafet Taskin <rafettaskindev@gmail.com>\n> + *\n> + * SCSI Tape device emulation.\n> + *\n> + */\n> +\n> +#include \"qemu/hw-version.h\"\n> +#include \"qemu/osdep.h\"\n> +#include \"qapi/error.h\"\n> +#include \"qemu/module.h\"\n> +#include \"qemu/memalign.h\"\n> +#include \"qemu/cutils.h\"\n> +#include \"hw/scsi/scsi.h\"\n> +#include \"scsi/constants.h\"\n> +#include \"system/block-backend.h\"\n> +#include \"hw/block/block.h\"\n> +#include \"hw/core/qdev-properties.h\"\n> +#include \"hw/core/qdev-properties-system.h\"\n> +#include \"qom/object.h\"\n> +\n> +#define SCSI_MAX_INQUIRY_LEN    256\n> +\n> +#define TYPE_SCSI_TAPE \"scsi-tape\"\n> +\n> +OBJECT_DECLARE_SIMPLE_TYPE(SCSITapeState, SCSI_TAPE)\n> +\n> +typedef struct SCSITapeReq {\n> +    SCSIRequest req;\n> +\n> +    uint32_t buflen;\n> +    struct iovec iov;\n> +\n> +    QEMUIOVector qiov;\n> +} SCSITapeReq;\n> +\n> +struct SCSITapeState {\n> +    SCSIDevice qdev;\n> +\n> +    char *vendor;\n> +    char *product;\n> +    char *version;\n> +    char *serial;\n> +};\n> +\n> +static void scsi_free_request(SCSIRequest *req)\n> +{\n> +    SCSITapeReq *r = DO_UPCAST(SCSITapeReq, req, req);\n> +\n> +    qemu_vfree(r->iov.iov_base);\n> +}\n> +\n> +static uint8_t *scsi_get_buf(SCSIRequest *req)\n> +{\n> +    SCSITapeReq *r = DO_UPCAST(SCSITapeReq, req, req);\n> +\n> +    return (uint8_t *)r->iov.iov_base;\n> +}\n> +\n> +static void scsi_init_iovec(SCSITapeReq *r, size_t size)\n> +{\n> +    if (!r->iov.iov_base) {\n> +        r->buflen = size;\n> +        r->iov.iov_base = qemu_memalign(qemu_real_host_page_size(), size);\n> +    }\n> +\n> +    r->iov.iov_len = size;\n> +    qemu_iovec_init_external(&r->qiov, &r->iov, 1);\n> +}\n> +\n> +static void scsi_check_condition(SCSITapeReq *r, SCSISense sense)\n> +{\n> +    scsi_req_build_sense(&r->req, sense);\n> +    scsi_req_complete(&r->req, CHECK_CONDITION);\n> +}\n> +\n> +static int scsi_disk_emulate_vpd_page(SCSIRequest *req, uint8_t *outbuf)\n> +{\n> +    SCSITapeState *s = DO_UPCAST(SCSITapeState, qdev, req->dev);\n> +    uint8_t page_code = req->cmd.buf[2];\n> +\n> +    outbuf[0] = TYPE_TAPE;\n> +    outbuf[1] = page_code;\n> +    outbuf[2] = 0x00;\n> +    outbuf[3] = 0x00;\n> +\n> +    switch (page_code) {\n> +    case 0x00: /* Supported VPD pages */\n> +        outbuf[4] = 0x00;   /* page 0x00 (this page) */\n> +        if (s->serial) {\n> +            outbuf[5] = 0x80;   /* page 0x80 (serial number) */\n> +            outbuf[3] = 2;      /* page data length */\n> +            return 6;\n> +        }\n> +        outbuf[3] = 1;\n> +        return 5;\n> +\n> +    case 0x80: /* Unit Serial Number */\n> +        if (!s->serial) {\n> +            return -1;   /* not supported, caller sends INVALID_FIELD */\n> +        }\n> +        {\n> +            int l = strlen(s->serial);\n> +            if (l > 36) {\n> +                l = 36;\n> +            }\n> +            outbuf[3] = l;\n> +            memcpy(&outbuf[4], s->serial, l);\n> +            return 4 + l;\n> +        }\n> +\n> +    default:\n> +        return -1;  /* unsupported VPD page */\n> +    }\n> +}\n> +\n> +static int scsi_tape_emulate_inquiry(SCSIRequest *req, uint8_t *outbuf)\n> +{\n> +    SCSITapeState *s = DO_UPCAST(SCSITapeState, qdev, req->dev);\n> +    int buflen;\n> +\n> +    if (req->cmd.buf[1] & 0x1) {\n> +        return scsi_disk_emulate_vpd_page(req, outbuf);\n> +    }\n> +\n> +    /* Standard INQUIRY, not a VPD request */\n> +    if (req->cmd.buf[2] != 0) {\n> +        return -1;\n> +    }\n> +\n> +    /* PAGE_CODE == 0 */\n> +    buflen = req->cmd.xfer;\n> +    if (buflen > SCSI_MAX_INQUIRY_LEN) {\n> +        buflen = SCSI_MAX_INQUIRY_LEN;\n> +    }\n> +\n> +    outbuf[0] = TYPE_TAPE;      /* 0x01 = Tape */\n> +    outbuf[1] = 0x80;           /* Always removable */\n> +    outbuf[2] = 0x05;           /* SPC-3 */\n> +    outbuf[3] = 0x02 | 0x10;    /* Format 2, HiSup */\n> +\n> +    if (buflen > 36) {\n> +        outbuf[4] = buflen - 5;\n> +    } else {\n> +        outbuf[4] = 36 - 5;\n> +    }\n> +\n> +    outbuf[7] = 0x10 | (req->bus->info->tcq ? 0x02 : 0);\n> +\n> +    strpadcpy((char *)&outbuf[16], 16, s->product, ' ');\n> +    strpadcpy((char *)&outbuf[8], 8, s->vendor, ' ');\n> +\n> +    memset(&outbuf[32], 0, 4);\n> +    memcpy(&outbuf[32], s->version, MIN(4, strlen(s->version)));\n> +\n> +    return buflen;\n> +}\n> +\n> +/*\n> + * > 0 - number of bytes from device to host\n> + * < 0 - number of bytes from host to device\n> + * = 0 - no data transfer, already completed\n> + */\n> +static int32_t scsi_tape_emulate_command(SCSIRequest *req, uint8_t *buf)\n> +{\n> +    SCSITapeReq *r = DO_UPCAST(SCSITapeReq, req, req);\n> +    uint8_t *outbuf;\n> +    int32_t len = 0;\n> +    uint8_t command = buf[0];\n> +\n> +    if (req->cmd.xfer > 65536) {\n> +        scsi_check_condition(r, SENSE_CODE(INVALID_FIELD));\n> +        return 0;\n> +    }\n> +    r->buflen = MAX(4096, req->cmd.xfer);\n> +    scsi_init_iovec(r, r->buflen);\n> +\n> +    outbuf = r->iov.iov_base;\n> +    memset(outbuf, 0, r->buflen);\n> +\n> +    switch (command) {\n> +    case INQUIRY:\n> +        len = scsi_tape_emulate_inquiry(req, outbuf);\n> +        if (len < 0) {\n> +            scsi_check_condition(r, SENSE_CODE(INVALID_FIELD));\n> +            return 0;\n> +        }\n> +        break;\n> +\n> +    case TEST_UNIT_READY:\n> +        if (!blk_is_available(req->dev->conf.blk)) {\n> +            scsi_check_condition(r, SENSE_CODE(NO_MEDIUM));\n> +            return 0;\n> +        }\n> +\n> +        /* TODO: check if tape is really ready */\n> +        scsi_req_complete(&r->req, GOOD);\n> +        return 0;\n> +    case REQUEST_SENSE:\n> +        /* TODO: returning NO SENSE for now handle it later. */\n> +        /* 0x0: 0x70 = current errors, fixed format */\n> +        /* 0x2: sense key (0x00 = NO SENSE) */\n> +        /* 0x7: additional sense length */\n> +        {\n> +            int sense_len = MIN(buf[4], 18);\n> +            memset(outbuf, 0, sense_len);\n> +            outbuf[0] = 0x70;\n> +            outbuf[2] = 0x00;\n> +            outbuf[7] = 10;\n> +            len = sense_len;\n> +        }\n> +        break;\n> +\n> +    case REWIND:\n> +        if (!blk_is_available(req->dev->conf.blk)) {\n> +            scsi_check_condition(r, SENSE_CODE(NO_MEDIUM));\n> +            return 0;\n> +        }\n> +\n> +        /* TODO: reset tape position to beginning of SIMH image */\n> +        scsi_req_complete(&r->req, GOOD);\n> +        return 0;\n> +\n> +    /* Add rest later */\n> +    default:\n> +        scsi_check_condition(r, SENSE_CODE(INVALID_OPCODE));\n> +        return 0;\n> +    }\n> +\n> +    r->iov.iov_len = len;\n> +    return len;\n> +}\n> +\n> +\n> +/* TODO */\n> +static void scsi_tape_emulate_read_data(SCSIRequest *req)\n> +{\n> +    SCSITapeReq *r = DO_UPCAST(SCSITapeReq, req, req);\n> +    int buflen = r->iov.iov_len;\n> +\n> +    if (buflen) {\n> +        r->iov.iov_len = 0;\n> +        scsi_req_data(&r->req, buflen);\n> +        return;\n> +    }\n> +\n> +    scsi_req_complete(&r->req, GOOD);\n> +}\n> +\n> +/* TODO: not implemented yet */\n> +static void scsi_tape_emulate_write_data(SCSIRequest *req)\n> +{\n> +    scsi_req_complete(req, GOOD);\n> +}\n> +\n> +static const SCSIReqOps scsi_tape_reqops = {\n> +    .size         = sizeof(SCSITapeReq),\n> +    .free_req     = scsi_free_request,\n> +    .send_command = scsi_tape_emulate_command,\n> +    .read_data    = scsi_tape_emulate_read_data,\n> +    .write_data   = scsi_tape_emulate_write_data,\n> +    .get_buf      = scsi_get_buf,\n> +};\n> +\n> +static SCSIRequest *scsi_tape_new_request(SCSIDevice *d, uint32_t tag,\n> +                                          uint32_t lun, uint8_t *buf,\n> +                                          void *hba_private)\n> +{\n> +    return scsi_req_alloc(&scsi_tape_reqops, d, tag, lun, hba_private);\n> +}\n> +\n> +static void scsi_tape_realize(SCSIDevice *dev, Error **errp)\n> +{\n> +    SCSITapeState *s = DO_UPCAST(SCSITapeState, qdev, dev);\n> +\n> +    dev->type = TYPE_TAPE;\n> +\n> +    if (!s->qdev.conf.blk) {\n> +        error_setg(errp, \"Drive property not set\");\n> +        return;\n> +    }\n> +\n> +    if (!blk_is_inserted(s->qdev.conf.blk)) {\n> +        error_setg(errp, \"Device needs media, but drive is empty\");\n> +        return;\n> +    }\n> +\n> +    if (!s->vendor) {\n> +        s->vendor = g_strdup(\"QEMU\");\n> +    }\n> +    if (!s->product) {\n> +        s->product = g_strdup(\"QEMU TAPE\");\n> +    }\n> +    if (!s->version) {\n> +        s->version = g_strdup(QEMU_HW_VERSION);\n> +    }\n> +}\n> +\n> +static Property scsi_tape_properties[] = {\n> +    DEFINE_PROP_DRIVE(\"drive\", SCSITapeState, qdev.conf.blk),\n> +    DEFINE_PROP_STRING(\"vendor\", SCSITapeState, vendor),\n> +    DEFINE_PROP_STRING(\"product\", SCSITapeState, product),\n> +    DEFINE_PROP_STRING(\"ver\", SCSITapeState, version),\n> +    DEFINE_PROP_STRING(\"serial\", SCSITapeState, serial),\n> +};\n> +\n> +static void scsi_tape_class_initfn(ObjectClass *klass, const void *data)\n> +{\n> +    DeviceClass *dc = DEVICE_CLASS(klass);\n> +    SCSIDeviceClass *sc = SCSI_DEVICE_CLASS(klass);\n> +\n> +    sc->realize   = scsi_tape_realize;\n> +    sc->alloc_req = scsi_tape_new_request;\n> +    dc->desc      = \"SCSI Tape\";\n> +    device_class_set_props(dc, scsi_tape_properties);\n> +}\n> +\n> +static const TypeInfo scsi_tape_info = {\n> +    .name          = TYPE_SCSI_TAPE,\n> +    .parent        = TYPE_SCSI_DEVICE,\n> +    .instance_size = sizeof(SCSITapeState),\n> +    .class_init    = scsi_tape_class_initfn,\n> +};\n> +\n> +static void scsi_tape_register_types(void)\n> +{\n> +    type_register_static(&scsi_tape_info);\n> +}\n> +\n> +type_init(scsi_tape_register_types)","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=gmx.de header.i=deller@gmx.de header.a=rsa-sha256\n header.s=s31663417 header.b=kMvmTM/o;\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 4fxW5q1w9mz1yD3\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 17 Apr 2026 07:16:15 +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 1wDU4B-0000C5-62; Thu, 16 Apr 2026 17:16:03 -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 <deller@gmx.de>) id 1wDU43-0000AT-IR\n for qemu-devel@nongnu.org; Thu, 16 Apr 2026 17:16:01 -0400","from mout.gmx.net ([212.227.17.20])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <deller@gmx.de>) id 1wDU40-0004dp-U5\n for qemu-devel@nongnu.org; Thu, 16 Apr 2026 17:15:55 -0400","from client.hidden.invalid by mail.gmx.net (mrgmx105\n [212.227.17.168]) with ESMTPSA (Nemesis) id 1MSKy8-1vpGBh2JXk-00N0lA; Thu, 16\n Apr 2026 23:15:49 +0200"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de;\n s=s31663417; t=1776374149; x=1776978949; i=deller@gmx.de;\n bh=MPrKvoKTpYibUkgSt/ax/6DaZmHsR7L4hNDHAw8uMRo=;\n h=X-UI-Sender-Class:Message-ID:Date:MIME-Version:Subject:To:Cc:\n References:From:In-Reply-To:Content-Type:\n Content-Transfer-Encoding:cc:content-transfer-encoding:\n content-type:date:from:message-id:mime-version:reply-to:subject:\n to;\n b=kMvmTM/owntvEYVk8CSXB6xWCFQv5LnhSat33AwBMVrEj9KgVmFtUg2jQ8Ts9G6h\n /2vZGCX484137IlVMqp3egWjp5Q57ybYB1jgLntLrW/rXOUm/n3WIAJmw0GTzYkZw\n wd9BRcXGwedyCE1bEDoIlpeqiSNaD1GUcclpxM+0iGEElcFbpxU/RZzBVESnQul0o\n +skyiTC2wFWV3nCcXP0FOWOb4KIxN89JjHk0bDnkHhqbk+ykhAfPkTnEp5ebCwMvc\n t7//FWgpQ6DYTlHgtEe9w/cLNFezjxAp1EVDP7RbQ0LXySsCStRmo0es5TEVl05by\n 5I/adKRJCeLIZJQmWA==","X-UI-Sender-Class":"724b4f7f-cbec-4199-ad4e-598c01a50d3a","Message-ID":"<c2ec0a72-8c35-44de-bd7c-cef445c646f4@gmx.de>","Date":"Thu, 16 Apr 2026 23:15:47 +0200","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH RFC] hw/scsi: Add SCSI tape device emulation","To":"rft0 <rafettaskindev@gmail.com>, qemu-devel@nongnu.org","Cc":"pbonzini@redhat.com, fam@euphon.net","References":"<20260416173448.88831-1-rafettaskindev@gmail.com>","Content-Language":"en-US","From":"Helge Deller <deller@gmx.de>","Autocrypt":"addr=deller@gmx.de; keydata=\n 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","In-Reply-To":"<20260416173448.88831-1-rafettaskindev@gmail.com>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"quoted-printable","X-Provags-ID":"V03:K1:O/xJ0QkoG4sfk/MDkTx2IuatKkwKyK5v98rXVCrp8bBAf3+P1Du\n KSXyK5QjYvY+FLBLJthGsqFDLFfV0K2g5X7fQaIi40fza7t46mOW90isSHEL2qe17rNAVOS\n zgJ8/EgdqXxP7btq107Z06mm0iy0qKGMbEhdk9bCsb2W7uh1MvP4zsfQgkgWjr4VbTQZbZM\n M+rcJm8rPlFX4kCsoXVcQ==","UI-OutboundReport":"notjunk:1;M01:P0:GbGHwepf2zg=;Ud+rDF8SC9C//WOsebI97/gZzN1\n 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","Received-SPF":"pass client-ip=212.227.17.20; envelope-from=deller@gmx.de;\n helo=mout.gmx.net","X-Spam_score_int":"-27","X-Spam_score":"-2.8","X-Spam_bar":"--","X-Spam_report":"(-2.8 / 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, FREEMAIL_FROM=0.001,\n RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001,\n RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001,\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"}},{"id":3678404,"web_url":"http://patchwork.ozlabs.org/comment/3678404/","msgid":"<CA+JCratdkXwmk29sZEO-zegSA0kvei2C=x0toZvZQWTjS7DNuA@mail.gmail.com>","list_archive_url":null,"date":"2026-04-16T21:42:03","subject":"Re: [PATCH RFC] hw/scsi: Add SCSI tape device emulation","submitter":{"id":93170,"url":"http://patchwork.ozlabs.org/api/people/93170/","name":"Rafet T","email":"rafettaskindev@gmail.com"},"content":"Hello Helge,\n\nI honestly didn't give much thought about whether sending patches before\nbeing choosen was okay or not. I was interested in project and wanted to\ntry something. Sorry if it caused any disturbance, that wasn't my intent.\n\nThanks, Rafet","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 unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256\n header.s=20251104 header.b=rcDu9SbO;\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 4fxWhJ2hqPz1yGt\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 17 Apr 2026 07:42:40 +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 1wDUTb-0007DU-Et; Thu, 16 Apr 2026 17:42:19 -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 <rafettaskindev@gmail.com>)\n id 1wDUTa-0007DD-0n\n for qemu-devel@nongnu.org; Thu, 16 Apr 2026 17:42:18 -0400","from mail-oo1-xc32.google.com ([2607:f8b0:4864:20::c32])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <rafettaskindev@gmail.com>)\n id 1wDUTY-0003uc-6n\n for qemu-devel@nongnu.org; Thu, 16 Apr 2026 17:42:17 -0400","by mail-oo1-xc32.google.com with SMTP id\n 006d021491bc7-68be75dc734so12221eaf.1\n for <qemu-devel@nongnu.org>; Thu, 16 Apr 2026 14:42:15 -0700 (PDT)"],"ARC-Seal":"i=1; a=rsa-sha256; t=1776375735; cv=none;\n d=google.com; s=arc-20240605;\n b=LR1LyPtF53xA+TlIWQBCiNwbcKicj7f4Iz4q90Yuhud2EWndM/zM/mxQUHDGeII+vD\n n27iG5FYCymDhY4wTSTK351LL3URrd96BMdiVXyo2iuhevaR0tdpiZphHzRmpd38gVCo\n 8ol7FFmDV7JRvFJjvK7pYm5hkDsXYwqC/Qc1/0lztRbdKHoHzqcAhym3xVNF5WTmwSQZ\n uNO5MwVLICb7SnBA5U9MV7rw2jldbCOTp4bpQnDiW4NBvhBzfNh+76wcLjTrjgoRwhhx\n 26ZNh/hdCtpm8kv9ZTgnDfmLBZ+J1MFXh13zKVNhxVY1m1ySTEr503hJSxkPhSZL2504\n EWLA==","ARC-Message-Signature":"i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com;\n s=arc-20240605;\n h=cc:to:subject:message-id:date:from:in-reply-to:references\n :mime-version:dkim-signature;\n bh=mEoZrGP3WLfVGUTvEJ19j/ReXmXPSdwHLEFedqzvpwU=;\n fh=thzXvac9Kk3nSBPKBjQdF0CC0tJ/iBA2wDKvogBbYYY=;\n b=VmbeK+Nt9T6z6iAFcZbsu+OwbKDrcu35MwokmOdVc7veHbt/TWFmGKaWuGH82dcKsk\n 2qpi4aRtVYHTQCrnQ4k0A33f2ZDZfyRlWiPl3KOlX7Hw27uQDVM6SL12JPVlg6wJTUYD\n DXAW+xNiIRueDXnpomh1NNwXQTf8fvrsnYmHIxX4BsXfyuhGHdcUYJKVov0ZJ3erc9fC\n 8gZNZhhwV8gpYY05LwNJ04ESCF9EKpVQ+VcNGfQyJNukCQi5LZbqmKk7r1KwseoBhK+6\n Oxf/8o1cSYuRIXFI79mHs1EEdSvy+rN9hGav7sqTm0vNzU5tts4+KerclaslH1bStSVJ\n 5rjA==; darn=nongnu.org","ARC-Authentication-Results":"i=1; mx.google.com; arc=none","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=gmail.com; s=20251104; t=1776375735; x=1776980535; darn=nongnu.org;\n h=cc:to:subject:message-id:date:from:in-reply-to:references\n :mime-version:from:to:cc:subject:date:message-id:reply-to;\n bh=mEoZrGP3WLfVGUTvEJ19j/ReXmXPSdwHLEFedqzvpwU=;\n b=rcDu9SbO7FTnbFRz1AQnDH2MLjlojZecA9v6KNRJ6dC7aR+YI/XRdXHne9gDywD/x+\n Y8cNBhDsLAKb1hZlm+ubN9+IPk2QGxtSA6of0ZBRERgckotYTVn7AHG6ZHoL9980S7PE\n Rxpo3zO0dmJNJMOb2102tFnFX2ZM2tno1RQz/gUQP8N/ZilzD4Gqp1BoaDes6W83FlhQ\n txQwf0eG8eHewehorYqY7+GiVddwS18DXExRVEt5ISu7zZlkPdkuTG6GYHzSujfXfsqK\n FVTNW6h9c5mJ1ZJ9kcx1SN5T/mIPDja54AUQnoZ4Pn+zuN5JuVTVcvPOTCufHkkFoWLB\n zp+g==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1776375735; x=1776980535;\n h=cc:to:subject:message-id:date:from:in-reply-to:references\n :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date\n :message-id:reply-to;\n bh=mEoZrGP3WLfVGUTvEJ19j/ReXmXPSdwHLEFedqzvpwU=;\n b=aEpgO2GyVcHNYbQO/6OMIzIO8fVEw4fDUPbx38tN75egUgA5QvvtFMjXBgnE6zQV5L\n oEqH96w9RmKSIc3YZJQ9wSGDX4ALN0SnsrI0wQSd4LxOmzkF7tK9SuP5Wmo6rd4kQOKc\n /E5c7CMHewCxkliXvMXLcQR0oxUHh+8lUnKu6VcnA7CoCyhEFbe1cDt2dVMeYv84CxRh\n N8lC8KTeITOLIxOJZSeuF1eFiyDf+Ph1Lk1to5byCH0+lLbVQ84Fmgt3OHQ5LRJDyFXO\n 7TedEhW+SiPf/aQZym3l5g9MNKSpdPCdXEDN1GvfjryqPws/P+M7MabGX6XlfQN9sBzk\n Hsaw==","X-Gm-Message-State":"AOJu0Yw8V+kAIdcrFX09m5ECYC+TmrsTrDp5yrMjbLwcaDZyVUYHh4Q9\n VRa7Y3u41nfkwjq3GQIwh8rJD+cgVKzWF4clZi2jArp9iGqtL8e7QOCALwsjt5nSIh5m6FEnZj0\n WzxXDpwonQEjRZ0w+gzdmynI82f/CIPM=","X-Gm-Gg":"AeBDieteNcEwybAx7HD75W+QvW/XyCgX2lqV3fK4cSvLaVPZetbX72dq5mSUSeZqKAJ\n v6bmnA6E2Nt52tyNuLAXE/moIcJ+FhIPJZo8JMiE6Vt4oVeXXsZu4tBjiinbvXXD3bVM3IbyhU+\n oOD+F6T+B8Z2UCRI3TjOn59MOMF0YqG31z83xy3SkEXBaPaYU0NFca2NWj+/CrvZUvC5KclRONk\n B3+BsFsh1hvXhf3xhNasGtaYE4iOSnbDw46gCgVd1Atj91JD1FzdcqZ++T+F6c/dSiYb0u4fmRj\n YzlU0nvKY0bHqh2l","X-Received":"by 2002:a05:6820:1686:b0:67d:e9ce:cb23 with SMTP id\n 006d021491bc7-69462ee05c3mr209543eaf.38.1776375734992; Thu, 16 Apr 2026\n 14:42:14 -0700 (PDT)","MIME-Version":"1.0","References":"<20260416173448.88831-1-rafettaskindev@gmail.com>\n <c2ec0a72-8c35-44de-bd7c-cef445c646f4@gmx.de>","In-Reply-To":"<c2ec0a72-8c35-44de-bd7c-cef445c646f4@gmx.de>","From":"Rafet T <rafettaskindev@gmail.com>","Date":"Fri, 17 Apr 2026 00:42:03 +0300","X-Gm-Features":"AQROBzD3NuPbel7NPjTWXq_Ra6fozUhlJ30b-TxjvZ5VU2HPiH_vVZAZdBhloDc","Message-ID":"\n <CA+JCratdkXwmk29sZEO-zegSA0kvei2C=x0toZvZQWTjS7DNuA@mail.gmail.com>","Subject":"Re: [PATCH RFC] hw/scsi: Add SCSI tape device emulation","To":"Helge Deller <deller@gmx.de>","Cc":"qemu-devel@nongnu.org, pbonzini@redhat.com, fam@euphon.net","Content-Type":"multipart/alternative; boundary=\"000000000000ac0542064f9ab4d7\"","Received-SPF":"pass client-ip=2607:f8b0:4864:20::c32;\n envelope-from=rafettaskindev@gmail.com; helo=mail-oo1-xc32.google.com","X-Spam_score_int":"-20","X-Spam_score":"-2.1","X-Spam_bar":"--","X-Spam_report":"(-2.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, FREEMAIL_FROM=0.001,\n HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,\n 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"}}]