From patchwork Wed Jul 18 15:07:50 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Hajnoczi X-Patchwork-Id: 1211641 Return-Path: X-Original-To: patchwork-kvm@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork1.kernel.org (Postfix) with ESMTP id 8CB4D3FCFC for ; Wed, 18 Jul 2012 15:09:05 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754832Ab2GRPI7 (ORCPT ); Wed, 18 Jul 2012 11:08:59 -0400 Received: from e06smtp16.uk.ibm.com ([195.75.94.112]:60870 "EHLO e06smtp16.uk.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754676Ab2GRPIt (ORCPT ); Wed, 18 Jul 2012 11:08:49 -0400 Received: from /spool/local by e06smtp16.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 18 Jul 2012 16:08:48 +0100 Received: from d06nrmr1407.portsmouth.uk.ibm.com (9.149.38.185) by e06smtp16.uk.ibm.com (192.168.101.146) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Wed, 18 Jul 2012 16:08:45 +0100 Received: from d06av03.portsmouth.uk.ibm.com (d06av03.portsmouth.uk.ibm.com [9.149.37.213]) by d06nrmr1407.portsmouth.uk.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q6IF8ieB2347206 for ; Wed, 18 Jul 2012 16:08:44 +0100 Received: from d06av03.portsmouth.uk.ibm.com (localhost.localdomain [127.0.0.1]) by d06av03.portsmouth.uk.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q6IF8hZc003785 for ; Wed, 18 Jul 2012 09:08:44 -0600 Received: from localhost (sig-9-145-185-169.de.ibm.com [9.145.185.169]) by d06av03.portsmouth.uk.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id q6IF8hKm003775; Wed, 18 Jul 2012 09:08:43 -0600 From: Stefan Hajnoczi To: Cc: , Anthony Liguori , Kevin Wolf , Paolo Bonzini , "Michael S. Tsirkin" , Asias He , Khoa Huynh , Stefan Hajnoczi Subject: [RFC v9 23/27] virtio-blk: Stub out SCSI commands Date: Wed, 18 Jul 2012 16:07:50 +0100 Message-Id: <1342624074-24650-24-git-send-email-stefanha@linux.vnet.ibm.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1342624074-24650-1-git-send-email-stefanha@linux.vnet.ibm.com> References: <1342624074-24650-1-git-send-email-stefanha@linux.vnet.ibm.com> x-cbid: 12071815-3548-0000-0000-00000295E5CD Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Signed-off-by: Stefan Hajnoczi --- hw/virtio-blk.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/hw/virtio-blk.c b/hw/virtio-blk.c index 51807b5..8734029 100644 --- a/hw/virtio-blk.c +++ b/hw/virtio-blk.c @@ -215,14 +215,8 @@ static void process_request(IOQueue *ioq, struct iovec iov[], unsigned int out_n /* TODO Linux sets the barrier bit even when not advertised! */ uint32_t type = outhdr->type & ~VIRTIO_BLK_T_BARRIER; - - if (unlikely(type & ~(VIRTIO_BLK_T_OUT | VIRTIO_BLK_T_FLUSH))) { - fprintf(stderr, "virtio-blk unsupported request type %#x\n", outhdr->type); - exit(1); - } - struct iocb *iocb; - switch (type & (VIRTIO_BLK_T_OUT | VIRTIO_BLK_T_FLUSH)) { + switch (type & (VIRTIO_BLK_T_OUT | VIRTIO_BLK_T_SCSI_CMD | VIRTIO_BLK_T_FLUSH)) { case VIRTIO_BLK_T_IN: if (unlikely(out_num != 1)) { fprintf(stderr, "virtio-blk invalid read request\n"); @@ -239,6 +233,21 @@ static void process_request(IOQueue *ioq, struct iovec iov[], unsigned int out_n iocb = ioq_rdwr(ioq, false, &iov[1], out_num - 1, outhdr->sector * 512UL); /* TODO is it always 512? */ break; + case VIRTIO_BLK_T_SCSI_CMD: + if (unlikely(in_num == 0)) { + fprintf(stderr, "virtio-blk invalid SCSI command request\n"); + exit(1); + } + + /* TODO support SCSI commands */ + { + VirtIOBlock *s = container_of(ioq, VirtIOBlock, ioqueue); + inhdr->status = VIRTIO_BLK_S_UNSUPP; + vring_push(&s->vring, head, sizeof *inhdr); + virtio_blk_notify_guest(s); + } + return; + case VIRTIO_BLK_T_FLUSH: if (unlikely(in_num != 1 || out_num != 1)) { fprintf(stderr, "virtio-blk invalid flush request\n"); @@ -256,7 +265,7 @@ static void process_request(IOQueue *ioq, struct iovec iov[], unsigned int out_n return; default: - fprintf(stderr, "virtio-blk multiple request type bits set\n"); + fprintf(stderr, "virtio-blk unsupported request type %#x\n", outhdr->type); exit(1); }