All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jan Kiszka <jan.kiszka@web.de>
To: Peter Xu <peterx@redhat.com>
Cc: "Michael S. Tsirkin" <mst@redhat.com>,
	qemu-devel@nongnu.org, Peter Maydell <peter.maydell@linaro.org>,
	Richard Henderson <rth@twiddle.net>,
	Eduardo Habkost <ehabkost@redhat.com>,
	Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [Qemu-devel] [PULL v5 26/57] x86-iommu: introduce IEC notifiers
Date: Sun, 31 Jul 2016 14:01:26 +0200	[thread overview]
Message-ID: <49d9598a-9d37-5d57-9b75-753544a6cdaf@web.de> (raw)
In-Reply-To: <20160731035903.GA6207@pxdev.xzpeter.org>

[-- Attachment #1: Type: text/plain, Size: 3620 bytes --]

On 2016-07-31 05:59, Peter Xu wrote:
> On Sat, Jul 30, 2016 at 09:52:48AM +0200, Jan Kiszka wrote:
> 
> [...]
> 
>>> +/**
>>> + * x86_iommu_iec_notify_all - Notify IEC invalidations
>>> + * @iommu: IOMMU device that sends the notification
>>> + * @global: whether this is a global invalidation. If true, @index
>>> + *          and @mask are undefined.
>>> + * @index: starting index of interrupt entry to invalidate
>>> + * @mask: index mask for the invalidation
>>
>> This is Intel'ish: index and mask refer to the single Intel IR table.
>> AMD has per-device tables.
> 
> Actually I was trying to consider this before when designing about the
> interface...
> 
>>
>> But even for Intel: Would the index make any sense to the callbacks? KVM
>> uses (virtual and real) GSIs to address its routing entries, no?
>>
>> I suspect we will have to redesign this once we want to make use of
>> non-global invalidation.
> 
> IIUC here the problem is how we should manage the mapping between GSI
> routes and IRTE index (or device IDs, but let's talk later about
> device IDs, since we can map a device-id invalidation into several
> standalone index invalidations)? Or say, who should maintain this? IEC
> invalidation consumers (e.g., IRQFD logic, IOAPIC, ...), or IOMMU?
> 
> IMHO, I would prefer the consumers to maintain this, not IOMMU. So I
> would prefer a raw notification interface (index, mask, device-id,
> etc. rather than GSI route index), and the consumers are responsible
> to translate this message for their own sake.
> 
> The reason is simple: what if we have some other components (besides
> GSI routes) that will register to this notifier? Though I am not sure
> whether there would be one in the future, but letting IOMMU knowing
> about something like GSI route index is a little bit odd to me.
> 
> Take irqfd as an example, currently MSIRouteEntry is defined as:
> 
>     struct MSIRouteEntry {
>         PCIDevice *dev;             /* Device pointer */
>         int vector;                 /* MSI/MSIX vector index */
>         int virq;                   /* Virtual IRQ index */
>         QLIST_ENTRY(MSIRouteEntry) list;
>     };
> 
> When we want to support explicit IEC invalidation, we may need an
> extra field like:
> 
>         uint32_t index;             /* IRTE index */
> 
> So when MSI routes are invalidated, we can translated the raw index
> information into virq by simply looking up the MSIRouteEntry list.
> 
> Regarding to AMD's device-id interface...
> 
> I see that AMD IOMMUs do not have a global IRTE index table, not sure
> whether we can "define" one? E.g. IIUC AMD IOMMU IRTE will have 13
> bits index for each device, so how about making a global index like:
> 
>   device-id (16 bits) + 000b (3 bits) + index_per_device (13 bits)
> 
> to form a 32 bit index. So when AMD IOMMUs got a invalidation request,
> IOMMU can translate this per-device invalidation into several
> invalidations for specific IRTE entries? Not sure whether this would
> work.

Yes, there has to be a generic handle for each translation result an
IOMMU generated. This handle can be stored on the consumer side along
with the translation request. How a handle is generated should be
completely up to the IOMMU.

The consumer should receive a 32-bit (or more) opaque value with each
translation request (separate parameter) and then again on specific
invalidation. The latter case may also report a range of handles, to
make things more efficient (provided the consumer store those handles
close to each other).

Jan


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 181 bytes --]

  reply	other threads:[~2016-07-31 12:01 UTC|newest]

Thread overview: 82+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-07-21 17:50 [Qemu-devel] [PULL v5 00/57] pc, pci, virtio: new features, cleanups, fixes Michael S. Tsirkin
2016-07-21 17:50 ` [Qemu-devel] [PULL v5 01/57] nvdimm: fix memory leak in error code path Michael S. Tsirkin
2016-07-21 17:51 ` [Qemu-devel] [PULL v5 02/57] tests/prom-env-test: increase the test timeout Michael S. Tsirkin
2016-07-21 17:51 ` [Qemu-devel] [PULL v5 03/57] hw/alpha: fix PCI bus initialization Michael S. Tsirkin
2016-07-21 17:51 ` [Qemu-devel] [PULL v5 04/57] hw/mips: " Michael S. Tsirkin
2016-07-21 17:51 ` [Qemu-devel] [PULL v5 05/57] hw/apb: " Michael S. Tsirkin
2016-07-21 17:51 ` [Qemu-devel] [PULL v5 06/57] hw/grackle: " Michael S. Tsirkin
2016-07-21 17:51 ` [Qemu-devel] [PULL v5 07/57] hw/prep: realize the PCI root bus as part of the prep init Michael S. Tsirkin
2016-07-21 17:51 ` [Qemu-devel] [PULL v5 08/57] hw/versatile: realize the PCI root bus as part of the versatile init Michael S. Tsirkin
2016-07-21 17:51 ` [Qemu-devel] [PULL v5 09/57] x86-iommu: introduce parent class Michael S. Tsirkin
2016-07-21 17:51 ` [Qemu-devel] [PULL v5 10/57] intel_iommu: rename VTD_PCI_DEVFN_MAX to x86-iommu Michael S. Tsirkin
2016-07-21 17:51 ` [Qemu-devel] [PULL v5 11/57] x86-iommu: provide x86_iommu_get_default Michael S. Tsirkin
2016-07-21 17:51 ` [Qemu-devel] [PULL v5 12/57] x86-iommu: introduce "intremap" property Michael S. Tsirkin
2016-07-21 17:51 ` [Qemu-devel] [PULL v5 13/57] acpi: enable INTR for DMAR report structure Michael S. Tsirkin
2016-07-21 17:52 ` [Qemu-devel] [PULL v5 14/57] intel_iommu: allow queued invalidation for IR Michael S. Tsirkin
2016-07-21 17:52 ` [Qemu-devel] [PULL v5 15/57] intel_iommu: set IR bit for ECAP register Michael S. Tsirkin
2016-07-21 17:52 ` [Qemu-devel] [PULL v5 16/57] acpi: add DMAR scope definition for root IOAPIC Michael S. Tsirkin
2016-07-21 17:52 ` [Qemu-devel] [PULL v5 17/57] intel_iommu: define interrupt remap table addr register Michael S. Tsirkin
2016-07-21 17:52 ` [Qemu-devel] [PULL v5 18/57] intel_iommu: handle interrupt remap enable Michael S. Tsirkin
2016-07-21 17:52 ` [Qemu-devel] [PULL v5 19/57] intel_iommu: define several structs for IOMMU IR Michael S. Tsirkin
2016-07-21 17:52 ` [Qemu-devel] [PULL v5 20/57] intel_iommu: add IR translation faults defines Michael S. Tsirkin
2016-07-21 17:52 ` [Qemu-devel] [PULL v5 21/57] intel_iommu: Add support for PCI MSI remap Michael S. Tsirkin
2016-07-21 17:52 ` [Qemu-devel] [PULL v5 22/57] intel_iommu: get rid of {0} initializers Michael S. Tsirkin
2016-07-21 17:52 ` [Qemu-devel] [PULL v5 23/57] q35: ioapic: add support for emulated IOAPIC IR Michael S. Tsirkin
2016-07-21 17:52 ` [Qemu-devel] [PULL v5 24/57] ioapic: introduce ioapic_entry_parse() helper Michael S. Tsirkin
2016-07-21 17:53 ` [PULL v5 25/57] intel_iommu: add support for split irqchip Michael S. Tsirkin
2016-07-21 17:53   ` [Qemu-devel] " Michael S. Tsirkin
2016-07-21 17:53 ` [Qemu-devel] [PULL v5 26/57] x86-iommu: introduce IEC notifiers Michael S. Tsirkin
2016-07-30  7:52   ` Jan Kiszka
2016-07-31  3:59     ` Peter Xu
2016-07-31 12:01       ` Jan Kiszka [this message]
2016-07-31 12:51         ` Peter Xu
2016-07-21 17:53 ` [Qemu-devel] [PULL v5 27/57] ioapic: register IOMMU IEC notifier for ioapic Michael S. Tsirkin
2016-07-21 17:53 ` [Qemu-devel] [PULL v5 28/57] intel_iommu: Add support for Extended Interrupt Mode Michael S. Tsirkin
2016-07-21 17:53 ` [Qemu-devel] [PULL v5 29/57] intel_iommu: add SID validation for IR Michael S. Tsirkin
2016-08-01 16:39   ` Jan Kiszka
2016-08-02  8:36     ` Peter Xu
2016-08-02  8:46       ` Jan Kiszka
     [not found]         ` <CABdVeADOKgSCJoFDSDufQxDa9PmiFyiEx=FtS043vyJsZXM3sA@mail.gmail.com>
