|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH RFC] x86/HVM: suppress I/O completion for port output
>>> On 29.03.18 at 10:54, <Paul.Durrant@xxxxxxxxxx> wrote:
>> --- a/xen/arch/x86/hvm/emulate.c
>> +++ b/xen/arch/x86/hvm/emulate.c
>> @@ -282,7 +282,7 @@ static int hvmemul_do_io(
>> rc = hvm_send_ioreq(s, &p, 0);
>> if ( rc != X86EMUL_RETRY || currd->is_shutting_down )
>> vio->io_req.state = STATE_IOREQ_NONE;
>> - else if ( data_is_addr )
>> + else if ( data_is_addr || (!is_mmio && dir == IOREQ_WRITE) )
>
> I'm not entirely sure, but it seems like this test might actually be
> !hvm_vcpu_io_need_completion()...
>
>> rc = X86EMUL_OKAY;
>> }
>> break;
>> --- a/xen/include/asm-x86/hvm/vcpu.h
>> +++ b/xen/include/asm-x86/hvm/vcpu.h
>> @@ -91,10 +91,12 @@ struct hvm_vcpu_io {
>> const struct g2m_ioport *g2m_ioport;
>> };
>>
>> -static inline bool_t hvm_vcpu_io_need_completion(const struct
>> hvm_vcpu_io *vio)
>> +static inline bool hvm_vcpu_io_need_completion(const struct
>> hvm_vcpu_io *vio)
>> {
>> return (vio->io_req.state == STATE_IOREQ_READY) &&
>> - !vio->io_req.data_is_ptr;
>> + !vio->io_req.data_is_ptr &&
>> + (vio->io_req.type != IOREQ_TYPE_PIO ||
>> + vio->io_req.dir != IOREQ_WRITE);
>
> ... now that you've updated it here.
It could have been before, and it wasn't, so I didn't want to change
that. My assumption is that the function wasn't used to leverage
local variables (and avoid the .state comparison altogether).
Technically it could be switched, I agree. I guess I should at least
attach a comment, clarifying that this is an open-coded, slightly
optimized variant of the function.
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 |