From mboxrd@z Thu Jan 1 00:00:00 1970 From: tupeng212 Subject: Re: [PATCH, RFC v2] x86/HVM: assorted RTC emulation adjustments (was Re: Big Bug:Time in VM goes slower...) Date: Wed, 15 Aug 2012 22:12:15 +0800 Message-ID: <2012081522121039050717@gmail.com> References: <502A3BBC0200007800094B68@nat28.tlf.novell.com>, <2012081522045495397713@gmail.com> Reply-To: tupeng212 Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============5636090078893645621==" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Jan Beulich , Yang Z Zhang , Keir Fraser , Tim Deegan Cc: xen-devel List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. --===============5636090078893645621== Content-Type: multipart/alternative; boundary="----=_001_NextPart564768006800_=----" This is a multi-part message in MIME format. ------=_001_NextPart564768006800_=---- Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 SGksIEphbjoNCkkgYW0gc29ycnkgSSByZWFsbHkgZG9uJ3QgaGF2ZSBtdWNoIHRpbWUgdG8gdHJ5 IGEgdGVzdCBvZiB5b3VyIHBhdGNoLCBhbmQgaXQgaXMgbm90IGNvbnZlbmllbnQNCmZvciBtZSB0 byBoYXZlIGEgdHJ5LiBGb3IgdGhlIHZlcnNpb24gSSBoYXZlIGJlZW4gdXNpbmcgaXMgeGVuNC4w LngsIGFuZCB5b3VyIHBhdGNoIGlzIGJhc2VkIG9uIA0KdGhlIGxhdGVzdCB2ZXJzaW9uIHhlbjQu Mi54LihJIGhhdmUgbmV2ZXIgY29tcGxpZWQgdGhlIHVuc3RhYmxlIG9uZSksIHNvIEkgbWVyZ2Vk IHlvdXIgcGF0Y2ggdG8gbXkgDQp4ZW40LjAueCwgc3RpbGwgY291bGRuJ3QgZmluZCB0aGUgdHdv IGZ1bmN0aW9ucyBiZWxvdzoNCiBzdGF0aWMgdm9pZCBydGNfdXBkYXRlX3RpbWVyMih2b2lkICpv cGFxdWUpIA0KIHN0YXRpYyB2b2lkIHJ0Y19hbGFybV9jYih2b2lkICpvcGFxdWUpIA0Kc28gSSBk aWRuJ3QgbWVyZ2UgdGhlIHR3byBmdW5jdGlvbnMgd2hpY2ggY29udGFpbnMgYSBydGNfdG9nZ2xl X2lycSgpIC4NCg0KVGhlIHJlc3VsdHMgZm9yIG1lIHdlcmUgdGhlc2U6DQoxIEluIG15IHJlYWwg YXBwbGljYXRpb24gZW52aXJvbm1lbnQsIGl0IHdvcmtlZCB2ZXJ5IHdlbGwgaW4gdGhlIGZvcm1l ciA1bWlucywgbXVjaCBiZXR0ZXIgdGhhbiBiZWZvcmUsDQogYnV0IGF0IGxhc3QgaXQgbGFnZ2Vk IGFnYWluLiBJIGRvbid0IGtub3cgd2hldGhlciBpdCBiZWxvbmdzIHRvIHRoZSB0d28gbWlzc2Vk IGZ1bmN0aW9ucy4gSSBsYWNrIHRoZSANCiBhYmlsaXR5IHRvIGZpZ3VyZSB0aGVtIG91dC4NCg0K MiBXaGVuIEkgdGVzdGVkIG15IHRlc3QgcHJvZ3JhbSB3aGljaCBJIHByb3ZpZGVkIGRheXMgYmVm b3JlLCBpdCB3b3JrZWQgdmVyeSB3ZWxsLCBtYXliZSB0aGUgcHJvZ3JhbSBkb2Vzbid0IA0KZW11 bGF0ZSB0aGUgcmVhbCBlbnZpcm9ubWVudCBkdWUgdG8gdGhlIHNhbWUgc2V0dGluZyByYXRlLCBz byBJIG1vZGlmaWVkIHRoaXMgcHJvZ3JhbSBhcyB3aGljaCBpbiB0aGUgYXR0YWNobWVudC4NCmlm IHlvdSBhcmUgbW9yZSBjb252ZW5pZW50LCB5b3UgY2FuIGhlbHAgbWUgdG8gaGF2ZSBhIGxvb2sg b2YgaXQuDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQ0KI2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8d2luZG93 cy5oPg0KdHlwZWRlZiBpbnQgKF9fc3RkY2FsbCAqTlRTRVRUSU1FUikoSU4gVUxPTkcgUmVxdWVz dGVkUmVzb2x1dGlvbiwgSU4gQk9PTEVBTiBTZXQsIE9VVCBQVUxPTkcgQWN0dWFsUmVzb2x1dGlv biApOw0KdHlwZWRlZiBpbnQgKF9fc3RkY2FsbCAqTlRRVUVSWVRJTUVSKShPVVQgUFVMT05HICAg TWluaW11bVJlc29sdXRpb24sIE9VVCBQVUxPTkcgTWF4aW11bVJlc29sdXRpb24sIE9VVCBQVUxP TkcgQ3VycmVudFJlc29sdXRpb24gKTsNCg0KaW50IG1haW4oKQ0Kew0KRFdPUkQgbWluX3JlcyA9 IDAsIG1heF9yZXMgPSAwLCBjdXJfcmVzID0gMCwgcmV0ID0gMDsNCkhNT0RVTEUgIGhkbGwgPSBO VUxMOw0KaGRsbCA9IEdldE1vZHVsZUhhbmRsZSgibnRkbGwuZGxsIik7DQpOVFNFVFRJTUVSIEFk ZHJOdFNldFRpbWVyID0gMDsNCk5UUVVFUllUSU1FUiBBZGRyTnRRdWV5VGltZXIgPSAwOw0KQWRk ck50U2V0VGltZXIgPSAoTlRTRVRUSU1FUikgR2V0UHJvY0FkZHJlc3MoaGRsbCwgIk50U2V0VGlt ZXJSZXNvbHV0aW9uIik7DQpBZGRyTnRRdWV5VGltZXIgPSAoTlRRVUVSWVRJTUVSKUdldFByb2NB ZGRyZXNzKGhkbGwsICJOdFF1ZXJ5VGltZXJSZXNvbHV0aW9uIik7DQoNCndoaWxlICgxKQ0Kew0K cmV0ID0gQWRkck50UXVleVRpbWVyKCZtaW5fcmVzLCAmbWF4X3JlcywgJmN1cl9yZXMpOw0KcHJp bnRmKCJtaW5fcmVzID0gJWQsIG1heF9yZXMgPSAlZCwgY3VyX3JlcyA9ICVkXG4iLG1pbl9yZXMs IG1heF9yZXMsIGN1cl9yZXMpOw0KU2xlZXAoNSk7DQpyZXQgPSBBZGRyTnRTZXRUaW1lcigxMDAw MCwgMSwgJmN1cl9yZXMpOw0KU2xlZXAoNSk7DQpyZXQgPSBBZGRyTnRTZXRUaW1lcigxMDAwMCwg MCwgJmN1cl9yZXMpOw0KU2xlZXAoNSk7DQpyZXQgPSBBZGRyTnRTZXRUaW1lcig1MDAwMCwgMSwg JmN1cl9yZXMpOw0KU2xlZXAoNSk7DQpyZXQgPSBBZGRyTnRTZXRUaW1lcig1MDAwMCwgMCwgJmN1 cl9yZXMpOw0KU2xlZXAoNSk7DQpyZXQgPSBBZGRyTnRTZXRUaW1lcigxMDAwMDAsIDEsICZjdXJf cmVzKTsNClNsZWVwKDUpOw0KcmV0ID0gQWRkck50U2V0VGltZXIoMTAwMDAwLCAwLCAmY3VyX3Jl cyk7DQpTbGVlcCg1KTsNCn0NCg0KcmV0dXJuIDA7DQp9DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KQW5kIEkgaGF2 ZSBhIG9waW5pb24sIGJlY2F1c2Ugb3VyIHByb2R1Y3QgaXMgYmFzZWQgb24gVmVyc2lvbiBYZW40 LjAueCwgaWYgeW91IGhhdmUgZW5vdWdoIHRpbWUsIGNhbiB5b3Ugd3JpdGUgDQphbm90aGVyIHBh dGNoIGJhc2VkIGh0dHA6Ly94ZW5iaXRzLnhlbi5vcmcvaGcveGVuLTQuMC10ZXN0aW5nLmhnLyBm b3IgbWUsIHRoYW5rIHlvdSB2ZXJ5IG11Y2ghDQoNCjMgSSBhbHNvIGhhdmUgYSB0aG91Z2h0IHRo YXQgY2FuIHdlIGhhdmUgc29tZSBkZXRlY3RpbmcgbWV0aG9kcyB0byBmaW5kIHRoZSBsYWdnaW5n IHRpbWUgZWFybGllciB0byBhZGp1c3QgdGltZQ0KYmFjayB0byBub3JtYWwgdmFsdWUgaW4gdGhl IGNvZGU/DQoNCmJlc3QgcmVnYXJkcywNCg0KDQoNCg0KdHVwZW5nMjEyDQoNClNlY29uZCBkcmFm dCBvZiBhIHBhdGNoIHBvc3RlZDsgbm8gdGVzdCByZXN1bHRzIHNvIGZhciBmb3IgZmlyc3QgZHJh ZnQuDQpKYW4NCg0KRnJvbTogSmFuIEJldWxpY2gNCkRhdGU6IDIwMTItMDgtMTQgMTc6NTENClRv OiBZYW5nIFogWmhhbmc7IEtlaXIgRnJhc2VyOyBUaW0gRGVlZ2FuDQpDQzogdHVwZW5nMjEyOyB4 ZW4tZGV2ZWwNClN1YmplY3Q6IFtYZW4tZGV2ZWxdIFtQQVRDSCwgUkZDIHYyXSB4ODYvSFZNOiBh c3NvcnRlZCBSVEMgZW11bGF0aW9uIGFkanVzdG1lbnRzICh3YXMgUmU6IEJpZyBCdWc6VGltZSBp biBWTSBnb2VzIHNsb3dlci4uLikNCkJlbG93L2F0dGFjaGVkIGEgc2Vjb25kIGRyYWZ0IG9mIGEg cGF0Y2ggdG8gZml4IG5vdCBvbmx5IHRoaXMNCmlzc3VlLCBidXQgYSBmZXcgbW9yZSB3aXRoIHRo ZSBSVEMgZW11bGF0aW9uLg0KDQpLZWlyLCBUaW0sIFlhbmcsIG90aGVycyAtIHRoZSBjaGFuZ2Ug dG8geGVuL2FyY2gveDg2L2h2bS92cHQuYyByZWFsbHkNCmxvb2tzIG1vcmUgbGlrZSBhIGhhY2sg dGhhbiBhIHNvbHV0aW9uLCBidXQgSSBkb24ndCBzZWUgYW5vdGhlcg0Kd2F5IHdpdGhvdXQgbXVj aCBtb3JlIGludHJ1c2l2ZSBjaGFuZ2VzLiBUaGUgcG9pbnQgaXMgdGhhdCB3ZQ0Kd2FudCB0aGUg UlRDIGNvZGUgdG8gZGVjaWRlIHdoZXRoZXIgdG8gZ2VuZXJhdGUgYW4gaW50ZXJydXB0DQooc28g dGhhdCBSVENfUEYgY2FuIGJlY29tZSBzZXQgY29ycmVjdGx5IGV2ZW4gd2l0aG91dCBSVENfUElF DQpnZXR0aW5nIGVuYWJsZWQgYnkgdGhlIGd1ZXN0KS4NCg0KQWRkaXRpb25hbGx5IEkgd29uZGVy IHdoZXRoZXIgYWxhcm1fdGltZXJfdXBkYXRlKCkgc2hvdWxkbid0DQpiYWlsIG9uIG5vbi1jb25m b3JtaW5nIFJUQ18qX0FMQVJNIHZhbHVlcyAoYXMgdGhvc2Ugd291bGQNCm5ldmVyIG1hdGNoIHRo ZSB2YWx1ZXMgdGhleSBnZXQgY29tcGFyZWQgYWdhaW5zdCwgd2hlcmVhcw0Kd2l0aCB0aGUgY3Vy cmVudCB3YXkgb2YgaGFuZGxpbmcgdGhpcyB0aGV5IHdvdWxkIGFwcGVhciB0bw0KbWF0Y2ggLSBp LmUuIHNldCBSVENfQUYgYW5kIHBvc3NpYmx5IGdlbmVyYXRlIGFuIGludGVycnVwdCAtDQpzb21l IG90aGVyIHBvaW50IGluIHRpbWUpLiBJIHJlYWxpemUgdGhlIGJlaGF2aW9yIGhlcmUgbWF5IG5v dA0KYmUgcHJlY2lzZWx5IHNwZWNpZmllZCwgYnV0IHRoZSBzcGVjaWZpY2F0aW9uIHNheWluZyAi dGhlIGN1cnJlbnQNCnRpbWUgaGFzIG1hdGNoZWQgdGhlIGFsYXJtIHRpbWUiIG1lYW5zIHRvIG1l IGEgdmFsdWUgYnkgdmFsdWUNCmNvbXBhcmlzb24sIHdoaWNoIGltcGxpZXMgdGhhdCBub24tY29u Zm9ybWluZyB2YWx1ZXMgd291bGQNCm5ldmVyIG1hdGNoIChzaW5jZSBub24tY29uZm9ybWluZyBj dXJyZW50IHRpbWUgdmFsdWVzIGNvdWxkDQpnZXQgcmVwbGFjZWQgYXQgYW55IHRpbWUgYnkgdGhl IGhhcmR3YXJlIGR1ZSB0byBvdmVyZmxvdw0KZGV0ZWN0aW9uKS4NCg0KSmFuDQoNCi0gZG9uJ3Qg Y2FsbCBydGNfdGltZXJfdXBkYXRlKCkgb24gUkVHX0Egd3JpdGVzIHdoZW4gdGhlIHZhbHVlIGRp ZG4ndA0KICBjaGFuZ2UgKGRvaW5nIHRoZSBjYWxsIGFsd2F5cyB3YXMgcmVwb3J0ZWQgdG8gY2F1 c2Ugd2FsbCBjbG9jayB0aW1lDQogIGxhZ2dpbmcgd2l0aCB0aGUgSlZNIHJ1bm5pbmcgb24gV2lu ZG93cykNCi0gZG9uJ3QgY2FsbCBydGNfdGltZXJfdXBkYXRlKCkgb24gUkVHX0Igd3JpdGVzIGF0 IGFsbA0KLSBvbmx5IGNhbGwgYWxhcm1fdGltZXJfdXBkYXRlKCkgb24gUkVHX0Igd3JpdGVzIHdo ZW4gcmVsZXZhbnQgYml0cw0KICBjaGFuZ2UNCi0gb25seSBjYWxsIGNoZWNrX3VwZGF0ZV90aW1l cigpIG9uIFJFR19CIHdyaXRlcyB3aGVuIFNFVCBjaGFuZ2VzDQotIGluc3RlYWQgcHJvcGVybHkg aGFuZGxlIEFGIGFuZCBQRiB3aGVuIHRoZSBndWVzdCBpcyBub3QgYWxzbyBzZXR0aW5nDQogIEFJ RS9QSUUgcmVzcGVjdGl2ZWx5IChmb3IgVUYgdGhpcyB3YXMgYWxyZWFkeSB0aGUgY2FzZSwgb25s eSBhDQogIGNvbW1lbnQgd2FzIHNsaWdodGx5IGluYWNjdXJhdGUpDQotIHJhaXNlIHRoZSBSVEMg SVJRIG5vdCBvbmx5IHdoZW4gVUlFIGdldHMgc2V0IHdoaWxlIFVGIHdhcyBhbHJlYWR5DQogIHNl dCwgYnV0IGdlbmVyYWxpemUgdGhpcyB0byBjb3ZlciBBSUUgYW5kIFBJRSBhcyB3ZWxsDQotIHBy b3Blcmx5IG1hc2sgb2ZmIGJpdCA3IHdoZW4gcmV0cmlldmluZyB0aGUgaG91ciB2YWx1ZXMgaW4N CiAgYWxhcm1fdGltZXJfdXBkYXRlKCksIGFuZCBwcm9wZXJseSB1c2UgUlRDX0hPVVJTX0FMQVJN J3MgYml0IDcgd2hlbg0KICBjb252ZXJ0aW5nIGZyb20gMTItIHRvIDI0LWhvdXIgdmFsdWUNCi0g YWxzbyBoYW5kbGUgdGhlIHR3byBvdGhlciBwb3NzaWJsZSBjbG9jayBiYXNlcw0KLSB1c2UgUlRD XyogbmFtZXMgaW4gYSBjb3VwbGUgb2YgcGxhY2VzIHdoZXJlIGxpdGVyYWwgbnVtYmVycyB3ZXJl IHVzZWQNCiAgc28gZmFyDQoNCi0tLSBhL3hlbi9hcmNoL3g4Ni9odm0vcnRjLmMNCisrKyBiL3hl bi9hcmNoL3g4Ni9odm0vcnRjLmMNCkBAIC01MCwxMSArNTAsMjQgQEAgc3RhdGljIHZvaWQgcnRj X3NldF90aW1lKFJUQ1N0YXRlICpzKTsNCiBzdGF0aWMgaW5saW5lIGludCBmcm9tX2JjZChSVENT dGF0ZSAqcywgaW50IGEpOw0KIHN0YXRpYyBpbmxpbmUgaW50IGNvbnZlcnRfaG91cihSVENTdGF0 ZSAqcywgaW50IGhvdXIpOw0KDQotc3RhdGljIHZvaWQgcnRjX3BlcmlvZGljX2NiKHN0cnVjdCB2 Y3B1ICp2LCB2b2lkICpvcGFxdWUpDQorc3RhdGljIHZvaWQgcnRjX3RvZ2dsZV9pcnEoUlRDU3Rh dGUgKnMpDQorew0KKyAgICBzdHJ1Y3QgZG9tYWluICpkID0gdnJ0Y19kb21haW4ocyk7DQorDQor ICAgIEFTU0VSVChzcGluX2lzX2xvY2tlZCgmcy0+bG9jaykpOw0KKyAgICBzLT5ody5jbW9zX2Rh dGFbUlRDX1JFR19DXSB8PSBSVENfSVJRRjsNCisgICAgaHZtX2lzYV9pcnFfZGVhc3NlcnQoZCwg UlRDX0lSUSk7DQorICAgIGh2bV9pc2FfaXJxX2Fzc2VydChkLCBSVENfSVJRKTsNCit9DQorDQor dm9pZCBydGNfcGVyaW9kaWNfaW50ZXJydXB0KHZvaWQgKm9wYXF1ZSkNCiB7DQogICAgIFJUQ1N0 YXRlICpzID0gb3BhcXVlOw0KKw0KICAgICBzcGluX2xvY2soJnMtPmxvY2spOw0KLSAgICBzLT5o dy5jbW9zX2RhdGFbUlRDX1JFR19DXSB8PSAweGMwOw0KKyAgICBzLT5ody5jbW9zX2RhdGFbUlRD X1JFR19DXSB8PSBSVENfUEY7DQorICAgIGlmICggcy0+aHcuY21vc19kYXRhW1JUQ19SRUdfQl0g JiBSVENfUElFICkNCisgICAgICAgIHJ0Y190b2dnbGVfaXJxKHMpOw0KICAgICBzcGluX3VubG9j aygmcy0+bG9jayk7DQogfQ0KDQpAQCAtNjgsMTkgKzgxLDI1IEBAIHN0YXRpYyB2b2lkIHJ0Y190 aW1lcl91cGRhdGUoUlRDU3RhdGUgKnMNCiAgICAgQVNTRVJUKHNwaW5faXNfbG9ja2VkKCZzLT5s b2NrKSk7DQoNCiAgICAgcGVyaW9kX2NvZGUgPSBzLT5ody5jbW9zX2RhdGFbUlRDX1JFR19BXSAm IFJUQ19SQVRFX1NFTEVDVDsNCi0gICAgaWYgKCAocGVyaW9kX2NvZGUgIT0gMCkgJiYgKHMtPmh3 LmNtb3NfZGF0YVtSVENfUkVHX0JdICYgUlRDX1BJRSkgKQ0KKyAgICBzd2l0Y2ggKCBzLT5ody5j bW9zX2RhdGFbUlRDX1JFR19BXSAmIFJUQ19ESVZfQ1RMICkNCiAgICAgew0KLSAgICAgICAgaWYg KCBwZXJpb2RfY29kZSA8PSAyICkNCisgICAgY2FzZSBSVENfUkVGX0NMQ0tfMzJLSFo6DQorICAg ICAgICBpZiAoIChwZXJpb2RfY29kZSAhPSAwKSAmJiAocGVyaW9kX2NvZGUgPD0gMikgKQ0KICAg ICAgICAgICAgIHBlcmlvZF9jb2RlICs9IDc7DQotDQotICAgICAgICBwZXJpb2QgPSAxIDw8IChw ZXJpb2RfY29kZSAtIDEpOyAvKiBwZXJpb2QgaW4gMzIgS2h6IGN5Y2xlcyAqLw0KLSAgICAgICAg cGVyaW9kID0gRElWX1JPVU5EKChwZXJpb2QgKiAxMDAwMDAwMDAwVUxMKSwgMzI3NjgpOyAvKiBw ZXJpb2QgaW4gbnMgKi8NCi0gICAgICAgIGNyZWF0ZV9wZXJpb2RpY190aW1lKHYsICZzLT5wdCwg cGVyaW9kLCBwZXJpb2QsIFJUQ19JUlEsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy dGNfcGVyaW9kaWNfY2IsIHMpOw0KLSAgICB9DQotICAgIGVsc2UNCi0gICAgew0KKyAgICAgICAg LyogZmFsbCB0aHJvdWdoICovDQorICAgIGNhc2UgUlRDX1JFRl9DTENLXzFNSFo6DQorICAgIGNh c2UgUlRDX1JFRl9DTENLXzRNSFo6DQorICAgICAgICBpZiAoIHBlcmlvZF9jb2RlICE9IDAgKQ0K KyAgICAgICAgew0KKyAgICAgICAgICAgIHBlcmlvZCA9IDEgPDwgKHBlcmlvZF9jb2RlIC0gMSk7 IC8qIHBlcmlvZCBpbiAzMiBLaHogY3ljbGVzICovDQorICAgICAgICAgICAgcGVyaW9kID0gRElW X1JPVU5EKHBlcmlvZCAqIDEwMDAwMDAwMDBVTEwsIDMyNzY4KTsgLyogaW4gbnMgKi8NCisgICAg ICAgICAgICBjcmVhdGVfcGVyaW9kaWNfdGltZSh2LCAmcy0+cHQsIHBlcmlvZCwgcGVyaW9kLCBS VENfSVJRLCBOVUxMLCBzKTsNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgIH0NCisgICAg ICAgIC8qIGZhbGwgdGhyb3VnaCAqLw0KKyAgICBkZWZhdWx0Og0KICAgICAgICAgZGVzdHJveV9w ZXJpb2RpY190aW1lKCZzLT5wdCk7DQorICAgICAgICBicmVhazsNCiAgICAgfQ0KIH0NCg0KQEAg LTEwMiw3ICsxMjEsNyBAQCBzdGF0aWMgdm9pZCBjaGVja191cGRhdGVfdGltZXIoUlRDU3RhdGUg DQogICAgICAgICBndWVzdF91c2VjID0gZ2V0X2xvY2FsdGltZV91cyhkKSAlIFVTRUNfUEVSX1NF QzsNCiAgICAgICAgIGlmIChndWVzdF91c2VjID49IChVU0VDX1BFUl9TRUMgLSAyNDQpKQ0KICAg ICAgICAgew0KLSAgICAgICAgICAgIC8qIFJUQyBpcyBpbiB1cGRhdGUgY3ljbGUgd2hlbiBlbmFi bGluZyBVSUUgKi8NCisgICAgICAgICAgICAvKiBSVEMgaXMgaW4gdXBkYXRlIGN5Y2xlICovDQog ICAgICAgICAgICAgcy0+aHcuY21vc19kYXRhW1JUQ19SRUdfQV0gfD0gUlRDX1VJUDsNCiAgICAg ICAgICAgICBuZXh0X3VwZGF0ZV90aW1lID0gKFVTRUNfUEVSX1NFQyAtIGd1ZXN0X3VzZWMpICog TlNfUEVSX1VTRUM7DQogICAgICAgICAgICAgZXhwaXJlX3RpbWUgPSBOT1coKSArIG5leHRfdXBk YXRlX3RpbWU7DQpAQCAtMTQ0LDcgKzE2Myw2IEBAIHN0YXRpYyB2b2lkIHJ0Y191cGRhdGVfdGlt ZXIodm9pZCAqb3BhcXUNCiBzdGF0aWMgdm9pZCBydGNfdXBkYXRlX3RpbWVyMih2b2lkICpvcGFx dWUpDQogew0KICAgICBSVENTdGF0ZSAqcyA9IG9wYXF1ZTsNCi0gICAgc3RydWN0IGRvbWFpbiAq ZCA9IHZydGNfZG9tYWluKHMpOw0KDQogICAgIHNwaW5fbG9jaygmcy0+bG9jayk7DQogICAgIGlm ICghKHMtPmh3LmNtb3NfZGF0YVtSVENfUkVHX0JdICYgUlRDX1NFVCkpDQpAQCAtMTUyLDExICsx NzAsNyBAQCBzdGF0aWMgdm9pZCBydGNfdXBkYXRlX3RpbWVyMih2b2lkICpvcGFxDQogICAgICAg ICBzLT5ody5jbW9zX2RhdGFbUlRDX1JFR19DXSB8PSBSVENfVUY7DQogICAgICAgICBzLT5ody5j bW9zX2RhdGFbUlRDX1JFR19BXSAmPSB+UlRDX1VJUDsNCiAgICAgICAgIGlmICgocy0+aHcuY21v c19kYXRhW1JUQ19SRUdfQl0gJiBSVENfVUlFKSkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBz LT5ody5jbW9zX2RhdGFbUlRDX1JFR19DXSB8PSBSVENfSVJRRjsNCi0gICAgICAgICAgICBodm1f aXNhX2lycV9kZWFzc2VydChkLCBSVENfSVJRKTsNCi0gICAgICAgICAgICBodm1faXNhX2lycV9h c3NlcnQoZCwgUlRDX0lSUSk7DQotICAgICAgICB9DQorICAgICAgICAgICAgcnRjX3RvZ2dsZV9p cnEocyk7DQogICAgICAgICBjaGVja191cGRhdGVfdGltZXIocyk7DQogICAgIH0NCiAgICAgc3Bp bl91bmxvY2soJnMtPmxvY2spOw0KQEAgLTE3NSwyMSArMTg5LDE4IEBAIHN0YXRpYyB2b2lkIGFs YXJtX3RpbWVyX3VwZGF0ZShSVENTdGF0ZSANCg0KICAgICBzdG9wX3RpbWVyKCZzLT5hbGFybV90 aW1lcik7DQoNCi0gICAgaWYgKChzLT5ody5jbW9zX2RhdGFbUlRDX1JFR19CXSAmIFJUQ19BSUUp ICYmDQotICAgICAgICAgICAgIShzLT5ody5jbW9zX2RhdGFbUlRDX1JFR19CXSAmIFJUQ19TRVQp KQ0KKyAgICBpZiAoICEocy0+aHcuY21vc19kYXRhW1JUQ19SRUdfQl0gJiBSVENfU0VUKSApDQog ICAgIHsNCiAgICAgICAgIHMtPmN1cnJlbnRfdG0gPSBnbXRpbWUoZ2V0X2xvY2FsdGltZShkKSk7 DQogICAgICAgICBydGNfY29weV9kYXRlKHMpOw0KDQogICAgICAgICBhbGFybV9zZWMgPSBmcm9t X2JjZChzLCBzLT5ody5jbW9zX2RhdGFbUlRDX1NFQ09ORFNfQUxBUk1dKTsNCiAgICAgICAgIGFs YXJtX21pbiA9IGZyb21fYmNkKHMsIHMtPmh3LmNtb3NfZGF0YVtSVENfTUlOVVRFU19BTEFSTV0p Ow0KLSAgICAgICAgYWxhcm1faG91ciA9IGZyb21fYmNkKHMsIHMtPmh3LmNtb3NfZGF0YVtSVENf SE9VUlNfQUxBUk1dKTsNCi0gICAgICAgIGFsYXJtX2hvdXIgPSBjb252ZXJ0X2hvdXIocywgYWxh cm1faG91cik7DQorICAgICAgICBhbGFybV9ob3VyID0gY29udmVydF9ob3VyKHMsIHMtPmh3LmNt b3NfZGF0YVtSVENfSE9VUlNfQUxBUk1dKTsNCg0KICAgICAgICAgY3VyX3NlYyA9IGZyb21fYmNk KHMsIHMtPmh3LmNtb3NfZGF0YVtSVENfU0VDT05EU10pOw0KICAgICAgICAgY3VyX21pbiA9IGZy b21fYmNkKHMsIHMtPmh3LmNtb3NfZGF0YVtSVENfTUlOVVRFU10pOw0KLSAgICAgICAgY3VyX2hv dXIgPSBmcm9tX2JjZChzLCBzLT5ody5jbW9zX2RhdGFbUlRDX0hPVVJTXSk7DQotICAgICAgICBj dXJfaG91ciA9IGNvbnZlcnRfaG91cihzLCBjdXJfaG91cik7DQorICAgICAgICBjdXJfaG91ciA9 IGNvbnZlcnRfaG91cihzLCBzLT5ody5jbW9zX2RhdGFbUlRDX0hPVVJTXSk7DQoNCiAgICAgICAg IG5leHRfdXBkYXRlX3RpbWUgPSBVU0VDX1BFUl9TRUMgLSAoZ2V0X2xvY2FsdGltZV91cyhkKSAl IFVTRUNfUEVSX1NFQyk7DQogICAgICAgICBuZXh0X3VwZGF0ZV90aW1lID0gbmV4dF91cGRhdGVf dGltZSAqIE5TX1BFUl9VU0VDICsgTk9XKCk7DQpAQCAtMzQzLDcgKzM1NCw2IEBAIHN0YXRpYyB2 b2lkIGFsYXJtX3RpbWVyX3VwZGF0ZShSVENTdGF0ZSANCiBzdGF0aWMgdm9pZCBydGNfYWxhcm1f Y2Iodm9pZCAqb3BhcXVlKQ0KIHsNCiAgICAgUlRDU3RhdGUgKnMgPSBvcGFxdWU7DQotICAgIHN0 cnVjdCBkb21haW4gKmQgPSB2cnRjX2RvbWFpbihzKTsNCg0KICAgICBzcGluX2xvY2soJnMtPmxv Y2spOw0KICAgICBpZiAoIShzLT5ody5jbW9zX2RhdGFbUlRDX1JFR19CXSAmIFJUQ19TRVQpKQ0K QEAgLTM1MSwxMSArMzYxLDcgQEAgc3RhdGljIHZvaWQgcnRjX2FsYXJtX2NiKHZvaWQgKm9wYXF1 ZSkNCiAgICAgICAgIHMtPmh3LmNtb3NfZGF0YVtSVENfUkVHX0NdIHw9IFJUQ19BRjsNCiAgICAg ICAgIC8qIGFsYXJtIGludGVycnVwdCAqLw0KICAgICAgICAgaWYgKHMtPmh3LmNtb3NfZGF0YVtS VENfUkVHX0JdICYgUlRDX0FJRSkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBzLT5ody5jbW9z X2RhdGFbUlRDX1JFR19DXSB8PSBSVENfSVJRRjsNCi0gICAgICAgICAgICBodm1faXNhX2lycV9k ZWFzc2VydChkLCBSVENfSVJRKTsNCi0gICAgICAgICAgICBodm1faXNhX2lycV9hc3NlcnQoZCwg UlRDX0lSUSk7DQotICAgICAgICB9DQorICAgICAgICAgICAgcnRjX3RvZ2dsZV9pcnEocyk7DQog ICAgICAgICBhbGFybV90aW1lcl91cGRhdGUocyk7DQogICAgIH0NCiAgICAgc3Bpbl91bmxvY2so JnMtPmxvY2spOw0KQEAgLTM2NSw2ICszNzEsNyBAQCBzdGF0aWMgaW50IHJ0Y19pb3BvcnRfd3Jp dGUodm9pZCAqb3BhcXVlDQogew0KICAgICBSVENTdGF0ZSAqcyA9IG9wYXF1ZTsNCiAgICAgc3Ry dWN0IGRvbWFpbiAqZCA9IHZydGNfZG9tYWluKHMpOw0KKyAgICB1aW50MzJfdCBvcmlnLCBtYXNr Ow0KDQogICAgIHNwaW5fbG9jaygmcy0+bG9jayk7DQoNCkBAIC0zODIsNiArMzg5LDcgQEAgc3Rh dGljIGludCBydGNfaW9wb3J0X3dyaXRlKHZvaWQgKm9wYXF1ZQ0KICAgICAgICAgcmV0dXJuIDA7 DQogICAgIH0NCg0KKyAgICBvcmlnID0gcy0+aHcuY21vc19kYXRhW3MtPmh3LmNtb3NfaW5kZXhd Ow0KICAgICBzd2l0Y2ggKCBzLT5ody5jbW9zX2luZGV4ICkNCiAgICAgew0KICAgICBjYXNlIFJU Q19TRUNPTkRTX0FMQVJNOg0KQEAgLTQwNSw5ICs0MTMsOSBAQCBzdGF0aWMgaW50IHJ0Y19pb3Bv cnRfd3JpdGUodm9pZCAqb3BhcXVlDQogICAgICAgICBicmVhazsNCiAgICAgY2FzZSBSVENfUkVH X0E6DQogICAgICAgICAvKiBVSVAgYml0IGlzIHJlYWQgb25seSAqLw0KLSAgICAgICAgcy0+aHcu Y21vc19kYXRhW1JUQ19SRUdfQV0gPSAoZGF0YSAmIH5SVENfVUlQKSB8DQotICAgICAgICAgICAg KHMtPmh3LmNtb3NfZGF0YVtSVENfUkVHX0FdICYgUlRDX1VJUCk7DQotICAgICAgICBydGNfdGlt ZXJfdXBkYXRlKHMpOw0KKyAgICAgICAgcy0+aHcuY21vc19kYXRhW1JUQ19SRUdfQV0gPSAoZGF0 YSAmIH5SVENfVUlQKSB8IChvcmlnICYgUlRDX1VJUCk7DQorICAgICAgICBpZiAoIChkYXRhIF4g b3JpZykgJiAoUlRDX1JBVEVfU0VMRUNUIHwgUlRDX0RJVl9DVEwpICkNCisgICAgICAgICAgICBy dGNfdGltZXJfdXBkYXRlKHMpOw0KICAgICAgICAgYnJlYWs7DQogICAgIGNhc2UgUlRDX1JFR19C Og0KICAgICAgICAgaWYgKCBkYXRhICYgUlRDX1NFVCApDQpAQCAtNDE1LDcgKzQyMyw3IEBAIHN0 YXRpYyBpbnQgcnRjX2lvcG9ydF93cml0ZSh2b2lkICpvcGFxdWUNCiAgICAgICAgICAgICAvKiBz ZXQgbW9kZTogcmVzZXQgVUlQIG1vZGUgKi8NCiAgICAgICAgICAgICBzLT5ody5jbW9zX2RhdGFb UlRDX1JFR19BXSAmPSB+UlRDX1VJUDsNCiAgICAgICAgICAgICAvKiBhZGp1c3QgY21vcyBiZWZv cmUgc3RvcHBpbmcgKi8NCi0gICAgICAgICAgICBpZiAoIShzLT5ody5jbW9zX2RhdGFbUlRDX1JF R19CXSAmIFJUQ19TRVQpKQ0KKyAgICAgICAgICAgIGlmICghKG9yaWcgJiBSVENfU0VUKSkNCiAg ICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgIHMtPmN1cnJlbnRfdG0gPSBnbXRpbWUoZ2V0 X2xvY2FsdGltZShkKSk7DQogICAgICAgICAgICAgICAgIHJ0Y19jb3B5X2RhdGUocyk7DQpAQCAt NDI0LDIxICs0MzIsMjYgQEAgc3RhdGljIGludCBydGNfaW9wb3J0X3dyaXRlKHZvaWQgKm9wYXF1 ZQ0KICAgICAgICAgZWxzZQ0KICAgICAgICAgew0KICAgICAgICAgICAgIC8qIGlmIGRpc2FibGlu ZyBzZXQgbW9kZSwgdXBkYXRlIHRoZSB0aW1lICovDQotICAgICAgICAgICAgaWYgKCBzLT5ody5j bW9zX2RhdGFbUlRDX1JFR19CXSAmIFJUQ19TRVQgKQ0KKyAgICAgICAgICAgIGlmICggb3JpZyAm IFJUQ19TRVQgKQ0KICAgICAgICAgICAgICAgICBydGNfc2V0X3RpbWUocyk7DQogICAgICAgICB9 DQotICAgICAgICAvKiBpZiB0aGUgaW50ZXJydXB0IGlzIGFscmVhZHkgc2V0IHdoZW4gdGhlIGlu dGVycnVwdCBiZWNvbWUNCi0gICAgICAgICAqIGVuYWJsZWQsIHJhaXNlIGFuIGludGVycnVwdCBp bW1lZGlhdGVseSovDQotICAgICAgICBpZiAoKGRhdGEgJiBSVENfVUlFKSAmJiAhKHMtPmh3LmNt b3NfZGF0YVtSVENfUkVHX0JdICYgUlRDX1VJRSkpDQotICAgICAgICAgICAgaWYgKHMtPmh3LmNt b3NfZGF0YVtSVENfUkVHX0NdICYgUlRDX1VGKQ0KKyAgICAgICAgLyoNCisgICAgICAgICAqIElm IHRoZSBpbnRlcnJ1cHQgaXMgYWxyZWFkeSBzZXQgd2hlbiB0aGUgaW50ZXJydXB0IGJlY29tZXMN CisgICAgICAgICAqIGVuYWJsZWQsIHJhaXNlIGFuIGludGVycnVwdCBpbW1lZGlhdGVseS4NCisg ICAgICAgICAqIE5COiBSVENfe0EsUCxVfUlFID09IFJUQ197QSxQLFV9RiByZXNwZWN0aXZlbHku DQorICAgICAgICAgKi8NCisgICAgICAgIGZvciAoIG1hc2sgPSBSVENfVUlFOyBtYXNrIDw9IFJU Q19QSUU7IG1hc2sgPDw9IDEgKQ0KKyAgICAgICAgICAgIGlmICggKGRhdGEgJiBtYXNrKSAmJiAh KG9yaWcgJiBtYXNrKSAmJg0KKyAgICAgICAgICAgICAgICAgKHMtPmh3LmNtb3NfZGF0YVtSVENf UkVHX0NdICYgbWFzaykgKQ0KICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgaHZtX2lz YV9pcnFfZGVhc3NlcnQoZCwgUlRDX0lSUSk7DQotICAgICAgICAgICAgICAgIGh2bV9pc2FfaXJx X2Fzc2VydChkLCBSVENfSVJRKTsNCisgICAgICAgICAgICAgICAgcnRjX3RvZ2dsZV9pcnEocyk7 DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgIH0NCiAgICAgICAgIHMtPmh3 LmNtb3NfZGF0YVtSVENfUkVHX0JdID0gZGF0YTsNCi0gICAgICAgIHJ0Y190aW1lcl91cGRhdGUo cyk7DQotICAgICAgICBjaGVja191cGRhdGVfdGltZXIocyk7DQotICAgICAgICBhbGFybV90aW1l cl91cGRhdGUocyk7DQorICAgICAgICBpZiAoIChkYXRhIF4gb3JpZykgJiBSVENfU0VUICkNCisg ICAgICAgICAgICBjaGVja191cGRhdGVfdGltZXIocyk7DQorICAgICAgICBpZiAoIChkYXRhIF4g b3JpZykgJiAoUlRDXzI0SCB8IFJUQ19ETV9CSU5BUlkgfCBSVENfU0VUKSApDQorICAgICAgICAg ICAgYWxhcm1fdGltZXJfdXBkYXRlKHMpOw0KICAgICAgICAgYnJlYWs7DQogICAgIGNhc2UgUlRD X1JFR19DOg0KICAgICBjYXNlIFJUQ19SRUdfRDoNCkBAIC00NTMsNyArNDY2LDcgQEAgc3RhdGlj IGludCBydGNfaW9wb3J0X3dyaXRlKHZvaWQgKm9wYXF1ZQ0KDQogc3RhdGljIGlubGluZSBpbnQg dG9fYmNkKFJUQ1N0YXRlICpzLCBpbnQgYSkNCiB7DQotICAgIGlmICggcy0+aHcuY21vc19kYXRh W1JUQ19SRUdfQl0gJiAweDA0ICkNCisgICAgaWYgKCBzLT5ody5jbW9zX2RhdGFbUlRDX1JFR19C XSAmIFJUQ19ETV9CSU5BUlkgKQ0KICAgICAgICAgcmV0dXJuIGE7DQogICAgIGVsc2UNCiAgICAg ICAgIHJldHVybiAoKGEgLyAxMCkgPDwgNCkgfCAoYSAlIDEwKTsNCkBAIC00NjEsNyArNDc0LDcg QEAgc3RhdGljIGlubGluZSBpbnQgdG9fYmNkKFJUQ1N0YXRlICpzLCBpbg0KDQogc3RhdGljIGlu bGluZSBpbnQgZnJvbV9iY2QoUlRDU3RhdGUgKnMsIGludCBhKQ0KIHsNCi0gICAgaWYgKCBzLT5o dy5jbW9zX2RhdGFbUlRDX1JFR19CXSAmIDB4MDQgKQ0KKyAgICBpZiAoIHMtPmh3LmNtb3NfZGF0 YVtSVENfUkVHX0JdICYgUlRDX0RNX0JJTkFSWSApDQogICAgICAgICByZXR1cm4gYTsNCiAgICAg ZWxzZQ0KICAgICAgICAgcmV0dXJuICgoYSA+PiA0KSAqIDEwKSArIChhICYgMHgwZik7DQpAQCAt NDY5LDEyICs0ODIsMTQgQEAgc3RhdGljIGlubGluZSBpbnQgZnJvbV9iY2QoUlRDU3RhdGUgKnMs IA0KDQogLyogSG91cnMgaW4gMTIgaG91ciBtb2RlIGFyZSBpbiAxLTEyIHJhbmdlLCBub3QgMC0x MS4NCiAgKiBTbyB3ZSBuZWVkIGNvbnZlcnQgaXQgYmVmb3JlIHVzaW5nIGl0Ki8NCi1zdGF0aWMg aW5saW5lIGludCBjb252ZXJ0X2hvdXIoUlRDU3RhdGUgKnMsIGludCBob3VyKQ0KK3N0YXRpYyBp bmxpbmUgaW50IGNvbnZlcnRfaG91cihSVENTdGF0ZSAqcywgaW50IHJhdykNCiB7DQorICAgIGlu dCBob3VyID0gZnJvbV9iY2QocywgcmF3ICYgMHg3Zik7DQorDQogICAgIGlmICghKHMtPmh3LmNt b3NfZGF0YVtSVENfUkVHX0JdICYgUlRDXzI0SCkpDQogICAgIHsNCiAgICAgICAgIGhvdXIgJT0g MTI7DQotICAgICAgICBpZiAocy0+aHcuY21vc19kYXRhW1JUQ19IT1VSU10gJiAweDgwKQ0KKyAg ICAgICAgaWYgKHJhdyAmIDB4ODApDQogICAgICAgICAgICAgaG91ciArPSAxMjsNCiAgICAgfQ0K ICAgICByZXR1cm4gaG91cjsNCkBAIC00OTMsOCArNTA4LDcgQEAgc3RhdGljIHZvaWQgcnRjX3Nl dF90aW1lKFJUQ1N0YXRlICpzKQ0KICAgICANCiAgICAgdG0tPnRtX3NlYyA9IGZyb21fYmNkKHMs IHMtPmh3LmNtb3NfZGF0YVtSVENfU0VDT05EU10pOw0KICAgICB0bS0+dG1fbWluID0gZnJvbV9i Y2Qocywgcy0+aHcuY21vc19kYXRhW1JUQ19NSU5VVEVTXSk7DQotICAgIHRtLT50bV9ob3VyID0g ZnJvbV9iY2Qocywgcy0+aHcuY21vc19kYXRhW1JUQ19IT1VSU10gJiAweDdmKTsNCi0gICAgdG0t PnRtX2hvdXIgPSBjb252ZXJ0X2hvdXIocywgdG0tPnRtX2hvdXIpOw0KKyAgICB0bS0+dG1faG91 ciA9IGNvbnZlcnRfaG91cihzLCBzLT5ody5jbW9zX2RhdGFbUlRDX0hPVVJTXSk7DQogICAgIHRt LT50bV93ZGF5ID0gZnJvbV9iY2Qocywgcy0+aHcuY21vc19kYXRhW1JUQ19EQVlfT0ZfV0VFS10p Ow0KICAgICB0bS0+dG1fbWRheSA9IGZyb21fYmNkKHMsIHMtPmh3LmNtb3NfZGF0YVtSVENfREFZ X09GX01PTlRIXSk7DQogICAgIHRtLT50bV9tb24gPSBmcm9tX2JjZChzLCBzLT5ody5jbW9zX2Rh dGFbUlRDX01PTlRIXSkgLSAxOw0KLS0tIGEveGVuL2FyY2gveDg2L2h2bS92cHQuYw0KKysrIGIv eGVuL2FyY2gveDg2L2h2bS92cHQuYw0KQEAgLTIyLDYgKzIyLDcgQEANCiAjaW5jbHVkZSA8YXNt L2h2bS92cHQuaD4NCiAjaW5jbHVkZSA8YXNtL2V2ZW50Lmg+DQogI2luY2x1ZGUgPGFzbS9hcGlj Lmg+DQorI2luY2x1ZGUgPGFzbS9tYzE0NjgxOHJ0Yy5oPg0KDQogI2RlZmluZSBtb2RlX2lzKGQs IG5hbWUpIFwNCiAgICAgKChkKS0+YXJjaC5odm1fZG9tYWluLnBhcmFtc1tIVk1fUEFSQU1fVElN RVJfTU9ERV0gPT0gSFZNUFRNXyMjbmFtZSkNCkBAIC0yMTgsNiArMjE5LDcgQEAgdm9pZCBwdF91 cGRhdGVfaXJxKHN0cnVjdCB2Y3B1ICp2KQ0KICAgICBzdHJ1Y3QgcGVyaW9kaWNfdGltZSAqcHQs ICp0ZW1wLCAqZWFybGllc3RfcHQgPSBOVUxMOw0KICAgICB1aW50NjRfdCBtYXhfbGFnID0gLTFV TEw7DQogICAgIGludCBpcnEsIGlzX2xhcGljOw0KKyAgICB2b2lkICpwdF9wcml2Ow0KDQogICAg IHNwaW5fbG9jaygmdi0+YXJjaC5odm1fdmNwdS50bV9sb2NrKTsNCg0KQEAgLTI1MSwxMyArMjUz LDE0IEBAIHZvaWQgcHRfdXBkYXRlX2lycShzdHJ1Y3QgdmNwdSAqdikNCiAgICAgZWFybGllc3Rf cHQtPmlycV9pc3N1ZWQgPSAxOw0KICAgICBpcnEgPSBlYXJsaWVzdF9wdC0+aXJxOw0KICAgICBp c19sYXBpYyA9IChlYXJsaWVzdF9wdC0+c291cmNlID09IFBUU1JDX2xhcGljKTsNCisgICAgcHRf cHJpdiA9IGVhcmxpZXN0X3B0LT5wcml2Ow0KDQogICAgIHNwaW5fdW5sb2NrKCZ2LT5hcmNoLmh2 bV92Y3B1LnRtX2xvY2spOw0KDQogICAgIGlmICggaXNfbGFwaWMgKQ0KLSAgICB7DQogICAgICAg ICB2bGFwaWNfc2V0X2lycSh2Y3B1X3ZsYXBpYyh2KSwgaXJxLCAwKTsNCi0gICAgfQ0KKyAgICBl bHNlIGlmICggaXJxID09IFJUQ19JUlEgKQ0KKyAgICAgICAgcnRjX3BlcmlvZGljX2ludGVycnVw dChwdF9wcml2KTsNCiAgICAgZWxzZQ0KICAgICB7DQogICAgICAgICBodm1faXNhX2lycV9kZWFz c2VydCh2LT5kb21haW4sIGlycSk7DQotLS0gYS94ZW4vaW5jbHVkZS9hc20teDg2L2h2bS92cHQu aA0KKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vdnB0LmgNCkBAIC0xODEsNiArMTgxLDcg QEAgdm9pZCBydGNfbWlncmF0ZV90aW1lcnMoc3RydWN0IHZjcHUgKnYpOw0KIHZvaWQgcnRjX2Rl aW5pdChzdHJ1Y3QgZG9tYWluICpkKTsNCiB2b2lkIHJ0Y19yZXNldChzdHJ1Y3QgZG9tYWluICpk KTsNCiB2b2lkIHJ0Y191cGRhdGVfY2xvY2soc3RydWN0IGRvbWFpbiAqZCk7DQordm9pZCBydGNf cGVyaW9kaWNfaW50ZXJydXB0KHZvaWQgKik7DQoNCiB2b2lkIHBtdGltZXJfaW5pdChzdHJ1Y3Qg dmNwdSAqdik7DQogdm9pZCBwbXRpbWVyX2RlaW5pdChzdHJ1Y3QgZG9tYWluICpkKTsNCg0KDQpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KWGVuLWRldmVs IG1haWxpbmcgbGlzdA0KWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcNCmh0dHA6Ly9saXN0cy54ZW4u b3JnL3hlbi1kZXZlbA== ------=_001_NextPart564768006800_=---- Content-Type: text/html; charset="gb2312" Content-Transfer-Encoding: quoted-printable
Hi, Jan:
I am sorry I really don't have much time to try a test of your patch,= and=20 it is not convenient
for me to have a try. For the version I have been using is xen4.0.x, = and=20 your patch is based on
the latest version xen4.2.x.(I have never complied the unstable one),= so I=20 merged your patch to my
xen4.0.x, still couldn't find the two functions below:
 static void rtc_update_timer2(void *opaque)
 static void rtc_alarm_cb(void *opaque)
