Thread (78 messages) 78 messages, 6 authors, 2010-06-29

Re: [PATCH 18/26] KVM: PPC: KVM PV guest stubs

From: Alexander Graf <hidden>
Date: 2010-06-27 09:47:35
Also in: kvm

Am 27.06.2010 um 10:28 schrieb Avi Kivity [off-list ref]:
On 06/26/2010 02:25 AM, Alexander Graf wrote:
quoted
We will soon start and replace instructions from the text section  
with
other, paravirtualized versions. To ease the readability of those  
patches
I split out the generic looping and magic page mapping code out.

This patch still only contains stubs. But at least it loops through  
the
text section :).


+
+static void kvm_check_ins(u32 *inst)
+{
+    u32 _inst = *inst;
+    u32 inst_no_rt = _inst&  ~KVM_MASK_RT;
+    u32 inst_rt = _inst&  KVM_MASK_RT;
+
+    switch (inst_no_rt) {
+    }
+
+    switch (_inst) {
+    }
+
+    flush_icache_range((ulong)inst, (ulong)inst + 4);
+}
Shouldn't we flush only if we patched something?
We introduce the patching in the next patches. This is only a  
preparation stub.
quoted
+
+static void kvm_use_magic_page(void)
+{
+    u32 *p;
+    u32 *start, *end;
+
+    /* Tell the host to map the magic page to -4096 on all CPUs */
+
+    on_each_cpu(kvm_map_magic_page, NULL, 1);
+
+    /* Now loop through all code and find instructions */
+
+    start = (void*)_stext;
+    end = (void*)_etext;
+
+    for (p = start; p<  end; p++)
+        kvm_check_ins(p);
+}
+
Or, flush the entire thing here.
I did that at first. It breaks. During the patching we may take  
interrupts (pahe faults for example) that contain just patched  
instructions. And really, hell breaks loose if we don't flush it  
immediately :). I was hoping at first a 32 bit replace would be atomic  
in cache, but the cpu tried to execute invalid instructions, so it  
must have gotten some intermediate state.

Alex
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help