• Antonio Nino Diaz's avatar
    multi console: Assert that consoles aren't registered twice · c2e05bb7
    Antonio Nino Diaz authored
    
    
    In the multi console driver, allowing to register the same console more
    than once may result in an infinte loop when putc is called.
    
    If, for example, a boot message is trying to be printed, but the
    consoles in the loop in the linked list are runtime consoles, putc will
    iterate forever looking for a console that can print boot messages (or
    a NULL pointer that will never come).
    
    This loop in the linked list can occur after restoring the system from a
    system suspend. The boot console is registered during the cold boot in
    BL31, but the runtime console is registered even in the warm boot path.
    Consoles are always added to the start of the linked list when they are
    registered, so this it what should happen if they were actually
    different structures:
    
       console_list -> NULL
       console_list -> BOOT -> NULL
       console_list -> RUNTIME -> BOOT -> NULL
       console_list -> RUNTIME -> RUNTIME -> BOOT -> NULL
    
    In practice, the two runtime consoles are the same one, so they create
    this loop:
    
       console_list -> RUNTIME -.    X -> BOOT -> NULL
                           ^    |
                           `----'
    
    This patch adds an assertion to detect this problem. The assertion will
    fail whenever the same structure tries to be registered while being on
    the list.
    
    In order to assert this, console_is_registered() has been implemented.
    It returns 1 if the specified console is registered, 0 if not.
    
    Change-Id: I922485e743775ca9bd1af9cbd491ddd360526a6d
    Signed-off-by: default avatarAntonio Nino Diaz <antonio.ninodiaz@arm.com>
    c2e05bb7
multi_console.S 9.05 KB