so I didn't merge the two functions which contains a rtc_toggle_irq()= =20 .
 
The results for me were these:
1 In my real application environment, it worked very well in the form= er=20 5mins, much better than before,
 but at last it lagged again. I don't know whether it belongs to= the=20 two missed functions. I lack the
 ability to figure them out.
 
2 When I tested my test program which I provided days before, it work= ed=20 very well, maybe the program doesn't
emulate the real environment due to the same setting rate, = so I=20 modified this program as which in the attachment.
if you are more convenient, you can help me to have a look of it.
--------------------------------------------------------------------<= /DIV>
#include <stdio.h>
#include <windows.h>
typedef int (__stdcall *NTSETTIMER)(IN ULONG = ;RequestedResolution, IN BOOLEAN Set, OUT PULONG&= nbsp;ActualResolution );
typedef int (__stdcall *NTQUERYTIMER)(OUT PULONG&= nbsp;  MinimumResolution, OUT PULONG MaximumResol= ution, OUT PULONG CurrentResolution );
 
int main()
{
DWORD min_res =3D 0, max_res =3D 0,&nbs= p;cur_res =3D 0, ret =3D 0;
HMODULE  hdll =3D NULL;
hdll =3D GetModuleHandle("ntdll.dll");
NTSETTIMER AddrNtSetTimer =3D 0;
NTQUERYTIMER AddrNtQueyTimer =3D 0;
AddrNtSetTimer =3D (NTSETTIMER) GetProcAddress(hdll,&n= bsp;"NtSetTimerResolution");
AddrNtQueyTimer =3D (NTQUERYTIMER)GetProcAddress(hdll, = ;"NtQueryTimerResolution");
 
while (1)
{
ret =3D AddrNtQueyTimer(&min_res, &max_res,&nb= sp;&cur_res);
printf("min_res =3D %d, max_res =3D %d, = ;cur_res =3D %d\n",min_res, max_res, cur_res);
Sleep(5);
ret =3D AddrNtSetTimer(10000, 1, &cur_res);
Sleep(5);
ret =3D AddrNtSetTimer(10000, 0, &cur_res);
Sleep(5);
ret =3D AddrNtSetTimer(50000, 1, &cur_res);
Sleep(5);
ret =3D AddrNtSetTimer(50000, 0, &cur_res);
Sleep(5);
ret =3D AddrNtSetTimer(100000, 1, &cur_res);<= /DIV>
Sleep(5);
ret =3D AddrNtSetTimer(100000, 0, &cur_res);<= /DIV>
Sleep(5);
}
 
return 0;
}
--------------------------------------------------------------------<= /DIV>
And I have a opinion, because our product is based on Version Xen4.0.= x, if=20 you have enough time, can you write
another patch based http://xenbits.xen.= org/hg/xen-4.0-testing.hg/ for=20 me, thank you very much!
 
