[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] vIOMMU Posted-interrupt implementation - atomic operati
From: |
Tian, Kevin |
Subject: |
Re: [Qemu-devel] vIOMMU Posted-interrupt implementation - atomic operation? |
Date: |
Wed, 6 Jun 2018 06:56:22 +0000 |
> From: Jintack Lim [mailto:address@hidden
> Sent: Tuesday, June 5, 2018 8:57 PM
>
> Thanks, Kevin.
>
> On Tue, Jun 5, 2018 at 2:54 AM, Tian, Kevin <address@hidden> wrote:
> >> From: Jintack Lim
> >> Sent: Friday, June 1, 2018 11:47 AM
> >>
> >> Hi,
> >>
> >> I'm implementing Posted-interrupt functionality in vIOMMU. According
> >> to Vt-d spec 5.2.3, IOMMU performs a coherent atomic read-modify-
> write
> >> operation of the posted-interrupt descriptor. I wonder how can we
> >> achieve this considering the guest can modify the same
> >> posted-interrupt descriptor anytime. Is there any existing mechanism
> >> that I can use in QEMU?
> >>
> >
> > I don't think it's possible to emulate such operation in software, unless
> > you want to change guest to be cooperative. Actually it is not necessary.
> > VT-d does so due to some hardware implementation consideration.
>
> Would you mind expanding this? I'm curious what it would be. Is it
> because IOMMU can't do something like cmpxchg instructions?
I don't have further information. Above is what I was told by hardware
team.
>
> > Since you are emulating on CPU, could just follow how CPU posted
> > interrupt is conducted. If you look at SDM (29.6 Posted-Interrupt
> > Processing):
> >
> > "There is a requirement, however, that such modifications be
> > done using locked read-modify-write instructions."
> >
> > [instructions] means you can do update multiple times when posting an
> > interrupt, as long as each update is atomic.
>
> Ah, that's a good point. So the unit of atomic operation doesn't need
> to be the whole PI descriptor, but it can be any subset (e.g. just one
> bit) of the descriptor? By looking at Linux kernel code, that seems to
> be the case.
>
Exactly. :-)
Thanks
Kevin