From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58843) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bmJQv-0005tr-IU for qemu-devel@nongnu.org; Tue, 20 Sep 2016 07:41:54 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bmJQs-0003Iz-Sv for qemu-devel@nongnu.org; Tue, 20 Sep 2016 07:41:53 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:52173 helo=mx0a-001b2d01.pphosted.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bmJQs-0003Ip-Lv for qemu-devel@nongnu.org; Tue, 20 Sep 2016 07:41:50 -0400 Received: from pps.filterd (m0098421.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.17/8.16.0.17) with SMTP id u8KBcrC1066212 for ; Tue, 20 Sep 2016 07:41:50 -0400 Received: from e06smtp11.uk.ibm.com (e06smtp11.uk.ibm.com [195.75.94.107]) by mx0a-001b2d01.pphosted.com with ESMTP id 25jtw27xmc-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Tue, 20 Sep 2016 07:41:50 -0400 Received: from localhost by e06smtp11.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 20 Sep 2016 12:41:47 +0100 Received: from b06cxnps3075.portsmouth.uk.ibm.com (d06relay10.portsmouth.uk.ibm.com [9.149.109.195]) by d06dlp02.portsmouth.uk.ibm.com (Postfix) with ESMTP id 982FE219004D for ; Tue, 20 Sep 2016 12:41:05 +0100 (BST) Received: from d06av11.portsmouth.uk.ibm.com (d06av11.portsmouth.uk.ibm.com [9.149.37.252]) by b06cxnps3075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id u8KBfjbj14811574 for ; Tue, 20 Sep 2016 11:41:45 GMT Received: from d06av11.portsmouth.uk.ibm.com (localhost [127.0.0.1]) by d06av11.portsmouth.uk.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id u8KBfjQQ017452 for ; Tue, 20 Sep 2016 05:41:45 -0600 Date: Tue, 20 Sep 2016 13:41:43 +0200 From: Cornelia Huck In-Reply-To: <1460467534-29147-6-git-send-email-stefanha@redhat.com> References: <1460467534-29147-1-git-send-email-stefanha@redhat.com> <1460467534-29147-6-git-send-email-stefanha@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Message-Id: <20160920134143.2ef0b0a2.cornelia.huck@de.ibm.com> Subject: Re: [Qemu-devel] [PATCH v3 05/10] virtio: handle virtqueue_map_desc() errors List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Stefan Hajnoczi Cc: qemu-devel@nongnu.org, "Michael S. Tsirkin" , Fam Zheng On Tue, 12 Apr 2016 14:25:29 +0100 Stefan Hajnoczi wrote: > Errors can occur during virtqueue_pop(), especially in > virtqueue_map_desc(). In order to handle this we must unmap iov[] > before returning NULL. The caller will consider the virtqueue empty and > the virtio_error() call will have marked the device broken. > > Signed-off-by: Stefan Hajnoczi > --- > hw/virtio/virtio.c | 62 ++++++++++++++++++++++++++++++++++++++++++------------ > 1 file changed, 49 insertions(+), 13 deletions(-) > > +/* Only used by error code paths before we have a VirtQueueElement (therefore > + * virtqueue_unmap_sg() can't be used). Assumes buffers weren't written to > + * yet. > + */ Hm... didn't such an undo function float around in another context as well? Is it worth factoring out? > +static void virtqueue_undo_map_desc(unsigned out_num, unsigned in_num, > + struct iovec *iov) > +{ > + unsigned i; Personally, I don't like pure 'unsigned'. Matter of taste, I guess. > + > + for (i = 0; i < out_num + in_num; i++) { > + int is_write = i >= out_num; > + > + cpu_physical_memory_unmap(iov->iov_base, iov->iov_len, is_write, 0); > + iov++; > + } > } Otherwise, looks good.