[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v7 5/5] x86/ioreq server: Synchronously reset outstanding p2m_ioreq_server entries when an ioreq server unmaps.



>>> On 11.03.17 at 09:42, <yu.c.zhang@xxxxxxxxxxxxxxx> wrote:
> On 3/11/2017 12:59 AM, Andrew Cooper wrote:
>> On 08/03/17 15:33, Yu Zhang wrote:
>>> --- a/xen/arch/x86/hvm/dm.c
>>> +++ b/xen/arch/x86/hvm/dm.c
>>> @@ -288,6 +288,7 @@ static int inject_event(struct domain *d,
>>>       return 0;
>>>   }
>>>   
>>> +#define DMOP_op_mask 0xff
>>>   static int dm_op(domid_t domid,
>>>                    unsigned int nr_bufs,
>>>                    xen_dm_op_buf_t bufs[])
>>> @@ -315,10 +316,8 @@ static int dm_op(domid_t domid,
>>>       }
>>>   
>>>       rc = -EINVAL;
>>> -    if ( op.pad )
>>> -        goto out;
>>>   
>>> -    switch ( op.op )
>>> +    switch ( op.op & DMOP_op_mask )
>> Nack to changes like this.  HVMop continuations only existed in this
>> form because we had to retrofit it to longterm-stable ABIs in the past,
>> and there were literally no free bits anywhere else.
> 
> Thank you, Andrew. Frankly, I'm not surprised to see disagreement from 
> you and Jan
> on this interface. :)
> 
> Using the HVMop like continuation is a hard choice for me. I saw you 
> removed these
> from the DMops, and I also agree that the new interface is much cleaner.
> 
> I noticed there are other 2 DMops to continuable, the set_mem_type and 
> the modified_mem.
> Both definitions of their structure have fields like first_gfn and nr 
> which can be updated to
> be used in the hypercall continuation.
> But for map_mem_type_to_ioreq_server, however we do not need a gfn 
> number exposed in
> this interface(and I do not think exposing a gfn is correct), it is only 
> used when an ioreq server
> detaches from p2m_ioreq_server and the p2m sweeping is not finished. So 
> I changed definition
> of the xen_dm_op, removed the pad field and extend the size of op to 64 
> bit(so that we can have
> free bits). But I do not think this is an optimal solution either.
> 
>> Currently, the DMOP ABI isn't set in stone, so you have until code
>> freeze in 4.9 to make changes.  (i.e. soon now.)  We should also
>> consider which other DMops might potentially need to become continuable,
>> and take preventative action before the freeze.
> 
> I can only see set_mem_type and modified_mem need to become continuable, 
> and they does
> this quite elegantly now.
> 
>>
>> If we need to make similar changes once the ABI truely is frozen, there
>> are plenty of free bits in the end of the union which can be used
>> without breaking the ABI.
> 
> Another propose is to change the definition of 
> xen_dm_op_map_mem_type_to_ioreq_server,
> and extend the flags field from uint32_t to uint64_t and use the upper 
> bits to store the gfn.

Well, you introduce a brand new sub-op in patch 2. Why would
you even try to re-use part of some other field in such a
situation, when you can right away add an opaque 64-bit field
you require the caller to set to zero upon first call? The caller
not playing by this would - afaict - only harm the guest it controls.

Jan


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.