Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 25 Jul 2007 11:02:48 +0100 (BST)
From:      Robert Watson <rwatson@FreeBSD.org>
To:        current@FreeBSD.org
Subject:   Removing NET_NEEDS_GIANT: first patch
Message-ID:  <20070725110221.C83919@fledge.watson.org>

next in thread | raw e-mail | index | archive | help
  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.

--0-894572789-1185272265=:83919
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; FORMAT=flowed
Content-ID: <20070725110221.W83919@fledge.watson.org>

(Resent spelling current@FreeBSD.org correctly)

Dear all,

Per many discussions over the past few years, we've finally reached the end of 
the road on non-MPSAFE network protocol components.  Recently, Bjoern, George, 
and I resolved, in various ways, the last few remaining protocol-layer 
dependencies (IPSEC, i4b, IPX over IP, netatm), and there are now no 
Giant-dependent protocol components left.  This is the result of a lot of 
hardware work by a great many FreeBSD developers over the past six years, and I 
really appreciate everyone's hard work to make this possible!

Attached is the first of a series of patches to start removing the 
NET_NEEDS_GIANT and debug.mpsafenet scaffolding.  This source code declaration 
was used by optionally compiled components to declare a strict requirement for 
Giant, and forced Giant over the entire network stack.  debug.mpsafenet could 
also be set by users in loader.conf in order to similar force Giant over the 
network stack, and existed for two reasons: to allow Giant to be put back over 
the network stack for debugging purposes, and to support these recently removed 
or fixed unsafe components.  As such, this patch removes the following:

- NET_NEEDS_GIANT() macro
- debug.mpsafenet tunable/sysctl and associated debug_mpsafenet variable, as
   well as functions supporting these.
- Use of this variable to control acqusition of Giant in network-related
   interrupt handlers and various other paths.

If also converts the following to no-ops, allowing them to be gradually removed 
in a series of follow-up patches to minimize risk and disruption:

- NET_LOCK_GIANT(), NET_UNLOCK_GIANT()
- NET_ASSERT_GIANT()

Finally, the following conversion takes place:

- NET_CALLOUT_MPSAFE is now an alias for CALLOUT_MPSAFE

The patch is attached, and I would appreciate feedback on the patch and any 
testing.  Assuming no serious negative feedback in the next couple of days, 
I'll request permission to commit from re@.  The patches that follow will:

- Replace all remaining NET_CALLOUT_MPSAFE instances with CALLOUT_MPSAFE,
   removing NET_CALLOUT_MPSAFE.
- Removing all references to NET_{LOCK,UNLOCK,ASSERT}_GIANT.
- Clean up some other weird Giant-related compatibility in the Cronyx drivers.

Things this patch doesn't do:

- Address the WITNESS lock order warnings generated when credential rules are
   used with ipfw/pf.  These are believed to be annoying but non-harmful, as
   deadlocks are no longer reported.  This view may be revised if evidence to
   the contrary is presented.

- Remove IFF_NEEDSGIANT, a similar set of Giant-acquiring shims used to
   protect non-MPSAFE device drivers.  I had hoped to remove this in 7.0, but I
   think this will happen instead for 8.0 due to remaining non-MPSAFEty in a
   few key network device drivers.

Patch attached, and also available at this URL:

   http://www.watson.org/~robert/freebsd/netperf/20070724-no_net_needs_giant_1.diff

Robert N M Watson
Computer Laboratory
University of Cambridge
--0-894572789-1185272265=:83919
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII;
	NAME=20070724-no_net_needs_giant_1.diff
Content-Transfer-Encoding: BASE64
Content-ID: <20070724111744.B83919@fledge.watson.org>
Content-Description: 
Content-Disposition: ATTACHMENT; FILENAME=20070724-no_net_needs_giant_1.diff

