On 07/27/2018 07:26 AM, Halil Pasic wrote:
On 07/27/2018 01:17 PM, Cornelia Huck wrote:
On Fri, 27 Jul 2018 13:13:40 +0200
Halil Pasic <pasic@xxxxxxxxxxxxx> wrote:
@@ -65,6 +66,21 @@ static int vfio_ap_matrix_dev_create(void)
{
int ret;
+ mutex_init(&matrix_dev.lock);
+ INIT_LIST_HEAD(&matrix_dev.mdev_list);
+
+ /* Test if PQAP(QCI) instruction is available */
+ if (test_facility(12)) {
+ ret = ap_qci(&matrix_dev.info);
+ if (ret && (ret != -EOPNOTSUPP)) {
So, is facility 12 a pre-req for PQAP(QCI)? Can the code work if
matrix_dev.info is not populated?
Yes and yes. It's basically only used in vfio_ap_matrix_init() and it
has fallbacks.
Ok. So facility 12 is required but not sufficient for PQAP(QCI) to be
available? (Just asking as I cannot check the doc; if it works with
fallbacks I'm fine.)
I took a look at the ap_qci() function. It returns:
0: success
-EOPNOTSUPP: returned when an exception occurs executing the
PQAP(QCI) instruction
I conclude that if STFLE.12 is set, then the PQAP(QCI) instruction
should work. If -ENOPNOTSUPP is returned, then this would be a
serious error and I think we should return an error from this function.
AFAIR it should be sufficient in our case. My guess is that the non 0
return code stands for program exceptions that are not related to the
availability of QCI.