[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-arm] [Qemu-devel] [PATCH 17/27] exec.c: Handle IOMMUs in addre
From: |
Peter Maydell |
Subject: |
Re: [Qemu-arm] [Qemu-devel] [PATCH 17/27] exec.c: Handle IOMMUs in address_space_translate_for_iotlb() |
Date: |
Fri, 25 May 2018 10:59:42 +0100 |
On 25 May 2018 at 10:50, Auger Eric <address@hidden> wrote:
> On 05/25/2018 10:52 AM, Peter Maydell wrote:
>> Once we've flushed the TLB it is empty and will have no cached
>> information from the IOMMU. So there's no point in flushing the
>> TLB again (which is expensive) until the next time a transaction
>> goes through the IOMMU and we're caching something from it.
> Ak OK. there is no finer granularity for TLB flush?
Yes, there is -- you can flush by (input) address; but I
opted to do a global flush, because it doesn't require
complicated tracking of which parts of the IOMMU's address
range we care about, and in general I expect IOMMU config
changes to be fairly rare:
+ /* Rather than trying to register interest in the specific part
+ * of the iommu's address space that we've accessed and then
+ * expand it later as subsequent accesses touch more of it, we
+ * just register interest in the whole thing, on the assumption
+ * that iommu reconfiguration will be rare.
+ */
We can always come back and revisit that if there turns
out to be a performance problem here in practice.
>> We need to know all the permissions (because we'll cache the result
>> in the TCG TLB and later use them for future read and write accesses),
>> so we pass IOMMU_NONE.
>>
>> My understanding from previous discussion is that the only
>> reason to pass in some other access flag value is if you
>> only care about one of read or write and want to allow the
>> IOMMU to stop walking the page table early as soon as it decides
>> it doesn't have permissions.
>
> agreed. So you need to fetch the whole set of table permissions to
> update the TLB. By the way where is the TLB updated?
tlb_set_page_with_attrs() calls address_space_translate_for_iotlb(),
which looks up what's at that address, including doing IOMMU
translations. Then tlb_set_page_with_attrs() fills in the TLB
data structure with the results.
thanks
-- PMM
- Re: [Qemu-arm] [PATCH 05/27] Make address_space_access_valid() take a MemTxAttrs argument, (continued)
[Qemu-arm] [PATCH 04/27] Make address_space_map() take a MemTxAttrs argument, Peter Maydell, 2018/05/21
[Qemu-arm] [PATCH 24/27] hw/misc/iotkit-secctl.c: Implement SECMPCINTSTATUS, Peter Maydell, 2018/05/21
[Qemu-arm] [PATCH 25/27] hw/arm/iotkit: Instantiate MPC, Peter Maydell, 2018/05/21
[Qemu-arm] [PATCH 09/27] Make flatview_access_valid() take a MemTxAttrs argument, Peter Maydell, 2018/05/21