iio: Convert to use timespec64 variables to get a time stamp

Message ID 8ab19b1665b51364c1f7e607f9a69a86fe084d0d.1528102909.git.baolin.wang@linaro.org
State New
Headers show
Series
  • iio: Convert to use timespec64 variables to get a time stamp
Related show

Commit Message

Baolin Wang June 4, 2018, 9:07 a.m.
The struct timespec is not y2038 safe on 32bit machines, thus this patch
converts to use timespec64 variables and related APIs to get a time stamp
for events etc.

Signed-off-by: Baolin Wang <baolin.wang@linaro.org>

---
 drivers/iio/industrialio-core.c |   18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

-- 
1.7.9.5

Comments

Arnd Bergmann June 4, 2018, 9:17 a.m. | #1
On Mon, Jun 4, 2018 at 11:07 AM, Baolin Wang <baolin.wang@linaro.org> wrote:
> The struct timespec is not y2038 safe on 32bit machines, thus this patch

> converts to use timespec64 variables and related APIs to get a time stamp

> for events etc.

>

> Signed-off-by: Baolin Wang <baolin.wang@linaro.org>


Hi Baolin,

I was waiting with this for the new header file cleanup to land. Thomas
merged that one recently, so now we should be able to do this more nicely:


diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c
index 19bdf3d2962a..fcbe92c34a3d 100644
--- a/drivers/iio/industrialio-core.c
+++ b/drivers/iio/industrialio-core.c
@@ -207,35 +207,27 @@ static int iio_device_set_clock(struct iio_dev
*indio_dev, clockid_t clock_id)
  */
 s64 iio_get_time_ns(const struct iio_dev *indio_dev)
 {
-       struct timespec tp;
+       struct timespec64 tp;

        switch (iio_device_get_clock(indio_dev)) {
        case CLOCK_REALTIME:
-               ktime_get_real_ts(&tp);
-               break;
+               return ktime_get_real_ns();
        case CLOCK_MONOTONIC:
-               ktime_get_ts(&tp);
-               break;
+               return ktime_get_ns();
        case CLOCK_MONOTONIC_RAW:
-               getrawmonotonic(&tp);
-               break;
+               return ktime_get_raw_ns();
        case CLOCK_REALTIME_COARSE:
-               tp = current_kernel_time();
-               break;
+               return ktime_to_ns(ktime_get_coarse_real());
        case CLOCK_MONOTONIC_COARSE:
-               tp = get_monotonic_coarse();
-               break;
+               ktime_get_coarse_ts64(&tp);
+               return timespec64_to_ns(&tp);
        case CLOCK_BOOTTIME:
-               get_monotonic_boottime(&tp);
-               break;
+               return ktime_get_boot_ns();
        case CLOCK_TAI:
-               timekeeping_clocktai(&tp);
-               break;
+               return ktime_get_tai_ns();
        default:
                BUG();
        }
-
-       return timespec_to_ns(&tp);
 }
 EXPORT_SYMBOL(iio_get_time_ns);
Baolin Wang June 4, 2018, 9:42 a.m. | #2
Hi Arnd,

On 4 June 2018 at 17:17, Arnd Bergmann <arnd@arndb.de> wrote:
> On Mon, Jun 4, 2018 at 11:07 AM, Baolin Wang <baolin.wang@linaro.org> wrote:

>> The struct timespec is not y2038 safe on 32bit machines, thus this patch

>> converts to use timespec64 variables and related APIs to get a time stamp

>> for events etc.

>>

>> Signed-off-by: Baolin Wang <baolin.wang@linaro.org>

>

> Hi Baolin,

>

> I was waiting with this for the new header file cleanup to land. Thomas

> merged that one recently, so now we should be able to do this more nicely:


Thanks to point this out. Yes, let's use your nice patch.

>

> diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c

> index 19bdf3d2962a..fcbe92c34a3d 100644

> --- a/drivers/iio/industrialio-core.c

> +++ b/drivers/iio/industrialio-core.c

> @@ -207,35 +207,27 @@ static int iio_device_set_clock(struct iio_dev

> *indio_dev, clockid_t clock_id)

>   */

>  s64 iio_get_time_ns(const struct iio_dev *indio_dev)

>  {

> -       struct timespec tp;

> +       struct timespec64 tp;

>

>         switch (iio_device_get_clock(indio_dev)) {

>         case CLOCK_REALTIME:

> -               ktime_get_real_ts(&tp);

> -               break;

> +               return ktime_get_real_ns();

>         case CLOCK_MONOTONIC:

> -               ktime_get_ts(&tp);

> -               break;

> +               return ktime_get_ns();

>         case CLOCK_MONOTONIC_RAW:

> -               getrawmonotonic(&tp);

> -               break;

> +               return ktime_get_raw_ns();

>         case CLOCK_REALTIME_COARSE:

> -               tp = current_kernel_time();

> -               break;

> +               return ktime_to_ns(ktime_get_coarse_real());

>         case CLOCK_MONOTONIC_COARSE:

> -               tp = get_monotonic_coarse();

> -               break;

> +               ktime_get_coarse_ts64(&tp);

> +               return timespec64_to_ns(&tp);

>         case CLOCK_BOOTTIME:

> -               get_monotonic_boottime(&tp);

> -               break;

> +               return ktime_get_boot_ns();

>         case CLOCK_TAI:

> -               timekeeping_clocktai(&tp);

> -               break;

> +               return ktime_get_tai_ns();

>         default:

>                 BUG();

>         }

> -

> -       return timespec_to_ns(&tp);

>  }

>  EXPORT_SYMBOL(iio_get_time_ns);




-- 
Baolin.wang
Best Regards

Patch

diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c
index 19bdf3d..8d2b93b 100644
--- a/drivers/iio/industrialio-core.c
+++ b/drivers/iio/industrialio-core.c
@@ -207,35 +207,35 @@  static int iio_device_set_clock(struct iio_dev *indio_dev, clockid_t clock_id)
  */
 s64 iio_get_time_ns(const struct iio_dev *indio_dev)
 {
-	struct timespec tp;
+	struct timespec64 tp;
 
 	switch (iio_device_get_clock(indio_dev)) {
 	case CLOCK_REALTIME:
-		ktime_get_real_ts(&tp);
+		ktime_get_real_ts64(&tp);
 		break;
 	case CLOCK_MONOTONIC:
-		ktime_get_ts(&tp);
+		ktime_get_ts64(&tp);
 		break;
 	case CLOCK_MONOTONIC_RAW:
-		getrawmonotonic(&tp);
+		getrawmonotonic64(&tp);
 		break;
 	case CLOCK_REALTIME_COARSE:
-		tp = current_kernel_time();
+		tp = current_kernel_time64();
 		break;
 	case CLOCK_MONOTONIC_COARSE:
-		tp = get_monotonic_coarse();
+		tp = get_monotonic_coarse64();
 		break;
 	case CLOCK_BOOTTIME:
-		get_monotonic_boottime(&tp);
+		get_monotonic_boottime64(&tp);
 		break;
 	case CLOCK_TAI:
-		timekeeping_clocktai(&tp);
+		timekeeping_clocktai64(&tp);
 		break;
 	default:
 		BUG();
 	}
 
-	return timespec_to_ns(&tp);
+	return timespec64_to_ns(&tp);
 }
 EXPORT_SYMBOL(iio_get_time_ns);