|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4 03/10] IOMMU/MMU: enhance the call trees of IOMMU unmapping and mapping
>>> On 10.05.16 at 16:45, <George.Dunlap@xxxxxxxxxxxxx> wrote:
> On Tue, May 10, 2016 at 9:44 AM, Jan Beulich <JBeulich@xxxxxxxx> wrote:
>>>>> On 06.05.16 at 10:54, <quan.xu@xxxxxxxxx> wrote:
>>> @@ -812,17 +813,22 @@ ept_set_entry(struct p2m_domain *p2m, unsigned long
>>> gfn, mfn_t mfn,
>>> rc = atomic_write_ept_entry(ept_entry, new_entry, target);
>>> if ( unlikely(rc) )
>>> old_entry.epte = 0;
>>> - else if ( p2mt != p2m_invalid &&
>>> - (gfn + (1UL << order) - 1 > p2m->max_mapped_pfn) )
>>> - /* Track the highest gfn for which we have ever had a valid
>>> mapping */
>>> - p2m->max_mapped_pfn = gfn + (1UL << order) - 1;
>>> + else
>>> + {
>>> + entry_written = 1;
>>> +
>>> + if ( p2mt != p2m_invalid &&
>>> + (gfn + (1UL << order) - 1 > p2m->max_mapped_pfn) )
>>> + /* Track the highest gfn for which we have ever had a valid
>>> mapping */
>>> + p2m->max_mapped_pfn = gfn + (1UL << order) - 1;
>>> + }
>>>
>>> out:
>>> if ( needs_sync )
>>> ept_sync_domain(p2m);
>>>
>>> /* For host p2m, may need to change VT-d page table.*/
>>> - if ( rc == 0 && p2m_is_hostp2m(p2m) && need_iommu(d) &&
>>> + if ( entry_written && p2m_is_hostp2m(p2m) && need_iommu(d) &&
>>> need_modify_vtd_table )
>>> {
>>
>> I'd prefer this conditional to remain untouched, but I'll leave the
>> decision to the maintainers of the file.
>
> Any particular reason you think it would be better untouched?
IMO it's misleading here, and appropriate only in the other place
(where the altp2m-s get updated).
> I asked for it to be changed to "entry_written", because it seemed to
> me that's what was actually wanted (i.e., you're checking whether rc
> == 0 to determine whether the entry was written or not). At the
> moment the checks will be identical, but if someone changed something
> later, rc might be non-zero even though the entry had been written, in
> which case (I think) you'd want the iommu update to happen.
>
> It's not that big a deal to me, but I do prefer it this way (unless
> I've misunderstood something).
>
>>> --- a/xen/arch/x86/mm/p2m.c
>>> +++ b/xen/arch/x86/mm/p2m.c
>>> @@ -638,13 +638,20 @@ p2m_remove_page(struct p2m_domain *p2m, unsigned long
>>> gfn, unsigned long mfn,
>>> mfn_t mfn_return;
>>> p2m_type_t t;
>>> p2m_access_t a;
>>> + int rc = 0, ret;
>>>
>>> if ( !paging_mode_translate(p2m->domain) )
>>> {
>>> if ( need_iommu(p2m->domain) )
>>> for ( i = 0; i < (1 << page_order); i++ )
>>> - iommu_unmap_page(p2m->domain, mfn + i);
>>> - return 0;
>>> + {
>>> + ret = iommu_unmap_page(p2m->domain, mfn + i);
>>> +
>>> + if ( !rc )
>>> + rc = ret;
>>> + }
>>> +
>>> + return rc;
>>> }
>>
>> In code like this, btw., restricting the scope of "ret" to the innermost
>> block would help future readers see immediately that the value of
>> "ret" is of no further interest outside of that block.
>
> I wouldn't ask for re-send just for this, but...
I agree, and I meant to express this with the "btw".
Jan
>> Having reached the end of the patch, I'm missing the __must_check
>> additions that you said you would do in this new iteration. Is there
>> any reason for their absence? Did I overlook something?
>
> If it's going to be re-sent anyway, moving the ret declaration inside
> the loop might as well be done.
>
> Other than that, it looks good to me, thanks.
>
> -George
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |