#define MACHINE_FLAG_LPAR      (1UL << 12)
 #define MACHINE_FLAG_SPP       (1UL << 13)
 #define MACHINE_FLAG_TOPOLOGY  (1UL << 14)
-#define MACHINE_FLAG_STCKF     (1UL << 15)
 
 #define MACHINE_IS_VM          (S390_lowcore.machine_flags & MACHINE_FLAG_VM)
 #define MACHINE_IS_KVM         (S390_lowcore.machine_flags & MACHINE_FLAG_KVM)
 #define MACHINE_HAS_PFMF       (0)
 #define MACHINE_HAS_SPP                (0)
 #define MACHINE_HAS_TOPOLOGY   (0)
-#define MACHINE_HAS_STCKF      (0)
 #else /* __s390x__ */
 #define MACHINE_HAS_IEEE       (1)
 #define MACHINE_HAS_CSP                (1)
 #define MACHINE_HAS_PFMF       (S390_lowcore.machine_flags & MACHINE_FLAG_PFMF)
 #define MACHINE_HAS_SPP                (S390_lowcore.machine_flags & MACHINE_FLAG_SPP)
 #define MACHINE_HAS_TOPOLOGY   (S390_lowcore.machine_flags & MACHINE_FLAG_TOPOLOGY)
-#define MACHINE_HAS_STCKF      (S390_lowcore.machine_flags & MACHINE_FLAG_STCKF)
 #endif /* __s390x__ */
 
 #define ZFCPDUMP_HSA_SIZE      (32UL<<20)
 
 
 typedef unsigned long long cycles_t;
 
-static inline unsigned long long get_clock (void)
+static inline unsigned long long get_clock(void)
 {
        unsigned long long clk;
 
+#if defined(CONFIG_64BIT) && !defined(CONFIG_MARCH_Z900) && !defined(CONFIG_MARCH_Z990)
+       asm volatile(".insn s,0xb27c0000,%0" : "=Q" (clk) : : "cc");
+#else
        asm volatile("stck %0" : "=Q" (clk) : : "cc");
+#endif
        return clk;
 }
 
        asm volatile("stcke %0" : "=Q" (*clk) : : "cc");
 }
 
-static inline unsigned long long get_clock_fast(void)
-{
-       unsigned long long clk;
-
-       if (MACHINE_HAS_STCKF)
-               asm volatile(".insn     s,0xb27c0000,%0" : "=Q" (clk) : : "cc");
-       else
-               clk = get_clock();
-       return clk;
-}
-
 static inline unsigned long long get_clock_xt(void)
 {
        unsigned char clk[16];
 
                S390_lowcore.machine_flags |= MACHINE_FLAG_MVCOS;
        if (test_facility(40))
                S390_lowcore.machine_flags |= MACHINE_FLAG_SPP;
-       if (test_facility(25))
-               S390_lowcore.machine_flags |= MACHINE_FLAG_STCKF;
 #endif
 }
 
 
        ssm     __LC_RETURN_PSW
        .endm
 
+       .macro STCK savearea
+#if defined(CONFIG_64BIT) && !defined(CONFIG_MARCH_Z900) && !defined(CONFIG_MARCH_Z990)
+       .insn   s,0xb27c0000,\savearea          # store clock fast
+#else
+       .insn   s,0xb2050000,\savearea          # store clock
+#endif
+       .endm
+
        .section .kprobes.text, "ax"
 
 /*
  * IO interrupt handler routine
  */
 ENTRY(io_int_handler)
-       stck    __LC_INT_CLOCK
+       STCK    __LC_INT_CLOCK
        stpt    __LC_ASYNC_ENTER_TIMER
        stmg    %r8,%r15,__LC_SAVE_AREA_ASYNC
        lg      %r10,__LC_LAST_BREAK
  * External interrupt handler routine
  */
 ENTRY(ext_int_handler)
-       stck    __LC_INT_CLOCK
+       STCK    __LC_INT_CLOCK
        stpt    __LC_ASYNC_ENTER_TIMER
        stmg    %r8,%r15,__LC_SAVE_AREA_ASYNC
        lg      %r10,__LC_LAST_BREAK
        larl    %r1,psw_idle_lpsw+4
        stg     %r1,__SF_EMPTY+8(%r15)
        larl    %r1,.Lvtimer_max
-       stck    __IDLE_ENTER(%r2)
+       STCK    __IDLE_ENTER(%r2)
        ltr     %r5,%r5
        stpt    __VQ_IDLE_ENTER(%r3)
        jz      psw_idle_lpsw
  * Machine check handler routines
  */
 ENTRY(mcck_int_handler)
-       stck    __LC_MCCK_CLOCK
+       STCK    __LC_MCCK_CLOCK
        la      %r1,4095                # revalidate r1
        spt     __LC_CPU_TIMER_SAVE_AREA-4095(%r1)      # revalidate cpu timer
        lmg     %r0,%r15,__LC_GPREGS_SAVE_AREA-4095(%r1)# revalidate gprs
 
        int count, stop;
        unsigned char state = 0;
 
-       q->timestamp = get_clock_fast();
+       q->timestamp = get_clock();
 
        /*
         * Don't check 128 buffers, as otherwise qdio_inbound_q_moved
        int count, stop;
        unsigned char state = 0;
 
-       q->timestamp = get_clock_fast();
+       q->timestamp = get_clock();
 
        if (need_siga_sync(q))
                if (((queue_type(q) != QDIO_IQDIO_QFMT) &&