3 I also have a thought that can we have some detecting methods to fi= nd the=20 lagging time earlier to adjust time
back to normal value in the code?
 
best regards,
 

tupeng212
 
Second draft of a patch posted; no = ;test results so far for first draft.
Jan
 
Date: 2012-08-14 17:51
CC: tupeng212;= xen-devel
Subject: [Xen-devel] [PATCH, RFC v2] x86/HVM: assorted RT= C=20 emulation adjustments (was Re: Big Bug:Time in VM goes=20 slower...)
Below/attached a second draft of a patc= h to fix not only this
issue, but a few more with the RTC=  emulation.
 
Keir, Tim, Yang, others - the change&nb= sp;to xen/arch/x86/hvm/vpt.c really
looks more like a hack than a solu= tion, but I don't see another
way without much more intrusive changes.&nbs= p;The point is that we
want the RTC code to decide whether&nbs= p;to generate an interrupt
(so that RTC_PF can become set correctl= y even without RTC_PIE
getting enabled by the guest).
 
Additionally I wonder whether alarm_timer_update(= ) shouldn't
bail on non-conforming RTC_*_ALARM values (a= s those would
never match the values they get compare= d against, whereas
with the current way of handling this&n= bsp;they would appear to
match - i.e. set RTC_AF and possibly&nb= sp;generate an interrupt -
some other point in time). I realize&nb= sp;the behavior here may not
be precisely specified, but the specificatio= n saying "the current
time has matched the alarm time" means&= nbsp;to me a value by value
comparison, which implies that non-conforming&nbs= p;values would
never match (since non-conforming current ti= me values could
get replaced at any time by the ha= rdware due to overflow
detection).
 
