From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753917AbbCaVIS (ORCPT ); Tue, 31 Mar 2015 17:08:18 -0400 Received: from mga14.intel.com ([192.55.52.115]:22962 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752277AbbCaVIM (ORCPT ); Tue, 31 Mar 2015 17:08:12 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.11,503,1422950400"; d="scan'208";a="701060882" From: "Keller, Jacob E" To: "richardcochran@gmail.com" CC: "thomas.lendacky@amd.com" , "linux-kernel@vger.kernel.org" , "baolin.wang@linaro.org" , "b45643@freescale.com" , "sshah@solarflare.com" , "amirv@mellanox.com" , "ben@decadent.org.uk" , "sonic.zhang@analog.com" , "peppe.cavallaro@st.com" , "Allan, Bruce W" , "rayagond@vayavyalabs.com" , "tglx@linutronix.de" , "ariel.elior@qlogic.com" , "cmetcalf@ezchip.com" , "Vick, Matthew" , "linux-net-drivers@solarflare.com" , "arnd@linaro.org" , "Frank.Li@freescale.com" , "netdev@vger.kernel.org" , "mchan@broadcom.com" , "Wyborny, Carolyn" , "prashant@broadcom.com" , "davem@davemloft.net" , "Kirsher, Jeffrey T" , "stefan.sorensen@spectralink.com" , "john.stultz@linaro.org" Subject: Re: [PATCH net-next V3 13/23] ptp: igb: convert to the 64 bit get/set time methods. Thread-Topic: [PATCH net-next V3 13/23] ptp: igb: convert to the 64 bit get/set time methods. Thread-Index: AQHQamUkU6Kg6VkyD0+tXZQJ1WT2n503jiMA Date: Tue, 31 Mar 2015 21:08:10 +0000 Message-ID: <1427836090.16312.27.camel@intel.com> References: <67fa71b28f96b222c8027b49efee4144b3754bf7.1427662907.git.richardcochran@gmail.com> In-Reply-To: <67fa71b28f96b222c8027b49efee4144b3754bf7.1427662907.git.richardcochran@gmail.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [134.134.3.151] Content-Type: text/plain; charset="utf-8" Content-ID: MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by nfs id t2VL8MUN030635 On Sun, 2015-03-29 at 23:12 +0200, Richard Cochran wrote: > For the 82576, the driver's clock is implemented using a timecounter, > and so with this patch that device is ready for the year 2038. > > However, in the case of the i210, the device stores the number of > seconds in a 32 bit register. Therefore, more work is needed on this > driver before the year 2038 comes around. > > Compile tested only. I assume we would want to use a time counter wrapper here to resolve this issue? Regards, Jake > > Signed-off-by: Richard Cochran > Acked-by: Jeff Kirsher > --- > drivers/net/ethernet/intel/igb/igb_ptp.c | 41 +++++++++++++++--------------- > 1 file changed, 21 insertions(+), 20 deletions(-) > > diff --git a/drivers/net/ethernet/intel/igb/igb_ptp.c b/drivers/net/ethernet/intel/igb/igb_ptp.c > index 52d01b8..0348b7e 100644 > --- a/drivers/net/ethernet/intel/igb/igb_ptp.c > +++ b/drivers/net/ethernet/intel/igb/igb_ptp.c > @@ -116,7 +116,8 @@ static cycle_t igb_ptp_read_82580(const struct cyclecounter *cc) > } > > /* SYSTIM read access for I210/I211 */ > -static void igb_ptp_read_i210(struct igb_adapter *adapter, struct timespec *ts) > +static void igb_ptp_read_i210(struct igb_adapter *adapter, > + struct timespec64 *ts) > { > struct e1000_hw *hw = &adapter->hw; > u32 sec, nsec; > @@ -134,7 +135,7 @@ static void igb_ptp_read_i210(struct igb_adapter *adapter, struct timespec *ts) > } > > static void igb_ptp_write_i210(struct igb_adapter *adapter, > - const struct timespec *ts) > + const struct timespec64 *ts) > { > struct e1000_hw *hw = &adapter->hw; > > @@ -269,13 +270,13 @@ static int igb_ptp_adjtime_i210(struct ptp_clock_info *ptp, s64 delta) > struct igb_adapter *igb = container_of(ptp, struct igb_adapter, > ptp_caps); > unsigned long flags; > - struct timespec now, then = ns_to_timespec(delta); > + struct timespec64 now, then = ns_to_timespec64(delta); > > spin_lock_irqsave(&igb->tmreg_lock, flags); > > igb_ptp_read_i210(igb, &now); > - now = timespec_add(now, then); > - igb_ptp_write_i210(igb, (const struct timespec *)&now); > + now = timespec64_add(now, then); > + igb_ptp_write_i210(igb, (const struct timespec64 *)&now); > > spin_unlock_irqrestore(&igb->tmreg_lock, flags); > > @@ -283,7 +284,7 @@ static int igb_ptp_adjtime_i210(struct ptp_clock_info *ptp, s64 delta) > } > > static int igb_ptp_gettime_82576(struct ptp_clock_info *ptp, > - struct timespec *ts) > + struct timespec64 *ts) > { > struct igb_adapter *igb = container_of(ptp, struct igb_adapter, > ptp_caps); > @@ -304,7 +305,7 @@ static int igb_ptp_gettime_82576(struct ptp_clock_info *ptp, > } > > static int igb_ptp_gettime_i210(struct ptp_clock_info *ptp, > - struct timespec *ts) > + struct timespec64 *ts) > { > struct igb_adapter *igb = container_of(ptp, struct igb_adapter, > ptp_caps); > @@ -320,7 +321,7 @@ static int igb_ptp_gettime_i210(struct ptp_clock_info *ptp, > } > > static int igb_ptp_settime_82576(struct ptp_clock_info *ptp, > - const struct timespec *ts) > + const struct timespec64 *ts) > { > struct igb_adapter *igb = container_of(ptp, struct igb_adapter, > ptp_caps); > @@ -340,7 +341,7 @@ static int igb_ptp_settime_82576(struct ptp_clock_info *ptp, > } > > static int igb_ptp_settime_i210(struct ptp_clock_info *ptp, > - const struct timespec *ts) > + const struct timespec64 *ts) > { > struct igb_adapter *igb = container_of(ptp, struct igb_adapter, > ptp_caps); > @@ -627,11 +628,11 @@ static void igb_ptp_overflow_check(struct work_struct *work) > { > struct igb_adapter *igb = > container_of(work, struct igb_adapter, ptp_overflow_work.work); > - struct timespec ts; > + struct timespec64 ts; > > - igb->ptp_caps.gettime(&igb->ptp_caps, &ts); > + igb->ptp_caps.gettime64(&igb->ptp_caps, &ts); > > - pr_debug("igb overflow check at %ld.%09lu\n", ts.tv_sec, ts.tv_nsec); > + pr_debug("igb overflow check at %lld.%09lu\n", ts.tv_sec, ts.tv_nsec); > > schedule_delayed_work(&igb->ptp_overflow_work, > IGB_SYSTIM_OVERFLOW_PERIOD); > @@ -989,8 +990,8 @@ void igb_ptp_init(struct igb_adapter *adapter) > adapter->ptp_caps.pps = 0; > adapter->ptp_caps.adjfreq = igb_ptp_adjfreq_82576; > adapter->ptp_caps.adjtime = igb_ptp_adjtime_82576; > - adapter->ptp_caps.gettime = igb_ptp_gettime_82576; > - adapter->ptp_caps.settime = igb_ptp_settime_82576; > + adapter->ptp_caps.gettime64 = igb_ptp_gettime_82576; > + adapter->ptp_caps.settime64 = igb_ptp_settime_82576; > adapter->ptp_caps.enable = igb_ptp_feature_enable; > adapter->cc.read = igb_ptp_read_82576; > adapter->cc.mask = CYCLECOUNTER_MASK(64); > @@ -1009,8 +1010,8 @@ void igb_ptp_init(struct igb_adapter *adapter) > adapter->ptp_caps.pps = 0; > adapter->ptp_caps.adjfreq = igb_ptp_adjfreq_82580; > adapter->ptp_caps.adjtime = igb_ptp_adjtime_82576; > - adapter->ptp_caps.gettime = igb_ptp_gettime_82576; > - adapter->ptp_caps.settime = igb_ptp_settime_82576; > + adapter->ptp_caps.gettime64 = igb_ptp_gettime_82576; > + adapter->ptp_caps.settime64 = igb_ptp_settime_82576; > adapter->ptp_caps.enable = igb_ptp_feature_enable; > adapter->cc.read = igb_ptp_read_82580; > adapter->cc.mask = CYCLECOUNTER_MASK(IGB_NBITS_82580); > @@ -1038,8 +1039,8 @@ void igb_ptp_init(struct igb_adapter *adapter) > adapter->ptp_caps.pin_config = adapter->sdp_config; > adapter->ptp_caps.adjfreq = igb_ptp_adjfreq_82580; > adapter->ptp_caps.adjtime = igb_ptp_adjtime_i210; > - adapter->ptp_caps.gettime = igb_ptp_gettime_i210; > - adapter->ptp_caps.settime = igb_ptp_settime_i210; > + adapter->ptp_caps.gettime64 = igb_ptp_gettime_i210; > + adapter->ptp_caps.settime64 = igb_ptp_settime_i210; > adapter->ptp_caps.enable = igb_ptp_feature_enable_i210; > adapter->ptp_caps.verify = igb_ptp_verify_pin; > /* Enable the timer functions by clearing bit 31. */ > @@ -1057,7 +1058,7 @@ void igb_ptp_init(struct igb_adapter *adapter) > > /* Initialize the clock and overflow work for devices that need it. */ > if ((hw->mac.type == e1000_i210) || (hw->mac.type == e1000_i211)) { > - struct timespec ts = ktime_to_timespec(ktime_get_real()); > + struct timespec64 ts = ktime_to_timespec64(ktime_get_real()); > > igb_ptp_settime_i210(&adapter->ptp_caps, &ts); > } else { > @@ -1171,7 +1172,7 @@ void igb_ptp_reset(struct igb_adapter *adapter) > > /* Re-initialize the timer. */ > if ((hw->mac.type == e1000_i210) || (hw->mac.type == e1000_i211)) { > - struct timespec ts = ktime_to_timespec(ktime_get_real()); > + struct timespec64 ts = ktime_to_timespec64(ktime_get_real()); > > igb_ptp_write_i210(adapter, &ts); > } else { {.n++%ݶw{.n+{G{ayʇڙ,jfhz_(階ݢj"mG?&~iOzv^m ?I From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Keller, Jacob E" Subject: Re: [PATCH net-next V3 13/23] ptp: igb: convert to the 64 bit get/set time methods. Date: Tue, 31 Mar 2015 21:08:10 +0000 Message-ID: <1427836090.16312.27.camel@intel.com> References: <67fa71b28f96b222c8027b49efee4144b3754bf7.1427662907.git.richardcochran@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: "thomas.lendacky@amd.com" , "linux-kernel@vger.kernel.org" , "baolin.wang@linaro.org" , "b45643@freescale.com" , "sshah@solarflare.com" , "amirv@mellanox.com" , "ben@decadent.org.uk" , "sonic.zhang@analog.com" , "peppe.cavallaro@st.com" , "Allan, Bruce W" , "rayagond@vayavyalabs.com" , "tglx@linutronix.de" , "ariel.elior@qlogic.com" , "cmetcalf@ezchip.com" , "Vick, Matthew" , "linux-net-drivers@solarflare.com" , "arnd@linaro.org" , "Frank.Li@freescale.com" Return-path: In-Reply-To: <67fa71b28f96b222c8027b49efee4144b3754bf7.1427662907.git.richardcochran@gmail.com> Content-Language: en-US Content-ID: Sender: linux-kernel-owner@vger.kernel.org List-Id: netdev.vger.kernel.org T24gU3VuLCAyMDE1LTAzLTI5IGF0IDIzOjEyICswMjAwLCBSaWNoYXJkIENvY2hyYW4gd3JvdGU6 DQo+IEZvciB0aGUgODI1NzYsIHRoZSBkcml2ZXIncyBjbG9jayBpcyBpbXBsZW1lbnRlZCB1c2lu ZyBhIHRpbWVjb3VudGVyLA0KPiBhbmQgc28gd2l0aCB0aGlzIHBhdGNoIHRoYXQgZGV2aWNlIGlz IHJlYWR5IGZvciB0aGUgeWVhciAyMDM4Lg0KPiANCj4gSG93ZXZlciwgaW4gdGhlIGNhc2Ugb2Yg dGhlIGkyMTAsIHRoZSBkZXZpY2Ugc3RvcmVzIHRoZSBudW1iZXIgb2YNCj4gc2Vjb25kcyBpbiBh IDMyIGJpdCByZWdpc3Rlci4gIFRoZXJlZm9yZSwgbW9yZSB3b3JrIGlzIG5lZWRlZCBvbiB0aGlz DQo+IGRyaXZlciBiZWZvcmUgdGhlIHllYXIgMjAzOCBjb21lcyBhcm91bmQuDQo+IA0KPiBDb21w aWxlIHRlc3RlZCBvbmx5Lg0KDQpJIGFzc3VtZSB3ZSB3b3VsZCB3YW50IHRvIHVzZSBhIHRpbWUg Y291bnRlciB3cmFwcGVyIGhlcmUgdG8gcmVzb2x2ZQ0KdGhpcyBpc3N1ZT8NCg0KUmVnYXJkcywN Ckpha2UNCg0KPiANCj4gU2lnbmVkLW9mZi1ieTogUmljaGFyZCBDb2NocmFuIDxyaWNoYXJkY29j aHJhbkBnbWFpbC5jb20+DQo+IEFja2VkLWJ5OiBKZWZmIEtpcnNoZXIgPGplZmZyZXkudC5raXJz aGVyQGludGVsLmNvbT4NCj4gLS0tDQo+ICBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2Iv aWdiX3B0cC5jIHwgICA0MSArKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0NCj4gIDEgZmls ZSBjaGFuZ2VkLCAyMSBpbnNlcnRpb25zKCspLCAyMCBkZWxldGlvbnMoLSkNCj4gDQo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX3B0cC5jIGIvZHJpdmVy cy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl9wdHAuYw0KPiBpbmRleCA1MmQwMWI4Li4wMzQ4 YjdlIDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX3B0 cC5jDQo+ICsrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfcHRwLmMNCj4g QEAgLTExNiw3ICsxMTYsOCBAQCBzdGF0aWMgY3ljbGVfdCBpZ2JfcHRwX3JlYWRfODI1ODAoY29u c3Qgc3RydWN0IGN5Y2xlY291bnRlciAqY2MpDQo+ICB9DQo+ICANCj4gIC8qIFNZU1RJTSByZWFk IGFjY2VzcyBmb3IgSTIxMC9JMjExICovDQo+IC1zdGF0aWMgdm9pZCBpZ2JfcHRwX3JlYWRfaTIx MChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCB0aW1lc3BlYyAqdHMpDQo+ICtz dGF0aWMgdm9pZCBpZ2JfcHRwX3JlYWRfaTIxMChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIs DQo+ICsJCQkgICAgICBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpDQo+ICB7DQo+ICAJc3RydWN0IGUx MDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsNCj4gIAl1MzIgc2VjLCBuc2VjOw0KPiBAQCAtMTM0 LDcgKzEzNSw3IEBAIHN0YXRpYyB2b2lkIGlnYl9wdHBfcmVhZF9pMjEwKHN0cnVjdCBpZ2JfYWRh cHRlciAqYWRhcHRlciwgc3RydWN0IHRpbWVzcGVjICp0cykNCj4gIH0NCj4gIA0KPiAgc3RhdGlj IHZvaWQgaWdiX3B0cF93cml0ZV9pMjEwKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwNCj4g LQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnRzKQ0KPiArCQkJICAgICAgIGNvbnN0 IHN0cnVjdCB0aW1lc3BlYzY0ICp0cykNCj4gIHsNCj4gIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0g JmFkYXB0ZXItPmh3Ow0KPiAgDQo+IEBAIC0yNjksMTMgKzI3MCwxMyBAQCBzdGF0aWMgaW50IGln Yl9wdHBfYWRqdGltZV9pMjEwKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzNjQgZGVsdGEp DQo+ICAJc3RydWN0IGlnYl9hZGFwdGVyICppZ2IgPSBjb250YWluZXJfb2YocHRwLCBzdHJ1Y3Qg aWdiX2FkYXB0ZXIsDQo+ICAJCQkJCSAgICAgICBwdHBfY2Fwcyk7DQo+ICAJdW5zaWduZWQgbG9u ZyBmbGFnczsNCj4gLQlzdHJ1Y3QgdGltZXNwZWMgbm93LCB0aGVuID0gbnNfdG9fdGltZXNwZWMo ZGVsdGEpOw0KPiArCXN0cnVjdCB0aW1lc3BlYzY0IG5vdywgdGhlbiA9IG5zX3RvX3RpbWVzcGVj NjQoZGVsdGEpOw0KPiAgDQo+ICAJc3Bpbl9sb2NrX2lycXNhdmUoJmlnYi0+dG1yZWdfbG9jaywg ZmxhZ3MpOw0KPiAgDQo+ICAJaWdiX3B0cF9yZWFkX2kyMTAoaWdiLCAmbm93KTsNCj4gLQlub3cg PSB0aW1lc3BlY19hZGQobm93LCB0aGVuKTsNCj4gLQlpZ2JfcHRwX3dyaXRlX2kyMTAoaWdiLCAo Y29uc3Qgc3RydWN0IHRpbWVzcGVjICopJm5vdyk7DQo+ICsJbm93ID0gdGltZXNwZWM2NF9hZGQo bm93LCB0aGVuKTsNCj4gKwlpZ2JfcHRwX3dyaXRlX2kyMTAoaWdiLCAoY29uc3Qgc3RydWN0IHRp bWVzcGVjNjQgKikmbm93KTsNCj4gIA0KPiAgCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlnYi0+ dG1yZWdfbG9jaywgZmxhZ3MpOw0KPiAgDQo+IEBAIC0yODMsNyArMjg0LDcgQEAgc3RhdGljIGlu dCBpZ2JfcHRwX2FkanRpbWVfaTIxMChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRl bHRhKQ0KPiAgfQ0KPiAgDQo+ICBzdGF0aWMgaW50IGlnYl9wdHBfZ2V0dGltZV84MjU3NihzdHJ1 Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwNCj4gLQkJCQkgc3RydWN0IHRpbWVzcGVjICp0cykNCj4g KwkJCQkgc3RydWN0IHRpbWVzcGVjNjQgKnRzKQ0KPiAgew0KPiAgCXN0cnVjdCBpZ2JfYWRhcHRl ciAqaWdiID0gY29udGFpbmVyX29mKHB0cCwgc3RydWN0IGlnYl9hZGFwdGVyLA0KPiAgCQkJCQkg ICAgICAgcHRwX2NhcHMpOw0KPiBAQCAtMzA0LDcgKzMwNSw3IEBAIHN0YXRpYyBpbnQgaWdiX3B0 cF9nZXR0aW1lXzgyNTc2KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLA0KPiAgfQ0KPiAgDQo+ ICBzdGF0aWMgaW50IGlnYl9wdHBfZ2V0dGltZV9pMjEwKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAq cHRwLA0KPiAtCQkJCXN0cnVjdCB0aW1lc3BlYyAqdHMpDQo+ICsJCQkJc3RydWN0IHRpbWVzcGVj NjQgKnRzKQ0KPiAgew0KPiAgCXN0cnVjdCBpZ2JfYWRhcHRlciAqaWdiID0gY29udGFpbmVyX29m KHB0cCwgc3RydWN0IGlnYl9hZGFwdGVyLA0KPiAgCQkJCQkgICAgICAgcHRwX2NhcHMpOw0KPiBA QCAtMzIwLDcgKzMyMSw3IEBAIHN0YXRpYyBpbnQgaWdiX3B0cF9nZXR0aW1lX2kyMTAoc3RydWN0 IHB0cF9jbG9ja19pbmZvICpwdHAsDQo+ICB9DQo+ICANCj4gIHN0YXRpYyBpbnQgaWdiX3B0cF9z ZXR0aW1lXzgyNTc2KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLA0KPiAtCQkJCSBjb25zdCBz dHJ1Y3QgdGltZXNwZWMgKnRzKQ0KPiArCQkJCSBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMp DQo+ICB7DQo+ICAJc3RydWN0IGlnYl9hZGFwdGVyICppZ2IgPSBjb250YWluZXJfb2YocHRwLCBz dHJ1Y3QgaWdiX2FkYXB0ZXIsDQo+ICAJCQkJCSAgICAgICBwdHBfY2Fwcyk7DQo+IEBAIC0zNDAs NyArMzQxLDcgQEAgc3RhdGljIGludCBpZ2JfcHRwX3NldHRpbWVfODI1NzYoc3RydWN0IHB0cF9j bG9ja19pbmZvICpwdHAsDQo+ICB9DQo+ICANCj4gIHN0YXRpYyBpbnQgaWdiX3B0cF9zZXR0aW1l X2kyMTAoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsDQo+IC0JCQkJY29uc3Qgc3RydWN0IHRp bWVzcGVjICp0cykNCj4gKwkJCQljb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpDQo+ICB7DQo+ ICAJc3RydWN0IGlnYl9hZGFwdGVyICppZ2IgPSBjb250YWluZXJfb2YocHRwLCBzdHJ1Y3QgaWdi X2FkYXB0ZXIsDQo+ICAJCQkJCSAgICAgICBwdHBfY2Fwcyk7DQo+IEBAIC02MjcsMTEgKzYyOCwx MSBAQCBzdGF0aWMgdm9pZCBpZ2JfcHRwX292ZXJmbG93X2NoZWNrKHN0cnVjdCB3b3JrX3N0cnVj dCAqd29yaykNCj4gIHsNCj4gIAlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmlnYiA9DQo+ICAJCWNvbnRh aW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWdiX2FkYXB0ZXIsIHB0cF9vdmVyZmxvd193b3JrLndvcmsp Ow0KPiAtCXN0cnVjdCB0aW1lc3BlYyB0czsNCj4gKwlzdHJ1Y3QgdGltZXNwZWM2NCB0czsNCj4g IA0KPiAtCWlnYi0+cHRwX2NhcHMuZ2V0dGltZSgmaWdiLT5wdHBfY2FwcywgJnRzKTsNCj4gKwlp Z2ItPnB0cF9jYXBzLmdldHRpbWU2NCgmaWdiLT5wdHBfY2FwcywgJnRzKTsNCj4gIA0KPiAtCXBy X2RlYnVnKCJpZ2Igb3ZlcmZsb3cgY2hlY2sgYXQgJWxkLiUwOWx1XG4iLCB0cy50dl9zZWMsIHRz LnR2X25zZWMpOw0KPiArCXByX2RlYnVnKCJpZ2Igb3ZlcmZsb3cgY2hlY2sgYXQgJWxsZC4lMDls dVxuIiwgdHMudHZfc2VjLCB0cy50dl9uc2VjKTsNCj4gIA0KPiAgCXNjaGVkdWxlX2RlbGF5ZWRf d29yaygmaWdiLT5wdHBfb3ZlcmZsb3dfd29yaywNCj4gIAkJCSAgICAgIElHQl9TWVNUSU1fT1ZF UkZMT1dfUEVSSU9EKTsNCj4gQEAgLTk4OSw4ICs5OTAsOCBAQCB2b2lkIGlnYl9wdHBfaW5pdChz dHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpDQo+ICAJCWFkYXB0ZXItPnB0cF9jYXBzLnBwcyA9 IDA7DQo+ICAJCWFkYXB0ZXItPnB0cF9jYXBzLmFkamZyZXEgPSBpZ2JfcHRwX2FkamZyZXFfODI1 NzY7DQo+ICAJCWFkYXB0ZXItPnB0cF9jYXBzLmFkanRpbWUgPSBpZ2JfcHRwX2FkanRpbWVfODI1 NzY7DQo+IC0JCWFkYXB0ZXItPnB0cF9jYXBzLmdldHRpbWUgPSBpZ2JfcHRwX2dldHRpbWVfODI1 NzY7DQo+IC0JCWFkYXB0ZXItPnB0cF9jYXBzLnNldHRpbWUgPSBpZ2JfcHRwX3NldHRpbWVfODI1 NzY7DQo+ICsJCWFkYXB0ZXItPnB0cF9jYXBzLmdldHRpbWU2NCA9IGlnYl9wdHBfZ2V0dGltZV84 MjU3NjsNCj4gKwkJYWRhcHRlci0+cHRwX2NhcHMuc2V0dGltZTY0ID0gaWdiX3B0cF9zZXR0aW1l XzgyNTc2Ow0KPiAgCQlhZGFwdGVyLT5wdHBfY2Fwcy5lbmFibGUgPSBpZ2JfcHRwX2ZlYXR1cmVf ZW5hYmxlOw0KPiAgCQlhZGFwdGVyLT5jYy5yZWFkID0gaWdiX3B0cF9yZWFkXzgyNTc2Ow0KPiAg CQlhZGFwdGVyLT5jYy5tYXNrID0gQ1lDTEVDT1VOVEVSX01BU0soNjQpOw0KPiBAQCAtMTAwOSw4 ICsxMDEwLDggQEAgdm9pZCBpZ2JfcHRwX2luaXQoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVy KQ0KPiAgCQlhZGFwdGVyLT5wdHBfY2Fwcy5wcHMgPSAwOw0KPiAgCQlhZGFwdGVyLT5wdHBfY2Fw cy5hZGpmcmVxID0gaWdiX3B0cF9hZGpmcmVxXzgyNTgwOw0KPiAgCQlhZGFwdGVyLT5wdHBfY2Fw cy5hZGp0aW1lID0gaWdiX3B0cF9hZGp0aW1lXzgyNTc2Ow0KPiAtCQlhZGFwdGVyLT5wdHBfY2Fw cy5nZXR0aW1lID0gaWdiX3B0cF9nZXR0aW1lXzgyNTc2Ow0KPiAtCQlhZGFwdGVyLT5wdHBfY2Fw cy5zZXR0aW1lID0gaWdiX3B0cF9zZXR0aW1lXzgyNTc2Ow0KPiArCQlhZGFwdGVyLT5wdHBfY2Fw cy5nZXR0aW1lNjQgPSBpZ2JfcHRwX2dldHRpbWVfODI1NzY7DQo+ICsJCWFkYXB0ZXItPnB0cF9j YXBzLnNldHRpbWU2NCA9IGlnYl9wdHBfc2V0dGltZV84MjU3NjsNCj4gIAkJYWRhcHRlci0+cHRw X2NhcHMuZW5hYmxlID0gaWdiX3B0cF9mZWF0dXJlX2VuYWJsZTsNCj4gIAkJYWRhcHRlci0+Y2Mu cmVhZCA9IGlnYl9wdHBfcmVhZF84MjU4MDsNCj4gIAkJYWRhcHRlci0+Y2MubWFzayA9IENZQ0xF Q09VTlRFUl9NQVNLKElHQl9OQklUU184MjU4MCk7DQo+IEBAIC0xMDM4LDggKzEwMzksOCBAQCB2 b2lkIGlnYl9wdHBfaW5pdChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpDQo+ICAJCWFkYXB0 ZXItPnB0cF9jYXBzLnBpbl9jb25maWcgPSBhZGFwdGVyLT5zZHBfY29uZmlnOw0KPiAgCQlhZGFw dGVyLT5wdHBfY2Fwcy5hZGpmcmVxID0gaWdiX3B0cF9hZGpmcmVxXzgyNTgwOw0KPiAgCQlhZGFw dGVyLT5wdHBfY2Fwcy5hZGp0aW1lID0gaWdiX3B0cF9hZGp0aW1lX2kyMTA7DQo+IC0JCWFkYXB0 ZXItPnB0cF9jYXBzLmdldHRpbWUgPSBpZ2JfcHRwX2dldHRpbWVfaTIxMDsNCj4gLQkJYWRhcHRl ci0+cHRwX2NhcHMuc2V0dGltZSA9IGlnYl9wdHBfc2V0dGltZV9pMjEwOw0KPiArCQlhZGFwdGVy LT5wdHBfY2Fwcy5nZXR0aW1lNjQgPSBpZ2JfcHRwX2dldHRpbWVfaTIxMDsNCj4gKwkJYWRhcHRl ci0+cHRwX2NhcHMuc2V0dGltZTY0ID0gaWdiX3B0cF9zZXR0aW1lX2kyMTA7DQo+ICAJCWFkYXB0 ZXItPnB0cF9jYXBzLmVuYWJsZSA9IGlnYl9wdHBfZmVhdHVyZV9lbmFibGVfaTIxMDsNCj4gIAkJ YWRhcHRlci0+cHRwX2NhcHMudmVyaWZ5ID0gaWdiX3B0cF92ZXJpZnlfcGluOw0KPiAgCQkvKiBF bmFibGUgdGhlIHRpbWVyIGZ1bmN0aW9ucyBieSBjbGVhcmluZyBiaXQgMzEuICovDQo+IEBAIC0x MDU3LDcgKzEwNTgsNyBAQCB2b2lkIGlnYl9wdHBfaW5pdChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFk YXB0ZXIpDQo+ICANCj4gIAkvKiBJbml0aWFsaXplIHRoZSBjbG9jayBhbmQgb3ZlcmZsb3cgd29y ayBmb3IgZGV2aWNlcyB0aGF0IG5lZWQgaXQuICovDQo+ICAJaWYgKChody0+bWFjLnR5cGUgPT0g ZTEwMDBfaTIxMCkgfHwgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9pMjExKSkgew0KPiAtCQlzdHJ1 Y3QgdGltZXNwZWMgdHMgPSBrdGltZV90b190aW1lc3BlYyhrdGltZV9nZXRfcmVhbCgpKTsNCj4g KwkJc3RydWN0IHRpbWVzcGVjNjQgdHMgPSBrdGltZV90b190aW1lc3BlYzY0KGt0aW1lX2dldF9y ZWFsKCkpOw0KPiAgDQo+ICAJCWlnYl9wdHBfc2V0dGltZV9pMjEwKCZhZGFwdGVyLT5wdHBfY2Fw cywgJnRzKTsNCj4gIAl9IGVsc2Ugew0KPiBAQCAtMTE3MSw3ICsxMTcyLDcgQEAgdm9pZCBpZ2Jf cHRwX3Jlc2V0KHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcikNCj4gIA0KPiAgCS8qIFJlLWlu aXRpYWxpemUgdGhlIHRpbWVyLiAqLw0KPiAgCWlmICgoaHctPm1hYy50eXBlID09IGUxMDAwX2ky MTApIHx8IChody0+bWFjLnR5cGUgPT0gZTEwMDBfaTIxMSkpIHsNCj4gLQkJc3RydWN0IHRpbWVz cGVjIHRzID0ga3RpbWVfdG9fdGltZXNwZWMoa3RpbWVfZ2V0X3JlYWwoKSk7DQo+ICsJCXN0cnVj dCB0aW1lc3BlYzY0IHRzID0ga3RpbWVfdG9fdGltZXNwZWM2NChrdGltZV9nZXRfcmVhbCgpKTsN Cj4gIA0KPiAgCQlpZ2JfcHRwX3dyaXRlX2kyMTAoYWRhcHRlciwgJnRzKTsNCj4gIAl9IGVsc2Ug ew0KDQo=