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 X-Spam-Level: X-Spam-Status: No, score=-17.6 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A, SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9F439C2B9F7 for ; Tue, 25 May 2021 03:21:55 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 75D256117A for ; Tue, 25 May 2021 03:21:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230085AbhEYDXX (ORCPT ); Mon, 24 May 2021 23:23:23 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:37974 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229575AbhEYDXW (ORCPT ); Mon, 24 May 2021 23:23:22 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1621912913; 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=hN/qmFSWE4X1/1WyvflertyODujEppC5hAfuD6ka3nI=; b=ed8W5poqBJoXUeo4AFCqvRWNXI0zEUFSwbvumx+9GNklEkEXA3TmGqQbEfJNPbhmn2CaQI WzG1EtmhvlaHRMXGSJugmei33K0l6jECZao+zf/m2yIZs5G0r/6O7K1SpMEoVpggq8i13O y1gP2OlTyfhBG4/0MR2U1X8/vQAVcyM= Received: from mail-pf1-f197.google.com (mail-pf1-f197.google.com [209.85.210.197]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-301-3AZnjRV5N66ECl3m5wGy0w-1; Mon, 24 May 2021 23:21:51 -0400 X-MC-Unique: 3AZnjRV5N66ECl3m5wGy0w-1 Received: by mail-pf1-f197.google.com with SMTP id a141-20020a621a930000b02902de0bf944f8so15137124pfa.10 for ; Mon, 24 May 2021 20:21:51 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding :content-language; bh=hN/qmFSWE4X1/1WyvflertyODujEppC5hAfuD6ka3nI=; b=iqObrVgEnM/0hu2s6eayHG2x++8lXw8ypCDQDeUvmaIwhAGZDw3VR/DQgAmGH2TiAu cIKRuykEJyQdbqEvPTlvpPsSn6n1ZxS+O3cZEn7AT+ihYq+lNj3k+LIrZ4JWyz/rajhS ONXjCbwsC3cXW1WGUxRCsaUu8QIkXGot9GW8x44USLumaB9/FgQHKoo1bK74qxHUmCGz dZpcGPwDf7r3BJWpUI5VvEv3pGLA9Tc0P5s2YmTXEQaXPZ15gjd1VfdqWsoAn+KPdkEg J1durE2kiIdNFLHxKd8/soNrzbDXcp4f9/OdHOZ0zf9xiFAwlHlsMrhQFM8FOEkxW/OG E9yQ== X-Gm-Message-State: AOAM5334rO7tiB7t1ia847c4l+Hg2hIG9yJIPLUhWuhCeNdUz9+ZvU15 U5n/HRcNpSFqazvtW7mFKnpwIb0/36A1q3thOEmfkmIAiOWhVkncjT8hfjz2cyTrcXDgIJev9R1 dKakoduipePmx7Xoyp1Wv9CU= X-Received: by 2002:a17:902:f784:b029:ef:8e2f:430e with SMTP id q4-20020a170902f784b02900ef8e2f430emr28826879pln.28.1621912910735; Mon, 24 May 2021 20:21:50 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzDUbseCl+SvcFZTnoFf+aRPtbg6SWGAQweGkBDt3D+VDTBF5zU1ukESHVEzVi0j0Heq4PiHA== X-Received: by 2002:a17:902:f784:b029:ef:8e2f:430e with SMTP id q4-20020a170902f784b02900ef8e2f430emr28826854pln.28.1621912910345; Mon, 24 May 2021 20:21:50 -0700 (PDT) Received: from wangxiaodeMacBook-Air.local ([209.132.188.80]) by smtp.gmail.com with ESMTPSA id jz7sm666619pjb.32.2021.05.24.20.21.46 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 24 May 2021 20:21:49 -0700 (PDT) Subject: Re: [PATCH 3/3] virtio_blk: implement blk_mq_ops->poll() To: Stefan Hajnoczi , virtualization@lists.linux-foundation.org Cc: linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, Christoph Hellwig , Paolo Bonzini , Jens Axboe , slp@redhat.com, sgarzare@redhat.com, "Michael S. Tsirkin" References: <20210520141305.355961-1-stefanha@redhat.com> <20210520141305.355961-4-stefanha@redhat.com> From: Jason Wang Message-ID: Date: Tue, 25 May 2021 11:21:41 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.10.2 MIME-Version: 1.0 In-Reply-To: <20210520141305.355961-4-stefanha@redhat.com> Content-Type: text/plain; charset=gbk; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org ÔÚ 2021/5/20 ÏÂÎç10:13, Stefan Hajnoczi дµÀ: > Request completion latency can be reduced by using polling instead of > irqs. Even Posted Interrupts or similar hardware support doesn't beat > polling. The reason is that disabling virtqueue notifications saves > critical-path CPU cycles on the host by skipping irq injection and in > the guest by skipping the irq handler. So let's add blk_mq_ops->poll() > support to virtio_blk. > > The approach taken by this patch differs from the NVMe driver's > approach. NVMe dedicates hardware queues to polling and submits > REQ_HIPRI requests only on those queues. This patch does not require > exclusive polling queues for virtio_blk. Instead, it switches between > irqs and polling when one or more REQ_HIPRI requests are in flight on a > virtqueue. > > This is possible because toggling virtqueue notifications is cheap even > while the virtqueue is running. NVMe cqs can't do this because irqs are > only enabled/disabled at queue creation time. > > This toggling approach requires no configuration. There is no need to > dedicate queues ahead of time or to teach users and orchestration tools > how to set up polling queues. > > Possible drawbacks of this approach: > > - Hardware virtio_blk implementations may find virtqueue_disable_cb() > expensive since it requires DMA. Note that it's probably not related to the behavior of the driver but the design of the event suppression mechanism. Device can choose to ignore the suppression flag and keep sending interrupts. > If such devices become popular then > the virtio_blk driver could use a similar approach to NVMe when > VIRTIO_F_ACCESS_PLATFORM is detected in the future. > > - If a blk_poll() thread is descheduled it not only hurts polling > performance but also delays completion of non-REQ_HIPRI requests on > that virtqueue since vq notifications are disabled. Can we poll only when only high pri requests are pending? If the backend is a remote one, I think the polling may cause more cpu cycles. > > Performance: > > - Benchmark: fio ioengine=pvsync2 numjobs=4 direct=1 > - Guest: 4 vCPUs with one virtio-blk device (4 virtqueues) > - Disk: Intel Corporation NVMe Datacenter SSD [Optane] [8086:2701] > - CPU: Intel(R) Xeon(R) Silver 4214 CPU @ 2.20GHz > > rw bs hipri=0 hipri=1 > ------------------------------ > randread 4k 149,426 170,763 +14% > randread 16k 118,939 134,269 +12% > randread 64k 34,886 34,906 0% > randread 128k 17,655 17,667 0% > randwrite 4k 138,578 163,600 +18% > randwrite 16k 102,089 120,950 +18% > randwrite 64k 32,364 32,561 0% > randwrite 128k 16,154 16,237 0% > read 4k 146,032 170,620 +16% > read 16k 117,097 130,437 +11% > read 64k 34,834 35,037 0% > read 128k 17,680 17,658 0% > write 4k 134,562 151,422 +12% > write 16k 101,796 107,606 +5% > write 64k 32,364 32,594 0% > write 128k 16,259 16,265 0% > > Larger block sizes do not benefit from polling as much but the > improvement is worthwhile for smaller block sizes. > > Signed-off-by: Stefan Hajnoczi > --- > drivers/block/virtio_blk.c | 92 +++++++++++++++++++++++++++++++++++--- > 1 file changed, 87 insertions(+), 5 deletions(-) > > diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c > index fc0fb1dcd399..f0243dcd745a 100644 > --- a/drivers/block/virtio_blk.c > +++ b/drivers/block/virtio_blk.c > @@ -29,6 +29,16 @@ static struct workqueue_struct *virtblk_wq; > struct virtio_blk_vq { > struct virtqueue *vq; > spinlock_t lock; > + > + /* Number of non-REQ_HIPRI requests in flight. Protected by lock. */ > + unsigned int num_lopri; > + > + /* Number of REQ_HIPRI requests in flight. Protected by lock. */ > + unsigned int num_hipri; > + > + /* Are vq notifications enabled? Protected by lock. */ > + bool cb_enabled; We had event_flag_shadow, is it sufficient to introduce a new helper virtqueue_cb_is_enabled()? > + > char name[VQ_NAME_LEN]; > } ____cacheline_aligned_in_smp; > > @@ -171,33 +181,67 @@ static inline void virtblk_request_done(struct request *req) > blk_mq_end_request(req, virtblk_result(vbr)); > } > > -static void virtblk_done(struct virtqueue *vq) > +/* Returns true if one or more requests completed */ > +static bool virtblk_complete_requests(struct virtqueue *vq) > { > struct virtio_blk *vblk = vq->vdev->priv; > struct virtio_blk_vq *vbq = &vblk->vqs[vq->index]; > bool req_done = false; > + bool last_hipri_done = false; > struct virtblk_req *vbr; > unsigned long flags; > unsigned int len; > > spin_lock_irqsave(&vbq->lock, flags); > + > do { > - virtqueue_disable_cb(vq); > + if (vbq->cb_enabled) > + virtqueue_disable_cb(vq); > while ((vbr = virtqueue_get_buf(vq, &len)) != NULL) { > struct request *req = blk_mq_rq_from_pdu(vbr); > > + if (req->cmd_flags & REQ_HIPRI) { > + if (--vbq->num_hipri == 0) > + last_hipri_done = true; > + } else > + vbq->num_lopri--; > + > if (likely(!blk_should_fake_timeout(req->q))) > blk_mq_complete_request(req); > req_done = true; > } > if (unlikely(virtqueue_is_broken(vq))) > break; > - } while (!virtqueue_enable_cb(vq)); > + > + /* Enable vq notifications if non-polled requests remain */ > + if (last_hipri_done && vbq->num_lopri > 0) { > + last_hipri_done = false; > + vbq->cb_enabled = true; > + } > + } while (vbq->cb_enabled && !virtqueue_enable_cb(vq)); > > /* In case queue is stopped waiting for more buffers. */ > if (req_done) > blk_mq_start_stopped_hw_queues(vblk->disk->queue, true); > spin_unlock_irqrestore(&vbq->lock, flags); > + > + return req_done; > +} > + > +static int virtblk_poll(struct blk_mq_hw_ctx *hctx) > +{ > + struct virtio_blk *vblk = hctx->queue->queuedata; > + struct virtqueue *vq = vblk->vqs[hctx->queue_num].vq; > + > + if (!virtqueue_more_used(vq)) I'm not familiar with block polling but what happens if a buffer is made available after virtqueue_more_used() returns false here? Thanks > + return 0; > + > + return virtblk_complete_requests(vq); > +} > + > +static void virtblk_done(struct virtqueue *vq) > +{ > + virtblk_complete_requests(vq); > } > > static void virtio_commit_rqs(struct blk_mq_hw_ctx *hctx) > @@ -275,6 +319,16 @@ static blk_status_t virtio_queue_rq(struct blk_mq_hw_ctx *hctx, > } > > spin_lock_irqsave(&vbq->lock, flags); > + > + /* Re-enable vq notifications if first req is non-polling */ > + if (!(req->cmd_flags & REQ_HIPRI) && > + vbq->num_lopri == 0 && vbq->num_hipri == 0 && > + !vbq->cb_enabled) { > + /* Can't return false since there are no in-flight reqs */ > + virtqueue_enable_cb(vbq->vq); > + vbq->cb_enabled = true; > + } > + > err = virtblk_add_req(vbq->vq, vbr, vbr->sg, num); > if (err) { > virtqueue_kick(vbq->vq); > @@ -294,6 +348,21 @@ static blk_status_t virtio_queue_rq(struct blk_mq_hw_ctx *hctx, > } > } > > + /* > + * Disable vq notifications when polled reqs are submitted. > + * > + * The virtqueue lock is held so req is still valid here even if the > + * device polls the virtqueue and completes the request before we call > + * virtqueue_notify(). > + */ > + if (req->cmd_flags & REQ_HIPRI) { > + if (vbq->num_hipri++ == 0 && vbq->cb_enabled) { > + virtqueue_disable_cb(vbq->vq); > + vbq->cb_enabled = false; > + } > + } else > + vbq->num_lopri++; > + > if (bd->last && virtqueue_kick_prepare(vbq->vq)) > notify = true; > spin_unlock_irqrestore(&vbq->lock, flags); > @@ -533,6 +602,9 @@ static int init_vq(struct virtio_blk *vblk) > for (i = 0; i < num_vqs; i++) { > spin_lock_init(&vblk->vqs[i].lock); > vblk->vqs[i].vq = vqs[i]; > + vblk->vqs[i].num_lopri = 0; > + vblk->vqs[i].num_hipri = 0; > + vblk->vqs[i].cb_enabled = true; > } > vblk->num_vqs = num_vqs; > > @@ -681,8 +753,16 @@ static int virtblk_map_queues(struct blk_mq_tag_set *set) > { > struct virtio_blk *vblk = set->driver_data; > > - return blk_mq_virtio_map_queues(&set->map[HCTX_TYPE_DEFAULT], > - vblk->vdev, 0); > + set->map[HCTX_TYPE_DEFAULT].nr_queues = vblk->num_vqs; > + blk_mq_virtio_map_queues(&set->map[HCTX_TYPE_DEFAULT], vblk->vdev, 0); > + > + set->map[HCTX_TYPE_READ].nr_queues = 0; > + > + /* HCTX_TYPE_DEFAULT queues are shared with HCTX_TYPE_POLL */ > + set->map[HCTX_TYPE_POLL].nr_queues = vblk->num_vqs; > + blk_mq_virtio_map_queues(&set->map[HCTX_TYPE_POLL], vblk->vdev, 0); > + > + return 0; > } > > static const struct blk_mq_ops virtio_mq_ops = { > @@ -691,6 +771,7 @@ static const struct blk_mq_ops virtio_mq_ops = { > .complete = virtblk_request_done, > .init_request = virtblk_init_request, > .map_queues = virtblk_map_queues, > + .poll = virtblk_poll, > }; > > static unsigned int virtblk_queue_depth; > @@ -768,6 +849,7 @@ static int virtblk_probe(struct virtio_device *vdev) > > memset(&vblk->tag_set, 0, sizeof(vblk->tag_set)); > vblk->tag_set.ops = &virtio_mq_ops; > + vblk->tag_set.nr_maps = 3; /* default, read, and poll */ > vblk->tag_set.queue_depth = queue_depth; > vblk->tag_set.numa_node = NUMA_NO_NODE; > vblk->tag_set.flags = BLK_MQ_F_SHOULD_MERGE; 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 X-Spam-Level: X-Spam-Status: No, score=-15.1 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 575DEC2B9F7 for ; Tue, 25 May 2021 03:21:59 +0000 (UTC) Received: from smtp1.osuosl.org (smtp1.osuosl.org [140.211.166.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 035A161042 for ; Tue, 25 May 2021 03:21:58 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 035A161042 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=virtualization-bounces@lists.linux-foundation.org Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id BBEB583B6F; Tue, 25 May 2021 03:21:58 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 1eUTzo1_h7-j; Tue, 25 May 2021 03:21:57 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp1.osuosl.org (Postfix) with ESMTP id 1C4A583B64; Tue, 25 May 2021 03:21:57 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id E7FC8C000D; Tue, 25 May 2021 03:21:56 +0000 (UTC) Received: from smtp4.osuosl.org (smtp4.osuosl.org [140.211.166.137]) by lists.linuxfoundation.org (Postfix) with ESMTP id 26066C0001 for ; Tue, 25 May 2021 03:21:56 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 2166E404BB for ; Tue, 25 May 2021 03:21:56 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Authentication-Results: smtp4.osuosl.org (amavisd-new); dkim=pass (1024-bit key) header.d=redhat.com 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 cUGp0TNKt-oF for ; Tue, 25 May 2021 03:21:54 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by smtp4.osuosl.org (Postfix) with ESMTPS id BCF2340375 for ; Tue, 25 May 2021 03:21:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1621912913; 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=hN/qmFSWE4X1/1WyvflertyODujEppC5hAfuD6ka3nI=; b=ed8W5poqBJoXUeo4AFCqvRWNXI0zEUFSwbvumx+9GNklEkEXA3TmGqQbEfJNPbhmn2CaQI WzG1EtmhvlaHRMXGSJugmei33K0l6jECZao+zf/m2yIZs5G0r/6O7K1SpMEoVpggq8i13O y1gP2OlTyfhBG4/0MR2U1X8/vQAVcyM= Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-447-bJ9t8QZOMwuXSBnSD8iAEQ-1; Mon, 24 May 2021 23:21:51 -0400 X-MC-Unique: bJ9t8QZOMwuXSBnSD8iAEQ-1 Received: by mail-pl1-f199.google.com with SMTP id q2-20020a170902c9c2b02900f32bb3d379so11456041pld.14 for ; Mon, 24 May 2021 20:21:51 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding :content-language; bh=hN/qmFSWE4X1/1WyvflertyODujEppC5hAfuD6ka3nI=; b=eGGVUp8ZsytvUZ70XqLNqR2pstXvpi+Py+ZmvgeAF7d1+0LRlwpNZqqaX/RsOG7tLZ 6lyxBIjn/6QDCt/EatVZx+gYoYuFlPPtw6mSf64cvnSQnNd5beXJz9myI7k6JjINDkfw Uly5TwWtLcUaTlXydYJReey39nINB9hZqFDDxKnz4q0Dd0+laFckpkEEPoiP85E4P5Eu R2C1lkACqYZfh+dOLpwgI5msBcHeXoG6QYBfTLD09kUhCL/ItLBEcFZyM+NBCIL5ZoHR oDD83PJUwUR10F33GFhxipoVtb1jWdmrh74SmiPS5AdUyJr7h9efEz8z++EMbkH1dzxi KSmQ== X-Gm-Message-State: AOAM5305Ye5zdEiwGUZ/MFIZTGbqvwTFr/ICiVNp+AG2S+iAPKemFFVF agH58HOiPOfNhzj37ZpFic/2l/xJ9NmJrWR1hhlsGsdQYPJblS8ciOXDaNkjNfx0z7nTCG32a/s B/B/m8kLpwy2w2AtXEY1ZhpyEp976ORZEr8b37stzYQ== X-Received: by 2002:a17:902:f784:b029:ef:8e2f:430e with SMTP id q4-20020a170902f784b02900ef8e2f430emr28826883pln.28.1621912910735; Mon, 24 May 2021 20:21:50 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzDUbseCl+SvcFZTnoFf+aRPtbg6SWGAQweGkBDt3D+VDTBF5zU1ukESHVEzVi0j0Heq4PiHA== X-Received: by 2002:a17:902:f784:b029:ef:8e2f:430e with SMTP id q4-20020a170902f784b02900ef8e2f430emr28826854pln.28.1621912910345; Mon, 24 May 2021 20:21:50 -0700 (PDT) Received: from wangxiaodeMacBook-Air.local ([209.132.188.80]) by smtp.gmail.com with ESMTPSA id jz7sm666619pjb.32.2021.05.24.20.21.46 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 24 May 2021 20:21:49 -0700 (PDT) Subject: Re: [PATCH 3/3] virtio_blk: implement blk_mq_ops->poll() To: Stefan Hajnoczi , virtualization@lists.linux-foundation.org References: <20210520141305.355961-1-stefanha@redhat.com> <20210520141305.355961-4-stefanha@redhat.com> From: Jason Wang Message-ID: Date: Tue, 25 May 2021 11:21:41 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.10.2 MIME-Version: 1.0 In-Reply-To: <20210520141305.355961-4-stefanha@redhat.com> Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=jasowang@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Language: en-US Cc: Jens Axboe , "Michael S. Tsirkin" , linux-kernel@vger.kernel.org, linux-block@vger.kernel.org, Paolo Bonzini , Christoph Hellwig 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="gbk"; Format="flowed" Errors-To: virtualization-bounces@lists.linux-foundation.org Sender: "Virtualization" CtTaIDIwMjEvNS8yMCDPws7nMTA6MTMsIFN0ZWZhbiBIYWpub2N6aSDQtLXAOgo+IFJlcXVlc3Qg Y29tcGxldGlvbiBsYXRlbmN5IGNhbiBiZSByZWR1Y2VkIGJ5IHVzaW5nIHBvbGxpbmcgaW5zdGVh ZCBvZgo+IGlycXMuIEV2ZW4gUG9zdGVkIEludGVycnVwdHMgb3Igc2ltaWxhciBoYXJkd2FyZSBz dXBwb3J0IGRvZXNuJ3QgYmVhdAo+IHBvbGxpbmcuIFRoZSByZWFzb24gaXMgdGhhdCBkaXNhYmxp bmcgdmlydHF1ZXVlIG5vdGlmaWNhdGlvbnMgc2F2ZXMKPiBjcml0aWNhbC1wYXRoIENQVSBjeWNs ZXMgb24gdGhlIGhvc3QgYnkgc2tpcHBpbmcgaXJxIGluamVjdGlvbiBhbmQgaW4KPiB0aGUgZ3Vl c3QgYnkgc2tpcHBpbmcgdGhlIGlycSBoYW5kbGVyLiBTbyBsZXQncyBhZGQgYmxrX21xX29wcy0+ cG9sbCgpCj4gc3VwcG9ydCB0byB2aXJ0aW9fYmxrLgo+Cj4gVGhlIGFwcHJvYWNoIHRha2VuIGJ5 IHRoaXMgcGF0Y2ggZGlmZmVycyBmcm9tIHRoZSBOVk1lIGRyaXZlcidzCj4gYXBwcm9hY2guIE5W TWUgZGVkaWNhdGVzIGhhcmR3YXJlIHF1ZXVlcyB0byBwb2xsaW5nIGFuZCBzdWJtaXRzCj4gUkVR X0hJUFJJIHJlcXVlc3RzIG9ubHkgb24gdGhvc2UgcXVldWVzLiBUaGlzIHBhdGNoIGRvZXMgbm90 IHJlcXVpcmUKPiBleGNsdXNpdmUgcG9sbGluZyBxdWV1ZXMgZm9yIHZpcnRpb19ibGsuIEluc3Rl YWQsIGl0IHN3aXRjaGVzIGJldHdlZW4KPiBpcnFzIGFuZCBwb2xsaW5nIHdoZW4gb25lIG9yIG1v cmUgUkVRX0hJUFJJIHJlcXVlc3RzIGFyZSBpbiBmbGlnaHQgb24gYQo+IHZpcnRxdWV1ZS4KPgo+ IFRoaXMgaXMgcG9zc2libGUgYmVjYXVzZSB0b2dnbGluZyB2aXJ0cXVldWUgbm90aWZpY2F0aW9u cyBpcyBjaGVhcCBldmVuCj4gd2hpbGUgdGhlIHZpcnRxdWV1ZSBpcyBydW5uaW5nLiBOVk1lIGNx cyBjYW4ndCBkbyB0aGlzIGJlY2F1c2UgaXJxcyBhcmUKPiBvbmx5IGVuYWJsZWQvZGlzYWJsZWQg YXQgcXVldWUgY3JlYXRpb24gdGltZS4KPgo+IFRoaXMgdG9nZ2xpbmcgYXBwcm9hY2ggcmVxdWly ZXMgbm8gY29uZmlndXJhdGlvbi4gVGhlcmUgaXMgbm8gbmVlZCB0bwo+IGRlZGljYXRlIHF1ZXVl cyBhaGVhZCBvZiB0aW1lIG9yIHRvIHRlYWNoIHVzZXJzIGFuZCBvcmNoZXN0cmF0aW9uIHRvb2xz Cj4gaG93IHRvIHNldCB1cCBwb2xsaW5nIHF1ZXVlcy4KPgo+IFBvc3NpYmxlIGRyYXdiYWNrcyBv ZiB0aGlzIGFwcHJvYWNoOgo+Cj4gLSBIYXJkd2FyZSB2aXJ0aW9fYmxrIGltcGxlbWVudGF0aW9u cyBtYXkgZmluZCB2aXJ0cXVldWVfZGlzYWJsZV9jYigpCj4gICAgZXhwZW5zaXZlIHNpbmNlIGl0 IHJlcXVpcmVzIERNQS4KCgpOb3RlIHRoYXQgaXQncyBwcm9iYWJseSBub3QgcmVsYXRlZCB0byB0 aGUgYmVoYXZpb3Igb2YgdGhlIGRyaXZlciBidXQgCnRoZSBkZXNpZ24gb2YgdGhlIGV2ZW50IHN1 cHByZXNzaW9uIG1lY2hhbmlzbS4KCkRldmljZSBjYW4gY2hvb3NlIHRvIGlnbm9yZSB0aGUgc3Vw cHJlc3Npb24gZmxhZyBhbmQga2VlcCBzZW5kaW5nIAppbnRlcnJ1cHRzLgoKCj4gICBJZiBzdWNo IGRldmljZXMgYmVjb21lIHBvcHVsYXIgdGhlbgo+ICAgIHRoZSB2aXJ0aW9fYmxrIGRyaXZlciBj b3VsZCB1c2UgYSBzaW1pbGFyIGFwcHJvYWNoIHRvIE5WTWUgd2hlbgo+ICAgIFZJUlRJT19GX0FD Q0VTU19QTEFURk9STSBpcyBkZXRlY3RlZCBpbiB0aGUgZnV0dXJlLgo+Cj4gLSBJZiBhIGJsa19w b2xsKCkgdGhyZWFkIGlzIGRlc2NoZWR1bGVkIGl0IG5vdCBvbmx5IGh1cnRzIHBvbGxpbmcKPiAg ICBwZXJmb3JtYW5jZSBidXQgYWxzbyBkZWxheXMgY29tcGxldGlvbiBvZiBub24tUkVRX0hJUFJJ IHJlcXVlc3RzIG9uCj4gICAgdGhhdCB2aXJ0cXVldWUgc2luY2UgdnEgbm90aWZpY2F0aW9ucyBh cmUgZGlzYWJsZWQuCgoKQ2FuIHdlIHBvbGwgb25seSB3aGVuIG9ubHkgaGlnaCBwcmkgcmVxdWVz dHMgYXJlIHBlbmRpbmc/CgpJZiB0aGUgYmFja2VuZCBpcyBhIHJlbW90ZSBvbmUsIEkgdGhpbmsg dGhlIHBvbGxpbmcgbWF5IGNhdXNlIG1vcmUgY3B1IApjeWNsZXMuCgoKPgo+IFBlcmZvcm1hbmNl Ogo+Cj4gLSBCZW5jaG1hcms6IGZpbyBpb2VuZ2luZT1wdnN5bmMyIG51bWpvYnM9NCBkaXJlY3Q9 MQo+IC0gR3Vlc3Q6IDQgdkNQVXMgd2l0aCBvbmUgdmlydGlvLWJsayBkZXZpY2UgKDQgdmlydHF1 ZXVlcykKPiAtIERpc2s6IEludGVsIENvcnBvcmF0aW9uIE5WTWUgRGF0YWNlbnRlciBTU0QgW09w dGFuZV0gWzgwODY6MjcwMV0KPiAtIENQVTogSW50ZWwoUikgWGVvbihSKSBTaWx2ZXIgNDIxNCBD UFUgQCAyLjIwR0h6Cj4KPiBydyAgICAgICAgICBicyBoaXByaT0wIGhpcHJpPTEKPiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiByYW5kcmVhZCAgICA0ayAxNDksNDI2IDE3MCw3NjMg KzE0JQo+IHJhbmRyZWFkICAgMTZrIDExOCw5MzkgMTM0LDI2OSArMTIlCj4gcmFuZHJlYWQgICA2 NGsgIDM0LDg4NiAgMzQsOTA2ICAgMCUKPiByYW5kcmVhZCAgMTI4ayAgMTcsNjU1ICAxNyw2Njcg ICAwJQo+IHJhbmR3cml0ZSAgIDRrIDEzOCw1NzggMTYzLDYwMCArMTglCj4gcmFuZHdyaXRlICAx NmsgMTAyLDA4OSAxMjAsOTUwICsxOCUKPiByYW5kd3JpdGUgIDY0ayAgMzIsMzY0ICAzMiw1NjEg ICAwJQo+IHJhbmR3cml0ZSAxMjhrICAxNiwxNTQgIDE2LDIzNyAgIDAlCj4gcmVhZCAgICAgICAg NGsgMTQ2LDAzMiAxNzAsNjIwICsxNiUKPiByZWFkICAgICAgIDE2ayAxMTcsMDk3IDEzMCw0Mzcg KzExJQo+IHJlYWQgICAgICAgNjRrICAzNCw4MzQgIDM1LDAzNyAgIDAlCj4gcmVhZCAgICAgIDEy OGsgIDE3LDY4MCAgMTcsNjU4ICAgMCUKPiB3cml0ZSAgICAgICA0ayAxMzQsNTYyIDE1MSw0MjIg KzEyJQo+IHdyaXRlICAgICAgMTZrIDEwMSw3OTYgMTA3LDYwNiAgKzUlCj4gd3JpdGUgICAgICA2 NGsgIDMyLDM2NCAgMzIsNTk0ICAgMCUKPiB3cml0ZSAgICAgMTI4ayAgMTYsMjU5ICAxNiwyNjUg ICAwJQo+Cj4gTGFyZ2VyIGJsb2NrIHNpemVzIGRvIG5vdCBiZW5lZml0IGZyb20gcG9sbGluZyBh cyBtdWNoIGJ1dCB0aGUKPiBpbXByb3ZlbWVudCBpcyB3b3J0aHdoaWxlIGZvciBzbWFsbGVyIGJs b2NrIHNpemVzLgo+Cj4gU2lnbmVkLW9mZi1ieTogU3RlZmFuIEhham5vY3ppIDxzdGVmYW5oYUBy ZWRoYXQuY29tPgo+IC0tLQo+ICAgZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMgfCA5MiArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLQo+ICAgMSBmaWxlIGNoYW5nZWQsIDg3 IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9i bG9jay92aXJ0aW9fYmxrLmMgYi9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYwo+IGluZGV4IGZj MGZiMWRjZDM5OS4uZjAyNDNkY2Q3NDVhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvYmxvY2svdmly dGlvX2Jsay5jCj4gKysrIGIvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMKPiBAQCAtMjksNiAr MjksMTYgQEAgc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp2aXJ0YmxrX3dxOwo+ICAg c3RydWN0IHZpcnRpb19ibGtfdnEgewo+ICAgCXN0cnVjdCB2aXJ0cXVldWUgKnZxOwo+ICAgCXNw aW5sb2NrX3QgbG9jazsKPiArCj4gKwkvKiBOdW1iZXIgb2Ygbm9uLVJFUV9ISVBSSSByZXF1ZXN0 cyBpbiBmbGlnaHQuIFByb3RlY3RlZCBieSBsb2NrLiAqLwo+ICsJdW5zaWduZWQgaW50IG51bV9s b3ByaTsKPiArCj4gKwkvKiBOdW1iZXIgb2YgUkVRX0hJUFJJIHJlcXVlc3RzIGluIGZsaWdodC4g UHJvdGVjdGVkIGJ5IGxvY2suICovCj4gKwl1bnNpZ25lZCBpbnQgbnVtX2hpcHJpOwo+ICsKPiAr CS8qIEFyZSB2cSBub3RpZmljYXRpb25zIGVuYWJsZWQ/IFByb3RlY3RlZCBieSBsb2NrLiAqLwo+ ICsJYm9vbCBjYl9lbmFibGVkOwoKCldlIGhhZCBldmVudF9mbGFnX3NoYWRvdywgaXMgaXQgc3Vm ZmljaWVudCB0byBpbnRyb2R1Y2UgYSBuZXcgaGVscGVyIAp2aXJ0cXVldWVfY2JfaXNfZW5hYmxl ZCgpPwoKCj4gKwo+ICAgCWNoYXIgbmFtZVtWUV9OQU1FX0xFTl07Cj4gICB9IF9fX19jYWNoZWxp bmVfYWxpZ25lZF9pbl9zbXA7Cj4gICAKPiBAQCAtMTcxLDMzICsxODEsNjcgQEAgc3RhdGljIGlu bGluZSB2b2lkIHZpcnRibGtfcmVxdWVzdF9kb25lKHN0cnVjdCByZXF1ZXN0ICpyZXEpCj4gICAJ YmxrX21xX2VuZF9yZXF1ZXN0KHJlcSwgdmlydGJsa19yZXN1bHQodmJyKSk7Cj4gICB9Cj4gICAK PiAtc3RhdGljIHZvaWQgdmlydGJsa19kb25lKHN0cnVjdCB2aXJ0cXVldWUgKnZxKQo+ICsvKiBS ZXR1cm5zIHRydWUgaWYgb25lIG9yIG1vcmUgcmVxdWVzdHMgY29tcGxldGVkICovCj4gK3N0YXRp YyBib29sIHZpcnRibGtfY29tcGxldGVfcmVxdWVzdHMoc3RydWN0IHZpcnRxdWV1ZSAqdnEpCj4g ICB7Cj4gICAJc3RydWN0IHZpcnRpb19ibGsgKnZibGsgPSB2cS0+dmRldi0+cHJpdjsKPiAgIAlz dHJ1Y3QgdmlydGlvX2Jsa192cSAqdmJxID0gJnZibGstPnZxc1t2cS0+aW5kZXhdOwo+ICAgCWJv b2wgcmVxX2RvbmUgPSBmYWxzZTsKPiArCWJvb2wgbGFzdF9oaXByaV9kb25lID0gZmFsc2U7Cj4g ICAJc3RydWN0IHZpcnRibGtfcmVxICp2YnI7Cj4gICAJdW5zaWduZWQgbG9uZyBmbGFnczsKPiAg IAl1bnNpZ25lZCBpbnQgbGVuOwo+ICAgCj4gICAJc3Bpbl9sb2NrX2lycXNhdmUoJnZicS0+bG9j aywgZmxhZ3MpOwo+ICsKPiAgIAlkbyB7Cj4gLQkJdmlydHF1ZXVlX2Rpc2FibGVfY2IodnEpOwo+ ICsJCWlmICh2YnEtPmNiX2VuYWJsZWQpCj4gKwkJCXZpcnRxdWV1ZV9kaXNhYmxlX2NiKHZxKTsK PiAgIAkJd2hpbGUgKCh2YnIgPSB2aXJ0cXVldWVfZ2V0X2J1Zih2cSwgJmxlbikpICE9IE5VTEwp IHsKPiAgIAkJCXN0cnVjdCByZXF1ZXN0ICpyZXEgPSBibGtfbXFfcnFfZnJvbV9wZHUodmJyKTsK PiAgIAo+ICsJCQlpZiAocmVxLT5jbWRfZmxhZ3MgJiBSRVFfSElQUkkpIHsKPiArCQkJCWlmICgt LXZicS0+bnVtX2hpcHJpID09IDApCj4gKwkJCQkJbGFzdF9oaXByaV9kb25lID0gdHJ1ZTsKPiAr CQkJfSBlbHNlCj4gKwkJCQl2YnEtPm51bV9sb3ByaS0tOwo+ICsKPiAgIAkJCWlmIChsaWtlbHko IWJsa19zaG91bGRfZmFrZV90aW1lb3V0KHJlcS0+cSkpKQo+ICAgCQkJCWJsa19tcV9jb21wbGV0 ZV9yZXF1ZXN0KHJlcSk7Cj4gICAJCQlyZXFfZG9uZSA9IHRydWU7Cj4gICAJCX0KPiAgIAkJaWYg KHVubGlrZWx5KHZpcnRxdWV1ZV9pc19icm9rZW4odnEpKSkKPiAgIAkJCWJyZWFrOwo+IC0JfSB3 aGlsZSAoIXZpcnRxdWV1ZV9lbmFibGVfY2IodnEpKTsKPiArCj4gKwkJLyogRW5hYmxlIHZxIG5v dGlmaWNhdGlvbnMgaWYgbm9uLXBvbGxlZCByZXF1ZXN0cyByZW1haW4gKi8KPiArCQlpZiAobGFz dF9oaXByaV9kb25lICYmIHZicS0+bnVtX2xvcHJpID4gMCkgewo+ICsJCQlsYXN0X2hpcHJpX2Rv bmUgPSBmYWxzZTsKPiArCQkJdmJxLT5jYl9lbmFibGVkID0gdHJ1ZTsKPiArCQl9Cj4gKwl9IHdo aWxlICh2YnEtPmNiX2VuYWJsZWQgJiYgIXZpcnRxdWV1ZV9lbmFibGVfY2IodnEpKTsKPiAgIAo+ ICAgCS8qIEluIGNhc2UgcXVldWUgaXMgc3RvcHBlZCB3YWl0aW5nIGZvciBtb3JlIGJ1ZmZlcnMu ICovCj4gICAJaWYgKHJlcV9kb25lKQo+ICAgCQlibGtfbXFfc3RhcnRfc3RvcHBlZF9od19xdWV1 ZXModmJsay0+ZGlzay0+cXVldWUsIHRydWUpOwo+ICAgCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUo JnZicS0+bG9jaywgZmxhZ3MpOwo+ICsKPiArCXJldHVybiByZXFfZG9uZTsKPiArfQo+ICsKPiAr c3RhdGljIGludCB2aXJ0YmxrX3BvbGwoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgpCj4gK3sK PiArCXN0cnVjdCB2aXJ0aW9fYmxrICp2YmxrID0gaGN0eC0+cXVldWUtPnF1ZXVlZGF0YTsKPiAr CXN0cnVjdCB2aXJ0cXVldWUgKnZxID0gdmJsay0+dnFzW2hjdHgtPnF1ZXVlX251bV0udnE7Cj4g Kwo+ICsJaWYgKCF2aXJ0cXVldWVfbW9yZV91c2VkKHZxKSkKCgpJJ20gbm90IGZhbWlsaWFyIHdp dGggYmxvY2sgcG9sbGluZyBidXQgd2hhdCBoYXBwZW5zIGlmIGEgYnVmZmVyIGlzIG1hZGUgCmF2 YWlsYWJsZSBhZnRlciB2aXJ0cXVldWVfbW9yZV91c2VkKCkgcmV0dXJucyBmYWxzZSBoZXJlPwoK VGhhbmtzCgoKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlyZXR1cm4gdmlydGJsa19jb21wbGV0ZV9y ZXF1ZXN0cyh2cSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZpcnRibGtfZG9uZShzdHJ1Y3Qg dmlydHF1ZXVlICp2cSkKPiArewo+ICsJdmlydGJsa19jb21wbGV0ZV9yZXF1ZXN0cyh2cSk7Cj4g ICB9Cj4gICAKPiAgIHN0YXRpYyB2b2lkIHZpcnRpb19jb21taXRfcnFzKHN0cnVjdCBibGtfbXFf aHdfY3R4ICpoY3R4KQo+IEBAIC0yNzUsNiArMzE5LDE2IEBAIHN0YXRpYyBibGtfc3RhdHVzX3Qg dmlydGlvX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LAo+ICAgCX0KPiAgIAo+ ICAgCXNwaW5fbG9ja19pcnFzYXZlKCZ2YnEtPmxvY2ssIGZsYWdzKTsKPiArCj4gKwkvKiBSZS1l bmFibGUgdnEgbm90aWZpY2F0aW9ucyBpZiBmaXJzdCByZXEgaXMgbm9uLXBvbGxpbmcgKi8KPiAr CWlmICghKHJlcS0+Y21kX2ZsYWdzICYgUkVRX0hJUFJJKSAmJgo+ICsJICAgIHZicS0+bnVtX2xv cHJpID09IDAgJiYgdmJxLT5udW1faGlwcmkgPT0gMCAmJgo+ICsJICAgICF2YnEtPmNiX2VuYWJs ZWQpIHsKPiArCQkvKiBDYW4ndCByZXR1cm4gZmFsc2Ugc2luY2UgdGhlcmUgYXJlIG5vIGluLWZs aWdodCByZXFzICovCj4gKwkJdmlydHF1ZXVlX2VuYWJsZV9jYih2YnEtPnZxKTsKPiArCQl2YnEt PmNiX2VuYWJsZWQgPSB0cnVlOwo+ICsJfQo+ICsKPiAgIAllcnIgPSB2aXJ0YmxrX2FkZF9yZXEo dmJxLT52cSwgdmJyLCB2YnItPnNnLCBudW0pOwo+ICAgCWlmIChlcnIpIHsKPiAgIAkJdmlydHF1 ZXVlX2tpY2sodmJxLT52cSk7Cj4gQEAgLTI5NCw2ICszNDgsMjEgQEAgc3RhdGljIGJsa19zdGF0 dXNfdCB2aXJ0aW9fcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsCj4gICAJCX0K PiAgIAl9Cj4gICAKPiArCS8qCj4gKwkgKiBEaXNhYmxlIHZxIG5vdGlmaWNhdGlvbnMgd2hlbiBw b2xsZWQgcmVxcyBhcmUgc3VibWl0dGVkLgo+ICsJICoKPiArCSAqIFRoZSB2aXJ0cXVldWUgbG9j ayBpcyBoZWxkIHNvIHJlcSBpcyBzdGlsbCB2YWxpZCBoZXJlIGV2ZW4gaWYgdGhlCj4gKwkgKiBk ZXZpY2UgcG9sbHMgdGhlIHZpcnRxdWV1ZSBhbmQgY29tcGxldGVzIHRoZSByZXF1ZXN0IGJlZm9y ZSB3ZSBjYWxsCj4gKwkgKiB2aXJ0cXVldWVfbm90aWZ5KCkuCj4gKwkgKi8KPiArCWlmIChyZXEt PmNtZF9mbGFncyAmIFJFUV9ISVBSSSkgewo+ICsJCWlmICh2YnEtPm51bV9oaXByaSsrID09IDAg JiYgdmJxLT5jYl9lbmFibGVkKSB7Cj4gKwkJCXZpcnRxdWV1ZV9kaXNhYmxlX2NiKHZicS0+dnEp Owo+ICsJCQl2YnEtPmNiX2VuYWJsZWQgPSBmYWxzZTsKPiArCQl9Cj4gKwl9IGVsc2UKPiArCQl2 YnEtPm51bV9sb3ByaSsrOwo+ICsKPiAgIAlpZiAoYmQtPmxhc3QgJiYgdmlydHF1ZXVlX2tpY2tf cHJlcGFyZSh2YnEtPnZxKSkKPiAgIAkJbm90aWZ5ID0gdHJ1ZTsKPiAgIAlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZ2YnEtPmxvY2ssIGZsYWdzKTsKPiBAQCAtNTMzLDYgKzYwMiw5IEBAIHN0YXRp YyBpbnQgaW5pdF92cShzdHJ1Y3QgdmlydGlvX2JsayAqdmJsaykKPiAgIAlmb3IgKGkgPSAwOyBp IDwgbnVtX3ZxczsgaSsrKSB7Cj4gICAJCXNwaW5fbG9ja19pbml0KCZ2YmxrLT52cXNbaV0ubG9j ayk7Cj4gICAJCXZibGstPnZxc1tpXS52cSA9IHZxc1tpXTsKPiArCQl2YmxrLT52cXNbaV0ubnVt X2xvcHJpID0gMDsKPiArCQl2YmxrLT52cXNbaV0ubnVtX2hpcHJpID0gMDsKPiArCQl2YmxrLT52 cXNbaV0uY2JfZW5hYmxlZCA9IHRydWU7Cj4gICAJfQo+ICAgCXZibGstPm51bV92cXMgPSBudW1f dnFzOwo+ICAgCj4gQEAgLTY4MSw4ICs3NTMsMTYgQEAgc3RhdGljIGludCB2aXJ0YmxrX21hcF9x dWV1ZXMoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQpCj4gICB7Cj4gICAJc3RydWN0IHZpcnRp b19ibGsgKnZibGsgPSBzZXQtPmRyaXZlcl9kYXRhOwo+ICAgCj4gLQlyZXR1cm4gYmxrX21xX3Zp cnRpb19tYXBfcXVldWVzKCZzZXQtPm1hcFtIQ1RYX1RZUEVfREVGQVVMVF0sCj4gLQkJCQkJdmJs ay0+dmRldiwgMCk7Cj4gKwlzZXQtPm1hcFtIQ1RYX1RZUEVfREVGQVVMVF0ubnJfcXVldWVzID0g dmJsay0+bnVtX3ZxczsKPiArCWJsa19tcV92aXJ0aW9fbWFwX3F1ZXVlcygmc2V0LT5tYXBbSENU WF9UWVBFX0RFRkFVTFRdLCB2YmxrLT52ZGV2LCAwKTsKPiArCj4gKwlzZXQtPm1hcFtIQ1RYX1RZ UEVfUkVBRF0ubnJfcXVldWVzID0gMDsKPiArCj4gKwkvKiBIQ1RYX1RZUEVfREVGQVVMVCBxdWV1 ZXMgYXJlIHNoYXJlZCB3aXRoIEhDVFhfVFlQRV9QT0xMICovCj4gKwlzZXQtPm1hcFtIQ1RYX1RZ UEVfUE9MTF0ubnJfcXVldWVzID0gdmJsay0+bnVtX3ZxczsKPiArCWJsa19tcV92aXJ0aW9fbWFw X3F1ZXVlcygmc2V0LT5tYXBbSENUWF9UWVBFX1BPTExdLCB2YmxrLT52ZGV2LCAwKTsKPiArCj4g KwlyZXR1cm4gMDsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIGNvbnN0IHN0cnVjdCBibGtfbXFfb3Bz IHZpcnRpb19tcV9vcHMgPSB7Cj4gQEAgLTY5MSw2ICs3NzEsNyBAQCBzdGF0aWMgY29uc3Qgc3Ry dWN0IGJsa19tcV9vcHMgdmlydGlvX21xX29wcyA9IHsKPiAgIAkuY29tcGxldGUJPSB2aXJ0Ymxr X3JlcXVlc3RfZG9uZSwKPiAgIAkuaW5pdF9yZXF1ZXN0CT0gdmlydGJsa19pbml0X3JlcXVlc3Qs Cj4gICAJLm1hcF9xdWV1ZXMJPSB2aXJ0YmxrX21hcF9xdWV1ZXMsCj4gKwkucG9sbAkJPSB2aXJ0 YmxrX3BvbGwsCj4gICB9Owo+ICAgCj4gICBzdGF0aWMgdW5zaWduZWQgaW50IHZpcnRibGtfcXVl dWVfZGVwdGg7Cj4gQEAgLTc2OCw2ICs4NDksNyBAQCBzdGF0aWMgaW50IHZpcnRibGtfcHJvYmUo c3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCj4gICAKPiAgIAltZW1zZXQoJnZibGstPnRhZ19z ZXQsIDAsIHNpemVvZih2YmxrLT50YWdfc2V0KSk7Cj4gICAJdmJsay0+dGFnX3NldC5vcHMgPSAm dmlydGlvX21xX29wczsKPiArCXZibGstPnRhZ19zZXQubnJfbWFwcyA9IDM7IC8qIGRlZmF1bHQs IHJlYWQsIGFuZCBwb2xsICovCj4gICAJdmJsay0+dGFnX3NldC5xdWV1ZV9kZXB0aCA9IHF1ZXVl X2RlcHRoOwo+ICAgCXZibGstPnRhZ19zZXQubnVtYV9ub2RlID0gTlVNQV9OT19OT0RFOwo+ICAg CXZibGstPnRhZ19zZXQuZmxhZ3MgPSBCTEtfTVFfRl9TSE9VTERfTUVSR0U7CgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpWaXJ0dWFsaXphdGlvbiBtYWls aW5nIGxpc3QKVmlydHVhbGl6YXRpb25AbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcKaHR0cHM6 Ly9saXN0cy5saW51eGZvdW5kYXRpb24ub3JnL21haWxtYW4vbGlzdGluZm8vdmlydHVhbGl6YXRp b24=