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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5A773C433EF for ; Tue, 19 Oct 2021 08:32:30 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id D353E60EE5 for ; Tue, 19 Oct 2021 08:32:29 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org D353E60EE5 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=lists.linux-foundation.org Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 6865C40704; Tue, 19 Oct 2021 08:32:29 +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 if6r8VlRKD12; Tue, 19 Oct 2021 08:32:28 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp4.osuosl.org (Postfix) with ESMTPS id 884F4406FF; Tue, 19 Oct 2021 08:32:27 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 32D50C000F; Tue, 19 Oct 2021 08:32:27 +0000 (UTC) Received: from smtp3.osuosl.org (smtp3.osuosl.org [140.211.166.136]) by lists.linuxfoundation.org (Postfix) with ESMTP id 52FAFC000D for ; Tue, 19 Oct 2021 08:32:25 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 3BE8360896 for ; Tue, 19 Oct 2021 08:32:25 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Authentication-Results: smtp3.osuosl.org (amavisd-new); dkim=pass (1024-bit key) header.d=redhat.com Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id r_Fcay2-0Uz2 for ; Tue, 19 Oct 2021 08:32:23 +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 smtp3.osuosl.org (Postfix) with ESMTPS id 9020760812 for ; Tue, 19 Oct 2021 08:32:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1634632342; 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=OVGko/nSsfhy2b/kZJNAj48VhqVbJIKHB+N1rs5CPi0=; b=ILbiw+ci91oC189Un3pebYh5nMHYc3Te8rnxfvwDwnZ/+deTQOXOPJDZAsZABwmh06ITj3 jag3tKg8VFtlEwCtImPy8DTP3ZP3Bf7zLeJF8Gm51xFb2eD/UXpe7v7m+5ry9zh+McX6SW CGs1CNSdnvEdx3fxV4zvsX25Crq5yF0= Received: from mail-pf1-f198.google.com (mail-pf1-f198.google.com [209.85.210.198]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-553-jHDJb6KqO0yoqyW1YabReg-1; Tue, 19 Oct 2021 04:32:18 -0400 X-MC-Unique: jHDJb6KqO0yoqyW1YabReg-1 Received: by mail-pf1-f198.google.com with SMTP id y41-20020a056a00182900b0044d43d31f20so10630588pfa.11 for ; Tue, 19 Oct 2021 01:32:18 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=OVGko/nSsfhy2b/kZJNAj48VhqVbJIKHB+N1rs5CPi0=; b=pNpzynJEdieAYh9c4Lu36wxxTsfk8ad/v/axCRzffS+2fjxjSNejVryLvWvum9vgQy TrF75VrybwoavhX29fN/PBSKrJ7w7VQmltV9fLvrLO0LxyLwInz34muYWyrrDMqOTJKi Ekl30FyQSlK3xOUyeZa5/ETcXwczlnzuooY1As21PkeK01P74zOpNYJPTwPXYEZNnF9e Fv0rcpedVTx+Cljh9yr5Y6hjI3Jmk+0gr8Bzj1kLrN3rlkN0Jnz4Ky3UsT/V6mz8msNP se15IOc4Brsy3VAeKEfhMhbSX+sXzuWNiQNbeDNvl4Uc3SoSolkVqOvnJRs482mJAkLV IaqA== X-Gm-Message-State: AOAM533qxKwYdCy1ZGV4GgNVMqV1W2U3zKSy/66s38DV7M/cZIX3zGTP mho5+gm2wTtBlbypRhTqVJS93vd0WNw9sOcGGq2QLr/bI1u+Cw6X13y/03J+ZICZWjYuF7xL4jx JBqDapuIvdwWOd8CaG8IsxQ+Yq1bBINx1Y8eMre4FRA== X-Received: by 2002:a62:7b90:0:b0:44d:fa6:325 with SMTP id w138-20020a627b90000000b0044d0fa60325mr33923042pfc.1.1634632337612; Tue, 19 Oct 2021 01:32:17 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxdpXE8v36sVtNTb5MNVIvzv7bQEpPDPWw9S6Pg0KoXHysnjKxuVFKzUoHY2NLCAJSDqU0iMQ== X-Received: by 2002:a62:7b90:0:b0:44d:fa6:325 with SMTP id w138-20020a627b90000000b0044d0fa60325mr33923001pfc.1.1634632337166; Tue, 19 Oct 2021 01:32:17 -0700 (PDT) Received: from wangxiaodeMacBook-Air.local ([209.132.188.80]) by smtp.gmail.com with ESMTPSA id q14sm4499003pfk.3.2021.10.19.01.32.10 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 19 Oct 2021 01:32:16 -0700 (PDT) Subject: Re: [RFC PATCH v4 18/20] vhost: Add VhostIOVATree To: =?UTF-8?Q?Eugenio_P=c3=a9rez?= , qemu-devel@nongnu.org References: <20211001070603.307037-1-eperezma@redhat.com> <20211001070603.307037-19-eperezma@redhat.com> From: Jason Wang Message-ID: <79905c11-e313-ad60-17dc-1a47d35f12cc@redhat.com> Date: Tue, 19 Oct 2021 16:32:03 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.14.0 MIME-Version: 1.0 In-Reply-To: <20211001070603.307037-19-eperezma@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: Parav Pandit , "Michael S. Tsirkin" , Markus Armbruster , virtualization@lists.linux-foundation.org, Harpreet Singh Anand , Xiao W Wang , Stefan Hajnoczi , Eli Cohen , Eric Blake , Michael Lilja 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" CuWcqCAyMDIxLzEwLzEg5LiL5Y2IMzowNiwgRXVnZW5pbyBQw6lyZXog5YaZ6YGTOgo+IFRoaXMg dHJlZSBpcyBhYmxlIHRvIGxvb2sgZm9yIGEgdHJhbnNsYXRlZCBhZGRyZXNzIGZyb20gYW4gSU9W QSBhZGRyZXNzLgo+Cj4gQXQgZmlyc3QgZ2xhbmNlIGlzIHNpbWlsYXIgdG8gdXRpbC9pb3ZhLXRy ZWUuIEhvd2V2ZXIsIFNWUSB3b3JraW5nIG9uCj4gZGV2aWNlcyB3aXRoIGxpbWl0ZWQgSU9WQSBz cGFjZSBuZWVkIG1vcmUgY2FwYWJpbGl0aWVzLCBsaWtlIGFsbG9jYXRpbmcKPiBJT1ZBIGNodW5r cyBvciBwZXJmb3JtIHJldmVyc2UgdHJhbnNsYXRpb25zIChxZW11IGFkZHJlc3NlcyB0byBpb3Zh KS4KCgpJIGRvbid0IHNlZSBhbnkgcmV2ZXJzZSB0cmFuc2xhdGlvbiBpcyB1c2VkIGluIHRoZSBz aGFkb3cgY29kZS4gT3IgCmFueXRoaW5nIEkgbWlzc2VkPwoKCj4KPiBUaGUgYWxsb2NhdGlvbiBj YXBhYmlsaXR5LCBhcyAiYXNzaWduIGEgZnJlZSBJT1ZBIGFkZHJlc3MgdG8gdGhpcyBjaHVuawo+ IG9mIG1lbW9yeSBpbiBxZW11J3MgYWRkcmVzcyBzcGFjZSIgYWxsb3dzIHNoYWRvdyB2aXJ0cXVl dWUgdG8gY3JlYXRlIGEKPiBuZXcgYWRkcmVzcyBzcGFjZSB0aGF0IGlzIG5vdCByZXN0cmljdGVk IGJ5IGd1ZXN0J3MgYWRkcmVzc2FibGUgb25lLCBzbwo+IHdlIGNhbiBhbGxvY2F0ZSBzaGFkb3cg dnFzIHZyaW5ncyBvdXRzaWRlIG9mIGl0cyByZWFjaGFiaWxpdHksIG5vcgo+IHFlbXUncyBvbmUu IEF0IHRoZSBtb21lbnQsIHRoZSBhbGxvY2F0aW9uIGlzIGp1c3QgZG9uZSBncm93aW5nLCBub3QK PiBhbGxvd2luZyBkZWxldGlvbi4KPgo+IEEgZGlmZmVyZW50IG5hbWUgY291bGQgYmUgdXNlZCwg YnV0IG9yZGVyZWQgc2VhcmNoYWJsZSBhcnJheSBpcyBhCj4gbGl0dGxlIGJpdCBsb25nIHRob3Vn aC4KPgo+IEl0IGR1cGxpY2F0ZXMgdGhlIGFycmF5IHNvIGl0IGNhbiBzZWFyY2ggZWZmaWNpZW50 bHkgYm90aCBkaXJlY3Rpb25zLAo+IGFuZCBpdCB3aWxsIHNpZ25hbCBvdmVybGFwIGlmIGlvdmEg b3IgdGhlIHRyYW5zbGF0ZWQgYWRkcmVzcyBpcwo+IHByZXNlbnQgaW4gaXQncyBlYWNoIGFycmF5 Lgo+Cj4gVXNlIG9mIGFycmF5IHdpbGwgYmUgY2hhbmdlZCB0byB1dGlsLWlvdmEtdHJlZSBpbiBm dXR1cmUgc2VyaWVzLgoKCkFkZGluZyBQZXRlci4KCkl0IGxvb2tzIHRvIG1lIHRoZSBvbmx5IHRo aW5nIG1pc2VlZCBpcyB0aGUgaW92YSBhbGxvY2F0b3IuIEFuZCBpdCBsb29rcyAKdG8gbWUgaXQn cyBiZXR0ZXIgdG8gZGVjb3VwbGUgdGhlIGFsbG9jYXRvciBmcm9tIHRoZSBpb3ZhIHRyZWUuCgpU aGVuIHdlIGhhZDoKCjEpIGluaXRpYWxpemUgaW92YSByYW5nZQoyKSBpb3ZhID0gaW92YV9hbGxv YyhzaXplKQozKSBidWlsdCB0aGUgaW92YSB0cmVlIG1hcAo0KSBidWZmZXIgZm9yd2FyZGluZwo1 KSBpb3ZhX2ZyZWUoc2l6ZSkKCgo+Cj4gU2lnbmVkLW9mZi1ieTogRXVnZW5pbyBQw6lyZXogPGVw ZXJlem1hQHJlZGhhdC5jb20+Cj4gLS0tCj4gICBody92aXJ0aW8vdmhvc3QtaW92YS10cmVlLmgg fCAgNDAgKysrKysrKwo+ICAgaHcvdmlydGlvL3Zob3N0LWlvdmEtdHJlZS5jIHwgMjMwICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAgaHcvdmlydGlvL21lc29uLmJ1aWxk ICAgICAgIHwgICAyICstCj4gICAzIGZpbGVzIGNoYW5nZWQsIDI3MSBpbnNlcnRpb25zKCspLCAx IGRlbGV0aW9uKC0pCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgaHcvdmlydGlvL3Zob3N0LWlvdmEt dHJlZS5oCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgaHcvdmlydGlvL3Zob3N0LWlvdmEtdHJlZS5j Cj4KPiBkaWZmIC0tZ2l0IGEvaHcvdmlydGlvL3Zob3N0LWlvdmEtdHJlZS5oIGIvaHcvdmlydGlv L3Zob3N0LWlvdmEtdHJlZS5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAw MDAwLi5kMTYzYTg4OTA1Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2h3L3ZpcnRpby92aG9zdC1p b3ZhLXRyZWUuaAo+IEBAIC0wLDAgKzEsNDAgQEAKPiArLyoKPiArICogdmhvc3Qgc29mdHdhcmUg bGl2ZSBtaWdyYXRpb24gcmluZwo+ICsgKgo+ICsgKiBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiBS ZWQgSGF0LCBJbmMuIDIwMjEKPiArICogU1BEWC1GaWxlQ29udHJpYnV0b3I6IEF1dGhvcjogRXVn ZW5pbyBQw6lyZXogPGVwZXJlem1hQHJlZGhhdC5jb20+Cj4gKyAqCj4gKyAqIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBIV19W SVJUSU9fVkhPU1RfSU9WQV9UUkVFX0gKPiArI2RlZmluZSBIV19WSVJUSU9fVkhPU1RfSU9WQV9U UkVFX0gKPiArCj4gKyNpbmNsdWRlICJleGVjL21lbW9yeS5oIgo+ICsKPiArdHlwZWRlZiBzdHJ1 Y3QgVmhvc3RETUFNYXAgewo+ICsgICAgdm9pZCAqdHJhbnNsYXRlZF9hZGRyOwo+ICsgICAgaHdh ZGRyIGlvdmE7Cj4gKyAgICBod2FkZHIgc2l6ZTsgICAgICAgICAgICAgICAgLyogSW5jbHVzaXZl ICovCj4gKyAgICBJT01NVUFjY2Vzc0ZsYWdzIHBlcm07Cj4gK30gVmhvc3RETUFNYXA7Cj4gKwo+ ICt0eXBlZGVmIGVudW0gVmhvc3RETUFNYXBOZXdSQyB7Cj4gKyAgICBWSE9TVF9ETUFfTUFQX05P X1NQQUNFID0gLTMsCj4gKyAgICBWSE9TVF9ETUFfTUFQX09WRVJMQVAgPSAtMiwKPiArICAgIFZI T1NUX0RNQV9NQVBfSU5WQUxJRCA9IC0xLAo+ICsgICAgVkhPU1RfRE1BX01BUF9PSyA9IDAsCj4g K30gVmhvc3RETUFNYXBOZXdSQzsKPiArCj4gK3R5cGVkZWYgc3RydWN0IFZob3N0SU9WQVRyZWUg Vmhvc3RJT1ZBVHJlZTsKPiArCj4gK1Zob3N0SU9WQVRyZWUgKnZob3N0X2lvdmFfdHJlZV9uZXco dm9pZCk7Cj4gK3ZvaWQgdmhvc3RfaW92YV90cmVlX3VucmVmKFZob3N0SU9WQVRyZWUgKmlvdmFf cm0pOwo+ICtHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyhWaG9zdElPVkFUcmVlLCB2aG9z dF9pb3ZhX3RyZWVfdW5yZWYpOwo+ICsKPiArY29uc3QgVmhvc3RETUFNYXAgKnZob3N0X2lvdmFf dHJlZV9maW5kX2lvdmEoY29uc3QgVmhvc3RJT1ZBVHJlZSAqaW92YV9ybSwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmhvc3RETUFNYXAgKm1h cCk7Cj4gK1Zob3N0RE1BTWFwTmV3UkMgdmhvc3RfaW92YV90cmVlX2FsbG9jKFZob3N0SU9WQVRy ZWUgKmlvdmFfcm0sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZo b3N0RE1BTWFwICptYXApOwo+ICsKPiArI2VuZGlmCj4gZGlmZiAtLWdpdCBhL2h3L3ZpcnRpby92 aG9zdC1pb3ZhLXRyZWUuYyBiL2h3L3ZpcnRpby92aG9zdC1pb3ZhLXRyZWUuYwo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMC4uYzI4NGUyNzYwNwo+IC0tLSAvZGV2L251 bGwKPiArKysgYi9ody92aXJ0aW8vdmhvc3QtaW92YS10cmVlLmMKPiBAQCAtMCwwICsxLDIzMCBA QAo+ICsvKgo+ICsgKiB2aG9zdCBzb2Z0d2FyZSBsaXZlIG1pZ3JhdGlvbiByaW5nCj4gKyAqCj4g KyAqIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IFJlZCBIYXQsIEluYy4gMjAyMQo+ICsgKiBTUERY LUZpbGVDb250cmlidXRvcjogQXV0aG9yOiBFdWdlbmlvIFDDqXJleiA8ZXBlcmV6bWFAcmVkaGF0 LmNvbT4KPiArICoKPiArICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0 ZXIKPiArICovCj4gKwo+ICsjaW5jbHVkZSAicWVtdS9vc2RlcC5oIgo+ICsjaW5jbHVkZSAidmhv c3QtaW92YS10cmVlLmgiCj4gKwo+ICsjZGVmaW5lIEdfQVJSQVlfTk9UX1pFUk9fVEVSTUlOQVRF RCBmYWxzZQo+ICsjZGVmaW5lIEdfQVJSQVlfTk9UX0NMRUFSX09OX0FMTE9DIGZhbHNlCj4gKwo+ ICsjZGVmaW5lIGlvdmFfbWluIHFlbXVfcmVhbF9ob3N0X3BhZ2Vfc2l6ZQo+ICsKPiArLyoqCj4g KyAqIFZob3N0SU9WQVRyZWUsIGFibGUgdG86Cj4gKyAqIC0gVHJhbnNsYXRlIGlvdmEgYWRkcmVz cwo+ICsgKiAtIFJldmVyc2UgdHJhbnNsYXRlIGlvdmEgYWRkcmVzcyAoZnJvbSB0cmFuc2xhdGVk IHRvIGlvdmEpCj4gKyAqIC0gQWxsb2NhdGUgSU9WQSByZWdpb25zIGZvciB0cmFuc2xhdGVkIHJh bmdlIChwb3RlbnRpYWxseSBzbG93IG9wZXJhdGlvbikKPiArICoKPiArICogTm90ZSB0aGF0IGl0 IGNhbm5vdCByZW1vdmUgbm9kZXMuCj4gKyAqLwo+ICtzdHJ1Y3QgVmhvc3RJT1ZBVHJlZSB7Cj4g KyAgICAvKiBPcmRlcmVkIGFycmF5IG9mIHJldmVyc2UgdHJhbnNsYXRpb25zLCBJT1ZBIGFkZHJl c3MgdG8gcWVtdSBtZW1vcnkuICovCj4gKyAgICBHQXJyYXkgKmlvdmFfdGFkZHJfbWFwOwo+ICsK PiArICAgIC8qCj4gKyAgICAgKiBPcmRlcmVkIGFycmF5IG9mIHRyYW5zbGF0aW9ucyBmcm9tIHFl bXUgdmlydHVhbCBtZW1vcnkgYWRkcmVzcyB0byBpb3ZhCj4gKyAgICAgKi8KPiArICAgIEdBcnJh eSAqdGFkZHJfaW92YV9tYXA7Cj4gK307CgoKQW55IHJlYXNvbiBmb3IgdXNpbmcgR0FycmF5PyBJ cyBpdCBmYXN0ZXI/CgoKPiArCj4gKy8qKgo+ICsgKiBJbnNlcnRzIGFuIGVsZW1lbnQgYWZ0ZXIg YW4gZXhpc3Rpbmcgb25lIGluIGdhcnJheS4KPiArICoKPiArICogQGFycmF5ICAgICAgVGhlIGFy cmF5Cj4gKyAqIEBwcmV2X2VsZW0gIFRoZSBwcmV2aW91cyBlbGVtZW50IG9mIGFycmF5IG9mIE5V TEwgaWYgcHJlcGVuZGluZwo+ICsgKiBAbWFwICAgICAgICBUaGUgRE1BIG1hcAo+ICsgKgo+ICsg KiBJdCBwcm92aWRlcyB0aGUgYWRpdGlvbmFsIGFkdmFudGFnZSBvZiBiZWluZyB0eXBlIHNhZmUg b3Zlcgo+ICsgKiBnX2FycmF5X2luc2VydF92YWwsIHdoaWNoIGFjY2VwdHMgYSByZWZlcmVuY2Ug cG9pbnRlciBpbnN0ZWFkIG9mIGEgdmFsdWUKPiArICogd2l0aCBubyBjb21wbGFpbnMuCj4gKyAq Lwo+ICtzdGF0aWMgdm9pZCB2aG9zdF9pb3ZhX3RyZWVfaW5zZXJ0X2FmdGVyKEdBcnJheSAqYXJy YXksCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmhv c3RETUFNYXAgKnByZXZfZWxlbSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBWaG9zdERNQU1hcCAqbWFwKQo+ICt7Cj4gKyAgICBzaXplX3QgcG9zOwo+ ICsKPiArICAgIGlmICghcHJldl9lbGVtKSB7Cj4gKyAgICAgICAgcG9zID0gMDsKPiArICAgIH0g ZWxzZSB7Cj4gKyAgICAgICAgcG9zID0gcHJldl9lbGVtIC0gJmdfYXJyYXlfaW5kZXgoYXJyYXks IHR5cGVvZigqcHJldl9lbGVtKSwgMCkgKyAxOwo+ICsgICAgfQo+ICsKPiArICAgIGdfYXJyYXlf aW5zZXJ0X3ZhbChhcnJheSwgcG9zLCAqbWFwKTsKPiArfQo+ICsKPiArc3RhdGljIGdpbnQgdmhv c3RfaW92YV90cmVlX2NtcF90YWRkcihnY29uc3Rwb2ludGVyIGEsIGdjb25zdHBvaW50ZXIgYikK PiArewo+ICsgICAgY29uc3QgVmhvc3RETUFNYXAgKm0xID0gYSwgKm0yID0gYjsKPiArCj4gKyAg ICBpZiAobTEtPnRyYW5zbGF0ZWRfYWRkciA+IG0yLT50cmFuc2xhdGVkX2FkZHIgKyBtMi0+c2l6 ZSkgewo+ICsgICAgICAgIHJldHVybiAxOwo+ICsgICAgfQo+ICsKPiArICAgIGlmIChtMS0+dHJh bnNsYXRlZF9hZGRyICsgbTEtPnNpemUgPCBtMi0+dHJhbnNsYXRlZF9hZGRyKSB7Cj4gKyAgICAg ICAgcmV0dXJuIC0xOwo+ICsgICAgfQo+ICsKPiArICAgIC8qIE92ZXJsYXBwZWQgKi8KPiArICAg IHJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKioKPiArICogRmluZCB0aGUgcHJldmlvdXMgbm9kZSB0 byBhIGdpdmVuIGlvdmEKPiArICoKPiArICogQGFycmF5ICBUaGUgYXNjZW5kaW5nIG9yZGVyZWQt YnktdHJhbnNsYXRlZC1hZGRyIGFycmF5IG9mIFZob3N0RE1BTWFwCj4gKyAqIEBtYXAgICAgVGhl IG1hcCB0byBpbnNlcnQKPiArICogQHByZXYgICBSZXR1cm5lZCBsb2NhdGlvbiBvZiB0aGUgcHJl dmlvdXMgbWFwCj4gKyAqCj4gKyAqIFJldHVybiBWSE9TVF9ETUFfTUFQX09LIGlmIGV2ZXJ5dGhp bmcgd2VudCB3ZWxsLCBvciBWSE9TVF9ETUFfTUFQX09WRVJMQVAgaWYKPiArICogaXQgYWxyZWFk eSBleGlzdHMuIEl0IGlzIG9rIHRvIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGEgZ2l2 ZW4gcmFuZ2UKPiArICogZXhpc3RzLCBidXQgaXQgd2lsbCB1c2UgYSBsaW5lYXIgc2VhcmNoLgo+ ICsgKgo+ICsgKiBUT0RPOiBXZSBjYW4gdXNlIGJzZWFyY2ggdG8gbG9jYXRlIHRoZSBlbnRyeSBp ZiB3ZSBzYXZlIHRoZSBzdGF0ZSBpbiB0aGUKPiArICogbmVlZGxlLCBrbm93aW5nIHRoYXQgdGhl IG5lZWRsZSBpcyBhbHdheXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvCj4gKyAqIGNvbXBhcmVfZnVu Yy4KPiArICovCj4gK3N0YXRpYyBWaG9zdERNQU1hcE5ld1JDIHZob3N0X2lvdmFfdHJlZV9maW5k X3ByZXYoY29uc3QgR0FycmF5ICphcnJheSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBHQ29tcGFyZUZ1bmMgY29tcGFyZV9mdW5jLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZob3N0 RE1BTWFwICptYXAsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgVmhvc3RETUFNYXAgKipwcmV2KQo+ICt7Cj4gKyAgICBzaXplX3QgaTsK PiArICAgIGludCByOwo+ICsKPiArICAgICpwcmV2ID0gTlVMTDsKPiArICAgIGZvciAoaSA9IDA7 IGkgPCBhcnJheS0+bGVuOyArK2kpIHsKPiArICAgICAgICByID0gY29tcGFyZV9mdW5jKG1hcCwg JmdfYXJyYXlfaW5kZXgoYXJyYXksIHR5cGVvZigqbWFwKSwgaSkpOwo+ICsgICAgICAgIGlmIChy ID09IDApIHsKPiArICAgICAgICAgICAgcmV0dXJuIFZIT1NUX0RNQV9NQVBfT1ZFUkxBUDsKPiAr ICAgICAgICB9Cj4gKyAgICAgICAgaWYgKHIgPCAwKSB7Cj4gKyAgICAgICAgICAgIHJldHVybiBW SE9TVF9ETUFfTUFQX09LOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgKnByZXYgPSAmZ19h cnJheV9pbmRleChhcnJheSwgdHlwZW9mKCoqcHJldiksIGkpOwo+ICsgICAgfQo+ICsKPiArICAg IHJldHVybiBWSE9TVF9ETUFfTUFQX09LOwo+ICt9Cj4gKwo+ICsvKioKPiArICogQ3JlYXRlIGEg bmV3IElPVkEgdHJlZQo+ICsgKgo+ICsgKiBSZXR1cm5zIHRoZSBuZXcgSU9WQSB0cmVlCj4gKyAq Lwo+ICtWaG9zdElPVkFUcmVlICp2aG9zdF9pb3ZhX3RyZWVfbmV3KHZvaWQpCj4gK3sKCgpTbyBJ IHRoaW5rIGl0IG5lZWRzIHRvIGJlIGluaXRpYWxpemVkIHdpdGggdGhlIHJhbmdlIHdlIGdldCBm cm9tIApnZXRfaW92YV9yYW5nZSgpLgoKVGhhbmtzCgoKPiArICAgIFZob3N0SU9WQVRyZWUgKnRy ZWUgPSBnX25ldyhWaG9zdElPVkFUcmVlLCAxKTsKPiArICAgIHRyZWUtPmlvdmFfdGFkZHJfbWFw ID0gZ19hcnJheV9uZXcoR19BUlJBWV9OT1RfWkVST19URVJNSU5BVEVELAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX0FSUkFZX05PVF9DTEVBUl9PTl9BTExPQywK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKFZob3N0RE1B TWFwKSk7Cj4gKyAgICB0cmVlLT50YWRkcl9pb3ZhX21hcCA9IGdfYXJyYXlfbmV3KEdfQVJSQVlf Tk9UX1pFUk9fVEVSTUlOQVRFRCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgR19BUlJBWV9OT1RfQ0xFQVJfT05fQUxMT0MsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVvZihWaG9zdERNQU1hcCkpOwo+ICsgICAgcmV0dXJuIHRy ZWU7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBEZXN0cm95IGFuIElPVkEgdHJlZQo+ICsgKgo+ICsg KiBAdHJlZSAgVGhlIGlvdmEgdHJlZQo+ICsgKi8KPiArdm9pZCB2aG9zdF9pb3ZhX3RyZWVfdW5y ZWYoVmhvc3RJT1ZBVHJlZSAqdHJlZSkKPiArewo+ICsgICAgZ19hcnJheV91bnJlZihnX3N0ZWFs X3BvaW50ZXIoJnRyZWUtPmlvdmFfdGFkZHJfbWFwKSk7Cj4gKyAgICBnX2FycmF5X3VucmVmKGdf c3RlYWxfcG9pbnRlcigmdHJlZS0+dGFkZHJfaW92YV9tYXApKTsKPiArfQo+ICsKPiArLyoqCj4g KyAqIEZpbmQgdGhlIElPVkEgYWRkcmVzcyBzdG9yZWQgZnJvbSBhIG1lbW9yeSBhZGRyZXNzCj4g KyAqCj4gKyAqIEB0cmVlICAgICBUaGUgaW92YSB0cmVlCj4gKyAqIEBtYXAgICAgICBUaGUgbWFw IHdpdGggdGhlIG1lbW9yeSBhZGRyZXNzCj4gKyAqCj4gKyAqIFJldHVybiB0aGUgc3RvcmVkIG1h cHBpbmcsIG9yIE5VTEwgaWYgbm90IGZvdW5kLgo+ICsgKi8KPiArY29uc3QgVmhvc3RETUFNYXAg KnZob3N0X2lvdmFfdHJlZV9maW5kX2lvdmEoY29uc3QgVmhvc3RJT1ZBVHJlZSAqdHJlZSwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmhvc3RE TUFNYXAgKm1hcCkKPiArewo+ICsgICAgLyoKPiArICAgICAqIFRoaXMgY2FuIGJlIHJlcGxhY2Vk IHdpdGggZ19hcnJheV9iaW5hcnlfc2VhcmNoIChTaW5jZSBnbGliIDIuNjIpIHdoZW4KPiArICAg ICAqIHRoYXQgdmVyc2lvbiBiZWNvbWUgY29tbW9uIGVub3VnaC4KPiArICAgICAqLwo+ICsgICAg cmV0dXJuIGJzZWFyY2gobWFwLCB0cmVlLT50YWRkcl9pb3ZhX21hcC0+ZGF0YSwgdHJlZS0+dGFk ZHJfaW92YV9tYXAtPmxlbiwKPiArICAgICAgICAgICAgICAgICAgIHNpemVvZigqbWFwKSwgdmhv c3RfaW92YV90cmVlX2NtcF90YWRkcik7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIHZob3N0X2lv dmFfdHJlZV9maW5kX2lvdmFfaG9sZShjb25zdCBHQXJyYXkgKmlvdmFfbWFwLAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmhvc3RETUFNYXAgKm1h cCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZo b3N0RE1BTWFwICoqcHJldl9lbGVtKQo+ICt7Cj4gKyAgICBzaXplX3QgaTsKPiArICAgIGh3YWRk ciBpb3ZhID0gaW92YV9taW47Cj4gKwo+ICsgICAgKnByZXZfZWxlbSA9IE5VTEw7Cj4gKyAgICBm b3IgKGkgPSAwOyBpIDwgaW92YV9tYXAtPmxlbjsgaSsrKSB7Cj4gKyAgICAgICAgY29uc3QgVmhv c3RETUFNYXAgKm5leHQgPSAmZ19hcnJheV9pbmRleChpb3ZhX21hcCwgdHlwZW9mKCpuZXh0KSwg aSk7Cj4gKyAgICAgICAgaHdhZGRyIGhvbGVfZW5kID0gbmV4dC0+aW92YTsKPiArICAgICAgICBp ZiAobWFwLT5zaXplIDwgaG9sZV9lbmQgLSBpb3ZhKSB7Cj4gKyAgICAgICAgICAgIHJldHVybiB0 cnVlOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgaW92YSA9IG5leHQtPmlvdmEgKyBuZXh0 LT5zaXplICsgMTsKPiArICAgICAgICAqcHJldl9lbGVtID0gbmV4dDsKPiArICAgIH0KPiArCj4g KyAgICByZXR1cm4gKChod2FkZHIpLTEgLSBpb3ZhKSA+IGlvdmFfbWFwLT5sZW47Cj4gK30KPiAr Cj4gKy8qKgo+ICsgKiBBbGxvY2F0ZSBhIG5ldyBtYXBwaW5nCj4gKyAqCj4gKyAqIEB0cmVlICBU aGUgaW92YSB0cmVlCj4gKyAqIEBtYXAgICBUaGUgaW92YSBtYXAKPiArICoKPiArICogUmV0dXJu czoKPiArICogLSBWSE9TVF9ETUFfTUFQX09LIGlmIHRoZSBtYXAgZml0cyBpbiB0aGUgY29udGFp bmVyCj4gKyAqIC0gVkhPU1RfRE1BX01BUF9JTlZBTElEIGlmIHRoZSBtYXAgZG9lcyBub3QgbWFr ZSBzZW5zZSAobGlrZSBzaXplIG92ZXJmbG93KQo+ICsgKiAtIFZIT1NUX0RNQV9NQVBfT1ZFUkxB UCBpZiB0aGUgdHJlZSBhbHJlYWR5IGNvbnRhaW5zIHRoYXQgbWFwCj4gKyAqIC0gVkhPU1RfRE1B X01BUF9OT19TUEFDRSBpZiBpb3ZhX3JtIGNhbm5vdCBhbGxvY2F0ZSBtb3JlIHNwYWNlLgo+ICsg Kgo+ICsgKiBJdCByZXR1cm5zIGFzc2lnbmF0ZWQgaW92YSBpbiBtYXAtPmlvdmEgaWYgcmV0dXJu IHZhbHVlIGlzIFZIT1NUX0RNQV9NQVBfT0suCj4gKyAqLwo+ICtWaG9zdERNQU1hcE5ld1JDIHZo b3N0X2lvdmFfdHJlZV9hbGxvYyhWaG9zdElPVkFUcmVlICp0cmVlLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBWaG9zdERNQU1hcCAqbWFwKQo+ICt7Cj4gKyAgICBj b25zdCBWaG9zdERNQU1hcCAqcWVtdV9wcmV2LCAqaW92YV9wcmV2Owo+ICsgICAgaW50IGZpbmRf cHJldl9yYzsKPiArICAgIGJvb2wgZml0Owo+ICsKPiArICAgIGlmIChtYXAtPnRyYW5zbGF0ZWRf YWRkciArIG1hcC0+c2l6ZSA8IG1hcC0+dHJhbnNsYXRlZF9hZGRyIHx8Cj4gKyAgICAgICAgbWFw LT5pb3ZhICsgbWFwLT5zaXplIDwgbWFwLT5pb3ZhIHx8IG1hcC0+cGVybSA9PSBJT01NVV9OT05F KSB7Cj4gKyAgICAgICAgcmV0dXJuIFZIT1NUX0RNQV9NQVBfSU5WQUxJRDsKPiArICAgIH0KPiAr Cj4gKyAgICAvKiBTZWFyY2ggZm9yIGEgaG9sZSBpbiBpb3ZhIHNwYWNlIGJpZyBlbm91Z2ggKi8K PiArICAgIGZpdCA9IHZob3N0X2lvdmFfdHJlZV9maW5kX2lvdmFfaG9sZSh0cmVlLT5pb3ZhX3Rh ZGRyX21hcCwgbWFwLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZpb3ZhX3ByZXYpOwo+ICsgICAgaWYgKCFmaXQpIHsKPiArICAgICAgICByZXR1cm4gVkhPU1Rf RE1BX01BUF9OT19TUEFDRTsKPiArICAgIH0KPiArCj4gKyAgICBtYXAtPmlvdmEgPSBpb3ZhX3By ZXYgPyAoaW92YV9wcmV2LT5pb3ZhICsgaW92YV9wcmV2LT5zaXplKSArIDEgOiBpb3ZhX21pbjsK PiArICAgIGZpbmRfcHJldl9yYyA9IHZob3N0X2lvdmFfdHJlZV9maW5kX3ByZXYodHJlZS0+dGFk ZHJfaW92YV9tYXAsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZob3N0X2lvdmFfdHJlZV9jbXBfdGFkZHIsIG1hcCwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJnFlbXVfcHJldik7Cj4gKyAgICBpZiAoZmluZF9w cmV2X3JjID09IFZIT1NUX0RNQV9NQVBfT1ZFUkxBUCkgewo+ICsgICAgICAgIHJldHVybiBWSE9T VF9ETUFfTUFQX09WRVJMQVA7Cj4gKyAgICB9Cj4gKwo+ICsgICAgdmhvc3RfaW92YV90cmVlX2lu c2VydF9hZnRlcih0cmVlLT5pb3ZhX3RhZGRyX21hcCwgaW92YV9wcmV2LCBtYXApOwo+ICsgICAg dmhvc3RfaW92YV90cmVlX2luc2VydF9hZnRlcih0cmVlLT50YWRkcl9pb3ZhX21hcCwgcWVtdV9w cmV2LCBtYXApOwo+ICsgICAgcmV0dXJuIFZIT1NUX0RNQV9NQVBfT0s7Cj4gK30KPiBkaWZmIC0t Z2l0IGEvaHcvdmlydGlvL21lc29uLmJ1aWxkIGIvaHcvdmlydGlvL21lc29uLmJ1aWxkCj4gaW5k ZXggOGI1YTAyMjVmZS4uY2IzMDZiODNjNiAxMDA2NDQKPiAtLS0gYS9ody92aXJ0aW8vbWVzb24u YnVpbGQKPiArKysgYi9ody92aXJ0aW8vbWVzb24uYnVpbGQKPiBAQCAtMTEsNyArMTEsNyBAQCBz b2Z0bW11X3NzLmFkZCh3aGVuOiAnQ09ORklHX0FMTCcsIGlmX3RydWU6IGZpbGVzKCd2aG9zdC1z dHViLmMnKSkKPiAgIAo+ICAgdmlydGlvX3NzID0gc3Muc291cmNlX3NldCgpCj4gICB2aXJ0aW9f c3MuYWRkKGZpbGVzKCd2aXJ0aW8uYycpKQo+IC12aXJ0aW9fc3MuYWRkKHdoZW46ICdDT05GSUdf VkhPU1QnLCBpZl90cnVlOiBmaWxlcygndmhvc3QuYycsICd2aG9zdC1iYWNrZW5kLmMnLCAndmhv c3Qtc2hhZG93LXZpcnRxdWV1ZS5jJykpCj4gK3ZpcnRpb19zcy5hZGQod2hlbjogJ0NPTkZJR19W SE9TVCcsIGlmX3RydWU6IGZpbGVzKCd2aG9zdC5jJywgJ3Zob3N0LWJhY2tlbmQuYycsICd2aG9z dC1zaGFkb3ctdmlydHF1ZXVlLmMnLCAndmhvc3QtaW92YS10cmVlLmMnKSkKPiAgIHZpcnRpb19z cy5hZGQod2hlbjogJ0NPTkZJR19WSE9TVF9VU0VSJywgaWZfdHJ1ZTogZmlsZXMoJ3Zob3N0LXVz ZXIuYycpKQo+ICAgdmlydGlvX3NzLmFkZCh3aGVuOiAnQ09ORklHX1ZIT1NUX1ZEUEEnLCBpZl90 cnVlOiBmaWxlcygndmhvc3QtdmRwYS5jJykpCj4gICB2aXJ0aW9fc3MuYWRkKHdoZW46ICdDT05G SUdfVklSVElPX0JBTExPT04nLCBpZl90cnVlOiBmaWxlcygndmlydGlvLWJhbGxvb24uYycpKQoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KVmlydHVhbGl6 YXRpb24gbWFpbGluZyBsaXN0ClZpcnR1YWxpemF0aW9uQGxpc3RzLmxpbnV4LWZvdW5kYXRpb24u b3JnCmh0dHBzOi8vbGlzdHMubGludXhmb3VuZGF0aW9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3Zp cnR1YWxpemF0aW9u 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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9322FC433EF for ; Tue, 19 Oct 2021 08:33:57 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (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 1467A60EE5 for ; Tue, 19 Oct 2021 08:33:57 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 1467A60EE5 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=nongnu.org Received: from localhost ([::1]:59526 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mckZI-0002ef-2r for qemu-devel@archiver.kernel.org; Tue, 19 Oct 2021 04:33:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43804) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mckXt-0001sG-LX for qemu-devel@nongnu.org; Tue, 19 Oct 2021 04:32:29 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:27325) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mckXn-0001LC-FN for qemu-devel@nongnu.org; Tue, 19 Oct 2021 04:32:29 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1634632342; 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=OVGko/nSsfhy2b/kZJNAj48VhqVbJIKHB+N1rs5CPi0=; b=ILbiw+ci91oC189Un3pebYh5nMHYc3Te8rnxfvwDwnZ/+deTQOXOPJDZAsZABwmh06ITj3 jag3tKg8VFtlEwCtImPy8DTP3ZP3Bf7zLeJF8Gm51xFb2eD/UXpe7v7m+5ry9zh+McX6SW CGs1CNSdnvEdx3fxV4zvsX25Crq5yF0= Received: from mail-pf1-f199.google.com (mail-pf1-f199.google.com [209.85.210.199]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-509-x-ZS-57sNhainmsNbMUClw-1; Tue, 19 Oct 2021 04:32:18 -0400 X-MC-Unique: x-ZS-57sNhainmsNbMUClw-1 Received: by mail-pf1-f199.google.com with SMTP id j3-20020a056a00234300b0044d605e3e0fso10471130pfj.21 for ; Tue, 19 Oct 2021 01:32:18 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=OVGko/nSsfhy2b/kZJNAj48VhqVbJIKHB+N1rs5CPi0=; b=l5dMvlo8FXMwUugcAZg+j0mn54wSN8e0Q2CsN0J0IRhnSnyFpMvAtlyxYPaORdCxXD VubGN03kVM7cZ8jGDNSnvm1AhO4glsTrlLCByoeyyMt5tCuPXfd15nHHprJ4FZ/wu1+2 wMRNUdbzQb7aH+t/tzUMKDgg8qcbzP91SNrnuJ253eVOELWKR+dmexNd/pSiaMDJJ3nX HKVilidb14j0kjQUEi6fbneJTQ1wgR0pCAKlPaIs/BRT+kBafz9MCEjdAiwaCf57V4Gp HH78CzoOGCLUJA1eeqdTFeZmZ6hp2ZnDpEaM7SZOcC8TsQBAcZruYeB4wCzhdjXeLr6A Zn1g== X-Gm-Message-State: AOAM532h+uxW4R5/fAhzXMzMX0Y0fbFyUSBqf0fCWZSfst4u6/EZPesJ ua0s6+m7wEpKZuVFjSHObfmwkrFlAv5MGrCiUsbqvOcRHrQR/FpwcNU/7oZL63T0Cm59oCi5dbR WBm5Nlwt+voJuqKs= X-Received: by 2002:a62:7b90:0:b0:44d:fa6:325 with SMTP id w138-20020a627b90000000b0044d0fa60325mr33923040pfc.1.1634632337612; Tue, 19 Oct 2021 01:32:17 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxdpXE8v36sVtNTb5MNVIvzv7bQEpPDPWw9S6Pg0KoXHysnjKxuVFKzUoHY2NLCAJSDqU0iMQ== X-Received: by 2002:a62:7b90:0:b0:44d:fa6:325 with SMTP id w138-20020a627b90000000b0044d0fa60325mr33923001pfc.1.1634632337166; Tue, 19 Oct 2021 01:32:17 -0700 (PDT) Received: from wangxiaodeMacBook-Air.local ([209.132.188.80]) by smtp.gmail.com with ESMTPSA id q14sm4499003pfk.3.2021.10.19.01.32.10 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 19 Oct 2021 01:32:16 -0700 (PDT) Subject: Re: [RFC PATCH v4 18/20] vhost: Add VhostIOVATree To: =?UTF-8?Q?Eugenio_P=c3=a9rez?= , qemu-devel@nongnu.org References: <20211001070603.307037-1-eperezma@redhat.com> <20211001070603.307037-19-eperezma@redhat.com> From: Jason Wang Message-ID: <79905c11-e313-ad60-17dc-1a47d35f12cc@redhat.com> Date: Tue, 19 Oct 2021 16:32:03 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.14.0 MIME-Version: 1.0 In-Reply-To: <20211001070603.307037-19-eperezma@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-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US Received-SPF: pass client-ip=216.205.24.124; envelope-from=jasowang@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -28 X-Spam_score: -2.9 X-Spam_bar: -- X-Spam_report: (-2.9 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.049, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, NICE_REPLY_A=-0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Parav Pandit , Juan Quintela , "Michael S. Tsirkin" , Markus Armbruster , Peter Xu , virtualization@lists.linux-foundation.org, Harpreet Singh Anand , Xiao W Wang , Stefan Hajnoczi , Eli Cohen , Eric Blake , Michael Lilja , Stefano Garzarella Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" 在 2021/10/1 下午3:06, Eugenio Pérez 写道: > This tree is able to look for a translated address from an IOVA address. > > At first glance is similar to util/iova-tree. However, SVQ working on > devices with limited IOVA space need more capabilities, like allocating > IOVA chunks or perform reverse translations (qemu addresses to iova). I don't see any reverse translation is used in the shadow code. Or anything I missed? > > The allocation capability, as "assign a free IOVA address to this chunk > of memory in qemu's address space" allows shadow virtqueue to create a > new address space that is not restricted by guest's addressable one, so > we can allocate shadow vqs vrings outside of its reachability, nor > qemu's one. At the moment, the allocation is just done growing, not > allowing deletion. > > A different name could be used, but ordered searchable array is a > little bit long though. > > It duplicates the array so it can search efficiently both directions, > and it will signal overlap if iova or the translated address is > present in it's each array. > > Use of array will be changed to util-iova-tree in future series. Adding Peter. It looks to me the only thing miseed is the iova allocator. And it looks to me it's better to decouple the allocator from the iova tree. Then we had: 1) initialize iova range 2) iova = iova_alloc(size) 3) built the iova tree map 4) buffer forwarding 5) iova_free(size) > > Signed-off-by: Eugenio Pérez > --- > hw/virtio/vhost-iova-tree.h | 40 +++++++ > hw/virtio/vhost-iova-tree.c | 230 ++++++++++++++++++++++++++++++++++++ > hw/virtio/meson.build | 2 +- > 3 files changed, 271 insertions(+), 1 deletion(-) > create mode 100644 hw/virtio/vhost-iova-tree.h > create mode 100644 hw/virtio/vhost-iova-tree.c > > diff --git a/hw/virtio/vhost-iova-tree.h b/hw/virtio/vhost-iova-tree.h > new file mode 100644 > index 0000000000..d163a88905 > --- /dev/null > +++ b/hw/virtio/vhost-iova-tree.h > @@ -0,0 +1,40 @@ > +/* > + * vhost software live migration ring > + * > + * SPDX-FileCopyrightText: Red Hat, Inc. 2021 > + * SPDX-FileContributor: Author: Eugenio Pérez > + * > + * SPDX-License-Identifier: GPL-2.0-or-later > + */ > + > +#ifndef HW_VIRTIO_VHOST_IOVA_TREE_H > +#define HW_VIRTIO_VHOST_IOVA_TREE_H > + > +#include "exec/memory.h" > + > +typedef struct VhostDMAMap { > + void *translated_addr; > + hwaddr iova; > + hwaddr size; /* Inclusive */ > + IOMMUAccessFlags perm; > +} VhostDMAMap; > + > +typedef enum VhostDMAMapNewRC { > + VHOST_DMA_MAP_NO_SPACE = -3, > + VHOST_DMA_MAP_OVERLAP = -2, > + VHOST_DMA_MAP_INVALID = -1, > + VHOST_DMA_MAP_OK = 0, > +} VhostDMAMapNewRC; > + > +typedef struct VhostIOVATree VhostIOVATree; > + > +VhostIOVATree *vhost_iova_tree_new(void); > +void vhost_iova_tree_unref(VhostIOVATree *iova_rm); > +G_DEFINE_AUTOPTR_CLEANUP_FUNC(VhostIOVATree, vhost_iova_tree_unref); > + > +const VhostDMAMap *vhost_iova_tree_find_iova(const VhostIOVATree *iova_rm, > + const VhostDMAMap *map); > +VhostDMAMapNewRC vhost_iova_tree_alloc(VhostIOVATree *iova_rm, > + VhostDMAMap *map); > + > +#endif > diff --git a/hw/virtio/vhost-iova-tree.c b/hw/virtio/vhost-iova-tree.c > new file mode 100644 > index 0000000000..c284e27607 > --- /dev/null > +++ b/hw/virtio/vhost-iova-tree.c > @@ -0,0 +1,230 @@ > +/* > + * vhost software live migration ring > + * > + * SPDX-FileCopyrightText: Red Hat, Inc. 2021 > + * SPDX-FileContributor: Author: Eugenio Pérez > + * > + * SPDX-License-Identifier: GPL-2.0-or-later > + */ > + > +#include "qemu/osdep.h" > +#include "vhost-iova-tree.h" > + > +#define G_ARRAY_NOT_ZERO_TERMINATED false > +#define G_ARRAY_NOT_CLEAR_ON_ALLOC false > + > +#define iova_min qemu_real_host_page_size > + > +/** > + * VhostIOVATree, able to: > + * - Translate iova address > + * - Reverse translate iova address (from translated to iova) > + * - Allocate IOVA regions for translated range (potentially slow operation) > + * > + * Note that it cannot remove nodes. > + */ > +struct VhostIOVATree { > + /* Ordered array of reverse translations, IOVA address to qemu memory. */ > + GArray *iova_taddr_map; > + > + /* > + * Ordered array of translations from qemu virtual memory address to iova > + */ > + GArray *taddr_iova_map; > +}; Any reason for using GArray? Is it faster? > + > +/** > + * Inserts an element after an existing one in garray. > + * > + * @array The array > + * @prev_elem The previous element of array of NULL if prepending > + * @map The DMA map > + * > + * It provides the aditional advantage of being type safe over > + * g_array_insert_val, which accepts a reference pointer instead of a value > + * with no complains. > + */ > +static void vhost_iova_tree_insert_after(GArray *array, > + const VhostDMAMap *prev_elem, > + const VhostDMAMap *map) > +{ > + size_t pos; > + > + if (!prev_elem) { > + pos = 0; > + } else { > + pos = prev_elem - &g_array_index(array, typeof(*prev_elem), 0) + 1; > + } > + > + g_array_insert_val(array, pos, *map); > +} > + > +static gint vhost_iova_tree_cmp_taddr(gconstpointer a, gconstpointer b) > +{ > + const VhostDMAMap *m1 = a, *m2 = b; > + > + if (m1->translated_addr > m2->translated_addr + m2->size) { > + return 1; > + } > + > + if (m1->translated_addr + m1->size < m2->translated_addr) { > + return -1; > + } > + > + /* Overlapped */ > + return 0; > +} > + > +/** > + * Find the previous node to a given iova > + * > + * @array The ascending ordered-by-translated-addr array of VhostDMAMap > + * @map The map to insert > + * @prev Returned location of the previous map > + * > + * Return VHOST_DMA_MAP_OK if everything went well, or VHOST_DMA_MAP_OVERLAP if > + * it already exists. It is ok to use this function to check if a given range > + * exists, but it will use a linear search. > + * > + * TODO: We can use bsearch to locate the entry if we save the state in the > + * needle, knowing that the needle is always the first argument to > + * compare_func. > + */ > +static VhostDMAMapNewRC vhost_iova_tree_find_prev(const GArray *array, > + GCompareFunc compare_func, > + const VhostDMAMap *map, > + const VhostDMAMap **prev) > +{ > + size_t i; > + int r; > + > + *prev = NULL; > + for (i = 0; i < array->len; ++i) { > + r = compare_func(map, &g_array_index(array, typeof(*map), i)); > + if (r == 0) { > + return VHOST_DMA_MAP_OVERLAP; > + } > + if (r < 0) { > + return VHOST_DMA_MAP_OK; > + } > + > + *prev = &g_array_index(array, typeof(**prev), i); > + } > + > + return VHOST_DMA_MAP_OK; > +} > + > +/** > + * Create a new IOVA tree > + * > + * Returns the new IOVA tree > + */ > +VhostIOVATree *vhost_iova_tree_new(void) > +{ So I think it needs to be initialized with the range we get from get_iova_range(). Thanks > + VhostIOVATree *tree = g_new(VhostIOVATree, 1); > + tree->iova_taddr_map = g_array_new(G_ARRAY_NOT_ZERO_TERMINATED, > + G_ARRAY_NOT_CLEAR_ON_ALLOC, > + sizeof(VhostDMAMap)); > + tree->taddr_iova_map = g_array_new(G_ARRAY_NOT_ZERO_TERMINATED, > + G_ARRAY_NOT_CLEAR_ON_ALLOC, > + sizeof(VhostDMAMap)); > + return tree; > +} > + > +/** > + * Destroy an IOVA tree > + * > + * @tree The iova tree > + */ > +void vhost_iova_tree_unref(VhostIOVATree *tree) > +{ > + g_array_unref(g_steal_pointer(&tree->iova_taddr_map)); > + g_array_unref(g_steal_pointer(&tree->taddr_iova_map)); > +} > + > +/** > + * Find the IOVA address stored from a memory address > + * > + * @tree The iova tree > + * @map The map with the memory address > + * > + * Return the stored mapping, or NULL if not found. > + */ > +const VhostDMAMap *vhost_iova_tree_find_iova(const VhostIOVATree *tree, > + const VhostDMAMap *map) > +{ > + /* > + * This can be replaced with g_array_binary_search (Since glib 2.62) when > + * that version become common enough. > + */ > + return bsearch(map, tree->taddr_iova_map->data, tree->taddr_iova_map->len, > + sizeof(*map), vhost_iova_tree_cmp_taddr); > +} > + > +static bool vhost_iova_tree_find_iova_hole(const GArray *iova_map, > + const VhostDMAMap *map, > + const VhostDMAMap **prev_elem) > +{ > + size_t i; > + hwaddr iova = iova_min; > + > + *prev_elem = NULL; > + for (i = 0; i < iova_map->len; i++) { > + const VhostDMAMap *next = &g_array_index(iova_map, typeof(*next), i); > + hwaddr hole_end = next->iova; > + if (map->size < hole_end - iova) { > + return true; > + } > + > + iova = next->iova + next->size + 1; > + *prev_elem = next; > + } > + > + return ((hwaddr)-1 - iova) > iova_map->len; > +} > + > +/** > + * Allocate a new mapping > + * > + * @tree The iova tree > + * @map The iova map > + * > + * Returns: > + * - VHOST_DMA_MAP_OK if the map fits in the container > + * - VHOST_DMA_MAP_INVALID if the map does not make sense (like size overflow) > + * - VHOST_DMA_MAP_OVERLAP if the tree already contains that map > + * - VHOST_DMA_MAP_NO_SPACE if iova_rm cannot allocate more space. > + * > + * It returns assignated iova in map->iova if return value is VHOST_DMA_MAP_OK. > + */ > +VhostDMAMapNewRC vhost_iova_tree_alloc(VhostIOVATree *tree, > + VhostDMAMap *map) > +{ > + const VhostDMAMap *qemu_prev, *iova_prev; > + int find_prev_rc; > + bool fit; > + > + if (map->translated_addr + map->size < map->translated_addr || > + map->iova + map->size < map->iova || map->perm == IOMMU_NONE) { > + return VHOST_DMA_MAP_INVALID; > + } > + > + /* Search for a hole in iova space big enough */ > + fit = vhost_iova_tree_find_iova_hole(tree->iova_taddr_map, map, > + &iova_prev); > + if (!fit) { > + return VHOST_DMA_MAP_NO_SPACE; > + } > + > + map->iova = iova_prev ? (iova_prev->iova + iova_prev->size) + 1 : iova_min; > + find_prev_rc = vhost_iova_tree_find_prev(tree->taddr_iova_map, > + vhost_iova_tree_cmp_taddr, map, > + &qemu_prev); > + if (find_prev_rc == VHOST_DMA_MAP_OVERLAP) { > + return VHOST_DMA_MAP_OVERLAP; > + } > + > + vhost_iova_tree_insert_after(tree->iova_taddr_map, iova_prev, map); > + vhost_iova_tree_insert_after(tree->taddr_iova_map, qemu_prev, map); > + return VHOST_DMA_MAP_OK; > +} > diff --git a/hw/virtio/meson.build b/hw/virtio/meson.build > index 8b5a0225fe..cb306b83c6 100644 > --- a/hw/virtio/meson.build > +++ b/hw/virtio/meson.build > @@ -11,7 +11,7 @@ softmmu_ss.add(when: 'CONFIG_ALL', if_true: files('vhost-stub.c')) > > virtio_ss = ss.source_set() > virtio_ss.add(files('virtio.c')) > -virtio_ss.add(when: 'CONFIG_VHOST', if_true: files('vhost.c', 'vhost-backend.c', 'vhost-shadow-virtqueue.c')) > +virtio_ss.add(when: 'CONFIG_VHOST', if_true: files('vhost.c', 'vhost-backend.c', 'vhost-shadow-virtqueue.c', 'vhost-iova-tree.c')) > virtio_ss.add(when: 'CONFIG_VHOST_USER', if_true: files('vhost-user.c')) > virtio_ss.add(when: 'CONFIG_VHOST_VDPA', if_true: files('vhost-vdpa.c')) > virtio_ss.add(when: 'CONFIG_VIRTIO_BALLOON', if_true: files('virtio-balloon.c'))