From: "Michael S. Tsirkin" <mst@redhat.com>
To: Jan Kiszka <jan.kiszka@siemens.com>
Cc: Avi Kivity <avi@redhat.com>,
Marcelo Tosatti <mtosatti@redhat.com>,
kvm@vger.kernel.org, Alex Williamson <alex.williamson@redhat.com>,
qemu-devel@nongnu.org
Subject: Re: [RFC][PATCH 23/45] qemu-kvm: Rework MSI-X mask notifier to generic MSI config notifiers
Date: Mon, 17 Oct 2011 13:40:57 +0200 [thread overview]
Message-ID: <20111017114055.GD4537@redhat.com> (raw)
In-Reply-To: <069dc7131dfb32467e04aad52c634f1ad2c16d06.1318843693.git.jan.kiszka@siemens.com>
On Mon, Oct 17, 2011 at 11:27:57AM +0200, Jan Kiszka wrote:
> MSI config notifiers are supposed to be triggered on every relevant
> configuration change of MSI vectors or if MSI is enabled/disabled.
>
> Two notifiers are established, one for vector changes and one for general
> enabling. The former notifier additionally passes the currently active
> MSI message.
> This will allow to update potential in-kernel IRQ routes on
> changes. The latter notifier is optional and will only be used by a
> subset of clients.
>
> These notifiers are currently only available for MSI-X but will be
> extended to legacy MSI as well.
>
> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Passing message, always, does not seem to make sense: message is only
valid if it is unmasked.
Further, IIRC the spec requires any changes to be done while
message is masked. So mask notifier makes more sense to me:
it does the same thing using one notifier that you do
using two notifiers.
> ---
> hw/msix.c | 119 +++++++++++++++++++++++++++++++++++++-----------------
> hw/msix.h | 6 ++-
> hw/pci.h | 8 ++-
> hw/virtio-pci.c | 24 ++++++------
> 4 files changed, 102 insertions(+), 55 deletions(-)
>
> diff --git a/hw/msix.c b/hw/msix.c
> index 247b255..176bc76 100644
> --- a/hw/msix.c
> +++ b/hw/msix.c
> @@ -219,16 +219,24 @@ static bool msix_is_masked(PCIDevice *dev, int vector)
> dev->msix_table_page[offset] & PCI_MSIX_ENTRY_CTRL_MASKBIT;
> }
>
> -static void msix_handle_mask_update(PCIDevice *dev, int vector)
> +static void msix_fire_vector_config_notifier(PCIDevice *dev,
> + unsigned int vector, bool masked)
> {
> - bool masked = msix_is_masked(dev, vector);
> + MSIMessage msg;
> int ret;
>
> - if (dev->msix_mask_notifier) {
> - ret = dev->msix_mask_notifier(dev, vector,
> - msix_is_masked(dev, vector));
> + if (dev->msix_vector_config_notifier) {
> + msix_message_from_vector(dev, vector, &msg);
> + ret = dev->msix_vector_config_notifier(dev, vector, &msg, masked);
> assert(ret >= 0);
> }
> +}
> +
> +static void msix_handle_mask_update(PCIDevice *dev, int vector)
> +{
> + bool masked = msix_is_masked(dev, vector);
> +
> + msix_fire_vector_config_notifier(dev, vector, masked);
> if (!masked && msix_is_pending(dev, vector)) {
> msix_clr_pending(dev, vector);
> msix_notify(dev, vector);
> @@ -240,20 +248,27 @@ void msix_write_config(PCIDevice *dev, uint32_t addr,
> uint32_t old_val, int len)
> {
> unsigned enable_pos = dev->msix_cap + MSIX_CONTROL_OFFSET;
> - bool was_masked;
> + bool was_masked, was_enabled, is_enabled;
> int vector;
>
> if (!msix_present(dev) || !range_covers_byte(addr, len, enable_pos)) {
> return;
> }
>
> - if (!msix_enabled(dev)) {
> + old_val >>= (enable_pos - addr) * 8;
> +
> + was_enabled = old_val & MSIX_ENABLE_MASK;
> + is_enabled = msix_enabled(dev);
> + if (was_enabled != is_enabled && dev->msix_enable_notifier) {
> + dev->msix_enable_notifier(dev, is_enabled);
> + }
> +
> + if (!is_enabled) {
> return;
> }
>
> pci_device_deassert_intx(dev);
>
> - old_val >>= (enable_pos - addr) * 8;
> was_masked =
> (old_val & (MSIX_MASKALL_MASK | MSIX_ENABLE_MASK)) != MSIX_ENABLE_MASK;
> if (was_masked != msix_function_masked(dev)) {
> @@ -270,15 +285,20 @@ static void msix_mmio_write(void *opaque, target_phys_addr_t addr,
> unsigned int offset = addr & (MSIX_PAGE_SIZE - 1) & ~0x3;
> unsigned int vector = offset / PCI_MSIX_ENTRY_SIZE;
> bool was_masked = msix_is_masked(dev, vector);
> + bool is_masked;
>
> pci_set_long(dev->msix_table_page + offset, val);
> if (kvm_enabled() && kvm_irqchip_in_kernel()) {
> kvm_msix_update(dev, vector, was_masked, msix_is_masked(dev, vector));
> }
>
> - if (vector < dev->msix_entries_nr &&
> - was_masked != msix_is_masked(dev, vector)) {
> - msix_handle_mask_update(dev, vector);
> + if (vector < dev->msix_entries_nr) {
> + is_masked = msix_is_masked(dev, vector);
> + if (was_masked != is_masked) {
> + msix_handle_mask_update(dev, vector);
> + } else {
> + msix_fire_vector_config_notifier(dev, vector, is_masked);
> + }
> }
> }
>
> @@ -305,17 +325,17 @@ static void msix_mmio_setup(PCIDevice *d, MemoryRegion *bar)
>
> static void msix_mask_all(struct PCIDevice *dev, unsigned nentries)
> {
> - int vector, r;
> + int vector;
> +
> for (vector = 0; vector < nentries; ++vector) {
> unsigned offset =
> vector * PCI_MSIX_ENTRY_SIZE + PCI_MSIX_ENTRY_VECTOR_CTRL;
> bool was_masked = msix_is_masked(dev, vector);
> +
> dev->msix_table_page[offset] |= PCI_MSIX_ENTRY_CTRL_MASKBIT;
> - if (was_masked != msix_is_masked(dev, vector) &&
> - dev->msix_mask_notifier) {
> - r = dev->msix_mask_notifier(dev, vector,
> - msix_is_masked(dev, vector));
> - assert(r >= 0);
> +
> + if (!was_masked) {
> + msix_handle_mask_update(dev, vector);
> }
> }
> }
> @@ -337,7 +357,6 @@ int msix_init(struct PCIDevice *dev, unsigned short nentries,
> if (nentries > MSIX_MAX_ENTRIES)
> return -EINVAL;
>
> - dev->msix_mask_notifier = NULL;
> dev->msix_entry_used = g_malloc0(MSIX_MAX_ENTRIES *
> sizeof *dev->msix_entry_used);
>
> @@ -529,36 +548,50 @@ void msix_unuse_all_vectors(PCIDevice *dev)
> }
>
> /* Invoke the notifier if vector entry is used and unmasked. */
> -static int msix_notify_if_unmasked(PCIDevice *dev, unsigned vector, int masked)
> +static int
> +msix_notify_if_unmasked(PCIDevice *dev, unsigned int vector, bool masked)
> {
> - assert(dev->msix_mask_notifier);
> + MSIMessage msg;
> +
> + assert(dev->msix_vector_config_notifier);
> +
> if (!dev->msix_entry_used[vector] || msix_is_masked(dev, vector)) {
> return 0;
> }
> - return dev->msix_mask_notifier(dev, vector, masked);
> + msix_message_from_vector(dev, vector, &msg);
> + return dev->msix_vector_config_notifier(dev, vector, &msg, masked);
> }
>
> -static int msix_set_mask_notifier_for_vector(PCIDevice *dev, unsigned vector)
> +static int
> +msix_set_config_notifier_for_vector(PCIDevice *dev, unsigned int vector)
> {
> - /* Notifier has been set. Invoke it on unmasked vectors. */
> - return msix_notify_if_unmasked(dev, vector, 0);
> + /* Notifier has been set. Invoke it on unmasked vectors. */
> + return msix_notify_if_unmasked(dev, vector, false);
> }
>
> -static int msix_unset_mask_notifier_for_vector(PCIDevice *dev, unsigned vector)
> +static int
> +msix_unset_config_notifier_for_vector(PCIDevice *dev, unsigned int vector)
> {
> - /* Notifier will be unset. Invoke it to mask unmasked entries. */
> - return msix_notify_if_unmasked(dev, vector, 1);
> + /* Notifier will be unset. Invoke it to mask unmasked entries. */
> + return msix_notify_if_unmasked(dev, vector, true);
> }
>
> -int msix_set_mask_notifier(PCIDevice *dev, msix_mask_notifier_func f)
> +int msix_set_config_notifiers(PCIDevice *dev,
> + MSIEnableNotifier enable_notifier,
> + MSIVectorConfigNotifier vector_config_notifier)
> {
> int r, n;
> - assert(!dev->msix_mask_notifier);
> - dev->msix_mask_notifier = f;
> +
> + dev->msix_enable_notifier = enable_notifier;
> + dev->msix_vector_config_notifier = vector_config_notifier;
> +
> + if (enable_notifier && msix_enabled(dev)) {
> + enable_notifier(dev, true);
> + }
> if ((dev->config[dev->msix_cap + MSIX_CONTROL_OFFSET] &
> (MSIX_ENABLE_MASK | MSIX_MASKALL_MASK)) == MSIX_ENABLE_MASK) {
> for (n = 0; n < dev->msix_entries_nr; ++n) {
> - r = msix_set_mask_notifier_for_vector(dev, n);
> + r = msix_set_config_notifier_for_vector(dev, n);
> if (r < 0) {
> goto undo;
> }
> @@ -568,31 +601,41 @@ int msix_set_mask_notifier(PCIDevice *dev, msix_mask_notifier_func f)
>
> undo:
> while (--n >= 0) {
> - msix_unset_mask_notifier_for_vector(dev, n);
> + msix_unset_config_notifier_for_vector(dev, n);
> }
> - dev->msix_mask_notifier = NULL;
> + if (enable_notifier && msix_enabled(dev)) {
> + enable_notifier(dev, false);
> + }
> + dev->msix_enable_notifier = NULL;
> + dev->msix_vector_config_notifier = NULL;
> return r;
> }
>
> -int msix_unset_mask_notifier(PCIDevice *dev)
> +int msix_unset_config_notifiers(PCIDevice *dev)
> {
> int r, n;
> - assert(dev->msix_mask_notifier);
> +
> + assert(dev->msix_vector_config_notifier);
> +
> if ((dev->config[dev->msix_cap + MSIX_CONTROL_OFFSET] &
> (MSIX_ENABLE_MASK | MSIX_MASKALL_MASK)) == MSIX_ENABLE_MASK) {
> for (n = 0; n < dev->msix_entries_nr; ++n) {
> - r = msix_unset_mask_notifier_for_vector(dev, n);
> + r = msix_unset_config_notifier_for_vector(dev, n);
> if (r < 0) {
> goto undo;
> }
> }
> }
> - dev->msix_mask_notifier = NULL;
> + if (dev->msix_enable_notifier && msix_enabled(dev)) {
> + dev->msix_enable_notifier(dev, false);
> + }
> + dev->msix_enable_notifier = NULL;
> + dev->msix_vector_config_notifier = NULL;
> return 0;
>
> undo:
> while (--n >= 0) {
> - msix_set_mask_notifier_for_vector(dev, n);
> + msix_set_config_notifier_for_vector(dev, n);
> }
> return r;
> }
> diff --git a/hw/msix.h b/hw/msix.h
> index 685dbe2..978f417 100644
> --- a/hw/msix.h
> +++ b/hw/msix.h
> @@ -29,6 +29,8 @@ void msix_notify(PCIDevice *dev, unsigned vector);
>
> void msix_reset(PCIDevice *dev);
>
> -int msix_set_mask_notifier(PCIDevice *dev, msix_mask_notifier_func);
> -int msix_unset_mask_notifier(PCIDevice *dev);
> +int msix_set_config_notifiers(PCIDevice *dev,
> + MSIEnableNotifier enable_notifier,
> + MSIVectorConfigNotifier vector_config_notifier);
> +int msix_unset_config_notifiers(PCIDevice *dev);
> #endif
> diff --git a/hw/pci.h b/hw/pci.h
> index 0177df4..4249c6a 100644
> --- a/hw/pci.h
> +++ b/hw/pci.h
> @@ -127,8 +127,9 @@ enum {
> QEMU_PCI_CAP_SERR = (1 << QEMU_PCI_CAP_SERR_BITNR),
> };
>
> -typedef int (*msix_mask_notifier_func)(PCIDevice *, unsigned vector,
> - int masked);
> +typedef void (*MSIEnableNotifier)(PCIDevice *dev, bool enabled);
> +typedef int (*MSIVectorConfigNotifier)(PCIDevice *dev, unsigned int vector,
> + MSIMessage *msg, bool masked);
>
> struct PCIDevice {
> DeviceState qdev;
> @@ -210,7 +211,8 @@ struct PCIDevice {
> * on the rest of the region. */
> target_phys_addr_t msix_page_size;
>
> - msix_mask_notifier_func msix_mask_notifier;
> + MSIEnableNotifier msix_enable_notifier;
> + MSIVectorConfigNotifier msix_vector_config_notifier;
> };
>
> PCIDevice *pci_register_device(PCIBus *bus, const char *name,
> diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c
> index ad6a002..6718945 100644
> --- a/hw/virtio-pci.c
> +++ b/hw/virtio-pci.c
> @@ -520,8 +520,8 @@ static void virtio_pci_guest_notifier_read(void *opaque)
> }
> }
>
> -static int virtio_pci_mask_vq(PCIDevice *dev, unsigned vector,
> - VirtQueue *vq, int masked)
> +static int virtio_pci_mask_vq(PCIDevice *dev, unsigned int vector,
> + VirtQueue *vq, bool masked)
> {
> EventNotifier *notifier = virtio_queue_get_guest_notifier(vq);
> int r = kvm_msi_irqfd_set(&dev->msix_cache[vector],
> @@ -540,8 +540,8 @@ static int virtio_pci_mask_vq(PCIDevice *dev, unsigned vector,
> return 0;
> }
>
> -static int virtio_pci_mask_notifier(PCIDevice *dev, unsigned vector,
> - int masked)
> +static int virtio_pci_msi_vector_config(PCIDevice *dev, unsigned int vector,
> + MSIMessage *msg, bool masked)
> {
> VirtIOPCIProxy *proxy = container_of(dev, VirtIOPCIProxy, pci_dev);
> VirtIODevice *vdev = proxy->vdev;
> @@ -608,11 +608,11 @@ static int virtio_pci_set_guest_notifiers(void *opaque, bool assign)
> VirtIODevice *vdev = proxy->vdev;
> int r, n;
>
> - /* Must unset mask notifier while guest notifier
> + /* Must unset vector config notifier while guest notifier
> * is still assigned */
> if (!assign) {
> - r = msix_unset_mask_notifier(&proxy->pci_dev);
> - assert(r >= 0);
> + r = msix_unset_config_notifiers(&proxy->pci_dev);
> + assert(r >= 0);
> }
>
> for (n = 0; n < VIRTIO_PCI_QUEUE_MAX; n++) {
> @@ -626,11 +626,11 @@ static int virtio_pci_set_guest_notifiers(void *opaque, bool assign)
> }
> }
>
> - /* Must set mask notifier after guest notifier
> + /* Must set vector config notifier after guest notifier
> * has been assigned */
> if (assign) {
> - r = msix_set_mask_notifier(&proxy->pci_dev,
> - virtio_pci_mask_notifier);
> + r = msix_set_config_notifiers(&proxy->pci_dev, NULL,
> + virtio_pci_msi_vector_config);
> if (r < 0) {
> goto assign_error;
> }
> @@ -645,8 +645,8 @@ assign_error:
> }
>
> if (!assign) {
> - msix_set_mask_notifier(&proxy->pci_dev,
> - virtio_pci_mask_notifier);
> + msix_set_config_notifiers(&proxy->pci_dev, NULL,
> + virtio_pci_msi_vector_config);
> }
> return r;
> }
> --
> 1.7.3.4
WARNING: multiple messages have this Message-ID (diff)
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Jan Kiszka <jan.kiszka@siemens.com>
Cc: Alex Williamson <alex.williamson@redhat.com>,
Marcelo Tosatti <mtosatti@redhat.com>,
Avi Kivity <avi@redhat.com>,
kvm@vger.kernel.org, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [RFC][PATCH 23/45] qemu-kvm: Rework MSI-X mask notifier to generic MSI config notifiers
Date: Mon, 17 Oct 2011 13:40:57 +0200 [thread overview]
Message-ID: <20111017114055.GD4537@redhat.com> (raw)
In-Reply-To: <069dc7131dfb32467e04aad52c634f1ad2c16d06.1318843693.git.jan.kiszka@siemens.com>
On Mon, Oct 17, 2011 at 11:27:57AM +0200, Jan Kiszka wrote:
> MSI config notifiers are supposed to be triggered on every relevant
> configuration change of MSI vectors or if MSI is enabled/disabled.
>
> Two notifiers are established, one for vector changes and one for general
> enabling. The former notifier additionally passes the currently active
> MSI message.
> This will allow to update potential in-kernel IRQ routes on
> changes. The latter notifier is optional and will only be used by a
> subset of clients.
>
> These notifiers are currently only available for MSI-X but will be
> extended to legacy MSI as well.
>
> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Passing message, always, does not seem to make sense: message is only
valid if it is unmasked.
Further, IIRC the spec requires any changes to be done while
message is masked. So mask notifier makes more sense to me:
it does the same thing using one notifier that you do
using two notifiers.
> ---
> hw/msix.c | 119 +++++++++++++++++++++++++++++++++++++-----------------
> hw/msix.h | 6 ++-
> hw/pci.h | 8 ++-
> hw/virtio-pci.c | 24 ++++++------
> 4 files changed, 102 insertions(+), 55 deletions(-)
>
> diff --git a/hw/msix.c b/hw/msix.c
> index 247b255..176bc76 100644
> --- a/hw/msix.c
> +++ b/hw/msix.c
> @@ -219,16 +219,24 @@ static bool msix_is_masked(PCIDevice *dev, int vector)
> dev->msix_table_page[offset] & PCI_MSIX_ENTRY_CTRL_MASKBIT;
> }
>
> -static void msix_handle_mask_update(PCIDevice *dev, int vector)
> +static void msix_fire_vector_config_notifier(PCIDevice *dev,
> + unsigned int vector, bool masked)
> {
> - bool masked = msix_is_masked(dev, vector);
> + MSIMessage msg;
> int ret;
>
> - if (dev->msix_mask_notifier) {
> - ret = dev->msix_mask_notifier(dev, vector,
> - msix_is_masked(dev, vector));
> + if (dev->msix_vector_config_notifier) {
> + msix_message_from_vector(dev, vector, &msg);
> + ret = dev->msix_vector_config_notifier(dev, vector, &msg, masked);
> assert(ret >= 0);
> }
> +}
> +
> +static void msix_handle_mask_update(PCIDevice *dev, int vector)
> +{
> + bool masked = msix_is_masked(dev, vector);
> +
> + msix_fire_vector_config_notifier(dev, vector, masked);
> if (!masked && msix_is_pending(dev, vector)) {
> msix_clr_pending(dev, vector);
> msix_notify(dev, vector);
> @@ -240,20 +248,27 @@ void msix_write_config(PCIDevice *dev, uint32_t addr,
> uint32_t old_val, int len)
> {
> unsigned enable_pos = dev->msix_cap + MSIX_CONTROL_OFFSET;
> - bool was_masked;
> + bool was_masked, was_enabled, is_enabled;
> int vector;
>
> if (!msix_present(dev) || !range_covers_byte(addr, len, enable_pos)) {
> return;
> }
>
> - if (!msix_enabled(dev)) {
> + old_val >>= (enable_pos - addr) * 8;
> +
> + was_enabled = old_val & MSIX_ENABLE_MASK;
> + is_enabled = msix_enabled(dev);
> + if (was_enabled != is_enabled && dev->msix_enable_notifier) {
> + dev->msix_enable_notifier(dev, is_enabled);
> + }
> +
> + if (!is_enabled) {
> return;
> }
>
> pci_device_deassert_intx(dev);
>
> - old_val >>= (enable_pos - addr) * 8;
> was_masked =
> (old_val & (MSIX_MASKALL_MASK | MSIX_ENABLE_MASK)) != MSIX_ENABLE_MASK;
> if (was_masked != msix_function_masked(dev)) {
> @@ -270,15 +285,20 @@ static void msix_mmio_write(void *opaque, target_phys_addr_t addr,
> unsigned int offset = addr & (MSIX_PAGE_SIZE - 1) & ~0x3;
> unsigned int vector = offset / PCI_MSIX_ENTRY_SIZE;
> bool was_masked = msix_is_masked(dev, vector);
> + bool is_masked;
>
> pci_set_long(dev->msix_table_page + offset, val);
> if (kvm_enabled() && kvm_irqchip_in_kernel()) {
> kvm_msix_update(dev, vector, was_masked, msix_is_masked(dev, vector));
> }
>
> - if (vector < dev->msix_entries_nr &&
> - was_masked != msix_is_masked(dev, vector)) {
> - msix_handle_mask_update(dev, vector);
> + if (vector < dev->msix_entries_nr) {
> + is_masked = msix_is_masked(dev, vector);
> + if (was_masked != is_masked) {
> + msix_handle_mask_update(dev, vector);
> + } else {
> + msix_fire_vector_config_notifier(dev, vector, is_masked);
> + }
> }
> }
>
> @@ -305,17 +325,17 @@ static void msix_mmio_setup(PCIDevice *d, MemoryRegion *bar)
>
> static void msix_mask_all(struct PCIDevice *dev, unsigned nentries)
> {
> - int vector, r;
> + int vector;
> +
> for (vector = 0; vector < nentries; ++vector) {
> unsigned offset =
> vector * PCI_MSIX_ENTRY_SIZE + PCI_MSIX_ENTRY_VECTOR_CTRL;
> bool was_masked = msix_is_masked(dev, vector);
> +
> dev->msix_table_page[offset] |= PCI_MSIX_ENTRY_CTRL_MASKBIT;
> - if (was_masked != msix_is_masked(dev, vector) &&
> - dev->msix_mask_notifier) {
> - r = dev->msix_mask_notifier(dev, vector,
> - msix_is_masked(dev, vector));
> - assert(r >= 0);
> +
> + if (!was_masked) {
> + msix_handle_mask_update(dev, vector);
> }
> }
> }
> @@ -337,7 +357,6 @@ int msix_init(struct PCIDevice *dev, unsigned short nentries,
> if (nentries > MSIX_MAX_ENTRIES)
> return -EINVAL;
>
> - dev->msix_mask_notifier = NULL;
> dev->msix_entry_used = g_malloc0(MSIX_MAX_ENTRIES *
> sizeof *dev->msix_entry_used);
>
> @@ -529,36 +548,50 @@ void msix_unuse_all_vectors(PCIDevice *dev)
> }
>
> /* Invoke the notifier if vector entry is used and unmasked. */
> -static int msix_notify_if_unmasked(PCIDevice *dev, unsigned vector, int masked)
> +static int
> +msix_notify_if_unmasked(PCIDevice *dev, unsigned int vector, bool masked)
> {
> - assert(dev->msix_mask_notifier);
> + MSIMessage msg;
> +
> + assert(dev->msix_vector_config_notifier);
> +
> if (!dev->msix_entry_used[vector] || msix_is_masked(dev, vector)) {
> return 0;
> }
> - return dev->msix_mask_notifier(dev, vector, masked);
> + msix_message_from_vector(dev, vector, &msg);
> + return dev->msix_vector_config_notifier(dev, vector, &msg, masked);
> }
>
> -static int msix_set_mask_notifier_for_vector(PCIDevice *dev, unsigned vector)
> +static int
> +msix_set_config_notifier_for_vector(PCIDevice *dev, unsigned int vector)
> {
> - /* Notifier has been set. Invoke it on unmasked vectors. */
> - return msix_notify_if_unmasked(dev, vector, 0);
> + /* Notifier has been set. Invoke it on unmasked vectors. */
> + return msix_notify_if_unmasked(dev, vector, false);
> }
>
> -static int msix_unset_mask_notifier_for_vector(PCIDevice *dev, unsigned vector)
> +static int
> +msix_unset_config_notifier_for_vector(PCIDevice *dev, unsigned int vector)
> {
> - /* Notifier will be unset. Invoke it to mask unmasked entries. */
> - return msix_notify_if_unmasked(dev, vector, 1);
> + /* Notifier will be unset. Invoke it to mask unmasked entries. */
> + return msix_notify_if_unmasked(dev, vector, true);
> }
>
> -int msix_set_mask_notifier(PCIDevice *dev, msix_mask_notifier_func f)
> +int msix_set_config_notifiers(PCIDevice *dev,
> + MSIEnableNotifier enable_notifier,
> + MSIVectorConfigNotifier vector_config_notifier)
> {
> int r, n;
> - assert(!dev->msix_mask_notifier);
> - dev->msix_mask_notifier = f;
> +
> + dev->msix_enable_notifier = enable_notifier;
> + dev->msix_vector_config_notifier = vector_config_notifier;
> +
> + if (enable_notifier && msix_enabled(dev)) {
> + enable_notifier(dev, true);
> + }
> if ((dev->config[dev->msix_cap + MSIX_CONTROL_OFFSET] &
> (MSIX_ENABLE_MASK | MSIX_MASKALL_MASK)) == MSIX_ENABLE_MASK) {
> for (n = 0; n < dev->msix_entries_nr; ++n) {
> - r = msix_set_mask_notifier_for_vector(dev, n);
> + r = msix_set_config_notifier_for_vector(dev, n);
> if (r < 0) {
> goto undo;
> }
> @@ -568,31 +601,41 @@ int msix_set_mask_notifier(PCIDevice *dev, msix_mask_notifier_func f)
>
> undo:
> while (--n >= 0) {
> - msix_unset_mask_notifier_for_vector(dev, n);
> + msix_unset_config_notifier_for_vector(dev, n);
> }
> - dev->msix_mask_notifier = NULL;
> + if (enable_notifier && msix_enabled(dev)) {
> + enable_notifier(dev, false);
> + }
> + dev->msix_enable_notifier = NULL;
> + dev->msix_vector_config_notifier = NULL;
> return r;
> }
>
> -int msix_unset_mask_notifier(PCIDevice *dev)
> +int msix_unset_config_notifiers(PCIDevice *dev)
> {
> int r, n;
> - assert(dev->msix_mask_notifier);
> +
> + assert(dev->msix_vector_config_notifier);
> +
> if ((dev->config[dev->msix_cap + MSIX_CONTROL_OFFSET] &
> (MSIX_ENABLE_MASK | MSIX_MASKALL_MASK)) == MSIX_ENABLE_MASK) {
> for (n = 0; n < dev->msix_entries_nr; ++n) {
> - r = msix_unset_mask_notifier_for_vector(dev, n);
> + r = msix_unset_config_notifier_for_vector(dev, n);
> if (r < 0) {
> goto undo;
> }
> }
> }
> - dev->msix_mask_notifier = NULL;
> + if (dev->msix_enable_notifier && msix_enabled(dev)) {
> + dev->msix_enable_notifier(dev, false);
> + }
> + dev->msix_enable_notifier = NULL;
> + dev->msix_vector_config_notifier = NULL;
> return 0;
>
> undo:
> while (--n >= 0) {
> - msix_set_mask_notifier_for_vector(dev, n);
> + msix_set_config_notifier_for_vector(dev, n);
> }
> return r;
> }
> diff --git a/hw/msix.h b/hw/msix.h
> index 685dbe2..978f417 100644
> --- a/hw/msix.h
> +++ b/hw/msix.h
> @@ -29,6 +29,8 @@ void msix_notify(PCIDevice *dev, unsigned vector);
>
> void msix_reset(PCIDevice *dev);
>
> -int msix_set_mask_notifier(PCIDevice *dev, msix_mask_notifier_func);
> -int msix_unset_mask_notifier(PCIDevice *dev);
> +int msix_set_config_notifiers(PCIDevice *dev,
> + MSIEnableNotifier enable_notifier,
> + MSIVectorConfigNotifier vector_config_notifier);
> +int msix_unset_config_notifiers(PCIDevice *dev);
> #endif
> diff --git a/hw/pci.h b/hw/pci.h
> index 0177df4..4249c6a 100644
> --- a/hw/pci.h
> +++ b/hw/pci.h
> @@ -127,8 +127,9 @@ enum {
> QEMU_PCI_CAP_SERR = (1 << QEMU_PCI_CAP_SERR_BITNR),
> };
>
> -typedef int (*msix_mask_notifier_func)(PCIDevice *, unsigned vector,
> - int masked);
> +typedef void (*MSIEnableNotifier)(PCIDevice *dev, bool enabled);
> +typedef int (*MSIVectorConfigNotifier)(PCIDevice *dev, unsigned int vector,
> + MSIMessage *msg, bool masked);
>
> struct PCIDevice {
> DeviceState qdev;
> @@ -210,7 +211,8 @@ struct PCIDevice {
> * on the rest of the region. */
> target_phys_addr_t msix_page_size;
>
> - msix_mask_notifier_func msix_mask_notifier;
> + MSIEnableNotifier msix_enable_notifier;
> + MSIVectorConfigNotifier msix_vector_config_notifier;
> };
>
> PCIDevice *pci_register_device(PCIBus *bus, const char *name,
> diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c
> index ad6a002..6718945 100644
> --- a/hw/virtio-pci.c
> +++ b/hw/virtio-pci.c
> @@ -520,8 +520,8 @@ static void virtio_pci_guest_notifier_read(void *opaque)
> }
> }
>
> -static int virtio_pci_mask_vq(PCIDevice *dev, unsigned vector,
> - VirtQueue *vq, int masked)
> +static int virtio_pci_mask_vq(PCIDevice *dev, unsigned int vector,
> + VirtQueue *vq, bool masked)
> {
> EventNotifier *notifier = virtio_queue_get_guest_notifier(vq);
> int r = kvm_msi_irqfd_set(&dev->msix_cache[vector],
> @@ -540,8 +540,8 @@ static int virtio_pci_mask_vq(PCIDevice *dev, unsigned vector,
> return 0;
> }
>
> -static int virtio_pci_mask_notifier(PCIDevice *dev, unsigned vector,
> - int masked)
> +static int virtio_pci_msi_vector_config(PCIDevice *dev, unsigned int vector,
> + MSIMessage *msg, bool masked)
> {
> VirtIOPCIProxy *proxy = container_of(dev, VirtIOPCIProxy, pci_dev);
> VirtIODevice *vdev = proxy->vdev;
> @@ -608,11 +608,11 @@ static int virtio_pci_set_guest_notifiers(void *opaque, bool assign)
> VirtIODevice *vdev = proxy->vdev;
> int r, n;
>
> - /* Must unset mask notifier while guest notifier
> + /* Must unset vector config notifier while guest notifier
> * is still assigned */
> if (!assign) {
> - r = msix_unset_mask_notifier(&proxy->pci_dev);
> - assert(r >= 0);
> + r = msix_unset_config_notifiers(&proxy->pci_dev);
> + assert(r >= 0);
> }
>
> for (n = 0; n < VIRTIO_PCI_QUEUE_MAX; n++) {
> @@ -626,11 +626,11 @@ static int virtio_pci_set_guest_notifiers(void *opaque, bool assign)
> }
> }
>
> - /* Must set mask notifier after guest notifier
> + /* Must set vector config notifier after guest notifier
> * has been assigned */
> if (assign) {
> - r = msix_set_mask_notifier(&proxy->pci_dev,
> - virtio_pci_mask_notifier);
> + r = msix_set_config_notifiers(&proxy->pci_dev, NULL,
> + virtio_pci_msi_vector_config);
> if (r < 0) {
> goto assign_error;
> }
> @@ -645,8 +645,8 @@ assign_error:
> }
>
> if (!assign) {
> - msix_set_mask_notifier(&proxy->pci_dev,
> - virtio_pci_mask_notifier);
> + msix_set_config_notifiers(&proxy->pci_dev, NULL,
> + virtio_pci_msi_vector_config);
> }
> return r;
> }
> --
> 1.7.3.4
next prev parent reply other threads:[~2011-10-17 11:39 UTC|newest]
Thread overview: 288+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-17 9:27 [RFC][PATCH 00/45] qemu-kvm: MSI layer rework for in-kernel irqchip support Jan Kiszka
2011-10-17 9:27 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:27 ` [RFC][PATCH 01/45] msi: Guard msi/msix_write_config with msi_present Jan Kiszka
2011-10-17 9:27 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:27 ` [RFC][PATCH 02/45] msi: Guard msi_reset " Jan Kiszka
2011-10-17 9:27 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:27 ` [RFC][PATCH 03/45] msi: Use msi/msix_present more consistently Jan Kiszka
2011-10-17 9:27 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:27 ` [RFC][PATCH 04/45] msi: Invoke msi/msix_reset from PCI core Jan Kiszka
2011-10-17 9:27 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:27 ` [RFC][PATCH 05/45] msi: Invoke msi/msix_write_config " Jan Kiszka
2011-10-17 9:27 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:27 ` [RFC][PATCH 06/45] msix: Prevent bogus mask updates on MMIO accesses Jan Kiszka
2011-10-17 9:27 ` [Qemu-devel] " Jan Kiszka
2011-10-17 11:10 ` Michael S. Tsirkin
2011-10-17 11:10 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-17 11:23 ` Jan Kiszka
2011-10-17 11:23 ` [Qemu-devel] " Jan Kiszka
2011-10-17 11:57 ` Michael S. Tsirkin
2011-10-17 11:57 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-17 12:07 ` Jan Kiszka
2011-10-17 12:07 ` [Qemu-devel] " Jan Kiszka
2011-10-17 12:50 ` Michael S. Tsirkin
2011-10-17 12:50 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-17 19:11 ` Jan Kiszka
2011-10-17 19:11 ` [Qemu-devel] " Jan Kiszka
2011-10-17 19:43 ` Michael S. Tsirkin
2011-10-17 19:43 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-17 9:27 ` [RFC][PATCH 07/45] msi: Generalize msix_supported to msi_supported Jan Kiszka
2011-10-17 9:27 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:27 ` [RFC][PATCH 08/45] Introduce MSIMessage structure Jan Kiszka
2011-10-17 9:27 ` [Qemu-devel] " Jan Kiszka
2011-10-17 11:46 ` Michael S. Tsirkin
2011-10-17 11:46 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-17 11:51 ` Jan Kiszka
2011-10-17 11:51 ` [Qemu-devel] " Jan Kiszka
2011-10-17 12:04 ` Michael S. Tsirkin
2011-10-17 12:04 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-17 12:09 ` Jan Kiszka
2011-10-17 12:09 ` [Qemu-devel] " Jan Kiszka
2011-10-17 13:01 ` Michael S. Tsirkin
2011-10-17 13:01 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-17 19:14 ` Jan Kiszka
2011-10-17 19:14 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:27 ` [RFC][PATCH 09/45] msi: Factor out msi_message_from_vector Jan Kiszka
2011-10-17 9:27 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:27 ` [RFC][PATCH 10/45] msix: Factor out msix_message_from_vector Jan Kiszka
2011-10-17 9:27 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:27 ` [RFC][PATCH 11/45] msi: Factor out delivery hook Jan Kiszka
2011-10-17 9:27 ` [Qemu-devel] " Jan Kiszka
2011-10-17 10:56 ` Avi Kivity
2011-10-17 10:56 ` [Qemu-devel] " Avi Kivity
2011-10-17 11:15 ` Jan Kiszka
2011-10-17 11:15 ` [Qemu-devel] " Jan Kiszka
2011-10-17 11:22 ` Avi Kivity
2011-10-17 11:22 ` [Qemu-devel] " Avi Kivity
2011-10-17 11:29 ` Jan Kiszka
2011-10-17 11:29 ` [Qemu-devel] " Jan Kiszka
2011-10-17 12:14 ` Avi Kivity
2011-10-17 12:14 ` [Qemu-devel] " Avi Kivity
2011-10-17 18:59 ` Jan Kiszka
2011-10-17 18:59 ` [Qemu-devel] " Jan Kiszka
2011-10-17 13:41 ` Michael S. Tsirkin
2011-10-17 13:41 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-17 13:41 ` Avi Kivity
2011-10-17 13:41 ` [Qemu-devel] " Avi Kivity
2011-10-17 13:48 ` Michael S. Tsirkin
2011-10-17 13:48 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-17 19:18 ` Jan Kiszka
2011-10-17 19:18 ` [Qemu-devel] " Jan Kiszka
2011-10-17 13:43 ` Michael S. Tsirkin
2011-10-17 13:43 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-17 19:15 ` Jan Kiszka
2011-10-17 19:15 ` [Qemu-devel] " Jan Kiszka
2011-10-18 12:05 ` Michael S. Tsirkin
2011-10-18 12:05 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-18 12:23 ` Jan Kiszka
2011-10-18 12:23 ` [Qemu-devel] " Jan Kiszka
2011-10-18 12:38 ` Michael S. Tsirkin
2011-10-18 12:38 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-18 12:41 ` Jan Kiszka
2011-10-18 12:41 ` [Qemu-devel] " Jan Kiszka
2011-10-18 12:44 ` malc
2011-10-18 12:44 ` [Qemu-devel] " malc
2011-10-18 12:49 ` Michael S. Tsirkin
2011-10-18 12:49 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-17 9:27 ` [RFC][PATCH 12/45] msi: Introduce MSIRoutingCache Jan Kiszka
2011-10-17 9:27 ` [Qemu-devel] " Jan Kiszka
2011-10-17 11:06 ` Avi Kivity
2011-10-17 11:06 ` [Qemu-devel] " Avi Kivity
2011-10-17 11:19 ` Jan Kiszka
2011-10-17 11:19 ` [Qemu-devel] " Jan Kiszka
2011-10-17 11:25 ` Avi Kivity
2011-10-17 11:25 ` [Qemu-devel] " Avi Kivity
2011-10-17 11:31 ` Jan Kiszka
2011-10-17 11:31 ` [Qemu-devel] " Jan Kiszka
2011-10-17 12:17 ` Avi Kivity
2011-10-17 12:17 ` [Qemu-devel] " Avi Kivity
2011-10-17 15:37 ` Michael S. Tsirkin
2011-10-17 15:37 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-17 19:19 ` Jan Kiszka
2011-10-17 19:19 ` [Qemu-devel] " Jan Kiszka
2011-10-18 12:17 ` Michael S. Tsirkin
2011-10-18 12:17 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-18 12:26 ` Jan Kiszka
2011-10-18 12:26 ` [Qemu-devel] " Jan Kiszka
2011-10-17 15:43 ` Michael S. Tsirkin
2011-10-17 15:43 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-17 19:23 ` Jan Kiszka
2011-10-17 19:23 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:27 ` [RFC][PATCH 13/45] hpet: Use msi_deliver Jan Kiszka
2011-10-17 9:27 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:27 ` [RFC][PATCH 14/45] qemu-kvm: Drop useless kvm_clear_gsi_routes Jan Kiszka
2011-10-17 9:27 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:27 ` [RFC][PATCH 15/45] qemu-kvm: Drop unused kvm_del_irq_route Jan Kiszka
2011-10-17 9:27 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:27 ` [RFC][PATCH 16/45] qemu-kvm: Use MSIMessage and MSIRoutingCache Jan Kiszka
2011-10-17 9:27 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:27 ` [RFC][PATCH 17/45] qemu-kvm: Track MSIRoutingCache in KVM routing table Jan Kiszka
2011-10-17 9:27 ` [Qemu-devel] " Jan Kiszka
2011-10-17 11:13 ` Avi Kivity
2011-10-17 11:13 ` [Qemu-devel] " Avi Kivity
2011-10-17 11:25 ` Jan Kiszka
2011-10-17 11:25 ` [Qemu-devel] " Jan Kiszka
2011-10-17 12:15 ` Avi Kivity
2011-10-17 12:15 ` [Qemu-devel] " Avi Kivity
2011-10-17 9:27 ` [RFC][PATCH 18/45] qemu-kvm: Hook into MSI delivery at APIC level Jan Kiszka
2011-10-17 9:27 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:27 ` [RFC][PATCH 19/45] qemu-kvm: Factor out kvm_msi_irqfd_set Jan Kiszka
2011-10-17 9:27 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:27 ` [RFC][PATCH 20/45] qemu-kvm: msix: Only invoke msix_handle_mask_update on changes Jan Kiszka
2011-10-17 9:27 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:27 ` [RFC][PATCH 21/45] qemu-kvm: msix: Don't fire notifier spuriously on set/unset Jan Kiszka
2011-10-17 9:27 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:27 ` [RFC][PATCH 22/45] qemu-kvm: msix: Fire mask notifier on global mask changes Jan Kiszka
2011-10-17 9:27 ` [Qemu-devel] " Jan Kiszka
2011-10-17 12:16 ` Michael S. Tsirkin
2011-10-17 12:16 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-17 19:00 ` Jan Kiszka
2011-10-17 19:00 ` [Qemu-devel] " Jan Kiszka
2011-10-18 12:40 ` Michael S. Tsirkin
2011-10-18 12:40 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-18 12:45 ` Jan Kiszka
2011-10-18 12:45 ` [Qemu-devel] " Jan Kiszka
2011-10-18 12:57 ` Michael S. Tsirkin
2011-10-18 12:57 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-17 9:27 ` [RFC][PATCH 23/45] qemu-kvm: Rework MSI-X mask notifier to generic MSI config notifiers Jan Kiszka
2011-10-17 9:27 ` [Qemu-devel] " Jan Kiszka
2011-10-17 11:40 ` Michael S. Tsirkin [this message]
2011-10-17 11:40 ` Michael S. Tsirkin
2011-10-17 11:45 ` Jan Kiszka
2011-10-17 11:45 ` [Qemu-devel] " Jan Kiszka
2011-10-17 12:39 ` Michael S. Tsirkin
2011-10-17 12:39 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-17 19:08 ` Jan Kiszka
2011-10-17 19:08 ` [Qemu-devel] " Jan Kiszka
2011-10-18 13:46 ` Michael S. Tsirkin
2011-10-18 13:46 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-18 13:49 ` Jan Kiszka
2011-10-18 13:49 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:27 ` [RFC][PATCH 24/45] qemu-kvm: msix: Don't handle mask updated while disabled Jan Kiszka
2011-10-17 9:27 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:27 ` [RFC][PATCH 25/45] qemu-kvm: Update MSI cache on kvm_msi_irqfd_set Jan Kiszka
2011-10-17 9:27 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:28 ` [RFC][PATCH 26/45] qemu-kvm: Use g_realloc for irq_routes extension Jan Kiszka
2011-10-17 9:28 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:28 ` [RFC][PATCH 27/45] qemu-kvm: Lazily update MSI caches Jan Kiszka
2011-10-17 9:28 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:28 ` [RFC][PATCH 28/45] qemu-kvm: msix: Drop tracking of used vectors Jan Kiszka
2011-10-17 9:28 ` [Qemu-devel] " Jan Kiszka
2011-10-17 15:48 ` Michael S. Tsirkin
2011-10-17 15:48 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-17 19:28 ` Jan Kiszka
2011-10-17 19:28 ` [Qemu-devel] " Jan Kiszka
2011-10-18 11:58 ` Michael S. Tsirkin
2011-10-18 11:58 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-18 12:08 ` Jan Kiszka
2011-10-18 12:08 ` [Qemu-devel] " Jan Kiszka
2011-10-18 12:33 ` Michael S. Tsirkin
2011-10-18 12:33 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-18 12:38 ` Jan Kiszka
2011-10-18 12:38 ` [Qemu-devel] " Jan Kiszka
2011-10-18 12:48 ` Michael S. Tsirkin
2011-10-18 12:48 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-18 13:00 ` Jan Kiszka
2011-10-18 13:00 ` [Qemu-devel] " Jan Kiszka
2011-10-18 13:37 ` Michael S. Tsirkin
2011-10-18 13:37 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-18 13:46 ` Jan Kiszka
2011-10-18 13:46 ` [Qemu-devel] " Jan Kiszka
2011-10-18 14:01 ` Michael S. Tsirkin
2011-10-18 14:01 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-18 14:08 ` Jan Kiszka
2011-10-18 14:08 ` [Qemu-devel] " Jan Kiszka
2011-10-18 15:08 ` Michael S. Tsirkin
2011-10-18 15:08 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-18 15:22 ` Jan Kiszka
2011-10-18 15:22 ` [Qemu-devel] " Jan Kiszka
2011-10-18 15:55 ` Jan Kiszka
2011-10-18 15:55 ` [Qemu-devel] " Jan Kiszka
2011-10-18 17:06 ` Michael S. Tsirkin
2011-10-18 17:06 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-18 18:24 ` Jan Kiszka
2011-10-18 18:24 ` [Qemu-devel] " Jan Kiszka
2011-10-18 18:40 ` Michael S. Tsirkin
2011-10-18 18:40 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-18 19:37 ` Jan Kiszka
2011-10-18 19:37 ` [Qemu-devel] " Jan Kiszka
2011-10-18 21:40 ` Michael S. Tsirkin
2011-10-18 21:40 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-18 22:13 ` Jan Kiszka
2011-10-18 22:13 ` [Qemu-devel] " Jan Kiszka
2011-10-19 0:56 ` Michael S. Tsirkin
2011-10-19 0:56 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-19 6:41 ` Jan Kiszka
2011-10-19 6:41 ` [Qemu-devel] " Jan Kiszka
2011-10-19 9:03 ` Michael S. Tsirkin
2011-10-19 9:03 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-19 11:17 ` Jan Kiszka
2011-10-19 11:17 ` [Qemu-devel] " Jan Kiszka
2011-10-20 22:02 ` Michael S. Tsirkin
2011-10-20 22:02 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-21 7:09 ` Jan Kiszka
2011-10-21 7:09 ` [Qemu-devel] " Jan Kiszka
2011-10-21 7:54 ` Michael S. Tsirkin
2011-10-21 7:54 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-21 9:27 ` Jan Kiszka
2011-10-21 9:27 ` [Qemu-devel] " Jan Kiszka
2011-10-21 10:57 ` Michael S. Tsirkin
2011-10-21 10:57 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-18 18:26 ` Jan Kiszka
2011-10-18 18:26 ` [Qemu-devel] " Jan Kiszka
2011-10-18 15:56 ` Michael S. Tsirkin
2011-10-18 15:56 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-18 15:58 ` Jan Kiszka
2011-10-18 15:58 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:28 ` [RFC][PATCH 29/45] pci-assign: Drop kvm_assigned_irq::host_irq initialization Jan Kiszka
2011-10-17 9:28 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:28 ` [RFC][PATCH 30/45] pci-assign: Rename assign_irq to assign_intx Jan Kiszka
2011-10-17 9:28 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:28 ` [RFC][PATCH 31/45] qemu-kvm: Refactor kvm_deassign_irq to kvm_device_irq_deassign Jan Kiszka
2011-10-17 9:28 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:28 ` [RFC][PATCH 32/45] pci-assign: Factor out deassign_irq Jan Kiszka
2011-10-17 9:28 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:28 ` [RFC][PATCH 33/45] qemu-kvm: Factor out kvm_device_intx_assign Jan Kiszka
2011-10-17 9:28 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:28 ` [RFC][PATCH 34/45] qemu-kvm: Factor out kvm_device_msi_assign Jan Kiszka
2011-10-17 9:28 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:28 ` [RFC][PATCH 35/45] pci-assign: Polish assigned_dev_update_msix_mmio Jan Kiszka
2011-10-17 9:28 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:28 ` [RFC][PATCH 36/45] qemu-kvm: Factor out kvm_device_msix_* services Jan Kiszka
2011-10-17 9:28 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:28 ` [RFC][PATCH 37/45] qemu-kvm: Clean up irqrouting API Jan Kiszka
2011-10-17 9:28 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:28 ` [RFC][PATCH 38/45] msi: Implement config notifiers for legacy MSI Jan Kiszka
2011-10-17 9:28 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:28 ` [RFC][PATCH 39/45] pci-assign: Use generic MSI support Jan Kiszka
2011-10-17 9:28 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:28 ` [RFC][PATCH 40/45] qemu-kvm: msix: Drop check for preexisting cap from msix_add_config Jan Kiszka
2011-10-17 9:28 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:28 ` [RFC][PATCH 41/45] msix: Drop unused msix_bar_size Jan Kiszka
2011-10-17 9:28 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:28 ` [RFC][PATCH 42/45] msix: Introduce msix_init_simple Jan Kiszka
2011-10-17 9:28 ` [Qemu-devel] " Jan Kiszka
2011-10-17 11:22 ` Michael S. Tsirkin
2011-10-17 11:22 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-17 11:27 ` Jan Kiszka
2011-10-17 11:27 ` [Qemu-devel] " Jan Kiszka
2011-10-17 14:28 ` Michael S. Tsirkin
2011-10-17 14:28 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-17 19:21 ` Jan Kiszka
2011-10-17 19:21 ` [Qemu-devel] " Jan Kiszka
2011-10-18 10:52 ` Michael S. Tsirkin
2011-10-18 10:52 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-18 11:02 ` Jan Kiszka
2011-10-18 11:02 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:28 ` [RFC][PATCH 43/45] msix: Allow to customize capability on init Jan Kiszka
2011-10-17 9:28 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:28 ` [RFC][PATCH 44/45] pci-assign: Use generic MSI-X support Jan Kiszka
2011-10-17 9:28 ` [Qemu-devel] " Jan Kiszka
2011-10-17 9:28 ` [RFC][PATCH 45/45] pci-assign: Fix coding style issues Jan Kiszka
2011-10-17 9:28 ` [Qemu-devel] " Jan Kiszka
2011-10-17 12:18 ` [RFC][PATCH 00/45] qemu-kvm: MSI layer rework for in-kernel irqchip support Avi Kivity
2011-10-17 12:18 ` [Qemu-devel] " Avi Kivity
2011-10-17 15:57 ` Michael S. Tsirkin
2011-10-17 15:57 ` [Qemu-devel] " Michael S. Tsirkin
2011-10-17 19:35 ` Jan Kiszka
2011-10-17 19:35 ` [Qemu-devel] " Jan Kiszka
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=20111017114055.GD4537@redhat.com \
--to=mst@redhat.com \
--cc=alex.williamson@redhat.com \
--cc=avi@redhat.com \
--cc=jan.kiszka@siemens.com \
--cc=kvm@vger.kernel.org \
--cc=mtosatti@redhat.com \
--cc=qemu-devel@nongnu.org \
/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.