在 2018/8/22 下午6:09, Andrea Bolognani 写道:
On Wed, 2018-08-22 at 17:39 +0800, Yi Min Zhao wrote:
在 2018/8/21 下午9:19, Andrea Bolognani 写道:
On Tue, 2018-08-21 at 19:55 +0800, Yi Min Zhao wrote:
For zPCI address, if we use the same strategy as PCI part and user
wants to assign fid=0 to the specific device, he might encounter
assignment failure. At least, according to the doc, 0 shoud be a valid
value to assign to fid.
If the user wants to use a specific zPCI address they can simply
specify both attributes, eg. uid=1,fid=0 will work just fine with
the proposed approach and won't produce errors or cause a new zPCI
address to be automatically assigned.

If the user only specified fid=0 while leaving uid unspecified,
well, an address is going to be picked for them.
This would be an empty zpci address while parsing XML so that we might
pick a zpci address with non-zero fid. For example:

dev1: fid=0 (this address would be treated as an unassigned zpci address)
dev2 (no definition for both fid and uid)

Then the process of assigning addresses will iterate devices as type by
type.
If dev2 is processed before dev1, dev2's fid would be assigned by 0.
This causes
dev1's fid=1. The result doesn't match what the user wants.
This would be the same as specifying a partial PCI address such as

    <address type='pci' slot='0x00'/>

and getting an address with slot != 0x00 back: surprising, perhaps,
but that's the way it's been with PCI addresses forever so you can
assume users are familiar with it by now.

For zPCI addresses to be inconsistent with this behavior would be
utterly confusing; moreover, if the user really needs the uid and
fid to have certain values, all they have to do is specify both
and libvirt will not attempt to override them.
I tried as your idea. It makes everything complicated, especially
alloc/reserve/release
zpci address. If the user defines uid=1 and fid=0, we don't know whether
should
reserve fid. (uid=1 fid=0) is the same with (uid=1).
You should reserve it. The user can either

   * not specify zPCI information at all: automatic assignment will
     be performed, no error should be reported;

   * specify a *full* zPCI address: manual assignment, will result
     in either that exact address being used or an error;

   * specify partial information: missing properties will default
     to zero, which will probably cause errors eg. if only the uid
     is specified for a bunch of devices.

The last option is less predictable so it should probably never be
used. All of the above is consistent with how the PCI part works.

And then, zpci address instance could be a member of pci address structure?
I mean not using pointer at all?

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to