From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B3290C433EF for ; Wed, 9 Mar 2022 09:22:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231394AbiCIJXH (ORCPT ); Wed, 9 Mar 2022 04:23:07 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34974 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232109AbiCIJXF (ORCPT ); Wed, 9 Mar 2022 04:23:05 -0500 Received: from out30-131.freemail.mail.aliyun.com (out30-131.freemail.mail.aliyun.com [115.124.30.131]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EA4A316E7E5; Wed, 9 Mar 2022 01:22:02 -0800 (PST) X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R761e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=e01e04423;MF=xuanzhuo@linux.alibaba.com;NM=1;PH=DS;RN=33;SR=0;TI=SMTPD_---0V6j1jVj_1646817715; Received: from localhost(mailfrom:xuanzhuo@linux.alibaba.com fp:SMTPD_---0V6j1jVj_1646817715) by smtp.aliyun-inc.com(127.0.0.1); Wed, 09 Mar 2022 17:21:57 +0800 Message-ID: <1646817687.2614713-4-xuanzhuo@linux.alibaba.com> Subject: Re: [PATCH v7 05/26] virtio_ring: split: extract the logic of init vq and attach vring Date: Wed, 9 Mar 2022 17:21:27 +0800 From: Xuan Zhuo To: Jason Wang Cc: Jeff Dike , Richard Weinberger , Anton Ivanov , "Michael S. Tsirkin" , "David S. Miller" , Jakub Kicinski , Hans de Goede , Mark Gross , Vadim Pasternak , Bjorn Andersson , Mathieu Poirier , Cornelia Huck , Halil Pasic , Heiko Carstens , Vasily Gorbik , Christian Borntraeger , Alexander Gordeev , Sven Schnelle , Alexei Starovoitov , Daniel Borkmann , Jesper Dangaard Brouer , John Fastabend , Johannes Berg , Vincent Whitchurch , linux-um@lists.infradead.org, platform-driver-x86@vger.kernel.org, linux-remoteproc@vger.kernel.org, linux-s390@vger.kernel.org, kvm@vger.kernel.org, bpf@vger.kernel.org, virtualization@lists.linux-foundation.org, netdev@vger.kernel.org References: <20220308123518.33800-1-xuanzhuo@linux.alibaba.com> <20220308123518.33800-6-xuanzhuo@linux.alibaba.com> <85dde6ed-cdf1-61e4-6f05-d3e2477b9e35@redhat.com> In-Reply-To: <85dde6ed-cdf1-61e4-6f05-d3e2477b9e35@redhat.com> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-remoteproc@vger.kernel.org On Wed, 9 Mar 2022 15:36:59 +0800, Jason Wang wrote: > > =E5=9C=A8 2022/3/8 =E4=B8=8B=E5=8D=888:34, Xuan Zhuo =E5=86=99=E9=81=93: > > Split the logic of split assignment vq into three parts. > > > > 1. The assignment passed from the function parameter > > 2. The part that attaches vring to vq. -- __vring_virtqueue_attach_spli= t() > > 3. The part that initializes vq to a fixed value -- > > __vring_virtqueue_init_split() > > > > This feature is required for subsequent virtuqueue reset vring > > > > Signed-off-by: Xuan Zhuo > > --- > > drivers/virtio/virtio_ring.c | 111 +++++++++++++++++++++-------------- > > 1 file changed, 67 insertions(+), 44 deletions(-) > > > > diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c > > index d32793615451..dc6313b79305 100644 > > --- a/drivers/virtio/virtio_ring.c > > +++ b/drivers/virtio/virtio_ring.c > > @@ -2196,34 +2196,40 @@ irqreturn_t vring_interrupt(int irq, void *_vq) > > } > > EXPORT_SYMBOL_GPL(vring_interrupt); > > > > -/* Only available for split ring */ > > -struct virtqueue *__vring_new_virtqueue(unsigned int index, > > - struct vring vring, > > - struct virtio_device *vdev, > > - bool weak_barriers, > > - bool context, > > - bool (*notify)(struct virtqueue *), > > - void (*callback)(struct virtqueue *), > > - const char *name) > > +static int __vring_virtqueue_attach_split(struct vring_virtqueue *vq, > > + struct virtio_device *vdev, > > + struct vring vring) > > { > > - struct vring_virtqueue *vq; > > + vq->vq.num_free =3D vring.num; > > > > - if (virtio_has_feature(vdev, VIRTIO_F_RING_PACKED)) > > - return NULL; > > + vq->split.vring =3D vring; > > + vq->split.queue_dma_addr =3D 0; > > + vq->split.queue_size_in_bytes =3D 0; > > > > - vq =3D kmalloc(sizeof(*vq), GFP_KERNEL); > > - if (!vq) > > - return NULL; > > + vq->split.desc_state =3D kmalloc_array(vring.num, > > + sizeof(struct vring_desc_state_split), GFP_KERNEL); > > + if (!vq->split.desc_state) > > + goto err_state; > > > > + vq->split.desc_extra =3D vring_alloc_desc_extra(vq, vring.num); > > + if (!vq->split.desc_extra) > > + goto err_extra; > > > So this contains stuffs more than just attach. I wonder if it's better > to split the allocation out to an dedicated helper (we have dedicated > helper to allocate vring). I will try in next version. Thanks. > > Thanks > > > > + > > + memset(vq->split.desc_state, 0, vring.num * > > + sizeof(struct vring_desc_state_split)); > > + return 0; > > + > > +err_extra: > > + kfree(vq->split.desc_state); > > +err_state: > > + return -ENOMEM; > > +} > > + > > +static void __vring_virtqueue_init_split(struct vring_virtqueue *vq, > > + struct virtio_device *vdev) > > +{ > > vq->packed_ring =3D false; > > - vq->vq.callback =3D callback; > > - vq->vq.vdev =3D vdev; > > - vq->vq.name =3D name; > > - vq->vq.num_free =3D vring.num; > > - vq->vq.index =3D index; > > vq->we_own_ring =3D false; > > - vq->notify =3D notify; > > - vq->weak_barriers =3D weak_barriers; > > vq->broken =3D false; > > vq->last_used_idx =3D 0; > > vq->event_triggered =3D false; > > @@ -2234,50 +2240,67 @@ struct virtqueue *__vring_new_virtqueue(unsigne= d int index, > > vq->last_add_time_valid =3D false; > > #endif > > > > - vq->indirect =3D virtio_has_feature(vdev, VIRTIO_RING_F_INDIRECT_DESC= ) && > > - !context; > > vq->event =3D virtio_has_feature(vdev, VIRTIO_RING_F_EVENT_IDX); > > > > if (virtio_has_feature(vdev, VIRTIO_F_ORDER_PLATFORM)) > > vq->weak_barriers =3D false; > > > > - vq->split.queue_dma_addr =3D 0; > > - vq->split.queue_size_in_bytes =3D 0; > > - > > - vq->split.vring =3D vring; > > vq->split.avail_flags_shadow =3D 0; > > vq->split.avail_idx_shadow =3D 0; > > > > /* No callback? Tell other side not to bother us. */ > > - if (!callback) { > > + if (!vq->vq.callback) { > > vq->split.avail_flags_shadow |=3D VRING_AVAIL_F_NO_INTERRUPT; > > if (!vq->event) > > vq->split.vring.avail->flags =3D cpu_to_virtio16(vdev, > > vq->split.avail_flags_shadow); > > } > > > > - vq->split.desc_state =3D kmalloc_array(vring.num, > > - sizeof(struct vring_desc_state_split), GFP_KERNEL); > > - if (!vq->split.desc_state) > > - goto err_state; > > - > > - vq->split.desc_extra =3D vring_alloc_desc_extra(vq, vring.num); > > - if (!vq->split.desc_extra) > > - goto err_extra; > > - > > /* Put everything in free lists. */ > > vq->free_head =3D 0; > > - memset(vq->split.desc_state, 0, vring.num * > > - sizeof(struct vring_desc_state_split)); > > +} > > + > > +/* Only available for split ring */ > > +struct virtqueue *__vring_new_virtqueue(unsigned int index, > > + struct vring vring, > > + struct virtio_device *vdev, > > + bool weak_barriers, > > + bool context, > > + bool (*notify)(struct virtqueue *), > > + void (*callback)(struct virtqueue *), > > + const char *name) > > +{ > > + struct vring_virtqueue *vq; > > + int err; > > + > > + if (virtio_has_feature(vdev, VIRTIO_F_RING_PACKED)) > > + return NULL; > > + > > + vq =3D kmalloc(sizeof(*vq), GFP_KERNEL); > > + if (!vq) > > + return NULL; > > + > > + vq->vq.callback =3D callback; > > + vq->vq.vdev =3D vdev; > > + vq->vq.name =3D name; > > + vq->vq.index =3D index; > > + vq->notify =3D notify; > > + vq->weak_barriers =3D weak_barriers; > > + vq->indirect =3D virtio_has_feature(vdev, VIRTIO_RING_F_INDIRECT_DESC= ) && > > + !context; > > + > > + err =3D __vring_virtqueue_attach_split(vq, vdev, vring); > > + if (err) > > + goto err; > > + > > + __vring_virtqueue_init_split(vq, vdev); > > > > spin_lock(&vdev->vqs_list_lock); > > list_add_tail(&vq->vq.list, &vdev->vqs); > > spin_unlock(&vdev->vqs_list_lock); > > - return &vq->vq; > > > > -err_extra: > > - kfree(vq->split.desc_state); > > -err_state: > > + return &vq->vq; > > +err: > > kfree(vq); > > return NULL; > > } > From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from smtp4.osuosl.org (smtp4.osuosl.org [140.211.166.137]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 003E4C433F5 for ; Wed, 9 Mar 2022 09:22:08 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id A1C98417D3; Wed, 9 Mar 2022 09:22:08 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id YrnvVIot8_Vb; Wed, 9 Mar 2022 09:22:07 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp4.osuosl.org (Postfix) with ESMTPS id 2195C41684; Wed, 9 Mar 2022 09:22:07 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id EA3AFC0012; Wed, 9 Mar 2022 09:22:06 +0000 (UTC) Received: from smtp2.osuosl.org (smtp2.osuosl.org [IPv6:2605:bc80:3010::133]) by lists.linuxfoundation.org (Postfix) with ESMTP id 2FCBCC000B for ; Wed, 9 Mar 2022 09:22:06 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 0E15D40159 for ; Wed, 9 Mar 2022 09:22:06 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id lZylrXAYexav for ; Wed, 9 Mar 2022 09:22:03 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 Received: from out30-130.freemail.mail.aliyun.com (out30-130.freemail.mail.aliyun.com [115.124.30.130]) by smtp2.osuosl.org (Postfix) with ESMTPS id BCAC64002B for ; Wed, 9 Mar 2022 09:22:02 +0000 (UTC) X-Alimail-AntiSpam: AC=PASS; BC=-1|-1; BR=01201311R761e4; CH=green; DM=||false|; DS=||; FP=0|-1|-1|-1|0|-1|-1|-1; HT=e01e04423; MF=xuanzhuo@linux.alibaba.com; NM=1; PH=DS; RN=33; SR=0; TI=SMTPD_---0V6j1jVj_1646817715; Received: from localhost(mailfrom:xuanzhuo@linux.alibaba.com fp:SMTPD_---0V6j1jVj_1646817715) by smtp.aliyun-inc.com(127.0.0.1); Wed, 09 Mar 2022 17:21:57 +0800 Message-ID: <1646817687.2614713-4-xuanzhuo@linux.alibaba.com> Subject: Re: [PATCH v7 05/26] virtio_ring: split: extract the logic of init vq and attach vring Date: Wed, 9 Mar 2022 17:21:27 +0800 From: Xuan Zhuo To: Jason Wang References: <20220308123518.33800-1-xuanzhuo@linux.alibaba.com> <20220308123518.33800-6-xuanzhuo@linux.alibaba.com> <85dde6ed-cdf1-61e4-6f05-d3e2477b9e35@redhat.com> In-Reply-To: <85dde6ed-cdf1-61e4-6f05-d3e2477b9e35@redhat.com> Cc: Vadim Pasternak , "Michael S. Tsirkin" , linux-remoteproc@vger.kernel.org, Alexei Starovoitov , Bjorn Andersson , Alexander Gordeev , Anton Ivanov , linux-s390@vger.kernel.org, Johannes Berg , Daniel Borkmann , Richard Weinberger , Vincent Whitchurch , John Fastabend , Halil Pasic , Jakub Kicinski , virtualization@lists.linux-foundation.org, Heiko Carstens , Jesper Dangaard Brouer , Vasily Gorbik , Jeff Dike , linux-um@lists.infradead.org, Mark Gross , Hans de Goede , kvm@vger.kernel.org, platform-driver-x86@vger.kernel.org, Mathieu Poirier , netdev@vger.kernel.org, Cornelia Huck , Sven Schnelle , bpf@vger.kernel.org, "David S. Miller" X-BeenThere: virtualization@lists.linux-foundation.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Linux virtualization List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: virtualization-bounces@lists.linux-foundation.org Sender: "Virtualization" T24gV2VkLCA5IE1hciAyMDIyIDE1OjM2OjU5ICswODAwLCBKYXNvbiBXYW5nIDxqYXNvd2FuZ0By ZWRoYXQuY29tPiB3cm90ZToKPgo+IOWcqCAyMDIyLzMvOCDkuIvljYg4OjM0LCBYdWFuIFpodW8g 5YaZ6YGTOgo+ID4gU3BsaXQgdGhlIGxvZ2ljIG9mIHNwbGl0IGFzc2lnbm1lbnQgdnEgaW50byB0 aHJlZSBwYXJ0cy4KPiA+Cj4gPiAxLiBUaGUgYXNzaWdubWVudCBwYXNzZWQgZnJvbSB0aGUgZnVu Y3Rpb24gcGFyYW1ldGVyCj4gPiAyLiBUaGUgcGFydCB0aGF0IGF0dGFjaGVzIHZyaW5nIHRvIHZx LiAtLSBfX3ZyaW5nX3ZpcnRxdWV1ZV9hdHRhY2hfc3BsaXQoKQo+ID4gMy4gVGhlIHBhcnQgdGhh dCBpbml0aWFsaXplcyB2cSB0byBhIGZpeGVkIHZhbHVlIC0tCj4gPiAgICAgX192cmluZ192aXJ0 cXVldWVfaW5pdF9zcGxpdCgpCj4gPgo+ID4gVGhpcyBmZWF0dXJlIGlzIHJlcXVpcmVkIGZvciBz dWJzZXF1ZW50IHZpcnR1cXVldWUgcmVzZXQgdnJpbmcKPiA+Cj4gPiBTaWduZWQtb2ZmLWJ5OiBY dWFuIFpodW8gPHh1YW56aHVvQGxpbnV4LmFsaWJhYmEuY29tPgo+ID4gLS0tCj4gPiAgIGRyaXZl cnMvdmlydGlvL3ZpcnRpb19yaW5nLmMgfCAxMTEgKysrKysrKysrKysrKysrKysrKysrLS0tLS0t LS0tLS0tLS0KPiA+ICAgMSBmaWxlIGNoYW5nZWQsIDY3IGluc2VydGlvbnMoKyksIDQ0IGRlbGV0 aW9ucygtKQo+ID4KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5j IGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYwo+ID4gaW5kZXggZDMyNzkzNjE1NDUxLi5k YzYzMTNiNzkzMDUgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5j Cj4gPiArKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jCj4gPiBAQCAtMjE5NiwzNCAr MjE5Niw0MCBAQCBpcnFyZXR1cm5fdCB2cmluZ19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqX3Zx KQo+ID4gICB9Cj4gPiAgIEVYUE9SVF9TWU1CT0xfR1BMKHZyaW5nX2ludGVycnVwdCk7Cj4gPgo+ ID4gLS8qIE9ubHkgYXZhaWxhYmxlIGZvciBzcGxpdCByaW5nICovCj4gPiAtc3RydWN0IHZpcnRx dWV1ZSAqX192cmluZ19uZXdfdmlydHF1ZXVlKHVuc2lnbmVkIGludCBpbmRleCwKPiA+IC0JCQkJ CXN0cnVjdCB2cmluZyB2cmluZywKPiA+IC0JCQkJCXN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2 LAo+ID4gLQkJCQkJYm9vbCB3ZWFrX2JhcnJpZXJzLAo+ID4gLQkJCQkJYm9vbCBjb250ZXh0LAo+ ID4gLQkJCQkJYm9vbCAoKm5vdGlmeSkoc3RydWN0IHZpcnRxdWV1ZSAqKSwKPiA+IC0JCQkJCXZv aWQgKCpjYWxsYmFjaykoc3RydWN0IHZpcnRxdWV1ZSAqKSwKPiA+IC0JCQkJCWNvbnN0IGNoYXIg Km5hbWUpCj4gPiArc3RhdGljIGludCBfX3ZyaW5nX3ZpcnRxdWV1ZV9hdHRhY2hfc3BsaXQoc3Ry dWN0IHZyaW5nX3ZpcnRxdWV1ZSAqdnEsCj4gPiArCQkJCQkgIHN0cnVjdCB2aXJ0aW9fZGV2aWNl ICp2ZGV2LAo+ID4gKwkJCQkJICBzdHJ1Y3QgdnJpbmcgdnJpbmcpCj4gPiAgIHsKPiA+IC0Jc3Ry dWN0IHZyaW5nX3ZpcnRxdWV1ZSAqdnE7Cj4gPiArCXZxLT52cS5udW1fZnJlZSA9IHZyaW5nLm51 bTsKPiA+Cj4gPiAtCWlmICh2aXJ0aW9faGFzX2ZlYXR1cmUodmRldiwgVklSVElPX0ZfUklOR19Q QUNLRUQpKQo+ID4gLQkJcmV0dXJuIE5VTEw7Cj4gPiArCXZxLT5zcGxpdC52cmluZyA9IHZyaW5n Owo+ID4gKwl2cS0+c3BsaXQucXVldWVfZG1hX2FkZHIgPSAwOwo+ID4gKwl2cS0+c3BsaXQucXVl dWVfc2l6ZV9pbl9ieXRlcyA9IDA7Cj4gPgo+ID4gLQl2cSA9IGttYWxsb2Moc2l6ZW9mKCp2cSks IEdGUF9LRVJORUwpOwo+ID4gLQlpZiAoIXZxKQo+ID4gLQkJcmV0dXJuIE5VTEw7Cj4gPiArCXZx LT5zcGxpdC5kZXNjX3N0YXRlID0ga21hbGxvY19hcnJheSh2cmluZy5udW0sCj4gPiArCQkJCQkg ICAgIHNpemVvZihzdHJ1Y3QgdnJpbmdfZGVzY19zdGF0ZV9zcGxpdCksIEdGUF9LRVJORUwpOwo+ ID4gKwlpZiAoIXZxLT5zcGxpdC5kZXNjX3N0YXRlKQo+ID4gKwkJZ290byBlcnJfc3RhdGU7Cj4g Pgo+ID4gKwl2cS0+c3BsaXQuZGVzY19leHRyYSA9IHZyaW5nX2FsbG9jX2Rlc2NfZXh0cmEodnEs IHZyaW5nLm51bSk7Cj4gPiArCWlmICghdnEtPnNwbGl0LmRlc2NfZXh0cmEpCj4gPiArCQlnb3Rv IGVycl9leHRyYTsKPgo+Cj4gU28gdGhpcyBjb250YWlucyBzdHVmZnMgbW9yZSB0aGFuIGp1c3Qg YXR0YWNoLiBJIHdvbmRlciBpZiBpdCdzIGJldHRlcgo+IHRvIHNwbGl0IHRoZSBhbGxvY2F0aW9u IG91dCB0byBhbiBkZWRpY2F0ZWQgaGVscGVyICh3ZSBoYXZlIGRlZGljYXRlZAo+IGhlbHBlciB0 byBhbGxvY2F0ZSB2cmluZykuCgpJIHdpbGwgdHJ5IGluIG5leHQgdmVyc2lvbi4KClRoYW5rcy4K Cj4KPiBUaGFua3MKPgo+Cj4gPiArCj4gPiArCW1lbXNldCh2cS0+c3BsaXQuZGVzY19zdGF0ZSwg MCwgdnJpbmcubnVtICoKPiA+ICsJICAgICAgIHNpemVvZihzdHJ1Y3QgdnJpbmdfZGVzY19zdGF0 ZV9zcGxpdCkpOwo+ID4gKwlyZXR1cm4gMDsKPiA+ICsKPiA+ICtlcnJfZXh0cmE6Cj4gPiArCWtm cmVlKHZxLT5zcGxpdC5kZXNjX3N0YXRlKTsKPiA+ICtlcnJfc3RhdGU6Cj4gPiArCXJldHVybiAt RU5PTUVNOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBfX3ZyaW5nX3ZpcnRxdWV1ZV9p bml0X3NwbGl0KHN0cnVjdCB2cmluZ192aXJ0cXVldWUgKnZxLAo+ID4gKwkJCQkJIHN0cnVjdCB2 aXJ0aW9fZGV2aWNlICp2ZGV2KQo+ID4gK3sKPiA+ICAgCXZxLT5wYWNrZWRfcmluZyA9IGZhbHNl Owo+ID4gLQl2cS0+dnEuY2FsbGJhY2sgPSBjYWxsYmFjazsKPiA+IC0JdnEtPnZxLnZkZXYgPSB2 ZGV2Owo+ID4gLQl2cS0+dnEubmFtZSA9IG5hbWU7Cj4gPiAtCXZxLT52cS5udW1fZnJlZSA9IHZy aW5nLm51bTsKPiA+IC0JdnEtPnZxLmluZGV4ID0gaW5kZXg7Cj4gPiAgIAl2cS0+d2Vfb3duX3Jp bmcgPSBmYWxzZTsKPiA+IC0JdnEtPm5vdGlmeSA9IG5vdGlmeTsKPiA+IC0JdnEtPndlYWtfYmFy cmllcnMgPSB3ZWFrX2JhcnJpZXJzOwo+ID4gICAJdnEtPmJyb2tlbiA9IGZhbHNlOwo+ID4gICAJ dnEtPmxhc3RfdXNlZF9pZHggPSAwOwo+ID4gICAJdnEtPmV2ZW50X3RyaWdnZXJlZCA9IGZhbHNl Owo+ID4gQEAgLTIyMzQsNTAgKzIyNDAsNjcgQEAgc3RydWN0IHZpcnRxdWV1ZSAqX192cmluZ19u ZXdfdmlydHF1ZXVlKHVuc2lnbmVkIGludCBpbmRleCwKPiA+ICAgCXZxLT5sYXN0X2FkZF90aW1l X3ZhbGlkID0gZmFsc2U7Cj4gPiAgICNlbmRpZgo+ID4KPiA+IC0JdnEtPmluZGlyZWN0ID0gdmly dGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19SSU5HX0ZfSU5ESVJFQ1RfREVTQykgJiYKPiA+ IC0JCSFjb250ZXh0Owo+ID4gICAJdnEtPmV2ZW50ID0gdmlydGlvX2hhc19mZWF0dXJlKHZkZXYs IFZJUlRJT19SSU5HX0ZfRVZFTlRfSURYKTsKPiA+Cj4gPiAgIAlpZiAodmlydGlvX2hhc19mZWF0 dXJlKHZkZXYsIFZJUlRJT19GX09SREVSX1BMQVRGT1JNKSkKPiA+ICAgCQl2cS0+d2Vha19iYXJy aWVycyA9IGZhbHNlOwo+ID4KPiA+IC0JdnEtPnNwbGl0LnF1ZXVlX2RtYV9hZGRyID0gMDsKPiA+ IC0JdnEtPnNwbGl0LnF1ZXVlX3NpemVfaW5fYnl0ZXMgPSAwOwo+ID4gLQo+ID4gLQl2cS0+c3Bs aXQudnJpbmcgPSB2cmluZzsKPiA+ICAgCXZxLT5zcGxpdC5hdmFpbF9mbGFnc19zaGFkb3cgPSAw Owo+ID4gICAJdnEtPnNwbGl0LmF2YWlsX2lkeF9zaGFkb3cgPSAwOwo+ID4KPiA+ICAgCS8qIE5v IGNhbGxiYWNrPyAgVGVsbCBvdGhlciBzaWRlIG5vdCB0byBib3RoZXIgdXMuICovCj4gPiAtCWlm ICghY2FsbGJhY2spIHsKPiA+ICsJaWYgKCF2cS0+dnEuY2FsbGJhY2spIHsKPiA+ICAgCQl2cS0+ c3BsaXQuYXZhaWxfZmxhZ3Nfc2hhZG93IHw9IFZSSU5HX0FWQUlMX0ZfTk9fSU5URVJSVVBUOwo+ ID4gICAJCWlmICghdnEtPmV2ZW50KQo+ID4gICAJCQl2cS0+c3BsaXQudnJpbmcuYXZhaWwtPmZs YWdzID0gY3B1X3RvX3ZpcnRpbzE2KHZkZXYsCj4gPiAgIAkJCQkJdnEtPnNwbGl0LmF2YWlsX2Zs YWdzX3NoYWRvdyk7Cj4gPiAgIAl9Cj4gPgo+ID4gLQl2cS0+c3BsaXQuZGVzY19zdGF0ZSA9IGtt YWxsb2NfYXJyYXkodnJpbmcubnVtLAo+ID4gLQkJCXNpemVvZihzdHJ1Y3QgdnJpbmdfZGVzY19z dGF0ZV9zcGxpdCksIEdGUF9LRVJORUwpOwo+ID4gLQlpZiAoIXZxLT5zcGxpdC5kZXNjX3N0YXRl KQo+ID4gLQkJZ290byBlcnJfc3RhdGU7Cj4gPiAtCj4gPiAtCXZxLT5zcGxpdC5kZXNjX2V4dHJh ID0gdnJpbmdfYWxsb2NfZGVzY19leHRyYSh2cSwgdnJpbmcubnVtKTsKPiA+IC0JaWYgKCF2cS0+ c3BsaXQuZGVzY19leHRyYSkKPiA+IC0JCWdvdG8gZXJyX2V4dHJhOwo+ID4gLQo+ID4gICAJLyog UHV0IGV2ZXJ5dGhpbmcgaW4gZnJlZSBsaXN0cy4gKi8KPiA+ICAgCXZxLT5mcmVlX2hlYWQgPSAw Owo+ID4gLQltZW1zZXQodnEtPnNwbGl0LmRlc2Nfc3RhdGUsIDAsIHZyaW5nLm51bSAqCj4gPiAt CQkJc2l6ZW9mKHN0cnVjdCB2cmluZ19kZXNjX3N0YXRlX3NwbGl0KSk7Cj4gPiArfQo+ID4gKwo+ ID4gKy8qIE9ubHkgYXZhaWxhYmxlIGZvciBzcGxpdCByaW5nICovCj4gPiArc3RydWN0IHZpcnRx dWV1ZSAqX192cmluZ19uZXdfdmlydHF1ZXVlKHVuc2lnbmVkIGludCBpbmRleCwKPiA+ICsJCQkJ CXN0cnVjdCB2cmluZyB2cmluZywKPiA+ICsJCQkJCXN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2 LAo+ID4gKwkJCQkJYm9vbCB3ZWFrX2JhcnJpZXJzLAo+ID4gKwkJCQkJYm9vbCBjb250ZXh0LAo+ ID4gKwkJCQkJYm9vbCAoKm5vdGlmeSkoc3RydWN0IHZpcnRxdWV1ZSAqKSwKPiA+ICsJCQkJCXZv aWQgKCpjYWxsYmFjaykoc3RydWN0IHZpcnRxdWV1ZSAqKSwKPiA+ICsJCQkJCWNvbnN0IGNoYXIg Km5hbWUpCj4gPiArewo+ID4gKwlzdHJ1Y3QgdnJpbmdfdmlydHF1ZXVlICp2cTsKPiA+ICsJaW50 IGVycjsKPiA+ICsKPiA+ICsJaWYgKHZpcnRpb19oYXNfZmVhdHVyZSh2ZGV2LCBWSVJUSU9fRl9S SU5HX1BBQ0tFRCkpCj4gPiArCQlyZXR1cm4gTlVMTDsKPiA+ICsKPiA+ICsJdnEgPSBrbWFsbG9j KHNpemVvZigqdnEpLCBHRlBfS0VSTkVMKTsKPiA+ICsJaWYgKCF2cSkKPiA+ICsJCXJldHVybiBO VUxMOwo+ID4gKwo+ID4gKwl2cS0+dnEuY2FsbGJhY2sgPSBjYWxsYmFjazsKPiA+ICsJdnEtPnZx LnZkZXYgPSB2ZGV2Owo+ID4gKwl2cS0+dnEubmFtZSA9IG5hbWU7Cj4gPiArCXZxLT52cS5pbmRl eCA9IGluZGV4Owo+ID4gKwl2cS0+bm90aWZ5ID0gbm90aWZ5Owo+ID4gKwl2cS0+d2Vha19iYXJy aWVycyA9IHdlYWtfYmFycmllcnM7Cj4gPiArCXZxLT5pbmRpcmVjdCA9IHZpcnRpb19oYXNfZmVh dHVyZSh2ZGV2LCBWSVJUSU9fUklOR19GX0lORElSRUNUX0RFU0MpICYmCj4gPiArCQkhY29udGV4 dDsKPiA+ICsKPiA+ICsJZXJyID0gX192cmluZ192aXJ0cXVldWVfYXR0YWNoX3NwbGl0KHZxLCB2 ZGV2LCB2cmluZyk7Cj4gPiArCWlmIChlcnIpCj4gPiArCQlnb3RvIGVycjsKPiA+ICsKPiA+ICsJ X192cmluZ192aXJ0cXVldWVfaW5pdF9zcGxpdCh2cSwgdmRldik7Cj4gPgo+ID4gICAJc3Bpbl9s b2NrKCZ2ZGV2LT52cXNfbGlzdF9sb2NrKTsKPiA+ICAgCWxpc3RfYWRkX3RhaWwoJnZxLT52cS5s aXN0LCAmdmRldi0+dnFzKTsKPiA+ICAgCXNwaW5fdW5sb2NrKCZ2ZGV2LT52cXNfbGlzdF9sb2Nr KTsKPiA+IC0JcmV0dXJuICZ2cS0+dnE7Cj4gPgo+ID4gLWVycl9leHRyYToKPiA+IC0Ja2ZyZWUo dnEtPnNwbGl0LmRlc2Nfc3RhdGUpOwo+ID4gLWVycl9zdGF0ZToKPiA+ICsJcmV0dXJuICZ2cS0+ dnE7Cj4gPiArZXJyOgo+ID4gICAJa2ZyZWUodnEpOwo+ID4gICAJcmV0dXJuIE5VTEw7Cj4gPiAg IH0KPgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpWaXJ0 dWFsaXphdGlvbiBtYWlsaW5nIGxpc3QKVmlydHVhbGl6YXRpb25AbGlzdHMubGludXgtZm91bmRh dGlvbi5vcmcKaHR0cHM6Ly9saXN0cy5saW51eGZvdW5kYXRpb24ub3JnL21haWxtYW4vbGlzdGlu Zm8vdmlydHVhbGl6YXRpb24= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from out30-43.freemail.mail.aliyun.com ([115.124.30.43]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nRsWA-007tpH-Rl for linux-um@lists.infradead.org; Wed, 09 Mar 2022 09:22:04 +0000 Message-ID: <1646817687.2614713-4-xuanzhuo@linux.alibaba.com> Subject: Re: [PATCH v7 05/26] virtio_ring: split: extract the logic of init vq and attach vring Date: Wed, 9 Mar 2022 17:21:27 +0800 From: Xuan Zhuo References: <20220308123518.33800-1-xuanzhuo@linux.alibaba.com> <20220308123518.33800-6-xuanzhuo@linux.alibaba.com> <85dde6ed-cdf1-61e4-6f05-d3e2477b9e35@redhat.com> In-Reply-To: <85dde6ed-cdf1-61e4-6f05-d3e2477b9e35@redhat.com> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-um" Errors-To: linux-um-bounces+geert=linux-m68k.org@lists.infradead.org To: Jason Wang Cc: Jeff Dike , Richard Weinberger , Anton Ivanov , "Michael S. Tsirkin" , "David S. Miller" , Jakub Kicinski , Hans de Goede , Mark Gross , Vadim Pasternak , Bjorn Andersson , Mathieu Poirier , Cornelia Huck , Halil Pasic , Heiko Carstens , Vasily Gorbik , Christian Borntraeger , Alexander Gordeev , Sven Schnelle , Alexei Starovoitov , Daniel Borkmann , Jesper Dangaard Brouer , John Fastabend , Johannes Berg , Vincent Whitchurch , linux-um@lists.infradead.org, platform-driver-x86@vger.kernel.org, linux-remoteproc@vger.kernel.org, linux-s390@vger.kernel.org, kvm@vger.kernel.org, bpf@vger.kernel.org, virtualization@lists.linux-foundation.org, netdev@vger.kernel.org T24gV2VkLCA5IE1hciAyMDIyIDE1OjM2OjU5ICswODAwLCBKYXNvbiBXYW5nIDxqYXNvd2FuZ0By ZWRoYXQuY29tPiB3cm90ZToKPgo+IOWcqCAyMDIyLzMvOCDkuIvljYg4OjM0LCBYdWFuIFpodW8g 5YaZ6YGTOgo+ID4gU3BsaXQgdGhlIGxvZ2ljIG9mIHNwbGl0IGFzc2lnbm1lbnQgdnEgaW50byB0 aHJlZSBwYXJ0cy4KPiA+Cj4gPiAxLiBUaGUgYXNzaWdubWVudCBwYXNzZWQgZnJvbSB0aGUgZnVu Y3Rpb24gcGFyYW1ldGVyCj4gPiAyLiBUaGUgcGFydCB0aGF0IGF0dGFjaGVzIHZyaW5nIHRvIHZx LiAtLSBfX3ZyaW5nX3ZpcnRxdWV1ZV9hdHRhY2hfc3BsaXQoKQo+ID4gMy4gVGhlIHBhcnQgdGhh dCBpbml0aWFsaXplcyB2cSB0byBhIGZpeGVkIHZhbHVlIC0tCj4gPiAgICAgX192cmluZ192aXJ0 cXVldWVfaW5pdF9zcGxpdCgpCj4gPgo+ID4gVGhpcyBmZWF0dXJlIGlzIHJlcXVpcmVkIGZvciBz dWJzZXF1ZW50IHZpcnR1cXVldWUgcmVzZXQgdnJpbmcKPiA+Cj4gPiBTaWduZWQtb2ZmLWJ5OiBY dWFuIFpodW8gPHh1YW56aHVvQGxpbnV4LmFsaWJhYmEuY29tPgo+ID4gLS0tCj4gPiAgIGRyaXZl cnMvdmlydGlvL3ZpcnRpb19yaW5nLmMgfCAxMTEgKysrKysrKysrKysrKysrKysrKysrLS0tLS0t LS0tLS0tLS0KPiA+ICAgMSBmaWxlIGNoYW5nZWQsIDY3IGluc2VydGlvbnMoKyksIDQ0IGRlbGV0 aW9ucygtKQo+ID4KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5j IGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYwo+ID4gaW5kZXggZDMyNzkzNjE1NDUxLi5k YzYzMTNiNzkzMDUgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5j Cj4gPiArKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jCj4gPiBAQCAtMjE5NiwzNCAr MjE5Niw0MCBAQCBpcnFyZXR1cm5fdCB2cmluZ19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqX3Zx KQo+ID4gICB9Cj4gPiAgIEVYUE9SVF9TWU1CT0xfR1BMKHZyaW5nX2ludGVycnVwdCk7Cj4gPgo+ ID4gLS8qIE9ubHkgYXZhaWxhYmxlIGZvciBzcGxpdCByaW5nICovCj4gPiAtc3RydWN0IHZpcnRx dWV1ZSAqX192cmluZ19uZXdfdmlydHF1ZXVlKHVuc2lnbmVkIGludCBpbmRleCwKPiA+IC0JCQkJ CXN0cnVjdCB2cmluZyB2cmluZywKPiA+IC0JCQkJCXN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2 LAo+ID4gLQkJCQkJYm9vbCB3ZWFrX2JhcnJpZXJzLAo+ID4gLQkJCQkJYm9vbCBjb250ZXh0LAo+ ID4gLQkJCQkJYm9vbCAoKm5vdGlmeSkoc3RydWN0IHZpcnRxdWV1ZSAqKSwKPiA+IC0JCQkJCXZv aWQgKCpjYWxsYmFjaykoc3RydWN0IHZpcnRxdWV1ZSAqKSwKPiA+IC0JCQkJCWNvbnN0IGNoYXIg Km5hbWUpCj4gPiArc3RhdGljIGludCBfX3ZyaW5nX3ZpcnRxdWV1ZV9hdHRhY2hfc3BsaXQoc3Ry dWN0IHZyaW5nX3ZpcnRxdWV1ZSAqdnEsCj4gPiArCQkJCQkgIHN0cnVjdCB2aXJ0aW9fZGV2aWNl ICp2ZGV2LAo+ID4gKwkJCQkJICBzdHJ1Y3QgdnJpbmcgdnJpbmcpCj4gPiAgIHsKPiA+IC0Jc3Ry dWN0IHZyaW5nX3ZpcnRxdWV1ZSAqdnE7Cj4gPiArCXZxLT52cS5udW1fZnJlZSA9IHZyaW5nLm51 bTsKPiA+Cj4gPiAtCWlmICh2aXJ0aW9faGFzX2ZlYXR1cmUodmRldiwgVklSVElPX0ZfUklOR19Q QUNLRUQpKQo+ID4gLQkJcmV0dXJuIE5VTEw7Cj4gPiArCXZxLT5zcGxpdC52cmluZyA9IHZyaW5n Owo+ID4gKwl2cS0+c3BsaXQucXVldWVfZG1hX2FkZHIgPSAwOwo+ID4gKwl2cS0+c3BsaXQucXVl dWVfc2l6ZV9pbl9ieXRlcyA9IDA7Cj4gPgo+ID4gLQl2cSA9IGttYWxsb2Moc2l6ZW9mKCp2cSks IEdGUF9LRVJORUwpOwo+ID4gLQlpZiAoIXZxKQo+ID4gLQkJcmV0dXJuIE5VTEw7Cj4gPiArCXZx LT5zcGxpdC5kZXNjX3N0YXRlID0ga21hbGxvY19hcnJheSh2cmluZy5udW0sCj4gPiArCQkJCQkg ICAgIHNpemVvZihzdHJ1Y3QgdnJpbmdfZGVzY19zdGF0ZV9zcGxpdCksIEdGUF9LRVJORUwpOwo+ ID4gKwlpZiAoIXZxLT5zcGxpdC5kZXNjX3N0YXRlKQo+ID4gKwkJZ290byBlcnJfc3RhdGU7Cj4g Pgo+ID4gKwl2cS0+c3BsaXQuZGVzY19leHRyYSA9IHZyaW5nX2FsbG9jX2Rlc2NfZXh0cmEodnEs IHZyaW5nLm51bSk7Cj4gPiArCWlmICghdnEtPnNwbGl0LmRlc2NfZXh0cmEpCj4gPiArCQlnb3Rv IGVycl9leHRyYTsKPgo+Cj4gU28gdGhpcyBjb250YWlucyBzdHVmZnMgbW9yZSB0aGFuIGp1c3Qg YXR0YWNoLiBJIHdvbmRlciBpZiBpdCdzIGJldHRlcgo+IHRvIHNwbGl0IHRoZSBhbGxvY2F0aW9u IG91dCB0byBhbiBkZWRpY2F0ZWQgaGVscGVyICh3ZSBoYXZlIGRlZGljYXRlZAo+IGhlbHBlciB0 byBhbGxvY2F0ZSB2cmluZykuCgpJIHdpbGwgdHJ5IGluIG5leHQgdmVyc2lvbi4KClRoYW5rcy4K Cj4KPiBUaGFua3MKPgo+Cj4gPiArCj4gPiArCW1lbXNldCh2cS0+c3BsaXQuZGVzY19zdGF0ZSwg MCwgdnJpbmcubnVtICoKPiA+ICsJICAgICAgIHNpemVvZihzdHJ1Y3QgdnJpbmdfZGVzY19zdGF0 ZV9zcGxpdCkpOwo+ID4gKwlyZXR1cm4gMDsKPiA+ICsKPiA+ICtlcnJfZXh0cmE6Cj4gPiArCWtm cmVlKHZxLT5zcGxpdC5kZXNjX3N0YXRlKTsKPiA+ICtlcnJfc3RhdGU6Cj4gPiArCXJldHVybiAt RU5PTUVNOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBfX3ZyaW5nX3ZpcnRxdWV1ZV9p bml0X3NwbGl0KHN0cnVjdCB2cmluZ192aXJ0cXVldWUgKnZxLAo+ID4gKwkJCQkJIHN0cnVjdCB2 aXJ0aW9fZGV2aWNlICp2ZGV2KQo+ID4gK3sKPiA+ICAgCXZxLT5wYWNrZWRfcmluZyA9IGZhbHNl Owo+ID4gLQl2cS0+dnEuY2FsbGJhY2sgPSBjYWxsYmFjazsKPiA+IC0JdnEtPnZxLnZkZXYgPSB2 ZGV2Owo+ID4gLQl2cS0+dnEubmFtZSA9IG5hbWU7Cj4gPiAtCXZxLT52cS5udW1fZnJlZSA9IHZy aW5nLm51bTsKPiA+IC0JdnEtPnZxLmluZGV4ID0gaW5kZXg7Cj4gPiAgIAl2cS0+d2Vfb3duX3Jp bmcgPSBmYWxzZTsKPiA+IC0JdnEtPm5vdGlmeSA9IG5vdGlmeTsKPiA+IC0JdnEtPndlYWtfYmFy cmllcnMgPSB3ZWFrX2JhcnJpZXJzOwo+ID4gICAJdnEtPmJyb2tlbiA9IGZhbHNlOwo+ID4gICAJ dnEtPmxhc3RfdXNlZF9pZHggPSAwOwo+ID4gICAJdnEtPmV2ZW50X3RyaWdnZXJlZCA9IGZhbHNl Owo+ID4gQEAgLTIyMzQsNTAgKzIyNDAsNjcgQEAgc3RydWN0IHZpcnRxdWV1ZSAqX192cmluZ19u ZXdfdmlydHF1ZXVlKHVuc2lnbmVkIGludCBpbmRleCwKPiA+ICAgCXZxLT5sYXN0X2FkZF90aW1l X3ZhbGlkID0gZmFsc2U7Cj4gPiAgICNlbmRpZgo+ID4KPiA+IC0JdnEtPmluZGlyZWN0ID0gdmly dGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19SSU5HX0ZfSU5ESVJFQ1RfREVTQykgJiYKPiA+ IC0JCSFjb250ZXh0Owo+ID4gICAJdnEtPmV2ZW50ID0gdmlydGlvX2hhc19mZWF0dXJlKHZkZXYs IFZJUlRJT19SSU5HX0ZfRVZFTlRfSURYKTsKPiA+Cj4gPiAgIAlpZiAodmlydGlvX2hhc19mZWF0 dXJlKHZkZXYsIFZJUlRJT19GX09SREVSX1BMQVRGT1JNKSkKPiA+ICAgCQl2cS0+d2Vha19iYXJy aWVycyA9IGZhbHNlOwo+ID4KPiA+IC0JdnEtPnNwbGl0LnF1ZXVlX2RtYV9hZGRyID0gMDsKPiA+ IC0JdnEtPnNwbGl0LnF1ZXVlX3NpemVfaW5fYnl0ZXMgPSAwOwo+ID4gLQo+ID4gLQl2cS0+c3Bs aXQudnJpbmcgPSB2cmluZzsKPiA+ICAgCXZxLT5zcGxpdC5hdmFpbF9mbGFnc19zaGFkb3cgPSAw Owo+ID4gICAJdnEtPnNwbGl0LmF2YWlsX2lkeF9zaGFkb3cgPSAwOwo+ID4KPiA+ICAgCS8qIE5v IGNhbGxiYWNrPyAgVGVsbCBvdGhlciBzaWRlIG5vdCB0byBib3RoZXIgdXMuICovCj4gPiAtCWlm ICghY2FsbGJhY2spIHsKPiA+ICsJaWYgKCF2cS0+dnEuY2FsbGJhY2spIHsKPiA+ICAgCQl2cS0+ c3BsaXQuYXZhaWxfZmxhZ3Nfc2hhZG93IHw9IFZSSU5HX0FWQUlMX0ZfTk9fSU5URVJSVVBUOwo+ ID4gICAJCWlmICghdnEtPmV2ZW50KQo+ID4gICAJCQl2cS0+c3BsaXQudnJpbmcuYXZhaWwtPmZs YWdzID0gY3B1X3RvX3ZpcnRpbzE2KHZkZXYsCj4gPiAgIAkJCQkJdnEtPnNwbGl0LmF2YWlsX2Zs YWdzX3NoYWRvdyk7Cj4gPiAgIAl9Cj4gPgo+ID4gLQl2cS0+c3BsaXQuZGVzY19zdGF0ZSA9IGtt YWxsb2NfYXJyYXkodnJpbmcubnVtLAo+ID4gLQkJCXNpemVvZihzdHJ1Y3QgdnJpbmdfZGVzY19z dGF0ZV9zcGxpdCksIEdGUF9LRVJORUwpOwo+ID4gLQlpZiAoIXZxLT5zcGxpdC5kZXNjX3N0YXRl KQo+ID4gLQkJZ290byBlcnJfc3RhdGU7Cj4gPiAtCj4gPiAtCXZxLT5zcGxpdC5kZXNjX2V4dHJh ID0gdnJpbmdfYWxsb2NfZGVzY19leHRyYSh2cSwgdnJpbmcubnVtKTsKPiA+IC0JaWYgKCF2cS0+ c3BsaXQuZGVzY19leHRyYSkKPiA+IC0JCWdvdG8gZXJyX2V4dHJhOwo+ID4gLQo+ID4gICAJLyog UHV0IGV2ZXJ5dGhpbmcgaW4gZnJlZSBsaXN0cy4gKi8KPiA+ICAgCXZxLT5mcmVlX2hlYWQgPSAw Owo+ID4gLQltZW1zZXQodnEtPnNwbGl0LmRlc2Nfc3RhdGUsIDAsIHZyaW5nLm51bSAqCj4gPiAt CQkJc2l6ZW9mKHN0cnVjdCB2cmluZ19kZXNjX3N0YXRlX3NwbGl0KSk7Cj4gPiArfQo+ID4gKwo+ ID4gKy8qIE9ubHkgYXZhaWxhYmxlIGZvciBzcGxpdCByaW5nICovCj4gPiArc3RydWN0IHZpcnRx dWV1ZSAqX192cmluZ19uZXdfdmlydHF1ZXVlKHVuc2lnbmVkIGludCBpbmRleCwKPiA+ICsJCQkJ CXN0cnVjdCB2cmluZyB2cmluZywKPiA+ICsJCQkJCXN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2 LAo+ID4gKwkJCQkJYm9vbCB3ZWFrX2JhcnJpZXJzLAo+ID4gKwkJCQkJYm9vbCBjb250ZXh0LAo+ ID4gKwkJCQkJYm9vbCAoKm5vdGlmeSkoc3RydWN0IHZpcnRxdWV1ZSAqKSwKPiA+ICsJCQkJCXZv aWQgKCpjYWxsYmFjaykoc3RydWN0IHZpcnRxdWV1ZSAqKSwKPiA+ICsJCQkJCWNvbnN0IGNoYXIg Km5hbWUpCj4gPiArewo+ID4gKwlzdHJ1Y3QgdnJpbmdfdmlydHF1ZXVlICp2cTsKPiA+ICsJaW50 IGVycjsKPiA+ICsKPiA+ICsJaWYgKHZpcnRpb19oYXNfZmVhdHVyZSh2ZGV2LCBWSVJUSU9fRl9S SU5HX1BBQ0tFRCkpCj4gPiArCQlyZXR1cm4gTlVMTDsKPiA+ICsKPiA+ICsJdnEgPSBrbWFsbG9j KHNpemVvZigqdnEpLCBHRlBfS0VSTkVMKTsKPiA+ICsJaWYgKCF2cSkKPiA+ICsJCXJldHVybiBO VUxMOwo+ID4gKwo+ID4gKwl2cS0+dnEuY2FsbGJhY2sgPSBjYWxsYmFjazsKPiA+ICsJdnEtPnZx LnZkZXYgPSB2ZGV2Owo+ID4gKwl2cS0+dnEubmFtZSA9IG5hbWU7Cj4gPiArCXZxLT52cS5pbmRl eCA9IGluZGV4Owo+ID4gKwl2cS0+bm90aWZ5ID0gbm90aWZ5Owo+ID4gKwl2cS0+d2Vha19iYXJy aWVycyA9IHdlYWtfYmFycmllcnM7Cj4gPiArCXZxLT5pbmRpcmVjdCA9IHZpcnRpb19oYXNfZmVh dHVyZSh2ZGV2LCBWSVJUSU9fUklOR19GX0lORElSRUNUX0RFU0MpICYmCj4gPiArCQkhY29udGV4 dDsKPiA+ICsKPiA+ICsJZXJyID0gX192cmluZ192aXJ0cXVldWVfYXR0YWNoX3NwbGl0KHZxLCB2 ZGV2LCB2cmluZyk7Cj4gPiArCWlmIChlcnIpCj4gPiArCQlnb3RvIGVycjsKPiA+ICsKPiA+ICsJ X192cmluZ192aXJ0cXVldWVfaW5pdF9zcGxpdCh2cSwgdmRldik7Cj4gPgo+ID4gICAJc3Bpbl9s b2NrKCZ2ZGV2LT52cXNfbGlzdF9sb2NrKTsKPiA+ICAgCWxpc3RfYWRkX3RhaWwoJnZxLT52cS5s aXN0LCAmdmRldi0+dnFzKTsKPiA+ICAgCXNwaW5fdW5sb2NrKCZ2ZGV2LT52cXNfbGlzdF9sb2Nr KTsKPiA+IC0JcmV0dXJuICZ2cS0+dnE7Cj4gPgo+ID4gLWVycl9leHRyYToKPiA+IC0Ja2ZyZWUo dnEtPnNwbGl0LmRlc2Nfc3RhdGUpOwo+ID4gLWVycl9zdGF0ZToKPiA+ICsJcmV0dXJuICZ2cS0+ dnE7Cj4gPiArZXJyOgo+ID4gICAJa2ZyZWUodnEpOwo+ID4gICAJcmV0dXJuIE5VTEw7Cj4gPiAg IH0KPgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGlu dXgtdW0gbWFpbGluZyBsaXN0CmxpbnV4LXVtQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xp c3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC11bQo=