Subject: sysmon_taskq/acpi_ec converted to mutex(9)/condvar(9)
To: None <tech-kern@netbsd.org>
From: Juan RP <juan@xtrarom.org>
List: tech-kern
Date: 07/01/2007 15:26:41
This is a multi-part message in MIME format.

--Multipart=_Sun__1_Jul_2007_15_26_41_+0200_98316ZjOsaLrLMRB
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit


Hi,

The attached patch converts sysmon_taskq.c and acpi_ec.c to use
mutex(9)es and condvar(9)s.

acpica/OsdSynch.c has to use IPL_SCHED now, otherwise a LOCKDEBUG
kernel will catch the error that a spin lock is held when calling the
acpi_ec functions via AcpiOsQueueForExecution().

AFAIK, they must be spin locks because they might be called from
interrupt context.

Let me know if this patch is correct. I've been using it since yesterday
without any regression.

Also available at: http://www.netbsd.org/~xtraeme/smtaskq.diff

-- 
Juan Romero Pardines 	- The NetBSD Project
http://plog.xtrarom.org 	- NetBSD/pkgsrc news in Spanish

--Multipart=_Sun__1_Jul_2007_15_26_41_+0200_98316ZjOsaLrLMRB
Content-Type: application/octet-stream;
 name="smtaskq.diff"
Content-Disposition: attachment;
 filename="smtaskq.diff"
Content-Transfer-Encoding: base64