2016-08-02  8:59           ` Jan Kiszka
2016-08-02 10:28         ` Peter Xu
2016-08-02 11:58           ` David Kiarie
2016-08-02 12:12             ` Peter Xu
2016-08-02 12:17               ` David Kiarie
2016-08-02 12:28                 ` Jan Kiszka
2016-08-08  9:06                 ` Peter Xu
2016-08-08  9:44                   ` David Kiarie
2016-08-02 12:16             ` Jan Kiszka
2016-08-02 12:18               ` David Kiarie
2016-07-21 17:53 ` [PULL v5 30/57] kvm-irqchip: simplify kvm_irqchip_add_msi_route Michael S. Tsirkin
2016-07-21 17:53   ` [Qemu-devel] " Michael S. Tsirkin
2016-07-21 17:53 ` [PULL v5 31/57] kvm-irqchip: i386: add hook for add/remove virq Michael S. Tsirkin
2016-07-21 17:53   ` [Qemu-devel] " Michael S. Tsirkin
2016-07-21 17:53 ` [PULL v5 32/57] kvm-irqchip: x86: add msi route notify fn Michael S. Tsirkin
2016-07-21 17:53   ` [Qemu-devel] " Michael S. Tsirkin
2016-07-21 17:53 ` [PULL v5 33/57] kvm-irqchip: do explicit commit when update irq Michael S. Tsirkin
2016-07-21 17:53   ` [Qemu-devel] " Michael S. Tsirkin
2016-07-21 17:53 ` [Qemu-devel] [PULL v5 34/57] intel_iommu: support all masks in interrupt entry cache invalidation Michael S. Tsirkin
2016-07-21 17:53 ` [PULL v5 35/57] kvm-all: add trace events for kvm irqchip ops Michael S. Tsirkin
2016-07-21 17:53   ` [Qemu-devel] " Michael S. Tsirkin
2016-07-21 17:54 ` [Qemu-devel] [PULL v5 36/57] intel_iommu: disallow kernel-irqchip=on with IR Michael S. Tsirkin
2016-07-21 17:54 ` [Qemu-devel] [PULL v5 37/57] virtio: Add typedef for handle_output Michael S. Tsirkin
2016-07-21 17:54 ` [Qemu-devel] [PULL v5 38/57] virtio: Introduce virtio_add_queue_aio Michael S. Tsirkin
2016-07-21 17:54 ` [Qemu-devel] [PULL v5 39/57] virtio-blk: Call virtio_add_queue_aio Michael S. Tsirkin
2016-07-21 17:54 ` [Qemu-devel] [PULL v5 40/57] virtio-scsi: " Michael S. Tsirkin
2016-07-21 17:54 ` [Qemu-devel] [PULL v5 41/57] Revert "mirror: Workaround for unexpected iohandler events during completion" Michael S. Tsirkin
2016-07-21 17:54 ` [Qemu-devel] [PULL v5 42/57] virtio-scsi: Replace HandleOutput typedef Michael S. Tsirkin
2016-07-21 17:54 ` [Qemu-devel] [PULL v5 43/57] virtio-net: Remove old migration version support Michael S. Tsirkin
2016-07-21 17:54 ` [Qemu-devel] [PULL v5 44/57] virtio-serial: " Michael S. Tsirkin
2016-07-21 17:54 ` [Qemu-devel] [PULL v5 45/57] virtio: Migration helper function and macro Michael S. Tsirkin
2016-07-21 17:54 ` [Qemu-devel] [PULL v5 46/57] virtio-scsi: Wrap in vmstate Michael S. Tsirkin
2016-07-21 17:54 ` [Qemu-devel] [PULL v5 47/57] virtio-blk: " Michael S. Tsirkin
2016-07-21 17:55 ` [Qemu-devel] [PULL v5 48/57] virtio-rng: " Michael S. Tsirkin
2016-07-21 17:55 ` [Qemu-devel] [PULL v5 49/57] virtio-balloon: " Michael S. Tsirkin
2016-07-21 17:55 ` [Qemu-devel] [PULL v5 50/57] virtio-net: " Michael S. Tsirkin
2016-07-21 17:55 ` [Qemu-devel] [PULL v5 51/57] virtio-serial: " Michael S. Tsirkin
2016-07-21 17:55 ` [Qemu-devel] [PULL v5 52/57] 9pfs: " Michael S. Tsirkin
2016-07-21 17:55 ` [Qemu-devel] [PULL v5 53/57] virtio-input: " Michael S. Tsirkin
2016-07-21 17:55 ` [Qemu-devel] [PULL v5 54/57] virtio-gpu: Use migrate_add_blocker for virgl migration blocking Michael S. Tsirkin
2016-07-21 17:55 ` [Qemu-devel] [PULL v5 55/57] virtio-gpu: Wrap in vmstate Michael S. Tsirkin
2016-07-21 17:55 ` [Qemu-devel] [PULL v5 56/57] virtio: Update migration docs Michael S. Tsirkin
2016-07-21 17:55 ` [Qemu-devel] [PULL v5 57/57] intel_iommu: avoid unnamed fields Michael S. Tsirkin
2016-07-21 19:54 ` [Qemu-devel] [PULL v5 00/57] pc, pci, virtio: new features, cleanups, fixes Peter Maydell

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=49d9598a-9d37-5d57-9b75-753544a6cdaf@web.de \
    --to=jan.kiszka@web.de \
    --cc=ehabkost@redhat.com \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=peterx@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=rth@twiddle.net \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.