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

Re: [Xen-devel] [PATCH 3/3] AMD/IOMMU: replace a few literal numbers

On 17.02.2020 20:06, Andrew Cooper wrote:
> On 17/02/2020 13:09, Jan Beulich wrote:
>> On 10.02.2020 15:28, Andrew Cooper wrote:
>>> On 05/02/2020 09:43, Jan Beulich wrote:
>>>> Introduce IOMMU_PDE_NEXT_LEVEL_{MIN,MAX} to replace literal 1, 6, and 7
>>>> instances. While doing so replace two uses of memset() by initializers.
>>>> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
>>> This does not look to be an improvement.  IOMMU_PDE_NEXT_LEVEL_MIN is
>>> definitely bogus, and in all cases, a literal 1 is better, because that
>>> is how we describe pagetable levels.
>> I disagree.
> A pagetable walking function which does:
> while ( level > 1 )
> {
>     ...
>     level--;
> }
> is far clearer and easier to follow than hiding 1 behind a constant
> which isn't obviously 1.    Something like LEVEL_4K would at least be
> something that makes sense in context, but a literal one less verbose.
>>  The device table entry's mode field is bounded by 1
>> (min) and 6 (max) for the legitimate values to put there.
> If by 1, you mean 0, then yes.

I don't, no. A value of zero means "translation disabled".

>  Coping properly with a mode of 0 looks
> to be easier than putting in an arbitrary restriction.

Coping with this mode is entirely orthogonal imo.

>>> Something to replace literal 6/7 probably is ok, but doesn't want to be
>>> done like this.
>>> The majority of the problems here as caused by iommu_pde_from_dfn()'s
>>> silly ABI.  The pt_mfn[] array is problematic (because it is used as a
>>> 1-based array, not 0-based) and useless because both callers only want
>>> the 4k-equivelent mfn.  Fixing the ABI gets rid of quite a lot of wasted
>>> stack space, every use of '1', and every upper bound other than the bug
>>> on and amd_iommu_get_paging_mode().
>> I didn't mean to alter that function's behavior, at the very least
>> not until being certain there wasn't a reason it was coded with this
>> array approach. IOW the alternative to going with this patch
>> (subject to corrections of course) is for me to drop it altogether,
>> keeping the hard-coded numbers in place. Just let me know.
> If you don't want to change the API, then I'll put it on my todo list.
> As previously expressed, this patch on its own is not an improvement IMO.

We disagree here, quite obviously, but well, we'll have to live
with the literal numbers then. I'll drop the patch.

>>> and the IVRS table in Type 10.
>> Which may in turn be absent, i.e. the question of what to use as
>> a default merely gets shifted.
> One of Type 10 or 11 is mandatory for each IOMMU in the system.  One way
> or another, the information is present.

Even for type 10 the description for the field says "If IVinfo[EFRSup] = 0,
this field is Reserved."


Xen-devel mailing list



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