Skip to content
  • Federico Vaga's avatar
    core:[drv incompat] raw_io() is an independent work · 2c8d6b8e
    Federico Vaga authored
    
    
    This breaks the complexity of the zio_arm_trigger() and the constraints
    on the raw_io() implementation. It will also semplify future
    implementation of the multi-shot.
    
    Actually, the idea is that we are not firing the trigger, we are just
    arming it. Of course it should be as fast as possible but we are not
    loosing any dead line. Theoretically, the arm event should happen a
    reasonable amount of time before the trigger fires, and the purpose of
    the raw_io() function is to prepare the hardware for the acquisition.
    
    The measured overhead of the scheduling is 2.6us under stress
    conditions.
    
    The measure was taken in the following conditions:
        virtual machine: 64bit 2x3.2Ghz 742M
        stress program : stress --cpu 2
        zio modules    : zio-zero, zio-buf-kmalloc, zio-trig-user
        measurement    : system-tap
    
    2.6us is the scheduling time.
    
    Another important difference it that on error is the scheduled work that
    will call zio_trigger_abort_disable() to clean up trigger's flag free
    allocated blocks.
    
    This patch introduce an incompatibility only with those drivers which
    complete their I/O within raw_io() (e.g. zio_zero). These drivers now
    must call zio_trigger_data_done to notify that the data is ready
    
    Signed-off-by: default avatarFederico Vaga <federico.vaga@cern.ch>
    2c8d6b8e