SW5kZXg6IGtlcm4vaW5pdF9tYWluLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3Jj
L3N5cy9rZXJuL2luaXRfbWFpbi5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMwNQpkaWZmIC1i
IC11IC1iIC11IC1yMS4zMDUgaW5pdF9tYWluLmMKLS0tIGtlcm4vaW5pdF9tYWluLmMJMSBKdWwg
MjAwNyAwNzozNjozOSAtMDAwMAkxLjMwNQorKysga2Vybi9pbml0X21haW4uYwkxIEp1bCAyMDA3
IDEzOjE5OjE4IC0wMDAwCkBAIC04Nyw2ICs4Nyw3IEBACiAjaW5jbHVkZSAib3B0X3BheC5oIgog
CiAjaW5jbHVkZSAicm5kLmgiCisjaW5jbHVkZSAic3lzbW9uX3Rhc2txLmgiCiAjaW5jbHVkZSAi
c3lzbW9uX2VudnN5cy5oIgogI2luY2x1ZGUgInN5c21vbl9wb3dlci5oIgogI2luY2x1ZGUgInZl
cmlleGVjLmgiCkBAIC0xNzksNiArMTgwLDExIEBACiAjaW5jbHVkZSA8dXZtL3V2bS5oPgogCiAj
aW5jbHVkZSA8ZGV2L2NvbnMuaD4KKworI2lmIE5TWVNNT05fVEFTS1EgPiAwCisjaW5jbHVkZSA8
ZGV2L3N5c21vbi9zeXNtb25fdGFza3EuaD4KKyNlbmRpZgorCiAjaWYgTlNZU01PTl9FTlZTWVMg
PiAwIHx8IE5TWVNNT05fUE9XRVIgPiAwCiAjaW5jbHVkZSA8ZGV2L3N5c21vbi9zeXNtb252YXIu
aD4KICNlbmRpZgpAQCAtMzY3LDkgKzM3MywxNCBAQAogCS8qIEluaXRpYWxpemUgYXN5bmNocm9u
b3VzIEkvTy4gKi8KIAlhaW9fc3lzaW5pdCgpOwogCisjaWYgTlNZU01PTl9UQVNLUSA+IDAKKwlz
eXNtb25fdGFza19xdWV1ZV9wcmVpbml0KCk7CisjZW5kaWYKKwogI2lmIE5TWVNNT05fRU5WU1lT
ID4gMAogCXN5c21vbl9lbnZzeXNfaW5pdCgpOwogI2VuZGlmCisKICNpZiBOU1lTTU9OX1BPV0VS
ID4gMAogCXN5c21vbl9wb3dlcl9pbml0KCk7CiAjZW5kaWYKSW5kZXg6IGRldi9zeXNtb24vZmls
ZXMuc3lzbW9uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNyb290L3NyYy9zeXMvZGV2L3N5c21v
bi9maWxlcy5zeXNtb24sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNgpkaWZmIC1iIC11IC1iIC11
IC1yMS42IGZpbGVzLnN5c21vbgotLS0gZGV2L3N5c21vbi9maWxlcy5zeXNtb24JMSBKdWwgMjAw
NyAwNzozNjo0MyAtMDAwMAkxLjYKKysrIGRldi9zeXNtb24vZmlsZXMuc3lzbW9uCTEgSnVsIDIw
MDcgMTM6MTk6MTggLTAwMDAKQEAgLTEsNyArMSw3IEBACiAjCSROZXRCU0Q6IGZpbGVzLnN5c21v
bix2IDEuNiAyMDA3LzA3LzAxIDA3OjM2OjQzIHh0cmFlbWUgRXhwICQKIAogZGVmaW5lCXN5c21v
bl90YXNrcQotZmlsZQlkZXYvc3lzbW9uL3N5c21vbl90YXNrcS5jCXN5c21vbl90YXNrcQorZmls
ZQlkZXYvc3lzbW9uL3N5c21vbl90YXNrcS5jCXN5c21vbl90YXNrcQkJbmVlZHMtZmxhZwogCiBk
ZWZpbmUJc3lzbW9uX3Bvd2VyCiBmaWxlCWRldi9zeXNtb24vc3lzbW9uX3Bvd2VyLmMJc3lzbW9u
X3Bvd2VyCQluZWVkcy1mbGFnCkluZGV4OiBkZXYvc3lzbW9uL3N5c21vbl90YXNrcS5jCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnNyb290L3NyYy9zeXMvZGV2L3N5c21vbi9zeXNtb25fdGFza3Eu
Yyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS44CmRpZmYgLWIgLXUgLWIgLXUgLXIxLjggc3lzbW9u
X3Rhc2txLmMKLS0tIGRldi9zeXNtb24vc3lzbW9uX3Rhc2txLmMJMjcgSnVuIDIwMDcgMTM6MDQ6
MTUgLTAwMDAJMS44CisrKyBkZXYvc3lzbW9uL3N5c21vbl90YXNrcS5jCTEgSnVsIDIwMDcgMTM6
MTk6MTggLTAwMDAKQEAgLTQ1LDExICs0NSwxMiBAQAogCiAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+
CiAjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgotI2luY2x1ZGUgPHN5cy9sb2NrLmg+CiAjaW5jbHVk
ZSA8c3lzL3F1ZXVlLmg+CiAjaW5jbHVkZSA8c3lzL3Byb2MuaD4KICNpbmNsdWRlIDxzeXMva3Ro
cmVhZC5oPgogI2luY2x1ZGUgPHN5cy9zeXN0bS5oPgorI2luY2x1ZGUgPHN5cy9tdXRleC5oPgor
I2luY2x1ZGUgPHN5cy9jb25kdmFyLmg+CiAKICNpbmNsdWRlIDxkZXYvc3lzbW9uL3N5c21vbl90
YXNrcS5oPgogCkBAIC02MiwzMCArNjMsMjggQEAKIAogc3RhdGljIFRBSUxRX0hFQUQoLCBzeXNt
b25fdGFzaykgc3lzbW9uX3Rhc2tfcXVldWUgPQogICAgIFRBSUxRX0hFQURfSU5JVElBTElaRVIo
c3lzbW9uX3Rhc2tfcXVldWUpOwotc3RydWN0IHNpbXBsZWxvY2sgc3lzbW9uX3Rhc2tfcXVldWVf
c2xvY2sgPSBTSU1QTEVMT0NLX0lOSVRJQUxJWkVSOwotCi0jZGVmaW5lCVNZU01PTl9UQVNLX1FV
RVVFX0xPQ0socykJCQkJCVwKLWRvIHsJCQkJCQkJCQlcCi0JcyA9IHNwbHNjaGVkKCk7CQkJCQkJ
CVwKLQlzaW1wbGVfbG9jaygmc3lzbW9uX3Rhc2tfcXVldWVfc2xvY2spOwkJCQlcCi19IHdoaWxl
ICgvKkNPTlNUQ09ORCovMCkKLQotI2RlZmluZQlTWVNNT05fVEFTS19RVUVVRV9VTkxPQ0socykJ
CQkJCVwKLWRvIHsJCQkJCQkJCQlcCi0Jc2ltcGxlX3VubG9jaygmc3lzbW9uX3Rhc2tfcXVldWVf
c2xvY2spOwkJCVwKLQlzcGx4KChzKSk7CQkJCQkJCVwKLX0gd2hpbGUgKC8qQ09OU1RDT05EKi8w
KQorc3RhdGljIGttdXRleF90IHN5c21vbl90YXNrX3F1ZXVlX210eDsKK3N0YXRpYyBrbXV0ZXhf
dCBzeXNtb25fdGFza19xdWV1ZV9pbml0aWFsaXplZF9tdHg7CitzdGF0aWMga211dGV4X3Qgc3lz
bW9uX3Rhc2tfcXVldWVfZmluaV9tdHg7CitzdGF0aWMga2NvbmR2YXJfdCBzeXNtb25fdGFza19x
dWV1ZV9jdjsKK3N0YXRpYyBrY29uZHZhcl90IHN5c21vbl90YXNrX3F1ZXVlX2ZpbmlfY3Y7CiAK
K3N0YXRpYyBpbnQgc3lzbW9uX3Rhc2tfcXVldWVfaW5pdGlhbGl6ZWQ7CiBzdGF0aWMgaW50IHN5
c21vbl90YXNrX3F1ZXVlX2NsZWFudXBfc2VtOwotCiBzdGF0aWMgc3RydWN0IHByb2MgKnN5c21v
bl90YXNrX3F1ZXVlX3Byb2M7CiAKIHN0YXRpYyB2b2lkIHN5c21vbl90YXNrX3F1ZXVlX2NyZWF0
ZV90aHJlYWQodm9pZCAqKTsKIHN0YXRpYyB2b2lkIHN5c21vbl90YXNrX3F1ZXVlX3RocmVhZCh2
b2lkICopOwogCi1zdGF0aWMgc3RydWN0IHNpbXBsZWxvY2sgc3lzbW9uX3Rhc2tfcXVldWVfaW5p
dGlhbGl6ZWRfc2xvY2sgPQotICAgIFNJTVBMRUxPQ0tfSU5JVElBTElaRVI7Ci1zdGF0aWMgaW50
IHN5c21vbl90YXNrX3F1ZXVlX2luaXRpYWxpemVkOwordm9pZAorc3lzbW9uX3Rhc2tfcXVldWVf
cHJlaW5pdCh2b2lkKQoreworCW11dGV4X2luaXQoJnN5c21vbl90YXNrX3F1ZXVlX210eCwgTVVU
RVhfRFJJVkVSLCBJUExfVk0pOworCW11dGV4X2luaXQoJnN5c21vbl90YXNrX3F1ZXVlX2luaXRp
YWxpemVkX210eCwgTVVURVhfRFJJVkVSLCBJUExfVk0pOworCW11dGV4X2luaXQoJnN5c21vbl90
YXNrX3F1ZXVlX2ZpbmlfbXR4LCBNVVRFWF9EUklWRVIsIElQTF9WTSk7CisJY3ZfaW5pdCgmc3lz
bW9uX3Rhc2tfcXVldWVfY3YsICJzbXRhc2txIik7CisJY3ZfaW5pdCgmc3lzbW9uX3Rhc2tfcXVl
dWVfZmluaV9jdiwgInN0ZmluaSIpOworfQogCiAvKgogICogc3lzbW9uX3Rhc2tfcXVldWVfaW5p
dDoKQEAgLTk2LDE0ICs5NSwxNCBAQAogc3lzbW9uX3Rhc2tfcXVldWVfaW5pdCh2b2lkKQogewog
Ci0Jc2ltcGxlX2xvY2soJnN5c21vbl90YXNrX3F1ZXVlX2luaXRpYWxpemVkX3Nsb2NrKTsKKwlt
dXRleF9lbnRlcigmc3lzbW9uX3Rhc2tfcXVldWVfaW5pdGlhbGl6ZWRfbXR4KTsKIAlpZiAoc3lz
bW9uX3Rhc2tfcXVldWVfaW5pdGlhbGl6ZWQpIHsKLQkJc2ltcGxlX3VubG9jaygmc3lzbW9uX3Rh
c2tfcXVldWVfaW5pdGlhbGl6ZWRfc2xvY2spOworCQltdXRleF9leGl0KCZzeXNtb25fdGFza19x
dWV1ZV9pbml0aWFsaXplZF9tdHgpOwogCQlyZXR1cm47CiAJfQogCiAJc3lzbW9uX3Rhc2tfcXVl
dWVfaW5pdGlhbGl6ZWQgPSAxOwotCXNpbXBsZV91bmxvY2soJnN5c21vbl90YXNrX3F1ZXVlX2lu
aXRpYWxpemVkX3Nsb2NrKTsKKwltdXRleF9leGl0KCZzeXNtb25fdGFza19xdWV1ZV9pbml0aWFs
aXplZF9tdHgpOwogCiAJa3RocmVhZF9jcmVhdGUoc3lzbW9uX3Rhc2tfcXVldWVfY3JlYXRlX3Ro
cmVhZCwgTlVMTCk7CiB9CkBAIC0xMTEsMjQgKzExMCwyMSBAQAogLyoKICAqIHN5c21vbl90YXNr
X3F1ZXVlX2Zpbmk6CiAgKgotICoJVGVhciB0b3duIHRoZSBzeXNtb24gdGFzayBxdWV1ZS4KKyAq
CVRlYXIgZG93biB0aGUgc3lzbW9uIHRhc2sgcXVldWUuCiAgKi8KIHZvaWQKIHN5c21vbl90YXNr
X3F1ZXVlX2Zpbmkodm9pZCkKIHsKLQlpbnQgczsKLQotCVNZU01PTl9UQVNLX1FVRVVFX0xPQ0so
cyk7CisJbXV0ZXhfZW50ZXIoJnN5c21vbl90YXNrX3F1ZXVlX2ZpbmlfbXR4KTsKIAogCXN5c21v
bl90YXNrX3F1ZXVlX2NsZWFudXBfc2VtID0gMTsKLQl3YWtldXAoJnN5c21vbl90YXNrX3F1ZXVl
KTsKKwljdl9icm9hZGNhc3QoJnN5c21vbl90YXNrX3F1ZXVlX2ZpbmlfY3YpOwogCi0Jd2hpbGUg
KHN5c21vbl90YXNrX3F1ZXVlX2NsZWFudXBfc2VtICE9IDApIHsKLQkJKHZvaWQpbHRzbGVlcCgm
c3lzbW9uX3Rhc2tfcXVldWVfY2xlYW51cF9zZW0sCi0JCSAgICBQVk0sICJzdGZpbmkiLCAwLCAm
c3lzbW9uX3Rhc2tfcXVldWVfc2xvY2spOwotCX0KKwl3aGlsZSAoc3lzbW9uX3Rhc2tfcXVldWVf
Y2xlYW51cF9zZW0gIT0gMCkKKwkJY3Zfd2FpdCgmc3lzbW9uX3Rhc2tfcXVldWVfZmluaV9jdiwK
KwkJCSZzeXNtb25fdGFza19xdWV1ZV9maW5pX210eCk7CiAKLQlTWVNNT05fVEFTS19RVUVVRV9V
TkxPQ0socyk7CisJbXV0ZXhfZXhpdCgmc3lzbW9uX3Rhc2tfcXVldWVfZmluaV9tdHgpOwogfQog
CiAvKgpAQCAtMTYwLDcgKzE1Niw2IEBACiBzeXNtb25fdGFza19xdWV1ZV90aHJlYWQodm9pZCAq
YXJnKQogewogCXN0cnVjdCBzeXNtb25fdGFzayAqc3Q7Ci0JaW50IHM7CiAKIAkvKgogCSAqIFJ1
biB0aHJvdWdoIGFsbCB0aGUgdGFza3MgYmVmb3JlIHdlIGNoZWNrIGZvciB0aGUgZXhpdApAQCAt
MTY4LDI0ICsxNjMsMjQgQEAKIAkgKiBhbGwgdGhlIHRhc2tzIGJlZm9yZSB3ZSBleGl0LgogCSAq
LwogCWZvciAoOzspIHsKLQkJU1lTTU9OX1RBU0tfUVVFVUVfTE9DSyhzKTsKKwkJbXV0ZXhfZW50
ZXIoJnN5c21vbl90YXNrX3F1ZXVlX210eCk7CiAJCXN0ID0gVEFJTFFfRklSU1QoJnN5c21vbl90
YXNrX3F1ZXVlKTsKIAkJaWYgKHN0ID09IE5VTEwpIHsKIAkJCS8qIENoZWNrIGZvciB0aGUgZXhp
dCBjb25kaXRpb24uICovCiAJCQlpZiAoc3lzbW9uX3Rhc2tfcXVldWVfY2xlYW51cF9zZW0gIT0g
MCkgewogCQkJCS8qIFRpbWUgdG8gZGllLiAqLworCQkJCW11dGV4X2VudGVyKCZzeXNtb25fdGFz
a19xdWV1ZV9maW5pX210eCk7CiAJCQkJc3lzbW9uX3Rhc2tfcXVldWVfY2xlYW51cF9zZW0gPSAw
OwotCQkJCXdha2V1cCgmc3lzbW9uX3Rhc2tfcXVldWVfY2xlYW51cF9zZW0pOwotCQkJCVNZU01P
Tl9UQVNLX1FVRVVFX1VOTE9DSyhzKTsKKwkJCQljdl9icm9hZGNhc3QoJnN5c21vbl90YXNrX3F1
ZXVlX2ZpbmlfY3YpOworCQkJCW11dGV4X2V4aXQoJnN5c21vbl90YXNrX3F1ZXVlX2ZpbmlfbXR4
KTsKIAkJCQlrdGhyZWFkX2V4aXQoMCk7CiAJCQl9Ci0JCQkodm9pZCkgbHRzbGVlcCgmc3lzbW9u
X3Rhc2tfcXVldWUsIFBWTSwKLQkJCSAgICAic210YXNrcSIsIDAsICZzeXNtb25fdGFza19xdWV1
ZV9zbG9jayk7Ci0JCQlTWVNNT05fVEFTS19RVUVVRV9VTkxPQ0socyk7CisJCQljdl93YWl0KCZz
eXNtb25fdGFza19xdWV1ZV9jdiwgJnN5c21vbl90YXNrX3F1ZXVlX210eCk7CisJCQltdXRleF9l
eGl0KCZzeXNtb25fdGFza19xdWV1ZV9tdHgpOwogCQkJY29udGludWU7CiAJCX0KIAkJVEFJTFFf
UkVNT1ZFKCZzeXNtb25fdGFza19xdWV1ZSwgc3QsIHN0X2xpc3QpOwotCQlTWVNNT05fVEFTS19R
VUVVRV9VTkxPQ0socyk7CisJCW11dGV4X2V4aXQoJnN5c21vbl90YXNrX3F1ZXVlX210eCk7CiAK
IAkJKCpzdC0+c3RfZnVuYykoc3QtPnN0X2FyZyk7CiAJCWZyZWUoc3QsIE1fVEVNUCk7CkBAIC0y
MDIsNyArMTk3LDYgQEAKIHN5c21vbl90YXNrX3F1ZXVlX3NjaGVkKHVfaW50IHByaSwgdm9pZCAo
KmZ1bmMpKHZvaWQgKiksIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3Qgc3lzbW9uX3Rhc2sgKnN0LCAq
bHN0OwotCWludCBzOwogCiAJaWYgKHN5c21vbl90YXNrX3F1ZXVlX3Byb2MgPT0gTlVMTCkKIAkJ
YXByaW50X2RlYnVnKCJXQVJOSU5HOiBDYWxsYmFjayBzY2hlZHVsZWQgYmVmb3JlIHN5c21vbiAi
CkBAIC0yMTMsMTMgKzIwNywxMyBAQAogCiAJc3QgPSBtYWxsb2Moc2l6ZW9mKCpzdCksIE1fVEVN
UCwgTV9OT1dBSVQpOwogCWlmIChzdCA9PSBOVUxMKQotCQlyZXR1cm4gKEVOT01FTSk7CisJCXJl
dHVybiBFTk9NRU07CiAKIAlzdC0+c3RfZnVuYyA9IGZ1bmM7CiAJc3QtPnN0X2FyZyA9IGFyZzsK
IAlzdC0+c3RfcHJpID0gcHJpOwogCi0JU1lTTU9OX1RBU0tfUVVFVUVfTE9DSyhzKTsKKwltdXRl
eF9lbnRlcigmc3lzbW9uX3Rhc2tfcXVldWVfbXR4KTsKIAlUQUlMUV9GT1JFQUNIKGxzdCwgJnN5
c21vbl90YXNrX3F1ZXVlLCBzdF9saXN0KSB7CiAJCWlmIChzdC0+c3RfcHJpID4gbHN0LT5zdF9w
cmkpIHsKIAkJCVRBSUxRX0lOU0VSVF9CRUZPUkUobHN0LCBzdCwgc3RfbGlzdCk7CkBAIC0yMjgs
OCArMjIyLDggQEAKIAl9CiAJaWYgKGxzdCA9PSBOVUxMKQogCQlUQUlMUV9JTlNFUlRfVEFJTCgm
c3lzbW9uX3Rhc2tfcXVldWUsIHN0LCBzdF9saXN0KTsKLQl3YWtldXAoJnN5c21vbl90YXNrX3F1
ZXVlKTsKLQlTWVNNT05fVEFTS19RVUVVRV9VTkxPQ0socyk7CisJY3ZfYnJvYWRjYXN0KCZzeXNt
b25fdGFza19xdWV1ZV9jdik7CisJbXV0ZXhfZXhpdCgmc3lzbW9uX3Rhc2tfcXVldWVfbXR4KTsK
IAotCXJldHVybiAoMCk7CisJcmV0dXJuIDA7CiB9CkluZGV4OiBkZXYvc3lzbW9uL3N5c21vbl90
YXNrcS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNyb290L3NyYy9zeXMvZGV2L3N5c21vbi9z
eXNtb25fdGFza3EuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLWIgLXUgLWIgLXUg
LXIxLjEgc3lzbW9uX3Rhc2txLmgKLS0tIGRldi9zeXNtb24vc3lzbW9uX3Rhc2txLmgJMjAgQXBy
IDIwMDMgMjA6MjA6MzUgLTAwMDAJMS4xCisrKyBkZXYvc3lzbW9uL3N5c21vbl90YXNrcS5oCTEg
SnVsIDIwMDcgMTM6MTk6MTggLTAwMDAKQEAgLTM4LDYgKzM4LDcgQEAKICNpZm5kZWYgX0RFVl9T
WVNNT05fU1lTTU9OX1RBU0tRX0hfCiAjZGVmaW5lCV9ERVZfU1lTTU9OX1NZU01PTl9UQVNLUV9I
XwogCit2b2lkCXN5c21vbl90YXNrX3F1ZXVlX3ByZWluaXQodm9pZCk7CiB2b2lkCXN5c21vbl90
YXNrX3F1ZXVlX2luaXQodm9pZCk7CiB2b2lkCXN5c21vbl90YXNrX3F1ZXVlX2Zpbmkodm9pZCk7
CiBpbnQJc3lzbW9uX3Rhc2tfcXVldWVfc2NoZWQodV9pbnQsIHZvaWQgKCopKHZvaWQgKiksIHZv
aWQgKik7CkluZGV4OiBkZXYvYWNwaS9hY3BpX2VjLmMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
c3Jvb3Qvc3JjL3N5cy9kZXYvYWNwaS9hY3BpX2VjLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
NDEKZGlmZiAtYiAtdSAtYiAtdSAtcjEuNDEgYWNwaV9lYy5jCi0tLSBkZXYvYWNwaS9hY3BpX2Vj
LmMJMjYgSnVuIDIwMDcgMjI6MzY6MTYgLTAwMDAJMS40MQorKysgZGV2L2FjcGkvYWNwaV9lYy5j
CTEgSnVsIDIwMDcgMTM6MTk6MTggLTAwMDAKQEAgLTE4MCw2ICsxODAsOCBAQAogI2luY2x1ZGUg
PHN5cy9tYWxsb2MuaD4KICNpbmNsdWRlIDxzeXMvcHJvYy5oPgogI2luY2x1ZGUgPHN5cy9rZXJu
ZWwuaD4KKyNpbmNsdWRlIDxzeXMvbXV0ZXguaD4KKyNpbmNsdWRlIDxzeXMvY29uZHZhci5oPgog
CiAjaW5jbHVkZSA8bWFjaGluZS9idXMuaD4KIApAQCAtMjEwLDggKzIxMiw5IEBACiAJdWludDMy
X3QJc2NfY3NydmFsdWU7CS8qIHNhdmVkIGNvbnRyb2wgcmVnaXN0ZXIgKi8KIAl1aW50MzJfdAlz
Y191aWQ7CQkvKiBfVUlEIGluIG5hbWVzcGFjZSAoRUNEVCBvbmx5KSAqLwogCi0Jc3RydWN0IGxv
Y2sJc2NfbG9jazsJLyogc2VyaWFsaXplIG9wZXJhdGlvbnMgdG8gdGhpcyBFQyAqLwotCXN0cnVj
dCBzaW1wbGVsb2NrIHNjX3Nsb2NrOwkvKiBwcm90ZWN0IGFnYWluc3QgaW50ZXJydXB0cyAqLwor
CWtjb25kdmFyX3QJc2NfY3Y7CisJa211dGV4X3QJc2NfbG9jazsJLyogc2VyaWFsaXplIG9wZXJh
dGlvbnMgdG8gdGhpcyBFQyAqLworCWttdXRleF90CXNjX3Nsb2NrOwkvKiBwcm90ZWN0IGFnYWlu
c3QgaW50ZXJydXB0cyAqLwogCVVJTlQzMgkJc2NfZ2xraGFuZGxlOwkvKiBnbG9iYWwgbG9jayBo
YW5kbGUgKi8KIAlVSU5UMzIJCXNjX2dsazsJCS8qIG5lZWQgZ2xvYmFsIGxvY2s/ICovCiB9OwpA
QCAtMjU3LDcgKzI2MCw2IEBACiBzdGF0aWMgQUNQSV9TVEFUVVMJRWNSZWFkKHN0cnVjdCBhY3Bp
X2VjX3NvZnRjICosIFVJTlQ4LCBVSU5UOCAqKTsKIHN0YXRpYyBBQ1BJX1NUQVRVUwlFY1dyaXRl
KHN0cnVjdCBhY3BpX2VjX3NvZnRjICosIFVJTlQ4LCBVSU5UOCAqKTsKIHN0YXRpYyB2b2lkCQlF
Y0dwZVF1ZXJ5SGFuZGxlcih2b2lkICopOwotc3RhdGljIGlubGluZSBpbnQJRWNJc0xvY2tlZChz
dHJ1Y3QgYWNwaV9lY19zb2Z0YyAqKTsKIHN0YXRpYyBpbmxpbmUgdm9pZAlFY0xvY2soc3RydWN0
IGFjcGlfZWNfc29mdGMgKik7CiBzdGF0aWMgaW5saW5lIHZvaWQJRWNVbmxvY2soc3RydWN0IGFj
cGlfZWNfc29mdGMgKik7CiAKQEAgLTI3MCw0MyArMjcyLDMyIEBACiAKIHN0YXRpYyBzdHJ1Y3Qg
YWNwaV9lY19zb2Z0YyAqZWNkdF9zYzsKIAotc3RhdGljIGlubGluZSBpbnQKLUVjSXNMb2NrZWQo
c3RydWN0IGFjcGlfZWNfc29mdGMgKnNjKQotewotCi0JcmV0dXJuIChsb2Nrc3RhdHVzKCZzYy0+
c2NfbG9jaykgPT0gTEtfRVhDTFVTSVZFKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkCiBFY0xv
Y2soc3RydWN0IGFjcGlfZWNfc29mdGMgKnNjKQogewogCUFDUElfU1RBVFVTIHJ2OwotCWludCBz
OwogCi0JbG9ja21ncigmc2MtPnNjX2xvY2ssIExLX0VYQ0xVU0lWRSwgTlVMTCk7CisJbXV0ZXhf
ZW50ZXIoJnNjLT5zY19sb2NrKTsKIAlpZiAoc2MtPnNjX2dsaykgewogCQlydiA9IEFjcGlBY3F1
aXJlR2xvYmFsTG9jayhFQ19MT0NLX1RJTUVPVVQsCiAJCSAgICAmc2MtPnNjX2dsa2hhbmRsZSk7
CiAJCWlmIChBQ1BJX0ZBSUxVUkUocnYpKSB7CiAJCQlwcmludGYoIiVzOiBmYWlsZWQgdG8gYWNx
dWlyZSBnbG9iYWwgbG9ja1xuIiwKIAkJCSAgICBzYy0+c2NfZGV2LmR2X3huYW1lKTsKLQkJCWxv
Y2ttZ3IoJnNjLT5zY19sb2NrLCBMS19SRUxFQVNFLCBOVUxMKTsKKwkJCW11dGV4X2V4aXQoJnNj
LT5zY19sb2NrKTsKIAkJCXJldHVybjsKIAkJfQogCX0KIAotCXMgPSBzcGx2bSgpOyAvKiBYWFgg
Ki8KLQlzaW1wbGVfbG9jaygmc2MtPnNjX3Nsb2NrKTsKKwltdXRleF9lbnRlcigmc2MtPnNjX3Ns
b2NrKTsKIAlzYy0+c2NfZmxhZ3MgfD0gRUNfRl9UUkFOU0FDVElPTjsKLQlzaW1wbGVfdW5sb2Nr
KCZzYy0+c2Nfc2xvY2spOwotCXNwbHgocyk7CisJbXV0ZXhfZXhpdCgmc2MtPnNjX3Nsb2NrKTsK
IH0KIAogc3RhdGljIGlubGluZSB2b2lkCiBFY1VubG9jayhzdHJ1Y3QgYWNwaV9lY19zb2Z0YyAq
c2MpCiB7CiAJQUNQSV9TVEFUVVMgcnY7Ci0JaW50IHM7CiAKIAkvKgogCSAqIENsZWFyICYgUmUt
RW5hYmxlIHRoZSBFQyBHUEU6CkBAIC0zMTcsOCArMzA4LDcgQEAKIAkgKiAoRUMtU0NJKSB3aWxs
IHN0aWxsIGJlIGhpZ2ggYW5kIHRodXMgc2hvdWxkIHRyaWdnZXIgdGhlIEdQRQogCSAqIGltbWVk
aWF0ZWx5IGFmdGVyIHdlIHJlLWVuYWJsaW5nIGl0LgogCSAqLwotCXMgPSBzcGx2bSgpOyAvKiBY
WFggKi8KLQlzaW1wbGVfbG9jaygmc2MtPnNjX3Nsb2NrKTsKKwltdXRleF9lbnRlcigmc2MtPnNj
X3Nsb2NrKTsKIAlpZiAoc2MtPnNjX2ZsYWdzICYgRUNfRl9QRU5EUVVFUlkpIHsKIAkJQUNQSV9T
VEFUVVMgcnYyOwogCkBAIC0zMzAsOCArMzIwLDcgQEAKIAkJc2MtPnNjX2ZsYWdzICY9IH5FQ19G
X1BFTkRRVUVSWTsKIAl9CiAJc2MtPnNjX2ZsYWdzICY9IH5FQ19GX1RSQU5TQUNUSU9OOwotCXNp
bXBsZV91bmxvY2soJnNjLT5zY19zbG9jayk7Ci0Jc3BseChzKTsKKwltdXRleF9leGl0KCZzYy0+
c2Nfc2xvY2spOwogCiAJaWYgKHNjLT5zY19nbGspIHsKIAkJcnYgPSBBY3BpUmVsZWFzZUdsb2Jh
bExvY2soc2MtPnNjX2dsa2hhbmRsZSk7CkBAIC0zMzksNyArMzI4LDcgQEAKIAkJCXByaW50Zigi
JXM6IGZhaWxlZCB0byByZWxlYXNlIGdsb2JhbCBsb2NrXG4iLAogCQkJICAgIHNjLT5zY19kZXYu
ZHZfeG5hbWUpOwogCX0KLQlsb2NrbWdyKCZzYy0+c2NfbG9jaywgTEtfUkVMRUFTRSwgTlVMTCk7
CisJbXV0ZXhfZXhpdCgmc2MtPnNjX2xvY2spOwogfQogCiAvKgpAQCAtNDU0LDggKzQ0Myw5IEBA
CiAJcHJpbnRmKCIlczogZm91bmQgRUNEVCwgR1BFICVkXG4iLCBwYXJlbnQtPmR2X3huYW1lLAog
CSAgICBlY2R0X3NjLT5zY19ncGViaXQpOwogCi0JbG9ja2luaXQoJmVjZHRfc2MtPnNjX2xvY2ss
IFBXQUlULCAiZWNsb2NrIiwgMCwgMCk7Ci0Jc2ltcGxlX2xvY2tfaW5pdCgmZWNkdF9zYy0+c2Nf
c2xvY2spOworCWN2X2luaXQoJmVjZHRfc2MtPnNjX2N2LCAiZWNsb2NrIik7CisJbXV0ZXhfaW5p
dCgmZWNkdF9zYy0+c2NfbG9jaywgTVVURVhfRFJJVkVSLCBJUExfVk0pOworCW11dGV4X2luaXQo
JmVjZHRfc2MtPnNjX3Nsb2NrLCBNVVRFWF9EUklWRVIsIElQTF9WTSk7CiAKIAlBY3BpT3NVbm1h
cE1lbW9yeShlcCwgZXAtPkxlbmd0aCk7CiAJcmV0dXJuOwpAQCAtNDk1LDggKzQ4NSw5IEBACiAJ
YXByaW50X25haXZlKCI6IEFDUEkgRW1iZWRkZWQgQ29udHJvbGxlclxuIik7CiAJYXByaW50X25v
cm1hbCgiOiBBQ1BJIEVtYmVkZGVkIENvbnRyb2xsZXJcbiIpOwogCi0JbG9ja2luaXQoJnNjLT5z
Y19sb2NrLCBQV0FJVCwgImVjbG9jayIsIDAsIDApOwotCXNpbXBsZV9sb2NrX2luaXQoJnNjLT5z
Y19zbG9jayk7CisJY3ZfaW5pdCgmc2MtPnNjX2N2LCAiZWNsb2NrIik7CisJbXV0ZXhfaW5pdCgm
c2MtPnNjX2xvY2ssIE1VVEVYX0RSSVZFUiwgSVBMX1ZNKTsKKwltdXRleF9pbml0KCZzYy0+c2Nf
c2xvY2ssIE1VVEVYX0RSSVZFUiwgSVBMX1ZNKTsKIAogCXNjLT5zY19oYW5kbGUgPSBhYS0+YWFf
bm9kZS0+YWRfaGFuZGxlOwogCkBAIC03MjIsNyArNzEzLDcgQEAKIAkgKiBJZiBFQyBpcyBsb2Nr
ZWQsIHRoZSBpbnRyIG11c3QgcHJvY2VzcyBFY1JlYWQvV3JpdGUgd2FpdCBvbmx5LgogCSAqIFF1
ZXJ5IHJlcXVlc3QgbXVzdCBiZSBwZW5kaW5nLgogCSAqLwotCXNpbXBsZV9sb2NrKCZzYy0+c2Nf
c2xvY2spOworCW11dGV4X2VudGVyKCZzYy0+c2Nfc2xvY2spOwogCWlmIChzYy0+c2NfZmxhZ3Mg
JiBFQ19GX1RSQU5TQUNUSU9OKSB7CiAJCWNzcnZhbHVlID0gRUNfQ1NSX1JFQUQoc2MpOwogCQlz
Yy0+c2NfZmxhZ3MgfD0gRUNfRl9QRU5EUVVFUlk7CkBAIC03MzAsMTEgKzcyMSwxMSBAQAogCQlp
ZiAoKGNzcnZhbHVlICYgRUNfRkxBR19PVVRQVVRfQlVGRkVSKSAhPSAwIHx8CiAJCSAgICAoY3Ny
dmFsdWUgJiBFQ19GTEFHX0lOUFVUX0JVRkZFUikgPT0gMCkgewogCQkJc2MtPnNjX2NzcnZhbHVl
ID0gY3NydmFsdWU7Ci0JCQl3YWtldXAoJnNjLT5zY19jc3J2YWx1ZSk7CisJCQljdl9icm9hZGNh
c3QoJnNjLT5zY19jdik7CiAJCX0KLQkJc2ltcGxlX3VubG9jaygmc2MtPnNjX3Nsb2NrKTsKKwkJ
bXV0ZXhfZXhpdCgmc2MtPnNjX3Nsb2NrKTsKIAl9IGVsc2UgewotCQlzaW1wbGVfdW5sb2NrKCZz
Yy0+c2Nfc2xvY2spOworCQltdXRleF9leGl0KCZzYy0+c2Nfc2xvY2spOwogCQkvKiBFbnF1ZXVl
IEdwZVF1ZXJ5IGhhbmRsZXIuICovCiAJCXJ2ID0gQWNwaU9zUXVldWVGb3JFeGVjdXRpb24oT1NE
X1BSSU9SSVRZX0hJR0gsCiAJCSAgICBFY0dwZVF1ZXJ5SGFuZGxlciwgQ29udGV4dCk7CkBAIC04
MzAsOSArODIxLDcgQEAKIAlpZiAoY29sZCkKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEVjV2FpdEV2
ZW50KHNjLCBFdmVudCkpOwogCi0JaWYgKEVjSXNMb2NrZWQoc2MpID09IDApCi0JCXByaW50Zigi
JXM6IEVjV2FpdEV2ZW50SW50ciBjYWxsZWQgd2l0aG91dCBFQyBsb2NrIVxuIiwKLQkJICAgIHNj
LT5zY19kZXYuZHZfeG5hbWUpOworCUtBU1NFUlQobXV0ZXhfb3duZWQoJnNjLT5zY19sb2NrKSk7
CiAKIAlFY1N0YXR1cyA9IEVDX0NTUl9SRUFEKHNjKTsKIApAQCAtODQ4LDkgKzgzNyw4IEBACiAJ
CQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogCiAJCXNjLT5zY19jc3J2YWx1ZSA9IDA7Ci0J
CS8qIFhYWEpSVCBTbGVlcGluZyB3aXRoIGEgbG9jayBoZWxkPyAqLwotCQlpZiAodHNsZWVwKCZz
Yy0+c2NfY3NydmFsdWUsIDAsICJFY1dhaXQiLCAoaHogKyA5OSkgLyAxMDApCi0JCSAgICAhPSBF
V09VTERCTE9DSykKKwkJaWYgKGN2X3RpbWVkd2FpdF9zaWcoJnNjLT5zY19jdiwgJnNjLT5zY19s
b2NrLAorCQkgICAgKGh6ICsgOTkpIC8gMTAwKSAhPSBFV09VTERCTE9DSykKIAkJCUVjU3RhdHVz
ID0gc2MtPnNjX2NzcnZhbHVlOwogCQllbHNlCiAJCQlFY1N0YXR1cyA9IEVDX0NTUl9SRUFEKHNj
KTsKQEAgLTg2NCw5ICs4NTIsNyBAQAogCUVDX1NUQVRVUyBFY1N0YXR1czsKIAlVSU5UMzIgaSA9
IDA7CiAKLQlpZiAoRWNJc0xvY2tlZChzYykgPT0gMCkKLQkJcHJpbnRmKCIlczogRWNXYWl0RXZl
bnQgY2FsbGVkIHdpdGhvdXQgRUMgbG9jayFcbiIsCi0JCSAgICBzYy0+c2NfZGV2LmR2X3huYW1l
KTsKKwlLQVNTRVJUKG11dGV4X293bmVkKCZzYy0+c2NfbG9jaykpOwogCiAJLyoKIAkgKiBTdGFs
bCAxMHVzOgpAQCAtOTA1LDkgKzg5MSw3IEBACiB7CiAJQUNQSV9TVEFUVVMgcnY7CiAKLQlpZiAo
RWNJc0xvY2tlZChzYykgPT0gMCkKLQkJcHJpbnRmKCIlczogRWNRdWVyeSBjYWxsZWQgd2l0aG91
dCBFQyBsb2NrIVxuIiwKLQkJICAgIHNjLT5zY19kZXYuZHZfeG5hbWUpOworCUtBU1NFUlQobXV0
ZXhfb3duZWQoJnNjLT5zY19sb2NrKSk7CiAKIAlFQ19DU1JfV1JJVEUoc2MsIEVDX0NPTU1BTkRf
UVVFUlkpOwogCXJ2ID0gRWNXYWl0RXZlbnRJbnRyKHNjLCBFQ19FVkVOVF9PVVRQVVRfQlVGRkVS
X0ZVTEwpOwpAQCAtOTU5LDkgKzk0Myw3IEBACiB7CiAJQUNQSV9TVEFUVVMgcnY7CiAKLQlpZiAo
RWNJc0xvY2tlZChzYykgPT0gMCkKLQkJcHJpbnRmKCIlczogRWNSZWFkIGNhbGxlZCB3aXRob3V0
IEVDIGxvY2shXG4iLAotCQkgICAgc2MtPnNjX2Rldi5kdl94bmFtZSk7CisJS0FTU0VSVChtdXRl
eF9vd25lZCgmc2MtPnNjX2xvY2spKTsKIAogCS8qIEVjQnVyc3RFbmFibGUoRW1iZWRkZWRDb250
cm9sbGVyKTsgKi8KIApAQCAtOTkzLDkgKzk3NSw3IEBACiB7CiAJQUNQSV9TVEFUVVMgcnY7CiAK
LQlpZiAoRWNJc0xvY2tlZChzYykgPT0gMCkKLQkJcHJpbnRmKCIlczogRWNXcml0ZSBjYWxsZWQg
d2l0aG91dCBFQyBsb2NrIVxuIiwKLQkJICAgIHNjLT5zY19kZXYuZHZfeG5hbWUpOworCUtBU1NF
UlQobXV0ZXhfb3duZWQoJnNjLT5zY19sb2NrKSk7CiAKIAkvKiBFY0J1cnN0RW5hYmxlKEVtYmVk
ZGVkQ29udHJvbGxlcik7ICovCiAKSW5kZXg6IGRldi9hY3BpL2FjcGljYS9Pc2RTeW5jaC5jCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnNyb290L3NyYy9zeXMvZGV2L2FjcGkvYWNwaWNhL09zZFN5
bmNoLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNwpkaWZmIC1iIC11IC1iIC11IC1yMS43IE9z
ZFN5bmNoLmMKLS0tIGRldi9hY3BpL2FjcGljYS9Pc2RTeW5jaC5jCTE5IEZlYiAyMDA3IDIyOjMy
OjUyIC0wMDAwCTEuNworKysgZGV2L2FjcGkvYWNwaWNhL09zZFN5bmNoLmMJMSBKdWwgMjAwNyAx
MzoxOToxOCAtMDAwMApAQCAtMTIyLDcgKzEyMiw3IEBACiAJaWYgKGFzID09IE5VTEwpCiAJCXJl
dHVybl9BQ1BJX1NUQVRVUyhBRV9OT19NRU1PUlkpOwogCi0JbXV0ZXhfaW5pdCgmYXMtPmFzX3Ns
b2NrLCBNVVRFWF9EUklWRVIsIElQTF9OT05FKTsKKwltdXRleF9pbml0KCZhcy0+YXNfc2xvY2ss
IE1VVEVYX0RSSVZFUiwgSVBMX1NDSEVEKTsKIAljdl9pbml0KCZhcy0+YXNfY3YsICJhY3Bpc2Vt
Iik7CiAJYXMtPmFzX3VuaXRzID0gSW5pdGlhbFVuaXRzOwogCWFzLT5hc19tYXh1bml0cyA9IE1h
eFVuaXRzOwo=

--Multipart=_Sun__1_Jul_2007_15_26_41_+0200_98316ZjOsaLrLMRB--