Re: [PATCH v6 2/7] s390: ap: new vfio_ap_queue structure

From: Pierre Morel
Date: Thu Mar 28 2019 - 08:53:37 EST


On 27/03/2019 12:00, Harald Freudenberger wrote:
On 26.03.19 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

...snip...

+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 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?
When I understand this here right this code is called when a queue goes
away from the guest but is still reserved for use by the vfio dd. So it is
possible to assign the queue now to another guest. But then it makes
sense to clear all the entries in the millicode queue because a pending
reply could be "received" by the wrong guest.

If this function is just called on remove of a queue device where the
device goes back to the AP bus, a reset is not needed.

You are right Harald, the function is called when un-assigning a queue from a mediated device, so it must be reset before to assign it to another.


Regards,
Pierre

--
Pierre Morel
Linux/KVM/QEMU in BÃblingen - Germany