Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 12 Jan 2016 16:53:25 +0200
From:      Boris Astardzhiev <boris.astardzhiev@gmail.com>
To:        Adrian Chadd <adrian.chadd@gmail.com>
Cc:        Bruce Evans <brde@optusnet.com.au>, Mark Delany <c2h@romeo.emu.st>,  FreeBSD Net <freebsd-net@freebsd.org>
Subject:   Re: Does FreeBSD have sendmmsg or recvmmsg system calls?
Message-ID:  <CAP=KkTwG0SVUmrBuWm33EC-tG4tMTdF5rLZQ_u6G1=-ujnfjkA@mail.gmail.com>
In-Reply-To: <CAJ-Vmom26mukSv3JmsmNiAONvpc6f1bQ%2BujO25qefGHY=5przA@mail.gmail.com>
References:  <20160104101747.58347.qmail@f5-external.bushwire.net> <20160104194044.GD3625@kib.kiev.ua> <20160104210741.32812.qmail@f5-external.bushwire.net> <CAP=KkTwfpjec2Tgnm4PRR3u8t4GEqN9Febm5HRcqapifBG-B6g@mail.gmail.com> <CA%2BhQ2%2Bh4NNz9tgSpjJdv7fXteq5tAR7o3LvjV=u08NHjRLPwmA@mail.gmail.com> <CAP=KkTzFUDsZwDDLD3n97xJW0qLVZMPduZGSX%2BeXC3UuLpVjMg@mail.gmail.com> <20160107161213.GZ3625@kib.kiev.ua> <CA%2BhQ2%2Bg6OB3MmZrW5hzNSnkcqKaKf1XGDraHfWXtSrowxKuL5g@mail.gmail.com> <20160107192840.GF3625@kib.kiev.ua> <20160108172323.W1815@besplex.bde.org> <20160108075815.3243.qmail@f5-external.bushwire.net> <CAJ-VmonYPhcN-gikuYQU_k5GaTAqTijoxR_0ORV4BZqsHMRJSg@mail.gmail.com> <20160108204606.G2420@besplex.bde.org> <CAJ-Vmom26mukSv3JmsmNiAONvpc6f1bQ%2BujO25qefGHY=5przA@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
--001a114a0eae44223e05292437ae
Content-Type: text/plain; charset=UTF-8

Hello again,

In my spare time I did the following simple libc-only implementation of the
syscalls.
I did some tests in a VM adapting these experiments:
https://blog.cloudflare.com/how-to-receive-a-million-packets/

Any comments about the diff are greatly appreciated.

Best regards,
Boris Astardzhiev

On Fri, Jan 8, 2016 at 7:02 PM, Adrian Chadd <adrian.chadd@gmail.com> wrote:

