Re: [PATCH v5 11/13] KVM: s390: implement mediated device open callback

From: Tony Krowiak
Date: Fri Jun 08 2018 - 17:59:33 EST


On 06/07/2018 01:15 PM, Pierre Morel wrote:



We have internal structures like the ap_matrix and kvm_ap_matrix
which look like the bus/devices we had previously but are differently
or not at all integrated with the LDD.

What is LDD? Are you talking about dependencies between the vfio_ap device
driver and KVM? If so, see my arguments below.



Also I think that with a little data structure refactoring you can avoid most of
the code in the arch/s390/kvm.

How will structure refactoring help us avoid the code for updating the CRYCB
in the guest's SIE state description.



For example, storing the kvm pointer inside the kvm_ap_matrix and
maintaining a list of the kvm_ap_matrix structures allows to easily know
if a guest already has an associated mediated device.

How is that easier than storing the kvm pointer inside of the mediated matrix
device (i.e., struct ap_matrix_mdev) which also contains the struct kvm_ap_matrix?

you can put it in ap_matrix_mdev but just the name "kvm_ap_matrix" make the
last one a better candidate for my opinion.

It's been in ap_matrix_mdev since v2, but I'll consider moving it to kvm_ap_matrix.



How does that allow us to avoid the code in arch/s390/kvm?

This alone does not.

We still need the code
to update the CRYCB in the SIE block. I can obviously avoid placing that code in
kvm-ap.c and move it to the driver, but I already explained my reasoning for
keeping it in KVM. Let's face it, there is no way around the dependency between
the vfio_ap device driver and KVM unless guest matrix configuration is managed
solely by KVM through KVM interfaces.

We get the pointer to KVM from the VFIO interface.
That we both discuss on this is sterile.
The only one who could say what is right is a S390 KVM maintainer.
This would end the discussion.
My point was just to say that we have an alternative.



Why maintain a list of kvm_ap_matrix structures if we don't have to; it is stored
with the mediated matrix device which is passed in to all of the vfio_ap driver
callbacks.

Because using the vm_list which is a static in kvm makes you stick inside the kvm code.

I understand your point here, but even if we did maintain a list of kvm_ap_matrix structures,
we still need the kvm code to configure the guest's CRYCB and eventually ECA.28. There is
also code in kvm-ap.c that is called from KVM. The idea behind kvm-ap.c is that all code
related to configuration of AP structures in KVM is in this one spot.