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 2FC93C38145 for ; Wed, 7 Sep 2022 05:38:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229740AbiIGFiV (ORCPT ); Wed, 7 Sep 2022 01:38:21 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39388 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229576AbiIGFiR (ORCPT ); Wed, 7 Sep 2022 01:38:17 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0914F82D1E for ; Tue, 6 Sep 2022 22:38:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1662529095; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=z/ijoziX1JqP00j9yW5u7IZw3l7uhHHBn3IFfumff2g=; b=Ky12rQYFCUBhadLWUWvshBiLc814c+XDmP2PfWcSDlQ1N80ehxB+IEOQOvDDuBVKKkO8HV fCJP4v3nEGYi4zs6ubBafSlya1gN0bM4Xvi9Q95S41Vr/3v3WFLDf2eR1ADmtx2l06yz2d OY+g1p4/zXKgp5S+BAdRXWGSEv3U98s= Received: from mail-pg1-f197.google.com (mail-pg1-f197.google.com [209.85.215.197]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-472-7zX4AHHnNjSR3HMQkAGuMQ-1; Wed, 07 Sep 2022 01:38:14 -0400 X-MC-Unique: 7zX4AHHnNjSR3HMQkAGuMQ-1 Received: by mail-pg1-f197.google.com with SMTP id q10-20020a635c0a000000b00434b19ecf6fso1929401pgb.16 for ; Tue, 06 Sep 2022 22:38:13 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date; bh=z/ijoziX1JqP00j9yW5u7IZw3l7uhHHBn3IFfumff2g=; b=PDotXVxuuk1z8dWDrRPpnJGggHviDeEPmI0e4hplIX6456WAdBZTX/zc2AcCKXJllq GfKwfMh23UYefx9HRcYFr7Ga7i9wlbSLL7PxtynGr9e0horl64IKWwDgvlMMcDvn8+V5 cbSzoaBYwP8NMtsBoYt7fJRR4lgsZxS4mAXwfNhUaV+zXCtk5eOfCfdokc643U3kCZla jDk6w6MQiqzxO6w4JDba2Js4WF6TQCihndN+Wd5Tm0RUDYmGb5NsssLcIrwlxlp/9Y14 lLSSb2zRQaK6e5QmAKkWcnlSwp+AD0oQei57Z2N5gh5MHmIX2YxDGm3tOjZDugoZ6ioG OJXg== X-Gm-Message-State: ACgBeo0Gl0DRJGI4Q+fGFIhxSdH4xekLx5PZF9J8PThX5vdELD8bYJb6 cfXLdtvG2Y4+8rIZxm1/fya6ZvdWFD0FyI3advciPqHzzkNSVRaMR9q0n3glKGsx1lq3lGydAby btytU++bO/4I9pJW4txrU8MrM X-Received: by 2002:a17:902:ef50:b0:171:516d:d2ce with SMTP id e16-20020a170902ef5000b00171516dd2cemr2150673plx.171.1662529092676; Tue, 06 Sep 2022 22:38:12 -0700 (PDT) X-Google-Smtp-Source: AA6agR5xHIuO0ckPVo1IAdDm+QtW6wb3fUCt/3CAknqurpy5/WVdwoP6vH+j2dzlabcwVg6m63ayGA== X-Received: by 2002:a17:902:ef50:b0:171:516d:d2ce with SMTP id e16-20020a170902ef5000b00171516dd2cemr2150649plx.171.1662529092367; Tue, 06 Sep 2022 22:38:12 -0700 (PDT) Received: from [10.72.13.171] ([43.228.180.230]) by smtp.gmail.com with ESMTPSA id d9-20020a170902654900b00172ba718ed4sm6142087pln.138.2022.09.06.22.38.08 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 06 Sep 2022 22:38:11 -0700 (PDT) Message-ID: Date: Wed, 7 Sep 2022 13:38:03 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.13.0 Subject: Re: [RFC v3 6/7] virtio: in order support for virtio_ring Content-Language: en-US To: Guo Zhi , eperezma@redhat.com, sgarzare@redhat.com, mst@redhat.com Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, virtualization@lists.linux-foundation.org References: <20220901055434.824-1-qtxuning1999@sjtu.edu.cn> <20220901055434.824-7-qtxuning1999@sjtu.edu.cn> From: Jason Wang In-Reply-To: <20220901055434.824-7-qtxuning1999@sjtu.edu.cn> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 在 2022/9/1 13:54, Guo Zhi 写道: > If in order feature negotiated, we can skip the used ring to get > buffer's desc id sequentially. For skipped buffers in the batch, the > used ring doesn't contain the buffer length, actually there is not need > to get skipped buffers' length as they are tx buffer. > > Signed-off-by: Guo Zhi > --- > drivers/virtio/virtio_ring.c | 74 +++++++++++++++++++++++++++++++----- > 1 file changed, 64 insertions(+), 10 deletions(-) > > diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c > index 00aa4b7a49c2..d52624179b43 100644 > --- a/drivers/virtio/virtio_ring.c > +++ b/drivers/virtio/virtio_ring.c > @@ -103,6 +103,9 @@ struct vring_virtqueue { > /* Host supports indirect buffers */ > bool indirect; > > + /* Host supports in order feature */ > + bool in_order; > + > /* Host publishes avail event idx */ > bool event; > > @@ -144,6 +147,19 @@ struct vring_virtqueue { > /* DMA address and size information */ > dma_addr_t queue_dma_addr; > size_t queue_size_in_bytes; > + > + /* If in_order feature is negotiated, here is the next head to consume */ > + u16 next_desc_begin; > + /* > + * If in_order feature is negotiated, > + * here is the last descriptor's id in the batch > + */ > + u16 last_desc_in_batch; > + /* > + * If in_order feature is negotiated, > + * buffers except last buffer in the batch are skipped buffer > + */ > + bool is_skipped_buffer; > } split; > > /* Available for packed ring */ > @@ -584,8 +600,6 @@ static inline int virtqueue_add_split(struct virtqueue *_vq, > total_sg * sizeof(struct vring_desc), > VRING_DESC_F_INDIRECT, > false); > - vq->split.desc_extra[head & (vq->split.vring.num - 1)].flags &= > - ~VRING_DESC_F_NEXT; This seems irrelevant. > } > > /* We're using some buffers from the free list. */ > @@ -701,8 +715,16 @@ static void detach_buf_split(struct vring_virtqueue *vq, unsigned int head, > } > > vring_unmap_one_split(vq, i); > - vq->split.desc_extra[i].next = vq->free_head; > - vq->free_head = head; > + /* > + * If in_order feature is negotiated, > + * the descriptors are made available in order. > + * Since the free_head is already a circular list, > + * it must consume it sequentially. > + */ > + if (!vq->in_order) { > + vq->split.desc_extra[i].next = vq->free_head; > + vq->free_head = head; > + } > > /* Plus final descriptor */ > vq->vq.num_free++; > @@ -744,7 +766,7 @@ static void *virtqueue_get_buf_ctx_split(struct virtqueue *_vq, > { > struct vring_virtqueue *vq = to_vvq(_vq); > void *ret; > - unsigned int i; > + unsigned int i, j; > u16 last_used; > > START_USE(vq); > @@ -763,11 +785,38 @@ static void *virtqueue_get_buf_ctx_split(struct virtqueue *_vq, > /* Only get used array entries after they have been exposed by host. */ > virtio_rmb(vq->weak_barriers); > > - last_used = (vq->last_used_idx & (vq->split.vring.num - 1)); > - i = virtio32_to_cpu(_vq->vdev, > - vq->split.vring.used->ring[last_used].id); > - *len = virtio32_to_cpu(_vq->vdev, > - vq->split.vring.used->ring[last_used].len); > + if (vq->in_order) { > + last_used = (vq->last_used_idx & (vq->split.vring.num - 1)); Let's move this beyond the in_order check. > + if (!vq->split.is_skipped_buffer) { > + vq->split.last_desc_in_batch = > + virtio32_to_cpu(_vq->vdev, > + vq->split.vring.used->ring[last_used].id); > + vq->split.is_skipped_buffer = true; > + } > + /* For skipped buffers in batch, we can ignore the len info, simply set len as 0 */ This seems to break the caller that depends on a correct len. > + if (vq->split.next_desc_begin != vq->split.last_desc_in_batch) { > + *len = 0; > + } else { > + *len = virtio32_to_cpu(_vq->vdev, > + vq->split.vring.used->ring[last_used].len); > + vq->split.is_skipped_buffer = false; > + } > + i = vq->split.next_desc_begin; > + j = i; > + /* Indirect only takes one descriptor in descriptor table */ > + while (!vq->indirect && (vq->split.desc_extra[j].flags & VRING_DESC_F_NEXT)) > + j = (j + 1) & (vq->split.vring.num - 1); Any reason indirect descriptors can't be chained? > + /* move to next */ > + j = (j + 1) % vq->split.vring.num; > + /* Next buffer will use this descriptor in order */ > + vq->split.next_desc_begin = j; Is it more efficient to poke the available ring? Thanks > + } else { > + last_used = (vq->last_used_idx & (vq->split.vring.num - 1)); > + i = virtio32_to_cpu(_vq->vdev, > + vq->split.vring.used->ring[last_used].id); > + *len = virtio32_to_cpu(_vq->vdev, > + vq->split.vring.used->ring[last_used].len); > + } > > if (unlikely(i >= vq->split.vring.num)) { > BAD_RING(vq, "id %u out of range\n", i); > @@ -2223,6 +2272,7 @@ struct virtqueue *__vring_new_virtqueue(unsigned int index, > > vq->indirect = virtio_has_feature(vdev, VIRTIO_RING_F_INDIRECT_DESC) && > !context; > + vq->in_order = virtio_has_feature(vdev, VIRTIO_F_IN_ORDER); > vq->event = virtio_has_feature(vdev, VIRTIO_RING_F_EVENT_IDX); > > if (virtio_has_feature(vdev, VIRTIO_F_ORDER_PLATFORM)) > @@ -2235,6 +2285,10 @@ struct virtqueue *__vring_new_virtqueue(unsigned int index, > vq->split.avail_flags_shadow = 0; > vq->split.avail_idx_shadow = 0; > > + vq->split.next_desc_begin = 0; > + vq->split.last_desc_in_batch = 0; > + vq->split.is_skipped_buffer = false; > + > /* No callback? Tell other side not to bother us. */ > if (!callback) { > vq->split.avail_flags_shadow |= VRING_AVAIL_F_NO_INTERRUPT; 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 smtp2.osuosl.org (smtp2.osuosl.org [140.211.166.133]) (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 80E68C38145 for ; Wed, 7 Sep 2022 05:38:20 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id E424940239; Wed, 7 Sep 2022 05:38:19 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org E424940239 Authentication-Results: smtp2.osuosl.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=Ky12rQYF 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 CKcieN6eLdcL; Wed, 7 Sep 2022 05:38:19 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp2.osuosl.org (Postfix) with ESMTPS id 5B171401CC; Wed, 7 Sep 2022 05:38:18 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org 5B171401CC Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 0B875C0033; Wed, 7 Sep 2022 05:38:18 +0000 (UTC) Received: from smtp2.osuosl.org (smtp2.osuosl.org [140.211.166.133]) by lists.linuxfoundation.org (Postfix) with ESMTP id 6B786C002D for ; Wed, 7 Sep 2022 05:38:17 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 3305E401F1 for ; Wed, 7 Sep 2022 05:38:17 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org 3305E401F1 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 TPhp1MZ7yfXb for ; Wed, 7 Sep 2022 05:38:16 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org 3AF85401CC Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by smtp2.osuosl.org (Postfix) with ESMTPS id 3AF85401CC for ; Wed, 7 Sep 2022 05:38:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1662529095; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=z/ijoziX1JqP00j9yW5u7IZw3l7uhHHBn3IFfumff2g=; b=Ky12rQYFCUBhadLWUWvshBiLc814c+XDmP2PfWcSDlQ1N80ehxB+IEOQOvDDuBVKKkO8HV fCJP4v3nEGYi4zs6ubBafSlya1gN0bM4Xvi9Q95S41Vr/3v3WFLDf2eR1ADmtx2l06yz2d OY+g1p4/zXKgp5S+BAdRXWGSEv3U98s= Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-472-moZrJPedN0aJIahKu7kTkQ-1; Wed, 07 Sep 2022 01:38:13 -0400 X-MC-Unique: moZrJPedN0aJIahKu7kTkQ-1 Received: by mail-pl1-f198.google.com with SMTP id p18-20020a170902e75200b00176c0e055c9so3634454plf.17 for ; Tue, 06 Sep 2022 22:38:13 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date; bh=z/ijoziX1JqP00j9yW5u7IZw3l7uhHHBn3IFfumff2g=; b=s6W5cfz56eCnjPBsR9Z3Aa4qzweZGtyesAPfYy5IQ/i3jU4iz9cKXd+G2wU2k6Kuh4 zRlAStFbUBWLXNYHQjJ1GE/uqbDOoXT0pObRi+xTp4CbemIL7Rz7LKlUNs1sPYe3AkFR CC3H/liyeK5WcRdZbgrsxoJ0NaA4503lJPEovPSQqOfzidWWtWlFwO8d/Qklb+8uiUAl 3xPa9fdnmJK2AdFjtl9+ir3x1Eo7+8JG9kZr93O53dsaa4RyazTPnmwqcWBzx4gUi4Bo Igslnuh2kZKwMIFw+BbWGeg1wGQj/d9kRzyhML4/aFXv95+A2lNnK2QrSOwC9q2Ragbw 7LfQ== X-Gm-Message-State: ACgBeo1M2LXseUhdcEjDovnyQ1WDXzBb7+GCk/Z3tux0wNi7/CiWepYu Lp+XAwBuenWob46I51H8bQMN+z1DSBl0CoeQF3xosQoUq2kS8xPUcPtirM2PglmJ44uJaMwaLkG 1ylXeNOjOXKPu0foGMwnl6+JFbyiOyer+iRoR9OaguQ== X-Received: by 2002:a17:902:ef50:b0:171:516d:d2ce with SMTP id e16-20020a170902ef5000b00171516dd2cemr2150670plx.171.1662529092675; Tue, 06 Sep 2022 22:38:12 -0700 (PDT) X-Google-Smtp-Source: AA6agR5xHIuO0ckPVo1IAdDm+QtW6wb3fUCt/3CAknqurpy5/WVdwoP6vH+j2dzlabcwVg6m63ayGA== X-Received: by 2002:a17:902:ef50:b0:171:516d:d2ce with SMTP id e16-20020a170902ef5000b00171516dd2cemr2150649plx.171.1662529092367; Tue, 06 Sep 2022 22:38:12 -0700 (PDT) Received: from [10.72.13.171] ([43.228.180.230]) by smtp.gmail.com with ESMTPSA id d9-20020a170902654900b00172ba718ed4sm6142087pln.138.2022.09.06.22.38.08 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 06 Sep 2022 22:38:11 -0700 (PDT) Message-ID: Date: Wed, 7 Sep 2022 13:38:03 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.13.0 Subject: Re: [RFC v3 6/7] virtio: in order support for virtio_ring To: Guo Zhi , eperezma@redhat.com, sgarzare@redhat.com, mst@redhat.com References: <20220901055434.824-1-qtxuning1999@sjtu.edu.cn> <20220901055434.824-7-qtxuning1999@sjtu.edu.cn> From: Jason Wang In-Reply-To: <20220901055434.824-7-qtxuning1999@sjtu.edu.cn> X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Language: en-US Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, virtualization@lists.linux-foundation.org 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: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: virtualization-bounces@lists.linux-foundation.org Sender: "Virtualization" CuWcqCAyMDIyLzkvMSAxMzo1NCwgR3VvIFpoaSDlhpnpgZM6Cj4gSWYgaW4gb3JkZXIgZmVhdHVy ZSBuZWdvdGlhdGVkLCB3ZSBjYW4gc2tpcCB0aGUgdXNlZCByaW5nIHRvIGdldAo+IGJ1ZmZlcidz IGRlc2MgaWQgc2VxdWVudGlhbGx5LiAgRm9yIHNraXBwZWQgYnVmZmVycyBpbiB0aGUgYmF0Y2gs IHRoZQo+IHVzZWQgcmluZyBkb2Vzbid0IGNvbnRhaW4gdGhlIGJ1ZmZlciBsZW5ndGgsIGFjdHVh bGx5IHRoZXJlIGlzIG5vdCBuZWVkCj4gdG8gZ2V0IHNraXBwZWQgYnVmZmVycycgbGVuZ3RoIGFz IHRoZXkgYXJlIHR4IGJ1ZmZlci4KPgo+IFNpZ25lZC1vZmYtYnk6IEd1byBaaGkgPHF0eHVuaW5n MTk5OUBzanR1LmVkdS5jbj4KPiAtLS0KPiAgIGRyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMg fCA3NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0KPiAgIDEgZmlsZSBjaGFu Z2VkLCA2NCBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3Jpbmcu Ywo+IGluZGV4IDAwYWE0YjdhNDljMi4uZDUyNjI0MTc5YjQzIDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvdmlydGlvL3ZpcnRpb19yaW5nLmMKPiArKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmlu Zy5jCj4gQEAgLTEwMyw2ICsxMDMsOSBAQCBzdHJ1Y3QgdnJpbmdfdmlydHF1ZXVlIHsKPiAgIAkv KiBIb3N0IHN1cHBvcnRzIGluZGlyZWN0IGJ1ZmZlcnMgKi8KPiAgIAlib29sIGluZGlyZWN0Owo+ ICAgCj4gKwkvKiBIb3N0IHN1cHBvcnRzIGluIG9yZGVyIGZlYXR1cmUgKi8KPiArCWJvb2wgaW5f b3JkZXI7Cj4gKwo+ICAgCS8qIEhvc3QgcHVibGlzaGVzIGF2YWlsIGV2ZW50IGlkeCAqLwo+ICAg CWJvb2wgZXZlbnQ7Cj4gICAKPiBAQCAtMTQ0LDYgKzE0NywxOSBAQCBzdHJ1Y3QgdnJpbmdfdmly dHF1ZXVlIHsKPiAgIAkJCS8qIERNQSBhZGRyZXNzIGFuZCBzaXplIGluZm9ybWF0aW9uICovCj4g ICAJCQlkbWFfYWRkcl90IHF1ZXVlX2RtYV9hZGRyOwo+ICAgCQkJc2l6ZV90IHF1ZXVlX3NpemVf aW5fYnl0ZXM7Cj4gKwo+ICsJCQkvKiBJZiBpbl9vcmRlciBmZWF0dXJlIGlzIG5lZ290aWF0ZWQs IGhlcmUgaXMgdGhlIG5leHQgaGVhZCB0byBjb25zdW1lICovCj4gKwkJCXUxNiBuZXh0X2Rlc2Nf YmVnaW47Cj4gKwkJCS8qCj4gKwkJCSAqIElmIGluX29yZGVyIGZlYXR1cmUgaXMgbmVnb3RpYXRl ZCwKPiArCQkJICogaGVyZSBpcyB0aGUgbGFzdCBkZXNjcmlwdG9yJ3MgaWQgaW4gdGhlIGJhdGNo Cj4gKwkJCSAqLwo+ICsJCQl1MTYgbGFzdF9kZXNjX2luX2JhdGNoOwo+ICsJCQkvKgo+ICsJCQkg KiBJZiBpbl9vcmRlciBmZWF0dXJlIGlzIG5lZ290aWF0ZWQsCj4gKwkJCSAqIGJ1ZmZlcnMgZXhj ZXB0IGxhc3QgYnVmZmVyIGluIHRoZSBiYXRjaCBhcmUgc2tpcHBlZCBidWZmZXIKPiArCQkJICov Cj4gKwkJCWJvb2wgaXNfc2tpcHBlZF9idWZmZXI7Cj4gICAJCX0gc3BsaXQ7Cj4gICAKPiAgIAkJ LyogQXZhaWxhYmxlIGZvciBwYWNrZWQgcmluZyAqLwo+IEBAIC01ODQsOCArNjAwLDYgQEAgc3Rh dGljIGlubGluZSBpbnQgdmlydHF1ZXVlX2FkZF9zcGxpdChzdHJ1Y3QgdmlydHF1ZXVlICpfdnEs Cj4gICAJCQkJCSB0b3RhbF9zZyAqIHNpemVvZihzdHJ1Y3QgdnJpbmdfZGVzYyksCj4gICAJCQkJ CSBWUklOR19ERVNDX0ZfSU5ESVJFQ1QsCj4gICAJCQkJCSBmYWxzZSk7Cj4gLQkJdnEtPnNwbGl0 LmRlc2NfZXh0cmFbaGVhZCAmICh2cS0+c3BsaXQudnJpbmcubnVtIC0gMSldLmZsYWdzICY9Cj4g LQkJCX5WUklOR19ERVNDX0ZfTkVYVDsKCgpUaGlzIHNlZW1zIGlycmVsZXZhbnQuCgoKPiAgIAl9 Cj4gICAKPiAgIAkvKiBXZSdyZSB1c2luZyBzb21lIGJ1ZmZlcnMgZnJvbSB0aGUgZnJlZSBsaXN0 LiAqLwo+IEBAIC03MDEsOCArNzE1LDE2IEBAIHN0YXRpYyB2b2lkIGRldGFjaF9idWZfc3BsaXQo c3RydWN0IHZyaW5nX3ZpcnRxdWV1ZSAqdnEsIHVuc2lnbmVkIGludCBoZWFkLAo+ICAgCX0KPiAg IAo+ICAgCXZyaW5nX3VubWFwX29uZV9zcGxpdCh2cSwgaSk7Cj4gLQl2cS0+c3BsaXQuZGVzY19l eHRyYVtpXS5uZXh0ID0gdnEtPmZyZWVfaGVhZDsKPiAtCXZxLT5mcmVlX2hlYWQgPSBoZWFkOwo+ ICsJLyoKPiArCSAqIElmIGluX29yZGVyIGZlYXR1cmUgaXMgbmVnb3RpYXRlZCwKPiArCSAqIHRo ZSBkZXNjcmlwdG9ycyBhcmUgbWFkZSBhdmFpbGFibGUgaW4gb3JkZXIuCj4gKwkgKiBTaW5jZSB0 aGUgZnJlZV9oZWFkIGlzIGFscmVhZHkgYSBjaXJjdWxhciBsaXN0LAo+ICsJICogaXQgbXVzdCBj b25zdW1lIGl0IHNlcXVlbnRpYWxseS4KPiArCSAqLwo+ICsJaWYgKCF2cS0+aW5fb3JkZXIpIHsK PiArCQl2cS0+c3BsaXQuZGVzY19leHRyYVtpXS5uZXh0ID0gdnEtPmZyZWVfaGVhZDsKPiArCQl2 cS0+ZnJlZV9oZWFkID0gaGVhZDsKPiArCX0KPiAgIAo+ICAgCS8qIFBsdXMgZmluYWwgZGVzY3Jp cHRvciAqLwo+ICAgCXZxLT52cS5udW1fZnJlZSsrOwo+IEBAIC03NDQsNyArNzY2LDcgQEAgc3Rh dGljIHZvaWQgKnZpcnRxdWV1ZV9nZXRfYnVmX2N0eF9zcGxpdChzdHJ1Y3QgdmlydHF1ZXVlICpf dnEsCj4gICB7Cj4gICAJc3RydWN0IHZyaW5nX3ZpcnRxdWV1ZSAqdnEgPSB0b192dnEoX3ZxKTsK PiAgIAl2b2lkICpyZXQ7Cj4gLQl1bnNpZ25lZCBpbnQgaTsKPiArCXVuc2lnbmVkIGludCBpLCBq Owo+ICAgCXUxNiBsYXN0X3VzZWQ7Cj4gICAKPiAgIAlTVEFSVF9VU0UodnEpOwo+IEBAIC03NjMs MTEgKzc4NSwzOCBAQCBzdGF0aWMgdm9pZCAqdmlydHF1ZXVlX2dldF9idWZfY3R4X3NwbGl0KHN0 cnVjdCB2aXJ0cXVldWUgKl92cSwKPiAgIAkvKiBPbmx5IGdldCB1c2VkIGFycmF5IGVudHJpZXMg YWZ0ZXIgdGhleSBoYXZlIGJlZW4gZXhwb3NlZCBieSBob3N0LiAqLwo+ICAgCXZpcnRpb19ybWIo dnEtPndlYWtfYmFycmllcnMpOwo+ICAgCj4gLQlsYXN0X3VzZWQgPSAodnEtPmxhc3RfdXNlZF9p ZHggJiAodnEtPnNwbGl0LnZyaW5nLm51bSAtIDEpKTsKPiAtCWkgPSB2aXJ0aW8zMl90b19jcHUo X3ZxLT52ZGV2LAo+IC0JCQl2cS0+c3BsaXQudnJpbmcudXNlZC0+cmluZ1tsYXN0X3VzZWRdLmlk KTsKPiAtCSpsZW4gPSB2aXJ0aW8zMl90b19jcHUoX3ZxLT52ZGV2LAo+IC0JCQl2cS0+c3BsaXQu dnJpbmcudXNlZC0+cmluZ1tsYXN0X3VzZWRdLmxlbik7Cj4gKwlpZiAodnEtPmluX29yZGVyKSB7 Cj4gKwkJbGFzdF91c2VkID0gKHZxLT5sYXN0X3VzZWRfaWR4ICYgKHZxLT5zcGxpdC52cmluZy5u dW0gLSAxKSk7CgoKTGV0J3MgbW92ZSB0aGlzIGJleW9uZCB0aGUgaW5fb3JkZXIgY2hlY2suCgoK PiArCQlpZiAoIXZxLT5zcGxpdC5pc19za2lwcGVkX2J1ZmZlcikgewo+ICsJCQl2cS0+c3BsaXQu bGFzdF9kZXNjX2luX2JhdGNoID0KPiArCQkJCXZpcnRpbzMyX3RvX2NwdShfdnEtPnZkZXYsCj4g KwkJCQkJCXZxLT5zcGxpdC52cmluZy51c2VkLT5yaW5nW2xhc3RfdXNlZF0uaWQpOwo+ICsJCQl2 cS0+c3BsaXQuaXNfc2tpcHBlZF9idWZmZXIgPSB0cnVlOwo+ICsJCX0KPiArCQkvKiBGb3Igc2tp cHBlZCBidWZmZXJzIGluIGJhdGNoLCB3ZSBjYW4gaWdub3JlIHRoZSBsZW4gaW5mbywgc2ltcGx5 IHNldCBsZW4gYXMgMCAqLwoKClRoaXMgc2VlbXMgdG8gYnJlYWsgdGhlIGNhbGxlciB0aGF0IGRl cGVuZHMgb24gYSBjb3JyZWN0IGxlbi4KCgo+ICsJCWlmICh2cS0+c3BsaXQubmV4dF9kZXNjX2Jl Z2luICE9IHZxLT5zcGxpdC5sYXN0X2Rlc2NfaW5fYmF0Y2gpIHsKPiArCQkJKmxlbiA9IDA7Cj4g KwkJfSBlbHNlIHsKPiArCQkJKmxlbiA9IHZpcnRpbzMyX3RvX2NwdShfdnEtPnZkZXYsCj4gKwkJ CQkJICAgICAgIHZxLT5zcGxpdC52cmluZy51c2VkLT5yaW5nW2xhc3RfdXNlZF0ubGVuKTsKPiAr CQkJdnEtPnNwbGl0LmlzX3NraXBwZWRfYnVmZmVyID0gZmFsc2U7Cj4gKwkJfQo+ICsJCWkgPSB2 cS0+c3BsaXQubmV4dF9kZXNjX2JlZ2luOwo+ICsJCWogPSBpOwo+ICsJCS8qIEluZGlyZWN0IG9u bHkgdGFrZXMgb25lIGRlc2NyaXB0b3IgaW4gZGVzY3JpcHRvciB0YWJsZSAqLwo+ICsJCXdoaWxl ICghdnEtPmluZGlyZWN0ICYmICh2cS0+c3BsaXQuZGVzY19leHRyYVtqXS5mbGFncyAmIFZSSU5H X0RFU0NfRl9ORVhUKSkKPiArCQkJaiA9IChqICsgMSkgJiAodnEtPnNwbGl0LnZyaW5nLm51bSAt IDEpOwoKCkFueSByZWFzb24gaW5kaXJlY3QgZGVzY3JpcHRvcnMgY2FuJ3QgYmUgY2hhaW5lZD8K Cgo+ICsJCS8qIG1vdmUgdG8gbmV4dCAqLwo+ICsJCWogPSAoaiArIDEpICUgdnEtPnNwbGl0LnZy aW5nLm51bTsKPiArCQkvKiBOZXh0IGJ1ZmZlciB3aWxsIHVzZSB0aGlzIGRlc2NyaXB0b3IgaW4g b3JkZXIgKi8KPiArCQl2cS0+c3BsaXQubmV4dF9kZXNjX2JlZ2luID0gajsKCgpJcyBpdCBtb3Jl IGVmZmljaWVudCB0byBwb2tlIHRoZSBhdmFpbGFibGUgcmluZz8KClRoYW5rcwoKCj4gKwl9IGVs c2Ugewo+ICsJCWxhc3RfdXNlZCA9ICh2cS0+bGFzdF91c2VkX2lkeCAmICh2cS0+c3BsaXQudnJp bmcubnVtIC0gMSkpOwo+ICsJCWkgPSB2aXJ0aW8zMl90b19jcHUoX3ZxLT52ZGV2LAo+ICsJCQkJ ICAgIHZxLT5zcGxpdC52cmluZy51c2VkLT5yaW5nW2xhc3RfdXNlZF0uaWQpOwo+ICsJCSpsZW4g PSB2aXJ0aW8zMl90b19jcHUoX3ZxLT52ZGV2LAo+ICsJCQkJICAgICAgIHZxLT5zcGxpdC52cmlu Zy51c2VkLT5yaW5nW2xhc3RfdXNlZF0ubGVuKTsKPiArCX0KPiAgIAo+ICAgCWlmICh1bmxpa2Vs eShpID49IHZxLT5zcGxpdC52cmluZy5udW0pKSB7Cj4gICAJCUJBRF9SSU5HKHZxLCAiaWQgJXUg b3V0IG9mIHJhbmdlXG4iLCBpKTsKPiBAQCAtMjIyMyw2ICsyMjcyLDcgQEAgc3RydWN0IHZpcnRx dWV1ZSAqX192cmluZ19uZXdfdmlydHF1ZXVlKHVuc2lnbmVkIGludCBpbmRleCwKPiAgIAo+ICAg CXZxLT5pbmRpcmVjdCA9IHZpcnRpb19oYXNfZmVhdHVyZSh2ZGV2LCBWSVJUSU9fUklOR19GX0lO RElSRUNUX0RFU0MpICYmCj4gICAJCSFjb250ZXh0Owo+ICsJdnEtPmluX29yZGVyID0gdmlydGlv X2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19GX0lOX09SREVSKTsKPiAgIAl2cS0+ZXZlbnQgPSB2 aXJ0aW9faGFzX2ZlYXR1cmUodmRldiwgVklSVElPX1JJTkdfRl9FVkVOVF9JRFgpOwo+ICAgCj4g ICAJaWYgKHZpcnRpb19oYXNfZmVhdHVyZSh2ZGV2LCBWSVJUSU9fRl9PUkRFUl9QTEFURk9STSkp Cj4gQEAgLTIyMzUsNiArMjI4NSwxMCBAQCBzdHJ1Y3QgdmlydHF1ZXVlICpfX3ZyaW5nX25ld192 aXJ0cXVldWUodW5zaWduZWQgaW50IGluZGV4LAo+ICAgCXZxLT5zcGxpdC5hdmFpbF9mbGFnc19z aGFkb3cgPSAwOwo+ICAgCXZxLT5zcGxpdC5hdmFpbF9pZHhfc2hhZG93ID0gMDsKPiAgIAo+ICsJ dnEtPnNwbGl0Lm5leHRfZGVzY19iZWdpbiA9IDA7Cj4gKwl2cS0+c3BsaXQubGFzdF9kZXNjX2lu X2JhdGNoID0gMDsKPiArCXZxLT5zcGxpdC5pc19za2lwcGVkX2J1ZmZlciA9IGZhbHNlOwo+ICsK PiAgIAkvKiBObyBjYWxsYmFjaz8gIFRlbGwgb3RoZXIgc2lkZSBub3QgdG8gYm90aGVyIHVzLiAq Lwo+ICAgCWlmICghY2FsbGJhY2spIHsKPiAgIAkJdnEtPnNwbGl0LmF2YWlsX2ZsYWdzX3NoYWRv dyB8PSBWUklOR19BVkFJTF9GX05PX0lOVEVSUlVQVDsKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fClZpcnR1YWxpemF0aW9uIG1haWxpbmcgbGlzdApWaXJ0 dWFsaXphdGlvbkBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwpodHRwczovL2xpc3RzLmxpbnV4 Zm91bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby92aXJ0dWFsaXphdGlvbg==