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

Re: [PATCH V8 2/2] libxl: Introduce basic virtio-mmio support on Arm


  • To: Oleksandr <olekstysh@xxxxxxxxx>
  • From: Anthony PERARD <anthony.perard@xxxxxxxxxx>
  • Date: Fri, 20 May 2022 16:22:23 +0100
  • Authentication-results: esa3.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
  • Cc: <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Julien Grall <julien.grall@xxxxxxx>, Wei Liu <wl@xxxxxxx>, Juergen Gross <jgross@xxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Bertrand Marquis <bertrand.marquis@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>, Oleksandr Tyshchenko <oleksandr_tyshchenko@xxxxxxxx>
  • Delivery-date: Fri, 20 May 2022 15:22:49 +0000
  • Ironport-data: A9a23:DZKpYKkSIIEjrhbtsfE6B6bo5gwBJkRdPkR7XQ2eYbSJt1+Wr1Gzt xJMUG2Cb/6JMGbzeIhxPYng90gFvJCAzNA1HQVpqn02HiMWpZLJC+rCIxarNUt+DCFioGGLT Sk6QoOdRCzhZiaE/n9BCpC48T8kk/vgqoPUUIYoAAgoLeNfYHpn2EsLd9IR2NYy24DkWVvV4 LsenuWEULOb828sWo4rw/rrRCNH5JwebxtB4zTSzdgS1LPvvyF94KA3fMldHFOhKmVgJcaoR v6r8V2M1jixEyHBqD+Suu2TnkUiGtY+NOUV45Zcc/DKbhNq/kTe3kunXRa1hIg+ZzihxrhMJ NtxWZOYb1wZGIeLw70nChQfKB1aBLIY3I6aCC3q2SCT5xWun3rExvxvCAc9PJEC+/YxCmZLn RAaAGlTNFbZ3bvwme/lDLk37iggBJCD0Ic3s3d8zTbfHLA+TIrKWani7t5ExjYgwMtJGJ4yY uJGMGU+PEmbO3WjPH8FEqouosDv2UXeWBNc63e3vJM8wlncmVkZPL/Fb4OOJ43iqd9utkSFo mPL+UzpDxdcM8aQoRKe6W6ljOLLmSL9WaoRGae++/osh0ecrkQZBQcKT1K9rb+8g1SnRtNEA 0UO/2wlqq1a3EuvQ9rmVhu0ukmYrwUcUNpdFe49wAyVw6+S6AGcbkA6STpGZM0jpdUBbzUg3 V+UnPvkHTVq9raSTBq15rqS6D+/JyURBWsDfjMfCxsI5cH5p4M+hQ6JScxseIayitD2Ai3h2 DCioy03hrFVhskOv4254FTGjjTqqYLASgod7x/SGGmi62tRZoG/YJezwUPG9vsGJ4GcJnGeu FAUls7Y6/oBZaxhjwTUHr9LRuvwoa/YbnuM2jaDAqXN6RyLoE6FV8cLuQsnKQBSDuI9ZmHNU RL67FY5CIBoAJe6UUNmS9vvVp9ylPC+SYuNuuP8NYQXPMUoHOOT1GQ3PBPLgTiw+KQ5uftnU ap3Z/pAGprz5U5P6DOtD9kQ3rYwrszV7TOCHMurp/hLPFf3WZJ0dVvmGAHXBgzBxPnYyDg5C v4GXydw9z1RUfflfg7c+pMJIFYBIBATXM6r8ZwGJr7de1E4QgnN7sM9Jpt4JORYc1l9zL+Ur hlRpGcFoLYAuZE3AVrTMS0yAF8edZ1+sWg6LUQR0aWAghAejXKUxP5HLfMfJOB/nMQ6lKIcZ 6RVKq2oX6UUIhyaqmt1UHUIhNE7HPhdrVnVZHTNjflWV8MIejElDfe/JVuzpHdUX3Xr3Sb8y pX5vj7mrVM4b1wKJK7rhDiHkztdYVB1dDpOYnb1
  • Ironport-hdrordr: A9a23:ZBQqxKE/OM+w1cmppLqE7seALOsnbusQ8zAXP0AYc3Jom+ij5q STdZMgpHjJYVcqKRQdcL+7VZVoLUmxyXcx2/h2AV7AZniFhILLFuFfBOLZqlWKcREWtNQttp uIG5IOceEYZmIasS+V2maFL+o=
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On Thu, May 19, 2022 at 08:16:16PM +0300, Oleksandr wrote:
> On 18.05.22 14:05, Anthony PERARD wrote:
> > On Tue, May 03, 2022 at 08:26:03PM +0300, Oleksandr Tyshchenko wrote:
> > > +    for (i = 0; i < d_config->num_disks; i++) {
> > > +        libxl_device_disk *disk = &d_config->disks[i];
> > > +
> > > +        if (disk->specification == LIBXL_DISK_SPECIFICATION_VIRTIO) {
> > > +            disk->base = alloc_virtio_mmio_base(gc, &virtio_mmio_base);
> > > +            if (!disk->base)
> > > +                return ERROR_FAIL;
> > > +
> > > +            disk->irq = alloc_virtio_mmio_irq(gc, &virtio_mmio_irq);
> > > +            if (!disk->irq)
> > > +                return ERROR_FAIL;
> > > +
> > > +            if (virtio_irq < disk->irq)
> > > +                virtio_irq = disk->irq;
> > > +            virtio_enabled = true;
> > > +
> > > +            LOG(DEBUG, "Allocate Virtio MMIO params for Vdev %s: IRQ %u 
> > > BASE 0x%"PRIx64,
> > > +                disk->vdev, disk->irq, disk->base);
> > > +        }
> > > +    }
> > > +
> > > +    if (virtio_enabled)
> > > +        nr_spis += (virtio_irq - 32) + 1;
> > Is it possible to update "nr_spis" inside the loop?
> 
> yes, but ...
> 
> 
> >   The added value
> > seems to be "number of virtio device + 1",
> 
>    ... not really ...
> 
> 
> >   so updating "nr_spis" and
> > adding +1 after the loop could work, right?
> 
>    ... from my understanding, we cannot just increment nr_spis by "one"
> inside a loop, we need to calculate it.
> 
> 
> Something like that (not tested):
> 
>        uint32_t spi;
> 
>        ...
> 
>        spi = irq - 32;
>        if (nr_spis <= spi)
>            nr_spis = spi + 1;
> 
> 
> Shall I update "nr_spis" inside the loop?
> 
> Are you asking because of eliminating "virtio_enabled" and/or "virtio_irq"
> locals? They are used down the code.

I'm asking because the calculation doesn't really make sense to me yet. At the
moment "virtio_irq-32+1" happen to be the "number of disk + 1" and we
have "nr_spis += " which I don't think makes sense with the "+1".

Doesn't "nr_spis" only need to be the highest irq value for the devices
we're adding? (Maybe with +1) (also -32 because I think I understand
what 32 stand for now) (also, the "num_irqs" loop just after this loop
seems to do exactly that)

But I think what this line of code needs the most is a comment.

> > Also, what is "32"? Is it "GUEST_VIRTIO_MMIO_SPI_FIRST - 1" ?
> 
> Although currently "GUEST_VIRTIO_MMIO_SPI_FIRST - 1" = "32", we cannot rely
> on this (I mean to use "GUEST_VIRTIO_MMIO_SPI_FIRST - 1"
> 
> instead of "32"),  because "32" has yet another meaning. This is an offset
> for SPI, the values before 32 are for private IRQs (PPI, SGI).

Do you think it could be possible to name that value? I've seen other
use of 32 in the same function that have probably the same meaning. But
if you don't have a good name, I guess we can also live a bit longer
with a plain "32".

Cheers,

-- 
Anthony PERARD



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.