Jan
 
- don't call rtc_timer_update() on REG_A&nbs= p;writes when the value didn't
  change (doing the call always wa= s reported to cause wall clock time
  lagging with the JVM running on&= nbsp;Windows)
- don't call rtc_timer_update() on REG_B&nbs= p;writes at all
- only call alarm_timer_update() on REG_B&nb= sp;writes when relevant bits
  change
- only call check_update_timer() on REG_B&nb= sp;writes when SET changes
- instead properly handle AF and PF&nbs= p;when the guest is not also setting
  AIE/PIE respectively (for UF this&nbs= p;was already the case, only a
  comment was slightly inaccurate)
- raise the RTC IRQ not only when&= nbsp;UIE gets set while UF was already
  set, but generalize this to cove= r AIE and PIE as well
- properly mask off bit 7 when ret= rieving the hour values in
  alarm_timer_update(), and properly use&nbs= p;RTC_HOURS_ALARM's bit 7 when
  converting from 12- to 24-hour v= alue
- also handle the two other possible&nb= sp;clock bases
- use RTC_* names in a couple of&n= bsp;places where literal numbers were used
  so far
 
--- a/xen/arch/x86/hvm/rtc.c
+++ b/xen/arch/x86/hvm/rtc.c
@@ -50,11 +50,24 @@ static void rtc_set= _time(RTCState *s);
 static inline int from_bcd(RTCState *s,&nbs= p;int a);
 static inline int convert_hour(RTCState *s,=  int hour);
 
