All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tony Krowiak <akrowiak@linux.vnet.ibm.com>
To: Pierre Morel <pmorel@linux.vnet.ibm.com>,
	linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org,
	kvm@vger.kernel.org
Cc: freude@de.ibm.com, schwidefsky@de.ibm.com,
	heiko.carstens@de.ibm.com, borntraeger@de.ibm.com,
	cohuck@redhat.com, kwankhede@nvidia.com,
	bjsdjshi@linux.vnet.ibm.com, pbonzini@redhat.com,
	alex.williamson@redhat.com, alifm@linux.vnet.ibm.com,
	mjrosato@linux.vnet.ibm.com, jjherne@linux.vnet.ibm.com,
	thuth@redhat.com, pasic@linux.vnet.ibm.com, berrange@redhat.com,
	fiuczy@linux.vnet.ibm.com, buendgen@de.ibm.com
Subject: Re: [PATCH v4 08/15] KVM: s390: interfaces to (de)configure guest's AP matrix
Date: Thu, 3 May 2018 10:41:39 -0400	[thread overview]
Message-ID: <7a733e41-3956-6828-9efa-899c9a954c20@linux.vnet.ibm.com> (raw)
In-Reply-To: <54e4c3ef-0750-981b-7b0e-6b18d1a77c3c@linux.vnet.ibm.com>

On 05/02/2018 10:57 AM, Pierre Morel wrote:
> On 25/04/2018 18:21, Tony Krowiak wrote:
>> On 04/23/2018 09:46 AM, Pierre Morel wrote:
>>> On 15/04/2018 23:22, Tony Krowiak wrote:
>>>> Provides interfaces to assign AP adapters, usage domains
>>>> and control domains to a KVM guest.
>>>>
> ...
>>>> +/**
>>>> + * kvm_ap_matrix_create
>>>> + *
>>>> + * Create an AP matrix to hold a configuration of AP adapters, 
>>>> domains and
>>>> + * control domains.
>>>> + *
>>>> + * @ap_matrix: holds the matrix that is created
>>>> + *
>>>> + * Returns 0 if the matrix is successfully created. Returns an 
>>>> error if an APQN
>>>> + * derived from the cross product of the AP adapter IDs and AP 
>>>> queue indexes
>>>> + * comprising the AP matrix is configured for another guest.
>>>> + */
>>>> +int kvm_ap_matrix_create(struct kvm_ap_matrix **ap_matrix);
>>>
>>> why not simply return the pointer?
>>
>> The function returns a value indicating the reason a matrix could not 
>> be created.
>> Returning a NULL pointer provides no clue as to why the call failed.
>
> That is why the ERR_PTR exist :)

The point it moot, I'm getting rid of this function call and including the
struct kvm_ap_matrix as a static member of the parent struct ap_matrix_mdev
and not a pointer.

