Update to 3.4-final.
[linux-flexiantxendom0-3.2.10.git] / arch / powerpc / kvm / book3s_64_mmu_host.c
index 6f87f39..10fc8ec 100644 (file)
@@ -194,14 +194,14 @@ static struct kvmppc_sid_map *create_sid_map(struct kvm_vcpu *vcpu, u64 gvsid)
        backwards_map = !backwards_map;
 
        /* Uh-oh ... out of mappings. Let's flush! */
-       if (vcpu_book3s->vsid_next == vcpu_book3s->vsid_max) {
-               vcpu_book3s->vsid_next = vcpu_book3s->vsid_first;
+       if (vcpu_book3s->proto_vsid_next == vcpu_book3s->proto_vsid_max) {
+               vcpu_book3s->proto_vsid_next = vcpu_book3s->proto_vsid_first;
                memset(vcpu_book3s->sid_map, 0,
                       sizeof(struct kvmppc_sid_map) * SID_MAP_NUM);
                kvmppc_mmu_pte_flush(vcpu, 0, 0);
                kvmppc_mmu_flush_segments(vcpu);
        }
-       map->host_vsid = vcpu_book3s->vsid_next++;
+       map->host_vsid = vsid_scramble(vcpu_book3s->proto_vsid_next++, 256M);
 
        map->guest_vsid = gvsid;
        map->valid = true;
@@ -319,9 +319,10 @@ int kvmppc_mmu_init(struct kvm_vcpu *vcpu)
                return -1;
        vcpu3s->context_id[0] = err;
 
-       vcpu3s->vsid_max = ((vcpu3s->context_id[0] + 1) << USER_ESID_BITS) - 1;
-       vcpu3s->vsid_first = vcpu3s->context_id[0] << USER_ESID_BITS;
-       vcpu3s->vsid_next = vcpu3s->vsid_first;
+       vcpu3s->proto_vsid_max = ((vcpu3s->context_id[0] + 1)
+                                 << USER_ESID_BITS) - 1;
+       vcpu3s->proto_vsid_first = vcpu3s->context_id[0] << USER_ESID_BITS;
+       vcpu3s->proto_vsid_next = vcpu3s->proto_vsid_first;
 
        kvmppc_mmu_hpte_init(vcpu);