Calculating a timeout from get_cycles() is a historical leftover without
any functional requirement.

Use ktime_get() instead.

Signed-off-by: Thomas Gleixner <[email protected]>
---
 drivers/misc/sgi-gru/gruhandles.c   |   20 ++++++++------------
 drivers/misc/sgi-gru/grukservices.c |    3 ++-
 drivers/misc/sgi-gru/grutlbpurge.c  |    5 ++---
 3 files changed, 12 insertions(+), 16 deletions(-)

--- a/drivers/misc/sgi-gru/gruhandles.c
+++ b/drivers/misc/sgi-gru/gruhandles.c
@@ -6,26 +6,22 @@
  */
 
 #include <linux/kernel.h>
+#include <linux/timekeeping.h>
 #include "gru.h"
 #include "grulib.h"
 #include "grutables.h"
 
-/* 10 sec */
 #include <linux/sync_core.h>
-#include <asm/tsc.h>
-#define GRU_OPERATION_TIMEOUT  ((cycles_t) tsc_khz*10*1000)
-#define CLKS2NSEC(c)           ((c) * 1000000 / tsc_khz)
+
+#define GRU_OPERATION_TIMEOUT_NSEC     (((ktime_t)10 * NSEC_PER_SEC))
 
 /* Extract the status field from a kernel handle */
 #define GET_MSEG_HANDLE_STATUS(h)      (((*(unsigned long *)(h)) >> 16) & 3)
 
 struct mcs_op_statistic mcs_op_statistics[mcsop_last];
 
-static void update_mcs_stats(enum mcs_op op, unsigned long clks)
+static void update_mcs_stats(enum mcs_op op, unsigned long nsec)
 {
-       unsigned long nsec;
-
-       nsec = CLKS2NSEC(clks);
        atomic_long_inc(&mcs_op_statistics[op].count);
        atomic_long_add(nsec, &mcs_op_statistics[op].total);
        if (mcs_op_statistics[op].max < nsec)
@@ -58,21 +54,21 @@ static void report_instruction_timeout(v
 
 static int wait_instruction_complete(void *h, enum mcs_op opc)
 {
+       ktime_t start_time = ktime_get();
        int status;
-       unsigned long start_time = get_cycles();
 
        while (1) {
                cpu_relax();
                status = GET_MSEG_HANDLE_STATUS(h);
                if (status != CCHSTATUS_ACTIVE)
                        break;
-               if (GRU_OPERATION_TIMEOUT < (get_cycles() - start_time)) {
+               if (GRU_OP_TIMEOUT_NSEC < (ktime_get() - start_time)) {
                        report_instruction_timeout(h);
-                       start_time = get_cycles();
+                       start_time = ktime_get();
                }
        }
        if (gru_options & OPT_STATS)
-               update_mcs_stats(opc, get_cycles() - start_time);
+               update_mcs_stats(opc, (unsigned long)(ktime_get() - 
start_time));
        return status;
 }
 
--- a/drivers/misc/sgi-gru/grukservices.c
+++ b/drivers/misc/sgi-gru/grukservices.c
@@ -20,6 +20,7 @@
 #include <linux/uaccess.h>
 #include <linux/delay.h>
 #include <linux/export.h>
+#include <linux/random.h>
 #include <asm/io_apic.h>
 #include "gru.h"
 #include "grulib.h"
@@ -1106,7 +1107,7 @@ static int quicktest3(unsigned long arg)
        int ret = 0;
 
        memset(buf2, 0, sizeof(buf2));
-       memset(buf1, get_cycles() & 255, sizeof(buf1));
+       memset(buf1, get_random_u32() & 255, sizeof(buf1));
        gru_copy_gpa(uv_gpa(buf2), uv_gpa(buf1), BUFSIZE);
        if (memcmp(buf1, buf2, BUFSIZE)) {
                printk(KERN_DEBUG "GRU:%d quicktest3 error\n", 
smp_processor_id());
--- a/drivers/misc/sgi-gru/grutlbpurge.c
+++ b/drivers/misc/sgi-gru/grutlbpurge.c
@@ -22,13 +22,12 @@
 #include <linux/delay.h>
 #include <linux/timex.h>
 #include <linux/srcu.h>
+#include <linux/random.h>
 #include <asm/processor.h>
 #include "gru.h"
 #include "grutables.h"
 #include <asm/uv/uv_hub.h>
 
-#define gru_random()   get_cycles()
-
 /* ---------------------------------- TLB Invalidation functions --------
  * get_tgh_handle
  *
@@ -49,7 +48,7 @@ static inline int get_off_blade_tgh(stru
        int n;
 
        n = GRU_NUM_TGH - gru->gs_tgh_first_remote;
-       n = gru_random() % n;
+       n = get_random_u32() % n;
        n += gru->gs_tgh_first_remote;
        return n;
 }


Reply via email to