drm/msm: avoid using 'timespec'

Message ID 20180618153959.2169325-1-arnd@arndb.de
State New
Headers show
Series
  • drm/msm: avoid using 'timespec'
Related show

Commit Message

Arnd Bergmann June 18, 2018, 3:39 p.m.
The timespec structure and associated interfaces are deprecated and will
be removed in the future because of the y2038 overflow.

The use of ktime_to_timespec() in timeout_to_jiffies() does not
suffer from that overflow, but is easy to avoid by just converting
the ktime_t into jiffies directly.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>

---
 drivers/gpu/drm/msm/msm_drv.h | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

-- 
2.9.0

--
To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Arnd Bergmann July 10, 2018, 9:27 p.m. | #1
On Tue, Jul 10, 2018 at 10:47 PM, Sean Paul <seanpaul@chromium.org> wrote:
> On Mon, Jun 18, 2018 at 05:39:42PM +0200, Arnd Bergmann wrote:

>> The timespec structure and associated interfaces are deprecated and will

>> be removed in the future because of the y2038 overflow.

>>

>> The use of ktime_to_timespec() in timeout_to_jiffies() does not

>> suffer from that overflow, but is easy to avoid by just converting

>> the ktime_t into jiffies directly.

>>

>> Signed-off-by: Arnd Bergmann <arnd@arndb.de>

>> ---

>>  drivers/gpu/drm/msm/msm_drv.h | 3 +--

>>  1 file changed, 1 insertion(+), 2 deletions(-)

>>

>> diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h

>> index b2da1fbf81e0..cc8977476a41 100644

>> --- a/drivers/gpu/drm/msm/msm_drv.h

>> +++ b/drivers/gpu/drm/msm/msm_drv.h

>> @@ -353,8 +353,7 @@ static inline unsigned long timeout_to_jiffies(const ktime_t *timeout)

>>               remaining_jiffies = 0;

>>       } else {

>>               ktime_t rem = ktime_sub(*timeout, now);

>> -             struct timespec ts = ktime_to_timespec(rem);

>> -             remaining_jiffies = timespec_to_jiffies(&ts);

>> +             remaining_jiffies = ktime_divns(rem, NSEC_PER_SEC / HZ);

>

> Do you need to wrap rem in ktime_to_ns() just to be safe?


The ktime_t interfaces are still defined to use an opaque type,
as previously it was a union that could be a seconds/nanoseconds
pair depending on the architecture. These days, ktime_t is just
a 64-bit integer, so div_u64() would work just as well as ktime_divns(),
but this is the documented way to do it.

      Arnd
--
To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h
index b2da1fbf81e0..cc8977476a41 100644
--- a/drivers/gpu/drm/msm/msm_drv.h
+++ b/drivers/gpu/drm/msm/msm_drv.h
@@ -353,8 +353,7 @@  static inline unsigned long timeout_to_jiffies(const ktime_t *timeout)
 		remaining_jiffies = 0;
 	} else {
 		ktime_t rem = ktime_sub(*timeout, now);
-		struct timespec ts = ktime_to_timespec(rem);
-		remaining_jiffies = timespec_to_jiffies(&ts);
+		remaining_jiffies = ktime_divns(rem, NSEC_PER_SEC / HZ);
 	}
 
 	return remaining_jiffies;