Revision 819bd309 target-s390x/kvm.c

b/target-s390x/kvm.c
87 87
};
88 88

  
89 89
static int cap_sync_regs;
90
static int cap_async_pf;
90 91

  
91 92
static void *legacy_s390_alloc(size_t size);
92 93

  
93 94
int kvm_arch_init(KVMState *s)
94 95
{
95 96
    cap_sync_regs = kvm_check_extension(s, KVM_CAP_SYNC_REGS);
97
    cap_async_pf = kvm_check_extension(s, KVM_CAP_ASYNC_PF);
96 98
    if (!kvm_check_extension(s, KVM_CAP_S390_GMAP)
97 99
        || !kvm_check_extension(s, KVM_CAP_S390_COW)) {
98 100
        phys_mem_set_alloc(legacy_s390_alloc);
......
178 180
        return ret;
179 181
    }
180 182

  
183
    if (cap_async_pf) {
184
        reg.id = KVM_REG_S390_PFTOKEN;
185
        reg.addr = (__u64)&(env->pfault_token);
186
        ret = kvm_vcpu_ioctl(cs, KVM_SET_ONE_REG, &reg);
187
        if (ret < 0) {
188
            return ret;
189
        }
190

  
191
        reg.id = KVM_REG_S390_PFCOMPARE;
192
        reg.addr = (__u64)&(env->pfault_compare);
193
        ret = kvm_vcpu_ioctl(cs, KVM_SET_ONE_REG, &reg);
194
        if (ret < 0) {
195
            return ret;
196
        }
197

  
198
        reg.id = KVM_REG_S390_PFSELECT;
199
        reg.addr = (__u64)&(env->pfault_select);
200
        ret = kvm_vcpu_ioctl(cs, KVM_SET_ONE_REG, &reg);
201
        if (ret < 0) {
202
            return ret;
203
        }
204
    }
205

  
181 206
    if (cap_sync_regs &&
182 207
        cs->kvm_run->kvm_valid_regs & KVM_SYNC_ACRS &&
183 208
        cs->kvm_run->kvm_valid_regs & KVM_SYNC_CRS) {
......
282 307
        return r;
283 308
    }
284 309

  
310
    if (cap_async_pf) {
311
        reg.id = KVM_REG_S390_PFTOKEN;
312
        reg.addr = (__u64)&(env->pfault_token);
313
        r = kvm_vcpu_ioctl(cs, KVM_GET_ONE_REG, &reg);
314
        if (r < 0) {
315
            return r;
316
        }
317

  
318
        reg.id = KVM_REG_S390_PFCOMPARE;
319
        reg.addr = (__u64)&(env->pfault_compare);
320
        r = kvm_vcpu_ioctl(cs, KVM_GET_ONE_REG, &reg);
321
        if (r < 0) {
322
            return r;
323
        }
324

  
325
        reg.id = KVM_REG_S390_PFSELECT;
326
        reg.addr = (__u64)&(env->pfault_select);
327
        r = kvm_vcpu_ioctl(cs, KVM_GET_ONE_REG, &reg);
328
        if (r < 0) {
329
            return r;
330
        }
331
    }
332

  
285 333
    return 0;
286 334
}
287 335

  

Also available in: Unified diff