> On 8 January 2016 at 03:02, Bruce Evans <brde@optusnet.com.au> wrote:
> > On Fri, 8 Jan 2016, Adrian Chadd wrote:
> >
> >> On 7 January 2016 at 23:58, Mark Delany <c2h@romeo.emu.st> wrote:
> >>>
> >>> On 08Jan16, Bruce Evans allegedly wrote:
> >>>>
> >>>> If the NIC can't reach line rate
> >>>
> >>>
> >>>> Network stack overheads are also enormous.
> >>>
> >>>
> >>> Bruce makes some excellent points.
> >>>
> >>> I challenge anyone to get line rate UDP out of FBSD (or Linux) for a
> >>> 1G NIC yet alone a 10G NIC listening to a single port. It was exactly
> >>> my frustration with UDP performance that led me down the path of
> >>> *mmsg() and netmap.
> >>>
> >>> Frankly this is an opportunity for FBSD as UDP performance appears to
> >>> be a neglected area.
> >>
> >>
> >> I'm there, on 16 threads.
> >>
> >> I'd rather we do it on two or three, as a lot of time is wasted in
> >> producer/consumer locking. but yeah, 500k tx/rx should be doable per
> >> CPU with only locking changes.
>
> .. and I did mean "kernel producer/consumer locking changes."
>
> >
> > Line rate for 1 Gbps is about 1500 kpps (small packets).
> >
> > With I218V2 (em), I see enormous lock contention above 3 or 4 (user)
> > threads, and 8 are slightly slower than 1.  1 doesn't saturate the NIC,
> > and 2 is optimal.
> >
>
> The RSS support in -HEAD lets you get away with parallelising UDP
> streams very nicely.
>
> The framework is pretty simple (!):
>
> * drivers ask the RSS code for the RSS config and RSS hash to use, and
> configure the hardware appropriately;
> * the netisr input paths check the existence of the RSS hash and will
> calculte it in software if reqiured;
> * v4/v6 reassembly is done (at the IP level, /not/ at the protocol
> level) and if it needs a new RSS hash / netisr reinjection, that'll
> happen;
> * the PCB lookup code for listen sockets now allows one listen socket
> per RSS bucket - as the RSS / PCBGROUPS code already extended the PCB
> to have one PCB table per RSS bucket (as well as a global one);
>
> So:
>
> * userland code queries RSS for the CPU and RSS bucket setup;
> * you then create one listen socket per RSS bucket, bind it to the
> local thread (if you want) and tell it "you're in RSS bucket X";
> * .. and then in the UDP case for local-bound sockets, the
> transmit/receive path does not require modifying the global PCB state,
> so the locking is kept per-RSS bucket, and scales linearly with the
> number of CPUs you have (until you hit the NIC queue limits.)
>
> https://github.com/erikarn/freebsd-rss/
>
> and:
>
>
> http://adrianchadd.blogspot.com/2014/06/hacking-on-receive-side-scaling-rss-on.html
>
> http://adrianchadd.blogspot.com/2014/07/application-awareness-of-receive-side.html
>
> http://adrianchadd.blogspot.com/2014/08/receive-side-scaling-figuring-out-how.html
>
> http://adrianchadd.blogspot.com/2014/09/receive-side-scaling-testing-udp.html
>
> http://adrianchadd.blogspot.com/2014/10/more-rss-udp-tests-this-time-on-dell.html
>
>
>
> -adrian
> _______________________________________________
> freebsd-net@freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-net
> To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org"
>

--001a114a0eae44223e05292437ae
Content-Type: text/plain; charset=US-ASCII; name="sendrecvmmsg-libconly.diff"
Content-Disposition: attachment; filename="sendrecvmmsg-libconly.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_ijbimzj50

