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 smtp3.osuosl.org (smtp3.osuosl.org [140.211.166.136]) (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 317F3C433F5 for ; Tue, 8 Feb 2022 08:17:49 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id D0A1260C34; Tue, 8 Feb 2022 08:17:48 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org 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 p5y_LfJYUuIP; Tue, 8 Feb 2022 08:17:47 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp3.osuosl.org (Postfix) with ESMTPS id 41A7660C1E; Tue, 8 Feb 2022 08:17:47 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 19D9CC001A; Tue, 8 Feb 2022 08:17:47 +0000 (UTC) Received: from smtp4.osuosl.org (smtp4.osuosl.org [140.211.166.137]) by lists.linuxfoundation.org (Postfix) with ESMTP id E381EC000B for ; Tue, 8 Feb 2022 08:17:45 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id D0D4640883 for ; Tue, 8 Feb 2022 08:17:45 +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 fsgs1g1PpLQa for ; Tue, 8 Feb 2022 08:17:44 +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 [170.10.129.124]) by smtp4.osuosl.org (Postfix) with ESMTPS id 9180B40632 for ; Tue, 8 Feb 2022 08:17:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1644308263; 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=iFrq/06m+LFrgFUjRTYZpJ80E1TS7u9YHnTYCB5785E=; b=XQx2hgzLdZCyil5BBqSFekc9UCfpVMybRXG5Hknq0qSqQXzDhzBj+483hLA36+3MwHJHVq Dv9HCcnZYpop7z1wdU5MBYRPdl8AQJDxaHKfFklw39TMPsRJhATIobhOFD9+pFoX2X4bF4 AS7LnAkN0mxtJNV7Bf4bT7of5CBvEV0= Received: from mail-pj1-f71.google.com (mail-pj1-f71.google.com [209.85.216.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-9-1DOW50zxN9C6zKU7He-8Xg-1; Tue, 08 Feb 2022 03:17:40 -0500 X-MC-Unique: 1DOW50zxN9C6zKU7He-8Xg-1 Received: by mail-pj1-f71.google.com with SMTP id gj12-20020a17090b108c00b001b89b5f3dd4so1085454pjb.6 for ; Tue, 08 Feb 2022 00:17:40 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:subject :content-language:to:cc:references:from:in-reply-to :content-transfer-encoding; bh=iFrq/06m+LFrgFUjRTYZpJ80E1TS7u9YHnTYCB5785E=; b=beG1m0r1V8An6aa50YITLxvmgU5CdvOj3exc1SliJBFRYPB7imCsPhzBvD2EJWySDo OkFadX/ISiNTenxDqNnMiiDUgwmSn/oqhwu46BTNZHJLHuwHdF/KihRHW3RWU9cupq9Q iatbRN5K+ArexAV+5SCRncOg2pd/hvFBXlgTIhSj5CvmhCDBCKUGZhZVSor4Aptc7mxZ zdY4Fv35xw5838lbKQXXbi5NuttgEZJ82yw+KroJM/zTOVVaC2Zy4Ya+koQ39MUUEhnh s7/z3+xxNi4QrxRGizZwTn6T3IQbgCT9r7aIVlWy7V5kLo07qDWnNeTgNt5rJodS/yFf GkSw== X-Gm-Message-State: AOAM532zEP7v1+DqktIKKmE0ajkTDTEEkZKBm0Azi/OjlA/WiUjPVOBl 9B9dlAHXB90A7oRpZpk4VHzdSpAd7oftNeXr0SFPyqnyXMQk1hhFKJXNVjEDMsLQBWRg6sZ6CWf B6Jgx+O73GDzWLn8wD3soFOY6aK36kMrQAEmF8B/GwQ== X-Received: by 2002:a17:902:c192:: with SMTP id d18mr3269380pld.149.1644308259411; Tue, 08 Feb 2022 00:17:39 -0800 (PST) X-Google-Smtp-Source: ABdhPJz1cjAQFWAsDqhmuU141kyxqsZhezK54B30iH8xad9efcoqs5kNNlx/o+lU7LIwjzJcxXNw/A== X-Received: by 2002:a17:902:c192:: with SMTP id d18mr3269363pld.149.1644308259093; Tue, 08 Feb 2022 00:17:39 -0800 (PST) Received: from [10.72.13.12] ([209.132.188.80]) by smtp.gmail.com with ESMTPSA id pf4sm1971751pjb.35.2022.02.08.00.17.31 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 08 Feb 2022 00:17:38 -0800 (PST) Message-ID: <69253728-c1ea-eea6-dacc-5ba52ace4d6e@redhat.com> Date: Tue, 8 Feb 2022 16:17:30 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.5.1 Subject: Re: [PATCH 22/31] vhost: Add VhostIOVATree To: Eugenio Perez Martin References: <20220121202733.404989-1-eperezma@redhat.com> <20220121202733.404989-23-eperezma@redhat.com> <2eb07526-0143-d612-8969-097ccdf00fae@redhat.com> From: Jason Wang In-Reply-To: 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: Laurent Vivier , Parav Pandit , Cindy Lu , "Michael S. Tsirkin" , Richard Henderson , qemu-level , Gautam Dawar , Markus Armbruster , Eduardo Habkost , Harpreet Singh Anand , Xiao W Wang , Stefan Hajnoczi , Eli Cohen , Paolo Bonzini , Zhu Lingshan , virtualization , Eric Blake 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" CuWcqCAyMDIyLzIvMiDkuIrljYgxOjI3LCBFdWdlbmlvIFBlcmV6IE1hcnRpbiDlhpnpgZM6Cj4g T24gU3VuLCBKYW4gMzAsIDIwMjIgYXQgNjoyMSBBTSBKYXNvbiBXYW5nIDxqYXNvd2FuZ0ByZWRo YXQuY29tPiB3cm90ZToKPj4KPj4g5ZyoIDIwMjIvMS8yMiDkuIrljYg0OjI3LCBFdWdlbmlvIFDD qXJleiDlhpnpgZM6Cj4+PiBUaGlzIHRyZWUgaXMgYWJsZSB0byBsb29rIGZvciBhIHRyYW5zbGF0 ZWQgYWRkcmVzcyBmcm9tIGFuIElPVkEgYWRkcmVzcy4KPj4+Cj4+PiBBdCBmaXJzdCBnbGFuY2Ug aXQgaXMgc2ltaWxhciB0byB1dGlsL2lvdmEtdHJlZS4gSG93ZXZlciwgU1ZRIHdvcmtpbmcgb24K Pj4+IGRldmljZXMgd2l0aCBsaW1pdGVkIElPVkEgc3BhY2UgbmVlZCBtb3JlIGNhcGFiaWxpdGll cywKPj4KPj4gU28gZGlkIHRoZSBJT1ZBIHRyZWUgKGUuZyBsMiB2dGQgY2FuIG9ubHkgd29yayBp biB0aGUgcmFuZ2Ugb2YgR0FXIGFuZAo+PiB3aXRob3V0IFJNUlJzKS4KPj4KPj4KPj4+ICAgIGxp a2UgYWxsb2NhdGluZwo+Pj4gSU9WQSBjaHVua3Mgb3IgcGVyZm9ybWluZyByZXZlcnNlIHRyYW5z bGF0aW9ucyAocWVtdSBhZGRyZXNzZXMgdG8gaW92YSkuCj4+Cj4+IFRoaXMgbG9va3MgbGlrZSBh IGdlbmVyYWwgcmVxdWVzdCBhcyB3ZWxsLiBTbyBJIHdvbmRlciBpZiB3ZSBjYW4gc2ltcGx5Cj4+ IGV4dGVuZCBpb3ZhIHRyZWUgaW5zdGVhZC4KPj4KPiBXaGlsZSBib3RoIGFyZSB0cnVlLCBJIGRv bid0IHNlZSBjb2RlIHRoYXQgcGVyZm9ybXMgYWxsb2NhdGlvbnMgb3IKPiBxZW11IHZhZGRyIHRv IGlvdmEgdHJhbnNsYXRpb25zLiBCdXQgaWYgdGhlIGNoYW5nZXMgY2FuIGJlIGludGVncmF0ZWQK PiBpbnRvIGlvdmEtdHJlZSB0aGF0IHdvdWxkIGJlIGdyZWF0IGZvciBzdXJlLgo+Cj4gVGhlIG1h aW4gZHJhd2JhY2sgSSBzZWUgaXMgdGhlIG5lZWQgdG8gbWFpbnRhaW4gdHdvIHRyZWVzIGluc3Rl YWQgb2YKPiBvbmUgZm9yIHVzZXJzIG9mIGlvdmEtdHJlZS4gV2hpbGUgY29tcGxleGl0eSBkb2Vz IG5vdCBncm93LCBpdCBuZWVkcwo+IHRvIGRvdWJsZSB0aGUgYW1vdW50IG9mIHdvcmsgbmVlZGVk LgoKCklmIHlvdSBjYXJlIGFib3V0IHRoZSBwZXJmb3JtYW5jZSwgd2UgY2FuIGRpc2FibGUgdGhl IHJldmVyc2UgbWFwcGluZyAKZHVyaW5nIHRoZSBhbGxvY2F0aW9uLiBGb3IgdklPTU1VIHVzZXJz IGl0IHdvbid0IG5vdGljZSBhbnkgcGVyZm9ybWFuY2UgCnBlbmFsdHkuCgpUaGFua3MKCgo+Cj4g VGhhbmtzIQo+Cj4+IFRoYW5rcwo+Pgo+Pgo+Pj4gVGhlIGFsbG9jYXRpb24gY2FwYWJpbGl0eSwg YXMgImFzc2lnbiBhIGZyZWUgSU9WQSBhZGRyZXNzIHRvIHRoaXMgY2h1bmsKPj4+IG9mIG1lbW9y eSBpbiBxZW11J3MgYWRkcmVzcyBzcGFjZSIgYWxsb3dzIHNoYWRvdyB2aXJ0cXVldWUgdG8gY3Jl YXRlIGEKPj4+IG5ldyBhZGRyZXNzIHNwYWNlIHRoYXQgaXMgbm90IHJlc3RyaWN0ZWQgYnkgZ3Vl c3QncyBhZGRyZXNzYWJsZSBvbmUsIHNvCj4+PiB3ZSBjYW4gYWxsb2NhdGUgc2hhZG93IHZxcyB2 cmluZ3Mgb3V0c2lkZSBvZiBpdC4KPj4+Cj4+PiBJdCBkdXBsaWNhdGVzIHRoZSB0cmVlIHNvIGl0 IGNhbiBzZWFyY2ggZWZmaWNpZW50bHkgYm90aCBkaXJlY3Rpb25zLAo+Pj4gYW5kIGl0IHdpbGwg c2lnbmFsIG92ZXJsYXAgaWYgaW92YSBvciB0aGUgdHJhbnNsYXRlZCBhZGRyZXNzIGlzCj4+PiBw cmVzZW50IGluIGFueSB0cmVlLgo+Pj4KPj4+IFNpZ25lZC1vZmYtYnk6IEV1Z2VuaW8gUMOpcmV6 IDxlcGVyZXptYUByZWRoYXQuY29tPgo+Pj4gLS0tCj4+PiAgICBody92aXJ0aW8vdmhvc3QtaW92 YS10cmVlLmggfCAgMjcgKysrKysrKwo+Pj4gICAgaHcvdmlydGlvL3Zob3N0LWlvdmEtdHJlZS5j IHwgMTU3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+Pj4gICAgaHcvdmly dGlvL21lc29uLmJ1aWxkICAgICAgIHwgICAyICstCj4+PiAgICAzIGZpbGVzIGNoYW5nZWQsIDE4 NSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCj4+PiAgICBjcmVhdGUgbW9kZSAxMDA2NDQg aHcvdmlydGlvL3Zob3N0LWlvdmEtdHJlZS5oCj4+PiAgICBjcmVhdGUgbW9kZSAxMDA2NDQgaHcv dmlydGlvL3Zob3N0LWlvdmEtdHJlZS5jCj4+Pgo+Pj4gZGlmZiAtLWdpdCBhL2h3L3ZpcnRpby92 aG9zdC1pb3ZhLXRyZWUuaCBiL2h3L3ZpcnRpby92aG9zdC1pb3ZhLXRyZWUuaAo+Pj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQKPj4+IGluZGV4IDAwMDAwMDAwMDAuLjYxMDM5NGVhZjEKPj4+IC0tLSAv ZGV2L251bGwKPj4+ICsrKyBiL2h3L3ZpcnRpby92aG9zdC1pb3ZhLXRyZWUuaAo+Pj4gQEAgLTAs MCArMSwyNyBAQAo+Pj4gKy8qCj4+PiArICogdmhvc3Qgc29mdHdhcmUgbGl2ZSBtaWdyYXRpb24g cmluZwo+Pj4gKyAqCj4+PiArICogU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogUmVkIEhhdCwgSW5j LiAyMDIxCj4+PiArICogU1BEWC1GaWxlQ29udHJpYnV0b3I6IEF1dGhvcjogRXVnZW5pbyBQw6ly ZXogPGVwZXJlem1hQHJlZGhhdC5jb20+Cj4+PiArICoKPj4+ICsgKiBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgo+Pj4gKyAqLwo+Pj4gKwo+Pj4gKyNpZm5kZWYgSFdf VklSVElPX1ZIT1NUX0lPVkFfVFJFRV9ICj4+PiArI2RlZmluZSBIV19WSVJUSU9fVkhPU1RfSU9W QV9UUkVFX0gKPj4+ICsKPj4+ICsjaW5jbHVkZSAicWVtdS9pb3ZhLXRyZWUuaCIKPj4+ICsjaW5j bHVkZSAiZXhlYy9tZW1vcnkuaCIKPj4+ICsKPj4+ICt0eXBlZGVmIHN0cnVjdCBWaG9zdElPVkFU cmVlIFZob3N0SU9WQVRyZWU7Cj4+PiArCj4+PiArVmhvc3RJT1ZBVHJlZSAqdmhvc3RfaW92YV90 cmVlX25ldyh1aW50NjRfdCBpb3ZhX2ZpcnN0LCB1aW50NjRfdCBpb3ZhX2xhc3QpOwo+Pj4gK3Zv aWQgdmhvc3RfaW92YV90cmVlX2RlbGV0ZShWaG9zdElPVkFUcmVlICppb3ZhX3RyZWUpOwo+Pj4g K0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DKFZob3N0SU9WQVRyZWUsIHZob3N0X2lvdmFf dHJlZV9kZWxldGUpOwo+Pj4gKwo+Pj4gK2NvbnN0IERNQU1hcCAqdmhvc3RfaW92YV90cmVlX2Zp bmRfaW92YShjb25zdCBWaG9zdElPVkFUcmVlICppb3ZhX3RyZWUsCj4+PiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERNQU1hcCAqbWFwKTsKPj4+ICtpbnQg dmhvc3RfaW92YV90cmVlX21hcF9hbGxvYyhWaG9zdElPVkFUcmVlICppb3ZhX3RyZWUsIERNQU1h cCAqbWFwKTsKPj4+ICt2b2lkIHZob3N0X2lvdmFfdHJlZV9yZW1vdmUoVmhvc3RJT1ZBVHJlZSAq aW92YV90cmVlLCBjb25zdCBETUFNYXAgKm1hcCk7Cj4+PiArCj4+PiArI2VuZGlmCj4+PiBkaWZm IC0tZ2l0IGEvaHcvdmlydGlvL3Zob3N0LWlvdmEtdHJlZS5jIGIvaHcvdmlydGlvL3Zob3N0LWlv dmEtdHJlZS5jCj4+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+Pj4gaW5kZXggMDAwMDAwMDAwMC4u MDAyMWRiYWY1NAo+Pj4gLS0tIC9kZXYvbnVsbAo+Pj4gKysrIGIvaHcvdmlydGlvL3Zob3N0LWlv dmEtdHJlZS5jCj4+PiBAQCAtMCwwICsxLDE1NyBAQAo+Pj4gKy8qCj4+PiArICogdmhvc3Qgc29m dHdhcmUgbGl2ZSBtaWdyYXRpb24gcmluZwo+Pj4gKyAqCj4+PiArICogU1BEWC1GaWxlQ29weXJp Z2h0VGV4dDogUmVkIEhhdCwgSW5jLiAyMDIxCj4+PiArICogU1BEWC1GaWxlQ29udHJpYnV0b3I6 IEF1dGhvcjogRXVnZW5pbyBQw6lyZXogPGVwZXJlem1hQHJlZGhhdC5jb20+Cj4+PiArICoKPj4+ ICsgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgo+Pj4gKyAqLwo+ Pj4gKwo+Pj4gKyNpbmNsdWRlICJxZW11L29zZGVwLmgiCj4+PiArI2luY2x1ZGUgInFlbXUvaW92 YS10cmVlLmgiCj4+PiArI2luY2x1ZGUgInZob3N0LWlvdmEtdHJlZS5oIgo+Pj4gKwo+Pj4gKyNk ZWZpbmUgaW92YV9taW5fYWRkciBxZW11X3JlYWxfaG9zdF9wYWdlX3NpemUKPj4+ICsKPj4+ICsv KioKPj4+ICsgKiBWaG9zdElPVkFUcmVlLCBhYmxlIHRvOgo+Pj4gKyAqIC0gVHJhbnNsYXRlIGlv dmEgYWRkcmVzcwo+Pj4gKyAqIC0gUmV2ZXJzZSB0cmFuc2xhdGUgaW92YSBhZGRyZXNzIChmcm9t IHRyYW5zbGF0ZWQgdG8gaW92YSkKPj4+ICsgKiAtIEFsbG9jYXRlIElPVkEgcmVnaW9ucyBmb3Ig dHJhbnNsYXRlZCByYW5nZSAocG90ZW50aWFsbHkgc2xvdyBvcGVyYXRpb24pCj4+PiArICoKPj4+ ICsgKiBOb3RlIHRoYXQgaXQgY2Fubm90IHJlbW92ZSBub2Rlcy4KPj4+ICsgKi8KPj4+ICtzdHJ1 Y3QgVmhvc3RJT1ZBVHJlZSB7Cj4+PiArICAgIC8qIEZpcnN0IGFkZHJlc2FibGUgaW92YSBhZGRy ZXNzIGluIHRoZSBkZXZpY2UgKi8KPj4+ICsgICAgdWludDY0X3QgaW92YV9maXJzdDsKPj4+ICsK Pj4+ICsgICAgLyogTGFzdCBhZGRyZXNzYWJsZSBpb3ZhIGFkZHJlc3MgaW4gdGhlIGRldmljZSAq Lwo+Pj4gKyAgICB1aW50NjRfdCBpb3ZhX2xhc3Q7Cj4+PiArCj4+PiArICAgIC8qIElPVkEgYWRk cmVzcyB0byBxZW11IG1lbW9yeSBtYXBzLiAqLwo+Pj4gKyAgICBJT1ZBVHJlZSAqaW92YV90YWRk cl9tYXA7Cj4+PiArCj4+PiArICAgIC8qIFFFTVUgdmlydHVhbCBtZW1vcnkgYWRkcmVzcyB0byBp b3ZhIG1hcHMgKi8KPj4+ICsgICAgR1RyZWUgKnRhZGRyX2lvdmFfbWFwOwo+Pj4gK307Cj4+PiAr Cj4+PiArc3RhdGljIGdpbnQgdmhvc3RfaW92YV90cmVlX2NtcF90YWRkcihnY29uc3Rwb2ludGVy IGEsIGdjb25zdHBvaW50ZXIgYiwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGdwb2ludGVyIGRhdGEpCj4+PiArewo+Pj4gKyAgICBjb25zdCBETUFNYXAgKm0xID0g YSwgKm0yID0gYjsKPj4+ICsKPj4+ICsgICAgaWYgKG0xLT50cmFuc2xhdGVkX2FkZHIgPiBtMi0+ dHJhbnNsYXRlZF9hZGRyICsgbTItPnNpemUpIHsKPj4+ICsgICAgICAgIHJldHVybiAxOwo+Pj4g KyAgICB9Cj4+PiArCj4+PiArICAgIGlmIChtMS0+dHJhbnNsYXRlZF9hZGRyICsgbTEtPnNpemUg PCBtMi0+dHJhbnNsYXRlZF9hZGRyKSB7Cj4+PiArICAgICAgICByZXR1cm4gLTE7Cj4+PiArICAg IH0KPj4+ICsKPj4+ICsgICAgLyogT3ZlcmxhcHBlZCAqLwo+Pj4gKyAgICByZXR1cm4gMDsKPj4+ ICt9Cj4+PiArCj4+PiArLyoqCj4+PiArICogQ3JlYXRlIGEgbmV3IElPVkEgdHJlZQo+Pj4gKyAq Cj4+PiArICogUmV0dXJucyB0aGUgbmV3IElPVkEgdHJlZQo+Pj4gKyAqLwo+Pj4gK1Zob3N0SU9W QVRyZWUgKnZob3N0X2lvdmFfdHJlZV9uZXcoaHdhZGRyIGlvdmFfZmlyc3QsIGh3YWRkciBpb3Zh X2xhc3QpCj4+PiArewo+Pj4gKyAgICBWaG9zdElPVkFUcmVlICp0cmVlID0gZ19uZXcoVmhvc3RJ T1ZBVHJlZSwgMSk7Cj4+PiArCj4+PiArICAgIC8qIFNvbWUgZGV2aWNlcyBkb2VzIG5vdCBsaWtl IDAgYWRkcmVzc2VzICovCj4+PiArICAgIHRyZWUtPmlvdmFfZmlyc3QgPSBNQVgoaW92YV9maXJz dCwgaW92YV9taW5fYWRkcik7Cj4+PiArICAgIHRyZWUtPmlvdmFfbGFzdCA9IGlvdmFfbGFzdDsK Pj4+ICsKPj4+ICsgICAgdHJlZS0+aW92YV90YWRkcl9tYXAgPSBpb3ZhX3RyZWVfbmV3KCk7Cj4+ PiArICAgIHRyZWUtPnRhZGRyX2lvdmFfbWFwID0gZ190cmVlX25ld19mdWxsKHZob3N0X2lvdmFf dHJlZV9jbXBfdGFkZHIsIE5VTEwsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE5VTEwsIGdfZnJlZSk7Cj4+PiArICAgIHJldHVybiB0cmVlOwo+Pj4gK30K Pj4+ICsKPj4+ICsvKioKPj4+ICsgKiBEZWxldGUgYW4gaW92YSB0cmVlCj4+PiArICovCj4+PiAr dm9pZCB2aG9zdF9pb3ZhX3RyZWVfZGVsZXRlKFZob3N0SU9WQVRyZWUgKmlvdmFfdHJlZSkKPj4+ ICt7Cj4+PiArICAgIGlvdmFfdHJlZV9kZXN0cm95KGlvdmFfdHJlZS0+aW92YV90YWRkcl9tYXAp Owo+Pj4gKyAgICBnX3RyZWVfdW5yZWYoaW92YV90cmVlLT50YWRkcl9pb3ZhX21hcCk7Cj4+PiAr ICAgIGdfZnJlZShpb3ZhX3RyZWUpOwo+Pj4gK30KPj4+ICsKPj4+ICsvKioKPj4+ICsgKiBGaW5k IHRoZSBJT1ZBIGFkZHJlc3Mgc3RvcmVkIGZyb20gYSBtZW1vcnkgYWRkcmVzcwo+Pj4gKyAqCj4+ PiArICogQHRyZWUgICAgIFRoZSBpb3ZhIHRyZWUKPj4+ICsgKiBAbWFwICAgICAgVGhlIG1hcCB3 aXRoIHRoZSBtZW1vcnkgYWRkcmVzcwo+Pj4gKyAqCj4+PiArICogUmV0dXJuIHRoZSBzdG9yZWQg bWFwcGluZywgb3IgTlVMTCBpZiBub3QgZm91bmQuCj4+PiArICovCj4+PiArY29uc3QgRE1BTWFw ICp2aG9zdF9pb3ZhX3RyZWVfZmluZF9pb3ZhKGNvbnN0IFZob3N0SU9WQVRyZWUgKnRyZWUsCj4+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERNQU1hcCAq bWFwKQo+Pj4gK3sKPj4+ICsgICAgcmV0dXJuIGdfdHJlZV9sb29rdXAodHJlZS0+dGFkZHJfaW92 YV9tYXAsIG1hcCk7Cj4+PiArfQo+Pj4gKwo+Pj4gKy8qKgo+Pj4gKyAqIEFsbG9jYXRlIGEgbmV3 IG1hcHBpbmcKPj4+ICsgKgo+Pj4gKyAqIEB0cmVlICBUaGUgaW92YSB0cmVlCj4+PiArICogQG1h cCAgIFRoZSBpb3ZhIG1hcAo+Pj4gKyAqCj4+PiArICogUmV0dXJuczoKPj4+ICsgKiAtIElPVkFf T0sgaWYgdGhlIG1hcCBmaXRzIGluIHRoZSBjb250YWluZXIKPj4+ICsgKiAtIElPVkFfRVJSX0lO VkFMSUQgaWYgdGhlIG1hcCBkb2VzIG5vdCBtYWtlIHNlbnNlIChsaWtlIHNpemUgb3ZlcmZsb3cp Cj4+PiArICogLSBJT1ZBX0VSUl9PVkVSTEFQIGlmIHRoZSB0cmVlIGFscmVhZHkgY29udGFpbnMg dGhhdCBtYXAKPj4+ICsgKiAtIElPVkFfRVJSX05PTUVNIGlmIHRyZWUgY2Fubm90IGFsbG9jYXRl IG1vcmUgc3BhY2UuCj4+PiArICoKPj4+ICsgKiBJdCByZXR1cm5zIGFzc2lnbmF0ZWQgaW92YSBp biBtYXAtPmlvdmEgaWYgcmV0dXJuIHZhbHVlIGlzIFZIT1NUX0RNQV9NQVBfT0suCj4+PiArICov Cj4+PiAraW50IHZob3N0X2lvdmFfdHJlZV9tYXBfYWxsb2MoVmhvc3RJT1ZBVHJlZSAqdHJlZSwg RE1BTWFwICptYXApCj4+PiArewo+Pj4gKyAgICAvKiBTb21lIHZob3N0IGRldmljZXMgZG9lcyBu b3QgbGlrZSBhZGRyIDAuIFNraXAgZmlyc3QgcGFnZSAqLwo+Pj4gKyAgICBod2FkZHIgaW92YV9m aXJzdCA9IHRyZWUtPmlvdmFfZmlyc3QgPzogcWVtdV9yZWFsX2hvc3RfcGFnZV9zaXplOwo+Pj4g KyAgICBETUFNYXAgKm5ldzsKPj4+ICsgICAgaW50IHI7Cj4+PiArCj4+PiArICAgIGlmIChtYXAt PnRyYW5zbGF0ZWRfYWRkciArIG1hcC0+c2l6ZSA8IG1hcC0+dHJhbnNsYXRlZF9hZGRyIHx8Cj4+ PiArICAgICAgICBtYXAtPnBlcm0gPT0gSU9NTVVfTk9ORSkgewo+Pj4gKyAgICAgICAgcmV0dXJu IElPVkFfRVJSX0lOVkFMSUQ7Cj4+PiArICAgIH0KPj4+ICsKPj4+ICsgICAgLyogQ2hlY2sgZm9y IGNvbGxpc2lvbnMgaW4gdHJhbnNsYXRlZCBhZGRyZXNzZXMgKi8KPj4+ICsgICAgaWYgKHZob3N0 X2lvdmFfdHJlZV9maW5kX2lvdmEodHJlZSwgbWFwKSkgewo+Pj4gKyAgICAgICAgcmV0dXJuIElP VkFfRVJSX09WRVJMQVA7Cj4+PiArICAgIH0KPj4+ICsKPj4+ICsgICAgLyogQWxsb2NhdGUgYSBu b2RlIGluIElPVkEgYWRkcmVzcyAqLwo+Pj4gKyAgICByID0gaW92YV90cmVlX2FsbG9jKHRyZWUt PmlvdmFfdGFkZHJfbWFwLCBtYXAsIGlvdmFfZmlyc3QsCj4+PiArICAgICAgICAgICAgICAgICAg ICAgICAgdHJlZS0+aW92YV9sYXN0KTsKPj4+ICsgICAgaWYgKHIgIT0gSU9WQV9PSykgewo+Pj4g KyAgICAgICAgcmV0dXJuIHI7Cj4+PiArICAgIH0KPj4+ICsKPj4+ICsgICAgLyogQWxsb2NhdGUg bm9kZSBpbiBxZW11IC0+IGlvdmEgdHJhbnNsYXRpb25zICovCj4+PiArICAgIG5ldyA9IGdfbWFs bG9jKHNpemVvZigqbmV3KSk7Cj4+PiArICAgIG1lbWNweShuZXcsIG1hcCwgc2l6ZW9mKCpuZXcp KTsKPj4+ICsgICAgZ190cmVlX2luc2VydCh0cmVlLT50YWRkcl9pb3ZhX21hcCwgbmV3LCBuZXcp Owo+Pj4gKyAgICByZXR1cm4gSU9WQV9PSzsKPj4+ICt9Cj4+PiArCj4+PiArLyoqCj4+PiArICog UmVtb3ZlIGV4aXN0aW5nIG1hcHBpbmdzIGZyb20gaW92YSB0cmVlCj4+PiArICoKPj4+ICsgKiBA cGFyYW0gIGlvdmFfdHJlZSAgVGhlIHZob3N0IGlvdmEgdHJlZQo+Pj4gKyAqIEBwYXJhbSAgbWFw ICAgICAgICBUaGUgbWFwIHRvIHJlbW92ZQo+Pj4gKyAqLwo+Pj4gK3ZvaWQgdmhvc3RfaW92YV90 cmVlX3JlbW92ZShWaG9zdElPVkFUcmVlICppb3ZhX3RyZWUsIGNvbnN0IERNQU1hcCAqbWFwKQo+ Pj4gK3sKPj4+ICsgICAgY29uc3QgRE1BTWFwICpvdmVybGFwOwo+Pj4gKwo+Pj4gKyAgICBpb3Zh X3RyZWVfcmVtb3ZlKGlvdmFfdHJlZS0+aW92YV90YWRkcl9tYXAsIG1hcCk7Cj4+PiArICAgIHdo aWxlICgob3ZlcmxhcCA9IHZob3N0X2lvdmFfdHJlZV9maW5kX2lvdmEoaW92YV90cmVlLCBtYXAp KSkgewo+Pj4gKyAgICAgICAgZ190cmVlX3JlbW92ZShpb3ZhX3RyZWUtPnRhZGRyX2lvdmFfbWFw LCBvdmVybGFwKTsKPj4+ICsgICAgfQo+Pj4gK30KPj4+IGRpZmYgLS1naXQgYS9ody92aXJ0aW8v bWVzb24uYnVpbGQgYi9ody92aXJ0aW8vbWVzb24uYnVpbGQKPj4+IGluZGV4IDJkYzg3NjEzYmMu LjYwNDc2NzA4MDQgMTAwNjQ0Cj4+PiAtLS0gYS9ody92aXJ0aW8vbWVzb24uYnVpbGQKPj4+ICsr KyBiL2h3L3ZpcnRpby9tZXNvbi5idWlsZAo+Pj4gQEAgLTExLDcgKzExLDcgQEAgc29mdG1tdV9z cy5hZGQod2hlbjogJ0NPTkZJR19BTEwnLCBpZl90cnVlOiBmaWxlcygndmhvc3Qtc3R1Yi5jJykp Cj4+Pgo+Pj4gICAgdmlydGlvX3NzID0gc3Muc291cmNlX3NldCgpCj4+PiAgICB2aXJ0aW9fc3Mu YWRkKGZpbGVzKCd2aXJ0aW8uYycpKQo+Pj4gLXZpcnRpb19zcy5hZGQod2hlbjogJ0NPTkZJR19W SE9TVCcsIGlmX3RydWU6IGZpbGVzKCd2aG9zdC5jJywgJ3Zob3N0LWJhY2tlbmQuYycsICd2aG9z dC1zaGFkb3ctdmlydHF1ZXVlLmMnKSkKPj4+ICt2aXJ0aW9fc3MuYWRkKHdoZW46ICdDT05GSUdf VkhPU1QnLCBpZl90cnVlOiBmaWxlcygndmhvc3QuYycsICd2aG9zdC1iYWNrZW5kLmMnLCAndmhv c3Qtc2hhZG93LXZpcnRxdWV1ZS5jJywgJ3Zob3N0LWlvdmEtdHJlZS5jJykpCj4+PiAgICB2aXJ0 aW9fc3MuYWRkKHdoZW46ICdDT05GSUdfVkhPU1RfVVNFUicsIGlmX3RydWU6IGZpbGVzKCd2aG9z dC11c2VyLmMnKSkKPj4+ICAgIHZpcnRpb19zcy5hZGQod2hlbjogJ0NPTkZJR19WSE9TVF9WRFBB JywgaWZfdHJ1ZTogZmlsZXMoJ3Zob3N0LXZkcGEuYycpKQo+Pj4gICAgdmlydGlvX3NzLmFkZCh3 aGVuOiAnQ09ORklHX1ZJUlRJT19CQUxMT09OJywgaWZfdHJ1ZTogZmlsZXMoJ3ZpcnRpby1iYWxs b29uLmMnKSkKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f ClZpcnR1YWxpemF0aW9uIG1haWxpbmcgbGlzdApWaXJ0dWFsaXphdGlvbkBsaXN0cy5saW51eC1m b3VuZGF0aW9uLm9yZwpodHRwczovL2xpc3RzLmxpbnV4Zm91bmRhdGlvbi5vcmcvbWFpbG1hbi9s aXN0aW5mby92aXJ0dWFsaXphdGlvbg== 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 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 smtp.lore.kernel.org (Postfix) with ESMTPS id 2357CC433EF for ; Tue, 8 Feb 2022 09:22:12 +0000 (UTC) Received: from localhost ([::1]:33650 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nHMhO-0007ml-SI for qemu-devel@archiver.kernel.org; Tue, 08 Feb 2022 04:22:10 -0500 Received: from eggs.gnu.org ([209.51.188.92]:35558) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nHLh5-0003wD-54 for qemu-devel@nongnu.org; Tue, 08 Feb 2022 03:17:47 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]:38793) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nHLh2-0001US-Vn for qemu-devel@nongnu.org; Tue, 08 Feb 2022 03:17:46 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1644308264; 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=iFrq/06m+LFrgFUjRTYZpJ80E1TS7u9YHnTYCB5785E=; b=gHDuXkO9t2+KjPozUN6UgktX/9fwAdMx3V7gEyuofC9yRGnh6zFaFelh+638/vKS3sN7un 5lECTKBXm5zVZzNN7RI+ApsCfqABfOepJ6mylGplXC8JJ5WLLOxK/iAnICm4rRQU+bWrHt bTRC5f9un3uMMHKjq9O62telnrW98uY= Received: from mail-pj1-f70.google.com (mail-pj1-f70.google.com [209.85.216.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-39-inJGvBm6MbKFzrZeQ1yPaA-1; Tue, 08 Feb 2022 03:17:42 -0500 X-MC-Unique: inJGvBm6MbKFzrZeQ1yPaA-1 Received: by mail-pj1-f70.google.com with SMTP id ml24-20020a17090b361800b001b8877a4b6eso6678824pjb.5 for ; Tue, 08 Feb 2022 00:17:42 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:subject :content-language:to:cc:references:from:in-reply-to :content-transfer-encoding; bh=iFrq/06m+LFrgFUjRTYZpJ80E1TS7u9YHnTYCB5785E=; b=Jqc5jmVQvvT4Xuf4DmFbshPWiVBRb9Cyz2TxEu1tp9tdyj5SsMrxIgBw8Q2gEqX/fZ /oubuJtvikJv4Y8i2MjtrlmB9uhdcC2h88ndJZvMuMy3sWbQ7VFJulqN4hF+li/yKhZX YfFLsXoZ/dg5T4MzWgy1HuXyKIG2SjJ+jGAbNtu84e2eKVqNnpaobx4WP//JDEO4zFkS KKws43GulQB2tpSxY1z798Roel9/bO1GSi6BKvDVqMVsO9tPF23lbCuLPPsJs0CzF5Rd ImCElYw2H4gJQVwoNcvNgrvtKd97My4zFAeADPpYneJcV24U1lvKGwdhYeF3ArCd+Cx+ nfUg== X-Gm-Message-State: AOAM533hcHIoX3uR9TllhXB/PKHUX9OmeOZF0dq62RnM0tOx+DWKeg1b 5WvGa/2sCocFKmIaAf18vC77pelOd1wlJtGRI6uDyGEOkExKQq+s60DeZdDJAFiQ0PX63UE2ODM 9BBtnH7PqxCV1i+U= X-Received: by 2002:a17:902:c192:: with SMTP id d18mr3269395pld.149.1644308259475; Tue, 08 Feb 2022 00:17:39 -0800 (PST) X-Google-Smtp-Source: ABdhPJz1cjAQFWAsDqhmuU141kyxqsZhezK54B30iH8xad9efcoqs5kNNlx/o+lU7LIwjzJcxXNw/A== X-Received: by 2002:a17:902:c192:: with SMTP id d18mr3269363pld.149.1644308259093; Tue, 08 Feb 2022 00:17:39 -0800 (PST) Received: from [10.72.13.12] ([209.132.188.80]) by smtp.gmail.com with ESMTPSA id pf4sm1971751pjb.35.2022.02.08.00.17.31 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 08 Feb 2022 00:17:38 -0800 (PST) Message-ID: <69253728-c1ea-eea6-dacc-5ba52ace4d6e@redhat.com> Date: Tue, 8 Feb 2022 16:17:30 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.5.1 Subject: Re: [PATCH 22/31] vhost: Add VhostIOVATree To: Eugenio Perez Martin References: <20220121202733.404989-1-eperezma@redhat.com> <20220121202733.404989-23-eperezma@redhat.com> <2eb07526-0143-d612-8969-097ccdf00fae@redhat.com> From: Jason Wang In-Reply-To: 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 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=170.10.129.124; envelope-from=jasowang@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Parav Pandit , Cindy Lu , "Michael S. Tsirkin" , Juan Quintela , Richard Henderson , qemu-level , Gautam Dawar , Markus Armbruster , Eduardo Habkost , Harpreet Singh Anand , Xiao W Wang , Peter Xu , Stefan Hajnoczi , Eli Cohen , Paolo Bonzini , Zhu Lingshan , virtualization , Eric Blake , Stefano Garzarella Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" 在 2022/2/2 上午1:27, Eugenio Perez Martin 写道: > On Sun, Jan 30, 2022 at 6:21 AM Jason Wang wrote: >> >> 在 2022/1/22 上午4:27, Eugenio Pérez 写道: >>> This tree is able to look for a translated address from an IOVA address. >>> >>> At first glance it is similar to util/iova-tree. However, SVQ working on >>> devices with limited IOVA space need more capabilities, >> >> So did the IOVA tree (e.g l2 vtd can only work in the range of GAW and >> without RMRRs). >> >> >>> like allocating >>> IOVA chunks or performing reverse translations (qemu addresses to iova). >> >> This looks like a general request as well. So I wonder if we can simply >> extend iova tree instead. >> > While both are true, I don't see code that performs allocations or > qemu vaddr to iova translations. But if the changes can be integrated > into iova-tree that would be great for sure. > > The main drawback I see is the need to maintain two trees instead of > one for users of iova-tree. While complexity does not grow, it needs > to double the amount of work needed. If you care about the performance, we can disable the reverse mapping during the allocation. For vIOMMU users it won't notice any performance penalty. Thanks > > Thanks! > >> Thanks >> >> >>> 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 it. >>> >>> It duplicates the tree so it can search efficiently both directions, >>> and it will signal overlap if iova or the translated address is >>> present in any tree. >>> >>> Signed-off-by: Eugenio Pérez >>> --- >>> hw/virtio/vhost-iova-tree.h | 27 +++++++ >>> hw/virtio/vhost-iova-tree.c | 157 ++++++++++++++++++++++++++++++++++++ >>> hw/virtio/meson.build | 2 +- >>> 3 files changed, 185 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..610394eaf1 >>> --- /dev/null >>> +++ b/hw/virtio/vhost-iova-tree.h >>> @@ -0,0 +1,27 @@ >>> +/* >>> + * 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 "qemu/iova-tree.h" >>> +#include "exec/memory.h" >>> + >>> +typedef struct VhostIOVATree VhostIOVATree; >>> + >>> +VhostIOVATree *vhost_iova_tree_new(uint64_t iova_first, uint64_t iova_last); >>> +void vhost_iova_tree_delete(VhostIOVATree *iova_tree); >>> +G_DEFINE_AUTOPTR_CLEANUP_FUNC(VhostIOVATree, vhost_iova_tree_delete); >>> + >>> +const DMAMap *vhost_iova_tree_find_iova(const VhostIOVATree *iova_tree, >>> + const DMAMap *map); >>> +int vhost_iova_tree_map_alloc(VhostIOVATree *iova_tree, DMAMap *map); >>> +void vhost_iova_tree_remove(VhostIOVATree *iova_tree, const DMAMap *map); >>> + >>> +#endif >>> diff --git a/hw/virtio/vhost-iova-tree.c b/hw/virtio/vhost-iova-tree.c >>> new file mode 100644 >>> index 0000000000..0021dbaf54 >>> --- /dev/null >>> +++ b/hw/virtio/vhost-iova-tree.c >>> @@ -0,0 +1,157 @@ >>> +/* >>> + * 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 "qemu/iova-tree.h" >>> +#include "vhost-iova-tree.h" >>> + >>> +#define iova_min_addr 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 { >>> + /* First addresable iova address in the device */ >>> + uint64_t iova_first; >>> + >>> + /* Last addressable iova address in the device */ >>> + uint64_t iova_last; >>> + >>> + /* IOVA address to qemu memory maps. */ >>> + IOVATree *iova_taddr_map; >>> + >>> + /* QEMU virtual memory address to iova maps */ >>> + GTree *taddr_iova_map; >>> +}; >>> + >>> +static gint vhost_iova_tree_cmp_taddr(gconstpointer a, gconstpointer b, >>> + gpointer data) >>> +{ >>> + const DMAMap *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; >>> +} >>> + >>> +/** >>> + * Create a new IOVA tree >>> + * >>> + * Returns the new IOVA tree >>> + */ >>> +VhostIOVATree *vhost_iova_tree_new(hwaddr iova_first, hwaddr iova_last) >>> +{ >>> + VhostIOVATree *tree = g_new(VhostIOVATree, 1); >>> + >>> + /* Some devices does not like 0 addresses */ >>> + tree->iova_first = MAX(iova_first, iova_min_addr); >>> + tree->iova_last = iova_last; >>> + >>> + tree->iova_taddr_map = iova_tree_new(); >>> + tree->taddr_iova_map = g_tree_new_full(vhost_iova_tree_cmp_taddr, NULL, >>> + NULL, g_free); >>> + return tree; >>> +} >>> + >>> +/** >>> + * Delete an iova tree >>> + */ >>> +void vhost_iova_tree_delete(VhostIOVATree *iova_tree) >>> +{ >>> + iova_tree_destroy(iova_tree->iova_taddr_map); >>> + g_tree_unref(iova_tree->taddr_iova_map); >>> + g_free(iova_tree); >>> +} >>> + >>> +/** >>> + * 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 DMAMap *vhost_iova_tree_find_iova(const VhostIOVATree *tree, >>> + const DMAMap *map) >>> +{ >>> + return g_tree_lookup(tree->taddr_iova_map, map); >>> +} >>> + >>> +/** >>> + * Allocate a new mapping >>> + * >>> + * @tree The iova tree >>> + * @map The iova map >>> + * >>> + * Returns: >>> + * - IOVA_OK if the map fits in the container >>> + * - IOVA_ERR_INVALID if the map does not make sense (like size overflow) >>> + * - IOVA_ERR_OVERLAP if the tree already contains that map >>> + * - IOVA_ERR_NOMEM if tree cannot allocate more space. >>> + * >>> + * It returns assignated iova in map->iova if return value is VHOST_DMA_MAP_OK. >>> + */ >>> +int vhost_iova_tree_map_alloc(VhostIOVATree *tree, DMAMap *map) >>> +{ >>> + /* Some vhost devices does not like addr 0. Skip first page */ >>> + hwaddr iova_first = tree->iova_first ?: qemu_real_host_page_size; >>> + DMAMap *new; >>> + int r; >>> + >>> + if (map->translated_addr + map->size < map->translated_addr || >>> + map->perm == IOMMU_NONE) { >>> + return IOVA_ERR_INVALID; >>> + } >>> + >>> + /* Check for collisions in translated addresses */ >>> + if (vhost_iova_tree_find_iova(tree, map)) { >>> + return IOVA_ERR_OVERLAP; >>> + } >>> + >>> + /* Allocate a node in IOVA address */ >>> + r = iova_tree_alloc(tree->iova_taddr_map, map, iova_first, >>> + tree->iova_last); >>> + if (r != IOVA_OK) { >>> + return r; >>> + } >>> + >>> + /* Allocate node in qemu -> iova translations */ >>> + new = g_malloc(sizeof(*new)); >>> + memcpy(new, map, sizeof(*new)); >>> + g_tree_insert(tree->taddr_iova_map, new, new); >>> + return IOVA_OK; >>> +} >>> + >>> +/** >>> + * Remove existing mappings from iova tree >>> + * >>> + * @param iova_tree The vhost iova tree >>> + * @param map The map to remove >>> + */ >>> +void vhost_iova_tree_remove(VhostIOVATree *iova_tree, const DMAMap *map) >>> +{ >>> + const DMAMap *overlap; >>> + >>> + iova_tree_remove(iova_tree->iova_taddr_map, map); >>> + while ((overlap = vhost_iova_tree_find_iova(iova_tree, map))) { >>> + g_tree_remove(iova_tree->taddr_iova_map, overlap); >>> + } >>> +} >>> diff --git a/hw/virtio/meson.build b/hw/virtio/meson.build >>> index 2dc87613bc..6047670804 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'))