On Mon, 2020-04-20 at 21:55 +0200, Boris Fiuczynski wrote:
On 4/10/20 2:06 PM, Andrea Bolognani wrote:
> On Thu, 2020-04-09 at 12:30 +0200, Shalini Chellathurai Saroja wrote:
> > The ZPCI address validation or autogeneration does not work as
> > expected in the following scenarios
> > 1. uid = 0 and fid = 0
> > 2. uid = 0 and fid > 0
> > 3. uid = 0 and fid not specified
> > 4. uid not specified and fid > 0
> > 5. 2 ZPCI devices with uid > 0 and fid not specified.
> >
> > This is because of the following reasons
> > 1. If uid = 0 or fid = 0 the code assumes that user has not specified
> > the corresponding address
> > 2. If either uid or fid is provided, the code assumes that both uid
> > and fid addresses are specified by the user.
>
> I'd have to dig up the old threads, but based on what I remember the
> behaviors you describe are entirely intentional.
>
> For PCI addresses, setting all parts of the address to zero or not
> setting it at all is equivalent, and we wanted to be consistent with
> that behavior for ZPCI; additionally, zero is not a valid value for
> uid so of course neither is the address uid=0 fid=0, which means that
> we're not preventing the user from specifying a valid address by
> conflating the all-zero address with the unspecified address.
>
> For partially-specified addresses, the behavior is also the same as
> PCI: any part you don't specify is considered to be zero, which
> results in
>
> uid=0 fid=0 -> uid=0 fid=0 -> address gets autogenerated
> uid=0 fid=x -> uid=0 fid=x -> address is rejected as invalid
> uid=0 -> uid=0 fid=0 -> address gets autogenerated
> fid=x -> uid=0 fid=x -> address is rejected as invalid
> uid=x -> uid=x fid=0 -> address is accepted
>
> So, just like for PCI addresses, you have basically two reasonable
> options: either don't specify any zPCI address and leave allocation
> entirely up to libvirt, or specify all of the addresses completely:
> anything in between will likely not work as you'd expect or want.
>
> Again, this is based purely on my recollection of design discussions
> that happened one and a half years ago, so I might have gotten some
> of the details wrong - in which case by all means call me out on
> that O:-)
>
Hi Andrea,
sorry for the delayed answer. I (and some others as well) lost some
emails on my IMAP account and I just found your answer today.
No apologies needed: I also took a long time to reply to your
message, and in my case there's no mail server malfunction that I
can assign the blame to O:-)
I can remember that you had a discussion with the original author of
the
zpci code. There are a few issues with the currently implemented "rules"
which partially are not even working as you outlined above in more
complex scenarios.
I disagree with this assessment - they work exactly as designed and
as described above. Whether we *want* them to behave that way... Now
that's a different topic :)
I think the disconnect lies in what the user's expectations are and
what libvirt actually implements. Basically the user expects that
* if either one of uid and fid is explictly assigned a value by
the user, then the guest will use that value - unless such value
is invalid, in which case libvirt will report an error;
* if either one of uid and fid is absent from the user-provided
configuration, then libvirt will automatically pick a valid value
for the attribute.
This is not how the current zPCI implementation works, or how PCI
address assignment works in libvirt; on the other hand, I think these
expectations are in fact completely reasonable, as the examples you
provide illustrate quite well.
I think you successfully convinced me that the current approach is
not good for users and we should fix it; my only doubt at this point
is whether can we safely do that without breaking libvirt's backwards
compatibility guarantees.
Dan, Laine, what's your take?
--
Andrea Bolognani / Red Hat / Virtualization