• D
    dmaengine: idxd: handle interrupt handle revoked event · 56fc39f5
    Dave Jiang 提交于
    "Interrupt handle revoked" is an event that happens when the driver is
    running on a guest kernel and the VM is migrated to a new machine.
    The device will trigger an interrupt that signals to the guest driver
    that the interrupt handles need to be replaced.
    
    The misc irq thread function calls a helper function to handle the
    event. The function uses the WQ percpu_ref to quiesce the kernel
    submissions. It then replaces the interrupt handles by requesting
    interrupt handle command for each I/O MSIX vector. Once the handle is
    updated, the driver will unblock the submission path to allow new
    submissions.
    
    The submitter will attempt to acquire a percpu_ref before submission. When
    the request fails, it will wait on the wq_resurrect 'completion'.
    
    The driver does anticipate the possibility of descriptors being submitted
    before the WQ percpu_ref is killed. If a descriptor has already been
    submitted, it will return with incorrect interrupt handle status. The
    descriptor will be re-submitted with the new interrupt handle on the
    completion path. For descriptors with incorrect interrupt handles,
    completion interrupt won't be triggered.
    
    At the completion of the interrupt handle refresh, the handling function
    will call idxd_int_handle_refresh_drain() to issue drain descriptors to
    each of the wq with associated interrupt handle. The drain descriptor will have
    interrupt request set but without completion record. This will ensure all
    descriptors with incorrect interrupt completion handle get drained and
    a completion interrupt is triggered for the guest driver to process them.
    Reviewed-by: NKevin Tian <kevin.tian@intel.com>
    Co-Developed-by: NSanjay Kumar <sanjay.k.kumar@intel.com>
    Signed-off-by: NDave Jiang <dave.jiang@intel.com>
    Link: https://lore.kernel.org/r/163528420189.3925689.18212568593220415551.stgit@djiang5-desk3.ch.intel.comSigned-off-by: NVinod Koul <vkoul@kernel.org>
    56fc39f5
idxd.h 15.2 KB