|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4 3/3] x86/ioreq server: Add HVMOP to map guest ram with p2m_ioreq_server to an ioreq server.
>>> On 16.06.16 at 11:32, <yu.c.zhang@xxxxxxxxxxxxxxx> wrote:
>> On 6/14/2016 6:45 PM, Jan Beulich wrote:
>>>>>>> On 19.05.16 at 11:05, <yu.c.zhang@xxxxxxxxxxxxxxx> wrote:
>>>>> @@ -914,6 +916,45 @@ int hvm_unmap_io_range_from_ioreq_server(struct
>>>>> domain
>>> *d, ioservid_t id,
>>>>> return rc;
>>>>> }
>>>>>
>>>>> +int hvm_map_mem_type_to_ioreq_server(struct domain *d, ioservid_t id,
>>>>> + uint16_t type, uint32_t flags)
>>>> I see no reason why both can't be unsigned int.
>>> Parameter type is passed in from the type field inside struct
>>> xen_hvm_map_mem_type_to_ioreq_server,
>>> which is a uint16_t, followed with a uint16_t pad. Now I am wondering,
>>> may be we can just remove the pad
>>> field in this structure and just define type as uint32_t.
>> I think keeping the interface structure unchanged is the desirable
>> route here. What I dislike is the passing around of non-natural
>> width types, which is more expensive in terms of processing. I.e.
>> as long as a fixed width type (which is necessary to be used in
>> the public interface) fits in "unsigned int", that should be the
>> respective internal type. Otherwise "unsigned long" etc.
>>
>> There are cases where even internally we indeed want to use
>> fixed width types, and admittedly there are likely far more cases
>> where internally fixed width types get used without good reason,
>> but just like everywhere else - let's please not make this worse.
>> IOW please use fixed width types only when you really need them.
> OK. I can keep the interface, and using uint32_t type in the internal
> routine
> would means a implicit type conversion from uint16_6, which I do not think
> is a problem.
Just to reiterate: Unless there is a specific need, please avoid
fixed width integer types for any internal use.
>>>>> @@ -94,8 +96,16 @@ static unsigned long p2m_type_to_flags(p2m_type_t t,
>>>>> mfn_t mfn,
>>>>> default:
>>>>> return flags | _PAGE_NX_BIT;
>>>>> case p2m_grant_map_ro:
>>>>> - case p2m_ioreq_server:
>>>>> return flags | P2M_BASE_FLAGS | _PAGE_NX_BIT;
>>>>> + case p2m_ioreq_server:
>>>>> + {
>>>>> + flags |= P2M_BASE_FLAGS | _PAGE_RW;
>>>>> +
>>>>> + if ( p2m->ioreq.flags & P2M_IOREQ_HANDLE_WRITE_ACCESS )
>>>>> + return flags & ~_PAGE_RW;
>>>>> + else
>>>>> + return flags;
>>>>> + }
>>>> Same here (for the missing _PAGE_NX) plus no need for braces.
>>> I'll remove the brace. And we do not need to set the _PAGE_NX_BIT, like
>>> the p2m_ram_ro case I guess.
>> I hope you mean the inverse: You should set _PAGE_NX_BIT here.
> Oh, right. I meant the reverse. Thanks for the remind. :)
> And I have a question, here in p2m_type_to_flags(), I saw current code
> uses _PAGE_NX_BIT
> to disable the executable permission, and I wonder, why don't we choose
> the _PAGE_NX,
> which is defined as:
>
> #define _PAGE_NX (cpu_has_nx ? _PAGE_NX_BIT : 0)
>
> How do we know for sure that bit 63 from pte is not a reserved one
> without checking
> the cpu capability(the cpu_has_nx)? Is there any other reasons, i.e. the
> page tables might
> be shared with IOMMU?
Please wait for Andrew to confirm this (or correct me) - there are
some differences between AMD and Intel, and iirc the bit gets
ignored by AMD when NX is off.
>>>>> +struct xen_hvm_map_mem_type_to_ioreq_server {
>>>>> + domid_t domid; /* IN - domain to be serviced */
>>>>> + ioservid_t id; /* IN - ioreq server id */
>>>>> + uint16_t type; /* IN - memory type */
>>>>> + uint16_t pad;
>>>> This field does not appear to get checked in the handler.
>>> I am now wondering, how about we remove this pad field and define type
>>> as uint32_t?
>> As above - I think the current layout is fine. But I'm also not heavily
>> opposed to using uint32_t here. It's not a stable interface anyway
>> (and I already have a series mostly ready to split off all control
>> operations from the HVMOP_* ones, into a new HVMCTL_* set,
>> which will make all of them interface-versioned).
>
> I'd like to keep this interface. BTW, you mentioned "this field does not
> appear to
> get checked in the handler", do you mean we need to check the pad in the
> handler?
Yes.
> And why?
In order to be able to later assign meaning to it without breaking
existing users.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |