From nobody Sat May 30 18:34:21 2026 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=reject dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1777903304; cv=none; d=zohomail.com; s=zohoarc; b=jQqY9Nfr9GprGGi0NKzBEnGkzRo93qzWh3PpoyEa1ZpjZkZYFPtOvYX+IXs2AV575DWyF8e70xxoo0BtFQXVRwfxXjkN+qrD/46TO3aiAk/12UpoZd5m7q3SFMN/ZJ7Jy/q94LVkch2WkvO1nYKiRoJPWtA/nB30Pv9f62gglOQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777903304; 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=WTXv6ggNw4k3/KEZXtYbRHF2tUimvN8yb9zVOXhfW0E=; b=Ac7YndGIONeBjYMaZbD1mz2N1lTgbM5cQC9s8UK4AQAQdw1FX5NQhhcVES5jG3AMhvcVe6ZRRUg7P3pUsIQC7lFUvs2nSXnyzlbLNJE8OnXmHSh2loKkjXGr0BEBY/I05xx9FYIyGj2hR1cbiir/xFtqGKxm7bfHcyY6/f8PNxE= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1777903304360704.0631355383667; Mon, 4 May 2026 07:01:44 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wJtqO-00051K-Ob; Mon, 04 May 2026 10:00:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wJtqI-0004x3-JX; Mon, 04 May 2026 10:00:17 -0400 Received: from mx0a-00069f02.pphosted.com ([205.220.165.32]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wJtqF-0002Mn-80; Mon, 04 May 2026 10:00:14 -0400 Received: from pps.filterd (m0246629.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6448faRd1404885; Mon, 4 May 2026 14:00:01 GMT Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4dw9eptpxv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 04 May 2026 14:00:01 +0000 (GMT) Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 644DuT9d014253; Mon, 4 May 2026 14:00:00 GMT Received: from pps.reinject (localhost [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4dx5adk967-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 04 May 2026 13:59:59 +0000 (GMT) Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.18.1.12/8.18.1.12) with ESMTP id 644Dxvoe027094; Mon, 4 May 2026 13:59:59 GMT Received: from kstolare-e5-ol8.osdevelopmeniad.oraclevcn.com (kstolare-e5-ol8.allregionaliads.osdevelopmeniad.oraclevcn.com [100.100.254.20]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTP id 4dx5adk954-2; Mon, 04 May 2026 13:59:59 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=WTXv6ggNw4k3/KEZXtYbRHF2tUimvN8yb9zVOXhfW0E=; b= RZBklUEb1ZzQfn4+LqesIAxUiWkSn1bCXVU3SFq6rvOdBMwWMLzMvh72OYbFb/xQ Ek92gB33+fXCeVx1olOTc+Kf507XjHZL9hvhyUWjJNFsdFFf2zwnlI5wDp/J1wN0 csePVLrDIkVCzZ3mf6WARUvESytWN1R9Occ2wG5ZD32uKqHp78zgS4XbcjiwABLc sq1EjI37S5xTLHTXaL0Owrtnw3AMG25JU7wIY3KKL/PdhxfXssO3yPoHvMj6Vixg 1eumsKcSn4z3/eAK09wcSMEn/yspvMwmI50eRCdD/qMPctGZ9chTi4IdDtfsllPl Jf7RhmTfG2y6DPoKO3RsXQ== From: Karolina Stolarek To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= , Fam Zheng , Paolo Bonzini , "Michael S . Tsirkin" , "Maciej S . Szmigiero" , Karolina Stolarek , Richard Henderson , Helge Deller , Nicholas Piggin , Harsh Prateek Bora , Dmitry Fleytman , Jeuk Kim , qemu-block@nongnu.org, qemu-ppc@nongnu.org Subject: [PATCH 1/5] scsi: Split SCSIBusInfo struct Date: Mon, 4 May 2026 13:59:40 +0000 Message-ID: <076717370213882c79eaebf790ddc4ee3892055c.1777890280.git.karolina.stolarek@oracle.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-04_04,2026-04-30_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 adultscore=0 lowpriorityscore=0 spamscore=0 mlxlogscore=999 mlxscore=0 phishscore=0 malwarescore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2604200000 definitions=main-2605040145 X-Proofpoint-ORIG-GUID: p7U5-te_aj2er5mQjBAS48YQyWvCHGtE X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTA0MDE0NSBTYWx0ZWRfXwjjhk3lT6VbU 9glICHhB52Nocyo1x3qcG0tlhPC54R4nOVOs3xeFzDwBzUnhr26zyS5KAQdcOpS6mDtXZ/qEERL ys9vbvBRkWA8PWe03MGS0vayPmU5PrNKfQLafoO74maZiYg3IpfIIER0v7ZmsC+oYAdC5toeK5C hfz6d2q684+Kwfv7e+tHuaIYGdncerG8gfwbLFWTCCEUOfUZe+gl1pto/S2lJwH2HiKvYYJBTXX dJucyfKd2NuYanmuAYgkxy+dBzhH3+ikLec91s6EVB8XjfNCxch8dpe5dCck3rMVbAdmsmpKrta eeCVOM8wEggX6Ro9F4vtX93B6L/fdj/gyKQnyvUcMNlJg+Hj0w2elFlcKVOpeR8JYL+Gva96f09 oM6rDxzHk5wdAOMGMo+Y+7CtVftjbOzGnwrx0isZi2bHbOEUQ+5KfyUAfLgb66EaLoMKF5KFIv4 M5WXw5LpqJmwhubsTrtZfOykEgt//NKULczL2VqM= X-Authority-Analysis: v=2.4 cv=YKKvDxGx c=1 sm=1 tr=0 ts=69f8a661 b=1 cx=c_pps a=zPCbziy225d3KhSqZt3L1A==:117 a=zPCbziy225d3KhSqZt3L1A==:17 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=EIcjfB9IiI4px24ztqRk:22 a=KKAkSRfTAAAA:8 a=pGLkceISAAAA:8 a=VnNF1IyMAAAA:8 a=hD80L64hAAAA:8 a=69wJf7TsAAAA:8 a=yPCof4ZbAAAA:8 a=SZ3BYSetAXTqLoVbm0IA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 a=Fg1AiH1G6rFz08G2ETeA:22 cc=ntf awl=host:12306 X-Proofpoint-GUID: p7U5-te_aj2er5mQjBAS48YQyWvCHGtE 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.165.32; envelope-from=karolina.stolarek@oracle.com; helo=mx0a-00069f02.pphosted.com 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, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, 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 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 @oracle.com) X-ZM-MESSAGEID: 1777903305134158500 Extract information about the SCSI bus capabilities into a dedicated struct SCSIBusConfig and keep bus callbacks in the existing struct. Update scsi_bus_init(_named) and their calling sites to reflect that change. Cc: Richard Henderson Cc: Helge Deller Cc: Nicholas Piggin Cc: Harsh Prateek Bora Cc: Dmitry Fleytman Cc: Jeuk Kim Cc: qemu-block@nongnu.org Cc: qemu-ppc@nongnu.org Suggested-by: Alex Benn=C3=A9e Signed-off-by: Karolina Stolarek --- hw/scsi/esp-pci.c | 7 +++++-- hw/scsi/esp.c | 7 +++++-- hw/scsi/lasi_ncr710.c | 6 ++++-- hw/scsi/lsi53c895a.c | 6 ++++-- hw/scsi/megasas.c | 7 +++++-- hw/scsi/mptsas.c | 7 +++++-- hw/scsi/ncr53c710.c | 6 ++++-- hw/scsi/scsi-bus.c | 18 ++++++++++-------- hw/scsi/scsi-disk.c | 2 +- hw/scsi/spapr_vscsi.c | 7 +++++-- hw/scsi/virtio-scsi.c | 7 +++++-- hw/scsi/vmw_pvscsi.c | 7 +++++-- hw/ufs/lu.c | 8 +++++--- hw/usb/dev-storage-bot.c | 7 +++++-- hw/usb/dev-storage-classic.c | 6 ++++-- hw/usb/dev-uas.c | 7 +++++-- include/hw/scsi/scsi.h | 18 +++++++++++++----- 17 files changed, 90 insertions(+), 43 deletions(-) diff --git a/hw/scsi/esp-pci.c b/hw/scsi/esp-pci.c index b31ccdbecc..34a095b73f 100644 --- a/hw/scsi/esp-pci.c +++ b/hw/scsi/esp-pci.c @@ -373,11 +373,13 @@ static const VMStateDescription vmstate_esp_pci_scsi = =3D { } }; =20 -static const struct SCSIBusInfo esp_pci_scsi_info =3D { +static const struct SCSIBusConfig esp_pci_scsi_config =3D { .tcq =3D false, .max_target =3D ESP_MAX_DEVS, .max_lun =3D 7, +}; =20 +static const struct SCSIBusInfo esp_pci_scsi_info =3D { .transfer_data =3D esp_transfer_data, .complete =3D esp_command_complete, .cancel =3D esp_request_cancelled, @@ -409,7 +411,8 @@ static void esp_pci_scsi_realize(PCIDevice *dev, Error = **errp) pci_register_bar(dev, 0, PCI_BASE_ADDRESS_SPACE_IO, &pci->io); s->irq =3D qemu_allocate_irq(esp_irq_handler, pci, 0); =20 - scsi_bus_init(&s->bus, sizeof(s->bus), d, &esp_pci_scsi_info); + scsi_bus_init(&s->bus, sizeof(s->bus), d, &esp_pci_scsi_info, + &esp_pci_scsi_config); } =20 static void esp_pci_scsi_exit(PCIDevice *d) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 933271431b..851af4d9fa 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -1558,11 +1558,13 @@ static const MemoryRegionOps sysbus_esp_pdma_ops = =3D { .impl.max_access_size =3D 2, }; =20 -static const struct SCSIBusInfo esp_scsi_info =3D { +static const struct SCSIBusConfig esp_scsi_config =3D { .tcq =3D false, .max_target =3D ESP_MAX_DEVS, .max_lun =3D 7, +}; =20 +static const struct SCSIBusInfo esp_scsi_info =3D { .load_request =3D esp_load_request, .transfer_data =3D esp_transfer_data, .complete =3D esp_command_complete, @@ -1608,7 +1610,8 @@ static void sysbus_esp_realize(DeviceState *dev, Erro= r **errp) =20 qdev_init_gpio_in(dev, sysbus_esp_gpio_demux, 2); =20 - scsi_bus_init(&s->bus, sizeof(s->bus), dev, &esp_scsi_info); + scsi_bus_init(&s->bus, sizeof(s->bus), dev, &esp_scsi_info, + &esp_scsi_config); } =20 static void sysbus_esp_hard_reset(DeviceState *dev) diff --git a/hw/scsi/lasi_ncr710.c b/hw/scsi/lasi_ncr710.c index 4fde2265b5..7abc92b0bb 100644 --- a/hw/scsi/lasi_ncr710.c +++ b/hw/scsi/lasi_ncr710.c @@ -135,11 +135,13 @@ static void lasi_ncr710_command_complete(SCSIRequest = *req, size_t resid) ncr710_transfer_data(req, len); } =20 -static const struct SCSIBusInfo lasi_ncr710_scsi_info =3D { +static const struct SCSIBusConfig lasi_ncr710_scsi_config =3D { .tcq =3D true, .max_target =3D 8, .max_lun =3D 8, /* full LUN support */ +}; =20 +static const struct SCSIBusInfo lasi_ncr710_scsi_info =3D { .transfer_data =3D lasi_ncr710_transfer_data, .complete =3D lasi_ncr710_command_complete, .cancel =3D lasi_ncr710_request_cancelled, @@ -176,7 +178,7 @@ static void lasi_ncr710_realize(DeviceState *dev, Error= **errp) trace_lasi_ncr710_device_realize(); =20 scsi_bus_init(&s->ncr710.bus, sizeof(s->ncr710.bus), dev, - &lasi_ncr710_scsi_info); + &lasi_ncr710_scsi_info, &lasi_ncr710_scsi_config); s->ncr710.as =3D &address_space_memory; s->ncr710.irq =3D s->lasi_irq; =20 diff --git a/hw/scsi/lsi53c895a.c b/hw/scsi/lsi53c895a.c index 54123f7757..da04f51cab 100644 --- a/hw/scsi/lsi53c895a.c +++ b/hw/scsi/lsi53c895a.c @@ -2327,11 +2327,13 @@ static const VMStateDescription vmstate_lsi_scsi = =3D { } }; =20 -static const struct SCSIBusInfo lsi_scsi_info =3D { +static const struct SCSIBusConfig lsi_scsi_config =3D { .tcq =3D true, .max_target =3D LSI_MAX_DEVS, .max_lun =3D 0, /* LUN support is buggy */ +}; =20 +static const struct SCSIBusInfo lsi_scsi_info =3D { .transfer_data =3D lsi_transfer_data, .complete =3D lsi_command_complete, .cancel =3D lsi_request_cancelled, @@ -2383,7 +2385,7 @@ static void lsi_scsi_realize(PCIDevice *dev, Error **= errp) pci_register_bar(dev, 2, PCI_BASE_ADDRESS_SPACE_MEMORY, &s->ram_io); QTAILQ_INIT(&s->queue); =20 - scsi_bus_init(&s->bus, sizeof(s->bus), d, &lsi_scsi_info); + scsi_bus_init(&s->bus, sizeof(s->bus), d, &lsi_scsi_info, &lsi_scsi_co= nfig); } =20 static void lsi_scsi_exit(PCIDevice *dev) diff --git a/hw/scsi/megasas.c b/hw/scsi/megasas.c index 9e712721f8..f0824069f2 100644 --- a/hw/scsi/megasas.c +++ b/hw/scsi/megasas.c @@ -2327,11 +2327,13 @@ static void megasas_scsi_uninit(PCIDevice *d) msi_uninit(d); } =20 -static const struct SCSIBusInfo megasas_scsi_info =3D { +static const struct SCSIBusConfig megasas_scsi_config =3D { .tcq =3D true, .max_target =3D MFI_MAX_LD, .max_lun =3D 255, +}; =20 +static const struct SCSIBusInfo megasas_scsi_info =3D { .transfer_data =3D megasas_xfer_complete, .get_sg_list =3D megasas_get_sg_list, .complete =3D megasas_command_complete, @@ -2447,7 +2449,8 @@ static void megasas_scsi_realize(PCIDevice *dev, Erro= r **errp) s->frames[i].state =3D s; } =20 - scsi_bus_init(&s->bus, sizeof(s->bus), DEVICE(dev), &megasas_scsi_info= ); + scsi_bus_init(&s->bus, sizeof(s->bus), DEVICE(dev), + &megasas_scsi_info, &megasas_scsi_config); } =20 static const Property megasas_properties_gen1[] =3D { diff --git a/hw/scsi/mptsas.c b/hw/scsi/mptsas.c index e4a7b2fee4..251ad575e8 100644 --- a/hw/scsi/mptsas.c +++ b/hw/scsi/mptsas.c @@ -1259,11 +1259,13 @@ static void *mptsas_load_request(QEMUFile *f, SCSIR= equest *sreq) return req; } =20 -static const struct SCSIBusInfo mptsas_scsi_info =3D { +static const struct SCSIBusConfig mptsas_scsi_config =3D { .tcq =3D true, .max_target =3D MPTSAS_NUM_PORTS, .max_lun =3D 1, +}; =20 +static const struct SCSIBusInfo mptsas_scsi_info =3D { .get_sg_list =3D mptsas_get_sg_list, .complete =3D mptsas_command_complete, .cancel =3D mptsas_request_cancelled, @@ -1325,7 +1327,8 @@ static void mptsas_scsi_realize(PCIDevice *dev, Error= **errp) s->request_bh =3D qemu_bh_new_guarded(mptsas_fetch_requests, s, &DEVICE(dev)->mem_reentrancy_guard= ); =20 - scsi_bus_init(&s->bus, sizeof(s->bus), &dev->qdev, &mptsas_scsi_info); + scsi_bus_init(&s->bus, sizeof(s->bus), &dev->qdev, + &mptsas_scsi_info, &mptsas_scsi_config); } =20 static void mptsas_scsi_uninit(PCIDevice *dev) diff --git a/hw/scsi/ncr53c710.c b/hw/scsi/ncr53c710.c index 57967e7a84..ba92870d9a 100644 --- a/hw/scsi/ncr53c710.c +++ b/hw/scsi/ncr53c710.c @@ -2265,11 +2265,13 @@ static void ncr710_device_reset(DeviceState *dev) ncr710_soft_reset(s); } =20 -static const struct SCSIBusInfo ncr710_scsi_info =3D { +static const struct SCSIBusConfig ncr710_scsi_config =3D { .tcq =3D true, .max_target =3D 8, .max_lun =3D 8, /* Full LUN support */ +}; =20 +static const struct SCSIBusInfo ncr710_scsi_info =3D { .transfer_data =3D ncr710_transfer_data, .complete =3D ncr710_command_complete, .cancel =3D ncr710_request_cancelled, @@ -2415,7 +2417,7 @@ static void sysbus_ncr710_realize(DeviceState *dev, E= rror **errp) =20 trace_ncr710_device_realize(); scsi_bus_init(&s->ncr710.bus, sizeof(s->ncr710.bus), dev, - &ncr710_scsi_info); + &ncr710_scsi_info, &ncr710_scsi_config); s->ncr710.as =3D &address_space_memory; =20 ncr710_scsi_fifo_init(&s->ncr710.scsi_fifo); diff --git a/hw/scsi/scsi-bus.c b/hw/scsi/scsi-bus.c index 1a6b181b9d..b195007617 100644 --- a/hw/scsi/scsi-bus.c +++ b/hw/scsi/scsi-bus.c @@ -265,11 +265,13 @@ void scsi_device_unit_attention_reported(SCSIDevice *= s) =20 /* Create a scsi bus, and attach devices to it. */ void scsi_bus_init_named(SCSIBus *bus, size_t bus_size, DeviceState *host, - const SCSIBusInfo *info, const char *bus_name) + const SCSIBusInfo *info, const SCSIBusConfig *con= fig, + const char *bus_name) { qbus_init(bus, bus_size, TYPE_SCSI_BUS, host, bus_name); bus->busnr =3D next_scsi_bus++; bus->info =3D info; + bus->config =3D config; qbus_set_bus_hotplug_handler(BUS(bus)); } =20 @@ -336,15 +338,15 @@ static bool scsi_bus_check_address(BusState *qbus, De= viceState *qdev, Error **er SCSIDevice *dev =3D SCSI_DEVICE(qdev); SCSIBus *bus =3D SCSI_BUS(qbus); =20 - if (dev->channel > bus->info->max_channel) { + if (dev->channel > bus->config->max_channel) { error_setg(errp, "bad scsi channel id: %d", dev->channel); return false; } - if (dev->id !=3D -1 && dev->id > bus->info->max_target) { + if (dev->id !=3D -1 && dev->id > bus->config->max_target) { error_setg(errp, "bad scsi device id: %d", dev->id); return false; } - if (dev->lun !=3D -1 && dev->lun > bus->info->max_lun) { + if (dev->lun !=3D -1 && dev->lun > bus->config->max_lun) { error_setg(errp, "bad scsi device lun: %d", dev->lun); return false; } @@ -374,7 +376,7 @@ static void scsi_qdev_realize(DeviceState *qdev, Error = **errp) } do { is_free =3D scsi_bus_is_address_free(bus, dev->channel, ++id, = dev->lun, NULL); - } while (!is_free && id < bus->info->max_target); + } while (!is_free && id < bus->config->max_target); if (!is_free) { error_setg(errp, "no free target"); return; @@ -384,7 +386,7 @@ static void scsi_qdev_realize(DeviceState *qdev, Error = **errp) int lun =3D -1; do { is_free =3D scsi_bus_is_address_free(bus, dev->channel, dev->i= d, ++lun, NULL); - } while (!is_free && lun < bus->info->max_lun); + } while (!is_free && lun < bus->config->max_lun); if (!is_free) { error_setg(errp, "no free lun"); return; @@ -493,7 +495,7 @@ void scsi_bus_legacy_handle_cmdline(SCSIBus *bus) }; =20 loc_push_none(&loc); - for (unit =3D 0; unit <=3D bus->info->max_target; unit++) { + for (unit =3D 0; unit <=3D bus->config->max_target; unit++) { dinfo =3D drive_get(IF_SCSI, bus->busnr, unit); if (dinfo =3D=3D NULL) { continue; @@ -700,7 +702,7 @@ static bool scsi_target_emulate_inquiry(SCSITargetReq *= r) r->buf[2] =3D 5; /* Version */ r->buf[3] =3D 2 | 0x10; /* HiSup, response data format */ r->buf[4] =3D r->len - 5; /* Additional Length =3D (Len - 1) - 4 */ - r->buf[7] =3D 0x10 | (r->req.bus->info->tcq ? 0x02 : 0); /* Sync, = TCQ. */ + r->buf[7] =3D 0x10 | (r->req.bus->config->tcq ? 0x02 : 0); /* Sync= , TCQ. */ memcpy(&r->buf[8], "QEMU ", 8); memcpy(&r->buf[16], "QEMU TARGET ", 16); pstrcpy((char *) &r->buf[32], 4, QEMU_HW_VERSION); diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c index 5ba5b46c4f..8eb38b3816 100644 --- a/hw/scsi/scsi-disk.c +++ b/hw/scsi/scsi-disk.c @@ -859,7 +859,7 @@ static int scsi_disk_emulate_inquiry(SCSIRequest *req, = uint8_t *outbuf) } =20 /* Sync data transfer and TCQ. */ - outbuf[7] =3D 0x10 | (req->bus->info->tcq ? 0x02 : 0); + outbuf[7] =3D 0x10 | (req->bus->config->tcq ? 0x02 : 0); return buflen; } =20 diff --git a/hw/scsi/spapr_vscsi.c b/hw/scsi/spapr_vscsi.c index b4c8f94d22..f04dbc16c6 100644 --- a/hw/scsi/spapr_vscsi.c +++ b/hw/scsi/spapr_vscsi.c @@ -1195,12 +1195,14 @@ static int vscsi_do_crq(struct SpaprVioDevice *dev,= uint8_t *crq_data) return 0; } =20 -static const struct SCSIBusInfo vscsi_scsi_info =3D { +static const struct SCSIBusConfig vscsi_scsi_config =3D { .tcq =3D true, .max_channel =3D 7, /* logical unit addressing format */ .max_target =3D 63, .max_lun =3D 31, +}; =20 +static const struct SCSIBusInfo vscsi_scsi_info =3D { .transfer_data =3D vscsi_transfer_data, .complete =3D vscsi_command_complete, .cancel =3D vscsi_request_cancelled, @@ -1225,7 +1227,8 @@ static void spapr_vscsi_realize(SpaprVioDevice *dev, = Error **errp) =20 dev->crq.SendFunc =3D vscsi_do_crq; =20 - scsi_bus_init(&s->bus, sizeof(s->bus), DEVICE(dev), &vscsi_scsi_info); + scsi_bus_init(&s->bus, sizeof(s->bus), DEVICE(dev), + &vscsi_scsi_info, &vscsi_scsi_config); =20 /* ibmvscsi SCSI bus does not allow hotplug. */ qbus_set_hotplug_handler(BUS(&s->bus), NULL); diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c index 6c73768011..f3062c08bf 100644 --- a/hw/scsi/virtio-scsi.c +++ b/hw/scsi/virtio-scsi.c @@ -1264,12 +1264,14 @@ static void virtio_scsi_drained_end(SCSIBus *bus) } } =20 -static struct SCSIBusInfo virtio_scsi_scsi_info =3D { +static struct SCSIBusConfig virtio_scsi_scsi_config =3D { .tcq =3D true, .max_channel =3D VIRTIO_SCSI_MAX_CHANNEL, .max_target =3D VIRTIO_SCSI_MAX_TARGET, .max_lun =3D VIRTIO_SCSI_MAX_LUN, +}; =20 +static const struct SCSIBusInfo virtio_scsi_scsi_info =3D { .complete =3D virtio_scsi_command_complete, .fail =3D virtio_scsi_command_failed, .cancel =3D virtio_scsi_request_cancelled, @@ -1342,7 +1344,8 @@ static void virtio_scsi_device_realize(DeviceState *d= ev, Error **errp) } =20 scsi_bus_init_named(&s->bus, sizeof(s->bus), dev, - &virtio_scsi_scsi_info, vdev->bus_name); + &virtio_scsi_scsi_info, &virtio_scsi_scsi_config, + vdev->bus_name); /* override default SCSI bus hotplug-handler, with virtio-scsi's one */ qbus_set_hotplug_handler(BUS(&s->bus), OBJECT(dev)); =20 diff --git a/hw/scsi/vmw_pvscsi.c b/hw/scsi/vmw_pvscsi.c index 11ae6b9b74..e1310f20eb 100644 --- a/hw/scsi/vmw_pvscsi.c +++ b/hw/scsi/vmw_pvscsi.c @@ -1126,12 +1126,14 @@ static const MemoryRegionOps pvscsi_ops =3D { }, }; =20 -static const struct SCSIBusInfo pvscsi_scsi_info =3D { +static const struct SCSIBusConfig pvscsi_scsi_config =3D { .tcq =3D true, .max_target =3D PVSCSI_MAX_DEVS, .max_channel =3D 0, .max_lun =3D 0, +}; =20 +static const struct SCSIBusInfo pvscsi_scsi_info =3D { .get_sg_list =3D pvscsi_get_sg_list, .complete =3D pvscsi_command_complete, .cancel =3D pvscsi_request_cancelled, @@ -1171,7 +1173,8 @@ pvscsi_realizefn(PCIDevice *pci_dev, Error **errp) s->completion_worker =3D qemu_bh_new_guarded(pvscsi_process_completion= _queue, s, &DEVICE(pci_dev)->mem_reent= rancy_guard); =20 - scsi_bus_init(&s->bus, sizeof(s->bus), DEVICE(pci_dev), &pvscsi_scsi_i= nfo); + scsi_bus_init(&s->bus, sizeof(s->bus), DEVICE(pci_dev), + &pvscsi_scsi_info, &pvscsi_scsi_config); /* override default SCSI bus hotplug-handler, with pvscsi's one */ qbus_set_hotplug_handler(BUS(&s->bus), OBJECT(s)); pvscsi_reset_state(s); diff --git a/hw/ufs/lu.c b/hw/ufs/lu.c index 3f3c9589ce..297b0d95f8 100644 --- a/hw/ufs/lu.c +++ b/hw/ufs/lu.c @@ -79,13 +79,14 @@ static QEMUSGList *ufs_get_sg_list(SCSIRequest *scsi_re= q) UfsRequest *req =3D scsi_req->hba_private; return req->sg; } - -static const struct SCSIBusInfo ufs_scsi_info =3D { +static const struct SCSIBusConfig ufs_scsi_config =3D { .tcq =3D true, .max_target =3D 0, .max_lun =3D UFS_MAX_LUS, .max_channel =3D 0, +}; =20 +static const struct SCSIBusInfo ufs_scsi_info =3D { .get_sg_list =3D ufs_get_sg_list, .complete =3D ufs_scsi_command_complete, }; @@ -344,7 +345,8 @@ static void ufs_init_scsi_device(UfsLu *lu, BlockBacken= d *blk, Error **errp) { DeviceState *scsi_dev; =20 - scsi_bus_init(&lu->bus, sizeof(lu->bus), DEVICE(lu), &ufs_scsi_info); + scsi_bus_init(&lu->bus, sizeof(lu->bus), DEVICE(lu), + &ufs_scsi_info, &ufs_scsi_config); =20 blk_ref(blk); blk_detach_dev(blk, DEVICE(lu)); diff --git a/hw/usb/dev-storage-bot.c b/hw/usb/dev-storage-bot.c index a7f8d80c17..91e6588e29 100644 --- a/hw/usb/dev-storage-bot.c +++ b/hw/usb/dev-storage-bot.c @@ -13,11 +13,13 @@ #include "hw/usb/desc.h" #include "hw/usb/msd.h" =20 -static const struct SCSIBusInfo usb_msd_scsi_info_bot =3D { +static const struct SCSIBusConfig usb_msd_scsi_config_bot =3D { .tcq =3D false, .max_target =3D 0, .max_lun =3D 15, +}; =20 +static const struct SCSIBusInfo usb_msd_scsi_info_bot =3D { .transfer_data =3D usb_msd_transfer_data, .complete =3D usb_msd_command_complete, .cancel =3D usb_msd_request_cancelled, @@ -36,7 +38,8 @@ static void usb_msd_bot_realize(USBDevice *dev, Error **e= rrp) s->dev.auto_attach =3D 0; } =20 - scsi_bus_init(&s->bus, sizeof(s->bus), DEVICE(dev), &usb_msd_scsi_info= _bot); + scsi_bus_init(&s->bus, sizeof(s->bus), DEVICE(dev), + &usb_msd_scsi_info_bot, &usb_msd_scsi_config_bot); usb_msd_handle_reset(dev); } =20 diff --git a/hw/usb/dev-storage-classic.c b/hw/usb/dev-storage-classic.c index 977151c4a0..76e176dc20 100644 --- a/hw/usb/dev-storage-classic.c +++ b/hw/usb/dev-storage-classic.c @@ -16,11 +16,13 @@ #include "system/system.h" #include "system/block-backend.h" =20 -static const struct SCSIBusInfo usb_msd_scsi_info_storage =3D { +static const struct SCSIBusConfig usb_msd_scsi_config_storage =3D { .tcq =3D false, .max_target =3D 0, .max_lun =3D 0, +}; =20 +static const struct SCSIBusInfo usb_msd_scsi_info_storage =3D { .transfer_data =3D usb_msd_transfer_data, .complete =3D usb_msd_command_complete, .cancel =3D usb_msd_request_cancelled, @@ -56,7 +58,7 @@ static void usb_msd_storage_realize(USBDevice *dev, Error= **errp) usb_desc_init(dev); dev->flags |=3D (1 << USB_DEV_FLAG_IS_SCSI_STORAGE); scsi_bus_init(&s->bus, sizeof(s->bus), DEVICE(dev), - &usb_msd_scsi_info_storage); + &usb_msd_scsi_info_storage, &usb_msd_scsi_config_storage= ); scsi_dev =3D scsi_bus_legacy_add_drive(&s->bus, blk, 0, !!s->removable, &s->conf, dev->serial, errp); blk_unref(blk); diff --git a/hw/usb/dev-uas.c b/hw/usb/dev-uas.c index 8576dfec96..de26114f10 100644 --- a/hw/usb/dev-uas.c +++ b/hw/usb/dev-uas.c @@ -618,11 +618,13 @@ static void usb_uas_scsi_request_cancelled(SCSIReques= t *r) scsi_req_unref(req->req); } =20 -static const struct SCSIBusInfo usb_uas_scsi_info =3D { +static const struct SCSIBusConfig usb_uas_scsi_config =3D { .tcq =3D true, .max_target =3D 0, .max_lun =3D 255, +}; =20 +static const struct SCSIBusInfo usb_uas_scsi_info =3D { .transfer_data =3D usb_uas_scsi_transfer_data, .complete =3D usb_uas_scsi_command_complete, .cancel =3D usb_uas_scsi_request_cancelled, @@ -939,7 +941,8 @@ static void usb_uas_realize(USBDevice *dev, Error **err= p) &d->mem_reentrancy_guard); =20 dev->flags |=3D (1 << USB_DEV_FLAG_IS_SCSI_STORAGE); - scsi_bus_init(&uas->bus, sizeof(uas->bus), DEVICE(dev), &usb_uas_scsi_= info); + scsi_bus_init(&uas->bus, sizeof(uas->bus), DEVICE(dev), + &usb_uas_scsi_info, &usb_uas_scsi_config); } =20 static const VMStateDescription vmstate_usb_uas =3D { diff --git a/include/hw/scsi/scsi.h b/include/hw/scsi/scsi.h index a3e246dbd9..53475effb8 100644 --- a/include/hw/scsi/scsi.h +++ b/include/hw/scsi/scsi.h @@ -14,6 +14,7 @@ #define TYPE_SCSI_BUS "SCSI" OBJECT_DECLARE_SIMPLE_TYPE(SCSIBus, SCSI_BUS) =20 +typedef struct SCSIBusConfig SCSIBusConfig; typedef struct SCSIBusInfo SCSIBusInfo; typedef struct SCSIDevice SCSIDevice; typedef struct SCSIRequest SCSIRequest; @@ -137,9 +138,12 @@ struct SCSIReqOps { void (*load_request)(QEMUFile *f, SCSIRequest *req); }; =20 -struct SCSIBusInfo { +struct SCSIBusConfig { int tcq; int max_channel, max_target, max_lun; +}; + +struct SCSIBusInfo { int (*parse_cdb)(SCSIDevice *dev, SCSICommand *cmd, uint8_t *buf, size_t buf_len, void *hba_private); void (*transfer_data)(SCSIRequest *req, uint32_t arg); @@ -170,6 +174,7 @@ struct SCSIBus { =20 SCSISense unit_attention; const SCSIBusInfo *info; + const SCSIBusConfig *config; =20 int drain_count; /* protected by BQL */ }; @@ -179,7 +184,8 @@ struct SCSIBus { * @bus: SCSIBus object to initialize * @bus_size: size of @bus object * @host: Device which owns the bus (generally the SCSI controller) - * @info: structure defining callbacks etc for the controller + * @info: structure defining callbacks for the controller + * @config: structure defining bus params * @bus_name: Name to use for this bus * * This in-place initializes @bus as a new SCSI bus with a name @@ -189,7 +195,8 @@ struct SCSIBus { * should use scsi_bus_init() instead. */ void scsi_bus_init_named(SCSIBus *bus, size_t bus_size, DeviceState *host, - const SCSIBusInfo *info, const char *bus_name); + const SCSIBusInfo *info, const SCSIBusConfig *con= fig, + const char *bus_name); =20 /** * scsi_bus_init: Initialize a SCSI bus @@ -198,9 +205,10 @@ void scsi_bus_init_named(SCSIBus *bus, size_t bus_size= , DeviceState *host, * an automatically generated unique name. */ static inline void scsi_bus_init(SCSIBus *bus, size_t bus_size, - DeviceState *host, const SCSIBusInfo *inf= o) + DeviceState *host, const SCSIBusInfo *inf= o, + const SCSIBusConfig *config) { - scsi_bus_init_named(bus, bus_size, host, info, NULL); + scsi_bus_init_named(bus, bus_size, host, info, config, NULL); } =20 static inline SCSIBus *scsi_bus_from_device(SCSIDevice *d) --=20 2.47.1 From nobody Sat May 30 18:34:21 2026 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=reject dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1777903304; cv=none; d=zohomail.com; s=zohoarc; b=FE4uIMKyRygdYisgelaRZ6SiC5WigE9+Qc2I8xHh/1uIpvgJHBMv3AtjEvxQMm7dkr2hcKqupJhwfwDMNpt+IrysTjdIOKo5WbDJDRaXCFCj7HSGGXMQWLg6Uk8Kd3PhWbJguLYYaDzkBfQEhbbMufBwLC/QYoD8u7cvSHrQbzg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777903304; 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=EaoUPJL5UmkjOz9/H0tAjANnO5w98RqS2JjUBHYJHro=; b=i27uMSoIeE0FjgKd4uhEhne/WaAfCLPxg58Q+xv0Chh/Cg4TWqF8O59OpldDaxQkoX+b3x4f9nIF0QhC5NN+0FS49f2Hvle/ArcM+4e7G7ud/m61Kl2vXgBUexsTm7TEpbpjr+6dXUg7F0tB7wmu2jGbQLPBQx+UBReEAFwu5Hs= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 177790330432656.07705959069733; Mon, 4 May 2026 07:01:44 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wJtqN-00050p-KV; Mon, 04 May 2026 10:00:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wJtqJ-0004xl-QB; Mon, 04 May 2026 10:00:17 -0400 Received: from mx0a-00069f02.pphosted.com ([205.220.165.32]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wJtqF-0002Ol-Rx; Mon, 04 May 2026 10:00:15 -0400 Received: from pps.filterd (m0333521.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6448fT2v1628790; Mon, 4 May 2026 14:00:03 GMT Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4dw9fraqew-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 04 May 2026 14:00:02 +0000 (GMT) Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 644DuSGo014178; Mon, 4 May 2026 14:00:01 GMT Received: from pps.reinject (localhost [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4dx5adk97m-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 04 May 2026 14:00:01 +0000 (GMT) Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.18.1.12/8.18.1.12) with ESMTP id 644Dxvog027094; Mon, 4 May 2026 14:00:00 GMT Received: from kstolare-e5-ol8.osdevelopmeniad.oraclevcn.com (kstolare-e5-ol8.allregionaliads.osdevelopmeniad.oraclevcn.com [100.100.254.20]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTP id 4dx5adk954-3; Mon, 04 May 2026 14:00:00 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=EaoUPJL5UmkjOz9/H0tAjANnO5w98RqS2JjUBHYJHro=; b= CQWxo3PmbzNQsgWhTE+Yi+JReW/Mu7XZYcjUaLDrywigCVSgnJo/V8LCk1S5bjww ldPTq9D/WP1EzNBC9ezg9zrEF1K6hcR5EbJR1Q5fUpasSpkQwcnb0uHgq3jPfV+b rUbvy5toqn3LfsmCdbJX6IsEN8CpHj44aElU+XyFI1pLdaSFTVZJrqz2En2fw4J+ cGVVqXaPsPmFJIXAryPsfo5HtwU9yKPox0FsLOjn6vteCPGk9FFSGKD0oPfdvGBn uozEKGMbVAa1Uwpn7lfWFkAtqU4EoQpCsz7xakbg2cL4vWUHFMUF/5W9Zj8UXuGf GTsAZf5lD3WIFnSg9FD33w== From: Karolina Stolarek To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= , Fam Zheng , Paolo Bonzini , "Michael S . Tsirkin" , "Maciej S . Szmigiero" , Karolina Stolarek , Richard Henderson , Helge Deller , Nicholas Piggin , Harsh Prateek Bora , Dmitry Fleytman , Jeuk Kim , qemu-block@nongnu.org, qemu-ppc@nongnu.org Subject: [PATCH 2/5] scsi: Rename SCSIBusInfo to SCSIBusOps Date: Mon, 4 May 2026 13:59:41 +0000 Message-ID: <0ec3e6b2d9a6961948eb27847898c2ea042cc533.1777890280.git.karolina.stolarek@oracle.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-04_04,2026-04-30_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 adultscore=0 lowpriorityscore=0 spamscore=0 mlxlogscore=999 mlxscore=0 phishscore=0 malwarescore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2604200000 definitions=main-2605040145 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTA0MDE0NSBTYWx0ZWRfX4m5JqUJYgp+o q/B8a82teFkuF99FNkN+MXJ8R/3uTypUpcE3yFRz9qjjH3WiUOBB9FKQ+2KvqZFPPaqDvMLqZtM BJLoOwPkNmPhxKtUF3YSeVW+wqzFwGzlZlyU/ueD6265rwH8GkpMinwdgtycJk0yFPA5EMov0Ib X6f4MPY+Mpt0+y3GfY2/3XSzEpLSOepUvBJhjcyMsDrKXk8KdsNFlG8XQbXXt3hP+GOXYBRDXnu od5Zhy9cU89ylOy0HfB3VU6+0sCMTKYFzMBDeXX8goIMcacQUFt3aQyEVdkxRIPWr2WQgDn/cPl GFjeBATFVJ25gPruRtWTgzBLsWzSlbRg5cWEqjDDUTpWHeLjJKRskIgpXsSOlFSy776jv0pQJWy b9om3C/Z5npSNj+D2zP0ux+Ebux6q3Olo2278AbViM2ccQd7IPU8zkj3TODDvLHoprbe29enIJz DQbFZJFQrnwi3dtiDg0nlg12Fge5mLpo0d/OkLbo= X-Authority-Analysis: v=2.4 cv=TZ6mcxQh c=1 sm=1 tr=0 ts=69f8a662 b=1 cx=c_pps a=zPCbziy225d3KhSqZt3L1A==:117 a=zPCbziy225d3KhSqZt3L1A==:17 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=x0eKOSpe3m1H3M0S9YoZ:22 a=KKAkSRfTAAAA:8 a=pGLkceISAAAA:8 a=VnNF1IyMAAAA:8 a=hD80L64hAAAA:8 a=69wJf7TsAAAA:8 a=yPCof4ZbAAAA:8 a=gS5mfdbYi_I4iAyqv3IA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 a=Fg1AiH1G6rFz08G2ETeA:22 cc=ntf awl=host:12306 X-Proofpoint-ORIG-GUID: Lfd0ec0PYGg4IraVbI9cXD7ZGcz2pUzN X-Proofpoint-GUID: Lfd0ec0PYGg4IraVbI9cXD7ZGcz2pUzN 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.165.32; envelope-from=karolina.stolarek@oracle.com; helo=mx0a-00069f02.pphosted.com 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, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, 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 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 @oracle.com) X-ZM-MESSAGEID: 1777903305119158500 Align the name of the structure with its actual function. Update the checkpatch.pl script to check for SCSIBusOps in place of SCSIBusInfo. Cc: Richard Henderson Cc: Helge Deller Cc: Nicholas Piggin Cc: Harsh Prateek Bora Cc: Dmitry Fleytman Cc: Jeuk Kim Cc: qemu-block@nongnu.org Cc: qemu-ppc@nongnu.org Suggested-by: Alex Benn=C3=A9e Signed-off-by: Karolina Stolarek --- hw/scsi/esp-pci.c | 4 +-- hw/scsi/esp.c | 4 +-- hw/scsi/lasi_ncr710.c | 4 +-- hw/scsi/lsi53c895a.c | 4 +-- hw/scsi/megasas.c | 4 +-- hw/scsi/mptsas.c | 6 ++--- hw/scsi/ncr53c710.c | 4 +-- hw/scsi/scsi-bus.c | 48 ++++++++++++++++++------------------ hw/scsi/spapr_vscsi.c | 4 +-- hw/scsi/virtio-scsi.c | 4 +-- hw/scsi/vmw_pvscsi.c | 4 +-- hw/ufs/lu.c | 4 +-- hw/usb/dev-storage-bot.c | 4 +-- hw/usb/dev-storage-classic.c | 4 +-- hw/usb/dev-uas.c | 4 +-- include/hw/scsi/scsi.h | 14 +++++------ scripts/checkpatch.pl | 2 +- 17 files changed, 61 insertions(+), 61 deletions(-) diff --git a/hw/scsi/esp-pci.c b/hw/scsi/esp-pci.c index 34a095b73f..17ed0b186d 100644 --- a/hw/scsi/esp-pci.c +++ b/hw/scsi/esp-pci.c @@ -379,7 +379,7 @@ static const struct SCSIBusConfig esp_pci_scsi_config = =3D { .max_lun =3D 7, }; =20 -static const struct SCSIBusInfo esp_pci_scsi_info =3D { +static const struct SCSIBusOps esp_pci_scsi_ops =3D { .transfer_data =3D esp_transfer_data, .complete =3D esp_command_complete, .cancel =3D esp_request_cancelled, @@ -411,7 +411,7 @@ static void esp_pci_scsi_realize(PCIDevice *dev, Error = **errp) pci_register_bar(dev, 0, PCI_BASE_ADDRESS_SPACE_IO, &pci->io); s->irq =3D qemu_allocate_irq(esp_irq_handler, pci, 0); =20 - scsi_bus_init(&s->bus, sizeof(s->bus), d, &esp_pci_scsi_info, + scsi_bus_init(&s->bus, sizeof(s->bus), d, &esp_pci_scsi_ops, &esp_pci_scsi_config); } =20 diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 851af4d9fa..b928693ed2 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -1564,7 +1564,7 @@ static const struct SCSIBusConfig esp_scsi_config =3D= { .max_lun =3D 7, }; =20 -static const struct SCSIBusInfo esp_scsi_info =3D { +static const struct SCSIBusOps esp_scsi_ops =3D { .load_request =3D esp_load_request, .transfer_data =3D esp_transfer_data, .complete =3D esp_command_complete, @@ -1610,7 +1610,7 @@ static void sysbus_esp_realize(DeviceState *dev, Erro= r **errp) =20 qdev_init_gpio_in(dev, sysbus_esp_gpio_demux, 2); =20 - scsi_bus_init(&s->bus, sizeof(s->bus), dev, &esp_scsi_info, + scsi_bus_init(&s->bus, sizeof(s->bus), dev, &esp_scsi_ops, &esp_scsi_config); } =20 diff --git a/hw/scsi/lasi_ncr710.c b/hw/scsi/lasi_ncr710.c index 7abc92b0bb..726250b9d7 100644 --- a/hw/scsi/lasi_ncr710.c +++ b/hw/scsi/lasi_ncr710.c @@ -141,7 +141,7 @@ static const struct SCSIBusConfig lasi_ncr710_scsi_conf= ig =3D { .max_lun =3D 8, /* full LUN support */ }; =20 -static const struct SCSIBusInfo lasi_ncr710_scsi_info =3D { +static const struct SCSIBusOps lasi_ncr710_scsi_ops =3D { .transfer_data =3D lasi_ncr710_transfer_data, .complete =3D lasi_ncr710_command_complete, .cancel =3D lasi_ncr710_request_cancelled, @@ -178,7 +178,7 @@ static void lasi_ncr710_realize(DeviceState *dev, Error= **errp) trace_lasi_ncr710_device_realize(); =20 scsi_bus_init(&s->ncr710.bus, sizeof(s->ncr710.bus), dev, - &lasi_ncr710_scsi_info, &lasi_ncr710_scsi_config); + &lasi_ncr710_scsi_ops, &lasi_ncr710_scsi_config); s->ncr710.as =3D &address_space_memory; s->ncr710.irq =3D s->lasi_irq; =20 diff --git a/hw/scsi/lsi53c895a.c b/hw/scsi/lsi53c895a.c index da04f51cab..2de24381f3 100644 --- a/hw/scsi/lsi53c895a.c +++ b/hw/scsi/lsi53c895a.c @@ -2333,7 +2333,7 @@ static const struct SCSIBusConfig lsi_scsi_config =3D= { .max_lun =3D 0, /* LUN support is buggy */ }; =20 -static const struct SCSIBusInfo lsi_scsi_info =3D { +static const struct SCSIBusOps lsi_scsi_ops =3D { .transfer_data =3D lsi_transfer_data, .complete =3D lsi_command_complete, .cancel =3D lsi_request_cancelled, @@ -2385,7 +2385,7 @@ static void lsi_scsi_realize(PCIDevice *dev, Error **= errp) pci_register_bar(dev, 2, PCI_BASE_ADDRESS_SPACE_MEMORY, &s->ram_io); QTAILQ_INIT(&s->queue); =20 - scsi_bus_init(&s->bus, sizeof(s->bus), d, &lsi_scsi_info, &lsi_scsi_co= nfig); + scsi_bus_init(&s->bus, sizeof(s->bus), d, &lsi_scsi_ops, &lsi_scsi_con= fig); } =20 static void lsi_scsi_exit(PCIDevice *dev) diff --git a/hw/scsi/megasas.c b/hw/scsi/megasas.c index f0824069f2..11bb843c3a 100644 --- a/hw/scsi/megasas.c +++ b/hw/scsi/megasas.c @@ -2333,7 +2333,7 @@ static const struct SCSIBusConfig megasas_scsi_config= =3D { .max_lun =3D 255, }; =20 -static const struct SCSIBusInfo megasas_scsi_info =3D { +static const struct SCSIBusOps megasas_scsi_ops =3D { .transfer_data =3D megasas_xfer_complete, .get_sg_list =3D megasas_get_sg_list, .complete =3D megasas_command_complete, @@ -2450,7 +2450,7 @@ static void megasas_scsi_realize(PCIDevice *dev, Erro= r **errp) } =20 scsi_bus_init(&s->bus, sizeof(s->bus), DEVICE(dev), - &megasas_scsi_info, &megasas_scsi_config); + &megasas_scsi_ops, &megasas_scsi_config); } =20 static const Property megasas_properties_gen1[] =3D { diff --git a/hw/scsi/mptsas.c b/hw/scsi/mptsas.c index 251ad575e8..b1b960b463 100644 --- a/hw/scsi/mptsas.c +++ b/hw/scsi/mptsas.c @@ -1238,7 +1238,7 @@ static void *mptsas_load_request(QEMUFile *f, SCSIReq= uest *sreq) qemu_get_buffer(f, (unsigned char *)&req->scsi_io, sizeof(req->scsi_io= )); =20 n =3D qemu_get_be32(f); - /* TODO: add a way for SCSIBusInfo's load_request to fail, + /* TODO: add a way for SCSIBusOps's load_request to fail, * and fail migration instead of asserting here. * This is just one thing (there are probably more) that must be * fixed before we can allow NDEBUG compilation. @@ -1265,7 +1265,7 @@ static const struct SCSIBusConfig mptsas_scsi_config = =3D { .max_lun =3D 1, }; =20 -static const struct SCSIBusInfo mptsas_scsi_info =3D { +static const struct SCSIBusOps mptsas_scsi_ops =3D { .get_sg_list =3D mptsas_get_sg_list, .complete =3D mptsas_command_complete, .cancel =3D mptsas_request_cancelled, @@ -1328,7 +1328,7 @@ static void mptsas_scsi_realize(PCIDevice *dev, Error= **errp) &DEVICE(dev)->mem_reentrancy_guard= ); =20 scsi_bus_init(&s->bus, sizeof(s->bus), &dev->qdev, - &mptsas_scsi_info, &mptsas_scsi_config); + &mptsas_scsi_ops, &mptsas_scsi_config); } =20 static void mptsas_scsi_uninit(PCIDevice *dev) diff --git a/hw/scsi/ncr53c710.c b/hw/scsi/ncr53c710.c index ba92870d9a..9a4afd17e5 100644 --- a/hw/scsi/ncr53c710.c +++ b/hw/scsi/ncr53c710.c @@ -2271,7 +2271,7 @@ static const struct SCSIBusConfig ncr710_scsi_config = =3D { .max_lun =3D 8, /* Full LUN support */ }; =20 -static const struct SCSIBusInfo ncr710_scsi_info =3D { +static const struct SCSIBusOps ncr710_scsi_ops =3D { .transfer_data =3D ncr710_transfer_data, .complete =3D ncr710_command_complete, .cancel =3D ncr710_request_cancelled, @@ -2417,7 +2417,7 @@ static void sysbus_ncr710_realize(DeviceState *dev, E= rror **errp) =20 trace_ncr710_device_realize(); scsi_bus_init(&s->ncr710.bus, sizeof(s->ncr710.bus), dev, - &ncr710_scsi_info, &ncr710_scsi_config); + &ncr710_scsi_ops, &ncr710_scsi_config); s->ncr710.as =3D &address_space_memory; =20 ncr710_scsi_fifo_init(&s->ncr710.scsi_fifo); diff --git a/hw/scsi/scsi-bus.c b/hw/scsi/scsi-bus.c index b195007617..391b279358 100644 --- a/hw/scsi/scsi-bus.c +++ b/hw/scsi/scsi-bus.c @@ -238,8 +238,8 @@ int scsi_bus_parse_cdb(SCSIDevice *dev, SCSICommand *cm= d, uint8_t *buf, =20 assert(cmd->len =3D=3D 0); rc =3D scsi_req_parse_cdb(dev, cmd, buf, buf_len); - if (bus->info->parse_cdb) { - rc =3D bus->info->parse_cdb(dev, cmd, buf, buf_len, hba_private); + if (bus->ops->parse_cdb) { + rc =3D bus->ops->parse_cdb(dev, cmd, buf, buf_len, hba_private); } return rc; } @@ -265,12 +265,12 @@ void scsi_device_unit_attention_reported(SCSIDevice *= s) =20 /* Create a scsi bus, and attach devices to it. */ void scsi_bus_init_named(SCSIBus *bus, size_t bus_size, DeviceState *host, - const SCSIBusInfo *info, const SCSIBusConfig *con= fig, + const SCSIBusOps *ops, const SCSIBusConfig *confi= g, const char *bus_name) { qbus_init(bus, bus_size, TYPE_SCSI_BUS, host, bus_name); bus->busnr =3D next_scsi_bus++; - bus->info =3D info; + bus->ops =3D ops; bus->config =3D config; qbus_set_bus_hotplug_handler(BUS(bus)); } @@ -1007,8 +1007,8 @@ static void scsi_req_enqueue_internal(SCSIRequest *re= q) { assert(!req->enqueued); scsi_req_ref(req); - if (req->bus->info->get_sg_list) { - req->sg =3D req->bus->info->get_sg_list(req); + if (req->bus->ops->get_sg_list) { + req->sg =3D req->bus->ops->get_sg_list(req); } else { req->sg =3D NULL; } @@ -1491,8 +1491,8 @@ void scsi_device_report_change(SCSIDevice *dev, SCSIS= ense sense) SCSIBus *bus =3D DO_UPCAST(SCSIBus, qbus, dev->qdev.parent_bus); =20 scsi_device_set_ua(dev, sense); - if (bus->info->change) { - bus->info->change(bus, dev, sense); + if (bus->ops->change) { + bus->ops->change(bus, dev, sense); } } =20 @@ -1510,8 +1510,8 @@ void scsi_req_unref(SCSIRequest *req) BusState *qbus =3D req->dev->qdev.parent_bus; SCSIBus *bus =3D DO_UPCAST(SCSIBus, qbus, qbus); =20 - if (bus->info->free_request && req->hba_private) { - bus->info->free_request(bus, req->hba_private); + if (bus->ops->free_request && req->hba_private) { + bus->ops->free_request(bus, req->hba_private); } if (req->ops->free_req) { req->ops->free_req(req); @@ -1550,7 +1550,7 @@ void scsi_req_data(SCSIRequest *req, int len) assert(req->cmd.mode !=3D SCSI_XFER_NONE); if (!req->sg) { req->residual -=3D len; - req->bus->info->transfer_data(req, len); + req->bus->ops->transfer_data(req, len); return; } =20 @@ -1607,7 +1607,7 @@ void scsi_req_complete_failed(SCSIRequest *req, int h= ost_status) assert(req->status =3D=3D -1 && req->host_status =3D=3D -1); assert(req->ops !=3D &reqops_unit_attention); =20 - if (!req->bus->info->fail) { + if (!req->bus->ops->fail) { status =3D scsi_sense_from_host_status(req->host_status, &sense); if (status =3D=3D CHECK_CONDITION) { scsi_req_build_sense(req, sense); @@ -1619,7 +1619,7 @@ void scsi_req_complete_failed(SCSIRequest *req, int h= ost_status) req->host_status =3D host_status; scsi_req_ref(req); scsi_req_dequeue(req); - req->bus->info->fail(req); + req->bus->ops->fail(req); =20 /* Cancelled requests might end up being completed instead of cancelle= d */ notifier_list_notify(&req->cancel_notifiers, req); @@ -1648,7 +1648,7 @@ void scsi_req_complete(SCSIRequest *req, int status) =20 scsi_req_ref(req); scsi_req_dequeue(req); - req->bus->info->complete(req, req->residual); + req->bus->ops->complete(req, req->residual); =20 /* Cancelled requests might end up being completed instead of cancelle= d */ notifier_list_notify(&req->cancel_notifiers, req); @@ -1659,8 +1659,8 @@ void scsi_req_complete(SCSIRequest *req, int status) void scsi_req_cancel_complete(SCSIRequest *req) { assert(req->io_canceled); - if (req->bus->info->cancel) { - req->bus->info->cancel(req); + if (req->bus->ops->cancel) { + req->bus->ops->cancel(req); } notifier_list_notify(&req->cancel_notifiers, req); scsi_req_unref(req); @@ -1818,8 +1818,8 @@ void scsi_device_drained_begin(SCSIDevice *sdev) */ if (bus->drain_count++ =3D=3D 0) { trace_scsi_bus_drained_begin(bus, sdev); - if (bus->info->drained_begin) { - bus->info->drained_begin(bus); + if (bus->ops->drained_begin) { + bus->ops->drained_begin(bus); } } } @@ -1836,8 +1836,8 @@ void scsi_device_drained_end(SCSIDevice *sdev) =20 if (bus->drain_count-- =3D=3D 1) { trace_scsi_bus_drained_end(bus, sdev); - if (bus->info->drained_end) { - bus->info->drained_end(bus); + if (bus->ops->drained_end) { + bus->ops->drained_end(bus); } } } @@ -1880,8 +1880,8 @@ static void put_scsi_req(SCSIRequest *req, void *opaq= ue) qemu_put_buffer(f, req->cmd.buf, sizeof(req->cmd.buf)); qemu_put_be32s(f, &req->tag); qemu_put_be32s(f, &req->lun); - if (req->bus->info->save_request) { - req->bus->info->save_request(f, req); + if (req->bus->ops->save_request) { + req->bus->ops->save_request(f, req); } if (req->ops->save_request) { req->ops->save_request(f, req); @@ -1920,8 +1920,8 @@ static int get_scsi_requests(QEMUFile *f, void *pv, s= ize_t size, */ req =3D scsi_req_new(s, tag, lun, buf, sizeof(buf), NULL); req->retry =3D (sbyte =3D=3D 1); - if (bus->info->load_request) { - req->hba_private =3D bus->info->load_request(f, req); + if (bus->ops->load_request) { + req->hba_private =3D bus->ops->load_request(f, req); } if (req->ops->load_request) { req->ops->load_request(f, req); diff --git a/hw/scsi/spapr_vscsi.c b/hw/scsi/spapr_vscsi.c index f04dbc16c6..1fdd384cfe 100644 --- a/hw/scsi/spapr_vscsi.c +++ b/hw/scsi/spapr_vscsi.c @@ -1202,7 +1202,7 @@ static const struct SCSIBusConfig vscsi_scsi_config = =3D { .max_lun =3D 31, }; =20 -static const struct SCSIBusInfo vscsi_scsi_info =3D { +static const struct SCSIBusOps vscsi_scsi_ops =3D { .transfer_data =3D vscsi_transfer_data, .complete =3D vscsi_command_complete, .cancel =3D vscsi_request_cancelled, @@ -1228,7 +1228,7 @@ static void spapr_vscsi_realize(SpaprVioDevice *dev, = Error **errp) dev->crq.SendFunc =3D vscsi_do_crq; =20 scsi_bus_init(&s->bus, sizeof(s->bus), DEVICE(dev), - &vscsi_scsi_info, &vscsi_scsi_config); + &vscsi_scsi_ops, &vscsi_scsi_config); =20 /* ibmvscsi SCSI bus does not allow hotplug. */ qbus_set_hotplug_handler(BUS(&s->bus), NULL); diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c index f3062c08bf..8d2811d7fb 100644 --- a/hw/scsi/virtio-scsi.c +++ b/hw/scsi/virtio-scsi.c @@ -1271,7 +1271,7 @@ static struct SCSIBusConfig virtio_scsi_scsi_config = =3D { .max_lun =3D VIRTIO_SCSI_MAX_LUN, }; =20 -static const struct SCSIBusInfo virtio_scsi_scsi_info =3D { +static const struct SCSIBusOps virtio_scsi_scsi_ops =3D { .complete =3D virtio_scsi_command_complete, .fail =3D virtio_scsi_command_failed, .cancel =3D virtio_scsi_request_cancelled, @@ -1344,7 +1344,7 @@ static void virtio_scsi_device_realize(DeviceState *d= ev, Error **errp) } =20 scsi_bus_init_named(&s->bus, sizeof(s->bus), dev, - &virtio_scsi_scsi_info, &virtio_scsi_scsi_config, + &virtio_scsi_scsi_ops, &virtio_scsi_scsi_config, vdev->bus_name); /* override default SCSI bus hotplug-handler, with virtio-scsi's one */ qbus_set_hotplug_handler(BUS(&s->bus), OBJECT(dev)); diff --git a/hw/scsi/vmw_pvscsi.c b/hw/scsi/vmw_pvscsi.c index e1310f20eb..0ed5c0490b 100644 --- a/hw/scsi/vmw_pvscsi.c +++ b/hw/scsi/vmw_pvscsi.c @@ -1133,7 +1133,7 @@ static const struct SCSIBusConfig pvscsi_scsi_config = =3D { .max_lun =3D 0, }; =20 -static const struct SCSIBusInfo pvscsi_scsi_info =3D { +static const struct SCSIBusOps pvscsi_scsi_ops =3D { .get_sg_list =3D pvscsi_get_sg_list, .complete =3D pvscsi_command_complete, .cancel =3D pvscsi_request_cancelled, @@ -1174,7 +1174,7 @@ pvscsi_realizefn(PCIDevice *pci_dev, Error **errp) &DEVICE(pci_dev)->mem_reent= rancy_guard); =20 scsi_bus_init(&s->bus, sizeof(s->bus), DEVICE(pci_dev), - &pvscsi_scsi_info, &pvscsi_scsi_config); + &pvscsi_scsi_ops, &pvscsi_scsi_config); /* override default SCSI bus hotplug-handler, with pvscsi's one */ qbus_set_hotplug_handler(BUS(&s->bus), OBJECT(s)); pvscsi_reset_state(s); diff --git a/hw/ufs/lu.c b/hw/ufs/lu.c index 297b0d95f8..462d8ea465 100644 --- a/hw/ufs/lu.c +++ b/hw/ufs/lu.c @@ -86,7 +86,7 @@ static const struct SCSIBusConfig ufs_scsi_config =3D { .max_channel =3D 0, }; =20 -static const struct SCSIBusInfo ufs_scsi_info =3D { +static const struct SCSIBusOps ufs_scsi_ops =3D { .get_sg_list =3D ufs_get_sg_list, .complete =3D ufs_scsi_command_complete, }; @@ -346,7 +346,7 @@ static void ufs_init_scsi_device(UfsLu *lu, BlockBacken= d *blk, Error **errp) DeviceState *scsi_dev; =20 scsi_bus_init(&lu->bus, sizeof(lu->bus), DEVICE(lu), - &ufs_scsi_info, &ufs_scsi_config); + &ufs_scsi_ops, &ufs_scsi_config); =20 blk_ref(blk); blk_detach_dev(blk, DEVICE(lu)); diff --git a/hw/usb/dev-storage-bot.c b/hw/usb/dev-storage-bot.c index 91e6588e29..e98fe1bcc4 100644 --- a/hw/usb/dev-storage-bot.c +++ b/hw/usb/dev-storage-bot.c @@ -19,7 +19,7 @@ static const struct SCSIBusConfig usb_msd_scsi_config_bot= =3D { .max_lun =3D 15, }; =20 -static const struct SCSIBusInfo usb_msd_scsi_info_bot =3D { +static const struct SCSIBusOps usb_msd_scsi_ops_bot =3D { .transfer_data =3D usb_msd_transfer_data, .complete =3D usb_msd_command_complete, .cancel =3D usb_msd_request_cancelled, @@ -39,7 +39,7 @@ static void usb_msd_bot_realize(USBDevice *dev, Error **e= rrp) } =20 scsi_bus_init(&s->bus, sizeof(s->bus), DEVICE(dev), - &usb_msd_scsi_info_bot, &usb_msd_scsi_config_bot); + &usb_msd_scsi_ops_bot, &usb_msd_scsi_config_bot); usb_msd_handle_reset(dev); } =20 diff --git a/hw/usb/dev-storage-classic.c b/hw/usb/dev-storage-classic.c index 76e176dc20..4358e9a91f 100644 --- a/hw/usb/dev-storage-classic.c +++ b/hw/usb/dev-storage-classic.c @@ -22,7 +22,7 @@ static const struct SCSIBusConfig usb_msd_scsi_config_sto= rage =3D { .max_lun =3D 0, }; =20 -static const struct SCSIBusInfo usb_msd_scsi_info_storage =3D { +static const struct SCSIBusOps usb_msd_scsi_ops_storage =3D { .transfer_data =3D usb_msd_transfer_data, .complete =3D usb_msd_command_complete, .cancel =3D usb_msd_request_cancelled, @@ -58,7 +58,7 @@ static void usb_msd_storage_realize(USBDevice *dev, Error= **errp) usb_desc_init(dev); dev->flags |=3D (1 << USB_DEV_FLAG_IS_SCSI_STORAGE); scsi_bus_init(&s->bus, sizeof(s->bus), DEVICE(dev), - &usb_msd_scsi_info_storage, &usb_msd_scsi_config_storage= ); + &usb_msd_scsi_ops_storage, &usb_msd_scsi_config_storage); scsi_dev =3D scsi_bus_legacy_add_drive(&s->bus, blk, 0, !!s->removable, &s->conf, dev->serial, errp); blk_unref(blk); diff --git a/hw/usb/dev-uas.c b/hw/usb/dev-uas.c index de26114f10..0627213f48 100644 --- a/hw/usb/dev-uas.c +++ b/hw/usb/dev-uas.c @@ -624,7 +624,7 @@ static const struct SCSIBusConfig usb_uas_scsi_config = =3D { .max_lun =3D 255, }; =20 -static const struct SCSIBusInfo usb_uas_scsi_info =3D { +static const struct SCSIBusOps usb_uas_scsi_ops =3D { .transfer_data =3D usb_uas_scsi_transfer_data, .complete =3D usb_uas_scsi_command_complete, .cancel =3D usb_uas_scsi_request_cancelled, @@ -942,7 +942,7 @@ static void usb_uas_realize(USBDevice *dev, Error **err= p) =20 dev->flags |=3D (1 << USB_DEV_FLAG_IS_SCSI_STORAGE); scsi_bus_init(&uas->bus, sizeof(uas->bus), DEVICE(dev), - &usb_uas_scsi_info, &usb_uas_scsi_config); + &usb_uas_scsi_ops, &usb_uas_scsi_config); } =20 static const VMStateDescription vmstate_usb_uas =3D { diff --git a/include/hw/scsi/scsi.h b/include/hw/scsi/scsi.h index 53475effb8..85e40ef08d 100644 --- a/include/hw/scsi/scsi.h +++ b/include/hw/scsi/scsi.h @@ -15,7 +15,7 @@ OBJECT_DECLARE_SIMPLE_TYPE(SCSIBus, SCSI_BUS) =20 typedef struct SCSIBusConfig SCSIBusConfig; -typedef struct SCSIBusInfo SCSIBusInfo; +typedef struct SCSIBusOps SCSIBusOps; typedef struct SCSIDevice SCSIDevice; typedef struct SCSIRequest SCSIRequest; typedef struct SCSIReqOps SCSIReqOps; @@ -143,7 +143,7 @@ struct SCSIBusConfig { int max_channel, max_target, max_lun; }; =20 -struct SCSIBusInfo { +struct SCSIBusOps { int (*parse_cdb)(SCSIDevice *dev, SCSICommand *cmd, uint8_t *buf, size_t buf_len, void *hba_private); void (*transfer_data)(SCSIRequest *req, uint32_t arg); @@ -173,7 +173,7 @@ struct SCSIBus { int busnr; =20 SCSISense unit_attention; - const SCSIBusInfo *info; + const SCSIBusOps *ops; const SCSIBusConfig *config; =20 int drain_count; /* protected by BQL */ @@ -184,7 +184,7 @@ struct SCSIBus { * @bus: SCSIBus object to initialize * @bus_size: size of @bus object * @host: Device which owns the bus (generally the SCSI controller) - * @info: structure defining callbacks for the controller + * @ops: structure defining callbacks for the controller * @config: structure defining bus params * @bus_name: Name to use for this bus * @@ -195,7 +195,7 @@ struct SCSIBus { * should use scsi_bus_init() instead. */ void scsi_bus_init_named(SCSIBus *bus, size_t bus_size, DeviceState *host, - const SCSIBusInfo *info, const SCSIBusConfig *con= fig, + const SCSIBusOps *ops, const SCSIBusConfig *confi= g, const char *bus_name); =20 /** @@ -205,10 +205,10 @@ void scsi_bus_init_named(SCSIBus *bus, size_t bus_siz= e, DeviceState *host, * an automatically generated unique name. */ static inline void scsi_bus_init(SCSIBus *bus, size_t bus_size, - DeviceState *host, const SCSIBusInfo *inf= o, + DeviceState *host, const SCSIBusOps *ops, const SCSIBusConfig *config) { - scsi_bus_init_named(bus, bus_size, host, info, config, NULL); + scsi_bus_init_named(bus, bus_size, host, ops, config, NULL); } =20 static inline SCSIBus *scsi_bus_from_device(SCSIDevice *d) diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl index e1cf2ff23b..24681e5c38 100755 --- a/scripts/checkpatch.pl +++ b/scripts/checkpatch.pl @@ -3223,7 +3223,7 @@ sub process { MemoryRegionOps| MemoryRegionPortio| QEMUFileOps| - SCSIBusInfo| + SCSIBusOps| SCSIReqOps| Spice[A-Z][a-zA-Z0-9]*Interface| TypeInfo| --=20 2.47.1 From nobody Sat May 30 18:34:21 2026 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=reject dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1777903238; cv=none; d=zohomail.com; s=zohoarc; b=QirbPyv9kKK60GcfjjzkTPznX8+TVZOc/scb8i3ry+Q+o32Ol1mgC64wjCKCnzpjLI5k5w3elBwW55t+usvT0ZWdG0HzZ6igyzKv5vHoZ9ienJoVK08Uwl+FJGLFNJVmBxMWMzoqPTNEVQYVuJodv5ktu/ton6Nhhl7+DijZsdM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777903238; h=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=iAIqvwpk94ahFSpRlKvUgQewX7PMm5ZhfDLvN1lniiU=; b=VW1vGQcbl3nPKKUqpRnXSGJnQPkOA1CelfE1n3PopWRVQyBkX3aj03UPmRL0BcQr4mVMYPkqP5F5n3eQD327A+BgIUMrfbiKcYIMu1FyppFgd0/1Y/3euhpqVvgS6NRPuSSde63zbjFBuk/SMhGwKXFOFh+/kDnW4GvIfBvsk6c= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1777903238954399.0445483515898; Mon, 4 May 2026 07:00:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wJtqF-0004tg-TS; Mon, 04 May 2026 10:00:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wJtqD-0004rx-DN for qemu-devel@nongnu.org; Mon, 04 May 2026 10:00:09 -0400 Received: from mx0a-00069f02.pphosted.com ([205.220.165.32]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wJtqB-0002Jk-L3 for qemu-devel@nongnu.org; Mon, 04 May 2026 10:00:09 -0400 Received: from pps.filterd (m0246617.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6448fcdr205214; Mon, 4 May 2026 14:00:04 GMT Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4dw9tqtpd0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 04 May 2026 14:00:03 +0000 (GMT) Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 644DuT5m014323; Mon, 4 May 2026 14:00:02 GMT Received: from pps.reinject (localhost [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4dx5adk997-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 04 May 2026 14:00:02 +0000 (GMT) Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.18.1.12/8.18.1.12) with ESMTP id 644Dxvoi027094; Mon, 4 May 2026 14:00:02 GMT Received: from kstolare-e5-ol8.osdevelopmeniad.oraclevcn.com (kstolare-e5-ol8.allregionaliads.osdevelopmeniad.oraclevcn.com [100.100.254.20]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTP id 4dx5adk954-4; Mon, 04 May 2026 14:00:01 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=corp-2025-04-25; bh=iAIqv wpk94ahFSpRlKvUgQewX7PMm5ZhfDLvN1lniiU=; b=PXMjxPSFDLPlXC5ro7E37 cD6DgG0VjfPjGVUt2iCH7xhTteU40Fxce+oPBec7FHxwvwU4lvmgam6p39Llz/Br 9BGMUVXper3Dtmb9PLb6Ifz48lAm9WpsLfeiOetOhrkjGezSFPKjVdKfAFrz/N7B p9H4lNjwVfOudvJc3tGd73a9hTHwYiRz5FgeekUjVTB85gt3ceGe+uUgV5VMSg6+ X6ud8q1q1M4ORIBOfS5zDlzNYX3fpB6A1/kPEQUC2thHeHrre6sEAJxhM6kgy3lt 3ESvf3Tr2/qJbybKy+lRYgZxBJpZ7zu921REYLG5bplbahGcqw46USfkAhqbkZvy Q== From: Karolina Stolarek To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= , Fam Zheng , Paolo Bonzini , "Michael S . Tsirkin" , "Maciej S . Szmigiero" , Karolina Stolarek Subject: [PATCH 3/5] virtio-scsi: Use errp in virtio_scsi_device_realize Date: Mon, 4 May 2026 13:59:42 +0000 Message-ID: <0de3b571e0e47e83d5c9c9a42bd8521388844361.1777890280.git.karolina.stolarek@oracle.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-04_04,2026-04-30_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 adultscore=0 lowpriorityscore=0 spamscore=0 mlxlogscore=999 mlxscore=0 phishscore=0 malwarescore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2604200000 definitions=main-2605040145 X-Proofpoint-GUID: p2bCUZN-3_WEZFNgwrp9wlwRVTMvaUs8 X-Proofpoint-ORIG-GUID: p2bCUZN-3_WEZFNgwrp9wlwRVTMvaUs8 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTA0MDE0NSBTYWx0ZWRfXzND3BQTAKzhi yKHWej9Mod6wxvg7HB6rDpz35nsccrd2ixSWaIV+KXhCMRJCYVfvyeSJQvJ0b2B78ar0rCs5oFu 1Z3vVWPKEUBUx1mMj05CjnCe6V1XBXPH0EmLPVQiD3zh3SICmiELuhhAVLqpSdR/88Q0duNnZ19 7UCs0RIHnH8igtEaq4Uo3fjrZ6YZy5NXMs2lvGcx0T+rFvyCrKp5W+krZXojws7xFm8AebGBW8c HwAAkQ1dZL5qwKuogELOuFEscAPoxlie3/01H4lLGkLtVxzLRZrGVZkVV8E+4ZnyHw45TzlxNrl TeMVH3u1jHTV9NQwzRXpDsnvKXnQWwNKub/bl3IyzyuIx+773MQB1RXXETXKdiTVnVka/15wEfi j7BQ1HldwT3Yf2Q38L5+en9KriTZ1xeOQR+E7HU+yVuQUfWN/a4S39O4stYIq1MUnoZg7GXAPia DdBvVqeKZX50HQGWa4ggZbb2z6826ruVBbsEnduA= X-Authority-Analysis: v=2.4 cv=Os9/DS/t c=1 sm=1 tr=0 ts=69f8a663 b=1 cx=c_pps a=zPCbziy225d3KhSqZt3L1A==:117 a=zPCbziy225d3KhSqZt3L1A==:17 a=NGcC8JguVDcA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=7Gl3-_t3PgB9XO-mQDs3:22 a=yPCof4ZbAAAA:8 a=TquScrhIGmC-FQZoO0cA:9 cc=ntf awl=host:12306 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.165.32; envelope-from=karolina.stolarek@oracle.com; helo=mx0a-00069f02.pphosted.com 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, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, 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 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 @oracle.com) X-ZM-MESSAGEID: 1777903240593154100 Content-Type: text/plain; charset="utf-8" Move away from using a local Error variable and check errp to decide if the function has to return early. Signed-off-by: Karolina Stolarek --- hw/scsi/virtio-scsi.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c index 8d2811d7fb..f9e4f6fc02 100644 --- a/hw/scsi/virtio-scsi.c +++ b/hw/scsi/virtio-scsi.c @@ -1328,18 +1328,19 @@ static void virtio_scsi_device_realize(DeviceState = *dev, Error **errp) { VirtIODevice *vdev =3D VIRTIO_DEVICE(dev); VirtIOSCSI *s =3D VIRTIO_SCSI(dev); - Error *err =3D NULL; =20 qemu_mutex_init(&s->ctrl_lock); qemu_mutex_init(&s->event_lock); =20 + ERRP_GUARD(); virtio_scsi_common_realize(dev, virtio_scsi_handle_ctrl, virtio_scsi_handle_event, virtio_scsi_handle_cmd, - &err); - if (err !=3D NULL) { - error_propagate(errp, err); + errp); + + if (*errp) { + /* don't initialize the bus, terminate early */ return; } =20 --=20 2.47.1 From nobody Sat May 30 18:34:21 2026 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=reject dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1777903238; cv=none; d=zohomail.com; s=zohoarc; b=K3ArJkqnzH4g1dm69iN5Z8Ug6OCgRZQpzKz1sbEdv+sGBtlFsZskJiG+xHXXVQcBLjBo2tWyFQHsmF5q4ARR40uowiqLjmb3JOEC75sEA0dNXh2g32Q0OW5eqfc+aD+iJukoSlFirBlQs0VVi+c70J+6r/lPkF/kO11YiJ9dmMc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777903238; h=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=bGGjNcVKNnZzZs+y/txProzJd2cjYTgmMc+7C3kNu+c=; b=Hty7NQke19vo8+G9D7Ac5KOaQDN3byHs3viKuvryq2SCbws3u2fr8ywUCVA42979jJ83pojhQDZRzlJyMHrZO/TgcI1jWzjnPoC3iNZa2qg/1bKgFuOH2UTdrQfdbYFwrDNfA20hpr5ysYMi3FCR/ajgQI1xl7yxazUcK1TueS4= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 177790323894428.126438645028202; Mon, 4 May 2026 07:00:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wJtqL-0004zT-PE; Mon, 04 May 2026 10:00:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wJtqF-0004tT-09 for qemu-devel@nongnu.org; Mon, 04 May 2026 10:00:11 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wJtqC-0002K0-Rm for qemu-devel@nongnu.org; Mon, 04 May 2026 10:00:10 -0400 Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6448fdGw2268646; Mon, 4 May 2026 14:00:05 GMT Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4dw9gxjnea-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 04 May 2026 14:00:05 +0000 (GMT) Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 644DuR9i013898; Mon, 4 May 2026 14:00:05 GMT Received: from pps.reinject (localhost [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4dx5adk9cg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 04 May 2026 14:00:05 +0000 (GMT) Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.18.1.12/8.18.1.12) with ESMTP id 644Dxvok027094; Mon, 4 May 2026 14:00:04 GMT Received: from kstolare-e5-ol8.osdevelopmeniad.oraclevcn.com (kstolare-e5-ol8.allregionaliads.osdevelopmeniad.oraclevcn.com [100.100.254.20]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTP id 4dx5adk954-5; Mon, 04 May 2026 14:00:04 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=corp-2025-04-25; bh=bGGjN cVKNnZzZs+y/txProzJd2cjYTgmMc+7C3kNu+c=; b=mxa1jZnHd+HiddriBESO8 eIUNJLMvVB++SkzJY9SEhqypml8MvcqJP1WKpUbKgvSkZ0L1qJhh+JJ0tzGmhqL6 s7/zUvZVzMSjAM/FNFQROjuJgvz530ByFpJjhkNn9TsIdGVvLcLLZaSvl1WdiJz5 GXlSrDM2mGntqeHIPle4Ku2ngCl8i0RxNnC//mMJMlTjlv3wSgyE64QEH/bFMo8y RctjwYzCFjU+0/bXV/7xcABH/+tuwxkYny0sPe5ZR/+MWCmffjPKH5ogIyJ6qcV/ cJ/IfNa9k6VFWKOFsVlw3Wnh57y4Ul5hiWS/OOq65atigk14cTdVaCgShNIDPp0e Q== From: Karolina Stolarek To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= , Fam Zheng , Paolo Bonzini , "Michael S . Tsirkin" , "Maciej S . Szmigiero" , Karolina Stolarek , Stefano Garzarella , Raphael Norwitz Subject: [PATCH 4/5] virtio-scsi: Make max_target parameter configurable Date: Mon, 4 May 2026 13:59:43 +0000 Message-ID: <020004d5e274daf0370094d631d61a452db7d599.1777890280.git.karolina.stolarek@oracle.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-04_04,2026-04-30_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 adultscore=0 lowpriorityscore=0 spamscore=0 mlxlogscore=999 mlxscore=0 phishscore=0 malwarescore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2604200000 definitions=main-2605040145 X-Proofpoint-ORIG-GUID: RAnXQVekqB-GRo-ko0Rdh5Huq3lpIy2o X-Proofpoint-GUID: RAnXQVekqB-GRo-ko0Rdh5Huq3lpIy2o X-Authority-Analysis: v=2.4 cv=Wa48rUhX c=1 sm=1 tr=0 ts=69f8a665 b=1 cx=c_pps a=zPCbziy225d3KhSqZt3L1A==:117 a=zPCbziy225d3KhSqZt3L1A==:17 a=NGcC8JguVDcA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=3I1J8UUJPc9JN9BFgKH3:22 a=20KFwNOVAAAA:8 a=Ikd4Dj_1AAAA:8 a=yPCof4ZbAAAA:8 a=Kyoq6vq9e98cMt6sh_8A:9 cc=ntf awl=host:12306 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTA0MDE0NSBTYWx0ZWRfXx7O/C93D99t9 a+TcgVt+Hvj32vzzMhl24RJyKEgxoYs7sQslEIX4AuMJbDquLnb0nVhtYB8CmX7WbgyngRi7hLj 9mPLyI4eohz/KETYRpr7Ig2q1/9ha+QFos/7q4N9ONZij2fLPvoSESkKLmgQxVyokYkMEjkRQYM SXuZ0sd4KzquRZv+Q0sexoFrY6LIEgi1yVhiE+kX1unNs7KAxAKnMOEuvTJOcAsmrISwfcA7bzc uglLlfklqiK9UNa9FgQr+wGDsEii8MMj4CKy4hIiWTtEbkpwvXLyeSgVXuglOQxz68/k9YD9zqW vO+mN0ez7JnoExzxjXQyAGSRwEPuG3DSjpDg0ed4ZS4yyEG29Dbz+3+OEYs8pMSn8oFQzAY1CLd aEpxv7O+V1+vFKJMivF5W3iyPFxaxGYHbbfPJarJGAfbU9PgNPdHzJhIwfxXM19Z31l03mLb4U4 2RntDE1YRMXc80i7JqdyZJPAz59kPhtrTY9ERgYg= 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=karolina.stolarek@oracle.com; helo=mx0b-00069f02.pphosted.com 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, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, 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 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 @oracle.com) X-ZM-MESSAGEID: 1777903240594154100 Content-Type: text/plain; charset="utf-8" In virtscsi_probe(), virtio-scsi enumerates all possible targets, up to VIRTIO_SCSI_MAX_TARGET, to see which of them are available. During this scan, the initiator queues up INQUIRY commands for targets that do not exist. Provide a "max_target" option for vhost-scsi and virtio-scsi devices to change the upper limit of scanned targets. Move away from a static virtio_scsi_scsi_config definition in favor of a dynamically allocated SCSIBusConfig that is stored by the VirtIOSCSI device. Cc: Stefano Garzarella Cc: Raphael Norwitz Signed-off-by: Karolina Stolarek Reviewed-by: Raphael Norwitz --- hw/scsi/vhost-scsi.c | 2 ++ hw/scsi/vhost-user-scsi.c | 2 ++ hw/scsi/virtio-scsi.c | 37 ++++++++++++++++++++++++--------- include/hw/virtio/virtio-scsi.h | 3 +++ 4 files changed, 34 insertions(+), 10 deletions(-) diff --git a/hw/scsi/vhost-scsi.c b/hw/scsi/vhost-scsi.c index 699863cc10..b2e8240344 100644 --- a/hw/scsi/vhost-scsi.c +++ b/hw/scsi/vhost-scsi.c @@ -352,6 +352,8 @@ static const Property vhost_scsi_properties[] =3D { 128), DEFINE_PROP_BOOL("seg_max_adjust", VirtIOSCSICommon, conf.seg_max_adju= st, true), + DEFINE_PROP_UINT8("max_target", VirtIOSCSICommon, conf.max_target, + VIRTIO_SCSI_MAX_TARGET), DEFINE_PROP_UINT32("max_sectors", VirtIOSCSICommon, conf.max_sectors, 0xFFFF), DEFINE_PROP_UINT32("cmd_per_lun", VirtIOSCSICommon, conf.cmd_per_lun, = 128), diff --git a/hw/scsi/vhost-user-scsi.c b/hw/scsi/vhost-user-scsi.c index 3612897d4b..4e59f06ea2 100644 --- a/hw/scsi/vhost-user-scsi.c +++ b/hw/scsi/vhost-user-scsi.c @@ -352,6 +352,8 @@ static const Property vhost_user_scsi_properties[] =3D { VIRTIO_SCSI_AUTO_NUM_QUEUES), DEFINE_PROP_UINT32("virtqueue_size", VirtIOSCSICommon, conf.virtqueue_= size, 128), + DEFINE_PROP_UINT8("max_target", VirtIOSCSICommon, conf.max_target, + VIRTIO_SCSI_MAX_TARGET), DEFINE_PROP_UINT32("max_sectors", VirtIOSCSICommon, conf.max_sectors, 0xFFFF), DEFINE_PROP_UINT32("cmd_per_lun", VirtIOSCSICommon, conf.cmd_per_lun, = 128), diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c index f9e4f6fc02..4de06bad3d 100644 --- a/hw/scsi/virtio-scsi.c +++ b/hw/scsi/virtio-scsi.c @@ -975,7 +975,7 @@ static void virtio_scsi_get_config(VirtIODevice *vdev, virtio_stl_p(vdev, &scsiconf->sense_size, s->sense_size); virtio_stl_p(vdev, &scsiconf->cdb_size, s->cdb_size); virtio_stw_p(vdev, &scsiconf->max_channel, VIRTIO_SCSI_MAX_CHANNEL); - virtio_stw_p(vdev, &scsiconf->max_target, VIRTIO_SCSI_MAX_TARGET); + virtio_stw_p(vdev, &scsiconf->max_target, s->conf.max_target); virtio_stl_p(vdev, &scsiconf->max_lun, VIRTIO_SCSI_MAX_LUN); } =20 @@ -1264,13 +1264,6 @@ static void virtio_scsi_drained_end(SCSIBus *bus) } } =20 -static struct SCSIBusConfig virtio_scsi_scsi_config =3D { - .tcq =3D true, - .max_channel =3D VIRTIO_SCSI_MAX_CHANNEL, - .max_target =3D VIRTIO_SCSI_MAX_TARGET, - .max_lun =3D VIRTIO_SCSI_MAX_LUN, -}; - static const struct SCSIBusOps virtio_scsi_scsi_ops =3D { .complete =3D virtio_scsi_command_complete, .fail =3D virtio_scsi_command_failed, @@ -1324,6 +1317,23 @@ void virtio_scsi_common_realize(DeviceState *dev, } } =20 +static void virtio_scsi_scsi_config_init(VirtIOSCSI *s) +{ + s->bus_config =3D g_malloc(sizeof(SCSIBusConfig)); + + s->bus_config->tcq =3D true; + s->bus_config->max_channel =3D VIRTIO_SCSI_MAX_CHANNEL; + s->bus_config->max_target =3D s->parent_obj.conf.max_target; + s->bus_config->max_lun =3D VIRTIO_SCSI_MAX_LUN; +} + +static void virtio_scsi_scsi_bus_cleanup(VirtIOSCSI *s) +{ + qbus_set_hotplug_handler(BUS(&s->bus), NULL); + g_free(s->bus_config); + s->bus.config =3D NULL; +} + static void virtio_scsi_device_realize(DeviceState *dev, Error **errp) { VirtIODevice *vdev =3D VIRTIO_DEVICE(dev); @@ -1344,13 +1354,18 @@ static void virtio_scsi_device_realize(DeviceState = *dev, Error **errp) return; } =20 + virtio_scsi_scsi_config_init(s); scsi_bus_init_named(&s->bus, sizeof(s->bus), dev, - &virtio_scsi_scsi_ops, &virtio_scsi_scsi_config, + &virtio_scsi_scsi_ops, s->bus_config, vdev->bus_name); /* override default SCSI bus hotplug-handler, with virtio-scsi's one */ qbus_set_hotplug_handler(BUS(&s->bus), OBJECT(dev)); =20 virtio_scsi_dataplane_setup(s, errp); + + if (*errp) { + virtio_scsi_scsi_bus_cleanup(s); + } } =20 void virtio_scsi_common_unrealize(DeviceState *dev) @@ -1374,7 +1389,7 @@ static void virtio_scsi_device_unrealize(DeviceState = *dev) VirtIOSCSI *s =3D VIRTIO_SCSI(dev); =20 virtio_scsi_dataplane_cleanup(s); - qbus_set_hotplug_handler(BUS(&s->bus), NULL); + virtio_scsi_scsi_bus_cleanup(s); virtio_scsi_common_unrealize(dev); qemu_mutex_destroy(&s->event_lock); qemu_mutex_destroy(&s->ctrl_lock); @@ -1387,6 +1402,8 @@ static const Property virtio_scsi_properties[] =3D { parent_obj.conf.virtqueue_size, 2= 56), DEFINE_PROP_BOOL("seg_max_adjust", VirtIOSCSI, parent_obj.conf.seg_max_adjust, true), + DEFINE_PROP_UINT8("max_target", VirtIOSCSICommon, conf.max_target, + VIRTIO_SCSI_MAX_TARGET), DEFINE_PROP_UINT32("max_sectors", VirtIOSCSI, parent_obj.conf.max_sect= ors, 0xFFFF), DEFINE_PROP_UINT32("cmd_per_lun", VirtIOSCSI, parent_obj.conf.cmd_per_= lun, diff --git a/include/hw/virtio/virtio-scsi.h b/include/hw/virtio/virtio-scs= i.h index b6028bb5cd..b4b796fc58 100644 --- a/include/hw/virtio/virtio-scsi.h +++ b/include/hw/virtio/virtio-scsi.h @@ -54,6 +54,7 @@ struct VirtIOSCSIConf { uint32_t virtqueue_size; bool worker_per_virtqueue; bool seg_max_adjust; + uint8_t max_target; uint32_t max_sectors; uint32_t cmd_per_lun; char *vhostfd; @@ -83,6 +84,8 @@ struct VirtIOSCSI { VirtIOSCSICommon parent_obj; =20 SCSIBus bus; + SCSIBusConfig *bus_config; + int resetting; /* written from main loop thread, read from any thread = */ =20 QemuMutex event_lock; /* protects event_vq and events_dropped */ --=20 2.47.1 From nobody Sat May 30 18:34:21 2026 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=reject dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1777903267; cv=none; d=zohomail.com; s=zohoarc; b=g3pZzYAyzyehkYOEkgD37SPY1yx5lDRvV0iABWi6xloIbEDI8Qlb/4e0YcsufrgP9q/hbtNtMjhzQi1u8oYq1Geck+yQ++90ntRuu7FwX1REdz5awSlwus5T77bWbnlQJlb/J6KC9bvDMQmAKWP3W812yw6qD8pN5xZBEbN0e4g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777903267; h=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=8+jP870k2iuf257VhozDC93Ct0ogT9nFVT9nYM/jyV4=; b=icSXQzrh4ZduGstr4iWhmQPbVFCN6EqJM9l0LBqr2wQQM4q9EFGA6/UWvEy4DOvzEVCht/ae5PMpqMA+gWoYzhr6qrmdHOw1aHRjSxnMtIs/KbTMxlErs/gK22bXwZXMpIf8h6QokvhPxKxgca29vLV2scAMVSJ+dQcIGkaJxtI= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1777903267906968.2009823401313; Mon, 4 May 2026 07:01:07 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wJtqN-00050b-58; Mon, 04 May 2026 10:00:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wJtqF-0004tp-Eq for qemu-devel@nongnu.org; Mon, 04 May 2026 10:00:11 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wJtqD-0002L5-FS for qemu-devel@nongnu.org; Mon, 04 May 2026 10:00:11 -0400 Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6448fU8a2267912; Mon, 4 May 2026 14:00:07 GMT Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4dw9gxjneb-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 04 May 2026 14:00:06 +0000 (GMT) Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 644DuSdi013921; Mon, 4 May 2026 14:00:06 GMT Received: from pps.reinject (localhost [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4dx5adk9et-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 04 May 2026 14:00:06 +0000 (GMT) Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.18.1.12/8.18.1.12) with ESMTP id 644Dxvom027094; Mon, 4 May 2026 14:00:05 GMT Received: from kstolare-e5-ol8.osdevelopmeniad.oraclevcn.com (kstolare-e5-ol8.allregionaliads.osdevelopmeniad.oraclevcn.com [100.100.254.20]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTP id 4dx5adk954-6; Mon, 04 May 2026 14:00:05 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=corp-2025-04-25; bh=8+jP8 70k2iuf257VhozDC93Ct0ogT9nFVT9nYM/jyV4=; b=OAO3BBBs+1n1iRrfc0VwH 6ss4ERHGnNLvyyEeaDrT73foftMGDErSDwDVvAwfLG4gml89dn7gciukDcegr8CY YdBnBwQLfcKF/S1c/OletJGxp3js2rUpi3BzHCE9+SRKMp1/mefS80EGu6UBXjXv 2ZRa8Vm8fX6xZ/kLHvgfYrQ9IqvuuyBeYaGi+TwskQJot9fFQXBT60CfSoL3J9gE FnrEikqjbOZ1Z4EwZNZha/pmGxX8zko1IUpHA8MFbo+TPAgymwYafEiJzd9a9wrz 94t84OgVHKjI3rcSSXksIg0HfzsVcfnl8nOhShiDTdXyF+9xLCt82pF0zYwCZwH9 A== From: Karolina Stolarek To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= , Fam Zheng , Paolo Bonzini , "Michael S . Tsirkin" , "Maciej S . Szmigiero" , Karolina Stolarek , Stefano Garzarella , Raphael Norwitz Subject: [PATCH 5/5] virtio-scsi: Make max_lun parameter configurable Date: Mon, 4 May 2026 13:59:44 +0000 Message-ID: <9d555df8e0e8f84cc516ccce7506f6779fc3e600.1777890280.git.karolina.stolarek@oracle.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-04_04,2026-04-30_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 adultscore=0 lowpriorityscore=0 spamscore=0 mlxlogscore=999 mlxscore=0 phishscore=0 malwarescore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2604200000 definitions=main-2605040145 X-Proofpoint-ORIG-GUID: AizrmXuhkZLipDlpfgjyFerrkS60zHsr X-Proofpoint-GUID: AizrmXuhkZLipDlpfgjyFerrkS60zHsr X-Authority-Analysis: v=2.4 cv=Wa48rUhX c=1 sm=1 tr=0 ts=69f8a666 b=1 cx=c_pps a=zPCbziy225d3KhSqZt3L1A==:117 a=zPCbziy225d3KhSqZt3L1A==:17 a=NGcC8JguVDcA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=3I1J8UUJPc9JN9BFgKH3:22 a=20KFwNOVAAAA:8 a=Ikd4Dj_1AAAA:8 a=yPCof4ZbAAAA:8 a=D97SWcnLPx3_jtXOGE4A:9 cc=ntf awl=host:12306 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTA0MDE0NSBTYWx0ZWRfX9lrLQsAJVQ6m PNDum5gQsrAbPH055ARbf2NrPlrRO2AY5nf689H8v0ENurXjOCBTQ3kDmrZgC2R3aLLzgQ3GyBg WwL5mqmTrD/J9RHvfp99BCgiKLOFi55jlSBhGEvlWz1UBaP5nPfcxbSQSvNw/Q7Eyvk0VocMMjQ RGpqpNt75eJOd9L5LShPbg+a1KwfPHqIuOLY8Q/nh/kquSWk7za1UOoMc9zmzllvndlJaP2Pk9C 7uRzLuCa91n3/bloWVt5Lcy1RJCoIyfwfEw9l726skcDDUnDjwvbhtzlf/gE6ltxSPhB9AbFuh4 z7LqZYWjN9/qc4PzdSn9IacH0J292zGUrmvqsUbXQjcr7tnCbFKgGqvMsLYG6VLkbib+lj3OQFU sH+Vz+Jxcjvxagmrsf0OzW2uFCsOp90shg8JJnK2O7tarKzzWFmP4X+e9vtedsILrRRGSH98fJB ZEB8iDZlAhaJ27hpdDl9MR1LfTBwh53UY2aaQ7Sk= 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=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=karolina.stolarek@oracle.com; helo=mx0b-00069f02.pphosted.com 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, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, 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 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 @oracle.com) X-ZM-MESSAGEID: 1777903270296154100 Content-Type: text/plain; charset="utf-8" The virtio-scsi driver in the guest is able to retrieve the correct number of LUNs by querying REPORT_LUNS. There are some drivers, such as OVMF VirtioScsiDxe, that discover LUNs by queuing INQUIRY commands up to an arbitrary limit. This is an issue for vhost-scsi devices, as each inquiry to a LUN in a target that exists causes "Detected NON_EXISTENT_LUN Access" errors to flood the kernel logs of the hypervisor during VM boot. Add a "max_lun" option to virtio-scsi and vhost-scsi devices to specify the maximum number of LUNs to prevent sending commands to Logical Units that don't exist. Cc: Stefano Garzarella Cc: Raphael Norwitz Signed-off-by: Karolina Stolarek --- hw/scsi/vhost-scsi.c | 2 ++ hw/scsi/vhost-user-scsi.c | 2 ++ hw/scsi/virtio-scsi.c | 6 ++++-- include/hw/virtio/virtio-scsi.h | 1 + 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/hw/scsi/vhost-scsi.c b/hw/scsi/vhost-scsi.c index b2e8240344..568ce02e36 100644 --- a/hw/scsi/vhost-scsi.c +++ b/hw/scsi/vhost-scsi.c @@ -354,6 +354,8 @@ static const Property vhost_scsi_properties[] =3D { true), DEFINE_PROP_UINT8("max_target", VirtIOSCSICommon, conf.max_target, VIRTIO_SCSI_MAX_TARGET), + DEFINE_PROP_UINT32("max_lun", VirtIOSCSICommon, conf.max_lun, + VIRTIO_SCSI_MAX_LUN), DEFINE_PROP_UINT32("max_sectors", VirtIOSCSICommon, conf.max_sectors, 0xFFFF), DEFINE_PROP_UINT32("cmd_per_lun", VirtIOSCSICommon, conf.cmd_per_lun, = 128), diff --git a/hw/scsi/vhost-user-scsi.c b/hw/scsi/vhost-user-scsi.c index 4e59f06ea2..f4c761bf18 100644 --- a/hw/scsi/vhost-user-scsi.c +++ b/hw/scsi/vhost-user-scsi.c @@ -354,6 +354,8 @@ static const Property vhost_user_scsi_properties[] =3D { 128), DEFINE_PROP_UINT8("max_target", VirtIOSCSICommon, conf.max_target, VIRTIO_SCSI_MAX_TARGET), + DEFINE_PROP_UINT32("max_lun", VirtIOSCSICommon, conf.max_lun, + VIRTIO_SCSI_MAX_LUN), DEFINE_PROP_UINT32("max_sectors", VirtIOSCSICommon, conf.max_sectors, 0xFFFF), DEFINE_PROP_UINT32("cmd_per_lun", VirtIOSCSICommon, conf.cmd_per_lun, = 128), diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c index 4de06bad3d..3a10ef2118 100644 --- a/hw/scsi/virtio-scsi.c +++ b/hw/scsi/virtio-scsi.c @@ -976,7 +976,7 @@ static void virtio_scsi_get_config(VirtIODevice *vdev, virtio_stl_p(vdev, &scsiconf->cdb_size, s->cdb_size); virtio_stw_p(vdev, &scsiconf->max_channel, VIRTIO_SCSI_MAX_CHANNEL); virtio_stw_p(vdev, &scsiconf->max_target, s->conf.max_target); - virtio_stl_p(vdev, &scsiconf->max_lun, VIRTIO_SCSI_MAX_LUN); + virtio_stl_p(vdev, &scsiconf->max_lun, s->conf.max_lun); } =20 static void virtio_scsi_set_config(VirtIODevice *vdev, @@ -1324,7 +1324,7 @@ static void virtio_scsi_scsi_config_init(VirtIOSCSI *= s) s->bus_config->tcq =3D true; s->bus_config->max_channel =3D VIRTIO_SCSI_MAX_CHANNEL; s->bus_config->max_target =3D s->parent_obj.conf.max_target; - s->bus_config->max_lun =3D VIRTIO_SCSI_MAX_LUN; + s->bus_config->max_lun =3D s->parent_obj.conf.max_lun; } =20 static void virtio_scsi_scsi_bus_cleanup(VirtIOSCSI *s) @@ -1404,6 +1404,8 @@ static const Property virtio_scsi_properties[] =3D { parent_obj.conf.seg_max_adjust, true), DEFINE_PROP_UINT8("max_target", VirtIOSCSICommon, conf.max_target, VIRTIO_SCSI_MAX_TARGET), + DEFINE_PROP_UINT32("max_lun", VirtIOSCSICommon, conf.max_lun, + VIRTIO_SCSI_MAX_LUN), DEFINE_PROP_UINT32("max_sectors", VirtIOSCSI, parent_obj.conf.max_sect= ors, 0xFFFF), DEFINE_PROP_UINT32("cmd_per_lun", VirtIOSCSI, parent_obj.conf.cmd_per_= lun, diff --git a/include/hw/virtio/virtio-scsi.h b/include/hw/virtio/virtio-scs= i.h index b4b796fc58..9d5b90c3bc 100644 --- a/include/hw/virtio/virtio-scsi.h +++ b/include/hw/virtio/virtio-scsi.h @@ -55,6 +55,7 @@ struct VirtIOSCSIConf { bool worker_per_virtqueue; bool seg_max_adjust; uint8_t max_target; + uint32_t max_lun; uint32_t max_sectors; uint32_t cmd_per_lun; char *vhostfd; --=20 2.47.1