Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp442726imm; Fri, 21 Sep 2018 02:53:24 -0700 (PDT) X-Google-Smtp-Source: ANB0VdbJlaiQZWDrIMGpsIngb1hbvqfwxB2TDXbV3JvxNs9ncsmTQP4bDIoQdQKDko2sVIWoPvqf X-Received: by 2002:a62:7510:: with SMTP id q16-v6mr6285422pfc.225.1537523604186; Fri, 21 Sep 2018 02:53:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1537523604; cv=none; d=google.com; s=arc-20160816; b=v1TWQngZBhyPOqUjF3I9AX/Q4hPX8RrYScQI+KSX22t1WeCUAuMLHCqO/kKEfaQEQu YjPJ87DZVtG5KixXfYxcvef8khwCXBIajMbEV0KRwSLoYR91rsrnq55FCzDZ0yDMRm6v kxmPUwCQnFJFZnCCFXEHk2bLvaHOTObMIuZT+Hq/vZTgMKWl/LDOlX1GLYpOv+gxEaYU Qkycj7psNf3TbkNTaT1X6zZ+xAhM1ns/1HWRky7oQJc3olhUSS0kYi24TC56bjVQdxhd rh1f3rG5hEMLW/0ZmKpJBEV4P5uCkEukAAw7lHzxxSok3Ufwgzu9Tis38axGqnI5r1sQ vvVg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:content-language :content-transfer-encoding:in-reply-to:mime-version:user-agent:date :from:references:cc:to:subject; bh=7Aik+FYBACua5+ZdvDC55jqQJx8UJlZGANNpZ2dBufw=; b=LM+RDnA8sP4g9LfG3sBPA6CDyr7hwDhLSqL+146zbzVeAkN9aMdHBKG0amY8Je8Phe 8BFIugffr8NG1491CNwL43VsjlEsbInM1fL6m+s7MdNTK0huLIa1BTUWLlKUK1JR6jRt e4N11IlTOgpg3nNXfueGfy4cfTq0tEKP6rudmKqEOAIqGAhn+EJ1XoeTqhsiUm0G6j5M +DdddUAryTBt3NDIJ8+XgoQfmTi5Dp1miH10/xSpEWjcdsRptuRkxnUv+vFFXCQkGyd+ bH8/fbtlykicdrU74qyvqKVcfIZb/N9PTKykcNANp+EYFXPs4hMKDCQ1kFacp5LuOyDj SzQQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=ibm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r12-v6si849025pli.447.2018.09.21.02.53.08; Fri, 21 Sep 2018 02:53:24 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=ibm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389557AbeIUPk7 (ORCPT + 99 others); Fri, 21 Sep 2018 11:40:59 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:34460 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727681AbeIUPk6 (ORCPT ); Fri, 21 Sep 2018 11:40:58 -0400 Received: from pps.filterd (m0098414.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w8L9ncmR073155 for ; Fri, 21 Sep 2018 05:52:52 -0400 Received: from e06smtp01.uk.ibm.com (e06smtp01.uk.ibm.com [195.75.94.97]) by mx0b-001b2d01.pphosted.com with ESMTP id 2mmx7w8cef-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Fri, 21 Sep 2018 05:52:52 -0400 Received: from localhost by e06smtp01.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 21 Sep 2018 10:52:50 +0100 Received: from b06cxnps4076.portsmouth.uk.ibm.com (9.149.109.198) by e06smtp01.uk.ibm.com (192.168.101.131) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Fri, 21 Sep 2018 10:52:46 +0100 Received: from d06av24.portsmouth.uk.ibm.com (mk.ibm.com [9.149.105.60]) by b06cxnps4076.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id w8L9qjTC47251612 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Fri, 21 Sep 2018 09:52:45 GMT Received: from d06av24.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 8D9B94203F; Fri, 21 Sep 2018 12:52:31 +0100 (BST) Received: from d06av24.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 10E7442047; Fri, 21 Sep 2018 12:52:30 +0100 (BST) Received: from [10.0.2.15] (unknown [9.84.1.102]) by d06av24.portsmouth.uk.ibm.com (Postfix) with ESMTP; Fri, 21 Sep 2018 12:52:29 +0100 (BST) Subject: Re: [PATCH v10 06/26] s390: vfio-ap: sysfs interfaces to configure adapters To: Tony Krowiak Cc: Cornelia Huck , linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, freude@de.ibm.com, schwidefsky@de.ibm.com, heiko.carstens@de.ibm.com, borntraeger@de.ibm.com, kwankhede@nvidia.com, bjsdjshi@linux.vnet.ibm.com, pbonzini@redhat.com, alex.williamson@redhat.com, pmorel@linux.vnet.ibm.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, frankja@linux.ibm.com, Tony Krowiak References: <1536781396-13601-1-git-send-email-akrowiak@linux.vnet.ibm.com> <1536781396-13601-7-git-send-email-akrowiak@linux.vnet.ibm.com> <20180921114009.24e928d9.cohuck@redhat.com> From: Harald Freudenberger Date: Fri, 21 Sep 2018 11:52:45 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: <20180921114009.24e928d9.cohuck@redhat.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Content-Language: en-US X-TM-AS-GCONF: 00 x-cbid: 18092109-4275-0000-0000-000002BDAEC6 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 18092109-4276-0000-0000-000037C7B40E Message-Id: <94c1b044-29f8-f23f-69df-a1628cc9b3a4@linux.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:,, definitions=2018-09-21_04:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1011 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1807170000 definitions=main-1809210103 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 21.09.2018 11:40, Cornelia Huck wrote: > On Wed, 12 Sep 2018 15:42:56 -0400 > Tony Krowiak wrote: > >> From: Tony Krowiak >> >> Introduces two new sysfs attributes for the VFIO mediated >> matrix device for assigning AP adapters to and unassigning >> AP adapters from a mediated matrix device. The IDs of the >> AP adapters assigned to the mediated matrix device will be >> stored in an AP mask (APM). >> >> The bits in the APM, from most significant to least significant >> bit, correspond to AP adapter IDs (APID) 0 to 255. On >> some systems, the maximum allowable adapter number may be less >> than 255 - depending upon the host's AP configuration - and >> assignment may be rejected if the input adapter ID exceeds the >> limit. >> >> When an adapter is assigned, the bit corresponding to the APID >> will be set in the APM. Likewise, when an adapter is >> unassigned, the bit corresponding to the APID will be cleared >> from the APM. >> >> In order to successfully assign an adapter, the APQNs derived from >> the adapter ID being assigned and the queue indexes of all domains >> previously assigned: >> >> 1. Must be bound to the vfio_ap device driver. >> >> 2. Must not be assigned to any other mediated matrix device >> >> If there are no domains assigned to the mdev, then there must >> be an AP queue bound to the vfio_ap device driver with an >> APQN containing the APID, otherwise all domains >> subsequently assigned will fail because there will be no >> AP queues bound with an APQN containing the adapter ID. >> >> Assigning or un-assigning an AP adapter will be rejected if >> a guest using the mediated matrix device is running. >> >> The relevant sysfs structures are: >> >> /sys/devices/vfio_ap/matrix/ >> ...... [mdev_supported_types] >> ......... [vfio_ap-passthrough] >> ............ [devices] >> ...............[$uuid] >> .................. assign_adapter >> .................. unassign_adapter >> >> To assign an adapter to the $uuid mediated matrix device's APM, >> write the APID to the assign_adapter file. To unassign an adapter, >> write the APID to the unassign_adapter file. The APID is specified >> using conventional semantics: If it begins with 0x the number will >> be parsed as a hexadecimal number; if it begins with a 0 the number >> will be parsed as an octal number; otherwise, it will be parsed as a >> decimal number. >> >> For example, to assign adapter 173 (0xad) to the mediated matrix >> device $uuid: >> >> echo 173 > assign_adapter >> >> or >> >> echo 0xad > assign_adapter >> >> or >> >> echo 0255 > assign_adapter >> >> To unassign adapter 173 (0xad): >> >> echo 173 > unassign_adapter >> >> or >> >> echo 0xad > unassign_adapter >> >> or >> >> echo 0255 > unassign_adapter >> >> Signed-off-by: Tony Krowiak >> Reviewed-by: Halil Pasic >> Tested-by: Michael Mueller >> Tested-by: Farhan Ali >> Tested-by: Pierre Morel >> Signed-off-by: Christian Borntraeger >> --- >> drivers/s390/crypto/vfio_ap_ops.c | 295 +++++++++++++++++++++++++++++++++++++ >> 1 files changed, 295 insertions(+), 0 deletions(-) > (...) > >> +/** >> + * vfio_ap_mdev_verify_no_sharing >> + * >> + * 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. >> + * >> + * @kvm: the KVM guest >> + * @matrix: the AP matrix >> + * >> + * Returns 0 if the APQNs are not shared, otherwise; returns -EADDRINUSE. >> + */ >> +static int vfio_ap_mdev_verify_no_sharing(struct ap_matrix_mdev *matrix_mdev) >> +{ >> + int nbits; >> + struct ap_matrix_mdev *lstdev; >> + unsigned long apm[BITS_TO_LONGS(matrix_mdev->matrix.apm_max + 1)]; >> + unsigned long aqm[BITS_TO_LONGS(matrix_mdev->matrix.aqm_max + 1)]; > Can you please convert this to use a fixed-size array? I think > {apm,aqm}_max has an upper bound of 255? > > (Also, this can use DECLARE_BITMAP.) In ap_bus.h there are upper limit defines for this: #define AP_DEVICES 256        /* Number of AP devices. */ #define AP_DOMAINS 256        /* Number of 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. >> + */ >> + nbits = sizeof(apm) * BITS_PER_BYTE; >> + if (!bitmap_and(apm, matrix_mdev->matrix.apm, >> + lstdev->matrix.apm, nbits)) >> + continue; >> + >> + nbits = sizeof(aqm) * BITS_PER_BYTE; >> + if (!bitmap_and(aqm, matrix_mdev->matrix.aqm, >> + lstdev->matrix.aqm, nbits)) >> + continue; >> + >> + return -EADDRINUSE; >> + } >> + >> + return 0; >> +}