Hi.
I implemented vcpu_ptc_l() which is needed to boot dom0 on ski.
Is there any reason why it hasn't been implemented?
I didn't see difficulties to implement it. Do I miss anything?
Signed-off-by Isaku Yamahata <yamahata@xxxxxxxxxxxxx>
--
diff -r c4a86ad93e49 xen/arch/ia64/linux-xen/tlb.c
--- a/xen/arch/ia64/linux-xen/tlb.c Thu Dec 1 18:21:59 2005 +0900
+++ b/xen/arch/ia64/linux-xen/tlb.c Tue Dec 6 12:13:48 2005 +0900
@@ -110,6 +110,15 @@
}
void
+ia64_local_tlb_purge (unsigned long start, unsigned long end, unsigned long
nbits)
+{
+ do {
+ ia64_ptcl(start, (nbits << 2));
+ start += (1UL << nbits);
+ } while (start < end);
+}
+
+void
local_flush_tlb_all (void)
{
unsigned long i, j, flags, count0, count1, stride0, stride1, addr;
diff -r c4a86ad93e49 xen/arch/ia64/xen/vcpu.c
--- a/xen/arch/ia64/xen/vcpu.c Thu Dec 1 18:21:59 2005 +0900
+++ b/xen/arch/ia64/xen/vcpu.c Tue Dec 6 12:13:48 2005 +0900
@@ -1827,8 +1827,20 @@
IA64FAULT vcpu_ptc_l(VCPU *vcpu, UINT64 vadr, UINT64 addr_range)
{
- printk("vcpu_ptc_l: called, not implemented yet\n");
- return IA64_ILLOP_FAULT;
+ extern void ia64_local_tlb_purge (unsigned long start, unsigned long
end, unsigned long nbits);
+
+ //XXX FIXME: validate not flushing Xen addresses
+ if (IS_VMM_ADDRESS(vadr)) {
+ return IA64_ILLOP_FAULT;
+ }
+
+#ifdef VHPT_GLOBAL
+ vhpt_flush_address(vadr, addr_range);
+#endif
+ ia64_local_tlb_purge(vadr, vadr + addr_range, PAGE_SHIFT);
+ vcpu_purge_tr_entry(&PSCBX(vcpu,dtlb));
+ vcpu_purge_tr_entry(&PSCBX(vcpu,itlb));
+ return IA64_NO_FAULT;
}
// At privlvl=0, fc performs no access rights or protection key checks, while
--
yamahata
_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ia64-devel
|