From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from smtp2.osuosl.org (smtp2.osuosl.org [140.211.166.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 3947FC7EE29 for ; Mon, 29 May 2023 09:55:39 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id A502E409B5; Mon, 29 May 2023 09:55:38 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org A502E409B5 Authentication-Results: smtp2.osuosl.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=TFtIfwp9 X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ZX9HJSbn8li5; Mon, 29 May 2023 09:55:37 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp2.osuosl.org (Postfix) with ESMTPS id 90C53417C8; Mon, 29 May 2023 09:55:36 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org 90C53417C8 Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 5FE09C0036; Mon, 29 May 2023 09:55:36 +0000 (UTC) Received: from smtp3.osuosl.org (smtp3.osuosl.org [140.211.166.136]) by lists.linuxfoundation.org (Postfix) with ESMTP id C2D5FC002A for ; Mon, 29 May 2023 09:55:34 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id AA62261180 for ; Mon, 29 May 2023 09:55:34 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org AA62261180 Authentication-Results: smtp3.osuosl.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=TFtIfwp9 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 dVY4ir7gF9u9 for ; Mon, 29 May 2023 09:55:33 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 1B18660E7E Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by smtp3.osuosl.org (Postfix) with ESMTPS id 1B18660E7E for ; Mon, 29 May 2023 09:55:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1685354131; 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=KzC/l0fpMF0/rjKhXo7r3f2qSUymnwtlCS+qy5d+Ke8=; b=TFtIfwp9mM5s30BKDMPnW5r4CSXrFc+jSToV+ovSQks1pi4WmB/InuSAiVQdFgiKY8bc6D ebnPgJJ67M29Dro3DMyzlLjzy2RRyZBnpZg0oydFdBkOfIODYraIhRkada3ooSj8bqi8Yb lwG7tvxjRnIFfxQU8wF0irmjPRfMia0= Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-658-RG-pTPXNPfiYTQV2byFERQ-1; Mon, 29 May 2023 05:55:30 -0400 X-MC-Unique: RG-pTPXNPfiYTQV2byFERQ-1 Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-3f613f5d290so51808185e9.2 for ; Mon, 29 May 2023 02:55:30 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685354129; x=1687946129; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=KzC/l0fpMF0/rjKhXo7r3f2qSUymnwtlCS+qy5d+Ke8=; b=A3HbYWZ/ysle7+AK8s9nWekeOgAZ/q6U2EcRtGfLPhuINZsf34V4nNQKzaVcV7Aqa2 UPoYHQd9mn1EZ9/OpW4bgiOk/7/9TIKWXpL8vqoCNbAIJVyx74yRIx7sFtRNwYcHDwyF 2RIaltuVwmrcrrLauLbvwe4zNXAwP+mfXjqDFOC+fMyEDMwDRuTB8Kej14sPYLiXmsee 0gWlpM3EHcIesHitmnk5ISBty3UTDtNiBm5CFr5e6OggF3nMN8eaMOwztjaTvCZljT02 1v1T1nFYMA7d3mp6H3NANt7ZTyYpEpHrzJIDLZBPA9NNyhYyG3fJMO+qa6nshjZ1Ozbg JPVA== X-Gm-Message-State: AC+VfDydTNxZq0m55DaNtYJq1XFNRY8Tsk7tVVs3NofVjsABeVtHol6x tewU1Z0IWpiGK3eDsoZI5CjYi51N/ebBSV3mBh4HtoXGYPjmlzh7ya3ZvGWtQl6pOk59tHWGl0A jmA3g86T9UTnAFmYhy49gAIj1PymdsVyTrC2ReCRUVA== X-Received: by 2002:a7b:c006:0:b0:3f1:789d:ad32 with SMTP id c6-20020a7bc006000000b003f1789dad32mr7707672wmb.11.1685354128988; Mon, 29 May 2023 02:55:28 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5nR4I2f0CjjRvEFhd+fvR4fUIsKZehDM635JlFGi4BdzpIIrpenHLqyOGM0z5ScIFLBc4aaw== X-Received: by 2002:a7b:c006:0:b0:3f1:789d:ad32 with SMTP id c6-20020a7bc006000000b003f1789dad32mr7707660wmb.11.1685354128533; Mon, 29 May 2023 02:55:28 -0700 (PDT) Received: from redhat.com ([2.52.146.27]) by smtp.gmail.com with ESMTPSA id c22-20020a7bc016000000b003f4285629casm13609334wmb.42.2023.05.29.02.55.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 May 2023 02:55:27 -0700 (PDT) Date: Mon, 29 May 2023 05:55:24 -0400 From: "Michael S. Tsirkin" To: Liang Chen Subject: Re: [PATCH net-next 2/5] virtio_net: Add page_pool support to improve performance Message-ID: <20230529055439-mutt-send-email-mst@kernel.org> References: <20230526054621.18371-1-liangchen.linux@gmail.com> <20230526054621.18371-2-liangchen.linux@gmail.com> <20230528021708-mutt-send-email-mst@kernel.org> MIME-Version: 1.0 In-Reply-To: X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Disposition: inline Cc: xuanzhuo@linux.alibaba.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, alexander.duyck@gmail.com, virtualization@lists.linux-foundation.org, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, davem@davemloft.net 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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: virtualization-bounces@lists.linux-foundation.org Sender: "Virtualization" T24gTW9uLCBNYXkgMjksIDIwMjMgYXQgMDM6Mjc6NTZQTSArMDgwMCwgTGlhbmcgQ2hlbiB3cm90 ZToKPiBPbiBTdW4sIE1heSAyOCwgMjAyMyBhdCAyOjIw4oCvUE0gTWljaGFlbCBTLiBUc2lya2lu IDxtc3RAcmVkaGF0LmNvbT4gd3JvdGU6Cj4gPgo+ID4gT24gRnJpLCBNYXkgMjYsIDIwMjMgYXQg MDE6NDY6MThQTSArMDgwMCwgTGlhbmcgQ2hlbiB3cm90ZToKPiA+ID4gVGhlIGltcGxlbWVudGF0 aW9uIGF0IHRoZSBtb21lbnQgdXNlcyBvbmUgcGFnZSBwZXIgcGFja2V0IGluIGJvdGggdGhlCj4g PiA+IG5vcm1hbCBhbmQgWERQIHBhdGguIEluIGFkZGl0aW9uLCBpbnRyb2R1Y2luZyBhIG1vZHVs ZSBwYXJhbWV0ZXIgdG8gZW5hYmxlCj4gPiA+IG9yIGRpc2FibGUgdGhlIHVzYWdlIG9mIHBhZ2Ug cG9vbCAoZGlzYWJsZWQgYnkgZGVmYXVsdCkuCj4gPiA+Cj4gPiA+IEluIHNpbmdsZS1jb3JlIHZt IHRlc3RpbmcgZW52aXJvbm1lbnRzLCBpdCBnaXZlcyBhIG1vZGVzdCBwZXJmb3JtYW5jZSBnYWlu Cj4gPiA+IGluIHRoZSBub3JtYWwgcGF0aC4KPiA+ID4gICBVcHN0cmVhbSBjb2RlYmFzZTogNDcu NSBHYml0cy9zZWMKPiA+ID4gICBVcHN0cmVhbSBjb2RlYmFzZSArIHBhZ2VfcG9vbCBzdXBwb3J0 OiA1MC4yIEdiaXRzL3NlYwo+ID4gPgo+ID4gPiBJbiBtdWx0aS1jb3JlIHZtIHRlc3RpbmcgZW52 aXJvbm1lbnRzLCBUaGUgbW9zdCBzaWduaWZpY2FudCBwZXJmb3JtYW5jZQo+ID4gPiBnYWluIGlz IG9ic2VydmVkIGluIFhEUCBjcHVtYXA6Cj4gPiA+ICAgVXBzdHJlYW0gY29kZWJhc2U6IDEuMzgg R2JpdHMvc2VjCj4gPiA+ICAgVXBzdHJlYW0gY29kZWJhc2UgKyBwYWdlX3Bvb2wgc3VwcG9ydDog OS43NCBHYml0cy9zZWMKPiA+ID4KPiA+ID4gV2l0aCB0aGlzIGZvdW5kYXRpb24sIHdlIGNhbiBm dXJ0aGVyIGludGVncmF0ZSBwYWdlIHBvb2wgZnJhZ21lbnRhdGlvbiBhbmQKPiA+ID4gRE1BIG1h cC91bm1hcCBzdXBwb3J0Lgo+ID4gPgo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBMaWFuZyBDaGVuIDxs aWFuZ2NoZW4ubGludXhAZ21haWwuY29tPgo+ID4KPiA+IFdoeSBvZmYgYnkgZGVmYXVsdD8KPiA+ IEkgYW0gZ3Vlc3NpbmcgaXQgc29tZXRpbWVzIGhhcyBwZXJmb3JtYW5jZSBjb3N0cyB0b28/Cj4g Pgo+ID4KPiA+IFdoYXQgaGFwcGVucyBpZiB3ZSB1c2UgcGFnZSBwb29sIGZvciBiaWcgbW9kZSB0 b28/Cj4gPiBUaGUgbGVzcyBtb2RlcyB3ZSBoYXZlIHRoZSBiZXR0ZXIuLi4KPiA+Cj4gPgo+IAo+ IFN1cmUsIG5vdyBJIGJlbGlldmUgaXQgbWFrZXMgc2Vuc2UgdG8gZW5hYmxlIGl0IGJ5IGRlZmF1 bHQuIFdoZW4gdGhlCj4gcGFja2V0IHNpemUgaXMgdmVyeSBzbWFsbCwgaXQgcmVkdWNlcyB0aGUg bGlrZWxpaG9vZCBvZiBza2IKPiBjb2FsZXNjaW5nLiBCdXQgc3VjaCBjYXNlcyBhcmUgcmFyZS4K CnNtYWxsIHBhY2tldHMgYXJlIHJhcmU/IFRoZXNlIHdvcmtsb2FkcyBhcmUgZWFzeSB0byBjcmVh dGUgYWN0dWFsbHkuClBscyB0cnkgYW5kIGluY2x1ZGUgYmVuY2htYXJrIHdpdGggc21hbGwgcGFj a2V0IHNpemUuCgo+IFRoZSB1c2FnZSBvZiBwYWdlIHBvb2wgZm9yIGJpZyBtb2RlIGlzIGJlaW5n IGV2YWx1YXRlZCBub3cuIFRoYW5rcyEKPiAKPiA+ID4gLS0tCj4gPiA+ICBkcml2ZXJzL25ldC92 aXJ0aW9fbmV0LmMgfCAxODggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0t Cj4gPiA+ICAxIGZpbGUgY2hhbmdlZCwgMTQ2IGluc2VydGlvbnMoKyksIDQyIGRlbGV0aW9ucygt KQo+ID4gPgo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jIGIvZHJp dmVycy9uZXQvdmlydGlvX25ldC5jCj4gPiA+IGluZGV4IGM1ZGNhMGQ5MmU2NC4uOTljMGNhMGMx NzgxIDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKPiA+ID4gKysr IGIvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCj4gPiA+IEBAIC0zMSw2ICszMSw5IEBAIG1vZHVs ZV9wYXJhbShjc3VtLCBib29sLCAwNDQ0KTsKPiA+ID4gIG1vZHVsZV9wYXJhbShnc28sIGJvb2ws IDA0NDQpOwo+ID4gPiAgbW9kdWxlX3BhcmFtKG5hcGlfdHgsIGJvb2wsIDA2NDQpOwo+ID4gPgo+ ID4gPiArc3RhdGljIGJvb2wgcGFnZV9wb29sX2VuYWJsZWQ7Cj4gPiA+ICttb2R1bGVfcGFyYW0o cGFnZV9wb29sX2VuYWJsZWQsIGJvb2wsIDA0MDApOwo+ID4gPiArCj4gPiA+ICAvKiBGSVhNRTog TVRVIGluIGNvbmZpZy4gKi8KPiA+ID4gICNkZWZpbmUgR09PRF9QQUNLRVRfTEVOIChFVEhfSExF TiArIFZMQU5fSExFTiArIEVUSF9EQVRBX0xFTikKPiA+ID4gICNkZWZpbmUgR09PRF9DT1BZX0xF TiAgICAgICAgMTI4Cj4gPiA+IEBAIC0xNTksNiArMTYyLDkgQEAgc3RydWN0IHJlY2VpdmVfcXVl dWUgewo+ID4gPiAgICAgICAvKiBDaGFpbiBwYWdlcyBieSB0aGUgcHJpdmF0ZSBwdHIuICovCj4g PiA+ICAgICAgIHN0cnVjdCBwYWdlICpwYWdlczsKPiA+ID4KPiA+ID4gKyAgICAgLyogUGFnZSBw b29sICovCj4gPiA+ICsgICAgIHN0cnVjdCBwYWdlX3Bvb2wgKnBhZ2VfcG9vbDsKPiA+ID4gKwo+ ID4gPiAgICAgICAvKiBBdmVyYWdlIHBhY2tldCBsZW5ndGggZm9yIG1lcmdlYWJsZSByZWNlaXZl IGJ1ZmZlcnMuICovCj4gPiA+ICAgICAgIHN0cnVjdCBld21hX3BrdF9sZW4gbXJnX2F2Z19wa3Rf bGVuOwo+ID4gPgo+ID4gPiBAQCAtNDU5LDYgKzQ2NSwxNCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1 ZmYgKnZpcnRuZXRfYnVpbGRfc2tiKHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGJ1ZmxlbiwKPiA+ ID4gICAgICAgcmV0dXJuIHNrYjsKPiA+ID4gIH0KPiA+ID4KPiA+ID4gK3N0YXRpYyB2b2lkIHZp cnRuZXRfcHV0X3BhZ2Uoc3RydWN0IHJlY2VpdmVfcXVldWUgKnJxLCBzdHJ1Y3QgcGFnZSAqcGFn ZSkKPiA+ID4gK3sKPiA+ID4gKyAgICAgaWYgKHJxLT5wYWdlX3Bvb2wpCj4gPiA+ICsgICAgICAg ICAgICAgcGFnZV9wb29sX3B1dF9mdWxsX3BhZ2UocnEtPnBhZ2VfcG9vbCwgcGFnZSwgdHJ1ZSk7 Cj4gPiA+ICsgICAgIGVsc2UKPiA+ID4gKyAgICAgICAgICAgICBwdXRfcGFnZShwYWdlKTsKPiA+ ID4gK30KPiA+ID4gKwo+ID4gPiAgLyogQ2FsbGVkIGZyb20gYm90dG9tIGhhbGYgY29udGV4dCAq Lwo+ID4gPiAgc3RhdGljIHN0cnVjdCBza19idWZmICpwYWdlX3RvX3NrYihzdHJ1Y3QgdmlydG5l dF9pbmZvICp2aSwKPiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IHJlY2VpdmVfcXVldWUgKnJxLAo+ID4gPiBAQCAtNTU1LDcgKzU2OSw3IEBAIHN0YXRpYyBzdHJ1 Y3Qgc2tfYnVmZiAqcGFnZV90b19za2Ioc3RydWN0IHZpcnRuZXRfaW5mbyAqdmksCj4gPiA+ICAg ICAgIGhkciA9IHNrYl92bmV0X2hkcihza2IpOwo+ID4gPiAgICAgICBtZW1jcHkoaGRyLCBoZHJf cCwgaGRyX2xlbik7Cj4gPiA+ICAgICAgIGlmIChwYWdlX3RvX2ZyZWUpCj4gPiA+IC0gICAgICAg ICAgICAgcHV0X3BhZ2UocGFnZV90b19mcmVlKTsKPiA+ID4gKyAgICAgICAgICAgICB2aXJ0bmV0 X3B1dF9wYWdlKHJxLCBwYWdlX3RvX2ZyZWUpOwo+ID4gPgo+ID4gPiAgICAgICByZXR1cm4gc2ti Owo+ID4gPiAgfQo+ID4gPiBAQCAtODAyLDcgKzgxNiw3IEBAIHN0YXRpYyBpbnQgdmlydG5ldF94 ZHBfeG1pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAo+ID4gPiAgICAgICByZXR1cm4gcmV0Owo+ ID4gPiAgfQo+ID4gPgo+ID4gPiAtc3RhdGljIHZvaWQgcHV0X3hkcF9mcmFncyhzdHJ1Y3QgeGRw X2J1ZmYgKnhkcCkKPiA+ID4gK3N0YXRpYyB2b2lkIHB1dF94ZHBfZnJhZ3Moc3RydWN0IHhkcF9i dWZmICp4ZHAsIHN0cnVjdCByZWNlaXZlX3F1ZXVlICpycSkKPiA+ID4gIHsKPiA+ID4gICAgICAg c3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2hpbmZvOwo+ID4gPiAgICAgICBzdHJ1Y3QgcGFnZSAq eGRwX3BhZ2U7Cj4gPiA+IEBAIC04MTIsNyArODI2LDcgQEAgc3RhdGljIHZvaWQgcHV0X3hkcF9m cmFncyhzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCkKPiA+ID4gICAgICAgICAgICAgICBzaGluZm8gPSB4 ZHBfZ2V0X3NoYXJlZF9pbmZvX2Zyb21fYnVmZih4ZHApOwo+ID4gPiAgICAgICAgICAgICAgIGZv ciAoaSA9IDA7IGkgPCBzaGluZm8tPm5yX2ZyYWdzOyBpKyspIHsKPiA+ID4gICAgICAgICAgICAg ICAgICAgICAgIHhkcF9wYWdlID0gc2tiX2ZyYWdfcGFnZSgmc2hpbmZvLT5mcmFnc1tpXSk7Cj4g PiA+IC0gICAgICAgICAgICAgICAgICAgICBwdXRfcGFnZSh4ZHBfcGFnZSk7Cj4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICB2aXJ0bmV0X3B1dF9wYWdlKHJxLCB4ZHBfcGFnZSk7Cj4gPiA+ICAg ICAgICAgICAgICAgfQo+ID4gPiAgICAgICB9Cj4gPiA+ICB9Cj4gPiA+IEBAIC05MDMsNyArOTE3 LDExIEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqeGRwX2xpbmVhcml6ZV9wYWdlKHN0cnVjdCByZWNl aXZlX3F1ZXVlICpycSwKPiA+ID4gICAgICAgaWYgKHBhZ2Vfb2ZmICsgKmxlbiArIHRhaWxyb29t ID4gUEFHRV9TSVpFKQo+ID4gPiAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwo+ID4gPgo+ID4g PiAtICAgICBwYWdlID0gYWxsb2NfcGFnZShHRlBfQVRPTUlDKTsKPiA+ID4gKyAgICAgaWYgKHJx LT5wYWdlX3Bvb2wpCj4gPiA+ICsgICAgICAgICAgICAgcGFnZSA9IHBhZ2VfcG9vbF9kZXZfYWxs b2NfcGFnZXMocnEtPnBhZ2VfcG9vbCk7Cj4gPiA+ICsgICAgIGVsc2UKPiA+ID4gKyAgICAgICAg ICAgICBwYWdlID0gYWxsb2NfcGFnZShHRlBfQVRPTUlDKTsKPiA+ID4gKwo+ID4gPiAgICAgICBp ZiAoIXBhZ2UpCj4gPiA+ICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Cj4gPiA+Cj4gPiA+IEBA IC05MjYsMjEgKzk0NCwyNCBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKnhkcF9saW5lYXJpemVfcGFn ZShzdHJ1Y3QgcmVjZWl2ZV9xdWV1ZSAqcnEsCj4gPiA+ICAgICAgICAgICAgICAgICogaXMgc2Vu ZGluZyBwYWNrZXQgbGFyZ2VyIHRoYW4gdGhlIE1UVS4KPiA+ID4gICAgICAgICAgICAgICAgKi8K PiA+ID4gICAgICAgICAgICAgICBpZiAoKHBhZ2Vfb2ZmICsgYnVmbGVuICsgdGFpbHJvb20pID4g UEFHRV9TSVpFKSB7Cj4gPiA+IC0gICAgICAgICAgICAgICAgICAgICBwdXRfcGFnZShwKTsKPiA+ ID4gKyAgICAgICAgICAgICAgICAgICAgIHZpcnRuZXRfcHV0X3BhZ2UocnEsIHApOwo+ID4gPiAg ICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJfYnVmOwo+ID4gPiAgICAgICAgICAgICAgIH0K PiA+ID4KPiA+ID4gICAgICAgICAgICAgICBtZW1jcHkocGFnZV9hZGRyZXNzKHBhZ2UpICsgcGFn ZV9vZmYsCj4gPiA+ICAgICAgICAgICAgICAgICAgICAgIHBhZ2VfYWRkcmVzcyhwKSArIG9mZiwg YnVmbGVuKTsKPiA+ID4gICAgICAgICAgICAgICBwYWdlX29mZiArPSBidWZsZW47Cj4gPiA+IC0g ICAgICAgICAgICAgcHV0X3BhZ2UocCk7Cj4gPiA+ICsgICAgICAgICAgICAgdmlydG5ldF9wdXRf cGFnZShycSwgcCk7Cj4gPiA+ICAgICAgIH0KPiA+ID4KPiA+ID4gICAgICAgLyogSGVhZHJvb20g ZG9lcyBub3QgY29udHJpYnV0ZSB0byBwYWNrZXQgbGVuZ3RoICovCj4gPiA+ICAgICAgICpsZW4g PSBwYWdlX29mZiAtIFZJUlRJT19YRFBfSEVBRFJPT007Cj4gPiA+ICAgICAgIHJldHVybiBwYWdl Owo+ID4gPiAgZXJyX2J1ZjoKPiA+ID4gLSAgICAgX19mcmVlX3BhZ2VzKHBhZ2UsIDApOwo+ID4g PiArICAgICBpZiAocnEtPnBhZ2VfcG9vbCkKPiA+ID4gKyAgICAgICAgICAgICBwYWdlX3Bvb2xf cHV0X2Z1bGxfcGFnZShycS0+cGFnZV9wb29sLCBwYWdlLCB0cnVlKTsKPiA+ID4gKyAgICAgZWxz ZQo+ID4gPiArICAgICAgICAgICAgIF9fZnJlZV9wYWdlcyhwYWdlLCAwKTsKPiA+ID4gICAgICAg cmV0dXJuIE5VTEw7Cj4gPiA+ICB9Cj4gPiA+Cj4gPiA+IEBAIC0xMTQ0LDcgKzExNjUsNyBAQCBz dGF0aWMgdm9pZCBtZXJnZWFibGVfYnVmX2ZyZWUoc3RydWN0IHJlY2VpdmVfcXVldWUgKnJxLCBp bnQgbnVtX2J1ZiwKPiA+ID4gICAgICAgICAgICAgICB9Cj4gPiA+ICAgICAgICAgICAgICAgc3Rh dHMtPmJ5dGVzICs9IGxlbjsKPiA+ID4gICAgICAgICAgICAgICBwYWdlID0gdmlydF90b19oZWFk X3BhZ2UoYnVmKTsKPiA+ID4gLSAgICAgICAgICAgICBwdXRfcGFnZShwYWdlKTsKPiA+ID4gKyAg ICAgICAgICAgICB2aXJ0bmV0X3B1dF9wYWdlKHJxLCBwYWdlKTsKPiA+ID4gICAgICAgfQo+ID4g PiAgfQo+ID4gPgo+ID4gPiBAQCAtMTI2NCw3ICsxMjg1LDcgQEAgc3RhdGljIGludCB2aXJ0bmV0 X2J1aWxkX3hkcF9idWZmX21yZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAo+ID4gPiAgICAgICAg ICAgICAgIGN1cl9mcmFnX3NpemUgPSB0cnVlc2l6ZTsKPiA+ID4gICAgICAgICAgICAgICB4ZHBf ZnJhZ3NfdHJ1ZXN6ICs9IGN1cl9mcmFnX3NpemU7Cj4gPiA+ICAgICAgICAgICAgICAgaWYgKHVu bGlrZWx5KGxlbiA+IHRydWVzaXplIC0gcm9vbSB8fCBjdXJfZnJhZ19zaXplID4gUEFHRV9TSVpF KSkgewo+ID4gPiAtICAgICAgICAgICAgICAgICAgICAgcHV0X3BhZ2UocGFnZSk7Cj4gPiA+ICsg ICAgICAgICAgICAgICAgICAgICB2aXJ0bmV0X3B1dF9wYWdlKHJxLCBwYWdlKTsKPiA+ID4gICAg ICAgICAgICAgICAgICAgICAgIHByX2RlYnVnKCIlczogcnggZXJyb3I6IGxlbiAldSBleGNlZWRz IHRydWVzaXplICVsdVxuIiwKPiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl di0+bmFtZSwgbGVuLCAodW5zaWduZWQgbG9uZykodHJ1ZXNpemUgLSByb29tKSk7Cj4gPiA+ICAg ICAgICAgICAgICAgICAgICAgICBkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKPiA+ID4g QEAgLTEyODMsNyArMTMwNCw3IEBAIHN0YXRpYyBpbnQgdmlydG5ldF9idWlsZF94ZHBfYnVmZl9t cmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKPiA+ID4gICAgICAgcmV0dXJuIDA7Cj4gPiA+Cj4g PiA+ICBlcnI6Cj4gPiA+IC0gICAgIHB1dF94ZHBfZnJhZ3MoeGRwKTsKPiA+ID4gKyAgICAgcHV0 X3hkcF9mcmFncyh4ZHAsIHJxKTsKPiA+ID4gICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ICB9 Cj4gPiA+Cj4gPiA+IEBAIC0xMzQ0LDcgKzEzNjUsMTAgQEAgc3RhdGljIHZvaWQgKm1lcmdlYWJs ZV94ZHBfZ2V0X2J1ZihzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSwKPiA+ID4gICAgICAgICAgICAg ICBpZiAoKmxlbiArIHhkcF9yb29tID4gUEFHRV9TSVpFKQo+ID4gPiAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIE5VTEw7Cj4gPiA+Cj4gPiA+IC0gICAgICAgICAgICAgeGRwX3BhZ2UgPSBh bGxvY19wYWdlKEdGUF9BVE9NSUMpOwo+ID4gPiArICAgICAgICAgICAgIGlmIChycS0+cGFnZV9w b29sKQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgeGRwX3BhZ2UgPSBwYWdlX3Bvb2xfZGV2 X2FsbG9jX3BhZ2VzKHJxLT5wYWdlX3Bvb2wpOwo+ID4gPiArICAgICAgICAgICAgIGVsc2UKPiA+ ID4gKyAgICAgICAgICAgICAgICAgICAgIHhkcF9wYWdlID0gYWxsb2NfcGFnZShHRlBfQVRPTUlD KTsKPiA+ID4gICAgICAgICAgICAgICBpZiAoIXhkcF9wYWdlKQo+ID4gPiAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIE5VTEw7Cj4gPiA+Cj4gPiA+IEBAIC0xMzU0LDcgKzEzNzgsNyBAQCBz dGF0aWMgdm9pZCAqbWVyZ2VhYmxlX3hkcF9nZXRfYnVmKHN0cnVjdCB2aXJ0bmV0X2luZm8gKnZp LAo+ID4gPgo+ID4gPiAgICAgICAqZnJhbWVfc3ogPSBQQUdFX1NJWkU7Cj4gPiA+Cj4gPiA+IC0g ICAgIHB1dF9wYWdlKCpwYWdlKTsKPiA+ID4gKyAgICAgdmlydG5ldF9wdXRfcGFnZShycSwgKnBh Z2UpOwo+ID4gPgo+ID4gPiAgICAgICAqcGFnZSA9IHhkcF9wYWdlOwo+ID4gPgo+ID4gPiBAQCAt MTQwMCw2ICsxNDI0LDggQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpyZWNlaXZlX21lcmdlYWJs ZV94ZHAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKPiA+ID4gICAgICAgICAgICAgICBoZWFkX3Nr YiA9IGJ1aWxkX3NrYl9mcm9tX3hkcF9idWZmKGRldiwgdmksICZ4ZHAsIHhkcF9mcmFnc190cnVl c3opOwo+ID4gPiAgICAgICAgICAgICAgIGlmICh1bmxpa2VseSghaGVhZF9za2IpKQo+ID4gPiAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiA+ICsgICAgICAgICAgICAgaWYgKHJxLT5w YWdlX3Bvb2wpCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICBza2JfbWFya19mb3JfcmVjeWNs ZShoZWFkX3NrYik7Cj4gPiA+ICAgICAgICAgICAgICAgcmV0dXJuIGhlYWRfc2tiOwo+ID4gPgo+ ID4gPiAgICAgICBjYXNlIFhEUF9UWDoKPiA+ID4gQEAgLTE0MTAsMTAgKzE0MzYsMTAgQEAgc3Rh dGljIHN0cnVjdCBza19idWZmICpyZWNlaXZlX21lcmdlYWJsZV94ZHAoc3RydWN0IG5ldF9kZXZp Y2UgKmRldiwKPiA+ID4gICAgICAgICAgICAgICBicmVhazsKPiA+ID4gICAgICAgfQo+ID4gPgo+ ID4gPiAtICAgICBwdXRfeGRwX2ZyYWdzKCZ4ZHApOwo+ID4gPiArICAgICBwdXRfeGRwX2ZyYWdz KCZ4ZHAsIHJxKTsKPiA+ID4KPiA+ID4gIGVycl94ZHA6Cj4gPiA+IC0gICAgIHB1dF9wYWdlKHBh Z2UpOwo+ID4gPiArICAgICB2aXJ0bmV0X3B1dF9wYWdlKHJxLCBwYWdlKTsKPiA+ID4gICAgICAg bWVyZ2VhYmxlX2J1Zl9mcmVlKHJxLCBudW1fYnVmLCBkZXYsIHN0YXRzKTsKPiA+ID4KPiA+ID4g ICAgICAgc3RhdHMtPnhkcF9kcm9wcysrOwo+ID4gPiBAQCAtMTQ2Nyw2ICsxNDkzLDkgQEAgc3Rh dGljIHN0cnVjdCBza19idWZmICpyZWNlaXZlX21lcmdlYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAq ZGV2LAo+ID4gPiAgICAgICBoZWFkX3NrYiA9IHBhZ2VfdG9fc2tiKHZpLCBycSwgcGFnZSwgb2Zm c2V0LCBsZW4sIHRydWVzaXplLCBoZWFkcm9vbSk7Cj4gPiA+ICAgICAgIGN1cnJfc2tiID0gaGVh ZF9za2I7Cj4gPiA+Cj4gPiA+ICsgICAgIGlmIChycS0+cGFnZV9wb29sKQo+ID4gPiArICAgICAg ICAgICAgIHNrYl9tYXJrX2Zvcl9yZWN5Y2xlKGN1cnJfc2tiKTsKPiA+ID4gKwo+ID4gPiAgICAg ICBpZiAodW5saWtlbHkoIWN1cnJfc2tiKSkKPiA+ID4gICAgICAgICAgICAgICBnb3RvIGVycl9z a2I7Cj4gPiA+ICAgICAgIHdoaWxlICgtLW51bV9idWYpIHsKPiA+ID4gQEAgLTE1MDksNiArMTUz OCw4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcmVjZWl2ZV9tZXJnZWFibGUoc3RydWN0IG5l dF9kZXZpY2UgKmRldiwKPiA+ID4gICAgICAgICAgICAgICAgICAgICAgIGN1cnJfc2tiID0gbnNr YjsKPiA+ID4gICAgICAgICAgICAgICAgICAgICAgIGhlYWRfc2tiLT50cnVlc2l6ZSArPSBuc2ti LT50cnVlc2l6ZTsKPiA+ID4gICAgICAgICAgICAgICAgICAgICAgIG51bV9za2JfZnJhZ3MgPSAw Owo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgaWYgKHJxLT5wYWdlX3Bvb2wpCj4gPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrYl9tYXJrX2Zvcl9yZWN5Y2xlKGN1cnJfc2ti KTsKPiA+ID4gICAgICAgICAgICAgICB9Cj4gPiA+ICAgICAgICAgICAgICAgaWYgKGN1cnJfc2ti ICE9IGhlYWRfc2tiKSB7Cj4gPiA+ICAgICAgICAgICAgICAgICAgICAgICBoZWFkX3NrYi0+ZGF0 YV9sZW4gKz0gbGVuOwo+ID4gPiBAQCAtMTUxNyw3ICsxNTQ4LDcgQEAgc3RhdGljIHN0cnVjdCBz a19idWZmICpyZWNlaXZlX21lcmdlYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAo+ID4gPiAg ICAgICAgICAgICAgIH0KPiA+ID4gICAgICAgICAgICAgICBvZmZzZXQgPSBidWYgLSBwYWdlX2Fk ZHJlc3MocGFnZSk7Cj4gPiA+ICAgICAgICAgICAgICAgaWYgKHNrYl9jYW5fY29hbGVzY2UoY3Vy cl9za2IsIG51bV9za2JfZnJhZ3MsIHBhZ2UsIG9mZnNldCkpIHsKPiA+ID4gLSAgICAgICAgICAg ICAgICAgICAgIHB1dF9wYWdlKHBhZ2UpOwo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgdmly dG5ldF9wdXRfcGFnZShycSwgcGFnZSk7Cj4gPiA+ICAgICAgICAgICAgICAgICAgICAgICBza2Jf Y29hbGVzY2VfcnhfZnJhZyhjdXJyX3NrYiwgbnVtX3NrYl9mcmFncyAtIDEsCj4gPiA+ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4sIHRydWVzaXplKTsKPiA+ ID4gICAgICAgICAgICAgICB9IGVsc2Ugewo+ID4gPiBAQCAtMTUzMCw3ICsxNTYxLDcgQEAgc3Rh dGljIHN0cnVjdCBza19idWZmICpyZWNlaXZlX21lcmdlYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAq ZGV2LAo+ID4gPiAgICAgICByZXR1cm4gaGVhZF9za2I7Cj4gPiA+Cj4gPiA+ICBlcnJfc2tiOgo+ ID4gPiAtICAgICBwdXRfcGFnZShwYWdlKTsKPiA+ID4gKyAgICAgdmlydG5ldF9wdXRfcGFnZShy cSwgcGFnZSk7Cj4gPiA+ICAgICAgIG1lcmdlYWJsZV9idWZfZnJlZShycSwgbnVtX2J1ZiwgZGV2 LCBzdGF0cyk7Cj4gPiA+Cj4gPiA+ICBlcnJfYnVmOgo+ID4gPiBAQCAtMTczNywzMSArMTc2OCw0 MCBAQCBzdGF0aWMgaW50IGFkZF9yZWN2YnVmX21lcmdlYWJsZShzdHJ1Y3QgdmlydG5ldF9pbmZv ICp2aSwKPiA+ID4gICAgICAgICogZGlzYWJsZWQgR1NPIGZvciBYRFAsIGl0IHdvbid0IGJlIGEg YmlnIGlzc3VlLgo+ID4gPiAgICAgICAgKi8KPiA+ID4gICAgICAgbGVuID0gZ2V0X21lcmdlYWJs ZV9idWZfbGVuKHJxLCAmcnEtPm1yZ19hdmdfcGt0X2xlbiwgcm9vbSk7Cj4gPiA+IC0gICAgIGlm ICh1bmxpa2VseSghc2tiX3BhZ2VfZnJhZ19yZWZpbGwobGVuICsgcm9vbSwgYWxsb2NfZnJhZywg Z2ZwKSkpCj4gPiA+IC0gICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4gPiA+ICsgICAgIGlm IChycS0+cGFnZV9wb29sKSB7Cj4gPiA+ICsgICAgICAgICAgICAgc3RydWN0IHBhZ2UgKnBhZ2U7 Cj4gPiA+Cj4gPiA+IC0gICAgIGJ1ZiA9IChjaGFyICopcGFnZV9hZGRyZXNzKGFsbG9jX2ZyYWct PnBhZ2UpICsgYWxsb2NfZnJhZy0+b2Zmc2V0Owo+ID4gPiAtICAgICBidWYgKz0gaGVhZHJvb207 IC8qIGFkdmFuY2UgYWRkcmVzcyBsZWF2aW5nIGhvbGUgYXQgZnJvbnQgb2YgcGt0ICovCj4gPiA+ IC0gICAgIGdldF9wYWdlKGFsbG9jX2ZyYWctPnBhZ2UpOwo+ID4gPiAtICAgICBhbGxvY19mcmFn LT5vZmZzZXQgKz0gbGVuICsgcm9vbTsKPiA+ID4gLSAgICAgaG9sZSA9IGFsbG9jX2ZyYWctPnNp emUgLSBhbGxvY19mcmFnLT5vZmZzZXQ7Cj4gPiA+IC0gICAgIGlmIChob2xlIDwgbGVuICsgcm9v bSkgewo+ID4gPiAtICAgICAgICAgICAgIC8qIFRvIGF2b2lkIGludGVybmFsIGZyYWdtZW50YXRp b24sIGlmIHRoZXJlIGlzIHZlcnkgbGlrZWx5IG5vdAo+ID4gPiAtICAgICAgICAgICAgICAqIGVu b3VnaCBzcGFjZSBmb3IgYW5vdGhlciBidWZmZXIsIGFkZCB0aGUgcmVtYWluaW5nIHNwYWNlIHRv Cj4gPiA+IC0gICAgICAgICAgICAgICogdGhlIGN1cnJlbnQgYnVmZmVyLgo+ID4gPiAtICAgICAg ICAgICAgICAqIFhEUCBjb3JlIGFzc3VtZXMgdGhhdCBmcmFtZV9zaXplIG9mIHhkcF9idWZmIGFu ZCB0aGUgbGVuZ3RoCj4gPiA+IC0gICAgICAgICAgICAgICogb2YgdGhlIGZyYWcgYXJlIFBBR0Vf U0laRSwgc28gd2UgZGlzYWJsZSB0aGUgaG9sZSBtZWNoYW5pc20uCj4gPiA+IC0gICAgICAgICAg ICAgICovCj4gPiA+IC0gICAgICAgICAgICAgaWYgKCFoZWFkcm9vbSkKPiA+ID4gLSAgICAgICAg ICAgICAgICAgICAgIGxlbiArPSBob2xlOwo+ID4gPiAtICAgICAgICAgICAgIGFsbG9jX2ZyYWct Pm9mZnNldCArPSBob2xlOwo+ID4gPiAtICAgICB9Cj4gPiA+ICsgICAgICAgICAgICAgcGFnZSA9 IHBhZ2VfcG9vbF9kZXZfYWxsb2NfcGFnZXMocnEtPnBhZ2VfcG9vbCk7Cj4gPiA+ICsgICAgICAg ICAgICAgaWYgKHVubGlrZWx5KCFwYWdlKSkKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJl dHVybiAtRU5PTUVNOwo+ID4gPiArICAgICAgICAgICAgIGJ1ZiA9IChjaGFyICopcGFnZV9hZGRy ZXNzKHBhZ2UpOwo+ID4gPiArICAgICAgICAgICAgIGJ1ZiArPSBoZWFkcm9vbTsgLyogYWR2YW5j ZSBhZGRyZXNzIGxlYXZpbmcgaG9sZSBhdCBmcm9udCBvZiBwa3QgKi8KPiA+ID4gKyAgICAgfSBl bHNlIHsKPiA+ID4gKyAgICAgICAgICAgICBpZiAodW5saWtlbHkoIXNrYl9wYWdlX2ZyYWdfcmVm aWxsKGxlbiArIHJvb20sIGFsbG9jX2ZyYWcsIGdmcCkpKQo+ID4gPiArICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIC1FTk9NRU07Cj4gPiA+Cj4gPiA+ICsgICAgICAgICAgICAgYnVmID0gKGNo YXIgKilwYWdlX2FkZHJlc3MoYWxsb2NfZnJhZy0+cGFnZSkgKyBhbGxvY19mcmFnLT5vZmZzZXQ7 Cj4gPiA+ICsgICAgICAgICAgICAgYnVmICs9IGhlYWRyb29tOyAvKiBhZHZhbmNlIGFkZHJlc3Mg bGVhdmluZyBob2xlIGF0IGZyb250IG9mIHBrdCAqLwo+ID4gPiArICAgICAgICAgICAgIGdldF9w YWdlKGFsbG9jX2ZyYWctPnBhZ2UpOwo+ID4gPiArICAgICAgICAgICAgIGFsbG9jX2ZyYWctPm9m ZnNldCArPSBsZW4gKyByb29tOwo+ID4gPiArICAgICAgICAgICAgIGhvbGUgPSBhbGxvY19mcmFn LT5zaXplIC0gYWxsb2NfZnJhZy0+b2Zmc2V0Owo+ID4gPiArICAgICAgICAgICAgIGlmIChob2xl IDwgbGVuICsgcm9vbSkgewo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgLyogVG8gYXZvaWQg aW50ZXJuYWwgZnJhZ21lbnRhdGlvbiwgaWYgdGhlcmUgaXMgdmVyeSBsaWtlbHkgbm90Cj4gPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgKiBlbm91Z2ggc3BhY2UgZm9yIGFub3RoZXIgYnVmZmVy LCBhZGQgdGhlIHJlbWFpbmluZyBzcGFjZSB0bwo+ID4gPiArICAgICAgICAgICAgICAgICAgICAg ICogdGhlIGN1cnJlbnQgYnVmZmVyLgo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICogWERQ IGNvcmUgYXNzdW1lcyB0aGF0IGZyYW1lX3NpemUgb2YgeGRwX2J1ZmYgYW5kIHRoZSBsZW5ndGgK PiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAqIG9mIHRoZSBmcmFnIGFyZSBQQUdFX1NJWkUs IHNvIHdlIGRpc2FibGUgdGhlIGhvbGUgbWVjaGFuaXNtLgo+ID4gPiArICAgICAgICAgICAgICAg ICAgICAgICovCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICBpZiAoIWhlYWRyb29tKQo+ID4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gKz0gaG9sZTsKPiA+ID4gKyAgICAg ICAgICAgICAgICAgICAgIGFsbG9jX2ZyYWctPm9mZnNldCArPSBob2xlOwo+ID4gPiArICAgICAg ICAgICAgIH0KPiA+ID4gKyAgICAgfQo+ID4gPiAgICAgICBzZ19pbml0X29uZShycS0+c2csIGJ1 ZiwgbGVuKTsKPiA+ID4gICAgICAgY3R4ID0gbWVyZ2VhYmxlX2xlbl90b19jdHgobGVuICsgcm9v bSwgaGVhZHJvb20pOwo+ID4gPiAgICAgICBlcnIgPSB2aXJ0cXVldWVfYWRkX2luYnVmX2N0eChy cS0+dnEsIHJxLT5zZywgMSwgYnVmLCBjdHgsIGdmcCk7Cj4gPiA+ICAgICAgIGlmIChlcnIgPCAw KQo+ID4gPiAtICAgICAgICAgICAgIHB1dF9wYWdlKHZpcnRfdG9faGVhZF9wYWdlKGJ1ZikpOwo+ ID4gPiArICAgICAgICAgICAgIHZpcnRuZXRfcHV0X3BhZ2UocnEsIHZpcnRfdG9faGVhZF9wYWdl KGJ1ZikpOwo+ID4gPgo+ID4gPiAgICAgICByZXR1cm4gZXJyOwo+ID4gPiAgfQo+ID4gPiBAQCAt MTk5NCw4ICsyMDM0LDE1IEBAIHN0YXRpYyBpbnQgdmlydG5ldF9lbmFibGVfcXVldWVfcGFpcihz dHJ1Y3QgdmlydG5ldF9pbmZvICp2aSwgaW50IHFwX2luZGV4KQo+ID4gPiAgICAgICBpZiAoZXJy IDwgMCkKPiA+ID4gICAgICAgICAgICAgICByZXR1cm4gZXJyOwo+ID4gPgo+ID4gPiAtICAgICBl cnIgPSB4ZHBfcnhxX2luZm9fcmVnX21lbV9tb2RlbCgmdmktPnJxW3FwX2luZGV4XS54ZHBfcnhx LAo+ID4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRU1fVFlQRV9Q QUdFX1NIQVJFRCwgTlVMTCk7Cj4gPiA+ICsgICAgIGlmICh2aS0+cnFbcXBfaW5kZXhdLnBhZ2Vf cG9vbCkKPiA+ID4gKyAgICAgICAgICAgICBlcnIgPSB4ZHBfcnhxX2luZm9fcmVnX21lbV9tb2Rl bCgmdmktPnJxW3FwX2luZGV4XS54ZHBfcnhxLAo+ID4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE1FTV9UWVBFX1BBR0VfUE9PTCwKPiA+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aS0+cnFbcXBfaW5kZXhd LnBhZ2VfcG9vbCk7Cj4gPiA+ICsgICAgIGVsc2UKPiA+ID4gKyAgICAgICAgICAgICBlcnIgPSB4 ZHBfcnhxX2luZm9fcmVnX21lbV9tb2RlbCgmdmktPnJxW3FwX2luZGV4XS54ZHBfcnhxLAo+ID4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1FTV9UWVBF X1BBR0VfU0hBUkVELAo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE5VTEwpOwo+ID4gPiArCj4gPiA+ICAgICAgIGlmIChlcnIgPCAwKQo+ID4gPiAg ICAgICAgICAgICAgIGdvdG8gZXJyX3hkcF9yZWdfbWVtX21vZGVsOwo+ID4gPgo+ID4gPiBAQCAt Mjk1MSw2ICsyOTk4LDcgQEAgc3RhdGljIHZvaWQgdmlydG5ldF9nZXRfc3RyaW5ncyhzdHJ1Y3Qg bmV0X2RldmljZSAqZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqZGF0YSkKPiA+ID4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZXRodG9vbF9zcHJpbnRmKCZwLCAidHhfcXVldWVfJXVfJXMi LCBpLAo+ID4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dmlydG5ldF9zcV9zdGF0c19kZXNjW2pdLmRlc2MpOwo+ID4gPiAgICAgICAgICAgICAgIH0KPiA+ ID4gKyAgICAgICAgICAgICBwYWdlX3Bvb2xfZXRodG9vbF9zdGF0c19nZXRfc3RyaW5ncyhwKTsK PiA+ID4gICAgICAgICAgICAgICBicmVhazsKPiA+ID4gICAgICAgfQo+ID4gPiAgfQo+ID4gPiBA QCAtMjk2MiwxMiArMzAxMCwzMCBAQCBzdGF0aWMgaW50IHZpcnRuZXRfZ2V0X3NzZXRfY291bnQo c3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHNzZXQpCj4gPiA+ICAgICAgIHN3aXRjaCAoc3Nl dCkgewo+ID4gPiAgICAgICBjYXNlIEVUSF9TU19TVEFUUzoKPiA+ID4gICAgICAgICAgICAgICBy ZXR1cm4gdmktPmN1cnJfcXVldWVfcGFpcnMgKiAoVklSVE5FVF9SUV9TVEFUU19MRU4gKwo+ID4g PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWSVJUTkVUX1NR X1NUQVRTX0xFTik7Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFZJUlRORVRfU1FfU1RBVFNfTEVOICsKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChwYWdlX3Bvb2xfZW5hYmxlZCAmJiB2aS0+bWVyZ2Vh YmxlX3J4X2J1ZnMgPwo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHBhZ2VfcG9vbF9ldGh0b29sX3N0YXRzX2dldF9jb3VudCgpIDogMCkpOwo+ID4g PiAgICAgICBkZWZhdWx0Ogo+ID4gPiAgICAgICAgICAgICAgIHJldHVybiAtRU9QTk9UU1VQUDsK PiA+ID4gICAgICAgfQo+ID4gPiAgfQo+ID4gPgo+ID4gPiArc3RhdGljIHZvaWQgdmlydG5ldF9n ZXRfcGFnZV9wb29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU2NCAqZGF0YSkKPiA+ ID4gK3sKPiA+ID4gKyNpZmRlZiBDT05GSUdfUEFHRV9QT09MX1NUQVRTCj4gPiA+ICsgICAgIHN0 cnVjdCB2aXJ0bmV0X2luZm8gKnZpID0gbmV0ZGV2X3ByaXYoZGV2KTsKPiA+ID4gKyAgICAgc3Ry dWN0IHBhZ2VfcG9vbF9zdGF0cyBwcF9zdGF0cyA9IHt9Owo+ID4gPiArICAgICBpbnQgaTsKPiA+ ID4gKwo+ID4gPiArICAgICBmb3IgKGkgPSAwOyBpIDwgdmktPmN1cnJfcXVldWVfcGFpcnM7IGkr Kykgewo+ID4gPiArICAgICAgICAgICAgIGlmICghdmktPnJxW2ldLnBhZ2VfcG9vbCkKPiA+ID4g KyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ID4gPiArICAgICAgICAgICAgIHBhZ2Vf cG9vbF9nZXRfc3RhdHModmktPnJxW2ldLnBhZ2VfcG9vbCwgJnBwX3N0YXRzKTsKPiA+ID4gKyAg ICAgfQo+ID4gPiArICAgICBwYWdlX3Bvb2xfZXRodG9vbF9zdGF0c19nZXQoZGF0YSwgJnBwX3N0 YXRzKTsKPiA+ID4gKyNlbmRpZiAvKiBDT05GSUdfUEFHRV9QT09MX1NUQVRTICovCj4gPiA+ICt9 Cj4gPiA+ICsKPiA+ID4gIHN0YXRpYyB2b2lkIHZpcnRuZXRfZ2V0X2V0aHRvb2xfc3RhdHMoc3Ry dWN0IG5ldF9kZXZpY2UgKmRldiwKPiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLCB1NjQgKmRhdGEpCj4gPiA+ICB7Cj4g PiA+IEBAIC0zMDAzLDYgKzMwNjksOCBAQCBzdGF0aWMgdm9pZCB2aXJ0bmV0X2dldF9ldGh0b29s X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCj4gPiA+ICAgICAgICAgICAgICAgfSB3aGls ZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5KCZzcS0+c3RhdHMuc3luY3AsIHN0YXJ0KSk7Cj4gPiA+ ICAgICAgICAgICAgICAgaWR4ICs9IFZJUlRORVRfU1FfU1RBVFNfTEVOOwo+ID4gPiAgICAgICB9 Cj4gPiA+ICsKPiA+ID4gKyAgICAgdmlydG5ldF9nZXRfcGFnZV9wb29sX3N0YXRzKGRldiwgJmRh dGFbaWR4XSk7Cj4gPiA+ICB9Cj4gPiA+Cj4gPiA+ICBzdGF0aWMgdm9pZCB2aXJ0bmV0X2dldF9j aGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAo+ID4gPiBAQCAtMzYyMyw2ICszNjkxLDgg QEAgc3RhdGljIHZvaWQgdmlydG5ldF9mcmVlX3F1ZXVlcyhzdHJ1Y3QgdmlydG5ldF9pbmZvICp2 aSkKPiA+ID4gICAgICAgZm9yIChpID0gMDsgaSA8IHZpLT5tYXhfcXVldWVfcGFpcnM7IGkrKykg ewo+ID4gPiAgICAgICAgICAgICAgIF9fbmV0aWZfbmFwaV9kZWwoJnZpLT5ycVtpXS5uYXBpKTsK PiA+ID4gICAgICAgICAgICAgICBfX25ldGlmX25hcGlfZGVsKCZ2aS0+c3FbaV0ubmFwaSk7Cj4g PiA+ICsgICAgICAgICAgICAgaWYgKHZpLT5ycVtpXS5wYWdlX3Bvb2wpCj4gPiA+ICsgICAgICAg ICAgICAgICAgICAgICBwYWdlX3Bvb2xfZGVzdHJveSh2aS0+cnFbaV0ucGFnZV9wb29sKTsKPiA+ ID4gICAgICAgfQo+ID4gPgo+ID4gPiAgICAgICAvKiBXZSBjYWxsZWQgX19uZXRpZl9uYXBpX2Rl bCgpLAo+ID4gPiBAQCAtMzY3OSwxMiArMzc0OSwxOSBAQCBzdGF0aWMgdm9pZCB2aXJ0bmV0X3Jx X2ZyZWVfdW51c2VkX2J1ZihzdHJ1Y3QgdmlydHF1ZXVlICp2cSwgdm9pZCAqYnVmKQo+ID4gPiAg ICAgICBzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSA9IHZxLT52ZGV2LT5wcml2Owo+ID4gPiAgICAg ICBpbnQgaSA9IHZxMnJ4cSh2cSk7Cj4gPiA+Cj4gPiA+IC0gICAgIGlmICh2aS0+bWVyZ2VhYmxl X3J4X2J1ZnMpCj4gPiA+IC0gICAgICAgICAgICAgcHV0X3BhZ2UodmlydF90b19oZWFkX3BhZ2Uo YnVmKSk7Cj4gPiA+IC0gICAgIGVsc2UgaWYgKHZpLT5iaWdfcGFja2V0cykKPiA+ID4gKyAgICAg aWYgKHZpLT5tZXJnZWFibGVfcnhfYnVmcykgewo+ID4gPiArICAgICAgICAgICAgIGlmICh2aS0+ cnFbaV0ucGFnZV9wb29sKSB7Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICBwYWdlX3Bvb2xf cHV0X2Z1bGxfcGFnZSh2aS0+cnFbaV0ucGFnZV9wb29sLAo+ID4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlydF90b19oZWFkX3BhZ2UoYnVmKSwKPiA+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOwo+ ID4gPiArICAgICAgICAgICAgIH0gZWxzZSB7Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICBw dXRfcGFnZSh2aXJ0X3RvX2hlYWRfcGFnZShidWYpKTsKPiA+ID4gKyAgICAgICAgICAgICB9Cj4g PiA+ICsgICAgIH0gZWxzZSBpZiAodmktPmJpZ19wYWNrZXRzKSB7Cj4gPiA+ICAgICAgICAgICAg ICAgZ2l2ZV9wYWdlcygmdmktPnJxW2ldLCBidWYpOwo+ID4gPiAtICAgICBlbHNlCj4gPiA+ICsg ICAgIH0gZWxzZSB7Cj4gPiA+ICAgICAgICAgICAgICAgcHV0X3BhZ2UodmlydF90b19oZWFkX3Bh Z2UoYnVmKSk7Cj4gPiA+ICsgICAgIH0KPiA+ID4gIH0KPiA+ID4KPiA+ID4gIHN0YXRpYyB2b2lk IGZyZWVfdW51c2VkX2J1ZnMoc3RydWN0IHZpcnRuZXRfaW5mbyAqdmkpCj4gPiA+IEBAIC0zNzE4 LDYgKzM3OTUsMjYgQEAgc3RhdGljIHZvaWQgdmlydG5ldF9kZWxfdnFzKHN0cnVjdCB2aXJ0bmV0 X2luZm8gKnZpKQo+ID4gPiAgICAgICB2aXJ0bmV0X2ZyZWVfcXVldWVzKHZpKTsKPiA+ID4gIH0K PiA+ID4KPiA+ID4gK3N0YXRpYyB2b2lkIHZpcnRuZXRfYWxsb2NfcGFnZV9wb29sKHN0cnVjdCBy ZWNlaXZlX3F1ZXVlICpycSkKPiA+ID4gK3sKPiA+ID4gKyAgICAgc3RydWN0IHZpcnRpb19kZXZp Y2UgKnZkZXYgPSBycS0+dnEtPnZkZXY7Cj4gPiA+ICsKPiA+ID4gKyAgICAgc3RydWN0IHBhZ2Vf cG9vbF9wYXJhbXMgcHBfcGFyYW1zID0gewo+ID4gPiArICAgICAgICAgICAgIC5vcmRlciA9IDAs Cj4gPiA+ICsgICAgICAgICAgICAgLnBvb2xfc2l6ZSA9IHJxLT52cS0+bnVtX21heCwKPiA+ID4g KyAgICAgICAgICAgICAubmlkID0gZGV2X3RvX25vZGUodmRldi0+ZGV2LnBhcmVudCksCj4gPiA+ ICsgICAgICAgICAgICAgLmRldiA9IHZkZXYtPmRldi5wYXJlbnQsCj4gPiA+ICsgICAgICAgICAg ICAgLm9mZnNldCA9IDAsCj4gPiA+ICsgICAgIH07Cj4gPiA+ICsKPiA+ID4gKyAgICAgcnEtPnBh Z2VfcG9vbCA9IHBhZ2VfcG9vbF9jcmVhdGUoJnBwX3BhcmFtcyk7Cj4gPiA+ICsgICAgIGlmIChJ U19FUlIocnEtPnBhZ2VfcG9vbCkpIHsKPiA+ID4gKyAgICAgICAgICAgICBkZXZfd2FybigmdmRl di0+ZGV2LCAicGFnZSBwb29sIGNyZWF0aW9uIGZhaWxlZDogJWxkXG4iLAo+ID4gPiArICAgICAg ICAgICAgICAgICAgICAgIFBUUl9FUlIocnEtPnBhZ2VfcG9vbCkpOwo+ID4gPiArICAgICAgICAg ICAgIHJxLT5wYWdlX3Bvb2wgPSBOVUxMOwo+ID4gPiArICAgICB9Cj4gPiA+ICt9Cj4gPiA+ICsK PiA+ID4gIC8qIEhvdyBsYXJnZSBzaG91bGQgYSBzaW5nbGUgYnVmZmVyIGJlIHNvIGEgcXVldWUg ZnVsbCBvZiB0aGVzZSBjYW4gZml0IGF0Cj4gPiA+ICAgKiBsZWFzdCBvbmUgZnVsbCBwYWNrZXQ/ Cj4gPiA+ICAgKiBMb2dpYyBiZWxvdyBhc3N1bWVzIHRoZSBtZXJnZWFibGUgYnVmZmVyIGhlYWRl ciBpcyB1c2VkLgo+ID4gPiBAQCAtMzgwMSw2ICszODk4LDEzIEBAIHN0YXRpYyBpbnQgdmlydG5l dF9maW5kX3ZxcyhzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSkKPiA+ID4gICAgICAgICAgICAgICB2 aS0+cnFbaV0udnEgPSB2cXNbcnhxMnZxKGkpXTsKPiA+ID4gICAgICAgICAgICAgICB2aS0+cnFb aV0ubWluX2J1Zl9sZW4gPSBtZXJnZWFibGVfbWluX2J1Zl9sZW4odmksIHZpLT5ycVtpXS52cSk7 Cj4gPiA+ICAgICAgICAgICAgICAgdmktPnNxW2ldLnZxID0gdnFzW3R4cTJ2cShpKV07Cj4gPiA+ ICsKPiA+ID4gKyAgICAgICAgICAgICBpZiAocGFnZV9wb29sX2VuYWJsZWQgJiYgdmktPm1lcmdl YWJsZV9yeF9idWZzKQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgdmlydG5ldF9hbGxvY19w YWdlX3Bvb2woJnZpLT5ycVtpXSk7Cj4gPiA+ICsgICAgICAgICAgICAgZWxzZQo+ID4gPiArICAg ICAgICAgICAgICAgICAgICAgZGV2X3dhcm4oJnZpLT52ZGV2LT5kZXYsCj4gPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAicGFnZSBwb29sIG9ubHkgc3VwcG9ydCBtZXJnZWFibGUg bW9kZVxuIik7Cj4gPiA+ICsKPiA+ID4gICAgICAgfQo+ID4gPgo+ID4gPiAgICAgICAvKiBydW4g aGVyZTogcmV0ID09IDAuICovCj4gPiA+IC0tCj4gPiA+IDIuMzEuMQo+ID4KCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClZpcnR1YWxpemF0aW9uIG1haWxp bmcgbGlzdApWaXJ0dWFsaXphdGlvbkBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwpodHRwczov L2xpc3RzLmxpbnV4Zm91bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby92aXJ0dWFsaXphdGlv bg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 69118C77B7E for ; Mon, 29 May 2023 09:56:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231861AbjE2J4d (ORCPT ); Mon, 29 May 2023 05:56:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49832 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231869AbjE2J4a (ORCPT ); Mon, 29 May 2023 05:56:30 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9A919DA for ; Mon, 29 May 2023 02:55:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1685354131; 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=KzC/l0fpMF0/rjKhXo7r3f2qSUymnwtlCS+qy5d+Ke8=; b=TFtIfwp9mM5s30BKDMPnW5r4CSXrFc+jSToV+ovSQks1pi4WmB/InuSAiVQdFgiKY8bc6D ebnPgJJ67M29Dro3DMyzlLjzy2RRyZBnpZg0oydFdBkOfIODYraIhRkada3ooSj8bqi8Yb lwG7tvxjRnIFfxQU8wF0irmjPRfMia0= Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-646-8EErdrkdM3qyOPnLcxxNrw-1; Mon, 29 May 2023 05:55:30 -0400 X-MC-Unique: 8EErdrkdM3qyOPnLcxxNrw-1 Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-3f604260ef3so51859385e9.3 for ; Mon, 29 May 2023 02:55:30 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685354129; x=1687946129; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=KzC/l0fpMF0/rjKhXo7r3f2qSUymnwtlCS+qy5d+Ke8=; b=K3NTY3tp2FEeO1b3O4ZaTZokDb8UknUwLqXuCSD88zzTdZo1VWBQ1BOLcvC5DCuZwg H1gi9T87lJWc/ujXW5Anx585jgAwK/jJjy0u5cNZvdrV2y04in2zj6QjJgD8rSN0T9vM LW39tP7aUdMDRk+kmhyCAcJa1TWvrZUNUabdXvVhbomaVIdPdZyt2XlLtD+XuWbdzc2R 8wEBdKLnYO6Z2QS6Se0dfEijkHb3aQXI5n2MFcA25qBR6cZNY9jOyaitwReT6NF90xts 3zUXsZ3KiqLz04RcjErm5I68guEJkJOQizP0agEwUYDeq+jEiu4b7xGJRjTF2GtdIXBj Z22g== X-Gm-Message-State: AC+VfDwqI8CB+nxn5/f9/QODyuPpTZnBXN9PMPmKPsHSDE5GYFdIrlXw rkA+l8GV1xBxDk3XEkL8Twa+uNDng4wHoAJ1rry2ESlQLE+kt5JfpcyOJxr1txQnONboZjHpAMm jUCk/2rxVT1XbMFbZHozTNVXg X-Received: by 2002:a7b:c006:0:b0:3f1:789d:ad32 with SMTP id c6-20020a7bc006000000b003f1789dad32mr7707674wmb.11.1685354128988; Mon, 29 May 2023 02:55:28 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5nR4I2f0CjjRvEFhd+fvR4fUIsKZehDM635JlFGi4BdzpIIrpenHLqyOGM0z5ScIFLBc4aaw== X-Received: by 2002:a7b:c006:0:b0:3f1:789d:ad32 with SMTP id c6-20020a7bc006000000b003f1789dad32mr7707660wmb.11.1685354128533; Mon, 29 May 2023 02:55:28 -0700 (PDT) Received: from redhat.com ([2.52.146.27]) by smtp.gmail.com with ESMTPSA id c22-20020a7bc016000000b003f4285629casm13609334wmb.42.2023.05.29.02.55.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 May 2023 02:55:27 -0700 (PDT) Date: Mon, 29 May 2023 05:55:24 -0400 From: "Michael S. Tsirkin" To: Liang Chen Cc: jasowang@redhat.com, virtualization@lists.linux-foundation.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, xuanzhuo@linux.alibaba.com, kuba@kernel.org, edumazet@google.com, davem@davemloft.net, pabeni@redhat.com, alexander.duyck@gmail.com Subject: Re: [PATCH net-next 2/5] virtio_net: Add page_pool support to improve performance Message-ID: <20230529055439-mutt-send-email-mst@kernel.org> References: <20230526054621.18371-1-liangchen.linux@gmail.com> <20230526054621.18371-2-liangchen.linux@gmail.com> <20230528021708-mutt-send-email-mst@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, May 29, 2023 at 03:27:56PM +0800, Liang Chen wrote: > On Sun, May 28, 2023 at 2:20 PM Michael S. Tsirkin wrote: > > > > On Fri, May 26, 2023 at 01:46:18PM +0800, Liang Chen wrote: > > > The implementation at the moment uses one page per packet in both the > > > normal and XDP path. In addition, introducing a module parameter to enable > > > or disable the usage of page pool (disabled by default). > > > > > > In single-core vm testing environments, it gives a modest performance gain > > > in the normal path. > > > Upstream codebase: 47.5 Gbits/sec > > > Upstream codebase + page_pool support: 50.2 Gbits/sec > > > > > > In multi-core vm testing environments, The most significant performance > > > gain is observed in XDP cpumap: > > > Upstream codebase: 1.38 Gbits/sec > > > Upstream codebase + page_pool support: 9.74 Gbits/sec > > > > > > With this foundation, we can further integrate page pool fragmentation and > > > DMA map/unmap support. > > > > > > Signed-off-by: Liang Chen > > > > Why off by default? > > I am guessing it sometimes has performance costs too? > > > > > > What happens if we use page pool for big mode too? > > The less modes we have the better... > > > > > > Sure, now I believe it makes sense to enable it by default. When the > packet size is very small, it reduces the likelihood of skb > coalescing. But such cases are rare. small packets are rare? These workloads are easy to create actually. Pls try and include benchmark with small packet size. > The usage of page pool for big mode is being evaluated now. Thanks! > > > > --- > > > drivers/net/virtio_net.c | 188 ++++++++++++++++++++++++++++++--------- > > > 1 file changed, 146 insertions(+), 42 deletions(-) > > > > > > diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c > > > index c5dca0d92e64..99c0ca0c1781 100644 > > > --- a/drivers/net/virtio_net.c > > > +++ b/drivers/net/virtio_net.c > > > @@ -31,6 +31,9 @@ module_param(csum, bool, 0444); > > > module_param(gso, bool, 0444); > > > module_param(napi_tx, bool, 0644); > > > > > > +static bool page_pool_enabled; > > > +module_param(page_pool_enabled, bool, 0400); > > > + > > > /* FIXME: MTU in config. */ > > > #define GOOD_PACKET_LEN (ETH_HLEN + VLAN_HLEN + ETH_DATA_LEN) > > > #define GOOD_COPY_LEN 128 > > > @@ -159,6 +162,9 @@ struct receive_queue { > > > /* Chain pages by the private ptr. */ > > > struct page *pages; > > > > > > + /* Page pool */ > > > + struct page_pool *page_pool; > > > + > > > /* Average packet length for mergeable receive buffers. */ > > > struct ewma_pkt_len mrg_avg_pkt_len; > > > > > > @@ -459,6 +465,14 @@ static struct sk_buff *virtnet_build_skb(void *buf, unsigned int buflen, > > > return skb; > > > } > > > > > > +static void virtnet_put_page(struct receive_queue *rq, struct page *page) > > > +{ > > > + if (rq->page_pool) > > > + page_pool_put_full_page(rq->page_pool, page, true); > > > + else > > > + put_page(page); > > > +} > > > + > > > /* Called from bottom half context */ > > > static struct sk_buff *page_to_skb(struct virtnet_info *vi, > > > struct receive_queue *rq, > > > @@ -555,7 +569,7 @@ static struct sk_buff *page_to_skb(struct virtnet_info *vi, > > > hdr = skb_vnet_hdr(skb); > > > memcpy(hdr, hdr_p, hdr_len); > > > if (page_to_free) > > > - put_page(page_to_free); > > > + virtnet_put_page(rq, page_to_free); > > > > > > return skb; > > > } > > > @@ -802,7 +816,7 @@ static int virtnet_xdp_xmit(struct net_device *dev, > > > return ret; > > > } > > > > > > -static void put_xdp_frags(struct xdp_buff *xdp) > > > +static void put_xdp_frags(struct xdp_buff *xdp, struct receive_queue *rq) > > > { > > > struct skb_shared_info *shinfo; > > > struct page *xdp_page; > > > @@ -812,7 +826,7 @@ static void put_xdp_frags(struct xdp_buff *xdp) > > > shinfo = xdp_get_shared_info_from_buff(xdp); > > > for (i = 0; i < shinfo->nr_frags; i++) { > > > xdp_page = skb_frag_page(&shinfo->frags[i]); > > > - put_page(xdp_page); > > > + virtnet_put_page(rq, xdp_page); > > > } > > > } > > > } > > > @@ -903,7 +917,11 @@ static struct page *xdp_linearize_page(struct receive_queue *rq, > > > if (page_off + *len + tailroom > PAGE_SIZE) > > > return NULL; > > > > > > - page = alloc_page(GFP_ATOMIC); > > > + if (rq->page_pool) > > > + page = page_pool_dev_alloc_pages(rq->page_pool); > > > + else > > > + page = alloc_page(GFP_ATOMIC); > > > + > > > if (!page) > > > return NULL; > > > > > > @@ -926,21 +944,24 @@ static struct page *xdp_linearize_page(struct receive_queue *rq, > > > * is sending packet larger than the MTU. > > > */ > > > if ((page_off + buflen + tailroom) > PAGE_SIZE) { > > > - put_page(p); > > > + virtnet_put_page(rq, p); > > > goto err_buf; > > > } > > > > > > memcpy(page_address(page) + page_off, > > > page_address(p) + off, buflen); > > > page_off += buflen; > > > - put_page(p); > > > + virtnet_put_page(rq, p); > > > } > > > > > > /* Headroom does not contribute to packet length */ > > > *len = page_off - VIRTIO_XDP_HEADROOM; > > > return page; > > > err_buf: > > > - __free_pages(page, 0); > > > + if (rq->page_pool) > > > + page_pool_put_full_page(rq->page_pool, page, true); > > > + else > > > + __free_pages(page, 0); > > > return NULL; > > > } > > > > > > @@ -1144,7 +1165,7 @@ static void mergeable_buf_free(struct receive_queue *rq, int num_buf, > > > } > > > stats->bytes += len; > > > page = virt_to_head_page(buf); > > > - put_page(page); > > > + virtnet_put_page(rq, page); > > > } > > > } > > > > > > @@ -1264,7 +1285,7 @@ static int virtnet_build_xdp_buff_mrg(struct net_device *dev, > > > cur_frag_size = truesize; > > > xdp_frags_truesz += cur_frag_size; > > > if (unlikely(len > truesize - room || cur_frag_size > PAGE_SIZE)) { > > > - put_page(page); > > > + virtnet_put_page(rq, page); > > > pr_debug("%s: rx error: len %u exceeds truesize %lu\n", > > > dev->name, len, (unsigned long)(truesize - room)); > > > dev->stats.rx_length_errors++; > > > @@ -1283,7 +1304,7 @@ static int virtnet_build_xdp_buff_mrg(struct net_device *dev, > > > return 0; > > > > > > err: > > > - put_xdp_frags(xdp); > > > + put_xdp_frags(xdp, rq); > > > return -EINVAL; > > > } > > > > > > @@ -1344,7 +1365,10 @@ static void *mergeable_xdp_get_buf(struct virtnet_info *vi, > > > if (*len + xdp_room > PAGE_SIZE) > > > return NULL; > > > > > > - xdp_page = alloc_page(GFP_ATOMIC); > > > + if (rq->page_pool) > > > + xdp_page = page_pool_dev_alloc_pages(rq->page_pool); > > > + else > > > + xdp_page = alloc_page(GFP_ATOMIC); > > > if (!xdp_page) > > > return NULL; > > > > > > @@ -1354,7 +1378,7 @@ static void *mergeable_xdp_get_buf(struct virtnet_info *vi, > > > > > > *frame_sz = PAGE_SIZE; > > > > > > - put_page(*page); > > > + virtnet_put_page(rq, *page); > > > > > > *page = xdp_page; > > > > > > @@ -1400,6 +1424,8 @@ static struct sk_buff *receive_mergeable_xdp(struct net_device *dev, > > > head_skb = build_skb_from_xdp_buff(dev, vi, &xdp, xdp_frags_truesz); > > > if (unlikely(!head_skb)) > > > break; > > > + if (rq->page_pool) > > > + skb_mark_for_recycle(head_skb); > > > return head_skb; > > > > > > case XDP_TX: > > > @@ -1410,10 +1436,10 @@ static struct sk_buff *receive_mergeable_xdp(struct net_device *dev, > > > break; > > > } > > > > > > - put_xdp_frags(&xdp); > > > + put_xdp_frags(&xdp, rq); > > > > > > err_xdp: > > > - put_page(page); > > > + virtnet_put_page(rq, page); > > > mergeable_buf_free(rq, num_buf, dev, stats); > > > > > > stats->xdp_drops++; > > > @@ -1467,6 +1493,9 @@ static struct sk_buff *receive_mergeable(struct net_device *dev, > > > head_skb = page_to_skb(vi, rq, page, offset, len, truesize, headroom); > > > curr_skb = head_skb; > > > > > > + if (rq->page_pool) > > > + skb_mark_for_recycle(curr_skb); > > > + > > > if (unlikely(!curr_skb)) > > > goto err_skb; > > > while (--num_buf) { > > > @@ -1509,6 +1538,8 @@ static struct sk_buff *receive_mergeable(struct net_device *dev, > > > curr_skb = nskb; > > > head_skb->truesize += nskb->truesize; > > > num_skb_frags = 0; > > > + if (rq->page_pool) > > > + skb_mark_for_recycle(curr_skb); > > > } > > > if (curr_skb != head_skb) { > > > head_skb->data_len += len; > > > @@ -1517,7 +1548,7 @@ static struct sk_buff *receive_mergeable(struct net_device *dev, > > > } > > > offset = buf - page_address(page); > > > if (skb_can_coalesce(curr_skb, num_skb_frags, page, offset)) { > > > - put_page(page); > > > + virtnet_put_page(rq, page); > > > skb_coalesce_rx_frag(curr_skb, num_skb_frags - 1, > > > len, truesize); > > > } else { > > > @@ -1530,7 +1561,7 @@ static struct sk_buff *receive_mergeable(struct net_device *dev, > > > return head_skb; > > > > > > err_skb: > > > - put_page(page); > > > + virtnet_put_page(rq, page); > > > mergeable_buf_free(rq, num_buf, dev, stats); > > > > > > err_buf: > > > @@ -1737,31 +1768,40 @@ static int add_recvbuf_mergeable(struct virtnet_info *vi, > > > * disabled GSO for XDP, it won't be a big issue. > > > */ > > > len = get_mergeable_buf_len(rq, &rq->mrg_avg_pkt_len, room); > > > - if (unlikely(!skb_page_frag_refill(len + room, alloc_frag, gfp))) > > > - return -ENOMEM; > > > + if (rq->page_pool) { > > > + struct page *page; > > > > > > - buf = (char *)page_address(alloc_frag->page) + alloc_frag->offset; > > > - buf += headroom; /* advance address leaving hole at front of pkt */ > > > - get_page(alloc_frag->page); > > > - alloc_frag->offset += len + room; > > > - hole = alloc_frag->size - alloc_frag->offset; > > > - if (hole < len + room) { > > > - /* To avoid internal fragmentation, if there is very likely not > > > - * enough space for another buffer, add the remaining space to > > > - * the current buffer. > > > - * XDP core assumes that frame_size of xdp_buff and the length > > > - * of the frag are PAGE_SIZE, so we disable the hole mechanism. > > > - */ > > > - if (!headroom) > > > - len += hole; > > > - alloc_frag->offset += hole; > > > - } > > > + page = page_pool_dev_alloc_pages(rq->page_pool); > > > + if (unlikely(!page)) > > > + return -ENOMEM; > > > + buf = (char *)page_address(page); > > > + buf += headroom; /* advance address leaving hole at front of pkt */ > > > + } else { > > > + if (unlikely(!skb_page_frag_refill(len + room, alloc_frag, gfp))) > > > + return -ENOMEM; > > > > > > + buf = (char *)page_address(alloc_frag->page) + alloc_frag->offset; > > > + buf += headroom; /* advance address leaving hole at front of pkt */ > > > + get_page(alloc_frag->page); > > > + alloc_frag->offset += len + room; > > > + hole = alloc_frag->size - alloc_frag->offset; > > > + if (hole < len + room) { > > > + /* To avoid internal fragmentation, if there is very likely not > > > + * enough space for another buffer, add the remaining space to > > > + * the current buffer. > > > + * XDP core assumes that frame_size of xdp_buff and the length > > > + * of the frag are PAGE_SIZE, so we disable the hole mechanism. > > > + */ > > > + if (!headroom) > > > + len += hole; > > > + alloc_frag->offset += hole; > > > + } > > > + } > > > sg_init_one(rq->sg, buf, len); > > > ctx = mergeable_len_to_ctx(len + room, headroom); > > > err = virtqueue_add_inbuf_ctx(rq->vq, rq->sg, 1, buf, ctx, gfp); > > > if (err < 0) > > > - put_page(virt_to_head_page(buf)); > > > + virtnet_put_page(rq, virt_to_head_page(buf)); > > > > > > return err; > > > } > > > @@ -1994,8 +2034,15 @@ static int virtnet_enable_queue_pair(struct virtnet_info *vi, int qp_index) > > > if (err < 0) > > > return err; > > > > > > - err = xdp_rxq_info_reg_mem_model(&vi->rq[qp_index].xdp_rxq, > > > - MEM_TYPE_PAGE_SHARED, NULL); > > > + if (vi->rq[qp_index].page_pool) > > > + err = xdp_rxq_info_reg_mem_model(&vi->rq[qp_index].xdp_rxq, > > > + MEM_TYPE_PAGE_POOL, > > > + vi->rq[qp_index].page_pool); > > > + else > > > + err = xdp_rxq_info_reg_mem_model(&vi->rq[qp_index].xdp_rxq, > > > + MEM_TYPE_PAGE_SHARED, > > > + NULL); > > > + > > > if (err < 0) > > > goto err_xdp_reg_mem_model; > > > > > > @@ -2951,6 +2998,7 @@ static void virtnet_get_strings(struct net_device *dev, u32 stringset, u8 *data) > > > ethtool_sprintf(&p, "tx_queue_%u_%s", i, > > > virtnet_sq_stats_desc[j].desc); > > > } > > > + page_pool_ethtool_stats_get_strings(p); > > > break; > > > } > > > } > > > @@ -2962,12 +3010,30 @@ static int virtnet_get_sset_count(struct net_device *dev, int sset) > > > switch (sset) { > > > case ETH_SS_STATS: > > > return vi->curr_queue_pairs * (VIRTNET_RQ_STATS_LEN + > > > - VIRTNET_SQ_STATS_LEN); > > > + VIRTNET_SQ_STATS_LEN + > > > + (page_pool_enabled && vi->mergeable_rx_bufs ? > > > + page_pool_ethtool_stats_get_count() : 0)); > > > default: > > > return -EOPNOTSUPP; > > > } > > > } > > > > > > +static void virtnet_get_page_pool_stats(struct net_device *dev, u64 *data) > > > +{ > > > +#ifdef CONFIG_PAGE_POOL_STATS > > > + struct virtnet_info *vi = netdev_priv(dev); > > > + struct page_pool_stats pp_stats = {}; > > > + int i; > > > + > > > + for (i = 0; i < vi->curr_queue_pairs; i++) { > > > + if (!vi->rq[i].page_pool) > > > + continue; > > > + page_pool_get_stats(vi->rq[i].page_pool, &pp_stats); > > > + } > > > + page_pool_ethtool_stats_get(data, &pp_stats); > > > +#endif /* CONFIG_PAGE_POOL_STATS */ > > > +} > > > + > > > static void virtnet_get_ethtool_stats(struct net_device *dev, > > > struct ethtool_stats *stats, u64 *data) > > > { > > > @@ -3003,6 +3069,8 @@ static void virtnet_get_ethtool_stats(struct net_device *dev, > > > } while (u64_stats_fetch_retry(&sq->stats.syncp, start)); > > > idx += VIRTNET_SQ_STATS_LEN; > > > } > > > + > > > + virtnet_get_page_pool_stats(dev, &data[idx]); > > > } > > > > > > static void virtnet_get_channels(struct net_device *dev, > > > @@ -3623,6 +3691,8 @@ static void virtnet_free_queues(struct virtnet_info *vi) > > > for (i = 0; i < vi->max_queue_pairs; i++) { > > > __netif_napi_del(&vi->rq[i].napi); > > > __netif_napi_del(&vi->sq[i].napi); > > > + if (vi->rq[i].page_pool) > > > + page_pool_destroy(vi->rq[i].page_pool); > > > } > > > > > > /* We called __netif_napi_del(), > > > @@ -3679,12 +3749,19 @@ static void virtnet_rq_free_unused_buf(struct virtqueue *vq, void *buf) > > > struct virtnet_info *vi = vq->vdev->priv; > > > int i = vq2rxq(vq); > > > > > > - if (vi->mergeable_rx_bufs) > > > - put_page(virt_to_head_page(buf)); > > > - else if (vi->big_packets) > > > + if (vi->mergeable_rx_bufs) { > > > + if (vi->rq[i].page_pool) { > > > + page_pool_put_full_page(vi->rq[i].page_pool, > > > + virt_to_head_page(buf), > > > + true); > > > + } else { > > > + put_page(virt_to_head_page(buf)); > > > + } > > > + } else if (vi->big_packets) { > > > give_pages(&vi->rq[i], buf); > > > - else > > > + } else { > > > put_page(virt_to_head_page(buf)); > > > + } > > > } > > > > > > static void free_unused_bufs(struct virtnet_info *vi) > > > @@ -3718,6 +3795,26 @@ static void virtnet_del_vqs(struct virtnet_info *vi) > > > virtnet_free_queues(vi); > > > } > > > > > > +static void virtnet_alloc_page_pool(struct receive_queue *rq) > > > +{ > > > + struct virtio_device *vdev = rq->vq->vdev; > > > + > > > + struct page_pool_params pp_params = { > > > + .order = 0, > > > + .pool_size = rq->vq->num_max, > > > + .nid = dev_to_node(vdev->dev.parent), > > > + .dev = vdev->dev.parent, > > > + .offset = 0, > > > + }; > > > + > > > + rq->page_pool = page_pool_create(&pp_params); > > > + if (IS_ERR(rq->page_pool)) { > > > + dev_warn(&vdev->dev, "page pool creation failed: %ld\n", > > > + PTR_ERR(rq->page_pool)); > > > + rq->page_pool = NULL; > > > + } > > > +} > > > + > > > /* How large should a single buffer be so a queue full of these can fit at > > > * least one full packet? > > > * Logic below assumes the mergeable buffer header is used. > > > @@ -3801,6 +3898,13 @@ static int virtnet_find_vqs(struct virtnet_info *vi) > > > vi->rq[i].vq = vqs[rxq2vq(i)]; > > > vi->rq[i].min_buf_len = mergeable_min_buf_len(vi, vi->rq[i].vq); > > > vi->sq[i].vq = vqs[txq2vq(i)]; > > > + > > > + if (page_pool_enabled && vi->mergeable_rx_bufs) > > > + virtnet_alloc_page_pool(&vi->rq[i]); > > > + else > > > + dev_warn(&vi->vdev->dev, > > > + "page pool only support mergeable mode\n"); > > > + > > > } > > > > > > /* run here: ret == 0. */ > > > -- > > > 2.31.1 > >