>
>
>
> ...
>>>> + * Returns 0 if the APQNs are valid, otherwise; returns -EBUSY.
>>>> + */
>>>> +static int kvm_ap_validate_queue_sharing(struct kvm *kvm,
>>>> +                     struct kvm_ap_matrix *matrix)
>>>> +{
>>>> +    struct kvm *vm;
>>>> +    unsigned long *apm, *aqm;
>>>> +    unsigned long apid, apqi;
>>>> +
>>>> +
>>>> +    /* No other VM may share an AP Queue with the input VM */
>>>
>>> I wonder if these functions and structures should really belong to KVM.
>>> The only have sense with the VFIO driver.
>>> My opinion is that they belong there, in the VFIO driver code.
>>
>> I disagree for two reasons:
>>
>> 1. The vfio_ap driver should not have to know how to configure the KVM
>>    guest's matrix nor anything else about KVM for that matter.
>>
>> 2. The interfaces and structures defined in kvm-ap.h and implemented
>> in kvm-ap.c don't have anything to do with VFIO and can stand alone
>>    to be used by any client code to configure a guest's matrix.
>
> Doing this you will have to change KVM if the AP VFIO matrix protocol 
> to access the queues change.
> i.e. suppose some day the queues may be shared between guests.
> ...

The kvm_ap_configure_matrix(kvm, matrix) interface configures the APM, 
AQM and ADM in the
guest's CRYCB which implies AP instructions are being interpreted. There 
is nothing in SIE
precluding the sharing of AP queues between guests using SIE to 
interpret AP instructions,
it is my opinion - along with several others - that this is not 
advisable given the
results are not predictable, not to mention the security concerns. If 
the protocol to access
queues changes, then we create a different interface. The other option 
is to include a flag
on the kvm_ap_configure_matrix(kvm, matrix) interface to indicate 
whether sharing is
allowed. I don't like this, because we have no way of knowing if the 
caller has taken the
proper care to ensure the VM sharing the queue should be allowed access. 
Besides, when
queue sharing is implemented, it is my opinion that we will intercept 
the AP instructions
and the matrix will not be configured in the CRYCB. I stick by my 
response above.

>
>>>> +static int kvm_ap_matrix_apm_create(struct kvm_ap_matrix *ap_matrix,
>>>> +                    struct ap_config_info *config)
>>>> +{
>>>> +    int apm_max = (config && config->apxa) ? config->Na + 1 : 16;
>>>
>>> At this moment you already know the format of the crycb.
>>
>> How?
>
> you calculated this in kvm_ap_build_crycbd() which is called from 
> kvm_s390_crypto_init()
> itself called from kvm_arch_init_vm().
> It is when starting the VM.

This structure is used by the vfio_ap driver to store the mediated 
matrix device's matrix
configuration as well as to configure the CRYCB. The mediated device's 
matrix is
configured before the guest is started ... it is the means for 
configuring the guest's
matrix after all. The bottom line is, this function will be called long 
before the
kvm_ap_build_crycbd() function is called.

Having said that, I am including the struct kvm_ap_matrix as a static 
field in
struct ap_matrix_mdev - i.e., not a pointer. Consequently, the apm_max, 
aqm_max
and adm_max fields will be set by the driver when the mediated matrix 
device is
created.

>
>
> kvm_ap_matrix_apm_create() is called much later when realizing the device

The kvm_ap_matrix_apm_create() is called by the kvm_ap_matrix_create() 
which is called when
the mediated matrix device is created - i.e., the vfio_ap_mdev_create() 
function is vfio_ap_ops.c.
The mediated device is created when the UUID is written to the sysfs 
create file. The mediated
device is used when the guest is started to configure it's CRYCB, so the 
kvm_ap_matrix_apm_create()
is called long before the device is realized.

Again the point is moot because I am getting rid of the dynamic 
allocation of struct kvm_ap_matrix.

>
>
> ...
>
>
>

  reply	other threads:[~2018-05-03 14:41 UTC|newest]

Thread overview: 86+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-15 21:22 [PATCH v4 00/15] s390: vfio-ap: guest dedicated crypto adapters Tony Krowiak
2018-04-15 21:22 ` [PATCH v4 01/15] s390: zcrypt: externalize AP instructions available function Tony Krowiak
2018-04-16  8:44   ` Pierre Morel
2018-04-16 12:11     ` Cornelia Huck
2018-04-17 13:31       ` Tony Krowiak
2018-04-17 16:56         ` Cornelia Huck
2018-04-17 18:14           ` Tony Krowiak
     [not found]           ` <db4245ec-0191-2c32-5c1c-12af50b944c6@linux.vnet.ibm.com>
2018-04-23  7:04             ` Cornelia Huck
2018-04-16 15:59   ` Pierre Morel
     [not found]     ` <OFF71B62BB.95581C62-ON00258272.00264957-C1258272.0026A1CA@notes.na.collabserv.com>
2018-04-17 12:44       ` Pierre Morel
2018-05-04  7:19   ` David Hildenbrand
2018-05-07 14:02     ` Tony Krowiak
2018-05-07 14:55       ` David Hildenbrand
2018-04-15 21:22 ` [PATCH v4 02/15] KVM: s390: reset crypto attributes for all vcpus Tony Krowiak
2018-04-17 11:34   ` Cornelia Huck
2018-04-17 13:47     ` Tony Krowiak
2018-04-17 14:09       ` Cornelia Huck
2018-04-17 14:29   ` Halil Pasic
2018-04-17 14:55     ` Tony Krowiak
2018-04-17 15:10       ` Cornelia Huck
2018-04-17 17:54         ` Tony Krowiak
2018-04-15 21:22 ` [PATCH v4 03/15] KVM: s390: refactor crypto initialization Tony Krowiak
2018-04-16  8:56   ` Pierre Morel
     [not found]     ` <OFE3FE11B1.8E1BDDEF-ON00258272.002AEDB1-C1258272.002B06EF@notes.na.collabserv.com>
2018-04-17 10:10       ` Cornelia Huck
2018-04-17 10:10         ` Cornelia Huck
2018-04-17 14:26         ` Tony Krowiak
2018-04-17 15:21           ` Cornelia Huck
2018-04-17 18:08             ` Tony Krowiak
2018-04-18  7:49               ` Cornelia Huck
2018-04-22 14:52                 ` Tony Krowiak
2018-04-23  7:03                   ` Cornelia Huck
2018-04-24 13:01                     ` Tony Krowiak
2018-04-24 13:13                       ` Cornelia Huck
2018-04-17 14:15     ` Tony Krowiak
2018-04-17 15:52       ` Pierre Morel
2018-04-22 21:11         ` Tony Krowiak
2018-04-17 14:30   ` Tony Krowiak
2018-04-15 21:22 ` [PATCH v4 04/15] KVM: s390: CPU model support for AP virtualization Tony Krowiak
2018-04-15 21:22 ` [PATCH v4 05/15] KVM: s390: enable/disable AP interpretive execution Tony Krowiak
2018-04-16 10:51   ` Pierre Morel
2018-04-16 11:13     ` Pierre Morel
2018-04-16 11:52       ` Halil Pasic
2018-04-17 15:12         ` Tony Krowiak
2018-04-17 15:09       ` Tony Krowiak
2018-04-17 15:02     ` Tony Krowiak
2018-04-17 16:13       ` Pierre Morel
2018-04-17 16:22         ` Tony Krowiak
2018-04-17 16:55           ` Pierre Morel
2018-04-17 18:11             ` Tony Krowiak
2018-04-18  8:31               ` Pierre Morel
2018-04-19 14:28                 ` Tony Krowiak
2018-04-17 16:34         ` Tony Krowiak
2018-04-16 11:12   ` Halil Pasic
2018-04-17 15:11     ` Tony Krowiak
2018-04-15 21:22 ` [PATCH v4 06/15] s390: vfio-ap: base implementation of VFIO AP device driver Tony Krowiak
2018-04-15 21:22 ` [PATCH v4 07/15] s390: vfio-ap: register matrix device with VFIO mdev framework Tony Krowiak
2018-04-15 21:22 ` [PATCH v4 08/15] KVM: s390: interfaces to (de)configure guest's AP matrix Tony Krowiak
2018-04-16  5:04   ` kbuild test robot
2018-04-16  5:04     ` kbuild test robot
2018-04-23 13:46   ` Pierre Morel
2018-04-25 16:21     ` Tony Krowiak
2018-05-02 14:57       ` Pierre Morel
2018-05-03 14:41         ` Tony Krowiak [this message]
2018-05-03 16:01           ` Pierre Morel
2018-05-07 14:14             ` Tony Krowiak
2018-04-15 21:22 ` [PATCH v4 09/15] s390: vfio-ap: sysfs interfaces to configure adapters Tony Krowiak
2018-04-15 21:22 ` [PATCH v4 10/15] s390: vfio-ap: sysfs interfaces to configure domains Tony Krowiak
2018-04-15 21:22 ` [PATCH v4 11/15] s390: vfio-ap: sysfs interfaces to configure control domains Tony Krowiak
2018-04-15 21:22 ` [PATCH v4 12/15] s390: vfio-ap: sysfs interface to view matrix mdev matrix Tony Krowiak
2018-04-15 21:22 ` [PATCH v4 13/15] KVM: s390: configure the guest's AP devices Tony Krowiak
2018-04-16 13:05   ` Pierre Morel
2018-04-16 14:51     ` Halil Pasic
2018-04-17 16:12       ` Tony Krowiak
2018-04-17 16:08     ` Tony Krowiak
2018-04-17 16:18       ` Pierre Morel
2018-04-17 16:36         ` Tony Krowiak
2018-04-18 11:56   ` Pierre Morel
2018-04-22 14:54     ` Tony Krowiak
2018-04-15 21:22 ` [PATCH v4 14/15] s390: vfio-ap: implement VFIO_DEVICE_GET_INFO ioctl Tony Krowiak
2018-04-15 21:22 ` [PATCH v4 15/15] s390: doc: detailed specifications for AP virtualization Tony Krowiak
2018-04-16 13:13   ` Pierre Morel
2018-04-16 13:53     ` Cornelia Huck
2018-04-17 16:16       ` Tony Krowiak
2018-04-17 16:14     ` Tony Krowiak
2018-04-17 16:25       ` Pierre Morel
2018-04-17 16:37         ` Tony Krowiak

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7a733e41-3956-6828-9efa-899c9a954c20@linux.vnet.ibm.com \
    --to=akrowiak@linux.vnet.ibm.com \
    --cc=alex.williamson@redhat.com \
    --cc=alifm@linux.vnet.ibm.com \
    --cc=berrange@redhat.com \
    --cc=bjsdjshi@linux.vnet.ibm.com \
    --cc=borntraeger@de.ibm.com \
    --cc=buendgen@de.ibm.com \
    --cc=cohuck@redhat.com \
    --cc=fiuczy@linux.vnet.ibm.com \
    --cc=freude@de.ibm.com \
    --cc=heiko.carstens@de.ibm.com \
    --cc=jjherne@linux.vnet.ibm.com \
    --cc=kvm@vger.kernel.org \
    --cc=kwankhede@nvidia.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=mjrosato@linux.vnet.ibm.com \
    --cc=pasic@linux.vnet.ibm.com \
    --cc=pbonzini@redhat.com \
    --cc=pmorel@linux.vnet.ibm.com \
    --cc=schwidefsky@de.ibm.com \
    --cc=thuth@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.