• Julian Wiedmann's avatar
    s390/qeth: allow cmd callbacks to return errnos · 4b7ae122
    Julian Wiedmann authored
    Error propagation from cmd callbacks currently works in a way where
    qeth_send_control_data_cb() picks the raw HW code from the response,
    and the cmd's originator later translates this into an errno.
    The callback itself only returns 0 ("done") or 1 ("expect more data").
    
    This is
    1. limiting, as the only means for the callback to report an internal
    error is to invent pseudo HW codes (such as IPA_RC_ENOMEM), that
    the originator then needs to understand. For non-IPA callbacks, we
    even provide a separate field in the IO buffer metadata (iob->rc) so
    the callback can pass back a return value.
    2. fragile, as the originator must take care to not translate any errno
    that is returned by qeth's own IO code paths (eg -ENOMEM). Also, any
    originator that forgets to translate the HW codes potentially passes
    garbage back to its caller. For instance, see
    commit 2aa48671 ("s390/qeth: translate SETVLAN/DELVLAN errors").
    
    Introduce a new model where all HW error translation is done within the
    callback, and the callback returns
    >  0, if it expects more data (as before)
    == 0, on success
    <  0, with an errno
    
    Start off with converting all callbacks to the new model that either
    a) pass back pseudo HW codes, or b) have a dependency on a specific
    HW error code. Also convert c) the one callback that uses iob->rc, and
    d) qeth_setadpparms_change_macaddr_cb() so that it can pass back an
    error back to qeth_l2_request_initial_mac() even when the cmd itself
    was successful.
    
    The old model remains supported: if the callback returns 0, we still
    propagate the response's HW error code back to the originator.
    Signed-off-by: default avatarJulian Wiedmann <jwi@linux.ibm.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    4b7ae122
qeth_core_main.c 182 KB