Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 19 Nov 2010 03:10:15 GMT
From:      Garrett Cooper <gcooper@FreeBSD.org>
To:        freebsd-bugs@FreeBSD.org
Subject:   Re: kern/145385: [cpu] Logical processor cannot be disabled for some SMT-enabled Intel procs
Message-ID:  <201011190310.oAJ3AFng082563@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/145385; it has been noted by GNATS.

From: Garrett Cooper <gcooper@FreeBSD.org>
To: Andriy Gapon <avg@freebsd.org>
Cc: bug-followup@freebsd.org
Subject: Re: kern/145385: [cpu] Logical processor cannot be disabled for some
 SMT-enabled Intel procs
Date: Thu, 18 Nov 2010 19:01:08 -0800

 --0016e6567d28366ef604955f1e9a
 Content-Type: text/plain; charset=ISO-8859-1
 Content-Transfer-Encoding: quoted-printable
 
 On Thu, Nov 18, 2010 at 4:09 PM, Garrett Cooper <gcooper@freebsd.org> wrote=
 :
 > On Wed, Nov 17, 2010 at 4:34 PM, Garrett Cooper <gcooper@freebsd.org> wro=
 te:
 >> On Thu, Oct 7, 2010 at 10:03 AM, Andriy Gapon <avg@freebsd.org> wrote:
 >>>
 >>> Here's a patch to remove halted logical processors from root cpu set (c=
 puset
 >>> number zero) and consequently all child sets:
 >>> http://people.freebsd.org/~avg/cpu-halt.diff
 >>>
 >>> Please note that unhalting CPUs will add them to cpuset zero, but will =
 not
 >>> (re-)add them cpusets of the running processes. =A0So additional action=
  will be
 >>> required from system administrator if e would like existing processes t=
 o make use
 >>> of unhalted CPUs.
 >>>
 >>> Also, interrupts that are bound to halted CPUs are not rebound on halt,=
  and so
 >>> will be delivered to halted CPUs. =A0This should not be a problem for t=
 ypical
 >>> environments, but would be nice to fix anyway.
 >>
 >> =A0 =A0Sorry for taking so long to get back on this item. The patch look=
 s
 >> ok as far as setting the CPUSET is concerned (setting
 >> machdep.hlt_logical_cpus=3D1 works on an r710 with 8 logical procs as
 >> SCHED_ULE schedules all of the tasks on the non-logical SMT cores, not
 >> the logical ones, and the patch properly detects that there aren't any
 >> logical processors on a Core2 Quad I have at home), but it's missing a
 >> key case where I go from...
 >>
 >> machdep.hlt_logical_cpus: 1 -> 0
 >>
 >> =A0 =A0... it should reset CPUSETZERO.
 >> =A0 =A0The overall CPU topology should probably be cached and restored
 >> when reset, or at least CPUSETZERO should be reset (probably the
 >> simpler and cleaner route to go).
 >> =A0 =A0After that all that's required is work for i386 and I'd vote for =
 a
 >> commit of the patch.
 >> Thanks for the hard work Andriy :)!
 >
 > Just to illustrate, here's how I reproduced the successful behavior
 > (and the problem):
 >
 > 1. Execute the following script:
 >
 > #!/bin/sh
 > i=3D0
 > ncpus=3D`sysctl -n kern.smp.cpus`
 > while [ $i -lt $ncpus ] ; do
 > =A0 =A0while : ; do : ; done &
 > =A0 =A0: $(( i +=3D 1 ))
 > done
 >
 > 2. Execute sysctl machdep.hlt_logical_cpus=3D1 .
 > 3. Look at cpuset info; example:
 >
 > Before:
 >
 > # for i in `ps aux | grep gcooper | grep -v grep | awk '{ print $2 }'`
 > ; do cpuset -g -p $i ; done
 > pid 2179 mask: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
 > pid 2180 mask: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
 >
 > After:
 >
 > # for i in `ps aux | grep gcooper | grep -v grep | awk '{ print $2 }'`
 > ; do cpuset -g -p $i ; done
 > pid 2179 mask: 0, 2, 4, 6, 8, 10, 12, 14
 > pid 2180 mask: 0, 2, 4, 6, 8, 10, 12, 14
 > # sysctl machdep.hlt_logical_cpus=3D0
 > machdep.hlt_logical_cpus: 1 -> 0
 > # for i in `ps aux | grep gcooper | grep -v grep | awk '{ print $2 }'`
 > ; do cpuset -g -p $i ; done
 > pid 2179 mask: 0, 2, 4, 6, 8, 10, 12, 14
 > pid 2180 mask: 0, 2, 4, 6, 8, 10, 12, 14
 >
 > I'm taking the patch and running with it now to try and get it working 10=
 0%.
 
     This output was from a patch in progress based on Andriy's work,
 that seems to get the bits in place properly:
 
 test-26# sysctl machdep.hlt_logical_cpus=3D1
 sysctl_hlt_logical_cpus: mask: 43690
 cpuset_zero_modify (before): cpuset_zero: 65535, mask: 21845
 cpuset_update (after): set: 21845, mask: 21845
 cpuset_update (after): set: 21845, mask: 21845
 cpuset_zero_modify (after): cpuset_zero: 21845, mask: 21845
 machdep.hlt_logical_cpus: 0 -> 1
 test-26# sysctl machdep.hlt_logical_cpus=3D0
 sysctl_hlt_logical_cpus: mask: 0
 cpuset_zero_modify (before): cpuset_zero: 21845, mask: 65535
 cpuset_update (after): set: 21845, mask: 65535
 cpuset_update (after): set: 21845, mask: 21845
 cpuset_zero_modify (after): cpuset_zero: 65535, mask: 65535
 machdep.hlt_logical_cpus: 1 -> 0
 test-26#
 
     Weird thing is that the CPU affinity isn't adjusted even though
 cpuset_zero appears to be modified. I think this is the problem:
 
 static int
 cpuset_testupdate(struct cpuset *set, cpuset_t *mask)
 {
         struct cpuset *nset;
         cpuset_t newmask;
         int error;
 
         mtx_assert(&cpuset_lock, MA_OWNED);
         if (set->cs_flags & CPU_SET_RDONLY)
                 return (EPERM);
         if (!CPU_OVERLAP(&set->cs_mask, mask))
                 return (EDEADLK);
         CPU_COPY(&set->cs_mask, &newmask);
         CPU_AND(&newmask, mask);
         error =3D 0;
         LIST_FOREACH(nset, &set->cs_children, cs_siblings)
                 if ((error =3D cpuset_testupdate(nset, &newmask)) !=3D 0)
                         break;
         return (error);
 }
 
 ...
 
 /*
  * Applies the mask 'mask' without checking for empty sets or permissions.
  */
 static void
 cpuset_update(struct cpuset *set, cpuset_t *mask)
 {
         struct cpuset *nset;
 
         mtx_assert(&cpuset_lock, MA_OWNED);
         CPU_AND(&set->cs_mask, mask);
         LIST_FOREACH(nset, &set->cs_children, cs_siblings)
                 cpuset_update(nset, &set->cs_mask);
 
         return;
 }
 
     Note that it's doing CPU_AND, not CPU_OR, in both routines that
 get called from cpuset_modify. This makes sense to reject bad input
 (because scheduling on non-existent CPUs is a bad thing :/), but sucks
 in our case because it means that we can't use cpuset_modify
 [easily]...
 Thanks!
 -Garrett
 
 --0016e6567d28366ef604955f1e9a
 Content-Type: text/x-patch; charset=US-ASCII; name="kern.145385.patch"
 Content-Disposition: attachment; filename="kern.145385.patch"
 Content-Transfer-Encoding: base64
 X-Attachment-Id: f_ggohebzt1
 
 SW5kZXg6IHN5cy9hbWQ2NC9hbWQ2NC9tcF9tYWNoZGVwLmMKPT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2Ft
 ZDY0L2FtZDY0L21wX21hY2hkZXAuYwkocmV2aXNpb24gMjE1NDE3KQorKysgc3lzL2FtZDY0L2Ft
 ZDY0L21wX21hY2hkZXAuYwkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2lmZGVm
 IEdQUk9GIAogI2luY2x1ZGUgPHN5cy9nbW9uLmg+CiAjZW5kaWYKKyNpbmNsdWRlIDxzeXMvY3B1
 c2V0Lmg+CiAjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPgogI2luY2x1ZGUgPHN5cy9rdHIuaD4KICNp
 bmNsdWRlIDxzeXMvbG9jay5oPgpAQCAtODUsNyArODYsNyBAQAogaW50CW1wX25hcHM7CQkvKiAj
 IG9mIEFwcGxpY2F0aW9ucyBwcm9jZXNzb3JzICovCiBpbnQJYm9vdF9jcHVfaWQgPSAtMTsJLyog
 ZGVzaWduYXRlZCBCU1AgKi8KIAotZXh0ZXJuICBzdHJ1Y3QgcGNwdSBfX3BjcHVbXTsKK2V4dGVy
 bglzdHJ1Y3QgcGNwdSBfX3BjcHVbXTsKIAogLyogQVAgdXNlcyB0aGlzIGR1cmluZyBib290c3Ry
 YXAuICBEbyBub3Qgc3RhdGljaXplLiAgKi8KIGNoYXIgKmJvb3RTVEs7CkBAIC0xMTQ1LDcgKzEx
 NDYsNyBAQAogCQkJb2xkX3BlbmRpbmcgPSBjcHVfaXBpX3BlbmRpbmdbY3B1XTsKIAkJCW5ld19w
 ZW5kaW5nID0gb2xkX3BlbmRpbmcgfCBiaXRtYXA7CiAJCX0gd2hpbGUgICghYXRvbWljX2NtcHNl
 dF9pbnQoJmNwdV9pcGlfcGVuZGluZ1tjcHVdLAotCQkgICAgb2xkX3BlbmRpbmcsIG5ld19wZW5k
 aW5nKSk7IAorCQkgICAgb2xkX3BlbmRpbmcsIG5ld19wZW5kaW5nKSk7CiAJCWlmIChvbGRfcGVu
 ZGluZykKIAkJCXJldHVybjsKIAl9CkBAIC0xMzMzLDcgKzEzMzQsNiBAQAogCSAqLwogCWlmIChp
 cGkgPT0gSVBJX1NUT1BfSEFSRCkKIAkJYXRvbWljX3NldF9pbnQoJmlwaV9ubWlfcGVuZGluZywg
 UENQVV9HRVQob3RoZXJfY3B1cykpOwotCiAJQ1RSMihLVFJfU01QLCAiJXM6IGlwaTogJXgiLCBf
 X2Z1bmNfXywgaXBpKTsKIAlsYXBpY19pcGlfdmVjdG9yZWQoaXBpLCBBUElDX0lQSV9ERVNUX09U
 SEVSUyk7CiB9CkBAIC0xMzU3LDcgKzEzNTcsNyBAQAogCWNwdXN0b3BfaGFuZGxlcigpOwogCXJl
 dHVybiAoMCk7CiB9Ci0gICAgIAorCiAvKgogICogSGFuZGxlIGFuIElQSV9TVE9QIGJ5IHNhdmlu
 ZyBvdXIgY3VycmVudCBjb250ZXh0IGFuZCBzcGlubmluZyB1bnRpbCB3ZQogICogYXJlIHJlc3Vt
 ZWQuCkBAIC0xNDQ3LDYgKzE0NDcsNyBAQAogc3RhdGljIGludAogc3lzY3RsX2hsdF9jcHVzKFNZ
 U0NUTF9IQU5ETEVSX0FSR1MpCiB7CisJY3B1c2V0X3QgbWFza19zZXQ7CiAJY3B1bWFza190IG1h
 c2s7CiAJaW50IGVycm9yOwogCkBAIC0xNDU1LDE4ICsxNDU2LDIwIEBACiAJaWYgKGVycm9yIHx8
 ICFyZXEtPm5ld3B0cikKIAkJcmV0dXJuIChlcnJvcik7CiAKLQlpZiAobG9naWNhbF9jcHVzX21h
 c2sgIT0gMCAmJgotCSAgICAobWFzayAmIGxvZ2ljYWxfY3B1c19tYXNrKSA9PSBsb2dpY2FsX2Nw
 dXNfbWFzaykKLQkJaGx0X2xvZ2ljYWxfY3B1cyA9IDE7Ci0JZWxzZQotCQlobHRfbG9naWNhbF9j
 cHVzID0gMDsKLQotCWlmICghIGh5cGVydGhyZWFkaW5nX2FsbG93ZWQpCisJaWYgKGhsdF9sb2dp
 Y2FsX2NwdXMpCisJCW1hc2sgfD0gbG9naWNhbF9jcHVzX21hc2s7CisJaWYgKCFoeXBlcnRocmVh
 ZGluZ19hbGxvd2VkKQogCQltYXNrIHw9IGh5cGVydGhyZWFkaW5nX2NwdXNfbWFzazsKIAorCS8q
 IERvbid0IGRpc2FibGUgQlNQMCAqLwogCWlmICgobWFzayAmIGFsbF9jcHVzKSA9PSBhbGxfY3B1
 cykKIAkJbWFzayAmPSB+KDE8PDApOwotCWhsdF9jcHVzX21hc2sgPSBtYXNrOworCisJQ1BVX1pF
 Uk8oJm1hc2tfc2V0KTsKKwlDUFVfU0VUTUFTSyh+bWFzayAmIGFsbF9jcHVzLCAmbWFza19zZXQp
 OworCWVycm9yID0gY3B1c2V0X3plcm9fbW9kaWZ5KCZtYXNrX3NldCk7CisJaWYgKGVycm9yID09
 IDApCisJCWhsdF9jcHVzX21hc2sgPSBtYXNrOwogCXJldHVybiAoZXJyb3IpOwogfQogU1lTQ1RM
 X1BST0MoX21hY2hkZXAsIE9JRF9BVVRPLCBobHRfY3B1cywgQ1RMVFlQRV9JTlR8Q1RMRkxBR19S
 VywKQEAgLTE0NzYsNiArMTQ3OSw4IEBACiBzdGF0aWMgaW50CiBzeXNjdGxfaGx0X2xvZ2ljYWxf
 Y3B1cyhTWVNDVExfSEFORExFUl9BUkdTKQogeworCWNwdXNldF90IG1hc2tfc2V0OworCWNwdW1h
 c2tfdCBtYXNrOwogCWludCBkaXNhYmxlLCBlcnJvcjsKIAogCWRpc2FibGUgPSBobHRfbG9naWNh
 bF9jcHVzOwpAQCAtMTQ4MywyNCArMTQ4OCwzMSBAQAogCWlmIChlcnJvciB8fCAhcmVxLT5uZXdw
 dHIpCiAJCXJldHVybiAoZXJyb3IpOwogCisJbWFzayA9IGhsdF9jcHVzX21hc2s7CiAJaWYgKGRp
 c2FibGUpCi0JCWhsdF9jcHVzX21hc2sgfD0gbG9naWNhbF9jcHVzX21hc2s7Ci0JZWxzZQotCQlo
 bHRfY3B1c19tYXNrICY9IH5sb2dpY2FsX2NwdXNfbWFzazsKKwkJbWFzayB8PSBsb2dpY2FsX2Nw
 dXNfbWFzazsKKwlpZiAoIWh5cGVydGhyZWFkaW5nX2FsbG93ZWQpCisJCW1hc2sgfD0gaHlwZXJ0
 aHJlYWRpbmdfY3B1c19tYXNrOwogCi0JaWYgKCEgaHlwZXJ0aHJlYWRpbmdfYWxsb3dlZCkKLQkJ
 aGx0X2NwdXNfbWFzayB8PSBoeXBlcnRocmVhZGluZ19jcHVzX21hc2s7CisJLyogRG9uJ3QgZGlz
 YWJsZSBCU1AwICovCisJaWYgKChtYXNrICYgYWxsX2NwdXMpID09IGFsbF9jcHVzKQorCQltYXNr
 ICY9IH4oMTw8MCk7CiAKLQlpZiAoKGhsdF9jcHVzX21hc2sgJiBhbGxfY3B1cykgPT0gYWxsX2Nw
 dXMpCi0JCWhsdF9jcHVzX21hc2sgJj0gfigxPDwwKTsKKwlwcmludGYoIiVzOiBtYXNrOiAlZFxu
 IiwgX19mdW5jX18sIG1hc2spOwogCi0JaGx0X2xvZ2ljYWxfY3B1cyA9IGRpc2FibGU7CisJQ1BV
 X1pFUk8oJm1hc2tfc2V0KTsKKwlDUFVfU0VUTUFTSyh+bWFzayAmIGFsbF9jcHVzLCAmbWFza19z
 ZXQpOworCWVycm9yID0gY3B1c2V0X3plcm9fbW9kaWZ5KCZtYXNrX3NldCk7CisJaWYgKGVycm9y
 ID09IDApIAorCQlobHRfbG9naWNhbF9jcHVzID0gZGlzYWJsZTsKIAlyZXR1cm4gKGVycm9yKTsK
 IH0KIAogc3RhdGljIGludAogc3lzY3RsX2h5cGVydGhyZWFkaW5nX2FsbG93ZWQoU1lTQ1RMX0hB
 TkRMRVJfQVJHUykKIHsKKwljcHVzZXRfdCBtYXNrX3NldDsKKwljcHVtYXNrX3QgbWFzazsKIAlp
 bnQgYWxsb3dlZCwgZXJyb3I7CiAKIAlhbGxvd2VkID0gaHlwZXJ0aHJlYWRpbmdfYWxsb3dlZDsK
 QEAgLTE1MDgsNDIgKzE1MjAsNDUgQEAKIAlpZiAoZXJyb3IgfHwgIXJlcS0+bmV3cHRyKQogCQly
 ZXR1cm4gKGVycm9yKTsKIAotI2lmZGVmIFNDSEVEX1VMRQotCS8qCi0JICogU0NIRURfVUxFIGRv
 ZXNuJ3QgYWxsb3cgZW5hYmxpbmcvZGlzYWJsaW5nIEhUIGNvcmVzIGF0Ci0JICogcnVuLXRpbWUu
 Ci0JICovCi0JaWYgKGFsbG93ZWQgIT0gaHlwZXJ0aHJlYWRpbmdfYWxsb3dlZCkKLQkJcmV0dXJu
 IChFTk9UU1VQKTsKLQlyZXR1cm4gKGVycm9yKTsKLSNlbmRpZgorCW1hc2sgPSBobHRfY3B1c19t
 YXNrOworCWlmIChobHRfbG9naWNhbF9jcHVzKQorCQltYXNrIHw9IGxvZ2ljYWxfY3B1c19tYXNr
 OworCWlmICghYWxsb3dlZCkKKwkJbWFzayB8PSBoeXBlcnRocmVhZGluZ19jcHVzX21hc2s7CiAK
 LQlpZiAoYWxsb3dlZCkKLQkJaGx0X2NwdXNfbWFzayAmPSB+aHlwZXJ0aHJlYWRpbmdfY3B1c19t
 YXNrOwotCWVsc2UKLQkJaGx0X2NwdXNfbWFzayB8PSBoeXBlcnRocmVhZGluZ19jcHVzX21hc2s7
 CisJLyogRG9uJ3QgZGlzYWJsZSBCU1AwICovCisJaWYgKChtYXNrICYgYWxsX2NwdXMpID09IGFs
 bF9jcHVzKQorCQltYXNrICY9IH4oMTw8MCk7CiAKLQlpZiAobG9naWNhbF9jcHVzX21hc2sgIT0g
 MCAmJgotCSAgICAoaGx0X2NwdXNfbWFzayAmIGxvZ2ljYWxfY3B1c19tYXNrKSA9PSBsb2dpY2Fs
 X2NwdXNfbWFzaykKLQkJaGx0X2xvZ2ljYWxfY3B1cyA9IDE7Ci0JZWxzZQotCQlobHRfbG9naWNh
 bF9jcHVzID0gMDsKLQotCWlmICgoaGx0X2NwdXNfbWFzayAmIGFsbF9jcHVzKSA9PSBhbGxfY3B1
 cykKLQkJaGx0X2NwdXNfbWFzayAmPSB+KDE8PDApOwotCi0JaHlwZXJ0aHJlYWRpbmdfYWxsb3dl
 ZCA9IGFsbG93ZWQ7CisJQ1BVX1pFUk8oJm1hc2tfc2V0KTsKKwlDUFVfU0VUTUFTSyh+bWFzayAm
 IGFsbF9jcHVzLCAmbWFza19zZXQpOworCWVycm9yID0gY3B1c2V0X3plcm9fbW9kaWZ5KCZtYXNr
 X3NldCk7CisJaWYgKGVycm9yID09IDApIAorCQloeXBlcnRocmVhZGluZ19hbGxvd2VkID0gYWxs
 b3dlZDsKIAlyZXR1cm4gKGVycm9yKTsKIH0KIAogc3RhdGljIHZvaWQKIGNwdV9obHRfc2V0dXAo
 dm9pZCAqZHVtbXkgX191bnVzZWQpCiB7CisJY3B1c2V0X3QgbWFza19zZXQ7CiAKIAlpZiAobG9n
 aWNhbF9jcHVzX21hc2sgIT0gMCkgewogCQlUVU5BQkxFX0lOVF9GRVRDSCgibWFjaGRlcC5obHRf
 bG9naWNhbF9jcHVzIiwKIAkJICAgICZobHRfbG9naWNhbF9jcHVzKTsKKwkJaWYgKGhsdF9sb2dp
 Y2FsX2NwdXMgIT0gMCkgeworCQkJQ1BVX1pFUk8oJm1hc2tfc2V0KTsKKwkJCUNQVV9TRVRNQVNL
 KH5sb2dpY2FsX2NwdXNfbWFzayAmIGFsbF9jcHVzLCAmbWFza19zZXQpOworCQkJaWYgKGNwdXNl
 dF96ZXJvX21vZGlmeSgmbWFza19zZXQpID09IDApCisJCQkJaGx0X2xvZ2ljYWxfY3B1cyA9IDE7
 CisJCQllbHNlCisJCQkJaGx0X2xvZ2ljYWxfY3B1cyA9IDA7CisJCX0KIAkJc3lzY3RsX2N0eF9p
 bml0KCZsb2dpY2FsX2NwdV9jbGlzdCk7CisJCVNZU0NUTF9BRERfVUlOVCgmbG9naWNhbF9jcHVf
 Y2xpc3QsCisJCSAgICBTWVNDVExfU1RBVElDX0NISUxEUkVOKF9tYWNoZGVwKSwgT0lEX0FVVE8s
 CisJCSAgICAiYWxsX2NwdXNfbWFzayIsIENUTFRZUEVfSU5UfENUTEZMQUdfUkQsCisJCSAgICAm
 YWxsX2NwdXMsIDAsICIiKTsKIAkJU1lTQ1RMX0FERF9QUk9DKCZsb2dpY2FsX2NwdV9jbGlzdCwK
 IAkJICAgIFNZU0NUTF9TVEFUSUNfQ0hJTERSRU4oX21hY2hkZXApLCBPSURfQVVUTywKIAkJICAg
 ICJobHRfbG9naWNhbF9jcHVzIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywgMCwgMCwKQEAgLTE1
 NTMsOSArMTU2OCw2IEBACiAJCSAgICAibG9naWNhbF9jcHVzX21hc2siLCBDVExUWVBFX0lOVHxD
 VExGTEFHX1JELAogCQkgICAgJmxvZ2ljYWxfY3B1c19tYXNrLCAwLCAiIik7CiAKLQkJaWYgKGhs
 dF9sb2dpY2FsX2NwdXMpCi0JCQlobHRfY3B1c19tYXNrIHw9IGxvZ2ljYWxfY3B1c19tYXNrOwot
 CiAJCS8qCiAJCSAqIElmIG5lY2Vzc2FyeSBmb3Igc2VjdXJpdHkgcHVycG9zZXMsIGZvcmNlCiAJ
 CSAqIGh5cGVydGhyZWFkaW5nIG9mZiwgcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUKQEAgLTE1NjYs
 OCArMTU3OCw2IEBACiAJCQkgICAgU1lTQ1RMX1NUQVRJQ19DSElMRFJFTihfbWFjaGRlcCksIE9J
 RF9BVVRPLAogCQkJICAgICJoeXBlcnRocmVhZGluZ19hbGxvd2VkIiwgQ1RMVFlQRV9JTlR8Q1RM
 RkxBR19SVywKIAkJCSAgICAwLCAwLCBzeXNjdGxfaHlwZXJ0aHJlYWRpbmdfYWxsb3dlZCwgIklV
 IiwgIiIpOwotCQkJaWYgKCEgaHlwZXJ0aHJlYWRpbmdfYWxsb3dlZCkKLQkJCQlobHRfY3B1c19t
 YXNrIHw9IGh5cGVydGhyZWFkaW5nX2NwdXNfbWFzazsKIAkJfQogCX0KIH0KQEAgLTE2MjcsNCAr
 MTYzNywzIEBACiB9CiBTWVNJTklUKG1wX2lwaV9pbnRyY250LCBTSV9TVUJfSU5UUiwgU0lfT1JE
 RVJfTUlERExFLCBtcF9pcGlfaW50cmNudCwgTlVMTCk7CiAjZW5kaWYKLQpJbmRleDogc3lzL2kz
 ODYvaTM4Ni9tcF9tYWNoZGVwLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2kzODYvaTM4Ni9tcF9tYWNo
 ZGVwLmMJKHJldmlzaW9uIDIxNTQxNykKKysrIHN5cy9pMzg2L2kzODYvbXBfbWFjaGRlcC5jCSh3
 b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3IEBACiAjaWZkZWYgR1BST0YgCiAjaW5jbHVkZSA8
 c3lzL2dtb24uaD4KICNlbmRpZgorI2luY2x1ZGUgPHN5cy9jcHVzZXQuaD4KICNpbmNsdWRlIDxz
 eXMva2VybmVsLmg+CiAjaW5jbHVkZSA8c3lzL2t0ci5oPgogI2luY2x1ZGUgPHN5cy9sb2NrLmg+
 CkBAIC0xMTk3LDcgKzExOTgsNyBAQAogCWludCBuY3B1LCBvdGhlcmNwdXM7CiAKIAlvdGhlcmNw
 dXMgPSBtcF9uY3B1cyAtIDE7Ci0JaWYgKG1hc2sgPT0gKHVfaW50KS0xKSB7CisJaWYgKG1hc2sg
 PT0gKGNwdW1hc2tfdCktMSkgewogCQluY3B1ID0gb3RoZXJjcHVzOwogCQlpZiAobmNwdSA8IDEp
 CiAJCQlyZXR1cm47CkBAIC0xMjIyLDcgKzEyMjMsNyBAQAogCXNtcF90bGJfYWRkcjEgPSBhZGRy
 MTsKIAlzbXBfdGxiX2FkZHIyID0gYWRkcjI7CiAJYXRvbWljX3N0b3JlX3JlbF9pbnQoJnNtcF90
 bGJfd2FpdCwgMCk7Ci0JaWYgKG1hc2sgPT0gKHVfaW50KS0xKQorCWlmIChtYXNrID09IChjcHVt
 YXNrX3QpLTEpCiAJCWlwaV9hbGxfYnV0X3NlbGYodmVjdG9yKTsKIAllbHNlCiAJCWlwaV9zZWxl
 Y3RlZChtYXNrLCB2ZWN0b3IpOwpAQCAtMTI0OCw3ICsxMjQ5LDcgQEAKIAkJCW9sZF9wZW5kaW5n
 ID0gY3B1X2lwaV9wZW5kaW5nW2NwdV07CiAJCQluZXdfcGVuZGluZyA9IG9sZF9wZW5kaW5nIHwg
 Yml0bWFwOwogCQl9IHdoaWxlICAoIWF0b21pY19jbXBzZXRfaW50KCZjcHVfaXBpX3BlbmRpbmdb
 Y3B1XSwKLQkJICAgIG9sZF9wZW5kaW5nLCBuZXdfcGVuZGluZykpOwkKKwkJICAgIG9sZF9wZW5k
 aW5nLCBuZXdfcGVuZGluZykpOwogCQlpZiAob2xkX3BlbmRpbmcpCiAJCQlyZXR1cm47CiAJfQpA
 QCAtMTUxMCw2ICsxNTExLDcgQEAKIHN0YXRpYyBpbnQKIHN5c2N0bF9obHRfY3B1cyhTWVNDVExf
 SEFORExFUl9BUkdTKQogeworCWNwdXNldF90IG1hc2tfc2V0OwogCWNwdW1hc2tfdCBtYXNrOwog
 CWludCBlcnJvcjsKIApAQCAtMTUxOCwxOCArMTUyMCwyMCBAQAogCWlmIChlcnJvciB8fCAhcmVx
 LT5uZXdwdHIpCiAJCXJldHVybiAoZXJyb3IpOwogCi0JaWYgKGxvZ2ljYWxfY3B1c19tYXNrICE9
 IDAgJiYKLQkgICAgKG1hc2sgJiBsb2dpY2FsX2NwdXNfbWFzaykgPT0gbG9naWNhbF9jcHVzX21h
 c2spCi0JCWhsdF9sb2dpY2FsX2NwdXMgPSAxOwotCWVsc2UKLQkJaGx0X2xvZ2ljYWxfY3B1cyA9
 IDA7Ci0KLQlpZiAoISBoeXBlcnRocmVhZGluZ19hbGxvd2VkKQorCWlmIChobHRfbG9naWNhbF9j
 cHVzKQorCQltYXNrIHw9IGxvZ2ljYWxfY3B1c19tYXNrOworCWlmICghaHlwZXJ0aHJlYWRpbmdf
 YWxsb3dlZCkKIAkJbWFzayB8PSBoeXBlcnRocmVhZGluZ19jcHVzX21hc2s7CiAKKwkvKiBEb24n
 dCBkaXNhYmxlIEJTUDAgKi8KIAlpZiAoKG1hc2sgJiBhbGxfY3B1cykgPT0gYWxsX2NwdXMpCiAJ
 CW1hc2sgJj0gfigxPDwwKTsKLQlobHRfY3B1c19tYXNrID0gbWFzazsKKworCUNQVV9aRVJPKCZt
 YXNrX3NldCk7CisJQ1BVX1NFVE1BU0sofm1hc2sgJiBhbGxfY3B1cywgJm1hc2tfc2V0KTsKKwll
 cnJvciA9IGNwdXNldF96ZXJvX21vZGlmeSgmbWFza19zZXQpOworCWlmIChlcnJvciA9PSAwKQor
 CQlobHRfY3B1c19tYXNrID0gbWFzazsKIAlyZXR1cm4gKGVycm9yKTsKIH0KIFNZU0NUTF9QUk9D
 KF9tYWNoZGVwLCBPSURfQVVUTywgaGx0X2NwdXMsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCkBA
 IC0xNTM5LDYgKzE1NDMsOCBAQAogc3RhdGljIGludAogc3lzY3RsX2hsdF9sb2dpY2FsX2NwdXMo
 U1lTQ1RMX0hBTkRMRVJfQVJHUykKIHsKKwljcHVzZXRfdCBtYXNrX3NldDsKKwljcHVtYXNrX3Qg
 bWFzazsKIAlpbnQgZGlzYWJsZSwgZXJyb3I7CiAKIAlkaXNhYmxlID0gaGx0X2xvZ2ljYWxfY3B1
 czsKQEAgLTE1NDYsMjQgKzE1NTIsMzEgQEAKIAlpZiAoZXJyb3IgfHwgIXJlcS0+bmV3cHRyKQog
 CQlyZXR1cm4gKGVycm9yKTsKIAorCW1hc2sgPSBobHRfY3B1c19tYXNrOwogCWlmIChkaXNhYmxl
 KQotCQlobHRfY3B1c19tYXNrIHw9IGxvZ2ljYWxfY3B1c19tYXNrOwotCWVsc2UKLQkJaGx0X2Nw
 dXNfbWFzayAmPSB+bG9naWNhbF9jcHVzX21hc2s7CisJCW1hc2sgfD0gbG9naWNhbF9jcHVzX21h
 c2s7CisJaWYgKCFoeXBlcnRocmVhZGluZ19hbGxvd2VkKQorCQltYXNrIHw9IGh5cGVydGhyZWFk
 aW5nX2NwdXNfbWFzazsKIAotCWlmICghIGh5cGVydGhyZWFkaW5nX2FsbG93ZWQpCi0JCWhsdF9j
 cHVzX21hc2sgfD0gaHlwZXJ0aHJlYWRpbmdfY3B1c19tYXNrOworCS8qIERvbid0IGRpc2FibGUg
 QlNQMCAqLworCWlmICgobWFzayAmIGFsbF9jcHVzKSA9PSBhbGxfY3B1cykKKwkJbWFzayAmPSB+
 KDE8PDApOwogCi0JaWYgKChobHRfY3B1c19tYXNrICYgYWxsX2NwdXMpID09IGFsbF9jcHVzKQot
 CQlobHRfY3B1c19tYXNrICY9IH4oMTw8MCk7CisJcHJpbnRmKCIlczogbWFzazogJWRcbiIsIF9f
 ZnVuY19fLCBtYXNrKTsKIAotCWhsdF9sb2dpY2FsX2NwdXMgPSBkaXNhYmxlOworCUNQVV9aRVJP
 KCZtYXNrX3NldCk7CisJQ1BVX1NFVE1BU0sofm1hc2sgJiBhbGxfY3B1cywgJm1hc2tfc2V0KTsK
 KwllcnJvciA9IGNwdXNldF96ZXJvX21vZGlmeSgmbWFza19zZXQpOworCWlmIChlcnJvciA9PSAw
 KSAKKwkJaGx0X2xvZ2ljYWxfY3B1cyA9IGRpc2FibGU7CiAJcmV0dXJuIChlcnJvcik7CiB9CiAK
 IHN0YXRpYyBpbnQKIHN5c2N0bF9oeXBlcnRocmVhZGluZ19hbGxvd2VkKFNZU0NUTF9IQU5ETEVS
 X0FSR1MpCiB7CisJY3B1c2V0X3QgbWFza19zZXQ7CisJY3B1bWFza190IG1hc2s7CiAJaW50IGFs
 bG93ZWQsIGVycm9yOwogCiAJYWxsb3dlZCA9IGh5cGVydGhyZWFkaW5nX2FsbG93ZWQ7CkBAIC0x
 NTcxLDQyICsxNTg0LDQ1IEBACiAJaWYgKGVycm9yIHx8ICFyZXEtPm5ld3B0cikKIAkJcmV0dXJu
 IChlcnJvcik7CiAKLSNpZmRlZiBTQ0hFRF9VTEUKLQkvKgotCSAqIFNDSEVEX1VMRSBkb2Vzbid0
 IGFsbG93IGVuYWJsaW5nL2Rpc2FibGluZyBIVCBjb3JlcyBhdAotCSAqIHJ1bi10aW1lLgotCSAq
 LwotCWlmIChhbGxvd2VkICE9IGh5cGVydGhyZWFkaW5nX2FsbG93ZWQpCi0JCXJldHVybiAoRU5P
 VFNVUCk7Ci0JcmV0dXJuIChlcnJvcik7Ci0jZW5kaWYKKwltYXNrID0gaGx0X2NwdXNfbWFzazsK
 KwlpZiAoaGx0X2xvZ2ljYWxfY3B1cykKKwkJbWFzayB8PSBsb2dpY2FsX2NwdXNfbWFzazsKKwlp
 ZiAoIWFsbG93ZWQpCisJCW1hc2sgfD0gaHlwZXJ0aHJlYWRpbmdfY3B1c19tYXNrOwogCi0JaWYg
 KGFsbG93ZWQpCi0JCWhsdF9jcHVzX21hc2sgJj0gfmh5cGVydGhyZWFkaW5nX2NwdXNfbWFzazsK
 LQllbHNlCi0JCWhsdF9jcHVzX21hc2sgfD0gaHlwZXJ0aHJlYWRpbmdfY3B1c19tYXNrOworCS8q
 IERvbid0IGRpc2FibGUgQlNQMCAqLworCWlmICgobWFzayAmIGFsbF9jcHVzKSA9PSBhbGxfY3B1
 cykKKwkJbWFzayAmPSB+KDE8PDApOwogCi0JaWYgKGxvZ2ljYWxfY3B1c19tYXNrICE9IDAgJiYK
 LQkgICAgKGhsdF9jcHVzX21hc2sgJiBsb2dpY2FsX2NwdXNfbWFzaykgPT0gbG9naWNhbF9jcHVz
 X21hc2spCi0JCWhsdF9sb2dpY2FsX2NwdXMgPSAxOwotCWVsc2UKLQkJaGx0X2xvZ2ljYWxfY3B1
 cyA9IDA7Ci0KLQlpZiAoKGhsdF9jcHVzX21hc2sgJiBhbGxfY3B1cykgPT0gYWxsX2NwdXMpCi0J
 CWhsdF9jcHVzX21hc2sgJj0gfigxPDwwKTsKLQotCWh5cGVydGhyZWFkaW5nX2FsbG93ZWQgPSBh
 bGxvd2VkOworCUNQVV9aRVJPKCZtYXNrX3NldCk7CisJQ1BVX1NFVE1BU0sofm1hc2sgJiBhbGxf
 Y3B1cywgJm1hc2tfc2V0KTsKKwllcnJvciA9IGNwdXNldF96ZXJvX21vZGlmeSgmbWFza19zZXQp
 OworCWlmIChlcnJvciA9PSAwKSAKKwkJaHlwZXJ0aHJlYWRpbmdfYWxsb3dlZCA9IGFsbG93ZWQ7
 CiAJcmV0dXJuIChlcnJvcik7CiB9CiAKIHN0YXRpYyB2b2lkCiBjcHVfaGx0X3NldHVwKHZvaWQg
 KmR1bW15IF9fdW51c2VkKQogeworCWNwdXNldF90IG1hc2tfc2V0OwogCiAJaWYgKGxvZ2ljYWxf
 Y3B1c19tYXNrICE9IDApIHsKIAkJVFVOQUJMRV9JTlRfRkVUQ0goIm1hY2hkZXAuaGx0X2xvZ2lj
 YWxfY3B1cyIsCiAJCSAgICAmaGx0X2xvZ2ljYWxfY3B1cyk7CisJCWlmIChobHRfbG9naWNhbF9j
 cHVzICE9IDApIHsKKwkJCUNQVV9aRVJPKCZtYXNrX3NldCk7CisJCQlDUFVfU0VUTUFTSyh+bG9n
 aWNhbF9jcHVzX21hc2sgJiBhbGxfY3B1cywgJm1hc2tfc2V0KTsKKwkJCWlmIChjcHVzZXRfemVy
 b19tb2RpZnkoJm1hc2tfc2V0KSA9PSAwKQorCQkJCWhsdF9sb2dpY2FsX2NwdXMgPSAxOworCQkJ
 ZWxzZQorCQkJCWhsdF9sb2dpY2FsX2NwdXMgPSAwOworCQl9CiAJCXN5c2N0bF9jdHhfaW5pdCgm
 bG9naWNhbF9jcHVfY2xpc3QpOworCQlTWVNDVExfQUREX1VJTlQoJmxvZ2ljYWxfY3B1X2NsaXN0
 LAorCQkgICAgU1lTQ1RMX1NUQVRJQ19DSElMRFJFTihfbWFjaGRlcCksIE9JRF9BVVRPLAorCQkg
 ICAgImFsbF9jcHVzX21hc2siLCBDVExUWVBFX0lOVHxDVExGTEFHX1JELAorCQkgICAgJmFsbF9j
 cHVzLCAwLCAiIik7CiAJCVNZU0NUTF9BRERfUFJPQygmbG9naWNhbF9jcHVfY2xpc3QsCiAJCSAg
 ICBTWVNDVExfU1RBVElDX0NISUxEUkVOKF9tYWNoZGVwKSwgT0lEX0FVVE8sCiAJCSAgICAiaGx0
 X2xvZ2ljYWxfY3B1cyIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsIDAsIDAsCkBAIC0xNjE2LDkg
 KzE2MzIsNiBAQAogCQkgICAgImxvZ2ljYWxfY3B1c19tYXNrIiwgQ1RMVFlQRV9JTlR8Q1RMRkxB
 R19SRCwKIAkJICAgICZsb2dpY2FsX2NwdXNfbWFzaywgMCwgIiIpOwogCi0JCWlmIChobHRfbG9n
 aWNhbF9jcHVzKQotCQkJaGx0X2NwdXNfbWFzayB8PSBsb2dpY2FsX2NwdXNfbWFzazsKLQogCQkv
 KgogCQkgKiBJZiBuZWNlc3NhcnkgZm9yIHNlY3VyaXR5IHB1cnBvc2VzLCBmb3JjZQogCQkgKiBo
 eXBlcnRocmVhZGluZyBvZmYsIHJlZ2FyZGxlc3Mgb2YgdGhlIHZhbHVlCkBAIC0xNjI5LDggKzE2
 NDIsNiBAQAogCQkJICAgIFNZU0NUTF9TVEFUSUNfQ0hJTERSRU4oX21hY2hkZXApLCBPSURfQVVU
 TywKIAkJCSAgICAiaHlwZXJ0aHJlYWRpbmdfYWxsb3dlZCIsIENUTFRZUEVfSU5UfENUTEZMQUdf
 UlcsCiAJCQkgICAgMCwgMCwgc3lzY3RsX2h5cGVydGhyZWFkaW5nX2FsbG93ZWQsICJJVSIsICIi
 KTsKLQkJCWlmICghIGh5cGVydGhyZWFkaW5nX2FsbG93ZWQpCi0JCQkJaGx0X2NwdXNfbWFzayB8
 PSBoeXBlcnRocmVhZGluZ19jcHVzX21hc2s7CiAJCX0KIAl9CiB9CkBAIC0xNjg2LDcgKzE2OTcs
 NyBAQAogCQlpbnRyY250X2FkZChidWYsICZpcGlfbGF6eXBtYXBfY291bnRzW2ldKTsKIAkJc25w
 cmludGYoYnVmLCBzaXplb2YoYnVmKSwgImNwdSVkOmhhcmRjbG9jayIsIGkpOwogCQlpbnRyY250
 X2FkZChidWYsICZpcGlfaGFyZGNsb2NrX2NvdW50c1tpXSk7Ci0JfQkJCisJfQogfQogU1lTSU5J
 VChtcF9pcGlfaW50cmNudCwgU0lfU1VCX0lOVFIsIFNJX09SREVSX01JRERMRSwgbXBfaXBpX2lu
 dHJjbnQsIE5VTEwpOwogI2VuZGlmCkluZGV4OiBzeXMva2Vybi9rZXJuX2NwdXNldC5jCj09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT0KLS0tIHN5cy9rZXJuL2tlcm5fY3B1c2V0LmMJKHJldmlzaW9uIDIxNTQxNykKKysrIHN5
 cy9rZXJuL2tlcm5fY3B1c2V0LmMJKHdvcmtpbmcgY29weSkKQEAgLTMzMiw2ICszMzIsMTAgQEAK
 IAogCW10eF9hc3NlcnQoJmNwdXNldF9sb2NrLCBNQV9PV05FRCk7CiAJQ1BVX0FORCgmc2V0LT5j
 c19tYXNrLCBtYXNrKTsKKyNpZiAxCisJcHJpbnRmKCIlcyAoYWZ0ZXIpOiBzZXQ6ICVsZCwgbWFz
 azogJWxkXG4iLCBfX2Z1bmNfXywKKwkgICAgc2V0LT5jc19tYXNrLl9fYml0c1swXSwgbWFzay0+
 X19iaXRzWzBdKTsKKyNlbmRpZgogCUxJU1RfRk9SRUFDSChuc2V0LCAmc2V0LT5jc19jaGlsZHJl
 biwgY3Nfc2libGluZ3MpIAogCQljcHVzZXRfdXBkYXRlKG5zZXQsICZzZXQtPmNzX21hc2spOwog
 CkBAIC03NjQsOCArNzY4LDI5IEBACiAJCXBhbmljKCJDYW4ndCBzZXQgaW5pdGlhbCBjcHVzZXQg
 bWFzay5cbiIpOwogCWNwdXNldF96ZXJvLT5jc19mbGFncyB8PSBDUFVfU0VUX1JET05MWTsKIH0K
 LVNZU0lOSVQoY3B1c2V0LCBTSV9TVUJfU01QLCBTSV9PUkRFUl9BTlksIGNwdXNldF9pbml0LCBO
 VUxMKTsKK1NZU0lOSVQoY3B1c2V0LCBTSV9TVUJfU01QLCBTSV9PUkRFUl9NSURETEUsIGNwdXNl
 dF9pbml0LCBOVUxMKTsKIAoraW50CitjcHVzZXRfemVyb19tb2RpZnkoY3B1c2V0X3QgKm1hc2sp
 Cit7CisJaW50IGVycjsKKworCW10eF9sb2NrX3NwaW4oJmNwdXNldF9sb2NrKTsKKwljcHVzZXRf
 emVyby0+Y3NfZmxhZ3MgJj0gfkNQVV9TRVRfUkRPTkxZOworI2lmIDEKKwlwcmludGYoIiVzIChi
 ZWZvcmUpOiBjcHVzZXRfemVybzogJWxkLCBtYXNrOiAlbGRcbiIsIF9fZnVuY19fLAorCSAgICBj
 cHVzZXRfemVyby0+Y3NfbWFzay5fX2JpdHNbMF0sIG1hc2stPl9fYml0c1swXSk7CisjZW5kaWYK
 KwllcnIgPSBjcHVzZXRfbW9kaWZ5KGNwdXNldF96ZXJvLCBtYXNrKTsKKyNpZiAxCisJcHJpbnRm
 KCIlcyAoYWZ0ZXIpOiBjcHVzZXRfemVybzogJWxkLCBtYXNrOiAlbGRcbiIsIF9fZnVuY19fLAor
 CSAgICBjcHVzZXRfemVyby0+Y3NfbWFzay5fX2JpdHNbMF0sIG1hc2stPl9fYml0c1swXSk7Cisj
 ZW5kaWYKKwljcHVzZXRfemVyby0+Y3NfZmxhZ3MgfD0gQ1BVX1NFVF9SRE9OTFk7CisJbXR4X3Vu
 bG9ja19zcGluKCZjcHVzZXRfbG9jayk7CisJcmV0dXJuIChlcnIpOworfQorCiAjaWZuZGVmIF9T
 WVNfU1lTUFJPVE9fSF8KIHN0cnVjdCBjcHVzZXRfYXJncyB7CiAJY3B1c2V0aWRfdAkqc2V0aWQ7
 CkluZGV4OiBzeXMvc3lzL2NwdXNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9zeXMvY3B1c2V0LmgJ
 KHJldmlzaW9uIDIxNTQxNykKKysrIHN5cy9zeXMvY3B1c2V0LmgJKHdvcmtpbmcgY29weSkKQEAg
 LTU0LDYgKzU0LDcgQEAKICNkZWZpbmUJQ1BVX0NPUFkoZiwgdCkJKHZvaWQpKCoodCkgPSAqKGYp
 KQogI2RlZmluZQlDUFVfSVNTRVQobiwgcCkJKCgocCktPl9fYml0c1sobikvX05DUFVCSVRTXSAm
 IF9fY3B1c2V0X21hc2sobikpICE9IDApCiAjZGVmaW5lCUNQVV9TRVQobiwgcCkJKChwKS0+X19i
 aXRzWyhuKS9fTkNQVUJJVFNdIHw9IF9fY3B1c2V0X21hc2sobikpCisjZGVmaW5lCUNQVV9TRVRN
 QVNLKG1hc2ssIHApCSgocCktPl9fYml0c1swXSA9IChtYXNrKSkKICNkZWZpbmUJQ1BVX1pFUk8o
 cCkgZG8gewkJCQlcCiAJX19zaXplX3QgX19pOwkJCQkJXAogCWZvciAoX19pID0gMDsgX19pIDwg
 X05DUFVXT1JEUzsgX19pKyspCQlcCkBAIC0xNzgsNiArMTc5LDcgQEAKIHN0cnVjdCBwcmlzb247
 CiBzdHJ1Y3QgcHJvYzsKIAoraW50CWNwdXNldF96ZXJvX21vZGlmeShjcHVzZXRfdCAqbWFzayk7
 CiBzdHJ1Y3QgY3B1c2V0ICpjcHVzZXRfdGhyZWFkMCh2b2lkKTsKIHN0cnVjdCBjcHVzZXQgKmNw
 dXNldF9yZWYoc3RydWN0IGNwdXNldCAqKTsKIHZvaWQJY3B1c2V0X3JlbChzdHJ1Y3QgY3B1c2V0
 ICopOwo=
 --0016e6567d28366ef604955f1e9a--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201011190310.oAJ3AFng082563>