Re: [PATCH 2/3] powerpc: Instrument Hypervisor Calls: add wrappers
From: Nathan Lynch <hidden>
Date: 2006-07-15 00:16:11
Mike Kravetz wrote:
+static inline void update_stats(unsigned long opcode, unsigned long t_before)
+{
+ unsigned long op_index = opcode >> 2;
+ struct hcall_stats *hs = &__get_cpu_var(hcall_stats[op_index]);
+
+ hs->total_time += (mftb() - t_before);
+ hs->num_calls++;
+}
+
+/*
+ * plpar_hcall wrapper
+ */
+long plpar_hcall(unsigned long opcode,
+ unsigned long arg1,
+ unsigned long arg2,
+ unsigned long arg3,
+ unsigned long arg4,
+ unsigned long *out1,
+ unsigned long *out2,
+ unsigned long *out3)
+{
+ long rc;
+ unsigned long t_before;
+
+ t_before = mftb();
+ rc = plpar_hcall_base(opcode, arg1, arg2, arg3, arg4, out1, out2, out3);
+
+ update_stats(opcode, t_before);
+ return rc;
+}Hmm, isn't it possible that the stats could be corrupted if we process an interrupt/softirq which does an hcall while the stats are being updated? Maybe it's not a show-stopper, but it seems to me that accuracy could suffer under some workloads.