• Dave Jiang's avatar
    x86/asm: add iosubmit_cmds512() based on MOVDIR64B CPU instruction · 232bb01b
    Dave Jiang authored
    With the introduction of MOVDIR64B instruction, there is now an instruction
    that can write 64 bytes of data atomically.
    
    Quoting from Intel SDM:
    "There is no atomicity guarantee provided for the 64-byte load operation
    from source address, and processor implementations may use multiple
    load operations to read the 64-bytes. The 64-byte direct-store issued
    by MOVDIR64B guarantees 64-byte write-completion atomicity. This means
    that the data arrives at the destination in a single undivided 64-byte
    write transaction."
    
    We have identified at least 3 different use cases for this instruction in
    the format of func(dst, src, count):
    1) Clear poison / Initialize MKTME memory
       @dst is normal memory.
       @src in normal memory. Does not increment. (Copy same line to all
       targets)
       @count (to clear/init multiple lines)
    2) Submit command(s) to new devices
       @dst is a special MMIO region for a device. Does not increment.
       @src is normal memory. Increments.
       @count usually is 1, but can be multiple.
    3) Copy to iomem in big chunks
       @dst is iomem and increments
       @src in normal memory and increments
       @count is number of chunks to copy
    
    Add support for case #2 to support device that will accept commands via
    this instruction. We provide a @count in order to submit a batch of
    preprogrammed descriptors in virtually contiguous memory. This
    allows the caller to submit multiple descriptors to a device with a single
    submission. The special device requires the entire 64bytes descriptor to
    be written atomically and will accept MOVDIR64B instruction.
    Signed-off-by: default avatarDave Jiang <dave.jiang@intel.com>
    Acked-by: default avatarBorislav Petkov <bp@suse.de>
    Link: https://lore.kernel.org/r/157965022175.73301.10174614665472962675.stgit@djiang5-desk3.ch.intel.comSigned-off-by: default avatarVinod Koul <vkoul@kernel.org>
    232bb01b
io.h 12.9 KB