[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 13/28] PPC: KVM: Add generic function to read host c
From: |
Alexander Graf |
Subject: |
[Qemu-devel] [PATCH 13/28] PPC: KVM: Add generic function to read host clockfreq |
Date: |
Sat, 23 Jul 2011 12:49:57 +0200 |
We need to find out the host's clock-frequency when running on KVM, so
let's export a respective function.
Signed-off-by: Alexander Graf <address@hidden>
---
v1 -> v2:
- enable 64bit values
---
target-ppc/kvm.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++
target-ppc/kvm_ppc.h | 1 +
2 files changed, 68 insertions(+), 0 deletions(-)
diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c
index 21f35af..219e7a7 100644
--- a/target-ppc/kvm.c
+++ b/target-ppc/kvm.c
@@ -14,6 +14,7 @@
*
*/
+#include <dirent.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
@@ -38,6 +39,8 @@
do { } while (0)
#endif
+#define PROC_DEVTREE_CPU "/proc/device-tree/cpus/"
+
const KVMCapabilityInfo kvm_arch_required_capabilities[] = {
KVM_CAP_LAST_INFO
};
@@ -509,6 +512,70 @@ uint32_t kvmppc_get_tbfreq(void)
return retval;
}
+/* Try to find a device tree node for a CPU with clock-frequency property */
+static int kvmppc_find_cpu_dt(char *buf, int buf_len)
+{
+ struct dirent *dirp;
+ DIR *dp;
+
+ if ((dp = opendir(PROC_DEVTREE_CPU)) == NULL) {
+ printf("Can't open directory " PROC_DEVTREE_CPU "\n");
+ return -1;
+ }
+
+ buf[0] = '\0';
+ while ((dirp = readdir(dp)) != NULL) {
+ FILE *f;
+ snprintf(buf, buf_len, "%s%s/clock-frequency", PROC_DEVTREE_CPU,
+ dirp->d_name);
+ f = fopen(buf, "r");
+ if (f) {
+ snprintf(buf, buf_len, "%scpus/%s", PROC_DEVTREE_CPU,
dirp->d_name);
+ fclose(f);
+ break;
+ }
+ buf[0] = '\0';
+ }
+ closedir(dp);
+ if (buf[0] == '\0') {
+ printf("Unknown host!\n");
+ return -1;
+ }
+
+ return 0;
+}
+
+uint64_t kvmppc_get_clockfreq(void)
+{
+ char buf[512];
+ uint32_t tb[2];
+ FILE *f;
+ int len;
+
+ if (kvmppc_find_cpu_dt(buf, sizeof(buf))) {
+ return 0;
+ }
+
+ snprintf(buf, sizeof(buf), "%s/clock-frequency", buf);
+
+ f = fopen(buf, "rb");
+ if (!f) {
+ return -1;
+ }
+
+ len = fread(tb, sizeof(tb[0]), 2, f);
+ fclose(f);
+ switch (len) {
+ case 1:
+ /* freq is only a single cell */
+ return tb[0];
+ case 2:
+ return *(uint64_t*)tb;
+ }
+
+ return 0;
+}
+
int kvmppc_get_hypercall(CPUState *env, uint8_t *buf, int buf_len)
{
uint32_t *hc = (uint32_t*)buf;
diff --git a/target-ppc/kvm_ppc.h b/target-ppc/kvm_ppc.h
index 2f32249..7c08c0f 100644
--- a/target-ppc/kvm_ppc.h
+++ b/target-ppc/kvm_ppc.h
@@ -23,6 +23,7 @@ int kvmppc_read_host_property(const char *node_path, const
char *prop,
#endif
uint32_t kvmppc_get_tbfreq(void);
+uint64_t kvmppc_get_clockfreq(void);
int kvmppc_get_hypercall(CPUState *env, uint8_t *buf, int buf_len);
int kvmppc_set_interrupt(CPUState *env, int irq, int level);
--
1.6.0.2
- [Qemu-devel] [PATCH 00/28] SMP support for MPC8544DS, Alexander Graf, 2011/07/23
- [Qemu-devel] [PATCH 06/28] PPC: MPIC: Remove read functionality for WO registers, Alexander Graf, 2011/07/23
- [Qemu-devel] [PATCH 12/28] PPC: bamboo: Move host fdt copy to target, Alexander Graf, 2011/07/23
- [Qemu-devel] [PATCH 01/28] PPC: Move openpic to target specific code compilation, Alexander Graf, 2011/07/23
- [Qemu-devel] [PATCH 08/28] PPC: Bump MPIC up to 32 supported CPUs, Alexander Graf, 2011/07/23
- [Qemu-devel] [PATCH 14/28] PPC: E500: Use generic kvm function for freq, Alexander Graf, 2011/07/23
- [Qemu-devel] [PATCH 19/28] PPC: E500: Update freqs for all CPUs, Alexander Graf, 2011/07/23
- [Qemu-devel] [PATCH 09/28] PPC: E500: create multiple envs, Alexander Graf, 2011/07/23
- [Qemu-devel] [PATCH 13/28] PPC: KVM: Add generic function to read host clockfreq,
Alexander Graf <=
- [Qemu-devel] [PATCH 26/28] MPC8544DS: Remove CPU nodes, Alexander Graf, 2011/07/23
- [Qemu-devel] [PATCH 21/28] PPC: E500: Add PV spinning code, Alexander Graf, 2011/07/23
- [Qemu-devel] [PATCH 18/28] PPC: KVM: Add stubs for kvm helper functions, Alexander Graf, 2011/07/23
- [Qemu-devel] [PATCH 11/28] device tree: add nop_node, Alexander Graf, 2011/07/23
- [Qemu-devel] [PATCH 05/28] PPC: Set MPIC IDE for IPI to 0, Alexander Graf, 2011/07/23