[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 1/6] x86emul: generalize wbinvd() hook
On 02.07.2019 12:22, Paul Durrant wrote: >> From: Jan Beulich <JBeulich@xxxxxxxx> >> Sent: 01 July 2019 12:56 >> >> @@ -2149,10 +2147,65 @@ static int hvmemul_write_msr( >> return rc; >> } >> >> -static int hvmemul_wbinvd( >> +static int hvmemul_cache_op( >> + enum x86emul_cache_op op, >> + enum x86_segment seg, >> + unsigned long offset, >> struct x86_emulate_ctxt *ctxt) >> { >> - alternative_vcall(hvm_funcs.wbinvd_intercept); >> + struct hvm_emulate_ctxt *hvmemul_ctxt = >> + container_of(ctxt, struct hvm_emulate_ctxt, ctxt); >> + unsigned long addr, reps = 1; >> + uint32_t pfec = PFEC_page_present; >> + int rc; >> + void *mapping; >> + >> + if ( !cache_flush_permitted(current->domain) ) >> + return X86EMUL_OKAY; >> + >> + switch ( op ) >> + { >> + case x86emul_clflush: >> + case x86emul_clflushopt: >> + case x86emul_clwb: >> + ASSERT(!is_x86_system_segment(seg)); >> + >> + rc = hvmemul_virtual_to_linear(seg, offset, 0, &reps, >> + hvm_access_read, hvmemul_ctxt, >> &addr); >> + if ( rc != X86EMUL_OKAY ) >> + break; >> + >> + if ( hvmemul_ctxt->seg_reg[x86_seg_ss].dpl == 3 ) >> + pfec |= PFEC_user_mode; >> + >> + mapping = hvmemul_map_linear_addr(addr, 0, pfec, hvmemul_ctxt, >> + current->arch.hvm.data_cache); >> + if ( mapping == ERR_PTR(~X86EMUL_EXCEPTION) ) >> + return X86EMUL_EXCEPTION; This return ... >> + if ( IS_ERR_OR_NULL(mapping) ) >> + break; >> + >> + if ( cpu_has_clflush ) >> + { >> + if ( op == x86emul_clwb && cpu_has_clwb ) >> + clwb(mapping); >> + else if ( op == x86emul_clflushopt && cpu_has_clflushopt ) >> + clflushopt(mapping); >> + else >> + clflush(mapping); >> + >> + hvmemul_unmap_linear_addr(mapping, addr, 0, hvmemul_ctxt); >> + break; >> + } >> + >> + hvmemul_unmap_linear_addr(mapping, addr, 0, hvmemul_ctxt); > > Since the mapping is ditched here, why bother getting one at all in the > !cpu_has_clflush case? Are you trying to flush out an error condition> that > was previously missed? ... is what I'm after: We want exception behavior to be correct. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |