Re: [Qemu-devel] [PATCH 1/2] return available ioeventfds count in kvm_has_many_ioeventfds()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



----- Original Message -----
> On 2012-03-13 13:00, Amos Kong wrote:
> > On 13/03/12 19:50, Jan Kiszka wrote:
> >> Please tag uq/master patches with "PATCH uq/master".
> >>
> >> On 2012-03-13 11:42, Amos Kong wrote:
> >>> Older kernels have a 6 device limit on the KVM io bus.
> >>> This patch makes kvm_has_many_ioeventfds() return available
> >>> ioeventfd count. ioeventfd will be disabled if there is
> >>> no 7 available ioeventfds.
> >>>
> >>> Signed-off-by: Amos Kong<akong@xxxxxxxxxx>
> >>> ---
> >>>   hw/virtio-pci.c |    2 +-
> >>>   kvm-all.c       |    9 +++------
> >>>   2 files changed, 4 insertions(+), 7 deletions(-)
> >>>
> >>> diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c
> >>> index a0fb7c1..d63f303 100644
> >>> --- a/hw/virtio-pci.c
> >>> +++ b/hw/virtio-pci.c
> >>> @@ -678,7 +678,7 @@ void virtio_init_pci(VirtIOPCIProxy *proxy,
> >>> VirtIODevice *vdev)
> >>>       pci_register_bar(&proxy->pci_dev, 0,
> >>>       PCI_BASE_ADDRESS_SPACE_IO,
> >>>                        &proxy->bar);
> >>>
> >>> -    if (!kvm_has_many_ioeventfds()) {
> >>> +    if (kvm_has_many_ioeventfds() != 7) {
> >>>           proxy->flags&= ~VIRTIO_PCI_FLAG_USE_IOEVENTFD;
> >>>       }
> >>>
> >>> diff --git a/kvm-all.c b/kvm-all.c
> >>> index 3c6b4f0..d12694b 100644
> >>> --- a/kvm-all.c
> >>> +++ b/kvm-all.c
> >>> @@ -78,7 +78,6 @@ struct KVMState
> >>>       int pit_in_kernel;
> >>>       int pit_state2;
> >>>       int xsave, xcrs;
> >>> -    int many_ioeventfds;
> >>>       int irqchip_inject_ioctl;
> >>>   #ifdef KVM_CAP_IRQ_ROUTING
> >>>       struct kvm_irq_routing *irq_routes;
> >>> @@ -510,8 +509,8 @@ static int kvm_check_many_ioeventfds(void)
> >>>           }
> >>>       }
> >>>
> >>> -    /* Decide whether many devices are supported or not */
> >>> -    ret = i == ARRAY_SIZE(ioeventfds);
> >>> +    /* If i equals to 7, many devices are supported */
> >>> +    ret = i;
> >>>
> >>>       while (i-->  0) {
> >>>           kvm_set_ioeventfd_pio_word(ioeventfds[i], 0, i, false);
> >>> @@ -1078,8 +1077,6 @@ int kvm_init(void)
> >>>       kvm_state = s;
> >>>       memory_listener_register(&kvm_memory_listener, NULL);
> >>>
> >>> -    s->many_ioeventfds = kvm_check_many_ioeventfds();
> >>> -
> >>>       cpu_interrupt_handler = kvm_handle_interrupt;
> >>>
> >>>       return 0;
> >>> @@ -1407,7 +1404,7 @@ int kvm_has_many_ioeventfds(void)
> >>>       if (!kvm_enabled()) {
> >>>           return 0;
> >>>       }
> >>> -    return kvm_state->many_ioeventfds;
> >>> +    return kvm_check_many_ioeventfds();
> >>
> >> And why are you dropping the caching of the
> >> kvm_check_many_ioeventfds()
> >> return value? Is kvm_has_many_ioeventfds not used outside init
> >> scopes?
> > 
> > Hi Jan,
> > 
> > In the past, kvm_state->many_ioeventfds is only updated once at the
> > beginning,
> 
> And the additional use case of patch 2 is not hot path either, right?

Hi Jan,

It's not hot, it's called during init virtio-pci devices.
 
> > I want to use kvm_check_many_ioeventfds() to check if available
> > ioeventfd exists
> > before starting ioeventfd each time.
> 
> OK, but than kvm_has_many_ioeventfds is not the right name for this
> function anymore. Call it "kvm_get_available_ioventfds" or so, but
> not
> in a away that implies a boolean return value.

Yeah, will fix it in v2.

Amos.
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux