From owner-freebsd-emulation@FreeBSD.ORG Sat Jan 24 13:18:35 2004 Return-Path: Delivered-To: freebsd-emulation@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 9988D16A4CE for ; Sat, 24 Jan 2004 13:18:35 -0800 (PST) Received: from relay.pair.com (relay.pair.com [209.68.1.20]) by mx1.FreeBSD.org (Postfix) with SMTP id 2478B43D8D for ; Sat, 24 Jan 2004 13:16:52 -0800 (PST) (envelope-from silby@silby.com) Received: (qmail 72972 invoked from network); 24 Jan 2004 21:16:48 -0000 Received: from niwun.pair.com (HELO localhost) (209.68.2.70) by relay.pair.com with SMTP; 24 Jan 2004 21:16:48 -0000 X-pair-Authenticated: 209.68.2.70 Date: Sat, 24 Jan 2004 15:16:47 -0600 (CST) From: Mike Silbersack To: emulation@freebsd.org Message-ID: <20040124151131.I29927@odysseus.silby.com> MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="0-1432871052-1074979007=:29927" Subject: New /dev/rtc driver for vmware X-BeenThere: freebsd-emulation@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Development of Emulators of other operating systems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 24 Jan 2004 21:18:35 -0000 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. --0-1432871052-1074979007=:29927 Content-Type: TEXT/PLAIN; charset=US-ASCII Over the last few days, I've been hacking together a new /dev/rtc driver for vmware to use. I still need to do a bit more work to get its timing better (which may involve making other changes to the kernel), but I think that it's ready for general testing. Please copy the included rtc.c into the files/ directory of the rtc port, rebuild, and see how it works for you. Also, make sure that you're running with kern.hz = 1000 or greater; it's not going to work well otherwise. The biggest change you'll notice is that when running vmware is that processor usage will be much lower. Things I have yet to do with the driver: 1. Make it work decently at hz = 100 1a. Improve its timing 2. Implement device cloning so that under 5.x the driver can be used by multiple copies of vmware at once. But for now, it seems to work pretty well, and I may just commit it as is, unless people report other problems with it. Thanks, Mike "Silby" Silbersack --0-1432871052-1074979007=:29927 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="rtc.c" Content-Transfer-Encoding: BASE64 Content-ID: <20040124151647.U29927@odysseus.silby.com> Content-Description: Content-Disposition: attachment; filename="rtc.c" LyoNCiAqIENvcHlyaWdodCBieSBWbGFkaW1pciBOLiBTaWx5YWV2IDIwMDAN CiAqDQogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCiAqIG1vZGlmaWNhdGlv biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucw0KICogYXJlIG1ldDoNCiAqIDEuIFJlZGlzdHJpYnV0aW9u cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp Z2h0DQogKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQogKiAyLiBSZWRpc3RyaWJ1 dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl IGNvcHlyaWdodA0KICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQ0KICog ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCiAqDQogKiBUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9S UyBgYEFTIElTJycgQU5EIEFOWQ0KICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg SU1QTElFRA0KICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KICogRElT Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09O VFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCiAqIEFOWSBESVJFQ1QsIElORElS RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF UVVFTlRJQUwNCiAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SDQog KiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUg0KICogQ0FVU0VEIEFO RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U UkFDVCwgU1RSSUNUDQogKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ DQogKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GDQogKiBTVUNIIERBTUFH RS4NCiAqDQogKiAkRnJlZUJTRDogcG9ydHMvZW11bGF0b3JzL3J0Yy9maWxl cy9ydGMuYyx2IDEuOCAyMDAzLzA1LzE1IDEzOjA2OjU3IG1iciBFeHAgJA0K ICogJHZtRnJlZUJTRDogdm13YXJlL3ZtbmV0LW9ubHkvZnJlZWJzZC92bW5l dC5jLHYgMS4xNCAyMDAwLzAxLzIzIDIyOjI5OjUwIHZzaWx5YWV2IEV4cCAk DQogKi8NCg0KI2luY2x1ZGUgPHN5cy9wYXJhbS5oPg0KI2luY2x1ZGUgPHN5 cy9zeXN0bS5oPg0KI2luY2x1ZGUgPHN5cy9jb25mLmg+DQojaW5jbHVkZSA8 c3lzL2Vycm5vLmg+DQojaW5jbHVkZSA8c3lzL2tlcm5lbC5oPg0KI2luY2x1 ZGUgPHN5cy9tYWxsb2MuaD4NCiNpbmNsdWRlIDxzeXMvbWJ1Zi5oPg0KI2lu Y2x1ZGUgPHN5cy9zb2NraW8uaD4NCiNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+ DQojaW5jbHVkZSA8c3lzL2ZpbGlvLmg+DQojaW5jbHVkZSA8c3lzL3BvbGwu aD4NCiNpbmNsdWRlIDxzeXMvcHJvYy5oPg0KI2luY2x1ZGUgPHN5cy91aW8u aD4NCiNpbmNsdWRlIDxzeXMvdm5vZGUuaD4NCg0KI2luY2x1ZGUgPG1hY2hp bmUvY2xvY2suaD4NCg0KI2luY2x1ZGUgInJ0Yy5oIg0KDQojaWZkZWYgTU9E VUxFX0RFUEVORA0KTU9EVUxFX0RFUEVORChydGMsIGxpbnV4LCAxLCAxLCAx KTsNCiNlbmRpZg0KDQojZGVmaW5lIENERVZfTUFKT1IgMjAyDQojaWYgZGVm aW5lZChDREVWX01BSk9SXykgJiYgQ0RFVl9NQUpPUiAhPSBDREVWX01BSk9S Xw0KI2Vycm9yICJDREVWX01BSk9SICE9IENERVZfTUFKT1JfIg0KI2VuZGlm DQoNCiNkZWZpbmUJREVWSUNFX05BTUUJInJ0YyINCg0KZW51bSBydGNfbG9n X2xldmVsIHtMZW50ZXI9MCwgTGV4aXQ9MSwgTGluZm8sIEx3YXJuaW5nLCBM ZmFpbH07DQojZGVmaW5lIERFQlVHIDANCiNpZiBERUJVRw0KI2RlZmluZSBE RUIoeCkgeA0KI2RlZmluZSBETG9nKGxldmVsLCBmbXQsIGFyZ3MuLi4pCXBy aW50ZigiJXM6ICIgZm10ICJcbiIsIF9fRlVOQ1RJT05fXyAsICAgIyNhcmdz KQ0KI2Vsc2UgLyogIURFQlVHICovDQojZGVmaW5lIERFQih4KQ0KI2RlZmlu ZQlETG9nKGxldmVsLCBmbXQsIGFyZ3MuLi4pIA0KI2VuZGlmIC8qIERFQlVH ICovDQoNCnN0cnVjdCBydGNfc29mdGMgew0KCWRldl90CQlkZXY7IC8qIEJh Y2sgcmVmZXJlbmNlIHRvIGRldmljZSAqLw0KCXN0cnVjdCB7DQoJIGludAlm cmVxOw0KCSBzdHJ1Y3Qgew0KCQlpbnQJb3BlbmVkOjE7DQoJCWludCAJZW5h YmxlZDoxOw0KCSB9IGZsYWdzOw0KCXN0cnVjdCBjYWxsb3V0IHJ0Y19oYW5k bGU7DQoJc3RydWN0IHRpbWVzcGVjIGxhc3R0aW1lOw0KCXN0cnVjdCBzZWxp bmZvIHNpcDsNCglpbnQgd29rZW47DQoJdm9pZCAqcnRjX2lkZW50Ow0KCX0g dmFyOw0KfTsNCg0Kc3RhdGljIGRfb3Blbl90CQlydGNfb3BlbjsNCnN0YXRp YyBkX2Nsb3NlX3QgCXJ0Y19jbG9zZTsNCnN0YXRpYyBkX2lvY3RsX3QJcnRj X2lvY3RsOw0Kc3RhdGljIGRfcG9sbF90CQlydGNfcG9sbDsNCnN0YXRpYyBk X3JlYWRfdAkJcnRjX3JlYWQ7DQoNCnN0YXRpYyB2b2lkIHJ0Y19jYWxsYmFj ayh2b2lkICp4dHApOw0Kc3RhdGljIGludCBydGNfbW9kZWV2ZW50KG1vZHVs ZV90IG1vZCwgaW50IGNtZCwgdm9pZCAqYXJnKTsNCg0Kc3RhdGljIHN0cnVj dCBjZGV2c3cgcnRjX2NkZXZzdyA9IHsNCiNpZiBfX0ZyZWVCU0RfdmVyc2lv biA+PSA1MDAxMDQNCgkuZF9vcGVuID0JcnRjX29wZW4sDQoJLmRfY2xvc2Ug PQlydGNfY2xvc2UsDQoJLmRfaW9jdGwgPQlydGNfaW9jdGwsDQoJLmRfcG9s bCA9CXJ0Y19wb2xsLA0KCS5kX3JlYWQgPQlydGNfcmVhZCwNCgkuZF9uYW1l ID0JREVWSUNFX05BTUUsDQoJLmRfbWFqID0JQ0RFVl9NQUpPUiwNCiNlbHNl DQoJLyogb3BlbiAqLwlydGNfb3BlbiwNCgkvKiBjbG9zZSAqLwlydGNfY2xv c2UsDQoJLyogcmVhZCAqLwlydGNfcmVhZCwNCgkvKiB3cml0ZSAqLwlub3dy aXRlLA0KCS8qIGlvY3RsICovCXJ0Y19pb2N0bCwNCgkvKiBwb2xsICovCXJ0 Y19wb2xsLA0KCS8qIG1tYXAgKi8Jbm9tbWFwLA0KCS8qIHN0cmF0ZWd5ICov CW5vc3RyYXRlZ3ksDQoJLyogbmFtZSAqLwlERVZJQ0VfTkFNRSwNCgkvKiBt YWogKi8JQ0RFVl9NQUpPUiwNCgkvKiBkdW1wICovCW5vZHVtcCwNCgkvKiBw c2l6ZSAqLwlub3BzaXplLA0KCS8qIGZsYWdzICovCTAsDQojaWYgX19GcmVl QlNEX3ZlcnNpb24gPD0gNTAwMDE4DQoJLyogYm1haiAqLwktMSwNCiNlbmRp Zg0KI2lmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAxOCB8fCBfX0ZyZWVC U0RfdmVyc2lvbiA+PSA0MzAwMDANCgkvKiBrcWZpbHRlciAqLwlub2txZmls dGVyLA0KI2VuZGlmDQojZW5kaWYgDQp9Ow0KDQovKiANCiAqIE5vdyBkZWNs YXJlIHRoZSBtb2R1bGUgdG8gdGhlIHN5c3RlbS4gDQogKiBJTVBPUlRBTlQ6 IE11c3QgYmUgYmVmb3JlIG5ldGdyYXBoIG5vZGUgZGVjbGFyYXRpb24uDQog Ki8NCkRFVl9NT0RVTEUocnRjLCBydGNfbW9kZWV2ZW50LCAwKTsNCg0KDQov KiAtPS09LT0tPS09LT0tPS09LT0gYXR0YWNoL2RldGFjaCBkZXZpY2Ugc3R1 ZmYgLT0tPS09LT0tPS09LT0tPS09ICovDQoNCnN0YXRpYyBzdHJ1Y3QgcnRj X3NvZnRjICoNCnJ0Y19hdHRhY2goZGV2X3QgZGV2KQ0Kew0KCXN0cnVjdCBy dGNfc29mdGMgKnNjOw0KCWludCB1bml0Ow0KDQojaWYgX19GcmVlQlNEX3Zl cnNpb24gPj0gNTAwMDE0DQoJdW5pdCA9IGRldjJ1bml0KGRldik7DQojZWxz ZQ0KCXVuaXQgPSBsbWlub3IoZGV2KTsNCiNlbmRpZg0KCURMb2coTGVudGVy LCAiJWQgJXAiLCB1bml0LCBkZXYpOw0KCWlmIChkZXYtPnNpX2RydjEpIHsN CgkJRExvZyhMZXhpdCwgIm9sZCAlcCwgJXAiLCBkZXYsIGRldi0+c2lfZHJ2 MSk7DQoJCXJldHVybiBkZXYtPnNpX2RydjE7DQoJfQ0KDQoJTUFMTE9DKHNj LCBzdHJ1Y3QgcnRjX3NvZnRjKiwgc2l6ZW9mKCpzYyksIE1fREVWQlVGLCBN X1dBSVRPSyk7DQoJaWYgKHNjPT1OVUxMKQ0KCQlyZXR1cm4gTlVMTDsNCg0K CWJ6ZXJvKHNjLCBzaXplb2YoKnNjKSk7DQoJZGV2LT5zaV9kcnYxID0gc2M7 IC8qIExpbmsgdG9nZXRoZXIgKi8NCglzYy0+ZGV2ID0gZGV2Ow0KCXNjLT52 YXIuZnJlcSA9IDE7DQoNCiNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAw MDANCgljYWxsb3V0X2luaXQoJnNjLT52YXIucnRjX2hhbmRsZSwgMSk7DQoj ZWxzZQ0KCWNhbGxvdXRfaW5pdCgmc2MtPnZhci5ydGNfaGFuZGxlKTsNCiNl bmRpZg0KCQ0KCURMb2coTGV4aXQsICJuZXcgJXAsJXAiLCBkZXYsIHNjKTsN CglyZXR1cm4gc2M7DQp9DQoNCnN0YXRpYyBpbnQNCnJ0Y19kZXRhY2goZGV2 X3QgZGV2LCBzdHJ1Y3QgcnRjX3NvZnRjICpzYykgDQp7DQoJaW50IGVycm9y PTA7DQoNCglpZiAoc2MgPT0gTlVMTCkgew0KCQlyZXR1cm4gZXJyb3I7DQoJ fQ0KDQoJY2FsbG91dF9zdG9wKCZzYy0+dmFyLnJ0Y19oYW5kbGUpOw0KCUZS RUUoc2MsIE1fREVWQlVGKTsNCglkZXYtPnNpX2RydjEgPSBOVUxMOw0KCXJl dHVybiBlcnJvcjsNCn0NCg0KLyogLT0tPS09LT0tPS09LT0tPS09IGNoYXJh Y3RlciBkZXZpY2Ugc3R1ZmYgLT0tPS09LT0tPS09LT0tPS09ICovDQoNCmlu dCANCiNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMjMNCnJ0Y19vcGVu KGRldl90IGRldiwgaW50IG9mbGFnLCBpbnQgb3R5cCwgc3RydWN0IHRocmVh ZCAqcCkNCiNlbHNlDQpydGNfb3BlbihkZXZfdCBkZXYsIGludCBvZmxhZywg aW50IG90eXAsIHN0cnVjdCBwcm9jICpwKQ0KI2VuZGlmDQp7DQoJc3RydWN0 IHJ0Y19zb2Z0YyAqc2M7DQoJDQoJc2MgPSBydGNfYXR0YWNoKGRldik7DQoJ DQoJaWYgKHNjPT1OVUxMKQ0KCQlyZXR1cm4gKEVBR0FJTik7DQoJDQoJaWYg KHNjLT52YXIuZmxhZ3Mub3BlbmVkKQ0KCQlyZXR1cm4gKEVCVVNZKTsNCgkN CglzYy0+dmFyLmZsYWdzLm9wZW5lZCA9IDE7DQoJDQoJcmV0dXJuIDA7DQp9 DQoNCmludCANCiNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMjMNCnJ0 Y19jbG9zZShkZXZfdCBkZXYsIGludCBmZmxhZywgaW50IG90eXAsIHN0cnVj dCB0aHJlYWQgKnApDQojZWxzZQ0KcnRjX2Nsb3NlKGRldl90IGRldiwgaW50 IGZmbGFnLCBpbnQgb3R5cCwgc3RydWN0IHByb2MgKnApDQojZW5kaWYNCnsN CglzdHJ1Y3QgcnRjX3NvZnRjICpzYyA9IChzdHJ1Y3QgcnRjX3NvZnRjICop IGRldi0+c2lfZHJ2MTsNCg0KCXJ0Y19kZXRhY2goZGV2LCBzYyk7DQoJc2Mt PnZhci5mbGFncy5vcGVuZWQgPSAwOw0KCXJldHVybiAwOw0KfQ0KDQppbnQg DQojaWYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMDIzDQpydGNfaW9jdGwo ZGV2X3QgZGV2LCB1X2xvbmcgY21kLCBjYWRkcl90IGFyZywgaW50IG1vZGUs IHN0cnVjdCB0aHJlYWQgKnApDQojZWxzZQ0KcnRjX2lvY3RsKGRldl90IGRl diwgdV9sb25nIGNtZCwgY2FkZHJfdCBhcmcsIGludCBtb2RlLCBzdHJ1Y3Qg cHJvYyAqcCkNCiNlbmRpZg0Kew0KCXN0cnVjdCBydGNfc29mdGMgKnNjID0g KHN0cnVjdCBydGNfc29mdGMgKikgZGV2LT5zaV9kcnYxOw0KCWludCBlcnJv cj0wLCBmcmVxLCBzbGVlcDsNCgkNCglETG9nKExlbnRlciwgImNtZCAweCUw NGx4IiwgY21kKTsNCglzd2l0Y2ggKGNtZCkgew0KCWNhc2UgUlRDSU9fSVJR UF9TRVQ6DQoJCWZyZXEgPSAqKGludCAqKWFyZzsNCgkJaWYgKGZyZXEgPCAy KSB7DQoJCQllcnJvciA9IEVJTlZBTDsNCgkJCWJyZWFrOw0KCQl9DQoJCWlm IChmcmVxID4gMTAyNCkgew0KCQkJZXJyb3IgPSBFSU5WQUw7DQoJCQlicmVh azsNCgkJfQ0KCQlzYy0+dmFyLmZyZXEgPSBmcmVxOw0KCQlpZiAoc2MtPnZh ci5mcmVxID4gMTAwMCkgew0KCQkJLyogY2FsbG91dF9yZXNldCBpcyBpbiBt c2VjLCBzbyAxMDAwIGlzIHRoZSBtYXggKi8NCgkJCXNjLT52YXIuZnJlcSA9 IDEwMDA7DQoJCX0NCgkJaWYgKHNjLT52YXIuZnJlcSA+IGh6KSB7DQoJCQlz Yy0+dmFyLmZyZXEgPSBoejsNCgkJCXByaW50ZigicnRjOiAlZCA+IGtlcm4u aHo6IFRpbWluZyB3aWxsIGJlIGluYWNjdXJhdGUsIHBsZWFzZSBpbmNyZWFz ZSBoei5cbiIsIHNjLT52YXIuZnJlcSk7DQoJCX0NCgkJc2xlZXAgPSAxMDAw IC8gc2MtPnZhci5mcmVxOw0KI2lmIDANCgkJcHJpbnRmKCJTZXQgUlRDIGZy ZXEgJWRcbiIsIHNjLT52YXIuZnJlcSk7DQojZW5kaWYNCgkJRExvZyhMaW5m bywgIlNldCBSVEMgZnJlcSAlZCIsIHNjLT52YXIuZnJlcSk7DQoJCWNhbGxv dXRfc3RvcCgmc2MtPnZhci5ydGNfaGFuZGxlKTsNCgkJbmFub3VwdGltZSgm c2MtPnZhci5sYXN0dGltZSk7DQoJCWNhbGxvdXRfcmVzZXQoJnNjLT52YXIu cnRjX2hhbmRsZSwgc2xlZXAsICZydGNfY2FsbGJhY2ssICh2b2lkICopc2Mp Ow0KCQlicmVhazsNCgljYXNlIFJUQ0lPX1BJRV9PTjoNCgkJc2MtPnZhci5m bGFncy5lbmFibGVkID0gMTsNCgkJRExvZyhMaW5mbywgIkVuYWJsZSBpbnRl cnJ1cHRzIik7DQoJCWJyZWFrOw0KCWRlZmF1bHQ6DQoJCURMb2coTGZhaWws ICJVbmtub3duIElPQ1RMIDB4JTA0bHgiLCBjbWQpOw0KCQllcnJvciA9IEVJ TlZBTDsNCgkJYnJlYWs7DQoJfQ0KCURMb2coTGVudGVyLCAicmVzdWx0ICVk IiwgZXJyb3IpOw0KCXJldHVybiAoZXJyb3IpOw0KfQ0KDQppbnQgDQojaWYg X19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMDIzDQpydGNfcG9sbChkZXZfdCBk ZXYsIGludCBldmVudHMsIHN0cnVjdCB0aHJlYWQgKnApDQojZWxzZQ0KcnRj X3BvbGwoZGV2X3QgZGV2LCBpbnQgZXZlbnRzLCBzdHJ1Y3QgcHJvYyAqcCkN CiNlbmRpZg0Kew0KCXN0cnVjdCBydGNfc29mdGMgKnNjID0gKHN0cnVjdCBy dGNfc29mdGMgKikgZGV2LT5zaV9kcnYxOw0KICAgCWludCByZXZlbnRzID0g MDsNCgkNCglpZiAoIXNjLT52YXIuZmxhZ3MuZW5hYmxlZCkgDQoJCXJldHVy biAwOw0KDQoJaWYgKGV2ZW50cykgew0KCQlETG9nKExpbmZvLCAiRGVsYXkg Zm9yICVkIHVzZWMiLCBkZWxheSk7DQoJCWlmIChzYy0+dmFyLndva2VuKSB7 DQoJCQlzYy0+dmFyLndva2VuID0gMDsNCgkJCXJldmVudHMgPSBldmVudHM7 DQoJCX0gZWxzZSB7DQoJCQlzZWxyZWNvcmQocCwgJnNjLT52YXIuc2lwKTsN CgkJfQ0KI2lmIDANCgkJdHNsZWVwKCZzYy0+dmFyLnJ0Y19pZGVudCwgcC0+ dGRfcHJpb3JpdHksICJydGMgcGwiLCBoeiAqIDEwKTsNCgkJcmV2ZW50cyA9 IGV2ZW50czsNCiNlbmRpZg0KCX0NCglyZXR1cm4gcmV2ZW50czsNCn0NCg0K aW50IA0KcnRjX3JlYWQoZGV2X3QgZGV2LCBzdHJ1Y3QgdWlvICp1aW8sIGlu dCBmbGFncyBfX3VudXNlZCkNCnsNCglzdHJ1Y3QgcnRjX3NvZnRjICpzYyA9 IChzdHJ1Y3QgcnRjX3NvZnRjICopIGRldi0+c2lfZHJ2MTsNCglpbnQgZXJy b3I7DQoJDQoJaWYgKCFzYy0+dmFyLmZsYWdzLmVuYWJsZWQpIA0KCQlyZXR1 cm4gMDsNCg0KCWlmIChmbGFncyAmIElPX05ERUxBWSkNCgkJcmV0dXJuIEVB R0FJTjsNCg0KCURMb2coTGluZm8sICJEZWxheSBmb3IgJWQgdXNlYyIsIGRl bGF5KTsNCgllcnJvciA9IHRzbGVlcCgmc2MtPnZhci5ydGNfaWRlbnQsIFBD QVRDSCwgInJ0YyByZCIsIGh6ICogMTApOw0KCXNjLT52YXIud29rZW4gPSAw Ow0KCXJldHVybiAwOw0KfQ0KDQovKiAtPS09LT0tPS09LT0tPS09LT0gbW9k dWxlIGxvYWQvdW5sb2FkIHN0dWZmIC09LT0tPS09LT0tPS09LT0tPSAqLw0K c3RhdGljIGRldl90IHJ0Y19kZXYgPSBOVUxMOw0KDQpzdGF0aWMgaW50DQpp bml0X21vZHVsZSh2b2lkKQ0Kew0KCWludCBlcnJvciA9IDA7DQoNCiNpZiBf X0ZyZWVCU0RfdmVyc2lvbiA8IDUwMDEwNA0KICAgCWVycm9yID0gY2RldnN3 X2FkZCgmcnRjX2NkZXZzdyk7DQoJaWYgKGVycm9yKSANCgkJcmV0dXJuIGVy cm9yOw0KI2VuZGlmDQoNCglydGNfZGV2ID0gbWFrZV9kZXYoJnJ0Y19jZGV2 c3csIDAsIFVJRF9ST09ULCBHSURfV0hFRUwsIDA2NDQsIERFVklDRV9OQU1F KTsNCglpZiAocnRjX2Rldj09TlVMTCkNCgkJZXJyb3IgPSBFTk9NRU07DQoN CglyZXR1cm4gZXJyb3I7DQp9DQoNCg0KDQpzdGF0aWMgaW50DQpjbGVhbnVw X21vZHVsZSh2b2lkKQ0Kew0KCWludCBlcnJvciA9IDA7DQoNCglkZXN0cm95 X2RldihydGNfZGV2KTsNCiNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDUwMDEw NA0KCWVycm9yID0gY2RldnN3X3JlbW92ZSgmcnRjX2NkZXZzdyk7DQojZW5k aWYNCglETG9nKExpbmZvLCAicmV0dXJuICVkIiwgZXJyb3IpOw0KCXJldHVy biBlcnJvcjsNCn0NCg0Kc3RhdGljIGludA0KcnRjX21vZGVldmVudChtb2R1 bGVfdCBtb2QsIGludCBjbWQsIHZvaWQgKmFyZykNCnsNCiAgICBpbnQgIGVy cm9yID0gMDsNCg0KICAgIHN3aXRjaCAoY21kKSB7DQogICAgY2FzZSBNT0Rf TE9BRDoNCgllcnJvciA9IGluaXRfbW9kdWxlKCk7DQoJYnJlYWs7CQ0KDQog ICAgY2FzZSBNT0RfVU5MT0FEOg0KICAgICAgICAvKiBmYWxsIHRocm91Z2gg Ki8NCiAgICBjYXNlIE1PRF9TSFVURE9XTjoNCiAJZXJyb3IgPSBjbGVhbnVw X21vZHVsZSgpOw0KCWJyZWFrOw0KDQogICAgZGVmYXVsdDoJLyogd2Ugb25s eSB1bmRlcnN0YW5kIGxvYWQvdW5sb2FkICovDQoJZXJyb3IgPSBFSU5WQUw7 DQoJYnJlYWs7DQogICAgfQ0KDQogICAgcmV0dXJuIChlcnJvcik7DQp9DQoN CnZvaWQNCnJ0Y19jYWxsYmFjayh2b2lkICp4dHApDQp7DQoJaW50IHNsZWVw Ow0KCXN0cnVjdCBydGNfc29mdGMgKnNjID0gKHN0cnVjdCBydGNfc29mdGMg Kil4dHA7DQoJc3RydWN0IHRpbWVzcGVjIGN1cnRpbWUsIG5leHR0aW1lLCBp bmNyZW1lbnQ7DQoNCglpZiAoY2FsbG91dF9wZW5kaW5nKCZzYy0+dmFyLnJ0 Y19oYW5kbGUpIHx8ICFjYWxsb3V0X2FjdGl2ZSgmc2MtPnZhci5ydGNfaGFu ZGxlKSkNCgkJcmV0dXJuOw0KCS8qIFdha2V1cCBzbGVlcGVycyAqLw0KCXNj LT52YXIud29rZW4gPSAxOw0KCXNlbHdha2V1cCgmc2MtPnZhci5zaXApOw0K CXdha2V1cCgmc2MtPnZhci5ydGNfaWRlbnQpOw0KDQoJLyogU2V0dXAgZm9y IG91ciBuZXh0IG5hcC4gKi8NCgluYW5vdXB0aW1lKCZjdXJ0aW1lKTsNCnJl c3RhcnQ6DQoJaW5jcmVtZW50LnR2X3NlYyA9IDA7DQoJaW5jcmVtZW50LnR2 X25zZWMgPSAxMDAwMDAwMDAwIC8gc2MtPnZhci5mcmVxOw0KCXRpbWVzcGVj YWRkKCZzYy0+dmFyLmxhc3R0aW1lLCAmaW5jcmVtZW50KTsNCgluZXh0dGlt ZS50dl9zZWMgPSBzYy0+dmFyLmxhc3R0aW1lLnR2X3NlYzsNCgluZXh0dGlt ZS50dl9uc2VjID0gc2MtPnZhci5sYXN0dGltZS50dl9uc2VjOw0KCXRpbWVz cGVjYWRkKCZuZXh0dGltZSwgJmluY3JlbWVudCk7DQoJaWYgKHRpbWVzcGVj Y21wKCZuZXh0dGltZSwgJmN1cnRpbWUsIDwpKSB7DQoJCS8qIENhdGNoIHVw IGlmIHdlIGxhZyBjdXJ0aW1lICovDQoJCXNjLT52YXIubGFzdHRpbWUudHZf c2VjID0gY3VydGltZS50dl9zZWM7DQoJCXNjLT52YXIubGFzdHRpbWUudHZf bnNlYyA9IGN1cnRpbWUudHZfbnNlYzsNCgkJdGltZXNwZWNzdWIoJnNjLT52 YXIubGFzdHRpbWUsICZpbmNyZW1lbnQpOw0KCQl0aW1lc3BlY3N1YigmbmV4 dHRpbWUsICZjdXJ0aW1lKTsNCiNpZiAwDQoJCXByaW50ZigibGFnZ2luZyBj dXJ0aW1lIGJ5ICVkLiVsZFxuIiwgbmV4dHRpbWUudHZfc2VjLCBuZXh0dGlt ZS50dl9uc2VjKTsNCiNlbmRpZg0KCQlnb3RvIHJlc3RhcnQ7DQoJfSBlbHNl IHsNCgkJdGltZXNwZWNzdWIoJm5leHR0aW1lLCAmY3VydGltZSk7DQoJCXNs ZWVwID0gbmV4dHRpbWUudHZfbnNlYyAvIDEwMDAwMDA7DQoJfQ0KCWNhbGxv dXRfcmVzZXQoJnNjLT52YXIucnRjX2hhbmRsZSwgc2xlZXAsICZydGNfY2Fs bGJhY2ssIHh0cCk7DQp9DQo= --0-1432871052-1074979007=:29927--