All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tony Krowiak <akrowiak@linux.ibm.com>
To: pmorel@linux.ibm.com, borntraeger@de.ibm.com
Cc: alex.williamson@redhat.com, cohuck@redhat.com,
	linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org,
	kvm@vger.kernel.org, frankja@linux.ibm.com, pasic@linux.ibm.com,
	david@redhat.com, schwidefsky@de.ibm.com,
	heiko.carstens@de.ibm.com, freude@linux.ibm.com,
	mimu@linux.ibm.com
Subject: Re: [PATCH v6 2/7] s390: ap: new vfio_ap_queue structure
Date: Thu, 28 Mar 2019 11:32:03 -0400	[thread overview]
Message-ID: <0477b20a-c882-c23d-5373-d461ef721f2c@linux.ibm.com> (raw)
In-Reply-To: <1b64ad7b-2a7c-b604-1adb-af400e7be516@linux.ibm.com>

On 3/28/19 9:06 AM, Pierre Morel wrote:
> On 26/03/2019 21:45, Tony Krowiak wrote:
>> On 3/22/19 10:43 AM, Pierre Morel wrote:
>>> The AP interruptions are assigned on a queue basis and
>>> the GISA structure is handled on a VM basis, so that
>>> we need to add a structure we can retrieve from both side
>>
>> s/side/sides/
> OK
> 
>>
>>> holding the information we need to handle PQAP/AQIC interception
>>> and setup the GISA.
>>
>> s/setup/set up/
> 
> OK
> 
> ...snip...
> 
>>> +
>>> +static int vfio_ap_mdev_reset_queue(struct vfio_ap_queue *q)
>>> +{
>>> +    struct ap_queue_status status;
>>> +    int retry = 1;
>>> +
>>> +    do {
>>> +        status = ap_zapq(q->apqn);
>>> +        switch (status.response_code) {
>>> +        case AP_RESPONSE_NORMAL:
>>> +            return 0;
>>> +        case AP_RESPONSE_RESET_IN_PROGRESS:
>>> +        case AP_RESPONSE_BUSY:
>>> +            msleep(20);
>>> +            break;
>>> +        default:
>>> +            /* things are really broken, give up */
>>
>> I'm not sure things are necessarily broken. We could end up here if
>> the AP is removed from the configuration via the SE or SCLP Deconfigure
>> Adjunct Processor command.
> 
> OK, but note that it is your original comment I just moved the function 
> here ;)

Yes, it is. I'm smarter now;)

> 
>>
>>> +            return -EIO;
>>> +        }
>>> +    } while (retry--);
>>> +
>>> +    return -EBUSY;
>>> +}
>>> +
>>>   static void vfio_ap_matrix_init(struct ap_config_info *info,
>>>                   struct ap_matrix *matrix)
>>>   {
>>> @@ -45,6 +107,7 @@ static int vfio_ap_mdev_create(struct kobject 
>>> *kobj, struct mdev_device *mdev)
>>>           return -ENOMEM;
>>>       }
>>> +    INIT_LIST_HEAD(&matrix_mdev->qlist);
>>>       vfio_ap_matrix_init(&matrix_dev->info, &matrix_mdev->matrix);
>>>       mdev_set_drvdata(mdev, matrix_mdev);
>>>       mutex_lock(&matrix_dev->lock);
>>> @@ -113,162 +176,189 @@ static struct attribute_group 
>>> *vfio_ap_mdev_type_groups[] = {
>>>       NULL,
>>>   };
>>> -struct vfio_ap_queue_reserved {
>>> -    unsigned long *apid;
>>> -    unsigned long *apqi;
>>> -    bool reserved;
>>> -};
>>> +static void vfio_ap_free_queue(int apqn, struct ap_matrix_mdev 
>>> *matrix_mdev)
>>> +{
>>> +    struct vfio_ap_queue *q;
>>> +
>>> +    q = vfio_ap_get_queue(apqn, &matrix_mdev->qlist);
>>> +    if (!q)
>>> +        return;
>>> +    q->matrix_mdev = NULL;
>>> +    vfio_ap_mdev_reset_queue(q);
>>
>> I'm wondering if it's necessary to reset the queue here. The only time
>> a queue is used is when a guest using the mdev device is started. When
>> that guest is terminated, the fd for the mdev device is /* Bits 41-47 must all be zeros */closed and the
>> mdev device's release callback is invoked. The release callback resets
>> the queues assigned to the mdev device. Is it really necessary to
>> reset the queue again when it is unassigned even if there would have
>> been no subsequent activity?
> 
> Yes, it is necessary, the queue can be re-assigned to another guest later.
> Release will only be called when unbinding the queue from the driver.

That is true, but if the queue is never used, there is nothing to reset.

> 
>>
>>> +    list_move(&q->list, &matrix_dev->free_list);
>>> +}
> 
> ...snip...
> 
>>> +    for_each_set_bit_inv(apid, matrix_mdev->matrix.apm, AP_DEVICES) {
>>> +        apqn = AP_MKQID(apid, apqi);
>>> +        q = vfio_ap_find_queue(apqn);
>>> +        if (!q) {
>>> +            ret = -EADDRNOTAVAIL;
>>> +            goto rewind;
>>> +        }
>>> +        if (q->matrix_mdev) {
>>
>> If somebody assigns the same domain a second time, the assignment will
>> fail because the matrix_mdev will already have been associated with the
>> queue. I don't think it is appropriate to fail the assignment if the
> 
> It is usual to report a failure in the case the operation requested has 
> already be done.
> But we can do as you want. Any other opinion?
> 
>> q->matrix_mdev is the same as the input matrix_mdev. This should be
>> changed to:
>>
>>      if (q->matrix_mdev != matrix_mdev)
> 
> You surely want to say: add this, not change to this. ;)

Yes

> 
>>
> 
> Thanks for commenting,
> 
> Regards,
> Pierre
> 
> 


  reply	other threads:[~2019-03-28 15:32 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-22 14:43 [PATCH v6 0/7] vfio: ap: AP Queue Interrupt Control Pierre Morel
2019-03-22 14:43 ` [PATCH v6 1/7] s390: ap: kvm: add PQAP interception for AQIC Pierre Morel
2019-03-26 18:57   ` Tony Krowiak
2019-03-27 16:06     ` Tony Krowiak
2019-03-28 12:43     ` Pierre Morel
2019-03-28 15:24       ` Tony Krowiak
2019-03-28 16:12   ` Tony Krowiak
2019-03-29  8:52     ` Pierre Morel
2019-03-29 13:02       ` Tony Krowiak
2019-03-22 14:43 ` [PATCH v6 2/7] s390: ap: new vfio_ap_queue structure Pierre Morel
2019-03-25  8:05   ` Harald Freudenberger
2019-03-28 13:12     ` Pierre Morel
2019-03-26 20:45   ` Tony Krowiak
2019-03-27 11:00     ` Harald Freudenberger
2019-03-28 12:53       ` Pierre Morel
2019-03-28 13:06     ` Pierre Morel
2019-03-28 15:32       ` Tony Krowiak [this message]
2019-03-28 16:06         ` Pierre Morel
2019-04-02 12:47   ` Pierre Morel
2019-03-22 14:43 ` [PATCH v6 3/7] s390: ap: setup relation betwen KVM and mediated device Pierre Morel
2019-03-28 16:12   ` Tony Krowiak
2019-03-28 16:27     ` Pierre Morel
2019-03-28 17:25       ` Tony Krowiak
2019-03-29  8:58         ` Pierre Morel
2019-03-29 13:06           ` Tony Krowiak
2019-03-22 14:43 ` [PATCH v6 4/7] vfio: ap: register IOMMU VFIO notifier Pierre Morel
2019-03-28 20:46   ` Tony Krowiak
2019-03-29  9:31     ` Pierre Morel
2019-03-29 13:14       ` Tony Krowiak
2019-03-22 14:43 ` [PATCH v6 5/7] s390: ap: implement PAPQ AQIC interception in kernel Pierre Morel
2019-03-22 14:43 ` [PATCH v6 6/7] s390: ap: Cleanup on removing the AP device Pierre Morel
2019-03-22 14:43 ` [PATCH v6 7/7] s390: ap: kvm: Enable PQAP/AQIC facility for the guest Pierre Morel

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=0477b20a-c882-c23d-5373-d461ef721f2c@linux.ibm.com \
    --to=akrowiak@linux.ibm.com \
    --cc=alex.williamson@redhat.com \
    --cc=borntraeger@de.ibm.com \
    --cc=cohuck@redhat.com \
    --cc=david@redhat.com \
    --cc=frankja@linux.ibm.com \
    --cc=freude@linux.ibm.com \
    --cc=heiko.carstens@de.ibm.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=mimu@linux.ibm.com \
    --cc=pasic@linux.ibm.com \
    --cc=pmorel@linux.ibm.com \
    --cc=schwidefsky@de.ibm.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.