• Takashi Iwai's avatar
    ALSA: seq: virmidi: Offload the output event processing · f7debfe5
    Takashi Iwai authored
    The virmidi sequencer stuff tries to translate the rawmidi bytes to
    sequencer events and deliver the packets at trigger callback.  The
    amount of the whole process of these translations and deliveries
    depends on the incoming rawmidi bytes, and we have no limit for that;
    this was the cause of a CPU soft lockup that had been reported and
    fixed recently.
    
    Although we've fixed the soft lockup by putting the temporary unlock
    and cond_resched(), it's rather a quick band aid.  In this patch,
    meanwhile, the event parsing and delivery process is offloaded to a
    dedicated work, and the trigger callback just kicks it off.  It has
    three merits, at least:
    
    - The processing is always done in a sleepable context, which can
      assure the event delivery with non-atomic flag without hackish
      is_atomic() usage.
    
    - Other relevant codes can be simplified, reducing the lines
    
    - It makes me happier
    Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    f7debfe5
seq_virmidi.c 14.2 KB