• Sagi Grimberg's avatar
    IB/core: Introduce signature verbs API · 1b01d335
    Sagi Grimberg authored
    Introduce a verbs interface for signature-related operations.  A
    signature handover operation configures the layouts of data and
    protection attributes both in memory and wire domains.
    
    Signature operations are:
    
    - INSERT:
      Generate and insert protection information when handing over
      data from input space to output space.
    - validate and STRIP:
      Validate protection information and remove it when handing over
      data from input space to output space.
    - validate and PASS:
      Validate protection information and pass it when handing over
      data from input space to output space.
    
    Once the signature handover opration is done, the HCA will offload
    data integrity generation/validation while performing the actual data
    transfer.
    
    Additions:
    
    1. HCA signature capabilities in device attributes
        Verbs provider supporting signature handover operations fills
        relevant fields in device attributes structure returned by
        ib_query_device.
    
    2. QP creation flag IB_QP_CREATE_SIGNATURE_EN
        Creating a QP that will carry signature handover operations may
        require some special preparations from the verbs provider.  So we
        add QP creation flag IB_QP_CREATE_SIGNATURE_EN to declare that the
        created QP may carry out signature handover operations.  Expose
        signature support to verbs layer (no support for now).
    
    3. New send work request IB_WR_REG_SIG_MR
        Signature handover work request. This WR will define the signature
        handover properties of the memory/wire domains as well as the
        domains layout. The purpose of this work request is to bind all
        the needed information for the signature operation:
    
        - data to be transferred:  wr->sg_list (ib_sge).
          * The raw data, pre-registered to a single MR (normally, before
            signature, this MR would have been used directly for the data
            transfer)
        - data protection guards: sig_handover.prot (ib_sge).
          * The data protection buffer, pre-registered to a single MR, which
            contains the data integrity guards of the raw data blocks.
            Note that it may not always exist, only in cases where the user is
            interested in storing protection guards in memory.
        - signature operation attributes: sig_handover.sig_attrs.
          * Tells the HCA how to validate/generate the protection information.
    
        Once the work request is executed, the memory region that will
        describe the signature transaction will be the sig_mr.  The
        application can now go ahead and send the sig_mr.rkey or use the
        sig_mr.lkey for data transfer.
    
    4. New Verb ib_check_mr_status
        check_mr_status verb checks the status of the memory region post
        transaction.  The first check that may be used is
        IB_MR_CHECK_SIG_STATUS, which will indicate if any signature
        errors are pending for a specific signature-enabled ib_mr.  This
        verb is a lightwight check and is allowed to be taken from
        interrupt context.  An application must call this verb after it is
        known that the actual data transfer has finished.
    Signed-off-by: default avatarSagi Grimberg <sagig@mellanox.com>
    Signed-off-by: default avatarRoland Dreier <roland@purestorage.com>
    1b01d335
ib_verbs.h 73.7 KB