• Tony Krowiak's avatar
    s390: vfio-ap: sysfs interfaces to configure domains · 3211da0c
    Tony Krowiak authored
    Introduces two new sysfs attributes for the VFIO mediated
    matrix device for assigning AP domains to and unassigning
    AP domains from a mediated matrix device. The IDs of the
    AP domains assigned to the mediated matrix device will be
    stored in an AP queue mask (AQM).
    
    The bits in the AQM, from most significant to least
    significant bit, correspond to AP queue index (APQI) 0 to
    255 (note that an APQI is synonymous with with a domain ID).
    On some systems, the maximum allowable domain number may be
    less than 255 - depending upon the host's AP configuration -
    and assignment may be rejected if the input domain ID exceeds
    the limit.
    
    When a domain is assigned, the bit corresponding to the APQI
    will be set in the AQM. Likewise, when a domain is unassigned,
    the bit corresponding to the APQI will be cleared from the AQM.
    
    In order to successfully assign a domain, the APQNs derived from
    the domain ID being assigned and the adapter numbers of all
    adapters 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 adapters assigned to the mdev, then there must
    be an AP queue bound to the vfio_ap device driver with an
    APQN containing the domain ID (i.e., APQI), otherwise all
    adapters subsequently assigned will fail because there will be no
    AP queues bound with an APQN containing the APQI.
    
    Assigning or un-assigning an AP domain will also 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_domain
    .................. unassign_domain
    
    To assign a domain to the $uuid mediated matrix device,
    write the domain's ID to the assign_domain file. To
    unassign a domain, write the domain's ID to the
    unassign_domain file. The ID is specified using
    conventional semantics: If it begins with 0x, the number
    will be parsed as a hexadecimal (case insensitive) number;
    if it begins with 0, it will be parsed as an octal number;
    otherwise, it will be parsed as a decimal number.
    
    For example, to assign domain 173 (0xad) to the mediated matrix
    device $uuid:
    
    	echo 173 > assign_domain
    
    	or
    
    	echo 0255 > assign_domain
    
    	or
    
    	echo 0xad > assign_domain
    
    To unassign domain 173 (0xad):
    
    	echo 173 > unassign_domain
    
    	or
    
    	echo 0255 > unassign_domain
    
    	or
    
    	echo 0xad > unassign_domain
    Signed-off-by: default avatarTony Krowiak <akrowiak@linux.ibm.com>
    Reviewed-by: default avatarHalil Pasic <pasic@linux.ibm.com>
    Reviewed-by: default avatarCornelia Huck <cohuck@redhat.com>
    Tested-by: default avatarMichael Mueller <mimu@linux.ibm.com>
    Tested-by: default avatarFarhan Ali <alifm@linux.ibm.com>
    Tested-by: default avatarPierre Morel <pmorel@linux.ibm.com>
    Message-Id: <20180925231641.4954-8-akrowiak@linux.vnet.ibm.com>
    Signed-off-by: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
    3211da0c
vfio_ap_ops.c 14.5 KB