mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Avi Kivity <avi@redhat.com>
To: linux-kernel@vger.kernel.org
Cc: kvm@vger.kernel.org
Subject: [PATCH 25/43] KVM: ia64: Map in SN2 RTC registers to the VMM module
Date: Mon, 18 May 2009 12:22:47 +0300	[thread overview]
Message-ID: <1242638585-18470-26-git-send-email-avi@redhat.com> (raw)
In-Reply-To: <1242638585-18470-1-git-send-email-avi@redhat.com>

From: Jes Sorensen <jes@sgi.com>

On SN2, map in the SN2 RTC registers to the VMM module, needed for ITC
emulation.

Signed-off-by: Jes Sorensen <jes@sgi.com>
Acked-by: Xiantao Zhang <xiantao.zhang@intel.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
---
 arch/ia64/include/asm/kvm_host.h |    2 +
 arch/ia64/include/asm/pgtable.h  |    2 +
 arch/ia64/kvm/kvm-ia64.c         |   43 +++++++++++++++++++++++++++++++++----
 3 files changed, 42 insertions(+), 5 deletions(-)

diff --git a/arch/ia64/include/asm/kvm_host.h b/arch/ia64/include/asm/kvm_host.h
index 5608488..1243995 100644
--- a/arch/ia64/include/asm/kvm_host.h
+++ b/arch/ia64/include/asm/kvm_host.h
@@ -371,6 +371,7 @@ struct kvm_vcpu_arch {
 	int last_run_cpu;
 	int vmm_tr_slot;
 	int vm_tr_slot;
+	int sn_rtc_tr_slot;
 
 #define KVM_MP_STATE_RUNNABLE          0
 #define KVM_MP_STATE_UNINITIALIZED     1
@@ -465,6 +466,7 @@ struct kvm_arch {
 	unsigned long	vmm_init_rr;
 
 	int		online_vcpus;
+	int		is_sn2;
 
 	struct kvm_ioapic *vioapic;
 	struct kvm_vm_stat stat;
diff --git a/arch/ia64/include/asm/pgtable.h b/arch/ia64/include/asm/pgtable.h
index 7a9bff4..0a9cc73 100644
--- a/arch/ia64/include/asm/pgtable.h
+++ b/arch/ia64/include/asm/pgtable.h
@@ -146,6 +146,8 @@
 #define PAGE_GATE	__pgprot(__ACCESS_BITS | _PAGE_PL_0 | _PAGE_AR_X_RX)
 #define PAGE_KERNEL	__pgprot(__DIRTY_BITS  | _PAGE_PL_0 | _PAGE_AR_RWX)
 #define PAGE_KERNELRX	__pgprot(__ACCESS_BITS | _PAGE_PL_0 | _PAGE_AR_RX)
+#define PAGE_KERNEL_UC	__pgprot(__DIRTY_BITS  | _PAGE_PL_0 | _PAGE_AR_RWX | \
+				 _PAGE_MA_UC)
 
 # ifndef __ASSEMBLY__
 
diff --git a/arch/ia64/kvm/kvm-ia64.c b/arch/ia64/kvm/kvm-ia64.c
index acf43ec..14a3fab 100644
--- a/arch/ia64/kvm/kvm-ia64.c
+++ b/arch/ia64/kvm/kvm-ia64.c
@@ -41,6 +41,9 @@
 #include <asm/div64.h>
 #include <asm/tlb.h>
 #include <asm/elf.h>
+#include <asm/sn/addrs.h>
+#include <asm/sn/clksupport.h>
+#include <asm/sn/shub_mmr.h>
 
 #include "misc.h"
 #include "vti.h"
@@ -119,8 +122,7 @@ void kvm_arch_hardware_enable(void *garbage)
 	unsigned long saved_psr;
 	int slot;
 
-	pte = pte_val(mk_pte_phys(__pa(kvm_vmm_base),
-				PAGE_KERNEL));
+	pte = pte_val(mk_pte_phys(__pa(kvm_vmm_base), PAGE_KERNEL));
 	local_irq_save(saved_psr);
 	slot = ia64_itr_entry(0x3, KVM_VMM_BASE, pte, KVM_VMM_SHIFT);
 	local_irq_restore(saved_psr);
@@ -425,6 +427,23 @@ static int handle_switch_rr6(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
 	return 1;
 }
 
+static int kvm_sn2_setup_mappings(struct kvm_vcpu *vcpu)
+{
+	unsigned long pte, rtc_phys_addr, map_addr;
+	int slot;
+
+	map_addr = KVM_VMM_BASE + (1UL << KVM_VMM_SHIFT);
+	rtc_phys_addr = LOCAL_MMR_OFFSET | SH_RTC;
+	pte = pte_val(mk_pte_phys(rtc_phys_addr, PAGE_KERNEL_UC));
+	slot = ia64_itr_entry(0x3, map_addr, pte, PAGE_SHIFT);
+	vcpu->arch.sn_rtc_tr_slot = slot;
+	if (slot < 0) {
+		printk(KERN_ERR "Mayday mayday! RTC mapping failed!\n");
+		slot = 0;
+	}
+	return slot;
+}
+
 int kvm_emulate_halt(struct kvm_vcpu *vcpu)
 {
 
@@ -563,18 +582,29 @@ static int kvm_insert_vmm_mapping(struct kvm_vcpu *vcpu)
 	if (r < 0)
 		goto out;
 	vcpu->arch.vm_tr_slot = r;
+
+#if defined(CONFIG_IA64_SGI_SN2) || defined(CONFIG_IA64_GENERIC)
+	if (kvm->arch.is_sn2) {
+		r = kvm_sn2_setup_mappings(vcpu);
+		if (r < 0)
+			goto out;
+	}
+#endif
+
 	r = 0;
 out:
 	return r;
-
 }
 
 static void kvm_purge_vmm_mapping(struct kvm_vcpu *vcpu)
 {
-
+	struct kvm *kvm = vcpu->kvm;
 	ia64_ptr_entry(0x3, vcpu->arch.vmm_tr_slot);
 	ia64_ptr_entry(0x3, vcpu->arch.vm_tr_slot);
-
+#if defined(CONFIG_IA64_SGI_SN2) || defined(CONFIG_IA64_GENERIC)
+	if (kvm->arch.is_sn2)
+		ia64_ptr_entry(0x3, vcpu->arch.sn_rtc_tr_slot);
+#endif
 }
 
 static int kvm_vcpu_pre_transition(struct kvm_vcpu *vcpu)
@@ -800,6 +830,9 @@ struct  kvm *kvm_arch_create_vm(void)
 
 	if (IS_ERR(kvm))
 		return ERR_PTR(-ENOMEM);
+
+	kvm->arch.is_sn2 = ia64_platform_is("sn2");
+
 	kvm_init_vm(kvm);
 
 	kvm->arch.online_vcpus = 0;
-- 
1.6.0.6


  parent reply	other threads:[~2009-05-18  9:34 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-05-18  9:22 [PATCH 00/43] KVM updates for the 2.6.31 merge window (batch 1/4) Avi Kivity
2009-05-18  9:22 ` [PATCH 01/43] KVM: VMX: Don't use highmem pages for the msr and pio bitmaps Avi Kivity
2009-05-18  9:22 ` [PATCH 02/43] KVM: VMX: Don't intercept MSR_KERNEL_GS_BASE Avi Kivity
2009-05-18  9:22 ` [PATCH 03/43] KVM: Split IOAPIC structure Avi Kivity
2009-05-18  9:22 ` [PATCH 04/43] KVM: Unify the delivery of IOAPIC and MSI interrupts Avi Kivity
2009-05-18  9:22 ` [PATCH 05/43] KVM: Change API of kvm_ioapic_get_delivery_bitmask Avi Kivity
2009-05-18  9:22 ` [PATCH 06/43] KVM: Update intr delivery func to accept unsigned long* bitmap Avi Kivity
2009-05-18  9:22 ` [PATCH 07/43] KVM: bit ops for deliver_bitmap Avi Kivity
2009-05-18  9:22 ` [PATCH 08/43] KVM: Ioctls for init MSI-X entry Avi Kivity
2009-05-18  9:22 ` [PATCH 09/43] KVM: Add MSI-X interrupt injection logic Avi Kivity
2009-05-18  9:22 ` [PATCH 10/43] KVM: Enable MSI-X for KVM assigned device Avi Kivity
2009-05-18  9:22 ` [PATCH 11/43] KVM: x86: silence preempt warning on kvm_write_guest_time Avi Kivity
2009-05-18  9:22 ` [PATCH 12/43] KVM: x86: paravirt skip pit-through-ioapic boot check Avi Kivity
2009-05-18  9:22 ` [PATCH 13/43] KVM: declare ioapic functions only on affected hardware Avi Kivity
2009-05-18  9:22 ` [PATCH 14/43] KVM: PIT: remove unused scheduled variable Avi Kivity
2009-05-18  9:22 ` [PATCH 15/43] KVM: PIT: remove usage of count_load_time for channel 0 Avi Kivity
2009-05-18  9:22 ` [PATCH 16/43] KVM: unify part of generic timer handling Avi Kivity
2009-05-18  9:22 ` [PATCH 17/43] KVM: ia64: fix compilation error in kvm_get_lowest_prio_vcpu Avi Kivity
2009-05-18  9:22 ` [PATCH 18/43] KVM: Merge kvm_ioapic_get_delivery_bitmask into kvm_get_intr_delivery_bitmask Avi Kivity
2009-05-18  9:22 ` [PATCH 19/43] KVM: MMU: remove call to kvm_mmu_pte_write from walk_addr Avi Kivity
2009-05-18  9:22 ` [PATCH 20/43] KVM: APIC: kvm_apic_set_irq deliver all kinds of interrupts Avi Kivity
2009-05-18  9:22 ` [PATCH 21/43] KVM: ioapic/msi interrupt delivery consolidation Avi Kivity
2009-05-18  9:22 ` [PATCH 22/43] KVM: consolidate ioapic/ipi interrupt delivery logic Avi Kivity
2009-05-18  9:22 ` [PATCH 23/43] KVM: change the way how lowest priority vcpu is calculated Avi Kivity
2009-05-18  9:22 ` [PATCH 24/43] KVM: APIC: get rid of deliver_bitmask Avi Kivity
2009-05-18  9:22 ` Avi Kivity [this message]
2009-05-18  9:22 ` [PATCH 26/43] KVM: ia64: Create inline function kvm_get_itc() to centralize ITC reading Avi Kivity
2009-05-18  9:22 ` [PATCH 27/43] KVM: ia64: SN2 adjust emulated ITC frequency to match RTC frequency Avi Kivity
2009-05-18  9:22 ` [PATCH 28/43] KVM: ia64: Drop in SN2 replacement of fast path ITC emulation fault handler Avi Kivity
2009-05-18  9:22 ` [PATCH 29/43] KVM: make 'lapic_timer_ops' and 'kpit_ops' static Avi Kivity
2009-05-18  9:22 ` [PATCH 30/43] KVM: Device assignment framework rework Avi Kivity
2009-05-18  9:22 ` [PATCH 31/43] KVM: MMU: do not free active mmu pages in free_mmu_pages() Avi Kivity
2009-05-18  9:22 ` [PATCH 32/43] KVM: x86: Ignore reads to EVNTSEL MSRs Avi Kivity
2009-05-18  9:22 ` [PATCH 33/43] KVM: SVM: Remove duplicate code in svm_do_inject_vector() Avi Kivity
2009-05-18  9:22 ` [PATCH 34/43] KVM: reuse (pop|push)_irq from svm.c in vmx.c Avi Kivity
2009-05-18  9:22 ` [PATCH 35/43] KVM: VMX: Make module parameters readable Avi Kivity
2009-05-18  9:22 ` [PATCH 36/43] KVM: VMX: Rename kvm_handle_exit() to vmx_handle_exit() Avi Kivity
2009-05-18  9:22 ` [PATCH 37/43] KVM: VMX: Simplify module parameter names Avi Kivity
2009-05-18  9:23 ` [PATCH 38/43] KVM: VMX: Annotate module parameters as __read_mostly Avi Kivity
2009-05-18  9:23 ` [PATCH 39/43] KVM: VMX: Zero the vpid module parameter if vpid is not supported Avi Kivity
2009-05-18  9:23 ` [PATCH 40/43] KVM: VMX: Zero ept module parameter if ept is not present Avi Kivity
2009-05-18  9:23 ` [PATCH 41/43] KVM: VMX: Fold vm_need_ept() into callers Avi Kivity
2009-05-18  9:23 ` [PATCH 42/43] KVM: Timer event should not unconditionally unhalt vcpu Avi Kivity
2009-05-18  9:23 ` [PATCH 43/43] KVM: Fix interrupt unhalting a vcpu when it shouldn't Avi Kivity

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=1242638585-18470-26-git-send-email-avi@redhat.com \
    --to=avi@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    /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

all inboxes | Powered by JetHome®