linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Halil Pasic <pasic@linux.ibm.com>
To: Pierre Morel <pmorel@linux.ibm.com>
Cc: borntraeger@de.ibm.com, 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, akrowiak@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 v4 3/7] s390: ap: associate a ap_vfio_queue and a matrix mdev
Date: Mon, 4 Mar 2019 03:09:35 +0100	[thread overview]
Message-ID: <20190304030935.525f4223@oc2783563651> (raw)
In-Reply-To: <1550849400-27152-4-git-send-email-pmorel@linux.ibm.com>

On Fri, 22 Feb 2019 16:29:56 +0100
Pierre Morel <pmorel@linux.ibm.com> wrote:

> We need to associate the ap_vfio_queue, which will hold the
> per queue information for interrupt with a matrix mediated device
> which hold the configuration and the way to the CRYCB.
[..]
> +static int vfio_ap_get_all_domains(struct ap_matrix_mdev *matrix_mdev, int apid)
> +{
> +	int apqi, apqn;
> +	int ret = 0;
> +	struct vfio_ap_queue *q;
> +	struct list_head q_list;
> +
> +	INIT_LIST_HEAD(&q_list);
> +
> +	for_each_set_bit_inv(apqi, matrix_mdev->matrix.aqm, AP_DOMAINS) {
> +		apqn = AP_MKQID(apid, apqi);
> +		q = vfio_ap_get_queue(apqn, &matrix_dev->free_list);
> +		if (!q) {
> +			ret = -EADDRNOTAVAIL;
> +			goto rewind;
> +		}
> +		if (q->matrix_mdev) {
> +			ret = -EADDRINUSE;

You tried to get the q from matrix_dev->free_list thus modulo races
q->matrix_mdev should be 0. This change breaks the error codes in a
sense that it becomes impossible to provoke EADDRINUSE (the proper
error code for taken by another matrix_mdev). 

> +			goto rewind;
> +		}
> +		list_move(&q->list, &q_list);
> +	}
> +	move_and_set(&q_list, &matrix_mdev->qlist, matrix_mdev);
>  	return 0;
> +rewind:
> +	move_and_set(&q_list, &matrix_dev->free_list, NULL);
> +	return ret;
>  }
> -
>  /**
> - * vfio_ap_mdev_verify_no_sharing
> + * vfio_ap_get_all_cards:
>   *
> - * Verifies that the APQNs derived from the cross product of the AP adapter IDs
> - * and AP queue indexes comprising the AP matrix are not configured for another
> - * mediated device. AP queue sharing is not allowed.
> + * @matrix_mdev: the matrix mediated device for which we want to associate
> + *		 all available queues with a given apqi.
> + * @apqi:	 The apqi which associated with all defined APID of the
> + *		 mediated device will define a AP queue.
>   *
> - * @matrix_mdev: the mediated matrix device
> + * We define a local list to put all queues we find on the matrix device
> + * free list when associating the apqi with all already defined apid for
> + * this matrix mediated device.
>   *
> - * Returns 0 if the APQNs are not shared, otherwise; returns -EADDRINUSE.
> + * If we can get all the devices we roll them to the mediated device list
> + * If we get errors we unroll them to the free list.
>   */
> -static int vfio_ap_mdev_verify_no_sharing(struct ap_matrix_mdev *matrix_mdev)
> +static int vfio_ap_get_all_cards(struct ap_matrix_mdev *matrix_mdev, int apqi)
>  {
> -	struct ap_matrix_mdev *lstdev;
> -	DECLARE_BITMAP(apm, AP_DEVICES);
> -	DECLARE_BITMAP(aqm, AP_DOMAINS);
> -
> -	list_for_each_entry(lstdev, &matrix_dev->mdev_list, node) {
> -		if (matrix_mdev == lstdev)
> -			continue;
> -
> -		memset(apm, 0, sizeof(apm));
> -		memset(aqm, 0, sizeof(aqm));
> -
> -		/*
> -		 * We work on full longs, as we can only exclude the leftover
> -		 * bits in non-inverse order. The leftover is all zeros.
> -		 */
> -		if (!bitmap_and(apm, matrix_mdev->matrix.apm,
> -				lstdev->matrix.apm, AP_DEVICES))
> -			continue;
> -
> -		if (!bitmap_and(aqm, matrix_mdev->matrix.aqm,
> -				lstdev->matrix.aqm, AP_DOMAINS))
> -			continue;
> -
> -		return -EADDRINUSE;
> +	int apid, apqn;
> +	int ret = 0;
> +	struct vfio_ap_queue *q;
> +	struct list_head q_list;
> +	struct ap_matrix_mdev *tmp = NULL;
> +
> +	INIT_LIST_HEAD(&q_list);
> +
> +	for_each_set_bit_inv(apid, matrix_mdev->matrix.apm, AP_DEVICES) {
> +		apqn = AP_MKQID(apid, apqi);
> +		q = vfio_ap_get_queue(apqn, &matrix_dev->free_list);
> +		if (!q) {
> +			ret = -EADDRNOTAVAIL;
> +			goto rewind;
> +		}
> +		if (q->matrix_mdev) {
> +			ret = -EADDRINUSE;

Same here!

Regards,
Halil

> +			goto rewind;
> +		}
> +		list_move(&q->list, &q_list);
>  	}

[..]


  parent reply	other threads:[~2019-03-04  2:09 UTC|newest]

Thread overview: 79+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-02-22 15:29 [PATCH v4 0/7] vfio: ap: AP Queue Interrupt Control Pierre Morel
2019-02-22 15:29 ` [PATCH v4 1/7] s390: ap: kvm: add PQAP interception for AQIC Pierre Morel
2019-02-25 18:36   ` Tony Krowiak
2019-02-26 11:47     ` Pierre Morel
2019-02-26 15:47       ` Tony Krowiak
2019-02-27  8:09         ` Pierre Morel
2019-02-27  9:13           ` Cornelia Huck
2019-02-27 10:16             ` Pierre Morel
2019-02-27 18:00           ` Tony Krowiak
2019-02-28  9:42             ` Christian Borntraeger
2019-02-28 11:03               ` Christian Borntraeger
2019-02-28 11:22                 ` Cornelia Huck
2019-02-28 13:16                   ` Pierre Morel
2019-02-28 13:52                     ` Cornelia Huck
2019-02-28 14:14                       ` Pierre Morel
2019-03-01 12:03                         ` Pierre Morel
2019-03-01 12:05                           ` Christian Borntraeger
2019-03-01 12:36                             ` Cornelia Huck
2019-03-01 15:32                               ` Pierre Morel
2019-02-28 13:10                 ` Pierre Morel
2019-02-28 15:36                 ` Tony Krowiak
2019-02-28 12:39               ` Halil Pasic
2019-02-28 14:12                 ` Pierre Morel
2019-02-28 16:51                   ` Halil Pasic
2019-03-01 12:10                     ` Pierre Morel
2019-02-28 15:43                 ` Tony Krowiak
2019-02-28 13:23               ` Pierre Morel
2019-02-28 13:44                 ` Christian Borntraeger
2019-02-28 13:47                   ` Pierre Morel
2019-02-28 14:07                     ` Halil Pasic
2019-02-28 14:13                       ` Pierre Morel
2019-02-28 15:45                   ` Tony Krowiak
2019-02-28 15:35               ` Tony Krowiak
2019-03-01  8:42                 ` Christian Borntraeger
2019-02-28  8:31     ` Christian Borntraeger
2019-02-22 15:29 ` [PATCH v4 2/7] s390: ap: new vfio_ap_queue structure Pierre Morel
2019-02-26 16:10   ` Tony Krowiak
2019-02-27  8:40     ` Pierre Morel
2019-02-27 20:35       ` Tony Krowiak
2019-02-22 15:29 ` [PATCH v4 3/7] s390: ap: associate a ap_vfio_queue and a matrix mdev Pierre Morel
2019-02-26 18:14   ` Tony Krowiak
2019-02-27  9:29     ` Pierre Morel
2019-02-27 20:14       ` Tony Krowiak
2019-02-27  9:32   ` Cornelia Huck
2019-02-27 10:21     ` Pierre Morel
2019-02-27 10:44     ` Pierre Morel
2019-02-27 20:53   ` Tony Krowiak
2019-03-04  2:09   ` Halil Pasic [this message]
2019-03-04 10:19     ` Pierre Morel
2019-03-05 22:17     ` Tony Krowiak
2019-03-12 21:39     ` Tony Krowiak
2019-03-13 10:19       ` Pierre Morel
2019-02-22 15:29 ` [PATCH v4 4/7] vfio: ap: register IOMMU VFIO notifier Pierre Morel
2019-02-27  9:42   ` Cornelia Huck
2019-02-27 10:22     ` Pierre Morel
2019-02-28  8:23   ` Christian Borntraeger
2019-02-28  8:48     ` Pierre Morel
2019-02-28 16:55       ` Halil Pasic
2019-03-01  7:51         ` Christian Borntraeger
2019-02-22 15:29 ` [PATCH v4 5/7] s390: ap: implement PAPQ AQIC interception in kernel Pierre Morel
2019-02-26 18:23   ` Tony Krowiak
2019-02-27  9:54     ` Pierre Morel
2019-02-27 18:17       ` Tony Krowiak
2019-02-27 18:18   ` Tony Krowiak
2019-02-28 20:20   ` Christian Borntraeger
2019-03-01  9:35     ` Pierre Morel
2019-03-04  1:57   ` Halil Pasic
2019-03-04  9:47     ` Pierre Morel
2019-02-22 15:29 ` [PATCH v4 6/7] s390: ap: Cleanup on removing the AP device Pierre Morel
2019-02-26 18:27   ` Tony Krowiak
2019-02-27  9:58     ` Pierre Morel
2019-03-04 13:02     ` Cornelia Huck
2019-03-08 22:43   ` Tony Krowiak
2019-03-11  8:31     ` Pierre Morel
2019-03-12 21:53       ` Tony Krowiak
2019-03-13 10:15         ` Pierre Morel
2019-02-22 15:30 ` [PATCH v4 7/7] s390: ap: kvm: Enable PQAP/AQIC facility for the guest Pierre Morel
2019-02-28 15:08 ` [PATCH v4 0/7] vfio: ap: AP Queue Interrupt Control Halil Pasic
2019-03-01  9:40   ` 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=20190304030935.525f4223@oc2783563651 \
    --to=pasic@linux.ibm.com \
    --cc=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=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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).