From: Oleksandr <olekstysh@gmail.com>
To: Julien Grall <julien.grall@arm.com>
Cc: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>,
"sstabellini@kernel.org" <sstabellini@kernel.org>,
Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
Subject: Re: [Xen-devel] [PATCH V2 6/6] iommu/arm: Add Renesas IPMMU-VMSA support
Date: Thu, 8 Aug 2019 18:04:54 +0300 [thread overview]
Message-ID: <e2af5e18-2a95-0880-4acc-492848800b19@gmail.com> (raw)
In-Reply-To: <03b1bac9-40ca-3bd4-d3fa-a4acc4e9e958@arm.com>
Hi
>>>
>>>> Sorry for the possible format issues.
>>>>
>>>>
>>>> > No, it is not disabled. But, ipmmu_irq() uses another
>>>> mmu->lock. So, I
>>>> > think, there won't be a deadlock.
>>>> >
>>>> > Or I really missed something?
>>>> >
>>>> > If we worry about ipmmu_tlb_invalidate() which is called
>>>> here (to
>>>> > perform a flush by request from P2M code, which manages a
>>>> page table)
>>>> > and from the irq handler (to perform a flush to resume address
>>>> > translation), I could use a tasklet to schedule
>>>> ipmmu_tlb_invalidate()
>>>> > from the irq handler then. This way we would get this
>>>> serialized. What
>>>> > do you think?
>>>>
>>>> I am afraid a tasklet is not an option. You need to perform the
>>>> TLB
>>>> flush when requested otherwise you are introducing a security
>>>> issue.
>>>>
>>>> This is because as soon as a region is unmapped in the page
>>>> table, we
>>>> remove the drop the reference on any page backing that region.
>>>> When the
>>>> reference is dropped to zero, the page can be reallocated to
>>>> another
>>>> domain or even Xen. If the TLB flush happen after, then the
>>>> guest may
>>>> still be able to access the page for a short time if the
>>>> translation has
>>>> been cached by the any TLB (IOMMU, Processor).
>>>>
>>>>
>>>>
>>>> I understand this. I am not proposing to delay a requested by P2M
>>>> code TLB flush in any case. I just propose to issue TLB flush
>>>> (which we have to perform in case of page faults, to resolve error
>>>> condition and resume translations) from a tasklet rather than from
>>>> interrupt handler directly. This is the TLB flush I am speaking about:
>>>>
>>>> https://github.com/otyshchenko1/xen/blob/ipmmu_upstream2/xen/drivers/passthrough/arm/ipmmu-vmsa.c#L598
>>>>
>>>>
>>>> Sorry if I was unclear.
>>>
>>> My mistake, I misread what you wrote.
>>>
>>> I found the flush in the renesas-bsp and not Linux upstream but it
>>> is not clear why this is actually required. You are not fixing any
>>> translation error. So what this flush will do?
>>>
>>> Regarding the placement of the flush, then if you execute in a
>>> tasklet it will likely be done later on when the IRQ has been
>>> acknowledge. What's the implication to delay it?
>>
>>
>> Looks like, there is no need to put this flush into a tasklet. As I
>> understand from Shimoda-san's answer it is OK to call flush here.
>>
>> So, my worry about calling ipmmu_tlb_invalidate() directly from the
>> interrupt handler is not actual anymore.
>> ----------
>> This is my understanding regarding the flush purpose here. This code,
>> just follows the TRM, no more no less,
>> which mentions about a need to flush TLB after clearing error status
>> register and updating a page table entries (which, I assume, means to
>> resolve a reason why translation/page fault error actually have
>> happened) to resume address translation request.
>
> Well, I don't have the TRM... so my point of reference is Linux. Why
> does upstream not do the TLB flush?
I have no idea regarding that.
>
>
> I have been told this is an errata on the IPMMU. Is it related to the
> series posted on linux-iommu [1]?
I don't think, the TLB flush we are speaking about, is related to that
series [1] somehow. This TLB flush, I think, is just the last step in a
sequence of actions which should be performed when the error occurs, no
more no less. This is how I understand this.
>
>>
>> But, with one remark, as you have already noted, we are not trying to
>> handle/fix this fault (update page table entries), driver doesn't
>> manage page table and is not aware what the page table is. What is
>> more, it is unclear what actually need to be fixed in the page table
>> which is a CPU page table as the same time.
>>
>> I have heard there is a break-before-make sequence when updating the
>> page table. So, if device in a domain is issuing DMA somewhere in the
>> middle of updating a page table, theoretically, we might hit into
>> this fault. In this case the page table is correct and we don't need
>> to fix anything... Being honest, I have never seen a fault caused
>> by break-before-make sequence.
>
> Ok, so it looks like you are trying to fix [1]. My first concern here
> is there are no ground for someone without access to the TRM why this
> is done.
No, I am definitely not trying to fix [1]. I just follow the BSP driver
I am based on, which in turn follows the TRM. I can extend a comment in
the code before calling ipmmu_tlb_invalidate().
>
> Furthermore, AFAICT, the patch series never reached upstream. So is it
> present on all revision of GEN3?
I think, that the newest SoCs revisions (ES 3.0) this driver is supposed
to support only, are *not* affected by that errata. And *not* require
such workaround.
--
Regards,
Oleksandr Tyshchenko
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
next prev parent reply other threads:[~2019-08-08 15:05 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-02 16:39 [Xen-devel] [PATCH V2 0/6] iommu/arm: Add Renesas IPMMU-VMSA support + Linux's iommu_fwspec Oleksandr Tyshchenko
2019-08-02 16:39 ` [Xen-devel] [PATCH V2 1/6] iommu/arm: Add iommu_helpers.c file to keep common for IOMMUs stuff Oleksandr Tyshchenko
2019-08-09 17:35 ` Julien Grall
2019-08-09 18:10 ` Oleksandr
2019-08-02 16:39 ` [Xen-devel] [PATCH V2 2/6] iommu/arm: Add ability to handle deferred probing request Oleksandr Tyshchenko
2019-08-12 11:11 ` Julien Grall
2019-08-12 12:01 ` Oleksandr
2019-08-12 19:46 ` Julien Grall
2019-08-13 12:35 ` Oleksandr
2019-08-14 17:34 ` Julien Grall
2019-08-14 19:25 ` Stefano Stabellini
2019-08-15 9:29 ` Julien Grall
2019-08-15 12:54 ` Julien Grall
2019-08-15 13:14 ` Oleksandr
2019-08-15 16:39 ` Oleksandr
2019-08-02 16:39 ` [Xen-devel] [PATCH V2 3/6] [RFC] xen/common: Introduce _xrealloc function Oleksandr Tyshchenko
2019-08-05 10:02 ` Jan Beulich
2019-08-06 18:50 ` Oleksandr
2019-08-07 6:22 ` Jan Beulich
2019-08-07 17:31 ` Oleksandr
2019-08-06 19:51 ` Volodymyr Babchuk
2019-08-07 6:26 ` Jan Beulich
2019-08-07 18:36 ` Oleksandr
2019-08-08 6:08 ` Jan Beulich
2019-08-08 7:05 ` Jan Beulich
2019-08-08 11:05 ` Oleksandr
2019-08-02 16:39 ` [Xen-devel] [PATCH V2 4/6] iommu/arm: Add lightweight iommu_fwspec support Oleksandr Tyshchenko
2019-08-13 12:39 ` Julien Grall
2019-08-13 15:17 ` Oleksandr
2019-08-13 15:28 ` Julien Grall
2019-08-13 16:18 ` Oleksandr
2019-08-13 13:40 ` Julien Grall
2019-08-13 16:28 ` Oleksandr
2019-08-02 16:39 ` [Xen-devel] [PATCH V2 5/6] iommu/arm: Introduce iommu_add_dt_device API Oleksandr Tyshchenko
2019-08-13 13:49 ` Julien Grall
2019-08-13 16:05 ` Oleksandr
2019-08-13 17:13 ` Julien Grall
2019-08-02 16:39 ` [Xen-devel] [PATCH V2 6/6] iommu/arm: Add Renesas IPMMU-VMSA support Oleksandr Tyshchenko
2019-08-07 2:41 ` Yoshihiro Shimoda
2019-08-07 16:01 ` Oleksandr
2019-08-07 19:15 ` Julien Grall
2019-08-07 20:28 ` Oleksandr Tyshchenko
2019-08-08 9:05 ` Julien Grall
2019-08-08 10:14 ` Oleksandr
2019-08-08 12:44 ` Julien Grall
2019-08-08 15:04 ` Oleksandr [this message]
2019-08-08 17:16 ` Julien Grall
2019-08-08 19:29 ` Oleksandr
2019-08-08 20:32 ` Julien Grall
2019-08-08 23:32 ` Oleksandr Tyshchenko
2019-08-09 9:56 ` Julien Grall
2019-08-09 18:38 ` Oleksandr
2019-08-08 12:28 ` Oleksandr
2019-08-08 14:23 ` Lars Kurth
2019-08-08 4:05 ` Yoshihiro Shimoda
2019-08-14 17:38 ` Julien Grall
2019-08-14 18:45 ` Oleksandr
2019-08-05 7:58 ` [Xen-devel] [PATCH V2 0/6] iommu/arm: Add Renesas IPMMU-VMSA support + Linux's iommu_fwspec Oleksandr
2019-08-05 8:29 ` Julien Grall
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=e2af5e18-2a95-0880-4acc-492848800b19@gmail.com \
--to=olekstysh@gmail.com \
--cc=julien.grall@arm.com \
--cc=oleksandr_tyshchenko@epam.com \
--cc=sstabellini@kernel.org \
--cc=xen-devel@lists.xenproject.org \
--cc=yoshihiro.shimoda.uh@renesas.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).