• Nicholas Bellinger's avatar
    qla2xxx: Convert to percpu_ida session tag pre-allocation · 51a07f84
    Nicholas Bellinger authored
    This patch converts qla2xxx target code to use generic percpu_ida
    tag allocation provided by target-core, thus removing the original
    kmem_cache_zalloc() for each struct qla_tgt_cmd descriptor in the
    incoming ATIO packet fast-path.
    
    This includes the conversion of qlt_handle_cmd_for_atio() to perform
    qla_tgt_sess lookup before dispatching a command descriptor into
    qla_tgt_wq process context, along with handling the case where no
    active session exists, and subsequently kicking off a seperate
    process context for qlt_create_sess_from_atio() to create a new one.
    
    It also includes moving tag allocation into generic code within
    qlt_get_tag(), so that the same logic can be shared between
    qlt_handle_cmd_for_atio() + qlt_create_sess_from_atio() contexts.
    Also, __qlt_do_work() has been made generic between both normal
    process context in qlt_do_work() + qlt_create_sess_from_atio().
    
    Next, update qlt_free_cmd() to release the percpu-ida tags, and
    drop the now-unused global qla_tgt_cmd_cachep.
    
    Finally in tcm_qla2xxx code, tcm_qla2xxx_check_initiator_node_acl()
    has been updated to use transport_init_session_tags() along with a
    hardcoded TCM_QLA2XXX_DEFAULT_TAGS=2088 as the number of qla_tgt_cmd
    descriptors to pre-allocate per qla_tgt_sess instance.
    
    (Use ha->fw_xcb_count if available to calculate num_tags, and
     also factor in extra pad tags - Quinn)
    
    Cc: Saurav Kashyap <saurav.kashyap@qlogic.com>
    Cc: Quinn Tran <quinn.tran@qlogic.com>
    Cc: Giridhar Malavali <giridhar.malavali@qlogic.com>
    Cc: Chad Dupuis <chad.dupuis@qlogic.com>
    Cc: Roland Dreier <roland@kernel.org>
    Cc: Christoph Hellwig <hch@lst.de>
    Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
    51a07f84
qla_target.h 29.3 KB