-static void rtc_periodic_cb(struct vcpu *v, = ;void *opaque)
+static void rtc_toggle_irq(RTCState *s)
+{
+    struct domain *d =3D vrt= c_domain(s);
+
+    ASSERT(spin_is_locked(&s->lock));
+    s->hw.cmos_data[RTC_REG_C] |=3D = ;RTC_IRQF;
+    hvm_isa_irq_deassert(d, RTC_IRQ);
+    hvm_isa_irq_assert(d, RTC_IRQ);
+}
+
+void rtc_periodic_interrupt(void *opaque)
 {
     RTCState *s =3D opaque;<= /DIV>
+
     spin_lock(&s->lock);
-    s->hw.cmos_data[RTC_REG_C] |=3D = ;0xc0;
+    s->hw.cmos_data[RTC_REG_C] |=3D = ;RTC_PF;
+    if ( s->hw.cmos_data[RTC_REG_B]=  & RTC_PIE )
+        rtc_toggle_irq(s);
     spin_unlock(&s->lock);
 }
 
@@ -68,19 +81,25 @@ static void rtc_tim= er_update(RTCState *s
     ASSERT(spin_is_locked(&s->lock))= ;
 
     period_code =3D s->hw.cmos= _data[RTC_REG_A] & RTC_RATE_SELECT;
-    if ( (period_code !=3D 0= ) && (s->hw.cmos_data[RTC_REG_B] & RTC_= PIE) )
+    switch ( s->hw.cmos_data[RTC_RE= G_A] & RTC_DIV_CTL )
     {
-        if ( perio= d_code <=3D 2 )
+    case RTC_REF_CLCK_32KHZ:
+        if ( (peri= od_code !=3D 0) && (period_code <=3D&n= bsp;2) )
           &nb= sp; period_code +=3D 7;
-
-        period =3D = ;1 << (period_code - 1); /* period&nbs= p;in 32 Khz cycles */
-        period =3D = ;DIV_ROUND((period * 1000000000ULL), 32768); /* p= eriod in ns */
-        create_periodic_time= (v, &s->pt, period, period, RTC_IRQ,
-           &n= bsp;           &nbs= p;     rtc_periodic_cb, s);
-    }
-    else
-    {
+        /* fall th= rough */
+    case RTC_REF_CLCK_1MHZ:
+    case RTC_REF_CLCK_4MHZ:
+        if ( perio= d_code !=3D 0 )
+        {
+           &n= bsp;period =3D 1 << (period_code - 1);=  /* period in 32 Khz cycles */
+           &n= bsp;period =3D DIV_ROUND(period * 1000000000ULL, = 32768); /* in ns */
+           &n= bsp;create_periodic_time(v, &s->pt, period, period,&= nbsp;RTC_IRQ, NULL, s);
+           &n= bsp;break;
+        }
+        /* fall th= rough */
+    default:
         destroy_periodi= c_time(&s->pt);
+        break;
     }
 }
 