ZGlmZiAtLWdpdCBhL2xpYi9saWJjL2luY2x1ZGUvbGliY19wcml2YXRlLmggYi9saWIvbGliYy9p
bmNsdWRlL2xpYmNfcHJpdmF0ZS5oCmluZGV4IDVjYWY5YTMuLjlhMGQ2Y2YgMTAwNjQ0Ci0tLSBh
L2xpYi9saWJjL2luY2x1ZGUvbGliY19wcml2YXRlLmgKKysrIGIvbGliL2xpYmMvaW5jbHVkZS9s
aWJjX3ByaXZhdGUuaApAQCAtMjI0LDYgKzIyNCw4IEBAIGVudW0gewogCUlOVEVSUE9TX2tldmVu
dCwKIAlJTlRFUlBPU193YWl0NiwKIAlJTlRFUlBPU19wcG9sbCwKKwlJTlRFUlBPU19zZW5kbW1z
ZywKKwlJTlRFUlBPU19yZWN2bW1zZywKIAlJTlRFUlBPU19NQVgKIH07CiAKZGlmZiAtLWdpdCBh
L2xpYi9saWJjL2luY2x1ZGUvbmFtZXNwYWNlLmggYi9saWIvbGliYy9pbmNsdWRlL25hbWVzcGFj
ZS5oCmluZGV4IDczOWQ3YjEuLmM5NTgyOWUgMTAwNjQ0Ci0tLSBhL2xpYi9saWJjL2luY2x1ZGUv
bmFtZXNwYWNlLmgKKysrIGIvbGliL2xpYmMvaW5jbHVkZS9uYW1lc3BhY2UuaApAQCAtMjA4LDYg
KzIwOCw3IEBACiAjZGVmaW5lCQlyZWFkdgkJCQlfcmVhZHYKICNkZWZpbmUJCXJlY3Zmcm9tCQkJ
X3JlY3Zmcm9tCiAjZGVmaW5lCQlyZWN2bXNnCQkJCV9yZWN2bXNnCisjZGVmaW5lCQlyZWN2bW1z
ZwkJCV9yZWN2bW1zZwogI2RlZmluZQkJc2VsZWN0CQkJCV9zZWxlY3QKICNkZWZpbmUJCXNlbV9j
bG9zZQkJCV9zZW1fY2xvc2UKICNkZWZpbmUJCXNlbV9kZXN0cm95CQkJX3NlbV9kZXN0cm95CkBA
IC0yMjAsNiArMjIxLDcgQEAKICNkZWZpbmUJCXNlbV91bmxpbmsJCQlfc2VtX3VubGluawogI2Rl
ZmluZQkJc2VtX3dhaXQJCQlfc2VtX3dhaXQKICNkZWZpbmUJCXNlbmRtc2cJCQkJX3NlbmRtc2cK
KyNkZWZpbmUJCXNlbmRtbXNnCQkJX3NlbmRtbXNnCiAjZGVmaW5lCQlzZW5kdG8JCQkJX3NlbmR0
bwogI2RlZmluZQkJc2V0c29ja29wdAkJCV9zZXRzb2Nrb3B0CiAvKiNkZWZpbmUJCXNpZ2FjdGlv
bgkJCV9zaWdhY3Rpb24qLwpkaWZmIC0tZ2l0IGEvbGliL2xpYmMvaW5jbHVkZS91bi1uYW1lc3Bh
Y2UuaCBiL2xpYi9saWJjL2luY2x1ZGUvdW4tbmFtZXNwYWNlLmgKaW5kZXggZjMxZmE3YS4uMDIz
MzM0OCAxMDA2NDQKLS0tIGEvbGliL2xpYmMvaW5jbHVkZS91bi1uYW1lc3BhY2UuaAorKysgYi9s
aWIvbGliYy9pbmNsdWRlL3VuLW5hbWVzcGFjZS5oCkBAIC0xODksNiArMTg5LDcgQEAKICN1bmRl
ZgkJcmVhZHYKICN1bmRlZgkJcmVjdmZyb20KICN1bmRlZgkJcmVjdm1zZworI3VuZGVmCQlyZWN2
bW1zZwogI3VuZGVmCQlzZWxlY3QKICN1bmRlZgkJc2VtX2Nsb3NlCiAjdW5kZWYJCXNlbV9kZXN0
cm95CkBAIC0yMDEsNiArMjAyLDcgQEAKICN1bmRlZgkJc2VtX3VubGluawogI3VuZGVmCQlzZW1f
d2FpdAogI3VuZGVmCQlzZW5kbXNnCisjdW5kZWYJCXNlbmRtbXNnCiAjdW5kZWYJCXNlbmR0bwog
I3VuZGVmCQlzZXRzb2Nrb3B0CiAjdW5kZWYJCXNpZ2FjdGlvbgpkaWZmIC0tZ2l0IGEvbGliL2xp
YmMvc3lzL01ha2VmaWxlLmluYyBiL2xpYi9saWJjL3N5cy9NYWtlZmlsZS5pbmMKaW5kZXggZTRm
ZTFiMi4uZWNiMzY2YSAxMDA2NDQKLS0tIGEvbGliL2xpYmMvc3lzL01ha2VmaWxlLmluYworKysg
Yi9saWIvbGliYy9zeXMvTWFrZWZpbGUuaW5jCkBAIC0yOCw2ICsyOCwxMCBAQCBTUkNTKz0gZnV0
aW1lbnMuYyB1dGltZW5zYXQuYwogTk9BU00rPSBmdXRpbWVucy5vIHV0aW1lbnNhdC5vCiBQU0VV
RE8rPSBfZnV0aW1lbnMubyBfdXRpbWVuc2F0Lm8KIAorU1JDUys9IHJlY3ZtbXNnLmMgc2VuZG1t
c2cuYworTk9BU00rPSByZWN2bW1zZy5vIHNlbmRtbXNnLm8KK1BTRVVETys9IF9yZWN2bW1zZy5v
IF9zZW5kbW1zZy5vCisKIElOVEVSUE9TRUQgPSBcCiAJYWNjZXB0IFwKIAlhY2NlcHQ0IFwKZGlm
ZiAtLWdpdCBhL2xpYi9saWJjL3N5cy9TeW1ib2wubWFwIGIvbGliL2xpYmMvc3lzL1N5bWJvbC5t
YXAKaW5kZXggN2IzMjU3Yy4uNzI0ZTFiNCAxMDA2NDQKLS0tIGEvbGliL2xpYmMvc3lzL1N5bWJv
bC5tYXAKKysrIGIvbGliL2xpYmMvc3lzL1N5bWJvbC5tYXAKQEAgLTM5OSw2ICszOTksOCBAQCBG
QlNEXzEuNCB7CiAJdXRpbWVuc2F0OwogCW51bWFfc2V0YWZmaW5pdHk7CiAJbnVtYV9nZXRhZmZp
bml0eTsKKwlzZW5kbW1zZzsKKwlyZWN2bW1zZzsKIH07CiAKIEZCU0Rwcml2YXRlXzEuMCB7CkBA
IC0xMDUxLDQgKzEwNTMsNiBAQCBGQlNEcHJpdmF0ZV8xLjAgewogCWdzc2Rfc3lzY2FsbDsKIAlf
X2xpYmNfaW50ZXJwb3Npbmdfc2xvdDsKIAlfX2xpYmNfc2lnd2FpdDsKKwlfc2VuZG1tc2c7CisJ
X3JlY3ZtbXNnOwogfTsKZGlmZiAtLWdpdCBhL2xpYi9saWJjL3N5cy9yZWN2bW1zZy5jIGIvbGli
L2xpYmMvc3lzL3JlY3ZtbXNnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MDNhYjM3OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9saWJjL3N5cy9yZWN2bW1zZy5jCkBAIC0w
LDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYgQm9yaXMgQXN0YXJkemhpZXYs
IFNtYXJ0Y29tLUJ1bGdhcmlhIEFECisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZShzKSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBhcworICogICAgdGhlIGZpcnN0IGxpbmVzIG9mIHRoaXMgZmlsZSB1bm1vZGlmaWVkIG90
aGVyIHRoYW4gdGhlIHBvc3NpYmxlCisgKiAgICBhZGRpdGlvbiBvZiBvbmUgb3IgbW9yZSBjb3B5
cmlnaHQgbm90aWNlcy4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UocyksIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKKyAqIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsCisgKiBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsK
KworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8
c3lzL3N5c2NhbGwuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSAibGliY19w
cml2YXRlLmgiCisKKyNkZWZpbmUgVkxFTl9NQVggMTAyNAorCitpbnQKK3JlY3ZtbXNnKGludCBz
LCBzdHJ1Y3QgbW1zZ2hkciAqbXNndmVjLCB1bnNpZ25lZCBpbnQgdmxlbiwgaW50IGZsYWdzKQor
eworCWludCBpLCByZXQsIHJjdmQ7CisKKwlpZiAodmxlbiA+IFZMRU5fTUFYKQorCQl2bGVuID0g
VkxFTl9NQVg7CisKKwlyY3ZkID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgdmxlbjsgaSsrKSB7CisJ
CWVycm5vID0gMDsKKwkJcmV0ID0gKCgoaW50ICgqKShpbnQsIGNvbnN0IHN0cnVjdCBtc2doZHIg
KiwgaW50KSkKKwkJICAgIF9fbGliY19pbnRlcnBvc2luZ1tJTlRFUlBPU19yZWN2bXNnXSkocywK
KwkJICAgICAgICAmbXNndmVjW2ldLm1zZ19oZHIsIGZsYWdzKSk7CisJCWlmIChyZXQgPCAwIHx8
IGVycm5vICE9IDApIHsKKwkJCWlmIChyY3ZkKSB7CisJCQkJLyogV2UndmUgcmVjZWl2ZWQgbWVz
c2FnZXMuIExldCBjYWxsZXIga25vdy4gKi8KKwkJCQllcnJubyA9IDA7CisJCQkJcmV0dXJuIChy
Y3ZkKTsKKwkJCX0KKwkJCXJldHVybiAoLTEpOworCQl9CisKKwkJLyogU2F2ZSByZWNlaXZlZCBi
eXRlcyAqLworCQltc2d2ZWNbaV0ubXNnX2xlbiA9IHJldDsKKworCQlyY3ZkKys7CisJfQorCisJ
cmV0dXJuIChyY3ZkKTsKK30KKworI3VuZGVmIFZMRU5fTUFYCmRpZmYgLS1naXQgYS9saWIvbGli
Yy9zeXMvc2VuZG1tc2cuYyBiL2xpYi9saWJjL3N5cy9zZW5kbW1zZy5jCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzODdmZGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvbGli
Yy9zeXMvc2VuZG1tc2cuYwpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChjKSAy
MDE2IEJvcmlzIEFzdGFyZHpoaWV2LCBTbWFydGNvbS1CdWxnYXJpYSBBRAorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UocyksIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgYXMKKyAqICAgIHRoZSBmaXJzdCBsaW5lcyBvZiB0
aGlzIGZpbGUgdW5tb2RpZmllZCBvdGhlciB0aGFuIHRoZSBwb3NzaWJsZQorICogICAgYWRkaXRp
b24gb2Ygb25lIG9yIG1vcmUgY29weXJpZ2h0IG5vdGljZXMuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlKHMpLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIEJFCisgKiBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAq
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFCisgKiBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLAorICogRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+Citf
X0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5
cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tl
dC5oPgorI2luY2x1ZGUgImxpYmNfcHJpdmF0ZS5oIgorCisjZGVmaW5lIFZMRU5fTUFYIDEwMjQK
KworaW50CitzZW5kbW1zZyhpbnQgcywgc3RydWN0IG1tc2doZHIgKm1zZ3ZlYywgdW5zaWduZWQg
aW50IHZsZW4sIGludCBmbGFncykKK3sKKwlpbnQgaSwgcmV0LCBzZW50OworCisJaWYgKHZsZW4g
PiBWTEVOX01BWCkKKwkJdmxlbiA9IFZMRU5fTUFYOworCisJc2VudCA9IDA7CisJZm9yIChpID0g
MDsgaSA8IHZsZW47IGkrKykgeworCQllcnJubyA9IDA7CisJCXJldCA9ICgoKGludCAoKikoaW50
LCBjb25zdCBzdHJ1Y3QgbXNnaGRyICosIGludCkpCisJCSAgICBfX2xpYmNfaW50ZXJwb3Npbmdb
SU5URVJQT1Nfc2VuZG1zZ10pKHMsCisJCSAgICAgICAgJm1zZ3ZlY1tpXS5tc2dfaGRyLCBmbGFn
cykpOworCQlpZiAocmV0IDwgMCB8fCBlcnJubyAhPSAwKSB7CisJCQlpZiAoc2VudCkgeworCQkJ
CS8qIFdlIGhhdmUgc2VudCBtZXNzYWdlcy4gTGV0IGNhbGxlciBrbm93LiAqLworCQkJCWVycm5v
ID0gMDsKKwkJCQlyZXR1cm4gKHNlbnQpOworCQkJfQorCQkJcmV0dXJuICgtMSk7CisJCX0KKwor
CQkvKiBTYXZlIHNlbnQgYnl0ZXMgKi8KKwkJbXNndmVjW2ldLm1zZ19sZW4gPSByZXQ7CisKKwkJ
c2VudCsrOworCX0KKworCXJldHVybiAoc2VudCk7Cit9CisKKyN1bmRlZiBWTEVOX01BWApkaWZm
IC0tZ2l0IGEvbGliL2xpYnRoci90aHJlYWQvdGhyX3N5c2NhbGxzLmMgYi9saWIvbGlidGhyL3Ro
cmVhZC90aHJfc3lzY2FsbHMuYwppbmRleCA3YzA1Njk3Li43YjU0NThkIDEwMDY0NAotLS0gYS9s
aWIvbGlidGhyL3RocmVhZC90aHJfc3lzY2FsbHMuYworKysgYi9saWIvbGlidGhyL3RocmVhZC90
aHJfc3lzY2FsbHMuYwpAQCAtNjA2LDYgKzYwNiw4NCBAQCBfX3Rocl93cml0ZXYoaW50IGZkLCBj
b25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGlvdmNudCkKIAlyZXR1cm4gKHJldCk7CiB9CiAK
KyNkZWZpbmUgVkxFTl9NQVggMTAyNAorCitzdGF0aWMgaW50CitfX3Rocl9zZW5kbW1zZyhpbnQg
cywgc3RydWN0IG1tc2doZHIgKm1zZ3ZlYywgdW5zaWduZWQgaW50IHZsZW4sIGludCBmbGFncykK
K3sKKwlzdHJ1Y3QgcHRocmVhZCAqY3VydGhyZWFkOworCWludCBpLCByZXQsIHNlbnQ7CisKKwlj
dXJ0aHJlYWQgPSBfZ2V0X2N1cnRocmVhZCgpOworCV90aHJfY2FuY2VsX2VudGVyKGN1cnRocmVh
ZCk7CisKKwlpZiAodmxlbiA+IFZMRU5fTUFYKQorCQl2bGVuID0gVkxFTl9NQVg7CisKKwlzZW50
ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgKGludCl2bGVuOyBpKyspIHsKKwkJZXJybm8gPSAwOwor
CQlyZXQgPSBfX3N5c19zZW5kbXNnKHMsICZtc2d2ZWNbaV0ubXNnX2hkciwgZmxhZ3MpOworCQlp
ZiAocmV0IDwgMCB8fCBlcnJubyAhPSAwKSB7CisJCQlpZiAoc2VudCkgeworCQkJCS8qIFdlIGhh
dmUgc2VudCBtZXNzYWdlcy4gTGV0IGNhbGxlciBrbm93LiAqLworCQkJCWVycm5vID0gMDsKKwkJ
CQlfdGhyX2NhbmNlbF9sZWF2ZShjdXJ0aHJlYWQsIHJldCA8PSAwKTsKKwkJCQlyZXR1cm4gKHNl
bnQpOworCQkJfQorCQkJcmV0dXJuICgtMSk7CisJCX0KKworCQkvKiBTYXZlIHNlbnQgYnl0ZXMg
Ki8KKwkJbXNndmVjW2ldLm1zZ19sZW4gPSByZXQ7CisKKwkJc2VudCsrOworCX0KKworCV90aHJf
Y2FuY2VsX2xlYXZlKGN1cnRocmVhZCwgcmV0IDw9IDApOworCisJcmV0dXJuIChzZW50KTsKK30K
Kworc3RhdGljIGludAorX190aHJfcmVjdm1tc2coaW50IHMsIHN0cnVjdCBtbXNnaGRyICptc2d2
ZWMsIHVuc2lnbmVkIGludCB2bGVuLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHB0aHJlYWQgKmN1
cnRocmVhZDsKKwlpbnQgaSwgcmV0LCByY3ZkOworCisJY3VydGhyZWFkID0gX2dldF9jdXJ0aHJl
YWQoKTsKKwlfdGhyX2NhbmNlbF9lbnRlcihjdXJ0aHJlYWQpOworCisJaWYgKHZsZW4gPiBWTEVO
X01BWCkKKwkJdmxlbiA9IFZMRU5fTUFYOworCisJcmN2ZCA9IDA7CisJZm9yIChpID0gMDsgaSA8
IChpbnQpdmxlbjsgaSsrKSB7CisJCWVycm5vID0gMDsKKwkJcmV0ID0gX19zeXNfcmVjdm1zZyhz
LCAmbXNndmVjW2ldLm1zZ19oZHIsIGZsYWdzKTsKKwkJaWYgKHJldCA8IDAgfHwgZXJybm8gIT0g
MCkgeworCQkJaWYgKHJjdmQpIHsKKwkJCQkvKiBXZSd2ZSByZWNlaXZlZCBtZXNzYWdlcy4gTGV0
IGNhbGxlciBrbm93LiAqLworCQkJCWVycm5vID0gMDsKKwkJCQlfdGhyX2NhbmNlbF9sZWF2ZShj
dXJ0aHJlYWQsIHJldCA9PSAtMSk7CisJCQkJcmV0dXJuIChyY3ZkKTsKKwkJCX0KKwkJCXJldHVy
biAoLTEpOworCQl9CisKKwkJLyogU2F2ZSByZWNlaXZlZCBieXRlcyAqLworCQltc2d2ZWNbaV0u
bXNnX2xlbiA9IHJldDsKKworCQlyY3ZkKys7CisJfQorCisJX3Rocl9jYW5jZWxfbGVhdmUoY3Vy
dGhyZWFkLCByZXQgPT0gLTEpOworCisJcmV0dXJuIChyY3ZkKTsKK30KKworI3VuZGVmIFZMRU5f
TUFYCisKIHZvaWQKIF9fdGhyX2ludGVycG9zZV9saWJjKHZvaWQpCiB7CkBAIC02NTIsNiArNzMw
LDggQEAgX190aHJfaW50ZXJwb3NlX2xpYmModm9pZCkKIAlTTE9UKGtldmVudCk7CiAJU0xPVCh3
YWl0Nik7CiAJU0xPVChwcG9sbCk7CisJU0xPVChzZW5kbW1zZyk7CisJU0xPVChyZWN2bW1zZyk7
CiAjdW5kZWYgU0xPVAogCSooX19saWJjX2ludGVycG9zaW5nX3Nsb3QoCiAJICAgIElOVEVSUE9T
X19wdGhyZWFkX211dGV4X2luaXRfY2FsbG9jX2NiKSkgPQpkaWZmIC0tZ2l0IGEvc3lzL3N5cy9z
b2NrZXQuaCBiL3N5cy9zeXMvc29ja2V0LmgKaW5kZXggMThlMmRlMS4uNTA0MzEzZSAxMDA2NDQK
LS0tIGEvc3lzL3N5cy9zb2NrZXQuaAorKysgYi9zeXMvc3lzL3NvY2tldC5oCkBAIC01OTUsNiAr
NTk1LDE4IEBAIHN0cnVjdCBzZl9oZHRyIHsKICNlbmRpZiAvKiBfS0VSTkVMICovCiAjZW5kaWYg
LyogX19CU0RfVklTSUJMRSAqLwogCisjaWZuZGVmIF9LRVJORUwKKyNpZmRlZiBfX0JTRF9WSVNJ
QkxFCisvKgorICogU2VuZC9yZWN2bW1zZyBzcGVjaWZpYyBzdHJ1Y3R1cmUocykKKyAqLworc3Ry
dWN0IG1tc2doZHIgeworCXN0cnVjdCBtc2doZHIJbXNnX2hkcjsJCS8qIG1lc3NhZ2UgaGVhZGVy
ICovCisJdW5zaWduZWQgaW50CW1zZ19sZW47CQkvKiBtZXNzYWdlIGxlbmd0aCAgKi8KK307Cisj
ZW5kaWYgLyogX19CU0RfVklTSUJMRSAqLworI2VuZGlmIC8qICFfS0VSTkVMICovCisKICNpZm5k
ZWYJX0tFUk5FTAogCiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CkBAIC02MTUsMTEgKzYyNywxNyBA
QCBpbnQJbGlzdGVuKGludCwgaW50KTsKIHNzaXplX3QJcmVjdihpbnQsIHZvaWQgKiwgc2l6ZV90
LCBpbnQpOwogc3NpemVfdAlyZWN2ZnJvbShpbnQsIHZvaWQgKiwgc2l6ZV90LCBpbnQsIHN0cnVj
dCBzb2NrYWRkciAqIF9fcmVzdHJpY3QsIHNvY2tsZW5fdCAqIF9fcmVzdHJpY3QpOwogc3NpemVf
dAlyZWN2bXNnKGludCwgc3RydWN0IG1zZ2hkciAqLCBpbnQpOworI2lmIF9fQlNEX1ZJU0lCTEUK
K2ludAlyZWN2bW1zZyhpbnQsIHN0cnVjdCBtbXNnaGRyICosIHVuc2lnbmVkIGludCwgaW50KTsK
KyNlbmRpZgogc3NpemVfdAlzZW5kKGludCwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7CiBz
c2l6ZV90CXNlbmR0byhpbnQsIGNvbnN0IHZvaWQgKiwKIAkgICAgc2l6ZV90LCBpbnQsIGNvbnN0
IHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QpOwogc3NpemVfdAlzZW5kbXNnKGludCwgY29u
c3Qgc3RydWN0IG1zZ2hkciAqLCBpbnQpOwogI2lmIF9fQlNEX1ZJU0lCTEUKK2ludAlzZW5kbW1z
ZyhpbnQsIHN0cnVjdCBtbXNnaGRyICosIHVuc2lnbmVkIGludCwgaW50KTsKKyNlbmRpZgorI2lm
IF9fQlNEX1ZJU0lCTEUKIGludAlzZW5kZmlsZShpbnQsIGludCwgb2ZmX3QsIHNpemVfdCwgc3Ry
dWN0IHNmX2hkdHIgKiwgb2ZmX3QgKiwgaW50KTsKIGludAlzZXRmaWIoaW50KTsKICNlbmRpZgo=
--001a114a0eae44223e05292437ae--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAP=KkTwG0SVUmrBuWm33EC-tG4tMTdF5rLZQ_u6G1=-ujnfjkA>