From patchwork Wed Apr 26 14:46:41 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Farman X-Patchwork-Id: 9701479 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 64014603F4 for ; Wed, 26 Apr 2017 14:50:29 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 562692811E for ; Wed, 26 Apr 2017 14:50:29 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 492B928178; Wed, 26 Apr 2017 14:50:29 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 3C0372811E for ; Wed, 26 Apr 2017 14:50:28 +0000 (UTC) Received: from localhost ([::1]:55639 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d3OGx-000591-CG for patchwork-qemu-devel@patchwork.kernel.org; Wed, 26 Apr 2017 10:50:27 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:38020) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d3ODf-0003Ob-3T for qemu-devel@nongnu.org; Wed, 26 Apr 2017 10:47:04 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1d3ODa-0002Oa-61 for qemu-devel@nongnu.org; Wed, 26 Apr 2017 10:47:03 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:49099 helo=mx0a-001b2d01.pphosted.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1d3ODa-0002LF-0g for qemu-devel@nongnu.org; Wed, 26 Apr 2017 10:46:58 -0400 Received: from pps.filterd (m0098420.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.20/8.16.0.20) with SMTP id v3QEi9rL094796 for ; Wed, 26 Apr 2017 10:46:54 -0400 Received: from e06smtp13.uk.ibm.com (e06smtp13.uk.ibm.com [195.75.94.109]) by mx0b-001b2d01.pphosted.com with ESMTP id 2a2ebwyu3d-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Wed, 26 Apr 2017 10:46:54 -0400 Received: from localhost by e06smtp13.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 26 Apr 2017 15:46:52 +0100 Received: from b06cxnps4074.portsmouth.uk.ibm.com (9.149.109.196) by e06smtp13.uk.ibm.com (192.168.101.143) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Wed, 26 Apr 2017 15:46:50 +0100 Received: from d06av22.portsmouth.uk.ibm.com (d06av22.portsmouth.uk.ibm.com [9.149.105.58]) by b06cxnps4074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id v3QEkn1738731980; Wed, 26 Apr 2017 14:46:49 GMT Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 3544F4C052; Wed, 26 Apr 2017 15:45:58 +0100 (BST) Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 242804C058; Wed, 26 Apr 2017 15:45:58 +0100 (BST) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.152.85.9]) by d06av22.portsmouth.uk.ibm.com (Postfix) with ESMTPS; Wed, 26 Apr 2017 15:45:58 +0100 (BST) Received: by tuxmaker.boeblingen.de.ibm.com (Postfix, from userid 4958) id 2E83D20F5CF; Wed, 26 Apr 2017 16:46:49 +0200 (CEST) From: Eric Farman To: qemu-devel@nongnu.org Date: Wed, 26 Apr 2017 16:46:41 +0200 X-Mailer: git-send-email 2.10.2 In-Reply-To: <20170426144645.12476-1-farman@linux.vnet.ibm.com> References: <20170426144645.12476-1-farman@linux.vnet.ibm.com> X-TM-AS-GCONF: 00 x-cbid: 17042614-0012-0000-0000-000005181D82 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17042614-0013-0000-0000-00001838340B Message-Id: <20170426144645.12476-2-farman@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2017-04-26_10:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=1 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1703280000 definitions=main-1704260256 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] [fuzzy] X-Received-From: 148.163.158.5 Subject: [Qemu-devel] [RFC PATCH v1 1/5] hw/scsi: Override the max_sectors value for virtio-scsi X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Eric Farman , "Michael S . Tsirkin" , Alexander Graf , Christian Borntraeger , Cornelia Huck , Paolo Bonzini Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP The virtio spec states that the max_sectors field is "a hint to the driver for the maximum transfer size" that would be used for a virtio-scsi request. It's currently hardcoded to xFFFF unless one is established by the max_sectors parameter on the command line, but let's roll through the associated devices and set it to anything lower if one is set for the underlying block device and retrieved by the BLKSECTGET ioctl. Signed-off-by: Eric Farman --- hw/scsi/virtio-scsi.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c index 46a3e3f..bca9461 100644 --- a/hw/scsi/virtio-scsi.c +++ b/hw/scsi/virtio-scsi.c @@ -640,7 +640,11 @@ static void virtio_scsi_get_config(VirtIODevice *vdev, uint8_t *config) { VirtIOSCSIConfig *scsiconf = (VirtIOSCSIConfig *)config; + VirtIOSCSI *vs = VIRTIO_SCSI(vdev); VirtIOSCSICommon *s = VIRTIO_SCSI_COMMON(vdev); + SCSIDevice *d; + BusChild *kid; + unsigned int max_transfer; virtio_stl_p(vdev, &scsiconf->num_queues, s->conf.num_queues); virtio_stl_p(vdev, &scsiconf->seg_max, 128 - 2); @@ -652,6 +656,14 @@ static void virtio_scsi_get_config(VirtIODevice *vdev, virtio_stw_p(vdev, &scsiconf->max_channel, VIRTIO_SCSI_MAX_CHANNEL); virtio_stw_p(vdev, &scsiconf->max_target, VIRTIO_SCSI_MAX_TARGET); virtio_stl_p(vdev, &scsiconf->max_lun, VIRTIO_SCSI_MAX_LUN); + + QTAILQ_FOREACH(kid, &vs->bus.qbus.children, sibling) { + d = SCSI_DEVICE(kid->child); + max_transfer = blk_get_max_transfer(d->conf.blk) / d->blocksize; + virtio_stl_p(vdev, + &scsiconf->max_sectors, + MIN_NON_ZERO(max_transfer, scsiconf->max_sectors)); + } } static void virtio_scsi_set_config(VirtIODevice *vdev,