SW5kZXg6IGRldi9hdGgvYXRoX3JhdGUvYW1yci9hbXJyLmMNCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvem9vL2N2c3VwL0ZyZWVCU0Qt
Q1ZTL3NyYy9zeXMvZGV2L2F0aC9hdGhfcmF0ZS9hbXJyL2FtcnIuYyx2DQpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMTMNCmRpZmYgLXUgLXIxLjEzIGFtcnIu
Yw0KLS0tIGRldi9hdGgvYXRoX3JhdGUvYW1yci9hbXJyLmMJMTEgSnVuIDIw
MDcgMDM6MzY6NTAgLTAwMDAJMS4xMw0KKysrIGRldi9hdGgvYXRoX3JhdGUv
YW1yci9hbXJyLmMJMTYgSnVsIDIwMDcgMDc6NDY6NDMgLTAwMDANCkBAIC01
MDQsNyArNTA0LDcgQEANCiAJaWYgKGFzYyA9PSBOVUxMKQ0KIAkJcmV0dXJu
IE5VTEw7DQogCWFzYy0+YXJjLmFyY19zcGFjZSA9IHNpemVvZihzdHJ1Y3Qg
YW1ycl9ub2RlKTsNCi0JY2FsbG91dF9pbml0KCZhc2MtPnRpbWVyLCBkZWJ1
Z19tcHNhZmVuZXQgPyBDQUxMT1VUX01QU0FGRSA6IDApOw0KKwljYWxsb3V0
X2luaXQoJmFzYy0+dGltZXIsIENBTExPVVRfTVBTQUZFKTsNCiAJYXRoX3Jh
dGVfc3lzY3RsYXR0YWNoKHNjKTsNCiANCiAJcmV0dXJuICZhc2MtPmFyYzsN
CkluZGV4OiBkZXYvYXRoL2F0aF9yYXRlL29ub2Uvb25vZS5jDQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL3pvby9jdnN1cC9GcmVlQlNE
LUNWUy9zcmMvc3lzL2Rldi9hdGgvYXRoX3JhdGUvb25vZS9vbm9lLmMsdg0K
cmV0cmlldmluZyByZXZpc2lvbiAxLjE0DQpkaWZmIC11IC1yMS4xNCBvbm9l
LmMNCi0tLSBkZXYvYXRoL2F0aF9yYXRlL29ub2Uvb25vZS5jCTExIEp1biAy
MDA3IDAzOjM2OjUwIC0wMDAwCTEuMTQNCisrKyBkZXYvYXRoL2F0aF9yYXRl
L29ub2Uvb25vZS5jCTE2IEp1bCAyMDA3IDA3OjQ2OjU3IC0wMDAwDQpAQCAt
NDc4LDcgKzQ3OCw3IEBADQogCWlmIChvc2MgPT0gTlVMTCkNCiAJCXJldHVy
biBOVUxMOw0KIAlvc2MtPmFyYy5hcmNfc3BhY2UgPSBzaXplb2Yoc3RydWN0
IG9ub2Vfbm9kZSk7DQotCWNhbGxvdXRfaW5pdCgmb3NjLT50aW1lciwgZGVi
dWdfbXBzYWZlbmV0ID8gQ0FMTE9VVF9NUFNBRkUgOiAwKTsNCisJY2FsbG91
dF9pbml0KCZvc2MtPnRpbWVyLCBDQUxMT1VUX01QU0FGRSk7DQogCWF0aF9y
YXRlX3N5c2N0bGF0dGFjaChzYyk7DQogDQogCXJldHVybiAmb3NjLT5hcmM7
DQpJbmRleDogZGV2L2NlL2lmX2NlLmMNCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0NClJDUyBmaWxlOiAvem9vL2N2c3VwL0ZyZWVCU0QtQ1ZTL3NyYy9zeXMv
ZGV2L2NlL2lmX2NlLmMsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjgNCmRp
ZmYgLXUgLXIxLjggaWZfY2UuYw0KLS0tIGRldi9jZS9pZl9jZS5jCTI1IE1h
ciAyMDA3IDIwOjIxOjMxIC0wMDAwCTEuOA0KKysrIGRldi9jZS9pZl9jZS5j
CTE2IEp1bCAyMDA3IDA3OjQ3OjQ1IC0wMDAwDQpAQCAtMjYwNCwxMyArMjYw
NCw2IEBADQogI2lmIF9fRnJlZUJTRF92ZXJzaW9uIDwgNTAwMDAwDQogCWRl
diA9IG1ha2VkZXYgKENERVZfTUFKT1IsIDApOw0KICNlbmRpZg0KLSNpZiBf
X0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDExMTQNCi0JaWYgKCFkZWJ1Z19tcHNh
ZmVuZXQgJiYgY2VfbXBzYWZlbmV0KSB7DQotCQlwcmludGYgKCJXT1JOSU5H
ISBOZXR3b3JrIHN0YWNrIGlzIG5vdCBNUFNBRkUuICINCi0JCQkiVHVybmlu
ZyBvZmYgZGVidWcuY2UubXBzYWZlbmV0LlxuIik7DQotCQljZV9tcHNhZmVu
ZXQgPSAwOw0KLQl9DQotI2VuZGlmDQogI2lmIF9fRnJlZUJTRF92ZXJzaW9u
ID49IDUwMjEwMw0KIAlpZiAoY2VfbXBzYWZlbmV0KQ0KIAkJY2VfY2RldnN3
LmRfZmxhZ3MgJj0gfkRfTkVFREdJQU5UOw0KSW5kZXg6IGRldi9jcC9pZl9j
cC5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL3pvby9j
dnN1cC9GcmVlQlNELUNWUy9zcmMvc3lzL2Rldi9jcC9pZl9jcC5jLHYNCnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4zMw0KZGlmZiAtdSAtcjEuMzMgaWZfY3Au
Yw0KLS0tIGRldi9jcC9pZl9jcC5jCTIxIE1hciAyMDA3IDAzOjM4OjM1IC0w
MDAwCTEuMzMNCisrKyBkZXYvY3AvaWZfY3AuYwkxNiBKdWwgMjAwNyAwNzo0
ODowNyAtMDAwMA0KQEAgLTIyNjUsMTEgKzIyNjUsNiBAQA0KIHsNCiAJc3Rh
dGljIGludCBsb2FkX2NvdW50ID0gMDsNCiANCi0JaWYgKCFkZWJ1Z19tcHNh
ZmVuZXQgJiYgY3BfbXBzYWZlbmV0KSB7DQotCQlwcmludGYgKCJXT1JOSU5H
ISBOZXR3b3JrIHN0YWNrIGlzIG5vdCBNUFNBRkUuICINCi0JCQkiVHVybmlu
ZyBvZmYgZGVidWcuY3AubXBzYWZlbmV0LlxuIik7DQotCQljcF9tcHNhZmVu
ZXQgPSAwOw0KLQl9DQogCWlmIChjcF9tcHNhZmVuZXQpDQogCQljcF9jZGV2
c3cuZF9mbGFncyAmPSB+RF9ORUVER0lBTlQ7DQogDQpJbmRleDogZGV2L2N0
YXUvaWZfY3QuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6
IC96b28vY3ZzdXAvRnJlZUJTRC1DVlMvc3JjL3N5cy9kZXYvY3RhdS9pZl9j
dC5jLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4zMw0KZGlmZiAtdSAtcjEu
MzMgaWZfY3QuYw0KLS0tIGRldi9jdGF1L2lmX2N0LmMJMjEgTWFyIDIwMDcg
MDM6Mzg6MzUgLTAwMDAJMS4zMw0KKysrIGRldi9jdGF1L2lmX2N0LmMJMTYg
SnVsIDIwMDcgMDc6NDg6NTggLTAwMDANCkBAIC0yMjA2LDExICsyMjA2LDYg
QEANCiB7DQogCXN0YXRpYyBpbnQgbG9hZF9jb3VudCA9IDA7DQogDQotCWlm
ICghZGVidWdfbXBzYWZlbmV0ICYmIGN0X21wc2FmZW5ldCkgew0KLQkJcHJp
bnRmICgiV09STklORyEgTmV0d29yayBzdGFjayBpcyBub3QgTVBTQUZFLiAi
DQotCQkJIlR1cm5pbmcgb2ZmIGRlYnVnLmN0Lm1wc2FmZW5ldC5cbiIpOw0K
LQkJY3RfbXBzYWZlbmV0ID0gMDsNCi0JfQ0KIAlpZiAoY3RfbXBzYWZlbmV0
KQ0KIAkJY3RfY2RldnN3LmRfZmxhZ3MgJj0gfkRfTkVFREdJQU5UOw0KIA0K
SW5kZXg6IGRldi9jeC9pZl9jeC5jDQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
DQpSQ1MgZmlsZTogL3pvby9jdnN1cC9GcmVlQlNELUNWUy9zcmMvc3lzL2Rl
di9jeC9pZl9jeC5jLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS41Ng0KZGlm
ZiAtdSAtcjEuNTYgaWZfY3guYw0KLS0tIGRldi9jeC9pZl9jeC5jCTIxIE1h
ciAyMDA3IDAzOjM4OjM1IC0wMDAwCTEuNTYNCisrKyBkZXYvY3gvaWZfY3gu
YwkxNiBKdWwgMjAwNyAwNzo0OTowOCAtMDAwMA0KQEAgLTI1MjMsMTEgKzI1
MjMsNiBAQA0KIHsNCiAJc3RhdGljIGludCBsb2FkX2NvdW50ID0gMDsNCiAN
Ci0JaWYgKCFkZWJ1Z19tcHNhZmVuZXQgJiYgY3hfbXBzYWZlbmV0KSB7DQot
CQlwcmludGYgKCJXT1JOSU5HISBOZXR3b3JrIHN0YWNrIGlzIG5vdCBNUFNB
RkUuICINCi0JCQkiVHVybmluZyBvZmYgZGVidWcuY3gubXBzYWZlbmV0Llxu
Iik7DQotCQljeF9tcHNhZmVuZXQgPSAwOw0KLQl9DQogCWlmIChjeF9tcHNh
ZmVuZXQpDQogCQljeF9jZGV2c3cuZF9mbGFncyAmPSB+RF9ORUVER0lBTlQ7
DQogDQpJbmRleDoga2Vybi9zdWJyX2J1cy5jDQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09DQpSQ1MgZmlsZTogL3pvby9jdnN1cC9GcmVlQlNELUNWUy9zcmMv
c3lzL2tlcm4vc3Vicl9idXMuYyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MjAwDQpkaWZmIC11IC1yMS4yMDAgc3Vicl9idXMuYw0KLS0tIGtlcm4vc3Vi
cl9idXMuYwkyMyBNYXkgMjAwNyAxNzoyODoyMSAtMDAwMAkxLjIwMA0KKysr
IGtlcm4vc3Vicl9idXMuYwkxNiBKdWwgMjAwNyAwNzo0NjoyNSAtMDAwMA0K
QEAgLTM0NjQsOSArMzQ2NCw2IEBADQogCWludCBlcnJvcjsNCiANCiAJaWYg
KGRldi0+cGFyZW50ICE9IE5VTEwpIHsNCi0JCWlmICgoZmxhZ3MgJn4gSU5U
Ul9FTlRST1BZKSA9PSAoSU5UUl9UWVBFX05FVCB8IElOVFJfTVBTQUZFKSAm
Jg0KLQkJICAgICFkZWJ1Z19tcHNhZmVuZXQpDQotCQkJZmxhZ3MgJj0gfklO
VFJfTVBTQUZFOw0KIAkJZXJyb3IgPSBCVVNfU0VUVVBfSU5UUihkZXYtPnBh
cmVudCwgZGV2LCByLCBmbGFncywNCiAJCSAgICBmaWx0ZXIsIGhhbmRsZXIs
IGFyZywgY29va2llcCk7DQogCQlpZiAoZXJyb3IgPT0gMCkgew0KSW5kZXg6
IGtlcm4vdWlwY19kb21haW4uYw0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K
UkNTIGZpbGU6IC96b28vY3ZzdXAvRnJlZUJTRC1DVlMvc3JjL3N5cy9rZXJu
L3VpcGNfZG9tYWluLmMsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjQ5DQpk
aWZmIC11IC1yMS40OSB1aXBjX2RvbWFpbi5jDQotLS0ga2Vybi91aXBjX2Rv
bWFpbi5jCTE2IE1heSAyMDA3IDIwOjQxOjA3IC0wMDAwCTEuNDkNCisrKyBr
ZXJuL3VpcGNfZG9tYWluLmMJMTYgSnVsIDIwMDcgMDc6NDU6NTYgLTAwMDAN
CkBAIC0yMTEsMTMgKzIxMSw4IEBADQogCWlmIChtYXhfbGlua2hkciA8IDE2
KQkJLyogWFhYICovDQogCQltYXhfbGlua2hkciA9IDE2Ow0KIA0KLQlpZiAo
ZGVidWdfbXBzYWZlbmV0KSB7DQotCQljYWxsb3V0X2luaXQoJnBmZmFzdF9j
YWxsb3V0LCBDQUxMT1VUX01QU0FGRSk7DQotCQljYWxsb3V0X2luaXQoJnBm
c2xvd19jYWxsb3V0LCBDQUxMT1VUX01QU0FGRSk7DQotCX0gZWxzZSB7DQot
CQljYWxsb3V0X2luaXQoJnBmZmFzdF9jYWxsb3V0LCAwKTsNCi0JCWNhbGxv
dXRfaW5pdCgmcGZzbG93X2NhbGxvdXQsIDApOw0KLQl9DQorCWNhbGxvdXRf
aW5pdCgmcGZmYXN0X2NhbGxvdXQsIENBTExPVVRfTVBTQUZFKTsNCisJY2Fs
bG91dF9pbml0KCZwZnNsb3dfY2FsbG91dCwgQ0FMTE9VVF9NUFNBRkUpOw0K
IA0KIAltdHhfbG9jaygmZG9tX210eCk7DQogCUtBU1NFUlQoZG9tYWluX2lu
aXRfc3RhdHVzID09IDAsICgiZG9tYWluaW5pdCBjYWxsZWQgdG9vIGxhdGUh
IikpOw0KSW5kZXg6IG5ldC9pZi5jDQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
DQpSQ1MgZmlsZTogL3pvby9jdnN1cC9GcmVlQlNELUNWUy9zcmMvc3lzL25l
dC9pZi5jLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNzINCmRpZmYgLXUg
LXIxLjI3MiBpZi5jDQotLS0gbmV0L2lmLmMJMTYgTWF5IDIwMDcgMTk6NTk6
MDEgLTAwMDAJMS4yNzINCisrKyBuZXQvaWYuYwkxNiBKdWwgMjAwNyAwNzo0
MzozMiAtMDAwMA0KQEAgLTI2OTQsOSArMjY5NCw3IEBADQogaWZfc3RhcnQo
c3RydWN0IGlmbmV0ICppZnApDQogew0KIA0KLQlORVRfQVNTRVJUX0dJQU5U
KCk7DQotDQotCWlmICgoaWZwLT5pZl9mbGFncyAmIElGRl9ORUVEU0dJQU5U
KSAhPSAwICYmIGRlYnVnX21wc2FmZW5ldCAhPSAwKSB7DQorCWlmIChpZnAt
PmlmX2ZsYWdzICYgSUZGX05FRURTR0lBTlQpIHsNCiAJCWlmIChtdHhfb3du
ZWQoJkdpYW50KSkNCiAJCQkoKihpZnApLT5pZl9zdGFydCkoaWZwKTsNCiAJ
CWVsc2UNCkBAIC0yNzExLDExICsyNzA5LDYgQEANCiB7DQogCXN0cnVjdCBp
Zm5ldCAqaWZwOw0KIA0KLQkvKg0KLQkgKiBUaGlzIGNvZGUgbXVzdCBiZSBl
bnRlcmVkIHdpdGggR2lhbnQsIGFuZCBzaG91bGQgbmV2ZXIgcnVuIGlmDQot
CSAqIHdlJ3JlIG5vdCBydW5uaW5nIHdpdGggZGVidWcubXBzYWZlbmV0Lg0K
LQkgKi8NCi0JS0FTU0VSVChkZWJ1Z19tcHNhZmVuZXQgIT0gMCwgKCJpZl9z
dGFydF9kZWZlcnJlZDogZGVidWcubXBzYWZlbmV0IikpOw0KIAlHSUFOVF9S
RVFVSVJFRDsNCiANCiAJaWZwID0gY29udGV4dDsNCkluZGV4OiBuZXQvaWZf
ZXRoZXJzdWJyLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxl
OiAvem9vL2N2c3VwL0ZyZWVCU0QtQ1ZTL3NyYy9zeXMvbmV0L2lmX2V0aGVy
c3Vici5jLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMzQNCmRpZmYgLXUg
LXIxLjIzNCBpZl9ldGhlcnN1YnIuYw0KLS0tIG5ldC9pZl9ldGhlcnN1YnIu
YwkzIEp1bCAyMDA3IDEyOjQ2OjA2IC0wMDAwCTEuMjM0DQorKysgbmV0L2lm
X2V0aGVyc3Vici5jCTE2IEp1bCAyMDA3IDA3OjQ1OjQzIC0wMDAwDQpAQCAt
OTIyLDcgKzkyMiw3IEBADQogCQkJYnJlYWs7IA0KIAlpZiAoaSAhPSBpZnAt
PmlmX2FkZHJsZW4pDQogCQlpZl9wcmludGYoaWZwLCAiRXRoZXJuZXQgYWRk
cmVzczogJTZEXG4iLCBsbGEsICI6Iik7DQotCWlmIChkZWJ1Z19tcHNhZmVu
ZXQgJiYgKGlmcC0+aWZfZmxhZ3MgJiBJRkZfTkVFRFNHSUFOVCkgIT0gMCkN
CisJaWYgKGlmcC0+aWZfZmxhZ3MgJiBJRkZfTkVFRFNHSUFOVCkNCiAJCWlm
X3ByaW50ZihpZnAsICJpZl9zdGFydCBydW5uaW5nIGRlZmVycmVkIGZvciBH
aWFudFxuIik7DQogfQ0KIA0KSW5kZXg6IG5ldC9uZXRpc3IuYw0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC96b28vY3ZzdXAvRnJlZUJT
RC1DVlMvc3JjL3N5cy9uZXQvbmV0aXNyLmMsdg0KcmV0cmlldmluZyByZXZp
c2lvbiAxLjE4DQpkaWZmIC11IC1yMS4xOCBuZXRpc3IuYw0KLS0tIG5ldC9u
ZXRpc3IuYwkyOCBOb3YgMjAwNiAxMToxOTozNiAtMDAwMAkxLjE4DQorKysg
bmV0L25ldGlzci5jCTE2IEp1bCAyMDA3IDA3OjQwOjU3IC0wMDAwDQpAQCAt
NTYsMjQgKzU2LDYgQEANCiAjaW5jbHVkZSA8bmV0L2lmX3Zhci5oPg0KICNp
bmNsdWRlIDxuZXQvbmV0aXNyLmg+DQogDQotLyogDQotICogZGVidWdfbXBz
YWZlbmV0IGNvbnRyb2xzIG5ldHdvcmsgc3Vic3lzdGVtLXdpZGUgdXNlIG9m
IHRoZSBHaWFudCBsb2NrLA0KLSAqIGZyb20gc3lzdGVtIGNhbGxzIGRvd24g
dG8gaW50ZXJydXB0IGhhbmRsZXJzLiAgSXQgY2FuIGJlIGNoYW5nZWQgb25s
eSB2aWENCi0gKiBhIHR1bmFibGUgYXQgYm9vdCwgbm90IGF0IHJ1bi10aW1l
LCBkdWUgdG8gdGhlIGNvbXBsZXhpdHkgb2YgdW53aW5kaW5nLg0KLSAqIFRo
ZSBjb21waWxlZCBkZWZhdWx0IGlzIHNldCB2aWEgYSBrZXJuZWwgb3B0aW9u
OyByaWdodCBub3csIHRoZSBkZWZhdWx0DQotICogdW5sZXNzIG90aGVyd2lz
ZSBzcGVjaWZpZWQgaXMgdG8gcnVuIHRoZSBuZXR3b3JrIHN0YWNrIHdpdGhv
dXQgR2lhbnQuDQotICovDQotI2lmZGVmIE5FVF9XSVRIX0dJQU5UDQotaW50
CWRlYnVnX21wc2FmZW5ldCA9IDA7DQotI2Vsc2UNCi1pbnQJZGVidWdfbXBz
YWZlbmV0ID0gMTsNCi0jZW5kaWYNCi1pbnQJZGVidWdfbXBzYWZlbmV0X3Rv
b2xhdGV0b3R3aWRkbGUgPSAwOw0KLQ0KLVRVTkFCTEVfSU5UKCJkZWJ1Zy5t
cHNhZmVuZXQiLCAmZGVidWdfbXBzYWZlbmV0KTsNCi1TWVNDVExfSU5UKF9k
ZWJ1ZywgT0lEX0FVVE8sIG1wc2FmZW5ldCwgQ1RMRkxBR19SRCwgJmRlYnVn
X21wc2FmZW5ldCwgMCwNCi0gICAgIkVuYWJsZS9kaXNhYmxlIE1QU0FGRSBu
ZXR3b3JrIHN1cHBvcnQiKTsNCi0NCiB2b2xhdGlsZSB1bnNpZ25lZCBpbnQJ
bmV0aXNyOwkvKiBzY2hlZHVsaW5nIGJpdHMgZm9yIG5ldHdvcmsgKi8NCiAN
CiBzdHJ1Y3QgbmV0aXNyIHsNCkBAIC04NCw3OCArNjYsNiBAQA0KIA0KIHN0
YXRpYyB2b2lkICpuZXRfaWg7DQogDQotLyoNCi0gKiBOb3QgYWxsIG5ldHdv
cmsgY29kZSBpcyBjdXJyZW50bHkgY2FwYWJsZSBvZiBydW5uaW5nIE1QU0FG
RTsgaG93ZXZlciwNCi0gKiBtb3N0IG9mIGl0IGlzLiAgU2luY2UgdGhvc2Ug
c2VjdGlvbnMgdGhhdCBhcmUgbm90IGFyZSBnZW5lcmFsbHkgb3B0aW9uYWwN
Ci0gKiBjb21wb25lbnRzIG5vdCBzaGlwcGVkIHdpdGggZGVmYXVsdCBrZXJu
ZWxzLCB3ZSBwcm92aWRlIGEgYmFzaWMgd2F5IHRvDQotICogZGV0ZXJtaW5l
IHdoZXRoZXIgTVBTQUZFIG9wZXJhdGlvbiBpcyBwZXJtaXR0ZWQ6IGJhc2Vk
IG9uIGEgZGVmYXVsdCBvZg0KLSAqIHllcywgd2UgcGVybWl0IG5vbi1NUFNB
RkUgY29tcG9uZW50cyB0byB1c2UgYSByZWdpc3RyYXRpb24gY2FsbCB0bw0K
LSAqIGlkZW50aWZ5IHRoYXQgdGhleSByZXF1aXJlIEdpYW50LiAgSWYgdGhl
IHN5c3RlbSBpcyBlYXJseSBpbiB0aGUgYm9vdA0KLSAqIHByb2Nlc3Mgc3Rp
bGwsIHRoZW4gd2UgY2hhbmdlIHRoZSBkZWJ1Z19tcHNhZmVuZXQgc2V0dGlu
ZyB0byBjaG9vc2UgYQ0KLSAqIG5vbi1NUFNBRkUgZXhlY3V0aW9uIG1vZGUg
KGRlZ3JhZGVkKS4gIElmIGl0J3MgdG9vIGxhdGUgZm9yIHRoYXQgKHNpbmNl
DQotICogdGhlIHNldHRpbmcgY2Fubm90IGJlIGNoYW5nZWQgYXQgcnVuIHRp
bWUpLCB3ZSBnZW5lcmF0ZSBhIGNvbnNvbGUgd2FybmluZw0KLSAqIHRoYXQg
dGhlIGNvbmZpZ3VyYXRpb24gbWF5IGJlIHVuc2FmZS4NCi0gKi8NCi1zdGF0
aWMgaW50IG1wc2FmZV93YXJuX2NvdW50Ow0KLQ0KLS8qDQotICogRnVuY3Rp
b24gY2FsbCBpbXBsZW1lbnRpbmcgcmVnaXN0cmF0aW9uIG9mIGEgbm9uLU1Q
U0FGRSBuZXR3b3JrIGNvbXBvbmVudC4NCi0gKi8NCi12b2lkDQotbmV0X3dh
cm5fbm90X21wc2FmZShjb25zdCBjaGFyICpjb21wb25lbnQpDQotew0KLQ0K
LQkvKg0KLQkgKiBJZiB3ZSdyZSBydW5uaW5nIHdpdGggR2lhbnQgb3ZlciB0
aGUgbmV0d29yayBzdGFjaywgdGhlcmUgaXMgbm8NCi0JICogcHJvYmxlbS4N
Ci0JICovDQotCWlmICghZGVidWdfbXBzYWZlbmV0KQ0KLQkJcmV0dXJuOw0K
LQ0KLQkvKg0KLQkgKiBJZiBpdCdzIG5vdCB0b28gbGF0ZSB0byBjaGFuZ2Ug
dGhlIE1QU0FGRSBzZXR0aW5nIGZvciB0aGUgbmV0d29yaw0KLQkgKiBzdGFj
aywgZG8gc28gbm93LiAgVGhpcyBlZmZlY3RpdmVseSBzdXBwcmVzc2VzIHdh
cm5pbmdzIGJ5DQotCSAqIGNvbXBvbmVudHMgcmVnaXN0ZXJpbmcgbGF0ZXIu
DQotCSAqLw0KLQlpZiAoIWRlYnVnX21wc2FmZW5ldF90b29sYXRldG90d2lk
ZGxlKSB7DQotCQlkZWJ1Z19tcHNhZmVuZXQgPSAwOw0KLQkJcHJpbnRmKCJX
QVJOSU5HOiBkZWJ1Zy5tcHNhZmVuZXQgZm9yY2VkIHRvIDAgYXMgJXMgcmVx
dWlyZXMgIg0KLQkJICAgICJHaWFudFxuIiwgY29tcG9uZW50KTsNCi0JCXJl
dHVybjsNCi0JfQ0KLQ0KLQkvKg0KLQkgKiBXZSBtdXN0IHJ1biB3aXRob3V0
IEdpYW50LCBzbyBnZW5lcmF0ZSBhIGNvbnNvbGUgd2FybmluZyB3aXRoIHNv
bWUNCi0JICogaW5mb3JtYXRpb24gd2l0aCB3aGF0IHRvIGRvIGFib3V0IGl0
LiAgVGhlIHN5c3RlbSBtYXkgYmUgb3BlcmF0aW5nDQotCSAqIHVuc2FmZWx5
LCBob3dldmVyLg0KLQkgKi8NCi0JcHJpbnRmKCJXQVJOSU5HOiBOZXR3b3Jr
IHN0YWNrIEdpYW50LWZyZWUsIGJ1dCAlcyByZXF1aXJlcyBHaWFudC5cbiIs
DQotCSAgICBjb21wb25lbnQpOw0KLQlpZiAobXBzYWZlX3dhcm5fY291bnQg
PT0gMCkNCi0JCXByaW50ZigiICAgIENvbnNpZGVyIGFkZGluZyAnb3B0aW9u
cyBORVRfV0lUSF9HSUFOVCcgb3IgIg0KLQkJICAgICJzZXR0aW5nIGRlYnVn
Lm1wc2FmZW5ldD0wXG4iKTsNCi0JbXBzYWZlX3dhcm5fY291bnQrKzsNCi19
DQotDQotLyoNCi0gKiBUaGlzIHN5c2luaXQgaXMgcnVuIGFmdGVyIGFueSBw
cmUtbG9hZGVkIG9yIGNvbXBpbGVkLWluIGNvbXBvbmVudHMgaGF2ZQ0KLSAq
IGFubm91bmNlZCB0aGF0IHRoZXkgcmVxdWlyZSBHaWFudCwgYnV0IGJlZm9y
ZSBhbnkgbW9kdWxlcyBsb2FkZWQgYXQNCi0gKiBydW4tdGltZS4NCi0gKi8N
Ci1zdGF0aWMgdm9pZA0KLW5ldF9tcHNhZmVfdG9vbGF0ZSh2b2lkICphcmcp
DQotew0KLQ0KLQlkZWJ1Z19tcHNhZmVuZXRfdG9vbGF0ZXRvdHdpZGRsZSA9
IDE7DQotDQotCWlmICghZGVidWdfbXBzYWZlbmV0KQ0KLQkJcHJpbnRmKCJX
QVJOSU5HOiBNUFNBRkUgbmV0d29yayBzdGFjayBkaXNhYmxlZCwgZXhwZWN0
ICINCi0JCSAgICAicmVkdWNlZCBwZXJmb3JtYW5jZS5cbiIpOw0KLX0NCi0N
Ci1TWVNJTklUKG5ldF9tcHNhZmVfdG9vbGF0ZSwgU0lfU1VCX1NFVFRJTkdT
LCBTSV9PUkRFUl9BTlksIG5ldF9tcHNhZmVfdG9vbGF0ZSwNCi0gICAgTlVM
TCk7DQotDQogdm9pZA0KIGxlZ2FjeV9zZXRzb2Z0bmV0KHZvaWQpDQogew0K
QEAgLTE3MCw4ICs4MCw2IEBADQogCSAgICAoImJhZCBpc3IgJWQiLCBudW0p
KTsNCiAJbmV0aXNyc1tudW1dLm5pX2hhbmRsZXIgPSBoYW5kbGVyOw0KIAlu
ZXRpc3JzW251bV0ubmlfcXVldWUgPSBpbnE7DQotCWlmICgoZmxhZ3MgJiBO
RVRJU1JfTVBTQUZFKSAmJiAhZGVidWdfbXBzYWZlbmV0KQ0KLQkJZmxhZ3Mg
Jj0gfk5FVElTUl9NUFNBRkU7DQogCW5ldGlzcnNbbnVtXS5uaV9mbGFncyA9
IGZsYWdzOw0KIH0NCiANCkluZGV4OiBuZnNzZXJ2ZXIvbmZzX3NydnN1YnMu
Yw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC96b28vY3Zz
dXAvRnJlZUJTRC1DVlMvc3JjL3N5cy9uZnNzZXJ2ZXIvbmZzX3NydnN1YnMu
Yyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTQ3DQpkaWZmIC11IC1yMS4x
NDcgbmZzX3NydnN1YnMuYw0KLS0tIG5mc3NlcnZlci9uZnNfc3J2c3Vicy5j
CTIgQXByIDIwMDcgMTM6NTM6MjYgLTAwMDAJMS4xNDcNCisrKyBuZnNzZXJ2
ZXIvbmZzX3NydnN1YnMuYwkxNiBKdWwgMjAwNyAwNzo0NToyMCAtMDAwMA0K
QEAgLTU0OSwxMCArNTQ5LDcgQEANCiAJCW5mc3J2X2luaXRjYWNoZSgpOwkv
KiBJbml0IHRoZSBzZXJ2ZXIgcmVxdWVzdCBjYWNoZSAqLw0KIAkJTkZTRF9M
T0NLKCk7DQogCQluZnNydl9pbml0KDApOwkJLyogSW5pdCBzZXJ2ZXIgZGF0
YSBzdHJ1Y3R1cmVzICovDQotCQlpZiAoZGVidWdfbXBzYWZlbmV0KQ0KLQkJ
CWNhbGxvdXRfaW5pdCgmbmZzcnZfY2FsbG91dCwgQ0FMTE9VVF9NUFNBRkUp
Ow0KLQkJZWxzZQ0KLQkJCWNhbGxvdXRfaW5pdCgmbmZzcnZfY2FsbG91dCwg
MCk7DQorCQljYWxsb3V0X2luaXQoJm5mc3J2X2NhbGxvdXQsIENBTExPVVRf
TVBTQUZFKTsNCiAJCU5GU0RfVU5MT0NLKCk7DQogCQluZnNydl90aW1lcigw
KTsNCiANCkluZGV4OiBuZnNzZXJ2ZXIvbmZzX3N5c2NhbGxzLmMNCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvem9vL2N2c3VwL0ZyZWVC
U0QtQ1ZTL3NyYy9zeXMvbmZzc2VydmVyL25mc19zeXNjYWxscy5jLHYNCnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xMTQNCmRpZmYgLXUgLXIxLjExNCBuZnNf
c3lzY2FsbHMuYw0KLS0tIG5mc3NlcnZlci9uZnNfc3lzY2FsbHMuYwkyMiBB
cHIgMjAwNyAxNTozMToyMSAtMDAwMAkxLjExNA0KKysrIG5mc3NlcnZlci9u
ZnNfc3lzY2FsbHMuYwkxNiBKdWwgMjAwNyAwNzo0NTowMyAtMDAwMA0KQEAg
LTU2MSwxNiArNTYxLDExIEBADQogCQkJbmZzZC0+bmZzZF9zbHAgPSBOVUxM
Ow0KIAkJCW5mc3J2X3NscGRlcmVmKHNscCk7DQogCQl9DQotCQlLQVNTRVJU
KCEoZGVidWdfbXBzYWZlbmV0ID09IDAgJiYgIW10eF9vd25lZCgmR2lhbnQp
KSwNCi0JCSAgICAoIm5mc3N2Y19uZnNkKCk6IGRlYnVnLm1wc2FmZW5ldD0w
ICYmICFHaWFudCIpKTsNCi0JCUtBU1NFUlQoIShkZWJ1Z19tcHNhZmVuZXQg
PT0gMSAmJiBtdHhfb3duZWQoJkdpYW50KSksDQotCQkgICAgKCJuZnNzdmNf
bmZzZCgpOiBkZWJ1Zy5tcHNhZmVuZXQ9MSAmJiBHaWFudCIpKTsNCisJCUtB
U1NFUlQoIW10eF9vd25lZCgmR2lhbnQpLA0KKwkJICAgICgibmZzc3ZjX25m
c2Q6IEdpYW50IHdoZW4gbG9vcCBlbmRzIikpOw0KIAl9DQogZG9uZToNCi0J
S0FTU0VSVCghKGRlYnVnX21wc2FmZW5ldCA9PSAwICYmICFtdHhfb3duZWQo
JkdpYW50KSksDQotCSAgICAoIm5mc3N2Y19uZnNkKCk6IGRlYnVnLm1wc2Fm
ZW5ldD0wICYmICFHaWFudCIpKTsNCi0JS0FTU0VSVCghKGRlYnVnX21wc2Fm
ZW5ldCA9PSAxICYmIG10eF9vd25lZCgmR2lhbnQpKSwNCi0JICAgICgibmZz
c3ZjX25mc2QoKTogZGVidWcubXBzYWZlbmV0PTEgJiYgR2lhbnQiKSk7DQor
CUtBU1NFUlQoIW10eF9vd25lZCgmR2lhbnQpLCAoIm5mc3N2Y19uZnNkOiBH
aWFudCB3aGVuIGRvbmUiKSk7DQogCVRBSUxRX1JFTU9WRSgmbmZzZF9oZWFk
LCBuZnNkLCBuZnNkX2NoYWluKTsNCiAJc3BseChzKTsNCiAJZnJlZSgoY2Fk
ZHJfdCluZnNkLCBNX05GU0QpOw0KSW5kZXg6IHN5cy9rZXJuZWwuaA0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC96b28vY3ZzdXAvRnJl
ZUJTRC1DVlMvc3JjL3N5cy9zeXMva2VybmVsLmgsdg0KcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEzNQ0KZGlmZiAtdSAtcjEuMTM1IGtlcm5lbC5oDQotLS0g
c3lzL2tlcm5lbC5oCTkgQXByIDIwMDcgMjI6Mjk6MTMgLTAwMDAJMS4xMzUN
CisrKyBzeXMva2VybmVsLmgJMjIgSnVsIDIwMDcgMTc6MzU6MjAgLTAwMDAN
CkBAIC0zNDMsMTEgKzM0Myw2IEBADQogI2RlZmluZQlUVU5BQkxFX1NUUl9G
RVRDSChwYXRoLCB2YXIsIHNpemUpCQkJXA0KIAlnZXRlbnZfc3RyaW5nKChw
YXRoKSwgKHZhciksIChzaXplKSkNCiANCi12b2lkCW5ldF93YXJuX25vdF9t
cHNhZmUoY29uc3QgY2hhciAqY29tcG9uZW50KTsNCi0jZGVmaW5lCU5FVF9O
RUVEU19HSUFOVChjb21wb25lbnQpCQkJCQlcDQotCVNZU0lOSVQoX19DT05D
QVQoX19uZXRfd2Fybl9ub3RfbXBzYWZlXywgX19MSU5FX18pLAkJXA0KLQkg
ICAgU0lfU1VCX1NFVFRJTkdTLCBTSV9PUkRFUl9TRUNPTkQsIG5ldF93YXJu
X25vdF9tcHNhZmUsIGNvbXBvbmVudCk7DQotDQogc3RydWN0IGludHJfY29u
ZmlnX2hvb2sgew0KIAlUQUlMUV9FTlRSWShpbnRyX2NvbmZpZ19ob29rKSBp
Y2hfbGlua3M7DQogCXZvaWQJKCppY2hfZnVuYykodm9pZCAqYXJnKTsNCklu
ZGV4OiBzeXMvbXV0ZXguaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNT
IGZpbGU6IC96b28vY3ZzdXAvRnJlZUJTRC1DVlMvc3JjL3N5cy9zeXMvbXV0
ZXguaCx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOTgNCmRpZmYgLXUgLXIx
Ljk4IG11dGV4LmgNCi0tLSBzeXMvbXV0ZXguaAkxOCBKdWwgMjAwNyAyMDo0
NjowNiAtMDAwMAkxLjk4DQorKysgc3lzL211dGV4LmgJMjAgSnVsIDIwMDcg
MTE6MTE6MDQgLTAwMDANCkBAIC0zOTcsMzUgKzM5NywxOCBAQA0KIH0gd2hp
bGUgKDApDQogDQogLyoNCi0gKiBOZXR3b3JrIE1QU0FGRSB0ZW1wb3Jhcnkg
d29ya2Fyb3VuZHMuICBXaGVuIGRlYnVnX21wc2FmZW5ldA0KLSAqIGlzIDEg
dGhlIG5ldHdvcmsgaXMgYXNzdW1lZCB0byBvcGVyYXRlIHdpdGhvdXQgR2lh
bnQgb24gdGhlDQotICogaW5wdXQgcGF0aCBhbmQgcHJvdG9jb2xzIHRoYXQg
cmVxdWlyZSBHaWFudCBtdXN0IGNvbGxlY3QgaXQNCi0gKiBvbiBlbnRyeS4g
IFdoZW4gMCBHaWFudCBpcyBncmFiYmVkIGluIHRoZSBuZXR3b3JrIGludGVy
ZmFjZQ0KLSAqIElTUidzIGFuZCBpbiB0aGUgbmV0aXNyIHBhdGggYW5kIHRo
ZXJlIGlzIG5vIG5lZWQgdG8gZ3JhYg0KLSAqIHRoZSBHaWFudCBsb2NrLiAg
Tm90ZSB0aGF0LCB1bmxpa2UgUElDS1VQX0dJQU5UKCkgYW5kDQotICogRFJP
UF9HSUFOVCgpLCB0aGVzZSBtYWNyb3MgZGlyZWN0bHkgd3JhcCBtdXRleCBv
cGVyYXRpb25zDQotICogd2l0aG91dCBzcGVjaWFsIHJlY3Vyc2lvbiBoYW5k
bGluZy4NCi0gKg0KLSAqIFRoaXMgbWVjaGFuaXNtIGlzIGludGVuZGVkIGFz
IHRlbXBvcmFyeSB1bnRpbCBldmVyeXRoaW5nIG9mDQotICogaW1wb3J0YW5j
ZSBpcyBwcm9wZXJseSBsb2NrZWQuICBOb3RlOiB0aGUgc2VtYW50aWNzIGZv
cg0KLSAqIE5FVF97TE9DSyxVTkxPQ0t9X0dJQU5UKCkgYXJlIG5vdCB0aGUg
c2FtZSBhcyBEUk9QX0dJQU5UKCkNCi0gKiBhbmQgUElDS1VQX0dJQU5UKCks
IGFzIHRoZXkgYXJlIHBsYWluIG11dGV4IG9wZXJhdGlvbnMNCi0gKiB3aXRo
b3V0IGEgcmVjdXJzaW9uIGNvdW50ZXIuDQorICogV2l0aCB0aGUgYWR2ZW50
IG9mIGZpbmUtZ3JhaW5lZCBsb2NraW5nLCB0aGUgR2lhbnQgbG9jayBpcyBu
byBsb25nZXINCisgKiByZXF1aXJlZCBhcm91bmQgdGhlIG5ldHdvcmsgc3Rh
Y2suICBUaGVzZSBtYWNyb3MgZXhpc3QgZm9yIGhpc3RvcmljYWwNCisgKiBy
ZWFzb25zLCBhbGxvd2luZyBjb25kaXRpb25hbCBhY3F1aXNpdGlvbiBvZiBH
aWFudCBiYXNlZCBvbiBhIGRlYnVnZ2luZw0KKyAqIHNldHRpbmcsIGFuZCB3
aWxsIGJlIHJlbW92ZWQuDQogICovDQotZXh0ZXJuCWludCBkZWJ1Z19tcHNh
ZmVuZXQ7CQkvKiBkZWZpbmVkIGluIG5ldC9uZXRpc3IuYyAqLw0KICNkZWZp
bmUJTkVUX0xPQ0tfR0lBTlQoKSBkbyB7CQkJCQkJXA0KLQlpZiAoIWRlYnVn
X21wc2FmZW5ldCkJCQkJCQlcDQotCQltdHhfbG9jaygmR2lhbnQpOwkJCQkJ
XA0KIH0gd2hpbGUgKDApDQogI2RlZmluZQlORVRfVU5MT0NLX0dJQU5UKCkg
ZG8gewkJCQkJCVwNCi0JaWYgKCFkZWJ1Z19tcHNhZmVuZXQpCQkJCQkJXA0K
LQkJbXR4X3VubG9jaygmR2lhbnQpOwkJCQkJXA0KIH0gd2hpbGUgKDApDQog
I2RlZmluZQlORVRfQVNTRVJUX0dJQU5UKCkgZG8gewkJCQkJCVwNCi0JaWYg
KCFkZWJ1Z19tcHNhZmVuZXQpCQkJCQkJXA0KLQkJbXR4X2Fzc2VydCgmR2lh
bnQsIE1BX09XTkVEKTsJCQkJXA0KIH0gd2hpbGUgKDApDQotI2RlZmluZQlO
RVRfQ0FMTE9VVF9NUFNBRkUJKGRlYnVnX21wc2FmZW5ldCA/IENBTExPVVRf
TVBTQUZFIDogMCkNCisjZGVmaW5lCU5FVF9DQUxMT1VUX01QU0FGRQlDQUxM
T1VUX01QU0FGRQ0KIA0KIHN0cnVjdCBtdHhfYXJncyB7DQogCXN0cnVjdCBt
dHgJKm1hX210eDsNCg==

--0-894572789-1185272265=:83919--



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