qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH qemu 1/5] vfio: Switch from TARGET_PAGE_MASK to


From: Peter Crosthwaite
Subject: Re: [Qemu-devel] [PATCH qemu 1/5] vfio: Switch from TARGET_PAGE_MASK to qemu_real_host_page_mask
Date: Mon, 13 Jul 2015 13:32:12 -0700

On Sun, Jul 12, 2015 at 11:15 PM, David Gibson
<address@hidden> wrote:
> On Fri, Jul 10, 2015 at 08:43:44PM +1000, Alexey Kardashevskiy wrote:
>> These started switching from TARGET_PAGE_MASK (hardcoded as 4K) to
>> a real host page size:
>> 4e51361d7 "cpu-all: complete "real" host page size API" and
>> f7ceed190 "vfio: cpu: Use "real" page size API"
>>
>> This finished the transition by:
>> - %s/TARGET_PAGE_MASK/qemu_real_host_page_mask/
>> - %s/TARGET_PAGE_ALIGN/REAL_HOST_PAGE_ALIGN/
>> - removing bitfield length for offsets in VFIOQuirk::data as
>> qemu_real_host_page_mask is not a macro
>
> This does not make much sense to me.  f7ceed190 moved to
> REAL_HOST_PAGE_SIZE because it's back end stuff that really depends
> only on the host page size.
>
> Here you're applying a blanket change to vfio code, in particular to
> the DMA handling code, and for DMA both the host and target page size
> can be relevant, depending on the details of the IOMMU implementation.
>

So the multi-arch work (for which f7ceed190 preps) does have a problem
that needs something like this. TARGET_PAGE_MASK and TARGET_PAGE_ALIGN
do need to go away from common code, or this has to be promoted to
cpu-specific code. Consequently, the page size is fixed to 4K for
multi-arch and this is not a good long-term limitation. Is the IOMMU
page size really tied to the CPU implementation? In practice this is
going to be the case, but IOMMU and CPU should be decoupleable.

If vfio needs to respect a particular (or all?) CPUs/IOMMUs page
alignment then can we virtualise this as data rather than a macroified
constant?

uint64_t  page_align = 0;

CPU_FOREACH(cpu, ...) {
    CPUClass *cc = CPU_GET_CLASS(cpu);

    page_align = MAX(page_align, cc->page_size);
}

/* This is a little more made up ... */
IOMMU_FOREACH(iommu, ...) {
    page_align = MAX(page_align, iommu->page_size);
}

Regards,
Peter

>> This keeps using TARGET_PAGE_MASK for IOMMU regions though as it is
>> the minimum page size which IOMMU regions may be using and at the moment
>> memory regions do not carry the actual page size.
>
> And this exception also doesn't make much sense to me.  Partly it's
> confusing because the listener is doing different things depending on
> whether we have a guest visible IOMMU or not.
>
> In short, there doesn't seem to be a coherent explanation here of
> where the page size / alignment restriction is coming from, and
> therefore whether it needs to be a host page alignment, a guest page
> alignment, or both.
>
>> Signed-off-by: Alexey Kardashevskiy <address@hidden>
>> ---
>>
>> In reality DMA windows are always a lot bigger than a single 4K page
>> and aligned to 32/64MB, may be only use here
>> qemu_real_host_page_mask?
>
> I don't understand this question either.
>
> --
> David Gibson                    | I'll have my music baroque, and my code
> david AT gibson.dropbear.id.au  | minimalist, thank you.  NOT _the_ _other_
>                                 | _way_ _around_!
> http://www.ozlabs.org/~dgibson



reply via email to

[Prev in Thread] Current Thread [Next in Thread]