From: Alexander Graf <agraf@suse.de>
To: QEMU-devel Developers <qemu-devel@nongnu.org>
Cc: Scott Wood <scottwood@freescale.com>, Elie Richa <richa@adacore.com>
Subject: [Qemu-devel] [PATCH 13/28] PPC: KVM: Add generic function to read host clockfreq
Date: Sat, 23 Jul 2011 12:49:57 +0200 [thread overview]
Message-ID: <1311418212-13356-14-git-send-email-agraf@suse.de> (raw)
In-Reply-To: <1311418212-13356-1-git-send-email-agraf@suse.de>
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 <agraf@suse.de>
---
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
next prev parent reply other threads:[~2011-07-23 10:50 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-07-23 10:49 [Qemu-devel] [PATCH 00/28] SMP support for MPC8544DS Alexander Graf
2011-07-23 10:49 ` [Qemu-devel] [PATCH 01/28] PPC: Move openpic to target specific code compilation Alexander Graf
2011-07-23 10:49 ` [Qemu-devel] [PATCH 02/28] PPC: Add CPU local MMIO regions to MPIC Alexander Graf
2011-07-23 10:49 ` [Qemu-devel] [PATCH 03/28] PPC: Extend MPIC MMIO range Alexander Graf
2011-07-23 10:49 ` [Qemu-devel] [PATCH 04/28] PPC: Fix IPI support in MPIC Alexander Graf
2011-07-23 10:49 ` [Qemu-devel] [PATCH 05/28] PPC: Set MPIC IDE for IPI to 0 Alexander Graf
2011-07-25 8:46 ` Elie Richa
2011-07-25 8:50 ` Alexander Graf
2011-07-23 10:49 ` [Qemu-devel] [PATCH 06/28] PPC: MPIC: Remove read functionality for WO registers Alexander Graf
2011-07-23 10:49 ` [Qemu-devel] [PATCH 07/28] PPC: MPIC: Fix CI bit definitions Alexander Graf
2011-07-23 10:49 ` [Qemu-devel] [PATCH 08/28] PPC: Bump MPIC up to 32 supported CPUs Alexander Graf
2011-07-23 10:49 ` [Qemu-devel] [PATCH 09/28] PPC: E500: create multiple envs Alexander Graf
2011-07-23 10:49 ` [Qemu-devel] [PATCH 10/28] PPC: E500: Generate IRQ lines for many CPUs Alexander Graf
2011-07-23 10:49 ` [Qemu-devel] [PATCH 11/28] device tree: add nop_node Alexander Graf
2011-07-23 10:49 ` [Qemu-devel] [PATCH 12/28] PPC: bamboo: Move host fdt copy to target Alexander Graf
2011-07-23 10:49 ` Alexander Graf [this message]
2011-07-23 10:49 ` [Qemu-devel] [PATCH 14/28] PPC: E500: Use generic kvm function for freq Alexander Graf
2011-07-23 10:49 ` [Qemu-devel] [PATCH 15/28] PPC: E500: Remove mpc8544_copy_soc_cell Alexander Graf
2011-07-23 10:50 ` [Qemu-devel] [PATCH 16/28] PPC: bamboo: Use kvm api for freq and clock frequencies Alexander Graf
2011-07-23 10:50 ` [Qemu-devel] [PATCH 17/28] PPC: KVM: Remove kvmppc_read_host_property Alexander Graf
2011-07-23 10:50 ` [Qemu-devel] [PATCH 18/28] PPC: KVM: Add stubs for kvm helper functions Alexander Graf
2011-07-23 10:50 ` [Qemu-devel] [PATCH 19/28] PPC: E500: Update freqs for all CPUs Alexander Graf
2011-07-23 10:50 ` [Qemu-devel] [PATCH 20/28] PPC: E500: Remove unneeded CPU nodes Alexander Graf
2011-07-23 10:50 ` [Qemu-devel] [PATCH 21/28] PPC: E500: Add PV spinning code Alexander Graf
2011-07-25 20:40 ` Scott Wood
2011-07-27 13:34 ` Alexander Graf
2011-07-27 16:18 ` Scott Wood
2011-07-23 10:50 ` [Qemu-devel] [PATCH 22/28] PPC: E500: Update cpu-release-addr property in cpu nodes Alexander Graf
2011-07-23 10:50 ` [Qemu-devel] [PATCH 23/28] device tree: add add_subnode command Alexander Graf
2011-07-23 10:50 ` [Qemu-devel] [PATCH 24/28] device tree: dont fail operations Alexander Graf
2011-07-23 10:50 ` [Qemu-devel] [PATCH 25/28] device tree: give dt more size Alexander Graf
2011-07-23 10:50 ` [Qemu-devel] [PATCH 26/28] MPC8544DS: Remove CPU nodes Alexander Graf
2011-07-23 10:50 ` [Qemu-devel] [PATCH 27/28] MPC8544DS: Generate CPU nodes on init Alexander Graf
2011-07-23 10:50 ` [Qemu-devel] [PATCH 28/28] PPC: E500: Bump CPU count to 15 Alexander Graf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1311418212-13356-14-git-send-email-agraf@suse.de \
--to=agraf@suse.de \
--cc=qemu-devel@nongnu.org \
--cc=richa@adacore.com \
--cc=scottwood@freescale.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).