@@ -102,7 +121,7 @@ static void check_u= pdate_timer(RTCState 
         guest_usec = ;=3D get_localtime_us(d) % USEC_PER_SEC;
         if (guest_= usec >=3D (USEC_PER_SEC - 244))
         {
-           &n= bsp;/* RTC is in update cycle when enab= ling UIE */
+           &n= bsp;/* RTC is in update cycle */
           &nb= sp; s->hw.cmos_data[RTC_REG_A] |=3D RTC_UIP;
           &nb= sp; next_update_time =3D (USEC_PER_SEC - guest_us= ec) * NS_PER_USEC;
           &nb= sp; expire_time =3D NOW() + next_update_time;
@@ -144,7 +163,6 @@ static void rtc_upd= ate_timer(void *opaqu
 static void rtc_update_timer2(void *opaque)
 {
     RTCState *s =3D opaque;<= /DIV>
-    struct domain *d =3D vrt= c_domain(s);
 
     spin_lock(&s->lock);
     if (!(s->hw.cmos_data[RTC_REG_B= ] & RTC_SET))
@@ -152,11 +170,7 @@ static void rtc_up= date_timer2(void *opaq
         s->hw.cmos_d= ata[RTC_REG_C] |=3D RTC_UF;
         s->hw.cmos_d= ata[RTC_REG_A] &=3D ~RTC_UIP;
         if ((s->= ;hw.cmos_data[RTC_REG_B] & RTC_UIE))
-        {
-           &n= bsp;s->hw.cmos_data[RTC_REG_C] |=3D RTC_IRQF;
-           &n= bsp;hvm_isa_irq_deassert(d, RTC_IRQ);
-           &n= bsp;hvm_isa_irq_assert(d, RTC_IRQ);
-        }
+           &n= bsp;rtc_toggle_irq(s);
         check_update_ti= mer(s);
     }
     spin_unlock(&s->lock);
@@ -175,21 +189,18 @@ static void alarm= _timer_update(RTCState 
 
     stop_timer(&s->alarm_timer);
 
-    if ((s->hw.cmos_data[RTC_REG_B] = ;& RTC_AIE) &&
-           &n= bsp;!(s->hw.cmos_data[RTC_REG_B] & RTC_SET))
+    if ( !(s->hw.cmos_data[RTC_REG_= B] & RTC_SET) )
     {
         s->current_t= m =3D gmtime(get_localtime(d));
         rtc_copy_date(s= );
 
         alarm_sec = =3D from_bcd(s, s->hw.cmos_data[RTC_SECONDS_ALARM]);
         alarm_min = =3D from_bcd(s, s->hw.cmos_data[RTC_MINUTES_ALARM]);
-        alarm_hour =3D&= nbsp;from_bcd(s, s->hw.cmos_data[RTC_HOURS_ALARM]);
-        alarm_hour =3D&= nbsp;convert_hour(s, alarm_hour);
+        alarm_hour =3D&= nbsp;convert_hour(s, s->hw.cmos_data[RTC_HOURS_ALARM]);
 
         cur_sec = =3D from_bcd(s, s->hw.cmos_data[RTC_SECONDS]);
         cur_min = =3D from_bcd(s, s->hw.cmos_data[RTC_MINUTES]);
-        cur_hour =3D&nb= sp;from_bcd(s, s->hw.cmos_data[RTC_HOURS]);
-        cur_hour =3D&nb= sp;convert_hour(s, cur_hour);
+        cur_hour =3D&nb= sp;convert_hour(s, s->hw.cmos_data[RTC_HOURS]);
 
         next_update_tim= e =3D USEC_PER_SEC - (get_localtime_us(d) % = USEC_PER_SEC);
         next_update_tim= e =3D next_update_time * NS_PER_USEC + NOW()= ;
@@ -343,7 +354,6 @@ static void alarm_t= imer_update(RTCState 
 static void rtc_alarm_cb(void *opaque)
 {
     RTCState *s =3D opaque;<= /DIV>
-    struct domain *d =3D vrt= c_domain(s);
 
     spin_lock(&s->lock);
     if (!(s->hw.cmos_data[RTC_REG_B= ] & RTC_SET))
@@ -351,11 +361,7 @@ static void rtc_al= arm_cb(void *opaque)
         s->hw.cmos_d= ata[RTC_REG_C] |=3D RTC_AF;
         /* alarm&n= bsp;interrupt */
         if (s->= hw.cmos_data[RTC_REG_B] & RTC_AIE)
-        {
-           &n= bsp;s->hw.cmos_data[RTC_REG_C] |=3D RTC_IRQF;
-           &n= bsp;hvm_isa_irq_deassert(d, RTC_IRQ);
-           &n= bsp;hvm_isa_irq_assert(d, RTC_IRQ);
-        }
+           &n= bsp;rtc_toggle_irq(s);
         alarm_timer_upd= ate(s);
     }
     spin_unlock(&s->lock);
@@ -365,6 +371,7 @@ static int rtc_iopo= rt_write(void *opaque
 {
     RTCState *s =3D opaque;<= /DIV>
     struct domain *d =3D&nbs= p;vrtc_domain(s);
+    uint32_t orig, mask;
 
     spin_lock(&s->lock);
 
@@ -382,6 +389,7 @@ static int rtc_iopo= rt_write(void *opaque
         return 0;<= /DIV>
     }
 
+    orig =3D s->hw.cmos_data[s->= hw.cmos_index];
     switch ( s->hw.cmos_index&= nbsp;)
     {
     case RTC_SECONDS_ALARM:
@@ -405,9 +413,9 @@ static int rtc_iopo= rt_write(void *opaque
         break;
     case RTC_REG_A:
         /* UIP&nbs= p;bit is read only */
-        s->hw.cmos_data[R= TC_REG_A] =3D (data & ~RTC_UIP) |
-           &n= bsp;(s->hw.cmos_data[RTC_REG_A] & RTC_UIP);
-        rtc_timer_update(s);=
+        s->hw.cmos_data[R= TC_REG_A] =3D (data & ~RTC_UIP) | (orig&= nbsp;& RTC_UIP);
+        if ( (data=  ^ orig) & (RTC_RATE_SELECT | RTC_DIV_CT= L) )
+           &n= bsp;rtc_timer_update(s);
         break;
     case RTC_REG_B:
         if ( = data & RTC_SET )
@@ -415,7 +423,7 @@ static int rtc_iopo= rt_write(void *opaque
           &nb= sp; /* set mode: reset UIP mode */
           &nb= sp; s->hw.cmos_data[RTC_REG_A] &=3D ~RTC_UIP;
           &nb= sp; /* adjust cmos before stopping */
-           &n= bsp;if (!(s->hw.cmos_data[RTC_REG_B] & RTC_SET))
+           &n= bsp;if (!(orig & RTC_SET))
           &nb= sp; {
           &nb= sp;     s->current_tm =3D gmtime(get= _localtime(d));
           &nb= sp;     rtc_copy_date(s);
@@ -424,21 +432,26 @@ static int rtc_io= port_write(void *opaque
         else
         {
           &nb= sp; /* if disabling set mode, update th= e time */
-           &n= bsp;if ( s->hw.cmos_data[RTC_REG_B] & RTC_SET&n= bsp;)
+           &n= bsp;if ( orig & RTC_SET )
           &nb= sp;     rtc_set_time(s);
         }
-        /* if the&= nbsp;interrupt is already set when the inter= rupt become
-         * enabled= , raise an interrupt immediately*/
-        if ((data = & RTC_UIE) && !(s->hw.cmos_data[RTC_REG_B]&n= bsp;& RTC_UIE))
-           &n= bsp;if (s->hw.cmos_data[RTC_REG_C] & RTC_UF)
+        /*
+         * If = ;the interrupt is already set when the = interrupt becomes
+         * enabled= , raise an interrupt immediately.
+         * NB:&nbs= p;RTC_{A,P,U}IE =3D=3D RTC_{A,P,U}F respectively.
+         */
+        for ( mask=  =3D RTC_UIE; mask <=3D RTC_PIE; mask&nbs= p;<<=3D 1 )
+           &n= bsp;if ( (data & mask) && !(orig=  & mask) &&
+           &n= bsp;     (s->hw.cmos_data[RTC_REG_C] &= ; mask) )
           &nb= sp; {
-           &n= bsp;    hvm_isa_irq_deassert(d, RTC_IRQ);
-           &n= bsp;    hvm_isa_irq_assert(d, RTC_IRQ);
+           &n= bsp;    rtc_toggle_irq(s);
+           &n= bsp;    break;
           &nb= sp; }
         s->hw.cmos_d= ata[RTC_REG_B] =3D data;
-        rtc_timer_update(s);=
-        check_update_timer(s= );
-        alarm_timer_update(s= );
+        if ( (data=  ^ orig) & RTC_SET )
+           &n= bsp;check_update_timer(s);
+        if ( (data=  ^ orig) & (RTC_24H | RTC_DM_BINARY = ;| RTC_SET) )
+           &n= bsp;alarm_timer_update(s);
         break;
     case RTC_REG_C:
     case RTC_REG_D:
@@ -453,7 +466,7 @@ static int rtc_iopo= rt_write(void *opaque
 
 static inline int to_bcd(RTCState *s, = int a)
 {
-    if ( s->hw.cmos_data[RTC_REG_B]=  & 0x04 )
+    if ( s->hw.cmos_data[RTC_REG_B]=  & RTC_DM_BINARY )
         return a;<= /DIV>
     else
         return ((a=  / 10) << 4) | (a % 10);
@@ -461,7 +474,7 @@ static inline int&n= bsp;to_bcd(RTCState *s, in
 
 static inline int from_bcd(RTCState *s,&nbs= p;int a)
 {
-    if ( s->hw.cmos_data[RTC_REG_B]=  & 0x04 )
+    if ( s->hw.cmos_data[RTC_REG_B]=  & RTC_DM_BINARY )
         return a;<= /DIV>
     else
         return ((a=  >> 4) * 10) + (a & 0x0f= );
@@ -469,12 +482,14 @@ static inline int=  from_bcd(RTCState *s, 
 
 /* Hours in 12 hour mode are = ;in 1-12 range, not 0-11.
  * So we need convert it bef= ore using it*/
-static inline int convert_hour(RTCState *s, = ;int hour)
+static inline int convert_hour(RTCState *s, = ;int raw)
 {
+    int hour =3D from_bcd(s, = ;raw & 0x7f);
+
     if (!(s->hw.cmos_data[RTC_REG_B= ] & RTC_24H))
     {
         hour %=3D&= nbsp;12;
-        if (s->hw.cm= os_data[RTC_HOURS] & 0x80)
+        if (raw &a= mp; 0x80)
           &nb= sp; hour +=3D 12;
     }
     return hour;
@@ -493,8 +508,7 @@ static void rtc_set= _time(RTCState *s)
     
     tm->tm_sec =3D from_bcd(s,=  s->hw.cmos_data[RTC_SECONDS]);
     tm->tm_min =3D from_bcd(s,=  s->hw.cmos_data[RTC_MINUTES]);
-    tm->tm_hour =3D from_bcd(s,&nbs= p;s->hw.cmos_data[RTC_HOURS] & 0x7f);
-    tm->tm_hour =3D convert_hour(s,=  tm->tm_hour);
+    tm->tm_hour =3D convert_hour(s,=  s->hw.cmos_data[RTC_HOURS]);
     tm->tm_wday =3D from_bcd(s= , s->hw.cmos_data[RTC_DAY_OF_WEEK]);
     tm->tm_mday =3D from_bcd(s= , s->hw.cmos_data[RTC_DAY_OF_MONTH]);
     tm->tm_mon =3D from_bcd(s,=  s->hw.cmos_data[RTC_MONTH]) - 1;
--- a/xen/arch/x86/hvm/vpt.c
+++ b/xen/arch/x86/hvm/vpt.c
@@ -22,6 +22,7 @@
 #include <asm/hvm/vpt.h>
 #include <asm/event.h>
 #include <asm/apic.h>
+#include <asm/mc146818rtc.h>
 
 #define mode_is(d, name) \
     ((d)->arch.hvm_domain.params[HVM_PAR= AM_TIMER_MODE] =3D=3D HVMPTM_##name)
@@ -218,6 +219,7 @@ void pt_update_irq(struc= t vcpu *v)
     struct periodic_time *pt,&nbs= p;*temp, *earliest_pt =3D NULL;
     uint64_t max_lag =3D -1U= LL;
     int irq, is_lapic;
+    void *pt_priv;
 
     spin_lock(&v->arch.hvm_vcpu.tm_l= ock);
 
@@ -251,13 +253,14 @@ void pt_update_irq(str= uct vcpu *v)
     earliest_pt->irq_issued =3D&nbs= p;1;
     irq =3D earliest_pt->irq;<= /DIV>
     is_lapic =3D (earliest_pt->= ;source =3D=3D PTSRC_lapic);
+    pt_priv =3D earliest_pt->priv;<= /DIV>
 
     spin_unlock(&v->arch.hvm_vcpu.tm= _lock);
 
     if ( is_lapic )
-    {
         vlapic_set_irq(= vcpu_vlapic(v), irq, 0);
-    }
+    else if ( irq =3D=3D&nbs= p;RTC_IRQ )
+        rtc_periodic_interru= pt(pt_priv);
     else
     {
         hvm_isa_irq_dea= ssert(v->domain, irq);
--- a/xen/include/asm-x86/hvm/vpt.h
+++ b/xen/include/asm-x86/hvm/vpt.h
@@ -181,6 +181,7 @@ void rtc_migrate_timers(= struct vcpu *v);
 void rtc_deinit(struct domain *d);
 void rtc_reset(struct domain *d);
 void rtc_update_clock(struct domain *d);
+void rtc_periodic_interrupt(void *);
 
 void pmtimer_init(struct vcpu *v);
 void pmtimer_deinit(struct domain *d);
 
 
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel
------=_001_NextPart564768006800_=------ --===============5636090078893645621== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel --===============5636090078893645621==--